Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
db4b1f5f
Commit
db4b1f5f
authored
Jul 05, 2025
by
Johnny
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: tweak styles
parent
91be2f68
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
179 additions
and
155 deletions
+179
-155
HomeSidebarDrawer.tsx
web/src/components/HomeSidebar/HomeSidebarDrawer.tsx
+8
-5
CodeBlock.tsx
web/src/components/MemoContent/CodeBlock.tsx
+2
-2
AddMemoRelationPopover.tsx
...onents/MemoEditor/ActionButton/AddMemoRelationPopover.tsx
+5
-3
LocationSelector.tsx
...c/components/MemoEditor/ActionButton/LocationSelector.tsx
+11
-14
MarkdownMenu.tsx
web/src/components/MemoEditor/ActionButton/MarkdownMenu.tsx
+2
-2
TagSelector.tsx
web/src/components/MemoEditor/ActionButton/TagSelector.tsx
+2
-2
UploadAttachmentButton.tsx
...onents/MemoEditor/ActionButton/UploadAttachmentButton.tsx
+2
-2
index.tsx
web/src/components/MemoEditor/Editor/index.tsx
+1
-3
index.tsx
web/src/components/MemoEditor/index.tsx
+3
-3
MemoView.tsx
web/src/components/MemoView.tsx
+1
-1
Navigation.tsx
web/src/components/Navigation.tsx
+2
-2
NavigationDrawer.tsx
web/src/components/NavigationDrawer.tsx
+2
-4
ReactionView.tsx
web/src/components/ReactionView.tsx
+1
-1
MemoRelatedSettings.tsx
web/src/components/Settings/MemoRelatedSettings.tsx
+4
-10
button.tsx
web/src/components/ui/button.tsx
+2
-2
input.tsx
web/src/components/ui/input.tsx
+1
-1
index.css
web/src/index.css
+20
-0
HomeLayout.tsx
web/src/layouts/HomeLayout.tsx
+1
-7
RootLayout.tsx
web/src/layouts/RootLayout.tsx
+1
-4
main.tsx
web/src/main.tsx
+1
-1
Setting.tsx
web/src/pages/Setting.tsx
+1
-1
UserProfile.tsx
web/src/pages/UserProfile.tsx
+1
-3
style.css
web/src/style.css
+105
-82
No files found.
web/src/components/HomeSidebar/HomeSidebarDrawer.tsx
View file @
db4b1f5f
...
@@ -2,7 +2,7 @@ import { MenuIcon } from "lucide-react";
...
@@ -2,7 +2,7 @@ import { MenuIcon } from "lucide-react";
import
{
useEffect
,
useState
}
from
"react"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
{
useLocation
}
from
"react-router-dom"
;
import
{
useLocation
}
from
"react-router-dom"
;
import
{
Button
}
from
"@/components/ui/button"
;
import
{
Button
}
from
"@/components/ui/button"
;
import
{
Sheet
,
SheetContent
,
SheetTrigger
}
from
"@/components/ui/sheet"
;
import
{
Sheet
,
SheetContent
,
Sheet
Header
,
SheetTitle
,
Sheet
Trigger
}
from
"@/components/ui/sheet"
;
import
HomeSidebar
from
"./HomeSidebar"
;
import
HomeSidebar
from
"./HomeSidebar"
;
const
HomeSidebarDrawer
=
()
=>
{
const
HomeSidebarDrawer
=
()
=>
{
...
@@ -16,12 +16,15 @@ const HomeSidebarDrawer = () => {
...
@@ -16,12 +16,15 @@ const HomeSidebarDrawer = () => {
return
(
return
(
<
Sheet
open=
{
open
}
onOpenChange=
{
setOpen
}
>
<
Sheet
open=
{
open
}
onOpenChange=
{
setOpen
}
>
<
SheetTrigger
asChild
>
<
SheetTrigger
asChild
>
<
Button
variant=
"ghost"
className=
"bg-transparent! px-2"
>
<
Button
variant=
"ghost"
>
<
MenuIcon
className=
"
w-6 h-auto
text-foreground"
/>
<
MenuIcon
className=
"
size-5
text-foreground"
/>
</
Button
>
</
Button
>
</
SheetTrigger
>
</
SheetTrigger
>
<
SheetContent
side=
"right"
className=
"w-full sm:w-80 bg-secondary"
>
<
SheetContent
side=
"right"
className=
"w-80 max-w-full bg-background"
>
<
HomeSidebar
className=
"px-4 py-4"
/>
<
SheetHeader
>
<
SheetTitle
></
SheetTitle
>
</
SheetHeader
>
<
HomeSidebar
className=
"px-4"
/>
</
SheetContent
>
</
SheetContent
>
</
Sheet
>
</
Sheet
>
);
);
...
...
web/src/components/MemoContent/CodeBlock.tsx
View file @
db4b1f5f
...
@@ -59,8 +59,8 @@ const CodeBlock: React.FC<Props> = ({ language, content }: Props) => {
...
@@ -59,8 +59,8 @@ const CodeBlock: React.FC<Props> = ({ language, content }: Props) => {
},
[
content
]);
},
[
content
]);
return
(
return
(
<
div
className=
"w-full my-1 bg-
accent/10 border-l-4 border-accent rounded hover:shadow
relative"
>
<
div
className=
"w-full my-1 bg-
background border-2 border-l-4 border-secondary rounded-md
relative"
>
<
div
className=
"w-full px-2
py-1 flex flex-row justify-between items-center text-accent-foreground
"
>
<
div
className=
"w-full px-2
mt-1 flex flex-row justify-between items-center text-accent-foreground/60
"
>
<
span
className=
"text-sm font-mono"
>
{
formatedLanguage
}
</
span
>
<
span
className=
"text-sm font-mono"
>
{
formatedLanguage
}
</
span
>
<
CopyIcon
className=
"w-4 h-auto cursor-pointer hover:opacity-80"
onClick=
{
handleCopyButtonClick
}
/>
<
CopyIcon
className=
"w-4 h-auto cursor-pointer hover:opacity-80"
onClick=
{
handleCopyButtonClick
}
/>
</
div
>
</
div
>
...
...
web/src/components/MemoEditor/ActionButton/AddMemoRelationPopover.tsx
View file @
db4b1f5f
...
@@ -132,8 +132,8 @@ const AddMemoRelationPopover = (props: Props) => {
...
@@ -132,8 +132,8 @@ const AddMemoRelationPopover = (props: Props) => {
return
(
return
(
<
Popover
open=
{
popoverOpen
}
onOpenChange=
{
setPopoverOpen
}
>
<
Popover
open=
{
popoverOpen
}
onOpenChange=
{
setPopoverOpen
}
>
<
PopoverTrigger
asChild
>
<
PopoverTrigger
asChild
>
<
Button
variant=
"ghost"
>
<
Button
variant=
"ghost"
size=
"icon"
>
<
LinkIcon
/>
<
LinkIcon
className=
"size-5"
/>
</
Button
>
</
Button
>
</
PopoverTrigger
>
</
PopoverTrigger
>
<
PopoverContent
align=
"center"
>
<
PopoverContent
align=
"center"
>
...
@@ -166,7 +166,9 @@ const AddMemoRelationPopover = (props: Props) => {
...
@@ -166,7 +166,9 @@ const AddMemoRelationPopover = (props: Props) => {
/>
/>
<
div
className=
"max-h-[200px] overflow-y-auto"
>
<
div
className=
"max-h-[200px] overflow-y-auto"
>
{
filteredMemos
.
length
===
0
?
(
{
filteredMemos
.
length
===
0
?
(
<
div
className=
"py-6 text-center text-sm text-muted-foreground"
>
{
isFetching
?
"Loading..."
:
t
(
"reference.no-memos-found"
)
}
</
div
>
<
div
className=
"py-6 text-center text-sm text-muted-foreground"
>
{
isFetching
?
"Loading..."
:
t
(
"reference.no-memos-found"
)
}
</
div
>
)
:
(
)
:
(
filteredMemos
.
map
((
memo
)
=>
(
filteredMemos
.
map
((
memo
)
=>
(
<
div
<
div
...
...
web/src/components/MemoEditor/ActionButton/LocationSelector.tsx
View file @
db4b1f5f
...
@@ -96,19 +96,17 @@ const LocationSelector = (props: Props) => {
...
@@ -96,19 +96,17 @@ const LocationSelector = (props: Props) => {
return
(
return
(
<
Popover
open=
{
popoverOpen
}
onOpenChange=
{
setPopoverOpen
}
>
<
Popover
open=
{
popoverOpen
}
onOpenChange=
{
setPopoverOpen
}
>
<
PopoverTrigger
asChild
>
<
PopoverTrigger
asChild
>
<
Button
variant=
"ghost"
asChild
>
{
props
.
location
?
(
<
div
>
<
Button
variant=
"ghost"
>
<
MapPinIcon
className=
"w-5 h-5 mx-auto shrink-0"
/>
<
MapPinIcon
className=
"size-5 shrink-0"
/>
{
props
.
location
&&
(
<
span
className=
"ml-0.5 text-sm text-ellipsis whitespace-nowrap overflow-hidden max-w-32"
>
{
props
.
location
.
placeholder
}
</
span
>
<>
<
XIcon
className=
"size-5 mx-auto shrink-0 opacity-60 hover:opacity-80"
onClick=
{
removeLocation
}
/>
<
span
className=
"ml-0.5 text-sm text-ellipsis whitespace-nowrap overflow-hidden max-w-32"
>
</
Button
>
{
props
.
location
.
placeholder
}
)
:
(
</
span
>
<
Button
variant=
"ghost"
size=
"icon"
>
<
XIcon
className=
"w-5 h-5 mx-auto shrink-0 opacity-60 hover:opacity-80"
onClick=
{
removeLocation
}
/>
<
MapPinIcon
className=
"size-5 shrink-0"
/>
</>
</
Button
>
)
}
)
}
</
div
>
</
Button
>
</
PopoverTrigger
>
</
PopoverTrigger
>
<
PopoverContent
align=
"center"
>
<
PopoverContent
align=
"center"
>
<
div
className=
"min-w-80 sm:w-lg p-1 flex flex-col justify-start items-start"
>
<
div
className=
"min-w-80 sm:w-lg p-1 flex flex-col justify-start items-start"
>
...
@@ -133,7 +131,6 @@ const LocationSelector = (props: Props) => {
...
@@ -133,7 +131,6 @@ const LocationSelector = (props: Props) => {
<
Button
<
Button
className=
"shrink-0"
className=
"shrink-0"
color=
"primary"
color=
"primary"
size=
"sm"
onClick=
{
()
=>
{
onClick=
{
()
=>
{
props
.
onChange
(
props
.
onChange
(
Location
.
fromPartial
({
Location
.
fromPartial
({
...
...
web/src/components/MemoEditor/ActionButton/MarkdownMenu.tsx
View file @
db4b1f5f
...
@@ -62,8 +62,8 @@ const MarkdownMenu = (props: Props) => {
...
@@ -62,8 +62,8 @@ const MarkdownMenu = (props: Props) => {
return
(
return
(
<
Popover
>
<
Popover
>
<
PopoverTrigger
asChild
>
<
PopoverTrigger
asChild
>
<
Button
variant=
"ghost"
>
<
Button
variant=
"ghost"
size=
"icon"
>
<
SquareSlashIcon
/>
<
SquareSlashIcon
className=
"size-5"
/>
</
Button
>
</
Button
>
</
PopoverTrigger
>
</
PopoverTrigger
>
<
PopoverContent
align=
"start"
className=
"text-sm p-1"
>
<
PopoverContent
align=
"start"
className=
"text-sm p-1"
>
...
...
web/src/components/MemoEditor/ActionButton/TagSelector.tsx
View file @
db4b1f5f
...
@@ -35,8 +35,8 @@ const TagSelector = observer((props: Props) => {
...
@@ -35,8 +35,8 @@ const TagSelector = observer((props: Props) => {
return
(
return
(
<
Popover
>
<
Popover
>
<
PopoverTrigger
asChild
>
<
PopoverTrigger
asChild
>
<
Button
variant=
"ghost"
>
<
Button
variant=
"ghost"
size=
"icon"
>
<
HashIcon
/>
<
HashIcon
className=
"size-5"
/>
</
Button
>
</
Button
>
</
PopoverTrigger
>
</
PopoverTrigger
>
<
PopoverContent
align=
"start"
sideOffset=
{
2
}
>
<
PopoverContent
align=
"start"
sideOffset=
{
2
}
>
...
...
web/src/components/MemoEditor/ActionButton/UploadAttachmentButton.tsx
View file @
db4b1f5f
...
@@ -73,8 +73,8 @@ const UploadAttachmentButton = observer((props: Props) => {
...
@@ -73,8 +73,8 @@ const UploadAttachmentButton = observer((props: Props) => {
const
isUploading
=
state
.
uploadingFlag
||
props
.
isUploading
;
const
isUploading
=
state
.
uploadingFlag
||
props
.
isUploading
;
return
(
return
(
<
Button
className=
"relative"
variant=
"ghost"
disabled=
{
isUploading
}
>
<
Button
className=
"relative"
variant=
"ghost"
size=
"icon"
disabled=
{
isUploading
}
>
{
isUploading
?
<
LoaderIcon
className=
"
w-5 h-5 animate-spin"
/>
:
<
PaperclipIcon
className=
"w-5 h
-5"
/>
}
{
isUploading
?
<
LoaderIcon
className=
"
size-5 animate-spin"
/>
:
<
PaperclipIcon
className=
"size
-5"
/>
}
<
input
<
input
className=
"absolute inset-0 w-full h-full opacity-0 cursor-pointer"
className=
"absolute inset-0 w-full h-full opacity-0 cursor-pointer"
ref=
{
fileInputRef
}
ref=
{
fileInputRef
}
...
...
web/src/components/MemoEditor/Editor/index.tsx
View file @
db4b1f5f
...
@@ -213,9 +213,7 @@ const Editor = forwardRef(function Editor(props: Props, ref: React.ForwardedRef<
...
@@ -213,9 +213,7 @@ const Editor = forwardRef(function Editor(props: Props, ref: React.ForwardedRef<
};
};
return
(
return
(
<
div
<
div
className=
{
cn
(
"flex flex-col justify-start items-start relative w-full h-auto max-h-[50vh] bg-inherit"
,
className
)
}
>
className=
{
cn
(
"flex flex-col justify-start items-start relative w-full h-auto max-h-[50vh] bg-inherit"
,
className
)
}
>
<
textarea
<
textarea
className=
"w-full h-full my-1 text-base resize-none overflow-x-hidden overflow-y-auto bg-transparent outline-none placeholder:opacity-70 whitespace-pre-wrap break-words"
className=
"w-full h-full my-1 text-base resize-none overflow-x-hidden overflow-y-auto bg-transparent outline-none placeholder:opacity-70 whitespace-pre-wrap break-words"
rows=
{
2
}
rows=
{
2
}
...
...
web/src/components/MemoEditor/index.tsx
View file @
db4b1f5f
...
@@ -500,8 +500,8 @@ const MemoEditor = observer((props: Props) => {
...
@@ -500,8 +500,8 @@ const MemoEditor = observer((props: Props) => {
<
Editor
ref=
{
editorRef
}
{
...
editorConfig
}
/>
<
Editor
ref=
{
editorRef
}
{
...
editorConfig
}
/>
<
AttachmentListView
attachmentList=
{
state
.
attachmentList
}
setAttachmentList=
{
handleSetAttachmentList
}
/>
<
AttachmentListView
attachmentList=
{
state
.
attachmentList
}
setAttachmentList=
{
handleSetAttachmentList
}
/>
<
RelationListView
relationList=
{
referenceRelations
}
setRelationList=
{
handleSetRelationList
}
/>
<
RelationListView
relationList=
{
referenceRelations
}
setRelationList=
{
handleSetRelationList
}
/>
<
div
className=
"relative w-full flex flex-row justify-between items-center py-1"
onFocus=
{
(
e
)
=>
e
.
stopPropagation
()
}
>
<
div
className=
"relative w-full flex flex-row justify-between items-center py-1
gap-2
"
onFocus=
{
(
e
)
=>
e
.
stopPropagation
()
}
>
<
div
className=
"flex flex-row justify-start items-center opacity-
80 -space-x-2
"
>
<
div
className=
"flex flex-row justify-start items-center opacity-
60 shrink-1
"
>
<
TagSelector
editorRef=
{
editorRef
}
/>
<
TagSelector
editorRef=
{
editorRef
}
/>
<
MarkdownMenu
editorRef=
{
editorRef
}
/>
<
MarkdownMenu
editorRef=
{
editorRef
}
/>
<
UploadAttachmentButton
isUploading=
{
state
.
isUploadingAttachment
}
/>
<
UploadAttachmentButton
isUploading=
{
state
.
isUploadingAttachment
}
/>
...
@@ -516,7 +516,7 @@ const MemoEditor = observer((props: Props) => {
...
@@ -516,7 +516,7 @@ const MemoEditor = observer((props: Props) => {
}
}
/>
/>
</
div
>
</
div
>
<
div
className=
"shrink-0
-mr-1 flex flex-row justify-end items-center
"
>
<
div
className=
"shrink-0
flex flex-row justify-end items-center gap-1
"
>
{
props
.
onCancel
&&
(
{
props
.
onCancel
&&
(
<
Button
variant=
"ghost"
className=
"opacity-60"
disabled=
{
state
.
isRequesting
}
onClick=
{
handleCancelBtnClick
}
>
<
Button
variant=
"ghost"
className=
"opacity-60"
disabled=
{
state
.
isRequesting
}
onClick=
{
handleCancelBtnClick
}
>
{
t
(
"common.cancel"
)
}
{
t
(
"common.cancel"
)
}
...
...
web/src/components/MemoView.tsx
View file @
db4b1f5f
...
@@ -131,7 +131,7 @@ const MemoView: React.FC<Props> = observer((props: Props) => {
...
@@ -131,7 +131,7 @@ const MemoView: React.FC<Props> = observer((props: Props) => {
)
:
(
)
:
(
<
div
<
div
className=
{
cn
(
className=
{
cn
(
"group relative flex flex-col justify-start items-start w-full px-4 py-3 mb-2 gap-2 bg-card rounded-lg border border-
card hover:border-
border"
,
"group relative flex flex-col justify-start items-start w-full px-4 py-3 mb-2 gap-2 bg-card rounded-lg border border-border"
,
className
,
className
,
)
}
)
}
>
>
...
...
web/src/components/Navigation.tsx
View file @
db4b1f5f
...
@@ -78,9 +78,9 @@ const Navigation = observer((props: Props) => {
...
@@ -78,9 +78,9 @@ const Navigation = observer((props: Props) => {
<
NavLink
<
NavLink
className=
{
({
isActive
})
=>
className=
{
({
isActive
})
=>
cn
(
cn
(
"px-2 py-2 rounded-2xl border flex flex-row items-center text-lg text-foreground hover:b
g-secondary hover:b
order-border"
,
"px-2 py-2 rounded-2xl border flex flex-row items-center text-lg text-foreground hover:border-border"
,
collapsed
?
""
:
"w-full px-4"
,
collapsed
?
""
:
"w-full px-4"
,
isActive
?
"bg-
secondary drop-shadow-sm
border-border"
:
"border-transparent"
,
isActive
?
"bg-
background
border-border"
:
"border-transparent"
,
)
)
}
}
key=
{
navLink
.
id
}
key=
{
navLink
.
id
}
...
...
web/src/components/NavigationDrawer.tsx
View file @
db4b1f5f
...
@@ -23,12 +23,10 @@ const NavigationDrawer = observer(() => {
...
@@ -23,12 +23,10 @@ const NavigationDrawer = observer(() => {
<
SheetTrigger
asChild
>
<
SheetTrigger
asChild
>
<
Button
variant=
"ghost"
className=
"px-2"
>
<
Button
variant=
"ghost"
className=
"px-2"
>
<
UserAvatar
className=
"shrink-0 w-6 h-6 rounded-md"
avatarUrl=
{
avatarUrl
}
/>
<
UserAvatar
className=
"shrink-0 w-6 h-6 rounded-md"
avatarUrl=
{
avatarUrl
}
/>
<
span
className=
"font-bold text-lg leading-10 ml-2 text-ellipsis shrink-0 cursor-pointer overflow-hidden text-foreground"
>
<
span
className=
"font-bold text-lg leading-10 text-ellipsis overflow-hidden text-foreground"
>
{
title
}
</
span
>
{
title
}
</
span
>
</
Button
>
</
Button
>
</
SheetTrigger
>
</
SheetTrigger
>
<
SheetContent
side=
"left"
className=
"w-
full sm:w-80 overflow-auto px-2 bg-secondary
"
>
<
SheetContent
side=
"left"
className=
"w-
80 max-w-full overflow-auto px-2 bg-background
"
>
<
Navigation
/>
<
Navigation
/>
</
SheetContent
>
</
SheetContent
>
</
Sheet
>
</
Sheet
>
...
...
web/src/components/ReactionView.tsx
View file @
db4b1f5f
...
@@ -73,7 +73,7 @@ const ReactionView = observer((props: Props) => {
...
@@ -73,7 +73,7 @@ const ReactionView = observer((props: Props) => {
"h-7 border px-2 py-0.5 rounded-full flex flex-row justify-center items-center gap-1"
,
"h-7 border px-2 py-0.5 rounded-full flex flex-row justify-center items-center gap-1"
,
"text-sm text-muted-foreground"
,
"text-sm text-muted-foreground"
,
currentUser
&&
!
readonly
&&
"cursor-pointer"
,
currentUser
&&
!
readonly
&&
"cursor-pointer"
,
hasReaction
&&
"bg-
primary/10 border-primary
"
,
hasReaction
&&
"bg-
secondary border-border
"
,
)
}
)
}
onClick=
{
handleReactionClick
}
onClick=
{
handleReactionClick
}
>
>
...
...
web/src/components/Settings/MemoRelatedSettings.tsx
View file @
db4b1f5f
...
@@ -124,7 +124,7 @@ const MemoRelatedSettings = observer(() => {
...
@@ -124,7 +124,7 @@ const MemoRelatedSettings = observer(() => {
<
div
className=
"mt-2 w-full flex flex-row flex-wrap gap-1"
>
<
div
className=
"mt-2 w-full flex flex-row flex-wrap gap-1"
>
{
memoRelatedSetting
.
reactions
.
map
((
reactionType
)
=>
{
{
memoRelatedSetting
.
reactions
.
map
((
reactionType
)
=>
{
return
(
return
(
<
Badge
key=
{
reactionType
}
variant=
"outline"
className=
"h-
8
flex items-center gap-1"
>
<
Badge
key=
{
reactionType
}
variant=
"outline"
className=
"h-
9
flex items-center gap-1"
>
{
reactionType
}
{
reactionType
}
<
X
<
X
className=
"w-3 h-3 cursor-pointer hover:text-destructive"
className=
"w-3 h-3 cursor-pointer hover:text-destructive"
...
@@ -140,10 +140,7 @@ const MemoRelatedSettings = observer(() => {
...
@@ -140,10 +140,7 @@ const MemoRelatedSettings = observer(() => {
value=
{
editingReaction
}
value=
{
editingReaction
}
onChange=
{
(
event
)
=>
setEditingReaction
(
event
.
target
.
value
.
trim
())
}
onChange=
{
(
event
)
=>
setEditingReaction
(
event
.
target
.
value
.
trim
())
}
/>
/>
<
CheckIcon
<
CheckIcon
className=
"w-5 h-5 text-muted-foreground cursor-pointer hover:text-primary"
onClick=
{
()
=>
upsertReaction
()
}
/>
className=
"w-5 h-5 text-muted-foreground cursor-pointer hover:text-primary"
onClick=
{
()
=>
upsertReaction
()
}
/>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
...
@@ -158,7 +155,7 @@ const MemoRelatedSettings = observer(() => {
...
@@ -158,7 +155,7 @@ const MemoRelatedSettings = observer(() => {
<
div
className=
"mt-2 w-full flex flex-row flex-wrap gap-1"
>
<
div
className=
"mt-2 w-full flex flex-row flex-wrap gap-1"
>
{
memoRelatedSetting
.
nsfwTags
.
map
((
nsfwTag
)
=>
{
{
memoRelatedSetting
.
nsfwTags
.
map
((
nsfwTag
)
=>
{
return
(
return
(
<
Badge
key=
{
nsfwTag
}
variant=
"outline"
className=
"h-
8
flex items-center gap-1"
>
<
Badge
key=
{
nsfwTag
}
variant=
"outline"
className=
"h-
9
flex items-center gap-1"
>
{
nsfwTag
}
{
nsfwTag
}
<
X
<
X
className=
"w-3 h-3 cursor-pointer hover:text-destructive"
className=
"w-3 h-3 cursor-pointer hover:text-destructive"
...
@@ -174,10 +171,7 @@ const MemoRelatedSettings = observer(() => {
...
@@ -174,10 +171,7 @@ const MemoRelatedSettings = observer(() => {
value=
{
editingNsfwTag
}
value=
{
editingNsfwTag
}
onChange=
{
(
event
)
=>
setEditingNsfwTag
(
event
.
target
.
value
.
trim
())
}
onChange=
{
(
event
)
=>
setEditingNsfwTag
(
event
.
target
.
value
.
trim
())
}
/>
/>
<
CheckIcon
<
CheckIcon
className=
"w-5 h-5 text-muted-foreground cursor-pointer hover:text-primary"
onClick=
{
()
=>
upsertNsfwTags
()
}
/>
className=
"w-5 h-5 text-muted-foreground cursor-pointer hover:text-primary"
onClick=
{
()
=>
upsertNsfwTags
()
}
/>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
...
...
web/src/components/ui/button.tsx
View file @
db4b1f5f
...
@@ -18,9 +18,9 @@ const buttonVariants = cva(
...
@@ -18,9 +18,9 @@ const buttonVariants = cva(
link
:
"text-primary underline-offset-4 hover:underline"
,
link
:
"text-primary underline-offset-4 hover:underline"
,
},
},
size
:
{
size
:
{
default
:
"h-8 px-3
py-2 has-[>svg]:px-3
"
,
default
:
"h-8 px-3"
,
sm
:
"h-7 rounded-md gap-1 px-2 has-[>svg]:px-2"
,
sm
:
"h-7 rounded-md gap-1 px-2 has-[>svg]:px-2"
,
lg
:
"h-9 rounded-md px-4
has-[>svg]:px-3
"
,
lg
:
"h-9 rounded-md px-4"
,
icon
:
"size-8"
,
icon
:
"size-8"
,
},
},
},
},
...
...
web/src/components/ui/input.tsx
View file @
db4b1f5f
...
@@ -7,7 +7,7 @@ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
...
@@ -7,7 +7,7 @@ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
type=
{
type
}
type=
{
type
}
data
-
slot=
"input"
data
-
slot=
"input"
className=
{
cn
(
className=
{
cn
(
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-
9
w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm"
,
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-
8
w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm"
,
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"
,
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]"
,
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
,
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
,
className
,
className
,
...
...
web/src/index.css
0 → 100644
View file @
db4b1f5f
@import
"tailwindcss"
;
@import
"tw-animate-css"
;
@import
"./style.css"
;
@custom-variant
dark
(
&
:
is
(.
dark
*
));
@theme
{
--default-transition-duration
:
150ms
;
}
@variant
dark
(
&
:
is
(.
dark
*
));
@layer
base
{
*
{
@apply
border-border
outline-ring/50;
}
body
{
@apply
bg-background
text-foreground;
}
}
web/src/layouts/HomeLayout.tsx
View file @
db4b1f5f
...
@@ -16,13 +16,7 @@ const HomeLayout = observer(() => {
...
@@ -16,13 +16,7 @@ const HomeLayout = observer(() => {
</
MobileHeader
>
</
MobileHeader
>
)
}
)
}
{
md
&&
(
{
md
&&
(
<
div
<
div
className=
{
cn
(
"fixed top-0 left-16 shrink-0 h-svh transition-all"
,
"border-x border-border"
,
lg
?
"w-72"
:
"w-56"
)
}
>
className=
{
cn
(
"fixed top-0 left-16 shrink-0 h-svh transition-all"
,
"border-r border"
,
lg
?
"w-72"
:
"w-56"
,
)
}
>
<
HomeSidebar
className=
{
cn
(
"px-3 py-6"
)
}
/>
<
HomeSidebar
className=
{
cn
(
"px-3 py-6"
)
}
/>
</
div
>
</
div
>
)
}
)
}
...
...
web/src/layouts/RootLayout.tsx
View file @
db4b1f5f
...
@@ -49,10 +49,7 @@ const RootLayout = observer(() => {
...
@@ -49,10 +49,7 @@ const RootLayout = observer(() => {
<
div
className=
"w-full min-h-full flex flex-row justify-center items-start sm:pl-16"
>
<
div
className=
"w-full min-h-full flex flex-row justify-center items-start sm:pl-16"
>
{
sm
&&
(
{
sm
&&
(
<
div
<
div
className=
{
cn
(
className=
{
cn
(
"group flex flex-col justify-start items-start fixed top-0 left-0 select-none h-full bg-secondary"
,
"w-16 px-2"
)
}
"group flex flex-col justify-start items-start fixed top-0 left-0 select-none border-r border h-full bg-secondary"
,
"w-16 px-2"
,
)
}
>
>
<
Navigation
collapsed=
{
true
}
/>
<
Navigation
collapsed=
{
true
}
/>
</
div
>
</
div
>
...
...
web/src/main.tsx
View file @
db4b1f5f
...
@@ -4,10 +4,10 @@ import { createRoot } from "react-dom/client";
...
@@ -4,10 +4,10 @@ import { createRoot } from "react-dom/client";
import
{
Toaster
}
from
"react-hot-toast"
;
import
{
Toaster
}
from
"react-hot-toast"
;
import
{
RouterProvider
}
from
"react-router-dom"
;
import
{
RouterProvider
}
from
"react-router-dom"
;
import
"./i18n"
;
import
"./i18n"
;
import
"./index.css"
;
import
router
from
"./router"
;
import
router
from
"./router"
;
import
{
initialUserStore
}
from
"./store/v2/user"
;
import
{
initialUserStore
}
from
"./store/v2/user"
;
import
{
initialWorkspaceStore
}
from
"./store/v2/workspace"
;
import
{
initialWorkspaceStore
}
from
"./store/v2/workspace"
;
import
"./style.css"
;
import
"leaflet/dist/leaflet.css"
;
import
"leaflet/dist/leaflet.css"
;
const
Main
=
observer
(()
=>
(
const
Main
=
observer
(()
=>
(
...
...
web/src/pages/Setting.tsx
View file @
db4b1f5f
...
@@ -87,7 +87,7 @@ const Setting = observer(() => {
...
@@ -87,7 +87,7 @@ const Setting = observer(() => {
<
section
className=
"@container w-full max-w-5xl min-h-full flex flex-col justify-start items-start sm:pt-3 md:pt-6 pb-8"
>
<
section
className=
"@container w-full max-w-5xl min-h-full flex flex-col justify-start items-start sm:pt-3 md:pt-6 pb-8"
>
{
!
md
&&
<
MobileHeader
/>
}
{
!
md
&&
<
MobileHeader
/>
}
<
div
className=
"w-full px-4 sm:px-6"
>
<
div
className=
"w-full px-4 sm:px-6"
>
<
div
className=
"w-full shadow flex flex-row justify-start items-start px-4 py-3 rounded-xl bg-background text-muted-foreground"
>
<
div
className=
"w-full shadow
border border-border
flex flex-row justify-start items-start px-4 py-3 rounded-xl bg-background text-muted-foreground"
>
<
div
className=
"hidden sm:flex flex-col justify-start items-start w-40 h-auto shrink-0 py-2"
>
<
div
className=
"hidden sm:flex flex-col justify-start items-start w-40 h-auto shrink-0 py-2"
>
<
span
className=
"text-sm mt-0.5 pl-3 font-mono select-none text-muted-foreground"
>
{
t
(
"common.basic"
)
}
</
span
>
<
span
className=
"text-sm mt-0.5 pl-3 font-mono select-none text-muted-foreground"
>
{
t
(
"common.basic"
)
}
</
span
>
<
div
className=
"w-full flex flex-col justify-start items-start mt-1"
>
<
div
className=
"w-full flex flex-col justify-start items-start mt-1"
>
...
...
web/src/pages/UserProfile.tsx
View file @
db4b1f5f
...
@@ -92,9 +92,7 @@ const UserProfile = observer(() => {
...
@@ -92,9 +92,7 @@ const UserProfile = observer(() => {
<
p
className=
"w-full text-3xl text-foreground leading-tight font-medium opacity-80 truncate"
>
<
p
className=
"w-full text-3xl text-foreground leading-tight font-medium opacity-80 truncate"
>
{
user
.
displayName
||
user
.
username
}
{
user
.
displayName
||
user
.
username
}
</
p
>
</
p
>
<
p
className=
"w-full text-muted-foreground leading-snug whitespace-pre-wrap truncate line-clamp-6"
>
<
p
className=
"w-full text-muted-foreground leading-snug whitespace-pre-wrap truncate line-clamp-6"
>
{
user
.
description
}
</
p
>
{
user
.
description
}
</
p
>
</
div
>
</
div
>
</
div
>
</
div
>
<
PagedMemoList
<
PagedMemoList
...
...
web/src/style.css
View file @
db4b1f5f
@import
"tailwindcss"
;
@import
"tw-animate-css"
;
@custom-variant
dark
(
&
:
is
(.
dark
*
));
@theme
{
--default-transition-duration
:
150ms
;
}
@variant
dark
(
&
:
is
(.
dark
*
));
@theme
inline
{
--radius-sm
:
calc
(
var
(
--radius
)
-
4px
);
--radius-md
:
calc
(
var
(
--radius
)
-
2px
);
--radius-lg
:
var
(
--radius
);
--radius-xl
:
calc
(
var
(
--radius
)
+
4px
);
--color-background
:
var
(
--background
);
--color-foreground
:
var
(
--foreground
);
--color-card
:
var
(
--card
);
--color-card-foreground
:
var
(
--card-foreground
);
--color-popover
:
var
(
--popover
);
--color-popover-foreground
:
var
(
--popover-foreground
);
--color-primary
:
var
(
--primary
);
--color-primary-foreground
:
var
(
--primary-foreground
);
--color-secondary
:
var
(
--secondary
);
--color-secondary-foreground
:
var
(
--secondary-foreground
);
--color-muted
:
var
(
--muted
);
--color-muted-foreground
:
var
(
--muted-foreground
);
--color-accent
:
var
(
--accent
);
--color-accent-foreground
:
var
(
--accent-foreground
);
--color-destructive
:
var
(
--destructive
);
--color-destructive-foreground
:
var
(
--destructive-foreground
);
--color-border
:
var
(
--border
);
--color-input
:
var
(
--input
);
--color-ring
:
var
(
--ring
);
--color-chart-1
:
var
(
--chart-1
);
--color-chart-2
:
var
(
--chart-2
);
--color-chart-3
:
var
(
--chart-3
);
--color-chart-4
:
var
(
--chart-4
);
--color-chart-5
:
var
(
--chart-5
);
--color-sidebar
:
var
(
--sidebar
);
--color-sidebar-foreground
:
var
(
--sidebar-foreground
);
--color-sidebar-primary
:
var
(
--sidebar-primary
);
--color-sidebar-primary-foreground
:
var
(
--sidebar-primary-foreground
);
--color-sidebar-accent
:
var
(
--sidebar-accent
);
--color-sidebar-accent-foreground
:
var
(
--sidebar-accent-foreground
);
--color-sidebar-border
:
var
(
--sidebar-border
);
--color-sidebar-ring
:
var
(
--sidebar-ring
);
}
:root
{
:root
{
--radius
:
0.5rem
;
--background
:
oklch
(
0.9818
0.0054
95.0986
);
--background
:
oklch
(
0.9818
0.0054
95.0986
);
--foreground
:
oklch
(
0.3438
0.0269
95.7226
);
--foreground
:
oklch
(
0.3438
0.0269
95.7226
);
--card
:
oklch
(
0.9818
0.0054
95.0986
);
--card
:
oklch
(
0.9818
0.0054
95.0986
);
--card-foreground
:
oklch
(
0.1908
0.002
0
106.5859
);
--card-foreground
:
oklch
(
0.1908
0.002
106.5859
);
--popover
:
oklch
(
1
.0000
0
0
);
--popover
:
oklch
(
1
0
0
);
--popover-foreground
:
oklch
(
0.2671
0.0196
98.939
0
);
--popover-foreground
:
oklch
(
0.2671
0.0196
98.939
);
--primary
:
oklch
(
0.6171
0.1375
39.0427
);
--primary
:
oklch
(
0.6171
0.1375
39.0427
);
--primary-foreground
:
oklch
(
1
.0000
0
0
);
--primary-foreground
:
oklch
(
1
0
0
);
--secondary
:
oklch
(
0.9245
0.0138
92.9892
);
--secondary
:
oklch
(
0.9245
0.0138
92.9892
);
--secondary-foreground
:
oklch
(
0.4334
0.0177
98.6048
);
--secondary-foreground
:
oklch
(
0.4334
0.0177
98.6048
);
--muted
:
oklch
(
0.9341
0.0153
90.239
0
);
--muted
:
oklch
(
0.9341
0.0153
90.239
);
--muted-foreground
:
oklch
(
0.6059
0.0075
97.4233
);
--muted-foreground
:
oklch
(
0.6059
0.0075
97.4233
);
--accent
:
oklch
(
0.9245
0.0138
92.9892
);
--accent
:
oklch
(
0.9245
0.0138
92.9892
);
--accent-foreground
:
oklch
(
0.2671
0.0196
98.939
0
);
--accent-foreground
:
oklch
(
0.2671
0.0196
98.939
);
--destructive
:
oklch
(
0.1908
0.002
0
106.5859
);
--destructive
:
oklch
(
0.1908
0.002
106.5859
);
--destructive-foreground
:
oklch
(
1
.0000
0
0
);
--destructive-foreground
:
oklch
(
1
0
0
);
--border
:
oklch
(
0.8847
0.0069
97.3627
);
--border
:
oklch
(
0.8847
0.0069
97.3627
);
--input
:
oklch
(
0.7621
0.0156
98.3528
);
--input
:
oklch
(
0.7621
0.0156
98.3528
);
--ring
:
oklch
(
0.5937
0.1673
253.063
0
);
--ring
:
oklch
(
0.5937
0.1673
253.063
);
--chart-1
:
oklch
(
0.5583
0.1276
42.9956
);
--chart-1
:
oklch
(
0.5583
0.1276
42.9956
);
--chart-2
:
oklch
(
0.6898
0.1581
290.4107
);
--chart-2
:
oklch
(
0.6898
0.1581
290.4107
);
--chart-3
:
oklch
(
0.8816
0.0276
93.128
0
);
--chart-3
:
oklch
(
0.8816
0.0276
93.128
);
--chart-4
:
oklch
(
0.8822
0.0403
298.1792
);
--chart-4
:
oklch
(
0.8822
0.0403
298.1792
);
--chart-5
:
oklch
(
0.5608
0.1348
42.0584
);
--chart-5
:
oklch
(
0.5608
0.1348
42.0584
);
--sidebar
:
oklch
(
0.9663
0.008
0
98.8792
);
--sidebar
:
oklch
(
0.9663
0.008
98.8792
);
--sidebar-foreground
:
oklch
(
0.359
0
0.0051
106.6524
);
--sidebar-foreground
:
oklch
(
0.359
0.0051
106.6524
);
--sidebar-primary
:
oklch
(
0.6171
0.1375
39.0427
);
--sidebar-primary
:
oklch
(
0.6171
0.1375
39.0427
);
--sidebar-primary-foreground
:
oklch
(
0.9881
0
0
);
--sidebar-primary-foreground
:
oklch
(
0.9881
0
0
);
--sidebar-accent
:
oklch
(
0.9245
0.0138
92.9892
);
--sidebar-accent
:
oklch
(
0.9245
0.0138
92.9892
);
--sidebar-accent-foreground
:
oklch
(
0.325
0
0
0
);
--sidebar-accent-foreground
:
oklch
(
0.325
0
0
);
--sidebar-border
:
oklch
(
0.9401
0
0
);
--sidebar-border
:
oklch
(
0.9401
0
0
);
--sidebar-ring
:
oklch
(
0.7731
0
0
);
--sidebar-ring
:
oklch
(
0.7731
0
0
);
--font-sans
:
ui-sans-serif
,
system-ui
,
-apple-system
,
BlinkMacSystemFont
,
"Segoe UI"
,
Roboto
,
"Helvetica Neue"
,
Arial
,
"Noto Sans"
,
sans-serif
,
"Apple Color Emoji"
,
"Segoe UI Emoji"
,
"Segoe UI Symbol"
,
"Noto Color Emoji"
;
--font-serif
:
ui-serif
,
Georgia
,
Cambria
,
"Times New Roman"
,
Times
,
serif
;
--font-mono
:
ui-monospace
,
SFMono-Regular
,
Menlo
,
Monaco
,
Consolas
,
"Liberation Mono"
,
"Courier New"
,
monospace
;
--radius
:
0.5rem
;
--shadow-2xs
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.05
);
--shadow-xs
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.05
);
--shadow-sm
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
1px
2px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
1px
2px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-md
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
2px
4px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-lg
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
4px
6px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-xl
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
8px
10px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-2xl
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.25
);
--tracking-normal
:
0em
;
--spacing
:
0.25rem
;
}
}
.dark
{
.dark
{
...
@@ -90,40 +55,98 @@
...
@@ -90,40 +55,98 @@
--card
:
oklch
(
0.2679
0.0036
106.6427
);
--card
:
oklch
(
0.2679
0.0036
106.6427
);
--card-foreground
:
oklch
(
0.9818
0.0054
95.0986
);
--card-foreground
:
oklch
(
0.9818
0.0054
95.0986
);
--popover
:
oklch
(
0.3085
0.0035
106.6039
);
--popover
:
oklch
(
0.3085
0.0035
106.6039
);
--popover-foreground
:
oklch
(
0.9211
0.004
0
106.4781
);
--popover-foreground
:
oklch
(
0.9211
0.004
106.4781
);
--primary
:
oklch
(
0.6724
0.1308
38.7559
);
--primary
:
oklch
(
0.6724
0.1308
38.7559
);
--primary-foreground
:
oklch
(
1
.0000
0
0
);
--primary-foreground
:
oklch
(
1
0
0
);
--secondary
:
oklch
(
0.9818
0.0054
95.0986
);
--secondary
:
oklch
(
0.9818
0.0054
95.0986
);
--secondary-foreground
:
oklch
(
0.3085
0.0035
106.6039
);
--secondary-foreground
:
oklch
(
0.3085
0.0035
106.6039
);
--muted
:
oklch
(
0.2213
0.0038
106.707
0
);
--muted
:
oklch
(
0.2213
0.0038
106.707
);
--muted-foreground
:
oklch
(
0.7713
0.0169
99.0657
);
--muted-foreground
:
oklch
(
0.7713
0.0169
99.0657
);
--accent
:
oklch
(
0.213
0
0.0078
95.4245
);
--accent
:
oklch
(
0.213
0.0078
95.4245
);
--accent-foreground
:
oklch
(
0.9663
0.008
0
98.8792
);
--accent-foreground
:
oklch
(
0.9663
0.008
98.8792
);
--destructive
:
oklch
(
0.6368
0.2078
25.3313
);
--destructive
:
oklch
(
0.6368
0.2078
25.3313
);
--destructive-foreground
:
oklch
(
1
.0000
0
0
);
--destructive-foreground
:
oklch
(
1
0
0
);
--border
:
oklch
(
0.3618
0.0101
106.8928
);
--border
:
oklch
(
0.3618
0.0101
106.8928
);
--input
:
oklch
(
0.4336
0.0113
100.2195
);
--input
:
oklch
(
0.4336
0.0113
100.2195
);
--ring
:
oklch
(
0.5937
0.1673
253.063
0
);
--ring
:
oklch
(
0.5937
0.1673
253.063
);
--chart-1
:
oklch
(
0.5583
0.1276
42.9956
);
--chart-1
:
oklch
(
0.5583
0.1276
42.9956
);
--chart-2
:
oklch
(
0.6898
0.1581
290.4107
);
--chart-2
:
oklch
(
0.6898
0.1581
290.4107
);
--chart-3
:
oklch
(
0.213
0
0.0078
95.4245
);
--chart-3
:
oklch
(
0.213
0.0078
95.4245
);
--chart-4
:
oklch
(
0.3074
0.0516
289.323
0
);
--chart-4
:
oklch
(
0.3074
0.0516
289.323
);
--chart-5
:
oklch
(
0.5608
0.1348
42.0584
);
--chart-5
:
oklch
(
0.5608
0.1348
42.0584
);
--sidebar
:
oklch
(
0.2357
0.0024
67.7077
);
--sidebar
:
oklch
(
0.2357
0.0024
67.7077
);
--sidebar-foreground
:
oklch
(
0.8074
0.0142
93.0137
);
--sidebar-foreground
:
oklch
(
0.8074
0.0142
93.0137
);
--sidebar-primary
:
oklch
(
0.325
0
0
0
);
--sidebar-primary
:
oklch
(
0.325
0
0
);
--sidebar-primary-foreground
:
oklch
(
0.9881
0
0
);
--sidebar-primary-foreground
:
oklch
(
0.9881
0
0
);
--sidebar-accent
:
oklch
(
0.168
0
0.0020
106.6177
);
--sidebar-accent
:
oklch
(
0.168
0.002
106.6177
);
--sidebar-accent-foreground
:
oklch
(
0.8074
0.0142
93.0137
);
--sidebar-accent-foreground
:
oklch
(
0.8074
0.0142
93.0137
);
--sidebar-border
:
oklch
(
0.9401
0
0
);
--sidebar-border
:
oklch
(
0.9401
0
0
);
--sidebar-ring
:
oklch
(
0.7731
0
0
);
--sidebar-ring
:
oklch
(
0.7731
0
0
);
--font-sans
:
ui-sans-serif
,
system-ui
,
-apple-system
,
BlinkMacSystemFont
,
"Segoe UI"
,
Roboto
,
"Helvetica Neue"
,
Arial
,
"Noto Sans"
,
sans-serif
,
"Apple Color Emoji"
,
"Segoe UI Emoji"
,
"Segoe UI Symbol"
,
"Noto Color Emoji"
;
--font-serif
:
ui-serif
,
Georgia
,
Cambria
,
"Times New Roman"
,
Times
,
serif
;
--font-mono
:
ui-monospace
,
SFMono-Regular
,
Menlo
,
Monaco
,
Consolas
,
"Liberation Mono"
,
"Courier New"
,
monospace
;
--radius
:
0.5rem
;
--shadow-2xs
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.05
);
--shadow-xs
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.05
);
--shadow-sm
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
1px
2px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
1px
2px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-md
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
2px
4px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-lg
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
4px
6px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-xl
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.1
),
0
8px
10px
-1px
hsl
(
0
0%
0%
/
0.1
);
--shadow-2xl
:
0
1px
3px
0px
hsl
(
0
0%
0%
/
0.25
);
}
}
@layer
base
{
@theme
inline
{
*
{
--color-background
:
var
(
--background
);
@apply
border-border
outline-ring/50;
--color-foreground
:
var
(
--foreground
);
}
--color-card
:
var
(
--card
);
body
{
--color-card-foreground
:
var
(
--card-foreground
);
@apply
bg-background
text-foreground;
--color-popover
:
var
(
--popover
);
}
--color-popover-foreground
:
var
(
--popover-foreground
);
--color-primary
:
var
(
--primary
);
--color-primary-foreground
:
var
(
--primary-foreground
);
--color-secondary
:
var
(
--secondary
);
--color-secondary-foreground
:
var
(
--secondary-foreground
);
--color-muted
:
var
(
--muted
);
--color-muted-foreground
:
var
(
--muted-foreground
);
--color-accent
:
var
(
--accent
);
--color-accent-foreground
:
var
(
--accent-foreground
);
--color-destructive
:
var
(
--destructive
);
--color-destructive-foreground
:
var
(
--destructive-foreground
);
--color-border
:
var
(
--border
);
--color-input
:
var
(
--input
);
--color-ring
:
var
(
--ring
);
--color-chart-1
:
var
(
--chart-1
);
--color-chart-2
:
var
(
--chart-2
);
--color-chart-3
:
var
(
--chart-3
);
--color-chart-4
:
var
(
--chart-4
);
--color-chart-5
:
var
(
--chart-5
);
--color-sidebar
:
var
(
--sidebar
);
--color-sidebar-foreground
:
var
(
--sidebar-foreground
);
--color-sidebar-primary
:
var
(
--sidebar-primary
);
--color-sidebar-primary-foreground
:
var
(
--sidebar-primary-foreground
);
--color-sidebar-accent
:
var
(
--sidebar-accent
);
--color-sidebar-accent-foreground
:
var
(
--sidebar-accent-foreground
);
--color-sidebar-border
:
var
(
--sidebar-border
);
--color-sidebar-ring
:
var
(
--sidebar-ring
);
--font-sans
:
var
(
--font-sans
);
--font-mono
:
var
(
--font-mono
);
--font-serif
:
var
(
--font-serif
);
--radius-sm
:
calc
(
var
(
--radius
)
-
4px
);
--radius-md
:
calc
(
var
(
--radius
)
-
2px
);
--radius-lg
:
var
(
--radius
);
--radius-xl
:
calc
(
var
(
--radius
)
+
4px
);
--shadow-2xs
:
var
(
--shadow-2xs
);
--shadow-xs
:
var
(
--shadow-xs
);
--shadow-sm
:
var
(
--shadow-sm
);
--shadow
:
var
(
--shadow
);
--shadow-md
:
var
(
--shadow-md
);
--shadow-lg
:
var
(
--shadow-lg
);
--shadow-xl
:
var
(
--shadow-xl
);
--shadow-2xl
:
var
(
--shadow-2xl
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment