@jerry-fd/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +162 -0
- package/antd-data-filter.d.ts +84 -0
- package/antd-data-filter.js +3 -0
- package/chunk-75LTHX75.js +1 -0
- package/index.d.ts +31 -0
- package/index.js +1 -0
- package/motion-features-PPUUMXEA.js +1 -0
- package/package.json +38 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT LICENSE
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
A powerful and flexible data filter component library for React, providing multiple filter types with rich configuration options.
|
|
2
|
+
|
|
3
|
+
> ⚠️ **Note**: This is a client-side only component library. It does not support Server-Side Rendering (SSR) or React Server Components (RSC).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @jerry-fd/data-filter
|
|
9
|
+
|
|
10
|
+
# Install peer dependencies
|
|
11
|
+
npm install dayjs antd
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Features
|
|
15
|
+
|
|
16
|
+
- 📦 Multiple filter types (text, number, date, option, multi-option)
|
|
17
|
+
- 🎨 Customizable UI with modern design
|
|
18
|
+
- 🔍 Built-in search functionality
|
|
19
|
+
- 📅 Date picker with single and range modes
|
|
20
|
+
- 🔢 Number filter with single and range modes
|
|
21
|
+
- 🎯 Full TypeScript support
|
|
22
|
+
- ♿ Accessible (ARIA compliant)
|
|
23
|
+
- 🎛️ Controlled component with state management
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import React, { useState } from 'react';
|
|
29
|
+
import { DataFilter, FilterColumnDef, FiltersState } from '@jerry-fd/data-filter';
|
|
30
|
+
import '@jerry-fd/data-filter/styles';
|
|
31
|
+
import dayjs from 'dayjs';
|
|
32
|
+
|
|
33
|
+
function App() {
|
|
34
|
+
const [filters, setFilters] = useState<FiltersState>([]);
|
|
35
|
+
|
|
36
|
+
const columns: FilterColumnDef[] = [
|
|
37
|
+
{
|
|
38
|
+
type: 'text',
|
|
39
|
+
columnId: 'name',
|
|
40
|
+
displayName: 'Name',
|
|
41
|
+
icon: Heading1,
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<DataFilter
|
|
47
|
+
columns={columns}
|
|
48
|
+
filters={filters}
|
|
49
|
+
onFiltersChange={setFilters}
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Example
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
import type { FilterColumnDef, FilterColumnOption, FiltersState } from '@jerry-fd/data-filter';
|
|
59
|
+
import { DataFilter } from '@jerry-fd/data-filter';
|
|
60
|
+
import dayjs from 'dayjs';
|
|
61
|
+
|
|
62
|
+
type DataSchema = {
|
|
63
|
+
id: number;
|
|
64
|
+
name: string;
|
|
65
|
+
status: string;
|
|
66
|
+
tags: string[];
|
|
67
|
+
date: Date;
|
|
68
|
+
score: number;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const filterColumns: FilterColumnDef<DataSchema>[] = [
|
|
72
|
+
{
|
|
73
|
+
type: 'text',
|
|
74
|
+
columnId: 'name',
|
|
75
|
+
displayName: 'Name',
|
|
76
|
+
icon: Heading1,
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
// Initialize with default filters (optional)
|
|
81
|
+
const defaultFilters: FiltersState = [
|
|
82
|
+
{
|
|
83
|
+
columnId: 'name',
|
|
84
|
+
type: 'text',
|
|
85
|
+
values: ['Search'],
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
function App() {
|
|
90
|
+
const [filters, setFilters] = useState<FiltersState>(defaultFilters);
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<DataFilter
|
|
94
|
+
columns={filterColumns}
|
|
95
|
+
filters={filters}
|
|
96
|
+
onFiltersChange={setFilters}
|
|
97
|
+
/>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default App;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## API Reference
|
|
105
|
+
|
|
106
|
+
### DataFilter Props
|
|
107
|
+
|
|
108
|
+
| Prop | Type | Description |
|
|
109
|
+
|------|------|-------------|
|
|
110
|
+
| `columns` | `FilterColumnDef[]` | Array of filter column definitions |
|
|
111
|
+
| `filters` | `FiltersState` | Current filter state (controlled) |
|
|
112
|
+
| `onFiltersChange` | `(filters: FiltersState) => void` | Callback when filters change |
|
|
113
|
+
|
|
114
|
+
### FilterColumnDef
|
|
115
|
+
|
|
116
|
+
Base properties for all filter types:
|
|
117
|
+
|
|
118
|
+
| Property | Type | Required | Description |
|
|
119
|
+
|----------|------|----------|-------------|
|
|
120
|
+
| `type` | `'text' \| 'number' \| 'date' \| 'option' \| 'multiOption'` | ✅ | Filter type |
|
|
121
|
+
| `columnId` | `string` | ✅ | Unique identifier for the filter |
|
|
122
|
+
| `displayName` | `string` | ✅ | Display name for the filter |
|
|
123
|
+
| `icon` | `React.ReactNode` | ❌ | Optional |
|
|
124
|
+
|
|
125
|
+
### Number/Date Filter Additional Props
|
|
126
|
+
|
|
127
|
+
| Property | Type | Required | Description |
|
|
128
|
+
|----------|------|----------|-------------|
|
|
129
|
+
| `mode` | `'single' \| 'range'` | ✅ | Single value or range selection |
|
|
130
|
+
| `min` | `number` | ❌ | Minimum value (number only) |
|
|
131
|
+
| `max` | `number` | ❌ | Maximum value (number only) |
|
|
132
|
+
| `showTime` | `boolean` | ❌ | Show time picker (date only) |
|
|
133
|
+
|
|
134
|
+
### Option Filter Additional Props
|
|
135
|
+
|
|
136
|
+
| Property | Type | Required | Description |
|
|
137
|
+
|----------|------|----------|-------------|
|
|
138
|
+
| `options` | `FilterColumnOption[]` | ✅ | Array of selectable options |
|
|
139
|
+
|
|
140
|
+
### FilterColumnOption
|
|
141
|
+
|
|
142
|
+
| Property | Type | Description |
|
|
143
|
+
|----------|------|-------------|
|
|
144
|
+
| `label` | `string` | Display label |
|
|
145
|
+
| `value` | `string` | Option value |
|
|
146
|
+
| `icon` | `React.ReactNode` | Optional icon or visual indicator |
|
|
147
|
+
|
|
148
|
+
### FiltersState
|
|
149
|
+
|
|
150
|
+
Array of active filter values:
|
|
151
|
+
|
|
152
|
+
```tsx
|
|
153
|
+
type FiltersState = Array<{
|
|
154
|
+
columnId: string;
|
|
155
|
+
type: 'text' | 'number' | 'date' | 'option' | 'multiOption';
|
|
156
|
+
values: any[];
|
|
157
|
+
}>;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## License
|
|
161
|
+
|
|
162
|
+
MIT
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React$1 from 'react';
|
|
3
|
+
import { Dayjs } from 'dayjs';
|
|
4
|
+
|
|
5
|
+
type IconSize = number | string;
|
|
6
|
+
type IconBaseProps = {
|
|
7
|
+
size?: IconSize;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
type IconType<P extends IconBaseProps = IconBaseProps> = React$1.ComponentType<P> | React$1.ReactElement<P>;
|
|
11
|
+
|
|
12
|
+
interface FilterColumnOption {
|
|
13
|
+
key?: React.Key;
|
|
14
|
+
label: string;
|
|
15
|
+
value: string;
|
|
16
|
+
icon?: React.ReactNode;
|
|
17
|
+
selected?: boolean;
|
|
18
|
+
}
|
|
19
|
+
type ColumnDataType = {
|
|
20
|
+
type: 'text';
|
|
21
|
+
options?: never;
|
|
22
|
+
};
|
|
23
|
+
type OptionBasedColumnDataType = {
|
|
24
|
+
type: 'option' | 'multiOption';
|
|
25
|
+
options: FilterColumnOption[];
|
|
26
|
+
};
|
|
27
|
+
type NumberBasedColumnDataType = {
|
|
28
|
+
type: 'number';
|
|
29
|
+
mode?: 'single' | 'range';
|
|
30
|
+
min?: number;
|
|
31
|
+
max?: number;
|
|
32
|
+
step?: number;
|
|
33
|
+
options?: never;
|
|
34
|
+
};
|
|
35
|
+
type DateBasedColumnDataType = {
|
|
36
|
+
type: 'date';
|
|
37
|
+
mode?: 'single' | 'range';
|
|
38
|
+
showTime?: boolean | {
|
|
39
|
+
format: 'HH:mm' | 'HH:mm:ss';
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
interface ColumnConfig<T> {
|
|
43
|
+
columnId: keyof T & string;
|
|
44
|
+
displayName: string;
|
|
45
|
+
icon?: IconType;
|
|
46
|
+
}
|
|
47
|
+
type ColumnDataTypes = ColumnDataType | DateBasedColumnDataType | NumberBasedColumnDataType | OptionBasedColumnDataType;
|
|
48
|
+
type FilterColumnDef<TData, TType extends ColumnDataTypes['type'] = ColumnDataTypes['type']> = ColumnConfig<TData> & (TType extends 'option' | 'multiOption' ? OptionBasedColumnDataType & {
|
|
49
|
+
type: TType;
|
|
50
|
+
} : TType extends 'number' ? NumberBasedColumnDataType & {
|
|
51
|
+
type: TType;
|
|
52
|
+
} : TType extends 'date' ? DateBasedColumnDataType & {
|
|
53
|
+
type: TType;
|
|
54
|
+
} : TType extends 'text' ? ColumnDataType & {
|
|
55
|
+
type: TType;
|
|
56
|
+
} : ColumnDataTypes);
|
|
57
|
+
type ColumnDataNativeMap = {
|
|
58
|
+
text: string;
|
|
59
|
+
number: number;
|
|
60
|
+
date: Dayjs;
|
|
61
|
+
option: string;
|
|
62
|
+
multiOption: string[];
|
|
63
|
+
};
|
|
64
|
+
type ElementType<T> = T extends (infer U)[] ? U : T;
|
|
65
|
+
type FilterValues<T extends ColumnDataTypes['type']> = Array<ElementType<ColumnDataNativeMap[T]>>;
|
|
66
|
+
type FilterModel<TType extends ColumnDataTypes['type'] = ColumnDataTypes['type']> = {
|
|
67
|
+
columnId: string;
|
|
68
|
+
type: TType;
|
|
69
|
+
values: FilterValues<TType>;
|
|
70
|
+
};
|
|
71
|
+
type FiltersState = Array<FilterModel>;
|
|
72
|
+
type UseDataFiltersProps = {
|
|
73
|
+
defaultFilters?: FiltersState;
|
|
74
|
+
filters?: FiltersState;
|
|
75
|
+
onFiltersChange?: React.Dispatch<React.SetStateAction<FiltersState>>;
|
|
76
|
+
};
|
|
77
|
+
type DataFilterProps<T> = UseDataFiltersProps & {
|
|
78
|
+
columns: FilterColumnDef<T>[];
|
|
79
|
+
className?: string;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
declare function DataFilter<TData>({ columns, filters, defaultFilters, className, onFiltersChange, }: DataFilterProps<TData>): react_jsx_runtime.JSX.Element;
|
|
83
|
+
|
|
84
|
+
export { DataFilter, type FilterColumnDef, type FilterColumnOption, type FiltersState };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {b,c}from'./chunk-75LTHX75.js';import {extendTailwindMerge}from'tailwind-merge';import {createTV,cn as cn$1}from'tailwind-variants';import F from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {Slot,Separator,Popover}from'radix-ui';import {Command}from'cmdk';import {DatePicker,Checkbox,Radio,Input,InputNumber}from'antd';import {m,AnimatePresence}from'motion/react';import $n from'react-use-measure';function xt(t,{insertAt:e}={}){if(typeof document>"u")return;let n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",e==="top"&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t));}xt(`/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */:root:not(#\\#),:host:not(#\\#){--color-red-500: rgb(251, 44, 54);--color-orange-500: rgb(252, 113, 0);--color-green-500: rgb(0, 198, 90);--color-teal-500: rgb(0, 185, 166);--color-purple-300: rgb(216, 180, 255);--color-pink-500: rgb(246, 51, 154);--color-neutral-50: hsl(216deg, 33.33%, 97.06%);--color-neutral-200: hsl(220deg, 17.65%, 90%);--color-neutral-300: hsl(218.57deg, 15.22%, 81.96%);--color-neutral-400: hsl(220deg, 11.48%, 64.12%);--color-neutral-600: hsl(222deg, 10.87%, 36.08%);--color-neutral-800: hsl(227.14deg, 17.07%, 16.08%);--color-neutral-950: hsl(221.54deg, 31.71%, 8.04%);--color-white: #fff;--spacing: 1px;--container-2xs: 18rem;--container-lg: 32rem;--container-xl: 36rem;--tracking-tight: -.025em;--tracking-widest: .1em;--radius-lg: .5rem;--radius-xl: .75rem;--radius-2xl: 1rem;--ease-out: cubic-bezier(0, 0, .2, 1);--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--color-neutral-0: hsl(0deg, 0%, 100%);--color-bg-strong: var(--color-neutral-950);--color-bg-surface: var(--color-neutral-800);--color-bg-soft: var(--color-neutral-200);--color-bg-weak: var(--color-neutral-50);--color-bg-white: var(--color-neutral-0);--color-text-strong: var(--color-neutral-950);--color-text-sub: var(--color-neutral-600);--color-text-soft: var(--color-neutral-400);--color-text-disabled: var(--color-neutral-300);--color-text-white: var(--color-neutral-0);--color-stroke-soft: var(--color-neutral-200);--text-title-h1: 5.6rem;--text-title-h1--line-height: 6.4rem;--text-title-h1--letter-spacing: -.01em;--text-title-h1--font-weight: 500;--text-title-h2: 4.8rem;--text-title-h2--line-height: 5.6rem;--text-title-h2--letter-spacing: -.01em;--text-title-h2--font-weight: 500;--text-title-h3: 4rem;--text-title-h3--line-height: 4.8rem;--text-title-h3--letter-spacing: -.01em;--text-title-h3--font-weight: 500;--text-label-xl: 2.4rem;--text-label-xl--line-height: 3.2rem;--text-label-xl--letter-spacing: -.015em;--text-label-xl--font-weight: 500;--text-label-lg: 1.8rem;--text-label-lg--line-height: 2.4rem;--text-label-lg--letter-spacing: -.015em;--text-label-lg--font-weight: 500;--text-label-md: 1.6rem;--text-label-md--line-height: 2.4rem;--text-label-md--letter-spacing: -.011em;--text-label-md--font-weight: 500;--text-label-sm: 1.4rem;--text-label-sm--line-height: 2rem;--text-label-sm--letter-spacing: -.006em;--text-label-sm--font-weight: 500;--text-label-xs: 1.2rem;--text-label-xs--line-height: 1.6rem;--text-label-xs--letter-spacing: 0em;--text-label-xs--font-weight: 500;--text-paragraph-xl: 2.4rem;--text-paragraph-xl--line-height: 3.2rem;--text-paragraph-xl--letter-spacing: -.015em;--text-paragraph-xl--font-weight: 400;--text-paragraph-lg: 1.8rem;--text-paragraph-lg--line-height: 2.4rem;--text-paragraph-lg--letter-spacing: -.015em;--text-paragraph-lg--font-weight: 400;--text-paragraph-md: 1.6rem;--text-paragraph-md--line-height: 2.4rem;--text-paragraph-md--letter-spacing: -.011em;--text-paragraph-md--font-weight: 400;--text-paragraph-sm: 1.4rem;--text-paragraph-sm--line-height: 2rem;--text-paragraph-sm--letter-spacing: -.006em;--text-paragraph-sm--font-weight: 400;--text-paragraph-xs: 1.2rem;--text-paragraph-xs--line-height: 1.6rem;--text-paragraph-xs--letter-spacing: 0em;--text-paragraph-xs--font-weight: 400;--text-subheading-md: 1.6rem;--text-subheading-md--line-height: 2.4rem;--text-subheading-md--letter-spacing: .06em;--text-subheading-md--font-weight: 500;--text-subheading-sm: 1.4rem;--text-subheading-sm--line-height: 2rem;--text-subheading-sm--letter-spacing: .06em;--text-subheading-sm--font-weight: 500;--text-subheading-xs: 1.2rem;--text-subheading-xs--line-height: 1.6rem;--text-subheading-xs--letter-spacing: .04em;--text-subheading-xs--font-weight: 500;--text-subheading-2xs: 1.1rem;--text-subheading-2xs--line-height: 1.2rem;--text-subheading-2xs--letter-spacing: .02em;--text-subheading-2xs--font-weight: 500;--root-font-size: 10px}@supports (color: color(display-p3 0 0 0%)){:root:not(#\\#),:host:not(#\\#){--color-orange-500: rgb(252, 113, 0);--color-green-500: rgb(0, 198, 90);--color-teal-500: rgb(0, 185, 166);--color-purple-300: rgb(216, 180, 255)}@media(color-gamut:p3){:root:not(#\\#),:host:not(#\\#){--color-orange-500: color(display-p3 .94659 .44979 .07573);--color-green-500: color(display-p3 .30873 .77475 .37431);--color-teal-500: color(display-p3 .26657 .72152 .65546);--color-purple-300: color(display-p3 .82939 .70374 .99608)}}}.pointer-events-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){pointer-events:none}.visible:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){visibility:visible}.sr-only:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap;border-width:0}.absolute:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){position:absolute}.relative:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){position:relative}.static:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){position:static}.inset-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){top:calc(var(--spacing) * 0);right:calc(var(--spacing) * 0);bottom:calc(var(--spacing) * 0);left:calc(var(--spacing) * 0)}.top-16:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){top:calc(var(--spacing) * 16)}.right-16:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){right:calc(var(--spacing) * 16)}.z-1:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){z-index:1}.z-50:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){z-index:50}.container:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:100%}.-mx-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){margin-left:calc(var(--spacing) * -4);margin-right:calc(var(--spacing) * -4)}.mx-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){margin-left:calc(var(--spacing) * 4);margin-right:calc(var(--spacing) * 4)}.-mr-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){margin-right:calc(var(--spacing) * -4)}.mr-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){margin-right:calc(var(--spacing) * 4)}.-ml-2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){margin-left:calc(var(--spacing) * -2)}.ml-auto:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){margin-left:auto}.flex:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){display:flex}.grid:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){display:grid}.hidden:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){display:none}.inline:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){display:inline}.inline-flex:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){display:inline-flex}.table:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){display:table}.size-10:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-11:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.size-14:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.size-16:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-18:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 18);height:calc(var(--spacing) * 18)}.size-24:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 24);height:calc(var(--spacing) * 24)}.h-26:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:calc(var(--spacing) * 26)}.h-28:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:calc(var(--spacing) * 28)}.h-32:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:calc(var(--spacing) * 32)}.h-36:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:calc(var(--spacing) * 36)}.h-40:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:calc(var(--spacing) * 40)}.h-\\[1px\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:1px}.h-full:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:100%}.h-px:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){height:1px}.max-h-256:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-height:calc(var(--spacing) * 256)}.max-h-300:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-height:calc(var(--spacing) * 300)}.max-h-fit:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-height:fit-content}.w-24:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 24)}.w-28:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:calc(var(--spacing) * 28)}.w-\\[1px\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:1px}.w-fit:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:fit-content}.w-full:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:100%}.w-max:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){width:max-content}.max-w-2xs:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-width:var(--container-2xs)}.max-w-xl:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){max-width:var(--container-xl)}.min-w-288:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){min-width:calc(var(--spacing) * 288)}.min-w-lg:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){min-width:var(--container-lg)}.shrink-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){flex-shrink:0}.-translate-x-1:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-translate-x: calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-\\[calc\\(50\\%\\+1px\\)\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-translate-y: calc((50% + 1px)*-1) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-45:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){rotate:-45deg}.transform:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-not-allowed:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){cursor:not-allowed}.scroll-py-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){scroll-padding-block:calc(var(--spacing) * 4)}.flex-col:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){flex-direction:column}.flex-wrap:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){flex-wrap:wrap}.items-center:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){align-items:center}.justify-between:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){justify-content:space-between}.justify-center:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){justify-content:center}.gap-2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){gap:calc(var(--spacing) * 2)}.gap-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){gap:calc(var(--spacing) * 4)}.gap-5:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){gap:calc(var(--spacing) * 5)}.gap-6:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){gap:calc(var(--spacing) * 6)}.gap-8:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){gap:calc(var(--spacing) * 8)}.gap-12:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){gap:calc(var(--spacing) * 12)}.space-y-10:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){:where(&>:not(:last-child)):not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-space-y-reverse: 0;margin-top:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-bottom:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}}.overflow-hidden:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){overflow:hidden}.overflow-x-hidden:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){overflow-x:hidden}.overflow-y-auto:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){overflow-y:auto}.rounded-2xl:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-radius:var(--radius-2xl)}.rounded-\\[6px\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-radius:6px}.rounded-\\[8px\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-radius:8px}.rounded-full:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-radius:calc(infinity * 1px)}.rounded-lg:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-radius:var(--radius-lg)}.rounded-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-radius:0}.rounded-xl:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-radius:var(--radius-xl)}.rounded-r-full:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-top-right-radius:calc(infinity * 1px);border-bottom-right-radius:calc(infinity * 1px)}.rounded-bl-\\[3px\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-bottom-left-radius:3px}.border:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-style:var(--tw-border-style);border-width:1px}.border-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-style:var(--tw-border-style);border-width:0px}.border-b:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-border-style: none;border-style:none}.border-stroke-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-color:var(--color-stroke-soft)}.border-transparent:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-color:transparent}.bg-bg-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-soft)}.bg-bg-strong:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-strong)}.bg-bg-weak:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-weak)}.bg-bg-white:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-white)}.bg-green-500:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-green-500)}.bg-orange-500:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-orange-500)}.bg-pink-500:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-pink-500)}.bg-purple-300:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-purple-300)}.bg-red-500:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-red-500)}.bg-stroke-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-stroke-soft)}.bg-teal-500:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-teal-500)}.bg-transparent:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:transparent}.p-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding:calc(var(--spacing) * 0)}.p-0\\!:not(#\\#){padding:calc(var(--spacing) * 0)!important}.p-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding:calc(var(--spacing) * 4)}.p-6:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding:calc(var(--spacing) * 6)}.p-16:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding:calc(var(--spacing) * 16)}.p-20:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding:calc(var(--spacing) * 20)}.px-4:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 4);padding-right:calc(var(--spacing) * 4)}.px-6:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 6);padding-right:calc(var(--spacing) * 6)}.px-8:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 8);padding-right:calc(var(--spacing) * 8)}.px-10:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 10);padding-right:calc(var(--spacing) * 10)}.px-12:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 12);padding-right:calc(var(--spacing) * 12)}.px-14:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 14);padding-right:calc(var(--spacing) * 14)}.py-6:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-top:calc(var(--spacing) * 6);padding-bottom:calc(var(--spacing) * 6)}.py-12:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-top:calc(var(--spacing) * 12);padding-bottom:calc(var(--spacing) * 12)}.py-24:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-top:calc(var(--spacing) * 24);padding-bottom:calc(var(--spacing) * 24)}.ps-10:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 10)}.pe-6:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-right:calc(var(--spacing) * 6)}.pt-6:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-top:calc(var(--spacing) * 6)}.pb-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-bottom:calc(var(--spacing) * 0)}.pb-5:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-bottom:calc(var(--spacing) * 5)}.pb-8:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-bottom:calc(var(--spacing) * 8)}.text-center:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){text-align:center}.text-label-lg:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-lg);line-height:var(--tw-leading, var(--text-label-lg--line-height));letter-spacing:var(--tw-tracking, var(--text-label-lg--letter-spacing));font-weight:var(--tw-font-weight, var(--text-label-lg--font-weight))}.text-label-md:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-md);line-height:var(--tw-leading, var(--text-label-md--line-height));letter-spacing:var(--tw-tracking, var(--text-label-md--letter-spacing));font-weight:var(--tw-font-weight, var(--text-label-md--font-weight))}.text-label-sm:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-sm);line-height:var(--tw-leading, var(--text-label-sm--line-height));letter-spacing:var(--tw-tracking, var(--text-label-sm--letter-spacing));font-weight:var(--tw-font-weight, var(--text-label-sm--font-weight))}.text-label-xs:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-xs);line-height:var(--tw-leading, var(--text-label-xs--line-height));letter-spacing:var(--tw-tracking, var(--text-label-xs--letter-spacing));font-weight:var(--tw-font-weight, var(--text-label-xs--font-weight))}.text-paragraph-sm:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-paragraph-sm);line-height:var(--tw-leading, var(--text-paragraph-sm--line-height));letter-spacing:var(--tw-tracking, var(--text-paragraph-sm--letter-spacing));font-weight:var(--tw-font-weight, var(--text-paragraph-sm--font-weight))}.text-title-h1:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-title-h1);line-height:var(--tw-leading, var(--text-title-h1--line-height));letter-spacing:var(--tw-tracking, var(--text-title-h1--letter-spacing));font-weight:var(--tw-font-weight, var(--text-title-h1--font-weight))}.leading-16:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-leading: calc(var(--spacing) * 16);line-height:calc(var(--spacing) * 16)}.tracking-tight:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-tracking: var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-tracking: var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-nowrap:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){white-space:nowrap}.text-text-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-soft)}.text-text-strong:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-strong)}.text-text-sub:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-sub)}.text-text-white:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-white)}.text-transparent:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:transparent}.tabular-nums:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-numeric-spacing: tabular-nums;font-feature-settings:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:0}.opacity-50:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:.5}.opacity-100:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:1}.shadow-regular-md:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-shadow: 0 16px 32px -12px var(--tw-shadow-color, #0e121b1a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-stroke-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-ring-color: var(--color-stroke-soft)}.ring-transparent:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-ring-color: transparent}.outline-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){outline-style:var(--tw-outline-style);outline-width:0px}.filter:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.duration-200:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-duration: .2s;transition-duration:.2s}.ease-out:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-ease: var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-outline-style: none;outline-style:none}.select-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){-webkit-user-select:none;user-select:none}.\\[clip-path\\:polygon\\(0_100\\%\\,0_0\\,100\\%_100\\%\\)\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){-webkit-clip-path:polygon(0 100%,0 0,100% 100%);clip-path:polygon(0 100%,0 0,100% 100%)}.group-aria-selected\\:text-text-sub:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){[aria-selected=true]:where(.group):not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) *&{color:var(--color-text-sub)}}.group-data-\\[selected\\=true\\]\\:opacity-100:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){[data-selected=true]:where(.group):not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) *&{opacity:1}}.hover\\:border-stroke-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:hover:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-color:var(--color-stroke-soft)}}.hover\\:bg-bg-surface:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:hover:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-surface)}}.hover\\:bg-bg-weak:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:hover:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-weak)}}.hover\\:text-text-strong:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:hover:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-strong)}}.focus-visible\\:bg-bg-white:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:focus-visible:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-white)}}.focus-visible\\:text-text-strong:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:focus-visible:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-strong)}}.focus-visible\\:outline-2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:focus-visible:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){outline-style:var(--tw-outline-style);outline-width:2px}}.focus-visible\\:outline-offset-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:focus-visible:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){outline-offset:0px}}.focus-visible\\:outline-offset-1:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:focus-visible:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){outline-offset:1px}}.focus-visible\\:outline-\\(--focus-outline-color\\):not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:focus-visible:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){outline-color:var(--focus-outline-color)}}.active\\:scale-\\[0\\.98\\]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&.active:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){scale:.98}}.active\\:border-stroke-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&.active:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){border-color:var(--color-stroke-soft)}}.active\\:bg-bg-surface:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&.active:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-surface)}}.active\\:bg-bg-weak:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&.active:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-weak)}}.disabled\\:pointer-events-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:disabled:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){pointer-events:none}}.disabled\\:cursor-not-allowed:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:disabled:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){cursor:not-allowed}}.disabled\\:text-text-disabled:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:disabled:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-disabled)}}.disabled\\:opacity-50:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:disabled:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:.5}}.disabled\\:opacity-70:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:disabled:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:.7}}.disabled\\:ring-transparent:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:disabled:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-ring-color: transparent}}.data-disabled\\:pointer-events-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-disabled]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){pointer-events:none}}.data-disabled\\:opacity-70:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-disabled]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:.7}}.data-disabled\\:ring-transparent:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-disabled]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-ring-color: transparent}}.data-\\[disabled\\=true\\]\\:pointer-events-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-disabled=true]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){pointer-events:none}}.data-\\[disabled\\=true\\]\\:opacity-50:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-disabled=true]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:.5}}.data-\\[selected\\=true\\]\\:bg-bg-weak:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-selected=true]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){background-color:var(--color-bg-weak)}}.data-\\[selected\\=true\\]\\:text-text-strong:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-selected=true]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-strong)}}.data-\\[side\\=bottom\\]\\:slide-in-from-top-2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-side=bottom]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-enter-translate-y: calc(2*var(--spacing)*-1)}}.data-\\[side\\=left\\]\\:slide-in-from-right-2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-side=left]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-enter-translate-x: calc(2*var(--spacing))}}.data-\\[side\\=right\\]\\:slide-in-from-left-2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-side=right]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-enter-translate-x: calc(2*var(--spacing)*-1)}}.data-\\[side\\=top\\]\\:slide-in-from-bottom-2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-side=top]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-enter-translate-y: calc(2*var(--spacing))}}.data-\\[state\\=checked\\]\\:opacity-100:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-state=checked]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){opacity:1}}.data-\\[state\\=closed\\]\\:animate-out:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-state=closed]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}}.data-\\[state\\=closed\\]\\:fade-out-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-state=closed]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-exit-opacity: 0 ;--tw-exit-opacity: 0}}.data-\\[state\\=closed\\]\\:zoom-out-95:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-state=closed]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-exit-scale: 95% ;--tw-exit-scale: .95}}.data-\\[state\\=open\\]\\:animate-in:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-state=open]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}}.data-\\[state\\=open\\]\\:fade-in-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-state=open]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-enter-opacity: 0 ;--tw-enter-opacity: 0}}.data-\\[state\\=open\\]\\:zoom-in-95:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&[data-state=open]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--tw-enter-scale: 95% ;--tw-enter-scale: .95}}.\\[\\&_\\.ant-picker-panels\\]\\:gap-8:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) .ant-picker-panels{gap:calc(var(--spacing) * 8)}}.\\[\\&_svg\\]\\:pointer-events-none:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) svg{pointer-events:none}}.\\[\\&_svg\\]\\:shrink-0:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) svg{flex-shrink:0}}.\\*\\*\\:\\[\\[cmdk-group-heading\\]\\]\\:px-8:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) *{&[cmdk-group-heading]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-left:calc(var(--spacing) * 8);padding-right:calc(var(--spacing) * 8)}}}.\\*\\*\\:\\[\\[cmdk-group-heading\\]\\]\\:py-6:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) *{&[cmdk-group-heading]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){padding-top:calc(var(--spacing) * 6);padding-bottom:calc(var(--spacing) * 6)}}}.\\*\\*\\:\\[\\[cmdk-group-heading\\]\\]\\:text-label-xs:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) *{&[cmdk-group-heading]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-xs);line-height:var(--tw-leading, var(--text-label-xs--line-height));letter-spacing:var(--tw-tracking, var(--text-label-xs--letter-spacing));font-weight:var(--tw-font-weight, var(--text-label-xs--font-weight))}}}.\\*\\*\\:\\[\\[cmdk-group-heading\\]\\]\\:text-text-soft:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) *{&[cmdk-group-heading]:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){color:var(--color-text-soft)}}}@property --tw-animation-delay{syntax: "*"; inherits: false; initial-value: 0s;}@property --tw-animation-direction{syntax: "*"; inherits: false; initial-value: normal;}@property --tw-animation-duration{syntax: "*"; inherits: false;}@property --tw-animation-fill-mode{syntax: "*"; inherits: false; initial-value: none;}@property --tw-animation-iteration-count{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-enter-blur{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-enter-opacity{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-enter-rotate{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-enter-scale{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-enter-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-enter-translate-y{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-blur{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-opacity{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-exit-rotate{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-scale{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-exit-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-translate-y{syntax: "*"; inherits: false; initial-value: 0;}:root:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){--focus-outline-color: var(--ui-focus-outline-color, #1890ff)}.text-title-h1:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-title-h1);line-height:var(--text-title-h1--line-height);letter-spacing:var(--text-title-h1--letter-spacing);font-weight:var(--text-title-h1--font-weight)}.text-title-h2:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-title-h2);line-height:var(--text-title-h2--line-height);letter-spacing:var(--text-title-h2--letter-spacing);font-weight:var(--text-title-h2--font-weight)}.text-title-h3:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-title-h3);line-height:var(--text-title-h3--line-height);letter-spacing:var(--text-title-h3--letter-spacing);font-weight:var(--text-title-h3--font-weight)}.text-label-xl:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-xl);line-height:var(--text-label-xl--line-height);letter-spacing:var(--text-label-xl--letter-spacing);font-weight:var(--text-label-xl--font-weight)}.text-label-lg:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-lg);line-height:var(--text-label-lg--line-height);letter-spacing:var(--text-label-lg--letter-spacing);font-weight:var(--text-label-lg--font-weight)}.text-label-md:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-md);line-height:var(--text-label-md--line-height);letter-spacing:var(--text-label-md--letter-spacing);font-weight:var(--text-label-md--font-weight)}.text-label-sm:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-sm);line-height:var(--text-label-sm--line-height);letter-spacing:var(--text-label-sm--letter-spacing);font-weight:var(--text-label-sm--font-weight)}.text-label-xs:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-label-xs);line-height:var(--text-label-xs--line-height);letter-spacing:var(--text-label-xs--letter-spacing);font-weight:var(--text-label-xs--font-weight)}.text-paragraph-xl:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-paragraph-xl);line-height:var(--text-paragraph-xl--line-height);letter-spacing:var(--text-paragraph-xl--letter-spacing);font-weight:var(--text-paragraph-xl--font-weight)}.text-paragraph-lg:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-paragraph-lg);line-height:var(--text-paragraph-lg--line-height);letter-spacing:var(--text-paragraph-lg--letter-spacing);font-weight:var(--text-paragraph-lg--font-weight)}.text-paragraph-md:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-paragraph-md);line-height:var(--text-paragraph-md--line-height);letter-spacing:var(--text-paragraph-md--letter-spacing);font-weight:var(--text-paragraph-md--font-weight)}.text-paragraph-sm:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-paragraph-sm);line-height:var(--text-paragraph-sm--line-height);letter-spacing:var(--text-paragraph-sm--letter-spacing);font-weight:var(--text-paragraph-sm--font-weight)}.text-paragraph-xs:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-paragraph-xs);line-height:var(--text-paragraph-xs--line-height);letter-spacing:var(--text-paragraph-xs--letter-spacing);font-weight:var(--text-paragraph-xs--font-weight)}.text-subheading-md:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-subheading-md);line-height:var(--text-subheading-md--line-height);letter-spacing:var(--text-subheading-md--letter-spacing);font-weight:var(--text-subheading-md--font-weight)}.text-subheading-sm:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-subheading-sm);line-height:var(--text-subheading-sm--line-height);letter-spacing:var(--text-subheading-sm--letter-spacing);font-weight:var(--text-subheading-sm--font-weight)}.text-subheading-xs:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-subheading-xs);line-height:var(--text-subheading-xs--line-height);letter-spacing:var(--text-subheading-xs--letter-spacing);font-weight:var(--text-subheading-xs--font-weight)}.text-subheading-2xs:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){font-size:var(--text-subheading-2xs);line-height:var(--text-subheading-2xs--line-height);letter-spacing:var(--text-subheading-2xs--letter-spacing);font-weight:var(--text-subheading-2xs--font-weight)}*:not(#\\#):not(#\\#),:not(#\\#):not(#\\#):before,:not(#\\#):not(#\\#):after{box-sizing:border-box}button:not(#\\#):not(#\\#),input:not(#\\#):not(#\\#),optgroup:not(#\\#):not(#\\#),select:not(#\\#):not(#\\#),textarea:not(#\\#):not(#\\#){font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;letter-spacing:inherit;color:inherit}button:not(#\\#):not(#\\#),[role=button]:not(#\\#):not(#\\#){cursor:pointer}html:not(#\\#):not(#\\#),:root:not(#\\#):not(#\\#){font-size:var(--root-font-size);font-weight:400;font-family:system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Helvetica,Arial,sans-serif,"apple color emoji","segoe ui emoji",segoe ui symbol;line-height:1.5;font-feature-settings:normal;font-synthesis:none;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}.lucide:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#){stroke-width:1.5;&:not(#\\#):not(#\\#):not(#\\#):not(#\\#):not(#\\#) *{vector-effect:non-scaling-stroke}}.data-filter:not(#\\#):not(#\\#):not(#\\#):not(#\\#){margin:0;font-size:1.4rem;font-weight:400;font-family:system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Helvetica,Arial,sans-serif,"apple color emoji","segoe ui emoji",segoe ui symbol;line-height:1.5;font-feature-settings:normal;font-synthesis:none;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;background-color:var(--color-white);color:var(--color-text-strong)}@property --tw-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-ordinal{syntax: "*"; inherits: false;}@property --tw-slashed-zero{syntax: "*"; inherits: false;}@property --tw-numeric-figure{syntax: "*"; inherits: false;}@property --tw-numeric-spacing{syntax: "*"; inherits: false;}@property --tw-numeric-fraction{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-duration{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-border-style: solid;--tw-leading: initial;--tw-tracking: initial;--tw-ordinal: initial;--tw-slashed-zero: initial;--tw-numeric-figure: initial;--tw-numeric-spacing: initial;--tw-numeric-fraction: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-duration: initial;--tw-ease: initial;--tw-animation-delay: 0s;--tw-animation-direction: normal;--tw-animation-duration: initial;--tw-animation-fill-mode: none;--tw-animation-iteration-count: 1;--tw-enter-blur: 0;--tw-enter-opacity: 1;--tw-enter-rotate: 0;--tw-enter-scale: 1;--tw-enter-translate-x: 0;--tw-enter-translate-y: 0;--tw-exit-blur: 0;--tw-exit-opacity: 1;--tw-exit-rotate: 0;--tw-exit-scale: 1;--tw-exit-translate-x: 0;--tw-exit-translate-y: 0}}
|
|
2
|
+
`);var Le={title:["h1","h2","h3","h4","h5","h6"],label:["xl","lg","md","sm","xs"],paragraph:["xl","lg","md","sm","xs"],subheading:["md","sm","xs","2xs"]},Ee=Object.entries(Le).flatMap(([t,e])=>e.map(n=>`${t}-${n}`)),Et={extend:{classGroups:{"font-size":[{text:Ee}]}}},je=extendTailwindMerge(Et),vt=createTV({twMergeConfig:Et}),d=(...t)=>je(cn$1(...t));function U(t){let{as:e,size:n,className:o,...a}=t;if(F.isValidElement(e)){let l=e.props,s=l.className&&o?`${l.className} ${o}`:o??l.className,p=l.size??n,c={...l,...a,...p!==void 0?{size:p}:{},...s?{className:s}:{}};return F.cloneElement(e,c)}let r=e,i={...a,...n!==void 0?{size:n}:{},...o?{className:o}:{}};return jsx(r,{...i})}function _t({stroke:t="2",className:e}){return jsx("svg",{className:e,width:"20",height:"20",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:t,fill:"none",strokeLinecap:"round",strokeLinejoin:"round",xmlns:"http://www.w3.org/2000/svg",children:jsxs("g",{children:[jsxs("circle",{cx:"12",cy:"12",r:"9.5",children:[jsx("animate",{attributeName:"stroke-dasharray",dur:"1.5s",calcMode:"spline",values:"0 150;42 150;42 150;42 150",keyTimes:"0;0.475;0.95;1",keySplines:"0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1",repeatCount:"indefinite"}),jsx("animate",{attributeName:"stroke-dashoffset",dur:"1.5s",calcMode:"spline",values:"0;-16;-59;-59",keyTimes:"0;0.475;0.95;1",keySplines:"0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1",repeatCount:"indefinite"})]}),jsx("animateTransform",{attributeName:"transform",type:"rotate",dur:"2s",values:"0 12 12;360 12 12",repeatCount:"indefinite"})]})})}function Ht(){return F.useCallback(e=>(e.preventDefault(),false),[])}var wt=vt({base:["relative inline-flex items-center justify-center bg-transparent whitespace-nowrap outline-0 select-none","transition duration-200 ease-out","active:scale-[0.98]","focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-(--focus-outline-color)","disabled:pointer-events-none disabled:opacity-70 disabled:ring-transparent data-disabled:pointer-events-none data-disabled:opacity-70 data-disabled:ring-transparent"]}),$t=vt({slots:{root:[wt(),"group border border-transparent"],icon:"flex shrink-0 items-center justify-center",overlay:"absolute inset-0 flex items-center justify-center"},variants:{variant:{neutral:{}},mode:{filled:{},stroke:{},lighter:{},ghost:{}},loading:{true:{root:"pointer-events-none cursor-not-allowed"}},size:{large:{root:"h-40 gap-6 rounded-2xl px-14 text-label-lg",overlay:"rounded-2xl",icon:"size-18"},medium:{root:"h-36 gap-6 rounded-[8px] px-12 text-label-md",overlay:"rounded-[8px]",icon:"size-18"},small:{root:"h-32 gap-5 rounded-[6px] px-10 text-label-sm",overlay:"rounded-[6px]",icon:"size-16"},xsmall:{root:"h-28 gap-4 rounded-[6px] px-8 text-label-xs",overlay:"rounded-[6px]",icon:"size-14"}}},compoundVariants:[{variant:"neutral",mode:"filled",class:{root:["bg-bg-strong text-text-white","hover:bg-bg-surface","active:bg-bg-surface"],overlay:"text-text-white"}},{variant:"neutral",mode:"stroke",class:{root:["border-stroke-soft bg-bg-white text-text-strong","hover:bg-bg-weak","active:bg-bg-weak","focus-visible:text-text-strong"],overlay:"text-text-strong"}},{variant:"neutral",mode:"lighter",class:{root:["bg-bg-weak text-text-strong","hover:border-stroke-soft","active:border-stroke-soft"],overlay:"text-text-strong"}},{variant:"neutral",mode:"ghost",class:{root:["bg-transparent text-text-strong ring-transparent","hover:bg-bg-weak","active:bg-bg-weak","focus-visible:bg-bg-white"],overlay:"text-text-strong"}}],defaultVariants:{variant:"neutral",mode:"filled",size:"small"}}),C=F.forwardRef((t,e)=>{let{children:n,variant:o,mode:a,size:r,startContent:i,endContent:l,asChild:s=false,className:p,loading:c=false,disabled:m,...u}=t,h=Ht(),f=s?Slot.Root:"button",{root:y,icon:J,overlay:b}=$t({variant:o,mode:a,size:r,loading:c}),Se=!!i,Re=!!l,Ot=J(),O="none";c&&(Se?O="startContent":Re?O="endContent":O="overlay");let ft=jsx(_t,{className:Ot}),Q=(Ie,Me)=>jsx("span",{className:Ot,children:Ie},Me),Ve=()=>O==="startContent"?Q(ft,"startContent"):i?Q(i,"startContent"):null,ze=()=>O==="endContent"?Q(ft,"endContent"):l?Q(l,"endContent"):null,Lt=m||c;return jsxs(f,{ref:e,onContextMenu:h,className:y({className:p}),disabled:s?void 0:Lt,"data-state":c?"loading":"idle","data-disabled":Lt?"":void 0,...u,children:[Ve(),jsx(Slot.Slottable,{children:n&&jsx("span",{className:d("inline-flex justify-center",O==="overlay"&&"text-transparent"),children:n})}),ze(),O==="overlay"&&jsx("span",{className:b(),children:ft})]})});C.displayName="ButtonRoot";var W=({className:t,orientation:e="horizontal",decorative:n=true,...o})=>jsx(Separator.Root,{decorative:n,orientation:e,className:d("shrink-0 bg-stroke-soft",e==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",t),...o});W.displayName=Separator.Root.displayName;function _({className:t,...e}){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:d("lucide lucide-ellipsis-icon lucide-ellipsis",t),...e,children:[jsx("circle",{cx:"12",cy:"12",r:"1"}),jsx("circle",{cx:"19",cy:"12",r:"1"}),jsx("circle",{cx:"5",cy:"12",r:"1"})]})}function yt({className:t,...e}){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:d("lucide lucide-x-icon lucide-x",t),...e,children:[jsx("path",{d:"M18 6 6 18"}),jsx("path",{d:"m6 6 12 12"})]})}function kt({className:t,...e}){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:d("lucide lucide-funnel-plus-icon lucide-funnel-plus",t),...e,children:[jsx("path",{d:"M13.354 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14v6a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341l1.218-1.348"}),jsx("path",{d:"M16 6h6"}),jsx("path",{d:"M19 3v6"})]})}function Pt({className:t,...e}){return jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:d("lucide lucide-chevron-right-icon lucide-chevron-right",t),...e,children:jsx("path",{d:"m9 18 6-6-6-6"})})}function Dt({className:t,...e}){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:d("lucide lucide-arrow-left-icon lucide-arrow-left",t),...e,children:[jsx("path",{d:"m12 19-7-7 7-7"}),jsx("path",{d:"M19 12H5"})]})}function Tt({className:t,...e}){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:d("lucide lucide-search-icon lucide-search",t),...e,children:[jsx("path",{d:"m21 21-4.34-4.34"}),jsx("circle",{cx:"11",cy:"11",r:"8"})]})}var et=Popover.Root,nt=Popover.Trigger,X=F.forwardRef(({children:t,className:e,align:n="center",sideOffset:o=4,collisionPadding:a=12,arrowPadding:r=12,arrow:i=true,unstyled:l,...s},p)=>jsx(Popover.Portal,{children:jsxs(Popover.Content,{ref:p,align:n,sideOffset:o,collisionPadding:a,arrowPadding:r,className:d([!l&&"w-max rounded-2xl bg-bg-white p-20 shadow-regular-md ring-1 ring-stroke-soft"],"z-50","data-[state=closed]:animate-out data-[state=open]:animate-in","data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...s,children:[jsx(Slot.Slottable,{children:t}),i&&jsx(Popover.Arrow,{asChild:true,children:jsx("div",{className:"size-11 -translate-y-[calc(50%+1px)] -rotate-45 rounded-bl-[3px] border border-stroke-soft bg-bg-white [clip-path:polygon(0_100%,0_0,100%_100%)]"})})]})}));X.displayName="PopoverContent";var Ze=F.forwardRef(({className:t,unstyled:e,...n},o)=>jsx(Popover.Close,{ref:o,className:d([!e&&"absolute top-16 right-16"],t),...n}));Ze.displayName="PopoverClose";function Qt({title:t,onBack:e}){return jsxs("div",{className:"relative flex items-center justify-between border-b border-stroke-soft px-12 pt-6 pb-5",children:[jsx("button",{className:wt({className:"-ml-2 size-24 shrink-0 rounded-xl border-0 text-text-sub hover:bg-bg-weak hover:text-text-strong focus-visible:outline-offset-0 active:bg-bg-weak"}),onClick:e,children:jsx(Dt,{className:"size-16"})}),jsx("span",{className:"text-label-sm",children:t}),jsx("span",{className:"w-24 shrink-0"})]})}function D({className:t,...e}){return jsx(Command,{"data-slot":"command",className:d("flex h-full w-full flex-col overflow-hidden rounded-2xl bg-bg-white",t),...e})}function Y({className:t,...e}){return jsxs("div",{"data-slot":"command-input-wrapper",className:d("flex h-36 items-center gap-8 border-b border-stroke-soft px-12",t),children:[jsx(Tt,{className:"size-16 shrink-0 opacity-50"}),jsx(Command.Input,{"data-slot":"command-input",className:d("flex h-40 w-full rounded-2xl border-none bg-transparent py-12 text-label-sm outline-none disabled:cursor-not-allowed disabled:opacity-50"),...e})]})}function k({className:t,...e}){return jsx(Command.List,{"data-slot":"command-list",className:d("max-h-300 scroll-py-4 overflow-x-hidden overflow-y-auto outline-0",t),...e})}function at({...t}){return jsx(Command.Empty,{"data-slot":"command-empty",className:"py-24 text-center text-paragraph-sm",...t})}function v({className:t,...e}){return jsx(Command.Group,{"data-slot":"command-group",className:d("overflow-hidden p-4 text-text-sub **:[[cmdk-group-heading]]:px-8 **:[[cmdk-group-heading]]:py-6 **:[[cmdk-group-heading]]:text-label-xs **:[[cmdk-group-heading]]:text-text-soft",t),...e})}function rt({className:t,...e}){return jsx(Command.Separator,{"data-slot":"command-separator",className:d("-mx-4 h-px bg-bg-soft",t),...e})}function V({className:t,...e}){return jsx(Command.Item,{"data-slot":"command-item",className:d("relative flex items-center gap-8 rounded-lg px-8 py-6 outline-0 select-none","data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50","data-[selected=true]:bg-bg-weak data-[selected=true]:text-text-strong","text-label-sm [&_svg]:pointer-events-none [&_svg]:shrink-0",t),...e})}var Zt={filter:"Filters",search_keywords:"Search...",no_results:"No results",to:"to",input_number:"Input Number",min:"Min",max:"Max",apply:"Apply Filter",clean:"Clean Filter"};var te={filter:"\u6570\u636E\u7B5B\u9009",search_keywords:"\u641C\u7D22\u5173\u952E\u5B57...",no_results:"\u6CA1\u6709\u7ED3\u679C",to:"\u81F3",input_number:"\u8F93\u5165\u6570\u5B57",min:"\u6700\u5C0F\u503C",max:"\u6700\u5927\u503C",apply:"\u5E94\u7528\u7B5B\u9009",clean:"\u6E05\u7A7A\u7B5B\u9009"};var sn={"zh-CN":te,"en-US":Zt};function x(){let[t]=b();return F.useCallback(n=>sn[t][n]??n,[t])}function T({onClick:t,disabled:e}){let n=x();return jsxs(Fragment,{children:[jsx("div",{className:"h-px bg-bg-soft"}),jsx("div",{className:"p-4",children:jsx(C,{variant:"neutral",mode:"ghost",onClick:t,disabled:e,className:"w-full disabled:text-text-disabled",children:n("apply")})})]})}var cn=DatePicker._InternalPanelDoNotUseOrYouWillBeFired,dn=DatePicker._InternalRangePanelDoNotUseOrYouWillBeFired,oe={popup:{root:{inset:"0 auto auto 0",padding:0},container:{userSelect:"none",boxShadow:"none"}}};function ae({actions:t,filter:e,column:n,onApply:o}){let a=F.useRef(e?.values),[r,i]=F.useState(()=>Array.isArray(e?.values)?e.values:n.mode==="single"?[null]:[null,null]),l=F.useCallback(c=>{c&&i(c);},[]),s=F.useCallback(()=>{a.current=r,t.setFilterValue(n,r),o?.();},[t,n,r,o]),p=F.useMemo(()=>{let c=r.filter(Boolean);if(!a.current)return n.mode==="single"?c.length===1:n.mode==="range"?c.length===2:false;let m=a.current.filter(Boolean);return n.mode==="range"&&c.length<2?false:c.length!==m.length?true:c.some((u,h)=>{let f=m[h];return f&&!f.isSame(u)})},[n.mode,r]);return jsxs(Fragment,{children:[jsx(D,{children:jsx(k,{className:"max-h-fit",children:jsxs(v,{className:"px-6 pt-6 pb-0",children:[n.mode==="single"&&jsx(un,{value:r,onChange:l,column:n}),n.mode==="range"&&jsx(mn,{value:r,onChange:l,column:n})]})})}),jsx(T,{onClick:s,disabled:!p})]})}function un({value:t,column:e,onChange:n}){let o=F.useCallback(a=>{a&&n([a]);},[n]);return jsx(cn,{showToday:false,inputReadOnly:true,needConfirm:false,allowClear:false,showTime:e.showTime,value:t?.[0],onCalendarChange:o,classNames:{root:"w-full",popup:{container:"[&_.ant-picker-panels]:gap-8",body:"p-0!"}},styles:oe})}function mn({value:t,column:e,onChange:n}){let[o,a]=t,r=F.useCallback(s=>{!s||s?.filter(Boolean).length!==2||n(s);},[n]),[i,l]=F.useState(true);return jsx(dn,{value:[o,a],onCalendarChange:r,classNames:{root:i?"w-full":"min-w-288",popup:{container:"[&_.ant-picker-panels]:gap-8",body:"p-0!"}},onPanelChange:(s,p)=>{l(p.every(c=>c==="date"));},showTime:e.showTime,inputReadOnly:true,allowClear:false,needConfirm:false,previewValue:false,styles:oe})}var Nt=F.memo(function({option:e,onToggle:n}){let{value:o,label:a,icon:r,selected:i}=e,l=F.useCallback(()=>{n(o,!i);},[n,o,i]);return jsxs(V,{onSelect:l,className:"group flex items-center gap-6",children:[jsx(Checkbox,{tabIndex:-1,checked:i,className:d("mr-4 opacity-0 group-data-[selected=true]:opacity-100 data-[state=checked]:opacity-100",i&&"opacity-100")}),r,jsx("span",{children:a})]})});function it({options:t,initialValues:e,pendingValues:n}){let o=F.useRef(e),{selectedOptions:a,unselectedOptions:r}=F.useMemo(()=>{let s=new Set(o.current),p=[],c=[];for(let m of t)s.has(m.value)?p.push(m):c.push(m);return {selectedOptions:p,unselectedOptions:c}},[t]),{selectedOptionsWithState:i,unselectedOptionsWithState:l}=F.useMemo(()=>{let s=new Set(Array.isArray(n)?n:[n]),p=a.map(m=>({...m,selected:s.has(m.value),initialSelected:true})),c=r.map(m=>({...m,selected:s.has(m.value),initialSelected:false}));return {selectedOptionsWithState:p,unselectedOptionsWithState:c}},[a,r,n]);return {selectedOptions:i,unselectedOptions:l}}function se({column:t,filter:e,actions:n,onApply:o}){let a=x(),[r,i]=F.useState(()=>e?.values??[]),{selectedOptions:l,unselectedOptions:s}=it({options:t.options,initialValues:e?.values??[],pendingValues:r}),p=F.useCallback((u,h)=>{i(f=>h?f.includes(u)?f:[...f,u]:f.filter(y=>y!==u));},[]),c=F.useCallback(()=>{n.setFilterValue(t,r),o?.();},[n,t,r,o]),m=F.useMemo(()=>{let u=new Set(e?.values??[]),h=new Set(r);if(u.size!==h.size)return true;for(let f of h)if(!u.has(f))return true;return false},[e?.values,r]);return jsxs(Fragment,{children:[jsxs(D,{children:[jsx(Y,{autoFocus:true,placeholder:"Search..."}),jsx(at,{children:a("no_results")}),jsxs(k,{className:"max-h-256",children:[jsx(v,{className:d(l.length===0&&"hidden"),children:l.map(u=>jsx(Nt,{option:u,onToggle:p},u.value))}),jsx(rt,{className:d((l.length===0||s.length===0)&&"hidden")}),jsx(v,{className:d(s.length===0&&"hidden"),children:s.map(u=>jsx(Nt,{option:u,onToggle:p},u.value))})]})]}),jsx(T,{onClick:c,disabled:!m})]})}function lt({onEnter:t,...e}){let n=F.useCallback(o=>{o.key==="Enter"&&(o.target instanceof HTMLInputElement||o.target instanceof HTMLButtonElement)&&(o.preventDefault(),t?.());},[t]);return jsx(D,{onKeyDown:n,...e})}function pe({actions:t,filter:e,column:n,onApply:o}){let a=F.useRef(e?.values),[r,i]=F.useState(()=>Array.isArray(e?.values)?e.values:n.mode==="single"?[null]:[null,null]),l=F.useCallback(()=>{le(r)&&(a.current=r,t.setFilterValue(n,r),o?.());},[t,n,r,o]),s=F.useMemo(()=>{if(!le(r))return false;let c=a.current;return !Array.isArray(c)||c.length!==r.length?true:c.some((m,u)=>m!==r[u])},[r]),p=n.mode==="range";return jsxs(Fragment,{children:[jsx(lt,{onEnter:l,className:d(p&&"min-w-lg"),children:jsx(k,{className:"max-h-fit",children:jsx(v,{children:jsx("div",{className:"p-6 pb-8",children:p?jsx(yn,{value:r,column:n,onChange:i}):jsx(bn,{column:n,value:r,onChange:i})})})})}),jsx(T,{onClick:l,disabled:!s})]})}function bn({column:t,value:e,onChange:n,ref:o}){let a=x();return jsx(InputNumber,{ref:o,className:"w-full max-w-2xs",placeholder:a("input_number"),value:e[0],min:t.min,max:t.max,step:t.step,mode:"spinner",onChange:r=>{$(r)&&n([r]);},autoFocus:true})}function yn({column:t,value:e,onChange:n}){let o=x(),a=F.useId(),r=F.useId(),i=F.useCallback(s=>{if(!$(s))return;let p=[s,e[1]];n?.(p);},[e,n]),l=F.useCallback(s=>{if(!$(s))return;let p=[e[0],s];n?.(p);},[e,n]);return jsxs("div",{className:"flex w-full max-w-xl gap-12",children:[jsxs("div",{className:"flex flex-col gap-6",children:[jsx("label",{className:"text-label-sm select-none",htmlFor:a,children:o("min")}),jsx(InputNumber,{id:a,mode:"spinner",placeholder:"min",autoFocus:true,value:e[0],min:t.min,max:$(e[1])?e[1]-1:t.max,step:t.step,onChange:i})]}),jsxs("div",{className:"flex flex-col gap-6",children:[jsx("label",{className:"text-label-sm select-none",htmlFor:r,children:o("max")}),jsx(InputNumber,{id:r,mode:"spinner",placeholder:"max",value:e[1],min:$(e[0])?e[0]+1:t.min,max:t.max,step:t.step,onChange:l})]})]})}function le(t){return t.every($)}function $(t){return typeof t=="number"&&Number.isFinite(t)}var zt=F.memo(function({option:e,onSelect:n}){let{value:o,label:a,icon:r,selected:i}=e,l=F.useCallback(()=>{n(o);},[n,o]);return jsxs(V,{value:o,onSelect:l,className:"group flex items-center gap-6",children:[jsx(Radio,{tabIndex:-1,className:d("mr-4 opacity-0 group-data-[selected=true]:opacity-100 data-[state=checked]:opacity-100",i&&"opacity-100"),checked:i,value:o,id:o}),r,jsx("span",{children:a})]})});function ue({column:t,filter:e,actions:n,onApply:o}){let a=x(),[r,i]=F.useState(()=>e?.values[0]??""),{selectedOptions:l,unselectedOptions:s}=it({options:t.options,initialValues:e?.values??[],pendingValues:r??""}),p=F.useCallback(u=>{i(u);},[]),c=F.useCallback(()=>{r&&(n.setFilterValue(t,[r]),o?.());},[n,t,r,o]),m=F.useMemo(()=>e?.values[0]!==r,[e?.values,r]);return jsxs(Fragment,{children:[jsxs(D,{children:[jsx(Y,{autoFocus:true,placeholder:"Search..."}),jsx(at,{children:a("no_results")}),jsxs(k,{className:"max-h-256",children:[jsx(v,{className:d(l.length===0&&"hidden"),children:l.map(u=>jsx(zt,{option:u,onSelect:p},u.value))}),jsx(rt,{className:d((l.length===0||s.length===0)&&"hidden")}),jsx(v,{className:d(s.length===0&&"hidden"),children:s.map(u=>jsx(zt,{option:u,onSelect:p},u.value))})]})]}),jsx(T,{onClick:c,disabled:!m})]})}function dt(t){let{value:e,defaultValue:n,onChange:o}=t,a=e!==void 0,[r,i]=F.useState(n),l=a?e:r,s=F.useRef({value:e,state:r,isControlled:a,onChange:o});s.current={value:e,state:r,isControlled:a,onChange:o};let p=F.useCallback((c,...m)=>{let{value:u,state:h,isControlled:f,onChange:y}=s.current,b=typeof c=="function"?c(f?u:h):c;f||i(b),y&&y(b,...m);},[]);return [l,p]}function ge({actions:t,filter:e,column:n,onApply:o}){let a=x(),r=F.useRef(e?.values[0]??""),[i,l]=dt({defaultValue:r.current}),s=F.useCallback(()=>{t.setFilterValue(n,[i]),o?.();},[t,n,i,o]),p=r.current===i;return jsxs(Fragment,{children:[jsx(lt,{onEnter:s,children:jsx(k,{className:"max-h-fit",children:jsx(v,{children:jsx(V,{children:jsx(Input,{rootClassName:"w-full",placeholder:a("search_keywords"),autoFocus:true,value:i,onChange:c=>l(c.target.value)})})})})}),jsx(T,{onClick:s,disabled:p})]})}function ut({enableHeader:t,column:e,filter:n,actions:o,onApply:a,onBack:r}){let i=F.useMemo(()=>{switch(e.type){case "text":return jsx(ge,{filter:n,actions:o,column:e,onApply:a});case "option":return jsx(ue,{filter:n,actions:o,column:e,onApply:a});case "multiOption":return jsx(se,{filter:n,actions:o,column:e,onApply:a});case "number":return jsx(pe,{filter:n,actions:o,column:e,onApply:a});case "date":return jsx(ae,{filter:n,actions:o,column:e,onApply:a});default:return null}},[o,e,n,a]);return jsxs(Fragment,{children:[t&&jsx(Qt,{title:e.displayName,onBack:r}),i]})}function he({column:t,filter:e,actions:n,enableAutoClose:o}){let[a,r]=F.useState(false),i=F.useCallback(()=>{o&&setTimeout(()=>{r(false);},120);},[o]);return jsxs(et,{open:a,onOpenChange:r,children:[jsx(nt,{asChild:true,children:jsx(C,{mode:"ghost",variant:"neutral",size:"xsmall",className:d("z-1 h-full w-fit rounded-none px-4 text-label-sm",a&&"active"),children:jsx(zn,{filter:e,column:t})})}),jsx(X,{align:"start",side:"bottom",arrow:false,className:"w-fit rounded-xl p-0",sideOffset:4,children:jsx(ut,{enableHeader:false,column:t,filter:e,actions:n,onApply:i})})]})}function zn({filter:t,column:e}){switch(e.type){case "text":return jsx(Mn,{filter:t});case "number":return jsx(An,{filter:t,mode:e.mode});case "date":return jsx(In,{filter:t,column:e});case "option":return jsx(Bn,{filter:t,column:e});case "multiOption":return jsx(On,{filter:t,column:e});default:return null}}function In({filter:t,column:e}){let[n]=b();if(!t)return null;if(t.values.length===0)return jsx(_,{className:"size-16"});let o=n.toLowerCase().includes("cn"),a=!!e.showTime,r=a?c.presets.dateSlash:o?"YYYY, M\u6708D\u65E5":"MMM D, YYYY",i=typeof e.showTime=="object"?e.showTime.format:a?c.presets.timeSecond:void 0,l=[r,i].filter(p=>!!p);if(t.values.length===1){let c=t.values[0].format(l.join(" "));return jsx("span",{children:c})}let s=En(t.values[0],t.values[1],o,a,l);return jsx("span",{children:s})}function Mn({filter:t}){if(!t)return null;if(t.values.length===0||t.values[0].trim()==="")return jsx(_,{className:"size-16"});let e=t.values[0];return jsx("span",{children:e})}function An({filter:t,mode:e}){let n=x();if(!t||!t.values||t.values.length===0)return jsx(_,{className:"size-16"});let[o,a]=t.values;return e&&e==="range"&&a!==void 0?jsxs("span",{className:"tracking-tight tabular-nums",children:[o," ",n("to")," ",a]}):jsx("span",{className:"tracking-tight tabular-nums",children:o})}function Bn({filter:t,column:e}){let n=e.options.filter(o=>t?.values.includes(o.value));if(n.length===1){let{label:o,icon:a}=n[0];return jsxs("span",{className:"inline-flex items-center gap-4",children:[a&&a,jsx("span",{children:o})]})}return null}function On({filter:t,column:e}){let n=e.options.filter(s=>t?.values.includes(s.value));if(n.length===0)return jsx(_,{className:"size-16"});if(n.length===1){let{label:s,icon:p}=n[0];return jsxs("span",{className:"inline-flex items-center gap-4",children:[p&&p,jsx("span",{children:s})]})}let o=Ln(n,3),a=n.length-o.length;if(!o.some(s=>!!s.icon))return jsxs("div",{className:"inline-flex items-center gap-4",children:[jsx("span",{children:o.map(s=>s.label).join(", ")}),a>0&&jsxs("span",{className:"inline-flex items-center leading-16",style:{letterSpacing:"-1px"},children:["+ ",a," ..."]})]});let i=[],l=[];return o.forEach(({value:s,icon:p,label:c})=>{p?i.push(jsx("span",{className:"inline-flex shrink-0",children:p},s)):l.push(c);}),jsxs("div",{className:"inline-flex items-center gap-4",children:[jsxs("div",{className:"inline-flex items-center gap-2",children:[i,i.length>0&&l.length>0&&jsx(W,{orientation:"vertical",className:"mx-4 h-26 opacity-50"}),l.length>0&&jsx("span",{className:"text-text-sub",children:l.join(", ")})]}),a>0&&jsxs("span",{className:"inline-flex items-center leading-16",style:{letterSpacing:"-1px"},children:["+ ",a," ..."]})]})}function Ln(t,e){return t.slice(0,e)}function En(t,e,n,o,a){if(t.isSame(e,"year")&&!o){let i=n?"YYYY, M\u6708D\u65E5":"MMM D",l=n?"M\u6708D\u65E5":"MMM D, YYYY";return `${t.format(i)} - ${e.format(l)}`}return `${t.format(a.join(" "))} - ${e.format(a.join(" "))}`}function mt(t,e){let n=t.find(o=>o.columnId===e);if(!n)throw new Error(`Column with id ${e} not found`);return n}function xe(t){return !t||t.length===0?[]:t.length===1?[t[0]]:t.length===2?Wn(t):[t[0],t[1]]}function ve(t){if(!t||t.length===0)return [];if(t.length===1)return [t[0]];if(t.length===2)return jn(t);throw new Error("Cannot create date filter value from more than 2 values")}function jn(t){let[e,n]=t,[o,a]=e.isBefore(n)?[e,n]:[n,e];return [o,a]}function Wn(t){let e=0,n=0;if(!t||t.length===0)return [e,n];t.length===1?e=t[0]:(e=t[0],n=t[1]);let[o,a]=e<n?[e,n]:[n,e];return [o,a]}function we(t){let e=new Map,n=[];for(let o of t){let a=At(o);if(e.has(a)){let r=e.get(a),i=false;for(let l of r)if(Bt(l,o)){i=true;break}i||(r.push(o),n.push(o));}else e.set(a,[o]),n.push(o);}return n}function At(t,e=new WeakMap){if(t===null)return "null";if(t===void 0)return "undefined";let n=typeof t;if(n==="number"||n==="boolean"||n==="string")return `${n}:${t.toString()}`;if(n==="function")return `function:${t.toString()}`;if(n==="object"){if(e.has(t))return e.get(t);let o;return Array.isArray(t)?o=`array:[${t.map(a=>At(a,e)).join(",")}]`:o=`object:{${Object.keys(t).sort().map(i=>`${i}:${At(t[i],e)}`).join(",")}}`,e.set(t,o),o}return `${n}:${t.toString()}`}function Bt(t,e){if(t===e)return true;if(typeof t!=typeof e||t===null||e===null||t===void 0||e===void 0)return false;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return false;for(let n=0;n<t.length;n++)if(!Bt(t[n],e[n]))return false;return true}if(typeof t=="object"){if(typeof e!="object")return false;let n=Object.keys(t).sort(),o=Object.keys(e).sort();if(n.length!==o.length)return false;for(let a=0;a<n.length;a++)if(n[a]!==o[a]||!Bt(t[n[a]],e[o[a]]))return false;return true}return false}function be({columns:t,filters:e,actions:n,enableAutoClose:o}){return e.map(a=>{let r=mt(t,a.columnId);return a.values?jsx(_n,{filter:a,column:r,actions:n,enableAutoClose:o},`active-filter-${a.columnId}`):null})}function _n({column:t,filter:e,actions:n,enableAutoClose:o}){return jsxs("div",{className:"flex h-28 items-center rounded-full border border-stroke-soft bg-bg-white shadow-regular-md",children:[jsx(Hn,{column:t}),jsx(W,{orientation:"vertical"}),jsx(he,{column:t,filter:e,actions:n,enableAutoClose:o}),jsx(W,{orientation:"vertical"}),jsx(C,{className:"z-1 h-full w-28 rounded-none rounded-r-full",variant:"neutral",mode:"ghost",size:"xsmall",onClick:()=>n.removeFilter(e.columnId),children:jsx(yt,{className:"size-16 -translate-x-1"})})]})}function Hn({column:t}){return jsxs("span",{className:"flex h-full items-center gap-4 ps-10 pe-6 text-label-sm whitespace-nowrap text-text-sub select-none",children:[t.icon&&jsx(U,{size:16,as:t.icon}),jsx("span",{children:t.displayName})]})}var Pe={ease:[.26,.08,.25,1],duration:.27},Gn={initial:{opacity:0,scale:1},visible:{opacity:1,scale:1},hidden:{opacity:0,scale:1}};function De({children:t,menuCount:e,activeType:n,onOpenChange:o,onEscapeKeyDown:a}){let r=x(),[i,{height:l,width:s}]=$n(),[p,c]=F.useState(false),m$1=F.useCallback(y=>{c(y),o?.(y);},[o]),h=e*32+49,f=!n;return jsxs(et,{open:p,onOpenChange:m$1,children:[jsx(nt,{asChild:true,children:jsx(C,{className:d(p&&"active"),variant:"neutral",mode:"stroke",startContent:jsx(kt,{}),size:"xsmall",children:r("filter")})}),jsx(X,{className:"w-fit p-0",side:"bottom",align:"start",arrow:false,onEscapeKeyDown:a,children:jsx(m.div,{initial:false,animate:{height:f?h:l,width:f?200:s},className:"overflow-hidden",transition:Pe,layout:"size",children:jsx("div",{ref:i,className:d(n?"w-fit":"w-full"),children:jsx(AnimatePresence,{mode:"popLayout",children:jsx(m.div,{initial:"hidden",animate:"visible",exit:"hidden",variants:Gn,transition:Pe,layout:true,children:t})},n)})})})]})}function Te({columns:t,filters:e,actions:n,enableAutoBack:o}){let a=F.useRef(void 0),r=F.useRef(null),[i,l]=F.useState(void 0),s=i?mt(t,i):void 0,p=i?e.find(b=>b.columnId===i):void 0,c=F.useCallback(()=>{l(void 0);},[]),m=F.useCallback(()=>{o&&l(void 0);},[o]),u=F.useCallback(b=>{b||setTimeout(()=>{a.current=void 0,l(void 0);},180);},[]),h=F.useCallback(b=>{i!==void 0&&(b.preventDefault(),c(),setTimeout(()=>{r.current?.focus();},200));},[i,c]),f=F.useCallback(b=>{a.current=b,l(b);},[]),y=F.useCallback(()=>{n.removeAllFilters();},[n]),J=F.useMemo(()=>s&&i?jsx(ut,{enableHeader:true,column:s,filter:p,actions:n,onApply:m,onBack:c}):jsx(Un,{defaultValue:a.current,onSelect:f,onClean:y,disableClean:!e.length,columns:t,ref:r}),[s,i,p,n,m,c,f,y,e.length,t]);return jsx(De,{activeType:i,menuCount:t.length,onOpenChange:u,onEscapeKeyDown:h,children:J})}function Un({defaultValue:t,columns:e,disableClean:n,onSelect:o,onClean:a,ref:r}){let i=x(),l=e.some(s=>!!s.icon);return jsxs(Fragment,{children:[jsxs(D,{loop:true,defaultValue:t,shouldFilter:false,children:[jsx(Y,{placeholder:"Search...",className:"sr-only",ref:r}),jsx(k,{className:"max-h-fit",children:jsx(v,{children:e.map(s=>jsx(V,{className:"group",value:s.columnId,keywords:[s.displayName],onSelect:o,children:jsxs("div",{className:"flex w-full items-center justify-between",children:[jsxs("div",{className:"inline-flex items-center gap-6",children:[s.icon&&jsx(U,{size:16,as:s.icon}),!s.icon&&l&&jsx("span",{className:"size-16"}),jsx("span",{className:"text-label-sm",children:s.displayName})]}),jsx(Pt,{className:"-mr-4 size-18 text-text-soft group-aria-selected:text-text-sub"})]})},s.columnId))})})]}),jsx("div",{className:"h-px bg-bg-soft"}),jsx("div",{className:"p-4",children:jsx(C,{variant:"neutral",mode:"ghost",onClick:a,disabled:n,className:"w-full disabled:text-text-disabled",children:i("clean")})})]})}function Fe({defaultFilters:t=[],filters:e,onFiltersChange:n}={}){let[o,a]=dt({value:e,defaultValue:t,onChange:n}),r=F.useMemo(()=>({setFilterValue:(i,l)=>{a(s=>{let p=s.find(h=>h.columnId===i.columnId),c=p&&p.values.length>0,m=i.type==="number"?xe(l):i.type==="date"?ve(l):we(l);if(m.length===0)return s;if(!c)return [...s,{columnId:i.columnId,type:i.type,values:m}];let u={columnId:i.columnId,type:i.type,values:m};return s.map(h=>h.columnId===i.columnId?u:h)});},removeFilter:i=>{a(l=>l.filter(s=>s.columnId!==i));},removeAllFilters:()=>{a([]);}}),[a]);return [o,r]}function Jn({columns:t,filters:e,defaultFilters:n,className:o,onFiltersChange:a}){let[r,i]=Fe({filters:e,defaultFilters:n,onFiltersChange:a});return jsxs("div",{className:d("data-filter flex flex-wrap items-center gap-8",o),children:[jsx(Te,{columns:t,filters:r,actions:i,enableAutoBack:true}),jsx(be,{columns:t,filters:r,actions:i,enableAutoClose:true})]})}
|
|
3
|
+
export{Jn as DataFilter};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import t from'react';import {jsx}from'react/jsx-runtime';var f={dateDash:"yyyy-MM-dd",dateSlash:"YYYY/MM/DD",dateTimeMinuteDash:"yyyy-MM-dd HH:mm",dateTimeMinuteSlash:"yyyy/MM/dd HH:mm",dateTimeSecondDash:"yyyy-MM-dd HH:mm:ss",dateTimeSecondSlash:"yyyy/MM/dd HH:mm:ss",timeMinute:"HH:mm",timeSecond:"HH:mm:ss"},P={presets:f};var l=Symbol.for("@@jerry-fe/ui/LocaleProviderContext"),m=["en-US","zh-CN"];function x(){if(!globalThis[l]){let e=t.createContext(null);globalThis[l]=e;}return globalThis[l]}var p=x(),M=({locale:e,defaultLocale:a,onLocaleChange:o,children:n})=>{let c=e!==void 0,[L,s]=t.useState(()=>e??a??u());t.useEffect(()=>{e!==void 0&&s(e);},[e]);let i=c?e:L,d=t.useCallback(r=>{if(!c){s(r),o?.(r);return}o?.(r);},[c,o]),y=t.useMemo(()=>({locale:i,setLocale:d}),[i,d]);return jsx(p.Provider,{value:y,children:n})},v=e=>{};function S(){let e=t.useContext(p);return e?[e.locale,e.setLocale]:[u(),v]}function u(e="en-US"){if(typeof navigator>"u")return e;for(let a of navigator.languages??[]){let o=m.find(n=>a.toLowerCase().startsWith(n.toLowerCase().split("-")[0]));if(o)return o}return e}export{M as a,S as b,P as c};
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
type UILocale = (typeof SUPPORTED_LOCALES)[number];
|
|
4
|
+
declare const SUPPORTED_LOCALES: readonly ["en-US", "zh-CN"];
|
|
5
|
+
|
|
6
|
+
declare const UIProvider: React.FC<React.PropsWithChildren & {
|
|
7
|
+
locale?: UILocale;
|
|
8
|
+
}>;
|
|
9
|
+
|
|
10
|
+
declare const dateUtils: {
|
|
11
|
+
readonly presets: {
|
|
12
|
+
/** 2026-01-01 */
|
|
13
|
+
readonly dateDash: "yyyy-MM-dd";
|
|
14
|
+
/** 2026/01/01 */
|
|
15
|
+
readonly dateSlash: "YYYY/MM/DD";
|
|
16
|
+
/** 2026-01-01 00:01 */
|
|
17
|
+
readonly dateTimeMinuteDash: "yyyy-MM-dd HH:mm";
|
|
18
|
+
/** 2026/01/01 00:01 */
|
|
19
|
+
readonly dateTimeMinuteSlash: "yyyy/MM/dd HH:mm";
|
|
20
|
+
/** 2026-01-01 00:01:02 */
|
|
21
|
+
readonly dateTimeSecondDash: "yyyy-MM-dd HH:mm:ss";
|
|
22
|
+
/** 2026/01/01 00:01:02 */
|
|
23
|
+
readonly dateTimeSecondSlash: "yyyy/MM/dd HH:mm:ss";
|
|
24
|
+
/** 00:01 */
|
|
25
|
+
readonly timeMinute: "HH:mm";
|
|
26
|
+
/** 00:01:02 */
|
|
27
|
+
readonly timeSecond: "HH:mm:ss";
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { UIProvider, dateUtils };
|
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {a}from'./chunk-75LTHX75.js';export{c as dateUtils}from'./chunk-75LTHX75.js';import {LazyMotion}from'motion/react';import {jsx}from'react/jsx-runtime';var c=()=>import('./motion-features-PPUUMXEA.js').then(o=>o.default),t=({children:o,locale:a$1="zh-CN"})=>jsx(LazyMotion,{features:c,strict:true,children:jsx(a,{locale:a$1,children:o})});t.displayName="UIProvider";export{t as UIProvider};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {domMax}from'motion/react';var r=domMax;export{r as default};
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jerry-fd/ui",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "UI component library based on Ant Design (Client-side only)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": ["index.js", "*.css"],
|
|
7
|
+
"module": "./index.js",
|
|
8
|
+
"types": "./index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./index.d.ts",
|
|
12
|
+
"import": "./index.js"
|
|
13
|
+
},
|
|
14
|
+
"./antd-data-filter": {
|
|
15
|
+
"types": "./antd-data-filter.d.ts",
|
|
16
|
+
"import": "./antd-data-filter.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": ["*.js", "*.d.ts", "*.d.cts", "*.css"],
|
|
20
|
+
"keywords": ["react", "antd", "filter", "data-filter", "table-filter", "client-side"],
|
|
21
|
+
"author": "jerry.fd",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"react": ">=18",
|
|
25
|
+
"react-dom": ">=18",
|
|
26
|
+
"antd": ">=5.0.0",
|
|
27
|
+
"dayjs": ">=1.11.0",
|
|
28
|
+
"tailwindcss": ">=4.1.18"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"cmdk": "^1.1.1",
|
|
32
|
+
"motion": "^12.29.0",
|
|
33
|
+
"radix-ui": "^1.4.3",
|
|
34
|
+
"react-use-measure": "^2.1.7",
|
|
35
|
+
"tailwind-merge": "^3.4.0",
|
|
36
|
+
"tailwind-variants": "^3.2.2"
|
|
37
|
+
}
|
|
38
|
+
}
|