aa33ad3031
### Summary - Added a new "Apply" button to code snippets provided by the AI assistant. - The button is designed to seamlessly merge the AI-generated snippet into the relevant file in the editor. ### Current Issues 1. **Sticky Accept/Decline Buttons:** These activate for every snippet instead of being limited to the relevant snippet. 2. **Discard Button:** Currently non-functional. 3. **Highlight Inconsistencies:** The green-red code highlights for old and new code are inconsistent. ### To Do - Implement a toast notification when the "Apply" button is pressed on an irrelevant tab to prevent code application errors. ### Workflow Implemented 1. The "Apply" button is added alongside "Copy" and "Reply" for AI-generated code snippets. 2. Upon clicking "Apply," the code snippet and relevant file content (active file) are sent to a secondary model (GPT-4O). 3. The system prompt for GPT-4O instructs it to merge the snippet with the file content: - Ensure the original file functionality remains intact. - Integrate the code snippet seamlessly. 4. The output from GPT-4O is injected directly into the code editor. 5. Changes are visually highlighted: - Green for new code. - Red for removed code. 6. Highlights remain until the user explicitly accepts or discards the changes.
198 lines
3.6 KiB
CSS
198 lines
3.6 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
:root {
|
|
--background: 0 0% 100%;
|
|
--foreground: 0 0% 3.9%;
|
|
|
|
--card: 0 0% 100%;
|
|
--card-foreground: 0 0% 3.9%;
|
|
|
|
--popover: 0 0% 100%;
|
|
--popover-foreground: 0 0% 3.9%;
|
|
|
|
--primary: 0 0% 9%;
|
|
--primary-foreground: 0 0% 98%;
|
|
|
|
--secondary: 0 0% 96.1%;
|
|
--secondary-foreground: 0 0% 9%;
|
|
|
|
--muted: 0 0% 96.1%;
|
|
--muted-foreground: 0 0% 45.1%;
|
|
|
|
--accent: 0 0% 96.1%;
|
|
--accent-foreground: 0 0% 9%;
|
|
|
|
--destructive: 0 84.2% 60.2%;
|
|
--destructive-foreground: 0 0% 98%;
|
|
|
|
--border: 0 0% 89.8%;
|
|
--input: 0 0% 89.8%;
|
|
--ring: 0 0% 3.9%;
|
|
|
|
--radius: 0.5rem;
|
|
}
|
|
|
|
.dark {
|
|
--background: 0 0% 3.9%;
|
|
--foreground: 0 0% 98%;
|
|
|
|
--card: 0 0% 3.9%;
|
|
--card-foreground: 0 0% 98%;
|
|
|
|
--popover: 0 0% 3.9%;
|
|
--popover-foreground: 0 0% 98%;
|
|
|
|
--primary: 0 0% 98%;
|
|
--primary-foreground: 0 0% 9%;
|
|
|
|
--secondary: 0 0% 14.9%;
|
|
--secondary-foreground: 0 0% 98%;
|
|
|
|
--muted: 0 0% 14.9%;
|
|
--muted-foreground: 0 0% 63.9%;
|
|
|
|
--accent: 0 0% 14.9%;
|
|
--accent-foreground: 0 0% 98%;
|
|
|
|
--destructive: 0 62.8% 60%;
|
|
--destructive-foreground: 0 0% 98%;
|
|
|
|
--border: 0 0% 14.9%;
|
|
--input: 0 0% 14.9%;
|
|
--ring: 0 0% 83.1%;
|
|
}
|
|
}
|
|
|
|
@layer base {
|
|
* {
|
|
@apply border-border;
|
|
}
|
|
body {
|
|
@apply bg-background text-foreground;
|
|
}
|
|
}
|
|
|
|
.gradient-button-bg {
|
|
background: radial-gradient(
|
|
circle at top,
|
|
#d4d4d4 0%,
|
|
#262626 50%
|
|
); /* violet 300 -> 800 */
|
|
}
|
|
|
|
.gradient-button {
|
|
background: radial-gradient(
|
|
circle at bottom,
|
|
#262626 -10%,
|
|
hsl(0 0% 3.9%) 50%
|
|
); /* violet 900 -> bg */
|
|
}
|
|
|
|
.gradient-button-bg > div:hover {
|
|
background: radial-gradient(
|
|
circle at bottom,
|
|
#262626 -10%,
|
|
hsl(0 0% 3.9%) 80%
|
|
); /* violet 900 -> bg */
|
|
}
|
|
|
|
.light .gradient-button-bg {
|
|
background: radial-gradient(
|
|
circle at top,
|
|
#262626 0%,
|
|
#f5f5f5 50%
|
|
); /* Dark gray -> Light gray */
|
|
}
|
|
|
|
.light .gradient-button {
|
|
background: radial-gradient(
|
|
circle at bottom,
|
|
hsl(0, 10%, 25%) -10%,
|
|
#9d9d9d 50%
|
|
); /* Light gray -> Almost white */
|
|
}
|
|
|
|
.light .gradient-button-bg > div:hover {
|
|
background: radial-gradient(
|
|
circle at bottom,
|
|
hsl(0, 10%, 25%) -10%,
|
|
#9d9d9d 80%
|
|
); /* Light gray -> Almost white */
|
|
}
|
|
.inline-decoration::before {
|
|
content: "Generate";
|
|
color: #525252;
|
|
}
|
|
.inline-decoration::after {
|
|
content: "⌘G";
|
|
color: #525252;
|
|
border: 1px solid #525252;
|
|
border-bottom-width: 2px;
|
|
padding: 0 4px;
|
|
border-radius: 4px;
|
|
margin-left: 6px;
|
|
line-height: 0;
|
|
}
|
|
|
|
.yRemoteSelection {
|
|
opacity: 0.5;
|
|
background-color: var(--user-color);
|
|
margin-right: -1px;
|
|
}
|
|
|
|
/* Cursor caret */
|
|
.yRemoteSelectionHead {
|
|
position: absolute;
|
|
box-sizing: border-box;
|
|
height: 100%;
|
|
border-left: 2px solid var(--user-color);
|
|
}
|
|
|
|
/* Cursor name */
|
|
.yRemoteSelectionHead::after {
|
|
position: absolute;
|
|
top: -1.4em;
|
|
left: -2px;
|
|
padding: 2px 6px;
|
|
background: var(--user-color);
|
|
color: #fff;
|
|
border: 0;
|
|
border-radius: 6px;
|
|
border-bottom-left-radius: 0;
|
|
line-height: normal;
|
|
white-space: nowrap;
|
|
font-size: 14px;
|
|
font-style: normal;
|
|
font-weight: 600;
|
|
pointer-events: none;
|
|
user-select: none;
|
|
z-index: 1000;
|
|
}
|
|
|
|
.tab-scroll::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
.added-line-decoration {
|
|
background-color: rgba(0, 255, 0, 0.1);
|
|
}
|
|
|
|
.removed-line-decoration {
|
|
background-color: rgba(255, 0, 0, 0.1);
|
|
}
|
|
|
|
.added-line-glyph {
|
|
background-color: #28a745;
|
|
width: 4px !important;
|
|
margin-left: 3px;
|
|
}
|
|
|
|
.removed-line-glyph {
|
|
background-color: #dc3545;
|
|
width: 4px !important;
|
|
margin-left: 3px;
|
|
}
|