From 660a9ace20578ecf0e6a6c7d4ab0821b4ebac835 Mon Sep 17 00:00:00 2001
From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com>
Date: Wed, 4 Feb 2026 16:53:37 +0700
Subject: [PATCH] feat: Implement Calendar component, UiProvider, and a `cn`
utility, while enhancing picker components with new icons and styles.
---
.../components/date-picker.showcase.tsx | 104 +-
.../modules/example/showcase/showcase.tsx | 8 +-
packages/ui/package.json | 3 +
.../picker/generate-picker.component.tsx | 13 +-
.../forms/styles/picker.style copy.css | 647 ++++++++++++
.../components/forms/styles/picker.style.css | 964 ++++++++++--------
packages/ui/src/index.ts | 7 +-
packages/ui/src/providers/ui-provider.tsx | 10 +
packages/ui/src/utils/cn.ts | 11 +
pnpm-lock.yaml | 593 ++++++++++-
10 files changed, 1890 insertions(+), 470 deletions(-)
create mode 100644 packages/ui/src/components/forms/styles/picker.style copy.css
create mode 100644 packages/ui/src/providers/ui-provider.tsx
create mode 100644 packages/ui/src/utils/cn.ts
diff --git a/apps/web/src/apps/modules/example/showcase/components/date-picker.showcase.tsx b/apps/web/src/apps/modules/example/showcase/components/date-picker.showcase.tsx
index c557463..7a3a8f4 100644
--- a/apps/web/src/apps/modules/example/showcase/components/date-picker.showcase.tsx
+++ b/apps/web/src/apps/modules/example/showcase/components/date-picker.showcase.tsx
@@ -13,19 +13,27 @@ import {
MonthRangePicker,
QuarterRangePicker,
YearRangePicker,
- InputStatusType
+ InputStatusType,
+ Calendar,
} from '@repo/ui'; // Sesuaikan path
+import { DateUtils } from '@repo/utils';
// --- UI Helper Components ---
-const Section = ({ title, description, children }: { title: string; description?: string; children: React.ReactNode }) => (
+const Section = ({
+ title,
+ description,
+ children,
+}: {
+ title: string;
+ description?: string;
+ children: React.ReactNode;
+}) => (
{title}
{description &&
{description}
}
-
- {children}
-
+ {children}
);
@@ -35,22 +43,17 @@ const Card = ({ label, code, children }: { label: string; code?: string; childre
{label}
{code && {code} }
-
- {children}
-
+ {children}
);
-export default function PickerShowcase({status}: {status: InputStatusType}) {
+export default function PickerShowcase({ status }: { status: InputStatusType }) {
return (
-
{/* Header */}
-
- Component Picker Showcase
-
+
Component Picker Showcase
Fully typed, Tailwind-styled, and robust date manipulation components.
@@ -65,7 +68,7 @@ export default function PickerShowcase({status}: {status: InputStatusType}) {
-
+
@@ -74,23 +77,21 @@ export default function PickerShowcase({status}: {status: InputStatusType}) {
-
+
-
-
{/* 2. Range Pickers */}
-
+
-
+
@@ -110,23 +111,21 @@ export default function PickerShowcase({status}: {status: InputStatusType}) {
-
-
{/* 3. Validation States */}
-
+
This field is required.
-
+
Warning: Date is in the past.
-
+
@@ -141,22 +140,15 @@ export default function PickerShowcase({status}: {status: InputStatusType}) {
{/* 4. Advanced & Customization */}
+ {/* 5. STATIC CALENDAR (Picker Panel) */}
+
+ {/* Basic Calendar */}
+
+
+ {/* Calendar with State & Time */}
+
+
+
+ {/* Visual Calendar */}
+
+ {
+ console.log('Selected:', new DateUtils(date as any).format('YYYY-MM-DD HH:mm:ss'));
+ }}
+ />
+
+
+ {/* Info Text */}
+
+
Info:
+
+ Komponen Calendar ini adalah Panel dasar. Sangat berguna untuk sidebar,
+ dashboard widget, atau form yang membutuhkan pemilihan tanggal yang selalu terlihat.
+
+
+
+
+
+
);
-}
\ No newline at end of file
+}
diff --git a/apps/web/src/apps/modules/example/showcase/showcase.tsx b/apps/web/src/apps/modules/example/showcase/showcase.tsx
index dd0c46a..450173f 100644
--- a/apps/web/src/apps/modules/example/showcase/showcase.tsx
+++ b/apps/web/src/apps/modules/example/showcase/showcase.tsx
@@ -3,6 +3,7 @@ import { InputStatusType } from '@repo/ui';
import CheckboxShowcase from './components/checkbox.showcase';
import InputShowCase from './components/input.showcase';
import { SwitchShowcase } from './components/switch.showcase';
+import PickerShowcase from './components/date-picker.showcase';
export default function Showcase() {
// State untuk menyimpan status yang dipilih
@@ -66,9 +67,10 @@ export default function Showcase() {
-
-
-
+ {/*
*/}
+ {/*
*/}
+ {/*
*/}
+
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 5f6d5fe..c26932d 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -12,6 +12,7 @@
"test:watch": "vitest --watch"
},
"dependencies": {
+ "@ant-design/icons": "^6.1.0",
"@rc-component/checkbox": "^1.0.1",
"@rc-component/form": "^1.6.2",
"@rc-component/input": "^1.1.2",
@@ -21,6 +22,8 @@
"@rc-component/textarea": "^1.1.2",
"@repo/utils": "workspace:*",
"@tailwindcss/vite": "^4.1.18",
+ "antd": "^6.2.3",
+ "clsx": "^2.1.1",
"dayjs": "^1.11.19",
"react": "^19.2.3",
"react-dom": "^19.2.3",
diff --git a/packages/ui/src/components/forms/picker/generate-picker.component.tsx b/packages/ui/src/components/forms/picker/generate-picker.component.tsx
index 7fa8605..c7d1de1 100644
--- a/packages/ui/src/components/forms/picker/generate-picker.component.tsx
+++ b/packages/ui/src/components/forms/picker/generate-picker.component.tsx
@@ -59,6 +59,11 @@ export function generateComponentPicker(
generateConfig={generateConfig}
locale={locale || enUS}
className={getStatusClassName(prefixCls, className, status, props.disabled)}
+ prevIcon={ }
+ nextIcon={ }
+ superPrevIcon={ }
+ superNextIcon={ }
+ transitionName={`rc-slide-up`}
{...restProps}
/>
);
@@ -150,7 +155,13 @@ export function generateComponentPicker(
MonthRangePicker.displayName = 'MonthRangePicker';
const QuarterRangePicker = forwardRef>((props, ref) => (
-
+
));
QuarterRangePicker.displayName = 'QuarterRangePicker';
diff --git a/packages/ui/src/components/forms/styles/picker.style copy.css b/packages/ui/src/components/forms/styles/picker.style copy.css
new file mode 100644
index 0000000..05f4567
--- /dev/null
+++ b/packages/ui/src/components/forms/styles/picker.style copy.css
@@ -0,0 +1,647 @@
+@layer components {
+ /* =========================================
+ PICKER BASE (INPUT WRAPPER)
+ ========================================= */
+ .rc-picker {
+ box-sizing: border-box;
+ display: inline-flex;
+ align-items: center;
+ width: 100%;
+ position: relative;
+
+ /* Using variable dimensions from globals.css */
+ height: var(--input-height);
+ padding: 0 var(--input-padding-x);
+
+ font-size: var(--input-font-size);
+ line-height: 1.5;
+ color: var(--input-text);
+
+ background-color: var(--input-bg);
+ border: 1px solid transparent;
+ border-color: var(--input-border);
+ border-radius: var(--input-radius);
+
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ outline: none;
+ }
+
+ /* Input inside Picker */
+ .rc-picker-input {
+ position: relative;
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ flex: 1;
+ }
+
+ .rc-picker-input > input {
+ width: 100%;
+ height: 100%;
+ min-width: 0;
+ padding: 0;
+ background-color: transparent;
+ border: 0;
+ outline: none;
+ color: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ transition: all 0.2s;
+ }
+
+ .rc-picker-input > input::placeholder {
+ color: var(--input-placeholder);
+ opacity: 1;
+ }
+
+ /* Suffix Icon (Calendar Icon) */
+ .rc-picker-suffix {
+ margin-left: 0.5rem;
+ color: var(--color-gray-400);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ pointer-events: none;
+ font-size: var(--text-lg);
+ transition: all 0.2s;
+ }
+
+ /* Clear Icon */
+ .rc-picker-clear {
+ position: absolute;
+ top: 50%;
+ right: var(--input-padding-x);
+ transform: translateY(-50%);
+ cursor: pointer;
+ opacity: 0;
+ transition:
+ opacity 0.2s,
+ color 0.2s;
+ background: var(--input-bg);
+ color: var(--color-gray-400);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1;
+ width: 1.2em;
+ height: 1.2em;
+ border-radius: 50%;
+ }
+
+ .rc-picker:hover:not(.rc-picker-disabled) .rc-picker-clear {
+ opacity: 1;
+ }
+
+ .rc-picker-clear:hover {
+ color: var(--color-gray-500);
+ background-color: var(--color-gray-100);
+ }
+ .rc-picker-clear-btn::after {
+ content: '×';
+ font-size: 1.2em;
+ line-height: 1;
+ }
+
+ /* =========================================
+ STATES (HOVER, FOCUS, DISABLED, ERROR)
+ ========================================= */
+
+ /* Hover State */
+ .rc-picker:hover:not(.rc-picker-disabled) {
+ border-color: var(--input-border-hover);
+ }
+
+ /* Focused State */
+ .rc-picker-focused {
+ border-color: var(--focus-border-color);
+ box-shadow: 0 0 0 3px var(--focus-ring-color);
+ z-index: 1;
+ }
+
+ /* Disabled State */
+ .rc-picker-disabled {
+ background-color: var(--disabled-bg);
+ color: var(--disabled-text);
+ border-color: var(--disabled-border);
+ cursor: not-allowed;
+ }
+
+ .rc-picker-disabled input {
+ cursor: not-allowed;
+ }
+
+ /* Range Picker Specific */
+ .rc-picker-range.rc-picker-focused .rc-picker-active-bar {
+ opacity: 1;
+ }
+
+ .rc-picker-range-separator {
+ align-items: center;
+ padding: 0 8px;
+ line-height: 1;
+ color: var(--color-gray-400);
+ display: inline-flex;
+ }
+
+ .rc-picker-active-bar {
+ bottom: -1px;
+ height: 2px;
+ margin-left: var(--input-padding-x); /* Align with input start */
+ background: var(--color-brand-500);
+ opacity: 0;
+ transition: all 0.3s ease-out;
+ pointer-events: none;
+ z-index: 2;
+ position: absolute;
+ left: 0;
+ width: auto;
+ }
+
+ /* =========================================
+ PICKER DROPDOWN PANEL (THE MEAT)
+ ========================================= */
+ .rc-picker-dropdown {
+ position: absolute;
+ z-index: 1050;
+ box-sizing: border-box;
+ font-size: var(--text-sm);
+ font-family: inherit;
+ }
+
+ .rc-picker-dropdown-hidden {
+ display: none;
+ }
+
+ /* Arrow styling removed for modern clean look (AntD v5/v6 typically removes large arrows) */
+ .rc-picker-dropdown .rc-picker-range-arrow {
+ display: none;
+ }
+
+ /* Panel Container */
+ .rc-picker-panel-container {
+ overflow: hidden;
+ vertical-align: top;
+ background: #fff;
+ border-radius: var(--radius-lg);
+ /* Elevation 3/4 equivalent */
+ box-shadow:
+ 0 6px 16px 0 rgba(0, 0, 0, 0.08),
+ 0 3px 6px -4px rgba(0, 0, 0, 0.12),
+ 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+ transition: margin 0.3s;
+ border: 1px solid var(--color-gray-100);
+ }
+
+ .rc-picker-panel-layout {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: stretch;
+ }
+
+ .rc-picker-panel {
+ vertical-align: top;
+ background: transparent;
+ display: inline-flex;
+ flex-direction: column;
+ }
+
+ /* Double Panel (Range Picker) */
+ .rc-picker-panel + .rc-picker-panel {
+ border-left: 1px solid var(--color-gray-100);
+ }
+
+ /* =========================================
+ HEADER SECTION
+ ========================================= */
+ .rc-picker-header {
+ display: flex;
+ padding: 0 8px;
+ border-bottom: 1px solid var(--color-gray-100);
+ min-height: 40px;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ .rc-picker-header > * {
+ flex: none;
+ }
+
+ .rc-picker-header-view {
+ flex: auto;
+ text-align: center;
+ font-weight: var(--font-weight-semibold);
+ display: flex;
+ justify-content: center;
+ gap: 4px;
+ }
+
+ .rc-picker-header-view button {
+ color: var(--color-gray-800);
+ font-weight: inheriting;
+ padding: 0 4px;
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ font-size: var(--text-sm);
+ line-height: 40px;
+ transition: color 0.2s;
+ }
+
+ .rc-picker-header-view button:hover {
+ color: var(--color-brand-500);
+ }
+
+ /* Navigation Buttons (< << >> >) */
+ .rc-picker-header-super-prev-btn,
+ .rc-picker-header-prev-btn,
+ .rc-picker-header-next-btn,
+ .rc-picker-header-super-next-btn {
+ min-width: 1.6em;
+ font-size: 14px;
+ color: var(--color-gray-400);
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ line-height: 40px;
+ padding: 0 5px;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+ transition: color 0.2s;
+ position: relative;
+ }
+
+ .rc-picker-header-super-prev-btn:hover,
+ .rc-picker-header-prev-btn:hover,
+ .rc-picker-header-next-btn:hover,
+ .rc-picker-header-super-next-btn:hover {
+ color: var(--color-gray-900);
+ }
+
+ /* Arrow Symbols using pseudo elements if needed, or rely on RC Picker default text symbols but styled */
+ /* RC Picker default uses unicode arrows usually. */
+
+ /* =========================================
+ BODY SECTION (CALENDAR GRID)
+ ========================================= */
+ .rc-picker-body {
+ padding: 8px 12px;
+ }
+
+ .rc-picker-content {
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: collapse;
+ }
+
+ .rc-picker-content th,
+ .rc-picker-content td {
+ position: relative;
+ min-width: 24px;
+ font-weight: 400;
+ }
+
+ .rc-picker-content th {
+ height: 32px;
+ color: var(--color-gray-500);
+ line-height: 32px;
+ text-align: center;
+ }
+
+ .rc-picker-cell {
+ padding: 4px 0;
+ color: var(--color-gray-400);
+ cursor: pointer;
+ }
+
+ .rc-picker-cell-in-view {
+ color: var(--color-gray-800);
+ }
+
+ .rc-picker-cell-disabled {
+ cursor: not-allowed;
+ color: var(--disabled-text);
+ }
+ .rc-picker-cell-disabled .rc-picker-cell-inner {
+ background: var(--disabled-bg);
+ }
+
+ /* Inner Cell (The Circle/Square) */
+ .rc-picker-cell-inner {
+ position: relative;
+ z-index: 2;
+ display: inline-block;
+ min-width: 24px;
+ height: 24px;
+ line-height: 24px;
+ border-radius: var(
+ --radius-md
+ ); /* Ant Design v5 uses slightly rounded squares, not full circles usually, but we can do md radius */
+ transition:
+ background 0.2s,
+ border 0.2s,
+ color 0.2s;
+ text-align: center;
+ margin: 0 auto;
+ padding: 0 4px; /* For longer text like months */
+ }
+
+ /* Month/Year Panel cells are wider */
+ .rc-picker-month-panel .rc-picker-cell-inner,
+ .rc-picker-year-panel .rc-picker-cell-inner,
+ .rc-picker-quarter-panel .rc-picker-cell-inner,
+ .rc-picker-decade-panel .rc-picker-cell-inner {
+ width: auto;
+ padding: 0 12px;
+ min-width: 48px;
+ }
+
+ /* Hover State */
+ .rc-picker-cell:hover:not(.rc-picker-cell-selected):not(.rc-picker-cell-range-start):not(
+ .rc-picker-cell-range-end
+ ):not(.rc-picker-cell-disabled)
+ .rc-picker-cell-inner {
+ background: var(--color-gray-100);
+ }
+
+ /* Selected Date */
+ .rc-picker-cell-selected .rc-picker-cell-inner,
+ .rc-picker-cell-range-start .rc-picker-cell-inner,
+ .rc-picker-cell-range-end .rc-picker-cell-inner {
+ color: #fff;
+ background: var(--color-brand-500);
+ box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
+ }
+
+ .rc-picker-cell-selected:hover .rc-picker-cell-inner {
+ background: var(--color-brand-600);
+ }
+
+ /* Today */
+ .rc-picker-cell-today .rc-picker-cell-inner::before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ border: 1px solid var(--color-brand-500);
+ border-radius: var(--radius-md);
+ content: '';
+ transition: all 0.2s;
+ }
+
+ .rc-picker-cell-selected.rc-picker-cell-today .rc-picker-cell-inner::before {
+ border-color: #fff; /* White border inside selected today */
+ }
+
+ /* =========================================
+ RANGE SELECTION STYLING
+ ========================================= */
+
+ /* The strip between start and end */
+ .rc-picker-cell-in-range > .rc-picker-cell-inner {
+ background: var(--color-brand-50);
+ border-radius: 0;
+ min-width: 100%; /* Fill the whole cell width */
+ color: var(--color-gray-800);
+ }
+
+ .rc-picker-cell-in-range::before {
+ background: var(--color-brand-50);
+ }
+
+ /* Range Edge Adjustments */
+ .rc-picker-cell-range-start > .rc-picker-cell-inner {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-left-radius: var(--radius-md);
+ border-bottom-left-radius: var(--radius-md);
+ }
+
+ .rc-picker-cell-range-end > .rc-picker-cell-inner {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: var(--radius-md);
+ border-bottom-right-radius: var(--radius-md);
+ }
+
+ /* Ghost/Pseudo elements for continuous range background */
+ /* RC Picker handles this logic via class combinations.
+ We need to ensure the background flows nicely. */
+
+ .rc-picker-cell-range-start.rc-picker-cell-range-end .rc-picker-cell-inner {
+ border-radius: var(--radius-md);
+ }
+
+ /* Range Hover (when selecting the second date) */
+ .rc-picker-cell-range-hover-start::after,
+ .rc-picker-cell-range-hover-end::after,
+ .rc-picker-cell-range-hover::after {
+ content: ''; /* Should show dotted line or lighter highlight */
+ position: absolute;
+ top: 50%;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ border-top: 2px dashed var(--color-brand-300);
+ transform: translateY(-50%);
+ z-index: 0;
+ display: none; /* AntD v6 doesn't really emphasize this as much, can keep simple */
+ }
+
+ /* =========================================
+ TIME PANEL
+ ========================================= */
+ .rc-picker-time-panel {
+ border-left: 1px solid var(--color-gray-100);
+ width: auto;
+ }
+
+ .rc-picker-time-panel .rc-picker-content {
+ display: flex;
+ max-height: 224px;
+ height: 224px;
+ }
+
+ .rc-picker-time-panel-column {
+ flex: 1 0 auto;
+ width: 60px; /* Wider for easier clicking */
+ margin: 0;
+ padding: 0;
+ overflow-y: hidden;
+ text-align: left;
+ list-style: none;
+ transition: background 0.3s;
+ overflow-x: hidden;
+ border-left: 1px solid var(--color-gray-100); /* Separator between hrs/min/sec */
+ }
+
+ .rc-picker-time-panel-column:first-child {
+ border-left: 0;
+ }
+
+ .rc-picker-time-panel-column:hover {
+ overflow-y: auto;
+ }
+
+ .rc-picker-time-panel-column > li {
+ margin: 0;
+ padding: 0;
+ }
+
+ .rc-picker-time-panel-column > li .rc-picker-time-panel-cell-inner {
+ display: block;
+ width: 100%;
+ height: 28px;
+ margin: 0;
+ padding: 0 0 0 12px;
+ color: var(--color-gray-800);
+ line-height: 28px;
+ text-align: left;
+ cursor: pointer;
+ transition: background 0.2s;
+ }
+
+ .rc-picker-time-panel-column > li:hover .rc-picker-time-panel-cell-inner {
+ background: var(--color-gray-100);
+ }
+
+ .rc-picker-time-panel-column > li.rc-picker-time-panel-cell-selected .rc-picker-time-panel-cell-inner {
+ background: var(--color-brand-50);
+ color: var(--color-brand-600);
+ font-weight: 600;
+ }
+
+ .rc-picker-time-panel-column > li.rc-picker-time-panel-cell-disabled .rc-picker-time-panel-cell-inner {
+ color: var(--disabled-text);
+ cursor: not-allowed;
+ background: transparent;
+ }
+
+ /* Date + Time Layout */
+ .rc-picker-datetime-panel {
+ display: flex;
+ }
+ .rc-picker-datetime-panel .rc-picker-date-panel,
+ .rc-picker-datetime-panel .rc-picker-time-panel {
+ transition: opacity 0.3s;
+ }
+
+ /* =========================================
+ FOOTER
+ ========================================= */
+ .rc-picker-footer {
+ width: auto;
+ min-width: 100%;
+ line-height: 38px;
+ text-align: center;
+ border-top: 1px solid var(--color-gray-100);
+ padding: 0 12px;
+ }
+
+ .rc-picker-footer-extra {
+ text-align: left;
+ }
+
+ /* Ranges (Presets) */
+ .rc-picker-ranges {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ overflow: hidden;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ .rc-picker-ranges > li {
+ display: inline-block;
+ }
+
+ .rc-picker-ranges .rc-picker-preset > .rc-picker-preset-tag {
+ display: inline-block;
+ margin-right: 8px;
+ color: var(--color-brand-500);
+ cursor: pointer;
+ transition: color 0.2s;
+ }
+
+ .rc-picker-ranges .rc-picker-preset > .rc-picker-preset-tag:hover {
+ color: var(--color-brand-600);
+ }
+
+ .rc-picker-ranges .rc-picker-ok {
+ float: right;
+ }
+
+ /* OK Button */
+ .rc-picker-ok button {
+ background: var(--color-brand-500);
+ color: #fff;
+ border: none;
+ border-radius: var(--radius-sm);
+ padding: 2px 12px;
+ height: 24px;
+ cursor: pointer;
+ font-size: var(--text-sm);
+ transition: background 0.2s;
+ }
+
+ .rc-picker-ok button:hover {
+ background: var(--color-brand-600);
+ }
+
+ .rc-picker-ok button:disabled {
+ background: var(--disabled-bg);
+ color: var(--disabled-text);
+ cursor: not-allowed;
+ }
+
+ .rc-picker-now-btn {
+ color: var(--color-brand-500);
+ cursor: pointer;
+ transition: color 0.2s;
+ }
+ .rc-picker-now-btn:hover {
+ color: var(--color-brand-600);
+ }
+
+ /* =========================================
+ STATUS MODIFIERS (ERROR, WARNING, ETC)
+ ========================================= */
+
+ .picker-status-error.rc-picker {
+ border-color: var(--color-error-500);
+ }
+ .picker-status-error.rc-picker:hover:not(.rc-picker-disabled) {
+ border-color: var(--color-error-600);
+ }
+ .picker-status-error.rc-picker.rc-picker-focused {
+ border-color: var(--color-error-600);
+ box-shadow: 0 0 0 3px var(--color-error-100);
+ }
+
+ .picker-status-warning.rc-picker {
+ border-color: var(--color-warning-500);
+ }
+ .picker-status-warning.rc-picker:hover:not(.rc-picker-disabled) {
+ border-color: var(--color-warning-600);
+ }
+ .picker-status-warning.rc-picker.rc-picker-focused {
+ border-color: var(--color-warning-600);
+ box-shadow: 0 0 0 3px var(--color-warning-100);
+ }
+
+ .picker-status-success.rc-picker {
+ border-color: var(--color-success-500);
+ }
+ .picker-status-success.rc-picker:hover:not(.rc-picker-disabled) {
+ border-color: var(--color-success-600);
+ }
+ .picker-status-success.rc-picker.rc-picker-focused {
+ border-color: var(--color-success-600);
+ box-shadow: 0 0 0 3px var(--color-success-100);
+ }
+}
diff --git a/packages/ui/src/components/forms/styles/picker.style.css b/packages/ui/src/components/forms/styles/picker.style.css
index 14bd93d..26f174a 100644
--- a/packages/ui/src/components/forms/styles/picker.style.css
+++ b/packages/ui/src/components/forms/styles/picker.style.css
@@ -1,285 +1,429 @@
@layer components {
- /* =========================================
- PICKER BASE (INPUT WRAPPER)
- ========================================= */
+ /* ==========================================================================
+ Ant Design DatePicker - Pure CSS Implementation
+ ========================================================================== */
+
+ /* --------------------------------------------------------------------------
+ Variables & Tokens
+ -------------------------------------------------------------------------- */
+ :root {
+ /* Colors */
+ --ant-color-primary: #1677ff;
+ --ant-color-primary-hover: #4096ff;
+ --ant-color-primary-active: #0958d9;
+ --ant-color-primary-bg: #e6f4ff;
+ --ant-color-primary-border: #91caff;
+
+ --ant-color-bg-container: #ffffff;
+ --ant-color-bg-elevated: #ffffff;
+ --ant-color-bg-layout: #f5f5f5;
+ --ant-color-bg-mask: rgba(0, 0, 0, 0.45);
+ --ant-color-bg-spotlight: rgba(0, 0, 0, 0.85);
+
+ --ant-color-text: rgba(0, 0, 0, 0.88);
+ --ant-color-text-secondary: rgba(0, 0, 0, 0.65);
+ --ant-color-text-tertiary: rgba(0, 0, 0, 0.45);
+ --ant-color-text-quaternary: rgba(0, 0, 0, 0.25);
+ --ant-color-text-placeholder: rgba(0, 0, 0, 0.25);
+ --ant-color-text-disabled: rgba(0, 0, 0, 0.25);
+ --ant-color-text-heading: rgba(0, 0, 0, 0.88);
+ --ant-color-text-light-solid: #ffffff;
+
+ --ant-color-border: #d9d9d9;
+ --ant-color-split: rgba(5, 5, 5, 0.06);
+ --ant-color-error: #ff4d4f;
+ --ant-color-warning: #faad14;
+
+ /* Dimensions & Spacing */
+ --ant-control-height: 32px;
+ --ant-control-height-sm: 24px;
+ --ant-control-height-lg: 40px;
+
+ --ant-padding-xs: 8px;
+ --ant-padding-sm: 12px;
+ --ant-padding-md: 16px;
+ --ant-padding-xxs: 4px;
+
+ --ant-margin-xs: 8px;
+ --ant-margin-xxs: 4px;
+
+ --ant-border-radius: 6px;
+ --ant-border-radius-sm: 4px;
+ --ant-border-radius-lg: 8px;
+
+ --ant-line-width: 1px;
+ --ant-line-width-bold: 2px;
+ --ant-line-type: solid;
+
+ /* Font */
+ --ant-font-size: 14px;
+ --ant-font-size-sm: 12px;
+ --ant-font-size-lg: 16px;
+ --ant-line-height: 1.5714285714285714;
+
+ /* Animation */
+ --ant-motion-duration-mid: 0.2s;
+ --ant-motion-duration-slow: 0.3s;
+
+ /* Shadows */
+ --ant-box-shadow:
+ 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+ --ant-box-shadow-secondary:
+ 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+
+ /* Picker Specific Tokens */
+ --ant-picker-z-index-popup: 1050;
+ --ant-picker-cell-hover-bg: rgba(0, 0, 0, 0.04);
+ --ant-picker-cell-active-with-range-bg: var(--ant-color-primary-bg);
+ --ant-picker-basic-cell-hover-with-range-bg: #cce9ff; /* lighten(primary, 35) approx */
+ --ant-picker-date-hover-range-border-color: #7ec1ff; /* lighten(primary, 20) approx */
+
+ --ant-picker-panel-width: 280px; /* cellWidth * 7 + padding */
+ --ant-picker-year-month-cell-width: 60px;
+ --ant-picker-time-column-width: 56px;
+ --ant-picker-time-column-height: 224px;
+ --ant-picker-time-cell-height: 28px;
+
+ --ant-picker-cell-width: 36px;
+ --ant-picker-cell-height: 24px;
+ --ant-picker-text-height: 40px;
+ }
+
+ /* --------------------------------------------------------------------------
+ Base Styles (.rc-picker)
+ -------------------------------------------------------------------------- */
.rc-picker {
box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ color: var(--ant-color-text);
+ font-size: var(--ant-font-size);
+ line-height: var(--ant-line-height);
+ list-style: none;
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ background: var(--ant-color-bg-container);
+ border: var(--ant-line-width) var(--ant-line-type) var(--ant-color-border);
+ border-radius: var(--ant-border-radius);
+ transition:
+ border var(--ant-motion-duration-mid),
+ box-shadow var(--ant-motion-duration-mid);
+ padding: 4px 11px;
+ }
+
+ /* Base States */
+ .rc-picker:hover,
+ .rc-picker-focused {
+ border-color: var(--ant-color-primary);
+ border-inline-end-width: var(--ant-line-width);
+ }
+
+ .rc-picker-focused {
+ box-shadow: 0 0 0 2px rgba(5, 145, 255, 0.1);
+ outline: 0;
+ }
+
+ .rc-picker.rc-picker-disabled {
+ background: var(--ant-color-bg-layout);
+ border-color: var(--ant-color-border);
+ color: var(--ant-color-text-disabled);
+ cursor: not-allowed;
+ }
+
+ .rc-picker.rc-picker-disabled .rc-picker-suffix {
+ color: var(--ant-color-text-disabled);
+ }
+
+ /* Clean Input Style */
+ .rc-picker-input {
+ position: relative;
display: inline-flex;
align-items: center;
width: 100%;
- position: relative;
-
- /* Using variable dimensions from globals.css */
- height: var(--input-height);
- padding: 0 var(--input-padding-x);
-
- font-size: var(--input-font-size);
- line-height: 1.5;
- color: var(--input-text);
-
- background-color: var(--input-bg);
- border: 1px solid transparent;
- border-color: var(--input-border);
- border-radius: var(--input-radius);
-
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
- outline: none;
}
- /* Input inside Picker */
- .rc-picker-input {
- position: relative;
- display: flex;
- align-items: center;
- width: 100%;
- height: 100%;
- flex: 1;
- }
-
.rc-picker-input > input {
+ position: relative;
+ display: inline-block;
width: 100%;
- height: 100%;
- min-width: 0;
+ min-width: 1px; /* Firefox flex fix */
padding: 0;
- background-color: transparent;
- border: 0;
- outline: none;
color: inherit;
font-size: inherit;
line-height: inherit;
- transition: all 0.2s;
+ background: transparent;
+ border: 0;
+ outline: 0;
+ transition: all var(--ant-motion-duration-mid);
+ flex: auto;
+ height: auto;
}
-
+
.rc-picker-input > input::placeholder {
- color: var(--input-placeholder);
- opacity: 1;
+ color: var(--ant-color-text-placeholder);
}
-
- /* Suffix Icon (Calendar Icon) */
+
+ .rc-picker-input > input:disabled {
+ color: var(--ant-color-text-disabled);
+ background: transparent;
+ cursor: not-allowed;
+ }
+
+ /* Suffix & Clear Icon */
.rc-picker-suffix {
- margin-left: 0.5rem;
- color: var(--color-gray-400);
display: flex;
- align-items: center;
- justify-content: center;
+ flex: none;
+ align-self: center;
+ margin-inline-start: 4px;
+ color: var(--ant-color-text-quaternary);
+ line-height: 1;
pointer-events: none;
- font-size: var(--text-lg);
- transition: all 0.2s;
+ transition:
+ opacity var(--ant-motion-duration-mid),
+ color var(--ant-motion-duration-mid);
}
- /* Clear Icon */
.rc-picker-clear {
position: absolute;
top: 50%;
- right: var(--input-padding-x);
+ inset-inline-end: 0;
+ color: var(--ant-color-text-quaternary);
+ line-height: 1;
+ background: var(--ant-color-bg-container);
transform: translateY(-50%);
cursor: pointer;
opacity: 0;
- transition: opacity 0.2s, color 0.2s;
- background: var(--input-bg);
- color: var(--color-gray-400);
- display: flex;
- align-items: center;
- justify-content: center;
+ transition:
+ opacity var(--ant-motion-duration-mid),
+ color var(--ant-motion-duration-mid);
z-index: 1;
- width: 1.2em;
- height: 1.2em;
- border-radius: 50%;
}
- .rc-picker:hover:not(.rc-picker-disabled) .rc-picker-clear {
+ .rc-picker-clear:hover {
+ color: var(--ant-color-text-tertiary);
+ }
+
+ .rc-picker:hover .rc-picker-clear {
opacity: 1;
}
-
- .rc-picker-clear:hover {
- color: var(--color-gray-500);
- background-color: var(--color-gray-100);
- }
- .rc-picker-clear-btn::after {
- content: "×";
- font-size: 1.2em;
- line-height: 1;
+
+ /* Hide suffix when clear is shown on hover (approximate behavior) */
+ .rc-picker:hover .rc-picker-clear + .rc-picker-suffix {
+ opacity: 0;
}
- /* =========================================
- STATES (HOVER, FOCUS, DISABLED, ERROR)
- ========================================= */
-
- /* Hover State */
- .rc-picker:hover:not(.rc-picker-disabled) {
- border-color: var(--input-border-hover);
+ /* Sizes */
+ .rc-picker-large {
+ padding: 6.5px 11px;
+ font-size: var(--ant-font-size-lg);
+ border-radius: var(--ant-border-radius-lg);
}
- /* Focused State */
- .rc-picker-focused {
- border-color: var(--focus-border-color);
- box-shadow: 0 0 0 3px var(--focus-ring-color);
- z-index: 1;
+ .rc-picker-large .rc-picker-input > input {
+ font-size: var(--ant-font-size-lg);
}
- /* Disabled State */
- .rc-picker-disabled {
- background-color: var(--disabled-bg);
- color: var(--disabled-text);
- border-color: var(--disabled-border);
- cursor: not-allowed;
- }
-
- .rc-picker-disabled input {
- cursor: not-allowed;
+ .rc-picker-small {
+ padding: 0px 7px;
+ border-radius: var(--ant-border-radius-sm);
+ }
+
+ /* --------------------------------------------------------------------------
+ Range Picker Specifics
+ -------------------------------------------------------------------------- */
+ .rc-picker-range {
+ position: relative;
+ display: inline-flex;
+ }
+
+ .rc-picker-range .rc-picker-clear {
+ inset-inline-end: 11px; /* padding inline */
+ }
+
+ .rc-picker-range.rc-picker-small .rc-picker-clear {
+ inset-inline-end: 7px;
+ }
+
+ .rc-picker-range .rc-picker-active-bar {
+ bottom: -1px;
+ height: 2px;
+ margin-inline-start: 11px;
+ background: var(--ant-color-primary);
+ opacity: 0;
+ transition: all var(--ant-motion-duration-slow) ease-out;
+ pointer-events: none;
+ position: absolute;
+ left: 0;
+ width: 0; /* Dynamic width managed by JS usually, but styled here */
}
- /* Range Picker Specific */
.rc-picker-range.rc-picker-focused .rc-picker-active-bar {
opacity: 1;
}
-
+
.rc-picker-range-separator {
align-items: center;
padding: 0 8px;
line-height: 1;
- color: var(--color-gray-400);
+ color: var(--ant-color-text-quaternary);
display: inline-flex;
}
- .rc-picker-active-bar {
- bottom: -1px;
- height: 2px;
- margin-left: var(--input-padding-x); /* Align with input start */
- background: var(--color-brand-500);
- opacity: 0;
- transition: all 0.3s ease-out;
- pointer-events: none;
- z-index: 2;
- position: absolute;
- left: 0;
- width: auto;
- }
-
- /* =========================================
- PICKER DROPDOWN PANEL (THE MEAT)
- ========================================= */
+ /* --------------------------------------------------------------------------
+ Dropdown Panel
+ -------------------------------------------------------------------------- */
.rc-picker-dropdown {
- position: absolute;
- z-index: 1050;
box-sizing: border-box;
- font-size: var(--text-sm);
- font-family: inherit;
+ margin: 0;
+ padding: 0;
+ color: var(--ant-color-text);
+ font-size: var(--ant-font-size);
+ list-style: none;
+ position: absolute;
+ z-index: var(--ant-picker-z-index-popup);
+ top: -9999px;
+ left: -9999px;
}
.rc-picker-dropdown-hidden {
display: none;
}
-
- /* Arrow styling removed for modern clean look (AntD v5/v6 typically removes large arrows) */
- .rc-picker-dropdown .rc-picker-range-arrow {
- display: none;
- }
- /* Panel Container */
.rc-picker-panel-container {
overflow: hidden;
vertical-align: top;
- background: #fff;
- border-radius: var(--radius-lg);
- /* Elevation 3/4 equivalent */
- box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
- transition: margin 0.3s;
- border: 1px solid var(--color-gray-100);
+ background: var(--ant-color-bg-elevated);
+ border-radius: var(--ant-border-radius-lg);
+ box-shadow: var(--ant-box-shadow-secondary);
+ transition: margin var(--ant-motion-duration-slow);
+ display: inline-block;
+ pointer-events: auto;
}
-
+
+ /* Layout */
.rc-picker-panel-layout {
display: flex;
flex-wrap: nowrap;
align-items: stretch;
}
-
- .rc-picker-panel {
- vertical-align: top;
- background: transparent;
+
+ .rc-picker-panels {
display: inline-flex;
- flex-direction: column;
- }
-
- /* Double Panel (Range Picker) */
- .rc-picker-panel + .rc-picker-panel {
- border-left: 1px solid var(--color-gray-100);
+ flex-wrap: nowrap;
}
- /* =========================================
- HEADER SECTION
- ========================================= */
+ .rc-picker-panel {
+ display: inline-flex;
+ flex-direction: column;
+ text-align: center;
+ background: transparent;
+ outline: none;
+ vertical-align: top;
+ }
+
+ /* Header */
.rc-picker-header {
display: flex;
padding: 0 8px;
- border-bottom: 1px solid var(--color-gray-100);
- min-height: 40px;
- align-items: center;
- justify-content: space-between;
+ color: var(--ant-color-text-heading);
+ border-bottom: var(--ant-line-width) var(--ant-line-type) var(--ant-color-split);
+ min-width: var(--ant-picker-panel-width);
}
.rc-picker-header > * {
flex: none;
}
+ .rc-picker-header button {
+ padding: 0;
+ color: var(--ant-color-text-quaternary);
+ line-height: var(--ant-picker-text-height);
+ background: transparent;
+ border: 0;
+ cursor: pointer;
+ transition: color var(--ant-motion-duration-mid);
+ font-size: inherit;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 1.6em;
+ }
+
+ .rc-picker-header button:hover {
+ color: var(--ant-color-text);
+ }
+
.rc-picker-header-view {
flex: auto;
- text-align: center;
- font-weight: var(--font-weight-semibold);
+ font-weight: 600; /* Strong */
+ line-height: var(--ant-picker-text-height);
display: flex;
justify-content: center;
- gap: 4px;
}
.rc-picker-header-view button {
- color: var(--color-gray-800);
- font-weight: inheriting;
+ color: inherit;
+ font-weight: inherit;
+ min-width: auto;
padding: 0 4px;
- background: transparent;
- border: 0;
- cursor: pointer;
- font-size: var(--text-sm);
- line-height: 40px;
- transition: color 0.2s;
}
-
+
.rc-picker-header-view button:hover {
- color: var(--color-brand-500);
+ color: var(--ant-color-primary);
}
- /* Navigation Buttons (< << >> >) */
- .rc-picker-header-super-prev-btn,
- .rc-picker-header-prev-btn,
- .rc-picker-header-next-btn,
- .rc-picker-header-super-next-btn {
- min-width: 1.6em;
- font-size: 14px;
- color: var(--color-gray-400);
- cursor: pointer;
- background: transparent;
- border: 0;
- line-height: 40px;
- padding: 0 5px;
- display: inline-flex;
- justify-content: center;
- align-items: center;
- transition: color 0.2s;
+ /* Header Icons (Arrows) */
+ .rc-picker-prev-icon,
+ .rc-picker-next-icon,
+ .rc-picker-super-prev-icon,
+ .rc-picker-super-next-icon {
position: relative;
+ display: inline-block;
+ width: 7px;
+ height: 7px;
}
- .rc-picker-header-super-prev-btn:hover,
- .rc-picker-header-prev-btn:hover,
- .rc-picker-header-next-btn:hover,
- .rc-picker-header-super-next-btn:hover {
- color: var(--color-gray-900);
+ .rc-picker-prev-icon::before,
+ .rc-picker-next-icon::before,
+ .rc-picker-super-prev-icon::before,
+ .rc-picker-super-next-icon::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 7px;
+ height: 7px;
+ border: 0 solid currentColor;
+ border-block-start-width: 1.5px;
+ border-inline-start-width: 1.5px;
+ content: '';
}
- /* Arrow Symbols using pseudo elements if needed, or rely on RC Picker default text symbols but styled */
- /* RC Picker default uses unicode arrows usually. */
+ .rc-picker-super-prev-icon::after,
+ .rc-picker-super-next-icon::after {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ display: inline-block;
+ width: 7px;
+ height: 7px;
+ border: 0 solid currentColor;
+ border-block-start-width: 1.5px;
+ border-inline-start-width: 1.5px;
+ content: '';
+ }
- /* =========================================
- BODY SECTION (CALENDAR GRID)
- ========================================= */
+ .rc-picker-prev-icon,
+ .rc-picker-super-prev-icon {
+ transform: rotate(-45deg);
+ }
+
+ .rc-picker-next-icon,
+ .rc-picker-super-next-icon {
+ transform: rotate(135deg);
+ }
+
+ /* Body */
.rc-picker-body {
padding: 8px 12px;
}
@@ -289,348 +433,314 @@
table-layout: fixed;
border-collapse: collapse;
}
-
+
.rc-picker-content th,
.rc-picker-content td {
position: relative;
- min-width: 24px;
- font-weight: 400;
+ min-width: var(--ant-picker-cell-width);
+ font-weight: normal;
}
-
+
.rc-picker-content th {
- height: 32px;
- color: var(--color-gray-500);
- line-height: 32px;
- text-align: center;
+ height: 30px;
+ color: var(--ant-color-text);
+ vertical-align: middle;
}
-
+
+ /* Cells */
.rc-picker-cell {
- padding: 4px 0;
- color: var(--color-gray-400);
+ padding: 3px 0;
+ color: var(--ant-color-text-disabled);
cursor: pointer;
}
-
+
.rc-picker-cell-in-view {
- color: var(--color-gray-800);
+ color: var(--ant-color-text);
}
-
- .rc-picker-cell-disabled {
- cursor: not-allowed;
- color: var(--disabled-text);
- }
- .rc-picker-cell-disabled .rc-picker-cell-inner {
- background: var(--disabled-bg);
+
+ .rc-picker-cell::before {
+ position: absolute;
+ top: 50%;
+ left: 0;
+ right: 0;
+ z-index: 1;
+ height: var(--ant-picker-cell-height);
+ transform: translateY(-50%);
+ content: '';
+ pointer-events: none;
}
- /* Inner Cell (The Circle/Square) */
.rc-picker-cell-inner {
position: relative;
z-index: 2;
display: inline-block;
- min-width: 24px;
- height: 24px;
- line-height: 24px;
- border-radius: var(--radius-md); /* Ant Design v5 uses slightly rounded squares, not full circles usually, but we can do md radius */
- transition: background 0.2s, border 0.2s, color 0.2s;
- text-align: center;
- margin: 0 auto;
- padding: 0 4px; /* For longer text like months */
- }
-
- /* Month/Year Panel cells are wider */
- .rc-picker-month-panel .rc-picker-cell-inner,
- .rc-picker-year-panel .rc-picker-cell-inner,
- .rc-picker-quarter-panel .rc-picker-cell-inner,
- .rc-picker-decade-panel .rc-picker-cell-inner {
- width: auto;
- padding: 0 12px;
- min-width: 48px;
+ min-width: var(--ant-picker-cell-height);
+ height: var(--ant-picker-cell-height);
+ line-height: var(--ant-picker-cell-height);
+ border-radius: var(--ant-border-radius-sm);
+ transition: background-color var(--ant-motion-duration-mid);
}
- /* Hover State */
- .rc-picker-cell:hover:not(.rc-picker-cell-selected):not(.rc-picker-cell-range-start):not(.rc-picker-cell-range-end):not(.rc-picker-cell-disabled) .rc-picker-cell-inner {
- background: var(--color-gray-100);
- }
-
- /* Selected Date */
- .rc-picker-cell-selected .rc-picker-cell-inner,
- .rc-picker-cell-range-start .rc-picker-cell-inner,
- .rc-picker-cell-range-end .rc-picker-cell-inner {
- color: #fff;
- background: var(--color-brand-500);
- box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
- }
-
- .rc-picker-cell-selected:hover .rc-picker-cell-inner {
- background: var(--color-brand-600);
+ /* Cell States */
+ .rc-picker-cell:hover:not(.rc-picker-cell-in-view):not(.rc-picker-cell-disabled) .rc-picker-cell-inner,
+ .rc-picker-cell:hover:not(.rc-picker-cell-selected):not(.rc-picker-cell-range-start):not(
+ .rc-picker-cell-range-end
+ ):not(.rc-picker-cell-disabled)
+ .rc-picker-cell-inner {
+ background: var(--ant-picker-cell-hover-bg);
}
/* Today */
- .rc-picker-cell-today .rc-picker-cell-inner::before {
+ .rc-picker-cell-in-view.rc-picker-cell-today .rc-picker-cell-inner::before {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
- border: 1px solid var(--color-brand-500);
- border-radius: var(--radius-md);
+ border: 1px solid var(--ant-color-primary);
+ border-radius: var(--ant-border-radius-sm);
content: '';
- transition: all 0.2s;
- }
-
- .rc-picker-cell-selected.rc-picker-cell-today .rc-picker-cell-inner::before {
- border-color: #fff; /* White border inside selected today */
}
- /* =========================================
- RANGE SELECTION STYLING
- ========================================= */
-
- /* The strip between start and end */
- .rc-picker-cell-in-range > .rc-picker-cell-inner {
- background: var(--color-brand-50);
- border-radius: 0;
- min-width: 100%; /* Fill the whole cell width */
- color: var(--color-gray-800);
- }
-
- .rc-picker-cell-in-range::before {
- background: var(--color-brand-50);
+ /* Selected / Range Start / Range End */
+ .rc-picker-cell-in-view.rc-picker-cell-selected .rc-picker-cell-inner,
+ .rc-picker-cell-in-view.rc-picker-cell-range-start .rc-picker-cell-inner,
+ .rc-picker-cell-in-view.rc-picker-cell-range-end .rc-picker-cell-inner {
+ color: var(--ant-color-text-light-solid);
+ background: var(--ant-color-primary);
}
- /* Range Edge Adjustments */
- .rc-picker-cell-range-start > .rc-picker-cell-inner {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-top-left-radius: var(--radius-md);
- border-bottom-left-radius: var(--radius-md);
- }
-
- .rc-picker-cell-range-end > .rc-picker-cell-inner {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- border-top-right-radius: var(--radius-md);
- border-bottom-right-radius: var(--radius-md);
+ /* In Range Background */
+ .rc-picker-cell-in-view.rc-picker-cell-in-range::before,
+ .rc-picker-cell-in-view.rc-picker-cell-range-start::before,
+ .rc-picker-cell-in-view.rc-picker-cell-range-end::before {
+ background: var(--ant-picker-cell-active-with-range-bg);
}
- /* Ghost/Pseudo elements for continuous range background */
- /* RC Picker handles this logic via class combinations.
- We need to ensure the background flows nicely. */
-
- .rc-picker-cell-range-start.rc-picker-cell-range-end .rc-picker-cell-inner {
- border-radius: var(--radius-md);
+ .rc-picker-cell-in-view.rc-picker-cell-range-start:not(.rc-picker-cell-range-end) .rc-picker-cell-inner {
+ border-start-end-radius: 0;
+ border-end-end-radius: 0;
}
- /* Range Hover (when selecting the second date) */
- .rc-picker-cell-range-hover-start::after,
- .rc-picker-cell-range-hover-end::after,
- .rc-picker-cell-range-hover::after {
- content: ""; /* Should show dotted line or lighter highlight */
- position: absolute;
- top: 50%;
- left: 0;
- right: 0;
- bottom: 0;
- border-top: 2px dashed var(--color-brand-300);
- transform: translateY(-50%);
- z-index: 0;
- display: none; /* AntD v6 doesn't really emphasize this as much, can keep simple */
+ .rc-picker-cell-in-view.rc-picker-cell-range-end:not(.rc-picker-cell-range-start) .rc-picker-cell-inner {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
}
+ /* Disabled Cell */
+ .rc-picker-cell-disabled {
+ color: var(--ant-color-text-disabled);
+ cursor: not-allowed;
+ }
- /* =========================================
- TIME PANEL
- ========================================= */
+ .rc-picker-cell-disabled .rc-picker-cell-inner {
+ background: transparent;
+ }
+
+ .rc-picker-cell-disabled::before {
+ background: var(--ant-color-bg-layout);
+ }
+
+ /* --------------------------------------------------------------------------
+ Special Panels (Year, Quarter, Month, Decade)
+ -------------------------------------------------------------------------- */
+ .rc-picker-year-panel .rc-picker-body,
+ .rc-picker-quarter-panel .rc-picker-body,
+ .rc-picker-month-panel .rc-picker-body {
+ padding: 0 8px;
+ }
+
+ .rc-picker-year-panel .rc-picker-cell-inner,
+ .rc-picker-quarter-panel .rc-picker-cell-inner,
+ .rc-picker-month-panel .rc-picker-cell-inner {
+ width: var(--ant-picker-year-month-cell-width);
+ padding: 0 8px;
+ }
+
+ .rc-picker-decade-panel .rc-picker-cell-inner {
+ padding: 0 4px;
+ }
+
+ .rc-picker-decade-panel .rc-picker-cell::before {
+ display: none;
+ }
+
+ /* --------------------------------------------------------------------------
+ Time Panel
+ -------------------------------------------------------------------------- */
.rc-picker-time-panel {
- border-left: 1px solid var(--color-gray-100);
+ display: flex;
+ flex-direction: column;
width: auto;
+ min-width: auto;
}
-
+
.rc-picker-time-panel .rc-picker-content {
display: flex;
- max-height: 224px;
+ flex: auto;
height: 224px;
+ overflow: hidden;
}
-
+
.rc-picker-time-panel-column {
flex: 1 0 auto;
- width: 60px; /* Wider for easier clicking */
- margin: 0;
+ width: 56px;
+ margin: 4px 0;
padding: 0;
overflow-y: hidden;
- text-align: left;
+ text-align: start;
list-style: none;
- transition: background 0.3s;
+ transition: background-color var(--ant-motion-duration-mid);
overflow-x: hidden;
- border-left: 1px solid var(--color-gray-100); /* Separator between hrs/min/sec */
+ border-left: 1px solid var(--ant-color-split);
}
-
+
.rc-picker-time-panel-column:first-child {
- border-left: 0;
+ border-left: none;
}
.rc-picker-time-panel-column:hover {
overflow-y: auto;
}
-
+
.rc-picker-time-panel-column > li {
margin: 0;
padding: 0;
}
-
- .rc-picker-time-panel-column > li .rc-picker-time-panel-cell-inner {
+
+ .rc-picker-time-panel-cell .rc-picker-time-panel-cell-inner {
display: block;
width: 100%;
height: 28px;
margin: 0;
padding: 0 0 0 12px;
- color: var(--color-gray-800);
+ color: var(--ant-color-text);
line-height: 28px;
- text-align: left;
+ border-radius: var(--ant-border-radius-sm);
cursor: pointer;
- transition: background 0.2s;
- }
-
- .rc-picker-time-panel-column > li:hover .rc-picker-time-panel-cell-inner {
- background: var(--color-gray-100);
- }
-
- .rc-picker-time-panel-column > li.rc-picker-time-panel-cell-selected .rc-picker-time-panel-cell-inner {
- background: var(--color-brand-50);
- color: var(--color-brand-600);
- font-weight: 600;
- }
-
- .rc-picker-time-panel-column > li.rc-picker-time-panel-cell-disabled .rc-picker-time-panel-cell-inner {
- color: var(--disabled-text);
- cursor: not-allowed;
- background: transparent;
+ transition: background-color var(--ant-motion-duration-mid);
}
- /* Date + Time Layout */
- .rc-picker-datetime-panel {
- display: flex;
- }
- .rc-picker-datetime-panel .rc-picker-date-panel,
- .rc-picker-datetime-panel .rc-picker-time-panel {
- transition: opacity 0.3s;
+ .rc-picker-time-panel-cell:hover .rc-picker-time-panel-cell-inner {
+ background: var(--ant-picker-cell-hover-bg);
}
- /* =========================================
- FOOTER
- ========================================= */
+ .rc-picker-time-panel-cell-selected .rc-picker-time-panel-cell-inner {
+ background: var(--ant-picker-cell-active-with-range-bg);
+ }
+
+ /* --------------------------------------------------------------------------
+ Footer
+ -------------------------------------------------------------------------- */
.rc-picker-footer {
- width: auto;
+ width: min-content;
min-width: 100%;
line-height: 38px;
text-align: center;
- border-top: 1px solid var(--color-gray-100);
- padding: 0 12px;
+ border-top: 1px solid var(--ant-color-split);
}
-
+
.rc-picker-footer-extra {
- text-align: left;
+ padding: 0 12px;
+ line-height: 38px;
+ text-align: start;
}
-
- /* Ranges (Presets) */
+
.rc-picker-ranges {
margin: 0;
- padding: 0;
- list-style: none;
+ padding: 4px 12px;
overflow: hidden;
+ list-style: none;
display: flex;
justify-content: space-between;
align-items: center;
}
-
- .rc-picker-ranges > li {
- display: inline-block;
- }
-
- .rc-picker-ranges .rc-picker-preset > .rc-picker-preset-tag {
- display: inline-block;
- margin-right: 8px;
- color: var(--color-brand-500);
- cursor: pointer;
- transition: color 0.2s;
- }
-
- .rc-picker-ranges .rc-picker-preset > .rc-picker-preset-tag:hover {
- color: var(--color-brand-600);
- }
-
- .rc-picker-ranges .rc-picker-ok {
- float: right;
- }
-
- /* OK Button */
- .rc-picker-ok button {
- background: var(--color-brand-500);
- color: #fff;
- border: none;
- border-radius: var(--radius-sm);
- padding: 2px 12px;
- height: 24px;
- cursor: pointer;
- font-size: var(--text-sm);
- transition: background 0.2s;
- }
-
- .rc-picker-ok button:hover {
- background: var(--color-brand-600);
- }
-
- .rc-picker-ok button:disabled {
- background: var(--disabled-bg);
- color: var(--disabled-text);
- cursor: not-allowed;
- }
.rc-picker-now-btn {
- color: var(--color-brand-500);
+ color: var(--ant-color-primary);
cursor: pointer;
- transition: color 0.2s;
- }
- .rc-picker-now-btn:hover {
- color: var(--color-brand-600);
}
-
- /* =========================================
- STATUS MODIFIERS (ERROR, WARNING, ETC)
- ========================================= */
-
- .picker-status-error.rc-picker {
- border-color: var(--color-error-500);
- }
- .picker-status-error.rc-picker:hover:not(.rc-picker-disabled) {
- border-color: var(--color-error-600);
- }
- .picker-status-error.rc-picker.rc-picker-focused {
- border-color: var(--color-error-600);
- box-shadow: 0 0 0 3px var(--color-error-100);
+ .rc-picker-ok {
+ margin-inline-start: auto;
}
- .picker-status-warning.rc-picker {
- border-color: var(--color-warning-500);
- }
- .picker-status-warning.rc-picker:hover:not(.rc-picker-disabled) {
- border-color: var(--color-warning-600);
- }
- .picker-status-warning.rc-picker.rc-picker-focused {
- border-color: var(--color-warning-600);
- box-shadow: 0 0 0 3px var(--color-warning-100);
+ /* --------------------------------------------------------------------------
+ Variants
+ -------------------------------------------------------------------------- */
+ .rc-picker-borderless {
+ background: transparent;
+ border-color: transparent;
+ box-shadow: none !important;
}
- .picker-status-success.rc-picker {
- border-color: var(--color-success-500);
+ .rc-picker-filled {
+ background: var(--ant-color-bg-layout);
+ border-color: transparent;
}
- .picker-status-success.rc-picker:hover:not(.rc-picker-disabled) {
- border-color: var(--color-success-600);
+
+ .rc-picker-filled:hover,
+ .rc-picker-filled.rc-picker-focused {
+ background: var(--ant-color-bg-container);
+ border-color: var(--ant-color-primary);
}
- .picker-status-success.rc-picker.rc-picker-focused {
- border-color: var(--color-success-600);
- box-shadow: 0 0 0 3px var(--color-success-100);
+
+ /* --------------------------------------------------------------------------
+ Status
+ -------------------------------------------------------------------------- */
+ .rc-picker-status-error {
+ border-color: var(--ant-color-error) !important;
+ }
+
+ .rc-picker-status-error.rc-picker-focused {
+ box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);
+ }
+
+ .rc-picker-status-warning {
+ border-color: var(--ant-color-warning) !important;
+ }
+
+ .rc-picker-status-warning.rc-picker-focused {
+ box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);
+ }
+
+ /* --------------------------------------------------------------------------
+ Multiple
+ -------------------------------------------------------------------------- */
+ .rc-picker-multiple .rc-picker-selector {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ width: 100%;
+ padding: 1px 4px;
+ }
+
+ .rc-picker-multiple .rc-picker-selection-item {
+ display: flex;
+ align-items: center;
+ height: 24px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ margin-inline-end: 4px;
+ padding-inline-start: 8px;
+ padding-inline-end: 4px;
+ background: var(--ant-color-bg-layout);
+ border-radius: var(--ant-border-radius-sm);
+ cursor: default;
+ line-height: 22px;
+ }
+
+ .rc-picker-multiple .rc-picker-selection-item-remove {
+ color: var(--ant-color-text-quaternary);
+ font-size: 10px;
+ cursor: pointer;
+ display: inline-flex;
+ margin-left: 4px;
+ transition: color var(--ant-motion-duration-mid);
+ }
+
+ .rc-picker-multiple .rc-picker-selection-item-remove:hover {
+ color: var(--ant-color-text-tertiary);
}
}
diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts
index af24e8b..9a6ad6a 100644
--- a/packages/ui/src/index.ts
+++ b/packages/ui/src/index.ts
@@ -1,2 +1,5 @@
-// components
-export * from "./components";
+// UI Components
+export * from './components';
+
+// UI utils
+export * from './utils/cn';
diff --git a/packages/ui/src/providers/ui-provider.tsx b/packages/ui/src/providers/ui-provider.tsx
new file mode 100644
index 0000000..43d6330
--- /dev/null
+++ b/packages/ui/src/providers/ui-provider.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+import { ConfigProvider, App } from 'antd';
+
+export const UIProvider = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+ {children}
+
+ );
+};
diff --git a/packages/ui/src/utils/cn.ts b/packages/ui/src/utils/cn.ts
new file mode 100644
index 0000000..563be8c
--- /dev/null
+++ b/packages/ui/src/utils/cn.ts
@@ -0,0 +1,11 @@
+import { type ClassValue, clsx } from 'clsx';
+import { twMerge } from 'tailwind-merge';
+
+/**
+ * Intelligently merges classnames.
+ * 1. clsx: handles conditional logic (true/false)
+ * 2. twMerge: removes conflicting Tailwind classes
+ */
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1e05bbf..c32a62f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -161,6 +161,9 @@ importers:
packages/ui:
dependencies:
+ '@ant-design/icons':
+ specifier: ^6.1.0
+ version: 6.1.0(react-dom@19.2.3)(react@19.2.3)
'@rc-component/checkbox':
specifier: ^1.0.1
version: 1.0.1(react-dom@19.2.3)(react@19.2.3)
@@ -188,6 +191,12 @@ importers:
'@tailwindcss/vite':
specifier: ^4.1.18
version: 4.1.18(vite@5.4.17)
+ antd:
+ specifier: ^6.2.3
+ version: 6.2.3(react-dom@19.2.3)(react@19.2.3)
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
dayjs:
specifier: ^1.11.19
version: 1.11.19
@@ -265,6 +274,80 @@ importers:
packages:
+ /@ant-design/colors@8.0.1:
+ resolution: {integrity: sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==}
+ dependencies:
+ '@ant-design/fast-color': 3.0.1
+ dev: false
+
+ /@ant-design/cssinjs-utils@2.0.2(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-Mq3Hm6fJuQeFNKSp3+yT4bjuhVbdrsyXE2RyfpJFL0xiYNZdaJ6oFaE3zFrzmHbmvTd2Wp3HCbRtkD4fU+v2ZA==}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ dependencies:
+ '@ant-design/cssinjs': 2.0.3(react-dom@19.2.3)(react@19.2.3)
+ '@babel/runtime': 7.28.4
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@ant-design/cssinjs@2.0.3(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-HAo8SZ3a6G8v6jT0suCz1270na6EA3obeJWM4uzRijBhdwdoMAXWK2f4WWkwB28yUufsfk3CAhN1coGPQq4kNQ==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@emotion/hash': 0.8.0
+ '@emotion/unitless': 0.7.5
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ csstype: 3.2.3
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ stylis: 4.3.6
+ dev: false
+
+ /@ant-design/fast-color@3.0.1:
+ resolution: {integrity: sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==}
+ engines: {node: '>=8.x'}
+ dev: false
+
+ /@ant-design/icons-svg@4.4.2:
+ resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
+ dev: false
+
+ /@ant-design/icons@6.1.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-KrWMu1fIg3w/1F2zfn+JlfNDU8dDqILfA5Tg85iqs1lf8ooyGlbkA+TkwfOKKgqpUmAiRY1PTFpuOU2DAIgSUg==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+ dependencies:
+ '@ant-design/colors': 8.0.1
+ '@ant-design/icons-svg': 4.4.2
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@ant-design/react-slick@2.0.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==}
+ peerDependencies:
+ react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ dependencies:
+ '@babel/runtime': 7.28.4
+ clsx: 2.1.1
+ json2mq: 0.2.0
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ throttle-debounce: 5.0.2
+ dev: false
+
/@babel/code-frame@7.27.1:
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
@@ -468,6 +551,14 @@ packages:
dev: false
optional: true
+ /@emotion/hash@0.8.0:
+ resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
+ dev: false
+
+ /@emotion/unitless@0.7.5:
+ resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
+ dev: false
+
/@esbuild/aix-ppc64@0.21.5:
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
@@ -1160,6 +1251,20 @@ packages:
'@babel/runtime': 7.28.4
dev: false
+ /@rc-component/cascader@1.11.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-VDiEsskThWi8l0/1Nquc9I4ytcMKQYAb9Jkm6wiX5O5fpcMRsm+b8OulBMbr/b4rFTl/2y2y4GdKqQ+2whD+XQ==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ '@rc-component/select': 1.5.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/tree': 1.1.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/checkbox@1.0.1(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-08yTH8m+bSm8TOqbybbJ9KiAuIATti6bDs2mVeSfu4QfEnyeF6X0enHVvD1NEAyuBWEAo56QtLe++MYs2D9XiQ==}
peerDependencies:
@@ -1172,6 +1277,85 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/collapse@1.2.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-ZRYSKSS39qsFx93p26bde7JUZJshsUBEQRlRXPuJYlAiNX0vyYlF5TsAm8JZN3LcF8XvKikdzPbgAtXSbkLUkw==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/color-picker@3.0.3(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-V7gFF9O7o5XwIWafdbOtqI4BUUkEUkgdBwp6favy3xajMX/2dDqytFaiXlcwrpq6aRyPLp5dKLAG5RFKLXMeGA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@ant-design/fast-color': 3.0.1
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/context@2.0.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/dialog@1.8.2(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-CwDSjpjZ1FcgsdKFPuSoYfi9Vbt2bp+ak4Pzkwq4APQC8DopJKWetRu1V+HE9vI1CNAeqvT5WAvAxE6RiDhl7A==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/drawer@1.4.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-kNJQie/QjJO5wGeWrZQwSGeuo8staxXx1nYN+dpK2UY7i8teo5PQdZ6ukKSnnW9vmPXsLn3F5nKYRbf43e8+5g==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/dropdown@1.0.2(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==}
+ peerDependencies:
+ react: '>=16.11.0'
+ react-dom: '>=16.11.0'
+ dependencies:
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/form@1.6.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-OgIn2RAoaSBqaIgzJf/X6iflIa9LpTozci1lagLBdURDFhGA370v0+T0tXxOi8YShMjTha531sFhwtnrv+EJaQ==}
engines: {node: '>=8.x'}
@@ -1186,6 +1370,20 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/image@1.6.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-tSfn2ZE/oP082g4QIOxeehkmgnXB7R+5AFj/lIFr4k7pEuxHBdyGIq9axoCY9qea8NN0DY6p4IB/F07tLqaT5A==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/input-number@1.6.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==}
peerDependencies:
@@ -1211,6 +1409,37 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/mentions@1.6.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-KIkQNP6habNuTsLhUv0UGEOwG67tlmE7KNIJoQZZNggEZl5lQJTytFDb69sl5CK3TDdISCTjKP3nGEBKgT61CQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/input': 1.1.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/menu': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/textarea': 1.1.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/menu@1.2.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-VWwDuhvYHSnTGj4n6bV3ISrLACcPAzdPOq3d0BzkeiM5cve8BEYfvkEhNoM0PLzv51jpcejeyrLXeMVIJ+QJlg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/overflow': 1.0.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/mini-decimal@1.1.0:
resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==}
engines: {node: '>=8.x'}
@@ -1218,6 +1447,18 @@ packages:
'@babel/runtime': 7.28.4
dev: false
+ /@rc-component/motion@1.1.6(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-aEQobs/YA0kqRvHIPjQvOytdtdRVyhf/uXAal4chBjxDu6odHckExJzjn2D+Ju1aKK6hx3pAs6BXdV9+86xkgQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/motion@1.2.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-Vx+OL3I1l3HWflc1miXgjeFR9OnStKD8FOMLJCdby3I6HAOi8jo7of7iqF4hqvxQhoP31RTlNk+C+v5QjytAVg==}
peerDependencies:
@@ -1230,6 +1471,32 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/mutate-observer@2.0.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/notification@1.2.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-OX3J+zVU7rvoJCikjrfW7qOUp7zlDeFBK2eA3SFbGSkDqo63Sl4Ss8A04kFP+fxHSxMDIS9jYVEZtU1FNCFuBA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/overflow@1.0.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-GSlBeoE0XTBi5cf3zl8Qh7Uqhn7v8RrlJ8ajeVpEkNe94HWy5l5BQ0Mwn2TVUq9gdgbfEMUmTX7tJFAg7mz0Rw==}
peerDependencies:
@@ -1244,6 +1511,18 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/pagination@1.2.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/picker@1.9.0(dayjs@1.11.19)(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-OLisdk8AWVCG9goBU1dWzuH5QlBQk8jktmQ6p0/IyBFwdKGwyIZOSjnBYo8hooHiTdl0lU+wGf/OfMtVBw02KQ==}
engines: {node: '>=12.x'}
@@ -1287,6 +1566,43 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/progress@1.0.2(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/qrcode@1.1.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@babel/runtime': 7.28.4
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/rate@1.0.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/resize-observer@1.1.1(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-NfXXMmiR+SmUuKE1NwJESzEUYUFWIDUn2uXpxCTOLwiRUUakd62DRNFjRJArgzyFW8S5rsL4aX5XlyIXyC/vRA==}
peerDependencies:
@@ -1298,6 +1614,62 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/segmented@1.3.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-5J/bJ01mbDnoA6P/FW8SxUvKn+OgUSTZJPzCNnTBntG50tzoP7DydGhqxp7ggZXZls7me3mc2EQDXakU3iTVFg==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/select@1.5.2(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-7wqD5D4I2+fc5XoB4nzDDK656QPlDnFAUaxLljkU1wwSpi4+MZxndv9vgg7NQfveuuf0/ilUdOjuPg7NPl7Mmg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+ dependencies:
+ '@rc-component/overflow': 1.0.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/slider@1.0.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/steps@1.2.2(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/switch@1.0.3(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==}
peerDependencies:
@@ -1310,6 +1682,39 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/table@1.9.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-FVI5ZS/GdB3BcgexfCYKi3iHhZS3Fr59EtsxORszYGrfpH1eWr33eDNSYkVfLI6tfJ7vftJDd9D5apfFWqkdJg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ '@rc-component/context': 2.0.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/tabs@1.7.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-J48cs2iBi7Ho3nptBxxIqizEliUC+ExE23faspUQKGQ550vaBlv3aGF8Epv/UB1vFWeoJDTW/dNzgIU0Qj5i/w==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/dropdown': 1.0.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/menu': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/textarea@1.1.2(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==}
peerDependencies:
@@ -1324,6 +1729,63 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/tooltip@1.4.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/tour@2.3.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-K04K9r32kUC+auBSQfr+Fss4SpSIS9JGe56oq/ALAX0p+i2ylYOI1MgR83yBY7v96eO6ZFXcM/igCQmubps0Ow==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/tree-select@1.6.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-UvEGmZT+gcVvRwImAZg3/sXw9nUdn4FmCs1rSIMWjEXEIAo0dTGmIyWuLCvs+1rGe9AZ7CHMPiQUEbdadwV0fw==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+ dependencies:
+ '@rc-component/select': 1.5.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/tree': 1.1.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
+ /@rc-component/tree@1.1.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-HZs3aOlvFgQdgrmURRc/f4IujiNBf4DdEeXUlkS0lPoLlx9RoqsZcF0caXIAMVb+NaWqKtGQDnrH8hqLCN5zlA==}
+ engines: {node: '>=10.x'}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+ dependencies:
+ '@rc-component/motion': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/trigger@3.9.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==}
engines: {node: '>=8.x'}
@@ -1340,6 +1802,18 @@ packages:
react-dom: 19.2.3(react@19.2.3)
dev: false
+ /@rc-component/upload@1.1.0(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rc-component/util@1.7.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-tIvIGj4Vl6fsZFvWSkYw9sAfiCKUXMyhVz6kpKyZbwyZyRPqv2vxYZROdaO1VB4gqTNvUZFXh6i3APUiterw5g==}
peerDependencies:
@@ -1352,6 +1826,33 @@ packages:
react-is: 18.3.1
dev: false
+ /@rc-component/util@1.8.1(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-Ku6BzF0Ov5L9U3ewFJZDQ//iWCR2nIkLBBiYSrhxIVl3PqeUqiYP2W8gNI8qoKAFQKZdYcS0+B6+SQTDtv/erw==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ is-mobile: 5.0.0
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ react-is: 18.3.1
+ dev: false
+
+ /@rc-component/virtual-list@1.0.2(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-uvTol/mH74FYsn5loDGJxo+7kjkO4i+y4j87Re1pxJBs0FaeuMuLRzQRGaXwnMcV1CxpZLi2Z56Rerj2M00fjQ==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ dev: false
+
/@rolldown/pluginutils@1.0.0-beta.53:
resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
dev: true
@@ -3073,6 +3574,68 @@ packages:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
+ /antd@6.2.3(react-dom@19.2.3)(react@19.2.3):
+ resolution: {integrity: sha512-q92r7/hcQAR2iv6CCysdz7c2Pdl/3nhslc3azF9e6AEl4knO6v+nlaeor1oF2jBanZ/tiw2m3NprOVUgPDvyhg==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+ dependencies:
+ '@ant-design/colors': 8.0.1
+ '@ant-design/cssinjs': 2.0.3(react-dom@19.2.3)(react@19.2.3)
+ '@ant-design/cssinjs-utils': 2.0.2(react-dom@19.2.3)(react@19.2.3)
+ '@ant-design/fast-color': 3.0.1
+ '@ant-design/icons': 6.1.0(react-dom@19.2.3)(react@19.2.3)
+ '@ant-design/react-slick': 2.0.0(react-dom@19.2.3)(react@19.2.3)
+ '@babel/runtime': 7.28.4
+ '@rc-component/cascader': 1.11.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/checkbox': 1.0.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/collapse': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/color-picker': 3.0.3(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/dialog': 1.8.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/drawer': 1.4.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/dropdown': 1.0.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/form': 1.6.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/image': 1.6.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/input': 1.1.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/input-number': 1.6.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/mentions': 1.6.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/menu': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/mutate-observer': 2.0.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/notification': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/pagination': 1.2.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/picker': 1.9.0(dayjs@1.11.19)(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/progress': 1.0.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/qrcode': 1.1.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/rate': 1.0.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/segmented': 1.3.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/select': 1.5.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/slider': 1.0.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/steps': 1.2.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/switch': 1.0.3(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/table': 1.9.1(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/tabs': 1.7.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/textarea': 1.1.2(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/tooltip': 1.4.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/tour': 2.3.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/tree': 1.1.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/tree-select': 1.6.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/upload': 1.1.0(react-dom@19.2.3)(react@19.2.3)
+ '@rc-component/util': 1.8.1(react-dom@19.2.3)(react@19.2.3)
+ clsx: 2.1.1
+ dayjs: 1.11.19
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ scroll-into-view-if-needed: 3.1.0
+ throttle-debounce: 5.0.2
+ transitivePeerDependencies:
+ - date-fns
+ - luxon
+ - moment
+ dev: false
+
/arch@2.2.0:
resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
dev: true
@@ -3452,6 +4015,10 @@ packages:
- supports-color
dev: true
+ /compute-scroll-into-view@3.1.1:
+ resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
+ dev: false
+
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -3492,7 +4059,6 @@ packages:
/csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- dev: true
/damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
@@ -5136,6 +5702,12 @@ packages:
/json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ /json2mq@0.2.0:
+ resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==}
+ dependencies:
+ string-convert: 0.2.1
+ dev: false
+
/json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
@@ -6641,6 +7213,12 @@ packages:
/scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+ /scroll-into-view-if-needed@3.1.0:
+ resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
+ dependencies:
+ compute-scroll-into-view: 3.1.1
+ dev: false
+
/semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
@@ -6874,6 +7452,10 @@ packages:
- utf-8-validate
dev: true
+ /string-convert@0.2.1:
+ resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==}
+ dev: false
+
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -7021,6 +7603,10 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ /stylis@4.3.6:
+ resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
+ dev: false
+
/supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -7073,6 +7659,11 @@ packages:
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ /throttle-debounce@5.0.2:
+ resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
+ engines: {node: '>=12.22'}
+ dev: false
+
/tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
dev: true