@economic/taco 1.28.0 → 1.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 (88) hide show
  1. package/dist/components/Header/Header.d.ts +2 -1
  2. package/dist/components/Header/components/Button.d.ts +1 -1
  3. package/dist/components/Header/components/Logo.d.ts +1 -0
  4. package/dist/components/Icon/components/ColumnFreeze.d.ts +3 -0
  5. package/dist/components/Icon/components/ColumnUnfreeze.d.ts +3 -0
  6. package/dist/components/Icon/components/index.d.ts +1 -1
  7. package/dist/components/Input/Input.d.ts +1 -1
  8. package/dist/components/Menu/components/Item.d.ts +1 -1
  9. package/dist/components/Menu/components/Link.d.ts +1 -1
  10. package/dist/components/Navigation2/components/Link.d.ts +1 -1
  11. package/dist/components/Provider/Localization.d.ts +12 -4
  12. package/dist/components/Select2/components/Option.d.ts +1 -1
  13. package/dist/components/Select2/components/Search.d.ts +1 -1
  14. package/dist/components/Table2/Table2.d.ts +11 -4
  15. package/dist/components/Table2/components/row/ExpandedRow.d.ts +1 -1
  16. package/dist/components/Table2/hooks/useColumnDefinitions.d.ts +2 -2
  17. package/dist/components/Table2/hooks/useTable.d.ts +4 -0
  18. package/dist/components/Table2/types.d.ts +3 -4
  19. package/dist/components/Table2/utilities/cell.d.ts +1 -1
  20. package/dist/components/Table2/utilities/columns.d.ts +1 -0
  21. package/dist/components/Tag/Tag.d.ts +1 -1
  22. package/dist/components/Truncate/Truncate.d.ts +6 -0
  23. package/dist/esm/packages/taco/src/components/Header/Header.js +3 -2
  24. package/dist/esm/packages/taco/src/components/Header/Header.js.map +1 -1
  25. package/dist/esm/packages/taco/src/components/Header/components/Button.js +3 -1
  26. package/dist/esm/packages/taco/src/components/Header/components/Button.js.map +1 -1
  27. package/dist/esm/packages/taco/src/components/Header/components/Logo.js +19 -2
  28. package/dist/esm/packages/taco/src/components/Header/components/Logo.js.map +1 -1
  29. package/dist/esm/packages/taco/src/components/Header/components/MenuButton.js +1 -1
  30. package/dist/esm/packages/taco/src/components/Header/components/MenuButton.js.map +1 -1
  31. package/dist/esm/packages/taco/src/components/Header/components/SecondaryNavigation.js +1 -1
  32. package/dist/esm/packages/taco/src/components/Header/components/SecondaryNavigation.js.map +1 -1
  33. package/dist/esm/packages/taco/src/components/Icon/components/ColumnFreeze.js +19 -0
  34. package/dist/esm/packages/taco/src/components/Icon/components/ColumnFreeze.js.map +1 -0
  35. package/dist/esm/packages/taco/src/components/Icon/components/ColumnUnfreeze.js +19 -0
  36. package/dist/esm/packages/taco/src/components/Icon/components/ColumnUnfreeze.js.map +1 -0
  37. package/dist/esm/packages/taco/src/components/Icon/components/index.js +4 -0
  38. package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
  39. package/dist/esm/packages/taco/src/components/Input/Input.js +14 -14
  40. package/dist/esm/packages/taco/src/components/Input/Input.js.map +1 -1
  41. package/dist/esm/packages/taco/src/components/Provider/Localization.js +13 -6
  42. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  43. package/dist/esm/packages/taco/src/components/SearchInput/SearchInput.js +1 -0
  44. package/dist/esm/packages/taco/src/components/SearchInput/SearchInput.js.map +1 -1
  45. package/dist/esm/packages/taco/src/components/Select2/components/Collection.js +2 -1
  46. package/dist/esm/packages/taco/src/components/Select2/components/Collection.js.map +1 -1
  47. package/dist/esm/packages/taco/src/components/Table2/Table2.js +21 -9
  48. package/dist/esm/packages/taco/src/components/Table2/Table2.js.map +1 -1
  49. package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js +243 -111
  50. package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js.map +1 -1
  51. package/dist/esm/packages/taco/src/components/Table2/components/column/Base.js +5 -5
  52. package/dist/esm/packages/taco/src/components/Table2/components/column/Base.js.map +1 -1
  53. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js +76 -31
  54. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js.map +1 -1
  55. package/dist/esm/packages/taco/src/components/Table2/components/column/Footer.js +2 -2
  56. package/dist/esm/packages/taco/src/components/Table2/components/column/Footer.js.map +1 -1
  57. package/dist/esm/packages/taco/src/components/Table2/components/column/Header.js +85 -19
  58. package/dist/esm/packages/taco/src/components/Table2/components/column/Header.js.map +1 -1
  59. package/dist/esm/packages/taco/src/components/Table2/components/row/ExpandedRow.js +3 -0
  60. package/dist/esm/packages/taco/src/components/Table2/components/row/ExpandedRow.js.map +1 -1
  61. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useColumnOffsetStateListener.js +6 -3
  62. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useColumnOffsetStateListener.js.map +1 -1
  63. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useSettingsStateListener.js +2 -2
  64. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useSettingsStateListener.js.map +1 -1
  65. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js +6 -9
  66. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js.map +1 -1
  67. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js +14 -6
  68. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js.map +1 -1
  69. package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
  70. package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js +8 -8
  71. package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js.map +1 -1
  72. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +17 -8
  73. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js.map +1 -1
  74. package/dist/esm/packages/taco/src/components/Truncate/Truncate.js +32 -0
  75. package/dist/esm/packages/taco/src/components/Truncate/Truncate.js.map +1 -0
  76. package/dist/esm/packages/taco/src/index.js +1 -1
  77. package/dist/esm/packages/taco/src/primitives/Listbox2/components/Option.js +3 -1
  78. package/dist/esm/packages/taco/src/primitives/Listbox2/components/Option.js.map +1 -1
  79. package/dist/esm/packages/taco/src/primitives/Listbox2/components/Root.js +3 -1
  80. package/dist/esm/packages/taco/src/primitives/Listbox2/components/Root.js.map +1 -1
  81. package/dist/esm/packages/taco/src/primitives/Sortable/components/Item.js +5 -1
  82. package/dist/esm/packages/taco/src/primitives/Sortable/components/Item.js.map +1 -1
  83. package/dist/taco.cjs.development.js +601 -234
  84. package/dist/taco.cjs.development.js.map +1 -1
  85. package/dist/taco.cjs.production.min.js +1 -1
  86. package/dist/taco.cjs.production.min.js.map +1 -1
  87. package/package.json +2 -2
  88. package/types.json +74 -19
@@ -750,6 +750,36 @@ function IconClose(props, svgRef) {
750
750
  }
751
751
  var Close = /*#__PURE__*/React.forwardRef(IconClose);
752
752
 
753
+ function IconColumnFreeze(props, svgRef) {
754
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
755
+ fill: "none",
756
+ xmlns: "http://www.w3.org/2000/svg",
757
+ viewBox: "0 0 24 24",
758
+ ref: svgRef
759
+ }, props), /*#__PURE__*/React.createElement("path", {
760
+ fillRule: "evenodd",
761
+ clipRule: "evenodd",
762
+ d: "M14 4.5h-4v15h4v-15zm1.5 0v15h3.75a.25.25 0 00.25-.25V4.75a.25.25 0 00-.25-.25H15.5zM4.75 3A1.75 1.75 0 003 4.75v14.5c0 .966.784 1.75 1.75 1.75h14.5A1.75 1.75 0 0021 19.25V4.75A1.75 1.75 0 0019.25 3H4.75z",
763
+ fill: "currentColor"
764
+ }));
765
+ }
766
+ var ColumnFreeze = /*#__PURE__*/React.forwardRef(IconColumnFreeze);
767
+
768
+ function IconColumnUnfreeze(props, svgRef) {
769
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
770
+ fill: "none",
771
+ xmlns: "http://www.w3.org/2000/svg",
772
+ viewBox: "0 0 24 24",
773
+ ref: svgRef
774
+ }, props), /*#__PURE__*/React.createElement("path", {
775
+ fillRule: "evenodd",
776
+ clipRule: "evenodd",
777
+ d: "M9.6 4.5H14v15h-2.378a2.26 2.26 0 010 1.5h7.628A1.75 1.75 0 0021 19.25V4.75A1.75 1.75 0 0019.25 3H4.75A1.75 1.75 0 003 4.75v6.75c.576 0 1.152.22 1.591.659l1.659 1.659 1.659-1.659a2.244 2.244 0 011.691-.657V4.5zm5.9 15v-15h3.75a.25.25 0 01.25.25v14.5a.25.25 0 01-.25.25H15.5zM2.47 20.78a.75.75 0 010-1.06L5.19 17l-2.72-2.72a.75.75 0 111.06-1.06l2.72 2.72 2.72-2.72a.75.75 0 111.06 1.06L7.31 17l2.72 2.72a.75.75 0 11-1.06 1.06l-2.72-2.72-2.72 2.72a.75.75 0 01-1.06 0z",
778
+ fill: "currentColor"
779
+ }));
780
+ }
781
+ var ColumnUnfreeze = /*#__PURE__*/React.forwardRef(IconColumnUnfreeze);
782
+
753
783
  function IconColumns(props, svgRef) {
754
784
  return /*#__PURE__*/React.createElement("svg", Object.assign({
755
785
  fill: "none",
@@ -3036,6 +3066,8 @@ const icons = {
3036
3066
  'clamp-open': ClampOpen,
3037
3067
  clamp: Clamp,
3038
3068
  close: Close,
3069
+ 'column-freeze': ColumnFreeze,
3070
+ 'column-unfreeze': ColumnUnfreeze,
3039
3071
  columns: Columns,
3040
3072
  'connection-enable': ConnectionEnable,
3041
3073
  'connection-revoke': ConnectionRevoke,
@@ -3825,15 +3857,22 @@ const defaultLocalisationTexts = {
3825
3857
  deselectAll: 'Deselect all rows',
3826
3858
  select: 'Select row',
3827
3859
  selectAll: 'Select all rows'
3860
+ },
3861
+ menu: {
3862
+ freezeColumns: 'Freeze first [X] columns',
3863
+ unfreezeColumns: 'Unfreeze all columns'
3828
3864
  }
3829
3865
  },
3830
3866
  columnSettings: {
3831
- columnsOther: 'Other columns',
3832
- columnsOtherDrop: 'Drop column here to unpin',
3833
- columnsPinned: 'Pinned columns',
3834
- columnsPinnedDrop: 'Drop column here to pin',
3867
+ columnsHidden: 'Hidden columns',
3868
+ columnsHiddenDrop: 'Drop column here to hide',
3869
+ columnsVisible: 'Visible columns',
3870
+ columnsVisibleDrop: 'Drop column here to show',
3871
+ noHiddenColumns: 'No hidden columns',
3872
+ noVisibleColumns: 'No visible columns',
3835
3873
  search: 'Search column...',
3836
- tooltip: 'Column settings'
3874
+ tooltip: 'Column settings',
3875
+ button: 'Columns'
3837
3876
  },
3838
3877
  editing: {
3839
3878
  button: 'Edit',
@@ -4380,6 +4419,8 @@ const InputWithoutDeprecatedFeatures = /*#__PURE__*/React.forwardRef(function In
4380
4419
  className: className,
4381
4420
  "data-taco": "input",
4382
4421
  onKeyDown: handleKeyDown,
4422
+ "aria-invalid": invalid,
4423
+ "data-highlighted": highlighted,
4383
4424
  ref: internalRef,
4384
4425
  style: {
4385
4426
  paddingLeft: prefixRect ? `${prefixRect.width - 1}px` : undefined,
@@ -4404,20 +4445,18 @@ const Affix = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function Af
4404
4445
  disabled,
4405
4446
  type
4406
4447
  } = props;
4407
- if (children) {
4408
- return /*#__PURE__*/React.createElement("div", {
4409
- className: cn('group absolute top-0 flex h-full items-center justify-center px-2',
4410
- // icon
4411
- '[&_[data-taco="icon"]]:!h-5 [&_[data-taco="icon"]]:!w-5', {
4412
- 'text-grey-300': disabled,
4413
- 'text-grey-700': !disabled,
4414
- 'left-0 [&>button]:!-ml-2': type === 'prefix',
4415
- 'right-0 [&>button]:!-mr-2': type === 'postfix'
4416
- }),
4417
- ref: ref
4418
- }, children);
4419
- }
4420
- return null;
4448
+ return /*#__PURE__*/React.createElement("div", {
4449
+ className: cn('group absolute top-0 flex h-full items-center justify-center px-2',
4450
+ // icon
4451
+ '[&_[data-taco="icon"]]:!h-5 [&_[data-taco="icon"]]:!w-5', {
4452
+ 'text-grey-300': disabled,
4453
+ 'text-grey-700': !disabled,
4454
+ 'left-0 [&>button]:!-ml-2': type === 'prefix',
4455
+ 'right-0 [&>button]:!-mr-2': type === 'postfix'
4456
+ }),
4457
+ "data-affix-type": type,
4458
+ ref: ref
4459
+ }, children);
4421
4460
  }));
4422
4461
  const Input = /*#__PURE__*/React.forwardRef(function LegacyInput(props, ref) {
4423
4462
  var _attributes$postfix;
@@ -8317,6 +8356,7 @@ const SearchInput = /*#__PURE__*/React.forwardRef(function SearchInput({
8317
8356
  onKeyDown: handleKeyDown,
8318
8357
  postfix: /*#__PURE__*/React.createElement(React.Fragment, null, props.disabled || props.readOnly || !props.value ? null : /*#__PURE__*/React.createElement(IconButton, {
8319
8358
  "aria-hidden": true,
8359
+ "aria-label": texts.searchInput.clear,
8320
8360
  className: "group-peer-focus:visible group-peer-hover:visible !text-grey-700 invisible mr-0.5 !h-5 !min-h-[theme(spacing.4)] !w-5 !min-w-[theme(spacing.4)] text-xs hover:visible group-hover:visible",
8321
8361
  icon: "close",
8322
8362
  onClick: handleCancelClick,
@@ -8523,7 +8563,9 @@ const Root$1 = /*#__PURE__*/React__default.forwardRef(function Listbox2(props, r
8523
8563
  value,
8524
8564
  ...otherProps
8525
8565
  } = props;
8526
- const id = useId(nativeId);
8566
+ // The id name cannot start with a number, otherwise unit tests will fail when trying to querry element with such id.
8567
+ // That's why adding prefix.
8568
+ const id = 'listbox2-' + useId(nativeId);
8527
8569
  const context = React__default.useMemo(() => ({
8528
8570
  disabled,
8529
8571
  readOnly,
@@ -8578,7 +8620,9 @@ const Option = /*#__PURE__*/React__default.forwardRef(function Listbox2Option(pr
8578
8620
  setValue,
8579
8621
  value: currentValue
8580
8622
  } = useListbox2Context();
8581
- const id = useId(nativeId);
8623
+ // The id name cannot start with a number, otherwise unit tests will fail when trying to querry element with such id.
8624
+ // That's why adding prefix.
8625
+ const id = 'option-' + useId(nativeId);
8582
8626
  const selected = Array.isArray(currentValue) ? currentValue.includes(value) : currentValue === value;
8583
8627
  const handleClick = event => {
8584
8628
  if (disabled || listboxDisabled || listboxReadOnly) {
@@ -9509,8 +9553,9 @@ const Collection$1 = props => {
9509
9553
  const {
9510
9554
  children
9511
9555
  } = props;
9556
+ // max-h-[11.5rem] = is 5.5 options + spacing between them. Option height is 2rem, spacing 0.125. In total it's 11.5.
9512
9557
  return /*#__PURE__*/React__default.createElement(ScrollArea, {
9513
- className: "flex max-h-[10.3rem] w-full flex-col gap-y-0.5 px-1.5"
9558
+ className: "flex max-h-[11.5rem] w-full flex-col gap-y-0.5 px-1.5"
9514
9559
  }, children);
9515
9560
  };
9516
9561
 
@@ -11328,6 +11373,7 @@ const COLUMN_ID_FOR_DRAGGABLE = '__draggable';
11328
11373
  const COLUMN_ID_FOR_SELECTION = '__select';
11329
11374
  const COLUMN_ID_FOR_EXPANSION = '__expansion';
11330
11375
  const COLUMN_ID_FOR_ACTIONS = '__actions';
11376
+ const isInternalFrozenColumn = id => isInternalColumn(id) && id !== COLUMN_ID_FOR_ACTIONS;
11331
11377
  const isInternalColumn = id => id === COLUMN_ID_FOR_SELECTION || id === COLUMN_ID_FOR_EXPANSION || id === COLUMN_ID_FOR_ACTIONS || id === COLUMN_ID_FOR_DRAGGABLE;
11332
11378
  const MIN_COLUMN_SIZE = 80; // accounts for padding and sort controls
11333
11379
  const toggleBetween$1 = (fromRowIndex, toRowIndex) => {
@@ -11504,6 +11550,7 @@ function createRowSelectionColumn(enableMultipleRowSelection, lastSelectedRowInd
11504
11550
  }
11505
11551
  const ExpandCell = /*#__PURE__*/React__default.memo(({
11506
11552
  expandedRowRenderer,
11553
+ isExpanded,
11507
11554
  row,
11508
11555
  texts
11509
11556
  }) => {
@@ -11511,7 +11558,6 @@ const ExpandCell = /*#__PURE__*/React__default.memo(({
11511
11558
  if (!hasExpandedRow) {
11512
11559
  return null;
11513
11560
  }
11514
- const isExpanded = row.getIsExpanded();
11515
11561
  return /*#__PURE__*/React__default.createElement(Tooltip, {
11516
11562
  title: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isExpanded ? texts.table2.columns.expansion.collapse : texts.table2.columns.expansion.expand, /*#__PURE__*/React__default.createElement(Shortcut$1, {
11517
11563
  className: "ml-2",
@@ -11548,8 +11594,13 @@ function createRowExpansionColumn(expandedRowRenderer, texts) {
11548
11594
  })),
11549
11595
  cell: ({
11550
11596
  row
11551
- }) => /*#__PURE__*/React__default.createElement(ExpandCell, {
11597
+ }) =>
11598
+ /*#__PURE__*/
11599
+ // ExpandCell is memoised and that's why calling row.getIsExpanded() inside it doesn't return the correct
11600
+ // expand state. This is the reason why isExpanded is pulled out of the ExpandCell component.
11601
+ React__default.createElement(ExpandCell, {
11552
11602
  expandedRowRenderer: expandedRowRenderer,
11603
+ isExpanded: row.getIsExpanded(),
11553
11604
  row: row,
11554
11605
  texts: texts
11555
11606
  }),
@@ -11654,11 +11705,14 @@ function createRowActionsColumn(rowActions, texts) {
11654
11705
  align: 'right',
11655
11706
  className: (row, table) => {
11656
11707
  var _table$options$meta3;
11657
- return cn('items-center print:opacity-0 group-[[aria-current]]/row:sticky group-hover/row:sticky right-0 !px-1', {
11658
- 'group-[[aria-current]]/row:!shadow-[-6px_0px_6px_theme(colors.grey.200)]': !row.getIsSelected(),
11659
- 'group-hover/row:!shadow-[-6px_0px_6px_theme(colors.grey.100)]': !row.getIsSelected() && (!((_table$options$meta3 = table.options.meta) !== null && _table$options$meta3 !== void 0 && _table$options$meta3.shouldPauseHoverState) || table.options.meta.editMode.isEditing),
11660
- 'shadow-[-6px_0px_6px_theme(colors.blue.100)]': row.getIsSelected()
11661
- });
11708
+ return (
11709
+ // Adding z-index so that it shows on top of frozen columns
11710
+ cn('items-center print:opacity-0 group-[[aria-current]]/row:sticky group-hover/row:sticky right-0 !px-1 z-[1]', {
11711
+ 'group-[[aria-current]]/row:!shadow-[-6px_0px_6px_theme(colors.grey.200)]': !row.getIsSelected(),
11712
+ 'group-hover/row:!shadow-[-6px_0px_6px_theme(colors.grey.100)]': !row.getIsSelected() && (!((_table$options$meta3 = table.options.meta) !== null && _table$options$meta3 !== void 0 && _table$options$meta3.shouldPauseHoverState) || table.options.meta.editMode.isEditing),
11713
+ 'shadow-[-6px_0px_6px_theme(colors.blue.100)]': row.getIsSelected()
11714
+ })
11715
+ );
11662
11716
  },
11663
11717
  headerClassName: 'hover:!bg-white !px-1'
11664
11718
  },
@@ -11687,15 +11741,15 @@ const getCellAlignmentClasses = (alignment = 'left') => ({
11687
11741
  'justify-end text-right': alignment === 'right',
11688
11742
  'justify-center text-center': alignment === 'center'
11689
11743
  });
11690
- const getPinnedShadowClasses = (column, columnPinning, isHorizontallyOffset) => {
11691
- const pinned = !!column.getIsPinned();
11744
+ const getFrozenShadowClasses = (column, frozenColumns, isHorizontallyOffset) => {
11745
+ const frozen = !!column.getIsPinned();
11692
11746
  // react-table has column.getPinnedIndex() but it does not exclude hidden columns, so the number is wrong
11693
- const pinnedIndex = columnPinning.indexOf(column.id);
11694
- const isLastPinned = pinned && pinnedIndex === columnPinning.length - 1;
11695
- const hidePinnedShadow = !isHorizontallyOffset && (column.id === COLUMN_ID_FOR_EXPANSION || column.id === COLUMN_ID_FOR_SELECTION);
11747
+ const frozenColumnIndex = frozenColumns.indexOf(column.id);
11748
+ const isLastFrozen = frozen && frozenColumnIndex === frozenColumns.length - 1;
11749
+ const hideFrozenShadow = !isHorizontallyOffset && (column.id === COLUMN_ID_FOR_EXPANSION || column.id === COLUMN_ID_FOR_SELECTION);
11696
11750
  return {
11697
- 'shadow-[6px_0px_6px_rgb(0_0_0/8%),1px_0px_0px_theme(colors.grey.300)]': isLastPinned && isHorizontallyOffset,
11698
- 'shadow-[1px_0px_0px_theme(colors.grey.300)]': isLastPinned && !isHorizontallyOffset && !hidePinnedShadow
11751
+ 'shadow-[6px_0px_6px_rgb(0_0_0/8%),1px_0px_0px_theme(colors.grey.300)]': isLastFrozen && isHorizontallyOffset,
11752
+ 'shadow-[1px_0px_0px_theme(colors.grey.300)]': isLastFrozen && !isHorizontallyOffset && !hideFrozenShadow
11699
11753
  };
11700
11754
  };
11701
11755
  const isKeyboardFocusableElement = element => {
@@ -11712,18 +11766,18 @@ const ColumnBase = /*#__PURE__*/React__default.forwardRef(function Table2ColumnB
11712
11766
  table,
11713
11767
  ...attributes
11714
11768
  } = props;
11715
- const pinned = !!column.getIsPinned();
11769
+ const isFrozenColumn = !!column.getIsPinned();
11716
11770
  const meta = table.options.meta;
11717
11771
  const left = meta.columnOffsets[column.id];
11718
- const columnPinning = table.getLeftVisibleLeafColumns().map(c => c.id);
11719
- const className = cn('border-grey-300', getPinnedShadowClasses(column, columnPinning, scrolled), getCellAlignmentClasses((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.align), {
11772
+ const columnFreezing = table.getLeftVisibleLeafColumns().map(c => c.id);
11773
+ const className = cn('border-grey-300', getFrozenShadowClasses(column, columnFreezing, scrolled), getCellAlignmentClasses((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.align), {
11720
11774
  'cursor-pointer': !!attributes.onClick
11721
11775
  }, attributes.className);
11722
11776
  return /*#__PURE__*/React__default.createElement("div", Object.assign({}, attributes, {
11723
11777
  className: className,
11724
11778
  style: {
11725
11779
  ...style,
11726
- left: pinned && Number.isInteger(left) ? left : undefined
11780
+ left: isFrozenColumn && Number.isInteger(left) ? left : undefined
11727
11781
  },
11728
11782
  ref: ref
11729
11783
  }));
@@ -12115,7 +12169,7 @@ const Cell = function Cell(props) {
12115
12169
  const controlRef = React__default.useRef(null);
12116
12170
  const cellClassName = (_cell$column$columnDe = cell.column.columnDef.meta) === null || _cell$column$columnDe === void 0 ? void 0 : _cell$column$columnDe.className;
12117
12171
  const isActiveRow = meta.activeRowIndex === rowIndex;
12118
- const isPinned = !!cell.column.getIsPinned();
12172
+ const isFrozen = !!cell.column.getIsPinned();
12119
12173
  const isDragging = meta.dragging[cell.row.id];
12120
12174
  const isSelected = cell.row.getIsSelected();
12121
12175
  const isDataColumn = !isInternalColumn(cell.column.id);
@@ -12141,7 +12195,7 @@ const Cell = function Cell(props) {
12141
12195
  }, [isIndicatorVisible, isLastRow]);
12142
12196
  const className = cn('[&>[data-taco="tag"]]:-my-0.5', {
12143
12197
  'border-b': !isLastRow,
12144
- 'sticky z-[1]': isPinned,
12198
+ 'sticky z-[1]': isFrozen,
12145
12199
  // use isHoveredRow rather than css group-hover/row because we want to hide hover state when keyboard navigating
12146
12200
  'bg-white': !isActiveRow && !isSelected,
12147
12201
  'group-hover/row:bg-grey-100': !isActiveRow && !isSelected && !meta.shouldPauseHoverState,
@@ -12150,10 +12204,10 @@ const Cell = function Cell(props) {
12150
12204
  '!wcag-blue-500': isDragging,
12151
12205
  '[&>*]:!grayscale [&_.bg-white]:!bg-grey-100': !isEditingThisRow && isHoveringThisRowWhileEditing,
12152
12206
  '!bg-red-100': hasValidationErrorsInRow,
12153
- 'z-[1]': isPinned && isActiveRow,
12207
+ 'z-[1]': isFrozen && isActiveRow,
12154
12208
  // First column should have higher z-index so that row indicator always show on top of the cell
12155
- // control components.
12156
- 'z-[2]': isPinned && isActiveRow && index === 0,
12209
+ // control components. A z-index of 3, will show the indicator when columns are pinned.
12210
+ 'z-[3]': isFrozen && isActiveRow && index === 0,
12157
12211
  'border-blue !border-y-2 border-x-0': isIndicatorVisible,
12158
12212
  'border-l-2 rounded-l': isIndicatorVisible && index === 0,
12159
12213
  'border-r-2 rounded-r': isIndicatorVisible && index === lastColumnIndex
@@ -12193,9 +12247,6 @@ const Cell = function Cell(props) {
12193
12247
  role: 'cell'
12194
12248
  };
12195
12249
  const [detailModeEditing, setDetailModeEditing] = React__default.useState(false);
12196
- const detailModeClassName = cn({
12197
- '!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing
12198
- });
12199
12250
  // reset the editing state when we move column
12200
12251
  React__default.useEffect(() => {
12201
12252
  if (meta.editMode.columnIndex !== index) {
@@ -12234,6 +12285,9 @@ const Cell = function Cell(props) {
12234
12285
  }
12235
12286
  }
12236
12287
  };
12288
+ attributes.onBlur = () => {
12289
+ setDetailModeEditing(false);
12290
+ };
12237
12291
  if (canEditThisCell) {
12238
12292
  var _allFocussableColumnI, _allFocussableColumnI2;
12239
12293
  const firstDataColumnIndex = (_allFocussableColumnI = allFocussableColumnIndexes.at(0)) !== null && _allFocussableColumnI !== void 0 ? _allFocussableColumnI : 0;
@@ -12253,18 +12307,24 @@ const Cell = function Cell(props) {
12253
12307
  if (!detailModeEditing) {
12254
12308
  var _input$setSelectionRa, _input$value, _input$value2;
12255
12309
  (_input$setSelectionRa = input.setSelectionRange) === null || _input$setSelectionRa === void 0 ? void 0 : _input$setSelectionRa.call(input, (_input$value = input.value) === null || _input$value === void 0 ? void 0 : _input$value.length, (_input$value2 = input.value) === null || _input$value2 === void 0 ? void 0 : _input$value2.length);
12256
- setDetailModeEditing(true);
12310
+ } else {
12311
+ var _input$select;
12312
+ input === null || input === void 0 ? void 0 : (_input$select = input.select) === null || _input$select === void 0 ? void 0 : _input$select.call(input);
12257
12313
  }
12314
+ setDetailModeEditing(!detailModeEditing);
12258
12315
  return;
12259
12316
  }
12317
+ // Datepicker doesn't have keydown event handler its value doesn't change when user types inside
12318
+ // datepicker input, so we need to explicitly enable detail editing mode on typing any alphanumeric
12319
+ // character
12320
+ if (control !== null && control !== void 0 && control.closest('[data-taco="datepicker"]') && /^[a-z0-9]$/i.test(event.key)) {
12321
+ setDetailModeEditing(true);
12322
+ }
12260
12323
  }
12261
12324
  // Don't exit edit mode if the target of the escape isn't a child of the cell (e.g. if its a popover).
12262
12325
  if (event.key === 'Escape' && event.currentTarget.contains(control)) {
12263
12326
  event.preventDefault();
12264
- const input = control;
12265
12327
  if (detailModeEditing) {
12266
- var _input$select;
12267
- input === null || input === void 0 ? void 0 : (_input$select = input.select) === null || _input$select === void 0 ? void 0 : _input$select.call(input);
12268
12328
  setDetailModeEditing(false);
12269
12329
  } else {
12270
12330
  var _tableRef$current3;
@@ -12347,7 +12407,7 @@ const Cell = function Cell(props) {
12347
12407
  };
12348
12408
  }
12349
12409
  return /*#__PURE__*/React__default.createElement(ColumnBase, Object.assign({}, attributes), /*#__PURE__*/React__default.createElement(EditingCell, {
12350
- detailModeClassName: detailModeClassName,
12410
+ detailModeEditing: detailModeEditing,
12351
12411
  cell: cell,
12352
12412
  cellRef: internalRef,
12353
12413
  columnIndex: index,
@@ -12358,7 +12418,12 @@ const Cell = function Cell(props) {
12358
12418
  tableRef: tableRef,
12359
12419
  ref: controlRef,
12360
12420
  rowValues: rows[rowIndex].original,
12361
- rowsLength: rows.length
12421
+ rowsLength: rows.length,
12422
+ enableDetailModeEditing: () => {
12423
+ if (!detailModeEditing) {
12424
+ setDetailModeEditing(true);
12425
+ }
12426
+ }
12362
12427
  }));
12363
12428
  } else {
12364
12429
  if (meta.onRowClick) {
@@ -12379,13 +12444,14 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12379
12444
  cell,
12380
12445
  cellRef,
12381
12446
  columnIndex,
12382
- detailModeClassName,
12447
+ detailModeEditing,
12383
12448
  isEditingThisCell = false,
12384
12449
  onSave: handleSave,
12385
12450
  rowIndex,
12386
12451
  rowValues,
12387
12452
  table,
12388
- tableRef
12453
+ tableRef,
12454
+ enableDetailModeEditing
12389
12455
  } = props;
12390
12456
  const {
12391
12457
  editMode: {
@@ -12410,6 +12476,7 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12410
12476
  const hasValidationError = !isHoveringAnotherRowWhileEditing && !!cellValidationError;
12411
12477
  // On each save, the initialValue will be set to the new value of the cell
12412
12478
  const initialValue = React__default.useRef(value);
12479
+ const stateReset = React__default.useRef(false);
12413
12480
  // It is important that we let consumers pass a newValue as an argument because when setState is called before
12414
12481
  // onBlur then saveIfChanged method gets the stale state value. This happens because the rerender hasn't happened
12415
12482
  // before the saveIfChanged method is called.
@@ -12470,15 +12537,39 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12470
12537
  const pinnedColumnsWidth = React__default.useMemo(() => {
12471
12538
  const pinnedColumns = table.getState().columnPinning.left;
12472
12539
  if (Array.isArray(pinnedColumns) && pinnedColumns.length > 0) {
12473
- const lastPinnedColumn = pinnedColumns[pinnedColumns.length - 1];
12474
- const lastPinnedColumnOffset = meta.columnOffsets[lastPinnedColumn];
12475
- if (lastPinnedColumnOffset !== undefined) {
12540
+ const lastFrozenColumn = pinnedColumns[pinnedColumns.length - 1];
12541
+ const lastFrozenColumnOffset = meta.columnOffsets[lastFrozenColumn];
12542
+ if (lastFrozenColumnOffset !== undefined) {
12476
12543
  var _table$getState$colum;
12477
- return lastPinnedColumnOffset + ((_table$getState$colum = table.getState().columnSizing[lastPinnedColumn]) !== null && _table$getState$colum !== void 0 ? _table$getState$colum : 0);
12544
+ return lastFrozenColumnOffset + ((_table$getState$colum = table.getState().columnSizing[lastFrozenColumn]) !== null && _table$getState$colum !== void 0 ? _table$getState$colum : 0);
12478
12545
  }
12479
12546
  }
12480
12547
  return 0;
12481
12548
  }, [meta.columnOffsets, table.getState().columnSizing]);
12549
+ React__default.useEffect(() => {
12550
+ if (hasChanged(initialValue.current, state)) {
12551
+ var _controlRef$current2;
12552
+ // For an input we want to make sure that if the value is changed then we go into detail mode, so that
12553
+ // arrow keys doesn't trigger the quick mode shortcuts.
12554
+ if (((_controlRef$current2 = controlRef.current) === null || _controlRef$current2 === void 0 ? void 0 : _controlRef$current2.nodeName) === 'INPUT') {
12555
+ enableDetailModeEditing();
12556
+ }
12557
+ showIndicator();
12558
+ } else {
12559
+ hideIndicator();
12560
+ }
12561
+ return hideIndicator;
12562
+ }, [state]);
12563
+ // This effect makes sure we select the input control value when escape key is pressed
12564
+ React__default.useEffect(() => {
12565
+ var _controlRef$current3, _controlRef$current4;
12566
+ const isControlInput = ((_controlRef$current3 = controlRef.current) === null || _controlRef$current3 === void 0 ? void 0 : _controlRef$current3.nodeName) === 'INPUT' && ((_controlRef$current4 = controlRef.current) === null || _controlRef$current4 === void 0 ? void 0 : _controlRef$current4.getAttribute('data-inline-editing-component')) === 'true';
12567
+ if (stateReset.current && isControlInput) {
12568
+ var _controlRef$current5;
12569
+ (_controlRef$current5 = controlRef.current) === null || _controlRef$current5 === void 0 ? void 0 : _controlRef$current5.select();
12570
+ }
12571
+ stateReset.current = false;
12572
+ }, [stateReset.current]);
12482
12573
  const handleFocus = event => {
12483
12574
  var _event$target, _cellRef$current;
12484
12575
  meta.editMode.setColumn(columnIndex);
@@ -12494,14 +12585,17 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12494
12585
  (_tableRef$current4 = tableRef.current) === null || _tableRef$current4 === void 0 ? void 0 : _tableRef$current4.scrollTo(leftOffset - pinnedColumnsWidth, tableRef.current.scrollTop);
12495
12586
  }
12496
12587
  };
12497
- React__default.useEffect(() => {
12498
- if (hasChanged(initialValue.current, state)) {
12499
- showIndicator();
12500
- } else {
12501
- hideIndicator();
12588
+ // In order to reset the value of an input when escape key is pressed this keydown handler is required.
12589
+ // Instead of adding this event handler in parent component, this handler is added here because we have access
12590
+ // to the state handler of the control component.
12591
+ const handleKeyDown = event => {
12592
+ const control = event.target;
12593
+ const isControlInput = control.nodeName === 'INPUT' && (control === null || control === void 0 ? void 0 : control.getAttribute('data-inline-editing-component')) === 'true';
12594
+ if (isControlInput && event.key === 'Escape') {
12595
+ setState(initialValue.current);
12596
+ stateReset.current = true;
12502
12597
  }
12503
- return hideIndicator;
12504
- }, [state]);
12598
+ };
12505
12599
  const showIndicator = () => {
12506
12600
  var _table$getState$sorti;
12507
12601
  let willRowMoveReason = null;
@@ -12550,6 +12644,9 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12550
12644
  const className = cn(getCellAlignmentClasses((_cell$column$columnDe4 = cell.column.columnDef.meta) === null || _cell$column$columnDe4 === void 0 ? void 0 : _cell$column$columnDe4.align));
12551
12645
  const indicatorMountNode = (_cellRef$current2 = cellRef.current) === null || _cellRef$current2 === void 0 ? void 0 : (_cellRef$current2$par = _cellRef$current2.parentElement) === null || _cellRef$current2$par === void 0 ? void 0 : _cellRef$current2$par.querySelector(':first-child');
12552
12646
  let controlComponent;
12647
+ const detailModeClassName = cn({
12648
+ '!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing
12649
+ });
12553
12650
  if (cellControl) {
12554
12651
  if (typeof cellControl === 'function') {
12555
12652
  controlComponent = cellControl({
@@ -12559,14 +12656,15 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12559
12656
  ref: controlRef,
12560
12657
  setValue: setState,
12561
12658
  value: state,
12562
- 'data-inline-editing-component': 'true',
12563
- className: detailModeClassName
12659
+ 'data-inline-editing-component': 'true'
12564
12660
  }, cell.row.original);
12565
12661
  } else {
12566
12662
  switch (cellControl) {
12567
12663
  case 'datepicker':
12568
12664
  controlComponent = /*#__PURE__*/React__default.createElement(Datepicker, Object.assign({}, attributes, {
12569
- className: detailModeClassName,
12665
+ className: cn({
12666
+ '[&_input]:!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing
12667
+ }),
12570
12668
  invalid: hasValidationError,
12571
12669
  onBlur: event => {
12572
12670
  const newDate = event.detail;
@@ -12595,7 +12693,8 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12595
12693
  setState(event.target.value);
12596
12694
  },
12597
12695
  ref: controlRef,
12598
- value: String(state !== null && state !== void 0 ? state : '')
12696
+ value: String(state !== null && state !== void 0 ? state : ''),
12697
+ onKeyDown: handleKeyDown
12599
12698
  }));
12600
12699
  break;
12601
12700
  }
@@ -12613,7 +12712,7 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
12613
12712
  }));
12614
12713
 
12615
12714
  const Header$1 = function Header(props) {
12616
- var _header$column$column, _header$column$column2, _asc$desc$header$colu, _header$column$column4, _header$column$column5, _header$column$column6, _header$column$column7, _asc$desc$header$colu2, _header$column$column8;
12715
+ var _header$column$column, _header$column$column2, _asc$desc$header$colu, _header$column$column4, _header$column$column5, _header$column$column6, _header$column$column7, _asc$desc$header$colu2, _header$column$column8, _header$column$column9;
12617
12716
  const {
12618
12717
  header,
12619
12718
  index,
@@ -12623,11 +12722,14 @@ const Header$1 = function Header(props) {
12623
12722
  ...columnProps
12624
12723
  } = props;
12625
12724
  const textRef = React__default.useRef(null);
12626
- const pinned = !!header.column.getIsPinned();
12725
+ const frozen = !!header.column.getIsPinned();
12627
12726
  const isOtherColumnBeingResized = table.getState().columnSizingInfo.isResizingColumn && table.getState().columnSizingInfo.isResizingColumn !== header.id;
12727
+ const {
12728
+ enableColumnFreezing
12729
+ } = table.options.meta;
12628
12730
  const className = cn('group/header sticky top-0 bg-white border-b-2 relative font-bold z-[5] hover:z-[6]', {
12629
12731
  'z-[6]': header.column.getIsResizing(),
12630
- 'z-[7]': pinned,
12732
+ 'z-[7]': frozen,
12631
12733
  'cursor-pointer select-none': header.column.getCanSort(),
12632
12734
  'hover:bg-grey-100': header.column.getCanSort() || header.column.getCanResize() || ((_header$column$column = header.column.columnDef.meta) === null || _header$column$column === void 0 ? void 0 : _header$column$column.menu),
12633
12735
  'pointer-events-none': isOtherColumnBeingResized
@@ -12639,7 +12741,7 @@ const Header$1 = function Header(props) {
12639
12741
  const size = Math.ceil(node.getBoundingClientRect().width);
12640
12742
  table.setColumnSizing(sizes => ({
12641
12743
  ...sizes,
12642
- [header.id]: !isInternalColumn(header.id) && size < MIN_COLUMN_SIZE ? MIN_COLUMN_SIZE : size
12744
+ [header.id]: !isInternalFrozenColumn(header.id) && size < MIN_COLUMN_SIZE ? MIN_COLUMN_SIZE : size
12643
12745
  }));
12644
12746
  }
12645
12747
  };
@@ -12663,7 +12765,7 @@ const Header$1 = function Header(props) {
12663
12765
  ...sizes
12664
12766
  };
12665
12767
  if (size) {
12666
- nextSizes[header.id] = !isInternalColumn(header.id) && size < MIN_COLUMN_SIZE ? MIN_COLUMN_SIZE : size;
12768
+ nextSizes[header.id] = !isInternalFrozenColumn(header.id) && size < MIN_COLUMN_SIZE ? MIN_COLUMN_SIZE : size;
12667
12769
  } else {
12668
12770
  delete nextSizes[header.id];
12669
12771
  }
@@ -12696,7 +12798,7 @@ const Header$1 = function Header(props) {
12696
12798
  ref: refCallback,
12697
12799
  role: "columnheader",
12698
12800
  "data-column-index": index
12699
- }), isInternalColumn(header.id) ? reactTable$1.flexRender(header.column.columnDef.header, header.getContext()) : /*#__PURE__*/React__default.createElement("div", {
12801
+ }), isInternalFrozenColumn(header.id) ? reactTable$1.flexRender(header.column.columnDef.header, header.getContext()) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
12700
12802
  className: cn('flex flex-grow overflow-hidden', {
12701
12803
  'group-hover/header:-ml-2': !!header.column.getIsSorted() && !!((_header$column$column4 = header.column.columnDef.meta) !== null && _header$column$column4 !== void 0 && _header$column$column4.menu)
12702
12804
  }, getCellAlignmentClasses((_header$column$column5 = header.column.columnDef.meta) === null || _header$column$column5 === void 0 ? void 0 : _header$column$column5.align))
@@ -12712,9 +12814,12 @@ const Header$1 = function Header(props) {
12712
12814
  name: "chevron-down-solid",
12713
12815
  className: "pointer-events-none -my-0.5"
12714
12816
  })
12715
- }[header.column.getIsSorted()]) !== null && _asc$desc$header$colu2 !== void 0 ? _asc$desc$header$colu2 : null), (_header$column$column8 = header.column.columnDef.meta) !== null && _header$column$column8 !== void 0 && _header$column$column8.menu ? /*#__PURE__*/React__default.createElement(HeaderMenu, {
12716
- header: header
12717
- }) : null, header.column.getCanResize() ? /*#__PURE__*/React__default.createElement(Tooltip, {
12817
+ }[header.column.getIsSorted()]) !== null && _asc$desc$header$colu2 !== void 0 ? _asc$desc$header$colu2 : null), (_header$column$column8 = header.column.columnDef.meta) !== null && _header$column$column8 !== void 0 && _header$column$column8.menu || enableColumnFreezing ? /*#__PURE__*/React__default.createElement(HeaderMenu, {
12818
+ menu: (_header$column$column9 = header.column.columnDef.meta) === null || _header$column$column9 === void 0 ? void 0 : _header$column$column9.menu,
12819
+ enableColumnFreezing: enableColumnFreezing,
12820
+ table: table,
12821
+ columnIndex: index
12822
+ }) : null), header.column.getCanResize() ? /*#__PURE__*/React__default.createElement(Tooltip, {
12718
12823
  placement: "top",
12719
12824
  title: "Resize column"
12720
12825
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -12736,26 +12841,84 @@ const Header$1 = function Header(props) {
12736
12841
  }))) : null);
12737
12842
  };
12738
12843
  const HeaderMenu = ({
12739
- header
12844
+ menu,
12845
+ enableColumnFreezing,
12846
+ table,
12847
+ columnIndex
12740
12848
  }) => {
12741
12849
  const [open, setOpen] = React__default.useState(false);
12850
+ const {
12851
+ texts
12852
+ } = useLocalization();
12853
+ const {
12854
+ frozenColumnsCount,
12855
+ setFrozenColumnsCount
12856
+ } = table.options.meta;
12857
+ const columns = table.getAllLeafColumns();
12858
+ const {
12859
+ columnVisibility,
12860
+ columnOrder
12861
+ } = table.getState();
12862
+ const visibleInternalColumnsCount = React__default.useMemo(() => columns.filter(column => isInternalFrozenColumn(column.id)).length, [columns]);
12863
+ const columnPosition = columnIndex + 1;
12864
+ const externalFrozenColumnsCount = columnPosition - visibleInternalColumnsCount;
12865
+ const isSomeExternalColumnFrozen = frozenColumnsCount !== 0;
12866
+ const freeAllColumns = () => {
12867
+ setFrozenColumnsCount(0);
12868
+ };
12869
+ const freezeColumns = () => {
12870
+ setFrozenColumnsCount(externalFrozenColumnsCount);
12871
+ };
12742
12872
  const className = cn('-my-0.5 -mr-1 -ml-0.5 hidden !h-6 !min-h-[theme(spacing.6)] !w-6 !min-w-[theme(spacing.6)] flex-shrink-0 justify-end group-hover/header:flex', {
12743
12873
  '!flex': open
12744
12874
  });
12745
- return header.column.columnDef.meta ?
12746
- /*#__PURE__*/
12747
- // This div catches the mousedown events from menu item and menu trigger and prevents
12748
- // mousedown event from bubbling up to the Header component to prevent toggling sorting
12749
- React__default.createElement("div", {
12750
- onMouseDown: event => event.stopPropagation()
12751
- }, header.column.columnDef.meta.menu({
12875
+ const freezeMenuItems = [/*#__PURE__*/React__default.createElement(Menu$1.Item, {
12876
+ icon: "column-freeze",
12877
+ onClick: freezeColumns,
12878
+ key: "_freeze-columns_"
12879
+ }, externalFrozenColumnsCount > 1 ? texts.table2.columns.menu.freezeColumns.replace('[X]', String(externalFrozenColumnsCount)) : texts.table2.columns.menu.freezeColumns.replace('[X] ', '')), ...(isSomeExternalColumnFrozen ? [/*#__PURE__*/React__default.createElement(Menu$1.Item, {
12880
+ icon: "column-unfreeze",
12881
+ onClick: freeAllColumns,
12882
+ key: "_unfreeze-columns_"
12883
+ }, texts.table2.columns.menu.unfreezeColumns)] : [])];
12884
+ React__default.useEffect(() => {
12885
+ // Update column pinning/freezing whenever frozen columns count changes, or column order or visiblity changes
12886
+ const totalFrozenColumnsCount = visibleInternalColumnsCount + frozenColumnsCount;
12887
+ table.setColumnPinning({
12888
+ left: columns.slice(0, totalFrozenColumnsCount).map(column => column.id),
12889
+ right: []
12890
+ });
12891
+ }, [frozenColumnsCount, columnVisibility, columnOrder, visibleInternalColumnsCount]);
12892
+ const menuProps = {
12752
12893
  trigger: /*#__PURE__*/React__default.createElement(IconButton, {
12753
12894
  className: className,
12754
12895
  icon: "more"
12755
12896
  }),
12756
12897
  open: open,
12757
12898
  onChange: setOpen
12758
- })) : null;
12899
+ };
12900
+ let menuComponent = null;
12901
+ if (menu) {
12902
+ menuComponent = menu(menuProps);
12903
+ if (enableColumnFreezing) {
12904
+ const menuContent = React__default.Children.only(menuComponent.props.children);
12905
+ const menuContentChildren = React__default.Children.toArray(menuContent.props.children);
12906
+ const menuItemsWithFreezingItems = [...menuContentChildren, /*#__PURE__*/React__default.createElement(Menu$1.Separator, null), ...freezeMenuItems];
12907
+ const menuContentWithFreezingItems = /*#__PURE__*/React__default.createElement(Menu$1.Content, null, menuItemsWithFreezingItems.map((item, key) => /*#__PURE__*/React__default.cloneElement(item, {
12908
+ key
12909
+ })));
12910
+ menuComponent = /*#__PURE__*/React__default.cloneElement(menuComponent, {
12911
+ children: menuContentWithFreezingItems
12912
+ });
12913
+ }
12914
+ } else if (enableColumnFreezing) {
12915
+ menuComponent = /*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, null, freezeMenuItems));
12916
+ }
12917
+ // This div catches the mousedown events from menu item and menu trigger and prevents
12918
+ // mousedown event from bubbling up to the Header component to prevent toggling sorting
12919
+ return menuComponent ? /*#__PURE__*/React__default.createElement("div", {
12920
+ onMouseDown: event => event.stopPropagation()
12921
+ }, menuComponent) : null;
12759
12922
  };
12760
12923
 
12761
12924
  const Footer$3 = function Footer(props) {
@@ -12766,9 +12929,9 @@ const Footer$3 = function Footer(props) {
12766
12929
  table,
12767
12930
  ...columnProps
12768
12931
  } = props;
12769
- const isPinned = !!footer.column.getIsPinned();
12932
+ const isFrozen = !!footer.column.getIsPinned();
12770
12933
  const className = cn('group/header sticky bottom-0 bg-white border-t-2 relative', getCellSizingClasses('normal'), {
12771
- 'z-[1]': isPinned
12934
+ 'z-[1]': isFrozen
12772
12935
  }, props.className);
12773
12936
  return /*#__PURE__*/React__default.createElement(ColumnBase, Object.assign({}, columnProps, {
12774
12937
  // base props
@@ -12790,9 +12953,9 @@ function useColumnDefinitions(children, options, tableRef) {
12790
12953
  const columnHelper = reactTable$1.createColumnHelper();
12791
12954
  return React__default.useMemo(() => {
12792
12955
  var _options$actionsForRo;
12956
+ let internalFrozenColumnCount = 0;
12793
12957
  // cannot be typed correctly until https://github.com/TanStack/table/discussions/4530 is resolved
12794
12958
  const columns = [];
12795
- const defaultColumnPinning = [];
12796
12959
  const defaultColumnSizing = {};
12797
12960
  const defaultColumnVisibility = {};
12798
12961
  const defaultSorting = [];
@@ -12800,9 +12963,6 @@ function useColumnDefinitions(children, options, tableRef) {
12800
12963
  React__default.Children.toArray(children).filter(child => !!child).forEach(child => {
12801
12964
  if ( /*#__PURE__*/React__default.isValidElement(child)) {
12802
12965
  var _child$props$minWidth;
12803
- if (child.props.defaultPinned && options.enableColumnPinning) {
12804
- defaultColumnPinning.push(child.props.accessor);
12805
- }
12806
12966
  if (child.props.defaultWidth) {
12807
12967
  defaultColumnSizing[child.props.accessor] = child.props.defaultWidth;
12808
12968
  }
@@ -12861,22 +13021,22 @@ function useColumnDefinitions(children, options, tableRef) {
12861
13021
  });
12862
13022
  if (options.enableRowExpansion && options.expandedRowRenderer) {
12863
13023
  columns.unshift(columnHelper.display(createRowExpansionColumn(options.expandedRowRenderer, texts)));
12864
- defaultColumnPinning.unshift(COLUMN_ID_FOR_EXPANSION);
13024
+ internalFrozenColumnCount++;
12865
13025
  }
12866
13026
  if (options.enableRowSelection) {
12867
13027
  columns.unshift(columnHelper.display(createRowSelectionColumn(options.enableMultipleRowSelection, lastSelectedRowIndex, options.onRowDrag, tableRef, texts)));
12868
- defaultColumnPinning.unshift(COLUMN_ID_FOR_SELECTION);
13028
+ internalFrozenColumnCount++;
12869
13029
  }
12870
13030
  if (options.onRowDrag) {
12871
13031
  columns.unshift(columnHelper.display(createRowDraggableColumn(options.onRowDrag, texts)));
12872
- defaultColumnPinning.unshift(COLUMN_ID_FOR_DRAGGABLE);
13032
+ internalFrozenColumnCount++;
12873
13033
  }
12874
13034
  if ((_options$actionsForRo = options.actionsForRow) !== null && _options$actionsForRo !== void 0 && _options$actionsForRo.length) {
12875
13035
  columns.push(columnHelper.display(createRowActionsColumn(options.actionsForRow, texts)));
12876
13036
  }
12877
13037
  return {
12878
13038
  columns,
12879
- defaultColumnPinning,
13039
+ internalFrozenColumnCount,
12880
13040
  defaultColumnSizing,
12881
13041
  defaultColumnVisibility,
12882
13042
  defaultSorting,
@@ -12891,15 +13051,18 @@ const getSortingFn = dataType => {
12891
13051
  return 'auto';
12892
13052
  };
12893
13053
 
12894
- // pinned columns have position sticky, and because we support more than one of them
13054
+ // frozen columns have position sticky, and because we support more than one of them
12895
13055
  // we must set a 'left' css value. this hook listens to changes on state that will
12896
- // affect the left offset (resize, visibility, pinning) and updates offsets based on width
13056
+ // affect the left offset (resize, visibility, freezing) and updates offsets based on width
12897
13057
  const useColumnOffsetStateListener = (table, setColumnOffsets) => {
12898
13058
  const {
12899
13059
  columnOrder,
12900
13060
  columnSizingInfo,
12901
13061
  columnVisibility
12902
13062
  } = table.getState();
13063
+ const {
13064
+ frozenColumnsCount
13065
+ } = table.options.meta;
12903
13066
  React__default.useEffect(() => {
12904
13067
  const offsets = {};
12905
13068
  // store left offsets for each visible column
@@ -12908,7 +13071,7 @@ const useColumnOffsetStateListener = (table, setColumnOffsets) => {
12908
13071
  return offset + column.getSize();
12909
13072
  }, 0);
12910
13073
  setColumnOffsets(offsets);
12911
- }, [columnOrder, columnSizingInfo, columnVisibility]);
13074
+ }, [columnOrder, columnSizingInfo, columnVisibility, frozenColumnsCount]);
12912
13075
  };
12913
13076
 
12914
13077
  const useRowSelectionListener = (table, onRowSelect) => {
@@ -12933,16 +13096,16 @@ const useSettingsStateListener = (table, onChangeSettings) => {
12933
13096
  handler = setTimeout(() => onChangeSettings({
12934
13097
  columnFilters: state.columnFilters,
12935
13098
  columnOrder: state.columnOrder,
12936
- columnPinning: state.columnPinning,
12937
13099
  columnSizing: state.columnSizing,
12938
13100
  columnVisibility: state.columnVisibility,
13101
+ frozenColumnCount: meta.frozenColumnsCount,
12939
13102
  globalFilter: state.globalFilter,
12940
13103
  rowDensity: meta.rowDensity,
12941
13104
  sorting: state.sorting
12942
13105
  }), 250);
12943
13106
  }
12944
13107
  return () => clearTimeout(handler);
12945
- }, [state.columnFilters, state.columnOrder, state.columnPinning, state.columnSizing, state.columnVisibility, state.globalFilter, meta.rowDensity, state.sorting]);
13108
+ }, [state.columnFilters, state.columnOrder, meta.frozenColumnsCount, state.columnSizing, state.columnVisibility, state.globalFilter, meta.rowDensity, state.sorting]);
12946
13109
  };
12947
13110
 
12948
13111
  const useActiveRow = (defaultActiveRowIndex = 0) => {
@@ -12990,14 +13153,14 @@ const useActiveRowStateListener = (table, rows, activeRowIndex) => {
12990
13153
  };
12991
13154
 
12992
13155
  function useTable$1(children, props, ref) {
12993
- var _settings$columnOrder, _ref, _settings$columnPinni, _settings$columnPinni2, _settings$columnSizin, _settings$columnVisib, _settings$rowDensity;
13156
+ var _settings$frozenColum, _settings$columnOrder, _settings$columnSizin, _settings$columnVisib, _settings$rowDensity;
12994
13157
  const {
12995
13158
  actionsForRow = [],
12996
13159
  data,
12997
13160
  defaultActiveRowIndex,
12998
13161
  disableColumnFiltering = false,
12999
13162
  disableColumnHiding = false,
13000
- disableColumnPinning = false,
13163
+ disableColumnFreezing = false,
13001
13164
  disableColumnReordering = false,
13002
13165
  disableColumnResizing = false,
13003
13166
  disableRowDensity = false,
@@ -13024,7 +13187,7 @@ function useTable$1(children, props, ref) {
13024
13187
  const enableMultipleRowSelection = !disableMultipleRowSelection && enableRowSelection;
13025
13188
  const {
13026
13189
  columns,
13027
- defaultColumnPinning,
13190
+ internalFrozenColumnCount,
13028
13191
  defaultColumnSizing,
13029
13192
  defaultSorting,
13030
13193
  defaultColumnVisibility,
@@ -13033,7 +13196,7 @@ function useTable$1(children, props, ref) {
13033
13196
  actionsForRow,
13034
13197
  enableColumnFiltering: !disableColumnFiltering,
13035
13198
  enableColumnHiding: !disableColumnHiding,
13036
- enableColumnPinning: !disableColumnPinning,
13199
+ enableColumnFreezing: !disableColumnFreezing,
13037
13200
  enableRowExpansion,
13038
13201
  enableRowSelection,
13039
13202
  enableMultipleRowSelection,
@@ -13041,11 +13204,13 @@ function useTable$1(children, props, ref) {
13041
13204
  onRowDrag
13042
13205
  }, ref);
13043
13206
  const lastSortedOrFilteredRows = React__default.useRef(null);
13207
+ const totalFrozenColumns = internalFrozenColumnCount + ((_settings$frozenColum = settings === null || settings === void 0 ? void 0 : settings.frozenColumnCount) !== null && _settings$frozenColum !== void 0 ? _settings$frozenColum : 0);
13208
+ const frozenColumns = columns.slice(0, totalFrozenColumns).map(column => column.id);
13044
13209
  // defaults
13045
13210
  const initialState = {
13046
13211
  columnOrder: (_settings$columnOrder = settings === null || settings === void 0 ? void 0 : settings.columnOrder) !== null && _settings$columnOrder !== void 0 ? _settings$columnOrder : columns.map(column => column.id),
13047
13212
  columnPinning: {
13048
- left: (_ref = (_settings$columnPinni = settings === null || settings === void 0 ? void 0 : (_settings$columnPinni2 = settings.columnPinning) === null || _settings$columnPinni2 === void 0 ? void 0 : _settings$columnPinni2.left) !== null && _settings$columnPinni !== void 0 ? _settings$columnPinni : defaultColumnPinning) !== null && _ref !== void 0 ? _ref : [],
13213
+ left: frozenColumns,
13049
13214
  right: []
13050
13215
  },
13051
13216
  columnSizing: (_settings$columnSizin = settings === null || settings === void 0 ? void 0 : settings.columnSizing) !== null && _settings$columnSizin !== void 0 ? _settings$columnSizin : defaultColumnSizing,
@@ -13063,6 +13228,8 @@ function useTable$1(children, props, ref) {
13063
13228
  const [dragging, setDragging] = React__default.useState({});
13064
13229
  const [shouldPauseSortingAndFiltering, setShouldPauseSortingAndFiltering] = React__default.useState(false);
13065
13230
  const [shouldDisableTableActions, setShouldDisableTableActions] = React__default.useState(false);
13231
+ // Frozen column count is the count of external columns that are frozen
13232
+ const [frozenColumnsCount, setFrozenColumnsCount] = React__default.useState(totalFrozenColumns - internalFrozenColumnCount);
13066
13233
  // For some reason, using state instead of ref didn't work as expected, that's why ref is used
13067
13234
  const focussableColumnIndexes = React__default.useRef([]);
13068
13235
  // some options get set even if they are undefined, so we have to do it conditionally
@@ -13072,7 +13239,7 @@ function useTable$1(children, props, ref) {
13072
13239
  enableColumnResizing: !disableColumnResizing,
13073
13240
  enableGlobalFilter: !disableSearch,
13074
13241
  enableHiding: !disableColumnHiding,
13075
- enablePinning: !disableColumnPinning,
13242
+ enablePinning: !disableColumnFreezing,
13076
13243
  enableRowSelection: enableRowSelection,
13077
13244
  enableMultiRowSelection: enableMultipleRowSelection,
13078
13245
  enableSorting: !disableSorting
@@ -13133,9 +13300,13 @@ function useTable$1(children, props, ref) {
13133
13300
  dragging,
13134
13301
  setDragging,
13135
13302
  // computed
13303
+ enableColumnFreezing: !disableColumnFreezing,
13136
13304
  enableColumnReordering: !disableColumnReordering,
13305
+ enableColumnHiding: !disableColumnHiding,
13137
13306
  shouldPauseHoverState,
13138
13307
  setShouldPauseHoverState,
13308
+ frozenColumnsCount,
13309
+ setFrozenColumnsCount,
13139
13310
  // resorting
13140
13311
  shouldPauseSortingAndFiltering,
13141
13312
  setShouldPauseSortingAndFiltering,
@@ -13333,6 +13504,10 @@ function Container(externalProps) {
13333
13504
  }
13334
13505
  Container.displayName = 'SortableContainer';
13335
13506
 
13507
+ const isFormElement = element => {
13508
+ const formElementNodeNames = ['BUTTON', 'INPUT', 'TEXTAREA', 'SELECT', 'FIELDSET'];
13509
+ return formElementNodeNames.includes(element.nodeName);
13510
+ };
13336
13511
  function Item$3(props) {
13337
13512
  const {
13338
13513
  asChild,
@@ -13356,7 +13531,7 @@ function Item$3(props) {
13356
13531
  };
13357
13532
  const onPointerDown = event => {
13358
13533
  // allow form components, like checkboxes, to be active
13359
- if (event.target === event.currentTarget) {
13534
+ if (event.currentTarget.contains(event.target) && !isFormElement(event.target)) {
13360
13535
  listeners === null || listeners === void 0 ? void 0 : listeners.onPointerDown(event);
13361
13536
  }
13362
13537
  };
@@ -13396,50 +13571,80 @@ function List$1(externalProps) {
13396
13571
  }
13397
13572
  List$1.displayName = 'SortableList';
13398
13573
 
13574
+ const Truncate = ({
13575
+ tooltip,
13576
+ children
13577
+ }) => {
13578
+ const ref = React__default.useRef(null);
13579
+ const [mounted, setMounted] = React__default.useState(false);
13580
+ const {
13581
+ truncated
13582
+ } = useTruncated(ref.current, [mounted]);
13583
+ React__default.useEffect(() => {
13584
+ setMounted(true);
13585
+ return () => setMounted(false);
13586
+ }, []);
13587
+ const clonedChildrenWithRef = /*#__PURE__*/React__default.cloneElement(React__default.Children.only(children), {
13588
+ ref,
13589
+ className: cn(children.props.className, 'truncate')
13590
+ });
13591
+ if (truncated) {
13592
+ return /*#__PURE__*/React__default.createElement(Tooltip, {
13593
+ title: tooltip
13594
+ }, clonedChildrenWithRef);
13595
+ }
13596
+ return clonedChildrenWithRef;
13597
+ };
13598
+
13399
13599
  const OrderableColumn = /*#__PURE__*/React__default.forwardRef((props, ref) => {
13400
- var _column$columnDef$hea;
13600
+ var _ref, _column$columnDef$hea, _column$columnDef$hea2;
13401
13601
  const {
13402
13602
  canBeReordered,
13403
13603
  column,
13404
- isReorderingAllowed,
13604
+ children,
13605
+ isColumnFixed,
13405
13606
  ...attributes
13406
13607
  } = props;
13407
13608
  let icon;
13408
13609
  if (canBeReordered) {
13409
13610
  icon = /*#__PURE__*/React__default.createElement(Icon, {
13410
13611
  name: "drag",
13411
- className: "text-grey-500 hover:text-grey-700 mr-0.5 -ml-2 -mt-px cursor-move"
13612
+ /** top margin of -3px on Icon, is added to make sure that each OrderableColumn is of 32px height **/
13613
+ className: "text-grey-500 hover:text-grey-700 mr-0.5 -ml-[6px] -mt-[3px] inline-block !h-5 !w-5 cursor-move"
13412
13614
  });
13413
- } else if (isReorderingAllowed) {
13615
+ } else if (isColumnFixed) {
13414
13616
  icon = /*#__PURE__*/React__default.createElement("span", {
13415
13617
  className: "mr-0.5 inline-flex w-4"
13416
13618
  });
13417
13619
  }
13620
+ // columnName should be a string
13621
+ const columnName = (_ref = (_column$columnDef$hea = (_column$columnDef$hea2 = column.columnDef.header) === null || _column$columnDef$hea2 === void 0 ? void 0 : _column$columnDef$hea2.toString()) !== null && _column$columnDef$hea !== void 0 ? _column$columnDef$hea : column.columnDef.id) !== null && _ref !== void 0 ? _ref : '';
13418
13622
  return /*#__PURE__*/React__default.createElement("div", Object.assign({}, attributes, {
13419
- className: "hover:bg-grey-100 aria-pressed:bg-grey-200 flex w-full items-center justify-between gap-x-2 rounded py-1 px-2 aria-pressed:z-10",
13623
+ className: "hover:bg-grey-100 aria-pressed:bg-grey-200 flex w-full items-center justify-between gap-x-2 rounded py-[6px] px-2 aria-pressed:z-10",
13420
13624
  ref: ref
13421
- }), /*#__PURE__*/React__default.createElement("span", {
13422
- className: "pointer-events-none"
13423
- }, icon, (_column$columnDef$hea = column.columnDef.header) !== null && _column$columnDef$hea !== void 0 ? _column$columnDef$hea : column.columnDef.id), column.getCanHide() ? /*#__PURE__*/React__default.createElement(Checkbox, {
13424
- checked: column.getIsVisible(),
13425
- onChange: column.toggleVisibility
13426
- }) : null);
13625
+ }), /*#__PURE__*/React__default.createElement(Truncate, {
13626
+ tooltip: columnName
13627
+ }, /*#__PURE__*/React__default.createElement("span", {
13628
+ className: "select-none"
13629
+ }, icon, columnName)), children);
13427
13630
  });
13428
13631
  const isOrderingAllowed = (table, column) => {
13429
13632
  var _column$columnDef$met;
13430
13633
  const meta = table.options.meta;
13431
- if (table.options.enablePinning) {
13432
- return true;
13433
- }
13434
13634
  return meta.enableColumnReordering ? !((_column$columnDef$met = column.columnDef.meta) !== null && _column$columnDef$met !== void 0 && _column$columnDef$met.disableReordering) : false;
13435
13635
  };
13636
+ const isColumnOrderingDisabled = (table, column) => {
13637
+ var _column$columnDef$met2;
13638
+ const meta = table.options.meta;
13639
+ return meta.enableColumnReordering && !!((_column$columnDef$met2 = column.columnDef.meta) !== null && _column$columnDef$met2 !== void 0 && _column$columnDef$met2.disableReordering);
13640
+ };
13436
13641
  const SortableColumnContainer = ({
13437
13642
  state,
13438
13643
  moveColumn,
13439
13644
  reorderColumn,
13440
- table
13645
+ table,
13646
+ query
13441
13647
  }) => {
13442
- var _ref;
13443
13648
  const {
13444
13649
  texts
13445
13650
  } = useLocalization();
@@ -13448,7 +13653,7 @@ const SortableColumnContainer = ({
13448
13653
  const draggedColumn = state[listId].find(c => c.id === activeId);
13449
13654
  const targetColumn = state[listId].find(c => c.id === overId);
13450
13655
  if (draggedColumn && targetColumn) {
13451
- reorderColumn(draggedColumn.id, targetColumn.id, listId === 'pinned');
13656
+ reorderColumn(draggedColumn.id, targetColumn.id, listId === 'visible');
13452
13657
  }
13453
13658
  };
13454
13659
  const move = (activeId, oldListId) => {
@@ -13457,80 +13662,114 @@ const SortableColumnContainer = ({
13457
13662
  moveColumn(column);
13458
13663
  }
13459
13664
  };
13460
- const handleDoubleClick = (id, status) => table.options.enablePinning ? event => {
13461
- event.stopPropagation();
13462
- move(id, status);
13463
- } : undefined;
13464
- const isReorderingAllowed = (_ref = meta.enableColumnReordering || table.options.enablePinning) !== null && _ref !== void 0 ? _ref : false;
13465
- if (!table.options.enablePinning) {
13665
+ const handleColumnCheckboxChange = column => () => {
13666
+ moveColumn === null || moveColumn === void 0 ? void 0 : moveColumn(column);
13667
+ column.toggleVisibility();
13668
+ };
13669
+ const isColumnHidingAllowed = meta.enableColumnHiding;
13670
+ const isQueryFilterNotApplied = query === '';
13671
+ const filteredHiddenColumns = state.hidden.filter(column => {
13672
+ var _column$columnDef$hea3;
13673
+ return (_column$columnDef$hea3 = column.columnDef.header) === null || _column$columnDef$hea3 === void 0 ? void 0 : _column$columnDef$hea3.toString().toLowerCase().includes(query.toLowerCase());
13674
+ });
13675
+ const filteredVisibleColumns = state.visible.filter(column => {
13676
+ var _column$columnDef$hea4;
13677
+ return (_column$columnDef$hea4 = column.columnDef.header) === null || _column$columnDef$hea4 === void 0 ? void 0 : _column$columnDef$hea4.toString().toLowerCase().includes(query.toLowerCase());
13678
+ });
13679
+ const visibleListDescriptionText = isQueryFilterNotApplied ? texts.table2.columnSettings.columnsVisibleDrop : texts.table2.columnSettings.noVisibleColumns;
13680
+ const hiddenListDescriptionText = isQueryFilterNotApplied ? texts.table2.columnSettings.columnsHiddenDrop : texts.table2.columnSettings.noHiddenColumns;
13681
+ if (isColumnHidingAllowed) {
13466
13682
  return /*#__PURE__*/React__default.createElement(Container, {
13467
13683
  reorder: reorder,
13468
13684
  move: move
13469
- }, /*#__PURE__*/React__default.createElement(List$1, {
13470
- id: "other",
13471
- className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-x-hidden px-2"
13472
- }, state.other.map(column => {
13473
- var _column$columnDef$met2;
13474
- const canBeReordered = isOrderingAllowed(table, column);
13685
+ }, /*#__PURE__*/React__default.createElement(Truncate, {
13686
+ tooltip: texts.table2.columnSettings.columnsVisible
13687
+ }, /*#__PURE__*/React__default.createElement("h5", {
13688
+ className: "mx-4 my-[6px]"
13689
+ }, texts.table2.columnSettings.columnsVisible)), /*#__PURE__*/React__default.createElement(List$1, {
13690
+ id: "visible",
13691
+ className: "flex min-h-[theme(spacing.8)] flex-col overflow-hidden px-2"
13692
+ }, filteredVisibleColumns.length ? filteredVisibleColumns.map(column => {
13693
+ // When searching a column, we disable reordering and make it fixed
13694
+ const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;
13695
+ const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;
13475
13696
  return /*#__PURE__*/React__default.createElement(Item$3, {
13476
13697
  key: column.id,
13477
- disabled: (_column$columnDef$met2 = column.columnDef.meta) === null || _column$columnDef$met2 === void 0 ? void 0 : _column$columnDef$met2.disableReordering,
13698
+ disabled: !canBeReordered,
13478
13699
  id: column.id,
13479
13700
  asChild: true
13480
13701
  }, /*#__PURE__*/React__default.createElement(OrderableColumn, {
13481
13702
  canBeReordered: canBeReordered,
13482
13703
  column: column,
13483
- isReorderingAllowed: isReorderingAllowed,
13484
- onDoubleClick: handleDoubleClick(column.id, 'other')
13485
- }));
13486
- })));
13704
+ isColumnFixed: isColumnFixed
13705
+ }, column.getCanHide() ? /*#__PURE__*/React__default.createElement(Checkbox, {
13706
+ className: "!mt-0",
13707
+ checked: column.getIsVisible(),
13708
+ onChange: handleColumnCheckboxChange(column)
13709
+ }) : null));
13710
+ }) :
13711
+ /*#__PURE__*/
13712
+ // For some reason wrapping this paragraph with Truncate will throw error in scenarios where
13713
+ // we conditionally hide or show the paragraph e.g. moving the last column to the hide list
13714
+ React__default.createElement("p", {
13715
+ className: "text-grey-500 mb-0 flex h-8 items-center truncate px-2"
13716
+ }, visibleListDescriptionText)), /*#__PURE__*/React__default.createElement(Truncate, {
13717
+ tooltip: texts.table2.columnSettings.columnsHidden
13718
+ }, /*#__PURE__*/React__default.createElement("h5", {
13719
+ className: "mx-4 my-[6px] truncate"
13720
+ }, texts.table2.columnSettings.columnsHidden)), /*#__PURE__*/React__default.createElement(List$1, {
13721
+ id: "hidden",
13722
+ className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-hidden px-2"
13723
+ }, filteredHiddenColumns.length ? filteredHiddenColumns.map(column => {
13724
+ // When searching a column, we disable reordering and make it fixed
13725
+ const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;
13726
+ const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;
13727
+ return /*#__PURE__*/React__default.createElement(Item$3, {
13728
+ key: column.id,
13729
+ disabled: !canBeReordered,
13730
+ id: column.id,
13731
+ asChild: true
13732
+ }, /*#__PURE__*/React__default.createElement(OrderableColumn, {
13733
+ canBeReordered: canBeReordered,
13734
+ column: column,
13735
+ isColumnFixed: isColumnFixed
13736
+ }, column.getCanHide() ? /*#__PURE__*/React__default.createElement(Checkbox, {
13737
+ className: "!mt-0",
13738
+ checked: column.getIsVisible(),
13739
+ onChange: handleColumnCheckboxChange(column)
13740
+ }) : null));
13741
+ }) :
13742
+ /*#__PURE__*/
13743
+ // For some reason wrapping this paragraph with Truncate will throw error in scenarios where
13744
+ // we conditionally hide or show the paragraph e.g. moving the last column to the visible list
13745
+ React__default.createElement("p", {
13746
+ className: "text-grey-500 mb-0 flex h-8 items-center truncate px-2"
13747
+ }, hiddenListDescriptionText)));
13487
13748
  }
13488
13749
  return /*#__PURE__*/React__default.createElement(Container, {
13489
13750
  reorder: reorder,
13490
13751
  move: move
13491
- }, /*#__PURE__*/React__default.createElement("h5", {
13492
- className: "mx-4"
13493
- }, texts.table2.columnSettings.columnsPinned), /*#__PURE__*/React__default.createElement(List$1, {
13494
- id: "pinned",
13495
- className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-x-hidden px-2"
13496
- }, state.pinned.length ? state.pinned.map(column => {
13497
- var _column$columnDef$met3;
13498
- const canBeReordered = isOrderingAllowed(table, column);
13752
+ }, /*#__PURE__*/React__default.createElement(List$1, {
13753
+ id: "visible",
13754
+ className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-hidden px-2"
13755
+ }, state.visible.length ? state.visible.filter(column => {
13756
+ var _column$columnDef$hea5;
13757
+ return (_column$columnDef$hea5 = column.columnDef.header) === null || _column$columnDef$hea5 === void 0 ? void 0 : _column$columnDef$hea5.toString().toLowerCase().includes(query.toLowerCase());
13758
+ }).map(column => {
13759
+ // When searching a column, we disable reordering and make it fixed
13760
+ const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;
13761
+ const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;
13499
13762
  return /*#__PURE__*/React__default.createElement(Item$3, {
13500
13763
  key: column.id,
13501
- disabled: (_column$columnDef$met3 = column.columnDef.meta) === null || _column$columnDef$met3 === void 0 ? void 0 : _column$columnDef$met3.disableReordering,
13764
+ disabled: !canBeReordered,
13502
13765
  id: column.id,
13503
13766
  asChild: true
13504
13767
  }, /*#__PURE__*/React__default.createElement(OrderableColumn, {
13505
13768
  canBeReordered: canBeReordered,
13506
13769
  column: column,
13507
- isReorderingAllowed: isReorderingAllowed,
13508
- onDoubleClick: handleDoubleClick(column.id, 'pinned')
13770
+ isColumnFixed: isColumnFixed
13509
13771
  }));
13510
- }) : /*#__PURE__*/React__default.createElement("p", {
13511
- className: "text-grey-500 mb-0 flex h-8 items-center px-2"
13512
- }, texts.table2.columnSettings.columnsPinnedDrop)), /*#__PURE__*/React__default.createElement("h5", {
13513
- className: "mx-4"
13514
- }, texts.table2.columnSettings.columnsOther), /*#__PURE__*/React__default.createElement(List$1, {
13515
- id: "other",
13516
- className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-x-hidden px-2"
13517
- }, state.other.length ? state.other.map(column => {
13518
- var _column$columnDef$met4;
13519
- const canBeReordered = isOrderingAllowed(table, column);
13520
- return /*#__PURE__*/React__default.createElement(Item$3, {
13521
- key: column.id,
13522
- disabled: (_column$columnDef$met4 = column.columnDef.meta) === null || _column$columnDef$met4 === void 0 ? void 0 : _column$columnDef$met4.disableReordering,
13523
- id: column.id,
13524
- asChild: true
13525
- }, /*#__PURE__*/React__default.createElement(OrderableColumn, {
13526
- canBeReordered: canBeReordered,
13527
- column: column,
13528
- isReorderingAllowed: isReorderingAllowed,
13529
- onDoubleClick: handleDoubleClick(column.id, 'other')
13530
- }));
13531
- }) : /*#__PURE__*/React__default.createElement("p", {
13532
- className: "text-grey-500 mb-0 flex h-8 items-center px-2"
13533
- }, texts.table2.columnSettings.columnsOtherDrop)));
13772
+ }) : null));
13534
13773
  };
13535
13774
  const reorder = (draggedColumnId, targetColumnId, list = []) => {
13536
13775
  const nextColumnOrder = [...list];
@@ -13546,38 +13785,109 @@ const ColumnSettingsButton = ({
13546
13785
  const [query, setQuery] = React__default.useState('');
13547
13786
  const columns = table.getAllLeafColumns().filter(column => !isInternalColumn(column.id));
13548
13787
  const [state, setState] = React__default.useState({
13549
- pinned: columns.filter(column => column.getIsPinned()),
13550
- other: columns.filter(column => !column.getIsPinned())
13788
+ visible: columns.filter(column => column.getIsVisible()),
13789
+ hidden: columns.filter(column => !column.getIsVisible())
13551
13790
  });
13552
- const pinColumn = column => {
13553
- if (state.pinned.find(c => c.id === column.id)) {
13554
- setState(currentState => ({
13555
- pinned: currentState.pinned.filter(c => c.id !== column.id),
13556
- other: [column].concat(...currentState.other)
13557
- }));
13791
+ const initialOrderedColumns = React__default.useRef(columns);
13792
+ const moveColumnToList = column => {
13793
+ // If column can't hide then don't toggle visiblity
13794
+ if (column.getCanHide()) {
13795
+ column.toggleVisibility();
13796
+ }
13797
+ if (state.visible.find(c => c.id === column.id)) {
13798
+ setState(currentState => {
13799
+ const filteredColumns = currentState.visible.filter(c => c.id !== column.id);
13800
+ if (column.getCanHide()) {
13801
+ const hiddenColumns = [column].concat(...currentState.hidden);
13802
+ // Sort the hidden column so that they follow the initial order of fixed columns
13803
+ const sortedFixedHiddenColumns = hiddenColumns.filter(hiddenColumn => {
13804
+ var _hiddenColumn$columnD;
13805
+ return !!((_hiddenColumn$columnD = hiddenColumn.columnDef.meta) !== null && _hiddenColumn$columnD !== void 0 && _hiddenColumn$columnD.disableReordering);
13806
+ }).sort((colA, colB) => {
13807
+ const indexA = initialOrderedColumns.current.indexOf(colA);
13808
+ const indexB = initialOrderedColumns.current.indexOf(colB);
13809
+ return indexA - indexB;
13810
+ });
13811
+ const reorderableHiddenColumns = hiddenColumns.filter(hiddenColumn => {
13812
+ var _hiddenColumn$columnD2;
13813
+ return !((_hiddenColumn$columnD2 = hiddenColumn.columnDef.meta) !== null && _hiddenColumn$columnD2 !== void 0 && _hiddenColumn$columnD2.disableReordering);
13814
+ });
13815
+ return {
13816
+ visible: filteredColumns,
13817
+ hidden: [...sortedFixedHiddenColumns, ...reorderableHiddenColumns]
13818
+ };
13819
+ }
13820
+ // If column can't hide and it is dragged to hidden column list then move the column to the bottom of
13821
+ // the visible column list
13822
+ return {
13823
+ visible: filteredColumns.concat(column),
13824
+ hidden: currentState.hidden
13825
+ };
13826
+ });
13558
13827
  } else {
13559
- setState(currentState => ({
13560
- pinned: currentState.pinned.concat(column),
13561
- other: currentState.other.filter(c => c.id !== column.id)
13562
- }));
13828
+ setState(currentState => {
13829
+ let visibleColumns = [];
13830
+ // If ordering is allowed then we don't care about the previous column order
13831
+ if (isOrderingAllowed(table, column)) {
13832
+ visibleColumns = currentState.visible.concat(column);
13833
+ } else {
13834
+ const orderedVisibleColumns = initialOrderedColumns.current.filter(orderedColumn => !state.hidden.find(c => c.id === orderedColumn.id) || orderedColumn.id === column.id).map(({
13835
+ id
13836
+ }) => id);
13837
+ const movedColumnIndex = orderedVisibleColumns.indexOf(column.id);
13838
+ // Index of the column that is moved to visible list
13839
+ // Intial value for the index is the last item in visible list
13840
+ let index = currentState.visible.length;
13841
+ currentState.visible.find((col, colIndex) => {
13842
+ const columnIndex = orderedVisibleColumns.indexOf(col.id);
13843
+ // Index where the moved column should be shown in visible list
13844
+ if (movedColumnIndex < columnIndex) {
13845
+ index = colIndex;
13846
+ return true;
13847
+ }
13848
+ return false;
13849
+ });
13850
+ visibleColumns = currentState.visible.slice(0, index).concat(column).concat(currentState.visible.slice(index));
13851
+ }
13852
+ return {
13853
+ visible: visibleColumns,
13854
+ hidden: currentState.hidden.filter(c => c.id !== column.id)
13855
+ };
13856
+ });
13563
13857
  }
13564
13858
  };
13565
- const reorderColumn = (draggedColumnId, targetColumnId, pinned) => {
13566
- if (pinned) {
13859
+ const reorderColumnInList = (draggedColumnId, targetColumnId, isVisible) => {
13860
+ var _columns$find, _columns$find$columnD;
13861
+ const isTargetColumnFixed = !!((_columns$find = columns.find(column => column.id === targetColumnId)) !== null && _columns$find !== void 0 && (_columns$find$columnD = _columns$find.columnDef.meta) !== null && _columns$find$columnD !== void 0 && _columns$find$columnD.disableReordering);
13862
+ if (isVisible) {
13863
+ let firstReorderableVisibleColumnId = targetColumnId;
13864
+ if (isTargetColumnFixed) {
13865
+ var _state$visible$find$i, _state$visible$find;
13866
+ firstReorderableVisibleColumnId = (_state$visible$find$i = (_state$visible$find = state.visible.find(visibleColumn => {
13867
+ var _visibleColumn$column;
13868
+ return !((_visibleColumn$column = visibleColumn.columnDef.meta) !== null && _visibleColumn$column !== void 0 && _visibleColumn$column.disableReordering);
13869
+ })) === null || _state$visible$find === void 0 ? void 0 : _state$visible$find.id) !== null && _state$visible$find$i !== void 0 ? _state$visible$find$i : targetColumnId;
13870
+ }
13567
13871
  setState(currentState => ({
13568
13872
  ...currentState,
13569
- pinned: reorder(draggedColumnId, targetColumnId, currentState.pinned)
13873
+ visible: reorder(draggedColumnId, firstReorderableVisibleColumnId, currentState.visible)
13570
13874
  }));
13571
13875
  } else {
13876
+ let firstReorderableHiddenColumnId = targetColumnId;
13877
+ if (isTargetColumnFixed) {
13878
+ var _state$hidden$find$id, _state$hidden$find;
13879
+ firstReorderableHiddenColumnId = (_state$hidden$find$id = (_state$hidden$find = state.hidden.find(visibleColumn => {
13880
+ var _visibleColumn$column2;
13881
+ return !((_visibleColumn$column2 = visibleColumn.columnDef.meta) !== null && _visibleColumn$column2 !== void 0 && _visibleColumn$column2.disableReordering);
13882
+ })) === null || _state$hidden$find === void 0 ? void 0 : _state$hidden$find.id) !== null && _state$hidden$find$id !== void 0 ? _state$hidden$find$id : targetColumnId;
13883
+ }
13572
13884
  setState(currentState => ({
13573
13885
  ...currentState,
13574
- other: reorder(draggedColumnId, targetColumnId, currentState.other)
13886
+ hidden: reorder(draggedColumnId, firstReorderableHiddenColumnId, currentState.hidden)
13575
13887
  }));
13576
13888
  }
13577
13889
  };
13578
- // probably a more elegant way to do this without local state but had
13579
- // a range of issues using the native apis directly
13580
- React__default.useEffect(() => {
13890
+ const changeColumnOrder = newColumnOrder => {
13581
13891
  const internals = [];
13582
13892
  if (table.options.enableRowSelection) {
13583
13893
  internals.push(COLUMN_ID_FOR_SELECTION);
@@ -13585,14 +13895,42 @@ const ColumnSettingsButton = ({
13585
13895
  if (table.options.enableExpanding) {
13586
13896
  internals.push(COLUMN_ID_FOR_EXPANSION);
13587
13897
  }
13588
- table.setColumnPinning({
13589
- left: internals.concat(...state.pinned.map(c => c.id))
13590
- });
13591
- table.setColumnOrder(internals.concat([...state.pinned, ...state.other].map(c => c.id)));
13898
+ table.setColumnOrder(internals.concat(newColumnOrder.map(c => c.id)));
13899
+ };
13900
+ // probably a more elegant way to do this without local state but had
13901
+ // a range of issues using the native apis directly
13902
+ React__default.useEffect(() => {
13903
+ changeColumnOrder([...state.visible, ...state.hidden]);
13592
13904
  }, [state]);
13593
- return /*#__PURE__*/React__default.createElement(IconButton, {
13905
+ // This effect moves up all fixed/unorderable columns before orderable columns.
13906
+ // For custom column order, the fixed/unorderable columns will also move up before orderable columns.
13907
+ // The order between all fixed/unorderable column items, and all orderable column items will be same as it was
13908
+ // specified by the consumer.
13909
+ React__default.useEffect(() => {
13910
+ const orderableColumns = [];
13911
+ const fixedColumns = [];
13912
+ columns.forEach(column => {
13913
+ var _column$columnDef$met3;
13914
+ const isColumnFixed = !!((_column$columnDef$met3 = column.columnDef.meta) !== null && _column$columnDef$met3 !== void 0 && _column$columnDef$met3.disableReordering);
13915
+ if (isColumnFixed) {
13916
+ fixedColumns.push(column);
13917
+ } else {
13918
+ orderableColumns.push(column);
13919
+ }
13920
+ });
13921
+ const newOrderedColumns = [...fixedColumns, ...orderableColumns];
13922
+ // Changes order in the table
13923
+ changeColumnOrder(newOrderedColumns);
13924
+ // Changes order in the column settings button popover
13925
+ setState({
13926
+ visible: newOrderedColumns.filter(column => column.getIsVisible()),
13927
+ hidden: newOrderedColumns.filter(column => !column.getIsVisible())
13928
+ });
13929
+ // update initial column order
13930
+ initialOrderedColumns.current = newOrderedColumns;
13931
+ }, []);
13932
+ return /*#__PURE__*/React__default.createElement(Button$1, {
13594
13933
  "aria-label": texts.table2.columnSettings.tooltip,
13595
- icon: "columns",
13596
13934
  popover: popoverProps => /*#__PURE__*/React__default.createElement(Popover, Object.assign({}, popoverProps), /*#__PURE__*/React__default.createElement(Popover.Content, {
13597
13935
  align: "end"
13598
13936
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -13602,25 +13940,18 @@ const ColumnSettingsButton = ({
13602
13940
  placeholder: texts.table2.columnSettings.search,
13603
13941
  value: query
13604
13942
  }) : null, /*#__PURE__*/React__default.createElement("div", {
13605
- className: "-ml-4 -mb-2 max-h-64 w-[calc(100%_+_theme(spacing.8))] overflow-auto"
13606
- }, query ? /*#__PURE__*/React__default.createElement("div", {
13607
- className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-x-hidden px-2"
13608
- }, columns.filter(column => {
13609
- var _column$columnDef$hea2;
13610
- return (_column$columnDef$hea2 = column.columnDef.header) === null || _column$columnDef$hea2 === void 0 ? void 0 : _column$columnDef$hea2.toString().toLowerCase().includes(query.toLowerCase());
13611
- }).map(column => /*#__PURE__*/React__default.createElement(OrderableColumn, {
13612
- key: column.id,
13613
- canBeReordered: false,
13614
- column: column,
13615
- isReorderingAllowed: false
13616
- }))) : /*#__PURE__*/React__default.createElement(SortableColumnContainer, {
13943
+ className: "-ml-[calc(theme(spacing.4)_-_2px)] -mb-2 max-h-64 w-[calc(100%_+_theme(spacing.7)_-_1px)] overflow-auto"
13944
+ }, /*#__PURE__*/React__default.createElement(SortableColumnContainer, {
13617
13945
  state: state,
13618
- moveColumn: pinColumn,
13619
- reorderColumn: reorderColumn,
13620
- table: table
13946
+ moveColumn: moveColumnToList,
13947
+ reorderColumn: reorderColumnInList,
13948
+ table: table,
13949
+ query: query
13621
13950
  }))))),
13622
13951
  tooltip: texts.table2.columnSettings.tooltip
13623
- });
13952
+ }, /*#__PURE__*/React__default.createElement(Icon, {
13953
+ name: "columns"
13954
+ }), texts.table2.columnSettings.button);
13624
13955
  };
13625
13956
 
13626
13957
  const ExpandedRow = ({
@@ -13645,6 +13976,9 @@ const ExpandedRow = ({
13645
13976
  });
13646
13977
  }
13647
13978
  }, []);
13979
+ if (props.children === null || props.children === undefined) {
13980
+ return null;
13981
+ }
13648
13982
  return /*#__PURE__*/React__default.createElement("div", Object.assign({
13649
13983
  className: "border-grey-300 bg-grey-50 col-span-full border-b p-4"
13650
13984
  }, props, {
@@ -14275,6 +14609,7 @@ const Table2 = /*#__PURE__*/React__default.forwardRef(function Table2(props, ref
14275
14609
  } = props;
14276
14610
  const tableRef = useMergedRef(ref);
14277
14611
  const timeoutIdRef = React__default.useRef();
14612
+ const prevScrollY = React__default.useRef(0);
14278
14613
  // react-table
14279
14614
  const {
14280
14615
  rows,
@@ -14445,15 +14780,26 @@ const Table2 = /*#__PURE__*/React__default.forwardRef(function Table2(props, ref
14445
14780
  } else {
14446
14781
  const _temp3 = function () {
14447
14782
  if (typeof loadMore === 'function') {
14783
+ const scrollY = event.currentTarget.scrollTop;
14784
+ const isVerticalScrolling = scrollY !== prevScrollY.current;
14785
+ prevScrollY.current = scrollY;
14448
14786
  const _temp2 = function () {
14449
- if (event.currentTarget.scrollHeight - event.currentTarget.scrollTop - event.currentTarget.clientHeight < 600 && !loadingRef.current) {
14787
+ if (
14788
+ // This condition will also prevent triggering of loadMore function when scrolled upwards
14789
+ event.currentTarget.scrollHeight - event.currentTarget.scrollTop - event.currentTarget.clientHeight < 600 && !loadingRef.current &&
14790
+ // We don't want to trigger loadMore function on horizontal scrolling
14791
+ isVerticalScrolling) {
14450
14792
  const _temp = _finallyRethrows(function () {
14451
- const isAllRowsSelected = table.getIsAllRowsSelected();
14452
- loadingRef.current = true;
14453
- return Promise.resolve(loadMore()).then(function () {
14454
- if (isAllRowsSelected) {
14455
- table.toggleAllRowsSelected(true);
14456
- }
14793
+ return _catch(function () {
14794
+ const isAllRowsSelected = table.getIsAllRowsSelected();
14795
+ loadingRef.current = true;
14796
+ return Promise.resolve(loadMore()).then(function () {
14797
+ if (isAllRowsSelected) {
14798
+ table.toggleAllRowsSelected(true);
14799
+ }
14800
+ });
14801
+ }, function (error) {
14802
+ console.error(error);
14457
14803
  });
14458
14804
  }, function (_wasThrown, _result) {
14459
14805
  loadingRef.current = false;
@@ -14483,7 +14829,7 @@ const Table2 = /*#__PURE__*/React__default.forwardRef(function Table2(props, ref
14483
14829
  handleMouseLeave = () => meta.setShouldPauseHoverState(false);
14484
14830
  }
14485
14831
  const className = cn('bg-white border border-grey-300 focus:yt-focus focus:border-blue-500 grid auto-rows-max overflow-auto relative rounded group', props.className);
14486
- const enableSettingsButton = table.options.enablePinning || table.options.enableHiding || meta.enableColumnReordering;
14832
+ const enableSettingsButton = table.options.enableHiding || meta.enableColumnReordering;
14487
14833
  const hasInternalToolbar = enableSettingsButton || meta.editMode.enableEditMode || table.options.enableColumnFilters || meta.enableRowDensity || table.options.enableGlobalFilter;
14488
14834
  const hasToolbar = hasInternalToolbar || !!toolbarLeft || !toolbarRight;
14489
14835
  const hasFooters = React__default.useMemo(() => {
@@ -14844,7 +15190,9 @@ const Button$3 = /*#__PURE__*/React__default.forwardRef(function Button(props, r
14844
15190
  ref: ref
14845
15191
  }));
14846
15192
  });
14847
- const getButtonClasses$1 = () => cn('!h-9 !w-9 flex-shrink-0 flex-grow-0 cursor-pointer !rounded-full relative', 'focus:!outline-none focus:!shadow-none focus-visible:!yt-focus-dark ', 'bg-transparent hover:bg-white/[.08] focus:bg-white/[.08] aria-current-page:bg-white/[.08]', '!text-white hover:text-white focus:text-white');
15193
+ const getButtonClasses$1 = (rounded = true) => cn('!h-9 !w-9 flex-shrink-0 flex-grow-0 cursor-pointer relative', 'focus:!outline-none focus:!shadow-none focus-visible:!yt-focus-dark ', 'bg-transparent hover:bg-white/[.08] focus:bg-white/[.08] aria-current-page:bg-white/[.08]', '!text-white hover:text-white focus:text-white', {
15194
+ '!rounded-full': rounded
15195
+ });
14848
15196
 
14849
15197
  const Link$1 = /*#__PURE__*/React__default.forwardRef(function Link(props, ref) {
14850
15198
  const {
@@ -14883,7 +15231,24 @@ const getLinkClasses = (icon = undefined) => cn('flex h-8 flex-shrink-0 flex-gro
14883
15231
  });
14884
15232
 
14885
15233
  const Logo = /*#__PURE__*/React__default.forwardRef(function Logo(props, ref) {
14886
- const className = cn('-mr-[156px] xs:-mr-14 md:!mr-0 h-9 shrink-0 w-[180px]', props.className);
15234
+ const className = cn('h-7 w-7 m-1 self-center justify-self-center flex-shrink-0 flex-grow-0', props.className);
15235
+ return /*#__PURE__*/React__default.createElement("svg", Object.assign({}, props, {
15236
+ className: className,
15237
+ ref: ref,
15238
+ viewBox: "0 0 28 28",
15239
+ xmlns: "http://www.w3.org/2000/svg"
15240
+ }), /*#__PURE__*/React__default.createElement("g", {
15241
+ className: "fill-brand-sunsetOrange"
15242
+ }, /*#__PURE__*/React__default.createElement("path", {
15243
+ d: "M3.2496172 16.0366c-1.44938-.2893-2.857854.6517-3.1442248 2.1011-.2863702 1.4493.6516388 2.8578 2.1010248 3.1442 1.44938.2893 2.85786-.6517 3.14423-2.101.28929-1.4465-.65164-2.855-2.10103-3.1443z"
15244
+ }), /*#__PURE__*/React__default.createElement("path", {
15245
+ d: "M18.9911672 19.1692c-2.4137-.4792-4.7602 1.0871-5.2423 3.5037-.4793 2.4137 1.087 4.7602 3.5036 5.2423 2.4137.4793 4.7602-1.087 5.2424-3.5036.4792-2.4166-1.0871-4.7631-3.5037-5.2424z"
15246
+ }), /*#__PURE__*/React__default.createElement("path", {
15247
+ d: "M23.6958672.105135c-2.8988-.578585-5.7157 1.303275-6.2943 4.199125l-.5172 2.62116c-.3828 1.93446-2.2647 3.19098-4.1992 2.80819l-1.7474-.35651c-1.92569-.3828-3.18221-2.25589-2.79941-4.19035l.08766-.43832c.33021-1.68608-.7656-3.33417-2.45168-3.66438-1.69776-.336043-3.33709.75976-3.67606 2.45461-.33897 1.68607.76561 3.3254 2.45168 3.66437l.43833.09058c1.93446.3828 3.19098 2.26467 2.79941 4.19039l-.16948.8737c-.3828 1.9345.87372 3.8163 2.79945 4.1991 1.9344.3828 3.8163-.8737 4.1991-2.8082l.1695-.8737c.3828-1.9257 2.2646-3.1822 4.1903-2.7994l2.63.526c2.8987.5698 5.7157-1.31206 6.2855-4.20791.5844-2.90169-1.2974-5.718636-4.1962-6.288455z"
15248
+ })));
15249
+ });
15250
+ const LogoLegacy = /*#__PURE__*/React__default.forwardRef(function Logo(props, ref) {
15251
+ const className = cn('-mr-[156px] xs:-mr-14 md:!mr-0 h-9 shrink-0 w-[180px] px-1', props.className);
14887
15252
  return /*#__PURE__*/React__default.createElement("svg", Object.assign({}, props, {
14888
15253
  className: className,
14889
15254
  ref: ref,
@@ -14969,7 +15334,7 @@ const PrimaryNavigation = /*#__PURE__*/React__default.forwardRef(function Primar
14969
15334
  });
14970
15335
 
14971
15336
  const SecondaryNavigation = /*#__PURE__*/React__default.forwardRef(function SecondaryNavigation(props, ref) {
14972
- const className = cn('flex h-full items-center gap-2 mb-0 flex-shrink-0', props.className);
15337
+ const className = cn('flex h-full items-center gap-2 mb-0 flex-shrink-0 mr-2', props.className);
14973
15338
  return /*#__PURE__*/React__default.createElement("div", Object.assign({}, props, {
14974
15339
  className: className,
14975
15340
  ref: ref
@@ -14977,7 +15342,7 @@ const SecondaryNavigation = /*#__PURE__*/React__default.forwardRef(function Seco
14977
15342
  });
14978
15343
 
14979
15344
  const MenuButton = /*#__PURE__*/React__default.forwardRef(function MenuButton(props, ref) {
14980
- const className = cn(getButtonClasses$1(), 'ml-1 -mr-1 !bg-transparent hover:!bg-white/[.08] focus:!bg-white/[.08]] lg:hidden z-[2]');
15345
+ const className = cn(getButtonClasses$1(false), 'mr-1 !bg-transparent hover:!bg-white/[.08] focus:!bg-white/[.08]] lg:hidden z-[2]');
14981
15346
  return /*#__PURE__*/React__default.createElement(IconButton, Object.assign({}, props, {
14982
15347
  className: className,
14983
15348
  "data-taco": "header-toggle-sidebar",
@@ -15229,7 +15594,7 @@ function AgreementDisplay$1(props) {
15229
15594
  }
15230
15595
 
15231
15596
  const Header$2 = /*#__PURE__*/React__default.forwardRef(function Header(props, ref) {
15232
- const className = cn('bg-blue-900 flex h-16 w-full shrink-0 items-center gap-4 pl-2', '[&>a:focus-visible]:yt-focus-dark [&>a]:px-2 [&>a]:rounded [&>a]:h-[calc(100%-14px)]',
15597
+ const className = cn('bg-blue-900 flex h-16 w-full shrink-0 items-center gap-2 pl-4', '[&>*:focus-visible]:yt-focus-dark [&>*]:rounded',
15233
15598
  // styles for logo wrapped inside an anchor
15234
15599
  props.className);
15235
15600
  return /*#__PURE__*/React__default.createElement("header", Object.assign({}, props, {
@@ -15242,6 +15607,7 @@ Header$2.AgreementSelector = AgreementSelector;
15242
15607
  Header$2.Button = Button$3;
15243
15608
  Header$2.Link = Link$1;
15244
15609
  Header$2.Logo = Logo;
15610
+ Header$2.LogoLegacy = LogoLegacy;
15245
15611
  Header$2.PrimaryNavigation = PrimaryNavigation;
15246
15612
  Header$2.SecondaryNavigation = SecondaryNavigation;
15247
15613
  Header$2.MenuButton = MenuButton;
@@ -15619,6 +15985,7 @@ exports.VisuallyHidden = VisuallyHidden;
15619
15985
  exports.WindowedTable = WindowedTable;
15620
15986
  exports.convertRowIndexPathToNumberArray = convertRowIndexPathToNumberArray;
15621
15987
  exports.defaultLocalisationTexts = defaultLocalisationTexts;
15988
+ exports.defaultLocalizationContext = defaultLocalizationContext;
15622
15989
  exports.findByValue = findByValue$1;
15623
15990
  exports.format = format;
15624
15991
  exports.getByRowIndexPath = getByRowIndexPath;