@qwickapps/server 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/core/control-panel.d.ts.map +1 -1
  3. package/dist/core/control-panel.js +41 -0
  4. package/dist/core/control-panel.js.map +1 -1
  5. package/dist/core/guards.d.ts.map +1 -1
  6. package/dist/core/guards.js +77 -0
  7. package/dist/core/guards.js.map +1 -1
  8. package/dist/core/health-manager.d.ts +4 -0
  9. package/dist/core/health-manager.d.ts.map +1 -1
  10. package/dist/core/health-manager.js +6 -1
  11. package/dist/core/health-manager.js.map +1 -1
  12. package/dist/core/plugin-registry.d.ts +55 -5
  13. package/dist/core/plugin-registry.d.ts.map +1 -1
  14. package/dist/core/plugin-registry.js +57 -19
  15. package/dist/core/plugin-registry.js.map +1 -1
  16. package/dist/core/types.d.ts +2 -0
  17. package/dist/core/types.d.ts.map +1 -1
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/plugins/api-keys/api-keys-plugin.d.ts +46 -0
  23. package/dist/plugins/api-keys/api-keys-plugin.d.ts.map +1 -0
  24. package/dist/plugins/api-keys/api-keys-plugin.js +329 -0
  25. package/dist/plugins/api-keys/api-keys-plugin.js.map +1 -0
  26. package/dist/plugins/api-keys/index.d.ts +14 -0
  27. package/dist/plugins/api-keys/index.d.ts.map +1 -0
  28. package/dist/plugins/api-keys/index.js +17 -0
  29. package/dist/plugins/api-keys/index.js.map +1 -0
  30. package/dist/plugins/api-keys/middleware/bearer-token-auth.d.ts +74 -0
  31. package/dist/plugins/api-keys/middleware/bearer-token-auth.d.ts.map +1 -0
  32. package/dist/plugins/api-keys/middleware/bearer-token-auth.js +201 -0
  33. package/dist/plugins/api-keys/middleware/bearer-token-auth.js.map +1 -0
  34. package/dist/plugins/api-keys/middleware/index.d.ts +7 -0
  35. package/dist/plugins/api-keys/middleware/index.d.ts.map +1 -0
  36. package/dist/plugins/api-keys/middleware/index.js +7 -0
  37. package/dist/plugins/api-keys/middleware/index.js.map +1 -0
  38. package/dist/plugins/api-keys/stores/index.d.ts +7 -0
  39. package/dist/plugins/api-keys/stores/index.d.ts.map +1 -0
  40. package/dist/plugins/api-keys/stores/index.js +7 -0
  41. package/dist/plugins/api-keys/stores/index.js.map +1 -0
  42. package/dist/plugins/api-keys/stores/postgres-store.d.ts +34 -0
  43. package/dist/plugins/api-keys/stores/postgres-store.d.ts.map +1 -0
  44. package/dist/plugins/api-keys/stores/postgres-store.js +360 -0
  45. package/dist/plugins/api-keys/stores/postgres-store.js.map +1 -0
  46. package/dist/plugins/api-keys/types.d.ts +268 -0
  47. package/dist/plugins/api-keys/types.d.ts.map +1 -0
  48. package/dist/plugins/api-keys/types.js +56 -0
  49. package/dist/plugins/api-keys/types.js.map +1 -0
  50. package/dist/plugins/auth/auth-plugin.d.ts.map +1 -1
  51. package/dist/plugins/auth/auth-plugin.js +17 -1
  52. package/dist/plugins/auth/auth-plugin.js.map +1 -1
  53. package/dist/plugins/auth/auth-plugin.test.js +133 -0
  54. package/dist/plugins/auth/auth-plugin.test.js.map +1 -1
  55. package/dist/plugins/auth/env-config.d.ts.map +1 -1
  56. package/dist/plugins/auth/env-config.js +6 -2
  57. package/dist/plugins/auth/env-config.js.map +1 -1
  58. package/dist/plugins/auth/types.d.ts +10 -0
  59. package/dist/plugins/auth/types.d.ts.map +1 -1
  60. package/dist/plugins/auth/types.js.map +1 -1
  61. package/dist/plugins/devices/__tests__/token-utils.test.js +4 -2
  62. package/dist/plugins/devices/__tests__/token-utils.test.js.map +1 -1
  63. package/dist/plugins/frontend-app-plugin.d.ts.map +1 -1
  64. package/dist/plugins/frontend-app-plugin.js +21 -4
  65. package/dist/plugins/frontend-app-plugin.js.map +1 -1
  66. package/dist/plugins/index.d.ts +2 -0
  67. package/dist/plugins/index.d.ts.map +1 -1
  68. package/dist/plugins/index.js +2 -0
  69. package/dist/plugins/index.js.map +1 -1
  70. package/dist/plugins/qwickbrain/index.d.ts +25 -0
  71. package/dist/plugins/qwickbrain/index.d.ts.map +1 -0
  72. package/dist/plugins/qwickbrain/index.js +24 -0
  73. package/dist/plugins/qwickbrain/index.js.map +1 -0
  74. package/dist/plugins/qwickbrain/qwickbrain-plugin.d.ts +23 -0
  75. package/dist/plugins/qwickbrain/qwickbrain-plugin.d.ts.map +1 -0
  76. package/dist/plugins/qwickbrain/qwickbrain-plugin.js +528 -0
  77. package/dist/plugins/qwickbrain/qwickbrain-plugin.js.map +1 -0
  78. package/dist/plugins/qwickbrain/types.d.ts +131 -0
  79. package/dist/plugins/qwickbrain/types.d.ts.map +1 -0
  80. package/dist/plugins/qwickbrain/types.js +9 -0
  81. package/dist/plugins/qwickbrain/types.js.map +1 -0
  82. package/dist/plugins/users/__tests__/postgres-store.test.js +1 -0
  83. package/dist/plugins/users/__tests__/postgres-store.test.js.map +1 -1
  84. package/dist/plugins/users/__tests__/users-plugin.test.js +3 -0
  85. package/dist/plugins/users/__tests__/users-plugin.test.js.map +1 -1
  86. package/dist/plugins/users/stores/postgres-store.d.ts.map +1 -1
  87. package/dist/plugins/users/stores/postgres-store.js +59 -1
  88. package/dist/plugins/users/stores/postgres-store.js.map +1 -1
  89. package/dist/plugins/users/types.d.ts +22 -0
  90. package/dist/plugins/users/types.d.ts.map +1 -1
  91. package/dist-ui/assets/index-5nX8fM1a.js +469 -0
  92. package/dist-ui/assets/index-5nX8fM1a.js.map +1 -0
  93. package/dist-ui/index.html +1 -1
  94. package/dist-ui-lib/api/controlPanelApi.d.ts +68 -0
  95. package/dist-ui-lib/components/index.d.ts +2 -1
  96. package/dist-ui-lib/index.js +2642 -2281
  97. package/dist-ui-lib/index.js.map +1 -1
  98. package/dist-ui-lib/pages/APIKeysPage.d.ts +13 -0
  99. package/dist-ui-lib/pages/AcceptInvitationPage.d.ts +28 -0
  100. package/package.json +3 -2
  101. package/src/core/control-panel.ts +47 -0
  102. package/src/core/guards.ts +89 -0
  103. package/src/core/health-manager.ts +6 -1
  104. package/src/core/plugin-registry.ts +123 -25
  105. package/src/core/types.ts +2 -0
  106. package/src/index.ts +11 -0
  107. package/src/plugins/api-keys/api-keys-plugin.ts +397 -0
  108. package/src/plugins/api-keys/index.ts +49 -0
  109. package/src/plugins/api-keys/middleware/bearer-token-auth.ts +250 -0
  110. package/src/plugins/api-keys/middleware/index.ts +12 -0
  111. package/src/plugins/api-keys/stores/index.ts +7 -0
  112. package/src/plugins/api-keys/stores/postgres-store.ts +487 -0
  113. package/src/plugins/api-keys/types.ts +243 -0
  114. package/src/plugins/auth/auth-plugin.test.ts +167 -0
  115. package/src/plugins/auth/auth-plugin.ts +17 -1
  116. package/src/plugins/auth/env-config.ts +6 -2
  117. package/src/plugins/auth/types.ts +10 -0
  118. package/src/plugins/devices/__tests__/token-utils.test.ts +4 -2
  119. package/src/plugins/frontend-app-plugin.ts +24 -4
  120. package/src/plugins/index.ts +15 -0
  121. package/src/plugins/qwickbrain/index.ts +33 -0
  122. package/src/plugins/qwickbrain/qwickbrain-plugin.ts +642 -0
  123. package/src/plugins/qwickbrain/types.ts +146 -0
  124. package/src/plugins/users/__tests__/postgres-store.test.ts +1 -0
  125. package/src/plugins/users/__tests__/users-plugin.test.ts +3 -0
  126. package/src/plugins/users/stores/postgres-store.ts +69 -0
  127. package/src/plugins/users/types.ts +25 -0
  128. package/ui/src/App.tsx +6 -1
  129. package/ui/src/api/controlPanelApi.ts +206 -37
  130. package/ui/src/components/index.ts +6 -0
  131. package/ui/src/pages/APIKeysPage.tsx +661 -0
  132. package/ui/src/pages/AcceptInvitationPage.tsx +169 -0
  133. package/ui/src/pages/UsersPage.tsx +225 -2
  134. package/dist-ui/assets/index-CynOqPkb.js +0 -469
  135. package/dist-ui/assets/index-CynOqPkb.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../ui/src/config/AppConfig.ts","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/esm/merge/merge.js","../node_modules/@mui/system/esm/responsivePropType/responsivePropType.js","../node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/system/esm/breakpoints/breakpoints.js","../node_modules/@mui/system/esm/style/style.js","../node_modules/@mui/system/esm/memoize/memoize.js","../node_modules/@mui/system/esm/spacing/spacing.js","../node_modules/@mui/system/esm/compose/compose.js","../node_modules/@mui/system/esm/borders/borders.js","../node_modules/@mui/system/esm/cssGrid/cssGrid.js","../node_modules/@mui/system/esm/palette/palette.js","../node_modules/@mui/system/esm/sizing/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@mui/styled-engine/esm/index.js","../node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js","../node_modules/@mui/system/esm/preprocessStyles.js","../node_modules/@mui/system/esm/createStyled/createStyled.js","../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/system/esm/colorManipulator/colorManipulator.js","../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/system/esm/memoTheme.js","../node_modules/@mui/system/esm/cssVars/createGetCssVar.js","../node_modules/@mui/system/esm/cssVars/cssVarsParser.js","../node_modules/@mui/system/esm/cssVars/prepareCssVars.js","../node_modules/@mui/system/esm/cssVars/getColorSchemeSelector.js","../node_modules/@mui/material/esm/colors/common.js","../node_modules/@mui/material/esm/colors/grey.js","../node_modules/@mui/material/esm/colors/purple.js","../node_modules/@mui/material/esm/colors/red.js","../node_modules/@mui/material/esm/colors/orange.js","../node_modules/@mui/material/esm/colors/blue.js","../node_modules/@mui/material/esm/colors/lightBlue.js","../node_modules/@mui/material/esm/colors/green.js","../node_modules/@mui/material/esm/styles/createPalette.js","../node_modules/@mui/system/esm/cssVars/prepareTypographyVars.js","../node_modules/@mui/material/esm/styles/createMixins.js","../node_modules/@mui/material/esm/styles/createTypography.js","../node_modules/@mui/material/esm/styles/shadows.js","../node_modules/@mui/material/esm/styles/createTransitions.js","../node_modules/@mui/material/esm/styles/zIndex.js","../node_modules/@mui/material/esm/styles/stringifyTheme.js","../node_modules/@mui/material/esm/styles/createThemeNoVars.js","../node_modules/@mui/material/esm/styles/getOverlayAlpha.js","../node_modules/@mui/material/esm/styles/createColorScheme.js","../node_modules/@mui/material/esm/styles/shouldSkipGeneratingVar.js","../node_modules/@mui/material/esm/styles/excludeVariablesFromRoot.js","../node_modules/@mui/material/esm/styles/createGetSelector.js","../node_modules/@mui/material/esm/styles/createThemeWithVars.js","../node_modules/@mui/material/esm/styles/createTheme.js","../node_modules/@mui/material/esm/styles/defaultTheme.js","../node_modules/@mui/material/esm/styles/identifier.js","../node_modules/@mui/material/esm/styles/slotShouldForwardProp.js","../node_modules/@mui/material/esm/styles/rootShouldForwardProp.js","../node_modules/@mui/material/esm/styles/styled.js","../node_modules/@mui/material/esm/utils/memoTheme.js","../node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/esm/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/esm/SvgIcon/SvgIcon.js","../node_modules/@mui/material/esm/utils/createSvgIcon.js","../node_modules/@mui/icons-material/esm/CheckCircle.js","../node_modules/@mui/icons-material/esm/Error.js","../node_modules/@mui/icons-material/esm/Warning.js","../ui/src/api/controlPanelApi.ts","../ui/src/dashboard/DashboardWidgetRegistry.tsx","../ui/src/dashboard/DashboardWidgetRenderer.tsx","../ui/src/dashboard/WidgetComponentRegistry.tsx","../ui/src/dashboard/PluginWidgetRenderer.tsx","../ui/src/dashboard/widgets/ServiceHealthWidget.tsx","../ui/src/dashboard/widgets/IntegrationStatusWidget.tsx","../node_modules/@mui/icons-material/esm/Block.js","../ui/src/dashboard/widgets/AuthStatusWidget.tsx","../node_modules/@mui/icons-material/esm/Wifi.js","../node_modules/@mui/icons-material/esm/WifiOff.js","../node_modules/@mui/icons-material/esm/Devices.js","../node_modules/@mui/icons-material/esm/Person.js","../node_modules/@mui/icons-material/esm/Send.js","../ui/src/components/StatCard.tsx","../ui/src/utils/formatters.ts","../ui/src/dashboard/widgets/NotificationsStatsWidget.tsx","../ui/src/dashboard/builtInWidgets.tsx","../ui/src/pages/DashboardPage.tsx","../node_modules/@mui/icons-material/esm/Refresh.js","../node_modules/@mui/icons-material/esm/Search.js","../node_modules/@mui/icons-material/esm/PlayArrow.js","../node_modules/@mui/icons-material/esm/Pause.js","../node_modules/@mui/icons-material/esm/ArrowUpward.js","../node_modules/@mui/icons-material/esm/ArrowDownward.js","../node_modules/@mui/icons-material/esm/Info.js","../node_modules/@mui/icons-material/esm/BugReport.js","../ui/src/pages/LogsPage.tsx","../node_modules/@mui/icons-material/esm/ContentCopy.js","../node_modules/@mui/icons-material/esm/Memory.js","../node_modules/@mui/icons-material/esm/Computer.js","../node_modules/@mui/icons-material/esm/Storage.js","../node_modules/@mui/icons-material/esm/AccessTime.js","../node_modules/@mui/icons-material/esm/Favorite.js","../ui/src/pages/SystemPage.tsx","../node_modules/@mui/icons-material/esm/Edit.js","../node_modules/@mui/icons-material/esm/Save.js","../node_modules/@mui/icons-material/esm/Cancel.js","../node_modules/@mui/icons-material/esm/Delete.js","../node_modules/@mui/icons-material/esm/ExpandMore.js","../node_modules/@mui/icons-material/esm/ExpandLess.js","../ui/src/pages/AuthPage.tsx","../node_modules/@mui/icons-material/esm/Home.js","../ui/src/pages/NotFoundPage.tsx","../ui/src/components/ControlPanelApp.tsx","../node_modules/@mui/icons-material/esm/LocalOffer.js","../ui/src/pages/UsersPage.tsx","../node_modules/@mui/icons-material/esm/Lock.js","../ui/src/pages/EntitlementsPage.tsx"],"sourcesContent":["import { AppConfigBuilder } from '@qwickapps/react-framework';\n\n/**\n * Default control panel configuration\n * Consumers can override this by passing their own config\n */\nexport const defaultConfig = AppConfigBuilder.create()\n .withName('Control Panel')\n .withId('com.qwickapps.control-panel')\n .withVersion('1.0.0')\n .withDefaultTheme('dark')\n .withDefaultPalette('cosmic')\n .withThemeSwitcher(true)\n .withPaletteSwitcher(true)\n .withDisplay('standalone')\n .build();\n\nexport type ControlPanelUIConfig = ReturnType<typeof AppConfigBuilder.prototype.build>;\n","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n let generate = defaultGenerator;\n return {\n configure(generator) {\n generate = generator;\n },\n generate(componentName) {\n return generate(componentName);\n },\n reset() {\n generate = defaultGenerator;\n }\n };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","/**\n * WARNING: Don't import this directly. It's imported by the code generated by\n * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`\n * constructors to ensure the plugin works as expected. Supported patterns include:\n * throw new Error('My message');\n * throw new Error(`My message: ${foo}`);\n * throw new Error(`My message: ${foo}` + 'another string');\n * ...\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code, ...args) {\n const url = new URL(`https://mui.com/production-error/?code=${code}`);\n args.forEach(arg => url.searchParams.append('args[]', arg));\n return `Minified MUI error #${code}; visit ${url} for the full message.`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n if (typeof string !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `capitalize(string)` expects a string argument.' : _formatErrorMessage(7));\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0\n ---\n These rules are preventing the performance optimizations below.\n */\n\n/**\n * Compose classes from multiple sources.\n *\n * @example\n * ```tsx\n * const slots = {\n * root: ['root', 'primary'],\n * label: ['label'],\n * };\n *\n * const getUtilityClass = (slot) => `MuiButton-${slot}`;\n *\n * const classes = {\n * root: 'my-root-class',\n * };\n *\n * const output = composeClasses(slots, getUtilityClass, classes);\n * // {\n * // root: 'MuiButton-root MuiButton-primary my-root-class',\n * // label: 'MuiButton-label',\n * // }\n * ```\n *\n * @param slots a list of classes for each possible slot\n * @param getUtilityClass a function to resolve the class based on the slot name\n * @param classes the input classes from props\n * @returns the resolved classes for all slots\n */\nexport default function composeClasses(slots, getUtilityClass, classes = undefined) {\n const output = {};\n for (const slotName in slots) {\n const slot = slots[slotName];\n let buffer = '';\n let start = true;\n for (let i = 0; i < slot.length; i += 1) {\n const value = slot[i];\n if (value) {\n buffer += (start === true ? '' : ' ') + getUtilityClass(value);\n start = false;\n if (classes && classes[value]) {\n buffer += ' ' + classes[value];\n }\n }\n }\n output[slotName] = buffer;\n }\n return output;\n}","import * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(item);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n if (/*#__PURE__*/React.isValidElement(source) || isValidElementType(source) || !isPlainObject(source)) {\n return source;\n }\n const output = {};\n Object.keys(source).forEach(key => {\n output[key] = deepClone(source[key]);\n });\n return output;\n}\n\n/**\n * Merge objects deeply.\n * It will shallow copy React elements.\n *\n * If `options.clone` is set to `false` the source object will be merged directly into the target object.\n *\n * @example\n * ```ts\n * deepmerge({ a: { b: 1 }, d: 2 }, { a: { c: 2 }, d: 4 });\n * // => { a: { b: 1, c: 2 }, d: 4 }\n * ````\n *\n * @param target The target object.\n * @param source The source object.\n * @param options The merge options.\n * @param options.clone Set to `false` to merge the source object directly into the target object.\n * @returns The merged object.\n */\nexport default function deepmerge(target, source, options = {\n clone: true\n}) {\n const output = options.clone ? {\n ...target\n } : target;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n if (/*#__PURE__*/React.isValidElement(source[key]) || isValidElementType(source[key])) {\n output[key] = source[key];\n } else if (isPlainObject(source[key]) &&\n // Avoid prototype pollution\n Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n output[key] = deepmerge(target[key], source[key], options);\n } else if (options.clone) {\n output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n return deepmerge(acc, item, {\n clone: false // No need to clone deep, it's way faster.\n });\n}\nexport default merge;","import PropTypes from 'prop-types';\nconst responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};\nexport default responsivePropType;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/**\n * For using in `sx` prop to sort the breakpoint from low to high.\n * Note: this function does not work and will not support multiple units.\n * e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }\n * output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 even though 40rem > 300px\n */\nexport function sortContainerQueries(theme, css) {\n if (!theme.containerQueries) {\n return css;\n }\n const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => {\n const regex = /min-width:\\s*([0-9.]+)/;\n return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0);\n });\n if (!sorted.length) {\n return css;\n }\n return sorted.reduce((acc, key) => {\n const value = css[key];\n delete acc[key];\n acc[key] = value;\n return acc;\n }, {\n ...css\n });\n}\nexport function isCqShorthand(breakpointKeys, value) {\n return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\\d/));\n}\nexport function getContainerQuery(theme, shorthand) {\n const matches = shorthand.match(/^@([^/]+)?\\/?(.+)?$/);\n if (!matches) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \\`@<breakpoint | number>\\` or \\`@<breakpoint | number>/<container>\\`.\\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.' : _formatErrorMessage(18, `(${shorthand})`));\n }\n return null;\n }\n const [, containerQuery, containerName] = matches;\n const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery;\n return theme.containerQueries(containerName).up(value);\n}\nexport default function cssContainerQueries(themeInput) {\n const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container');\n function attachCq(node, name) {\n node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name);\n node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name);\n node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name);\n node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name);\n node.not = (...args) => {\n const result = toContainerQuery(themeInput.breakpoints.not(...args), name);\n if (result.includes('not all and')) {\n // `@container` does not work with `not all and`, so need to invert the logic\n return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or');\n }\n return result;\n };\n }\n const node = {};\n const containerQueries = name => {\n attachCq(node, name);\n return node;\n };\n attachCq(containerQueries);\n return {\n ...themeInput,\n containerQueries\n };\n}","import PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from \"../merge/index.js\";\nimport { isCqShorthand, getContainerQuery } from \"../cssContainerQueries/index.js\";\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: key => `@media (min-width:${values[key]}px)`\n};\nconst defaultContainerQueries = {\n containerQueries: containerName => ({\n up: key => {\n let result = typeof key === 'number' ? key : values[key] || key;\n if (typeof result === 'number') {\n result = `${result}px`;\n }\n return containerName ? `@container ${containerName} (min-width:${result})` : `@container (min-width:${result})`;\n }\n })\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc, item, index) => {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n if (typeof propValue === 'object') {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc, breakpoint) => {\n if (isCqShorthand(themeBreakpoints.keys, breakpoint)) {\n const containerKey = getContainerQuery(theme.containerQueries ? theme : defaultContainerQueries, breakpoint);\n if (containerKey) {\n acc[containerKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n }\n }\n // key is breakpoint\n else if (Object.keys(themeBreakpoints.values || values).includes(breakpoint)) {\n const mediaKey = themeBreakpoints.up(breakpoint);\n acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n } else {\n const cssKey = breakpoint;\n acc[cssKey] = propValue[cssKey];\n }\n return acc;\n }, {});\n }\n const output = styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction) {\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction = props => {\n const theme = props.theme || {};\n const base = styleFunction(props);\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n const extended = themeBreakpoints.keys.reduce((acc, key) => {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction({\n theme,\n ...props[key]\n });\n }\n return acc;\n }, null);\n return merge(base, extended);\n };\n newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? {\n ...styleFunction.propTypes,\n xs: PropTypes.object,\n sm: PropTypes.object,\n md: PropTypes.object,\n lg: PropTypes.object,\n xl: PropTypes.object\n } : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n const breakpointsInOrder = breakpointsInput.keys?.reduce((acc, key) => {\n const breakpointStyleKey = breakpointsInput.up(key);\n acc[breakpointStyleKey] = {};\n return acc;\n }, {});\n return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n return breakpointKeys.reduce((acc, key) => {\n const breakpointOutput = acc[key];\n const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n if (isBreakpointUnused) {\n delete acc[key];\n }\n return acc;\n }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n // fixed value\n if (typeof breakpointValues !== 'object') {\n return {};\n }\n const base = {};\n const breakpointsKeys = Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < breakpointValues.length) {\n base[breakpoint] = true;\n }\n });\n } else {\n breakpointsKeys.forEach(breakpoint => {\n if (breakpointValues[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues({\n values: breakpointValues,\n breakpoints: themeBreakpoints,\n base: customBase\n}) {\n const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return breakpointValues;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(breakpointValues)) {\n acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n previous = i;\n } else if (typeof breakpointValues === 'object') {\n acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n previous = breakpoint;\n } else {\n acc[breakpoint] = breakpointValues;\n }\n return acc;\n }, {});\n}\nexport default breakpoints;","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function getPath(obj, path, checkVars = true) {\n if (!path || typeof path !== 'string') {\n return null;\n }\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars) {\n const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n if (val != null) {\n return val;\n }\n }\n return path.split('.').reduce((acc, item) => {\n if (acc && acc[item] != null) {\n return acc[item];\n }\n return null;\n }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n let value;\n if (typeof themeMapping === 'function') {\n value = themeMapping(propValueFinal);\n } else if (Array.isArray(themeMapping)) {\n value = themeMapping[propValueFinal] || userValue;\n } else {\n value = getPath(themeMapping, propValueFinal) || userValue;\n }\n if (transform) {\n value = transform(value, userValue, themeMapping);\n }\n return value;\n}\nfunction style(options) {\n const {\n prop,\n cssProperty = options.prop,\n themeKey,\n transform\n } = options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n if (props[prop] == null) {\n return null;\n }\n const propValue = props[prop];\n const theme = props.theme;\n const themeMapping = getPath(theme, themeKey) || {};\n const styleFromPropValue = propValueFinal => {\n let value = getStyleValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, propValue, styleFromPropValue);\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n [prop]: responsivePropType\n } : {};\n fn.filterProps = [prop];\n return fn;\n}\nexport default style;","export default function memoize(fn) {\n const cache = {};\n return arg => {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n return cache[arg];\n };\n}","import responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport { getPath } from \"../style/index.js\";\nimport merge from \"../merge/index.js\";\nimport memoize from \"../memoize/index.js\";\nconst properties = {\n m: 'margin',\n p: 'padding'\n};\nconst directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nconst aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n const [a, b] = prop.split('');\n const property = properties[a];\n const direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n const themeSpacing = getPath(theme, themeKey, true) ?? defaultValue;\n if (typeof themeSpacing === 'number' || typeof themeSpacing === 'string') {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (typeof val !== 'number') {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${val}.`);\n }\n }\n if (typeof themeSpacing === 'string') {\n if (themeSpacing.startsWith('var(') && val === 0) {\n return 0;\n }\n if (themeSpacing.startsWith('var(') && val === 1) {\n return themeSpacing;\n }\n return `calc(${val} * ${themeSpacing})`;\n }\n return themeSpacing * val;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n const abs = Math.abs(val);\n if (process.env.NODE_ENV !== 'production') {\n if (!Number.isInteger(abs)) {\n console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n } else if (abs > themeSpacing.length - 1) {\n console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n }\n }\n const transformed = themeSpacing[abs];\n if (val >= 0) {\n return transformed;\n }\n if (typeof transformed === 'number') {\n return -transformed;\n }\n if (typeof transformed === 'string' && transformed.startsWith('var(')) {\n return `calc(-1 * ${transformed})`;\n }\n return `-${transformed}`;\n };\n }\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n return transformer(propValue);\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n return propValue => cssProperties.reduce((acc, cssProperty) => {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (!keys.includes(prop)) {\n return null;\n }\n const cssProperties = getCssProperties(prop);\n const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n const propValue = props[prop];\n return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n const transformer = createUnarySpacing(props.theme);\n return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","import merge from \"../merge/index.js\";\nfunction compose(...styles) {\n const handlers = styles.reduce((acc, style) => {\n style.filterProps.forEach(prop => {\n acc[prop] = style;\n });\n return acc;\n }, {});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n return Object.keys(props).reduce((acc, prop) => {\n if (handlers[prop]) {\n return merge(acc, handlers[prop](props));\n }\n return acc;\n }, {});\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n return fn;\n}\nexport default compose;","import responsivePropType from \"../responsivePropType/index.js\";\nimport style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function borderTransform(value) {\n if (typeof value !== 'number') {\n return value;\n }\n return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n return style({\n prop,\n themeKey: 'borders',\n transform\n });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n if (props.borderRadius !== undefined && props.borderRadius !== null) {\n const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n const styleFromPropValue = propValue => ({\n borderRadius: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n }\n return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport responsivePropType from \"../responsivePropType/index.js\";\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n if (props.gap !== undefined && props.gap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n const styleFromPropValue = propValue => ({\n gap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.gap, styleFromPropValue);\n }\n return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n if (props.columnGap !== undefined && props.columnGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n const styleFromPropValue = propValue => ({\n columnGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n }\n return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n if (props.rowGap !== undefined && props.rowGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n const styleFromPropValue = propValue => ({\n rowGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n }\n return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n prop: 'gridColumn'\n});\nexport const gridRow = style({\n prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nexport function paletteTransform(value, userValue) {\n if (userValue === 'grey') {\n return userValue;\n }\n return value;\n}\nexport const color = style({\n prop: 'color',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const bgcolor = style({\n prop: 'bgcolor',\n cssProperty: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const backgroundColor = style({\n prop: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { handleBreakpoints, values as breakpointsValues } from \"../breakpoints/index.js\";\nexport function sizingTransform(value) {\n return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n prop: 'width',\n transform: sizingTransform\n});\nexport const maxWidth = props => {\n if (props.maxWidth !== undefined && props.maxWidth !== null) {\n const styleFromPropValue = propValue => {\n const breakpoint = props.theme?.breakpoints?.values?.[propValue] || breakpointsValues[propValue];\n if (!breakpoint) {\n return {\n maxWidth: sizingTransform(propValue)\n };\n }\n if (props.theme?.breakpoints?.unit !== 'px') {\n return {\n maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n };\n }\n return {\n maxWidth: breakpoint\n };\n };\n return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n }\n return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n prop: 'minWidth',\n transform: sizingTransform\n});\nexport const height = style({\n prop: 'height',\n transform: sizingTransform\n});\nexport const maxHeight = style({\n prop: 'maxHeight',\n transform: sizingTransform\n});\nexport const minHeight = style({\n prop: 'minHeight',\n transform: sizingTransform\n});\nexport const sizeWidth = style({\n prop: 'size',\n cssProperty: 'width',\n transform: sizingTransform\n});\nexport const sizeHeight = style({\n prop: 'size',\n cssProperty: 'height',\n transform: sizingTransform\n});\nexport const boxSizing = style({\n prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from \"../spacing/index.js\";\nimport { borderRadius, borderTransform } from \"../borders/index.js\";\nimport { gap, rowGap, columnGap } from \"../cssGrid/index.js\";\nimport { paletteTransform } from \"../palette/index.js\";\nimport { maxWidth, sizingTransform } from \"../sizing/index.js\";\nconst defaultSxConfig = {\n // borders\n border: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderTop: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderRight: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderBottom: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderLeft: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderColor: {\n themeKey: 'palette'\n },\n borderTopColor: {\n themeKey: 'palette'\n },\n borderRightColor: {\n themeKey: 'palette'\n },\n borderBottomColor: {\n themeKey: 'palette'\n },\n borderLeftColor: {\n themeKey: 'palette'\n },\n outline: {\n themeKey: 'borders',\n transform: borderTransform\n },\n outlineColor: {\n themeKey: 'palette'\n },\n borderRadius: {\n themeKey: 'shape.borderRadius',\n style: borderRadius\n },\n // palette\n color: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n bgcolor: {\n themeKey: 'palette',\n cssProperty: 'backgroundColor',\n transform: paletteTransform\n },\n backgroundColor: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n // spacing\n p: {\n style: padding\n },\n pt: {\n style: padding\n },\n pr: {\n style: padding\n },\n pb: {\n style: padding\n },\n pl: {\n style: padding\n },\n px: {\n style: padding\n },\n py: {\n style: padding\n },\n padding: {\n style: padding\n },\n paddingTop: {\n style: padding\n },\n paddingRight: {\n style: padding\n },\n paddingBottom: {\n style: padding\n },\n paddingLeft: {\n style: padding\n },\n paddingX: {\n style: padding\n },\n paddingY: {\n style: padding\n },\n paddingInline: {\n style: padding\n },\n paddingInlineStart: {\n style: padding\n },\n paddingInlineEnd: {\n style: padding\n },\n paddingBlock: {\n style: padding\n },\n paddingBlockStart: {\n style: padding\n },\n paddingBlockEnd: {\n style: padding\n },\n m: {\n style: margin\n },\n mt: {\n style: margin\n },\n mr: {\n style: margin\n },\n mb: {\n style: margin\n },\n ml: {\n style: margin\n },\n mx: {\n style: margin\n },\n my: {\n style: margin\n },\n margin: {\n style: margin\n },\n marginTop: {\n style: margin\n },\n marginRight: {\n style: margin\n },\n marginBottom: {\n style: margin\n },\n marginLeft: {\n style: margin\n },\n marginX: {\n style: margin\n },\n marginY: {\n style: margin\n },\n marginInline: {\n style: margin\n },\n marginInlineStart: {\n style: margin\n },\n marginInlineEnd: {\n style: margin\n },\n marginBlock: {\n style: margin\n },\n marginBlockStart: {\n style: margin\n },\n marginBlockEnd: {\n style: margin\n },\n // display\n displayPrint: {\n cssProperty: false,\n transform: value => ({\n '@media print': {\n display: value\n }\n })\n },\n display: {},\n overflow: {},\n textOverflow: {},\n visibility: {},\n whiteSpace: {},\n // flexbox\n flexBasis: {},\n flexDirection: {},\n flexWrap: {},\n justifyContent: {},\n alignItems: {},\n alignContent: {},\n order: {},\n flex: {},\n flexGrow: {},\n flexShrink: {},\n alignSelf: {},\n justifyItems: {},\n justifySelf: {},\n // grid\n gap: {\n style: gap\n },\n rowGap: {\n style: rowGap\n },\n columnGap: {\n style: columnGap\n },\n gridColumn: {},\n gridRow: {},\n gridAutoFlow: {},\n gridAutoColumns: {},\n gridAutoRows: {},\n gridTemplateColumns: {},\n gridTemplateRows: {},\n gridTemplateAreas: {},\n gridArea: {},\n // positions\n position: {},\n zIndex: {\n themeKey: 'zIndex'\n },\n top: {},\n right: {},\n bottom: {},\n left: {},\n // shadows\n boxShadow: {\n themeKey: 'shadows'\n },\n // sizing\n width: {\n transform: sizingTransform\n },\n maxWidth: {\n style: maxWidth\n },\n minWidth: {\n transform: sizingTransform\n },\n height: {\n transform: sizingTransform\n },\n maxHeight: {\n transform: sizingTransform\n },\n minHeight: {\n transform: sizingTransform\n },\n boxSizing: {},\n // typography\n font: {\n themeKey: 'font'\n },\n fontFamily: {\n themeKey: 'typography'\n },\n fontSize: {\n themeKey: 'typography'\n },\n fontStyle: {\n themeKey: 'typography'\n },\n fontWeight: {\n themeKey: 'typography'\n },\n letterSpacing: {},\n textTransform: {},\n lineHeight: {},\n textAlign: {},\n typography: {\n cssProperty: false,\n themeKey: 'typography'\n }\n};\nexport default defaultSxConfig;","import capitalize from '@mui/utils/capitalize';\nimport merge from \"../merge/index.js\";\nimport { getPath, getStyleValue as getValue } from \"../style/index.js\";\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from \"../breakpoints/index.js\";\nimport { sortContainerQueries } from \"../cssContainerQueries/index.js\";\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nfunction objectsHaveSameKeys(...objects) {\n const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n const union = new Set(allKeys);\n return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n function getThemeValue(prop, val, theme, config) {\n const props = {\n [prop]: val,\n theme\n };\n const options = config[prop];\n if (!options) {\n return {\n [prop]: val\n };\n }\n const {\n cssProperty = prop,\n themeKey,\n transform,\n style\n } = options;\n if (val == null) {\n return null;\n }\n\n // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n if (themeKey === 'typography' && val === 'inherit') {\n return {\n [prop]: val\n };\n }\n const themeMapping = getPath(theme, themeKey) || {};\n if (style) {\n return style(props);\n }\n const styleFromPropValue = propValueFinal => {\n let value = getValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, val, styleFromPropValue);\n }\n function styleFunctionSx(props) {\n const {\n sx,\n theme = {},\n nested\n } = props || {};\n if (!sx) {\n return null; // Emotion & styled-components will neglect null\n }\n const config = theme.unstable_sxConfig ?? defaultSxConfig;\n\n /*\n * Receive `sxInput` as object or callback\n * and then recursively check keys & values to create media query object styles.\n * (the result will be used in `styled`)\n */\n function traverse(sxInput) {\n let sxObject = sxInput;\n if (typeof sxInput === 'function') {\n sxObject = sxInput(theme);\n } else if (typeof sxInput !== 'object') {\n // value\n return sxInput;\n }\n if (!sxObject) {\n return null;\n }\n const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n const breakpointsKeys = Object.keys(emptyBreakpoints);\n let css = emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey => {\n const value = callIfFn(sxObject[styleKey], theme);\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n if (config[styleKey]) {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n } else {\n const breakpointsValues = handleBreakpoints({\n theme\n }, value, x => ({\n [styleKey]: x\n }));\n if (objectsHaveSameKeys(breakpointsValues, value)) {\n css[styleKey] = styleFunctionSx({\n sx: value,\n theme,\n nested: true\n });\n } else {\n css = merge(css, breakpointsValues);\n }\n }\n } else {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n }\n }\n });\n if (!nested && theme.modularCssLayers) {\n return {\n '@layer sx': sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css))\n };\n }\n return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));\n }\n return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n }\n return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","/**\n * @mui/styled-engine v7.3.6\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n wrapper[0] = styles;\n return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return {\n ...acc,\n [obj.key]: obj.val\n };\n }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n },\n unit = 'px',\n step = 5,\n ...other\n } = breakpoints;\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n return up(key);\n }\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n return {\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit,\n ...other\n };\n}","const shape = {\n borderRadius: 4\n};\nexport default shape;","import { createUnarySpacing } from \"../spacing/index.js\";\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8,\n// Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n// Smaller components, such as icons, can align to a 4dp grid.\n// https://m2.material.io/design/layout/understanding-layout.html\ntransform = createUnarySpacing({\n spacing: spacingInput\n})) {\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n }\n const spacing = (...argsInput) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!(argsInput.length <= 4)) {\n console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n }\n }\n const args = argsInput.length === 0 ? [1] : argsInput;\n return args.map(argument => {\n const output = transform(argument);\n return typeof output === 'number' ? `${output}px` : output;\n }).join(' ');\n };\n spacing.mui = true;\n return spacing;\n}","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n * - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n * - [CSS theme variables](https://mui.com/material-ui/customization/css-theme-variables/overview/)\n * - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * With the styled function:\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * With the sx prop:\n * ✅ [{ background: '#e5e5e5' }, theme => theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme => theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n * const Component = styled('div')(({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n * <Box sx={[\n * { background: '#e5e5e5' },\n * theme => theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]}\n * />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n * extendTheme({\n * components: {\n * MuiButton: {\n * styleOverrides: {\n * root: ({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ],\n * },\n * }\n * }\n * })\n *```\n */\nexport default function applyStyles(key, styles) {\n // @ts-expect-error this is 'any' type\n const theme = this;\n if (theme.vars) {\n if (!theme.colorSchemes?.[key] || typeof theme.getColorSchemeSelector !== 'function') {\n return {};\n }\n // If CssVarsProvider is used as a provider, returns '*:where({selector}) &'\n let selector = theme.getColorSchemeSelector(key);\n if (selector === '&') {\n return styles;\n }\n if (selector.includes('data-') || selector.includes('.')) {\n // '*' is required as a workaround for Emotion issue (https://github.com/emotion-js/emotion/issues/2836)\n selector = `*:where(${selector.replace(/\\s*&$/, '')}) &`;\n }\n return {\n [selector]: styles\n };\n }\n if (theme.palette.mode === key) {\n return styles;\n }\n return {};\n}","import deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from \"../createBreakpoints/createBreakpoints.js\";\nimport cssContainerQueries from \"../cssContainerQueries/index.js\";\nimport shape from \"./shape.js\";\nimport createSpacing from \"./createSpacing.js\";\nimport styleFunctionSx from \"../styleFunctionSx/styleFunctionSx.js\";\nimport defaultSxConfig from \"../styleFunctionSx/defaultSxConfig.js\";\nimport applyStyles from \"./applyStyles.js\";\nfunction createTheme(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput = {},\n palette: paletteInput = {},\n spacing: spacingInput,\n shape: shapeInput = {},\n ...other\n } = options;\n const breakpoints = createBreakpoints(breakpointsInput);\n const spacing = createSpacing(spacingInput);\n let muiTheme = deepmerge({\n breakpoints,\n direction: 'ltr',\n components: {},\n // Inject component definitions.\n palette: {\n mode: 'light',\n ...paletteInput\n },\n spacing,\n shape: {\n ...shape,\n ...shapeInput\n }\n }, other);\n muiTheme = cssContainerQueries(muiTheme);\n muiTheme.applyStyles = applyStyles;\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n muiTheme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...other?.unstable_sxConfig\n };\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nexport default createTheme;","import ClassNameGenerator from \"../ClassNameGenerator/index.js\";\nexport const globalStateClasses = {\n active: 'active',\n checked: 'checked',\n completed: 'completed',\n disabled: 'disabled',\n error: 'error',\n expanded: 'expanded',\n focused: 'focused',\n focusVisible: 'focusVisible',\n open: 'open',\n readOnly: 'readOnly',\n required: 'required',\n selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n const globalStateClass = globalStateClasses[slot];\n return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClass from \"../generateUtilityClass/index.js\";\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","import { ForwardRef, Memo } from 'react-is';\nfunction getFunctionComponentName(Component, fallback = '') {\n return Component.displayName || Component.name || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n const functionName = getFunctionComponentName(innerType);\n return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName\n */\nexport default function getDisplayName(Component) {\n if (Component == null) {\n return undefined;\n }\n if (typeof Component === 'string') {\n return Component;\n }\n if (typeof Component === 'function') {\n return getFunctionComponentName(Component, 'Component');\n }\n\n // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n if (typeof Component === 'object') {\n switch (Component.$$typeof) {\n case ForwardRef:\n return getWrappedName(Component, Component.render, 'ForwardRef');\n case Memo:\n return getWrappedName(Component, Component.type, 'memo');\n default:\n return undefined;\n }\n }\n return undefined;\n}","import { internal_serializeStyles } from '@mui/styled-engine';\nexport default function preprocessStyles(input) {\n const {\n variants,\n ...style\n } = input;\n const result = {\n variants,\n style: internal_serializeStyles(style),\n isProcessed: true\n };\n\n // Not supported on styled-components\n if (result.style === style) {\n return result;\n }\n if (variants) {\n variants.forEach(variant => {\n if (typeof variant.style !== 'function') {\n variant.style = internal_serializeStyles(variant.style);\n }\n });\n }\n return result;\n}","import styledEngineStyled, { internal_mutateStyles as mutateStyles, internal_serializeStyles as serializeStyles } from '@mui/styled-engine';\nimport { isPlainObject } from '@mui/utils/deepmerge';\nimport capitalize from '@mui/utils/capitalize';\nimport getDisplayName from '@mui/utils/getDisplayName';\nimport createTheme from \"../createTheme/index.js\";\nimport styleFunctionSx from \"../styleFunctionSx/index.js\";\nimport preprocessStyles from \"../preprocessStyles.js\";\n\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-labels */\n/* eslint-disable no-lone-blocks */\n\nexport const systemDefaultTheme = createTheme();\n\n// Update /system/styled/#api in case if this changes\nexport function shouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nfunction shallowLayer(serialized, layerName) {\n if (layerName && serialized && typeof serialized === 'object' && serialized.styles && !serialized.styles.startsWith('@layer') // only add the layer if it is not already there.\n ) {\n serialized.styles = `@layer ${layerName}{${String(serialized.styles)}}`;\n }\n return serialized;\n}\nfunction defaultOverridesResolver(slot) {\n if (!slot) {\n return null;\n }\n return (_props, styles) => styles[slot];\n}\nfunction attachTheme(props, themeId, defaultTheme) {\n props.theme = isObjectEmpty(props.theme) ? defaultTheme : props.theme[themeId] || props.theme;\n}\nfunction processStyle(props, style, layerName) {\n /*\n * Style types:\n * - null/undefined\n * - string\n * - CSS style object: { [cssKey]: [cssValue], variants }\n * - Processed style object: { style, variants, isProcessed: true }\n * - Array of any of the above\n */\n\n const resolvedStyle = typeof style === 'function' ? style(props) : style;\n if (Array.isArray(resolvedStyle)) {\n return resolvedStyle.flatMap(subStyle => processStyle(props, subStyle, layerName));\n }\n if (Array.isArray(resolvedStyle?.variants)) {\n let rootStyle;\n if (resolvedStyle.isProcessed) {\n rootStyle = layerName ? shallowLayer(resolvedStyle.style, layerName) : resolvedStyle.style;\n } else {\n const {\n variants,\n ...otherStyles\n } = resolvedStyle;\n rootStyle = layerName ? shallowLayer(serializeStyles(otherStyles), layerName) : otherStyles;\n }\n return processStyleVariants(props, resolvedStyle.variants, [rootStyle], layerName);\n }\n if (resolvedStyle?.isProcessed) {\n return layerName ? shallowLayer(serializeStyles(resolvedStyle.style), layerName) : resolvedStyle.style;\n }\n return layerName ? shallowLayer(serializeStyles(resolvedStyle), layerName) : resolvedStyle;\n}\nfunction processStyleVariants(props, variants, results = [], layerName = undefined) {\n let mergedState; // We might not need it, initialized lazily\n\n variantLoop: for (let i = 0; i < variants.length; i += 1) {\n const variant = variants[i];\n if (typeof variant.props === 'function') {\n mergedState ??= {\n ...props,\n ...props.ownerState,\n ownerState: props.ownerState\n };\n if (!variant.props(mergedState)) {\n continue;\n }\n } else {\n for (const key in variant.props) {\n if (props[key] !== variant.props[key] && props.ownerState?.[key] !== variant.props[key]) {\n continue variantLoop;\n }\n }\n }\n if (typeof variant.style === 'function') {\n mergedState ??= {\n ...props,\n ...props.ownerState,\n ownerState: props.ownerState\n };\n results.push(layerName ? shallowLayer(serializeStyles(variant.style(mergedState)), layerName) : variant.style(mergedState));\n } else {\n results.push(layerName ? shallowLayer(serializeStyles(variant.style), layerName) : variant.style);\n }\n }\n return results;\n}\nexport default function createStyled(input = {}) {\n const {\n themeId,\n defaultTheme = systemDefaultTheme,\n rootShouldForwardProp = shouldForwardProp,\n slotShouldForwardProp = shouldForwardProp\n } = input;\n function styleAttachTheme(props) {\n attachTheme(props, themeId, defaultTheme);\n }\n const styled = (tag, inputOptions = {}) => {\n // If `tag` is already a styled component, filter out the `sx` style function\n // to prevent unnecessary styles generated by the composite components.\n mutateStyles(tag, styles => styles.filter(style => style !== styleFunctionSx));\n const {\n name: componentName,\n slot: componentSlot,\n skipVariantsResolver: inputSkipVariantsResolver,\n skipSx: inputSkipSx,\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot)),\n ...options\n } = inputOptions;\n const layerName = componentName && componentName.startsWith('Mui') || !!componentSlot ? 'components' : 'custom';\n\n // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n const skipSx = inputSkipSx || false;\n let shouldForwardPropOption = shouldForwardProp;\n\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n if (componentSlot === 'Root' || componentSlot === 'root') {\n shouldForwardPropOption = rootShouldForwardProp;\n } else if (componentSlot) {\n // any other slot specified\n shouldForwardPropOption = slotShouldForwardProp;\n } else if (isStringTag(tag)) {\n // for string (html) tag, preserve the behavior in emotion & styled-components.\n shouldForwardPropOption = undefined;\n }\n const defaultStyledResolver = styledEngineStyled(tag, {\n shouldForwardProp: shouldForwardPropOption,\n label: generateStyledLabel(componentName, componentSlot),\n ...options\n });\n const transformStyle = style => {\n // - On the server Emotion doesn't use React.forwardRef for creating components, so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n // - `style` could be a styled component from a babel plugin for component selectors, This condition\n // makes sure that we do not interpolate them.\n if (style.__emotion_real === style) {\n return style;\n }\n if (typeof style === 'function') {\n return function styleFunctionProcessor(props) {\n return processStyle(props, style, props.theme.modularCssLayers ? layerName : undefined);\n };\n }\n if (isPlainObject(style)) {\n const serialized = preprocessStyles(style);\n return function styleObjectProcessor(props) {\n if (!serialized.variants) {\n return props.theme.modularCssLayers ? shallowLayer(serialized.style, layerName) : serialized.style;\n }\n return processStyle(props, serialized, props.theme.modularCssLayers ? layerName : undefined);\n };\n }\n return style;\n };\n const muiStyledResolver = (...expressionsInput) => {\n const expressionsHead = [];\n const expressionsBody = expressionsInput.map(transformStyle);\n const expressionsTail = [];\n\n // Preprocess `props` to set the scoped theme value.\n // This must run before any other expression.\n expressionsHead.push(styleAttachTheme);\n if (componentName && overridesResolver) {\n expressionsTail.push(function styleThemeOverrides(props) {\n const theme = props.theme;\n const styleOverrides = theme.components?.[componentName]?.styleOverrides;\n if (!styleOverrides) {\n return null;\n }\n const resolvedStyleOverrides = {};\n\n // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n // eslint-disable-next-line guard-for-in\n for (const slotKey in styleOverrides) {\n resolvedStyleOverrides[slotKey] = processStyle(props, styleOverrides[slotKey], props.theme.modularCssLayers ? 'theme' : undefined);\n }\n return overridesResolver(props, resolvedStyleOverrides);\n });\n }\n if (componentName && !skipVariantsResolver) {\n expressionsTail.push(function styleThemeVariants(props) {\n const theme = props.theme;\n const themeVariants = theme?.components?.[componentName]?.variants;\n if (!themeVariants) {\n return null;\n }\n return processStyleVariants(props, themeVariants, [], props.theme.modularCssLayers ? 'theme' : undefined);\n });\n }\n if (!skipSx) {\n expressionsTail.push(styleFunctionSx);\n }\n\n // This function can be called as a tagged template, so the first argument would contain\n // CSS `string[]` values.\n if (Array.isArray(expressionsBody[0])) {\n const inputStrings = expressionsBody.shift();\n\n // We need to add placeholders in the tagged template for the custom functions we have\n // possibly added (attachTheme, overrides, variants, and sx).\n const placeholdersHead = new Array(expressionsHead.length).fill('');\n const placeholdersTail = new Array(expressionsTail.length).fill('');\n let outputStrings;\n // prettier-ignore\n {\n outputStrings = [...placeholdersHead, ...inputStrings, ...placeholdersTail];\n outputStrings.raw = [...placeholdersHead, ...inputStrings.raw, ...placeholdersTail];\n }\n\n // The only case where we put something before `attachTheme`\n expressionsHead.unshift(outputStrings);\n }\n const expressions = [...expressionsHead, ...expressionsBody, ...expressionsTail];\n const Component = defaultStyledResolver(...expressions);\n if (tag.muiName) {\n Component.muiName = tag.muiName;\n }\n if (process.env.NODE_ENV !== 'production') {\n Component.displayName = generateDisplayName(componentName, componentSlot, tag);\n }\n return Component;\n };\n if (defaultStyledResolver.withConfig) {\n muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n }\n return muiStyledResolver;\n };\n return styled;\n}\nfunction generateDisplayName(componentName, componentSlot, tag) {\n if (componentName) {\n return `${componentName}${capitalize(componentSlot || '')}`;\n }\n return `Styled(${getDisplayName(tag)})`;\n}\nfunction generateStyledLabel(componentName, componentSlot) {\n let label;\n if (process.env.NODE_ENV !== 'production') {\n if (componentName) {\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n }\n }\n return label;\n}\nfunction isObjectEmpty(object) {\n // eslint-disable-next-line\n for (const _ in object) {\n return false;\n }\n return true;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n return typeof tag === 'string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96;\n}\nfunction lowercaseFirstLetter(string) {\n if (!string) {\n return string;\n }\n return string.charAt(0).toLowerCase() + string.slice(1);\n}","import clsx from 'clsx';\n\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param defaultProps\n * @param props\n * @param mergeClassNameAndStyle If `true`, merges `className` and `style` props instead of overriding them.\n * When `false` (default), props override defaultProps. When `true`, `className` values are concatenated\n * and `style` objects are merged with props taking precedence.\n * @returns resolved props\n */\nexport default function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) {\n const output = {\n ...props\n };\n for (const key in defaultProps) {\n if (Object.prototype.hasOwnProperty.call(defaultProps, key)) {\n const propName = key;\n if (propName === 'components' || propName === 'slots') {\n output[propName] = {\n ...defaultProps[propName],\n ...output[propName]\n };\n } else if (propName === 'componentsProps' || propName === 'slotProps') {\n const defaultSlotProps = defaultProps[propName];\n const slotProps = props[propName];\n if (!slotProps) {\n output[propName] = defaultSlotProps || {};\n } else if (!defaultSlotProps) {\n output[propName] = slotProps;\n } else {\n output[propName] = {\n ...slotProps\n };\n for (const slotKey in defaultSlotProps) {\n if (Object.prototype.hasOwnProperty.call(defaultSlotProps, slotKey)) {\n const slotPropName = slotKey;\n output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName], mergeClassNameAndStyle);\n }\n }\n }\n } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {\n output.className = clsx(defaultProps?.className, props?.className);\n } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {\n output.style = {\n ...defaultProps?.style,\n ...props?.style\n };\n } else if (output[propName] === undefined) {\n output[propName] = defaultProps[propName];\n }\n }\n }\n return output;\n}","function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n return Math.max(min, Math.min(val, max));\n}\nexport default clamp;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/* eslint-disable @typescript-eslint/naming-convention */\nimport clamp from '@mui/utils/clamp';\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n if (process.env.NODE_ENV !== 'production') {\n if (value < min || value > max) {\n console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n }\n }\n return clamp(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n color = color.slice(1);\n const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n let colors = color.match(re);\n if (colors && colors[0].length === 1) {\n colors = colors.map(n => n + n);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (color.length !== color.trim().length) {\n console.error(`MUI: The color: \"${color}\" is invalid. Make sure the color input doesn't contain leading/trailing space.`);\n }\n }\n return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n const marker = color.indexOf('(');\n const type = color.substring(0, marker);\n if (!['rgb', 'rgba', 'hsl', 'hsla', 'color'].includes(type)) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\\n` + 'The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().' : _formatErrorMessage(9, color));\n }\n let values = color.substring(marker + 1, color.length - 1);\n let colorSpace;\n if (type === 'color') {\n values = values.split(' ');\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === '/') {\n values[3] = values[3].slice(1);\n }\n if (!['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].includes(colorSpace)) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\\n` + 'The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.' : _formatErrorMessage(10, colorSpace));\n }\n } else {\n values = values.split(',');\n }\n values = values.map(value => parseFloat(value));\n return {\n type,\n values,\n colorSpace\n };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n const decomposedColor = decomposeColor(color);\n return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.includes('hsl') && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n try {\n return colorChannel(color);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n const {\n type,\n colorSpace\n } = color;\n let {\n values\n } = color;\n if (type.includes('rgb')) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n } else if (type.includes('hsl')) {\n values[1] = `${values[1]}%`;\n values[2] = `${values[2]}%`;\n }\n if (type.includes('color')) {\n values = `${colorSpace} ${values.join(' ')}`;\n } else {\n values = `${values.join(', ')}`;\n }\n return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n // Idempotent\n if (color.startsWith('#')) {\n return color;\n }\n const {\n values\n } = decomposeColor(color);\n return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n color = decomposeColor(color);\n const {\n values\n } = color;\n const h = values[0];\n const s = values[1] / 100;\n const l = values[2] / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n let type = 'rgb';\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n return recomposeColor({\n type,\n values: rgb\n });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n color = decomposeColor(color);\n let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(val => {\n if (color.type !== 'color') {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n });\n\n // Truncate at 3 digits\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n color = decomposeColor(color);\n value = clampWrapper(value);\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n if (color.type === 'color') {\n color.values[3] = `/${value}`;\n } else {\n color.values[3] = value;\n }\n return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n try {\n return alpha(color, value);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.includes('hsl')) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.includes('rgb') || color.type.includes('color')) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n try {\n return darken(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.includes('hsl')) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.includes('rgb')) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n } else if (color.type.includes('color')) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (1 - color.values[i]) * coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n try {\n return lighten(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n try {\n return emphasize(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nexport function blend(background, overlay, opacity, gamma = 1.0) {\n const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n const backgroundColor = decomposeColor(background);\n const overlayColor = decomposeColor(overlay);\n const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n return recomposeColor({\n type: 'rgb',\n values: rgb\n });\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveProps from '@mui/utils/resolveProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PropsContext = /*#__PURE__*/React.createContext(undefined);\nfunction DefaultPropsProvider({\n value,\n children\n}) {\n return /*#__PURE__*/_jsx(PropsContext.Provider, {\n value: value,\n children: children\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * @ignore\n */\n value: PropTypes.object\n} : void 0;\nfunction getThemeProps(params) {\n const {\n theme,\n name,\n props\n } = params;\n if (!theme || !theme.components || !theme.components[name]) {\n return props;\n }\n const config = theme.components[name];\n if (config.defaultProps) {\n // compatible with v5 signature\n return resolveProps(config.defaultProps, props, theme.components.mergeClassNameAndStyle);\n }\n if (!config.styleOverrides && !config.variants) {\n // v6 signature, no property 'defaultProps'\n return resolveProps(config, props, theme.components.mergeClassNameAndStyle);\n }\n return props;\n}\nexport function useDefaultProps({\n props,\n name\n}) {\n const ctx = React.useContext(PropsContext);\n return getThemeProps({\n props,\n name,\n theme: {\n components: ctx\n }\n });\n}\nexport default DefaultPropsProvider;","import preprocessStyles from \"./preprocessStyles.js\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n// We need to pass an argument as `{ theme }` for PigmentCSS, but we don't want to\n// allocate more objects.\nconst arg = {\n theme: undefined\n};\n\n/**\n * Memoize style function on theme.\n * Intended to be used in styled() calls that only need access to the theme.\n */\nexport default function unstable_memoTheme(styleFn) {\n let lastValue;\n let lastTheme;\n return function styleMemoized(props) {\n let value = lastValue;\n if (value === undefined || props.theme !== lastTheme) {\n arg.theme = props.theme;\n value = preprocessStyles(styleFn(arg));\n lastValue = value;\n lastTheme = props.theme;\n }\n return value;\n };\n}","/**\n * The benefit of this function is to help developers get CSS var from theme without specifying the whole variable\n * and they does not need to remember the prefix (defined once).\n */\nexport default function createGetCssVar(prefix = '') {\n function appendVar(...vars) {\n if (!vars.length) {\n return '';\n }\n const value = vars[0];\n if (typeof value === 'string' && !value.match(/(#|\\(|\\)|(-?(\\d*\\.)?\\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\\d*\\.)?\\d+)$|(\\d+ \\d+ \\d+)/)) {\n return `, var(--${prefix ? `${prefix}-` : ''}${value}${appendVar(...vars.slice(1))})`;\n }\n return `, ${value}`;\n }\n\n // AdditionalVars makes `getCssVar` less strict, so it can be use like this `getCssVar('non-mui-variable')` without type error.\n const getCssVar = (field, ...fallbacks) => {\n return `var(--${prefix ? `${prefix}-` : ''}${field}${appendVar(...fallbacks)})`;\n };\n return getCssVar;\n}","/**\n * This function create an object from keys, value and then assign to target\n *\n * @param {Object} obj : the target object to be assigned\n * @param {string[]} keys\n * @param {string | number} value\n *\n * @example\n * const source = {}\n * assignNestedKeys(source, ['palette', 'primary'], 'var(--palette-primary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)' } }\n *\n * @example\n * const source = { palette: { primary: 'var(--palette-primary)' } }\n * assignNestedKeys(source, ['palette', 'secondary'], 'var(--palette-secondary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)', secondary: 'var(--palette-secondary)' } }\n */\nexport const assignNestedKeys = (obj, keys, value, arrayKeys = []) => {\n let temp = obj;\n keys.forEach((k, index) => {\n if (index === keys.length - 1) {\n if (Array.isArray(temp)) {\n temp[Number(k)] = value;\n } else if (temp && typeof temp === 'object') {\n temp[k] = value;\n }\n } else if (temp && typeof temp === 'object') {\n if (!temp[k]) {\n temp[k] = arrayKeys.includes(k) ? [] : {};\n }\n temp = temp[k];\n }\n });\n};\n\n/**\n *\n * @param {Object} obj : source object\n * @param {Function} callback : a function that will be called when\n * - the deepest key in source object is reached\n * - the value of the deepest key is NOT `undefined` | `null`\n *\n * @example\n * walkObjectDeep({ palette: { primary: { main: '#000000' } } }, console.log)\n * // ['palette', 'primary', 'main'] '#000000'\n */\nexport const walkObjectDeep = (obj, callback, shouldSkipPaths) => {\n function recurse(object, parentKeys = [], arrayKeys = []) {\n Object.entries(object).forEach(([key, value]) => {\n if (!shouldSkipPaths || shouldSkipPaths && !shouldSkipPaths([...parentKeys, key])) {\n if (value !== undefined && value !== null) {\n if (typeof value === 'object' && Object.keys(value).length > 0) {\n recurse(value, [...parentKeys, key], Array.isArray(value) ? [...arrayKeys, key] : arrayKeys);\n } else {\n callback([...parentKeys, key], value, arrayKeys);\n }\n }\n }\n });\n }\n recurse(obj);\n};\nconst getCssValue = (keys, value) => {\n if (typeof value === 'number') {\n if (['lineHeight', 'fontWeight', 'opacity', 'zIndex'].some(prop => keys.includes(prop))) {\n // CSS property that are unitless\n return value;\n }\n const lastKey = keys[keys.length - 1];\n if (lastKey.toLowerCase().includes('opacity')) {\n // opacity values are unitless\n return value;\n }\n return `${value}px`;\n }\n return value;\n};\n\n/**\n * a function that parse theme and return { css, vars }\n *\n * @param {Object} theme\n * @param {{\n * prefix?: string,\n * shouldSkipGeneratingVar?: (objectPathKeys: Array<string>, value: string | number) => boolean\n * }} options.\n * `prefix`: The prefix of the generated CSS variables. This function does not change the value.\n *\n * @returns {{ css: Object, vars: Object }} `css` is the stylesheet, `vars` is an object to get css variable (same structure as theme).\n *\n * @example\n * const { css, vars } = parser({\n * fontSize: 12,\n * lineHeight: 1.2,\n * palette: { primary: { 500: 'var(--color)' } }\n * }, { prefix: 'foo' })\n *\n * console.log(css) // { '--foo-fontSize': '12px', '--foo-lineHeight': 1.2, '--foo-palette-primary-500': 'var(--color)' }\n * console.log(vars) // { fontSize: 'var(--foo-fontSize)', lineHeight: 'var(--foo-lineHeight)', palette: { primary: { 500: 'var(--foo-palette-primary-500)' } } }\n */\nexport default function cssVarsParser(theme, options) {\n const {\n prefix,\n shouldSkipGeneratingVar\n } = options || {};\n const css = {};\n const vars = {};\n const varsWithDefaults = {};\n walkObjectDeep(theme, (keys, value, arrayKeys) => {\n if (typeof value === 'string' || typeof value === 'number') {\n if (!shouldSkipGeneratingVar || !shouldSkipGeneratingVar(keys, value)) {\n // only create css & var if `shouldSkipGeneratingVar` return false\n const cssVar = `--${prefix ? `${prefix}-` : ''}${keys.join('-')}`;\n const resolvedValue = getCssValue(keys, value);\n Object.assign(css, {\n [cssVar]: resolvedValue\n });\n assignNestedKeys(vars, keys, `var(${cssVar})`, arrayKeys);\n assignNestedKeys(varsWithDefaults, keys, `var(${cssVar}, ${resolvedValue})`, arrayKeys);\n }\n }\n }, keys => keys[0] === 'vars' // skip 'vars/*' paths\n );\n return {\n css,\n vars,\n varsWithDefaults\n };\n}","import deepmerge from '@mui/utils/deepmerge';\nimport cssVarsParser from \"./cssVarsParser.js\";\nfunction prepareCssVars(theme, parserConfig = {}) {\n const {\n getSelector = defaultGetSelector,\n disableCssColorScheme,\n colorSchemeSelector: selector,\n enableContrastVars\n } = parserConfig;\n // @ts-ignore - ignore components do not exist\n const {\n colorSchemes = {},\n components,\n defaultColorScheme = 'light',\n ...otherTheme\n } = theme;\n const {\n vars: rootVars,\n css: rootCss,\n varsWithDefaults: rootVarsWithDefaults\n } = cssVarsParser(otherTheme, parserConfig);\n let themeVars = rootVarsWithDefaults;\n const colorSchemesMap = {};\n const {\n [defaultColorScheme]: defaultScheme,\n ...otherColorSchemes\n } = colorSchemes;\n Object.entries(otherColorSchemes || {}).forEach(([key, scheme]) => {\n const {\n vars,\n css,\n varsWithDefaults\n } = cssVarsParser(scheme, parserConfig);\n themeVars = deepmerge(themeVars, varsWithDefaults);\n colorSchemesMap[key] = {\n css,\n vars\n };\n });\n if (defaultScheme) {\n // default color scheme vars should be merged last to set as default\n const {\n css,\n vars,\n varsWithDefaults\n } = cssVarsParser(defaultScheme, parserConfig);\n themeVars = deepmerge(themeVars, varsWithDefaults);\n colorSchemesMap[defaultColorScheme] = {\n css,\n vars\n };\n }\n function defaultGetSelector(colorScheme, cssObject) {\n let rule = selector;\n if (selector === 'class') {\n rule = '.%s';\n }\n if (selector === 'data') {\n rule = '[data-%s]';\n }\n if (selector?.startsWith('data-') && !selector.includes('%s')) {\n // 'data-joy-color-scheme' -> '[data-joy-color-scheme=\"%s\"]'\n rule = `[${selector}=\"%s\"]`;\n }\n if (colorScheme) {\n if (rule === 'media') {\n if (theme.defaultColorScheme === colorScheme) {\n return ':root';\n }\n const mode = colorSchemes[colorScheme]?.palette?.mode || colorScheme;\n return {\n [`@media (prefers-color-scheme: ${mode})`]: {\n ':root': cssObject\n }\n };\n }\n if (rule) {\n if (theme.defaultColorScheme === colorScheme) {\n return `:root, ${rule.replace('%s', String(colorScheme))}`;\n }\n return rule.replace('%s', String(colorScheme));\n }\n }\n return ':root';\n }\n const generateThemeVars = () => {\n let vars = {\n ...rootVars\n };\n Object.entries(colorSchemesMap).forEach(([, {\n vars: schemeVars\n }]) => {\n vars = deepmerge(vars, schemeVars);\n });\n return vars;\n };\n const generateStyleSheets = () => {\n const stylesheets = [];\n const colorScheme = theme.defaultColorScheme || 'light';\n function insertStyleSheet(key, css) {\n if (Object.keys(css).length) {\n stylesheets.push(typeof key === 'string' ? {\n [key]: {\n ...css\n }\n } : key);\n }\n }\n insertStyleSheet(getSelector(undefined, {\n ...rootCss\n }), rootCss);\n const {\n [colorScheme]: defaultSchemeVal,\n ...other\n } = colorSchemesMap;\n if (defaultSchemeVal) {\n // default color scheme has to come before other color schemes\n const {\n css\n } = defaultSchemeVal;\n const cssColorSheme = colorSchemes[colorScheme]?.palette?.mode;\n const finalCss = !disableCssColorScheme && cssColorSheme ? {\n colorScheme: cssColorSheme,\n ...css\n } : {\n ...css\n };\n insertStyleSheet(getSelector(colorScheme, {\n ...finalCss\n }), finalCss);\n }\n Object.entries(other).forEach(([key, {\n css\n }]) => {\n const cssColorSheme = colorSchemes[key]?.palette?.mode;\n const finalCss = !disableCssColorScheme && cssColorSheme ? {\n colorScheme: cssColorSheme,\n ...css\n } : {\n ...css\n };\n insertStyleSheet(getSelector(key, {\n ...finalCss\n }), finalCss);\n });\n if (enableContrastVars) {\n stylesheets.push({\n ':root': {\n // use double underscore to indicate that these are private variables\n '--__l-threshold': '0.7',\n '--__l': 'clamp(0, (l / var(--__l-threshold) - 1) * -infinity, 1)',\n '--__a': 'clamp(0.87, (l / var(--__l-threshold) - 1) * -infinity, 1)' // 0.87 is the default alpha value for black text.\n }\n });\n }\n return stylesheets;\n };\n return {\n vars: themeVars,\n generateThemeVars,\n generateStyleSheets\n };\n}\nexport default prepareCssVars;","/* eslint-disable import/prefer-default-export */\nexport function createGetColorSchemeSelector(selector) {\n return function getColorSchemeSelector(colorScheme) {\n if (selector === 'media') {\n if (process.env.NODE_ENV !== 'production') {\n if (colorScheme !== 'light' && colorScheme !== 'dark') {\n console.error(`MUI: @media (prefers-color-scheme) supports only 'light' or 'dark', but receive '${colorScheme}'.`);\n }\n }\n return `@media (prefers-color-scheme: ${colorScheme})`;\n }\n if (selector) {\n if (selector.startsWith('data-') && !selector.includes('%s')) {\n return `[${selector}=\"${colorScheme}\"] &`;\n }\n if (selector === 'class') {\n return `.${colorScheme} &`;\n }\n if (selector === 'data') {\n return `[data-${colorScheme}] &`;\n }\n return `${selector.replace('%s', colorScheme)} &`;\n }\n return '&';\n };\n}","const common = {\n black: '#000',\n white: '#fff'\n};\nexport default common;","const grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#f5f5f5',\n A200: '#eeeeee',\n A400: '#bdbdbd',\n A700: '#616161'\n};\nexport default grey;","const purple = {\n 50: '#f3e5f5',\n 100: '#e1bee7',\n 200: '#ce93d8',\n 300: '#ba68c8',\n 400: '#ab47bc',\n 500: '#9c27b0',\n 600: '#8e24aa',\n 700: '#7b1fa2',\n 800: '#6a1b9a',\n 900: '#4a148c',\n A100: '#ea80fc',\n A200: '#e040fb',\n A400: '#d500f9',\n A700: '#aa00ff'\n};\nexport default purple;","const red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\nexport default red;","const orange = {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n A100: '#ffd180',\n A200: '#ffab40',\n A400: '#ff9100',\n A700: '#ff6d00'\n};\nexport default orange;","const blue = {\n 50: '#e3f2fd',\n 100: '#bbdefb',\n 200: '#90caf9',\n 300: '#64b5f6',\n 400: '#42a5f5',\n 500: '#2196f3',\n 600: '#1e88e5',\n 700: '#1976d2',\n 800: '#1565c0',\n 900: '#0d47a1',\n A100: '#82b1ff',\n A200: '#448aff',\n A400: '#2979ff',\n A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n 50: '#e1f5fe',\n 100: '#b3e5fc',\n 200: '#81d4fa',\n 300: '#4fc3f7',\n 400: '#29b6f6',\n 500: '#03a9f4',\n 600: '#039be5',\n 700: '#0288d1',\n 800: '#0277bd',\n 900: '#01579b',\n A100: '#80d8ff',\n A200: '#40c4ff',\n A400: '#00b0ff',\n A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n A100: '#b9f6ca',\n A200: '#69f0ae',\n A400: '#00e676',\n A700: '#00c853'\n};\nexport default green;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { darken, getContrastRatio, lighten } from '@mui/system/colorManipulator';\nimport common from \"../colors/common.js\";\nimport grey from \"../colors/grey.js\";\nimport purple from \"../colors/purple.js\";\nimport red from \"../colors/red.js\";\nimport orange from \"../colors/orange.js\";\nimport blue from \"../colors/blue.js\";\nimport lightBlue from \"../colors/lightBlue.js\";\nimport green from \"../colors/green.js\";\nfunction getLight() {\n return {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: 'rgba(0, 0, 0, 0.87)',\n // Secondary text.\n secondary: 'rgba(0, 0, 0, 0.6)',\n // Disabled text have even lower visual prominence.\n disabled: 'rgba(0, 0, 0, 0.38)'\n },\n // The color used to divide different elements.\n divider: 'rgba(0, 0, 0, 0.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: common.white,\n default: common.white\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: 'rgba(0, 0, 0, 0.54)',\n // The color of an hovered action.\n hover: 'rgba(0, 0, 0, 0.04)',\n hoverOpacity: 0.04,\n // The color of a selected action.\n selected: 'rgba(0, 0, 0, 0.08)',\n selectedOpacity: 0.08,\n // The color of a disabled action.\n disabled: 'rgba(0, 0, 0, 0.26)',\n // The background color of a disabled action.\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(0, 0, 0, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.12\n }\n };\n}\nexport const light = getLight();\nfunction getDark() {\n return {\n text: {\n primary: common.white,\n secondary: 'rgba(255, 255, 255, 0.7)',\n disabled: 'rgba(255, 255, 255, 0.5)',\n icon: 'rgba(255, 255, 255, 0.5)'\n },\n divider: 'rgba(255, 255, 255, 0.12)',\n background: {\n paper: '#121212',\n default: '#121212'\n },\n action: {\n active: common.white,\n hover: 'rgba(255, 255, 255, 0.08)',\n hoverOpacity: 0.08,\n selected: 'rgba(255, 255, 255, 0.16)',\n selectedOpacity: 0.16,\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(255, 255, 255, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.24\n }\n };\n}\nexport const dark = getDark();\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = tonalOffset.light || tonalOffset;\n const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = lighten(intent.main, tonalOffsetLight);\n } else if (direction === 'dark') {\n intent.dark = darken(intent.main, tonalOffsetDark);\n }\n }\n}\nfunction mixLightOrDark(colorSpace, intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = tonalOffset.light || tonalOffset;\n const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = `color-mix(in ${colorSpace}, ${intent.main}, #fff ${(tonalOffsetLight * 100).toFixed(0)}%)`;\n } else if (direction === 'dark') {\n intent.dark = `color-mix(in ${colorSpace}, ${intent.main}, #000 ${(tonalOffsetDark * 100).toFixed(0)}%)`;\n }\n }\n}\nfunction getDefaultPrimary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: blue[200],\n light: blue[50],\n dark: blue[400]\n };\n }\n return {\n main: blue[700],\n light: blue[400],\n dark: blue[800]\n };\n}\nfunction getDefaultSecondary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: purple[200],\n light: purple[50],\n dark: purple[400]\n };\n }\n return {\n main: purple[500],\n light: purple[300],\n dark: purple[700]\n };\n}\nfunction getDefaultError(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: red[500],\n light: red[300],\n dark: red[700]\n };\n }\n return {\n main: red[700],\n light: red[400],\n dark: red[800]\n };\n}\nfunction getDefaultInfo(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: lightBlue[400],\n light: lightBlue[300],\n dark: lightBlue[700]\n };\n }\n return {\n main: lightBlue[700],\n light: lightBlue[500],\n dark: lightBlue[900]\n };\n}\nfunction getDefaultSuccess(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: green[400],\n light: green[300],\n dark: green[700]\n };\n }\n return {\n main: green[800],\n light: green[500],\n dark: green[900]\n };\n}\nfunction getDefaultWarning(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: orange[400],\n light: orange[300],\n dark: orange[700]\n };\n }\n return {\n main: '#ed6c02',\n // closest to orange[800] that pass 3:1.\n light: orange[500],\n dark: orange[900]\n };\n}\n\n// Use the same name as the experimental CSS `contrast-color` function.\nexport function contrastColor(background) {\n return `oklch(from ${background} var(--__l) 0 h / var(--__a))`;\n}\nexport default function createPalette(palette) {\n const {\n mode = 'light',\n contrastThreshold = 3,\n tonalOffset = 0.2,\n colorSpace,\n ...other\n } = palette;\n const primary = palette.primary || getDefaultPrimary(mode);\n const secondary = palette.secondary || getDefaultSecondary(mode);\n const error = palette.error || getDefaultError(mode);\n const info = palette.info || getDefaultInfo(mode);\n const success = palette.success || getDefaultSuccess(mode);\n const warning = palette.warning || getDefaultWarning(mode);\n\n // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n function getContrastText(background) {\n if (colorSpace) {\n return contrastColor(background);\n }\n const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n if (process.env.NODE_ENV !== 'production') {\n const contrast = getContrastRatio(background, contrastText);\n if (contrast < 3) {\n console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n }\n }\n return contrastText;\n }\n const augmentColor = ({\n color,\n name,\n mainShade = 500,\n lightShade = 300,\n darkShade = 700\n }) => {\n color = {\n ...color\n };\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n if (!color.hasOwnProperty('main')) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `The color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatErrorMessage(11, name ? ` (${name})` : '', mainShade));\n }\n if (typeof color.main !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\\n` + '\\n' + 'Did you intend to use one of the following approaches?\\n' + '\\n' + 'import { green } from \"@mui/material/colors\";\\n' + '\\n' + 'const theme1 = createTheme({ palette: {\\n' + ' primary: green,\\n' + '} });\\n' + '\\n' + 'const theme2 = createTheme({ palette: {\\n' + ' primary: { main: green[500] },\\n' + '} });' : _formatErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n }\n if (colorSpace) {\n mixLightOrDark(colorSpace, color, 'light', lightShade, tonalOffset);\n mixLightOrDark(colorSpace, color, 'dark', darkShade, tonalOffset);\n } else {\n addLightOrDark(color, 'light', lightShade, tonalOffset);\n addLightOrDark(color, 'dark', darkShade, tonalOffset);\n }\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n return color;\n };\n let modeHydrated;\n if (mode === 'light') {\n modeHydrated = getLight();\n } else if (mode === 'dark') {\n modeHydrated = getDark();\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!modeHydrated) {\n console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n }\n }\n const paletteOutput = deepmerge({\n // A collection of common colors.\n common: {\n ...common\n },\n // prevent mutable object.\n // The palette mode, can be light or dark.\n mode,\n // The colors used to represent primary interface elements for a user.\n primary: augmentColor({\n color: primary,\n name: 'primary'\n }),\n // The colors used to represent secondary interface elements for a user.\n secondary: augmentColor({\n color: secondary,\n name: 'secondary',\n mainShade: 'A400',\n lightShade: 'A200',\n darkShade: 'A700'\n }),\n // The colors used to represent interface elements that the user should be made aware of.\n error: augmentColor({\n color: error,\n name: 'error'\n }),\n // The colors used to represent potentially dangerous actions or important messages.\n warning: augmentColor({\n color: warning,\n name: 'warning'\n }),\n // The colors used to present information to the user that is neutral and not necessarily important.\n info: augmentColor({\n color: info,\n name: 'info'\n }),\n // The colors used to indicate the successful completion of an action that user triggered.\n success: augmentColor({\n color: success,\n name: 'success'\n }),\n // The grey colors.\n grey,\n // Used by `getContrastText()` to maximize the contrast between\n // the background and the text.\n contrastThreshold,\n // Takes a background color and returns the text color that maximizes the contrast.\n getContrastText,\n // Generate a rich color object.\n augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset,\n // The light and dark mode object.\n ...modeHydrated\n }, other);\n return paletteOutput;\n}","export default function prepareTypographyVars(typography) {\n const vars = {};\n const entries = Object.entries(typography);\n entries.forEach(entry => {\n const [key, value] = entry;\n if (typeof value === 'object') {\n vars[key] = `${value.fontStyle ? `${value.fontStyle} ` : ''}${value.fontVariant ? `${value.fontVariant} ` : ''}${value.fontWeight ? `${value.fontWeight} ` : ''}${value.fontStretch ? `${value.fontStretch} ` : ''}${value.fontSize || ''}${value.lineHeight ? `/${value.lineHeight} ` : ''}${value.fontFamily || ''}`;\n }\n });\n return vars;\n}","export default function createMixins(breakpoints, mixins) {\n return {\n toolbar: {\n minHeight: 56,\n [breakpoints.up('xs')]: {\n '@media (orientation: landscape)': {\n minHeight: 48\n }\n },\n [breakpoints.up('sm')]: {\n minHeight: 64\n }\n },\n ...mixins\n };\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n const {\n fontFamily = defaultFontFamily,\n // The default font size of the Material Specification.\n fontSize = 14,\n // px\n fontWeightLight = 300,\n fontWeightRegular = 400,\n fontWeightMedium = 500,\n fontWeightBold = 700,\n // Tell MUI what's the font-size on the html element.\n // 16px is the default font-size used by browsers.\n htmlFontSize = 16,\n // Apply the CSS properties to all the variants.\n allVariants,\n pxToRem: pxToRem2,\n ...other\n } = typeof typography === 'function' ? typography(palette) : typography;\n if (process.env.NODE_ENV !== 'production') {\n if (typeof fontSize !== 'number') {\n console.error('MUI: `fontSize` is required to be a number.');\n }\n if (typeof htmlFontSize !== 'number') {\n console.error('MUI: `htmlFontSize` is required to be a number.');\n }\n }\n const coef = fontSize / 14;\n const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => ({\n fontFamily,\n fontWeight,\n fontSize: pxToRem(size),\n // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight,\n // The letter spacing was designed for the Roboto font-family. Using the same letter-spacing\n // across font-families can cause issues with the kerning.\n ...(fontFamily === defaultFontFamily ? {\n letterSpacing: `${round(letterSpacing / size)}em`\n } : {}),\n ...casing,\n ...allVariants\n });\n const variants = {\n h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n inherit: {\n fontFamily: 'inherit',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit'\n }\n };\n return deepmerge({\n htmlFontSize,\n pxToRem,\n fontFamily,\n fontSize,\n fontWeightLight,\n fontWeightRegular,\n fontWeightMedium,\n fontWeightBold,\n ...variants\n }, other, {\n clone: false // No need to clone deep\n });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n // This is the most common easing curve.\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n const constant = height / 36;\n\n // https://www.desmos.com/calculator/vbrp3ggqet\n return Math.min(Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10), 3000);\n}\nexport default function createTransitions(inputTransitions) {\n const mergedEasing = {\n ...easing,\n ...inputTransitions.easing\n };\n const mergedDuration = {\n ...duration,\n ...inputTransitions.duration\n };\n const create = (props = ['all'], options = {}) => {\n const {\n duration: durationOption = mergedDuration.standard,\n easing: easingOption = mergedEasing.easeInOut,\n delay = 0,\n ...other\n } = options;\n if (process.env.NODE_ENV !== 'production') {\n const isString = value => typeof value === 'string';\n const isNumber = value => !Number.isNaN(parseFloat(value));\n if (!isString(props) && !Array.isArray(props)) {\n console.error('MUI: Argument \"props\" must be a string or Array.');\n }\n if (!isNumber(durationOption) && !isString(durationOption)) {\n console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n }\n if (!isString(easingOption)) {\n console.error('MUI: Argument \"easing\" must be a string.');\n }\n if (!isNumber(delay) && !isString(delay)) {\n console.error('MUI: Argument \"delay\" must be a number or a string.');\n }\n if (typeof options !== 'object') {\n console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n }\n if (Object.keys(other).length !== 0) {\n console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n }\n }\n return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n };\n return {\n getAutoHeightDuration,\n create,\n ...inputTransitions,\n easing: mergedEasing,\n duration: mergedDuration\n };\n}","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n mobileStepper: 1000,\n fab: 1050,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\nexport default zIndex;","/* eslint-disable import/prefer-default-export */\nimport { isPlainObject } from '@mui/utils/deepmerge';\nfunction isSerializable(val) {\n return isPlainObject(val) || typeof val === 'undefined' || typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number' || Array.isArray(val);\n}\n\n/**\n * `baseTheme` usually comes from `createTheme()` or `extendTheme()`.\n *\n * This function is intended to be used with zero-runtime CSS-in-JS like Pigment CSS\n * For example, in a Next.js project:\n *\n * ```js\n * // next.config.js\n * const { extendTheme } = require('@mui/material/styles');\n *\n * const theme = extendTheme();\n * // `.toRuntimeSource` is Pigment CSS specific to create a theme that is available at runtime.\n * theme.toRuntimeSource = stringifyTheme;\n *\n * module.exports = withPigment({\n * theme,\n * });\n * ```\n */\nexport function stringifyTheme(baseTheme = {}) {\n const serializableTheme = {\n ...baseTheme\n };\n function serializeTheme(object) {\n const array = Object.entries(object);\n // eslint-disable-next-line no-plusplus\n for (let index = 0; index < array.length; index++) {\n const [key, value] = array[index];\n if (!isSerializable(value) || key.startsWith('unstable_')) {\n delete object[key];\n } else if (isPlainObject(value)) {\n object[key] = {\n ...value\n };\n serializeTheme(object[key]);\n }\n }\n }\n serializeTheme(serializableTheme);\n return `import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles';\n\nconst theme = ${JSON.stringify(serializableTheme, null, 2)};\n\ntheme.breakpoints = createBreakpoints(theme.breakpoints || {});\ntheme.transitions = createTransitions(theme.transitions || {});\n\nexport default theme;`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport systemCreateTheme from '@mui/system/createTheme';\nimport { alpha as systemAlpha, lighten as systemLighten, darken as systemDarken } from '@mui/system/colorManipulator';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport createMixins from \"./createMixins.js\";\nimport createPalette from \"./createPalette.js\";\nimport createTypography from \"./createTypography.js\";\nimport shadows from \"./shadows.js\";\nimport createTransitions from \"./createTransitions.js\";\nimport zIndex from \"./zIndex.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nfunction coefficientToPercentage(coefficient) {\n if (typeof coefficient === 'number') {\n return `${(coefficient * 100).toFixed(0)}%`;\n }\n return `calc((${coefficient}) * 100%)`;\n}\n\n// This can be removed when moved to `color-mix()` entirely.\nconst parseAddition = str => {\n if (!Number.isNaN(+str)) {\n return +str;\n }\n const numbers = str.match(/\\d*\\.?\\d+/g);\n if (!numbers) {\n return 0;\n }\n let sum = 0;\n for (let i = 0; i < numbers.length; i += 1) {\n sum += +numbers[i];\n }\n return sum;\n};\nfunction attachColorManipulators(theme) {\n Object.assign(theme, {\n alpha(color, coefficient) {\n const obj = this || theme;\n if (obj.colorSpace) {\n return `oklch(from ${color} l c h / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n }\n if (obj.vars) {\n // To preserve the behavior of the CSS theme variables\n // In the future, this could be replaced by `color-mix` (when https://caniuse.com/?search=color-mix reaches 95%).\n return `rgba(${color.replace(/var\\(--([^,\\s)]+)(?:,[^)]+)?\\)+/g, 'var(--$1Channel)')} / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n }\n return systemAlpha(color, parseAddition(coefficient));\n },\n lighten(color, coefficient) {\n const obj = this || theme;\n if (obj.colorSpace) {\n return `color-mix(in ${obj.colorSpace}, ${color}, #fff ${coefficientToPercentage(coefficient)})`;\n }\n return systemLighten(color, coefficient);\n },\n darken(color, coefficient) {\n const obj = this || theme;\n if (obj.colorSpace) {\n return `color-mix(in ${obj.colorSpace}, ${color}, #000 ${coefficientToPercentage(coefficient)})`;\n }\n return systemDarken(color, coefficient);\n }\n });\n}\nfunction createThemeNoVars(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput,\n mixins: mixinsInput = {},\n spacing: spacingInput,\n palette: paletteInput = {},\n transitions: transitionsInput = {},\n typography: typographyInput = {},\n shape: shapeInput,\n colorSpace,\n ...other\n } = options;\n if (options.vars &&\n // The error should throw only for the root theme creation because user is not allowed to use a custom node `vars`.\n // `generateThemeVars` is the closest identifier for checking that the `options` is a result of `createTheme` with CSS variables so that user can create new theme for nested ThemeProvider.\n options.generateThemeVars === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `vars` is a private field used for CSS variables support.\\n' +\n // #host-reference\n 'Please use another name or follow the [docs](https://mui.com/material-ui/customization/css-theme-variables/usage/) to enable the feature.' : _formatErrorMessage(20));\n }\n const palette = createPalette({\n ...paletteInput,\n colorSpace\n });\n const systemTheme = systemCreateTheme(options);\n let muiTheme = deepmerge(systemTheme, {\n mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n palette,\n // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n shadows: shadows.slice(),\n typography: createTypography(palette, typographyInput),\n transitions: createTransitions(transitionsInput),\n zIndex: {\n ...zIndex\n }\n });\n muiTheme = deepmerge(muiTheme, other);\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n if (process.env.NODE_ENV !== 'production') {\n // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n const traverse = (node, component) => {\n let key;\n\n // eslint-disable-next-line guard-for-in\n for (key in node) {\n const child = node[key];\n if (stateClasses.includes(key) && Object.keys(child).length > 0) {\n if (process.env.NODE_ENV !== 'production') {\n const stateClass = generateUtilityClass('', key);\n console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n root: {\n [`&.${stateClass}`]: child\n }\n }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n }\n // Remove the style to prevent global conflicts.\n node[key] = {};\n }\n }\n };\n Object.keys(muiTheme.components).forEach(component => {\n const styleOverrides = muiTheme.components[component].styleOverrides;\n if (styleOverrides && component.startsWith('Mui')) {\n traverse(styleOverrides, component);\n }\n });\n }\n muiTheme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...other?.unstable_sxConfig\n };\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n muiTheme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n attachColorManipulators(muiTheme);\n return muiTheme;\n}\nexport default createThemeNoVars;","// Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61\nexport default function getOverlayAlpha(elevation) {\n let alphaValue;\n if (elevation < 1) {\n alphaValue = 5.11916 * elevation ** 2;\n } else {\n alphaValue = 4.5 * Math.log(elevation + 1) + 2;\n }\n return Math.round(alphaValue * 10) / 1000;\n}","import createPalette from \"./createPalette.js\";\nimport getOverlayAlpha from \"./getOverlayAlpha.js\";\nconst defaultDarkOverlays = [...Array(25)].map((_, index) => {\n if (index === 0) {\n return 'none';\n }\n const overlay = getOverlayAlpha(index);\n return `linear-gradient(rgba(255 255 255 / ${overlay}), rgba(255 255 255 / ${overlay}))`;\n});\nexport function getOpacity(mode) {\n return {\n inputPlaceholder: mode === 'dark' ? 0.5 : 0.42,\n inputUnderline: mode === 'dark' ? 0.7 : 0.42,\n switchTrackDisabled: mode === 'dark' ? 0.2 : 0.12,\n switchTrack: mode === 'dark' ? 0.3 : 0.38\n };\n}\nexport function getOverlays(mode) {\n return mode === 'dark' ? defaultDarkOverlays : [];\n}\nexport default function createColorScheme(options) {\n const {\n palette: paletteInput = {\n mode: 'light'\n },\n // need to cast to avoid module augmentation test\n opacity,\n overlays,\n colorSpace,\n ...other\n } = options;\n // need to cast because `colorSpace` is considered internal at the moment.\n const palette = createPalette({\n ...paletteInput,\n colorSpace\n });\n return {\n palette,\n opacity: {\n ...getOpacity(palette.mode),\n ...opacity\n },\n overlays: overlays || getOverlays(palette.mode),\n ...other\n };\n}","export default function shouldSkipGeneratingVar(keys) {\n return !!keys[0].match(/(cssVarPrefix|colorSchemeSelector|modularCssLayers|rootSelector|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||\n // ends with sxConfig\n keys[0] === 'palette' && !!keys[1]?.match(/(mode|contrastThreshold|tonalOffset)/);\n}","/**\n * @internal These variables should not appear in the :root stylesheet when the `defaultColorScheme=\"dark\"`\n */\nconst excludeVariablesFromRoot = cssVarPrefix => [...[...Array(25)].map((_, index) => `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}overlays-${index}`), `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkBg`, `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkColor`];\nexport default excludeVariablesFromRoot;","import excludeVariablesFromRoot from \"./excludeVariablesFromRoot.js\";\nexport default theme => (colorScheme, css) => {\n const root = theme.rootSelector || ':root';\n const selector = theme.colorSchemeSelector;\n let rule = selector;\n if (selector === 'class') {\n rule = '.%s';\n }\n if (selector === 'data') {\n rule = '[data-%s]';\n }\n if (selector?.startsWith('data-') && !selector.includes('%s')) {\n // 'data-mui-color-scheme' -> '[data-mui-color-scheme=\"%s\"]'\n rule = `[${selector}=\"%s\"]`;\n }\n if (theme.defaultColorScheme === colorScheme) {\n if (colorScheme === 'dark') {\n const excludedVariables = {};\n excludeVariablesFromRoot(theme.cssVarPrefix).forEach(cssVar => {\n excludedVariables[cssVar] = css[cssVar];\n delete css[cssVar];\n });\n if (rule === 'media') {\n return {\n [root]: css,\n [`@media (prefers-color-scheme: dark)`]: {\n [root]: excludedVariables\n }\n };\n }\n if (rule) {\n return {\n [rule.replace('%s', colorScheme)]: excludedVariables,\n [`${root}, ${rule.replace('%s', colorScheme)}`]: css\n };\n }\n return {\n [root]: {\n ...css,\n ...excludedVariables\n }\n };\n }\n if (rule && rule !== 'media') {\n return `${root}, ${rule.replace('%s', String(colorScheme))}`;\n }\n } else if (colorScheme) {\n if (rule === 'media') {\n return {\n [`@media (prefers-color-scheme: ${String(colorScheme)})`]: {\n [root]: css\n }\n };\n }\n if (rule) {\n return rule.replace('%s', String(colorScheme));\n }\n }\n return root;\n};","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { unstable_createGetCssVar as systemCreateGetCssVar, createSpacing } from '@mui/system';\nimport { createUnarySpacing } from '@mui/system/spacing';\nimport { prepareCssVars, prepareTypographyVars, createGetColorSchemeSelector } from '@mui/system/cssVars';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport { private_safeColorChannel as safeColorChannel, private_safeAlpha as safeAlpha, private_safeDarken as safeDarken, private_safeLighten as safeLighten, private_safeEmphasize as safeEmphasize, hslToRgb } from '@mui/system/colorManipulator';\nimport createThemeNoVars from \"./createThemeNoVars.js\";\nimport createColorScheme, { getOpacity, getOverlays } from \"./createColorScheme.js\";\nimport defaultShouldSkipGeneratingVar from \"./shouldSkipGeneratingVar.js\";\nimport defaultGetSelector from \"./createGetSelector.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nimport { light, dark } from \"./createPalette.js\";\nfunction assignNode(obj, keys) {\n keys.forEach(k => {\n if (!obj[k]) {\n obj[k] = {};\n }\n });\n}\nfunction setColor(obj, key, defaultValue) {\n if (!obj[key] && defaultValue) {\n obj[key] = defaultValue;\n }\n}\nfunction toRgb(color) {\n if (typeof color !== 'string' || !color.startsWith('hsl')) {\n return color;\n }\n return hslToRgb(color);\n}\nfunction setColorChannel(obj, key) {\n if (!(`${key}Channel` in obj)) {\n // custom channel token is not provided, generate one.\n // if channel token can't be generated, show a warning.\n obj[`${key}Channel`] = safeColorChannel(toRgb(obj[key]), `MUI: Can't create \\`palette.${key}Channel\\` because \\`palette.${key}\\` is not one of these formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` + '\\n' + `To suppress this warning, you need to explicitly provide the \\`palette.${key}Channel\\` as a string (in rgb format, for example \"12 12 12\") or undefined if you want to remove the channel token.`);\n }\n}\nfunction getSpacingVal(spacingInput) {\n if (typeof spacingInput === 'number') {\n return `${spacingInput}px`;\n }\n if (typeof spacingInput === 'string' || typeof spacingInput === 'function' || Array.isArray(spacingInput)) {\n return spacingInput;\n }\n return '8px';\n}\nconst silent = fn => {\n try {\n return fn();\n } catch (error) {\n // ignore error\n }\n return undefined;\n};\nexport const createGetCssVar = (cssVarPrefix = 'mui') => systemCreateGetCssVar(cssVarPrefix);\nfunction attachColorScheme(colorSpace, colorSchemes, scheme, restTheme, colorScheme) {\n if (!scheme) {\n return undefined;\n }\n scheme = scheme === true ? {} : scheme;\n const mode = colorScheme === 'dark' ? 'dark' : 'light';\n if (!restTheme) {\n colorSchemes[colorScheme] = createColorScheme({\n ...scheme,\n palette: {\n mode,\n ...scheme?.palette\n },\n colorSpace\n });\n return undefined;\n }\n const {\n palette,\n ...muiTheme\n } = createThemeNoVars({\n ...restTheme,\n palette: {\n mode,\n ...scheme?.palette\n },\n colorSpace\n });\n colorSchemes[colorScheme] = {\n ...scheme,\n palette,\n opacity: {\n ...getOpacity(mode),\n ...scheme?.opacity\n },\n overlays: scheme?.overlays || getOverlays(mode)\n };\n return muiTheme;\n}\n\n/**\n * A default `createThemeWithVars` comes with a single color scheme, either `light` or `dark` based on the `defaultColorScheme`.\n * This is better suited for apps that only need a single color scheme.\n *\n * To enable built-in `light` and `dark` color schemes, either:\n * 1. provide a `colorSchemeSelector` to define how the color schemes will change.\n * 2. provide `colorSchemes.dark` will set `colorSchemeSelector: 'media'` by default.\n */\nexport default function createThemeWithVars(options = {}, ...args) {\n const {\n colorSchemes: colorSchemesInput = {\n light: true\n },\n defaultColorScheme: defaultColorSchemeInput,\n disableCssColorScheme = false,\n cssVarPrefix = 'mui',\n nativeColor = false,\n shouldSkipGeneratingVar = defaultShouldSkipGeneratingVar,\n colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,\n rootSelector = ':root',\n ...input\n } = options;\n const firstColorScheme = Object.keys(colorSchemesInput)[0];\n const defaultColorScheme = defaultColorSchemeInput || (colorSchemesInput.light && firstColorScheme !== 'light' ? 'light' : firstColorScheme);\n const getCssVar = createGetCssVar(cssVarPrefix);\n const {\n [defaultColorScheme]: defaultSchemeInput,\n light: builtInLight,\n dark: builtInDark,\n ...customColorSchemes\n } = colorSchemesInput;\n const colorSchemes = {\n ...customColorSchemes\n };\n let defaultScheme = defaultSchemeInput;\n\n // For built-in light and dark color schemes, ensure that the value is valid if they are the default color scheme.\n if (defaultColorScheme === 'dark' && !('dark' in colorSchemesInput) || defaultColorScheme === 'light' && !('light' in colorSchemesInput)) {\n defaultScheme = true;\n }\n if (!defaultScheme) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The \\`colorSchemes.${defaultColorScheme}\\` option is either missing or invalid.` : _formatErrorMessage(21, defaultColorScheme));\n }\n\n // The reason to use `oklch` is that it is the most perceptually uniform color space and widely supported.\n let colorSpace;\n if (nativeColor) {\n colorSpace = 'oklch';\n }\n\n // Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.\n const muiTheme = attachColorScheme(colorSpace, colorSchemes, defaultScheme, input, defaultColorScheme);\n if (builtInLight && !colorSchemes.light) {\n attachColorScheme(colorSpace, colorSchemes, builtInLight, undefined, 'light');\n }\n if (builtInDark && !colorSchemes.dark) {\n attachColorScheme(colorSpace, colorSchemes, builtInDark, undefined, 'dark');\n }\n let theme = {\n defaultColorScheme,\n ...muiTheme,\n cssVarPrefix,\n colorSchemeSelector: selector,\n rootSelector,\n getCssVar,\n colorSchemes,\n font: {\n ...prepareTypographyVars(muiTheme.typography),\n ...muiTheme.font\n },\n spacing: getSpacingVal(input.spacing)\n };\n Object.keys(theme.colorSchemes).forEach(key => {\n const palette = theme.colorSchemes[key].palette;\n const setCssVarColor = cssVar => {\n const tokens = cssVar.split('-');\n const color = tokens[1];\n const colorToken = tokens[2];\n return getCssVar(cssVar, palette[color][colorToken]);\n };\n\n // attach black & white channels to common node\n if (palette.mode === 'light') {\n setColor(palette.common, 'background', '#fff');\n setColor(palette.common, 'onBackground', '#000');\n }\n if (palette.mode === 'dark') {\n setColor(palette.common, 'background', '#000');\n setColor(palette.common, 'onBackground', '#fff');\n }\n function colorMix(method, color, coefficient) {\n if (colorSpace) {\n let mixer;\n if (method === safeAlpha) {\n mixer = `transparent ${((1 - coefficient) * 100).toFixed(0)}%`;\n }\n if (method === safeDarken) {\n mixer = `#000 ${(coefficient * 100).toFixed(0)}%`;\n }\n if (method === safeLighten) {\n mixer = `#fff ${(coefficient * 100).toFixed(0)}%`;\n }\n return `color-mix(in ${colorSpace}, ${color}, ${mixer})`;\n }\n return method(color, coefficient);\n }\n\n // assign component variables\n assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);\n if (palette.mode === 'light') {\n setColor(palette.Alert, 'errorColor', colorMix(safeDarken, palette.error.light, 0.6));\n setColor(palette.Alert, 'infoColor', colorMix(safeDarken, palette.info.light, 0.6));\n setColor(palette.Alert, 'successColor', colorMix(safeDarken, palette.success.light, 0.6));\n setColor(palette.Alert, 'warningColor', colorMix(safeDarken, palette.warning.light, 0.6));\n setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));\n setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));\n setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));\n setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-main'));\n setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.main)));\n setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));\n setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));\n setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));\n setColor(palette.Alert, 'errorStandardBg', colorMix(safeLighten, palette.error.light, 0.9));\n setColor(palette.Alert, 'infoStandardBg', colorMix(safeLighten, palette.info.light, 0.9));\n setColor(palette.Alert, 'successStandardBg', colorMix(safeLighten, palette.success.light, 0.9));\n setColor(palette.Alert, 'warningStandardBg', colorMix(safeLighten, palette.warning.light, 0.9));\n setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-100'));\n setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-400'));\n setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-300'));\n setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-A100'));\n setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-400'));\n setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-700'));\n setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-700'));\n setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');\n setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');\n setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');\n setColor(palette.LinearProgress, 'primaryBg', colorMix(safeLighten, palette.primary.main, 0.62));\n setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeLighten, palette.secondary.main, 0.62));\n setColor(palette.LinearProgress, 'errorBg', colorMix(safeLighten, palette.error.main, 0.62));\n setColor(palette.LinearProgress, 'infoBg', colorMix(safeLighten, palette.info.main, 0.62));\n setColor(palette.LinearProgress, 'successBg', colorMix(safeLighten, palette.success.main, 0.62));\n setColor(palette.LinearProgress, 'warningBg', colorMix(safeLighten, palette.warning.main, 0.62));\n setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, palette.text.primary, 0.11) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);\n setColor(palette.Slider, 'primaryTrack', colorMix(safeLighten, palette.primary.main, 0.62));\n setColor(palette.Slider, 'secondaryTrack', colorMix(safeLighten, palette.secondary.main, 0.62));\n setColor(palette.Slider, 'errorTrack', colorMix(safeLighten, palette.error.main, 0.62));\n setColor(palette.Slider, 'infoTrack', colorMix(safeLighten, palette.info.main, 0.62));\n setColor(palette.Slider, 'successTrack', colorMix(safeLighten, palette.success.main, 0.62));\n setColor(palette.Slider, 'warningTrack', colorMix(safeLighten, palette.warning.main, 0.62));\n const snackbarContentBackground = colorSpace ? colorMix(safeDarken, palette.background.default, 0.6825) // use `0.6825` instead of `0.8` to match the contrast ratio of JS implementation\n : safeEmphasize(palette.background.default, 0.8);\n setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? dark.text.primary : palette.getContrastText(snackbarContentBackground)));\n setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));\n setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));\n setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));\n setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));\n setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeLighten, palette.primary.main, 0.62));\n setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeLighten, palette.secondary.main, 0.62));\n setColor(palette.Switch, 'errorDisabledColor', colorMix(safeLighten, palette.error.main, 0.62));\n setColor(palette.Switch, 'infoDisabledColor', colorMix(safeLighten, palette.info.main, 0.62));\n setColor(palette.Switch, 'successDisabledColor', colorMix(safeLighten, palette.success.main, 0.62));\n setColor(palette.Switch, 'warningDisabledColor', colorMix(safeLighten, palette.warning.main, 0.62));\n setColor(palette.TableCell, 'border', colorMix(safeLighten, colorMix(safeAlpha, palette.divider, 1), 0.88));\n setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, palette.grey[700], 0.92));\n }\n if (palette.mode === 'dark') {\n setColor(palette.Alert, 'errorColor', colorMix(safeLighten, palette.error.light, 0.6));\n setColor(palette.Alert, 'infoColor', colorMix(safeLighten, palette.info.light, 0.6));\n setColor(palette.Alert, 'successColor', colorMix(safeLighten, palette.success.light, 0.6));\n setColor(palette.Alert, 'warningColor', colorMix(safeLighten, palette.warning.light, 0.6));\n setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));\n setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));\n setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));\n setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-dark'));\n setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.dark)));\n setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));\n setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));\n setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));\n setColor(palette.Alert, 'errorStandardBg', colorMix(safeDarken, palette.error.light, 0.9));\n setColor(palette.Alert, 'infoStandardBg', colorMix(safeDarken, palette.info.light, 0.9));\n setColor(palette.Alert, 'successStandardBg', colorMix(safeDarken, palette.success.light, 0.9));\n setColor(palette.Alert, 'warningStandardBg', colorMix(safeDarken, palette.warning.light, 0.9));\n setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-900'));\n setColor(palette.AppBar, 'darkBg', setCssVarColor('palette-background-paper')); // specific for dark mode\n setColor(palette.AppBar, 'darkColor', setCssVarColor('palette-text-primary')); // specific for dark mode\n setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-600'));\n setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-800'));\n setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-700'));\n setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-700'));\n setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-300'));\n setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-300'));\n setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');\n setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');\n setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');\n setColor(palette.LinearProgress, 'primaryBg', colorMix(safeDarken, palette.primary.main, 0.5));\n setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeDarken, palette.secondary.main, 0.5));\n setColor(palette.LinearProgress, 'errorBg', colorMix(safeDarken, palette.error.main, 0.5));\n setColor(palette.LinearProgress, 'infoBg', colorMix(safeDarken, palette.info.main, 0.5));\n setColor(palette.LinearProgress, 'successBg', colorMix(safeDarken, palette.success.main, 0.5));\n setColor(palette.LinearProgress, 'warningBg', colorMix(safeDarken, palette.warning.main, 0.5));\n setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, palette.text.primary, 0.13) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);\n setColor(palette.Slider, 'primaryTrack', colorMix(safeDarken, palette.primary.main, 0.5));\n setColor(palette.Slider, 'secondaryTrack', colorMix(safeDarken, palette.secondary.main, 0.5));\n setColor(palette.Slider, 'errorTrack', colorMix(safeDarken, palette.error.main, 0.5));\n setColor(palette.Slider, 'infoTrack', colorMix(safeDarken, palette.info.main, 0.5));\n setColor(palette.Slider, 'successTrack', colorMix(safeDarken, palette.success.main, 0.5));\n setColor(palette.Slider, 'warningTrack', colorMix(safeDarken, palette.warning.main, 0.5));\n const snackbarContentBackground = colorSpace ? colorMix(safeLighten, palette.background.default, 0.985) // use `0.985` instead of `0.98` to match the contrast ratio of JS implementation\n : safeEmphasize(palette.background.default, 0.98);\n setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? light.text.primary : palette.getContrastText(snackbarContentBackground)));\n setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));\n setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));\n setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));\n setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));\n setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeDarken, palette.primary.main, 0.55));\n setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeDarken, palette.secondary.main, 0.55));\n setColor(palette.Switch, 'errorDisabledColor', colorMix(safeDarken, palette.error.main, 0.55));\n setColor(palette.Switch, 'infoDisabledColor', colorMix(safeDarken, palette.info.main, 0.55));\n setColor(palette.Switch, 'successDisabledColor', colorMix(safeDarken, palette.success.main, 0.55));\n setColor(palette.Switch, 'warningDisabledColor', colorMix(safeDarken, palette.warning.main, 0.55));\n setColor(palette.TableCell, 'border', colorMix(safeDarken, colorMix(safeAlpha, palette.divider, 1), 0.68));\n setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, palette.grey[700], 0.92));\n }\n\n // MUI X - DataGrid needs this token.\n setColorChannel(palette.background, 'default');\n\n // added for consistency with the `background.default` token\n setColorChannel(palette.background, 'paper');\n setColorChannel(palette.common, 'background');\n setColorChannel(palette.common, 'onBackground');\n setColorChannel(palette, 'divider');\n Object.keys(palette).forEach(color => {\n const colors = palette[color];\n\n // The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.\n\n if (color !== 'tonalOffset' && colors && typeof colors === 'object') {\n // Silent the error for custom palettes.\n if (colors.main) {\n setColor(palette[color], 'mainChannel', safeColorChannel(toRgb(colors.main)));\n }\n if (colors.light) {\n setColor(palette[color], 'lightChannel', safeColorChannel(toRgb(colors.light)));\n }\n if (colors.dark) {\n setColor(palette[color], 'darkChannel', safeColorChannel(toRgb(colors.dark)));\n }\n if (colors.contrastText) {\n setColor(palette[color], 'contrastTextChannel', safeColorChannel(toRgb(colors.contrastText)));\n }\n if (color === 'text') {\n // Text colors: text.primary, text.secondary\n setColorChannel(palette[color], 'primary');\n setColorChannel(palette[color], 'secondary');\n }\n if (color === 'action') {\n // Action colors: action.active, action.selected\n if (colors.active) {\n setColorChannel(palette[color], 'active');\n }\n if (colors.selected) {\n setColorChannel(palette[color], 'selected');\n }\n }\n }\n });\n });\n theme = args.reduce((acc, argument) => deepmerge(acc, argument), theme);\n const parserConfig = {\n prefix: cssVarPrefix,\n disableCssColorScheme,\n shouldSkipGeneratingVar,\n getSelector: defaultGetSelector(theme),\n enableContrastVars: nativeColor\n };\n const {\n vars,\n generateThemeVars,\n generateStyleSheets\n } = prepareCssVars(theme, parserConfig);\n theme.vars = vars;\n Object.entries(theme.colorSchemes[theme.defaultColorScheme]).forEach(([key, value]) => {\n theme[key] = value;\n });\n theme.generateThemeVars = generateThemeVars;\n theme.generateStyleSheets = generateStyleSheets;\n theme.generateSpacing = function generateSpacing() {\n return createSpacing(input.spacing, createUnarySpacing(this));\n };\n theme.getColorSchemeSelector = createGetColorSchemeSelector(selector);\n theme.spacing = theme.generateSpacing();\n theme.shouldSkipGeneratingVar = shouldSkipGeneratingVar;\n theme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...input?.unstable_sxConfig\n };\n theme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n theme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n return theme;\n}","import createPalette from \"./createPalette.js\";\nimport createThemeWithVars from \"./createThemeWithVars.js\";\nimport createThemeNoVars from \"./createThemeNoVars.js\";\n// eslint-disable-next-line consistent-return\nfunction attachColorScheme(theme, scheme, colorScheme) {\n if (!theme.colorSchemes) {\n return undefined;\n }\n if (colorScheme) {\n theme.colorSchemes[scheme] = {\n ...(colorScheme !== true && colorScheme),\n palette: createPalette({\n ...(colorScheme === true ? {} : colorScheme.palette),\n mode: scheme\n }) // cast type to skip module augmentation test\n };\n }\n}\n\n/**\n * Generate a theme base on the options received.\n * @param options Takes an incomplete theme object and adds the missing parts.\n * @param args Deep merge the arguments with the about to be returned theme.\n * @returns A complete, ready-to-use theme object.\n */\nexport default function createTheme(options = {},\n// cast type to skip module augmentation test\n...args) {\n const {\n palette,\n cssVariables = false,\n colorSchemes: initialColorSchemes = !palette ? {\n light: true\n } : undefined,\n defaultColorScheme: initialDefaultColorScheme = palette?.mode,\n ...other\n } = options;\n const defaultColorSchemeInput = initialDefaultColorScheme || 'light';\n const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput];\n const colorSchemesInput = {\n ...initialColorSchemes,\n ...(palette ? {\n [defaultColorSchemeInput]: {\n ...(typeof defaultScheme !== 'boolean' && defaultScheme),\n palette\n }\n } : undefined)\n };\n if (cssVariables === false) {\n if (!('colorSchemes' in options)) {\n // Behaves exactly as v5\n return createThemeNoVars(options, ...args);\n }\n let paletteOptions = palette;\n if (!('palette' in options)) {\n if (colorSchemesInput[defaultColorSchemeInput]) {\n if (colorSchemesInput[defaultColorSchemeInput] !== true) {\n paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette;\n } else if (defaultColorSchemeInput === 'dark') {\n // @ts-ignore to prevent the module augmentation test from failing\n paletteOptions = {\n mode: 'dark'\n };\n }\n }\n }\n const theme = createThemeNoVars({\n ...options,\n palette: paletteOptions\n }, ...args);\n theme.defaultColorScheme = defaultColorSchemeInput;\n theme.colorSchemes = colorSchemesInput;\n if (theme.palette.mode === 'light') {\n theme.colorSchemes.light = {\n ...(colorSchemesInput.light !== true && colorSchemesInput.light),\n palette: theme.palette\n };\n attachColorScheme(theme, 'dark', colorSchemesInput.dark);\n }\n if (theme.palette.mode === 'dark') {\n theme.colorSchemes.dark = {\n ...(colorSchemesInput.dark !== true && colorSchemesInput.dark),\n palette: theme.palette\n };\n attachColorScheme(theme, 'light', colorSchemesInput.light);\n }\n return theme;\n }\n if (!palette && !('light' in colorSchemesInput) && defaultColorSchemeInput === 'light') {\n colorSchemesInput.light = true;\n }\n return createThemeWithVars({\n ...other,\n colorSchemes: colorSchemesInput,\n defaultColorScheme: defaultColorSchemeInput,\n ...(typeof cssVariables !== 'boolean' && cssVariables)\n }, ...args);\n}","'use client';\n\nimport createTheme from \"./createTheme.js\";\nconst defaultTheme = createTheme();\nexport default defaultTheme;","export default '$$material';","// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport default slotShouldForwardProp;","import slotShouldForwardProp from \"./slotShouldForwardProp.js\";\nconst rootShouldForwardProp = prop => slotShouldForwardProp(prop) && prop !== 'classes';\nexport default rootShouldForwardProp;","'use client';\n\nimport createStyled from '@mui/system/createStyled';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nimport rootShouldForwardProp from \"./rootShouldForwardProp.js\";\nexport { default as slotShouldForwardProp } from \"./slotShouldForwardProp.js\";\nexport { default as rootShouldForwardProp } from \"./rootShouldForwardProp.js\";\nconst styled = createStyled({\n themeId: THEME_ID,\n defaultTheme,\n rootShouldForwardProp\n});\nexport default styled;","import { unstable_memoTheme } from '@mui/system';\nconst memoTheme = unstable_memoTheme;\nexport default memoTheme;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport SystemDefaultPropsProvider, { useDefaultProps as useSystemDefaultProps } from '@mui/system/DefaultPropsProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction DefaultPropsProvider(props) {\n return /*#__PURE__*/_jsx(SystemDefaultPropsProvider, {\n ...props\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * @ignore\n */\n value: PropTypes.object.isRequired\n} : void 0;\nexport default DefaultPropsProvider;\nexport function useDefaultProps(params) {\n return useSystemDefaultProps(params);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getSvgIconUtilityClass } from \"./svgIconClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n color,\n fontSize,\n classes\n } = ownerState;\n const slots = {\n root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n };\n return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n name: 'MuiSvgIcon',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n }\n})(memoTheme(({\n theme\n}) => ({\n userSelect: 'none',\n width: '1em',\n height: '1em',\n display: 'inline-block',\n flexShrink: 0,\n transition: theme.transitions?.create?.('fill', {\n duration: (theme.vars ?? theme).transitions?.duration?.shorter\n }),\n variants: [{\n props: props => !props.hasSvgAsChild,\n style: {\n // the <svg> will define the property that has `currentColor`\n // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n fill: 'currentColor'\n }\n }, {\n props: {\n fontSize: 'inherit'\n },\n style: {\n fontSize: 'inherit'\n }\n }, {\n props: {\n fontSize: 'small'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(20) || '1.25rem'\n }\n }, {\n props: {\n fontSize: 'medium'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(24) || '1.5rem'\n }\n }, {\n props: {\n fontSize: 'large'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(35) || '2.1875rem'\n }\n },\n // TODO v5 deprecate color prop, v6 remove for sx\n ...Object.entries((theme.vars ?? theme).palette).filter(([, value]) => value && value.main).map(([color]) => ({\n props: {\n color\n },\n style: {\n color: (theme.vars ?? theme).palette?.[color]?.main\n }\n })), {\n props: {\n color: 'action'\n },\n style: {\n color: (theme.vars ?? theme).palette?.action?.active\n }\n }, {\n props: {\n color: 'disabled'\n },\n style: {\n color: (theme.vars ?? theme).palette?.action?.disabled\n }\n }, {\n props: {\n color: 'inherit'\n },\n style: {\n color: undefined\n }\n }]\n})));\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiSvgIcon'\n });\n const {\n children,\n className,\n color = 'inherit',\n component = 'svg',\n fontSize = 'medium',\n htmlColor,\n inheritViewBox = false,\n titleAccess,\n viewBox = '0 0 24 24',\n ...other\n } = props;\n const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n const ownerState = {\n ...props,\n color,\n component,\n fontSize,\n instanceFontSize: inProps.fontSize,\n inheritViewBox,\n viewBox,\n hasSvgAsChild\n };\n const more = {};\n if (!inheritViewBox) {\n more.viewBox = viewBox;\n }\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SvgIconRoot, {\n as: component,\n className: clsx(classes.root, className),\n focusable: \"false\",\n color: htmlColor,\n \"aria-hidden\": titleAccess ? undefined : true,\n role: titleAccess ? 'img' : undefined,\n ref: ref,\n ...more,\n ...other,\n ...(hasSvgAsChild && children.props),\n ownerState: ownerState,\n children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n children: titleAccess\n }) : null]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * Node passed into the SVG element.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n * @default 'inherit'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n * @default 'medium'\n */\n fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n /**\n * Applies a color attribute to the SVG element.\n */\n htmlColor: PropTypes.string,\n /**\n * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n * prop will be ignored.\n * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n * `component`'s viewBox to the root node.\n * @default false\n */\n inheritViewBox: PropTypes.bool,\n /**\n * The shape-rendering attribute. The behavior of the different options is described on the\n * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/shape-rendering).\n * If you are having issues with blurry icons you should investigate this prop.\n */\n shapeRendering: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Provides a human-readable title for the element that contains it.\n * https://www.w3.org/TR/SVG-access/#Equivalent\n */\n titleAccess: PropTypes.string,\n /**\n * Allows you to redefine what the coordinates without units mean inside an SVG element.\n * For example, if the SVG element is 500 (width) by 200 (height),\n * and you pass viewBox=\"0 0 50 20\",\n * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n * to bottom right (50,20) and each unit will be worth 10px.\n * @default '0 0 24 24'\n */\n viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport * as React from 'react';\nimport SvgIcon from \"../SvgIcon/index.js\";\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n function Component(props, ref) {\n return /*#__PURE__*/_jsx(SvgIcon, {\n \"data-testid\": process.env.NODE_ENV !== 'production' ? `${displayName}Icon` : undefined,\n ref: ref,\n ...props,\n children: path\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n // Need to set `displayName` on the inner component for React.memo.\n // React prior to 16.14 ignores `displayName` on the wrapper.\n Component.displayName = `${displayName}Icon`;\n }\n Component.muiName = SvgIcon.muiName;\n return /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(Component));\n}","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z\"\n}), 'CheckCircle');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z\"\n}), 'Error');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M1 21h22L12 2zm12-3h-2v-2h2zm0-4h-2v-4h2z\"\n}), 'Warning');","/**\n * Control Panel API Client\n *\n * Communicates with the backend Express API\n */\n\nexport interface HealthCheck {\n status: 'healthy' | 'degraded' | 'unhealthy';\n latency?: number;\n lastChecked: string;\n error?: string;\n}\n\nexport interface HealthResponse {\n status: 'healthy' | 'degraded' | 'unhealthy';\n timestamp: string;\n uptime: number;\n checks: Record<string, HealthCheck>;\n}\n\nexport interface InfoResponse {\n product: string;\n logoName: string;\n logoIconUrl?: string;\n version: string;\n uptime: number;\n links: Array<{ label: string; url: string; external?: boolean }>;\n branding?: {\n primaryColor?: string;\n };\n}\n\nexport interface DiagnosticsResponse {\n timestamp: string;\n product: string;\n version?: string;\n /** @qwickapps/server framework version */\n frameworkVersion?: string;\n uptime: number;\n health: Record<string, HealthCheck>;\n system: {\n nodeVersion: string;\n platform: string;\n arch: string;\n memory: {\n total: number;\n used: number;\n free: number;\n };\n cpu: {\n usage: number;\n };\n };\n}\n\nexport interface ConfigResponse {\n config: Record<string, string | number | boolean>;\n masked: string[];\n}\n\nexport interface LogEntry {\n timestamp: string;\n level: string;\n message: string;\n namespace?: string;\n}\n\nexport interface LogsResponse {\n logs: LogEntry[];\n total: number;\n page: number;\n limit: number;\n}\n\nexport interface LogSource {\n name: string;\n type: 'file' | 'api';\n available: boolean;\n}\n\n// ==================\n// Users API Types\n// ==================\nexport interface User {\n id: string;\n email: string;\n name?: string;\n created_at?: string;\n updated_at?: string;\n last_login?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UsersResponse {\n users: User[];\n total: number;\n page: number;\n limit: number;\n}\n\n// ==================\n// Bans API Types\n// ==================\nexport interface Ban {\n id: string;\n user_id?: string;\n email: string;\n reason: string;\n banned_at: string;\n banned_by: string;\n expires_at?: string;\n}\n\nexport interface BansResponse {\n bans: Ban[];\n total: number;\n}\n\n// ==================\n// Entitlements API Types\n// ==================\nexport interface EntitlementDefinition {\n id: string;\n name: string;\n category?: string;\n description?: string;\n}\n\nexport interface EntitlementResult {\n identifier: string;\n entitlements: string[];\n source: string;\n cached?: boolean;\n cachedAt?: string;\n expiresAt?: string;\n}\n\n// ==================\n// Entitlements Status\n// ==================\nexport interface EntitlementSourceInfo {\n name: string;\n description?: string;\n readonly: boolean;\n primary: boolean;\n}\n\nexport interface EntitlementsStatus {\n readonly: boolean;\n writeEnabled: boolean;\n cacheEnabled: boolean;\n cacheTtl: number;\n sources: EntitlementSourceInfo[];\n}\n\n// ==================\n// Plugin Feature Detection\n// ==================\nexport interface PluginFeatures {\n users: boolean;\n bans: boolean;\n entitlements: boolean;\n entitlementsReadonly?: boolean;\n}\n\n// ==================\n// UI Contributions Types\n// ==================\n\nexport interface MenuContribution {\n id: string;\n label: string;\n icon?: string;\n route: string;\n order?: number;\n pluginId: string;\n parent?: string;\n}\n\nexport interface PageContribution {\n id: string;\n route: string;\n title: string;\n pluginId: string;\n}\n\nexport interface WidgetContribution {\n id: string;\n title: string;\n /** Component name to render (matched by frontend widget registry) */\n component: string;\n /** Priority for ordering (lower = first, default: 100) */\n priority?: number;\n /** Whether this widget is shown by default */\n showByDefault?: boolean;\n pluginId: string;\n}\n\nexport interface UiContributionsResponse {\n menuItems: MenuContribution[];\n pages: PageContribution[];\n widgets: WidgetContribution[];\n plugins: Array<{ id: string; name: string; version?: string; status: string }>;\n}\n\n// ==================\n// Plugin Detail Types\n// ==================\n\nexport interface ConfigContribution {\n id: string;\n component: string;\n title?: string;\n pluginId: string;\n}\n\nexport interface PluginContributions {\n routes: Array<{ method: string; path: string }>;\n menuItems: MenuContribution[];\n pages: PageContribution[];\n widgets: WidgetContribution[];\n config?: ConfigContribution;\n}\n\nexport interface PluginInfo {\n id: string;\n name: string;\n version?: string;\n status: 'starting' | 'active' | 'stopped' | 'error';\n error?: string;\n contributionCounts: {\n routes: number;\n menuItems: number;\n pages: number;\n widgets: number;\n hasConfig: boolean;\n };\n}\n\nexport interface PluginsResponse {\n plugins: PluginInfo[];\n}\n\nexport interface PluginDetailResponse {\n id: string;\n name: string;\n version?: string;\n status: 'starting' | 'active' | 'stopped' | 'error';\n error?: string;\n contributions: PluginContributions;\n}\n\n// ==================\n// Auth Config Types\n// ==================\n\nexport type AuthPluginState = 'disabled' | 'enabled' | 'error';\nexport type AuthAdapterType = 'auth0' | 'supabase' | 'supertokens' | 'basic';\n\nexport interface AuthConfigStatus {\n state: AuthPluginState;\n adapter: string | null;\n error?: string;\n missingVars?: string[];\n config?: Record<string, string>;\n /** Runtime config from database (if available) */\n runtimeConfig?: RuntimeAuthConfig;\n}\n\nexport interface RuntimeAuthConfig {\n adapter: AuthAdapterType | null;\n config: {\n auth0?: Auth0AdapterConfig;\n supabase?: SupabaseAdapterConfig;\n supertokens?: SupertokensAdapterConfig;\n basic?: BasicAdapterConfig;\n };\n settings: {\n authRequired?: boolean;\n excludePaths?: string[];\n debug?: boolean;\n };\n updatedAt: string;\n updatedBy?: string;\n}\n\nexport interface Auth0AdapterConfig {\n domain: string;\n clientId: string;\n clientSecret: string;\n baseUrl: string;\n secret: string;\n audience?: string;\n scopes?: string[];\n allowedRoles?: string[];\n allowedDomains?: string[];\n}\n\nexport interface SupabaseAdapterConfig {\n url: string;\n anonKey: string;\n}\n\nexport interface BasicAdapterConfig {\n username: string;\n password: string;\n realm?: string;\n}\n\nexport interface SupertokensAdapterConfig {\n connectionUri: string;\n apiKey?: string;\n appName: string;\n apiDomain: string;\n websiteDomain: string;\n apiBasePath?: string;\n websiteBasePath?: string;\n enableEmailPassword?: boolean;\n socialProviders?: {\n google?: { clientId: string; clientSecret: string };\n apple?: { clientId: string; clientSecret: string; keyId: string; teamId: string };\n github?: { clientId: string; clientSecret: string };\n };\n}\n\nexport interface UpdateAuthConfigRequest {\n adapter: AuthAdapterType;\n config: Record<string, unknown>;\n settings?: {\n authRequired?: boolean;\n excludePaths?: string[];\n };\n}\n\nexport interface TestProviderRequest {\n adapter: AuthAdapterType;\n config: Record<string, unknown>;\n provider?: 'google' | 'github' | 'apple';\n}\n\nexport interface TestProviderResponse {\n success: boolean;\n message: string;\n details?: {\n latency?: number;\n version?: string;\n };\n}\n\n// ==================\n// Notifications API Types\n// ==================\n\nexport interface NotificationsConnectionHealth {\n isConnected: boolean;\n isHealthy: boolean;\n lastEventAt: string | null;\n timeSinceLastEvent: number;\n channelCount: number;\n isReconnecting: boolean;\n reconnectAttempts: number;\n}\n\nexport interface NotificationsStatsResponse {\n totalConnections: number;\n currentConnections: number;\n eventsProcessed: number;\n eventsRouted: number;\n eventsParseFailed: number;\n eventsDroppedNoClients: number;\n reconnectionAttempts: number;\n lastReconnectionAt?: string;\n clientsByType: {\n device: number;\n user: number;\n };\n connectionHealth: NotificationsConnectionHealth;\n channels: string[];\n lastEventAt?: string;\n}\n\nexport interface NotificationsClient {\n id: string;\n deviceId?: string;\n userId?: string;\n connectedAt: string;\n durationMs: number;\n}\n\nexport interface NotificationsClientsResponse {\n clients: NotificationsClient[];\n total: number;\n}\n\n// ==================\n// Rate Limit Config Types\n// ==================\n\nexport type RateLimitStrategy = 'sliding-window' | 'fixed-window' | 'token-bucket';\n\nexport interface RateLimitConfig {\n windowMs: number;\n maxRequests: number;\n strategy: RateLimitStrategy;\n cleanupEnabled: boolean;\n cleanupIntervalMs: number;\n store: string;\n cache: string;\n cacheAvailable: boolean;\n}\n\nexport interface RateLimitConfigUpdateRequest {\n windowMs?: number;\n maxRequests?: number;\n strategy?: RateLimitStrategy;\n cleanupEnabled?: boolean;\n cleanupIntervalMs?: number;\n}\n\nexport interface RateLimitConfigUpdateResponse {\n success: boolean;\n config: RateLimitConfig;\n}\n\nclass ControlPanelApi {\n private baseUrl: string;\n\n constructor(baseUrl = '') {\n this.baseUrl = baseUrl;\n }\n\n /**\n * Set the base URL for API requests.\n * Call this when the control panel is mounted at a custom path.\n */\n setBaseUrl(baseUrl: string): void {\n this.baseUrl = baseUrl;\n }\n\n /**\n * Get the base URL for API requests.\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Generic fetch method for API requests.\n * Automatically prepends the base URL and /api prefix.\n */\n async fetch<T = unknown>(path: string, options?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}/api${path.startsWith('/') ? path : `/${path}`}`;\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || error.message || `Request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Plugin Feature Detection\n // ==================\n\n /**\n * Detect which user management plugins are available by probing their endpoints\n */\n async detectFeatures(): Promise<PluginFeatures> {\n const [users, bans, entitlements] = await Promise.all([\n this.checkEndpoint('/api/users'),\n this.checkEndpoint('/api/bans'),\n this.checkEndpoint('/api/entitlements/available'),\n ]);\n\n // If entitlements is available, get readonly status\n let entitlementsReadonly = true;\n if (entitlements) {\n try {\n const status = await this.getEntitlementsStatus();\n entitlementsReadonly = status.readonly;\n } catch {\n // Default to readonly if we can't get status\n }\n }\n\n return { users, bans, entitlements, entitlementsReadonly };\n }\n\n private async checkEndpoint(path: string): Promise<boolean> {\n try {\n const response = await fetch(`${this.baseUrl}${path}`, { method: 'HEAD' });\n // 200, 401, 403 mean the endpoint exists (might need auth)\n // 404 means it doesn't exist\n return response.status !== 404;\n } catch {\n return false;\n }\n }\n\n // ==================\n // Users API\n // ==================\n\n async getUsers(options: {\n limit?: number;\n page?: number;\n search?: string;\n } = {}): Promise<UsersResponse> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', options.limit.toString());\n if (options.page) params.set('page', options.page.toString());\n if (options.search) params.set('q', options.search);\n\n const response = await fetch(`${this.baseUrl}/api/users?${params}`);\n if (!response.ok) {\n throw new Error(`Users request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getUserById(id: string): Promise<User> {\n const response = await fetch(`${this.baseUrl}/api/users/${id}`);\n if (!response.ok) {\n throw new Error(`User request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Bans API\n // ==================\n\n async getBans(): Promise<BansResponse> {\n const response = await fetch(`${this.baseUrl}/api/bans`);\n if (!response.ok) {\n throw new Error(`Bans request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async banUser(email: string, reason: string, expiresAt?: string): Promise<void> {\n // Convert expiresAt datetime to duration in seconds\n let duration: number | undefined;\n if (expiresAt) {\n const expiresDate = new Date(expiresAt);\n const now = new Date();\n duration = Math.max(0, Math.floor((expiresDate.getTime() - now.getTime()) / 1000));\n }\n\n const response = await fetch(`${this.baseUrl}/api/bans/email/${encodeURIComponent(email)}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ reason, duration }),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Ban request failed: ${response.statusText}`);\n }\n }\n\n async unbanUser(email: string): Promise<void> {\n const response = await fetch(`${this.baseUrl}/api/bans/email/${encodeURIComponent(email)}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error(`Unban request failed: ${response.statusText}`);\n }\n }\n\n async checkBan(email: string): Promise<{ banned: boolean; ban?: Ban }> {\n const response = await fetch(`${this.baseUrl}/api/bans/email/${encodeURIComponent(email)}`);\n if (!response.ok) {\n throw new Error(`Ban check failed: ${response.statusText}`);\n }\n const data = await response.json();\n // Backend returns { email, isBanned }, transform to expected shape\n return { banned: data.isBanned };\n }\n\n // ==================\n // Entitlements API\n // ==================\n\n async getEntitlements(email: string): Promise<EntitlementResult> {\n const response = await fetch(`${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}`);\n if (!response.ok) {\n throw new Error(`Entitlements request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async refreshEntitlements(email: string): Promise<EntitlementResult> {\n const response = await fetch(`${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}/refresh`, {\n method: 'POST',\n });\n if (!response.ok) {\n throw new Error(`Entitlements refresh failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async checkEntitlement(email: string, entitlement: string): Promise<{ has: boolean }> {\n const response = await fetch(\n `${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}/check/${encodeURIComponent(entitlement)}`\n );\n if (!response.ok) {\n throw new Error(`Entitlement check failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getAvailableEntitlements(): Promise<EntitlementDefinition[]> {\n const response = await fetch(`${this.baseUrl}/api/entitlements/available`);\n if (!response.ok) {\n throw new Error(`Available entitlements request failed: ${response.statusText}`);\n }\n const data = await response.json();\n return data.entitlements;\n }\n\n async grantEntitlement(email: string, entitlement: string): Promise<void> {\n const response = await fetch(`${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ entitlement }),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Grant entitlement failed: ${response.statusText}`);\n }\n }\n\n async revokeEntitlement(email: string, entitlement: string): Promise<void> {\n const response = await fetch(\n `${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}/${encodeURIComponent(entitlement)}`,\n { method: 'DELETE' }\n );\n if (!response.ok) {\n throw new Error(`Revoke entitlement failed: ${response.statusText}`);\n }\n }\n\n async invalidateEntitlementCache(email: string): Promise<void> {\n const response = await fetch(`${this.baseUrl}/api/entitlements/cache/${encodeURIComponent(email)}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error(`Cache invalidation failed: ${response.statusText}`);\n }\n }\n\n async getEntitlementsStatus(): Promise<EntitlementsStatus> {\n const response = await fetch(`${this.baseUrl}/api/entitlements/status`);\n if (!response.ok) {\n throw new Error(`Entitlements status request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Health API\n // ==================\n\n async getHealth(): Promise<HealthResponse> {\n const response = await fetch(`${this.baseUrl}/api/health`);\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getInfo(): Promise<InfoResponse> {\n const response = await fetch(`${this.baseUrl}/api/info`);\n if (!response.ok) {\n throw new Error(`Info request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getDiagnostics(): Promise<DiagnosticsResponse> {\n const response = await fetch(`${this.baseUrl}/api/diagnostics`);\n if (!response.ok) {\n throw new Error(`Diagnostics request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getConfig(): Promise<ConfigResponse> {\n const response = await fetch(`${this.baseUrl}/api/config`);\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getLogs(options: {\n source?: string;\n level?: string;\n search?: string;\n limit?: number;\n page?: number;\n } = {}): Promise<LogsResponse> {\n const params = new URLSearchParams();\n if (options.source) params.set('source', options.source);\n if (options.level) params.set('level', options.level);\n if (options.search) params.set('search', options.search);\n if (options.limit) params.set('limit', options.limit.toString());\n if (options.page) params.set('page', options.page.toString());\n\n const response = await fetch(`${this.baseUrl}/api/logs?${params}`);\n if (!response.ok) {\n throw new Error(`Logs request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getLogSources(): Promise<LogSource[]> {\n const response = await fetch(`${this.baseUrl}/api/logs/sources`);\n if (!response.ok) {\n throw new Error(`Log sources request failed: ${response.statusText}`);\n }\n const data = await response.json();\n return data.sources;\n }\n\n // ==================\n // Plugins API\n // ==================\n\n async getPlugins(): Promise<PluginsResponse> {\n const response = await fetch(`${this.baseUrl}/api/plugins`);\n if (!response.ok) {\n throw new Error(`Plugins request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getPluginDetail(id: string): Promise<PluginDetailResponse> {\n const response = await fetch(`${this.baseUrl}/api/plugins/${encodeURIComponent(id)}`);\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error(`Plugin not found: ${id}`);\n }\n throw new Error(`Plugin detail request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // UI Contributions API\n // ==================\n\n async getUiContributions(): Promise<UiContributionsResponse> {\n const response = await fetch(`${this.baseUrl}/api/ui-contributions`);\n if (!response.ok) {\n throw new Error(`UI contributions request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Auth Config API\n // ==================\n\n async getAuthConfigStatus(): Promise<AuthConfigStatus> {\n const response = await fetch(`${this.baseUrl}/api/auth/config/status`);\n if (!response.ok) {\n // Return disabled state if endpoint not available\n if (response.status === 404) {\n return { state: 'disabled', adapter: null };\n }\n throw new Error(`Auth config status request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getAuthConfig(): Promise<AuthConfigStatus> {\n const response = await fetch(`${this.baseUrl}/api/auth/config`);\n if (!response.ok) {\n if (response.status === 404) {\n return { state: 'disabled', adapter: null };\n }\n throw new Error(`Auth config request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Update auth configuration (save to database for hot-reload)\n */\n async updateAuthConfig(request: UpdateAuthConfigRequest): Promise<{ success: boolean; message: string }> {\n const response = await fetch(`${this.baseUrl}/api/auth/config`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Auth config update failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Delete auth configuration (revert to environment variables)\n */\n async deleteAuthConfig(): Promise<{ success: boolean; message: string }> {\n const response = await fetch(`${this.baseUrl}/api/auth/config`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Auth config delete failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Test auth provider connection without saving\n */\n async testAuthProvider(request: TestProviderRequest): Promise<TestProviderResponse> {\n const response = await fetch(`${this.baseUrl}/api/auth/test-provider`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Provider test failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Test current auth provider connection (uses existing env/runtime config)\n */\n async testCurrentAuthProvider(): Promise<TestProviderResponse> {\n const response = await fetch(`${this.baseUrl}/api/auth/test-current`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Provider test failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Rate Limit Config API\n // ==================\n\n async getRateLimitConfig(): Promise<RateLimitConfig> {\n const response = await fetch(`${this.baseUrl}/api/rate-limit/config`);\n if (!response.ok) {\n throw new Error(`Rate limit config request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async updateRateLimitConfig(updates: RateLimitConfigUpdateRequest): Promise<RateLimitConfigUpdateResponse> {\n const response = await fetch(`${this.baseUrl}/api/rate-limit/config`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(updates),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Rate limit config update failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Notifications API\n // ==================\n\n async getNotificationsStats(): Promise<NotificationsStatsResponse> {\n const response = await fetch(`${this.baseUrl}/api/notifications/stats`);\n if (!response.ok) {\n throw new Error(`Notifications stats request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getNotificationsClients(): Promise<NotificationsClientsResponse> {\n const response = await fetch(`${this.baseUrl}/api/notifications/clients`);\n if (!response.ok) {\n throw new Error(`Notifications clients request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async disconnectNotificationsClient(clientId: string): Promise<{ success: boolean }> {\n const response = await fetch(`${this.baseUrl}/api/notifications/clients/${encodeURIComponent(clientId)}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Disconnect client failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async forceNotificationsReconnect(): Promise<{ success: boolean; message: string }> {\n const response = await fetch(`${this.baseUrl}/api/notifications/reconnect`, {\n method: 'POST',\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Force reconnect failed: ${response.statusText}`);\n }\n return response.json();\n }\n}\n\nexport const api = new ControlPanelApi();\n","/**\n * Dashboard Widget Registry\n *\n * A context-based registry for dashboard widgets that allows:\n * - Registration of widgets at runtime\n * - Dynamic adding/removing of widgets\n * - Priority-based ordering of widgets\n *\n * Usage:\n * ```tsx\n * // In your app setup:\n * const { registerWidget } = useDashboardWidgets();\n * registerWidget({\n * id: 'user-stats',\n * title: 'User Statistics',\n * component: <UserStatsWidget />,\n * priority: 10,\n * });\n *\n * // Or via the provider:\n * <DashboardWidgetProvider initialWidgets={[...]} />\n * ```\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { createContext, useContext, useState, useCallback, ReactNode } from 'react';\n\nexport interface DashboardWidget {\n /** Unique identifier for the widget */\n id: string;\n /** Display title for the widget section */\n title?: string;\n /** The widget component to render */\n component: ReactNode;\n /** Priority for ordering (lower = first, default: 100) */\n priority?: number;\n /** Whether the widget is visible */\n visible?: boolean;\n}\n\ninterface DashboardWidgetContextValue {\n /** All registered widgets */\n widgets: DashboardWidget[];\n /** Register a new widget */\n registerWidget: (widget: DashboardWidget) => void;\n /** Unregister a widget by ID */\n unregisterWidget: (id: string) => void;\n /** Toggle widget visibility */\n toggleWidget: (id: string, visible?: boolean) => void;\n /** Get visible widgets sorted by priority */\n getVisibleWidgets: () => DashboardWidget[];\n}\n\nconst DashboardWidgetContext = createContext<DashboardWidgetContextValue | null>(null);\n\nexport interface DashboardWidgetProviderProps {\n /** Initial widgets to register */\n initialWidgets?: DashboardWidget[];\n children: ReactNode;\n}\n\nexport function DashboardWidgetProvider({ initialWidgets = [], children }: DashboardWidgetProviderProps) {\n const [widgets, setWidgets] = useState<DashboardWidget[]>(\n initialWidgets.map(w => ({ ...w, visible: w.visible !== false, priority: w.priority ?? 100 }))\n );\n\n const registerWidget = useCallback((widget: DashboardWidget) => {\n setWidgets(prev => {\n // Check if widget already exists\n const exists = prev.some(w => w.id === widget.id);\n if (exists) {\n // Update existing widget\n return prev.map(w => w.id === widget.id ? { ...widget, visible: widget.visible !== false, priority: widget.priority ?? 100 } : w);\n }\n // Add new widget\n return [...prev, { ...widget, visible: widget.visible !== false, priority: widget.priority ?? 100 }];\n });\n }, []);\n\n const unregisterWidget = useCallback((id: string) => {\n setWidgets(prev => prev.filter(w => w.id !== id));\n }, []);\n\n const toggleWidget = useCallback((id: string, visible?: boolean) => {\n setWidgets(prev => prev.map(w => {\n if (w.id === id) {\n return { ...w, visible: visible ?? !w.visible };\n }\n return w;\n }));\n }, []);\n\n const getVisibleWidgets = useCallback(() => {\n return widgets\n .filter(w => w.visible !== false)\n .sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));\n }, [widgets]);\n\n return (\n <DashboardWidgetContext.Provider value={{ widgets, registerWidget, unregisterWidget, toggleWidget, getVisibleWidgets }}>\n {children}\n </DashboardWidgetContext.Provider>\n );\n}\n\nexport function useDashboardWidgets() {\n const context = useContext(DashboardWidgetContext);\n if (!context) {\n throw new Error('useDashboardWidgets must be used within a DashboardWidgetProvider');\n }\n return context;\n}\n\n/**\n * Hook to register a widget on mount and unregister on unmount\n */\nexport function useRegisterWidget(widget: DashboardWidget) {\n const { registerWidget, unregisterWidget } = useDashboardWidgets();\n\n // Register on mount\n useState(() => {\n registerWidget(widget);\n return null;\n });\n\n // Return unregister function for manual cleanup\n return () => unregisterWidget(widget.id);\n}\n","/**\n * Dashboard Widget Renderer\n *\n * Renders all visible dashboard widgets from the registry.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { Box, Typography } from '@mui/material';\nimport { useDashboardWidgets } from './DashboardWidgetRegistry';\n\nexport function DashboardWidgetRenderer() {\n const { getVisibleWidgets } = useDashboardWidgets();\n const widgets = getVisibleWidgets();\n\n if (widgets.length === 0) {\n return null;\n }\n\n return (\n <>\n {widgets.map(widget => (\n <Box key={widget.id} sx={{ mt: 4 }}>\n {widget.title && (\n <Typography variant=\"h6\" sx={{ mb: 2, color: 'var(--theme-text-primary)' }}>\n {widget.title}\n </Typography>\n )}\n {widget.component}\n </Box>\n ))}\n </>\n );\n}\n","/**\n * Widget Component Registry\n *\n * Maps widget component names (from server-side WidgetContribution) to actual React components.\n * Plugins register their widgets here so the dashboard can render them.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport React, { createContext, useContext, useState, useCallback, useMemo, type ReactNode } from 'react';\n\n/**\n * Widget component definition\n *\n * IMPORTANT: We store component functions (ComponentType), not JSX instances (ReactNode).\n * This ensures cross-React-version compatibility when the library is used in apps\n * with different React versions.\n */\nexport interface WidgetComponent {\n /** Component name (must match server-side WidgetContribution.component) */\n name: string;\n /** The React component function to render */\n component: React.ComponentType;\n}\n\ninterface WidgetComponentRegistryContextValue {\n /** Register a widget component */\n registerComponent: (name: string, component: React.ComponentType) => void;\n /** Register multiple widget components */\n registerComponents: (components: WidgetComponent[]) => void;\n /** Get a component by name */\n getComponent: (name: string) => React.ComponentType | null;\n /** Check if a component is registered */\n hasComponent: (name: string) => boolean;\n /** Get all registered component names */\n getRegisteredNames: () => string[];\n}\n\nconst WidgetComponentRegistryContext = createContext<WidgetComponentRegistryContextValue | null>(null);\n\nexport interface WidgetComponentRegistryProviderProps {\n /** Initial components to register */\n initialComponents?: WidgetComponent[];\n children: ReactNode;\n}\n\n/**\n * Provider for the widget component registry\n */\nexport function WidgetComponentRegistryProvider({\n initialComponents = [],\n children,\n}: WidgetComponentRegistryProviderProps) {\n const [components, setComponents] = useState<Map<string, React.ComponentType>>(() => {\n const map = new Map<string, React.ComponentType>();\n for (const comp of initialComponents) {\n map.set(comp.name, comp.component);\n }\n return map;\n });\n\n const registerComponent = useCallback((name: string, component: React.ComponentType) => {\n setComponents(prev => {\n const next = new Map(prev);\n next.set(name, component);\n return next;\n });\n }, []);\n\n const registerComponents = useCallback((comps: WidgetComponent[]) => {\n setComponents(prev => {\n const next = new Map(prev);\n for (const comp of comps) {\n next.set(comp.name, comp.component);\n }\n return next;\n });\n }, []);\n\n const getComponent = useCallback((name: string): React.ComponentType | null => {\n return components.get(name) ?? null;\n }, [components]);\n\n const hasComponent = useCallback((name: string): boolean => {\n return components.has(name);\n }, [components]);\n\n const getRegisteredNames = useCallback((): string[] => {\n return Array.from(components.keys());\n }, [components]);\n\n // Memoize context value to prevent unnecessary re-renders of consumers\n const contextValue = useMemo(\n () => ({\n registerComponent,\n registerComponents,\n getComponent,\n hasComponent,\n getRegisteredNames,\n }),\n [registerComponent, registerComponents, getComponent, hasComponent, getRegisteredNames]\n );\n\n return (\n <WidgetComponentRegistryContext.Provider value={contextValue}>\n {children}\n </WidgetComponentRegistryContext.Provider>\n );\n}\n\n/**\n * Hook to access the widget component registry\n */\nexport function useWidgetComponentRegistry() {\n const context = useContext(WidgetComponentRegistryContext);\n if (!context) {\n throw new Error('useWidgetComponentRegistry must be used within a WidgetComponentRegistryProvider');\n }\n return context;\n}\n","/**\n * Plugin Widget Renderer\n *\n * Fetches widget contributions from the server API and renders them using\n * the WidgetComponentRegistry to resolve component names to React components.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Typography, CircularProgress, Alert } from '@mui/material';\nimport { api } from '../api/controlPanelApi';\nimport { useWidgetComponentRegistry } from './WidgetComponentRegistry';\n\n/**\n * Widget contribution from the server\n */\ninterface WidgetContribution {\n id: string;\n title: string;\n component: string;\n priority?: number;\n showByDefault?: boolean;\n pluginId: string;\n}\n\ninterface PluginWidgetRendererProps {\n /** Only show widgets marked as showByDefault (default: true) */\n defaultOnly?: boolean;\n /** Additional widget IDs to show (beyond showByDefault) */\n additionalWidgetIds?: string[];\n}\n\n/**\n * Renders widgets from plugins that have registered them via the server API\n */\nexport function PluginWidgetRenderer({\n defaultOnly = true,\n additionalWidgetIds = [],\n}: PluginWidgetRendererProps) {\n const [widgets, setWidgets] = useState<WidgetContribution[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const { getComponent, hasComponent } = useWidgetComponentRegistry();\n\n useEffect(() => {\n const fetchWidgets = async () => {\n try {\n const data = await api.getUiContributions();\n setWidgets(data.widgets || []);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch widgets');\n } finally {\n setLoading(false);\n }\n };\n\n fetchWidgets();\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>\n <CircularProgress size={24} />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {error}\n </Alert>\n );\n }\n\n // Filter widgets to show\n const visibleWidgets = widgets\n .filter(widget => {\n // Show if marked as default, or if in additionalWidgetIds\n if (defaultOnly) {\n return widget.showByDefault || additionalWidgetIds.includes(widget.id);\n }\n return true;\n })\n .filter(widget => {\n // Only show widgets that have a registered component\n if (!hasComponent(widget.component)) {\n console.warn(`Widget \"${widget.id}\" references unregistered component \"${widget.component}\"`);\n return false;\n }\n return true;\n })\n .sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));\n\n if (visibleWidgets.length === 0) {\n return null;\n }\n\n return (\n <>\n {visibleWidgets.map(widget => {\n const Component = getComponent(widget.component);\n return (\n <Box key={widget.id} sx={{ mt: 4 }}>\n {widget.title && (\n <Typography variant=\"h6\" sx={{ mb: 2, color: 'var(--theme-text-primary)' }}>\n {widget.title}\n </Typography>\n )}\n {Component && <Component />}\n </Box>\n );\n })}\n </>\n );\n}\n","/**\n * Service Health Widget\n *\n * Displays health check status with latency for all registered health checks.\n * This is a built-in widget provided by qwickapps-server.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Card, CardContent, Chip } from '@mui/material';\nimport { GridLayout, Text } from '@qwickapps/react-framework';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport { api, HealthResponse } from '../../api/controlPanelApi';\n\nfunction getStatusIcon(status: string) {\n switch (status) {\n case 'healthy':\n return <CheckCircleIcon sx={{ fontSize: 24, color: 'var(--theme-success)' }} />;\n case 'degraded':\n return <WarningIcon sx={{ fontSize: 24, color: 'var(--theme-warning)' }} />;\n case 'unhealthy':\n return <ErrorIcon sx={{ fontSize: 24, color: 'var(--theme-error)' }} />;\n default:\n return <WarningIcon sx={{ fontSize: 24, color: 'var(--theme-text-secondary)' }} />;\n }\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return 'var(--theme-success)';\n case 'degraded':\n return 'var(--theme-warning)';\n case 'unhealthy':\n return 'var(--theme-error)';\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\n/** Get grid columns count (1-4) based on item count */\nfunction getGridColumns(count: number): 1 | 2 | 3 | 4 {\n if (count <= 1) return 1;\n if (count === 2) return 2;\n if (count === 3) return 3;\n return 4;\n}\n\n/**\n * Service Health Widget Component\n */\nexport function ServiceHealthWidget() {\n const [health, setHealth] = useState<HealthResponse | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchHealth = async () => {\n try {\n const data = await api.getHealth();\n setHealth(data);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch health');\n }\n };\n\n fetchHealth();\n const interval = setInterval(fetchHealth, 10000);\n return () => clearInterval(interval);\n }, []);\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Text variant=\"body2\" customColor=\"var(--theme-error)\" content={error} />\n </CardContent>\n </Card>\n );\n }\n\n const healthChecks = health ? Object.entries(health.checks) : [];\n\n if (healthChecks.length === 0) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Text variant=\"body2\" customColor=\"var(--theme-text-secondary)\" content=\"No health checks configured\" />\n </CardContent>\n </Card>\n );\n }\n\n // Determine grid columns based on number of health checks (max 4)\n const columns = getGridColumns(healthChecks.length);\n\n return (\n <GridLayout columns={columns} spacing=\"medium\" equalHeight>\n {healthChecks.map(([name, check]) => (\n <Card key={name} sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {getStatusIcon(check.status)}\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Text\n variant=\"body1\"\n fontWeight=\"500\"\n content={name.charAt(0).toUpperCase() + name.slice(1)}\n customColor=\"var(--theme-text-primary)\"\n />\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mt: 0.5 }}>\n <Chip\n label={check.status}\n size=\"small\"\n sx={{\n bgcolor: getStatusColor(check.status) + '20',\n color: getStatusColor(check.status),\n fontSize: '0.75rem',\n height: 20,\n }}\n />\n {check.latency !== undefined && (\n <Text\n variant=\"caption\"\n content={`${check.latency}ms`}\n customColor=\"var(--theme-text-secondary)\"\n />\n )}\n </Box>\n </Box>\n </Box>\n </CardContent>\n </Card>\n ))}\n </GridLayout>\n );\n}\n","/**\n * Integration Status Widget\n *\n * Displays the status of configured integrations with their connection status.\n * Used in the dashboard to show a quick overview of integration health.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Typography, Chip, CircularProgress, Alert } from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport { api } from '../../api/controlPanelApi';\n\ninterface Integration {\n id: string;\n name: string;\n description: string;\n configured: boolean;\n}\n\ninterface IntegrationsConfig {\n integrations: Integration[];\n stats: {\n totalRequests: number;\n };\n}\n\nexport function IntegrationStatusWidget() {\n const [config, setConfig] = useState<IntegrationsConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const data = await api.fetch<IntegrationsConfig>('/ai-proxy/config');\n setConfig(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch integrations');\n } finally {\n setLoading(false);\n }\n };\n\n fetchConfig();\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 2 }}>\n <CircularProgress size={20} />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Alert severity=\"warning\" sx={{ py: 0.5, fontSize: 13 }}>\n Unable to load integrations\n </Alert>\n );\n }\n\n if (!config) return null;\n\n const configuredCount = config.integrations.filter((i) => i.configured).length;\n const totalCount = config.integrations.length;\n\n return (\n <Box\n sx={{\n bgcolor: 'var(--theme-surface)',\n borderRadius: 2,\n p: 2,\n border: '1px solid var(--theme-border)',\n }}\n >\n {/* Summary */}\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 }}>\n <Typography variant=\"subtitle2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {configuredCount} of {totalCount} configured\n </Typography>\n <Typography variant=\"subtitle2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {config.stats.totalRequests} requests\n </Typography>\n </Box>\n\n {/* Integration List */}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n {config.integrations.map((integration) => (\n <Box\n key={integration.id}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n p: 1.5,\n bgcolor: 'var(--theme-background)',\n borderRadius: 1,\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {integration.configured ? (\n <CheckCircleIcon sx={{ color: 'var(--theme-success)', fontSize: 18 }} />\n ) : (\n <ErrorIcon sx={{ color: 'var(--theme-text-secondary)', fontSize: 18 }} />\n )}\n <Box>\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 500 }}>\n {integration.name}\n </Typography>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {integration.description}\n </Typography>\n </Box>\n </Box>\n <Chip\n label={integration.configured ? 'Connected' : 'Not Configured'}\n size=\"small\"\n sx={{\n bgcolor: integration.configured ? 'var(--theme-success)20' : 'transparent',\n color: integration.configured ? 'var(--theme-success)' : 'var(--theme-text-secondary)',\n border: integration.configured ? 'none' : '1px solid var(--theme-border)',\n fontWeight: 500,\n fontSize: 11,\n }}\n />\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2M4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12m8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8\"\n}), 'Block');","/**\n * Auth Status Widget\n *\n * Displays the authentication plugin status on the dashboard.\n * Shows whether auth is enabled, the adapter type, and configuration status.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Typography, Chip, CircularProgress, Alert } from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport BlockIcon from '@mui/icons-material/Block';\nimport { api } from '../../api/controlPanelApi';\n\ninterface AuthStatus {\n state: 'enabled' | 'disabled' | 'error';\n adapter: string | null;\n error?: string;\n missingVars?: string[];\n}\n\nconst adapterLabels: Record<string, string> = {\n supertokens: 'SuperTokens',\n auth0: 'Auth0',\n supabase: 'Supabase',\n basic: 'Basic Auth',\n};\n\nexport function AuthStatusWidget() {\n const [status, setStatus] = useState<AuthStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchStatus = async () => {\n try {\n const data = await api.fetch<AuthStatus>('/auth/config/status');\n setStatus(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch auth status');\n } finally {\n setLoading(false);\n }\n };\n\n fetchStatus();\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 2 }}>\n <CircularProgress size={20} />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Alert severity=\"warning\" sx={{ py: 0.5, fontSize: 13 }}>\n Unable to load auth status\n </Alert>\n );\n }\n\n if (!status) return null;\n\n const getStateIcon = () => {\n switch (status.state) {\n case 'enabled':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)', fontSize: 32 }} />;\n case 'error':\n return <ErrorIcon sx={{ color: 'var(--theme-error)', fontSize: 32 }} />;\n case 'disabled':\n default:\n return <BlockIcon sx={{ color: 'var(--theme-text-secondary)', fontSize: 32 }} />;\n }\n };\n\n const getStateColor = () => {\n switch (status.state) {\n case 'enabled':\n return 'var(--theme-success)';\n case 'error':\n return 'var(--theme-error)';\n case 'disabled':\n default:\n return 'var(--theme-text-secondary)';\n }\n };\n\n return (\n <Box\n sx={{\n bgcolor: 'var(--theme-surface)',\n borderRadius: 2,\n p: 2,\n border: '1px solid var(--theme-border)',\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {getStateIcon()}\n <Box sx={{ flex: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 0.5 }}>\n <Typography variant=\"subtitle1\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 600 }}>\n {status.state === 'enabled' && status.adapter\n ? adapterLabels[status.adapter] || status.adapter\n : status.state === 'disabled'\n ? 'Not Configured'\n : 'Configuration Error'}\n </Typography>\n <Chip\n label={status.state.toUpperCase()}\n size=\"small\"\n sx={{\n bgcolor: `${getStateColor()}20`,\n color: getStateColor(),\n fontWeight: 600,\n fontSize: 10,\n height: 20,\n }}\n />\n </Box>\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {status.state === 'enabled'\n ? 'Authentication is active'\n : status.state === 'disabled'\n ? 'Set AUTH_ADAPTER environment variable'\n : status.error || 'Check configuration'}\n </Typography>\n </Box>\n </Box>\n\n {/* Missing vars warning */}\n {status.missingVars && status.missingVars.length > 0 && (\n <Alert severity=\"warning\" sx={{ mt: 2, py: 0.5, '& .MuiAlert-message': { fontSize: 12 } }}>\n Missing: {status.missingVars.join(', ')}\n </Alert>\n )}\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m1 9 2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9m8 8 3 3 3-3c-1.65-1.66-4.34-1.66-6 0m-4-4 2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13\"\n}), 'Wifi');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M22.99 9C19.15 5.16 13.8 3.76 8.84 4.78l2.52 2.52c3.47-.17 6.99 1.05 9.63 3.7zm-4 4c-1.29-1.29-2.84-2.13-4.49-2.56l3.53 3.53zM2 3.05 5.07 6.1C3.6 6.82 2.22 7.78 1 9l1.99 2c1.24-1.24 2.67-2.16 4.2-2.77l2.24 2.24C7.81 10.89 6.27 11.73 5 13v.01L6.99 15c1.36-1.36 3.14-2.04 4.92-2.06L18.98 20l1.27-1.26L3.29 1.79zM9 17l3 3 3-3c-1.65-1.66-4.34-1.66-6 0\"\n}), 'WifiOff');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M4 6h18V4H4c-1.1 0-2 .9-2 2v11H0v3h14v-3H4zm19 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1m-1 9h-4v-7h4z\"\n}), 'Devices');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4\"\n}), 'Person');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M2.01 21 23 12 2.01 3 2 10l15 2-15 2z\"\n}), 'Send');","/**\n * StatCard Component\n *\n * A reusable card component for displaying statistics with an icon,\n * value, label, and optional sub-value.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { Box, Card, CardContent } from '@mui/material';\nimport { Text } from '@qwickapps/react-framework';\n\nexport interface StatCardProps {\n icon: React.ReactNode;\n label: string;\n value: string | number;\n subValue?: string;\n color?: string;\n}\n\nexport function StatCard({\n icon,\n label,\n value,\n subValue,\n color = 'var(--theme-primary)',\n}: StatCardProps) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent sx={{ py: 1.5, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n <Box sx={{ color }}>{icon}</Box>\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Text\n variant=\"h4\"\n content={String(value)}\n customColor=\"var(--theme-text-primary)\"\n fontWeight=\"600\"\n />\n <Text\n variant=\"caption\"\n content={label}\n customColor=\"var(--theme-text-secondary)\"\n />\n {subValue && (\n <Text\n variant=\"caption\"\n content={subValue}\n customColor=\"var(--theme-text-secondary)\"\n sx={{ display: 'block', mt: 0.25 }}\n />\n )}\n </Box>\n </Box>\n </CardContent>\n </Card>\n );\n}\n","/**\n * Formatting Utilities\n *\n * Common formatting functions for numbers, durations, and strings.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\n/**\n * Format a number with K/M suffix for large values\n */\nexport function formatNumber(num: number): string {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n}\n\n/**\n * Format milliseconds to human-readable duration\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(0)}s`;\n if (ms < 3600000) return `${(ms / 60000).toFixed(0)}m`;\n return `${(ms / 3600000).toFixed(1)}h`;\n}\n\n/**\n * Truncate a string ID for display\n */\nexport function truncateId(id: string, maxLength = 12): string {\n return id.length > maxLength ? `${id.substring(0, maxLength)}...` : id;\n}\n","/**\n * Notifications Stats Widget\n *\n * Displays realtime notifications connection statistics on the Control Panel dashboard.\n * Shows active clients, events processed, and connection health.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Card, CardContent, Chip, LinearProgress } from '@mui/material';\nimport { GridLayout, Text } from '@qwickapps/react-framework';\nimport WifiIcon from '@mui/icons-material/Wifi';\nimport WifiOffIcon from '@mui/icons-material/WifiOff';\nimport DevicesIcon from '@mui/icons-material/Devices';\nimport PersonIcon from '@mui/icons-material/Person';\nimport SendIcon from '@mui/icons-material/Send';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport { api } from '../../api/controlPanelApi';\nimport type { NotificationsStatsResponse } from '../../api/controlPanelApi';\nimport { StatCard } from '../../components/StatCard';\nimport { formatNumber, formatDuration } from '../../utils/formatters';\n\n/**\n * Notifications Stats Widget Component\n */\nexport function NotificationsStatsWidget() {\n const [stats, setStats] = useState<NotificationsStatsResponse | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const fetchStats = async () => {\n try {\n const data = await api.getNotificationsStats();\n setStats(data);\n setError(null);\n } catch (err) {\n // Check if it's a 404 (plugin not enabled)\n if (err instanceof Error && err.message.includes('404')) {\n setError('Notifications plugin not enabled');\n } else {\n setError(err instanceof Error ? err.message : 'Failed to fetch stats');\n }\n } finally {\n setLoading(false);\n }\n };\n\n fetchStats();\n const interval = setInterval(fetchStats, 5000); // Refresh every 5 seconds\n return () => clearInterval(interval);\n }, []);\n\n if (loading) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <LinearProgress />\n </CardContent>\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-border)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <WifiOffIcon sx={{ color: 'var(--theme-text-secondary)' }} />\n <Text variant=\"body2\" customColor=\"var(--theme-text-secondary)\" content={error} />\n </Box>\n </CardContent>\n </Card>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n const isHealthy = stats.connectionHealth.isHealthy;\n const healthColor = isHealthy ? 'var(--theme-success)' : 'var(--theme-warning)';\n\n return (\n <Box>\n {/* Connection Status Bar */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 2 }}>\n <CardContent sx={{ py: 1, '&:last-child': { pb: 1 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {isHealthy ? (\n <WifiIcon sx={{ color: healthColor, fontSize: 20 }} />\n ) : (\n <WifiOffIcon sx={{ color: healthColor, fontSize: 20 }} />\n )}\n <Text\n variant=\"body2\"\n content={isHealthy ? 'Connected' : 'Reconnecting...'}\n customColor={healthColor}\n fontWeight=\"500\"\n />\n {stats.connectionHealth.isReconnecting && (\n <Chip\n label={`Attempt ${stats.connectionHealth.reconnectAttempts}`}\n size=\"small\"\n sx={{\n bgcolor: 'var(--theme-warning)20',\n color: 'var(--theme-warning)',\n fontSize: '0.7rem',\n height: 18,\n }}\n />\n )}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Text\n variant=\"caption\"\n content={`${stats.channels.length} channel${stats.channels.length !== 1 ? 's' : ''}`}\n customColor=\"var(--theme-text-secondary)\"\n />\n {stats.lastEventAt && (\n <Text\n variant=\"caption\"\n content={`Last event: ${formatDuration(stats.connectionHealth.timeSinceLastEvent)} ago`}\n customColor=\"var(--theme-text-secondary)\"\n />\n )}\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n {/* Stats Grid */}\n <GridLayout columns={4} spacing=\"small\" equalHeight>\n <StatCard\n icon={<DevicesIcon sx={{ fontSize: 28 }} />}\n label=\"Active Clients\"\n value={stats.currentConnections}\n subValue={`${stats.totalConnections} total`}\n color=\"var(--theme-primary)\"\n />\n <StatCard\n icon={<PersonIcon sx={{ fontSize: 28 }} />}\n label=\"By Device\"\n value={stats.clientsByType.device}\n subValue={`${stats.clientsByType.user} by user`}\n color=\"var(--theme-info)\"\n />\n <StatCard\n icon={<SendIcon sx={{ fontSize: 28 }} />}\n label=\"Events Routed\"\n value={formatNumber(stats.eventsRouted)}\n subValue={`${formatNumber(stats.eventsProcessed)} processed`}\n color=\"var(--theme-success)\"\n />\n <StatCard\n icon={<ErrorIcon sx={{ fontSize: 28 }} />}\n label=\"Dropped\"\n value={formatNumber(stats.eventsDroppedNoClients)}\n subValue={`${stats.eventsParseFailed} parse errors`}\n color={stats.eventsDroppedNoClients > 0 ? 'var(--theme-warning)' : 'var(--theme-text-secondary)'}\n />\n </GridLayout>\n </Box>\n );\n}\n","/**\n * Built-in Widget Components\n *\n * Maps built-in widget component names to their React components.\n * These are the widgets that qwickapps-server provides out of the box.\n *\n * IMPORTANT: We export component functions, not JSX instances.\n * This ensures cross-React-version compatibility.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { ServiceHealthWidget, IntegrationStatusWidget, AuthStatusWidget, NotificationsStatsWidget } from './widgets';\nimport type { WidgetComponent } from './WidgetComponentRegistry';\n\n/**\n * Map of built-in widget component names to their React component functions.\n * Use this when you need to look up a component by name.\n */\nexport const builtInWidgetComponents: Record<string, React.ComponentType> = {\n ServiceHealthWidget: ServiceHealthWidget,\n IntegrationStatusWidget: IntegrationStatusWidget,\n AuthStatusWidget: AuthStatusWidget,\n NotificationsStatsWidget: NotificationsStatsWidget,\n};\n\n/**\n * Get built-in widget components as WidgetComponent array.\n * Use this when registering with WidgetComponentRegistryProvider.\n *\n * Returns component functions (not JSX instances) to ensure compatibility\n * across different React versions.\n */\nexport function getBuiltInWidgetComponents(): WidgetComponent[] {\n return [\n { name: 'ServiceHealthWidget', component: ServiceHealthWidget },\n { name: 'IntegrationStatusWidget', component: IntegrationStatusWidget },\n { name: 'AuthStatusWidget', component: AuthStatusWidget },\n { name: 'NotificationsStatsWidget', component: NotificationsStatsWidget },\n ];\n}\n","import { useState, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Box,\n Card,\n CardContent,\n CardActionArea,\n Typography,\n CircularProgress,\n Chip,\n} from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport { api, HealthResponse, InfoResponse } from '../api/controlPanelApi';\nimport { DashboardWidgetRenderer, PluginWidgetRenderer } from '../dashboard';\n\nfunction getStatusIcon(status: string) {\n switch (status) {\n case 'healthy':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)' }} />;\n case 'degraded':\n return <WarningIcon sx={{ color: 'var(--theme-warning)' }} />;\n case 'unhealthy':\n return <ErrorIcon sx={{ color: 'var(--theme-error)' }} />;\n default:\n return <CircularProgress size={20} />;\n }\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return 'var(--theme-success)';\n case 'degraded':\n return 'var(--theme-warning)';\n case 'unhealthy':\n return 'var(--theme-error)';\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\nexport function DashboardPage() {\n const navigate = useNavigate();\n const [health, setHealth] = useState<HealthResponse | null>(null);\n const [info, setInfo] = useState<InfoResponse | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const [healthData, infoData] = await Promise.all([\n api.getHealth(),\n api.getInfo(),\n ]);\n setHealth(healthData);\n setInfo(infoData);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch data');\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n const interval = setInterval(fetchData, 10000);\n return () => clearInterval(interval);\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '50vh' }}>\n <CircularProgress />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Typography color=\"error\">{error}</Typography>\n </CardContent>\n </Card>\n );\n }\n\n const healthChecks = health ? Object.entries(health.checks) : [];\n const healthyCount = healthChecks.filter(([, c]) => c.status === 'healthy').length;\n const totalCount = healthChecks.length;\n\n return (\n <Box>\n <Typography variant=\"h4\" sx={{ mb: 1, color: 'var(--theme-text-primary)' }}>\n Dashboard\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n Real-time overview of {info?.product || 'your service'}\n </Typography>\n\n {/* Service Status Banner - clickable to navigate to Health page */}\n <Card\n sx={{\n mb: 4,\n bgcolor: 'var(--theme-surface)',\n border: `2px solid ${getStatusColor(health?.status || 'unknown')}`,\n }}\n >\n <CardActionArea onClick={() => navigate('/health')}>\n <CardContent sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {getStatusIcon(health?.status || 'unknown')}\n <Box>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Service Status: {health?.status?.charAt(0).toUpperCase()}{health?.status?.slice(1)}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Click to view detailed health information\n </Typography>\n </Box>\n </Box>\n <Chip\n label={`${healthyCount}/${totalCount} checks passing`}\n sx={{\n bgcolor: getStatusColor(health?.status || 'unknown') + '20',\n color: getStatusColor(health?.status || 'unknown'),\n }}\n />\n </CardContent>\n </CardActionArea>\n </Card>\n\n {/* Plugin widgets (from server-side widget contributions) */}\n <PluginWidgetRenderer />\n\n {/* Legacy widgets from context (for backwards compatibility) */}\n <DashboardWidgetRenderer />\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z\"\n}), 'Refresh');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14\"\n}), 'Search');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M8 5v14l11-7z\"\n}), 'PlayArrow');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M6 19h4V5H6zm8-14v14h4V5z\"\n}), 'Pause');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z\"\n}), 'ArrowUpward');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z\"\n}), 'ArrowDownward');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z\"\n}), 'Info');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5s-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20zm-6 8h-4v-2h4zm0-4h-4v-2h4z\"\n}), 'BugReport');","import { useState, useEffect, useRef, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n CircularProgress,\n TextField,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n IconButton,\n Pagination,\n Tooltip,\n Grid,\n ToggleButton,\n ToggleButtonGroup,\n} from '@mui/material';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport SearchIcon from '@mui/icons-material/Search';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport PauseIcon from '@mui/icons-material/Pause';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport InfoIcon from '@mui/icons-material/Info';\nimport BugReportIcon from '@mui/icons-material/BugReport';\nimport { api, LogEntry, LogSource } from '../api/controlPanelApi';\n\nfunction getLevelColor(level: string): string {\n switch (level.toLowerCase()) {\n case 'error':\n return 'var(--theme-error)';\n case 'warn':\n case 'warning':\n return 'var(--theme-warning)';\n case 'info':\n return 'var(--theme-info)';\n case 'debug':\n return 'var(--theme-text-secondary)';\n default:\n return 'var(--theme-text-primary)';\n }\n}\n\nexport function LogsPage() {\n const [logs, setLogs] = useState<LogEntry[]>([]);\n const [sources, setSources] = useState<LogSource[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Filters\n const [selectedSource, setSelectedSource] = useState<string>('');\n const [selectedLevel, setSelectedLevel] = useState<string>('');\n const [searchQuery, setSearchQuery] = useState<string>('');\n const [page, setPage] = useState(1);\n const [total, setTotal] = useState(0);\n const limit = 50;\n\n // New features\n const [autoRefresh, setAutoRefresh] = useState(false);\n const [sortOrder, setSortOrder] = useState<'desc' | 'asc'>('desc'); // desc = newest first\n const autoRefreshRef = useRef<NodeJS.Timeout | null>(null);\n\n // Stats - computed from current logs (could be fetched from API if available)\n const stats = {\n total: total,\n errors: logs.filter(l => l.level.toLowerCase() === 'error').length,\n warnings: logs.filter(l => ['warn', 'warning'].includes(l.level.toLowerCase())).length,\n info: logs.filter(l => l.level.toLowerCase() === 'info').length,\n debug: logs.filter(l => l.level.toLowerCase() === 'debug').length,\n };\n\n const fetchLogs = useCallback(async () => {\n setLoading(true);\n try {\n const data = await api.getLogs({\n source: selectedSource || undefined,\n level: selectedLevel || undefined,\n search: searchQuery || undefined,\n limit,\n page,\n });\n // Sort logs based on sortOrder\n const sortedLogs = [...data.logs].sort((a, b) => {\n const dateA = new Date(a.timestamp).getTime();\n const dateB = new Date(b.timestamp).getTime();\n return sortOrder === 'desc' ? dateB - dateA : dateA - dateB;\n });\n setLogs(sortedLogs);\n setTotal(data.total);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch logs');\n } finally {\n setLoading(false);\n }\n }, [selectedSource, selectedLevel, searchQuery, page, sortOrder]);\n\n const fetchSources = async () => {\n try {\n const data = await api.getLogSources();\n setSources(data);\n } catch {\n // Sources endpoint might not be available\n }\n };\n\n useEffect(() => {\n fetchSources();\n }, []);\n\n useEffect(() => {\n fetchLogs();\n }, [fetchLogs]);\n\n // Auto-refresh effect\n useEffect(() => {\n if (autoRefresh) {\n autoRefreshRef.current = setInterval(fetchLogs, 5000);\n } else if (autoRefreshRef.current) {\n clearInterval(autoRefreshRef.current);\n autoRefreshRef.current = null;\n }\n return () => {\n if (autoRefreshRef.current) {\n clearInterval(autoRefreshRef.current);\n }\n };\n }, [autoRefresh, fetchLogs]);\n\n const handleSearch = () => {\n setPage(1);\n fetchLogs();\n };\n\n const handleSortOrderChange = (_event: React.MouseEvent<HTMLElement>, newOrder: 'desc' | 'asc' | null) => {\n if (newOrder !== null) {\n setSortOrder(newOrder);\n }\n };\n\n const totalPages = Math.ceil(total / limit);\n\n return (\n <Box>\n <Typography variant=\"h4\" sx={{ mb: 1, color: 'var(--theme-text-primary)' }}>\n Logs\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n View and search application logs\n </Typography>\n\n {/* Stats Widgets */}\n <Grid container spacing={2} sx={{ mb: 3 }}>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 600 }}>\n {stats.total.toLocaleString()}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Total Logs\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <ErrorIcon sx={{ color: 'var(--theme-error)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-error)', fontWeight: 600 }}>\n {stats.errors}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Errors\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <WarningIcon sx={{ color: 'var(--theme-warning)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-warning)', fontWeight: 600 }}>\n {stats.warnings}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Warnings\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <InfoIcon sx={{ color: 'var(--theme-info)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-info)', fontWeight: 600 }}>\n {stats.info}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Info\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <BugReportIcon sx={{ color: 'var(--theme-text-secondary)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 600 }}>\n {stats.debug}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Debug\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n\n {/* Filters */}\n <Card sx={{ mb: 3, bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap', alignItems: 'center' }}>\n {sources.length > 0 && (\n <FormControl size=\"small\" sx={{ minWidth: 150 }}>\n <InputLabel sx={{ color: 'var(--theme-text-secondary)' }}>Source</InputLabel>\n <Select\n value={selectedSource}\n label=\"Source\"\n onChange={(e) => setSelectedSource(e.target.value)}\n sx={{ color: 'var(--theme-text-primary)' }}\n >\n <MenuItem value=\"\">All Sources</MenuItem>\n {sources.map((source) => (\n <MenuItem key={source.name} value={source.name}>\n {source.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n\n <FormControl size=\"small\" sx={{ minWidth: 120 }}>\n <InputLabel sx={{ color: 'var(--theme-text-secondary)' }}>Level</InputLabel>\n <Select\n value={selectedLevel}\n label=\"Level\"\n onChange={(e) => setSelectedLevel(e.target.value)}\n sx={{ color: 'var(--theme-text-primary)' }}\n >\n <MenuItem value=\"\">All Levels</MenuItem>\n <MenuItem value=\"error\">Error</MenuItem>\n <MenuItem value=\"warn\">Warning</MenuItem>\n <MenuItem value=\"info\">Info</MenuItem>\n <MenuItem value=\"debug\">Debug</MenuItem>\n </Select>\n </FormControl>\n\n <TextField\n size=\"small\"\n placeholder=\"Search logs...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyPress={(e) => e.key === 'Enter' && handleSearch()}\n sx={{\n flex: 1,\n minWidth: 200,\n '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' },\n }}\n InputProps={{\n startAdornment: <SearchIcon sx={{ mr: 1, color: 'var(--theme-text-secondary)' }} />,\n }}\n />\n\n {/* Sort Order Toggle */}\n <ToggleButtonGroup\n value={sortOrder}\n exclusive\n onChange={handleSortOrderChange}\n size=\"small\"\n aria-label=\"sort order\"\n >\n <ToggleButton value=\"desc\" aria-label=\"newest first\">\n <Tooltip title=\"Newest First\">\n <ArrowDownwardIcon fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n <ToggleButton value=\"asc\" aria-label=\"oldest first\">\n <Tooltip title=\"Oldest First\">\n <ArrowUpwardIcon fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n </ToggleButtonGroup>\n\n {/* Auto Refresh Toggle */}\n <Tooltip title={autoRefresh ? 'Pause auto-refresh' : 'Enable auto-refresh (5s)'}>\n <IconButton\n onClick={() => setAutoRefresh(!autoRefresh)}\n sx={{\n color: autoRefresh ? 'var(--theme-success)' : 'var(--theme-text-secondary)',\n bgcolor: autoRefresh ? 'var(--theme-success)20' : 'transparent',\n }}\n >\n {autoRefresh ? <PauseIcon /> : <PlayArrowIcon />}\n </IconButton>\n </Tooltip>\n\n <Tooltip title=\"Refresh\">\n <IconButton onClick={fetchLogs} sx={{ color: 'var(--theme-primary)' }}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </CardContent>\n </Card>\n\n {/* Error State */}\n {error && (\n <Card sx={{ mb: 3, bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Typography color=\"error\">{error}</Typography>\n </CardContent>\n </Card>\n )}\n\n {/* Logs Table */}\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n {loading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>\n <CircularProgress />\n </Box>\n ) : logs.length === 0 ? (\n <CardContent>\n <Typography sx={{ color: 'var(--theme-text-secondary)', textAlign: 'center' }}>\n No logs found\n </Typography>\n </CardContent>\n ) : (\n <>\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 180 }}>\n Timestamp\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 100 }}>\n Level\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 120 }}>\n Component\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Message\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {logs.map((log, index) => (\n <TableRow key={index} hover>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', fontFamily: 'monospace', fontSize: '0.75rem' }}>\n {new Date(log.timestamp).toLocaleString()}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Chip\n label={log.level.toUpperCase()}\n size=\"small\"\n sx={{\n bgcolor: getLevelColor(log.level) + '20',\n color: getLevelColor(log.level),\n fontSize: '0.65rem',\n height: 20,\n }}\n />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', fontSize: '0.75rem' }}>\n {log.namespace || '-'}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)', fontFamily: 'monospace', fontSize: '0.8rem', whiteSpace: 'pre-wrap', wordBreak: 'break-all' }}>\n {log.message}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n <Pagination\n count={totalPages}\n page={page}\n onChange={(_, value) => setPage(value)}\n sx={{\n '& .MuiPaginationItem-root': {\n color: 'var(--theme-text-primary)',\n },\n }}\n />\n </Box>\n )}\n </>\n )}\n </Card>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z\"\n}), 'ContentCopy');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M15 9H9v6h6zm-2 4h-2v-2h2zm8-2V9h-2V7c0-1.1-.9-2-2-2h-2V3h-2v2h-2V3H9v2H7c-1.1 0-2 .9-2 2v2H3v2h2v2H3v2h2v2c0 1.1.9 2 2 2h2v2h2v-2h2v2h2v-2h2c1.1 0 2-.9 2-2v-2h2v-2h-2v-2zm-4 6H7V7h10z\"\n}), 'Memory');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2zM4 6h16v10H4z\"\n}), 'Computer');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M2 20h20v-4H2zm2-3h2v2H4zM2 4v4h20V4zm4 3H4V5h2zm-4 7h20v-4H2zm2-3h2v2H4z\"\n}), 'Storage');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon([/*#__PURE__*/_jsx(\"path\", {\n d: \"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8\"\n}, \"0\"), /*#__PURE__*/_jsx(\"path\", {\n d: \"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z\"\n}, \"1\")], 'AccessTime');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m12 21.35-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54z\"\n}), 'Favorite');","import { useState, useEffect } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n Typography,\n Grid,\n CircularProgress,\n Chip,\n IconButton,\n Tooltip,\n Snackbar,\n Alert,\n LinearProgress,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n} from '@mui/material';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport MemoryIcon from '@mui/icons-material/Memory';\nimport ComputerIcon from '@mui/icons-material/Computer';\nimport StorageIcon from '@mui/icons-material/Storage';\nimport AccessTimeIcon from '@mui/icons-material/AccessTime';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport FavoriteIcon from '@mui/icons-material/Favorite';\nimport { api, DiagnosticsResponse, HealthResponse } from '../api/controlPanelApi';\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nfunction formatUptime(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days > 0) {\n return `${days}d ${hours % 24}h ${minutes % 60}m`;\n }\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\nfunction getHealthStatusIcon(status: string, size = 20) {\n switch (status) {\n case 'healthy':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)', fontSize: size }} />;\n case 'degraded':\n return <WarningIcon sx={{ color: 'var(--theme-warning)', fontSize: size }} />;\n case 'unhealthy':\n return <ErrorIcon sx={{ color: 'var(--theme-error)', fontSize: size }} />;\n default:\n return <CircularProgress size={size} />;\n }\n}\n\nfunction getHealthStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return 'var(--theme-success)';\n case 'degraded':\n return 'var(--theme-warning)';\n case 'unhealthy':\n return 'var(--theme-error)';\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\nfunction formatLatency(latency?: number): string {\n if (latency === undefined) return '-';\n if (latency < 1000) return `${latency}ms`;\n return `${(latency / 1000).toFixed(2)}s`;\n}\n\nexport function SystemPage() {\n const [diagnostics, setDiagnostics] = useState<DiagnosticsResponse | null>(null);\n const [health, setHealth] = useState<HealthResponse | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [snackbar, setSnackbar] = useState<{ open: boolean; message: string }>({\n open: false,\n message: '',\n });\n\n const fetchData = async () => {\n setLoading(true);\n try {\n const [diagData, healthData] = await Promise.all([\n api.getDiagnostics(),\n api.getHealth().catch(() => null), // Health might not be available\n ]);\n setDiagnostics(diagData);\n setHealth(healthData);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch diagnostics');\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return () => clearInterval(interval);\n }, []);\n\n const handleCopyAll = () => {\n navigator.clipboard.writeText(JSON.stringify(diagnostics, null, 2));\n setSnackbar({ open: true, message: 'Diagnostics copied to clipboard' });\n };\n\n if (loading && !diagnostics) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '50vh' }}>\n <CircularProgress />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Typography color=\"error\">{error}</Typography>\n </CardContent>\n </Card>\n );\n }\n\n const memoryUsedPercent = diagnostics\n ? (diagnostics.system.memory.used / diagnostics.system.memory.total) * 100\n : 0;\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"h4\" sx={{ color: 'var(--theme-text-primary)' }}>\n System\n </Typography>\n <Box sx={{ display: 'flex', gap: 1 }}>\n <Tooltip title=\"Copy diagnostics JSON\">\n <IconButton onClick={handleCopyAll} sx={{ color: 'var(--theme-primary)' }}>\n <ContentCopyIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Refresh\">\n <IconButton onClick={fetchData} sx={{ color: 'var(--theme-primary)' }}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n System information and diagnostics\n </Typography>\n\n <Grid container spacing={3}>\n {/* System Info */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <ComputerIcon sx={{ color: 'var(--theme-primary)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n System Information\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>QwickApps Server</Typography>\n <Chip\n label={diagnostics?.frameworkVersion ? `v${diagnostics.frameworkVersion}` : 'N/A'}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-primary)20', color: 'var(--theme-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Node.js</Typography>\n <Chip\n label={diagnostics?.system.nodeVersion}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-background)', color: 'var(--theme-text-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Platform</Typography>\n <Chip\n label={diagnostics?.system.platform}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-background)', color: 'var(--theme-text-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Architecture</Typography>\n <Chip\n label={diagnostics?.system.arch}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-background)', color: 'var(--theme-text-primary)' }}\n />\n </Box>\n </Box>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Memory Usage */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <MemoryIcon sx={{ color: 'var(--theme-warning)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Memory Usage\n </Typography>\n </Box>\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', mb: 1 }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>\n Heap Used\n </Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {formatBytes(diagnostics?.system.memory.used || 0)}\n </Typography>\n </Box>\n <LinearProgress\n variant=\"determinate\"\n value={memoryUsedPercent}\n sx={{\n height: 8,\n borderRadius: 4,\n bgcolor: 'var(--theme-background)',\n '& .MuiLinearProgress-bar': {\n bgcolor: memoryUsedPercent > 80 ? 'var(--theme-error)' : 'var(--theme-warning)',\n borderRadius: 4,\n },\n }}\n />\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Heap Total</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {formatBytes(diagnostics?.system.memory.total || 0)}\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Heap Free</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {formatBytes(diagnostics?.system.memory.free || 0)}\n </Typography>\n </Box>\n </Box>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Service Info */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <StorageIcon sx={{ color: 'var(--theme-info)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Service Info\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Product</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {diagnostics?.product}\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Version</Typography>\n <Chip\n label={diagnostics?.version || 'N/A'}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-primary)20', color: 'var(--theme-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Timestamp</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)', fontSize: '0.875rem' }}>\n {diagnostics?.timestamp ? new Date(diagnostics.timestamp).toLocaleString() : 'N/A'}\n </Typography>\n </Box>\n </Box>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Uptime */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <AccessTimeIcon sx={{ color: 'var(--theme-success)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Uptime\n </Typography>\n </Box>\n <Typography variant=\"h3\" sx={{ color: 'var(--theme-success)', mb: 1 }}>\n {formatUptime(diagnostics?.uptime || 0)}\n </Typography>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>\n Service has been running without interruption\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Health Checks */}\n {health && (\n <Grid size={{ xs: 12 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <FavoriteIcon sx={{ color: getHealthStatusColor(health.status) }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Health Checks\n </Typography>\n <Chip\n label={health.status}\n size=\"small\"\n sx={{\n bgcolor: getHealthStatusColor(health.status) + '20',\n color: getHealthStatusColor(health.status),\n textTransform: 'capitalize',\n ml: 'auto',\n }}\n />\n </Box>\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Check\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Status\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Latency\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Last Checked\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {Object.entries(health.checks).map(([name, check]) => (\n <TableRow key={name}>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {getHealthStatusIcon(check.status)}\n <Typography fontWeight={500}>{name}</Typography>\n </Box>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Chip\n label={check.status}\n size=\"small\"\n sx={{\n bgcolor: getHealthStatusColor(check.status) + '20',\n color: getHealthStatusColor(check.status),\n textTransform: 'capitalize',\n }}\n />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n {formatLatency(check.latency)}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {new Date(check.lastChecked).toLocaleTimeString()}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </CardContent>\n </Card>\n </Grid>\n )}\n\n {/* Raw JSON */}\n <Grid size={{ xs: 12 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Raw Diagnostics JSON (for AI agents)\n </Typography>\n <Box\n component=\"pre\"\n sx={{\n bgcolor: 'var(--theme-background)',\n p: 2,\n borderRadius: 1,\n overflow: 'auto',\n maxHeight: 300,\n color: 'var(--theme-text-primary)',\n fontFamily: 'monospace',\n fontSize: '0.75rem',\n }}\n >\n {JSON.stringify(diagnostics, null, 2)}\n </Box>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n\n <Snackbar\n open={snackbar.open}\n autoHideDuration={2000}\n onClose={() => setSnackbar({ ...snackbar, open: false })}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n >\n <Alert severity=\"success\" variant=\"filled\">\n {snackbar.message}\n </Alert>\n </Snackbar>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z\"\n}), 'Edit');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z\"\n}), 'Save');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12z\"\n}), 'Cancel');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z\"\n}), 'Delete');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\"\n}), 'ExpandLess');","import { useState, useEffect, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n CircularProgress,\n Alert,\n IconButton,\n Tooltip,\n Button,\n TextField,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n FormControlLabel,\n Switch,\n Divider,\n Collapse,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n} from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport BlockIcon from '@mui/icons-material/Block';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport EditIcon from '@mui/icons-material/Edit';\nimport SaveIcon from '@mui/icons-material/Save';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ExpandLessIcon from '@mui/icons-material/ExpandLess';\nimport {\n api,\n AuthConfigStatus,\n AuthAdapterType,\n Auth0AdapterConfig,\n SupabaseAdapterConfig,\n SupertokensAdapterConfig,\n BasicAdapterConfig,\n UpdateAuthConfigRequest,\n TestProviderResponse,\n} from '../api/controlPanelApi';\n\n/**\n * Get the status color for the auth state\n */\nfunction getStateColor(state: string): string {\n switch (state) {\n case 'enabled':\n return 'var(--theme-success)';\n case 'error':\n return 'var(--theme-error)';\n case 'disabled':\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\n/**\n * Get the status icon for the auth state\n */\nfunction getStateIcon(state: string) {\n switch (state) {\n case 'enabled':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)' }} />;\n case 'error':\n return <ErrorIcon sx={{ color: 'var(--theme-error)' }} />;\n case 'disabled':\n default:\n return <BlockIcon sx={{ color: 'var(--theme-text-secondary)' }} />;\n }\n}\n\n// Default empty configs for each adapter type\nconst defaultAuth0Config: Auth0AdapterConfig = {\n domain: '',\n clientId: '',\n clientSecret: '',\n baseUrl: '',\n secret: '',\n audience: '',\n scopes: ['openid', 'profile', 'email'],\n allowedRoles: [],\n allowedDomains: [],\n};\n\nconst defaultSupabaseConfig: SupabaseAdapterConfig = {\n url: '',\n anonKey: '',\n};\n\nconst defaultBasicConfig: BasicAdapterConfig = {\n username: '',\n password: '',\n realm: 'Protected Area',\n};\n\nconst defaultSupertokensConfig: SupertokensAdapterConfig = {\n connectionUri: '',\n apiKey: '',\n appName: '',\n apiDomain: '',\n websiteDomain: '',\n apiBasePath: '/auth',\n websiteBasePath: '/auth',\n enableEmailPassword: true,\n socialProviders: {},\n};\n\ninterface SocialProvider {\n enabled: boolean;\n clientId: string;\n clientSecret: string;\n keyId?: string;\n teamId?: string;\n}\n\nexport function AuthPage() {\n const [status, setStatus] = useState<AuthConfigStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [copied, setCopied] = useState<string | null>(null);\n\n // Edit mode state\n const [editMode, setEditMode] = useState(false);\n const [saving, setSaving] = useState(false);\n const [testing, setTesting] = useState(false);\n const [testResult, setTestResult] = useState<TestProviderResponse | null>(null);\n\n // Form state\n const [selectedAdapter, setSelectedAdapter] = useState<AuthAdapterType | ''>('');\n const [auth0Config, setAuth0Config] = useState<Auth0AdapterConfig>(defaultAuth0Config);\n const [supabaseConfig, setSupabaseConfig] = useState<SupabaseAdapterConfig>(defaultSupabaseConfig);\n const [basicConfig, setBasicConfig] = useState<BasicAdapterConfig>(defaultBasicConfig);\n const [supertokensConfig, setSupertokensConfig] = useState<SupertokensAdapterConfig>(defaultSupertokensConfig);\n const [authRequired, setAuthRequired] = useState(true);\n const [excludePaths, setExcludePaths] = useState('');\n\n // Social providers state (for SuperTokens)\n const [googleProvider, setGoogleProvider] = useState<SocialProvider>({\n enabled: false,\n clientId: '',\n clientSecret: '',\n });\n const [githubProvider, setGithubProvider] = useState<SocialProvider>({\n enabled: false,\n clientId: '',\n clientSecret: '',\n });\n const [appleProvider, setAppleProvider] = useState<SocialProvider>({\n enabled: false,\n clientId: '',\n clientSecret: '',\n keyId: '',\n teamId: '',\n });\n\n // UI state\n const [showSocialProviders, setShowSocialProviders] = useState(false);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n\n const fetchStatus = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const data = await api.getAuthConfig();\n setStatus(data);\n\n // Initialize form from runtime config if available\n if (data.runtimeConfig) {\n const rc = data.runtimeConfig;\n setSelectedAdapter(rc.adapter || '');\n setAuthRequired(rc.settings.authRequired ?? true);\n setExcludePaths(rc.settings.excludePaths?.join(', ') || '');\n\n if (rc.config.auth0) setAuth0Config({ ...defaultAuth0Config, ...rc.config.auth0 });\n if (rc.config.supabase) setSupabaseConfig({ ...defaultSupabaseConfig, ...rc.config.supabase });\n if (rc.config.basic) setBasicConfig({ ...defaultBasicConfig, ...rc.config.basic });\n if (rc.config.supertokens) {\n const st = rc.config.supertokens;\n setSupertokensConfig({ ...defaultSupertokensConfig, ...st });\n if (st.socialProviders?.google) {\n setGoogleProvider({\n enabled: true,\n clientId: st.socialProviders.google.clientId,\n clientSecret: st.socialProviders.google.clientSecret,\n });\n }\n if (st.socialProviders?.github) {\n setGithubProvider({\n enabled: true,\n clientId: st.socialProviders.github.clientId,\n clientSecret: st.socialProviders.github.clientSecret,\n });\n }\n if (st.socialProviders?.apple) {\n setAppleProvider({\n enabled: true,\n clientId: st.socialProviders.apple.clientId,\n clientSecret: st.socialProviders.apple.clientSecret,\n keyId: st.socialProviders.apple.keyId,\n teamId: st.socialProviders.apple.teamId,\n });\n }\n }\n } else if (data.adapter) {\n // Initialize from current adapter if no runtime config\n setSelectedAdapter(data.adapter as AuthAdapterType);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch auth status');\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchStatus();\n }, [fetchStatus]);\n\n const handleCopy = (key: string, value: string) => {\n navigator.clipboard.writeText(value);\n setCopied(key);\n setTimeout(() => setCopied(null), 2000);\n };\n\n const handleEnterEditMode = () => {\n setEditMode(true);\n setTestResult(null);\n };\n\n const handleCancelEdit = () => {\n setEditMode(false);\n setTestResult(null);\n // Reset form to current status\n fetchStatus();\n };\n\n // Helper to convert typed config to plain object for API calls\n // Uses JSON round-trip to ensure clean serialization\n const toPlainObject = <T extends object>(obj: T): Record<string, unknown> =>\n JSON.parse(JSON.stringify(obj));\n\n const getCurrentConfig = (): Record<string, unknown> => {\n switch (selectedAdapter) {\n case 'auth0':\n return toPlainObject(auth0Config);\n case 'supabase':\n return toPlainObject(supabaseConfig);\n case 'basic':\n return toPlainObject(basicConfig);\n case 'supertokens': {\n const config: SupertokensAdapterConfig = { ...supertokensConfig };\n const socialProviders: SupertokensAdapterConfig['socialProviders'] = {};\n if (googleProvider.enabled) {\n socialProviders.google = {\n clientId: googleProvider.clientId,\n clientSecret: googleProvider.clientSecret,\n };\n }\n if (githubProvider.enabled) {\n socialProviders.github = {\n clientId: githubProvider.clientId,\n clientSecret: githubProvider.clientSecret,\n };\n }\n if (appleProvider.enabled) {\n socialProviders.apple = {\n clientId: appleProvider.clientId,\n clientSecret: appleProvider.clientSecret,\n keyId: appleProvider.keyId || '',\n teamId: appleProvider.teamId || '',\n };\n }\n if (Object.keys(socialProviders).length > 0) {\n config.socialProviders = socialProviders;\n }\n return toPlainObject(config);\n }\n default:\n return {};\n }\n };\n\n const handleTestConnection = async () => {\n if (!selectedAdapter) return;\n\n setTesting(true);\n setTestResult(null);\n try {\n const result = await api.testAuthProvider({\n adapter: selectedAdapter,\n config: getCurrentConfig(),\n });\n setTestResult(result);\n } catch (err) {\n setTestResult({\n success: false,\n message: err instanceof Error ? err.message : 'Test failed',\n });\n } finally {\n setTesting(false);\n }\n };\n\n // Test the current connection (env-based or runtime config)\n const handleTestCurrentConnection = async () => {\n if (!status?.adapter) return;\n\n setTesting(true);\n setTestResult(null);\n try {\n // Call the test endpoint with \"current\" flag to test existing config\n const result = await api.testCurrentAuthProvider();\n setTestResult(result);\n } catch (err) {\n setTestResult({\n success: false,\n message: err instanceof Error ? err.message : 'Test failed',\n });\n } finally {\n setTesting(false);\n }\n };\n\n const handleSave = async () => {\n if (!selectedAdapter) return;\n\n setSaving(true);\n setError(null);\n try {\n const request: UpdateAuthConfigRequest = {\n adapter: selectedAdapter,\n config: getCurrentConfig(),\n settings: {\n authRequired,\n excludePaths: excludePaths\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean),\n },\n };\n\n await api.updateAuthConfig(request);\n setEditMode(false);\n await fetchStatus();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save configuration');\n } finally {\n setSaving(false);\n }\n };\n\n const handleDelete = async () => {\n setSaving(true);\n setError(null);\n try {\n await api.deleteAuthConfig();\n setDeleteDialogOpen(false);\n setEditMode(false);\n await fetchStatus();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete configuration');\n } finally {\n setSaving(false);\n }\n };\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '50vh' }}>\n <CircularProgress />\n </Box>\n );\n }\n\n const configEntries = status?.config ? Object.entries(status.config) : [];\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"h4\" sx={{ color: 'var(--theme-text-primary)' }}>\n Authentication\n </Typography>\n <Box sx={{ display: 'flex', gap: 1 }}>\n {!editMode && (\n <>\n <Tooltip title=\"Edit Configuration\">\n <IconButton onClick={handleEnterEditMode} sx={{ color: 'var(--theme-primary)' }}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Refresh\">\n <IconButton onClick={fetchStatus} sx={{ color: 'var(--theme-text-secondary)' }}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n </>\n )}\n </Box>\n </Box>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n {editMode ? 'Configure authentication provider' : 'Auth plugin configuration status'}\n </Typography>\n\n {error && (\n <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n {/* Edit Mode */}\n {editMode ? (\n <Box>\n {/* Adapter Selection */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Provider Selection\n </Typography>\n <FormControl fullWidth sx={{ mb: 2 }}>\n <InputLabel sx={{ color: 'var(--theme-text-secondary)' }}>Auth Provider</InputLabel>\n <Select\n value={selectedAdapter}\n onChange={(e) => setSelectedAdapter(e.target.value as AuthAdapterType | '')}\n label=\"Auth Provider\"\n sx={{ color: 'var(--theme-text-primary)' }}\n >\n <MenuItem value=\"\">\n <em>None (Disabled)</em>\n </MenuItem>\n <MenuItem value=\"supertokens\">SuperTokens</MenuItem>\n <MenuItem value=\"auth0\">Auth0</MenuItem>\n <MenuItem value=\"supabase\">Supabase</MenuItem>\n <MenuItem value=\"basic\">Basic Auth</MenuItem>\n </Select>\n </FormControl>\n\n <Box sx={{ display: 'flex', gap: 2, alignItems: 'center' }}>\n <FormControlLabel\n control={\n <Switch\n checked={authRequired}\n onChange={(e) => setAuthRequired(e.target.checked)}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Auth Required\"\n sx={{ color: 'var(--theme-text-primary)' }}\n />\n <TextField\n label=\"Exclude Paths (comma-separated)\"\n value={excludePaths}\n onChange={(e) => setExcludePaths(e.target.value)}\n size=\"small\"\n sx={{ flex: 1, '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n placeholder=\"/api/health, /api/public/*\"\n />\n </Box>\n </CardContent>\n </Card>\n\n {/* Auth0 Config */}\n {selectedAdapter === 'auth0' && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Auth0 Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Domain\"\n value={auth0Config.domain}\n onChange={(e) => setAuth0Config({ ...auth0Config, domain: e.target.value })}\n required\n placeholder=\"your-tenant.auth0.com\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client ID\"\n value={auth0Config.clientId}\n onChange={(e) => setAuth0Config({ ...auth0Config, clientId: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n type=\"password\"\n value={auth0Config.clientSecret}\n onChange={(e) => setAuth0Config({ ...auth0Config, clientSecret: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Base URL\"\n value={auth0Config.baseUrl}\n onChange={(e) => setAuth0Config({ ...auth0Config, baseUrl: e.target.value })}\n required\n placeholder=\"https://your-app.com\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Session Secret\"\n type=\"password\"\n value={auth0Config.secret}\n onChange={(e) => setAuth0Config({ ...auth0Config, secret: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Audience (optional)\"\n value={auth0Config.audience || ''}\n onChange={(e) => setAuth0Config({ ...auth0Config, audience: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n </CardContent>\n </Card>\n )}\n\n {/* Supabase Config */}\n {selectedAdapter === 'supabase' && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Supabase Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Project URL\"\n value={supabaseConfig.url}\n onChange={(e) => setSupabaseConfig({ ...supabaseConfig, url: e.target.value })}\n required\n placeholder=\"https://your-project.supabase.co\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Anon Key\"\n type=\"password\"\n value={supabaseConfig.anonKey}\n onChange={(e) => setSupabaseConfig({ ...supabaseConfig, anonKey: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n </CardContent>\n </Card>\n )}\n\n {/* Basic Auth Config */}\n {selectedAdapter === 'basic' && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Basic Auth Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Username\"\n value={basicConfig.username}\n onChange={(e) => setBasicConfig({ ...basicConfig, username: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Password\"\n type=\"password\"\n value={basicConfig.password}\n onChange={(e) => setBasicConfig({ ...basicConfig, password: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Realm (optional)\"\n value={basicConfig.realm || ''}\n onChange={(e) => setBasicConfig({ ...basicConfig, realm: e.target.value })}\n placeholder=\"Protected Area\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n </CardContent>\n </Card>\n )}\n\n {/* SuperTokens Config */}\n {selectedAdapter === 'supertokens' && (\n <>\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n SuperTokens Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Connection URI\"\n value={supertokensConfig.connectionUri}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, connectionUri: e.target.value })}\n required\n placeholder=\"http://localhost:3567\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Key (optional)\"\n type=\"password\"\n value={supertokensConfig.apiKey || ''}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, apiKey: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"App Name\"\n value={supertokensConfig.appName}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, appName: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Domain\"\n value={supertokensConfig.apiDomain}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, apiDomain: e.target.value })}\n required\n placeholder=\"http://localhost:3000\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Website Domain\"\n value={supertokensConfig.websiteDomain}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, websiteDomain: e.target.value })}\n required\n placeholder=\"http://localhost:3000\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Base Path\"\n value={supertokensConfig.apiBasePath || '/auth'}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, apiBasePath: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n <Box sx={{ mt: 2 }}>\n <FormControlLabel\n control={\n <Switch\n checked={supertokensConfig.enableEmailPassword ?? true}\n onChange={(e) =>\n setSupertokensConfig({ ...supertokensConfig, enableEmailPassword: e.target.checked })\n }\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Enable Email/Password Auth\"\n sx={{ color: 'var(--theme-text-primary)' }}\n />\n </Box>\n </CardContent>\n </Card>\n\n {/* Social Providers */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent sx={{ pb: showSocialProviders ? 2 : 0 }}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n onClick={() => setShowSocialProviders(!showSocialProviders)}\n >\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Social Login Providers\n </Typography>\n {showSocialProviders ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n </Box>\n </CardContent>\n <Collapse in={showSocialProviders}>\n <CardContent sx={{ pt: 0 }}>\n <Divider sx={{ mb: 2 }} />\n\n {/* Google */}\n <Box sx={{ mb: 3 }}>\n <FormControlLabel\n control={\n <Switch\n checked={googleProvider.enabled}\n onChange={(e) => setGoogleProvider({ ...googleProvider, enabled: e.target.checked })}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Google\"\n sx={{ color: 'var(--theme-text-primary)', mb: 1 }}\n />\n {googleProvider.enabled && (\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2, ml: 4 }}>\n <TextField\n label=\"Client ID\"\n size=\"small\"\n value={googleProvider.clientId}\n onChange={(e) => setGoogleProvider({ ...googleProvider, clientId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n size=\"small\"\n type=\"password\"\n value={googleProvider.clientSecret}\n onChange={(e) => setGoogleProvider({ ...googleProvider, clientSecret: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n )}\n </Box>\n\n {/* GitHub */}\n <Box sx={{ mb: 3 }}>\n <FormControlLabel\n control={\n <Switch\n checked={githubProvider.enabled}\n onChange={(e) => setGithubProvider({ ...githubProvider, enabled: e.target.checked })}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"GitHub\"\n sx={{ color: 'var(--theme-text-primary)', mb: 1 }}\n />\n {githubProvider.enabled && (\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2, ml: 4 }}>\n <TextField\n label=\"Client ID\"\n size=\"small\"\n value={githubProvider.clientId}\n onChange={(e) => setGithubProvider({ ...githubProvider, clientId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n size=\"small\"\n type=\"password\"\n value={githubProvider.clientSecret}\n onChange={(e) => setGithubProvider({ ...githubProvider, clientSecret: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n )}\n </Box>\n\n {/* Apple */}\n <Box>\n <FormControlLabel\n control={\n <Switch\n checked={appleProvider.enabled}\n onChange={(e) => setAppleProvider({ ...appleProvider, enabled: e.target.checked })}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Apple\"\n sx={{ color: 'var(--theme-text-primary)', mb: 1 }}\n />\n {appleProvider.enabled && (\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2, ml: 4 }}>\n <TextField\n label=\"Client ID\"\n size=\"small\"\n value={appleProvider.clientId}\n onChange={(e) => setAppleProvider({ ...appleProvider, clientId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n size=\"small\"\n type=\"password\"\n value={appleProvider.clientSecret}\n onChange={(e) => setAppleProvider({ ...appleProvider, clientSecret: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Key ID\"\n size=\"small\"\n value={appleProvider.keyId || ''}\n onChange={(e) => setAppleProvider({ ...appleProvider, keyId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Team ID\"\n size=\"small\"\n value={appleProvider.teamId || ''}\n onChange={(e) => setAppleProvider({ ...appleProvider, teamId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n )}\n </Box>\n </CardContent>\n </Collapse>\n </Card>\n </>\n )}\n\n {/* Test Result */}\n {testResult && (\n <Alert severity={testResult.success ? 'success' : 'error'} sx={{ mb: 3 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {testResult.success ? 'Connection Successful' : 'Connection Failed'}\n </Typography>\n <Typography variant=\"body2\">{testResult.message}</Typography>\n {testResult.details?.latency && (\n <Typography variant=\"caption\" sx={{ display: 'block', mt: 0.5 }}>\n Latency: {testResult.details.latency}ms\n </Typography>\n )}\n </Alert>\n )}\n\n {/* Action Buttons */}\n <Box sx={{ display: 'flex', gap: 2, justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Button\n variant=\"outlined\"\n startIcon={<CancelIcon />}\n onClick={handleCancelEdit}\n disabled={saving}\n sx={{\n color: 'var(--theme-text-secondary)',\n borderColor: 'var(--theme-border)',\n }}\n >\n Cancel\n </Button>\n {status?.runtimeConfig && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n startIcon={<DeleteIcon />}\n onClick={() => setDeleteDialogOpen(true)}\n disabled={saving}\n >\n Reset to Env Vars\n </Button>\n )}\n </Box>\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Button\n variant=\"outlined\"\n startIcon={testing ? <CircularProgress size={16} /> : <PlayArrowIcon />}\n onClick={handleTestConnection}\n disabled={!selectedAdapter || testing || saving}\n sx={{\n color: 'var(--theme-text-primary)',\n borderColor: 'var(--theme-border)',\n }}\n >\n Test Connection\n </Button>\n <Button\n variant=\"contained\"\n startIcon={saving ? <CircularProgress size={16} sx={{ color: 'white' }} /> : <SaveIcon />}\n onClick={handleSave}\n disabled={saving}\n sx={{\n bgcolor: 'var(--theme-primary)',\n '&:hover': { bgcolor: 'var(--theme-primary-dark)' },\n }}\n >\n Save Configuration\n </Button>\n </Box>\n </Box>\n </Box>\n ) : (\n <>\n {/* Status Card (Read-only view) */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, mb: 2 }}>\n {getStateIcon(status?.state || 'disabled')}\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Status:{' '}\n <Chip\n label={status?.state?.toUpperCase() || 'UNKNOWN'}\n size=\"small\"\n sx={{\n bgcolor: `${getStateColor(status?.state || 'disabled')}20`,\n color: getStateColor(status?.state || 'disabled'),\n fontWeight: 600,\n }}\n />\n </Typography>\n {status?.adapter && (\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-secondary)', mt: 0.5 }}>\n Adapter: <strong>{status.adapter}</strong>\n </Typography>\n )}\n </Box>\n {/* Test Current Connection Button */}\n {status?.state === 'enabled' && status?.adapter && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={testing ? <CircularProgress size={14} /> : <PlayArrowIcon />}\n onClick={handleTestCurrentConnection}\n disabled={testing}\n sx={{\n color: 'var(--theme-text-primary)',\n borderColor: 'var(--theme-border)',\n }}\n >\n Test Connection\n </Button>\n )}\n </Box>\n\n {/* Test Result for current connection */}\n {testResult && !editMode && (\n <Alert severity={testResult.success ? 'success' : 'error'} sx={{ mb: 2 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {testResult.success ? 'Connection Successful' : 'Connection Failed'}\n </Typography>\n <Typography variant=\"body2\">{testResult.message}</Typography>\n {testResult.details?.latency && (\n <Typography variant=\"caption\" sx={{ display: 'block', mt: 0.5 }}>\n Latency: {testResult.details.latency}ms\n </Typography>\n )}\n </Alert>\n )}\n\n {/* Environment Variables Config Badge */}\n {status?.state === 'enabled' && !status?.runtimeConfig && (\n <Alert severity=\"success\" sx={{ mb: 2 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n Configured via Environment Variables\n </Typography>\n <Typography variant=\"body2\">\n Authentication is configured using environment variables. Click \"Edit\" to override with runtime\n configuration (requires PostgreSQL).\n </Typography>\n </Alert>\n )}\n\n {/* Runtime Config Badge */}\n {status?.runtimeConfig && (\n <Chip\n label=\"Runtime Configuration Active\"\n size=\"small\"\n sx={{\n bgcolor: 'var(--theme-primary)',\n color: 'white',\n mb: 2,\n }}\n />\n )}\n\n {/* Error Message */}\n {status?.state === 'error' && status.error && (\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n {status.error}\n </Alert>\n )}\n\n {/* Missing Variables */}\n {status?.missingVars && status.missingVars.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: 2 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600, mb: 1 }}>\n Missing environment variables:\n </Typography>\n <Box component=\"ul\" sx={{ m: 0, pl: 2 }}>\n {status.missingVars.map((v) => (\n <li key={v}>\n <code>{v}</code>\n </li>\n ))}\n </Box>\n </Alert>\n )}\n\n {/* Disabled State Info */}\n {status?.state === 'disabled' && (\n <Alert severity=\"info\">\n <Typography variant=\"body2\">\n Authentication is disabled. Click the edit button to configure a provider, or set the{' '}\n <code>AUTH_ADAPTER</code> environment variable.\n </Typography>\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n Valid options: <code>supertokens</code>, <code>auth0</code>, <code>supabase</code>,{' '}\n <code>basic</code>\n </Typography>\n </Alert>\n )}\n </CardContent>\n </Card>\n\n {/* Configuration Table */}\n {configEntries.length > 0 && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ pb: 0 }}>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Current Configuration\n </Typography>\n </CardContent>\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Variable\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Value\n </TableCell>\n <TableCell\n sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 60 }}\n >\n Actions\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {configEntries.map(([key, value]) => (\n <TableRow key={key}>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Typography\n sx={{ color: 'var(--theme-text-primary)', fontFamily: 'monospace', fontSize: 13 }}\n >\n {key}\n </Typography>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Typography\n sx={{\n color: value.includes('*') ? 'var(--theme-text-secondary)' : 'var(--theme-text-primary)',\n fontFamily: 'monospace',\n fontSize: 13,\n }}\n >\n {value}\n </Typography>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Tooltip title={copied === key ? 'Copied!' : 'Copy value'}>\n <IconButton\n size=\"small\"\n onClick={() => handleCopy(key, value)}\n sx={{ color: copied === key ? 'var(--theme-success)' : 'var(--theme-text-secondary)' }}\n >\n <ContentCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Card>\n )}\n\n {/* No Configuration */}\n {status?.state === 'enabled' && configEntries.length === 0 && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Typography sx={{ color: 'var(--theme-text-secondary)', textAlign: 'center' }}>\n No configuration details available\n </Typography>\n </CardContent>\n </Card>\n )}\n </>\n )}\n\n {/* Delete Confirmation Dialog */}\n <Dialog open={deleteDialogOpen} onClose={() => setDeleteDialogOpen(false)}>\n <DialogTitle>Reset to Environment Variables?</DialogTitle>\n <DialogContent>\n <Typography>\n This will delete the runtime configuration from the database. The auth plugin will fall back to environment\n variables on the next request.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setDeleteDialogOpen(false)}>Cancel</Button>\n <Button onClick={handleDelete} color=\"error\" disabled={saving}>\n {saving ? <CircularProgress size={20} /> : 'Reset'}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"\n}), 'Home');","import { Box, Typography, Button } from '@mui/material';\nimport { useNavigate } from 'react-router-dom';\nimport HomeIcon from '@mui/icons-material/Home';\n\nexport function NotFoundPage() {\n const navigate = useNavigate();\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '50vh',\n textAlign: 'center',\n }}\n >\n <Typography variant=\"h1\" sx={{ color: 'var(--theme-primary)', mb: 2 }}>\n 404\n </Typography>\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-text-primary)', mb: 1 }}>\n Page Not Found\n </Typography>\n <Typography sx={{ color: 'var(--theme-text-secondary)', mb: 4 }}>\n The page you're looking for doesn't exist or has been moved.\n </Typography>\n <Button\n variant=\"contained\"\n startIcon={<HomeIcon />}\n onClick={() => navigate('/')}\n sx={{\n bgcolor: 'var(--theme-primary)',\n '&:hover': { bgcolor: 'var(--theme-primary)' },\n }}\n >\n Back to Dashboard\n </Button>\n </Box>\n );\n}\n","/**\n * ControlPanelApp Component\n *\n * A wrapper around QwickApp that provides control panel functionality.\n * Injects base control panel routes (Dashboard, Health, Logs, System)\n * and allows consumers to add custom routes.\n *\n * Usage:\n * ```tsx\n * import { ControlPanelApp } from '@qwickapps/server/ui';\n *\n * function App() {\n * return (\n * <ControlPanelApp\n * productName=\"My Service\"\n * logo={<MyLogo />}\n * customDashboard={<MyDashboard />}\n * >\n * <Route path=\"/users\" element={<UsersPage />} />\n * <Route path=\"/settings\" element={<SettingsPage />} />\n * </ControlPanelApp>\n * );\n * }\n * ```\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { ReactNode, useState, useEffect } from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport { Box, Link } from '@mui/material';\nimport { QwickApp, ProductLogo, Text, type MenuItem } from '@qwickapps/react-framework';\nimport { defaultConfig } from '../config/AppConfig';\n\n// Base pages\nimport { DashboardPage } from '../pages/DashboardPage';\nimport { LogsPage } from '../pages/LogsPage';\nimport { SystemPage } from '../pages/SystemPage';\nimport { AuthPage } from '../pages/AuthPage';\nimport { NotFoundPage } from '../pages/NotFoundPage';\n\n// Dashboard widget system\nimport {\n DashboardWidgetProvider,\n WidgetComponentRegistryProvider,\n getBuiltInWidgetComponents,\n type DashboardWidget,\n type WidgetComponent,\n} from '../dashboard';\n\n// API\nimport { api } from '../api/controlPanelApi';\n\nexport interface ControlPanelAppProps {\n /** Product name displayed in the header */\n productName?: string;\n\n /** Custom logo component */\n logo?: ReactNode;\n\n /** Custom footer content (replaces default) */\n footerContent?: ReactNode;\n\n /** Initial dashboard widgets to register (legacy context-based system) */\n dashboardWidgets?: DashboardWidget[];\n\n /**\n * Widget components to register for the plugin-based widget system.\n * These map component names (from server WidgetContribution) to React components.\n * Built-in widgets (ServiceHealthWidget, etc.) are registered automatically.\n */\n widgetComponents?: WidgetComponent[];\n\n /** Additional navigation items to add to the base control panel nav */\n navigationItems?: MenuItem[];\n\n /** Whether to show the base control panel navigation (Dashboard, Health, etc.) */\n showBaseNavigation?: boolean;\n\n /** Base navigation item IDs to hide (e.g., ['health'] to hide the Health page) */\n hideBaseNavItems?: string[];\n\n /** Whether to show theme switcher in settings */\n showThemeSwitcher?: boolean;\n\n /** Whether to show palette switcher in settings */\n showPaletteSwitcher?: boolean;\n\n /** Base path for the control panel (e.g., '/cpanel') */\n basePath?: string;\n\n /** Custom routes to add (as Route elements) */\n children?: ReactNode;\n}\n\n/**\n * Default footer with QwickApps Server branding\n */\nfunction DefaultFooter({ version }: { version: string }) {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 0.5, py: 2 }}>\n <Text variant=\"caption\" customColor=\"var(--theme-text-secondary)\">\n Built with{' '}\n <Link\n href=\"https://qwickapps.com/products/qwickapps-server\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n sx={{ color: 'primary.main' }}\n >\n QwickApps Server\n </Link>\n {version && ` v${version}`}\n </Text>\n </Box>\n );\n}\n\n/**\n * Base navigation items for control panel\n * Routes are relative to BrowserRouter's basename (handled by NavigationProvider in QwickApp)\n */\nfunction getBaseNavigationItems(): MenuItem[] {\n return [\n { id: 'dashboard', label: 'Dashboard', route: '/', icon: 'dashboard' },\n { id: 'logs', label: 'Logs', route: '/logs', icon: 'article' },\n { id: 'auth', label: 'Auth', route: '/auth', icon: 'lock' },\n { id: 'system', label: 'System', route: '/system', icon: 'settings' },\n ];\n}\n\nexport function ControlPanelApp({\n productName = 'Control Panel',\n logo,\n footerContent,\n dashboardWidgets = [],\n widgetComponents = [],\n navigationItems = [],\n showBaseNavigation = true,\n hideBaseNavItems = [],\n showThemeSwitcher = true,\n showPaletteSwitcher = true,\n basePath = '',\n children,\n}: ControlPanelAppProps) {\n const [version, setVersion] = useState<string>('');\n\n // Combine built-in widget components with custom ones\n const allWidgetComponents = [...getBuiltInWidgetComponents(), ...widgetComponents];\n\n // Configure API base URL based on basePath - do this synchronously before any renders\n // If basePath is '/cpanel', API is at '/cpanel/api'\n // If basePath is '' or '/', API is at '/api'\n const apiBasePath = basePath && basePath !== '/' ? basePath : '';\n api.setBaseUrl(apiBasePath);\n\n // Fetch version from API\n useEffect(() => {\n api.getInfo()\n .then((info) => setVersion(info.version || ''))\n .catch(() => {});\n }, [apiBasePath]); // Re-fetch when apiBasePath changes\n\n // Build navigation: base items (filtered by hideBaseNavItems) + custom items\n // Navigation routes are relative to BrowserRouter's basename\n const filteredBaseItems = showBaseNavigation\n ? getBaseNavigationItems().filter(item => !hideBaseNavItems.includes(item.id))\n : [];\n const allNavigationItems: MenuItem[] = [\n ...filteredBaseItems,\n ...navigationItems,\n ];\n\n // Default logo if not provided\n const effectiveLogo = logo || <ProductLogo name={productName} />;\n\n // Default footer if not provided\n const effectiveFooter = footerContent || <DefaultFooter version={version} />;\n\n return (\n <WidgetComponentRegistryProvider initialComponents={allWidgetComponents}>\n <DashboardWidgetProvider initialWidgets={dashboardWidgets}>\n <QwickApp\n config={defaultConfig}\n logo={effectiveLogo}\n footerContent={effectiveFooter}\n enableScaffolding={true}\n navigationItems={allNavigationItems}\n showThemeSwitcher={showThemeSwitcher}\n showPaletteSwitcher={showPaletteSwitcher}\n >\n <Routes>\n {/* Base control panel routes (filtered by hideBaseNavItems) */}\n {showBaseNavigation && (\n <>\n {!hideBaseNavItems.includes('dashboard') && <Route path=\"/\" element={<DashboardPage />} />}\n {!hideBaseNavItems.includes('logs') && <Route path=\"/logs\" element={<LogsPage />} />}\n {!hideBaseNavItems.includes('auth') && <Route path=\"/auth\" element={<AuthPage />} />}\n {!hideBaseNavItems.includes('system') && <Route path=\"/system\" element={<SystemPage />} />}\n </>\n )}\n\n {/* Custom routes from consumer */}\n {children}\n\n {/* Catch-all for 404 */}\n <Route path=\"*\" element={<NotFoundPage />} />\n </Routes>\n </QwickApp>\n </DashboardWidgetProvider>\n </WidgetComponentRegistryProvider>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m21.41 11.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58s1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41s-.23-1.06-.59-1.42M5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7\"\n}), 'LocalOffer');","/**\n * UsersPage Component\n *\n * Generic user management page that works with Users, Bans, and Entitlements plugins.\n * All features are optional and auto-detected based on available plugins.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n TextField,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n Alert,\n LinearProgress,\n InputAdornment,\n Tabs,\n Tab,\n TablePagination,\n Tooltip,\n IconButton,\n CircularProgress,\n Autocomplete,\n} from '@mui/material';\nimport { Text, Button, Dialog, DialogTitle, DialogContent, DialogActions, GridLayout } from '@qwickapps/react-framework';\nimport SearchIcon from '@mui/icons-material/Search';\nimport PersonIcon from '@mui/icons-material/Person';\nimport LocalOfferIcon from '@mui/icons-material/LocalOffer';\nimport BlockIcon from '@mui/icons-material/Block';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport {\n api,\n type User,\n type Ban,\n type EntitlementResult,\n type EntitlementDefinition,\n type PluginFeatures,\n} from '../api/controlPanelApi';\n\nexport interface UsersPageProps {\n /** Page title */\n title?: string;\n /** Page subtitle */\n subtitle?: string;\n /** Override automatic feature detection */\n features?: Partial<PluginFeatures>;\n /** Custom actions to render in the header */\n headerActions?: React.ReactNode;\n /** Callback when a user is selected */\n onUserSelect?: (user: User) => void;\n}\n\nexport function UsersPage({\n title = 'User Management',\n subtitle = 'Manage users, bans, and entitlements',\n features: featureOverrides,\n headerActions,\n onUserSelect,\n}: UsersPageProps) {\n // Feature detection\n const [features, setFeatures] = useState<PluginFeatures>({\n users: featureOverrides?.users ?? true,\n bans: featureOverrides?.bans ?? false,\n entitlements: featureOverrides?.entitlements ?? false,\n entitlementsReadonly: featureOverrides?.entitlementsReadonly ?? true,\n });\n const [featuresLoaded, setFeaturesLoaded] = useState(!!featureOverrides);\n\n // Tab state\n const [activeTab, setActiveTab] = useState(0);\n\n // Users state\n const [users, setUsers] = useState<User[]>([]);\n const [usersTotal, setUsersTotal] = useState(0);\n const [usersPage, setUsersPage] = useState(0);\n const [usersPerPage, setUsersPerPage] = useState(25);\n const [usersSearch, setUsersSearch] = useState('');\n\n // User entitlements cache (email -> count)\n const [userEntitlementCounts, setUserEntitlementCounts] = useState<Record<string, number>>({});\n\n // Banned users state\n const [bans, setBans] = useState<Ban[]>([]);\n const [bansTotal, setBansTotal] = useState(0);\n\n // Shared state\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n\n // Ban dialog state\n const [banDialogOpen, setBanDialogOpen] = useState(false);\n const [newBan, setNewBan] = useState({\n email: '',\n reason: '',\n expiresAt: '',\n });\n\n // Entitlements lookup state\n const [entitlementsDialogOpen, setEntitlementsDialogOpen] = useState(false);\n const [entitlementsSearch, setEntitlementsSearch] = useState('');\n const [entitlementsLoading, setEntitlementsLoading] = useState(false);\n const [entitlementsRefreshing, setEntitlementsRefreshing] = useState(false);\n const [entitlementsData, setEntitlementsData] = useState<EntitlementResult | null>(null);\n const [entitlementsError, setEntitlementsError] = useState<string | null>(null);\n\n // Available entitlements (for grant dropdown)\n const [availableEntitlements, setAvailableEntitlements] = useState<EntitlementDefinition[]>([]);\n const [selectedEntitlement, setSelectedEntitlement] = useState<string>('');\n const [grantingEntitlement, setGrantingEntitlement] = useState(false);\n\n // Detect features on mount\n useEffect(() => {\n if (featureOverrides) return;\n\n api.detectFeatures().then((detected) => {\n setFeatures(detected);\n setFeaturesLoaded(true);\n }).catch(() => {\n setFeaturesLoaded(true);\n });\n }, [featureOverrides]);\n\n // Fetch available entitlements when features are loaded\n useEffect(() => {\n if (featuresLoaded && features.entitlements && !features.entitlementsReadonly) {\n api.getAvailableEntitlements().then(setAvailableEntitlements).catch(() => {});\n }\n }, [featuresLoaded, features.entitlements, features.entitlementsReadonly]);\n\n // Fetch users\n const fetchUsers = useCallback(async () => {\n if (!features.users) return;\n\n setLoading(true);\n try {\n const data = await api.getUsers({\n limit: usersPerPage,\n page: usersPage,\n search: usersSearch || undefined,\n });\n setUsers(data.users || []);\n setUsersTotal(data.total);\n setError(null);\n\n // Fetch entitlement counts for visible users if entitlements plugin is enabled\n if (features.entitlements && data.users?.length) {\n const counts: Record<string, number> = {};\n await Promise.all(\n data.users.map(async (user) => {\n try {\n const ent = await api.getEntitlements(user.email);\n counts[user.email] = ent.entitlements.length;\n } catch {\n counts[user.email] = 0;\n }\n })\n );\n setUserEntitlementCounts((prev) => ({ ...prev, ...counts }));\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch users');\n } finally {\n setLoading(false);\n }\n }, [features.users, features.entitlements, usersPage, usersPerPage, usersSearch]);\n\n // Fetch bans\n const fetchBans = useCallback(async () => {\n if (!features.bans) return;\n\n setLoading(true);\n try {\n const data = await api.getBans();\n setBans(data.bans || []);\n setBansTotal(data.total);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch bans');\n } finally {\n setLoading(false);\n }\n }, [features.bans]);\n\n // Initial fetch and tab-based fetching\n useEffect(() => {\n if (!featuresLoaded) return;\n\n if (activeTab === 0 && features.users) {\n fetchUsers();\n } else if (activeTab === 1 && features.bans) {\n fetchBans();\n }\n }, [activeTab, featuresLoaded, features.users, features.bans, fetchUsers, fetchBans]);\n\n // Fetch bans count for stats (only on initial load)\n useEffect(() => {\n if (featuresLoaded && features.bans) {\n fetchBans();\n }\n }, [featuresLoaded, features.bans, fetchBans]);\n\n // Debounced search\n useEffect(() => {\n if (!featuresLoaded) return;\n\n const timeout = setTimeout(() => {\n if (activeTab === 0 && features.users) {\n setUsersPage(0);\n fetchUsers();\n }\n }, 300);\n return () => clearTimeout(timeout);\n }, [usersSearch, activeTab, featuresLoaded, features.users, fetchUsers]);\n\n // Ban handlers\n const handleBanUser = async () => {\n try {\n await api.banUser(newBan.email, newBan.reason, newBan.expiresAt || undefined);\n setSuccess('User banned successfully');\n setBanDialogOpen(false);\n setNewBan({ email: '', reason: '', expiresAt: '' });\n fetchBans();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to ban user');\n }\n };\n\n const handleUnbanUser = async (email: string) => {\n if (!confirm('Unban this user?')) return;\n\n try {\n await api.unbanUser(email);\n setSuccess('User unbanned successfully');\n fetchBans();\n } catch (err) {\n setError('Failed to unban user');\n }\n };\n\n // Entitlements handlers\n const handleEntitlementsSearch = async () => {\n if (!entitlementsSearch.trim()) {\n setEntitlementsError('Please enter an email address');\n return;\n }\n\n setEntitlementsLoading(true);\n setEntitlementsError(null);\n setEntitlementsData(null);\n\n try {\n const data = await api.getEntitlements(entitlementsSearch);\n setEntitlementsData(data);\n } catch (err) {\n setEntitlementsError(err instanceof Error ? err.message : 'Failed to lookup entitlements');\n } finally {\n setEntitlementsLoading(false);\n }\n };\n\n const handleEntitlementsRefresh = async () => {\n if (!entitlementsData) return;\n\n setEntitlementsRefreshing(true);\n try {\n const data = await api.refreshEntitlements(entitlementsSearch);\n setEntitlementsData(data);\n } catch (err) {\n setEntitlementsError('Failed to refresh entitlements');\n } finally {\n setEntitlementsRefreshing(false);\n }\n };\n\n const handleGrantEntitlement = async () => {\n if (!selectedEntitlement || !entitlementsData) return;\n\n setGrantingEntitlement(true);\n try {\n await api.grantEntitlement(entitlementsData.identifier, selectedEntitlement);\n setSuccess(`Entitlement \"${selectedEntitlement}\" granted`);\n setSelectedEntitlement('');\n // Refresh to show new entitlement\n const data = await api.refreshEntitlements(entitlementsData.identifier);\n setEntitlementsData(data);\n // Update count cache\n setUserEntitlementCounts((prev) => ({\n ...prev,\n [entitlementsData.identifier]: data.entitlements.length,\n }));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to grant entitlement');\n } finally {\n setGrantingEntitlement(false);\n }\n };\n\n const handleRevokeEntitlement = async (entitlement: string) => {\n if (!entitlementsData) return;\n if (!confirm(`Revoke \"${entitlement}\" from ${entitlementsData.identifier}?`)) return;\n\n try {\n await api.revokeEntitlement(entitlementsData.identifier, entitlement);\n setSuccess(`Entitlement \"${entitlement}\" revoked`);\n // Refresh to show updated entitlements\n const data = await api.refreshEntitlements(entitlementsData.identifier);\n setEntitlementsData(data);\n // Update count cache\n setUserEntitlementCounts((prev) => ({\n ...prev,\n [entitlementsData.identifier]: data.entitlements.length,\n }));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to revoke entitlement');\n }\n };\n\n const openEntitlementsDialog = (email?: string) => {\n if (email) {\n setEntitlementsSearch(email);\n // Auto-search when opened with email\n setEntitlementsLoading(true);\n setEntitlementsError(null);\n setEntitlementsData(null);\n api.getEntitlements(email)\n .then(setEntitlementsData)\n .catch((err) => setEntitlementsError(err instanceof Error ? err.message : 'Failed to lookup entitlements'))\n .finally(() => setEntitlementsLoading(false));\n }\n setEntitlementsDialogOpen(true);\n };\n\n // Utility functions\n const formatDate = (date: string | null | undefined) => {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n };\n\n // Get entitlements that can be granted (not already assigned)\n const grantableEntitlements = availableEntitlements.filter(\n (e) => !entitlementsData?.entitlements.includes(e.name)\n );\n\n // Build tabs based on available features\n const tabs: { label: string; count?: number }[] = [];\n if (features.users) tabs.push({ label: 'Users', count: usersTotal });\n if (features.bans) tabs.push({ label: 'Banned', count: bansTotal });\n\n if (!featuresLoaded) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 8 }}>\n <CircularProgress />\n </Box>\n );\n }\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 3 }}>\n <Box>\n <Text variant=\"h4\" content={title} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={subtitle} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n <Box sx={{ display: 'flex', gap: 1 }}>\n {headerActions}\n {features.entitlements && (\n <Button\n variant=\"outlined\"\n icon=\"person_search\"\n label=\"Lookup Entitlements\"\n onClick={() => openEntitlementsDialog()}\n />\n )}\n {features.bans && (\n <Button\n variant=\"primary\"\n color=\"error\"\n icon=\"block\"\n label=\"Ban User\"\n onClick={() => setBanDialogOpen(true)}\n />\n )}\n </Box>\n </Box>\n\n {loading && <LinearProgress sx={{ mb: 2 }} />}\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)} sx={{ mb: 2 }}>\n {error}\n </Alert>\n )}\n\n {success && (\n <Alert severity=\"success\" onClose={() => setSuccess(null)} sx={{ mb: 2 }}>\n {success}\n </Alert>\n )}\n\n {/* Stats Cards */}\n {features.users && (\n <GridLayout columns={features.bans ? 3 : 2} spacing=\"medium\" sx={{ mb: 3 }} equalHeight>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <PersonIcon sx={{ fontSize: 40, color: 'var(--theme-primary)' }} />\n <Box>\n <Text variant=\"h4\" content={usersTotal.toLocaleString()} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content=\"Total Users\" customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n {features.entitlements && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <LocalOfferIcon sx={{ fontSize: 40, color: 'var(--theme-success)' }} />\n <Box>\n <Text variant=\"body1\" fontWeight=\"500\" content=\"Entitlements\" customColor=\"var(--theme-text-primary)\" />\n <Text\n variant=\"body2\"\n content={features.entitlementsReadonly ? 'Read-only Mode' : 'Plugin Active'}\n customColor={features.entitlementsReadonly ? 'var(--theme-warning)' : 'var(--theme-success)'}\n />\n </Box>\n </Box>\n </CardContent>\n </Card>\n )}\n\n {features.bans && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <BlockIcon sx={{ fontSize: 40, color: bansTotal > 0 ? 'var(--theme-error)' : 'var(--theme-text-secondary)' }} />\n <Box>\n <Text variant=\"h4\" content={bansTotal.toString()} customColor={bansTotal > 0 ? 'var(--theme-error)' : 'var(--theme-text-primary)'} />\n <Text variant=\"body2\" content=\"Banned Users\" customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n )}\n </GridLayout>\n )}\n\n {/* Main Content */}\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n {tabs.length > 1 && (\n <Tabs\n value={activeTab}\n onChange={(_, v) => setActiveTab(v)}\n sx={{ borderBottom: 1, borderColor: 'var(--theme-border)', px: 2 }}\n >\n {tabs.map((tab, idx) => (\n <Tab key={idx} label={`${tab.label}${tab.count !== undefined ? ` (${tab.count})` : ''}`} />\n ))}\n </Tabs>\n )}\n\n <CardContent sx={{ p: 0 }}>\n {/* Search Bar */}\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'var(--theme-border)' }}>\n <TextField\n size=\"small\"\n placeholder=\"Search by email or name...\"\n value={usersSearch}\n onChange={(e) => setUsersSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'var(--theme-text-secondary)' }} />\n </InputAdornment>\n ),\n }}\n sx={{ minWidth: 300 }}\n />\n </Box>\n\n {/* Users Tab */}\n {activeTab === 0 && features.users && (\n <>\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>ID</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Name</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Email</TableCell>\n {features.entitlements && (\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"center\">Entitlements</TableCell>\n )}\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Created</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"right\">Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {users.map((user) => (\n <TableRow\n key={user.id}\n hover\n sx={{ cursor: onUserSelect ? 'pointer' : 'default' }}\n onClick={() => onUserSelect?.(user)}\n >\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', fontFamily: 'monospace', fontSize: '0.75rem' }}>\n {user.id.substring(0, 8)}...\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Text variant=\"body1\" content={user.name || '--'} fontWeight=\"500\" />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n {user.email}\n </TableCell>\n {features.entitlements && (\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"center\">\n <Chip\n size=\"small\"\n icon={<LocalOfferIcon sx={{ fontSize: 14 }} />}\n label={userEntitlementCounts[user.email] ?? '...'}\n sx={{\n bgcolor: 'var(--theme-primary)20',\n color: 'var(--theme-primary)',\n }}\n />\n </TableCell>\n )}\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {formatDate(user.created_at)}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"right\">\n {features.entitlements && (\n <Tooltip title=\"View entitlements\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); openEntitlementsDialog(user.email); }}>\n <LocalOfferIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n </TableCell>\n </TableRow>\n ))}\n {users.length === 0 && !loading && (\n <TableRow>\n <TableCell colSpan={features.entitlements ? 6 : 5} align=\"center\" sx={{ py: 4, color: 'var(--theme-text-secondary)' }}>\n {usersSearch ? 'No users match your search' : 'No users found'}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n component=\"div\"\n count={usersTotal}\n page={usersPage}\n onPageChange={(_, page) => setUsersPage(page)}\n rowsPerPage={usersPerPage}\n onRowsPerPageChange={(e) => {\n setUsersPerPage(parseInt(e.target.value, 10));\n setUsersPage(0);\n }}\n rowsPerPageOptions={[10, 25, 50, 100]}\n sx={{ borderTop: 1, borderColor: 'var(--theme-border)' }}\n />\n </>\n )}\n\n {/* Banned Users Tab */}\n {activeTab === 1 && features.bans && (\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Email</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Reason</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Banned At</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Expires</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Banned By</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"right\">Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {bans.map((ban) => (\n <TableRow key={ban.id}>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Text variant=\"body1\" content={ban.email} fontWeight=\"500\" />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', maxWidth: 200 }}>\n <Text variant=\"body2\" content={ban.reason} noWrap />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {formatDate(ban.banned_at)}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Chip\n size=\"small\"\n label={ban.expires_at ? formatDate(ban.expires_at) : 'Permanent'}\n sx={{\n bgcolor: ban.expires_at ? 'var(--theme-warning)20' : 'var(--theme-error)20',\n color: ban.expires_at ? 'var(--theme-warning)' : 'var(--theme-error)',\n }}\n />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {ban.banned_by}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"right\">\n <Button\n buttonSize=\"small\"\n variant=\"text\"\n color=\"success\"\n icon=\"check_circle\"\n label=\"Unban\"\n onClick={() => handleUnbanUser(ban.email)}\n />\n </TableCell>\n </TableRow>\n ))}\n {bans.length === 0 && !loading && (\n <TableRow>\n <TableCell colSpan={6} align=\"center\" sx={{ py: 4, color: 'var(--theme-text-secondary)' }}>\n No users are currently banned\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n </CardContent>\n </Card>\n\n {/* Ban User Dialog */}\n {features.bans && (\n <Dialog\n open={banDialogOpen}\n onClose={() => setBanDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Ban User</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <TextField\n label=\"Email\"\n fullWidth\n value={newBan.email}\n onChange={(e) => setNewBan({ ...newBan, email: e.target.value })}\n placeholder=\"Enter user email\"\n />\n <TextField\n label=\"Reason\"\n fullWidth\n multiline\n rows={3}\n value={newBan.reason}\n onChange={(e) => setNewBan({ ...newBan, reason: e.target.value })}\n placeholder=\"Enter reason for ban\"\n />\n <TextField\n label=\"Expiration (Optional)\"\n type=\"datetime-local\"\n fullWidth\n value={newBan.expiresAt}\n onChange={(e) => setNewBan({ ...newBan, expiresAt: e.target.value })}\n InputLabelProps={{ shrink: true }}\n helperText=\"Leave empty for permanent ban\"\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n label=\"Cancel\"\n onClick={() => {\n setBanDialogOpen(false);\n setNewBan({ email: '', reason: '', expiresAt: '' });\n }}\n />\n <Button\n variant=\"primary\"\n color=\"error\"\n label=\"Ban User\"\n onClick={handleBanUser}\n disabled={!newBan.email || !newBan.reason}\n />\n </DialogActions>\n </Dialog>\n )}\n\n {/* Entitlements Lookup Dialog */}\n {features.entitlements && (\n <Dialog\n open={entitlementsDialogOpen}\n onClose={() => setEntitlementsDialogOpen(false)}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>User Entitlements</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <Box sx={{ display: 'flex', gap: 1 }}>\n <TextField\n label=\"Email\"\n fullWidth\n value={entitlementsSearch}\n onChange={(e) => setEntitlementsSearch(e.target.value)}\n placeholder=\"Enter user email\"\n onKeyDown={(e) => e.key === 'Enter' && handleEntitlementsSearch()}\n />\n <Button\n variant=\"primary\"\n icon=\"search\"\n label=\"Lookup\"\n onClick={handleEntitlementsSearch}\n disabled={entitlementsLoading}\n />\n </Box>\n\n {entitlementsLoading && (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>\n <CircularProgress />\n </Box>\n )}\n\n {entitlementsError && (\n <Alert severity=\"error\">{entitlementsError}</Alert>\n )}\n\n {entitlementsData && (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 }}>\n <Box>\n <Text variant=\"h6\" content={entitlementsData.identifier} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={`Source: ${entitlementsData.source}`} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n <Button\n variant=\"outlined\"\n icon=\"refresh\"\n label={entitlementsRefreshing ? 'Refreshing...' : 'Refresh'}\n onClick={handleEntitlementsRefresh}\n disabled={entitlementsRefreshing}\n buttonSize=\"small\"\n />\n </Box>\n\n {/* Grant Entitlement Section (only if not readonly) */}\n {!features.entitlementsReadonly && grantableEntitlements.length > 0 && (\n <Box sx={{ display: 'flex', gap: 1, mb: 2, p: 2, bgcolor: 'var(--theme-background)', borderRadius: 1 }}>\n <Autocomplete\n size=\"small\"\n options={grantableEntitlements}\n getOptionLabel={(option) => option.name}\n value={grantableEntitlements.find((e) => e.name === selectedEntitlement) || null}\n onChange={(_, newValue) => setSelectedEntitlement(newValue?.name || '')}\n renderInput={(params) => (\n <TextField {...params} label=\"Grant Entitlement\" placeholder=\"Select entitlement\" />\n )}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n icon=\"add\"\n label=\"Grant\"\n onClick={handleGrantEntitlement}\n disabled={!selectedEntitlement || grantingEntitlement}\n buttonSize=\"small\"\n />\n </Box>\n )}\n\n <Text variant=\"subtitle2\" content=\"Current Entitlements\" customColor=\"var(--theme-text-secondary)\" style={{ marginBottom: '8px' }} />\n {entitlementsData.entitlements.length === 0 ? (\n <Text variant=\"body2\" content=\"No entitlements found\" customColor=\"var(--theme-text-secondary)\" />\n ) : (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n {entitlementsData.entitlements.map((ent, idx) => (\n <Chip\n key={idx}\n icon={<CheckCircleIcon sx={{ fontSize: 16 }} />}\n label={ent}\n onDelete={!features.entitlementsReadonly ? () => handleRevokeEntitlement(ent) : undefined}\n deleteIcon={<DeleteIcon sx={{ fontSize: 16 }} />}\n sx={{\n bgcolor: 'var(--theme-success)20',\n color: 'var(--theme-success)',\n '& .MuiChip-deleteIcon': {\n color: 'var(--theme-error)',\n '&:hover': {\n color: 'var(--theme-error)',\n },\n },\n }}\n />\n ))}\n </Box>\n )}\n\n <Box sx={{ mt: 2, pt: 2, borderTop: 1, borderColor: 'var(--theme-border)' }}>\n <Text variant=\"caption\" content={`Data from: ${entitlementsData.source === 'cache' ? 'Cache' : 'Source'}`} customColor=\"var(--theme-text-secondary)\" />\n {entitlementsData.cachedAt && (\n <Text variant=\"caption\" content={` | Cached: ${formatDate(entitlementsData.cachedAt)}`} customColor=\"var(--theme-text-secondary)\" />\n )}\n {features.entitlementsReadonly && (\n <Text variant=\"caption\" content=\" | Read-only mode (modifications disabled)\" customColor=\"var(--theme-warning)\" />\n )}\n </Box>\n </Box>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Close\" onClick={() => setEntitlementsDialogOpen(false)} />\n </DialogActions>\n </Dialog>\n )}\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2m-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2m3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1z\"\n}), 'Lock');","/**\n * EntitlementsPage Component\n *\n * Entitlement catalog management page. Allows viewing and managing available entitlements.\n * Write operations (create, edit, delete) are only available when source is not readonly.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n TextField,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n Alert,\n LinearProgress,\n InputAdornment,\n CircularProgress,\n Tooltip,\n IconButton,\n} from '@mui/material';\nimport { Text, Button, Dialog, DialogTitle, DialogContent, DialogActions, GridLayout } from '@qwickapps/react-framework';\nimport SearchIcon from '@mui/icons-material/Search';\nimport LocalOfferIcon from '@mui/icons-material/LocalOffer';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport LockIcon from '@mui/icons-material/Lock';\nimport {\n api,\n type EntitlementDefinition,\n type EntitlementsStatus,\n} from '../api/controlPanelApi';\n\nexport interface EntitlementsPageProps {\n /** Page title */\n title?: string;\n /** Page subtitle */\n subtitle?: string;\n /** Custom actions to render in the header */\n headerActions?: React.ReactNode;\n}\n\nexport function EntitlementsPage({\n title = 'Entitlements',\n subtitle = 'Manage available entitlements',\n headerActions,\n}: EntitlementsPageProps) {\n // Status state\n const [status, setStatus] = useState<EntitlementsStatus | null>(null);\n const [statusLoading, setStatusLoading] = useState(true);\n\n // Entitlements state\n const [entitlements, setEntitlements] = useState<EntitlementDefinition[]>([]);\n const [filteredEntitlements, setFilteredEntitlements] = useState<EntitlementDefinition[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n const [search, setSearch] = useState('');\n\n // Dialog state\n const [createDialogOpen, setCreateDialogOpen] = useState(false);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedEntitlement, setSelectedEntitlement] = useState<EntitlementDefinition | null>(null);\n const [newEntitlement, setNewEntitlement] = useState({\n name: '',\n category: '',\n description: '',\n });\n const [saving, setSaving] = useState(false);\n\n // Fetch status\n useEffect(() => {\n api.getEntitlementsStatus()\n .then(setStatus)\n .catch((err) => setError(err instanceof Error ? err.message : 'Failed to get status'))\n .finally(() => setStatusLoading(false));\n }, []);\n\n // Fetch entitlements\n const fetchEntitlements = useCallback(async () => {\n setLoading(true);\n try {\n const data = await api.getAvailableEntitlements();\n setEntitlements(data);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch entitlements');\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchEntitlements();\n }, [fetchEntitlements]);\n\n // Filter entitlements based on search\n useEffect(() => {\n if (!search.trim()) {\n setFilteredEntitlements(entitlements);\n } else {\n const lowerSearch = search.toLowerCase();\n setFilteredEntitlements(\n entitlements.filter(\n (e) =>\n e.name.toLowerCase().includes(lowerSearch) ||\n e.category?.toLowerCase().includes(lowerSearch) ||\n e.description?.toLowerCase().includes(lowerSearch)\n )\n );\n }\n }, [entitlements, search]);\n\n // Group entitlements by category\n const categories = [...new Set(entitlements.map((e) => e.category || 'Uncategorized'))];\n\n // Handlers\n const handleCreate = async () => {\n if (!newEntitlement.name.trim()) {\n setError('Name is required');\n return;\n }\n\n setSaving(true);\n try {\n // TODO: Add create entitlement API endpoint\n // For now, just show success\n setSuccess(`Entitlement \"${newEntitlement.name}\" created`);\n setCreateDialogOpen(false);\n setNewEntitlement({ name: '', category: '', description: '' });\n fetchEntitlements();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create entitlement');\n } finally {\n setSaving(false);\n }\n };\n\n const handleEdit = async () => {\n if (!selectedEntitlement) return;\n\n setSaving(true);\n try {\n // TODO: Add update entitlement API endpoint\n setSuccess(`Entitlement \"${selectedEntitlement.name}\" updated`);\n setEditDialogOpen(false);\n setSelectedEntitlement(null);\n fetchEntitlements();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to update entitlement');\n } finally {\n setSaving(false);\n }\n };\n\n const handleDelete = async () => {\n if (!selectedEntitlement) return;\n\n setSaving(true);\n try {\n // TODO: Add delete entitlement API endpoint\n setSuccess(`Entitlement \"${selectedEntitlement.name}\" deleted`);\n setDeleteDialogOpen(false);\n setSelectedEntitlement(null);\n fetchEntitlements();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete entitlement');\n } finally {\n setSaving(false);\n }\n };\n\n const openEditDialog = (entitlement: EntitlementDefinition) => {\n setSelectedEntitlement(entitlement);\n setEditDialogOpen(true);\n };\n\n const openDeleteDialog = (entitlement: EntitlementDefinition) => {\n setSelectedEntitlement(entitlement);\n setDeleteDialogOpen(true);\n };\n\n const isReadonly = status?.readonly ?? true;\n\n if (statusLoading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 8 }}>\n <CircularProgress />\n </Box>\n );\n }\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 3 }}>\n <Box>\n <Text variant=\"h4\" content={title} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={subtitle} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n <Box sx={{ display: 'flex', gap: 1 }}>\n {headerActions}\n {!isReadonly && (\n <Button\n variant=\"primary\"\n icon=\"add\"\n label=\"Add Entitlement\"\n onClick={() => setCreateDialogOpen(true)}\n />\n )}\n </Box>\n </Box>\n\n {loading && <LinearProgress sx={{ mb: 2 }} />}\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)} sx={{ mb: 2 }}>\n {error}\n </Alert>\n )}\n\n {success && (\n <Alert severity=\"success\" onClose={() => setSuccess(null)} sx={{ mb: 2 }}>\n {success}\n </Alert>\n )}\n\n {/* Status Cards */}\n <GridLayout columns={3} spacing=\"medium\" sx={{ mb: 3 }} equalHeight>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <LocalOfferIcon sx={{ fontSize: 40, color: 'var(--theme-primary)' }} />\n <Box>\n <Text variant=\"h4\" content={entitlements.length.toString()} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content=\"Total Entitlements\" customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Box\n sx={{\n width: 40,\n height: 40,\n borderRadius: 1,\n bgcolor: 'var(--theme-primary)20',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text variant=\"h6\" content={categories.length.toString()} customColor=\"var(--theme-primary)\" />\n </Box>\n <Box>\n <Text variant=\"body1\" fontWeight=\"500\" content=\"Categories\" customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={categories.slice(0, 3).join(', ')} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {isReadonly ? (\n <LockIcon sx={{ fontSize: 40, color: 'var(--theme-warning)' }} />\n ) : (\n <EditIcon sx={{ fontSize: 40, color: 'var(--theme-success)' }} />\n )}\n <Box>\n <Text\n variant=\"body1\"\n fontWeight=\"500\"\n content={isReadonly ? 'Read-only' : 'Editable'}\n customColor={isReadonly ? 'var(--theme-warning)' : 'var(--theme-success)'}\n />\n <Text variant=\"body2\" content={`Source: ${status?.sources[0]?.name || 'Unknown'}`} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n </GridLayout>\n\n {/* Main Content */}\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ p: 0 }}>\n {/* Search Bar */}\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'var(--theme-border)' }}>\n <TextField\n size=\"small\"\n placeholder=\"Search entitlements...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'var(--theme-text-secondary)' }} />\n </InputAdornment>\n ),\n }}\n sx={{ minWidth: 300 }}\n />\n </Box>\n\n {/* Entitlements Table */}\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Name</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Category</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Description</TableCell>\n {!isReadonly && (\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"right\">Actions</TableCell>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredEntitlements.map((entitlement) => (\n <TableRow key={entitlement.id} hover>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <LocalOfferIcon sx={{ fontSize: 18, color: 'var(--theme-primary)' }} />\n <Text variant=\"body1\" content={entitlement.name} fontWeight=\"500\" />\n </Box>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n {entitlement.category ? (\n <Chip\n size=\"small\"\n label={entitlement.category}\n sx={{\n bgcolor: 'var(--theme-primary)20',\n color: 'var(--theme-primary)',\n }}\n />\n ) : (\n <Text variant=\"body2\" content=\"--\" customColor=\"var(--theme-text-secondary)\" />\n )}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', maxWidth: 300 }}>\n {entitlement.description || '--'}\n </TableCell>\n {!isReadonly && (\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"right\">\n <Tooltip title=\"Edit\">\n <IconButton size=\"small\" onClick={() => openEditDialog(entitlement)}>\n <EditIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Delete\">\n <IconButton size=\"small\" onClick={() => openDeleteDialog(entitlement)} sx={{ color: 'var(--theme-error)' }}>\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </TableCell>\n )}\n </TableRow>\n ))}\n {filteredEntitlements.length === 0 && !loading && (\n <TableRow>\n <TableCell colSpan={isReadonly ? 3 : 4} align=\"center\" sx={{ py: 4, color: 'var(--theme-text-secondary)' }}>\n {search ? 'No entitlements match your search' : 'No entitlements defined'}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n </CardContent>\n </Card>\n\n {/* Source Info */}\n {status && status.sources.length > 0 && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mt: 3 }}>\n <CardContent>\n <Text variant=\"subtitle2\" content=\"Entitlement Sources\" customColor=\"var(--theme-text-secondary)\" style={{ marginBottom: '12px' }} />\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n {status.sources.map((source, idx) => (\n <Box key={idx} sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Chip\n size=\"small\"\n label={source.primary ? 'Primary' : 'Additional'}\n sx={{\n bgcolor: source.primary ? 'var(--theme-primary)20' : 'var(--theme-text-secondary)20',\n color: source.primary ? 'var(--theme-primary)' : 'var(--theme-text-secondary)',\n }}\n />\n <Text variant=\"body1\" content={source.name} fontWeight=\"500\" customColor=\"var(--theme-text-primary)\" />\n {source.description && (\n <Text variant=\"body2\" content={`- ${source.description}`} customColor=\"var(--theme-text-secondary)\" />\n )}\n {source.readonly && (\n <Chip\n size=\"small\"\n icon={<LockIcon sx={{ fontSize: 14 }} />}\n label=\"Read-only\"\n sx={{\n bgcolor: 'var(--theme-warning)20',\n color: 'var(--theme-warning)',\n }}\n />\n )}\n </Box>\n ))}\n </Box>\n\n {status.cacheEnabled && (\n <Box sx={{ mt: 2, pt: 2, borderTop: 1, borderColor: 'var(--theme-border)' }}>\n <Text variant=\"caption\" content={`Caching: Enabled (TTL: ${status.cacheTtl}s)`} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Create Dialog */}\n {!isReadonly && (\n <Dialog\n open={createDialogOpen}\n onClose={() => setCreateDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Add Entitlement</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <TextField\n label=\"Name\"\n fullWidth\n value={newEntitlement.name}\n onChange={(e) => setNewEntitlement({ ...newEntitlement, name: e.target.value })}\n placeholder=\"e.g., premium, pro, feature:analytics\"\n required\n />\n <TextField\n label=\"Category (Optional)\"\n fullWidth\n value={newEntitlement.category}\n onChange={(e) => setNewEntitlement({ ...newEntitlement, category: e.target.value })}\n placeholder=\"e.g., subscription, feature, access\"\n />\n <TextField\n label=\"Description (Optional)\"\n fullWidth\n multiline\n rows={2}\n value={newEntitlement.description}\n onChange={(e) => setNewEntitlement({ ...newEntitlement, description: e.target.value })}\n placeholder=\"Describe what this entitlement grants access to\"\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Cancel\" onClick={() => setCreateDialogOpen(false)} />\n <Button\n variant=\"primary\"\n label=\"Create\"\n onClick={handleCreate}\n disabled={!newEntitlement.name.trim() || saving}\n />\n </DialogActions>\n </Dialog>\n )}\n\n {/* Edit Dialog */}\n {!isReadonly && selectedEntitlement && (\n <Dialog\n open={editDialogOpen}\n onClose={() => setEditDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Edit Entitlement</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <TextField\n label=\"Name\"\n fullWidth\n value={selectedEntitlement.name}\n disabled\n helperText=\"Name cannot be changed\"\n />\n <TextField\n label=\"Category\"\n fullWidth\n value={selectedEntitlement.category || ''}\n onChange={(e) => setSelectedEntitlement({ ...selectedEntitlement, category: e.target.value })}\n />\n <TextField\n label=\"Description\"\n fullWidth\n multiline\n rows={2}\n value={selectedEntitlement.description || ''}\n onChange={(e) => setSelectedEntitlement({ ...selectedEntitlement, description: e.target.value })}\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Cancel\" onClick={() => setEditDialogOpen(false)} />\n <Button\n variant=\"primary\"\n label=\"Save\"\n onClick={handleEdit}\n disabled={saving}\n />\n </DialogActions>\n </Dialog>\n )}\n\n {/* Delete Confirmation Dialog */}\n {!isReadonly && selectedEntitlement && (\n <Dialog\n open={deleteDialogOpen}\n onClose={() => setDeleteDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Delete Entitlement</DialogTitle>\n <DialogContent>\n <Text\n variant=\"body1\"\n content={`Are you sure you want to delete the entitlement \"${selectedEntitlement.name}\"?`}\n customColor=\"var(--theme-text-primary)\"\n />\n <Alert severity=\"warning\" sx={{ mt: 2 }}>\n This will remove the entitlement from all users who currently have it.\n </Alert>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Cancel\" onClick={() => setDeleteDialogOpen(false)} />\n <Button\n variant=\"primary\"\n color=\"error\"\n label=\"Delete\"\n onClick={handleDelete}\n disabled={saving}\n />\n </DialogActions>\n </Dialog>\n )}\n </Box>\n );\n}\n"],"names":["defaultConfig","AppConfigBuilder","defaultGenerator","componentName","createClassNameGenerator","generate","generator","ClassNameGenerator","formatMuiErrorMessage","code","args","url","arg","capitalize","string","_formatErrorMessage","r","f","n","o","clsx","composeClasses","slots","getUtilityClass","classes","output","slotName","slot","buffer","start","i","value","isPlainObject","item","prototype","deepClone","source","React","isValidElementType","key","deepmerge","target","options","merge","acc","responsivePropType","PropTypes","sortContainerQueries","theme","css","sorted","a","b","regex","_a","_b","isCqShorthand","breakpointKeys","getContainerQuery","shorthand","matches","containerQuery","containerName","cssContainerQueries","themeInput","toContainerQuery","mediaQuery","name","attachCq","node","result","containerQueries","values","defaultBreakpoints","defaultContainerQueries","handleBreakpoints","props","propValue","styleFromPropValue","themeBreakpoints","index","breakpoint","containerKey","mediaKey","cssKey","createEmptyBreakpointObject","breakpointsInput","breakpointStyleKey","removeUnusedBreakpoints","style","breakpointOutput","getPath","obj","path","checkVars","val","getStyleValue","themeMapping","transform","propValueFinal","userValue","prop","cssProperty","themeKey","fn","memoize","cache","properties","directions","aliases","getCssProperties","property","direction","dir","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","defaultValue","propName","themeSpacing","abs","transformed","createUnarySpacing","getValue","transformer","getStyleFromPropValue","cssProperties","resolveCssProperty","keys","margin","padding","compose","styles","handlers","borderTransform","createBorderStyle","border","borderTop","borderRight","borderBottom","borderLeft","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outline","outlineColor","borderRadius","gap","columnGap","rowGap","gridColumn","gridRow","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","paletteTransform","color","bgcolor","backgroundColor","sizingTransform","width","maxWidth","_c","breakpointsValues","_e","_d","minWidth","height","maxHeight","minHeight","boxSizing","defaultSxConfig","objectsHaveSameKeys","objects","allKeys","object","union","callIfFn","maybeFn","unstable_createStyleFunctionSx","getThemeValue","config","styleFunctionSx","sx","nested","traverse","sxInput","sxObject","emptyBreakpoints","breakpointsKeys","styleKey","x","murmur2","str","h","k","len","unitlessKeys","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","match","p1","p2","cursor","unitless","handleInterpolation","mergedProps","registered","interpolation","componentSelector","keyframes","serializedStyles","next","createStringFromObject","asString","_i","interpolated","labelPattern","serializeStyles","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","hashString","styled","tag","stylesFactory","emStyled","component","internal_mutateStyles","processor","wrapper","internal_serializeStyles","emSerializeStyles","sortBreakpointsValues","breakpointsAsArray","breakpoint1","breakpoint2","createBreakpoints","breakpoints","unit","step","other","sortedValues","up","down","between","end","endIndex","only","not","keyIndex","shape","createSpacing","spacingInput","spacing","argsInput","argument","applyStyles","selector","createTheme","paletteInput","shapeInput","muiTheme","globalStateClasses","generateUtilityClass","globalStatePrefix","globalStateClass","generateUtilityClasses","getFunctionComponentName","Component","fallback","getWrappedName","outerType","innerType","wrapperName","functionName","getDisplayName","ForwardRef","Memo","preprocessStyles","input","variants","variant","systemDefaultTheme","shouldForwardProp","shallowLayer","serialized","layerName","defaultOverridesResolver","_props","attachTheme","themeId","defaultTheme","isObjectEmpty","processStyle","resolvedStyle","subStyle","rootStyle","otherStyles","processStyleVariants","results","mergedState","variantLoop","createStyled","rootShouldForwardProp","slotShouldForwardProp","styleAttachTheme","inputOptions","mutateStyles","componentSlot","inputSkipVariantsResolver","inputSkipSx","overridesResolver","lowercaseFirstLetter","skipVariantsResolver","skipSx","shouldForwardPropOption","isStringTag","defaultStyledResolver","styledEngineStyled","generateStyledLabel","transformStyle","muiStyledResolver","expressionsInput","expressionsHead","expressionsBody","expressionsTail","styleOverrides","resolvedStyleOverrides","slotKey","themeVariants","inputStrings","placeholdersHead","placeholdersTail","outputStrings","expressions","generateDisplayName","label","_","resolveProps","defaultProps","mergeClassNameAndStyle","defaultSlotProps","slotProps","slotPropName","clamp","min","max","clampWrapper","hexToRgb","re","colors","decomposeColor","marker","type","colorSpace","colorChannel","decomposedColor","idx","private_safeColorChannel","warning","recomposeColor","hslToRgb","s","l","rgb","getLuminance","getContrastRatio","foreground","background","lumA","lumB","alpha","private_safeAlpha","darken","coefficient","private_safeDarken","lighten","private_safeLighten","emphasize","private_safeEmphasize","PropsContext","getThemeProps","params","useDefaultProps","ctx","unstable_memoTheme","styleFn","lastValue","lastTheme","createGetCssVar","prefix","appendVar","vars","field","fallbacks","assignNestedKeys","arrayKeys","temp","walkObjectDeep","callback","shouldSkipPaths","recurse","parentKeys","getCssValue","cssVarsParser","shouldSkipGeneratingVar","varsWithDefaults","cssVar","resolvedValue","prepareCssVars","parserConfig","getSelector","defaultGetSelector","disableCssColorScheme","enableContrastVars","colorSchemes","components","defaultColorScheme","otherTheme","rootVars","rootCss","rootVarsWithDefaults","themeVars","colorSchemesMap","defaultScheme","otherColorSchemes","scheme","colorScheme","cssObject","rule","schemeVars","stylesheets","insertStyleSheet","defaultSchemeVal","cssColorSheme","finalCss","createGetColorSchemeSelector","common","grey","purple","red","orange","blue","lightBlue","green","getLight","light","getDark","dark","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","mixLightOrDark","getDefaultPrimary","mode","getDefaultSecondary","getDefaultError","getDefaultInfo","getDefaultSuccess","getDefaultWarning","contrastColor","createPalette","palette","contrastThreshold","primary","secondary","error","info","success","getContrastText","contrastText","contrast","augmentColor","mainShade","lightShade","darkShade","modeHydrated","prepareTypographyVars","typography","entry","createMixins","mixins","round","caseAllCaps","defaultFontFamily","createTypography","fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem2","coef","pxToRem","size","buildVariant","fontWeight","lineHeight","letterSpacing","casing","shadowKeyUmbraOpacity","shadowKeyPenumbraOpacity","shadowAmbientShadowOpacity","createShadow","px","shadows","easing","duration","formatMs","milliseconds","getAutoHeightDuration","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","delay","isString","isNumber","animatedProp","zIndex","isSerializable","stringifyTheme","baseTheme","serializableTheme","serializeTheme","array","coefficientToPercentage","parseAddition","numbers","sum","attachColorManipulators","systemAlpha","systemLighten","systemDarken","createThemeNoVars","mixinsInput","transitionsInput","typographyInput","systemTheme","systemCreateTheme","stateClasses","child","stateClass","getOverlayAlpha","elevation","alphaValue","defaultDarkOverlays","overlay","getOpacity","getOverlays","createColorScheme","opacity","overlays","excludeVariablesFromRoot","cssVarPrefix","root","excludedVariables","assignNode","setColor","toRgb","setColorChannel","safeColorChannel","getSpacingVal","silent","systemCreateGetCssVar","attachColorScheme","restTheme","createThemeWithVars","colorSchemesInput","defaultColorSchemeInput","nativeColor","defaultShouldSkipGeneratingVar","rootSelector","firstColorScheme","getCssVar","defaultSchemeInput","builtInLight","builtInDark","customColorSchemes","setCssVarColor","tokens","colorToken","colorMix","method","mixer","safeAlpha","safeDarken","safeLighten","snackbarContentBackground","safeEmphasize","generateThemeVars","generateStyleSheets","cssVariables","initialColorSchemes","initialDefaultColorScheme","paletteOptions","THEME_ID","memoTheme","useSystemDefaultProps","getSvgIconUtilityClass","useUtilityClasses","ownerState","SvgIconRoot","_f","_h","_g","_j","_l","_k","_n","_m","SvgIcon","inProps","ref","children","className","htmlColor","inheritViewBox","titleAccess","viewBox","hasSvgAsChild","more","_jsxs","_jsx","createSvgIcon","displayName","CheckCircleIcon","ErrorIcon","WarningIcon","ControlPanelApi","baseUrl","__publicField","response","users","bans","entitlements","entitlementsReadonly","id","email","reason","expiresAt","expiresDate","now","entitlement","request","updates","clientId","api","DashboardWidgetContext","createContext","DashboardWidgetProvider","initialWidgets","widgets","setWidgets","useState","w","registerWidget","useCallback","widget","prev","unregisterWidget","toggleWidget","visible","getVisibleWidgets","jsx","useDashboardWidgets","context","useContext","useRegisterWidget","DashboardWidgetRenderer","Fragment","jsxs","Box","Typography","WidgetComponentRegistryContext","WidgetComponentRegistryProvider","initialComponents","setComponents","map","comp","registerComponent","registerComponents","comps","getComponent","hasComponent","getRegisteredNames","contextValue","useMemo","useWidgetComponentRegistry","PluginWidgetRenderer","defaultOnly","additionalWidgetIds","loading","setLoading","setError","useEffect","data","err","CircularProgress","Alert","visibleWidgets","getStatusIcon","status","getStatusColor","getGridColumns","count","ServiceHealthWidget","health","setHealth","fetchHealth","interval","Card","CardContent","Text","healthChecks","columns","GridLayout","check","Chip","IntegrationStatusWidget","setConfig","configuredCount","totalCount","integration","BlockIcon","adapterLabels","AuthStatusWidget","setStatus","getStateIcon","getStateColor","WifiIcon","WifiOffIcon","DevicesIcon","PersonIcon","SendIcon","StatCard","icon","subValue","formatNumber","num","formatDuration","ms","NotificationsStatsWidget","stats","setStats","fetchStats","LinearProgress","isHealthy","healthColor","getBuiltInWidgetComponents","DashboardPage","navigate","useNavigate","setInfo","fetchData","healthData","infoData","healthyCount","c","CardActionArea","RefreshIcon","SearchIcon","PlayArrowIcon","PauseIcon","ArrowUpwardIcon","ArrowDownwardIcon","InfoIcon","BugReportIcon","getLevelColor","level","LogsPage","logs","setLogs","sources","setSources","selectedSource","setSelectedSource","selectedLevel","setSelectedLevel","searchQuery","setSearchQuery","page","setPage","total","setTotal","limit","autoRefresh","setAutoRefresh","sortOrder","setSortOrder","autoRefreshRef","useRef","fetchLogs","sortedLogs","dateA","dateB","fetchSources","handleSearch","handleSortOrderChange","_event","newOrder","totalPages","Grid","FormControl","InputLabel","Select","e","MenuItem","TextField","ToggleButtonGroup","ToggleButton","Tooltip","IconButton","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","log","Pagination","ContentCopyIcon","MemoryIcon","ComputerIcon","StorageIcon","AccessTimeIcon","FavoriteIcon","formatBytes","bytes","sizes","formatUptime","seconds","minutes","hours","days","getHealthStatusIcon","getHealthStatusColor","formatLatency","latency","SystemPage","diagnostics","setDiagnostics","snackbar","setSnackbar","diagData","handleCopyAll","memoryUsedPercent","Snackbar","EditIcon","SaveIcon","CancelIcon","DeleteIcon","ExpandMoreIcon","ExpandLessIcon","state","defaultAuth0Config","defaultSupabaseConfig","defaultBasicConfig","defaultSupertokensConfig","AuthPage","copied","setCopied","editMode","setEditMode","saving","setSaving","testing","setTesting","testResult","setTestResult","selectedAdapter","setSelectedAdapter","auth0Config","setAuth0Config","supabaseConfig","setSupabaseConfig","basicConfig","setBasicConfig","supertokensConfig","setSupertokensConfig","authRequired","setAuthRequired","excludePaths","setExcludePaths","googleProvider","setGoogleProvider","githubProvider","setGithubProvider","appleProvider","setAppleProvider","showSocialProviders","setShowSocialProviders","deleteDialogOpen","setDeleteDialogOpen","fetchStatus","rc","st","handleCopy","handleEnterEditMode","handleCancelEdit","toPlainObject","getCurrentConfig","socialProviders","handleTestConnection","handleTestCurrentConnection","handleSave","p","handleDelete","configEntries","FormControlLabel","Switch","Collapse","Divider","Button","v","Dialog","DialogTitle","DialogContent","DialogActions","HomeIcon","NotFoundPage","DefaultFooter","version","Link","getBaseNavigationItems","ControlPanelApp","productName","logo","footerContent","dashboardWidgets","widgetComponents","navigationItems","showBaseNavigation","hideBaseNavItems","showThemeSwitcher","showPaletteSwitcher","basePath","setVersion","allWidgetComponents","apiBasePath","allNavigationItems","QwickApp","ProductLogo","Routes","Route","LocalOfferIcon","UsersPage","title","subtitle","featureOverrides","headerActions","onUserSelect","features","setFeatures","featuresLoaded","setFeaturesLoaded","activeTab","setActiveTab","setUsers","usersTotal","setUsersTotal","usersPage","setUsersPage","usersPerPage","setUsersPerPage","usersSearch","setUsersSearch","userEntitlementCounts","setUserEntitlementCounts","setBans","bansTotal","setBansTotal","setSuccess","banDialogOpen","setBanDialogOpen","newBan","setNewBan","entitlementsDialogOpen","setEntitlementsDialogOpen","entitlementsSearch","setEntitlementsSearch","entitlementsLoading","setEntitlementsLoading","entitlementsRefreshing","setEntitlementsRefreshing","entitlementsData","setEntitlementsData","entitlementsError","setEntitlementsError","availableEntitlements","setAvailableEntitlements","selectedEntitlement","setSelectedEntitlement","grantingEntitlement","setGrantingEntitlement","detected","fetchUsers","counts","user","ent","fetchBans","timeout","handleBanUser","handleUnbanUser","handleEntitlementsSearch","handleEntitlementsRefresh","handleGrantEntitlement","handleRevokeEntitlement","openEntitlementsDialog","formatDate","date","grantableEntitlements","tabs","Tabs","tab","Tab","InputAdornment","TablePagination","ban","Autocomplete","option","newValue","LockIcon","EntitlementsPage","statusLoading","setStatusLoading","setEntitlements","filteredEntitlements","setFilteredEntitlements","search","setSearch","createDialogOpen","setCreateDialogOpen","editDialogOpen","setEditDialogOpen","newEntitlement","setNewEntitlement","fetchEntitlements","lowerSearch","categories","handleCreate","handleEdit","openEditDialog","openDeleteDialog","isReadonly"],"mappings":"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AAC,QAAQF,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,89,91,92,93,94,95,101,102,103,104,105,106,107,108,110,111,112,113,114,115,117,118,119,120,121,122,124,127,129]}
1
+ {"version":3,"file":"index.js","sources":["../ui/src/config/AppConfig.ts","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/esm/merge/merge.js","../node_modules/@mui/system/esm/responsivePropType/responsivePropType.js","../node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/system/esm/breakpoints/breakpoints.js","../node_modules/@mui/system/esm/style/style.js","../node_modules/@mui/system/esm/memoize/memoize.js","../node_modules/@mui/system/esm/spacing/spacing.js","../node_modules/@mui/system/esm/compose/compose.js","../node_modules/@mui/system/esm/borders/borders.js","../node_modules/@mui/system/esm/cssGrid/cssGrid.js","../node_modules/@mui/system/esm/palette/palette.js","../node_modules/@mui/system/esm/sizing/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@mui/styled-engine/esm/index.js","../node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js","../node_modules/@mui/system/esm/preprocessStyles.js","../node_modules/@mui/system/esm/createStyled/createStyled.js","../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/system/esm/colorManipulator/colorManipulator.js","../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/system/esm/memoTheme.js","../node_modules/@mui/system/esm/cssVars/createGetCssVar.js","../node_modules/@mui/system/esm/cssVars/cssVarsParser.js","../node_modules/@mui/system/esm/cssVars/prepareCssVars.js","../node_modules/@mui/system/esm/cssVars/getColorSchemeSelector.js","../node_modules/@mui/material/esm/colors/common.js","../node_modules/@mui/material/esm/colors/grey.js","../node_modules/@mui/material/esm/colors/purple.js","../node_modules/@mui/material/esm/colors/red.js","../node_modules/@mui/material/esm/colors/orange.js","../node_modules/@mui/material/esm/colors/blue.js","../node_modules/@mui/material/esm/colors/lightBlue.js","../node_modules/@mui/material/esm/colors/green.js","../node_modules/@mui/material/esm/styles/createPalette.js","../node_modules/@mui/system/esm/cssVars/prepareTypographyVars.js","../node_modules/@mui/material/esm/styles/createMixins.js","../node_modules/@mui/material/esm/styles/createTypography.js","../node_modules/@mui/material/esm/styles/shadows.js","../node_modules/@mui/material/esm/styles/createTransitions.js","../node_modules/@mui/material/esm/styles/zIndex.js","../node_modules/@mui/material/esm/styles/stringifyTheme.js","../node_modules/@mui/material/esm/styles/createThemeNoVars.js","../node_modules/@mui/material/esm/styles/getOverlayAlpha.js","../node_modules/@mui/material/esm/styles/createColorScheme.js","../node_modules/@mui/material/esm/styles/shouldSkipGeneratingVar.js","../node_modules/@mui/material/esm/styles/excludeVariablesFromRoot.js","../node_modules/@mui/material/esm/styles/createGetSelector.js","../node_modules/@mui/material/esm/styles/createThemeWithVars.js","../node_modules/@mui/material/esm/styles/createTheme.js","../node_modules/@mui/material/esm/styles/defaultTheme.js","../node_modules/@mui/material/esm/styles/identifier.js","../node_modules/@mui/material/esm/styles/slotShouldForwardProp.js","../node_modules/@mui/material/esm/styles/rootShouldForwardProp.js","../node_modules/@mui/material/esm/styles/styled.js","../node_modules/@mui/material/esm/utils/memoTheme.js","../node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/esm/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/esm/SvgIcon/SvgIcon.js","../node_modules/@mui/material/esm/utils/createSvgIcon.js","../node_modules/@mui/icons-material/esm/CheckCircle.js","../node_modules/@mui/icons-material/esm/Error.js","../node_modules/@mui/icons-material/esm/Warning.js","../ui/src/api/controlPanelApi.ts","../ui/src/dashboard/DashboardWidgetRegistry.tsx","../ui/src/dashboard/DashboardWidgetRenderer.tsx","../ui/src/dashboard/WidgetComponentRegistry.tsx","../ui/src/dashboard/PluginWidgetRenderer.tsx","../ui/src/dashboard/widgets/ServiceHealthWidget.tsx","../ui/src/dashboard/widgets/IntegrationStatusWidget.tsx","../node_modules/@mui/icons-material/esm/Block.js","../ui/src/dashboard/widgets/AuthStatusWidget.tsx","../node_modules/@mui/icons-material/esm/Wifi.js","../node_modules/@mui/icons-material/esm/WifiOff.js","../node_modules/@mui/icons-material/esm/Devices.js","../node_modules/@mui/icons-material/esm/Person.js","../node_modules/@mui/icons-material/esm/Send.js","../ui/src/components/StatCard.tsx","../ui/src/utils/formatters.ts","../ui/src/dashboard/widgets/NotificationsStatsWidget.tsx","../ui/src/dashboard/builtInWidgets.tsx","../ui/src/pages/DashboardPage.tsx","../node_modules/@mui/icons-material/esm/Refresh.js","../node_modules/@mui/icons-material/esm/Search.js","../node_modules/@mui/icons-material/esm/PlayArrow.js","../node_modules/@mui/icons-material/esm/Pause.js","../node_modules/@mui/icons-material/esm/ArrowUpward.js","../node_modules/@mui/icons-material/esm/ArrowDownward.js","../node_modules/@mui/icons-material/esm/Info.js","../node_modules/@mui/icons-material/esm/BugReport.js","../ui/src/pages/LogsPage.tsx","../node_modules/@mui/icons-material/esm/ContentCopy.js","../node_modules/@mui/icons-material/esm/Memory.js","../node_modules/@mui/icons-material/esm/Computer.js","../node_modules/@mui/icons-material/esm/Storage.js","../node_modules/@mui/icons-material/esm/AccessTime.js","../node_modules/@mui/icons-material/esm/Favorite.js","../ui/src/pages/SystemPage.tsx","../node_modules/@mui/icons-material/esm/Edit.js","../node_modules/@mui/icons-material/esm/Save.js","../node_modules/@mui/icons-material/esm/Cancel.js","../node_modules/@mui/icons-material/esm/Delete.js","../node_modules/@mui/icons-material/esm/ExpandMore.js","../node_modules/@mui/icons-material/esm/ExpandLess.js","../ui/src/pages/AuthPage.tsx","../node_modules/@mui/icons-material/esm/Home.js","../ui/src/pages/NotFoundPage.tsx","../ui/src/components/ControlPanelApp.tsx","../node_modules/@mui/icons-material/esm/LocalOffer.js","../ui/src/pages/UsersPage.tsx","../node_modules/@mui/icons-material/esm/Lock.js","../ui/src/pages/EntitlementsPage.tsx","../ui/src/pages/AcceptInvitationPage.tsx"],"sourcesContent":["import { AppConfigBuilder } from '@qwickapps/react-framework';\n\n/**\n * Default control panel configuration\n * Consumers can override this by passing their own config\n */\nexport const defaultConfig = AppConfigBuilder.create()\n .withName('Control Panel')\n .withId('com.qwickapps.control-panel')\n .withVersion('1.0.0')\n .withDefaultTheme('dark')\n .withDefaultPalette('cosmic')\n .withThemeSwitcher(true)\n .withPaletteSwitcher(true)\n .withDisplay('standalone')\n .build();\n\nexport type ControlPanelUIConfig = ReturnType<typeof AppConfigBuilder.prototype.build>;\n","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n let generate = defaultGenerator;\n return {\n configure(generator) {\n generate = generator;\n },\n generate(componentName) {\n return generate(componentName);\n },\n reset() {\n generate = defaultGenerator;\n }\n };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","/**\n * WARNING: Don't import this directly. It's imported by the code generated by\n * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`\n * constructors to ensure the plugin works as expected. Supported patterns include:\n * throw new Error('My message');\n * throw new Error(`My message: ${foo}`);\n * throw new Error(`My message: ${foo}` + 'another string');\n * ...\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code, ...args) {\n const url = new URL(`https://mui.com/production-error/?code=${code}`);\n args.forEach(arg => url.searchParams.append('args[]', arg));\n return `Minified MUI error #${code}; visit ${url} for the full message.`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n if (typeof string !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `capitalize(string)` expects a string argument.' : _formatErrorMessage(7));\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0\n ---\n These rules are preventing the performance optimizations below.\n */\n\n/**\n * Compose classes from multiple sources.\n *\n * @example\n * ```tsx\n * const slots = {\n * root: ['root', 'primary'],\n * label: ['label'],\n * };\n *\n * const getUtilityClass = (slot) => `MuiButton-${slot}`;\n *\n * const classes = {\n * root: 'my-root-class',\n * };\n *\n * const output = composeClasses(slots, getUtilityClass, classes);\n * // {\n * // root: 'MuiButton-root MuiButton-primary my-root-class',\n * // label: 'MuiButton-label',\n * // }\n * ```\n *\n * @param slots a list of classes for each possible slot\n * @param getUtilityClass a function to resolve the class based on the slot name\n * @param classes the input classes from props\n * @returns the resolved classes for all slots\n */\nexport default function composeClasses(slots, getUtilityClass, classes = undefined) {\n const output = {};\n for (const slotName in slots) {\n const slot = slots[slotName];\n let buffer = '';\n let start = true;\n for (let i = 0; i < slot.length; i += 1) {\n const value = slot[i];\n if (value) {\n buffer += (start === true ? '' : ' ') + getUtilityClass(value);\n start = false;\n if (classes && classes[value]) {\n buffer += ' ' + classes[value];\n }\n }\n }\n output[slotName] = buffer;\n }\n return output;\n}","import * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(item);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n if (/*#__PURE__*/React.isValidElement(source) || isValidElementType(source) || !isPlainObject(source)) {\n return source;\n }\n const output = {};\n Object.keys(source).forEach(key => {\n output[key] = deepClone(source[key]);\n });\n return output;\n}\n\n/**\n * Merge objects deeply.\n * It will shallow copy React elements.\n *\n * If `options.clone` is set to `false` the source object will be merged directly into the target object.\n *\n * @example\n * ```ts\n * deepmerge({ a: { b: 1 }, d: 2 }, { a: { c: 2 }, d: 4 });\n * // => { a: { b: 1, c: 2 }, d: 4 }\n * ````\n *\n * @param target The target object.\n * @param source The source object.\n * @param options The merge options.\n * @param options.clone Set to `false` to merge the source object directly into the target object.\n * @returns The merged object.\n */\nexport default function deepmerge(target, source, options = {\n clone: true\n}) {\n const output = options.clone ? {\n ...target\n } : target;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n if (/*#__PURE__*/React.isValidElement(source[key]) || isValidElementType(source[key])) {\n output[key] = source[key];\n } else if (isPlainObject(source[key]) &&\n // Avoid prototype pollution\n Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n output[key] = deepmerge(target[key], source[key], options);\n } else if (options.clone) {\n output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n return deepmerge(acc, item, {\n clone: false // No need to clone deep, it's way faster.\n });\n}\nexport default merge;","import PropTypes from 'prop-types';\nconst responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};\nexport default responsivePropType;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/**\n * For using in `sx` prop to sort the breakpoint from low to high.\n * Note: this function does not work and will not support multiple units.\n * e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }\n * output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 even though 40rem > 300px\n */\nexport function sortContainerQueries(theme, css) {\n if (!theme.containerQueries) {\n return css;\n }\n const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => {\n const regex = /min-width:\\s*([0-9.]+)/;\n return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0);\n });\n if (!sorted.length) {\n return css;\n }\n return sorted.reduce((acc, key) => {\n const value = css[key];\n delete acc[key];\n acc[key] = value;\n return acc;\n }, {\n ...css\n });\n}\nexport function isCqShorthand(breakpointKeys, value) {\n return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\\d/));\n}\nexport function getContainerQuery(theme, shorthand) {\n const matches = shorthand.match(/^@([^/]+)?\\/?(.+)?$/);\n if (!matches) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \\`@<breakpoint | number>\\` or \\`@<breakpoint | number>/<container>\\`.\\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.' : _formatErrorMessage(18, `(${shorthand})`));\n }\n return null;\n }\n const [, containerQuery, containerName] = matches;\n const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery;\n return theme.containerQueries(containerName).up(value);\n}\nexport default function cssContainerQueries(themeInput) {\n const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container');\n function attachCq(node, name) {\n node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name);\n node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name);\n node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name);\n node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name);\n node.not = (...args) => {\n const result = toContainerQuery(themeInput.breakpoints.not(...args), name);\n if (result.includes('not all and')) {\n // `@container` does not work with `not all and`, so need to invert the logic\n return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or');\n }\n return result;\n };\n }\n const node = {};\n const containerQueries = name => {\n attachCq(node, name);\n return node;\n };\n attachCq(containerQueries);\n return {\n ...themeInput,\n containerQueries\n };\n}","import PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from \"../merge/index.js\";\nimport { isCqShorthand, getContainerQuery } from \"../cssContainerQueries/index.js\";\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: key => `@media (min-width:${values[key]}px)`\n};\nconst defaultContainerQueries = {\n containerQueries: containerName => ({\n up: key => {\n let result = typeof key === 'number' ? key : values[key] || key;\n if (typeof result === 'number') {\n result = `${result}px`;\n }\n return containerName ? `@container ${containerName} (min-width:${result})` : `@container (min-width:${result})`;\n }\n })\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc, item, index) => {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n if (typeof propValue === 'object') {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc, breakpoint) => {\n if (isCqShorthand(themeBreakpoints.keys, breakpoint)) {\n const containerKey = getContainerQuery(theme.containerQueries ? theme : defaultContainerQueries, breakpoint);\n if (containerKey) {\n acc[containerKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n }\n }\n // key is breakpoint\n else if (Object.keys(themeBreakpoints.values || values).includes(breakpoint)) {\n const mediaKey = themeBreakpoints.up(breakpoint);\n acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n } else {\n const cssKey = breakpoint;\n acc[cssKey] = propValue[cssKey];\n }\n return acc;\n }, {});\n }\n const output = styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction) {\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction = props => {\n const theme = props.theme || {};\n const base = styleFunction(props);\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n const extended = themeBreakpoints.keys.reduce((acc, key) => {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction({\n theme,\n ...props[key]\n });\n }\n return acc;\n }, null);\n return merge(base, extended);\n };\n newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? {\n ...styleFunction.propTypes,\n xs: PropTypes.object,\n sm: PropTypes.object,\n md: PropTypes.object,\n lg: PropTypes.object,\n xl: PropTypes.object\n } : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n const breakpointsInOrder = breakpointsInput.keys?.reduce((acc, key) => {\n const breakpointStyleKey = breakpointsInput.up(key);\n acc[breakpointStyleKey] = {};\n return acc;\n }, {});\n return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n return breakpointKeys.reduce((acc, key) => {\n const breakpointOutput = acc[key];\n const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n if (isBreakpointUnused) {\n delete acc[key];\n }\n return acc;\n }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n // fixed value\n if (typeof breakpointValues !== 'object') {\n return {};\n }\n const base = {};\n const breakpointsKeys = Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < breakpointValues.length) {\n base[breakpoint] = true;\n }\n });\n } else {\n breakpointsKeys.forEach(breakpoint => {\n if (breakpointValues[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues({\n values: breakpointValues,\n breakpoints: themeBreakpoints,\n base: customBase\n}) {\n const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return breakpointValues;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(breakpointValues)) {\n acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n previous = i;\n } else if (typeof breakpointValues === 'object') {\n acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n previous = breakpoint;\n } else {\n acc[breakpoint] = breakpointValues;\n }\n return acc;\n }, {});\n}\nexport default breakpoints;","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function getPath(obj, path, checkVars = true) {\n if (!path || typeof path !== 'string') {\n return null;\n }\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars) {\n const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n if (val != null) {\n return val;\n }\n }\n return path.split('.').reduce((acc, item) => {\n if (acc && acc[item] != null) {\n return acc[item];\n }\n return null;\n }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n let value;\n if (typeof themeMapping === 'function') {\n value = themeMapping(propValueFinal);\n } else if (Array.isArray(themeMapping)) {\n value = themeMapping[propValueFinal] || userValue;\n } else {\n value = getPath(themeMapping, propValueFinal) || userValue;\n }\n if (transform) {\n value = transform(value, userValue, themeMapping);\n }\n return value;\n}\nfunction style(options) {\n const {\n prop,\n cssProperty = options.prop,\n themeKey,\n transform\n } = options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n if (props[prop] == null) {\n return null;\n }\n const propValue = props[prop];\n const theme = props.theme;\n const themeMapping = getPath(theme, themeKey) || {};\n const styleFromPropValue = propValueFinal => {\n let value = getStyleValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, propValue, styleFromPropValue);\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n [prop]: responsivePropType\n } : {};\n fn.filterProps = [prop];\n return fn;\n}\nexport default style;","export default function memoize(fn) {\n const cache = {};\n return arg => {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n return cache[arg];\n };\n}","import responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport { getPath } from \"../style/index.js\";\nimport merge from \"../merge/index.js\";\nimport memoize from \"../memoize/index.js\";\nconst properties = {\n m: 'margin',\n p: 'padding'\n};\nconst directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nconst aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n const [a, b] = prop.split('');\n const property = properties[a];\n const direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n const themeSpacing = getPath(theme, themeKey, true) ?? defaultValue;\n if (typeof themeSpacing === 'number' || typeof themeSpacing === 'string') {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (typeof val !== 'number') {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${val}.`);\n }\n }\n if (typeof themeSpacing === 'string') {\n if (themeSpacing.startsWith('var(') && val === 0) {\n return 0;\n }\n if (themeSpacing.startsWith('var(') && val === 1) {\n return themeSpacing;\n }\n return `calc(${val} * ${themeSpacing})`;\n }\n return themeSpacing * val;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n const abs = Math.abs(val);\n if (process.env.NODE_ENV !== 'production') {\n if (!Number.isInteger(abs)) {\n console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n } else if (abs > themeSpacing.length - 1) {\n console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n }\n }\n const transformed = themeSpacing[abs];\n if (val >= 0) {\n return transformed;\n }\n if (typeof transformed === 'number') {\n return -transformed;\n }\n if (typeof transformed === 'string' && transformed.startsWith('var(')) {\n return `calc(-1 * ${transformed})`;\n }\n return `-${transformed}`;\n };\n }\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n return transformer(propValue);\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n return propValue => cssProperties.reduce((acc, cssProperty) => {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (!keys.includes(prop)) {\n return null;\n }\n const cssProperties = getCssProperties(prop);\n const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n const propValue = props[prop];\n return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n const transformer = createUnarySpacing(props.theme);\n return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","import merge from \"../merge/index.js\";\nfunction compose(...styles) {\n const handlers = styles.reduce((acc, style) => {\n style.filterProps.forEach(prop => {\n acc[prop] = style;\n });\n return acc;\n }, {});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n return Object.keys(props).reduce((acc, prop) => {\n if (handlers[prop]) {\n return merge(acc, handlers[prop](props));\n }\n return acc;\n }, {});\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n return fn;\n}\nexport default compose;","import responsivePropType from \"../responsivePropType/index.js\";\nimport style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function borderTransform(value) {\n if (typeof value !== 'number') {\n return value;\n }\n return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n return style({\n prop,\n themeKey: 'borders',\n transform\n });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n if (props.borderRadius !== undefined && props.borderRadius !== null) {\n const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n const styleFromPropValue = propValue => ({\n borderRadius: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n }\n return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport responsivePropType from \"../responsivePropType/index.js\";\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n if (props.gap !== undefined && props.gap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n const styleFromPropValue = propValue => ({\n gap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.gap, styleFromPropValue);\n }\n return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n if (props.columnGap !== undefined && props.columnGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n const styleFromPropValue = propValue => ({\n columnGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n }\n return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n if (props.rowGap !== undefined && props.rowGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n const styleFromPropValue = propValue => ({\n rowGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n }\n return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n prop: 'gridColumn'\n});\nexport const gridRow = style({\n prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nexport function paletteTransform(value, userValue) {\n if (userValue === 'grey') {\n return userValue;\n }\n return value;\n}\nexport const color = style({\n prop: 'color',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const bgcolor = style({\n prop: 'bgcolor',\n cssProperty: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const backgroundColor = style({\n prop: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { handleBreakpoints, values as breakpointsValues } from \"../breakpoints/index.js\";\nexport function sizingTransform(value) {\n return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n prop: 'width',\n transform: sizingTransform\n});\nexport const maxWidth = props => {\n if (props.maxWidth !== undefined && props.maxWidth !== null) {\n const styleFromPropValue = propValue => {\n const breakpoint = props.theme?.breakpoints?.values?.[propValue] || breakpointsValues[propValue];\n if (!breakpoint) {\n return {\n maxWidth: sizingTransform(propValue)\n };\n }\n if (props.theme?.breakpoints?.unit !== 'px') {\n return {\n maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n };\n }\n return {\n maxWidth: breakpoint\n };\n };\n return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n }\n return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n prop: 'minWidth',\n transform: sizingTransform\n});\nexport const height = style({\n prop: 'height',\n transform: sizingTransform\n});\nexport const maxHeight = style({\n prop: 'maxHeight',\n transform: sizingTransform\n});\nexport const minHeight = style({\n prop: 'minHeight',\n transform: sizingTransform\n});\nexport const sizeWidth = style({\n prop: 'size',\n cssProperty: 'width',\n transform: sizingTransform\n});\nexport const sizeHeight = style({\n prop: 'size',\n cssProperty: 'height',\n transform: sizingTransform\n});\nexport const boxSizing = style({\n prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from \"../spacing/index.js\";\nimport { borderRadius, borderTransform } from \"../borders/index.js\";\nimport { gap, rowGap, columnGap } from \"../cssGrid/index.js\";\nimport { paletteTransform } from \"../palette/index.js\";\nimport { maxWidth, sizingTransform } from \"../sizing/index.js\";\nconst defaultSxConfig = {\n // borders\n border: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderTop: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderRight: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderBottom: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderLeft: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderColor: {\n themeKey: 'palette'\n },\n borderTopColor: {\n themeKey: 'palette'\n },\n borderRightColor: {\n themeKey: 'palette'\n },\n borderBottomColor: {\n themeKey: 'palette'\n },\n borderLeftColor: {\n themeKey: 'palette'\n },\n outline: {\n themeKey: 'borders',\n transform: borderTransform\n },\n outlineColor: {\n themeKey: 'palette'\n },\n borderRadius: {\n themeKey: 'shape.borderRadius',\n style: borderRadius\n },\n // palette\n color: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n bgcolor: {\n themeKey: 'palette',\n cssProperty: 'backgroundColor',\n transform: paletteTransform\n },\n backgroundColor: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n // spacing\n p: {\n style: padding\n },\n pt: {\n style: padding\n },\n pr: {\n style: padding\n },\n pb: {\n style: padding\n },\n pl: {\n style: padding\n },\n px: {\n style: padding\n },\n py: {\n style: padding\n },\n padding: {\n style: padding\n },\n paddingTop: {\n style: padding\n },\n paddingRight: {\n style: padding\n },\n paddingBottom: {\n style: padding\n },\n paddingLeft: {\n style: padding\n },\n paddingX: {\n style: padding\n },\n paddingY: {\n style: padding\n },\n paddingInline: {\n style: padding\n },\n paddingInlineStart: {\n style: padding\n },\n paddingInlineEnd: {\n style: padding\n },\n paddingBlock: {\n style: padding\n },\n paddingBlockStart: {\n style: padding\n },\n paddingBlockEnd: {\n style: padding\n },\n m: {\n style: margin\n },\n mt: {\n style: margin\n },\n mr: {\n style: margin\n },\n mb: {\n style: margin\n },\n ml: {\n style: margin\n },\n mx: {\n style: margin\n },\n my: {\n style: margin\n },\n margin: {\n style: margin\n },\n marginTop: {\n style: margin\n },\n marginRight: {\n style: margin\n },\n marginBottom: {\n style: margin\n },\n marginLeft: {\n style: margin\n },\n marginX: {\n style: margin\n },\n marginY: {\n style: margin\n },\n marginInline: {\n style: margin\n },\n marginInlineStart: {\n style: margin\n },\n marginInlineEnd: {\n style: margin\n },\n marginBlock: {\n style: margin\n },\n marginBlockStart: {\n style: margin\n },\n marginBlockEnd: {\n style: margin\n },\n // display\n displayPrint: {\n cssProperty: false,\n transform: value => ({\n '@media print': {\n display: value\n }\n })\n },\n display: {},\n overflow: {},\n textOverflow: {},\n visibility: {},\n whiteSpace: {},\n // flexbox\n flexBasis: {},\n flexDirection: {},\n flexWrap: {},\n justifyContent: {},\n alignItems: {},\n alignContent: {},\n order: {},\n flex: {},\n flexGrow: {},\n flexShrink: {},\n alignSelf: {},\n justifyItems: {},\n justifySelf: {},\n // grid\n gap: {\n style: gap\n },\n rowGap: {\n style: rowGap\n },\n columnGap: {\n style: columnGap\n },\n gridColumn: {},\n gridRow: {},\n gridAutoFlow: {},\n gridAutoColumns: {},\n gridAutoRows: {},\n gridTemplateColumns: {},\n gridTemplateRows: {},\n gridTemplateAreas: {},\n gridArea: {},\n // positions\n position: {},\n zIndex: {\n themeKey: 'zIndex'\n },\n top: {},\n right: {},\n bottom: {},\n left: {},\n // shadows\n boxShadow: {\n themeKey: 'shadows'\n },\n // sizing\n width: {\n transform: sizingTransform\n },\n maxWidth: {\n style: maxWidth\n },\n minWidth: {\n transform: sizingTransform\n },\n height: {\n transform: sizingTransform\n },\n maxHeight: {\n transform: sizingTransform\n },\n minHeight: {\n transform: sizingTransform\n },\n boxSizing: {},\n // typography\n font: {\n themeKey: 'font'\n },\n fontFamily: {\n themeKey: 'typography'\n },\n fontSize: {\n themeKey: 'typography'\n },\n fontStyle: {\n themeKey: 'typography'\n },\n fontWeight: {\n themeKey: 'typography'\n },\n letterSpacing: {},\n textTransform: {},\n lineHeight: {},\n textAlign: {},\n typography: {\n cssProperty: false,\n themeKey: 'typography'\n }\n};\nexport default defaultSxConfig;","import capitalize from '@mui/utils/capitalize';\nimport merge from \"../merge/index.js\";\nimport { getPath, getStyleValue as getValue } from \"../style/index.js\";\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from \"../breakpoints/index.js\";\nimport { sortContainerQueries } from \"../cssContainerQueries/index.js\";\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nfunction objectsHaveSameKeys(...objects) {\n const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n const union = new Set(allKeys);\n return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n function getThemeValue(prop, val, theme, config) {\n const props = {\n [prop]: val,\n theme\n };\n const options = config[prop];\n if (!options) {\n return {\n [prop]: val\n };\n }\n const {\n cssProperty = prop,\n themeKey,\n transform,\n style\n } = options;\n if (val == null) {\n return null;\n }\n\n // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n if (themeKey === 'typography' && val === 'inherit') {\n return {\n [prop]: val\n };\n }\n const themeMapping = getPath(theme, themeKey) || {};\n if (style) {\n return style(props);\n }\n const styleFromPropValue = propValueFinal => {\n let value = getValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, val, styleFromPropValue);\n }\n function styleFunctionSx(props) {\n const {\n sx,\n theme = {},\n nested\n } = props || {};\n if (!sx) {\n return null; // Emotion & styled-components will neglect null\n }\n const config = theme.unstable_sxConfig ?? defaultSxConfig;\n\n /*\n * Receive `sxInput` as object or callback\n * and then recursively check keys & values to create media query object styles.\n * (the result will be used in `styled`)\n */\n function traverse(sxInput) {\n let sxObject = sxInput;\n if (typeof sxInput === 'function') {\n sxObject = sxInput(theme);\n } else if (typeof sxInput !== 'object') {\n // value\n return sxInput;\n }\n if (!sxObject) {\n return null;\n }\n const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n const breakpointsKeys = Object.keys(emptyBreakpoints);\n let css = emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey => {\n const value = callIfFn(sxObject[styleKey], theme);\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n if (config[styleKey]) {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n } else {\n const breakpointsValues = handleBreakpoints({\n theme\n }, value, x => ({\n [styleKey]: x\n }));\n if (objectsHaveSameKeys(breakpointsValues, value)) {\n css[styleKey] = styleFunctionSx({\n sx: value,\n theme,\n nested: true\n });\n } else {\n css = merge(css, breakpointsValues);\n }\n }\n } else {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n }\n }\n });\n if (!nested && theme.modularCssLayers) {\n return {\n '@layer sx': sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css))\n };\n }\n return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));\n }\n return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n }\n return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","/**\n * @mui/styled-engine v7.3.6\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n wrapper[0] = styles;\n return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return {\n ...acc,\n [obj.key]: obj.val\n };\n }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n },\n unit = 'px',\n step = 5,\n ...other\n } = breakpoints;\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n return up(key);\n }\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n return {\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit,\n ...other\n };\n}","const shape = {\n borderRadius: 4\n};\nexport default shape;","import { createUnarySpacing } from \"../spacing/index.js\";\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8,\n// Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n// Smaller components, such as icons, can align to a 4dp grid.\n// https://m2.material.io/design/layout/understanding-layout.html\ntransform = createUnarySpacing({\n spacing: spacingInput\n})) {\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n }\n const spacing = (...argsInput) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!(argsInput.length <= 4)) {\n console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n }\n }\n const args = argsInput.length === 0 ? [1] : argsInput;\n return args.map(argument => {\n const output = transform(argument);\n return typeof output === 'number' ? `${output}px` : output;\n }).join(' ');\n };\n spacing.mui = true;\n return spacing;\n}","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n * - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n * - [CSS theme variables](https://mui.com/material-ui/customization/css-theme-variables/overview/)\n * - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * With the styled function:\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * With the sx prop:\n * ✅ [{ background: '#e5e5e5' }, theme => theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme => theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n * const Component = styled('div')(({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n * <Box sx={[\n * { background: '#e5e5e5' },\n * theme => theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]}\n * />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n * extendTheme({\n * components: {\n * MuiButton: {\n * styleOverrides: {\n * root: ({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ],\n * },\n * }\n * }\n * })\n *```\n */\nexport default function applyStyles(key, styles) {\n // @ts-expect-error this is 'any' type\n const theme = this;\n if (theme.vars) {\n if (!theme.colorSchemes?.[key] || typeof theme.getColorSchemeSelector !== 'function') {\n return {};\n }\n // If CssVarsProvider is used as a provider, returns '*:where({selector}) &'\n let selector = theme.getColorSchemeSelector(key);\n if (selector === '&') {\n return styles;\n }\n if (selector.includes('data-') || selector.includes('.')) {\n // '*' is required as a workaround for Emotion issue (https://github.com/emotion-js/emotion/issues/2836)\n selector = `*:where(${selector.replace(/\\s*&$/, '')}) &`;\n }\n return {\n [selector]: styles\n };\n }\n if (theme.palette.mode === key) {\n return styles;\n }\n return {};\n}","import deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from \"../createBreakpoints/createBreakpoints.js\";\nimport cssContainerQueries from \"../cssContainerQueries/index.js\";\nimport shape from \"./shape.js\";\nimport createSpacing from \"./createSpacing.js\";\nimport styleFunctionSx from \"../styleFunctionSx/styleFunctionSx.js\";\nimport defaultSxConfig from \"../styleFunctionSx/defaultSxConfig.js\";\nimport applyStyles from \"./applyStyles.js\";\nfunction createTheme(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput = {},\n palette: paletteInput = {},\n spacing: spacingInput,\n shape: shapeInput = {},\n ...other\n } = options;\n const breakpoints = createBreakpoints(breakpointsInput);\n const spacing = createSpacing(spacingInput);\n let muiTheme = deepmerge({\n breakpoints,\n direction: 'ltr',\n components: {},\n // Inject component definitions.\n palette: {\n mode: 'light',\n ...paletteInput\n },\n spacing,\n shape: {\n ...shape,\n ...shapeInput\n }\n }, other);\n muiTheme = cssContainerQueries(muiTheme);\n muiTheme.applyStyles = applyStyles;\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n muiTheme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...other?.unstable_sxConfig\n };\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nexport default createTheme;","import ClassNameGenerator from \"../ClassNameGenerator/index.js\";\nexport const globalStateClasses = {\n active: 'active',\n checked: 'checked',\n completed: 'completed',\n disabled: 'disabled',\n error: 'error',\n expanded: 'expanded',\n focused: 'focused',\n focusVisible: 'focusVisible',\n open: 'open',\n readOnly: 'readOnly',\n required: 'required',\n selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n const globalStateClass = globalStateClasses[slot];\n return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClass from \"../generateUtilityClass/index.js\";\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","import { ForwardRef, Memo } from 'react-is';\nfunction getFunctionComponentName(Component, fallback = '') {\n return Component.displayName || Component.name || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n const functionName = getFunctionComponentName(innerType);\n return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName\n */\nexport default function getDisplayName(Component) {\n if (Component == null) {\n return undefined;\n }\n if (typeof Component === 'string') {\n return Component;\n }\n if (typeof Component === 'function') {\n return getFunctionComponentName(Component, 'Component');\n }\n\n // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n if (typeof Component === 'object') {\n switch (Component.$$typeof) {\n case ForwardRef:\n return getWrappedName(Component, Component.render, 'ForwardRef');\n case Memo:\n return getWrappedName(Component, Component.type, 'memo');\n default:\n return undefined;\n }\n }\n return undefined;\n}","import { internal_serializeStyles } from '@mui/styled-engine';\nexport default function preprocessStyles(input) {\n const {\n variants,\n ...style\n } = input;\n const result = {\n variants,\n style: internal_serializeStyles(style),\n isProcessed: true\n };\n\n // Not supported on styled-components\n if (result.style === style) {\n return result;\n }\n if (variants) {\n variants.forEach(variant => {\n if (typeof variant.style !== 'function') {\n variant.style = internal_serializeStyles(variant.style);\n }\n });\n }\n return result;\n}","import styledEngineStyled, { internal_mutateStyles as mutateStyles, internal_serializeStyles as serializeStyles } from '@mui/styled-engine';\nimport { isPlainObject } from '@mui/utils/deepmerge';\nimport capitalize from '@mui/utils/capitalize';\nimport getDisplayName from '@mui/utils/getDisplayName';\nimport createTheme from \"../createTheme/index.js\";\nimport styleFunctionSx from \"../styleFunctionSx/index.js\";\nimport preprocessStyles from \"../preprocessStyles.js\";\n\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-labels */\n/* eslint-disable no-lone-blocks */\n\nexport const systemDefaultTheme = createTheme();\n\n// Update /system/styled/#api in case if this changes\nexport function shouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nfunction shallowLayer(serialized, layerName) {\n if (layerName && serialized && typeof serialized === 'object' && serialized.styles && !serialized.styles.startsWith('@layer') // only add the layer if it is not already there.\n ) {\n serialized.styles = `@layer ${layerName}{${String(serialized.styles)}}`;\n }\n return serialized;\n}\nfunction defaultOverridesResolver(slot) {\n if (!slot) {\n return null;\n }\n return (_props, styles) => styles[slot];\n}\nfunction attachTheme(props, themeId, defaultTheme) {\n props.theme = isObjectEmpty(props.theme) ? defaultTheme : props.theme[themeId] || props.theme;\n}\nfunction processStyle(props, style, layerName) {\n /*\n * Style types:\n * - null/undefined\n * - string\n * - CSS style object: { [cssKey]: [cssValue], variants }\n * - Processed style object: { style, variants, isProcessed: true }\n * - Array of any of the above\n */\n\n const resolvedStyle = typeof style === 'function' ? style(props) : style;\n if (Array.isArray(resolvedStyle)) {\n return resolvedStyle.flatMap(subStyle => processStyle(props, subStyle, layerName));\n }\n if (Array.isArray(resolvedStyle?.variants)) {\n let rootStyle;\n if (resolvedStyle.isProcessed) {\n rootStyle = layerName ? shallowLayer(resolvedStyle.style, layerName) : resolvedStyle.style;\n } else {\n const {\n variants,\n ...otherStyles\n } = resolvedStyle;\n rootStyle = layerName ? shallowLayer(serializeStyles(otherStyles), layerName) : otherStyles;\n }\n return processStyleVariants(props, resolvedStyle.variants, [rootStyle], layerName);\n }\n if (resolvedStyle?.isProcessed) {\n return layerName ? shallowLayer(serializeStyles(resolvedStyle.style), layerName) : resolvedStyle.style;\n }\n return layerName ? shallowLayer(serializeStyles(resolvedStyle), layerName) : resolvedStyle;\n}\nfunction processStyleVariants(props, variants, results = [], layerName = undefined) {\n let mergedState; // We might not need it, initialized lazily\n\n variantLoop: for (let i = 0; i < variants.length; i += 1) {\n const variant = variants[i];\n if (typeof variant.props === 'function') {\n mergedState ??= {\n ...props,\n ...props.ownerState,\n ownerState: props.ownerState\n };\n if (!variant.props(mergedState)) {\n continue;\n }\n } else {\n for (const key in variant.props) {\n if (props[key] !== variant.props[key] && props.ownerState?.[key] !== variant.props[key]) {\n continue variantLoop;\n }\n }\n }\n if (typeof variant.style === 'function') {\n mergedState ??= {\n ...props,\n ...props.ownerState,\n ownerState: props.ownerState\n };\n results.push(layerName ? shallowLayer(serializeStyles(variant.style(mergedState)), layerName) : variant.style(mergedState));\n } else {\n results.push(layerName ? shallowLayer(serializeStyles(variant.style), layerName) : variant.style);\n }\n }\n return results;\n}\nexport default function createStyled(input = {}) {\n const {\n themeId,\n defaultTheme = systemDefaultTheme,\n rootShouldForwardProp = shouldForwardProp,\n slotShouldForwardProp = shouldForwardProp\n } = input;\n function styleAttachTheme(props) {\n attachTheme(props, themeId, defaultTheme);\n }\n const styled = (tag, inputOptions = {}) => {\n // If `tag` is already a styled component, filter out the `sx` style function\n // to prevent unnecessary styles generated by the composite components.\n mutateStyles(tag, styles => styles.filter(style => style !== styleFunctionSx));\n const {\n name: componentName,\n slot: componentSlot,\n skipVariantsResolver: inputSkipVariantsResolver,\n skipSx: inputSkipSx,\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot)),\n ...options\n } = inputOptions;\n const layerName = componentName && componentName.startsWith('Mui') || !!componentSlot ? 'components' : 'custom';\n\n // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n const skipSx = inputSkipSx || false;\n let shouldForwardPropOption = shouldForwardProp;\n\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n if (componentSlot === 'Root' || componentSlot === 'root') {\n shouldForwardPropOption = rootShouldForwardProp;\n } else if (componentSlot) {\n // any other slot specified\n shouldForwardPropOption = slotShouldForwardProp;\n } else if (isStringTag(tag)) {\n // for string (html) tag, preserve the behavior in emotion & styled-components.\n shouldForwardPropOption = undefined;\n }\n const defaultStyledResolver = styledEngineStyled(tag, {\n shouldForwardProp: shouldForwardPropOption,\n label: generateStyledLabel(componentName, componentSlot),\n ...options\n });\n const transformStyle = style => {\n // - On the server Emotion doesn't use React.forwardRef for creating components, so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n // - `style` could be a styled component from a babel plugin for component selectors, This condition\n // makes sure that we do not interpolate them.\n if (style.__emotion_real === style) {\n return style;\n }\n if (typeof style === 'function') {\n return function styleFunctionProcessor(props) {\n return processStyle(props, style, props.theme.modularCssLayers ? layerName : undefined);\n };\n }\n if (isPlainObject(style)) {\n const serialized = preprocessStyles(style);\n return function styleObjectProcessor(props) {\n if (!serialized.variants) {\n return props.theme.modularCssLayers ? shallowLayer(serialized.style, layerName) : serialized.style;\n }\n return processStyle(props, serialized, props.theme.modularCssLayers ? layerName : undefined);\n };\n }\n return style;\n };\n const muiStyledResolver = (...expressionsInput) => {\n const expressionsHead = [];\n const expressionsBody = expressionsInput.map(transformStyle);\n const expressionsTail = [];\n\n // Preprocess `props` to set the scoped theme value.\n // This must run before any other expression.\n expressionsHead.push(styleAttachTheme);\n if (componentName && overridesResolver) {\n expressionsTail.push(function styleThemeOverrides(props) {\n const theme = props.theme;\n const styleOverrides = theme.components?.[componentName]?.styleOverrides;\n if (!styleOverrides) {\n return null;\n }\n const resolvedStyleOverrides = {};\n\n // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n // eslint-disable-next-line guard-for-in\n for (const slotKey in styleOverrides) {\n resolvedStyleOverrides[slotKey] = processStyle(props, styleOverrides[slotKey], props.theme.modularCssLayers ? 'theme' : undefined);\n }\n return overridesResolver(props, resolvedStyleOverrides);\n });\n }\n if (componentName && !skipVariantsResolver) {\n expressionsTail.push(function styleThemeVariants(props) {\n const theme = props.theme;\n const themeVariants = theme?.components?.[componentName]?.variants;\n if (!themeVariants) {\n return null;\n }\n return processStyleVariants(props, themeVariants, [], props.theme.modularCssLayers ? 'theme' : undefined);\n });\n }\n if (!skipSx) {\n expressionsTail.push(styleFunctionSx);\n }\n\n // This function can be called as a tagged template, so the first argument would contain\n // CSS `string[]` values.\n if (Array.isArray(expressionsBody[0])) {\n const inputStrings = expressionsBody.shift();\n\n // We need to add placeholders in the tagged template for the custom functions we have\n // possibly added (attachTheme, overrides, variants, and sx).\n const placeholdersHead = new Array(expressionsHead.length).fill('');\n const placeholdersTail = new Array(expressionsTail.length).fill('');\n let outputStrings;\n // prettier-ignore\n {\n outputStrings = [...placeholdersHead, ...inputStrings, ...placeholdersTail];\n outputStrings.raw = [...placeholdersHead, ...inputStrings.raw, ...placeholdersTail];\n }\n\n // The only case where we put something before `attachTheme`\n expressionsHead.unshift(outputStrings);\n }\n const expressions = [...expressionsHead, ...expressionsBody, ...expressionsTail];\n const Component = defaultStyledResolver(...expressions);\n if (tag.muiName) {\n Component.muiName = tag.muiName;\n }\n if (process.env.NODE_ENV !== 'production') {\n Component.displayName = generateDisplayName(componentName, componentSlot, tag);\n }\n return Component;\n };\n if (defaultStyledResolver.withConfig) {\n muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n }\n return muiStyledResolver;\n };\n return styled;\n}\nfunction generateDisplayName(componentName, componentSlot, tag) {\n if (componentName) {\n return `${componentName}${capitalize(componentSlot || '')}`;\n }\n return `Styled(${getDisplayName(tag)})`;\n}\nfunction generateStyledLabel(componentName, componentSlot) {\n let label;\n if (process.env.NODE_ENV !== 'production') {\n if (componentName) {\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n }\n }\n return label;\n}\nfunction isObjectEmpty(object) {\n // eslint-disable-next-line\n for (const _ in object) {\n return false;\n }\n return true;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n return typeof tag === 'string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96;\n}\nfunction lowercaseFirstLetter(string) {\n if (!string) {\n return string;\n }\n return string.charAt(0).toLowerCase() + string.slice(1);\n}","import clsx from 'clsx';\n\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param defaultProps\n * @param props\n * @param mergeClassNameAndStyle If `true`, merges `className` and `style` props instead of overriding them.\n * When `false` (default), props override defaultProps. When `true`, `className` values are concatenated\n * and `style` objects are merged with props taking precedence.\n * @returns resolved props\n */\nexport default function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) {\n const output = {\n ...props\n };\n for (const key in defaultProps) {\n if (Object.prototype.hasOwnProperty.call(defaultProps, key)) {\n const propName = key;\n if (propName === 'components' || propName === 'slots') {\n output[propName] = {\n ...defaultProps[propName],\n ...output[propName]\n };\n } else if (propName === 'componentsProps' || propName === 'slotProps') {\n const defaultSlotProps = defaultProps[propName];\n const slotProps = props[propName];\n if (!slotProps) {\n output[propName] = defaultSlotProps || {};\n } else if (!defaultSlotProps) {\n output[propName] = slotProps;\n } else {\n output[propName] = {\n ...slotProps\n };\n for (const slotKey in defaultSlotProps) {\n if (Object.prototype.hasOwnProperty.call(defaultSlotProps, slotKey)) {\n const slotPropName = slotKey;\n output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName], mergeClassNameAndStyle);\n }\n }\n }\n } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {\n output.className = clsx(defaultProps?.className, props?.className);\n } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {\n output.style = {\n ...defaultProps?.style,\n ...props?.style\n };\n } else if (output[propName] === undefined) {\n output[propName] = defaultProps[propName];\n }\n }\n }\n return output;\n}","function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n return Math.max(min, Math.min(val, max));\n}\nexport default clamp;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/* eslint-disable @typescript-eslint/naming-convention */\nimport clamp from '@mui/utils/clamp';\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n if (process.env.NODE_ENV !== 'production') {\n if (value < min || value > max) {\n console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n }\n }\n return clamp(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n color = color.slice(1);\n const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n let colors = color.match(re);\n if (colors && colors[0].length === 1) {\n colors = colors.map(n => n + n);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (color.length !== color.trim().length) {\n console.error(`MUI: The color: \"${color}\" is invalid. Make sure the color input doesn't contain leading/trailing space.`);\n }\n }\n return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n const marker = color.indexOf('(');\n const type = color.substring(0, marker);\n if (!['rgb', 'rgba', 'hsl', 'hsla', 'color'].includes(type)) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\\n` + 'The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().' : _formatErrorMessage(9, color));\n }\n let values = color.substring(marker + 1, color.length - 1);\n let colorSpace;\n if (type === 'color') {\n values = values.split(' ');\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === '/') {\n values[3] = values[3].slice(1);\n }\n if (!['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].includes(colorSpace)) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\\n` + 'The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.' : _formatErrorMessage(10, colorSpace));\n }\n } else {\n values = values.split(',');\n }\n values = values.map(value => parseFloat(value));\n return {\n type,\n values,\n colorSpace\n };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n const decomposedColor = decomposeColor(color);\n return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.includes('hsl') && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n try {\n return colorChannel(color);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n const {\n type,\n colorSpace\n } = color;\n let {\n values\n } = color;\n if (type.includes('rgb')) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n } else if (type.includes('hsl')) {\n values[1] = `${values[1]}%`;\n values[2] = `${values[2]}%`;\n }\n if (type.includes('color')) {\n values = `${colorSpace} ${values.join(' ')}`;\n } else {\n values = `${values.join(', ')}`;\n }\n return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n // Idempotent\n if (color.startsWith('#')) {\n return color;\n }\n const {\n values\n } = decomposeColor(color);\n return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n color = decomposeColor(color);\n const {\n values\n } = color;\n const h = values[0];\n const s = values[1] / 100;\n const l = values[2] / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n let type = 'rgb';\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n return recomposeColor({\n type,\n values: rgb\n });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n color = decomposeColor(color);\n let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(val => {\n if (color.type !== 'color') {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n });\n\n // Truncate at 3 digits\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n color = decomposeColor(color);\n value = clampWrapper(value);\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n if (color.type === 'color') {\n color.values[3] = `/${value}`;\n } else {\n color.values[3] = value;\n }\n return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n try {\n return alpha(color, value);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.includes('hsl')) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.includes('rgb') || color.type.includes('color')) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n try {\n return darken(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.includes('hsl')) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.includes('rgb')) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n } else if (color.type.includes('color')) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (1 - color.values[i]) * coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n try {\n return lighten(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n try {\n return emphasize(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nexport function blend(background, overlay, opacity, gamma = 1.0) {\n const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n const backgroundColor = decomposeColor(background);\n const overlayColor = decomposeColor(overlay);\n const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n return recomposeColor({\n type: 'rgb',\n values: rgb\n });\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveProps from '@mui/utils/resolveProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PropsContext = /*#__PURE__*/React.createContext(undefined);\nfunction DefaultPropsProvider({\n value,\n children\n}) {\n return /*#__PURE__*/_jsx(PropsContext.Provider, {\n value: value,\n children: children\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * @ignore\n */\n value: PropTypes.object\n} : void 0;\nfunction getThemeProps(params) {\n const {\n theme,\n name,\n props\n } = params;\n if (!theme || !theme.components || !theme.components[name]) {\n return props;\n }\n const config = theme.components[name];\n if (config.defaultProps) {\n // compatible with v5 signature\n return resolveProps(config.defaultProps, props, theme.components.mergeClassNameAndStyle);\n }\n if (!config.styleOverrides && !config.variants) {\n // v6 signature, no property 'defaultProps'\n return resolveProps(config, props, theme.components.mergeClassNameAndStyle);\n }\n return props;\n}\nexport function useDefaultProps({\n props,\n name\n}) {\n const ctx = React.useContext(PropsContext);\n return getThemeProps({\n props,\n name,\n theme: {\n components: ctx\n }\n });\n}\nexport default DefaultPropsProvider;","import preprocessStyles from \"./preprocessStyles.js\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n// We need to pass an argument as `{ theme }` for PigmentCSS, but we don't want to\n// allocate more objects.\nconst arg = {\n theme: undefined\n};\n\n/**\n * Memoize style function on theme.\n * Intended to be used in styled() calls that only need access to the theme.\n */\nexport default function unstable_memoTheme(styleFn) {\n let lastValue;\n let lastTheme;\n return function styleMemoized(props) {\n let value = lastValue;\n if (value === undefined || props.theme !== lastTheme) {\n arg.theme = props.theme;\n value = preprocessStyles(styleFn(arg));\n lastValue = value;\n lastTheme = props.theme;\n }\n return value;\n };\n}","/**\n * The benefit of this function is to help developers get CSS var from theme without specifying the whole variable\n * and they does not need to remember the prefix (defined once).\n */\nexport default function createGetCssVar(prefix = '') {\n function appendVar(...vars) {\n if (!vars.length) {\n return '';\n }\n const value = vars[0];\n if (typeof value === 'string' && !value.match(/(#|\\(|\\)|(-?(\\d*\\.)?\\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\\d*\\.)?\\d+)$|(\\d+ \\d+ \\d+)/)) {\n return `, var(--${prefix ? `${prefix}-` : ''}${value}${appendVar(...vars.slice(1))})`;\n }\n return `, ${value}`;\n }\n\n // AdditionalVars makes `getCssVar` less strict, so it can be use like this `getCssVar('non-mui-variable')` without type error.\n const getCssVar = (field, ...fallbacks) => {\n return `var(--${prefix ? `${prefix}-` : ''}${field}${appendVar(...fallbacks)})`;\n };\n return getCssVar;\n}","/**\n * This function create an object from keys, value and then assign to target\n *\n * @param {Object} obj : the target object to be assigned\n * @param {string[]} keys\n * @param {string | number} value\n *\n * @example\n * const source = {}\n * assignNestedKeys(source, ['palette', 'primary'], 'var(--palette-primary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)' } }\n *\n * @example\n * const source = { palette: { primary: 'var(--palette-primary)' } }\n * assignNestedKeys(source, ['palette', 'secondary'], 'var(--palette-secondary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)', secondary: 'var(--palette-secondary)' } }\n */\nexport const assignNestedKeys = (obj, keys, value, arrayKeys = []) => {\n let temp = obj;\n keys.forEach((k, index) => {\n if (index === keys.length - 1) {\n if (Array.isArray(temp)) {\n temp[Number(k)] = value;\n } else if (temp && typeof temp === 'object') {\n temp[k] = value;\n }\n } else if (temp && typeof temp === 'object') {\n if (!temp[k]) {\n temp[k] = arrayKeys.includes(k) ? [] : {};\n }\n temp = temp[k];\n }\n });\n};\n\n/**\n *\n * @param {Object} obj : source object\n * @param {Function} callback : a function that will be called when\n * - the deepest key in source object is reached\n * - the value of the deepest key is NOT `undefined` | `null`\n *\n * @example\n * walkObjectDeep({ palette: { primary: { main: '#000000' } } }, console.log)\n * // ['palette', 'primary', 'main'] '#000000'\n */\nexport const walkObjectDeep = (obj, callback, shouldSkipPaths) => {\n function recurse(object, parentKeys = [], arrayKeys = []) {\n Object.entries(object).forEach(([key, value]) => {\n if (!shouldSkipPaths || shouldSkipPaths && !shouldSkipPaths([...parentKeys, key])) {\n if (value !== undefined && value !== null) {\n if (typeof value === 'object' && Object.keys(value).length > 0) {\n recurse(value, [...parentKeys, key], Array.isArray(value) ? [...arrayKeys, key] : arrayKeys);\n } else {\n callback([...parentKeys, key], value, arrayKeys);\n }\n }\n }\n });\n }\n recurse(obj);\n};\nconst getCssValue = (keys, value) => {\n if (typeof value === 'number') {\n if (['lineHeight', 'fontWeight', 'opacity', 'zIndex'].some(prop => keys.includes(prop))) {\n // CSS property that are unitless\n return value;\n }\n const lastKey = keys[keys.length - 1];\n if (lastKey.toLowerCase().includes('opacity')) {\n // opacity values are unitless\n return value;\n }\n return `${value}px`;\n }\n return value;\n};\n\n/**\n * a function that parse theme and return { css, vars }\n *\n * @param {Object} theme\n * @param {{\n * prefix?: string,\n * shouldSkipGeneratingVar?: (objectPathKeys: Array<string>, value: string | number) => boolean\n * }} options.\n * `prefix`: The prefix of the generated CSS variables. This function does not change the value.\n *\n * @returns {{ css: Object, vars: Object }} `css` is the stylesheet, `vars` is an object to get css variable (same structure as theme).\n *\n * @example\n * const { css, vars } = parser({\n * fontSize: 12,\n * lineHeight: 1.2,\n * palette: { primary: { 500: 'var(--color)' } }\n * }, { prefix: 'foo' })\n *\n * console.log(css) // { '--foo-fontSize': '12px', '--foo-lineHeight': 1.2, '--foo-palette-primary-500': 'var(--color)' }\n * console.log(vars) // { fontSize: 'var(--foo-fontSize)', lineHeight: 'var(--foo-lineHeight)', palette: { primary: { 500: 'var(--foo-palette-primary-500)' } } }\n */\nexport default function cssVarsParser(theme, options) {\n const {\n prefix,\n shouldSkipGeneratingVar\n } = options || {};\n const css = {};\n const vars = {};\n const varsWithDefaults = {};\n walkObjectDeep(theme, (keys, value, arrayKeys) => {\n if (typeof value === 'string' || typeof value === 'number') {\n if (!shouldSkipGeneratingVar || !shouldSkipGeneratingVar(keys, value)) {\n // only create css & var if `shouldSkipGeneratingVar` return false\n const cssVar = `--${prefix ? `${prefix}-` : ''}${keys.join('-')}`;\n const resolvedValue = getCssValue(keys, value);\n Object.assign(css, {\n [cssVar]: resolvedValue\n });\n assignNestedKeys(vars, keys, `var(${cssVar})`, arrayKeys);\n assignNestedKeys(varsWithDefaults, keys, `var(${cssVar}, ${resolvedValue})`, arrayKeys);\n }\n }\n }, keys => keys[0] === 'vars' // skip 'vars/*' paths\n );\n return {\n css,\n vars,\n varsWithDefaults\n };\n}","import deepmerge from '@mui/utils/deepmerge';\nimport cssVarsParser from \"./cssVarsParser.js\";\nfunction prepareCssVars(theme, parserConfig = {}) {\n const {\n getSelector = defaultGetSelector,\n disableCssColorScheme,\n colorSchemeSelector: selector,\n enableContrastVars\n } = parserConfig;\n // @ts-ignore - ignore components do not exist\n const {\n colorSchemes = {},\n components,\n defaultColorScheme = 'light',\n ...otherTheme\n } = theme;\n const {\n vars: rootVars,\n css: rootCss,\n varsWithDefaults: rootVarsWithDefaults\n } = cssVarsParser(otherTheme, parserConfig);\n let themeVars = rootVarsWithDefaults;\n const colorSchemesMap = {};\n const {\n [defaultColorScheme]: defaultScheme,\n ...otherColorSchemes\n } = colorSchemes;\n Object.entries(otherColorSchemes || {}).forEach(([key, scheme]) => {\n const {\n vars,\n css,\n varsWithDefaults\n } = cssVarsParser(scheme, parserConfig);\n themeVars = deepmerge(themeVars, varsWithDefaults);\n colorSchemesMap[key] = {\n css,\n vars\n };\n });\n if (defaultScheme) {\n // default color scheme vars should be merged last to set as default\n const {\n css,\n vars,\n varsWithDefaults\n } = cssVarsParser(defaultScheme, parserConfig);\n themeVars = deepmerge(themeVars, varsWithDefaults);\n colorSchemesMap[defaultColorScheme] = {\n css,\n vars\n };\n }\n function defaultGetSelector(colorScheme, cssObject) {\n let rule = selector;\n if (selector === 'class') {\n rule = '.%s';\n }\n if (selector === 'data') {\n rule = '[data-%s]';\n }\n if (selector?.startsWith('data-') && !selector.includes('%s')) {\n // 'data-joy-color-scheme' -> '[data-joy-color-scheme=\"%s\"]'\n rule = `[${selector}=\"%s\"]`;\n }\n if (colorScheme) {\n if (rule === 'media') {\n if (theme.defaultColorScheme === colorScheme) {\n return ':root';\n }\n const mode = colorSchemes[colorScheme]?.palette?.mode || colorScheme;\n return {\n [`@media (prefers-color-scheme: ${mode})`]: {\n ':root': cssObject\n }\n };\n }\n if (rule) {\n if (theme.defaultColorScheme === colorScheme) {\n return `:root, ${rule.replace('%s', String(colorScheme))}`;\n }\n return rule.replace('%s', String(colorScheme));\n }\n }\n return ':root';\n }\n const generateThemeVars = () => {\n let vars = {\n ...rootVars\n };\n Object.entries(colorSchemesMap).forEach(([, {\n vars: schemeVars\n }]) => {\n vars = deepmerge(vars, schemeVars);\n });\n return vars;\n };\n const generateStyleSheets = () => {\n const stylesheets = [];\n const colorScheme = theme.defaultColorScheme || 'light';\n function insertStyleSheet(key, css) {\n if (Object.keys(css).length) {\n stylesheets.push(typeof key === 'string' ? {\n [key]: {\n ...css\n }\n } : key);\n }\n }\n insertStyleSheet(getSelector(undefined, {\n ...rootCss\n }), rootCss);\n const {\n [colorScheme]: defaultSchemeVal,\n ...other\n } = colorSchemesMap;\n if (defaultSchemeVal) {\n // default color scheme has to come before other color schemes\n const {\n css\n } = defaultSchemeVal;\n const cssColorSheme = colorSchemes[colorScheme]?.palette?.mode;\n const finalCss = !disableCssColorScheme && cssColorSheme ? {\n colorScheme: cssColorSheme,\n ...css\n } : {\n ...css\n };\n insertStyleSheet(getSelector(colorScheme, {\n ...finalCss\n }), finalCss);\n }\n Object.entries(other).forEach(([key, {\n css\n }]) => {\n const cssColorSheme = colorSchemes[key]?.palette?.mode;\n const finalCss = !disableCssColorScheme && cssColorSheme ? {\n colorScheme: cssColorSheme,\n ...css\n } : {\n ...css\n };\n insertStyleSheet(getSelector(key, {\n ...finalCss\n }), finalCss);\n });\n if (enableContrastVars) {\n stylesheets.push({\n ':root': {\n // use double underscore to indicate that these are private variables\n '--__l-threshold': '0.7',\n '--__l': 'clamp(0, (l / var(--__l-threshold) - 1) * -infinity, 1)',\n '--__a': 'clamp(0.87, (l / var(--__l-threshold) - 1) * -infinity, 1)' // 0.87 is the default alpha value for black text.\n }\n });\n }\n return stylesheets;\n };\n return {\n vars: themeVars,\n generateThemeVars,\n generateStyleSheets\n };\n}\nexport default prepareCssVars;","/* eslint-disable import/prefer-default-export */\nexport function createGetColorSchemeSelector(selector) {\n return function getColorSchemeSelector(colorScheme) {\n if (selector === 'media') {\n if (process.env.NODE_ENV !== 'production') {\n if (colorScheme !== 'light' && colorScheme !== 'dark') {\n console.error(`MUI: @media (prefers-color-scheme) supports only 'light' or 'dark', but receive '${colorScheme}'.`);\n }\n }\n return `@media (prefers-color-scheme: ${colorScheme})`;\n }\n if (selector) {\n if (selector.startsWith('data-') && !selector.includes('%s')) {\n return `[${selector}=\"${colorScheme}\"] &`;\n }\n if (selector === 'class') {\n return `.${colorScheme} &`;\n }\n if (selector === 'data') {\n return `[data-${colorScheme}] &`;\n }\n return `${selector.replace('%s', colorScheme)} &`;\n }\n return '&';\n };\n}","const common = {\n black: '#000',\n white: '#fff'\n};\nexport default common;","const grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#f5f5f5',\n A200: '#eeeeee',\n A400: '#bdbdbd',\n A700: '#616161'\n};\nexport default grey;","const purple = {\n 50: '#f3e5f5',\n 100: '#e1bee7',\n 200: '#ce93d8',\n 300: '#ba68c8',\n 400: '#ab47bc',\n 500: '#9c27b0',\n 600: '#8e24aa',\n 700: '#7b1fa2',\n 800: '#6a1b9a',\n 900: '#4a148c',\n A100: '#ea80fc',\n A200: '#e040fb',\n A400: '#d500f9',\n A700: '#aa00ff'\n};\nexport default purple;","const red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\nexport default red;","const orange = {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n A100: '#ffd180',\n A200: '#ffab40',\n A400: '#ff9100',\n A700: '#ff6d00'\n};\nexport default orange;","const blue = {\n 50: '#e3f2fd',\n 100: '#bbdefb',\n 200: '#90caf9',\n 300: '#64b5f6',\n 400: '#42a5f5',\n 500: '#2196f3',\n 600: '#1e88e5',\n 700: '#1976d2',\n 800: '#1565c0',\n 900: '#0d47a1',\n A100: '#82b1ff',\n A200: '#448aff',\n A400: '#2979ff',\n A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n 50: '#e1f5fe',\n 100: '#b3e5fc',\n 200: '#81d4fa',\n 300: '#4fc3f7',\n 400: '#29b6f6',\n 500: '#03a9f4',\n 600: '#039be5',\n 700: '#0288d1',\n 800: '#0277bd',\n 900: '#01579b',\n A100: '#80d8ff',\n A200: '#40c4ff',\n A400: '#00b0ff',\n A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n A100: '#b9f6ca',\n A200: '#69f0ae',\n A400: '#00e676',\n A700: '#00c853'\n};\nexport default green;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { darken, getContrastRatio, lighten } from '@mui/system/colorManipulator';\nimport common from \"../colors/common.js\";\nimport grey from \"../colors/grey.js\";\nimport purple from \"../colors/purple.js\";\nimport red from \"../colors/red.js\";\nimport orange from \"../colors/orange.js\";\nimport blue from \"../colors/blue.js\";\nimport lightBlue from \"../colors/lightBlue.js\";\nimport green from \"../colors/green.js\";\nfunction getLight() {\n return {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: 'rgba(0, 0, 0, 0.87)',\n // Secondary text.\n secondary: 'rgba(0, 0, 0, 0.6)',\n // Disabled text have even lower visual prominence.\n disabled: 'rgba(0, 0, 0, 0.38)'\n },\n // The color used to divide different elements.\n divider: 'rgba(0, 0, 0, 0.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: common.white,\n default: common.white\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: 'rgba(0, 0, 0, 0.54)',\n // The color of an hovered action.\n hover: 'rgba(0, 0, 0, 0.04)',\n hoverOpacity: 0.04,\n // The color of a selected action.\n selected: 'rgba(0, 0, 0, 0.08)',\n selectedOpacity: 0.08,\n // The color of a disabled action.\n disabled: 'rgba(0, 0, 0, 0.26)',\n // The background color of a disabled action.\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(0, 0, 0, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.12\n }\n };\n}\nexport const light = getLight();\nfunction getDark() {\n return {\n text: {\n primary: common.white,\n secondary: 'rgba(255, 255, 255, 0.7)',\n disabled: 'rgba(255, 255, 255, 0.5)',\n icon: 'rgba(255, 255, 255, 0.5)'\n },\n divider: 'rgba(255, 255, 255, 0.12)',\n background: {\n paper: '#121212',\n default: '#121212'\n },\n action: {\n active: common.white,\n hover: 'rgba(255, 255, 255, 0.08)',\n hoverOpacity: 0.08,\n selected: 'rgba(255, 255, 255, 0.16)',\n selectedOpacity: 0.16,\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(255, 255, 255, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.24\n }\n };\n}\nexport const dark = getDark();\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = tonalOffset.light || tonalOffset;\n const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = lighten(intent.main, tonalOffsetLight);\n } else if (direction === 'dark') {\n intent.dark = darken(intent.main, tonalOffsetDark);\n }\n }\n}\nfunction mixLightOrDark(colorSpace, intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = tonalOffset.light || tonalOffset;\n const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = `color-mix(in ${colorSpace}, ${intent.main}, #fff ${(tonalOffsetLight * 100).toFixed(0)}%)`;\n } else if (direction === 'dark') {\n intent.dark = `color-mix(in ${colorSpace}, ${intent.main}, #000 ${(tonalOffsetDark * 100).toFixed(0)}%)`;\n }\n }\n}\nfunction getDefaultPrimary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: blue[200],\n light: blue[50],\n dark: blue[400]\n };\n }\n return {\n main: blue[700],\n light: blue[400],\n dark: blue[800]\n };\n}\nfunction getDefaultSecondary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: purple[200],\n light: purple[50],\n dark: purple[400]\n };\n }\n return {\n main: purple[500],\n light: purple[300],\n dark: purple[700]\n };\n}\nfunction getDefaultError(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: red[500],\n light: red[300],\n dark: red[700]\n };\n }\n return {\n main: red[700],\n light: red[400],\n dark: red[800]\n };\n}\nfunction getDefaultInfo(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: lightBlue[400],\n light: lightBlue[300],\n dark: lightBlue[700]\n };\n }\n return {\n main: lightBlue[700],\n light: lightBlue[500],\n dark: lightBlue[900]\n };\n}\nfunction getDefaultSuccess(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: green[400],\n light: green[300],\n dark: green[700]\n };\n }\n return {\n main: green[800],\n light: green[500],\n dark: green[900]\n };\n}\nfunction getDefaultWarning(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: orange[400],\n light: orange[300],\n dark: orange[700]\n };\n }\n return {\n main: '#ed6c02',\n // closest to orange[800] that pass 3:1.\n light: orange[500],\n dark: orange[900]\n };\n}\n\n// Use the same name as the experimental CSS `contrast-color` function.\nexport function contrastColor(background) {\n return `oklch(from ${background} var(--__l) 0 h / var(--__a))`;\n}\nexport default function createPalette(palette) {\n const {\n mode = 'light',\n contrastThreshold = 3,\n tonalOffset = 0.2,\n colorSpace,\n ...other\n } = palette;\n const primary = palette.primary || getDefaultPrimary(mode);\n const secondary = palette.secondary || getDefaultSecondary(mode);\n const error = palette.error || getDefaultError(mode);\n const info = palette.info || getDefaultInfo(mode);\n const success = palette.success || getDefaultSuccess(mode);\n const warning = palette.warning || getDefaultWarning(mode);\n\n // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n function getContrastText(background) {\n if (colorSpace) {\n return contrastColor(background);\n }\n const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n if (process.env.NODE_ENV !== 'production') {\n const contrast = getContrastRatio(background, contrastText);\n if (contrast < 3) {\n console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n }\n }\n return contrastText;\n }\n const augmentColor = ({\n color,\n name,\n mainShade = 500,\n lightShade = 300,\n darkShade = 700\n }) => {\n color = {\n ...color\n };\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n if (!color.hasOwnProperty('main')) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `The color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatErrorMessage(11, name ? ` (${name})` : '', mainShade));\n }\n if (typeof color.main !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\\n` + '\\n' + 'Did you intend to use one of the following approaches?\\n' + '\\n' + 'import { green } from \"@mui/material/colors\";\\n' + '\\n' + 'const theme1 = createTheme({ palette: {\\n' + ' primary: green,\\n' + '} });\\n' + '\\n' + 'const theme2 = createTheme({ palette: {\\n' + ' primary: { main: green[500] },\\n' + '} });' : _formatErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n }\n if (colorSpace) {\n mixLightOrDark(colorSpace, color, 'light', lightShade, tonalOffset);\n mixLightOrDark(colorSpace, color, 'dark', darkShade, tonalOffset);\n } else {\n addLightOrDark(color, 'light', lightShade, tonalOffset);\n addLightOrDark(color, 'dark', darkShade, tonalOffset);\n }\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n return color;\n };\n let modeHydrated;\n if (mode === 'light') {\n modeHydrated = getLight();\n } else if (mode === 'dark') {\n modeHydrated = getDark();\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!modeHydrated) {\n console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n }\n }\n const paletteOutput = deepmerge({\n // A collection of common colors.\n common: {\n ...common\n },\n // prevent mutable object.\n // The palette mode, can be light or dark.\n mode,\n // The colors used to represent primary interface elements for a user.\n primary: augmentColor({\n color: primary,\n name: 'primary'\n }),\n // The colors used to represent secondary interface elements for a user.\n secondary: augmentColor({\n color: secondary,\n name: 'secondary',\n mainShade: 'A400',\n lightShade: 'A200',\n darkShade: 'A700'\n }),\n // The colors used to represent interface elements that the user should be made aware of.\n error: augmentColor({\n color: error,\n name: 'error'\n }),\n // The colors used to represent potentially dangerous actions or important messages.\n warning: augmentColor({\n color: warning,\n name: 'warning'\n }),\n // The colors used to present information to the user that is neutral and not necessarily important.\n info: augmentColor({\n color: info,\n name: 'info'\n }),\n // The colors used to indicate the successful completion of an action that user triggered.\n success: augmentColor({\n color: success,\n name: 'success'\n }),\n // The grey colors.\n grey,\n // Used by `getContrastText()` to maximize the contrast between\n // the background and the text.\n contrastThreshold,\n // Takes a background color and returns the text color that maximizes the contrast.\n getContrastText,\n // Generate a rich color object.\n augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset,\n // The light and dark mode object.\n ...modeHydrated\n }, other);\n return paletteOutput;\n}","export default function prepareTypographyVars(typography) {\n const vars = {};\n const entries = Object.entries(typography);\n entries.forEach(entry => {\n const [key, value] = entry;\n if (typeof value === 'object') {\n vars[key] = `${value.fontStyle ? `${value.fontStyle} ` : ''}${value.fontVariant ? `${value.fontVariant} ` : ''}${value.fontWeight ? `${value.fontWeight} ` : ''}${value.fontStretch ? `${value.fontStretch} ` : ''}${value.fontSize || ''}${value.lineHeight ? `/${value.lineHeight} ` : ''}${value.fontFamily || ''}`;\n }\n });\n return vars;\n}","export default function createMixins(breakpoints, mixins) {\n return {\n toolbar: {\n minHeight: 56,\n [breakpoints.up('xs')]: {\n '@media (orientation: landscape)': {\n minHeight: 48\n }\n },\n [breakpoints.up('sm')]: {\n minHeight: 64\n }\n },\n ...mixins\n };\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n const {\n fontFamily = defaultFontFamily,\n // The default font size of the Material Specification.\n fontSize = 14,\n // px\n fontWeightLight = 300,\n fontWeightRegular = 400,\n fontWeightMedium = 500,\n fontWeightBold = 700,\n // Tell MUI what's the font-size on the html element.\n // 16px is the default font-size used by browsers.\n htmlFontSize = 16,\n // Apply the CSS properties to all the variants.\n allVariants,\n pxToRem: pxToRem2,\n ...other\n } = typeof typography === 'function' ? typography(palette) : typography;\n if (process.env.NODE_ENV !== 'production') {\n if (typeof fontSize !== 'number') {\n console.error('MUI: `fontSize` is required to be a number.');\n }\n if (typeof htmlFontSize !== 'number') {\n console.error('MUI: `htmlFontSize` is required to be a number.');\n }\n }\n const coef = fontSize / 14;\n const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => ({\n fontFamily,\n fontWeight,\n fontSize: pxToRem(size),\n // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight,\n // The letter spacing was designed for the Roboto font-family. Using the same letter-spacing\n // across font-families can cause issues with the kerning.\n ...(fontFamily === defaultFontFamily ? {\n letterSpacing: `${round(letterSpacing / size)}em`\n } : {}),\n ...casing,\n ...allVariants\n });\n const variants = {\n h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n inherit: {\n fontFamily: 'inherit',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit'\n }\n };\n return deepmerge({\n htmlFontSize,\n pxToRem,\n fontFamily,\n fontSize,\n fontWeightLight,\n fontWeightRegular,\n fontWeightMedium,\n fontWeightBold,\n ...variants\n }, other, {\n clone: false // No need to clone deep\n });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n // This is the most common easing curve.\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n const constant = height / 36;\n\n // https://www.desmos.com/calculator/vbrp3ggqet\n return Math.min(Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10), 3000);\n}\nexport default function createTransitions(inputTransitions) {\n const mergedEasing = {\n ...easing,\n ...inputTransitions.easing\n };\n const mergedDuration = {\n ...duration,\n ...inputTransitions.duration\n };\n const create = (props = ['all'], options = {}) => {\n const {\n duration: durationOption = mergedDuration.standard,\n easing: easingOption = mergedEasing.easeInOut,\n delay = 0,\n ...other\n } = options;\n if (process.env.NODE_ENV !== 'production') {\n const isString = value => typeof value === 'string';\n const isNumber = value => !Number.isNaN(parseFloat(value));\n if (!isString(props) && !Array.isArray(props)) {\n console.error('MUI: Argument \"props\" must be a string or Array.');\n }\n if (!isNumber(durationOption) && !isString(durationOption)) {\n console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n }\n if (!isString(easingOption)) {\n console.error('MUI: Argument \"easing\" must be a string.');\n }\n if (!isNumber(delay) && !isString(delay)) {\n console.error('MUI: Argument \"delay\" must be a number or a string.');\n }\n if (typeof options !== 'object') {\n console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n }\n if (Object.keys(other).length !== 0) {\n console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n }\n }\n return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n };\n return {\n getAutoHeightDuration,\n create,\n ...inputTransitions,\n easing: mergedEasing,\n duration: mergedDuration\n };\n}","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n mobileStepper: 1000,\n fab: 1050,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\nexport default zIndex;","/* eslint-disable import/prefer-default-export */\nimport { isPlainObject } from '@mui/utils/deepmerge';\nfunction isSerializable(val) {\n return isPlainObject(val) || typeof val === 'undefined' || typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number' || Array.isArray(val);\n}\n\n/**\n * `baseTheme` usually comes from `createTheme()` or `extendTheme()`.\n *\n * This function is intended to be used with zero-runtime CSS-in-JS like Pigment CSS\n * For example, in a Next.js project:\n *\n * ```js\n * // next.config.js\n * const { extendTheme } = require('@mui/material/styles');\n *\n * const theme = extendTheme();\n * // `.toRuntimeSource` is Pigment CSS specific to create a theme that is available at runtime.\n * theme.toRuntimeSource = stringifyTheme;\n *\n * module.exports = withPigment({\n * theme,\n * });\n * ```\n */\nexport function stringifyTheme(baseTheme = {}) {\n const serializableTheme = {\n ...baseTheme\n };\n function serializeTheme(object) {\n const array = Object.entries(object);\n // eslint-disable-next-line no-plusplus\n for (let index = 0; index < array.length; index++) {\n const [key, value] = array[index];\n if (!isSerializable(value) || key.startsWith('unstable_')) {\n delete object[key];\n } else if (isPlainObject(value)) {\n object[key] = {\n ...value\n };\n serializeTheme(object[key]);\n }\n }\n }\n serializeTheme(serializableTheme);\n return `import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles';\n\nconst theme = ${JSON.stringify(serializableTheme, null, 2)};\n\ntheme.breakpoints = createBreakpoints(theme.breakpoints || {});\ntheme.transitions = createTransitions(theme.transitions || {});\n\nexport default theme;`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport systemCreateTheme from '@mui/system/createTheme';\nimport { alpha as systemAlpha, lighten as systemLighten, darken as systemDarken } from '@mui/system/colorManipulator';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport createMixins from \"./createMixins.js\";\nimport createPalette from \"./createPalette.js\";\nimport createTypography from \"./createTypography.js\";\nimport shadows from \"./shadows.js\";\nimport createTransitions from \"./createTransitions.js\";\nimport zIndex from \"./zIndex.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nfunction coefficientToPercentage(coefficient) {\n if (typeof coefficient === 'number') {\n return `${(coefficient * 100).toFixed(0)}%`;\n }\n return `calc((${coefficient}) * 100%)`;\n}\n\n// This can be removed when moved to `color-mix()` entirely.\nconst parseAddition = str => {\n if (!Number.isNaN(+str)) {\n return +str;\n }\n const numbers = str.match(/\\d*\\.?\\d+/g);\n if (!numbers) {\n return 0;\n }\n let sum = 0;\n for (let i = 0; i < numbers.length; i += 1) {\n sum += +numbers[i];\n }\n return sum;\n};\nfunction attachColorManipulators(theme) {\n Object.assign(theme, {\n alpha(color, coefficient) {\n const obj = this || theme;\n if (obj.colorSpace) {\n return `oklch(from ${color} l c h / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n }\n if (obj.vars) {\n // To preserve the behavior of the CSS theme variables\n // In the future, this could be replaced by `color-mix` (when https://caniuse.com/?search=color-mix reaches 95%).\n return `rgba(${color.replace(/var\\(--([^,\\s)]+)(?:,[^)]+)?\\)+/g, 'var(--$1Channel)')} / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n }\n return systemAlpha(color, parseAddition(coefficient));\n },\n lighten(color, coefficient) {\n const obj = this || theme;\n if (obj.colorSpace) {\n return `color-mix(in ${obj.colorSpace}, ${color}, #fff ${coefficientToPercentage(coefficient)})`;\n }\n return systemLighten(color, coefficient);\n },\n darken(color, coefficient) {\n const obj = this || theme;\n if (obj.colorSpace) {\n return `color-mix(in ${obj.colorSpace}, ${color}, #000 ${coefficientToPercentage(coefficient)})`;\n }\n return systemDarken(color, coefficient);\n }\n });\n}\nfunction createThemeNoVars(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput,\n mixins: mixinsInput = {},\n spacing: spacingInput,\n palette: paletteInput = {},\n transitions: transitionsInput = {},\n typography: typographyInput = {},\n shape: shapeInput,\n colorSpace,\n ...other\n } = options;\n if (options.vars &&\n // The error should throw only for the root theme creation because user is not allowed to use a custom node `vars`.\n // `generateThemeVars` is the closest identifier for checking that the `options` is a result of `createTheme` with CSS variables so that user can create new theme for nested ThemeProvider.\n options.generateThemeVars === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `vars` is a private field used for CSS variables support.\\n' +\n // #host-reference\n 'Please use another name or follow the [docs](https://mui.com/material-ui/customization/css-theme-variables/usage/) to enable the feature.' : _formatErrorMessage(20));\n }\n const palette = createPalette({\n ...paletteInput,\n colorSpace\n });\n const systemTheme = systemCreateTheme(options);\n let muiTheme = deepmerge(systemTheme, {\n mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n palette,\n // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n shadows: shadows.slice(),\n typography: createTypography(palette, typographyInput),\n transitions: createTransitions(transitionsInput),\n zIndex: {\n ...zIndex\n }\n });\n muiTheme = deepmerge(muiTheme, other);\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n if (process.env.NODE_ENV !== 'production') {\n // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n const traverse = (node, component) => {\n let key;\n\n // eslint-disable-next-line guard-for-in\n for (key in node) {\n const child = node[key];\n if (stateClasses.includes(key) && Object.keys(child).length > 0) {\n if (process.env.NODE_ENV !== 'production') {\n const stateClass = generateUtilityClass('', key);\n console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n root: {\n [`&.${stateClass}`]: child\n }\n }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n }\n // Remove the style to prevent global conflicts.\n node[key] = {};\n }\n }\n };\n Object.keys(muiTheme.components).forEach(component => {\n const styleOverrides = muiTheme.components[component].styleOverrides;\n if (styleOverrides && component.startsWith('Mui')) {\n traverse(styleOverrides, component);\n }\n });\n }\n muiTheme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...other?.unstable_sxConfig\n };\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n muiTheme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n attachColorManipulators(muiTheme);\n return muiTheme;\n}\nexport default createThemeNoVars;","// Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61\nexport default function getOverlayAlpha(elevation) {\n let alphaValue;\n if (elevation < 1) {\n alphaValue = 5.11916 * elevation ** 2;\n } else {\n alphaValue = 4.5 * Math.log(elevation + 1) + 2;\n }\n return Math.round(alphaValue * 10) / 1000;\n}","import createPalette from \"./createPalette.js\";\nimport getOverlayAlpha from \"./getOverlayAlpha.js\";\nconst defaultDarkOverlays = [...Array(25)].map((_, index) => {\n if (index === 0) {\n return 'none';\n }\n const overlay = getOverlayAlpha(index);\n return `linear-gradient(rgba(255 255 255 / ${overlay}), rgba(255 255 255 / ${overlay}))`;\n});\nexport function getOpacity(mode) {\n return {\n inputPlaceholder: mode === 'dark' ? 0.5 : 0.42,\n inputUnderline: mode === 'dark' ? 0.7 : 0.42,\n switchTrackDisabled: mode === 'dark' ? 0.2 : 0.12,\n switchTrack: mode === 'dark' ? 0.3 : 0.38\n };\n}\nexport function getOverlays(mode) {\n return mode === 'dark' ? defaultDarkOverlays : [];\n}\nexport default function createColorScheme(options) {\n const {\n palette: paletteInput = {\n mode: 'light'\n },\n // need to cast to avoid module augmentation test\n opacity,\n overlays,\n colorSpace,\n ...other\n } = options;\n // need to cast because `colorSpace` is considered internal at the moment.\n const palette = createPalette({\n ...paletteInput,\n colorSpace\n });\n return {\n palette,\n opacity: {\n ...getOpacity(palette.mode),\n ...opacity\n },\n overlays: overlays || getOverlays(palette.mode),\n ...other\n };\n}","export default function shouldSkipGeneratingVar(keys) {\n return !!keys[0].match(/(cssVarPrefix|colorSchemeSelector|modularCssLayers|rootSelector|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||\n // ends with sxConfig\n keys[0] === 'palette' && !!keys[1]?.match(/(mode|contrastThreshold|tonalOffset)/);\n}","/**\n * @internal These variables should not appear in the :root stylesheet when the `defaultColorScheme=\"dark\"`\n */\nconst excludeVariablesFromRoot = cssVarPrefix => [...[...Array(25)].map((_, index) => `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}overlays-${index}`), `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkBg`, `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkColor`];\nexport default excludeVariablesFromRoot;","import excludeVariablesFromRoot from \"./excludeVariablesFromRoot.js\";\nexport default theme => (colorScheme, css) => {\n const root = theme.rootSelector || ':root';\n const selector = theme.colorSchemeSelector;\n let rule = selector;\n if (selector === 'class') {\n rule = '.%s';\n }\n if (selector === 'data') {\n rule = '[data-%s]';\n }\n if (selector?.startsWith('data-') && !selector.includes('%s')) {\n // 'data-mui-color-scheme' -> '[data-mui-color-scheme=\"%s\"]'\n rule = `[${selector}=\"%s\"]`;\n }\n if (theme.defaultColorScheme === colorScheme) {\n if (colorScheme === 'dark') {\n const excludedVariables = {};\n excludeVariablesFromRoot(theme.cssVarPrefix).forEach(cssVar => {\n excludedVariables[cssVar] = css[cssVar];\n delete css[cssVar];\n });\n if (rule === 'media') {\n return {\n [root]: css,\n [`@media (prefers-color-scheme: dark)`]: {\n [root]: excludedVariables\n }\n };\n }\n if (rule) {\n return {\n [rule.replace('%s', colorScheme)]: excludedVariables,\n [`${root}, ${rule.replace('%s', colorScheme)}`]: css\n };\n }\n return {\n [root]: {\n ...css,\n ...excludedVariables\n }\n };\n }\n if (rule && rule !== 'media') {\n return `${root}, ${rule.replace('%s', String(colorScheme))}`;\n }\n } else if (colorScheme) {\n if (rule === 'media') {\n return {\n [`@media (prefers-color-scheme: ${String(colorScheme)})`]: {\n [root]: css\n }\n };\n }\n if (rule) {\n return rule.replace('%s', String(colorScheme));\n }\n }\n return root;\n};","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { unstable_createGetCssVar as systemCreateGetCssVar, createSpacing } from '@mui/system';\nimport { createUnarySpacing } from '@mui/system/spacing';\nimport { prepareCssVars, prepareTypographyVars, createGetColorSchemeSelector } from '@mui/system/cssVars';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport { private_safeColorChannel as safeColorChannel, private_safeAlpha as safeAlpha, private_safeDarken as safeDarken, private_safeLighten as safeLighten, private_safeEmphasize as safeEmphasize, hslToRgb } from '@mui/system/colorManipulator';\nimport createThemeNoVars from \"./createThemeNoVars.js\";\nimport createColorScheme, { getOpacity, getOverlays } from \"./createColorScheme.js\";\nimport defaultShouldSkipGeneratingVar from \"./shouldSkipGeneratingVar.js\";\nimport defaultGetSelector from \"./createGetSelector.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nimport { light, dark } from \"./createPalette.js\";\nfunction assignNode(obj, keys) {\n keys.forEach(k => {\n if (!obj[k]) {\n obj[k] = {};\n }\n });\n}\nfunction setColor(obj, key, defaultValue) {\n if (!obj[key] && defaultValue) {\n obj[key] = defaultValue;\n }\n}\nfunction toRgb(color) {\n if (typeof color !== 'string' || !color.startsWith('hsl')) {\n return color;\n }\n return hslToRgb(color);\n}\nfunction setColorChannel(obj, key) {\n if (!(`${key}Channel` in obj)) {\n // custom channel token is not provided, generate one.\n // if channel token can't be generated, show a warning.\n obj[`${key}Channel`] = safeColorChannel(toRgb(obj[key]), `MUI: Can't create \\`palette.${key}Channel\\` because \\`palette.${key}\\` is not one of these formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` + '\\n' + `To suppress this warning, you need to explicitly provide the \\`palette.${key}Channel\\` as a string (in rgb format, for example \"12 12 12\") or undefined if you want to remove the channel token.`);\n }\n}\nfunction getSpacingVal(spacingInput) {\n if (typeof spacingInput === 'number') {\n return `${spacingInput}px`;\n }\n if (typeof spacingInput === 'string' || typeof spacingInput === 'function' || Array.isArray(spacingInput)) {\n return spacingInput;\n }\n return '8px';\n}\nconst silent = fn => {\n try {\n return fn();\n } catch (error) {\n // ignore error\n }\n return undefined;\n};\nexport const createGetCssVar = (cssVarPrefix = 'mui') => systemCreateGetCssVar(cssVarPrefix);\nfunction attachColorScheme(colorSpace, colorSchemes, scheme, restTheme, colorScheme) {\n if (!scheme) {\n return undefined;\n }\n scheme = scheme === true ? {} : scheme;\n const mode = colorScheme === 'dark' ? 'dark' : 'light';\n if (!restTheme) {\n colorSchemes[colorScheme] = createColorScheme({\n ...scheme,\n palette: {\n mode,\n ...scheme?.palette\n },\n colorSpace\n });\n return undefined;\n }\n const {\n palette,\n ...muiTheme\n } = createThemeNoVars({\n ...restTheme,\n palette: {\n mode,\n ...scheme?.palette\n },\n colorSpace\n });\n colorSchemes[colorScheme] = {\n ...scheme,\n palette,\n opacity: {\n ...getOpacity(mode),\n ...scheme?.opacity\n },\n overlays: scheme?.overlays || getOverlays(mode)\n };\n return muiTheme;\n}\n\n/**\n * A default `createThemeWithVars` comes with a single color scheme, either `light` or `dark` based on the `defaultColorScheme`.\n * This is better suited for apps that only need a single color scheme.\n *\n * To enable built-in `light` and `dark` color schemes, either:\n * 1. provide a `colorSchemeSelector` to define how the color schemes will change.\n * 2. provide `colorSchemes.dark` will set `colorSchemeSelector: 'media'` by default.\n */\nexport default function createThemeWithVars(options = {}, ...args) {\n const {\n colorSchemes: colorSchemesInput = {\n light: true\n },\n defaultColorScheme: defaultColorSchemeInput,\n disableCssColorScheme = false,\n cssVarPrefix = 'mui',\n nativeColor = false,\n shouldSkipGeneratingVar = defaultShouldSkipGeneratingVar,\n colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,\n rootSelector = ':root',\n ...input\n } = options;\n const firstColorScheme = Object.keys(colorSchemesInput)[0];\n const defaultColorScheme = defaultColorSchemeInput || (colorSchemesInput.light && firstColorScheme !== 'light' ? 'light' : firstColorScheme);\n const getCssVar = createGetCssVar(cssVarPrefix);\n const {\n [defaultColorScheme]: defaultSchemeInput,\n light: builtInLight,\n dark: builtInDark,\n ...customColorSchemes\n } = colorSchemesInput;\n const colorSchemes = {\n ...customColorSchemes\n };\n let defaultScheme = defaultSchemeInput;\n\n // For built-in light and dark color schemes, ensure that the value is valid if they are the default color scheme.\n if (defaultColorScheme === 'dark' && !('dark' in colorSchemesInput) || defaultColorScheme === 'light' && !('light' in colorSchemesInput)) {\n defaultScheme = true;\n }\n if (!defaultScheme) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The \\`colorSchemes.${defaultColorScheme}\\` option is either missing or invalid.` : _formatErrorMessage(21, defaultColorScheme));\n }\n\n // The reason to use `oklch` is that it is the most perceptually uniform color space and widely supported.\n let colorSpace;\n if (nativeColor) {\n colorSpace = 'oklch';\n }\n\n // Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.\n const muiTheme = attachColorScheme(colorSpace, colorSchemes, defaultScheme, input, defaultColorScheme);\n if (builtInLight && !colorSchemes.light) {\n attachColorScheme(colorSpace, colorSchemes, builtInLight, undefined, 'light');\n }\n if (builtInDark && !colorSchemes.dark) {\n attachColorScheme(colorSpace, colorSchemes, builtInDark, undefined, 'dark');\n }\n let theme = {\n defaultColorScheme,\n ...muiTheme,\n cssVarPrefix,\n colorSchemeSelector: selector,\n rootSelector,\n getCssVar,\n colorSchemes,\n font: {\n ...prepareTypographyVars(muiTheme.typography),\n ...muiTheme.font\n },\n spacing: getSpacingVal(input.spacing)\n };\n Object.keys(theme.colorSchemes).forEach(key => {\n const palette = theme.colorSchemes[key].palette;\n const setCssVarColor = cssVar => {\n const tokens = cssVar.split('-');\n const color = tokens[1];\n const colorToken = tokens[2];\n return getCssVar(cssVar, palette[color][colorToken]);\n };\n\n // attach black & white channels to common node\n if (palette.mode === 'light') {\n setColor(palette.common, 'background', '#fff');\n setColor(palette.common, 'onBackground', '#000');\n }\n if (palette.mode === 'dark') {\n setColor(palette.common, 'background', '#000');\n setColor(palette.common, 'onBackground', '#fff');\n }\n function colorMix(method, color, coefficient) {\n if (colorSpace) {\n let mixer;\n if (method === safeAlpha) {\n mixer = `transparent ${((1 - coefficient) * 100).toFixed(0)}%`;\n }\n if (method === safeDarken) {\n mixer = `#000 ${(coefficient * 100).toFixed(0)}%`;\n }\n if (method === safeLighten) {\n mixer = `#fff ${(coefficient * 100).toFixed(0)}%`;\n }\n return `color-mix(in ${colorSpace}, ${color}, ${mixer})`;\n }\n return method(color, coefficient);\n }\n\n // assign component variables\n assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);\n if (palette.mode === 'light') {\n setColor(palette.Alert, 'errorColor', colorMix(safeDarken, palette.error.light, 0.6));\n setColor(palette.Alert, 'infoColor', colorMix(safeDarken, palette.info.light, 0.6));\n setColor(palette.Alert, 'successColor', colorMix(safeDarken, palette.success.light, 0.6));\n setColor(palette.Alert, 'warningColor', colorMix(safeDarken, palette.warning.light, 0.6));\n setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));\n setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));\n setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));\n setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-main'));\n setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.main)));\n setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));\n setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));\n setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));\n setColor(palette.Alert, 'errorStandardBg', colorMix(safeLighten, palette.error.light, 0.9));\n setColor(palette.Alert, 'infoStandardBg', colorMix(safeLighten, palette.info.light, 0.9));\n setColor(palette.Alert, 'successStandardBg', colorMix(safeLighten, palette.success.light, 0.9));\n setColor(palette.Alert, 'warningStandardBg', colorMix(safeLighten, palette.warning.light, 0.9));\n setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-100'));\n setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-400'));\n setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-300'));\n setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-A100'));\n setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-400'));\n setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-700'));\n setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-700'));\n setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');\n setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');\n setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');\n setColor(palette.LinearProgress, 'primaryBg', colorMix(safeLighten, palette.primary.main, 0.62));\n setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeLighten, palette.secondary.main, 0.62));\n setColor(palette.LinearProgress, 'errorBg', colorMix(safeLighten, palette.error.main, 0.62));\n setColor(palette.LinearProgress, 'infoBg', colorMix(safeLighten, palette.info.main, 0.62));\n setColor(palette.LinearProgress, 'successBg', colorMix(safeLighten, palette.success.main, 0.62));\n setColor(palette.LinearProgress, 'warningBg', colorMix(safeLighten, palette.warning.main, 0.62));\n setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, palette.text.primary, 0.11) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);\n setColor(palette.Slider, 'primaryTrack', colorMix(safeLighten, palette.primary.main, 0.62));\n setColor(palette.Slider, 'secondaryTrack', colorMix(safeLighten, palette.secondary.main, 0.62));\n setColor(palette.Slider, 'errorTrack', colorMix(safeLighten, palette.error.main, 0.62));\n setColor(palette.Slider, 'infoTrack', colorMix(safeLighten, palette.info.main, 0.62));\n setColor(palette.Slider, 'successTrack', colorMix(safeLighten, palette.success.main, 0.62));\n setColor(palette.Slider, 'warningTrack', colorMix(safeLighten, palette.warning.main, 0.62));\n const snackbarContentBackground = colorSpace ? colorMix(safeDarken, palette.background.default, 0.6825) // use `0.6825` instead of `0.8` to match the contrast ratio of JS implementation\n : safeEmphasize(palette.background.default, 0.8);\n setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? dark.text.primary : palette.getContrastText(snackbarContentBackground)));\n setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));\n setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));\n setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));\n setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));\n setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeLighten, palette.primary.main, 0.62));\n setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeLighten, palette.secondary.main, 0.62));\n setColor(palette.Switch, 'errorDisabledColor', colorMix(safeLighten, palette.error.main, 0.62));\n setColor(palette.Switch, 'infoDisabledColor', colorMix(safeLighten, palette.info.main, 0.62));\n setColor(palette.Switch, 'successDisabledColor', colorMix(safeLighten, palette.success.main, 0.62));\n setColor(palette.Switch, 'warningDisabledColor', colorMix(safeLighten, palette.warning.main, 0.62));\n setColor(palette.TableCell, 'border', colorMix(safeLighten, colorMix(safeAlpha, palette.divider, 1), 0.88));\n setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, palette.grey[700], 0.92));\n }\n if (palette.mode === 'dark') {\n setColor(palette.Alert, 'errorColor', colorMix(safeLighten, palette.error.light, 0.6));\n setColor(palette.Alert, 'infoColor', colorMix(safeLighten, palette.info.light, 0.6));\n setColor(palette.Alert, 'successColor', colorMix(safeLighten, palette.success.light, 0.6));\n setColor(palette.Alert, 'warningColor', colorMix(safeLighten, palette.warning.light, 0.6));\n setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));\n setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));\n setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));\n setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-dark'));\n setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.dark)));\n setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));\n setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));\n setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));\n setColor(palette.Alert, 'errorStandardBg', colorMix(safeDarken, palette.error.light, 0.9));\n setColor(palette.Alert, 'infoStandardBg', colorMix(safeDarken, palette.info.light, 0.9));\n setColor(palette.Alert, 'successStandardBg', colorMix(safeDarken, palette.success.light, 0.9));\n setColor(palette.Alert, 'warningStandardBg', colorMix(safeDarken, palette.warning.light, 0.9));\n setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-900'));\n setColor(palette.AppBar, 'darkBg', setCssVarColor('palette-background-paper')); // specific for dark mode\n setColor(palette.AppBar, 'darkColor', setCssVarColor('palette-text-primary')); // specific for dark mode\n setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-600'));\n setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-800'));\n setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-700'));\n setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-700'));\n setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-300'));\n setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-300'));\n setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');\n setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');\n setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');\n setColor(palette.LinearProgress, 'primaryBg', colorMix(safeDarken, palette.primary.main, 0.5));\n setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeDarken, palette.secondary.main, 0.5));\n setColor(palette.LinearProgress, 'errorBg', colorMix(safeDarken, palette.error.main, 0.5));\n setColor(palette.LinearProgress, 'infoBg', colorMix(safeDarken, palette.info.main, 0.5));\n setColor(palette.LinearProgress, 'successBg', colorMix(safeDarken, palette.success.main, 0.5));\n setColor(palette.LinearProgress, 'warningBg', colorMix(safeDarken, palette.warning.main, 0.5));\n setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, palette.text.primary, 0.13) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);\n setColor(palette.Slider, 'primaryTrack', colorMix(safeDarken, palette.primary.main, 0.5));\n setColor(palette.Slider, 'secondaryTrack', colorMix(safeDarken, palette.secondary.main, 0.5));\n setColor(palette.Slider, 'errorTrack', colorMix(safeDarken, palette.error.main, 0.5));\n setColor(palette.Slider, 'infoTrack', colorMix(safeDarken, palette.info.main, 0.5));\n setColor(palette.Slider, 'successTrack', colorMix(safeDarken, palette.success.main, 0.5));\n setColor(palette.Slider, 'warningTrack', colorMix(safeDarken, palette.warning.main, 0.5));\n const snackbarContentBackground = colorSpace ? colorMix(safeLighten, palette.background.default, 0.985) // use `0.985` instead of `0.98` to match the contrast ratio of JS implementation\n : safeEmphasize(palette.background.default, 0.98);\n setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? light.text.primary : palette.getContrastText(snackbarContentBackground)));\n setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));\n setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));\n setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));\n setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));\n setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeDarken, palette.primary.main, 0.55));\n setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeDarken, palette.secondary.main, 0.55));\n setColor(palette.Switch, 'errorDisabledColor', colorMix(safeDarken, palette.error.main, 0.55));\n setColor(palette.Switch, 'infoDisabledColor', colorMix(safeDarken, palette.info.main, 0.55));\n setColor(palette.Switch, 'successDisabledColor', colorMix(safeDarken, palette.success.main, 0.55));\n setColor(palette.Switch, 'warningDisabledColor', colorMix(safeDarken, palette.warning.main, 0.55));\n setColor(palette.TableCell, 'border', colorMix(safeDarken, colorMix(safeAlpha, palette.divider, 1), 0.68));\n setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, palette.grey[700], 0.92));\n }\n\n // MUI X - DataGrid needs this token.\n setColorChannel(palette.background, 'default');\n\n // added for consistency with the `background.default` token\n setColorChannel(palette.background, 'paper');\n setColorChannel(palette.common, 'background');\n setColorChannel(palette.common, 'onBackground');\n setColorChannel(palette, 'divider');\n Object.keys(palette).forEach(color => {\n const colors = palette[color];\n\n // The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.\n\n if (color !== 'tonalOffset' && colors && typeof colors === 'object') {\n // Silent the error for custom palettes.\n if (colors.main) {\n setColor(palette[color], 'mainChannel', safeColorChannel(toRgb(colors.main)));\n }\n if (colors.light) {\n setColor(palette[color], 'lightChannel', safeColorChannel(toRgb(colors.light)));\n }\n if (colors.dark) {\n setColor(palette[color], 'darkChannel', safeColorChannel(toRgb(colors.dark)));\n }\n if (colors.contrastText) {\n setColor(palette[color], 'contrastTextChannel', safeColorChannel(toRgb(colors.contrastText)));\n }\n if (color === 'text') {\n // Text colors: text.primary, text.secondary\n setColorChannel(palette[color], 'primary');\n setColorChannel(palette[color], 'secondary');\n }\n if (color === 'action') {\n // Action colors: action.active, action.selected\n if (colors.active) {\n setColorChannel(palette[color], 'active');\n }\n if (colors.selected) {\n setColorChannel(palette[color], 'selected');\n }\n }\n }\n });\n });\n theme = args.reduce((acc, argument) => deepmerge(acc, argument), theme);\n const parserConfig = {\n prefix: cssVarPrefix,\n disableCssColorScheme,\n shouldSkipGeneratingVar,\n getSelector: defaultGetSelector(theme),\n enableContrastVars: nativeColor\n };\n const {\n vars,\n generateThemeVars,\n generateStyleSheets\n } = prepareCssVars(theme, parserConfig);\n theme.vars = vars;\n Object.entries(theme.colorSchemes[theme.defaultColorScheme]).forEach(([key, value]) => {\n theme[key] = value;\n });\n theme.generateThemeVars = generateThemeVars;\n theme.generateStyleSheets = generateStyleSheets;\n theme.generateSpacing = function generateSpacing() {\n return createSpacing(input.spacing, createUnarySpacing(this));\n };\n theme.getColorSchemeSelector = createGetColorSchemeSelector(selector);\n theme.spacing = theme.generateSpacing();\n theme.shouldSkipGeneratingVar = shouldSkipGeneratingVar;\n theme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...input?.unstable_sxConfig\n };\n theme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n theme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n return theme;\n}","import createPalette from \"./createPalette.js\";\nimport createThemeWithVars from \"./createThemeWithVars.js\";\nimport createThemeNoVars from \"./createThemeNoVars.js\";\n// eslint-disable-next-line consistent-return\nfunction attachColorScheme(theme, scheme, colorScheme) {\n if (!theme.colorSchemes) {\n return undefined;\n }\n if (colorScheme) {\n theme.colorSchemes[scheme] = {\n ...(colorScheme !== true && colorScheme),\n palette: createPalette({\n ...(colorScheme === true ? {} : colorScheme.palette),\n mode: scheme\n }) // cast type to skip module augmentation test\n };\n }\n}\n\n/**\n * Generate a theme base on the options received.\n * @param options Takes an incomplete theme object and adds the missing parts.\n * @param args Deep merge the arguments with the about to be returned theme.\n * @returns A complete, ready-to-use theme object.\n */\nexport default function createTheme(options = {},\n// cast type to skip module augmentation test\n...args) {\n const {\n palette,\n cssVariables = false,\n colorSchemes: initialColorSchemes = !palette ? {\n light: true\n } : undefined,\n defaultColorScheme: initialDefaultColorScheme = palette?.mode,\n ...other\n } = options;\n const defaultColorSchemeInput = initialDefaultColorScheme || 'light';\n const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput];\n const colorSchemesInput = {\n ...initialColorSchemes,\n ...(palette ? {\n [defaultColorSchemeInput]: {\n ...(typeof defaultScheme !== 'boolean' && defaultScheme),\n palette\n }\n } : undefined)\n };\n if (cssVariables === false) {\n if (!('colorSchemes' in options)) {\n // Behaves exactly as v5\n return createThemeNoVars(options, ...args);\n }\n let paletteOptions = palette;\n if (!('palette' in options)) {\n if (colorSchemesInput[defaultColorSchemeInput]) {\n if (colorSchemesInput[defaultColorSchemeInput] !== true) {\n paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette;\n } else if (defaultColorSchemeInput === 'dark') {\n // @ts-ignore to prevent the module augmentation test from failing\n paletteOptions = {\n mode: 'dark'\n };\n }\n }\n }\n const theme = createThemeNoVars({\n ...options,\n palette: paletteOptions\n }, ...args);\n theme.defaultColorScheme = defaultColorSchemeInput;\n theme.colorSchemes = colorSchemesInput;\n if (theme.palette.mode === 'light') {\n theme.colorSchemes.light = {\n ...(colorSchemesInput.light !== true && colorSchemesInput.light),\n palette: theme.palette\n };\n attachColorScheme(theme, 'dark', colorSchemesInput.dark);\n }\n if (theme.palette.mode === 'dark') {\n theme.colorSchemes.dark = {\n ...(colorSchemesInput.dark !== true && colorSchemesInput.dark),\n palette: theme.palette\n };\n attachColorScheme(theme, 'light', colorSchemesInput.light);\n }\n return theme;\n }\n if (!palette && !('light' in colorSchemesInput) && defaultColorSchemeInput === 'light') {\n colorSchemesInput.light = true;\n }\n return createThemeWithVars({\n ...other,\n colorSchemes: colorSchemesInput,\n defaultColorScheme: defaultColorSchemeInput,\n ...(typeof cssVariables !== 'boolean' && cssVariables)\n }, ...args);\n}","'use client';\n\nimport createTheme from \"./createTheme.js\";\nconst defaultTheme = createTheme();\nexport default defaultTheme;","export default '$$material';","// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport default slotShouldForwardProp;","import slotShouldForwardProp from \"./slotShouldForwardProp.js\";\nconst rootShouldForwardProp = prop => slotShouldForwardProp(prop) && prop !== 'classes';\nexport default rootShouldForwardProp;","'use client';\n\nimport createStyled from '@mui/system/createStyled';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nimport rootShouldForwardProp from \"./rootShouldForwardProp.js\";\nexport { default as slotShouldForwardProp } from \"./slotShouldForwardProp.js\";\nexport { default as rootShouldForwardProp } from \"./rootShouldForwardProp.js\";\nconst styled = createStyled({\n themeId: THEME_ID,\n defaultTheme,\n rootShouldForwardProp\n});\nexport default styled;","import { unstable_memoTheme } from '@mui/system';\nconst memoTheme = unstable_memoTheme;\nexport default memoTheme;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport SystemDefaultPropsProvider, { useDefaultProps as useSystemDefaultProps } from '@mui/system/DefaultPropsProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction DefaultPropsProvider(props) {\n return /*#__PURE__*/_jsx(SystemDefaultPropsProvider, {\n ...props\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * @ignore\n */\n value: PropTypes.object.isRequired\n} : void 0;\nexport default DefaultPropsProvider;\nexport function useDefaultProps(params) {\n return useSystemDefaultProps(params);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getSvgIconUtilityClass } from \"./svgIconClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n color,\n fontSize,\n classes\n } = ownerState;\n const slots = {\n root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n };\n return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n name: 'MuiSvgIcon',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n }\n})(memoTheme(({\n theme\n}) => ({\n userSelect: 'none',\n width: '1em',\n height: '1em',\n display: 'inline-block',\n flexShrink: 0,\n transition: theme.transitions?.create?.('fill', {\n duration: (theme.vars ?? theme).transitions?.duration?.shorter\n }),\n variants: [{\n props: props => !props.hasSvgAsChild,\n style: {\n // the <svg> will define the property that has `currentColor`\n // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n fill: 'currentColor'\n }\n }, {\n props: {\n fontSize: 'inherit'\n },\n style: {\n fontSize: 'inherit'\n }\n }, {\n props: {\n fontSize: 'small'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(20) || '1.25rem'\n }\n }, {\n props: {\n fontSize: 'medium'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(24) || '1.5rem'\n }\n }, {\n props: {\n fontSize: 'large'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(35) || '2.1875rem'\n }\n },\n // TODO v5 deprecate color prop, v6 remove for sx\n ...Object.entries((theme.vars ?? theme).palette).filter(([, value]) => value && value.main).map(([color]) => ({\n props: {\n color\n },\n style: {\n color: (theme.vars ?? theme).palette?.[color]?.main\n }\n })), {\n props: {\n color: 'action'\n },\n style: {\n color: (theme.vars ?? theme).palette?.action?.active\n }\n }, {\n props: {\n color: 'disabled'\n },\n style: {\n color: (theme.vars ?? theme).palette?.action?.disabled\n }\n }, {\n props: {\n color: 'inherit'\n },\n style: {\n color: undefined\n }\n }]\n})));\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiSvgIcon'\n });\n const {\n children,\n className,\n color = 'inherit',\n component = 'svg',\n fontSize = 'medium',\n htmlColor,\n inheritViewBox = false,\n titleAccess,\n viewBox = '0 0 24 24',\n ...other\n } = props;\n const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n const ownerState = {\n ...props,\n color,\n component,\n fontSize,\n instanceFontSize: inProps.fontSize,\n inheritViewBox,\n viewBox,\n hasSvgAsChild\n };\n const more = {};\n if (!inheritViewBox) {\n more.viewBox = viewBox;\n }\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SvgIconRoot, {\n as: component,\n className: clsx(classes.root, className),\n focusable: \"false\",\n color: htmlColor,\n \"aria-hidden\": titleAccess ? undefined : true,\n role: titleAccess ? 'img' : undefined,\n ref: ref,\n ...more,\n ...other,\n ...(hasSvgAsChild && children.props),\n ownerState: ownerState,\n children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n children: titleAccess\n }) : null]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * Node passed into the SVG element.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n * @default 'inherit'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n * @default 'medium'\n */\n fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n /**\n * Applies a color attribute to the SVG element.\n */\n htmlColor: PropTypes.string,\n /**\n * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n * prop will be ignored.\n * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n * `component`'s viewBox to the root node.\n * @default false\n */\n inheritViewBox: PropTypes.bool,\n /**\n * The shape-rendering attribute. The behavior of the different options is described on the\n * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/shape-rendering).\n * If you are having issues with blurry icons you should investigate this prop.\n */\n shapeRendering: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Provides a human-readable title for the element that contains it.\n * https://www.w3.org/TR/SVG-access/#Equivalent\n */\n titleAccess: PropTypes.string,\n /**\n * Allows you to redefine what the coordinates without units mean inside an SVG element.\n * For example, if the SVG element is 500 (width) by 200 (height),\n * and you pass viewBox=\"0 0 50 20\",\n * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n * to bottom right (50,20) and each unit will be worth 10px.\n * @default '0 0 24 24'\n */\n viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport * as React from 'react';\nimport SvgIcon from \"../SvgIcon/index.js\";\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n function Component(props, ref) {\n return /*#__PURE__*/_jsx(SvgIcon, {\n \"data-testid\": process.env.NODE_ENV !== 'production' ? `${displayName}Icon` : undefined,\n ref: ref,\n ...props,\n children: path\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n // Need to set `displayName` on the inner component for React.memo.\n // React prior to 16.14 ignores `displayName` on the wrapper.\n Component.displayName = `${displayName}Icon`;\n }\n Component.muiName = SvgIcon.muiName;\n return /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(Component));\n}","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z\"\n}), 'CheckCircle');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z\"\n}), 'Error');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M1 21h22L12 2zm12-3h-2v-2h2zm0-4h-2v-4h2z\"\n}), 'Warning');","/**\n * Control Panel API Client\n *\n * Communicates with the backend Express API\n */\n\nexport interface HealthCheck {\n status: 'healthy' | 'degraded' | 'unhealthy';\n latency?: number;\n lastChecked: string;\n error?: string;\n}\n\nexport interface HealthResponse {\n status: 'healthy' | 'degraded' | 'unhealthy';\n timestamp: string;\n uptime: number;\n checks: Record<string, HealthCheck>;\n}\n\nexport interface InfoResponse {\n product: string;\n logoName: string;\n logoIconUrl?: string;\n version: string;\n uptime: number;\n links: Array<{ label: string; url: string; external?: boolean }>;\n branding?: {\n primaryColor?: string;\n };\n}\n\nexport interface DiagnosticsResponse {\n timestamp: string;\n product: string;\n version?: string;\n /** @qwickapps/server framework version */\n frameworkVersion?: string;\n uptime: number;\n health: Record<string, HealthCheck>;\n system: {\n nodeVersion: string;\n platform: string;\n arch: string;\n memory: {\n total: number;\n used: number;\n free: number;\n };\n cpu: {\n usage: number;\n };\n };\n}\n\nexport interface ConfigResponse {\n config: Record<string, string | number | boolean>;\n masked: string[];\n}\n\nexport interface LogEntry {\n timestamp: string;\n level: string;\n message: string;\n namespace?: string;\n}\n\nexport interface LogsResponse {\n logs: LogEntry[];\n total: number;\n page: number;\n limit: number;\n}\n\nexport interface LogSource {\n name: string;\n type: 'file' | 'api';\n available: boolean;\n}\n\n// ==================\n// Users API Types\n// ==================\nexport type UserStatus = 'invited' | 'active' | 'suspended';\n\nexport interface User {\n id: string;\n email: string;\n name?: string;\n status: UserStatus;\n invitation_token?: string;\n invitation_expires_at?: string;\n created_at?: string;\n updated_at?: string;\n last_login?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UsersResponse {\n users: User[];\n total: number;\n page: number;\n limit: number;\n}\n\nexport interface InviteUserRequest {\n email: string;\n name?: string;\n role?: string;\n metadata?: Record<string, unknown>;\n expiresInDays?: number;\n}\n\nexport interface InvitationResponse {\n user: User;\n token: string;\n inviteLink: string;\n expiresAt: string;\n}\n\nexport interface AcceptInvitationRequest {\n token: string;\n}\n\nexport interface AcceptInvitationResponse {\n success: boolean;\n user: User;\n}\n\n// ==================\n// Bans API Types\n// ==================\nexport interface Ban {\n id: string;\n user_id?: string;\n email: string;\n reason: string;\n banned_at: string;\n banned_by: string;\n expires_at?: string;\n}\n\nexport interface BansResponse {\n bans: Ban[];\n total: number;\n}\n\n// ==================\n// API Keys Types\n// ==================\nexport interface ApiKey {\n id: string;\n name: string;\n key_prefix: string;\n key_type: 'm2m' | 'pat';\n scopes: Array<'read' | 'write' | 'admin'>;\n last_used_at: string | null;\n expires_at: string | null;\n is_active: boolean;\n created_at: string;\n updated_at: string;\n}\n\nexport interface ApiKeyWithPlaintext extends ApiKey {\n key: string; // Only available on creation\n}\n\nexport interface ApiKeysResponse {\n keys: ApiKey[];\n}\n\nexport interface CreateApiKeyRequest {\n name: string;\n key_type: 'm2m' | 'pat';\n scopes: Array<'read' | 'write' | 'admin'>;\n expires_at?: string;\n}\n\nexport interface UpdateApiKeyRequest {\n name?: string;\n scopes?: Array<'read' | 'write' | 'admin'>;\n expires_at?: string;\n is_active?: boolean;\n}\n\n// ==================\n// Entitlements API Types\n// ==================\nexport interface EntitlementDefinition {\n id: string;\n name: string;\n category?: string;\n description?: string;\n}\n\nexport interface EntitlementResult {\n identifier: string;\n entitlements: string[];\n source: string;\n cached?: boolean;\n cachedAt?: string;\n expiresAt?: string;\n}\n\n// ==================\n// Entitlements Status\n// ==================\nexport interface EntitlementSourceInfo {\n name: string;\n description?: string;\n readonly: boolean;\n primary: boolean;\n}\n\nexport interface EntitlementsStatus {\n readonly: boolean;\n writeEnabled: boolean;\n cacheEnabled: boolean;\n cacheTtl: number;\n sources: EntitlementSourceInfo[];\n}\n\n// ==================\n// Plugin Feature Detection\n// ==================\nexport interface PluginFeatures {\n users: boolean;\n bans: boolean;\n entitlements: boolean;\n entitlementsReadonly?: boolean;\n}\n\n// ==================\n// UI Contributions Types\n// ==================\n\nexport interface MenuContribution {\n id: string;\n label: string;\n icon?: string;\n route: string;\n order?: number;\n pluginId: string;\n parent?: string;\n}\n\nexport interface PageContribution {\n id: string;\n route: string;\n title: string;\n pluginId: string;\n}\n\nexport interface WidgetContribution {\n id: string;\n title: string;\n /** Component name to render (matched by frontend widget registry) */\n component: string;\n /** Priority for ordering (lower = first, default: 100) */\n priority?: number;\n /** Whether this widget is shown by default */\n showByDefault?: boolean;\n pluginId: string;\n}\n\nexport interface UiContributionsResponse {\n menuItems: MenuContribution[];\n pages: PageContribution[];\n widgets: WidgetContribution[];\n plugins: Array<{ id: string; name: string; version?: string; status: string }>;\n}\n\n// ==================\n// Plugin Detail Types\n// ==================\n\nexport interface ConfigContribution {\n id: string;\n component: string;\n title?: string;\n pluginId: string;\n}\n\nexport interface PluginContributions {\n routes: Array<{ method: string; path: string }>;\n menuItems: MenuContribution[];\n pages: PageContribution[];\n widgets: WidgetContribution[];\n config?: ConfigContribution;\n}\n\nexport interface PluginInfo {\n id: string;\n name: string;\n version?: string;\n status: 'starting' | 'active' | 'stopped' | 'error';\n error?: string;\n contributionCounts: {\n routes: number;\n menuItems: number;\n pages: number;\n widgets: number;\n hasConfig: boolean;\n };\n}\n\nexport interface PluginsResponse {\n plugins: PluginInfo[];\n}\n\nexport interface PluginDetailResponse {\n id: string;\n name: string;\n version?: string;\n status: 'starting' | 'active' | 'stopped' | 'error';\n error?: string;\n contributions: PluginContributions;\n}\n\n// ==================\n// Auth Config Types\n// ==================\n\nexport type AuthPluginState = 'disabled' | 'enabled' | 'error';\nexport type AuthAdapterType = 'auth0' | 'supabase' | 'supertokens' | 'basic';\n\nexport interface AuthConfigStatus {\n state: AuthPluginState;\n adapter: string | null;\n error?: string;\n missingVars?: string[];\n config?: Record<string, string>;\n /** Runtime config from database (if available) */\n runtimeConfig?: RuntimeAuthConfig;\n}\n\nexport interface RuntimeAuthConfig {\n adapter: AuthAdapterType | null;\n config: {\n auth0?: Auth0AdapterConfig;\n supabase?: SupabaseAdapterConfig;\n supertokens?: SupertokensAdapterConfig;\n basic?: BasicAdapterConfig;\n };\n settings: {\n authRequired?: boolean;\n excludePaths?: string[];\n debug?: boolean;\n };\n updatedAt: string;\n updatedBy?: string;\n}\n\nexport interface Auth0AdapterConfig {\n domain: string;\n clientId: string;\n clientSecret: string;\n baseUrl: string;\n secret: string;\n audience?: string;\n scopes?: string[];\n allowedRoles?: string[];\n allowedDomains?: string[];\n}\n\nexport interface SupabaseAdapterConfig {\n url: string;\n anonKey: string;\n}\n\nexport interface BasicAdapterConfig {\n username: string;\n password: string;\n realm?: string;\n}\n\nexport interface SupertokensAdapterConfig {\n connectionUri: string;\n apiKey?: string;\n appName: string;\n apiDomain: string;\n websiteDomain: string;\n apiBasePath?: string;\n websiteBasePath?: string;\n enableEmailPassword?: boolean;\n socialProviders?: {\n google?: { clientId: string; clientSecret: string };\n apple?: { clientId: string; clientSecret: string; keyId: string; teamId: string };\n github?: { clientId: string; clientSecret: string };\n };\n}\n\nexport interface UpdateAuthConfigRequest {\n adapter: AuthAdapterType;\n config: Record<string, unknown>;\n settings?: {\n authRequired?: boolean;\n excludePaths?: string[];\n };\n}\n\nexport interface TestProviderRequest {\n adapter: AuthAdapterType;\n config: Record<string, unknown>;\n provider?: 'google' | 'github' | 'apple';\n}\n\nexport interface TestProviderResponse {\n success: boolean;\n message: string;\n details?: {\n latency?: number;\n version?: string;\n };\n}\n\n// ==================\n// Notifications API Types\n// ==================\n\nexport interface NotificationsConnectionHealth {\n isConnected: boolean;\n isHealthy: boolean;\n lastEventAt: string | null;\n timeSinceLastEvent: number;\n channelCount: number;\n isReconnecting: boolean;\n reconnectAttempts: number;\n}\n\nexport interface NotificationsStatsResponse {\n totalConnections: number;\n currentConnections: number;\n eventsProcessed: number;\n eventsRouted: number;\n eventsParseFailed: number;\n eventsDroppedNoClients: number;\n reconnectionAttempts: number;\n lastReconnectionAt?: string;\n clientsByType: {\n device: number;\n user: number;\n };\n connectionHealth: NotificationsConnectionHealth;\n channels: string[];\n lastEventAt?: string;\n}\n\nexport interface NotificationsClient {\n id: string;\n deviceId?: string;\n userId?: string;\n connectedAt: string;\n durationMs: number;\n}\n\nexport interface NotificationsClientsResponse {\n clients: NotificationsClient[];\n total: number;\n}\n\n// ==================\n// Rate Limit Config Types\n// ==================\n\nexport type RateLimitStrategy = 'sliding-window' | 'fixed-window' | 'token-bucket';\n\nexport interface RateLimitConfig {\n windowMs: number;\n maxRequests: number;\n strategy: RateLimitStrategy;\n cleanupEnabled: boolean;\n cleanupIntervalMs: number;\n store: string;\n cache: string;\n cacheAvailable: boolean;\n}\n\nexport interface RateLimitConfigUpdateRequest {\n windowMs?: number;\n maxRequests?: number;\n strategy?: RateLimitStrategy;\n cleanupEnabled?: boolean;\n cleanupIntervalMs?: number;\n}\n\nexport interface RateLimitConfigUpdateResponse {\n success: boolean;\n config: RateLimitConfig;\n}\n\nclass ControlPanelApi {\n private baseUrl: string;\n\n constructor(baseUrl = '') {\n this.baseUrl = baseUrl;\n }\n\n /**\n * Set the base URL for API requests.\n * Call this when the control panel is mounted at a custom path.\n */\n setBaseUrl(baseUrl: string): void {\n this.baseUrl = baseUrl;\n }\n\n /**\n * Get the base URL for API requests.\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Internal fetch wrapper that includes credentials for Basic Auth support.\n * Using 'same-origin' ensures the browser sends stored Basic Auth credentials\n * without embedding them in the URL (which would cause fetch to fail).\n */\n private async _fetch(url: string, options?: RequestInit): Promise<Response> {\n return fetch(url, {\n ...options,\n credentials: 'same-origin',\n });\n }\n\n /**\n * Generic fetch method for API requests.\n * Automatically prepends the base URL and /api prefix.\n */\n async fetch<T = unknown>(path: string, options?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}/api${path.startsWith('/') ? path : `/${path}`}`;\n const response = await this._fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || error.message || `Request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Plugin Feature Detection\n // ==================\n\n /**\n * Detect which user management plugins are available by probing their endpoints\n */\n async detectFeatures(): Promise<PluginFeatures> {\n const [users, bans, entitlements] = await Promise.all([\n this.checkEndpoint('/api/users'),\n this.checkEndpoint('/api/bans'),\n this.checkEndpoint('/api/entitlements/available'),\n ]);\n\n // If entitlements is available, get readonly status\n let entitlementsReadonly = true;\n if (entitlements) {\n try {\n const status = await this.getEntitlementsStatus();\n entitlementsReadonly = status.readonly;\n } catch {\n // Default to readonly if we can't get status\n }\n }\n\n return { users, bans, entitlements, entitlementsReadonly };\n }\n\n private async checkEndpoint(path: string): Promise<boolean> {\n try {\n const response = await this._fetch(`${this.baseUrl}${path}`, { method: 'HEAD' });\n // 200, 401, 403 mean the endpoint exists (might need auth)\n // 404 means it doesn't exist\n return response.status !== 404;\n } catch {\n return false;\n }\n }\n\n // ==================\n // Users API\n // ==================\n\n async getUsers(options: {\n limit?: number;\n page?: number;\n search?: string;\n } = {}): Promise<UsersResponse> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', options.limit.toString());\n if (options.page) params.set('page', options.page.toString());\n if (options.search) params.set('q', options.search);\n\n const response = await this._fetch(`${this.baseUrl}/api/users?${params}`);\n if (!response.ok) {\n throw new Error(`Users request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getUserById(id: string): Promise<User> {\n const response = await this._fetch(`${this.baseUrl}/api/users/${id}`);\n if (!response.ok) {\n throw new Error(`User request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async inviteUser(request: InviteUserRequest): Promise<InvitationResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/users/invite`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Invite user failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async acceptInvitation(token: string): Promise<AcceptInvitationResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/users/accept-invitation/${encodeURIComponent(token)}`);\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Accept invitation failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getInvitations(): Promise<UsersResponse> {\n const params = new URLSearchParams();\n params.set('status', 'invited');\n params.set('limit', '100');\n\n const response = await this._fetch(`${this.baseUrl}/api/users?${params}`);\n if (!response.ok) {\n throw new Error(`Invitations request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Bans API\n // ==================\n\n async getBans(): Promise<BansResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/bans`);\n if (!response.ok) {\n throw new Error(`Bans request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async banUser(email: string, reason: string, expiresAt?: string): Promise<void> {\n // Convert expiresAt datetime to duration in seconds\n let duration: number | undefined;\n if (expiresAt) {\n const expiresDate = new Date(expiresAt);\n const now = new Date();\n duration = Math.max(0, Math.floor((expiresDate.getTime() - now.getTime()) / 1000));\n }\n\n const response = await this._fetch(`${this.baseUrl}/api/bans/email/${encodeURIComponent(email)}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ reason, duration }),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Ban request failed: ${response.statusText}`);\n }\n }\n\n async unbanUser(email: string): Promise<void> {\n const response = await this._fetch(`${this.baseUrl}/api/bans/email/${encodeURIComponent(email)}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error(`Unban request failed: ${response.statusText}`);\n }\n }\n\n async checkBan(email: string): Promise<{ banned: boolean; ban?: Ban }> {\n const response = await this._fetch(`${this.baseUrl}/api/bans/email/${encodeURIComponent(email)}`);\n if (!response.ok) {\n throw new Error(`Ban check failed: ${response.statusText}`);\n }\n const data = await response.json();\n // Backend returns { email, isBanned }, transform to expected shape\n return { banned: data.isBanned };\n }\n\n // ==================\n // Entitlements API\n // ==================\n\n async getEntitlements(email: string): Promise<EntitlementResult> {\n const response = await this._fetch(`${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}`);\n if (!response.ok) {\n throw new Error(`Entitlements request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async refreshEntitlements(email: string): Promise<EntitlementResult> {\n const response = await this._fetch(`${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}/refresh`, {\n method: 'POST',\n });\n if (!response.ok) {\n throw new Error(`Entitlements refresh failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async checkEntitlement(email: string, entitlement: string): Promise<{ has: boolean }> {\n const response = await this._fetch(\n `${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}/check/${encodeURIComponent(entitlement)}`\n );\n if (!response.ok) {\n throw new Error(`Entitlement check failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getAvailableEntitlements(): Promise<EntitlementDefinition[]> {\n const response = await this._fetch(`${this.baseUrl}/api/entitlements/available`);\n if (!response.ok) {\n throw new Error(`Available entitlements request failed: ${response.statusText}`);\n }\n const data = await response.json();\n return data.entitlements;\n }\n\n async grantEntitlement(email: string, entitlement: string): Promise<void> {\n const response = await this._fetch(`${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ entitlement }),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Grant entitlement failed: ${response.statusText}`);\n }\n }\n\n async revokeEntitlement(email: string, entitlement: string): Promise<void> {\n const response = await this._fetch(\n `${this.baseUrl}/api/entitlements/${encodeURIComponent(email)}/${encodeURIComponent(entitlement)}`,\n { method: 'DELETE' }\n );\n if (!response.ok) {\n throw new Error(`Revoke entitlement failed: ${response.statusText}`);\n }\n }\n\n async invalidateEntitlementCache(email: string): Promise<void> {\n const response = await this._fetch(`${this.baseUrl}/api/entitlements/cache/${encodeURIComponent(email)}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n throw new Error(`Cache invalidation failed: ${response.statusText}`);\n }\n }\n\n async getEntitlementsStatus(): Promise<EntitlementsStatus> {\n const response = await this._fetch(`${this.baseUrl}/api/entitlements/status`);\n if (!response.ok) {\n throw new Error(`Entitlements status request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Health API\n // ==================\n\n async getHealth(): Promise<HealthResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/health`);\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getInfo(): Promise<InfoResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/info`);\n if (!response.ok) {\n throw new Error(`Info request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getDiagnostics(): Promise<DiagnosticsResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/diagnostics`);\n if (!response.ok) {\n throw new Error(`Diagnostics request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getConfig(): Promise<ConfigResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/config`);\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getLogs(options: {\n source?: string;\n level?: string;\n search?: string;\n limit?: number;\n page?: number;\n } = {}): Promise<LogsResponse> {\n const params = new URLSearchParams();\n if (options.source) params.set('source', options.source);\n if (options.level) params.set('level', options.level);\n if (options.search) params.set('search', options.search);\n if (options.limit) params.set('limit', options.limit.toString());\n if (options.page) params.set('page', options.page.toString());\n\n const response = await this._fetch(`${this.baseUrl}/api/logs?${params}`);\n if (!response.ok) {\n throw new Error(`Logs request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getLogSources(): Promise<LogSource[]> {\n const response = await this._fetch(`${this.baseUrl}/api/logs/sources`);\n if (!response.ok) {\n throw new Error(`Log sources request failed: ${response.statusText}`);\n }\n const data = await response.json();\n return data.sources;\n }\n\n // ==================\n // Plugins API\n // ==================\n\n async getPlugins(): Promise<PluginsResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/plugins`);\n if (!response.ok) {\n throw new Error(`Plugins request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getPluginDetail(id: string): Promise<PluginDetailResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/plugins/${encodeURIComponent(id)}`);\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error(`Plugin not found: ${id}`);\n }\n throw new Error(`Plugin detail request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // UI Contributions API\n // ==================\n\n async getUiContributions(): Promise<UiContributionsResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/ui-contributions`);\n if (!response.ok) {\n throw new Error(`UI contributions request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Auth Config API\n // ==================\n\n async getAuthConfigStatus(): Promise<AuthConfigStatus> {\n const response = await this._fetch(`${this.baseUrl}/api/auth/config/status`);\n if (!response.ok) {\n // Return disabled state if endpoint not available\n if (response.status === 404) {\n return { state: 'disabled', adapter: null };\n }\n throw new Error(`Auth config status request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getAuthConfig(): Promise<AuthConfigStatus> {\n const response = await this._fetch(`${this.baseUrl}/api/auth/config`);\n if (!response.ok) {\n if (response.status === 404) {\n return { state: 'disabled', adapter: null };\n }\n throw new Error(`Auth config request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Update auth configuration (save to database for hot-reload)\n */\n async updateAuthConfig(request: UpdateAuthConfigRequest): Promise<{ success: boolean; message: string }> {\n const response = await this._fetch(`${this.baseUrl}/api/auth/config`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Auth config update failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Delete auth configuration (revert to environment variables)\n */\n async deleteAuthConfig(): Promise<{ success: boolean; message: string }> {\n const response = await this._fetch(`${this.baseUrl}/api/auth/config`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Auth config delete failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Test auth provider connection without saving\n */\n async testAuthProvider(request: TestProviderRequest): Promise<TestProviderResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/auth/test-provider`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Provider test failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n /**\n * Test current auth provider connection (uses existing env/runtime config)\n */\n async testCurrentAuthProvider(): Promise<TestProviderResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/auth/test-current`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Provider test failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Rate Limit Config API\n // ==================\n\n async getRateLimitConfig(): Promise<RateLimitConfig> {\n const response = await this._fetch(`${this.baseUrl}/api/rate-limit/config`);\n if (!response.ok) {\n throw new Error(`Rate limit config request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async updateRateLimitConfig(updates: RateLimitConfigUpdateRequest): Promise<RateLimitConfigUpdateResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/rate-limit/config`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(updates),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Rate limit config update failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // Notifications API\n // ==================\n\n async getNotificationsStats(): Promise<NotificationsStatsResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/notifications/stats`);\n if (!response.ok) {\n throw new Error(`Notifications stats request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getNotificationsClients(): Promise<NotificationsClientsResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/notifications/clients`);\n if (!response.ok) {\n throw new Error(`Notifications clients request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async disconnectNotificationsClient(clientId: string): Promise<{ success: boolean }> {\n const response = await this._fetch(`${this.baseUrl}/api/notifications/clients/${encodeURIComponent(clientId)}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Disconnect client failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async forceNotificationsReconnect(): Promise<{ success: boolean; message: string }> {\n const response = await this._fetch(`${this.baseUrl}/api/notifications/reconnect`, {\n method: 'POST',\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `Force reconnect failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n // ==================\n // API Keys API\n // ==================\n\n async getApiKeys(): Promise<ApiKeysResponse> {\n const response = await this._fetch(`${this.baseUrl}/api/api-keys`);\n if (!response.ok) {\n throw new Error(`API keys request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async createApiKey(request: CreateApiKeyRequest): Promise<ApiKeyWithPlaintext> {\n const response = await this._fetch(`${this.baseUrl}/api/api-keys`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `API key creation failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async getApiKey(keyId: string): Promise<ApiKey> {\n const response = await this._fetch(`${this.baseUrl}/api/api-keys/${encodeURIComponent(keyId)}`);\n if (!response.ok) {\n throw new Error(`API key request failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async updateApiKey(keyId: string, updates: UpdateApiKeyRequest): Promise<ApiKey> {\n const response = await this._fetch(`${this.baseUrl}/api/api-keys/${encodeURIComponent(keyId)}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(updates),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `API key update failed: ${response.statusText}`);\n }\n return response.json();\n }\n\n async deleteApiKey(keyId: string): Promise<void> {\n const response = await this._fetch(`${this.baseUrl}/api/api-keys/${encodeURIComponent(keyId)}`, {\n method: 'DELETE',\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `API key deletion failed: ${response.statusText}`);\n }\n }\n}\n\nexport const api = new ControlPanelApi();\n","/**\n * Dashboard Widget Registry\n *\n * A context-based registry for dashboard widgets that allows:\n * - Registration of widgets at runtime\n * - Dynamic adding/removing of widgets\n * - Priority-based ordering of widgets\n *\n * Usage:\n * ```tsx\n * // In your app setup:\n * const { registerWidget } = useDashboardWidgets();\n * registerWidget({\n * id: 'user-stats',\n * title: 'User Statistics',\n * component: <UserStatsWidget />,\n * priority: 10,\n * });\n *\n * // Or via the provider:\n * <DashboardWidgetProvider initialWidgets={[...]} />\n * ```\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { createContext, useContext, useState, useCallback, ReactNode } from 'react';\n\nexport interface DashboardWidget {\n /** Unique identifier for the widget */\n id: string;\n /** Display title for the widget section */\n title?: string;\n /** The widget component to render */\n component: ReactNode;\n /** Priority for ordering (lower = first, default: 100) */\n priority?: number;\n /** Whether the widget is visible */\n visible?: boolean;\n}\n\ninterface DashboardWidgetContextValue {\n /** All registered widgets */\n widgets: DashboardWidget[];\n /** Register a new widget */\n registerWidget: (widget: DashboardWidget) => void;\n /** Unregister a widget by ID */\n unregisterWidget: (id: string) => void;\n /** Toggle widget visibility */\n toggleWidget: (id: string, visible?: boolean) => void;\n /** Get visible widgets sorted by priority */\n getVisibleWidgets: () => DashboardWidget[];\n}\n\nconst DashboardWidgetContext = createContext<DashboardWidgetContextValue | null>(null);\n\nexport interface DashboardWidgetProviderProps {\n /** Initial widgets to register */\n initialWidgets?: DashboardWidget[];\n children: ReactNode;\n}\n\nexport function DashboardWidgetProvider({ initialWidgets = [], children }: DashboardWidgetProviderProps) {\n const [widgets, setWidgets] = useState<DashboardWidget[]>(\n initialWidgets.map(w => ({ ...w, visible: w.visible !== false, priority: w.priority ?? 100 }))\n );\n\n const registerWidget = useCallback((widget: DashboardWidget) => {\n setWidgets(prev => {\n // Check if widget already exists\n const exists = prev.some(w => w.id === widget.id);\n if (exists) {\n // Update existing widget\n return prev.map(w => w.id === widget.id ? { ...widget, visible: widget.visible !== false, priority: widget.priority ?? 100 } : w);\n }\n // Add new widget\n return [...prev, { ...widget, visible: widget.visible !== false, priority: widget.priority ?? 100 }];\n });\n }, []);\n\n const unregisterWidget = useCallback((id: string) => {\n setWidgets(prev => prev.filter(w => w.id !== id));\n }, []);\n\n const toggleWidget = useCallback((id: string, visible?: boolean) => {\n setWidgets(prev => prev.map(w => {\n if (w.id === id) {\n return { ...w, visible: visible ?? !w.visible };\n }\n return w;\n }));\n }, []);\n\n const getVisibleWidgets = useCallback(() => {\n return widgets\n .filter(w => w.visible !== false)\n .sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));\n }, [widgets]);\n\n return (\n <DashboardWidgetContext.Provider value={{ widgets, registerWidget, unregisterWidget, toggleWidget, getVisibleWidgets }}>\n {children}\n </DashboardWidgetContext.Provider>\n );\n}\n\nexport function useDashboardWidgets() {\n const context = useContext(DashboardWidgetContext);\n if (!context) {\n throw new Error('useDashboardWidgets must be used within a DashboardWidgetProvider');\n }\n return context;\n}\n\n/**\n * Hook to register a widget on mount and unregister on unmount\n */\nexport function useRegisterWidget(widget: DashboardWidget) {\n const { registerWidget, unregisterWidget } = useDashboardWidgets();\n\n // Register on mount\n useState(() => {\n registerWidget(widget);\n return null;\n });\n\n // Return unregister function for manual cleanup\n return () => unregisterWidget(widget.id);\n}\n","/**\n * Dashboard Widget Renderer\n *\n * Renders all visible dashboard widgets from the registry.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { Box, Typography } from '@mui/material';\nimport { useDashboardWidgets } from './DashboardWidgetRegistry';\n\nexport function DashboardWidgetRenderer() {\n const { getVisibleWidgets } = useDashboardWidgets();\n const widgets = getVisibleWidgets();\n\n if (widgets.length === 0) {\n return null;\n }\n\n return (\n <>\n {widgets.map(widget => (\n <Box key={widget.id} sx={{ mt: 4 }}>\n {widget.title && (\n <Typography variant=\"h6\" sx={{ mb: 2, color: 'var(--theme-text-primary)' }}>\n {widget.title}\n </Typography>\n )}\n {widget.component}\n </Box>\n ))}\n </>\n );\n}\n","/**\n * Widget Component Registry\n *\n * Maps widget component names (from server-side WidgetContribution) to actual React components.\n * Plugins register their widgets here so the dashboard can render them.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport React, { createContext, useContext, useState, useCallback, useMemo, type ReactNode } from 'react';\n\n/**\n * Widget component definition\n *\n * IMPORTANT: We store component functions (ComponentType), not JSX instances (ReactNode).\n * This ensures cross-React-version compatibility when the library is used in apps\n * with different React versions.\n */\nexport interface WidgetComponent {\n /** Component name (must match server-side WidgetContribution.component) */\n name: string;\n /** The React component function to render */\n component: React.ComponentType;\n}\n\ninterface WidgetComponentRegistryContextValue {\n /** Register a widget component */\n registerComponent: (name: string, component: React.ComponentType) => void;\n /** Register multiple widget components */\n registerComponents: (components: WidgetComponent[]) => void;\n /** Get a component by name */\n getComponent: (name: string) => React.ComponentType | null;\n /** Check if a component is registered */\n hasComponent: (name: string) => boolean;\n /** Get all registered component names */\n getRegisteredNames: () => string[];\n}\n\nconst WidgetComponentRegistryContext = createContext<WidgetComponentRegistryContextValue | null>(null);\n\nexport interface WidgetComponentRegistryProviderProps {\n /** Initial components to register */\n initialComponents?: WidgetComponent[];\n children: ReactNode;\n}\n\n/**\n * Provider for the widget component registry\n */\nexport function WidgetComponentRegistryProvider({\n initialComponents = [],\n children,\n}: WidgetComponentRegistryProviderProps) {\n const [components, setComponents] = useState<Map<string, React.ComponentType>>(() => {\n const map = new Map<string, React.ComponentType>();\n for (const comp of initialComponents) {\n map.set(comp.name, comp.component);\n }\n return map;\n });\n\n const registerComponent = useCallback((name: string, component: React.ComponentType) => {\n setComponents(prev => {\n const next = new Map(prev);\n next.set(name, component);\n return next;\n });\n }, []);\n\n const registerComponents = useCallback((comps: WidgetComponent[]) => {\n setComponents(prev => {\n const next = new Map(prev);\n for (const comp of comps) {\n next.set(comp.name, comp.component);\n }\n return next;\n });\n }, []);\n\n const getComponent = useCallback((name: string): React.ComponentType | null => {\n return components.get(name) ?? null;\n }, [components]);\n\n const hasComponent = useCallback((name: string): boolean => {\n return components.has(name);\n }, [components]);\n\n const getRegisteredNames = useCallback((): string[] => {\n return Array.from(components.keys());\n }, [components]);\n\n // Memoize context value to prevent unnecessary re-renders of consumers\n const contextValue = useMemo(\n () => ({\n registerComponent,\n registerComponents,\n getComponent,\n hasComponent,\n getRegisteredNames,\n }),\n [registerComponent, registerComponents, getComponent, hasComponent, getRegisteredNames]\n );\n\n return (\n <WidgetComponentRegistryContext.Provider value={contextValue}>\n {children}\n </WidgetComponentRegistryContext.Provider>\n );\n}\n\n/**\n * Hook to access the widget component registry\n */\nexport function useWidgetComponentRegistry() {\n const context = useContext(WidgetComponentRegistryContext);\n if (!context) {\n throw new Error('useWidgetComponentRegistry must be used within a WidgetComponentRegistryProvider');\n }\n return context;\n}\n","/**\n * Plugin Widget Renderer\n *\n * Fetches widget contributions from the server API and renders them using\n * the WidgetComponentRegistry to resolve component names to React components.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Typography, CircularProgress, Alert } from '@mui/material';\nimport { api } from '../api/controlPanelApi';\nimport { useWidgetComponentRegistry } from './WidgetComponentRegistry';\n\n/**\n * Widget contribution from the server\n */\ninterface WidgetContribution {\n id: string;\n title: string;\n component: string;\n priority?: number;\n showByDefault?: boolean;\n pluginId: string;\n}\n\ninterface PluginWidgetRendererProps {\n /** Only show widgets marked as showByDefault (default: true) */\n defaultOnly?: boolean;\n /** Additional widget IDs to show (beyond showByDefault) */\n additionalWidgetIds?: string[];\n}\n\n/**\n * Renders widgets from plugins that have registered them via the server API\n */\nexport function PluginWidgetRenderer({\n defaultOnly = true,\n additionalWidgetIds = [],\n}: PluginWidgetRendererProps) {\n const [widgets, setWidgets] = useState<WidgetContribution[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const { getComponent, hasComponent } = useWidgetComponentRegistry();\n\n useEffect(() => {\n const fetchWidgets = async () => {\n try {\n const data = await api.getUiContributions();\n setWidgets(data.widgets || []);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch widgets');\n } finally {\n setLoading(false);\n }\n };\n\n fetchWidgets();\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>\n <CircularProgress size={24} />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {error}\n </Alert>\n );\n }\n\n // Filter widgets to show\n const visibleWidgets = widgets\n .filter(widget => {\n // Show if marked as default, or if in additionalWidgetIds\n if (defaultOnly) {\n return widget.showByDefault || additionalWidgetIds.includes(widget.id);\n }\n return true;\n })\n .filter(widget => {\n // Only show widgets that have a registered component\n if (!hasComponent(widget.component)) {\n console.warn(`Widget \"${widget.id}\" references unregistered component \"${widget.component}\"`);\n return false;\n }\n return true;\n })\n .sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));\n\n if (visibleWidgets.length === 0) {\n return null;\n }\n\n return (\n <>\n {visibleWidgets.map(widget => {\n const Component = getComponent(widget.component);\n return (\n <Box key={widget.id} sx={{ mt: 4 }}>\n {widget.title && (\n <Typography variant=\"h6\" sx={{ mb: 2, color: 'var(--theme-text-primary)' }}>\n {widget.title}\n </Typography>\n )}\n {Component && <Component />}\n </Box>\n );\n })}\n </>\n );\n}\n","/**\n * Service Health Widget\n *\n * Displays health check status with latency for all registered health checks.\n * This is a built-in widget provided by qwickapps-server.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Card, CardContent, Chip } from '@mui/material';\nimport { GridLayout, Text } from '@qwickapps/react-framework';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport { api, HealthResponse } from '../../api/controlPanelApi';\n\nfunction getStatusIcon(status: string) {\n switch (status) {\n case 'healthy':\n return <CheckCircleIcon sx={{ fontSize: 24, color: 'var(--theme-success)' }} />;\n case 'degraded':\n return <WarningIcon sx={{ fontSize: 24, color: 'var(--theme-warning)' }} />;\n case 'unhealthy':\n return <ErrorIcon sx={{ fontSize: 24, color: 'var(--theme-error)' }} />;\n default:\n return <WarningIcon sx={{ fontSize: 24, color: 'var(--theme-text-secondary)' }} />;\n }\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return 'var(--theme-success)';\n case 'degraded':\n return 'var(--theme-warning)';\n case 'unhealthy':\n return 'var(--theme-error)';\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\n/** Get grid columns count (1-4) based on item count */\nfunction getGridColumns(count: number): 1 | 2 | 3 | 4 {\n if (count <= 1) return 1;\n if (count === 2) return 2;\n if (count === 3) return 3;\n return 4;\n}\n\n/**\n * Service Health Widget Component\n */\nexport function ServiceHealthWidget() {\n const [health, setHealth] = useState<HealthResponse | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchHealth = async () => {\n try {\n const data = await api.getHealth();\n setHealth(data);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch health');\n }\n };\n\n fetchHealth();\n const interval = setInterval(fetchHealth, 10000);\n return () => clearInterval(interval);\n }, []);\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Text variant=\"body2\" customColor=\"var(--theme-error)\" content={error} />\n </CardContent>\n </Card>\n );\n }\n\n const healthChecks = health ? Object.entries(health.checks) : [];\n\n if (healthChecks.length === 0) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Text variant=\"body2\" customColor=\"var(--theme-text-secondary)\" content=\"No health checks configured\" />\n </CardContent>\n </Card>\n );\n }\n\n // Determine grid columns based on number of health checks (max 4)\n const columns = getGridColumns(healthChecks.length);\n\n return (\n <GridLayout columns={columns} spacing=\"medium\" equalHeight>\n {healthChecks.map(([name, check]) => (\n <Card key={name} sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {getStatusIcon(check.status)}\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Text\n variant=\"body1\"\n fontWeight=\"500\"\n content={name.charAt(0).toUpperCase() + name.slice(1)}\n customColor=\"var(--theme-text-primary)\"\n />\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mt: 0.5 }}>\n <Chip\n label={check.status}\n size=\"small\"\n sx={{\n bgcolor: getStatusColor(check.status) + '20',\n color: getStatusColor(check.status),\n fontSize: '0.75rem',\n height: 20,\n }}\n />\n {check.latency !== undefined && (\n <Text\n variant=\"caption\"\n content={`${check.latency}ms`}\n customColor=\"var(--theme-text-secondary)\"\n />\n )}\n </Box>\n </Box>\n </Box>\n </CardContent>\n </Card>\n ))}\n </GridLayout>\n );\n}\n","/**\n * Integration Status Widget\n *\n * Displays the status of configured integrations with their connection status.\n * Used in the dashboard to show a quick overview of integration health.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Typography, Chip, CircularProgress, Alert } from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport { api } from '../../api/controlPanelApi';\n\ninterface Integration {\n id: string;\n name: string;\n description: string;\n configured: boolean;\n}\n\ninterface IntegrationsConfig {\n integrations: Integration[];\n stats: {\n totalRequests: number;\n };\n}\n\nexport function IntegrationStatusWidget() {\n const [config, setConfig] = useState<IntegrationsConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const data = await api.fetch<IntegrationsConfig>('/ai-proxy/config');\n setConfig(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch integrations');\n } finally {\n setLoading(false);\n }\n };\n\n fetchConfig();\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 2 }}>\n <CircularProgress size={20} />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Alert severity=\"warning\" sx={{ py: 0.5, fontSize: 13 }}>\n Unable to load integrations\n </Alert>\n );\n }\n\n if (!config) return null;\n\n const configuredCount = config.integrations.filter((i) => i.configured).length;\n const totalCount = config.integrations.length;\n\n return (\n <Box\n sx={{\n bgcolor: 'var(--theme-surface)',\n borderRadius: 2,\n p: 2,\n border: '1px solid var(--theme-border)',\n }}\n >\n {/* Summary */}\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 }}>\n <Typography variant=\"subtitle2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {configuredCount} of {totalCount} configured\n </Typography>\n <Typography variant=\"subtitle2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {config.stats.totalRequests} requests\n </Typography>\n </Box>\n\n {/* Integration List */}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n {config.integrations.map((integration) => (\n <Box\n key={integration.id}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n p: 1.5,\n bgcolor: 'var(--theme-background)',\n borderRadius: 1,\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {integration.configured ? (\n <CheckCircleIcon sx={{ color: 'var(--theme-success)', fontSize: 18 }} />\n ) : (\n <ErrorIcon sx={{ color: 'var(--theme-text-secondary)', fontSize: 18 }} />\n )}\n <Box>\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 500 }}>\n {integration.name}\n </Typography>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {integration.description}\n </Typography>\n </Box>\n </Box>\n <Chip\n label={integration.configured ? 'Connected' : 'Not Configured'}\n size=\"small\"\n sx={{\n bgcolor: integration.configured ? 'var(--theme-success)20' : 'transparent',\n color: integration.configured ? 'var(--theme-success)' : 'var(--theme-text-secondary)',\n border: integration.configured ? 'none' : '1px solid var(--theme-border)',\n fontWeight: 500,\n fontSize: 11,\n }}\n />\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2M4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12m8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8\"\n}), 'Block');","/**\n * Auth Status Widget\n *\n * Displays the authentication plugin status on the dashboard.\n * Shows whether auth is enabled, the adapter type, and configuration status.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Typography, Chip, CircularProgress, Alert } from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport BlockIcon from '@mui/icons-material/Block';\nimport { api } from '../../api/controlPanelApi';\n\ninterface AuthStatus {\n state: 'enabled' | 'disabled' | 'error';\n adapter: string | null;\n error?: string;\n missingVars?: string[];\n}\n\nconst adapterLabels: Record<string, string> = {\n supertokens: 'SuperTokens',\n auth0: 'Auth0',\n supabase: 'Supabase',\n basic: 'Basic Auth',\n};\n\nexport function AuthStatusWidget() {\n const [status, setStatus] = useState<AuthStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchStatus = async () => {\n try {\n const data = await api.fetch<AuthStatus>('/auth/config/status');\n setStatus(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch auth status');\n } finally {\n setLoading(false);\n }\n };\n\n fetchStatus();\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 2 }}>\n <CircularProgress size={20} />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Alert severity=\"warning\" sx={{ py: 0.5, fontSize: 13 }}>\n Unable to load auth status\n </Alert>\n );\n }\n\n if (!status) return null;\n\n const getStateIcon = () => {\n switch (status.state) {\n case 'enabled':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)', fontSize: 32 }} />;\n case 'error':\n return <ErrorIcon sx={{ color: 'var(--theme-error)', fontSize: 32 }} />;\n case 'disabled':\n default:\n return <BlockIcon sx={{ color: 'var(--theme-text-secondary)', fontSize: 32 }} />;\n }\n };\n\n const getStateColor = () => {\n switch (status.state) {\n case 'enabled':\n return 'var(--theme-success)';\n case 'error':\n return 'var(--theme-error)';\n case 'disabled':\n default:\n return 'var(--theme-text-secondary)';\n }\n };\n\n return (\n <Box\n sx={{\n bgcolor: 'var(--theme-surface)',\n borderRadius: 2,\n p: 2,\n border: '1px solid var(--theme-border)',\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {getStateIcon()}\n <Box sx={{ flex: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 0.5 }}>\n <Typography variant=\"subtitle1\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 600 }}>\n {status.state === 'enabled' && status.adapter\n ? adapterLabels[status.adapter] || status.adapter\n : status.state === 'disabled'\n ? 'Not Configured'\n : 'Configuration Error'}\n </Typography>\n <Chip\n label={status.state.toUpperCase()}\n size=\"small\"\n sx={{\n bgcolor: `${getStateColor()}20`,\n color: getStateColor(),\n fontWeight: 600,\n fontSize: 10,\n height: 20,\n }}\n />\n </Box>\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n {status.state === 'enabled'\n ? 'Authentication is active'\n : status.state === 'disabled'\n ? 'Set AUTH_ADAPTER environment variable'\n : status.error || 'Check configuration'}\n </Typography>\n </Box>\n </Box>\n\n {/* Missing vars warning */}\n {status.missingVars && status.missingVars.length > 0 && (\n <Alert severity=\"warning\" sx={{ mt: 2, py: 0.5, '& .MuiAlert-message': { fontSize: 12 } }}>\n Missing: {status.missingVars.join(', ')}\n </Alert>\n )}\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m1 9 2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9m8 8 3 3 3-3c-1.65-1.66-4.34-1.66-6 0m-4-4 2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13\"\n}), 'Wifi');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M22.99 9C19.15 5.16 13.8 3.76 8.84 4.78l2.52 2.52c3.47-.17 6.99 1.05 9.63 3.7zm-4 4c-1.29-1.29-2.84-2.13-4.49-2.56l3.53 3.53zM2 3.05 5.07 6.1C3.6 6.82 2.22 7.78 1 9l1.99 2c1.24-1.24 2.67-2.16 4.2-2.77l2.24 2.24C7.81 10.89 6.27 11.73 5 13v.01L6.99 15c1.36-1.36 3.14-2.04 4.92-2.06L18.98 20l1.27-1.26L3.29 1.79zM9 17l3 3 3-3c-1.65-1.66-4.34-1.66-6 0\"\n}), 'WifiOff');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M4 6h18V4H4c-1.1 0-2 .9-2 2v11H0v3h14v-3H4zm19 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1m-1 9h-4v-7h4z\"\n}), 'Devices');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4\"\n}), 'Person');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M2.01 21 23 12 2.01 3 2 10l15 2-15 2z\"\n}), 'Send');","/**\n * StatCard Component\n *\n * A reusable card component for displaying statistics with an icon,\n * value, label, and optional sub-value.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { Box, Card, CardContent } from '@mui/material';\nimport { Text } from '@qwickapps/react-framework';\n\nexport interface StatCardProps {\n icon: React.ReactNode;\n label: string;\n value: string | number;\n subValue?: string;\n color?: string;\n}\n\nexport function StatCard({\n icon,\n label,\n value,\n subValue,\n color = 'var(--theme-primary)',\n}: StatCardProps) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent sx={{ py: 1.5, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n <Box sx={{ color }}>{icon}</Box>\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Text\n variant=\"h4\"\n content={String(value)}\n customColor=\"var(--theme-text-primary)\"\n fontWeight=\"600\"\n />\n <Text\n variant=\"caption\"\n content={label}\n customColor=\"var(--theme-text-secondary)\"\n />\n {subValue && (\n <Text\n variant=\"caption\"\n content={subValue}\n customColor=\"var(--theme-text-secondary)\"\n sx={{ display: 'block', mt: 0.25 }}\n />\n )}\n </Box>\n </Box>\n </CardContent>\n </Card>\n );\n}\n","/**\n * Formatting Utilities\n *\n * Common formatting functions for numbers, durations, and strings.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\n/**\n * Format a number with K/M suffix for large values\n */\nexport function formatNumber(num: number): string {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n}\n\n/**\n * Format milliseconds to human-readable duration\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(0)}s`;\n if (ms < 3600000) return `${(ms / 60000).toFixed(0)}m`;\n return `${(ms / 3600000).toFixed(1)}h`;\n}\n\n/**\n * Truncate a string ID for display\n */\nexport function truncateId(id: string, maxLength = 12): string {\n return id.length > maxLength ? `${id.substring(0, maxLength)}...` : id;\n}\n","/**\n * Notifications Stats Widget\n *\n * Displays realtime notifications connection statistics on the Control Panel dashboard.\n * Shows active clients, events processed, and connection health.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Card, CardContent, Chip, LinearProgress } from '@mui/material';\nimport { GridLayout, Text } from '@qwickapps/react-framework';\nimport WifiIcon from '@mui/icons-material/Wifi';\nimport WifiOffIcon from '@mui/icons-material/WifiOff';\nimport DevicesIcon from '@mui/icons-material/Devices';\nimport PersonIcon from '@mui/icons-material/Person';\nimport SendIcon from '@mui/icons-material/Send';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport { api } from '../../api/controlPanelApi';\nimport type { NotificationsStatsResponse } from '../../api/controlPanelApi';\nimport { StatCard } from '../../components/StatCard';\nimport { formatNumber, formatDuration } from '../../utils/formatters';\n\n/**\n * Notifications Stats Widget Component\n */\nexport function NotificationsStatsWidget() {\n const [stats, setStats] = useState<NotificationsStatsResponse | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const fetchStats = async () => {\n try {\n const data = await api.getNotificationsStats();\n setStats(data);\n setError(null);\n } catch (err) {\n // Check if it's a 404 (plugin not enabled)\n if (err instanceof Error && err.message.includes('404')) {\n setError('Notifications plugin not enabled');\n } else {\n setError(err instanceof Error ? err.message : 'Failed to fetch stats');\n }\n } finally {\n setLoading(false);\n }\n };\n\n fetchStats();\n const interval = setInterval(fetchStats, 5000); // Refresh every 5 seconds\n return () => clearInterval(interval);\n }, []);\n\n if (loading) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <LinearProgress />\n </CardContent>\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-border)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <WifiOffIcon sx={{ color: 'var(--theme-text-secondary)' }} />\n <Text variant=\"body2\" customColor=\"var(--theme-text-secondary)\" content={error} />\n </Box>\n </CardContent>\n </Card>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n const isHealthy = stats.connectionHealth.isHealthy;\n const healthColor = isHealthy ? 'var(--theme-success)' : 'var(--theme-warning)';\n\n return (\n <Box>\n {/* Connection Status Bar */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 2 }}>\n <CardContent sx={{ py: 1, '&:last-child': { pb: 1 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {isHealthy ? (\n <WifiIcon sx={{ color: healthColor, fontSize: 20 }} />\n ) : (\n <WifiOffIcon sx={{ color: healthColor, fontSize: 20 }} />\n )}\n <Text\n variant=\"body2\"\n content={isHealthy ? 'Connected' : 'Reconnecting...'}\n customColor={healthColor}\n fontWeight=\"500\"\n />\n {stats.connectionHealth.isReconnecting && (\n <Chip\n label={`Attempt ${stats.connectionHealth.reconnectAttempts}`}\n size=\"small\"\n sx={{\n bgcolor: 'var(--theme-warning)20',\n color: 'var(--theme-warning)',\n fontSize: '0.7rem',\n height: 18,\n }}\n />\n )}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Text\n variant=\"caption\"\n content={`${stats.channels.length} channel${stats.channels.length !== 1 ? 's' : ''}`}\n customColor=\"var(--theme-text-secondary)\"\n />\n {stats.lastEventAt && (\n <Text\n variant=\"caption\"\n content={`Last event: ${formatDuration(stats.connectionHealth.timeSinceLastEvent)} ago`}\n customColor=\"var(--theme-text-secondary)\"\n />\n )}\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n {/* Stats Grid */}\n <GridLayout columns={4} spacing=\"small\" equalHeight>\n <StatCard\n icon={<DevicesIcon sx={{ fontSize: 28 }} />}\n label=\"Active Clients\"\n value={stats.currentConnections}\n subValue={`${stats.totalConnections} total`}\n color=\"var(--theme-primary)\"\n />\n <StatCard\n icon={<PersonIcon sx={{ fontSize: 28 }} />}\n label=\"By Device\"\n value={stats.clientsByType.device}\n subValue={`${stats.clientsByType.user} by user`}\n color=\"var(--theme-info)\"\n />\n <StatCard\n icon={<SendIcon sx={{ fontSize: 28 }} />}\n label=\"Events Routed\"\n value={formatNumber(stats.eventsRouted)}\n subValue={`${formatNumber(stats.eventsProcessed)} processed`}\n color=\"var(--theme-success)\"\n />\n <StatCard\n icon={<ErrorIcon sx={{ fontSize: 28 }} />}\n label=\"Dropped\"\n value={formatNumber(stats.eventsDroppedNoClients)}\n subValue={`${stats.eventsParseFailed} parse errors`}\n color={stats.eventsDroppedNoClients > 0 ? 'var(--theme-warning)' : 'var(--theme-text-secondary)'}\n />\n </GridLayout>\n </Box>\n );\n}\n","/**\n * Built-in Widget Components\n *\n * Maps built-in widget component names to their React components.\n * These are the widgets that qwickapps-server provides out of the box.\n *\n * IMPORTANT: We export component functions, not JSX instances.\n * This ensures cross-React-version compatibility.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { ServiceHealthWidget, IntegrationStatusWidget, AuthStatusWidget, NotificationsStatsWidget } from './widgets';\nimport type { WidgetComponent } from './WidgetComponentRegistry';\n\n/**\n * Map of built-in widget component names to their React component functions.\n * Use this when you need to look up a component by name.\n */\nexport const builtInWidgetComponents: Record<string, React.ComponentType> = {\n ServiceHealthWidget: ServiceHealthWidget,\n IntegrationStatusWidget: IntegrationStatusWidget,\n AuthStatusWidget: AuthStatusWidget,\n NotificationsStatsWidget: NotificationsStatsWidget,\n};\n\n/**\n * Get built-in widget components as WidgetComponent array.\n * Use this when registering with WidgetComponentRegistryProvider.\n *\n * Returns component functions (not JSX instances) to ensure compatibility\n * across different React versions.\n */\nexport function getBuiltInWidgetComponents(): WidgetComponent[] {\n return [\n { name: 'ServiceHealthWidget', component: ServiceHealthWidget },\n { name: 'IntegrationStatusWidget', component: IntegrationStatusWidget },\n { name: 'AuthStatusWidget', component: AuthStatusWidget },\n { name: 'NotificationsStatsWidget', component: NotificationsStatsWidget },\n ];\n}\n","import { useState, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Box,\n Card,\n CardContent,\n CardActionArea,\n Typography,\n CircularProgress,\n Chip,\n} from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport { api, HealthResponse, InfoResponse } from '../api/controlPanelApi';\nimport { DashboardWidgetRenderer, PluginWidgetRenderer } from '../dashboard';\n\nfunction getStatusIcon(status: string) {\n switch (status) {\n case 'healthy':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)' }} />;\n case 'degraded':\n return <WarningIcon sx={{ color: 'var(--theme-warning)' }} />;\n case 'unhealthy':\n return <ErrorIcon sx={{ color: 'var(--theme-error)' }} />;\n default:\n return <CircularProgress size={20} />;\n }\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return 'var(--theme-success)';\n case 'degraded':\n return 'var(--theme-warning)';\n case 'unhealthy':\n return 'var(--theme-error)';\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\nexport function DashboardPage() {\n const navigate = useNavigate();\n const [health, setHealth] = useState<HealthResponse | null>(null);\n const [info, setInfo] = useState<InfoResponse | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const [healthData, infoData] = await Promise.all([\n api.getHealth(),\n api.getInfo(),\n ]);\n setHealth(healthData);\n setInfo(infoData);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch data');\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n const interval = setInterval(fetchData, 10000);\n return () => clearInterval(interval);\n }, []);\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '50vh' }}>\n <CircularProgress />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Typography color=\"error\">{error}</Typography>\n </CardContent>\n </Card>\n );\n }\n\n const healthChecks = health ? Object.entries(health.checks) : [];\n const healthyCount = healthChecks.filter(([, c]) => c.status === 'healthy').length;\n const totalCount = healthChecks.length;\n\n return (\n <Box>\n <Typography variant=\"h4\" sx={{ mb: 1, color: 'var(--theme-text-primary)' }}>\n Dashboard\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n Real-time overview of {info?.product || 'your service'}\n </Typography>\n\n {/* Service Status Banner - clickable to navigate to Health page */}\n <Card\n sx={{\n mb: 4,\n bgcolor: 'var(--theme-surface)',\n border: `2px solid ${getStatusColor(health?.status || 'unknown')}`,\n }}\n >\n <CardActionArea onClick={() => navigate('/health')}>\n <CardContent sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {getStatusIcon(health?.status || 'unknown')}\n <Box>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Service Status: {health?.status?.charAt(0).toUpperCase()}{health?.status?.slice(1)}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Click to view detailed health information\n </Typography>\n </Box>\n </Box>\n <Chip\n label={`${healthyCount}/${totalCount} checks passing`}\n sx={{\n bgcolor: getStatusColor(health?.status || 'unknown') + '20',\n color: getStatusColor(health?.status || 'unknown'),\n }}\n />\n </CardContent>\n </CardActionArea>\n </Card>\n\n {/* Plugin widgets (from server-side widget contributions) */}\n <PluginWidgetRenderer />\n\n {/* Legacy widgets from context (for backwards compatibility) */}\n <DashboardWidgetRenderer />\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z\"\n}), 'Refresh');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14\"\n}), 'Search');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M8 5v14l11-7z\"\n}), 'PlayArrow');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M6 19h4V5H6zm8-14v14h4V5z\"\n}), 'Pause');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z\"\n}), 'ArrowUpward');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z\"\n}), 'ArrowDownward');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z\"\n}), 'Info');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5s-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20zm-6 8h-4v-2h4zm0-4h-4v-2h4z\"\n}), 'BugReport');","import { useState, useEffect, useRef, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n CircularProgress,\n TextField,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n IconButton,\n Pagination,\n Tooltip,\n Grid,\n ToggleButton,\n ToggleButtonGroup,\n} from '@mui/material';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport SearchIcon from '@mui/icons-material/Search';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport PauseIcon from '@mui/icons-material/Pause';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport InfoIcon from '@mui/icons-material/Info';\nimport BugReportIcon from '@mui/icons-material/BugReport';\nimport { api, LogEntry, LogSource } from '../api/controlPanelApi';\n\nfunction getLevelColor(level: string): string {\n switch (level.toLowerCase()) {\n case 'error':\n return 'var(--theme-error)';\n case 'warn':\n case 'warning':\n return 'var(--theme-warning)';\n case 'info':\n return 'var(--theme-info)';\n case 'debug':\n return 'var(--theme-text-secondary)';\n default:\n return 'var(--theme-text-primary)';\n }\n}\n\nexport function LogsPage() {\n const [logs, setLogs] = useState<LogEntry[]>([]);\n const [sources, setSources] = useState<LogSource[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Filters\n const [selectedSource, setSelectedSource] = useState<string>('');\n const [selectedLevel, setSelectedLevel] = useState<string>('');\n const [searchQuery, setSearchQuery] = useState<string>('');\n const [page, setPage] = useState(1);\n const [total, setTotal] = useState(0);\n const limit = 50;\n\n // New features\n const [autoRefresh, setAutoRefresh] = useState(false);\n const [sortOrder, setSortOrder] = useState<'desc' | 'asc'>('desc'); // desc = newest first\n const autoRefreshRef = useRef<NodeJS.Timeout | null>(null);\n\n // Stats - computed from current logs (could be fetched from API if available)\n const stats = {\n total: total,\n errors: logs.filter(l => l.level.toLowerCase() === 'error').length,\n warnings: logs.filter(l => ['warn', 'warning'].includes(l.level.toLowerCase())).length,\n info: logs.filter(l => l.level.toLowerCase() === 'info').length,\n debug: logs.filter(l => l.level.toLowerCase() === 'debug').length,\n };\n\n const fetchLogs = useCallback(async () => {\n setLoading(true);\n try {\n const data = await api.getLogs({\n source: selectedSource || undefined,\n level: selectedLevel || undefined,\n search: searchQuery || undefined,\n limit,\n page,\n });\n // Sort logs based on sortOrder\n const sortedLogs = [...data.logs].sort((a, b) => {\n const dateA = new Date(a.timestamp).getTime();\n const dateB = new Date(b.timestamp).getTime();\n return sortOrder === 'desc' ? dateB - dateA : dateA - dateB;\n });\n setLogs(sortedLogs);\n setTotal(data.total);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch logs');\n } finally {\n setLoading(false);\n }\n }, [selectedSource, selectedLevel, searchQuery, page, sortOrder]);\n\n const fetchSources = async () => {\n try {\n const data = await api.getLogSources();\n setSources(data);\n } catch {\n // Sources endpoint might not be available\n }\n };\n\n useEffect(() => {\n fetchSources();\n }, []);\n\n useEffect(() => {\n fetchLogs();\n }, [fetchLogs]);\n\n // Auto-refresh effect\n useEffect(() => {\n if (autoRefresh) {\n autoRefreshRef.current = setInterval(fetchLogs, 5000);\n } else if (autoRefreshRef.current) {\n clearInterval(autoRefreshRef.current);\n autoRefreshRef.current = null;\n }\n return () => {\n if (autoRefreshRef.current) {\n clearInterval(autoRefreshRef.current);\n }\n };\n }, [autoRefresh, fetchLogs]);\n\n const handleSearch = () => {\n setPage(1);\n fetchLogs();\n };\n\n const handleSortOrderChange = (_event: React.MouseEvent<HTMLElement>, newOrder: 'desc' | 'asc' | null) => {\n if (newOrder !== null) {\n setSortOrder(newOrder);\n }\n };\n\n const totalPages = Math.ceil(total / limit);\n\n return (\n <Box>\n <Typography variant=\"h4\" sx={{ mb: 1, color: 'var(--theme-text-primary)' }}>\n Logs\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n View and search application logs\n </Typography>\n\n {/* Stats Widgets */}\n <Grid container spacing={2} sx={{ mb: 3 }}>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 600 }}>\n {stats.total.toLocaleString()}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Total Logs\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <ErrorIcon sx={{ color: 'var(--theme-error)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-error)', fontWeight: 600 }}>\n {stats.errors}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Errors\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <WarningIcon sx={{ color: 'var(--theme-warning)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-warning)', fontWeight: 600 }}>\n {stats.warnings}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Warnings\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <InfoIcon sx={{ color: 'var(--theme-info)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-info)', fontWeight: 600 }}>\n {stats.info}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Info\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid size={{ xs: 6, sm: 3, md: 2.4 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ py: 1.5, px: 2, '&:last-child': { pb: 1.5 } }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <BugReportIcon sx={{ color: 'var(--theme-text-secondary)', fontSize: 20 }} />\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-text-primary)', fontWeight: 600 }}>\n {stats.debug}\n </Typography>\n </Box>\n <Typography variant=\"caption\" sx={{ color: 'var(--theme-text-secondary)' }}>\n Debug\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n\n {/* Filters */}\n <Card sx={{ mb: 3, bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap', alignItems: 'center' }}>\n {sources.length > 0 && (\n <FormControl size=\"small\" sx={{ minWidth: 150 }}>\n <InputLabel sx={{ color: 'var(--theme-text-secondary)' }}>Source</InputLabel>\n <Select\n value={selectedSource}\n label=\"Source\"\n onChange={(e) => setSelectedSource(e.target.value)}\n sx={{ color: 'var(--theme-text-primary)' }}\n >\n <MenuItem value=\"\">All Sources</MenuItem>\n {sources.map((source) => (\n <MenuItem key={source.name} value={source.name}>\n {source.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n\n <FormControl size=\"small\" sx={{ minWidth: 120 }}>\n <InputLabel sx={{ color: 'var(--theme-text-secondary)' }}>Level</InputLabel>\n <Select\n value={selectedLevel}\n label=\"Level\"\n onChange={(e) => setSelectedLevel(e.target.value)}\n sx={{ color: 'var(--theme-text-primary)' }}\n >\n <MenuItem value=\"\">All Levels</MenuItem>\n <MenuItem value=\"error\">Error</MenuItem>\n <MenuItem value=\"warn\">Warning</MenuItem>\n <MenuItem value=\"info\">Info</MenuItem>\n <MenuItem value=\"debug\">Debug</MenuItem>\n </Select>\n </FormControl>\n\n <TextField\n size=\"small\"\n placeholder=\"Search logs...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyPress={(e) => e.key === 'Enter' && handleSearch()}\n sx={{\n flex: 1,\n minWidth: 200,\n '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' },\n }}\n InputProps={{\n startAdornment: <SearchIcon sx={{ mr: 1, color: 'var(--theme-text-secondary)' }} />,\n }}\n />\n\n {/* Sort Order Toggle */}\n <ToggleButtonGroup\n value={sortOrder}\n exclusive\n onChange={handleSortOrderChange}\n size=\"small\"\n aria-label=\"sort order\"\n >\n <ToggleButton value=\"desc\" aria-label=\"newest first\">\n <Tooltip title=\"Newest First\">\n <ArrowDownwardIcon fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n <ToggleButton value=\"asc\" aria-label=\"oldest first\">\n <Tooltip title=\"Oldest First\">\n <ArrowUpwardIcon fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n </ToggleButtonGroup>\n\n {/* Auto Refresh Toggle */}\n <Tooltip title={autoRefresh ? 'Pause auto-refresh' : 'Enable auto-refresh (5s)'}>\n <IconButton\n onClick={() => setAutoRefresh(!autoRefresh)}\n sx={{\n color: autoRefresh ? 'var(--theme-success)' : 'var(--theme-text-secondary)',\n bgcolor: autoRefresh ? 'var(--theme-success)20' : 'transparent',\n }}\n >\n {autoRefresh ? <PauseIcon /> : <PlayArrowIcon />}\n </IconButton>\n </Tooltip>\n\n <Tooltip title=\"Refresh\">\n <IconButton onClick={fetchLogs} sx={{ color: 'var(--theme-primary)' }}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </CardContent>\n </Card>\n\n {/* Error State */}\n {error && (\n <Card sx={{ mb: 3, bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Typography color=\"error\">{error}</Typography>\n </CardContent>\n </Card>\n )}\n\n {/* Logs Table */}\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n {loading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>\n <CircularProgress />\n </Box>\n ) : logs.length === 0 ? (\n <CardContent>\n <Typography sx={{ color: 'var(--theme-text-secondary)', textAlign: 'center' }}>\n No logs found\n </Typography>\n </CardContent>\n ) : (\n <>\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 180 }}>\n Timestamp\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 100 }}>\n Level\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 120 }}>\n Component\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Message\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {logs.map((log, index) => (\n <TableRow key={index} hover>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', fontFamily: 'monospace', fontSize: '0.75rem' }}>\n {new Date(log.timestamp).toLocaleString()}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Chip\n label={log.level.toUpperCase()}\n size=\"small\"\n sx={{\n bgcolor: getLevelColor(log.level) + '20',\n color: getLevelColor(log.level),\n fontSize: '0.65rem',\n height: 20,\n }}\n />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', fontSize: '0.75rem' }}>\n {log.namespace || '-'}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)', fontFamily: 'monospace', fontSize: '0.8rem', whiteSpace: 'pre-wrap', wordBreak: 'break-all' }}>\n {log.message}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n <Pagination\n count={totalPages}\n page={page}\n onChange={(_, value) => setPage(value)}\n sx={{\n '& .MuiPaginationItem-root': {\n color: 'var(--theme-text-primary)',\n },\n }}\n />\n </Box>\n )}\n </>\n )}\n </Card>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z\"\n}), 'ContentCopy');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M15 9H9v6h6zm-2 4h-2v-2h2zm8-2V9h-2V7c0-1.1-.9-2-2-2h-2V3h-2v2h-2V3H9v2H7c-1.1 0-2 .9-2 2v2H3v2h2v2H3v2h2v2c0 1.1.9 2 2 2h2v2h2v-2h2v2h2v-2h2c1.1 0 2-.9 2-2v-2h2v-2h-2v-2zm-4 6H7V7h10z\"\n}), 'Memory');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2zM4 6h16v10H4z\"\n}), 'Computer');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M2 20h20v-4H2zm2-3h2v2H4zM2 4v4h20V4zm4 3H4V5h2zm-4 7h20v-4H2zm2-3h2v2H4z\"\n}), 'Storage');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon([/*#__PURE__*/_jsx(\"path\", {\n d: \"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8\"\n}, \"0\"), /*#__PURE__*/_jsx(\"path\", {\n d: \"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z\"\n}, \"1\")], 'AccessTime');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m12 21.35-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54z\"\n}), 'Favorite');","import { useState, useEffect } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n Typography,\n Grid,\n CircularProgress,\n Chip,\n IconButton,\n Tooltip,\n Snackbar,\n Alert,\n LinearProgress,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n} from '@mui/material';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport MemoryIcon from '@mui/icons-material/Memory';\nimport ComputerIcon from '@mui/icons-material/Computer';\nimport StorageIcon from '@mui/icons-material/Storage';\nimport AccessTimeIcon from '@mui/icons-material/AccessTime';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport FavoriteIcon from '@mui/icons-material/Favorite';\nimport { api, DiagnosticsResponse, HealthResponse } from '../api/controlPanelApi';\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nfunction formatUptime(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days > 0) {\n return `${days}d ${hours % 24}h ${minutes % 60}m`;\n }\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\nfunction getHealthStatusIcon(status: string, size = 20) {\n switch (status) {\n case 'healthy':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)', fontSize: size }} />;\n case 'degraded':\n return <WarningIcon sx={{ color: 'var(--theme-warning)', fontSize: size }} />;\n case 'unhealthy':\n return <ErrorIcon sx={{ color: 'var(--theme-error)', fontSize: size }} />;\n default:\n return <CircularProgress size={size} />;\n }\n}\n\nfunction getHealthStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return 'var(--theme-success)';\n case 'degraded':\n return 'var(--theme-warning)';\n case 'unhealthy':\n return 'var(--theme-error)';\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\nfunction formatLatency(latency?: number): string {\n if (latency === undefined) return '-';\n if (latency < 1000) return `${latency}ms`;\n return `${(latency / 1000).toFixed(2)}s`;\n}\n\nexport function SystemPage() {\n const [diagnostics, setDiagnostics] = useState<DiagnosticsResponse | null>(null);\n const [health, setHealth] = useState<HealthResponse | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [snackbar, setSnackbar] = useState<{ open: boolean; message: string }>({\n open: false,\n message: '',\n });\n\n const fetchData = async () => {\n setLoading(true);\n try {\n const [diagData, healthData] = await Promise.all([\n api.getDiagnostics(),\n api.getHealth().catch(() => null), // Health might not be available\n ]);\n setDiagnostics(diagData);\n setHealth(healthData);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch diagnostics');\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return () => clearInterval(interval);\n }, []);\n\n const handleCopyAll = () => {\n navigator.clipboard.writeText(JSON.stringify(diagnostics, null, 2));\n setSnackbar({ open: true, message: 'Diagnostics copied to clipboard' });\n };\n\n if (loading && !diagnostics) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '50vh' }}>\n <CircularProgress />\n </Box>\n );\n }\n\n if (error) {\n return (\n <Card sx={{ bgcolor: 'var(--theme-surface)', border: '1px solid var(--theme-error)' }}>\n <CardContent>\n <Typography color=\"error\">{error}</Typography>\n </CardContent>\n </Card>\n );\n }\n\n const memoryUsedPercent = diagnostics\n ? (diagnostics.system.memory.used / diagnostics.system.memory.total) * 100\n : 0;\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"h4\" sx={{ color: 'var(--theme-text-primary)' }}>\n System\n </Typography>\n <Box sx={{ display: 'flex', gap: 1 }}>\n <Tooltip title=\"Copy diagnostics JSON\">\n <IconButton onClick={handleCopyAll} sx={{ color: 'var(--theme-primary)' }}>\n <ContentCopyIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Refresh\">\n <IconButton onClick={fetchData} sx={{ color: 'var(--theme-primary)' }}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n System information and diagnostics\n </Typography>\n\n <Grid container spacing={3}>\n {/* System Info */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <ComputerIcon sx={{ color: 'var(--theme-primary)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n System Information\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>QwickApps Server</Typography>\n <Chip\n label={diagnostics?.frameworkVersion ? `v${diagnostics.frameworkVersion}` : 'N/A'}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-primary)20', color: 'var(--theme-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Node.js</Typography>\n <Chip\n label={diagnostics?.system.nodeVersion}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-background)', color: 'var(--theme-text-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Platform</Typography>\n <Chip\n label={diagnostics?.system.platform}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-background)', color: 'var(--theme-text-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Architecture</Typography>\n <Chip\n label={diagnostics?.system.arch}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-background)', color: 'var(--theme-text-primary)' }}\n />\n </Box>\n </Box>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Memory Usage */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <MemoryIcon sx={{ color: 'var(--theme-warning)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Memory Usage\n </Typography>\n </Box>\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', mb: 1 }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>\n Heap Used\n </Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {formatBytes(diagnostics?.system.memory.used || 0)}\n </Typography>\n </Box>\n <LinearProgress\n variant=\"determinate\"\n value={memoryUsedPercent}\n sx={{\n height: 8,\n borderRadius: 4,\n bgcolor: 'var(--theme-background)',\n '& .MuiLinearProgress-bar': {\n bgcolor: memoryUsedPercent > 80 ? 'var(--theme-error)' : 'var(--theme-warning)',\n borderRadius: 4,\n },\n }}\n />\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Heap Total</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {formatBytes(diagnostics?.system.memory.total || 0)}\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Heap Free</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {formatBytes(diagnostics?.system.memory.free || 0)}\n </Typography>\n </Box>\n </Box>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Service Info */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <StorageIcon sx={{ color: 'var(--theme-info)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Service Info\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Product</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)' }}>\n {diagnostics?.product}\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Version</Typography>\n <Chip\n label={diagnostics?.version || 'N/A'}\n size=\"small\"\n sx={{ bgcolor: 'var(--theme-primary)20', color: 'var(--theme-primary)' }}\n />\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>Timestamp</Typography>\n <Typography sx={{ color: 'var(--theme-text-primary)', fontSize: '0.875rem' }}>\n {diagnostics?.timestamp ? new Date(diagnostics.timestamp).toLocaleString() : 'N/A'}\n </Typography>\n </Box>\n </Box>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Uptime */}\n <Grid size={{ xs: 12, md: 6 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)', height: '100%' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <AccessTimeIcon sx={{ color: 'var(--theme-success)' }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Uptime\n </Typography>\n </Box>\n <Typography variant=\"h3\" sx={{ color: 'var(--theme-success)', mb: 1 }}>\n {formatUptime(diagnostics?.uptime || 0)}\n </Typography>\n <Typography sx={{ color: 'var(--theme-text-secondary)' }}>\n Service has been running without interruption\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n\n {/* Health Checks */}\n {health && (\n <Grid size={{ xs: 12 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 3 }}>\n <FavoriteIcon sx={{ color: getHealthStatusColor(health.status) }} />\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Health Checks\n </Typography>\n <Chip\n label={health.status}\n size=\"small\"\n sx={{\n bgcolor: getHealthStatusColor(health.status) + '20',\n color: getHealthStatusColor(health.status),\n textTransform: 'capitalize',\n ml: 'auto',\n }}\n />\n </Box>\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Check\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Status\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Latency\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Last Checked\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {Object.entries(health.checks).map(([name, check]) => (\n <TableRow key={name}>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {getHealthStatusIcon(check.status)}\n <Typography fontWeight={500}>{name}</Typography>\n </Box>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Chip\n label={check.status}\n size=\"small\"\n sx={{\n bgcolor: getHealthStatusColor(check.status) + '20',\n color: getHealthStatusColor(check.status),\n textTransform: 'capitalize',\n }}\n />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n {formatLatency(check.latency)}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {new Date(check.lastChecked).toLocaleTimeString()}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </CardContent>\n </Card>\n </Grid>\n )}\n\n {/* Raw JSON */}\n <Grid size={{ xs: 12 }}>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Raw Diagnostics JSON (for AI agents)\n </Typography>\n <Box\n component=\"pre\"\n sx={{\n bgcolor: 'var(--theme-background)',\n p: 2,\n borderRadius: 1,\n overflow: 'auto',\n maxHeight: 300,\n color: 'var(--theme-text-primary)',\n fontFamily: 'monospace',\n fontSize: '0.75rem',\n }}\n >\n {JSON.stringify(diagnostics, null, 2)}\n </Box>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n\n <Snackbar\n open={snackbar.open}\n autoHideDuration={2000}\n onClose={() => setSnackbar({ ...snackbar, open: false })}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n >\n <Alert severity=\"success\" variant=\"filled\">\n {snackbar.message}\n </Alert>\n </Snackbar>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z\"\n}), 'Edit');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z\"\n}), 'Save');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12z\"\n}), 'Cancel');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z\"\n}), 'Delete');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\"\n}), 'ExpandLess');","import { useState, useEffect, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n CircularProgress,\n Alert,\n IconButton,\n Tooltip,\n Button,\n TextField,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n FormControlLabel,\n Switch,\n Divider,\n Collapse,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n} from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport BlockIcon from '@mui/icons-material/Block';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport EditIcon from '@mui/icons-material/Edit';\nimport SaveIcon from '@mui/icons-material/Save';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ExpandLessIcon from '@mui/icons-material/ExpandLess';\nimport {\n api,\n AuthConfigStatus,\n AuthAdapterType,\n Auth0AdapterConfig,\n SupabaseAdapterConfig,\n SupertokensAdapterConfig,\n BasicAdapterConfig,\n UpdateAuthConfigRequest,\n TestProviderResponse,\n} from '../api/controlPanelApi';\n\n/**\n * Get the status color for the auth state\n */\nfunction getStateColor(state: string): string {\n switch (state) {\n case 'enabled':\n return 'var(--theme-success)';\n case 'error':\n return 'var(--theme-error)';\n case 'disabled':\n default:\n return 'var(--theme-text-secondary)';\n }\n}\n\n/**\n * Get the status icon for the auth state\n */\nfunction getStateIcon(state: string) {\n switch (state) {\n case 'enabled':\n return <CheckCircleIcon sx={{ color: 'var(--theme-success)' }} />;\n case 'error':\n return <ErrorIcon sx={{ color: 'var(--theme-error)' }} />;\n case 'disabled':\n default:\n return <BlockIcon sx={{ color: 'var(--theme-text-secondary)' }} />;\n }\n}\n\n// Default empty configs for each adapter type\nconst defaultAuth0Config: Auth0AdapterConfig = {\n domain: '',\n clientId: '',\n clientSecret: '',\n baseUrl: '',\n secret: '',\n audience: '',\n scopes: ['openid', 'profile', 'email'],\n allowedRoles: [],\n allowedDomains: [],\n};\n\nconst defaultSupabaseConfig: SupabaseAdapterConfig = {\n url: '',\n anonKey: '',\n};\n\nconst defaultBasicConfig: BasicAdapterConfig = {\n username: '',\n password: '',\n realm: 'Protected Area',\n};\n\nconst defaultSupertokensConfig: SupertokensAdapterConfig = {\n connectionUri: '',\n apiKey: '',\n appName: '',\n apiDomain: '',\n websiteDomain: '',\n apiBasePath: '/auth',\n websiteBasePath: '/auth',\n enableEmailPassword: true,\n socialProviders: {},\n};\n\ninterface SocialProvider {\n enabled: boolean;\n clientId: string;\n clientSecret: string;\n keyId?: string;\n teamId?: string;\n}\n\nexport function AuthPage() {\n const [status, setStatus] = useState<AuthConfigStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [copied, setCopied] = useState<string | null>(null);\n\n // Edit mode state\n const [editMode, setEditMode] = useState(false);\n const [saving, setSaving] = useState(false);\n const [testing, setTesting] = useState(false);\n const [testResult, setTestResult] = useState<TestProviderResponse | null>(null);\n\n // Form state\n const [selectedAdapter, setSelectedAdapter] = useState<AuthAdapterType | ''>('');\n const [auth0Config, setAuth0Config] = useState<Auth0AdapterConfig>(defaultAuth0Config);\n const [supabaseConfig, setSupabaseConfig] = useState<SupabaseAdapterConfig>(defaultSupabaseConfig);\n const [basicConfig, setBasicConfig] = useState<BasicAdapterConfig>(defaultBasicConfig);\n const [supertokensConfig, setSupertokensConfig] = useState<SupertokensAdapterConfig>(defaultSupertokensConfig);\n const [authRequired, setAuthRequired] = useState(true);\n const [excludePaths, setExcludePaths] = useState('');\n\n // Social providers state (for SuperTokens)\n const [googleProvider, setGoogleProvider] = useState<SocialProvider>({\n enabled: false,\n clientId: '',\n clientSecret: '',\n });\n const [githubProvider, setGithubProvider] = useState<SocialProvider>({\n enabled: false,\n clientId: '',\n clientSecret: '',\n });\n const [appleProvider, setAppleProvider] = useState<SocialProvider>({\n enabled: false,\n clientId: '',\n clientSecret: '',\n keyId: '',\n teamId: '',\n });\n\n // UI state\n const [showSocialProviders, setShowSocialProviders] = useState(false);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n\n const fetchStatus = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const data = await api.getAuthConfig();\n setStatus(data);\n\n // Initialize form from runtime config if available\n if (data.runtimeConfig) {\n const rc = data.runtimeConfig;\n setSelectedAdapter(rc.adapter || '');\n setAuthRequired(rc.settings.authRequired ?? true);\n setExcludePaths(rc.settings.excludePaths?.join(', ') || '');\n\n if (rc.config.auth0) setAuth0Config({ ...defaultAuth0Config, ...rc.config.auth0 });\n if (rc.config.supabase) setSupabaseConfig({ ...defaultSupabaseConfig, ...rc.config.supabase });\n if (rc.config.basic) setBasicConfig({ ...defaultBasicConfig, ...rc.config.basic });\n if (rc.config.supertokens) {\n const st = rc.config.supertokens;\n setSupertokensConfig({ ...defaultSupertokensConfig, ...st });\n if (st.socialProviders?.google) {\n setGoogleProvider({\n enabled: true,\n clientId: st.socialProviders.google.clientId,\n clientSecret: st.socialProviders.google.clientSecret,\n });\n }\n if (st.socialProviders?.github) {\n setGithubProvider({\n enabled: true,\n clientId: st.socialProviders.github.clientId,\n clientSecret: st.socialProviders.github.clientSecret,\n });\n }\n if (st.socialProviders?.apple) {\n setAppleProvider({\n enabled: true,\n clientId: st.socialProviders.apple.clientId,\n clientSecret: st.socialProviders.apple.clientSecret,\n keyId: st.socialProviders.apple.keyId,\n teamId: st.socialProviders.apple.teamId,\n });\n }\n }\n } else if (data.adapter) {\n // Initialize from current adapter if no runtime config\n setSelectedAdapter(data.adapter as AuthAdapterType);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch auth status');\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchStatus();\n }, [fetchStatus]);\n\n const handleCopy = (key: string, value: string) => {\n navigator.clipboard.writeText(value);\n setCopied(key);\n setTimeout(() => setCopied(null), 2000);\n };\n\n const handleEnterEditMode = () => {\n setEditMode(true);\n setTestResult(null);\n };\n\n const handleCancelEdit = () => {\n setEditMode(false);\n setTestResult(null);\n // Reset form to current status\n fetchStatus();\n };\n\n // Helper to convert typed config to plain object for API calls\n // Uses JSON round-trip to ensure clean serialization\n const toPlainObject = <T extends object>(obj: T): Record<string, unknown> =>\n JSON.parse(JSON.stringify(obj));\n\n const getCurrentConfig = (): Record<string, unknown> => {\n switch (selectedAdapter) {\n case 'auth0':\n return toPlainObject(auth0Config);\n case 'supabase':\n return toPlainObject(supabaseConfig);\n case 'basic':\n return toPlainObject(basicConfig);\n case 'supertokens': {\n const config: SupertokensAdapterConfig = { ...supertokensConfig };\n const socialProviders: SupertokensAdapterConfig['socialProviders'] = {};\n if (googleProvider.enabled) {\n socialProviders.google = {\n clientId: googleProvider.clientId,\n clientSecret: googleProvider.clientSecret,\n };\n }\n if (githubProvider.enabled) {\n socialProviders.github = {\n clientId: githubProvider.clientId,\n clientSecret: githubProvider.clientSecret,\n };\n }\n if (appleProvider.enabled) {\n socialProviders.apple = {\n clientId: appleProvider.clientId,\n clientSecret: appleProvider.clientSecret,\n keyId: appleProvider.keyId || '',\n teamId: appleProvider.teamId || '',\n };\n }\n if (Object.keys(socialProviders).length > 0) {\n config.socialProviders = socialProviders;\n }\n return toPlainObject(config);\n }\n default:\n return {};\n }\n };\n\n const handleTestConnection = async () => {\n if (!selectedAdapter) return;\n\n setTesting(true);\n setTestResult(null);\n try {\n const result = await api.testAuthProvider({\n adapter: selectedAdapter,\n config: getCurrentConfig(),\n });\n setTestResult(result);\n } catch (err) {\n setTestResult({\n success: false,\n message: err instanceof Error ? err.message : 'Test failed',\n });\n } finally {\n setTesting(false);\n }\n };\n\n // Test the current connection (env-based or runtime config)\n const handleTestCurrentConnection = async () => {\n if (!status?.adapter) return;\n\n setTesting(true);\n setTestResult(null);\n try {\n // Call the test endpoint with \"current\" flag to test existing config\n const result = await api.testCurrentAuthProvider();\n setTestResult(result);\n } catch (err) {\n setTestResult({\n success: false,\n message: err instanceof Error ? err.message : 'Test failed',\n });\n } finally {\n setTesting(false);\n }\n };\n\n const handleSave = async () => {\n if (!selectedAdapter) return;\n\n setSaving(true);\n setError(null);\n try {\n const request: UpdateAuthConfigRequest = {\n adapter: selectedAdapter,\n config: getCurrentConfig(),\n settings: {\n authRequired,\n excludePaths: excludePaths\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean),\n },\n };\n\n await api.updateAuthConfig(request);\n setEditMode(false);\n await fetchStatus();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save configuration');\n } finally {\n setSaving(false);\n }\n };\n\n const handleDelete = async () => {\n setSaving(true);\n setError(null);\n try {\n await api.deleteAuthConfig();\n setDeleteDialogOpen(false);\n setEditMode(false);\n await fetchStatus();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete configuration');\n } finally {\n setSaving(false);\n }\n };\n\n if (loading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '50vh' }}>\n <CircularProgress />\n </Box>\n );\n }\n\n const configEntries = status?.config ? Object.entries(status.config) : [];\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"h4\" sx={{ color: 'var(--theme-text-primary)' }}>\n Authentication\n </Typography>\n <Box sx={{ display: 'flex', gap: 1 }}>\n {!editMode && (\n <>\n <Tooltip title=\"Edit Configuration\">\n <IconButton onClick={handleEnterEditMode} sx={{ color: 'var(--theme-primary)' }}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Refresh\">\n <IconButton onClick={fetchStatus} sx={{ color: 'var(--theme-text-secondary)' }}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n </>\n )}\n </Box>\n </Box>\n <Typography variant=\"body2\" sx={{ mb: 4, color: 'var(--theme-text-secondary)' }}>\n {editMode ? 'Configure authentication provider' : 'Auth plugin configuration status'}\n </Typography>\n\n {error && (\n <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n {/* Edit Mode */}\n {editMode ? (\n <Box>\n {/* Adapter Selection */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Provider Selection\n </Typography>\n <FormControl fullWidth sx={{ mb: 2 }}>\n <InputLabel sx={{ color: 'var(--theme-text-secondary)' }}>Auth Provider</InputLabel>\n <Select\n value={selectedAdapter}\n onChange={(e) => setSelectedAdapter(e.target.value as AuthAdapterType | '')}\n label=\"Auth Provider\"\n sx={{ color: 'var(--theme-text-primary)' }}\n >\n <MenuItem value=\"\">\n <em>None (Disabled)</em>\n </MenuItem>\n <MenuItem value=\"supertokens\">SuperTokens</MenuItem>\n <MenuItem value=\"auth0\">Auth0</MenuItem>\n <MenuItem value=\"supabase\">Supabase</MenuItem>\n <MenuItem value=\"basic\">Basic Auth</MenuItem>\n </Select>\n </FormControl>\n\n <Box sx={{ display: 'flex', gap: 2, alignItems: 'center' }}>\n <FormControlLabel\n control={\n <Switch\n checked={authRequired}\n onChange={(e) => setAuthRequired(e.target.checked)}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Auth Required\"\n sx={{ color: 'var(--theme-text-primary)' }}\n />\n <TextField\n label=\"Exclude Paths (comma-separated)\"\n value={excludePaths}\n onChange={(e) => setExcludePaths(e.target.value)}\n size=\"small\"\n sx={{ flex: 1, '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n placeholder=\"/api/health, /api/public/*\"\n />\n </Box>\n </CardContent>\n </Card>\n\n {/* Auth0 Config */}\n {selectedAdapter === 'auth0' && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Auth0 Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Domain\"\n value={auth0Config.domain}\n onChange={(e) => setAuth0Config({ ...auth0Config, domain: e.target.value })}\n required\n placeholder=\"your-tenant.auth0.com\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client ID\"\n value={auth0Config.clientId}\n onChange={(e) => setAuth0Config({ ...auth0Config, clientId: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n type=\"password\"\n value={auth0Config.clientSecret}\n onChange={(e) => setAuth0Config({ ...auth0Config, clientSecret: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Base URL\"\n value={auth0Config.baseUrl}\n onChange={(e) => setAuth0Config({ ...auth0Config, baseUrl: e.target.value })}\n required\n placeholder=\"https://your-app.com\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Session Secret\"\n type=\"password\"\n value={auth0Config.secret}\n onChange={(e) => setAuth0Config({ ...auth0Config, secret: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Audience (optional)\"\n value={auth0Config.audience || ''}\n onChange={(e) => setAuth0Config({ ...auth0Config, audience: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n </CardContent>\n </Card>\n )}\n\n {/* Supabase Config */}\n {selectedAdapter === 'supabase' && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Supabase Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Project URL\"\n value={supabaseConfig.url}\n onChange={(e) => setSupabaseConfig({ ...supabaseConfig, url: e.target.value })}\n required\n placeholder=\"https://your-project.supabase.co\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Anon Key\"\n type=\"password\"\n value={supabaseConfig.anonKey}\n onChange={(e) => setSupabaseConfig({ ...supabaseConfig, anonKey: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n </CardContent>\n </Card>\n )}\n\n {/* Basic Auth Config */}\n {selectedAdapter === 'basic' && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Basic Auth Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Username\"\n value={basicConfig.username}\n onChange={(e) => setBasicConfig({ ...basicConfig, username: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Password\"\n type=\"password\"\n value={basicConfig.password}\n onChange={(e) => setBasicConfig({ ...basicConfig, password: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Realm (optional)\"\n value={basicConfig.realm || ''}\n onChange={(e) => setBasicConfig({ ...basicConfig, realm: e.target.value })}\n placeholder=\"Protected Area\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n </CardContent>\n </Card>\n )}\n\n {/* SuperTokens Config */}\n {selectedAdapter === 'supertokens' && (\n <>\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n SuperTokens Configuration\n </Typography>\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2 }}>\n <TextField\n label=\"Connection URI\"\n value={supertokensConfig.connectionUri}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, connectionUri: e.target.value })}\n required\n placeholder=\"http://localhost:3567\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Key (optional)\"\n type=\"password\"\n value={supertokensConfig.apiKey || ''}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, apiKey: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"App Name\"\n value={supertokensConfig.appName}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, appName: e.target.value })}\n required\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Domain\"\n value={supertokensConfig.apiDomain}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, apiDomain: e.target.value })}\n required\n placeholder=\"http://localhost:3000\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Website Domain\"\n value={supertokensConfig.websiteDomain}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, websiteDomain: e.target.value })}\n required\n placeholder=\"http://localhost:3000\"\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"API Base Path\"\n value={supertokensConfig.apiBasePath || '/auth'}\n onChange={(e) => setSupertokensConfig({ ...supertokensConfig, apiBasePath: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n <Box sx={{ mt: 2 }}>\n <FormControlLabel\n control={\n <Switch\n checked={supertokensConfig.enableEmailPassword ?? true}\n onChange={(e) =>\n setSupertokensConfig({ ...supertokensConfig, enableEmailPassword: e.target.checked })\n }\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Enable Email/Password Auth\"\n sx={{ color: 'var(--theme-text-primary)' }}\n />\n </Box>\n </CardContent>\n </Card>\n\n {/* Social Providers */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent sx={{ pb: showSocialProviders ? 2 : 0 }}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n onClick={() => setShowSocialProviders(!showSocialProviders)}\n >\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Social Login Providers\n </Typography>\n {showSocialProviders ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n </Box>\n </CardContent>\n <Collapse in={showSocialProviders}>\n <CardContent sx={{ pt: 0 }}>\n <Divider sx={{ mb: 2 }} />\n\n {/* Google */}\n <Box sx={{ mb: 3 }}>\n <FormControlLabel\n control={\n <Switch\n checked={googleProvider.enabled}\n onChange={(e) => setGoogleProvider({ ...googleProvider, enabled: e.target.checked })}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Google\"\n sx={{ color: 'var(--theme-text-primary)', mb: 1 }}\n />\n {googleProvider.enabled && (\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2, ml: 4 }}>\n <TextField\n label=\"Client ID\"\n size=\"small\"\n value={googleProvider.clientId}\n onChange={(e) => setGoogleProvider({ ...googleProvider, clientId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n size=\"small\"\n type=\"password\"\n value={googleProvider.clientSecret}\n onChange={(e) => setGoogleProvider({ ...googleProvider, clientSecret: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n )}\n </Box>\n\n {/* GitHub */}\n <Box sx={{ mb: 3 }}>\n <FormControlLabel\n control={\n <Switch\n checked={githubProvider.enabled}\n onChange={(e) => setGithubProvider({ ...githubProvider, enabled: e.target.checked })}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"GitHub\"\n sx={{ color: 'var(--theme-text-primary)', mb: 1 }}\n />\n {githubProvider.enabled && (\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2, ml: 4 }}>\n <TextField\n label=\"Client ID\"\n size=\"small\"\n value={githubProvider.clientId}\n onChange={(e) => setGithubProvider({ ...githubProvider, clientId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n size=\"small\"\n type=\"password\"\n value={githubProvider.clientSecret}\n onChange={(e) => setGithubProvider({ ...githubProvider, clientSecret: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n )}\n </Box>\n\n {/* Apple */}\n <Box>\n <FormControlLabel\n control={\n <Switch\n checked={appleProvider.enabled}\n onChange={(e) => setAppleProvider({ ...appleProvider, enabled: e.target.checked })}\n sx={{ '& .MuiSwitch-switchBase.Mui-checked': { color: 'var(--theme-primary)' } }}\n />\n }\n label=\"Apple\"\n sx={{ color: 'var(--theme-text-primary)', mb: 1 }}\n />\n {appleProvider.enabled && (\n <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 2, ml: 4 }}>\n <TextField\n label=\"Client ID\"\n size=\"small\"\n value={appleProvider.clientId}\n onChange={(e) => setAppleProvider({ ...appleProvider, clientId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Client Secret\"\n size=\"small\"\n type=\"password\"\n value={appleProvider.clientSecret}\n onChange={(e) => setAppleProvider({ ...appleProvider, clientSecret: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Key ID\"\n size=\"small\"\n value={appleProvider.keyId || ''}\n onChange={(e) => setAppleProvider({ ...appleProvider, keyId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n <TextField\n label=\"Team ID\"\n size=\"small\"\n value={appleProvider.teamId || ''}\n onChange={(e) => setAppleProvider({ ...appleProvider, teamId: e.target.value })}\n sx={{ '& .MuiInputBase-input': { color: 'var(--theme-text-primary)' } }}\n />\n </Box>\n )}\n </Box>\n </CardContent>\n </Collapse>\n </Card>\n </>\n )}\n\n {/* Test Result */}\n {testResult && (\n <Alert severity={testResult.success ? 'success' : 'error'} sx={{ mb: 3 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {testResult.success ? 'Connection Successful' : 'Connection Failed'}\n </Typography>\n <Typography variant=\"body2\">{testResult.message}</Typography>\n {testResult.details?.latency && (\n <Typography variant=\"caption\" sx={{ display: 'block', mt: 0.5 }}>\n Latency: {testResult.details.latency}ms\n </Typography>\n )}\n </Alert>\n )}\n\n {/* Action Buttons */}\n <Box sx={{ display: 'flex', gap: 2, justifyContent: 'space-between' }}>\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Button\n variant=\"outlined\"\n startIcon={<CancelIcon />}\n onClick={handleCancelEdit}\n disabled={saving}\n sx={{\n color: 'var(--theme-text-secondary)',\n borderColor: 'var(--theme-border)',\n }}\n >\n Cancel\n </Button>\n {status?.runtimeConfig && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n startIcon={<DeleteIcon />}\n onClick={() => setDeleteDialogOpen(true)}\n disabled={saving}\n >\n Reset to Env Vars\n </Button>\n )}\n </Box>\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Button\n variant=\"outlined\"\n startIcon={testing ? <CircularProgress size={16} /> : <PlayArrowIcon />}\n onClick={handleTestConnection}\n disabled={!selectedAdapter || testing || saving}\n sx={{\n color: 'var(--theme-text-primary)',\n borderColor: 'var(--theme-border)',\n }}\n >\n Test Connection\n </Button>\n <Button\n variant=\"contained\"\n startIcon={saving ? <CircularProgress size={16} sx={{ color: 'white' }} /> : <SaveIcon />}\n onClick={handleSave}\n disabled={saving}\n sx={{\n bgcolor: 'var(--theme-primary)',\n '&:hover': { bgcolor: 'var(--theme-primary-dark)' },\n }}\n >\n Save Configuration\n </Button>\n </Box>\n </Box>\n </Box>\n ) : (\n <>\n {/* Status Card (Read-only view) */}\n <Card sx={{ bgcolor: 'var(--theme-surface)', mb: 3 }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, mb: 2 }}>\n {getStateIcon(status?.state || 'disabled')}\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)' }}>\n Status:{' '}\n <Chip\n label={status?.state?.toUpperCase() || 'UNKNOWN'}\n size=\"small\"\n sx={{\n bgcolor: `${getStateColor(status?.state || 'disabled')}20`,\n color: getStateColor(status?.state || 'disabled'),\n fontWeight: 600,\n }}\n />\n </Typography>\n {status?.adapter && (\n <Typography variant=\"body2\" sx={{ color: 'var(--theme-text-secondary)', mt: 0.5 }}>\n Adapter: <strong>{status.adapter}</strong>\n </Typography>\n )}\n </Box>\n {/* Test Current Connection Button */}\n {status?.state === 'enabled' && status?.adapter && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={testing ? <CircularProgress size={14} /> : <PlayArrowIcon />}\n onClick={handleTestCurrentConnection}\n disabled={testing}\n sx={{\n color: 'var(--theme-text-primary)',\n borderColor: 'var(--theme-border)',\n }}\n >\n Test Connection\n </Button>\n )}\n </Box>\n\n {/* Test Result for current connection */}\n {testResult && !editMode && (\n <Alert severity={testResult.success ? 'success' : 'error'} sx={{ mb: 2 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n {testResult.success ? 'Connection Successful' : 'Connection Failed'}\n </Typography>\n <Typography variant=\"body2\">{testResult.message}</Typography>\n {testResult.details?.latency && (\n <Typography variant=\"caption\" sx={{ display: 'block', mt: 0.5 }}>\n Latency: {testResult.details.latency}ms\n </Typography>\n )}\n </Alert>\n )}\n\n {/* Environment Variables Config Badge */}\n {status?.state === 'enabled' && !status?.runtimeConfig && (\n <Alert severity=\"success\" sx={{ mb: 2 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n Configured via Environment Variables\n </Typography>\n <Typography variant=\"body2\">\n Authentication is configured using environment variables. Click \"Edit\" to override with runtime\n configuration (requires PostgreSQL).\n </Typography>\n </Alert>\n )}\n\n {/* Runtime Config Badge */}\n {status?.runtimeConfig && (\n <Chip\n label=\"Runtime Configuration Active\"\n size=\"small\"\n sx={{\n bgcolor: 'var(--theme-primary)',\n color: 'white',\n mb: 2,\n }}\n />\n )}\n\n {/* Error Message */}\n {status?.state === 'error' && status.error && (\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n {status.error}\n </Alert>\n )}\n\n {/* Missing Variables */}\n {status?.missingVars && status.missingVars.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: 2 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 600, mb: 1 }}>\n Missing environment variables:\n </Typography>\n <Box component=\"ul\" sx={{ m: 0, pl: 2 }}>\n {status.missingVars.map((v) => (\n <li key={v}>\n <code>{v}</code>\n </li>\n ))}\n </Box>\n </Alert>\n )}\n\n {/* Disabled State Info */}\n {status?.state === 'disabled' && (\n <Alert severity=\"info\">\n <Typography variant=\"body2\">\n Authentication is disabled. Click the edit button to configure a provider, or set the{' '}\n <code>AUTH_ADAPTER</code> environment variable.\n </Typography>\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n Valid options: <code>supertokens</code>, <code>auth0</code>, <code>supabase</code>,{' '}\n <code>basic</code>\n </Typography>\n </Alert>\n )}\n </CardContent>\n </Card>\n\n {/* Configuration Table */}\n {configEntries.length > 0 && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ pb: 0 }}>\n <Typography variant=\"h6\" sx={{ color: 'var(--theme-text-primary)', mb: 2 }}>\n Current Configuration\n </Typography>\n </CardContent>\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Variable\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n Value\n </TableCell>\n <TableCell\n sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', width: 60 }}\n >\n Actions\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {configEntries.map(([key, value]) => (\n <TableRow key={key}>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Typography\n sx={{ color: 'var(--theme-text-primary)', fontFamily: 'monospace', fontSize: 13 }}\n >\n {key}\n </Typography>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Typography\n sx={{\n color: value.includes('*') ? 'var(--theme-text-secondary)' : 'var(--theme-text-primary)',\n fontFamily: 'monospace',\n fontSize: 13,\n }}\n >\n {value}\n </Typography>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Tooltip title={copied === key ? 'Copied!' : 'Copy value'}>\n <IconButton\n size=\"small\"\n onClick={() => handleCopy(key, value)}\n sx={{ color: copied === key ? 'var(--theme-success)' : 'var(--theme-text-secondary)' }}\n >\n <ContentCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Card>\n )}\n\n {/* No Configuration */}\n {status?.state === 'enabled' && configEntries.length === 0 && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Typography sx={{ color: 'var(--theme-text-secondary)', textAlign: 'center' }}>\n No configuration details available\n </Typography>\n </CardContent>\n </Card>\n )}\n </>\n )}\n\n {/* Delete Confirmation Dialog */}\n <Dialog open={deleteDialogOpen} onClose={() => setDeleteDialogOpen(false)}>\n <DialogTitle>Reset to Environment Variables?</DialogTitle>\n <DialogContent>\n <Typography>\n This will delete the runtime configuration from the database. The auth plugin will fall back to environment\n variables on the next request.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setDeleteDialogOpen(false)}>Cancel</Button>\n <Button onClick={handleDelete} color=\"error\" disabled={saving}>\n {saving ? <CircularProgress size={20} /> : 'Reset'}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"\n}), 'Home');","import { Box, Typography, Button } from '@mui/material';\nimport { useNavigate } from 'react-router-dom';\nimport HomeIcon from '@mui/icons-material/Home';\n\nexport function NotFoundPage() {\n const navigate = useNavigate();\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '50vh',\n textAlign: 'center',\n }}\n >\n <Typography variant=\"h1\" sx={{ color: 'var(--theme-primary)', mb: 2 }}>\n 404\n </Typography>\n <Typography variant=\"h5\" sx={{ color: 'var(--theme-text-primary)', mb: 1 }}>\n Page Not Found\n </Typography>\n <Typography sx={{ color: 'var(--theme-text-secondary)', mb: 4 }}>\n The page you're looking for doesn't exist or has been moved.\n </Typography>\n <Button\n variant=\"contained\"\n startIcon={<HomeIcon />}\n onClick={() => navigate('/')}\n sx={{\n bgcolor: 'var(--theme-primary)',\n '&:hover': { bgcolor: 'var(--theme-primary)' },\n }}\n >\n Back to Dashboard\n </Button>\n </Box>\n );\n}\n","/**\n * ControlPanelApp Component\n *\n * A wrapper around QwickApp that provides control panel functionality.\n * Injects base control panel routes (Dashboard, Health, Logs, System)\n * and allows consumers to add custom routes.\n *\n * Usage:\n * ```tsx\n * import { ControlPanelApp } from '@qwickapps/server/ui';\n *\n * function App() {\n * return (\n * <ControlPanelApp\n * productName=\"My Service\"\n * logo={<MyLogo />}\n * customDashboard={<MyDashboard />}\n * >\n * <Route path=\"/users\" element={<UsersPage />} />\n * <Route path=\"/settings\" element={<SettingsPage />} />\n * </ControlPanelApp>\n * );\n * }\n * ```\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { ReactNode, useState, useEffect } from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport { Box, Link } from '@mui/material';\nimport { QwickApp, ProductLogo, Text, type MenuItem } from '@qwickapps/react-framework';\nimport { defaultConfig } from '../config/AppConfig';\n\n// Base pages\nimport { DashboardPage } from '../pages/DashboardPage';\nimport { LogsPage } from '../pages/LogsPage';\nimport { SystemPage } from '../pages/SystemPage';\nimport { AuthPage } from '../pages/AuthPage';\nimport { NotFoundPage } from '../pages/NotFoundPage';\n\n// Dashboard widget system\nimport {\n DashboardWidgetProvider,\n WidgetComponentRegistryProvider,\n getBuiltInWidgetComponents,\n type DashboardWidget,\n type WidgetComponent,\n} from '../dashboard';\n\n// API\nimport { api } from '../api/controlPanelApi';\n\nexport interface ControlPanelAppProps {\n /** Product name displayed in the header */\n productName?: string;\n\n /** Custom logo component */\n logo?: ReactNode;\n\n /** Custom footer content (replaces default) */\n footerContent?: ReactNode;\n\n /** Initial dashboard widgets to register (legacy context-based system) */\n dashboardWidgets?: DashboardWidget[];\n\n /**\n * Widget components to register for the plugin-based widget system.\n * These map component names (from server WidgetContribution) to React components.\n * Built-in widgets (ServiceHealthWidget, etc.) are registered automatically.\n */\n widgetComponents?: WidgetComponent[];\n\n /** Additional navigation items to add to the base control panel nav */\n navigationItems?: MenuItem[];\n\n /** Whether to show the base control panel navigation (Dashboard, Health, etc.) */\n showBaseNavigation?: boolean;\n\n /** Base navigation item IDs to hide (e.g., ['health'] to hide the Health page) */\n hideBaseNavItems?: string[];\n\n /** Whether to show theme switcher in settings */\n showThemeSwitcher?: boolean;\n\n /** Whether to show palette switcher in settings */\n showPaletteSwitcher?: boolean;\n\n /** Base path for the control panel (e.g., '/cpanel') */\n basePath?: string;\n\n /** Custom routes to add (as Route elements) */\n children?: ReactNode;\n}\n\n/**\n * Default footer with QwickApps Server branding\n */\nfunction DefaultFooter({ version }: { version: string }) {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 0.5, py: 2 }}>\n <Text variant=\"caption\" customColor=\"var(--theme-text-secondary)\">\n Built with{' '}\n <Link\n href=\"https://qwickapps.com/products/qwickapps-server\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n sx={{ color: 'primary.main' }}\n >\n QwickApps Server\n </Link>\n {version && ` v${version}`}\n </Text>\n </Box>\n );\n}\n\n/**\n * Base navigation items for control panel\n * Routes are relative to BrowserRouter's basename (handled by NavigationProvider in QwickApp)\n */\nfunction getBaseNavigationItems(): MenuItem[] {\n return [\n { id: 'dashboard', label: 'Dashboard', route: '/', icon: 'dashboard' },\n { id: 'logs', label: 'Logs', route: '/logs', icon: 'article' },\n { id: 'auth', label: 'Auth', route: '/auth', icon: 'lock' },\n { id: 'system', label: 'System', route: '/system', icon: 'settings' },\n ];\n}\n\nexport function ControlPanelApp({\n productName = 'Control Panel',\n logo,\n footerContent,\n dashboardWidgets = [],\n widgetComponents = [],\n navigationItems = [],\n showBaseNavigation = true,\n hideBaseNavItems = [],\n showThemeSwitcher = true,\n showPaletteSwitcher = true,\n basePath = '',\n children,\n}: ControlPanelAppProps) {\n const [version, setVersion] = useState<string>('');\n\n // Combine built-in widget components with custom ones\n const allWidgetComponents = [...getBuiltInWidgetComponents(), ...widgetComponents];\n\n // Configure API base URL based on basePath - do this synchronously before any renders\n // If basePath is '/cpanel', API is at '/cpanel/api'\n // If basePath is '' or '/', API is at '/api'\n const apiBasePath = basePath && basePath !== '/' ? basePath : '';\n api.setBaseUrl(apiBasePath);\n\n // Fetch version from API\n useEffect(() => {\n api.getInfo()\n .then((info) => setVersion(info.version || ''))\n .catch(() => {});\n }, [apiBasePath]); // Re-fetch when apiBasePath changes\n\n // Build navigation: base items (filtered by hideBaseNavItems) + custom items\n // Navigation routes are relative to BrowserRouter's basename\n const filteredBaseItems = showBaseNavigation\n ? getBaseNavigationItems().filter(item => !hideBaseNavItems.includes(item.id))\n : [];\n const allNavigationItems: MenuItem[] = [\n ...filteredBaseItems,\n ...navigationItems,\n ];\n\n // Default logo if not provided\n const effectiveLogo = logo || <ProductLogo name={productName} />;\n\n // Default footer if not provided\n const effectiveFooter = footerContent || <DefaultFooter version={version} />;\n\n return (\n <WidgetComponentRegistryProvider initialComponents={allWidgetComponents}>\n <DashboardWidgetProvider initialWidgets={dashboardWidgets}>\n <QwickApp\n config={defaultConfig}\n logo={effectiveLogo}\n footerContent={effectiveFooter}\n enableScaffolding={true}\n navigationItems={allNavigationItems}\n showThemeSwitcher={showThemeSwitcher}\n showPaletteSwitcher={showPaletteSwitcher}\n >\n <Routes>\n {/* Base control panel routes (filtered by hideBaseNavItems) */}\n {showBaseNavigation && (\n <>\n {!hideBaseNavItems.includes('dashboard') && <Route path=\"/\" element={<DashboardPage />} />}\n {!hideBaseNavItems.includes('logs') && <Route path=\"/logs\" element={<LogsPage />} />}\n {!hideBaseNavItems.includes('auth') && <Route path=\"/auth\" element={<AuthPage />} />}\n {!hideBaseNavItems.includes('system') && <Route path=\"/system\" element={<SystemPage />} />}\n </>\n )}\n\n {/* Custom routes from consumer */}\n {children}\n\n {/* Catch-all for 404 */}\n <Route path=\"*\" element={<NotFoundPage />} />\n </Routes>\n </QwickApp>\n </DashboardWidgetProvider>\n </WidgetComponentRegistryProvider>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m21.41 11.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58s1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41s-.23-1.06-.59-1.42M5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7\"\n}), 'LocalOffer');","/**\n * UsersPage Component\n *\n * Generic user management page that works with Users, Bans, and Entitlements plugins.\n * All features are optional and auto-detected based on available plugins.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n TextField,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n Alert,\n LinearProgress,\n InputAdornment,\n Tabs,\n Tab,\n TablePagination,\n Tooltip,\n IconButton,\n CircularProgress,\n Autocomplete,\n} from '@mui/material';\nimport { Text, Button, Dialog, DialogTitle, DialogContent, DialogActions, GridLayout } from '@qwickapps/react-framework';\nimport SearchIcon from '@mui/icons-material/Search';\nimport PersonIcon from '@mui/icons-material/Person';\nimport LocalOfferIcon from '@mui/icons-material/LocalOffer';\nimport BlockIcon from '@mui/icons-material/Block';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport {\n api,\n type User,\n type Ban,\n type EntitlementResult,\n type EntitlementDefinition,\n type PluginFeatures,\n} from '../api/controlPanelApi';\n\nexport interface UsersPageProps {\n /** Page title */\n title?: string;\n /** Page subtitle */\n subtitle?: string;\n /** Override automatic feature detection */\n features?: Partial<PluginFeatures>;\n /** Custom actions to render in the header */\n headerActions?: React.ReactNode;\n /** Callback when a user is selected */\n onUserSelect?: (user: User) => void;\n}\n\nexport function UsersPage({\n title = 'User Management',\n subtitle = 'Manage users, bans, and entitlements',\n features: featureOverrides,\n headerActions,\n onUserSelect,\n}: UsersPageProps) {\n // Feature detection\n const [features, setFeatures] = useState<PluginFeatures>({\n users: featureOverrides?.users ?? true,\n bans: featureOverrides?.bans ?? false,\n entitlements: featureOverrides?.entitlements ?? false,\n entitlementsReadonly: featureOverrides?.entitlementsReadonly ?? true,\n });\n const [featuresLoaded, setFeaturesLoaded] = useState(!!featureOverrides);\n\n // Tab state\n const [activeTab, setActiveTab] = useState(0);\n\n // Users state\n const [users, setUsers] = useState<User[]>([]);\n const [usersTotal, setUsersTotal] = useState(0);\n const [usersPage, setUsersPage] = useState(0);\n const [usersPerPage, setUsersPerPage] = useState(25);\n const [usersSearch, setUsersSearch] = useState('');\n\n // User entitlements cache (email -> count)\n const [userEntitlementCounts, setUserEntitlementCounts] = useState<Record<string, number>>({});\n\n // Banned users state\n const [bans, setBans] = useState<Ban[]>([]);\n const [bansTotal, setBansTotal] = useState(0);\n\n // Invitations state\n const [invitations, setInvitations] = useState<User[]>([]);\n const [invitationsTotal, setInvitationsTotal] = useState(0);\n\n // Shared state\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n\n // Ban dialog state\n const [banDialogOpen, setBanDialogOpen] = useState(false);\n const [newBan, setNewBan] = useState({\n email: '',\n reason: '',\n expiresAt: '',\n });\n\n // Invite dialog state\n const [inviteDialogOpen, setInviteDialogOpen] = useState(false);\n const [newInvite, setNewInvite] = useState({\n email: '',\n name: '',\n role: '',\n expiresInDays: 7,\n });\n const [inviteResult, setInviteResult] = useState<{ token: string; inviteLink: string } | null>(null);\n\n // Entitlements lookup state\n const [entitlementsDialogOpen, setEntitlementsDialogOpen] = useState(false);\n const [entitlementsSearch, setEntitlementsSearch] = useState('');\n const [entitlementsLoading, setEntitlementsLoading] = useState(false);\n const [entitlementsRefreshing, setEntitlementsRefreshing] = useState(false);\n const [entitlementsData, setEntitlementsData] = useState<EntitlementResult | null>(null);\n const [entitlementsError, setEntitlementsError] = useState<string | null>(null);\n\n // Available entitlements (for grant dropdown)\n const [availableEntitlements, setAvailableEntitlements] = useState<EntitlementDefinition[]>([]);\n const [selectedEntitlement, setSelectedEntitlement] = useState<string>('');\n const [grantingEntitlement, setGrantingEntitlement] = useState(false);\n\n // Detect features on mount\n useEffect(() => {\n if (featureOverrides) return;\n\n api.detectFeatures().then((detected) => {\n setFeatures(detected);\n setFeaturesLoaded(true);\n }).catch(() => {\n setFeaturesLoaded(true);\n });\n }, [featureOverrides]);\n\n // Fetch available entitlements when features are loaded\n useEffect(() => {\n if (featuresLoaded && features.entitlements && !features.entitlementsReadonly) {\n api.getAvailableEntitlements().then(setAvailableEntitlements).catch(() => {});\n }\n }, [featuresLoaded, features.entitlements, features.entitlementsReadonly]);\n\n // Fetch users\n const fetchUsers = useCallback(async () => {\n if (!features.users) return;\n\n setLoading(true);\n try {\n const data = await api.getUsers({\n limit: usersPerPage,\n page: usersPage,\n search: usersSearch || undefined,\n });\n setUsers(data.users || []);\n setUsersTotal(data.total);\n setError(null);\n\n // Fetch entitlement counts for visible users if entitlements plugin is enabled\n if (features.entitlements && data.users?.length) {\n const counts: Record<string, number> = {};\n await Promise.all(\n data.users.map(async (user) => {\n try {\n const ent = await api.getEntitlements(user.email);\n counts[user.email] = ent.entitlements.length;\n } catch {\n counts[user.email] = 0;\n }\n })\n );\n setUserEntitlementCounts((prev) => ({ ...prev, ...counts }));\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch users');\n } finally {\n setLoading(false);\n }\n }, [features.users, features.entitlements, usersPage, usersPerPage, usersSearch]);\n\n // Fetch bans\n const fetchBans = useCallback(async () => {\n if (!features.bans) return;\n\n setLoading(true);\n try {\n const data = await api.getBans();\n setBans(data.bans || []);\n setBansTotal(data.total);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch bans');\n } finally {\n setLoading(false);\n }\n }, [features.bans]);\n\n // Fetch invitations\n const fetchInvitations = useCallback(async () => {\n if (!features.users) return;\n\n setLoading(true);\n try {\n const data = await api.getInvitations();\n setInvitations(data.users || []);\n setInvitationsTotal(data.total);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch invitations');\n } finally {\n setLoading(false);\n }\n }, [features.users]);\n\n // Initial fetch and tab-based fetching\n useEffect(() => {\n if (!featuresLoaded) return;\n\n if (activeTab === 0 && features.users) {\n fetchUsers();\n } else if (activeTab === 1 && features.bans) {\n fetchBans();\n } else if (activeTab === 2 && features.users) {\n fetchInvitations();\n }\n }, [activeTab, featuresLoaded, features.users, features.bans, fetchUsers, fetchBans, fetchInvitations]);\n\n // Fetch bans count for stats (only on initial load)\n useEffect(() => {\n if (featuresLoaded && features.bans) {\n fetchBans();\n }\n }, [featuresLoaded, features.bans, fetchBans]);\n\n // Debounced search\n useEffect(() => {\n if (!featuresLoaded) return;\n\n const timeout = setTimeout(() => {\n if (activeTab === 0 && features.users) {\n setUsersPage(0);\n fetchUsers();\n }\n }, 300);\n return () => clearTimeout(timeout);\n }, [usersSearch, activeTab, featuresLoaded, features.users, fetchUsers]);\n\n // Ban handlers\n const handleBanUser = async () => {\n try {\n await api.banUser(newBan.email, newBan.reason, newBan.expiresAt || undefined);\n setSuccess('User banned successfully');\n setBanDialogOpen(false);\n setNewBan({ email: '', reason: '', expiresAt: '' });\n fetchBans();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to ban user');\n }\n };\n\n const handleUnbanUser = async (email: string) => {\n if (!confirm('Unban this user?')) return;\n\n try {\n await api.unbanUser(email);\n setSuccess('User unbanned successfully');\n fetchBans();\n } catch (err) {\n setError('Failed to unban user');\n }\n };\n\n // Invite handlers\n const handleInviteUser = async () => {\n try {\n const result = await api.inviteUser({\n email: newInvite.email,\n name: newInvite.name || undefined,\n role: newInvite.role || undefined,\n expiresInDays: newInvite.expiresInDays,\n });\n setInviteResult({ token: result.token, inviteLink: result.inviteLink });\n setSuccess('User invitation created successfully');\n fetchUsers();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to invite user');\n }\n };\n\n const handleCopyInviteLink = () => {\n if (inviteResult) {\n navigator.clipboard.writeText(inviteResult.inviteLink);\n setSuccess('Invite link copied to clipboard');\n }\n };\n\n const handleCloseInviteDialog = () => {\n setInviteDialogOpen(false);\n setNewInvite({ email: '', name: '', role: '', expiresInDays: 7 });\n setInviteResult(null);\n };\n\n // Entitlements handlers\n const handleEntitlementsSearch = async () => {\n if (!entitlementsSearch.trim()) {\n setEntitlementsError('Please enter an email address');\n return;\n }\n\n setEntitlementsLoading(true);\n setEntitlementsError(null);\n setEntitlementsData(null);\n\n try {\n const data = await api.getEntitlements(entitlementsSearch);\n setEntitlementsData(data);\n } catch (err) {\n setEntitlementsError(err instanceof Error ? err.message : 'Failed to lookup entitlements');\n } finally {\n setEntitlementsLoading(false);\n }\n };\n\n const handleEntitlementsRefresh = async () => {\n if (!entitlementsData) return;\n\n setEntitlementsRefreshing(true);\n try {\n const data = await api.refreshEntitlements(entitlementsSearch);\n setEntitlementsData(data);\n } catch (err) {\n setEntitlementsError('Failed to refresh entitlements');\n } finally {\n setEntitlementsRefreshing(false);\n }\n };\n\n const handleGrantEntitlement = async () => {\n if (!selectedEntitlement || !entitlementsData) return;\n\n setGrantingEntitlement(true);\n try {\n await api.grantEntitlement(entitlementsData.identifier, selectedEntitlement);\n setSuccess(`Entitlement \"${selectedEntitlement}\" granted`);\n setSelectedEntitlement('');\n // Refresh to show new entitlement\n const data = await api.refreshEntitlements(entitlementsData.identifier);\n setEntitlementsData(data);\n // Update count cache\n setUserEntitlementCounts((prev) => ({\n ...prev,\n [entitlementsData.identifier]: data.entitlements.length,\n }));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to grant entitlement');\n } finally {\n setGrantingEntitlement(false);\n }\n };\n\n const handleRevokeEntitlement = async (entitlement: string) => {\n if (!entitlementsData) return;\n if (!confirm(`Revoke \"${entitlement}\" from ${entitlementsData.identifier}?`)) return;\n\n try {\n await api.revokeEntitlement(entitlementsData.identifier, entitlement);\n setSuccess(`Entitlement \"${entitlement}\" revoked`);\n // Refresh to show updated entitlements\n const data = await api.refreshEntitlements(entitlementsData.identifier);\n setEntitlementsData(data);\n // Update count cache\n setUserEntitlementCounts((prev) => ({\n ...prev,\n [entitlementsData.identifier]: data.entitlements.length,\n }));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to revoke entitlement');\n }\n };\n\n const openEntitlementsDialog = (email?: string) => {\n if (email) {\n setEntitlementsSearch(email);\n // Auto-search when opened with email\n setEntitlementsLoading(true);\n setEntitlementsError(null);\n setEntitlementsData(null);\n api.getEntitlements(email)\n .then(setEntitlementsData)\n .catch((err) => setEntitlementsError(err instanceof Error ? err.message : 'Failed to lookup entitlements'))\n .finally(() => setEntitlementsLoading(false));\n }\n setEntitlementsDialogOpen(true);\n };\n\n // Utility functions\n const formatDate = (date: string | null | undefined) => {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n };\n\n // Get entitlements that can be granted (not already assigned)\n const grantableEntitlements = availableEntitlements.filter(\n (e) => !entitlementsData?.entitlements.includes(e.name)\n );\n\n // Build tabs based on available features\n const tabs: { label: string; count?: number }[] = [];\n if (features.users) tabs.push({ label: 'Users', count: usersTotal });\n if (features.bans) tabs.push({ label: 'Banned', count: bansTotal });\n if (features.users) tabs.push({ label: 'Invitations', count: invitationsTotal });\n\n if (!featuresLoaded) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 8 }}>\n <CircularProgress />\n </Box>\n );\n }\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 3 }}>\n <Box>\n <Text variant=\"h4\" content={title} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={subtitle} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n <Box sx={{ display: 'flex', gap: 1 }}>\n {headerActions}\n {features.users && (\n <Button\n variant=\"primary\"\n icon=\"person_add\"\n label=\"Invite User\"\n onClick={() => setInviteDialogOpen(true)}\n />\n )}\n {features.entitlements && (\n <Button\n variant=\"outlined\"\n icon=\"person_search\"\n label=\"Lookup Entitlements\"\n onClick={() => openEntitlementsDialog()}\n />\n )}\n {features.bans && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n icon=\"block\"\n label=\"Ban User\"\n onClick={() => setBanDialogOpen(true)}\n />\n )}\n </Box>\n </Box>\n\n {loading && <LinearProgress sx={{ mb: 2 }} />}\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)} sx={{ mb: 2 }}>\n {error}\n </Alert>\n )}\n\n {success && (\n <Alert severity=\"success\" onClose={() => setSuccess(null)} sx={{ mb: 2 }}>\n {success}\n </Alert>\n )}\n\n {/* Stats Cards */}\n {features.users && (\n <GridLayout columns={features.bans ? 3 : 2} spacing=\"medium\" sx={{ mb: 3 }} equalHeight>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <PersonIcon sx={{ fontSize: 40, color: 'var(--theme-primary)' }} />\n <Box>\n <Text variant=\"h4\" content={usersTotal.toLocaleString()} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content=\"Total Users\" customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n {features.entitlements && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <LocalOfferIcon sx={{ fontSize: 40, color: 'var(--theme-success)' }} />\n <Box>\n <Text variant=\"body1\" fontWeight=\"500\" content=\"Entitlements\" customColor=\"var(--theme-text-primary)\" />\n <Text\n variant=\"body2\"\n content={features.entitlementsReadonly ? 'Read-only Mode' : 'Plugin Active'}\n customColor={features.entitlementsReadonly ? 'var(--theme-warning)' : 'var(--theme-success)'}\n />\n </Box>\n </Box>\n </CardContent>\n </Card>\n )}\n\n {features.bans && (\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <BlockIcon sx={{ fontSize: 40, color: bansTotal > 0 ? 'var(--theme-error)' : 'var(--theme-text-secondary)' }} />\n <Box>\n <Text variant=\"h4\" content={bansTotal.toString()} customColor={bansTotal > 0 ? 'var(--theme-error)' : 'var(--theme-text-primary)'} />\n <Text variant=\"body2\" content=\"Banned Users\" customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n )}\n </GridLayout>\n )}\n\n {/* Main Content */}\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n {tabs.length > 1 && (\n <Tabs\n value={activeTab}\n onChange={(_, v) => setActiveTab(v)}\n sx={{ borderBottom: 1, borderColor: 'var(--theme-border)', px: 2 }}\n >\n {tabs.map((tab, idx) => (\n <Tab key={idx} label={`${tab.label}${tab.count !== undefined ? ` (${tab.count})` : ''}`} />\n ))}\n </Tabs>\n )}\n\n <CardContent sx={{ p: 0 }}>\n {/* Search Bar */}\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'var(--theme-border)' }}>\n <TextField\n size=\"small\"\n placeholder=\"Search by email or name...\"\n value={usersSearch}\n onChange={(e) => setUsersSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'var(--theme-text-secondary)' }} />\n </InputAdornment>\n ),\n }}\n sx={{ minWidth: 300 }}\n />\n </Box>\n\n {/* Users Tab */}\n {activeTab === 0 && features.users && (\n <>\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>ID</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Name</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Email</TableCell>\n {features.entitlements && (\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"center\">Entitlements</TableCell>\n )}\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Created</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"right\">Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {users.map((user) => (\n <TableRow\n key={user.id}\n hover\n sx={{ cursor: onUserSelect ? 'pointer' : 'default' }}\n onClick={() => onUserSelect?.(user)}\n >\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', fontFamily: 'monospace', fontSize: '0.75rem' }}>\n {user.id.substring(0, 8)}...\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Text variant=\"body1\" content={user.name || '--'} fontWeight=\"500\" />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n {user.email}\n </TableCell>\n {features.entitlements && (\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"center\">\n <Chip\n size=\"small\"\n icon={<LocalOfferIcon sx={{ fontSize: 14 }} />}\n label={userEntitlementCounts[user.email] ?? '...'}\n sx={{\n bgcolor: 'var(--theme-primary)20',\n color: 'var(--theme-primary)',\n }}\n />\n </TableCell>\n )}\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {formatDate(user.created_at)}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"right\">\n {features.entitlements && (\n <Tooltip title=\"View entitlements\">\n <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); openEntitlementsDialog(user.email); }}>\n <LocalOfferIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n </TableCell>\n </TableRow>\n ))}\n {users.length === 0 && !loading && (\n <TableRow>\n <TableCell colSpan={features.entitlements ? 6 : 5} align=\"center\" sx={{ py: 4, color: 'var(--theme-text-secondary)' }}>\n {usersSearch ? 'No users match your search' : 'No users found'}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n component=\"div\"\n count={usersTotal}\n page={usersPage}\n onPageChange={(_, page) => setUsersPage(page)}\n rowsPerPage={usersPerPage}\n onRowsPerPageChange={(e) => {\n setUsersPerPage(parseInt(e.target.value, 10));\n setUsersPage(0);\n }}\n rowsPerPageOptions={[10, 25, 50, 100]}\n sx={{ borderTop: 1, borderColor: 'var(--theme-border)' }}\n />\n </>\n )}\n\n {/* Banned Users Tab */}\n {activeTab === 1 && features.bans && (\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Email</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Reason</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Banned At</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Expires</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Banned By</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"right\">Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {bans.map((ban) => (\n <TableRow key={ban.id}>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Text variant=\"body1\" content={ban.email} fontWeight=\"500\" />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', maxWidth: 200 }}>\n <Text variant=\"body2\" content={ban.reason} noWrap />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {formatDate(ban.banned_at)}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Chip\n size=\"small\"\n label={ban.expires_at ? formatDate(ban.expires_at) : 'Permanent'}\n sx={{\n bgcolor: ban.expires_at ? 'var(--theme-warning)20' : 'var(--theme-error)20',\n color: ban.expires_at ? 'var(--theme-warning)' : 'var(--theme-error)',\n }}\n />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {ban.banned_by}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"right\">\n <Button\n buttonSize=\"small\"\n variant=\"text\"\n color=\"success\"\n icon=\"check_circle\"\n label=\"Unban\"\n onClick={() => handleUnbanUser(ban.email)}\n />\n </TableCell>\n </TableRow>\n ))}\n {bans.length === 0 && !loading && (\n <TableRow>\n <TableCell colSpan={6} align=\"center\" sx={{ py: 4, color: 'var(--theme-text-secondary)' }}>\n No users are currently banned\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n\n {/* Invitations Tab */}\n {activeTab === 2 && features.users && (\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Email</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Name</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Created</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Expires</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Status</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {invitations.map((invitation) => {\n const isExpired = invitation.invitation_expires_at && new Date(invitation.invitation_expires_at) < new Date();\n return (\n <TableRow key={invitation.id}>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Text variant=\"body1\" content={invitation.email} fontWeight=\"500\" />\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n {invitation.name || '--'}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {formatDate(invitation.created_at)}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>\n {formatDate(invitation.invitation_expires_at)}\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n <Chip\n size=\"small\"\n label={isExpired ? 'Expired' : 'Pending'}\n sx={{\n bgcolor: isExpired ? 'var(--theme-error)20' : 'var(--theme-warning)20',\n color: isExpired ? 'var(--theme-error)' : 'var(--theme-warning)',\n }}\n />\n </TableCell>\n </TableRow>\n );\n })}\n {invitations.length === 0 && !loading && (\n <TableRow>\n <TableCell colSpan={5} align=\"center\" sx={{ py: 4, color: 'var(--theme-text-secondary)' }}>\n No pending invitations\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n </CardContent>\n </Card>\n\n {/* Invite User Dialog */}\n {features.users && (\n <Dialog\n open={inviteDialogOpen}\n onClose={handleCloseInviteDialog}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Invite User</DialogTitle>\n <DialogContent>\n {!inviteResult ? (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <TextField\n label=\"Email\"\n fullWidth\n required\n value={newInvite.email}\n onChange={(e) => setNewInvite({ ...newInvite, email: e.target.value })}\n placeholder=\"user@example.com\"\n type=\"email\"\n />\n <TextField\n label=\"Name (Optional)\"\n fullWidth\n value={newInvite.name}\n onChange={(e) => setNewInvite({ ...newInvite, name: e.target.value })}\n placeholder=\"Enter user's full name\"\n />\n <TextField\n label=\"Role (Optional)\"\n fullWidth\n value={newInvite.role}\n onChange={(e) => setNewInvite({ ...newInvite, role: e.target.value })}\n placeholder=\"e.g., admin, editor, viewer\"\n helperText=\"Stored in user metadata for your app to use\"\n />\n <TextField\n label=\"Invitation Expiry\"\n type=\"number\"\n fullWidth\n value={newInvite.expiresInDays}\n onChange={(e) => setNewInvite({ ...newInvite, expiresInDays: parseInt(e.target.value) || 7 })}\n InputProps={{\n endAdornment: <InputAdornment position=\"end\">days</InputAdornment>,\n }}\n helperText=\"How many days until the invitation expires\"\n />\n </Box>\n ) : (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <Alert severity=\"success\">\n Invitation created successfully! Share this link with the user:\n </Alert>\n <TextField\n label=\"Invitation Link\"\n fullWidth\n value={inviteResult.inviteLink}\n InputProps={{\n readOnly: true,\n endAdornment: (\n <InputAdornment position=\"end\">\n <Tooltip title=\"Copy to clipboard\">\n <IconButton onClick={handleCopyInviteLink} edge=\"end\">\n <ContentCopyIcon />\n </IconButton>\n </Tooltip>\n </InputAdornment>\n ),\n }}\n helperText=\"Click the icon to copy the link to clipboard\"\n />\n <Alert severity=\"info\">\n The user will need to visit this link to activate their account.\n </Alert>\n </Box>\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n label=\"Close\"\n onClick={handleCloseInviteDialog}\n />\n {!inviteResult && (\n <Button\n variant=\"primary\"\n label=\"Create Invitation\"\n onClick={handleInviteUser}\n disabled={!newInvite.email}\n />\n )}\n </DialogActions>\n </Dialog>\n )}\n\n {/* Ban User Dialog */}\n {features.bans && (\n <Dialog\n open={banDialogOpen}\n onClose={() => setBanDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Ban User</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <TextField\n label=\"Email\"\n fullWidth\n value={newBan.email}\n onChange={(e) => setNewBan({ ...newBan, email: e.target.value })}\n placeholder=\"Enter user email\"\n />\n <TextField\n label=\"Reason\"\n fullWidth\n multiline\n rows={3}\n value={newBan.reason}\n onChange={(e) => setNewBan({ ...newBan, reason: e.target.value })}\n placeholder=\"Enter reason for ban\"\n />\n <TextField\n label=\"Expiration (Optional)\"\n type=\"datetime-local\"\n fullWidth\n value={newBan.expiresAt}\n onChange={(e) => setNewBan({ ...newBan, expiresAt: e.target.value })}\n InputLabelProps={{ shrink: true }}\n helperText=\"Leave empty for permanent ban\"\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n label=\"Cancel\"\n onClick={() => {\n setBanDialogOpen(false);\n setNewBan({ email: '', reason: '', expiresAt: '' });\n }}\n />\n <Button\n variant=\"primary\"\n color=\"error\"\n label=\"Ban User\"\n onClick={handleBanUser}\n disabled={!newBan.email || !newBan.reason}\n />\n </DialogActions>\n </Dialog>\n )}\n\n {/* Entitlements Lookup Dialog */}\n {features.entitlements && (\n <Dialog\n open={entitlementsDialogOpen}\n onClose={() => setEntitlementsDialogOpen(false)}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>User Entitlements</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <Box sx={{ display: 'flex', gap: 1 }}>\n <TextField\n label=\"Email\"\n fullWidth\n value={entitlementsSearch}\n onChange={(e) => setEntitlementsSearch(e.target.value)}\n placeholder=\"Enter user email\"\n onKeyDown={(e) => e.key === 'Enter' && handleEntitlementsSearch()}\n />\n <Button\n variant=\"primary\"\n icon=\"search\"\n label=\"Lookup\"\n onClick={handleEntitlementsSearch}\n disabled={entitlementsLoading}\n />\n </Box>\n\n {entitlementsLoading && (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>\n <CircularProgress />\n </Box>\n )}\n\n {entitlementsError && (\n <Alert severity=\"error\">{entitlementsError}</Alert>\n )}\n\n {entitlementsData && (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 }}>\n <Box>\n <Text variant=\"h6\" content={entitlementsData.identifier} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={`Source: ${entitlementsData.source}`} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n <Button\n variant=\"outlined\"\n icon=\"refresh\"\n label={entitlementsRefreshing ? 'Refreshing...' : 'Refresh'}\n onClick={handleEntitlementsRefresh}\n disabled={entitlementsRefreshing}\n buttonSize=\"small\"\n />\n </Box>\n\n {/* Grant Entitlement Section (only if not readonly) */}\n {!features.entitlementsReadonly && grantableEntitlements.length > 0 && (\n <Box sx={{ display: 'flex', gap: 1, mb: 2, p: 2, bgcolor: 'var(--theme-background)', borderRadius: 1 }}>\n <Autocomplete\n size=\"small\"\n options={grantableEntitlements}\n getOptionLabel={(option) => option.name}\n value={grantableEntitlements.find((e) => e.name === selectedEntitlement) || null}\n onChange={(_, newValue) => setSelectedEntitlement(newValue?.name || '')}\n renderInput={(params) => (\n <TextField {...params} label=\"Grant Entitlement\" placeholder=\"Select entitlement\" />\n )}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n icon=\"add\"\n label=\"Grant\"\n onClick={handleGrantEntitlement}\n disabled={!selectedEntitlement || grantingEntitlement}\n buttonSize=\"small\"\n />\n </Box>\n )}\n\n <Text variant=\"subtitle2\" content=\"Current Entitlements\" customColor=\"var(--theme-text-secondary)\" style={{ marginBottom: '8px' }} />\n {entitlementsData.entitlements.length === 0 ? (\n <Text variant=\"body2\" content=\"No entitlements found\" customColor=\"var(--theme-text-secondary)\" />\n ) : (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n {entitlementsData.entitlements.map((ent, idx) => (\n <Chip\n key={idx}\n icon={<CheckCircleIcon sx={{ fontSize: 16 }} />}\n label={ent}\n onDelete={!features.entitlementsReadonly ? () => handleRevokeEntitlement(ent) : undefined}\n deleteIcon={<DeleteIcon sx={{ fontSize: 16 }} />}\n sx={{\n bgcolor: 'var(--theme-success)20',\n color: 'var(--theme-success)',\n '& .MuiChip-deleteIcon': {\n color: 'var(--theme-error)',\n '&:hover': {\n color: 'var(--theme-error)',\n },\n },\n }}\n />\n ))}\n </Box>\n )}\n\n <Box sx={{ mt: 2, pt: 2, borderTop: 1, borderColor: 'var(--theme-border)' }}>\n <Text variant=\"caption\" content={`Data from: ${entitlementsData.source === 'cache' ? 'Cache' : 'Source'}`} customColor=\"var(--theme-text-secondary)\" />\n {entitlementsData.cachedAt && (\n <Text variant=\"caption\" content={` | Cached: ${formatDate(entitlementsData.cachedAt)}`} customColor=\"var(--theme-text-secondary)\" />\n )}\n {features.entitlementsReadonly && (\n <Text variant=\"caption\" content=\" | Read-only mode (modifications disabled)\" customColor=\"var(--theme-warning)\" />\n )}\n </Box>\n </Box>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Close\" onClick={() => setEntitlementsDialogOpen(false)} />\n </DialogActions>\n </Dialog>\n )}\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2m-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2m3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1z\"\n}), 'Lock');","/**\n * EntitlementsPage Component\n *\n * Entitlement catalog management page. Allows viewing and managing available entitlements.\n * Write operations (create, edit, delete) are only available when source is not readonly.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n Box,\n Card,\n CardContent,\n TextField,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n Chip,\n Alert,\n LinearProgress,\n InputAdornment,\n CircularProgress,\n Tooltip,\n IconButton,\n} from '@mui/material';\nimport { Text, Button, Dialog, DialogTitle, DialogContent, DialogActions, GridLayout } from '@qwickapps/react-framework';\nimport SearchIcon from '@mui/icons-material/Search';\nimport LocalOfferIcon from '@mui/icons-material/LocalOffer';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport LockIcon from '@mui/icons-material/Lock';\nimport {\n api,\n type EntitlementDefinition,\n type EntitlementsStatus,\n} from '../api/controlPanelApi';\n\nexport interface EntitlementsPageProps {\n /** Page title */\n title?: string;\n /** Page subtitle */\n subtitle?: string;\n /** Custom actions to render in the header */\n headerActions?: React.ReactNode;\n}\n\nexport function EntitlementsPage({\n title = 'Entitlements',\n subtitle = 'Manage available entitlements',\n headerActions,\n}: EntitlementsPageProps) {\n // Status state\n const [status, setStatus] = useState<EntitlementsStatus | null>(null);\n const [statusLoading, setStatusLoading] = useState(true);\n\n // Entitlements state\n const [entitlements, setEntitlements] = useState<EntitlementDefinition[]>([]);\n const [filteredEntitlements, setFilteredEntitlements] = useState<EntitlementDefinition[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n const [search, setSearch] = useState('');\n\n // Dialog state\n const [createDialogOpen, setCreateDialogOpen] = useState(false);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedEntitlement, setSelectedEntitlement] = useState<EntitlementDefinition | null>(null);\n const [newEntitlement, setNewEntitlement] = useState({\n name: '',\n category: '',\n description: '',\n });\n const [saving, setSaving] = useState(false);\n\n // Fetch status\n useEffect(() => {\n api.getEntitlementsStatus()\n .then(setStatus)\n .catch((err) => setError(err instanceof Error ? err.message : 'Failed to get status'))\n .finally(() => setStatusLoading(false));\n }, []);\n\n // Fetch entitlements\n const fetchEntitlements = useCallback(async () => {\n setLoading(true);\n try {\n const data = await api.getAvailableEntitlements();\n setEntitlements(data);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch entitlements');\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchEntitlements();\n }, [fetchEntitlements]);\n\n // Filter entitlements based on search\n useEffect(() => {\n if (!search.trim()) {\n setFilteredEntitlements(entitlements);\n } else {\n const lowerSearch = search.toLowerCase();\n setFilteredEntitlements(\n entitlements.filter(\n (e) =>\n e.name.toLowerCase().includes(lowerSearch) ||\n e.category?.toLowerCase().includes(lowerSearch) ||\n e.description?.toLowerCase().includes(lowerSearch)\n )\n );\n }\n }, [entitlements, search]);\n\n // Group entitlements by category\n const categories = [...new Set(entitlements.map((e) => e.category || 'Uncategorized'))];\n\n // Handlers\n const handleCreate = async () => {\n if (!newEntitlement.name.trim()) {\n setError('Name is required');\n return;\n }\n\n setSaving(true);\n try {\n // TODO: Add create entitlement API endpoint\n // For now, just show success\n setSuccess(`Entitlement \"${newEntitlement.name}\" created`);\n setCreateDialogOpen(false);\n setNewEntitlement({ name: '', category: '', description: '' });\n fetchEntitlements();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create entitlement');\n } finally {\n setSaving(false);\n }\n };\n\n const handleEdit = async () => {\n if (!selectedEntitlement) return;\n\n setSaving(true);\n try {\n // TODO: Add update entitlement API endpoint\n setSuccess(`Entitlement \"${selectedEntitlement.name}\" updated`);\n setEditDialogOpen(false);\n setSelectedEntitlement(null);\n fetchEntitlements();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to update entitlement');\n } finally {\n setSaving(false);\n }\n };\n\n const handleDelete = async () => {\n if (!selectedEntitlement) return;\n\n setSaving(true);\n try {\n // TODO: Add delete entitlement API endpoint\n setSuccess(`Entitlement \"${selectedEntitlement.name}\" deleted`);\n setDeleteDialogOpen(false);\n setSelectedEntitlement(null);\n fetchEntitlements();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete entitlement');\n } finally {\n setSaving(false);\n }\n };\n\n const openEditDialog = (entitlement: EntitlementDefinition) => {\n setSelectedEntitlement(entitlement);\n setEditDialogOpen(true);\n };\n\n const openDeleteDialog = (entitlement: EntitlementDefinition) => {\n setSelectedEntitlement(entitlement);\n setDeleteDialogOpen(true);\n };\n\n const isReadonly = status?.readonly ?? true;\n\n if (statusLoading) {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 8 }}>\n <CircularProgress />\n </Box>\n );\n }\n\n return (\n <Box>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 3 }}>\n <Box>\n <Text variant=\"h4\" content={title} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={subtitle} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n <Box sx={{ display: 'flex', gap: 1 }}>\n {headerActions}\n {!isReadonly && (\n <Button\n variant=\"primary\"\n icon=\"add\"\n label=\"Add Entitlement\"\n onClick={() => setCreateDialogOpen(true)}\n />\n )}\n </Box>\n </Box>\n\n {loading && <LinearProgress sx={{ mb: 2 }} />}\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)} sx={{ mb: 2 }}>\n {error}\n </Alert>\n )}\n\n {success && (\n <Alert severity=\"success\" onClose={() => setSuccess(null)} sx={{ mb: 2 }}>\n {success}\n </Alert>\n )}\n\n {/* Status Cards */}\n <GridLayout columns={3} spacing=\"medium\" sx={{ mb: 3 }} equalHeight>\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <LocalOfferIcon sx={{ fontSize: 40, color: 'var(--theme-primary)' }} />\n <Box>\n <Text variant=\"h4\" content={entitlements.length.toString()} customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content=\"Total Entitlements\" customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Box\n sx={{\n width: 40,\n height: 40,\n borderRadius: 1,\n bgcolor: 'var(--theme-primary)20',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text variant=\"h6\" content={categories.length.toString()} customColor=\"var(--theme-primary)\" />\n </Box>\n <Box>\n <Text variant=\"body1\" fontWeight=\"500\" content=\"Categories\" customColor=\"var(--theme-text-primary)\" />\n <Text variant=\"body2\" content={categories.slice(0, 3).join(', ')} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n {isReadonly ? (\n <LockIcon sx={{ fontSize: 40, color: 'var(--theme-warning)' }} />\n ) : (\n <EditIcon sx={{ fontSize: 40, color: 'var(--theme-success)' }} />\n )}\n <Box>\n <Text\n variant=\"body1\"\n fontWeight=\"500\"\n content={isReadonly ? 'Read-only' : 'Editable'}\n customColor={isReadonly ? 'var(--theme-warning)' : 'var(--theme-success)'}\n />\n <Text variant=\"body2\" content={`Source: ${status?.sources[0]?.name || 'Unknown'}`} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n </Box>\n </CardContent>\n </Card>\n </GridLayout>\n\n {/* Main Content */}\n <Card sx={{ bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ p: 0 }}>\n {/* Search Bar */}\n <Box sx={{ p: 2, borderBottom: 1, borderColor: 'var(--theme-border)' }}>\n <TextField\n size=\"small\"\n placeholder=\"Search entitlements...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ color: 'var(--theme-text-secondary)' }} />\n </InputAdornment>\n ),\n }}\n sx={{ minWidth: 300 }}\n />\n </Box>\n\n {/* Entitlements Table */}\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Name</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Category</TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }}>Description</TableCell>\n {!isReadonly && (\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)' }} align=\"right\">Actions</TableCell>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredEntitlements.map((entitlement) => (\n <TableRow key={entitlement.id} hover>\n <TableCell sx={{ color: 'var(--theme-text-primary)', borderColor: 'var(--theme-border)' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <LocalOfferIcon sx={{ fontSize: 18, color: 'var(--theme-primary)' }} />\n <Text variant=\"body1\" content={entitlement.name} fontWeight=\"500\" />\n </Box>\n </TableCell>\n <TableCell sx={{ borderColor: 'var(--theme-border)' }}>\n {entitlement.category ? (\n <Chip\n size=\"small\"\n label={entitlement.category}\n sx={{\n bgcolor: 'var(--theme-primary)20',\n color: 'var(--theme-primary)',\n }}\n />\n ) : (\n <Text variant=\"body2\" content=\"--\" customColor=\"var(--theme-text-secondary)\" />\n )}\n </TableCell>\n <TableCell sx={{ color: 'var(--theme-text-secondary)', borderColor: 'var(--theme-border)', maxWidth: 300 }}>\n {entitlement.description || '--'}\n </TableCell>\n {!isReadonly && (\n <TableCell sx={{ borderColor: 'var(--theme-border)' }} align=\"right\">\n <Tooltip title=\"Edit\">\n <IconButton size=\"small\" onClick={() => openEditDialog(entitlement)}>\n <EditIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Delete\">\n <IconButton size=\"small\" onClick={() => openDeleteDialog(entitlement)} sx={{ color: 'var(--theme-error)' }}>\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </TableCell>\n )}\n </TableRow>\n ))}\n {filteredEntitlements.length === 0 && !loading && (\n <TableRow>\n <TableCell colSpan={isReadonly ? 3 : 4} align=\"center\" sx={{ py: 4, color: 'var(--theme-text-secondary)' }}>\n {search ? 'No entitlements match your search' : 'No entitlements defined'}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n </CardContent>\n </Card>\n\n {/* Source Info */}\n {status && status.sources.length > 0 && (\n <Card sx={{ bgcolor: 'var(--theme-surface)', mt: 3 }}>\n <CardContent>\n <Text variant=\"subtitle2\" content=\"Entitlement Sources\" customColor=\"var(--theme-text-secondary)\" style={{ marginBottom: '12px' }} />\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n {status.sources.map((source, idx) => (\n <Box key={idx} sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Chip\n size=\"small\"\n label={source.primary ? 'Primary' : 'Additional'}\n sx={{\n bgcolor: source.primary ? 'var(--theme-primary)20' : 'var(--theme-text-secondary)20',\n color: source.primary ? 'var(--theme-primary)' : 'var(--theme-text-secondary)',\n }}\n />\n <Text variant=\"body1\" content={source.name} fontWeight=\"500\" customColor=\"var(--theme-text-primary)\" />\n {source.description && (\n <Text variant=\"body2\" content={`- ${source.description}`} customColor=\"var(--theme-text-secondary)\" />\n )}\n {source.readonly && (\n <Chip\n size=\"small\"\n icon={<LockIcon sx={{ fontSize: 14 }} />}\n label=\"Read-only\"\n sx={{\n bgcolor: 'var(--theme-warning)20',\n color: 'var(--theme-warning)',\n }}\n />\n )}\n </Box>\n ))}\n </Box>\n\n {status.cacheEnabled && (\n <Box sx={{ mt: 2, pt: 2, borderTop: 1, borderColor: 'var(--theme-border)' }}>\n <Text variant=\"caption\" content={`Caching: Enabled (TTL: ${status.cacheTtl}s)`} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Create Dialog */}\n {!isReadonly && (\n <Dialog\n open={createDialogOpen}\n onClose={() => setCreateDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Add Entitlement</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <TextField\n label=\"Name\"\n fullWidth\n value={newEntitlement.name}\n onChange={(e) => setNewEntitlement({ ...newEntitlement, name: e.target.value })}\n placeholder=\"e.g., premium, pro, feature:analytics\"\n required\n />\n <TextField\n label=\"Category (Optional)\"\n fullWidth\n value={newEntitlement.category}\n onChange={(e) => setNewEntitlement({ ...newEntitlement, category: e.target.value })}\n placeholder=\"e.g., subscription, feature, access\"\n />\n <TextField\n label=\"Description (Optional)\"\n fullWidth\n multiline\n rows={2}\n value={newEntitlement.description}\n onChange={(e) => setNewEntitlement({ ...newEntitlement, description: e.target.value })}\n placeholder=\"Describe what this entitlement grants access to\"\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Cancel\" onClick={() => setCreateDialogOpen(false)} />\n <Button\n variant=\"primary\"\n label=\"Create\"\n onClick={handleCreate}\n disabled={!newEntitlement.name.trim() || saving}\n />\n </DialogActions>\n </Dialog>\n )}\n\n {/* Edit Dialog */}\n {!isReadonly && selectedEntitlement && (\n <Dialog\n open={editDialogOpen}\n onClose={() => setEditDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Edit Entitlement</DialogTitle>\n <DialogContent>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, mt: 1 }}>\n <TextField\n label=\"Name\"\n fullWidth\n value={selectedEntitlement.name}\n disabled\n helperText=\"Name cannot be changed\"\n />\n <TextField\n label=\"Category\"\n fullWidth\n value={selectedEntitlement.category || ''}\n onChange={(e) => setSelectedEntitlement({ ...selectedEntitlement, category: e.target.value })}\n />\n <TextField\n label=\"Description\"\n fullWidth\n multiline\n rows={2}\n value={selectedEntitlement.description || ''}\n onChange={(e) => setSelectedEntitlement({ ...selectedEntitlement, description: e.target.value })}\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Cancel\" onClick={() => setEditDialogOpen(false)} />\n <Button\n variant=\"primary\"\n label=\"Save\"\n onClick={handleEdit}\n disabled={saving}\n />\n </DialogActions>\n </Dialog>\n )}\n\n {/* Delete Confirmation Dialog */}\n {!isReadonly && selectedEntitlement && (\n <Dialog\n open={deleteDialogOpen}\n onClose={() => setDeleteDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Delete Entitlement</DialogTitle>\n <DialogContent>\n <Text\n variant=\"body1\"\n content={`Are you sure you want to delete the entitlement \"${selectedEntitlement.name}\"?`}\n customColor=\"var(--theme-text-primary)\"\n />\n <Alert severity=\"warning\" sx={{ mt: 2 }}>\n This will remove the entitlement from all users who currently have it.\n </Alert>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" label=\"Cancel\" onClick={() => setDeleteDialogOpen(false)} />\n <Button\n variant=\"primary\"\n color=\"error\"\n label=\"Delete\"\n onClick={handleDelete}\n disabled={saving}\n />\n </DialogActions>\n </Dialog>\n )}\n </Box>\n );\n}\n","/**\n * AcceptInvitationPage Component\n *\n * Standalone page for users to accept invitations and activate their accounts.\n * Can be used in control panel or frontend applications.\n *\n * Copyright (c) 2025 QwickApps.com. All rights reserved.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Box, Card, CardContent, Alert, CircularProgress } from '@mui/material';\nimport { Text, Button } from '@qwickapps/react-framework';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport { api, type User } from '../api/controlPanelApi';\n\nexport interface AcceptInvitationPageProps {\n /** Invitation token (if not provided, will extract from URL) */\n token?: string;\n /** Title text */\n title?: string;\n /** Subtitle text */\n subtitle?: string;\n /** Success message */\n successMessage?: string;\n /** URL to redirect to after successful activation (optional) */\n redirectUrl?: string;\n /** Label for the redirect button */\n redirectLabel?: string;\n /** Callback when invitation is accepted successfully */\n onSuccess?: (user: User) => void;\n /** Callback when invitation acceptance fails */\n onError?: (error: string) => void;\n}\n\nexport function AcceptInvitationPage({\n token: tokenProp,\n title = 'Accept Invitation',\n subtitle = 'Activate your account',\n successMessage = 'Your account has been activated successfully!',\n redirectUrl,\n redirectLabel = 'Go to App',\n onSuccess,\n onError,\n}: AcceptInvitationPageProps) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState(false);\n const [user, setUser] = useState<User | null>(null);\n\n useEffect(() => {\n const acceptInvitation = async () => {\n // Get token from prop or URL query parameter\n let inviteToken = tokenProp;\n if (!inviteToken) {\n const params = new URLSearchParams(window.location.search);\n inviteToken = params.get('token') || '';\n }\n\n if (!inviteToken) {\n setError('No invitation token provided');\n setLoading(false);\n onError?.('No invitation token provided');\n return;\n }\n\n try {\n const result = await api.acceptInvitation(inviteToken);\n setUser(result.user);\n setSuccess(true);\n onSuccess?.(result.user);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to accept invitation';\n setError(errorMessage);\n onError?.(errorMessage);\n } finally {\n setLoading(false);\n }\n };\n\n acceptInvitation();\n }, [tokenProp, onSuccess, onError]);\n\n const handleRedirect = () => {\n if (redirectUrl) {\n window.location.href = redirectUrl;\n }\n };\n\n return (\n <Box\n sx={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: 'var(--theme-background)',\n p: 3,\n }}\n >\n <Card sx={{ maxWidth: 500, width: '100%', bgcolor: 'var(--theme-surface)' }}>\n <CardContent sx={{ p: 4 }}>\n <Box sx={{ textAlign: 'center', mb: 4 }}>\n <Text variant=\"h4\" content={title} customColor=\"var(--theme-text-primary)\" style={{ marginBottom: '8px' }} />\n <Text variant=\"body2\" content={subtitle} customColor=\"var(--theme-text-secondary)\" />\n </Box>\n\n {loading && (\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 2, py: 4 }}>\n <CircularProgress />\n <Text variant=\"body2\" content=\"Activating your account...\" customColor=\"var(--theme-text-secondary)\" />\n </Box>\n )}\n\n {error && !loading && (\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 3 }}>\n <ErrorIcon sx={{ fontSize: 64, color: 'var(--theme-error)' }} />\n <Alert severity=\"error\" sx={{ width: '100%' }}>\n {error}\n </Alert>\n <Text\n variant=\"body2\"\n content=\"The invitation may have expired or is invalid. Please contact support.\"\n customColor=\"var(--theme-text-secondary)\"\n style={{ textAlign: 'center' }}\n />\n </Box>\n )}\n\n {success && !loading && (\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 3 }}>\n <CheckCircleIcon sx={{ fontSize: 64, color: 'var(--theme-success)' }} />\n <Alert severity=\"success\" sx={{ width: '100%' }}>\n {successMessage}\n </Alert>\n\n {user && (\n <Box sx={{ width: '100%', textAlign: 'center' }}>\n <Text\n variant=\"body1\"\n content={`Welcome, ${user.name || user.email}!`}\n customColor=\"var(--theme-text-primary)\"\n fontWeight=\"500\"\n style={{ marginBottom: '4px' }}\n />\n <Text\n variant=\"body2\"\n content=\"Your account is now active and ready to use.\"\n customColor=\"var(--theme-text-secondary)\"\n />\n </Box>\n )}\n\n {redirectUrl && (\n <Button\n variant=\"primary\"\n label={redirectLabel}\n icon=\"arrow_forward\"\n onClick={handleRedirect}\n fullWidth\n />\n )}\n </Box>\n )}\n </CardContent>\n </Card>\n </Box>\n );\n}\n"],"names":["defaultConfig","AppConfigBuilder","defaultGenerator","componentName","createClassNameGenerator","generate","generator","ClassNameGenerator","formatMuiErrorMessage","code","args","url","arg","capitalize","string","_formatErrorMessage","r","f","n","o","clsx","composeClasses","slots","getUtilityClass","classes","output","slotName","slot","buffer","start","i","value","isPlainObject","item","prototype","deepClone","source","React","isValidElementType","key","deepmerge","target","options","merge","acc","responsivePropType","PropTypes","sortContainerQueries","theme","css","sorted","a","b","regex","_a","_b","isCqShorthand","breakpointKeys","getContainerQuery","shorthand","matches","containerQuery","containerName","cssContainerQueries","themeInput","toContainerQuery","mediaQuery","name","attachCq","node","result","containerQueries","values","defaultBreakpoints","defaultContainerQueries","handleBreakpoints","props","propValue","styleFromPropValue","themeBreakpoints","index","breakpoint","containerKey","mediaKey","cssKey","createEmptyBreakpointObject","breakpointsInput","breakpointStyleKey","removeUnusedBreakpoints","style","breakpointOutput","getPath","obj","path","checkVars","val","getStyleValue","themeMapping","transform","propValueFinal","userValue","prop","cssProperty","themeKey","fn","memoize","cache","properties","directions","aliases","getCssProperties","property","direction","dir","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","defaultValue","propName","themeSpacing","abs","transformed","createUnarySpacing","getValue","transformer","getStyleFromPropValue","cssProperties","resolveCssProperty","keys","margin","padding","compose","styles","handlers","borderTransform","createBorderStyle","border","borderTop","borderRight","borderBottom","borderLeft","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outline","outlineColor","borderRadius","gap","columnGap","rowGap","gridColumn","gridRow","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","paletteTransform","color","bgcolor","backgroundColor","sizingTransform","width","maxWidth","_c","breakpointsValues","_e","_d","minWidth","height","maxHeight","minHeight","boxSizing","defaultSxConfig","objectsHaveSameKeys","objects","allKeys","object","union","callIfFn","maybeFn","unstable_createStyleFunctionSx","getThemeValue","config","styleFunctionSx","sx","nested","traverse","sxInput","sxObject","emptyBreakpoints","breakpointsKeys","styleKey","x","murmur2","str","h","k","len","unitlessKeys","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","match","p1","p2","cursor","unitless","handleInterpolation","mergedProps","registered","interpolation","componentSelector","keyframes","serializedStyles","next","createStringFromObject","asString","_i","interpolated","labelPattern","serializeStyles","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","hashString","styled","tag","stylesFactory","emStyled","component","internal_mutateStyles","processor","wrapper","internal_serializeStyles","emSerializeStyles","sortBreakpointsValues","breakpointsAsArray","breakpoint1","breakpoint2","createBreakpoints","breakpoints","unit","step","other","sortedValues","up","down","between","end","endIndex","only","not","keyIndex","shape","createSpacing","spacingInput","spacing","argsInput","argument","applyStyles","selector","createTheme","paletteInput","shapeInput","muiTheme","globalStateClasses","generateUtilityClass","globalStatePrefix","globalStateClass","generateUtilityClasses","getFunctionComponentName","Component","fallback","getWrappedName","outerType","innerType","wrapperName","functionName","getDisplayName","ForwardRef","Memo","preprocessStyles","input","variants","variant","systemDefaultTheme","shouldForwardProp","shallowLayer","serialized","layerName","defaultOverridesResolver","_props","attachTheme","themeId","defaultTheme","isObjectEmpty","processStyle","resolvedStyle","subStyle","rootStyle","otherStyles","processStyleVariants","results","mergedState","variantLoop","createStyled","rootShouldForwardProp","slotShouldForwardProp","styleAttachTheme","inputOptions","mutateStyles","componentSlot","inputSkipVariantsResolver","inputSkipSx","overridesResolver","lowercaseFirstLetter","skipVariantsResolver","skipSx","shouldForwardPropOption","isStringTag","defaultStyledResolver","styledEngineStyled","generateStyledLabel","transformStyle","muiStyledResolver","expressionsInput","expressionsHead","expressionsBody","expressionsTail","styleOverrides","resolvedStyleOverrides","slotKey","themeVariants","inputStrings","placeholdersHead","placeholdersTail","outputStrings","expressions","generateDisplayName","label","_","resolveProps","defaultProps","mergeClassNameAndStyle","defaultSlotProps","slotProps","slotPropName","clamp","min","max","clampWrapper","hexToRgb","re","colors","decomposeColor","marker","type","colorSpace","colorChannel","decomposedColor","idx","private_safeColorChannel","warning","recomposeColor","hslToRgb","s","l","rgb","getLuminance","getContrastRatio","foreground","background","lumA","lumB","alpha","private_safeAlpha","darken","coefficient","private_safeDarken","lighten","private_safeLighten","emphasize","private_safeEmphasize","PropsContext","getThemeProps","params","useDefaultProps","ctx","unstable_memoTheme","styleFn","lastValue","lastTheme","createGetCssVar","prefix","appendVar","vars","field","fallbacks","assignNestedKeys","arrayKeys","temp","walkObjectDeep","callback","shouldSkipPaths","recurse","parentKeys","getCssValue","cssVarsParser","shouldSkipGeneratingVar","varsWithDefaults","cssVar","resolvedValue","prepareCssVars","parserConfig","getSelector","defaultGetSelector","disableCssColorScheme","enableContrastVars","colorSchemes","components","defaultColorScheme","otherTheme","rootVars","rootCss","rootVarsWithDefaults","themeVars","colorSchemesMap","defaultScheme","otherColorSchemes","scheme","colorScheme","cssObject","rule","schemeVars","stylesheets","insertStyleSheet","defaultSchemeVal","cssColorSheme","finalCss","createGetColorSchemeSelector","common","grey","purple","red","orange","blue","lightBlue","green","getLight","light","getDark","dark","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","mixLightOrDark","getDefaultPrimary","mode","getDefaultSecondary","getDefaultError","getDefaultInfo","getDefaultSuccess","getDefaultWarning","contrastColor","createPalette","palette","contrastThreshold","primary","secondary","error","info","success","getContrastText","contrastText","contrast","augmentColor","mainShade","lightShade","darkShade","modeHydrated","prepareTypographyVars","typography","entry","createMixins","mixins","round","caseAllCaps","defaultFontFamily","createTypography","fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem2","coef","pxToRem","size","buildVariant","fontWeight","lineHeight","letterSpacing","casing","shadowKeyUmbraOpacity","shadowKeyPenumbraOpacity","shadowAmbientShadowOpacity","createShadow","px","shadows","easing","duration","formatMs","milliseconds","getAutoHeightDuration","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","delay","isString","isNumber","animatedProp","zIndex","isSerializable","stringifyTheme","baseTheme","serializableTheme","serializeTheme","array","coefficientToPercentage","parseAddition","numbers","sum","attachColorManipulators","systemAlpha","systemLighten","systemDarken","createThemeNoVars","mixinsInput","transitionsInput","typographyInput","systemTheme","systemCreateTheme","stateClasses","child","stateClass","getOverlayAlpha","elevation","alphaValue","defaultDarkOverlays","overlay","getOpacity","getOverlays","createColorScheme","opacity","overlays","excludeVariablesFromRoot","cssVarPrefix","root","excludedVariables","assignNode","setColor","toRgb","setColorChannel","safeColorChannel","getSpacingVal","silent","systemCreateGetCssVar","attachColorScheme","restTheme","createThemeWithVars","colorSchemesInput","defaultColorSchemeInput","nativeColor","defaultShouldSkipGeneratingVar","rootSelector","firstColorScheme","getCssVar","defaultSchemeInput","builtInLight","builtInDark","customColorSchemes","setCssVarColor","tokens","colorToken","colorMix","method","mixer","safeAlpha","safeDarken","safeLighten","snackbarContentBackground","safeEmphasize","generateThemeVars","generateStyleSheets","cssVariables","initialColorSchemes","initialDefaultColorScheme","paletteOptions","THEME_ID","memoTheme","useSystemDefaultProps","getSvgIconUtilityClass","useUtilityClasses","ownerState","SvgIconRoot","_f","_h","_g","_j","_l","_k","_n","_m","SvgIcon","inProps","ref","children","className","htmlColor","inheritViewBox","titleAccess","viewBox","hasSvgAsChild","more","_jsxs","_jsx","createSvgIcon","displayName","CheckCircleIcon","ErrorIcon","WarningIcon","ControlPanelApi","baseUrl","__publicField","response","users","bans","entitlements","entitlementsReadonly","id","request","token","email","reason","expiresAt","expiresDate","now","entitlement","updates","clientId","keyId","api","DashboardWidgetContext","createContext","DashboardWidgetProvider","initialWidgets","widgets","setWidgets","useState","w","registerWidget","useCallback","widget","prev","unregisterWidget","toggleWidget","visible","getVisibleWidgets","jsx","useDashboardWidgets","context","useContext","useRegisterWidget","DashboardWidgetRenderer","Fragment","jsxs","Box","Typography","WidgetComponentRegistryContext","WidgetComponentRegistryProvider","initialComponents","setComponents","map","comp","registerComponent","registerComponents","comps","getComponent","hasComponent","getRegisteredNames","contextValue","useMemo","useWidgetComponentRegistry","PluginWidgetRenderer","defaultOnly","additionalWidgetIds","loading","setLoading","setError","useEffect","data","err","CircularProgress","Alert","visibleWidgets","getStatusIcon","status","getStatusColor","getGridColumns","count","ServiceHealthWidget","health","setHealth","fetchHealth","interval","Card","CardContent","Text","healthChecks","columns","GridLayout","check","Chip","IntegrationStatusWidget","setConfig","configuredCount","totalCount","integration","BlockIcon","adapterLabels","AuthStatusWidget","setStatus","getStateIcon","getStateColor","WifiIcon","WifiOffIcon","DevicesIcon","PersonIcon","SendIcon","StatCard","icon","subValue","formatNumber","num","formatDuration","ms","NotificationsStatsWidget","stats","setStats","fetchStats","LinearProgress","isHealthy","healthColor","getBuiltInWidgetComponents","DashboardPage","navigate","useNavigate","setInfo","fetchData","healthData","infoData","healthyCount","c","CardActionArea","RefreshIcon","SearchIcon","PlayArrowIcon","PauseIcon","ArrowUpwardIcon","ArrowDownwardIcon","InfoIcon","BugReportIcon","getLevelColor","level","LogsPage","logs","setLogs","sources","setSources","selectedSource","setSelectedSource","selectedLevel","setSelectedLevel","searchQuery","setSearchQuery","page","setPage","total","setTotal","limit","autoRefresh","setAutoRefresh","sortOrder","setSortOrder","autoRefreshRef","useRef","fetchLogs","sortedLogs","dateA","dateB","fetchSources","handleSearch","handleSortOrderChange","_event","newOrder","totalPages","Grid","FormControl","InputLabel","Select","e","MenuItem","TextField","ToggleButtonGroup","ToggleButton","Tooltip","IconButton","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","log","Pagination","ContentCopyIcon","MemoryIcon","ComputerIcon","StorageIcon","AccessTimeIcon","FavoriteIcon","formatBytes","bytes","sizes","formatUptime","seconds","minutes","hours","days","getHealthStatusIcon","getHealthStatusColor","formatLatency","latency","SystemPage","diagnostics","setDiagnostics","snackbar","setSnackbar","diagData","handleCopyAll","memoryUsedPercent","Snackbar","EditIcon","SaveIcon","CancelIcon","DeleteIcon","ExpandMoreIcon","ExpandLessIcon","state","defaultAuth0Config","defaultSupabaseConfig","defaultBasicConfig","defaultSupertokensConfig","AuthPage","copied","setCopied","editMode","setEditMode","saving","setSaving","testing","setTesting","testResult","setTestResult","selectedAdapter","setSelectedAdapter","auth0Config","setAuth0Config","supabaseConfig","setSupabaseConfig","basicConfig","setBasicConfig","supertokensConfig","setSupertokensConfig","authRequired","setAuthRequired","excludePaths","setExcludePaths","googleProvider","setGoogleProvider","githubProvider","setGithubProvider","appleProvider","setAppleProvider","showSocialProviders","setShowSocialProviders","deleteDialogOpen","setDeleteDialogOpen","fetchStatus","rc","st","handleCopy","handleEnterEditMode","handleCancelEdit","toPlainObject","getCurrentConfig","socialProviders","handleTestConnection","handleTestCurrentConnection","handleSave","p","handleDelete","configEntries","FormControlLabel","Switch","Collapse","Divider","Button","v","Dialog","DialogTitle","DialogContent","DialogActions","HomeIcon","NotFoundPage","DefaultFooter","version","Link","getBaseNavigationItems","ControlPanelApp","productName","logo","footerContent","dashboardWidgets","widgetComponents","navigationItems","showBaseNavigation","hideBaseNavItems","showThemeSwitcher","showPaletteSwitcher","basePath","setVersion","allWidgetComponents","apiBasePath","allNavigationItems","QwickApp","ProductLogo","Routes","Route","LocalOfferIcon","UsersPage","title","subtitle","featureOverrides","headerActions","onUserSelect","features","setFeatures","featuresLoaded","setFeaturesLoaded","activeTab","setActiveTab","setUsers","usersTotal","setUsersTotal","usersPage","setUsersPage","usersPerPage","setUsersPerPage","usersSearch","setUsersSearch","userEntitlementCounts","setUserEntitlementCounts","setBans","bansTotal","setBansTotal","invitations","setInvitations","invitationsTotal","setInvitationsTotal","setSuccess","banDialogOpen","setBanDialogOpen","newBan","setNewBan","inviteDialogOpen","setInviteDialogOpen","newInvite","setNewInvite","inviteResult","setInviteResult","entitlementsDialogOpen","setEntitlementsDialogOpen","entitlementsSearch","setEntitlementsSearch","entitlementsLoading","setEntitlementsLoading","entitlementsRefreshing","setEntitlementsRefreshing","entitlementsData","setEntitlementsData","entitlementsError","setEntitlementsError","availableEntitlements","setAvailableEntitlements","selectedEntitlement","setSelectedEntitlement","grantingEntitlement","setGrantingEntitlement","detected","fetchUsers","counts","user","ent","fetchBans","fetchInvitations","timeout","handleBanUser","handleUnbanUser","handleInviteUser","handleCopyInviteLink","handleCloseInviteDialog","handleEntitlementsSearch","handleEntitlementsRefresh","handleGrantEntitlement","handleRevokeEntitlement","openEntitlementsDialog","formatDate","date","grantableEntitlements","tabs","Tabs","tab","Tab","InputAdornment","TablePagination","ban","invitation","isExpired","Autocomplete","option","newValue","LockIcon","EntitlementsPage","statusLoading","setStatusLoading","setEntitlements","filteredEntitlements","setFilteredEntitlements","search","setSearch","createDialogOpen","setCreateDialogOpen","editDialogOpen","setEditDialogOpen","newEntitlement","setNewEntitlement","fetchEntitlements","lowerSearch","categories","handleCreate","handleEdit","openEditDialog","openDeleteDialog","isReadonly","AcceptInvitationPage","tokenProp","successMessage","redirectUrl","redirectLabel","onSuccess","onError","setUser","inviteToken","errorMessage","handleRedirect"],"mappings":"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AAC,QAAQF,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,89,91,92,93,94,95,101,102,103,104,105,106,107,108,110,111,112,113,114,115,117,118,119,120,121,122,124,127,129]}