@neuralnomads/codenomad-dev 0.20.0-dev-20260907-e9e94a67 → 0.20.0-dev-20260909-855d2ee7

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 (79) hide show
  1. package/dist/server/__tests__/instance-proxy.test.js +14 -0
  2. package/dist/server/__tests__/instance-proxy.test.js.map +1 -1
  3. package/dist/server/http-server.js +1 -1
  4. package/dist/server/http-server.js.map +1 -1
  5. package/package.json +1 -1
  6. package/public/assets/App-Nlt9zV-v.js +43 -0
  7. package/public/assets/App-Nlt9zV-v.js.map +1 -0
  8. package/public/assets/{FilesTab-CgfwF6tR.js → FilesTab-z7UrjcAQ.js} +3 -3
  9. package/public/assets/{FilesTab-CgfwF6tR.js.map → FilesTab-z7UrjcAQ.js.map} +1 -1
  10. package/public/assets/{GitChangesTab-r1JoAD9n.js → GitChangesTab-C04bYKhs.js} +3 -3
  11. package/public/assets/{GitChangesTab-r1JoAD9n.js.map → GitChangesTab-C04bYKhs.js.map} +1 -1
  12. package/public/assets/{SplitFilePanel-D9FfoZUZ.js → SplitFilePanel-B29MqCuU.js} +2 -2
  13. package/public/assets/{SplitFilePanel-D9FfoZUZ.js.map → SplitFilePanel-B29MqCuU.js.map} +1 -1
  14. package/public/assets/{StatusTab-DMnWj5WS.js → StatusTab-wUKfwnFf.js} +2 -2
  15. package/public/assets/{StatusTab-DMnWj5WS.js.map → StatusTab-wUKfwnFf.js.map} +1 -1
  16. package/public/assets/{align-justify-Dc1gjAkp.js → align-justify-glU678D9.js} +2 -2
  17. package/public/assets/{align-justify-Dc1gjAkp.js.map → align-justify-glU678D9.js.map} +1 -1
  18. package/public/assets/{bundle-full-CXK0RpEe.js → bundle-full-BrsCElYv.js} +2 -2
  19. package/public/assets/{bundle-full-CXK0RpEe.js.map → bundle-full-BrsCElYv.js.map} +1 -1
  20. package/public/assets/{client-state-DmImbmIC.js → client-state-j9Iu7F-E.js} +2 -2
  21. package/public/assets/{client-state-DmImbmIC.js.map → client-state-j9Iu7F-E.js.map} +1 -1
  22. package/public/assets/{diff-viewer-CbJWj99J.js → diff-viewer-B0VS1voD.js} +2 -2
  23. package/public/assets/{diff-viewer-CbJWj99J.js.map → diff-viewer-B0VS1voD.js.map} +1 -1
  24. package/public/assets/{index-C1AVy0gw.js → index-B6bX3AMT.js} +2 -2
  25. package/public/assets/{index-C1AVy0gw.js.map → index-B6bX3AMT.js.map} +1 -1
  26. package/public/assets/{index-Dggdc5Fz.js → index-BIRLnDWY.js} +2 -2
  27. package/public/assets/{index-Dggdc5Fz.js.map → index-BIRLnDWY.js.map} +1 -1
  28. package/public/assets/{index-xkTcWbMt.js → index-BuScpzpP.js} +2 -2
  29. package/public/assets/{index-xkTcWbMt.js.map → index-BuScpzpP.js.map} +1 -1
  30. package/public/assets/{index-BfORYhCR.js → index-BzAEHHap.js} +3 -3
  31. package/public/assets/index-BzAEHHap.js.map +1 -0
  32. package/public/assets/index-C-DZt-oz.css +1 -0
  33. package/public/assets/{index-C8aIk3bb.js → index-C9RXVQl9.js} +2 -2
  34. package/public/assets/{index-C8aIk3bb.js.map → index-C9RXVQl9.js.map} +1 -1
  35. package/public/assets/index-ClaHfu-1.js +2 -0
  36. package/public/assets/{index-Bv4cVEdt.js.map → index-ClaHfu-1.js.map} +1 -1
  37. package/public/assets/{index-UtSy15g1.js → index-DBx5htn3.js} +2 -2
  38. package/public/assets/{index-UtSy15g1.js.map → index-DBx5htn3.js.map} +1 -1
  39. package/public/assets/{index-AwBa5De4.js → index-DHHMf3u1.js} +2 -2
  40. package/public/assets/{index-AwBa5De4.js.map → index-DHHMf3u1.js.map} +1 -1
  41. package/public/assets/{index-CF7UTwOC.js → index-DN4Kstsd.js} +2 -2
  42. package/public/assets/{index-CF7UTwOC.js.map → index-DN4Kstsd.js.map} +1 -1
  43. package/public/assets/{index-D5cfewGV.js → index-DbMyNDyo.js} +2 -2
  44. package/public/assets/{index-D5cfewGV.js.map → index-DbMyNDyo.js.map} +1 -1
  45. package/public/assets/{index-kaTj6a0V.js → index-rcsmuqww.js} +2 -2
  46. package/public/assets/{index-kaTj6a0V.js.map → index-rcsmuqww.js.map} +1 -1
  47. package/public/assets/{index-BJSdILt0.js → index-uz2QFRlk.js} +2 -2
  48. package/public/assets/{index-BJSdILt0.js.map → index-uz2QFRlk.js.map} +1 -1
  49. package/public/assets/{loading-CLjF2dnt.js → loading-CYiiwb08.js} +2 -2
  50. package/public/assets/{loading-CLjF2dnt.js.map → loading-CYiiwb08.js.map} +1 -1
  51. package/public/assets/main-OmXs7qtG.js +48 -0
  52. package/public/assets/main-OmXs7qtG.js.map +1 -0
  53. package/public/assets/{markdown-DP0osupz.js → markdown-DWvSdCZz.js} +4 -4
  54. package/public/assets/{markdown-DP0osupz.js.map → markdown-DWvSdCZz.js.map} +1 -1
  55. package/public/assets/{monaco-viewer-BB3_mBkA.js → monaco-viewer-Cc9bWg7I.js} +2 -2
  56. package/public/assets/{monaco-viewer-BB3_mBkA.js.map → monaco-viewer-Cc9bWg7I.js.map} +1 -1
  57. package/public/assets/{startup-state-settings-card-Bc27wplD.js → startup-state-settings-card-2KHpBL8U.js} +2 -2
  58. package/public/assets/{startup-state-settings-card-Bc27wplD.js.map → startup-state-settings-card-2KHpBL8U.js.map} +1 -1
  59. package/public/assets/{terminal-square-4t6I40X6.js → terminal-square-lzHuj_of.js} +2 -2
  60. package/public/assets/{terminal-square-4t6I40X6.js.map → terminal-square-lzHuj_of.js.map} +1 -1
  61. package/public/assets/tool-call-DjkszeT4.js +60 -0
  62. package/public/assets/tool-call-DjkszeT4.js.map +1 -0
  63. package/public/assets/{unified-picker-CpvYPG8V.js → unified-picker-5JmIM6a0.js} +2 -2
  64. package/public/assets/{unified-picker-CpvYPG8V.js.map → unified-picker-5JmIM6a0.js.map} +1 -1
  65. package/public/assets/{wrap-text-Dq8UDb8D.js → wrap-text-N0Cav2Vp.js} +2 -2
  66. package/public/assets/{wrap-text-Dq8UDb8D.js.map → wrap-text-N0Cav2Vp.js.map} +1 -1
  67. package/public/index.html +4 -4
  68. package/public/loading.html +4 -4
  69. package/public/sw.js +1 -1
  70. package/public/sw.js.map +1 -1
  71. package/public/assets/App-lAZZOE--.js +0 -43
  72. package/public/assets/App-lAZZOE--.js.map +0 -1
  73. package/public/assets/index-BfORYhCR.js.map +0 -1
  74. package/public/assets/index-Bv4cVEdt.js +0 -2
  75. package/public/assets/index-CT42quXi.css +0 -1
  76. package/public/assets/main-CA9pw_Mr.js +0 -48
  77. package/public/assets/main-CA9pw_Mr.js.map +0 -1
  78. package/public/assets/tool-call-BIHyGWIy.js +0 -60
  79. package/public/assets/tool-call-BIHyGWIy.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-viewer-BB3_mBkA.js","sources":["../../../../../../node_modules/solid-js/web/dist/web.js","../../../../../../node_modules/solid-js/store/dist/store.js","../../../lib/client-identity.ts","../../../../../../node_modules/ms/index.js","../../../../../../node_modules/debug/src/common.js","../../../../../../node_modules/debug/src/browser.js","../../../lib/logger.ts","../../../lib/event-source-handlers.ts","../../../lib/api-client.ts","../../../lib/event-transport.ts","../../../lib/retry-utils.ts","../../../lib/server-events.ts","../../../lib/storage.ts","../../../stores/instance-config.tsx","../../../stores/speech.ts","../../../lib/speech-patch.ts","../../../lib/theme-scheme.ts","../../../lib/color-scheme-presets.ts","../../../lib/model-visibility.ts","../../../stores/preferences.tsx","../../../../../../node_modules/@suid/system/colorManipulator.js","../../../../../../node_modules/@suid/system/breakpoints.js","../../../../../../node_modules/@suid/styled-engine/StyledEngineProvider/StyledEngineContext.jsx","../../../../../../node_modules/@suid/material/colors/common.js","../../../../../../node_modules/@suid/material/colors/red.js","../../../../../../node_modules/@suid/material/colors/purple.js","../../../../../../node_modules/@suid/material/colors/blue.js","../../../../../../node_modules/@suid/material/colors/lightBlue.js","../../../../../../node_modules/@suid/material/colors/green.js","../../../../../../node_modules/@suid/material/colors/orange.js","../../../../../../node_modules/@suid/material/colors/grey.js","../../../../../../node_modules/@suid/utils/deepmerge.js","../../../../../../node_modules/@suid/utils/cloneObject.js","../../../../../../node_modules/@suid/utils/merge.js","../../../../../../node_modules/@suid/material/styles/createPalette.jsx","../../../../../../node_modules/@suid/material/styles/createComponents.jsx","../../../../../../node_modules/@suid/material/styles/createMixins.js","../../../../../../node_modules/@suid/material/styles/createShadows.jsx","../../../../../../node_modules/@suid/material/styles/createTransitions.jsx","../../../../../../node_modules/@suid/material/styles/createTypography.jsx","../../../../../../node_modules/@suid/material/styles/createZIndex.jsx","../../../../../../node_modules/@suid/css/renderMediaQuery.js","../../../../../../node_modules/@suid/system/createTheme/createBreakpoints.js","../../../../../../node_modules/@suid/system/createTheme/createSpacing.js","../../../../../../node_modules/@suid/system/createTheme/shape.js","../../../../../../node_modules/@suid/material/styles/createTheme.jsx","../../../../../../node_modules/@suid/system/makeGetDefaultTheme.js","../../../../../../node_modules/@suid/material/styles/getDefaultTheme.js","../../../../../../node_modules/@suid/system/ThemeContext/ThemeContext.jsx","../../../../../../node_modules/@suid/system/createTheme/createTheme.jsx","../../../../../../node_modules/@suid/system/getDefaultTheme.js","../../../../../../node_modules/@suid/utils/isEmptyObject.js","../../../../../../node_modules/@suid/system/useTheme.js","../../../../../../node_modules/@suid/material/styles/useTheme.js","../../../../../../node_modules/@suid/base/useTheme.js","../../../../../../node_modules/@suid/base/useThemeProps.js","../../../../../../node_modules/@suid/material/styles/ThemeProvider.jsx","../../../../../../node_modules/@suid/system/Dynamic/Dynamic.jsx","../../../../../../node_modules/@suid/styled-engine/mergeStyleProps.js","../../../../../../node_modules/@suid/css/assert.js","../../../../../../node_modules/@suid/css/utils/string.js","../../../../../../node_modules/@suid/css/render.js","../../../../../../node_modules/@suid/css/utils/array.js","../../../../../../node_modules/@suid/css/utils/function.js","../../../../../../node_modules/@suid/css/createStyleObject.js","../../../../../../node_modules/@suid/css/dom/setStyleElementText.js","../../../../../../node_modules/@suid/css/dom/createStyleElement.js","../../../../../../node_modules/@suid/css/dom/registerStyleElementUsage.js","../../../../../../node_modules/@suid/css/dom/appendStyleElement.js","../../../../../../node_modules/@suid/css/dom/findStyleElement.js","../../../../../../node_modules/@suid/css/dom/unregisterStyleElementUsage.js","../../../../../../node_modules/@suid/utils/capitalize.js","../../../../../../node_modules/@suid/utils/debounce.js","../../../../../../node_modules/@suid/utils/getScrollbarSize.js","../../../../../../node_modules/@suid/utils/ownerDocument.js","../../../../../../node_modules/@suid/utils/ownerWindow.js","../../../../../../node_modules/@suid/utils/randomString.js","../../../../../../node_modules/@suid/utils/useIsFocusVisible.js","../../../../../../node_modules/@suid/styled-engine/createStyle.jsx","../../../../../../node_modules/@suid/css/resolve.js","../../../../../../node_modules/@suid/system/resolveStyledProps.js","../../../../../../node_modules/@suid/system/getThemeValue.js","../../../../../../node_modules/@suid/system/spacing.js","../../../../../../node_modules/@suid/system/createSystemProps.js","../../../../../../node_modules/@suid/system/systemProps.js","../../../../../../node_modules/@suid/system/resolveSxProps.js","../../../../../../node_modules/clsx/dist/clsx.mjs","../../../../../../node_modules/@suid/system/createStyled.jsx","../../../../../../node_modules/@suid/material/styles/styled.jsx","../../../../../../node_modules/@suid/base/composeClasses.js","../../../../../../node_modules/@suid/system/inspect.js","../../../../../../node_modules/@suid/base/createComponentFactory.js","../../../../../../node_modules/@suid/material/GlobalStyles/GlobalStyles.jsx","../../../../../../node_modules/@suid/material/CssBaseline/CssBaseline.jsx","../../../lib/theme.tsx","../../../lib/diff-utils.ts","../../../lib/monaco/setup.ts","../../../lib/monaco/model-cache.ts","../../../lib/monaco/language.ts","../../../components/file-viewer/monaco-file-viewer.tsx","../../../components/file-viewer/monaco-diff-viewer.tsx"],"sourcesContent":["import { createMemo, createRoot, createRenderEffect, untrack, sharedConfig, enableHydration, getOwner, createEffect, runWithOwner, createSignal, onCleanup, splitProps } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","import { $PROXY, $TRACK, getListener, batch, createSignal } from 'solid-js';\n\nconst $RAW = Symbol(\"store-raw\"),\n $NODE = Symbol(\"store-node\"),\n $HAS = Symbol(\"store-has\"),\n $SELF = Symbol(\"store-self\");\nfunction wrap$1(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: p = new Proxy(value, proxyTraps$1)\n });\n if (!Array.isArray(value)) {\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (desc[prop].get) {\n Object.defineProperty(value, prop, {\n enumerable: desc[prop].enumerable,\n get: desc[prop].get.bind(p)\n });\n }\n }\n }\n }\n return p;\n}\nfunction isWrappable(obj) {\n let proto;\n return obj != null && typeof obj === \"object\" && (obj[$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));\n}\nfunction unwrap(item, set = new Set()) {\n let result, unwrapped, v, prop;\n if (result = item != null && item[$RAW]) return result;\n if (!isWrappable(item) || set.has(item)) return item;\n if (Array.isArray(item)) {\n if (Object.isFrozen(item)) item = item.slice(0);else set.add(item);\n for (let i = 0, l = item.length; i < l; i++) {\n v = item[i];\n if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;\n }\n } else {\n if (Object.isFrozen(item)) item = Object.assign({}, item);else set.add(item);\n const keys = Object.keys(item),\n desc = Object.getOwnPropertyDescriptors(item);\n for (let i = 0, l = keys.length; i < l; i++) {\n prop = keys[i];\n if (desc[prop].get) continue;\n v = item[prop];\n if ((unwrapped = unwrap(v, set)) !== v) item[prop] = unwrapped;\n }\n }\n return item;\n}\nfunction getNodes(target, symbol) {\n let nodes = target[symbol];\n if (!nodes) Object.defineProperty(target, symbol, {\n value: nodes = Object.create(null)\n });\n return nodes;\n}\nfunction getNode(nodes, property, value) {\n if (nodes[property]) return nodes[property];\n const [s, set] = createSignal(value, {\n equals: false,\n internal: true\n });\n s.$ = set;\n return nodes[property] = s;\n}\nfunction proxyDescriptor$1(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE) return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n return desc;\n}\nfunction trackSelf(target) {\n getListener() && getNode(getNodes(target, $NODE), $SELF)();\n}\nfunction ownKeys(target) {\n trackSelf(target);\n return Reflect.ownKeys(target);\n}\nconst proxyTraps$1 = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n if (getListener() && (typeof value !== \"function\" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();\n }\n return isWrappable(value) ? wrap$1(value) : value;\n },\n has(target, property) {\n if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === \"__proto__\") return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set() {\n return true;\n },\n deleteProperty() {\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor$1\n};\nfunction setProperty(state, property, value, deleting = false) {\n if (!deleting && state[property] === value) return;\n const prev = state[property],\n len = state.length;\n if (value === undefined) {\n delete state[property];\n if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();\n } else {\n state[property] = value;\n if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();\n }\n let nodes = getNodes(state, $NODE),\n node;\n if (node = getNode(nodes, property, prev)) node.$(() => value);\n if (Array.isArray(state) && state.length !== len) {\n for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();\n (node = getNode(nodes, \"length\", len)) && node.$(state.length);\n }\n (node = nodes[$SELF]) && node.$();\n}\nfunction mergeStoreNode(state, value) {\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n setProperty(state, key, value[key]);\n }\n}\nfunction updateArray(current, next) {\n if (typeof next === \"function\") next = next(current);\n next = unwrap(next);\n if (Array.isArray(next)) {\n if (current === next) return;\n let i = 0,\n len = next.length;\n for (; i < len; i++) {\n const value = next[i];\n if (current[i] !== value) setProperty(current, i, value);\n }\n setProperty(current, \"length\", len);\n } else mergeStoreNode(current, next);\n}\nfunction updatePath(current, path, traversed = []) {\n let part,\n prev = current;\n if (path.length > 1) {\n part = path.shift();\n const partType = typeof part,\n isArray = Array.isArray(current);\n if (Array.isArray(part)) {\n for (let i = 0; i < part.length; i++) {\n updatePath(current, [part[i]].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"function\") {\n for (let i = 0; i < current.length; i++) {\n if (part(current[i], i)) updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"object\") {\n const {\n from = 0,\n to = current.length - 1,\n by = 1\n } = part;\n for (let i = from; i <= to; i += by) {\n updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (path.length > 1) {\n updatePath(current[part], path, [part].concat(traversed));\n return;\n }\n prev = current[part];\n traversed = [part].concat(traversed);\n }\n let value = path[0];\n if (typeof value === \"function\") {\n value = value(prev, traversed);\n if (value === prev) return;\n }\n if (part === undefined && value == undefined) return;\n value = unwrap(value);\n if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {\n mergeStoreNode(prev, value);\n } else setProperty(current, part, value);\n}\nfunction createStore(...[store, options]) {\n const unwrappedStore = unwrap(store || {});\n const isArray = Array.isArray(unwrappedStore);\n const wrappedStore = wrap$1(unwrappedStore);\n function setStore(...args) {\n batch(() => {\n isArray && args.length === 1 ? updateArray(unwrappedStore, args[0]) : updatePath(unwrappedStore, args);\n });\n }\n return [wrappedStore, setStore];\n}\n\nfunction proxyDescriptor(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (!desc || desc.get || desc.set || !desc.configurable || property === $PROXY || property === $NODE) return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n desc.set = v => target[$PROXY][property] = v;\n return desc;\n}\nconst proxyTraps = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n const isFunction = typeof value === \"function\";\n if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {\n return (...args) => batch(() => Array.prototype[property].apply(receiver, args));\n }\n }\n return isWrappable(value) ? wrap(value) : value;\n },\n has(target, property) {\n if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === \"__proto__\") return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set(target, property, value) {\n batch(() => setProperty(target, property, unwrap(value)));\n return true;\n },\n deleteProperty(target, property) {\n batch(() => setProperty(target, property, undefined, true));\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor\n};\nfunction wrap(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: p = new Proxy(value, proxyTraps)\n });\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n const proto = Object.getPrototypeOf(value);\n const isClass = proto !== null && value !== null && typeof value === \"object\" && !Array.isArray(value) && proto !== Object.prototype;\n if (isClass) {\n let curProto = proto;\n while (curProto != null) {\n const descriptors = Object.getOwnPropertyDescriptors(curProto);\n keys.push(...Object.keys(descriptors));\n Object.assign(desc, descriptors);\n curProto = Object.getPrototypeOf(curProto);\n }\n }\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (isClass && prop === \"constructor\") continue;\n if (desc[prop].get) {\n const get = desc[prop].get.bind(p);\n Object.defineProperty(value, prop, {\n get,\n configurable: true\n });\n }\n if (desc[prop].set) {\n const og = desc[prop].set,\n set = v => batch(() => og.call(p, v));\n Object.defineProperty(value, prop, {\n set,\n configurable: true\n });\n }\n }\n }\n return p;\n}\nfunction createMutable(state, options) {\n const unwrappedStore = unwrap(state || {});\n const wrappedStore = wrap(unwrappedStore);\n return wrappedStore;\n}\nfunction modifyMutable(state, modifier) {\n batch(() => modifier(unwrap(state)));\n}\n\nconst $ROOT = Symbol(\"store-root\");\nfunction applyState(target, parent, property, merge, key) {\n const previous = parent[property];\n if (target === previous) return;\n const isArray = Array.isArray(target);\n if (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || isArray !== Array.isArray(previous) || key && target[key] !== previous[key])) {\n setProperty(parent, property, target);\n return;\n }\n if (isArray) {\n if (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {\n let i, j, start, end, newEnd, item, newIndicesNext, keyVal;\n for (start = 0, end = Math.min(previous.length, target.length); start < end && (previous[start] === target[start] || key && previous[start] && target[start] && previous[start][key] && previous[start][key] === target[start][key]); start++) {\n applyState(target[start], previous, start, merge, key);\n }\n const temp = new Array(target.length),\n newIndices = new Map();\n for (end = previous.length - 1, newEnd = target.length - 1; end >= start && newEnd >= start && (previous[end] === target[newEnd] || key && previous[end] && target[newEnd] && previous[end][key] && previous[end][key] === target[newEnd][key]); end--, newEnd--) {\n temp[newEnd] = previous[end];\n }\n if (start > newEnd || start > end) {\n for (j = start; j <= newEnd; j++) setProperty(previous, j, target[j]);\n for (; j < target.length; j++) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = target[j];\n keyVal = key && item ? item[key] : item;\n i = newIndices.get(keyVal);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(keyVal, j);\n }\n for (i = start; i <= end; i++) {\n item = previous[i];\n keyVal = key && item ? item[key] : item;\n j = newIndices.get(keyVal);\n if (j !== undefined && j !== -1) {\n temp[j] = previous[i];\n j = newIndicesNext[j];\n newIndices.set(keyVal, j);\n }\n }\n for (j = start; j < target.length; j++) {\n if (j in temp) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n } else setProperty(previous, j, target[j]);\n }\n } else {\n for (let i = 0, len = target.length; i < len; i++) {\n applyState(target[i], previous, i, merge, key);\n }\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n const targetKeys = Object.keys(target);\n for (let i = 0, len = targetKeys.length; i < len; i++) {\n applyState(target[targetKeys[i]], previous, targetKeys[i], merge, key);\n }\n const previousKeys = Object.keys(previous);\n for (let i = 0, len = previousKeys.length; i < len; i++) {\n if (target[previousKeys[i]] === undefined) setProperty(previous, previousKeys[i], undefined);\n }\n}\nfunction reconcile(value, options = {}) {\n const {\n merge,\n key = \"id\"\n } = options,\n v = unwrap(value);\n return state => {\n if (!isWrappable(state) || !isWrappable(v)) return v;\n const res = applyState(v, {\n [$ROOT]: state\n }, $ROOT, merge, key);\n return res === undefined ? state : res;\n };\n}\nconst producers = new WeakMap();\nconst setterTraps = {\n get(target, property) {\n if (property === $RAW) return target;\n const value = target[property];\n let proxy;\n return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value;\n },\n set(target, property, value) {\n setProperty(target, property, unwrap(value));\n return true;\n },\n deleteProperty(target, property) {\n setProperty(target, property, undefined, true);\n return true;\n }\n};\nfunction produce(fn) {\n return state => {\n if (isWrappable(state)) {\n let proxy;\n if (!(proxy = producers.get(state))) {\n producers.set(state, proxy = new Proxy(state, setterTraps));\n }\n fn(proxy);\n }\n return state;\n };\n}\n\nconst DEV = undefined;\n\nexport { $RAW, DEV, createMutable, createStore, modifyMutable, produce, reconcile, unwrap };\n","const CLIENT_ID_STORAGE_KEY = \"codenomad.client-id\"\nconst CONNECTION_ID_STORAGE_KEY = \"codenomad.connection-id\"\n\nlet cachedClientId: string | null = null\nlet cachedConnectionId: string | null = null\n\nexport function getClientIdentity(): { clientId: string; connectionId: string } {\n return {\n clientId: getOrCreateClientId(),\n connectionId: getOrCreateConnectionId(),\n }\n}\n\nfunction getOrCreateClientId(): string {\n if (cachedClientId) return cachedClientId\n cachedClientId = getOrCreateStoredValue(CLIENT_ID_STORAGE_KEY, window.localStorage)\n return cachedClientId\n}\n\nfunction getOrCreateConnectionId(): string {\n const nativeWindowId = window.__CODENOMAD_WINDOW_ID__?.trim()\n if (nativeWindowId) return nativeWindowId\n if (cachedConnectionId) return cachedConnectionId\n cachedConnectionId = getOrCreateStoredValue(CONNECTION_ID_STORAGE_KEY, window.sessionStorage)\n return cachedConnectionId\n}\n\nfunction getOrCreateStoredValue(key: string, storage: Storage): string {\n if (typeof window === \"undefined\") {\n return generateUUID()\n }\n\n try {\n const existing = storage.getItem(key)\n if (existing && existing.trim()) {\n return existing.trim()\n }\n } catch {\n return generateUUID()\n }\n\n const next = generateUUID()\n try {\n storage.setItem(key, next)\n } catch {\n // Ignore storage failures and fall back to the in-memory value.\n }\n return next\n}\n\nfunction generateUUID(): string {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID()\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const random = (Math.random() * 16) | 0\n const value = char === \"x\" ? random : (random & 0x3) | 0x8\n return value.toString(16)\n })\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","import debug from \"debug\"\n\nexport type LoggerNamespace = \"sse\" | \"api\" | \"session\" | \"actions\" | \"foreground-refresh\"\n\ninterface Logger {\n log: (...args: unknown[]) => void\n info: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n}\n\nexport interface NamespaceState {\n name: LoggerNamespace\n enabled: boolean\n}\n\nexport interface LoggerControls {\n listLoggerNamespaces: () => NamespaceState[]\n enableLogger: (namespace: LoggerNamespace) => void\n disableLogger: (namespace: LoggerNamespace) => void\n enableAllLoggers: () => void\n disableAllLoggers: () => void\n}\n\nconst KNOWN_NAMESPACES: LoggerNamespace[] = [\"sse\", \"api\", \"session\", \"actions\", \"foreground-refresh\"]\nconst STORAGE_KEY = \"opencode:logger:namespaces\"\n\nconst namespaceLoggers = new Map<LoggerNamespace, Logger>()\nconst enabledNamespaces = new Set<LoggerNamespace>()\nconst rawConsole = typeof globalThis !== \"undefined\" ? globalThis.console : undefined\n\nfunction applyEnabledNamespaces(): void {\n if (enabledNamespaces.size === 0) {\n debug.disable()\n } else {\n debug.enable(Array.from(enabledNamespaces).join(\",\"))\n }\n}\n\nfunction persistEnabledNamespaces(): void {\n if (typeof window === \"undefined\" || !window?.localStorage) return\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(Array.from(enabledNamespaces)))\n } catch (error) {\n rawConsole?.warn?.(\"Failed to persist logger namespaces\", error)\n }\n}\n\nfunction hydrateNamespacesFromStorage(): void {\n if (typeof window === \"undefined\" || !window?.localStorage) return\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY)\n if (!stored) return\n const parsed: unknown = JSON.parse(stored)\n if (!Array.isArray(parsed)) return\n for (const name of parsed) {\n if (KNOWN_NAMESPACES.includes(name as LoggerNamespace)) {\n enabledNamespaces.add(name as LoggerNamespace)\n }\n }\n } catch (error) {\n rawConsole?.warn?.(\"Failed to hydrate logger namespaces\", error)\n }\n}\n\nhydrateNamespacesFromStorage()\napplyEnabledNamespaces()\n\nfunction buildLogger(namespace: LoggerNamespace): Logger {\n const base = debug(namespace)\n const baseLogger: (...args: any[]) => void = base\n const formatAndLog = (level: string, args: any[]) => {\n baseLogger(level, ...args)\n }\n return {\n log: (...args: any[]) => baseLogger(...args),\n info: (...args: any[]) => baseLogger(...args),\n warn: (...args: any[]) => formatAndLog(\"[warn]\", args),\n error: (...args: any[]) => formatAndLog(\"[error]\", args),\n }\n}\n\nfunction getLogger(namespace: LoggerNamespace): Logger {\n if (!KNOWN_NAMESPACES.includes(namespace)) {\n throw new Error(`Unknown logger namespace: ${namespace}`)\n }\n if (!namespaceLoggers.has(namespace)) {\n namespaceLoggers.set(namespace, buildLogger(namespace))\n }\n return namespaceLoggers.get(namespace)!\n}\n\nfunction listLoggerNamespaces(): NamespaceState[] {\n return KNOWN_NAMESPACES.map((name) => ({ name, enabled: enabledNamespaces.has(name) }))\n}\n\nfunction enableLogger(namespace: LoggerNamespace): void {\n if (!KNOWN_NAMESPACES.includes(namespace)) {\n throw new Error(`Unknown logger namespace: ${namespace}`)\n }\n if (enabledNamespaces.has(namespace)) return\n enabledNamespaces.add(namespace)\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nfunction disableLogger(namespace: LoggerNamespace): void {\n if (!KNOWN_NAMESPACES.includes(namespace)) {\n throw new Error(`Unknown logger namespace: ${namespace}`)\n }\n if (!enabledNamespaces.has(namespace)) return\n enabledNamespaces.delete(namespace)\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nfunction disableAllLoggers(): void {\n enabledNamespaces.clear()\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nfunction enableAllLoggers(): void {\n KNOWN_NAMESPACES.forEach((namespace) => enabledNamespaces.add(namespace))\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nconst loggerControls: LoggerControls = {\n listLoggerNamespaces,\n enableLogger,\n disableLogger,\n enableAllLoggers,\n disableAllLoggers,\n}\n\nfunction exposeLoggerControls(): void {\n if (typeof window === \"undefined\") return\n window.codenomadLogger = loggerControls\n}\n\nexposeLoggerControls()\n\nexport {\n getLogger,\n listLoggerNamespaces,\n enableLogger,\n disableLogger,\n enableAllLoggers,\n disableAllLoggers,\n}\n","import type { WorkspaceEventPayload } from \"../../../server/src/api-types\"\n\ntype EventSourceLogger = {\n warn: (message: string) => void\n error: (message: string, error?: unknown) => void\n}\n\ntype EventSourceWithClose = EventSource & {\n onclose?: () => void\n}\n\ninterface EventSourceHandlerOptions {\n onEvent: (event: WorkspaceEventPayload) => void\n onError?: () => void\n onPing?: (payload: { ts?: number }) => void\n logger: EventSourceLogger\n}\n\nexport function attachEventSourceHandlers(source: EventSource, options: EventSourceHandlerOptions) {\n let disconnected = false\n\n source.onmessage = (event) => {\n try {\n const payload = JSON.parse(event.data) as WorkspaceEventPayload\n options.onEvent(payload)\n } catch (error) {\n options.logger.error(\"Failed to parse event\", error)\n }\n }\n\n const handleDisconnect = (reason: string) => {\n if (disconnected) {\n return\n }\n disconnected = true\n options.logger.warn(reason)\n options.onError?.()\n }\n\n source.onerror = () => {\n handleDisconnect(\"EventSource error, closing stream\")\n }\n\n ;(source as EventSourceWithClose).onclose = () => {\n handleDisconnect(\"EventSource closed\")\n }\n\n source.addEventListener(\"close\", () => {\n handleDisconnect(\"EventSource closed\")\n })\n\n source.addEventListener(\"codenomad.client.ping\", (event: MessageEvent) => {\n try {\n const payload = event.data ? (JSON.parse(event.data) as { ts?: number }) : {}\n options.onPing?.(payload)\n } catch (error) {\n options.logger.error(\"Failed to parse ping event\", error)\n }\n })\n}\n","import type {\n BinaryValidationResult,\n ConfigFileContentRequest,\n ConfigFileContentResponse,\n ConfigFileListResponse,\n FileSystemEntry,\n FileSystemCreateFolderResponse,\n FileSystemFileContentResponse,\n FileSystemListResponse,\n InstanceData,\n OpenCodeUpdateResponse,\n OpenCodeUpdateStatus,\n SpeechCapabilitiesResponse,\n SpeechSynthesisResponse,\n SpeechTranscriptionResponse,\n SideCar,\n PreviewSession,\n ProviderUsageResponse,\n ServerMeta,\n RemoteProxySessionCreateRequest,\n RemoteProxySessionCreateResponse,\n RemoteServerProbeRequest,\n RemoteServerProbeResponse,\n YoloStateResponse,\n WorkspaceCloneRequest,\n WorkspaceCloneResponse,\n WorktreeGitCommitRequest,\n WorktreeGitCommitResponse,\n WorktreeGitDiffRequest,\n WorktreeGitMutationResponse,\n WorktreeGitPathsRequest,\n WorkspaceCreateRequest,\n WorkspaceCreateResponse,\n WorkspaceDescriptor,\n WorkspaceFileResponse,\n WorkspaceFileSearchResponse,\n\n WorkspaceLogEntry,\n WorkspaceEventPayload,\n WorkspaceEventType,\n WorktreeListResponse,\n WorktreeCreateRequest,\n WorktreeGitDiffResponse,\n WorktreeGitStatusResponse,\n} from \"../../../server/src/api-types\"\nimport { getClientIdentity } from \"./client-identity\"\nimport { getLogger } from \"./logger\"\nimport { attachEventSourceHandlers } from \"./event-source-handlers\"\n\nconst RUNTIME_BASE = typeof window !== \"undefined\" ? window.location?.origin : undefined\nconst DEFAULT_BASE = typeof window !== \"undefined\" ? window.__CODENOMAD_API_BASE__ ?? RUNTIME_BASE : undefined\nconst DEFAULT_EVENTS_PATH = typeof window !== \"undefined\" ? window.__CODENOMAD_EVENTS_URL__ ?? \"/api/events\" : \"/api/events\"\nconst API_BASE = import.meta.env?.VITE_CODENOMAD_API_BASE ?? DEFAULT_BASE\nconst EVENTS_URL = buildEventsUrl(API_BASE, DEFAULT_EVENTS_PATH)\n\nexport const CODENOMAD_API_BASE = API_BASE\n\nfunction buildEventsUrl(base: string | undefined, path: string): string {\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path\n }\n if (base) {\n const normalized = path.startsWith(\"/\") ? path : `/${path}`\n return `${base}${normalized}`\n }\n return path\n}\n\nconst httpLogger = getLogger(\"api\")\nconst sseLogger = getLogger(\"sse\")\n\nfunction normalizeHeaders(headers: HeadersInit | undefined): Record<string, string> {\n const output: Record<string, string> = {}\n if (!headers) return output\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n output[key] = value\n })\n return output\n }\n\n if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n output[key] = value\n }\n return output\n }\n\n return { ...headers }\n}\n\nfunction logHttp(message: string, context?: Record<string, unknown>) {\n if (context) {\n httpLogger.info(message, context)\n return\n }\n httpLogger.info(message)\n}\n\nasync function readErrorMessage(response: Response): Promise<string> {\n const text = await response.text()\n if (!text) return `Request failed with ${response.status}`\n\n try {\n const parsed = JSON.parse(text) as { error?: unknown; message?: unknown }\n if (typeof parsed?.error === \"string\" && parsed.error.trim()) {\n return parsed.error\n }\n if (typeof parsed?.message === \"string\" && parsed.message.trim()) {\n return parsed.message\n }\n } catch {\n // Keep the original body for plain-text responses.\n }\n\n return text\n}\n\nasync function request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = API_BASE ? new URL(path, API_BASE).toString() : path\n const headers = normalizeHeaders(init?.headers)\n if (init?.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const method = (init?.method ?? \"GET\").toUpperCase()\n const startedAt = Date.now()\n logHttp(`${method} ${path}`)\n\n try {\n const response = await fetch(url, { ...init, headers, credentials: init?.credentials ?? \"include\" })\n if (!response.ok) {\n const message = await readErrorMessage(response)\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: Date.now() - startedAt, error: message })\n throw new Error(message || `Request failed with ${response.status}`)\n }\n const duration = Date.now() - startedAt\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: duration })\n if (response.status === 204) {\n return undefined as T\n }\n return (await response.json()) as T\n } catch (error) {\n logHttp(`${method} ${path} failed`, { durationMs: Date.now() - startedAt, error })\n throw error\n }\n}\n\nasync function requestRaw(path: string, init?: RequestInit): Promise<Response> {\n const url = API_BASE ? new URL(path, API_BASE).toString() : path\n const headers = normalizeHeaders(init?.headers)\n if (init?.body !== undefined && !headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const method = (init?.method ?? \"GET\").toUpperCase()\n const startedAt = Date.now()\n logHttp(`${method} ${path}`)\n\n const response = await fetch(url, { ...init, headers, credentials: init?.credentials ?? \"include\" })\n if (!response.ok) {\n const message = await readErrorMessage(response)\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: Date.now() - startedAt, error: message })\n throw new Error(message || `Request failed with ${response.status}`)\n }\n\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: Date.now() - startedAt })\n return response\n}\n\n\nexport const serverApi = {\n fetchWorkspaces(): Promise<WorkspaceDescriptor[]> {\n return request<WorkspaceDescriptor[]>(\"/api/workspaces\")\n },\n\n fetchProviderUsage(providerId: string, modelId?: string): Promise<ProviderUsageResponse> {\n const params = new URLSearchParams()\n if (modelId) params.set(\"modelId\", modelId)\n const query = params.toString()\n return request<ProviderUsageResponse>(`/api/usage/${encodeURIComponent(providerId)}${query ? `?${query}` : \"\"}`)\n },\n\n fetchWorktrees(id: string): Promise<WorktreeListResponse> {\n return request<WorktreeListResponse>(`/api/workspaces/${encodeURIComponent(id)}/worktrees`)\n },\n\n createWorktree(id: string, payload: WorktreeCreateRequest): Promise<{ slug: string; directory: string; branch?: string }> {\n return request<{ slug: string; directory: string; branch?: string }>(`/api/workspaces/${encodeURIComponent(id)}/worktrees`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n\n deleteWorktree(id: string, slug: string, options?: { force?: boolean }): Promise<void> {\n const params = new URLSearchParams()\n if (options?.force) {\n params.set(\"force\", \"true\")\n }\n const suffix = params.toString() ? `?${params.toString()}` : \"\"\n return request(`/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}${suffix}`, {\n method: \"DELETE\",\n })\n },\n\n createWorkspace(payload: WorkspaceCreateRequest, options?: { signal?: AbortSignal }): Promise<WorkspaceCreateResponse> {\n return request<WorkspaceCreateResponse>(\"/api/workspaces\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n signal: options?.signal,\n })\n },\n cancelWorkspaceCreation(requestId: string): Promise<void> {\n return request(\"/api/workspaces/creation/cancel\", {\n method: \"POST\",\n body: JSON.stringify({ requestId }),\n })\n },\n releaseWorkspaceCreation(id: string, requestId: string): Promise<void> {\n return request(`/api/workspaces/${encodeURIComponent(id)}/creation/release`, {\n method: \"POST\",\n body: JSON.stringify({ requestId }),\n })\n },\n fetchSidecars(): Promise<{ sidecars: SideCar[] }> {\n return request<{ sidecars: SideCar[] }>(\"/api/sidecars\")\n },\n createSidecar(payload: {\n kind: \"port\"\n name: string\n port: number\n insecure: boolean\n prefixMode: \"strip\" | \"preserve\"\n }): Promise<SideCar> {\n return request<SideCar>(\"/api/sidecars\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n updateSidecar(\n id: string,\n payload: Partial<{ name: string; port: number; insecure: boolean; prefixMode: \"strip\" | \"preserve\" }>,\n ): Promise<SideCar> {\n return request<SideCar>(`/api/sidecars/${encodeURIComponent(id)}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n })\n },\n deleteSidecar(id: string): Promise<void> {\n return request(`/api/sidecars/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n createPreview(payload: { sessionId: string; url: string }): Promise<PreviewSession> {\n return request<PreviewSession>(\"/api/previews\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n deletePreview(token: string): Promise<void> {\n return request(`/api/previews/${encodeURIComponent(token)}`, { method: \"DELETE\" })\n },\n fetchServerMeta(): Promise<ServerMeta> {\n return request<ServerMeta>(\"/api/meta\")\n },\n probeRemoteServer(payload: RemoteServerProbeRequest): Promise<RemoteServerProbeResponse> {\n return request<RemoteServerProbeResponse>(\"/api/remote-servers/probe\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n createRemoteProxySession(payload: RemoteProxySessionCreateRequest): Promise<RemoteProxySessionCreateResponse> {\n return request<RemoteProxySessionCreateResponse>(\"/api/remote-proxy/sessions\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n deleteRemoteProxySession(id: string): Promise<void> {\n return request(`/api/remote-proxy/sessions/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n fetchAuthStatus(): Promise<{ authenticated: boolean; username?: string; passwordUserProvided?: boolean }> {\n return request<{ authenticated: boolean; username?: string; passwordUserProvided?: boolean }>(\"/api/auth/status\")\n },\n listConfigFiles(): Promise<ConfigFileListResponse> {\n return request<ConfigFileListResponse>(\"/api/config-files\")\n },\n readConfigFile(id: string): Promise<ConfigFileContentResponse> {\n return request<ConfigFileContentResponse>(`/api/config-files/${encodeURIComponent(id)}/content`)\n },\n writeConfigFile(id: string, contents: string): Promise<void> {\n const body: ConfigFileContentRequest = { contents }\n return request(`/api/config-files/${encodeURIComponent(id)}/content`, {\n method: \"PUT\",\n body: JSON.stringify(body),\n })\n },\n setServerPassword(password: string): Promise<{ ok: boolean; username: string; passwordUserProvided: boolean }> {\n return request<{ ok: boolean; username: string; passwordUserProvided: boolean }>(\"/api/auth/password\", {\n method: \"POST\",\n body: JSON.stringify({ password }),\n })\n },\n deleteWorkspace(id: string): Promise<void> {\n return request(`/api/workspaces/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n cloneWorkspaceRepository(payload: WorkspaceCloneRequest): Promise<WorkspaceCloneResponse> {\n return request<WorkspaceCloneResponse>(\"/api/workspaces/clone\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n listWorkspaceFiles(id: string, relativePath = \".\"): Promise<FileSystemEntry[]> {\n const params = new URLSearchParams({ path: relativePath })\n return request<FileSystemEntry[]>(`/api/workspaces/${encodeURIComponent(id)}/files?${params.toString()}`)\n },\n searchWorkspaceFiles(\n id: string,\n query: string,\n opts?: { limit?: number; type?: \"file\" | \"directory\" | \"all\" },\n ): Promise<WorkspaceFileSearchResponse> {\n const trimmed = query.trim()\n if (!trimmed) {\n return Promise.resolve([])\n }\n const params = new URLSearchParams({ q: trimmed })\n if (opts?.limit) {\n params.set(\"limit\", String(opts.limit))\n }\n if (opts?.type) {\n params.set(\"type\", opts.type)\n }\n return request<WorkspaceFileSearchResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/files/search?${params.toString()}`,\n )\n },\n readWorkspaceFile(id: string, relativePath: string, options?: { encoding?: \"utf-8\" | \"base64\" }): Promise<WorkspaceFileResponse> {\n const params = new URLSearchParams({ path: relativePath })\n if (options?.encoding) {\n params.set(\"encoding\", options.encoding)\n }\n return request<WorkspaceFileResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/files/content?${params.toString()}`,\n )\n },\n writeWorkspaceFile(id: string, relativePath: string, contents: string, options?: { worktree?: string }): Promise<void> {\n const params = new URLSearchParams({ path: relativePath })\n if (options?.worktree && options.worktree !== \"root\") {\n params.set(\"worktree\", options.worktree)\n }\n return request(\n `/api/workspaces/${encodeURIComponent(id)}/files/content?${params.toString()}`,\n {\n method: \"PUT\",\n body: JSON.stringify({ contents }),\n },\n )\n },\n fetchWorktreeGitStatus(id: string, slug: string): Promise<WorktreeGitStatusResponse> {\n return request<WorktreeGitStatusResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-status`,\n )\n },\n fetchWorktreeGitDiff(id: string, slug: string, requestPayload: WorktreeGitDiffRequest): Promise<WorktreeGitDiffResponse> {\n const params = new URLSearchParams({ path: requestPayload.path, scope: requestPayload.scope })\n if (requestPayload.originalPath) {\n params.set(\"originalPath\", requestPayload.originalPath)\n }\n return request<WorktreeGitDiffResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-diff?${params.toString()}`,\n )\n },\n stageWorktreeGitPaths(id: string, slug: string, payload: WorktreeGitPathsRequest): Promise<WorktreeGitMutationResponse> {\n return request<WorktreeGitMutationResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-stage`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n },\n )\n },\n unstageWorktreeGitPaths(id: string, slug: string, payload: WorktreeGitPathsRequest): Promise<WorktreeGitMutationResponse> {\n return request<WorktreeGitMutationResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-unstage`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n },\n )\n },\n commitWorktreeGitChanges(id: string, slug: string, payload: WorktreeGitCommitRequest): Promise<WorktreeGitCommitResponse> {\n return request<WorktreeGitCommitResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-commit`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n },\n )\n },\n\n fetchConfigOwner<T extends Record<string, any> = Record<string, any>>(owner: string): Promise<T> {\n return request<T>(`/api/storage/config/${encodeURIComponent(owner)}`)\n },\n patchConfigOwner<T extends Record<string, any> = Record<string, any>>(owner: string, patch: unknown): Promise<T> {\n return request<T>(`/api/storage/config/${encodeURIComponent(owner)}`, {\n method: \"PATCH\",\n body: JSON.stringify(patch ?? {}),\n })\n },\n fetchStateOwner<T extends Record<string, any> = Record<string, any>>(owner: string): Promise<T> {\n return request<T>(`/api/storage/state/${encodeURIComponent(owner)}`)\n },\n patchStateOwner<T extends Record<string, any> = Record<string, any>>(owner: string, patch: unknown): Promise<T> {\n return request<T>(`/api/storage/state/${encodeURIComponent(owner)}`, {\n method: \"PATCH\",\n body: JSON.stringify(patch ?? {}),\n })\n },\n\n validateBinary(path: string): Promise<BinaryValidationResult> {\n return request<BinaryValidationResult>(\"/api/storage/binaries/validate\", {\n method: \"POST\",\n body: JSON.stringify({ path }),\n })\n },\n fetchOpenCodeUpdateStatus(): Promise<OpenCodeUpdateStatus> {\n return request<OpenCodeUpdateStatus>(\"/api/opencode/update\")\n },\n updateOpenCode(): Promise<OpenCodeUpdateResponse> {\n return request<OpenCodeUpdateResponse>(\"/api/opencode/update\", { method: \"POST\" })\n },\n fetchSpeechCapabilities(): Promise<SpeechCapabilitiesResponse> {\n return request<SpeechCapabilitiesResponse>(\"/api/speech/capabilities\")\n },\n transcribeAudio(payload: {\n audioBase64: string\n mimeType: string\n filename?: string\n language?: string\n prompt?: string\n }): Promise<SpeechTranscriptionResponse> {\n return request<SpeechTranscriptionResponse>(\"/api/speech/transcribe\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n synthesizeSpeech(payload: { text: string; format?: \"mp3\" | \"wav\" | \"opus\" | \"aac\" }): Promise<SpeechSynthesisResponse> {\n return request<SpeechSynthesisResponse>(\"/api/speech/synthesize\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n synthesizeSpeechStream(\n payload: { text: string; format?: \"mp3\" | \"wav\" | \"opus\" | \"aac\" },\n signal?: AbortSignal,\n ): Promise<Response> {\n return requestRaw(\"/api/speech/synthesize/stream\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n signal,\n })\n },\n listFileSystem(path?: string, options?: { includeFiles?: boolean }): Promise<FileSystemListResponse> {\n const params = new URLSearchParams()\n if (path && path !== \".\") {\n params.set(\"path\", path)\n }\n if (options?.includeFiles !== undefined) {\n params.set(\"includeFiles\", String(options.includeFiles))\n }\n const query = params.toString()\n return request<FileSystemListResponse>(query ? `/api/filesystem?${query}` : \"/api/filesystem\")\n },\n\n createFileSystemFolder(parentPath: string | undefined, name: string): Promise<FileSystemCreateFolderResponse> {\n return request<FileSystemCreateFolderResponse>(\"/api/filesystem/folders\", {\n method: \"POST\",\n body: JSON.stringify({ parentPath, name }),\n })\n },\n readFileSystemFile(path: string, options?: { encoding?: \"utf-8\" | \"base64\" }): Promise<FileSystemFileContentResponse> {\n const params = new URLSearchParams({ path })\n if (options?.encoding) {\n params.set(\"encoding\", options.encoding)\n }\n return request<FileSystemFileContentResponse>(`/api/filesystem/files/content?${params.toString()}`)\n },\n readInstanceData(id: string): Promise<InstanceData> {\n return request<InstanceData>(`/api/storage/instances/${encodeURIComponent(id)}`)\n },\n writeInstanceData(id: string, data: InstanceData): Promise<void> {\n return request(`/api/storage/instances/${encodeURIComponent(id)}`, {\n method: \"PUT\",\n body: JSON.stringify(data),\n })\n },\n deleteInstanceData(id: string): Promise<void> {\n return request(`/api/storage/instances/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n getYoloState(instanceId: string, sessionId: string): Promise<YoloStateResponse> {\n return request<YoloStateResponse>(\n `/workspaces/${encodeURIComponent(instanceId)}/yolo/sessions/${encodeURIComponent(sessionId)}`,\n )\n },\n toggleYolo(instanceId: string, sessionId: string): Promise<YoloStateResponse> {\n return request<YoloStateResponse>(\n `/workspaces/${encodeURIComponent(instanceId)}/yolo/sessions/${encodeURIComponent(sessionId)}/toggle`,\n { method: \"POST\" },\n )\n },\n sendClientConnectionPong(payload: { clientId: string; connectionId: string; pingTs?: number }, signal?: AbortSignal): Promise<void> {\n const init: RequestInit = {\n method: \"POST\",\n body: JSON.stringify(payload),\n }\n if (signal) {\n init.signal = signal\n }\n return request<void>(\"/api/client-connections/pong\", init)\n },\n connectEvents(\n onEvent: (event: WorkspaceEventPayload) => void,\n onError?: () => void,\n onPing?: (payload: { ts?: number }) => void,\n ) {\n const identity = getClientIdentity()\n const url = buildClientEventsUrl(identity)\n sseLogger.info(`Connecting to ${url}`)\n const source = new EventSource(url, { withCredentials: true } as any)\n attachEventSourceHandlers(source, { onEvent, onError, onPing, logger: sseLogger })\n return source\n },\n}\n\nfunction buildClientEventsUrl(identity: { clientId: string; connectionId: string }): string {\n const url = new URL(EVENTS_URL, typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\")\n url.searchParams.set(\"clientId\", identity.clientId)\n url.searchParams.set(\"connectionId\", identity.connectionId)\n if (EVENTS_URL.startsWith(\"http://\") || EVENTS_URL.startsWith(\"https://\")) {\n return url.toString()\n }\n return `${url.pathname}${url.search}`\n}\n\nexport type { WorkspaceDescriptor, WorkspaceLogEntry, WorkspaceEventPayload, WorkspaceEventType, SideCar }\n","import type { WorkspaceEventPayload } from \"../../../server/src/api-types\"\nimport { serverApi } from \"./api-client\"\n\nexport interface WorkspaceEventTransportCallbacks {\n onBatch: (events: WorkspaceEventPayload[]) => void\n onError?: () => void\n onOpen?: () => void\n onStatus?: (status: WorkspaceEventTransportStatus) => void\n onPing?: (payload: { ts?: number }) => void\n}\n\nexport type WorkspaceEventTransportStatus = \"connecting\" | \"connected\" | \"disconnected\"\n\nexport interface WorkspaceEventConnection {\n disconnect: () => void\n}\n\nexport async function connectWorkspaceEvents(\n callbacks: WorkspaceEventTransportCallbacks,\n): Promise<WorkspaceEventConnection> {\n const notifyDisconnected = () => {\n callbacks.onStatus?.(\"disconnected\")\n callbacks.onError?.()\n }\n const source = serverApi.connectEvents((event) => {\n callbacks.onBatch([event])\n }, notifyDisconnected, callbacks.onPing)\n source.onopen = () => {\n callbacks.onStatus?.(\"connected\")\n callbacks.onOpen?.()\n }\n return {\n disconnect() {\n source.close()\n },\n }\n}\n","interface RetryOptions {\n maxAttempts?: number\n initialDelayMs?: number\n maxDelayMs?: number\n backoffMultiplier?: number\n timeoutMs?: number\n shouldRetry?: (error: Error, attempt: number) => boolean\n wait?: (delayMs: number) => Promise<void>\n}\n\nexport async function retryWithBackoff<T>(\n fn: (signal?: AbortSignal) => Promise<T>,\n options: RetryOptions = {},\n): Promise<T> {\n const {\n maxAttempts = 3,\n initialDelayMs = 100,\n maxDelayMs = 5000,\n backoffMultiplier = 2,\n timeoutMs,\n shouldRetry = () => true,\n wait = (delayMs: number) => new Promise((resolve) => setTimeout(resolve, delayMs)),\n } = options\n\n let lastError: Error | null = null\n let delayMs = initialDelayMs\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n if (timeoutMs) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeoutMs)\n try {\n const result = await fn(controller.signal)\n clearTimeout(timer)\n return result\n } catch (error) {\n clearTimeout(timer)\n throw error\n }\n }\n\n return await fn()\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n lastError = err\n\n if (attempt < maxAttempts && shouldRetry(err, attempt)) {\n await wait(delayMs)\n delayMs = Math.min(delayMs * backoffMultiplier, maxDelayMs)\n } else {\n throw err\n }\n }\n }\n\n throw lastError || new Error(\"Failed after retries\")\n}\n\nexport function isRetryableError(error: Error): boolean {\n if (error.name === \"AbortError\" || error.name === \"TimeoutError\") return true\n if (error.message.includes(\"Failed to fetch\")) return true\n if (error.message.includes(\"NetworkError\")) return true\n if (error.message.includes(\"timeout\")) return true\n return false\n}\n","import { batch as solidBatch } from \"solid-js\"\nimport type { WorkspaceEventPayload, WorkspaceEventType } from \"../../../server/src/api-types\"\nimport { serverApi } from \"./api-client\"\nimport { getClientIdentity } from \"./client-identity\"\nimport {\n connectWorkspaceEvents,\n type WorkspaceEventConnection,\n type WorkspaceEventTransportStatus,\n} from \"./event-transport\"\nimport { getLogger } from \"./logger\"\nimport { retryWithBackoff, isRetryableError } from \"./retry-utils\"\n\nconst RETRY_BASE_DELAY = 1000\nconst RETRY_MAX_DELAY = 10000\nconst log = getLogger(\"sse\")\n\nfunction logSse(message: string, context?: Record<string, unknown>) {\n if (context) {\n log.info(message, context)\n return\n }\n log.info(message)\n}\n\nclass ServerEvents {\n private handlers = new Map<WorkspaceEventType | \"*\", Set<(event: WorkspaceEventPayload) => void>>()\n private openHandlers = new Set<() => void>()\n private statusHandlers = new Set<(status: WorkspaceEventTransportStatus) => void>()\n private connection: WorkspaceEventConnection | null = null\n private connectGeneration = 0\n private retryDelay = RETRY_BASE_DELAY\n private retryTimer: ReturnType<typeof setTimeout> | null = null\n\n constructor() {\n void this.connect()\n }\n\n private async connect() {\n const generation = ++this.connectGeneration\n this.clearReconnectTimer()\n\n if (this.connection) {\n this.emitTransportStatus(\"disconnected\")\n this.connection.disconnect()\n this.connection = null\n }\n\n logSse(\"Connecting to backend events stream\")\n\n try {\n const connection = await connectWorkspaceEvents({\n onBatch: (events) => {\n if (generation === this.connectGeneration) this.dispatchBatch(events)\n },\n onError: () => {\n if (generation !== this.connectGeneration) {\n return\n }\n this.scheduleReconnect()\n },\n onStatus: (status) => {\n if (generation !== this.connectGeneration) {\n return\n }\n this.emitTransportStatus(status)\n },\n onOpen: () => {\n if (generation !== this.connectGeneration) {\n return\n }\n logSse(\"Events stream connected\")\n this.retryDelay = RETRY_BASE_DELAY\n this.openHandlers.forEach((handler) => handler())\n },\n onPing: (payload) => {\n if (generation !== this.connectGeneration) {\n return\n }\n const identity = getClientIdentity()\n const pongPayload = { ...identity, pingTs: payload.ts }\n\n void retryWithBackoff(\n (signal) => serverApi.sendClientConnectionPong(pongPayload, signal),\n {\n maxAttempts: 3,\n initialDelayMs: 100,\n maxDelayMs: 2000,\n timeoutMs: 10000,\n shouldRetry: (error) => isRetryableError(error),\n },\n ).catch((error) => {\n log.warn(\"Failed to send client connection pong after retries\", error)\n })\n },\n })\n\n if (generation !== this.connectGeneration) {\n connection.disconnect()\n return\n }\n\n this.connection = connection\n } catch (error) {\n if (generation !== this.connectGeneration) {\n return\n }\n\n logSse(\"Events stream failed to connect, scheduling reconnect\", {\n error: error instanceof Error ? error.message : String(error),\n })\n this.scheduleReconnect()\n }\n }\n\n private scheduleReconnect() {\n if (this.retryTimer) {\n return\n }\n\n this.connectGeneration += 1\n\n if (this.connection) {\n this.connection.disconnect()\n this.connection = null\n }\n\n this.emitTransportStatus(\"disconnected\")\n\n logSse(\"Events stream disconnected, scheduling reconnect\", { delayMs: this.retryDelay })\n this.retryTimer = setTimeout(() => {\n this.retryTimer = null\n this.retryDelay = Math.min(this.retryDelay * 2, RETRY_MAX_DELAY)\n void this.connect()\n }, this.retryDelay)\n }\n\n private clearReconnectTimer() {\n if (!this.retryTimer) {\n return\n }\n\n clearTimeout(this.retryTimer)\n this.retryTimer = null\n }\n\n private dispatch(event: WorkspaceEventPayload) {\n this.handlers.get(\"*\")?.forEach((handler) => handler(event))\n this.handlers.get(event.type)?.forEach((handler) => handler(event))\n }\n\n private dispatchBatch(events: WorkspaceEventPayload[]) {\n if (events.length === 0) {\n return\n }\n\n logSse(\"event batch\", { size: events.length })\n solidBatch(() => {\n for (const event of events) {\n this.dispatch(event)\n }\n })\n }\n\n private emitTransportStatus(status: WorkspaceEventTransportStatus) {\n this.statusHandlers.forEach((handler) => handler(status))\n }\n\n on(type: WorkspaceEventType | \"*\", handler: (event: WorkspaceEventPayload) => void): () => void {\n if (!this.handlers.has(type)) {\n this.handlers.set(type, new Set())\n }\n const bucket = this.handlers.get(type)!\n bucket.add(handler)\n return () => bucket.delete(handler)\n }\n\n onOpen(handler: () => void): () => void {\n this.openHandlers.add(handler)\n return () => this.openHandlers.delete(handler)\n }\n\n onTransportStatus(handler: (status: WorkspaceEventTransportStatus) => void): () => void {\n this.statusHandlers.add(handler)\n return () => this.statusHandlers.delete(handler)\n }\n\n restart(reason = \"manual restart\"): void {\n this.retryDelay = RETRY_BASE_DELAY\n this.clearReconnectTimer()\n\n if (this.connection) {\n this.emitTransportStatus(\"disconnected\")\n this.connection.disconnect()\n this.connection = null\n }\n\n logSse(\"Restarting backend events stream\", { reason })\n void this.connect()\n }\n}\n\nexport const serverEvents = new ServerEvents()\n","import type { InstanceData, WorkspaceEventPayload } from \"../../../server/src/api-types\"\nimport { serverApi } from \"./api-client\"\nimport { serverEvents } from \"./server-events\"\nimport { getLogger } from \"./logger\"\n\nconst log = getLogger(\"actions\")\n\nexport type OwnerBucket = Record<string, any>\n\nconst DEFAULT_INSTANCE_DATA: InstanceData = {\n messageHistory: [],\n agentModelSelections: {},\n}\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a === \"object\" && a !== null && typeof b === \"object\" && b !== null) {\n\n try {\n return JSON.stringify(a) === JSON.stringify(b)\n } catch (error) {\n log.warn(\"Failed to compare config objects\", error)\n }\n }\n\n return false\n}\n\nexport class ServerStorage {\n private configOwnerCache = new Map<string, OwnerBucket>()\n private stateOwnerCache = new Map<string, OwnerBucket>()\n private configOwnerLoadPromises = new Map<string, Promise<OwnerBucket>>()\n private stateOwnerLoadPromises = new Map<string, Promise<OwnerBucket>>()\n private configOwnerListeners = new Map<string, Set<(value: OwnerBucket) => void>>()\n private stateOwnerListeners = new Map<string, Set<(value: OwnerBucket) => void>>()\n private instanceDataCache = new Map<string, InstanceData>()\n private instanceDataListeners = new Map<string, Set<(data: InstanceData) => void>>()\n private instanceLoadPromises = new Map<string, Promise<InstanceData>>()\n private pendingWrites = new Set<Promise<unknown>>()\n\n constructor() {\n serverEvents.on(\"storage.configChanged\", (event: WorkspaceEventPayload) => {\n if (event.type !== \"storage.configChanged\") return\n this.setOwnerCache(\"config\", event.owner, event.value)\n })\n\n serverEvents.on(\"storage.stateChanged\", (event: WorkspaceEventPayload) => {\n if (event.type !== \"storage.stateChanged\") return\n this.setOwnerCache(\"state\", event.owner, event.value)\n })\n\n serverEvents.on(\"instance.dataChanged\", (event) => {\n if (event.type !== \"instance.dataChanged\") return\n this.setInstanceDataCache(event.instanceId, event.data)\n })\n }\n\n async loadConfigOwner(owner: string): Promise<OwnerBucket> {\n const cached = this.configOwnerCache.get(owner)\n if (cached) return cached\n\n if (!this.configOwnerLoadPromises.has(owner)) {\n const promise = serverApi\n .fetchConfigOwner<OwnerBucket>(owner)\n .then((value) => {\n this.setOwnerCache(\"config\", owner, value)\n return value\n })\n .finally(() => {\n this.configOwnerLoadPromises.delete(owner)\n })\n this.configOwnerLoadPromises.set(owner, promise)\n }\n\n return this.configOwnerLoadPromises.get(owner)!\n }\n\n patchConfigOwner(owner: string, patch: unknown): Promise<OwnerBucket> {\n return this.trackWrite(serverApi.patchConfigOwner<OwnerBucket>(owner, patch).then((updated) => {\n this.setOwnerCache(\"config\", owner, updated)\n return updated\n }))\n }\n\n async loadStateOwner(owner: string): Promise<OwnerBucket> {\n const cached = this.stateOwnerCache.get(owner)\n if (cached) return cached\n\n if (!this.stateOwnerLoadPromises.has(owner)) {\n const promise = serverApi\n .fetchStateOwner<OwnerBucket>(owner)\n .then((value) => {\n this.setOwnerCache(\"state\", owner, value)\n return value\n })\n .finally(() => {\n this.stateOwnerLoadPromises.delete(owner)\n })\n this.stateOwnerLoadPromises.set(owner, promise)\n }\n\n return this.stateOwnerLoadPromises.get(owner)!\n }\n\n patchStateOwner(owner: string, patch: unknown): Promise<OwnerBucket> {\n return this.trackWrite(serverApi.patchStateOwner<OwnerBucket>(owner, patch).then((updated) => {\n this.setOwnerCache(\"state\", owner, updated)\n return updated\n }))\n }\n\n async loadInstanceData(instanceId: string): Promise<InstanceData> {\n const cached = this.instanceDataCache.get(instanceId)\n if (cached) {\n return cached\n }\n\n if (!this.instanceLoadPromises.has(instanceId)) {\n const promise = serverApi\n .readInstanceData(instanceId)\n .then((data) => {\n const normalized = this.normalizeInstanceData(data)\n this.setInstanceDataCache(instanceId, normalized)\n return normalized\n })\n .finally(() => {\n this.instanceLoadPromises.delete(instanceId)\n })\n\n this.instanceLoadPromises.set(instanceId, promise)\n }\n\n return this.instanceLoadPromises.get(instanceId)!\n }\n\n saveInstanceData(instanceId: string, data: InstanceData): Promise<void> {\n const normalized = this.normalizeInstanceData(data)\n return this.trackWrite(serverApi.writeInstanceData(instanceId, normalized).then(() => {\n this.setInstanceDataCache(instanceId, normalized)\n }))\n }\n\n deleteInstanceData(instanceId: string): Promise<void> {\n return this.trackWrite(serverApi.deleteInstanceData(instanceId).then(() => {\n this.setInstanceDataCache(instanceId, DEFAULT_INSTANCE_DATA)\n }))\n }\n\n async flushWrites(): Promise<void> {\n while (this.pendingWrites.size > 0) {\n await Promise.allSettled(this.pendingWrites)\n }\n }\n\n onConfigOwnerChanged(owner: string, listener: (value: OwnerBucket) => void): () => void {\n if (!this.configOwnerListeners.has(owner)) {\n this.configOwnerListeners.set(owner, new Set())\n }\n const bucket = this.configOwnerListeners.get(owner)!\n bucket.add(listener)\n const cached = this.configOwnerCache.get(owner)\n if (cached) {\n listener(cached)\n }\n return () => {\n bucket.delete(listener)\n if (bucket.size === 0) {\n this.configOwnerListeners.delete(owner)\n }\n }\n }\n\n onStateOwnerChanged(owner: string, listener: (value: OwnerBucket) => void): () => void {\n if (!this.stateOwnerListeners.has(owner)) {\n this.stateOwnerListeners.set(owner, new Set())\n }\n const bucket = this.stateOwnerListeners.get(owner)!\n bucket.add(listener)\n const cached = this.stateOwnerCache.get(owner)\n if (cached) {\n listener(cached)\n }\n return () => {\n bucket.delete(listener)\n if (bucket.size === 0) {\n this.stateOwnerListeners.delete(owner)\n }\n }\n }\n\n onInstanceDataChanged(instanceId: string, listener: (data: InstanceData) => void): () => void {\n if (!this.instanceDataListeners.has(instanceId)) {\n this.instanceDataListeners.set(instanceId, new Set())\n }\n const bucket = this.instanceDataListeners.get(instanceId)!\n bucket.add(listener)\n const cached = this.instanceDataCache.get(instanceId)\n if (cached) {\n listener(cached)\n }\n return () => {\n bucket.delete(listener)\n if (bucket.size === 0) {\n this.instanceDataListeners.delete(instanceId)\n }\n }\n }\n\n private setOwnerCache(kind: \"config\" | \"state\", owner: string, value: OwnerBucket) {\n if (owner === \"*\") {\n // Full-doc updates are not tracked owner-by-owner; invalidate caches.\n if (kind === \"config\") {\n this.configOwnerCache.clear()\n } else {\n this.stateOwnerCache.clear()\n }\n return\n }\n\n const cache = kind === \"config\" ? this.configOwnerCache : this.stateOwnerCache\n const listeners = kind === \"config\" ? this.configOwnerListeners : this.stateOwnerListeners\n\n const previous = cache.get(owner)\n if (previous && isDeepEqual(previous, value)) {\n cache.set(owner, value)\n return\n }\n cache.set(owner, value)\n const bucket = listeners.get(owner)\n if (!bucket) return\n for (const listener of bucket) {\n listener(value)\n }\n }\n\n private trackWrite<T>(write: Promise<T>): Promise<T> {\n this.pendingWrites.add(write)\n void write.finally(() => this.pendingWrites.delete(write)).catch(() => undefined)\n return write\n }\n\n private normalizeInstanceData(data?: InstanceData | null): InstanceData {\n const source = data ?? DEFAULT_INSTANCE_DATA\n const messageHistory = Array.isArray(source.messageHistory) ? [...source.messageHistory] : []\n const agentModelSelections = { ...(source.agentModelSelections ?? {}) }\n return {\n ...source,\n messageHistory,\n agentModelSelections,\n }\n }\n\n private setInstanceDataCache(instanceId: string, data: InstanceData) {\n const normalized = this.normalizeInstanceData(data)\n const previous = this.instanceDataCache.get(instanceId)\n if (previous && isDeepEqual(previous, normalized)) {\n this.instanceDataCache.set(instanceId, normalized)\n return\n }\n this.instanceDataCache.set(instanceId, normalized)\n this.notifyInstanceDataChanged(instanceId, normalized)\n }\n\n private notifyInstanceDataChanged(instanceId: string, data: InstanceData) {\n const listeners = this.instanceDataListeners.get(instanceId)\n if (!listeners) {\n return\n }\n for (const listener of listeners) {\n listener(data)\n }\n }\n}\n\nexport const storage = new ServerStorage()\n","import { createContext, createMemo, createSignal, onCleanup, type Accessor, type ParentComponent, useContext } from \"solid-js\"\nimport type { InstanceData } from \"../../../server/src/api-types\"\nimport { storage } from \"../lib/storage\"\nimport { getLogger } from \"../lib/logger\"\n\nconst log = getLogger(\"api\")\n\nconst DEFAULT_INSTANCE_DATA: InstanceData = { messageHistory: [], agentModelSelections: {} }\n\nconst [instanceDataMap, setInstanceDataMap] = createSignal<Map<string, InstanceData>>(new Map())\nconst loadPromises = new Map<string, Promise<void>>()\nconst instanceSubscriptions = new Map<string, () => void>()\n\nfunction cloneInstanceData(data?: InstanceData | null): InstanceData {\n const source = data ?? DEFAULT_INSTANCE_DATA\n return {\n ...source,\n messageHistory: Array.isArray(source.messageHistory) ? [...source.messageHistory] : [],\n agentModelSelections: { ...(source.agentModelSelections ?? {}) },\n }\n}\n\nfunction attachSubscription(instanceId: string) {\n if (instanceSubscriptions.has(instanceId)) return\n const unsubscribe = storage.onInstanceDataChanged(instanceId, (data) => {\n setInstanceData(instanceId, data)\n })\n instanceSubscriptions.set(instanceId, unsubscribe)\n}\n\nfunction detachSubscription(instanceId: string) {\n const unsubscribe = instanceSubscriptions.get(instanceId)\n if (!unsubscribe) return\n unsubscribe()\n instanceSubscriptions.delete(instanceId)\n}\n\nfunction setInstanceData(instanceId: string, data: InstanceData) {\n setInstanceDataMap((prev) => {\n const next = new Map(prev)\n next.set(instanceId, cloneInstanceData(data))\n return next\n })\n}\n\nasync function ensureInstanceConfig(instanceId: string): Promise<void> {\n if (!instanceId) return\n if (instanceDataMap().has(instanceId)) return\n if (loadPromises.has(instanceId)) {\n await loadPromises.get(instanceId)\n return\n }\n const promise = storage\n .loadInstanceData(instanceId)\n .then((data) => {\n setInstanceData(instanceId, data)\n attachSubscription(instanceId)\n })\n .catch((error) => {\n log.warn(\"Failed to load instance data\", error)\n setInstanceData(instanceId, DEFAULT_INSTANCE_DATA)\n attachSubscription(instanceId)\n })\n .finally(() => {\n loadPromises.delete(instanceId)\n })\n loadPromises.set(instanceId, promise)\n await promise\n}\n\nasync function updateInstanceConfig(instanceId: string, mutator: (draft: InstanceData) => void): Promise<void> {\n if (!instanceId) return\n await ensureInstanceConfig(instanceId)\n const current = instanceDataMap().get(instanceId) ?? DEFAULT_INSTANCE_DATA\n const draft = cloneInstanceData(current)\n mutator(draft)\n try {\n await storage.saveInstanceData(instanceId, draft)\n } catch (error) {\n log.warn(\"Failed to persist instance data\", error)\n }\n setInstanceData(instanceId, draft)\n}\n\nfunction getInstanceConfig(instanceId: string): InstanceData {\n return instanceDataMap().get(instanceId) ?? DEFAULT_INSTANCE_DATA\n}\n\nfunction useInstanceConfig(instanceId: string): Accessor<InstanceData> {\n const context = useContext(InstanceConfigContext)\n if (!context) {\n throw new Error(\"useInstanceConfig must be used within InstanceConfigProvider\")\n }\n return createMemo(() => instanceDataMap().get(instanceId) ?? DEFAULT_INSTANCE_DATA)\n}\n\nfunction clearInstanceConfig(instanceId: string): void {\n setInstanceDataMap((prev) => {\n if (!prev.has(instanceId)) return prev\n const next = new Map(prev)\n next.delete(instanceId)\n return next\n })\n detachSubscription(instanceId)\n}\n\ninterface InstanceConfigContextValue {\n getInstanceConfig: typeof getInstanceConfig\n ensureInstanceConfig: typeof ensureInstanceConfig\n updateInstanceConfig: typeof updateInstanceConfig\n clearInstanceConfig: typeof clearInstanceConfig\n}\n\nconst InstanceConfigContext = createContext<InstanceConfigContextValue>()\n\nconst contextValue: InstanceConfigContextValue = {\n getInstanceConfig,\n ensureInstanceConfig,\n updateInstanceConfig,\n clearInstanceConfig,\n}\n\nconst InstanceConfigProvider: ParentComponent = (props) => {\n onCleanup(() => {\n for (const unsubscribe of instanceSubscriptions.values()) {\n unsubscribe()\n }\n instanceSubscriptions.clear()\n })\n\n return <InstanceConfigContext.Provider value={contextValue}>{props.children}</InstanceConfigContext.Provider>\n}\n\nexport {\n InstanceConfigProvider,\n useInstanceConfig,\n ensureInstanceConfig as ensureInstanceConfigLoaded,\n getInstanceConfig,\n updateInstanceConfig,\n clearInstanceConfig,\n}\n","import { createSignal } from \"solid-js\"\nimport type { SpeechCapabilitiesResponse } from \"../../../server/src/api-types\"\nimport { serverApi } from \"../lib/api-client\"\nimport { getLogger } from \"../lib/logger\"\n\nconst log = getLogger(\"api\")\n\nfunction normalizeCapabilities(result: SpeechCapabilitiesResponse): SpeechCapabilitiesResponse {\n const r = result as unknown as Record<string, unknown>\n if (r.sttConfigured === undefined) r.sttConfigured = r.configured\n if (r.ttsConfigured === undefined) r.ttsConfigured = r.configured\n if (r.separateProviders === undefined) r.separateProviders = false\n return r as unknown as SpeechCapabilitiesResponse\n}\n\nconst [speechCapabilities, setSpeechCapabilities] = createSignal<SpeechCapabilitiesResponse | null>(null)\nconst [speechCapabilitiesLoading, setSpeechCapabilitiesLoading] = createSignal(false)\nconst [speechCapabilitiesError, setSpeechCapabilitiesError] = createSignal<string | null>(null)\nconst [serverSupportsSeparateProviders, setServerSupportsSeparateProviders] = createSignal(false)\n\nlet speechCapabilitiesPromise: Promise<SpeechCapabilitiesResponse | null> | null = null\n\nasync function loadSpeechCapabilities(force = false): Promise<SpeechCapabilitiesResponse | null> {\n if (!force && speechCapabilities()) return speechCapabilities()\n if (speechCapabilitiesPromise) return speechCapabilitiesPromise\n\n setSpeechCapabilitiesLoading(true)\n setSpeechCapabilitiesError(null)\n speechCapabilitiesPromise = serverApi\n .fetchSpeechCapabilities()\n .then((result) => {\n const raw = result as unknown as Record<string, unknown>\n setServerSupportsSeparateProviders(\"separateProviders\" in raw)\n const normalized = normalizeCapabilities(result)\n setSpeechCapabilities(normalized)\n setSpeechCapabilitiesError(null)\n return normalized\n })\n .catch((error) => {\n log.error(\"Failed to load speech capabilities\", error)\n setSpeechCapabilities(null)\n setSpeechCapabilitiesError(error instanceof Error ? error.message : String(error))\n return null\n })\n .finally(() => {\n setSpeechCapabilitiesLoading(false)\n speechCapabilitiesPromise = null\n })\n\n return speechCapabilitiesPromise\n}\n\nfunction resetSpeechCapabilities(): void {\n setSpeechCapabilities(null)\n setSpeechCapabilitiesError(null)\n setServerSupportsSeparateProviders(false)\n}\n\nexport { speechCapabilities, speechCapabilitiesLoading, speechCapabilitiesError, serverSupportsSeparateProviders, loadSpeechCapabilities, resetSpeechCapabilities }\n","import type { SpeechSettingsUpdate } from \"../stores/preferences\"\n\nexport function buildSpeechPatch(updates: SpeechSettingsUpdate): Record<string, unknown> {\n const patch: Record<string, unknown> = {}\n\n if (updates.separateProviders !== undefined) patch.separateProviders = updates.separateProviders\n if (updates.apiKey !== undefined) patch.apiKey = updates.apiKey\n if (updates.baseUrl !== undefined) patch.baseUrl = updates.baseUrl?.trim() || null\n if (updates.sttModel !== undefined) patch.sttModel = updates.sttModel?.trim() || null\n if (updates.ttsModel !== undefined) patch.ttsModel = updates.ttsModel?.trim() || null\n if (updates.ttsVoice !== undefined) patch.ttsVoice = updates.ttsVoice?.trim() || null\n if (updates.playbackMode !== undefined) patch.playbackMode = updates.playbackMode\n if (updates.ttsFormat !== undefined) patch.ttsFormat = updates.ttsFormat\n\n for (const dir of [\"stt\", \"tts\"] as const) {\n const dirUpdate = updates[dir]\n if (dirUpdate) {\n const dirPatch: Record<string, unknown> = {}\n if (dirUpdate.apiKey !== undefined) dirPatch.apiKey = dirUpdate.apiKey\n if (dirUpdate.baseUrl !== undefined) dirPatch.baseUrl = dirUpdate.baseUrl?.trim() || null\n if (dirUpdate.model !== undefined) dirPatch.model = dirUpdate.model?.trim() || null\n if (Object.keys(dirPatch).length > 0) patch[dir] = dirPatch\n }\n }\n\n return patch\n}\n","export const COLOR_SCHEME_IDS = [\"system\", \"light\", \"classic\", \"basalt\", \"fjord\", \"lichen\", \"velvet\", \"ember\", \"custom\"] as const\n\nexport type ColorSchemeId = (typeof COLOR_SCHEME_IDS)[number]\nexport type ColorSchemeAppearance = \"system\" | \"light\" | \"dark\"\n\nexport interface ColorSchemeColors {\n surfaceBase: string\n surfaceSecondary: string\n surfaceMuted: string\n borderBase: string\n textPrimary: string\n textMuted: string\n accentPrimary: string\n statusSuccess: string\n statusWarning: string\n statusError: string\n userAccent: string\n agentAccent: string\n compactionAccent: string\n yoloAccent: string\n}\n\nexport interface ColorSchemeDefinition {\n id: ColorSchemeId\n labelKey: string\n descriptionKey: string\n appearance: ColorSchemeAppearance\n editable: boolean\n colors?: Readonly<ColorSchemeColors>\n}\n\nexport interface NormalizedColorScheme {\n id: ColorSchemeId\n appearance: ColorSchemeAppearance\n colors?: ColorSchemeColors\n}\n\nexport interface ColorSchemeTarget {\n style: {\n setProperty(name: string, value: string): void\n removeProperty(name: string): unknown\n }\n dataset: Record<string, string | undefined>\n setAttribute(name: string, value: string): void\n removeAttribute(name: string): void\n}\n\nconst COLOR_KEYS: readonly (keyof ColorSchemeColors)[] = [\n \"surfaceBase\",\n \"surfaceSecondary\",\n \"surfaceMuted\",\n \"borderBase\",\n \"textPrimary\",\n \"textMuted\",\n \"accentPrimary\",\n \"statusSuccess\",\n \"statusWarning\",\n \"statusError\",\n \"userAccent\",\n \"agentAccent\",\n \"compactionAccent\",\n \"yoloAccent\",\n]\n\nconst LEGACY_COLOR_KEYS = COLOR_KEYS.slice(0, 10)\n\nconst DEFAULT_SEMANTIC_COLORS = {\n userAccent: \"#42A5F5\",\n agentAccent: \"#D97706\",\n compactionAccent: \"#C084FC\",\n yoloAccent: \"#8FA8FF\",\n} as const\n\nexport const DEFAULT_CUSTOM_COLORS: Readonly<ColorSchemeColors> = {\n surfaceBase: \"#17181A\",\n surfaceSecondary: \"#202226\",\n surfaceMuted: \"#292C31\",\n borderBase: \"#3B3F46\",\n textPrimary: \"#F0F1F3\",\n textMuted: \"#B2B6BE\",\n accentPrimary: \"#8FA8FF\",\n statusSuccess: \"#72C497\",\n statusWarning: \"#D8B36A\",\n statusError: \"#E28181\",\n ...DEFAULT_SEMANTIC_COLORS,\n}\n\nexport const LIGHT_COLOR_SCHEME_COLORS: Readonly<ColorSchemeColors> = {\n surfaceBase: \"#FFFFFF\",\n surfaceSecondary: \"#F5F5F5\",\n surfaceMuted: \"#ECEFF3\",\n borderBase: \"#D1D5DB\",\n textPrimary: \"#111827\",\n textMuted: \"#4B5563\",\n accentPrimary: \"#005FCC\",\n statusSuccess: \"#237A43\",\n statusWarning: \"#9A6700\",\n statusError: \"#C62828\",\n userAccent: \"#0066CC\",\n agentAccent: \"#A44B00\",\n compactionAccent: \"#7E22CE\",\n yoloAccent: \"#005FCC\",\n}\n\nexport const BUILT_IN_COLOR_SCHEMES: readonly ColorSchemeDefinition[] = [\n {\n id: \"system\",\n labelKey: \"settings.appearance.colorScheme.option.system\",\n descriptionKey: \"settings.appearance.colorScheme.description.system\",\n appearance: \"system\",\n editable: false,\n },\n {\n id: \"light\",\n labelKey: \"settings.appearance.colorScheme.option.light\",\n descriptionKey: \"settings.appearance.colorScheme.description.light\",\n appearance: \"light\",\n editable: false,\n },\n {\n id: \"classic\",\n labelKey: \"settings.appearance.colorScheme.option.codeNomadClassic\",\n descriptionKey: \"settings.appearance.colorScheme.description.codeNomadClassic\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#1A1A1A\",\n surfaceSecondary: \"#2A2A2A\",\n surfaceMuted: \"#212529\",\n borderBase: \"#3A3A3A\",\n textPrimary: \"#CFD4DC\",\n textMuted: \"#999999\",\n accentPrimary: \"#0080FF\",\n statusSuccess: \"#4CAF50\",\n statusWarning: \"#FF9800\",\n statusError: \"#F44336\",\n userAccent: \"#2196F3\",\n agentAccent: \"#D97706\",\n compactionAccent: \"#C084FC\",\n yoloAccent: \"#0080FF\",\n },\n },\n {\n id: \"basalt\",\n labelKey: \"settings.appearance.colorScheme.option.basalt\",\n descriptionKey: \"settings.appearance.colorScheme.description.basalt\",\n appearance: \"dark\",\n editable: false,\n colors: DEFAULT_CUSTOM_COLORS,\n },\n {\n id: \"fjord\",\n labelKey: \"settings.appearance.colorScheme.option.fjord\",\n descriptionKey: \"settings.appearance.colorScheme.description.fjord\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#131A1F\",\n surfaceSecondary: \"#1B252C\",\n surfaceMuted: \"#243139\",\n borderBase: \"#354650\",\n textPrimary: \"#E7EEF1\",\n textMuted: \"#A8B8BF\",\n accentPrimary: \"#67C9BA\",\n statusSuccess: \"#72C497\",\n statusWarning: \"#D8B36A\",\n statusError: \"#E28181\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#67C9BA\",\n },\n },\n {\n id: \"lichen\",\n labelKey: \"settings.appearance.colorScheme.option.lichen\",\n descriptionKey: \"settings.appearance.colorScheme.description.lichen\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#181A15\",\n surfaceSecondary: \"#22251D\",\n surfaceMuted: \"#2C3025\",\n borderBase: \"#41473A\",\n textPrimary: \"#ECEEE8\",\n textMuted: \"#B2B8A7\",\n accentPrimary: \"#A9C47F\",\n statusSuccess: \"#77C49A\",\n statusWarning: \"#D6B36D\",\n statusError: \"#DF8580\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#A9C47F\",\n },\n },\n {\n id: \"velvet\",\n labelKey: \"settings.appearance.colorScheme.option.velvet\",\n descriptionKey: \"settings.appearance.colorScheme.description.velvet\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#160F16\",\n surfaceSecondary: \"#211721\",\n surfaceMuted: \"#2B1E2B\",\n borderBase: \"#443044\",\n textPrimary: \"#F1EAF0\",\n textMuted: \"#BAAAB7\",\n accentPrimary: \"#E5A77D\",\n statusSuccess: \"#78C59A\",\n statusWarning: \"#DDB46F\",\n statusError: \"#E28787\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#E5A77D\",\n },\n },\n {\n id: \"ember\",\n labelKey: \"settings.appearance.colorScheme.option.ember\",\n descriptionKey: \"settings.appearance.colorScheme.description.ember\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#1B1714\",\n surfaceSecondary: \"#27211D\",\n surfaceMuted: \"#312923\",\n borderBase: \"#493D34\",\n textPrimary: \"#F1ECE7\",\n textMuted: \"#BDB1A6\",\n accentPrimary: \"#D79A66\",\n statusSuccess: \"#78C296\",\n statusWarning: \"#D8AE62\",\n statusError: \"#DE817A\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#D79A66\",\n },\n },\n {\n id: \"custom\",\n labelKey: \"settings.appearance.colorScheme.option.custom\",\n descriptionKey: \"settings.appearance.colorScheme.description.custom\",\n appearance: \"dark\",\n editable: true,\n colors: DEFAULT_CUSTOM_COLORS,\n },\n]\n\nconst SCHEMES_BY_ID = Object.fromEntries(BUILT_IN_COLOR_SCHEMES.map((scheme) => [scheme.id, scheme])) as Record<\n ColorSchemeId,\n ColorSchemeDefinition\n>\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nexport const isCanonicalHexColor = (value: unknown): value is string =>\n typeof value === \"string\" && /^#[0-9A-F]{6}$/.test(value)\n\nexport function isColorSchemeColors(value: unknown): value is ColorSchemeColors {\n return isRecord(value) && COLOR_KEYS.every((key) => isCanonicalHexColor(value[key]))\n}\n\nfunction normalizeColors(value: unknown): ColorSchemeColors | undefined {\n if (isColorSchemeColors(value)) return { ...value }\n if (!isRecord(value) || !LEGACY_COLOR_KEYS.every((key) => isCanonicalHexColor(value[key]))) return undefined\n return { ...(value as unknown as Omit<ColorSchemeColors, keyof typeof DEFAULT_SEMANTIC_COLORS>), ...DEFAULT_SEMANTIC_COLORS }\n}\n\nconst copyColors = (colors: Readonly<ColorSchemeColors>): ColorSchemeColors => ({ ...colors })\n\nfunction selectionFor(\n id: ColorSchemeId,\n colors?: Readonly<ColorSchemeColors>,\n appearance: ColorSchemeAppearance = SCHEMES_BY_ID[id].appearance,\n): NormalizedColorScheme {\n const definition = SCHEMES_BY_ID[id]\n return {\n id,\n appearance,\n ...(definition.colors ? { colors: copyColors(colors ?? definition.colors) } : {}),\n }\n}\n\nexport function normalizeColorScheme(value: unknown, legacyTheme?: unknown): NormalizedColorScheme {\n const id = typeof value === \"string\" ? value : isRecord(value) ? value.id : undefined\n\n if (typeof id === \"string\" && COLOR_SCHEME_IDS.includes(id as ColorSchemeId)) {\n const schemeId = id as ColorSchemeId\n if (schemeId !== \"custom\") return selectionFor(schemeId)\n const colors = isRecord(value) ? normalizeColors(value.colors) ?? DEFAULT_CUSTOM_COLORS : DEFAULT_CUSTOM_COLORS\n const appearance = isRecord(value) && value.appearance === \"light\" ? \"light\" : \"dark\"\n return selectionFor(\"custom\", colors, appearance)\n }\n\n if (legacyTheme === \"light\") return selectionFor(\"light\")\n if (legacyTheme === \"dark\") return selectionFor(\"classic\")\n return selectionFor(\"system\")\n}\n\nconst channel = (color: string, offset: number) => Number.parseInt(color.slice(offset, offset + 2), 16)\n\nconst luminance = (color: string) => {\n const linear = (value: number) => {\n const normalized = value / 255\n return normalized <= 0.04045 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4\n }\n return 0.2126 * linear(channel(color, 1)) + 0.7152 * linear(channel(color, 3)) + 0.0722 * linear(channel(color, 5))\n}\n\nexport function contrastRatio(first: string, second: string): number {\n if (!isCanonicalHexColor(first) || !isCanonicalHexColor(second)) return 0\n const [bright, dark] = [luminance(first), luminance(second)].sort((a, b) => b - a)\n return (bright + 0.05) / (dark + 0.05)\n}\n\nexport function validateColorSchemeColors(value: unknown): value is ColorSchemeColors {\n if (!isColorSchemeColors(value)) return false\n const textPairs: Array<[string, string]> = [\n [value.textPrimary, value.surfaceBase],\n [value.textPrimary, value.surfaceSecondary],\n [value.textPrimary, value.surfaceMuted],\n [value.textMuted, value.surfaceBase],\n [value.textMuted, value.surfaceSecondary],\n [value.textMuted, value.surfaceMuted],\n ]\n const emphasis = [\n value.accentPrimary,\n value.statusSuccess,\n value.statusWarning,\n value.statusError,\n value.userAccent,\n value.agentAccent,\n value.compactionAccent,\n value.yoloAccent,\n ]\n const emphasisSurfaces = [value.surfaceBase, value.surfaceSecondary]\n return (\n textPairs.every(([foreground, background]) => contrastRatio(foreground, background) >= 4.5) &&\n emphasis.every((foreground) => emphasisSurfaces.every((background) => contrastRatio(foreground, background) >= 3))\n )\n}\n\nconst mix = (first: string, second: string, firstWeight: number) => {\n const mixed = [1, 3, 5].map((offset) =>\n Math.round(channel(first, offset) * firstWeight + channel(second, offset) * (1 - firstWeight)),\n )\n return `#${mixed.map((value) => value.toString(16).padStart(2, \"0\")).join(\"\").toUpperCase()}`\n}\n\nconst alpha = (color: string, opacity: number) =>\n `rgba(${channel(color, 1)}, ${channel(color, 3)}, ${channel(color, 5)}, ${opacity})`\n\nexport const textOnColor = (color: string): \"#000000\" | \"#FFFFFF\" =>\n contrastRatio(\"#000000\", color) >= contrastRatio(\"#FFFFFF\", color) ? \"#000000\" : \"#FFFFFF\"\n\nconst APPLIED_PROPERTIES = [\n \"--surface-base\",\n \"--surface-primary\",\n \"--surface-secondary\",\n \"--surface-muted\",\n \"--surface-code\",\n \"--surface-hover\",\n \"--border-base\",\n \"--border-secondary\",\n \"--border-muted\",\n \"--border-strong\",\n \"--border-critical\",\n \"--text-primary\",\n \"--text-secondary\",\n \"--text-muted\",\n \"--text-inverted\",\n \"--text-on-accent\",\n \"--accent-primary\",\n \"--accent-hover\",\n \"--focus-ring-color\",\n \"--focus-ring-offset\",\n \"--list-item-highlight-bg\",\n \"--list-item-highlight-bg-solid\",\n \"--list-item-highlight-border\",\n \"--attachment-chip-bg\",\n \"--attachment-chip-text\",\n \"--attachment-chip-ring\",\n \"--badge-neutral-bg\",\n \"--badge-neutral-text\",\n \"--env-vars-bg\",\n \"--env-vars-border\",\n \"--env-vars-text\",\n \"--dropdown-highlight-bg\",\n \"--selection-highlight-bg\",\n \"--selection-highlight-strong-bg\",\n \"--status-success\",\n \"--status-warning\",\n \"--status-error\",\n \"--status-success-bg\",\n \"--status-warning-bg\",\n \"--status-error-bg\",\n \"--status-success-ring\",\n \"--status-warning-ring\",\n \"--status-error-ring\",\n \"--status-ready-fg\",\n \"--status-ready-bg\",\n \"--status-starting-fg\",\n \"--status-starting-bg\",\n \"--status-error-fg\",\n \"--message-user-bg\",\n \"--message-user-border\",\n \"--message-assistant-border\",\n \"--session-status-compacting-fg\",\n \"--session-status-compacting-bg\",\n \"--session-yolo-accent\",\n] as const\n\nfunction derivedProperties(colors: ColorSchemeColors, dark: boolean): Record<(typeof APPLIED_PROPERTIES)[number], string> {\n const textOnAccent = textOnColor(colors.accentPrimary)\n return {\n \"--surface-base\": colors.surfaceBase,\n \"--surface-primary\": colors.surfaceBase,\n \"--surface-secondary\": colors.surfaceSecondary,\n \"--surface-muted\": colors.surfaceMuted,\n \"--surface-code\": colors.surfaceMuted,\n \"--surface-hover\": mix(colors.textPrimary, colors.surfaceSecondary, dark ? 0.12 : 0.08),\n \"--border-base\": colors.borderBase,\n \"--border-secondary\": mix(colors.borderBase, colors.surfaceSecondary, 0.72),\n \"--border-muted\": mix(colors.borderBase, colors.surfaceSecondary, 0.5),\n \"--border-strong\": mix(colors.textPrimary, colors.borderBase, 0.3),\n \"--border-critical\": colors.statusError,\n \"--text-primary\": colors.textPrimary,\n \"--text-secondary\": colors.textMuted,\n \"--text-muted\": colors.textMuted,\n \"--text-inverted\": textOnAccent,\n \"--text-on-accent\": textOnAccent,\n \"--accent-primary\": colors.accentPrimary,\n \"--accent-hover\": mix(dark ? \"#FFFFFF\" : \"#000000\", colors.accentPrimary, dark ? 0.14 : 0.18),\n \"--focus-ring-color\": colors.accentPrimary,\n \"--focus-ring-offset\": colors.surfaceBase,\n \"--list-item-highlight-bg\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--list-item-highlight-bg-solid\": mix(colors.accentPrimary, colors.surfaceSecondary, dark ? 0.22 : 0.1),\n \"--list-item-highlight-border\": alpha(colors.accentPrimary, dark ? 0.4 : 0.25),\n \"--attachment-chip-bg\": alpha(colors.accentPrimary, 0.1),\n \"--attachment-chip-text\": colors.accentPrimary,\n \"--attachment-chip-ring\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--badge-neutral-bg\": alpha(colors.accentPrimary, dark ? 0.15 : 0.05),\n \"--badge-neutral-text\": colors.accentPrimary,\n \"--env-vars-bg\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--env-vars-border\": alpha(colors.accentPrimary, dark ? 0.3 : 0.2),\n \"--env-vars-text\": colors.accentPrimary,\n \"--dropdown-highlight-bg\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--selection-highlight-bg\": alpha(colors.accentPrimary, dark ? 0.18 : 0.12),\n \"--selection-highlight-strong-bg\": alpha(colors.accentPrimary, dark ? 0.28 : 0.18),\n \"--status-success\": colors.statusSuccess,\n \"--status-warning\": colors.statusWarning,\n \"--status-error\": colors.statusError,\n \"--status-success-bg\": alpha(colors.statusSuccess, 0.16),\n \"--status-warning-bg\": alpha(colors.statusWarning, 0.16),\n \"--status-error-bg\": alpha(colors.statusError, 0.16),\n \"--status-success-ring\": alpha(colors.statusSuccess, 0.42),\n \"--status-warning-ring\": alpha(colors.statusWarning, 0.42),\n \"--status-error-ring\": alpha(colors.statusError, 0.42),\n \"--status-ready-fg\": colors.statusSuccess,\n \"--status-ready-bg\": alpha(colors.statusSuccess, 0.16),\n \"--status-starting-fg\": colors.statusWarning,\n \"--status-starting-bg\": alpha(colors.statusWarning, 0.16),\n \"--status-error-fg\": colors.statusError,\n \"--message-user-bg\": mix(colors.userAccent, colors.surfaceSecondary, dark ? 0.1 : 0.12),\n \"--message-user-border\": colors.userAccent,\n \"--message-assistant-border\": colors.agentAccent,\n \"--session-status-compacting-fg\": colors.compactionAccent,\n \"--session-status-compacting-bg\": alpha(colors.compactionAccent, dark ? 0.28 : 0.18),\n \"--session-yolo-accent\": colors.yoloAccent,\n }\n}\n\nexport function applyColorScheme(\n scheme: NormalizedColorScheme,\n options: { target?: ColorSchemeTarget; systemDark?: boolean } = {},\n): boolean {\n const dark = scheme.appearance === \"dark\" || (scheme.appearance === \"system\" && Boolean(options.systemDark))\n const target = options.target ?? (typeof document === \"undefined\" ? undefined : document.documentElement)\n if (!target) return dark\n\n for (const property of APPLIED_PROPERTIES) target.style.removeProperty(property)\n target.dataset.colorScheme = scheme.id\n\n if (scheme.appearance === \"system\") target.removeAttribute(\"data-theme\")\n else target.setAttribute(\"data-theme\", dark ? \"dark\" : \"light\")\n\n if (scheme.colors && scheme.id !== \"classic\") {\n for (const [property, value] of Object.entries(derivedProperties(scheme.colors, dark))) {\n target.style.setProperty(property, value)\n }\n }\n\n return dark\n}\n","import {\n isColorSchemeColors,\n validateColorSchemeColors,\n type ColorSchemeColors,\n} from \"./theme-scheme.ts\"\n\nexport interface UserColorSchemePreset {\n name: string\n appearance: \"light\" | \"dark\"\n colors: ColorSchemeColors\n}\n\nexport type UserColorSchemePresets = Record<string, UserColorSchemePreset>\nexport const MAX_COLOR_SCHEME_PRESETS = 50\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nexport function normalizeColorSchemePresets(value: unknown): UserColorSchemePresets {\n if (!isRecord(value)) return {}\n const presets: UserColorSchemePresets = {}\n for (const [id, candidate] of Object.entries(value).slice(0, MAX_COLOR_SCHEME_PRESETS)) {\n if (!id || id.length > 128 || !isRecord(candidate)) continue\n const name = typeof candidate.name === \"string\" ? candidate.name.trim().slice(0, 80) : \"\"\n const appearance = candidate.appearance === \"light\" ? \"light\" : candidate.appearance === \"dark\" ? \"dark\" : undefined\n if (!name || !appearance || !isColorSchemeColors(candidate.colors) || !validateColorSchemeColors(candidate.colors)) continue\n presets[id] = { name, appearance, colors: { ...candidate.colors } }\n }\n return presets\n}\n\nexport function nextColorSchemePresetName(sourceName: string, existingNames: readonly string[]): string {\n const source = sourceName.trim() || \"Custom\"\n const match = /^(.*?)(?:\\s+(\\d+))?$/.exec(source)\n const base = match?.[1]?.trim() || source\n let suffix = match?.[2] ? Number(match[2]) + 1 : 2\n const used = new Set(existingNames.map((name) => name.trim().toLocaleLowerCase()))\n while (used.has(`${base} ${suffix}`.toLocaleLowerCase())) suffix += 1\n return `${base} ${suffix}`\n}\n\nexport function createColorSchemePresetId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return crypto.randomUUID()\n return `palette-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n}\n","export type ModelVisibilityPreference = { hiddenModelIds: readonly string[] }\n\nexport type ModelVisibilityPreferences = Record<string, ModelVisibilityPreference>\n\nexport function normalizeModelVisibilityPreference(value: unknown): ModelVisibilityPreference {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return { hiddenModelIds: [] }\n const hiddenModelIds = (value as { hiddenModelIds?: unknown }).hiddenModelIds\n if (!Array.isArray(hiddenModelIds)) return { hiddenModelIds: [] }\n\n return {\n hiddenModelIds: Array.from(new Set(hiddenModelIds.filter(\n (id): id is string => typeof id === \"string\" && id.length > 0,\n ))),\n }\n}\n\nexport function normalizeModelVisibilityPreferences(value: unknown): ModelVisibilityPreferences {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {}\n const result: ModelVisibilityPreferences = {}\n for (const [providerId, preference] of Object.entries(value as Record<string, unknown>)) {\n if (!providerId) continue\n result[providerId] = normalizeModelVisibilityPreference(preference)\n }\n return result\n}\n\nexport function isModelVisible(\n preference: ModelVisibilityPreference | undefined,\n modelId: string,\n): boolean {\n return !normalizeModelVisibilityPreference(preference).hiddenModelIds.includes(modelId)\n}\n\nexport function resolvePickerValue<T extends { key: string }>(\n current: T | undefined,\n options: readonly { key: string }[],\n): T | undefined {\n return current && options.some((option) => option.key === current.key) ? current : undefined\n}\n","import { createContext, createMemo, createSignal, onMount, useContext } from \"solid-js\"\nimport type { Accessor, ParentComponent } from \"solid-js\"\nimport { storage, type OwnerBucket } from \"../lib/storage\"\nimport type { RemoteServerProfile } from \"../../../server/src/api-types\"\nimport {\n ensureInstanceConfigLoaded,\n getInstanceConfig,\n updateInstanceConfig as updateInstanceData,\n} from \"./instance-config\"\nimport { getLogger } from \"../lib/logger\"\nimport { loadSpeechCapabilities, resetSpeechCapabilities } from \"./speech\"\nimport { buildSpeechPatch } from \"../lib/speech-patch\"\nimport {\n normalizeColorScheme,\n validateColorSchemeColors,\n type ColorSchemeColors,\n type NormalizedColorScheme,\n} from \"../lib/theme-scheme\"\nimport {\n createColorSchemePresetId,\n MAX_COLOR_SCHEME_PRESETS,\n normalizeColorSchemePresets,\n type UserColorSchemePresets,\n} from \"../lib/color-scheme-presets\"\nimport {\n normalizeModelVisibilityPreference,\n normalizeModelVisibilityPreferences,\n type ModelVisibilityPreference,\n type ModelVisibilityPreferences,\n} from \"../lib/model-visibility\"\n\nconst log = getLogger(\"actions\")\n\ntype DeepReadonly<T> = T extends (...args: any[]) => unknown\n ? T\n : T extends Array<infer U>\n ? ReadonlyArray<DeepReadonly<U>>\n : T extends object\n ? { readonly [K in keyof T]: DeepReadonly<T[K]> }\n : T\n\nexport interface ModelPreference {\n providerId: string\n modelId: string\n}\n\nexport type DiffViewMode = \"split\" | \"unified\"\nexport type FollowUpBehavior = \"steer\" | \"queue\"\nexport type ExpansionPreference = \"expanded\" | \"collapsed\"\nexport type VisibilityPreference = \"hidden\" | ExpansionPreference\nexport type ToolCallExpansionPreset = \"minimal\" | \"balanced\" | \"detailed\" | \"everything\"\nexport type ToolCallExpansionPresetSelection = ToolCallExpansionPreset | \"custom\"\nexport type ToolInputsVisibilityPreference = VisibilityPreference\nexport type ListeningMode = \"local\" | \"all\"\nexport type ServerLogLevel = \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\"\nexport type SpeechProviderPreference = \"openai-compatible\"\nexport type SpeechPlaybackMode = \"streaming\" | \"buffered\"\nexport type SpeechTtsFormat = \"mp3\" | \"wav\" | \"opus\" | \"aac\"\n\nexport interface ToolCallExpansionDefaults {\n preset: ToolCallExpansionPresetSelection\n thinking: ExpansionPreference\n tools: Record<string, VisibilityPreference>\n}\n\nexport interface SpeechSettings {\n provider: SpeechProviderPreference\n apiKey?: string\n hasApiKey: boolean\n baseUrl?: string\n sttModel: string\n ttsModel: string\n ttsVoice: string\n playbackMode: SpeechPlaybackMode\n ttsFormat: SpeechTtsFormat\n separateProviders: boolean\n stt: {\n apiKey?: string\n hasApiKey: boolean\n baseUrl?: string\n model: string\n }\n tts: {\n apiKey?: string\n hasApiKey: boolean\n baseUrl?: string\n model: string\n }\n}\n\nexport type SpeechSettingsUpdate = Partial<Omit<SpeechSettings, \"provider\" | \"hasApiKey\" | \"apiKey\" | \"baseUrl\" | \"sttModel\" | \"ttsModel\" | \"ttsVoice\" | \"stt\" | \"tts\">> & {\n apiKey?: string | null\n baseUrl?: string | null\n sttModel?: string | null\n ttsModel?: string | null\n ttsVoice?: string | null\n separateProviders?: boolean\n stt?: { apiKey?: string | null; baseUrl?: string | null; model?: string | null }\n tts?: { apiKey?: string | null; baseUrl?: string | null; model?: string | null }\n}\n\nexport interface UiSettings {\n showThinkingBlocks: boolean\n showKeyboardShortcutHints: boolean\n thinkingBlocksExpansion: ExpansionPreference\n showMessageTimeline: boolean\n showTimelineTools: boolean\n holdLongAssistantReplies: boolean\n promptSubmitOnEnter: boolean\n followUpBehavior: FollowUpBehavior\n showPromptVoiceInput: boolean\n locale?: string\n diffViewMode: DiffViewMode\n toolCallExpansionDefaults: ToolCallExpansionDefaults\n toolOutputExpansion: ExpansionPreference\n diagnosticsExpansion: VisibilityPreference\n toolInputsVisibility: ToolInputsVisibilityPreference\n showUsageMetrics: boolean\n usageMetricsExpansion: ExpansionPreference\n showProviderUsageCreditBalance: boolean\n autoCleanupBlankSessions: boolean\n keepUnseenSubagentIdleStatus: boolean\n focusExistingWindowOnSecondLaunch: boolean\n modelVisibility: ModelVisibilityPreferences\n\n // OS notifications\n osNotificationsEnabled: boolean\n osNotificationsAllowWhenVisible: boolean\n notifyOnNeedsInput: boolean\n notifyOnIdle: boolean\n}\n\n// Backwards-compatible alias for older imports.\nexport type Preferences = UiSettings\n\nexport interface OpenCodeBinary {\n path: string\n version?: string\n lastUsed: number\n label?: string\n}\n\nexport interface RecentFolder {\n path: string\n lastAccessed: number\n projectName?: string\n}\n\nexport type ThemePreference = \"light\" | \"dark\" | \"system\"\n\ninterface UiConfigBucket {\n theme?: ThemePreference\n colorScheme?: unknown\n customColorScheme?: unknown\n settings?: Partial<UiSettings>\n}\n\ninterface ServerConfigBucket {\n listeningMode?: ListeningMode\n logLevel?: ServerLogLevel\n environmentVariables?: Record<string, string>\n secureEnvVars?: string[]\n opencodeBinary?: string\n speech?: Partial<SpeechSettings>\n}\n\ninterface UiStateBucket {\n theme?: ThemePreference\n colorScheme?: unknown\n customColorScheme?: unknown\n colorSchemePresets?: unknown\n activeColorSchemePresetId?: string\n recentFolders?: RecentFolder[]\n opencodeBinaries?: OpenCodeBinary[]\n remoteServers?: RemoteServerProfile[]\n models?: {\n recents?: ModelPreference[]\n favorites?: ModelPreference[]\n thinkingSelections?: Record<string, string>\n }\n}\n\ninterface NormalizedUiState {\n recentFolders: RecentFolder[]\n opencodeBinaries: OpenCodeBinary[]\n remoteServers: RemoteServerProfile[]\n models: {\n recents: ModelPreference[]\n favorites: ModelPreference[]\n thinkingSelections: Record<string, string>\n }\n}\n\nconst MAX_RECENT_FOLDERS = 20\nconst MAX_RECENT_MODELS = 5\nconst MAX_FAVORITE_MODELS = 50\n\nconst defaultToolCallExpansionDefaults: ToolCallExpansionDefaults = {\n preset: \"balanced\",\n thinking: \"collapsed\",\n tools: {},\n}\n\nconst defaultUiSettings: UiSettings = {\n showThinkingBlocks: false,\n showKeyboardShortcutHints: false,\n thinkingBlocksExpansion: \"collapsed\",\n showMessageTimeline: true,\n showTimelineTools: false,\n holdLongAssistantReplies: true,\n promptSubmitOnEnter: true,\n followUpBehavior: \"steer\",\n showPromptVoiceInput: true,\n diffViewMode: \"split\",\n toolCallExpansionDefaults: defaultToolCallExpansionDefaults,\n toolOutputExpansion: \"expanded\",\n diagnosticsExpansion: \"expanded\",\n toolInputsVisibility: \"collapsed\",\n showUsageMetrics: true,\n usageMetricsExpansion: \"collapsed\",\n showProviderUsageCreditBalance: false,\n autoCleanupBlankSessions: true,\n keepUnseenSubagentIdleStatus: true,\n focusExistingWindowOnSecondLaunch: false,\n modelVisibility: {},\n\n osNotificationsEnabled: false,\n osNotificationsAllowWhenVisible: false,\n notifyOnNeedsInput: true,\n notifyOnIdle: true,\n}\n\nfunction normalizeExpansionPreference(value: unknown, fallback: ExpansionPreference): ExpansionPreference {\n return value === \"expanded\" || value === \"collapsed\" ? value : fallback\n}\n\nfunction normalizeVisibilityPreference(value: unknown, fallback: VisibilityPreference): VisibilityPreference {\n return value === \"hidden\" || value === \"expanded\" || value === \"collapsed\" ? value : fallback\n}\n\nfunction normalizeToolCallExpansionPreset(value: unknown): ToolCallExpansionPresetSelection {\n if (value === \"minimal\" || value === \"balanced\" || value === \"detailed\" || value === \"everything\" || value === \"custom\") {\n return value\n }\n return defaultToolCallExpansionDefaults.preset\n}\n\nfunction normalizeToolCallExpansionTools(value: unknown): Record<string, VisibilityPreference> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {}\n const next: Record<string, VisibilityPreference> = {}\n for (const [tool, mode] of Object.entries(value as Record<string, unknown>)) {\n if (!tool) continue\n if (mode === \"hidden\" || mode === \"expanded\" || mode === \"collapsed\") {\n next[tool] = mode\n }\n }\n return next\n}\n\nfunction normalizeToolCallExpansionDefaults(input: unknown, legacySettings: Partial<UiSettings>): ToolCallExpansionDefaults {\n const source = input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Partial<ToolCallExpansionDefaults>)\n : undefined\n const legacyThinking = normalizeExpansionPreference(\n legacySettings.thinkingBlocksExpansion,\n \"collapsed\",\n )\n\n return {\n preset: normalizeToolCallExpansionPreset(source?.preset),\n thinking: normalizeExpansionPreference(source?.thinking, legacyThinking),\n tools: normalizeToolCallExpansionTools(source?.tools),\n }\n}\n\nconst defaultSpeechSettings: SpeechSettings = {\n provider: \"openai-compatible\",\n hasApiKey: false,\n sttModel: \"gpt-4o-mini-transcribe\",\n ttsModel: \"gpt-4o-mini-tts\",\n ttsVoice: \"alloy\",\n playbackMode: \"streaming\",\n ttsFormat: \"mp3\",\n separateProviders: false,\n stt: {\n hasApiKey: false,\n model: \"gpt-4o-mini-transcribe\",\n },\n tts: {\n hasApiKey: false,\n model: \"gpt-4o-mini-tts\",\n },\n}\n\nfunction normalizeUiSettings(input?: Partial<UiSettings> | null): UiSettings {\n const sanitized = input ?? {}\n const toolCallExpansionDefaults = normalizeToolCallExpansionDefaults(sanitized.toolCallExpansionDefaults, sanitized)\n const usageMetricsFallback =\n toolCallExpansionDefaults.preset === \"minimal\" || toolCallExpansionDefaults.preset === \"balanced\"\n ? \"collapsed\"\n : \"expanded\"\n return {\n showThinkingBlocks: sanitized.showThinkingBlocks ?? defaultUiSettings.showThinkingBlocks,\n showKeyboardShortcutHints:\n sanitized.showKeyboardShortcutHints ?? defaultUiSettings.showKeyboardShortcutHints,\n thinkingBlocksExpansion: sanitized.thinkingBlocksExpansion ?? defaultUiSettings.thinkingBlocksExpansion,\n showMessageTimeline: sanitized.showMessageTimeline ?? defaultUiSettings.showMessageTimeline,\n showTimelineTools: sanitized.showTimelineTools ?? defaultUiSettings.showTimelineTools,\n holdLongAssistantReplies: sanitized.holdLongAssistantReplies ?? defaultUiSettings.holdLongAssistantReplies,\n promptSubmitOnEnter: sanitized.promptSubmitOnEnter ?? defaultUiSettings.promptSubmitOnEnter,\n followUpBehavior:\n sanitized.followUpBehavior === \"queue\" || sanitized.followUpBehavior === \"steer\"\n ? sanitized.followUpBehavior\n : defaultUiSettings.followUpBehavior,\n showPromptVoiceInput: sanitized.showPromptVoiceInput ?? defaultUiSettings.showPromptVoiceInput,\n locale: sanitized.locale ?? defaultUiSettings.locale,\n diffViewMode: sanitized.diffViewMode ?? defaultUiSettings.diffViewMode,\n toolCallExpansionDefaults,\n toolOutputExpansion: sanitized.toolOutputExpansion ?? defaultUiSettings.toolOutputExpansion,\n diagnosticsExpansion: normalizeVisibilityPreference(\n sanitized.diagnosticsExpansion,\n defaultUiSettings.diagnosticsExpansion,\n ),\n toolInputsVisibility:\n sanitized.toolInputsVisibility === \"hidden\" || sanitized.toolInputsVisibility === \"collapsed\" || sanitized.toolInputsVisibility === \"expanded\"\n ? sanitized.toolInputsVisibility\n : defaultUiSettings.toolInputsVisibility,\n showUsageMetrics: sanitized.showUsageMetrics ?? defaultUiSettings.showUsageMetrics,\n usageMetricsExpansion: normalizeExpansionPreference(\n sanitized.usageMetricsExpansion,\n usageMetricsFallback,\n ),\n showProviderUsageCreditBalance:\n sanitized.showProviderUsageCreditBalance ?? defaultUiSettings.showProviderUsageCreditBalance,\n autoCleanupBlankSessions: sanitized.autoCleanupBlankSessions ?? defaultUiSettings.autoCleanupBlankSessions,\n keepUnseenSubagentIdleStatus:\n sanitized.keepUnseenSubagentIdleStatus ?? defaultUiSettings.keepUnseenSubagentIdleStatus,\n focusExistingWindowOnSecondLaunch: sanitized.focusExistingWindowOnSecondLaunch === true,\n modelVisibility: normalizeModelVisibilityPreferences(sanitized.modelVisibility),\n osNotificationsEnabled: sanitized.osNotificationsEnabled ?? defaultUiSettings.osNotificationsEnabled,\n osNotificationsAllowWhenVisible:\n sanitized.osNotificationsAllowWhenVisible ?? defaultUiSettings.osNotificationsAllowWhenVisible,\n notifyOnNeedsInput: sanitized.notifyOnNeedsInput ?? defaultUiSettings.notifyOnNeedsInput,\n notifyOnIdle: sanitized.notifyOnIdle ?? defaultUiSettings.notifyOnIdle,\n }\n}\n\nfunction normalizeRecord(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {}\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (typeof v === \"string\") out[k] = v\n }\n return out\n}\n\nfunction normalizeSpeechSettings(input?: Partial<SpeechSettings> | null): SpeechSettings {\n const sanitized = input ?? {}\n const sttModel =\n typeof sanitized.sttModel === \"string\" && sanitized.sttModel.trim()\n ? sanitized.sttModel.trim()\n : defaultSpeechSettings.sttModel\n const ttsModel =\n typeof sanitized.ttsModel === \"string\" && sanitized.ttsModel.trim()\n ? sanitized.ttsModel.trim()\n : defaultSpeechSettings.ttsModel\n return {\n provider: sanitized.provider === \"openai-compatible\" ? sanitized.provider : defaultSpeechSettings.provider,\n apiKey: typeof sanitized.apiKey === \"string\" && sanitized.apiKey.trim() ? sanitized.apiKey.trim() : undefined,\n hasApiKey: sanitized.hasApiKey === true || (typeof sanitized.apiKey === \"string\" && sanitized.apiKey.trim().length > 0),\n baseUrl: typeof sanitized.baseUrl === \"string\" && sanitized.baseUrl.trim() ? sanitized.baseUrl.trim() : undefined,\n sttModel,\n ttsModel,\n ttsVoice:\n typeof sanitized.ttsVoice === \"string\" && sanitized.ttsVoice.trim()\n ? sanitized.ttsVoice.trim()\n : defaultSpeechSettings.ttsVoice,\n playbackMode:\n sanitized.playbackMode === \"buffered\" || sanitized.playbackMode === \"streaming\"\n ? sanitized.playbackMode\n : defaultSpeechSettings.playbackMode,\n ttsFormat:\n sanitized.ttsFormat === \"wav\" || sanitized.ttsFormat === \"opus\" || sanitized.ttsFormat === \"aac\" || sanitized.ttsFormat === \"mp3\"\n ? sanitized.ttsFormat\n : defaultSpeechSettings.ttsFormat,\n separateProviders: sanitized.separateProviders === true,\n stt: {\n apiKey: typeof sanitized.stt?.apiKey === \"string\" && sanitized.stt.apiKey.trim() ? sanitized.stt.apiKey.trim() : undefined,\n hasApiKey: sanitized.stt?.hasApiKey === true || (typeof sanitized.stt?.apiKey === \"string\" && sanitized.stt.apiKey.trim().length > 0),\n baseUrl: typeof sanitized.stt?.baseUrl === \"string\" && sanitized.stt.baseUrl.trim() ? sanitized.stt.baseUrl.trim() : undefined,\n model:\n typeof sanitized.stt?.model === \"string\" && sanitized.stt.model.trim()\n ? sanitized.stt.model.trim()\n : sttModel,\n },\n tts: {\n apiKey: typeof sanitized.tts?.apiKey === \"string\" && sanitized.tts.apiKey.trim() ? sanitized.tts.apiKey.trim() : undefined,\n hasApiKey: sanitized.tts?.hasApiKey === true || (typeof sanitized.tts?.apiKey === \"string\" && sanitized.tts.apiKey.trim().length > 0),\n baseUrl: typeof sanitized.tts?.baseUrl === \"string\" && sanitized.tts.baseUrl.trim() ? sanitized.tts.baseUrl.trim() : undefined,\n model:\n typeof sanitized.tts?.model === \"string\" && sanitized.tts.model.trim()\n ? sanitized.tts.model.trim()\n : ttsModel,\n },\n }\n}\n\nfunction cloneArray<T>(value: unknown, mapper: (item: any) => T | null): T[] {\n if (!Array.isArray(value)) return []\n const out: T[] = []\n for (const item of value) {\n const mapped = mapper(item)\n if (mapped) out.push(mapped)\n }\n return out\n}\n\nfunction normalizeUiState(input?: UiStateBucket | null): NormalizedUiState {\n const source = input ?? {}\n return {\n recentFolders: cloneArray<RecentFolder>(source.recentFolders, (f) => {\n if (!f || typeof f !== \"object\") return null\n const p = (f as any).path\n const lastAccessed = (f as any).lastAccessed\n const projectName = (f as any).projectName\n if (typeof p !== \"string\") return null\n const ts = typeof lastAccessed === \"number\" ? lastAccessed : Date.now()\n return {\n path: p,\n lastAccessed: ts,\n ...(typeof projectName === \"string\" && projectName.trim() ? { projectName: projectName.trim() } : {}),\n }\n }),\n opencodeBinaries: cloneArray<OpenCodeBinary>(source.opencodeBinaries, (b) => {\n if (!b || typeof b !== \"object\") return null\n const p = (b as any).path\n if (typeof p !== \"string\") return null\n const lastUsed = typeof (b as any).lastUsed === \"number\" ? (b as any).lastUsed : Date.now()\n const version = typeof (b as any).version === \"string\" ? (b as any).version : undefined\n const label = typeof (b as any).label === \"string\" ? (b as any).label : undefined\n return { path: p, version, label, lastUsed }\n }),\n remoteServers: cloneArray<RemoteServerProfile>(source.remoteServers, (server) => {\n if (!server || typeof server !== \"object\") return null\n const id = typeof (server as any).id === \"string\" ? (server as any).id.trim() : \"\"\n const name = typeof (server as any).name === \"string\" ? (server as any).name.trim() : \"\"\n const baseUrl = typeof (server as any).baseUrl === \"string\" ? (server as any).baseUrl.trim() : \"\"\n if (!id || !name || !baseUrl) return null\n const createdAt = typeof (server as any).createdAt === \"string\" ? (server as any).createdAt : new Date().toISOString()\n const updatedAt = typeof (server as any).updatedAt === \"string\" ? (server as any).updatedAt : createdAt\n const lastConnectedAt = typeof (server as any).lastConnectedAt === \"string\" ? (server as any).lastConnectedAt : undefined\n return {\n id,\n name,\n baseUrl,\n skipTlsVerify: Boolean((server as any).skipTlsVerify),\n createdAt,\n updatedAt,\n lastConnectedAt,\n }\n }).sort((a, b) => {\n const left = a.lastConnectedAt ?? a.updatedAt\n const right = b.lastConnectedAt ?? b.updatedAt\n return right.localeCompare(left)\n }),\n models: {\n recents: cloneArray<ModelPreference>((source.models as any)?.recents, (m) => {\n if (!m || typeof m !== \"object\") return null\n const providerId = (m as any).providerId\n const modelId = (m as any).modelId\n if (typeof providerId !== \"string\" || typeof modelId !== \"string\") return null\n return { providerId, modelId }\n }),\n favorites: cloneArray<ModelPreference>((source.models as any)?.favorites, (m) => {\n if (!m || typeof m !== \"object\") return null\n const providerId = (m as any).providerId\n const modelId = (m as any).modelId\n if (typeof providerId !== \"string\" || typeof modelId !== \"string\") return null\n return { providerId, modelId }\n }),\n thinkingSelections: normalizeRecord((source.models as any)?.thinkingSelections),\n },\n }\n}\n\nexport function normalizeServerConfig(\n input?: ServerConfigBucket | null,\n): Required<Pick<ServerConfigBucket, \"listeningMode\" | \"logLevel\" | \"environmentVariables\" | \"opencodeBinary\" | \"secureEnvVars\">> & { speech: SpeechSettings } {\n const source = input ?? {}\n const listeningMode = source.listeningMode === \"all\" ? \"all\" : \"local\"\n const logLevel =\n source.logLevel === \"INFO\" || source.logLevel === \"WARN\" || source.logLevel === \"ERROR\" || source.logLevel === \"DEBUG\"\n ? source.logLevel\n : \"DEBUG\"\n const opencodeBinary = typeof source.opencodeBinary === \"string\" && source.opencodeBinary.trim() && source.opencodeBinary !== \"opencode\"\n ? source.opencodeBinary\n : \"opencode2\"\n const environmentVariables = normalizeRecord(source.environmentVariables)\n const secureEnvVars = normalizeSecureEnvVars(source.secureEnvVars)\n const speech = normalizeSpeechSettings(source.speech)\n return { listeningMode, logLevel, opencodeBinary, environmentVariables, secureEnvVars, speech }\n}\n\nfunction normalizeSecureEnvVars(input?: unknown): string[] {\n if (!Array.isArray(input)) return []\n return input.filter((item): item is string => typeof item === \"string\" && item.length > 0)\n}\n\nfunction getModelKey(model: { providerId: string; modelId: string }): string {\n return `${model.providerId}/${model.modelId}`\n}\n\nfunction buildRecentFolderList(folderPath: string, source: RecentFolder[], aliasPath?: string): RecentFolder[] {\n const matchingPaths = new Set([folderPath, aliasPath].filter((value): value is string => Boolean(value)))\n const aliasEntry = aliasPath ? source.find((folder) => folder.path === aliasPath) : undefined\n const canonicalEntry = source.find((folder) => folder.path === folderPath)\n const projectName = aliasEntry?.projectName ?? canonicalEntry?.projectName\n const folders = source.filter((folder) => !matchingPaths.has(folder.path))\n folders.unshift({\n path: folderPath,\n lastAccessed: Date.now(),\n ...(projectName ? { projectName } : {}),\n })\n return folders.slice(0, MAX_RECENT_FOLDERS)\n}\n\nexport function buildBinaryList(binaryPath: string, version: string | undefined, source: OpenCodeBinary[]): OpenCodeBinary[] {\n if (binaryPath === \"opencode\" || binaryPath === \"opencode2\") return source\n const timestamp = Date.now()\n const existing = source.find((b) => b.path === binaryPath)\n if (existing) {\n const updatedEntry: OpenCodeBinary = { ...existing, lastUsed: timestamp, version: version ?? existing.version }\n const remaining = source.filter((b) => b.path !== binaryPath)\n return [updatedEntry, ...remaining]\n }\n const nextEntry: OpenCodeBinary = version\n ? { path: binaryPath, version, lastUsed: timestamp }\n : { path: binaryPath, lastUsed: timestamp }\n return [nextEntry, ...source].slice(0, 10)\n}\n\ninterface RemoteServerProfileInput {\n id?: string\n name: string\n baseUrl: string\n skipTlsVerify: boolean\n}\n\nfunction buildRemoteServerProfile(input: RemoteServerProfileInput, source: RemoteServerProfile[]): RemoteServerProfile {\n const existing = input.id ? source.find((entry) => entry.id === input.id) : undefined\n const now = new Date().toISOString()\n return {\n id: existing?.id ?? input.id ?? createRandomId(),\n name: input.name.trim(),\n baseUrl: input.baseUrl.trim(),\n skipTlsVerify: Boolean(input.skipTlsVerify),\n createdAt: existing?.createdAt ?? now,\n updatedAt: now,\n lastConnectedAt: existing?.lastConnectedAt,\n }\n}\n\nfunction buildRemoteServerList(profile: RemoteServerProfile, source: RemoteServerProfile[]): RemoteServerProfile[] {\n const remaining = source.filter((entry) => entry.id !== profile.id)\n return [profile, ...remaining].sort((a, b) => {\n const left = a.lastConnectedAt ?? a.updatedAt\n const right = b.lastConnectedAt ?? b.updatedAt\n return right.localeCompare(left)\n })\n}\n\nfunction createRandomId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID()\n }\n return `remote-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n}\n\nconst [uiConfigBucket, setUiConfigBucket] = createSignal<UiConfigBucket>({})\nconst [serverConfigBucket, setServerConfigBucket] = createSignal<ServerConfigBucket>({})\nconst [uiStateBucket, setUiStateBucket] = createSignal<UiStateBucket>({})\nconst [isLoaded, setIsLoaded] = createSignal(false)\n\nconst uiSettings = createMemo<UiSettings>(() => normalizeUiSettings(uiConfigBucket().settings))\nconst themePreference = createMemo<ThemePreference>(() => uiStateBucket().theme ?? uiConfigBucket().theme ?? \"system\")\nconst colorSchemePreference = createMemo(() => normalizeColorScheme(uiStateBucket().colorScheme ?? uiConfigBucket().colorScheme, themePreference()))\nconst customColorSchemePreference = createMemo(() => {\n const state = uiStateBucket()\n const config = uiConfigBucket()\n const custom = state.customColorScheme\n ?? config.customColorScheme\n ?? (colorSchemePreference().id === \"custom\" ? state.colorScheme ?? config.colorScheme : undefined)\n const value = typeof custom === \"object\" && custom !== null && !Array.isArray(custom)\n ? { ...(custom as Record<string, unknown>), id: \"custom\" }\n : { id: \"custom\" }\n return normalizeColorScheme(value)\n})\nconst colorSchemePresets = createMemo<UserColorSchemePresets>(() => normalizeColorSchemePresets(uiStateBucket().colorSchemePresets))\nconst activeColorSchemePresetId = createMemo(() => {\n const id = uiStateBucket().activeColorSchemePresetId\n return typeof id === \"string\" && colorSchemePresets()[id] ? id : undefined\n})\nconst serverSettings = createMemo(() => normalizeServerConfig(serverConfigBucket()))\nconst uiState = createMemo(() => normalizeUiState(uiStateBucket()))\n\nconst preferences = uiSettings\nconst recentFolders = createMemo<RecentFolder[]>(() => uiState().recentFolders)\nconst opencodeBinaries = createMemo<OpenCodeBinary[]>(() => uiState().opencodeBinaries)\nconst remoteServers = createMemo<RemoteServerProfile[]>(() => uiState().remoteServers)\n\nlet loadPromise: Promise<void> | null = null\n\nasync function ensureLoaded(): Promise<void> {\n if (isLoaded()) return\n if (!loadPromise) {\n loadPromise = Promise.all([\n storage.loadConfigOwner(\"ui\"),\n storage.loadConfigOwner(\"server\"),\n storage.loadStateOwner(\"ui\"),\n ])\n .then(([uiCfg, srvCfg, uiSt]) => {\n setUiConfigBucket(uiCfg as any)\n setServerConfigBucket(srvCfg as any)\n setUiStateBucket(uiSt as any)\n setIsLoaded(true)\n })\n .catch((error) => {\n log.error(\"Failed to load settings\", error)\n setUiConfigBucket({})\n setServerConfigBucket({})\n setUiStateBucket({})\n setIsLoaded(true)\n })\n .finally(() => {\n loadPromise = null\n })\n }\n await loadPromise\n}\n\nasync function patchConfigOwner(owner: string, patch: unknown) {\n await ensureLoaded()\n const updated = await storage.patchConfigOwner(owner, patch)\n if (owner === \"ui\") setUiConfigBucket(updated as any)\n if (owner === \"server\") setServerConfigBucket(updated as any)\n}\n\nasync function patchStateOwner(owner: string, patch: unknown) {\n await ensureLoaded()\n const updated = await storage.patchStateOwner(owner, patch)\n if (owner === \"ui\") setUiStateBucket(updated as any)\n}\n\nfunction updateUiSettings(updates: Partial<UiSettings>): Promise<boolean> {\n const current = uiConfigBucket()\n const nextSettings = normalizeUiSettings({ ...(current.settings ?? {}), ...updates })\n const patch = {\n settings: Object.fromEntries(\n Object.keys(updates).map((key) => [key, nextSettings[key as keyof UiSettings]]),\n ),\n }\n return patchConfigOwner(\"ui\", patch).then(\n () => true,\n (error) => {\n log.error(\"Failed to patch ui settings\", error)\n return false\n },\n )\n}\n\nfunction updatePreferences(updates: Partial<UiSettings>): Promise<boolean> {\n return updateUiSettings(updates)\n}\n\nconst modelVisibilityWriteQueues = new Map<string, Promise<void>>()\nlet modelVisibilityWriteQueue = Promise.resolve()\nconst [pendingModelVisibility, setPendingModelVisibility] = createSignal(new Map<string, ModelVisibilityPreference>())\nconst [modelVisibilityWriteFailures, setModelVisibilityWriteFailures] = createSignal(new Set<string>())\n\nfunction getProviderModelVisibilityPreference(providerId: string): ModelVisibilityPreference {\n return pendingModelVisibility().get(providerId)\n ?? normalizeModelVisibilityPreference(preferences().modelVisibility[providerId])\n}\n\nfunction providerModelVisibilitySaveFailed(providerId: string): boolean {\n return modelVisibilityWriteFailures().has(providerId)\n}\n\nasync function setProviderModelVisibility(providerId: string, preference: ModelVisibilityPreference): Promise<void> {\n if (!providerId) return\n const normalized = normalizeModelVisibilityPreference(preference)\n setPendingModelVisibility((current) => new Map(current).set(providerId, normalized))\n setModelVisibilityWriteFailures((current) => {\n const next = new Set(current)\n next.delete(providerId)\n return next\n })\n const previous = modelVisibilityWriteQueue\n const write = previous\n .catch(() => undefined)\n .then(() => patchConfigOwner(\"ui\", {\n settings: {\n modelVisibility: {\n [providerId]: normalized,\n },\n },\n }))\n\n modelVisibilityWriteQueue = write\n modelVisibilityWriteQueues.set(providerId, write)\n void write.then(\n () => {\n if (modelVisibilityWriteQueues.get(providerId) !== write) return\n modelVisibilityWriteQueues.delete(providerId)\n setPendingModelVisibility((current) => {\n const next = new Map(current)\n next.delete(providerId)\n return next\n })\n },\n (error) => {\n log.error(\"Failed to update provider model visibility\", error)\n if (modelVisibilityWriteQueues.get(providerId) !== write) return\n modelVisibilityWriteQueues.delete(providerId)\n setPendingModelVisibility((current) => {\n const next = new Map(current)\n next.delete(providerId)\n return next\n })\n setModelVisibilityWriteFailures((current) => new Set(current).add(providerId))\n },\n )\n await write\n}\n\nfunction setThemePreference(preference: ThemePreference): void {\n void setColorSchemePreference(normalizeColorScheme(preference === \"dark\" ? \"classic\" : preference))\n}\n\nlet colorSchemeWriteQueue = Promise.resolve()\n\nfunction setColorSchemePreference(preference: NormalizedColorScheme): Promise<void> {\n const normalized = normalizeColorScheme(preference)\n const legacyTheme: ThemePreference = normalized.appearance === \"system\" ? \"system\" : normalized.appearance\n const patch = {\n theme: legacyTheme,\n colorScheme: normalized,\n ...(normalized.id === \"custom\" ? { customColorScheme: normalized } : {}),\n activeColorSchemePresetId: null,\n }\n const write = colorSchemeWriteQueue.then(() => patchStateOwner(\"ui\", patch))\n colorSchemeWriteQueue = write.then(() => undefined, () => undefined)\n return write.then(() => undefined).catch((error) => {\n log.error(\"Failed to set color scheme\", error)\n throw error\n })\n}\n\nfunction selectColorSchemePreset(id: string): Promise<void> {\n const preset = colorSchemePresets()[id]\n if (!preset) return Promise.resolve()\n const scheme = normalizeColorScheme({ id: \"custom\", appearance: preset.appearance, colors: preset.colors })\n const write = colorSchemeWriteQueue.then(() => patchStateOwner(\"ui\", {\n theme: preset.appearance,\n colorScheme: scheme,\n customColorScheme: scheme,\n activeColorSchemePresetId: id,\n }))\n colorSchemeWriteQueue = write.then(() => undefined, () => undefined)\n return write.then(() => undefined)\n}\n\nfunction saveColorSchemePreset(name: string, appearance: \"light\" | \"dark\", colors: Readonly<ColorSchemeColors>): Promise<string> {\n const trimmedName = name.trim().slice(0, 80)\n if (!trimmedName || !validateColorSchemeColors(colors)) return Promise.reject(new Error(\"Invalid color scheme preset\"))\n if (Object.keys(colorSchemePresets()).length >= MAX_COLOR_SCHEME_PRESETS) return Promise.reject(new Error(\"Color scheme preset limit reached\"))\n const id = createColorSchemePresetId()\n const scheme = normalizeColorScheme({ id: \"custom\", appearance, colors })\n const write = colorSchemeWriteQueue.then(() => patchStateOwner(\"ui\", {\n theme: appearance,\n colorScheme: scheme,\n customColorScheme: scheme,\n colorSchemePresets: { [id]: { name: trimmedName, appearance, colors: { ...colors } } },\n activeColorSchemePresetId: id,\n }))\n colorSchemeWriteQueue = write.then(() => undefined, () => undefined)\n return write.then(() => id)\n}\n\n async function setListeningMode(mode: ListeningMode): Promise<void> {\n if (serverSettings().listeningMode === mode) return\n await patchConfigOwner(\"server\", { listeningMode: mode })\n }\n\nfunction updateEnvironmentVariables(envVars: Record<string, string>): void {\n void patchConfigOwner(\"server\", { environmentVariables: envVars }).catch((error) =>\n log.error(\"Failed to update environment variables\", error),\n )\n}\n\nfunction addEnvironmentVariable(key: string, value: string, secure: boolean = true): void {\n const current = serverSettings().environmentVariables\n updateEnvironmentVariables({ ...current, [key]: value })\n\n const secureList = serverSettings().secureEnvVars\n const upperKey = key.toUpperCase()\n const exists = secureList.some((name) => name.toUpperCase() === upperKey)\n\n if (secure) {\n if (!exists) {\n const next = [...secureList, key]\n void patchConfigOwner(\"server\", { secureEnvVars: next }).catch((error) =>\n log.error(\"Failed to add secure env var\", error),\n )\n }\n } else {\n if (exists) {\n const next = secureList.filter((name) => name.toUpperCase() !== upperKey)\n void patchConfigOwner(\"server\", { secureEnvVars: next }).catch((error) =>\n log.error(\"Failed to remove secure env var\", error),\n )\n }\n }\n}\n\nfunction removeEnvironmentVariable(key: string): void {\n void patchConfigOwner(\"server\", { environmentVariables: { [key]: null } }).catch((error) =>\n log.error(\"Failed to remove environment variable\", error),\n )\n}\n\nfunction isSecureEnvVar(key: string): boolean {\n const secureList = serverSettings().secureEnvVars\n return secureList.some((name) => name.toUpperCase() === key.toUpperCase())\n}\n\nfunction toggleSecureEnvVar(key: string): void {\n const secureList = serverSettings().secureEnvVars\n const upperKey = key.toUpperCase()\n const exists = secureList.some((name) => name.toUpperCase() === upperKey)\n const next = exists\n ? secureList.filter((name) => name.toUpperCase() !== upperKey)\n : [...secureList, key]\n void patchConfigOwner(\"server\", { secureEnvVars: next }).catch((error) =>\n log.error(\"Failed to update secure env vars\", error),\n )\n}\n\nfunction updateLastUsedBinary(path: string): void {\n const target = path && path.trim().length > 0 ? path : \"opencode2\"\n void patchConfigOwner(\"server\", { opencodeBinary: target }).catch((error) => log.error(\"Failed to set default binary\", error))\n\n // also bump lastUsed in state ui.opencodeBinaries\n const nextList = buildBinaryList(target, undefined, opencodeBinaries())\n void patchStateOwner(\"ui\", { opencodeBinaries: nextList }).catch((error) => log.error(\"Failed to update binary list\", error))\n}\n\nfunction updateLogLevel(level: ServerLogLevel): void {\n const target = level ?? \"DEBUG\"\n void patchConfigOwner(\"server\", { logLevel: target }).catch((error) => log.error(\"Failed to set log level\", error))\n}\n\nasync function updateSpeechSettings(updates: SpeechSettingsUpdate): Promise<void> {\n const patch = buildSpeechPatch(updates)\n try {\n await patchConfigOwner(\"server\", { speech: patch })\n } catch (error) {\n log.error(\"Failed to update speech settings\", error)\n throw error\n }\n}\n\nfunction addOpenCodeBinary(path: string, version?: string): void {\n const nextList = buildBinaryList(path, version, opencodeBinaries())\n void patchStateOwner(\"ui\", { opencodeBinaries: nextList }).catch((error) => log.error(\"Failed to add binary\", error))\n}\n\nfunction removeOpenCodeBinary(path: string): void {\n const nextList = opencodeBinaries().filter((b) => b.path !== path)\n void patchStateOwner(\"ui\", { opencodeBinaries: nextList }).catch((error) => log.error(\"Failed to remove binary\", error))\n\n if (serverSettings().opencodeBinary === path) {\n void patchConfigOwner(\"server\", { opencodeBinary: \"opencode2\" }).catch((error) =>\n log.error(\"Failed to reset default binary\", error),\n )\n }\n}\n\nfunction addRecentFolder(folderPath: string): void {\n const next = buildRecentFolderList(folderPath, recentFolders())\n void patchStateOwner(\"ui\", { recentFolders: next }).catch((error) => log.error(\"Failed to add recent folder\", error))\n}\n\nfunction removeRecentFolder(folderPath: string): void {\n const next = recentFolders().filter((f) => f.path !== folderPath)\n void patchStateOwner(\"ui\", { recentFolders: next }).catch((error) => log.error(\"Failed to remove recent folder\", error))\n}\n\nasync function renameRecentFolderProject(folderPath: string, projectName: string): Promise<void> {\n const name = projectName.trim()\n if (!folderPath || !name) return\n const next = recentFolders().map((folder) => (folder.path === folderPath ? { ...folder, projectName: name } : folder))\n try {\n await patchStateOwner(\"ui\", { recentFolders: next })\n } catch (error) {\n log.error(\"Failed to rename recent folder\", error)\n throw error\n }\n}\n\nasync function saveRemoteServerProfile(input: RemoteServerProfileInput): Promise<RemoteServerProfile> {\n const profile = buildRemoteServerProfile(input, remoteServers())\n await patchStateOwner(\"ui\", { remoteServers: buildRemoteServerList(profile, remoteServers()) })\n return profile\n}\n\nasync function markRemoteServerConnected(id: string): Promise<void> {\n const current = remoteServers().find((entry) => entry.id === id)\n if (!current) return\n const now = new Date().toISOString()\n const updated: RemoteServerProfile = {\n ...current,\n updatedAt: now,\n lastConnectedAt: now,\n }\n await patchStateOwner(\"ui\", { remoteServers: buildRemoteServerList(updated, remoteServers()) })\n}\n\nfunction removeRemoteServerProfile(id: string): void {\n const next = remoteServers().filter((entry) => entry.id !== id)\n void patchStateOwner(\"ui\", { remoteServers: next }).catch((error) => log.error(\"Failed to remove remote server\", error))\n}\n\nfunction recordWorkspaceLaunch(folderPath: string, aliasPath?: string): void {\n const nextFolders = buildRecentFolderList(folderPath, recentFolders(), aliasPath)\n\n void patchStateOwner(\"ui\", { recentFolders: nextFolders }).catch((error) =>\n log.error(\"Failed to update ui state on launch\", error),\n )\n}\n\nfunction addRecentModelPreference(model: ModelPreference): void {\n if (!model.providerId || !model.modelId) return\n const recents = uiState().models.recents\n const filtered = recents.filter((item) => item.providerId !== model.providerId || item.modelId !== model.modelId)\n const updated = [model, ...filtered].slice(0, MAX_RECENT_MODELS)\n void patchStateOwner(\"ui\", { models: { recents: updated } }).catch((error) => log.error(\"Failed to update model recents\", error))\n}\n\nfunction isFavoriteModelPreference(model: ModelPreference): boolean {\n if (!model.providerId || !model.modelId) return false\n return uiState().models.favorites.some((item) => item.providerId === model.providerId && item.modelId === model.modelId)\n}\n\nfunction toggleFavoriteModelPreference(model: ModelPreference): void {\n if (!model.providerId || !model.modelId) return\n const favorites = uiState().models.favorites\n const exists = favorites.some((item) => item.providerId === model.providerId && item.modelId === model.modelId)\n\n const updated = exists\n ? favorites.filter((item) => item.providerId !== model.providerId || item.modelId !== model.modelId)\n : [model, ...favorites.filter((item) => item.providerId !== model.providerId || item.modelId !== model.modelId)].slice(\n 0,\n MAX_FAVORITE_MODELS,\n )\n\n void patchStateOwner(\"ui\", { models: { favorites: updated } }).catch((error) => log.error(\"Failed to update model favorites\", error))\n}\n\nfunction getModelThinkingSelection(model: { providerId: string; modelId: string }): string | undefined {\n if (!model.providerId || !model.modelId) return undefined\n return uiState().models.thinkingSelections[getModelKey(model)]\n}\n\nfunction setModelThinkingSelection(model: { providerId: string; modelId: string }, value: string | undefined): void {\n if (!model.providerId || !model.modelId) return\n const key = getModelKey(model)\n const current = uiState().models.thinkingSelections[key]\n if (current === value) return\n\n const selections = { ...uiState().models.thinkingSelections }\n if (!value) {\n delete selections[key]\n } else {\n selections[key] = value\n }\n void patchStateOwner(\"ui\", { models: { thinkingSelections: selections } }).catch((error) =>\n log.error(\"Failed to update thinking selection\", error),\n )\n}\n\nfunction setDiffViewMode(mode: DiffViewMode): void {\n if (preferences().diffViewMode === mode) return\n updateUiSettings({ diffViewMode: mode })\n}\n\nfunction setToolOutputExpansion(mode: VisibilityPreference): void {\n const current = preferences()\n if (current.toolCallExpansionDefaults.tools.other === mode) return\n updateUiSettings({\n toolOutputExpansion: mode === \"hidden\" ? current.toolOutputExpansion : mode,\n toolCallExpansionDefaults: {\n ...current.toolCallExpansionDefaults,\n preset: \"custom\",\n tools: {\n ...current.toolCallExpansionDefaults.tools,\n other: mode,\n },\n },\n })\n}\n\nfunction setDiagnosticsExpansion(mode: VisibilityPreference): void {\n if (preferences().diagnosticsExpansion === mode) return\n updateUiSettings({ diagnosticsExpansion: mode })\n}\n\nfunction setToolInputsVisibility(mode: ToolInputsVisibilityPreference): void {\n if (preferences().toolInputsVisibility === mode) return\n updateUiSettings({ toolInputsVisibility: mode })\n}\n\nfunction setThinkingBlocksExpansion(mode: ExpansionPreference): void {\n const current = preferences()\n if (current.thinkingBlocksExpansion === mode && current.toolCallExpansionDefaults.thinking === mode) return\n updateUiSettings({\n thinkingBlocksExpansion: mode,\n toolCallExpansionDefaults: {\n ...current.toolCallExpansionDefaults,\n preset: \"custom\",\n thinking: mode,\n },\n })\n}\n\nfunction toggleShowThinkingBlocks(): void {\n updateUiSettings({ showThinkingBlocks: !preferences().showThinkingBlocks })\n}\n\nfunction toggleKeyboardShortcutHints(): void {\n updatePreferences({ showKeyboardShortcutHints: !preferences().showKeyboardShortcutHints })\n}\n\nfunction toggleShowTimelineTools(): void {\n updateUiSettings({ showTimelineTools: !preferences().showTimelineTools })\n}\n\nfunction toggleShowMessageTimeline(): void {\n updateUiSettings({ showMessageTimeline: !(preferences().showMessageTimeline ?? true) })\n}\n\nfunction toggleUsageMetrics(): void {\n updateUiSettings({ showUsageMetrics: !preferences().showUsageMetrics })\n}\n\nfunction togglePromptSubmitOnEnter(): void {\n updateUiSettings({ promptSubmitOnEnter: !preferences().promptSubmitOnEnter })\n}\n\nfunction toggleShowPromptVoiceInput(): void {\n updateUiSettings({ showPromptVoiceInput: !preferences().showPromptVoiceInput })\n}\n\nfunction toggleAutoCleanupBlankSessions(): void {\n const nextValue = !preferences().autoCleanupBlankSessions\n log.info(\"toggle auto cleanup\", { value: nextValue })\n updateUiSettings({ autoCleanupBlankSessions: nextValue })\n}\n\nasync function setAgentModelPreference(instanceId: string, agent: string, model: ModelPreference): Promise<void> {\n if (!instanceId || !agent || !model.providerId || !model.modelId) return\n await ensureInstanceConfigLoaded(instanceId)\n await updateInstanceData(instanceId, (draft) => {\n const selections = { ...(draft.agentModelSelections ?? {}) }\n const existing = selections[agent]\n if (existing && existing.providerId === model.providerId && existing.modelId === model.modelId) {\n return\n }\n selections[agent] = model\n draft.agentModelSelections = selections\n })\n}\n\nasync function getAgentModelPreference(instanceId: string, agent: string): Promise<ModelPreference | undefined> {\n if (!instanceId || !agent) return undefined\n await ensureInstanceConfigLoaded(instanceId)\n const selections = getInstanceConfig(instanceId).agentModelSelections ?? {}\n return selections[agent]\n}\n\nvoid ensureLoaded().catch((error: unknown) => {\n log.error(\"Failed to initialize settings\", error)\n})\n\ninterface ConfigContextValue {\n isLoaded: Accessor<boolean>\n preferences: typeof preferences\n updatePreferences: typeof updatePreferences\n setProviderModelVisibility: typeof setProviderModelVisibility\n getProviderModelVisibilityPreference: typeof getProviderModelVisibilityPreference\n providerModelVisibilitySaveFailed: typeof providerModelVisibilitySaveFailed\n themePreference: typeof themePreference\n setThemePreference: typeof setThemePreference\n colorSchemePreference: typeof colorSchemePreference\n customColorSchemePreference: typeof customColorSchemePreference\n colorSchemePresets: typeof colorSchemePresets\n activeColorSchemePresetId: typeof activeColorSchemePresetId\n setColorSchemePreference: typeof setColorSchemePreference\n selectColorSchemePreset: typeof selectColorSchemePreset\n saveColorSchemePreset: typeof saveColorSchemePreset\n\n // server-owned stable config\n serverSettings: typeof serverSettings\n setListeningMode: typeof setListeningMode\n updateEnvironmentVariables: typeof updateEnvironmentVariables\n addEnvironmentVariable: typeof addEnvironmentVariable\n removeEnvironmentVariable: typeof removeEnvironmentVariable\n isSecureEnvVar: typeof isSecureEnvVar\n toggleSecureEnvVar: typeof toggleSecureEnvVar\n updateLastUsedBinary: typeof updateLastUsedBinary\n updateLogLevel: typeof updateLogLevel\n updateSpeechSettings: typeof updateSpeechSettings\n\n // ui-owned state\n recentFolders: typeof recentFolders\n opencodeBinaries: typeof opencodeBinaries\n remoteServers: typeof remoteServers\n uiState: typeof uiState\n addRecentFolder: typeof addRecentFolder\n removeRecentFolder: typeof removeRecentFolder\n renameRecentFolderProject: typeof renameRecentFolderProject\n addOpenCodeBinary: typeof addOpenCodeBinary\n removeOpenCodeBinary: typeof removeOpenCodeBinary\n saveRemoteServerProfile: typeof saveRemoteServerProfile\n markRemoteServerConnected: typeof markRemoteServerConnected\n removeRemoteServerProfile: typeof removeRemoteServerProfile\n recordWorkspaceLaunch: typeof recordWorkspaceLaunch\n addRecentModelPreference: typeof addRecentModelPreference\n isFavoriteModelPreference: typeof isFavoriteModelPreference\n toggleFavoriteModelPreference: typeof toggleFavoriteModelPreference\n getModelThinkingSelection: typeof getModelThinkingSelection\n setModelThinkingSelection: typeof setModelThinkingSelection\n\n // ui settings helpers\n toggleShowThinkingBlocks: typeof toggleShowThinkingBlocks\n toggleKeyboardShortcutHints: typeof toggleKeyboardShortcutHints\n toggleShowMessageTimeline: typeof toggleShowMessageTimeline\n toggleShowTimelineTools: typeof toggleShowTimelineTools\n toggleUsageMetrics: typeof toggleUsageMetrics\n toggleAutoCleanupBlankSessions: typeof toggleAutoCleanupBlankSessions\n togglePromptSubmitOnEnter: typeof togglePromptSubmitOnEnter\n toggleShowPromptVoiceInput: typeof toggleShowPromptVoiceInput\n setDiffViewMode: typeof setDiffViewMode\n setToolOutputExpansion: typeof setToolOutputExpansion\n setDiagnosticsExpansion: typeof setDiagnosticsExpansion\n setThinkingBlocksExpansion: typeof setThinkingBlocksExpansion\n setToolInputsVisibility: typeof setToolInputsVisibility\n\n // instance scoped\n setAgentModelPreference: typeof setAgentModelPreference\n getAgentModelPreference: typeof getAgentModelPreference\n}\n\nconst ConfigContext = createContext<ConfigContextValue>()\n\nconst configContextValue: ConfigContextValue = {\n isLoaded,\n preferences,\n updatePreferences,\n setProviderModelVisibility,\n getProviderModelVisibilityPreference,\n providerModelVisibilitySaveFailed,\n themePreference,\n setThemePreference,\n colorSchemePreference,\n customColorSchemePreference,\n colorSchemePresets,\n activeColorSchemePresetId,\n setColorSchemePreference,\n selectColorSchemePreset,\n saveColorSchemePreset,\n serverSettings,\n setListeningMode,\n updateEnvironmentVariables,\n addEnvironmentVariable,\n removeEnvironmentVariable,\n isSecureEnvVar,\n toggleSecureEnvVar,\n updateLastUsedBinary,\n updateLogLevel,\n updateSpeechSettings,\n recentFolders,\n opencodeBinaries,\n remoteServers,\n uiState,\n addRecentFolder,\n removeRecentFolder,\n renameRecentFolderProject,\n addOpenCodeBinary,\n removeOpenCodeBinary,\n saveRemoteServerProfile,\n markRemoteServerConnected,\n removeRemoteServerProfile,\n recordWorkspaceLaunch,\n addRecentModelPreference,\n isFavoriteModelPreference,\n toggleFavoriteModelPreference,\n getModelThinkingSelection,\n setModelThinkingSelection,\n toggleShowThinkingBlocks,\n toggleKeyboardShortcutHints,\n toggleShowMessageTimeline,\n toggleShowTimelineTools,\n toggleUsageMetrics,\n toggleAutoCleanupBlankSessions,\n togglePromptSubmitOnEnter,\n toggleShowPromptVoiceInput,\n setDiffViewMode,\n setToolOutputExpansion,\n setDiagnosticsExpansion,\n setThinkingBlocksExpansion,\n setToolInputsVisibility,\n setAgentModelPreference,\n getAgentModelPreference,\n}\n\nexport const ConfigProvider: ParentComponent = (props) => {\n onMount(() => {\n ensureLoaded().catch((error: unknown) => {\n log.error(\"Failed to initialize settings\", error)\n })\n\n const unsubUi = storage.onConfigOwnerChanged(\"ui\", (bucket) => {\n setUiConfigBucket(bucket as any)\n setIsLoaded(true)\n })\n const unsubServer = storage.onConfigOwnerChanged(\"server\", (bucket) => {\n setServerConfigBucket(bucket as any)\n setIsLoaded(true)\n resetSpeechCapabilities()\n void loadSpeechCapabilities(true)\n })\n const unsubStateUi = storage.onStateOwnerChanged(\"ui\", (bucket) => {\n setUiStateBucket(bucket as any)\n setIsLoaded(true)\n })\n\n return () => {\n unsubUi()\n unsubServer()\n unsubStateUi()\n }\n })\n\n return <ConfigContext.Provider value={configContextValue}>{props.children}</ConfigContext.Provider>\n}\n\nexport function useConfig(): ConfigContextValue {\n const context = useContext(ConfigContext)\n if (!context) {\n throw new Error(\"useConfig must be used within ConfigProvider\")\n }\n return context\n}\n\nexport {\n preferences,\n uiState,\n serverSettings,\n recentFolders,\n opencodeBinaries,\n themePreference,\n setThemePreference,\n colorSchemePreference,\n customColorSchemePreference,\n colorSchemePresets,\n activeColorSchemePresetId,\n setColorSchemePreference,\n selectColorSchemePreset,\n saveColorSchemePreset,\n updatePreferences,\n setProviderModelVisibility,\n getProviderModelVisibilityPreference,\n providerModelVisibilitySaveFailed,\n setListeningMode,\n updateEnvironmentVariables,\n addEnvironmentVariable,\n removeEnvironmentVariable,\n isSecureEnvVar,\n toggleSecureEnvVar,\n updateLastUsedBinary,\n updateLogLevel,\n updateSpeechSettings,\n addRecentFolder,\n removeRecentFolder,\n renameRecentFolderProject,\n addOpenCodeBinary,\n removeOpenCodeBinary,\n recordWorkspaceLaunch,\n addRecentModelPreference,\n isFavoriteModelPreference,\n toggleFavoriteModelPreference,\n getModelThinkingSelection,\n setModelThinkingSelection,\n toggleShowThinkingBlocks,\n toggleKeyboardShortcutHints,\n toggleShowTimelineTools,\n toggleUsageMetrics,\n toggleAutoCleanupBlankSessions,\n togglePromptSubmitOnEnter,\n toggleShowPromptVoiceInput,\n setDiffViewMode,\n setToolOutputExpansion,\n setDiagnosticsExpansion,\n setThinkingBlocksExpansion,\n setAgentModelPreference,\n getAgentModelPreference,\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 clamp(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 Math.min(Math.max(min, value), max);\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.substr(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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colors = colors.map((n) => n + n);\n }\n return colors\n ? `rgb${colors.length === 4 ? \"a\" : \"\"}(${colors\n .map((n, index) => {\n return index < 3\n ? parseInt(n, 16)\n : Math.round((parseInt(n, 16) / 255) * 1000) / 1000;\n })\n .join(\", \")})`\n : \"\";\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\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()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n // Idempotent\n if (typeof color !== \"string\") {\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\"].indexOf(type) === -1) {\n throw new Error(\"MUI: Unsupported `%s` color.\\n\" +\n \"The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color(). \" +\n color);\n }\n const valuesInput = color.substring(marker + 1, color.length - 1);\n let values;\n let colorSpace;\n if (type === \"color\") {\n values = valuesInput.split(\" \");\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === \"/\") {\n values[3] = values[3].substr(1);\n }\n if ([\"srgb\", \"display-p3\", \"a98-rgb\", \"prophoto-rgb\", \"rec-2020\"].indexOf(colorSpace) === -1) {\n throw new Error(\"MUI: unsupported `%s` color space.\\n\" +\n \"The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020. \" +\n colorSpace);\n }\n }\n else {\n values = valuesInput.split(\",\");\n }\n return { type, values: values.map((value) => parseFloat(value)), colorSpace };\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'\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 { type, colorSpace } = color;\n const { values } = color;\n let newValues;\n if (type.indexOf(\"rgb\") !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n newValues = values\n .map((n, i) => (i < 3 ? parseInt(n.toString(), 10) : n))\n .join(\",\");\n }\n else if (type.indexOf(\"hsl\") !== -1) {\n newValues = values\n .map((n, i) => (i === 1 || i === 2 ? `${n}%` : n))\n .join(\",\");\n }\n if (type.indexOf(\"color\") !== -1) {\n newValues = `${colorSpace} ${values.join(\" \")}`;\n }\n else {\n newValues = `${values.join(\", \")}`;\n }\n return `${type}(${newValues})`;\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.indexOf(\"#\") === 0) {\n return color;\n }\n const { values } = decomposeColor(color);\n return `#${values\n .map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n))\n .join(\"\")}`;\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 const c = decomposeColor(color);\n const { values } = c;\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 = [\n Math.round(f(0) * 255),\n Math.round(f(8) * 255),\n Math.round(f(4) * 255),\n ];\n if (c.type === \"hsla\") {\n type += \"a\";\n rgb.push(values[3]);\n }\n return recomposeColor({ type, values: rgb });\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 const { type, values } = decomposeColor(color);\n let rgb = type === \"hsl\" ? decomposeColor(hslToRgb(color)).values : values;\n rgb = rgb.map((val) => {\n if (type !== \"color\") {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\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 * 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 * 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 // eslint-disable-next-line prefer-const\n let { type, values } = decomposeColor(color);\n value = clamp(value);\n if (type === \"rgb\" || type === \"hsl\") {\n type += \"a\";\n }\n if (type === \"color\") {\n values[3] = `/${value}`;\n }\n else {\n values[3] = value;\n }\n return recomposeColor({ type, values });\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(inputColor, coefficient) {\n const color = decomposeColor(inputColor);\n coefficient = clamp(coefficient);\n if (color.type.indexOf(\"hsl\") !== -1) {\n color.values[2] *= 1 - coefficient;\n }\n else if (color.type.indexOf(\"rgb\") !== -1 ||\n color.type.indexOf(\"color\") !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\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(inputColor, coefficient) {\n const color = decomposeColor(inputColor);\n coefficient = clamp(coefficient);\n if (color.type.indexOf(\"hsl\") !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n }\n else if (color.type.indexOf(\"rgb\") !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n }\n else if (color.type.indexOf(\"color\") !== -1) {\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}\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\n ? darken(color, coefficient)\n : lighten(color, coefficient);\n}\n","// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0, // phone\n sm: 600, // tablets\n md: 900, // small laptop\n lg: 1200, // desktop\n xl: 1536, // large screens\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints;\n return propValue.reduce((acc, item, index) => {\n acc = {\n ...acc,\n ...themeBreakpoints.up(themeBreakpoints.keys[index], styleFromPropValue(propValue[index])),\n };\n return acc;\n }, {});\n }\n if (typeof propValue === \"object\") {\n const themeBreakpoints = theme.breakpoints;\n const keys = Object.keys(propValue);\n return keys.reduce((acc, breakpoint) => {\n // key is breakpoint\n if (Object.keys(themeBreakpoints.values || values).indexOf(breakpoint) !==\n -1) {\n acc = {\n ...acc,\n ...themeBreakpoints.up(breakpoint, styleFromPropValue(propValue[breakpoint], breakpoint)),\n };\n }\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}\nexport function getOffset(val) {\n const parse = parseFloat(val.toString());\n return `${parse}${String(val).replace(String(parse), \"\") || \"px\"}`;\n}\nexport function computeBreakpointsBase(values, breakpoints) {\n const base = {};\n // fixed value\n if (typeof values !== \"object\") {\n return base;\n }\n const breakpointsKeys = Object.keys(breakpoints);\n if (Array.isArray(values)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < values.length) {\n base[breakpoint] = true;\n }\n });\n }\n else {\n breakpointsKeys.forEach((breakpoint) => {\n if (values[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues(data) {\n const values = data.values;\n const base = data.base ||\n computeBreakpointsBase(values, data.breakpoints || {});\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return data.values;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(values)) {\n acc[breakpoint] =\n values[i] != null ? values[i] : values[previous];\n previous = i;\n }\n else if (typeof values === \"number\") {\n acc[breakpoint] = values;\n }\n else {\n acc[breakpoint] =\n values[breakpoint] != null\n ? values[breakpoint]\n : values[previous];\n previous = breakpoint;\n }\n return acc;\n }, {});\n}\n","import { createContext } from \"solid-js\";\nexport const defaultStyledEngineContextValue = {\n cleanupStyles: true,\n};\nconst StyledEngineContext = createContext(defaultStyledEngineContextValue);\nexport default StyledEngineContext;\n","const common = {\n black: \"#000\",\n white: \"#fff\",\n};\nexport default common;\n","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;\n","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;\n","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;\n","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;\n","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;\n","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;\n","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;\n","export function isPlainObject(item) {\n return (item !== null && typeof item === \"object\" && item.constructor === Object);\n}\nfunction sortKeys(object, keys) {\n for (const key of keys) {\n const value = object[key];\n delete object[key];\n object[key] = value;\n }\n}\nexport default function deepmerge(target, source, options = { clone: true }) {\n const output = options.clone ? { ...target } : target;\n const sourceKeys = options.sortKeys ? [] : undefined;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach((key) => {\n // Avoid prototype pollution\n if (key === \"__proto__\") {\n return;\n }\n if (sourceKeys)\n sourceKeys.push(key);\n let sourceValue;\n let targetValue;\n if (isPlainObject((sourceValue = source[key])) &&\n key in target &&\n isPlainObject((targetValue = 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(targetValue, sourceValue, options);\n }\n else if (sourceValue !== undefined) {\n output[key] = sourceValue;\n }\n });\n if (sourceKeys)\n sortKeys(output, sourceKeys);\n }\n return output;\n}\n","import { isPlainObject } from \"./deepmerge\";\nexport default function cloneObject(target) {\n if (Array.isArray(target)) {\n const output = [];\n for (const value of target) {\n output.push(cloneObject(value));\n }\n return output;\n }\n else if (isPlainObject(target)) {\n const output = {};\n for (const key in target) {\n if (key === \"__proto__\") {\n continue;\n }\n output[key] = cloneObject(target[key]);\n }\n return output;\n }\n else {\n return target;\n }\n}\n","import cloneObject from \"./cloneObject\";\nimport deepmerge from \"./deepmerge\";\nexport default function merge(target, ...sources) {\n for (const source of sources)\n deepmerge(target, cloneObject(source), {\n clone: false,\n });\n return target;\n}\n","import { common, green, lightBlue, orange, red, blue, purple, grey, } from \"../colors\";\nimport { darken, getContrastRatio, lighten, } from \"@suid/system/colorManipulator\";\nimport merge from \"@suid/utils/merge\";\nexport const useLightOptions = () => ({\n text: {\n primary: \"rgba(0, 0, 0, 0.87)\",\n secondary: \"rgba(0, 0, 0, 0.6)\",\n disabled: \"rgba(0, 0, 0, 0.38)\",\n },\n divider: \"rgba(0, 0, 0, 0.12)\",\n background: {\n paper: common.white,\n default: common.white,\n },\n action: {\n active: \"rgba(0, 0, 0, 0.54)\",\n hover: \"rgba(0, 0, 0, 0.04)\",\n hoverOpacity: 0.04,\n selected: \"rgba(0, 0, 0, 0.08)\",\n selectedOpacity: 0.08,\n disabled: \"rgba(0, 0, 0, 0.26)\",\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});\nexport const lightColors = {\n primary: {\n main: blue[700],\n light: blue[400],\n dark: blue[800],\n },\n secondary: {\n main: purple[500],\n light: purple[300],\n dark: purple[700],\n },\n error: {\n main: red[700],\n light: red[400],\n dark: red[800],\n },\n info: {\n main: lightBlue[700],\n light: lightBlue[800],\n dark: lightBlue[900],\n },\n success: {\n main: green[800],\n light: green[500],\n dark: green[900],\n },\n warning: {\n main: \"#ED6C02\",\n light: orange[500],\n dark: orange[900],\n },\n};\nexport const useDarkOptions = () => ({\n text: {\n primary: common.white,\n secondary: \"rgba(255, 255, 255, 0.7)\",\n disabled: \"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});\nexport const darkColors = {\n primary: { main: blue[200], light: blue[50], dark: blue[400] },\n secondary: { main: purple[200], light: purple[50], dark: purple[400] },\n error: { main: red[500], light: red[300], dark: red[700] },\n info: { main: lightBlue[400], light: lightBlue[300], dark: lightBlue[700] },\n success: { main: green[400], light: green[300], dark: green[700] },\n warning: { main: orange[400], light: orange[300], dark: orange[700] },\n};\nconst modes = { light: useLightOptions, dark: useDarkOptions };\nfunction getContrastText(background, contrastThreshold) {\n return getContrastRatio(background, common.white) >= contrastThreshold\n ? common.white\n : \"rgba(0, 0, 0, 0.87)\";\n}\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = typeof tonalOffset === \"number\" ? tonalOffset : tonalOffset.light;\n const tonalOffsetDark = typeof tonalOffset === \"number\" ? tonalOffset * 1.5 : tonalOffset.dark;\n if (!intent[direction]) {\n // eslint-disable-next-line no-prototype-builtins\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n }\n else if (direction === \"light\") {\n intent.light = lighten(intent.main, tonalOffsetLight);\n }\n else if (direction === \"dark\") {\n intent.dark = darken(intent.main, tonalOffsetDark);\n }\n }\n}\nfunction augmentColor(data) {\n const color = { ...data.color };\n const mainShade = data.mainShade ?? 500;\n if (!data.color.main && data.color[mainShade])\n color.main = data.color[mainShade];\n addLightOrDark(color, \"light\", data.lightShade ?? 300, data.tonalOffset);\n addLightOrDark(color, \"dark\", data.darkShade ?? 700, data.tonalOffset);\n if (!color.contrastText)\n color.contrastText = getContrastText(color.main, data.contrastThreshold);\n return color;\n}\nexport const usePalleteDefaults = () => createPaletteOptions({\n mode: \"light\",\n tonalOffset: 0.2,\n contrastThreshold: 3,\n grey,\n common,\n});\nexport function createPaletteOptions(data) {\n return data;\n}\nexport function createPalette(options) {\n const colorNames = [\n \"error\",\n \"info\",\n \"primary\",\n \"secondary\",\n \"success\",\n \"warning\",\n ];\n const palleteDefaults = usePalleteDefaults();\n const result = {\n ...merge({}, palleteDefaults, modes[options?.mode ?? palleteDefaults.mode](), options),\n isColorName(name) {\n return colorNames.includes(name);\n },\n getColorObject(color) {\n return result[color];\n },\n getColor(color) {\n return result.mode === \"light\" ? result[color].light : result[color].dark;\n },\n augmentColor(data) {\n return augmentColor({\n ...data,\n tonalOffset: result.tonalOffset,\n contrastThreshold: result.contrastThreshold,\n });\n },\n getContrastText(background) {\n return getContrastText(background, result.contrastThreshold);\n },\n };\n const getDefaultColor = (color) => result.mode === \"light\" ? lightColors[color] : darkColors[color];\n result.primary = result.augmentColor({\n color: result.primary || getDefaultColor(\"primary\"),\n });\n result.secondary = result.augmentColor({\n color: result.secondary || getDefaultColor(\"secondary\"),\n mainShade: \"A400\",\n lightShade: \"A200\",\n darkShade: \"A700\",\n });\n result.error = result.augmentColor({\n color: result.error || getDefaultColor(\"error\"),\n });\n result.warning = result.augmentColor({\n color: result.warning || getDefaultColor(\"warning\"),\n });\n result.info = result.augmentColor({\n color: result.info || getDefaultColor(\"info\"),\n });\n result.success = result.augmentColor({\n color: result.success || getDefaultColor(\"success\"),\n });\n return result;\n}\n","import merge from \"@suid/utils/merge\";\nexport const componentsDefault = createComponentsOptions({});\nexport function createComponentsOptions(options) {\n return options;\n}\nexport function createComponents(data) {\n const result = {\n ...merge({}, componentsDefault, data ?? {}),\n };\n return result;\n}\n","export default function createMixins(breakpoints, \n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nspacing = undefined, mixins = {}) {\n return {\n toolbar: {\n minHeight: 56,\n [`${breakpoints.up(\"xs\")} and (orientation: landscape)`]: {\n minHeight: 48,\n },\n [breakpoints.up(\"sm\")]: {\n minHeight: 64,\n },\n },\n ...mixins,\n };\n}\n","const cache = {};\nconst shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createCssShadow(...px) {\n return [\n `${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`,\n `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`,\n `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`,\n ].join(\",\");\n}\nconst shadows = [\n () => \"none\",\n () => createCssShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0),\n () => createCssShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0),\n () => createCssShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0),\n () => createCssShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0),\n () => createCssShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0),\n () => createCssShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0),\n () => createCssShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1),\n () => createCssShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2),\n () => createCssShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2),\n () => createCssShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3),\n () => createCssShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3),\n () => createCssShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4),\n () => createCssShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4),\n () => createCssShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4),\n () => createCssShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5),\n () => createCssShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5),\n () => createCssShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5),\n () => createCssShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6),\n () => createCssShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6),\n () => createCssShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7),\n () => createCssShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7),\n () => createCssShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7),\n () => createCssShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8),\n () => createCssShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8),\n];\nexport function createShadows() {\n return new Proxy([], {\n get: (target, p) => {\n if (typeof p !== \"string\" || isNaN(Number(p)))\n return target[p];\n if (p in cache)\n return cache[p];\n return (cache[p] = shadows[p]());\n },\n });\n}\n","export const easing = {\n easeInOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n easeOut: \"cubic-bezier(0.0, 0, 0.2, 1)\",\n easeIn: \"cubic-bezier(0.4, 0, 1, 1)\",\n sharp: \"cubic-bezier(0.4, 0, 0.6, 1)\",\n};\nexport const duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n standard: 300,\n complex: 375,\n enteringScreen: 225,\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 return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\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 { duration: durationOption = mergedDuration.standard, easing: easingOption = mergedEasing.easeInOut, delay = 0, ...other } = options;\n if (process.env.NODE_ENV !== \"production\") {\n const isString = (value) => typeof value === \"string\";\n // IE11 support, replace with Number.isNaN\n const isNumber = (value) => !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 (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])\n .map((animatedProp) => `${animatedProp} ${typeof durationOption === \"string\"\n ? durationOption\n : formatMs(durationOption)} ${easingOption} ${typeof delay === \"string\" ? delay : formatMs(delay)}`)\n .join(\",\");\n };\n return {\n getAutoHeightDuration,\n create,\n ...inputTransitions,\n easing: mergedEasing,\n duration: mergedDuration,\n };\n}\n","import merge from \"@suid/utils/merge\";\nconst fontWeight = {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n};\nexport const typographyDefaults = createTypographyOptions({\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontSize: 14,\n htmlFontSize: 16,\n h1: {},\n h2: {},\n h3: {},\n h4: {},\n h5: {},\n h6: {},\n subtitle1: {},\n subtitle2: {},\n body1: {},\n body2: {},\n button: {},\n caption: {},\n overline: {},\n fontWeightLight: 300,\n fontWeightRegular: 400,\n fontWeightMedium: 500,\n fontWeightBold: 700,\n});\nexport function createTypographyOptions(options) {\n return options;\n}\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nexport function makeVariant(base, fontWeight, size, lineHeight, letterSpacing, casing) {\n return {\n fontFamily: base.fontFamily,\n fontWeight,\n fontSize: base.pxToRem(size),\n lineHeight: `${lineHeight}`,\n letterSpacing: `${round(letterSpacing / size)}em`,\n ...(casing ? { textTransform: \"uppercase\" } : {}),\n };\n}\nexport function createTypography(options = {}) {\n const base = {\n fontFamily: options.fontFamily ?? typographyDefaults.fontFamily,\n fontSize: options.fontSize ?? typographyDefaults.fontSize,\n htmlFontSize: options?.htmlFontSize ?? typographyDefaults.htmlFontSize,\n pxToRem: (size) => {\n const coef = base.fontSize / 14;\n return `${(size / base.htmlFontSize) * coef}rem`;\n },\n };\n return merge(typographyDefaults, base, {\n h1: makeVariant(base, fontWeight.light, 96, 1.167, -1.5),\n h2: makeVariant(base, fontWeight.light, 60, 1.2, -0.5),\n h3: makeVariant(base, fontWeight.regular, 48, 1.167, 0),\n h4: makeVariant(base, fontWeight.regular, 34, 1.235, 0.25),\n h5: makeVariant(base, fontWeight.regular, 24, 1.334, 0),\n h6: makeVariant(base, fontWeight.medium, 20, 1.6, 0.15),\n subtitle1: makeVariant(base, fontWeight.regular, 16, 1.75, 0.15),\n subtitle2: makeVariant(base, fontWeight.medium, 14, 1.57, 0.1),\n body1: makeVariant(base, fontWeight.regular, 16, 1.5, 0.15),\n body2: makeVariant(base, fontWeight.regular, 14, 1.43, 0.15),\n button: makeVariant(base, fontWeight.medium, 14, 1.75, 0.4, true),\n caption: makeVariant(base, fontWeight.regular, 12, 1.66, 0.4),\n overline: makeVariant(base, fontWeight.regular, 12, 2.66, 1, true),\n }, options);\n}\n","import merge from \"@suid/utils/merge\";\nexport const zIndexDefaults = createZIndexOptions({\n mobileStepper: 1000,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500,\n});\nexport function createZIndexOptions(data) {\n return data;\n}\nexport function createZIndex(data) {\n const result = {\n ...merge({}, zIndexDefaults, data),\n };\n return result;\n}\n","function renderMediaQuery(comparator, width, units = \"px\") {\n let selector;\n if (comparator === \"up\") {\n selector = `(min-width:${width}${units})`;\n }\n else if (comparator === \"down\") {\n selector = `(max-width:${width}${units})`;\n }\n else if (comparator === \"between\") {\n const [maxW, minW] = width;\n selector = `(max-width:${maxW}${units}) and (min-width:${minW}${units})`;\n }\n else {\n throw new Error(`Invalid comparator: ${comparator}`);\n }\n return `@media ${selector}`;\n}\nexport default renderMediaQuery;\n","import renderMediaQuery from \"@suid/css/renderMediaQuery\";\nexport const breakpointsDefault = createBreakpointsOptions({\n columns: 12,\n keys: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n values: {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n unit: \"px\",\n});\nexport function createBreakpointsOptions(options) {\n return options;\n}\nexport function createBreakpoints(options) {\n const result = {\n ...breakpointsDefault,\n ...(options ?? {}),\n up: (value, css) => {\n const key = renderMediaQuery(\"up\", result.resolve(value));\n return (css ? { [key]: css } : key);\n },\n down: (value, css) => {\n const key = renderMediaQuery(\"down\", result.resolve(value));\n return (css ? { [key]: css } : key);\n },\n between: (value, css) => {\n const key = renderMediaQuery(\"between\", [\n result.resolve(value[0]),\n result.resolve(value[1]),\n ]);\n return (css ? { [key]: css } : key);\n },\n resolve: (value) => typeof value === \"number\" ? value : result.values[value],\n };\n return result;\n}\nexport default createBreakpoints;\n","export function createSpacing(options) {\n if (typeof options === \"function\")\n return options;\n const resolved = (...values) => {\n return values\n .map((v) => typeof v === \"number\" ? `${v * (options ?? 8)}px` : v)\n .join(\" \");\n };\n return resolved;\n}\nexport default createSpacing;\n","import merge from \"@suid/utils/merge\";\nexport const shapeDefaults = createShapeOptions({\n borderRadius: 4,\n});\nexport function createShapeOptions(data) {\n return data;\n}\nexport function createShape(options) {\n const result = {\n ...merge({}, shapeDefaults, options),\n };\n return result;\n}\nexport default createShape;\n","import { createComponents, } from \"./createComponents\";\nimport createMixins from \"./createMixins\";\nimport { createPalette } from \"./createPalette\";\nimport { createShadows } from \"./createShadows\";\nimport createTransitions from \"./createTransitions\";\nimport { createTypography, } from \"./createTypography\";\nimport { createZIndex } from \"./createZIndex\";\nimport createBreakpoints from \"@suid/system/createTheme/createBreakpoints\";\nimport createSpacing from \"@suid/system/createTheme/createSpacing\";\nimport createShape from \"@suid/system/createTheme/shape\";\nexport function createThemeOptions(options) {\n return options;\n}\nexport function createTheme(input = {}) {\n const theme = {\n direction: \"ltr\",\n ...input,\n };\n function def(key, defaults) {\n const inputValue = input[key];\n Object.defineProperty(theme, key, {\n configurable: true,\n enumerable: true,\n ...(typeof inputValue === \"function\"\n ? {\n get: inputValue,\n }\n : {\n value: defaults({ [key]: inputValue }),\n }),\n });\n }\n def(\"breakpoints\", (input) => createBreakpoints(input.breakpoints));\n def(\"components\", (input) => createComponents(input.components));\n def(\"palette\", (input) => createPalette(input.palette));\n def(\"shape\", (input) => createShape(input.shape));\n def(\"spacing\", (input) => createSpacing(input.spacing));\n def(\"typography\", (input) => createTypography(input.typography));\n def(\"shadows\", () => createShadows());\n def(\"transitions\", () => createTransitions({}));\n def(\"zIndex\", (input) => createZIndex(input.zIndex));\n def(\"mixins\", () => createMixins(theme.breakpoints));\n return theme;\n}\nexport default createTheme;\n","function makeGetDefaultTheme(createTheme) {\n let defaultTheme;\n return function getDefaultTheme() {\n if (!defaultTheme) {\n defaultTheme = createTheme();\n }\n return defaultTheme;\n };\n}\nexport default makeGetDefaultTheme;\n","import createTheme from \"./createTheme\";\nimport makeGetDefaultTheme from \"@suid/system/makeGetDefaultTheme\";\nexport default makeGetDefaultTheme(createTheme);\n","import { createContext } from \"solid-js\";\nlet ThemeContext;\nif (process.env.NODE_ENV !== \"production\") {\n const global = globalThis;\n const suid = global.__suid || (global.__suid = {});\n ThemeContext =\n suid.systemThemeContext || (suid.systemThemeContext = createContext({}));\n}\nelse {\n ThemeContext = createContext({});\n}\nexport default ThemeContext;\n","import { createBreakpoints, } from \"./createBreakpoints\";\nimport { createSpacing } from \"./createSpacing\";\nimport { createShape } from \"./shape\";\nexport function createThemeOptions(options) {\n return options;\n}\nexport function createTheme(data) {\n const result = {\n direction: \"ltr\",\n shadows: undefined,\n transitions: undefined,\n components: undefined,\n palette: undefined,\n typography: undefined,\n zIndex: undefined,\n mixins: undefined,\n ...data,\n breakpoints: createBreakpoints(data?.breakpoints),\n shape: createShape(data?.shape),\n spacing: createSpacing(data?.spacing),\n };\n return result;\n}\nexport default createTheme;\n","import createTheme from \"./createTheme\";\nimport makeGetDefaultTheme from \"./makeGetDefaultTheme\";\nexport default makeGetDefaultTheme(createTheme);\n","export default function isEmptyObject(object) {\n for (const _key in object)\n return false;\n return true;\n}\n","import ThemeContext from \"./ThemeContext\";\nimport getDefaultTheme from \"./getDefaultTheme\";\nimport isEmptyObject from \"@suid/utils/isEmptyObject\";\nimport { useContext } from \"solid-js\";\nfunction useTheme(defaultTheme = getDefaultTheme, Context = ThemeContext) {\n const theme = useContext(Context);\n if (typeof theme === \"function\") {\n return new Proxy({}, { get: (_, p) => theme()[p] });\n }\n else if (isEmptyObject(theme) && defaultTheme) {\n if (typeof defaultTheme === \"function\")\n return defaultTheme();\n return defaultTheme;\n }\n else if (!theme) {\n throw new Error(\"Theme is not defined\");\n }\n return theme;\n}\nexport default useTheme;\n","import getDefaultTheme from \"./getDefaultTheme\";\nimport ThemeContext from \"@suid/system/ThemeContext\";\nimport useSysTheme from \"@suid/system/useTheme\";\nfunction useTheme(defaultTheme = getDefaultTheme) {\n return useSysTheme(defaultTheme, ThemeContext);\n}\nexport default useTheme;\n","import ThemeContext from \"@suid/system/ThemeContext\";\nimport useSysTheme from \"@suid/system/useTheme\";\nfunction useTheme(defaultTheme) {\n return useSysTheme(defaultTheme, ThemeContext);\n}\nexport default useTheme;\n","import useTheme from \"./useTheme\";\nimport { mergeProps } from \"solid-js\";\nexport default function useThemeProps(options) {\n const props = [];\n const propDefaults = typeof options.propDefaults === \"function\"\n ? options.propDefaults({\n set: (v) => v,\n inProps: options.props,\n })\n : options.propDefaults;\n const theme = useTheme();\n const themeProps = theme.components?.[options.name]?.defaultProps;\n if (propDefaults)\n props.push(propDefaults);\n if (themeProps)\n props.push(themeProps);\n if (!props.length)\n return options.props;\n return mergeProps(...[...props, options.props]);\n}\n","import ThemeContext from \"@suid/system/ThemeContext\";\nfunction ThemeProvider(props) {\n return (<ThemeContext.Provider value={props.theme}>\n {props.children}\n </ThemeContext.Provider>);\n}\nexport default ThemeProvider;\n","/* eslint-disable no-case-declarations */\nimport { $DEVCOMP, createMemo, splitProps, sharedConfig, untrack, } from \"solid-js\";\nimport { isServer, spread, ssrElement } from \"solid-js/web\";\nimport * as web from \"solid-js/web\";\nfunction createElement(tagName, isSVG = false) {\n return isSVG\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", tagName)\n : document.createElement(tagName);\n}\n// https://github.com/solidjs/solid/blob/cafc51f6fc2e3ddf24b40cae00b77cf879051c9e/packages/solid/web/server/index.ts#L25\nfunction createServerDynamicComponent(component, props) {\n const comp = component(), t = typeof comp;\n if (comp) {\n if (t === \"function\")\n return comp(props);\n else if (t === \"string\") {\n return ssrElement(comp, props, undefined, true);\n }\n }\n}\nexport function createStaticComponent(component, props) {\n const isDev = \"_DX_DEV_\";\n switch (typeof component) {\n case \"function\":\n if (isDev)\n Object.assign(component, { [$DEVCOMP]: true });\n return untrack(() => component(props));\n case \"string\":\n const isSvg = web.SVGElements.has(component);\n const el = sharedConfig.context\n ? web.getNextElement()\n : createElement(component, isSvg);\n spread(el, props, isSvg);\n return el;\n }\n}\nexport function createDynamicComponent(component, props) {\n if (isServer)\n return createServerDynamicComponent(component, props);\n const cached = createMemo(component);\n return createMemo(() => createStaticComponent(cached(), props));\n}\n// https://github.com/solidjs/solid/blob/12c0dbbbf9f9fdf798c6682e57aee8ea763cf1ba/packages/solid/web/src/index.ts#L114\nexport function Dynamic(props) {\n const [p, others] = splitProps(props, [\"$component\"]);\n if (isServer)\n return createServerDynamicComponent(() => p.$component, others);\n return createDynamicComponent(() => p.$component, others);\n}\nexport default Dynamic;\n","import deepmerge from \"@suid/utils/deepmerge\";\nfunction mergeStyleProps(values) {\n const result = values.reduce((result, value) => {\n if (\"name\" in value)\n result[`--${value.name}`] = \"0\";\n deepmerge(result, value, {\n clone: false,\n sortKeys: true,\n });\n return result;\n }, {});\n delete result.name;\n return result;\n}\nexport default mergeStyleProps;\n","export function isVar(value) {\n return value.startsWith(\"--\");\n}\nexport function isPrivateVar(value) {\n return value.startsWith(\"__\");\n}\nexport function isSelector(value) {\n return /[^a-z-]/i.test(value) && !isVar(value);\n}\nexport function isGlobalSelector(value) {\n return value.startsWith(\"@global\");\n}\nexport function isMediaQuery(value) {\n return value.startsWith(\"@media\");\n}\nexport function isKeyframes(value) {\n return value.startsWith(\"@keyframes\");\n}\n","export function snakeCase(value) {\n return value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\nexport function randomString() {\n return Math.random().toString(36).substring(2, 15).slice(0, 8);\n}\n","import { isGlobalSelector, isKeyframes, isMediaQuery, isSelector, isVar, isPrivateVar, } from \"./assert\";\nimport { snakeCase } from \"./utils/string\";\nfunction renderSelector(propKey, propValue, selectors = [], options = {}) {\n const subselectors = propKey.split(\",\").map((v) => {\n v = v.trim();\n return v.includes(\"&\") ? v : `& ${v}`;\n });\n return render(propValue, (selectors.length ? selectors : [\"\"]).flatMap((selector) => subselectors.map((v) => v.replace(/&/g, selector).trim())), {\n ...options,\n });\n}\nfunction snakeCaseWithCache(name, cache) {\n if (!cache)\n return snakeCase(name);\n let result = cache.get(name);\n if (result)\n return result;\n cache.set(name, (result = snakeCase(name)));\n return result;\n}\nfunction render(css, selectors = [], options = {}) {\n const props = [];\n const rules = [];\n for (let propKey in css) {\n const propValue = css[propKey];\n if (isPrivateVar(propKey)) {\n continue;\n }\n else if (isGlobalSelector(propKey)) {\n for (const selector in propValue) {\n rules.push(...renderSelector(selector, propValue[selector], [], options));\n }\n }\n else if (isMediaQuery(propKey)) {\n rules.push(...render(propValue, selectors, {\n ...options,\n sublevel: true,\n }).map((v) => `${propKey} {\\n${v}\\n}`));\n }\n else if (isVar(propKey)) {\n if (propValue !== undefined && propValue !== null)\n props.push(`${propKey}: ${propValue};`);\n }\n else if (isKeyframes(propKey)) {\n const keyframes = [];\n for (const k in propValue) {\n keyframes.push(...render(propValue[k], [/^\\d+$/.test(k) ? `${k}%` : k], {\n ...options,\n sublevel: true,\n }));\n }\n rules.push(`${propKey} {\\n${keyframes.join(\"\\n\")}\\n}`);\n }\n else if (isSelector(propKey)) {\n rules.push(...renderSelector(propKey, propValue, selectors, options));\n }\n else if (options.extraProperties && propKey in options.extraProperties) {\n const extraProps = options.extraProperties[propKey](propValue);\n for (const extraPropKey in extraProps) {\n const inValue = extraProps[extraPropKey];\n const value = options.onPropertyValue\n ? options.onPropertyValue(extraPropKey, inValue)\n : inValue;\n if (value !== undefined && value !== null)\n props.push(`${snakeCaseWithCache(extraPropKey, options.propertyNameCache)}: ${value};`);\n }\n }\n else {\n propKey = snakeCaseWithCache(propKey, options.propertyNameCache);\n const value = options.onPropertyValue\n ? options.onPropertyValue(propKey, propValue)\n : propValue;\n if (value !== undefined && value !== null)\n props.push(`${propKey}: ${value};`);\n }\n }\n const renderProps = (level) => {\n const pad = \"\\t\".repeat(level);\n return `${pad}${props.join(`\\n${pad}`)}`;\n };\n if (selectors.length) {\n const pad = options.sublevel ? `\\t` : ``;\n const selectorStr = pad + selectors.join(`,\\n${pad}`);\n return [\n ...(props.length\n ? [\n `${selectorStr} {\\n${renderProps(options.sublevel ? 2 : 1)}\\n${pad}}`,\n ]\n : []),\n ...rules,\n ];\n }\n else {\n return [...(props.length ? [renderProps(0)] : []), ...rules];\n }\n}\nexport default render;\n","export function toArray(value) {\n return value ? (Array.isArray(value) ? value : [value]) : [];\n}\n","export function resolveFunction(value) {\n if (typeof value === \"function\")\n value = value();\n return value;\n}\n","import render from \"./render\";\nimport { toArray } from \"./utils/array\";\nimport { resolveFunction } from \"./utils/function\";\nexport class StyleCache {\n ids = new Map();\n rules = new Map();\n propertyNames = new Map();\n create(name, rules, componentId) {\n let styleObject = this.rules.get(rules);\n if (styleObject)\n return styleObject;\n let componentIndex = this.ids.get(componentId);\n // Same component (createUniqueId) but different rules\n if (typeof componentIndex === \"number\") {\n // Use a new id for the new rule\n this.ids.set(componentId, ++componentIndex);\n componentId += `_${componentIndex}`;\n }\n styleObject = create(name, rules, componentId);\n this.save(styleObject, rules);\n return styleObject;\n }\n save(style, rules) {\n this.ids.set(style.id, 0);\n this.rules.set(rules, style);\n }\n delete(style) {\n this.ids.delete(style.id);\n this.rules.delete(style.rules);\n }\n}\nfunction create(name, rules, id) {\n return {\n id,\n name,\n className: `${name}-${id}`,\n rules: rules.replaceAll(`$id`, `${id}`),\n };\n}\nfunction createStyleObject(options) {\n const className = `${options.name}-$id`;\n const propsValues = toArray(resolveFunction(options.props));\n const propertyNameCache = options.cache?.propertyNames;\n const rules = propsValues\n .map((v) => typeof v === \"string\"\n ? `.${className} {\\n${v}\\n}`\n : render(v, [`.${className}`], {\n extraProperties: options.extraProperties,\n propertyNameCache,\n }).join(\"\\n\"))\n .join(\"\\n\");\n return (options.cache?.create(options.name, rules, options.componentId) ||\n create(options.name, rules, options.componentId));\n}\nexport default createStyleObject;\n","function setStyleElementText(element, text) {\n if (\"styleSheet\" in element) {\n element[\"styleSheet\"].cssText = text;\n }\n else {\n element.innerText = \"\";\n element.appendChild(document.createTextNode(text));\n }\n}\nexport default setStyleElementText;\n","import setStyleElementText from \"./setStyleElementText\";\nfunction setAttributes(element, attributes) {\n for (const name in attributes) {\n const value = attributes[name];\n if (value !== undefined) {\n if (value === null) {\n element.removeAttribute(name);\n }\n else {\n element.setAttribute(name, value);\n }\n }\n }\n}\nfunction createStyleElement(css, attributes) {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n if (attributes)\n setAttributes(element, attributes);\n setStyleElementText(element, css);\n return element;\n}\nexport default createStyleElement;\n","function registerStyleElementUsage(style) {\n let uses = Number(style.getAttribute(\"data-uses\"));\n uses++;\n style.setAttribute(\"data-uses\", uses.toString());\n}\nexport default registerStyleElementUsage;\n","import createStyleElement from \"./createStyleElement\";\nimport registerStyleElementUsage from \"./registerStyleElementUsage\";\nimport setStyleElementText from \"./setStyleElementText\";\nconst placeholderId = \"suid-injectFirst\";\nfunction appendStyleElement(css, attributes, injectFirst) {\n if (Array.isArray(css))\n css = css.join(\"\\n\");\n const id = attributes?.[\"id\"];\n const head = document.head || document.getElementsByTagName(\"head\")[0];\n const prevElement = id && document.getElementById(id);\n if (prevElement && prevElement instanceof HTMLStyleElement) {\n setStyleElementText(prevElement, css);\n registerStyleElementUsage(prevElement);\n return prevElement;\n }\n else {\n if (prevElement)\n prevElement.remove();\n const element = createStyleElement(css, attributes);\n registerStyleElementUsage(element);\n if (injectFirst) {\n let placeholderElement = head.querySelector(`#${placeholderId}`);\n if (!placeholderElement) {\n placeholderElement = document.createElement(\"style\");\n placeholderElement.setAttribute(\"id\", placeholderId);\n head.prepend(placeholderElement);\n }\n head.insertBefore(element, placeholderElement);\n }\n else {\n head.appendChild(element);\n }\n return element;\n }\n}\nexport default appendStyleElement;\n","function findStyleElement(input, classPrefix = \"css-\") {\n if (typeof input === \"string\")\n return document.getElementById(input);\n const className = [...input.classList].find((name) => name.startsWith(classPrefix));\n if (className)\n return document.getElementById(className.slice(classPrefix.length));\n}\nexport default findStyleElement;\n","function unregisterStyleElementUsage(style, remove = true) {\n let uses = Number(style.getAttribute(\"data-uses\"));\n uses--;\n if (uses <= 0) {\n if (remove) {\n style.remove();\n }\n else {\n style.setAttribute(\"data-uses\", \"0\");\n }\n }\n else {\n style.setAttribute(\"data-uses\", uses.toString());\n }\n}\nexport default unregisterStyleElementUsage;\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(\"MUI: `capitalize(string)` expects a string argument.\");\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n let timeout;\n function debounced(...args) {\n const later = () => {\n // eslint-disable-next-line prefer-spread\n func.apply(null, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n return debounced;\n}\n","// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18\nexport default function getScrollbarSize(doc) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = doc.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n}\n","export default function ownerDocument(node) {\n return (node && node.ownerDocument) || document;\n}\n","import ownerDocument from \"./ownerDocument\";\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}\n","export default function randomString() {\n return Math.random().toString(36).substring(2, 15).slice(0, 8);\n}\n","import { createSignal } from \"solid-js\";\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nlet hadFocusVisibleRecentlyTimeout;\nconst inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n \"datetime-local\": true,\n};\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n const { type, tagName } = node;\n if (tagName === \"INPUT\" &&\n inputTypesWhitelist[type] &&\n !node.readOnly) {\n return true;\n }\n if (tagName === \"TEXTAREA\" && !node.readOnly) {\n return true;\n }\n if (node.isContentEditable) {\n return true;\n }\n return false;\n}\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n hadKeyboardEvent = true;\n}\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n if (this.visibilityState === \"hidden\") {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\nfunction prepare(doc) {\n doc.addEventListener(\"keydown\", handleKeyDown, true);\n doc.addEventListener(\"mousedown\", handlePointerDown, true);\n doc.addEventListener(\"pointerdown\", handlePointerDown, true);\n doc.addEventListener(\"touchstart\", handlePointerDown, true);\n doc.addEventListener(\"visibilitychange\", handleVisibilityChange, true);\n}\nexport function teardown(doc) {\n doc.removeEventListener(\"keydown\", handleKeyDown, true);\n doc.removeEventListener(\"mousedown\", handlePointerDown, true);\n doc.removeEventListener(\"pointerdown\", handlePointerDown, true);\n doc.removeEventListener(\"touchstart\", handlePointerDown, true);\n doc.removeEventListener(\"visibilitychange\", handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n const { target } = event;\n try {\n return target.matches(\":focus-visible\");\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (error) {\n // Browsers not implementing :focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n }\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nexport default function useIsFocusVisible() {\n const ref = (node) => {\n if (node != null) {\n prepare(node.ownerDocument);\n }\n };\n const [isFocusVisibleRef, setFocusVisibleRef] = createSignal(false);\n /**\n * Should be called if a blur event is fired\n */\n function handleBlurVisible() {\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef()) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(() => {\n hadFocusVisibleRecently = false;\n }, 100);\n setFocusVisibleRef(false);\n return true;\n }\n return false;\n }\n /**\n * Should be called if a blur event is fired\n */\n function handleFocusVisible(event) {\n if (isFocusVisible(event)) {\n setFocusVisibleRef(true);\n return true;\n }\n return false;\n }\n return {\n isFocusVisibleRef: {\n get current() {\n return isFocusVisibleRef();\n },\n },\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref,\n };\n}\n","import StyledEngineContext from \"./StyledEngineProvider/StyledEngineContext\";\nimport mergeStyleProps from \"./mergeStyleProps\";\nimport createStyleObject, { StyleCache, } from \"@suid/css/createStyleObject\";\nimport appendStyleElement from \"@suid/css/dom/appendStyleElement\";\nimport findStyleElement from \"@suid/css/dom/findStyleElement\";\nimport registerStyleElementUsage from \"@suid/css/dom/registerStyleElementUsage\";\nimport unregisterStyleElementUsage from \"@suid/css/dom/unregisterStyleElementUsage\";\nimport { randomString } from \"@suid/utils\";\nimport { createRenderEffect, createSignal, createUniqueId, onCleanup, sharedConfig, useContext, } from \"solid-js\";\nimport { isServer, useAssets } from \"solid-js/web\";\nconst styleCache = isServer ? undefined : new StyleCache();\nfunction normalizeStyleProps(props) {\n if (!props) {\n return [];\n }\n else if (Array.isArray(props)) {\n return props.flat(Infinity).filter((v) => !!v);\n }\n else {\n return [props];\n }\n}\nfunction createStyleId() {\n if (!sharedConfig.context)\n return randomString();\n const id = createUniqueId().replaceAll(\"-\", \"\");\n const chunkSize = 9;\n const chunks = Math.ceil(id.length / chunkSize);\n const ids = [];\n for (let chunk = 1; chunk <= chunks; ++chunk) {\n const index = (chunk - 1) * chunkSize;\n const number = Number(id.slice(index, index + chunkSize));\n ids.push(number.toString(32));\n }\n return ids.join(\"-\");\n}\nfunction createStyle(value) {\n const context = useContext(StyledEngineContext);\n const [name, setName] = createSignal(\"\");\n const componentId = createStyleId();\n let styleElement;\n let isGlobalStyleObject = false;\n createRenderEffect((prevResult) => {\n const propsValue = value();\n let styleObject;\n if (propsValue) {\n const props = mergeStyleProps(normalizeStyleProps(propsValue));\n isGlobalStyleObject = \"@global\" in props;\n styleObject = createStyleObject({\n name: \"css\",\n props,\n cache: styleCache,\n componentId,\n });\n if (isServer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (context.injectFirst)\n console.warn(`SUID: 'injectFirst' is not supported in SSR mode.`);\n }\n useAssets(() => (<style id={styleObject.id} innerHTML={styleObject.rules} nonce={context.cache?.nonce}/>));\n }\n else {\n styleElement = findStyleElement(styleObject.id);\n if (styleElement) {\n registerStyleElementUsage(styleElement);\n }\n else {\n styleElement = appendStyleElement(styleObject.rules, {\n id: styleObject.id,\n nonce: context.cache?.nonce,\n }, context.injectFirst);\n }\n if (prevResult?.styleElement) {\n unregisterStyleElementUsage(prevResult.styleElement);\n }\n }\n }\n if (typeof styleObject?.className === \"string\") {\n setName(styleObject.className);\n }\n else {\n setName(\"\");\n }\n return {\n className: styleObject?.className,\n styleElement,\n };\n }, undefined);\n onCleanup(() => {\n if (styleElement)\n unregisterStyleElementUsage(styleElement, context.cleanupStyles ?? isGlobalStyleObject);\n });\n return name;\n}\nexport default createStyle;\n","import { isGlobalSelector, isKeyframes, isMediaQuery, isSelector, } from \"./assert\";\nfunction resolve(css, onProp, cssTarget = {}) {\n for (const name in css) {\n const value = css[name];\n if (isGlobalSelector(name)) {\n cssTarget[name] = resolve(value, onProp);\n }\n else if (isMediaQuery(name)) {\n cssTarget[name] = resolve(value, onProp);\n }\n else if (isKeyframes(name)) {\n cssTarget[name] = {};\n for (const v in value) {\n cssTarget[name][v] = resolve(value[v], onProp);\n }\n }\n else if (isSelector(name)) {\n cssTarget[name] = resolve(value, onProp);\n }\n else {\n const result = onProp(name, value);\n if (result) {\n for (const key in result) {\n cssTarget[key] = isMediaQuery(key)\n ? { ...cssTarget[key], ...result[key] }\n : result[key];\n }\n }\n else {\n cssTarget[name] = value;\n }\n }\n }\n return cssTarget;\n}\nexport default resolve;\n","import resolve from \"@suid/css/resolve\";\n/**\n * @link https://github.com/emotion-js/emotion/blob/main/packages/unitless/src/index.js\n */\nexport const unitLess = new Set([\n \"animationIterationCount\",\n \"borderImageOutset\",\n \"borderImageSlice\",\n \"borderImageWidth\",\n \"boxFlex\",\n \"boxFlexGroup\",\n \"boxOrdinalGroup\",\n \"columnCount\",\n \"columns\",\n \"flex\",\n \"flexGrow\",\n \"flexPositive\",\n \"flexShrink\",\n \"flexNegative\",\n \"flexOrder\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowSpan\",\n \"gridRowStart\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnSpan\",\n \"gridColumnStart\",\n \"msGridRow\",\n \"msGridRowSpan\",\n \"msGridColumn\",\n \"msGridColumnSpan\",\n \"fontWeight\",\n \"lineHeight\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"tabSize\",\n \"widows\",\n \"zIndex\",\n \"zoom\",\n \"WebkitLineClamp\",\n \"fillOpacity\",\n \"floodOpacity\",\n \"stopOpacity\",\n \"strokeDasharray\",\n \"strokeDashoffset\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeWidth\",\n]);\nexport function resolveStyledPropsValue(name, value) {\n if (typeof value === \"number\") {\n return { [name]: unitLess.has(name) ? value.toString() : `${value}px` };\n }\n}\nfunction resolveStyledProps(v, cssTarget = {}) {\n return resolve(v, resolveStyledPropsValue, cssTarget);\n}\nexport default resolveStyledProps;\n","function getThemeValue(theme, key, value) {\n if (typeof value !== \"string\")\n return value;\n const names = value.split(\".\");\n let ref = theme[key];\n for (let i = 0; i < names.length; i++) {\n ref = ref?.[names[i]];\n if (!ref)\n break;\n }\n return ref ?? value;\n}\nexport default getThemeValue;\n","function getPath(obj, path) {\n if (!path || typeof path !== \"string\") {\n return null;\n }\n return path\n .split(\".\")\n .reduce((acc, item) => (acc && acc[item] ? acc[item] : null), obj);\n}\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n const themeSpacing = getPath(theme, themeKey) || defaultValue;\n if (typeof themeSpacing === \"number\") {\n return (abs) => {\n if (typeof abs === \"string\") {\n return abs;\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof abs !== \"number\") {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${abs}.`);\n }\n }\n return themeSpacing * abs;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return (abs) => {\n if (typeof abs === \"string\") {\n return abs;\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Number.isInteger(abs)) {\n console.error([\n `MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` +\n `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`,\n ].join(\"\\n\"));\n }\n else if (abs > themeSpacing.length - 1) {\n console.error([\n `MUI: The value provided (${abs}) overflows.`,\n `The supported values are: ${JSON.stringify(themeSpacing)}.`,\n `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`,\n ].join(\"\\n\"));\n }\n }\n return themeSpacing[abs];\n };\n }\n if (typeof themeSpacing === \"function\") {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== \"production\") {\n console.error([\n `MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`,\n \"It should be a number, an array or a function.\",\n ].join(\"\\n\"));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, \"spacing.resolve\", 8, \"spacing.resolve\");\n}\n","import getThemeValue from \"./getThemeValue\";\nimport { createUnaryUnit } from \"./spacing\";\nconst dirMap = {\n x: [\"Left\", \"Right\"],\n y: [\"Top\", \"Bottom\"],\n};\nfunction asPx(value) {\n return typeof value === \"number\" ? `${value}px` : value;\n}\nfunction customProp(name, onValue) {\n return (value, theme) => onValue(name, value, theme);\n}\nfunction prop(name, onValue) {\n return onValue\n ? (value, theme) => ({\n [name]: onValue(name, value, theme),\n })\n : (value) => ({ [name]: value });\n}\nfunction pxProp(name) {\n return prop(name, (name, value) => asPx(value));\n}\nfunction mProp(name, suffix, onValue) {\n const names = suffix.map((v) => `${name}${v}`);\n return onValue\n ? (value, theme) => names.reduce((result, name) => {\n result[name] = onValue(name, value, theme);\n return result;\n }, {})\n : (value) => names.reduce((result, name) => {\n result[name] = value;\n return result;\n }, {});\n}\nfunction createSystemProps() {\n return {\n ...createSystemDisplayProps(),\n ...createSystemFlexboxProps(),\n ...createSystemGridProps(),\n ...createSystemPositionProps(),\n ...createSystemPaletteProps(),\n ...createSystemSizingProps(),\n ...createSystemBorderProps(),\n ...createSystemSpacingProps(),\n ...createSystemTypographyProps(),\n };\n}\nexport function createSystemDisplayProps() {\n return {\n displayPrint: customProp(\"displayPrint\", (name, display) => ({\n \"@media print\": {\n display,\n },\n })),\n displayRaw: prop(\"display\"),\n overflow: prop(\"overflow\"),\n textOverflow: prop(\"textOverflow\"),\n visibility: prop(\"visibility\"),\n whiteSpace: prop(\"whiteSpace\"),\n };\n}\nexport function createSystemFlexboxProps() {\n return {\n flexBasis: prop(\"flexBasis\"),\n flexDirection: prop(\"flexDirection\"),\n flexWrap: prop(\"flexWrap\"),\n justifyContent: prop(\"justifyContent\"),\n alignItems: prop(\"alignItems\"),\n alignContent: prop(\"alignContent\"),\n order: prop(\"order\"),\n flex: prop(\"flex\"),\n flexGrow: prop(\"flexGrow\"),\n flexShrink: prop(\"flexShrink\"),\n alignSelf: prop(\"alignSelf\"),\n justifyItems: prop(\"justifyItems\"),\n justifySelf: prop(\"justifySelf\"),\n };\n}\nexport function createSystemGridProps() {\n const spacing = (name, value, theme) => createUnaryUnit(theme, \"spacing\", 8, name)(value);\n return {\n gap: prop(\"gap\", spacing),\n columnGap: prop(\"columnGap\", spacing),\n rowGap: prop(\"rowGap\", spacing),\n gridColumn: prop(\"gridColumn\"),\n gridRow: prop(\"gridRow\"),\n gridAutoFlow: prop(\"gridAutoFlow\"),\n gridAutoColumns: prop(\"gridAutoColumns\"),\n gridAutoRows: prop(\"gridAutoRows\"),\n gridTemplateColumns: prop(\"gridTemplateColumns\"),\n gridTemplateRows: prop(\"gridTemplateRows\"),\n gridTemplateAreas: prop(\"gridTemplateAreas\"),\n gridArea: prop(\"gridArea\"),\n };\n}\nexport function createSystemPositionProps() {\n return {\n position: prop(\"position\"),\n zIndex: prop(\"zIndex\", (name, value, theme) => theme.zIndex?.[name] ?? value),\n top: pxProp(\"top\"),\n right: pxProp(\"right\"),\n bottom: pxProp(\"bottom\"),\n left: pxProp(\"left\"),\n };\n}\nexport function createSystemPaletteProps() {\n const paletteValue = (name, value, theme) => getThemeValue(theme, \"palette\", value);\n return {\n color: prop(\"color\", paletteValue),\n bgcolor: prop(\"backgroundColor\", paletteValue),\n backgroundColor: prop(\"backgroundColor\", paletteValue),\n };\n}\nexport function createSystemSizingProps() {\n const onValue = (name, value, theme) => {\n if (name === \"maxWidth\") {\n value = theme.breakpoints.values[name] ?? value;\n }\n if (typeof value === \"number\") {\n value = value > 0 && value <= 1 ? `${value * 100}%` : `${value}px`;\n }\n return value;\n };\n return {\n width: prop(\"width\", onValue),\n maxWidth: prop(\"maxWidth\", onValue),\n minWidth: prop(\"minWidth\", onValue),\n height: prop(\"height\", onValue),\n maxHeight: prop(\"maxHeight\", onValue),\n minHeight: prop(\"minHeight\", onValue),\n boxSizing: prop(\"boxSizing\", onValue),\n };\n}\nexport function createSystemBorderProps() {\n const borderValue = (name, value) => typeof value === \"number\" ? `${value}px solid` : value;\n const paletteValue = (name, value, theme) => getThemeValue(theme, \"palette\", value);\n return {\n border: prop(\"border\", borderValue),\n borderTop: prop(\"borderTop\", borderValue),\n borderRight: prop(\"borderRight\", borderValue),\n borderBottom: prop(\"borderBottom\", borderValue),\n borderLeft: prop(\"borderLeft\", borderValue),\n borderColor: prop(\"borderColor\", paletteValue),\n borderTopColor: prop(\"borderTopColor\", paletteValue),\n borderRightColor: prop(\"borderRightColor\", paletteValue),\n borderBottomColor: prop(\"borderBottomColor\", paletteValue),\n borderLeftColor: prop(\"borderLeftColor\", paletteValue),\n borderRadius: prop(\"borderRadius\", (name, value, theme) => typeof value === \"number\"\n ? `${theme.shape.borderRadius * value}px`\n : value),\n };\n}\nexport function createSystemTypographyProps() {\n const typographyValue = (name, value, theme) => getThemeValue(theme, \"typography\", value);\n return {\n typography: customProp(\"typography\", (name, value, theme) => getThemeValue(theme, \"typography\", value)),\n fontFamily: prop(\"fontFamily\", typographyValue),\n fontSize: prop(\"fontSize\", (name, value, theme) => asPx(typographyValue(name, value, theme))),\n fontStyle: prop(\"fontStyle\", typographyValue),\n fontWeight: prop(\"fontWeight\", typographyValue),\n letterSpacing: pxProp(\"letterSpacing\"),\n lineHeight: prop(\"lineHeight\"),\n textAlign: prop(\"textAlign\"),\n textTransform: prop(\"textTransform\"),\n };\n}\nexport function createSystemSpacingProps() {\n const spacing = (name, value, theme) => theme.spacing(value);\n const m = \"margin\";\n const p = \"padding\";\n return {\n m: prop(m, spacing),\n mt: prop(\"marginTop\", spacing),\n mr: prop(\"marginRight\", spacing),\n mb: prop(\"marginBottom\", spacing),\n ml: prop(\"marginLeft\", spacing),\n mx: mProp(m, dirMap[\"x\"], spacing),\n my: mProp(m, dirMap[\"y\"], spacing),\n margin: prop(m, spacing),\n marginTop: prop(\"marginTop\", spacing),\n marginRight: prop(\"marginRight\", spacing),\n marginBottom: prop(\"marginBottom\", spacing),\n marginLeft: prop(\"marginLeft\", spacing),\n marginX: mProp(m, dirMap[\"x\"], spacing),\n marginY: mProp(m, dirMap[\"y\"], spacing),\n marginInline: mProp(m, [\"Inline\", \"InlineStart\"], spacing),\n marginInlineStart: prop(\"marginInlineStart\", spacing),\n marginInlineEnd: prop(\"marginInlineEnd\", spacing),\n marginBlock: mProp(m, [\"BlockStart\", \"BlockEnd\"], spacing),\n marginBlockStart: prop(\"marginBlockStart\", spacing),\n marginBlockEnd: prop(\"marginBlockEnd\", spacing),\n p: prop(p, spacing),\n pt: prop(\"paddingTop\", spacing),\n pr: prop(\"paddingRight\", spacing),\n pb: prop(\"paddingBottom\", spacing),\n pl: prop(\"paddingLeft\", spacing),\n px: mProp(p, dirMap[\"x\"], spacing),\n py: mProp(p, dirMap[\"y\"], spacing),\n padding: prop(p, spacing),\n paddingTop: prop(\"paddingTop\", spacing),\n paddingRight: prop(\"paddingRight\", spacing),\n paddingBottom: prop(\"paddingBottom\", spacing),\n paddingLeft: prop(\"paddingLeft\", spacing),\n paddingX: mProp(p, dirMap[\"x\"], spacing),\n paddingY: mProp(p, dirMap[\"y\"], spacing),\n paddingInline: mProp(p, [\"Inline\", \"InlineStart\"], spacing),\n paddingInlineStart: prop(\"paddingInlineStart\", spacing),\n paddingInlineEnd: prop(\"paddingInlineEnd\", spacing),\n paddingBlock: mProp(p, [\"BlockStart\", \"BlockEnd\"], spacing),\n paddingBlockStart: prop(\"paddingBlockStart\", spacing),\n paddingBlockEnd: prop(\"paddingBlockEnd\", spacing),\n };\n}\nexport default createSystemProps;\n","import createSystemProps from \"./createSystemProps\";\nconst systemProps = createSystemProps();\nexport const systemPropNames = Object.keys(systemProps);\nexport default systemProps;\n","import { handleBreakpoints } from \"./breakpoints\";\nimport { resolveStyledPropsValue } from \"./resolveStyledProps\";\nimport systemProps from \"./systemProps\";\nimport resolve from \"@suid/css/resolve\";\nexport function resolveSystemPropsValue(name, value, theme) {\n return systemProps[name](value, theme);\n}\nexport function resolveSxPropsValue(name, value, theme) {\n return name in systemProps\n ? resolveSystemPropsValue(name, value, theme)\n : resolveStyledPropsValue(name, value);\n}\nfunction resolveSxProps(object, theme) {\n return resolve(object, (name, value) => {\n if (typeof value === \"function\") {\n value = value(theme);\n }\n if (value === null || value === undefined) {\n return value;\n }\n else if (typeof value === \"object\") {\n const sortedCss = {};\n for (const key of theme.breakpoints.keys) {\n sortedCss[theme.breakpoints.up(key)] = {};\n }\n return Object.assign(sortedCss, handleBreakpoints({ theme }, value, (v) => resolveSxPropsValue(name, v, theme) ?? { [name]: v }));\n }\n else {\n return resolveSxPropsValue(name, value, theme);\n }\n });\n}\nexport default resolveSxProps;\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;","import { createDynamicComponent } from \"./Dynamic\";\nimport createStyle from \"./createStyle\";\nimport resolveStyledProps from \"./resolveStyledProps\";\nimport resolveSxProps from \"./resolveSxProps\";\nimport useTheme from \"./useTheme\";\nimport { randomString } from \"@suid/utils\";\nimport clsx from \"clsx\";\nimport { createMemo, splitProps, mergeProps } from \"solid-js\";\nexport function redefine(component, \n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n..._types) {\n return component;\n}\nexport const skipProps = [\n \"ownerState\",\n \"theme\",\n \"sx\",\n \"as\",\n];\nfunction getStyleOverrides(name, theme) {\n return theme.components?.[name]?.styleOverrides;\n}\nfunction resolveStyles(useTheme, className, styles, inProps, options = {}) {\n return createMemo(() => {\n const theme = useTheme();\n const styleOverrides = getStyleOverrides(options.name, theme);\n const ownerState = inProps.ownerState;\n const baseStyles = styles.reduce((result, style) => {\n let styledProps;\n if (typeof style === \"function\") {\n styledProps = style({\n ownerState,\n theme,\n get sx() {\n return inProps.sx;\n },\n get as() {\n return inProps.as;\n },\n props: inProps,\n });\n }\n else if (style) {\n styledProps = style;\n }\n if (styledProps)\n result.push(resolveStyledProps(styledProps, {\n name: className,\n __resolved: true,\n }));\n return result;\n }, []);\n let resolvedStyleOverrides = [];\n if (options.overridesResolver &&\n typeof options.overridesResolver === \"function\" &&\n styleOverrides) {\n resolvedStyleOverrides = options\n .overridesResolver(inProps, styleOverrides)\n .map((styleProp) => styleProp ? resolveStyledProps(styleProp, {}) : null)\n .filter(Boolean);\n }\n return baseStyles.concat(resolvedStyleOverrides);\n });\n}\nexport function setSuidComponentType(cb, type) {\n cb[\"__suid\"] = type;\n}\nfunction getSuidComponentType(input) {\n if (typeof input === \"function\")\n return input[\"__suid\"];\n}\n/*@__NO_SIDE_EFFECTS__*/\nfunction createStyled(config) {\n return function styled(Component, options = {}) {\n let cssClassName;\n let className;\n if (options.name) {\n const slot = options.slot || \"Root\";\n className = cssClassName = `${options.name}-${slot.slice(0, 1).toLowerCase() + slot.slice(1)}`;\n }\n else {\n className = `styled-${randomString()}`;\n cssClassName = \"css\";\n }\n const componentType = getSuidComponentType(Component);\n return function (...styles) {\n function StyledComponent(inProps) {\n let theme;\n const $useTheme = () => {\n const inTheme = inProps.theme;\n if (inTheme) {\n return inTheme;\n }\n else if (theme) {\n return theme;\n }\n else {\n return (theme =\n config && config.onUseTheme\n ? config.onUseTheme()\n : useTheme());\n }\n };\n const [, otherProps] = splitProps(inProps, options.skipProps || skipProps);\n const inStyles = resolveStyles($useTheme, cssClassName, styles, inProps, options);\n const inSx = () => {\n const sx = inProps.sx;\n return (sx ? (Array.isArray(sx) ? sx : [sx]) : []);\n };\n const $component = () => {\n if (componentType)\n return Component;\n const as = inProps.as;\n return as ? as : Component;\n };\n const $componentType = componentType\n ? () => componentType\n : createMemo(() => getSuidComponentType($component()));\n const sx = options.skipSx\n ? () => inStyles()\n : () => {\n const theme = $useTheme();\n return [\n ...inStyles(),\n ...inSx().map((sx) => sx.__resolved ? sx : resolveSxProps(sx, theme)),\n ];\n };\n const styleClassName = createStyle(() => $componentType() ? undefined : sx());\n return createDynamicComponent($component, mergeProps(otherProps, {\n get children() {\n return inProps.children;\n },\n // [review] This property must be omitted on each component individually.\n get component() {\n return $componentType() ? inProps.component : null;\n },\n get as() {\n return componentType ? inProps.as : undefined;\n },\n get sx() {\n return $componentType() ? sx() : undefined;\n },\n get ownerState() {\n return $componentType() === \"system\"\n ? inProps.ownerState\n : undefined;\n },\n get class() {\n return clsx([\n ...new Set([inProps.class, className, styleClassName()]),\n ]);\n },\n }));\n }\n setSuidComponentType(StyledComponent, \"system\");\n if (className)\n StyledComponent.toString = () => `.${className}`;\n return StyledComponent;\n };\n };\n}\nexport default createStyled;\n","import { default as useTheme } from \"./useTheme\";\nimport createStyled, { skipProps } from \"@suid/system/createStyled\";\nexport const skipRootProps = [...skipProps, \"classes\"];\nexport default createStyled({\n onUseTheme: () => useTheme(),\n});\n","// https://github.com/mui/material-ui/blob/master/packages/mui-base/src/composeClasses/composeClasses.ts\nexport default function composeClasses(slots, getUtilityClass, classes) {\n const output = {};\n Object.keys(slots).forEach(\n // `Objet.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n (slot) => {\n output[slot] = slots[slot]\n .reduce((acc, key) => {\n if (key) {\n if (classes && classes[key]) {\n acc.push(classes[key]);\n }\n acc.push(getUtilityClass(key));\n }\n return acc;\n }, [])\n .join(\" \");\n });\n return output;\n}\n","import { children, createComponent, createContext, useContext, } from \"solid-js\";\nexport const $INSPECT = Symbol(\"solid-inspect\");\nexport const InspectContext = createContext();\nexport function inspectChildren(fn) {\n const cb = createComponent(InspectContext.Provider, {\n value: { enabled: true },\n get children() {\n return fn();\n },\n });\n const result = children(cb);\n return result.toArray;\n}\nexport function componentTrap(fn) {\n function Component(props) {\n if (useContext(InspectContext)?.enabled)\n return {\n Component,\n props,\n $INSPECT,\n };\n return fn(props);\n }\n Object.defineProperty(Component, \"name\", {\n value: fn.name,\n });\n Component.toString = fn.toString;\n return Component;\n}\nexport function isComponentObject(input, component) {\n return (!!input &&\n input.$INSPECT === $INSPECT &&\n (!component || input.Component === component));\n}\n","import composeClasses from \"./composeClasses\";\nimport useBaseThemeProps from \"./useThemeProps\";\nimport { setSuidComponentType } from \"@suid/system/createStyled\";\nimport { componentTrap } from \"@suid/system/inspect\";\nimport { batch, createComputed, splitProps } from \"solid-js\";\nimport { createMutable } from \"solid-js/store\";\n/*@__NO_SIDE_EFFECTS__*/\nfunction createComponentFactory() {\n return function (options) {\n function useClasses(ownerState) {\n const haveSlotClasses = !!options.slotClasses;\n const compose = () => {\n if (!options.slotClasses)\n throw new Error(`'slotClasses' option is not defined`);\n if (!options.utilityClass)\n throw new Error(`'utilityClass' option is not defined`);\n return composeClasses(options.slotClasses(ownerState), options.utilityClass, ownerState[\"classes\"] ?? \"\");\n };\n const classes = createMutable({});\n if (haveSlotClasses)\n createComputed(() => {\n const result = compose();\n batch(() => {\n for (const slot in result)\n classes[slot] = result[slot];\n });\n });\n return classes;\n }\n function splitInProps(allProps) {\n const [props, otherProps] = splitProps(allProps, options.selfPropNames);\n return { allProps, props, otherProps };\n }\n function useThemeProps(input) {\n return useBaseThemeProps({\n propDefaults: input.propDefaults || options.propDefaults,\n props: input.props,\n name: options.name,\n });\n }\n function useProps(props) {\n const themeProps = useThemeProps({ props });\n return splitInProps(themeProps);\n }\n function defineComponent(cb, styled = true) {\n cb = componentTrap(cb);\n cb.toString = () => `.${options.name}-root`;\n if (styled)\n setSuidComponentType(cb, \"base\");\n return cb;\n }\n function component(cb) {\n const Component = defineComponent(function Component(inProps) {\n const { allProps, otherProps, props } = useProps(inProps);\n const classes = (options.autoCallUseClasses ?? true)\n ? useClasses(allProps)\n : {};\n return cb({\n allProps,\n otherProps: otherProps,\n props,\n classes,\n });\n });\n Object.defineProperty(Component, \"name\", { value: cb.name });\n return Component;\n }\n return {\n name: options.name,\n selfPropNames: options.selfPropNames,\n component,\n defineComponent,\n useClasses,\n useThemeProps,\n useProps,\n splitInProps,\n };\n };\n}\nexport default createComponentFactory;\n","import createComponentFactory from \"@suid/base/createComponentFactory\";\nimport createStyle from \"@suid/system/createStyle\";\nconst $ = createComponentFactory()({\n name: \"MuiGlobalStyles\",\n selfPropNames: [\"styles\"],\n});\n/**\n *\n * Demos:\n *\n * - [How To Customize](https://mui.com/customization/how-to-customize/)\n *\n * API:\n *\n * - [GlobalStyles API](https://mui.com/api/global-styles/)\n */\nconst GlobalStyles = $.component(function GlobalStyles({ props }) {\n createStyle(() => ({\n \"@global\": props.styles || {},\n }));\n return <></>;\n});\nexport default GlobalStyles;\n","import GlobalStyles from \"../GlobalStyles\";\nimport { useTheme } from \"../styles\";\nimport createComponentFactory from \"@suid/base/createComponentFactory\";\nconst $ = createComponentFactory()({\n name: \"MuiCssBaseline\",\n selfPropNames: [\"children\", \"enableColorScheme\"],\n propDefaults: ({ set }) => set({\n enableColorScheme: false,\n }),\n});\nexport const html = (theme, enableColorScheme) => ({\n WebkitFontSmoothing: \"antialiased\", // Antialiasing.\n MozOsxFontSmoothing: \"grayscale\", // Antialiasing.\n // Change from `box-sizing: content-box` so that `width`\n // is not affected by `padding` or `border`.\n boxSizing: \"border-box\",\n // Fix font resize problem in iOS\n WebkitTextSizeAdjust: \"100%\",\n ...(enableColorScheme && { colorScheme: theme.palette.mode }),\n});\nexport const body = (theme) => ({\n color: theme.palette.text.primary,\n ...theme.typography.body1,\n backgroundColor: theme.palette.background.default,\n \"@media print\": {\n // Save printer ink.\n backgroundColor: theme.palette.common.white,\n },\n});\nexport const styles = (theme, enableColorScheme = false) => {\n const defaultStyles = {\n html: html(theme, enableColorScheme),\n \"*, *::before, *::after\": {\n boxSizing: \"inherit\",\n },\n \"strong, b\": {\n fontWeight: theme.typography.fontWeightBold,\n },\n body: {\n margin: 0, // Remove the margin in all browsers.\n ...body(theme),\n // Add support for document.body.requestFullScreen().\n // Other elements, if background transparent, are not supported.\n \"&::backdrop\": {\n backgroundColor: theme.palette.background.default,\n },\n },\n };\n /*const themeOverrides = theme.components?.MuiCssBaseline?.styleOverrides;\n if (themeOverrides) {\n defaultStyles = [defaultStyles, themeOverrides];\n }*/\n return defaultStyles;\n};\n/**\n * Kickstart an elegant, consistent, and simple baseline to build upon.\n *\n * Demos:\n *\n * - [Css Baseline](https://mui.com/components/css-baseline/)\n *\n * API:\n *\n * - [CssBaseline API](https://mui.com/api/css-baseline/)\n */\nconst CssBaseline = $.component(function CssBaseline({ props }) {\n const theme = useTheme();\n return <GlobalStyles styles={styles(theme, props.enableColorScheme)}/>;\n});\nexport default CssBaseline;\n","import { createContext, createEffect, createMemo, createSignal, onMount, useContext, type JSX } from \"solid-js\"\nimport { createTheme, ThemeProvider as MuiThemeProvider } from \"@suid/material/styles\"\nimport CssBaseline from \"@suid/material/CssBaseline\"\nimport { useConfig } from \"../stores/preferences\"\nimport {\n applyColorScheme,\n normalizeColorScheme,\n type NormalizedColorScheme,\n} from \"./theme-scheme\"\n\nexport type ThemeMode = \"system\" | \"light\" | \"dark\"\n\ninterface ThemeContextValue {\n isDark: () => boolean\n themeMode: () => ThemeMode\n setThemeMode: (mode: ThemeMode) => void\n cycleThemeMode: () => void\n colorScheme: () => NormalizedColorScheme\n setColorScheme: (scheme: NormalizedColorScheme) => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue>()\n\ninterface ResolvedPaletteColors {\n backgroundDefault: string\n backgroundPaper: string\n primary: string\n primaryContrast: string\n textPrimary: string\n textSecondary: string\n divider: string\n}\n\nconst lightPaletteFallbacks: ResolvedPaletteColors = {\n backgroundDefault: \"#ffffff\",\n backgroundPaper: \"#f5f5f5\",\n primary: \"#0066ff\",\n primaryContrast: \"#ffffff\",\n textPrimary: \"#1a1a1a\",\n textSecondary: \"#666666\",\n divider: \"#e0e0e0\",\n}\n\nconst darkPaletteFallbacks: ResolvedPaletteColors = {\n backgroundDefault: \"#1a1a1a\",\n backgroundPaper: \"#2a2a2a\",\n primary: \"#0080ff\",\n primaryContrast: \"#1a1a1a\",\n textPrimary: \"#cfd4dc\",\n textSecondary: \"#999999\",\n divider: \"#3a3a3a\",\n}\n\nconst readCssVar = (token: string, fallback: string, rootStyle: CSSStyleDeclaration | null) => {\n if (!rootStyle) return fallback\n const value = rootStyle.getPropertyValue(token)\n if (!value) return fallback\n const trimmed = value.trim()\n return trimmed || fallback\n}\n\nconst resolvePaletteColors = (dark: boolean): ResolvedPaletteColors => {\n const fallbackSet = dark ? darkPaletteFallbacks : lightPaletteFallbacks\n const rootStyle = typeof window !== \"undefined\" ? getComputedStyle(document.documentElement) : null\n\n return {\n backgroundDefault: readCssVar(\"--surface-base\", fallbackSet.backgroundDefault, rootStyle),\n backgroundPaper: readCssVar(\"--surface-secondary\", fallbackSet.backgroundPaper, rootStyle),\n primary: readCssVar(\"--accent-primary\", fallbackSet.primary, rootStyle),\n primaryContrast: readCssVar(\"--text-on-accent\", fallbackSet.primaryContrast, rootStyle),\n textPrimary: readCssVar(\"--text-primary\", fallbackSet.textPrimary, rootStyle),\n textSecondary: readCssVar(\"--text-secondary\", fallbackSet.textSecondary, rootStyle),\n divider: readCssVar(\"--border-base\", fallbackSet.divider, rootStyle),\n }\n}\n\nexport function ThemeProvider(props: { children: JSX.Element }) {\n const mediaQuery = typeof window !== \"undefined\" ? window.matchMedia(\"(prefers-color-scheme: dark)\") : null\n const { colorSchemePreference, setColorSchemePreference } = useConfig()\n const [selectedColorScheme, setSelectedColorScheme] = createSignal(colorSchemePreference())\n const [isDark, setIsDarkSignal] = createSignal(true)\n const [themeRevision, setThemeRevision] = createSignal(0)\n\n const colorScheme = () => selectedColorScheme()\n const themeMode = (): ThemeMode => colorScheme().appearance\n let latestWrite: Promise<void> | null = null\n\n createEffect(() => {\n const preference = colorSchemePreference()\n if (latestWrite) return\n setSelectedColorScheme(preference)\n })\n\n const applyResolvedTheme = () => {\n const dark = applyColorScheme(colorScheme(), { systemDark: mediaQuery?.matches })\n setIsDarkSignal(dark)\n if (typeof window !== \"undefined\") {\n requestAnimationFrame(() => setThemeRevision((v) => v + 1))\n } else {\n setThemeRevision((v) => v + 1)\n }\n }\n\n createEffect(() => {\n applyResolvedTheme()\n })\n\n onMount(() => {\n if (!mediaQuery) return\n const handleSystemThemeChange = () => {\n applyResolvedTheme()\n }\n\n mediaQuery.addEventListener(\"change\", handleSystemThemeChange)\n\n return () => {\n mediaQuery.removeEventListener(\"change\", handleSystemThemeChange)\n }\n })\n\n const setColorScheme = (scheme: NormalizedColorScheme) => {\n const normalized = normalizeColorScheme(scheme)\n setSelectedColorScheme(normalized)\n const write = setColorSchemePreference(normalized)\n latestWrite = write\n void write.then(\n () => {\n if (latestWrite !== write) return\n latestWrite = null\n setSelectedColorScheme(colorSchemePreference())\n },\n () => {\n if (latestWrite !== write) return\n latestWrite = null\n setSelectedColorScheme(colorSchemePreference())\n },\n )\n }\n\n const setThemeMode = (mode: ThemeMode) => {\n setColorScheme(normalizeColorScheme(mode === \"dark\" ? \"classic\" : mode))\n }\n\n const cycleThemeMode = () => {\n const current = themeMode()\n const next: ThemeMode = current === \"system\" ? \"light\" : current === \"light\" ? \"dark\" : \"system\"\n setThemeMode(next)\n }\n\n const muiTheme = createMemo(() => {\n themeRevision()\n const paletteColors = resolvePaletteColors(isDark())\n return createTheme({\n palette: {\n mode: isDark() ? \"dark\" : \"light\",\n primary: {\n main: paletteColors.primary,\n contrastText: paletteColors.primaryContrast,\n },\n secondary: {\n main: paletteColors.primary,\n },\n background: {\n default: paletteColors.backgroundDefault,\n paper: paletteColors.backgroundPaper,\n },\n text: {\n primary: paletteColors.textPrimary,\n secondary: paletteColors.textSecondary,\n },\n divider: paletteColors.divider,\n },\n typography: {\n fontFamily: \"var(--font-family-sans)\",\n },\n shape: {\n borderRadius: 0,\n },\n components: {\n MuiIconButton: {\n styleOverrides: {\n root: {\n color: \"inherit\",\n borderRadius: 0,\n padding: \"6px\",\n \"&.Mui-disabled\": {\n color: \"var(--text-muted)\",\n opacity: 0.55,\n },\n },\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n backgroundColor: \"var(--surface-secondary)\",\n color: \"var(--text-primary)\",\n },\n },\n },\n MuiAppBar: {\n styleOverrides: {\n root: {\n backgroundColor: \"var(--surface-secondary)\",\n color: \"var(--text-primary)\",\n boxShadow: \"none\",\n borderBottom: \"1px solid var(--border-base)\",\n zIndex: 10,\n },\n },\n },\n MuiToolbar: {\n styleOverrides: {\n root: {\n minHeight: \"40px\",\n },\n },\n },\n } as any,\n })\n })\n\n return (\n <ThemeContext.Provider value={{ isDark, themeMode, setThemeMode, cycleThemeMode, colorScheme, setColorScheme }}>\n <MuiThemeProvider theme={muiTheme()}>\n <CssBaseline />\n {props.children}\n </MuiThemeProvider>\n </ThemeContext.Provider>\n )\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext)\n if (!context) {\n throw new Error(\"useTheme must be used within ThemeProvider\")\n }\n return context\n}\n","const HUNK_PATTERN = /(^|\\n)@@/m\nconst FILE_MARKER_PATTERN = /(^|\\n)(diff --git |--- |\\+\\+\\+)/\nconst BEGIN_PATCH_PATTERN = /^\\*\\*\\* (Begin|End) Patch/\nconst UPDATE_FILE_PATTERN = /^\\*\\*\\* Update File: (.+)$/\nconst HUNK_HEADER_PATTERN = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/\n\nfunction stripCodeFence(value: string): string {\n const trimmed = value.trim()\n if (!trimmed.startsWith(\"```\")) return trimmed\n const lines = trimmed.split(\"\\n\")\n if (lines.length < 2) return \"\"\n const lastLine = lines[lines.length - 1]\n if (!lastLine.startsWith(\"```\")) return trimmed\n return lines.slice(1, -1).join(\"\\n\")\n}\n\nexport function normalizeDiffText(raw: string): string {\n if (!raw) return \"\"\n const withoutFence = stripCodeFence(raw.replace(/\\r\\n/g, \"\\n\"))\n const lines = withoutFence.split(\"\\n\").map((line) => line.replace(/\\s+$/u, \"\"))\n\n let pendingFilePath: string | null = null\n const cleanedLines: string[] = []\n\n for (const line of lines) {\n if (!line) continue\n if (BEGIN_PATCH_PATTERN.test(line)) {\n continue\n }\n const updateMatch = line.match(UPDATE_FILE_PATTERN)\n if (updateMatch) {\n pendingFilePath = updateMatch[1]?.trim() || null\n continue\n }\n cleanedLines.push(line)\n }\n\n if (pendingFilePath && !FILE_MARKER_PATTERN.test(cleanedLines.join(\"\\n\"))) {\n cleanedLines.unshift(`+++ b/${pendingFilePath}`)\n cleanedLines.unshift(`--- a/${pendingFilePath}`)\n }\n\n return cleanedLines.join(\"\\n\").trim()\n}\n\nexport function isRenderableDiffText(raw?: string | null): raw is string {\n if (!raw) return false\n const normalized = normalizeDiffText(raw)\n if (!normalized) return false\n return HUNK_PATTERN.test(normalized)\n}\n\nexport function parsePatchToBeforeAfter(patch: string): { before: string; after: string } {\n if (!patch || patch.trim().length === 0) {\n return { before: \"\", after: \"\" }\n }\n\n const lines = patch.replace(/\\r\\n/g, \"\\n\").split(\"\\n\")\n const beforeLines: string[] = []\n const afterLines: string[] = []\n\n for (const line of lines) {\n if (line.startsWith(\"---\") || line.startsWith(\"+++\") || line.startsWith(\"diff --git\")) {\n continue\n }\n if (HUNK_HEADER_PATTERN.test(line)) {\n continue\n }\n if (line.startsWith(\"-\") && !line.startsWith(\"---\")) {\n beforeLines.push(line.slice(1))\n } else if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) {\n afterLines.push(line.slice(1))\n } else if (line.startsWith(\" \")) {\n beforeLines.push(line.slice(1))\n afterLines.push(line.slice(1))\n } else if (line === \"\") {\n beforeLines.push(\"\")\n afterLines.push(\"\")\n } else {\n beforeLines.push(line)\n afterLines.push(line)\n }\n }\n\n while (beforeLines.length > 0 && beforeLines[beforeLines.length - 1] === \"\") {\n beforeLines.pop()\n }\n while (afterLines.length > 0 && afterLines[afterLines.length - 1] === \"\") {\n afterLines.pop()\n }\n\n return {\n before: beforeLines.join(\"\\n\"),\n after: afterLines.join(\"\\n\"),\n }\n}\n","type RequireFn = (deps: string[], callback: (...args: any[]) => void, errback?: (err: any) => void) => void\ntype MonacoApi = any\n\nconst MONACO_VERSION = \"0.52.2\"\nconst CDN_VS_ROOT = `https://cdn.jsdelivr.net/npm/monaco-editor@${MONACO_VERSION}/min/vs`\nconst LOCAL_VS_ROOT = \"/monaco/vs\"\n\nlet monacoPromise: Promise<MonacoApi> | null = null\n\nfunction withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n return new Promise((resolve, reject) => {\n const id = setTimeout(() => reject(new Error(\"timeout\")), ms)\n promise\n .then((value) => {\n clearTimeout(id)\n resolve(value)\n })\n .catch((err) => {\n clearTimeout(id)\n reject(err)\n })\n })\n}\n\nasync function canReachCdn(): Promise<boolean> {\n if (typeof fetch === \"undefined\") return false\n try {\n const controller = new AbortController()\n const task = fetch(`${CDN_VS_ROOT}/loader.js`, { method: \"HEAD\", signal: controller.signal })\n const response = await withTimeout(task, 1200)\n controller.abort()\n return response.ok\n } catch {\n return false\n }\n}\n\nfunction ensureLoaderScript(): Promise<void> {\n if (typeof document === \"undefined\") return Promise.resolve()\n const existing = document.querySelector('script[data-monaco-loader=\"true\"]')\n if (existing) return Promise.resolve()\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\")\n script.dataset.monacoLoader = \"true\"\n script.src = `${LOCAL_VS_ROOT}/loader.js`\n script.async = true\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Monaco AMD loader\"))\n document.head.appendChild(script)\n })\n}\n\nfunction ensureEditorCss(): void {\n if (typeof document === \"undefined\") return\n const existing = document.querySelector('link[data-monaco-editor-css=\"true\"]')\n if (existing) return\n\n // Some environments don't reliably load `vs/css!` plugin resources.\n // Loading the core stylesheet explicitly keeps Monaco visible.\n const link = document.createElement(\"link\")\n link.rel = \"stylesheet\"\n link.href = `${LOCAL_VS_ROOT}/editor/editor.main.css`\n ;(link as any).dataset.monacoEditorCss = \"true\"\n document.head.appendChild(link)\n}\n\nfunction configureWorkers() {\n const globalAny = globalThis as any\n const prevEnv = globalAny.MonacoEnvironment ?? {}\n\n // Monaco's AMD build no longer ships `editor.worker.js` (and language workers are\n // `jsonWorker.js`, `cssWorker.js`, etc). The robust approach is to always boot\n // `vs/base/worker/workerMain.js` and let it `require(...)` the requested module.\n //\n // Important: `workerMain.js` expects `MonacoEnvironment.baseUrl` to be the\n // directory containing the `vs/` folder (so `/monaco/`, not `/monaco/vs`).\n // Use a static worker bootstrap script rather than a `data:` URL.\n // This avoids CSP issues and makes worker requests visible in DevTools.\n const workerUrl = \"/monaco.worker.js\"\n\n globalAny.MonacoEnvironment = {\n ...prevEnv,\n getWorkerUrl(_moduleId: string, _label: string) {\n return workerUrl\n },\n }\n}\n\nfunction getRequire(): RequireFn {\n const req = (globalThis as any).require as RequireFn | undefined\n if (!req) throw new Error(\"Monaco AMD loader is not available\")\n return req\n}\n\nfunction getRequireConfig(): ((config: any) => void) {\n const req = getRequire() as any\n const cfg = req.config as ((config: any) => void) | undefined\n if (!cfg) throw new Error(\"require.config is not available\")\n return cfg\n}\n\nfunction requireAsync(deps: string[]): Promise<any[]> {\n const req = getRequire()\n return new Promise((resolve, reject) => {\n req(deps, (...args: any[]) => resolve(args), (err: any) => reject(err))\n })\n}\n\nfunction getContributionModuleId(languageId: string): string | null {\n const id = String(languageId || \"plaintext\")\n if (!id || id === \"plaintext\") return null\n\n // Rich contributions\n if (id === \"typescript\" || id === \"javascript\") return \"vs/language/typescript/monaco.contribution\"\n if (id === \"json\") return \"vs/language/json/monaco.contribution\"\n if (id === \"css\" || id === \"scss\" || id === \"less\") return \"vs/language/css/monaco.contribution\"\n if (id === \"html\") return \"vs/language/html/monaco.contribution\"\n\n // Basic tokenizers\n // Monaco's `min/vs/basic-languages/<id>/` ships `<id>.js` (no `*.contribution.js`).\n // Loading the tokenizer module is enough; it registers itself with the language service.\n if (id === \"toml\") return \"vs/basic-languages/toml/toml\"\n return `vs/basic-languages/${id}/${id}`\n}\n\nconst loadedContributions = new Set<string>()\nconst pendingContributions = new Map<string, Promise<void>>()\n\nexport async function ensureMonacoLanguageLoaded(languageId: string): Promise<void> {\n const moduleId = getContributionModuleId(languageId)\n if (!moduleId) return\n\n if (loadedContributions.has(moduleId)) return\n const pending = pendingContributions.get(moduleId)\n if (pending) return pending\n\n const task = (async () => {\n let loaded = false\n try {\n await requireAsync([moduleId])\n loaded = true\n } catch {\n // ignore\n } finally {\n if (loaded) loadedContributions.add(moduleId)\n pendingContributions.delete(moduleId)\n }\n })()\n\n pendingContributions.set(moduleId, task)\n return task\n}\n\nexport async function loadMonaco(): Promise<MonacoApi> {\n if (monacoPromise) return monacoPromise\n\n monacoPromise = (async () => {\n await ensureLoaderScript()\n configureWorkers()\n ensureEditorCss()\n\n const online = await canReachCdn()\n const requireConfig = getRequireConfig()\n\n const paths: Record<string, string> = {\n vs: LOCAL_VS_ROOT,\n }\n\n if (online) {\n paths[\"vs/basic-languages\"] = `${CDN_VS_ROOT}/basic-languages`\n paths[\"vs/language\"] = `${CDN_VS_ROOT}/language`\n\n // Baseline languages should remain available offline too.\n paths[\"vs/basic-languages/python\"] = `${LOCAL_VS_ROOT}/basic-languages/python`\n paths[\"vs/basic-languages/markdown\"] = `${LOCAL_VS_ROOT}/basic-languages/markdown`\n paths[\"vs/basic-languages/cpp\"] = `${LOCAL_VS_ROOT}/basic-languages/cpp`\n paths[\"vs/basic-languages/kotlin\"] = `${LOCAL_VS_ROOT}/basic-languages/kotlin`\n\n paths[\"vs/language/typescript\"] = `${LOCAL_VS_ROOT}/language/typescript`\n paths[\"vs/language/html\"] = `${LOCAL_VS_ROOT}/language/html`\n paths[\"vs/language/json\"] = `${LOCAL_VS_ROOT}/language/json`\n paths[\"vs/language/css\"] = `${LOCAL_VS_ROOT}/language/css`\n }\n\n requireConfig({\n paths,\n ignoreDuplicateModules: [\"vs/editor/editor.main\"],\n })\n\n // Load editor core.\n const [monaco] = await requireAsync([\"vs/editor/editor.main\"])\n\n // Load language metadata so we can infer language IDs from paths.\n // (This is small and should remain local for offline support.)\n // Note: In Monaco 0.52.x, `vs/basic-languages/monaco.contribution` is bundled\n // into `vs/editor/editor.main` already. Older builds had additional\n // `vs/basic-languages/_.contribution` metadata, but that module isn't present\n // in the current AMD bundle; attempting to load it can trigger a hard\n // `Unexpected token '<'` if the server falls back to `index.html`.\n await requireAsync([\"vs/basic-languages/monaco.contribution\"]).catch(() => [])\n\n return (globalThis as any).monaco ?? monaco\n })()\n\n return monacoPromise\n}\n","type MonacoApi = any\n\ntype CachedModel = {\n model: any\n}\n\nconst MAX_MODELS = 5\n\n// LRU map: newest at the end.\nconst models = new Map<string, CachedModel>()\n\nfunction touch(key: string, entry: CachedModel) {\n models.delete(key)\n models.set(key, entry)\n}\n\nfunction evictIfNeeded() {\n while (models.size > MAX_MODELS) {\n const oldestKey = models.keys().next().value as string | undefined\n if (!oldestKey) return\n const entry = models.get(oldestKey)\n models.delete(oldestKey)\n try {\n entry?.model.dispose()\n } catch {\n // ignore\n }\n }\n}\n\nexport function getOrCreateTextModel(params: {\n monaco: MonacoApi\n cacheKey: string\n value: string\n languageId: string\n}): any {\n const existing = models.get(params.cacheKey)\n if (existing) {\n touch(params.cacheKey, existing)\n if (existing.model.getValue() !== params.value) {\n existing.model.setValue(params.value)\n }\n return existing.model\n }\n\n const uri = params.monaco.Uri.parse(`opencode://model/${encodeURIComponent(params.cacheKey)}`)\n // Create as plaintext. We'll set the final language after its contribution is loaded.\n const model = params.monaco.editor.createModel(params.value, \"plaintext\", uri)\n const entry = { model }\n models.set(params.cacheKey, entry)\n evictIfNeeded()\n return model\n}\n","type MonacoApi = any\n\nlet cachedLanguageMaps:\n | {\n fileNameToId: Map<string, string>\n extToId: Map<string, string>\n }\n | null = null\n\nfunction buildLanguageMaps(monaco: MonacoApi) {\n if (cachedLanguageMaps) return cachedLanguageMaps\n\n const fileNameToId = new Map<string, string>()\n const extToId = new Map<string, string>()\n\n const languages = typeof monaco?.languages?.getLanguages === \"function\" ? monaco.languages.getLanguages() : []\n if (Array.isArray(languages)) {\n for (const lang of languages) {\n const id = typeof lang?.id === \"string\" ? lang.id : null\n if (!id) continue\n\n const filenames = Array.isArray(lang?.filenames) ? lang.filenames : []\n for (const name of filenames) {\n if (typeof name !== \"string\") continue\n if (!fileNameToId.has(name)) fileNameToId.set(name, id)\n }\n\n const extensions = Array.isArray(lang?.extensions) ? lang.extensions : []\n for (const ext of extensions) {\n if (typeof ext !== \"string\") continue\n // Monaco uses leading dots for extensions (e.g. \".ts\").\n if (!extToId.has(ext)) extToId.set(ext, id)\n }\n }\n }\n\n cachedLanguageMaps = { fileNameToId, extToId }\n return cachedLanguageMaps\n}\n\nfunction overrideLanguageId(fileName: string): string | null {\n // Git-style ignore/config files: treat as shell-like.\n if (fileName === \".gitignore\" || fileName === \".gitattributes\" || fileName === \".gitmodules\") return \"shell\"\n\n // Monaco doesn't ship a dedicated Makefile tokenizer in our baseline.\n if (fileName === \"Makefile\" || fileName.startsWith(\"Makefile.\")) return \"shell\"\n\n return null\n}\n\nexport function inferMonacoLanguageId(monaco: MonacoApi, path: string | undefined | null): string {\n const raw = String(path || \"\").trim()\n const fileName = raw.split(\"/\").pop() || raw\n\n const override = overrideLanguageId(fileName)\n if (override) return override\n\n const maps = buildLanguageMaps(monaco)\n const byName = maps.fileNameToId.get(fileName)\n if (byName) return byName\n\n const dot = fileName.lastIndexOf(\".\")\n if (dot > 0) {\n const ext = fileName.slice(dot)\n const byExt = maps.extToId.get(ext)\n if (byExt) return byExt\n }\n\n return \"plaintext\"\n}\n","import { createEffect, createSignal, onCleanup, onMount } from \"solid-js\"\nimport { loadMonaco } from \"../../lib/monaco/setup\"\nimport { getOrCreateTextModel } from \"../../lib/monaco/model-cache\"\nimport { inferMonacoLanguageId } from \"../../lib/monaco/language\"\nimport { ensureMonacoLanguageLoaded } from \"../../lib/monaco/setup\"\nimport { useTheme } from \"../../lib/theme\"\n\ninterface MonacoFileViewerProps {\n scopeKey: string\n path: string\n content: string\n wordWrap?: \"on\" | \"off\"\n compactGutter?: boolean\n onSave?: (content: string) => void\n onContentChange?: (content: string) => void\n}\n\nexport function MonacoFileViewer(props: MonacoFileViewerProps) {\n const { isDark } = useTheme()\n let host: HTMLDivElement | undefined\n\n let editor: any = null\n let monaco: any = null\n const [ready, setReady] = createSignal(false)\n\n const disposeEditor = () => {\n try {\n editor?.setModel(null)\n } catch {\n // ignore\n }\n try {\n editor?.dispose()\n } catch {\n // ignore\n }\n editor = null\n }\n\n const saveContent = () => {\n if (!editor || !props.onSave) return\n props.onSave(editor.getValue())\n }\n\n const lineNumbersMinChars = (value: string) => {\n if (!props.compactGutter) return 5\n const lineCount = value.split(/\\r\\n|\\r|\\n/).length\n return Math.max(3, String(lineCount).length + 1)\n }\n\n onMount(() => {\n let cancelled = false\n void (async () => {\n monaco = await loadMonaco()\n if (cancelled) return\n if (!host || !monaco) return\n\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n editor = monaco.editor.create(host, {\n value: \"\",\n language: \"plaintext\",\n readOnly: false,\n automaticLayout: true,\n lineNumbers: \"on\",\n lineNumbersMinChars: lineNumbersMinChars(props.content),\n glyphMargin: false,\n folding: !props.compactGutter,\n lineDecorationsWidth: props.compactGutter ? 8 : 10,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: \"off\",\n renderWhitespace: \"selection\",\n fontSize: 13,\n })\n\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, saveContent)\n\n editor.onDidChangeModelContent(() => {\n if (props.onContentChange) {\n props.onContentChange(editor.getValue())\n }\n })\n\n setReady(true)\n })()\n\n onCleanup(() => {\n cancelled = true\n setReady(false)\n disposeEditor()\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !editor) return\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n })\n\n createEffect(() => {\n if (!ready() || !editor) return\n editor.updateOptions({ wordWrap: props.wordWrap === \"on\" ? \"on\" : \"off\" })\n })\n\n createEffect(() => {\n if (!ready() || !editor) return\n editor.updateOptions({\n lineNumbersMinChars: lineNumbersMinChars(props.content),\n folding: !props.compactGutter,\n lineDecorationsWidth: props.compactGutter ? 8 : 10,\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !editor) return\n const languageId = inferMonacoLanguageId(monaco, props.path)\n const cacheKey = `${props.scopeKey}:file:${props.path}`\n const model = getOrCreateTextModel({ monaco, cacheKey, value: props.content, languageId })\n editor.setModel(model)\n\n void ensureMonacoLanguageLoaded(languageId).then(() => {\n try {\n monaco.editor.setModelLanguage(model, languageId)\n } catch {\n // ignore\n }\n })\n })\n\n return <div class=\"monaco-viewer\" ref={host} />\n}\n","import { Show, createEffect, createMemo, createSignal, onCleanup, onMount } from \"solid-js\"\nimport { loadMonaco } from \"../../lib/monaco/setup\"\nimport { getOrCreateTextModel } from \"../../lib/monaco/model-cache\"\nimport { inferMonacoLanguageId } from \"../../lib/monaco/language\"\nimport { ensureMonacoLanguageLoaded } from \"../../lib/monaco/setup\"\nimport { useTheme } from \"../../lib/theme\"\nimport { parsePatchToBeforeAfter } from \"../../lib/diff-utils\"\n\ninterface MonacoDiffViewerProps {\n scopeKey: string\n path: string\n patch?: string\n before?: string\n after?: string\n viewMode?: \"split\" | \"unified\"\n contextMode?: \"expanded\" | \"collapsed\"\n wordWrap?: \"on\" | \"off\"\n onRequestInsertContext?: (selection: { startLine: number; endLine: number }) => void\n insertContextLabel?: string\n}\n\nfunction getLineCount(value: string): number {\n if (!value) return 1\n return value.split(\"\\n\").length\n}\n\nfunction getDigitCount(value: number): number {\n return String(Math.max(1, value)).length\n}\n\nfunction getUnifiedGutterSizing(options: { before: string; after: string }) {\n const beforeLineCount = getLineCount(options.before)\n const afterLineCount = getLineCount(options.after)\n const beforeDigitCount = getDigitCount(beforeLineCount)\n const afterDigitCount = getDigitCount(afterLineCount)\n const maxDigitCount = Math.max(beforeDigitCount, afterDigitCount)\n const extraDigits = Math.max(0, maxDigitCount - 2)\n const beforeNumberChars = Math.max(2, beforeDigitCount)\n const afterNumberChars = Math.max(2, afterDigitCount)\n const fourDigitPenalty = Math.max(0, maxDigitCount - 3)\n\n return {\n diffEditorLineNumbersMinChars: Math.max(beforeNumberChars, afterNumberChars),\n originalLineNumbersMinChars: beforeNumberChars,\n modifiedLineNumbersMinChars: afterNumberChars,\n lineDecorationsWidth: 6 + extraDigits * 2 + fourDigitPenalty * 2,\n }\n}\n\nfunction getSplitGutterSizing(options: { before: string; after: string }) {\n const beforeLineCount = getLineCount(options.before)\n const afterLineCount = getLineCount(options.after)\n const beforeDigitCount = getDigitCount(beforeLineCount)\n const afterDigitCount = getDigitCount(afterLineCount)\n const maxDigitCount = Math.max(beforeDigitCount, afterDigitCount)\n const extraDigits = Math.max(0, maxDigitCount - 2)\n const beforeNumberChars = Math.max(2, beforeDigitCount)\n const afterNumberChars = Math.max(2, afterDigitCount)\n const fourDigitPenalty = Math.max(0, maxDigitCount - 3)\n\n return {\n diffEditorLineNumbersMinChars: Math.max(beforeNumberChars, afterNumberChars),\n originalLineNumbersMinChars: beforeNumberChars,\n modifiedLineNumbersMinChars: afterNumberChars,\n lineDecorationsWidth: 8 + extraDigits * 2 + fourDigitPenalty,\n }\n}\n\nexport function MonacoDiffViewer(props: MonacoDiffViewerProps) {\n const { isDark } = useTheme()\n let host: HTMLDivElement | undefined\n\n let diffEditor: any = null\n let monaco: any = null\n let splitLayoutFrame: number | null = null\n const [ready, setReady] = createSignal(false)\n const [hoveredLine, setHoveredLine] = createSignal<number | null>(null)\n const [selectedRange, setSelectedRange] = createSignal<{ startLine: number; endLine: number } | null>(null)\n const [widgetHovered, setWidgetHovered] = createSignal(false)\n const [widgetPosition, setWidgetPosition] = createSignal<{ top: number; left: number } | null>(null)\n\n const resolvedContent = createMemo(() => {\n if (props.patch !== undefined && props.patch !== null) {\n return parsePatchToBeforeAfter(props.patch)\n }\n return {\n before: props.before ?? \"\",\n after: props.after ?? \"\",\n }\n })\n\n const disposeEditor = () => {\n try {\n diffEditor?.setModel(null as any)\n } catch {\n // ignore\n }\n try {\n diffEditor?.dispose()\n } catch {\n // ignore\n }\n diffEditor = null\n }\n\n const clearSplitLayoutVariables = () => {\n if (!host) return\n host.style.removeProperty(\"--split-original-line-number-width\")\n host.style.removeProperty(\"--split-original-delete-sign-left\")\n host.style.removeProperty(\"--split-original-gutter-width\")\n }\n\n const syncSplitLayoutVariables = (options: {\n viewMode: \"split\" | \"unified\"\n originalLineNumbersMinChars: number\n lineDecorationsWidth: number\n }) => {\n if (!host) return\n if (splitLayoutFrame !== null && typeof window !== \"undefined\") {\n window.cancelAnimationFrame(splitLayoutFrame)\n splitLayoutFrame = null\n }\n if (options.viewMode !== \"split\" || typeof window === \"undefined\") {\n clearSplitLayoutVariables()\n return\n }\n\n splitLayoutFrame = window.requestAnimationFrame(() => {\n splitLayoutFrame = null\n if (!host) return\n const originalLineNumbers = host.querySelector<HTMLElement>(\".editor.original .line-numbers\")\n const measuredWidth = originalLineNumbers?.getBoundingClientRect().width ?? 0\n const lineNumberWidth =\n measuredWidth > 0 ? measuredWidth : Math.max(12, options.originalLineNumbersMinChars * 6)\n host.style.setProperty(\"--split-original-line-number-width\", `${lineNumberWidth}px`)\n host.style.setProperty(\"--split-original-delete-sign-left\", `${lineNumberWidth}px`)\n host.style.setProperty(\n \"--split-original-gutter-width\",\n `${lineNumberWidth + options.lineDecorationsWidth}px`,\n )\n })\n }\n\n const getModifiedEditor = () => diffEditor?.getModifiedEditor?.() ?? null\n\n const getActiveInsertRange = () => {\n const selection = selectedRange()\n if (selection) return selection\n if (widgetHovered() && hoveredLine()) {\n return { startLine: hoveredLine() as number, endLine: hoveredLine() as number }\n }\n const line = hoveredLine()\n if (!line) return null\n return { startLine: line, endLine: line }\n }\n\n const layoutInsertWidget = () => {\n const modifiedEditor = getModifiedEditor()\n const container = host\n if (!modifiedEditor || !container) return\n const activeRange = getActiveInsertRange()\n if (!activeRange) {\n setWidgetPosition(null)\n return\n }\n\n try {\n const modifiedDom = modifiedEditor.getDomNode?.() as HTMLElement | null\n if (!modifiedDom) {\n setWidgetPosition(null)\n return\n }\n\n const margin = modifiedDom.querySelector<HTMLElement>(\".margin\")\n const scrollable = modifiedDom.querySelector<HTMLElement>(\".monaco-scrollable-element.editor-scrollable\")\n const lineTop = modifiedEditor.getTopForLineNumber?.(activeRange.startLine) ?? 0\n const scrollTop = modifiedEditor.getScrollTop?.() ?? 0\n const lineHeight = Number(modifiedEditor.getOption?.(monaco.editor.EditorOption.lineHeight) ?? 18)\n const modifiedRect = modifiedDom.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n const seamLeft = modifiedRect.left - containerRect.left + (margin?.offsetWidth ?? scrollable?.offsetLeft ?? 0)\n const centerTop = modifiedRect.top - containerRect.top + (lineTop - scrollTop) + lineHeight / 2\n\n setWidgetPosition({ top: centerTop, left: seamLeft })\n } catch {\n setWidgetPosition(null)\n }\n }\n\n onMount(() => {\n let cancelled = false\n void (async () => {\n monaco = await loadMonaco()\n if (cancelled) return\n if (!host || !monaco) return\n\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n diffEditor = monaco.editor.createDiffEditor(host, {\n readOnly: true,\n automaticLayout: true,\n renderSideBySide: true,\n renderSideBySideInlineBreakpoint: 0,\n renderMarginRevertIcon: false,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n renderWhitespace: \"selection\",\n fontSize: 13,\n wordWrap: props.wordWrap === \"on\" ? \"on\" : \"off\",\n glyphMargin: false,\n folding: false,\n // Keep enough gutter space so unified diffs don't overlap `+`/`-` markers.\n lineNumbersMinChars: 4,\n lineDecorationsWidth: 12,\n // Use legacy diff algorithm for better performance with large files\n // See: https://github.com/microsoft/vscode/issues/184037\n diffAlgorithm: \"legacy\",\n // Limit computation time to avoid freezing on large files\n maxComputationTime: 10000,\n })\n\n setReady(true)\n\n layoutInsertWidget()\n })()\n\n onCleanup(() => {\n cancelled = true\n if (splitLayoutFrame !== null && typeof window !== \"undefined\") {\n window.cancelAnimationFrame(splitLayoutFrame)\n splitLayoutFrame = null\n }\n clearSplitLayoutVariables()\n setReady(false)\n disposeEditor()\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n })\n\n createEffect(() => {\n if (!host) return\n host.dataset.viewMode = props.viewMode === \"split\" ? \"split\" : \"unified\"\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const modifiedEditor = diffEditor.getModifiedEditor?.()\n if (!modifiedEditor?.onDidChangeCursorSelection) return\n\n const disposable = modifiedEditor.onDidChangeCursorSelection((event: any) => {\n const selection = event?.selection\n if (!selection || selection.isEmpty?.()) {\n setSelectedRange(null)\n layoutInsertWidget()\n return\n }\n setSelectedRange({\n startLine: Math.min(selection.startLineNumber, selection.endLineNumber),\n endLine: Math.max(selection.startLineNumber, selection.endLineNumber),\n })\n layoutInsertWidget()\n })\n\n onCleanup(() => {\n try {\n disposable?.dispose?.()\n } catch {\n // ignore\n }\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const modifiedEditor = getModifiedEditor()\n if (!modifiedEditor?.onMouseMove || !modifiedEditor?.onMouseLeave || !modifiedEditor?.onMouseDown) return\n\n const moveDisposable = modifiedEditor.onMouseMove((event: any) => {\n const lineNumber = event?.target?.position?.lineNumber\n setHoveredLine(typeof lineNumber === \"number\" ? lineNumber : null)\n layoutInsertWidget()\n })\n\n const leaveDisposable = modifiedEditor.onMouseLeave(() => {\n if (!widgetHovered()) {\n setHoveredLine(null)\n }\n layoutInsertWidget()\n })\n\n const scrollDisposable = modifiedEditor.onDidScrollChange?.(() => {\n layoutInsertWidget()\n })\n\n onCleanup(() => {\n try {\n moveDisposable?.dispose?.()\n leaveDisposable?.dispose?.()\n scrollDisposable?.dispose?.()\n } catch {\n // ignore\n }\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const activeRange = getActiveInsertRange()\n if (!activeRange) setWidgetPosition(null)\n layoutInsertWidget()\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const viewMode = props.viewMode === \"unified\" ? \"unified\" : \"split\"\n const contextMode = props.contextMode === \"collapsed\" ? \"collapsed\" : \"expanded\"\n const wordWrap = props.wordWrap === \"on\" ? \"on\" : \"off\"\n const { before, after } = resolvedContent()\n const sizing =\n viewMode === \"unified\"\n ? getUnifiedGutterSizing({ before, after })\n : getSplitGutterSizing({ before, after })\n const {\n diffEditorLineNumbersMinChars,\n originalLineNumbersMinChars,\n modifiedLineNumbersMinChars,\n lineDecorationsWidth,\n } = sizing\n diffEditor.updateOptions({\n renderSideBySide: viewMode === \"split\",\n renderSideBySideInlineBreakpoint: 0,\n renderIndicators: true,\n lineNumbersMinChars: diffEditorLineNumbersMinChars,\n lineDecorationsWidth,\n hideUnchangedRegions:\n contextMode === \"collapsed\"\n ? { enabled: true }\n : { enabled: false },\n wordWrap,\n })\n\n try {\n diffEditor.getOriginalEditor?.()?.updateOptions?.({\n wordWrap,\n lineNumbersMinChars: originalLineNumbersMinChars,\n lineDecorationsWidth,\n })\n } catch {\n // ignore\n }\n\n try {\n diffEditor.getModifiedEditor?.()?.updateOptions?.({\n wordWrap,\n lineNumbersMinChars: modifiedLineNumbersMinChars,\n lineDecorationsWidth,\n })\n } catch {\n // ignore\n }\n\n syncSplitLayoutVariables({\n viewMode,\n originalLineNumbersMinChars,\n lineDecorationsWidth,\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const languageId = inferMonacoLanguageId(monaco, props.path)\n const { before, after } = resolvedContent()\n const beforeKey = `${props.scopeKey}:diff:${props.path}:before`\n const afterKey = `${props.scopeKey}:diff:${props.path}:after`\n\n const original = getOrCreateTextModel({ monaco, cacheKey: beforeKey, value: before, languageId })\n const modified = getOrCreateTextModel({ monaco, cacheKey: afterKey, value: after, languageId })\n diffEditor.setModel({ original, modified })\n\n void ensureMonacoLanguageLoaded(languageId).then(() => {\n try {\n monaco.editor.setModelLanguage(original, languageId)\n monaco.editor.setModelLanguage(modified, languageId)\n } catch {\n // ignore\n }\n })\n })\n\n return (\n <div class=\"monaco-viewer\" ref={host}>\n <div class=\"git-change-context-overlay\">\n <Show when={widgetPosition()}>\n {(position: () => { top: number; left: number }) => (\n <div\n class=\"git-change-context-widget-host\"\n style={{ top: `${position().top}px`, left: `${position().left}px` }}\n onMouseEnter={() => {\n setWidgetHovered(true)\n layoutInsertWidget()\n }}\n onMouseLeave={() => {\n setWidgetHovered(false)\n layoutInsertWidget()\n }}\n >\n <button\n type=\"button\"\n class=\"git-change-context-widget\"\n aria-label={props.insertContextLabel ?? \"Add git change context to prompt\"}\n title={props.insertContextLabel ?? \"Add git change context to prompt\"}\n onMouseDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n const activeRange = getActiveInsertRange()\n if (!activeRange) return\n props.onRequestInsertContext?.(activeRange)\n }}\n >\n +\n </button>\n </div>\n )}\n </Show>\n </div>\n </div>\n )\n}\n"],"names":["booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","a","DelegatedEvents","SVGElements","SVGNamespace","memo","fn","createMemo","reconcileArrays","parentNode","b","bLength","aEnd","bEnd","aStart","bStart","after","map","node","i","index","sequence","t","$$EVENTS","render","code","element","init","options","disposer","createRoot","dispose","insert","template","html","isImportNode","isSVG","isMathML","create","untrack","delegateEvents","eventNames","document","e","l","name","eventHandler","setAttribute","value","isHydrating","setAttributeNS","namespace","setBoolAttribute","className","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","len","key","toggleClassKey","classValue","style","nodeStyle","v","setStyleProperty","spread","props","skipChildren","prevProps","createRenderEffect","insertExpression","use","assign","arg","parent","accessor","marker","initial","current","skipRef","assignProp","getNextElement","sharedConfig","getHydrationKey","toPropertyName","_","w","classNames","nameLen","isCE","isProp","isChildProp","propAlias","forceProp","h","ns","el","ev","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","unwrapArray","hydrating","cleaned","multi","cleanChildren","array","currentArray","normalizeIncomingArray","nodes","appendNodes","normalized","unwrap","dynamic","item","replacement","inserted","isParent","SVG_NAMESPACE","createElement","is","Portal","useShadow","mount","owner","getOwner","content","createEffect","runWithOwner","clean","setClean","createSignal","cleanup","onCleanup","container","renderRoot","createDynamic","component","cached","isSvg","Dynamic","others","splitProps","$RAW","$NODE","$HAS","$SELF","wrap$1","p","$PROXY","proxyTraps$1","keys","desc","isWrappable","obj","proto","set","result","unwrapped","getNodes","target","symbol","getNode","property","s","proxyDescriptor$1","trackSelf","getListener","ownKeys","receiver","$TRACK","tracked","setProperty","state","deleting","mergeStoreNode","updateArray","next","updatePath","traversed","part","partType","isArray","from","to","by","createStore","store","unwrappedStore","wrappedStore","setStore","args","batch","proxyDescriptor","proxyTraps","isFunction","wrap","isClass","curProto","descriptors","get","og","createMutable","$ROOT","applyState","merge","previous","j","start","end","newEnd","newIndicesNext","keyVal","temp","newIndices","targetKeys","previousKeys","reconcile","res","producers","setterTraps","proxy","produce","CLIENT_ID_STORAGE_KEY","CONNECTION_ID_STORAGE_KEY","cachedClientId","cachedConnectionId","getClientIdentity","getOrCreateClientId","getOrCreateConnectionId","getOrCreateStoredValue","nativeWindowId","_a","storage","generateUUID","existing","char","random","m","d","y","ms","val","type","parse","fmtLong","fmtShort","str","match","n","msAbs","plural","isPlural","setup","env","createDebug","coerce","disable","enable","enabled","require$$0","destroy","selectColor","hash","prevTime","enableOverride","namespacesCache","enabledCache","debug","self","curr","format","formatter","extend","delimiter","newDebug","namespaces","split","matchesTemplate","search","searchIndex","templateIndex","starIndex","matchIndex","skip","common","exports","formatArgs","save","load","useColors","localstorage","warned","module","c","lastC","r","define_process_env_default","formatters","error","KNOWN_NAMESPACES","STORAGE_KEY","namespaceLoggers","enabledNamespaces","rawConsole","applyEnabledNamespaces","persistEnabledNamespaces","hydrateNamespacesFromStorage","stored","parsed","buildLogger","baseLogger","formatAndLog","level","getLogger","listLoggerNamespaces","enableLogger","disableLogger","disableAllLoggers","enableAllLoggers","loggerControls","exposeLoggerControls","attachEventSourceHandlers","source","disconnected","event","payload","handleDisconnect","reason","RUNTIME_BASE","DEFAULT_BASE","DEFAULT_EVENTS_PATH","API_BASE","__vite_import_meta_env__","EVENTS_URL","buildEventsUrl","CODENOMAD_API_BASE","base","httpLogger","sseLogger","normalizeHeaders","headers","output","logHttp","message","context","readErrorMessage","response","text","request","url","method","startedAt","duration","requestRaw","serverApi","providerId","modelId","params","query","id","slug","suffix","requestId","token","contents","body","password","relativePath","opts","trimmed","requestPayload","patch","signal","parentPath","instanceId","sessionId","onEvent","onError","onPing","identity","buildClientEventsUrl","connectWorkspaceEvents","callbacks","notifyDisconnected","_b","retryWithBackoff","maxAttempts","initialDelayMs","maxDelayMs","backoffMultiplier","timeoutMs","shouldRetry","wait","delayMs","resolve","lastError","attempt","controller","timer","err","isRetryableError","RETRY_BASE_DELAY","RETRY_MAX_DELAY","log","logSse","ServerEvents","generation","connection","events","status","pongPayload","solidBatch","bucket","serverEvents","DEFAULT_INSTANCE_DATA","isDeepEqual","ServerStorage","promise","updated","listener","kind","cache","listeners","write","messageHistory","agentModelSelections","instanceDataMap","setInstanceDataMap","Map","loadPromises","instanceSubscriptions","cloneInstanceData","Array","attachSubscription","has","unsubscribe","onInstanceDataChanged","setInstanceData","detachSubscription","delete","ensureInstanceConfig","loadInstanceData","then","catch","warn","finally","updateInstanceConfig","mutator","draft","saveInstanceData","getInstanceConfig","clearInstanceConfig","InstanceConfigContext","createContext","contextValue","InstanceConfigProvider","values","clear","_$createComponent","Provider","children","normalizeCapabilities","speechCapabilities","setSpeechCapabilities","speechCapabilitiesLoading","setSpeechCapabilitiesLoading","speechCapabilitiesError","setSpeechCapabilitiesError","serverSupportsSeparateProviders","setServerSupportsSeparateProviders","speechCapabilitiesPromise","loadSpeechCapabilities","force","resetSpeechCapabilities","buildSpeechPatch","updates","_c","_d","dir","dirUpdate","dirPatch","_e","_f","COLOR_SCHEME_IDS","COLOR_KEYS","LEGACY_COLOR_KEYS","DEFAULT_SEMANTIC_COLORS","DEFAULT_CUSTOM_COLORS","LIGHT_COLOR_SCHEME_COLORS","BUILT_IN_COLOR_SCHEMES","SCHEMES_BY_ID","scheme","isRecord","isCanonicalHexColor","isColorSchemeColors","normalizeColors","copyColors","colors","selectionFor","appearance","definition","normalizeColorScheme","legacyTheme","schemeId","channel","color","offset","luminance","linear","contrastRatio","first","second","bright","dark","validateColorSchemeColors","textPairs","emphasis","emphasisSurfaces","foreground","background","mix","firstWeight","alpha","opacity","textOnColor","APPLIED_PROPERTIES","derivedProperties","textOnAccent","applyColorScheme","MAX_COLOR_SCHEME_PRESETS","normalizeColorSchemePresets","presets","candidate","nextColorSchemePresetName","sourceName","existingNames","used","createColorSchemePresetId","normalizeModelVisibilityPreference","hiddenModelIds","normalizeModelVisibilityPreferences","preference","isModelVisible","resolvePickerValue","option","MAX_RECENT_FOLDERS","MAX_RECENT_MODELS","MAX_FAVORITE_MODELS","defaultToolCallExpansionDefaults","preset","defaultUiSettings","showThinkingBlocks","showKeyboardShortcutHints","thinkingBlocksExpansion","showMessageTimeline","showTimelineTools","holdLongAssistantReplies","promptSubmitOnEnter","followUpBehavior","showPromptVoiceInput","diffViewMode","toolOutputExpansion","diagnosticsExpansion","toolInputsVisibility","showUsageMetrics","showProviderUsageCreditBalance","autoCleanupBlankSessions","keepUnseenSubagentIdleStatus","osNotificationsEnabled","osNotificationsAllowWhenVisible","notifyOnNeedsInput","notifyOnIdle","normalizeExpansionPreference","fallback","normalizeVisibilityPreference","normalizeToolCallExpansionPreset","normalizeToolCallExpansionTools","tool","mode","Object","entries","normalizeToolCallExpansionDefaults","input","legacySettings","undefined","legacyThinking","thinking","tools","defaultSpeechSettings","provider","sttModel","ttsModel","ttsVoice","playbackMode","ttsFormat","normalizeUiSettings","sanitized","toolCallExpansionDefaults","usageMetricsFallback","locale","usageMetricsExpansion","focusExistingWindowOnSecondLaunch","modelVisibility","normalizeRecord","out","k","normalizeSpeechSettings","trim","apiKey","hasApiKey","length","baseUrl","separateProviders","stt","model","tts","cloneArray","mapper","mapped","push","normalizeUiState","recentFolders","f","lastAccessed","projectName","ts","Date","now","opencodeBinaries","lastUsed","version","label","remoteServers","server","createdAt","toISOString","updatedAt","lastConnectedAt","skipTlsVerify","Boolean","sort","left","localeCompare","models","recents","favorites","thinkingSelections","normalizeServerConfig","listeningMode","logLevel","opencodeBinary","environmentVariables","secureEnvVars","normalizeSecureEnvVars","speech","filter","getModelKey","buildRecentFolderList","folderPath","aliasPath","matchingPaths","Set","aliasEntry","find","folder","canonicalEntry","folders","unshift","slice","buildBinaryList","binaryPath","timestamp","updatedEntry","remaining","buildRemoteServerProfile","entry","createRandomId","buildRemoteServerList","profile","crypto","randomUUID","Math","toString","uiConfigBucket","setUiConfigBucket","serverConfigBucket","setServerConfigBucket","uiStateBucket","setUiStateBucket","isLoaded","setIsLoaded","uiSettings","settings","themePreference","theme","colorSchemePreference","colorScheme","customColorSchemePreference","config","custom","customColorScheme","colorSchemePresets","activeColorSchemePresetId","serverSettings","uiState","preferences","loadPromise","ensureLoaded","Promise","all","loadConfigOwner","loadStateOwner","uiCfg","srvCfg","uiSt","patchConfigOwner","patchStateOwner","updateUiSettings","nextSettings","fromEntries","updatePreferences","modelVisibilityWriteQueues","modelVisibilityWriteQueue","pendingModelVisibility","setPendingModelVisibility","modelVisibilityWriteFailures","setModelVisibilityWriteFailures","getProviderModelVisibilityPreference","providerModelVisibilitySaveFailed","setProviderModelVisibility","add","setThemePreference","setColorSchemePreference","colorSchemeWriteQueue","selectColorSchemePreset","saveColorSchemePreset","trimmedName","reject","Error","setListeningMode","updateEnvironmentVariables","envVars","addEnvironmentVariable","secure","secureList","upperKey","toUpperCase","exists","some","removeEnvironmentVariable","isSecureEnvVar","toggleSecureEnvVar","updateLastUsedBinary","nextList","updateLogLevel","updateSpeechSettings","addOpenCodeBinary","removeOpenCodeBinary","addRecentFolder","removeRecentFolder","renameRecentFolderProject","saveRemoteServerProfile","markRemoteServerConnected","removeRemoteServerProfile","recordWorkspaceLaunch","nextFolders","addRecentModelPreference","filtered","isFavoriteModelPreference","toggleFavoriteModelPreference","getModelThinkingSelection","setModelThinkingSelection","selections","setDiffViewMode","setToolOutputExpansion","other","setDiagnosticsExpansion","setToolInputsVisibility","setThinkingBlocksExpansion","toggleShowThinkingBlocks","toggleKeyboardShortcutHints","toggleShowTimelineTools","toggleShowMessageTimeline","toggleUsageMetrics","togglePromptSubmitOnEnter","toggleShowPromptVoiceInput","toggleAutoCleanupBlankSessions","nextValue","info","setAgentModelPreference","agent","ensureInstanceConfigLoaded","updateInstanceData","getAgentModelPreference","ConfigContext","configContextValue","ConfigProvider","onMount","unsubUi","onConfigOwnerChanged","unsubServer","unsubStateUi","onStateOwnerChanged","useConfig","useContext","clamp","min","max","hexToRgb","re","decomposeColor","valuesInput","colorSpace","recomposeColor","newValues","hslToRgb","rgb","getLuminance","getContrastRatio","lumA","lumB","darken","inputColor","coefficient","lighten","handleBreakpoints","propValue","styleFromPropValue","themeBreakpoints","acc","breakpoint","cssKey","defaultStyledEngineContextValue","cleanupStyles","StyledEngineContext","red","purple","blue","lightBlue","green","orange","grey","isPlainObject","sortKeys","object","deepmerge","sourceKeys","sourceValue","targetValue","cloneObject","sources","useLightOptions","primary","secondary","disabled","divider","paper","white","default","action","active","hover","hoverOpacity","selected","selectedOpacity","disabledBackground","disabledOpacity","focus","focusOpacity","activatedOpacity","lightColors","main","light","success","warning","useDarkOptions","darkColors","modes","getContrastText","contrastThreshold","addLightOrDark","intent","direction","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","hasOwnProperty","augmentColor","mainShade","lightShade","darkShade","contrastText","usePalleteDefaults","createPalette","colorNames","palleteDefaults","isColorName","includes","getColorObject","getColor","getDefaultColor","componentsDefault","createComponents","createMixins","breakpoints","spacing","mixins","shadowKeyUmbraOpacity","shadowKeyPenumbraOpacity","shadowAmbientShadowOpacity","createCssShadow","px","join","shadows","createShadows","Proxy","isNaN","Number","easing","easeInOut","easeOut","easeIn","sharp","shortest","shorter","short","standard","complex","enteringScreen","leavingScreen","formatMs","milliseconds","round","getAutoHeightDuration","height","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","delay","animatedProp","fontWeight","regular","medium","typographyDefaults","fontFamily","fontSize","htmlFontSize","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","button","caption","overline","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","makeVariant","size","lineHeight","letterSpacing","casing","pxToRem","textTransform","createTypography","coef","zIndexDefaults","mobileStepper","speedDial","appBar","drawer","modal","snackbar","tooltip","createZIndex","renderMediaQuery","comparator","width","units","selector","maxW","minW","breakpointsDefault","createBreakpoints","css","createSpacing","shapeDefaults","createShape","createTheme","def","defaults","inputValue","defineProperty","configurable","enumerable","components","palette","shape","typography","zIndex","makeGetDefaultTheme","defaultTheme","getDefaultTheme$1","ThemeContext","ThemeContext$2","transitions","getDefaultTheme","isEmptyObject","_key","useTheme","Context","useSysTheme","useThemeProps","propDefaults","themeProps","mergeProps","ThemeProvider","createElementNS","createStaticComponent","$DEVCOMP","web","createDynamicComponent","$component","mergeStyleProps","isVar","isPrivateVar","isSelector","isGlobalSelector","isMediaQuery","isKeyframes","snakeCase","letter","renderSelector","propKey","selectors","subselectors","snakeCaseWithCache","rules","keyframes","extraProps","extraPropKey","inValue","renderProps","pad","selectorStr","toArray","resolveFunction","StyleCache","__publicField","componentId","styleObject","componentIndex","createStyleObject","propsValues","propertyNameCache","setStyleElementText","setAttributes","attributes","createStyleElement","registerStyleElementUsage","uses","placeholderId","appendStyleElement","injectFirst","head","prevElement","placeholderElement","findStyleElement","classPrefix","unregisterStyleElementUsage","remove","capitalize","string","debounce","func","timeout","debounced","later","getScrollbarSize","doc","documentWidth","ownerDocument","ownerWindow","randomString","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesWhitelist","focusTriggersKeyboardModality","handleKeyDown","handlePointerDown","handleVisibilityChange","prepare","isFocusVisible","useIsFocusVisible","ref","isFocusVisibleRef","setFocusVisibleRef","handleBlurVisible","handleFocusVisible","styleCache","normalizeStyleProps","flat","Infinity","createStyleId","createUniqueId","replaceAll","chunkSize","chunks","ceil","ids","chunk","number","createStyle","setName","styleElement","isGlobalStyleObject","prevResult","propsValue","nonce","onProp","cssTarget","unitLess","resolveStyledPropsValue","resolveStyledProps","getThemeValue","names","getPath","createUnaryUnit","themeKey","defaultValue","propName","themeSpacing","abs","dirMap","asPx","customProp","onValue","pxProp","mProp","createSystemProps","createSystemDisplayProps","createSystemFlexboxProps","createSystemGridProps","createSystemPositionProps","createSystemPaletteProps","createSystemSizingProps","createSystemBorderProps","createSystemSpacingProps","createSystemTypographyProps","display","paletteValue","borderValue","typographyValue","systemProps","systemPropNames","resolveSystemPropsValue","resolveSxPropsValue","resolveSxProps","sortedCss","clsx","skipProps","getStyleOverrides","styleOverrides","resolveStyles","styles","inProps","ownerState","baseStyles","reduce","styledProps","sx","as","__resolved","resolvedStyleOverrides","overridesResolver","styleProp","concat","setSuidComponentType","cb","getSuidComponentType","createStyled","Component","cssClassName","slot","toLowerCase","componentType","StyledComponent","$useTheme","inTheme","onUseTheme","otherProps","inStyles","inSx","$componentType","skipSx","styleClassName","class","skipRootProps","styled","composeClasses","slots","getUtilityClass","classes","$INSPECT","InspectContext","componentTrap","createComponentFactory","useClasses","haveSlotClasses","compose","createComputed","splitInProps","allProps","useBaseThemeProps","useProps","defineComponent","$","selfPropNames","GlobalStyles","enableColorScheme","WebkitFontSmoothing","MozOsxFontSmoothing","boxSizing","WebkitTextSizeAdjust","backgroundColor","margin","CssBaseline","lightPaletteFallbacks","backgroundDefault","backgroundPaper","primaryContrast","textPrimary","textSecondary","darkPaletteFallbacks","readCssVar","rootStyle","getPropertyValue","resolvePaletteColors","fallbackSet","window","getComputedStyle","documentElement","mediaQuery","matchMedia","selectedColorScheme","setSelectedColorScheme","isDark","setIsDarkSignal","themeRevision","setThemeRevision","themeMode","latestWrite","applyResolvedTheme","systemDark","matches","requestAnimationFrame","handleSystemThemeChange","removeEventListener","setColorScheme","setThemeMode","cycleThemeMode","muiTheme","paletteColors","borderRadius","MuiIconButton","root","padding","MuiDrawer","MuiAppBar","boxShadow","borderBottom","MuiToolbar","minHeight","MuiThemeProvider","_$memo","HUNK_PATTERN","FILE_MARKER_PATTERN","BEGIN_PATCH_PATTERN","UPDATE_FILE_PATTERN","HUNK_HEADER_PATTERN","stripCodeFence","lines","normalizeDiffText","raw","line","pendingFilePath","cleanedLines","updateMatch","isRenderableDiffText","parsePatchToBeforeAfter","beforeLines","afterLines","MONACO_VERSION","CDN_VS_ROOT","LOCAL_VS_ROOT","monacoPromise","withTimeout","canReachCdn","task","ensureLoaderScript","script","ensureEditorCss","link","configureWorkers","globalAny","prevEnv","workerUrl","_moduleId","_label","getRequire","req","getRequireConfig","cfg","requireAsync","deps","getContributionModuleId","languageId","loadedContributions","pendingContributions","ensureMonacoLanguageLoaded","moduleId","pending","loaded","loadMonaco","online","requireConfig","paths","monaco","MAX_MODELS","touch","evictIfNeeded","oldestKey","getOrCreateTextModel","uri","cachedLanguageMaps","buildLanguageMaps","fileNameToId","extToId","languages","lang","filenames","extensions","ext","overrideLanguageId","fileName","inferMonacoLanguageId","override","maps","byName","dot","byExt","MonacoFileViewer","host","editor","ready","setReady","disposeEditor","setModel","saveContent","onSave","getValue","lineNumbersMinChars","compactGutter","lineCount","String","cancelled","setTheme","language","readOnly","automaticLayout","lineNumbers","glyphMargin","folding","lineDecorationsWidth","minimap","scrollBeyondLastLine","wordWrap","renderWhitespace","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","onDidChangeModelContent","onContentChange","updateOptions","cacheKey","scopeKey","setModelLanguage","_el$","_tmpl$","_ref$","_$use","getLineCount","getDigitCount","getUnifiedGutterSizing","beforeLineCount","before","afterLineCount","beforeDigitCount","afterDigitCount","maxDigitCount","extraDigits","beforeNumberChars","afterNumberChars","fourDigitPenalty","diffEditorLineNumbersMinChars","originalLineNumbersMinChars","modifiedLineNumbersMinChars","getSplitGutterSizing","MonacoDiffViewer","diffEditor","splitLayoutFrame","hoveredLine","setHoveredLine","selectedRange","setSelectedRange","widgetHovered","setWidgetHovered","widgetPosition","setWidgetPosition","resolvedContent","clearSplitLayoutVariables","removeProperty","syncSplitLayoutVariables","cancelAnimationFrame","viewMode","originalLineNumbers","querySelector","measuredWidth","getBoundingClientRect","lineNumberWidth","getModifiedEditor","getActiveInsertRange","selection","startLine","endLine","layoutInsertWidget","modifiedEditor","activeRange","modifiedDom","getDomNode","scrollable","lineTop","getTopForLineNumber","scrollTop","getScrollTop","getOption","EditorOption","modifiedRect","containerRect","seamLeft","offsetWidth","offsetLeft","centerTop","top","createDiffEditor","renderSideBySide","renderSideBySideInlineBreakpoint","renderMarginRevertIcon","diffAlgorithm","maxComputationTime","dataset","onDidChangeCursorSelection","disposable","isEmpty","startLineNumber","endLineNumber","onMouseMove","onMouseLeave","onMouseDown","moveDisposable","lineNumber","position","leaveDisposable","scrollDisposable","onDidScrollChange","contextMode","sizing","renderIndicators","hideUnchangedRegions","getOriginalEditor","beforeKey","afterKey","original","modified","_el$2","firstChild","_$insert","Show","when","_el$3","_tmpl$2","_el$4","$$click","preventDefault","stopPropagation","onRequestInsertContext","$$mousedown","_$effect","_p$","_v$","_v$2","_v$3","insertContextLabel","_v$4","_$setStyleProperty","_$setAttribute","o","_$delegateEvents"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5,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,82,83,84,85,86,87,88,89,90,91,92,93]}
1
+ {"version":3,"file":"monaco-viewer-Cc9bWg7I.js","sources":["../../../../../../node_modules/solid-js/web/dist/web.js","../../../../../../node_modules/solid-js/store/dist/store.js","../../../lib/client-identity.ts","../../../../../../node_modules/ms/index.js","../../../../../../node_modules/debug/src/common.js","../../../../../../node_modules/debug/src/browser.js","../../../lib/logger.ts","../../../lib/event-source-handlers.ts","../../../lib/api-client.ts","../../../lib/event-transport.ts","../../../lib/retry-utils.ts","../../../lib/server-events.ts","../../../lib/storage.ts","../../../stores/instance-config.tsx","../../../stores/speech.ts","../../../lib/speech-patch.ts","../../../lib/theme-scheme.ts","../../../lib/color-scheme-presets.ts","../../../lib/model-visibility.ts","../../../stores/preferences.tsx","../../../../../../node_modules/@suid/system/colorManipulator.js","../../../../../../node_modules/@suid/system/breakpoints.js","../../../../../../node_modules/@suid/styled-engine/StyledEngineProvider/StyledEngineContext.jsx","../../../../../../node_modules/@suid/material/colors/common.js","../../../../../../node_modules/@suid/material/colors/red.js","../../../../../../node_modules/@suid/material/colors/purple.js","../../../../../../node_modules/@suid/material/colors/blue.js","../../../../../../node_modules/@suid/material/colors/lightBlue.js","../../../../../../node_modules/@suid/material/colors/green.js","../../../../../../node_modules/@suid/material/colors/orange.js","../../../../../../node_modules/@suid/material/colors/grey.js","../../../../../../node_modules/@suid/utils/deepmerge.js","../../../../../../node_modules/@suid/utils/cloneObject.js","../../../../../../node_modules/@suid/utils/merge.js","../../../../../../node_modules/@suid/material/styles/createPalette.jsx","../../../../../../node_modules/@suid/material/styles/createComponents.jsx","../../../../../../node_modules/@suid/material/styles/createMixins.js","../../../../../../node_modules/@suid/material/styles/createShadows.jsx","../../../../../../node_modules/@suid/material/styles/createTransitions.jsx","../../../../../../node_modules/@suid/material/styles/createTypography.jsx","../../../../../../node_modules/@suid/material/styles/createZIndex.jsx","../../../../../../node_modules/@suid/css/renderMediaQuery.js","../../../../../../node_modules/@suid/system/createTheme/createBreakpoints.js","../../../../../../node_modules/@suid/system/createTheme/createSpacing.js","../../../../../../node_modules/@suid/system/createTheme/shape.js","../../../../../../node_modules/@suid/material/styles/createTheme.jsx","../../../../../../node_modules/@suid/system/makeGetDefaultTheme.js","../../../../../../node_modules/@suid/material/styles/getDefaultTheme.js","../../../../../../node_modules/@suid/system/ThemeContext/ThemeContext.jsx","../../../../../../node_modules/@suid/system/createTheme/createTheme.jsx","../../../../../../node_modules/@suid/system/getDefaultTheme.js","../../../../../../node_modules/@suid/utils/isEmptyObject.js","../../../../../../node_modules/@suid/system/useTheme.js","../../../../../../node_modules/@suid/material/styles/useTheme.js","../../../../../../node_modules/@suid/base/useTheme.js","../../../../../../node_modules/@suid/base/useThemeProps.js","../../../../../../node_modules/@suid/material/styles/ThemeProvider.jsx","../../../../../../node_modules/@suid/system/Dynamic/Dynamic.jsx","../../../../../../node_modules/@suid/styled-engine/mergeStyleProps.js","../../../../../../node_modules/@suid/css/assert.js","../../../../../../node_modules/@suid/css/utils/string.js","../../../../../../node_modules/@suid/css/render.js","../../../../../../node_modules/@suid/css/utils/array.js","../../../../../../node_modules/@suid/css/utils/function.js","../../../../../../node_modules/@suid/css/createStyleObject.js","../../../../../../node_modules/@suid/css/dom/setStyleElementText.js","../../../../../../node_modules/@suid/css/dom/createStyleElement.js","../../../../../../node_modules/@suid/css/dom/registerStyleElementUsage.js","../../../../../../node_modules/@suid/css/dom/appendStyleElement.js","../../../../../../node_modules/@suid/css/dom/findStyleElement.js","../../../../../../node_modules/@suid/css/dom/unregisterStyleElementUsage.js","../../../../../../node_modules/@suid/utils/capitalize.js","../../../../../../node_modules/@suid/utils/debounce.js","../../../../../../node_modules/@suid/utils/getScrollbarSize.js","../../../../../../node_modules/@suid/utils/ownerDocument.js","../../../../../../node_modules/@suid/utils/ownerWindow.js","../../../../../../node_modules/@suid/utils/randomString.js","../../../../../../node_modules/@suid/utils/useIsFocusVisible.js","../../../../../../node_modules/@suid/styled-engine/createStyle.jsx","../../../../../../node_modules/@suid/css/resolve.js","../../../../../../node_modules/@suid/system/resolveStyledProps.js","../../../../../../node_modules/@suid/system/getThemeValue.js","../../../../../../node_modules/@suid/system/spacing.js","../../../../../../node_modules/@suid/system/createSystemProps.js","../../../../../../node_modules/@suid/system/systemProps.js","../../../../../../node_modules/@suid/system/resolveSxProps.js","../../../../../../node_modules/clsx/dist/clsx.mjs","../../../../../../node_modules/@suid/system/createStyled.jsx","../../../../../../node_modules/@suid/material/styles/styled.jsx","../../../../../../node_modules/@suid/base/composeClasses.js","../../../../../../node_modules/@suid/system/inspect.js","../../../../../../node_modules/@suid/base/createComponentFactory.js","../../../../../../node_modules/@suid/material/GlobalStyles/GlobalStyles.jsx","../../../../../../node_modules/@suid/material/CssBaseline/CssBaseline.jsx","../../../lib/theme.tsx","../../../lib/diff-utils.ts","../../../lib/monaco/setup.ts","../../../lib/monaco/model-cache.ts","../../../lib/monaco/language.ts","../../../components/file-viewer/monaco-file-viewer.tsx","../../../components/file-viewer/monaco-diff-viewer.tsx"],"sourcesContent":["import { createMemo, createRoot, createRenderEffect, untrack, sharedConfig, enableHydration, getOwner, createEffect, runWithOwner, createSignal, onCleanup, splitProps } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","import { $PROXY, $TRACK, getListener, batch, createSignal } from 'solid-js';\n\nconst $RAW = Symbol(\"store-raw\"),\n $NODE = Symbol(\"store-node\"),\n $HAS = Symbol(\"store-has\"),\n $SELF = Symbol(\"store-self\");\nfunction wrap$1(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: p = new Proxy(value, proxyTraps$1)\n });\n if (!Array.isArray(value)) {\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (desc[prop].get) {\n Object.defineProperty(value, prop, {\n enumerable: desc[prop].enumerable,\n get: desc[prop].get.bind(p)\n });\n }\n }\n }\n }\n return p;\n}\nfunction isWrappable(obj) {\n let proto;\n return obj != null && typeof obj === \"object\" && (obj[$PROXY] || !(proto = Object.getPrototypeOf(obj)) || proto === Object.prototype || Array.isArray(obj));\n}\nfunction unwrap(item, set = new Set()) {\n let result, unwrapped, v, prop;\n if (result = item != null && item[$RAW]) return result;\n if (!isWrappable(item) || set.has(item)) return item;\n if (Array.isArray(item)) {\n if (Object.isFrozen(item)) item = item.slice(0);else set.add(item);\n for (let i = 0, l = item.length; i < l; i++) {\n v = item[i];\n if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;\n }\n } else {\n if (Object.isFrozen(item)) item = Object.assign({}, item);else set.add(item);\n const keys = Object.keys(item),\n desc = Object.getOwnPropertyDescriptors(item);\n for (let i = 0, l = keys.length; i < l; i++) {\n prop = keys[i];\n if (desc[prop].get) continue;\n v = item[prop];\n if ((unwrapped = unwrap(v, set)) !== v) item[prop] = unwrapped;\n }\n }\n return item;\n}\nfunction getNodes(target, symbol) {\n let nodes = target[symbol];\n if (!nodes) Object.defineProperty(target, symbol, {\n value: nodes = Object.create(null)\n });\n return nodes;\n}\nfunction getNode(nodes, property, value) {\n if (nodes[property]) return nodes[property];\n const [s, set] = createSignal(value, {\n equals: false,\n internal: true\n });\n s.$ = set;\n return nodes[property] = s;\n}\nfunction proxyDescriptor$1(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE) return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n return desc;\n}\nfunction trackSelf(target) {\n getListener() && getNode(getNodes(target, $NODE), $SELF)();\n}\nfunction ownKeys(target) {\n trackSelf(target);\n return Reflect.ownKeys(target);\n}\nconst proxyTraps$1 = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n if (getListener() && (typeof value !== \"function\" || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();\n }\n return isWrappable(value) ? wrap$1(value) : value;\n },\n has(target, property) {\n if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === \"__proto__\") return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set() {\n return true;\n },\n deleteProperty() {\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor$1\n};\nfunction setProperty(state, property, value, deleting = false) {\n if (!deleting && state[property] === value) return;\n const prev = state[property],\n len = state.length;\n if (value === undefined) {\n delete state[property];\n if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();\n } else {\n state[property] = value;\n if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();\n }\n let nodes = getNodes(state, $NODE),\n node;\n if (node = getNode(nodes, property, prev)) node.$(() => value);\n if (Array.isArray(state) && state.length !== len) {\n for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();\n (node = getNode(nodes, \"length\", len)) && node.$(state.length);\n }\n (node = nodes[$SELF]) && node.$();\n}\nfunction mergeStoreNode(state, value) {\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n setProperty(state, key, value[key]);\n }\n}\nfunction updateArray(current, next) {\n if (typeof next === \"function\") next = next(current);\n next = unwrap(next);\n if (Array.isArray(next)) {\n if (current === next) return;\n let i = 0,\n len = next.length;\n for (; i < len; i++) {\n const value = next[i];\n if (current[i] !== value) setProperty(current, i, value);\n }\n setProperty(current, \"length\", len);\n } else mergeStoreNode(current, next);\n}\nfunction updatePath(current, path, traversed = []) {\n let part,\n prev = current;\n if (path.length > 1) {\n part = path.shift();\n const partType = typeof part,\n isArray = Array.isArray(current);\n if (Array.isArray(part)) {\n for (let i = 0; i < part.length; i++) {\n updatePath(current, [part[i]].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"function\") {\n for (let i = 0; i < current.length; i++) {\n if (part(current[i], i)) updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"object\") {\n const {\n from = 0,\n to = current.length - 1,\n by = 1\n } = part;\n for (let i = from; i <= to; i += by) {\n updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (path.length > 1) {\n updatePath(current[part], path, [part].concat(traversed));\n return;\n }\n prev = current[part];\n traversed = [part].concat(traversed);\n }\n let value = path[0];\n if (typeof value === \"function\") {\n value = value(prev, traversed);\n if (value === prev) return;\n }\n if (part === undefined && value == undefined) return;\n value = unwrap(value);\n if (part === undefined || isWrappable(prev) && isWrappable(value) && !Array.isArray(value)) {\n mergeStoreNode(prev, value);\n } else setProperty(current, part, value);\n}\nfunction createStore(...[store, options]) {\n const unwrappedStore = unwrap(store || {});\n const isArray = Array.isArray(unwrappedStore);\n const wrappedStore = wrap$1(unwrappedStore);\n function setStore(...args) {\n batch(() => {\n isArray && args.length === 1 ? updateArray(unwrappedStore, args[0]) : updatePath(unwrappedStore, args);\n });\n }\n return [wrappedStore, setStore];\n}\n\nfunction proxyDescriptor(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (!desc || desc.get || desc.set || !desc.configurable || property === $PROXY || property === $NODE) return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n desc.set = v => target[$PROXY][property] = v;\n return desc;\n}\nconst proxyTraps = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n const isFunction = typeof value === \"function\";\n if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get)) value = getNode(nodes, property, value)();else if (value != null && isFunction && value === Array.prototype[property]) {\n return (...args) => batch(() => Array.prototype[property].apply(receiver, args));\n }\n }\n return isWrappable(value) ? wrap(value) : value;\n },\n has(target, property) {\n if (property === $RAW || property === $PROXY || property === $TRACK || property === $NODE || property === $HAS || property === \"__proto__\") return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set(target, property, value) {\n batch(() => setProperty(target, property, unwrap(value)));\n return true;\n },\n deleteProperty(target, property) {\n batch(() => setProperty(target, property, undefined, true));\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor\n};\nfunction wrap(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: p = new Proxy(value, proxyTraps)\n });\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n const proto = Object.getPrototypeOf(value);\n const isClass = proto !== null && value !== null && typeof value === \"object\" && !Array.isArray(value) && proto !== Object.prototype;\n if (isClass) {\n let curProto = proto;\n while (curProto != null) {\n const descriptors = Object.getOwnPropertyDescriptors(curProto);\n keys.push(...Object.keys(descriptors));\n Object.assign(desc, descriptors);\n curProto = Object.getPrototypeOf(curProto);\n }\n }\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (isClass && prop === \"constructor\") continue;\n if (desc[prop].get) {\n const get = desc[prop].get.bind(p);\n Object.defineProperty(value, prop, {\n get,\n configurable: true\n });\n }\n if (desc[prop].set) {\n const og = desc[prop].set,\n set = v => batch(() => og.call(p, v));\n Object.defineProperty(value, prop, {\n set,\n configurable: true\n });\n }\n }\n }\n return p;\n}\nfunction createMutable(state, options) {\n const unwrappedStore = unwrap(state || {});\n const wrappedStore = wrap(unwrappedStore);\n return wrappedStore;\n}\nfunction modifyMutable(state, modifier) {\n batch(() => modifier(unwrap(state)));\n}\n\nconst $ROOT = Symbol(\"store-root\");\nfunction applyState(target, parent, property, merge, key) {\n const previous = parent[property];\n if (target === previous) return;\n const isArray = Array.isArray(target);\n if (property !== $ROOT && (!isWrappable(target) || !isWrappable(previous) || isArray !== Array.isArray(previous) || key && target[key] !== previous[key])) {\n setProperty(parent, property, target);\n return;\n }\n if (isArray) {\n if (target.length && previous.length && (!merge || key && target[0] && target[0][key] != null)) {\n let i, j, start, end, newEnd, item, newIndicesNext, keyVal;\n for (start = 0, end = Math.min(previous.length, target.length); start < end && (previous[start] === target[start] || key && previous[start] && target[start] && previous[start][key] && previous[start][key] === target[start][key]); start++) {\n applyState(target[start], previous, start, merge, key);\n }\n const temp = new Array(target.length),\n newIndices = new Map();\n for (end = previous.length - 1, newEnd = target.length - 1; end >= start && newEnd >= start && (previous[end] === target[newEnd] || key && previous[end] && target[newEnd] && previous[end][key] && previous[end][key] === target[newEnd][key]); end--, newEnd--) {\n temp[newEnd] = previous[end];\n }\n if (start > newEnd || start > end) {\n for (j = start; j <= newEnd; j++) setProperty(previous, j, target[j]);\n for (; j < target.length; j++) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = target[j];\n keyVal = key && item ? item[key] : item;\n i = newIndices.get(keyVal);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(keyVal, j);\n }\n for (i = start; i <= end; i++) {\n item = previous[i];\n keyVal = key && item ? item[key] : item;\n j = newIndices.get(keyVal);\n if (j !== undefined && j !== -1) {\n temp[j] = previous[i];\n j = newIndicesNext[j];\n newIndices.set(keyVal, j);\n }\n }\n for (j = start; j < target.length; j++) {\n if (j in temp) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n } else setProperty(previous, j, target[j]);\n }\n } else {\n for (let i = 0, len = target.length; i < len; i++) {\n applyState(target[i], previous, i, merge, key);\n }\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n const targetKeys = Object.keys(target);\n for (let i = 0, len = targetKeys.length; i < len; i++) {\n applyState(target[targetKeys[i]], previous, targetKeys[i], merge, key);\n }\n const previousKeys = Object.keys(previous);\n for (let i = 0, len = previousKeys.length; i < len; i++) {\n if (target[previousKeys[i]] === undefined) setProperty(previous, previousKeys[i], undefined);\n }\n}\nfunction reconcile(value, options = {}) {\n const {\n merge,\n key = \"id\"\n } = options,\n v = unwrap(value);\n return state => {\n if (!isWrappable(state) || !isWrappable(v)) return v;\n const res = applyState(v, {\n [$ROOT]: state\n }, $ROOT, merge, key);\n return res === undefined ? state : res;\n };\n}\nconst producers = new WeakMap();\nconst setterTraps = {\n get(target, property) {\n if (property === $RAW) return target;\n const value = target[property];\n let proxy;\n return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value;\n },\n set(target, property, value) {\n setProperty(target, property, unwrap(value));\n return true;\n },\n deleteProperty(target, property) {\n setProperty(target, property, undefined, true);\n return true;\n }\n};\nfunction produce(fn) {\n return state => {\n if (isWrappable(state)) {\n let proxy;\n if (!(proxy = producers.get(state))) {\n producers.set(state, proxy = new Proxy(state, setterTraps));\n }\n fn(proxy);\n }\n return state;\n };\n}\n\nconst DEV = undefined;\n\nexport { $RAW, DEV, createMutable, createStore, modifyMutable, produce, reconcile, unwrap };\n","const CLIENT_ID_STORAGE_KEY = \"codenomad.client-id\"\nconst CONNECTION_ID_STORAGE_KEY = \"codenomad.connection-id\"\n\nlet cachedClientId: string | null = null\nlet cachedConnectionId: string | null = null\n\nexport function getClientIdentity(): { clientId: string; connectionId: string } {\n return {\n clientId: getOrCreateClientId(),\n connectionId: getOrCreateConnectionId(),\n }\n}\n\nfunction getOrCreateClientId(): string {\n if (cachedClientId) return cachedClientId\n cachedClientId = getOrCreateStoredValue(CLIENT_ID_STORAGE_KEY, window.localStorage)\n return cachedClientId\n}\n\nfunction getOrCreateConnectionId(): string {\n const nativeWindowId = window.__CODENOMAD_WINDOW_ID__?.trim()\n if (nativeWindowId) return nativeWindowId\n if (cachedConnectionId) return cachedConnectionId\n cachedConnectionId = getOrCreateStoredValue(CONNECTION_ID_STORAGE_KEY, window.sessionStorage)\n return cachedConnectionId\n}\n\nfunction getOrCreateStoredValue(key: string, storage: Storage): string {\n if (typeof window === \"undefined\") {\n return generateUUID()\n }\n\n try {\n const existing = storage.getItem(key)\n if (existing && existing.trim()) {\n return existing.trim()\n }\n } catch {\n return generateUUID()\n }\n\n const next = generateUUID()\n try {\n storage.setItem(key, next)\n } catch {\n // Ignore storage failures and fall back to the in-memory value.\n }\n return next\n}\n\nfunction generateUUID(): string {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID()\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n const random = (Math.random() * 16) | 0\n const value = char === \"x\" ? random : (random & 0x3) | 0x8\n return value.toString(16)\n })\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","import debug from \"debug\"\n\nexport type LoggerNamespace = \"sse\" | \"api\" | \"session\" | \"actions\" | \"foreground-refresh\"\n\ninterface Logger {\n log: (...args: unknown[]) => void\n info: (...args: unknown[]) => void\n warn: (...args: unknown[]) => void\n error: (...args: unknown[]) => void\n}\n\nexport interface NamespaceState {\n name: LoggerNamespace\n enabled: boolean\n}\n\nexport interface LoggerControls {\n listLoggerNamespaces: () => NamespaceState[]\n enableLogger: (namespace: LoggerNamespace) => void\n disableLogger: (namespace: LoggerNamespace) => void\n enableAllLoggers: () => void\n disableAllLoggers: () => void\n}\n\nconst KNOWN_NAMESPACES: LoggerNamespace[] = [\"sse\", \"api\", \"session\", \"actions\", \"foreground-refresh\"]\nconst STORAGE_KEY = \"opencode:logger:namespaces\"\n\nconst namespaceLoggers = new Map<LoggerNamespace, Logger>()\nconst enabledNamespaces = new Set<LoggerNamespace>()\nconst rawConsole = typeof globalThis !== \"undefined\" ? globalThis.console : undefined\n\nfunction applyEnabledNamespaces(): void {\n if (enabledNamespaces.size === 0) {\n debug.disable()\n } else {\n debug.enable(Array.from(enabledNamespaces).join(\",\"))\n }\n}\n\nfunction persistEnabledNamespaces(): void {\n if (typeof window === \"undefined\" || !window?.localStorage) return\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(Array.from(enabledNamespaces)))\n } catch (error) {\n rawConsole?.warn?.(\"Failed to persist logger namespaces\", error)\n }\n}\n\nfunction hydrateNamespacesFromStorage(): void {\n if (typeof window === \"undefined\" || !window?.localStorage) return\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY)\n if (!stored) return\n const parsed: unknown = JSON.parse(stored)\n if (!Array.isArray(parsed)) return\n for (const name of parsed) {\n if (KNOWN_NAMESPACES.includes(name as LoggerNamespace)) {\n enabledNamespaces.add(name as LoggerNamespace)\n }\n }\n } catch (error) {\n rawConsole?.warn?.(\"Failed to hydrate logger namespaces\", error)\n }\n}\n\nhydrateNamespacesFromStorage()\napplyEnabledNamespaces()\n\nfunction buildLogger(namespace: LoggerNamespace): Logger {\n const base = debug(namespace)\n const baseLogger: (...args: any[]) => void = base\n const formatAndLog = (level: string, args: any[]) => {\n baseLogger(level, ...args)\n }\n return {\n log: (...args: any[]) => baseLogger(...args),\n info: (...args: any[]) => baseLogger(...args),\n warn: (...args: any[]) => formatAndLog(\"[warn]\", args),\n error: (...args: any[]) => formatAndLog(\"[error]\", args),\n }\n}\n\nfunction getLogger(namespace: LoggerNamespace): Logger {\n if (!KNOWN_NAMESPACES.includes(namespace)) {\n throw new Error(`Unknown logger namespace: ${namespace}`)\n }\n if (!namespaceLoggers.has(namespace)) {\n namespaceLoggers.set(namespace, buildLogger(namespace))\n }\n return namespaceLoggers.get(namespace)!\n}\n\nfunction listLoggerNamespaces(): NamespaceState[] {\n return KNOWN_NAMESPACES.map((name) => ({ name, enabled: enabledNamespaces.has(name) }))\n}\n\nfunction enableLogger(namespace: LoggerNamespace): void {\n if (!KNOWN_NAMESPACES.includes(namespace)) {\n throw new Error(`Unknown logger namespace: ${namespace}`)\n }\n if (enabledNamespaces.has(namespace)) return\n enabledNamespaces.add(namespace)\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nfunction disableLogger(namespace: LoggerNamespace): void {\n if (!KNOWN_NAMESPACES.includes(namespace)) {\n throw new Error(`Unknown logger namespace: ${namespace}`)\n }\n if (!enabledNamespaces.has(namespace)) return\n enabledNamespaces.delete(namespace)\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nfunction disableAllLoggers(): void {\n enabledNamespaces.clear()\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nfunction enableAllLoggers(): void {\n KNOWN_NAMESPACES.forEach((namespace) => enabledNamespaces.add(namespace))\n persistEnabledNamespaces()\n applyEnabledNamespaces()\n}\n\nconst loggerControls: LoggerControls = {\n listLoggerNamespaces,\n enableLogger,\n disableLogger,\n enableAllLoggers,\n disableAllLoggers,\n}\n\nfunction exposeLoggerControls(): void {\n if (typeof window === \"undefined\") return\n window.codenomadLogger = loggerControls\n}\n\nexposeLoggerControls()\n\nexport {\n getLogger,\n listLoggerNamespaces,\n enableLogger,\n disableLogger,\n enableAllLoggers,\n disableAllLoggers,\n}\n","import type { WorkspaceEventPayload } from \"../../../server/src/api-types\"\n\ntype EventSourceLogger = {\n warn: (message: string) => void\n error: (message: string, error?: unknown) => void\n}\n\ntype EventSourceWithClose = EventSource & {\n onclose?: () => void\n}\n\ninterface EventSourceHandlerOptions {\n onEvent: (event: WorkspaceEventPayload) => void\n onError?: () => void\n onPing?: (payload: { ts?: number }) => void\n logger: EventSourceLogger\n}\n\nexport function attachEventSourceHandlers(source: EventSource, options: EventSourceHandlerOptions) {\n let disconnected = false\n\n source.onmessage = (event) => {\n try {\n const payload = JSON.parse(event.data) as WorkspaceEventPayload\n options.onEvent(payload)\n } catch (error) {\n options.logger.error(\"Failed to parse event\", error)\n }\n }\n\n const handleDisconnect = (reason: string) => {\n if (disconnected) {\n return\n }\n disconnected = true\n options.logger.warn(reason)\n options.onError?.()\n }\n\n source.onerror = () => {\n handleDisconnect(\"EventSource error, closing stream\")\n }\n\n ;(source as EventSourceWithClose).onclose = () => {\n handleDisconnect(\"EventSource closed\")\n }\n\n source.addEventListener(\"close\", () => {\n handleDisconnect(\"EventSource closed\")\n })\n\n source.addEventListener(\"codenomad.client.ping\", (event: MessageEvent) => {\n try {\n const payload = event.data ? (JSON.parse(event.data) as { ts?: number }) : {}\n options.onPing?.(payload)\n } catch (error) {\n options.logger.error(\"Failed to parse ping event\", error)\n }\n })\n}\n","import type {\n BinaryValidationResult,\n ConfigFileContentRequest,\n ConfigFileContentResponse,\n ConfigFileListResponse,\n FileSystemEntry,\n FileSystemCreateFolderResponse,\n FileSystemFileContentResponse,\n FileSystemListResponse,\n InstanceData,\n OpenCodeUpdateResponse,\n OpenCodeUpdateStatus,\n SpeechCapabilitiesResponse,\n SpeechSynthesisResponse,\n SpeechTranscriptionResponse,\n SideCar,\n PreviewSession,\n ProviderUsageResponse,\n ServerMeta,\n RemoteProxySessionCreateRequest,\n RemoteProxySessionCreateResponse,\n RemoteServerProbeRequest,\n RemoteServerProbeResponse,\n YoloStateResponse,\n WorkspaceCloneRequest,\n WorkspaceCloneResponse,\n WorktreeGitCommitRequest,\n WorktreeGitCommitResponse,\n WorktreeGitDiffRequest,\n WorktreeGitMutationResponse,\n WorktreeGitPathsRequest,\n WorkspaceCreateRequest,\n WorkspaceCreateResponse,\n WorkspaceDescriptor,\n WorkspaceFileResponse,\n WorkspaceFileSearchResponse,\n\n WorkspaceLogEntry,\n WorkspaceEventPayload,\n WorkspaceEventType,\n WorktreeListResponse,\n WorktreeCreateRequest,\n WorktreeGitDiffResponse,\n WorktreeGitStatusResponse,\n} from \"../../../server/src/api-types\"\nimport { getClientIdentity } from \"./client-identity\"\nimport { getLogger } from \"./logger\"\nimport { attachEventSourceHandlers } from \"./event-source-handlers\"\n\nconst RUNTIME_BASE = typeof window !== \"undefined\" ? window.location?.origin : undefined\nconst DEFAULT_BASE = typeof window !== \"undefined\" ? window.__CODENOMAD_API_BASE__ ?? RUNTIME_BASE : undefined\nconst DEFAULT_EVENTS_PATH = typeof window !== \"undefined\" ? window.__CODENOMAD_EVENTS_URL__ ?? \"/api/events\" : \"/api/events\"\nconst API_BASE = import.meta.env?.VITE_CODENOMAD_API_BASE ?? DEFAULT_BASE\nconst EVENTS_URL = buildEventsUrl(API_BASE, DEFAULT_EVENTS_PATH)\n\nexport const CODENOMAD_API_BASE = API_BASE\n\nfunction buildEventsUrl(base: string | undefined, path: string): string {\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path\n }\n if (base) {\n const normalized = path.startsWith(\"/\") ? path : `/${path}`\n return `${base}${normalized}`\n }\n return path\n}\n\nconst httpLogger = getLogger(\"api\")\nconst sseLogger = getLogger(\"sse\")\n\nfunction normalizeHeaders(headers: HeadersInit | undefined): Record<string, string> {\n const output: Record<string, string> = {}\n if (!headers) return output\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n output[key] = value\n })\n return output\n }\n\n if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n output[key] = value\n }\n return output\n }\n\n return { ...headers }\n}\n\nfunction logHttp(message: string, context?: Record<string, unknown>) {\n if (context) {\n httpLogger.info(message, context)\n return\n }\n httpLogger.info(message)\n}\n\nasync function readErrorMessage(response: Response): Promise<string> {\n const text = await response.text()\n if (!text) return `Request failed with ${response.status}`\n\n try {\n const parsed = JSON.parse(text) as { error?: unknown; message?: unknown }\n if (typeof parsed?.error === \"string\" && parsed.error.trim()) {\n return parsed.error\n }\n if (typeof parsed?.message === \"string\" && parsed.message.trim()) {\n return parsed.message\n }\n } catch {\n // Keep the original body for plain-text responses.\n }\n\n return text\n}\n\nasync function request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = API_BASE ? new URL(path, API_BASE).toString() : path\n const headers = normalizeHeaders(init?.headers)\n if (init?.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const method = (init?.method ?? \"GET\").toUpperCase()\n const startedAt = Date.now()\n logHttp(`${method} ${path}`)\n\n try {\n const response = await fetch(url, { ...init, headers, credentials: init?.credentials ?? \"include\" })\n if (!response.ok) {\n const message = await readErrorMessage(response)\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: Date.now() - startedAt, error: message })\n throw new Error(message || `Request failed with ${response.status}`)\n }\n const duration = Date.now() - startedAt\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: duration })\n if (response.status === 204) {\n return undefined as T\n }\n return (await response.json()) as T\n } catch (error) {\n logHttp(`${method} ${path} failed`, { durationMs: Date.now() - startedAt, error })\n throw error\n }\n}\n\nasync function requestRaw(path: string, init?: RequestInit): Promise<Response> {\n const url = API_BASE ? new URL(path, API_BASE).toString() : path\n const headers = normalizeHeaders(init?.headers)\n if (init?.body !== undefined && !headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\"\n }\n\n const method = (init?.method ?? \"GET\").toUpperCase()\n const startedAt = Date.now()\n logHttp(`${method} ${path}`)\n\n const response = await fetch(url, { ...init, headers, credentials: init?.credentials ?? \"include\" })\n if (!response.ok) {\n const message = await readErrorMessage(response)\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: Date.now() - startedAt, error: message })\n throw new Error(message || `Request failed with ${response.status}`)\n }\n\n logHttp(`${method} ${path} -> ${response.status}`, { durationMs: Date.now() - startedAt })\n return response\n}\n\n\nexport const serverApi = {\n fetchWorkspaces(): Promise<WorkspaceDescriptor[]> {\n return request<WorkspaceDescriptor[]>(\"/api/workspaces\")\n },\n\n fetchProviderUsage(providerId: string, modelId?: string): Promise<ProviderUsageResponse> {\n const params = new URLSearchParams()\n if (modelId) params.set(\"modelId\", modelId)\n const query = params.toString()\n return request<ProviderUsageResponse>(`/api/usage/${encodeURIComponent(providerId)}${query ? `?${query}` : \"\"}`)\n },\n\n fetchWorktrees(id: string): Promise<WorktreeListResponse> {\n return request<WorktreeListResponse>(`/api/workspaces/${encodeURIComponent(id)}/worktrees`)\n },\n\n createWorktree(id: string, payload: WorktreeCreateRequest): Promise<{ slug: string; directory: string; branch?: string }> {\n return request<{ slug: string; directory: string; branch?: string }>(`/api/workspaces/${encodeURIComponent(id)}/worktrees`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n\n deleteWorktree(id: string, slug: string, options?: { force?: boolean }): Promise<void> {\n const params = new URLSearchParams()\n if (options?.force) {\n params.set(\"force\", \"true\")\n }\n const suffix = params.toString() ? `?${params.toString()}` : \"\"\n return request(`/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}${suffix}`, {\n method: \"DELETE\",\n })\n },\n\n createWorkspace(payload: WorkspaceCreateRequest, options?: { signal?: AbortSignal }): Promise<WorkspaceCreateResponse> {\n return request<WorkspaceCreateResponse>(\"/api/workspaces\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n signal: options?.signal,\n })\n },\n cancelWorkspaceCreation(requestId: string): Promise<void> {\n return request(\"/api/workspaces/creation/cancel\", {\n method: \"POST\",\n body: JSON.stringify({ requestId }),\n })\n },\n releaseWorkspaceCreation(id: string, requestId: string): Promise<void> {\n return request(`/api/workspaces/${encodeURIComponent(id)}/creation/release`, {\n method: \"POST\",\n body: JSON.stringify({ requestId }),\n })\n },\n fetchSidecars(): Promise<{ sidecars: SideCar[] }> {\n return request<{ sidecars: SideCar[] }>(\"/api/sidecars\")\n },\n createSidecar(payload: {\n kind: \"port\"\n name: string\n port: number\n insecure: boolean\n prefixMode: \"strip\" | \"preserve\"\n }): Promise<SideCar> {\n return request<SideCar>(\"/api/sidecars\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n updateSidecar(\n id: string,\n payload: Partial<{ name: string; port: number; insecure: boolean; prefixMode: \"strip\" | \"preserve\" }>,\n ): Promise<SideCar> {\n return request<SideCar>(`/api/sidecars/${encodeURIComponent(id)}`, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n })\n },\n deleteSidecar(id: string): Promise<void> {\n return request(`/api/sidecars/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n createPreview(payload: { sessionId: string; url: string }): Promise<PreviewSession> {\n return request<PreviewSession>(\"/api/previews\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n deletePreview(token: string): Promise<void> {\n return request(`/api/previews/${encodeURIComponent(token)}`, { method: \"DELETE\" })\n },\n fetchServerMeta(): Promise<ServerMeta> {\n return request<ServerMeta>(\"/api/meta\")\n },\n probeRemoteServer(payload: RemoteServerProbeRequest): Promise<RemoteServerProbeResponse> {\n return request<RemoteServerProbeResponse>(\"/api/remote-servers/probe\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n createRemoteProxySession(payload: RemoteProxySessionCreateRequest): Promise<RemoteProxySessionCreateResponse> {\n return request<RemoteProxySessionCreateResponse>(\"/api/remote-proxy/sessions\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n deleteRemoteProxySession(id: string): Promise<void> {\n return request(`/api/remote-proxy/sessions/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n fetchAuthStatus(): Promise<{ authenticated: boolean; username?: string; passwordUserProvided?: boolean }> {\n return request<{ authenticated: boolean; username?: string; passwordUserProvided?: boolean }>(\"/api/auth/status\")\n },\n listConfigFiles(): Promise<ConfigFileListResponse> {\n return request<ConfigFileListResponse>(\"/api/config-files\")\n },\n readConfigFile(id: string): Promise<ConfigFileContentResponse> {\n return request<ConfigFileContentResponse>(`/api/config-files/${encodeURIComponent(id)}/content`)\n },\n writeConfigFile(id: string, contents: string): Promise<void> {\n const body: ConfigFileContentRequest = { contents }\n return request(`/api/config-files/${encodeURIComponent(id)}/content`, {\n method: \"PUT\",\n body: JSON.stringify(body),\n })\n },\n setServerPassword(password: string): Promise<{ ok: boolean; username: string; passwordUserProvided: boolean }> {\n return request<{ ok: boolean; username: string; passwordUserProvided: boolean }>(\"/api/auth/password\", {\n method: \"POST\",\n body: JSON.stringify({ password }),\n })\n },\n deleteWorkspace(id: string): Promise<void> {\n return request(`/api/workspaces/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n cloneWorkspaceRepository(payload: WorkspaceCloneRequest): Promise<WorkspaceCloneResponse> {\n return request<WorkspaceCloneResponse>(\"/api/workspaces/clone\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n listWorkspaceFiles(id: string, relativePath = \".\"): Promise<FileSystemEntry[]> {\n const params = new URLSearchParams({ path: relativePath })\n return request<FileSystemEntry[]>(`/api/workspaces/${encodeURIComponent(id)}/files?${params.toString()}`)\n },\n searchWorkspaceFiles(\n id: string,\n query: string,\n opts?: { limit?: number; type?: \"file\" | \"directory\" | \"all\" },\n ): Promise<WorkspaceFileSearchResponse> {\n const trimmed = query.trim()\n if (!trimmed) {\n return Promise.resolve([])\n }\n const params = new URLSearchParams({ q: trimmed })\n if (opts?.limit) {\n params.set(\"limit\", String(opts.limit))\n }\n if (opts?.type) {\n params.set(\"type\", opts.type)\n }\n return request<WorkspaceFileSearchResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/files/search?${params.toString()}`,\n )\n },\n readWorkspaceFile(id: string, relativePath: string, options?: { encoding?: \"utf-8\" | \"base64\" }): Promise<WorkspaceFileResponse> {\n const params = new URLSearchParams({ path: relativePath })\n if (options?.encoding) {\n params.set(\"encoding\", options.encoding)\n }\n return request<WorkspaceFileResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/files/content?${params.toString()}`,\n )\n },\n writeWorkspaceFile(id: string, relativePath: string, contents: string, options?: { worktree?: string }): Promise<void> {\n const params = new URLSearchParams({ path: relativePath })\n if (options?.worktree && options.worktree !== \"root\") {\n params.set(\"worktree\", options.worktree)\n }\n return request(\n `/api/workspaces/${encodeURIComponent(id)}/files/content?${params.toString()}`,\n {\n method: \"PUT\",\n body: JSON.stringify({ contents }),\n },\n )\n },\n fetchWorktreeGitStatus(id: string, slug: string): Promise<WorktreeGitStatusResponse> {\n return request<WorktreeGitStatusResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-status`,\n )\n },\n fetchWorktreeGitDiff(id: string, slug: string, requestPayload: WorktreeGitDiffRequest): Promise<WorktreeGitDiffResponse> {\n const params = new URLSearchParams({ path: requestPayload.path, scope: requestPayload.scope })\n if (requestPayload.originalPath) {\n params.set(\"originalPath\", requestPayload.originalPath)\n }\n return request<WorktreeGitDiffResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-diff?${params.toString()}`,\n )\n },\n stageWorktreeGitPaths(id: string, slug: string, payload: WorktreeGitPathsRequest): Promise<WorktreeGitMutationResponse> {\n return request<WorktreeGitMutationResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-stage`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n },\n )\n },\n unstageWorktreeGitPaths(id: string, slug: string, payload: WorktreeGitPathsRequest): Promise<WorktreeGitMutationResponse> {\n return request<WorktreeGitMutationResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-unstage`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n },\n )\n },\n commitWorktreeGitChanges(id: string, slug: string, payload: WorktreeGitCommitRequest): Promise<WorktreeGitCommitResponse> {\n return request<WorktreeGitCommitResponse>(\n `/api/workspaces/${encodeURIComponent(id)}/worktrees/${encodeURIComponent(slug)}/git-commit`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n },\n )\n },\n\n fetchConfigOwner<T extends Record<string, any> = Record<string, any>>(owner: string): Promise<T> {\n return request<T>(`/api/storage/config/${encodeURIComponent(owner)}`)\n },\n patchConfigOwner<T extends Record<string, any> = Record<string, any>>(owner: string, patch: unknown): Promise<T> {\n return request<T>(`/api/storage/config/${encodeURIComponent(owner)}`, {\n method: \"PATCH\",\n body: JSON.stringify(patch ?? {}),\n })\n },\n fetchStateOwner<T extends Record<string, any> = Record<string, any>>(owner: string): Promise<T> {\n return request<T>(`/api/storage/state/${encodeURIComponent(owner)}`)\n },\n patchStateOwner<T extends Record<string, any> = Record<string, any>>(owner: string, patch: unknown): Promise<T> {\n return request<T>(`/api/storage/state/${encodeURIComponent(owner)}`, {\n method: \"PATCH\",\n body: JSON.stringify(patch ?? {}),\n })\n },\n\n validateBinary(path: string): Promise<BinaryValidationResult> {\n return request<BinaryValidationResult>(\"/api/storage/binaries/validate\", {\n method: \"POST\",\n body: JSON.stringify({ path }),\n })\n },\n fetchOpenCodeUpdateStatus(): Promise<OpenCodeUpdateStatus> {\n return request<OpenCodeUpdateStatus>(\"/api/opencode/update\")\n },\n updateOpenCode(): Promise<OpenCodeUpdateResponse> {\n return request<OpenCodeUpdateResponse>(\"/api/opencode/update\", { method: \"POST\" })\n },\n fetchSpeechCapabilities(): Promise<SpeechCapabilitiesResponse> {\n return request<SpeechCapabilitiesResponse>(\"/api/speech/capabilities\")\n },\n transcribeAudio(payload: {\n audioBase64: string\n mimeType: string\n filename?: string\n language?: string\n prompt?: string\n }): Promise<SpeechTranscriptionResponse> {\n return request<SpeechTranscriptionResponse>(\"/api/speech/transcribe\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n synthesizeSpeech(payload: { text: string; format?: \"mp3\" | \"wav\" | \"opus\" | \"aac\" }): Promise<SpeechSynthesisResponse> {\n return request<SpeechSynthesisResponse>(\"/api/speech/synthesize\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n },\n synthesizeSpeechStream(\n payload: { text: string; format?: \"mp3\" | \"wav\" | \"opus\" | \"aac\" },\n signal?: AbortSignal,\n ): Promise<Response> {\n return requestRaw(\"/api/speech/synthesize/stream\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n signal,\n })\n },\n listFileSystem(path?: string, options?: { includeFiles?: boolean }): Promise<FileSystemListResponse> {\n const params = new URLSearchParams()\n if (path && path !== \".\") {\n params.set(\"path\", path)\n }\n if (options?.includeFiles !== undefined) {\n params.set(\"includeFiles\", String(options.includeFiles))\n }\n const query = params.toString()\n return request<FileSystemListResponse>(query ? `/api/filesystem?${query}` : \"/api/filesystem\")\n },\n\n createFileSystemFolder(parentPath: string | undefined, name: string): Promise<FileSystemCreateFolderResponse> {\n return request<FileSystemCreateFolderResponse>(\"/api/filesystem/folders\", {\n method: \"POST\",\n body: JSON.stringify({ parentPath, name }),\n })\n },\n readFileSystemFile(path: string, options?: { encoding?: \"utf-8\" | \"base64\" }): Promise<FileSystemFileContentResponse> {\n const params = new URLSearchParams({ path })\n if (options?.encoding) {\n params.set(\"encoding\", options.encoding)\n }\n return request<FileSystemFileContentResponse>(`/api/filesystem/files/content?${params.toString()}`)\n },\n readInstanceData(id: string): Promise<InstanceData> {\n return request<InstanceData>(`/api/storage/instances/${encodeURIComponent(id)}`)\n },\n writeInstanceData(id: string, data: InstanceData): Promise<void> {\n return request(`/api/storage/instances/${encodeURIComponent(id)}`, {\n method: \"PUT\",\n body: JSON.stringify(data),\n })\n },\n deleteInstanceData(id: string): Promise<void> {\n return request(`/api/storage/instances/${encodeURIComponent(id)}`, { method: \"DELETE\" })\n },\n getYoloState(instanceId: string, sessionId: string): Promise<YoloStateResponse> {\n return request<YoloStateResponse>(\n `/workspaces/${encodeURIComponent(instanceId)}/yolo/sessions/${encodeURIComponent(sessionId)}`,\n )\n },\n toggleYolo(instanceId: string, sessionId: string): Promise<YoloStateResponse> {\n return request<YoloStateResponse>(\n `/workspaces/${encodeURIComponent(instanceId)}/yolo/sessions/${encodeURIComponent(sessionId)}/toggle`,\n { method: \"POST\" },\n )\n },\n sendClientConnectionPong(payload: { clientId: string; connectionId: string; pingTs?: number }, signal?: AbortSignal): Promise<void> {\n const init: RequestInit = {\n method: \"POST\",\n body: JSON.stringify(payload),\n }\n if (signal) {\n init.signal = signal\n }\n return request<void>(\"/api/client-connections/pong\", init)\n },\n connectEvents(\n onEvent: (event: WorkspaceEventPayload) => void,\n onError?: () => void,\n onPing?: (payload: { ts?: number }) => void,\n ) {\n const identity = getClientIdentity()\n const url = buildClientEventsUrl(identity)\n sseLogger.info(`Connecting to ${url}`)\n const source = new EventSource(url, { withCredentials: true } as any)\n attachEventSourceHandlers(source, { onEvent, onError, onPing, logger: sseLogger })\n return source\n },\n}\n\nfunction buildClientEventsUrl(identity: { clientId: string; connectionId: string }): string {\n const url = new URL(EVENTS_URL, typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\")\n url.searchParams.set(\"clientId\", identity.clientId)\n url.searchParams.set(\"connectionId\", identity.connectionId)\n if (EVENTS_URL.startsWith(\"http://\") || EVENTS_URL.startsWith(\"https://\")) {\n return url.toString()\n }\n return `${url.pathname}${url.search}`\n}\n\nexport type { WorkspaceDescriptor, WorkspaceLogEntry, WorkspaceEventPayload, WorkspaceEventType, SideCar }\n","import type { WorkspaceEventPayload } from \"../../../server/src/api-types\"\nimport { serverApi } from \"./api-client\"\n\nexport interface WorkspaceEventTransportCallbacks {\n onBatch: (events: WorkspaceEventPayload[]) => void\n onError?: () => void\n onOpen?: () => void\n onStatus?: (status: WorkspaceEventTransportStatus) => void\n onPing?: (payload: { ts?: number }) => void\n}\n\nexport type WorkspaceEventTransportStatus = \"connecting\" | \"connected\" | \"disconnected\"\n\nexport interface WorkspaceEventConnection {\n disconnect: () => void\n}\n\nexport async function connectWorkspaceEvents(\n callbacks: WorkspaceEventTransportCallbacks,\n): Promise<WorkspaceEventConnection> {\n const notifyDisconnected = () => {\n callbacks.onStatus?.(\"disconnected\")\n callbacks.onError?.()\n }\n const source = serverApi.connectEvents((event) => {\n callbacks.onBatch([event])\n }, notifyDisconnected, callbacks.onPing)\n source.onopen = () => {\n callbacks.onStatus?.(\"connected\")\n callbacks.onOpen?.()\n }\n return {\n disconnect() {\n source.close()\n },\n }\n}\n","interface RetryOptions {\n maxAttempts?: number\n initialDelayMs?: number\n maxDelayMs?: number\n backoffMultiplier?: number\n timeoutMs?: number\n shouldRetry?: (error: Error, attempt: number) => boolean\n wait?: (delayMs: number) => Promise<void>\n}\n\nexport async function retryWithBackoff<T>(\n fn: (signal?: AbortSignal) => Promise<T>,\n options: RetryOptions = {},\n): Promise<T> {\n const {\n maxAttempts = 3,\n initialDelayMs = 100,\n maxDelayMs = 5000,\n backoffMultiplier = 2,\n timeoutMs,\n shouldRetry = () => true,\n wait = (delayMs: number) => new Promise((resolve) => setTimeout(resolve, delayMs)),\n } = options\n\n let lastError: Error | null = null\n let delayMs = initialDelayMs\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n if (timeoutMs) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeoutMs)\n try {\n const result = await fn(controller.signal)\n clearTimeout(timer)\n return result\n } catch (error) {\n clearTimeout(timer)\n throw error\n }\n }\n\n return await fn()\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n lastError = err\n\n if (attempt < maxAttempts && shouldRetry(err, attempt)) {\n await wait(delayMs)\n delayMs = Math.min(delayMs * backoffMultiplier, maxDelayMs)\n } else {\n throw err\n }\n }\n }\n\n throw lastError || new Error(\"Failed after retries\")\n}\n\nexport function isRetryableError(error: Error): boolean {\n if (error.name === \"AbortError\" || error.name === \"TimeoutError\") return true\n if (error.message.includes(\"Failed to fetch\")) return true\n if (error.message.includes(\"NetworkError\")) return true\n if (error.message.includes(\"timeout\")) return true\n return false\n}\n","import { batch as solidBatch } from \"solid-js\"\nimport type { WorkspaceEventPayload, WorkspaceEventType } from \"../../../server/src/api-types\"\nimport { serverApi } from \"./api-client\"\nimport { getClientIdentity } from \"./client-identity\"\nimport {\n connectWorkspaceEvents,\n type WorkspaceEventConnection,\n type WorkspaceEventTransportStatus,\n} from \"./event-transport\"\nimport { getLogger } from \"./logger\"\nimport { retryWithBackoff, isRetryableError } from \"./retry-utils\"\n\nconst RETRY_BASE_DELAY = 1000\nconst RETRY_MAX_DELAY = 10000\nconst log = getLogger(\"sse\")\n\nfunction logSse(message: string, context?: Record<string, unknown>) {\n if (context) {\n log.info(message, context)\n return\n }\n log.info(message)\n}\n\nclass ServerEvents {\n private handlers = new Map<WorkspaceEventType | \"*\", Set<(event: WorkspaceEventPayload) => void>>()\n private openHandlers = new Set<() => void>()\n private statusHandlers = new Set<(status: WorkspaceEventTransportStatus) => void>()\n private connection: WorkspaceEventConnection | null = null\n private connectGeneration = 0\n private retryDelay = RETRY_BASE_DELAY\n private retryTimer: ReturnType<typeof setTimeout> | null = null\n\n constructor() {\n void this.connect()\n }\n\n private async connect() {\n const generation = ++this.connectGeneration\n this.clearReconnectTimer()\n\n if (this.connection) {\n this.emitTransportStatus(\"disconnected\")\n this.connection.disconnect()\n this.connection = null\n }\n\n logSse(\"Connecting to backend events stream\")\n\n try {\n const connection = await connectWorkspaceEvents({\n onBatch: (events) => {\n if (generation === this.connectGeneration) this.dispatchBatch(events)\n },\n onError: () => {\n if (generation !== this.connectGeneration) {\n return\n }\n this.scheduleReconnect()\n },\n onStatus: (status) => {\n if (generation !== this.connectGeneration) {\n return\n }\n this.emitTransportStatus(status)\n },\n onOpen: () => {\n if (generation !== this.connectGeneration) {\n return\n }\n logSse(\"Events stream connected\")\n this.retryDelay = RETRY_BASE_DELAY\n this.openHandlers.forEach((handler) => handler())\n },\n onPing: (payload) => {\n if (generation !== this.connectGeneration) {\n return\n }\n const identity = getClientIdentity()\n const pongPayload = { ...identity, pingTs: payload.ts }\n\n void retryWithBackoff(\n (signal) => serverApi.sendClientConnectionPong(pongPayload, signal),\n {\n maxAttempts: 3,\n initialDelayMs: 100,\n maxDelayMs: 2000,\n timeoutMs: 10000,\n shouldRetry: (error) => isRetryableError(error),\n },\n ).catch((error) => {\n log.warn(\"Failed to send client connection pong after retries\", error)\n })\n },\n })\n\n if (generation !== this.connectGeneration) {\n connection.disconnect()\n return\n }\n\n this.connection = connection\n } catch (error) {\n if (generation !== this.connectGeneration) {\n return\n }\n\n logSse(\"Events stream failed to connect, scheduling reconnect\", {\n error: error instanceof Error ? error.message : String(error),\n })\n this.scheduleReconnect()\n }\n }\n\n private scheduleReconnect() {\n if (this.retryTimer) {\n return\n }\n\n this.connectGeneration += 1\n\n if (this.connection) {\n this.connection.disconnect()\n this.connection = null\n }\n\n this.emitTransportStatus(\"disconnected\")\n\n logSse(\"Events stream disconnected, scheduling reconnect\", { delayMs: this.retryDelay })\n this.retryTimer = setTimeout(() => {\n this.retryTimer = null\n this.retryDelay = Math.min(this.retryDelay * 2, RETRY_MAX_DELAY)\n void this.connect()\n }, this.retryDelay)\n }\n\n private clearReconnectTimer() {\n if (!this.retryTimer) {\n return\n }\n\n clearTimeout(this.retryTimer)\n this.retryTimer = null\n }\n\n private dispatch(event: WorkspaceEventPayload) {\n this.handlers.get(\"*\")?.forEach((handler) => handler(event))\n this.handlers.get(event.type)?.forEach((handler) => handler(event))\n }\n\n private dispatchBatch(events: WorkspaceEventPayload[]) {\n if (events.length === 0) {\n return\n }\n\n logSse(\"event batch\", { size: events.length })\n solidBatch(() => {\n for (const event of events) {\n this.dispatch(event)\n }\n })\n }\n\n private emitTransportStatus(status: WorkspaceEventTransportStatus) {\n this.statusHandlers.forEach((handler) => handler(status))\n }\n\n on(type: WorkspaceEventType | \"*\", handler: (event: WorkspaceEventPayload) => void): () => void {\n if (!this.handlers.has(type)) {\n this.handlers.set(type, new Set())\n }\n const bucket = this.handlers.get(type)!\n bucket.add(handler)\n return () => bucket.delete(handler)\n }\n\n onOpen(handler: () => void): () => void {\n this.openHandlers.add(handler)\n return () => this.openHandlers.delete(handler)\n }\n\n onTransportStatus(handler: (status: WorkspaceEventTransportStatus) => void): () => void {\n this.statusHandlers.add(handler)\n return () => this.statusHandlers.delete(handler)\n }\n\n restart(reason = \"manual restart\"): void {\n this.retryDelay = RETRY_BASE_DELAY\n this.clearReconnectTimer()\n\n if (this.connection) {\n this.emitTransportStatus(\"disconnected\")\n this.connection.disconnect()\n this.connection = null\n }\n\n logSse(\"Restarting backend events stream\", { reason })\n void this.connect()\n }\n}\n\nexport const serverEvents = new ServerEvents()\n","import type { InstanceData, WorkspaceEventPayload } from \"../../../server/src/api-types\"\nimport { serverApi } from \"./api-client\"\nimport { serverEvents } from \"./server-events\"\nimport { getLogger } from \"./logger\"\n\nconst log = getLogger(\"actions\")\n\nexport type OwnerBucket = Record<string, any>\n\nconst DEFAULT_INSTANCE_DATA: InstanceData = {\n messageHistory: [],\n agentModelSelections: {},\n}\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a === \"object\" && a !== null && typeof b === \"object\" && b !== null) {\n\n try {\n return JSON.stringify(a) === JSON.stringify(b)\n } catch (error) {\n log.warn(\"Failed to compare config objects\", error)\n }\n }\n\n return false\n}\n\nexport class ServerStorage {\n private configOwnerCache = new Map<string, OwnerBucket>()\n private stateOwnerCache = new Map<string, OwnerBucket>()\n private configOwnerLoadPromises = new Map<string, Promise<OwnerBucket>>()\n private stateOwnerLoadPromises = new Map<string, Promise<OwnerBucket>>()\n private configOwnerListeners = new Map<string, Set<(value: OwnerBucket) => void>>()\n private stateOwnerListeners = new Map<string, Set<(value: OwnerBucket) => void>>()\n private instanceDataCache = new Map<string, InstanceData>()\n private instanceDataListeners = new Map<string, Set<(data: InstanceData) => void>>()\n private instanceLoadPromises = new Map<string, Promise<InstanceData>>()\n private pendingWrites = new Set<Promise<unknown>>()\n\n constructor() {\n serverEvents.on(\"storage.configChanged\", (event: WorkspaceEventPayload) => {\n if (event.type !== \"storage.configChanged\") return\n this.setOwnerCache(\"config\", event.owner, event.value)\n })\n\n serverEvents.on(\"storage.stateChanged\", (event: WorkspaceEventPayload) => {\n if (event.type !== \"storage.stateChanged\") return\n this.setOwnerCache(\"state\", event.owner, event.value)\n })\n\n serverEvents.on(\"instance.dataChanged\", (event) => {\n if (event.type !== \"instance.dataChanged\") return\n this.setInstanceDataCache(event.instanceId, event.data)\n })\n }\n\n async loadConfigOwner(owner: string): Promise<OwnerBucket> {\n const cached = this.configOwnerCache.get(owner)\n if (cached) return cached\n\n if (!this.configOwnerLoadPromises.has(owner)) {\n const promise = serverApi\n .fetchConfigOwner<OwnerBucket>(owner)\n .then((value) => {\n this.setOwnerCache(\"config\", owner, value)\n return value\n })\n .finally(() => {\n this.configOwnerLoadPromises.delete(owner)\n })\n this.configOwnerLoadPromises.set(owner, promise)\n }\n\n return this.configOwnerLoadPromises.get(owner)!\n }\n\n patchConfigOwner(owner: string, patch: unknown): Promise<OwnerBucket> {\n return this.trackWrite(serverApi.patchConfigOwner<OwnerBucket>(owner, patch).then((updated) => {\n this.setOwnerCache(\"config\", owner, updated)\n return updated\n }))\n }\n\n async loadStateOwner(owner: string): Promise<OwnerBucket> {\n const cached = this.stateOwnerCache.get(owner)\n if (cached) return cached\n\n if (!this.stateOwnerLoadPromises.has(owner)) {\n const promise = serverApi\n .fetchStateOwner<OwnerBucket>(owner)\n .then((value) => {\n this.setOwnerCache(\"state\", owner, value)\n return value\n })\n .finally(() => {\n this.stateOwnerLoadPromises.delete(owner)\n })\n this.stateOwnerLoadPromises.set(owner, promise)\n }\n\n return this.stateOwnerLoadPromises.get(owner)!\n }\n\n patchStateOwner(owner: string, patch: unknown): Promise<OwnerBucket> {\n return this.trackWrite(serverApi.patchStateOwner<OwnerBucket>(owner, patch).then((updated) => {\n this.setOwnerCache(\"state\", owner, updated)\n return updated\n }))\n }\n\n async loadInstanceData(instanceId: string): Promise<InstanceData> {\n const cached = this.instanceDataCache.get(instanceId)\n if (cached) {\n return cached\n }\n\n if (!this.instanceLoadPromises.has(instanceId)) {\n const promise = serverApi\n .readInstanceData(instanceId)\n .then((data) => {\n const normalized = this.normalizeInstanceData(data)\n this.setInstanceDataCache(instanceId, normalized)\n return normalized\n })\n .finally(() => {\n this.instanceLoadPromises.delete(instanceId)\n })\n\n this.instanceLoadPromises.set(instanceId, promise)\n }\n\n return this.instanceLoadPromises.get(instanceId)!\n }\n\n saveInstanceData(instanceId: string, data: InstanceData): Promise<void> {\n const normalized = this.normalizeInstanceData(data)\n return this.trackWrite(serverApi.writeInstanceData(instanceId, normalized).then(() => {\n this.setInstanceDataCache(instanceId, normalized)\n }))\n }\n\n deleteInstanceData(instanceId: string): Promise<void> {\n return this.trackWrite(serverApi.deleteInstanceData(instanceId).then(() => {\n this.setInstanceDataCache(instanceId, DEFAULT_INSTANCE_DATA)\n }))\n }\n\n async flushWrites(): Promise<void> {\n while (this.pendingWrites.size > 0) {\n await Promise.allSettled(this.pendingWrites)\n }\n }\n\n onConfigOwnerChanged(owner: string, listener: (value: OwnerBucket) => void): () => void {\n if (!this.configOwnerListeners.has(owner)) {\n this.configOwnerListeners.set(owner, new Set())\n }\n const bucket = this.configOwnerListeners.get(owner)!\n bucket.add(listener)\n const cached = this.configOwnerCache.get(owner)\n if (cached) {\n listener(cached)\n }\n return () => {\n bucket.delete(listener)\n if (bucket.size === 0) {\n this.configOwnerListeners.delete(owner)\n }\n }\n }\n\n onStateOwnerChanged(owner: string, listener: (value: OwnerBucket) => void): () => void {\n if (!this.stateOwnerListeners.has(owner)) {\n this.stateOwnerListeners.set(owner, new Set())\n }\n const bucket = this.stateOwnerListeners.get(owner)!\n bucket.add(listener)\n const cached = this.stateOwnerCache.get(owner)\n if (cached) {\n listener(cached)\n }\n return () => {\n bucket.delete(listener)\n if (bucket.size === 0) {\n this.stateOwnerListeners.delete(owner)\n }\n }\n }\n\n onInstanceDataChanged(instanceId: string, listener: (data: InstanceData) => void): () => void {\n if (!this.instanceDataListeners.has(instanceId)) {\n this.instanceDataListeners.set(instanceId, new Set())\n }\n const bucket = this.instanceDataListeners.get(instanceId)!\n bucket.add(listener)\n const cached = this.instanceDataCache.get(instanceId)\n if (cached) {\n listener(cached)\n }\n return () => {\n bucket.delete(listener)\n if (bucket.size === 0) {\n this.instanceDataListeners.delete(instanceId)\n }\n }\n }\n\n private setOwnerCache(kind: \"config\" | \"state\", owner: string, value: OwnerBucket) {\n if (owner === \"*\") {\n // Full-doc updates are not tracked owner-by-owner; invalidate caches.\n if (kind === \"config\") {\n this.configOwnerCache.clear()\n } else {\n this.stateOwnerCache.clear()\n }\n return\n }\n\n const cache = kind === \"config\" ? this.configOwnerCache : this.stateOwnerCache\n const listeners = kind === \"config\" ? this.configOwnerListeners : this.stateOwnerListeners\n\n const previous = cache.get(owner)\n if (previous && isDeepEqual(previous, value)) {\n cache.set(owner, value)\n return\n }\n cache.set(owner, value)\n const bucket = listeners.get(owner)\n if (!bucket) return\n for (const listener of bucket) {\n listener(value)\n }\n }\n\n private trackWrite<T>(write: Promise<T>): Promise<T> {\n this.pendingWrites.add(write)\n void write.finally(() => this.pendingWrites.delete(write)).catch(() => undefined)\n return write\n }\n\n private normalizeInstanceData(data?: InstanceData | null): InstanceData {\n const source = data ?? DEFAULT_INSTANCE_DATA\n const messageHistory = Array.isArray(source.messageHistory) ? [...source.messageHistory] : []\n const agentModelSelections = { ...(source.agentModelSelections ?? {}) }\n return {\n ...source,\n messageHistory,\n agentModelSelections,\n }\n }\n\n private setInstanceDataCache(instanceId: string, data: InstanceData) {\n const normalized = this.normalizeInstanceData(data)\n const previous = this.instanceDataCache.get(instanceId)\n if (previous && isDeepEqual(previous, normalized)) {\n this.instanceDataCache.set(instanceId, normalized)\n return\n }\n this.instanceDataCache.set(instanceId, normalized)\n this.notifyInstanceDataChanged(instanceId, normalized)\n }\n\n private notifyInstanceDataChanged(instanceId: string, data: InstanceData) {\n const listeners = this.instanceDataListeners.get(instanceId)\n if (!listeners) {\n return\n }\n for (const listener of listeners) {\n listener(data)\n }\n }\n}\n\nexport const storage = new ServerStorage()\n","import { createContext, createMemo, createSignal, onCleanup, type Accessor, type ParentComponent, useContext } from \"solid-js\"\nimport type { InstanceData } from \"../../../server/src/api-types\"\nimport { storage } from \"../lib/storage\"\nimport { getLogger } from \"../lib/logger\"\n\nconst log = getLogger(\"api\")\n\nconst DEFAULT_INSTANCE_DATA: InstanceData = { messageHistory: [], agentModelSelections: {} }\n\nconst [instanceDataMap, setInstanceDataMap] = createSignal<Map<string, InstanceData>>(new Map())\nconst loadPromises = new Map<string, Promise<void>>()\nconst instanceSubscriptions = new Map<string, () => void>()\n\nfunction cloneInstanceData(data?: InstanceData | null): InstanceData {\n const source = data ?? DEFAULT_INSTANCE_DATA\n return {\n ...source,\n messageHistory: Array.isArray(source.messageHistory) ? [...source.messageHistory] : [],\n agentModelSelections: { ...(source.agentModelSelections ?? {}) },\n }\n}\n\nfunction attachSubscription(instanceId: string) {\n if (instanceSubscriptions.has(instanceId)) return\n const unsubscribe = storage.onInstanceDataChanged(instanceId, (data) => {\n setInstanceData(instanceId, data)\n })\n instanceSubscriptions.set(instanceId, unsubscribe)\n}\n\nfunction detachSubscription(instanceId: string) {\n const unsubscribe = instanceSubscriptions.get(instanceId)\n if (!unsubscribe) return\n unsubscribe()\n instanceSubscriptions.delete(instanceId)\n}\n\nfunction setInstanceData(instanceId: string, data: InstanceData) {\n setInstanceDataMap((prev) => {\n const next = new Map(prev)\n next.set(instanceId, cloneInstanceData(data))\n return next\n })\n}\n\nasync function ensureInstanceConfig(instanceId: string): Promise<void> {\n if (!instanceId) return\n if (instanceDataMap().has(instanceId)) return\n if (loadPromises.has(instanceId)) {\n await loadPromises.get(instanceId)\n return\n }\n const promise = storage\n .loadInstanceData(instanceId)\n .then((data) => {\n setInstanceData(instanceId, data)\n attachSubscription(instanceId)\n })\n .catch((error) => {\n log.warn(\"Failed to load instance data\", error)\n setInstanceData(instanceId, DEFAULT_INSTANCE_DATA)\n attachSubscription(instanceId)\n })\n .finally(() => {\n loadPromises.delete(instanceId)\n })\n loadPromises.set(instanceId, promise)\n await promise\n}\n\nasync function updateInstanceConfig(instanceId: string, mutator: (draft: InstanceData) => void): Promise<void> {\n if (!instanceId) return\n await ensureInstanceConfig(instanceId)\n const current = instanceDataMap().get(instanceId) ?? DEFAULT_INSTANCE_DATA\n const draft = cloneInstanceData(current)\n mutator(draft)\n try {\n await storage.saveInstanceData(instanceId, draft)\n } catch (error) {\n log.warn(\"Failed to persist instance data\", error)\n }\n setInstanceData(instanceId, draft)\n}\n\nfunction getInstanceConfig(instanceId: string): InstanceData {\n return instanceDataMap().get(instanceId) ?? DEFAULT_INSTANCE_DATA\n}\n\nfunction useInstanceConfig(instanceId: string): Accessor<InstanceData> {\n const context = useContext(InstanceConfigContext)\n if (!context) {\n throw new Error(\"useInstanceConfig must be used within InstanceConfigProvider\")\n }\n return createMemo(() => instanceDataMap().get(instanceId) ?? DEFAULT_INSTANCE_DATA)\n}\n\nfunction clearInstanceConfig(instanceId: string): void {\n setInstanceDataMap((prev) => {\n if (!prev.has(instanceId)) return prev\n const next = new Map(prev)\n next.delete(instanceId)\n return next\n })\n detachSubscription(instanceId)\n}\n\ninterface InstanceConfigContextValue {\n getInstanceConfig: typeof getInstanceConfig\n ensureInstanceConfig: typeof ensureInstanceConfig\n updateInstanceConfig: typeof updateInstanceConfig\n clearInstanceConfig: typeof clearInstanceConfig\n}\n\nconst InstanceConfigContext = createContext<InstanceConfigContextValue>()\n\nconst contextValue: InstanceConfigContextValue = {\n getInstanceConfig,\n ensureInstanceConfig,\n updateInstanceConfig,\n clearInstanceConfig,\n}\n\nconst InstanceConfigProvider: ParentComponent = (props) => {\n onCleanup(() => {\n for (const unsubscribe of instanceSubscriptions.values()) {\n unsubscribe()\n }\n instanceSubscriptions.clear()\n })\n\n return <InstanceConfigContext.Provider value={contextValue}>{props.children}</InstanceConfigContext.Provider>\n}\n\nexport {\n InstanceConfigProvider,\n useInstanceConfig,\n ensureInstanceConfig as ensureInstanceConfigLoaded,\n getInstanceConfig,\n updateInstanceConfig,\n clearInstanceConfig,\n}\n","import { createSignal } from \"solid-js\"\nimport type { SpeechCapabilitiesResponse } from \"../../../server/src/api-types\"\nimport { serverApi } from \"../lib/api-client\"\nimport { getLogger } from \"../lib/logger\"\n\nconst log = getLogger(\"api\")\n\nfunction normalizeCapabilities(result: SpeechCapabilitiesResponse): SpeechCapabilitiesResponse {\n const r = result as unknown as Record<string, unknown>\n if (r.sttConfigured === undefined) r.sttConfigured = r.configured\n if (r.ttsConfigured === undefined) r.ttsConfigured = r.configured\n if (r.separateProviders === undefined) r.separateProviders = false\n return r as unknown as SpeechCapabilitiesResponse\n}\n\nconst [speechCapabilities, setSpeechCapabilities] = createSignal<SpeechCapabilitiesResponse | null>(null)\nconst [speechCapabilitiesLoading, setSpeechCapabilitiesLoading] = createSignal(false)\nconst [speechCapabilitiesError, setSpeechCapabilitiesError] = createSignal<string | null>(null)\nconst [serverSupportsSeparateProviders, setServerSupportsSeparateProviders] = createSignal(false)\n\nlet speechCapabilitiesPromise: Promise<SpeechCapabilitiesResponse | null> | null = null\n\nasync function loadSpeechCapabilities(force = false): Promise<SpeechCapabilitiesResponse | null> {\n if (!force && speechCapabilities()) return speechCapabilities()\n if (speechCapabilitiesPromise) return speechCapabilitiesPromise\n\n setSpeechCapabilitiesLoading(true)\n setSpeechCapabilitiesError(null)\n speechCapabilitiesPromise = serverApi\n .fetchSpeechCapabilities()\n .then((result) => {\n const raw = result as unknown as Record<string, unknown>\n setServerSupportsSeparateProviders(\"separateProviders\" in raw)\n const normalized = normalizeCapabilities(result)\n setSpeechCapabilities(normalized)\n setSpeechCapabilitiesError(null)\n return normalized\n })\n .catch((error) => {\n log.error(\"Failed to load speech capabilities\", error)\n setSpeechCapabilities(null)\n setSpeechCapabilitiesError(error instanceof Error ? error.message : String(error))\n return null\n })\n .finally(() => {\n setSpeechCapabilitiesLoading(false)\n speechCapabilitiesPromise = null\n })\n\n return speechCapabilitiesPromise\n}\n\nfunction resetSpeechCapabilities(): void {\n setSpeechCapabilities(null)\n setSpeechCapabilitiesError(null)\n setServerSupportsSeparateProviders(false)\n}\n\nexport { speechCapabilities, speechCapabilitiesLoading, speechCapabilitiesError, serverSupportsSeparateProviders, loadSpeechCapabilities, resetSpeechCapabilities }\n","import type { SpeechSettingsUpdate } from \"../stores/preferences\"\n\nexport function buildSpeechPatch(updates: SpeechSettingsUpdate): Record<string, unknown> {\n const patch: Record<string, unknown> = {}\n\n if (updates.separateProviders !== undefined) patch.separateProviders = updates.separateProviders\n if (updates.apiKey !== undefined) patch.apiKey = updates.apiKey\n if (updates.baseUrl !== undefined) patch.baseUrl = updates.baseUrl?.trim() || null\n if (updates.sttModel !== undefined) patch.sttModel = updates.sttModel?.trim() || null\n if (updates.ttsModel !== undefined) patch.ttsModel = updates.ttsModel?.trim() || null\n if (updates.ttsVoice !== undefined) patch.ttsVoice = updates.ttsVoice?.trim() || null\n if (updates.playbackMode !== undefined) patch.playbackMode = updates.playbackMode\n if (updates.ttsFormat !== undefined) patch.ttsFormat = updates.ttsFormat\n\n for (const dir of [\"stt\", \"tts\"] as const) {\n const dirUpdate = updates[dir]\n if (dirUpdate) {\n const dirPatch: Record<string, unknown> = {}\n if (dirUpdate.apiKey !== undefined) dirPatch.apiKey = dirUpdate.apiKey\n if (dirUpdate.baseUrl !== undefined) dirPatch.baseUrl = dirUpdate.baseUrl?.trim() || null\n if (dirUpdate.model !== undefined) dirPatch.model = dirUpdate.model?.trim() || null\n if (Object.keys(dirPatch).length > 0) patch[dir] = dirPatch\n }\n }\n\n return patch\n}\n","export const COLOR_SCHEME_IDS = [\"system\", \"light\", \"classic\", \"basalt\", \"fjord\", \"lichen\", \"velvet\", \"ember\", \"custom\"] as const\n\nexport type ColorSchemeId = (typeof COLOR_SCHEME_IDS)[number]\nexport type ColorSchemeAppearance = \"system\" | \"light\" | \"dark\"\n\nexport interface ColorSchemeColors {\n surfaceBase: string\n surfaceSecondary: string\n surfaceMuted: string\n borderBase: string\n textPrimary: string\n textMuted: string\n accentPrimary: string\n statusSuccess: string\n statusWarning: string\n statusError: string\n userAccent: string\n agentAccent: string\n compactionAccent: string\n yoloAccent: string\n}\n\nexport interface ColorSchemeDefinition {\n id: ColorSchemeId\n labelKey: string\n descriptionKey: string\n appearance: ColorSchemeAppearance\n editable: boolean\n colors?: Readonly<ColorSchemeColors>\n}\n\nexport interface NormalizedColorScheme {\n id: ColorSchemeId\n appearance: ColorSchemeAppearance\n colors?: ColorSchemeColors\n}\n\nexport interface ColorSchemeTarget {\n style: {\n setProperty(name: string, value: string): void\n removeProperty(name: string): unknown\n }\n dataset: Record<string, string | undefined>\n setAttribute(name: string, value: string): void\n removeAttribute(name: string): void\n}\n\nconst COLOR_KEYS: readonly (keyof ColorSchemeColors)[] = [\n \"surfaceBase\",\n \"surfaceSecondary\",\n \"surfaceMuted\",\n \"borderBase\",\n \"textPrimary\",\n \"textMuted\",\n \"accentPrimary\",\n \"statusSuccess\",\n \"statusWarning\",\n \"statusError\",\n \"userAccent\",\n \"agentAccent\",\n \"compactionAccent\",\n \"yoloAccent\",\n]\n\nconst LEGACY_COLOR_KEYS = COLOR_KEYS.slice(0, 10)\n\nconst DEFAULT_SEMANTIC_COLORS = {\n userAccent: \"#42A5F5\",\n agentAccent: \"#D97706\",\n compactionAccent: \"#C084FC\",\n yoloAccent: \"#8FA8FF\",\n} as const\n\nexport const DEFAULT_CUSTOM_COLORS: Readonly<ColorSchemeColors> = {\n surfaceBase: \"#17181A\",\n surfaceSecondary: \"#202226\",\n surfaceMuted: \"#292C31\",\n borderBase: \"#3B3F46\",\n textPrimary: \"#F0F1F3\",\n textMuted: \"#B2B6BE\",\n accentPrimary: \"#8FA8FF\",\n statusSuccess: \"#72C497\",\n statusWarning: \"#D8B36A\",\n statusError: \"#E28181\",\n ...DEFAULT_SEMANTIC_COLORS,\n}\n\nexport const LIGHT_COLOR_SCHEME_COLORS: Readonly<ColorSchemeColors> = {\n surfaceBase: \"#FFFFFF\",\n surfaceSecondary: \"#F5F5F5\",\n surfaceMuted: \"#ECEFF3\",\n borderBase: \"#D1D5DB\",\n textPrimary: \"#111827\",\n textMuted: \"#4B5563\",\n accentPrimary: \"#005FCC\",\n statusSuccess: \"#237A43\",\n statusWarning: \"#9A6700\",\n statusError: \"#C62828\",\n userAccent: \"#0066CC\",\n agentAccent: \"#A44B00\",\n compactionAccent: \"#7E22CE\",\n yoloAccent: \"#005FCC\",\n}\n\nexport const BUILT_IN_COLOR_SCHEMES: readonly ColorSchemeDefinition[] = [\n {\n id: \"system\",\n labelKey: \"settings.appearance.colorScheme.option.system\",\n descriptionKey: \"settings.appearance.colorScheme.description.system\",\n appearance: \"system\",\n editable: false,\n },\n {\n id: \"light\",\n labelKey: \"settings.appearance.colorScheme.option.light\",\n descriptionKey: \"settings.appearance.colorScheme.description.light\",\n appearance: \"light\",\n editable: false,\n },\n {\n id: \"classic\",\n labelKey: \"settings.appearance.colorScheme.option.codeNomadClassic\",\n descriptionKey: \"settings.appearance.colorScheme.description.codeNomadClassic\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#1A1A1A\",\n surfaceSecondary: \"#2A2A2A\",\n surfaceMuted: \"#212529\",\n borderBase: \"#3A3A3A\",\n textPrimary: \"#CFD4DC\",\n textMuted: \"#999999\",\n accentPrimary: \"#0080FF\",\n statusSuccess: \"#4CAF50\",\n statusWarning: \"#FF9800\",\n statusError: \"#F44336\",\n userAccent: \"#2196F3\",\n agentAccent: \"#D97706\",\n compactionAccent: \"#C084FC\",\n yoloAccent: \"#0080FF\",\n },\n },\n {\n id: \"basalt\",\n labelKey: \"settings.appearance.colorScheme.option.basalt\",\n descriptionKey: \"settings.appearance.colorScheme.description.basalt\",\n appearance: \"dark\",\n editable: false,\n colors: DEFAULT_CUSTOM_COLORS,\n },\n {\n id: \"fjord\",\n labelKey: \"settings.appearance.colorScheme.option.fjord\",\n descriptionKey: \"settings.appearance.colorScheme.description.fjord\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#131A1F\",\n surfaceSecondary: \"#1B252C\",\n surfaceMuted: \"#243139\",\n borderBase: \"#354650\",\n textPrimary: \"#E7EEF1\",\n textMuted: \"#A8B8BF\",\n accentPrimary: \"#67C9BA\",\n statusSuccess: \"#72C497\",\n statusWarning: \"#D8B36A\",\n statusError: \"#E28181\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#67C9BA\",\n },\n },\n {\n id: \"lichen\",\n labelKey: \"settings.appearance.colorScheme.option.lichen\",\n descriptionKey: \"settings.appearance.colorScheme.description.lichen\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#181A15\",\n surfaceSecondary: \"#22251D\",\n surfaceMuted: \"#2C3025\",\n borderBase: \"#41473A\",\n textPrimary: \"#ECEEE8\",\n textMuted: \"#B2B8A7\",\n accentPrimary: \"#A9C47F\",\n statusSuccess: \"#77C49A\",\n statusWarning: \"#D6B36D\",\n statusError: \"#DF8580\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#A9C47F\",\n },\n },\n {\n id: \"velvet\",\n labelKey: \"settings.appearance.colorScheme.option.velvet\",\n descriptionKey: \"settings.appearance.colorScheme.description.velvet\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#160F16\",\n surfaceSecondary: \"#211721\",\n surfaceMuted: \"#2B1E2B\",\n borderBase: \"#443044\",\n textPrimary: \"#F1EAF0\",\n textMuted: \"#BAAAB7\",\n accentPrimary: \"#E5A77D\",\n statusSuccess: \"#78C59A\",\n statusWarning: \"#DDB46F\",\n statusError: \"#E28787\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#E5A77D\",\n },\n },\n {\n id: \"ember\",\n labelKey: \"settings.appearance.colorScheme.option.ember\",\n descriptionKey: \"settings.appearance.colorScheme.description.ember\",\n appearance: \"dark\",\n editable: false,\n colors: {\n surfaceBase: \"#1B1714\",\n surfaceSecondary: \"#27211D\",\n surfaceMuted: \"#312923\",\n borderBase: \"#493D34\",\n textPrimary: \"#F1ECE7\",\n textMuted: \"#BDB1A6\",\n accentPrimary: \"#D79A66\",\n statusSuccess: \"#78C296\",\n statusWarning: \"#D8AE62\",\n statusError: \"#DE817A\",\n ...DEFAULT_SEMANTIC_COLORS,\n yoloAccent: \"#D79A66\",\n },\n },\n {\n id: \"custom\",\n labelKey: \"settings.appearance.colorScheme.option.custom\",\n descriptionKey: \"settings.appearance.colorScheme.description.custom\",\n appearance: \"dark\",\n editable: true,\n colors: DEFAULT_CUSTOM_COLORS,\n },\n]\n\nconst SCHEMES_BY_ID = Object.fromEntries(BUILT_IN_COLOR_SCHEMES.map((scheme) => [scheme.id, scheme])) as Record<\n ColorSchemeId,\n ColorSchemeDefinition\n>\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nexport const isCanonicalHexColor = (value: unknown): value is string =>\n typeof value === \"string\" && /^#[0-9A-F]{6}$/.test(value)\n\nexport function isColorSchemeColors(value: unknown): value is ColorSchemeColors {\n return isRecord(value) && COLOR_KEYS.every((key) => isCanonicalHexColor(value[key]))\n}\n\nfunction normalizeColors(value: unknown): ColorSchemeColors | undefined {\n if (isColorSchemeColors(value)) return { ...value }\n if (!isRecord(value) || !LEGACY_COLOR_KEYS.every((key) => isCanonicalHexColor(value[key]))) return undefined\n return { ...(value as unknown as Omit<ColorSchemeColors, keyof typeof DEFAULT_SEMANTIC_COLORS>), ...DEFAULT_SEMANTIC_COLORS }\n}\n\nconst copyColors = (colors: Readonly<ColorSchemeColors>): ColorSchemeColors => ({ ...colors })\n\nfunction selectionFor(\n id: ColorSchemeId,\n colors?: Readonly<ColorSchemeColors>,\n appearance: ColorSchemeAppearance = SCHEMES_BY_ID[id].appearance,\n): NormalizedColorScheme {\n const definition = SCHEMES_BY_ID[id]\n return {\n id,\n appearance,\n ...(definition.colors ? { colors: copyColors(colors ?? definition.colors) } : {}),\n }\n}\n\nexport function normalizeColorScheme(value: unknown, legacyTheme?: unknown): NormalizedColorScheme {\n const id = typeof value === \"string\" ? value : isRecord(value) ? value.id : undefined\n\n if (typeof id === \"string\" && COLOR_SCHEME_IDS.includes(id as ColorSchemeId)) {\n const schemeId = id as ColorSchemeId\n if (schemeId !== \"custom\") return selectionFor(schemeId)\n const colors = isRecord(value) ? normalizeColors(value.colors) ?? DEFAULT_CUSTOM_COLORS : DEFAULT_CUSTOM_COLORS\n const appearance = isRecord(value) && value.appearance === \"light\" ? \"light\" : \"dark\"\n return selectionFor(\"custom\", colors, appearance)\n }\n\n if (legacyTheme === \"light\") return selectionFor(\"light\")\n if (legacyTheme === \"dark\") return selectionFor(\"classic\")\n return selectionFor(\"system\")\n}\n\nconst channel = (color: string, offset: number) => Number.parseInt(color.slice(offset, offset + 2), 16)\n\nconst luminance = (color: string) => {\n const linear = (value: number) => {\n const normalized = value / 255\n return normalized <= 0.04045 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4\n }\n return 0.2126 * linear(channel(color, 1)) + 0.7152 * linear(channel(color, 3)) + 0.0722 * linear(channel(color, 5))\n}\n\nexport function contrastRatio(first: string, second: string): number {\n if (!isCanonicalHexColor(first) || !isCanonicalHexColor(second)) return 0\n const [bright, dark] = [luminance(first), luminance(second)].sort((a, b) => b - a)\n return (bright + 0.05) / (dark + 0.05)\n}\n\nexport function validateColorSchemeColors(value: unknown): value is ColorSchemeColors {\n if (!isColorSchemeColors(value)) return false\n const textPairs: Array<[string, string]> = [\n [value.textPrimary, value.surfaceBase],\n [value.textPrimary, value.surfaceSecondary],\n [value.textPrimary, value.surfaceMuted],\n [value.textMuted, value.surfaceBase],\n [value.textMuted, value.surfaceSecondary],\n [value.textMuted, value.surfaceMuted],\n ]\n const emphasis = [\n value.accentPrimary,\n value.statusSuccess,\n value.statusWarning,\n value.statusError,\n value.userAccent,\n value.agentAccent,\n value.compactionAccent,\n value.yoloAccent,\n ]\n const emphasisSurfaces = [value.surfaceBase, value.surfaceSecondary]\n return (\n textPairs.every(([foreground, background]) => contrastRatio(foreground, background) >= 4.5) &&\n emphasis.every((foreground) => emphasisSurfaces.every((background) => contrastRatio(foreground, background) >= 3))\n )\n}\n\nconst mix = (first: string, second: string, firstWeight: number) => {\n const mixed = [1, 3, 5].map((offset) =>\n Math.round(channel(first, offset) * firstWeight + channel(second, offset) * (1 - firstWeight)),\n )\n return `#${mixed.map((value) => value.toString(16).padStart(2, \"0\")).join(\"\").toUpperCase()}`\n}\n\nconst alpha = (color: string, opacity: number) =>\n `rgba(${channel(color, 1)}, ${channel(color, 3)}, ${channel(color, 5)}, ${opacity})`\n\nexport const textOnColor = (color: string): \"#000000\" | \"#FFFFFF\" =>\n contrastRatio(\"#000000\", color) >= contrastRatio(\"#FFFFFF\", color) ? \"#000000\" : \"#FFFFFF\"\n\nconst APPLIED_PROPERTIES = [\n \"--surface-base\",\n \"--surface-primary\",\n \"--surface-secondary\",\n \"--surface-muted\",\n \"--surface-code\",\n \"--surface-hover\",\n \"--border-base\",\n \"--border-secondary\",\n \"--border-muted\",\n \"--border-strong\",\n \"--border-critical\",\n \"--text-primary\",\n \"--text-secondary\",\n \"--text-muted\",\n \"--text-inverted\",\n \"--text-on-accent\",\n \"--accent-primary\",\n \"--accent-hover\",\n \"--focus-ring-color\",\n \"--focus-ring-offset\",\n \"--list-item-highlight-bg\",\n \"--list-item-highlight-bg-solid\",\n \"--list-item-highlight-border\",\n \"--attachment-chip-bg\",\n \"--attachment-chip-text\",\n \"--attachment-chip-ring\",\n \"--badge-neutral-bg\",\n \"--badge-neutral-text\",\n \"--env-vars-bg\",\n \"--env-vars-border\",\n \"--env-vars-text\",\n \"--dropdown-highlight-bg\",\n \"--selection-highlight-bg\",\n \"--selection-highlight-strong-bg\",\n \"--status-success\",\n \"--status-warning\",\n \"--status-error\",\n \"--status-success-bg\",\n \"--status-warning-bg\",\n \"--status-error-bg\",\n \"--status-success-ring\",\n \"--status-warning-ring\",\n \"--status-error-ring\",\n \"--status-ready-fg\",\n \"--status-ready-bg\",\n \"--status-starting-fg\",\n \"--status-starting-bg\",\n \"--status-error-fg\",\n \"--message-user-bg\",\n \"--message-user-border\",\n \"--message-assistant-border\",\n \"--session-status-compacting-fg\",\n \"--session-status-compacting-bg\",\n \"--session-yolo-accent\",\n] as const\n\nfunction derivedProperties(colors: ColorSchemeColors, dark: boolean): Record<(typeof APPLIED_PROPERTIES)[number], string> {\n const textOnAccent = textOnColor(colors.accentPrimary)\n return {\n \"--surface-base\": colors.surfaceBase,\n \"--surface-primary\": colors.surfaceBase,\n \"--surface-secondary\": colors.surfaceSecondary,\n \"--surface-muted\": colors.surfaceMuted,\n \"--surface-code\": colors.surfaceMuted,\n \"--surface-hover\": mix(colors.textPrimary, colors.surfaceSecondary, dark ? 0.12 : 0.08),\n \"--border-base\": colors.borderBase,\n \"--border-secondary\": mix(colors.borderBase, colors.surfaceSecondary, 0.72),\n \"--border-muted\": mix(colors.borderBase, colors.surfaceSecondary, 0.5),\n \"--border-strong\": mix(colors.textPrimary, colors.borderBase, 0.3),\n \"--border-critical\": colors.statusError,\n \"--text-primary\": colors.textPrimary,\n \"--text-secondary\": colors.textMuted,\n \"--text-muted\": colors.textMuted,\n \"--text-inverted\": textOnAccent,\n \"--text-on-accent\": textOnAccent,\n \"--accent-primary\": colors.accentPrimary,\n \"--accent-hover\": mix(dark ? \"#FFFFFF\" : \"#000000\", colors.accentPrimary, dark ? 0.14 : 0.18),\n \"--focus-ring-color\": colors.accentPrimary,\n \"--focus-ring-offset\": colors.surfaceBase,\n \"--list-item-highlight-bg\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--list-item-highlight-bg-solid\": mix(colors.accentPrimary, colors.surfaceSecondary, dark ? 0.22 : 0.1),\n \"--list-item-highlight-border\": alpha(colors.accentPrimary, dark ? 0.4 : 0.25),\n \"--attachment-chip-bg\": alpha(colors.accentPrimary, 0.1),\n \"--attachment-chip-text\": colors.accentPrimary,\n \"--attachment-chip-ring\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--badge-neutral-bg\": alpha(colors.accentPrimary, dark ? 0.15 : 0.05),\n \"--badge-neutral-text\": colors.accentPrimary,\n \"--env-vars-bg\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--env-vars-border\": alpha(colors.accentPrimary, dark ? 0.3 : 0.2),\n \"--env-vars-text\": colors.accentPrimary,\n \"--dropdown-highlight-bg\": alpha(colors.accentPrimary, dark ? 0.2 : 0.1),\n \"--selection-highlight-bg\": alpha(colors.accentPrimary, dark ? 0.18 : 0.12),\n \"--selection-highlight-strong-bg\": alpha(colors.accentPrimary, dark ? 0.28 : 0.18),\n \"--status-success\": colors.statusSuccess,\n \"--status-warning\": colors.statusWarning,\n \"--status-error\": colors.statusError,\n \"--status-success-bg\": alpha(colors.statusSuccess, 0.16),\n \"--status-warning-bg\": alpha(colors.statusWarning, 0.16),\n \"--status-error-bg\": alpha(colors.statusError, 0.16),\n \"--status-success-ring\": alpha(colors.statusSuccess, 0.42),\n \"--status-warning-ring\": alpha(colors.statusWarning, 0.42),\n \"--status-error-ring\": alpha(colors.statusError, 0.42),\n \"--status-ready-fg\": colors.statusSuccess,\n \"--status-ready-bg\": alpha(colors.statusSuccess, 0.16),\n \"--status-starting-fg\": colors.statusWarning,\n \"--status-starting-bg\": alpha(colors.statusWarning, 0.16),\n \"--status-error-fg\": colors.statusError,\n \"--message-user-bg\": mix(colors.userAccent, colors.surfaceSecondary, dark ? 0.1 : 0.12),\n \"--message-user-border\": colors.userAccent,\n \"--message-assistant-border\": colors.agentAccent,\n \"--session-status-compacting-fg\": colors.compactionAccent,\n \"--session-status-compacting-bg\": alpha(colors.compactionAccent, dark ? 0.28 : 0.18),\n \"--session-yolo-accent\": colors.yoloAccent,\n }\n}\n\nexport function applyColorScheme(\n scheme: NormalizedColorScheme,\n options: { target?: ColorSchemeTarget; systemDark?: boolean } = {},\n): boolean {\n const dark = scheme.appearance === \"dark\" || (scheme.appearance === \"system\" && Boolean(options.systemDark))\n const target = options.target ?? (typeof document === \"undefined\" ? undefined : document.documentElement)\n if (!target) return dark\n\n for (const property of APPLIED_PROPERTIES) target.style.removeProperty(property)\n target.dataset.colorScheme = scheme.id\n\n if (scheme.appearance === \"system\") target.removeAttribute(\"data-theme\")\n else target.setAttribute(\"data-theme\", dark ? \"dark\" : \"light\")\n\n if (scheme.colors && scheme.id !== \"classic\") {\n for (const [property, value] of Object.entries(derivedProperties(scheme.colors, dark))) {\n target.style.setProperty(property, value)\n }\n }\n\n return dark\n}\n","import {\n isColorSchemeColors,\n validateColorSchemeColors,\n type ColorSchemeColors,\n} from \"./theme-scheme.ts\"\n\nexport interface UserColorSchemePreset {\n name: string\n appearance: \"light\" | \"dark\"\n colors: ColorSchemeColors\n}\n\nexport type UserColorSchemePresets = Record<string, UserColorSchemePreset>\nexport const MAX_COLOR_SCHEME_PRESETS = 50\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nexport function normalizeColorSchemePresets(value: unknown): UserColorSchemePresets {\n if (!isRecord(value)) return {}\n const presets: UserColorSchemePresets = {}\n for (const [id, candidate] of Object.entries(value).slice(0, MAX_COLOR_SCHEME_PRESETS)) {\n if (!id || id.length > 128 || !isRecord(candidate)) continue\n const name = typeof candidate.name === \"string\" ? candidate.name.trim().slice(0, 80) : \"\"\n const appearance = candidate.appearance === \"light\" ? \"light\" : candidate.appearance === \"dark\" ? \"dark\" : undefined\n if (!name || !appearance || !isColorSchemeColors(candidate.colors) || !validateColorSchemeColors(candidate.colors)) continue\n presets[id] = { name, appearance, colors: { ...candidate.colors } }\n }\n return presets\n}\n\nexport function nextColorSchemePresetName(sourceName: string, existingNames: readonly string[]): string {\n const source = sourceName.trim() || \"Custom\"\n const match = /^(.*?)(?:\\s+(\\d+))?$/.exec(source)\n const base = match?.[1]?.trim() || source\n let suffix = match?.[2] ? Number(match[2]) + 1 : 2\n const used = new Set(existingNames.map((name) => name.trim().toLocaleLowerCase()))\n while (used.has(`${base} ${suffix}`.toLocaleLowerCase())) suffix += 1\n return `${base} ${suffix}`\n}\n\nexport function createColorSchemePresetId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return crypto.randomUUID()\n return `palette-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n}\n","export type ModelVisibilityPreference = { hiddenModelIds: readonly string[] }\n\nexport type ModelVisibilityPreferences = Record<string, ModelVisibilityPreference>\n\nexport function normalizeModelVisibilityPreference(value: unknown): ModelVisibilityPreference {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return { hiddenModelIds: [] }\n const hiddenModelIds = (value as { hiddenModelIds?: unknown }).hiddenModelIds\n if (!Array.isArray(hiddenModelIds)) return { hiddenModelIds: [] }\n\n return {\n hiddenModelIds: Array.from(new Set(hiddenModelIds.filter(\n (id): id is string => typeof id === \"string\" && id.length > 0,\n ))),\n }\n}\n\nexport function normalizeModelVisibilityPreferences(value: unknown): ModelVisibilityPreferences {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {}\n const result: ModelVisibilityPreferences = {}\n for (const [providerId, preference] of Object.entries(value as Record<string, unknown>)) {\n if (!providerId) continue\n result[providerId] = normalizeModelVisibilityPreference(preference)\n }\n return result\n}\n\nexport function isModelVisible(\n preference: ModelVisibilityPreference | undefined,\n modelId: string,\n): boolean {\n return !normalizeModelVisibilityPreference(preference).hiddenModelIds.includes(modelId)\n}\n\nexport function resolvePickerValue<T extends { key: string }>(\n current: T | undefined,\n options: readonly { key: string }[],\n): T | undefined {\n return current && options.some((option) => option.key === current.key) ? current : undefined\n}\n","import { createContext, createMemo, createSignal, onMount, useContext } from \"solid-js\"\nimport type { Accessor, ParentComponent } from \"solid-js\"\nimport { storage, type OwnerBucket } from \"../lib/storage\"\nimport type { RemoteServerProfile } from \"../../../server/src/api-types\"\nimport {\n ensureInstanceConfigLoaded,\n getInstanceConfig,\n updateInstanceConfig as updateInstanceData,\n} from \"./instance-config\"\nimport { getLogger } from \"../lib/logger\"\nimport { loadSpeechCapabilities, resetSpeechCapabilities } from \"./speech\"\nimport { buildSpeechPatch } from \"../lib/speech-patch\"\nimport {\n normalizeColorScheme,\n validateColorSchemeColors,\n type ColorSchemeColors,\n type NormalizedColorScheme,\n} from \"../lib/theme-scheme\"\nimport {\n createColorSchemePresetId,\n MAX_COLOR_SCHEME_PRESETS,\n normalizeColorSchemePresets,\n type UserColorSchemePresets,\n} from \"../lib/color-scheme-presets\"\nimport {\n normalizeModelVisibilityPreference,\n normalizeModelVisibilityPreferences,\n type ModelVisibilityPreference,\n type ModelVisibilityPreferences,\n} from \"../lib/model-visibility\"\n\nconst log = getLogger(\"actions\")\n\ntype DeepReadonly<T> = T extends (...args: any[]) => unknown\n ? T\n : T extends Array<infer U>\n ? ReadonlyArray<DeepReadonly<U>>\n : T extends object\n ? { readonly [K in keyof T]: DeepReadonly<T[K]> }\n : T\n\nexport interface ModelPreference {\n providerId: string\n modelId: string\n}\n\nexport type DiffViewMode = \"split\" | \"unified\"\nexport type FollowUpBehavior = \"steer\" | \"queue\"\nexport type ExpansionPreference = \"expanded\" | \"collapsed\"\nexport type VisibilityPreference = \"hidden\" | ExpansionPreference\nexport type ToolCallExpansionPreset = \"minimal\" | \"balanced\" | \"detailed\" | \"everything\"\nexport type ToolCallExpansionPresetSelection = ToolCallExpansionPreset | \"custom\"\nexport type ToolInputsVisibilityPreference = VisibilityPreference\nexport type ListeningMode = \"local\" | \"all\"\nexport type ServerLogLevel = \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\"\nexport type SpeechProviderPreference = \"openai-compatible\"\nexport type SpeechPlaybackMode = \"streaming\" | \"buffered\"\nexport type SpeechTtsFormat = \"mp3\" | \"wav\" | \"opus\" | \"aac\"\n\nexport interface ToolCallExpansionDefaults {\n preset: ToolCallExpansionPresetSelection\n thinking: ExpansionPreference\n tools: Record<string, VisibilityPreference>\n}\n\nexport interface SpeechSettings {\n provider: SpeechProviderPreference\n apiKey?: string\n hasApiKey: boolean\n baseUrl?: string\n sttModel: string\n ttsModel: string\n ttsVoice: string\n playbackMode: SpeechPlaybackMode\n ttsFormat: SpeechTtsFormat\n separateProviders: boolean\n stt: {\n apiKey?: string\n hasApiKey: boolean\n baseUrl?: string\n model: string\n }\n tts: {\n apiKey?: string\n hasApiKey: boolean\n baseUrl?: string\n model: string\n }\n}\n\nexport type SpeechSettingsUpdate = Partial<Omit<SpeechSettings, \"provider\" | \"hasApiKey\" | \"apiKey\" | \"baseUrl\" | \"sttModel\" | \"ttsModel\" | \"ttsVoice\" | \"stt\" | \"tts\">> & {\n apiKey?: string | null\n baseUrl?: string | null\n sttModel?: string | null\n ttsModel?: string | null\n ttsVoice?: string | null\n separateProviders?: boolean\n stt?: { apiKey?: string | null; baseUrl?: string | null; model?: string | null }\n tts?: { apiKey?: string | null; baseUrl?: string | null; model?: string | null }\n}\n\nexport interface UiSettings {\n showThinkingBlocks: boolean\n showKeyboardShortcutHints: boolean\n thinkingBlocksExpansion: ExpansionPreference\n showMessageTimeline: boolean\n showTimelineTools: boolean\n holdLongAssistantReplies: boolean\n promptSubmitOnEnter: boolean\n followUpBehavior: FollowUpBehavior\n showPromptVoiceInput: boolean\n locale?: string\n diffViewMode: DiffViewMode\n toolCallExpansionDefaults: ToolCallExpansionDefaults\n toolOutputExpansion: ExpansionPreference\n diagnosticsExpansion: VisibilityPreference\n toolInputsVisibility: ToolInputsVisibilityPreference\n showUsageMetrics: boolean\n usageMetricsExpansion: ExpansionPreference\n showProviderUsageCreditBalance: boolean\n autoCleanupBlankSessions: boolean\n keepUnseenSubagentIdleStatus: boolean\n focusExistingWindowOnSecondLaunch: boolean\n modelVisibility: ModelVisibilityPreferences\n\n // OS notifications\n osNotificationsEnabled: boolean\n osNotificationsAllowWhenVisible: boolean\n notifyOnNeedsInput: boolean\n notifyOnIdle: boolean\n}\n\n// Backwards-compatible alias for older imports.\nexport type Preferences = UiSettings\n\nexport interface OpenCodeBinary {\n path: string\n version?: string\n lastUsed: number\n label?: string\n}\n\nexport interface RecentFolder {\n path: string\n lastAccessed: number\n projectName?: string\n}\n\nexport type ThemePreference = \"light\" | \"dark\" | \"system\"\n\ninterface UiConfigBucket {\n theme?: ThemePreference\n colorScheme?: unknown\n customColorScheme?: unknown\n settings?: Partial<UiSettings>\n}\n\ninterface ServerConfigBucket {\n listeningMode?: ListeningMode\n logLevel?: ServerLogLevel\n environmentVariables?: Record<string, string>\n secureEnvVars?: string[]\n opencodeBinary?: string\n speech?: Partial<SpeechSettings>\n}\n\ninterface UiStateBucket {\n theme?: ThemePreference\n colorScheme?: unknown\n customColorScheme?: unknown\n colorSchemePresets?: unknown\n activeColorSchemePresetId?: string\n recentFolders?: RecentFolder[]\n opencodeBinaries?: OpenCodeBinary[]\n remoteServers?: RemoteServerProfile[]\n models?: {\n recents?: ModelPreference[]\n favorites?: ModelPreference[]\n thinkingSelections?: Record<string, string>\n }\n}\n\ninterface NormalizedUiState {\n recentFolders: RecentFolder[]\n opencodeBinaries: OpenCodeBinary[]\n remoteServers: RemoteServerProfile[]\n models: {\n recents: ModelPreference[]\n favorites: ModelPreference[]\n thinkingSelections: Record<string, string>\n }\n}\n\nconst MAX_RECENT_FOLDERS = 20\nconst MAX_RECENT_MODELS = 5\nconst MAX_FAVORITE_MODELS = 50\n\nconst defaultToolCallExpansionDefaults: ToolCallExpansionDefaults = {\n preset: \"balanced\",\n thinking: \"collapsed\",\n tools: {},\n}\n\nconst defaultUiSettings: UiSettings = {\n showThinkingBlocks: false,\n showKeyboardShortcutHints: false,\n thinkingBlocksExpansion: \"collapsed\",\n showMessageTimeline: true,\n showTimelineTools: false,\n holdLongAssistantReplies: true,\n promptSubmitOnEnter: true,\n followUpBehavior: \"steer\",\n showPromptVoiceInput: true,\n diffViewMode: \"split\",\n toolCallExpansionDefaults: defaultToolCallExpansionDefaults,\n toolOutputExpansion: \"expanded\",\n diagnosticsExpansion: \"expanded\",\n toolInputsVisibility: \"collapsed\",\n showUsageMetrics: true,\n usageMetricsExpansion: \"collapsed\",\n showProviderUsageCreditBalance: false,\n autoCleanupBlankSessions: true,\n keepUnseenSubagentIdleStatus: true,\n focusExistingWindowOnSecondLaunch: false,\n modelVisibility: {},\n\n osNotificationsEnabled: false,\n osNotificationsAllowWhenVisible: false,\n notifyOnNeedsInput: true,\n notifyOnIdle: true,\n}\n\nfunction normalizeExpansionPreference(value: unknown, fallback: ExpansionPreference): ExpansionPreference {\n return value === \"expanded\" || value === \"collapsed\" ? value : fallback\n}\n\nfunction normalizeVisibilityPreference(value: unknown, fallback: VisibilityPreference): VisibilityPreference {\n return value === \"hidden\" || value === \"expanded\" || value === \"collapsed\" ? value : fallback\n}\n\nfunction normalizeToolCallExpansionPreset(value: unknown): ToolCallExpansionPresetSelection {\n if (value === \"minimal\" || value === \"balanced\" || value === \"detailed\" || value === \"everything\" || value === \"custom\") {\n return value\n }\n return defaultToolCallExpansionDefaults.preset\n}\n\nfunction normalizeToolCallExpansionTools(value: unknown): Record<string, VisibilityPreference> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {}\n const next: Record<string, VisibilityPreference> = {}\n for (const [tool, mode] of Object.entries(value as Record<string, unknown>)) {\n if (!tool) continue\n if (mode === \"hidden\" || mode === \"expanded\" || mode === \"collapsed\") {\n next[tool] = mode\n }\n }\n return next\n}\n\nfunction normalizeToolCallExpansionDefaults(input: unknown, legacySettings: Partial<UiSettings>): ToolCallExpansionDefaults {\n const source = input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Partial<ToolCallExpansionDefaults>)\n : undefined\n const legacyThinking = normalizeExpansionPreference(\n legacySettings.thinkingBlocksExpansion,\n \"collapsed\",\n )\n\n return {\n preset: normalizeToolCallExpansionPreset(source?.preset),\n thinking: normalizeExpansionPreference(source?.thinking, legacyThinking),\n tools: normalizeToolCallExpansionTools(source?.tools),\n }\n}\n\nconst defaultSpeechSettings: SpeechSettings = {\n provider: \"openai-compatible\",\n hasApiKey: false,\n sttModel: \"gpt-4o-mini-transcribe\",\n ttsModel: \"gpt-4o-mini-tts\",\n ttsVoice: \"alloy\",\n playbackMode: \"streaming\",\n ttsFormat: \"mp3\",\n separateProviders: false,\n stt: {\n hasApiKey: false,\n model: \"gpt-4o-mini-transcribe\",\n },\n tts: {\n hasApiKey: false,\n model: \"gpt-4o-mini-tts\",\n },\n}\n\nfunction normalizeUiSettings(input?: Partial<UiSettings> | null): UiSettings {\n const sanitized = input ?? {}\n const toolCallExpansionDefaults = normalizeToolCallExpansionDefaults(sanitized.toolCallExpansionDefaults, sanitized)\n const usageMetricsFallback =\n toolCallExpansionDefaults.preset === \"minimal\" || toolCallExpansionDefaults.preset === \"balanced\"\n ? \"collapsed\"\n : \"expanded\"\n return {\n showThinkingBlocks: sanitized.showThinkingBlocks ?? defaultUiSettings.showThinkingBlocks,\n showKeyboardShortcutHints:\n sanitized.showKeyboardShortcutHints ?? defaultUiSettings.showKeyboardShortcutHints,\n thinkingBlocksExpansion: sanitized.thinkingBlocksExpansion ?? defaultUiSettings.thinkingBlocksExpansion,\n showMessageTimeline: sanitized.showMessageTimeline ?? defaultUiSettings.showMessageTimeline,\n showTimelineTools: sanitized.showTimelineTools ?? defaultUiSettings.showTimelineTools,\n holdLongAssistantReplies: sanitized.holdLongAssistantReplies ?? defaultUiSettings.holdLongAssistantReplies,\n promptSubmitOnEnter: sanitized.promptSubmitOnEnter ?? defaultUiSettings.promptSubmitOnEnter,\n followUpBehavior:\n sanitized.followUpBehavior === \"queue\" || sanitized.followUpBehavior === \"steer\"\n ? sanitized.followUpBehavior\n : defaultUiSettings.followUpBehavior,\n showPromptVoiceInput: sanitized.showPromptVoiceInput ?? defaultUiSettings.showPromptVoiceInput,\n locale: sanitized.locale ?? defaultUiSettings.locale,\n diffViewMode: sanitized.diffViewMode ?? defaultUiSettings.diffViewMode,\n toolCallExpansionDefaults,\n toolOutputExpansion: sanitized.toolOutputExpansion ?? defaultUiSettings.toolOutputExpansion,\n diagnosticsExpansion: normalizeVisibilityPreference(\n sanitized.diagnosticsExpansion,\n defaultUiSettings.diagnosticsExpansion,\n ),\n toolInputsVisibility:\n sanitized.toolInputsVisibility === \"hidden\" || sanitized.toolInputsVisibility === \"collapsed\" || sanitized.toolInputsVisibility === \"expanded\"\n ? sanitized.toolInputsVisibility\n : defaultUiSettings.toolInputsVisibility,\n showUsageMetrics: sanitized.showUsageMetrics ?? defaultUiSettings.showUsageMetrics,\n usageMetricsExpansion: normalizeExpansionPreference(\n sanitized.usageMetricsExpansion,\n usageMetricsFallback,\n ),\n showProviderUsageCreditBalance:\n sanitized.showProviderUsageCreditBalance ?? defaultUiSettings.showProviderUsageCreditBalance,\n autoCleanupBlankSessions: sanitized.autoCleanupBlankSessions ?? defaultUiSettings.autoCleanupBlankSessions,\n keepUnseenSubagentIdleStatus:\n sanitized.keepUnseenSubagentIdleStatus ?? defaultUiSettings.keepUnseenSubagentIdleStatus,\n focusExistingWindowOnSecondLaunch: sanitized.focusExistingWindowOnSecondLaunch === true,\n modelVisibility: normalizeModelVisibilityPreferences(sanitized.modelVisibility),\n osNotificationsEnabled: sanitized.osNotificationsEnabled ?? defaultUiSettings.osNotificationsEnabled,\n osNotificationsAllowWhenVisible:\n sanitized.osNotificationsAllowWhenVisible ?? defaultUiSettings.osNotificationsAllowWhenVisible,\n notifyOnNeedsInput: sanitized.notifyOnNeedsInput ?? defaultUiSettings.notifyOnNeedsInput,\n notifyOnIdle: sanitized.notifyOnIdle ?? defaultUiSettings.notifyOnIdle,\n }\n}\n\nfunction normalizeRecord(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {}\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (typeof v === \"string\") out[k] = v\n }\n return out\n}\n\nfunction normalizeSpeechSettings(input?: Partial<SpeechSettings> | null): SpeechSettings {\n const sanitized = input ?? {}\n const sttModel =\n typeof sanitized.sttModel === \"string\" && sanitized.sttModel.trim()\n ? sanitized.sttModel.trim()\n : defaultSpeechSettings.sttModel\n const ttsModel =\n typeof sanitized.ttsModel === \"string\" && sanitized.ttsModel.trim()\n ? sanitized.ttsModel.trim()\n : defaultSpeechSettings.ttsModel\n return {\n provider: sanitized.provider === \"openai-compatible\" ? sanitized.provider : defaultSpeechSettings.provider,\n apiKey: typeof sanitized.apiKey === \"string\" && sanitized.apiKey.trim() ? sanitized.apiKey.trim() : undefined,\n hasApiKey: sanitized.hasApiKey === true || (typeof sanitized.apiKey === \"string\" && sanitized.apiKey.trim().length > 0),\n baseUrl: typeof sanitized.baseUrl === \"string\" && sanitized.baseUrl.trim() ? sanitized.baseUrl.trim() : undefined,\n sttModel,\n ttsModel,\n ttsVoice:\n typeof sanitized.ttsVoice === \"string\" && sanitized.ttsVoice.trim()\n ? sanitized.ttsVoice.trim()\n : defaultSpeechSettings.ttsVoice,\n playbackMode:\n sanitized.playbackMode === \"buffered\" || sanitized.playbackMode === \"streaming\"\n ? sanitized.playbackMode\n : defaultSpeechSettings.playbackMode,\n ttsFormat:\n sanitized.ttsFormat === \"wav\" || sanitized.ttsFormat === \"opus\" || sanitized.ttsFormat === \"aac\" || sanitized.ttsFormat === \"mp3\"\n ? sanitized.ttsFormat\n : defaultSpeechSettings.ttsFormat,\n separateProviders: sanitized.separateProviders === true,\n stt: {\n apiKey: typeof sanitized.stt?.apiKey === \"string\" && sanitized.stt.apiKey.trim() ? sanitized.stt.apiKey.trim() : undefined,\n hasApiKey: sanitized.stt?.hasApiKey === true || (typeof sanitized.stt?.apiKey === \"string\" && sanitized.stt.apiKey.trim().length > 0),\n baseUrl: typeof sanitized.stt?.baseUrl === \"string\" && sanitized.stt.baseUrl.trim() ? sanitized.stt.baseUrl.trim() : undefined,\n model:\n typeof sanitized.stt?.model === \"string\" && sanitized.stt.model.trim()\n ? sanitized.stt.model.trim()\n : sttModel,\n },\n tts: {\n apiKey: typeof sanitized.tts?.apiKey === \"string\" && sanitized.tts.apiKey.trim() ? sanitized.tts.apiKey.trim() : undefined,\n hasApiKey: sanitized.tts?.hasApiKey === true || (typeof sanitized.tts?.apiKey === \"string\" && sanitized.tts.apiKey.trim().length > 0),\n baseUrl: typeof sanitized.tts?.baseUrl === \"string\" && sanitized.tts.baseUrl.trim() ? sanitized.tts.baseUrl.trim() : undefined,\n model:\n typeof sanitized.tts?.model === \"string\" && sanitized.tts.model.trim()\n ? sanitized.tts.model.trim()\n : ttsModel,\n },\n }\n}\n\nfunction cloneArray<T>(value: unknown, mapper: (item: any) => T | null): T[] {\n if (!Array.isArray(value)) return []\n const out: T[] = []\n for (const item of value) {\n const mapped = mapper(item)\n if (mapped) out.push(mapped)\n }\n return out\n}\n\nfunction normalizeUiState(input?: UiStateBucket | null): NormalizedUiState {\n const source = input ?? {}\n return {\n recentFolders: cloneArray<RecentFolder>(source.recentFolders, (f) => {\n if (!f || typeof f !== \"object\") return null\n const p = (f as any).path\n const lastAccessed = (f as any).lastAccessed\n const projectName = (f as any).projectName\n if (typeof p !== \"string\") return null\n const ts = typeof lastAccessed === \"number\" ? lastAccessed : Date.now()\n return {\n path: p,\n lastAccessed: ts,\n ...(typeof projectName === \"string\" && projectName.trim() ? { projectName: projectName.trim() } : {}),\n }\n }),\n opencodeBinaries: cloneArray<OpenCodeBinary>(source.opencodeBinaries, (b) => {\n if (!b || typeof b !== \"object\") return null\n const p = (b as any).path\n if (typeof p !== \"string\") return null\n const lastUsed = typeof (b as any).lastUsed === \"number\" ? (b as any).lastUsed : Date.now()\n const version = typeof (b as any).version === \"string\" ? (b as any).version : undefined\n const label = typeof (b as any).label === \"string\" ? (b as any).label : undefined\n return { path: p, version, label, lastUsed }\n }),\n remoteServers: cloneArray<RemoteServerProfile>(source.remoteServers, (server) => {\n if (!server || typeof server !== \"object\") return null\n const id = typeof (server as any).id === \"string\" ? (server as any).id.trim() : \"\"\n const name = typeof (server as any).name === \"string\" ? (server as any).name.trim() : \"\"\n const baseUrl = typeof (server as any).baseUrl === \"string\" ? (server as any).baseUrl.trim() : \"\"\n if (!id || !name || !baseUrl) return null\n const createdAt = typeof (server as any).createdAt === \"string\" ? (server as any).createdAt : new Date().toISOString()\n const updatedAt = typeof (server as any).updatedAt === \"string\" ? (server as any).updatedAt : createdAt\n const lastConnectedAt = typeof (server as any).lastConnectedAt === \"string\" ? (server as any).lastConnectedAt : undefined\n return {\n id,\n name,\n baseUrl,\n skipTlsVerify: Boolean((server as any).skipTlsVerify),\n createdAt,\n updatedAt,\n lastConnectedAt,\n }\n }).sort((a, b) => {\n const left = a.lastConnectedAt ?? a.updatedAt\n const right = b.lastConnectedAt ?? b.updatedAt\n return right.localeCompare(left)\n }),\n models: {\n recents: cloneArray<ModelPreference>((source.models as any)?.recents, (m) => {\n if (!m || typeof m !== \"object\") return null\n const providerId = (m as any).providerId\n const modelId = (m as any).modelId\n if (typeof providerId !== \"string\" || typeof modelId !== \"string\") return null\n return { providerId, modelId }\n }),\n favorites: cloneArray<ModelPreference>((source.models as any)?.favorites, (m) => {\n if (!m || typeof m !== \"object\") return null\n const providerId = (m as any).providerId\n const modelId = (m as any).modelId\n if (typeof providerId !== \"string\" || typeof modelId !== \"string\") return null\n return { providerId, modelId }\n }),\n thinkingSelections: normalizeRecord((source.models as any)?.thinkingSelections),\n },\n }\n}\n\nexport function normalizeServerConfig(\n input?: ServerConfigBucket | null,\n): Required<Pick<ServerConfigBucket, \"listeningMode\" | \"logLevel\" | \"environmentVariables\" | \"opencodeBinary\" | \"secureEnvVars\">> & { speech: SpeechSettings } {\n const source = input ?? {}\n const listeningMode = source.listeningMode === \"all\" ? \"all\" : \"local\"\n const logLevel =\n source.logLevel === \"INFO\" || source.logLevel === \"WARN\" || source.logLevel === \"ERROR\" || source.logLevel === \"DEBUG\"\n ? source.logLevel\n : \"DEBUG\"\n const opencodeBinary = typeof source.opencodeBinary === \"string\" && source.opencodeBinary.trim() && source.opencodeBinary !== \"opencode\"\n ? source.opencodeBinary\n : \"opencode2\"\n const environmentVariables = normalizeRecord(source.environmentVariables)\n const secureEnvVars = normalizeSecureEnvVars(source.secureEnvVars)\n const speech = normalizeSpeechSettings(source.speech)\n return { listeningMode, logLevel, opencodeBinary, environmentVariables, secureEnvVars, speech }\n}\n\nfunction normalizeSecureEnvVars(input?: unknown): string[] {\n if (!Array.isArray(input)) return []\n return input.filter((item): item is string => typeof item === \"string\" && item.length > 0)\n}\n\nfunction getModelKey(model: { providerId: string; modelId: string }): string {\n return `${model.providerId}/${model.modelId}`\n}\n\nfunction buildRecentFolderList(folderPath: string, source: RecentFolder[], aliasPath?: string): RecentFolder[] {\n const matchingPaths = new Set([folderPath, aliasPath].filter((value): value is string => Boolean(value)))\n const aliasEntry = aliasPath ? source.find((folder) => folder.path === aliasPath) : undefined\n const canonicalEntry = source.find((folder) => folder.path === folderPath)\n const projectName = aliasEntry?.projectName ?? canonicalEntry?.projectName\n const folders = source.filter((folder) => !matchingPaths.has(folder.path))\n folders.unshift({\n path: folderPath,\n lastAccessed: Date.now(),\n ...(projectName ? { projectName } : {}),\n })\n return folders.slice(0, MAX_RECENT_FOLDERS)\n}\n\nexport function buildBinaryList(binaryPath: string, version: string | undefined, source: OpenCodeBinary[]): OpenCodeBinary[] {\n if (binaryPath === \"opencode\" || binaryPath === \"opencode2\") return source\n const timestamp = Date.now()\n const existing = source.find((b) => b.path === binaryPath)\n if (existing) {\n const updatedEntry: OpenCodeBinary = { ...existing, lastUsed: timestamp, version: version ?? existing.version }\n const remaining = source.filter((b) => b.path !== binaryPath)\n return [updatedEntry, ...remaining]\n }\n const nextEntry: OpenCodeBinary = version\n ? { path: binaryPath, version, lastUsed: timestamp }\n : { path: binaryPath, lastUsed: timestamp }\n return [nextEntry, ...source].slice(0, 10)\n}\n\ninterface RemoteServerProfileInput {\n id?: string\n name: string\n baseUrl: string\n skipTlsVerify: boolean\n}\n\nfunction buildRemoteServerProfile(input: RemoteServerProfileInput, source: RemoteServerProfile[]): RemoteServerProfile {\n const existing = input.id ? source.find((entry) => entry.id === input.id) : undefined\n const now = new Date().toISOString()\n return {\n id: existing?.id ?? input.id ?? createRandomId(),\n name: input.name.trim(),\n baseUrl: input.baseUrl.trim(),\n skipTlsVerify: Boolean(input.skipTlsVerify),\n createdAt: existing?.createdAt ?? now,\n updatedAt: now,\n lastConnectedAt: existing?.lastConnectedAt,\n }\n}\n\nfunction buildRemoteServerList(profile: RemoteServerProfile, source: RemoteServerProfile[]): RemoteServerProfile[] {\n const remaining = source.filter((entry) => entry.id !== profile.id)\n return [profile, ...remaining].sort((a, b) => {\n const left = a.lastConnectedAt ?? a.updatedAt\n const right = b.lastConnectedAt ?? b.updatedAt\n return right.localeCompare(left)\n })\n}\n\nfunction createRandomId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID()\n }\n return `remote-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n}\n\nconst [uiConfigBucket, setUiConfigBucket] = createSignal<UiConfigBucket>({})\nconst [serverConfigBucket, setServerConfigBucket] = createSignal<ServerConfigBucket>({})\nconst [uiStateBucket, setUiStateBucket] = createSignal<UiStateBucket>({})\nconst [isLoaded, setIsLoaded] = createSignal(false)\n\nconst uiSettings = createMemo<UiSettings>(() => normalizeUiSettings(uiConfigBucket().settings))\nconst themePreference = createMemo<ThemePreference>(() => uiStateBucket().theme ?? uiConfigBucket().theme ?? \"system\")\nconst colorSchemePreference = createMemo(() => normalizeColorScheme(uiStateBucket().colorScheme ?? uiConfigBucket().colorScheme, themePreference()))\nconst customColorSchemePreference = createMemo(() => {\n const state = uiStateBucket()\n const config = uiConfigBucket()\n const custom = state.customColorScheme\n ?? config.customColorScheme\n ?? (colorSchemePreference().id === \"custom\" ? state.colorScheme ?? config.colorScheme : undefined)\n const value = typeof custom === \"object\" && custom !== null && !Array.isArray(custom)\n ? { ...(custom as Record<string, unknown>), id: \"custom\" }\n : { id: \"custom\" }\n return normalizeColorScheme(value)\n})\nconst colorSchemePresets = createMemo<UserColorSchemePresets>(() => normalizeColorSchemePresets(uiStateBucket().colorSchemePresets))\nconst activeColorSchemePresetId = createMemo(() => {\n const id = uiStateBucket().activeColorSchemePresetId\n return typeof id === \"string\" && colorSchemePresets()[id] ? id : undefined\n})\nconst serverSettings = createMemo(() => normalizeServerConfig(serverConfigBucket()))\nconst uiState = createMemo(() => normalizeUiState(uiStateBucket()))\n\nconst preferences = uiSettings\nconst recentFolders = createMemo<RecentFolder[]>(() => uiState().recentFolders)\nconst opencodeBinaries = createMemo<OpenCodeBinary[]>(() => uiState().opencodeBinaries)\nconst remoteServers = createMemo<RemoteServerProfile[]>(() => uiState().remoteServers)\n\nlet loadPromise: Promise<void> | null = null\n\nasync function ensureLoaded(): Promise<void> {\n if (isLoaded()) return\n if (!loadPromise) {\n loadPromise = Promise.all([\n storage.loadConfigOwner(\"ui\"),\n storage.loadConfigOwner(\"server\"),\n storage.loadStateOwner(\"ui\"),\n ])\n .then(([uiCfg, srvCfg, uiSt]) => {\n setUiConfigBucket(uiCfg as any)\n setServerConfigBucket(srvCfg as any)\n setUiStateBucket(uiSt as any)\n setIsLoaded(true)\n })\n .catch((error) => {\n log.error(\"Failed to load settings\", error)\n setUiConfigBucket({})\n setServerConfigBucket({})\n setUiStateBucket({})\n setIsLoaded(true)\n })\n .finally(() => {\n loadPromise = null\n })\n }\n await loadPromise\n}\n\nasync function patchConfigOwner(owner: string, patch: unknown) {\n await ensureLoaded()\n const updated = await storage.patchConfigOwner(owner, patch)\n if (owner === \"ui\") setUiConfigBucket(updated as any)\n if (owner === \"server\") setServerConfigBucket(updated as any)\n}\n\nasync function patchStateOwner(owner: string, patch: unknown) {\n await ensureLoaded()\n const updated = await storage.patchStateOwner(owner, patch)\n if (owner === \"ui\") setUiStateBucket(updated as any)\n}\n\nfunction updateUiSettings(updates: Partial<UiSettings>): Promise<boolean> {\n const current = uiConfigBucket()\n const nextSettings = normalizeUiSettings({ ...(current.settings ?? {}), ...updates })\n const patch = {\n settings: Object.fromEntries(\n Object.keys(updates).map((key) => [key, nextSettings[key as keyof UiSettings]]),\n ),\n }\n return patchConfigOwner(\"ui\", patch).then(\n () => true,\n (error) => {\n log.error(\"Failed to patch ui settings\", error)\n return false\n },\n )\n}\n\nfunction updatePreferences(updates: Partial<UiSettings>): Promise<boolean> {\n return updateUiSettings(updates)\n}\n\nconst modelVisibilityWriteQueues = new Map<string, Promise<void>>()\nlet modelVisibilityWriteQueue = Promise.resolve()\nconst [pendingModelVisibility, setPendingModelVisibility] = createSignal(new Map<string, ModelVisibilityPreference>())\nconst [modelVisibilityWriteFailures, setModelVisibilityWriteFailures] = createSignal(new Set<string>())\n\nfunction getProviderModelVisibilityPreference(providerId: string): ModelVisibilityPreference {\n return pendingModelVisibility().get(providerId)\n ?? normalizeModelVisibilityPreference(preferences().modelVisibility[providerId])\n}\n\nfunction providerModelVisibilitySaveFailed(providerId: string): boolean {\n return modelVisibilityWriteFailures().has(providerId)\n}\n\nasync function setProviderModelVisibility(providerId: string, preference: ModelVisibilityPreference): Promise<void> {\n if (!providerId) return\n const normalized = normalizeModelVisibilityPreference(preference)\n setPendingModelVisibility((current) => new Map(current).set(providerId, normalized))\n setModelVisibilityWriteFailures((current) => {\n const next = new Set(current)\n next.delete(providerId)\n return next\n })\n const previous = modelVisibilityWriteQueue\n const write = previous\n .catch(() => undefined)\n .then(() => patchConfigOwner(\"ui\", {\n settings: {\n modelVisibility: {\n [providerId]: normalized,\n },\n },\n }))\n\n modelVisibilityWriteQueue = write\n modelVisibilityWriteQueues.set(providerId, write)\n void write.then(\n () => {\n if (modelVisibilityWriteQueues.get(providerId) !== write) return\n modelVisibilityWriteQueues.delete(providerId)\n setPendingModelVisibility((current) => {\n const next = new Map(current)\n next.delete(providerId)\n return next\n })\n },\n (error) => {\n log.error(\"Failed to update provider model visibility\", error)\n if (modelVisibilityWriteQueues.get(providerId) !== write) return\n modelVisibilityWriteQueues.delete(providerId)\n setPendingModelVisibility((current) => {\n const next = new Map(current)\n next.delete(providerId)\n return next\n })\n setModelVisibilityWriteFailures((current) => new Set(current).add(providerId))\n },\n )\n await write\n}\n\nfunction setThemePreference(preference: ThemePreference): void {\n void setColorSchemePreference(normalizeColorScheme(preference === \"dark\" ? \"classic\" : preference))\n}\n\nlet colorSchemeWriteQueue = Promise.resolve()\n\nfunction setColorSchemePreference(preference: NormalizedColorScheme): Promise<void> {\n const normalized = normalizeColorScheme(preference)\n const legacyTheme: ThemePreference = normalized.appearance === \"system\" ? \"system\" : normalized.appearance\n const patch = {\n theme: legacyTheme,\n colorScheme: normalized,\n ...(normalized.id === \"custom\" ? { customColorScheme: normalized } : {}),\n activeColorSchemePresetId: null,\n }\n const write = colorSchemeWriteQueue.then(() => patchStateOwner(\"ui\", patch))\n colorSchemeWriteQueue = write.then(() => undefined, () => undefined)\n return write.then(() => undefined).catch((error) => {\n log.error(\"Failed to set color scheme\", error)\n throw error\n })\n}\n\nfunction selectColorSchemePreset(id: string): Promise<void> {\n const preset = colorSchemePresets()[id]\n if (!preset) return Promise.resolve()\n const scheme = normalizeColorScheme({ id: \"custom\", appearance: preset.appearance, colors: preset.colors })\n const write = colorSchemeWriteQueue.then(() => patchStateOwner(\"ui\", {\n theme: preset.appearance,\n colorScheme: scheme,\n customColorScheme: scheme,\n activeColorSchemePresetId: id,\n }))\n colorSchemeWriteQueue = write.then(() => undefined, () => undefined)\n return write.then(() => undefined)\n}\n\nfunction saveColorSchemePreset(name: string, appearance: \"light\" | \"dark\", colors: Readonly<ColorSchemeColors>): Promise<string> {\n const trimmedName = name.trim().slice(0, 80)\n if (!trimmedName || !validateColorSchemeColors(colors)) return Promise.reject(new Error(\"Invalid color scheme preset\"))\n if (Object.keys(colorSchemePresets()).length >= MAX_COLOR_SCHEME_PRESETS) return Promise.reject(new Error(\"Color scheme preset limit reached\"))\n const id = createColorSchemePresetId()\n const scheme = normalizeColorScheme({ id: \"custom\", appearance, colors })\n const write = colorSchemeWriteQueue.then(() => patchStateOwner(\"ui\", {\n theme: appearance,\n colorScheme: scheme,\n customColorScheme: scheme,\n colorSchemePresets: { [id]: { name: trimmedName, appearance, colors: { ...colors } } },\n activeColorSchemePresetId: id,\n }))\n colorSchemeWriteQueue = write.then(() => undefined, () => undefined)\n return write.then(() => id)\n}\n\n async function setListeningMode(mode: ListeningMode): Promise<void> {\n if (serverSettings().listeningMode === mode) return\n await patchConfigOwner(\"server\", { listeningMode: mode })\n }\n\nfunction updateEnvironmentVariables(envVars: Record<string, string>): void {\n void patchConfigOwner(\"server\", { environmentVariables: envVars }).catch((error) =>\n log.error(\"Failed to update environment variables\", error),\n )\n}\n\nfunction addEnvironmentVariable(key: string, value: string, secure: boolean = true): void {\n const current = serverSettings().environmentVariables\n updateEnvironmentVariables({ ...current, [key]: value })\n\n const secureList = serverSettings().secureEnvVars\n const upperKey = key.toUpperCase()\n const exists = secureList.some((name) => name.toUpperCase() === upperKey)\n\n if (secure) {\n if (!exists) {\n const next = [...secureList, key]\n void patchConfigOwner(\"server\", { secureEnvVars: next }).catch((error) =>\n log.error(\"Failed to add secure env var\", error),\n )\n }\n } else {\n if (exists) {\n const next = secureList.filter((name) => name.toUpperCase() !== upperKey)\n void patchConfigOwner(\"server\", { secureEnvVars: next }).catch((error) =>\n log.error(\"Failed to remove secure env var\", error),\n )\n }\n }\n}\n\nfunction removeEnvironmentVariable(key: string): void {\n void patchConfigOwner(\"server\", { environmentVariables: { [key]: null } }).catch((error) =>\n log.error(\"Failed to remove environment variable\", error),\n )\n}\n\nfunction isSecureEnvVar(key: string): boolean {\n const secureList = serverSettings().secureEnvVars\n return secureList.some((name) => name.toUpperCase() === key.toUpperCase())\n}\n\nfunction toggleSecureEnvVar(key: string): void {\n const secureList = serverSettings().secureEnvVars\n const upperKey = key.toUpperCase()\n const exists = secureList.some((name) => name.toUpperCase() === upperKey)\n const next = exists\n ? secureList.filter((name) => name.toUpperCase() !== upperKey)\n : [...secureList, key]\n void patchConfigOwner(\"server\", { secureEnvVars: next }).catch((error) =>\n log.error(\"Failed to update secure env vars\", error),\n )\n}\n\nfunction updateLastUsedBinary(path: string): void {\n const target = path && path.trim().length > 0 ? path : \"opencode2\"\n void patchConfigOwner(\"server\", { opencodeBinary: target }).catch((error) => log.error(\"Failed to set default binary\", error))\n\n // also bump lastUsed in state ui.opencodeBinaries\n const nextList = buildBinaryList(target, undefined, opencodeBinaries())\n void patchStateOwner(\"ui\", { opencodeBinaries: nextList }).catch((error) => log.error(\"Failed to update binary list\", error))\n}\n\nfunction updateLogLevel(level: ServerLogLevel): void {\n const target = level ?? \"DEBUG\"\n void patchConfigOwner(\"server\", { logLevel: target }).catch((error) => log.error(\"Failed to set log level\", error))\n}\n\nasync function updateSpeechSettings(updates: SpeechSettingsUpdate): Promise<void> {\n const patch = buildSpeechPatch(updates)\n try {\n await patchConfigOwner(\"server\", { speech: patch })\n } catch (error) {\n log.error(\"Failed to update speech settings\", error)\n throw error\n }\n}\n\nfunction addOpenCodeBinary(path: string, version?: string): void {\n const nextList = buildBinaryList(path, version, opencodeBinaries())\n void patchStateOwner(\"ui\", { opencodeBinaries: nextList }).catch((error) => log.error(\"Failed to add binary\", error))\n}\n\nfunction removeOpenCodeBinary(path: string): void {\n const nextList = opencodeBinaries().filter((b) => b.path !== path)\n void patchStateOwner(\"ui\", { opencodeBinaries: nextList }).catch((error) => log.error(\"Failed to remove binary\", error))\n\n if (serverSettings().opencodeBinary === path) {\n void patchConfigOwner(\"server\", { opencodeBinary: \"opencode2\" }).catch((error) =>\n log.error(\"Failed to reset default binary\", error),\n )\n }\n}\n\nfunction addRecentFolder(folderPath: string): void {\n const next = buildRecentFolderList(folderPath, recentFolders())\n void patchStateOwner(\"ui\", { recentFolders: next }).catch((error) => log.error(\"Failed to add recent folder\", error))\n}\n\nfunction removeRecentFolder(folderPath: string): void {\n const next = recentFolders().filter((f) => f.path !== folderPath)\n void patchStateOwner(\"ui\", { recentFolders: next }).catch((error) => log.error(\"Failed to remove recent folder\", error))\n}\n\nasync function renameRecentFolderProject(folderPath: string, projectName: string): Promise<void> {\n const name = projectName.trim()\n if (!folderPath || !name) return\n const next = recentFolders().map((folder) => (folder.path === folderPath ? { ...folder, projectName: name } : folder))\n try {\n await patchStateOwner(\"ui\", { recentFolders: next })\n } catch (error) {\n log.error(\"Failed to rename recent folder\", error)\n throw error\n }\n}\n\nasync function saveRemoteServerProfile(input: RemoteServerProfileInput): Promise<RemoteServerProfile> {\n const profile = buildRemoteServerProfile(input, remoteServers())\n await patchStateOwner(\"ui\", { remoteServers: buildRemoteServerList(profile, remoteServers()) })\n return profile\n}\n\nasync function markRemoteServerConnected(id: string): Promise<void> {\n const current = remoteServers().find((entry) => entry.id === id)\n if (!current) return\n const now = new Date().toISOString()\n const updated: RemoteServerProfile = {\n ...current,\n updatedAt: now,\n lastConnectedAt: now,\n }\n await patchStateOwner(\"ui\", { remoteServers: buildRemoteServerList(updated, remoteServers()) })\n}\n\nfunction removeRemoteServerProfile(id: string): void {\n const next = remoteServers().filter((entry) => entry.id !== id)\n void patchStateOwner(\"ui\", { remoteServers: next }).catch((error) => log.error(\"Failed to remove remote server\", error))\n}\n\nfunction recordWorkspaceLaunch(folderPath: string, aliasPath?: string): void {\n const nextFolders = buildRecentFolderList(folderPath, recentFolders(), aliasPath)\n\n void patchStateOwner(\"ui\", { recentFolders: nextFolders }).catch((error) =>\n log.error(\"Failed to update ui state on launch\", error),\n )\n}\n\nfunction addRecentModelPreference(model: ModelPreference): void {\n if (!model.providerId || !model.modelId) return\n const recents = uiState().models.recents\n const filtered = recents.filter((item) => item.providerId !== model.providerId || item.modelId !== model.modelId)\n const updated = [model, ...filtered].slice(0, MAX_RECENT_MODELS)\n void patchStateOwner(\"ui\", { models: { recents: updated } }).catch((error) => log.error(\"Failed to update model recents\", error))\n}\n\nfunction isFavoriteModelPreference(model: ModelPreference): boolean {\n if (!model.providerId || !model.modelId) return false\n return uiState().models.favorites.some((item) => item.providerId === model.providerId && item.modelId === model.modelId)\n}\n\nfunction toggleFavoriteModelPreference(model: ModelPreference): void {\n if (!model.providerId || !model.modelId) return\n const favorites = uiState().models.favorites\n const exists = favorites.some((item) => item.providerId === model.providerId && item.modelId === model.modelId)\n\n const updated = exists\n ? favorites.filter((item) => item.providerId !== model.providerId || item.modelId !== model.modelId)\n : [model, ...favorites.filter((item) => item.providerId !== model.providerId || item.modelId !== model.modelId)].slice(\n 0,\n MAX_FAVORITE_MODELS,\n )\n\n void patchStateOwner(\"ui\", { models: { favorites: updated } }).catch((error) => log.error(\"Failed to update model favorites\", error))\n}\n\nfunction getModelThinkingSelection(model: { providerId: string; modelId: string }): string | undefined {\n if (!model.providerId || !model.modelId) return undefined\n return uiState().models.thinkingSelections[getModelKey(model)]\n}\n\nfunction setModelThinkingSelection(model: { providerId: string; modelId: string }, value: string | undefined): void {\n if (!model.providerId || !model.modelId) return\n const key = getModelKey(model)\n const current = uiState().models.thinkingSelections[key]\n if (current === value) return\n\n const selections = { ...uiState().models.thinkingSelections }\n if (!value) {\n delete selections[key]\n } else {\n selections[key] = value\n }\n void patchStateOwner(\"ui\", { models: { thinkingSelections: selections } }).catch((error) =>\n log.error(\"Failed to update thinking selection\", error),\n )\n}\n\nfunction setDiffViewMode(mode: DiffViewMode): void {\n if (preferences().diffViewMode === mode) return\n updateUiSettings({ diffViewMode: mode })\n}\n\nfunction setToolOutputExpansion(mode: VisibilityPreference): void {\n const current = preferences()\n if (current.toolCallExpansionDefaults.tools.other === mode) return\n updateUiSettings({\n toolOutputExpansion: mode === \"hidden\" ? current.toolOutputExpansion : mode,\n toolCallExpansionDefaults: {\n ...current.toolCallExpansionDefaults,\n preset: \"custom\",\n tools: {\n ...current.toolCallExpansionDefaults.tools,\n other: mode,\n },\n },\n })\n}\n\nfunction setDiagnosticsExpansion(mode: VisibilityPreference): void {\n if (preferences().diagnosticsExpansion === mode) return\n updateUiSettings({ diagnosticsExpansion: mode })\n}\n\nfunction setToolInputsVisibility(mode: ToolInputsVisibilityPreference): void {\n if (preferences().toolInputsVisibility === mode) return\n updateUiSettings({ toolInputsVisibility: mode })\n}\n\nfunction setThinkingBlocksExpansion(mode: ExpansionPreference): void {\n const current = preferences()\n if (current.thinkingBlocksExpansion === mode && current.toolCallExpansionDefaults.thinking === mode) return\n updateUiSettings({\n thinkingBlocksExpansion: mode,\n toolCallExpansionDefaults: {\n ...current.toolCallExpansionDefaults,\n preset: \"custom\",\n thinking: mode,\n },\n })\n}\n\nfunction toggleShowThinkingBlocks(): void {\n updateUiSettings({ showThinkingBlocks: !preferences().showThinkingBlocks })\n}\n\nfunction toggleKeyboardShortcutHints(): void {\n updatePreferences({ showKeyboardShortcutHints: !preferences().showKeyboardShortcutHints })\n}\n\nfunction toggleShowTimelineTools(): void {\n updateUiSettings({ showTimelineTools: !preferences().showTimelineTools })\n}\n\nfunction toggleShowMessageTimeline(): void {\n updateUiSettings({ showMessageTimeline: !(preferences().showMessageTimeline ?? true) })\n}\n\nfunction toggleUsageMetrics(): void {\n updateUiSettings({ showUsageMetrics: !preferences().showUsageMetrics })\n}\n\nfunction togglePromptSubmitOnEnter(): void {\n updateUiSettings({ promptSubmitOnEnter: !preferences().promptSubmitOnEnter })\n}\n\nfunction toggleShowPromptVoiceInput(): void {\n updateUiSettings({ showPromptVoiceInput: !preferences().showPromptVoiceInput })\n}\n\nfunction toggleAutoCleanupBlankSessions(): void {\n const nextValue = !preferences().autoCleanupBlankSessions\n log.info(\"toggle auto cleanup\", { value: nextValue })\n updateUiSettings({ autoCleanupBlankSessions: nextValue })\n}\n\nasync function setAgentModelPreference(instanceId: string, agent: string, model: ModelPreference): Promise<void> {\n if (!instanceId || !agent || !model.providerId || !model.modelId) return\n await ensureInstanceConfigLoaded(instanceId)\n await updateInstanceData(instanceId, (draft) => {\n const selections = { ...(draft.agentModelSelections ?? {}) }\n const existing = selections[agent]\n if (existing && existing.providerId === model.providerId && existing.modelId === model.modelId) {\n return\n }\n selections[agent] = model\n draft.agentModelSelections = selections\n })\n}\n\nasync function getAgentModelPreference(instanceId: string, agent: string): Promise<ModelPreference | undefined> {\n if (!instanceId || !agent) return undefined\n await ensureInstanceConfigLoaded(instanceId)\n const selections = getInstanceConfig(instanceId).agentModelSelections ?? {}\n return selections[agent]\n}\n\nvoid ensureLoaded().catch((error: unknown) => {\n log.error(\"Failed to initialize settings\", error)\n})\n\ninterface ConfigContextValue {\n isLoaded: Accessor<boolean>\n preferences: typeof preferences\n updatePreferences: typeof updatePreferences\n setProviderModelVisibility: typeof setProviderModelVisibility\n getProviderModelVisibilityPreference: typeof getProviderModelVisibilityPreference\n providerModelVisibilitySaveFailed: typeof providerModelVisibilitySaveFailed\n themePreference: typeof themePreference\n setThemePreference: typeof setThemePreference\n colorSchemePreference: typeof colorSchemePreference\n customColorSchemePreference: typeof customColorSchemePreference\n colorSchemePresets: typeof colorSchemePresets\n activeColorSchemePresetId: typeof activeColorSchemePresetId\n setColorSchemePreference: typeof setColorSchemePreference\n selectColorSchemePreset: typeof selectColorSchemePreset\n saveColorSchemePreset: typeof saveColorSchemePreset\n\n // server-owned stable config\n serverSettings: typeof serverSettings\n setListeningMode: typeof setListeningMode\n updateEnvironmentVariables: typeof updateEnvironmentVariables\n addEnvironmentVariable: typeof addEnvironmentVariable\n removeEnvironmentVariable: typeof removeEnvironmentVariable\n isSecureEnvVar: typeof isSecureEnvVar\n toggleSecureEnvVar: typeof toggleSecureEnvVar\n updateLastUsedBinary: typeof updateLastUsedBinary\n updateLogLevel: typeof updateLogLevel\n updateSpeechSettings: typeof updateSpeechSettings\n\n // ui-owned state\n recentFolders: typeof recentFolders\n opencodeBinaries: typeof opencodeBinaries\n remoteServers: typeof remoteServers\n uiState: typeof uiState\n addRecentFolder: typeof addRecentFolder\n removeRecentFolder: typeof removeRecentFolder\n renameRecentFolderProject: typeof renameRecentFolderProject\n addOpenCodeBinary: typeof addOpenCodeBinary\n removeOpenCodeBinary: typeof removeOpenCodeBinary\n saveRemoteServerProfile: typeof saveRemoteServerProfile\n markRemoteServerConnected: typeof markRemoteServerConnected\n removeRemoteServerProfile: typeof removeRemoteServerProfile\n recordWorkspaceLaunch: typeof recordWorkspaceLaunch\n addRecentModelPreference: typeof addRecentModelPreference\n isFavoriteModelPreference: typeof isFavoriteModelPreference\n toggleFavoriteModelPreference: typeof toggleFavoriteModelPreference\n getModelThinkingSelection: typeof getModelThinkingSelection\n setModelThinkingSelection: typeof setModelThinkingSelection\n\n // ui settings helpers\n toggleShowThinkingBlocks: typeof toggleShowThinkingBlocks\n toggleKeyboardShortcutHints: typeof toggleKeyboardShortcutHints\n toggleShowMessageTimeline: typeof toggleShowMessageTimeline\n toggleShowTimelineTools: typeof toggleShowTimelineTools\n toggleUsageMetrics: typeof toggleUsageMetrics\n toggleAutoCleanupBlankSessions: typeof toggleAutoCleanupBlankSessions\n togglePromptSubmitOnEnter: typeof togglePromptSubmitOnEnter\n toggleShowPromptVoiceInput: typeof toggleShowPromptVoiceInput\n setDiffViewMode: typeof setDiffViewMode\n setToolOutputExpansion: typeof setToolOutputExpansion\n setDiagnosticsExpansion: typeof setDiagnosticsExpansion\n setThinkingBlocksExpansion: typeof setThinkingBlocksExpansion\n setToolInputsVisibility: typeof setToolInputsVisibility\n\n // instance scoped\n setAgentModelPreference: typeof setAgentModelPreference\n getAgentModelPreference: typeof getAgentModelPreference\n}\n\nconst ConfigContext = createContext<ConfigContextValue>()\n\nconst configContextValue: ConfigContextValue = {\n isLoaded,\n preferences,\n updatePreferences,\n setProviderModelVisibility,\n getProviderModelVisibilityPreference,\n providerModelVisibilitySaveFailed,\n themePreference,\n setThemePreference,\n colorSchemePreference,\n customColorSchemePreference,\n colorSchemePresets,\n activeColorSchemePresetId,\n setColorSchemePreference,\n selectColorSchemePreset,\n saveColorSchemePreset,\n serverSettings,\n setListeningMode,\n updateEnvironmentVariables,\n addEnvironmentVariable,\n removeEnvironmentVariable,\n isSecureEnvVar,\n toggleSecureEnvVar,\n updateLastUsedBinary,\n updateLogLevel,\n updateSpeechSettings,\n recentFolders,\n opencodeBinaries,\n remoteServers,\n uiState,\n addRecentFolder,\n removeRecentFolder,\n renameRecentFolderProject,\n addOpenCodeBinary,\n removeOpenCodeBinary,\n saveRemoteServerProfile,\n markRemoteServerConnected,\n removeRemoteServerProfile,\n recordWorkspaceLaunch,\n addRecentModelPreference,\n isFavoriteModelPreference,\n toggleFavoriteModelPreference,\n getModelThinkingSelection,\n setModelThinkingSelection,\n toggleShowThinkingBlocks,\n toggleKeyboardShortcutHints,\n toggleShowMessageTimeline,\n toggleShowTimelineTools,\n toggleUsageMetrics,\n toggleAutoCleanupBlankSessions,\n togglePromptSubmitOnEnter,\n toggleShowPromptVoiceInput,\n setDiffViewMode,\n setToolOutputExpansion,\n setDiagnosticsExpansion,\n setThinkingBlocksExpansion,\n setToolInputsVisibility,\n setAgentModelPreference,\n getAgentModelPreference,\n}\n\nexport const ConfigProvider: ParentComponent = (props) => {\n onMount(() => {\n ensureLoaded().catch((error: unknown) => {\n log.error(\"Failed to initialize settings\", error)\n })\n\n const unsubUi = storage.onConfigOwnerChanged(\"ui\", (bucket) => {\n setUiConfigBucket(bucket as any)\n setIsLoaded(true)\n })\n const unsubServer = storage.onConfigOwnerChanged(\"server\", (bucket) => {\n setServerConfigBucket(bucket as any)\n setIsLoaded(true)\n resetSpeechCapabilities()\n void loadSpeechCapabilities(true)\n })\n const unsubStateUi = storage.onStateOwnerChanged(\"ui\", (bucket) => {\n setUiStateBucket(bucket as any)\n setIsLoaded(true)\n })\n\n return () => {\n unsubUi()\n unsubServer()\n unsubStateUi()\n }\n })\n\n return <ConfigContext.Provider value={configContextValue}>{props.children}</ConfigContext.Provider>\n}\n\nexport function useConfig(): ConfigContextValue {\n const context = useContext(ConfigContext)\n if (!context) {\n throw new Error(\"useConfig must be used within ConfigProvider\")\n }\n return context\n}\n\nexport {\n preferences,\n uiState,\n serverSettings,\n recentFolders,\n opencodeBinaries,\n themePreference,\n setThemePreference,\n colorSchemePreference,\n customColorSchemePreference,\n colorSchemePresets,\n activeColorSchemePresetId,\n setColorSchemePreference,\n selectColorSchemePreset,\n saveColorSchemePreset,\n updatePreferences,\n setProviderModelVisibility,\n getProviderModelVisibilityPreference,\n providerModelVisibilitySaveFailed,\n setListeningMode,\n updateEnvironmentVariables,\n addEnvironmentVariable,\n removeEnvironmentVariable,\n isSecureEnvVar,\n toggleSecureEnvVar,\n updateLastUsedBinary,\n updateLogLevel,\n updateSpeechSettings,\n addRecentFolder,\n removeRecentFolder,\n renameRecentFolderProject,\n addOpenCodeBinary,\n removeOpenCodeBinary,\n recordWorkspaceLaunch,\n addRecentModelPreference,\n isFavoriteModelPreference,\n toggleFavoriteModelPreference,\n getModelThinkingSelection,\n setModelThinkingSelection,\n toggleShowThinkingBlocks,\n toggleKeyboardShortcutHints,\n toggleShowTimelineTools,\n toggleUsageMetrics,\n toggleAutoCleanupBlankSessions,\n togglePromptSubmitOnEnter,\n toggleShowPromptVoiceInput,\n setDiffViewMode,\n setToolOutputExpansion,\n setDiagnosticsExpansion,\n setThinkingBlocksExpansion,\n setAgentModelPreference,\n getAgentModelPreference,\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 clamp(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 Math.min(Math.max(min, value), max);\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.substr(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 // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colors = colors.map((n) => n + n);\n }\n return colors\n ? `rgb${colors.length === 4 ? \"a\" : \"\"}(${colors\n .map((n, index) => {\n return index < 3\n ? parseInt(n, 16)\n : Math.round((parseInt(n, 16) / 255) * 1000) / 1000;\n })\n .join(\", \")})`\n : \"\";\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\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()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n // Idempotent\n if (typeof color !== \"string\") {\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\"].indexOf(type) === -1) {\n throw new Error(\"MUI: Unsupported `%s` color.\\n\" +\n \"The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color(). \" +\n color);\n }\n const valuesInput = color.substring(marker + 1, color.length - 1);\n let values;\n let colorSpace;\n if (type === \"color\") {\n values = valuesInput.split(\" \");\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === \"/\") {\n values[3] = values[3].substr(1);\n }\n if ([\"srgb\", \"display-p3\", \"a98-rgb\", \"prophoto-rgb\", \"rec-2020\"].indexOf(colorSpace) === -1) {\n throw new Error(\"MUI: unsupported `%s` color space.\\n\" +\n \"The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020. \" +\n colorSpace);\n }\n }\n else {\n values = valuesInput.split(\",\");\n }\n return { type, values: values.map((value) => parseFloat(value)), colorSpace };\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'\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 { type, colorSpace } = color;\n const { values } = color;\n let newValues;\n if (type.indexOf(\"rgb\") !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n newValues = values\n .map((n, i) => (i < 3 ? parseInt(n.toString(), 10) : n))\n .join(\",\");\n }\n else if (type.indexOf(\"hsl\") !== -1) {\n newValues = values\n .map((n, i) => (i === 1 || i === 2 ? `${n}%` : n))\n .join(\",\");\n }\n if (type.indexOf(\"color\") !== -1) {\n newValues = `${colorSpace} ${values.join(\" \")}`;\n }\n else {\n newValues = `${values.join(\", \")}`;\n }\n return `${type}(${newValues})`;\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.indexOf(\"#\") === 0) {\n return color;\n }\n const { values } = decomposeColor(color);\n return `#${values\n .map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n))\n .join(\"\")}`;\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 const c = decomposeColor(color);\n const { values } = c;\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 = [\n Math.round(f(0) * 255),\n Math.round(f(8) * 255),\n Math.round(f(4) * 255),\n ];\n if (c.type === \"hsla\") {\n type += \"a\";\n rgb.push(values[3]);\n }\n return recomposeColor({ type, values: rgb });\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 const { type, values } = decomposeColor(color);\n let rgb = type === \"hsl\" ? decomposeColor(hslToRgb(color)).values : values;\n rgb = rgb.map((val) => {\n if (type !== \"color\") {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\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 * 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 * 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 // eslint-disable-next-line prefer-const\n let { type, values } = decomposeColor(color);\n value = clamp(value);\n if (type === \"rgb\" || type === \"hsl\") {\n type += \"a\";\n }\n if (type === \"color\") {\n values[3] = `/${value}`;\n }\n else {\n values[3] = value;\n }\n return recomposeColor({ type, values });\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(inputColor, coefficient) {\n const color = decomposeColor(inputColor);\n coefficient = clamp(coefficient);\n if (color.type.indexOf(\"hsl\") !== -1) {\n color.values[2] *= 1 - coefficient;\n }\n else if (color.type.indexOf(\"rgb\") !== -1 ||\n color.type.indexOf(\"color\") !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\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(inputColor, coefficient) {\n const color = decomposeColor(inputColor);\n coefficient = clamp(coefficient);\n if (color.type.indexOf(\"hsl\") !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n }\n else if (color.type.indexOf(\"rgb\") !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n }\n else if (color.type.indexOf(\"color\") !== -1) {\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}\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\n ? darken(color, coefficient)\n : lighten(color, coefficient);\n}\n","// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0, // phone\n sm: 600, // tablets\n md: 900, // small laptop\n lg: 1200, // desktop\n xl: 1536, // large screens\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints;\n return propValue.reduce((acc, item, index) => {\n acc = {\n ...acc,\n ...themeBreakpoints.up(themeBreakpoints.keys[index], styleFromPropValue(propValue[index])),\n };\n return acc;\n }, {});\n }\n if (typeof propValue === \"object\") {\n const themeBreakpoints = theme.breakpoints;\n const keys = Object.keys(propValue);\n return keys.reduce((acc, breakpoint) => {\n // key is breakpoint\n if (Object.keys(themeBreakpoints.values || values).indexOf(breakpoint) !==\n -1) {\n acc = {\n ...acc,\n ...themeBreakpoints.up(breakpoint, styleFromPropValue(propValue[breakpoint], breakpoint)),\n };\n }\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}\nexport function getOffset(val) {\n const parse = parseFloat(val.toString());\n return `${parse}${String(val).replace(String(parse), \"\") || \"px\"}`;\n}\nexport function computeBreakpointsBase(values, breakpoints) {\n const base = {};\n // fixed value\n if (typeof values !== \"object\") {\n return base;\n }\n const breakpointsKeys = Object.keys(breakpoints);\n if (Array.isArray(values)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < values.length) {\n base[breakpoint] = true;\n }\n });\n }\n else {\n breakpointsKeys.forEach((breakpoint) => {\n if (values[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues(data) {\n const values = data.values;\n const base = data.base ||\n computeBreakpointsBase(values, data.breakpoints || {});\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return data.values;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(values)) {\n acc[breakpoint] =\n values[i] != null ? values[i] : values[previous];\n previous = i;\n }\n else if (typeof values === \"number\") {\n acc[breakpoint] = values;\n }\n else {\n acc[breakpoint] =\n values[breakpoint] != null\n ? values[breakpoint]\n : values[previous];\n previous = breakpoint;\n }\n return acc;\n }, {});\n}\n","import { createContext } from \"solid-js\";\nexport const defaultStyledEngineContextValue = {\n cleanupStyles: true,\n};\nconst StyledEngineContext = createContext(defaultStyledEngineContextValue);\nexport default StyledEngineContext;\n","const common = {\n black: \"#000\",\n white: \"#fff\",\n};\nexport default common;\n","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;\n","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;\n","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;\n","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;\n","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;\n","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;\n","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;\n","export function isPlainObject(item) {\n return (item !== null && typeof item === \"object\" && item.constructor === Object);\n}\nfunction sortKeys(object, keys) {\n for (const key of keys) {\n const value = object[key];\n delete object[key];\n object[key] = value;\n }\n}\nexport default function deepmerge(target, source, options = { clone: true }) {\n const output = options.clone ? { ...target } : target;\n const sourceKeys = options.sortKeys ? [] : undefined;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach((key) => {\n // Avoid prototype pollution\n if (key === \"__proto__\") {\n return;\n }\n if (sourceKeys)\n sourceKeys.push(key);\n let sourceValue;\n let targetValue;\n if (isPlainObject((sourceValue = source[key])) &&\n key in target &&\n isPlainObject((targetValue = 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(targetValue, sourceValue, options);\n }\n else if (sourceValue !== undefined) {\n output[key] = sourceValue;\n }\n });\n if (sourceKeys)\n sortKeys(output, sourceKeys);\n }\n return output;\n}\n","import { isPlainObject } from \"./deepmerge\";\nexport default function cloneObject(target) {\n if (Array.isArray(target)) {\n const output = [];\n for (const value of target) {\n output.push(cloneObject(value));\n }\n return output;\n }\n else if (isPlainObject(target)) {\n const output = {};\n for (const key in target) {\n if (key === \"__proto__\") {\n continue;\n }\n output[key] = cloneObject(target[key]);\n }\n return output;\n }\n else {\n return target;\n }\n}\n","import cloneObject from \"./cloneObject\";\nimport deepmerge from \"./deepmerge\";\nexport default function merge(target, ...sources) {\n for (const source of sources)\n deepmerge(target, cloneObject(source), {\n clone: false,\n });\n return target;\n}\n","import { common, green, lightBlue, orange, red, blue, purple, grey, } from \"../colors\";\nimport { darken, getContrastRatio, lighten, } from \"@suid/system/colorManipulator\";\nimport merge from \"@suid/utils/merge\";\nexport const useLightOptions = () => ({\n text: {\n primary: \"rgba(0, 0, 0, 0.87)\",\n secondary: \"rgba(0, 0, 0, 0.6)\",\n disabled: \"rgba(0, 0, 0, 0.38)\",\n },\n divider: \"rgba(0, 0, 0, 0.12)\",\n background: {\n paper: common.white,\n default: common.white,\n },\n action: {\n active: \"rgba(0, 0, 0, 0.54)\",\n hover: \"rgba(0, 0, 0, 0.04)\",\n hoverOpacity: 0.04,\n selected: \"rgba(0, 0, 0, 0.08)\",\n selectedOpacity: 0.08,\n disabled: \"rgba(0, 0, 0, 0.26)\",\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});\nexport const lightColors = {\n primary: {\n main: blue[700],\n light: blue[400],\n dark: blue[800],\n },\n secondary: {\n main: purple[500],\n light: purple[300],\n dark: purple[700],\n },\n error: {\n main: red[700],\n light: red[400],\n dark: red[800],\n },\n info: {\n main: lightBlue[700],\n light: lightBlue[800],\n dark: lightBlue[900],\n },\n success: {\n main: green[800],\n light: green[500],\n dark: green[900],\n },\n warning: {\n main: \"#ED6C02\",\n light: orange[500],\n dark: orange[900],\n },\n};\nexport const useDarkOptions = () => ({\n text: {\n primary: common.white,\n secondary: \"rgba(255, 255, 255, 0.7)\",\n disabled: \"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});\nexport const darkColors = {\n primary: { main: blue[200], light: blue[50], dark: blue[400] },\n secondary: { main: purple[200], light: purple[50], dark: purple[400] },\n error: { main: red[500], light: red[300], dark: red[700] },\n info: { main: lightBlue[400], light: lightBlue[300], dark: lightBlue[700] },\n success: { main: green[400], light: green[300], dark: green[700] },\n warning: { main: orange[400], light: orange[300], dark: orange[700] },\n};\nconst modes = { light: useLightOptions, dark: useDarkOptions };\nfunction getContrastText(background, contrastThreshold) {\n return getContrastRatio(background, common.white) >= contrastThreshold\n ? common.white\n : \"rgba(0, 0, 0, 0.87)\";\n}\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = typeof tonalOffset === \"number\" ? tonalOffset : tonalOffset.light;\n const tonalOffsetDark = typeof tonalOffset === \"number\" ? tonalOffset * 1.5 : tonalOffset.dark;\n if (!intent[direction]) {\n // eslint-disable-next-line no-prototype-builtins\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n }\n else if (direction === \"light\") {\n intent.light = lighten(intent.main, tonalOffsetLight);\n }\n else if (direction === \"dark\") {\n intent.dark = darken(intent.main, tonalOffsetDark);\n }\n }\n}\nfunction augmentColor(data) {\n const color = { ...data.color };\n const mainShade = data.mainShade ?? 500;\n if (!data.color.main && data.color[mainShade])\n color.main = data.color[mainShade];\n addLightOrDark(color, \"light\", data.lightShade ?? 300, data.tonalOffset);\n addLightOrDark(color, \"dark\", data.darkShade ?? 700, data.tonalOffset);\n if (!color.contrastText)\n color.contrastText = getContrastText(color.main, data.contrastThreshold);\n return color;\n}\nexport const usePalleteDefaults = () => createPaletteOptions({\n mode: \"light\",\n tonalOffset: 0.2,\n contrastThreshold: 3,\n grey,\n common,\n});\nexport function createPaletteOptions(data) {\n return data;\n}\nexport function createPalette(options) {\n const colorNames = [\n \"error\",\n \"info\",\n \"primary\",\n \"secondary\",\n \"success\",\n \"warning\",\n ];\n const palleteDefaults = usePalleteDefaults();\n const result = {\n ...merge({}, palleteDefaults, modes[options?.mode ?? palleteDefaults.mode](), options),\n isColorName(name) {\n return colorNames.includes(name);\n },\n getColorObject(color) {\n return result[color];\n },\n getColor(color) {\n return result.mode === \"light\" ? result[color].light : result[color].dark;\n },\n augmentColor(data) {\n return augmentColor({\n ...data,\n tonalOffset: result.tonalOffset,\n contrastThreshold: result.contrastThreshold,\n });\n },\n getContrastText(background) {\n return getContrastText(background, result.contrastThreshold);\n },\n };\n const getDefaultColor = (color) => result.mode === \"light\" ? lightColors[color] : darkColors[color];\n result.primary = result.augmentColor({\n color: result.primary || getDefaultColor(\"primary\"),\n });\n result.secondary = result.augmentColor({\n color: result.secondary || getDefaultColor(\"secondary\"),\n mainShade: \"A400\",\n lightShade: \"A200\",\n darkShade: \"A700\",\n });\n result.error = result.augmentColor({\n color: result.error || getDefaultColor(\"error\"),\n });\n result.warning = result.augmentColor({\n color: result.warning || getDefaultColor(\"warning\"),\n });\n result.info = result.augmentColor({\n color: result.info || getDefaultColor(\"info\"),\n });\n result.success = result.augmentColor({\n color: result.success || getDefaultColor(\"success\"),\n });\n return result;\n}\n","import merge from \"@suid/utils/merge\";\nexport const componentsDefault = createComponentsOptions({});\nexport function createComponentsOptions(options) {\n return options;\n}\nexport function createComponents(data) {\n const result = {\n ...merge({}, componentsDefault, data ?? {}),\n };\n return result;\n}\n","export default function createMixins(breakpoints, \n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nspacing = undefined, mixins = {}) {\n return {\n toolbar: {\n minHeight: 56,\n [`${breakpoints.up(\"xs\")} and (orientation: landscape)`]: {\n minHeight: 48,\n },\n [breakpoints.up(\"sm\")]: {\n minHeight: 64,\n },\n },\n ...mixins,\n };\n}\n","const cache = {};\nconst shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createCssShadow(...px) {\n return [\n `${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`,\n `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`,\n `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`,\n ].join(\",\");\n}\nconst shadows = [\n () => \"none\",\n () => createCssShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0),\n () => createCssShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0),\n () => createCssShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0),\n () => createCssShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0),\n () => createCssShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0),\n () => createCssShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0),\n () => createCssShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1),\n () => createCssShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2),\n () => createCssShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2),\n () => createCssShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3),\n () => createCssShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3),\n () => createCssShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4),\n () => createCssShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4),\n () => createCssShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4),\n () => createCssShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5),\n () => createCssShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5),\n () => createCssShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5),\n () => createCssShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6),\n () => createCssShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6),\n () => createCssShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7),\n () => createCssShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7),\n () => createCssShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7),\n () => createCssShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8),\n () => createCssShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8),\n];\nexport function createShadows() {\n return new Proxy([], {\n get: (target, p) => {\n if (typeof p !== \"string\" || isNaN(Number(p)))\n return target[p];\n if (p in cache)\n return cache[p];\n return (cache[p] = shadows[p]());\n },\n });\n}\n","export const easing = {\n easeInOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n easeOut: \"cubic-bezier(0.0, 0, 0.2, 1)\",\n easeIn: \"cubic-bezier(0.4, 0, 1, 1)\",\n sharp: \"cubic-bezier(0.4, 0, 0.6, 1)\",\n};\nexport const duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n standard: 300,\n complex: 375,\n enteringScreen: 225,\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 return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\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 { duration: durationOption = mergedDuration.standard, easing: easingOption = mergedEasing.easeInOut, delay = 0, ...other } = options;\n if (process.env.NODE_ENV !== \"production\") {\n const isString = (value) => typeof value === \"string\";\n // IE11 support, replace with Number.isNaN\n const isNumber = (value) => !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 (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])\n .map((animatedProp) => `${animatedProp} ${typeof durationOption === \"string\"\n ? durationOption\n : formatMs(durationOption)} ${easingOption} ${typeof delay === \"string\" ? delay : formatMs(delay)}`)\n .join(\",\");\n };\n return {\n getAutoHeightDuration,\n create,\n ...inputTransitions,\n easing: mergedEasing,\n duration: mergedDuration,\n };\n}\n","import merge from \"@suid/utils/merge\";\nconst fontWeight = {\n light: 300,\n regular: 400,\n medium: 500,\n bold: 700,\n};\nexport const typographyDefaults = createTypographyOptions({\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontSize: 14,\n htmlFontSize: 16,\n h1: {},\n h2: {},\n h3: {},\n h4: {},\n h5: {},\n h6: {},\n subtitle1: {},\n subtitle2: {},\n body1: {},\n body2: {},\n button: {},\n caption: {},\n overline: {},\n fontWeightLight: 300,\n fontWeightRegular: 400,\n fontWeightMedium: 500,\n fontWeightBold: 700,\n});\nexport function createTypographyOptions(options) {\n return options;\n}\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nexport function makeVariant(base, fontWeight, size, lineHeight, letterSpacing, casing) {\n return {\n fontFamily: base.fontFamily,\n fontWeight,\n fontSize: base.pxToRem(size),\n lineHeight: `${lineHeight}`,\n letterSpacing: `${round(letterSpacing / size)}em`,\n ...(casing ? { textTransform: \"uppercase\" } : {}),\n };\n}\nexport function createTypography(options = {}) {\n const base = {\n fontFamily: options.fontFamily ?? typographyDefaults.fontFamily,\n fontSize: options.fontSize ?? typographyDefaults.fontSize,\n htmlFontSize: options?.htmlFontSize ?? typographyDefaults.htmlFontSize,\n pxToRem: (size) => {\n const coef = base.fontSize / 14;\n return `${(size / base.htmlFontSize) * coef}rem`;\n },\n };\n return merge(typographyDefaults, base, {\n h1: makeVariant(base, fontWeight.light, 96, 1.167, -1.5),\n h2: makeVariant(base, fontWeight.light, 60, 1.2, -0.5),\n h3: makeVariant(base, fontWeight.regular, 48, 1.167, 0),\n h4: makeVariant(base, fontWeight.regular, 34, 1.235, 0.25),\n h5: makeVariant(base, fontWeight.regular, 24, 1.334, 0),\n h6: makeVariant(base, fontWeight.medium, 20, 1.6, 0.15),\n subtitle1: makeVariant(base, fontWeight.regular, 16, 1.75, 0.15),\n subtitle2: makeVariant(base, fontWeight.medium, 14, 1.57, 0.1),\n body1: makeVariant(base, fontWeight.regular, 16, 1.5, 0.15),\n body2: makeVariant(base, fontWeight.regular, 14, 1.43, 0.15),\n button: makeVariant(base, fontWeight.medium, 14, 1.75, 0.4, true),\n caption: makeVariant(base, fontWeight.regular, 12, 1.66, 0.4),\n overline: makeVariant(base, fontWeight.regular, 12, 2.66, 1, true),\n }, options);\n}\n","import merge from \"@suid/utils/merge\";\nexport const zIndexDefaults = createZIndexOptions({\n mobileStepper: 1000,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500,\n});\nexport function createZIndexOptions(data) {\n return data;\n}\nexport function createZIndex(data) {\n const result = {\n ...merge({}, zIndexDefaults, data),\n };\n return result;\n}\n","function renderMediaQuery(comparator, width, units = \"px\") {\n let selector;\n if (comparator === \"up\") {\n selector = `(min-width:${width}${units})`;\n }\n else if (comparator === \"down\") {\n selector = `(max-width:${width}${units})`;\n }\n else if (comparator === \"between\") {\n const [maxW, minW] = width;\n selector = `(max-width:${maxW}${units}) and (min-width:${minW}${units})`;\n }\n else {\n throw new Error(`Invalid comparator: ${comparator}`);\n }\n return `@media ${selector}`;\n}\nexport default renderMediaQuery;\n","import renderMediaQuery from \"@suid/css/renderMediaQuery\";\nexport const breakpointsDefault = createBreakpointsOptions({\n columns: 12,\n keys: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"],\n values: {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n unit: \"px\",\n});\nexport function createBreakpointsOptions(options) {\n return options;\n}\nexport function createBreakpoints(options) {\n const result = {\n ...breakpointsDefault,\n ...(options ?? {}),\n up: (value, css) => {\n const key = renderMediaQuery(\"up\", result.resolve(value));\n return (css ? { [key]: css } : key);\n },\n down: (value, css) => {\n const key = renderMediaQuery(\"down\", result.resolve(value));\n return (css ? { [key]: css } : key);\n },\n between: (value, css) => {\n const key = renderMediaQuery(\"between\", [\n result.resolve(value[0]),\n result.resolve(value[1]),\n ]);\n return (css ? { [key]: css } : key);\n },\n resolve: (value) => typeof value === \"number\" ? value : result.values[value],\n };\n return result;\n}\nexport default createBreakpoints;\n","export function createSpacing(options) {\n if (typeof options === \"function\")\n return options;\n const resolved = (...values) => {\n return values\n .map((v) => typeof v === \"number\" ? `${v * (options ?? 8)}px` : v)\n .join(\" \");\n };\n return resolved;\n}\nexport default createSpacing;\n","import merge from \"@suid/utils/merge\";\nexport const shapeDefaults = createShapeOptions({\n borderRadius: 4,\n});\nexport function createShapeOptions(data) {\n return data;\n}\nexport function createShape(options) {\n const result = {\n ...merge({}, shapeDefaults, options),\n };\n return result;\n}\nexport default createShape;\n","import { createComponents, } from \"./createComponents\";\nimport createMixins from \"./createMixins\";\nimport { createPalette } from \"./createPalette\";\nimport { createShadows } from \"./createShadows\";\nimport createTransitions from \"./createTransitions\";\nimport { createTypography, } from \"./createTypography\";\nimport { createZIndex } from \"./createZIndex\";\nimport createBreakpoints from \"@suid/system/createTheme/createBreakpoints\";\nimport createSpacing from \"@suid/system/createTheme/createSpacing\";\nimport createShape from \"@suid/system/createTheme/shape\";\nexport function createThemeOptions(options) {\n return options;\n}\nexport function createTheme(input = {}) {\n const theme = {\n direction: \"ltr\",\n ...input,\n };\n function def(key, defaults) {\n const inputValue = input[key];\n Object.defineProperty(theme, key, {\n configurable: true,\n enumerable: true,\n ...(typeof inputValue === \"function\"\n ? {\n get: inputValue,\n }\n : {\n value: defaults({ [key]: inputValue }),\n }),\n });\n }\n def(\"breakpoints\", (input) => createBreakpoints(input.breakpoints));\n def(\"components\", (input) => createComponents(input.components));\n def(\"palette\", (input) => createPalette(input.palette));\n def(\"shape\", (input) => createShape(input.shape));\n def(\"spacing\", (input) => createSpacing(input.spacing));\n def(\"typography\", (input) => createTypography(input.typography));\n def(\"shadows\", () => createShadows());\n def(\"transitions\", () => createTransitions({}));\n def(\"zIndex\", (input) => createZIndex(input.zIndex));\n def(\"mixins\", () => createMixins(theme.breakpoints));\n return theme;\n}\nexport default createTheme;\n","function makeGetDefaultTheme(createTheme) {\n let defaultTheme;\n return function getDefaultTheme() {\n if (!defaultTheme) {\n defaultTheme = createTheme();\n }\n return defaultTheme;\n };\n}\nexport default makeGetDefaultTheme;\n","import createTheme from \"./createTheme\";\nimport makeGetDefaultTheme from \"@suid/system/makeGetDefaultTheme\";\nexport default makeGetDefaultTheme(createTheme);\n","import { createContext } from \"solid-js\";\nlet ThemeContext;\nif (process.env.NODE_ENV !== \"production\") {\n const global = globalThis;\n const suid = global.__suid || (global.__suid = {});\n ThemeContext =\n suid.systemThemeContext || (suid.systemThemeContext = createContext({}));\n}\nelse {\n ThemeContext = createContext({});\n}\nexport default ThemeContext;\n","import { createBreakpoints, } from \"./createBreakpoints\";\nimport { createSpacing } from \"./createSpacing\";\nimport { createShape } from \"./shape\";\nexport function createThemeOptions(options) {\n return options;\n}\nexport function createTheme(data) {\n const result = {\n direction: \"ltr\",\n shadows: undefined,\n transitions: undefined,\n components: undefined,\n palette: undefined,\n typography: undefined,\n zIndex: undefined,\n mixins: undefined,\n ...data,\n breakpoints: createBreakpoints(data?.breakpoints),\n shape: createShape(data?.shape),\n spacing: createSpacing(data?.spacing),\n };\n return result;\n}\nexport default createTheme;\n","import createTheme from \"./createTheme\";\nimport makeGetDefaultTheme from \"./makeGetDefaultTheme\";\nexport default makeGetDefaultTheme(createTheme);\n","export default function isEmptyObject(object) {\n for (const _key in object)\n return false;\n return true;\n}\n","import ThemeContext from \"./ThemeContext\";\nimport getDefaultTheme from \"./getDefaultTheme\";\nimport isEmptyObject from \"@suid/utils/isEmptyObject\";\nimport { useContext } from \"solid-js\";\nfunction useTheme(defaultTheme = getDefaultTheme, Context = ThemeContext) {\n const theme = useContext(Context);\n if (typeof theme === \"function\") {\n return new Proxy({}, { get: (_, p) => theme()[p] });\n }\n else if (isEmptyObject(theme) && defaultTheme) {\n if (typeof defaultTheme === \"function\")\n return defaultTheme();\n return defaultTheme;\n }\n else if (!theme) {\n throw new Error(\"Theme is not defined\");\n }\n return theme;\n}\nexport default useTheme;\n","import getDefaultTheme from \"./getDefaultTheme\";\nimport ThemeContext from \"@suid/system/ThemeContext\";\nimport useSysTheme from \"@suid/system/useTheme\";\nfunction useTheme(defaultTheme = getDefaultTheme) {\n return useSysTheme(defaultTheme, ThemeContext);\n}\nexport default useTheme;\n","import ThemeContext from \"@suid/system/ThemeContext\";\nimport useSysTheme from \"@suid/system/useTheme\";\nfunction useTheme(defaultTheme) {\n return useSysTheme(defaultTheme, ThemeContext);\n}\nexport default useTheme;\n","import useTheme from \"./useTheme\";\nimport { mergeProps } from \"solid-js\";\nexport default function useThemeProps(options) {\n const props = [];\n const propDefaults = typeof options.propDefaults === \"function\"\n ? options.propDefaults({\n set: (v) => v,\n inProps: options.props,\n })\n : options.propDefaults;\n const theme = useTheme();\n const themeProps = theme.components?.[options.name]?.defaultProps;\n if (propDefaults)\n props.push(propDefaults);\n if (themeProps)\n props.push(themeProps);\n if (!props.length)\n return options.props;\n return mergeProps(...[...props, options.props]);\n}\n","import ThemeContext from \"@suid/system/ThemeContext\";\nfunction ThemeProvider(props) {\n return (<ThemeContext.Provider value={props.theme}>\n {props.children}\n </ThemeContext.Provider>);\n}\nexport default ThemeProvider;\n","/* eslint-disable no-case-declarations */\nimport { $DEVCOMP, createMemo, splitProps, sharedConfig, untrack, } from \"solid-js\";\nimport { isServer, spread, ssrElement } from \"solid-js/web\";\nimport * as web from \"solid-js/web\";\nfunction createElement(tagName, isSVG = false) {\n return isSVG\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", tagName)\n : document.createElement(tagName);\n}\n// https://github.com/solidjs/solid/blob/cafc51f6fc2e3ddf24b40cae00b77cf879051c9e/packages/solid/web/server/index.ts#L25\nfunction createServerDynamicComponent(component, props) {\n const comp = component(), t = typeof comp;\n if (comp) {\n if (t === \"function\")\n return comp(props);\n else if (t === \"string\") {\n return ssrElement(comp, props, undefined, true);\n }\n }\n}\nexport function createStaticComponent(component, props) {\n const isDev = \"_DX_DEV_\";\n switch (typeof component) {\n case \"function\":\n if (isDev)\n Object.assign(component, { [$DEVCOMP]: true });\n return untrack(() => component(props));\n case \"string\":\n const isSvg = web.SVGElements.has(component);\n const el = sharedConfig.context\n ? web.getNextElement()\n : createElement(component, isSvg);\n spread(el, props, isSvg);\n return el;\n }\n}\nexport function createDynamicComponent(component, props) {\n if (isServer)\n return createServerDynamicComponent(component, props);\n const cached = createMemo(component);\n return createMemo(() => createStaticComponent(cached(), props));\n}\n// https://github.com/solidjs/solid/blob/12c0dbbbf9f9fdf798c6682e57aee8ea763cf1ba/packages/solid/web/src/index.ts#L114\nexport function Dynamic(props) {\n const [p, others] = splitProps(props, [\"$component\"]);\n if (isServer)\n return createServerDynamicComponent(() => p.$component, others);\n return createDynamicComponent(() => p.$component, others);\n}\nexport default Dynamic;\n","import deepmerge from \"@suid/utils/deepmerge\";\nfunction mergeStyleProps(values) {\n const result = values.reduce((result, value) => {\n if (\"name\" in value)\n result[`--${value.name}`] = \"0\";\n deepmerge(result, value, {\n clone: false,\n sortKeys: true,\n });\n return result;\n }, {});\n delete result.name;\n return result;\n}\nexport default mergeStyleProps;\n","export function isVar(value) {\n return value.startsWith(\"--\");\n}\nexport function isPrivateVar(value) {\n return value.startsWith(\"__\");\n}\nexport function isSelector(value) {\n return /[^a-z-]/i.test(value) && !isVar(value);\n}\nexport function isGlobalSelector(value) {\n return value.startsWith(\"@global\");\n}\nexport function isMediaQuery(value) {\n return value.startsWith(\"@media\");\n}\nexport function isKeyframes(value) {\n return value.startsWith(\"@keyframes\");\n}\n","export function snakeCase(value) {\n return value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\nexport function randomString() {\n return Math.random().toString(36).substring(2, 15).slice(0, 8);\n}\n","import { isGlobalSelector, isKeyframes, isMediaQuery, isSelector, isVar, isPrivateVar, } from \"./assert\";\nimport { snakeCase } from \"./utils/string\";\nfunction renderSelector(propKey, propValue, selectors = [], options = {}) {\n const subselectors = propKey.split(\",\").map((v) => {\n v = v.trim();\n return v.includes(\"&\") ? v : `& ${v}`;\n });\n return render(propValue, (selectors.length ? selectors : [\"\"]).flatMap((selector) => subselectors.map((v) => v.replace(/&/g, selector).trim())), {\n ...options,\n });\n}\nfunction snakeCaseWithCache(name, cache) {\n if (!cache)\n return snakeCase(name);\n let result = cache.get(name);\n if (result)\n return result;\n cache.set(name, (result = snakeCase(name)));\n return result;\n}\nfunction render(css, selectors = [], options = {}) {\n const props = [];\n const rules = [];\n for (let propKey in css) {\n const propValue = css[propKey];\n if (isPrivateVar(propKey)) {\n continue;\n }\n else if (isGlobalSelector(propKey)) {\n for (const selector in propValue) {\n rules.push(...renderSelector(selector, propValue[selector], [], options));\n }\n }\n else if (isMediaQuery(propKey)) {\n rules.push(...render(propValue, selectors, {\n ...options,\n sublevel: true,\n }).map((v) => `${propKey} {\\n${v}\\n}`));\n }\n else if (isVar(propKey)) {\n if (propValue !== undefined && propValue !== null)\n props.push(`${propKey}: ${propValue};`);\n }\n else if (isKeyframes(propKey)) {\n const keyframes = [];\n for (const k in propValue) {\n keyframes.push(...render(propValue[k], [/^\\d+$/.test(k) ? `${k}%` : k], {\n ...options,\n sublevel: true,\n }));\n }\n rules.push(`${propKey} {\\n${keyframes.join(\"\\n\")}\\n}`);\n }\n else if (isSelector(propKey)) {\n rules.push(...renderSelector(propKey, propValue, selectors, options));\n }\n else if (options.extraProperties && propKey in options.extraProperties) {\n const extraProps = options.extraProperties[propKey](propValue);\n for (const extraPropKey in extraProps) {\n const inValue = extraProps[extraPropKey];\n const value = options.onPropertyValue\n ? options.onPropertyValue(extraPropKey, inValue)\n : inValue;\n if (value !== undefined && value !== null)\n props.push(`${snakeCaseWithCache(extraPropKey, options.propertyNameCache)}: ${value};`);\n }\n }\n else {\n propKey = snakeCaseWithCache(propKey, options.propertyNameCache);\n const value = options.onPropertyValue\n ? options.onPropertyValue(propKey, propValue)\n : propValue;\n if (value !== undefined && value !== null)\n props.push(`${propKey}: ${value};`);\n }\n }\n const renderProps = (level) => {\n const pad = \"\\t\".repeat(level);\n return `${pad}${props.join(`\\n${pad}`)}`;\n };\n if (selectors.length) {\n const pad = options.sublevel ? `\\t` : ``;\n const selectorStr = pad + selectors.join(`,\\n${pad}`);\n return [\n ...(props.length\n ? [\n `${selectorStr} {\\n${renderProps(options.sublevel ? 2 : 1)}\\n${pad}}`,\n ]\n : []),\n ...rules,\n ];\n }\n else {\n return [...(props.length ? [renderProps(0)] : []), ...rules];\n }\n}\nexport default render;\n","export function toArray(value) {\n return value ? (Array.isArray(value) ? value : [value]) : [];\n}\n","export function resolveFunction(value) {\n if (typeof value === \"function\")\n value = value();\n return value;\n}\n","import render from \"./render\";\nimport { toArray } from \"./utils/array\";\nimport { resolveFunction } from \"./utils/function\";\nexport class StyleCache {\n ids = new Map();\n rules = new Map();\n propertyNames = new Map();\n create(name, rules, componentId) {\n let styleObject = this.rules.get(rules);\n if (styleObject)\n return styleObject;\n let componentIndex = this.ids.get(componentId);\n // Same component (createUniqueId) but different rules\n if (typeof componentIndex === \"number\") {\n // Use a new id for the new rule\n this.ids.set(componentId, ++componentIndex);\n componentId += `_${componentIndex}`;\n }\n styleObject = create(name, rules, componentId);\n this.save(styleObject, rules);\n return styleObject;\n }\n save(style, rules) {\n this.ids.set(style.id, 0);\n this.rules.set(rules, style);\n }\n delete(style) {\n this.ids.delete(style.id);\n this.rules.delete(style.rules);\n }\n}\nfunction create(name, rules, id) {\n return {\n id,\n name,\n className: `${name}-${id}`,\n rules: rules.replaceAll(`$id`, `${id}`),\n };\n}\nfunction createStyleObject(options) {\n const className = `${options.name}-$id`;\n const propsValues = toArray(resolveFunction(options.props));\n const propertyNameCache = options.cache?.propertyNames;\n const rules = propsValues\n .map((v) => typeof v === \"string\"\n ? `.${className} {\\n${v}\\n}`\n : render(v, [`.${className}`], {\n extraProperties: options.extraProperties,\n propertyNameCache,\n }).join(\"\\n\"))\n .join(\"\\n\");\n return (options.cache?.create(options.name, rules, options.componentId) ||\n create(options.name, rules, options.componentId));\n}\nexport default createStyleObject;\n","function setStyleElementText(element, text) {\n if (\"styleSheet\" in element) {\n element[\"styleSheet\"].cssText = text;\n }\n else {\n element.innerText = \"\";\n element.appendChild(document.createTextNode(text));\n }\n}\nexport default setStyleElementText;\n","import setStyleElementText from \"./setStyleElementText\";\nfunction setAttributes(element, attributes) {\n for (const name in attributes) {\n const value = attributes[name];\n if (value !== undefined) {\n if (value === null) {\n element.removeAttribute(name);\n }\n else {\n element.setAttribute(name, value);\n }\n }\n }\n}\nfunction createStyleElement(css, attributes) {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n if (attributes)\n setAttributes(element, attributes);\n setStyleElementText(element, css);\n return element;\n}\nexport default createStyleElement;\n","function registerStyleElementUsage(style) {\n let uses = Number(style.getAttribute(\"data-uses\"));\n uses++;\n style.setAttribute(\"data-uses\", uses.toString());\n}\nexport default registerStyleElementUsage;\n","import createStyleElement from \"./createStyleElement\";\nimport registerStyleElementUsage from \"./registerStyleElementUsage\";\nimport setStyleElementText from \"./setStyleElementText\";\nconst placeholderId = \"suid-injectFirst\";\nfunction appendStyleElement(css, attributes, injectFirst) {\n if (Array.isArray(css))\n css = css.join(\"\\n\");\n const id = attributes?.[\"id\"];\n const head = document.head || document.getElementsByTagName(\"head\")[0];\n const prevElement = id && document.getElementById(id);\n if (prevElement && prevElement instanceof HTMLStyleElement) {\n setStyleElementText(prevElement, css);\n registerStyleElementUsage(prevElement);\n return prevElement;\n }\n else {\n if (prevElement)\n prevElement.remove();\n const element = createStyleElement(css, attributes);\n registerStyleElementUsage(element);\n if (injectFirst) {\n let placeholderElement = head.querySelector(`#${placeholderId}`);\n if (!placeholderElement) {\n placeholderElement = document.createElement(\"style\");\n placeholderElement.setAttribute(\"id\", placeholderId);\n head.prepend(placeholderElement);\n }\n head.insertBefore(element, placeholderElement);\n }\n else {\n head.appendChild(element);\n }\n return element;\n }\n}\nexport default appendStyleElement;\n","function findStyleElement(input, classPrefix = \"css-\") {\n if (typeof input === \"string\")\n return document.getElementById(input);\n const className = [...input.classList].find((name) => name.startsWith(classPrefix));\n if (className)\n return document.getElementById(className.slice(classPrefix.length));\n}\nexport default findStyleElement;\n","function unregisterStyleElementUsage(style, remove = true) {\n let uses = Number(style.getAttribute(\"data-uses\"));\n uses--;\n if (uses <= 0) {\n if (remove) {\n style.remove();\n }\n else {\n style.setAttribute(\"data-uses\", \"0\");\n }\n }\n else {\n style.setAttribute(\"data-uses\", uses.toString());\n }\n}\nexport default unregisterStyleElementUsage;\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(\"MUI: `capitalize(string)` expects a string argument.\");\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n let timeout;\n function debounced(...args) {\n const later = () => {\n // eslint-disable-next-line prefer-spread\n func.apply(null, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n return debounced;\n}\n","// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18\nexport default function getScrollbarSize(doc) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = doc.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n}\n","export default function ownerDocument(node) {\n return (node && node.ownerDocument) || document;\n}\n","import ownerDocument from \"./ownerDocument\";\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}\n","export default function randomString() {\n return Math.random().toString(36).substring(2, 15).slice(0, 8);\n}\n","import { createSignal } from \"solid-js\";\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nlet hadFocusVisibleRecentlyTimeout;\nconst inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n \"datetime-local\": true,\n};\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n const { type, tagName } = node;\n if (tagName === \"INPUT\" &&\n inputTypesWhitelist[type] &&\n !node.readOnly) {\n return true;\n }\n if (tagName === \"TEXTAREA\" && !node.readOnly) {\n return true;\n }\n if (node.isContentEditable) {\n return true;\n }\n return false;\n}\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n hadKeyboardEvent = true;\n}\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n if (this.visibilityState === \"hidden\") {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\nfunction prepare(doc) {\n doc.addEventListener(\"keydown\", handleKeyDown, true);\n doc.addEventListener(\"mousedown\", handlePointerDown, true);\n doc.addEventListener(\"pointerdown\", handlePointerDown, true);\n doc.addEventListener(\"touchstart\", handlePointerDown, true);\n doc.addEventListener(\"visibilitychange\", handleVisibilityChange, true);\n}\nexport function teardown(doc) {\n doc.removeEventListener(\"keydown\", handleKeyDown, true);\n doc.removeEventListener(\"mousedown\", handlePointerDown, true);\n doc.removeEventListener(\"pointerdown\", handlePointerDown, true);\n doc.removeEventListener(\"touchstart\", handlePointerDown, true);\n doc.removeEventListener(\"visibilitychange\", handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n const { target } = event;\n try {\n return target.matches(\":focus-visible\");\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (error) {\n // Browsers not implementing :focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n }\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nexport default function useIsFocusVisible() {\n const ref = (node) => {\n if (node != null) {\n prepare(node.ownerDocument);\n }\n };\n const [isFocusVisibleRef, setFocusVisibleRef] = createSignal(false);\n /**\n * Should be called if a blur event is fired\n */\n function handleBlurVisible() {\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef()) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(() => {\n hadFocusVisibleRecently = false;\n }, 100);\n setFocusVisibleRef(false);\n return true;\n }\n return false;\n }\n /**\n * Should be called if a blur event is fired\n */\n function handleFocusVisible(event) {\n if (isFocusVisible(event)) {\n setFocusVisibleRef(true);\n return true;\n }\n return false;\n }\n return {\n isFocusVisibleRef: {\n get current() {\n return isFocusVisibleRef();\n },\n },\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref,\n };\n}\n","import StyledEngineContext from \"./StyledEngineProvider/StyledEngineContext\";\nimport mergeStyleProps from \"./mergeStyleProps\";\nimport createStyleObject, { StyleCache, } from \"@suid/css/createStyleObject\";\nimport appendStyleElement from \"@suid/css/dom/appendStyleElement\";\nimport findStyleElement from \"@suid/css/dom/findStyleElement\";\nimport registerStyleElementUsage from \"@suid/css/dom/registerStyleElementUsage\";\nimport unregisterStyleElementUsage from \"@suid/css/dom/unregisterStyleElementUsage\";\nimport { randomString } from \"@suid/utils\";\nimport { createRenderEffect, createSignal, createUniqueId, onCleanup, sharedConfig, useContext, } from \"solid-js\";\nimport { isServer, useAssets } from \"solid-js/web\";\nconst styleCache = isServer ? undefined : new StyleCache();\nfunction normalizeStyleProps(props) {\n if (!props) {\n return [];\n }\n else if (Array.isArray(props)) {\n return props.flat(Infinity).filter((v) => !!v);\n }\n else {\n return [props];\n }\n}\nfunction createStyleId() {\n if (!sharedConfig.context)\n return randomString();\n const id = createUniqueId().replaceAll(\"-\", \"\");\n const chunkSize = 9;\n const chunks = Math.ceil(id.length / chunkSize);\n const ids = [];\n for (let chunk = 1; chunk <= chunks; ++chunk) {\n const index = (chunk - 1) * chunkSize;\n const number = Number(id.slice(index, index + chunkSize));\n ids.push(number.toString(32));\n }\n return ids.join(\"-\");\n}\nfunction createStyle(value) {\n const context = useContext(StyledEngineContext);\n const [name, setName] = createSignal(\"\");\n const componentId = createStyleId();\n let styleElement;\n let isGlobalStyleObject = false;\n createRenderEffect((prevResult) => {\n const propsValue = value();\n let styleObject;\n if (propsValue) {\n const props = mergeStyleProps(normalizeStyleProps(propsValue));\n isGlobalStyleObject = \"@global\" in props;\n styleObject = createStyleObject({\n name: \"css\",\n props,\n cache: styleCache,\n componentId,\n });\n if (isServer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (context.injectFirst)\n console.warn(`SUID: 'injectFirst' is not supported in SSR mode.`);\n }\n useAssets(() => (<style id={styleObject.id} innerHTML={styleObject.rules} nonce={context.cache?.nonce}/>));\n }\n else {\n styleElement = findStyleElement(styleObject.id);\n if (styleElement) {\n registerStyleElementUsage(styleElement);\n }\n else {\n styleElement = appendStyleElement(styleObject.rules, {\n id: styleObject.id,\n nonce: context.cache?.nonce,\n }, context.injectFirst);\n }\n if (prevResult?.styleElement) {\n unregisterStyleElementUsage(prevResult.styleElement);\n }\n }\n }\n if (typeof styleObject?.className === \"string\") {\n setName(styleObject.className);\n }\n else {\n setName(\"\");\n }\n return {\n className: styleObject?.className,\n styleElement,\n };\n }, undefined);\n onCleanup(() => {\n if (styleElement)\n unregisterStyleElementUsage(styleElement, context.cleanupStyles ?? isGlobalStyleObject);\n });\n return name;\n}\nexport default createStyle;\n","import { isGlobalSelector, isKeyframes, isMediaQuery, isSelector, } from \"./assert\";\nfunction resolve(css, onProp, cssTarget = {}) {\n for (const name in css) {\n const value = css[name];\n if (isGlobalSelector(name)) {\n cssTarget[name] = resolve(value, onProp);\n }\n else if (isMediaQuery(name)) {\n cssTarget[name] = resolve(value, onProp);\n }\n else if (isKeyframes(name)) {\n cssTarget[name] = {};\n for (const v in value) {\n cssTarget[name][v] = resolve(value[v], onProp);\n }\n }\n else if (isSelector(name)) {\n cssTarget[name] = resolve(value, onProp);\n }\n else {\n const result = onProp(name, value);\n if (result) {\n for (const key in result) {\n cssTarget[key] = isMediaQuery(key)\n ? { ...cssTarget[key], ...result[key] }\n : result[key];\n }\n }\n else {\n cssTarget[name] = value;\n }\n }\n }\n return cssTarget;\n}\nexport default resolve;\n","import resolve from \"@suid/css/resolve\";\n/**\n * @link https://github.com/emotion-js/emotion/blob/main/packages/unitless/src/index.js\n */\nexport const unitLess = new Set([\n \"animationIterationCount\",\n \"borderImageOutset\",\n \"borderImageSlice\",\n \"borderImageWidth\",\n \"boxFlex\",\n \"boxFlexGroup\",\n \"boxOrdinalGroup\",\n \"columnCount\",\n \"columns\",\n \"flex\",\n \"flexGrow\",\n \"flexPositive\",\n \"flexShrink\",\n \"flexNegative\",\n \"flexOrder\",\n \"gridRow\",\n \"gridRowEnd\",\n \"gridRowSpan\",\n \"gridRowStart\",\n \"gridColumn\",\n \"gridColumnEnd\",\n \"gridColumnSpan\",\n \"gridColumnStart\",\n \"msGridRow\",\n \"msGridRowSpan\",\n \"msGridColumn\",\n \"msGridColumnSpan\",\n \"fontWeight\",\n \"lineHeight\",\n \"opacity\",\n \"order\",\n \"orphans\",\n \"tabSize\",\n \"widows\",\n \"zIndex\",\n \"zoom\",\n \"WebkitLineClamp\",\n \"fillOpacity\",\n \"floodOpacity\",\n \"stopOpacity\",\n \"strokeDasharray\",\n \"strokeDashoffset\",\n \"strokeMiterlimit\",\n \"strokeOpacity\",\n \"strokeWidth\",\n]);\nexport function resolveStyledPropsValue(name, value) {\n if (typeof value === \"number\") {\n return { [name]: unitLess.has(name) ? value.toString() : `${value}px` };\n }\n}\nfunction resolveStyledProps(v, cssTarget = {}) {\n return resolve(v, resolveStyledPropsValue, cssTarget);\n}\nexport default resolveStyledProps;\n","function getThemeValue(theme, key, value) {\n if (typeof value !== \"string\")\n return value;\n const names = value.split(\".\");\n let ref = theme[key];\n for (let i = 0; i < names.length; i++) {\n ref = ref?.[names[i]];\n if (!ref)\n break;\n }\n return ref ?? value;\n}\nexport default getThemeValue;\n","function getPath(obj, path) {\n if (!path || typeof path !== \"string\") {\n return null;\n }\n return path\n .split(\".\")\n .reduce((acc, item) => (acc && acc[item] ? acc[item] : null), obj);\n}\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n const themeSpacing = getPath(theme, themeKey) || defaultValue;\n if (typeof themeSpacing === \"number\") {\n return (abs) => {\n if (typeof abs === \"string\") {\n return abs;\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof abs !== \"number\") {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${abs}.`);\n }\n }\n return themeSpacing * abs;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return (abs) => {\n if (typeof abs === \"string\") {\n return abs;\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Number.isInteger(abs)) {\n console.error([\n `MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` +\n `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`,\n ].join(\"\\n\"));\n }\n else if (abs > themeSpacing.length - 1) {\n console.error([\n `MUI: The value provided (${abs}) overflows.`,\n `The supported values are: ${JSON.stringify(themeSpacing)}.`,\n `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`,\n ].join(\"\\n\"));\n }\n }\n return themeSpacing[abs];\n };\n }\n if (typeof themeSpacing === \"function\") {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== \"production\") {\n console.error([\n `MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`,\n \"It should be a number, an array or a function.\",\n ].join(\"\\n\"));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, \"spacing.resolve\", 8, \"spacing.resolve\");\n}\n","import getThemeValue from \"./getThemeValue\";\nimport { createUnaryUnit } from \"./spacing\";\nconst dirMap = {\n x: [\"Left\", \"Right\"],\n y: [\"Top\", \"Bottom\"],\n};\nfunction asPx(value) {\n return typeof value === \"number\" ? `${value}px` : value;\n}\nfunction customProp(name, onValue) {\n return (value, theme) => onValue(name, value, theme);\n}\nfunction prop(name, onValue) {\n return onValue\n ? (value, theme) => ({\n [name]: onValue(name, value, theme),\n })\n : (value) => ({ [name]: value });\n}\nfunction pxProp(name) {\n return prop(name, (name, value) => asPx(value));\n}\nfunction mProp(name, suffix, onValue) {\n const names = suffix.map((v) => `${name}${v}`);\n return onValue\n ? (value, theme) => names.reduce((result, name) => {\n result[name] = onValue(name, value, theme);\n return result;\n }, {})\n : (value) => names.reduce((result, name) => {\n result[name] = value;\n return result;\n }, {});\n}\nfunction createSystemProps() {\n return {\n ...createSystemDisplayProps(),\n ...createSystemFlexboxProps(),\n ...createSystemGridProps(),\n ...createSystemPositionProps(),\n ...createSystemPaletteProps(),\n ...createSystemSizingProps(),\n ...createSystemBorderProps(),\n ...createSystemSpacingProps(),\n ...createSystemTypographyProps(),\n };\n}\nexport function createSystemDisplayProps() {\n return {\n displayPrint: customProp(\"displayPrint\", (name, display) => ({\n \"@media print\": {\n display,\n },\n })),\n displayRaw: prop(\"display\"),\n overflow: prop(\"overflow\"),\n textOverflow: prop(\"textOverflow\"),\n visibility: prop(\"visibility\"),\n whiteSpace: prop(\"whiteSpace\"),\n };\n}\nexport function createSystemFlexboxProps() {\n return {\n flexBasis: prop(\"flexBasis\"),\n flexDirection: prop(\"flexDirection\"),\n flexWrap: prop(\"flexWrap\"),\n justifyContent: prop(\"justifyContent\"),\n alignItems: prop(\"alignItems\"),\n alignContent: prop(\"alignContent\"),\n order: prop(\"order\"),\n flex: prop(\"flex\"),\n flexGrow: prop(\"flexGrow\"),\n flexShrink: prop(\"flexShrink\"),\n alignSelf: prop(\"alignSelf\"),\n justifyItems: prop(\"justifyItems\"),\n justifySelf: prop(\"justifySelf\"),\n };\n}\nexport function createSystemGridProps() {\n const spacing = (name, value, theme) => createUnaryUnit(theme, \"spacing\", 8, name)(value);\n return {\n gap: prop(\"gap\", spacing),\n columnGap: prop(\"columnGap\", spacing),\n rowGap: prop(\"rowGap\", spacing),\n gridColumn: prop(\"gridColumn\"),\n gridRow: prop(\"gridRow\"),\n gridAutoFlow: prop(\"gridAutoFlow\"),\n gridAutoColumns: prop(\"gridAutoColumns\"),\n gridAutoRows: prop(\"gridAutoRows\"),\n gridTemplateColumns: prop(\"gridTemplateColumns\"),\n gridTemplateRows: prop(\"gridTemplateRows\"),\n gridTemplateAreas: prop(\"gridTemplateAreas\"),\n gridArea: prop(\"gridArea\"),\n };\n}\nexport function createSystemPositionProps() {\n return {\n position: prop(\"position\"),\n zIndex: prop(\"zIndex\", (name, value, theme) => theme.zIndex?.[name] ?? value),\n top: pxProp(\"top\"),\n right: pxProp(\"right\"),\n bottom: pxProp(\"bottom\"),\n left: pxProp(\"left\"),\n };\n}\nexport function createSystemPaletteProps() {\n const paletteValue = (name, value, theme) => getThemeValue(theme, \"palette\", value);\n return {\n color: prop(\"color\", paletteValue),\n bgcolor: prop(\"backgroundColor\", paletteValue),\n backgroundColor: prop(\"backgroundColor\", paletteValue),\n };\n}\nexport function createSystemSizingProps() {\n const onValue = (name, value, theme) => {\n if (name === \"maxWidth\") {\n value = theme.breakpoints.values[name] ?? value;\n }\n if (typeof value === \"number\") {\n value = value > 0 && value <= 1 ? `${value * 100}%` : `${value}px`;\n }\n return value;\n };\n return {\n width: prop(\"width\", onValue),\n maxWidth: prop(\"maxWidth\", onValue),\n minWidth: prop(\"minWidth\", onValue),\n height: prop(\"height\", onValue),\n maxHeight: prop(\"maxHeight\", onValue),\n minHeight: prop(\"minHeight\", onValue),\n boxSizing: prop(\"boxSizing\", onValue),\n };\n}\nexport function createSystemBorderProps() {\n const borderValue = (name, value) => typeof value === \"number\" ? `${value}px solid` : value;\n const paletteValue = (name, value, theme) => getThemeValue(theme, \"palette\", value);\n return {\n border: prop(\"border\", borderValue),\n borderTop: prop(\"borderTop\", borderValue),\n borderRight: prop(\"borderRight\", borderValue),\n borderBottom: prop(\"borderBottom\", borderValue),\n borderLeft: prop(\"borderLeft\", borderValue),\n borderColor: prop(\"borderColor\", paletteValue),\n borderTopColor: prop(\"borderTopColor\", paletteValue),\n borderRightColor: prop(\"borderRightColor\", paletteValue),\n borderBottomColor: prop(\"borderBottomColor\", paletteValue),\n borderLeftColor: prop(\"borderLeftColor\", paletteValue),\n borderRadius: prop(\"borderRadius\", (name, value, theme) => typeof value === \"number\"\n ? `${theme.shape.borderRadius * value}px`\n : value),\n };\n}\nexport function createSystemTypographyProps() {\n const typographyValue = (name, value, theme) => getThemeValue(theme, \"typography\", value);\n return {\n typography: customProp(\"typography\", (name, value, theme) => getThemeValue(theme, \"typography\", value)),\n fontFamily: prop(\"fontFamily\", typographyValue),\n fontSize: prop(\"fontSize\", (name, value, theme) => asPx(typographyValue(name, value, theme))),\n fontStyle: prop(\"fontStyle\", typographyValue),\n fontWeight: prop(\"fontWeight\", typographyValue),\n letterSpacing: pxProp(\"letterSpacing\"),\n lineHeight: prop(\"lineHeight\"),\n textAlign: prop(\"textAlign\"),\n textTransform: prop(\"textTransform\"),\n };\n}\nexport function createSystemSpacingProps() {\n const spacing = (name, value, theme) => theme.spacing(value);\n const m = \"margin\";\n const p = \"padding\";\n return {\n m: prop(m, spacing),\n mt: prop(\"marginTop\", spacing),\n mr: prop(\"marginRight\", spacing),\n mb: prop(\"marginBottom\", spacing),\n ml: prop(\"marginLeft\", spacing),\n mx: mProp(m, dirMap[\"x\"], spacing),\n my: mProp(m, dirMap[\"y\"], spacing),\n margin: prop(m, spacing),\n marginTop: prop(\"marginTop\", spacing),\n marginRight: prop(\"marginRight\", spacing),\n marginBottom: prop(\"marginBottom\", spacing),\n marginLeft: prop(\"marginLeft\", spacing),\n marginX: mProp(m, dirMap[\"x\"], spacing),\n marginY: mProp(m, dirMap[\"y\"], spacing),\n marginInline: mProp(m, [\"Inline\", \"InlineStart\"], spacing),\n marginInlineStart: prop(\"marginInlineStart\", spacing),\n marginInlineEnd: prop(\"marginInlineEnd\", spacing),\n marginBlock: mProp(m, [\"BlockStart\", \"BlockEnd\"], spacing),\n marginBlockStart: prop(\"marginBlockStart\", spacing),\n marginBlockEnd: prop(\"marginBlockEnd\", spacing),\n p: prop(p, spacing),\n pt: prop(\"paddingTop\", spacing),\n pr: prop(\"paddingRight\", spacing),\n pb: prop(\"paddingBottom\", spacing),\n pl: prop(\"paddingLeft\", spacing),\n px: mProp(p, dirMap[\"x\"], spacing),\n py: mProp(p, dirMap[\"y\"], spacing),\n padding: prop(p, spacing),\n paddingTop: prop(\"paddingTop\", spacing),\n paddingRight: prop(\"paddingRight\", spacing),\n paddingBottom: prop(\"paddingBottom\", spacing),\n paddingLeft: prop(\"paddingLeft\", spacing),\n paddingX: mProp(p, dirMap[\"x\"], spacing),\n paddingY: mProp(p, dirMap[\"y\"], spacing),\n paddingInline: mProp(p, [\"Inline\", \"InlineStart\"], spacing),\n paddingInlineStart: prop(\"paddingInlineStart\", spacing),\n paddingInlineEnd: prop(\"paddingInlineEnd\", spacing),\n paddingBlock: mProp(p, [\"BlockStart\", \"BlockEnd\"], spacing),\n paddingBlockStart: prop(\"paddingBlockStart\", spacing),\n paddingBlockEnd: prop(\"paddingBlockEnd\", spacing),\n };\n}\nexport default createSystemProps;\n","import createSystemProps from \"./createSystemProps\";\nconst systemProps = createSystemProps();\nexport const systemPropNames = Object.keys(systemProps);\nexport default systemProps;\n","import { handleBreakpoints } from \"./breakpoints\";\nimport { resolveStyledPropsValue } from \"./resolveStyledProps\";\nimport systemProps from \"./systemProps\";\nimport resolve from \"@suid/css/resolve\";\nexport function resolveSystemPropsValue(name, value, theme) {\n return systemProps[name](value, theme);\n}\nexport function resolveSxPropsValue(name, value, theme) {\n return name in systemProps\n ? resolveSystemPropsValue(name, value, theme)\n : resolveStyledPropsValue(name, value);\n}\nfunction resolveSxProps(object, theme) {\n return resolve(object, (name, value) => {\n if (typeof value === \"function\") {\n value = value(theme);\n }\n if (value === null || value === undefined) {\n return value;\n }\n else if (typeof value === \"object\") {\n const sortedCss = {};\n for (const key of theme.breakpoints.keys) {\n sortedCss[theme.breakpoints.up(key)] = {};\n }\n return Object.assign(sortedCss, handleBreakpoints({ theme }, value, (v) => resolveSxPropsValue(name, v, theme) ?? { [name]: v }));\n }\n else {\n return resolveSxPropsValue(name, value, theme);\n }\n });\n}\nexport default resolveSxProps;\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;","import { createDynamicComponent } from \"./Dynamic\";\nimport createStyle from \"./createStyle\";\nimport resolveStyledProps from \"./resolveStyledProps\";\nimport resolveSxProps from \"./resolveSxProps\";\nimport useTheme from \"./useTheme\";\nimport { randomString } from \"@suid/utils\";\nimport clsx from \"clsx\";\nimport { createMemo, splitProps, mergeProps } from \"solid-js\";\nexport function redefine(component, \n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n..._types) {\n return component;\n}\nexport const skipProps = [\n \"ownerState\",\n \"theme\",\n \"sx\",\n \"as\",\n];\nfunction getStyleOverrides(name, theme) {\n return theme.components?.[name]?.styleOverrides;\n}\nfunction resolveStyles(useTheme, className, styles, inProps, options = {}) {\n return createMemo(() => {\n const theme = useTheme();\n const styleOverrides = getStyleOverrides(options.name, theme);\n const ownerState = inProps.ownerState;\n const baseStyles = styles.reduce((result, style) => {\n let styledProps;\n if (typeof style === \"function\") {\n styledProps = style({\n ownerState,\n theme,\n get sx() {\n return inProps.sx;\n },\n get as() {\n return inProps.as;\n },\n props: inProps,\n });\n }\n else if (style) {\n styledProps = style;\n }\n if (styledProps)\n result.push(resolveStyledProps(styledProps, {\n name: className,\n __resolved: true,\n }));\n return result;\n }, []);\n let resolvedStyleOverrides = [];\n if (options.overridesResolver &&\n typeof options.overridesResolver === \"function\" &&\n styleOverrides) {\n resolvedStyleOverrides = options\n .overridesResolver(inProps, styleOverrides)\n .map((styleProp) => styleProp ? resolveStyledProps(styleProp, {}) : null)\n .filter(Boolean);\n }\n return baseStyles.concat(resolvedStyleOverrides);\n });\n}\nexport function setSuidComponentType(cb, type) {\n cb[\"__suid\"] = type;\n}\nfunction getSuidComponentType(input) {\n if (typeof input === \"function\")\n return input[\"__suid\"];\n}\n/*@__NO_SIDE_EFFECTS__*/\nfunction createStyled(config) {\n return function styled(Component, options = {}) {\n let cssClassName;\n let className;\n if (options.name) {\n const slot = options.slot || \"Root\";\n className = cssClassName = `${options.name}-${slot.slice(0, 1).toLowerCase() + slot.slice(1)}`;\n }\n else {\n className = `styled-${randomString()}`;\n cssClassName = \"css\";\n }\n const componentType = getSuidComponentType(Component);\n return function (...styles) {\n function StyledComponent(inProps) {\n let theme;\n const $useTheme = () => {\n const inTheme = inProps.theme;\n if (inTheme) {\n return inTheme;\n }\n else if (theme) {\n return theme;\n }\n else {\n return (theme =\n config && config.onUseTheme\n ? config.onUseTheme()\n : useTheme());\n }\n };\n const [, otherProps] = splitProps(inProps, options.skipProps || skipProps);\n const inStyles = resolveStyles($useTheme, cssClassName, styles, inProps, options);\n const inSx = () => {\n const sx = inProps.sx;\n return (sx ? (Array.isArray(sx) ? sx : [sx]) : []);\n };\n const $component = () => {\n if (componentType)\n return Component;\n const as = inProps.as;\n return as ? as : Component;\n };\n const $componentType = componentType\n ? () => componentType\n : createMemo(() => getSuidComponentType($component()));\n const sx = options.skipSx\n ? () => inStyles()\n : () => {\n const theme = $useTheme();\n return [\n ...inStyles(),\n ...inSx().map((sx) => sx.__resolved ? sx : resolveSxProps(sx, theme)),\n ];\n };\n const styleClassName = createStyle(() => $componentType() ? undefined : sx());\n return createDynamicComponent($component, mergeProps(otherProps, {\n get children() {\n return inProps.children;\n },\n // [review] This property must be omitted on each component individually.\n get component() {\n return $componentType() ? inProps.component : null;\n },\n get as() {\n return componentType ? inProps.as : undefined;\n },\n get sx() {\n return $componentType() ? sx() : undefined;\n },\n get ownerState() {\n return $componentType() === \"system\"\n ? inProps.ownerState\n : undefined;\n },\n get class() {\n return clsx([\n ...new Set([inProps.class, className, styleClassName()]),\n ]);\n },\n }));\n }\n setSuidComponentType(StyledComponent, \"system\");\n if (className)\n StyledComponent.toString = () => `.${className}`;\n return StyledComponent;\n };\n };\n}\nexport default createStyled;\n","import { default as useTheme } from \"./useTheme\";\nimport createStyled, { skipProps } from \"@suid/system/createStyled\";\nexport const skipRootProps = [...skipProps, \"classes\"];\nexport default createStyled({\n onUseTheme: () => useTheme(),\n});\n","// https://github.com/mui/material-ui/blob/master/packages/mui-base/src/composeClasses/composeClasses.ts\nexport default function composeClasses(slots, getUtilityClass, classes) {\n const output = {};\n Object.keys(slots).forEach(\n // `Objet.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n (slot) => {\n output[slot] = slots[slot]\n .reduce((acc, key) => {\n if (key) {\n if (classes && classes[key]) {\n acc.push(classes[key]);\n }\n acc.push(getUtilityClass(key));\n }\n return acc;\n }, [])\n .join(\" \");\n });\n return output;\n}\n","import { children, createComponent, createContext, useContext, } from \"solid-js\";\nexport const $INSPECT = Symbol(\"solid-inspect\");\nexport const InspectContext = createContext();\nexport function inspectChildren(fn) {\n const cb = createComponent(InspectContext.Provider, {\n value: { enabled: true },\n get children() {\n return fn();\n },\n });\n const result = children(cb);\n return result.toArray;\n}\nexport function componentTrap(fn) {\n function Component(props) {\n if (useContext(InspectContext)?.enabled)\n return {\n Component,\n props,\n $INSPECT,\n };\n return fn(props);\n }\n Object.defineProperty(Component, \"name\", {\n value: fn.name,\n });\n Component.toString = fn.toString;\n return Component;\n}\nexport function isComponentObject(input, component) {\n return (!!input &&\n input.$INSPECT === $INSPECT &&\n (!component || input.Component === component));\n}\n","import composeClasses from \"./composeClasses\";\nimport useBaseThemeProps from \"./useThemeProps\";\nimport { setSuidComponentType } from \"@suid/system/createStyled\";\nimport { componentTrap } from \"@suid/system/inspect\";\nimport { batch, createComputed, splitProps } from \"solid-js\";\nimport { createMutable } from \"solid-js/store\";\n/*@__NO_SIDE_EFFECTS__*/\nfunction createComponentFactory() {\n return function (options) {\n function useClasses(ownerState) {\n const haveSlotClasses = !!options.slotClasses;\n const compose = () => {\n if (!options.slotClasses)\n throw new Error(`'slotClasses' option is not defined`);\n if (!options.utilityClass)\n throw new Error(`'utilityClass' option is not defined`);\n return composeClasses(options.slotClasses(ownerState), options.utilityClass, ownerState[\"classes\"] ?? \"\");\n };\n const classes = createMutable({});\n if (haveSlotClasses)\n createComputed(() => {\n const result = compose();\n batch(() => {\n for (const slot in result)\n classes[slot] = result[slot];\n });\n });\n return classes;\n }\n function splitInProps(allProps) {\n const [props, otherProps] = splitProps(allProps, options.selfPropNames);\n return { allProps, props, otherProps };\n }\n function useThemeProps(input) {\n return useBaseThemeProps({\n propDefaults: input.propDefaults || options.propDefaults,\n props: input.props,\n name: options.name,\n });\n }\n function useProps(props) {\n const themeProps = useThemeProps({ props });\n return splitInProps(themeProps);\n }\n function defineComponent(cb, styled = true) {\n cb = componentTrap(cb);\n cb.toString = () => `.${options.name}-root`;\n if (styled)\n setSuidComponentType(cb, \"base\");\n return cb;\n }\n function component(cb) {\n const Component = defineComponent(function Component(inProps) {\n const { allProps, otherProps, props } = useProps(inProps);\n const classes = (options.autoCallUseClasses ?? true)\n ? useClasses(allProps)\n : {};\n return cb({\n allProps,\n otherProps: otherProps,\n props,\n classes,\n });\n });\n Object.defineProperty(Component, \"name\", { value: cb.name });\n return Component;\n }\n return {\n name: options.name,\n selfPropNames: options.selfPropNames,\n component,\n defineComponent,\n useClasses,\n useThemeProps,\n useProps,\n splitInProps,\n };\n };\n}\nexport default createComponentFactory;\n","import createComponentFactory from \"@suid/base/createComponentFactory\";\nimport createStyle from \"@suid/system/createStyle\";\nconst $ = createComponentFactory()({\n name: \"MuiGlobalStyles\",\n selfPropNames: [\"styles\"],\n});\n/**\n *\n * Demos:\n *\n * - [How To Customize](https://mui.com/customization/how-to-customize/)\n *\n * API:\n *\n * - [GlobalStyles API](https://mui.com/api/global-styles/)\n */\nconst GlobalStyles = $.component(function GlobalStyles({ props }) {\n createStyle(() => ({\n \"@global\": props.styles || {},\n }));\n return <></>;\n});\nexport default GlobalStyles;\n","import GlobalStyles from \"../GlobalStyles\";\nimport { useTheme } from \"../styles\";\nimport createComponentFactory from \"@suid/base/createComponentFactory\";\nconst $ = createComponentFactory()({\n name: \"MuiCssBaseline\",\n selfPropNames: [\"children\", \"enableColorScheme\"],\n propDefaults: ({ set }) => set({\n enableColorScheme: false,\n }),\n});\nexport const html = (theme, enableColorScheme) => ({\n WebkitFontSmoothing: \"antialiased\", // Antialiasing.\n MozOsxFontSmoothing: \"grayscale\", // Antialiasing.\n // Change from `box-sizing: content-box` so that `width`\n // is not affected by `padding` or `border`.\n boxSizing: \"border-box\",\n // Fix font resize problem in iOS\n WebkitTextSizeAdjust: \"100%\",\n ...(enableColorScheme && { colorScheme: theme.palette.mode }),\n});\nexport const body = (theme) => ({\n color: theme.palette.text.primary,\n ...theme.typography.body1,\n backgroundColor: theme.palette.background.default,\n \"@media print\": {\n // Save printer ink.\n backgroundColor: theme.palette.common.white,\n },\n});\nexport const styles = (theme, enableColorScheme = false) => {\n const defaultStyles = {\n html: html(theme, enableColorScheme),\n \"*, *::before, *::after\": {\n boxSizing: \"inherit\",\n },\n \"strong, b\": {\n fontWeight: theme.typography.fontWeightBold,\n },\n body: {\n margin: 0, // Remove the margin in all browsers.\n ...body(theme),\n // Add support for document.body.requestFullScreen().\n // Other elements, if background transparent, are not supported.\n \"&::backdrop\": {\n backgroundColor: theme.palette.background.default,\n },\n },\n };\n /*const themeOverrides = theme.components?.MuiCssBaseline?.styleOverrides;\n if (themeOverrides) {\n defaultStyles = [defaultStyles, themeOverrides];\n }*/\n return defaultStyles;\n};\n/**\n * Kickstart an elegant, consistent, and simple baseline to build upon.\n *\n * Demos:\n *\n * - [Css Baseline](https://mui.com/components/css-baseline/)\n *\n * API:\n *\n * - [CssBaseline API](https://mui.com/api/css-baseline/)\n */\nconst CssBaseline = $.component(function CssBaseline({ props }) {\n const theme = useTheme();\n return <GlobalStyles styles={styles(theme, props.enableColorScheme)}/>;\n});\nexport default CssBaseline;\n","import { createContext, createEffect, createMemo, createSignal, onMount, useContext, type JSX } from \"solid-js\"\nimport { createTheme, ThemeProvider as MuiThemeProvider } from \"@suid/material/styles\"\nimport CssBaseline from \"@suid/material/CssBaseline\"\nimport { useConfig } from \"../stores/preferences\"\nimport {\n applyColorScheme,\n normalizeColorScheme,\n type NormalizedColorScheme,\n} from \"./theme-scheme\"\n\nexport type ThemeMode = \"system\" | \"light\" | \"dark\"\n\ninterface ThemeContextValue {\n isDark: () => boolean\n themeMode: () => ThemeMode\n setThemeMode: (mode: ThemeMode) => void\n cycleThemeMode: () => void\n colorScheme: () => NormalizedColorScheme\n setColorScheme: (scheme: NormalizedColorScheme) => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue>()\n\ninterface ResolvedPaletteColors {\n backgroundDefault: string\n backgroundPaper: string\n primary: string\n primaryContrast: string\n textPrimary: string\n textSecondary: string\n divider: string\n}\n\nconst lightPaletteFallbacks: ResolvedPaletteColors = {\n backgroundDefault: \"#ffffff\",\n backgroundPaper: \"#f5f5f5\",\n primary: \"#0066ff\",\n primaryContrast: \"#ffffff\",\n textPrimary: \"#1a1a1a\",\n textSecondary: \"#666666\",\n divider: \"#e0e0e0\",\n}\n\nconst darkPaletteFallbacks: ResolvedPaletteColors = {\n backgroundDefault: \"#1a1a1a\",\n backgroundPaper: \"#2a2a2a\",\n primary: \"#0080ff\",\n primaryContrast: \"#1a1a1a\",\n textPrimary: \"#cfd4dc\",\n textSecondary: \"#999999\",\n divider: \"#3a3a3a\",\n}\n\nconst readCssVar = (token: string, fallback: string, rootStyle: CSSStyleDeclaration | null) => {\n if (!rootStyle) return fallback\n const value = rootStyle.getPropertyValue(token)\n if (!value) return fallback\n const trimmed = value.trim()\n return trimmed || fallback\n}\n\nconst resolvePaletteColors = (dark: boolean): ResolvedPaletteColors => {\n const fallbackSet = dark ? darkPaletteFallbacks : lightPaletteFallbacks\n const rootStyle = typeof window !== \"undefined\" ? getComputedStyle(document.documentElement) : null\n\n return {\n backgroundDefault: readCssVar(\"--surface-base\", fallbackSet.backgroundDefault, rootStyle),\n backgroundPaper: readCssVar(\"--surface-secondary\", fallbackSet.backgroundPaper, rootStyle),\n primary: readCssVar(\"--accent-primary\", fallbackSet.primary, rootStyle),\n primaryContrast: readCssVar(\"--text-on-accent\", fallbackSet.primaryContrast, rootStyle),\n textPrimary: readCssVar(\"--text-primary\", fallbackSet.textPrimary, rootStyle),\n textSecondary: readCssVar(\"--text-secondary\", fallbackSet.textSecondary, rootStyle),\n divider: readCssVar(\"--border-base\", fallbackSet.divider, rootStyle),\n }\n}\n\nexport function ThemeProvider(props: { children: JSX.Element }) {\n const mediaQuery = typeof window !== \"undefined\" ? window.matchMedia(\"(prefers-color-scheme: dark)\") : null\n const { colorSchemePreference, setColorSchemePreference } = useConfig()\n const [selectedColorScheme, setSelectedColorScheme] = createSignal(colorSchemePreference())\n const [isDark, setIsDarkSignal] = createSignal(true)\n const [themeRevision, setThemeRevision] = createSignal(0)\n\n const colorScheme = () => selectedColorScheme()\n const themeMode = (): ThemeMode => colorScheme().appearance\n let latestWrite: Promise<void> | null = null\n\n createEffect(() => {\n const preference = colorSchemePreference()\n if (latestWrite) return\n setSelectedColorScheme(preference)\n })\n\n const applyResolvedTheme = () => {\n const dark = applyColorScheme(colorScheme(), { systemDark: mediaQuery?.matches })\n setIsDarkSignal(dark)\n if (typeof window !== \"undefined\") {\n requestAnimationFrame(() => setThemeRevision((v) => v + 1))\n } else {\n setThemeRevision((v) => v + 1)\n }\n }\n\n createEffect(() => {\n applyResolvedTheme()\n })\n\n onMount(() => {\n if (!mediaQuery) return\n const handleSystemThemeChange = () => {\n applyResolvedTheme()\n }\n\n mediaQuery.addEventListener(\"change\", handleSystemThemeChange)\n\n return () => {\n mediaQuery.removeEventListener(\"change\", handleSystemThemeChange)\n }\n })\n\n const setColorScheme = (scheme: NormalizedColorScheme) => {\n const normalized = normalizeColorScheme(scheme)\n setSelectedColorScheme(normalized)\n const write = setColorSchemePreference(normalized)\n latestWrite = write\n void write.then(\n () => {\n if (latestWrite !== write) return\n latestWrite = null\n setSelectedColorScheme(colorSchemePreference())\n },\n () => {\n if (latestWrite !== write) return\n latestWrite = null\n setSelectedColorScheme(colorSchemePreference())\n },\n )\n }\n\n const setThemeMode = (mode: ThemeMode) => {\n setColorScheme(normalizeColorScheme(mode === \"dark\" ? \"classic\" : mode))\n }\n\n const cycleThemeMode = () => {\n const current = themeMode()\n const next: ThemeMode = current === \"system\" ? \"light\" : current === \"light\" ? \"dark\" : \"system\"\n setThemeMode(next)\n }\n\n const muiTheme = createMemo(() => {\n themeRevision()\n const paletteColors = resolvePaletteColors(isDark())\n return createTheme({\n palette: {\n mode: isDark() ? \"dark\" : \"light\",\n primary: {\n main: paletteColors.primary,\n contrastText: paletteColors.primaryContrast,\n },\n secondary: {\n main: paletteColors.primary,\n },\n background: {\n default: paletteColors.backgroundDefault,\n paper: paletteColors.backgroundPaper,\n },\n text: {\n primary: paletteColors.textPrimary,\n secondary: paletteColors.textSecondary,\n },\n divider: paletteColors.divider,\n },\n typography: {\n fontFamily: \"var(--font-family-sans)\",\n },\n shape: {\n borderRadius: 0,\n },\n components: {\n MuiIconButton: {\n styleOverrides: {\n root: {\n color: \"inherit\",\n borderRadius: 0,\n padding: \"6px\",\n \"&.Mui-disabled\": {\n color: \"var(--text-muted)\",\n opacity: 0.55,\n },\n },\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n backgroundColor: \"var(--surface-secondary)\",\n color: \"var(--text-primary)\",\n },\n },\n },\n MuiAppBar: {\n styleOverrides: {\n root: {\n backgroundColor: \"var(--surface-secondary)\",\n color: \"var(--text-primary)\",\n boxShadow: \"none\",\n borderBottom: \"1px solid var(--border-base)\",\n zIndex: 10,\n },\n },\n },\n MuiToolbar: {\n styleOverrides: {\n root: {\n minHeight: \"40px\",\n },\n },\n },\n } as any,\n })\n })\n\n return (\n <ThemeContext.Provider value={{ isDark, themeMode, setThemeMode, cycleThemeMode, colorScheme, setColorScheme }}>\n <MuiThemeProvider theme={muiTheme()}>\n <CssBaseline />\n {props.children}\n </MuiThemeProvider>\n </ThemeContext.Provider>\n )\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext)\n if (!context) {\n throw new Error(\"useTheme must be used within ThemeProvider\")\n }\n return context\n}\n","const HUNK_PATTERN = /(^|\\n)@@/m\nconst FILE_MARKER_PATTERN = /(^|\\n)(diff --git |--- |\\+\\+\\+)/\nconst BEGIN_PATCH_PATTERN = /^\\*\\*\\* (Begin|End) Patch/\nconst UPDATE_FILE_PATTERN = /^\\*\\*\\* Update File: (.+)$/\nconst HUNK_HEADER_PATTERN = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/\n\nfunction stripCodeFence(value: string): string {\n const trimmed = value.trim()\n if (!trimmed.startsWith(\"```\")) return trimmed\n const lines = trimmed.split(\"\\n\")\n if (lines.length < 2) return \"\"\n const lastLine = lines[lines.length - 1]\n if (!lastLine.startsWith(\"```\")) return trimmed\n return lines.slice(1, -1).join(\"\\n\")\n}\n\nexport function normalizeDiffText(raw: string): string {\n if (!raw) return \"\"\n const withoutFence = stripCodeFence(raw.replace(/\\r\\n/g, \"\\n\"))\n const lines = withoutFence.split(\"\\n\").map((line) => line.replace(/\\s+$/u, \"\"))\n\n let pendingFilePath: string | null = null\n const cleanedLines: string[] = []\n\n for (const line of lines) {\n if (!line) continue\n if (BEGIN_PATCH_PATTERN.test(line)) {\n continue\n }\n const updateMatch = line.match(UPDATE_FILE_PATTERN)\n if (updateMatch) {\n pendingFilePath = updateMatch[1]?.trim() || null\n continue\n }\n cleanedLines.push(line)\n }\n\n if (pendingFilePath && !FILE_MARKER_PATTERN.test(cleanedLines.join(\"\\n\"))) {\n cleanedLines.unshift(`+++ b/${pendingFilePath}`)\n cleanedLines.unshift(`--- a/${pendingFilePath}`)\n }\n\n return cleanedLines.join(\"\\n\").trim()\n}\n\nexport function isRenderableDiffText(raw?: string | null): raw is string {\n if (!raw) return false\n const normalized = normalizeDiffText(raw)\n if (!normalized) return false\n return HUNK_PATTERN.test(normalized)\n}\n\nexport function parsePatchToBeforeAfter(patch: string): { before: string; after: string } {\n if (!patch || patch.trim().length === 0) {\n return { before: \"\", after: \"\" }\n }\n\n const lines = patch.replace(/\\r\\n/g, \"\\n\").split(\"\\n\")\n const beforeLines: string[] = []\n const afterLines: string[] = []\n\n for (const line of lines) {\n if (line.startsWith(\"---\") || line.startsWith(\"+++\") || line.startsWith(\"diff --git\")) {\n continue\n }\n if (HUNK_HEADER_PATTERN.test(line)) {\n continue\n }\n if (line.startsWith(\"-\") && !line.startsWith(\"---\")) {\n beforeLines.push(line.slice(1))\n } else if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) {\n afterLines.push(line.slice(1))\n } else if (line.startsWith(\" \")) {\n beforeLines.push(line.slice(1))\n afterLines.push(line.slice(1))\n } else if (line === \"\") {\n beforeLines.push(\"\")\n afterLines.push(\"\")\n } else {\n beforeLines.push(line)\n afterLines.push(line)\n }\n }\n\n while (beforeLines.length > 0 && beforeLines[beforeLines.length - 1] === \"\") {\n beforeLines.pop()\n }\n while (afterLines.length > 0 && afterLines[afterLines.length - 1] === \"\") {\n afterLines.pop()\n }\n\n return {\n before: beforeLines.join(\"\\n\"),\n after: afterLines.join(\"\\n\"),\n }\n}\n","type RequireFn = (deps: string[], callback: (...args: any[]) => void, errback?: (err: any) => void) => void\ntype MonacoApi = any\n\nconst MONACO_VERSION = \"0.52.2\"\nconst CDN_VS_ROOT = `https://cdn.jsdelivr.net/npm/monaco-editor@${MONACO_VERSION}/min/vs`\nconst LOCAL_VS_ROOT = \"/monaco/vs\"\n\nlet monacoPromise: Promise<MonacoApi> | null = null\n\nfunction withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n return new Promise((resolve, reject) => {\n const id = setTimeout(() => reject(new Error(\"timeout\")), ms)\n promise\n .then((value) => {\n clearTimeout(id)\n resolve(value)\n })\n .catch((err) => {\n clearTimeout(id)\n reject(err)\n })\n })\n}\n\nasync function canReachCdn(): Promise<boolean> {\n if (typeof fetch === \"undefined\") return false\n try {\n const controller = new AbortController()\n const task = fetch(`${CDN_VS_ROOT}/loader.js`, { method: \"HEAD\", signal: controller.signal })\n const response = await withTimeout(task, 1200)\n controller.abort()\n return response.ok\n } catch {\n return false\n }\n}\n\nfunction ensureLoaderScript(): Promise<void> {\n if (typeof document === \"undefined\") return Promise.resolve()\n const existing = document.querySelector('script[data-monaco-loader=\"true\"]')\n if (existing) return Promise.resolve()\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\")\n script.dataset.monacoLoader = \"true\"\n script.src = `${LOCAL_VS_ROOT}/loader.js`\n script.async = true\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Monaco AMD loader\"))\n document.head.appendChild(script)\n })\n}\n\nfunction ensureEditorCss(): void {\n if (typeof document === \"undefined\") return\n const existing = document.querySelector('link[data-monaco-editor-css=\"true\"]')\n if (existing) return\n\n // Some environments don't reliably load `vs/css!` plugin resources.\n // Loading the core stylesheet explicitly keeps Monaco visible.\n const link = document.createElement(\"link\")\n link.rel = \"stylesheet\"\n link.href = `${LOCAL_VS_ROOT}/editor/editor.main.css`\n ;(link as any).dataset.monacoEditorCss = \"true\"\n document.head.appendChild(link)\n}\n\nfunction configureWorkers() {\n const globalAny = globalThis as any\n const prevEnv = globalAny.MonacoEnvironment ?? {}\n\n // Monaco's AMD build no longer ships `editor.worker.js` (and language workers are\n // `jsonWorker.js`, `cssWorker.js`, etc). The robust approach is to always boot\n // `vs/base/worker/workerMain.js` and let it `require(...)` the requested module.\n //\n // Important: `workerMain.js` expects `MonacoEnvironment.baseUrl` to be the\n // directory containing the `vs/` folder (so `/monaco/`, not `/monaco/vs`).\n // Use a static worker bootstrap script rather than a `data:` URL.\n // This avoids CSP issues and makes worker requests visible in DevTools.\n const workerUrl = \"/monaco.worker.js\"\n\n globalAny.MonacoEnvironment = {\n ...prevEnv,\n getWorkerUrl(_moduleId: string, _label: string) {\n return workerUrl\n },\n }\n}\n\nfunction getRequire(): RequireFn {\n const req = (globalThis as any).require as RequireFn | undefined\n if (!req) throw new Error(\"Monaco AMD loader is not available\")\n return req\n}\n\nfunction getRequireConfig(): ((config: any) => void) {\n const req = getRequire() as any\n const cfg = req.config as ((config: any) => void) | undefined\n if (!cfg) throw new Error(\"require.config is not available\")\n return cfg\n}\n\nfunction requireAsync(deps: string[]): Promise<any[]> {\n const req = getRequire()\n return new Promise((resolve, reject) => {\n req(deps, (...args: any[]) => resolve(args), (err: any) => reject(err))\n })\n}\n\nfunction getContributionModuleId(languageId: string): string | null {\n const id = String(languageId || \"plaintext\")\n if (!id || id === \"plaintext\") return null\n\n // Rich contributions\n if (id === \"typescript\" || id === \"javascript\") return \"vs/language/typescript/monaco.contribution\"\n if (id === \"json\") return \"vs/language/json/monaco.contribution\"\n if (id === \"css\" || id === \"scss\" || id === \"less\") return \"vs/language/css/monaco.contribution\"\n if (id === \"html\") return \"vs/language/html/monaco.contribution\"\n\n // Basic tokenizers\n // Monaco's `min/vs/basic-languages/<id>/` ships `<id>.js` (no `*.contribution.js`).\n // Loading the tokenizer module is enough; it registers itself with the language service.\n if (id === \"toml\") return \"vs/basic-languages/toml/toml\"\n return `vs/basic-languages/${id}/${id}`\n}\n\nconst loadedContributions = new Set<string>()\nconst pendingContributions = new Map<string, Promise<void>>()\n\nexport async function ensureMonacoLanguageLoaded(languageId: string): Promise<void> {\n const moduleId = getContributionModuleId(languageId)\n if (!moduleId) return\n\n if (loadedContributions.has(moduleId)) return\n const pending = pendingContributions.get(moduleId)\n if (pending) return pending\n\n const task = (async () => {\n let loaded = false\n try {\n await requireAsync([moduleId])\n loaded = true\n } catch {\n // ignore\n } finally {\n if (loaded) loadedContributions.add(moduleId)\n pendingContributions.delete(moduleId)\n }\n })()\n\n pendingContributions.set(moduleId, task)\n return task\n}\n\nexport async function loadMonaco(): Promise<MonacoApi> {\n if (monacoPromise) return monacoPromise\n\n monacoPromise = (async () => {\n await ensureLoaderScript()\n configureWorkers()\n ensureEditorCss()\n\n const online = await canReachCdn()\n const requireConfig = getRequireConfig()\n\n const paths: Record<string, string> = {\n vs: LOCAL_VS_ROOT,\n }\n\n if (online) {\n paths[\"vs/basic-languages\"] = `${CDN_VS_ROOT}/basic-languages`\n paths[\"vs/language\"] = `${CDN_VS_ROOT}/language`\n\n // Baseline languages should remain available offline too.\n paths[\"vs/basic-languages/python\"] = `${LOCAL_VS_ROOT}/basic-languages/python`\n paths[\"vs/basic-languages/markdown\"] = `${LOCAL_VS_ROOT}/basic-languages/markdown`\n paths[\"vs/basic-languages/cpp\"] = `${LOCAL_VS_ROOT}/basic-languages/cpp`\n paths[\"vs/basic-languages/kotlin\"] = `${LOCAL_VS_ROOT}/basic-languages/kotlin`\n\n paths[\"vs/language/typescript\"] = `${LOCAL_VS_ROOT}/language/typescript`\n paths[\"vs/language/html\"] = `${LOCAL_VS_ROOT}/language/html`\n paths[\"vs/language/json\"] = `${LOCAL_VS_ROOT}/language/json`\n paths[\"vs/language/css\"] = `${LOCAL_VS_ROOT}/language/css`\n }\n\n requireConfig({\n paths,\n ignoreDuplicateModules: [\"vs/editor/editor.main\"],\n })\n\n // Load editor core.\n const [monaco] = await requireAsync([\"vs/editor/editor.main\"])\n\n // Load language metadata so we can infer language IDs from paths.\n // (This is small and should remain local for offline support.)\n // Note: In Monaco 0.52.x, `vs/basic-languages/monaco.contribution` is bundled\n // into `vs/editor/editor.main` already. Older builds had additional\n // `vs/basic-languages/_.contribution` metadata, but that module isn't present\n // in the current AMD bundle; attempting to load it can trigger a hard\n // `Unexpected token '<'` if the server falls back to `index.html`.\n await requireAsync([\"vs/basic-languages/monaco.contribution\"]).catch(() => [])\n\n return (globalThis as any).monaco ?? monaco\n })()\n\n return monacoPromise\n}\n","type MonacoApi = any\n\ntype CachedModel = {\n model: any\n}\n\nconst MAX_MODELS = 5\n\n// LRU map: newest at the end.\nconst models = new Map<string, CachedModel>()\n\nfunction touch(key: string, entry: CachedModel) {\n models.delete(key)\n models.set(key, entry)\n}\n\nfunction evictIfNeeded() {\n while (models.size > MAX_MODELS) {\n const oldestKey = models.keys().next().value as string | undefined\n if (!oldestKey) return\n const entry = models.get(oldestKey)\n models.delete(oldestKey)\n try {\n entry?.model.dispose()\n } catch {\n // ignore\n }\n }\n}\n\nexport function getOrCreateTextModel(params: {\n monaco: MonacoApi\n cacheKey: string\n value: string\n languageId: string\n}): any {\n const existing = models.get(params.cacheKey)\n if (existing) {\n touch(params.cacheKey, existing)\n if (existing.model.getValue() !== params.value) {\n existing.model.setValue(params.value)\n }\n return existing.model\n }\n\n const uri = params.monaco.Uri.parse(`opencode://model/${encodeURIComponent(params.cacheKey)}`)\n // Create as plaintext. We'll set the final language after its contribution is loaded.\n const model = params.monaco.editor.createModel(params.value, \"plaintext\", uri)\n const entry = { model }\n models.set(params.cacheKey, entry)\n evictIfNeeded()\n return model\n}\n","type MonacoApi = any\n\nlet cachedLanguageMaps:\n | {\n fileNameToId: Map<string, string>\n extToId: Map<string, string>\n }\n | null = null\n\nfunction buildLanguageMaps(monaco: MonacoApi) {\n if (cachedLanguageMaps) return cachedLanguageMaps\n\n const fileNameToId = new Map<string, string>()\n const extToId = new Map<string, string>()\n\n const languages = typeof monaco?.languages?.getLanguages === \"function\" ? monaco.languages.getLanguages() : []\n if (Array.isArray(languages)) {\n for (const lang of languages) {\n const id = typeof lang?.id === \"string\" ? lang.id : null\n if (!id) continue\n\n const filenames = Array.isArray(lang?.filenames) ? lang.filenames : []\n for (const name of filenames) {\n if (typeof name !== \"string\") continue\n if (!fileNameToId.has(name)) fileNameToId.set(name, id)\n }\n\n const extensions = Array.isArray(lang?.extensions) ? lang.extensions : []\n for (const ext of extensions) {\n if (typeof ext !== \"string\") continue\n // Monaco uses leading dots for extensions (e.g. \".ts\").\n if (!extToId.has(ext)) extToId.set(ext, id)\n }\n }\n }\n\n cachedLanguageMaps = { fileNameToId, extToId }\n return cachedLanguageMaps\n}\n\nfunction overrideLanguageId(fileName: string): string | null {\n // Git-style ignore/config files: treat as shell-like.\n if (fileName === \".gitignore\" || fileName === \".gitattributes\" || fileName === \".gitmodules\") return \"shell\"\n\n // Monaco doesn't ship a dedicated Makefile tokenizer in our baseline.\n if (fileName === \"Makefile\" || fileName.startsWith(\"Makefile.\")) return \"shell\"\n\n return null\n}\n\nexport function inferMonacoLanguageId(monaco: MonacoApi, path: string | undefined | null): string {\n const raw = String(path || \"\").trim()\n const fileName = raw.split(\"/\").pop() || raw\n\n const override = overrideLanguageId(fileName)\n if (override) return override\n\n const maps = buildLanguageMaps(monaco)\n const byName = maps.fileNameToId.get(fileName)\n if (byName) return byName\n\n const dot = fileName.lastIndexOf(\".\")\n if (dot > 0) {\n const ext = fileName.slice(dot)\n const byExt = maps.extToId.get(ext)\n if (byExt) return byExt\n }\n\n return \"plaintext\"\n}\n","import { createEffect, createSignal, onCleanup, onMount } from \"solid-js\"\nimport { loadMonaco } from \"../../lib/monaco/setup\"\nimport { getOrCreateTextModel } from \"../../lib/monaco/model-cache\"\nimport { inferMonacoLanguageId } from \"../../lib/monaco/language\"\nimport { ensureMonacoLanguageLoaded } from \"../../lib/monaco/setup\"\nimport { useTheme } from \"../../lib/theme\"\n\ninterface MonacoFileViewerProps {\n scopeKey: string\n path: string\n content: string\n wordWrap?: \"on\" | \"off\"\n compactGutter?: boolean\n onSave?: (content: string) => void\n onContentChange?: (content: string) => void\n}\n\nexport function MonacoFileViewer(props: MonacoFileViewerProps) {\n const { isDark } = useTheme()\n let host: HTMLDivElement | undefined\n\n let editor: any = null\n let monaco: any = null\n const [ready, setReady] = createSignal(false)\n\n const disposeEditor = () => {\n try {\n editor?.setModel(null)\n } catch {\n // ignore\n }\n try {\n editor?.dispose()\n } catch {\n // ignore\n }\n editor = null\n }\n\n const saveContent = () => {\n if (!editor || !props.onSave) return\n props.onSave(editor.getValue())\n }\n\n const lineNumbersMinChars = (value: string) => {\n if (!props.compactGutter) return 5\n const lineCount = value.split(/\\r\\n|\\r|\\n/).length\n return Math.max(3, String(lineCount).length + 1)\n }\n\n onMount(() => {\n let cancelled = false\n void (async () => {\n monaco = await loadMonaco()\n if (cancelled) return\n if (!host || !monaco) return\n\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n editor = monaco.editor.create(host, {\n value: \"\",\n language: \"plaintext\",\n readOnly: false,\n automaticLayout: true,\n lineNumbers: \"on\",\n lineNumbersMinChars: lineNumbersMinChars(props.content),\n glyphMargin: false,\n folding: !props.compactGutter,\n lineDecorationsWidth: props.compactGutter ? 8 : 10,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: \"off\",\n renderWhitespace: \"selection\",\n fontSize: 13,\n })\n\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, saveContent)\n\n editor.onDidChangeModelContent(() => {\n if (props.onContentChange) {\n props.onContentChange(editor.getValue())\n }\n })\n\n setReady(true)\n })()\n\n onCleanup(() => {\n cancelled = true\n setReady(false)\n disposeEditor()\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !editor) return\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n })\n\n createEffect(() => {\n if (!ready() || !editor) return\n editor.updateOptions({ wordWrap: props.wordWrap === \"on\" ? \"on\" : \"off\" })\n })\n\n createEffect(() => {\n if (!ready() || !editor) return\n editor.updateOptions({\n lineNumbersMinChars: lineNumbersMinChars(props.content),\n folding: !props.compactGutter,\n lineDecorationsWidth: props.compactGutter ? 8 : 10,\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !editor) return\n const languageId = inferMonacoLanguageId(monaco, props.path)\n const cacheKey = `${props.scopeKey}:file:${props.path}`\n const model = getOrCreateTextModel({ monaco, cacheKey, value: props.content, languageId })\n editor.setModel(model)\n\n void ensureMonacoLanguageLoaded(languageId).then(() => {\n try {\n monaco.editor.setModelLanguage(model, languageId)\n } catch {\n // ignore\n }\n })\n })\n\n return <div class=\"monaco-viewer\" ref={host} />\n}\n","import { Show, createEffect, createMemo, createSignal, onCleanup, onMount } from \"solid-js\"\nimport { loadMonaco } from \"../../lib/monaco/setup\"\nimport { getOrCreateTextModel } from \"../../lib/monaco/model-cache\"\nimport { inferMonacoLanguageId } from \"../../lib/monaco/language\"\nimport { ensureMonacoLanguageLoaded } from \"../../lib/monaco/setup\"\nimport { useTheme } from \"../../lib/theme\"\nimport { parsePatchToBeforeAfter } from \"../../lib/diff-utils\"\n\ninterface MonacoDiffViewerProps {\n scopeKey: string\n path: string\n patch?: string\n before?: string\n after?: string\n viewMode?: \"split\" | \"unified\"\n contextMode?: \"expanded\" | \"collapsed\"\n wordWrap?: \"on\" | \"off\"\n onRequestInsertContext?: (selection: { startLine: number; endLine: number }) => void\n insertContextLabel?: string\n}\n\nfunction getLineCount(value: string): number {\n if (!value) return 1\n return value.split(\"\\n\").length\n}\n\nfunction getDigitCount(value: number): number {\n return String(Math.max(1, value)).length\n}\n\nfunction getUnifiedGutterSizing(options: { before: string; after: string }) {\n const beforeLineCount = getLineCount(options.before)\n const afterLineCount = getLineCount(options.after)\n const beforeDigitCount = getDigitCount(beforeLineCount)\n const afterDigitCount = getDigitCount(afterLineCount)\n const maxDigitCount = Math.max(beforeDigitCount, afterDigitCount)\n const extraDigits = Math.max(0, maxDigitCount - 2)\n const beforeNumberChars = Math.max(2, beforeDigitCount)\n const afterNumberChars = Math.max(2, afterDigitCount)\n const fourDigitPenalty = Math.max(0, maxDigitCount - 3)\n\n return {\n diffEditorLineNumbersMinChars: Math.max(beforeNumberChars, afterNumberChars),\n originalLineNumbersMinChars: beforeNumberChars,\n modifiedLineNumbersMinChars: afterNumberChars,\n lineDecorationsWidth: 6 + extraDigits * 2 + fourDigitPenalty * 2,\n }\n}\n\nfunction getSplitGutterSizing(options: { before: string; after: string }) {\n const beforeLineCount = getLineCount(options.before)\n const afterLineCount = getLineCount(options.after)\n const beforeDigitCount = getDigitCount(beforeLineCount)\n const afterDigitCount = getDigitCount(afterLineCount)\n const maxDigitCount = Math.max(beforeDigitCount, afterDigitCount)\n const extraDigits = Math.max(0, maxDigitCount - 2)\n const beforeNumberChars = Math.max(2, beforeDigitCount)\n const afterNumberChars = Math.max(2, afterDigitCount)\n const fourDigitPenalty = Math.max(0, maxDigitCount - 3)\n\n return {\n diffEditorLineNumbersMinChars: Math.max(beforeNumberChars, afterNumberChars),\n originalLineNumbersMinChars: beforeNumberChars,\n modifiedLineNumbersMinChars: afterNumberChars,\n lineDecorationsWidth: 8 + extraDigits * 2 + fourDigitPenalty,\n }\n}\n\nexport function MonacoDiffViewer(props: MonacoDiffViewerProps) {\n const { isDark } = useTheme()\n let host: HTMLDivElement | undefined\n\n let diffEditor: any = null\n let monaco: any = null\n let splitLayoutFrame: number | null = null\n const [ready, setReady] = createSignal(false)\n const [hoveredLine, setHoveredLine] = createSignal<number | null>(null)\n const [selectedRange, setSelectedRange] = createSignal<{ startLine: number; endLine: number } | null>(null)\n const [widgetHovered, setWidgetHovered] = createSignal(false)\n const [widgetPosition, setWidgetPosition] = createSignal<{ top: number; left: number } | null>(null)\n\n const resolvedContent = createMemo(() => {\n if (props.patch !== undefined && props.patch !== null) {\n return parsePatchToBeforeAfter(props.patch)\n }\n return {\n before: props.before ?? \"\",\n after: props.after ?? \"\",\n }\n })\n\n const disposeEditor = () => {\n try {\n diffEditor?.setModel(null as any)\n } catch {\n // ignore\n }\n try {\n diffEditor?.dispose()\n } catch {\n // ignore\n }\n diffEditor = null\n }\n\n const clearSplitLayoutVariables = () => {\n if (!host) return\n host.style.removeProperty(\"--split-original-line-number-width\")\n host.style.removeProperty(\"--split-original-delete-sign-left\")\n host.style.removeProperty(\"--split-original-gutter-width\")\n }\n\n const syncSplitLayoutVariables = (options: {\n viewMode: \"split\" | \"unified\"\n originalLineNumbersMinChars: number\n lineDecorationsWidth: number\n }) => {\n if (!host) return\n if (splitLayoutFrame !== null && typeof window !== \"undefined\") {\n window.cancelAnimationFrame(splitLayoutFrame)\n splitLayoutFrame = null\n }\n if (options.viewMode !== \"split\" || typeof window === \"undefined\") {\n clearSplitLayoutVariables()\n return\n }\n\n splitLayoutFrame = window.requestAnimationFrame(() => {\n splitLayoutFrame = null\n if (!host) return\n const originalLineNumbers = host.querySelector<HTMLElement>(\".editor.original .line-numbers\")\n const measuredWidth = originalLineNumbers?.getBoundingClientRect().width ?? 0\n const lineNumberWidth =\n measuredWidth > 0 ? measuredWidth : Math.max(12, options.originalLineNumbersMinChars * 6)\n host.style.setProperty(\"--split-original-line-number-width\", `${lineNumberWidth}px`)\n host.style.setProperty(\"--split-original-delete-sign-left\", `${lineNumberWidth}px`)\n host.style.setProperty(\n \"--split-original-gutter-width\",\n `${lineNumberWidth + options.lineDecorationsWidth}px`,\n )\n })\n }\n\n const getModifiedEditor = () => diffEditor?.getModifiedEditor?.() ?? null\n\n const getActiveInsertRange = () => {\n const selection = selectedRange()\n if (selection) return selection\n if (widgetHovered() && hoveredLine()) {\n return { startLine: hoveredLine() as number, endLine: hoveredLine() as number }\n }\n const line = hoveredLine()\n if (!line) return null\n return { startLine: line, endLine: line }\n }\n\n const layoutInsertWidget = () => {\n const modifiedEditor = getModifiedEditor()\n const container = host\n if (!modifiedEditor || !container) return\n const activeRange = getActiveInsertRange()\n if (!activeRange) {\n setWidgetPosition(null)\n return\n }\n\n try {\n const modifiedDom = modifiedEditor.getDomNode?.() as HTMLElement | null\n if (!modifiedDom) {\n setWidgetPosition(null)\n return\n }\n\n const margin = modifiedDom.querySelector<HTMLElement>(\".margin\")\n const scrollable = modifiedDom.querySelector<HTMLElement>(\".monaco-scrollable-element.editor-scrollable\")\n const lineTop = modifiedEditor.getTopForLineNumber?.(activeRange.startLine) ?? 0\n const scrollTop = modifiedEditor.getScrollTop?.() ?? 0\n const lineHeight = Number(modifiedEditor.getOption?.(monaco.editor.EditorOption.lineHeight) ?? 18)\n const modifiedRect = modifiedDom.getBoundingClientRect()\n const containerRect = container.getBoundingClientRect()\n const seamLeft = modifiedRect.left - containerRect.left + (margin?.offsetWidth ?? scrollable?.offsetLeft ?? 0)\n const centerTop = modifiedRect.top - containerRect.top + (lineTop - scrollTop) + lineHeight / 2\n\n setWidgetPosition({ top: centerTop, left: seamLeft })\n } catch {\n setWidgetPosition(null)\n }\n }\n\n onMount(() => {\n let cancelled = false\n void (async () => {\n monaco = await loadMonaco()\n if (cancelled) return\n if (!host || !monaco) return\n\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n diffEditor = monaco.editor.createDiffEditor(host, {\n readOnly: true,\n automaticLayout: true,\n renderSideBySide: true,\n renderSideBySideInlineBreakpoint: 0,\n renderMarginRevertIcon: false,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n renderWhitespace: \"selection\",\n fontSize: 13,\n wordWrap: props.wordWrap === \"on\" ? \"on\" : \"off\",\n glyphMargin: false,\n folding: false,\n // Keep enough gutter space so unified diffs don't overlap `+`/`-` markers.\n lineNumbersMinChars: 4,\n lineDecorationsWidth: 12,\n // Use legacy diff algorithm for better performance with large files\n // See: https://github.com/microsoft/vscode/issues/184037\n diffAlgorithm: \"legacy\",\n // Limit computation time to avoid freezing on large files\n maxComputationTime: 10000,\n })\n\n setReady(true)\n\n layoutInsertWidget()\n })()\n\n onCleanup(() => {\n cancelled = true\n if (splitLayoutFrame !== null && typeof window !== \"undefined\") {\n window.cancelAnimationFrame(splitLayoutFrame)\n splitLayoutFrame = null\n }\n clearSplitLayoutVariables()\n setReady(false)\n disposeEditor()\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n monaco.editor.setTheme(isDark() ? \"vs-dark\" : \"vs\")\n })\n\n createEffect(() => {\n if (!host) return\n host.dataset.viewMode = props.viewMode === \"split\" ? \"split\" : \"unified\"\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const modifiedEditor = diffEditor.getModifiedEditor?.()\n if (!modifiedEditor?.onDidChangeCursorSelection) return\n\n const disposable = modifiedEditor.onDidChangeCursorSelection((event: any) => {\n const selection = event?.selection\n if (!selection || selection.isEmpty?.()) {\n setSelectedRange(null)\n layoutInsertWidget()\n return\n }\n setSelectedRange({\n startLine: Math.min(selection.startLineNumber, selection.endLineNumber),\n endLine: Math.max(selection.startLineNumber, selection.endLineNumber),\n })\n layoutInsertWidget()\n })\n\n onCleanup(() => {\n try {\n disposable?.dispose?.()\n } catch {\n // ignore\n }\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const modifiedEditor = getModifiedEditor()\n if (!modifiedEditor?.onMouseMove || !modifiedEditor?.onMouseLeave || !modifiedEditor?.onMouseDown) return\n\n const moveDisposable = modifiedEditor.onMouseMove((event: any) => {\n const lineNumber = event?.target?.position?.lineNumber\n setHoveredLine(typeof lineNumber === \"number\" ? lineNumber : null)\n layoutInsertWidget()\n })\n\n const leaveDisposable = modifiedEditor.onMouseLeave(() => {\n if (!widgetHovered()) {\n setHoveredLine(null)\n }\n layoutInsertWidget()\n })\n\n const scrollDisposable = modifiedEditor.onDidScrollChange?.(() => {\n layoutInsertWidget()\n })\n\n onCleanup(() => {\n try {\n moveDisposable?.dispose?.()\n leaveDisposable?.dispose?.()\n scrollDisposable?.dispose?.()\n } catch {\n // ignore\n }\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const activeRange = getActiveInsertRange()\n if (!activeRange) setWidgetPosition(null)\n layoutInsertWidget()\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const viewMode = props.viewMode === \"unified\" ? \"unified\" : \"split\"\n const contextMode = props.contextMode === \"collapsed\" ? \"collapsed\" : \"expanded\"\n const wordWrap = props.wordWrap === \"on\" ? \"on\" : \"off\"\n const { before, after } = resolvedContent()\n const sizing =\n viewMode === \"unified\"\n ? getUnifiedGutterSizing({ before, after })\n : getSplitGutterSizing({ before, after })\n const {\n diffEditorLineNumbersMinChars,\n originalLineNumbersMinChars,\n modifiedLineNumbersMinChars,\n lineDecorationsWidth,\n } = sizing\n diffEditor.updateOptions({\n renderSideBySide: viewMode === \"split\",\n renderSideBySideInlineBreakpoint: 0,\n renderIndicators: true,\n lineNumbersMinChars: diffEditorLineNumbersMinChars,\n lineDecorationsWidth,\n hideUnchangedRegions:\n contextMode === \"collapsed\"\n ? { enabled: true }\n : { enabled: false },\n wordWrap,\n })\n\n try {\n diffEditor.getOriginalEditor?.()?.updateOptions?.({\n wordWrap,\n lineNumbersMinChars: originalLineNumbersMinChars,\n lineDecorationsWidth,\n })\n } catch {\n // ignore\n }\n\n try {\n diffEditor.getModifiedEditor?.()?.updateOptions?.({\n wordWrap,\n lineNumbersMinChars: modifiedLineNumbersMinChars,\n lineDecorationsWidth,\n })\n } catch {\n // ignore\n }\n\n syncSplitLayoutVariables({\n viewMode,\n originalLineNumbersMinChars,\n lineDecorationsWidth,\n })\n })\n\n createEffect(() => {\n if (!ready() || !monaco || !diffEditor) return\n const languageId = inferMonacoLanguageId(monaco, props.path)\n const { before, after } = resolvedContent()\n const beforeKey = `${props.scopeKey}:diff:${props.path}:before`\n const afterKey = `${props.scopeKey}:diff:${props.path}:after`\n\n const original = getOrCreateTextModel({ monaco, cacheKey: beforeKey, value: before, languageId })\n const modified = getOrCreateTextModel({ monaco, cacheKey: afterKey, value: after, languageId })\n diffEditor.setModel({ original, modified })\n\n void ensureMonacoLanguageLoaded(languageId).then(() => {\n try {\n monaco.editor.setModelLanguage(original, languageId)\n monaco.editor.setModelLanguage(modified, languageId)\n } catch {\n // ignore\n }\n })\n })\n\n return (\n <div class=\"monaco-viewer\" ref={host}>\n <div class=\"git-change-context-overlay\">\n <Show when={widgetPosition()}>\n {(position: () => { top: number; left: number }) => (\n <div\n class=\"git-change-context-widget-host\"\n style={{ top: `${position().top}px`, left: `${position().left}px` }}\n onMouseEnter={() => {\n setWidgetHovered(true)\n layoutInsertWidget()\n }}\n onMouseLeave={() => {\n setWidgetHovered(false)\n layoutInsertWidget()\n }}\n >\n <button\n type=\"button\"\n class=\"git-change-context-widget\"\n aria-label={props.insertContextLabel ?? \"Add git change context to prompt\"}\n title={props.insertContextLabel ?? \"Add git change context to prompt\"}\n onMouseDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n const activeRange = getActiveInsertRange()\n if (!activeRange) return\n props.onRequestInsertContext?.(activeRange)\n }}\n >\n +\n </button>\n </div>\n )}\n </Show>\n </div>\n </div>\n )\n}\n"],"names":["booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","a","DelegatedEvents","SVGElements","SVGNamespace","memo","fn","createMemo","reconcileArrays","parentNode","b","bLength","aEnd","bEnd","aStart","bStart","after","map","node","i","index","sequence","t","$$EVENTS","render","code","element","init","options","disposer","createRoot","dispose","insert","template","html","isImportNode","isSVG","isMathML","create","untrack","delegateEvents","eventNames","document","e","l","name","eventHandler","setAttribute","value","isHydrating","setAttributeNS","namespace","setBoolAttribute","className","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","len","key","toggleClassKey","classValue","style","nodeStyle","v","setStyleProperty","spread","props","skipChildren","prevProps","createRenderEffect","insertExpression","use","assign","arg","parent","accessor","marker","initial","current","skipRef","assignProp","getNextElement","sharedConfig","getHydrationKey","toPropertyName","_","w","classNames","nameLen","isCE","isProp","isChildProp","propAlias","forceProp","h","ns","el","ev","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","unwrapArray","hydrating","cleaned","multi","cleanChildren","array","currentArray","normalizeIncomingArray","nodes","appendNodes","normalized","unwrap","dynamic","item","replacement","inserted","isParent","SVG_NAMESPACE","createElement","is","Portal","useShadow","mount","owner","getOwner","content","createEffect","runWithOwner","clean","setClean","createSignal","cleanup","onCleanup","container","renderRoot","createDynamic","component","cached","isSvg","Dynamic","others","splitProps","$RAW","$NODE","$HAS","$SELF","wrap$1","p","$PROXY","proxyTraps$1","keys","desc","isWrappable","obj","proto","set","result","unwrapped","getNodes","target","symbol","getNode","property","s","proxyDescriptor$1","trackSelf","getListener","ownKeys","receiver","$TRACK","tracked","setProperty","state","deleting","mergeStoreNode","updateArray","next","updatePath","traversed","part","partType","isArray","from","to","by","createStore","store","unwrappedStore","wrappedStore","setStore","args","batch","proxyDescriptor","proxyTraps","isFunction","wrap","isClass","curProto","descriptors","get","og","createMutable","$ROOT","applyState","merge","previous","j","start","end","newEnd","newIndicesNext","keyVal","temp","newIndices","targetKeys","previousKeys","reconcile","res","producers","setterTraps","proxy","produce","CLIENT_ID_STORAGE_KEY","CONNECTION_ID_STORAGE_KEY","cachedClientId","cachedConnectionId","getClientIdentity","getOrCreateClientId","getOrCreateConnectionId","getOrCreateStoredValue","nativeWindowId","_a","storage","generateUUID","existing","char","random","m","d","y","ms","val","type","parse","fmtLong","fmtShort","str","match","n","msAbs","plural","isPlural","setup","env","createDebug","coerce","disable","enable","enabled","require$$0","destroy","selectColor","hash","prevTime","enableOverride","namespacesCache","enabledCache","debug","self","curr","format","formatter","extend","delimiter","newDebug","namespaces","split","matchesTemplate","search","searchIndex","templateIndex","starIndex","matchIndex","skip","common","exports","formatArgs","save","load","useColors","localstorage","warned","module","c","lastC","r","define_process_env_default","formatters","error","KNOWN_NAMESPACES","STORAGE_KEY","namespaceLoggers","enabledNamespaces","rawConsole","applyEnabledNamespaces","persistEnabledNamespaces","hydrateNamespacesFromStorage","stored","parsed","buildLogger","baseLogger","formatAndLog","level","getLogger","listLoggerNamespaces","enableLogger","disableLogger","disableAllLoggers","enableAllLoggers","loggerControls","exposeLoggerControls","attachEventSourceHandlers","source","disconnected","event","payload","handleDisconnect","reason","RUNTIME_BASE","DEFAULT_BASE","DEFAULT_EVENTS_PATH","API_BASE","__vite_import_meta_env__","EVENTS_URL","buildEventsUrl","CODENOMAD_API_BASE","base","httpLogger","sseLogger","normalizeHeaders","headers","output","logHttp","message","context","readErrorMessage","response","text","request","url","method","startedAt","duration","requestRaw","serverApi","providerId","modelId","params","query","id","slug","suffix","requestId","token","contents","body","password","relativePath","opts","trimmed","requestPayload","patch","signal","parentPath","instanceId","sessionId","onEvent","onError","onPing","identity","buildClientEventsUrl","connectWorkspaceEvents","callbacks","notifyDisconnected","_b","retryWithBackoff","maxAttempts","initialDelayMs","maxDelayMs","backoffMultiplier","timeoutMs","shouldRetry","wait","delayMs","resolve","lastError","attempt","controller","timer","err","isRetryableError","RETRY_BASE_DELAY","RETRY_MAX_DELAY","log","logSse","ServerEvents","generation","connection","events","status","pongPayload","solidBatch","bucket","serverEvents","DEFAULT_INSTANCE_DATA","isDeepEqual","ServerStorage","promise","updated","listener","kind","cache","listeners","write","messageHistory","agentModelSelections","instanceDataMap","setInstanceDataMap","Map","loadPromises","instanceSubscriptions","cloneInstanceData","Array","attachSubscription","has","unsubscribe","onInstanceDataChanged","setInstanceData","detachSubscription","delete","ensureInstanceConfig","loadInstanceData","then","catch","warn","finally","updateInstanceConfig","mutator","draft","saveInstanceData","getInstanceConfig","clearInstanceConfig","InstanceConfigContext","createContext","contextValue","InstanceConfigProvider","values","clear","_$createComponent","Provider","children","normalizeCapabilities","speechCapabilities","setSpeechCapabilities","speechCapabilitiesLoading","setSpeechCapabilitiesLoading","speechCapabilitiesError","setSpeechCapabilitiesError","serverSupportsSeparateProviders","setServerSupportsSeparateProviders","speechCapabilitiesPromise","loadSpeechCapabilities","force","resetSpeechCapabilities","buildSpeechPatch","updates","_c","_d","dir","dirUpdate","dirPatch","_e","_f","COLOR_SCHEME_IDS","COLOR_KEYS","LEGACY_COLOR_KEYS","DEFAULT_SEMANTIC_COLORS","DEFAULT_CUSTOM_COLORS","LIGHT_COLOR_SCHEME_COLORS","BUILT_IN_COLOR_SCHEMES","SCHEMES_BY_ID","scheme","isRecord","isCanonicalHexColor","isColorSchemeColors","normalizeColors","copyColors","colors","selectionFor","appearance","definition","normalizeColorScheme","legacyTheme","schemeId","channel","color","offset","luminance","linear","contrastRatio","first","second","bright","dark","validateColorSchemeColors","textPairs","emphasis","emphasisSurfaces","foreground","background","mix","firstWeight","alpha","opacity","textOnColor","APPLIED_PROPERTIES","derivedProperties","textOnAccent","applyColorScheme","MAX_COLOR_SCHEME_PRESETS","normalizeColorSchemePresets","presets","candidate","nextColorSchemePresetName","sourceName","existingNames","used","createColorSchemePresetId","normalizeModelVisibilityPreference","hiddenModelIds","normalizeModelVisibilityPreferences","preference","isModelVisible","resolvePickerValue","option","MAX_RECENT_FOLDERS","MAX_RECENT_MODELS","MAX_FAVORITE_MODELS","defaultToolCallExpansionDefaults","preset","defaultUiSettings","showThinkingBlocks","showKeyboardShortcutHints","thinkingBlocksExpansion","showMessageTimeline","showTimelineTools","holdLongAssistantReplies","promptSubmitOnEnter","followUpBehavior","showPromptVoiceInput","diffViewMode","toolOutputExpansion","diagnosticsExpansion","toolInputsVisibility","showUsageMetrics","showProviderUsageCreditBalance","autoCleanupBlankSessions","keepUnseenSubagentIdleStatus","osNotificationsEnabled","osNotificationsAllowWhenVisible","notifyOnNeedsInput","notifyOnIdle","normalizeExpansionPreference","fallback","normalizeVisibilityPreference","normalizeToolCallExpansionPreset","normalizeToolCallExpansionTools","tool","mode","Object","entries","normalizeToolCallExpansionDefaults","input","legacySettings","undefined","legacyThinking","thinking","tools","defaultSpeechSettings","provider","sttModel","ttsModel","ttsVoice","playbackMode","ttsFormat","normalizeUiSettings","sanitized","toolCallExpansionDefaults","usageMetricsFallback","locale","usageMetricsExpansion","focusExistingWindowOnSecondLaunch","modelVisibility","normalizeRecord","out","k","normalizeSpeechSettings","trim","apiKey","hasApiKey","length","baseUrl","separateProviders","stt","model","tts","cloneArray","mapper","mapped","push","normalizeUiState","recentFolders","f","lastAccessed","projectName","ts","Date","now","opencodeBinaries","lastUsed","version","label","remoteServers","server","createdAt","toISOString","updatedAt","lastConnectedAt","skipTlsVerify","Boolean","sort","left","localeCompare","models","recents","favorites","thinkingSelections","normalizeServerConfig","listeningMode","logLevel","opencodeBinary","environmentVariables","secureEnvVars","normalizeSecureEnvVars","speech","filter","getModelKey","buildRecentFolderList","folderPath","aliasPath","matchingPaths","Set","aliasEntry","find","folder","canonicalEntry","folders","unshift","slice","buildBinaryList","binaryPath","timestamp","updatedEntry","remaining","buildRemoteServerProfile","entry","createRandomId","buildRemoteServerList","profile","crypto","randomUUID","Math","toString","uiConfigBucket","setUiConfigBucket","serverConfigBucket","setServerConfigBucket","uiStateBucket","setUiStateBucket","isLoaded","setIsLoaded","uiSettings","settings","themePreference","theme","colorSchemePreference","colorScheme","customColorSchemePreference","config","custom","customColorScheme","colorSchemePresets","activeColorSchemePresetId","serverSettings","uiState","preferences","loadPromise","ensureLoaded","Promise","all","loadConfigOwner","loadStateOwner","uiCfg","srvCfg","uiSt","patchConfigOwner","patchStateOwner","updateUiSettings","nextSettings","fromEntries","updatePreferences","modelVisibilityWriteQueues","modelVisibilityWriteQueue","pendingModelVisibility","setPendingModelVisibility","modelVisibilityWriteFailures","setModelVisibilityWriteFailures","getProviderModelVisibilityPreference","providerModelVisibilitySaveFailed","setProviderModelVisibility","add","setThemePreference","setColorSchemePreference","colorSchemeWriteQueue","selectColorSchemePreset","saveColorSchemePreset","trimmedName","reject","Error","setListeningMode","updateEnvironmentVariables","envVars","addEnvironmentVariable","secure","secureList","upperKey","toUpperCase","exists","some","removeEnvironmentVariable","isSecureEnvVar","toggleSecureEnvVar","updateLastUsedBinary","nextList","updateLogLevel","updateSpeechSettings","addOpenCodeBinary","removeOpenCodeBinary","addRecentFolder","removeRecentFolder","renameRecentFolderProject","saveRemoteServerProfile","markRemoteServerConnected","removeRemoteServerProfile","recordWorkspaceLaunch","nextFolders","addRecentModelPreference","filtered","isFavoriteModelPreference","toggleFavoriteModelPreference","getModelThinkingSelection","setModelThinkingSelection","selections","setDiffViewMode","setToolOutputExpansion","other","setDiagnosticsExpansion","setToolInputsVisibility","setThinkingBlocksExpansion","toggleShowThinkingBlocks","toggleKeyboardShortcutHints","toggleShowTimelineTools","toggleShowMessageTimeline","toggleUsageMetrics","togglePromptSubmitOnEnter","toggleShowPromptVoiceInput","toggleAutoCleanupBlankSessions","nextValue","info","setAgentModelPreference","agent","ensureInstanceConfigLoaded","updateInstanceData","getAgentModelPreference","ConfigContext","configContextValue","ConfigProvider","onMount","unsubUi","onConfigOwnerChanged","unsubServer","unsubStateUi","onStateOwnerChanged","useConfig","useContext","clamp","min","max","hexToRgb","re","decomposeColor","valuesInput","colorSpace","recomposeColor","newValues","hslToRgb","rgb","getLuminance","getContrastRatio","lumA","lumB","darken","inputColor","coefficient","lighten","handleBreakpoints","propValue","styleFromPropValue","themeBreakpoints","acc","breakpoint","cssKey","defaultStyledEngineContextValue","cleanupStyles","StyledEngineContext","red","purple","blue","lightBlue","green","orange","grey","isPlainObject","sortKeys","object","deepmerge","sourceKeys","sourceValue","targetValue","cloneObject","sources","useLightOptions","primary","secondary","disabled","divider","paper","white","default","action","active","hover","hoverOpacity","selected","selectedOpacity","disabledBackground","disabledOpacity","focus","focusOpacity","activatedOpacity","lightColors","main","light","success","warning","useDarkOptions","darkColors","modes","getContrastText","contrastThreshold","addLightOrDark","intent","direction","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","hasOwnProperty","augmentColor","mainShade","lightShade","darkShade","contrastText","usePalleteDefaults","createPalette","colorNames","palleteDefaults","isColorName","includes","getColorObject","getColor","getDefaultColor","componentsDefault","createComponents","createMixins","breakpoints","spacing","mixins","shadowKeyUmbraOpacity","shadowKeyPenumbraOpacity","shadowAmbientShadowOpacity","createCssShadow","px","join","shadows","createShadows","Proxy","isNaN","Number","easing","easeInOut","easeOut","easeIn","sharp","shortest","shorter","short","standard","complex","enteringScreen","leavingScreen","formatMs","milliseconds","round","getAutoHeightDuration","height","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","delay","animatedProp","fontWeight","regular","medium","typographyDefaults","fontFamily","fontSize","htmlFontSize","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","button","caption","overline","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","makeVariant","size","lineHeight","letterSpacing","casing","pxToRem","textTransform","createTypography","coef","zIndexDefaults","mobileStepper","speedDial","appBar","drawer","modal","snackbar","tooltip","createZIndex","renderMediaQuery","comparator","width","units","selector","maxW","minW","breakpointsDefault","createBreakpoints","css","createSpacing","shapeDefaults","createShape","createTheme","def","defaults","inputValue","defineProperty","configurable","enumerable","components","palette","shape","typography","zIndex","makeGetDefaultTheme","defaultTheme","getDefaultTheme$1","ThemeContext","ThemeContext$2","transitions","getDefaultTheme","isEmptyObject","_key","useTheme","Context","useSysTheme","useThemeProps","propDefaults","themeProps","mergeProps","ThemeProvider","createElementNS","createStaticComponent","$DEVCOMP","web","createDynamicComponent","$component","mergeStyleProps","isVar","isPrivateVar","isSelector","isGlobalSelector","isMediaQuery","isKeyframes","snakeCase","letter","renderSelector","propKey","selectors","subselectors","snakeCaseWithCache","rules","keyframes","extraProps","extraPropKey","inValue","renderProps","pad","selectorStr","toArray","resolveFunction","StyleCache","__publicField","componentId","styleObject","componentIndex","createStyleObject","propsValues","propertyNameCache","setStyleElementText","setAttributes","attributes","createStyleElement","registerStyleElementUsage","uses","placeholderId","appendStyleElement","injectFirst","head","prevElement","placeholderElement","findStyleElement","classPrefix","unregisterStyleElementUsage","remove","capitalize","string","debounce","func","timeout","debounced","later","getScrollbarSize","doc","documentWidth","ownerDocument","ownerWindow","randomString","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesWhitelist","focusTriggersKeyboardModality","handleKeyDown","handlePointerDown","handleVisibilityChange","prepare","isFocusVisible","useIsFocusVisible","ref","isFocusVisibleRef","setFocusVisibleRef","handleBlurVisible","handleFocusVisible","styleCache","normalizeStyleProps","flat","Infinity","createStyleId","createUniqueId","replaceAll","chunkSize","chunks","ceil","ids","chunk","number","createStyle","setName","styleElement","isGlobalStyleObject","prevResult","propsValue","nonce","onProp","cssTarget","unitLess","resolveStyledPropsValue","resolveStyledProps","getThemeValue","names","getPath","createUnaryUnit","themeKey","defaultValue","propName","themeSpacing","abs","dirMap","asPx","customProp","onValue","pxProp","mProp","createSystemProps","createSystemDisplayProps","createSystemFlexboxProps","createSystemGridProps","createSystemPositionProps","createSystemPaletteProps","createSystemSizingProps","createSystemBorderProps","createSystemSpacingProps","createSystemTypographyProps","display","paletteValue","borderValue","typographyValue","systemProps","systemPropNames","resolveSystemPropsValue","resolveSxPropsValue","resolveSxProps","sortedCss","clsx","skipProps","getStyleOverrides","styleOverrides","resolveStyles","styles","inProps","ownerState","baseStyles","reduce","styledProps","sx","as","__resolved","resolvedStyleOverrides","overridesResolver","styleProp","concat","setSuidComponentType","cb","getSuidComponentType","createStyled","Component","cssClassName","slot","toLowerCase","componentType","StyledComponent","$useTheme","inTheme","onUseTheme","otherProps","inStyles","inSx","$componentType","skipSx","styleClassName","class","skipRootProps","styled","composeClasses","slots","getUtilityClass","classes","$INSPECT","InspectContext","componentTrap","createComponentFactory","useClasses","haveSlotClasses","compose","createComputed","splitInProps","allProps","useBaseThemeProps","useProps","defineComponent","$","selfPropNames","GlobalStyles","enableColorScheme","WebkitFontSmoothing","MozOsxFontSmoothing","boxSizing","WebkitTextSizeAdjust","backgroundColor","margin","CssBaseline","lightPaletteFallbacks","backgroundDefault","backgroundPaper","primaryContrast","textPrimary","textSecondary","darkPaletteFallbacks","readCssVar","rootStyle","getPropertyValue","resolvePaletteColors","fallbackSet","window","getComputedStyle","documentElement","mediaQuery","matchMedia","selectedColorScheme","setSelectedColorScheme","isDark","setIsDarkSignal","themeRevision","setThemeRevision","themeMode","latestWrite","applyResolvedTheme","systemDark","matches","requestAnimationFrame","handleSystemThemeChange","removeEventListener","setColorScheme","setThemeMode","cycleThemeMode","muiTheme","paletteColors","borderRadius","MuiIconButton","root","padding","MuiDrawer","MuiAppBar","boxShadow","borderBottom","MuiToolbar","minHeight","MuiThemeProvider","_$memo","HUNK_PATTERN","FILE_MARKER_PATTERN","BEGIN_PATCH_PATTERN","UPDATE_FILE_PATTERN","HUNK_HEADER_PATTERN","stripCodeFence","lines","normalizeDiffText","raw","line","pendingFilePath","cleanedLines","updateMatch","isRenderableDiffText","parsePatchToBeforeAfter","beforeLines","afterLines","MONACO_VERSION","CDN_VS_ROOT","LOCAL_VS_ROOT","monacoPromise","withTimeout","canReachCdn","task","ensureLoaderScript","script","ensureEditorCss","link","configureWorkers","globalAny","prevEnv","workerUrl","_moduleId","_label","getRequire","req","getRequireConfig","cfg","requireAsync","deps","getContributionModuleId","languageId","loadedContributions","pendingContributions","ensureMonacoLanguageLoaded","moduleId","pending","loaded","loadMonaco","online","requireConfig","paths","monaco","MAX_MODELS","touch","evictIfNeeded","oldestKey","getOrCreateTextModel","uri","cachedLanguageMaps","buildLanguageMaps","fileNameToId","extToId","languages","lang","filenames","extensions","ext","overrideLanguageId","fileName","inferMonacoLanguageId","override","maps","byName","dot","byExt","MonacoFileViewer","host","editor","ready","setReady","disposeEditor","setModel","saveContent","onSave","getValue","lineNumbersMinChars","compactGutter","lineCount","String","cancelled","setTheme","language","readOnly","automaticLayout","lineNumbers","glyphMargin","folding","lineDecorationsWidth","minimap","scrollBeyondLastLine","wordWrap","renderWhitespace","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","onDidChangeModelContent","onContentChange","updateOptions","cacheKey","scopeKey","setModelLanguage","_el$","_tmpl$","_ref$","_$use","getLineCount","getDigitCount","getUnifiedGutterSizing","beforeLineCount","before","afterLineCount","beforeDigitCount","afterDigitCount","maxDigitCount","extraDigits","beforeNumberChars","afterNumberChars","fourDigitPenalty","diffEditorLineNumbersMinChars","originalLineNumbersMinChars","modifiedLineNumbersMinChars","getSplitGutterSizing","MonacoDiffViewer","diffEditor","splitLayoutFrame","hoveredLine","setHoveredLine","selectedRange","setSelectedRange","widgetHovered","setWidgetHovered","widgetPosition","setWidgetPosition","resolvedContent","clearSplitLayoutVariables","removeProperty","syncSplitLayoutVariables","cancelAnimationFrame","viewMode","originalLineNumbers","querySelector","measuredWidth","getBoundingClientRect","lineNumberWidth","getModifiedEditor","getActiveInsertRange","selection","startLine","endLine","layoutInsertWidget","modifiedEditor","activeRange","modifiedDom","getDomNode","scrollable","lineTop","getTopForLineNumber","scrollTop","getScrollTop","getOption","EditorOption","modifiedRect","containerRect","seamLeft","offsetWidth","offsetLeft","centerTop","top","createDiffEditor","renderSideBySide","renderSideBySideInlineBreakpoint","renderMarginRevertIcon","diffAlgorithm","maxComputationTime","dataset","onDidChangeCursorSelection","disposable","isEmpty","startLineNumber","endLineNumber","onMouseMove","onMouseLeave","onMouseDown","moveDisposable","lineNumber","position","leaveDisposable","scrollDisposable","onDidScrollChange","contextMode","sizing","renderIndicators","hideUnchangedRegions","getOriginalEditor","beforeKey","afterKey","original","modified","_el$2","firstChild","_$insert","Show","when","_el$3","_tmpl$2","_el$4","$$click","preventDefault","stopPropagation","onRequestInsertContext","$$mousedown","_$effect","_p$","_v$","_v$2","_v$3","insertContextLabel","_v$4","_$setStyleProperty","_$setAttribute","o","_$delegateEvents"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5,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,82,83,84,85,86,87,88,89,90,91,92,93]}