@bioturing/components 0.15.3 → 0.15.4

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.
@@ -1,68 +1,100 @@
1
- import { jsx as n, jsxs as C, Fragment as L } from "react/jsx-runtime";
2
- import e from "antd/es/table";
3
- import { Funnel as T, CaretUp as r, CaretDown as a } from "@bioturing/assets";
4
- import { Empty as I } from "../Empty/component.js";
1
+ import { jsx as e, jsxs as g, Fragment as _ } from "react/jsx-runtime";
2
+ import t from "antd/es/table";
3
+ import { FunnelIcon as h, CaretUpIcon as p, CaretDownIcon as E } from "@bioturing/assets";
4
+ import { Empty as w } from "../Empty/component.js";
5
+ import { forwardRef as x, useState as j, useRef as A, useEffect as U, useCallback as M } from "react";
5
6
  import './style.css';/* empty css */
6
- import { useCls as O } from "../utils/antdUtils.js";
7
- const d = ({
8
- columns: s,
9
- locale: m,
10
- emptyDescription: c,
11
- loading: t,
12
- scroll: p = {},
13
- ...N
14
- }) => {
15
- const l = O(), E = s ? s.map((u) => ({
16
- sortIcon: ({ sortOrder: o }) => /* @__PURE__ */ n(
7
+ import { useCls as R } from "../utils/antdUtils.js";
8
+ const D = ({
9
+ columns: f,
10
+ locale: N,
11
+ emptyDescription: C,
12
+ loading: l,
13
+ virtual: i,
14
+ scroll: I = {},
15
+ ...b
16
+ }, r) => {
17
+ const c = R(), [L, d] = j(
18
+ i ? {} : {
19
+ x: "fit-content",
20
+ y: "fit-content"
21
+ }
22
+ ), s = A(null);
23
+ U(() => {
24
+ var u;
25
+ if (!s.current) return;
26
+ const n = (u = s.current) == null ? void 0 : u.nativeElement.querySelector(
27
+ "." + c("table-tbody")
28
+ ), o = new ResizeObserver((S) => {
29
+ for (const m of S)
30
+ m.target && d({
31
+ y: m.target.clientHeight,
32
+ x: m.target.clientWidth
33
+ });
34
+ });
35
+ return n && i && o.observe(n), () => {
36
+ n && i && o.disconnect();
37
+ };
38
+ }, [i, c]);
39
+ const T = f ? f.map((n) => ({
40
+ sortIcon: ({ sortOrder: o }) => /* @__PURE__ */ e(
17
41
  "span",
18
42
  {
19
- className: l(
43
+ className: c(
20
44
  "table-column-sort-icon",
21
45
  o ? `table-column-sort-icon-${o}` : "table-column-sort-icon-none"
22
46
  ),
23
- children: o ? o === "ascend" ? /* @__PURE__ */ n(r, { weight: "fill" }) : /* @__PURE__ */ n(a, { weight: "fill" }) : /* @__PURE__ */ C(L, { children: [
24
- /* @__PURE__ */ n(r, { weight: "fill" }),
47
+ children: o ? o === "ascend" ? /* @__PURE__ */ e(p, { weight: "fill" }) : /* @__PURE__ */ e(E, { weight: "fill" }) : /* @__PURE__ */ g(_, { children: [
48
+ /* @__PURE__ */ e(p, { weight: "fill" }),
25
49
  " ",
26
- /* @__PURE__ */ n(a, { weight: "fill" })
50
+ /* @__PURE__ */ e(E, { weight: "fill" })
27
51
  ] })
28
52
  }
29
53
  ),
30
- filterIcon: (o) => /* @__PURE__ */ n("span", { className: l("table-column-filter-icon"), children: /* @__PURE__ */ n(T, { weight: "fill" }) }),
31
- ...u
32
- })) : void 0, f = {
33
- emptyText: /* @__PURE__ */ n(I, { description: c }),
34
- ...m
54
+ filterIcon: (o) => /* @__PURE__ */ e("span", { className: c("table-column-filter-icon"), children: /* @__PURE__ */ e(h, { weight: "fill" }) }),
55
+ ...n
56
+ })) : void 0, y = {
57
+ emptyText: /* @__PURE__ */ e(w, { description: C }),
58
+ ...N
35
59
  };
36
- let i;
37
- return typeof t == "boolean" ? i = {
38
- spinning: t,
39
- indicator: /* @__PURE__ */ n("span", { className: l("spin-loader") })
40
- } : typeof t == "object" && (i = {
60
+ let a;
61
+ typeof l == "boolean" ? a = {
62
+ spinning: l,
63
+ indicator: /* @__PURE__ */ e("span", { className: c("spin-loader") })
64
+ } : typeof l == "object" && (a = {
41
65
  spinning: !0,
42
- indicator: /* @__PURE__ */ n("span", { className: l("spin-loader") }),
43
- ...t
44
- }), /* @__PURE__ */ n(
45
- e,
66
+ indicator: /* @__PURE__ */ e("span", { className: c("spin-loader") }),
67
+ ...l
68
+ });
69
+ const O = M(
70
+ (n) => {
71
+ n && (typeof r == "function" && r(n), r && typeof r == "object" && "current" in r && (r.current = n), s.current = n);
72
+ },
73
+ [r]
74
+ );
75
+ return /* @__PURE__ */ e(
76
+ t,
46
77
  {
47
- columns: E,
48
- loading: i,
49
- locale: f,
50
- scroll: { x: "fit-content", ...p },
51
- ...N
78
+ ref: O,
79
+ columns: T,
80
+ loading: a,
81
+ locale: y,
82
+ virtual: i,
83
+ scroll: { ...L, ...I },
84
+ ...b
52
85
  }
53
86
  );
54
- }, y = Object.assign(d, {
55
- Column: e.Column,
56
- ColumnGroup: e.ColumnGroup,
57
- SELECTION_COLUMN: e.SELECTION_COLUMN,
58
- EXPAND_COLUMN: e.EXPAND_COLUMN,
59
- SELECTION_ALL: e.SELECTION_ALL,
60
- SELECTION_INVERT: e.SELECTION_INVERT,
61
- SELECTION_NONE: e.SELECTION_NONE,
62
- Summary: e.Summary
87
+ }, P = x(D), v = Object.assign(P, {
88
+ Column: t.Column,
89
+ ColumnGroup: t.ColumnGroup,
90
+ SELECTION_COLUMN: t.SELECTION_COLUMN,
91
+ EXPAND_COLUMN: t.EXPAND_COLUMN,
92
+ SELECTION_ALL: t.SELECTION_ALL,
93
+ SELECTION_INVERT: t.SELECTION_INVERT,
94
+ SELECTION_NONE: t.SELECTION_NONE,
95
+ Summary: t.Summary
63
96
  });
64
97
  export {
65
- y as Table,
66
- y as default
98
+ v as Table
67
99
  };
68
100
  //# sourceMappingURL=component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/Table/component.tsx"],"sourcesContent":["import {\n default as AntTable,\n type ColumnType,\n type TableProps as AntTableProps,\n} from \"antd/es/table\";\nimport { CaretDown, CaretUp, Funnel } from \"@bioturing/assets\";\nimport { useCls } from \"../utils\";\nimport Empty from \"../Empty/component\";\nimport { SpinProps } from \"antd/es/spin\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n// Define interface with all the generic type parameters from AntTable without any\nexport interface TableProps<RecordType extends object = object>\n extends AntTableProps<RecordType> {\n /**\n * Add empty description for the table\n */\n emptyDescription?: React.ReactNode;\n}\n\n// Simple wrapper component with proper generics\nconst InternalTable = <RecordType extends object = object>({\n columns,\n locale,\n emptyDescription,\n loading,\n scroll = {},\n ...rest\n}: TableProps<RecordType>) => {\n const cls = useCls();\n const modifiedColumns = columns\n ? columns.map((column: ColumnType<RecordType>): ColumnType<RecordType> => {\n return {\n sortIcon: ({ sortOrder }) => {\n return (\n <span\n className={cls(\n \"table-column-sort-icon\",\n sortOrder\n ? `table-column-sort-icon-${sortOrder}`\n : `table-column-sort-icon-none`\n )}\n >\n {!sortOrder ? (\n <>\n <CaretUp weight=\"fill\" /> <CaretDown weight=\"fill\" />\n </>\n ) : sortOrder === \"ascend\" ? (\n <CaretUp weight=\"fill\" />\n ) : (\n <CaretDown weight=\"fill\" />\n )}\n </span>\n );\n },\n filterIcon: (_filtered) => {\n return (\n <span className={cls(\"table-column-filter-icon\")}>\n <Funnel weight=\"fill\" />\n </span>\n );\n },\n ...column,\n };\n })\n : undefined;\n const modifiedLocale = {\n emptyText: <Empty description={emptyDescription} />,\n ...locale,\n };\n let spinProps: SpinProps | undefined;\n if (typeof loading === \"boolean\") {\n spinProps = {\n spinning: loading,\n indicator: <span className={cls(\"spin-loader\")} />,\n };\n } else if (typeof loading === \"object\") {\n spinProps = {\n spinning: true,\n indicator: <span className={cls(\"spin-loader\")} />,\n ...loading,\n };\n }\n return (\n <AntTable\n columns={modifiedColumns}\n loading={spinProps}\n locale={modifiedLocale}\n scroll={{ x: \"fit-content\", ...scroll }}\n {...rest}\n />\n );\n};\n\n// Create the final component with all static properties\nexport const Table = Object.assign(InternalTable, {\n Column: AntTable.Column,\n ColumnGroup: AntTable.ColumnGroup,\n SELECTION_COLUMN: AntTable.SELECTION_COLUMN,\n EXPAND_COLUMN: AntTable.EXPAND_COLUMN,\n SELECTION_ALL: AntTable.SELECTION_ALL,\n SELECTION_INVERT: AntTable.SELECTION_INVERT,\n SELECTION_NONE: AntTable.SELECTION_NONE,\n Summary: AntTable.Summary,\n}) as typeof InternalTable & {\n Column: typeof AntTable.Column;\n ColumnGroup: typeof AntTable.ColumnGroup;\n SELECTION_COLUMN: typeof AntTable.SELECTION_COLUMN;\n EXPAND_COLUMN: typeof AntTable.EXPAND_COLUMN;\n SELECTION_ALL: typeof AntTable.SELECTION_ALL;\n SELECTION_INVERT: typeof AntTable.SELECTION_INVERT;\n SELECTION_NONE: typeof AntTable.SELECTION_NONE;\n Summary: typeof AntTable.Summary;\n};\n\nexport default Table;\n"],"names":["InternalTable","columns","locale","emptyDescription","loading","scroll","rest","cls","useCls","modifiedColumns","column","sortOrder","jsx","CaretUp","CaretDown","jsxs","Fragment","_filtered","Funnel","modifiedLocale","Empty","spinProps","AntTable","Table"],"mappings":";;;;;;AAuBA,MAAMA,IAAgB,CAAqC;AAAA,EACzD,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC,IAAS,CAAC;AAAA,EACV,GAAGC;AACL,MAA8B;AAC5B,QAAMC,IAAMC,EAAO,GACbC,IAAkBR,IACpBA,EAAQ,IAAI,CAACS,OACJ;AAAA,IACL,UAAU,CAAC,EAAE,WAAAC,QAET,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWL;AAAA,UACT;AAAA,UACAI,IACI,0BAA0BA,CAAS,KACnC;AAAA,QACN;AAAA,QAEC,UAACA,IAIEA,MAAc,WACf,gBAAAC,EAAAC,GAAA,EAAQ,QAAO,OAAA,CAAO,IAEvB,gBAAAD,EAACE,GAAU,EAAA,QAAO,OAAO,CAAA,IALvB,gBAAAC,EAAAC,GAAA,EAAA,UAAA;AAAA,UAAC,gBAAAJ,EAAAC,GAAA,EAAQ,QAAO,OAAO,CAAA;AAAA,UAAE;AAAA,UAAC,gBAAAD,EAACE,GAAU,EAAA,QAAO,OAAO,CAAA;AAAA,QACrD,EAAA,CAAA;AAAA,MAIyB;AAAA,IAE7B;AAAA,IAGJ,YAAY,CAACG,MAET,gBAAAL,EAAC,QAAK,EAAA,WAAWL,EAAI,0BAA0B,GAC7C,UAAC,gBAAAK,EAAAM,GAAA,EAAO,QAAO,OAAA,CAAO,EACxB,CAAA;AAAA,IAGJ,GAAGR;AAAA,EACL,EACD,IACD,QACES,IAAiB;AAAA,IACrB,WAAW,gBAAAP,EAACQ,GAAM,EAAA,aAAajB,EAAkB,CAAA;AAAA,IACjD,GAAGD;AAAA,EACL;AACI,MAAAmB;AACA,SAAA,OAAOjB,KAAY,YACTiB,IAAA;AAAA,IACV,UAAUjB;AAAA,IACV,WAAY,gBAAAQ,EAAA,QAAA,EAAK,WAAWL,EAAI,aAAa,EAAG,CAAA;AAAA,EAClD,IACS,OAAOH,KAAY,aAChBiB,IAAA;AAAA,IACV,UAAU;AAAA,IACV,WAAY,gBAAAT,EAAA,QAAA,EAAK,WAAWL,EAAI,aAAa,GAAG;AAAA,IAChD,GAAGH;AAAA,EACL,IAGA,gBAAAQ;AAAA,IAACU;AAAA,IAAA;AAAA,MACC,SAASb;AAAA,MACT,SAASY;AAAA,MACT,QAAQF;AAAA,MACR,QAAQ,EAAE,GAAG,eAAe,GAAGd,EAAO;AAAA,MACrC,GAAGC;AAAA,IAAA;AAAA,EACN;AAEJ,GAGaiB,IAAQ,OAAO,OAAOvB,GAAe;AAAA,EAChD,QAAQsB,EAAS;AAAA,EACjB,aAAaA,EAAS;AAAA,EACtB,kBAAkBA,EAAS;AAAA,EAC3B,eAAeA,EAAS;AAAA,EACxB,eAAeA,EAAS;AAAA,EACxB,kBAAkBA,EAAS;AAAA,EAC3B,gBAAgBA,EAAS;AAAA,EACzB,SAASA,EAAS;AACpB,CAAC;"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/Table/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntTable,\n type ColumnType,\n type TableProps as AntTableProps,\n type TableRef,\n} from \"antd/es/table\";\nimport { CaretDownIcon, CaretUpIcon, FunnelIcon } from \"@bioturing/assets\";\nimport { useCls } from \"../utils\";\nimport Empty from \"../Empty/component\";\nimport { SpinProps } from \"antd/es/spin\";\nimport {\n useState,\n useEffect,\n forwardRef,\n Ref,\n ForwardedRef,\n useCallback,\n useRef,\n} from \"react\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n// Define interface with all the generic type parameters from AntTable without any\nexport interface TableProps<RecordType extends object = object>\n extends AntTableProps<RecordType> {\n /**\n * Add empty description for the table\n */\n emptyDescription?: React.ReactNode;\n /**\n * Table ref\n */\n tableRef?: React.Ref<HTMLDivElement>;\n}\n\n// Simple wrapper component with proper generics\nconst InnerInternalTable = <RecordType extends object = object>(\n {\n columns,\n locale,\n emptyDescription,\n loading,\n virtual,\n scroll: scrollProp = {},\n ...rest\n }: TableProps<RecordType>,\n ref: Ref<TableRef>\n) => {\n const cls = useCls();\n const [scroll, setScroll] = useState<TableProps[\"scroll\"]>(\n virtual\n ? {}\n : {\n x: \"fit-content\",\n y: \"fit-content\",\n }\n );\n\n const innerRef = useRef<TableRef>(null);\n\n useEffect(() => {\n if (!innerRef.current) return;\n const tbody = innerRef.current?.nativeElement.querySelector(\n \".\" + cls(\"table-tbody\")\n ) as HTMLElement;\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target) {\n setScroll({\n y: entry.target.clientHeight,\n x: entry.target.clientWidth,\n });\n }\n }\n });\n if (tbody && virtual) {\n resizeObserver.observe(tbody);\n }\n\n return () => {\n if (tbody && virtual) {\n resizeObserver.disconnect();\n }\n };\n }, [virtual, cls]);\n const modifiedColumns = columns\n ? columns.map((column: ColumnType<RecordType>): ColumnType<RecordType> => {\n return {\n sortIcon: ({ sortOrder }) => {\n return (\n <span\n className={cls(\n \"table-column-sort-icon\",\n sortOrder\n ? `table-column-sort-icon-${sortOrder}`\n : `table-column-sort-icon-none`\n )}\n >\n {!sortOrder ? (\n <>\n <CaretUpIcon weight=\"fill\" />{\" \"}\n <CaretDownIcon weight=\"fill\" />\n </>\n ) : sortOrder === \"ascend\" ? (\n <CaretUpIcon weight=\"fill\" />\n ) : (\n <CaretDownIcon weight=\"fill\" />\n )}\n </span>\n );\n },\n filterIcon: (_filtered) => {\n return (\n <span className={cls(\"table-column-filter-icon\")}>\n <FunnelIcon weight=\"fill\" />\n </span>\n );\n },\n ...column,\n };\n })\n : undefined;\n const modifiedLocale = {\n emptyText: <Empty description={emptyDescription} />,\n ...locale,\n };\n let spinProps: SpinProps | undefined;\n if (typeof loading === \"boolean\") {\n spinProps = {\n spinning: loading,\n indicator: <span className={cls(\"spin-loader\")} />,\n };\n } else if (typeof loading === \"object\") {\n spinProps = {\n spinning: true,\n indicator: <span className={cls(\"spin-loader\")} />,\n ...loading,\n };\n }\n const callbackRef = useCallback(\n (tableRef: TableRef) => {\n if (tableRef) {\n if (typeof ref === \"function\") {\n ref(tableRef);\n }\n if (ref && typeof ref === \"object\" && \"current\" in ref) {\n ref.current = tableRef;\n }\n innerRef.current = tableRef;\n }\n },\n [ref]\n );\n\n return (\n <AntTable\n ref={callbackRef}\n columns={modifiedColumns}\n loading={spinProps}\n locale={modifiedLocale}\n virtual={virtual}\n scroll={{ ...scroll, ...scrollProp }}\n {...rest}\n />\n );\n};\n\nconst InternalTable = forwardRef(InnerInternalTable) as <\n RecordType extends object = object\n>(\n props: TableProps<RecordType> & { ref?: ForwardedRef<TableRef> }\n) => ReturnType<typeof InnerInternalTable>;\n\n// Create the final component with all static properties\nexport const Table = Object.assign(InternalTable, {\n Column: AntTable.Column,\n ColumnGroup: AntTable.ColumnGroup,\n SELECTION_COLUMN: AntTable.SELECTION_COLUMN,\n EXPAND_COLUMN: AntTable.EXPAND_COLUMN,\n SELECTION_ALL: AntTable.SELECTION_ALL,\n SELECTION_INVERT: AntTable.SELECTION_INVERT,\n SELECTION_NONE: AntTable.SELECTION_NONE,\n Summary: AntTable.Summary,\n}) as typeof InternalTable & {\n Column: typeof AntTable.Column;\n ColumnGroup: typeof AntTable.ColumnGroup;\n SELECTION_COLUMN: typeof AntTable.SELECTION_COLUMN;\n EXPAND_COLUMN: typeof AntTable.EXPAND_COLUMN;\n SELECTION_ALL: typeof AntTable.SELECTION_ALL;\n SELECTION_INVERT: typeof AntTable.SELECTION_INVERT;\n SELECTION_NONE: typeof AntTable.SELECTION_NONE;\n Summary: typeof AntTable.Summary;\n};\n"],"names":["InnerInternalTable","columns","locale","emptyDescription","loading","virtual","scrollProp","rest","ref","cls","useCls","scroll","setScroll","useState","innerRef","useRef","useEffect","tbody","_a","resizeObserver","entries","entry","modifiedColumns","column","sortOrder","jsx","CaretUpIcon","CaretDownIcon","jsxs","Fragment","_filtered","FunnelIcon","modifiedLocale","Empty","spinProps","callbackRef","useCallback","tableRef","AntTable","InternalTable","forwardRef","Table"],"mappings":"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"}
@@ -1 +1 @@
1
- @layer components{.ds-table-column-sort-icon{display:flex;flex-direction:column}.ds-table-column-sort-icon svg{color:var(--ds-color-text-disabled);font-size:1rem}:is(.ds-table-column-sort-icon svg):hover{color:var(--ds-color-text-secondary)}.ds-table-column-sort-icon.ds-table-column-sort-icon-none svg{font-size:.75rem}.ds-table-column-sort-icon.ds-table-column-sort-icon-none>svg:first-child{margin-bottom:-2px}.ds-table-column-sort-icon.ds-table-column-sort-icon-none>svg:last-child{margin-top:-2px}.ds-table-column-filter-icon{display:flex;flex-direction:column}.ds-table-column-filter-icon svg{color:var(--ds-color-text-disabled);font-size:.875rem}:is(.ds-table-column-filter-icon svg):hover{color:var(--ds-color-text-secondary)}.ds-table-column-filter-icon.ds-table-column-filter-icon-active svg{color:var(--ds-color-primary)}.ds-table-wrapper .ds-table-ping-left .ds-table-cell-fix-left-first:after,.ds-table-wrapper .ds-table-ping-left .ds-table-cell-fix-left-last:after{box-shadow:inset 10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper .ds-table-ping-right .ds-table-cell-fix-right-first:after,.ds-table-wrapper .ds-table-ping-right .ds-table-cell-fix-right-last:after{box-shadow:inset -10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper .ds-table-ping-right:not(.ds-table-has-fix-right) .ds-table-container:after{box-shadow:inset -10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper .ds-table-ping-left:not(.ds-table-has-fix-left) .ds-table-container:before{box-shadow:inset 10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper{display:flex;flex-direction:column}.ds-table-wrapper .ds-spin-nested-loading,.ds-table-wrapper .ds-spin-container{display:flex;flex-direction:column;flex-shrink:1;flex-grow:1;min-height:0}:is(.ds-table-wrapper .ds-spin-container) .ds-table{flex-shrink:1;flex-grow:1;min-height:0}.ds-table{display:flex;flex-direction:column}.ds-table-container{flex-shrink:1;min-height:0;display:flex;flex-direction:column}.ds-table-header{flex-shrink:0}.ds-table-body{flex-shrink:1}}
1
+ @layer components{.ds-table-column-sort-icon{display:flex;flex-direction:column}.ds-table-column-sort-icon svg{color:var(--ds-color-text-disabled);font-size:1rem}:is(.ds-table-column-sort-icon svg):hover{color:var(--ds-color-text-secondary)}.ds-table-column-sort-icon.ds-table-column-sort-icon-none svg{font-size:.75rem}.ds-table-column-sort-icon.ds-table-column-sort-icon-none>svg:first-child{margin-bottom:-2px}.ds-table-column-sort-icon.ds-table-column-sort-icon-none>svg:last-child{margin-top:-2px}.ds-table-column-filter-icon{display:flex;flex-direction:column}.ds-table-column-filter-icon svg{color:var(--ds-color-text-disabled);font-size:.875rem}:is(.ds-table-column-filter-icon svg):hover{color:var(--ds-color-text-secondary)}.ds-table-column-filter-icon.ds-table-column-filter-icon-active svg{color:var(--ds-color-primary)}.ds-table-wrapper .ds-table-ping-left .ds-table-cell-fix-left-first:after,.ds-table-wrapper .ds-table-ping-left .ds-table-cell-fix-left-last:after{box-shadow:inset 10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper .ds-table-ping-right .ds-table-cell-fix-right-first:after,.ds-table-wrapper .ds-table-ping-right .ds-table-cell-fix-right-last:after{box-shadow:inset -10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper .ds-table-ping-right:not(.ds-table-has-fix-right) .ds-table-container:after{box-shadow:inset -10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper .ds-table-ping-left:not(.ds-table-has-fix-left) .ds-table-container:before{box-shadow:inset 10px 0 8px -8px var(--ds-color-table-fixed-column-shadow)}.ds-table-wrapper{display:flex;flex-direction:column}.ds-table-wrapper .ds-spin-nested-loading,.ds-table-wrapper .ds-spin-container{display:flex;flex-direction:column;flex-shrink:1;flex-grow:1;min-height:0}:is(.ds-table-wrapper .ds-spin-container) .ds-table{flex-shrink:1;flex-grow:1;min-height:0}.ds-table{display:flex;flex-direction:column}.ds-table-container{flex-shrink:1;min-height:0;display:flex;flex-direction:column}.ds-table-header{flex-shrink:0}.ds-table-body{flex-shrink:1;min-height:0;min-width:0}}
@@ -1,58 +1,61 @@
1
1
  import n from "antd/es/config-provider";
2
- import a from "antd/es/theme/useToken";
3
- import { useContext as i } from "react";
4
- import { cx as c } from "./cn.js";
5
- const C = () => {
6
- const { getPrefixCls: o } = i(n.ConfigContext);
7
- return { getPrefixCls: o };
2
+ import c from "antd/es/theme/useToken";
3
+ import { useContext as i, useCallback as a } from "react";
4
+ import { cx as l } from "./cn.js";
5
+ const b = () => {
6
+ const { getPrefixCls: s } = i(n.ConfigContext);
7
+ return { getPrefixCls: s };
8
8
  }, g = () => {
9
9
  var t;
10
- return (t = a()[4]) == null ? void 0 : t.key;
11
- }, b = () => {
12
- const { getPrefixCls: o } = i(n.ConfigContext);
13
- return (...t) => c(...t).map((e) => o(e)).join(" ");
10
+ return (t = c()[4]) == null ? void 0 : t.key;
11
+ }, k = () => {
12
+ const { getPrefixCls: s } = i(n.ConfigContext);
13
+ return a(
14
+ (...e) => l(...e).map((o) => s(o)).join(" "),
15
+ [s]
16
+ );
14
17
  };
15
- function f(o) {
18
+ function f(s) {
16
19
  const t = [];
17
20
  let e = "";
18
- for (const r of o)
19
- r >= "A" && r <= "Z" ? (e && t.push(e), e = r.toLowerCase()) : e += r;
20
- return e && t.push(e), t.length > 0 ? t : [o];
21
+ for (const o of s)
22
+ o >= "A" && o <= "Z" ? (e && t.push(e), e = o.toLowerCase()) : e += o;
23
+ return e && t.push(e), t.length > 0 ? t : [s];
21
24
  }
22
- const h = (o = "bottomLeft") => {
23
- const [t, e] = f(o);
24
- let r, s = "center";
25
+ const h = (s = "bottomLeft") => {
26
+ const [t, e] = f(s);
27
+ let o, r = "center";
25
28
  if (t === "top" || t === "bottom") {
26
- if (r = t, e)
29
+ if (o = t, e)
27
30
  switch (e) {
28
31
  case "left":
29
- s = "start";
32
+ r = "start";
30
33
  break;
31
34
  case "right":
32
- s = "end";
35
+ r = "end";
33
36
  break;
34
37
  }
35
38
  } else if (t === "left" || t === "right") {
36
- if (r = t, e)
39
+ if (o = t, e)
37
40
  switch (e) {
38
41
  case "top":
39
- s = "start";
42
+ r = "start";
40
43
  break;
41
44
  case "bottom":
42
- s = "end";
45
+ r = "end";
43
46
  break;
44
47
  }
45
48
  } else
46
- r = "bottom";
49
+ o = "bottom";
47
50
  return {
48
- placement: r,
49
- align: s
51
+ placement: o,
52
+ align: r
50
53
  };
51
54
  };
52
55
  export {
53
56
  h as parseAntdPlacement,
54
57
  g as useAntdCssVarClassname,
55
- b as useCls,
56
- C as useGetPrefixCls
58
+ k as useCls,
59
+ b as useGetPrefixCls
57
60
  };
58
61
  //# sourceMappingURL=antdUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"antdUtils.js","sources":["../../../src/components/utils/antdUtils.ts"],"sourcesContent":["\"use client\";\nimport { default as ConfigProvider } from \"antd/es/config-provider\";\nimport useToken from \"antd/es/theme/useToken\";\nimport { useContext } from \"react\";\nimport type { ClassValue } from \"./types\";\nimport { cx } from \"./cn\";\nimport { PopoverProps } from \"antd/es/popover\";\n\nexport const useGetPrefixCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n return { getPrefixCls };\n};\n\n/**\n *\n * @returns the antd classname providing css variables\n */\nexport const useAntdCssVarClassname = () => {\n const token = useToken();\n return token[4]?.key;\n};\n\nexport const useCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n return (...args: ClassValue[]) => {\n return cx(...args)\n .map((cls) => getPrefixCls(cls))\n .join(\" \");\n };\n};\n\nfunction splitCamelCase(text: string): string[] {\n const result: string[] = [];\n let currentWord = \"\";\n\n for (const char of text) {\n if (char >= \"A\" && char <= \"Z\") {\n if (currentWord) {\n result.push(currentWord);\n }\n currentWord = char.toLowerCase();\n } else {\n currentWord += char;\n }\n }\n\n if (currentWord) {\n result.push(currentWord);\n }\n\n return result.length > 0 ? result : [text];\n}\n\nexport const parseAntdPlacement = (\n placement: PopoverProps[\"placement\"] = \"bottomLeft\"\n): {\n placement: \"top\" | \"bottom\" | \"left\" | \"right\";\n align: \"start\" | \"end\" | \"center\";\n} => {\n const [position1, position2] = splitCamelCase(placement);\n\n // Determine primary placement\n let primaryPlacement: \"top\" | \"bottom\" | \"left\" | \"right\";\n let align: \"start\" | \"end\" | \"center\" = \"center\";\n\n // First check if it's a vertical or horizontal primary placement\n if (position1 === \"top\" || position1 === \"bottom\") {\n primaryPlacement = position1;\n if (position2) {\n switch (position2) {\n case \"left\":\n align = \"start\";\n break;\n case \"right\":\n align = \"end\";\n break;\n // \"top\" or \"bottom\" as second position is invalid, defaults to center\n }\n }\n } else if (position1 === \"left\" || position1 === \"right\") {\n primaryPlacement = position1;\n if (position2) {\n switch (position2) {\n case \"top\":\n align = \"start\";\n break;\n case \"bottom\":\n align = \"end\";\n break;\n // \"left\" or \"right\" as second position is invalid, defaults to center\n }\n }\n } else {\n // Fallback for invalid placement\n primaryPlacement = \"bottom\";\n }\n\n return {\n placement: primaryPlacement,\n align,\n };\n};\n"],"names":["useGetPrefixCls","getPrefixCls","useContext","ConfigProvider","useAntdCssVarClassname","_a","useToken","useCls","args","cx","cls","splitCamelCase","text","result","currentWord","char","parseAntdPlacement","placement","position1","position2","primaryPlacement","align"],"mappings":";;;;AAQO,MAAMA,IAAkB,MAAM;AACnC,QAAM,EAAE,cAAAC,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AAChE,SAAO,EAAE,cAAAF,EAAa;AACxB,GAMaG,IAAyB,MAAM;;AAEnC,UAAAC,IADOC,EAAS,EACV,CAAC,MAAP,gBAAAD,EAAU;AACnB,GAEaE,IAAS,MAAM;AAC1B,QAAM,EAAE,cAAAN,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AAChE,SAAO,IAAIK,MACFC,EAAG,GAAGD,CAAI,EACd,IAAI,CAACE,MAAQT,EAAaS,CAAG,CAAC,EAC9B,KAAK,GAAG;AAEf;AAEA,SAASC,EAAeC,GAAwB;AAC9C,QAAMC,IAAmB,CAAC;AAC1B,MAAIC,IAAc;AAElB,aAAWC,KAAQH;AACb,IAAAG,KAAQ,OAAOA,KAAQ,OACrBD,KACFD,EAAO,KAAKC,CAAW,GAEzBA,IAAcC,EAAK,YAAY,KAEhBD,KAAAC;AAInB,SAAID,KACFD,EAAO,KAAKC,CAAW,GAGlBD,EAAO,SAAS,IAAIA,IAAS,CAACD,CAAI;AAC3C;AAEa,MAAAI,IAAqB,CAChCC,IAAuC,iBAIpC;AACH,QAAM,CAACC,GAAWC,CAAS,IAAIR,EAAeM,CAAS;AAGnD,MAAAG,GACAC,IAAoC;AAGpC,MAAAH,MAAc,SAASA,MAAc;AAEvC,QADmBE,IAAAF,GACfC;AACF,cAAQA,GAAW;AAAA,QACjB,KAAK;AACK,UAAAE,IAAA;AACR;AAAA,QACF,KAAK;AACK,UAAAA,IAAA;AACR;AAAA,MAAA;AAAA,aAIGH,MAAc,UAAUA,MAAc;AAE/C,QADmBE,IAAAF,GACfC;AACF,cAAQA,GAAW;AAAA,QACjB,KAAK;AACK,UAAAE,IAAA;AACR;AAAA,QACF,KAAK;AACK,UAAAA,IAAA;AACR;AAAA,MAAA;AAAA;AAMa,IAAAD,IAAA;AAGd,SAAA;AAAA,IACL,WAAWA;AAAA,IACX,OAAAC;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"antdUtils.js","sources":["../../../src/components/utils/antdUtils.ts"],"sourcesContent":["\"use client\";\nimport { default as ConfigProvider } from \"antd/es/config-provider\";\nimport useToken from \"antd/es/theme/useToken\";\nimport { useCallback, useContext } from \"react\";\nimport type { ClassValue } from \"./types\";\nimport { cx } from \"./cn\";\nimport { PopoverProps } from \"antd/es/popover\";\n\nexport const useGetPrefixCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n return { getPrefixCls };\n};\n\n/**\n *\n * @returns the antd classname providing css variables\n */\nexport const useAntdCssVarClassname = () => {\n const token = useToken();\n return token[4]?.key;\n};\n\nexport const useCls = () => {\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const cls = useCallback(\n (...args: ClassValue[]) => {\n return cx(...args)\n .map((cls) => getPrefixCls(cls))\n .join(\" \");\n },\n [getPrefixCls]\n );\n return cls;\n};\n\nfunction splitCamelCase(text: string): string[] {\n const result: string[] = [];\n let currentWord = \"\";\n\n for (const char of text) {\n if (char >= \"A\" && char <= \"Z\") {\n if (currentWord) {\n result.push(currentWord);\n }\n currentWord = char.toLowerCase();\n } else {\n currentWord += char;\n }\n }\n\n if (currentWord) {\n result.push(currentWord);\n }\n\n return result.length > 0 ? result : [text];\n}\n\nexport const parseAntdPlacement = (\n placement: PopoverProps[\"placement\"] = \"bottomLeft\"\n): {\n placement: \"top\" | \"bottom\" | \"left\" | \"right\";\n align: \"start\" | \"end\" | \"center\";\n} => {\n const [position1, position2] = splitCamelCase(placement);\n\n // Determine primary placement\n let primaryPlacement: \"top\" | \"bottom\" | \"left\" | \"right\";\n let align: \"start\" | \"end\" | \"center\" = \"center\";\n\n // First check if it's a vertical or horizontal primary placement\n if (position1 === \"top\" || position1 === \"bottom\") {\n primaryPlacement = position1;\n if (position2) {\n switch (position2) {\n case \"left\":\n align = \"start\";\n break;\n case \"right\":\n align = \"end\";\n break;\n // \"top\" or \"bottom\" as second position is invalid, defaults to center\n }\n }\n } else if (position1 === \"left\" || position1 === \"right\") {\n primaryPlacement = position1;\n if (position2) {\n switch (position2) {\n case \"top\":\n align = \"start\";\n break;\n case \"bottom\":\n align = \"end\";\n break;\n // \"left\" or \"right\" as second position is invalid, defaults to center\n }\n }\n } else {\n // Fallback for invalid placement\n primaryPlacement = \"bottom\";\n }\n\n return {\n placement: primaryPlacement,\n align,\n };\n};\n"],"names":["useGetPrefixCls","getPrefixCls","useContext","ConfigProvider","useAntdCssVarClassname","_a","useToken","useCls","useCallback","args","cx","cls","splitCamelCase","text","result","currentWord","char","parseAntdPlacement","placement","position1","position2","primaryPlacement","align"],"mappings":";;;;AAQO,MAAMA,IAAkB,MAAM;AACnC,QAAM,EAAE,cAAAC,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AAChE,SAAO,EAAE,cAAAF,EAAa;AACxB,GAMaG,IAAyB,MAAM;;AAEnC,UAAAC,IADOC,EAAS,EACV,CAAC,MAAP,gBAAAD,EAAU;AACnB,GAEaE,IAAS,MAAM;AAC1B,QAAM,EAAE,cAAAN,EAAiB,IAAAC,EAAWC,EAAe,aAAa;AASzD,SARKK;AAAA,IACV,IAAIC,MACKC,EAAG,GAAGD,CAAI,EACd,IAAI,CAACE,MAAQV,EAAaU,CAAG,CAAC,EAC9B,KAAK,GAAG;AAAA,IAEb,CAACV,CAAY;AAAA,EACf;AAEF;AAEA,SAASW,EAAeC,GAAwB;AAC9C,QAAMC,IAAmB,CAAC;AAC1B,MAAIC,IAAc;AAElB,aAAWC,KAAQH;AACb,IAAAG,KAAQ,OAAOA,KAAQ,OACrBD,KACFD,EAAO,KAAKC,CAAW,GAEzBA,IAAcC,EAAK,YAAY,KAEhBD,KAAAC;AAInB,SAAID,KACFD,EAAO,KAAKC,CAAW,GAGlBD,EAAO,SAAS,IAAIA,IAAS,CAACD,CAAI;AAC3C;AAEa,MAAAI,IAAqB,CAChCC,IAAuC,iBAIpC;AACH,QAAM,CAACC,GAAWC,CAAS,IAAIR,EAAeM,CAAS;AAGnD,MAAAG,GACAC,IAAoC;AAGpC,MAAAH,MAAc,SAASA,MAAc;AAEvC,QADmBE,IAAAF,GACfC;AACF,cAAQA,GAAW;AAAA,QACjB,KAAK;AACK,UAAAE,IAAA;AACR;AAAA,QACF,KAAK;AACK,UAAAA,IAAA;AACR;AAAA,MAAA;AAAA,aAIGH,MAAc,UAAUA,MAAc;AAE/C,QADmBE,IAAAF,GACfC;AACF,cAAQA,GAAW;AAAA,QACjB,KAAK;AACK,UAAAE,IAAA;AACR;AAAA,QACF,KAAK;AACK,UAAAA,IAAA;AACR;AAAA,MAAA;AAAA;AAMa,IAAAD,IAAA;AAGd,SAAA;AAAA,IACL,WAAWA;AAAA,IACX,OAAAC;AAAA,EACF;AACF;"}
package/dist/index.d.ts CHANGED
@@ -160,6 +160,7 @@ import { RcFile } from 'antd/es/upload';
160
160
  import * as React_2 from 'react';
161
161
  import { ReactElement } from 'react';
162
162
  import { ReactNode } from 'react';
163
+ import { Ref } from 'react';
163
164
  import { RefAttributes } from 'react';
164
165
  import { RefObject } from 'react';
165
166
  import { RefSelectProps } from 'antd';
@@ -200,6 +201,7 @@ import { TableColumnType } from 'antd';
200
201
  import { TablePaginationConfig } from 'antd';
201
202
  import { TableProps } from 'antd';
202
203
  import { TableProps as TableProps_3 } from 'antd/es/table';
204
+ import { TableRef } from 'antd/es/table';
203
205
  import { TabPaneProps } from 'antd';
204
206
  import { Tabs } from 'antd';
205
207
  import { TabsProps } from 'antd';
@@ -1107,6 +1109,8 @@ declare type IconButtonOwnProps<E extends ElementType = ElementType> = WithHrefP
1107
1109
 
1108
1110
  export declare type IconButtonProps<E extends ElementType = "button"> = IconButtonOwnProps<E> & Omit<ComponentPropsWithoutRef<E>, keyof IconButtonOwnProps<E>>;
1109
1111
 
1112
+ declare const InnerInternalTable: <RecordType extends object = object>({ columns, locale, emptyDescription, loading, virtual, scroll: scrollProp, ...rest }: TableProps_2<RecordType>, ref: Ref<TableRef>) => JSX.Element;
1113
+
1110
1114
  declare function InnerToast({ toast, }: {
1111
1115
  toast: Toast_2.Root.ToastObject<ToastData>;
1112
1116
  }): JSX.Element;
@@ -1140,7 +1144,9 @@ export declare interface InputProps extends InputProps_2 {
1140
1144
  declare interface InternalFormProps<Values = any> extends React_2.ComponentProps<typeof default_8<Values>> {
1141
1145
  }
1142
1146
 
1143
- declare const InternalTable: <RecordType extends object = object>({ columns, locale, emptyDescription, loading, scroll, ...rest }: TableProps_2<RecordType>) => JSX.Element;
1147
+ declare const InternalTable: <RecordType extends object = object>(props: TableProps_2<RecordType> & {
1148
+ ref?: ForwardedRef<TableRef>;
1149
+ }) => ReturnType<typeof InnerInternalTable>;
1144
1150
 
1145
1151
  declare type IntrinsicElement = keyof JSX_2.IntrinsicElements | JSXElementConstructor<any>;
1146
1152
 
@@ -2162,6 +2168,10 @@ declare interface TableProps_2<RecordType extends object = object> extends Table
2162
2168
  * Add empty description for the table
2163
2169
  */
2164
2170
  emptyDescription?: React.ReactNode;
2171
+ /**
2172
+ * Table ref
2173
+ */
2174
+ tableRef?: React.Ref<HTMLDivElement>;
2165
2175
  }
2166
2176
 
2167
2177
  export { TabPaneProps }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bioturing/components",
3
- "version": "0.15.3",
3
+ "version": "0.15.4",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",