@ts47andres/exeggutor 1.1.2

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.
@@ -0,0 +1,151 @@
1
+ import * as fs from 'fs';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+
5
+ export interface TerminalTab {
6
+ id: string; // Unique identifier for the terminal tab.
7
+ name: string; // User-facing name of the terminal tab.
8
+ cwd: string; // Current working directory for this terminal session.
9
+ shell?: string; // Optional shell path override for the terminal.
10
+ branch?: string; // Target Git branch assigned to this individual terminal tab.
11
+ worktreePath?: string; // Path to the generated git worktree for this tab if isolated.
12
+ pid?: number; // The process ID of the active shell process.
13
+ }
14
+
15
+ export interface Workspace {
16
+ id: string; // Unique identifier for the workspace.
17
+ name: string; // User-facing name of the workspace.
18
+ path: string; // Core absolute path to the workspace code directory.
19
+ layout?: any; // The react-mosaic-component layout state for this workspace.
20
+ tabs: TerminalTab[]; // List of terminal tabs owned by this workspace.
21
+ }
22
+
23
+ export interface SessionDb {
24
+ workspaces: Workspace[]; // Array of workspaces managed in this system session.
25
+ activeWorkspaceId?: string; // ID of the currently selected active workspace.
26
+ }
27
+
28
+ const dbPath = path.join(os.homedir(), '.exeggutor-sessions.json'); // Absolute system path pointing to the sessions flat-file JSON database.
29
+
30
+ // Reads and parses the sessions database from the local file system.
31
+ export function readDatabase(): SessionDb {
32
+ if (!fs.existsSync(dbPath)) {
33
+ const initialDb: SessionDb = { workspaces: [] }; // The initial structural database template to write when the file does not exist.
34
+ fs.writeFileSync(dbPath, JSON.stringify(initialDb, null, 2), 'utf8');
35
+ return initialDb;
36
+ }
37
+ const rawData = fs.readFileSync(dbPath, 'utf8'); // Loaded string content from the session JSON file.
38
+ const parsed = JSON.parse(rawData) as SessionDb; // Parsed sessions database schema object.
39
+ return parsed;
40
+ }
41
+
42
+ // Serializes and saves the database state back to the local file system.
43
+ export function writeDatabase(db: SessionDb): void {
44
+ const serialized = JSON.stringify(db, null, 2); // Serialized JSON string of the session database structure.
45
+ const tempPath = dbPath + '.tmp'; // Temporary file path to write.
46
+ fs.writeFileSync(tempPath, serialized, 'utf8');
47
+ fs.renameSync(tempPath, dbPath);
48
+ }
49
+
50
+ // Retrieves all workspaces registered in the database.
51
+ export function getWorkspaces(): Workspace[] {
52
+ const db = readDatabase(); // The current session database instance loaded from disk.
53
+ const list = db.workspaces; // The list of workspaces extracted from the loaded database.
54
+ return list;
55
+ }
56
+
57
+ // Creates a new workspace and initializes it in the persistent database.
58
+ export function createWorkspace(name: string, folderPath: string): Workspace {
59
+ const db = readDatabase(); // The active database object loaded from persistent storage.
60
+ const newWorkspace: Workspace = {
61
+ id: 'ws_' + Math.random().toString(36).substring(2, 9), // Dynamically generated unique workspace ID string.
62
+ name: name, // The workspace name passed as a parameter.
63
+ path: path.resolve(folderPath), // Resolved absolute path string.
64
+ tabs: [], // Initialized empty list of terminal tabs.
65
+ }; // The new workspace structure to append.
66
+ db.workspaces.push(newWorkspace);
67
+ if (!db.activeWorkspaceId) {
68
+ db.activeWorkspaceId = newWorkspace.id; // Sets the first workspace as the default active workspace.
69
+ }
70
+ writeDatabase(db);
71
+ const result = newWorkspace; // The created workspace returned to caller.
72
+ return result;
73
+ }
74
+
75
+ // Deletes a workspace by its ID from the persistent database.
76
+ export function deleteWorkspace(id: string): void {
77
+ const db = readDatabase(); // The current database structure loaded from disk.
78
+ const filtered = db.workspaces.filter(ws => ws.id !== id); // Filtered array of workspaces excluding the target workspace ID.
79
+ db.workspaces = filtered;
80
+ if (db.activeWorkspaceId === id) {
81
+ const fallbackId = db.workspaces.length > 0 ? db.workspaces[0].id : undefined; // Fallback workspace ID if the deleted one was active.
82
+ db.activeWorkspaceId = fallbackId;
83
+ }
84
+ writeDatabase(db);
85
+ }
86
+
87
+ // Updates details of an existing workspace in the database.
88
+ export function updateWorkspace(id: string, updates: Partial<Omit<Workspace, 'id' | 'tabs'>>): Workspace | null {
89
+ const db = readDatabase(); // The loaded session database object.
90
+ const wsIndex = db.workspaces.findIndex(ws => ws.id === id); // Index of the target workspace in the array.
91
+ if (wsIndex === -1) {
92
+ const nullResult = null; // Represents a missing workspace lookup outcome.
93
+ return nullResult;
94
+ }
95
+ const updatedWs = { ...db.workspaces[wsIndex], ...updates }; // Blended workspace object with updated values.
96
+ db.workspaces[wsIndex] = updatedWs;
97
+ writeDatabase(db);
98
+ const result = updatedWs; // Returns the updated workspace structure.
99
+ return result;
100
+ }
101
+
102
+ // Creates a new terminal tab under a specific workspace in the database.
103
+ export function createTerminalTab(workspaceId: string, name: string, cwd: string, shell?: string): TerminalTab | null {
104
+ const db = readDatabase(); // The database session object retrieved from file system.
105
+ const ws = db.workspaces.find(w => w.id === workspaceId); // Workspace object referenced by workspaceId.
106
+ if (!ws) {
107
+ const errorResult = null; // Represents a failure to find the workspace.
108
+ return errorResult;
109
+ }
110
+ const newTab: TerminalTab = {
111
+ id: 'tab_' + Math.random().toString(36).substring(2, 9), // Dynamically generated unique tab ID string.
112
+ name: name, // User assigned name of the terminal tab.
113
+ cwd: path.resolve(cwd), // Resolved absolute current working directory.
114
+ shell: shell, // The optional custom shell path override.
115
+ }; // The new terminal tab object to be created.
116
+ ws.tabs.push(newTab);
117
+ writeDatabase(db);
118
+ const result = newTab; // Returns the newly created terminal tab.
119
+ return result;
120
+ }
121
+
122
+ // Deletes a terminal tab from a workspace in the database.
123
+ export function deleteTerminalTab(workspaceId: string, tabId: string): void {
124
+ const db = readDatabase(); // The database state loaded from sessions.json.
125
+ const ws = db.workspaces.find(w => w.id === workspaceId); // Target workspace object.
126
+ if (ws) {
127
+ const filteredTabs = ws.tabs.filter(t => t.id !== tabId); // Filtered terminal tabs excluding the target tab ID.
128
+ ws.tabs = filteredTabs;
129
+ writeDatabase(db);
130
+ }
131
+ }
132
+
133
+ // Updates details of an existing terminal tab in a workspace.
134
+ export function updateTerminalTab(workspaceId: string, tabId: string, updates: Partial<Omit<TerminalTab, 'id'>>): TerminalTab | null {
135
+ const db = readDatabase(); // The loaded session database object.
136
+ const ws = db.workspaces.find(w => w.id === workspaceId); // Target workspace instance.
137
+ if (!ws) {
138
+ const errorResult = null; // Target workspace not found.
139
+ return errorResult;
140
+ }
141
+ const tabIndex = ws.tabs.findIndex(t => t.id === tabId); // Index of the target tab.
142
+ if (tabIndex === -1) {
143
+ const errorResult = null; // Target tab not found.
144
+ return errorResult;
145
+ }
146
+ const updatedTab = { ...ws.tabs[tabIndex], ...updates }; // Blended terminal tab configuration.
147
+ ws.tabs[tabIndex] = updatedTab;
148
+ writeDatabase(db);
149
+ const result = updatedTab; // Returns the updated tab structure.
150
+ return result;
151
+ }
@@ -0,0 +1,47 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}html,body{overflow:hidden;height:100%}body{font-family:Outfit,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}code,pre,.mono{font-family:JetBrains Mono,source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.top-1\/2{top:50%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.m-4{margin:1rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-top:4rem;margin-bottom:4rem}.-ml-2{margin-left:-.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-16{height:4rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-40{max-height:10rem}.max-h-60{max-height:15rem}.min-h-0{min-height:0px}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-16{width:4rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[90vw\]{width:90vw}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0px}.max-w-\[140px\]{max-width:140px}.max-w-\[80px\]{max-width:80px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-bounce{animation:bounce 1s infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dark-700{--tw-border-opacity: 1;border-color:rgb(24 24 27 / var(--tw-border-opacity, 1))}.border-dark-700\/20{border-color:#18181b33}.border-dark-700\/30{border-color:#18181b4d}.border-dark-700\/40{border-color:#18181b66}.border-dark-700\/60{border-color:#18181b99}.border-red-500\/20{border-color:#ef444433}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-white\/20{border-color:#fff3}.border-white\/30{border-color:#ffffff4d}.border-zinc-100\/20{border-color:#f4f4f533}.border-zinc-500\/20{border-color:#71717a33}.border-zinc-700\/20{border-color:#3f3f4633}.border-t-white{--tw-border-opacity: 1;border-top-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-dark-600{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.bg-dark-700{--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.bg-dark-800{--tw-bg-opacity: 1;background-color:rgb(9 9 11 / var(--tw-bg-opacity, 1))}.bg-dark-800\/20{background-color:#09090b33}.bg-dark-800\/40{background-color:#09090b66}.bg-dark-800\/50{background-color:#09090b80}.bg-dark-900{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-dark-900\/30{background-color:#0000004d}.bg-dark-900\/50{background-color:#00000080}.bg-red-500\/10{background-color:#ef44441a}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-zinc-100{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.bg-zinc-100\/10{background-color:#f4f4f51a}.bg-zinc-500{--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity, 1))}.bg-zinc-500\/10{background-color:#71717a1a}.bg-zinc-700\/10{background-color:#3f3f461a}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-slate-100{--tw-gradient-from: #f1f5f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(241 245 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-slate-300{--tw-gradient-to: #cbd5e1 var(--tw-gradient-to-position)}.to-zinc-100{--tw-gradient-to: #f4f4f5 var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1\.5{padding-bottom:.375rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-dark-700{--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}.text-dark-900{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-zinc-100{--tw-text-opacity: 1;color:rgb(244 244 245 / var(--tw-text-opacity, 1))}.text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.text-zinc-700{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-slate-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-600::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(71 85 105 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-600::placeholder{--tw-placeholder-opacity: 1;color:rgb(71 85 105 / var(--tw-placeholder-opacity, 1))}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-glow{--tw-shadow: 0 0 10px rgba(255, 255, 255, .05);--tw-shadow-colored: 0 0 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-white\/20{--tw-shadow-color: rgb(255 255 255 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-white\/5{--tw-shadow-color: rgb(255 255 255 / .05);--tw-shadow: var(--tw-shadow-colored)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.mosaic-blueprint-theme{background:#000!important}.mosaic-blueprint-theme .mosaic-window{background:#09090b!important;border:1px solid #18181b!important;border-radius:10px;overflow:hidden;box-shadow:0 4px 20px #00000080;transition:border-color .2s ease}.mosaic-blueprint-theme .mosaic-window.mosaic-window-focused{border-color:#ffffff73!important;box-shadow:0 0 0 1px #ffffff14,0 4px 24px #ffffff08}.mosaic-blueprint-theme .mosaic-window-toolbar{background:#18181b!important;color:#f4f4f5!important;border-bottom:1px solid #27272a!important;height:38px!important;font-family:Outfit,sans-serif;font-weight:600;font-size:.825rem;padding:0 14px!important;box-shadow:none!important}.mosaic-blueprint-theme .mosaic-window-title{color:#f4f4f5!important;font-family:Outfit,sans-serif;font-weight:600;font-size:.825rem}.mosaic-blueprint-theme .mosaic-window-body{background:#000!important;position:relative}.mosaic-blueprint-theme .mosaic-window-body .xterm{height:100%}.mosaic-blueprint-theme .mosaic-split{background:#18181b!important;width:4px!important;height:4px!important;z-index:10}.mosaic-blueprint-theme .mosaic-split:hover{background:#fff!important}.mosaic-blueprint-theme .control-button{color:#a1a1aa!important;opacity:.8;transition:all .15s ease-in-out}.mosaic-blueprint-theme .control-button:hover{color:#fff!important;opacity:1}.xterm .xterm-viewport{overflow-y:auto!important;overflow-x:hidden!important;scrollbar-width:thin;scrollbar-color:rgba(113,113,122,.4) transparent;touch-action:pan-y;-webkit-overflow-scrolling:touch}.xterm-viewport::-webkit-scrollbar{width:8px}.xterm-viewport::-webkit-scrollbar-track{background:#00000080}.xterm-viewport::-webkit-scrollbar-thumb{background:#71717a66;border-radius:4px}.xterm-viewport::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.selection\:bg-white\/30 *::-moz-selection{background-color:#ffffff4d}.selection\:bg-white\/30 *::selection{background-color:#ffffff4d}.selection\:text-white *::-moz-selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.selection\:text-white *::selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.selection\:bg-white\/30::-moz-selection{background-color:#ffffff4d}.selection\:bg-white\/30::selection{background-color:#ffffff4d}.selection\:text-white::-moz-selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.selection\:text-white::selection{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:border-dark-700:hover{--tw-border-opacity: 1;border-color:rgb(24 24 27 / var(--tw-border-opacity, 1))}.hover\:bg-dark-600:hover{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.hover\:bg-dark-700:hover{--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.hover\:bg-dark-700\/40:hover{background-color:#18181b66}.hover\:bg-dark-700\/50:hover{background-color:#18181b80}.hover\:bg-dark-700\/60:hover{background-color:#18181b99}.hover\:bg-dark-700\/80:hover{background-color:#18181bcc}.hover\:bg-dark-800\/30:hover{background-color:#09090b4d}.hover\:bg-dark-800\/80:hover{background-color:#09090bcc}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-white\/80:hover{background-color:#fffc}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-slate-300:hover{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:text-zinc-700:hover{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-white\/20:hover{--tw-shadow-color: rgb(255 255 255 / .2);--tw-shadow: var(--tw-shadow-colored)}.focus\:border-slate-500:focus{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.focus\:border-white:focus{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width: 1024px){.lg\:absolute{position:absolute}.lg\:left-auto{left:auto}.lg\:top-full{top:100%}.lg\:mt-2{margin-top:.5rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:w-96{width:24rem}.lg\:max-w-none{max-width:none}.lg\:-translate-x-0{--tw-translate-x: -0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:-translate-y-0{--tw-translate-y: -0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}}/**
2
+ * @license
3
+ * Copyright 2019 Kevin Verdieck, originally developed at Palantir Technologies, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */.mosaic{height:100%;width:100%}.mosaic,.mosaic>*{box-sizing:border-box}.mosaic .mosaic-zero-state{position:absolute;top:6px;right:6px;bottom:6px;left:6px;width:auto;height:auto;z-index:1}.mosaic-root{position:absolute;top:3px;right:3px;bottom:3px;left:3px}.mosaic-split{position:absolute;z-index:1;touch-action:none}.mosaic-split:hover{background:#000}.mosaic-split .mosaic-split-line{position:absolute}.mosaic-split.-row{margin-left:-3px;width:6px;cursor:ew-resize}.mosaic-split.-row .mosaic-split-line{top:0;bottom:0;left:3px;right:3px}.mosaic-split.-column{margin-top:-3px;height:6px;cursor:ns-resize}.mosaic-split.-column .mosaic-split-line{top:3px;bottom:3px;left:0;right:0}.mosaic-tile{position:absolute;margin:3px}.mosaic-tile>*{height:100%;width:100%}.mosaic-drop-target{position:relative}.mosaic-drop-target.drop-target-hover .drop-target-container{display:block}.mosaic-drop-target.mosaic>.drop-target-container .drop-target.left{right:calc(100% - 10px)}.mosaic-drop-target.mosaic>.drop-target-container .drop-target.right{left:calc(100% - 10px)}.mosaic-drop-target.mosaic>.drop-target-container .drop-target.bottom{top:calc(100% - 10px)}.mosaic-drop-target.mosaic>.drop-target-container .drop-target.top{bottom:calc(100% - 10px)}.mosaic-drop-target .drop-target-container{position:absolute;top:0;right:0;bottom:0;left:0;display:none}.mosaic-drop-target .drop-target-container.-dragging{display:block}.mosaic-drop-target .drop-target-container .drop-target{position:absolute;top:0;right:0;bottom:0;left:0;background:#0003;border:2px solid black;opacity:0;z-index:5}.mosaic-drop-target .drop-target-container .drop-target.left{right:70%}.mosaic-drop-target .drop-target-container .drop-target.right{left:70%}.mosaic-drop-target .drop-target-container .drop-target.bottom{top:70%}.mosaic-drop-target .drop-target-container .drop-target.top{bottom:70%}.mosaic-drop-target .drop-target-container .drop-target.drop-target-hover{opacity:1}.mosaic-drop-target .drop-target-container .drop-target.drop-target-hover.left{right:50%}.mosaic-drop-target .drop-target-container .drop-target.drop-target-hover.right{left:50%}.mosaic-drop-target .drop-target-container .drop-target.drop-target-hover.bottom{top:50%}.mosaic-drop-target .drop-target-container .drop-target.drop-target-hover.top{bottom:50%}.mosaic-window,.mosaic-preview{position:relative;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 0 1px #0003}.mosaic-window .mosaic-window-toolbar,.mosaic-preview .mosaic-window-toolbar{z-index:4;display:flex;justify-content:space-between;align-items:center;flex-shrink:0;height:30px;background:#fff;box-shadow:0 1px 1px #0003}.mosaic-window .mosaic-window-toolbar.draggable,.mosaic-preview .mosaic-window-toolbar.draggable{cursor:move}.mosaic-window .mosaic-window-title,.mosaic-preview .mosaic-window-title{display:flex;align-items:center;height:100%;padding-left:15px;flex:1;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;min-height:18px}.mosaic-window .mosaic-window-controls,.mosaic-preview .mosaic-window-controls{display:flex;height:100%}.mosaic-window .mosaic-window-controls .separator,.mosaic-preview .mosaic-window-controls .separator{height:20px;border-left:1px solid black;margin:5px 4px}.mosaic-window .mosaic-window-body,.mosaic-preview .mosaic-window-body{position:relative;flex:1;height:0;background:#fff;z-index:1;overflow:hidden}.mosaic-window .mosaic-window-additional-actions-bar,.mosaic-preview .mosaic-window-additional-actions-bar{position:absolute;top:30px;right:0;bottom:initial;left:0;height:0;overflow:hidden;background:#fff;justify-content:flex-end;display:flex;z-index:3}.mosaic-window .mosaic-window-additional-actions-bar .bp4-button,.mosaic-preview .mosaic-window-additional-actions-bar .bp4-button{margin:0}.mosaic-window .mosaic-window-additional-actions-bar .bp4-button:after,.mosaic-preview .mosaic-window-additional-actions-bar .bp4-button:after{display:none}.mosaic-window .mosaic-window-body-overlay,.mosaic-preview .mosaic-window-body-overlay{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;background:#fff;display:none;z-index:2}.mosaic-window.additional-controls-open .mosaic-window-additional-actions-bar,.mosaic-preview.additional-controls-open .mosaic-window-additional-actions-bar{height:30px}.mosaic-window.additional-controls-open .mosaic-window-body-overlay,.mosaic-preview.additional-controls-open .mosaic-window-body-overlay{display:block}.mosaic-window .mosaic-preview,.mosaic-preview .mosaic-preview{height:100%;width:100%;position:absolute;z-index:0;border:1px solid black;max-height:400px}.mosaic-window .mosaic-preview .mosaic-window-body,.mosaic-preview .mosaic-preview .mosaic-window-body{display:flex;flex-direction:column;align-items:center;justify-content:center}.mosaic-window .mosaic-preview h4,.mosaic-preview .mosaic-preview h4{margin-bottom:10px}.mosaic:not(.mosaic-blueprint-theme) .mosaic-default-control.close-button:before{content:"Close"}.mosaic:not(.mosaic-blueprint-theme) .mosaic-default-control.split-button:before{content:"Split"}.mosaic:not(.mosaic-blueprint-theme) .mosaic-default-control.replace-button:before{content:"Replace"}.mosaic:not(.mosaic-blueprint-theme) .mosaic-default-control.expand-button:before{content:"Expand"}.mosaic.mosaic-blueprint-theme{background:#abb3bf}.mosaic.mosaic-blueprint-theme .mosaic-zero-state{background:#e5e8eb;border-radius:2px;box-shadow:0 0 0 1px #11141826}.mosaic.mosaic-blueprint-theme .mosaic-zero-state .default-zero-state-icon{font-size:120px}.mosaic.mosaic-blueprint-theme .mosaic-split:hover{background:none}.mosaic.mosaic-blueprint-theme .mosaic-split:hover .mosaic-split-line{box-shadow:0 0 0 1px #4c90f0}.mosaic.mosaic-blueprint-theme.mosaic-drop-target .drop-target-container .drop-target,.mosaic.mosaic-blueprint-theme .mosaic-drop-target .drop-target-container .drop-target{background:#8abbff33;border:2px solid #4c90f0;transition:opacity .1s;border-radius:2px}.mosaic.mosaic-blueprint-theme .mosaic-window,.mosaic.mosaic-blueprint-theme .mosaic-preview{box-shadow:0 0 0 1px #11141826;border-radius:2px}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-toolbar,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-toolbar{box-shadow:0 1px 1px #11141826;border-top-right-radius:2px;border-top-left-radius:2px}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-toolbar.draggable:hover,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-toolbar.draggable:hover{background:linear-gradient(to bottom,#fff,#f6f7f9)}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-toolbar.draggable:hover .mosaic-window-title,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-toolbar.draggable:hover .mosaic-window-title{color:#111418}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-title,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-title{font-weight:600;color:#404854}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-controls .separator,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-controls .separator{border-left:1px solid #dce0e5}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-controls .bp4-button,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-controls .bp4-button,.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-controls .bp4-button:before,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-controls .bp4-button:before{color:#738091}.mosaic.mosaic-blueprint-theme .mosaic-window .default-preview-icon,.mosaic.mosaic-blueprint-theme .mosaic-preview .default-preview-icon{font-size:72px}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-body,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-body{border-top-width:0;background:#f6f7f9;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-additional-actions-bar,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-additional-actions-bar{transition:height .25s;box-shadow:0 1px 1px #11141826}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-additional-actions-bar .bp4-button,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-additional-actions-bar .bp4-button,.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-window-additional-actions-bar .bp4-button:before,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-window-additional-actions-bar .bp4-button:before{color:#738091}.mosaic.mosaic-blueprint-theme .mosaic-window.additional-controls-open .mosaic-window-toolbar,.mosaic.mosaic-blueprint-theme .mosaic-preview.additional-controls-open .mosaic-window-toolbar{box-shadow:0 1px 0 0 0 0 1px #11141826}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-preview,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-preview{border:1px solid #8f99a8}.mosaic.mosaic-blueprint-theme .mosaic-window .mosaic-preview h4,.mosaic.mosaic-blueprint-theme .mosaic-preview .mosaic-preview h4{color:#404854}.mosaic.mosaic-blueprint-theme.bp4-dark{background:#252a31}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-zero-state{background:#383e47;box-shadow:inset 0 0 0 1px #fff3}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-split:hover .mosaic-split-line{box-shadow:0 0 0 1px #2d72d2}.mosaic.mosaic-blueprint-theme.bp4-dark.mosaic-drop-target .drop-target-container .drop-target,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-drop-target .drop-target-container .drop-target{background:#215db033;border-color:#2d72d2}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window-toolbar,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window-additional-actions-bar{background:#383e47;box-shadow:0 1px 1px #11141866}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview{box-shadow:inset 0 0 0 1px #fff3}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-toolbar.draggable:hover,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-toolbar.draggable:hover{background:linear-gradient(to bottom,#404854,#383e47)}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-toolbar.draggable:hover .mosaic-window-title,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-toolbar.draggable:hover .mosaic-window-title{color:#fff}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-title,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-title{color:#dce0e5}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-controls .separator,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-controls .separator{border-color:#5f6b7c}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-controls .bp4-button,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-controls .bp4-button,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-controls .bp4-button:before,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-controls .bp4-button:before{color:#abb3bf}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-body,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-body{background:#252a31}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-additional-actions-bar .bp4-button,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-additional-actions-bar .bp4-button,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-window-additional-actions-bar .bp4-button:before,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-window-additional-actions-bar .bp4-button:before{color:#c5cbd3}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window.additional-controls-open .mosaic-window-toolbar,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview.additional-controls-open .mosaic-window-toolbar{box-shadow:inset 0 0 0 1px #fff3}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-preview,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-preview{border-color:#5f6b7c}.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-window .mosaic-preview h4,.mosaic.mosaic-blueprint-theme.bp4-dark .mosaic-preview .mosaic-preview h4{color:#edeff2}/**
17
+ * Copyright (c) 2014 The xterm.js authors. All rights reserved.
18
+ * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
19
+ * https://github.com/chjj/term.js
20
+ * @license MIT
21
+ *
22
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
23
+ * of this software and associated documentation files (the "Software"), to deal
24
+ * in the Software without restriction, including without limitation the rights
25
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
26
+ * copies of the Software, and to permit persons to whom the Software is
27
+ * furnished to do so, subject to the following conditions:
28
+ *
29
+ * The above copyright notice and this permission notice shall be included in
30
+ * all copies or substantial portions of the Software.
31
+ *
32
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
33
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
34
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
35
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
36
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
37
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
38
+ * THE SOFTWARE.
39
+ *
40
+ * Originally forked from (with the author's permission):
41
+ * Fabrice Bellard's javascript vt100 for jslinux:
42
+ * http://bellard.org/jslinux/
43
+ * Copyright (c) 2011 Fabrice Bellard
44
+ * The original design remains. The terminal itself
45
+ * has been extended to include xterm CSI codes, among
46
+ * other features.
47
+ */.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.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,.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.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;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}