Review required
-
+
{`At least ${required} reviewer${required > 1 ? 's' : ''} required with write access, now has ${actual}`}
diff --git a/moon/apps/web/components/ClBox/components/CheckGroup.tsx b/moon/apps/web/components/ClBox/components/CheckGroup.tsx
index c10c47eaf..d9bfe9972 100644
--- a/moon/apps/web/components/ClBox/components/CheckGroup.tsx
+++ b/moon/apps/web/components/ClBox/components/CheckGroup.tsx
@@ -26,18 +26,18 @@ export function CheckGroup({ title, summary, status, children }: CheckGroupProps
return (
-
+
-
{title}
- {summary}
+ {title}
+ {summary}
{isOpen ? (
-
+
) : (
-
+
)}
- {children}
+ {children}
)
diff --git a/moon/apps/web/components/ClBox/components/MergeCheckItem.tsx b/moon/apps/web/components/ClBox/components/MergeCheckItem.tsx
index c328074bf..b14a1b95d 100644
--- a/moon/apps/web/components/ClBox/components/MergeCheckItem.tsx
+++ b/moon/apps/web/components/ClBox/components/MergeCheckItem.tsx
@@ -3,23 +3,23 @@ import { AlertIcon, CheckCircleIcon, WarningTriangleIcon } from '@gitmono/ui'
import { TaskData } from '../types/mergeCheck.config'
const statusMap = {
- Pending: { Icon: WarningTriangleIcon, className: 'text-yellow-600' },
- Success: { Icon: CheckCircleIcon, className: 'text-green-600' },
- Failure: { Icon: AlertIcon, className: 'text-red-600' },
- Warning: { Icon: WarningTriangleIcon, className: 'text-yellow-600' } // GitHub 通常用黄点表示 in-progress 或 warning
+ Pending: { Icon: WarningTriangleIcon, className: 'text-yellow-600 dark:text-yellow-500' },
+ Success: { Icon: CheckCircleIcon, className: 'text-green-600 dark:text-green-400' },
+ Failure: { Icon: AlertIcon, className: 'text-red-600 dark:text-red-400' },
+ Warning: { Icon: WarningTriangleIcon, className: 'text-yellow-600 dark:text-yellow-500' }
}
export function MergeCheckItem({ check }: { check: TaskData }) {
const { Icon, className } = statusMap[check.status]
return (
-
+
- {check.repo_name}
- {check.arguments && {check.arguments} }
+ {check.repo_name}
+ {check.arguments && {check.arguments} }
-
+
)
}
diff --git a/moon/apps/web/components/ClView/CLComment.tsx b/moon/apps/web/components/ClView/CLComment.tsx
index a95a0f13d..697e461ca 100644
--- a/moon/apps/web/components/ClView/CLComment.tsx
+++ b/moon/apps/web/components/ClView/CLComment.tsx
@@ -45,8 +45,8 @@ const Comment = React.memo
(({ conv, id, whoamI, editorRef }: Comme
const [refresh, setRefresh] = useAtom(refreshAtom)
return (
-
-
+
+
(({ conv, id, whoamI, editorRef }: Comme
-
diff --git a/moon/apps/web/components/ClView/ConversationTab.tsx b/moon/apps/web/components/ClView/ConversationTab.tsx
index c066fcb78..de14d4a28 100644
--- a/moon/apps/web/components/ClView/ConversationTab.tsx
+++ b/moon/apps/web/components/ClView/ConversationTab.tsx
@@ -192,11 +192,13 @@ export const ConversationTab = React.memo
(
emptyExtra={
clDetail &&
clDetail.status === 'Open' && (
-
+
Still in progress?
Convert to draft
+
+ Convert to draft
+
}
link={clDetail.link}
/>
@@ -214,12 +216,14 @@ export const ConversationTab = React.memo(
const isApproved = reviewer?.approved ?? false
return (
-
+
{i}
{isApproved ? 'Approved' : 'Pending'}
@@ -241,7 +245,7 @@ export const ConversationTab = React.memo(
e.stopPropagation()
handleDeleteReviewer(i)
}}
- className='pointer-events-auto cursor-pointer rounded-full border-2 hover:bg-red-800'
+ className='pointer-events-auto cursor-pointer rounded-full border-2 hover:bg-red-800 hover:text-white'
>
@@ -250,11 +254,11 @@ export const ConversationTab = React.memo
(
)
})}
{clDetail && clDetail.status === 'Open' && (
-
+
Still in progress?
+
Convert to draft
}
@@ -281,7 +285,7 @@ export const ConversationTab = React.memo(
return (
<>
{names.map((i) => (
-
+
{i}
@@ -327,7 +331,7 @@ export const ConversationTab = React.memo
(
-
diff --git a/moon/apps/web/components/ClView/ReviewComment.tsx b/moon/apps/web/components/ClView/ReviewComment.tsx
index 03da0793b..aa226e46d 100644
--- a/moon/apps/web/components/ClView/ReviewComment.tsx
+++ b/moon/apps/web/components/ClView/ReviewComment.tsx
@@ -105,20 +105,22 @@ const ReviewComment = React.memo(
return (
-
+
📝 Review Comment
{isResolved && (
-
+
✓ Resolved
)}
-
+
(
-
@@ -158,7 +160,7 @@ const ReviewComment = React.memo
(
size='sm'
variant='base'
onClick={handleResolve}
- className='border-green-300 text-green-600 hover:bg-green-50'
+ className='border-green-300 text-green-600 hover:bg-green-50 dark:border-green-700 dark:text-green-400 dark:hover:bg-green-950'
>
Resolve Conversation
diff --git a/moon/apps/web/components/ClView/TimelineItems.tsx b/moon/apps/web/components/ClView/TimelineItems.tsx
index 4b5e99284..72161bd79 100644
--- a/moon/apps/web/components/ClView/TimelineItems.tsx
+++ b/moon/apps/web/components/ClView/TimelineItems.tsx
@@ -1,7 +1,4 @@
import React, { useMemo } from 'react'
-
-import '@primer/primitives/dist/css/functional/themes/light.css'
-
import {
CheckCircleIcon,
CommentIcon,
@@ -14,6 +11,7 @@ import {
RepoPushIcon
} from '@primer/octicons-react'
import { BaseStyles, ThemeProvider, Timeline } from '@primer/react'
+import { useTheme } from 'next-themes'
import { ConversationItem, ReviewerInfo } from '@gitmono/types/generated'
@@ -63,8 +61,10 @@ const TimelineItem = React.memo(({ badge, children, isOver }: TimelineItemProps)
TimelineItem.displayName = 'TimelineItem'
const TimelineWrapper = React.memo(({ convItems = [] }) => {
+ const { theme } = useTheme()
+
return (
-
+
{convItems?.map((item) => (
@@ -106,38 +106,38 @@ const TimelineItems = React.memo<{
icon =
children =
} else {
- icon =
+ icon =
children =
}
break
case 'Approve':
- icon =
+ icon =
children =
break
case 'Merged':
- icon =
+ icon =
children =
isOver = true
break
case 'Closed':
- icon =
+ icon =
children =
isOver = true
break
case 'Draft':
- icon =
+ icon =
children =
break
case 'Reopen':
- icon =
+ icon =
children =
break
case 'Assignee':
- icon =
+ icon =
children =
break
case 'Label':
- icon =
+ icon =
children =
break
case 'ForcePush':
diff --git a/moon/apps/web/components/ClView/components/Checks/cpns/Task.tsx b/moon/apps/web/components/ClView/components/Checks/cpns/Task.tsx
index 2e41fa7cc..4cc53059e 100644
--- a/moon/apps/web/components/ClView/components/Checks/cpns/Task.tsx
+++ b/moon/apps/web/components/ClView/components/Checks/cpns/Task.tsx
@@ -70,12 +70,12 @@ export const Task = ({ list, logStatus }: { list: TaskInfoDTO; logStatus: Record
<>
setExtend(!extend)}
- className='flex w-full cursor-pointer items-center gap-4 border border-t-0 bg-[#fff] pl-4'
+ className='border-primary bg-primary flex w-full cursor-pointer items-center gap-4 border border-t-0 pl-4'
>
{extend ?
:
}
- {list.task_name}
- {formatDateTime(list.created_at)}
+ {list.task_name}
+ {formatDateTime(list.created_at)}
{/* {extend && list} */}
@@ -114,7 +114,7 @@ export const TaskItem = ({ build, logStatus }: { build: BuildDTO; logStatus?: Lo
>
{/* {identifyStatus(statusMap.get(build.id)?.status || Status.NotFound)} */}
{identifyStatus(build.status || Status.NotFound)}
- {build.id}
+ {build.id}
>
)
@@ -123,9 +123,9 @@ export const TaskItem = ({ build, logStatus }: { build: BuildDTO; logStatus?: Lo
export const identifyStatus = (status: Status[keyof Status]) => {
switch (status) {
case Status.Completed:
- return
+ return
case Status.Failed:
- return
+ return
case Status.Building:
return
case Status.Pending:
@@ -134,6 +134,6 @@ export const identifyStatus = (status: Status[keyof Status]) => {
return
default:
- return
+ return
}
}
diff --git a/moon/apps/web/components/ClView/components/Checks/index.tsx b/moon/apps/web/components/ClView/components/Checks/index.tsx
index dd70569f5..8d9bb62f8 100644
--- a/moon/apps/web/components/ClView/components/Checks/index.tsx
+++ b/moon/apps/web/components/ClView/components/Checks/index.tsx
@@ -168,13 +168,13 @@ const Checks = ({ cl }: { cl: number }) => {
// Handle tasks loading state
if (isTasksLoading) {
return (
-
-
+
+
- [] tasks status interface
+ [] tasks status interface
-
+
Loading tasks...
@@ -187,13 +187,13 @@ const Checks = ({ cl }: { cl: number }) => {
// Handle tasks error or empty state
if (isTasksError) {
return (
-
-
+
+
- [] tasks status interface
+ [] tasks status interface
-
@@ -204,13 +204,13 @@ const Checks = ({ cl }: { cl: number }) => {
if (!isTasksLoading && (!tasks || tasks.length === 0 || validTasks.length === 0)) {
return (
-
-
+
+
- [] tasks status interface
+ [] tasks status interface
-
@@ -221,7 +221,7 @@ const Checks = ({ cl }: { cl: number }) => {
const renderLogContent = () => {
if (!buildid) {
return (
-
+
Select a build to view logs
)
@@ -232,7 +232,7 @@ const Checks = ({ cl }: { cl: number }) => {
// If status is undefined or idle, user needs to select a build
if (!status || status === 'idle') {
return (
-
+
Select a build to view logs
)
@@ -240,7 +240,7 @@ const Checks = ({ cl }: { cl: number }) => {
if (status === 'loading') {
return (
-
+
Loading logs...
)
@@ -248,7 +248,7 @@ const Checks = ({ cl }: { cl: number }) => {
if (status === 'error') {
return (
-
+
Failed to fetch logs
)
@@ -256,7 +256,7 @@ const Checks = ({ cl }: { cl: number }) => {
if (status === 'empty') {
return (
-
+
No logs available
)
@@ -272,7 +272,7 @@ const Checks = ({ cl }: { cl: number }) => {
// Fallback: show select prompt
return (
-
+
Select a build to view logs
)
@@ -280,14 +280,17 @@ const Checks = ({ cl }: { cl: number }) => {
return (
<>
-
-
+
+
- [] tasks status interface
+ [] tasks status interface
-
+
{validTasks.map((t) => (
))}
@@ -295,7 +298,7 @@ const Checks = ({ cl }: { cl: number }) => {
{/* Resizer handle */}
{renderLogContent()}
diff --git a/moon/apps/web/components/ClView/filters/DropdownItems.tsx b/moon/apps/web/components/ClView/filters/DropdownItems.tsx
index 613ffa0ca..89f16961e 100644
--- a/moon/apps/web/components/ClView/filters/DropdownItems.tsx
+++ b/moon/apps/web/components/ClView/filters/DropdownItems.tsx
@@ -20,8 +20,8 @@ export const DropdownItemwithAvatar = ({
)}
>
-
{member.user.display_name}
-
{member.user.username}
+
{member.user.display_name}
+
{member.user.username}
)
}
@@ -38,8 +38,8 @@ export const DropdownItemwithLabel = ({ classname, label }: { classname?: string
className='h-3.5 w-3.5 rounded-full border'
style={{ backgroundColor: label.color, borderColor: label.color }}
/>
-
{label.name}
-
{label.description}
+
{label.name}
+
{label.description}
)
}
diff --git a/moon/apps/web/components/ClView/filters/FilterDropdown.tsx b/moon/apps/web/components/ClView/filters/FilterDropdown.tsx
index 3645988db..b643552a4 100644
--- a/moon/apps/web/components/ClView/filters/FilterDropdown.tsx
+++ b/moon/apps/web/components/ClView/filters/FilterDropdown.tsx
@@ -82,7 +82,7 @@ export function FilterDropdown({
onOpenChange={handleOpenChange}
key={name}
align='end'
- desktop={{ width: 'w-72 max-h-[50vh] overflow-auto bg-white' }}
+ desktop={{ width: 'w-72 max-h-[50vh] overflow-auto bg-primary' }}
items={[
{
type: 'item',
@@ -115,7 +115,7 @@ export function FilterDropdown({
align='end'
open={open}
onOpenChange={handleOpenChange}
- desktop={{ width: 'w-72 max-h-[50vh] overflow-auto bg-white' }}
+ desktop={{ width: 'w-72 max-h-[50vh] overflow-auto bg-primary' }}
items={[
{
type: 'item',
diff --git a/moon/apps/web/components/ClView/filters/dropdown/OrderDropdown.tsx b/moon/apps/web/components/ClView/filters/dropdown/OrderDropdown.tsx
index 4c2eff16c..13d6af871 100644
--- a/moon/apps/web/components/ClView/filters/dropdown/OrderDropdown.tsx
+++ b/moon/apps/web/components/ClView/filters/dropdown/OrderDropdown.tsx
@@ -47,7 +47,7 @@ export function OrderDropdown({ sortOptions, timeOptions, currentSort, currentTi
diff --git a/moon/apps/web/components/ClView/index.tsx b/moon/apps/web/components/ClView/index.tsx
index 8c7176811..faf68f433 100644
--- a/moon/apps/web/components/ClView/index.tsx
+++ b/moon/apps/web/components/ClView/index.tsx
@@ -358,8 +358,8 @@ export default function CLView() {
id='/[org]/cl'
className={cn('@container', 'max-w-full lg:max-w-5xl xl:max-w-6xl 2xl:max-w-7xl')}
>
-
-
+
+
@@ -368,7 +368,7 @@ export default function CLView() {
value={searchQuery}
readOnly
placeholder='Filter change list by author, labels , assignee, or review...'
- className='w-full flex-1 border-none bg-transparent text-sm text-gray-400 outline-none ring-0 focus:outline-none focus:ring-0'
+ className='text-secondary placeholder:text-quaternary w-full flex-1 border-none bg-transparent text-sm outline-none ring-0 focus:outline-none focus:ring-0'
/>
{searchQuery && (
@@ -376,7 +376,7 @@ export default function CLView() {
onClick={() => {
clearAllFilters()
}}
- className='flex items-center justify-center rounded-md p-1 text-gray-400 transition-all hover:bg-gray-100 hover:text-gray-600'
+ className='text-quaternary hover:bg-tertiary hover:text-secondary flex items-center justify-center rounded-md p-1 transition-all'
title='Clear search'
>
diff --git a/moon/apps/web/components/CodeView/Tags/NewMonoTagDialog.tsx b/moon/apps/web/components/CodeView/Tags/NewMonoTagDialog.tsx
index df0be82a3..ef0c42ef0 100644
--- a/moon/apps/web/components/CodeView/Tags/NewMonoTagDialog.tsx
+++ b/moon/apps/web/components/CodeView/Tags/NewMonoTagDialog.tsx
@@ -18,10 +18,9 @@ import { Dialog } from '@gitmono/ui/Dialog'
import { useCreateMonoTag } from '@/hooks/useCreateMonoTag'
import { useGetCurrentUser } from '@/hooks/useGetCurrentUser'
+import { useGetLatestCommit } from '@/hooks/useGetLatestCommit'
import { useGetTreeCommitInfo } from '@/hooks/useGetTreeCommitInfo'
-import { useGetLatestCommit } from '../../../hooks/useGetLatestCommit'
-
interface Props {
open: boolean
onOpenChange: (open: boolean) => void
diff --git a/moon/apps/web/components/Issues/IssueSearch.tsx b/moon/apps/web/components/Issues/IssueSearch.tsx
index ff3482928..95224eb13 100644
--- a/moon/apps/web/components/Issues/IssueSearch.tsx
+++ b/moon/apps/web/components/Issues/IssueSearch.tsx
@@ -19,9 +19,9 @@ interface IssueSearchProps {
export default function IssueSearch({ filterQuery, onClearFilters }: IssueSearchProps) {
return (
<>
-
-
-
+
+
+
@@ -30,12 +30,12 @@ export default function IssueSearch({ filterQuery, onClearFilters }: IssueSearch
value={filterQuery || ''}
readOnly
placeholder='Filter issues by author, labels, or assignee...'
- className='w-full flex-1 border-none bg-transparent text-sm text-gray-400 outline-none ring-0 focus:outline-none focus:ring-0'
+ className='text-quaternary placeholder:text-quaternary w-full flex-1 border-none bg-transparent text-sm outline-none ring-0 focus:outline-none focus:ring-0'
/>
{filterQuery && (
diff --git a/moon/apps/web/components/Issues/TitleInput.tsx b/moon/apps/web/components/Issues/TitleInput.tsx
index df94d1b26..bc002b1ba 100644
--- a/moon/apps/web/components/Issues/TitleInput.tsx
+++ b/moon/apps/web/components/Issues/TitleInput.tsx
@@ -73,10 +73,10 @@ const TitleInput = ({
{!isEdit && (
<>
-
+
{`${title || ''}`}
- ${id}
+ ${id}
{
diff --git a/moon/apps/web/components/Issues/WorkWithChatDialog.tsx b/moon/apps/web/components/Issues/WorkWithChatDialog.tsx
index 52a4fb8f7..671c86003 100644
--- a/moon/apps/web/components/Issues/WorkWithChatDialog.tsx
+++ b/moon/apps/web/components/Issues/WorkWithChatDialog.tsx
@@ -37,35 +37,32 @@ export function WorkWithChatDialog() {
}
return (
-
- {/* Top Icon and Title - White background */}
-
-
+
+ {/* Top Icon and Title */}
+
+
-
- Work with Chat
+
+ Work with Chat
{/* Input box with border and full width */}
-
+
{/* @Chat header section with rounded top corners */}
-
+
-
+
@Chat
}
accessibilityLabel='Build settings'
- className='h-5 w-5 p-0 text-gray-600'
+ className='text-tertiary h-5 w-5 p-0'
/>
@@ -79,11 +76,12 @@ export function WorkWithChatDialog() {
onFocus={handleFocus}
onBlur={handleBlur}
placeholder=''
- className='w-full resize-none border-0 bg-transparent text-sm focus:outline-none focus:ring-0'
+ className={`w-full resize-none border-0 bg-transparent text-sm focus:outline-none focus:ring-0 ${
+ isShowingHint ? 'text-quaternary' : 'text-primary'
+ }`}
style={{
minHeight: '60px',
- lineHeight: '1.4',
- color: isShowingHint ? '#8d9297' : '#374151'
+ lineHeight: '1.4'
}}
rows={3}
/>
@@ -97,19 +95,19 @@ export function WorkWithChatDialog() {
variant='plain'
iconOnly={
}
accessibilityLabel='Mention'
- className='h-6 w-6 p-0 text-gray-600 hover:text-gray-800'
+ className='text-tertiary hover:text-primary h-6 w-6 p-0'
/>
}
accessibilityLabel='Add hashtag'
- className='h-6 w-6 p-0 text-gray-600 hover:text-gray-800'
+ className='text-tertiary hover:text-primary h-6 w-6 p-0'
/>
}
accessibilityLabel='Add image'
- className='h-6 w-6 p-0 text-gray-600 hover:text-gray-800'
+ className='text-tertiary hover:text-primary h-6 w-6 p-0'
/>
@@ -120,7 +118,7 @@ export function WorkWithChatDialog() {
}
>
{autoMode}
@@ -133,15 +131,12 @@ export function WorkWithChatDialog() {
variant='plain'
iconOnly={
}
accessibilityLabel='AI assistant'
- className='h-6 w-6 p-0 text-gray-600 hover:text-gray-800'
+ className='text-tertiary hover:text-primary h-6 w-6 p-0'
/>
{/* Microphone icon */}
-
-
+
+
{/* Send button */}
diff --git a/moon/apps/web/components/OrionClient/ClientsTable.tsx b/moon/apps/web/components/OrionClient/ClientsTable.tsx
index ee878236b..76cf467eb 100644
--- a/moon/apps/web/components/OrionClient/ClientsTable.tsx
+++ b/moon/apps/web/components/OrionClient/ClientsTable.tsx
@@ -82,7 +82,7 @@ export function ClientsTable({ clients, isLoading, statusFilter, onStatusChange,
options={statusOptions}
onChange={(v) => onStatusChange(v as OrionClientStatus | 'all')}
>
-
+
diff --git a/moon/apps/web/components/QueueView/items.tsx b/moon/apps/web/components/QueueView/items.tsx
index 544766ef1..d2b3f8e9d 100644
--- a/moon/apps/web/components/QueueView/items.tsx
+++ b/moon/apps/web/components/QueueView/items.tsx
@@ -22,15 +22,15 @@ interface QueueItemsListProps {
const getStatusIcon = (status: QueueStatus) => {
switch (status) {
case QueueStatus.Waiting:
- return
+ return
case QueueStatus.Testing:
- return
+ return
case QueueStatus.Merging:
- return
+ return
case QueueStatus.Merged:
- return
+ return
case QueueStatus.Failed:
- return
+ return
default:
return null
}
@@ -88,17 +88,17 @@ export const QueueItemsList: React.FC = ({ items, stats, is
}
const header = (
-
+
{sortedItems.length} Queued
- {sortedItems.length > 0 && {stats.failed_count} Failing }
+ {sortedItems.length > 0 && {stats.failed_count} Failing }
@@ -116,7 +116,7 @@ export const QueueItemsList: React.FC = ({ items, stats, is
const labels =
const subline = (
-
+
{queueItem.status !== QueueStatus.Failed && (
{queueItem.status}
@@ -136,7 +136,7 @@ export const QueueItemsList: React.FC = ({ items, stats, is
{queueItem.retry_count > 0 && • {queueItem.retry_count} retries }
-
+
= ({ items, stats, is
)
const right = (
-
+
{queueItem.status === QueueStatus.Merging && (
@@ -161,7 +161,7 @@ export const QueueItemsList: React.FC
= ({ items, stats, is
{queueItem.status === QueueStatus.Failed && queueItem.retry_count < 3 && (
handleRetry(queueItem.cl_link, e)}
disabled={isRetrying}
>
@@ -171,7 +171,7 @@ export const QueueItemsList: React.FC = ({ items, stats, is
{queueItem.status !== QueueStatus.Merging && queueItem.status !== QueueStatus.Merged && (
handleCancelClick(queueItem.cl_link, e)}
disabled={isRemoving}
>
diff --git a/moon/apps/web/components/QueueView/stats.tsx b/moon/apps/web/components/QueueView/stats.tsx
index b3084601d..cd9cd1e3f 100644
--- a/moon/apps/web/components/QueueView/stats.tsx
+++ b/moon/apps/web/components/QueueView/stats.tsx
@@ -11,13 +11,13 @@ interface QueueStatsCardProps {
export const QueueStatsCard: React.FC = ({ stats, isLoading }) => {
if (isLoading) {
return (
-
+
@@ -26,74 +26,78 @@ export const QueueStatsCard: React.FC
= ({ stats, isLoading
return (
-
+
- Merge Count
+ Merge Count
-
+
- {stats.merged_count}
- Merged in queue
+ {stats.merged_count}
+ Merged in queue
{(stats.waiting_count > 0 || stats.testing_count > 0 || stats.merging_count > 0 || stats.failed_count > 0) && (
-
+
{/* Merging */}
{stats.merging_count > 0 && (
-
+
-
-
+
+
-
Merging
+
Merging
-
{stats.merging_count}
+
+ {stats.merging_count}
+
)}
{/* Waiting */}
{stats.waiting_count > 0 && (
-
+
-
-
+
+
-
Waiting
+
Waiting
-
{stats.waiting_count}
+
+ {stats.waiting_count}
+
)}
{/* Testing */}
{stats.testing_count > 0 && (
-
+
-
-
+
+
-
Testing
+
Testing
-
{stats.testing_count}
+
{stats.testing_count}
)}
{/* Failed */}
{stats.failed_count > 0 && (
-
+
-
-
{stats.failed_count}
+
{stats.failed_count}
)}
diff --git a/moon/apps/web/components/Setting/GPGKeys.tsx b/moon/apps/web/components/Setting/GPGKeys.tsx
index a08938a93..a8b1e9ebb 100644
--- a/moon/apps/web/components/Setting/GPGKeys.tsx
+++ b/moon/apps/web/components/Setting/GPGKeys.tsx
@@ -165,7 +165,7 @@ const GPGKeys = () => {
return (
<>
-
+
GPG keys
} onClick={() => setOpen(true)}>
diff --git a/moon/apps/web/components/Setting/PersonalToken.tsx b/moon/apps/web/components/Setting/PersonalToken.tsx
index 7c969de47..c691f09b2 100644
--- a/moon/apps/web/components/Setting/PersonalToken.tsx
+++ b/moon/apps/web/components/Setting/PersonalToken.tsx
@@ -75,11 +75,11 @@ const CopySpace = ({ copyText }: { copyText: string }) => {
}
return (
-
-
+
+
{copyText}
- handleCopy(copyText)}>
+ handleCopy(copyText)}>
{copied ? 'Copied' : 'Copy'}
@@ -105,7 +105,7 @@ const PersonalToken = () => {
}
return (
-
+
Personal tokens
{
{generated && currentUser && (
-
-
Your new token has been generated.
-
-
Username:
-
-
Token:
-
+
+
Your new token has been generated.
+
+
+ Username:
+
+
+
+ Token:
+
+
-
- Make sure to copy your new token now. You won’t be able to see it again.
+
+ Make sure to copy your new token now. You won't be able to see it again.
)}
diff --git a/moon/apps/web/components/Setting/SSHKeys.tsx b/moon/apps/web/components/Setting/SSHKeys.tsx
index 7a93d2c7e..06064feb2 100644
--- a/moon/apps/web/components/Setting/SSHKeys.tsx
+++ b/moon/apps/web/components/Setting/SSHKeys.tsx
@@ -132,7 +132,7 @@ const SSHKeys = () => {
return (
<>
-
+
SSH keys
} onClick={() => setOpen(true)}>
diff --git a/moon/apps/web/components/Theme/ThemedMarkdown/ThemedMarkdown.module.css b/moon/apps/web/components/Theme/ThemedMarkdown/ThemedMarkdown.module.css
index ddd6a8f06..2be51f448 100644
--- a/moon/apps/web/components/Theme/ThemedMarkdown/ThemedMarkdown.module.css
+++ b/moon/apps/web/components/Theme/ThemedMarkdown/ThemedMarkdown.module.css
@@ -1,11 +1,9 @@
-/* 包装器 */
.markdownWrapper {
transition:
background-color 0.2s ease,
color 0.2s ease;
}
-/* 基础变量 */
.markdownBody {
--base-size-4: 0.25rem;
--base-size-8: 0.5rem;
@@ -29,7 +27,6 @@
background-color: var(--bg-primary);
}
-/* 亮色主题 */
.markdownWrapper[data-theme='light'] .markdownBody {
color-scheme: light;
--fgColor-default: #1f2328;
@@ -41,7 +38,6 @@
--borderColor-muted: rgba(209, 217, 224, 0.7);
}
-/* 深色主题 */
.markdownWrapper[data-theme='dark'] .markdownBody {
color-scheme: dark;
--fgColor-default: #f0f6fc;
@@ -53,7 +49,6 @@
--borderColor-muted: rgba(61, 68, 77, 0.7);
}
-/* 标题 */
.markdownBody h1,
.markdownBody h2,
.markdownBody h3,
@@ -96,13 +91,11 @@
color: var(--fgColor-muted);
}
-/* 段落 */
.markdownBody p {
margin-top: 0;
margin-bottom: 10px;
}
-/* 链接 */
.markdownBody a {
background-color: transparent;
color: var(--fgColor-accent);
@@ -113,7 +106,6 @@
text-decoration: underline;
}
-/* 代码 */
.markdownBody code,
.markdownBody tt {
padding: 0.2em 0.4em;
@@ -122,7 +114,6 @@
white-space: break-spaces;
background-color: var(--bgColor-neutral-muted);
border-radius: 6px;
- font-family: var(--fontStack-monospace);
}
.markdownBody pre {
@@ -132,6 +123,7 @@
line-height: 1.45;
background-color: var(--bgColor-muted);
border-radius: 6px;
+ font-family: var(--fontStack-monospace);
margin-bottom: var(--base-size-16);
}
@@ -144,7 +136,6 @@
white-space: pre;
}
-/* 列表 */
.markdownBody ul,
.markdownBody ol {
margin-top: 0;
@@ -152,7 +143,6 @@
padding-left: 2em;
}
-/* 引用 */
.markdownBody blockquote {
margin: 0 0 var(--base-size-16) 0;
padding: 0 1em;
@@ -160,7 +150,6 @@
border-left: 0.25em solid var(--borderColor-default);
}
-/* 表格 */
.markdownBody table {
border-spacing: 0;
border-collapse: collapse;
@@ -190,14 +179,12 @@
background-color: var(--bgColor-muted);
}
-/* 图片 */
.markdownBody img {
max-width: 100%;
box-sizing: content-box;
background-color: var(--bg-primary);
}
-/* 分隔线 */
.markdownBody hr {
height: 0.25em;
padding: 0;
@@ -206,18 +193,15 @@
border: 0;
}
-/* 粗体 */
.markdownBody b,
.markdownBody strong {
font-weight: var(--base-text-weight-semibold, 600);
}
-/* 斜体 */
.markdownBody em {
font-style: italic;
}
-/* 首尾元素边距 */
.markdownBody > *:first-child {
margin-top: 0 !important;
}
diff --git a/moon/apps/web/pages/[org]/cl/[link]/index.tsx b/moon/apps/web/pages/[org]/cl/[link]/index.tsx
index 0dea19e62..75cd8c5b2 100644
--- a/moon/apps/web/pages/[org]/cl/[link]/index.tsx
+++ b/moon/apps/web/pages/[org]/cl/[link]/index.tsx
@@ -9,6 +9,7 @@ import {
} from '@primer/octicons-react'
import { BaseStyles, ThemeProvider } from '@primer/react'
import { useAtom } from 'jotai'
+import { useTheme } from 'next-themes'
import dynamic from 'next/dynamic'
import { useRouter } from 'next/router'
import { toast } from 'react-hot-toast'
@@ -53,6 +54,7 @@ import { PageWithLayout } from '@/utils/types'
const CLDetailPage: PageWithLayout = () => {
const router = useRouter()
const { link: tempId } = router.query
+ const { theme } = useTheme()
const [item_id] = useAtom(clIdAtom)
@@ -280,13 +282,13 @@ const CLDetailPage: PageWithLayout = () => {
{Icon && }
{label}
- {(clDetail as any)?.path &&
{(clDetail as any).path} }
+ {(clDetail as any)?.path &&
{(clDetail as any).path} }
)
}
return (
-
+
{clDetail && (
diff --git a/moon/apps/web/pages/[org]/issue/[link]/index.tsx b/moon/apps/web/pages/[org]/issue/[link]/index.tsx
index d69d4e1aa..4f0638445 100644
--- a/moon/apps/web/pages/[org]/issue/[link]/index.tsx
+++ b/moon/apps/web/pages/[org]/issue/[link]/index.tsx
@@ -1,5 +1,6 @@
import { BaseStyles, ThemeProvider } from '@primer/react'
import { GetServerSideProps } from 'next'
+import { useTheme } from 'next-themes'
import IssueDetailPage from '@/components/Issues/IssueDetailPage'
import { AppLayout } from '@/components/Layout/AppLayout'
@@ -23,9 +24,11 @@ export const getServerSideProps: GetServerSideProps = async ({ query }) => {
}
const OrganizationIssueDetailPage: PageWithLayout
= ({ link }) => {
+ const { theme } = useTheme()
+
return (
<>
-
+
diff --git a/moon/apps/web/styles/global.css b/moon/apps/web/styles/global.css
index dab6e6975..a991a7f92 100644
--- a/moon/apps/web/styles/global.css
+++ b/moon/apps/web/styles/global.css
@@ -1,3 +1,6 @@
+@import '@primer/primitives/dist/css/functional/themes/light.css';
+@import '@primer/primitives/dist/css/functional/themes/dark.css';
+
@tailwind base;
@tailwind components;
@tailwind utilities;