@industry-theme/file-editing-panels 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,19 @@
1
+ (function() {
2
+ "use strict";
3
+ try {
4
+ if (typeof document != "undefined") {
5
+ var elementStyle = document.createElement("style");
6
+ elementStyle.appendChild(document.createTextNode(".mdxeditor {\n /** Code mirror */\n & .cm-editor {\n --sp-font-mono: var(--font-mono);\n --sp-font-body: var(--font-body);\n padding: var(--sp-space-4) 0;\n }\n\n & .sp-editor .cm-editor {\n padding-bottom: 0;\n }\n\n & .cm-scroller {\n padding: 0 !important;\n }\n\n & .cm-focused {\n outline: none;\n }\n\n & .sp-wrapper {\n overflow: hidden;\n }\n\n & .sp-layout {\n border: none;\n }\n\n & .sp-cm {\n & pre {\n white-space: break-spaces;\n word-break: break-word;\n overflow-wrap: anywhere;\n flex-shrink: 1;\n }\n }\n\n /** Diff viewer */\n & .cm-mergeView .cm-scroller {\n font-family: var(--font-mono);\n line-height: 1.3rem;\n font-size: var(--text-xs);\n }\n\n /** Diff viewer */\n & .cm-sourceView .cm-scroller {\n font-family: var(--font-mono);\n line-height: 1.3rem;\n font-size: var(--text-xs);\n }\n\n & .cm-gutters {\n background: transparent;\n font-size: var(--text-xxs);\n }\n\n & .cm-activeLine {\n background: transparent;\n }\n\n & .cm-tooltip-autocomplete {\n background: var(--baseBgSubtle);\n }\n\n\n hr[data-lexical-decorator=true].selected {\n outline: 2px solid highlight;\n }\n}\n:root, .light, .light-theme {\n --blue-1: #fbfdff;\n --blue-2: #f4faff;\n --blue-3: #e6f4fe;\n --blue-4: #d5efff;\n --blue-5: #c2e5ff;\n --blue-6: #acd8fc;\n --blue-7: #8ec8f6;\n --blue-8: #5eb1ef;\n --blue-9: #0090ff;\n --blue-10: #0588f0;\n --blue-11: #0d74ce;\n --blue-12: #113264;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --blue-1: color(display-p3 0.986 0.992 0.999);\n --blue-2: color(display-p3 0.96 0.979 0.998);\n --blue-3: color(display-p3 0.912 0.956 0.991);\n --blue-4: color(display-p3 0.853 0.932 1);\n --blue-5: color(display-p3 0.788 0.894 0.998);\n --blue-6: color(display-p3 0.709 0.843 0.976);\n --blue-7: color(display-p3 0.606 0.777 0.947);\n --blue-8: color(display-p3 0.451 0.688 0.917);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.234 0.523 0.912);\n --blue-11: color(display-p3 0.15 0.44 0.84);\n --blue-12: color(display-p3 0.102 0.193 0.379);\n }\n }\n}.dark, .dark-theme {\n --blue-1: #0d1520;\n --blue-2: #111927;\n --blue-3: #0d2847;\n --blue-4: #003362;\n --blue-5: #004074;\n --blue-6: #104d87;\n --blue-7: #205d9e;\n --blue-8: #2870bd;\n --blue-9: #0090ff;\n --blue-10: #3b9eff;\n --blue-11: #70b8ff;\n --blue-12: #c2e6ff;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n .dark, .dark-theme {\n --blue-1: color(display-p3 0.057 0.081 0.122);\n --blue-2: color(display-p3 0.072 0.098 0.147);\n --blue-3: color(display-p3 0.078 0.154 0.27);\n --blue-4: color(display-p3 0.033 0.197 0.37);\n --blue-5: color(display-p3 0.08 0.245 0.441);\n --blue-6: color(display-p3 0.14 0.298 0.511);\n --blue-7: color(display-p3 0.195 0.361 0.6);\n --blue-8: color(display-p3 0.239 0.434 0.72);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.344 0.612 0.973);\n --blue-11: color(display-p3 0.49 0.72 1);\n --blue-12: color(display-p3 0.788 0.898 0.99);\n }\n }\n}:root, .light, .light-theme {\n --slate-1: #fcfcfd;\n --slate-2: #f9f9fb;\n --slate-3: #f0f0f3;\n --slate-4: #e8e8ec;\n --slate-5: #e0e1e6;\n --slate-6: #d9d9e0;\n --slate-7: #cdced6;\n --slate-8: #b9bbc6;\n --slate-9: #8b8d98;\n --slate-10: #80838d;\n --slate-11: #60646c;\n --slate-12: #1c2024;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --slate-1: color(display-p3 0.988 0.988 0.992);\n --slate-2: color(display-p3 0.976 0.976 0.984);\n --slate-3: color(display-p3 0.94 0.941 0.953);\n --slate-4: color(display-p3 0.908 0.909 0.925);\n --slate-5: color(display-p3 0.88 0.881 0.901);\n --slate-6: color(display-p3 0.85 0.852 0.876);\n --slate-7: color(display-p3 0.805 0.808 0.838);\n --slate-8: color(display-p3 0.727 0.733 0.773);\n --slate-9: color(display-p3 0.547 0.553 0.592);\n --slate-10: color(display-p3 0.503 0.512 0.549);\n --slate-11: color(display-p3 0.379 0.392 0.421);\n --slate-12: color(display-p3 0.113 0.125 0.14);\n }\n }\n}.dark, .dark-theme {\n --slate-1: #111113;\n --slate-2: #18191b;\n --slate-3: #212225;\n --slate-4: #272a2d;\n --slate-5: #2e3135;\n --slate-6: #363a3f;\n --slate-7: #43484e;\n --slate-8: #5a6169;\n --slate-9: #696e77;\n --slate-10: #777b84;\n --slate-11: #b0b4ba;\n --slate-12: #edeef0;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n .dark, .dark-theme {\n --slate-1: color(display-p3 0.067 0.067 0.074);\n --slate-2: color(display-p3 0.095 0.098 0.105);\n --slate-3: color(display-p3 0.13 0.135 0.145);\n --slate-4: color(display-p3 0.156 0.163 0.176);\n --slate-5: color(display-p3 0.183 0.191 0.206);\n --slate-6: color(display-p3 0.215 0.226 0.244);\n --slate-7: color(display-p3 0.265 0.28 0.302);\n --slate-8: color(display-p3 0.357 0.381 0.409);\n --slate-9: color(display-p3 0.415 0.431 0.463);\n --slate-10: color(display-p3 0.469 0.483 0.514);\n --slate-11: color(display-p3 0.692 0.704 0.728);\n --slate-12: color(display-p3 0.93 0.933 0.94);\n }\n }\n}:root, .light, .light-theme {\n --grass-1: #fbfefb;\n --grass-2: #f5fbf5;\n --grass-3: #e9f6e9;\n --grass-4: #daf1db;\n --grass-5: #c9e8ca;\n --grass-6: #b2ddb5;\n --grass-7: #94ce9a;\n --grass-8: #65ba74;\n --grass-9: #46a758;\n --grass-10: #3e9b4f;\n --grass-11: #2a7e3b;\n --grass-12: #203c25;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --grass-1: color(display-p3 0.986 0.996 0.985);\n --grass-2: color(display-p3 0.966 0.983 0.964);\n --grass-3: color(display-p3 0.923 0.965 0.917);\n --grass-4: color(display-p3 0.872 0.94 0.865);\n --grass-5: color(display-p3 0.811 0.908 0.802);\n --grass-6: color(display-p3 0.733 0.864 0.724);\n --grass-7: color(display-p3 0.628 0.803 0.622);\n --grass-8: color(display-p3 0.477 0.72 0.482);\n --grass-9: color(display-p3 0.38 0.647 0.378);\n --grass-10: color(display-p3 0.344 0.598 0.342);\n --grass-11: color(display-p3 0.263 0.488 0.261);\n --grass-12: color(display-p3 0.151 0.233 0.153);\n }\n }\n}:root, .light, .light-theme {\n --cyan-1: #fafdfe;\n --cyan-2: #f2fafb;\n --cyan-3: #def7f9;\n --cyan-4: #caf1f6;\n --cyan-5: #b5e9f0;\n --cyan-6: #9ddde7;\n --cyan-7: #7dcedc;\n --cyan-8: #3db9cf;\n --cyan-9: #00a2c7;\n --cyan-10: #0797b9;\n --cyan-11: #107d98;\n --cyan-12: #0d3c48;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --cyan-1: color(display-p3 0.982 0.992 0.996);\n --cyan-2: color(display-p3 0.955 0.981 0.984);\n --cyan-3: color(display-p3 0.888 0.965 0.975);\n --cyan-4: color(display-p3 0.821 0.941 0.959);\n --cyan-5: color(display-p3 0.751 0.907 0.935);\n --cyan-6: color(display-p3 0.671 0.862 0.9);\n --cyan-7: color(display-p3 0.564 0.8 0.854);\n --cyan-8: color(display-p3 0.388 0.715 0.798);\n --cyan-9: color(display-p3 0.282 0.627 0.765);\n --cyan-10: color(display-p3 0.264 0.583 0.71);\n --cyan-11: color(display-p3 0.08 0.48 0.63);\n --cyan-12: color(display-p3 0.108 0.232 0.277);\n }\n }\n}:root, .light, .light-theme {\n --amber-1: #fefdfb;\n --amber-2: #fefbe9;\n --amber-3: #fff7c2;\n --amber-4: #ffee9c;\n --amber-5: #fbe577;\n --amber-6: #f3d673;\n --amber-7: #e9c162;\n --amber-8: #e2a336;\n --amber-9: #ffc53d;\n --amber-10: #ffba18;\n --amber-11: #ab6400;\n --amber-12: #4f3422;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --amber-1: color(display-p3 0.995 0.992 0.985);\n --amber-2: color(display-p3 0.994 0.986 0.921);\n --amber-3: color(display-p3 0.994 0.969 0.782);\n --amber-4: color(display-p3 0.989 0.937 0.65);\n --amber-5: color(display-p3 0.97 0.902 0.527);\n --amber-6: color(display-p3 0.936 0.844 0.506);\n --amber-7: color(display-p3 0.89 0.762 0.443);\n --amber-8: color(display-p3 0.85 0.65 0.3);\n --amber-9: color(display-p3 1 0.77 0.26);\n --amber-10: color(display-p3 0.959 0.741 0.274);\n --amber-11: color(display-p3 0.64 0.4 0);\n --amber-12: color(display-p3 0.294 0.208 0.145);\n }\n }\n}:root, .light, .light-theme {\n --red-1: #fffcfc;\n --red-2: #fff7f7;\n --red-3: #feebec;\n --red-4: #ffdbdc;\n --red-5: #ffcdce;\n --red-6: #fdbdbe;\n --red-7: #f4a9aa;\n --red-8: #eb8e90;\n --red-9: #e5484d;\n --red-10: #dc3e42;\n --red-11: #ce2c31;\n --red-12: #641723;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --red-1: color(display-p3 0.998 0.989 0.988);\n --red-2: color(display-p3 0.995 0.971 0.971);\n --red-3: color(display-p3 0.985 0.925 0.925);\n --red-4: color(display-p3 0.999 0.866 0.866);\n --red-5: color(display-p3 0.984 0.812 0.811);\n --red-6: color(display-p3 0.955 0.751 0.749);\n --red-7: color(display-p3 0.915 0.675 0.672);\n --red-8: color(display-p3 0.872 0.575 0.572);\n --red-9: color(display-p3 0.83 0.329 0.324);\n --red-10: color(display-p3 0.798 0.294 0.285);\n --red-11: color(display-p3 0.744 0.234 0.222);\n --red-12: color(display-p3 0.36 0.115 0.143);\n }\n }\n}.ui-module_editorRoot_3d63c {\n --accentBase: var(--blue-1);\n --accentBgSubtle: var(--blue-2);\n --accentBg: var(--blue-3);\n --accentBgHover: var(--blue-4);\n --accentBgActive: var(--blue-5);\n --accentLine: var(--blue-6);\n --accentBorder: var(--blue-7);\n --accentBorderHover: var(--blue-8);\n --accentSolid: var(--blue-9);\n --accentSolidHover: var(--blue-10);\n --accentText: var(--blue-11);\n --accentTextContrast: var(--blue-12);\n\n --basePageBg: white;\n --baseBase: var(--slate-1);\n --baseBgSubtle: var(--slate-2);\n --baseBg: var(--slate-3);\n --baseBgHover: var(--slate-4);\n --baseBgActive: var(--slate-5);\n --baseLine: var(--slate-6);\n --baseBorder: var(--slate-7);\n --baseBorderHover: var(--slate-8);\n --baseSolid: var(--slate-9);\n --baseSolidHover: var(--slate-10);\n --baseText: var(--slate-11);\n --baseTextContrast: var(--slate-12);\n\n --admonitionTipBg: var(--cyan-4);\n --admonitionTipBorder: var(--cyan-8);\n\n --admonitionInfoBg: var(--grass-4);\n --admonitionInfoBorder: var(--grass-8);\n\n --admonitionCautionBg: var(--amber-4);\n --admonitionCautionBorder: var(--amber-8);\n\n --admonitionDangerBg: var(--red-4);\n --admonitionDangerBorder: var(--red-8);\n\n --admonitionNoteBg: var(--slate-4);\n --admonitionNoteBorder: var(--slate-8);\n\n --error-color: var(--red-10);\n\n --spacing-0: 0px;\n --spacing-px: 1px;\n --spacing-0_5: 0.125rem;\n --spacing-1: 0.25rem;\n --spacing-1_5: 0.375rem;\n --spacing-2: 0.5rem;\n --spacing-2_5: 0.625rem;\n --spacing-3: 0.75rem;\n --spacing-3_5: 0.875rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-7: 1.75rem;\n --spacing-8: 2rem;\n --spacing-9: 2.25rem;\n --spacing-10: 2.5rem;\n --spacing-11: 2.75rem;\n --spacing-12: 3rem;\n --spacing-14: 3.5rem;\n --spacing-16: 4rem;\n --spacing-20: 5rem;\n --spacing-24: 6rem;\n --spacing-28: 7rem;\n --spacing-32: 8rem;\n --spacing-36: 9rem;\n --spacing-40: 10rem;\n --spacing-44: 11rem;\n --spacing-48: 12rem;\n --spacing-52: 13rem;\n --spacing-56: 14rem;\n --spacing-60: 15rem;\n --spacing-64: 16rem;\n --spacing-72: 18rem;\n --spacing-80: 20rem;\n --spacing-96: 24rem;\n\n --radius-none: 0px;\n --radius-small: var(--spacing-0_5);\n --radius-base: var(--spacing-1);\n --radius-medium: var(--spacing-1_5);\n --radius-large: var(--spacing-2);\n --radius-extra-large: var(--spacing-3);\n --radius-full: 9999px;\n\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n --font-body: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue',\n sans-serif;\n\n --text-base: 1rem;\n --text-sm: 0.875rem;\n --text-xs: 0.75rem;\n --text-xxs: 0.6rem;\n\n font-family: var(--font-body);\n color: var(--baseText);\n}\n\n.ui-module_editorWrapper_nPW0c {\n}\n\n.ui-module_nestedListItem_-OMpV {\n list-style: none;\n}\n\n.ui-module_toolbarRoot_QA6-G {\n z-index: 2;\n display: flex;\n flex-direction: row;\n gap: var(--spacing-1);\n border-radius: var(--radius-medium);\n padding: var(--spacing-1_5);\n align-items: center;\n overflow-x: auto;\n position: sticky;\n top: 0;\n background-color: var(--baseBg);\n width: inherit;\n\n & div[role='separator'] {\n margin: var(--spacing-2) var(--spacing-1);\n border-left: 1px solid var(--baseBorder);\n border-right: 1px solid var(--baseBase);\n height: var(--spacing-4);\n }\n\n & svg {\n color: var(--baseTextContrast);\n display: block;\n }\n}\n\n.ui-module_readOnlyToolbarRoot_zZzZ0 {\n pointer-events: none;\n background: var(--baseBase);\n\n & > div {\n opacity: 0.5;\n }\n}\n\n.ui-module_toolbarModeSwitch_TiGNq {\n opacity: 1 !important;\n margin-left: auto;\n align-self: stretch;\n align-items: stretch;\n display: flex;\n border: 1px solid var(--baseBg);\n border-radius: var(--radius-medium);\n font-size: var(--text-xs);\n\n .ui-module_toolbarToggleItem_2BQQ2 {\n padding-inline-end: var(--spacing-4);\n padding-inline-start: var(--spacing-4);\n\n &:active,\n &[data-state='on'] {\n background-color: var(--baseBorder);\n }\n }\n}\n\n.ui-module_toolbarGroupOfGroups_-7ePU {\n display: flex;\n margin: 0 var(--spacing-1);\n}\n\n.ui-module_toolbarToggleSingleGroup_O8hn8:first-of-type .ui-module_toolbarToggleItem_2BQQ2:only-child,\n.ui-module_toolbarToggleSingleGroup_O8hn8:only-child .ui-module_toolbarToggleItem_2BQQ2:first-child,\n.ui-module_toolbarModeSwitch_TiGNq .ui-module_toolbarToggleItem_2BQQ2:first-child {\n border-top-left-radius: var(--radius-base);\n border-bottom-left-radius: var(--radius-base);\n}\n\n.ui-module_toolbarToggleSingleGroup_O8hn8:last-of-type .ui-module_toolbarToggleItem_2BQQ2:only-child,\n.ui-module_toolbarToggleSingleGroup_O8hn8:only-child .ui-module_toolbarToggleItem_2BQQ2:last-child,\n.ui-module_toolbarModeSwitch_TiGNq .ui-module_toolbarToggleItem_2BQQ2:last-child {\n border-top-right-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n}\n\n.ui-module_toolbarToggleItem_2BQQ2,\n.ui-module_toolbarButton_nedIw {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-0_5);\n\n @media (hover: hover) {\n &:hover {\n background-color: var(--baseBgActive);\n }\n }\n\n &:active svg {\n transform: translate(1px, 1px);\n }\n\n &[data-state='on'],\n &:active {\n color: var(--baseTextContrast);\n background-color: var(--baseBgActive);\n }\n\n &[data-disabled] {\n pointer-events: none;\n & svg {\n color: var(--baseBorderHover);\n }\n }\n}\n\n.ui-module_toolbarButton_nedIw {\n border-radius: var(--radius-base);\n}\n\n.ui-module_toolbarButton_nedIw + .ui-module_toolbarButton_nedIw {\n margin-left: var(--spacing-1);\n}\n\n.ui-module_activeToolbarButton_TqEHl {\n color: var(--accentText);\n}\n\n.ui-module_toolbarToggleSingleGroup_O8hn8 {\n display: flex;\n align-items: center;\n white-space: nowrap;\n}\n\n.ui-module_toolbarNodeKindSelectContainer_xzct9,\n.ui-module_toolbarButtonDropdownContainer_oweZ4,\n.ui-module_toolbarCodeBlockLanguageSelectContent_qC11c,\n.ui-module_selectContainer_zEOzj {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n z-index: 3;\n width: var(--spacing-36);\n border-bottom-left-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n background-color: var(--basePageBg);\n font-size: var(--text-sm);\n}\n\n.ui-module_toolbarButtonDropdownContainer_oweZ4 {\n border-top-right-radius: var(--radius-base);\n\n & .ui-module_selectItem_-0ITo:first-child {\n border-top-right-radius: var(--radius-base);\n }\n}\n\n.ui-module_toolbarNodeKindSelectTrigger_NhAa4,\n.ui-module_toolbarButtonSelectTrigger_qc9aS,\n.ui-module_selectTrigger_QvY-l {\n border: 0;\n background-color: transparent;\n display: flex;\n color: inherit;\n align-items: center;\n width: var(--spacing-36);\n padding: var(--spacing-0_5) var(--spacing-1);\n padding-inline-start: var(--spacing-2);\n border-radius: var(--radius-medium);\n white-space: nowrap;\n flex-wrap: nowrap;\n font-size: var(--text-sm);\n background-color: var(--basePageBg);\n margin: 0 var(--spacing-1);\n\n &[data-state='open'] {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n border-bottom-right-radius: var(--radius-none);\n border-bottom-left-radius: var(--radius-none);\n }\n}\n\n.ui-module_selectTrigger_QvY-l[data-placeholder] > span:first-child {\n color: var(--baseBorderHover);\n}\n\n/** used in the sandpack */\n\n.ui-module_toolbarButtonSelectTrigger_qc9aS {\n width: auto;\n padding-inline-start: var(--spacing-2);\n padding-inline-end: var(--spacing-1);\n padding-block: var(--spacing-0_5);\n}\n\n.ui-module_toolbarCodeBlockLanguageSelectTrigger_zqKns,\n.ui-module_toolbarCodeBlockLanguageSelectContent_qC11c {\n width: var(--spacing-48);\n}\n\n.ui-module_toolbarNodeKindSelectItem_EL2xh,\n.ui-module_selectItem_-0ITo {\n cursor: default;\n display: flex;\n padding: var(--spacing-2);\n\n &[data-highlighted] {\n background-color: var(--baseBg);\n }\n\n &[data-state='checked'] {\n color: var(--baseTextContrast);\n background-color: var(--baseBg);\n }\n\n &[data-highlighted] {\n outline: none;\n }\n\n &:last-child {\n border-bottom-left-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n }\n}\n\n.ui-module_toolbarNodeKindSelectDropdownArrow_zdl-w,\n.ui-module_selectDropdownArrow_9sZWz {\n margin-left: auto;\n display: flex;\n align-items: center;\n}\n\n.ui-module_contentEditable_Neszj {\n box-sizing: border-box;\n width: 100%;\n color: var(--baseTextContrast);\n\n &:focus {\n outline: none;\n }\n\n padding: var(--spacing-3);\n}\n\n.ui-module_codeMirrorWrapper_WzR1U {\n margin-bottom: var(--spacing-5);\n border: 1px solid var(--baseLine);\n border-radius: var(--radius-medium);\n overflow: hidden;\n padding: 0.8rem;\n position: relative;\n}\n\n.ui-module_sandPackWrapper_NEHwo {\n margin-bottom: var(--spacing-5);\n border: 1px solid var(--baseLine);\n border-radius: var(--radius-medium);\n overflow: hidden;\n position: relative;\n}\n\n.ui-module_codeMirrorToolbar_4LDML {\n position: absolute;\n right: 0;\n top: 0;\n display: flex;\n gap: var(--spacing-1);\n padding: var(--spacing-1);\n z-index: 1;\n background-color: var(--baseBase);\n border-bottom-left-radius: var(--radius-base);\n}\n\n.ui-module_frontmatterWrapper_yywSY {\n border-radius: var(--radius-medium);\n padding: var(--spacing-3);\n background-color: var(--baseBgSubtle);\n\n &[data-expanded='true'] {\n margin-bottom: var(--spacing-10);\n }\n}\n\n.ui-module_frontmatterToggleButton_7ZBOE {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n display: flex;\n align-items: center;\n gap: var(--spacing-1);\n font-size: var(--text-sm);\n}\n\n.ui-module_propertyPanelTitle_wudSB {\n font-size: var(--text-xs);\n font-weight: 400;\n margin: 0;\n padding-top: var(--spacing-2);\n padding-left: var(--spacing-2);\n}\n\n.ui-module_propertyEditorTable_fYpKY {\n table-layout: fixed;\n border-spacing: var(--spacing-2);\n\n & th {\n text-align: left;\n font-size: var(--text-sm);\n padding: var(--spacing-2) var(--spacing-3);\n }\n\n & col:nth-child(1) {\n width: 30%;\n }\n\n & col:nth-child(2) {\n width: 70%;\n }\n\n & td:last-child .ui-module_iconButton_b94iY {\n margin-left: var(--spacing-4);\n margin-right: var(--spacing-4);\n }\n\n & .ui-module_readOnlyColumnCell_tCgPb {\n padding-left: 0;\n }\n}\n\n.ui-module_propertyEditorLabelCell_Z2hv7 {\n font-weight: 400;\n}\n\n.ui-module_readOnlyColumnCell_tCgPb {\n padding-left: 0;\n}\n\n.ui-module_buttonsFooter_Juqi3 {\n display: flex;\n justify-content: flex-end;\n gap: var(--spacing-2);\n}\n\n.ui-module_propertyEditorInput_PXpSX {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n width: 100%;\n padding: var(--spacing-2) var(--spacing-3);\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n background-color: var(--baseBase);\n font-size: var(--text-sm);\n}\n\n.ui-module_iconButton_b94iY {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n color: var(--baseText);\n\n @media (hover: hover) {\n &:hover {\n color: var(--baseTextContrast);\n }\n }\n\n &:disabled,\n &:disabled:hover {\n color: var(--baseLine);\n }\n}\n\n.ui-module_primaryButton_SztyP,\n.ui-module_secondaryButton_9rAaf {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-2) var(--spacing-3);\n border: 1px solid var(--accentBorder);\n background-color: var(--accentSolidHover);\n color: var(--baseBase);\n font-size: var(--text-xs);\n border-radius: var(--radius-medium);\n\n &:disabled {\n background: var(--accentLine);\n border-color: var(--accentBg);\n }\n}\n\n.ui-module_smallButton_ME9Rg {\n font-size: var(--text-xs);\n padding: var(--spacing-1) var(--spacing-2);\n border-radius: var(--radius-base);\n}\n\n.ui-module_secondaryButton_9rAaf {\n border: 1px solid var(--baseBorder);\n background-color: var(--baseSolidHover);\n color: var(--baseBase);\n}\n\n.ui-module_dialogForm_fym3H {\n display: flex;\n flex-direction: row;\n gap: var(--spacing-2);\n}\n\n.ui-module_linkDialogEditForm_Qc-E2 {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--spacing-2);\n padding: 0;\n}\n\n.ui-module_linkDialogInputContainer_UMMwL {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n.ui-module_linkDialogInputWrapper_aWNFC {\n display: flex;\n align-items: center;\n background-color: var(--baseBase);\n\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n\n &[data-visible-dropdown='true'] {\n border-bottom-left-radius: var(--radius-none);\n border-bottom-right-radius: var(--radius-none);\n border-bottom-width: 0;\n }\n\n & > button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding-right: var(--spacing-2);\n }\n}\n\n.ui-module_linkDialogInput_wW3Qq,\n.ui-module_dialogInput_0XU4W {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n width: 20rem;\n padding: var(--spacing-2) var(--spacing-3);\n font-size: var(--text-sm);\n\n &::placeholder {\n color: var(--baseBorder);\n }\n}\n\n.ui-module_linkDialogAnchor_UVham {\n position: fixed;\n background-color: highlight;\n z-index: -1;\n\n &[data-visible='true'] {\n visibility: visible;\n }\n\n &[data-visible='false'] {\n visibility: hidden;\n }\n}\n\n.ui-module_linkDialogPopoverContent_-aAXR,\n.ui-module_tableColumnEditorPopoverContent_qiZ8k,\n.ui-module_dialogContent_IRmgH {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n display: flex;\n align-items: center;\n gap: var(--spacing-0_5);\n border-radius: var(--radius-medium);\n border: 1px solid var(--baseBg);\n background-color: var(--basePageBg);\n padding: var(--spacing-1) var(--spacing-1);\n font-size: var(--text-sm);\n}\n\n.ui-module_largeDialogContent_GvvAH {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n gap: var(--spacing-0_5);\n border-radius: var(--radius-medium);\n border: 1px solid var(--baseBorder);\n background-color: var(--baseBgSubtle);\n padding: var(--spacing-4);\n font-size: var(--text-sm);\n}\n\n.ui-module_dialogTitle_XDJ1h {\n font-size: var(--text-base);\n font-weight: 600;\n padding-left: var(--spacing-2);\n}\n\n.ui-module_dialogCloseButton_P-p41 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n position: absolute;\n top: 10px;\n right: 10px;\n}\n\n.ui-module_popoverContent_mouz8 {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n display: flex;\n align-items: center;\n gap: var(--spacing-0_5);\n border-radius: var(--radius-medium);\n background-color: var(--baseBgSubtle);\n padding: var(--spacing-2) var(--spacing-2);\n font-size: var(--text-sm);\n z-index: 1;\n}\n\n.ui-module_popoverArrow_Mq8HP {\n fill: var(--basePageBg);\n}\n\n.ui-module_linkDialogPreviewAnchor_orTS8 {\n margin-right: var(--spacing-1);\n display: flex;\n align-items: center;\n color: var(--accentText);\n text-decoration: none;\n\n @media (hover: hover) {\n &:hover {\n color: var(--accentSolidHover);\n }\n }\n\n border: 1px solid transparent;\n\n & span {\n max-width: 14rem;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n\n.ui-module_tooltipTrigger_uoOTp {\n align-self: center;\n}\n\n.ui-module_tooltipContent_GpCAE {\n z-index: 2;\n position: relative;\n border-radius: var(--radius-medium);\n padding: var(--spacing-1) var(--spacing-2);\n font-size: var(--text-xs);\n background-color: var(--baseText);\n color: var(--baseBase);\n\n & svg {\n fill: var(--baseText);\n }\n}\n\n.ui-module_actionButton_miZ0c {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n & svg {\n display: block;\n }\n @media (hover: hover) {\n &:hover {\n background-color: var(--baseBg);\n }\n }\n &:active svg {\n transform: translate(1px, 1px);\n }\n &[data-state='on'],\n &:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n padding: var(--spacing-1) var(--spacing-1);\n border-radius: var(--radius-medium);\n color: var(--baseTextContrast);\n}\n\n.ui-module_primaryActionButton_tWgQF {\n background-color: var(--accentSolid);\n color: var(--baseBase);\n\n @media (hover: hover) {\n &:hover {\n background-color: var(--accentSolidHover);\n color: var(--baseBase);\n }\n }\n}\n\n.ui-module_tableEditor_Bz6zN {\n table-layout: fixed;\n width: 100%;\n height: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n & thead > tr > th {\n text-align: right;\n }\n\n & > tbody > tr > td:not(.ui-module_toolCell_0AstW),\n & > tbody > tr > th:not(.ui-module_toolCell_0AstW):not([data-tool-cell='true']) {\n border: 1px solid var(--baseBgActive);\n padding: var(--spacing-1) var(--spacing-2);\n white-space: normal;\n\n & > div {\n outline: none;\n\n & > p {\n margin: 0;\n }\n }\n\n &[data-active='true'] {\n outline: solid 1px var(--baseSolid);\n }\n }\n\n .ui-module_tableColumnEditorTrigger_pxT4B,\n .ui-module_tableRowEditorTrigger_Fnk5y,\n .ui-module_addRowButton_OnB8h,\n .ui-module_addColumnButton_i7qS0,\n .ui-module_iconButton_b94iY {\n opacity: 0.15;\n }\n\n @media (hover: hover) {\n &:hover {\n .ui-module_tableColumnEditorTrigger_pxT4B,\n .ui-module_tableRowEditorTrigger_Fnk5y,\n .ui-module_addRowButton_OnB8h,\n .ui-module_addColumnButton_i7qS0,\n .ui-module_iconButton_b94iY {\n opacity: 0.3;\n\n &:hover {\n opacity: 1;\n }\n }\n }\n }\n}\n\n.ui-module_toolCell_0AstW {\n text-align: right;\n\n & button {\n margin: auto;\n display: block;\n }\n}\n\n.ui-module_tableColumnEditorTrigger_pxT4B {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n & svg {\n display: block;\n }\n @media (hover: hover) {\n &:hover {\n background-color: var(--baseBg);\n }\n }\n &:active svg {\n transform: translate(1px, 1px);\n }\n &[data-state='on'],\n &:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n padding: var(--spacing-1);\n border-radius: var(--radius-full);\n opacity: 0.2;\n\n &[data-active='true'] {\n opacity: 1 !important;\n }\n}\n\n.ui-module_tableColumnEditorToolbar_h5qAi {\n display: flex;\n\n & > button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n & svg {\n display: block;\n }\n @media (hover: hover) {\n &:hover {\n background-color: var(--baseBg);\n }\n }\n &:active svg {\n transform: translate(1px, 1px);\n }\n &[data-state='on'],\n &:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n }\n\n & [role='separator'] {\n margin-left: var(--spacing-1);\n margin-right: var(--spacing-1);\n }\n}\n\n.ui-module_toggleGroupRoot_09l0I {\n display: inline-flex;\n\n & button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n & svg {\n display: block;\n }\n @media (hover: hover) {\n &:hover {\n background-color: var(--baseBg);\n }\n }\n &:active svg {\n transform: translate(1px, 1px);\n }\n &[data-state='on'],\n &:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n\n &:first-child {\n border-top-left-radius: var(--radius-base);\n border-bottom-left-radius: var(--radius-base);\n }\n\n &:last-child {\n border-top-right-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n }\n }\n}\n\n.ui-module_tableToolsColumn_OeGBn {\n width: 2rem;\n\n & button {\n margin: auto;\n display: block;\n }\n}\n\n.ui-module_leftAlignedCell_AOE-0 {\n text-align: left;\n}\n\n.ui-module_rightAlignedCell_VeNXT {\n text-align: right;\n}\n\n.ui-module_centeredCell_6nOM2 {\n text-align: center;\n}\n\n.ui-module_addColumnButton_i7qS0,\n.ui-module_addRowButton_OnB8h {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n & svg {\n display: block;\n }\n @media (hover: hover) {\n &:hover {\n background-color: var(--baseBg);\n }\n }\n &:active svg {\n transform: translate(1px, 1px);\n }\n &[data-state='on'],\n &:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n background-color: var(--baseBase);\n\n & svg {\n margin: auto;\n }\n\n display: flex;\n align-items: center;\n}\n\n.ui-module_addRowButton_OnB8h {\n width: 100%;\n margin-top: var(--spacing-px);\n box-sizing: border-box;\n border-bottom-right-radius: var(--radius-medium);\n border-bottom-left-radius: var(--radius-medium);\n}\n\n.ui-module_addColumnButton_i7qS0 {\n margin-left: var(--spacing-px);\n height: 100%;\n border-top-right-radius: var(--radius-medium);\n border-bottom-right-radius: var(--radius-medium);\n}\n\n/** Dialog */\n\n.ui-module_dialogOverlay_UNZ-- {\n position: fixed;\n inset: 0;\n animation: ui-module_overlayShow_l5JqT 150ms cubic-bezier(0.16, 1, 0.3, 1);\n background-color: var(--baseBase);\n z-index: 51;\n opacity: 0.5;\n}\n\n.ui-module_dialogContent_IRmgH,\n.ui-module_largeDialogContent_GvvAH {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n animation: ui-module_contentShow_1UlWE 150ms cubic-bezier(0.16, 1, 0.3, 1);\n z-index: 52;\n}\n\n.ui-module_dialogContent_IRmgH:focus,\n.ui-module_largeDialogContent_GvvAH:focus {\n outline: none;\n}\n\n@keyframes ui-module_overlayShow_l5JqT {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 0.5;\n }\n}\n\n@keyframes ui-module_contentShow_1UlWE {\n from {\n opacity: 0;\n transform: translate(-50%, -48%) scale(0.96);\n }\n\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n\n.ui-module_focusedImage_-XGsD {\n outline: highlight solid 2px;\n}\n\n.ui-module_imageWrapper_asuzE {\n display: inline-block;\n position: relative;\n}\n\n.ui-module_imageWrapper_asuzE[draggable='true'] {\n cursor: move;\n /* fallback if grab cursor is unsupported */\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n\n.ui-module_editImageToolbar_kLkPH {\n position: absolute;\n right: 0;\n top: 0;\n display: flex;\n gap: var(--spacing-1);\n padding: var(--spacing-1);\n z-index: 1;\n background-color: var(--baseBase);\n border-bottom-left-radius: var(--radius-base);\n}\n\n.ui-module_editImageButton_HwGdI {\n & svg {\n display: block;\n }\n}\n\n.ui-module_inlineEditor_chmlT {\n display: inline-flex;\n border-radius: var(--radius-medium);\n padding: var(--spacing-1);\n gap: var(--spacing-2);\n align-items: center;\n background: var(--baseBg);\n}\n\n.ui-module_blockEditor_hqEug {\n display: flex;\n justify-content: stretch;\n border-radius: var(--radius-medium);\n padding: var(--spacing-2);\n gap: var(--spacing-2);\n align-items: center;\n background: var(--baseBg);\n\n & .ui-module_nestedEditor_SnebQ {\n flex-grow: 1;\n }\n}\n\n.ui-module_nestedEditor_SnebQ {\n background: var(--basePageBg);\n padding: var(--spacing-1) var(--spacing-2);\n border-radius: var(--radius-medium);\n\n & > p {\n margin: 0;\n }\n\n &:focus {\n outline: none;\n }\n}\n\n.ui-module_genericComponentName_7NrVP {\n font-size: var(--text-sm);\n color: var(--baseText);\n padding-right: var(--spacing-2);\n}\n\n.ui-module_diffSourceToggleWrapper_OKN4p {\n margin-left: auto;\n pointer-events: auto;\n opacity: 1;\n position: sticky;\n right: 0;\n}\n\n.ui-module_ggDiffSourceToggle_kEzrx {\n}\n\n.ui-module_diffSourceToggle_b80Me {\n border-radius: var(--radius-medium);\n background-color: var(--baseBase);\n display: flex;\n\n .ui-module_toolbarToggleItem_2BQQ2 {\n padding: 0;\n\n & > span {\n display: block;\n padding: var(--spacing-1) var(--spacing-1);\n }\n }\n}\n\n.ui-module_selectWithLabel_ghMtH {\n display: flex;\n align-items: center;\n gap: var(--spacing-2);\n margin-left: var(--spacing-2);\n\n & > label {\n font-size: var(--text-sm);\n }\n\n .ui-module_selectTrigger_QvY-l {\n border: 1px solid var(--baseBorder);\n }\n}\n\n.ui-module_toolbarTitleMode_m5TQr {\n font-size: var(--text-sm);\n margin-left: var(--spacing-2);\n}\n\n.ui-module_imageControlWrapperResizing_CaK3A {\n touch-action: none;\n}\n\n.ui-module_imageResizer_kLRMX {\n display: block;\n width: 7px;\n height: 7px;\n position: absolute;\n background-color: var(--accentText);\n border: 1px solid var(--baseBg);\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerN_EbaZ- {\n top: -6px;\n left: 48%;\n cursor: n-resize;\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerNe_omQKd {\n top: -6px;\n right: -6px;\n cursor: ne-resize;\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerE_PbuNB {\n bottom: 48%;\n right: -6px;\n cursor: e-resize;\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerSe_3JFP9 {\n bottom: -2px;\n right: -6px;\n cursor: nwse-resize;\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerS_jL4ed {\n bottom: -2px;\n left: 48%;\n cursor: s-resize;\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerSw_Ylpu9 {\n bottom: -2px;\n left: -6px;\n cursor: sw-resize;\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerW_Qq-qg {\n bottom: 48%;\n left: -6px;\n cursor: w-resize;\n}\n\n.ui-module_imageResizer_kLRMX.ui-module_imageResizerNw_DsHzu {\n top: -6px;\n left: -6px;\n cursor: nw-resize;\n}\n\n.ui-module_imagePlaceholder_334Il {\n border: 2px dashed;\n padding: 48px;\n margin: 12px;\n width: fit-content;\n height: fit-content;\n}\n\n.ui-module_imageDimensionsContainer_Z1mie {\n display: flex;\n gap: var(--spacing-4);\n}\n\n.ui-module_placeholder_SFgVt {\n color: var(--baseSolid);\n overflow: hidden;\n position: absolute;\n top: 0;\n padding: var(--spacing-3);\n text-overflow: ellipsis;\n user-select: none;\n white-space: nowrap;\n display: inline-block;\n pointer-events: none;\n}\n\n.ui-module_rootContentEditableWrapper_dJxz1 {\n position: relative;\n}\n\n.ui-module_downshiftContainer_DQwPw {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n.ui-module_downshiftInputWrapper_nTVWG {\n display: flex;\n align-items: center;\n background-color: var(--baseBase);\n\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n\n &[data-visible-dropdown='true'] {\n border-bottom-left-radius: var(--radius-none);\n border-bottom-right-radius: var(--radius-none);\n border-bottom-width: 0;\n }\n\n & > button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding-right: var(--spacing-2);\n }\n}\n\n.ui-module_downshiftInput_gwUym {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n width: 20rem;\n padding: var(--spacing-2) var(--spacing-3);\n font-size: var(--text-sm);\n\n &::placeholder {\n color: var(--baseBorder);\n }\n}\n\n.ui-module_downshiftAutocompleteContainer_4py0Z {\n position: relative;\n\n & ul {\n all: unset;\n box-sizing: border-box;\n position: absolute;\n font-size: var(--text-sm);\n width: 100%;\n display: none;\n border-bottom-left-radius: var(--radius-medium);\n border-bottom-right-radius: var(--radius-medium);\n max-height: var(--spacing-48);\n overflow-x: hidden;\n overflow-y: auto;\n border: 1px solid var(--baseBorder);\n border-top-width: 0;\n background-color: var(--baseBase);\n\n &[data-visible='true'] {\n display: block;\n }\n\n & li {\n padding: var(--spacing-2) var(--spacing-3);\n white-space: nowrap;\n margin-bottom: var(--spacing-1);\n overflow-x: hidden;\n text-overflow: ellipsis;\n\n &[data-selected='true'] {\n background-color: var(--baseBgSubtle);\n }\n\n &[data-highlighted='true'] {\n background-color: var(--baseBgHover);\n }\n\n &:last-of-type {\n border-bottom-left-radius: var(--radius-medium);\n border-bottom-right-radius: var(--radius-medium);\n }\n }\n }\n}\n\n.ui-module_textInput_WkP9R {\n all: unset;\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n background-color: var(--baseBase);\n padding: var(--spacing-2) var(--spacing-3);\n}\n\nform.ui-module_multiFieldForm_81Blh {\n display: flex;\n flex-direction: column;\n padding: var(--spacing-2);\n gap: var(--spacing-2);\n\n .ui-module_formField_YL3zT {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-2);\n\n & label {\n font-size: var(--text-xs);\n }\n }\n}\n\n.ui-module_markdownParseError_24XbG {\n border-radius: var(--radius-base);\n border: 1px solid var(--error-color);\n padding: var(--spacing-2);\n margin-block: var(--spacing-2);\n color: var(--error-color);\n font-size: var(--text-xs);\n}\n\n.ui-module_popupContainer_c-ODE {\n position: relative;\n z-index: 2;\n}\n\n.ui-module_inputSizer_XK71G {\n display: inline-grid;\n vertical-align: baseline;\n align-items: center;\n position: relative;\n\n &::after,\n & input {\n width: auto;\n min-width: 1rem;\n grid-area: 1 / 2;\n font: inherit;\n margin: 0;\n padding: 0 2px;\n resize: none;\n background: none;\n appearance: none;\n border: none;\n color: inherit;\n }\n\n span {\n padding: 0.25em;\n }\n\n &::after {\n content: attr(data-value);\n white-space: pre-wrap;\n }\n}\n:root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --blue-1: #fbfdff;\n --blue-2: #f4faff;\n --blue-3: #e6f4fe;\n --blue-4: #d5efff;\n --blue-5: #c2e5ff;\n --blue-6: #acd8fc;\n --blue-7: #8ec8f6;\n --blue-8: #5eb1ef;\n --blue-9: #0090ff;\n --blue-10: #0588f0;\n --blue-11: #0d74ce;\n --blue-12: #113264;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --blue-1: color(display-p3 0.986 0.992 0.999);\n --blue-2: color(display-p3 0.96 0.979 0.998);\n --blue-3: color(display-p3 0.912 0.956 0.991);\n --blue-4: color(display-p3 0.853 0.932 1);\n --blue-5: color(display-p3 0.788 0.894 0.998);\n --blue-6: color(display-p3 0.709 0.843 0.976);\n --blue-7: color(display-p3 0.606 0.777 0.947);\n --blue-8: color(display-p3 0.451 0.688 0.917);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.234 0.523 0.912);\n --blue-11: color(display-p3 0.15 0.44 0.84);\n --blue-12: color(display-p3 0.102 0.193 0.379);\n }\n }\n}\n\n.lexical-theme-module_dark_ALXQz, .lexical-theme-module_dark-theme_ZjZQK {\n --blue-1: #0d1520;\n --blue-2: #111927;\n --blue-3: #0d2847;\n --blue-4: #003362;\n --blue-5: #004074;\n --blue-6: #104d87;\n --blue-7: #205d9e;\n --blue-8: #2870bd;\n --blue-9: #0090ff;\n --blue-10: #3b9eff;\n --blue-11: #70b8ff;\n --blue-12: #c2e6ff;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n .lexical-theme-module_dark_ALXQz, .lexical-theme-module_dark-theme_ZjZQK {\n --blue-1: color(display-p3 0.057 0.081 0.122);\n --blue-2: color(display-p3 0.072 0.098 0.147);\n --blue-3: color(display-p3 0.078 0.154 0.27);\n --blue-4: color(display-p3 0.033 0.197 0.37);\n --blue-5: color(display-p3 0.08 0.245 0.441);\n --blue-6: color(display-p3 0.14 0.298 0.511);\n --blue-7: color(display-p3 0.195 0.361 0.6);\n --blue-8: color(display-p3 0.239 0.434 0.72);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.344 0.612 0.973);\n --blue-11: color(display-p3 0.49 0.72 1);\n --blue-12: color(display-p3 0.788 0.898 0.99);\n }\n }\n}\n\n:root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --slate-1: #fcfcfd;\n --slate-2: #f9f9fb;\n --slate-3: #f0f0f3;\n --slate-4: #e8e8ec;\n --slate-5: #e0e1e6;\n --slate-6: #d9d9e0;\n --slate-7: #cdced6;\n --slate-8: #b9bbc6;\n --slate-9: #8b8d98;\n --slate-10: #80838d;\n --slate-11: #60646c;\n --slate-12: #1c2024;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --slate-1: color(display-p3 0.988 0.988 0.992);\n --slate-2: color(display-p3 0.976 0.976 0.984);\n --slate-3: color(display-p3 0.94 0.941 0.953);\n --slate-4: color(display-p3 0.908 0.909 0.925);\n --slate-5: color(display-p3 0.88 0.881 0.901);\n --slate-6: color(display-p3 0.85 0.852 0.876);\n --slate-7: color(display-p3 0.805 0.808 0.838);\n --slate-8: color(display-p3 0.727 0.733 0.773);\n --slate-9: color(display-p3 0.547 0.553 0.592);\n --slate-10: color(display-p3 0.503 0.512 0.549);\n --slate-11: color(display-p3 0.379 0.392 0.421);\n --slate-12: color(display-p3 0.113 0.125 0.14);\n }\n }\n}\n\n.lexical-theme-module_dark_ALXQz, .lexical-theme-module_dark-theme_ZjZQK {\n --slate-1: #111113;\n --slate-2: #18191b;\n --slate-3: #212225;\n --slate-4: #272a2d;\n --slate-5: #2e3135;\n --slate-6: #363a3f;\n --slate-7: #43484e;\n --slate-8: #5a6169;\n --slate-9: #696e77;\n --slate-10: #777b84;\n --slate-11: #b0b4ba;\n --slate-12: #edeef0;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n .lexical-theme-module_dark_ALXQz, .lexical-theme-module_dark-theme_ZjZQK {\n --slate-1: color(display-p3 0.067 0.067 0.074);\n --slate-2: color(display-p3 0.095 0.098 0.105);\n --slate-3: color(display-p3 0.13 0.135 0.145);\n --slate-4: color(display-p3 0.156 0.163 0.176);\n --slate-5: color(display-p3 0.183 0.191 0.206);\n --slate-6: color(display-p3 0.215 0.226 0.244);\n --slate-7: color(display-p3 0.265 0.28 0.302);\n --slate-8: color(display-p3 0.357 0.381 0.409);\n --slate-9: color(display-p3 0.415 0.431 0.463);\n --slate-10: color(display-p3 0.469 0.483 0.514);\n --slate-11: color(display-p3 0.692 0.704 0.728);\n --slate-12: color(display-p3 0.93 0.933 0.94);\n }\n }\n}\n\n:root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --grass-1: #fbfefb;\n --grass-2: #f5fbf5;\n --grass-3: #e9f6e9;\n --grass-4: #daf1db;\n --grass-5: #c9e8ca;\n --grass-6: #b2ddb5;\n --grass-7: #94ce9a;\n --grass-8: #65ba74;\n --grass-9: #46a758;\n --grass-10: #3e9b4f;\n --grass-11: #2a7e3b;\n --grass-12: #203c25;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --grass-1: color(display-p3 0.986 0.996 0.985);\n --grass-2: color(display-p3 0.966 0.983 0.964);\n --grass-3: color(display-p3 0.923 0.965 0.917);\n --grass-4: color(display-p3 0.872 0.94 0.865);\n --grass-5: color(display-p3 0.811 0.908 0.802);\n --grass-6: color(display-p3 0.733 0.864 0.724);\n --grass-7: color(display-p3 0.628 0.803 0.622);\n --grass-8: color(display-p3 0.477 0.72 0.482);\n --grass-9: color(display-p3 0.38 0.647 0.378);\n --grass-10: color(display-p3 0.344 0.598 0.342);\n --grass-11: color(display-p3 0.263 0.488 0.261);\n --grass-12: color(display-p3 0.151 0.233 0.153);\n }\n }\n}\n\n:root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --cyan-1: #fafdfe;\n --cyan-2: #f2fafb;\n --cyan-3: #def7f9;\n --cyan-4: #caf1f6;\n --cyan-5: #b5e9f0;\n --cyan-6: #9ddde7;\n --cyan-7: #7dcedc;\n --cyan-8: #3db9cf;\n --cyan-9: #00a2c7;\n --cyan-10: #0797b9;\n --cyan-11: #107d98;\n --cyan-12: #0d3c48;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --cyan-1: color(display-p3 0.982 0.992 0.996);\n --cyan-2: color(display-p3 0.955 0.981 0.984);\n --cyan-3: color(display-p3 0.888 0.965 0.975);\n --cyan-4: color(display-p3 0.821 0.941 0.959);\n --cyan-5: color(display-p3 0.751 0.907 0.935);\n --cyan-6: color(display-p3 0.671 0.862 0.9);\n --cyan-7: color(display-p3 0.564 0.8 0.854);\n --cyan-8: color(display-p3 0.388 0.715 0.798);\n --cyan-9: color(display-p3 0.282 0.627 0.765);\n --cyan-10: color(display-p3 0.264 0.583 0.71);\n --cyan-11: color(display-p3 0.08 0.48 0.63);\n --cyan-12: color(display-p3 0.108 0.232 0.277);\n }\n }\n}\n\n:root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --amber-1: #fefdfb;\n --amber-2: #fefbe9;\n --amber-3: #fff7c2;\n --amber-4: #ffee9c;\n --amber-5: #fbe577;\n --amber-6: #f3d673;\n --amber-7: #e9c162;\n --amber-8: #e2a336;\n --amber-9: #ffc53d;\n --amber-10: #ffba18;\n --amber-11: #ab6400;\n --amber-12: #4f3422;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --amber-1: color(display-p3 0.995 0.992 0.985);\n --amber-2: color(display-p3 0.994 0.986 0.921);\n --amber-3: color(display-p3 0.994 0.969 0.782);\n --amber-4: color(display-p3 0.989 0.937 0.65);\n --amber-5: color(display-p3 0.97 0.902 0.527);\n --amber-6: color(display-p3 0.936 0.844 0.506);\n --amber-7: color(display-p3 0.89 0.762 0.443);\n --amber-8: color(display-p3 0.85 0.65 0.3);\n --amber-9: color(display-p3 1 0.77 0.26);\n --amber-10: color(display-p3 0.959 0.741 0.274);\n --amber-11: color(display-p3 0.64 0.4 0);\n --amber-12: color(display-p3 0.294 0.208 0.145);\n }\n }\n}\n\n:root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --red-1: #fffcfc;\n --red-2: #fff7f7;\n --red-3: #feebec;\n --red-4: #ffdbdc;\n --red-5: #ffcdce;\n --red-6: #fdbdbe;\n --red-7: #f4a9aa;\n --red-8: #eb8e90;\n --red-9: #e5484d;\n --red-10: #dc3e42;\n --red-11: #ce2c31;\n --red-12: #641723;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .lexical-theme-module_light_TXmQm, .lexical-theme-module_light-theme_6YE-f {\n --red-1: color(display-p3 0.998 0.989 0.988);\n --red-2: color(display-p3 0.995 0.971 0.971);\n --red-3: color(display-p3 0.985 0.925 0.925);\n --red-4: color(display-p3 0.999 0.866 0.866);\n --red-5: color(display-p3 0.984 0.812 0.811);\n --red-6: color(display-p3 0.955 0.751 0.749);\n --red-7: color(display-p3 0.915 0.675 0.672);\n --red-8: color(display-p3 0.872 0.575 0.572);\n --red-9: color(display-p3 0.83 0.329 0.324);\n --red-10: color(display-p3 0.798 0.294 0.285);\n --red-11: color(display-p3 0.744 0.234 0.222);\n --red-12: color(display-p3 0.36 0.115 0.143);\n }\n }\n}\n\n.lexical-theme-module_bold_aiWbg {\n font-weight: bold;\n}\n\n.lexical-theme-module_italic_fbxIe {\n font-style: italic;\n}\n\n.lexical-theme-module_underline_Fl7gX {\n text-decoration: underline;\n}\n\n.lexical-theme-module_bold_aiWbg {\n font-weight: 700;\n}\n\n.lexical-theme-module_italic_fbxIe {\n font-style: italic;\n}\n\n.lexical-theme-module_underline_Fl7gX {\n text-decoration: underline\n}\n\n.lexical-theme-module_strikethrough_ZPg1J {\n text-decoration: line-through\n}\n\n.lexical-theme-module_underlineStrikethrough_g359y {\n text-decoration: underline line-through\n}\n\n.lexical-theme-module_subscript_hdZ01 {\n font-size: .8em;\n vertical-align: sub !important\n}\n\n.lexical-theme-module_superscript_fotk0 {\n font-size: .8em;\n vertical-align: super\n}\n\n.lexical-theme-module_code_XUTW4 {\n background-color: var(--baseBg);\n padding: 1px .25rem;\n font-family: var(--font-mono);\n font-size: 94%\n}\n\n.lexical-theme-module_nestedListItem_LEP2f {\n list-style: none;\n list-style-type: none;\n}\n\n.lexical-theme-module_nestedListItem_LEP2f:before,\n.lexical-theme-module_nestedListItem_LEP2f:after {\n display: none;\n}\n\n.lexical-theme-module_listitem_5mMAE {\n margin: var(--spacing-2) 0;\n}\n\n.lexical-theme-module_listItemChecked_kISPU,\n.lexical-theme-module_listItemUnchecked_GM3vI {\n position: relative;\n margin-left: 0;\n margin-right: 0;\n margin-inline-start: -1rem;\n padding-left: var(--spacing-6);\n padding-right: var(--spacing-6);\n list-style-type: none;\n outline: none;\n}\n\n.lexical-theme-module_listItemChecked_kISPU {\n text-decoration: line-through;\n}\n\n.lexical-theme-module_listItemUnchecked_GM3vI:before,\n.lexical-theme-module_listItemChecked_kISPU:before {\n content: '';\n width: var(--spacing-4);\n height: var(--spacing-4);\n top: 0;\n left: 0;\n cursor: pointer;\n display: block;\n background-size: cover;\n position: absolute;\n}\n\n.lexical-theme-module_listItemUnchecked_GM3vI[dir='rtl']:before,\n.lexical-theme-module_listItemChecked_kISPU[dir='rtl']:before {\n left: auto;\n right: 0;\n}\n\n.lexical-theme-module_listItemUnchecked_GM3vI:focus:before,\n.lexical-theme-module_listItemChecked_kISPU:focus:before {\n box-shadow: 0 0 0 2px var(--accentBgActive);\n border-radius: var(--radius-small);\n}\n\n.lexical-theme-module_listItemUnchecked_GM3vI:before {\n border: 1px solid var(--baseBorder);\n border-radius: var(--radius-small);\n}\n\n.lexical-theme-module_listItemChecked_kISPU:before {\n border: 1px solid var(--accentBorder);\n border-radius: var(--radius-small);\n background-color: var(--accentSolid);\n background-repeat: no-repeat;\n}\n\n.lexical-theme-module_listItemChecked_kISPU:after {\n content: '';\n cursor: pointer;\n border-color: var(--baseBase);\n border-style: solid;\n position: absolute;\n display: block;\n top: var(--spacing-0_5);\n width: var(--spacing-1);\n left: var(--spacing-1_5);\n right: var(--spacing-1_5);\n height: var(--spacing-2);\n transform: rotate(45deg);\n border-width: 0 var(--spacing-0_5) var(--spacing-0_5) 0;\n}\n\n.lexical-theme-module_nestedListItem_LEP2f {\n list-style-type: none;\n}\n\n.lexical-theme-module_nestedListItem_LEP2f:before,\n.lexical-theme-module_nestedListItem_LEP2f:after {\n display: none;\n}\n\n.lexical-theme-module_admonitionDanger_odODu,\n.lexical-theme-module_admonitionInfo_hhpuA,\n.lexical-theme-module_admonitionNote_ipt6L,\n.lexical-theme-module_admonitionTip_Nso9F,\n.lexical-theme-module_admonitionCaution_SoaPW {\n padding: var(--spacing-2);\n margin-top: var(--spacing-2);\n margin-bottom: var(--spacing-2);\n border-left: 3px solid var(--admonitionBorder);\n background-color: var(--admonitionBg);\n}\n\n.lexical-theme-module_admonitionInfo_hhpuA {\n --admonitionBorder: var(--admonitionInfoBorder);\n --admonitionBg: var(--admonitionInfoBg);\n}\n\n.lexical-theme-module_admonitionTip_Nso9F {\n --admonitionBorder: var(--admonitionTipBorder);\n --admonitionBg: var(--admonitionTipBg);\n}\n\n.lexical-theme-module_admonitionCaution_SoaPW {\n --admonitionBorder: var(--admonitionCautionBorder);\n --admonitionBg: var(--admonitionCautionBg);\n}\n\n.lexical-theme-module_admonitionDanger_odODu {\n --admonitionBorder: var(--admonitionDangerBorder);\n --admonitionBg: var(--admonitionDangerBg);\n}\n\n.lexical-theme-module_admonitionNote_ipt6L {\n --admonitionBorder: var(--admonitionNoteBorder);\n --admonitionBg: var(--admonitionNoteBg);\n}\n\n.lexical-theme-module_mdxExpression_uhhzT {\n font-family: var(--font-mono);\n font-size: 84%;\n color: var(--accentText);\n\n & input:focus-visible {\n outline: none;\n }\n}"));
7
+ document.head.appendChild(elementStyle);
8
+ }
9
+ } catch (e) {
10
+ console.error("vite-plugin-css-injected-by-js", e);
11
+ }
12
+ })();
1
13
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
14
  import { createContext, useContext, forwardRef, createElement, useState, useRef, useEffect, useCallback, useMemo } from "react";
3
15
  import { ThemedMonacoWithProvider, ThemedMonacoDiffEditor } from "@principal-ade/industry-themed-monaco-editor";
4
16
  import { headingsPlugin, listsPlugin, quotePlugin, thematicBreakPlugin, markdownShortcutPlugin, linkPlugin, linkDialogPlugin, imagePlugin, tablePlugin, codeBlockPlugin, codeMirrorPlugin, frontmatterPlugin, diffSourcePlugin, toolbarPlugin, DiffSourceToggleWrapper, UndoRedo, BlockTypeSelect, BoldItalicUnderlineToggles, CodeToggle, CreateLink, InsertImage, InsertTable, InsertThematicBreak, ListsToggle, MDXEditor } from "@principal-ai/mdx-editor";
5
- import "@principal-ai/mdx-editor/style.css";
6
17
  var ThemeContext;
7
18
  var getThemeContext = () => {
8
19
  if (typeof window !== "undefined") {
@@ -1 +1 @@
1
- {"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/panels/FileEditorPanel/FileEditorPanel.tsx","../src/panels/GitDiffPanel/GitDiffPanel.tsx","../src/panels/MDXEditorPanel/MDXEditorPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.2,\n tight: 1.05,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\", \"1400px\"],\n sizes: [16, 32, 64, 128, 200, 240, 256, 300, 512, 740, 768, 820, 900, 1024, 1200, 1400, 1536],\n radii: [0, 2, 4, 6, 7, 8, 9, 10, 12, 14, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 4px 12px rgba(0, 194, 255, 0.4)\",\n \"0 6px 24px rgba(0, 194, 255, 0.1)\",\n \"0 8px 32px rgba(0, 0, 0, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50, 1000],\n colors: {\n text: \"#ffffff\",\n background: \"#000000\",\n primary: \"#00C2FF\",\n secondary: \"#0098CC\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 194, 255, 0.15)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 194, 255, 0.2)\",\n backgroundSecondary: \"#0a1628\",\n backgroundTertiary: \"#0f1c2e\",\n backgroundLight: \"rgba(0, 194, 255, 0.04)\",\n backgroundHover: \"rgba(0, 194, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.4)\",\n textSecondary: \"#d1d5db\",\n textTertiary: \"#9ca3af\",\n textMuted: \"#6b7280\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#000000\",\n bg: \"#00C2FF\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#00D9FF\"\n }\n },\n secondary: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 194, 255, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 194, 255, 0.1)\",\n borderColor: \"#00C2FF\"\n }\n },\n ghost: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#00D9FF\",\n bg: \"rgba(0, 194, 255, 0.1)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"#ffffff\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\",\n color: \"text\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 4\n },\n secondary: {\n bg: \"rgba(0, 194, 255, 0.05)\",\n border: \"1px solid\",\n borderColor: \"rgba(0, 194, 255, 0.2)\",\n borderRadius: 4\n }\n }\n};\nvar landingPageLightTheme = {\n ...landingPageTheme,\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#0098CC\",\n secondary: \"#00C2FF\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 152, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 152, 204, 0.2)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 152, 204, 0.03)\",\n backgroundHover: \"rgba(0, 152, 204, 0.05)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"#ffffff\",\n bg: \"#0098CC\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#007aa8\"\n }\n },\n secondary: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 152, 204, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 152, 204, 0.05)\",\n borderColor: \"#0098CC\"\n }\n },\n ghost: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#007aa8\",\n bg: \"rgba(0, 152, 204, 0.05)\"\n }\n }\n }\n};\n\n// src/themes.ts\nvar regalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#f1e8dc\",\n background: \"#1a1f2e\",\n primary: \"#d4a574\",\n secondary: \"#e0b584\",\n accent: \"#c9b8a3\",\n highlight: \"rgba(212, 165, 116, 0.15)\",\n muted: \"#8b7968\",\n success: \"#5c8a72\",\n warning: \"#d4a574\",\n error: \"#a85751\",\n info: \"#d4a574\",\n border: \"rgba(212, 165, 116, 0.2)\",\n backgroundSecondary: \"#212738\",\n backgroundTertiary: \"#2d3446\",\n backgroundLight: \"rgba(212, 165, 116, 0.08)\",\n backgroundHover: \"rgba(212, 165, 116, 0.15)\",\n surface: \"#212738\",\n textSecondary: \"#c9b8a3\",\n textTertiary: \"#8b7968\",\n textMuted: \"#8b7968\",\n highlightBg: \"rgba(255, 193, 7, 0.25)\",\n highlightBorder: \"rgba(255, 193, 7, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"background\",\n bg: \"primary\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"muted\",\n \"&:hover\": {\n bg: \"backgroundSecondary\"\n }\n },\n ghost: {\n color: \"primary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"muted\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"background\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar terminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n heading: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px 0 rgba(0, 0, 0, 0.07)\",\n \"0 8px 12px 0 rgba(0, 0, 0, 0.08)\",\n \"0 16px 24px 0 rgba(0, 0, 0, 0.10)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#e4e4e4\",\n background: \"rgba(10, 10, 10, 0.85)\",\n primary: \"#66b3ff\",\n secondary: \"#80c4ff\",\n accent: \"#66ff99\",\n highlight: \"rgba(102, 179, 255, 0.15)\",\n muted: \"rgba(26, 26, 26, 0.8)\",\n success: \"#66ff99\",\n warning: \"#ffcc66\",\n error: \"#ff6666\",\n info: \"#66b3ff\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"rgba(15, 15, 15, 0.9)\",\n backgroundTertiary: \"rgba(20, 20, 20, 0.9)\",\n backgroundLight: \"rgba(255, 255, 255, 0.05)\",\n backgroundHover: \"rgba(102, 179, 255, 0.08)\",\n surface: \"rgba(15, 15, 15, 0.95)\",\n textSecondary: \"rgba(255, 255, 255, 0.7)\",\n textTertiary: \"rgba(255, 255, 255, 0.5)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n modes: {\n light: {\n text: \"#1a1a1a\",\n background: \"rgba(255, 255, 255, 0.9)\",\n primary: \"#0066cc\",\n secondary: \"#0052a3\",\n accent: \"#00cc88\",\n highlight: \"rgba(0, 102, 204, 0.08)\",\n muted: \"rgba(245, 245, 245, 0.8)\",\n success: \"#00cc88\",\n warning: \"#ffaa00\",\n error: \"#ff3333\",\n info: \"#0066cc\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"rgba(250, 250, 250, 0.9)\",\n backgroundTertiary: \"rgba(245, 245, 245, 0.9)\",\n backgroundLight: \"rgba(0, 0, 0, 0.02)\",\n backgroundHover: \"rgba(0, 102, 204, 0.04)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"rgba(0, 0, 0, 0.6)\",\n textTertiary: \"rgba(0, 0, 0, 0.4)\",\n textMuted: \"rgba(0, 0, 0, 0.3)\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\nvar matrixTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(0, 216, 53, 0.15)\",\n \"0 0 10px rgba(0, 216, 53, 0.2)\",\n \"0 0 15px rgba(0, 216, 53, 0.25)\",\n \"0 0 20px rgba(0, 216, 53, 0.3)\",\n \"0 0 30px rgba(0, 216, 53, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#00d835\",\n secondary: \"#00a828\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.15)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(0, 216, 53, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(0, 216, 53, 0.03)\",\n backgroundHover: \"rgba(0, 216, 53, 0.08)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.25)\",\n highlightBorder: \"rgba(0, 216, 53, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar matrixMinimalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 0 20px rgba(0, 216, 53, 0.1)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#b8b8b8\",\n secondary: \"#909090\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.1)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(184, 184, 184, 0.1)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(184, 184, 184, 0.02)\",\n backgroundHover: \"rgba(0, 216, 53, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.2)\",\n highlightBorder: \"rgba(0, 216, 53, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar slateTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.2)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.2)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.2)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.25)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#9ca3af\",\n background: \"#1a1c1e\",\n primary: \"#d1d5db\",\n secondary: \"#6b7280\",\n accent: \"#f59e0b\",\n highlight: \"rgba(209, 213, 219, 0.15)\",\n muted: \"#2d3134\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n info: \"#3b82f6\",\n border: \"rgba(156, 163, 175, 0.15)\",\n backgroundSecondary: \"#22252a\",\n backgroundTertiary: \"#2d3134\",\n backgroundLight: \"rgba(156, 163, 175, 0.05)\",\n backgroundHover: \"rgba(156, 163, 175, 0.1)\",\n surface: \"#1f2124\",\n textSecondary: \"#e5e7eb\",\n textTertiary: \"#6b7280\",\n textMuted: \"#4b5563\",\n highlightBg: \"rgba(245, 158, 11, 0.25)\",\n highlightBorder: \"rgba(245, 158, 11, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#1a1c1e\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#9ca3af\"\n }\n },\n secondary: {\n color: \"#e5e7eb\",\n bg: \"secondary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#4b5563\"\n }\n },\n ghost: {\n color: \"textSecondary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"textSecondary\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textTertiary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/ThemeProvider.tsx\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\n\n// src/themeHelpers.ts\nfunction overrideColors(theme, colors) {\n return {\n ...theme,\n colors: {\n ...theme.colors,\n ...colors\n }\n };\n}\nfunction makeTheme(baseTheme, overrides) {\n return {\n ...baseTheme,\n ...overrides,\n colors: {\n ...baseTheme.colors,\n ...overrides.colors\n },\n fonts: {\n ...baseTheme.fonts,\n ...overrides.fonts\n }\n };\n}\nfunction addMode(theme, modeName, colors, baseMode) {\n let baseColors;\n if (baseMode && theme.modes && theme.modes[baseMode]) {\n baseColors = {\n ...theme.colors,\n ...theme.modes[baseMode]\n };\n } else {\n baseColors = theme.colors;\n }\n const newMode = {\n ...baseColors,\n ...colors\n };\n return {\n ...theme,\n modes: {\n ...theme.modes,\n [modeName]: newMode\n }\n };\n}\nfunction getMode(theme, mode) {\n if (!mode || !theme.modes || !theme.modes[mode]) {\n return theme.colors;\n }\n return {\n ...theme.colors,\n ...theme.modes[mode]\n };\n}\n\n// src/ThemeProvider.tsx\nvar ThemeContext;\nvar getThemeContext = () => {\n if (typeof window !== \"undefined\") {\n const globalWindow = window;\n if (!globalWindow.__principlemd_theme_context__) {\n globalWindow.__principlemd_theme_context__ = createContext(undefined);\n }\n return globalWindow.__principlemd_theme_context__;\n } else {\n if (!ThemeContext) {\n ThemeContext = createContext(undefined);\n }\n return ThemeContext;\n }\n};\nvar ThemeContextSingleton = getThemeContext();\nvar useTheme = () => {\n const context = useContext(ThemeContextSingleton);\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\nvar ThemeProvider = ({\n children,\n theme: customTheme = theme,\n initialMode\n}) => {\n const [mode, setMode] = useState(initialMode);\n const activeTheme = React.useMemo(() => {\n if (!mode || !customTheme.modes || !customTheme.modes[mode]) {\n return customTheme;\n }\n return {\n ...customTheme,\n colors: getMode(customTheme, mode)\n };\n }, [customTheme, mode]);\n useEffect(() => {\n if (!initialMode) {\n const savedMode = localStorage.getItem(\"principlemd-theme-mode\");\n if (savedMode) {\n setMode(savedMode);\n }\n }\n }, [initialMode]);\n useEffect(() => {\n if (mode) {\n localStorage.setItem(\"principlemd-theme-mode\", mode);\n } else {\n localStorage.removeItem(\"principlemd-theme-mode\");\n }\n }, [mode]);\n const value = {\n theme: activeTheme,\n mode,\n setMode\n };\n return /* @__PURE__ */ React.createElement(ThemeContextSingleton.Provider, {\n value\n }, children);\n};\nvar withTheme = (Component) => {\n return (props) => {\n const { theme: theme2 } = useTheme();\n return /* @__PURE__ */ React.createElement(Component, {\n ...props,\n theme: theme2\n });\n };\n};\n// src/utils.ts\nvar getColor = (theme2, colorKey) => {\n const colors = theme2.colors;\n const value = colors[colorKey];\n return typeof value === \"string\" ? value : colorKey;\n};\nvar getSpace = (theme2, index) => {\n return theme2.space[index] || 0;\n};\nvar getFontSize = (theme2, index) => {\n return theme2.fontSizes[index] || theme2.fontSizes[2];\n};\nvar getRadius = (theme2, index) => {\n return theme2.radii[index] || 0;\n};\nvar getShadow = (theme2, index) => {\n return theme2.shadows[index] || \"none\";\n};\nvar getZIndex = (theme2, index) => {\n return theme2.zIndices[index] || 0;\n};\nvar responsive = (values) => {\n return values.reduce((acc, value, index) => {\n if (index === 0) {\n return value;\n }\n return {\n ...acc,\n [`@media screen and (min-width: ${values[index - 1]})`]: value\n };\n }, {});\n};\nvar sx = (styles) => styles;\nvar createStyle = (theme2, styleObj) => {\n const processValue = (value) => {\n if (typeof value === \"string\") {\n if (value in theme2.colors) {\n return getColor(theme2, value);\n }\n return value;\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(processValue);\n }\n if (typeof value === \"object\" && value !== null) {\n const processed2 = {};\n for (const [key, val] of Object.entries(value)) {\n processed2[key] = processValue(val);\n }\n return processed2;\n }\n return value;\n };\n const processed = {};\n for (const [key, val] of Object.entries(styleObj)) {\n processed[key] = processValue(val);\n }\n return processed;\n};\nvar mergeThemes = (baseTheme, ...overrides) => {\n return overrides.reduce((theme2, override) => ({\n space: override.space || theme2.space,\n fonts: { ...theme2.fonts, ...override.fonts || {} },\n fontSizes: override.fontSizes || theme2.fontSizes,\n fontWeights: { ...theme2.fontWeights, ...override.fontWeights || {} },\n lineHeights: { ...theme2.lineHeights, ...override.lineHeights || {} },\n breakpoints: override.breakpoints || theme2.breakpoints,\n sizes: override.sizes || theme2.sizes,\n radii: override.radii || theme2.radii,\n shadows: override.shadows || theme2.shadows,\n zIndices: override.zIndices || theme2.zIndices,\n colors: {\n ...theme2.colors,\n ...override.colors || {}\n },\n buttons: { ...theme2.buttons, ...override.buttons || {} },\n text: { ...theme2.text, ...override.text || {} },\n cards: { ...theme2.cards, ...override.cards || {} }\n }), baseTheme);\n};\n// src/ThemeShowcase.tsx\nimport React2 from \"react\";\nvar ThemeShowcase = ({\n theme: theme2,\n title,\n showValues = true,\n sections = [\"colors\", \"typography\", \"spacing\", \"shadows\", \"radii\"]\n}) => {\n const containerStyle = {\n fontFamily: theme2.fonts.body,\n color: theme2.colors.text,\n backgroundColor: theme2.colors.background,\n padding: theme2.space[4],\n minHeight: \"100vh\"\n };\n const sectionStyle = {\n marginBottom: theme2.space[5],\n padding: theme2.space[4],\n backgroundColor: theme2.colors.surface || theme2.colors.backgroundSecondary,\n borderRadius: theme2.radii[2],\n border: `1px solid ${theme2.colors.border}`\n };\n const headingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[5],\n fontWeight: theme2.fontWeights.heading,\n marginBottom: theme2.space[3],\n color: theme2.colors.primary\n };\n const subheadingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[3],\n fontWeight: theme2.fontWeights.medium,\n marginBottom: theme2.space[2],\n marginTop: theme2.space[3],\n color: theme2.colors.text\n };\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: containerStyle\n }, title && /* @__PURE__ */ React2.createElement(\"h1\", {\n style: {\n ...headingStyle,\n fontSize: theme2.fontSizes[6],\n marginBottom: theme2.space[4]\n }\n }, title), sections.includes(\"colors\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Colors\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Primary Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"text\", \"background\", \"primary\", \"secondary\", \"accent\", \"muted\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Status Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"success\", \"warning\", \"error\", \"info\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Background Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3]\n }\n }, [\"backgroundSecondary\", \"backgroundTertiary\", \"backgroundLight\", \"backgroundHover\", \"surface\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n padding: theme2.space[3],\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary,\n marginTop: theme2.space[1]\n }\n }, color));\n }))), sections.includes(\"typography\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Typography\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Families\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[4],\n marginBottom: theme2.space[2]\n }\n }, \"Heading Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.heading)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[2],\n marginBottom: theme2.space[2]\n }\n }, \"Body Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.body)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[2]\n }\n }, \"Monospace Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.monospace))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Sizes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, theme2.fontSizes.map((size, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: {\n fontSize: size,\n lineHeight: theme2.lineHeights.body,\n marginBottom: theme2.space[1]\n }\n }, \"Size \", index, \": Sample Text \", showValues && `(${size}px)`))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Weights\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(150px, 1fr))\",\n gap: theme2.space[2]\n }\n }, Object.entries(theme2.fontWeights).map(([name, weight]) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: name,\n style: {\n fontWeight: weight,\n fontSize: theme2.fontSizes[2]\n }\n }, name, \" \", showValues && `(${weight})`)))), sections.includes(\"spacing\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Spacing\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", gap: theme2.space[2] }\n }, theme2.space.map((space, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { display: \"flex\", alignItems: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 60,\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"]\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n height: 24,\n width: space,\n backgroundColor: theme2.colors.primary,\n borderRadius: theme2.radii[1]\n }\n }), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n marginLeft: theme2.space[2],\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, space, \"px\"))))), sections.includes(\"radii\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Border Radii\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(100px, 1fr))\",\n gap: theme2.space[3]\n }\n }, theme2.radii.map((radius, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 80,\n height: 80,\n backgroundColor: theme2.colors.primary,\n borderRadius: radius,\n marginBottom: theme2.space[1],\n margin: \"0 auto\"\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"] \", showValues && `${radius}px`))))), sections.includes(\"shadows\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Shadows\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(150px, 1fr))\",\n gap: theme2.space[4]\n }\n }, theme2.shadows.map((shadow, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 100,\n height: 100,\n backgroundColor: theme2.colors.background,\n boxShadow: shadow,\n borderRadius: theme2.radii[2],\n margin: \"0 auto\",\n marginBottom: theme2.space[2],\n border: `1px solid ${theme2.colors.border}`\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"Shadow [\", index, \"]\"), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textMuted,\n marginTop: theme2.space[1]\n }\n }, shadow === \"none\" ? \"none\" : \"...\"))))), theme2.modes && Object.keys(theme2.modes).length > 0 && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Available Modes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: theme2.space[2],\n flexWrap: \"wrap\"\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.primary,\n color: \"#ffffff\",\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, \"default\"), Object.keys(theme2.modes).map((modeName) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: modeName,\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.secondary,\n color: theme2.colors.text,\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, modeName)))));\n};\n\n// src/index.ts\nvar theme = terminalTheme;\nfunction scaleThemeFonts(theme2, scale) {\n const currentScale = theme2.fontScale || 1;\n const effectiveScale = scale / currentScale;\n return {\n ...theme2,\n fontSizes: theme2.fontSizes.map((size) => Math.round(size * effectiveScale)),\n fontScale: scale\n };\n}\nfunction increaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.min(currentScale * 1.1, 2);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction decreaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.max(currentScale * 0.9, 0.5);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction resetFontScale(theme2) {\n return scaleThemeFonts(theme2, 1);\n}\nvar src_default = theme;\nexport {\n withTheme,\n useTheme,\n theme,\n terminalTheme,\n sx,\n slateTheme,\n scaleThemeFonts,\n responsive,\n resetFontScale,\n regalTheme,\n overrideColors,\n mergeThemes,\n matrixTheme,\n matrixMinimalTheme,\n makeTheme,\n landingPageTheme,\n landingPageLightTheme,\n increaseFontScale,\n glassmorphismTheme,\n getZIndex,\n getSpace,\n getShadow,\n getRadius,\n getMode,\n getFontSize,\n getColor,\n defaultTerminalTheme,\n defaultMarkdownTheme,\n defaultEditorTheme,\n src_default as default,\n decreaseFontScale,\n createStyle,\n addMode,\n ThemeShowcase,\n ThemeProvider\n};\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n];\nconst GitCommitHorizontal = createLucideIcon(\"git-commit-horizontal\", __iconNode);\n\nexport { __iconNode, GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoWithProvider } from '@principal-ade/industry-themed-monaco-editor';\nimport { FileText, X } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * User preferences slice shape\n */\ninterface UserPreferences {\n vimMode?: boolean;\n // other preferences...\n}\n\n/**\n * Extended props for FileEditorPanel with optional prop-controlled mode\n */\nexport interface FileEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\nconst getLanguage = (path: string): string => {\n const ext = path.split('.').pop()?.toLowerCase() || '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n cs: 'csharp',\n php: 'php',\n rb: 'ruby',\n go: 'go',\n rs: 'rust',\n kt: 'kotlin',\n swift: 'swift',\n json: 'json',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sql: 'sql',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n md: 'markdown',\n mdx: 'markdown',\n };\n return languageMap[ext] || 'plaintext';\n};\n\n/**\n * FileEditorPanelContent - Internal component that uses theme\n */\nconst FileEditorPanelContent: React.FC<FileEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [fileContent, setFileContent] = useState<string>('');\n const [editorContent, setEditorContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<string | null>(null);\n const latestFilePathRef = useRef<string | null>(null);\n const isSavingRef = useRef(false);\n const isDirtyRef = useRef(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Get user preferences (vim mode, etc.)\n const preferencesSlice = context.getSlice<UserPreferences>('preferences');\n const vimMode = preferencesSlice?.data?.vimMode ?? false;\n\n useEffect(() => {\n isDirtyRef.current = isDirty;\n }, [isDirty]);\n\n useEffect(() => {\n isDirtyRef.current = false;\n setIsDirty(false);\n setIsSaving(false);\n isSavingRef.current = false;\n setSaveError(null);\n }, [filePath]);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[FileEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp && activeFileSlice?.data?.path) {\n setFilePath(activeFileSlice.data.path);\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n setFilePath(payload.path);\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n const loadFile = useCallback(async () => {\n if (!filePath || !fileSystem?.readFile) {\n latestFilePathRef.current = null;\n setFileContent('');\n setEditorContent('');\n setIsDirty(false);\n setIsSaving(false);\n setSaveError(null);\n return;\n }\n\n latestFilePathRef.current = filePath;\n setIsLoading(true);\n setError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (latestFilePathRef.current !== filePath) {\n return;\n }\n\n if (content !== null) {\n setFileContent(content);\n setSaveError(null);\n if (!isDirtyRef.current) {\n setEditorContent(content);\n setIsDirty(false);\n }\n } else {\n throw new Error('Failed to read file');\n }\n } catch (err) {\n console.error('Error loading file:', err);\n if (latestFilePathRef.current === filePath) {\n setError(err instanceof Error ? err.message : 'Failed to load file');\n setFileContent('');\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsLoading(false);\n }\n }\n }, [filePath, fileSystem]);\n\n useEffect(() => {\n loadFile();\n }, [loadFile]);\n\n const handleEditorChange = useCallback(\n (value?: string) => {\n const nextValue = value ?? '';\n setEditorContent(nextValue);\n setIsDirty(nextValue !== fileContent);\n if (saveError) {\n setSaveError(null);\n }\n },\n [fileContent, saveError]\n );\n\n const handleEditorSave = useCallback(\n async (value?: string) => {\n if (!filePath || !fileSystem?.writeFile) {\n return;\n }\n\n const contentToSave = value ?? editorContent;\n\n if (!isDirty && contentToSave === fileContent) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setSaveError(null);\n\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n\n if (latestFilePathRef.current === filePath) {\n setFileContent(contentToSave);\n setEditorContent(contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n }\n } catch (err) {\n if (latestFilePathRef.current === filePath) {\n setSaveError(\n err instanceof Error ? err.message : 'Failed to save file'\n );\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsSaving(false);\n }\n isSavingRef.current = false;\n }\n },\n [editorContent, fileContent, filePath, isDirty, fileSystem, events]\n );\n\n const handleClose = useCallback(() => {\n events.emit({\n type: 'file:close',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n }, [events, filePath]);\n\n const fileName = filePath?.split('/').pop() || filePath || '';\n const language = filePath ? getLanguage(filePath) : 'plaintext';\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n color: theme.colors.textSecondary,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <div\n style={{\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n marginBottom: '12px',\n color: theme.colors.text,\n }}\n >\n File Editor\n </div>\n <div style={{ fontSize: theme.fontSizes[1] }}>\n Select a file to view or edit\n </div>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n {/* Header */}\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <FileText\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {fileName}\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n {isEditable && (\n <>\n {saveError ? (\n <span\n style={{\n color: theme.colors.error,\n fontSize: theme.fontSizes[0],\n }}\n >\n Save failed: {saveError}\n </span>\n ) : isSaving ? (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saving...\n </span>\n ) : isDirty ? (\n <span\n style={{\n color: theme.colors.primary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Unsaved changes\n </span>\n ) : (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saved\n </span>\n )}\n <button\n onClick={() => void handleEditorSave()}\n disabled={!isDirty || isSaving}\n style={{\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n border: 'none',\n borderRadius: '4px',\n padding: '6px 10px',\n fontSize: theme.fontSizes[0],\n cursor: !isDirty || isSaving ? 'not-allowed' : 'pointer',\n opacity: !isDirty || isSaving ? 0.6 : 1,\n transition: 'opacity 0.2s ease',\n }}\n >\n Save\n </button>\n </>\n )}\n {filePath && showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundSecondary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n Error: {error}\n </div>\n ) : (\n <ThemedMonacoWithProvider\n value={editorContent}\n language={language}\n vimMode={isEditable ? vimMode : false}\n options={{\n readOnly: !isEditable,\n minimap: { enabled: false },\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n fontSize: theme.fontSizes[2],\n automaticLayout: true,\n folding: true,\n renderWhitespace: 'selection',\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n useShadows: false,\n verticalScrollbarSize: 10,\n horizontalScrollbarSize: 10,\n },\n }}\n height=\"100%\"\n onChange={isEditable ? handleEditorChange : undefined}\n onSave={isEditable ? handleEditorSave : undefined}\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * FileEditorPanel - Monaco-based code editor with vim mode support.\n *\n * This panel provides:\n * - Syntax highlighting for many languages\n * - File editing with save support\n * - Dirty state tracking\n * - Integration with panel framework events\n */\nexport const FileEditorPanel: React.FC<FileEditorPanelProps> = (props) => {\n return <FileEditorPanelContent {...props} />;\n};\n\nexport const FileEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div>\n <span style={{ color: '#c678dd' }}>export</span>{' '}\n <span style={{ color: '#61afef' }}>function</span>{' '}\n <span style={{ color: '#e5c07b' }}>hello</span>() {'{'}\n </div>\n <div style={{ paddingLeft: '12px' }}>\n console.<span style={{ color: '#61afef' }}>log</span>(\n <span style={{ color: '#98c379' }}>'Hello'</span>);\n </div>\n <div>{'}'}</div>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoDiffEditor } from '@principal-ade/industry-themed-monaco-editor';\nimport { GitCommit, X } from 'lucide-react';\n\nimport type { PanelComponentProps, GitChangeStatus } from '../../types';\n\nconst statusMeta: Record<\n GitChangeStatus,\n { label: string; description: string }\n> = {\n staged: {\n label: 'Staged change',\n description: 'Comparing staged changes against the last commit',\n },\n unstaged: {\n label: 'Unstaged change',\n description: 'Comparing working tree changes against the last commit',\n },\n untracked: {\n label: 'Untracked file',\n description: 'New file compared against an empty baseline',\n },\n deleted: {\n label: 'Deleted file',\n description: 'Showing the last committed contents of the deleted file',\n },\n};\n\nconst languageFromPath = (filePath: string | null): string => {\n if (!filePath) {\n return 'plaintext';\n }\n\n const ext = filePath.split('.').pop()?.toLowerCase() ?? '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n h: 'c',\n hpp: 'cpp',\n cs: 'csharp',\n go: 'go',\n rs: 'rust',\n php: 'php',\n rb: 'ruby',\n swift: 'swift',\n kt: 'kotlin',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n md: 'markdown',\n mdx: 'markdown',\n sql: 'sql',\n };\n\n return languageMap[ext] ?? 'plaintext';\n};\n\ninterface GitDiffPayload {\n path: string;\n status?: GitChangeStatus;\n original?: string;\n modified?: string;\n}\n\n/**\n * Extended props for GitDiffPanel with optional prop-controlled mode\n */\nexport interface GitDiffPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display diff for.\n * If provided, this takes precedence over event-based selection.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Optional git status for the file.\n * Used together with filePath in prop-controlled mode.\n */\n gitStatus?: GitChangeStatus;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * GitDiffPanelContent - Internal component that uses theme\n */\nconst GitDiffPanelContent: React.FC<GitDiffPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n gitStatus: gitStatusProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [status, setStatus] = useState<GitChangeStatus>('unstaged');\n const [originalContent, setOriginalContent] = useState<string>('');\n const [modifiedContent, setModifiedContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const language = useMemo(() => languageFromPath(filePath), [filePath]);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[GitDiffPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n setStatus(gitStatusProp || 'unstaged');\n }\n }, [filePathProp, gitStatusProp]);\n\n // Listen for git:diff events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('git:diff', (event) => {\n const payload = event.payload as GitDiffPayload;\n if (payload?.path) {\n setFilePath(payload.path);\n setStatus(payload.status || 'unstaged');\n // If content is provided directly, use it\n if (payload.original !== undefined || payload.modified !== undefined) {\n setOriginalContent(payload.original ?? '');\n setModifiedContent(payload.modified ?? '');\n setIsLoading(false);\n setError(null);\n }\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n // Load diff content when file path changes\n useEffect(() => {\n let isActive = true;\n\n const loadDiff = async () => {\n if (!filePath) {\n setOriginalContent('');\n setModifiedContent('');\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // If we don't have a file system adapter, we can't load content\n if (!fileSystem?.readFile) {\n // Content should be provided via events\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // For now, read the current file content as \"modified\"\n // The \"original\" would need to come from git or be provided via events\n const modified = await fileSystem.readFile(filePath);\n\n if (!isActive) return;\n\n setModifiedContent(modified ?? '');\n // Original content should be provided via git:diff event payload\n // or we leave it empty for new files\n if (status === 'untracked') {\n setOriginalContent('');\n }\n } catch (err) {\n if (!isActive) return;\n\n console.error('Failed to load git diff:', err);\n setError(\n err instanceof Error\n ? `Failed to load diff: ${err.message}`\n : 'Failed to load diff'\n );\n setOriginalContent('');\n setModifiedContent('');\n } finally {\n if (isActive) {\n setIsLoading(false);\n }\n }\n };\n\n void loadDiff();\n\n return () => {\n isActive = false;\n };\n }, [filePath, status, fileSystem]);\n\n const handleClose = () => {\n events.emit({\n type: 'git:diff:close',\n source: 'industry-theme.git-diff',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n };\n\n const statusInfo = status ? statusMeta[status] : null;\n const statusColor = useMemo(() => {\n if (!status) return theme.colors.textSecondary;\n\n switch (status) {\n case 'staged':\n return theme.colors.success || '#10b981';\n case 'unstaged':\n return theme.colors.warning || '#f59e0b';\n case 'untracked':\n return theme.colors.info || theme.colors.primary || '#3b82f6';\n case 'deleted':\n return theme.colors.error || '#ef4444';\n default:\n return theme.colors.textSecondary;\n }\n }, [status, theme.colors]);\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a file from Git Changes to view its diff.\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <GitCommit\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {filePath?.split('/').pop() || filePath}\n </div>\n {statusInfo && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n fontSize: theme.fontSizes[0],\n padding: '2px 8px',\n borderRadius: '999px',\n backgroundColor: `${statusColor}20`,\n color: statusColor,\n border: `1px solid ${statusColor}60`,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n {statusInfo.label}\n </span>\n )}\n </div>\n {showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading diff...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </div>\n ) : (\n <ThemedMonacoDiffEditor\n theme={theme}\n original={originalContent}\n modified={modifiedContent}\n language={language}\n height=\"100%\"\n options={{\n renderSideBySide: true,\n readOnly: true,\n minimap: { enabled: false },\n automaticLayout: true,\n renderIndicators: true,\n renderMarginRevertIcon: true,\n ignoreTrimWhitespace: false,\n diffAlgorithm: 'advanced',\n scrollbar: {\n useShadows: false,\n vertical: 'auto',\n horizontal: 'auto',\n },\n }}\n loadingComponent={\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Preparing diff editor...\n </div>\n }\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * GitDiffPanel - Side-by-side git diff viewer.\n *\n * This panel shows:\n * - Side-by-side comparison of original vs modified content\n * - Status indicators for staged/unstaged/untracked/deleted files\n * - Syntax highlighting based on file type\n */\nexport const GitDiffPanel: React.FC<GitDiffPanelProps> = (props) => {\n return <GitDiffPanelContent {...props} />;\n};\n\nexport const GitDiffPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '8px',\n }}\n >\n <span style={{ color: theme.colors.textSecondary }}>@@ 12,5 @@</span>\n </div>\n <div style={{ color: '#ef4444' }}>- const count = oldValue;</div>\n <div style={{ color: '#22c55e' }}>+ const count = newValue;</div>\n <div style={{ color: theme.colors.textSecondary }}> return count;</div>\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport {\n headingsPlugin,\n listsPlugin,\n quotePlugin,\n thematicBreakPlugin,\n markdownShortcutPlugin,\n linkPlugin,\n linkDialogPlugin,\n imagePlugin,\n tablePlugin,\n codeBlockPlugin,\n codeMirrorPlugin,\n diffSourcePlugin,\n frontmatterPlugin,\n toolbarPlugin,\n UndoRedo,\n BoldItalicUnderlineToggles,\n CodeToggle,\n CreateLink,\n InsertImage,\n InsertTable,\n InsertThematicBreak,\n ListsToggle,\n BlockTypeSelect,\n DiffSourceToggleWrapper,\n MDXEditor,\n} from '@principal-ai/mdx-editor';\nimport '@principal-ai/mdx-editor/style.css';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { FileText } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * Extended props for MDXEditorPanel with optional prop-controlled mode\n */\nexport interface MDXEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * MDXEditorPanelContent - Internal component that uses theme\n */\nconst MDXEditorPanelContent: React.FC<MDXEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [markdown, setMarkdown] = useState('');\n const [isMounted, setIsMounted] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [parseError, setParseError] = useState<string | null>(null);\n const [_isDirty, setIsDirty] = useState<boolean>(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Memoize plugins array for performance\n const plugins = useMemo(\n () => [\n headingsPlugin(),\n listsPlugin(),\n quotePlugin(),\n thematicBreakPlugin(),\n markdownShortcutPlugin(),\n linkPlugin(),\n linkDialogPlugin(),\n imagePlugin({\n imageUploadHandler: async (file) => {\n console.warn('Image upload not configured:', file.name);\n return '/placeholder-image.png';\n },\n }),\n tablePlugin(),\n codeBlockPlugin({ defaultCodeBlockLanguage: 'javascript' }),\n codeMirrorPlugin({\n codeBlockLanguages: {\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n tsx: 'TypeScript (JSX)',\n jsx: 'JavaScript (JSX)',\n python: 'Python',\n java: 'Java',\n go: 'Go',\n rust: 'Rust',\n cpp: 'C++',\n c: 'C',\n css: 'CSS',\n html: 'HTML',\n json: 'JSON',\n yaml: 'YAML',\n markdown: 'Markdown',\n bash: 'Bash',\n shell: 'Shell',\n sql: 'SQL',\n },\n }),\n frontmatterPlugin(),\n diffSourcePlugin({\n viewMode: parseError ? 'source' : 'rich-text',\n }),\n toolbarPlugin({\n toolbarContents: () => (\n <>\n <DiffSourceToggleWrapper>\n <UndoRedo />\n <BlockTypeSelect />\n <BoldItalicUnderlineToggles />\n <CodeToggle />\n <CreateLink />\n <InsertImage />\n <InsertTable />\n <InsertThematicBreak />\n <ListsToggle />\n </DiffSourceToggleWrapper>\n </>\n ),\n }),\n ],\n [parseError]\n );\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[MDXEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only for markdown files, only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp) {\n const path = activeFileSlice?.data?.path;\n if (path && (path.endsWith('.md') || path.endsWith('.mdx'))) {\n setFilePath(path);\n }\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only handle markdown files, only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n const path = payload.path;\n if (path.endsWith('.md') || path.endsWith('.mdx')) {\n setFilePath(path);\n }\n }\n });\n return unsubscribe;\n }, [filePathProp, events]);\n\n const handleChange = useCallback((value: string) => {\n setMarkdown(value);\n setIsDirty(true);\n setParseError(null);\n }, []);\n\n const handleSave = useCallback(\n async (content?: string) => {\n const contentToSave = content || markdown;\n\n if (filePath && fileSystem?.writeFile) {\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.mdx-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n } catch (error) {\n console.error('Error saving file:', error);\n }\n }\n },\n [markdown, filePath, fileSystem, events]\n );\n\n // Load file content when filePath changes\n useEffect(() => {\n const loadFileContent = async () => {\n if (!filePath || !fileSystem?.readFile) {\n setMarkdown('');\n return;\n }\n\n setIsLoading(true);\n setLoadError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (content !== null) {\n setMarkdown(content);\n setParseError(null);\n setIsDirty(false);\n } else {\n throw new Error('Failed to read file');\n }\n } catch (error) {\n console.error('Error loading file:', error);\n setLoadError(`Failed to load file: ${filePath}`);\n setMarkdown('');\n setParseError(null);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadFileContent();\n }, [filePath, fileSystem]);\n\n // Handle keyboard shortcuts for save\n useEffect(() => {\n if (!isEditable) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault();\n handleSave();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isEditable, handleSave]);\n\n if (!isMounted) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading editor...\n </div>\n );\n }\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n );\n }\n\n if (loadError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <div style={{ marginBottom: '10px' }}>Warning</div>\n <div>{loadError}</div>\n </div>\n );\n }\n\n if (!filePath) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.textSecondary,\n padding: '40px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n color: theme.colors.text,\n }}\n >\n No File Selected\n </h3>\n <p\n style={{\n margin: 0,\n fontSize: theme.fontSizes[2],\n maxWidth: '400px',\n }}\n >\n Select a markdown file (.md or .mdx) to start editing\n </p>\n </div>\n );\n }\n\n const safeMarkdown =\n typeof markdown === 'string' ? markdown : String(markdown || '');\n\n const editorContent = (\n <div\n style={{\n height: '100%',\n width: '100%',\n }}\n >\n <MDXEditor\n key={filePath || 'default'}\n markdown={safeMarkdown}\n onChange={handleChange}\n readOnly={!isEditable}\n contentEditableClassName=\"prose\"\n plugins={plugins}\n />\n </div>\n );\n\n if (parseError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n backgroundColor: theme.colors.warning || '#f59e0b',\n color: theme.colors.background,\n fontSize: theme.fontSizes[2],\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span>Warning</span>\n <span>\n {parseError} - Switch to source mode using the toolbar button to\n edit the raw markdown.\n </span>\n </div>\n <div style={{ flex: 1 }}>{editorContent}</div>\n </div>\n );\n }\n\n return editorContent;\n};\n\n/**\n * MDXEditorPanel - Rich markdown/MDX editor.\n *\n * This panel provides:\n * - WYSIWYG markdown editing\n * - Code block support with syntax highlighting\n * - Image and table insertion\n * - Source mode for raw markdown editing\n */\nexport const MDXEditorPanel: React.FC<MDXEditorPanelProps> = (props) => {\n return <MDXEditorPanelContent {...props} />;\n};\n\nexport const MDXEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n return (\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n padding: '20px',\n }}\n >\n <FileText size={32} style={{ marginBottom: '12px', opacity: 0.6 }} />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n marginBottom: '4px',\n }}\n >\n MDX Editor\n </div>\n <div\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n textAlign: 'center',\n }}\n >\n Rich markdown editor with live preview\n </div>\n </div>\n );\n};\n","/**\n * Panel Tools\n *\n * UTCP-compatible tools for file editing panels.\n * These tools can be invoked by AI agents and emit events that panels listen for.\n *\n * IMPORTANT: This file should NOT import any React components to ensure\n * it can be imported server-side without pulling in React dependencies.\n * Use the './tools' subpath export for server-safe imports.\n */\n\nimport type {\n PanelTool,\n PanelToolsMetadata,\n} from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: Open File in Editor\n */\nexport const openFileTool: PanelTool = {\n name: 'open_file',\n description: 'Opens a file in the file editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['file', 'editor', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-file',\n },\n};\n\n/**\n * Tool: View Git Diff\n */\nexport const viewDiffTool: PanelTool = {\n name: 'view_diff',\n description: 'Opens a file in the git diff panel to view changes',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to diff',\n },\n status: {\n type: 'string',\n enum: ['staged', 'unstaged', 'untracked', 'deleted'],\n description: 'The git status of the file',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['git', 'diff', 'view'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:view-diff',\n },\n};\n\n/**\n * Tool: Open Markdown Editor\n */\nexport const openMarkdownTool: PanelTool = {\n name: 'open_markdown',\n description: 'Opens a markdown file in the MDX editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the markdown file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['markdown', 'mdx', 'editor'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-markdown',\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const fileEditingPanelTools: PanelTool[] = [\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const fileEditingPanelToolsMetadata: PanelToolsMetadata = {\n id: 'industry-theme.file-editing-panels',\n name: 'File Editing Panels',\n description: 'Tools for file editing, git diff viewing, and markdown editing',\n tools: fileEditingPanelTools,\n};\n","/**\n * @industry-theme/file-editing-panels\n *\n * Git diff view and editor panels for dev workspaces.\n * These panels use the panel framework pattern with PanelComponentProps.\n */\n\nimport { FileEditorPanel } from './panels/FileEditorPanel';\nimport { GitDiffPanel } from './panels/GitDiffPanel';\nimport { MDXEditorPanel } from './panels/MDXEditorPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { fileEditingPanelTools, fileEditingPanelToolsMetadata } from './tools';\n\n/**\n * Export array of panel definitions.\n * This is the required export for panel extensions.\n */\nexport const panels: PanelDefinition[] = [\n {\n metadata: {\n id: 'industry-theme.file-editor',\n name: 'File Editor',\n icon: '📝',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Monaco-based code editor with syntax highlighting',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[0]], // openFileTool\n },\n component: FileEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'File Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('File Editor Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.git-diff',\n name: 'Git Diff',\n icon: '🔀',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Side-by-side git diff viewer',\n slices: ['git', 'fileTree'],\n tools: [fileEditingPanelTools[1]], // viewDiffTool\n },\n component: GitDiffPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'Git Diff Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Diff Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.mdx-editor',\n name: 'MDX Editor',\n icon: '📄',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Rich markdown/MDX editor with live preview',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[2]], // openMarkdownTool\n },\n component: MDXEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'MDX Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('MDX Editor Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n * Use this for package-level initialization.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package loaded - File Editing Panels');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - File Editing Panels');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/file-editing-panels/tools' to import without React dependencies.\n */\nexport {\n fileEditingPanelTools,\n fileEditingPanelToolsMetadata,\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n} from './tools';\n\n// Re-export panel components for direct usage\nexport { FileEditorPanel, FileEditorPanelPreview } from './panels/FileEditorPanel';\nexport { GitDiffPanel, GitDiffPanelPreview } from './panels/GitDiffPanel';\nexport { MDXEditorPanel, MDXEditorPanelPreview } from './panels/MDXEditorPanel';\n\n// Re-export types\nexport type { GitChangeStatus } from './types';\n\n// Re-export framework types for convenience\nexport type {\n PanelDefinition,\n PanelContextValue,\n PanelMetadata,\n PanelComponentProps,\n} from './types';\n"],"names":["__iconNode","_a","GitCommit"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
1
+ {"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/panels/FileEditorPanel/FileEditorPanel.tsx","../src/panels/GitDiffPanel/GitDiffPanel.tsx","../src/panels/MDXEditorPanel/MDXEditorPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.2,\n tight: 1.05,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\", \"1400px\"],\n sizes: [16, 32, 64, 128, 200, 240, 256, 300, 512, 740, 768, 820, 900, 1024, 1200, 1400, 1536],\n radii: [0, 2, 4, 6, 7, 8, 9, 10, 12, 14, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 4px 12px rgba(0, 194, 255, 0.4)\",\n \"0 6px 24px rgba(0, 194, 255, 0.1)\",\n \"0 8px 32px rgba(0, 0, 0, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50, 1000],\n colors: {\n text: \"#ffffff\",\n background: \"#000000\",\n primary: \"#00C2FF\",\n secondary: \"#0098CC\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 194, 255, 0.15)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 194, 255, 0.2)\",\n backgroundSecondary: \"#0a1628\",\n backgroundTertiary: \"#0f1c2e\",\n backgroundLight: \"rgba(0, 194, 255, 0.04)\",\n backgroundHover: \"rgba(0, 194, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.4)\",\n textSecondary: \"#d1d5db\",\n textTertiary: \"#9ca3af\",\n textMuted: \"#6b7280\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#000000\",\n bg: \"#00C2FF\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#00D9FF\"\n }\n },\n secondary: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 194, 255, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 194, 255, 0.1)\",\n borderColor: \"#00C2FF\"\n }\n },\n ghost: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#00D9FF\",\n bg: \"rgba(0, 194, 255, 0.1)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"#ffffff\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\",\n color: \"text\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 4\n },\n secondary: {\n bg: \"rgba(0, 194, 255, 0.05)\",\n border: \"1px solid\",\n borderColor: \"rgba(0, 194, 255, 0.2)\",\n borderRadius: 4\n }\n }\n};\nvar landingPageLightTheme = {\n ...landingPageTheme,\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#0098CC\",\n secondary: \"#00C2FF\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 152, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 152, 204, 0.2)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 152, 204, 0.03)\",\n backgroundHover: \"rgba(0, 152, 204, 0.05)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"#ffffff\",\n bg: \"#0098CC\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#007aa8\"\n }\n },\n secondary: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 152, 204, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 152, 204, 0.05)\",\n borderColor: \"#0098CC\"\n }\n },\n ghost: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#007aa8\",\n bg: \"rgba(0, 152, 204, 0.05)\"\n }\n }\n }\n};\n\n// src/themes.ts\nvar regalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#f1e8dc\",\n background: \"#1a1f2e\",\n primary: \"#d4a574\",\n secondary: \"#e0b584\",\n accent: \"#c9b8a3\",\n highlight: \"rgba(212, 165, 116, 0.15)\",\n muted: \"#8b7968\",\n success: \"#5c8a72\",\n warning: \"#d4a574\",\n error: \"#a85751\",\n info: \"#d4a574\",\n border: \"rgba(212, 165, 116, 0.2)\",\n backgroundSecondary: \"#212738\",\n backgroundTertiary: \"#2d3446\",\n backgroundLight: \"rgba(212, 165, 116, 0.08)\",\n backgroundHover: \"rgba(212, 165, 116, 0.15)\",\n surface: \"#212738\",\n textSecondary: \"#c9b8a3\",\n textTertiary: \"#8b7968\",\n textMuted: \"#8b7968\",\n highlightBg: \"rgba(255, 193, 7, 0.25)\",\n highlightBorder: \"rgba(255, 193, 7, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"background\",\n bg: \"primary\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"muted\",\n \"&:hover\": {\n bg: \"backgroundSecondary\"\n }\n },\n ghost: {\n color: \"primary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"muted\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"background\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar terminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n heading: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px 0 rgba(0, 0, 0, 0.07)\",\n \"0 8px 12px 0 rgba(0, 0, 0, 0.08)\",\n \"0 16px 24px 0 rgba(0, 0, 0, 0.10)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#e4e4e4\",\n background: \"rgba(10, 10, 10, 0.85)\",\n primary: \"#66b3ff\",\n secondary: \"#80c4ff\",\n accent: \"#66ff99\",\n highlight: \"rgba(102, 179, 255, 0.15)\",\n muted: \"rgba(26, 26, 26, 0.8)\",\n success: \"#66ff99\",\n warning: \"#ffcc66\",\n error: \"#ff6666\",\n info: \"#66b3ff\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"rgba(15, 15, 15, 0.9)\",\n backgroundTertiary: \"rgba(20, 20, 20, 0.9)\",\n backgroundLight: \"rgba(255, 255, 255, 0.05)\",\n backgroundHover: \"rgba(102, 179, 255, 0.08)\",\n surface: \"rgba(15, 15, 15, 0.95)\",\n textSecondary: \"rgba(255, 255, 255, 0.7)\",\n textTertiary: \"rgba(255, 255, 255, 0.5)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n modes: {\n light: {\n text: \"#1a1a1a\",\n background: \"rgba(255, 255, 255, 0.9)\",\n primary: \"#0066cc\",\n secondary: \"#0052a3\",\n accent: \"#00cc88\",\n highlight: \"rgba(0, 102, 204, 0.08)\",\n muted: \"rgba(245, 245, 245, 0.8)\",\n success: \"#00cc88\",\n warning: \"#ffaa00\",\n error: \"#ff3333\",\n info: \"#0066cc\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"rgba(250, 250, 250, 0.9)\",\n backgroundTertiary: \"rgba(245, 245, 245, 0.9)\",\n backgroundLight: \"rgba(0, 0, 0, 0.02)\",\n backgroundHover: \"rgba(0, 102, 204, 0.04)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"rgba(0, 0, 0, 0.6)\",\n textTertiary: \"rgba(0, 0, 0, 0.4)\",\n textMuted: \"rgba(0, 0, 0, 0.3)\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\nvar matrixTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(0, 216, 53, 0.15)\",\n \"0 0 10px rgba(0, 216, 53, 0.2)\",\n \"0 0 15px rgba(0, 216, 53, 0.25)\",\n \"0 0 20px rgba(0, 216, 53, 0.3)\",\n \"0 0 30px rgba(0, 216, 53, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#00d835\",\n secondary: \"#00a828\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.15)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(0, 216, 53, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(0, 216, 53, 0.03)\",\n backgroundHover: \"rgba(0, 216, 53, 0.08)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.25)\",\n highlightBorder: \"rgba(0, 216, 53, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar matrixMinimalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 0 20px rgba(0, 216, 53, 0.1)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#b8b8b8\",\n secondary: \"#909090\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.1)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(184, 184, 184, 0.1)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(184, 184, 184, 0.02)\",\n backgroundHover: \"rgba(0, 216, 53, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.2)\",\n highlightBorder: \"rgba(0, 216, 53, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar slateTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.2)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.2)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.2)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.25)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#9ca3af\",\n background: \"#1a1c1e\",\n primary: \"#d1d5db\",\n secondary: \"#6b7280\",\n accent: \"#f59e0b\",\n highlight: \"rgba(209, 213, 219, 0.15)\",\n muted: \"#2d3134\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n info: \"#3b82f6\",\n border: \"rgba(156, 163, 175, 0.15)\",\n backgroundSecondary: \"#22252a\",\n backgroundTertiary: \"#2d3134\",\n backgroundLight: \"rgba(156, 163, 175, 0.05)\",\n backgroundHover: \"rgba(156, 163, 175, 0.1)\",\n surface: \"#1f2124\",\n textSecondary: \"#e5e7eb\",\n textTertiary: \"#6b7280\",\n textMuted: \"#4b5563\",\n highlightBg: \"rgba(245, 158, 11, 0.25)\",\n highlightBorder: \"rgba(245, 158, 11, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#1a1c1e\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#9ca3af\"\n }\n },\n secondary: {\n color: \"#e5e7eb\",\n bg: \"secondary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#4b5563\"\n }\n },\n ghost: {\n color: \"textSecondary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"textSecondary\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textTertiary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/ThemeProvider.tsx\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\n\n// src/themeHelpers.ts\nfunction overrideColors(theme, colors) {\n return {\n ...theme,\n colors: {\n ...theme.colors,\n ...colors\n }\n };\n}\nfunction makeTheme(baseTheme, overrides) {\n return {\n ...baseTheme,\n ...overrides,\n colors: {\n ...baseTheme.colors,\n ...overrides.colors\n },\n fonts: {\n ...baseTheme.fonts,\n ...overrides.fonts\n }\n };\n}\nfunction addMode(theme, modeName, colors, baseMode) {\n let baseColors;\n if (baseMode && theme.modes && theme.modes[baseMode]) {\n baseColors = {\n ...theme.colors,\n ...theme.modes[baseMode]\n };\n } else {\n baseColors = theme.colors;\n }\n const newMode = {\n ...baseColors,\n ...colors\n };\n return {\n ...theme,\n modes: {\n ...theme.modes,\n [modeName]: newMode\n }\n };\n}\nfunction getMode(theme, mode) {\n if (!mode || !theme.modes || !theme.modes[mode]) {\n return theme.colors;\n }\n return {\n ...theme.colors,\n ...theme.modes[mode]\n };\n}\n\n// src/ThemeProvider.tsx\nvar ThemeContext;\nvar getThemeContext = () => {\n if (typeof window !== \"undefined\") {\n const globalWindow = window;\n if (!globalWindow.__principlemd_theme_context__) {\n globalWindow.__principlemd_theme_context__ = createContext(undefined);\n }\n return globalWindow.__principlemd_theme_context__;\n } else {\n if (!ThemeContext) {\n ThemeContext = createContext(undefined);\n }\n return ThemeContext;\n }\n};\nvar ThemeContextSingleton = getThemeContext();\nvar useTheme = () => {\n const context = useContext(ThemeContextSingleton);\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\nvar ThemeProvider = ({\n children,\n theme: customTheme = theme,\n initialMode\n}) => {\n const [mode, setMode] = useState(initialMode);\n const activeTheme = React.useMemo(() => {\n if (!mode || !customTheme.modes || !customTheme.modes[mode]) {\n return customTheme;\n }\n return {\n ...customTheme,\n colors: getMode(customTheme, mode)\n };\n }, [customTheme, mode]);\n useEffect(() => {\n if (!initialMode) {\n const savedMode = localStorage.getItem(\"principlemd-theme-mode\");\n if (savedMode) {\n setMode(savedMode);\n }\n }\n }, [initialMode]);\n useEffect(() => {\n if (mode) {\n localStorage.setItem(\"principlemd-theme-mode\", mode);\n } else {\n localStorage.removeItem(\"principlemd-theme-mode\");\n }\n }, [mode]);\n const value = {\n theme: activeTheme,\n mode,\n setMode\n };\n return /* @__PURE__ */ React.createElement(ThemeContextSingleton.Provider, {\n value\n }, children);\n};\nvar withTheme = (Component) => {\n return (props) => {\n const { theme: theme2 } = useTheme();\n return /* @__PURE__ */ React.createElement(Component, {\n ...props,\n theme: theme2\n });\n };\n};\n// src/utils.ts\nvar getColor = (theme2, colorKey) => {\n const colors = theme2.colors;\n const value = colors[colorKey];\n return typeof value === \"string\" ? value : colorKey;\n};\nvar getSpace = (theme2, index) => {\n return theme2.space[index] || 0;\n};\nvar getFontSize = (theme2, index) => {\n return theme2.fontSizes[index] || theme2.fontSizes[2];\n};\nvar getRadius = (theme2, index) => {\n return theme2.radii[index] || 0;\n};\nvar getShadow = (theme2, index) => {\n return theme2.shadows[index] || \"none\";\n};\nvar getZIndex = (theme2, index) => {\n return theme2.zIndices[index] || 0;\n};\nvar responsive = (values) => {\n return values.reduce((acc, value, index) => {\n if (index === 0) {\n return value;\n }\n return {\n ...acc,\n [`@media screen and (min-width: ${values[index - 1]})`]: value\n };\n }, {});\n};\nvar sx = (styles) => styles;\nvar createStyle = (theme2, styleObj) => {\n const processValue = (value) => {\n if (typeof value === \"string\") {\n if (value in theme2.colors) {\n return getColor(theme2, value);\n }\n return value;\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(processValue);\n }\n if (typeof value === \"object\" && value !== null) {\n const processed2 = {};\n for (const [key, val] of Object.entries(value)) {\n processed2[key] = processValue(val);\n }\n return processed2;\n }\n return value;\n };\n const processed = {};\n for (const [key, val] of Object.entries(styleObj)) {\n processed[key] = processValue(val);\n }\n return processed;\n};\nvar mergeThemes = (baseTheme, ...overrides) => {\n return overrides.reduce((theme2, override) => ({\n space: override.space || theme2.space,\n fonts: { ...theme2.fonts, ...override.fonts || {} },\n fontSizes: override.fontSizes || theme2.fontSizes,\n fontWeights: { ...theme2.fontWeights, ...override.fontWeights || {} },\n lineHeights: { ...theme2.lineHeights, ...override.lineHeights || {} },\n breakpoints: override.breakpoints || theme2.breakpoints,\n sizes: override.sizes || theme2.sizes,\n radii: override.radii || theme2.radii,\n shadows: override.shadows || theme2.shadows,\n zIndices: override.zIndices || theme2.zIndices,\n colors: {\n ...theme2.colors,\n ...override.colors || {}\n },\n buttons: { ...theme2.buttons, ...override.buttons || {} },\n text: { ...theme2.text, ...override.text || {} },\n cards: { ...theme2.cards, ...override.cards || {} }\n }), baseTheme);\n};\n// src/ThemeShowcase.tsx\nimport React2 from \"react\";\nvar ThemeShowcase = ({\n theme: theme2,\n title,\n showValues = true,\n sections = [\"colors\", \"typography\", \"spacing\", \"shadows\", \"radii\"]\n}) => {\n const containerStyle = {\n fontFamily: theme2.fonts.body,\n color: theme2.colors.text,\n backgroundColor: theme2.colors.background,\n padding: theme2.space[4],\n minHeight: \"100vh\"\n };\n const sectionStyle = {\n marginBottom: theme2.space[5],\n padding: theme2.space[4],\n backgroundColor: theme2.colors.surface || theme2.colors.backgroundSecondary,\n borderRadius: theme2.radii[2],\n border: `1px solid ${theme2.colors.border}`\n };\n const headingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[5],\n fontWeight: theme2.fontWeights.heading,\n marginBottom: theme2.space[3],\n color: theme2.colors.primary\n };\n const subheadingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[3],\n fontWeight: theme2.fontWeights.medium,\n marginBottom: theme2.space[2],\n marginTop: theme2.space[3],\n color: theme2.colors.text\n };\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: containerStyle\n }, title && /* @__PURE__ */ React2.createElement(\"h1\", {\n style: {\n ...headingStyle,\n fontSize: theme2.fontSizes[6],\n marginBottom: theme2.space[4]\n }\n }, title), sections.includes(\"colors\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Colors\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Primary Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"text\", \"background\", \"primary\", \"secondary\", \"accent\", \"muted\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Status Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"success\", \"warning\", \"error\", \"info\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Background Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3]\n }\n }, [\"backgroundSecondary\", \"backgroundTertiary\", \"backgroundLight\", \"backgroundHover\", \"surface\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n padding: theme2.space[3],\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary,\n marginTop: theme2.space[1]\n }\n }, color));\n }))), sections.includes(\"typography\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Typography\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Families\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[4],\n marginBottom: theme2.space[2]\n }\n }, \"Heading Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.heading)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[2],\n marginBottom: theme2.space[2]\n }\n }, \"Body Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.body)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[2]\n }\n }, \"Monospace Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.monospace))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Sizes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, theme2.fontSizes.map((size, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: {\n fontSize: size,\n lineHeight: theme2.lineHeights.body,\n marginBottom: theme2.space[1]\n }\n }, \"Size \", index, \": Sample Text \", showValues && `(${size}px)`))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Weights\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(150px, 1fr))\",\n gap: theme2.space[2]\n }\n }, Object.entries(theme2.fontWeights).map(([name, weight]) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: name,\n style: {\n fontWeight: weight,\n fontSize: theme2.fontSizes[2]\n }\n }, name, \" \", showValues && `(${weight})`)))), sections.includes(\"spacing\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Spacing\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", gap: theme2.space[2] }\n }, theme2.space.map((space, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { display: \"flex\", alignItems: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 60,\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"]\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n height: 24,\n width: space,\n backgroundColor: theme2.colors.primary,\n borderRadius: theme2.radii[1]\n }\n }), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n marginLeft: theme2.space[2],\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, space, \"px\"))))), sections.includes(\"radii\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Border Radii\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(100px, 1fr))\",\n gap: theme2.space[3]\n }\n }, theme2.radii.map((radius, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 80,\n height: 80,\n backgroundColor: theme2.colors.primary,\n borderRadius: radius,\n marginBottom: theme2.space[1],\n margin: \"0 auto\"\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"] \", showValues && `${radius}px`))))), sections.includes(\"shadows\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Shadows\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(150px, 1fr))\",\n gap: theme2.space[4]\n }\n }, theme2.shadows.map((shadow, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 100,\n height: 100,\n backgroundColor: theme2.colors.background,\n boxShadow: shadow,\n borderRadius: theme2.radii[2],\n margin: \"0 auto\",\n marginBottom: theme2.space[2],\n border: `1px solid ${theme2.colors.border}`\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"Shadow [\", index, \"]\"), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textMuted,\n marginTop: theme2.space[1]\n }\n }, shadow === \"none\" ? \"none\" : \"...\"))))), theme2.modes && Object.keys(theme2.modes).length > 0 && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Available Modes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: theme2.space[2],\n flexWrap: \"wrap\"\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.primary,\n color: \"#ffffff\",\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, \"default\"), Object.keys(theme2.modes).map((modeName) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: modeName,\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.secondary,\n color: theme2.colors.text,\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, modeName)))));\n};\n\n// src/index.ts\nvar theme = terminalTheme;\nfunction scaleThemeFonts(theme2, scale) {\n const currentScale = theme2.fontScale || 1;\n const effectiveScale = scale / currentScale;\n return {\n ...theme2,\n fontSizes: theme2.fontSizes.map((size) => Math.round(size * effectiveScale)),\n fontScale: scale\n };\n}\nfunction increaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.min(currentScale * 1.1, 2);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction decreaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.max(currentScale * 0.9, 0.5);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction resetFontScale(theme2) {\n return scaleThemeFonts(theme2, 1);\n}\nvar src_default = theme;\nexport {\n withTheme,\n useTheme,\n theme,\n terminalTheme,\n sx,\n slateTheme,\n scaleThemeFonts,\n responsive,\n resetFontScale,\n regalTheme,\n overrideColors,\n mergeThemes,\n matrixTheme,\n matrixMinimalTheme,\n makeTheme,\n landingPageTheme,\n landingPageLightTheme,\n increaseFontScale,\n glassmorphismTheme,\n getZIndex,\n getSpace,\n getShadow,\n getRadius,\n getMode,\n getFontSize,\n getColor,\n defaultTerminalTheme,\n defaultMarkdownTheme,\n defaultEditorTheme,\n src_default as default,\n decreaseFontScale,\n createStyle,\n addMode,\n ThemeShowcase,\n ThemeProvider\n};\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n];\nconst GitCommitHorizontal = createLucideIcon(\"git-commit-horizontal\", __iconNode);\n\nexport { __iconNode, GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoWithProvider } from '@principal-ade/industry-themed-monaco-editor';\nimport { FileText, X } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * User preferences slice shape\n */\ninterface UserPreferences {\n vimMode?: boolean;\n // other preferences...\n}\n\n/**\n * Extended props for FileEditorPanel with optional prop-controlled mode\n */\nexport interface FileEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\nconst getLanguage = (path: string): string => {\n const ext = path.split('.').pop()?.toLowerCase() || '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n cs: 'csharp',\n php: 'php',\n rb: 'ruby',\n go: 'go',\n rs: 'rust',\n kt: 'kotlin',\n swift: 'swift',\n json: 'json',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sql: 'sql',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n md: 'markdown',\n mdx: 'markdown',\n };\n return languageMap[ext] || 'plaintext';\n};\n\n/**\n * FileEditorPanelContent - Internal component that uses theme\n */\nconst FileEditorPanelContent: React.FC<FileEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [fileContent, setFileContent] = useState<string>('');\n const [editorContent, setEditorContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<string | null>(null);\n const latestFilePathRef = useRef<string | null>(null);\n const isSavingRef = useRef(false);\n const isDirtyRef = useRef(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Get user preferences (vim mode, etc.)\n const preferencesSlice = context.getSlice<UserPreferences>('preferences');\n const vimMode = preferencesSlice?.data?.vimMode ?? false;\n\n useEffect(() => {\n isDirtyRef.current = isDirty;\n }, [isDirty]);\n\n useEffect(() => {\n isDirtyRef.current = false;\n setIsDirty(false);\n setIsSaving(false);\n isSavingRef.current = false;\n setSaveError(null);\n }, [filePath]);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[FileEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp && activeFileSlice?.data?.path) {\n setFilePath(activeFileSlice.data.path);\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n setFilePath(payload.path);\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n const loadFile = useCallback(async () => {\n if (!filePath || !fileSystem?.readFile) {\n latestFilePathRef.current = null;\n setFileContent('');\n setEditorContent('');\n setIsDirty(false);\n setIsSaving(false);\n setSaveError(null);\n return;\n }\n\n latestFilePathRef.current = filePath;\n setIsLoading(true);\n setError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (latestFilePathRef.current !== filePath) {\n return;\n }\n\n if (content !== null) {\n setFileContent(content);\n setSaveError(null);\n if (!isDirtyRef.current) {\n setEditorContent(content);\n setIsDirty(false);\n }\n } else {\n throw new Error('Failed to read file');\n }\n } catch (err) {\n console.error('Error loading file:', err);\n if (latestFilePathRef.current === filePath) {\n setError(err instanceof Error ? err.message : 'Failed to load file');\n setFileContent('');\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsLoading(false);\n }\n }\n }, [filePath, fileSystem]);\n\n useEffect(() => {\n loadFile();\n }, [loadFile]);\n\n const handleEditorChange = useCallback(\n (value?: string) => {\n const nextValue = value ?? '';\n setEditorContent(nextValue);\n setIsDirty(nextValue !== fileContent);\n if (saveError) {\n setSaveError(null);\n }\n },\n [fileContent, saveError]\n );\n\n const handleEditorSave = useCallback(\n async (value?: string) => {\n if (!filePath || !fileSystem?.writeFile) {\n return;\n }\n\n const contentToSave = value ?? editorContent;\n\n if (!isDirty && contentToSave === fileContent) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setSaveError(null);\n\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n\n if (latestFilePathRef.current === filePath) {\n setFileContent(contentToSave);\n setEditorContent(contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n }\n } catch (err) {\n if (latestFilePathRef.current === filePath) {\n setSaveError(\n err instanceof Error ? err.message : 'Failed to save file'\n );\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsSaving(false);\n }\n isSavingRef.current = false;\n }\n },\n [editorContent, fileContent, filePath, isDirty, fileSystem, events]\n );\n\n const handleClose = useCallback(() => {\n events.emit({\n type: 'file:close',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n }, [events, filePath]);\n\n const fileName = filePath?.split('/').pop() || filePath || '';\n const language = filePath ? getLanguage(filePath) : 'plaintext';\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n color: theme.colors.textSecondary,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <div\n style={{\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n marginBottom: '12px',\n color: theme.colors.text,\n }}\n >\n File Editor\n </div>\n <div style={{ fontSize: theme.fontSizes[1] }}>\n Select a file to view or edit\n </div>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n {/* Header */}\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <FileText\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {fileName}\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n {isEditable && (\n <>\n {saveError ? (\n <span\n style={{\n color: theme.colors.error,\n fontSize: theme.fontSizes[0],\n }}\n >\n Save failed: {saveError}\n </span>\n ) : isSaving ? (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saving...\n </span>\n ) : isDirty ? (\n <span\n style={{\n color: theme.colors.primary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Unsaved changes\n </span>\n ) : (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saved\n </span>\n )}\n <button\n onClick={() => void handleEditorSave()}\n disabled={!isDirty || isSaving}\n style={{\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n border: 'none',\n borderRadius: '4px',\n padding: '6px 10px',\n fontSize: theme.fontSizes[0],\n cursor: !isDirty || isSaving ? 'not-allowed' : 'pointer',\n opacity: !isDirty || isSaving ? 0.6 : 1,\n transition: 'opacity 0.2s ease',\n }}\n >\n Save\n </button>\n </>\n )}\n {filePath && showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundSecondary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n Error: {error}\n </div>\n ) : (\n <ThemedMonacoWithProvider\n value={editorContent}\n language={language}\n vimMode={isEditable ? vimMode : false}\n options={{\n readOnly: !isEditable,\n minimap: { enabled: false },\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n fontSize: theme.fontSizes[2],\n automaticLayout: true,\n folding: true,\n renderWhitespace: 'selection',\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n useShadows: false,\n verticalScrollbarSize: 10,\n horizontalScrollbarSize: 10,\n },\n }}\n height=\"100%\"\n onChange={isEditable ? handleEditorChange : undefined}\n onSave={isEditable ? handleEditorSave : undefined}\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * FileEditorPanel - Monaco-based code editor with vim mode support.\n *\n * This panel provides:\n * - Syntax highlighting for many languages\n * - File editing with save support\n * - Dirty state tracking\n * - Integration with panel framework events\n */\nexport const FileEditorPanel: React.FC<FileEditorPanelProps> = (props) => {\n return <FileEditorPanelContent {...props} />;\n};\n\nexport const FileEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div>\n <span style={{ color: '#c678dd' }}>export</span>{' '}\n <span style={{ color: '#61afef' }}>function</span>{' '}\n <span style={{ color: '#e5c07b' }}>hello</span>() {'{'}\n </div>\n <div style={{ paddingLeft: '12px' }}>\n console.<span style={{ color: '#61afef' }}>log</span>(\n <span style={{ color: '#98c379' }}>'Hello'</span>);\n </div>\n <div>{'}'}</div>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoDiffEditor } from '@principal-ade/industry-themed-monaco-editor';\nimport { GitCommit, X } from 'lucide-react';\n\nimport type { PanelComponentProps, GitChangeStatus } from '../../types';\n\nconst statusMeta: Record<\n GitChangeStatus,\n { label: string; description: string }\n> = {\n staged: {\n label: 'Staged change',\n description: 'Comparing staged changes against the last commit',\n },\n unstaged: {\n label: 'Unstaged change',\n description: 'Comparing working tree changes against the last commit',\n },\n untracked: {\n label: 'Untracked file',\n description: 'New file compared against an empty baseline',\n },\n deleted: {\n label: 'Deleted file',\n description: 'Showing the last committed contents of the deleted file',\n },\n};\n\nconst languageFromPath = (filePath: string | null): string => {\n if (!filePath) {\n return 'plaintext';\n }\n\n const ext = filePath.split('.').pop()?.toLowerCase() ?? '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n h: 'c',\n hpp: 'cpp',\n cs: 'csharp',\n go: 'go',\n rs: 'rust',\n php: 'php',\n rb: 'ruby',\n swift: 'swift',\n kt: 'kotlin',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n md: 'markdown',\n mdx: 'markdown',\n sql: 'sql',\n };\n\n return languageMap[ext] ?? 'plaintext';\n};\n\ninterface GitDiffPayload {\n path: string;\n status?: GitChangeStatus;\n original?: string;\n modified?: string;\n}\n\n/**\n * Extended props for GitDiffPanel with optional prop-controlled mode\n */\nexport interface GitDiffPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display diff for.\n * If provided, this takes precedence over event-based selection.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Optional git status for the file.\n * Used together with filePath in prop-controlled mode.\n */\n gitStatus?: GitChangeStatus;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * GitDiffPanelContent - Internal component that uses theme\n */\nconst GitDiffPanelContent: React.FC<GitDiffPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n gitStatus: gitStatusProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [status, setStatus] = useState<GitChangeStatus>('unstaged');\n const [originalContent, setOriginalContent] = useState<string>('');\n const [modifiedContent, setModifiedContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const language = useMemo(() => languageFromPath(filePath), [filePath]);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[GitDiffPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n setStatus(gitStatusProp || 'unstaged');\n }\n }, [filePathProp, gitStatusProp]);\n\n // Listen for git:diff events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('git:diff', (event) => {\n const payload = event.payload as GitDiffPayload;\n if (payload?.path) {\n setFilePath(payload.path);\n setStatus(payload.status || 'unstaged');\n // If content is provided directly, use it\n if (payload.original !== undefined || payload.modified !== undefined) {\n setOriginalContent(payload.original ?? '');\n setModifiedContent(payload.modified ?? '');\n setIsLoading(false);\n setError(null);\n }\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n // Load diff content when file path changes\n useEffect(() => {\n let isActive = true;\n\n const loadDiff = async () => {\n if (!filePath) {\n setOriginalContent('');\n setModifiedContent('');\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // If we don't have a file system adapter, we can't load content\n if (!fileSystem?.readFile) {\n // Content should be provided via events\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // For now, read the current file content as \"modified\"\n // The \"original\" would need to come from git or be provided via events\n const modified = await fileSystem.readFile(filePath);\n\n if (!isActive) return;\n\n setModifiedContent(modified ?? '');\n // Original content should be provided via git:diff event payload\n // or we leave it empty for new files\n if (status === 'untracked') {\n setOriginalContent('');\n }\n } catch (err) {\n if (!isActive) return;\n\n console.error('Failed to load git diff:', err);\n setError(\n err instanceof Error\n ? `Failed to load diff: ${err.message}`\n : 'Failed to load diff'\n );\n setOriginalContent('');\n setModifiedContent('');\n } finally {\n if (isActive) {\n setIsLoading(false);\n }\n }\n };\n\n void loadDiff();\n\n return () => {\n isActive = false;\n };\n }, [filePath, status, fileSystem]);\n\n const handleClose = () => {\n events.emit({\n type: 'git:diff:close',\n source: 'industry-theme.git-diff',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n };\n\n const statusInfo = status ? statusMeta[status] : null;\n const statusColor = useMemo(() => {\n if (!status) return theme.colors.textSecondary;\n\n switch (status) {\n case 'staged':\n return theme.colors.success || '#10b981';\n case 'unstaged':\n return theme.colors.warning || '#f59e0b';\n case 'untracked':\n return theme.colors.info || theme.colors.primary || '#3b82f6';\n case 'deleted':\n return theme.colors.error || '#ef4444';\n default:\n return theme.colors.textSecondary;\n }\n }, [status, theme.colors]);\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a file from Git Changes to view its diff.\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <GitCommit\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {filePath?.split('/').pop() || filePath}\n </div>\n {statusInfo && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n fontSize: theme.fontSizes[0],\n padding: '2px 8px',\n borderRadius: '999px',\n backgroundColor: `${statusColor}20`,\n color: statusColor,\n border: `1px solid ${statusColor}60`,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n {statusInfo.label}\n </span>\n )}\n </div>\n {showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading diff...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </div>\n ) : (\n <ThemedMonacoDiffEditor\n theme={theme}\n original={originalContent}\n modified={modifiedContent}\n language={language}\n height=\"100%\"\n options={{\n renderSideBySide: true,\n readOnly: true,\n minimap: { enabled: false },\n automaticLayout: true,\n renderIndicators: true,\n renderMarginRevertIcon: true,\n ignoreTrimWhitespace: false,\n diffAlgorithm: 'advanced',\n scrollbar: {\n useShadows: false,\n vertical: 'auto',\n horizontal: 'auto',\n },\n }}\n loadingComponent={\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Preparing diff editor...\n </div>\n }\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * GitDiffPanel - Side-by-side git diff viewer.\n *\n * This panel shows:\n * - Side-by-side comparison of original vs modified content\n * - Status indicators for staged/unstaged/untracked/deleted files\n * - Syntax highlighting based on file type\n */\nexport const GitDiffPanel: React.FC<GitDiffPanelProps> = (props) => {\n return <GitDiffPanelContent {...props} />;\n};\n\nexport const GitDiffPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '8px',\n }}\n >\n <span style={{ color: theme.colors.textSecondary }}>@@ 12,5 @@</span>\n </div>\n <div style={{ color: '#ef4444' }}>- const count = oldValue;</div>\n <div style={{ color: '#22c55e' }}>+ const count = newValue;</div>\n <div style={{ color: theme.colors.textSecondary }}> return count;</div>\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport {\n headingsPlugin,\n listsPlugin,\n quotePlugin,\n thematicBreakPlugin,\n markdownShortcutPlugin,\n linkPlugin,\n linkDialogPlugin,\n imagePlugin,\n tablePlugin,\n codeBlockPlugin,\n codeMirrorPlugin,\n diffSourcePlugin,\n frontmatterPlugin,\n toolbarPlugin,\n UndoRedo,\n BoldItalicUnderlineToggles,\n CodeToggle,\n CreateLink,\n InsertImage,\n InsertTable,\n InsertThematicBreak,\n ListsToggle,\n BlockTypeSelect,\n DiffSourceToggleWrapper,\n MDXEditor,\n} from '@principal-ai/mdx-editor';\nimport '@principal-ai/mdx-editor/style.css';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { FileText } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * Extended props for MDXEditorPanel with optional prop-controlled mode\n */\nexport interface MDXEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * MDXEditorPanelContent - Internal component that uses theme\n */\nconst MDXEditorPanelContent: React.FC<MDXEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [markdown, setMarkdown] = useState('');\n const [isMounted, setIsMounted] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [parseError, setParseError] = useState<string | null>(null);\n const [_isDirty, setIsDirty] = useState<boolean>(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Memoize plugins array for performance\n const plugins = useMemo(\n () => [\n headingsPlugin(),\n listsPlugin(),\n quotePlugin(),\n thematicBreakPlugin(),\n markdownShortcutPlugin(),\n linkPlugin(),\n linkDialogPlugin(),\n imagePlugin({\n imageUploadHandler: async (file) => {\n console.warn('Image upload not configured:', file.name);\n return '/placeholder-image.png';\n },\n }),\n tablePlugin(),\n codeBlockPlugin({ defaultCodeBlockLanguage: 'javascript' }),\n codeMirrorPlugin({\n codeBlockLanguages: {\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n tsx: 'TypeScript (JSX)',\n jsx: 'JavaScript (JSX)',\n python: 'Python',\n java: 'Java',\n go: 'Go',\n rust: 'Rust',\n cpp: 'C++',\n c: 'C',\n css: 'CSS',\n html: 'HTML',\n json: 'JSON',\n yaml: 'YAML',\n markdown: 'Markdown',\n bash: 'Bash',\n shell: 'Shell',\n sql: 'SQL',\n },\n }),\n frontmatterPlugin(),\n diffSourcePlugin({\n viewMode: parseError ? 'source' : 'rich-text',\n }),\n toolbarPlugin({\n toolbarContents: () => (\n <>\n <DiffSourceToggleWrapper>\n <UndoRedo />\n <BlockTypeSelect />\n <BoldItalicUnderlineToggles />\n <CodeToggle />\n <CreateLink />\n <InsertImage />\n <InsertTable />\n <InsertThematicBreak />\n <ListsToggle />\n </DiffSourceToggleWrapper>\n </>\n ),\n }),\n ],\n [parseError]\n );\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[MDXEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only for markdown files, only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp) {\n const path = activeFileSlice?.data?.path;\n if (path && (path.endsWith('.md') || path.endsWith('.mdx'))) {\n setFilePath(path);\n }\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only handle markdown files, only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n const path = payload.path;\n if (path.endsWith('.md') || path.endsWith('.mdx')) {\n setFilePath(path);\n }\n }\n });\n return unsubscribe;\n }, [filePathProp, events]);\n\n const handleChange = useCallback((value: string) => {\n setMarkdown(value);\n setIsDirty(true);\n setParseError(null);\n }, []);\n\n const handleSave = useCallback(\n async (content?: string) => {\n const contentToSave = content || markdown;\n\n if (filePath && fileSystem?.writeFile) {\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.mdx-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n } catch (error) {\n console.error('Error saving file:', error);\n }\n }\n },\n [markdown, filePath, fileSystem, events]\n );\n\n // Load file content when filePath changes\n useEffect(() => {\n const loadFileContent = async () => {\n if (!filePath || !fileSystem?.readFile) {\n setMarkdown('');\n return;\n }\n\n setIsLoading(true);\n setLoadError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (content !== null) {\n setMarkdown(content);\n setParseError(null);\n setIsDirty(false);\n } else {\n throw new Error('Failed to read file');\n }\n } catch (error) {\n console.error('Error loading file:', error);\n setLoadError(`Failed to load file: ${filePath}`);\n setMarkdown('');\n setParseError(null);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadFileContent();\n }, [filePath, fileSystem]);\n\n // Handle keyboard shortcuts for save\n useEffect(() => {\n if (!isEditable) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault();\n handleSave();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isEditable, handleSave]);\n\n if (!isMounted) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading editor...\n </div>\n );\n }\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n );\n }\n\n if (loadError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <div style={{ marginBottom: '10px' }}>Warning</div>\n <div>{loadError}</div>\n </div>\n );\n }\n\n if (!filePath) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.textSecondary,\n padding: '40px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n color: theme.colors.text,\n }}\n >\n No File Selected\n </h3>\n <p\n style={{\n margin: 0,\n fontSize: theme.fontSizes[2],\n maxWidth: '400px',\n }}\n >\n Select a markdown file (.md or .mdx) to start editing\n </p>\n </div>\n );\n }\n\n const safeMarkdown =\n typeof markdown === 'string' ? markdown : String(markdown || '');\n\n const editorContent = (\n <div\n style={{\n height: '100%',\n width: '100%',\n }}\n >\n <MDXEditor\n key={filePath || 'default'}\n markdown={safeMarkdown}\n onChange={handleChange}\n readOnly={!isEditable}\n contentEditableClassName=\"prose\"\n plugins={plugins}\n />\n </div>\n );\n\n if (parseError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n backgroundColor: theme.colors.warning || '#f59e0b',\n color: theme.colors.background,\n fontSize: theme.fontSizes[2],\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span>Warning</span>\n <span>\n {parseError} - Switch to source mode using the toolbar button to\n edit the raw markdown.\n </span>\n </div>\n <div style={{ flex: 1 }}>{editorContent}</div>\n </div>\n );\n }\n\n return editorContent;\n};\n\n/**\n * MDXEditorPanel - Rich markdown/MDX editor.\n *\n * This panel provides:\n * - WYSIWYG markdown editing\n * - Code block support with syntax highlighting\n * - Image and table insertion\n * - Source mode for raw markdown editing\n */\nexport const MDXEditorPanel: React.FC<MDXEditorPanelProps> = (props) => {\n return <MDXEditorPanelContent {...props} />;\n};\n\nexport const MDXEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n return (\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n padding: '20px',\n }}\n >\n <FileText size={32} style={{ marginBottom: '12px', opacity: 0.6 }} />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n marginBottom: '4px',\n }}\n >\n MDX Editor\n </div>\n <div\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n textAlign: 'center',\n }}\n >\n Rich markdown editor with live preview\n </div>\n </div>\n );\n};\n","/**\n * Panel Tools\n *\n * UTCP-compatible tools for file editing panels.\n * These tools can be invoked by AI agents and emit events that panels listen for.\n *\n * IMPORTANT: This file should NOT import any React components to ensure\n * it can be imported server-side without pulling in React dependencies.\n * Use the './tools' subpath export for server-safe imports.\n */\n\nimport type {\n PanelTool,\n PanelToolsMetadata,\n} from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: Open File in Editor\n */\nexport const openFileTool: PanelTool = {\n name: 'open_file',\n description: 'Opens a file in the file editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['file', 'editor', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-file',\n },\n};\n\n/**\n * Tool: View Git Diff\n */\nexport const viewDiffTool: PanelTool = {\n name: 'view_diff',\n description: 'Opens a file in the git diff panel to view changes',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to diff',\n },\n status: {\n type: 'string',\n enum: ['staged', 'unstaged', 'untracked', 'deleted'],\n description: 'The git status of the file',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['git', 'diff', 'view'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:view-diff',\n },\n};\n\n/**\n * Tool: Open Markdown Editor\n */\nexport const openMarkdownTool: PanelTool = {\n name: 'open_markdown',\n description: 'Opens a markdown file in the MDX editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the markdown file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['markdown', 'mdx', 'editor'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-markdown',\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const fileEditingPanelTools: PanelTool[] = [\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const fileEditingPanelToolsMetadata: PanelToolsMetadata = {\n id: 'industry-theme.file-editing-panels',\n name: 'File Editing Panels',\n description: 'Tools for file editing, git diff viewing, and markdown editing',\n tools: fileEditingPanelTools,\n};\n","/**\n * @industry-theme/file-editing-panels\n *\n * Git diff view and editor panels for dev workspaces.\n * These panels use the panel framework pattern with PanelComponentProps.\n */\n\nimport { FileEditorPanel } from './panels/FileEditorPanel';\nimport { GitDiffPanel } from './panels/GitDiffPanel';\nimport { MDXEditorPanel } from './panels/MDXEditorPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { fileEditingPanelTools, fileEditingPanelToolsMetadata } from './tools';\n\n/**\n * Export array of panel definitions.\n * This is the required export for panel extensions.\n */\nexport const panels: PanelDefinition[] = [\n {\n metadata: {\n id: 'industry-theme.file-editor',\n name: 'File Editor',\n icon: '📝',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Monaco-based code editor with syntax highlighting',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[0]], // openFileTool\n },\n component: FileEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'File Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('File Editor Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.git-diff',\n name: 'Git Diff',\n icon: '🔀',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Side-by-side git diff viewer',\n slices: ['git', 'fileTree'],\n tools: [fileEditingPanelTools[1]], // viewDiffTool\n },\n component: GitDiffPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'Git Diff Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Diff Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.mdx-editor',\n name: 'MDX Editor',\n icon: '📄',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Rich markdown/MDX editor with live preview',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[2]], // openMarkdownTool\n },\n component: MDXEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'MDX Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('MDX Editor Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n * Use this for package-level initialization.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package loaded - File Editing Panels');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - File Editing Panels');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/file-editing-panels/tools' to import without React dependencies.\n */\nexport {\n fileEditingPanelTools,\n fileEditingPanelToolsMetadata,\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n} from './tools';\n\n// Re-export panel components for direct usage\nexport { FileEditorPanel, FileEditorPanelPreview } from './panels/FileEditorPanel';\nexport { GitDiffPanel, GitDiffPanelPreview } from './panels/GitDiffPanel';\nexport { MDXEditorPanel, MDXEditorPanelPreview } from './panels/MDXEditorPanel';\n\n// Re-export types\nexport type { GitChangeStatus } from './types';\n\n// Re-export framework types for convenience\nexport type {\n PanelDefinition,\n PanelContextValue,\n PanelMetadata,\n PanelComponentProps,\n} from './types';\n"],"names":["__iconNode","_a","GitCommit"],"mappings":";;;;AAk2CA,IAAI;AACJ,IAAI,kBAAkB,MAAM;AAC1B,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM,eAAe;AACrB,QAAI,CAAC,aAAa,+BAA+B;AAC/C,mBAAa,gCAAgC,cAAc,MAAS;AAAA,IACtE;AACA,WAAO,aAAa;AAAA,EACtB,OAAO;AACL,QAAI,CAAC,cAAc;AACjB,qBAAe,cAAc,MAAS;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACF;AACA,IAAI,wBAAwB,gBAAe;AAC3C,IAAI,WAAW,MAAM;AACnB,QAAM,UAAU,WAAW,qBAAqB;AAChD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,SAAO;AACT;ACx3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,MAAM,cAAc,CAAC,WAAW,OAAO,QAAQ,sBAAsB,OAAO,EAAE,YAAW;AACzF,MAAM,cAAc,CAAC,WAAW,OAAO;AAAA,EACrC;AAAA,EACA,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,YAAW,IAAK,GAAG,YAAW;AAC3D;AACA,MAAM,eAAe,CAAC,WAAW;AAC/B,QAAM,YAAY,YAAY,MAAM;AACpC,SAAO,UAAU,OAAO,CAAC,EAAE,YAAW,IAAK,UAAU,MAAM,CAAC;AAC9D;AACA,MAAM,eAAe,IAAI,YAAY,QAAQ,OAAO,CAAC,WAAW,OAAO,UAAU;AAC/E,SAAO,QAAQ,SAAS,KAAK,UAAU,KAAI,MAAO,MAAM,MAAM,QAAQ,SAAS,MAAM;AACvF,CAAC,EAAE,KAAK,GAAG,EAAE,KAAI;AACjB,MAAM,cAAc,CAAC,UAAU;AAC7B,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,WAAW,OAAO,KAAK,SAAS,UAAU,SAAS,SAAS;AACnE,aAAO;AAAA,IACT;AAAA,EACF;AACF;ACzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,IAAI,oBAAoB;AAAA,EACtB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAClB;ACjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,OAAO;AAAA,EACX,CAAC;AAAA,IACC,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,cAAc;AAAA,IACd;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,GAAK,QAAQ;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,MACA,GAAG;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,aAAa,sBAAsB,OAAO,WAAW,IAAI,KAAK,OAAO,IAAI,IAAI;AAAA,MAC7E,WAAW,aAAa,UAAU,SAAS;AAAA,MAC3C,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,KAAK,EAAE,eAAe,OAAM;AAAA,MAC7D,GAAG;AAAA,IACT;AAAA,IACI;AAAA,MACE,GAAG,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,cAAc,KAAK,KAAK,CAAC;AAAA,MAC3D,GAAG,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAAA,IACvD;AAAA,EACA;AACA;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,mBAAmB,CAAC,UAAU,aAAa;AAC/C,QAAM,YAAY;AAAA,IAChB,CAAC,EAAE,WAAW,GAAG,MAAK,GAAI,QAAQ,cAAc,MAAM;AAAA,MACpD;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,UAAU,YAAY,aAAa,QAAQ,CAAC,CAAC;AAAA,QAC7C,UAAU,QAAQ;AAAA,QAClB;AAAA,MACR;AAAA,MACM,GAAG;AAAA,IACT,CAAK;AAAA,EACL;AACE,YAAU,cAAc,aAAa,QAAQ;AAC7C,SAAO;AACT;AC1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,eAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,2BAA2B,KAAK,SAAQ,CAAE;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAC3C;AACA,MAAM,WAAW,iBAAiB,aAAaA,YAAU;ACtBzD;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,eAAa;AAAA,EACjB,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AAAA,EAChE,CAAC,QAAQ,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AACpE;AACA,MAAM,sBAAsB,iBAAiB,yBAAyBA,YAAU;ACdhF;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAM,aAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAAA,EAC3C,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C;AACA,MAAM,IAAI,iBAAiB,KAAK,UAAU;ACoB1C,MAAM,cAAc,CAAC,SAAyB;;AAC5C,QAAM,QAAM,UAAK,MAAM,GAAG,EAAE,IAAA,MAAhB,mBAAuB,kBAAiB;AACpD,QAAM,cAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,KAAK;AAAA,EAAA;AAEP,SAAO,YAAY,GAAG,KAAK;AAC7B;AAKA,MAAM,yBAAyD,CAAC;AAAA,EAC9D;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,aAAa,cAAc,IAAI,SAAiB,EAAE;AACzD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAiB,EAAE;AAC7D,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAwB,IAAI;AAC9D,QAAM,oBAAoB,OAAsB,IAAI;AACpD,QAAM,cAAc,OAAO,KAAK;AAChC,QAAM,aAAa,OAAO,KAAK;AAG/B,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AACrC,QAAM,aAAa,QAAQ,yCAAY,SAAS;AAGhD,QAAM,kBAAkB,QAAQ,SAA0B,aAAa;AAGvE,QAAM,mBAAmB,QAAQ,SAA0B,aAAa;AACxE,QAAM,YAAU,0DAAkB,SAAlB,mBAAwB,YAAW;AAEnD,YAAU,MAAM;AACd,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,OAAO,CAAC;AAEZ,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,eAAW,KAAK;AAChB,gBAAY,KAAK;AACjB,gBAAY,UAAU;AACtB,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAC,QAAQ,CAAC;AAGb,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,sDAAsD,YAAY;AAC9E,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,YAAU,MAAM;;AACd,QAAI,CAAC,kBAAgBC,MAAA,mDAAiB,SAAjB,gBAAAA,IAAuB,OAAM;AAChD,kBAAY,gBAAgB,KAAK,IAAI;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,eAAc,wDAAiB,SAAjB,mBAAuB,IAAI,CAAC;AAG9C,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,aAAa,CAAC,UAAU;AACpD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,oBAAY,QAAQ,IAAI;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,QAAM,WAAW,YAAY,YAAY;AACvC,QAAI,CAAC,YAAY,EAAC,yCAAY,WAAU;AACtC,wBAAkB,UAAU;AAC5B,qBAAe,EAAE;AACjB,uBAAiB,EAAE;AACnB,iBAAW,KAAK;AAChB,kBAAY,KAAK;AACjB,mBAAa,IAAI;AACjB;AAAA,IACF;AAEA,sBAAkB,UAAU;AAC5B,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,UAAU,MAAM,WAAW,SAAS,QAAQ;AAElD,UAAI,kBAAkB,YAAY,UAAU;AAC1C;AAAA,MACF;AAEA,UAAI,YAAY,MAAM;AACpB,uBAAe,OAAO;AACtB,qBAAa,IAAI;AACjB,YAAI,CAAC,WAAW,SAAS;AACvB,2BAAiB,OAAO;AACxB,qBAAW,KAAK;AAAA,QAClB;AAAA,MACF,OAAO;AACL,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACvC;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,uBAAuB,GAAG;AACxC,UAAI,kBAAkB,YAAY,UAAU;AAC1C,iBAAS,eAAe,QAAQ,IAAI,UAAU,qBAAqB;AACnE,uBAAe,EAAE;AAAA,MACnB;AAAA,IACF,UAAA;AACE,UAAI,kBAAkB,YAAY,UAAU;AAC1C,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,YAAU,MAAM;AACd,aAAA;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,qBAAqB;AAAA,IACzB,CAAC,UAAmB;AAClB,YAAM,YAAY,SAAS;AAC3B,uBAAiB,SAAS;AAC1B,iBAAW,cAAc,WAAW;AACpC,UAAI,WAAW;AACb,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,aAAa,SAAS;AAAA,EAAA;AAGzB,QAAM,mBAAmB;AAAA,IACvB,OAAO,UAAmB;AACxB,UAAI,CAAC,YAAY,EAAC,yCAAY,YAAW;AACvC;AAAA,MACF;AAEA,YAAM,gBAAgB,SAAS;AAE/B,UAAI,CAAC,WAAW,kBAAkB,aAAa;AAC7C;AAAA,MACF;AAEA,kBAAY,UAAU;AACtB,kBAAY,IAAI;AAChB,mBAAa,IAAI;AAEjB,UAAI;AACF,cAAM,WAAW,UAAU,UAAU,aAAa;AAElD,YAAI,kBAAkB,YAAY,UAAU;AAC1C,yBAAe,aAAa;AAC5B,2BAAiB,aAAa;AAC9B,qBAAW,KAAK;AAGhB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,WAAW,KAAK,IAAA;AAAA,YAChB,SAAS,EAAE,MAAM,SAAA;AAAA,UAAS,CAC3B;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,kBAAkB,YAAY,UAAU;AAC1C;AAAA,YACE,eAAe,QAAQ,IAAI,UAAU;AAAA,UAAA;AAAA,QAEzC;AAAA,MACF,UAAA;AACE,YAAI,kBAAkB,YAAY,UAAU;AAC1C,sBAAY,KAAK;AAAA,QACnB;AACA,oBAAY,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,eAAe,aAAa,UAAU,SAAS,YAAY,MAAM;AAAA,EAAA;AAGpE,QAAM,cAAc,YAAY,MAAM;AACpC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,KAAK,IAAA;AAAA,MAChB,SAAS,EAAE,MAAM,SAAA;AAAA,IAAS,CAC3B;AACD,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,QAAM,YAAW,qCAAU,MAAM,KAAK,UAAS,YAAY;AAC3D,QAAM,WAAW,WAAW,YAAY,QAAQ,IAAI;AAEpD,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,eAAe;AAAA,UACf,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,UACnE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,OAAO,MAAM,OAAO;AAAA,cAAA;AAAA,cAEvB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,oBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,MAAM,UAAU,CAAC,KAAK,UAAA,gCAAA,CAE9C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,iBAAiB,MAAM,OAAO;AAAA,MAAA;AAAA,MAIhC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,cAAc,aAAa,MAAM,OAAO,MAAM;AAAA,cAC9C,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,iBAAiB,MAAM,OAAO;AAAA,cAC9B,YAAY,MAAM,MAAM;AAAA,cACxB,YAAY;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,kBAAA;AAAA,kBAGZ,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAM;AAAA,wBACN,OAAO,EAAE,OAAO,MAAM,OAAO,SAAS,YAAY,EAAA;AAAA,sBAAE;AAAA,oBAAA;AAAA,oBAEtD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,YAAY;AAAA,0BACZ,OAAO,MAAM,OAAO;AAAA,0BACpB,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,cAAc;AAAA,wBAAA;AAAA,wBAEhB,OAAO;AAAA,wBAEN,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,cACC,qBAAA,UAAA,EACG,UAAA;AAAA,sBAAA,YACC;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,4BAAA;AAAA,4BACe;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA,IAEd,WACF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA,IAGC,UACF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA,IAID;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAIH;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS,MAAM,KAAK,iBAAA;AAAA,0BACpB,UAAU,CAAC,WAAW;AAAA,0BACtB,OAAO;AAAA,4BACL,iBAAiB,MAAM,OAAO;AAAA,4BAC9B,OAAO,MAAM,OAAO;AAAA,4BACpB,QAAQ;AAAA,4BACR,cAAc;AAAA,4BACd,SAAS;AAAA,4BACT,UAAU,MAAM,UAAU,CAAC;AAAA,4BAC3B,QAAQ,CAAC,WAAW,WAAW,gBAAgB;AAAA,4BAC/C,SAAS,CAAC,WAAW,WAAW,MAAM;AAAA,4BACtC,YAAY;AAAA,0BAAA;AAAA,0BAEf,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAED,GACF;AAAA,oBAED,YAAY,mBACX;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,SAAS;AAAA,wBACT,OAAO;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,QAAQ;AAAA,0BACR,OAAO,MAAM,OAAO;AAAA,0BACpB,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,gBAAgB;AAAA,0BAChB,cAAc;AAAA,0BACd,YAAY;AAAA,wBAAA;AAAA,wBAEd,cAAc,CAAC,MAAM;AACnB,4BAAE,cAAc,MAAM,kBACpB,MAAM,OAAO;AAAA,wBACjB;AAAA,wBACA,cAAc,CAAC,MAAM;AACnB,4BAAE,cAAc,MAAM,kBAAkB;AAAA,wBAC1C;AAAA,wBAEA,UAAA,oBAAC,GAAA,EAAE,MAAM,GAAA,CAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACf;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIF,oBAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,EAAA,GAC/B,UAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,UAAA;AAAA,QAAA,IAGC,QACF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,cAAA;AAAA,cACS;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,IAGV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP;AAAA,YACA,SAAS,aAAa,UAAU;AAAA,YAChC,SAAS;AAAA,cACP,UAAU,CAAC;AAAA,cACX,SAAS,EAAE,SAAS,MAAA;AAAA,cACpB,aAAa;AAAA,cACb,sBAAsB;AAAA,cACtB,UAAU;AAAA,cACV,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,iBAAiB;AAAA,cACjB,SAAS;AAAA,cACT,kBAAkB;AAAA,cAClB,WAAW;AAAA,gBACT,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,uBAAuB;AAAA,gBACvB,yBAAyB;AAAA,cAAA;AAAA,YAC3B;AAAA,YAEF,QAAO;AAAA,YACP,UAAU,aAAa,qBAAqB;AAAA,YAC5C,QAAQ,aAAa,mBAAmB;AAAA,UAAA;AAAA,QAAA,EAC1C,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAWO,MAAM,kBAAkD,CAAC,UAAU;AACxE,SAAO,oBAAC,wBAAA,EAAwB,GAAG,MAAA,CAAO;AAC5C;AAEO,MAAM,yBAAmC,MAAM;AACpD,QAAM,EAAE,MAAA,IAAU,SAAA;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,MAAM,UAAU,CAAC;AAAA,QAC3B,OAAO,MAAM,OAAO;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,MAG1B,UAAA;AAAA,QAAA,qBAAC,OAAA,EACC,UAAA;AAAA,UAAA,oBAAC,UAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,UAAM;AAAA,UAAQ;AAAA,8BAChD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,YAAQ;AAAA,UAAQ;AAAA,8BAClD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,SAAK;AAAA,UAAO;AAAA,UAAI;AAAA,QAAA,GACrD;AAAA,6BACC,OAAA,EAAI,OAAO,EAAE,aAAa,UAAU,UAAA;AAAA,UAAA;AAAA,8BAC1B,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,OAAG;AAAA,UAAO;AAAA,8BACpD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,WAAO;AAAA,UAAO;AAAA,QAAA,GACnD;AAAA,QACA,oBAAC,SAAK,UAAA,IAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhB;ACniBA,MAAM,aAGF;AAAA,EACF,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,UAAU;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,WAAW;AAAA,IACT,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,mBAAmB,CAAC,aAAoC;;AAC5D,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,QAAM,cAAS,MAAM,GAAG,EAAE,IAAA,MAApB,mBAA2B,kBAAiB;AACxD,QAAM,cAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,IACL,GAAG;AAAA,IACH,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,EAAA;AAGP,SAAO,YAAY,GAAG,KAAK;AAC7B;AAmCA,MAAM,sBAAmD,CAAC;AAAA,EACxD;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA0B,UAAU;AAChE,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAiB,EAAE;AACjE,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAiB,EAAE;AACjE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,QAAM,WAAW,QAAQ,MAAM,iBAAiB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAGrE,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AAGrC,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,mDAAmD,YAAY;AAC3E,kBAAY,YAAY;AACxB,gBAAU,iBAAiB,UAAU;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,cAAc,aAAa,CAAC;AAGhC,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,YAAY,CAAC,UAAU;AACnD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,oBAAY,QAAQ,IAAI;AACxB,kBAAU,QAAQ,UAAU,UAAU;AAEtC,YAAI,QAAQ,aAAa,UAAa,QAAQ,aAAa,QAAW;AACpE,6BAAmB,QAAQ,YAAY,EAAE;AACzC,6BAAmB,QAAQ,YAAY,EAAE;AACzC,uBAAa,KAAK;AAClB,mBAAS,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,YAAY,CAAC;AAGzB,YAAU,MAAM;AACd,QAAI,WAAW;AAEf,UAAM,WAAW,YAAY;AAC3B,UAAI,CAAC,UAAU;AACb,2BAAmB,EAAE;AACrB,2BAAmB,EAAE;AACrB,qBAAa,KAAK;AAClB,iBAAS,IAAI;AACb;AAAA,MACF;AAGA,UAAI,EAAC,yCAAY,WAAU;AAEzB;AAAA,MACF;AAEA,mBAAa,IAAI;AACjB,eAAS,IAAI;AAEb,UAAI;AAGF,cAAM,WAAW,MAAM,WAAW,SAAS,QAAQ;AAEnD,YAAI,CAAC,SAAU;AAEf,2BAAmB,YAAY,EAAE;AAGjC,YAAI,WAAW,aAAa;AAC1B,6BAAmB,EAAE;AAAA,QACvB;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,CAAC,SAAU;AAEf,gBAAQ,MAAM,4BAA4B,GAAG;AAC7C;AAAA,UACE,eAAe,QACX,wBAAwB,IAAI,OAAO,KACnC;AAAA,QAAA;AAEN,2BAAmB,EAAE;AACrB,2BAAmB,EAAE;AAAA,MACvB,UAAA;AACE,YAAI,UAAU;AACZ,uBAAa,KAAK;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,SAAA;AAEL,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,UAAU,QAAQ,UAAU,CAAC;AAEjC,QAAM,cAAc,MAAM;AACxB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,KAAK,IAAA;AAAA,MAChB,SAAS,EAAE,MAAM,SAAA;AAAA,IAAS,CAC3B;AACD,gBAAY,IAAI;AAAA,EAClB;AAEA,QAAM,aAAa,SAAS,WAAW,MAAM,IAAI;AACjD,QAAM,cAAc,QAAQ,MAAM;AAChC,QAAI,CAAC,OAAQ,QAAO,MAAM,OAAO;AAEjC,YAAQ,QAAA;AAAA,MACN,KAAK;AACH,eAAO,MAAM,OAAO,WAAW;AAAA,MACjC,KAAK;AACH,eAAO,MAAM,OAAO,WAAW;AAAA,MACjC,KAAK;AACH,eAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,WAAW;AAAA,MACtD,KAAK;AACH,eAAO,MAAM,OAAO,SAAS;AAAA,MAC/B;AACE,eAAO,MAAM,OAAO;AAAA,IAAA;AAAA,EAE1B,GAAG,CAAC,QAAQ,MAAM,MAAM,CAAC;AAEzB,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,OAAO,MAAM,OAAO;AAAA,UACpB,iBAAiB,MAAM,OAAO;AAAA,UAC9B,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,iBAAiB,MAAM,OAAO;AAAA,MAAA;AAAA,MAGhC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,cAAc,aAAa,MAAM,OAAO,MAAM;AAAA,cAC9C,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,iBAAiB,MAAM,OAAO;AAAA,cAC9B,YAAY,MAAM,MAAM;AAAA,cACxB,YAAY;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,kBAAA;AAAA,kBAGZ,UAAA;AAAA,oBAAA;AAAA,sBAACC;AAAAA,sBAAA;AAAA,wBACC,MAAM;AAAA,wBACN,OAAO,EAAE,OAAO,MAAM,OAAO,SAAS,YAAY,EAAA;AAAA,sBAAE;AAAA,oBAAA;AAAA,oBAEtD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,YAAY;AAAA,0BACZ,OAAO,MAAM,OAAO;AAAA,0BACpB,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,cAAc;AAAA,wBAAA;AAAA,wBAEhB,OAAO;AAAA,wBAEN,WAAA,qCAAU,MAAM,KAAK,UAAS;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEhC,cACC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,SAAS;AAAA,0BACT,cAAc;AAAA,0BACd,iBAAiB,GAAG,WAAW;AAAA,0BAC/B,OAAO;AAAA,0BACP,QAAQ,aAAa,WAAW;AAAA,0BAChC,YAAY;AAAA,0BACZ,YAAY;AAAA,wBAAA;AAAA,wBAGb,UAAA,WAAW;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACd;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGH,mBACC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,OAAO;AAAA,oBACL,YAAY;AAAA,oBACZ,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,QAAQ;AAAA,oBACR,OAAO,MAAM,OAAO;AAAA,oBACpB,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,cAAc;AAAA,oBACd,YAAY;AAAA,oBACZ,YAAY;AAAA,kBAAA;AAAA,kBAEd,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBACpB,MAAM,OAAO;AAAA,kBACjB;AAAA,kBACA,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB;AAAA,kBAC1C;AAAA,kBAEA,UAAA,oBAAC,GAAA,EAAE,MAAM,GAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YACf;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,oBAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,EAAA,GAC/B,UAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,UAAA;AAAA,QAAA,IAGC,QACF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAGzB,UAAA;AAAA,UAAA;AAAA,QAAA,IAGH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,YACV;AAAA,YACA,QAAO;AAAA,YACP,SAAS;AAAA,cACP,kBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,SAAS,EAAE,SAAS,MAAA;AAAA,cACpB,iBAAiB;AAAA,cACjB,kBAAkB;AAAA,cAClB,wBAAwB;AAAA,cACxB,sBAAsB;AAAA,cACtB,eAAe;AAAA,cACf,WAAW;AAAA,gBACT,YAAY;AAAA,gBACZ,UAAU;AAAA,gBACV,YAAY;AAAA,cAAA;AAAA,YACd;AAAA,YAEF,kBACE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,OAAO,MAAM,OAAO;AAAA,gBAAA;AAAA,gBAEvB,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA,EAEJ,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAUO,MAAM,eAA4C,CAAC,UAAU;AAClE,SAAO,oBAAC,qBAAA,EAAqB,GAAG,MAAA,CAAO;AACzC;AAEO,MAAM,sBAAgC,MAAM;AACjD,QAAM,EAAE,MAAA,IAAU,SAAA;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,MAAM,UAAU,CAAC;AAAA,QAC3B,OAAO,MAAM,OAAO;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,MAG1B,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,KAAK;AAAA,YAAA;AAAA,YAGP,UAAA,oBAAC,UAAK,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAiB,UAAA,aAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,4BAE/D,OAAA,EAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,6BAAyB;AAAA,4BAC1D,OAAA,EAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,6BAAyB;AAAA,QAC3D,oBAAC,SAAI,OAAO,EAAE,OAAO,MAAM,OAAO,cAAA,GAAiB,UAAA,iBAAA,CAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvE;ACtaA,MAAM,wBAAuD,CAAC;AAAA,EAC5D;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE;AAC3C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAwB,IAAI;AAC9D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAwB,IAAI;AAChE,QAAM,CAAC,UAAU,UAAU,IAAI,SAAkB,KAAK;AAGtD,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AACrC,QAAM,aAAa,QAAQ,yCAAY,SAAS;AAGhD,QAAM,kBAAkB,QAAQ,SAA0B,aAAa;AAGvE,QAAM,UAAU;AAAA,IACd,MAAM;AAAA,MACJ,eAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,uBAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAY;AAAA,QACV,oBAAoB,OAAO,SAAS;AAClC,kBAAQ,KAAK,gCAAgC,KAAK,IAAI;AACtD,iBAAO;AAAA,QACT;AAAA,MAAA,CACD;AAAA,MACD,YAAA;AAAA,MACA,gBAAgB,EAAE,0BAA0B,cAAc;AAAA,MAC1D,iBAAiB;AAAA,QACf,oBAAoB;AAAA,UAClB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,GAAG;AAAA,UACH,KAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,MAAM;AAAA,UACN,OAAO;AAAA,UACP,KAAK;AAAA,QAAA;AAAA,MACP,CACD;AAAA,MACD,kBAAA;AAAA,MACA,iBAAiB;AAAA,QACf,UAAU,aAAa,WAAW;AAAA,MAAA,CACnC;AAAA,MACD,cAAc;AAAA,QACZ,iBAAiB,MACf,oBAAA,UAAA,EACE,UAAA,qBAAC,yBAAA,EACC,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS;AAAA,8BACT,iBAAA,EAAgB;AAAA,8BAChB,4BAAA,EAA2B;AAAA,8BAC3B,YAAA,EAAW;AAAA,8BACX,YAAA,EAAW;AAAA,8BACX,aAAA,EAAY;AAAA,8BACZ,aAAA,EAAY;AAAA,8BACZ,qBAAA,EAAoB;AAAA,8BACpB,aAAA,CAAA,CAAY;AAAA,QAAA,EAAA,CACf,EAAA,CACF;AAAA,MAAA,CAEH;AAAA,IAAA;AAAA,IAEH,CAAC,UAAU;AAAA,EAAA;AAGb,YAAU,MAAM;AACd,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAA,CAAE;AAGL,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,qDAAqD,YAAY;AAC7E,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,YAAU,MAAM;;AACd,QAAI,CAAC,cAAc;AACjB,YAAM,QAAOD,MAAA,mDAAiB,SAAjB,gBAAAA,IAAuB;AACpC,UAAI,SAAS,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,MAAM,IAAI;AAC3D,oBAAY,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,eAAc,wDAAiB,SAAjB,mBAAuB,IAAI,CAAC;AAG9C,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,aAAa,CAAC,UAAU;AACpD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,MAAM,GAAG;AACjD,sBAAY,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,cAAc,MAAM,CAAC;AAEzB,QAAM,eAAe,YAAY,CAAC,UAAkB;AAClD,gBAAY,KAAK;AACjB,eAAW,IAAI;AACf,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,QAAM,aAAa;AAAA,IACjB,OAAO,YAAqB;AAC1B,YAAM,gBAAgB,WAAW;AAEjC,UAAI,aAAY,yCAAY,YAAW;AACrC,YAAI;AACF,gBAAM,WAAW,UAAU,UAAU,aAAa;AAClD,qBAAW,KAAK;AAGhB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,WAAW,KAAK,IAAA;AAAA,YAChB,SAAS,EAAE,MAAM,SAAA;AAAA,UAAS,CAC3B;AAAA,QACH,SAAS,OAAO;AACd,kBAAQ,MAAM,sBAAsB,KAAK;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,YAAY,MAAM;AAAA,EAAA;AAIzC,YAAU,MAAM;AACd,UAAM,kBAAkB,YAAY;AAClC,UAAI,CAAC,YAAY,EAAC,yCAAY,WAAU;AACtC,oBAAY,EAAE;AACd;AAAA,MACF;AAEA,mBAAa,IAAI;AACjB,mBAAa,IAAI;AAEjB,UAAI;AACF,cAAM,UAAU,MAAM,WAAW,SAAS,QAAQ;AAElD,YAAI,YAAY,MAAM;AACpB,sBAAY,OAAO;AACnB,wBAAc,IAAI;AAClB,qBAAW,KAAK;AAAA,QAClB,OAAO;AACL,gBAAM,IAAI,MAAM,qBAAqB;AAAA,QACvC;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,uBAAuB,KAAK;AAC1C,qBAAa,wBAAwB,QAAQ,EAAE;AAC/C,oBAAY,EAAE;AACd,sBAAc,IAAI;AAAA,MACpB,UAAA;AACE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,oBAAA;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAGzB,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AAEjB,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,WAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC7C,UAAE,eAAA;AACF,mBAAA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,YAAY,UAAU,CAAC;AAE3B,MAAI,CAAC,WAAW;AACd,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,SAAI,OAAO,EAAE,cAAc,OAAA,GAAU,UAAA,WAAO;AAAA,UAC7C,oBAAC,SAAK,UAAA,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGtB;AAEA,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,UACnE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,YAAY;AAAA,gBACZ,OAAO,MAAM,OAAO;AAAA,cAAA;AAAA,cAEvB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,UAAU;AAAA,cAAA;AAAA,cAEb,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,QAAM,eACJ,OAAO,aAAa,WAAW,WAAW,OAAO,YAAY,EAAE;AAEjE,QAAM,gBACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU,CAAC;AAAA,UACX,0BAAyB;AAAA,UACzB;AAAA,QAAA;AAAA,QALK,YAAY;AAAA,MAAA;AAAA,IAMnB;AAAA,EAAA;AAIJ,MAAI,YAAY;AACd,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,QAAQ;AAAA,QAAA;AAAA,QAGV,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,iBAAiB,MAAM,OAAO,WAAW;AAAA,gBACzC,OAAO,MAAM,OAAO;AAAA,gBACpB,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,KAAK;AAAA,cAAA;AAAA,cAGP,UAAA;AAAA,gBAAA,oBAAC,UAAK,UAAA,UAAA,CAAO;AAAA,qCACZ,QAAA,EACE,UAAA;AAAA,kBAAA;AAAA,kBAAW;AAAA,gBAAA,EAAA,CAEd;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,8BAED,OAAA,EAAI,OAAO,EAAE,MAAM,EAAA,GAAM,UAAA,cAAA,CAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG9C;AAEA,SAAO;AACT;AAWO,MAAM,iBAAgD,CAAC,UAAU;AACtE,SAAO,oBAAC,uBAAA,EAAuB,GAAG,MAAA,CAAO;AAC3C;AAEO,MAAM,wBAAkC,MAAM;AACnD,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,QAAQ,aAAa,MAAM,OAAO,MAAM;AAAA,QACxC,cAAc;AAAA,QACd,SAAS;AAAA,MAAA;AAAA,MAGX,UAAA;AAAA,QAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,QACnE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,YAAY;AAAA,cACZ,OAAO,MAAM,OAAO;AAAA,cACpB,cAAc;AAAA,YAAA;AAAA,YAEjB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,OAAO,MAAM,OAAO;AAAA,cACpB,WAAW;AAAA,YAAA;AAAA,YAEd,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA;AAAA,EAAA;AAGN;AC5bO,MAAM,eAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,QAAQ,UAAU,MAAM;AAAA,EAC/B,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,eAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,YAAY,aAAa,SAAS;AAAA,QACnD,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,OAAO,QAAQ,MAAM;AAAA,EAC5B,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,mBAA8B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,YAAY,OAAO,QAAQ;AAAA,EAClC,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,wBAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AACF;AAKO,MAAM,gCAAoD;AAAA,EAC/D,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AACT;ACvHO,MAAM,SAA4B;AAAA,EACvC;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,eAAe,UAAU;AAAA,MAClC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,8BAA8B;AAAA,IAC5C;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,OAAO,UAAU;AAAA,MAC1B,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,2BAA2B;AAAA,IACzC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,eAAe,UAAU;AAAA,MAClC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,6BAA6B;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAMO,MAAM,gBAAgB,YAAY;AAEvC,UAAQ,IAAI,4CAA4C;AAC1D;AAMO,MAAM,kBAAkB,YAAY;AAEzC,UAAQ,IAAI,+CAA+C;AAC7D;","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@industry-theme/file-editing-panels",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "Git diff view and editor panels for dev workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/panels.bundle.js",