+
{databases.map((db) => (
-
+
- {db.name}
- ({db.count})
+
+ {db.name}
+
+ {db.count}
))}
@@ -118,3 +133,15 @@ function Sidebar({
)
}
+
+const Count = ({ children }: { children: React.ReactNode }) => (
+
+ {children}
+
+)
diff --git a/app/[host]/database/[database]/layout.tsx b/app/[host]/database/[database]/layout.tsx
index 87923d7c..73611d19 100644
--- a/app/[host]/database/[database]/layout.tsx
+++ b/app/[host]/database/[database]/layout.tsx
@@ -3,7 +3,6 @@ import {
ResizablePanel,
ResizablePanelGroup,
} from '@/components/resizable'
-import { cn } from '@/lib/utils'
type Params = Promise<{
host: number
@@ -23,22 +22,21 @@ export default async function TableListPage({ nav, children }: TableListProps) {
return (
- {nav}
+ {nav}
-
- {children}
+
+ {children}
)
diff --git a/app/[host]/database/[database]/page.tsx b/app/[host]/database/[database]/page.tsx
index fdfbe64c..393fb100 100644
--- a/app/[host]/database/[database]/page.tsx
+++ b/app/[host]/database/[database]/page.tsx
@@ -43,9 +43,12 @@ export default async function TableListPage({ params }: TableListProps) {
],
table: [
ColumnFormat.Link,
- { href: `/${host}/database/${database}/[table]` },
+ {
+ href: `/${host}/database/${database}/[table]`,
+ className: 'truncate max-w-48',
+ },
],
- engine: ColumnFormat.ColoredBadge,
+ engine: [ColumnFormat.ColoredBadge, { className: 'truncate max-w-40' }],
readable_compressed: ColumnFormat.BackgroundBar,
readable_uncompressed: ColumnFormat.BackgroundBar,
readable_total_rows: ColumnFormat.BackgroundBar,
diff --git a/app/globals.css b/app/globals.css
index 8546df2b..f45f9072 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -43,6 +43,15 @@
--chart-orange-600: 20.5, 90.2%, 48.2%;
--chart-indigo-300: 230, 94%, 82%;
--chart-yellow: 45 100% 60%;
+ --sidebar-background: 0 0% 98%;
+ --sidebar-foreground: 240 5.3% 26.1%;
+ --sidebar-primary: 240 5.9% 10%;
+ --sidebar-primary-foreground: 0 0% 98%;
+ --sidebar-accent: 240 4.8% 95.9%;
+ --sidebar-accent-foreground: 240 5.9% 10%;
+ --sidebar-border: 220 13% 91%;
+ --sidebar-ring: 217.2 91.2% 59.8%;
+
}
.dark {
@@ -70,5 +79,13 @@
--chart-3: 30 80% 55%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
+ --sidebar-background: 240 5.9% 10%;
+ --sidebar-foreground: 240 4.8% 95.9%;
+ --sidebar-primary: 224.3 76.3% 48%;
+ --sidebar-primary-foreground: 0 0% 100%;
+ --sidebar-accent: 240 3.7% 15.9%;
+ --sidebar-accent-foreground: 240 4.8% 95.9%;
+ --sidebar-border: 240 3.7% 15.9%;
+ --sidebar-ring: 217.2 91.2% 59.8%;
}
}
diff --git a/components/data-table/cells/colored-badge-format.cy.tsx b/components/data-table/cells/colored-badge-format.cy.tsx
index 5a669e25..8799ce9c 100644
--- a/components/data-table/cells/colored-badge-format.cy.tsx
+++ b/components/data-table/cells/colored-badge-format.cy.tsx
@@ -25,8 +25,28 @@ describe('
', () => {
cy.get('span').should('not.exist')
})
- it('applies additional className', () => {
- cy.mount(
)
- cy.get('span').should('have.class', 'extra-class')
+ describe('options.className', () => {
+ it('applies custom className from options', () => {
+ cy.mount(
+
+ )
+ cy.get('span').should('have.class', 'extra-class')
+ })
+
+ it('applies className from options with override', () => {
+ cy.mount(
+
+ )
+ cy.get('span')
+ .should('not.have.class', 'w-5')
+ .and('not.have.class', 'w-10')
+ .and('have.class', 'w-15')
+ })
})
})
diff --git a/components/data-table/cells/colored-badge-format.tsx b/components/data-table/cells/colored-badge-format.tsx
index d253cab3..e59c8c3d 100644
--- a/components/data-table/cells/colored-badge-format.tsx
+++ b/components/data-table/cells/colored-badge-format.tsx
@@ -1,13 +1,17 @@
import { cn } from '@/lib/utils'
+export interface ColoredBadgeOptions {
+ className?: string
+}
+
interface ColoredBadgeFormatProps {
value: any
- className?: string
+ options?: ColoredBadgeOptions
}
export function ColoredBadgeFormat({
value,
- className,
+ options,
}: ColoredBadgeFormatProps) {
if (!value || value === '') {
return
@@ -36,9 +40,9 @@ export function ColoredBadgeFormat({
return (
{value}
diff --git a/components/data-table/cells/link-format.cy.tsx b/components/data-table/cells/link-format.cy.tsx
index 5fdfc491..8e8efe0e 100644
--- a/components/data-table/cells/link-format.cy.tsx
+++ b/components/data-table/cells/link-format.cy.tsx
@@ -75,4 +75,62 @@ describe('', () => {
cy.get('a').should('have.attr', 'href', 'https://duyet.net/item/789')
cy.contains('Non-string Href').should('be.visible')
})
+
+ describe('options.className', () => {
+ it('applies custom className from options', () => {
+ const row = { index: 0 } as Row
+ const data = [{ id: '123' }]
+ const value = 'Custom Class'
+ const options = {
+ href: '/item/[id]',
+ className: 'custom-class text-red-500',
+ }
+
+ cy.mount(
+
+ )
+
+ cy.get('a')
+ .should('have.class', 'custom-class')
+ .and('have.class', 'text-red-500')
+ })
+
+ it('merges custom className with default classes', () => {
+ const row = { index: 0 } as Row
+ const data = [{ id: '123' }]
+ const value = 'Merged Classes'
+ const options = {
+ href: '/item/[id]',
+ className: 'custom-class',
+ }
+
+ cy.mount(
+
+ )
+
+ cy.get('a')
+ .should('have.class', 'group')
+ .and('have.class', 'flex')
+ .and('have.class', 'custom-class')
+ })
+
+ it('applies custom className from options with override', () => {
+ const row = { index: 0 } as Row
+ const data = [{ id: '123' }]
+ const value = 'Custom Class'
+ const options = {
+ href: '/item/[id]',
+ className: 'text-red-300 text-red-400 text-red-500',
+ }
+
+ cy.mount(
+
+ )
+
+ cy.get('a')
+ .should('not.have.class', 'text-red-300')
+ .and('not.have.class', 'text-red-400')
+ .and('have.class', 'text-red-500')
+ })
+ })
})
diff --git a/components/data-table/cells/link-format.tsx b/components/data-table/cells/link-format.tsx
index de371cf9..adca58f5 100644
--- a/components/data-table/cells/link-format.tsx
+++ b/components/data-table/cells/link-format.tsx
@@ -1,3 +1,4 @@
+import { cn } from '@/lib/utils'
import { ArrowRightIcon } from '@radix-ui/react-icons'
import { Row, RowData } from '@tanstack/react-table'
import Link, { LinkProps } from 'next/link'
@@ -9,14 +10,14 @@ interface LinkFormatProps<
row: Row
data: TData[]
value: TValue
- options?: LinkProps
+ options?: LinkProps & { className?: string }
}
export function LinkFormat<
TData extends RowData,
TValue extends React.ReactNode,
>({ row, data, value, options }: LinkFormatProps) {
- let href = options?.href
+ let { href, className, ...rest } = options ?? {}
// No href provided, return value as is
if (!href) return value
@@ -43,8 +44,12 @@ export function LinkFormat<
}
return (
-
- {value}
+
+ {value}
)
diff --git a/components/data-table/format-cell.tsx b/components/data-table/format-cell.tsx
index c2ae88d4..f50e397a 100644
--- a/components/data-table/format-cell.tsx
+++ b/components/data-table/format-cell.tsx
@@ -20,7 +20,10 @@ import {
CodeToggleFormat,
type CodeToggleOptions,
} from './cells/code-toggle-format'
-import { ColoredBadgeFormat } from './cells/colored-badge-format'
+import {
+ ColoredBadgeFormat,
+ ColoredBadgeOptions,
+} from './cells/colored-badge-format'
import { DurationFormat } from './cells/duration-format'
import {
HoverCardFormat,
@@ -55,7 +58,12 @@ export const formatCell = <
)
case ColumnFormat.ColoredBadge:
- return
+ return (
+
+ )
case ColumnFormat.Code:
return {value as string}
diff --git a/components/skeleton.tsx b/components/skeleton.tsx
index 51e55516..3a36bd9f 100644
--- a/components/skeleton.tsx
+++ b/components/skeleton.tsx
@@ -74,3 +74,19 @@ export function MultiLineSkeleton({
)
}
+
+export function ListSkeleton({
+ nrows = 4,
+ className = 'w-[500px]',
+}: {
+ nrows?: number
+ className?: string
+}) {
+ return (
+
+ {Array.from({ length: nrows }).map((_, i) => (
+
+ ))}
+
+ )
+}
diff --git a/package.json b/package.json
index 938f8c1e..6c84148a 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
"@radix-ui/react-slot": "^1.1.0",
"@radix-ui/react-tabs": "^1.1.1",
"@radix-ui/react-toast": "^1.2.2",
- "@radix-ui/react-tooltip": "^1.1.3",
+ "@radix-ui/react-tooltip": "^1.1.4",
"@tanstack/react-table": "^8.20.5",
"@tremor/react": "^3.18.3",
"@uiw/react-heat-map": "^2.2.1",
diff --git a/tailwind.config.js b/tailwind.config.js
index 57f1c836..66f8b1b4 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -7,152 +7,162 @@ module.exports = {
'./node_modules/@tremor/**/*.{js,ts,jsx,tsx}', // Tremor module
],
theme: {
- container: {
- center: true,
- padding: '2rem',
- screens: {
- '2xl': '1400px',
- },
- },
- extend: {
- colors: {
- border: 'hsl(var(--border))',
- input: 'hsl(var(--input))',
- ring: 'hsl(var(--ring))',
- background: 'hsl(var(--background))',
- foreground: 'hsl(var(--foreground))',
- primary: {
- DEFAULT: 'hsl(var(--primary))',
- foreground: 'hsl(var(--primary-foreground))',
- },
- secondary: {
- DEFAULT: 'hsl(var(--secondary))',
- foreground: 'hsl(var(--secondary-foreground))',
- },
- destructive: {
- DEFAULT: 'hsl(var(--destructive))',
- foreground: 'hsl(var(--destructive-foreground))',
- },
- muted: {
- DEFAULT: 'hsl(var(--muted))',
- foreground: 'hsl(var(--muted-foreground))',
- },
- accent: {
- DEFAULT: 'hsl(var(--accent))',
- foreground: 'hsl(var(--accent-foreground))',
- },
- popover: {
- DEFAULT: 'hsl(var(--popover))',
- foreground: 'hsl(var(--popover-foreground))',
- },
- card: {
- DEFAULT: 'hsl(var(--card))',
- foreground: 'hsl(var(--card-foreground))',
- },
- // light mode
- tremor: {
- brand: {
- faint: '#FFECB3', // lighter yellow
- muted: '#FFD54F', // medium yellow
- subtle: '#FFC107', // standard yellow
- DEFAULT: '#FFCC00', // ClickHouse yellow
- emphasis: '#FFB300', // darker yellow
- inverted: '#ffffff', // white
- },
- background: {
- muted: '#f9fafb', // gray-50
- subtle: '#f3f4f6', // gray-100
- DEFAULT: '#ffffff', // white
- emphasis: '#374151', // gray-700
- },
- border: {
- DEFAULT: '#e5e7eb', // gray-200
- },
- ring: {
- DEFAULT: '#e5e7eb', // gray-200
- },
- content: {
- subtle: '#9ca3af', // gray-400
- DEFAULT: '#6b7280', // gray-500
- emphasis: '#374151', // gray-700
- strong: '#111827', // gray-900
- inverted: '#ffffff', // white
- },
- },
- // dark mode
- 'dark-tremor': {
- brand: {
- faint: '#0B1229', // custom
- muted: '#172554', // blue-950
- subtle: '#1e40af', // blue-800
- DEFAULT: '#3b82f6', // blue-500
- emphasis: '#60a5fa', // blue-400
- inverted: '#030712', // gray-950
- },
- background: {
- muted: '#131A2B', // custom
- subtle: '#1f2937', // gray-800
- DEFAULT: '#111827', // gray-900
- emphasis: '#d1d5db', // gray-300
- },
- border: {
- DEFAULT: '#1f2937', // gray-800
- },
- ring: {
- DEFAULT: '#1f2937', // gray-800
- },
- content: {
- subtle: '#4b5563', // gray-600
- DEFAULT: '#6b7280', // gray-500
- emphasis: '#e5e7eb', // gray-200
- strong: '#f9fafb', // gray-50
- inverted: '#000000', // black
- },
- },
- },
- boxShadow: {
- // light
- 'tremor-input': '0 1px 2px 0 rgb(0 0 0 / 0.05)',
- 'tremor-card':
- '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
- 'tremor-dropdown':
- '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
- // dark
- 'dark-tremor-input': '0 1px 2px 0 rgb(0 0 0 / 0.05)',
- 'dark-tremor-card':
- '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
- 'dark-tremor-dropdown':
- '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
- },
- borderRadius: {
- lg: 'var(--radius)',
- md: 'calc(var(--radius) - 2px)',
- sm: 'calc(var(--radius) - 4px)',
- 'tremor-small': '0.375rem',
- 'tremor-default': '0.5rem',
- 'tremor-full': '9999px',
- },
- fontSize: {
- 'tremor-label': ['0.75rem'],
- 'tremor-default': ['0.875rem', { lineHeight: '1.25rem' }],
- 'tremor-title': ['1.125rem', { lineHeight: '1.75rem' }],
- 'tremor-metric': ['1.875rem', { lineHeight: '2.25rem' }],
- },
- keyframes: {
- 'accordion-down': {
- from: { height: 0 },
- to: { height: 'var(--radix-accordion-content-height)' },
- },
- 'accordion-up': {
- from: { height: 'var(--radix-accordion-content-height)' },
- to: { height: 0 },
- },
- },
- animation: {
- 'accordion-down': 'accordion-down 0.2s ease-out',
- 'accordion-up': 'accordion-up 0.2s ease-out',
- },
- },
+ container: {
+ center: 'true',
+ padding: '2rem',
+ screens: {
+ '2xl': '1400px'
+ }
+ },
+ extend: {
+ colors: {
+ border: 'hsl(var(--border))',
+ input: 'hsl(var(--input))',
+ ring: 'hsl(var(--ring))',
+ background: 'hsl(var(--background))',
+ foreground: 'hsl(var(--foreground))',
+ primary: {
+ DEFAULT: 'hsl(var(--primary))',
+ foreground: 'hsl(var(--primary-foreground))'
+ },
+ secondary: {
+ DEFAULT: 'hsl(var(--secondary))',
+ foreground: 'hsl(var(--secondary-foreground))'
+ },
+ destructive: {
+ DEFAULT: 'hsl(var(--destructive))',
+ foreground: 'hsl(var(--destructive-foreground))'
+ },
+ muted: {
+ DEFAULT: 'hsl(var(--muted))',
+ foreground: 'hsl(var(--muted-foreground))'
+ },
+ accent: {
+ DEFAULT: 'hsl(var(--accent))',
+ foreground: 'hsl(var(--accent-foreground))'
+ },
+ popover: {
+ DEFAULT: 'hsl(var(--popover))',
+ foreground: 'hsl(var(--popover-foreground))'
+ },
+ card: {
+ DEFAULT: 'hsl(var(--card))',
+ foreground: 'hsl(var(--card-foreground))'
+ },
+ tremor: {
+ brand: {
+ faint: '#FFECB3',
+ muted: '#FFD54F',
+ subtle: '#FFC107',
+ DEFAULT: '#FFCC00',
+ emphasis: '#FFB300',
+ inverted: '#ffffff'
+ },
+ background: {
+ muted: '#f9fafb',
+ subtle: '#f3f4f6',
+ DEFAULT: '#ffffff',
+ emphasis: '#374151'
+ },
+ border: {
+ DEFAULT: '#e5e7eb'
+ },
+ ring: {
+ DEFAULT: '#e5e7eb'
+ },
+ content: {
+ subtle: '#9ca3af',
+ DEFAULT: '#6b7280',
+ emphasis: '#374151',
+ strong: '#111827',
+ inverted: '#ffffff'
+ }
+ },
+ 'dark-tremor': {
+ brand: {
+ faint: '#0B1229',
+ muted: '#172554',
+ subtle: '#1e40af',
+ DEFAULT: '#3b82f6',
+ emphasis: '#60a5fa',
+ inverted: '#030712'
+ },
+ background: {
+ muted: '#131A2B',
+ subtle: '#1f2937',
+ DEFAULT: '#111827',
+ emphasis: '#d1d5db'
+ },
+ border: {
+ DEFAULT: '#1f2937'
+ },
+ ring: {
+ DEFAULT: '#1f2937'
+ },
+ content: {
+ subtle: '#4b5563',
+ DEFAULT: '#6b7280',
+ emphasis: '#e5e7eb',
+ strong: '#f9fafb',
+ inverted: '#000000'
+ }
+ },
+ sidebar: {
+ DEFAULT: 'hsl(var(--sidebar-background))',
+ foreground: 'hsl(var(--sidebar-foreground))',
+ primary: 'hsl(var(--sidebar-primary))',
+ 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))',
+ accent: 'hsl(var(--sidebar-accent))',
+ 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))',
+ border: 'hsl(var(--sidebar-border))',
+ ring: 'hsl(var(--sidebar-ring))'
+ }
+ },
+ boxShadow: {
+ 'tremor-input': '0 1px 2px 0 rgb(0 0 0 / 0.05)',
+ 'tremor-card': '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
+ 'tremor-dropdown': '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
+ 'dark-tremor-input': '0 1px 2px 0 rgb(0 0 0 / 0.05)',
+ 'dark-tremor-card': '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
+ 'dark-tremor-dropdown': '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)'
+ },
+ borderRadius: {
+ lg: 'var(--radius)',
+ md: 'calc(var(--radius) - 2px)',
+ sm: 'calc(var(--radius) - 4px)',
+ 'tremor-small': '0.375rem',
+ 'tremor-default': '0.5rem',
+ 'tremor-full': '9999px'
+ },
+ fontSize: {
+ 'tremor-label': ['0.75rem'],
+ 'tremor-default': ['0.875rem', { lineHeight: '1.25rem' }],
+ 'tremor-title': ['1.125rem', { lineHeight: '1.75rem' }],
+ 'tremor-metric': ['1.875rem', { lineHeight: '2.25rem' }]
+ },
+ keyframes: {
+ 'accordion-down': {
+ from: {
+ height: '0'
+ },
+ to: {
+ height: 'var(--radix-accordion-content-height)'
+ }
+ },
+ 'accordion-up': {
+ from: {
+ height: 'var(--radix-accordion-content-height)'
+ },
+ to: {
+ height: '0'
+ }
+ }
+ },
+ animation: {
+ 'accordion-down': 'accordion-down 0.2s ease-out',
+ 'accordion-up': 'accordion-up 0.2s ease-out'
+ }
+ }
},
safelist: [
{
diff --git a/types/column-format.ts b/types/column-format.ts
index 5f83fc39..54f1a673 100644
--- a/types/column-format.ts
+++ b/types/column-format.ts
@@ -4,6 +4,7 @@ import { type Action } from '@/components/data-table/cells/actions/types'
import { type BackgroundBarOptions } from '@/components/data-table/cells/background-bar-format'
import { type CodeDialogOptions } from '@/components/data-table/cells/code-dialog-format'
import { type CodeToggleOptions } from '@/components/data-table/cells/code-toggle-format'
+import { type ColoredBadgeOptions } from '@/components/data-table/cells/colored-badge-format'
import { type HoverCardOptions } from '@/components/data-table/cells/hover-card-format'
import { type TextFormatOptions } from '@/components/data-table/cells/text-format'
@@ -28,8 +29,9 @@ export enum ColumnFormat {
export type ColumnFormatWithArgs =
| [ColumnFormat.Action, Action[]]
- | [ColumnFormat.Link, LinkProps]
+ | [ColumnFormat.Link, LinkProps & { className?: string }]
| [ColumnFormat.Text, TextFormatOptions]
+ | [ColumnFormat.ColoredBadge, ColoredBadgeOptions]
| [ColumnFormat.HoverCard, HoverCardOptions]
| [ColumnFormat.CodeDialog, CodeDialogOptions]
| [ColumnFormat.CodeToggle, CodeToggleOptions]
diff --git a/yarn.lock b/yarn.lock
index ffaa70c8..259a2d05 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1195,6 +1195,16 @@
dependencies:
"@radix-ui/react-primitive" "2.0.0"
+"@radix-ui/react-avatar@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.1.tgz#5848d2ed5f34d18b36fc7e2d227c41fca8600ea1"
+ integrity sha512-eoOtThOmxeoizxpX6RiEsQZ2wj5r4+zoeqAwO0cBaFQGjJwIH3dIX0OCxNrCyrrdxG+vBweMETh3VziQG7c1kw==
+ dependencies:
+ "@radix-ui/react-context" "1.1.1"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-use-callback-ref" "1.1.0"
+ "@radix-ui/react-use-layout-effect" "1.1.0"
+
"@radix-ui/react-avatar@latest":
version "1.1.1"
resolved "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.1.tgz"
@@ -1219,7 +1229,7 @@
"@radix-ui/react-use-previous" "1.1.0"
"@radix-ui/react-use-size" "1.1.0"
-"@radix-ui/react-collapsible@1.1.1", "@radix-ui/react-collapsible@^1.1.1", "@radix-ui/react-collapsible@latest":
+"@radix-ui/react-collapsible@1.1.1", "@radix-ui/react-collapsible@latest":
version "1.1.1"
resolved "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz"
integrity sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==
@@ -1233,6 +1243,20 @@
"@radix-ui/react-use-controllable-state" "1.1.0"
"@radix-ui/react-use-layout-effect" "1.1.0"
+"@radix-ui/react-collapsible@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz#1382cc9ec48f8b473c14f3779d317f0cdf6da5e9"
+ integrity sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==
+ dependencies:
+ "@radix-ui/primitive" "1.1.0"
+ "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/react-context" "1.1.1"
+ "@radix-ui/react-id" "1.1.0"
+ "@radix-ui/react-presence" "1.1.1"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-use-controllable-state" "1.1.0"
+ "@radix-ui/react-use-layout-effect" "1.1.0"
+
"@radix-ui/react-collection@1.1.0":
version "1.1.0"
resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz"
@@ -1270,7 +1294,7 @@
resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a"
integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==
-"@radix-ui/react-dialog@1.1.2", "@radix-ui/react-dialog@^1.1.2", "@radix-ui/react-dialog@latest":
+"@radix-ui/react-dialog@1.1.2", "@radix-ui/react-dialog@latest":
version "1.1.2"
resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz"
integrity sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==
@@ -1290,6 +1314,26 @@
aria-hidden "^1.1.1"
react-remove-scroll "2.6.0"
+"@radix-ui/react-dialog@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz#d9345575211d6f2d13e209e84aec9a8584b54d6c"
+ integrity sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==
+ dependencies:
+ "@radix-ui/primitive" "1.1.0"
+ "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/react-context" "1.1.1"
+ "@radix-ui/react-dismissable-layer" "1.1.1"
+ "@radix-ui/react-focus-guards" "1.1.1"
+ "@radix-ui/react-focus-scope" "1.1.0"
+ "@radix-ui/react-id" "1.1.0"
+ "@radix-ui/react-portal" "1.1.2"
+ "@radix-ui/react-presence" "1.1.1"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-slot" "1.1.0"
+ "@radix-ui/react-use-controllable-state" "1.1.0"
+ aria-hidden "^1.1.1"
+ react-remove-scroll "2.6.0"
+
"@radix-ui/react-direction@1.1.0", "@radix-ui/react-direction@latest":
version "1.1.0"
resolved "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz"
@@ -1306,7 +1350,20 @@
"@radix-ui/react-use-callback-ref" "1.1.0"
"@radix-ui/react-use-escape-keydown" "1.1.0"
-"@radix-ui/react-dropdown-menu@^2.1.2", "@radix-ui/react-dropdown-menu@latest":
+"@radix-ui/react-dropdown-menu@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz#acc49577130e3c875ef0133bd1e271ea3392d924"
+ integrity sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==
+ dependencies:
+ "@radix-ui/primitive" "1.1.0"
+ "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/react-context" "1.1.1"
+ "@radix-ui/react-id" "1.1.0"
+ "@radix-ui/react-menu" "2.1.2"
+ "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-use-controllable-state" "1.1.0"
+
+"@radix-ui/react-dropdown-menu@latest":
version "2.1.2"
resolved "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz"
integrity sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==
@@ -1560,13 +1617,20 @@
aria-hidden "^1.1.1"
react-remove-scroll "2.6.0"
-"@radix-ui/react-separator@1.1.0", "@radix-ui/react-separator@^1.1.0", "@radix-ui/react-separator@latest":
+"@radix-ui/react-separator@1.1.0", "@radix-ui/react-separator@latest":
version "1.1.0"
resolved "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz"
integrity sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==
dependencies:
"@radix-ui/react-primitive" "2.0.0"
+"@radix-ui/react-separator@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.0.tgz#ee0f4d86003b0e3ea7bc6ccab01ea0adee32663e"
+ integrity sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==
+ dependencies:
+ "@radix-ui/react-primitive" "2.0.0"
+
"@radix-ui/react-slider@latest":
version "1.2.1"
resolved "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.2.1.tgz"
@@ -1678,7 +1742,7 @@
"@radix-ui/react-separator" "1.1.0"
"@radix-ui/react-toggle-group" "1.1.0"
-"@radix-ui/react-tooltip@^1.1.3":
+"@radix-ui/react-tooltip@^1.1.4":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.4.tgz#152d8485859b80d395d6b3229f676fef3cec56b3"
integrity sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==
@@ -2807,7 +2871,7 @@ cjs-module-lexer@^1.0.0:
class-variance-authority@^0.7.0:
version "0.7.0"
- resolved "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz"
+ resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz#1c3134d634d80271b1837452b06d821915954522"
integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==
dependencies:
clsx "2.0.0"