@@ -139,19 +136,17 @@ export const Tooltip = ({
data-slot="tooltip-content"
side={side}
align={align}
- sideOffset={4}
+ sideOffset={0}
className={cn(contentStyles, classNames?.content, className)}>
{tooltipContent}
- {showArrow &&
}
+ {showArrow &&
}
-
+
)
}
-// --- NormalTooltip (convenience wrapper using compound components) ---
-
interface NormalTooltipProps extends TooltipRootProps {
content: React.ReactNode
side?: TooltipContentProps['side']
diff --git a/packages/ui/src/styles/theme.css b/packages/ui/src/styles/theme.css
index 084c15777b..464858d0bb 100644
--- a/packages/ui/src/styles/theme.css
+++ b/packages/ui/src/styles/theme.css
@@ -272,13 +272,13 @@
/* Runtime Theme Inputs */
/* ==================== */
--cs-theme-primary: var(--cs-primary);
- --cs-user-font-family: initial;
- --cs-user-code-font-family: initial;
+ --cs-theme-ring: color-mix(in srgb, var(--cs-theme-primary) 40%, transparent);
/* ==================== */
/* Compatibility Aliases */
/* ==================== */
--primary: var(--color-primary);
+ --ring: var(--color-ring);
/* ==================== */
/* Semantic Colors */
@@ -287,6 +287,7 @@
--color-primary-hover: var(--cs-primary-hover);
--color-primary-soft: color-mix(in srgb, var(--color-primary) 60%, transparent);
--color-primary-mute: color-mix(in srgb, var(--color-primary) 30%, transparent);
+ --color-ring: var(--cs-theme-ring);
--color-destructive: var(--cs-destructive);
--color-destructive-hover: var(--cs-destructive-hover);
--color-success: var(--cs-success);
@@ -301,7 +302,6 @@
--color-border: var(--cs-border);
--color-border-hover: var(--cs-border-hover);
--color-border-active: var(--cs-border-active);
- --color-ring: var(--cs-ring);
--color-secondary: var(--cs-secondary);
--color-secondary-hover: var(--cs-secondary-hover);
--color-secondary-active: var(--cs-secondary-active);
diff --git a/packages/ui/src/styles/tokens/colors/semantic.css b/packages/ui/src/styles/tokens/colors/semantic.css
index ff04ae0f85..26c1510064 100644
--- a/packages/ui/src/styles/tokens/colors/semantic.css
+++ b/packages/ui/src/styles/tokens/colors/semantic.css
@@ -13,7 +13,7 @@
--cs-warning: var(--cs-amber-500);
/* Background & Foreground */
- --cs-background: var(--cs-zinc-50);
+ --cs-background: var(--cs-white);
--cs-background-subtle: oklch(0 0 0 / 0.02);
--cs-foreground: oklch(0 0 0 / 0.9);
--cs-foreground-secondary: oklch(0 0 0 / 0.6);
@@ -48,7 +48,7 @@
/* Dark Mode */
.dark {
/* Background & Foreground */
- --cs-background: var(--cs-zinc-900);
+ --cs-background: oklch(0.191 0 0 / 0.55);
--cs-background-subtle: oklch(1 0 0 / 0.02);
--cs-foreground: oklch(1 0 0 / 0.9);
--cs-foreground-secondary: oklch(1 0 0 / 0.6);
diff --git a/packages/ui/src/styles/tokens/radius.css b/packages/ui/src/styles/tokens/radius.css
index 4683f7b667..70640065df 100644
--- a/packages/ui/src/styles/tokens/radius.css
+++ b/packages/ui/src/styles/tokens/radius.css
@@ -4,15 +4,15 @@
*/
:root {
- --cs-radius-4xs: 0.25rem; /* 4px */
- --cs-radius-3xs: 0.5rem; /* 8px */
- --cs-radius-2xs: 0.75rem; /* 12px */
- --cs-radius-xs: 1rem; /* 16px */
- --cs-radius-sm: 1.5rem; /* 24px */
- --cs-radius-md: 2rem; /* 32px */
- --cs-radius-lg: 2.5rem; /* 40px */
- --cs-radius-xl: 3rem; /* 48px */
- --cs-radius-2xl: 3.5rem; /* 56px */
- --cs-radius-3xl: 4rem; /* 64px */
- --cs-radius-round: 999px; /* 完全圆角,保持 px */
+ --cs-radius-4xs: 0.03125rem; /* 0.5px */
+ --cs-radius-3xs: 0.0625rem; /* 1px */
+ --cs-radius-2xs: 0.09375rem; /* 1.5px */
+ --cs-radius-xs: 0.125rem; /* 2px */
+ --cs-radius-sm: 0.375rem; /* 6px */
+ --cs-radius-md: 0.5rem; /* 8px */
+ --cs-radius-lg: 0.625rem; /* 10px */
+ --cs-radius-xl: 0.875rem; /* 14px */
+ --cs-radius-2xl: 1.125rem; /* 18px */
+ --cs-radius-3xl: 1.375rem; /* 22px */
+ --cs-radius-round: 9999px; /* fully rounded, keep px */
}
diff --git a/packages/ui/stories/components/composites/DataTable.stories.tsx b/packages/ui/stories/components/composites/DataTable.stories.tsx
new file mode 100644
index 0000000000..c18a8c1d1b
--- /dev/null
+++ b/packages/ui/stories/components/composites/DataTable.stories.tsx
@@ -0,0 +1,198 @@
+import type { ColumnDef } from '@cherrystudio/ui'
+import { Badge, Button, DataTable, Input } from '@cherrystudio/ui'
+import type { Meta, StoryObj } from '@storybook/react'
+import { Pencil, Trash2 } from 'lucide-react'
+import type { Key } from 'react'
+import { useMemo, useState } from 'react'
+
+type Task = {
+ id: string
+ name: string
+ status: 'active' | 'paused' | 'completed'
+ owner: string
+ locked?: boolean
+}
+
+const tasks: Task[] = [
+ { id: '1', name: 'Refresh index', status: 'active', owner: 'Ada' },
+ { id: '2', name: 'Sync providers', status: 'paused', owner: 'Grace' },
+ { id: '3', name: 'Archive logs', status: 'completed', owner: 'Linus', locked: true }
+]
+
+const columns: ColumnDef
[] = [
+ {
+ accessorKey: 'name',
+ header: 'Name',
+ meta: { width: 220 }
+ },
+ {
+ accessorKey: 'status',
+ header: 'Status',
+ meta: { width: 120 },
+ cell: ({ row }) => {row.original.status}
+ },
+ {
+ accessorKey: 'owner',
+ header: 'Owner'
+ }
+]
+
+const columnsWithActions: ColumnDef[] = [
+ ...columns,
+ {
+ id: 'actions',
+ header: 'Actions',
+ meta: { width: 96, maxWidth: 96, align: 'center' },
+ cell: ({ row }) => (
+
+ )
+ }
+]
+
+const meta: Meta> = {
+ title: 'Components/Composites/DataTable',
+ component: DataTable,
+ parameters: {
+ layout: 'centered',
+ docs: {
+ description: {
+ component:
+ 'A shadcn/TanStack-powered data table with Cherry Studio styling, optional max width, selection, header slots, empty state, scrolling, and controlled expanded rows.'
+ }
+ }
+ },
+ tags: ['autodocs']
+}
+
+export default meta
+type Story = StoryObj
+
+export const Default: Story = {
+ render: () =>
+}
+
+export const WithActions: Story = {
+ render: () =>
+}
+
+export const WithMaxWidth: Story = {
+ render: () => (
+
+
+
+ )
+}
+
+export const WithToolbar: Story = {
+ render: function WithToolbarExample() {
+ const [query, setQuery] = useState('')
+ const filtered = useMemo(
+ () => tasks.filter((task) => task.name.toLowerCase().includes(query.toLowerCase())),
+ [query]
+ )
+
+ return (
+ {filtered.length} tasks}
+ headerRight={
+ setQuery(e.target.value)} />
+ }
+ />
+ )
+ }
+}
+
+export const MultipleSelection: Story = {
+ render: function MultipleSelectionExample() {
+ const [selectedRowKeys, setSelectedRowKeys] = useState(['1'])
+
+ return (
+ ({ disabled: task.locked })
+ }}
+ headerLeft={{selectedRowKeys.length} selected}
+ />
+ )
+ }
+}
+
+export const SingleSelection: Story = {
+ render: function SingleSelectionExample() {
+ const [selectedRowKey, setSelectedRowKey] = useState(null)
+
+ return (
+
+ )
+ }
+}
+
+export const Empty: Story = {
+ render: () =>
+}
+
+export const ScrollAndExpand: Story = {
+ render: function ScrollAndExpandExample() {
+ const [expandedRowKeys, setExpandedRowKeys] = useState(['1'])
+
+ return (
+ ({ ...task, id: `${task.id}-copy`, name: `${task.name} copy` }))]}
+ columns={columns}
+ rowKey="id"
+ maxHeight={240}
+ expandedRowKeys={expandedRowKeys}
+ onExpandedRowChange={setExpandedRowKeys}
+ renderExpandedRow={(task) => (
+
+
+ {task.name} is owned by {task.owner}.
+
+
+
+ )}
+ />
+ )
+ }
+}
diff --git a/packages/ui/stories/components/composites/DateTimePicker.stories.tsx b/packages/ui/stories/components/composites/DateTimePicker.stories.tsx
new file mode 100644
index 0000000000..0d2bf3599b
--- /dev/null
+++ b/packages/ui/stories/components/composites/DateTimePicker.stories.tsx
@@ -0,0 +1,114 @@
+import type { DateTimeGranularity } from '@cherrystudio/ui'
+import { DateTimePicker } from '@cherrystudio/ui'
+import type { Meta, StoryObj } from '@storybook/react'
+import { useState } from 'react'
+
+const meta: Meta = {
+ title: 'Components/Composites/DateTimePicker',
+ component: DateTimePicker,
+ parameters: {
+ layout: 'centered',
+ docs: {
+ description: {
+ component:
+ 'A shadcn-style date and time picker built from Popover, DayPicker dropdown navigation, Select, and compact time inputs. Supports configurable time granularity and date-fns format strings.'
+ }
+ }
+ },
+ tags: ['autodocs'],
+ argTypes: {
+ granularity: {
+ control: 'select',
+ options: ['day', 'hour', 'minute', 'second'] satisfies DateTimeGranularity[]
+ },
+ format: {
+ control: 'text'
+ },
+ disabled: {
+ control: 'boolean'
+ }
+ }
+}
+
+export default meta
+type Story = StoryObj
+
+export const DateOnly: Story = {
+ render: function DateOnlyExample() {
+ const [value, setValue] = useState(new Date(2026, 3, 29))
+
+ return (
+
+ )
+ }
+}
+
+export const WithMinutes: Story = {
+ render: function WithMinutesExample() {
+ const [value, setValue] = useState(new Date(2026, 3, 29, 14, 30))
+
+ return (
+
+ )
+ }
+}
+
+export const WithSeconds: Story = {
+ render: function WithSecondsExample() {
+ const [value, setValue] = useState(new Date(2026, 3, 29, 14, 30, 45))
+
+ return (
+
+ )
+ }
+}
+
+export const CustomYearRange: Story = {
+ render: function CustomYearRangeExample() {
+ const [value, setValue] = useState(new Date(2026, 3, 29, 9, 0))
+
+ return (
+
+ )
+ }
+}
+
+export const Disabled: Story = {
+ render: function DisabledExample() {
+ return (
+
+ )
+ }
+}
diff --git a/packages/ui/stories/components/composites/EntitySelector.stories.tsx b/packages/ui/stories/components/composites/EntitySelector.stories.tsx
index 40e57e2344..02e808941e 100644
--- a/packages/ui/stories/components/composites/EntitySelector.stories.tsx
+++ b/packages/ui/stories/components/composites/EntitySelector.stories.tsx
@@ -1,10 +1,10 @@
+import { Button } from '@cherrystudio/ui/components/primitives/button'
+import { Checkbox } from '@cherrystudio/ui/components/primitives/checkbox'
import type { Meta, StoryObj } from '@storybook/react-vite'
import { ArrowDown, ArrowUp, Check, ChevronRight, Pencil, Pin, PinOff, Plus } from 'lucide-react'
import { useMemo, useState } from 'react'
import { EntitySelector } from '../../../src/components/composites/EntitySelector'
-import { Button } from '../../../src/components/primitives/button'
-import { Checkbox } from '../../../src/components/primitives/checkbox'
type ExampleItem = { id: string; name: string; description?: string; emoji?: string }
diff --git a/packages/ui/stories/components/composites/Sortable.stories.tsx b/packages/ui/stories/components/composites/Sortable.stories.tsx
index e3a1744ca8..16d7a5596e 100644
--- a/packages/ui/stories/components/composites/Sortable.stories.tsx
+++ b/packages/ui/stories/components/composites/Sortable.stories.tsx
@@ -73,15 +73,15 @@ function ItemCard({ item, dragging }: { item: ExampleItem; dragging: boolean })
}
export const Vertical: Story = {
- render: (args) =>
+ render: (args) =>
}
export const Horizontal: Story = {
- render: (args) =>
+ render: (args) =>
}
export const Grid: Story = {
- render: (args) =>
+ render: (args) =>
}
function VerticalDemo(args: any) {
diff --git a/packages/ui/stories/components/primitives/ButtonGroup.stories.tsx b/packages/ui/stories/components/primitives/ButtonGroup.stories.tsx
index bfd7d38f8f..b19e18060b 100644
--- a/packages/ui/stories/components/primitives/ButtonGroup.stories.tsx
+++ b/packages/ui/stories/components/primitives/ButtonGroup.stories.tsx
@@ -1,4 +1,4 @@
-import { Button, ButtonGroup } from '@cherrystudio/ui'
+import { Button, ButtonGroup, ButtonGroupItem, Input } from '@cherrystudio/ui'
import type { Meta, StoryObj } from '@storybook/react'
import { ChevronLeft, ChevronRight, LayoutGrid, List } from 'lucide-react'
@@ -76,3 +76,24 @@ export const IconToggleStyle: Story = {
)
}
+
+export const InputWithButton: Story = {
+ render: () => (
+
+
+
+
+ )
+}
+
+export const WrappedInputWithButton: Story = {
+ render: () => (
+
+
+
+ Ctrl K
+
+
+
+ )
+}
diff --git a/packages/ui/stories/components/primitives/Combobox.stories.tsx b/packages/ui/stories/components/primitives/Combobox.stories.tsx
index 79d2f0eba0..53f8cdce42 100644
--- a/packages/ui/stories/components/primitives/Combobox.stories.tsx
+++ b/packages/ui/stories/components/primitives/Combobox.stories.tsx
@@ -36,6 +36,11 @@ const meta: Meta = {
searchable: {
control: { type: 'boolean' },
description: 'Enable search functionality'
+ },
+ searchPlacement: {
+ control: { type: 'select' },
+ options: ['content', 'trigger'],
+ description: 'Where the search input is rendered'
}
}
}
@@ -114,6 +119,145 @@ const iconOptions = [
}
]
+const fontOptions = [
+ {
+ value: 'inter',
+ label: 'Inter',
+ description: 'Neutral UI sans serif',
+ category: 'Sans',
+ fontFamily: 'Inter, sans-serif'
+ },
+ {
+ value: 'nunito-sans',
+ label: 'Nunito Sans',
+ description: 'Friendly rounded sans serif',
+ category: 'Sans',
+ fontFamily: '"Nunito Sans", sans-serif'
+ },
+ {
+ value: 'geist',
+ label: 'Geist',
+ description: 'Modern app interface font',
+ category: 'Sans',
+ fontFamily: 'Geist, sans-serif'
+ },
+ {
+ value: 'system-ui',
+ label: 'System UI',
+ description: 'Native operating system font',
+ category: 'Sans',
+ fontFamily: 'system-ui, sans-serif'
+ },
+ {
+ value: 'sf-pro',
+ label: 'SF Pro',
+ description: 'Apple platform interface font',
+ category: 'Sans',
+ fontFamily: '-apple-system, BlinkMacSystemFont, sans-serif'
+ },
+ {
+ value: 'roboto',
+ label: 'Roboto',
+ description: 'Android and Material UI font',
+ category: 'Sans',
+ fontFamily: 'Roboto, sans-serif'
+ },
+ {
+ value: 'source-sans',
+ label: 'Source Sans 3',
+ description: 'Readable product copy font',
+ category: 'Sans',
+ fontFamily: '"Source Sans 3", sans-serif'
+ },
+ {
+ value: 'ibm-plex-sans',
+ label: 'IBM Plex Sans',
+ description: 'Technical and enterprise UI font',
+ category: 'Sans',
+ fontFamily: '"IBM Plex Sans", sans-serif'
+ },
+ {
+ value: 'geist-mono',
+ label: 'Geist Mono',
+ description: 'Technical mono for code',
+ category: 'Mono',
+ fontFamily: '"Geist Mono", monospace'
+ },
+ {
+ value: 'jetbrains-mono',
+ label: 'JetBrains Mono',
+ description: 'Programming-focused mono font',
+ category: 'Mono',
+ fontFamily: '"JetBrains Mono", monospace'
+ },
+ {
+ value: 'fira-code',
+ label: 'Fira Code',
+ description: 'Ligature-friendly code font',
+ category: 'Mono',
+ fontFamily: '"Fira Code", monospace'
+ },
+ {
+ value: 'source-code-pro',
+ label: 'Source Code Pro',
+ description: 'Adobe monospace family',
+ category: 'Mono',
+ fontFamily: '"Source Code Pro", monospace'
+ },
+ {
+ value: 'berkeley-mono',
+ label: 'Berkeley Mono',
+ description: 'Dense terminal and editor font',
+ category: 'Mono',
+ fontFamily: '"Berkeley Mono", monospace'
+ },
+ {
+ value: 'ui-monospace',
+ label: 'UI Monospace',
+ description: 'Native system monospace stack',
+ category: 'Mono',
+ fontFamily: 'ui-monospace, monospace'
+ }
+]
+
+const searchableToolOptions = [
+ {
+ value: 'claude-code',
+ label: 'Claude Code',
+ description: 'Agentic coding assistant',
+ category: 'AI',
+ keywords: 'anthropic sonnet terminal'
+ },
+ {
+ value: 'cursor',
+ label: 'Cursor',
+ description: 'AI-native code editor',
+ category: 'Editor',
+ keywords: 'autocomplete composer workspace'
+ },
+ {
+ value: 'github-copilot',
+ label: 'GitHub Copilot',
+ description: 'Inline code completion',
+ category: 'AI',
+ keywords: 'github suggestion pair programming'
+ },
+ {
+ value: 'raycast',
+ label: 'Raycast',
+ description: 'Command launcher and extensions',
+ category: 'Productivity',
+ keywords: 'launcher snippets automation'
+ },
+ {
+ value: 'linear',
+ label: 'Linear',
+ description: 'Issue tracking and planning',
+ category: 'Planning',
+ keywords: 'tickets roadmap triage'
+ }
+]
+
// ==================== Stories ====================
// Default - 占位符状态
@@ -349,6 +493,78 @@ export const WithoutSearch: Story = {
}
}
+export const TriggerSearchFontList: Story = {
+ render: function TriggerSearchFontListExample() {
+ const [font, setFont] = useState('inter')
+ const selectedFont = fontOptions.find((option) => option.value === font)
+
+ return (
+
+
setFont(val as string)}
+ searchPlacement="trigger"
+ placeholder="Select font"
+ emptyText="No fonts found"
+ width={360}
+ renderOption={(option) => (
+
+
+
+ {option.label}
+
+
{option.description}
+
+
{option.category}
+
+ )}
+ />
+
+
Selected font
+
+ {selectedFont?.label}
+
+
+
+ )
+ }
+}
+
+export const CustomFilterOption: Story = {
+ render: function CustomFilterOptionExample() {
+ const [tool, setTool] = useState('')
+
+ return (
+ setTool(val as string)}
+ placeholder="Search tools"
+ searchPlaceholder="Search label, category, or keyword"
+ emptyText="No tools found"
+ width={320}
+ filterOption={(option, search) =>
+ [option.label, option.description, option.category, option.keywords]
+ .filter(Boolean)
+ .join(' ')
+ .toLowerCase()
+ .includes(search.trim().toLowerCase())
+ }
+ renderOption={(option) => (
+
+
+
{option.label}
+
{option.description}
+
+
{option.category}
+
+ )}
+ />
+ )
+ }
+}
+
// 实际使用场景 - 综合展示
export const RealWorldExamples: Story = {
render: function RealWorldExample() {
diff --git a/packages/ui/stories/components/primitives/ContextMenu.stories.tsx b/packages/ui/stories/components/primitives/ContextMenu.stories.tsx
new file mode 100644
index 0000000000..87c18bcf44
--- /dev/null
+++ b/packages/ui/stories/components/primitives/ContextMenu.stories.tsx
@@ -0,0 +1,130 @@
+import {
+ ContextMenu,
+ ContextMenuCheckboxItem,
+ ContextMenuContent,
+ ContextMenuItem,
+ ContextMenuLabel,
+ ContextMenuRadioGroup,
+ ContextMenuRadioItem,
+ ContextMenuSeparator,
+ ContextMenuShortcut,
+ ContextMenuSub,
+ ContextMenuSubContent,
+ ContextMenuSubTrigger,
+ ContextMenuTrigger
+} from '@cherrystudio/ui'
+import type { Meta, StoryObj } from '@storybook/react'
+import { Copy, Download, Pencil, Settings, Trash2 } from 'lucide-react'
+import { useState } from 'react'
+
+const meta: Meta = {
+ title: 'Components/Primitives/ContextMenu',
+ component: ContextMenu,
+ parameters: {
+ layout: 'centered',
+ docs: {
+ description: {
+ component:
+ 'Displays a menu when right-clicking a trigger area. Built on Radix UI Context Menu and styled with shadcn tokens.'
+ }
+ }
+ },
+ tags: ['autodocs']
+}
+
+export default meta
+type Story = StoryObj
+
+export const Default: Story = {
+ render: () => (
+
+
+
+ Right click this area
+
+
+
+
+
+ Rename
+ F2
+
+
+
+ Duplicate
+ ⌘D
+
+
+
+ Export
+
+
+
+
+ Delete
+ ⌘⌫
+
+
+
+ )
+}
+
+export const WithSubMenu: Story = {
+ render: () => (
+
+
+
+ Right click for nested actions
+
+
+
+ Provider
+
+
+ Edit
+
+
+
+
+ More actions
+
+
+ Open settings
+ View logs
+
+ Reset
+
+
+
+
+ )
+}
+
+export const CheckboxAndRadioItems: Story = {
+ render: function CheckboxAndRadioItemsExample() {
+ const [showBadge, setShowBadge] = useState(true)
+ const [density, setDensity] = useState('comfortable')
+
+ return (
+
+
+
+ Right click for selectable items
+
+
+
+
+ Show status badge
+
+
+ Density
+
+ Compact
+ Comfortable
+ Spacious
+
+
+
+ )
+ }
+}
diff --git a/packages/ui/stories/components/primitives/DescriptionSwitch.stories.tsx b/packages/ui/stories/components/primitives/DescriptionSwitch.stories.tsx
index 9587870e27..2709a6ab80 100644
--- a/packages/ui/stories/components/primitives/DescriptionSwitch.stories.tsx
+++ b/packages/ui/stories/components/primitives/DescriptionSwitch.stories.tsx
@@ -1,9 +1,8 @@
+import { DescriptionSwitch } from '@cherrystudio/ui/components/primitives/switch'
import type { Meta, StoryObj } from '@storybook/react'
import { Bell, Eye, Lock, Moon, Shield, Wifi, Zap } from 'lucide-react'
import { useState } from 'react'
-import { DescriptionSwitch } from '../../../src/components/primitives/switch'
-
const meta: Meta = {
title: 'Components/Primitives/DescriptionSwitch',
component: DescriptionSwitch,
diff --git a/packages/ui/stories/components/primitives/InputGroup.stories.tsx b/packages/ui/stories/components/primitives/InputGroup.stories.tsx
index dd3c8d807e..049fea1181 100644
--- a/packages/ui/stories/components/primitives/InputGroup.stories.tsx
+++ b/packages/ui/stories/components/primitives/InputGroup.stories.tsx
@@ -1,3 +1,11 @@
+import {
+ InputGroup,
+ InputGroupAddon,
+ InputGroupButton,
+ InputGroupInput,
+ InputGroupText,
+ InputGroupTextarea
+} from '@cherrystudio/ui/components/primitives/input-group'
import type { Meta, StoryObj } from '@storybook/react'
import {
AtSign,
@@ -19,15 +27,6 @@ import {
} from 'lucide-react'
import { useState } from 'react'
-import {
- InputGroup,
- InputGroupAddon,
- InputGroupButton,
- InputGroupInput,
- InputGroupText,
- InputGroupTextarea
-} from '../../../src/components/primitives/input-group'
-
const meta: Meta = {
title: 'Components/Primitives/InputGroup',
component: InputGroup,
diff --git a/packages/ui/stories/components/primitives/Item.stories.tsx b/packages/ui/stories/components/primitives/Item.stories.tsx
new file mode 100644
index 0000000000..71fef56082
--- /dev/null
+++ b/packages/ui/stories/components/primitives/Item.stories.tsx
@@ -0,0 +1,212 @@
+import {
+ Badge,
+ Button,
+ Item,
+ ItemActions,
+ ItemContent,
+ ItemDescription,
+ ItemFooter,
+ ItemGroup,
+ ItemHeader,
+ ItemMedia,
+ ItemSeparator,
+ ItemTitle
+} from '@cherrystudio/ui'
+import type { Meta, StoryObj } from '@storybook/react'
+import { Bell, Check, ChevronRight, Cloud, Database, FileText, Settings, Shield } from 'lucide-react'
+
+const meta: Meta = {
+ title: 'Components/Primitives/Item',
+ component: Item,
+ parameters: {
+ layout: 'centered',
+ docs: {
+ description: {
+ component:
+ 'Displays structured list items with media, content, actions, headers, and footers. Based on shadcn/ui.'
+ }
+ }
+ },
+ tags: ['autodocs'],
+ argTypes: {
+ variant: {
+ control: { type: 'select' },
+ options: ['default', 'outline', 'muted'],
+ description: 'The visual style variant of the item'
+ },
+ size: {
+ control: { type: 'select' },
+ options: ['default', 'sm'],
+ description: 'The size of the item'
+ },
+ asChild: {
+ control: { type: 'boolean' },
+ description: 'Render as a child element'
+ },
+ className: {
+ control: { type: 'text' },
+ description: 'Additional CSS classes'
+ }
+ }
+}
+
+export default meta
+type Story = StoryObj
+
+export const Default: Story = {
+ render: () => (
+ -
+
+
+
+
+ General Settings
+ Configure the default behavior and appearance of the application.
+
+
+
+
+
+ )
+}
+
+export const Variants: Story = {
+ render: () => (
+
+ -
+
+
+
+
+ Default
+ A transparent item for subtle list layouts.
+
+
+ -
+
+
+
+
+ Outline
+ A bordered item for grouped settings or selectable rows.
+
+
+ -
+
+
+
+
+ Muted
+ A softened item for secondary cards or inactive states.
+
+
+
+ )
+}
+
+export const Sizes: Story = {
+ render: () => (
+
+ -
+
+
+
+
+ Small item
+ Compact spacing for dense settings lists.
+
+
+ -
+
+
+
+
+ Default item
+ Comfortable spacing for explanatory list rows.
+
+
+
+ )
+}
+
+export const WithHeaderAndFooter: Story = {
+ render: () => (
+ -
+
+ Security
+ Updated today
+
+
+
+
+
+ Device verification
+ Require trusted devices before syncing sensitive data.
+
+
+
+
+
+ 2 devices trusted
+
+
+ Enabled
+
+
+
+ )
+}
+
+export const GroupedSettings: Story = {
+ render: () => (
+
+ -
+
+
+
+
+ Cloud sync
+ Keep settings available across devices.
+
+
+ On
+
+
+
+ -
+
+
+
+
+ Local data
+ Manage caches, exports, and local backups.
+
+
+
+
+
+
+ )
+}
+
+export const AsChild: Story = {
+ render: () => (
+ -
+
+
+
+
+
+ Documentation
+ Use asChild to render an item as a link.
+
+
+
+ )
+}
diff --git a/packages/ui/stories/components/primitives/Kbd.stories.tsx b/packages/ui/stories/components/primitives/Kbd.stories.tsx
index 39d6d452bd..2256f0c90c 100644
--- a/packages/ui/stories/components/primitives/Kbd.stories.tsx
+++ b/packages/ui/stories/components/primitives/Kbd.stories.tsx
@@ -1,7 +1,7 @@
import { Kbd, KbdGroup } from '@cherrystudio/ui'
import type { Meta, StoryObj } from '@storybook/react'
import { Command, Copy, Save, Search } from 'lucide-react'
-// import { Tooltip, TooltipContent, TooltipTrigger } from '../../../src/components/primitives/tooltip'
+// import { Tooltip, TooltipContent, TooltipTrigger } from '@cherrystudio/ui/components/primitives/tooltip'
const meta: Meta = {
title: 'Components/Primitives/Kbd',
diff --git a/packages/ui/stories/components/primitives/SegmentedControl.stories.tsx b/packages/ui/stories/components/primitives/SegmentedControl.stories.tsx
new file mode 100644
index 0000000000..89bb7146db
--- /dev/null
+++ b/packages/ui/stories/components/primitives/SegmentedControl.stories.tsx
@@ -0,0 +1,210 @@
+import { SegmentedControl } from '@cherrystudio/ui'
+import type { Meta, StoryObj } from '@storybook/react'
+import { Code, FileText, LayoutGrid, List, Monitor, Moon, Sun } from 'lucide-react'
+import { useState } from 'react'
+
+const meta: Meta = {
+ title: 'Components/Primitives/SegmentedControl',
+ component: SegmentedControl,
+ parameters: {
+ layout: 'centered',
+ docs: {
+ description: {
+ component:
+ 'A pill-shaped segmented control for choosing exactly one option from a compact set. Useful for settings rows, view modes, and short enum choices.'
+ }
+ }
+ },
+ tags: ['autodocs'],
+ argTypes: {
+ value: {
+ control: { type: 'text' },
+ description: 'The selected option value in controlled mode'
+ },
+ defaultValue: {
+ control: { type: 'text' },
+ description: 'The initially selected option value in uncontrolled mode'
+ },
+ disabled: {
+ control: { type: 'boolean' },
+ description: 'Whether the whole control is disabled'
+ },
+ size: {
+ control: { type: 'select' },
+ options: ['sm', 'default'],
+ description: 'The visual size of each segment'
+ }
+ }
+}
+
+export default meta
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {
+ defaultValue: 'system',
+ options: [
+ { value: 'light', label: 'Light' },
+ { value: 'dark', label: 'Dark' },
+ { value: 'system', label: 'System' }
+ ]
+ }
+}
+
+export const Sizes: Story = {
+ render: () => (
+
+ )
+}
+
+export const WithIcons: Story = {
+ render: () => (
+
+
+ Light
+ >
+ )
+ },
+ {
+ value: 'dark',
+ label: (
+ <>
+
+ Dark
+ >
+ )
+ },
+ {
+ value: 'system',
+ label: (
+ <>
+
+ System
+ >
+ )
+ }
+ ]}
+ />
+ )
+}
+
+export const Disabled: Story = {
+ render: () => (
+
+
+
Entire control disabled
+
+
+
+
One option disabled
+
+
+
+ )
+}
+
+export const ViewMode: Story = {
+ render: () => (
+
+
+ Grid
+ >
+ )
+ },
+ {
+ value: 'list',
+ label: (
+ <>
+
+ List
+ >
+ )
+ },
+ {
+ value: 'details',
+ label: (
+ <>
+
+ Details
+ >
+ )
+ }
+ ]}
+ />
+ )
+}
+
+export const Controlled: Story = {
+ render: function ControlledExample() {
+ const [value, setValue] = useState('preview')
+
+ return (
+
+
+
+
+ Selected: {value}
+
+
+ )
+ }
+}
diff --git a/packages/ui/stories/components/primitives/Slider.stories.tsx b/packages/ui/stories/components/primitives/Slider.stories.tsx
index 5480f757e3..46ecf84301 100644
--- a/packages/ui/stories/components/primitives/Slider.stories.tsx
+++ b/packages/ui/stories/components/primitives/Slider.stories.tsx
@@ -1,8 +1,7 @@
+import { Slider } from '@cherrystudio/ui/components/primitives/slider'
import type { Meta, StoryObj } from '@storybook/react'
import { useState } from 'react'
-import { Slider } from '../../../src/components/primitives/slider'
-
const meta: Meta = {
title: 'Components/Primitives/Slider',
component: Slider,
diff --git a/packages/ui/stories/components/primitives/Switch.stories.tsx b/packages/ui/stories/components/primitives/Switch.stories.tsx
index 86866ccb1f..8151fc0619 100644
--- a/packages/ui/stories/components/primitives/Switch.stories.tsx
+++ b/packages/ui/stories/components/primitives/Switch.stories.tsx
@@ -11,7 +11,7 @@ const meta: Meta = {
docs: {
description: {
component:
- 'A switch component based on Radix UI Switch, allowing users to toggle between on/off states. Supports three sizes (sm, md, lg), loading states, and an enhanced DescriptionSwitch variant with label and description. Built with accessibility in mind.'
+ 'A switch component based on Radix UI Switch, allowing users to toggle between on/off states. Supports four sizes (xs, sm, md, lg), loading states, and an enhanced DescriptionSwitch variant with label and description. Built with accessibility in mind.'
}
}
},
@@ -27,7 +27,7 @@ const meta: Meta = {
},
size: {
control: { type: 'select' },
- options: ['sm', 'md', 'lg'],
+ options: ['xs', 'sm', 'md', 'lg'],
description: 'The size of the switch'
},
defaultChecked: {
@@ -171,6 +171,30 @@ export const Controlled: Story = {
export const Sizes: Story = {
render: () => (
+
+
Extra small (xs)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Small (sm)
@@ -292,6 +316,7 @@ export const DescriptionSwitchPositions: Story = {
export const DescriptionSwitchSizes: Story = {
render: () => (
+
@@ -319,6 +344,10 @@ export const SizeComparison: Story = {
Off
+
+
+ xs
+
sm
@@ -337,6 +366,10 @@ export const SizeComparison: Story = {
On
+
+
+ xs
+
sm
@@ -355,6 +388,10 @@ export const SizeComparison: Story = {
Loading
+
+
+ xs
+
sm
diff --git a/packages/ui/stories/components/primitives/Textarea.stories.tsx b/packages/ui/stories/components/primitives/Textarea.stories.tsx
index d8110e0830..70554613cd 100644
--- a/packages/ui/stories/components/primitives/Textarea.stories.tsx
+++ b/packages/ui/stories/components/primitives/Textarea.stories.tsx
@@ -1,8 +1,7 @@
+import * as Textarea from '@cherrystudio/ui/components/primitives/textarea'
import type { Meta, StoryObj } from '@storybook/react'
import { useState } from 'react'
-import * as Textarea from '../../../src/components/primitives/textarea'
-
const meta: Meta
= {
title: 'Components/Primitives/Textarea',
component: Textarea.Input,
diff --git a/packages/ui/vitest.config.ts b/packages/ui/vitest.config.ts
index 9c13efaf00..10eb46e357 100644
--- a/packages/ui/vitest.config.ts
+++ b/packages/ui/vitest.config.ts
@@ -1,6 +1,13 @@
+import { resolve } from 'node:path'
+
import { defineConfig } from 'vitest/config'
export default defineConfig({
+ resolve: {
+ alias: {
+ '@cherrystudio/ui': resolve(__dirname, 'src')
+ }
+ },
test: {
globals: true,
environment: 'node',
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 999145839c..2e1faebcbc 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -255,7 +255,7 @@ importers:
version: 5.6.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
'@ant-design/v5-patch-for-react-19':
specifier: ^1.0.3
- version: 1.0.3(antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ version: 1.0.3(antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(date-fns@4.1.0)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
'@anthropic-ai/sdk':
specifier: ^0.41.0
version: 0.41.0(encoding@0.1.13)
@@ -388,6 +388,9 @@ importers:
'@hello-pangea/dnd':
specifier: ^18.0.1
version: 18.0.1(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@hookform/resolvers':
+ specifier: ^5.0.1
+ version: 5.2.2(react-hook-form@7.75.0(react@19.2.3))
'@iconify-json/material-icon-theme':
specifier: ^1.2.56
version: 1.2.57
@@ -711,7 +714,7 @@ importers:
version: 6.2.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
antd:
specifier: 5.27.0
- version: 5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ version: 5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(date-fns@4.1.0)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
archiver:
specifier: ^7.0.1
version: 7.0.1
@@ -1030,6 +1033,9 @@ importers:
react-error-boundary:
specifier: ^6.0.0
version: 6.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react-hook-form:
+ specifier: ^7.55.0
+ version: 7.75.0(react@19.2.3)
react-hotkeys-hook:
specifier: ^4.6.1
version: 4.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -1487,6 +1493,9 @@ importers:
'@dnd-kit/utilities':
specifier: ^3.2.2
version: 3.2.2(react@19.2.3)
+ '@hookform/resolvers':
+ specifier: ^5.0.0
+ version: 5.2.2(react-hook-form@7.75.0(react@19.2.3))
'@radix-ui/primitive':
specifier: ^1.1.3
version: 1.1.3
@@ -1535,6 +1544,9 @@ importers:
'@radix-ui/react-use-controllable-state':
specifier: ^1.2.2
version: 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ '@tanstack/react-table':
+ specifier: ^8.21.3
+ version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
class-variance-authority:
specifier: ^0.7.1
version: 0.7.1
@@ -1544,12 +1556,24 @@ importers:
cmdk:
specifier: ^1.1.1
version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ date-fns:
+ specifier: ^4.1.0
+ version: 4.1.0
lucide-react:
specifier: ^0.545.0
version: 0.545.0(react@19.2.3)
+ radix-ui:
+ specifier: ^1.4.3
+ version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react-day-picker:
+ specifier: ^9.14.0
+ version: 9.14.0(react@19.2.3)
react-dropzone:
specifier: ^14.3.8
version: 14.4.1(react@19.2.3)
+ react-hook-form:
+ specifier: ^7.55.0
+ version: 7.75.0(react@19.2.3)
tailwind-merge:
specifier: ^2.5.5
version: 2.6.1
@@ -2544,6 +2568,9 @@ packages:
'@dabh/diagnostics@2.0.8':
resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==}
+ '@date-fns/tz@1.4.1':
+ resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==}
+
'@develar/schema-utils@2.6.5':
resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==}
engines: {node: '>= 8.9.0'}
@@ -2977,6 +3004,11 @@ packages:
peerDependencies:
hono: ^4
+ '@hookform/resolvers@5.2.2':
+ resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==}
+ peerDependencies:
+ react-hook-form: ^7.55.0
+
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -4487,6 +4519,19 @@ packages:
'@radix-ui/primitive@1.1.3':
resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+ '@radix-ui/react-accessible-icon@1.1.7':
+ resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-accordion@1.2.12':
resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
peerDependencies:
@@ -4500,6 +4545,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-alert-dialog@1.1.15':
+ resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-arrow@1.1.7':
resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
peerDependencies:
@@ -4513,6 +4571,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-aspect-ratio@1.1.7':
+ resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-avatar@1.1.10':
+ resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-avatar@1.1.11':
resolution: {integrity: sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==}
peerDependencies:
@@ -4640,6 +4724,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-dropdown-menu@2.1.16':
+ resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-focus-guards@1.1.3':
resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
peerDependencies:
@@ -4662,6 +4759,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-form@0.1.8':
+ resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-hover-card@1.1.15':
+ resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-id@1.1.1':
resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
peerDependencies:
@@ -4671,6 +4794,19 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-label@2.1.7':
+ resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-label@2.1.8':
resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==}
peerDependencies:
@@ -4697,6 +4833,58 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-menubar@1.1.16':
+ resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-navigation-menu@1.2.14':
+ resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-one-time-password-field@0.1.8':
+ resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-password-toggle-field@0.1.3':
+ resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-popover@1.1.15':
resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
peerDependencies:
@@ -4775,6 +4963,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-progress@1.1.7':
+ resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-radio-group@1.3.8':
resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==}
peerDependencies:
@@ -4801,6 +5002,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-scroll-area@1.2.10':
+ resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-select@2.2.6':
resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
peerDependencies:
@@ -4814,6 +5028,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-separator@1.1.7':
+ resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-separator@1.1.8':
resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==}
peerDependencies:
@@ -4884,6 +5111,58 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-toast@1.2.15':
+ resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-toggle-group@1.1.11':
+ resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-toggle@1.1.10':
+ resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-toolbar@1.1.11':
+ resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-tooltip@1.2.8':
resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
peerDependencies:
@@ -6200,6 +6479,10 @@ packages:
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'}
+ '@tabby_ai/hijri-converter@1.0.5':
+ resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==}
+ engines: {node: '>=16.0.0'}
+
'@tailwindcss/node@4.1.18':
resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
@@ -6315,6 +6598,13 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ '@tanstack/react-table@8.21.3':
+ resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+
'@tanstack/react-virtual@3.13.14':
resolution: {integrity: sha512-WG0d7mBD54eA7dgA3+sO5csS0B49QKqM6Gy5Rf31+Oq/LTKROQSao9m2N/vz1IqVragOKU5t5k1LAcqh/DfTxw==}
peerDependencies:
@@ -6359,6 +6649,10 @@ packages:
'@tanstack/store@0.9.3':
resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==}
+ '@tanstack/table-core@8.21.3':
+ resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
+ engines: {node: '>=12'}
+
'@tanstack/virtual-core@3.13.14':
resolution: {integrity: sha512-b5Uvd8J2dc7ICeX9SRb/wkCxWk7pUwN214eEPAQsqrsktSKTCmyLxOQWSMgogBByXclZeAdgZ3k4o0fIYUIBqQ==}
@@ -8603,6 +8897,12 @@ packages:
dataloader@1.4.0:
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
+ date-fns-jalali@4.1.0-0:
+ resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==}
+
+ date-fns@4.1.0:
+ resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
+
dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
@@ -12427,6 +12727,19 @@ packages:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
+ radix-ui@1.4.3:
+ resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
raf-schd@4.0.3:
resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==}
@@ -12680,6 +12993,12 @@ packages:
react-base16-styling@0.6.0:
resolution: {integrity: sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==}
+ react-day-picker@9.14.0:
+ resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ react: '>=16.8.0'
+
react-docgen-typescript@2.4.0:
resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==}
peerDependencies:
@@ -12706,6 +13025,12 @@ packages:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
+ react-hook-form@7.75.0:
+ resolution: {integrity: sha512-Ovv94H+0p3sJ7B9B5QxPuCP1u8V/cHuVGyH55cSwodYDtoJwK+fqk3vjfIgSX59I2U/bU4z0nRJ9HMLpNiWEmw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18 || ^19
+
react-hotkeys-hook@4.6.2:
resolution: {integrity: sha512-FmP+ZriY3EG59Ug/lxNfrObCnW9xQShgk7Nb83+CkpfkcCpfS95ydv+E9JuXA5cp8KtskU7LGlIARpkc92X22Q==}
peerDependencies:
@@ -15250,9 +15575,9 @@ snapshots:
resize-observer-polyfill: 1.5.1
throttle-debounce: 5.0.2
- '@ant-design/v5-patch-for-react-19@1.0.3(antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ '@ant-design/v5-patch-for-react-19@1.0.3(antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(date-fns@4.1.0)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
- antd: 5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ antd: 5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(date-fns@4.1.0)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
@@ -16713,6 +17038,8 @@ snapshots:
enabled: 2.0.0
kuler: 2.0.0
+ '@date-fns/tz@1.4.1': {}
+
'@develar/schema-utils@2.6.5':
dependencies:
ajv: 6.12.6
@@ -17229,6 +17556,11 @@ snapshots:
dependencies:
hono: 4.12.2
+ '@hookform/resolvers@5.2.2(react-hook-form@7.75.0(react@19.2.3))':
+ dependencies:
+ '@standard-schema/utils': 0.3.0
+ react-hook-form: 7.75.0(react@19.2.3)
+
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.7':
@@ -18422,6 +18754,15 @@ snapshots:
'@radix-ui/primitive@1.1.3': {}
+ '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/primitive': 1.1.3
@@ -18439,6 +18780,20 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -18448,6 +18803,28 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/react-context': 1.1.3(@types/react@19.2.7)(react@19.2.3)
@@ -18578,6 +18955,21 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.7)(react@19.2.3)':
dependencies:
react: 19.2.3
@@ -18595,6 +18987,37 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.2.3)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3)
@@ -18602,6 +19025,15 @@ snapshots:
optionalDependencies:
'@types/react': 19.2.7
+ '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -18637,6 +19069,82 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/primitive': 1.1.3
@@ -18716,6 +19224,16 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/primitive': 1.1.3
@@ -18751,6 +19269,23 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/number': 1.1.1
@@ -18780,6 +19315,15 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -18853,6 +19397,67 @@ snapshots:
'@types/react': 19.2.7
'@types/react-dom': 19.2.3(@types/react@19.2.7)
+ '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
'@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@radix-ui/primitive': 1.1.3
@@ -20055,6 +20660,8 @@ snapshots:
dependencies:
defer-to-connect: 2.0.1
+ '@tabby_ai/hijri-converter@1.0.5': {}
+
'@tailwindcss/node@4.1.18':
dependencies:
'@jridgewell/remapping': 2.3.5
@@ -20148,6 +20755,12 @@ snapshots:
react-dom: 19.2.3(react@19.2.3)
use-sync-external-store: 1.6.0(react@19.2.3)
+ '@tanstack/react-table@8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@tanstack/table-core': 8.21.3
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
'@tanstack/react-virtual@3.13.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
'@tanstack/virtual-core': 3.13.14
@@ -20211,6 +20824,8 @@ snapshots:
'@tanstack/store@0.9.3': {}
+ '@tanstack/table-core@8.21.3': {}
+
'@tanstack/virtual-core@3.13.14': {}
'@tanstack/virtual-file-routes@1.161.7': {}
@@ -21910,7 +22525,7 @@ snapshots:
ansis@4.2.0: {}
- antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(date-fns@4.1.0)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
'@ant-design/colors': 7.2.1
'@ant-design/cssinjs': 1.23.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -21942,7 +22557,7 @@ snapshots:
rc-motion: 2.9.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
rc-notification: 5.6.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
rc-pagination: 5.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
- rc-picker: 4.11.3(dayjs@1.11.19)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ rc-picker: 4.11.3(date-fns@4.1.0)(dayjs@1.11.19)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
rc-progress: 4.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
rc-rate: 2.13.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
rc-resize-observer: 1.4.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -23222,6 +23837,10 @@ snapshots:
dataloader@1.4.0: {}
+ date-fns-jalali@4.1.0-0: {}
+
+ date-fns@4.1.0: {}
+
dayjs@1.11.19: {}
debounce-fn@4.0.0:
@@ -27726,6 +28345,69 @@ snapshots:
quick-lru@5.1.1: {}
+ radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.7)(react@19.2.3)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
raf-schd@4.0.3: {}
range-parser@1.2.1: {}
@@ -27887,7 +28569,7 @@ snapshots:
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
- rc-picker@4.11.3(dayjs@1.11.19)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ rc-picker@4.11.3(date-fns@4.1.0)(dayjs@1.11.19)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
'@babel/runtime': 7.28.4
'@rc-component/trigger': 2.3.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -27898,6 +28580,7 @@ snapshots:
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
optionalDependencies:
+ date-fns: 4.1.0
dayjs: 1.11.19
luxon: 3.7.2
moment: 2.30.1
@@ -28084,6 +28767,14 @@ snapshots:
lodash.flow: 3.5.0
pure-color: 1.3.0
+ react-day-picker@9.14.0(react@19.2.3):
+ dependencies:
+ '@date-fns/tz': 1.4.1
+ '@tabby_ai/hijri-converter': 1.0.5
+ date-fns: 4.1.0
+ date-fns-jalali: 4.1.0-0
+ react: 19.2.3
+
react-docgen-typescript@2.4.0(typescript@5.8.3):
dependencies:
typescript: 5.8.3
@@ -28120,6 +28811,10 @@ snapshots:
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
+ react-hook-form@7.75.0(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+
react-hotkeys-hook@4.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
react: 19.2.3
diff --git a/resources/cherry-studio/releases.html b/resources/cherry-studio/releases.html
index 13edca06f9..3e31d9ebf5 100644
--- a/resources/cherry-studio/releases.html
+++ b/resources/cherry-studio/releases.html
@@ -1,208 +1,202 @@
-
-
-
- Github Releases Timeline
-
-
-
-
-
-
-
-
-
Release Timeline
+
+
+
+
Github Releases Timeline
+
+
+
+
+
-
-
+
+
+
+
Release Timeline
-
-
{{ error }}
+
+
-
-
-
-
-
-
-
-
- {{ release.name || release.tag_name }}
-
-
- {{ formatDate(release.published_at) }}
-
-
-
- {{ release.tag_name }}
-
+
+
{{ error }}
+
+
+
+
+
+
+
+
+
+ {{ release.name || release.tag_name }}
+
+
+ {{ formatDate(release.published_at) }}
+
-
+
+ {{ release.tag_name }}
+
+
+
-
-
-
-
-
+ .dark-bg {
+ background-color: #151515;
+ }
+
+ .bg {
+ background-color: #f2f2f2;
+ }
+
+
+
+