@pnt-team/pnt-component-frontend 0.0.132 → 0.0.134

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,509 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/PntTable/useTableCore.ts
20
+ var useTableCore_exports = {};
21
+ __export(useTableCore_exports, {
22
+ clampPage: () => clampPage,
23
+ cycleSort: () => cycleSort,
24
+ useTableCore: () => useTableCore,
25
+ validateColumnConflicts: () => validateColumnConflicts,
26
+ validateJumpPage: () => validateJumpPage
27
+ });
28
+ module.exports = __toCommonJS(useTableCore_exports);
29
+ var import_react = require("react");
30
+ var RequestManager = class {
31
+ constructor() {
32
+ this.requestIdCounter = 0;
33
+ this.abortController = null;
34
+ }
35
+ nextId() {
36
+ if (this.abortController) {
37
+ try {
38
+ this.abortController.abort();
39
+ } catch {
40
+ }
41
+ }
42
+ this.abortController = new AbortController();
43
+ return ++this.requestIdCounter;
44
+ }
45
+ isLatest(id) {
46
+ return id === this.requestIdCounter;
47
+ }
48
+ abortCurrent() {
49
+ if (this.abortController) {
50
+ try {
51
+ this.abortController.abort();
52
+ } catch {
53
+ }
54
+ this.abortController = null;
55
+ }
56
+ }
57
+ };
58
+ function cycleSort(currentField, currentDir, targetField) {
59
+ if (currentField !== targetField) {
60
+ return { field: targetField, direction: "asc" };
61
+ }
62
+ if (currentDir === void 0 || currentDir === null)
63
+ return { field: targetField, direction: "asc" };
64
+ if (currentDir === "asc")
65
+ return { field: targetField, direction: "desc" };
66
+ return null;
67
+ }
68
+ function clampPage(page, total, pageSize) {
69
+ const maxPage = Math.max(1, Math.ceil(total / pageSize));
70
+ if (page < 1)
71
+ return 1;
72
+ if (page > maxPage)
73
+ return maxPage;
74
+ return page;
75
+ }
76
+ function validateJumpPage(page, total, pageSize) {
77
+ const maxPage = Math.max(1, Math.ceil(total / pageSize));
78
+ if (!Number.isInteger(page) || page < 1 || page > maxPage) {
79
+ return `请输入 1–${maxPage} 的整数页码`;
80
+ }
81
+ return null;
82
+ }
83
+ function validateColumnConflicts(columns) {
84
+ const errors = [];
85
+ columns.forEach((col) => {
86
+ if (col.sort && col.headerFilter) {
87
+ errors.push(
88
+ `[PntTable] 列 "${col.key}" 同时配置了 sort 和 headerFilter,违反 TBL-01.03 互斥规则。 如需该字段同时排序+筛选,表头保留 sort,筛选移至 externalFilter(独立查询区)。`
89
+ );
90
+ }
91
+ });
92
+ return errors;
93
+ }
94
+ function useTableCore(props) {
95
+ const {
96
+ tableId,
97
+ rowKey,
98
+ columns,
99
+ dataMode,
100
+ fetcher,
101
+ data: clientData,
102
+ total: clientTotal,
103
+ initialPage = 1,
104
+ pageSize: initialPageSize = 10,
105
+ businessId,
106
+ env,
107
+ timezone,
108
+ onQueryChange,
109
+ onSelectionChange,
110
+ selectable = false,
111
+ currentPageOnly = true
112
+ } = props;
113
+ const reqMgrRef = (0, import_react.useRef)(new RequestManager());
114
+ const [requestId, setRequestId] = (0, import_react.useState)(0);
115
+ const [state, setState] = (0, import_react.useState)(() => {
116
+ var _a;
117
+ const initialRows = dataMode === "client" ? clientData != null ? clientData : [] : [];
118
+ return {
119
+ data: initialRows,
120
+ total: dataMode === "client" ? (_a = clientTotal != null ? clientTotal : clientData == null ? void 0 : clientData.length) != null ? _a : 0 : 0,
121
+ status: dataMode === "client" ? initialRows.length === 0 ? "empty" : "normal" : "loading",
122
+ error: null,
123
+ sort: null,
124
+ appliedFilters: {},
125
+ page: initialPage,
126
+ pageSize: initialPageSize,
127
+ selection: /* @__PURE__ */ new Set()
128
+ };
129
+ });
130
+ (0, import_react.useEffect)(() => {
131
+ if (dataMode !== "client")
132
+ return;
133
+ const rows = clientData != null ? clientData : [];
134
+ setState((prev) => {
135
+ const hasAppliedFilter = Object.values(prev.appliedFilters).some(
136
+ (v) => v !== void 0 && v !== null && v !== ""
137
+ );
138
+ return {
139
+ ...prev,
140
+ data: rows,
141
+ total: clientTotal != null ? clientTotal : rows.length,
142
+ status: rows.length === 0 ? hasAppliedFilter ? "empty-with-filter" : "empty" : "normal",
143
+ error: null
144
+ };
145
+ });
146
+ }, [dataMode, clientData, clientTotal]);
147
+ const setStatePartial = (0, import_react.useCallback)((patch) => {
148
+ setState((prev) => ({ ...prev, ...patch }));
149
+ }, []);
150
+ const triggerFetch = (0, import_react.useCallback)(
151
+ async (trigger, snapshot) => {
152
+ var _a, _b;
153
+ if (dataMode !== "server" || !fetcher)
154
+ return;
155
+ const thisReqId = reqMgrRef.current.nextId();
156
+ const query = {
157
+ query: {},
158
+ // 独立查询区(组件不维护,由业务项目维护并透传)
159
+ filters: snapshot.appliedFilters,
160
+ sort: snapshot.sort,
161
+ page: snapshot.page,
162
+ pageSize: snapshot.pageSize,
163
+ businessId,
164
+ env,
165
+ timezone
166
+ };
167
+ onQueryChange == null ? void 0 : onQueryChange(query, { tableId, trigger, requestId: thisReqId });
168
+ setStatePartial({
169
+ status: snapshot.page > 1 || requestId > 0 ? "refreshing" : "loading"
170
+ });
171
+ try {
172
+ const res = await fetcher(query);
173
+ if (!reqMgrRef.current.isLatest(thisReqId))
174
+ return;
175
+ if (res.noPermission) {
176
+ setStatePartial({
177
+ status: "no-permission",
178
+ error: null,
179
+ data: [],
180
+ total: 0
181
+ });
182
+ setRequestId(thisReqId);
183
+ return;
184
+ }
185
+ if (res.code !== void 0 && res.code !== 0) {
186
+ setStatePartial({ status: "error", error: res.msg || "" });
187
+ setRequestId(thisReqId);
188
+ return;
189
+ }
190
+ const rows = (_a = res.rows) != null ? _a : [];
191
+ setStatePartial({
192
+ data: rows,
193
+ total: (_b = res.total) != null ? _b : rows.length,
194
+ status: rows.length === 0 ? Object.values(snapshot.appliedFilters).some(
195
+ (v) => v !== void 0 && v !== null && v !== ""
196
+ ) ? "empty-with-filter" : "empty" : "normal",
197
+ error: null
198
+ });
199
+ setRequestId(thisReqId);
200
+ } catch (err) {
201
+ if (!reqMgrRef.current.isLatest(thisReqId))
202
+ return;
203
+ if ((err == null ? void 0 : err.name) === "AbortError")
204
+ return;
205
+ setStatePartial({ status: "error", error: (err == null ? void 0 : err.message) || "" });
206
+ setRequestId(thisReqId);
207
+ }
208
+ },
209
+ [
210
+ dataMode,
211
+ fetcher,
212
+ tableId,
213
+ businessId,
214
+ env,
215
+ timezone,
216
+ onQueryChange,
217
+ requestId,
218
+ setStatePartial
219
+ ]
220
+ );
221
+ (0, import_react.useEffect)(() => {
222
+ if (dataMode === "server" && fetcher) {
223
+ const page = initialPage;
224
+ const pageSize = state.pageSize;
225
+ setStatePartial({ page, pageSize });
226
+ triggerFetch("initial", {
227
+ sort: null,
228
+ appliedFilters: {},
229
+ page,
230
+ pageSize
231
+ });
232
+ }
233
+ }, [tableId, dataMode]);
234
+ const toggleSort = (0, import_react.useCallback)(
235
+ (field) => {
236
+ if (dataMode !== "server")
237
+ return;
238
+ const col = columns.find((c) => c.key === field);
239
+ if (!col || col.sort === false)
240
+ return;
241
+ setState((prev) => {
242
+ var _a, _b, _c, _d;
243
+ const newSort = cycleSort(
244
+ (_b = (_a = prev.sort) == null ? void 0 : _a.field) != null ? _b : null,
245
+ (_c = prev.sort) == null ? void 0 : _c.direction,
246
+ field
247
+ );
248
+ const clearedSelection = currentPageOnly ? /* @__PURE__ */ new Set() : prev.selection;
249
+ const clearedPage = ((_d = prev.sort) == null ? void 0 : _d.field) !== field ? prev.page : prev.page;
250
+ const newPage = newSort ? 1 : clearedPage;
251
+ const next = {
252
+ ...prev,
253
+ sort: newSort,
254
+ page: newPage,
255
+ selection: clearedSelection
256
+ };
257
+ if (newSort) {
258
+ triggerFetch("sort", {
259
+ sort: newSort,
260
+ appliedFilters: next.appliedFilters,
261
+ page: newPage,
262
+ pageSize: next.pageSize
263
+ });
264
+ } else if (prev.sort) {
265
+ triggerFetch("sort", {
266
+ sort: null,
267
+ appliedFilters: next.appliedFilters,
268
+ page: newPage,
269
+ pageSize: next.pageSize
270
+ });
271
+ }
272
+ return next;
273
+ });
274
+ },
275
+ [dataMode, columns, triggerFetch, currentPageOnly]
276
+ );
277
+ const applyFilters = (0, import_react.useCallback)(
278
+ (filters) => {
279
+ const normalized = {};
280
+ Object.entries(filters).forEach(([k, v]) => {
281
+ if (Array.isArray(v) && v.length === 0)
282
+ return;
283
+ if (v === void 0 || v === null || v === "")
284
+ return;
285
+ normalized[k] = v;
286
+ });
287
+ setState((prev) => {
288
+ const clearedSelection = currentPageOnly ? /* @__PURE__ */ new Set() : prev.selection;
289
+ const next = {
290
+ ...prev,
291
+ appliedFilters: normalized,
292
+ page: 1,
293
+ // 筛选变更回 1 页(TBL-04.05)
294
+ selection: clearedSelection
295
+ };
296
+ triggerFetch("filter", {
297
+ sort: next.sort,
298
+ appliedFilters: normalized,
299
+ page: 1,
300
+ pageSize: next.pageSize
301
+ });
302
+ return next;
303
+ });
304
+ },
305
+ [triggerFetch, currentPageOnly]
306
+ );
307
+ const resetFilters = (0, import_react.useCallback)(() => {
308
+ setState((prev) => {
309
+ const clearedSelection = currentPageOnly ? /* @__PURE__ */ new Set() : prev.selection;
310
+ const next = {
311
+ ...prev,
312
+ appliedFilters: {},
313
+ page: 1,
314
+ selection: clearedSelection
315
+ };
316
+ triggerFetch("reset", {
317
+ sort: next.sort,
318
+ appliedFilters: {},
319
+ page: 1,
320
+ pageSize: next.pageSize
321
+ });
322
+ return next;
323
+ });
324
+ }, [triggerFetch, currentPageOnly]);
325
+ const setPage = (0, import_react.useCallback)(
326
+ (page) => {
327
+ if (dataMode !== "server")
328
+ return;
329
+ setState((prev) => {
330
+ const validated = clampPage(page, prev.total, prev.pageSize);
331
+ if (validated === prev.page)
332
+ return prev;
333
+ const clearedSelection = currentPageOnly ? /* @__PURE__ */ new Set() : prev.selection;
334
+ const next = { ...prev, page: validated, selection: clearedSelection };
335
+ triggerFetch("pagination", {
336
+ sort: next.sort,
337
+ appliedFilters: next.appliedFilters,
338
+ page: validated,
339
+ pageSize: next.pageSize
340
+ });
341
+ return next;
342
+ });
343
+ },
344
+ [dataMode, triggerFetch, currentPageOnly]
345
+ );
346
+ const setPageSize = (0, import_react.useCallback)(
347
+ (size) => {
348
+ if (dataMode !== "server")
349
+ return;
350
+ setState((prev) => {
351
+ if (size === prev.pageSize)
352
+ return prev;
353
+ const clearedSelection = currentPageOnly ? /* @__PURE__ */ new Set() : prev.selection;
354
+ const next = {
355
+ ...prev,
356
+ pageSize: size,
357
+ page: 1,
358
+ selection: clearedSelection
359
+ };
360
+ triggerFetch("page-size", {
361
+ sort: next.sort,
362
+ appliedFilters: next.appliedFilters,
363
+ page: 1,
364
+ pageSize: size
365
+ });
366
+ return next;
367
+ });
368
+ },
369
+ [dataMode, triggerFetch, currentPageOnly]
370
+ );
371
+ const toggleRow = (0, import_react.useCallback)(
372
+ (key, selected) => {
373
+ if (!selectable)
374
+ return;
375
+ setState((prev) => {
376
+ const next = new Set(prev.selection);
377
+ if (selected)
378
+ next.add(key);
379
+ else
380
+ next.delete(key);
381
+ const selArr = Array.from(next);
382
+ onSelectionChange == null ? void 0 : onSelectionChange(selArr, {
383
+ tableId,
384
+ pageKeys: prev.data.map((r) => String(r[rowKey])),
385
+ disabledKeys: [],
386
+ trigger: "select"
387
+ });
388
+ return { ...prev, selection: next };
389
+ });
390
+ },
391
+ [selectable, onSelectionChange, tableId, rowKey]
392
+ );
393
+ const selectAllOnPage = (0, import_react.useCallback)(
394
+ (rowKeys, disabledKeys) => {
395
+ if (!selectable)
396
+ return;
397
+ const selectableKeys = rowKeys.filter((k) => !disabledKeys.includes(k));
398
+ setState((prev) => {
399
+ const allSelected = selectableKeys.every((k) => prev.selection.has(k));
400
+ const next = new Set(prev.selection);
401
+ if (allSelected) {
402
+ selectableKeys.forEach((k) => next.delete(k));
403
+ } else {
404
+ selectableKeys.forEach((k) => next.add(k));
405
+ }
406
+ const selArr = Array.from(next);
407
+ onSelectionChange == null ? void 0 : onSelectionChange(selArr, {
408
+ tableId,
409
+ pageKeys: rowKeys,
410
+ disabledKeys,
411
+ trigger: allSelected ? "select-all" : "select-all"
412
+ });
413
+ return { ...prev, selection: next };
414
+ });
415
+ },
416
+ [selectable, onSelectionChange, tableId]
417
+ );
418
+ const clearSelection = (0, import_react.useCallback)(() => {
419
+ setState((prev) => ({ ...prev, selection: /* @__PURE__ */ new Set() }));
420
+ onSelectionChange == null ? void 0 : onSelectionChange([], {
421
+ tableId,
422
+ pageKeys: [],
423
+ disabledKeys: [],
424
+ trigger: "reset"
425
+ });
426
+ }, [onSelectionChange, tableId]);
427
+ const isAllSelectedOnPage = (0, import_react.useCallback)(
428
+ (rowKeys, disabledKeys) => {
429
+ const selectableKeys = rowKeys.filter((k) => !disabledKeys.includes(k));
430
+ if (selectableKeys.length === 0)
431
+ return false;
432
+ return selectableKeys.every((k) => state.selection.has(k));
433
+ },
434
+ [state.selection]
435
+ );
436
+ const isIndeterminateOnPage = (0, import_react.useCallback)(
437
+ (rowKeys, disabledKeys) => {
438
+ const selectableKeys = rowKeys.filter((k) => !disabledKeys.includes(k));
439
+ if (selectableKeys.length === 0)
440
+ return false;
441
+ const selectedCount = selectableKeys.filter(
442
+ (k) => state.selection.has(k)
443
+ ).length;
444
+ return selectedCount > 0 && selectedCount < selectableKeys.length;
445
+ },
446
+ [state.selection]
447
+ );
448
+ const refresh = (0, import_react.useCallback)(() => {
449
+ setState((prev) => {
450
+ const clearedSelection = currentPageOnly ? /* @__PURE__ */ new Set() : prev.selection;
451
+ const next = { ...prev, selection: clearedSelection };
452
+ triggerFetch("reset", {
453
+ sort: next.sort,
454
+ appliedFilters: next.appliedFilters,
455
+ page: next.page,
456
+ pageSize: next.pageSize
457
+ });
458
+ return next;
459
+ });
460
+ }, [triggerFetch, currentPageOnly]);
461
+ return (0, import_react.useMemo)(
462
+ () => ({
463
+ data: state.data,
464
+ total: state.total,
465
+ status: state.status,
466
+ error: state.error,
467
+ sort: state.sort,
468
+ appliedFilters: state.appliedFilters,
469
+ page: state.page,
470
+ pageSize: state.pageSize,
471
+ selection: Array.from(state.selection),
472
+ requestId,
473
+ toggleSort,
474
+ applyFilters,
475
+ resetFilters,
476
+ setPage,
477
+ setPageSize,
478
+ toggleRow,
479
+ selectAllOnPage,
480
+ clearSelection,
481
+ refresh,
482
+ isAllSelectedOnPage,
483
+ isIndeterminateOnPage
484
+ }),
485
+ [
486
+ state,
487
+ requestId,
488
+ toggleSort,
489
+ applyFilters,
490
+ resetFilters,
491
+ setPage,
492
+ setPageSize,
493
+ toggleRow,
494
+ selectAllOnPage,
495
+ clearSelection,
496
+ refresh,
497
+ isAllSelectedOnPage,
498
+ isIndeterminateOnPage
499
+ ]
500
+ );
501
+ }
502
+ // Annotate the CommonJS export names for ESM import in node:
503
+ 0 && (module.exports = {
504
+ clampPage,
505
+ cycleSort,
506
+ useTableCore,
507
+ validateColumnConflicts,
508
+ validateJumpPage
509
+ });
@@ -1,5 +1,8 @@
1
1
  export { PntProvider, usePntConfig, type PntConfig, type PntHighSecurityConfig, type PntHttpLike, type PntRegionQueryConfig, type commonEesType, } from './config';
2
2
  export { default as PntImage } from './components/PntImage';
3
+ export { default as PntTable } from './components/PntTable';
4
+ export type { PntSortDirection, PntSortInfo, PntTableColumn, PntTableDataMode, PntTableFetcher, PntTableFilterConfig as PntTableFilterConfigItem, PntTableLocale, PntTableProps, PntTableQuery, PntTableQueryMeta, PntTableQueryTrigger, PntTableRef, PntTableResponse, PntTableSelectConfig, PntTableSelectionMeta, PntTableStatus, PntTableTexts, PntTableTheme, PntFilterOption, } from './components/PntTable/types';
5
+ export { PNT_TABLE_DEFAULT_TEXTS, PNT_TABLE_EN_TEXTS, getPntTableTextsByLocale, } from './components/PntTable/types';
3
6
  export { default as PntBusinessSelect } from './components/PntBusinessSelect';
4
7
  export { default as PntRegionSelect, normalizeRegionCode, } from './components/PntRegionSelect';
5
8
  export { DEFAULT_TEXTS, EN_TEXTS, getTextsByLocale, } from './components/PntRegionSelect/types';
package/lib/cjs/index.js CHANGED
@@ -29,18 +29,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  // src/index.ts
30
30
  var src_exports = {};
31
31
  __export(src_exports, {
32
- DEFAULT_TEXTS: () => import_types.DEFAULT_TEXTS,
33
- EN_TEXTS: () => import_types.EN_TEXTS,
32
+ DEFAULT_TEXTS: () => import_types2.DEFAULT_TEXTS,
33
+ EN_TEXTS: () => import_types2.EN_TEXTS,
34
+ PNT_TABLE_DEFAULT_TEXTS: () => import_types.PNT_TABLE_DEFAULT_TEXTS,
35
+ PNT_TABLE_EN_TEXTS: () => import_types.PNT_TABLE_EN_TEXTS,
34
36
  PntBusinessSelect: () => import_PntBusinessSelect.default,
35
37
  PntGeneralLayout: () => import_PntGeneralLayout.default,
36
38
  PntImage: () => import_PntImage.default,
37
39
  PntProvider: () => import_config.PntProvider,
38
40
  PntRegionSelect: () => import_PntRegionSelect.default,
39
41
  PntSecureBox: () => import_PntSecureBox.default,
42
+ PntTable: () => import_PntTable.default,
40
43
  businessGameInfoHighSecurityDecrypt: () => import_api.businessGameInfoHighSecurityDecrypt,
41
44
  businessRegionQuery: () => import_api.businessRegionQuery,
42
45
  businessSelectList: () => import_api.businessSelectList,
43
- getTextsByLocale: () => import_types.getTextsByLocale,
46
+ getPntTableTextsByLocale: () => import_types.getPntTableTextsByLocale,
47
+ getTextsByLocale: () => import_types2.getTextsByLocale,
44
48
  isSecurityData: () => import_utils.isSecurityData,
45
49
  normalizeRegionCode: () => import_PntRegionSelect.normalizeRegionCode,
46
50
  useHighSecurity: () => import_useHighSecurity.useHighSecurity,
@@ -49,9 +53,11 @@ __export(src_exports, {
49
53
  module.exports = __toCommonJS(src_exports);
50
54
  var import_config = require("./config");
51
55
  var import_PntImage = __toESM(require("./components/PntImage"));
56
+ var import_PntTable = __toESM(require("./components/PntTable"));
57
+ var import_types = require("./components/PntTable/types");
52
58
  var import_PntBusinessSelect = __toESM(require("./components/PntBusinessSelect"));
53
59
  var import_PntRegionSelect = __toESM(require("./components/PntRegionSelect"));
54
- var import_types = require("./components/PntRegionSelect/types");
60
+ var import_types2 = require("./components/PntRegionSelect/types");
55
61
  var import_PntSecureBox = __toESM(require("./components/PntSecureBox"));
56
62
  var import_useHighSecurity = require("./hooks/useHighSecurity");
57
63
  var import_utils = require("./utils");
@@ -61,15 +67,19 @@ var import_PntGeneralLayout = __toESM(require("./components/PntGeneralLayout"));
61
67
  0 && (module.exports = {
62
68
  DEFAULT_TEXTS,
63
69
  EN_TEXTS,
70
+ PNT_TABLE_DEFAULT_TEXTS,
71
+ PNT_TABLE_EN_TEXTS,
64
72
  PntBusinessSelect,
65
73
  PntGeneralLayout,
66
74
  PntImage,
67
75
  PntProvider,
68
76
  PntRegionSelect,
69
77
  PntSecureBox,
78
+ PntTable,
70
79
  businessGameInfoHighSecurityDecrypt,
71
80
  businessRegionQuery,
72
81
  businessSelectList,
82
+ getPntTableTextsByLocale,
73
83
  getTextsByLocale,
74
84
  isSecurityData,
75
85
  normalizeRegionCode,
@@ -0,0 +1,14 @@
1
+ /**
2
+ * PntTable — 统一表格组件
3
+ *
4
+ * 封装 tdesign-react Table,落地产品规范 12 章 47 条规则:
5
+ * 排序三态循环、筛选草稿/生效分离、多选三态+翻页清空、分页越界校验、
6
+ * 请求顺序控制、7 种状态管理、蓝紫双主题、同字段 sort+headerFilter 互斥。
7
+ *
8
+ * 零业务侵入:业务项目通过 fetcher 注入数据源,不依赖组件库内部 API。
9
+ */
10
+ /// <reference types="react" />
11
+ import './index.scss';
12
+ import type { PntTableProps, PntTableRef } from './types';
13
+ export declare const PntTable: import("react").ForwardRefExoticComponent<PntTableProps & import("react").RefAttributes<PntTableRef>>;
14
+ export default PntTable;