@snack-uikit/table 0.29.0 → 0.30.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 0.30.0 (2025-02-26)
7
+
8
+
9
+ ### Features
10
+
11
+ * **PDS-1487:** freeze columns size on resize ([f5f5694](https://github.com/cloud-ru-tech/snack-uikit/commit/f5f56948a5e0ba42f071a66e2de225465f67e980))
12
+
13
+
14
+
15
+
16
+
6
17
  # 0.29.0 (2025-02-25)
7
18
 
8
19
 
@@ -229,10 +229,17 @@ function Table(_a) {
229
229
  }, [loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table, enableSelectPinned]);
230
230
  const columnSizeVarsRef = (0, react_1.useRef)();
231
231
  const headers = table.getFlatHeaders();
232
- const columnSizeVars = (0, react_1.useMemo)(() => {
232
+ const columnSizes = (0, react_1.useMemo)(() => {
233
233
  var _a;
234
234
  const originalColumnDefs = table._getColumnDefs();
235
- const colSizes = {};
235
+ const vars = {};
236
+ const realSizes = {};
237
+ const resizedColumnIndex = headers.findIndex(_ref => {
238
+ let {
239
+ column
240
+ } = _ref;
241
+ return column.getIsResizing();
242
+ });
236
243
  for (let i = 0; i < headers.length; i++) {
237
244
  const header = headers[i];
238
245
  const {
@@ -241,8 +248,8 @@ function Table(_a) {
241
248
  } = (0, utils_3.getColumnStyleVars)(header.id);
242
249
  const originalColDef = originalColumnDefs.find(col => (0, helperComponents_1.getColumnId)(header) === col.id);
243
250
  if (header.id === 'snack_predefined_statusColumn' && !(originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.header) && !(originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.enableSorting)) {
244
- colSizes[sizeKey] = 'var(--size-table-cell-status-indicator-horizontal)';
245
- colSizes[flexKey] = '100%';
251
+ vars[sizeKey] = 'var(--size-table-cell-status-indicator-horizontal)';
252
+ vars[flexKey] = '100%';
246
253
  } else {
247
254
  const originalColumnDefSize = originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.size;
248
255
  let initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
@@ -261,12 +268,9 @@ function Table(_a) {
261
268
  if (header.column.getCanResize()) {
262
269
  const currentSize = header.getSize();
263
270
  const colDefSize = header.column.columnDef.size;
264
- size = currentSize === colDefSize ? initSize : `${currentSize}px`;
265
- if (prevSize === '100%' && currentSize !== colDefSize) {
266
- const realSize = (0, utils_3.getCurrentlyConfiguredHeaderWidth)(header.id);
267
- table.setColumnSizing(old => Object.assign(Object.assign({}, old), {
268
- [header.id]: realSize
269
- }));
271
+ if (currentSize !== colDefSize || i < resizedColumnIndex && prevSize === '100%') {
272
+ const realSize = prevSize === '100%' ? (0, utils_3.getCurrentlyConfiguredHeaderWidth)(header.id) : currentSize;
273
+ realSizes[header.id] = realSize;
270
274
  size = `${realSize}px`;
271
275
  }
272
276
  }
@@ -277,11 +281,14 @@ function Table(_a) {
277
281
  size
278
282
  });
279
283
  }
280
- colSizes[sizeKey] = size;
281
- colSizes[flexKey] = size === '100%' ? 'unset' : '0';
284
+ vars[sizeKey] = size;
285
+ vars[flexKey] = size === '100%' ? 'unset' : '0';
282
286
  }
283
287
  }
284
- return colSizes;
288
+ return {
289
+ vars,
290
+ realSizes
291
+ };
285
292
  /*
286
293
  effect must be called only on columnSizingInfo.isResizingColumn changes
287
294
  to reduce unnecessary recalculations
@@ -291,8 +298,11 @@ function Table(_a) {
291
298
  // eslint-disable-next-line react-hooks/exhaustive-deps
292
299
  }, [table.getState().columnSizingInfo.isResizingColumn, headers, table.getTotalSize()]);
293
300
  (0, react_1.useEffect)(() => {
294
- columnSizeVarsRef.current = columnSizeVars;
295
- }, [columnSizeVars]);
301
+ if (Object.keys(columnSizes.realSizes).length) {
302
+ table.setColumnSizing(old => Object.assign(Object.assign({}, old), columnSizes.realSizes));
303
+ }
304
+ columnSizeVarsRef.current = columnSizes.vars;
305
+ }, [columnSizes, table]);
296
306
  const tableRows = table.getRowModel().rows;
297
307
  const tableCenterRows = table.getCenterRows();
298
308
  const tableFilteredRows = table.getFilteredRowModel().rows;
@@ -374,7 +384,7 @@ function Table(_a) {
374
384
  ref: scrollContainerRef,
375
385
  children: [(0, jsx_runtime_1.jsx)("div", {
376
386
  className: styles_module_scss_1.default.tableContent,
377
- style: columnSizeVars,
387
+ style: columnSizes.vars,
378
388
  children: (0, jsx_runtime_1.jsx)(helperComponents_1.TableContext.Provider, {
379
389
  value: {
380
390
  table
@@ -12,12 +12,15 @@ function getCurrentlyConfiguredHeaderWidth(id) {
12
12
  if ((0, utils_1.isBrowser)()) {
13
13
  const cell = document.querySelector(`[data-header-id="${id}"]`);
14
14
  const resizeHandler = cell === null || cell === void 0 ? void 0 : cell.querySelector('[data-test-id="table__header-cell-resize-handle-moving-part"]');
15
- if (cell && resizeHandler) {
15
+ if (cell) {
16
16
  const {
17
17
  width
18
18
  } = cell.getBoundingClientRect();
19
- const offset = parseInt(resizeHandler.style.getPropertyValue('--offset'));
20
- return width + offset;
19
+ if (resizeHandler) {
20
+ const offset = parseInt(resizeHandler.style.getPropertyValue('--offset'));
21
+ return width + offset;
22
+ }
23
+ return width;
21
24
  }
22
25
  }
23
26
  return 0;
@@ -155,17 +155,19 @@ export function Table(_a) {
155
155
  }, [loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table, enableSelectPinned]);
156
156
  const columnSizeVarsRef = useRef();
157
157
  const headers = table.getFlatHeaders();
158
- const columnSizeVars = useMemo(() => {
158
+ const columnSizes = useMemo(() => {
159
159
  var _a;
160
160
  const originalColumnDefs = table._getColumnDefs();
161
- const colSizes = {};
161
+ const vars = {};
162
+ const realSizes = {};
163
+ const resizedColumnIndex = headers.findIndex(({ column }) => column.getIsResizing());
162
164
  for (let i = 0; i < headers.length; i++) {
163
165
  const header = headers[i];
164
166
  const { sizeKey, flexKey } = getColumnStyleVars(header.id);
165
167
  const originalColDef = originalColumnDefs.find(col => getColumnId(header) === col.id);
166
168
  if (header.id === 'snack_predefined_statusColumn' && !(originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.header) && !(originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.enableSorting)) {
167
- colSizes[sizeKey] = 'var(--size-table-cell-status-indicator-horizontal)';
168
- colSizes[flexKey] = '100%';
169
+ vars[sizeKey] = 'var(--size-table-cell-status-indicator-horizontal)';
170
+ vars[flexKey] = '100%';
169
171
  }
170
172
  else {
171
173
  const originalColumnDefSize = originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.size;
@@ -182,21 +184,20 @@ export function Table(_a) {
182
184
  if (header.column.getCanResize()) {
183
185
  const currentSize = header.getSize();
184
186
  const colDefSize = header.column.columnDef.size;
185
- size = currentSize === colDefSize ? initSize : `${currentSize}px`;
186
- if (prevSize === '100%' && currentSize !== colDefSize) {
187
- const realSize = getCurrentlyConfiguredHeaderWidth(header.id);
188
- table.setColumnSizing(old => (Object.assign(Object.assign({}, old), { [header.id]: realSize })));
187
+ if (currentSize !== colDefSize || (i < resizedColumnIndex && prevSize === '100%')) {
188
+ const realSize = prevSize === '100%' ? getCurrentlyConfiguredHeaderWidth(header.id) : currentSize;
189
+ realSizes[header.id] = realSize;
189
190
  size = `${realSize}px`;
190
191
  }
191
192
  }
192
193
  if (isResizeSavedToStore) {
193
194
  saveStateToLocalStorage({ id: savedState.id, columnId: header.id, size });
194
195
  }
195
- colSizes[sizeKey] = size;
196
- colSizes[flexKey] = size === '100%' ? 'unset' : '0';
196
+ vars[sizeKey] = size;
197
+ vars[flexKey] = size === '100%' ? 'unset' : '0';
197
198
  }
198
199
  }
199
- return colSizes;
200
+ return { vars, realSizes };
200
201
  /*
201
202
  effect must be called only on columnSizingInfo.isResizingColumn changes
202
203
  to reduce unnecessary recalculations
@@ -208,8 +209,11 @@ export function Table(_a) {
208
209
  // eslint-disable-next-line react-hooks/exhaustive-deps
209
210
  }, [table.getState().columnSizingInfo.isResizingColumn, headers, table.getTotalSize()]);
210
211
  useEffect(() => {
211
- columnSizeVarsRef.current = columnSizeVars;
212
- }, [columnSizeVars]);
212
+ if (Object.keys(columnSizes.realSizes).length) {
213
+ table.setColumnSizing(old => (Object.assign(Object.assign({}, old), columnSizes.realSizes)));
214
+ }
215
+ columnSizeVarsRef.current = columnSizes.vars;
216
+ }, [columnSizes, table]);
213
217
  const tableRows = table.getRowModel().rows;
214
218
  const tableCenterRows = table.getCenterRows();
215
219
  const tableFilteredRows = table.getFilteredRowModel().rows;
@@ -245,7 +249,7 @@ export function Table(_a) {
245
249
  onChange: onGlobalFilterChange,
246
250
  loading: search === null || search === void 0 ? void 0 : search.loading,
247
251
  placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || t('searchPlaceholder'),
248
- }, className: styles.toolbar, onRefresh: onRefresh ? handleOnRefresh : undefined, bulkActions: bulkActions, selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single', checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected(), onCheck: enableSelection ? handleOnToolbarCheck : undefined, outline: outline, after: toolbarAfter || exportSettings ? (_jsxs(_Fragment, { children: [toolbarAfter, exportSettings && (_jsx(ExportButton, { settings: exportSettings, columnDefinitions: columnDefinitions, data: data, topRows: filteredTopRows, centerRows: centerRows }))] })) : undefined, moreActions: moreActions, filterRow: columnFilters, "data-test-id": TEST_IDS.toolbar }) })), _jsx("div", { className: styles.scrollWrapper, "data-outline": outline || undefined, children: _jsxs(Scroll, { size: 's', className: styles.table, ref: scrollContainerRef, children: [_jsx("div", { className: styles.tableContent, style: columnSizeVars, children: _jsx(TableContext.Provider, { value: { table }, children: loading ? (_jsxs(SkeletonContextProvider, { loading: true, children: [_jsx(HeaderRow, {}), loadingTableRows.map(row => (_jsx(BodyRow, { row: row }, row.id)))] })) : (_jsxs(_Fragment, { children: [centerRows.length || filteredTopRows.length ? _jsx(HeaderRow, {}) : null, filteredTopRows.length ? (_jsx("div", { className: styles.topRowWrapper, children: filteredTopRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick }, row.id))) })) : null, centerRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick }, row.id))), _jsx(TableEmptyState, { emptyStates: emptyStates, dataError: dataError, dataFiltered: dataFiltered || Boolean(table.getState().globalFilter), tableRowsLength: tableRows.length + filteredTopRows.length })] })) }) }), _jsx("div", { className: styles.scrollStub, ref: scrollRef })] }) }), !suppressPagination && (_jsx(TablePagination, { table: table, options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options, optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel, pageCount: pageCount, optionsRender: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsRender }))] })) }));
252
+ }, className: styles.toolbar, onRefresh: onRefresh ? handleOnRefresh : undefined, bulkActions: bulkActions, selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single', checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected(), onCheck: enableSelection ? handleOnToolbarCheck : undefined, outline: outline, after: toolbarAfter || exportSettings ? (_jsxs(_Fragment, { children: [toolbarAfter, exportSettings && (_jsx(ExportButton, { settings: exportSettings, columnDefinitions: columnDefinitions, data: data, topRows: filteredTopRows, centerRows: centerRows }))] })) : undefined, moreActions: moreActions, filterRow: columnFilters, "data-test-id": TEST_IDS.toolbar }) })), _jsx("div", { className: styles.scrollWrapper, "data-outline": outline || undefined, children: _jsxs(Scroll, { size: 's', className: styles.table, ref: scrollContainerRef, children: [_jsx("div", { className: styles.tableContent, style: columnSizes.vars, children: _jsx(TableContext.Provider, { value: { table }, children: loading ? (_jsxs(SkeletonContextProvider, { loading: true, children: [_jsx(HeaderRow, {}), loadingTableRows.map(row => (_jsx(BodyRow, { row: row }, row.id)))] })) : (_jsxs(_Fragment, { children: [centerRows.length || filteredTopRows.length ? _jsx(HeaderRow, {}) : null, filteredTopRows.length ? (_jsx("div", { className: styles.topRowWrapper, children: filteredTopRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick }, row.id))) })) : null, centerRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick }, row.id))), _jsx(TableEmptyState, { emptyStates: emptyStates, dataError: dataError, dataFiltered: dataFiltered || Boolean(table.getState().globalFilter), tableRowsLength: tableRows.length + filteredTopRows.length })] })) }) }), _jsx("div", { className: styles.scrollStub, ref: scrollRef })] }) }), !suppressPagination && (_jsx(TablePagination, { table: table, options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options, optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel, pageCount: pageCount, optionsRender: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsRender }))] })) }));
249
253
  }
250
254
  Table.getStatusColumnDef = getStatusColumnDef;
251
255
  Table.statusAppearances = STATUS_APPEARANCE;
@@ -3,10 +3,13 @@ export function getCurrentlyConfiguredHeaderWidth(id) {
3
3
  if (isBrowser()) {
4
4
  const cell = document.querySelector(`[data-header-id="${id}"]`);
5
5
  const resizeHandler = cell === null || cell === void 0 ? void 0 : cell.querySelector('[data-test-id="table__header-cell-resize-handle-moving-part"]');
6
- if (cell && resizeHandler) {
6
+ if (cell) {
7
7
  const { width } = cell.getBoundingClientRect();
8
- const offset = parseInt(resizeHandler.style.getPropertyValue('--offset'));
9
- return width + offset;
8
+ if (resizeHandler) {
9
+ const offset = parseInt(resizeHandler.style.getPropertyValue('--offset'));
10
+ return width + offset;
11
+ }
12
+ return width;
10
13
  }
11
14
  }
12
15
  return 0;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Table",
7
- "version": "0.29.0",
7
+ "version": "0.30.0",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -61,5 +61,5 @@
61
61
  "peerDependencies": {
62
62
  "@snack-uikit/locale": "*"
63
63
  },
64
- "gitHead": "59426d0dd21ec9b22909d8350ca1d988665b4215"
64
+ "gitHead": "afb93f86dbab6039f4c267a9d0e85350b59053c5"
65
65
  }
@@ -256,9 +256,11 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
256
256
  const columnSizeVarsRef = useRef<Record<string, string>>();
257
257
  const headers = table.getFlatHeaders();
258
258
 
259
- const columnSizeVars = useMemo(() => {
259
+ const columnSizes = useMemo(() => {
260
260
  const originalColumnDefs = table._getColumnDefs();
261
- const colSizes: Record<string, string> = {};
261
+ const vars: Record<string, string> = {};
262
+ const realSizes: Record<string, number> = {};
263
+ const resizedColumnIndex = headers.findIndex(({ column }) => column.getIsResizing());
262
264
 
263
265
  for (let i = 0; i < headers.length; i++) {
264
266
  const header = headers[i];
@@ -267,8 +269,8 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
267
269
  const originalColDef = originalColumnDefs.find(col => getColumnId(header) === col.id);
268
270
 
269
271
  if (header.id === 'snack_predefined_statusColumn' && !originalColDef?.header && !originalColDef?.enableSorting) {
270
- colSizes[sizeKey] = 'var(--size-table-cell-status-indicator-horizontal)';
271
- colSizes[flexKey] = '100%';
272
+ vars[sizeKey] = 'var(--size-table-cell-status-indicator-horizontal)';
273
+ vars[flexKey] = '100%';
272
274
  } else {
273
275
  const originalColumnDefSize = originalColDef?.size;
274
276
  let initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
@@ -289,12 +291,9 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
289
291
  const currentSize = header.getSize();
290
292
  const colDefSize = header.column.columnDef.size;
291
293
 
292
- size = currentSize === colDefSize ? initSize : `${currentSize}px`;
293
-
294
- if (prevSize === '100%' && currentSize !== colDefSize) {
295
- const realSize = getCurrentlyConfiguredHeaderWidth(header.id);
296
- table.setColumnSizing(old => ({ ...old, [header.id]: realSize }));
297
-
294
+ if (currentSize !== colDefSize || (i < resizedColumnIndex && prevSize === '100%')) {
295
+ const realSize = prevSize === '100%' ? getCurrentlyConfiguredHeaderWidth(header.id) : currentSize;
296
+ realSizes[header.id] = realSize;
298
297
  size = `${realSize}px`;
299
298
  }
300
299
  }
@@ -303,12 +302,12 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
303
302
  saveStateToLocalStorage({ id: savedState.id, columnId: header.id, size });
304
303
  }
305
304
 
306
- colSizes[sizeKey] = size;
307
- colSizes[flexKey] = size === '100%' ? 'unset' : '0';
305
+ vars[sizeKey] = size;
306
+ vars[flexKey] = size === '100%' ? 'unset' : '0';
308
307
  }
309
308
  }
310
309
 
311
- return colSizes;
310
+ return { vars, realSizes };
312
311
  /*
313
312
  effect must be called only on columnSizingInfo.isResizingColumn changes
314
313
  to reduce unnecessary recalculations
@@ -321,8 +320,12 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
321
320
  }, [table.getState().columnSizingInfo.isResizingColumn, headers, table.getTotalSize()]);
322
321
 
323
322
  useEffect(() => {
324
- columnSizeVarsRef.current = columnSizeVars;
325
- }, [columnSizeVars]);
323
+ if (Object.keys(columnSizes.realSizes).length) {
324
+ table.setColumnSizing(old => ({ ...old, ...columnSizes.realSizes }));
325
+ }
326
+
327
+ columnSizeVarsRef.current = columnSizes.vars;
328
+ }, [columnSizes, table]);
326
329
 
327
330
  const tableRows = table.getRowModel().rows;
328
331
  const tableCenterRows = table.getCenterRows();
@@ -413,7 +416,7 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
413
416
 
414
417
  <div className={styles.scrollWrapper} data-outline={outline || undefined}>
415
418
  <Scroll size='s' className={styles.table} ref={scrollContainerRef}>
416
- <div className={styles.tableContent} style={columnSizeVars}>
419
+ <div className={styles.tableContent} style={columnSizes.vars}>
417
420
  <TableContext.Provider value={{ table }}>
418
421
  {loading ? (
419
422
  <SkeletonContextProvider loading>
@@ -7,10 +7,15 @@ export function getCurrentlyConfiguredHeaderWidth(id: string): number {
7
7
  '[data-test-id="table__header-cell-resize-handle-moving-part"]',
8
8
  );
9
9
 
10
- if (cell && resizeHandler) {
10
+ if (cell) {
11
11
  const { width } = cell.getBoundingClientRect();
12
- const offset = parseInt(resizeHandler.style.getPropertyValue('--offset'));
13
- return width + offset;
12
+
13
+ if (resizeHandler) {
14
+ const offset = parseInt(resizeHandler.style.getPropertyValue('--offset'));
15
+ return width + offset;
16
+ }
17
+
18
+ return width;
14
19
  }
15
20
  }
16
21
 
@@ -58,7 +58,7 @@
58
58
  left: 0;
59
59
  transform: translateX(-50%);
60
60
 
61
- width: calc(100% + styles-tokens-table.$dimension-4m);
61
+ width: calc(100% + #{styles-tokens-table.$dimension-4m});
62
62
  height: 100%;
63
63
  }
64
64
  }
@@ -86,7 +86,7 @@
86
86
  left: 50%;
87
87
  transform: translateX(-50%);
88
88
 
89
- width: calc(100% - styles-tokens-table.$space-table-head-separator-padding * 2);
89
+ width: calc(100% - #{styles-tokens-table.$space-table-head-separator-padding} * 2);
90
90
  height: styles-tokens-table.$border-width-table;
91
91
 
92
92
  background-color: styles-tokens-table.$sys-neutral-decor-default;
@@ -106,7 +106,7 @@
106
106
  &::after {
107
107
  left: 0;
108
108
  transform: none;
109
- width: calc(100% - styles-tokens-table.$space-table-head-separator-padding);
109
+ width: calc(100% - #{styles-tokens-table.$space-table-head-separator-padding});
110
110
  }
111
111
  }
112
112
 
@@ -136,7 +136,7 @@
136
136
  }
137
137
 
138
138
  .tableHeaderResizeIndicator {
139
- right: calc(styles-tokens-table.$dimension-1m / 2);
139
+ right: calc(#{styles-tokens-table.$dimension-1m} / 2);
140
140
  }
141
141
  }
142
142
  }
@@ -42,8 +42,8 @@ $snack-ui-table-row-background: var(--snack-ui-table-row-background);
42
42
  content: '';
43
43
 
44
44
  position: absolute;
45
- top: calc(0px - styles-tokens-table.$border-width-table);
46
- bottom: calc(0px - styles-tokens-table.$border-width-table);
45
+ top: calc(0px - #{styles-tokens-table.$border-width-table});
46
+ bottom: calc(0px - #{styles-tokens-table.$border-width-table});
47
47
 
48
48
  box-sizing: border-box;
49
49
  width: styles-tokens-table.$border-width-table;