@jerry-fd/ui 0.4.3 → 0.4.5

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.
@@ -0,0 +1,378 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { g as FiltersState, F as FilterColumnDef, k as ColumnDataTypes } from './helpers-Bv-Ixm5L.js';
3
+ export { C as CascaderConfig, a as CascaderFieldNames, b as CascaderOption, c as DATE_FORMATS, d as DateDisplayFormat, e as DatePickerConfig, f as FilterColumnOption, I as InputNumberConfig, P as PickerType, R as RangeDatePickerConfig, S as SingleDatePickerConfig, h as formatDateRange, i as getDateDisplayFormat, j as getPickerInputFormat, u as useTransition } from './helpers-Bv-Ixm5L.js';
4
+ import { I as IconType } from './icon-BmaneZ4I.js';
5
+ import { a as Button } from './button-DMIeJ1gB.js';
6
+ import React__default, { ReactNode, Dispatch, SetStateAction } from 'react';
7
+ import * as antd from 'antd';
8
+ import { TableProps } from 'antd';
9
+ import { ColumnType } from 'antd/es/table';
10
+ import * as antd_es_table_interface from 'antd/es/table/interface';
11
+ import { TableCurrentDataSource, SorterResult } from 'antd/es/table/interface';
12
+ import * as _rc_component_pagination_lib_Options from '@rc-component/pagination/lib/Options';
13
+ import * as antd_es_pagination_Pagination from 'antd/es/pagination/Pagination';
14
+ import * as _rc_component_pagination from '@rc-component/pagination';
15
+ import * as antd_es_button from 'antd/es/button';
16
+ import * as _rc_component_table_lib_interface from '@rc-component/table/lib/interface';
17
+ import * as zustand from 'zustand';
18
+ import 'dayjs';
19
+ import 'antd/es/date-picker';
20
+ import 'tailwind-variants';
21
+
22
+ type ProgressHandler = (args: {
23
+ loaded: number;
24
+ /** Content-Length 可知时为实际字节数,否则为 0 */
25
+ total: number;
26
+ /** false 时表示服务端未返回 Content-Length(如 chunked 传输),total 不可信 */
27
+ lengthComputable: boolean;
28
+ /** lengthComputable 为 true 时为 0-100 的整数,否则为 null */
29
+ percentage: number | null;
30
+ }) => void;
31
+ type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
32
+ interface XhrRequestInit<T = unknown> extends RequestInit {
33
+ headers?: Record<string, string>;
34
+ method?: Method;
35
+ timeout?: number;
36
+ responseType?: XMLHttpRequestResponseType;
37
+ withCredentials?: boolean;
38
+ onUploadProgress?: ProgressHandler;
39
+ onDownloadProgress?: ProgressHandler;
40
+ validateResponse?: (response: T) => boolean;
41
+ /** 为 true 时 resolve 值携带 status 和 headers,方便取 Content-Disposition 等响应头 */
42
+ withResponseHeaders?: boolean;
43
+ }
44
+ declare class RequestError extends Error {
45
+ static ETIMEDOUT: string;
46
+ static ERR_NETWORK: string;
47
+ static ERR_BAD_OPTION_VALUE: string;
48
+ static ERR_BAD_OPTION: string;
49
+ static ECONNABORTED: string;
50
+ static ERR_FR_TOO_MANY_REDIRECTS: string;
51
+ static ERR_DEPRECATED: string;
52
+ static ERR_BAD_RESPONSE: string;
53
+ static ERR_BAD_REQUEST: string;
54
+ static ERR_CANCELED: string;
55
+ static REQUEST_CANCELED: string;
56
+ static ERR_NOT_SUPPORT: string;
57
+ static ERR_INVALID_URL: string;
58
+ message: string;
59
+ code?: string | number;
60
+ data?: unknown;
61
+ constructor(message: string, code?: string | number, data?: unknown);
62
+ }
63
+
64
+ type DataTableState = {
65
+ activeTabId: string;
66
+ tabs: Record<string, PerTabState>;
67
+ /** 状态变更版本号,subscribe 用于检测变化 */
68
+ stateVersion: number;
69
+ /** 最近一次变更原因 */
70
+ changeReason: TableChangeReason;
71
+ };
72
+ type TabExternal = Pick<PerTabState, 'loading' | 'syncing' | 'exporting' | 'disabled'>;
73
+ type DataTableActions = {
74
+ setActiveTab: (tabId: string) => void;
75
+ initTab: (tabId: string, initial: Partial<PerTabState>) => void;
76
+ /** 同步外部状态 (不递增 stateVersion,不触发 onTableChange) */
77
+ syncTabExternal: (tabId: string, external: TabExternal) => void;
78
+ setFilters: (tabId: string, filters: FiltersState) => void;
79
+ setPagination: (tabId: string, current: number, pageSize: number) => void;
80
+ setTableChange: (tabId: string, sorter: SorterState, extra: TableCurrentDataSource<BaseRecord>) => void;
81
+ setTableSize: (size: TableSize) => void;
82
+ setColumnVisibility: (key: string, visible: boolean) => void;
83
+ setColumnVisibilityState: (updater: ColumnVisibilityUpdater) => void;
84
+ toggleColumnVisibility: (key: string) => void;
85
+ resetTabUIState: (tabId?: string) => void;
86
+ };
87
+ type DataTableStoreState = DataTableState & DataTableActions;
88
+
89
+ type UseDataTableProps<TData extends BaseRecord = BaseRecord> = ReturnType<typeof useDataTable<TData>>;
90
+ declare function useDataTable<TData extends BaseRecord = BaseRecord>(options: UseDataTableOptions<TData>): {
91
+ store: zustand.StoreApi<DataTableStoreState>;
92
+ activeTabId: string;
93
+ tabList: TabMeta[];
94
+ columns: DataTableColumnType<TData>[];
95
+ filterColumns: FilterColumnDef<BaseRecord>[];
96
+ tableColumns: DataTableColumnType<TData>[];
97
+ tableProps: {
98
+ dataSource: TData[] | undefined;
99
+ rowKey: string | keyof TData | _rc_component_table_lib_interface.GetRowKey<TData> | undefined;
100
+ size: antd_es_button.ButtonSize;
101
+ pagination: false;
102
+ scroll: ({
103
+ x?: number | true | string;
104
+ y?: number | string;
105
+ } & {
106
+ scrollToFirstRowOnChange?: boolean;
107
+ }) | undefined;
108
+ virtual: boolean | undefined;
109
+ onChange: (pagination: antd.TablePaginationConfig, filters: Record<string, antd_es_table_interface.FilterValue | null>, sorter: antd_es_table_interface.SorterResult<TData> | antd_es_table_interface.SorterResult<TData>[], extra: TableCurrentDataSource<TData>) => void;
110
+ };
111
+ paginationProps: {
112
+ current: number;
113
+ pageSize: number;
114
+ total: number | undefined;
115
+ onChange: (current: number, pageSize: number) => void;
116
+ onShowSizeChange: (current: number, pageSize: number) => void;
117
+ size?: antd_es_button.ButtonSize;
118
+ className?: string | undefined;
119
+ style?: React__default.CSSProperties | undefined;
120
+ disabled?: boolean | undefined;
121
+ role?: string;
122
+ "aria-activedescendant"?: string | undefined;
123
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
124
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
125
+ "aria-braillelabel"?: string | undefined;
126
+ "aria-brailleroledescription"?: string | undefined;
127
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
128
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
129
+ "aria-colcount"?: number | undefined;
130
+ "aria-colindex"?: number | undefined;
131
+ "aria-colindextext"?: string | undefined;
132
+ "aria-colspan"?: number | undefined;
133
+ "aria-controls"?: string | undefined;
134
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
135
+ "aria-describedby"?: string | undefined;
136
+ "aria-description"?: string | undefined;
137
+ "aria-details"?: string | undefined;
138
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
139
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
140
+ "aria-errormessage"?: string | undefined;
141
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
142
+ "aria-flowto"?: string | undefined;
143
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
144
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
145
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
146
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
147
+ "aria-keyshortcuts"?: string | undefined;
148
+ "aria-label"?: string | undefined;
149
+ "aria-labelledby"?: string | undefined;
150
+ "aria-level"?: number | undefined;
151
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
152
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
153
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
154
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
155
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
156
+ "aria-owns"?: string | undefined;
157
+ "aria-placeholder"?: string | undefined;
158
+ "aria-posinset"?: number | undefined;
159
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
160
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
161
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
162
+ "aria-required"?: (boolean | "true" | "false") | undefined;
163
+ "aria-roledescription"?: string | undefined;
164
+ "aria-rowcount"?: number | undefined;
165
+ "aria-rowindex"?: number | undefined;
166
+ "aria-rowindextext"?: string | undefined;
167
+ "aria-rowspan"?: number | undefined;
168
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
169
+ "aria-setsize"?: number | undefined;
170
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
171
+ "aria-valuemax"?: number | undefined;
172
+ "aria-valuemin"?: number | undefined;
173
+ "aria-valuenow"?: number | undefined;
174
+ "aria-valuetext"?: string | undefined;
175
+ align?: "center" | "end" | "start" | undefined;
176
+ locale?: _rc_component_pagination.PaginationLocale | undefined;
177
+ classNames?: antd_es_pagination_Pagination.PaginationClassNamesType;
178
+ styles?: antd_es_pagination_Pagination.PaginationStylesType;
179
+ prevIcon?: React__default.ComponentType | React__default.ReactNode;
180
+ nextIcon?: React__default.ComponentType | React__default.ReactNode;
181
+ prefixCls?: string | undefined;
182
+ rootClassName?: string;
183
+ showSizeChanger?: boolean | antd.SelectProps;
184
+ pageSizeOptions?: (string | number)[];
185
+ selectPrefixCls?: string | undefined;
186
+ defaultCurrent?: number | undefined;
187
+ totalBoundaryShowSizeChanger?: number;
188
+ defaultPageSize?: number | undefined;
189
+ hideOnSinglePage?: boolean | undefined;
190
+ sizeChangerRender?: _rc_component_pagination_lib_Options.SizeChangerRender;
191
+ showLessItems?: boolean | undefined;
192
+ showPrevNextJumpers?: boolean | undefined;
193
+ showQuickJumper?: boolean | {
194
+ goButton?: React__default.ReactNode;
195
+ };
196
+ showTitle?: boolean | undefined;
197
+ simple?: boolean | {
198
+ readOnly?: boolean;
199
+ } | undefined;
200
+ jumpPrevIcon?: React__default.ComponentType | React__default.ReactNode;
201
+ jumpNextIcon?: React__default.ComponentType | React__default.ReactNode;
202
+ itemRender?: (page: number, type: "page" | "prev" | "next" | "jump-prev" | "jump-next", element: React__default.ReactNode) => React__default.ReactNode;
203
+ showTotal?: (total: number, range: [number, number]) => React__default.ReactNode;
204
+ responsive?: boolean;
205
+ selectComponentClass?: any;
206
+ };
207
+ defaultFilters: FiltersState;
208
+ onFiltersChange: React__default.Dispatch<React__default.SetStateAction<FiltersState>>;
209
+ toolbarItems: false | ToolbarItemConfig<any>[] | undefined;
210
+ onToolbarAction: (action: ToolbarAction) => void;
211
+ isCustomTab: boolean;
212
+ customRender: ((ctx: TabRenderContext) => React__default.ReactNode) | undefined;
213
+ tabRenderCtx: TabRenderContext;
214
+ enableTableAutoScrollSizer: boolean;
215
+ };
216
+
217
+ type BaseRecord = Record<string, unknown>;
218
+ type TableSize = TableProps['size'];
219
+ type ColumnVisibilityState = Record<string, boolean>;
220
+ type SorterState = SorterResult<BaseRecord> | SorterResult<BaseRecord>[];
221
+ type PaginationState = {
222
+ current: number;
223
+ pageSize: number;
224
+ };
225
+ type TableChangeReason = 'filter' | 'paginate' | 'sort' | 'tab_switch' | 'mount';
226
+ /** 单个 Tab 的完整状态 */
227
+ type PerTabState = {
228
+ pagination: PaginationState;
229
+ filters: FiltersState;
230
+ sorter: SorterState;
231
+ extra: TableCurrentDataSource<BaseRecord>;
232
+ tableSize: TableSize;
233
+ columnVisibility: ColumnVisibilityState;
234
+ loading?: boolean;
235
+ syncing?: boolean;
236
+ exporting?: boolean;
237
+ disabled?: boolean;
238
+ };
239
+ type ColumnVisibilityUpdater = ColumnVisibilityState | ((prev: ColumnVisibilityState) => ColumnVisibilityState);
240
+ type ToolbarAction<T extends BaseRecord = BaseRecord> = {
241
+ action: string;
242
+ payload?: T;
243
+ tableState?: TableChangeState;
244
+ };
245
+ type DataTableFilterConfig = ColumnDataTypes & {
246
+ displayName?: string;
247
+ icon?: IconType;
248
+ pin?: boolean;
249
+ };
250
+ type SkeletonVariant = 'text' | 'avatar' | 'double-line' | 'group';
251
+ type DataTableColumnType<TData> = Omit<ColumnType<TData>, 'filterMode' | 'filterIcon' | 'defaultFilteredValue' | 'filteredValue' | 'filterMultiple' | 'filterOnClose' | 'filterDropdown' | 'filters' | 'filtered' | 'filterSearch' | 'onFilter' | 'filterDropdownProps' | 'filterDropdownOpen' | 'onFilterDropdownOpenChange' | 'filterResetToDefaultFilteredValue'> & {
252
+ /** 隐藏该列不在table里面显示, 如果有配置 filter 那么它仅会在 filter popover中显示 */
253
+ hidden?: boolean;
254
+ filter?: DataTableFilterConfig;
255
+ skeleton?: SkeletonVariant;
256
+ };
257
+ /** 传给 custom tab render 函数的上下文 */
258
+ type TabRenderContext = {
259
+ loading?: boolean;
260
+ syncing?: boolean;
261
+ exporting?: boolean;
262
+ disabled?: boolean;
263
+ filters: FiltersState;
264
+ pagination: PaginationState;
265
+ onFiltersChange: Dispatch<SetStateAction<FiltersState>>;
266
+ onPaginationChange: (current: number, pageSize: number) => void;
267
+ };
268
+ type TabConfigBase = {
269
+ id: string;
270
+ label: ReactNode;
271
+ value: string;
272
+ loading?: boolean;
273
+ syncing?: boolean;
274
+ exporting?: boolean;
275
+ disabled?: boolean;
276
+ total?: number;
277
+ defaultPagination?: PaginationState;
278
+ defaultFilters?: FiltersState;
279
+ toolbarItems?: false | ToolbarItemConfig<any>[];
280
+ enableTableAutoScrollSizer?: boolean;
281
+ };
282
+ type TableTabConfig<TData extends BaseRecord = BaseRecord> = TabConfigBase & {
283
+ type?: 'table';
284
+ rowKey?: TableProps<TData>['rowKey'];
285
+ columns: DataTableColumnType<TData>[];
286
+ dataSource?: TData[];
287
+ scroll?: TableProps<TData>['scroll'];
288
+ bordered?: boolean;
289
+ virtual?: boolean;
290
+ defaultSorter?: SorterState;
291
+ };
292
+ type CustomTabConfig = TabConfigBase & {
293
+ type: 'custom';
294
+ /** 显式提供,不从 columns 派生 */
295
+ filterColumns?: FilterColumnDef<BaseRecord>[];
296
+ render: (ctx: TabRenderContext) => ReactNode;
297
+ };
298
+ type TabConfig<TData extends BaseRecord = BaseRecord> = TableTabConfig<TData> | CustomTabConfig;
299
+ type UseDataTableOptions<TData extends BaseRecord = BaseRecord> = {
300
+ fireOnMount?: boolean;
301
+ storageKey?: string;
302
+ tabList: TabConfig<TData>[];
303
+ onTabChange?: (tabId: string) => void;
304
+ onTableChange?: (tabState: TableChangeState, reason: TableChangeReason, tabId: string) => void;
305
+ onToolbarAction?: (action: ToolbarAction, tabId: string) => void | Promise<void>;
306
+ };
307
+ /** Tab 元数据 (用于渲染 tab 列表) */
308
+ type TabMeta = Pick<TabConfig, 'id' | 'label' | 'value'>;
309
+ type NamedClass = 'root' | 'cardHeader' | 'cardHeading' | 'cardIcon' | 'cardToolbar' | 'cardContent' | 'cardSummary' | 'cardFooter' | 'tableSummary';
310
+ type DataTableProps<TData extends BaseRecord = BaseRecord> = UseDataTableProps<TData> & {
311
+ ref?: React.Ref<HTMLDivElement>;
312
+ size?: TableProps['size'];
313
+ variant?: 'default' | 'accent';
314
+ cardTitle?: React.ReactNode;
315
+ cardIcon?: React.ReactNode;
316
+ cardDescription?: React.ReactNode;
317
+ alwaysShowingColumns?: string[];
318
+ style?: React.CSSProperties & {
319
+ [key: `--${string}`]: string | number;
320
+ };
321
+ classNames?: Partial<Record<NamedClass, string>>;
322
+ slots?: Partial<Record<'cardSummary' | 'cardFooter' | 'tableSummary', React.ReactNode>>;
323
+ };
324
+ type ToolbarBuiltInActionType = 'data_refresh' | 'size_setting' | 'column_setting' | 'data_export' | 'data_import' | 'filter_btn';
325
+ /** 内置 toolbar item 配置 (data_import 专属字段在其他 type 下会被忽略) */
326
+ type BuiltInToolbarItem = {
327
+ type: Exclude<ToolbarBuiltInActionType, 'data_import'>;
328
+ key?: string;
329
+ btnProps?: Omit<React.ComponentProps<typeof Button>, 'onClick'>;
330
+ tooltip?: string;
331
+ hidden?: boolean;
332
+ };
333
+ type BuiltInToolbarImportItem = Omit<BuiltInToolbarItem, 'type'> & {
334
+ type: 'data_import';
335
+ /** accept 仅支持 mime 类型 eg: text/csv */
336
+ accept?: string;
337
+ acceptHint?: string;
338
+ onBeforeUpload?: (files: File[]) => boolean | Promise<File[]>;
339
+ requestConfig: Omit<XhrRequestInit, 'body'> & {
340
+ /** 上传地址 */
341
+ url: string;
342
+ /** 文件名 */
343
+ fieldName?: string;
344
+ body?: Record<string, unknown> | FormData;
345
+ onSuccess?: (response: unknown) => void;
346
+ onFailed?: (error: RequestError) => void;
347
+ /** 自定义验证服务端响应的数据是否正确 */
348
+ validateResponse?: (response: unknown) => boolean;
349
+ };
350
+ };
351
+ /** 自定义 toolbar item */
352
+ type CustomToolbarItem<TData = unknown> = {
353
+ type: 'custom';
354
+ key: string;
355
+ render: (ctx: ToolbarRenderContext<TData>) => React.ReactNode;
356
+ hidden?: boolean;
357
+ };
358
+ /** 渲染 context,传递给自定义组件 */
359
+ interface ToolbarRenderContext<TData = unknown> {
360
+ disabled?: boolean;
361
+ loading?: boolean;
362
+ syncing?: boolean;
363
+ exporting?: boolean;
364
+ columns: DataTableColumnType<TData>[];
365
+ onAction: (action: ToolbarAction) => void | Promise<void>;
366
+ }
367
+ type ToolbarItemConfig<TData = any> = ToolbarBuiltInActionType | BuiltInToolbarItem | BuiltInToolbarImportItem | CustomToolbarItem<TData>;
368
+ type TableChangeState = {
369
+ pagination: PaginationState;
370
+ filters: FiltersState;
371
+ sorter: SorterState;
372
+ };
373
+
374
+ declare function DataTable<TData extends BaseRecord = BaseRecord>(props: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
375
+
376
+ declare const DEFAULT_TOOLBAR_ITEMS: ToolbarItemConfig[];
377
+
378
+ export { DEFAULT_TOOLBAR_ITEMS, DataTable, type DataTableColumnType, FilterColumnDef, FiltersState, type PaginationState, type SorterState, type TabConfig, type TabMeta, type ToolbarItemConfig, type UseDataTableOptions, useDataTable };
package/data-table.js ADDED
@@ -0,0 +1,2 @@
1
+ import {j,k as k$1,l as l$1,e,b as b$1,c as c$1,m as m$2,f,g,h,o as o$1,d}from'./chunk-GL6SS2S2.js';import {O as O$1,V,k,l,p,s,c,r,t,q,U,n,T,m as m$1,o,M,i,D as D$1,E,v,F,w,x,z,y,A,B}from'./chunk-T44X4HCD.js';export{P as DATE_FORMATS,R as formatDateRange,Q as getDateDisplayFormat,S as getPickerInputFormat,O as useTransition}from'./chunk-T44X4HCD.js';import {b}from'./chunk-M7AD2PUT.js';import {Table,Pagination,Checkbox}from'antd';import {AnimatePresence,m}from'motion/react';import P,{useState,useCallback}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {create,useStore,createStore}from'zustand';import {useShallow}from'zustand/react/shallow';import {persist}from'zustand/middleware';import {immer}from'zustand/middleware/immer';import {Check,Upload,Download,RefreshCw,FolderUp}from'lucide-react';import {Progress,Portal}from'radix-ui';function me(e){P.useEffect(e,[]);}var da={small:"min-h-22",medium:"min-h-26",middle:"min-h-30",large:"min-h-38"};function mt({count:e,size:n="small",classNames:a,columns:t,scroll:o}){let r=P.useCallback(()=>pa(t,da[n]),[t,n]);return jsx(Table,{rowKey:"id",size:n,rowHoverable:false,classNames:a,dataSource:Array.from({length:e},(s,c)=>({id:c})),pagination:false,scroll:o,children:t.map((s,c)=>jsx(Table.Column,{dataIndex:s.dataIndex,width:s.width,title:jsx(m$2,{className:"h-22 w-full animate-none bg-bg-antd"}),render:r,onCell:()=>c===0?{colSpan:t.length}:{colSpan:0}},s.key||s.dataIndex))})}var ut=16;function pa(e,n){let a=e.length,o=`calc((100% - ${ut*(a-1)}px) / ${a})`,r=e.some(s=>s.skeleton==="avatar"||s.skeleton==="double-line");return jsx("div",{className:c("flex items-center",n),style:{gap:`${ut}px`},children:e.map((s,c)=>{let l=s?.key??c;return jsx("div",{style:{width:o},children:ua(s.skeleton,r)},l)})})}function ua(e,n){switch(e){case "avatar":return jsx(ba,{});case "double-line":return jsx(fa,{});case "group":return jsx(Ta,{needAlignment:n});default:return jsx(ma,{needAlignment:n})}}function ma({needAlignment:e}){return jsxs("div",{className:"grid h-full gap-4",children:[e&&jsx("div",{className:"h-12 w-1"}),jsx(m$2,{className:"h-10"})]})}function ba(){return jsxs("div",{className:"flex w-full items-center gap-6",children:[jsx(m$2,{className:"shrink-0 rounded-full",style:{width:"var(--avatar-size, 32px)",height:"var(--avatar-size, 32px)"}}),jsxs("div",{className:"grid flex-1 gap-4",children:[jsx(m$2,{className:"h-12 w-[60%]"}),jsx(m$2,{className:"h-10"})]})]})}function fa(){return jsxs("div",{className:"grid h-full w-full gap-4 py-4",children:[jsx(m$2,{className:"h-12 w-[60%]"}),jsx(m$2,{className:"h-10"})]})}function Ta({needAlignment:e}){return jsxs("div",{className:"grid h-full gap-4",children:[e&&jsx("div",{className:"h-12 w-1"}),jsxs("div",{className:"flex w-full items-center gap-4",children:[jsx(m$2,{className:"h-10 w-[20%]"}),jsx(m$2,{className:"h-10 w-[20%]"}),jsx(m$2,{className:"h-10 w-[20%]"}),jsx(m$2,{className:"h-10 w-[20%]"}),jsx(m$2,{className:"h-10 w-[20%]"})]})]})}var O={pagination:{current:1,pageSize:10},filters:[],sorter:{},extra:{action:"paginate",currentDataSource:[]},tableSize:"middle",columnVisibility:{},exporting:false,loading:false,syncing:false,disabled:false},Q=(e,n)=>(e.tabs[n]||(e.tabs[n]={...O}),e.tabs[n]),Da="APP_UI_TABLE_CONFIG",ha=(e,n)=>({activeTabId:n,tabs:{},stateVersion:0,changeReason:"mount",setActiveTab:a=>e(t=>{t.activeTabId=a,Q(t,a),t.changeReason="tab_switch",t.stateVersion++;}),syncTabExternal:(a,t)=>e(o=>{let r=o.tabs[a];r&&(r.loading=t.loading,r.syncing=t.syncing,r.exporting=t.exporting,r.disabled=t.disabled);}),initTab:(a,t)=>e(o=>{let r=o.tabs[a];r?(t.pagination&&(r.pagination=t.pagination),t.filters&&(r.filters=t.filters),t.sorter&&(r.sorter=t.sorter),r.loading=t.loading,r.syncing=t.syncing,r.exporting=t.exporting,r.disabled=t.disabled):o.tabs[a]={...O,...t};}),setFilters:(a,t)=>e(o=>{let r=Q(o,a);r.filters=t,r.pagination.current=1,o.changeReason="filter",o.stateVersion++;}),setPagination:(a,t,o)=>e(r=>{let s=Q(r,a);s.pagination={current:t,pageSize:o},r.changeReason="paginate",r.stateVersion++;}),setTableChange:(a,t,o)=>e(r=>{let s=Q(r,a);s.sorter=t,s.extra=o,r.changeReason="sort",r.stateVersion++;}),setTableSize:a=>e(t=>{Q(t,t.activeTabId).tableSize=a;}),setColumnVisibility:(a,t)=>e(o=>{Q(o,o.activeTabId).columnVisibility[a]=t;}),setColumnVisibilityState:a=>e(t=>{let o=Q(t,t.activeTabId);o.columnVisibility=typeof a=="function"?a(o.columnVisibility):a;}),toggleColumnVisibility:a=>e(t=>{let o=Q(t,t.activeTabId);o.columnVisibility[a]=!o.columnVisibility[a];}),resetTabUIState:a=>e(t=>{let o=a??t.activeTabId,r=t.tabs[o];r&&(r.tableSize=O.tableSize,r.columnVisibility={});})}),bt=(e,n=Da)=>createStore()(persist(immer(a=>ha(a,e)),{name:n,partialize:a=>({tableUIStatus:Object.fromEntries(Object.entries(a.tabs).map(([t,o])=>[t,{tableSize:o.tableSize,columnVisibility:o.columnVisibility}]))}),merge:(a,t)=>{let o=a,r={...t};if(!o?.tableUIStatus)return r;for(let[s,c]of Object.entries(o.tableUIStatus)){let l=r.tabs[s];l?(c.tableSize&&(l.tableSize=c.tableSize),c.columnVisibility&&(l.columnVisibility=c.columnVisibility)):r.tabs[s]={...O,tableSize:c.tableSize??O.tableSize,columnVisibility:c.columnVisibility??{}};}return r}}));var Tt=P.createContext(null),gt=["id","action","actions"],yt=P.createContext({alwaysShowingColumns:gt});function Ct({store:e,tabList:n,alwaysShowingColumns:a,children:t}){let o=P.useMemo(()=>({tabList:n,alwaysShowingColumns:a??gt}),[n,a]);return jsx(yt.Provider,{value:o,children:jsx(Tt.Provider,{value:e,children:t})})}function fe(){let e=P.useContext(Tt);if(!e)throw new Error("useDataTableStoreApi must be used within DataTableProvider");return e}function J(e){let n=fe();return useStore(n,e)}function Dt(){let e=fe();return useStore(e,useShallow(n=>n.tabs[n.activeTabId]??O))}function ht(){return J(e=>e.tabs[e.activeTabId]?.tableSize??O.tableSize)}function St(){let e=fe();return useStore(e,useShallow(n=>n.tabs[n.activeTabId]?.columnVisibility??O.columnVisibility))}function vt(){let e=fe();return useStore(e,useShallow(n=>{let a=n.tabs[n.activeTabId];return {loading:a?.loading??false,syncing:a?.syncing??false,exporting:a?.exporting??false,disabled:a?.disabled??false}}))}function re(){return P.useContext(yt)}function xt(e){let{tabList:n$1}=re(),a=J(o=>o.activeTabId),t=J(o=>o.setActiveTab);return !n$1||!n$1?.length||n$1.length===1?null:jsx(n,{...e,children:jsx(f,{className:c("w-full"),value:a,onValueChange:t,children:jsx(g,{variant:"line",size:"medium",className:"w-full px-12",children:n$1.map(o=>jsx(h,{value:o.value,className:"py-8",children:o.label},o.id))})})})}var Z=create((e,n)=>({activeTableId:"",tasks:{},updateTableId:a=>e(()=>({activeTableId:a})),addTask:a=>e(t=>{let o=t.activeTableId;return {tasks:{...t.tasks,[o]:[...t.tasks[o]??[],a]}}}),removeTask:a=>e(t=>{let o=t.activeTableId;return {tasks:{...t.tasks,[o]:(t.tasks[o]??[]).filter(r=>r.localTaskId!==a)}}}),updateTask:(a,t)=>e(o=>{let r=o.activeTableId;return {tasks:{...o.tasks,[r]:(o.tasks[r]??[]).map(s=>s.localTaskId===a?{...s,...t}:s)}}}),getTasks:()=>{let a=n();return a.tasks[a.activeTableId]??[]}})),ge=()=>Z(useShallow(e=>e.tasks[e.activeTableId]??[]));function Rt({className:e,...n}){let a=O$1(),[t,o]=P.useState(false),r=J(l=>l.setTableSize),s=ht(),c$1=P.useMemo(()=>[{groupType:"radio",value:s,options:[{label:a("large"),value:"large"},{label:a("middle"),value:"middle"},{label:a("compact"),value:"small"}],onValueChange:r}],[r,a,s]);return jsx(o$1,{side:"bottom",align:"end",collisionPadding:6,items:c$1,className:"min-w-100",open:t,onOpenChange:o,children:jsxs(M,{mode:"stroke",variant:"neutral",size:"small",className:c("gap-0",e,t&&"active"),...n,children:[jsx(i,{content:a("density"),size:"small",children:jsx("div",{className:"absolute inset-0"})}),jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"size-16",viewBox:"0 0 1024 1024",children:jsx("path",{d:"M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 0 0-11.3 0L403.6 366.3a7.23 7.23 0 0 0 5.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z"})})]})})}function Pt(e,n){return new Promise((a,t)=>{let r=Object.assign({},{method:"GET",responseType:"json"},n),{method:s,timeout:c,responseType:l,headers:p,body:i,validateResponse:f}=r,h;function g(){r.signal&&r.signal.removeEventListener("abort",h);}if(r.signal&&r.signal.aborted)return t(new D("Aborted"));let m=new XMLHttpRequest,b=null,u=null;m.open(s.toUpperCase(),e,true),m.timeout=c||0,m.withCredentials=r.withCredentials===true,m.onloadend=function(){if(!m)return;let x=m.status,N=m.getResponseHeader("Content-Type")??"",z=l&&l!=="text"&&l!=="json",k=z?m.response:m.responseText,G=m.getAllResponseHeaders().split(`\r
2
+ `).reduce((y,I)=>{let V=I.indexOf(": ");return V!==-1&&(y[I.slice(0,V).toLowerCase()]=I.slice(V+2)),y},{});function L(y){if(b){b.cancel();let I=y instanceof Blob?y.size:y instanceof ArrayBuffer?y.byteLength:typeof y=="string"?y.length:0;r.onDownloadProgress?.({loaded:I,total:I,lengthComputable:true,percentage:100});}r.withResponseHeaders?a({data:y,status:x,headers:G}):a(y);}if(x>=200&&x<300)if(l==="json"){let y=k;try{let I=y!==""?JSON.parse(y):null;if(!(f?.(I)??!0))throw new D("invalid response");L(I);}catch(I){t(I);}}else f?.(k)??true?L(k):t(new D("invalid response"));else {let y=null;if(!z)if(N.includes("application/json"))try{y=k!==""?JSON.parse(k):null;}catch{}else y=k||null;t(new D("Xhr Request failed",x,y));}g(),m=null;},m.onabort=function(){m&&(b?.cancel(),u?.cancel(),t(new D(D.ECONNABORTED)),g(),m=null);},m.onerror=function(){b?.cancel(),u?.cancel(),t(new D("Network Error",D.ERR_NETWORK)),g(),m=null;},m.ontimeout=function(){b?.cancel(),u?.cancel(),t(new D("Timeout exceeded",D.ETIMEDOUT)),g(),m=null;},typeof p=="object"&&Object.keys(p).forEach(E=>{m?.setRequestHeader(E,p[E]);}),i==null&&m.setRequestHeader("Content-Type",""),l&&l!=="json"&&(m.responseType=l),r.onDownloadProgress&&(b=Et(r.onDownloadProgress),m.addEventListener("progress",b)),r.onUploadProgress&&m.upload&&(u=Et(r.onUploadProgress),m.upload.addEventListener("progress",u),m.upload.addEventListener("loadend",E=>{u?.cancel(),r.onUploadProgress?.({loaded:E.loaded,total:E.loaded,lengthComputable:true,percentage:100});})),r.signal&&(h=()=>{m&&(t(new D(D.REQUEST_CANCELED,D.REQUEST_CANCELED)),m.abort(),m=null);},r.signal.aborted?h():r.signal.addEventListener("abort",h)),m.send(i??null);})}function Et(e){return d(a=>{e({loaded:a.loaded,total:a.lengthComputable?a.total:0,lengthComputable:a.lengthComputable,percentage:a.lengthComputable&&a.total>0?Math.round(a.loaded/a.total*100):null});},250)}var D=class extends Error{constructor(a,t,o){super(a);b(this,"message");b(this,"code");b(this,"data");this.name="RequestError",this.message=a,t&&(this.code=t),o!==void 0&&(this.data=o);}};b(D,"ETIMEDOUT","ETIMEDOUT"),b(D,"ERR_NETWORK","ERR_NETWORK"),b(D,"ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION_VALUE"),b(D,"ERR_BAD_OPTION","ERR_BAD_OPTION"),b(D,"ECONNABORTED","ECONNABORTED"),b(D,"ERR_FR_TOO_MANY_REDIRECTS","ERR_FR_TOO_MANY_REDIRECTS"),b(D,"ERR_DEPRECATED","ERR_DEPRECATED"),b(D,"ERR_BAD_RESPONSE","ERR_BAD_RESPONSE"),b(D,"ERR_BAD_REQUEST","ERR_BAD_REQUEST"),b(D,"ERR_CANCELED","ERR_CANCELED"),b(D,"REQUEST_CANCELED","REQUEST_CANCELED"),b(D,"ERR_NOT_SUPPORT","ERR_NOT_SUPPORT"),b(D,"ERR_INVALID_URL","ERR_INVALID_URL");var wt=(e=false)=>{let[n,a]=useState(e),t=useCallback(()=>{a(true);},[]),o=useCallback(()=>{a(false);},[]);return [n,t,o]};var At=150,ye={ease:[.26,.08,.25,1],duration:.25},wa={initial:{opacity:0,scale:.95},visible:{opacity:1,scale:1,transition:{...ye,when:"beforeChildren"}},hidden:{opacity:0,scale:1.05,transition:{...ye,when:"afterChildren"}}},Aa={initial:{y:10,opacity:0},visible:{y:0,opacity:1,transition:ye},hidden:{y:-10,opacity:0,transition:ye}};function _t({containerRef:e,accept:n,acceptHint:a,onFileSelect:t}){let o=P.useRef(null),r=P.useRef(null),[s,c,l]=wt(false),p=P.useCallback(g=>{g.stopPropagation();let{target:m,relatedTarget:b}=g;m.matches(".data-drop-target, .data-drop-area")&&(!b||!b.matches(".data-drop-target, .data-drop-area"))&&(o.current=window.setTimeout(()=>{l();},At));},[l]),i=P.useCallback(()=>{o.current&&window.clearTimeout(o.current);},[]),f=P.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>{l();},At);},[l]),h=P.useEffectEvent(async g=>{let{dataTransfer:m}=g,b=[];m.files&&m.files.length>0&&(b=b.concat(Array.from(m.files))),b.length&&(r.current&&window.clearTimeout(r.current),r.current=window.setTimeout(()=>{t?.(b);},600));});return me(()=>{if(!e?.current)return;let g=e.current;return g.addEventListener("dragenter",c),()=>{g.removeEventListener("dragenter",c),o.current&&window.clearTimeout(o.current),r.current&&window.clearTimeout(r.current);}}),jsx(Portal.Root,{container:e?.current,asChild:true,children:jsx(AnimatePresence,{children:s&&jsx(m.div,{className:"data-drop-area absolute inset-0 bottom-8 z-10 flex items-center justify-center select-none",onDragLeave:p,onDragOver:i,onDrop:f,initial:"hidden",animate:"visible",exit:"hidden",variants:wa,children:jsx(Na,{accept:n,acceptHint:a,onFileSelect:h})})})})}function Na({accept:e,acceptHint:n,onFileSelect:a}){let t=O$1(),[o,r]=P.useState(false),s=P.useCallback(p=>{if(!e||!p.dataTransfer.items.length){r(false);return}let i=[...p.dataTransfer.items].every(f=>_a(f.type,e));r(!i);},[e]),c$1=P.useCallback(p=>{let{relatedTarget:i,currentTarget:f}=p;i&&f.contains(i)&&p.stopPropagation();},[]),l=P.useCallback(p=>{if(o){p.preventDefault();return}a(p);},[o,a]);return jsxs("div",{"data-dropzone":true,onDragEnter:s,onDrop:l,onDragLeave:c$1,className:"data-drop-target relative flex h-full w-full items-center justify-center rounded-[8px] bg-bg-weak p-16",children:[jsx("svg",{className:c("pointer-events-none absolute top-16 left-16 h-[calc(100%-32px)] w-[calc(100%-32px)] overflow-visible",o?"text-error-base":"text-primary-base"),children:jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",rx:"8",fill:"none",stroke:"currentColor",strokeDasharray:"11, 8",strokeDashoffset:"0",strokeLinecap:"round",strokeWidth:"2",children:jsx("animate",{attributeName:"stroke-dashoffset",from:"0",to:"-19",dur:"0.5s",repeatCount:"indefinite"})})}),jsxs(m.div,{className:c("pointer-events-none flex flex-col items-center gap-4",o?"text-error-base":"text-primary-base"),variants:Aa,children:[jsxs("div",{className:"flex flex-col items-center",children:[jsx(FolderUp,{className:"size-48"}),jsx("strong",{className:"text-title-h6",children:t(o?"file_type_rejected":"drop_file_hint")})]}),jsx("span",{className:"text-text-soft",children:n?t("file_support_list",{formats:n}):t("file_support_all")})]})]})}function _a(e,n,a=""){if(!n||n==="*")return true;if(!e&&!a)return false;let t=n.split(",").map(s=>s.trim().toLowerCase()),o=(e||"").toLowerCase(),r=(a||"").toLowerCase();return t.some(s=>{if(s.startsWith("."))return r.endsWith(s);if(s.endsWith("/*")){let c=s.slice(0,-1);return o.startsWith(c)}return o===s})}function Lt(e=""){return `${e}-${Date.now().toString(36)+Math.random().toString(36).slice(2)}`}function Ot(e){return e?e.filter(n=>n.filter!==void 0).map(n=>{let{filter:a,dataIndex:t,title:o}=n,r=Array.isArray(t)?t.join("."):t,s=a.displayName??(typeof o=="string"?o:r);return {...a,columnId:r,displayName:s}}):[]}function Bt(e){return e.key?String(e.key):Array.isArray(e.dataIndex)?e.dataIndex.join("."):String(e.dataIndex)}function La(e){return typeof e=="string"&&e.length>0}function Mt(e){return [Array.isArray(e.dataIndex)?e.dataIndex.join(" "):typeof e.dataIndex=="string"?e.dataIndex:null,typeof e.title=="string"?e.title:null,e.key!==null?String(e.key):null].filter(La)}function Ft(e,n=22){if(!e)return "";if(e.length<=n)return e;let a=Math.floor(n/2.5),t=e.lastIndexOf("."),o,r;if(t>0?(o=e.substring(0,t),r=e.substring(t)):(o=e,r=""),o.length<=a*2)return e;let s=o.substring(0,a),c=o.substring(o.length-a);return `${s}\u2026${c}${r}`}function zt(e,n){return {type:"import",localTaskId:Lt(n?`import-file-${n}`:"import-file"),status:"pending",progress:0,file:e}}function Ht({tooltip:e,btnProps:n,disabled:a,loading:t,containerRef:o,accept:r,acceptHint:s,requestConfig:c,onBeforeUpload:l}){let p=O$1(),i$1=P.useId(),f=Z(b=>b.addTask),h=Z(b=>b.updateTask),g=a||t,m=P.useCallback(async b=>{if(b=[b[0]],l&&typeof l=="function"){let u=await l(b);if(u===false)return;Array.isArray(u)&&(b=u);}b.forEach((u,E)=>{let x=new AbortController,N={...zt(u,E),abortController:x};if(f(N),!c)throw Error("requestConfig is required.");let{url:z,method:k="POST",fieldName:G="file",body:L,onSuccess:y,onFailed:I,onUploadProgress:V,...W}=c,B=new FormData;B.append(G,u),L instanceof FormData?L.forEach((_,$)=>B.append($,_)):L&&Object.keys(L).forEach(_=>{B.append(_,L[_]);}),Pt(z,{...W,onUploadProgress:_=>{V?.(_),h(N.localTaskId,{status:"importing",progress:_.percentage??0});},method:k,body:B,signal:x.signal}).then(_=>{y?.(_),h(N.localTaskId,{status:"done"});}).catch(_=>{I?.(_),h(N.localTaskId,{status:"failed"});});});},[c,l,f,h]);return jsxs(Fragment,{children:[jsx(_t,{containerRef:o,onFileSelect:m,accept:r,acceptHint:s}),jsx("input",{type:"file",id:i$1,accept:r,multiple:false,onChange:b=>{let u=Array.from(b.target.files??[]);u.length&&(m(u),b.target.value="");},className:"invisible absolute -top-9999 -left-9999"}),jsx(i,{content:e??p("import_tooltip"),children:jsx("label",{htmlFor:i$1,className:"m-0 inline-flex cursor-pointer p-0 leading-none",children:jsx(M,{variant:"neutral",mode:"stroke",loading:t,startContent:jsx(Upload,{}),disabled:g,className:"pointer-events-none",...n,children:p("data_import")})})})]})}function $t({disabled:e,columns:n}){let a=O$1(),{alwaysShowingColumns:t}=re(),[o,r]=P.useState(false),s=St(),c$1=J(p=>p.setColumnVisibilityState),l=P.useCallback((p,i)=>{c$1(f=>({...f,[p]:i}));},[c$1]);return jsxs(D$1,{open:o,onOpenChange:r,children:[jsx(E,{asChild:true,children:jsx(M,{mode:"stroke",variant:"neutral",size:"small",className:c(o&&"active","relative gap-0"),disabled:e,startContent:jsx(v,{}),children:jsx(i,{content:a("column_set"),children:jsx("div",{className:"absolute inset-0"})})})}),jsx(F,{align:"end",side:"bottom",arrow:false,className:"w-fit rounded-xl p-0",sideOffset:6,children:jsxs(w,{children:[jsx(x,{autoFocus:true,placeholder:"Search..."}),jsx(z,{children:a("no_results")}),jsx(y,{className:"max-h-256",children:jsx(A,{children:n.map(p=>{let i=Bt(p),f=s[i]!==false,h=typeof p.title=="string"&&p.title?.trim()==="",g=h?p.key:p.title;return jsxs(B,{keywords:Mt(p),onSelect:()=>l(i,!f),className:"group flex items-center gap-6",value:i,disabled:t?.includes(i),children:[jsx(Checkbox,{checked:f,tabIndex:-1,className:c("mr-4 opacity-100")}),jsx("span",{className:c(h&&"capitalize"),children:g})]},i)})})})]})})]})}var Kt=["data_refresh","size_setting","column_setting","filter_btn"];function Ua({btnProps:e,disabled:n,loading:a,onAction:t}){let o=O$1();return jsx(M,{variant:"primary",startContent:jsx(Download,{}),loading:a,disabled:n||a,onClick:()=>t({action:"data_export"}),...e,children:o("data_export")})}var $a={initial:{opacity:0,scale:.85,x:10,originX:1},animate:{opacity:1,scale:1,x:0,originX:1},exit:{opacity:0,scale:.85,x:10,originX:1}},Xa={ease:[.26,.08,.25,1],duration:.25};function Wt({containerRef:e,columns:n,filter:a,items:t=Kt,className:o,onAction:r,...s}){let{loading:c$1,syncing:l,exporting:p,disabled:i}=Dt(),f=P.useMemo(()=>t.map(u=>Wa(u)),[t]),h=P.useMemo(()=>f.filter(u=>!u.hidden),[f]),g=P.useCallback(u=>{r?.(u);},[r]),m$1=P.useMemo(()=>({disabled:i,loading:c$1,syncing:l,exporting:p,columns:n,onAction:g}),[i,c$1,p,l,n,g]),b=u=>{let E={btnProps:u.btnProps,tooltip:u.tooltip,disabled:i||l||c$1,loading:c$1,onAction:g};switch(u.type){case "data_refresh":return jsx(Ka,{...E,syncing:l});case "size_setting":return jsx(Rt,{...u.btnProps});case "column_setting":return jsx($t,{...u.btnProps,columns:n});case "data_export":return jsx(Ua,{...E,loading:p});case "data_import":return jsx(Ht,{...E,loading:p,containerRef:e,requestConfig:u.requestConfig,onBeforeUpload:u.onBeforeUpload,acceptHint:u.acceptHint,accept:u.accept});case "custom":return u.render?.(m$1);case "filter_btn":return a;default:return null}};return jsx(m.div,{"data-slot":"data-table-toolbar",className:c("flex items-center gap-8 transition-opacity",o),...s,children:jsx(AnimatePresence,{mode:"popLayout",initial:false,children:h.map(u=>jsx(m.div,{layout:true,variants:$a,initial:"initial",animate:"animate",exit:"exit",className:"leading-none",transition:Xa,children:b(u)},u.key))})})}function Ka({btnProps:e,tooltip:n,disabled:a,loading:t,syncing:o,onAction:r}){let s=O$1(),c=n??s("refresh");return jsx(i,{content:c,children:jsx(M,{mode:"stroke",variant:"neutral",startContent:jsx(RefreshCw,{}),loading:o||t,disabled:a||t||o,className:"gap-0",onClick:()=>r({action:"data_refresh"}),...e})})}function Wa(e){return typeof e=="string"?{type:e,key:e}:e.type==="custom"?{type:"custom",key:e.key,hidden:e.hidden,render:e.render}:e.type==="data_import"?{type:"data_import",key:e.key??e.type,hidden:e.hidden,btnProps:e.btnProps,tooltip:e.tooltip,accept:e.accept,acceptHint:e.acceptHint,requestConfig:e.requestConfig,onBeforeUpload:e.onBeforeUpload}:{type:e.type,key:e.key??e.type,hidden:e.hidden,btnProps:e.btnProps,tooltip:e.tooltip}}function Gt({className:e,value:n,...a}){return jsx(Progress.Root,{"data-slot":"progress",className:c("relative flex h-4 w-full items-center overflow-x-hidden rounded-full bg-bg-soft",e),...a,children:jsx(Progress.Indicator,{"data-slot":"progress-indicator",className:"size-full flex-1 bg-primary-base transition-all",style:{transform:`translateX(-${100-(n||0)}%)`}})})}function Yt({onAction:e,...n}){let a=ge();return jsx(m.div,{"data-slot":"data-table-taskbar",className:"w-fit items-center justify-center bg-bg-white select-none",...n,children:a.map(t=>t.type==="import"?jsx(Ga,{...t,onSuccess:()=>{e?.({action:"import_done"});}},t.localTaskId):jsx(Ya,{...t},t.localTaskId))})}function Ga(e){let n=O$1(),a=Z(s=>s.removeTask),t=e.status==="failed",o=e.status==="done";return jsxs("div",{className:"flex h-full items-center gap-8",children:[jsxs("span",{className:c("truncate text-md font-medium",o?"text-success-base":t?"text-error-base":"text-text-strong"),children:[n(t?"import_failed":o?"import_done":e.status)," ",Ft(e.file.name)]}),jsxs("span",{className:"min-w-34 shrink-0 text-right text-sm text-text-sub",children:[e.progress,"%"]}),jsx(M,{variant:"neutral",mode:"ghost",size:"xsmall",className:"min-w-28 rounded-full px-0",onClick:()=>{e.abortController?.signal.aborted===false&&!t&&!o&&e.abortController?.abort("User canceled"),a(e.localTaskId),o&&e.onSuccess?.(e.localTaskId);},startContent:o?jsx(Check,{className:"text-success-base"}):jsx(Qa,{})})]})}function Ya(e){return jsxs("div",{className:"flex w-fit min-w-220 flex-col justify-center gap-6",children:[jsxs("div",{className:"lable flex items-center justify-center gap-12",children:[jsx("span",{className:"font-medium text-text-strong",children:"Task Name"}),jsx("span",{className:"ml-auto text-sm text-text-sub",children:e.progress})]}),jsx(Gt,{value:66})]})}function Qa(){return jsxs("svg",{width:"0.8em",height:"0.8em",viewBox:"0 0 12 12",fill:"none",children:[jsx("path",{d:"M10.4854 1.99998L2.00007 10.4853",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),jsx("path",{d:"M10.4854 10.4844L2.00007 1.99908",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}var Qt={initial:{y:10,opacity:0},animate:{y:0,opacity:1},exit:{y:-10,opacity:0}},Jt={ease:[.26,.08,.25,1],duration:.25};function Zt({containerRef:e,items:n,filter:a,columns:t,onAction:o}){let r=ge();return jsx(AnimatePresence,{initial:false,mode:"popLayout",children:r.length?jsx(Yt,{variants:Qt,initial:"initial",animate:"animate",exit:"exit",transition:Jt,onAction:o},"task-bar"):jsx(Wt,{variants:Qt,initial:"initial",animate:"animate",exit:"exit",transition:Jt,containerRef:e,onAction:o,filter:a,columns:t,items:n},"toolbar")})}var Za=26,ea=44,eo=200,to=250,ao={},oo=e=>e.querySelector(".ant-table-thead")?.offsetHeight??ea,ke=(e,n)=>{if(!e)return 0;let a=e.querySelectorAll(':scope [data-id^="data-table-card-"]'),t=0;return a.forEach(o=>{let r=o.getAttribute("data-id")==="data-table-card-content";t+=r?0:o.clientHeight;}),document.documentElement.clientHeight-n-window.scrollY-Za-oo(e)-t-3};function ta(e,n,{x:a,y:t,...o}=ao,r,s,c){let[l,p]=P.useState(t),i=P.useRef(0),f=P.useRef(null);if(P.useLayoutEffect(()=>{if(!s)return;i.current=e.current?.offsetTop??0,f.current||(f.current=c$1(()=>{i.current=e.current?.offsetTop??0,p(ke(e.current,i.current));},eo,false,true)),window.addEventListener("resize",f.current);let g=null;return e.current&&(g=new MutationObserver(f.current),g.observe(e.current,{childList:true,subtree:true,attributes:true,attributeFilter:["style","class","hidden"]})),()=>{f.current&&(window.removeEventListener("resize",f.current),f.current.cancel()),g?.disconnect();}},[e,s]),P.useEffect(()=>{if(!s||t!==void 0)return;p(ke(e.current,i.current));let g=setTimeout(()=>{p(ke(e.current,i.current));},to);return ()=>{clearTimeout(g);}},[t,n,e,s]),!s)return {x:a,y:t,...o};let h=l&&typeof l=="number"?l+(r?ea:0):l;return {x:c&&!a?1280:a??"max-content",y:c&&!h?620:h,...o}}var so={ease:[.26,.08,.25,1],duration:.3},io={},lo={root:"m-0 flex w-full [&_.ant-pagination-total-text]:ps-6 [&_.ant-pagination-total-text]:mr-auto"};function co(e){let{store:n,tabList:a,alwaysShowingColumns:t,...o}=e;return me(()=>{let r=document.body,s=l=>{l.preventDefault(),l.dataTransfer&&(l.target.closest("[data-dropzone]")?l.dataTransfer.dropEffect="copy":l.dataTransfer.dropEffect="none");},c=l=>{l.preventDefault();};return r.addEventListener("drop",c),r.addEventListener("dragover",s),r.addEventListener("dragenter",s),()=>{r.removeEventListener("drop",c),r.removeEventListener("dragover",s),r.removeEventListener("dragenter",s);}}),jsx(Ct,{store:n,tabList:a,alwaysShowingColumns:t,children:jsx(po,{...o})})}function po(e$1){let{ref:n$1,activeTabId:a,variant:t$1,style:o$1,cardTitle:r$1,cardIcon:s$1,cardDescription:c$1,classNames:l$2,enableTableAutoScrollSizer:p$1,slots:i,columns:f,filterColumns:h,tableColumns:g,defaultFilters:m$2,tableProps:b,paginationProps:u,toolbarItems:E,isCustomTab:x,tabRenderCtx:N,customRender:z,onToolbarAction:k$2,onFiltersChange:G}=e$1,L=O$1(),y=P.useRef(null),I=P.useRef(null),{tabList:V$1}=re(),{syncing:W,loading:B}=vt(),_=Z(S=>S.updateTableId),[$,ue]=V({filters:m$2,onFiltersChange:G});P.useEffect(()=>{_(a);},[a]);let ee=$&&$.length!==0,he=!!(B&&g.some(S=>S.skeleton)),Se=Math.min(u.pageSize,15),ve=P.useCallback(S=>L("pagination_total").replace("{total}",String(S)),[L]),ie=ta(I,`${$?.length}-${a}`,b.scroll,x,p$1,b.virtual),d=he?jsx(mt,{id:`${a}-skeleton`,columns:g,size:b.size,count:Se,scroll:ie}):jsx(Table,{id:`${a}-data-table`,columns:g,loading:B,showSorterTooltip:false,...b,scroll:ie}),T$1=!!u.total&&(u.hideOnSinglePage!==true||u.total>u.pageSize);return jsxs(k,{ref:e([I,n$1]),style:o$1,className:c("relative rounded-[16px]",p$1&&"h-full max-h-[calc(100vh-var(--offset-top))] overflow-hidden",l$2?.root),variant:t$1,children:[jsxs(l,{"data-id":"data-table-card-header",className:c("data-table-card-header relative min-h-56 grow-0 px-14 pt-12 pb-10",t$1==="accent"&&"pt-10",V$1&&V$1?.length>1&&"border-b-0",l$2?.cardHeader),children:[jsxs(p,{className:c("flex items-center gap-12",l$2?.cardHeading),children:[s$1&&jsx(s,{className:c("size-34 border border-stone-200 bg-stone-100 text-text-sub",!!(r$1&&c$1)&&"size-44 [&_svg]:size-24",l$2?.cardIcon),children:s$1}),r$1&&jsxs("div",{className:c(c$1&&"flex flex-col gap-4"),children:[jsx(r,{children:r$1}),c$1&&jsx(t,{children:c$1})]})]}),jsx(AnimatePresence,{initial:false,children:E!==false&&jsx(q,{as:m.div,className:l$2?.cardToolbar,...j,children:jsx(Zt,{containerRef:y,items:E,columns:f,onAction:k$2,filter:h.length!==0&&jsx(U,{columns:h,filters:$,actions:ue,disabled:B||W,align:"end",enableAutoBack:true},`${a}-filter`)})})})]}),i?.cardSummary&&jsx(n,{"data-id":"data-table-card-summary",className:c("grow-0 p-12",l$2?.cardSummary),children:i.cardSummary}),jsx(xt,{"data-id":"data-table-card-tabs",className:"grow-0 p-0"}),jsx(AnimatePresence,{initial:false,children:ee&&jsx(m.div,{"data-id":"data-table-card-filter-values",...k$1,children:jsx(n,{className:"p-0",children:jsx(T,{columns:h,filters:$,actions:ue,"data-id":"data-table-active-filters",className:"flex flex-wrap gap-10 px-12 pt-16",disabled:W||B,enableAutoClose:true})})},a)}),jsxs(m$1,{"data-id":"data-table-card-content",className:c("relative grow p-12 pb-0",(W||B)&&"pointer-events-none",p$1&&"overflow-hidden",l$2?.cardContent),children:[i?.tableSummary&&jsx(n,{"data-id":"data-table-card-table-summary",className:c("grow-0 p-0 pb-12",l$2?.tableSummary),children:i.tableSummary}),jsx(AnimatePresence,{mode:"popLayout",initial:false,children:jsx(m.div,{ref:y,className:c("relative w-full",x&&p$1&&"overflow-auto"),style:x&&p$1?{maxHeight:ie.y}:io,...l$1,transition:so,children:x?z?.(N):d},a)})]}),T$1&&jsx(o,{"data-id":"data-table-card-pager",className:"flex min-h-44 w-full grow-0 items-center justify-between",children:jsx(Pagination,{classNames:lo,disabled:B||W,size:"small",showTotal:ve,...u})}),i?.cardFooter&&jsx(o,{"data-id":"data-table-card-footer",className:c("grow-0 px-16 py-12",l$2?.cardFooter),children:i.cardFooter})]})}function mo(e){let{tabList:n,fireOnMount:a=true,storageKey:t,onTabChange:o,onTableChange:r,onToolbarAction:s}=e,{pagination:c,tableStateStorageKey:l}=b$1(),p=P.useRef(new Set),[i]=P.useState(()=>{let d=bt(n[0].id,t??l);for(let T of n)d.getState().initTab(T.id,oa(T)),p.current.add(T.id);return d}),f=P.useRef({onTabChange:o,onTableChange:r,onToolbarAction:s});f.current={onTabChange:o,onTableChange:r,onToolbarAction:s};let h=P.useRef(new Map);h.current=new Map(n.map(d=>[d.id,d]));let g=n.map(d=>d.id).join(),m=P.useRef(true);P.useEffect(()=>{if(m.current){m.current=false;return}for(let d of n)p.current.has(d.id)||(i.getState().initTab(d.id,oa(d)),p.current.add(d.id));},[i,g]);let b=n.map(d=>`${d.id}:${d.loading}:${d.syncing}:${d.exporting}:${d.disabled}`).join();P.useEffect(()=>{let{syncTabExternal:d}=i.getState();for(let T of n)d(T.id,{loading:T.loading,syncing:T.syncing,exporting:T.exporting,disabled:T.disabled});},[i,b]),P.useEffect(()=>{let d=i.getState().stateVersion;return i.subscribe(T=>{if(T.stateVersion===d)return;d=T.stateVersion;let S=T.activeTabId,H=T.tabs[S];if(!H)return;let te={pagination:H.pagination,filters:H.filters,sorter:H.sorter},Ne=T.changeReason;Ne==="tab_switch"&&f.current.onTabChange?.(S),f.current.onTableChange?.(te,Ne,S);})},[i]);let u=P.useRef(false);P.useEffect(()=>{if(u.current||(u.current=true,!a))return;let d=i.getState(),T=d.activeTabId,S=d.tabs[T];S&&f.current.onTableChange?.(S,"mount",T);},[i,a]);let E=useStore(i,d=>d.activeTabId),x=useStore(i,useShallow(d=>d.tabs[d.activeTabId]??O)),N=h.current.get(E),z=N?.type==="custom",k=z?void 0:N,G=z?N:void 0,{columnVisibility:L,pagination:y}=x,I=k?.columns,V=G?.filterColumns,W=P.useMemo(()=>I?I.filter(d=>!d.hidden):[],[I]),B=P.useMemo(()=>z?V??[]:Ot(I),[z,V,I]),_=P.useMemo(()=>W.filter(d=>{let T=d.key??d.dataIndex;return !T||L[T]!==false}),[W,L]),$=P.useCallback(d=>{let T=i.getState(),S=T.activeTabId,H=T.tabs[S]?.filters??[],te=typeof d=="function"?d(H):d;T.setFilters(S,te);},[i]),ue=P.useCallback((d,T,S,H)=>{let te=i.getState().activeTabId;i.getState().setTableChange(te,S,H);},[i]),ee=P.useCallback((d,T)=>{let S=i.getState().activeTabId;i.getState().setPagination(S,d,T);},[i]),he=P.useCallback(d=>{let T=i.getState(),S=T.activeTabId,H=T.tabs[S],te={pagination:H?.pagination??O.pagination,filters:H?.filters??O.filters,sorter:H?.sorter??O.sorter};d.tableState=te,f.current.onToolbarAction?.(d,S);},[i]),Se=P.useMemo(()=>({...c,current:y.current,pageSize:y.pageSize,total:N?.total,onChange:ee,onShowSizeChange:ee}),[c,y,N?.total,ee]),ve=P.useMemo(()=>({loading:x.loading,syncing:x.syncing,exporting:x.exporting,disabled:x.disabled,filters:x.filters,pagination:y,onFiltersChange:$,onPaginationChange:ee}),[x,y,$,ee]),ie=P.useMemo(()=>n.map(({id:d,label:T,value:S})=>({id:d,label:T,value:S})),[g]);return {store:i,activeTabId:E,tabList:ie,columns:W,filterColumns:B,tableColumns:_,tableProps:{dataSource:k?.dataSource,rowKey:k?.rowKey,size:x.tableSize,pagination:false,scroll:k?.scroll,virtual:k?.virtual,onChange:ue},paginationProps:Se,defaultFilters:x.filters,onFiltersChange:$,toolbarItems:N?.toolbarItems,onToolbarAction:he,isCustomTab:z,customRender:G?.render,tabRenderCtx:ve,enableTableAutoScrollSizer:k?.enableTableAutoScrollSizer??G?.enableTableAutoScrollSizer??true}}function oa(e){return {pagination:e.defaultPagination,filters:e.defaultFilters,sorter:e.type!=="custom"?e.defaultSorter:void 0,loading:e.loading,syncing:e.syncing,exporting:e.exporting,disabled:e.disabled}}export{Kt as DEFAULT_TOOLBAR_ITEMS,co as DataTable,mo as useDataTable};
@@ -1,14 +1,7 @@
1
- import React__default from 'react';
1
+ import { Dayjs } from 'dayjs';
2
+ import { I as IconType } from './icon-BmaneZ4I.js';
2
3
  import { DatePickerProps } from 'antd';
3
4
  import { RangePickerProps } from 'antd/es/date-picker';
4
- import { Dayjs } from 'dayjs';
5
-
6
- type IconSize = number | string;
7
- type IconBaseProps = {
8
- size?: IconSize;
9
- className?: string;
10
- };
11
- type IconType<P extends IconBaseProps = IconBaseProps> = React__default.ComponentType<P> | React__default.ReactElement<P>;
12
5
 
13
6
  interface FilterColumnOption {
14
7
  key?: React.Key;
@@ -141,4 +134,103 @@ type DataFilterProps<T> = UseDataFiltersProps & {
141
134
  columns: FilterColumnDef<T>[];
142
135
  } & DataFilterUiProps;
143
136
 
144
- export type { CascaderConfig as C, DataFilterProps as D, FilterColumnDef as F, IconType as I, RangeDatePickerConfig as R, SingleDatePickerConfig as S, DatePickerConfig as a, CascaderFieldNames as b, CascaderOption as c, FilterColumnOption as d, FiltersState as e, InputNumberConfig as f, ColumnDataTypes as g };
137
+ var filter = "Add Filters";
138
+ var search_keywords = "Search...";
139
+ var no_results = "No results";
140
+ var to = "to";
141
+ var input_number = "Input Number";
142
+ var min = "Min";
143
+ var max = "Max";
144
+ var apply = "Apply Filter";
145
+ var clear = "Clear Filter";
146
+ var clear_all = "Clear";
147
+ var pagination_total = "Total {total} items";
148
+ var refresh = "Refresh";
149
+ var column_set = "Table Settings";
150
+ var density = "Density";
151
+ var large = "Large";
152
+ var middle = "Middle";
153
+ var compact = "Compact";
154
+ var pinned = "Pinned";
155
+ var data_export = "Export Data";
156
+ var data_import = "Import Data";
157
+ var ok = "Ok";
158
+ var close = "Close";
159
+ var copy = "Copy";
160
+ var copied = "Copied";
161
+ var drop_file_hint = "Drop file here to upload";
162
+ var file_support_all = "All file formats are supported";
163
+ var file_support_list = "Supported formats: {formats}";
164
+ var file_type_rejected = "This file type is not supported";
165
+ var import_tooltip = "Drag and drop files into the table area to import";
166
+ var pending = "Pending";
167
+ var importing = "Importing";
168
+ var exporting = "Exporting";
169
+ var import_failed = "Import Failed";
170
+ var import_done = "Done";
171
+ var done = "Done";
172
+ var enUS = {
173
+ filter: filter,
174
+ search_keywords: search_keywords,
175
+ no_results: no_results,
176
+ to: to,
177
+ input_number: input_number,
178
+ min: min,
179
+ max: max,
180
+ apply: apply,
181
+ clear: clear,
182
+ clear_all: clear_all,
183
+ pagination_total: pagination_total,
184
+ refresh: refresh,
185
+ column_set: column_set,
186
+ density: density,
187
+ large: large,
188
+ middle: middle,
189
+ compact: compact,
190
+ pinned: pinned,
191
+ "delete": "Delete",
192
+ data_export: data_export,
193
+ data_import: data_import,
194
+ ok: ok,
195
+ close: close,
196
+ copy: copy,
197
+ copied: copied,
198
+ drop_file_hint: drop_file_hint,
199
+ file_support_all: file_support_all,
200
+ file_support_list: file_support_list,
201
+ file_type_rejected: file_type_rejected,
202
+ import_tooltip: import_tooltip,
203
+ pending: pending,
204
+ importing: importing,
205
+ exporting: exporting,
206
+ import_failed: import_failed,
207
+ import_done: import_done,
208
+ done: done
209
+ };
210
+
211
+ type LocaleKey = keyof typeof enUS;
212
+ declare function useTransition(): (key: LocaleKey, params?: Record<string, string | number>) => string;
213
+
214
+ type PickerType = 'date' | 'week' | 'month' | 'quarter' | 'year';
215
+ interface DateDisplayFormat {
216
+ full: string;
217
+ withoutYear: string;
218
+ timeFormat: string | null;
219
+ }
220
+ declare const DATE_FORMATS: Record<PickerType, {
221
+ cn: {
222
+ full: string;
223
+ withoutYear: string;
224
+ };
225
+ en: {
226
+ full: string;
227
+ withoutYear: string;
228
+ };
229
+ }>;
230
+ declare function getDateDisplayFormat(config: DatePickerConfig | undefined, locale: string): DateDisplayFormat;
231
+ declare function formatDateRange(start: Dayjs, end: Dayjs, isCn: boolean, format: DateDisplayFormat, picker: PickerType): string;
232
+ declare function getPickerInputFormat(picker: PickerType | undefined, locale: string, showTime?: boolean | {
233
+ format: string;
234
+ }): string;
235
+
236
+ export { type CascaderConfig as C, type DataFilterProps as D, type FilterColumnDef as F, type InputNumberConfig as I, type PickerType as P, type RangeDatePickerConfig as R, type SingleDatePickerConfig as S, type CascaderFieldNames as a, type CascaderOption as b, DATE_FORMATS as c, type DateDisplayFormat as d, type DatePickerConfig as e, type FilterColumnOption as f, type FiltersState as g, formatDateRange as h, getDateDisplayFormat as i, getPickerInputFormat as j, type ColumnDataTypes as k, useTransition as u };
@@ -0,0 +1,10 @@
1
+ import React__default from 'react';
2
+
3
+ type IconSize = number | string;
4
+ type IconBaseProps = {
5
+ size?: IconSize;
6
+ className?: string;
7
+ };
8
+ type IconType<P extends IconBaseProps = IconBaseProps> = React__default.ComponentType<P> | React__default.ReactElement<P>;
9
+
10
+ export type { IconType as I };