@pallasoft/ps-table-components 1.22.2 → 1.24.0

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.
Files changed (67) hide show
  1. package/dist/components/ps-data-table.d.ts +2 -1
  2. package/dist/components/ps-data-table.js +54 -15
  3. package/dist/components/ps-table-reorder-frame.js +15 -2
  4. package/dist/components/ps-table-reorder-handle.js +1 -1
  5. package/dist/components/ps-table-sort-header.js +1 -1
  6. package/dist/components/ps-table-sortable-row.d.ts +5 -1
  7. package/dist/components/ps-table-sortable-row.js +12 -4
  8. package/dist/constants/ps-table-drop-classes.d.ts +2 -0
  9. package/dist/constants/ps-table-drop-classes.js +8 -0
  10. package/dist/constants/ps-table-drop-placement.d.ts +6 -0
  11. package/dist/constants/ps-table-drop-placement.js +8 -0
  12. package/dist/constants/ps-table-pin-classes.d.ts +16 -0
  13. package/dist/constants/ps-table-pin-classes.js +19 -0
  14. package/dist/constants/table-breakpoint.d.ts +7 -0
  15. package/dist/constants/table-breakpoint.js +13 -0
  16. package/dist/esm/components/ps-data-table.js +55 -16
  17. package/dist/esm/components/ps-table-reorder-frame.js +15 -2
  18. package/dist/esm/components/ps-table-reorder-handle.js +1 -1
  19. package/dist/esm/components/ps-table-sort-header.js +1 -1
  20. package/dist/esm/components/ps-table-sortable-row.js +12 -4
  21. package/dist/esm/constants/ps-table-drop-classes.js +5 -0
  22. package/dist/esm/constants/ps-table-drop-placement.js +5 -0
  23. package/dist/esm/constants/ps-table-pin-classes.js +16 -0
  24. package/dist/esm/constants/table-breakpoint.js +10 -0
  25. package/dist/esm/hooks/use-ps-table-overflow.js +19 -0
  26. package/dist/esm/hooks/use-ps-table-reorder.js +89 -15
  27. package/dist/esm/index.js +10 -0
  28. package/dist/esm/interfaces/table-drop.js +1 -0
  29. package/dist/esm/interfaces/table-nesting-announcements.js +1 -0
  30. package/dist/esm/interfaces/table-overflow-edges.js +1 -0
  31. package/dist/esm/interfaces/table-pin-classes.js +1 -0
  32. package/dist/esm/interfaces/table-reorder-nesting-binding.js +1 -0
  33. package/dist/esm/interfaces/table-reorder-nesting.js +1 -0
  34. package/dist/esm/services/ps-table-column-size-service.js +7 -0
  35. package/dist/esm/services/ps-table-overflow-service.js +11 -0
  36. package/dist/esm/services/ps-table-pin-service.js +22 -0
  37. package/dist/esm/services/ps-table-reorder-service.js +38 -1
  38. package/dist/hooks/use-ps-table-overflow.d.ts +6 -0
  39. package/dist/hooks/use-ps-table-overflow.js +23 -0
  40. package/dist/hooks/use-ps-table-reorder.d.ts +6 -2
  41. package/dist/hooks/use-ps-table-reorder.js +87 -13
  42. package/dist/index.d.ts +10 -0
  43. package/dist/index.js +10 -0
  44. package/dist/interfaces/table-column.d.ts +5 -0
  45. package/dist/interfaces/table-drop.d.ts +5 -0
  46. package/dist/interfaces/table-drop.js +2 -0
  47. package/dist/interfaces/table-nesting-announcements.d.ts +5 -0
  48. package/dist/interfaces/table-nesting-announcements.js +2 -0
  49. package/dist/interfaces/table-overflow-edges.d.ts +4 -0
  50. package/dist/interfaces/table-overflow-edges.js +2 -0
  51. package/dist/interfaces/table-pin-classes.d.ts +5 -0
  52. package/dist/interfaces/table-pin-classes.js +2 -0
  53. package/dist/interfaces/table-reorder-nesting-binding.d.ts +8 -0
  54. package/dist/interfaces/table-reorder-nesting-binding.js +2 -0
  55. package/dist/interfaces/table-reorder-nesting.d.ts +8 -0
  56. package/dist/interfaces/table-reorder-nesting.js +2 -0
  57. package/dist/interfaces/table-reorder-row-props.d.ts +3 -0
  58. package/dist/interfaces/table-reorder.d.ts +4 -2
  59. package/dist/services/ps-table-column-size-service.d.ts +1 -0
  60. package/dist/services/ps-table-column-size-service.js +7 -0
  61. package/dist/services/ps-table-overflow-service.d.ts +6 -0
  62. package/dist/services/ps-table-overflow-service.js +15 -0
  63. package/dist/services/ps-table-pin-service.d.ts +5 -0
  64. package/dist/services/ps-table-pin-service.js +26 -0
  65. package/dist/services/ps-table-reorder-service.d.ts +11 -0
  66. package/dist/services/ps-table-reorder-service.js +38 -1
  67. package/package.json +1 -1
@@ -27,6 +27,7 @@ export interface PsDataTableProps<RowData> {
27
27
  onRowHover?: (row: RowData) => void;
28
28
  page?: number;
29
29
  pageSize?: number;
30
+ pinFirstColumn?: boolean;
30
31
  query?: PsTableQuery;
31
32
  renderExpandedRow?: (row: RowData) => ReactNode;
32
33
  reorder?: PsTableReorder<RowData>;
@@ -36,4 +37,4 @@ export interface PsDataTableProps<RowData> {
36
37
  toolbarActions?: ReactNode;
37
38
  totalRows?: number;
38
39
  }
39
- export declare const PsDataTable: <RowData>({ caption, className, columns, defaultSort, density, expandedRowIds, mobileLayout, getBulkActions, getRowId, getRowLabel, getSearchText, grouping, isLoading, isPending, layout, onPageChange, onQueryChange, onRowClick, onRowHover, page, pageSize, query, renderExpandedRow, reorder, rows, searchingLabel, searchPlaceholder, toolbarActions, totalRows, }: PsDataTableProps<RowData>) => import("react").JSX.Element;
40
+ export declare const PsDataTable: <RowData>({ caption, className, columns, defaultSort, density, expandedRowIds, mobileLayout, getBulkActions, getRowId, getRowLabel, getSearchText, grouping, isLoading, isPending, layout, onPageChange, onQueryChange, onRowClick, onRowHover, page, pageSize, pinFirstColumn, query, renderExpandedRow, reorder, rows, searchingLabel, searchPlaceholder, toolbarActions, totalRows, }: PsDataTableProps<RowData>) => import("react").JSX.Element;
@@ -42,13 +42,16 @@ const ps_input_components_1 = require("@pallasoft/ps-input-components");
42
42
  const ps_motion_components_1 = require("@pallasoft/ps-motion-components");
43
43
  const react_virtual_1 = require("@tanstack/react-virtual");
44
44
  const ps_table_control_classes_1 = require("../constants/ps-table-control-classes");
45
+ const table_breakpoint_1 = require("../constants/table-breakpoint");
45
46
  const table_config_1 = require("../constants/table-config");
46
47
  const use_ps_incremental_count_1 = require("../hooks/use-ps-incremental-count");
47
48
  const use_ps_scroll_anchor_1 = require("../hooks/use-ps-scroll-anchor");
49
+ const use_ps_table_overflow_1 = require("../hooks/use-ps-table-overflow");
48
50
  const use_ps_table_stream_status_1 = require("../hooks/use-ps-table-stream-status");
49
51
  const ps_table_cell_tooltip_service_1 = require("../services/ps-table-cell-tooltip-service");
50
52
  const ps_table_column_size_service_1 = require("../services/ps-table-column-size-service");
51
53
  const ps_table_group_service_1 = require("../services/ps-table-group-service");
54
+ const ps_table_pin_service_1 = require("../services/ps-table-pin-service");
52
55
  const ps_table_query_service_1 = require("../services/ps-table-query-service");
53
56
  const ps_table_reorder_service_1 = require("../services/ps-table-reorder-service");
54
57
  const ps_table_scroll_service_1 = require("../services/ps-table-scroll-service");
@@ -71,9 +74,9 @@ const densityClassNames = {
71
74
  head: 'px-5 py-3.5',
72
75
  },
73
76
  };
74
- const columnStyle = (column) => ({
75
- maxWidth: ps_table_column_size_service_1.PsTableColumnSizeService.maxWidthOf(column),
76
- minWidth: ps_table_column_size_service_1.PsTableColumnSizeService.minWidthOf(column),
77
+ const columnStyle = (column, fittedMinWidth) => ({
78
+ maxWidth: column.measure === undefined ? ps_table_column_size_service_1.PsTableColumnSizeService.maxWidthOf(column) : undefined,
79
+ minWidth: fittedMinWidth === undefined ? ps_table_column_size_service_1.PsTableColumnSizeService.minWidthOf(column) : fittedMinWidth,
77
80
  width: column.width,
78
81
  });
79
82
  const alignClassNames = {
@@ -81,7 +84,7 @@ const alignClassNames = {
81
84
  left: 'text-left',
82
85
  right: 'text-right tabular-nums',
83
86
  };
84
- const PsDataTable = ({ caption, className, columns, defaultSort, density = 'normal', expandedRowIds, mobileLayout = 'cards', getBulkActions, getRowId, getRowLabel, getSearchText, grouping, isLoading = false, isPending = false, layout = 'auto', onPageChange, onQueryChange, onRowClick, onRowHover, page, pageSize, query, renderExpandedRow, reorder, rows, searchingLabel = table_config_1.PsTableConfig.searchingLabel, searchPlaceholder = table_config_1.PsTableConfig.searchPlaceholder, toolbarActions, totalRows, }) => {
87
+ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'normal', expandedRowIds, mobileLayout = 'cards', getBulkActions, getRowId, getRowLabel, getSearchText, grouping, isLoading = false, isPending = false, layout = 'auto', onPageChange, onQueryChange, onRowClick, onRowHover, page, pageSize, pinFirstColumn = true, query, renderExpandedRow, reorder, rows, searchingLabel = table_config_1.PsTableConfig.searchingLabel, searchPlaceholder = table_config_1.PsTableConfig.searchPlaceholder, toolbarActions, totalRows, }) => {
85
88
  const containerRef = (0, react_1.useRef)(null);
86
89
  const [uncontrolledPage, setUncontrolledPage] = (0, react_1.useState)(1);
87
90
  const [uncontrolledQuery, setUncontrolledQuery] = (0, react_1.useState)(() => ps_table_query_service_1.PsTableQueryService.empty(defaultSort ? defaultSort : null));
@@ -92,6 +95,9 @@ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'norm
92
95
  const currentQuery = query ? query : uncontrolledQuery;
93
96
  const { filters, hiddenColumnIds, search, sort } = currentQuery;
94
97
  const visibleColumns = columns.filter((column) => !hiddenColumnIds.includes(column.id));
98
+ const fittedWidths = (0, react_1.useMemo)(() => new Map(columns
99
+ .filter((column) => column.measure !== undefined)
100
+ .map((column) => [column.id, ps_table_column_size_service_1.PsTableColumnSizeService.fittedMinWidthOf(column, rows)])), [columns, rows]);
95
101
  const updateQuery = (patch) => {
96
102
  const next = { ...currentQuery, ...patch };
97
103
  if (!query)
@@ -106,6 +112,9 @@ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'norm
106
112
  const hasToolbar = isSearchable || hasFilters || Boolean(toolbarActions);
107
113
  const isSelectable = Boolean(getBulkActions);
108
114
  const columnCount = visibleColumns.length + (isSelectable ? 1 : 0) + (reorder ? 1 : 0);
115
+ const pins = ps_table_pin_service_1.PsTablePinService.leading(pinFirstColumn, Boolean(reorder), isSelectable);
116
+ const placementOf = (column, columnIndex) => ps_design_system_1.PallasoftClassNameService.merge(column.hideBelow === undefined ? '' : table_breakpoint_1.PsTableHideBelowClasses[column.hideBelow], columnIndex === 0 ? pins.first : '', ps_table_pin_service_1.PsTablePinService.end(column.pinEnd === true));
117
+ const overflow = (0, use_ps_table_overflow_1.usePsTableOverflow)(`${visibleColumns.map((column) => column.id).join(',')}:${rows.length}`);
109
118
  const deferredSearch = (0, react_1.useDeferredValue)(search);
110
119
  const queriedRows = (0, react_1.useMemo)(() => isServerPaginated
111
120
  ? rows
@@ -175,23 +184,48 @@ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'norm
175
184
  safePage,
176
185
  toggledGroupKeys,
177
186
  ]);
187
+ const reorderKey = (0, react_1.useCallback)((row) => reorder && reorder.groupKey ? reorder.groupKey(row) : ps_table_reorder_service_1.PsTableReorderService.treeKey, [reorder]);
188
+ const nestingBinding = (0, react_1.useMemo)(() => {
189
+ if (reorder === undefined || reorder.nesting === undefined)
190
+ return undefined;
191
+ const { nesting } = reorder;
192
+ const find = (id) => visibleRows.find((candidate) => getRowId(candidate) === id);
193
+ return {
194
+ announcements: nesting.announcements,
195
+ canDrag: (id) => {
196
+ const row = find(id);
197
+ return row !== undefined && nesting.canDrag(row);
198
+ },
199
+ canDrop: (activeId, targetId, placement) => {
200
+ const active = find(activeId);
201
+ const target = find(targetId);
202
+ return (active !== undefined && target !== undefined && nesting.canDrop(active, target, placement));
203
+ },
204
+ onMove: (activeId, targetId, placement) => {
205
+ const active = find(activeId);
206
+ const target = find(targetId);
207
+ if (active !== undefined && target !== undefined)
208
+ nesting.onMove(active, target, placement);
209
+ },
210
+ };
211
+ }, [getRowId, reorder, visibleRows]);
178
212
  const reorderItems = (0, react_1.useMemo)(() => reorder
179
213
  ? visibleRows.map((row) => {
180
214
  const rowId = getRowId(row);
181
215
  const label = getRowLabel ? getRowLabel(row) : rowId;
182
216
  return {
183
- groupKey: reorder.groupKey(row),
217
+ groupKey: reorderKey(row),
184
218
  handleLabel: reorder.getHandleLabel(label),
185
219
  id: rowId,
186
220
  label,
187
221
  };
188
222
  })
189
- : [], [getRowId, getRowLabel, reorder, visibleRows]);
223
+ : [], [getRowId, getRowLabel, reorder, reorderKey, visibleRows]);
190
224
  const renderOverlayRow = (rowId) => {
191
225
  const row = visibleRows.find((candidate) => getRowId(candidate) === rowId);
192
226
  return row === undefined ? null : ((0, jsx_runtime_1.jsx)("table", { className: 'w-full table-fixed border-collapse bg-surface text-left', children: (0, jsx_runtime_1.jsx)("tbody", { children: renderRow(ps_table_reorder_service_1.PsTableReorderService.plain, row) }) }));
193
227
  };
194
- const renderReorder = (children) => reorder === undefined ? (children(ps_table_reorder_service_1.PsTableReorderService.plain)) : ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: children(ps_table_reorder_service_1.PsTableReorderService.plain), children: (0, jsx_runtime_1.jsx)(LazyReorderFrame, { announcements: reorder.announcements, enabled: reorder.enabled, instructions: reorder.instructions, items: reorderItems, onReorder: reorder.onReorder, renderOverlay: renderOverlayRow, children: children }) }));
228
+ const renderReorder = (children) => reorder === undefined ? (children(ps_table_reorder_service_1.PsTableReorderService.plain)) : ((0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: children(ps_table_reorder_service_1.PsTableReorderService.plain), children: (0, jsx_runtime_1.jsx)(LazyReorderFrame, { announcements: reorder.announcements, enabled: reorder.enabled, instructions: reorder.instructions, items: reorderItems, nesting: nestingBinding, onReorder: reorder.onReorder, renderOverlay: renderOverlayRow, children: children }) }));
195
229
  const changePage = (next) => {
196
230
  if (onPageChange) {
197
231
  onPageChange(next);
@@ -275,7 +309,11 @@ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'norm
275
309
  const rowLabel = getRowLabel ? getRowLabel(row) : rowId;
276
310
  const Row = api.Row;
277
311
  const rowExtras = api.isActive
278
- ? { ...api.rowProps(rowId), measureRef: virtualItem ? virtualizer.measureElement : undefined }
312
+ ? {
313
+ ...api.rowProps(rowId),
314
+ handleCellClassName: pins.reorder,
315
+ measureRef: virtualItem ? virtualizer.measureElement : undefined,
316
+ }
279
317
  : { ref: virtualItem ? virtualizer.measureElement : undefined };
280
318
  return ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(Row, { ...rowExtras, "data-index": virtualItem ? virtualItem.index : undefined, "aria-expanded": renderExpandedRow ? isExpanded : undefined, "aria-label": onRowClick ? rowLabel : undefined, className: ps_design_system_1.PallasoftClassNameService.merge('align-middle transition-colors', motion ? motion.className : '', onRowClick ? 'ps-focus-ring cursor-pointer hover:bg-mist/60' : 'hover:bg-mist/40', isExpanded ? 'bg-mist/40' : ''), onClick: onRowClick ? () => onRowClick(row) : undefined, onFocus: onRowHover ? () => onRowHover(row) : undefined, onPointerEnter: onRowHover ? () => onRowHover(row) : undefined, onKeyDown: onRowClick
281
319
  ? (event) => {
@@ -288,13 +326,14 @@ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'norm
288
326
  }
289
327
  : undefined, style: motion && motion.delayMs !== undefined
290
328
  ? { animationDelay: `${motion.delayMs}ms` }
291
- : undefined, tabIndex: onRowClick ? 0 : undefined, children: [reorder && !api.isActive ? (0, jsx_runtime_1.jsx)("td", { className: 'w-9 pl-3 pr-0' }) : null, isSelectable ? ((0, jsx_runtime_1.jsx)("td", { className: 'w-10 pl-4 pr-0', onClick: (event) => event.stopPropagation(), onKeyDown: (event) => event.stopPropagation(), children: (0, jsx_runtime_1.jsx)(ps_input_components_1.PsCheckbox, { isSelected: selectedIdSet.has(rowId), label: `Select ${rowLabel}`, onChange: () => toggleRow(rowId) }) })) : null, visibleColumns.map((column) => ((0, jsx_runtime_1.jsx)("td", { className: ps_design_system_1.PallasoftClassNameService.merge(densityClassNames[density].cell, alignClassNames[column.align !== null && column.align !== undefined ? column.align : 'left'], column.wrap ? '' : 'whitespace-nowrap', (layout === 'fixed' && !column.wrap) ||
292
- ps_table_column_size_service_1.PsTableColumnSizeService.maxWidthOf(column) !== undefined
329
+ : undefined, tabIndex: onRowClick ? 0 : undefined, children: [reorder && !api.isActive ? ((0, jsx_runtime_1.jsx)("td", { className: ps_design_system_1.PallasoftClassNameService.merge('w-9 min-w-9 pl-3 pr-0', pins.reorder) })) : null, isSelectable ? ((0, jsx_runtime_1.jsx)("td", { className: ps_design_system_1.PallasoftClassNameService.merge('w-10 min-w-10 pl-4 pr-0', pins.select), onClick: (event) => event.stopPropagation(), onKeyDown: (event) => event.stopPropagation(), children: (0, jsx_runtime_1.jsx)(ps_input_components_1.PsCheckbox, { isSelected: selectedIdSet.has(rowId), label: `Select ${rowLabel}`, onChange: () => toggleRow(rowId) }) })) : null, visibleColumns.map((column, columnIndex) => ((0, jsx_runtime_1.jsx)("td", { className: ps_design_system_1.PallasoftClassNameService.merge(densityClassNames[density].cell, placementOf(column, columnIndex), alignClassNames[column.align !== null && column.align !== undefined ? column.align : 'left'], column.wrap ? '' : 'whitespace-nowrap', column.measure === undefined &&
330
+ ((layout === 'fixed' && !column.wrap) ||
331
+ ps_table_column_size_service_1.PsTableColumnSizeService.maxWidthOf(column) !== undefined)
293
332
  ? 'truncate'
294
- : '', 'text-sm text-ink'), style: columnStyle(column), title: ps_table_cell_tooltip_service_1.PsTableCellTooltipService.forCell(column, row), children: column.render(row) }, column.id)))] }), renderExpandedRow ? ((0, jsx_runtime_1.jsx)("tr", { "aria-hidden": !isExpanded, className: isExpanded ? 'border-t-0' : 'border-0', children: (0, jsx_runtime_1.jsx)("td", { className: 'p-0', colSpan: columnCount, children: (0, jsx_runtime_1.jsx)(ps_motion_components_1.PsCollapse, { isOpen: isExpanded, children: (0, jsx_runtime_1.jsx)("div", { className: 'w-0 min-w-full border-l-2 border-primary bg-mist/40 px-4 py-4', children: renderExpandedRow(row) }) }) }) })) : null] }, rowId));
333
+ : '', 'text-sm text-ink'), style: columnStyle(column, fittedWidths.get(column.id)), title: ps_table_cell_tooltip_service_1.PsTableCellTooltipService.forCell(column, row), children: column.render(row) }, column.id)))] }), renderExpandedRow ? ((0, jsx_runtime_1.jsx)("tr", { "aria-hidden": !isExpanded, className: isExpanded ? 'border-t-0' : 'border-0', children: (0, jsx_runtime_1.jsx)("td", { className: 'p-0', colSpan: columnCount, children: (0, jsx_runtime_1.jsx)(ps_motion_components_1.PsCollapse, { isOpen: isExpanded, children: (0, jsx_runtime_1.jsx)("div", { className: 'w-0 min-w-full border-l-2 border-primary bg-mist/40 px-4 py-4', children: renderExpandedRow(row) }) }) }) })) : null] }, rowId));
295
334
  };
296
335
  const renderEntries = (api, entries) => reorder
297
- ? ps_table_reorder_service_1.PsTableReorderService.runs(entries, (entry) => reorder.groupKey(entry.row), (entry) => getRowId(entry.row)).map((run) => api.run(run.id, run.items.map((entry) => getRowId(entry.row)), run.items.map((entry) => renderRow(api, entry.row, entry.motion, entry.virtualItem))))
336
+ ? ps_table_reorder_service_1.PsTableReorderService.runs(entries, (entry) => reorderKey(entry.row), (entry) => getRowId(entry.row)).map((run) => api.run(run.id, run.items.map((entry) => getRowId(entry.row)), run.items.map((entry) => renderRow(api, entry.row, entry.motion, entry.virtualItem))))
298
337
  : entries.map((entry) => renderRow(api, entry.row, entry.motion, entry.virtualItem));
299
338
  if (isLoading)
300
339
  return ((0, jsx_runtime_1.jsx)(ps_core_components_1.PsSkeletonTable, { className: className, columns: visibleColumns.length, hasToolbar: hasToolbar, rows: table_config_1.PsTableConfig.skeletonRows }));
@@ -313,14 +352,14 @@ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'norm
313
352
  ? grouping.renderGroupSummary(group.rows)
314
353
  : undefined }), (0, jsx_runtime_1.jsx)(ps_motion_components_1.PsCollapse, { isOpen: isExpanded && !closingGroupKeys.includes(group.key), children: renderCardList(group.rows, null) })] }, `group-${group.key}`));
315
354
  })
316
- : renderCardList(shouldVirtualize ? visibleRows.slice(0, cards.count) : visibleRows, visibleRows.length === 0 && isSearching ? ((0, jsx_runtime_1.jsx)(ps_table_searching_state_1.PsTableSearchingState, { label: searchingLabel, skeletonRows: table_config_1.PsTableConfig.searchingSkeletonRows })) : visibleRows.length === 0 && isQueried ? ((0, jsx_runtime_1.jsxs)("div", { className: 'px-4 py-10 text-center', children: [(0, jsx_runtime_1.jsx)("p", { className: 'text-sm font-semibold text-ink', children: table_config_1.PsTableConfig.noMatchesTitle }), (0, jsx_runtime_1.jsx)("button", { className: ps_design_system_1.PallasoftClassNameService.merge(ps_table_control_classes_1.PsTableControlClasses.textButton, 'mt-2 text-primary'), onClick: clearFilters, type: 'button', children: "Clear search and filters" })] })) : null), !grouping && shouldVirtualize && cards.count < visibleRows.length ? ((0, jsx_runtime_1.jsx)("div", { "aria-hidden": 'true', className: 'h-px', ref: cards.sentinelRef })) : null] })) : null, (0, jsx_runtime_1.jsx)("div", { className: ps_design_system_1.PallasoftClassNameService.merge('ps-scrollbar overflow-x-auto overflow-y-hidden', mobileLayout === 'cards' ? 'hidden sm:block' : ''), children: renderReorder((api) => ((0, jsx_runtime_1.jsxs)("table", { className: ps_design_system_1.PallasoftClassNameService.merge('w-full border-collapse text-left', layout === 'fixed' ? 'table-fixed' : ''), children: [caption ? (0, jsx_runtime_1.jsx)("caption", { className: 'sr-only', children: caption }) : null, (0, jsx_runtime_1.jsx)("thead", { className: 'bg-mist/70 text-[0.68rem] font-semibold uppercase tracking-[0.18em] text-ink/45', children: (0, jsx_runtime_1.jsxs)("tr", { children: [reorder ? ((0, jsx_runtime_1.jsx)("th", { className: 'w-9 pl-3 pr-0', scope: 'col', children: reorder.enabled ? ((0, jsx_runtime_1.jsx)("span", { className: 'sr-only', children: reorder.columnLabel })) : reorder.disabledReason ? ((0, jsx_runtime_1.jsx)("span", { "aria-label": reorder.disabledReason, className: 'inline-flex cursor-help opacity-40', role: 'img', title: reorder.disabledReason, children: (0, jsx_runtime_1.jsx)(ps_core_components_1.PsDragGrip, {}) })) : null })) : null, isSelectable ? ((0, jsx_runtime_1.jsx)("th", { className: 'w-10 pl-4 pr-0', scope: 'col', children: (0, jsx_runtime_1.jsx)(ps_input_components_1.PsCheckbox, { isIndeterminate: !isPageSelected && pageIds.some((rowId) => selectedIdSet.has(rowId)), isSelected: isPageSelected, label: 'Select all rows on this page', onChange: togglePage }) })) : null, visibleColumns.map((column) => {
355
+ : renderCardList(shouldVirtualize ? visibleRows.slice(0, cards.count) : visibleRows, visibleRows.length === 0 && isSearching ? ((0, jsx_runtime_1.jsx)(ps_table_searching_state_1.PsTableSearchingState, { label: searchingLabel, skeletonRows: table_config_1.PsTableConfig.searchingSkeletonRows })) : visibleRows.length === 0 && isQueried ? ((0, jsx_runtime_1.jsxs)("div", { className: 'px-4 py-10 text-center', children: [(0, jsx_runtime_1.jsx)("p", { className: 'text-sm font-semibold text-ink', children: table_config_1.PsTableConfig.noMatchesTitle }), (0, jsx_runtime_1.jsx)("button", { className: ps_design_system_1.PallasoftClassNameService.merge(ps_table_control_classes_1.PsTableControlClasses.textButton, 'mt-2 text-primary'), onClick: clearFilters, type: 'button', children: "Clear search and filters" })] })) : null), !grouping && shouldVirtualize && cards.count < visibleRows.length ? ((0, jsx_runtime_1.jsx)("div", { "aria-hidden": 'true', className: 'h-px', ref: cards.sentinelRef })) : null] })) : null, (0, jsx_runtime_1.jsx)("div", { className: ps_design_system_1.PallasoftClassNameService.merge('ps-scrollbar overflow-x-auto overflow-y-hidden overscroll-x-contain', mobileLayout === 'cards' ? 'hidden sm:block' : ''), "data-overflow-end": overflow.edges.end, "data-overflow-start": overflow.edges.start, onScroll: overflow.update, ref: overflow.ref, children: renderReorder((api) => ((0, jsx_runtime_1.jsxs)("table", { className: ps_design_system_1.PallasoftClassNameService.merge('w-full border-collapse text-left', layout === 'fixed' ? 'table-fixed' : ''), children: [caption ? (0, jsx_runtime_1.jsx)("caption", { className: 'sr-only', children: caption }) : null, (0, jsx_runtime_1.jsx)("thead", { className: 'bg-mist/70 text-[0.68rem] font-semibold uppercase tracking-[0.18em] text-ink/45', children: (0, jsx_runtime_1.jsxs)("tr", { children: [reorder ? ((0, jsx_runtime_1.jsx)("th", { className: ps_design_system_1.PallasoftClassNameService.merge('w-9 min-w-9 pl-3 pr-0', pins.reorder), scope: 'col', children: reorder.enabled ? ((0, jsx_runtime_1.jsx)("span", { className: 'sr-only', children: reorder.columnLabel })) : reorder.disabledReason ? ((0, jsx_runtime_1.jsx)("span", { "aria-label": reorder.disabledReason, className: 'inline-flex cursor-help opacity-40', role: 'img', title: reorder.disabledReason, children: (0, jsx_runtime_1.jsx)(ps_core_components_1.PsDragGrip, {}) })) : null })) : null, isSelectable ? ((0, jsx_runtime_1.jsx)("th", { className: ps_design_system_1.PallasoftClassNameService.merge('w-10 min-w-10 pl-4 pr-0', pins.select), scope: 'col', children: (0, jsx_runtime_1.jsx)(ps_input_components_1.PsCheckbox, { isIndeterminate: !isPageSelected && pageIds.some((rowId) => selectedIdSet.has(rowId)), isSelected: isPageSelected, label: 'Select all rows on this page', onChange: togglePage }) })) : null, visibleColumns.map((column, columnIndex) => {
317
356
  const align = column.align !== null && column.align !== undefined ? column.align : 'left';
318
357
  const isSorted = sort !== null && sort.columnId === column.id;
319
358
  return ((0, jsx_runtime_1.jsx)("th", { "aria-sort": isSorted
320
359
  ? sort.direction
321
360
  : column.sortValue && isQueryable
322
361
  ? 'none'
323
- : undefined, className: ps_design_system_1.PallasoftClassNameService.merge(densityClassNames[density].head, alignClassNames[align], 'whitespace-nowrap'), scope: 'col', style: columnStyle(column), children: column.sortValue && isQueryable ? ((0, jsx_runtime_1.jsx)(ps_table_sort_header_1.PsTableSortHeader, { align: align, columnId: column.id, label: column.label, onSort: updateSort, sort: sort })) : (column.label) }, column.id));
362
+ : undefined, className: ps_design_system_1.PallasoftClassNameService.merge(densityClassNames[density].head, alignClassNames[align], placementOf(column, columnIndex), 'whitespace-nowrap'), scope: 'col', style: columnStyle(column, fittedWidths.get(column.id)), children: column.sortValue && isQueryable ? ((0, jsx_runtime_1.jsx)(ps_table_sort_header_1.PsTableSortHeader, { align: align, columnId: column.id, label: column.label, onSort: updateSort, sort: sort })) : (column.label) }, column.id));
324
363
  })] }) }), (0, jsx_runtime_1.jsxs)("tbody", { className: 'divide-y divide-line', ref: bodyRef, children: [visibleRows.length === 0 && isSearching ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsx)("td", { className: 'p-0', colSpan: columnCount, children: (0, jsx_runtime_1.jsx)(ps_table_searching_state_1.PsTableSearchingState, { label: searchingLabel, skeletonRows: table_config_1.PsTableConfig.searchingSkeletonRows }) }) })) : null, visibleRows.length === 0 && isQueried && !isSearching ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsxs)("td", { className: 'px-4 py-12 text-center', colSpan: columnCount, children: [(0, jsx_runtime_1.jsx)("p", { className: 'text-sm font-semibold text-ink', children: table_config_1.PsTableConfig.noMatchesTitle }), (0, jsx_runtime_1.jsx)("p", { className: 'mt-1 text-sm text-ink/55', children: table_config_1.PsTableConfig.noMatchesDescription }), (0, jsx_runtime_1.jsx)("button", { className: ps_design_system_1.PallasoftClassNameService.merge(ps_table_control_classes_1.PsTableControlClasses.textButton, 'mt-3 text-primary hover:underline'), onClick: clearFilters, type: 'button', children: "Clear search and filters" })] }) })) : null, grouping
325
364
  ? groups.map((group, groupIndex) => {
326
365
  const isExpanded = isGroupExpanded(group.key, groupIndex);
@@ -342,7 +381,7 @@ const PsDataTable = ({ caption, className, columns, defaultSort, density = 'norm
342
381
  }))),
343
382
  (0, jsx_runtime_1.jsx)("tr", { "aria-hidden": 'true', children: (0, jsx_runtime_1.jsx)("td", { className: 'p-0', colSpan: columnCount, style: { height: virtualBottom } }) }, 'virtual-bottom'),
344
383
  ]
345
- : renderEntries(api, visibleRows.map((row) => ({ row })))] }), hasFooter ? ((0, jsx_runtime_1.jsx)("tfoot", { className: 'border-t-2 border-line bg-mist/50 text-sm font-semibold text-ink', children: (0, jsx_runtime_1.jsxs)("tr", { children: [reorder ? (0, jsx_runtime_1.jsx)("td", {}) : null, isSelectable ? (0, jsx_runtime_1.jsx)("td", {}) : null, visibleColumns.map((column) => ((0, jsx_runtime_1.jsx)("td", { className: ps_design_system_1.PallasoftClassNameService.merge(densityClassNames[density].cell, alignClassNames[column.align !== null && column.align !== undefined
384
+ : renderEntries(api, visibleRows.map((row) => ({ row })))] }), hasFooter ? ((0, jsx_runtime_1.jsx)("tfoot", { className: 'border-t-2 border-line bg-mist/50 text-sm font-semibold text-ink', children: (0, jsx_runtime_1.jsxs)("tr", { children: [reorder ? (0, jsx_runtime_1.jsx)("td", { className: pins.reorder }) : null, isSelectable ? (0, jsx_runtime_1.jsx)("td", { className: pins.select }) : null, visibleColumns.map((column, columnIndex) => ((0, jsx_runtime_1.jsx)("td", { className: ps_design_system_1.PallasoftClassNameService.merge(densityClassNames[density].cell, placementOf(column, columnIndex), alignClassNames[column.align !== null && column.align !== undefined
346
385
  ? column.align
347
386
  : 'left'], 'whitespace-nowrap'), children: column.footer }, column.id)))] }) })) : null] }))) }), visibleRows.length > 0 && isSearching ? ((0, jsx_runtime_1.jsx)(ps_table_searching_state_1.PsTableSearchingState, { className: 'border-t border-line py-3', label: searchingLabel })) : null, pageSize && (!grouping || isServerPaginated) ? ((0, jsx_runtime_1.jsx)(ps_table_pagination_1.PsTablePagination, { isPartial: isPartial, loadedPageCount: pageCountOf(loadedRowCount), onPageChange: changePage, page: safePage, pageCount: pageCount, pageSize: pageSize, totalRows: rowCount })) : null] })] }));
348
387
  };
@@ -6,24 +6,37 @@ const core_1 = require("@dnd-kit/core");
6
6
  const sortable_1 = require("@dnd-kit/sortable");
7
7
  const ps_core_components_1 = require("@pallasoft/ps-core-components");
8
8
  const use_ps_table_reorder_1 = require("../hooks/use-ps-table-reorder");
9
+ const ps_table_reorder_service_1 = require("../services/ps-table-reorder-service");
9
10
  const ps_table_sortable_row_1 = require("./ps-table-sortable-row");
10
11
  const PsTableReorderFrame = ({ children, renderOverlay, ...input }) => {
11
- const { activeId, activeRunId, contextProps, placements } = (0, use_ps_table_reorder_1.usePsTableReorder)(input);
12
+ const { activeId, activeRunId, contextProps, drop, placements } = (0, use_ps_table_reorder_1.usePsTableReorder)(input);
12
13
  const itemById = new Map(input.items.map((item) => [item.id, item]));
14
+ const { nesting } = input;
13
15
  const api = {
14
16
  isActive: true,
15
17
  Row: ps_table_sortable_row_1.PsTableSortableRow,
16
18
  rowProps: (rowId) => {
17
19
  const item = itemById.get(rowId);
18
20
  const placement = placements.get(rowId);
21
+ if (nesting !== undefined)
22
+ return {
23
+ dropPlacement: drop !== null && drop.overId === rowId ? drop.placement : null,
24
+ handleLabel: item === undefined ? '' : item.handleLabel,
25
+ hasHandle: item !== undefined && input.enabled && nesting.canDrag(rowId),
26
+ isDisabled: !input.enabled,
27
+ isDropTarget: item !== undefined,
28
+ rowId,
29
+ };
19
30
  return {
31
+ dropPlacement: null,
20
32
  handleLabel: item === undefined ? '' : item.handleLabel,
21
33
  hasHandle: item !== undefined && input.enabled && placement !== undefined && placement.size > 1,
22
34
  isDisabled: activeRunId !== null && (placement === undefined || placement.runId !== activeRunId),
35
+ isDropTarget: false,
23
36
  rowId,
24
37
  };
25
38
  },
26
- run: (runId, ids, runChildren) => ((0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: ids, strategy: sortable_1.verticalListSortingStrategy, children: runChildren }, runId)),
39
+ run: (runId, ids, runChildren) => ((0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: ids, strategy: nesting === undefined ? sortable_1.verticalListSortingStrategy : ps_table_reorder_service_1.PsTableReorderService.still, children: runChildren }, runId)),
27
40
  };
28
41
  return ((0, jsx_runtime_1.jsxs)(core_1.DndContext, { ...contextProps, children: [children(api), (0, jsx_runtime_1.jsx)(ps_core_components_1.PsDragOverlay, { className: ps_core_components_1.PsDragClasses.lifted, frames: ps_core_components_1.PsDragListLiftFrames, children: activeId === null ? null : renderOverlay(activeId) })] }));
29
42
  };
@@ -4,5 +4,5 @@ exports.PsTableReorderHandle = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const ps_core_components_1 = require("@pallasoft/ps-core-components");
6
6
  const ps_design_system_1 = require("@pallasoft/ps-design-system");
7
- const PsTableReorderHandle = ({ activatorRef, className, label, ...buttonProps }) => ((0, jsx_runtime_1.jsx)("button", { ...buttonProps, "aria-label": label, className: ps_design_system_1.PallasoftClassNameService.merge('ps-focus-ring flex h-7 w-6 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-ink/40 transition-colors hover:bg-mist hover:text-ink active:cursor-grabbing', className), onClick: (event) => event.stopPropagation(), ref: activatorRef, title: label, type: 'button', children: (0, jsx_runtime_1.jsx)(ps_core_components_1.PsDragGrip, {}) }));
7
+ const PsTableReorderHandle = ({ activatorRef, className, label, ...buttonProps }) => ((0, jsx_runtime_1.jsx)("button", { ...buttonProps, "aria-label": label, className: ps_design_system_1.PallasoftClassNameService.merge('ps-focus-ring ps-touch-target relative flex h-7 w-6 shrink-0 cursor-grab touch-none items-center justify-center rounded-ps-control text-ink/40 transition-colors hover:bg-mist hover:text-ink active:cursor-grabbing', className), onClick: (event) => event.stopPropagation(), ref: activatorRef, title: label, type: 'button', children: (0, jsx_runtime_1.jsx)(ps_core_components_1.PsDragGrip, {}) }));
8
8
  exports.PsTableReorderHandle = PsTableReorderHandle;
@@ -13,6 +13,6 @@ const PsTableSortHeader = ({ align, columnId, label, onSort, sort, }) => {
13
13
  : ps_icons_1.PsIconKey.SortDescending;
14
14
  return ((0, jsx_runtime_1.jsxs)("button", { className: ps_design_system_1.PallasoftClassNameService.merge('ps-focus-ring group inline-flex items-center gap-1 rounded-ps-control uppercase tracking-[0.18em] transition-colors hover:text-ink', align === 'right' ? 'flex-row-reverse' : '', isSorted ? 'text-ink' : ''), onClick: () => onSort(columnId), type: 'button', children: [(0, jsx_runtime_1.jsx)("span", { children: label }), (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: ps_design_system_1.PallasoftClassNameService.merge('block h-3.5 w-3.5 shrink-0', isSorted
15
15
  ? 'text-primary'
16
- : 'opacity-0 group-hover:opacity-60 group-focus-visible:opacity-60'), iconKey: iconKey })] }));
16
+ : 'opacity-0 group-hover:opacity-60 group-focus-visible:opacity-60 [@media(hover:none)]:opacity-40'), iconKey: iconKey })] }));
17
17
  };
18
18
  exports.PsTableSortHeader = PsTableSortHeader;
@@ -1,9 +1,13 @@
1
1
  import type { ComponentProps } from 'react';
2
+ import type { PsTableDropPlacement } from '../constants/ps-table-drop-placement';
2
3
  export interface PsTableSortableRowProps extends Omit<ComponentProps<'tr'>, 'ref'> {
4
+ dropPlacement?: PsTableDropPlacement | null;
5
+ handleCellClassName?: string;
3
6
  handleLabel: string;
4
7
  hasHandle: boolean;
5
8
  isDisabled: boolean;
9
+ isDropTarget?: boolean;
6
10
  measureRef?: (element: HTMLTableRowElement | null) => void;
7
11
  rowId: string;
8
12
  }
9
- export declare const PsTableSortableRow: ({ children, className, handleLabel, hasHandle, isDisabled, measureRef, rowId, style, ...rowProps }: PsTableSortableRowProps) => import("react").JSX.Element;
13
+ export declare const PsTableSortableRow: ({ children, className, dropPlacement, handleCellClassName, handleLabel, hasHandle, isDisabled, isDropTarget, measureRef, rowId, style, ...rowProps }: PsTableSortableRowProps) => import("react").JSX.Element;
@@ -5,10 +5,18 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const sortable_1 = require("@dnd-kit/sortable");
6
6
  const utilities_1 = require("@dnd-kit/utilities");
7
7
  const ps_core_components_1 = require("@pallasoft/ps-core-components");
8
+ const ps_design_system_1 = require("@pallasoft/ps-design-system");
9
+ const ps_table_drop_classes_1 = require("../constants/ps-table-drop-classes");
8
10
  const ps_table_reorder_handle_1 = require("./ps-table-reorder-handle");
9
- const PsTableSortableRow = ({ children, className, handleLabel, hasHandle, isDisabled, measureRef, rowId, style, ...rowProps }) => {
10
- const { attributes, isDragging, listeners, setActivatorNodeRef, setNodeRef, transform, transition, } = (0, sortable_1.useSortable)({ disabled: isDisabled || !hasHandle, id: rowId });
11
- return ((0, jsx_runtime_1.jsxs)("tr", { ...rowProps, className: className, ref: (element) => {
11
+ const PsTableSortableRow = ({ children, className, dropPlacement = null, handleCellClassName, handleLabel, hasHandle, isDisabled, isDropTarget = false, measureRef, rowId, style, ...rowProps }) => {
12
+ const { attributes, isDragging, listeners, setActivatorNodeRef, setNodeRef, transform, transition, } = (0, sortable_1.useSortable)({
13
+ disabled: {
14
+ draggable: isDisabled || !hasHandle,
15
+ droppable: isDisabled || (!hasHandle && !isDropTarget),
16
+ },
17
+ id: rowId,
18
+ });
19
+ return ((0, jsx_runtime_1.jsxs)("tr", { ...rowProps, className: ps_design_system_1.PallasoftClassNameService.merge(className, dropPlacement === null ? '' : ps_table_drop_classes_1.PsTableDropClasses[dropPlacement]), ref: (element) => {
12
20
  setNodeRef(element);
13
21
  if (measureRef)
14
22
  measureRef(element);
@@ -17,6 +25,6 @@ const PsTableSortableRow = ({ children, className, handleLabel, hasHandle, isDis
17
25
  opacity: isDragging ? ps_core_components_1.PsDragConfig.placeholderOpacity : style?.opacity,
18
26
  transform: utilities_1.CSS.Translate.toString(transform),
19
27
  transition,
20
- }, children: [(0, jsx_runtime_1.jsx)("td", { className: 'w-9 pl-3 pr-0', onClick: (event) => event.stopPropagation(), children: hasHandle ? ((0, jsx_runtime_1.jsx)(ps_table_reorder_handle_1.PsTableReorderHandle, { ...attributes, ...listeners, activatorRef: setActivatorNodeRef, label: handleLabel })) : null }), children] }));
28
+ }, children: [(0, jsx_runtime_1.jsx)("td", { className: ps_design_system_1.PallasoftClassNameService.merge('w-9 min-w-9 pl-3 pr-0', handleCellClassName), onClick: (event) => event.stopPropagation(), children: hasHandle ? ((0, jsx_runtime_1.jsx)(ps_table_reorder_handle_1.PsTableReorderHandle, { ...attributes, ...listeners, activatorRef: setActivatorNodeRef, label: handleLabel })) : null }), children] }));
21
29
  };
22
30
  exports.PsTableSortableRow = PsTableSortableRow;
@@ -0,0 +1,2 @@
1
+ import { PsTableDropPlacement } from './ps-table-drop-placement';
2
+ export declare const PsTableDropClasses: Record<PsTableDropPlacement, string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsTableDropClasses = void 0;
4
+ exports.PsTableDropClasses = {
5
+ after: '[&>td]:shadow-[inset_0_-2px_0_0_rgb(var(--ps-color-primary-rgb))]',
6
+ before: '[&>td]:shadow-[inset_0_2px_0_0_rgb(var(--ps-color-primary-rgb))]',
7
+ into: 'bg-primary/10 [&>td]:shadow-[inset_0_0_0_2px_rgb(var(--ps-color-primary-rgb)/0.5)]',
8
+ };
@@ -0,0 +1,6 @@
1
+ export declare const PsTableDropPlacement: {
2
+ readonly after: "after";
3
+ readonly before: "before";
4
+ readonly into: "into";
5
+ };
6
+ export type PsTableDropPlacement = (typeof PsTableDropPlacement)[keyof typeof PsTableDropPlacement];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsTableDropPlacement = void 0;
4
+ exports.PsTableDropPlacement = {
5
+ after: 'after',
6
+ before: 'before',
7
+ into: 'into',
8
+ };
@@ -0,0 +1,16 @@
1
+ export declare const PsTablePinClasses: {
2
+ readonly cell: "ps-table-pin";
3
+ readonly edge: "ps-table-pin-start-edge";
4
+ readonly end: "ps-table-pin ps-table-pin-end right-0";
5
+ readonly first: {
6
+ readonly both: "left-[4.75rem]";
7
+ readonly none: "left-0";
8
+ readonly reorder: "left-9";
9
+ readonly select: "left-10";
10
+ };
11
+ readonly reorder: "left-0";
12
+ readonly select: {
13
+ readonly alone: "left-0";
14
+ readonly withReorder: "left-9";
15
+ };
16
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsTablePinClasses = void 0;
4
+ exports.PsTablePinClasses = {
5
+ cell: 'ps-table-pin',
6
+ edge: 'ps-table-pin-start-edge',
7
+ end: 'ps-table-pin ps-table-pin-end right-0',
8
+ first: {
9
+ both: 'left-[4.75rem]',
10
+ none: 'left-0',
11
+ reorder: 'left-9',
12
+ select: 'left-10',
13
+ },
14
+ reorder: 'left-0',
15
+ select: {
16
+ alone: 'left-0',
17
+ withReorder: 'left-9',
18
+ },
19
+ };
@@ -0,0 +1,7 @@
1
+ export declare const PsTableBreakpoint: {
2
+ readonly md: "md";
3
+ readonly lg: "lg";
4
+ readonly xl: "xl";
5
+ };
6
+ export type PsTableBreakpoint = (typeof PsTableBreakpoint)[keyof typeof PsTableBreakpoint];
7
+ export declare const PsTableHideBelowClasses: Record<PsTableBreakpoint, string>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsTableHideBelowClasses = exports.PsTableBreakpoint = void 0;
4
+ exports.PsTableBreakpoint = {
5
+ md: 'md',
6
+ lg: 'lg',
7
+ xl: 'xl',
8
+ };
9
+ exports.PsTableHideBelowClasses = {
10
+ md: 'hidden md:table-cell',
11
+ lg: 'hidden lg:table-cell',
12
+ xl: 'hidden xl:table-cell',
13
+ };