@fangxinyan/lumina 0.7.0 → 0.8.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/dist/Pagination.cjs +3 -3
- package/dist/Pagination.js +2 -2
- package/dist/Select.cjs +2 -2
- package/dist/Select.d.cts +4 -0
- package/dist/Select.d.ts +4 -0
- package/dist/Select.js +1 -1
- package/dist/Splitter.cjs +2 -2
- package/dist/Splitter.d.cts +10 -0
- package/dist/Splitter.d.ts +10 -0
- package/dist/Splitter.js +1 -1
- package/dist/{Table-W4HPZ7MZ.css → Table-KB6EEBDJ.css} +28 -1
- package/dist/Table.cjs +4 -4
- package/dist/Table.d.cts +7 -1
- package/dist/Table.d.ts +7 -1
- package/dist/Table.js +3 -3
- package/dist/TablePro.cjs +5 -5
- package/dist/TablePro.js +4 -4
- package/dist/{Tabs-A3IG6UZ6.css → Tabs-FB2AMBWL.css} +14 -0
- package/dist/Tabs.cjs +2 -2
- package/dist/Tabs.d.cts +6 -0
- package/dist/Tabs.d.ts +6 -0
- package/dist/Tabs.js +1 -1
- package/dist/{chunk-WMZV7PNO.js → chunk-63RSKQID.js} +5 -1
- package/dist/{chunk-3EHJ5QI3.js → chunk-DURKCGEM.js} +26 -12
- package/dist/{chunk-BJDQVVCG.js → chunk-HQNDVNTQ.js} +1 -1
- package/dist/{chunk-RAK6CENJ.js → chunk-IJDM2U3B.js} +52 -35
- package/dist/{chunk-LOWTSOWT.js → chunk-J5UEQ3ZQ.js} +32 -5
- package/dist/{chunk-U7VEPMCX.cjs → chunk-JBS353O4.cjs} +32 -5
- package/dist/{chunk-56I6ZKGU.cjs → chunk-PJFYIXBX.cjs} +2 -2
- package/dist/{chunk-ENFLP7SN.cjs → chunk-PNKNZREC.cjs} +15 -5
- package/dist/{chunk-XZXY3XCL.cjs → chunk-RR7KWH26.cjs} +52 -35
- package/dist/{chunk-D7YSY5RZ.cjs → chunk-SF7BPXDJ.cjs} +26 -12
- package/dist/{chunk-JINKQT6H.cjs → chunk-WHBKQZU5.cjs} +6 -2
- package/dist/{chunk-EA3NZBCZ.js → chunk-WMISXERU.js} +14 -4
- package/dist/index.cjs +13 -13
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +7 -7
- package/dist/styles.css +42 -1
- package/docs/llms/drawer.md +8 -1
- package/docs/llms/select.md +19 -0
- package/docs/llms/splitter.md +12 -1
- package/docs/llms/tablepro.md +23 -1
- package/docs/llms/tabs.md +21 -0
- package/docs/llms.md +1 -1
- package/package.json +1 -1
package/dist/Pagination.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./chunk-
|
|
3
|
+
var chunkPJFYIXBX_cjs = require('./chunk-PJFYIXBX.cjs');
|
|
4
|
+
require('./chunk-SF7BPXDJ.cjs');
|
|
5
5
|
require('./chunk-GFKWSDD6.cjs');
|
|
6
6
|
require('./chunk-FJB3243S.cjs');
|
|
7
7
|
require('./chunk-STQDKMS5.cjs');
|
|
@@ -15,5 +15,5 @@ require('./chunk-EE5KXDRK.cjs');
|
|
|
15
15
|
|
|
16
16
|
Object.defineProperty(exports, "Pagination", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkPJFYIXBX_cjs.Pagination; }
|
|
19
19
|
});
|
package/dist/Pagination.js
CHANGED
package/dist/Select.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkSF7BPXDJ_cjs = require('./chunk-SF7BPXDJ.cjs');
|
|
4
4
|
require('./chunk-GFKWSDD6.cjs');
|
|
5
5
|
require('./chunk-FJB3243S.cjs');
|
|
6
6
|
require('./chunk-STQDKMS5.cjs');
|
|
@@ -14,5 +14,5 @@ require('./chunk-EE5KXDRK.cjs');
|
|
|
14
14
|
|
|
15
15
|
Object.defineProperty(exports, "Select", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkSF7BPXDJ_cjs.Select; }
|
|
18
18
|
});
|
package/dist/Select.d.cts
CHANGED
|
@@ -74,6 +74,8 @@ interface BaseSelectProps<T extends string | number = string> extends Omit<React
|
|
|
74
74
|
listHeight?: number;
|
|
75
75
|
/** Portal 菜单的额外内联样式,可覆盖宽度或高度。 */
|
|
76
76
|
popupStyle?: React.CSSProperties;
|
|
77
|
+
/** 按当前选择动态禁用候选项;静态 disabled 仍然优先。 */
|
|
78
|
+
getOptionDisabled?: (option: SelectOption<T>, selectedValues: readonly T[]) => boolean;
|
|
77
79
|
/** Controlled open state. */
|
|
78
80
|
open?: boolean;
|
|
79
81
|
defaultOpen?: boolean;
|
|
@@ -103,6 +105,8 @@ interface MultiSelectProps<T extends string | number = string> extends BaseSelec
|
|
|
103
105
|
onClear?: () => void;
|
|
104
106
|
/** Max selected items shown as tags before collapsing to "+N". */
|
|
105
107
|
maxTagCount?: number;
|
|
108
|
+
/** 多选允许的最大选择数;达到上限后禁用尚未选中的候选项。 */
|
|
109
|
+
maxCount?: number;
|
|
106
110
|
}
|
|
107
111
|
type SelectProps<T extends string | number = string> = SingleSelectProps<T> | MultiSelectProps<T>;
|
|
108
112
|
type SelectComponent = {
|
package/dist/Select.d.ts
CHANGED
|
@@ -74,6 +74,8 @@ interface BaseSelectProps<T extends string | number = string> extends Omit<React
|
|
|
74
74
|
listHeight?: number;
|
|
75
75
|
/** Portal 菜单的额外内联样式,可覆盖宽度或高度。 */
|
|
76
76
|
popupStyle?: React.CSSProperties;
|
|
77
|
+
/** 按当前选择动态禁用候选项;静态 disabled 仍然优先。 */
|
|
78
|
+
getOptionDisabled?: (option: SelectOption<T>, selectedValues: readonly T[]) => boolean;
|
|
77
79
|
/** Controlled open state. */
|
|
78
80
|
open?: boolean;
|
|
79
81
|
defaultOpen?: boolean;
|
|
@@ -103,6 +105,8 @@ interface MultiSelectProps<T extends string | number = string> extends BaseSelec
|
|
|
103
105
|
onClear?: () => void;
|
|
104
106
|
/** Max selected items shown as tags before collapsing to "+N". */
|
|
105
107
|
maxTagCount?: number;
|
|
108
|
+
/** 多选允许的最大选择数;达到上限后禁用尚未选中的候选项。 */
|
|
109
|
+
maxCount?: number;
|
|
106
110
|
}
|
|
107
111
|
type SelectProps<T extends string | number = string> = SingleSelectProps<T> | MultiSelectProps<T>;
|
|
108
112
|
type SelectComponent = {
|
package/dist/Select.js
CHANGED
package/dist/Splitter.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkJBS353O4_cjs = require('./chunk-JBS353O4.cjs');
|
|
4
4
|
require('./chunk-NRJXZPZR.cjs');
|
|
5
5
|
require('./chunk-EE5KXDRK.cjs');
|
|
6
6
|
|
|
@@ -8,5 +8,5 @@ require('./chunk-EE5KXDRK.cjs');
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "Splitter", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkJBS353O4_cjs.Splitter; }
|
|
12
12
|
});
|
package/dist/Splitter.d.cts
CHANGED
|
@@ -30,6 +30,16 @@ interface SplitterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "chil
|
|
|
30
30
|
handleClassName?: string;
|
|
31
31
|
/** 原生属性透传到拖拽手柄,可用于设置 aria-label。 */
|
|
32
32
|
handleProps?: Omit<React.HTMLAttributes<HTMLDivElement>, "onPointerDown">;
|
|
33
|
+
/** 第一个面板的附加类名。 */
|
|
34
|
+
firstPaneClassName?: string;
|
|
35
|
+
/** 第一个面板的内联样式,优先级高于内部分栏尺寸样式。 */
|
|
36
|
+
firstPaneStyle?: React.CSSProperties;
|
|
37
|
+
/** 第二个面板的附加类名。 */
|
|
38
|
+
secondPaneClassName?: string;
|
|
39
|
+
/** 第二个面板的内联样式。 */
|
|
40
|
+
secondPaneStyle?: React.CSSProperties;
|
|
41
|
+
/** 自定义分隔手柄内容;传入 null 可隐藏默认握柄。 */
|
|
42
|
+
handle?: React.ReactNode;
|
|
33
43
|
/** 第二个面板保留的最小尺寸。默认 24px。 */
|
|
34
44
|
secondMin?: number;
|
|
35
45
|
/** 可选持久化键;仅保存一个数值尺寸。 */
|
package/dist/Splitter.d.ts
CHANGED
|
@@ -30,6 +30,16 @@ interface SplitterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "chil
|
|
|
30
30
|
handleClassName?: string;
|
|
31
31
|
/** 原生属性透传到拖拽手柄,可用于设置 aria-label。 */
|
|
32
32
|
handleProps?: Omit<React.HTMLAttributes<HTMLDivElement>, "onPointerDown">;
|
|
33
|
+
/** 第一个面板的附加类名。 */
|
|
34
|
+
firstPaneClassName?: string;
|
|
35
|
+
/** 第一个面板的内联样式,优先级高于内部分栏尺寸样式。 */
|
|
36
|
+
firstPaneStyle?: React.CSSProperties;
|
|
37
|
+
/** 第二个面板的附加类名。 */
|
|
38
|
+
secondPaneClassName?: string;
|
|
39
|
+
/** 第二个面板的内联样式。 */
|
|
40
|
+
secondPaneStyle?: React.CSSProperties;
|
|
41
|
+
/** 自定义分隔手柄内容;传入 null 可隐藏默认握柄。 */
|
|
42
|
+
handle?: React.ReactNode;
|
|
33
43
|
/** 第二个面板保留的最小尺寸。默认 24px。 */
|
|
34
44
|
secondMin?: number;
|
|
35
45
|
/** 可选持久化键;仅保存一个数值尺寸。 */
|
package/dist/Splitter.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
background: var(--lmn-table-bg, var(--bg));
|
|
5
5
|
box-shadow: var(--lmn-table-neu-shadow-inset, var(--neu-shadow-inset));
|
|
6
6
|
overflow: auto;
|
|
7
|
+
container-type: inline-size;
|
|
7
8
|
}
|
|
8
9
|
/* When scroll=y is on, the wrap itself becomes the scroll region. */
|
|
9
10
|
.table-wrap.scroll-y { overflow-y: auto; }
|
|
@@ -72,6 +73,10 @@
|
|
|
72
73
|
.table.striped tbody tr:nth-child(even) td {
|
|
73
74
|
background: color-mix(in oklch, var(--lmn-table-bg-sunken, var(--bg-sunken)) 40%, transparent);
|
|
74
75
|
}
|
|
76
|
+
.table:not(.cards) tbody tr.active-row td {
|
|
77
|
+
background: color-mix(in oklch, var(--lmn-table-accent-soft, var(--accent-soft)) 72%, transparent);
|
|
78
|
+
color: var(--lmn-table-accent-ink, var(--accent-ink));
|
|
79
|
+
}
|
|
75
80
|
|
|
76
81
|
/* Embossed: each row sits on the surface */
|
|
77
82
|
.table.embossed { border-spacing: 0; }
|
|
@@ -128,11 +133,33 @@
|
|
|
128
133
|
}
|
|
129
134
|
.table.cards.hoverable tbody tr:hover .card-row-surface { box-shadow: var(--lmn-table-neu-shadow-panel, var(--neu-shadow-panel)); }
|
|
130
135
|
.table.cards.hoverable tbody tr:hover td { background: transparent; }
|
|
136
|
+
.table.cards tbody tr.active-row .card-row-surface {
|
|
137
|
+
box-shadow:
|
|
138
|
+
var(--lmn-table-neu-shadow-control, var(--neu-shadow-control)),
|
|
139
|
+
inset 0 0 0 2px var(--lmn-table-accent-glow, var(--accent-glow));
|
|
140
|
+
}
|
|
141
|
+
.table.cards tbody tr.active-row td {
|
|
142
|
+
color: var(--lmn-table-accent-ink, var(--accent-ink));
|
|
143
|
+
}
|
|
131
144
|
|
|
132
145
|
.table .row-check { width: 44px; }
|
|
133
146
|
.table .row-check .checkbox { display: inline-flex; }
|
|
134
147
|
.table .row-expand { width: 40px; text-align: center; }
|
|
135
|
-
.table-empty {
|
|
148
|
+
.table .table-empty {
|
|
149
|
+
padding: 0;
|
|
150
|
+
color: var(--lmn-table-fg-muted, var(--fg-muted));
|
|
151
|
+
}
|
|
152
|
+
.table-empty-content {
|
|
153
|
+
box-sizing: border-box;
|
|
154
|
+
width: 100%;
|
|
155
|
+
padding: 60px 20px;
|
|
156
|
+
text-align: center;
|
|
157
|
+
}
|
|
158
|
+
.table-wrap.scroll-x .table-empty-content {
|
|
159
|
+
position: sticky;
|
|
160
|
+
left: 0;
|
|
161
|
+
width: 100cqi;
|
|
162
|
+
}
|
|
136
163
|
|
|
137
164
|
/* Expand button */
|
|
138
165
|
.expand-btn {
|
package/dist/Table.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./chunk-
|
|
5
|
-
require('./chunk-
|
|
3
|
+
var chunkPNKNZREC_cjs = require('./chunk-PNKNZREC.cjs');
|
|
4
|
+
require('./chunk-PJFYIXBX.cjs');
|
|
5
|
+
require('./chunk-SF7BPXDJ.cjs');
|
|
6
6
|
require('./chunk-GFKWSDD6.cjs');
|
|
7
7
|
require('./chunk-KCDOC3HS.cjs');
|
|
8
8
|
require('./chunk-FJB3243S.cjs');
|
|
@@ -18,5 +18,5 @@ require('./chunk-EE5KXDRK.cjs');
|
|
|
18
18
|
|
|
19
19
|
Object.defineProperty(exports, "Table", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkPNKNZREC_cjs.Table; }
|
|
22
22
|
});
|
package/dist/Table.d.cts
CHANGED
|
@@ -2,6 +2,8 @@ import * as React from 'react';
|
|
|
2
2
|
import { f as ComponentThemeProps } from './componentThemeTypes-Jt4B5aU8.cjs';
|
|
3
3
|
|
|
4
4
|
type RowKey = string | number;
|
|
5
|
+
/** 根据当前数据行生成附加类名,或为全部行使用同一个类名。 */
|
|
6
|
+
type TableRowClassName<Row = any> = string | ((row: Row, index: number) => string | undefined);
|
|
5
7
|
interface TableColumnFilterItem {
|
|
6
8
|
text: React.ReactNode;
|
|
7
9
|
value: string | number;
|
|
@@ -154,6 +156,10 @@ interface TableProps<Row = any> extends Omit<React.HTMLAttributes<HTMLDivElement
|
|
|
154
156
|
caption?: React.ReactNode;
|
|
155
157
|
/** Called when user clicks a row. */
|
|
156
158
|
onRowClick?: (row: Row, index: number) => void;
|
|
159
|
+
/** 仅高亮指定行,不改变选择状态或复选框。 */
|
|
160
|
+
activeRowKey?: RowKey;
|
|
161
|
+
/** 为数据行提供固定类名或按行计算类名。 */
|
|
162
|
+
rowClassName?: TableRowClassName<Row>;
|
|
157
163
|
/** Empty state. */
|
|
158
164
|
empty?: React.ReactNode;
|
|
159
165
|
className?: string;
|
|
@@ -161,4 +167,4 @@ interface TableProps<Row = any> extends Omit<React.HTMLAttributes<HTMLDivElement
|
|
|
161
167
|
type TableComponent = <Row extends Record<string, any> = any>(props: TableProps<Row> & React.RefAttributes<HTMLDivElement>) => React.ReactElement | null;
|
|
162
168
|
declare const Table: TableComponent;
|
|
163
169
|
|
|
164
|
-
export { type ExpandableConfig, type PaginationConfig, type RowKey, type RowSelectionConfig, Table, type TableChangeAction, type TableChangeInfo, type TableColumn, type TableColumnFilterItem, type TablePaginationState, type TableProps, type TableScrollConfig, type TableSorterState, type TableVariant };
|
|
170
|
+
export { type ExpandableConfig, type PaginationConfig, type RowKey, type RowSelectionConfig, Table, type TableChangeAction, type TableChangeInfo, type TableColumn, type TableColumnFilterItem, type TablePaginationState, type TableProps, type TableRowClassName, type TableScrollConfig, type TableSorterState, type TableVariant };
|
package/dist/Table.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import * as React from 'react';
|
|
|
2
2
|
import { f as ComponentThemeProps } from './componentThemeTypes-Jt4B5aU8.js';
|
|
3
3
|
|
|
4
4
|
type RowKey = string | number;
|
|
5
|
+
/** 根据当前数据行生成附加类名,或为全部行使用同一个类名。 */
|
|
6
|
+
type TableRowClassName<Row = any> = string | ((row: Row, index: number) => string | undefined);
|
|
5
7
|
interface TableColumnFilterItem {
|
|
6
8
|
text: React.ReactNode;
|
|
7
9
|
value: string | number;
|
|
@@ -154,6 +156,10 @@ interface TableProps<Row = any> extends Omit<React.HTMLAttributes<HTMLDivElement
|
|
|
154
156
|
caption?: React.ReactNode;
|
|
155
157
|
/** Called when user clicks a row. */
|
|
156
158
|
onRowClick?: (row: Row, index: number) => void;
|
|
159
|
+
/** 仅高亮指定行,不改变选择状态或复选框。 */
|
|
160
|
+
activeRowKey?: RowKey;
|
|
161
|
+
/** 为数据行提供固定类名或按行计算类名。 */
|
|
162
|
+
rowClassName?: TableRowClassName<Row>;
|
|
157
163
|
/** Empty state. */
|
|
158
164
|
empty?: React.ReactNode;
|
|
159
165
|
className?: string;
|
|
@@ -161,4 +167,4 @@ interface TableProps<Row = any> extends Omit<React.HTMLAttributes<HTMLDivElement
|
|
|
161
167
|
type TableComponent = <Row extends Record<string, any> = any>(props: TableProps<Row> & React.RefAttributes<HTMLDivElement>) => React.ReactElement | null;
|
|
162
168
|
declare const Table: TableComponent;
|
|
163
169
|
|
|
164
|
-
export { type ExpandableConfig, type PaginationConfig, type RowKey, type RowSelectionConfig, Table, type TableChangeAction, type TableChangeInfo, type TableColumn, type TableColumnFilterItem, type TablePaginationState, type TableProps, type TableScrollConfig, type TableSorterState, type TableVariant };
|
|
170
|
+
export { type ExpandableConfig, type PaginationConfig, type RowKey, type RowSelectionConfig, Table, type TableChangeAction, type TableChangeInfo, type TableColumn, type TableColumnFilterItem, type TablePaginationState, type TableProps, type TableRowClassName, type TableScrollConfig, type TableSorterState, type TableVariant };
|
package/dist/Table.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { Table } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
1
|
+
export { Table } from './chunk-WMISXERU.js';
|
|
2
|
+
import './chunk-HQNDVNTQ.js';
|
|
3
|
+
import './chunk-DURKCGEM.js';
|
|
4
4
|
import './chunk-62VV5COT.js';
|
|
5
5
|
import './chunk-KATJAJUU.js';
|
|
6
6
|
import './chunk-3QXP2ZNP.js';
|
package/dist/TablePro.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./chunk-
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
3
|
+
var chunkWHBKQZU5_cjs = require('./chunk-WHBKQZU5.cjs');
|
|
4
|
+
require('./chunk-PNKNZREC.cjs');
|
|
5
|
+
require('./chunk-PJFYIXBX.cjs');
|
|
6
|
+
require('./chunk-SF7BPXDJ.cjs');
|
|
7
7
|
require('./chunk-GFKWSDD6.cjs');
|
|
8
8
|
require('./chunk-KCDOC3HS.cjs');
|
|
9
9
|
require('./chunk-FJB3243S.cjs');
|
|
@@ -19,5 +19,5 @@ require('./chunk-EE5KXDRK.cjs');
|
|
|
19
19
|
|
|
20
20
|
Object.defineProperty(exports, "TablePro", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkWHBKQZU5_cjs.TablePro; }
|
|
23
23
|
});
|
package/dist/TablePro.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { TablePro } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
1
|
+
export { TablePro } from './chunk-63RSKQID.js';
|
|
2
|
+
import './chunk-WMISXERU.js';
|
|
3
|
+
import './chunk-HQNDVNTQ.js';
|
|
4
|
+
import './chunk-DURKCGEM.js';
|
|
5
5
|
import './chunk-62VV5COT.js';
|
|
6
6
|
import './chunk-KATJAJUU.js';
|
|
7
7
|
import './chunk-3QXP2ZNP.js';
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
/* ============ Tabs ============ */
|
|
2
2
|
.tabs { display: flex; flex-direction: column; gap: var(--gap-3); }
|
|
3
|
+
.tabs.fill {
|
|
4
|
+
flex: 1 1 auto;
|
|
5
|
+
width: 100%;
|
|
6
|
+
height: 100%;
|
|
7
|
+
min-width: 0;
|
|
8
|
+
min-height: 0;
|
|
9
|
+
}
|
|
3
10
|
.tabs-nav {
|
|
4
11
|
display: inline-flex;
|
|
5
12
|
padding: 5px;
|
|
@@ -8,6 +15,7 @@
|
|
|
8
15
|
box-shadow: var(--lmn-tabs-neu-shadow-inset, var(--neu-shadow-inset));
|
|
9
16
|
gap: 2px;
|
|
10
17
|
align-self: flex-start;
|
|
18
|
+
flex-shrink: 0;
|
|
11
19
|
}
|
|
12
20
|
.tabs-nav .tab {
|
|
13
21
|
padding: 8px 16px;
|
|
@@ -66,3 +74,9 @@
|
|
|
66
74
|
.tabs.centered.underline .tabs-nav .tab { margin-right: 11px; margin-left: 11px; }
|
|
67
75
|
|
|
68
76
|
.tabs-content { padding: var(--gap-2) 0; }
|
|
77
|
+
.tabs.fill .tabs-content {
|
|
78
|
+
flex: 1 1 auto;
|
|
79
|
+
min-width: 0;
|
|
80
|
+
min-height: 0;
|
|
81
|
+
overflow: auto;
|
|
82
|
+
}
|
package/dist/Tabs.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkRR7KWH26_cjs = require('./chunk-RR7KWH26.cjs');
|
|
4
4
|
require('./chunk-NRJXZPZR.cjs');
|
|
5
5
|
require('./chunk-EE5KXDRK.cjs');
|
|
6
6
|
|
|
@@ -8,5 +8,5 @@ require('./chunk-EE5KXDRK.cjs');
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "Tabs", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkRR7KWH26_cjs.Tabs; }
|
|
12
12
|
});
|
package/dist/Tabs.d.cts
CHANGED
|
@@ -15,6 +15,12 @@ interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange
|
|
|
15
15
|
variant?: "line" | "pill" | "segmented";
|
|
16
16
|
/** Center-align the tab bar horizontally. */
|
|
17
17
|
centered?: boolean;
|
|
18
|
+
/** 标签条容器的附加类名。 */
|
|
19
|
+
tabBarClassName?: string;
|
|
20
|
+
/** 正文容器的附加类名。 */
|
|
21
|
+
contentClassName?: string;
|
|
22
|
+
/** 占满父容器,并让正文区域独立滚动。 */
|
|
23
|
+
fill?: boolean;
|
|
18
24
|
className?: string;
|
|
19
25
|
}
|
|
20
26
|
declare const Tabs: React.ForwardRefExoticComponent<TabsProps & React.RefAttributes<HTMLDivElement>>;
|
package/dist/Tabs.d.ts
CHANGED
|
@@ -15,6 +15,12 @@ interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange
|
|
|
15
15
|
variant?: "line" | "pill" | "segmented";
|
|
16
16
|
/** Center-align the tab bar horizontally. */
|
|
17
17
|
centered?: boolean;
|
|
18
|
+
/** 标签条容器的附加类名。 */
|
|
19
|
+
tabBarClassName?: string;
|
|
20
|
+
/** 正文容器的附加类名。 */
|
|
21
|
+
contentClassName?: string;
|
|
22
|
+
/** 占满父容器,并让正文区域独立滚动。 */
|
|
23
|
+
fill?: boolean;
|
|
18
24
|
className?: string;
|
|
19
25
|
}
|
|
20
26
|
declare const Tabs: React.ForwardRefExoticComponent<TabsProps & React.RefAttributes<HTMLDivElement>>;
|
package/dist/Tabs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Table } from './chunk-
|
|
1
|
+
import { Table } from './chunk-WMISXERU.js';
|
|
2
2
|
import { withComponentTheme, InternalComponentThemePart } from './chunk-DRDDQCDD.js';
|
|
3
3
|
import './tokens-CEJVVA3G.css';
|
|
4
4
|
import './shared-NJHRNLRH.css';
|
|
@@ -35,6 +35,8 @@ var TableProInner = ({
|
|
|
35
35
|
tableProps,
|
|
36
36
|
caption,
|
|
37
37
|
onRowClick,
|
|
38
|
+
activeRowKey,
|
|
39
|
+
rowClassName,
|
|
38
40
|
empty,
|
|
39
41
|
...rootProps
|
|
40
42
|
}, ref) => {
|
|
@@ -75,6 +77,8 @@ var TableProInner = ({
|
|
|
75
77
|
tableProps,
|
|
76
78
|
caption,
|
|
77
79
|
onRowClick,
|
|
80
|
+
activeRowKey,
|
|
81
|
+
rowClassName,
|
|
78
82
|
empty,
|
|
79
83
|
className: innerTableClassName,
|
|
80
84
|
style: tableStyle
|
|
@@ -46,6 +46,7 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
46
46
|
selectedRender,
|
|
47
47
|
listHeight = 260,
|
|
48
48
|
popupStyle,
|
|
49
|
+
getOptionDisabled,
|
|
49
50
|
open: openProp,
|
|
50
51
|
defaultOpen,
|
|
51
52
|
onOpenChange,
|
|
@@ -67,7 +68,8 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
67
68
|
defaultValue: _defaultValue,
|
|
68
69
|
onChange: _selectionChange,
|
|
69
70
|
onClear: _onClear,
|
|
70
|
-
maxTagCount
|
|
71
|
+
maxTagCount,
|
|
72
|
+
maxCount,
|
|
71
73
|
...rest
|
|
72
74
|
} = props;
|
|
73
75
|
const isMulti = multiple === true;
|
|
@@ -141,6 +143,15 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
141
143
|
const singleValue = singleControlled ? props.value : innerSingle;
|
|
142
144
|
const controlledMultiValue = props.value;
|
|
143
145
|
const multiValue = multiControlled ? Array.isArray(controlledMultiValue) ? controlledMultiValue : [] : innerMulti;
|
|
146
|
+
const selectedValues = React.useMemo(
|
|
147
|
+
() => isMulti ? multiValue : singleValue !== void 0 ? [singleValue] : [],
|
|
148
|
+
[isMulti, multiValue, singleValue]
|
|
149
|
+
);
|
|
150
|
+
const selectionLimit = maxCount !== void 0 && Number.isFinite(maxCount) ? Math.max(0, Math.floor(maxCount)) : void 0;
|
|
151
|
+
const isOptionDisabled = React.useCallback((option) => {
|
|
152
|
+
const selected = selectedValues.includes(option.value);
|
|
153
|
+
return !!option.disabled || !!getOptionDisabled?.(option, selectedValues) || isMulti && !selected && selectionLimit !== void 0 && selectedValues.length >= selectionLimit;
|
|
154
|
+
}, [getOptionDisabled, isMulti, selectedValues, selectionLimit]);
|
|
144
155
|
React.useEffect(() => {
|
|
145
156
|
if (!open) return;
|
|
146
157
|
const h = (e) => {
|
|
@@ -177,20 +188,20 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
177
188
|
}, [options, filteredFlat, query]);
|
|
178
189
|
React.useEffect(() => {
|
|
179
190
|
setActiveIdx((current) => {
|
|
180
|
-
if (current >= 0 && current < filteredFlat.length && !filteredFlat[current]
|
|
191
|
+
if (current >= 0 && current < filteredFlat.length && !isOptionDisabled(filteredFlat[current])) {
|
|
181
192
|
return current;
|
|
182
193
|
}
|
|
183
|
-
return filteredFlat.findIndex((option) => !option
|
|
194
|
+
return filteredFlat.findIndex((option) => !isOptionDisabled(option));
|
|
184
195
|
});
|
|
185
|
-
}, [filteredFlat]);
|
|
196
|
+
}, [filteredFlat, isOptionDisabled]);
|
|
186
197
|
const pickSingle = (opt) => {
|
|
187
|
-
if (disabled || opt
|
|
198
|
+
if (disabled || isOptionDisabled(opt)) return;
|
|
188
199
|
if (!singleControlled) setInnerSingle(opt.value);
|
|
189
200
|
props.onChange?.(opt.value);
|
|
190
201
|
setOpen(false);
|
|
191
202
|
};
|
|
192
203
|
const toggleMulti = (opt) => {
|
|
193
|
-
if (disabled || opt
|
|
204
|
+
if (disabled || isOptionDisabled(opt)) return;
|
|
194
205
|
const cur = multiValue ?? [];
|
|
195
206
|
const next = cur.includes(opt.value) ? cur.filter((v) => v !== opt.value) : [...cur, opt.value];
|
|
196
207
|
if (!multiControlled) setInnerMulti(next);
|
|
@@ -232,7 +243,7 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
232
243
|
setActiveIdx((i) => {
|
|
233
244
|
for (let step = 1; step <= filteredFlat.length; step++) {
|
|
234
245
|
const next = (Math.max(i, -1) + step) % filteredFlat.length;
|
|
235
|
-
if (!filteredFlat[next]
|
|
246
|
+
if (filteredFlat[next] && !isOptionDisabled(filteredFlat[next])) return next;
|
|
236
247
|
}
|
|
237
248
|
return i;
|
|
238
249
|
});
|
|
@@ -243,7 +254,7 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
243
254
|
setActiveIdx((i) => {
|
|
244
255
|
for (let step = 1; step <= filteredFlat.length; step++) {
|
|
245
256
|
const next = (i - step + filteredFlat.length) % filteredFlat.length;
|
|
246
|
-
if (!filteredFlat[next]
|
|
257
|
+
if (filteredFlat[next] && !isOptionDisabled(filteredFlat[next])) return next;
|
|
247
258
|
}
|
|
248
259
|
return i;
|
|
249
260
|
});
|
|
@@ -252,7 +263,7 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
252
263
|
if (e.key === "Enter") {
|
|
253
264
|
e.preventDefault();
|
|
254
265
|
const opt = filteredFlat[activeIdx];
|
|
255
|
-
if (opt && !opt
|
|
266
|
+
if (opt && !isOptionDisabled(opt)) {
|
|
256
267
|
if (isMulti) toggleMulti(opt);
|
|
257
268
|
else pickSingle(opt);
|
|
258
269
|
}
|
|
@@ -262,7 +273,7 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
262
273
|
const renderTrigger = () => {
|
|
263
274
|
if (isMulti) {
|
|
264
275
|
const selected = (multiValue ?? []).map((v) => allFlat.find((o) => o.value === v)).filter((o) => !!o);
|
|
265
|
-
const max =
|
|
276
|
+
const max = maxTagCount;
|
|
266
277
|
const shown = max != null ? selected.slice(0, max) : selected;
|
|
267
278
|
const overflow = selected.length - shown.length;
|
|
268
279
|
if (selected.length === 0) {
|
|
@@ -309,6 +320,7 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
309
320
|
const idx = renderIdx;
|
|
310
321
|
const sel = isSelected(o.value);
|
|
311
322
|
const active = idx === activeIdx;
|
|
323
|
+
const optionDisabled = isOptionDisabled(o);
|
|
312
324
|
return /* @__PURE__ */ jsxs(
|
|
313
325
|
"button",
|
|
314
326
|
{
|
|
@@ -317,9 +329,11 @@ var SelectInner = (props, forwardedRef) => {
|
|
|
317
329
|
role: "option",
|
|
318
330
|
"aria-selected": sel,
|
|
319
331
|
"aria-label": getOptionAriaLabel(o),
|
|
320
|
-
disabled:
|
|
332
|
+
disabled: optionDisabled,
|
|
321
333
|
className: `menu-item ${sel ? "active" : ""} ${active ? "highlight" : ""}`,
|
|
322
|
-
onMouseEnter: () =>
|
|
334
|
+
onMouseEnter: () => {
|
|
335
|
+
if (!optionDisabled) setActiveIdx(idx);
|
|
336
|
+
},
|
|
323
337
|
onClick: () => isMulti ? toggleMulti(o) : pickSingle(o),
|
|
324
338
|
children: [
|
|
325
339
|
isMulti && /* @__PURE__ */ jsx("span", { className: `menu-check ${sel ? "on" : ""}`, "aria-hidden": true, children: sel && /* @__PURE__ */ jsx(Icon, { name: "check", size: 11, stroke: 3 }) }),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Select } from './chunk-
|
|
1
|
+
import { Select } from './chunk-DURKCGEM.js';
|
|
2
2
|
import { Input } from './chunk-UE4HFGJ6.js';
|
|
3
3
|
import { Icon } from './chunk-LQMOYVQF.js';
|
|
4
4
|
import { InternalComponentThemePart, withComponentTheme } from './chunk-DRDDQCDD.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { withComponentTheme } from './chunk-DRDDQCDD.js';
|
|
2
2
|
import './tokens-CEJVVA3G.css';
|
|
3
3
|
import './shared-NJHRNLRH.css';
|
|
4
|
-
import './Tabs-
|
|
4
|
+
import './Tabs-FB2AMBWL.css';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -13,6 +13,9 @@ var TabsBase = React.forwardRef(({
|
|
|
13
13
|
onChange,
|
|
14
14
|
variant = "line",
|
|
15
15
|
centered,
|
|
16
|
+
tabBarClassName = "",
|
|
17
|
+
contentClassName = "",
|
|
18
|
+
fill = false,
|
|
16
19
|
className = "",
|
|
17
20
|
...rest
|
|
18
21
|
}, ref) => {
|
|
@@ -42,40 +45,54 @@ var TabsBase = React.forwardRef(({
|
|
|
42
45
|
};
|
|
43
46
|
const active = items.find((i) => i.key === current);
|
|
44
47
|
const activeIndex = items.findIndex((item) => item.key === current);
|
|
45
|
-
return /* @__PURE__ */ jsxs(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
48
|
+
return /* @__PURE__ */ jsxs(
|
|
49
|
+
"div",
|
|
50
|
+
{
|
|
51
|
+
ref,
|
|
52
|
+
className: [
|
|
53
|
+
"tabs",
|
|
54
|
+
variant,
|
|
55
|
+
centered ? "centered" : "",
|
|
56
|
+
fill ? "fill" : "",
|
|
57
|
+
className
|
|
58
|
+
].filter(Boolean).join(" "),
|
|
59
|
+
...rest,
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ jsx("div", { className: ["tabs-nav", tabBarClassName].filter(Boolean).join(" "), role: "tablist", children: items.map((it, index) => /* @__PURE__ */ jsx(
|
|
62
|
+
"button",
|
|
63
|
+
{
|
|
64
|
+
ref: (node) => {
|
|
65
|
+
if (node) tabRefs.current.set(it.key, node);
|
|
66
|
+
else tabRefs.current.delete(it.key);
|
|
67
|
+
},
|
|
68
|
+
type: "button",
|
|
69
|
+
role: "tab",
|
|
70
|
+
id: `${baseId}-tab-${index}`,
|
|
71
|
+
"aria-selected": current === it.key,
|
|
72
|
+
"aria-controls": it.content !== void 0 ? `${baseId}-panel-${index}` : void 0,
|
|
73
|
+
tabIndex: current === it.key ? 0 : -1,
|
|
74
|
+
disabled: it.disabled,
|
|
75
|
+
className: `tab ${current === it.key ? "active" : ""}`,
|
|
76
|
+
onClick: () => select(it.key),
|
|
77
|
+
onKeyDown: handleTabKeyDown,
|
|
78
|
+
children: it.label
|
|
79
|
+
},
|
|
80
|
+
it.key
|
|
81
|
+
)) }),
|
|
82
|
+
active?.content !== void 0 && /* @__PURE__ */ jsx(
|
|
83
|
+
"div",
|
|
84
|
+
{
|
|
85
|
+
id: `${baseId}-panel-${activeIndex}`,
|
|
86
|
+
className: ["tabs-content", contentClassName].filter(Boolean).join(" "),
|
|
87
|
+
role: "tabpanel",
|
|
88
|
+
"aria-labelledby": `${baseId}-tab-${activeIndex}`,
|
|
89
|
+
tabIndex: 0,
|
|
90
|
+
children: active.content
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
);
|
|
79
96
|
});
|
|
80
97
|
TabsBase.displayName = "Tabs";
|
|
81
98
|
var Tabs = withComponentTheme(TabsBase, "Tabs", "tabs");
|