@underverse-ui/underverse 1.0.90 → 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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@underverse-ui/underverse",
3
- "version": "1.0.90",
3
+ "version": "1.0.92",
4
4
  "sourceEntry": "src/index.ts",
5
5
  "totalExports": 225,
6
6
  "exports": [
package/dist/index.cjs CHANGED
@@ -2064,6 +2064,8 @@ var DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR = {
2064
2064
  autoHideDelay: 600,
2065
2065
  dragScroll: true,
2066
2066
  clickScroll: false,
2067
+ overflowX: "scroll",
2068
+ overflowY: "scroll",
2067
2069
  exclude: DEFAULT_OVERLAY_SCROLLBAR_EXCLUDE
2068
2070
  };
2069
2071
  function resolveOverlayScrollbarBehavior(overrides = {}) {
@@ -2074,6 +2076,10 @@ function resolveOverlayScrollbarBehavior(overrides = {}) {
2074
2076
  }
2075
2077
  function buildOverlayScrollbarOptions(config) {
2076
2078
  return {
2079
+ overflow: {
2080
+ x: config.overflowX,
2081
+ y: config.overflowY
2082
+ },
2077
2083
  scrollbars: {
2078
2084
  theme: config.theme,
2079
2085
  visibility: config.visibility,
@@ -2218,6 +2224,8 @@ function OverlayScrollbarProvider({
2218
2224
  autoHideDelay = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.autoHideDelay,
2219
2225
  dragScroll = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.dragScroll,
2220
2226
  clickScroll = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.clickScroll,
2227
+ overflowX = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.overflowX,
2228
+ overflowY = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.overflowY,
2221
2229
  exclude = DEFAULT_OVERLAY_SCROLLBAR_BEHAVIOR.exclude,
2222
2230
  selector,
2223
2231
  children
@@ -2231,9 +2239,11 @@ function OverlayScrollbarProvider({
2231
2239
  autoHideDelay,
2232
2240
  dragScroll,
2233
2241
  clickScroll,
2242
+ overflowX,
2243
+ overflowY,
2234
2244
  exclude
2235
2245
  }),
2236
- [enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, exclude]
2246
+ [enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, overflowX, overflowY, exclude]
2237
2247
  );
2238
2248
  void selector;
2239
2249
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(OverlayScrollbarConfigContext.Provider, { value, children: children ?? null });
@@ -2247,6 +2257,8 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
2247
2257
  const autoHideDelay = options.autoHideDelay ?? inherited.autoHideDelay;
2248
2258
  const dragScroll = options.dragScroll ?? inherited.dragScroll;
2249
2259
  const clickScroll = options.clickScroll ?? inherited.clickScroll;
2260
+ const overflowX = options.overflowX ?? inherited.overflowX;
2261
+ const overflowY = options.overflowY ?? inherited.overflowY;
2250
2262
  const exclude = options.exclude ?? inherited.exclude;
2251
2263
  const resolved = (0, import_react3.useMemo)(
2252
2264
  () => resolveOverlayScrollbarBehavior({
@@ -2257,9 +2269,11 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
2257
2269
  autoHideDelay,
2258
2270
  dragScroll,
2259
2271
  clickScroll,
2272
+ overflowX,
2273
+ overflowY,
2260
2274
  exclude
2261
2275
  }),
2262
- [enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, exclude]
2276
+ [enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll, overflowX, overflowY, exclude]
2263
2277
  );
2264
2278
  (0, import_react3.useEffect)(() => {
2265
2279
  if (typeof window === "undefined") return;
@@ -2284,6 +2298,8 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
2284
2298
  resolved.autoHideDelay,
2285
2299
  resolved.dragScroll,
2286
2300
  resolved.clickScroll,
2301
+ resolved.overflowX,
2302
+ resolved.overflowY,
2287
2303
  resolved.exclude
2288
2304
  ]);
2289
2305
  }
@@ -16421,6 +16437,25 @@ Slider.displayName = "Slider";
16421
16437
  var import_lucide_react25 = require("lucide-react");
16422
16438
  var import_react21 = __toESM(require("react"), 1);
16423
16439
  var import_jsx_runtime48 = require("react/jsx-runtime");
16440
+ function resolveKeyboardEventElement(target) {
16441
+ if (target instanceof Element) return target;
16442
+ if (target instanceof Node) return target.parentElement;
16443
+ return null;
16444
+ }
16445
+ function isEditableKeyboardTarget(target) {
16446
+ const element = resolveKeyboardEventElement(target);
16447
+ if (!element) return false;
16448
+ if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {
16449
+ return true;
16450
+ }
16451
+ if (element instanceof HTMLElement && element.isContentEditable) {
16452
+ return true;
16453
+ }
16454
+ if (element.closest?.('[contenteditable=""],[contenteditable="true"],[contenteditable="plaintext-only"]') || element.closest?.('[role="textbox"]')) {
16455
+ return true;
16456
+ }
16457
+ return false;
16458
+ }
16424
16459
  function OverlayControls({
16425
16460
  mode,
16426
16461
  value,
@@ -16519,7 +16554,7 @@ function OverlayControls({
16519
16554
  import_react21.default.useEffect(() => {
16520
16555
  if (!enableKeyboardShortcuts) return;
16521
16556
  const handleKeyDown2 = (e) => {
16522
- if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) return;
16557
+ if (isEditableKeyboardTarget(e.target)) return;
16523
16558
  switch (e.key) {
16524
16559
  case " ":
16525
16560
  case "k":
@@ -20943,7 +20978,7 @@ var LoadingBar = ({
20943
20978
  // src/components/Table.tsx
20944
20979
  var import_react28 = __toESM(require("react"), 1);
20945
20980
  var import_jsx_runtime62 = require("react/jsx-runtime");
20946
- var TABLE_BASE_CLASS = "w-full caption-bottom text-sm";
20981
+ var TABLE_BASE_CLASS = "w-full border-collapse caption-bottom text-sm";
20947
20982
  var TABLE_CONTAINER_BASE_CLASS = [
20948
20983
  "relative w-full overflow-auto",
20949
20984
  "rounded-2xl md:rounded-3xl border border-border/50",
@@ -21378,6 +21413,7 @@ function DataTableHeader({
21378
21413
  const prevCol = prevCell?.column;
21379
21414
  const isAfterFixedLeft = prevCol?.fixed === "left";
21380
21415
  const showBorderLeft = columnDividers && cellIndex > 0 && !isAfterFixedLeft && !col.fixed;
21416
+ const isLastCell = cellIndex === row.length - 1;
21381
21417
  return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
21382
21418
  TableHead,
21383
21419
  {
@@ -21417,7 +21453,8 @@ function DataTableHeader({
21417
21453
  onAutoFitColumn?.(col.key);
21418
21454
  },
21419
21455
  className: cn(
21420
- "absolute inset-y-0 right-0 z-10 w-3 -mr-1",
21456
+ "absolute inset-y-0 right-0 z-10 w-3",
21457
+ !isLastCell && "-mr-1",
21421
21458
  "cursor-col-resize select-none bg-transparent",
21422
21459
  "after:absolute after:inset-y-2 after:right-0.8 after:w-px after:bg-border/0 after:transition-colors",
21423
21460
  "hover:after:bg-primary/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary"
@@ -22188,6 +22225,7 @@ function DataTable({
22188
22225
  storageKey,
22189
22226
  stickyHeader = true,
22190
22227
  maxHeight = 500,
22228
+ horizontalMode = "auto",
22191
22229
  overflowHidden = true,
22192
22230
  useOverlayScrollbar = false,
22193
22231
  enableHeaderAutoFit = true,
@@ -22261,6 +22299,10 @@ function DataTable({
22261
22299
  total
22262
22300
  });
22263
22301
  const { getStickyCellClass, getStickyColumnStyle, getStickyHeaderClass, getStickyHeaderCellStyle } = useStickyColumns(visibleColumns);
22302
+ const shouldForceHorizontalScroll = horizontalMode === "scroll";
22303
+ const shouldUseFixedLayout = horizontalMode !== "auto";
22304
+ const viewportOverflowXClass = horizontalMode === "fit" ? "overflow-x-hidden" : "overflow-x-auto";
22305
+ const overlayOverflowX = horizontalMode === "fit" ? "hidden" : "scroll";
22264
22306
  const getRowKey = (row, idx) => {
22265
22307
  if (!rowKey) return String(idx);
22266
22308
  if (typeof rowKey === "function") return String(rowKey(row));
@@ -22268,7 +22310,10 @@ function DataTable({
22268
22310
  };
22269
22311
  const viewportRef = import_react38.default.useRef(null);
22270
22312
  const tableRef = import_react38.default.useRef(null);
22271
- useOverlayScrollbarTarget(viewportRef, { enabled: useOverlayScrollbar });
22313
+ useOverlayScrollbarTarget(viewportRef, {
22314
+ enabled: useOverlayScrollbar,
22315
+ overflowX: overlayOverflowX
22316
+ });
22272
22317
  const autoFitColumn = import_react38.default.useCallback((columnKey) => {
22273
22318
  const tableElement = tableRef.current;
22274
22319
  if (!tableElement) return;
@@ -22330,7 +22375,7 @@ function DataTable({
22330
22375
  "div",
22331
22376
  {
22332
22377
  ref: viewportRef,
22333
- className: cn("w-full overflow-x-auto", stickyHeader && "overflow-y-auto"),
22378
+ className: cn("w-full", viewportOverflowXClass, stickyHeader && "overflow-y-auto"),
22334
22379
  style: stickyHeader ? { maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight } : void 0,
22335
22380
  children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
22336
22381
  Table,
@@ -22338,10 +22383,10 @@ function DataTable({
22338
22383
  ref: tableRef,
22339
22384
  disableContainer: true,
22340
22385
  className: cn(
22341
- "table-fixed",
22386
+ shouldUseFixedLayout ? "table-fixed" : "table-auto",
22342
22387
  stickyHeader && ["[&_thead]:sticky", "[&_thead]:top-0", "[&_thead]:z-20", "[&_thead]:shadow-[0_1px_3px_rgba(0,0,0,0.1)]"]
22343
22388
  ),
22344
- style: { minWidth: totalColumnsWidth > 0 ? `${totalColumnsWidth}px` : void 0 },
22389
+ style: { minWidth: shouldForceHorizontalScroll && totalColumnsWidth > 0 ? `${totalColumnsWidth}px` : void 0 },
22345
22390
  children: [
22346
22391
  /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
22347
22392
  DataTableHeader,