@underverse-ui/underverse 1.0.91 → 1.0.92
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/api-reference.json +1 -1
- package/dist/index.cjs +34 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -2
- package/dist/index.d.ts +12 -2
- package/dist/index.js +34 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -780,6 +780,8 @@ interface OverlayScrollbarBehavior {
|
|
|
780
780
|
autoHideDelay: number;
|
|
781
781
|
dragScroll: boolean;
|
|
782
782
|
clickScroll: boolean;
|
|
783
|
+
overflowX: "hidden" | "visible" | "scroll" | "visible-hidden" | "visible-scroll";
|
|
784
|
+
overflowY: "hidden" | "visible" | "scroll" | "visible-hidden" | "visible-scroll";
|
|
783
785
|
exclude: string;
|
|
784
786
|
}
|
|
785
787
|
|
|
@@ -790,7 +792,7 @@ interface OverlayScrollbarProviderProps extends Partial<OverlayScrollbarBehavior
|
|
|
790
792
|
}
|
|
791
793
|
interface UseOverlayScrollbarTargetOptions extends Partial<OverlayScrollbarBehavior> {
|
|
792
794
|
}
|
|
793
|
-
declare function OverlayScrollbarProvider({ enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, exclude, selector, children, }?: OverlayScrollbarProviderProps): react_jsx_runtime.JSX.Element;
|
|
795
|
+
declare function OverlayScrollbarProvider({ enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, overflowX, overflowY, exclude, selector, children, }?: OverlayScrollbarProviderProps): react_jsx_runtime.JSX.Element;
|
|
794
796
|
declare function useOverlayScrollbarTarget<T extends HTMLElement>(targetRef: React__default.RefObject<T | null>, options?: UseOverlayScrollbarTargetOptions): void;
|
|
795
797
|
|
|
796
798
|
interface OverlayScrollAreaProps extends React__default.HTMLAttributes<HTMLDivElement> {
|
|
@@ -2249,6 +2251,7 @@ declare const loading: LoadingManager;
|
|
|
2249
2251
|
type FilterType = "text" | "select" | "date";
|
|
2250
2252
|
type DataTableSize = "sm" | "md" | "lg";
|
|
2251
2253
|
type DataTableDensity = "compact" | "normal" | "comfortable";
|
|
2254
|
+
type DataTableHorizontalMode = "auto" | "scroll" | "fit";
|
|
2252
2255
|
type DataTableColumn<T> = {
|
|
2253
2256
|
key: string;
|
|
2254
2257
|
title: React__default.ReactNode;
|
|
@@ -2324,6 +2327,13 @@ interface DataTableProps<T> {
|
|
|
2324
2327
|
stickyHeader?: boolean;
|
|
2325
2328
|
/** Chiều cao tối đa của bảng khi bật stickyHeader (mặc định: 500px) */
|
|
2326
2329
|
maxHeight?: number | string;
|
|
2330
|
+
/**
|
|
2331
|
+
* Horizontal sizing strategy for the table viewport.
|
|
2332
|
+
* - "auto": default, prefer fitting the container and only scroll when content truly overflows
|
|
2333
|
+
* - "scroll": preserve explicit column widths and force horizontal scrolling via min-width aggregation
|
|
2334
|
+
* - "fit": use fixed table layout and suppress horizontal scrolling
|
|
2335
|
+
*/
|
|
2336
|
+
horizontalMode?: DataTableHorizontalMode;
|
|
2327
2337
|
/** Clip overflow của outer wrapper. Tắt khi cần cho phép shadow/focus ring tràn ra ngoài. */
|
|
2328
2338
|
overflowHidden?: boolean;
|
|
2329
2339
|
/** Enable OverlayScrollbars on table viewport. Default: false */
|
|
@@ -2333,7 +2343,7 @@ interface DataTableProps<T> {
|
|
|
2333
2343
|
labels?: DataTableLabels;
|
|
2334
2344
|
}
|
|
2335
2345
|
|
|
2336
|
-
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, overflowHidden, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
2346
|
+
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, horizontalMode, overflowHidden, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
2337
2347
|
|
|
2338
2348
|
interface TableProps extends React__default.HTMLAttributes<HTMLTableElement> {
|
|
2339
2349
|
containerClassName?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -780,6 +780,8 @@ interface OverlayScrollbarBehavior {
|
|
|
780
780
|
autoHideDelay: number;
|
|
781
781
|
dragScroll: boolean;
|
|
782
782
|
clickScroll: boolean;
|
|
783
|
+
overflowX: "hidden" | "visible" | "scroll" | "visible-hidden" | "visible-scroll";
|
|
784
|
+
overflowY: "hidden" | "visible" | "scroll" | "visible-hidden" | "visible-scroll";
|
|
783
785
|
exclude: string;
|
|
784
786
|
}
|
|
785
787
|
|
|
@@ -790,7 +792,7 @@ interface OverlayScrollbarProviderProps extends Partial<OverlayScrollbarBehavior
|
|
|
790
792
|
}
|
|
791
793
|
interface UseOverlayScrollbarTargetOptions extends Partial<OverlayScrollbarBehavior> {
|
|
792
794
|
}
|
|
793
|
-
declare function OverlayScrollbarProvider({ enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, exclude, selector, children, }?: OverlayScrollbarProviderProps): react_jsx_runtime.JSX.Element;
|
|
795
|
+
declare function OverlayScrollbarProvider({ enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, overflowX, overflowY, exclude, selector, children, }?: OverlayScrollbarProviderProps): react_jsx_runtime.JSX.Element;
|
|
794
796
|
declare function useOverlayScrollbarTarget<T extends HTMLElement>(targetRef: React__default.RefObject<T | null>, options?: UseOverlayScrollbarTargetOptions): void;
|
|
795
797
|
|
|
796
798
|
interface OverlayScrollAreaProps extends React__default.HTMLAttributes<HTMLDivElement> {
|
|
@@ -2249,6 +2251,7 @@ declare const loading: LoadingManager;
|
|
|
2249
2251
|
type FilterType = "text" | "select" | "date";
|
|
2250
2252
|
type DataTableSize = "sm" | "md" | "lg";
|
|
2251
2253
|
type DataTableDensity = "compact" | "normal" | "comfortable";
|
|
2254
|
+
type DataTableHorizontalMode = "auto" | "scroll" | "fit";
|
|
2252
2255
|
type DataTableColumn<T> = {
|
|
2253
2256
|
key: string;
|
|
2254
2257
|
title: React__default.ReactNode;
|
|
@@ -2324,6 +2327,13 @@ interface DataTableProps<T> {
|
|
|
2324
2327
|
stickyHeader?: boolean;
|
|
2325
2328
|
/** Chiều cao tối đa của bảng khi bật stickyHeader (mặc định: 500px) */
|
|
2326
2329
|
maxHeight?: number | string;
|
|
2330
|
+
/**
|
|
2331
|
+
* Horizontal sizing strategy for the table viewport.
|
|
2332
|
+
* - "auto": default, prefer fitting the container and only scroll when content truly overflows
|
|
2333
|
+
* - "scroll": preserve explicit column widths and force horizontal scrolling via min-width aggregation
|
|
2334
|
+
* - "fit": use fixed table layout and suppress horizontal scrolling
|
|
2335
|
+
*/
|
|
2336
|
+
horizontalMode?: DataTableHorizontalMode;
|
|
2327
2337
|
/** Clip overflow của outer wrapper. Tắt khi cần cho phép shadow/focus ring tràn ra ngoài. */
|
|
2328
2338
|
overflowHidden?: boolean;
|
|
2329
2339
|
/** Enable OverlayScrollbars on table viewport. Default: false */
|
|
@@ -2333,7 +2343,7 @@ interface DataTableProps<T> {
|
|
|
2333
2343
|
labels?: DataTableLabels;
|
|
2334
2344
|
}
|
|
2335
2345
|
|
|
2336
|
-
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, overflowHidden, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
2346
|
+
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, size, enableColumnVisibilityToggle, enableDensityToggle, enableHeaderAlignToggle, striped, columnDividers, className, storageKey, stickyHeader, maxHeight, horizontalMode, overflowHidden, useOverlayScrollbar, enableHeaderAutoFit, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
2337
2347
|
|
|
2338
2348
|
interface TableProps extends React__default.HTMLAttributes<HTMLTableElement> {
|
|
2339
2349
|
containerClassName?: string;
|
package/dist/index.js
CHANGED
|
@@ -1879,6 +1879,8 @@ var DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR = {
|
|
|
1879
1879
|
autoHideDelay: 600,
|
|
1880
1880
|
dragScroll: true,
|
|
1881
1881
|
clickScroll: false,
|
|
1882
|
+
overflowX: "scroll",
|
|
1883
|
+
overflowY: "scroll",
|
|
1882
1884
|
exclude: DEFAULT_OVERLAY_SCROLLBAR_EXCLUDE
|
|
1883
1885
|
};
|
|
1884
1886
|
function resolveOverlayScrollbarBehavior(overrides = {}) {
|
|
@@ -1889,6 +1891,10 @@ function resolveOverlayScrollbarBehavior(overrides = {}) {
|
|
|
1889
1891
|
}
|
|
1890
1892
|
function buildOverlayScrollbarOptions(config) {
|
|
1891
1893
|
return {
|
|
1894
|
+
overflow: {
|
|
1895
|
+
x: config.overflowX,
|
|
1896
|
+
y: config.overflowY
|
|
1897
|
+
},
|
|
1892
1898
|
scrollbars: {
|
|
1893
1899
|
theme: config.theme,
|
|
1894
1900
|
visibility: config.visibility,
|
|
@@ -2033,6 +2039,8 @@ function OverlayScrollbarProvider({
|
|
|
2033
2039
|
autoHideDelay = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.autoHideDelay,
|
|
2034
2040
|
dragScroll = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.dragScroll,
|
|
2035
2041
|
clickScroll = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.clickScroll,
|
|
2042
|
+
overflowX = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.overflowX,
|
|
2043
|
+
overflowY = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.overflowY,
|
|
2036
2044
|
exclude = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.exclude,
|
|
2037
2045
|
selector,
|
|
2038
2046
|
children
|
|
@@ -2046,9 +2054,11 @@ function OverlayScrollbarProvider({
|
|
|
2046
2054
|
autoHideDelay,
|
|
2047
2055
|
dragScroll,
|
|
2048
2056
|
clickScroll,
|
|
2057
|
+
overflowX,
|
|
2058
|
+
overflowY,
|
|
2049
2059
|
exclude
|
|
2050
2060
|
}),
|
|
2051
|
-
[enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, exclude]
|
|
2061
|
+
[enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, overflowX, overflowY, exclude]
|
|
2052
2062
|
);
|
|
2053
2063
|
void selector;
|
|
2054
2064
|
return /* @__PURE__ */ jsx8(OverlayScrollbarConfigContext.Provider, { value, children: children ?? null });
|
|
@@ -2062,6 +2072,8 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
|
|
|
2062
2072
|
const autoHideDelay = options.autoHideDelay ?? inherited.autoHideDelay;
|
|
2063
2073
|
const dragScroll = options.dragScroll ?? inherited.dragScroll;
|
|
2064
2074
|
const clickScroll = options.clickScroll ?? inherited.clickScroll;
|
|
2075
|
+
const overflowX = options.overflowX ?? inherited.overflowX;
|
|
2076
|
+
const overflowY = options.overflowY ?? inherited.overflowY;
|
|
2065
2077
|
const exclude = options.exclude ?? inherited.exclude;
|
|
2066
2078
|
const resolved = useMemo2(
|
|
2067
2079
|
() => resolveOverlayScrollbarBehavior({
|
|
@@ -2072,9 +2084,11 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
|
|
|
2072
2084
|
autoHideDelay,
|
|
2073
2085
|
dragScroll,
|
|
2074
2086
|
clickScroll,
|
|
2087
|
+
overflowX,
|
|
2088
|
+
overflowY,
|
|
2075
2089
|
exclude
|
|
2076
2090
|
}),
|
|
2077
|
-
[enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, exclude]
|
|
2091
|
+
[enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, overflowX, overflowY, exclude]
|
|
2078
2092
|
);
|
|
2079
2093
|
useEffect2(() => {
|
|
2080
2094
|
if (typeof window === "undefined") return;
|
|
@@ -2099,6 +2113,8 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
|
|
|
2099
2113
|
resolved.autoHideDelay,
|
|
2100
2114
|
resolved.dragScroll,
|
|
2101
2115
|
resolved.clickScroll,
|
|
2116
|
+
resolved.overflowX,
|
|
2117
|
+
resolved.overflowY,
|
|
2102
2118
|
resolved.exclude
|
|
2103
2119
|
]);
|
|
2104
2120
|
}
|
|
@@ -20793,7 +20809,7 @@ var LoadingBar = ({
|
|
|
20793
20809
|
// src/components/Table.tsx
|
|
20794
20810
|
import React52 from "react";
|
|
20795
20811
|
import { jsx as jsx62, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
20796
|
-
var TABLE_BASE_CLASS = "w-full caption-bottom text-sm";
|
|
20812
|
+
var TABLE_BASE_CLASS = "w-full border-collapse caption-bottom text-sm";
|
|
20797
20813
|
var TABLE_CONTAINER_BASE_CLASS = [
|
|
20798
20814
|
"relative w-full overflow-auto",
|
|
20799
20815
|
"rounded-2xl md:rounded-3xl border border-border/50",
|
|
@@ -21228,6 +21244,7 @@ function DataTableHeader({
|
|
|
21228
21244
|
const prevCol = prevCell?.column;
|
|
21229
21245
|
const isAfterFixedLeft = prevCol?.fixed === "left";
|
|
21230
21246
|
const showBorderLeft = columnDividers && cellIndex > 0 && !isAfterFixedLeft && !col.fixed;
|
|
21247
|
+
const isLastCell = cellIndex === row.length - 1;
|
|
21231
21248
|
return /* @__PURE__ */ jsxs53(
|
|
21232
21249
|
TableHead,
|
|
21233
21250
|
{
|
|
@@ -21267,7 +21284,8 @@ function DataTableHeader({
|
|
|
21267
21284
|
onAutoFitColumn?.(col.key);
|
|
21268
21285
|
},
|
|
21269
21286
|
className: cn(
|
|
21270
|
-
"absolute inset-y-0 right-0 z-10 w-3
|
|
21287
|
+
"absolute inset-y-0 right-0 z-10 w-3",
|
|
21288
|
+
!isLastCell && "-mr-1",
|
|
21271
21289
|
"cursor-col-resize select-none bg-transparent",
|
|
21272
21290
|
"after:absolute after:inset-y-2 after:right-0.8 after:w-px after:bg-border/0 after:transition-colors",
|
|
21273
21291
|
"hover:after:bg-primary/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary"
|
|
@@ -22038,6 +22056,7 @@ function DataTable({
|
|
|
22038
22056
|
storageKey,
|
|
22039
22057
|
stickyHeader = true,
|
|
22040
22058
|
maxHeight = 500,
|
|
22059
|
+
horizontalMode = "auto",
|
|
22041
22060
|
overflowHidden = true,
|
|
22042
22061
|
useOverlayScrollbar = false,
|
|
22043
22062
|
enableHeaderAutoFit = true,
|
|
@@ -22111,6 +22130,10 @@ function DataTable({
|
|
|
22111
22130
|
total
|
|
22112
22131
|
});
|
|
22113
22132
|
const { getStickyCellClass, getStickyColumnStyle, getStickyHeaderClass, getStickyHeaderCellStyle } = useStickyColumns(visibleColumns);
|
|
22133
|
+
const shouldForceHorizontalScroll = horizontalMode === "scroll";
|
|
22134
|
+
const shouldUseFixedLayout = horizontalMode !== "auto";
|
|
22135
|
+
const viewportOverflowXClass = horizontalMode === "fit" ? "overflow-x-hidden" : "overflow-x-auto";
|
|
22136
|
+
const overlayOverflowX = horizontalMode === "fit" ? "hidden" : "scroll";
|
|
22114
22137
|
const getRowKey = (row, idx) => {
|
|
22115
22138
|
if (!rowKey) return String(idx);
|
|
22116
22139
|
if (typeof rowKey === "function") return String(rowKey(row));
|
|
@@ -22118,7 +22141,10 @@ function DataTable({
|
|
|
22118
22141
|
};
|
|
22119
22142
|
const viewportRef = React62.useRef(null);
|
|
22120
22143
|
const tableRef = React62.useRef(null);
|
|
22121
|
-
useOverlayScrollbarTarget(viewportRef, {
|
|
22144
|
+
useOverlayScrollbarTarget(viewportRef, {
|
|
22145
|
+
enabled: useOverlayScrollbar,
|
|
22146
|
+
overflowX: overlayOverflowX
|
|
22147
|
+
});
|
|
22122
22148
|
const autoFitColumn = React62.useCallback((columnKey) => {
|
|
22123
22149
|
const tableElement = tableRef.current;
|
|
22124
22150
|
if (!tableElement) return;
|
|
@@ -22180,7 +22206,7 @@ function DataTable({
|
|
|
22180
22206
|
"div",
|
|
22181
22207
|
{
|
|
22182
22208
|
ref: viewportRef,
|
|
22183
|
-
className: cn("w-full
|
|
22209
|
+
className: cn("w-full", viewportOverflowXClass, stickyHeader && "overflow-y-auto"),
|
|
22184
22210
|
style: stickyHeader ? { maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight } : void 0,
|
|
22185
22211
|
children: /* @__PURE__ */ jsxs56(
|
|
22186
22212
|
Table,
|
|
@@ -22188,10 +22214,10 @@ function DataTable({
|
|
|
22188
22214
|
ref: tableRef,
|
|
22189
22215
|
disableContainer: true,
|
|
22190
22216
|
className: cn(
|
|
22191
|
-
"table-fixed",
|
|
22217
|
+
shouldUseFixedLayout ? "table-fixed" : "table-auto",
|
|
22192
22218
|
stickyHeader && ["[&_thead]:sticky", "[&_thead]:top-0", "[&_thead]:z-20", "[&_thead]:shadow-[0_1px_3px_rgba(0,0,0,0.1)]"]
|
|
22193
22219
|
),
|
|
22194
|
-
style: { minWidth: totalColumnsWidth > 0 ? `${totalColumnsWidth}px` : void 0 },
|
|
22220
|
+
style: { minWidth: shouldForceHorizontalScroll && totalColumnsWidth > 0 ? `${totalColumnsWidth}px` : void 0 },
|
|
22195
22221
|
children: [
|
|
22196
22222
|
/* @__PURE__ */ jsx67(TableHeader, { children: /* @__PURE__ */ jsx67(
|
|
22197
22223
|
DataTableHeader,
|