-
Notifications
You must be signed in to change notification settings - Fork 0
style: fix UI broken issues, transition to lucide icons and resolve l… #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. | ||
|
|
||
| # dependencies | ||
| /node_modules | ||
| /.pnp | ||
| .pnp.* | ||
| .yarn/* | ||
| !.yarn/patches | ||
| !.yarn/plugins | ||
| !.yarn/releases | ||
| !.yarn/versions | ||
|
|
||
| # testing | ||
| /coverage | ||
|
|
||
| # next.js | ||
| /.next/ | ||
| /out/ | ||
|
|
||
| # production | ||
| /build | ||
|
|
||
| # misc | ||
| .DS_Store | ||
| *.pem | ||
|
|
||
| # debug | ||
| npm-debug.log* | ||
| yarn-debug.log* | ||
| yarn-error.log* | ||
| .pnpm-debug.log* | ||
|
|
||
| # env files (can opt-in for committing if needed) | ||
| .env* | ||
|
|
||
| # vercel | ||
| .vercel | ||
|
|
||
| # typescript | ||
| *.tsbuildinfo | ||
| next-env.d.ts |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). | ||
|
|
||
| ## Getting Started | ||
|
|
||
| First, run the development server: | ||
|
|
||
| ```bash | ||
| npm run dev | ||
| # or | ||
| yarn dev | ||
| # or | ||
| pnpm dev | ||
| # or | ||
| bun dev | ||
| ``` | ||
|
|
||
| Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. | ||
|
|
||
| You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. | ||
|
|
||
| This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. | ||
|
|
||
| ## Learn More | ||
|
|
||
| To learn more about Next.js, take a look at the following resources: | ||
|
|
||
| - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. | ||
| - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. | ||
|
|
||
| You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! | ||
|
|
||
| ## Deploy on Vercel | ||
|
|
||
| The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. | ||
|
|
||
| Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| @import "tailwindcss"; | ||
|
|
||
| @theme { | ||
| --color-primary: #d9b74a; | ||
| --color-surface-dark: #1a1a1e; | ||
| --color-background-dark: #0f0f11; | ||
| --font-display: "Newsreader", serif; | ||
| --font-sans: "Inter", "Noto Sans KR", sans-serif; | ||
| } | ||
|
|
||
| :root { | ||
| --background: #0f0f11; | ||
| --foreground: #f8f7f6; | ||
| --primary: #d9b74a; | ||
| --border: #27272a; | ||
| } | ||
|
|
||
| body { | ||
| background-color: #0f0f11 !important; | ||
| color: #f8f7f6 !important; | ||
| margin: 0; | ||
| padding: 0; | ||
| } | ||
|
|
||
| /* Custom scrollbar for a cleaner look */ | ||
| ::-webkit-scrollbar { | ||
| width: 8px; | ||
| } | ||
|
|
||
| ::-webkit-scrollbar-track { | ||
| background: #0f0f11; | ||
| } | ||
|
|
||
| ::-webkit-scrollbar-thumb { | ||
| background: #333; | ||
| border-radius: 4px; | ||
| } | ||
|
|
||
| ::-webkit-scrollbar-thumb:hover { | ||
| background: #444; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| import "./globals.css"; | ||
|
|
||
| export default function RootLayout({ | ||
| children, | ||
| }: Readonly<{ | ||
| children: React.ReactNode; | ||
| }>) { | ||
| return ( | ||
| <html lang="en" className="dark"> | ||
| <head> | ||
| <link rel="preconnect" href="https://fonts.googleapis.com" /> | ||
| <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" /> | ||
| <link href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&family=Newsreader:ital,opsz,wght@0,6..72,200..800;1,6..72,200..800&family=Noto+Sans+KR:wght@100..900&display=swap" rel="stylesheet" /> | ||
| </head> | ||
| <body | ||
| className="bg-[#0f0f11] min-h-screen text-slate-100 font-sans antialiased" | ||
| style={{ | ||
| backgroundColor: "#0f0f11", | ||
| color: "#f8f7f6" | ||
| }} | ||
| > | ||
| {children} | ||
| </body> | ||
| </html> | ||
| ); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| import { Sidebar } from "../components/sidebar/Sidebar"; | ||
| import { ChatMain } from "../components/chat/ChatMain"; | ||
|
|
||
| export default function Home() { | ||
| return ( | ||
| <div className="flex h-screen overflow-hidden"> | ||
| <Sidebar /> | ||
| <ChatMain /> | ||
| </div> | ||
|
Comment on lines
+1
to
+9
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Search for all page.tsx and layout.tsx files
echo "=== Searching for page.tsx files ==="
fd 'page\.tsx' frontend --type f
echo ""
echo "=== Searching for layout.tsx files ==="
fd 'layout\.tsx' frontend --type f
echo ""
echo "=== Frontend directory structure ==="
find frontend -type f -name "*.tsx" -o -name "*.ts" -o -name "*.json" | grep -E "(tsconfig|next\.config|package\.json)" | head -20Repository: SanghunYun95/philo-rag Length of output: 349 🏁 Script executed: #!/bin/bash
# Check Next.js configuration and app directory structure
echo "=== Checking frontend directory structure ==="
ls -la frontend/ 2>/dev/null | head -20
echo ""
echo "=== Checking for src directory ==="
test -d frontend/src && echo "src/ exists" && ls -la frontend/src/ || echo "src/ does not exist"
echo ""
echo "=== Checking for app directory ==="
test -d frontend/app && echo "app/ exists" && ls -la frontend/app/ || echo "app/ does not exist"
echo ""
echo "=== Checking tsconfig.json for baseUrl/paths ==="
if [ -f frontend/tsconfig.json ]; then
cat frontend/tsconfig.json | grep -A 10 "baseUrl\|paths"
fiRepository: SanghunYun95/philo-rag Length of output: 1838 🏁 Script executed: #!/bin/bash
# Check Next.js configuration
echo "=== Checking next.config.js ==="
if [ -f frontend/next.config.js ]; then
cat frontend/next.config.js
fi
echo ""
echo "=== Complete file tree for frontend ==="
find frontend -type f \( -name "page.tsx" -o -name "layout.tsx" -o -name "next.config.*" -o -name "tsconfig.json" \) | sortRepository: SanghunYun95/philo-rag Length of output: 285 🏁 Script executed: #!/bin/bash
# Check the content of next.config.ts
echo "=== Content of next.config.ts ==="
cat frontend/next.config.ts
echo ""
echo "=== Content of app/page.tsx ==="
cat frontend/app/page.tsx
echo ""
echo "=== Content of src/app/page.tsx ==="
cat frontend/src/app/page.tsxRepository: SanghunYun95/philo-rag Length of output: 3476
현재 프로젝트에서 🤖 Prompt for AI Agents |
||
| ); | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| import { Share, Plus } from "lucide-react"; | ||
| import { MessageList } from "./MessageList"; | ||
| import { FloatingInput } from "./FloatingInput"; | ||
|
|
||
| export function ChatMain() { | ||
| return ( | ||
| <main className="flex-1 flex flex-col relative min-h-0 bg-[#0f0f11] overflow-hidden"> | ||
| {/* Top Navigation / Context Header */} | ||
| <div className="flex-none p-6 flex justify-between items-start bg-[#0f0f11] border-b border-white/5 z-30"> | ||
| <div> | ||
| <h2 className="font-display text-3xl text-white/90">Dialogue on Virtue</h2> | ||
| <p className="text-sm text-white/40 mt-1">Session started today at 10:42 AM</p> | ||
| </div> | ||
| <div className="flex gap-2"> | ||
| <button className="px-4 py-2 rounded-full bg-white/5 border border-white/10 text-white/60 text-sm hover:bg-white/10 hover:text-white transition-colors flex items-center gap-2"> | ||
| <Share className="w-4 h-4" /> | ||
| Export | ||
| </button> | ||
| <button className="px-4 py-2 rounded-full bg-white/5 border border-white/10 text-white/60 text-sm hover:bg-white/10 hover:text-white transition-colors flex items-center gap-2"> | ||
| <Plus className="w-4 h-4" /> | ||
| New Chat | ||
| </button> | ||
| </div> | ||
| </div> | ||
|
|
||
| {/* Scrollable Message Area */} | ||
| <div className="flex-1 overflow-y-auto w-full relative"> | ||
| <MessageList /> | ||
| </div> | ||
|
|
||
| {/* Bottom Input Area Container */} | ||
| <div className="flex-none w-full bg-[#0f0f11] border-t border-white/5 p-4 z-30"> | ||
| <FloatingInput /> | ||
| </div> | ||
| </main> | ||
| ); | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,43 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import { Paperclip, Mic, ArrowUp } from "lucide-react"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| export function FloatingInput() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="w-full max-w-3xl mx-auto relative group"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| {/* Glow effect behind input */} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="absolute -inset-0.5 bg-gradient-to-r from-[#d9b74a]/10 via-white/5 to-[#d9b74a]/10 rounded-2xl blur opacity-20 group-hover:opacity-40 transition duration-1000"></div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="relative flex items-end gap-2 bg-[#1e1e24] p-2 pr-2 pl-4 rounded-2xl border border-white/10 shadow-xl"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <button | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| className="mb-2 p-2 rounded-lg text-white/30 hover:text-[#d9b74a] hover:bg-white/5 transition-colors" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| title="Upload Context" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <Paperclip className="w-5 h-5" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex-1 py-3"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <textarea | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| className="w-full bg-transparent border-0 text-white placeholder-white/20 focus:ring-0 p-0 resize-none font-sans leading-relaxed max-h-32 outline-none" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| placeholder="Inquire about virtue, metaphysics, or ethics..." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rows={1} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| style={{ minHeight: "24px" }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ></textarea> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="flex items-center gap-1 mb-1"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <button | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| className="p-2 rounded-lg text-white/30 hover:text-[#d9b74a] hover:bg-white/5 transition-colors" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| title="Voice Input" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <Mic className="w-5 h-5" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <button className="h-10 w-10 rounded-xl bg-white text-[#0f0f11] flex items-center justify-center hover:bg-[#d9b74a] transition-colors shadow-lg"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <ArrowUp className="w-5 h-5" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+10
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아이콘 전용 컨트롤에 접근 가능한 이름/포커스 처리가 부족합니다. Line 10~33의 버튼들과 Line 17의 ♿ 제안 패치- <button
+ <button
+ type="button"
+ aria-label="Upload context"
className="mb-2 p-2 rounded-lg text-white/30 hover:text-[`#d9b74a`] hover:bg-white/5 transition-colors"
title="Upload Context"
>
@@
- <textarea
+ <label htmlFor="chat-input" className="sr-only">메시지 입력</label>
+ <textarea
+ id="chat-input"
+ aria-label="메시지 입력"
className="w-full bg-transparent border-0 text-white placeholder-white/20 focus:ring-0 p-0 resize-none font-sans leading-relaxed max-h-32 outline-none"
@@
- <button
+ <button
+ type="button"
+ aria-label="Voice input"
className="p-2 rounded-lg text-white/30 hover:text-[`#d9b74a`] hover:bg-white/5 transition-colors"
title="Voice Input"
>
@@
- <button className="h-10 w-10 rounded-xl bg-white text-[`#0f0f11`] flex items-center justify-center hover:bg-[`#d9b74a`] transition-colors shadow-lg">
+ <button
+ type="button"
+ aria-label="Send message"
+ className="h-10 w-10 rounded-xl bg-white text-[`#0f0f11`] flex items-center justify-center hover:bg-[`#d9b74a`] transition-colors shadow-lg"
+ >📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <div className="text-center mt-2"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <p className="text-[10px] text-white/20"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PhiloRAG can make mistakes. Verify important philosophical references. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </p> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,108 @@ | ||||||||||||||||||||||
| import { Sparkles, SquareArrowOutUpRight, ThumbsUp, Copy, RotateCcw, ChevronRight } from "lucide-react"; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| export function MessageList() { | ||||||||||||||||||||||
| return ( | ||||||||||||||||||||||
| <div className="w-full px-8 pt-10 pb-10"> | ||||||||||||||||||||||
| <div className="max-w-3xl mx-auto flex flex-col gap-10"> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| {/* User Message */} | ||||||||||||||||||||||
| <div className="flex justify-end group"> | ||||||||||||||||||||||
| <div className="flex flex-col items-end max-w-[80%]"> | ||||||||||||||||||||||
| <div className="bg-[#1a1a1e] border border-white/10 rounded-2xl rounded-tr-sm px-6 py-4 shadow-lg"> | ||||||||||||||||||||||
| <p className="text-white/90 font-sans leading-relaxed"> | ||||||||||||||||||||||
| How would Socrates define virtue in the context of modern ethics, particularly regarding digital privacy? | ||||||||||||||||||||||
| </p> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| <span className="text-[11px] text-white/20 mt-2 mr-2">User • 10:43 AM</span> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| {/* AI Response */} | ||||||||||||||||||||||
| <div className="flex gap-6 group"> | ||||||||||||||||||||||
| <div className="shrink-0 flex flex-col items-center gap-3"> | ||||||||||||||||||||||
| <div className="h-10 w-10 rounded-full bg-gradient-to-br from-[#1a1a1e] to-black border border-[#d9b74a]/30 flex items-center justify-center shadow-[0_0_15px_rgba(217,183,74,0.15)] relative"> | ||||||||||||||||||||||
| <Sparkles className="text-[#d9b74a] w-5 h-5" /> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| <div className="w-px h-full bg-gradient-to-b from-white/10 to-transparent"></div> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| <div className="flex-1 pb-8"> | ||||||||||||||||||||||
| <div className="flex items-center gap-3 mb-2"> | ||||||||||||||||||||||
| <span className="font-display font-bold text-[#d9b74a] text-lg">PhiloRAG</span> | ||||||||||||||||||||||
| <span className="px-2 py-0.5 rounded-full bg-[#d9b74a]/10 text-[10px] text-[#d9b74a] uppercase tracking-wider border border-[#d9b74a]/20"> | ||||||||||||||||||||||
| Thinking | ||||||||||||||||||||||
| </span> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| <div className="prose prose-invert max-w-none text-white/80"> | ||||||||||||||||||||||
| <p className="font-display text-xl leading-relaxed mb-6"> | ||||||||||||||||||||||
| To understand virtue through the Socratic lens in our digital age, one must first return to his fundamental premise:{" "} | ||||||||||||||||||||||
| <em className="text-white">virtue is knowledge</em>. | ||||||||||||||||||||||
| </p> | ||||||||||||||||||||||
| <p className="font-sans leading-7 mb-6 text-white/60"> | ||||||||||||||||||||||
| Socrates argued that no one errs willingly; rather, vice is the result of ignorance. In the context of digital privacy, he might argue that the "evil" of surveillance or data exploitation stems not from malice, but from a profound ignorance of the{" "} | ||||||||||||||||||||||
| <span className="text-[#d9b74a]/80 border-b border-[#d9b74a]/30 pb-0.5">True Good</span> regarding the self and the community. | ||||||||||||||||||||||
| </p> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| <div className="pl-6 border-l-2 border-[#d9b74a]/40 my-8 py-1"> | ||||||||||||||||||||||
| <p className="font-display italic text-white/70 text-lg"> | ||||||||||||||||||||||
| "The unexamined life is not worth living." | ||||||||||||||||||||||
| </p> | ||||||||||||||||||||||
| <p className="text-xs text-[#d9b74a] mt-2 uppercase tracking-widest">— Apology, 38a</p> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| <p className="font-sans leading-7 text-white/60"> | ||||||||||||||||||||||
| If we apply this to your question, a "virtuous" digital existence would require: | ||||||||||||||||||||||
| </p> | ||||||||||||||||||||||
| <ul className="list-none space-y-3 mt-4 text-white/70 font-sans pl-0"> | ||||||||||||||||||||||
| <li className="flex gap-3"> | ||||||||||||||||||||||
| <ChevronRight className="text-[#d9b74a] w-4 h-4 mt-1 shrink-0" /> | ||||||||||||||||||||||
| <span> | ||||||||||||||||||||||
| <strong>Knowledge of the Self:</strong> Understanding what data constitutes the "digital soul" and protecting it as one protects their character. | ||||||||||||||||||||||
| </span> | ||||||||||||||||||||||
| </li> | ||||||||||||||||||||||
| <li className="flex gap-3"> | ||||||||||||||||||||||
| <ChevronRight className="text-[#d9b74a] w-4 h-4 mt-1 shrink-0" /> | ||||||||||||||||||||||
| <span> | ||||||||||||||||||||||
| <strong>Knowledge of the Good:</strong> Recognizing that privacy is not merely hiding, but maintaining the autonomy required for moral agency. | ||||||||||||||||||||||
| </span> | ||||||||||||||||||||||
| </li> | ||||||||||||||||||||||
| </ul> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| {/* Interactive Citation Card */} | ||||||||||||||||||||||
| <div className="mt-8 flex gap-4 p-4 rounded-xl bg-white/5 border border-white/10 max-w-xl hover:border-[#d9b74a]/30 transition-colors cursor-pointer group/card"> | ||||||||||||||||||||||
| <div | ||||||||||||||||||||||
| className="h-16 w-12 shrink-0 bg-cover bg-center rounded shadow-inner opacity-80" | ||||||||||||||||||||||
| title="Cover of Plato's Republic book" | ||||||||||||||||||||||
| style={{ | ||||||||||||||||||||||
| backgroundImage: | ||||||||||||||||||||||
| "url('https://lh3.googleusercontent.com/aida-public/AB6AXuB0kzQPApdugd8DAq405iPtJUN3KwxNoOhnU6U_-gIAFVlKHj9ecCztHeXwVafq5nL4ADGFDuozS_iOYdD1eXlVrP471L_bmhpz8tLheZ8TQSo9kxClvJiZdltmO1Ysngs29XLzkGdCjYIBNrnpG1n0rEmEmcbTsX5dfrTi-QBZcNusirPuXskWMZiVqQmrbNP_aTJM44KlUmvB_t5RfGl8lg8ER20GNWCCu_destp9BAopuVohFr65NGdqaI9sJmaWK1TBow_Zw1A')", | ||||||||||||||||||||||
| }} | ||||||||||||||||||||||
| ></div> | ||||||||||||||||||||||
| <div className="flex-1 min-w-0"> | ||||||||||||||||||||||
| <h5 className="text-white font-display text-lg truncate">Reference: The Republic, Book I</h5> | ||||||||||||||||||||||
| <p className="text-white/40 text-sm line-clamp-2 mt-1"> | ||||||||||||||||||||||
| Socrates discusses the nature of justice and whether the just man is happier than the unjust man. | ||||||||||||||||||||||
| </p> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| <button className="h-8 w-8 rounded-full bg-white/10 flex items-center justify-center text-white/60 group-hover/card:bg-[#d9b74a] group-hover/card:text-black transition-all self-center"> | ||||||||||||||||||||||
| <SquareArrowOutUpRight className="w-4 h-4" /> | ||||||||||||||||||||||
| </button> | ||||||||||||||||||||||
|
Comment on lines
+87
to
+89
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 인용 카드 액션 버튼에 Line 87~89 버튼은 아이콘만 있어 스크린리더에서 목적을 알 수 없습니다. 접근성 이름을 추가해 주세요. ♿ 제안 수정안-<button className="h-8 w-8 rounded-full bg-white/10 flex items-center justify-center text-white/60 group-hover/card:bg-[`#d9b74a`] group-hover/card:text-black transition-all self-center">
+<button
+ type="button"
+ aria-label="참고 문헌 열기"
+ className="h-8 w-8 rounded-full bg-white/10 flex items-center justify-center text-white/60 group-hover/card:bg-[`#d9b74a`] group-hover/card:text-black transition-all self-center"
+>
<SquareArrowOutUpRight className="w-4 h-4" />
</button>📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| <div className="flex gap-4 mt-6"> | ||||||||||||||||||||||
| <button className="text-xs text-white/40 hover:text-[#d9b74a] flex items-center gap-1 transition-colors"> | ||||||||||||||||||||||
| <ThumbsUp className="w-3 h-3" /> Helpful | ||||||||||||||||||||||
| </button> | ||||||||||||||||||||||
| <button className="text-xs text-white/40 hover:text-[#d9b74a] flex items-center gap-1 transition-colors"> | ||||||||||||||||||||||
| <Copy className="w-3 h-3" /> Copy | ||||||||||||||||||||||
| </button> | ||||||||||||||||||||||
| <button className="text-xs text-white/40 hover:text-[#d9b74a] flex items-center gap-1 transition-colors"> | ||||||||||||||||||||||
| <RotateCcw className="w-3 h-3" /> Regenerate | ||||||||||||||||||||||
| </button> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
| ); | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: SanghunYun95/philo-rag
Length of output: 264
🏁 Script executed:
Repository: SanghunYun95/philo-rag
Length of output: 3690
🏁 Script executed:
Repository: SanghunYun95/philo-rag
Length of output: 1312
Stylelint이
@theme를 인식하지 못하여 린트 파이프라인이 실패할 가능성이 높습니다..stylelintrc.json이stylelint-config-standard-scss를 확장하고 있지만,at-rule-no-unknown규칙에 대한 예외 처리가 없습니다. Tailwind v4의@theme는 표준 CSS at-rule이 아니므로 현 설정에서는 린트 에러를 발생시킵니다.해결 방법:
at-rule-no-unknown규칙을 비활성화하거나ignoreAtRules옵션에@theme를 추가postcss-preset-env/Tailwind 호환 stylelint 플러그인 적용🧰 Tools
🪛 Biome (2.4.4)
[error] 3-9: Tailwind-specific syntax is disabled.
(parse)
🪛 Stylelint (17.3.0)
[error] 3-3: Unexpected unknown at-rule "@theme" (scss/at-rule-no-unknown)
(scss/at-rule-no-unknown)
🤖 Prompt for AI Agents