@l3mpire/ui 3.5.0 → 3.5.1

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/index.mjs CHANGED
@@ -7172,6 +7172,18 @@ function ColumnFilterPopover({
7172
7172
  ) })
7173
7173
  ] });
7174
7174
  }
7175
+ function pinnedStickyStyle(pinned, offset, zIndex) {
7176
+ if (pinned === "left") return { position: "sticky", left: offset, zIndex };
7177
+ if (pinned === "right") return { position: "sticky", right: offset, zIndex };
7178
+ return {};
7179
+ }
7180
+ function pinnedDividerClass(pinned) {
7181
+ if (pinned === "left")
7182
+ return "shadow-[1px_0_0_0_var(--core-border-main-primary)]";
7183
+ if (pinned === "right")
7184
+ return "shadow-[-1px_0_0_0_var(--core-border-main-primary)]";
7185
+ return "";
7186
+ }
7175
7187
  function DraggableHeaderCell({
7176
7188
  header,
7177
7189
  enableSorting,
@@ -7199,6 +7211,7 @@ function DraggableHeaderCell({
7199
7211
  disabled: !canDrag
7200
7212
  });
7201
7213
  const pinned = header.column.getIsPinned();
7214
+ const pinOffset = pinned === "left" ? header.column.getStart("left") : pinned === "right" ? header.column.getAfter("right") : void 0;
7202
7215
  const style = {
7203
7216
  width: enableColumnResizing ? header.getSize() : void 0,
7204
7217
  minWidth: enableColumnResizing ? header.column.columnDef.minSize : void 0,
@@ -7209,18 +7222,7 @@ function DraggableHeaderCell({
7209
7222
  // Pinning sticky positioning — must override the default `relative` we
7210
7223
  // also use for the resize handle. The resize handle is still absolutely
7211
7224
  // positioned because it references `right: 0` relative to the cell.
7212
- ...pinned === "left" ? {
7213
- position: "sticky",
7214
- left: header.column.getStart("left"),
7215
- zIndex: isDragging ? 5 : 3
7216
- } : pinned === "right" ? {
7217
- position: "sticky",
7218
- right: header.column.getAfter("right"),
7219
- zIndex: isDragging ? 5 : 3
7220
- } : {
7221
- position: "relative",
7222
- zIndex: isDragging ? 1 : void 0
7223
- }
7225
+ ...pinned ? pinnedStickyStyle(pinned, pinOffset, isDragging ? 5 : 3) : { position: "relative", zIndex: isDragging ? 1 : void 0 }
7224
7226
  };
7225
7227
  return /* @__PURE__ */ jsxs48(
7226
7228
  TableHead,
@@ -7234,8 +7236,7 @@ function DraggableHeaderCell({
7234
7236
  // Pinned columns keep their bg so the scrolling content can pass
7235
7237
  // under them. The default `bg-table-head-bg-default` is already on
7236
7238
  // <th> so we only need to add a divider on the boundary.
7237
- pinned === "left" && "shadow-[1px_0_0_0_var(--core-border-main-primary)]",
7238
- pinned === "right" && "shadow-[-1px_0_0_0_var(--core-border-main-primary)]"
7239
+ pinnedDividerClass(pinned)
7239
7240
  ),
7240
7241
  onClick: canSort ? header.column.getToggleSortingHandler() : void 0,
7241
7242
  onMouseEnter: () => setIsHovered(true),
@@ -7464,15 +7465,22 @@ function DataTableInner({
7464
7465
  }).filter(Boolean),
7465
7466
  [columns]
7466
7467
  );
7468
+ const lastSyncedColumnIdsRef = React54.useRef(null);
7467
7469
  React54.useEffect(() => {
7468
7470
  if (!enableColumnDrag) return;
7471
+ const signature = allColumnIds.join(" ");
7472
+ if (signature === lastSyncedColumnIdsRef.current) return;
7473
+ lastSyncedColumnIdsRef.current = signature;
7469
7474
  if (columnOrder.length === 0) {
7470
7475
  setColumnOrder(allColumnIds);
7471
7476
  return;
7472
7477
  }
7473
- const missing = allColumnIds.filter((id) => !columnOrder.includes(id));
7474
- if (missing.length > 0) {
7475
- setColumnOrder([...columnOrder, ...missing]);
7478
+ const pruned = columnOrder.filter((id) => allColumnIds.includes(id));
7479
+ const missing = allColumnIds.filter((id) => !pruned.includes(id));
7480
+ const next = [...pruned, ...missing];
7481
+ const changed = next.length !== columnOrder.length || next.some((id, i) => id !== columnOrder[i]);
7482
+ if (changed) {
7483
+ setColumnOrder(next);
7476
7484
  }
7477
7485
  }, [enableColumnDrag, columnOrder, allColumnIds, setColumnOrder]);
7478
7486
  const table = useReactTable({
@@ -7589,6 +7597,16 @@ function DataTableInner({
7589
7597
  return vars;
7590
7598
  }, [enableColumnResizing, table.getState().columnSizing]);
7591
7599
  const totalSize = enableColumnResizing ? table.getTotalSize() : void 0;
7600
+ const pinnedOffsets = React54.useMemo(() => {
7601
+ const map = /* @__PURE__ */ new Map();
7602
+ for (const col of table.getVisibleLeafColumns()) {
7603
+ const p = col.getIsPinned();
7604
+ if (p === "left") map.set(col.id, { side: "left", offset: col.getStart("left") });
7605
+ else if (p === "right")
7606
+ map.set(col.id, { side: "right", offset: col.getAfter("right") });
7607
+ }
7608
+ return map;
7609
+ }, [table, table.getState().columnPinning, table.getState().columnSizing]);
7592
7610
  const tableContent = /* @__PURE__ */ jsxs48("div", { className: cn("w-full", className), style: columnSizeVars, children: [
7593
7611
  /* @__PURE__ */ jsxs48(
7594
7612
  Table,
@@ -7664,17 +7682,10 @@ function DataTableInner({
7664
7682
  "data-state": row.getIsSelected() ? "selected" : void 0,
7665
7683
  children: row.getVisibleCells().map((cell) => {
7666
7684
  const cellPinned = cell.column.getIsPinned();
7685
+ const pin = cellPinned ? pinnedOffsets.get(cell.column.id) : void 0;
7667
7686
  const cellStyle = {
7668
7687
  ...enableColumnResizing ? { width: `var(--col-${cell.column.id}-size)` } : {},
7669
- ...cellPinned === "left" ? {
7670
- position: "sticky",
7671
- left: cell.column.getStart("left"),
7672
- zIndex: 2
7673
- } : cellPinned === "right" ? {
7674
- position: "sticky",
7675
- right: cell.column.getAfter("right"),
7676
- zIndex: 2
7677
- } : {}
7688
+ ...pinnedStickyStyle(cellPinned, pin?.offset, 2)
7678
7689
  };
7679
7690
  return /* @__PURE__ */ jsx54(
7680
7691
  TableCell,
@@ -7685,8 +7696,8 @@ function DataTableInner({
7685
7696
  enableColumnResizing && "truncate",
7686
7697
  // Pinned cells need an opaque background so scrolled
7687
7698
  // content does not show through.
7688
- cellPinned === "left" && "bg-table-row-bg-default group-hover/row:bg-table-row-bg-hover data-[state=selected]:bg-table-row-bg-selected shadow-[1px_0_0_0_var(--core-border-main-primary)]",
7689
- cellPinned === "right" && "bg-table-row-bg-default group-hover/row:bg-table-row-bg-hover data-[state=selected]:bg-table-row-bg-selected shadow-[-1px_0_0_0_var(--core-border-main-primary)]"
7699
+ cellPinned && "bg-table-row-bg-default group-hover/row:bg-table-row-bg-hover data-[state=selected]:bg-table-row-bg-selected",
7700
+ pinnedDividerClass(cellPinned)
7690
7701
  ),
7691
7702
  children: flexRender(
7692
7703
  cell.column.columnDef.cell,