@economic/taco 2.28.1 → 2.29.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 (52) hide show
  1. package/dist/components/Icon/components/Phone.d.ts +3 -0
  2. package/dist/components/Icon/components/index.d.ts +1 -1
  3. package/dist/components/Input/Input.d.ts +1 -1
  4. package/dist/components/List/components/Item.d.ts +1 -1
  5. package/dist/components/Menu/components/Item.d.ts +1 -1
  6. package/dist/components/Menu/components/Link.d.ts +1 -1
  7. package/dist/components/Navigation2/components/Link.d.ts +1 -1
  8. package/dist/components/Select2/components/Option.d.ts +2 -2
  9. package/dist/components/Select2/components/Search.d.ts +1 -1
  10. package/dist/components/Tag/Tag.d.ts +1 -1
  11. package/dist/esm/index.css +10 -6
  12. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +45 -43
  13. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js.map +1 -1
  14. package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js +1 -1
  15. package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js.map +1 -1
  16. package/dist/esm/packages/taco/src/components/Icon/components/Phone.js +17 -0
  17. package/dist/esm/packages/taco/src/components/Icon/components/Phone.js.map +1 -0
  18. package/dist/esm/packages/taco/src/components/Icon/components/index.js +2 -0
  19. package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
  20. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +1 -1
  21. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  22. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/util.js +9 -2
  23. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/util.js.map +1 -1
  24. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +4 -1
  25. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
  26. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell.js +3 -7
  27. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell.js.map +1 -1
  28. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js +1 -1
  29. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
  30. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js +11 -9
  31. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js.map +1 -1
  32. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +3 -3
  33. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  34. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableStyleColumnFreezing.js +4 -2
  35. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableStyleColumnFreezing.js.map +1 -1
  36. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableStyleGrid.js +9 -8
  37. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableStyleGrid.js.map +1 -1
  38. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js +7 -1
  39. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js.map +1 -1
  40. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +15 -11
  41. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  42. package/dist/esm/packages/taco/src/utils/date.js +3 -3
  43. package/dist/esm/packages/taco/src/utils/date.js.map +1 -1
  44. package/dist/index.css +10 -6
  45. package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.d.ts +1 -3
  46. package/dist/primitives/Table/useTableManager/util/columns.d.ts +1 -1
  47. package/dist/taco.cjs.development.js +128 -91
  48. package/dist/taco.cjs.development.js.map +1 -1
  49. package/dist/taco.cjs.production.min.js +1 -1
  50. package/dist/taco.cjs.production.min.js.map +1 -1
  51. package/dist/utils/date.d.ts +1 -1
  52. package/package.json +2 -2
@@ -2569,6 +2569,19 @@ function IconPhoneSolid(props, svgRef) {
2569
2569
  }
2570
2570
  var PhoneSolid = /*#__PURE__*/React.forwardRef(IconPhoneSolid);
2571
2571
 
2572
+ function IconPhone(props, svgRef) {
2573
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
2574
+ fill: "none",
2575
+ xmlns: "http://www.w3.org/2000/svg",
2576
+ viewBox: "0 0 24 24",
2577
+ ref: svgRef
2578
+ }, props), /*#__PURE__*/React.createElement("path", {
2579
+ d: "M4.742 3.998l1.036-.641a2.75 2.75 0 013.58.6l1.39 1.703a2.75 2.75 0 01.2 3.196l-1.082 1.732a.25.25 0 00-.035.17c.06.396.52 1.073 1.397 1.95.638.638 1.174 1.062 1.59 1.27.289.144.43.154.48.123l1.783-1.114a2.75 2.75 0 013.195.201l1.696 1.383a2.75 2.75 0 01.606 3.57l-.639 1.04a3.75 3.75 0 01-3.234 1.788c-2.86-.03-5.846-1.636-8.974-4.763-3.133-3.133-4.739-6.124-4.764-8.986a3.75 3.75 0 011.775-3.222zm.79 1.276a2.25 2.25 0 00-1.065 1.932c.021 2.408 1.445 5.06 4.324 7.939 2.876 2.876 5.524 4.3 7.93 4.324a2.25 2.25 0 001.94-1.072l.639-1.04a1.25 1.25 0 00-.276-1.623l-1.696-1.383a1.25 1.25 0 00-1.452-.092l-1.787 1.117c-1.04.64-2.31.005-3.922-1.607-1.086-1.087-1.698-1.988-1.82-2.786a1.75 1.75 0 01.247-1.19l1.083-1.732a1.25 1.25 0 00-.092-1.453l-1.39-1.704a1.25 1.25 0 00-1.627-.272l-1.036.642z",
2580
+ fill: "currentColor"
2581
+ }));
2582
+ }
2583
+ var Phone = /*#__PURE__*/React.forwardRef(IconPhone);
2584
+
2572
2585
  function IconPlay(props, svgRef) {
2573
2586
  return /*#__PURE__*/React.createElement("svg", Object.assign({
2574
2587
  xmlns: "http://www.w3.org/2000/svg",
@@ -3572,6 +3585,7 @@ const icons = {
3572
3585
  'person-plus': PersonPlus,
3573
3586
  'person-tick': PersonTick,
3574
3587
  'phone-solid': PhoneSolid,
3588
+ phone: Phone,
3575
3589
  play: Play,
3576
3590
  'plus-minus': PlusMinus,
3577
3591
  print: Print,
@@ -5810,57 +5824,59 @@ const useCombobox = ({
5810
5824
  };
5811
5825
  const handleInputKeyDown = event => {
5812
5826
  event.persist();
5813
- switch (event.key) {
5814
- case 'Backspace':
5815
- {
5816
- return;
5817
- }
5818
- case 'Escape':
5819
- {
5820
- event.preventDefault();
5821
- setInputValue(convertToInputValue(value));
5822
- setOpen(false);
5823
- return;
5824
- }
5825
- case 'Tab':
5826
- case 'Enter':
5827
- {
5828
- if (event.key !== 'Tab') {
5827
+ if (!event.ctrlKey && !event.metaKey) {
5828
+ switch (event.key) {
5829
+ case 'Backspace':
5830
+ {
5831
+ return;
5832
+ }
5833
+ case 'Escape':
5834
+ {
5829
5835
  event.preventDefault();
5836
+ setInputValue(convertToInputValue(value));
5837
+ setOpen(false);
5838
+ return;
5830
5839
  }
5831
- setCurrentValue(currentIndex);
5832
- setOpen(false);
5833
- return;
5834
- }
5835
- case 'ArrowDown':
5836
- if (open) {
5837
- event.preventDefault();
5838
- } else {
5839
- if (!inline && buttonRef.current) {
5840
- buttonRef.current.click();
5840
+ case 'Tab':
5841
+ case 'Enter':
5842
+ {
5843
+ if (event.key !== 'Tab') {
5844
+ event.preventDefault();
5845
+ }
5846
+ setCurrentValue(currentIndex);
5847
+ setOpen(false);
5848
+ return;
5841
5849
  }
5842
- }
5843
- break;
5844
- case 'ArrowUp':
5845
- case 'Home':
5846
- case 'End':
5847
- {
5850
+ case 'ArrowDown':
5848
5851
  if (open) {
5849
5852
  event.preventDefault();
5853
+ } else {
5854
+ if (!inline && buttonRef.current) {
5855
+ buttonRef.current.click();
5856
+ }
5850
5857
  }
5851
5858
  break;
5859
+ case 'ArrowUp':
5860
+ case 'Home':
5861
+ case 'End':
5862
+ {
5863
+ if (open) {
5864
+ event.preventDefault();
5865
+ }
5866
+ break;
5867
+ }
5868
+ }
5869
+ // we aren't focused on the list, so manually forward the keydown event to it
5870
+ if (listRef.current) {
5871
+ listRef.current.dispatchEvent(createCustomKeyboardEvent(event));
5872
+ }
5873
+ if (inline && !open) {
5874
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
5875
+ event.preventDefault();
5876
+ const initialIndex = event.key === 'ArrowUp' ? data.length - 1 : 0;
5877
+ setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);
5878
+ setOpen(true);
5852
5879
  }
5853
- }
5854
- // we aren't focused on the list, so manually forward the keydown event to it
5855
- if (listRef.current) {
5856
- listRef.current.dispatchEvent(createCustomKeyboardEvent(event));
5857
- }
5858
- if (inline && !open) {
5859
- if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
5860
- event.preventDefault();
5861
- const initialIndex = event.key === 'ArrowUp' ? data.length - 1 : 0;
5862
- setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);
5863
- setOpen(true);
5864
5880
  }
5865
5881
  }
5866
5882
  if (!event.isDefaultPrevented() && onKeyDown) {
@@ -6007,7 +6023,7 @@ const Combobox = /*#__PURE__*/React.forwardRef(function Combobox(props, ref) {
6007
6023
  });
6008
6024
 
6009
6025
  const isWeakEqual = (leftDate, rightDate) => {
6010
- return leftDate.getFullYear() === rightDate.getFullYear() && leftDate.getMonth() === rightDate.getMonth() && leftDate.getDay() === rightDate.getDay();
6026
+ return leftDate.getFullYear() === rightDate.getFullYear() && leftDate.getMonth() === rightDate.getMonth() && leftDate.getDate() === rightDate.getDate();
6011
6027
  };
6012
6028
  const format = (date, mask = 'dd.mm.yy') => {
6013
6029
  if (!date) {
@@ -6020,7 +6036,7 @@ const format = (date, mask = 'dd.mm.yy') => {
6020
6036
  const pad = v => String(v).length === 1 ? `0${v}` : v.toString();
6021
6037
  return mask.replace('dd', pad(value.getDate())).replace('mm', pad(value.getMonth() + 1)).replace('yy', String(value.getFullYear()).slice(2));
6022
6038
  };
6023
- const parseFromCustomString = (date = '', mask = 'dd.mm.yy', defaultYear = undefined) => {
6039
+ const parseFromCustomString = (date = '', mask = 'dd.mm.yy', defaultMonth = undefined, defaultYear = undefined) => {
6024
6040
  if (!date || !date.length) {
6025
6041
  return undefined;
6026
6042
  }
@@ -6054,7 +6070,7 @@ const parseFromCustomString = (date = '', mask = 'dd.mm.yy', defaultYear = undef
6054
6070
  month = Number.parseInt(month, 10);
6055
6071
  year = Number.parseInt(year, 10);
6056
6072
  const currentDate = new Date();
6057
- return new Date( /* year */Object.is(year, NaN) ? defaultYear !== null && defaultYear !== void 0 ? defaultYear : currentDate.getFullYear() : year, /* month */Object.is(month, NaN) ? currentDate.getMonth() : month - 1,
6073
+ return new Date( /* year */Object.is(year, NaN) ? defaultYear !== null && defaultYear !== void 0 ? defaultYear : currentDate.getFullYear() : year, /* month */Object.is(month, NaN) ? defaultMonth !== null && defaultMonth !== void 0 ? defaultMonth : currentDate.getMonth() : month - 1,
6058
6074
  // months are zero based in javascript, so subtract a day
6059
6075
  /* day */
6060
6076
  Object.is(day, NaN) ? currentDate.getDate() : day, /* hours */12, /* minutes */0 // set to midday to avoid UTC offset causing dates to be mismatched server side
@@ -6092,7 +6108,7 @@ const useDatepicker = ({
6092
6108
  // event handlers
6093
6109
  const handleInputBlur = event => {
6094
6110
  event.persist();
6095
- const valueAsDate = parseFromCustomString(event.target.value, 'dd.mm.yy', value === null || value === void 0 ? void 0 : value.getFullYear());
6111
+ const valueAsDate = parseFromCustomString(event.target.value, 'dd.mm.yy', value === null || value === void 0 ? void 0 : value.getMonth(), value === null || value === void 0 ? void 0 : value.getFullYear());
6096
6112
  const formattedValue = valueAsDate ? format(valueAsDate) || '' : '';
6097
6113
  event.target.value = formattedValue;
6098
6114
  if (onChange) {
@@ -9587,7 +9603,7 @@ function orderColumn(column, {
9587
9603
  }
9588
9604
  }
9589
9605
  // ordering
9590
- function ensureOrdering(columns, settingsOrder, internalColumnsPinnedToTheRight = ['__actions']) {
9606
+ function ensureOrdering(columns, settingsOrder, pinnedOrder = [], internalColumnsPinnedToTheRight = ['__actions']) {
9591
9607
  // internal columns come with a defined order
9592
9608
  const internalColumns = columns.filter(column => isInternalColumn(column.id) && !internalColumnsPinnedToTheRight.includes(String(column.id))).map(column => column.id);
9593
9609
  // columns with ordering disabled should be moved to the front
@@ -9623,6 +9639,12 @@ function ensureOrdering(columns, settingsOrder, internalColumnsPinnedToTheRight
9623
9639
  // Append absent columns at the end
9624
9640
  .concat(columnsAbsentInSettingsOrder);
9625
9641
  }
9642
+ // if pinned columns are defined, make sure they are sorted first, this ensures state matches the freezing "upto" behaviour
9643
+ if (Array.isArray(pinnedOrder)) {
9644
+ orderingEnabled.sort(
9645
+ // the magic >>> 0 here ensures that columns that aren't found in settings, but are children, are pushed to the end
9646
+ (a, b) => (pinnedOrder.indexOf(a) >>> 0) - (pinnedOrder.indexOf(b) >>> 0));
9647
+ }
9626
9648
  const order = [...internalColumns, ...orderingDisabled, ...orderingEnabled];
9627
9649
  // actions should always be last, enforce that
9628
9650
  internalColumnsPinnedToTheRight.forEach(id => {
@@ -9867,16 +9889,18 @@ function processChildren(child, columns, defaultSizing, defaultSorting, defaultV
9867
9889
  if (defaultWidth) {
9868
9890
  defaultSizing[id] = defaultWidth;
9869
9891
  }
9870
- if (child.props.sort !== undefined) {
9892
+ const isGrouped = defaultRowGroupColumnId === id;
9893
+ if (child.props.sort !== undefined || isGrouped) {
9871
9894
  defaultSorting.push({
9872
9895
  id,
9873
9896
  desc: sort === 'desc'
9874
9897
  });
9875
9898
  }
9876
- const isGrouped = defaultRowGroupColumnId === id;
9877
9899
  const column = {
9878
9900
  id,
9879
9901
  accessorKey,
9902
+ // To avoid errors caused by undefined row data values, we pass accessorFn as a preventive measure
9903
+ accessorFn: row => row === null || row === void 0 ? void 0 : row[accessorKey],
9880
9904
  header: header,
9881
9905
  // features
9882
9906
  enableColumnFilter,
@@ -9976,14 +10000,14 @@ function mapTableChildrenToColumns(props, settings, options, internalColumns) {
9976
10000
  const column = createInternalColumn('__select', internalColumns.rowSelection, defaultSizing);
9977
10001
  columns.unshift(column);
9978
10002
  }
9979
- if (options.enableRowActions && (_props$rowActions = props.rowActions) !== null && _props$rowActions !== void 0 && _props$rowActions.length && internalColumns.rowActions) {
9980
- const column = createInternalColumn('__actions', internalColumns.rowActions, defaultSizing);
9981
- columns.push(column);
9982
- }
9983
10003
  if (options.enableRowDrag && props.onRowDrag && internalColumns.rowDrag) {
9984
10004
  const column = createInternalColumn('__drag', internalColumns.rowDrag, defaultSizing);
9985
10005
  columns.unshift(column);
9986
10006
  }
10007
+ if (options.enableRowActions && (_props$rowActions = props.rowActions) !== null && _props$rowActions !== void 0 && _props$rowActions.length && internalColumns.rowActions) {
10008
+ const column = createInternalColumn('__actions', internalColumns.rowActions, defaultSizing);
10009
+ columns.push(column);
10010
+ }
9987
10011
  }
9988
10012
  return {
9989
10013
  columns,
@@ -10057,12 +10081,14 @@ function configureReactTableOptions(options, props) {
10057
10081
  }
10058
10082
  function useReactTableInitialState(props, columns, persistedSettings, defaults) {
10059
10083
  return React__default.useMemo(() => {
10060
- var _persistedSettings$co, _props$defaultSetting, _ref, _persistedSettings$co2, _props$defaultSetting2, _columnPinning$left, _ref2, _persistedSettings$co3, _props$defaultSetting3, _ref3, _ref4, _persistedSettings$co4, _props$defaultSetting4, _ref5, _ref6, _persistedSettings$co5, _props$defaultSetting5, _persistedSettings$se, _props$defaultSetting6, _props$defaultSetting7, _props$defaultSetting8;
10084
+ var _ref, _persistedSettings$co, _props$defaultSetting, _persistedSettings$co2, _props$defaultSetting2, _columnPinning$left, _ref2, _persistedSettings$co3, _props$defaultSetting3, _ref3, _ref4, _persistedSettings$co4, _props$defaultSetting4, _ref5, _ref6, _persistedSettings$co5, _props$defaultSetting5, _persistedSettings$se, _props$defaultSetting6, _props$defaultSetting7, _props$defaultSetting8;
10061
10085
  const ignoreNotDefinedColumns = column => columns.find(definedColumn => definedColumn.id === column.id);
10062
- const columnOrder = ensureOrdering(columns, (_persistedSettings$co = persistedSettings.columnOrder) !== null && _persistedSettings$co !== void 0 ? _persistedSettings$co : (_props$defaultSetting = props.defaultSettings) === null || _props$defaultSetting === void 0 ? void 0 : _props$defaultSetting.columnOrder);
10063
- const columnPinning = (_ref = (_persistedSettings$co2 = persistedSettings.columnPinning) !== null && _persistedSettings$co2 !== void 0 ? _persistedSettings$co2 : (_props$defaultSetting2 = props.defaultSettings) === null || _props$defaultSetting2 === void 0 ? void 0 : _props$defaultSetting2.columnPinning) !== null && _ref !== void 0 ? _ref : {};
10064
- // ensure internal columns are pinned
10065
- if (!(columnPinning !== null && columnPinning !== void 0 && (_columnPinning$left = columnPinning.left) !== null && _columnPinning$left !== void 0 && _columnPinning$left.length)) {
10086
+ const columnPinning = (_ref = (_persistedSettings$co = persistedSettings.columnPinning) !== null && _persistedSettings$co !== void 0 ? _persistedSettings$co : (_props$defaultSetting = props.defaultSettings) === null || _props$defaultSetting === void 0 ? void 0 : _props$defaultSetting.columnPinning) !== null && _ref !== void 0 ? _ref : {};
10087
+ const columnOrder = ensureOrdering(columns, (_persistedSettings$co2 = persistedSettings.columnOrder) !== null && _persistedSettings$co2 !== void 0 ? _persistedSettings$co2 : (_props$defaultSetting2 = props.defaultSettings) === null || _props$defaultSetting2 === void 0 ? void 0 : _props$defaultSetting2.columnOrder, columnPinning.left);
10088
+ // ensure internal columns are pinned, and are pinned in the correct order
10089
+ if (columnPinning !== null && columnPinning !== void 0 && (_columnPinning$left = columnPinning.left) !== null && _columnPinning$left !== void 0 && _columnPinning$left.length) {
10090
+ columnPinning.left = freezeUptoExternalColumn(columnOrder.indexOf(columnPinning.left[columnPinning.left.length - 1]), columnOrder);
10091
+ } else {
10066
10092
  if (props.defaultColumnFreezingIndex) {
10067
10093
  columnPinning.left = freezeUptoExternalColumn(props.defaultColumnFreezingIndex, columnOrder);
10068
10094
  } else {
@@ -11219,7 +11245,7 @@ function useTableStyleGrid(tableId, table, fontSize) {
11219
11245
  // header body ?footer
11220
11246
  const gridTemplateRows = table.getRowModel().rows.length ? 'min-content 1fr min-content' : 'min-content 1fr';
11221
11247
  return React__default.useMemo(() => {
11222
- let printGridTemplateColumns = '';
11248
+ let printGridTemplateColumns = 0;
11223
11249
  const printHiddenColumns = [];
11224
11250
  const gridTemplateColumns = allVisibleColumns.reduce((accum, column, index) => {
11225
11251
  var _column$columnDef$min, _column$columnDef$met;
@@ -11229,7 +11255,6 @@ function useTableStyleGrid(tableId, table, fontSize) {
11229
11255
  const minSize = (_column$columnDef$min = column.columnDef.minSize) !== null && _column$columnDef$min !== void 0 ? _column$columnDef$min : globalMinSize;
11230
11256
  const width = columnSizing[column.id];
11231
11257
  let size;
11232
- let printSize;
11233
11258
  if (isInternalColumn(column.id)) {
11234
11259
  if (column.id === '__actions') {
11235
11260
  const minWidth = tableMeta.rowActions.rowActionsLength * 32 + 8; /* button margins l+r */
@@ -11253,22 +11278,24 @@ function useTableStyleGrid(tableId, table, fontSize) {
11253
11278
  } else {
11254
11279
  size = `minmax(max-content, auto)`;
11255
11280
  }
11281
+ // printing
11256
11282
  if (((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.enablePrinting) === false) {
11257
- printSize = '';
11258
11283
  printHiddenColumns.push(column.id);
11259
11284
  } else {
11260
- printSize = 'auto';
11285
+ printGridTemplateColumns++;
11261
11286
  }
11262
- printGridTemplateColumns = `${printGridTemplateColumns} ${printSize}`.trim();
11263
11287
  return `${accum} ${size}`.trim();
11264
11288
  }, '');
11265
- // we have to be specific so that nested tables don't inherit the same css
11266
- const hiddenColumns = printHiddenColumns.map(id => `table[data-taco^='table']#${tableId} > thead > tr > th[data-cell-id='${id}']\n,table[data-taco^='table']#${tableId} > tbody > tr > td[data-cell-id='${id}']\n`).join(',');
11289
+ // normal grid
11267
11290
  const style = {
11268
11291
  gridTemplateColumns,
11269
11292
  gridTemplateRows
11270
11293
  };
11271
- const stylesheet = `@media print { table[data-taco^='table']#${tableId} { grid-template-columns: ${printGridTemplateColumns}; } ${hiddenColumns ? `${hiddenColumns} { display: none; }` : ''}}`;
11294
+ // printing grid
11295
+ // we have to be specific so that nested tables don't inherit the same css
11296
+ const hiddenColumns = printHiddenColumns.map(id => `table[data-taco^='table']#${tableId} > thead > tr > th[data-cell-id='${id}']\n,table[data-taco^='table']#${tableId} > tbody > tr > td[data-cell-id='${id}']\n`).join(',');
11297
+ const stylesheet = `@media print { table[data-taco^='table']#${tableId} { grid-template-columns: repeat(${printGridTemplateColumns}, auto) !important; }
11298
+ table[data-taco^='table']#${tableId} [data-cell-id^='__']${hiddenColumns ? `, ${hiddenColumns}` : ''} { display: none; }}`;
11272
11299
  return {
11273
11300
  style,
11274
11301
  stylesheet
@@ -11298,7 +11325,8 @@ function useTableStyleColumnFreezing(tableId, table) {
11298
11325
  // add right border, hide the header seperator and add shadow when scrolled
11299
11326
  // we have to be specific so that nested tables don't inherit the same css
11300
11327
  styles.push(`table[data-taco^='table']#${tableId} > thead > tr > th:nth-child(${index + 1}),
11301
- table[data-taco^='table']#${tableId} > tbody > tr > td:nth-child(${index + 1}) {
11328
+ table[data-taco^='table']#${tableId} > tbody > tr > td:nth-child(${index + 1}),
11329
+ table[data-taco^='table']#${tableId} > tfoot > tr > td:nth-child(${index + 1}):not([data-cell-id^="__"]) {
11302
11330
  border-right-width: 1px;
11303
11331
  }\ntable[data-taco^='table']#${tableId} > thead > tr > th:nth-child(${index + 1})[data-cell-id^="__"],
11304
11332
  table[data-taco^='table']#${tableId} > tbody > tr > td:nth-child(${index + 1})[data-cell-id^="__"] {
@@ -11306,7 +11334,8 @@ function useTableStyleColumnFreezing(tableId, table) {
11306
11334
  }\ntable[data-taco^='table']#${tableId} > thead > tr > th:nth-child(${index + 1}):after {
11307
11335
  content: none;
11308
11336
  }\ntable[data-taco^='table'][data-table-horizontally-scrolled="true"]#${tableId} > thead > tr > th:nth-child(${index + 1}),
11309
- table[data-taco^='table'][data-table-horizontally-scrolled="true"]#${tableId} > tbody > tr > td:nth-child(${index + 1}) {
11337
+ table[data-taco^='table'][data-table-horizontally-scrolled="true"]#${tableId} > tbody > tr > td:nth-child(${index + 1}),
11338
+ table[data-taco^='table'][data-table-horizontally-scrolled="true"]#${tableId} > tfoot > tr > td:nth-child(${index + 1}) {
11310
11339
  border-right-color: rgb(221, 221, 221);
11311
11340
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), 6px 0px 6px rgb(0 0 0/8%);
11312
11341
  }`);
@@ -11471,11 +11500,11 @@ function SkeletonRow(props) {
11471
11500
  }));
11472
11501
  }
11473
11502
  return /*#__PURE__*/React__default.createElement(Skeleton, {
11474
- id: row.id,
11475
- cells: row.getVisibleCells()
11503
+ cellsCount: row.getVisibleCells().length
11476
11504
  });
11477
11505
  }
11478
11506
  function RowWithServerLoading(props) {
11507
+ var _table$getState$group, _table$getState;
11479
11508
  const {
11480
11509
  index,
11481
11510
  row,
@@ -11497,22 +11526,24 @@ function RowWithServerLoading(props) {
11497
11526
  (_tableMeta$server$loa = (_tableMeta$server = tableMeta.server).loadPage) === null || _tableMeta$server$loa === void 0 ? void 0 : _tableMeta$server$loa.call(_tableMeta$server, pageIndex, table.getState().sorting, table.getState().columnFilters, table.getState().globalFilter);
11498
11527
  }
11499
11528
  }, [inView]);
11529
+ const groupedCellCount = (_table$getState$group = (_table$getState = table.getState()) === null || _table$getState === void 0 ? void 0 : _table$getState.grouping.length) !== null && _table$getState$group !== void 0 ? _table$getState$group : 0;
11530
+ const ungroupedCellCount = row.getVisibleCells().length - groupedCellCount;
11500
11531
  return /*#__PURE__*/React__default.createElement(Skeleton, {
11501
- cells: row.getVisibleCells(),
11532
+ cellsCount: ungroupedCellCount,
11502
11533
  ref: ref
11503
11534
  });
11504
11535
  }
11505
11536
  const Skeleton = /*#__PURE__*/React__default.forwardRef(function Skeleton(props, ref) {
11506
11537
  const {
11507
- cells
11538
+ cellsCount
11508
11539
  } = props;
11509
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("tr", {
11540
+ return /*#__PURE__*/React__default.createElement("tr", {
11510
11541
  ref: ref
11511
- }, cells.map(cell => ( /*#__PURE__*/React__default.createElement("td", {
11512
- key: cell.id
11542
+ }, Array(cellsCount).fill(null).map((_, index) => ( /*#__PURE__*/React__default.createElement("td", {
11543
+ key: index
11513
11544
  }, /*#__PURE__*/React__default.createElement("span", {
11514
11545
  className: "bg-grey-100 text-grey-700 h-4 w-full text-center text-xs"
11515
- }))))));
11546
+ })))));
11516
11547
  });
11517
11548
 
11518
11549
  const RowContext = /*#__PURE__*/React__default.createContext({
@@ -11545,7 +11576,7 @@ function Row(props) {
11545
11576
  }
11546
11577
 
11547
11578
  const TABLE_SCROLL_PADDING_BOTTOM = 36;
11548
- const TABLE_PADDING_BOTTOM = 120;
11579
+ const TABLE_PADDING_BOTTOM = 0;
11549
11580
  function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
11550
11581
  var _table$getState$group, _ref, _virtualItems$padding, _virtualItems$padding2, _ref2, _virtualItems;
11551
11582
  const tableMeta = table.options.meta;
@@ -11618,7 +11649,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
11618
11649
  let content = null;
11619
11650
  if (rows.length) {
11620
11651
  style = {
11621
- height: `${virtualiser.getTotalSize()}px`,
11652
+ height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL}px`,
11622
11653
  paddingBottom,
11623
11654
  paddingTop
11624
11655
  };
@@ -11697,7 +11728,7 @@ function useRowGroupVirtualisation(table) {
11697
11728
  });
11698
11729
  }
11699
11730
  return indexes;
11700
- }, []);
11731
+ }, [rows]);
11701
11732
  // this is taken from the react-virtual docs/examples
11702
11733
  const rangeExtractor = React__default.useCallback(range => {
11703
11734
  var _reverse$find;
@@ -12412,23 +12443,20 @@ function DisplayCell(props) {
12412
12443
  isHighlighted,
12413
12444
  ...cellAttributes
12414
12445
  } = props;
12415
- const {
12416
- isHovered
12417
- } = React__default.useContext(RowContext);
12418
12446
  const columnMeta = cell.column.columnDef.meta;
12419
12447
  const attributes = getCellAttributes(cell, index, isHighlighted);
12420
12448
  const isTruncated = !!columnMeta.enableTruncate;
12449
+ const value = cell.getValue();
12421
12450
  let content;
12422
12451
  if (isInternalColumn(cell.column.id)) {
12423
12452
  content = reactTable.flexRender(cell.column.columnDef.cell, cell.getContext());
12424
12453
  } else {
12425
12454
  var _ref, _columnMeta$renderer, _columnMeta$renderer2;
12426
- content = (_ref = (_columnMeta$renderer = (_columnMeta$renderer2 = columnMeta.renderer) === null || _columnMeta$renderer2 === void 0 ? void 0 : _columnMeta$renderer2.call(columnMeta, cell.getValue(), cell.row.original)) !== null && _columnMeta$renderer !== void 0 ? _columnMeta$renderer : cell.getValue()) !== null && _ref !== void 0 ? _ref : null;
12455
+ content = (_ref = (_columnMeta$renderer = (_columnMeta$renderer2 = columnMeta.renderer) === null || _columnMeta$renderer2 === void 0 ? void 0 : _columnMeta$renderer2.call(columnMeta, value, cell.row.original)) !== null && _columnMeta$renderer !== void 0 ? _columnMeta$renderer : value) !== null && _ref !== void 0 ? _ref : null;
12427
12456
  }
12428
12457
  return /*#__PURE__*/React__default.createElement(MemoedDisplayCell, Object.assign({}, cellAttributes, attributes, {
12429
12458
  cellRef: cellRef,
12430
- isTruncated: isTruncated,
12431
- key: `${cell.id}_${isHovered}`
12459
+ isTruncated: isTruncated
12432
12460
  }), content);
12433
12461
  }
12434
12462
  const MemoedDisplayCell = /*#__PURE__*/React__default.memo(function MemoedDisplayCell(props) {
@@ -13144,7 +13172,7 @@ const MemoedFooter = /*#__PURE__*/React__default.memo(function MemoedFooter(prop
13144
13172
  const style = {};
13145
13173
  if (isPinned) {
13146
13174
  // pinned columns should be offset from either the left or right
13147
- style[isPinned] = `${footer.column.getStart(isPinned) - 1}px`;
13175
+ style[isPinned] = `${footer.column.getStart(isPinned)}px`;
13148
13176
  }
13149
13177
  let content;
13150
13178
  let align;
@@ -17745,7 +17773,9 @@ function useTableEditing(isEnabled = false, handleSave, validator) {
17745
17773
  const pendingChangesFns = usePendingChanges(isEnabled, handleSave, validator);
17746
17774
  // if focus leaves the table in any way, trigger a save
17747
17775
  const handleBlur = React__default.useCallback(event => {
17748
- if (event.relatedTarget !== event.currentTarget && !isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {
17776
+ // custom event from datepicker, and it doesn't have the relatedTarget property set.
17777
+ const isClosingDatepicker = dateFns.isDate(event.detail);
17778
+ if (event.relatedTarget !== event.currentTarget && !isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget) && !isClosingDatepicker) {
17749
17779
  pendingChangesFns.saveChanges();
17750
17780
  }
17751
17781
  }, [pendingChangesFns.saveChanges]);
@@ -18279,8 +18309,15 @@ function useEditingCellAutofocus(props) {
18279
18309
  const tableElement = (_props$cellRef$curren3 = props.cellRef.current) === null || _props$cellRef$curren3 === void 0 ? void 0 : _props$cellRef$curren3.closest('table');
18280
18310
  if (tableElement && table.getIsSomeColumnsPinned() && !props.cell.column.getIsPinned()) {
18281
18311
  const columnFreezingOffset = table.getLeftTotalSize();
18282
- const leftOffsetFromScrollContainer = event.currentTarget.getBoundingClientRect().left - tableElement.getBoundingClientRect().left;
18283
- if (leftOffsetFromScrollContainer < columnFreezingOffset) {
18312
+ const targetRect = event.currentTarget.getBoundingClientRect();
18313
+ const tableRect = tableElement.getBoundingClientRect();
18314
+ const leftOffsetFromScrollContainer = targetRect.left - tableRect.left;
18315
+ const scrollbarWidth = tableElement.offsetWidth - tableElement.clientWidth; // the width of table vertical scrollbar
18316
+ if (
18317
+ // When pinned column overlaps the focused cell
18318
+ leftOffsetFromScrollContainer < columnFreezingOffset ||
18319
+ // When focused cell goes behidn the edge of the table
18320
+ leftOffsetFromScrollContainer + targetRect.width > tableRect.width - scrollbarWidth) {
18284
18321
  tableElement.scrollTo(props.cell.column.getStart() - columnFreezingOffset, tableElement.scrollTop);
18285
18322
  }
18286
18323
  }
@@ -18449,7 +18486,7 @@ const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditin
18449
18486
  if (type === 'datepicker') {
18450
18487
  const handleChange = event => {
18451
18488
  const newDate = event.detail;
18452
- if (dateFns.isDate(value) && dateFns.isDate(newDate) && !isWeakEqual(value, newDate)) {
18489
+ if (!value || dateFns.isDate(value) && dateFns.isDate(newDate) && !isWeakEqual(value, newDate)) {
18453
18490
  props.onChange(event.detail);
18454
18491
  }
18455
18492
  };