@devframes/plugin-terminals 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/bin.mjs +13 -0
- package/dist/cli.d.mts +12 -0
- package/dist/cli.mjs +13 -0
- package/dist/client/index.d.mts +16 -0
- package/dist/client/index.mjs +12095 -0
- package/dist/constants.d.mts +30 -0
- package/dist/constants.mjs +30 -0
- package/dist/index.d.mts +28 -0
- package/dist/index.mjs +3 -0
- package/dist/node/index.d.mts +157 -0
- package/dist/node/index.mjs +580 -0
- package/dist/rpc/index.d.mts +695 -0
- package/dist/rpc/index.mjs +2 -0
- package/dist/rpc-F1ncx7tt.mjs +247 -0
- package/dist/spa/assets/index-Dmm_EwpX.js +38 -0
- package/dist/spa/assets/index-IBTOt_--.css +1 -0
- package/dist/spa/index.html +19 -0
- package/dist/src-Cu5HYNrI.mjs +56 -0
- package/dist/types.d.mts +129 -0
- package/dist/types.mjs +1 -0
- package/dist/vite.d.mts +18 -0
- package/dist/vite.mjs +20 -0
- package/package.json +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--un-bg-opacity:100%;--un-border-opacity:100%;--un-text-opacity:100%;--un-ring-opacity:100%;--un-leading:initial}}@property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-leading{syntax:"*";inherits:false}@property --un-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-ring-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-inset-ring-color{syntax:"*";inherits:false}@property --un-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow-color{syntax:"*";inherits:false}@property --un-ring-color{syntax:"*";inherits:false}@property --un-ring-inset{syntax:"*";inherits:false}@property --un-ring-offset-color{syntax:"*";inherits:false}@property --un-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --un-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow-color{syntax:"*";inherits:false}@property --un-blur{syntax:"*";inherits:false}@property --un-brightness{syntax:"*";inherits:false}@property --un-contrast{syntax:"*";inherits:false}@property --un-drop-shadow{syntax:"*";inherits:false}@property --un-grayscale{syntax:"*";inherits:false}@property --un-hue-rotate{syntax:"*";inherits:false}@property --un-invert{syntax:"*";inherits:false}@property --un-saturate{syntax:"*";inherits:false}@property --un-sepia{syntax:"*";inherits:false}@property --un-numeric-figure{syntax:"*";inherits:false}@property --un-numeric-fraction{syntax:"*";inherits:false}@property --un-numeric-spacing{syntax:"*";inherits:false}@property --un-ordinal{syntax:"*";inherits:false}@property --un-slashed-zero{syntax:"*";inherits:false}:root,:host{--radius-md:.375rem;--spacing:.25rem;--colors-white:#fff;--text-xs-fontSize:.75rem;--text-xs-lineHeight:1rem;--colors-neutral-800:oklch(26.9% 0 0);--colors-neutral-200:oklch(92.2% 0 0);--radius-DEFAULT:.25rem;--font-mono:DM Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-transition-timingFunction:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--radius-lg:.5rem;--font-sans:DM Sans,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--fontWeight-semibold:600;--radius-xl:.75rem;--colors-error-DEFAULT:#f63d68;--colors-success-DEFAULT:#12b76a;--colors-neutral-400:oklch(70.8% 0 0);--text-sm-fontSize:.875rem;--text-sm-lineHeight:1.25rem;--text-5xl-fontSize:3rem;--text-5xl-lineHeight:1;--text-base-fontSize:1rem;--text-base-lineHeight:1.5rem;--colors-primary-500:#578861;--fontWeight-medium:500;--leading-none:1;--colors-blue-400:oklch(70.7% .165 254.624);--colors-amber-400:oklch(82.8% .189 84.429);--colors-green-400:oklch(79.2% .209 151.711);--colors-red-400:oklch(70.4% .191 22.216);--colors-sky-400:oklch(74.6% .16 232.661);--colors-violet-400:oklch(70.2% .183 293.541);--colors-rose-400:oklch(71.2% .194 13.428);--colors-teal-400:oklch(77.7% .152 181.912);--colors-orange-400:oklch(75% .183 55.934);--colors-emerald-400:oklch(76.5% .177 163.223);--colors-primary-600:#40704b;--colors-blue-700:oklch(48.8% .243 264.376);--colors-blue-600:oklch(54.6% .245 262.881);--colors-amber-700:oklch(55.5% .163 48.998);--colors-amber-600:oklch(66.6% .179 58.318);--colors-green-700:oklch(52.7% .154 150.069);--colors-green-600:oklch(62.7% .194 149.214);--colors-red-700:oklch(50.5% .213 27.518);--colors-red-600:oklch(57.7% .245 27.325);--colors-sky-700:oklch(50% .134 242.749);--colors-sky-600:oklch(58.8% .158 241.966);--colors-violet-700:oklch(49.1% .27 292.581);--colors-violet-600:oklch(54.1% .281 293.009);--colors-rose-700:oklch(51.4% .222 16.935);--colors-rose-600:oklch(58.6% .253 17.585);--colors-teal-700:oklch(51.1% .096 186.391);--colors-teal-600:oklch(60% .118 184.704);--colors-orange-700:oklch(55.3% .195 38.402);--colors-orange-600:oklch(64.6% .222 41.116);--colors-emerald-700:oklch(50.8% .118 165.612);--colors-emerald-600:oklch(59.6% .145 163.225);--colors-neutral-600:oklch(43.9% 0 0);--colors-neutral-500:oklch(55.6% 0 0);--colors-primary-400:#75a67e;--colors-primary-300:#93c69d;--colors-blue-300:oklch(80.9% .105 251.813);--colors-amber-300:oklch(87.9% .169 91.605);--colors-green-300:oklch(87.1% .15 154.449);--colors-red-300:oklch(80.8% .114 19.571);--colors-sky-300:oklch(82.8% .111 230.318);--colors-violet-300:oklch(81.1% .111 293.571);--colors-rose-300:oklch(81% .117 11.638);--colors-teal-300:oklch(85.5% .138 181.071);--colors-orange-300:oklch(83.7% .128 66.29);--colors-emerald-300:oklch(84.5% .143 164.978);--default-font-family:var(--font-sans);--default-monoFont-family:var(--font-mono)}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-featureSettings,normal);font-variation-settings:var(--default-font-variationSettings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-monoFont-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-monoFont-featureSettings,normal);font-variation-settings:var(--default-monoFont-variationSettings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden~=until-found])){display:none!important}*,:before,:after{border-color:#8882}.i-ph-arrow-clockwise-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M216 128a88 88 0 1 1-88-88a88 88 0 0 1 88 88' opacity='.2'/%3E%3Cpath d='M240 56v48a8 8 0 0 1-8 8h-48a8 8 0 0 1 0-16h27.4l-26.59-24.36l-.25-.24a80 80 0 1 0-1.67 114.78a8 8 0 0 1 11 11.63A95.44 95.44 0 0 1 128 224h-1.32a96 96 0 1 1 69.07-164L224 85.8V56a8 8 0 1 1 16 0'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-caret-down{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='m213.66 101.66l-80 80a8 8 0 0 1-11.32 0l-80-80a8 8 0 0 1 11.32-11.32L128 164.69l74.34-74.35a8 8 0 0 1 11.32 11.32'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-code-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='m240 128l-48 40H64l-48-40l48-40h128Z' opacity='.2'/%3E%3Cpath d='M69.12 94.15L28.5 128l40.62 33.85a8 8 0 1 1-10.24 12.29l-48-40a8 8 0 0 1 0-12.29l48-40a8 8 0 0 1 10.24 12.3m176 27.7l-48-40a8 8 0 1 0-10.24 12.3L227.5 128l-40.62 33.85a8 8 0 1 0 10.24 12.29l48-40a8 8 0 0 0 0-12.29m-82.39-89.37a8 8 0 0 0-10.25 4.79l-64 176a8 8 0 0 0 4.79 10.26A8.1 8.1 0 0 0 96 224a8 8 0 0 0 7.52-5.27l64-176a8 8 0 0 0-4.79-10.25'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-folder-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M128 80H32V56a8 8 0 0 1 8-8h52.69a8 8 0 0 1 5.65 2.34Z' opacity='.2'/%3E%3Cpath d='M216 72h-84.69L104 44.69A15.86 15.86 0 0 0 92.69 40H40a16 16 0 0 0-16 16v144.62A15.4 15.4 0 0 0 39.38 216h177.51A15.13 15.13 0 0 0 232 200.89V88a16 16 0 0 0-16-16M92.69 56l16 16H40V56ZM216 200H40V88h176Z'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-git-branch-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M224 64a24 24 0 1 1-24-24a24 24 0 0 1 24 24' opacity='.2'/%3E%3Cpath d='M232 64a32 32 0 1 0-40 31v17a8 8 0 0 1-8 8H96a23.8 23.8 0 0 0-8 1.38V95a32 32 0 1 0-16 0v66a32 32 0 1 0 16 0v-17a8 8 0 0 1 8-8h88a24 24 0 0 0 24-24V95a32.06 32.06 0 0 0 24-31M64 64a16 16 0 1 1 16 16a16 16 0 0 1-16-16m32 128a16 16 0 1 1-16-16a16 16 0 0 1 16 16M200 80a16 16 0 1 1 16-16a16 16 0 0 1-16 16'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-magnifying-glass-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M192 112a80 80 0 1 1-80-80a80 80 0 0 1 80 80' opacity='.2'/%3E%3Cpath d='m229.66 218.34l-50.06-50.06a88.21 88.21 0 1 0-11.32 11.31l50.06 50.07a8 8 0 0 0 11.32-11.32M40 112a72 72 0 1 1 72 72a72.08 72.08 0 0 1-72-72'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-person-arms-spread-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M104 40a24 24 0 1 1 24 24a24 24 0 0 1-24-24m108 40H44c-12.87 0-16.71 17.5-5 22.9L96 128l-22.87 86.93a12 12 0 0 0 21.75 10.14L128 168l33.12 57.07a12 12 0 0 0 21.75-10.14L160 128l57-25.1c11.69-5.4 7.85-22.9-5-22.9' opacity='.2'/%3E%3Cpath d='M160 40a32 32 0 1 0-32 32a32 32 0 0 0 32-32m-32 16a16 16 0 1 1 16-16a16 16 0 0 1-16 16m103.5 31.71A19.62 19.62 0 0 0 212 72H44a20 20 0 0 0-8.38 38.16l.13.06l50.75 22.35l-21 79.72a20 20 0 0 0 36.5 16.53l26-44.88l26 44.88a20 20 0 0 0 36.4-16.53l-21-79.72l50.75-22.35l.13-.06a19.63 19.63 0 0 0 11.22-22.45m-17.8 7.9l-56.93 25.07a8 8 0 0 0-4.51 9.36L175.13 217a7 7 0 0 0 .49 1.35a4 4 0 1 1-7.25 3.38c-.11-.22-.22-.43-.34-.63L134.92 164a8 8 0 0 0-13.84 0L88 221.06c-.12.2-.23.41-.34.63a4 4 0 1 1-7.25-3.38a7 7 0 0 0 .49-1.35L103.74 130a8 8 0 0 0-4.51-9.36L42.3 95.61A4 4 0 0 1 44 88h168a4 4 0 0 1 1.73 7.61Z'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-play-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M228.23 134.69L84.15 222.81A8 8 0 0 1 72 216.12V39.88a8 8 0 0 1 12.15-6.69l144.08 88.12a7.82 7.82 0 0 1 0 13.38' opacity='.2'/%3E%3Cpath d='M232.4 114.49L88.32 26.35a16 16 0 0 0-16.2-.3A15.86 15.86 0 0 0 64 39.87v176.26A15.94 15.94 0 0 0 80 232a16.07 16.07 0 0 0 8.36-2.35l144.04-88.14a15.81 15.81 0 0 0 0-27ZM80 215.94V40l143.83 88Z'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-plus{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M224 128a8 8 0 0 1-8 8h-80v80a8 8 0 0 1-16 0v-80H40a8 8 0 0 1 0-16h80V40a8 8 0 0 1 16 0v80h80a8 8 0 0 1 8 8'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-terminal-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M216 80v112H40V64h160a16 16 0 0 1 16 16' opacity='.2'/%3E%3Cpath d='m117.31 134l-72 64a8 8 0 1 1-10.63-12L100 128L34.69 70a8 8 0 1 1 10.63-12l72 64a8 8 0 0 1 0 12ZM216 184h-96a8 8 0 0 0 0 16h96a8 8 0 0 0 0-16'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-terminal-window-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M224 56v144a8 8 0 0 1-8 8H40a8 8 0 0 1-8-8V56a8 8 0 0 1 8-8h176a8 8 0 0 1 8 8' opacity='.2'/%3E%3Cpath d='M128 128a8 8 0 0 1-3 6.25l-40 32a8 8 0 1 1-10-12.5L107.19 128L75 102.25a8 8 0 1 1 10-12.5l40 32a8 8 0 0 1 3 6.25m48 24h-40a8 8 0 0 0 0 16h40a8 8 0 0 0 0-16m56-96v144a16 16 0 0 1-16 16H40a16 16 0 0 1-16-16V56a16 16 0 0 1 16-16h176a16 16 0 0 1 16 16m-16 144V56H40v144z'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-trash-duotone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cg fill='currentColor'%3E%3Cpath d='M200 56v152a8 8 0 0 1-8 8H64a8 8 0 0 1-8-8V56Z' opacity='.2'/%3E%3Cpath d='M216 48h-40v-8a24 24 0 0 0-24-24h-48a24 24 0 0 0-24 24v8H40a8 8 0 0 0 0 16h8v144a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16V64h8a8 8 0 0 0 0-16M96 40a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v8H96Zm96 168H64V64h128Zm-80-104v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0m48 0v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-x{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 256' width='1.11em' height='1.11em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128L50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128Z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.11em;height:1.11em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.badge{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight));--un-leading:var(--leading-none);line-height:var(--leading-none);--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);border-radius:var(--radius-md);gap:calc(var(--spacing) * 1);align-items:center;display:inline-flex}.badge-active{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight));color:color-mix(in srgb, var(--colors-primary-600) var(--un-text-opacity), transparent) ;--un-leading:var(--leading-none);line-height:var(--leading-none);--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);border-radius:var(--radius-md);background-color:color-mix(in oklab, #8881 var(--un-bg-opacity), transparent) ;gap:calc(var(--spacing) * 1);align-items:center;display:inline-flex}.badge-muted{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight));color:color-mix(in srgb, var(--colors-neutral-600) var(--un-text-opacity), transparent) ;--un-leading:var(--leading-none);line-height:var(--leading-none);--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 1.5);padding-block:calc(var(--spacing) * .5);border-radius:var(--radius-md);background-color:color-mix(in oklab, #8881 var(--un-bg-opacity), transparent) ;gap:calc(var(--spacing) * 1);align-items:center;display:inline-flex}.badge-color-amber{color:color-mix(in srgb, var(--colors-amber-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-amber-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-amber-400) 20%, transparent) }.dark .badge-color-amber{color:color-mix(in srgb, var(--colors-amber-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-amber-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-amber-400) 10%, transparent) }.badge-color-blue{color:color-mix(in srgb, var(--colors-blue-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-blue-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-blue-400) 20%, transparent) }.dark .badge-color-blue{color:color-mix(in srgb, var(--colors-blue-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-blue-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-blue-400) 10%, transparent) }.badge-color-emerald{color:color-mix(in srgb, var(--colors-emerald-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-emerald-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-emerald-400) 20%, transparent) }.dark .badge-color-emerald{color:color-mix(in srgb, var(--colors-emerald-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-emerald-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-emerald-400) 10%, transparent) }.badge-color-green{color:color-mix(in srgb, var(--colors-green-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-green-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-green-400) 20%, transparent) }.dark .badge-color-green{color:color-mix(in srgb, var(--colors-green-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-green-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-green-400) 10%, transparent) }.badge-color-orange{color:color-mix(in srgb, var(--colors-orange-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-orange-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-orange-400) 20%, transparent) }.dark .badge-color-orange{color:color-mix(in srgb, var(--colors-orange-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-orange-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-orange-400) 10%, transparent) }.badge-color-red{color:color-mix(in srgb, var(--colors-red-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-red-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-red-400) 20%, transparent) }.dark .badge-color-red{color:color-mix(in srgb, var(--colors-red-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-red-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-red-400) 10%, transparent) }.badge-color-rose{color:color-mix(in srgb, var(--colors-rose-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-rose-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-rose-400) 20%, transparent) }.dark .badge-color-rose{color:color-mix(in srgb, var(--colors-rose-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-rose-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-rose-400) 10%, transparent) }.badge-color-sky{color:color-mix(in srgb, var(--colors-sky-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-sky-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-sky-400) 20%, transparent) }.dark .badge-color-sky{color:color-mix(in srgb, var(--colors-sky-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-sky-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-sky-400) 10%, transparent) }.badge-color-teal{color:color-mix(in srgb, var(--colors-teal-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-teal-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-teal-400) 20%, transparent) }.dark .badge-color-teal{color:color-mix(in srgb, var(--colors-teal-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-teal-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-teal-400) 10%, transparent) }.badge-color-violet{color:color-mix(in srgb, var(--colors-violet-700) var(--un-text-opacity), transparent) ;border-width:1px;border-color:color-mix(in srgb, var(--colors-violet-600) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-violet-400) 20%, transparent) }.dark .badge-color-violet{color:color-mix(in srgb, var(--colors-violet-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in srgb, var(--colors-violet-300) 15%, transparent) ;background-color:color-mix(in srgb, var(--colors-violet-400) 10%, transparent) }.btn-primary{color:color-mix(in srgb, var(--colors-white) var(--un-text-opacity), transparent) ;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5);--un-outline-style:none;border-radius:var(--radius-DEFAULT);background-color:color-mix(in srgb, var(--colors-primary-500) var(--un-bg-opacity), transparent) ;gap:calc(var(--spacing) * 2);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));outline-style:none;align-items:center;display:flex}.dark .badge-active,.dark .color-active{color:color-mix(in srgb, var(--colors-primary-300) var(--un-text-opacity), transparent) }.dark .badge-muted,.dark .color-muted{color:color-mix(in srgb, var(--colors-neutral-400) var(--un-text-opacity), transparent) }.color-active{color:color-mix(in srgb, var(--colors-primary-600) var(--un-text-opacity), transparent) }.color-base,.data-\[state\=active\]\:color-base[data-state=active]{color:color-mix(in srgb, var(--colors-neutral-800) var(--un-text-opacity), transparent) }.dark .color-base,.dark .data-\[state\=active\]\:color-base[data-state=active]{color:color-mix(in srgb, var(--colors-neutral-200) var(--un-text-opacity), transparent) }.color-muted{color:color-mix(in srgb, var(--colors-neutral-600) var(--un-text-opacity), transparent) }.dark .hover\:color-base:hover{color:color-mix(in srgb, var(--colors-neutral-200) var(--un-text-opacity), transparent) }.hover\:color-base:hover{color:color-mix(in srgb, var(--colors-neutral-800) var(--un-text-opacity), transparent) }.dark .placeholder\:color-faint::placeholder,.placeholder\:color-faint::placeholder{color:color-mix(in srgb, var(--colors-neutral-500) var(--un-text-opacity), transparent) }.btn-action{padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1);--un-outline-style:none;border-width:1px;border-color:color-mix(in oklab, #8882 var(--un-border-opacity), transparent) ;border-radius:var(--radius-DEFAULT);opacity:.75;gap:calc(var(--spacing) * 2);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));outline-style:none;align-items:center;display:flex}.btn-icon{--un-outline-style:none;opacity:.65;width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));border-radius:3.40282e38px;outline-style:none;justify-content:center;align-items:center;display:flex}.btn-icon-square{--un-outline-style:none;border-width:1px;border-color:color-mix(in oklab, #8882 var(--un-border-opacity), transparent) ;border-radius:var(--radius-DEFAULT);opacity:.65;width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));outline-style:none;justify-content:center;align-items:center;display:flex}.border-active{border-color:color-mix(in srgb, var(--colors-primary-600) 25%, transparent) }.border-active\!{border-color:color-mix(in srgb, var(--colors-primary-600) 25%, transparent) !important}.dark .border-active{border-color:color-mix(in srgb, var(--colors-primary-400) 25%, transparent) }.dark .border-active\!{border-color:color-mix(in srgb, var(--colors-primary-400) 25%, transparent) !important}.border-base{border-color:color-mix(in oklab, #8882 var(--un-border-opacity), transparent) }.border-base\!{border-color:color-mix(in oklab, #8882 var(--un-border-opacity), transparent) !important}.dark .focus-visible\:border-active:focus-visible{border-color:color-mix(in srgb, var(--colors-primary-400) 25%, transparent) }.focus-visible\:border-active:focus-visible{border-color:color-mix(in srgb, var(--colors-primary-600) 25%, transparent) }.bg-active{background-color:color-mix(in oklab, #8881 var(--un-bg-opacity), transparent) }.bg-active\!{background-color:color-mix(in oklab, #8881 var(--un-bg-opacity), transparent) !important}.bg-base,.data-\[state\=active\]\:bg-base[data-state=active]{background-color:color-mix(in srgb, var(--colors-white) var(--un-bg-opacity), transparent) }.dark .bg-base,.dark .data-\[state\=active\]\:bg-base[data-state=active]{background-color:color-mix(in oklab, #111 var(--un-bg-opacity), transparent) }.bg-secondary{background-color:color-mix(in oklab, #f5f5f5 var(--un-bg-opacity), transparent) }.dark .bg-secondary{background-color:color-mix(in oklab, #1a1a1a var(--un-bg-opacity), transparent) }.hover\:bg-active:hover{background-color:color-mix(in oklab, #8881 var(--un-bg-opacity), transparent) }.btn-action:hover,.btn-icon:hover,.btn-icon-square:hover{background-color:color-mix(in oklab, #8881 var(--un-bg-opacity), transparent) ;opacity:1}.btn-primary:hover{background-color:color-mix(in srgb, var(--colors-primary-600) var(--un-bg-opacity), transparent) }.dark .btn-icon,.dark .btn-icon-square,.dark .op-fade{opacity:.55}.op-fade{opacity:.65}.dark .op-mute{opacity:.25}.op-mute{opacity:.3}.btn-action:disabled{pointer-events:none;opacity:.3!important}.btn-icon:disabled,.btn-icon-square:disabled{opacity:.3;pointer-events:none}.btn-primary:disabled{opacity:.5;pointer-events:none}.container{width:100%}.btn-action:focus-visible,.btn-icon:focus-visible,.btn-icon-square:focus-visible,.btn-primary:focus-visible{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(2px + var(--un-ring-offset-width)) var(--un-ring-color,currentColor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);--un-ring-color:color-mix(in srgb, var(--colors-primary-500) 40%, transparent) }.z-nav{z-index:30}@supports (color:color-mix(in lab, red, red)){.badge-color-amber{color:color-mix(in oklab, var(--colors-amber-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-amber-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-amber-400) 20%, transparent) }.dark .badge-color-amber{color:color-mix(in oklab, var(--colors-amber-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-amber-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-amber-400) 10%, transparent) }.badge-color-blue{color:color-mix(in oklab, var(--colors-blue-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-blue-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-blue-400) 20%, transparent) }.dark .badge-color-blue{color:color-mix(in oklab, var(--colors-blue-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-blue-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-blue-400) 10%, transparent) }.badge-color-emerald{color:color-mix(in oklab, var(--colors-emerald-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-emerald-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-emerald-400) 20%, transparent) }.dark .badge-color-emerald{color:color-mix(in oklab, var(--colors-emerald-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-emerald-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-emerald-400) 10%, transparent) }.badge-color-green{color:color-mix(in oklab, var(--colors-green-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-green-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-green-400) 20%, transparent) }.dark .badge-color-green{color:color-mix(in oklab, var(--colors-green-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-green-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-green-400) 10%, transparent) }.badge-color-orange{color:color-mix(in oklab, var(--colors-orange-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-orange-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-orange-400) 20%, transparent) }.dark .badge-color-orange{color:color-mix(in oklab, var(--colors-orange-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-orange-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-orange-400) 10%, transparent) }.badge-color-red{color:color-mix(in oklab, var(--colors-red-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-red-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-red-400) 20%, transparent) }.dark .badge-color-red{color:color-mix(in oklab, var(--colors-red-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-red-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-red-400) 10%, transparent) }.badge-color-rose{color:color-mix(in oklab, var(--colors-rose-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-rose-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-rose-400) 20%, transparent) }.dark .badge-color-rose{color:color-mix(in oklab, var(--colors-rose-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-rose-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-rose-400) 10%, transparent) }.badge-color-sky{color:color-mix(in oklab, var(--colors-sky-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-sky-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-sky-400) 20%, transparent) }.dark .badge-color-sky{color:color-mix(in oklab, var(--colors-sky-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-sky-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-sky-400) 10%, transparent) }.badge-color-teal{color:color-mix(in oklab, var(--colors-teal-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-teal-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-teal-400) 20%, transparent) }.dark .badge-color-teal{color:color-mix(in oklab, var(--colors-teal-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-teal-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-teal-400) 10%, transparent) }.badge-color-violet{color:color-mix(in oklab, var(--colors-violet-700) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-violet-600) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-violet-400) 20%, transparent) }.dark .badge-color-violet{color:color-mix(in oklab, var(--colors-violet-300) var(--un-text-opacity), transparent) ;border-color:color-mix(in oklab, var(--colors-violet-300) 15%, transparent) ;background-color:color-mix(in oklab, var(--colors-violet-400) 10%, transparent) }.btn-primary{color:color-mix(in oklab, var(--colors-white) var(--un-text-opacity), transparent) ;background-color:color-mix(in oklab, var(--colors-primary-500) var(--un-bg-opacity), transparent) }.badge-active{color:color-mix(in oklab, var(--colors-primary-600) var(--un-text-opacity), transparent) }.dark .badge-active{color:color-mix(in oklab, var(--colors-primary-300) var(--un-text-opacity), transparent) }.badge-muted{color:color-mix(in oklab, var(--colors-neutral-600) var(--un-text-opacity), transparent) }.dark .badge-muted{color:color-mix(in oklab, var(--colors-neutral-400) var(--un-text-opacity), transparent) }.color-active{color:color-mix(in oklab, var(--colors-primary-600) var(--un-text-opacity), transparent) }.dark .color-active{color:color-mix(in oklab, var(--colors-primary-300) var(--un-text-opacity), transparent) }.color-base{color:color-mix(in oklab, var(--colors-neutral-800) var(--un-text-opacity), transparent) }.dark .color-base,.dark .data-\[state\=active\]\:color-base[data-state=active]{color:color-mix(in oklab, var(--colors-neutral-200) var(--un-text-opacity), transparent) }.data-\[state\=active\]\:color-base[data-state=active]{color:color-mix(in oklab, var(--colors-neutral-800) var(--un-text-opacity), transparent) }.color-muted{color:color-mix(in oklab, var(--colors-neutral-600) var(--un-text-opacity), transparent) }.dark .color-muted{color:color-mix(in oklab, var(--colors-neutral-400) var(--un-text-opacity), transparent) }.dark .hover\:color-base:hover{color:color-mix(in oklab, var(--colors-neutral-200) var(--un-text-opacity), transparent) }.hover\:color-base:hover{color:color-mix(in oklab, var(--colors-neutral-800) var(--un-text-opacity), transparent) }.dark .placeholder\:color-faint::placeholder,.placeholder\:color-faint::placeholder{color:color-mix(in oklab, var(--colors-neutral-500) var(--un-text-opacity), transparent) }.border-active{border-color:color-mix(in oklab, var(--colors-primary-600) 25%, transparent) }.border-active\!{border-color:color-mix(in oklab, var(--colors-primary-600) 25%, transparent) !important}.dark .border-active{border-color:color-mix(in oklab, var(--colors-primary-400) 25%, transparent) }.dark .border-active\!{border-color:color-mix(in oklab, var(--colors-primary-400) 25%, transparent) !important}.dark .focus-visible\:border-active:focus-visible{border-color:color-mix(in oklab, var(--colors-primary-400) 25%, transparent) }.focus-visible\:border-active:focus-visible{border-color:color-mix(in oklab, var(--colors-primary-600) 25%, transparent) }.bg-base,.data-\[state\=active\]\:bg-base[data-state=active]{background-color:color-mix(in oklab, var(--colors-white) var(--un-bg-opacity), transparent) }.btn-primary:hover{background-color:color-mix(in oklab, var(--colors-primary-600) var(--un-bg-opacity), transparent) }.btn-action:focus-visible,.btn-icon:focus-visible,.btn-icon-square:focus-visible,.btn-primary:focus-visible{--un-ring-color:color-mix(in oklab, var(--colors-primary-500) 40%, transparent) }}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}@property --scroll-fade-t{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-b{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-s{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-e{syntax:"<length-percentage>";inherits:false;initial-value:0}@property --scroll-fade-mask{syntax:"*";inherits:false}@property --shimmer-angle{syntax:"<angle>";inherits:true;initial-value:20deg}@property --shimmer-image{syntax:"*";inherits:false}@property --shimmer-text-fill{syntax:"*";inherits:false}.text-5xl{font-size:var(--text-5xl-fontSize);line-height:var(--un-leading,var(--text-5xl-lineHeight))}.text-base{font-size:var(--text-base-fontSize);line-height:var(--un-leading,var(--text-base-lineHeight))}.text-sm{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight))}.text-xs{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight))}.text-error{color:color-mix(in srgb, var(--colors-error-DEFAULT) var(--un-text-opacity), transparent) }.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-semibold{--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.tab{tab-size:4}.m\[u\[c\]\]{margin:u[c]}.me{margin-inline-end:calc(var(--spacing) * 4)}.mr-1{margin-right:calc(var(--spacing) * 1)}.ms{margin-inline-start:calc(var(--spacing) * 4)}.mt-1{margin-top:calc(var(--spacing) * 1)}.p-1{padding:calc(var(--spacing) * 1)}.p\[key\]{padding:key}.px{padding-inline:calc(var(--spacing) * 4)}.px-2,.px2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-2\.5\!{padding-inline:calc(var(--spacing) * 2.5)!important}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4\!{padding-inline:calc(var(--spacing) * 4)!important}.py-1,.py1{padding-block:calc(var(--spacing) * 1)}.py-1\!{padding-block:calc(var(--spacing) * 1)!important}.py-2\!{padding-block:calc(var(--spacing) * 2)!important}.py1\.5{padding-block:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pt{padding-top:calc(var(--spacing) * 4)}.text-left{text-align:left}.outline{outline-style:var(--un-outline-style);outline-width:1px}.outline-none{--un-outline-style:none;outline-style:none}.b,.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-current{border-color:currentColor}.border-error\/30\!{border-color:color-mix(in srgb, var(--colors-error-DEFAULT) 30%, transparent) !important}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.rounded{border-radius:var(--radius-DEFAULT)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.bg-error{background-color:color-mix(in srgb, var(--colors-error-DEFAULT) var(--un-bg-opacity), transparent) }.bg-neutral-400{background-color:color-mix(in srgb, var(--colors-neutral-400) var(--un-bg-opacity), transparent) }.bg-success{background-color:color-mix(in srgb, var(--colors-success-DEFAULT) var(--un-bg-opacity), transparent) }.op0{opacity:0}.op100\!{opacity:1!important}.op75{opacity:.75}.group:hover .group-hover\:op60{opacity:.6}.hover\:op100:hover{opacity:1}.hover\:op100\!:hover{opacity:1!important}.disabled\:op30\!:disabled{opacity:.3!important}.underline,.hover\:underline:hover{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.flex{display:flex}.inline-flex{display:inline-flex}.flex-1{flex:1}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.h-10{height:calc(var(--spacing) * 10)}.h-7\!{height:calc(var(--spacing) * 7)!important}.h-8{height:calc(var(--spacing) * 8)}.max-w-52{max-width:calc(var(--spacing) * 52)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-52{min-width:calc(var(--spacing) * 52)}.w-44{width:calc(var(--spacing) * 44)}.w-7\!{width:calc(var(--spacing) * 7)!important}.w-full{width:100%}.w-max{width:max-content}.inline{display:inline}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.contents{display:contents}.hidden{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.cursor-pointer{cursor:pointer}.disabled\:pointer-events-none:disabled{pointer-events:none}.resize{resize:both}.select-none{-webkit-user-select:none;user-select:none}.whitespace-nowrap{white-space:nowrap}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.italic{font-style:italic}.ring{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(1px + var(--un-ring-offset-width)) var(--un-ring-color,currentColor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)}.focus-visible\:ring-2:focus-visible{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(2px + var(--un-ring-offset-width)) var(--un-ring-color,currentColor);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)}.focus-visible\:ring-primary-500\/40:focus-visible{--un-ring-color:color-mix(in srgb, var(--colors-primary-500) 40%, transparent) }.data-\[state\=active\]\:shadow-sm[data-state=active],.shadow,.shadow_root_init\),.shadow-sm{--un-shadow:0 1px 3px 0 var(--un-shadow-color,#0000001a),0 1px 2px -1px var(--un-shadow-color,#0000001a);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)}.shadow-lg{--un-shadow:0 10px 15px -3px var(--un-shadow-color,#0000001a),0 4px 6px -4px var(--un-shadow-color,#0000001a);box-shadow:var(--un-inset-shadow), var(--un-inset-ring-shadow), var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow)}.transform{transform:var(--un-rotate-x) var(--un-rotate-y) var(--un-rotate-z) var(--un-skew-x) var(--un-skew-y)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.items-center{align-items:center}.inset-0{inset:calc(var(--spacing) * 0)}.right-0{right:calc(var(--spacing) * 0)}.justify-center{justify-content:center}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.of-hidden{overflow:hidden}.of-x-auto{overflow-x:auto}.of-y-hidden{overflow-y:hidden}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.blur{--un-blur:blur(8px);filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,)}.filter{filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,)}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal,) var(--un-slashed-zero,) var(--un-numeric-figure,) var(--un-numeric-spacing,) var(--un-numeric-fraction,)}@supports (color:color-mix(in lab, red, red)){.text-error{color:color-mix(in oklab, var(--colors-error-DEFAULT) var(--un-text-opacity), transparent) }.border-error\/30\!{border-color:color-mix(in oklab, var(--colors-error-DEFAULT) 30%, transparent) !important}.bg-error{background-color:color-mix(in oklab, var(--colors-error-DEFAULT) var(--un-bg-opacity), transparent) }.bg-neutral-400{background-color:color-mix(in oklab, var(--colors-neutral-400) var(--un-bg-opacity), transparent) }.bg-success{background-color:color-mix(in oklab, var(--colors-success-DEFAULT) var(--un-bg-opacity), transparent) }.focus-visible\:ring-primary-500\/40:focus-visible{--un-ring-color:color-mix(in oklab, var(--colors-primary-500) 40%, transparent) }}@media (width>=40rem){.sm\:inline{display:inline}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html{color:color-mix(in srgb, var(--colors-neutral-800) var(--un-text-opacity), transparent) ;background-color:color-mix(in srgb, var(--colors-white) var(--un-bg-opacity), transparent) }@supports (color:color-mix(in lab, red, red)){html{color:color-mix(in oklab, var(--colors-neutral-800) var(--un-text-opacity), transparent) ;background-color:color-mix(in oklab, var(--colors-white) var(--un-bg-opacity), transparent) }}.dark html{color:color-mix(in srgb, var(--colors-neutral-200) var(--un-text-opacity), transparent) ;background-color:color-mix(in oklab, #111 var(--un-bg-opacity), transparent) }@supports (color:color-mix(in lab, red, red)){.dark html{color:color-mix(in oklab, var(--colors-neutral-200) var(--un-text-opacity), transparent) }}*{scrollbar-width:thin;scrollbar-color:#88888859 transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#8888884d;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#88888880}@keyframes af-spin{to{transform:rotate(360deg)}}@keyframes af-spin-reverse{to{transform:rotate(-360deg)}}.af-spin{animation:1s linear infinite af-spin}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:9999}html.dark::view-transition-old(root){z-index:9999}html.dark::view-transition-new(root){z-index:1}@media (prefers-reduced-motion:reduce){::view-transition-old(root){animation:none!important}::view-transition-new(root){animation:none!important}}[data-reka-popper-content-wrapper]{z-index:70}[data-af-animate][data-state=open]{animation:.15s both af-fade-in}[data-af-animate][data-state=closed]{animation:.15s both af-fade-out}[data-af-modal][data-state=open]{animation:.18s cubic-bezier(.16,1,.3,1) both af-modal-in}[data-af-modal][data-state=closed]{animation:.15s both af-modal-out}[data-af-drawer]{animation-duration:.22s;animation-timing-function:cubic-bezier(.32,.72,0,1);animation-fill-mode:both}[data-af-drawer][data-side=right]{animation-name:af-slide-right}[data-af-drawer][data-side=left]{animation-name:af-slide-left}[data-af-drawer][data-side=top]{animation-name:af-slide-top}[data-af-drawer][data-side=bottom]{animation-name:af-slide-bottom}[data-af-drawer][data-state=closed]{animation-direction:reverse}@keyframes af-fade-in{0%{opacity:0}}@keyframes af-fade-out{to{opacity:0}}@keyframes af-modal-in{0%{opacity:0;transform:translate(-50%,-50%)scale(.96)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}@keyframes af-modal-out{0%{opacity:1;transform:translate(-50%,-50%)scale(1)}to{opacity:0;transform:translate(-50%,-50%)scale(.96)}}@keyframes af-slide-right{0%{transform:translate(100%)}}@keyframes af-slide-left{0%{transform:translate(-100%)}}@keyframes af-slide-top{0%{transform:translateY(-100%)}}@keyframes af-slide-bottom{0%{transform:translateY(100%)}}@media (prefers-reduced-motion:reduce){[data-af-animate],[data-af-modal],[data-af-drawer]{animation:none!important}}.v-popper__popper .v-popper__inner{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight));color:color-mix(in srgb, var(--colors-neutral-800) var(--un-text-opacity), transparent) ;padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1);border-width:1px;border-color:color-mix(in oklab, #8882 var(--un-border-opacity), transparent) ;border-radius:var(--radius-md);background-color:color-mix(in srgb, var(--colors-white) 75%, transparent) ;--un-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--un-backdrop-blur,) var(--un-backdrop-brightness,) var(--un-backdrop-contrast,) var(--un-backdrop-grayscale,) var(--un-backdrop-hue-rotate,) var(--un-backdrop-invert,) var(--un-backdrop-opacity,) var(--un-backdrop-saturate,) var(--un-backdrop-sepia,);backdrop-filter:var(--un-backdrop-blur,) var(--un-backdrop-brightness,) var(--un-backdrop-contrast,) var(--un-backdrop-grayscale,) var(--un-backdrop-hue-rotate,) var(--un-backdrop-invert,) var(--un-backdrop-opacity,) var(--un-backdrop-saturate,) var(--un-backdrop-sepia,);box-shadow:0 4px 16px #0000001f}@supports (color:color-mix(in lab, red, red)){.v-popper__popper .v-popper__inner{color:color-mix(in oklab, var(--colors-neutral-800) var(--un-text-opacity), transparent) ;background-color:color-mix(in oklab, var(--colors-white) 75%, transparent) }}.dark .v-popper__popper .v-popper__inner{color:color-mix(in srgb, var(--colors-neutral-200) var(--un-text-opacity), transparent) ;background-color:oklab(17.7638% -2.23517e-8 0/.75)}@supports (color:color-mix(in lab, red, red)){.dark .v-popper__popper .v-popper__inner{color:color-mix(in oklab, var(--colors-neutral-200) var(--un-text-opacity), transparent) }}@property --un-backdrop-blur{syntax:"*";inherits:false}@property --un-backdrop-brightness{syntax:"*";inherits:false}@property --un-backdrop-contrast{syntax:"*";inherits:false}@property --un-backdrop-grayscale{syntax:"*";inherits:false}@property --un-backdrop-hue-rotate{syntax:"*";inherits:false}@property --un-backdrop-invert{syntax:"*";inherits:false}@property --un-backdrop-opacity{syntax:"*";inherits:false}@property --un-backdrop-saturate{syntax:"*";inherits:false}@property --un-backdrop-sepia{syntax:"*";inherits:false}.v-popper__popper .v-popper__arrow-outer{border-color:color-mix(in oklab, #8882 var(--un-border-opacity), transparent) }.v-popper__popper .v-popper__arrow-inner{border-color:color-mix(in srgb, var(--colors-white) 75%, transparent) ;visibility:visible}@supports (color:color-mix(in lab, red, red)){.v-popper__popper .v-popper__arrow-inner{border-color:color-mix(in oklab, var(--colors-white) 75%, transparent) }}.dark .v-popper__popper .v-popper__arrow-inner{border-color:oklab(17.7638% -2.23517e-8 0/.75)}.v-popper--theme-dropdown .v-popper__inner{padding:calc(var(--spacing) * 1)}.splitpanes{width:100%;height:100%;display:flex}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical>.splitpanes__pane{transition:width .2s ease-out}.splitpanes--horizontal>.splitpanes__pane{transition:height .2s ease-out}.splitpanes--dragging>.splitpanes__pane{pointer-events:none;transition:none}.splitpanes__splitter{touch-action:none;background-color:color-mix(in oklab, #8882 var(--un-bg-opacity), transparent) ;transition:background-color .2s;position:relative}.splitpanes__splitter:hover{background-color:color-mix(in oklab, #8886 var(--un-bg-opacity), transparent) }.splitpanes--vertical>.splitpanes__splitter{cursor:col-resize;min-width:1px}.splitpanes--horizontal>.splitpanes__splitter{cursor:row-resize;min-height:1px}.splitpanes__splitter:before{content:"";z-index:1;position:absolute;inset:-4px}html,body,#app{height:100vh;margin:0;padding:0}:root{--term-scrollbar:#8884;--term-scrollbar-hover:#8887}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-thumb{background:var(--term-scrollbar);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--term-scrollbar-hover)}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-corner{background:0 0}.xterm{height:100%;padding:0 .25rem}.xterm .xterm-viewport{background:0 0!important}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Terminals</title>
|
|
7
|
+
<style>
|
|
8
|
+
html, body, #app { height: 100%; margin: 0; }
|
|
9
|
+
#app { position: relative; }
|
|
10
|
+
body { background: #0d1117; }
|
|
11
|
+
@media (prefers-color-scheme: light) { body { background: #f6f8fa; } }
|
|
12
|
+
</style>
|
|
13
|
+
<script type="module" crossorigin src="./assets/index-Dmm_EwpX.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="./assets/index-IBTOt_--.css">
|
|
15
|
+
</head>
|
|
16
|
+
<body>
|
|
17
|
+
<div id="app"></div>
|
|
18
|
+
</body>
|
|
19
|
+
</html>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { PLUGIN_ID } from "./constants.mjs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { defineDevframe } from "devframe/types";
|
|
4
|
+
//#region package.json
|
|
5
|
+
var name = "@devframes/plugin-terminals";
|
|
6
|
+
var version = "0.0.1";
|
|
7
|
+
var description = "Portable, hub-native terminal panel for devframe — readonly output streaming and fully interactive PTY shells (TUI-capable).";
|
|
8
|
+
var homepage = "https://github.com/devframes/devframe#readme";
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/index.ts
|
|
11
|
+
/**
|
|
12
|
+
* Build a {@link DevframeDefinition} for the terminals panel. The same
|
|
13
|
+
* definition runs standalone (`createCli`), mounts into a Vite host
|
|
14
|
+
* (`/vite`), or docks inside a hub — its `setup` only relies on the core
|
|
15
|
+
* devframe RPC surface.
|
|
16
|
+
*
|
|
17
|
+
* @experimental This plugin is experimental and may change without a major
|
|
18
|
+
* version bump until it stabilizes.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { createTerminalsDevframe } from '@devframes/plugin-terminals'
|
|
23
|
+
*
|
|
24
|
+
* export default createTerminalsDevframe({
|
|
25
|
+
* presets: [{ id: 'dev', title: 'pnpm dev', command: 'pnpm', args: ['dev'] }],
|
|
26
|
+
* })
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
function createTerminalsDevframe(options = {}) {
|
|
30
|
+
const distDir = options.distDir ?? fileURLToPath(new URL("../dist/spa", import.meta.url));
|
|
31
|
+
return defineDevframe({
|
|
32
|
+
id: PLUGIN_ID,
|
|
33
|
+
name: "Terminals",
|
|
34
|
+
version,
|
|
35
|
+
packageName: name,
|
|
36
|
+
homepage,
|
|
37
|
+
description,
|
|
38
|
+
icon: "ph:terminal-window-duotone",
|
|
39
|
+
basePath: options.basePath,
|
|
40
|
+
cli: {
|
|
41
|
+
command: options.command ?? "devframe-terminals",
|
|
42
|
+
port: options.port ?? 9011,
|
|
43
|
+
distDir,
|
|
44
|
+
auth: false
|
|
45
|
+
},
|
|
46
|
+
spa: { loader: "none" },
|
|
47
|
+
async setup(ctx) {
|
|
48
|
+
const { setupTerminals } = await import("./node/index.mjs");
|
|
49
|
+
await setupTerminals(ctx, options);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** Default-configured terminals devframe (interactive shell, no presets). */
|
|
54
|
+
const terminals = createTerminalsDevframe();
|
|
55
|
+
//#endregion
|
|
56
|
+
export { terminals as n, createTerminalsDevframe as t };
|
package/dist/types.d.mts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* How a session is driven.
|
|
4
|
+
*
|
|
5
|
+
* - `interactive` — a PTY-backed session that accepts keystrokes, resize,
|
|
6
|
+
* and renders full-screen TUIs (vim, htop, Claude Code, …). Falls back to
|
|
7
|
+
* a piped child process when no PTY backend is available.
|
|
8
|
+
* - `readonly` — a piped child process whose combined output is streamed to
|
|
9
|
+
* viewers; stdin is rejected. Ideal for long-running logs / dev servers.
|
|
10
|
+
*/
|
|
11
|
+
type TerminalMode = 'interactive' | 'readonly';
|
|
12
|
+
/** Lifecycle status of a session. */
|
|
13
|
+
type TerminalStatus = 'running' | 'exited' | 'error';
|
|
14
|
+
/** Which OS-level mechanism backs a session. */
|
|
15
|
+
type TerminalBackend = 'pty' | 'pipe';
|
|
16
|
+
/**
|
|
17
|
+
* Serializable descriptor for a single terminal session. Lives in the
|
|
18
|
+
* `devframes-plugin-terminals:sessions` shared state and is returned by the
|
|
19
|
+
* `list` RPC.
|
|
20
|
+
*/
|
|
21
|
+
interface TerminalSessionInfo {
|
|
22
|
+
id: string;
|
|
23
|
+
/** Base label derived from the spawn request (command / preset / "Shell"). */
|
|
24
|
+
title: string;
|
|
25
|
+
/**
|
|
26
|
+
* Live foreground process name of the controlling TTY (e.g. `vim`,
|
|
27
|
+
* `node`), tracked for PTY-backed sessions. Undefined for piped sessions
|
|
28
|
+
* and once the process has exited.
|
|
29
|
+
*/
|
|
30
|
+
processName?: string;
|
|
31
|
+
/** User-assigned name; takes precedence over every derived title in the UI. */
|
|
32
|
+
customTitle?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Window title the running program reported via OSC 0/2 escape sequences
|
|
35
|
+
* (what a real terminal would show in its tab), e.g. `user@host: ~/dir`.
|
|
36
|
+
*/
|
|
37
|
+
termTitle?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Working directory the running program reported via OSC 7 / OSC 9;9 /
|
|
40
|
+
* OSC 1337 escape sequences (shell integration). Tracks `cd` live, unlike
|
|
41
|
+
* the static spawn-time `cwd`.
|
|
42
|
+
*/
|
|
43
|
+
termCwd?: string;
|
|
44
|
+
mode: TerminalMode;
|
|
45
|
+
status: TerminalStatus;
|
|
46
|
+
backend: TerminalBackend;
|
|
47
|
+
command: string;
|
|
48
|
+
args: string[];
|
|
49
|
+
cwd: string;
|
|
50
|
+
cols: number;
|
|
51
|
+
rows: number;
|
|
52
|
+
pid?: number;
|
|
53
|
+
exitCode?: number;
|
|
54
|
+
icon?: string;
|
|
55
|
+
channel?: string;
|
|
56
|
+
/** Preset this session was spawned from, if any. */
|
|
57
|
+
presetId?: string;
|
|
58
|
+
createdAt: number;
|
|
59
|
+
}
|
|
60
|
+
interface TerminalsSharedState {
|
|
61
|
+
sessions: TerminalSessionInfo[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A pre-configured command the UI offers and that clients may spawn by id
|
|
65
|
+
* without `allowArbitraryCommands`.
|
|
66
|
+
*/
|
|
67
|
+
interface TerminalPreset {
|
|
68
|
+
id: string;
|
|
69
|
+
title: string;
|
|
70
|
+
command: string;
|
|
71
|
+
args?: string[];
|
|
72
|
+
cwd?: string;
|
|
73
|
+
/** @default 'readonly' for presets, 'interactive' for the shell */
|
|
74
|
+
mode?: TerminalMode;
|
|
75
|
+
env?: Record<string, string>;
|
|
76
|
+
icon?: string;
|
|
77
|
+
}
|
|
78
|
+
/** Wire payload for the `spawn` RPC. */
|
|
79
|
+
interface SpawnRequest {
|
|
80
|
+
/** Spawn a configured preset by id. */
|
|
81
|
+
presetId?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Explicit command. Requires `allowArbitraryCommands` unless it resolves
|
|
84
|
+
* to the configured shell. Omit to spawn the default shell.
|
|
85
|
+
*/
|
|
86
|
+
command?: string;
|
|
87
|
+
args?: string[];
|
|
88
|
+
cwd?: string;
|
|
89
|
+
mode?: TerminalMode;
|
|
90
|
+
title?: string;
|
|
91
|
+
cols?: number;
|
|
92
|
+
rows?: number;
|
|
93
|
+
env?: Record<string, string>;
|
|
94
|
+
}
|
|
95
|
+
/** Options accepted by {@link createTerminalsDevframe}. */
|
|
96
|
+
interface TerminalsOptions {
|
|
97
|
+
/** Shell used for interactive sessions. Defaults to `$SHELL` / platform default. */
|
|
98
|
+
shell?: string;
|
|
99
|
+
/** Extra args passed to the shell. Defaults to an interactive-login flag set. */
|
|
100
|
+
shellArgs?: string[];
|
|
101
|
+
/** Default working directory for new sessions. Defaults to `ctx.cwd`. */
|
|
102
|
+
cwd?: string;
|
|
103
|
+
/** Environment variables merged into every spawned session. */
|
|
104
|
+
env?: Record<string, string>;
|
|
105
|
+
/** Spawnable command presets surfaced in the UI. */
|
|
106
|
+
presets?: TerminalPreset[];
|
|
107
|
+
/**
|
|
108
|
+
* Allow clients to spawn arbitrary command strings beyond presets and the
|
|
109
|
+
* configured shell. Default `false` (deny) for safety.
|
|
110
|
+
*/
|
|
111
|
+
allowArbitraryCommands?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Default mode for the shell session created on demand.
|
|
114
|
+
* @default 'interactive'
|
|
115
|
+
*/
|
|
116
|
+
defaultMode?: TerminalMode;
|
|
117
|
+
/** Output chunks retained per session for replay on reconnect. */
|
|
118
|
+
scrollback?: number;
|
|
119
|
+
/** Mount path override. */
|
|
120
|
+
basePath?: string;
|
|
121
|
+
/** SPA dist dir override. Defaults to the bundled SPA. */
|
|
122
|
+
distDir?: string;
|
|
123
|
+
/** CLI binary name. */
|
|
124
|
+
command?: string;
|
|
125
|
+
/** Preferred dev-server port. */
|
|
126
|
+
port?: number;
|
|
127
|
+
}
|
|
128
|
+
//#endregion
|
|
129
|
+
export { SpawnRequest, TerminalBackend, TerminalMode, TerminalPreset, TerminalSessionInfo, TerminalStatus, TerminalsOptions, TerminalsSharedState };
|
package/dist/types.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/vite.d.mts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TerminalsOptions } from "./types.mjs";
|
|
2
|
+
import { DevframeVitePlugin, ViteDevBridgeOptions } from "devframe/helpers/vite";
|
|
3
|
+
|
|
4
|
+
//#region src/vite.d.ts
|
|
5
|
+
interface TerminalsViteOptions extends TerminalsOptions {
|
|
6
|
+
/** Forwarded to the underlying `viteDevBridge` (mount base, etc.). */
|
|
7
|
+
vite?: ViteDevBridgeOptions;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Mount the terminals panel into an existing Vite dev server. Returns two
|
|
11
|
+
* plugins: a bridge that starts the devframe RPC + WebSocket server (so the
|
|
12
|
+
* panel can stream terminal output), and a static mount that serves the
|
|
13
|
+
* bundled SPA at the mount base. The bridge is listed first so its
|
|
14
|
+
* `__connection.json` route is matched ahead of the SPA fallback.
|
|
15
|
+
*/
|
|
16
|
+
declare function terminalsVite(options?: TerminalsViteOptions): DevframeVitePlugin[];
|
|
17
|
+
//#endregion
|
|
18
|
+
export { TerminalsViteOptions, terminalsVite };
|
package/dist/vite.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { t as createTerminalsDevframe } from "./src-Cu5HYNrI.mjs";
|
|
2
|
+
import { viteDevBridge } from "devframe/helpers/vite";
|
|
3
|
+
//#region src/vite.ts
|
|
4
|
+
/**
|
|
5
|
+
* Mount the terminals panel into an existing Vite dev server. Returns two
|
|
6
|
+
* plugins: a bridge that starts the devframe RPC + WebSocket server (so the
|
|
7
|
+
* panel can stream terminal output), and a static mount that serves the
|
|
8
|
+
* bundled SPA at the mount base. The bridge is listed first so its
|
|
9
|
+
* `__connection.json` route is matched ahead of the SPA fallback.
|
|
10
|
+
*/
|
|
11
|
+
function terminalsVite(options = {}) {
|
|
12
|
+
const { vite, ...terminalsOptions } = options;
|
|
13
|
+
const definition = createTerminalsDevframe(terminalsOptions);
|
|
14
|
+
return [viteDevBridge(definition, {
|
|
15
|
+
...vite,
|
|
16
|
+
devMiddleware: true
|
|
17
|
+
}), viteDevBridge(definition, vite)];
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { terminalsVite };
|
package/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@devframes/plugin-terminals",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"description": "Portable, hub-native terminal panel for devframe — readonly output streaming and fully interactive PTY shells (TUI-capable).",
|
|
6
|
+
"author": "Anthony Fu <anthonyfu117@hotmail.com>",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"homepage": "https://github.com/devframes/devframe#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"directory": "plugins/terminals",
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/devframes/devframe.git"
|
|
13
|
+
},
|
|
14
|
+
"bugs": "https://github.com/devframes/devframe/issues",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"devframe",
|
|
17
|
+
"devtools",
|
|
18
|
+
"terminal",
|
|
19
|
+
"pty",
|
|
20
|
+
"xterm"
|
|
21
|
+
],
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"exports": {
|
|
24
|
+
".": "./dist/index.mjs",
|
|
25
|
+
"./cli": "./dist/cli.mjs",
|
|
26
|
+
"./client": "./dist/client/index.mjs",
|
|
27
|
+
"./constants": "./dist/constants.mjs",
|
|
28
|
+
"./node": "./dist/node/index.mjs",
|
|
29
|
+
"./rpc": "./dist/rpc/index.mjs",
|
|
30
|
+
"./types": "./dist/types.mjs",
|
|
31
|
+
"./vite": "./dist/vite.mjs",
|
|
32
|
+
"./package.json": "./package.json"
|
|
33
|
+
},
|
|
34
|
+
"types": "./dist/index.d.mts",
|
|
35
|
+
"bin": {
|
|
36
|
+
"devframe-terminals": "./bin.mjs"
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"bin.mjs",
|
|
40
|
+
"dist"
|
|
41
|
+
],
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"vite": "^8.0.0",
|
|
44
|
+
"devframe": "0.5.4"
|
|
45
|
+
},
|
|
46
|
+
"peerDependenciesMeta": {
|
|
47
|
+
"vite": {
|
|
48
|
+
"optional": true
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@xterm/addon-fit": "^0.11.0",
|
|
53
|
+
"@xterm/xterm": "^6.0.0",
|
|
54
|
+
"nostics": "^1.1.4",
|
|
55
|
+
"pathe": "^2.0.3",
|
|
56
|
+
"valibot": "^1.4.1",
|
|
57
|
+
"zigpty": "^0.2.1"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@antfu/design": "^0.2.1",
|
|
61
|
+
"@iconify-json/ph": "^1.2.0",
|
|
62
|
+
"@storybook/svelte-vite": "^10.4.6",
|
|
63
|
+
"@sveltejs/vite-plugin-svelte": "^5.0.0",
|
|
64
|
+
"@types/node": "^25.9.1",
|
|
65
|
+
"colorjs.io": "^0.6.0",
|
|
66
|
+
"get-port-please": "^3.2.0",
|
|
67
|
+
"h3": "2.0.1-rc.22",
|
|
68
|
+
"storybook": "^10.4.6",
|
|
69
|
+
"svelte": "^5.0.0",
|
|
70
|
+
"tsdown": "^0.22.0",
|
|
71
|
+
"typescript": "^6.0.3",
|
|
72
|
+
"unocss": "^66.0.0",
|
|
73
|
+
"vite": "^8.0.14",
|
|
74
|
+
"vite-plugin-css-injected-by-js": "^3.5.0",
|
|
75
|
+
"vitest": "^4.1.7",
|
|
76
|
+
"ws": "^8.21.0",
|
|
77
|
+
"devframe": "0.5.4"
|
|
78
|
+
},
|
|
79
|
+
"scripts": {
|
|
80
|
+
"build": "tsdown && vite build --config src/client/vite.config.ts && vite build --config src/spa/vite.config.ts",
|
|
81
|
+
"watch": "tsdown --watch",
|
|
82
|
+
"dev": "node bin.mjs",
|
|
83
|
+
"storybook": "storybook dev -p 6014 --host 0.0.0.0",
|
|
84
|
+
"build-storybook": "storybook build",
|
|
85
|
+
"test": "vitest run",
|
|
86
|
+
"typecheck": "tsc --noEmit"
|
|
87
|
+
}
|
|
88
|
+
}
|