Merge branch 'main' into fix/view_filters

This commit is contained in:
github-actions[bot]
2026-05-14 10:23:26 +00:00
committed by GitHub
58 changed files with 147 additions and 129 deletions

View File

@@ -17,5 +17,5 @@
"lib": "@/lib",
"hooks": "@/hooks"
},
"iconLibrary": "lucide"
"iconLibrary": "phosphor"
}

View File

@@ -135,7 +135,7 @@ The note list opportunistically preloads visible and adjacent markdown/text entr
| Raw editor | CodeMirror 6 | - |
| Styling | Tailwind CSS v4 + CSS variables | 4.1.18 |
| UI primitives | Radix UI + shadcn/ui | - |
| Icons | Phosphor Icons + Lucide | - |
| Icons | Phosphor Icons | - |
| Build | Vite | 7.3.1 |
| Backend language | Rust (edition 2021) | 1.77.2 |
| Frontmatter parsing | gray_matter | 0.2 |

View File

@@ -152,7 +152,7 @@ files:
settings.titles.description: b94aeeca78dd376cc19b9aa019e53f6c
settings.titles.autoRename: 5383db8e790ebf5f956d9c59cb4c4f67
settings.titles.autoRenameDescription: cc28c28d8817736e658082a2261d9a6e
settings.vaultContent.title: 78b883ce9acb9c25e611158a518d9185
settings.vaultContent.title: f15c1cae7882448b3fb0404682e17e61
settings.vaultContent.description: a53487bf1c7898a1459dc1510e216f7d
settings.dateDisplay.default: 915e8ca934abe6625e17695ee7ae266a
settings.dateDisplay.defaultDescription: 502ed7ff7b9c0fe5971e8cb0576e91f6

View File

@@ -65,7 +65,6 @@
"date-fns": "^4.1.0",
"dompurify": "3.4.2",
"katex": "^0.16.28",
"lucide-react": "^0.564.0",
"mermaid": "^11.14.0",
"posthog-js": "^1.363.5",
"radix-ui": "^1.4.3",

12
pnpm-lock.yaml generated
View File

@@ -146,9 +146,6 @@ importers:
katex:
specifier: ^0.16.28
version: 0.16.28
lucide-react:
specifier: ^0.564.0
version: 0.564.0(react@19.2.4)
mermaid:
specifier: ^11.14.0
version: 11.14.0
@@ -4561,11 +4558,6 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
lucide-react@0.564.0:
resolution: {integrity: sha512-JJ8GVTQqFwuliifD48U6+h7DXEHdkhJ/E87kksGByII3qHxtPciVb8T8woQONHBQgHVOl7rSMrrip3SeVNy7Fg==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
lz-string@1.5.0:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
@@ -10519,10 +10511,6 @@ snapshots:
dependencies:
yallist: 3.1.1
lucide-react@0.564.0(react@19.2.4):
dependencies:
react: 19.2.4
lz-string@1.5.0: {}
magic-string@0.30.21:

View File

@@ -1,10 +1,10 @@
import { CalendarBlank as CalendarIcon, Check, X } from '@phosphor-icons/react'
import { useState } from 'react'
import { Button } from '@/components/ui/button'
import { Calendar } from '@/components/ui/calendar'
import { Input } from '@/components/ui/input'
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'
import { CalendarIcon, Check, X } from 'lucide-react'
import {
type PropertyDisplayMode,
formatDateValue,

View File

@@ -1,4 +1,4 @@
import { ArrowUpRight, Bot, CheckCircle2, Cloud, HardDrive, Loader2, Terminal } from 'lucide-react'
import { ArrowUpRight, CheckCircle as CheckCircle2, CircleNotch as Loader2, Cloud, HardDrive, Robot as Bot, Terminal } from '@phosphor-icons/react'
import {
AI_AGENT_DEFINITIONS,
getAiAgentDefinition,

View File

@@ -1,4 +1,4 @@
import { ArrowUpRight, Bot, CheckCircle2, Loader2 } from 'lucide-react'
import { ArrowUpRight, CheckCircle as CheckCircle2, CircleNotch as Loader2, Robot as Bot } from '@phosphor-icons/react'
import type { ClaudeCodeStatus } from '../hooks/useClaudeCodeStatus'
import { openExternalUrl } from '../utils/url'
import { Button } from './ui/button'

View File

@@ -1,4 +1,4 @@
import { AlertTriangle } from 'lucide-react'
import { Warning as AlertTriangle } from '@phosphor-icons/react'
import { translate, type AppLocale } from '../lib/i18n'
interface ConflictNoteBannerProps {

View File

@@ -1,7 +1,7 @@
import { Check, CircleNotch as Loader2, FileText, Warning as AlertTriangle } from '@phosphor-icons/react'
import { useCallback, useEffect, useRef, useState, type KeyboardEvent } from 'react'
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogDescription } from '@/components/ui/dialog'
import { Button } from '@/components/ui/button'
import { AlertTriangle, FileText, Check, Loader2 } from 'lucide-react'
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'
import type { ConflictFileState } from '../hooks/useConflictResolver'
import { cn } from '@/lib/utils'

View File

@@ -1,5 +1,5 @@
import { CircleNotch as Loader2 } from '@phosphor-icons/react'
import { memo } from 'react'
import { Loader2 } from 'lucide-react'
import { cn } from '@/lib/utils'
interface DeleteProgressNoticeProps {

View File

@@ -1,6 +1,5 @@
import { ArrowUpRight, Bug, Chats as MessagesSquare, Check, Copy, GitPullRequest, Lightbulb, Megaphone, Newspaper } from '@phosphor-icons/react'
import { type ReactNode, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'
import { Megaphone } from '@phosphor-icons/react'
import { ArrowUpRight, Bug, Check, Copy, GitPullRequest, Lightbulb, MessagesSquare, Newspaper } from 'lucide-react'
import { Button } from '@/components/ui/button'
import {
Card,

View File

@@ -1,5 +1,5 @@
import { GitBranch } from '@phosphor-icons/react'
import { useState } from 'react'
import { GitBranch } from 'lucide-react'
import { Button } from '@/components/ui/button'
import {
Dialog,

View File

@@ -1,5 +1,5 @@
import { Copy, ShieldCheck } from '@phosphor-icons/react'
import { useEffect } from 'react'
import { Copy, ShieldCheck } from 'lucide-react'
import { Button } from '@/components/ui/button'
import {
Dialog,

View File

@@ -1,5 +1,5 @@
import { ArrowsOut as Maximize2 } from '@phosphor-icons/react'
import { useEffect, useId, useMemo, useState } from 'react'
import { Maximize2 } from 'lucide-react'
import { Button } from '@/components/ui/button'
import {
Dialog,

View File

@@ -1,17 +1,14 @@
import { ArrowUpRight, X as XIcon } from '@phosphor-icons/react'
import { useState, useCallback, useRef, type ReactNode } from 'react'
import { createPortal } from 'react-dom'
import { ArrowUpRight } from '@phosphor-icons/react'
import type { FrontmatterValue } from './Inspector'
import { EditableValue, TagPillList, UrlValue } from './EditableValue'
import { isUrlValue } from '../utils/url'
import { Button } from '@/components/ui/button'
import { Calendar } from '@/components/ui/calendar'
import { Input } from '@/components/ui/input'
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'
import { XIcon } from 'lucide-react'
import { trackDatePropertyDirectEntrySaved } from '../lib/productAnalytics'
import { translate, type AppLocale } from '../lib/i18n'
import { isValidCssColor } from '../utils/colorUtils'
import { isUrlValue } from '../utils/url'
import {
type PropertyDisplayMode,
formatDateValue,
@@ -20,6 +17,8 @@ import {
DISPLAY_MODE_ICONS,
} from '../utils/propertyTypes'
import { StatusDropdown } from './StatusDropdown'
import type { FrontmatterValue } from './Inspector'
import { EditableValue, TagPillList, UrlValue } from './EditableValue'
import { getStatusStyle } from '../utils/statusStyles'
import { TagsDropdown } from './TagsDropdown'
import { getTagStyle } from '../utils/tagStyles'

View File

@@ -1,5 +1,5 @@
import { CaretDown as ChevronDown, CaretRight as ChevronRight, CaretUp as ChevronUp, X } from '@phosphor-icons/react'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { ChevronDown, ChevronRight, ChevronUp, X } from 'lucide-react'
import { EditorView } from '@codemirror/view'
import { Button } from '@/components/ui/button'
import { Input } from '@/components/ui/input'

View File

@@ -1,4 +1,5 @@
import { Bot, Folder, GitBranch, ListChecks, Palette, RefreshCw, ShieldCheck } from 'lucide-react'
import { Article, ArrowsClockwise as RefreshCw, Cube, GitBranch, ListChecks, Palette, Robot as Bot, ShieldCheck, type IconProps } from '@phosphor-icons/react'
import type { ComponentType } from 'react'
import type { TranslationKey } from '../lib/i18n'
import { Button } from './ui/button'
import { SETTINGS_SECTION_IDS } from './settingsSectionIds'
@@ -7,13 +8,19 @@ interface SettingsBodyNavProps {
t: (key: TranslationKey) => string
}
interface SettingsNavItem {
id: string
label: string
Icon: ComponentType<IconProps>
}
export function SettingsBodyNav({ t }: SettingsBodyNavProps) {
const items = [
const items: SettingsNavItem[] = [
{ id: SETTINGS_SECTION_IDS.sync, label: t('settings.sync.title'), Icon: RefreshCw },
{ id: SETTINGS_SECTION_IDS.workspaces, label: t('settings.workspaces.title'), Icon: Folder },
{ id: SETTINGS_SECTION_IDS.workspaces, label: t('settings.workspaces.title'), Icon: Cube },
{ id: SETTINGS_SECTION_IDS.autogit, label: t('settings.autogit.title'), Icon: GitBranch },
{ id: SETTINGS_SECTION_IDS.appearance, label: t('settings.appearance.title'), Icon: Palette },
{ id: SETTINGS_SECTION_IDS.content, label: t('settings.vaultContent.title'), Icon: Folder },
{ id: SETTINGS_SECTION_IDS.content, label: t('settings.vaultContent.title'), Icon: Article },
{ id: SETTINGS_SECTION_IDS.ai, label: t('settings.aiAgents.title'), Icon: Bot },
{ id: SETTINGS_SECTION_IDS.workflow, label: t('settings.workflow.title'), Icon: ListChecks },
{ id: SETTINGS_SECTION_IDS.privacy, label: t('settings.privacy.title'), Icon: ShieldCheck },
@@ -31,7 +38,7 @@ export function SettingsBodyNav({ t }: SettingsBodyNavProps) {
className="h-10 w-full justify-start gap-2.5 px-2.5 text-sm font-medium text-muted-foreground hover:text-foreground"
onClick={() => document.getElementById(item.id)?.scrollIntoView({ block: 'start', behavior: 'smooth' })}
>
<item.Icon size={16} className="shrink-0" />
<item.Icon size={16} weight="regular" className="shrink-0" />
<span className="truncate">{item.label}</span>
</Button>
))}

View File

@@ -35,13 +35,16 @@ export function SettingsSection({
}
export function SectionHeading({
icon,
title,
}: {
icon?: ReactNode
title: string
description?: string
}) {
return (
<div>
<div className="flex items-center gap-2">
{icon ? <span className="flex size-5 items-center justify-center text-muted-foreground">{icon}</span> : null}
<div
style={{
fontSize: 14,

View File

@@ -1,3 +1,4 @@
import { Copy, Cube, Monitor, Moon, Sun, X } from '@phosphor-icons/react'
import {
AI_AGENT_DEFINITIONS,
createMissingAiAgentsStatus,
@@ -14,16 +15,14 @@ import {
type AiModelProvider,
} from '../lib/aiTargets'
import {
useState,
useRef,
useCallback,
useEffect,
useRef,
useState,
type KeyboardEvent as ReactKeyboardEvent,
type MouseEvent as ReactMouseEvent,
type ReactNode,
} from 'react'
import { Moon, Sun, X } from '@phosphor-icons/react'
import { Copy, Monitor } from 'lucide-react'
import type { Settings } from '../types'
import {
APP_LOCALES,
@@ -638,7 +637,10 @@ function SettingsSyncAndAppearanceSections({
/>
</SettingsSection>
<SettingsSection id={SETTINGS_SECTION_IDS.workspaces}>
<SectionHeading title={t('settings.workspaces.title')} />
<SectionHeading
icon={<Cube size={16} aria-hidden="true" />}
title={t('settings.workspaces.title')}
/>
<WorkspaceSettingsSection
defaultWorkspacePath={defaultWorkspacePath}
enabled={multiWorkspaceEnabled}

View File

@@ -1,9 +1,7 @@
import { Component, useEffect, useCallback, useMemo, useRef, useContext, useState, type ReactNode } from 'react'
import { ArrowSquareOut as ExternalLink, Copy } from '@phosphor-icons/react'
import { Component, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'
import { invoke } from '@tauri-apps/api/core'
import { trackEvent } from '../lib/telemetry'
import {
useCreateBlockNote,
SuggestionMenuController,
BlockNoteViewRaw,
ComponentsContext,
DeleteLinkButton,
@@ -11,14 +9,15 @@ import {
LinkToolbar,
LinkToolbarController,
SideMenuController,
SuggestionMenuController,
useComponentsContext,
useCreateBlockNote,
useDictionary,
type LinkToolbarProps,
} from '@blocknote/react'
import { components } from '@blocknote/mantine'
import { MantineContext, MantineProvider } from '@mantine/core'
import { Copy } from '@phosphor-icons/react'
import { ExternalLink } from 'lucide-react'
import { trackEvent } from '../lib/telemetry'
import { useDocumentThemeMode } from '../hooks/useDocumentThemeMode'
import { repairMalformedEditorBlocks } from '../hooks/editorBlockRepair'
import { useEditorTheme } from '../hooks/useTheme'

View File

@@ -1,5 +1,5 @@
import type { CSSProperties } from 'react'
import { Download, ExternalLink, RefreshCw, X } from 'lucide-react'
import { ArrowSquareOut as ExternalLink, ArrowsClockwise as RefreshCw, Download, X } from '@phosphor-icons/react'
import type { UpdateStatus, UpdateActions } from '../hooks/useUpdater'
import { restartApp } from '../hooks/useUpdater'
import { Button } from './ui/button'

View File

@@ -1,3 +1,4 @@
import { Article } from '@phosphor-icons/react'
import type { TranslationKey, TranslationValues } from '../lib/i18n'
import type { NoteWidthMode } from '../types'
import type { AllNotesFileVisibility } from '../utils/allNotesFileVisibility'
@@ -76,6 +77,7 @@ export function VaultContentSettingsSection({
return (
<>
<SectionHeading
icon={<Article size={16} aria-hidden="true" />}
title={t('settings.vaultContent.title')}
/>

View File

@@ -1,6 +1,6 @@
import { CircleNotch as Loader2, FolderOpen, Plus, Rocket, Warning as AlertTriangle } from '@phosphor-icons/react'
import { useEffect, useMemo, useRef, useState } from 'react'
import type { ReactNode } from 'react'
import { FolderOpen, Plus, AlertTriangle, Loader2, Rocket } from 'lucide-react'
import { OnboardingShell } from './OnboardingShell'
import { Button } from '@/components/ui/button'
import tolariaIcon from '@/assets/tolaria-icon.svg'

View File

@@ -1,4 +1,4 @@
import { CaretUpDown, Check } from '@phosphor-icons/react'
import { CaretUpDown, Check, Cube } from '@phosphor-icons/react'
import { useEffect, useId, useMemo, useRef, useState, type KeyboardEvent, type PointerEvent } from 'react'
import type { WorkspaceIdentity } from '../types'
import { Button } from '@/components/ui/button'
@@ -9,6 +9,7 @@ import { translate, type AppLocale } from '../lib/i18n'
import { PROPERTY_CHIP_STYLE } from './propertyChipStyles'
import {
PROPERTY_PANEL_LABEL_CLASS_NAME,
PROPERTY_PANEL_LABEL_ICON_SLOT_CLASS_NAME,
PROPERTY_PANEL_ROW_STYLE,
} from './propertyPanelLayout'
@@ -95,6 +96,12 @@ function reportWorkspaceChangeFailure(error: unknown) {
function WorkspaceRowLabel({ locale }: { locale: AppLocale }) {
return (
<span className={PROPERTY_PANEL_LABEL_CLASS_NAME}>
<span
className={PROPERTY_PANEL_LABEL_ICON_SLOT_CLASS_NAME}
data-testid="workspace-row-icon-slot"
>
<Cube size={14} className="shrink-0" data-testid="workspace-row-icon" />
</span>
<span className="min-w-0 truncate">{translate(locale, 'inspector.properties.workspace')}</span>
</span>
)

View File

@@ -1,5 +1,4 @@
import { Info } from '@phosphor-icons/react'
import { Trash2 } from 'lucide-react'
import { Info, Trash as Trash2 } from '@phosphor-icons/react'
import { type KeyboardEvent, useState } from 'react'
import { Button } from './ui/button'
import { Input } from './ui/input'

View File

@@ -1,5 +1,4 @@
import { MagnifyingGlass, Plus, SidebarSimple } from '@phosphor-icons/react'
import { Loader2 } from 'lucide-react'
import { CircleNotch as Loader2, MagnifyingGlass, Plus, SidebarSimple } from '@phosphor-icons/react'
import type { VaultEntry } from '../../types'
import type { SortOption, SortDirection } from '../../utils/noteListHelpers'
import { translate, type AppLocale } from '../../lib/i18n'

View File

@@ -39,6 +39,32 @@ const entry: VaultEntry = {
sidebarLabel: null,
}
const personalWorkspace = {
id: 'personal',
label: 'Personal',
alias: 'personal',
path: '/personal',
shortLabel: 'PE',
color: 'green',
icon: null,
mounted: true,
available: true,
defaultForNewNotes: true,
}
const teamWorkspace = {
id: 'team',
label: 'Team',
alias: 'team',
path: '/team',
shortLabel: 'TE',
color: 'purple',
icon: null,
mounted: true,
available: true,
defaultForNewNotes: false,
}
function renderPropertiesPanel(props: ComponentProps<typeof DynamicPropertiesPanel>) {
return render(
<TooltipProvider>
@@ -86,14 +112,17 @@ describe('property panel shared grid layout', () => {
expect(row.style.gridColumn).toBe('1 / -1')
})
it('uses the same fixed icon slot size for type, suggested, and add-property rows', () => {
it('uses the same fixed icon slot size for metadata, suggested, and add-property rows', () => {
renderPropertiesPanel({
entry,
entry: { ...entry, workspace: personalWorkspace },
frontmatter: {},
onAddProperty: vi.fn(),
onUpdateProperty: vi.fn(),
onChangeWorkspace: vi.fn(),
workspaces: [personalWorkspace, teamWorkspace],
})
expect(screen.getByTestId('workspace-row-icon-slot')).toHaveClass('size-5')
expect(screen.getByTestId('type-row-icon-slot')).toHaveClass('size-5')
screen.getAllByTestId('suggested-property-icon-slot').forEach((slot) => {
expect(slot).toHaveClass('size-5')

View File

@@ -1,6 +1,5 @@
import type { MouseEvent, ReactNode } from 'react'
import { Folder, Funnel, Plus } from '@phosphor-icons/react'
import { SlidersHorizontal } from 'lucide-react'
import { Folder, Funnel, Plus, SlidersHorizontal } from '@phosphor-icons/react'
import { Button } from '@/components/ui/button'
import { translate, type AppLocale } from '../../lib/i18n'
import { SidebarGroupHeader } from './SidebarGroupHeader'

View File

@@ -11,9 +11,8 @@ import {
SortableContext, useSortable, verticalListSortingStrategy,
} from '@dnd-kit/sortable'
import { CSS } from '@dnd-kit/utilities'
import { SlidersHorizontal } from 'lucide-react'
import {
ArrowLeft, ArrowRight, Palette, PencilSimple, Plus, SidebarSimple, Trash,
ArrowLeft, ArrowRight, Palette, PencilSimple, Plus, SidebarSimple, SlidersHorizontal, Trash,
} from '@phosphor-icons/react'
import { APP_COMMAND_IDS, getAppCommandShortcutDisplay } from '../../hooks/appCommandCatalog'
import { Button } from '@/components/ui/button'

View File

@@ -1,5 +1,4 @@
import { AlertTriangle, ChevronsUpDown } from 'lucide-react'
import { Sparkle } from '@phosphor-icons/react'
import { CaretUpDown as ChevronsUpDown, Sparkle, Warning as AlertTriangle } from '@phosphor-icons/react'
import { Button } from '@/components/ui/button'
import {
AI_AGENT_DEFINITIONS,
@@ -327,7 +326,7 @@ export function AiAgentsBadge({
data-testid="status-ai-agents"
>
<span style={{ ...ICON_STYLE, color: showWarning ? 'var(--accent-orange)' : 'var(--muted-foreground)' }}>
<Sparkle size={13} weight="fill" />
<Sparkle size={13} weight="regular" />
{!compact && (selectedTarget.kind === 'api_model' ? selectedTarget.shortLabel : triggerLabel(defaultAgent))}
<TriggerStateIcon showWarning={showWarning} showSwitcherCue={showSwitcherCue} />
</span>

View File

@@ -1,15 +1,5 @@
import { ArrowDown, ArrowsClockwise as RefreshCw, CircleNotch as Loader2, Cpu, GitBranch, GitCommit as GitCommitHorizontal, GitDiff, Pulse, Terminal, Warning as AlertTriangle } from '@phosphor-icons/react'
import { useRef, useState, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent, type ReactNode } from 'react'
import {
AlertTriangle,
ArrowDown,
Cpu,
GitBranch,
GitCommitHorizontal,
Loader2,
RefreshCw,
Terminal,
} from 'lucide-react'
import { GitDiff, Pulse } from '@phosphor-icons/react'
import { ActionTooltip, type ActionTooltipCopy } from '@/components/ui/action-tooltip'
import { Button } from '@/components/ui/button'
import { cn } from '@/lib/utils'

View File

@@ -1,5 +1,4 @@
import { BookOpen, Moon, Package, Settings, Sun } from 'lucide-react'
import { Megaphone } from '@phosphor-icons/react'
import { BookOpen, GearSix as Settings, Megaphone, Moon, Package, Sun, type IconProps } from '@phosphor-icons/react'
import type { ComponentType, MouseEventHandler } from 'react'
import type { AiAgentId, AiAgentsStatus } from '../../lib/aiAgents'
import type { AiModelProvider } from '../../lib/aiTargets'
@@ -132,7 +131,7 @@ function BuildNumberButton({
data-testid="status-build-number"
>
<span style={ICON_STYLE}>
<Package size={13} />
<Package size={13} weight="regular" />
{compact ? null : buildNumber ?? translate(locale, 'status.build.unknown')}
</span>
</Button>
@@ -301,7 +300,7 @@ function StatusBarPrimaryBadges({
type StatusLinkButtonProps = {
compact: boolean
icon: ComponentType<{ size?: number }>
icon: ComponentType<IconProps>
labelKey: TranslationKey
locale: AppLocale
onClick: MouseEventHandler<HTMLButtonElement>
@@ -333,7 +332,7 @@ function StatusLinkButton({
aria-label={translate(locale, tooltipKey)}
data-testid={testId}
>
<Icon size={14} />
<Icon size={14} weight="regular" />
{compact ? null : translate(locale, labelKey)}
</Button>
</ActionTooltip>
@@ -584,7 +583,7 @@ export function StatusBarSecondarySection({
aria-label={themeTooltip.label}
data-testid="status-theme-mode"
>
<ThemeIcon size={14} />
<ThemeIcon size={14} weight="regular" />
</Button>
</ActionTooltip>
<ActionTooltip copy={{ label: translate(locale, 'status.settings.open'), ...SETTINGS_SHORTCUT }} side="top" align="end">
@@ -597,7 +596,7 @@ export function StatusBarSecondarySection({
aria-label={translate(locale, 'status.settings.open')}
data-testid="status-settings"
>
<Settings size={14} />
<Settings size={14} weight="regular" />
</Button>
</ActionTooltip>
</div>

View File

@@ -1,6 +1,6 @@
import { Check, Cube, FolderOpen, GitBranch, Plus, Rocket, Warning as AlertTriangle, X } from '@phosphor-icons/react'
import { useMemo, useRef, useState } from 'react'
import type { ReactNode } from 'react'
import { AlertTriangle, Check, FolderOpen, GitBranch, Plus, Rocket, X } from 'lucide-react'
import { ActionTooltip } from '@/components/ui/action-tooltip'
import { Button } from '@/components/ui/button'
import { Checkbox } from '@/components/ui/checkbox'
@@ -416,7 +416,7 @@ export function VaultMenu(props: VaultMenuProps) {
aria-label={translate(locale, 'status.vault.switch')}
data-testid="status-vault-trigger"
>
<FolderOpen size={13} />
<Cube size={13} weight="regular" />
{compact ? null : <span className="max-w-32 truncate">{activeVaultLabel}</span>}
</Button>
</ActionTooltip>

View File

@@ -1,3 +1,4 @@
import { DotsSixVertical as GripVertical, Plus } from '@phosphor-icons/react'
import { SideMenuExtension, SuggestionMenu } from '@blocknote/core/extensions'
import type {
BlockNoteEditor,
@@ -15,7 +16,6 @@ import {
useExtensionState,
type SideMenuProps,
} from '@blocknote/react'
import { GripVertical, Plus } from 'lucide-react'
import {
useCallback,
useLayoutEffect,

View File

@@ -100,13 +100,13 @@ vi.mock('@mantine/core', () => ({
),
}))
vi.mock('lucide-react', () => ({
Bold: MockIcon,
ChevronDown: MockIcon,
Code2: MockIcon,
ExternalLink: MockIcon,
Italic: MockIcon,
Strikethrough: MockIcon,
vi.mock('@phosphor-icons/react', () => ({
ArrowSquareOut: MockIcon,
CaretDown: MockIcon,
Code: MockIcon,
TextB: MockIcon,
TextItalic: MockIcon,
TextStrikethrough: MockIcon,
}))
vi.mock('./tolariaEditorFormattingConfig', () => ({

View File

@@ -45,14 +45,14 @@ import {
Menu as MantineMenu,
} from '@mantine/core'
import {
Bold,
ChevronDown,
Code2,
ExternalLink,
Italic,
Strikethrough,
type LucideIcon,
} from 'lucide-react'
ArrowSquareOut as ExternalLink,
CaretDown as ChevronDown,
Code as Code2,
TextB as Bold,
TextItalic as Italic,
TextStrikethrough as Strikethrough,
type Icon as PhosphorIcon,
} from '@phosphor-icons/react'
import {
filterTolariaFormattingToolbarItems,
getTolariaBlockTypeSelectItems,
@@ -186,7 +186,7 @@ const TOLARIA_BASIC_TEXT_STYLE_ICONS = {
italic: Italic,
strike: Strikethrough,
code: Code2,
} satisfies Record<TolariaBasicTextStyle, LucideIcon>
} satisfies Record<TolariaBasicTextStyle, PhosphorIcon>
type TolariaSelectedBlock = ReturnType<
BlockNoteEditor<BlockSchema, InlineContentSchema, StyleSchema>['getTextCursorPosition']
@@ -417,7 +417,7 @@ function TolariaBasicTextStyleButton({
if (buttonState === undefined) return null
const Icon = Reflect.get(TOLARIA_BASIC_TEXT_STYLE_ICONS, basicTextStyle) as LucideIcon
const Icon = Reflect.get(TOLARIA_BASIC_TEXT_STYLE_ICONS, basicTextStyle) as PhosphorIcon
const copy = Reflect.get(TOLARIA_BASIC_TEXT_STYLE_TOOLTIPS, basicTextStyle) as {
label: string
mainTooltip: string

View File

@@ -2,10 +2,10 @@
import * as React from "react"
import {
ChevronDownIcon,
ChevronLeftIcon,
ChevronRightIcon,
} from "lucide-react"
CaretDown as ChevronDownIcon,
CaretLeft as ChevronLeftIcon,
CaretRight as ChevronRightIcon,
} from '@phosphor-icons/react'
import {
DayPicker,
getDefaultClassNames,

View File

@@ -1,5 +1,5 @@
import * as React from 'react'
import { Check } from 'lucide-react'
import { Check } from '@phosphor-icons/react'
import { cn } from '@/lib/utils'

View File

@@ -1,5 +1,5 @@
import * as React from "react"
import { XIcon } from "lucide-react"
import { X as XIcon } from '@phosphor-icons/react'
import { Dialog as DialogPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"

View File

@@ -1,7 +1,7 @@
"use client"
import * as React from "react"
import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"
import { CaretRight as ChevronRightIcon, Check as CheckIcon, Circle as CircleIcon } from '@phosphor-icons/react'
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"

View File

@@ -1,5 +1,5 @@
import * as React from "react"
import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react"
import { CaretDown as ChevronDownIcon, CaretUp as ChevronUpIcon, Check as CheckIcon } from '@phosphor-icons/react'
import { Select as SelectPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Legen Sie fest, ob Tolaria Dateinamen von unbenannten Notizen automatisch anhand der ersten H1-Überschrift synchronisiert.",
"settings.titles.autoRename": "Unbenannte Notizen automatisch anhand der ersten H1-Uberschrift umbenennen",
"settings.titles.autoRenameDescription": "Wenn diese Option aktiviert ist, benennt Tolaria Dateien mit unbenannten Notizen um, sobald die erste H1-Überschrift zu einem echten Titel wird. Deaktivieren Sie diese Option, um den Dateinamen unverändert zu lassen, bis Sie ihn manuell über die Breadcrumb-Leiste umbenennen.",
"settings.vaultContent.title": "Vault-Inhalt",
"settings.vaultContent.title": "Inhalt",
"settings.vaultContent.description": "Legen Sie fest, ob Dateien, die der .gitignore-Datei des Vaults entsprechen, in Tolaria angezeigt werden.",
"settings.dateDisplay.default": "Datumsanzeige",
"settings.dateDisplay.defaultDescription": "Wählen Sie aus, wie Tolaria Datumsangaben außerhalb von editierbaren Datumsfeldern anzeigt.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Choose whether Tolaria automatically syncs untitled note filenames from the first H1 title.",
"settings.titles.autoRename": "Auto-rename untitled notes from first H1",
"settings.titles.autoRenameDescription": "When enabled, Tolaria renames untitled-note files as soon as the first H1 becomes a real title. Turn this off to keep the filename unchanged until you rename it manually from the breadcrumb bar.",
"settings.vaultContent.title": "Vault Content",
"settings.vaultContent.title": "Content",
"settings.vaultContent.description": "Control whether files matched by the vault .gitignore appear in Tolaria.",
"settings.dateDisplay.default": "Date display",
"settings.dateDisplay.defaultDescription": "Choose how Tolaria displays dates outside editable date fields.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Elija si desea que Tolaria sincronice automáticamente los nombres de los archivos de notas sin título a partir del primer título H1.",
"settings.titles.autoRename": "Cambiar automáticamente el nombre de las notas sin título a partir del primer H1",
"settings.titles.autoRenameDescription": "Cuando esta opción está activada, Tolaria cambia el nombre de los archivos de notas sin título tan pronto como el primer H1 se convierte en un título real. Desactive esta opción para que el nombre del archivo no se modifique hasta que lo cambie manualmente desde la barra de navegación.",
"settings.vaultContent.title": "Contenido del repositorio",
"settings.vaultContent.title": "Contenido",
"settings.vaultContent.description": "Controle si los archivos que coinciden con el archivo .gitignore del repositorio aparecen en Tolaria.",
"settings.dateDisplay.default": "Formato de fecha",
"settings.dateDisplay.defaultDescription": "Elija cómo Tolaria muestra las fechas fuera de los campos de fecha editables.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Decida si Tolaria sincroniza automáticamente los nombres de los archivos de las notas sin título a partir del primer título H1.",
"settings.titles.autoRename": "Cambiar automático del nombre de las notas sin título a partir del primer H1",
"settings.titles.autoRenameDescription": "Cuando esta opción está activada, Tolaria cambia el nombre de los archivos de notas sin título en cuanto el primer H1 se convierte en un título real. Desactive esta opción para que el nombre del archivo no cambie hasta que lo renombre manualmente desde la barra de navegación.",
"settings.vaultContent.title": "Contenido del repositorio",
"settings.vaultContent.title": "Contenido",
"settings.vaultContent.description": "Controla si los archivos que coinciden con el .gitignore del repositorio aparecen en Tolaria.",
"settings.dateDisplay.default": "Formato de fecha",
"settings.dateDisplay.defaultDescription": "Elija cómo muestra Tolaria las fechas fuera de los campos de fecha editables.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Indiquez si Tolaria doit synchroniser automatiquement les noms de fichier des notes sans titre à partir du premier titre H1.",
"settings.titles.autoRename": "Renommer automatiquement les notes sans titre à partir du premier H1",
"settings.titles.autoRenameDescription": "Lorsque cette option est activée, Tolaria renomme les fichiers de notes sans titre dès que le premier H1 devient un véritable titre. Désactivez cette option pour que le nom de fichier reste inchangé jusqu'à ce que vous le renommiez manuellement depuis la barre de navigation.",
"settings.vaultContent.title": "Contenu du coffre-fort",
"settings.vaultContent.title": "Contenu",
"settings.vaultContent.description": "Contrôler si les fichiers correspondants au fichier .gitignore du coffre-fort apparaissent dans Tolaria.",
"settings.dateDisplay.default": "Affichage de la date",
"settings.dateDisplay.defaultDescription": "Choisissez la manière dont Tolaria affiche les dates en dehors des champs de date modifiables.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Scegli se desideri che Tolaria sincronizzi automaticamente i nomi dei file delle note senza titolo in base al primo titolo H1.",
"settings.titles.autoRename": "Rinomina automaticamente le note senza titolo in base al primo titolo H1",
"settings.titles.autoRenameDescription": "Se questa opzione è abilitata, Tolaria rinomina i file delle note senza titolo non appena il primo H1 diventa un titolo effettivo. Disattiva questa opzione per mantenere invariato il nome del file finché non lo rinomini manualmente dalla barra di navigazione.",
"settings.vaultContent.title": "Contenuto del vault",
"settings.vaultContent.title": "Contenuto",
"settings.vaultContent.description": "Controlla se i file corrispondenti al file .gitignore del vault vengono visualizzati in Tolaria.",
"settings.dateDisplay.default": "Visualizzazione della data",
"settings.dateDisplay.defaultDescription": "Scegli come Tolaria visualizza le date al di fuori dei campi data modificabili.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Tolaria が、タイトルのないノートのファイル名を最初の H1 タイトルに基づいて自動的に同期するかどうかを選択します。",
"settings.titles.autoRename": "タイトルのないートのファイル名を最初のH1から自動的に変更する",
"settings.titles.autoRenameDescription": "この設定を有効にすると、Tolariaは最初のH1が実際のタイトルになった時点で、タイトルのないートファイルの名前を変更します。この設定をオフにすると、ブレッドクラムバーから手動で名前を変更するまで、ファイル名は変更されません。",
"settings.vaultContent.title": "Vaultのコンテンツ",
"settings.vaultContent.title": "コンテンツ",
"settings.vaultContent.description": "Vaultの.gitignoreで一致したファイルをTolariaに表示するかどうかを制御します。",
"settings.dateDisplay.default": "日付の表示",
"settings.dateDisplay.defaultDescription": "編集可能な日付フィールド以外の場所で、Tolariaが日付を表示する方法を選択します。",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Tolaria가 제목 없는 노트의 파일 이름을 첫 번째 H1 제목에서 자동으로 동기화할지 여부를 선택하세요.",
"settings.titles.autoRename": "첫 번째 H1 제목으로 제목 없는 노트 파일 이름 자동 변경",
"settings.titles.autoRenameDescription": "이 옵션을 활성화하면 Tolaria는 첫 번째 H1이 실제 제목이 되는 즉시 제목 없는 노트 파일의 이름을 변경합니다. 이 옵션을 끄면 브레드크럼 바에서 수동으로 파일 이름을 변경할 때까지 파일 이름이 변경되지 않습니다.",
"settings.vaultContent.title": "Vault 콘텐츠",
"settings.vaultContent.title": "콘텐츠",
"settings.vaultContent.description": "Vault .gitignore와 일치하는 파일이 Tolaria에 표시되는지 여부를 제어합니다.",
"settings.dateDisplay.default": "날짜 표시",
"settings.dateDisplay.defaultDescription": "편집 가능한 날짜 입력란 외부의 날짜를 Tolaria에서 표시하는 방식을 선택하세요.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Wybierz, czy Tolaria automatycznie synchronizuje nazwy plików notatek bez tytułu z pierwszego nagłówka H1.",
"settings.titles.autoRename": "Automatycznie zmieniaj nazwy notatek bez tytułu z pierwszego H1",
"settings.titles.autoRenameDescription": "Po włączeniu Tolaria zmienia nazwy plików notatek bez tytułu, gdy tylko pierwszy H1 stanie się prawdziwym tytułem. Wyłącz, aby zachować nazwę pliku bez zmian do ręcznej zmiany z paska ścieżki.",
"settings.vaultContent.title": "Zawartość sejfu",
"settings.vaultContent.title": "Treść",
"settings.vaultContent.description": "Kontroluj, czy pliki pasujące do .gitignore sejfu pojawiają się w Tolaria.",
"settings.dateDisplay.default": "Wyświetlanie daty",
"settings.dateDisplay.defaultDescription": "Wybierz, w jaki sposób Tolaria ma wyświetlać daty poza edytowalnymi polami daty.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Escolha se o Tolaria deve sincronizar automaticamente os nomes de arquivo das notas sem título com base no primeiro título H1.",
"settings.titles.autoRename": "Renomear automaticamente notas sem título com base no primeiro H1",
"settings.titles.autoRenameDescription": "Quando ativada, a Tolaria renomeia os arquivos de anotações sem título assim que o primeiro H1 se torna um título de fato. Desative esta opção para manter o nome do arquivo inalterado até que você o renomeie manualmente na barra de navegação.",
"settings.vaultContent.title": "Conteúdo do cofre",
"settings.vaultContent.title": "Conteúdo",
"settings.vaultContent.description": "Controle se os arquivos correspondentes ao .gitignore do cofre aparecem no Tolaria.",
"settings.dateDisplay.default": "Exibição de data",
"settings.dateDisplay.defaultDescription": "Escolha como o Tolaria exibe datas fora dos campos de data editáveis.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Escolha se a Tolaria deve sincronizar automaticamente os nomes de ficheiro das notas sem título com base no primeiro título H1.",
"settings.titles.autoRename": "Renomear automaticamente notas sem título com base no primeiro H1",
"settings.titles.autoRenameDescription": "Quando esta opção está ativada, a Tolaria muda o nome dos ficheiros de notas sem título assim que o primeiro H1 se torna um título verdadeiro. Desative esta opção para manter o nome do ficheiro inalterado até o renomear manualmente na barra de navegação.",
"settings.vaultContent.title": "Conteúdo do cofre",
"settings.vaultContent.title": "Conteúdo",
"settings.vaultContent.description": "Controlar se os ficheiros correspondentes ao .gitignore do cofre aparecem na Tolaria.",
"settings.dateDisplay.default": "Apresentação da data",
"settings.dateDisplay.defaultDescription": "Escolha como a Tolaria apresenta as datas fora dos campos de data editáveis.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Выберите, должна ли Tolaria автоматически синхронизировать имена файлов заметок без названия на основе первого заголовка H1.",
"settings.titles.autoRename": "Автоматически переименовывать заметки без названия по первому заголовку H1",
"settings.titles.autoRenameDescription": "Если эта функция включена, Tolaria переименовывает файлы заметок без названия, как только первый заголовок H1 становится настоящим заголовком. Отключите эту опцию, чтобы имя файла оставалось неизменным, пока вы не переименуете его вручную в строке навигации.",
"settings.vaultContent.title": "Содержимое хранилища",
"settings.vaultContent.title": "Содержание",
"settings.vaultContent.description": "Управляйте тем, будут ли отображаться в Tolaria файлы, соответствующие списку .gitignore хранилища.",
"settings.dateDisplay.default": "Отображение даты",
"settings.dateDisplay.defaultDescription": "Выберите, как Tolaria будет отображать даты за пределами редактируемых полей даты.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "Chọn xem Tolaria có tự động đồng bộ tên tệp của ghi chú chưa đặt tên từ tiêu đề H1 đầu tiên hay không.",
"settings.titles.autoRename": "Tự đổi tên ghi chú chưa đặt tên từ H1 đầu tiên",
"settings.titles.autoRenameDescription": "Khi bật, Tolaria sẽ đổi tên tệp ghi chú chưa đặt tên ngay khi H1 đầu tiên trở thành tiêu đề thật. Tắt tùy chọn này nếu bạn muốn giữ nguyên tên tệp cho đến khi tự đổi thủ công từ thanh breadcrumb.",
"settings.vaultContent.title": "Nội dung kho",
"settings.vaultContent.title": "Nội dung",
"settings.vaultContent.description": "Kiểm soát việc các tệp khớp với .gitignore của kho có xuất hiện trong Tolaria hay không.",
"settings.dateDisplay.default": "Hiển thị ngày",
"settings.dateDisplay.defaultDescription": "Chọn cách Tolaria hiển thị ngày tháng bên ngoài các trường ngày tháng có thể chỉnh sửa.",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "选择 Tolaria 是否根据第一个 H1 标题自动同步未命名笔记的文件名。",
"settings.titles.autoRename": "根据第一个 H1 自动重命名未命名笔记",
"settings.titles.autoRenameDescription": "启用后,只要第一个 H1 成为真实标题Tolaria 就会重命名 untitled-note 文件。关闭后,文件名会保持不变,直到你从面包屑栏手动重命名。",
"settings.vaultContent.title": "保管库内容",
"settings.vaultContent.title": "内容",
"settings.vaultContent.description": "控制与 Vault .gitignore 文件匹配的文件是否显示在 Tolaria 中。",
"settings.dateDisplay.default": "日期显示方式",
"settings.dateDisplay.defaultDescription": "选择 Tolaria 在可编辑日期字段之外显示日期的方式。",

View File

@@ -150,7 +150,7 @@
"settings.titles.description": "選擇 Tolaria 是否根據第一個 H1 標題自動同步未命名筆記的檔名。",
"settings.titles.autoRename": "根據第一個 H1 自動重新命名未命名筆記",
"settings.titles.autoRenameDescription": "啟用後,只要第一個 H1 成為真實標題Tolaria 就會重新命名 untitled-note 檔案。關閉後,檔名會保持不變,直到你從麵包屑欄手動重新命名。",
"settings.vaultContent.title": "保管庫內容",
"settings.vaultContent.title": "內容",
"settings.vaultContent.description": "控制與 Vault .gitignore 相符的檔案是否顯示在 Tolaria 中。",
"settings.dateDisplay.default": "日期顯示方式",
"settings.dateDisplay.defaultDescription": "選擇 Tolaria 在可編輯日期欄位外顯示日期的方式。",

View File

@@ -1,10 +1,10 @@
import type { FrontmatterValue } from '../components/Inspector'
import { CalendarBlank as CalendarIcon, Circle, Hash, Link, Palette, Tag, TextT as Type, ToggleLeft } from '@phosphor-icons/react'
import { getAppStorageItem } from '../constants/appStorage'
import { isValidCssColor, isColorKeyName } from './colorUtils'
import { dateFromParts, parseDashDateParts, parseSlashDateParts, type DateParts } from './dateStringParts'
import { DEFAULT_DATE_DISPLAY_FORMAT, formatDateValueForDisplay, type DateDisplayFormat } from './dateDisplay'
import { updateVaultConfigField } from './vaultConfigStore'
import { CalendarIcon, Type, ToggleLeft, Circle, Link, Tag, Palette, Hash } from 'lucide-react'
import { canonicalSystemMetadataKey } from './systemMetadata'
export type PropertyDisplayMode = 'text' | 'number' | 'date' | 'boolean' | 'status' | 'url' | 'tags' | 'color'