qbs-react-grid 2.2.9 → 2.2.12

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.
@@ -46,9 +46,7 @@ var ToolBar = function ToolBar(_ref) {
46
46
  setRowViewToggle = _ref.setRowViewToggle,
47
47
  _ref$isFullScreen = _ref.isFullScreen,
48
48
  isFullScreen = _ref$isFullScreen === void 0 ? false : _ref$isFullScreen,
49
- labelsProp = _ref.labels,
50
- _ref$rtl = _ref.rtl,
51
- rtl = _ref$rtl === void 0 ? false : _ref$rtl;
49
+ labelsProp = _ref.labels;
52
50
  var labels = (0, _react.useMemo)(function () {
53
51
  return (0, _labels.mergeQbsTableLabels)(labelsProp);
54
52
  }, [labelsProp]);
@@ -88,8 +86,7 @@ var ToolBar = function ToolBar(_ref) {
88
86
  };
89
87
  return /*#__PURE__*/_react["default"].createElement("div", {
90
88
  className: "qbs-table-toolbar-container",
91
- ref: toolbarRef,
92
- dir: rtl ? 'rtl' : 'ltr'
89
+ ref: toolbarRef
93
90
  }, /*#__PURE__*/_react["default"].createElement("div", {
94
91
  className: "qbs-table-toolbar " + (className != null ? className : '')
95
92
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -124,28 +121,40 @@ var ToolBar = function ToolBar(_ref) {
124
121
  }))), tableHeaderActions, /*#__PURE__*/_react["default"].createElement("div", {
125
122
  className: "pr-1 cursor-pointer relative table_custom_ctions"
126
123
  }, (rowViewToggle || isFullScreen) && /*#__PURE__*/_react["default"].createElement("div", {
127
- className: "flex gap-2 qbs-row-switch-container"
124
+ className: "flex gap-2 qbs-row-switch-cntainer"
128
125
  }, rowViewToggle && /*#__PURE__*/_react["default"].createElement("div", {
129
126
  className: "flex gap-2 table_cell_style qbs-table-top-icons"
130
127
  }, /*#__PURE__*/_react["default"].createElement(_ToolTip["default"], {
131
128
  tableBodyRef: toolbarRef,
132
129
  title: (_labels$switchToDefau = labels.switchToDefaultView) != null ? _labels$switchToDefau : ''
133
- }, /*#__PURE__*/_react["default"].createElement("button", {
134
- type: "button",
135
- className: "qbs-table-view-btn",
130
+ }, /*#__PURE__*/_react["default"].createElement("div", {
131
+ role: "button",
132
+ tabIndex: 0,
133
+ title: labels.switchToDefaultView,
136
134
  onClick: function onClick() {
137
135
  return setRowViewToggle === null || setRowViewToggle === void 0 ? void 0 : setRowViewToggle(true);
136
+ },
137
+ onKeyDown: function onKeyDown(e) {
138
+ if (e.key === 'Enter' || e.key === ' ') {
139
+ setRowViewToggle === null || setRowViewToggle === void 0 ? void 0 : setRowViewToggle(true);
140
+ }
138
141
  }
139
142
  }, /*#__PURE__*/_react["default"].createElement(_icons.DefaultView, {
140
143
  className: "" + (defaultRowView ? 'active' : '')
141
144
  }))), /*#__PURE__*/_react["default"].createElement(_ToolTip["default"], {
142
145
  tableBodyRef: toolbarRef,
143
146
  title: (_labels$switchToRelax = labels.switchToRelaxedView) != null ? _labels$switchToRelax : ''
144
- }, /*#__PURE__*/_react["default"].createElement("button", {
145
- type: "button",
146
- className: "qbs-table-view-btn",
147
+ }, /*#__PURE__*/_react["default"].createElement("div", {
148
+ role: "button",
149
+ tabIndex: 0,
150
+ title: labels.switchToRelaxedView,
147
151
  onClick: function onClick() {
148
152
  return setRowViewToggle === null || setRowViewToggle === void 0 ? void 0 : setRowViewToggle(false);
153
+ },
154
+ onKeyDown: function onKeyDown(e) {
155
+ if (e.key === 'Enter' || e.key === ' ') {
156
+ setRowViewToggle === null || setRowViewToggle === void 0 ? void 0 : setRowViewToggle(false);
157
+ }
149
158
  }
150
159
  }, /*#__PURE__*/_react["default"].createElement(_icons.ContentView, {
151
160
  className: "" + (!defaultRowView ? 'active' : '')
@@ -154,11 +163,17 @@ var ToolBar = function ToolBar(_ref) {
154
163
  }, /*#__PURE__*/_react["default"].createElement(_ToolTip["default"], {
155
164
  tableBodyRef: toolbarRef,
156
165
  title: (_labels$switchToFullS = labels.switchToFullScreen) != null ? _labels$switchToFullS : ''
157
- }, /*#__PURE__*/_react["default"].createElement("button", {
158
- type: "button",
159
- className: "qbs-table-view-btn",
166
+ }, /*#__PURE__*/_react["default"].createElement("div", {
167
+ role: "button",
168
+ tabIndex: 0,
169
+ title: labels.switchToFullScreen,
160
170
  onClick: function onClick() {
161
171
  return setTableFullView === null || setTableFullView === void 0 ? void 0 : setTableFullView(!fullWidthView);
172
+ },
173
+ onKeyDown: function onKeyDown(e) {
174
+ if (e.key === 'Enter' || e.key === ' ') {
175
+ setTableFullView === null || setTableFullView === void 0 ? void 0 : setTableFullView(!fullWidthView);
176
+ }
162
177
  }
163
178
  }, /*#__PURE__*/_react["default"].createElement(_icons.ExpandIcon, {
164
179
  className: "" + (fullWidthView ? 'active' : '')
@@ -167,9 +182,7 @@ var ToolBar = function ToolBar(_ref) {
167
182
  }, /*#__PURE__*/_react["default"].createElement(_ToolTip["default"], {
168
183
  tableBodyRef: toolbarRef,
169
184
  title: (_labels$switchToTable = labels.switchToTableView) != null ? _labels$switchToTable : ''
170
- }, /*#__PURE__*/_react["default"].createElement("button", {
171
- type: "button",
172
- className: "qbs-table-view-btn",
185
+ }, /*#__PURE__*/_react["default"].createElement("div", {
173
186
  onClick: function onClick() {
174
187
  return setTableViewToggle === null || setTableViewToggle === void 0 ? void 0 : setTableViewToggle(true);
175
188
  }
@@ -180,9 +193,7 @@ var ToolBar = function ToolBar(_ref) {
180
193
  }), /*#__PURE__*/_react["default"].createElement(_ToolTip["default"], {
181
194
  tableBodyRef: toolbarRef,
182
195
  title: (_labels$switchToCardV = labels.switchToCardView) != null ? _labels$switchToCardV : ''
183
- }, /*#__PURE__*/_react["default"].createElement("button", {
184
- type: "button",
185
- className: "qbs-table-view-btn",
196
+ }, /*#__PURE__*/_react["default"].createElement("div", {
186
197
  onClick: function onClick() {
187
198
  return setTableViewToggle === null || setTableViewToggle === void 0 ? void 0 : setTableViewToggle(false);
188
199
  }
@@ -138,6 +138,7 @@ export interface QbsTableProps {
138
138
  setRowViewToggle?: (value: boolean) => void;
139
139
  isFullScreen?: boolean;
140
140
  rowHeight?: number;
141
+ showHeader?: boolean;
141
142
  }
142
143
  export interface QbsTableToolbarProps {
143
144
  title?: string;
@@ -1,17 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  exports.__esModule = true;
5
4
  exports["default"] = void 0;
6
5
  var _react = _interopRequireWildcard(require("react"));
7
- var _reactDom = _interopRequireDefault(require("react-dom"));
8
6
  var _labels = require("../labels");
9
7
  var _columnToggleCoordinator = require("./columnToggleCoordinator");
10
8
  var _icons = require("./icons");
11
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
10
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
11
  var ColumnToggle = function ColumnToggle(_ref) {
14
- var _document$getElementB;
15
12
  var columns = _ref.columns,
16
13
  onToggle = _ref.onToggle,
17
14
  onReorder = _ref.onReorder,
@@ -30,39 +27,9 @@ var ColumnToggle = function ColumnToggle(_ref) {
30
27
  draggedItem = _useState[0],
31
28
  setDraggedItem = _useState[1];
32
29
  var popupRef = (0, _react.useRef)(null);
33
- var settingsBtnRef = (0, _react.useRef)(null);
34
30
  var _useState2 = (0, _react.useState)(),
35
31
  dragOverPosition = _useState2[0],
36
32
  setDragOverPosition = _useState2[1];
37
- var _useState3 = (0, _react.useState)({
38
- top: 0,
39
- left: 0
40
- }),
41
- position = _useState3[0],
42
- setPosition = _useState3[1];
43
- var updatePopupPosition = (0, _react.useCallback)(function () {
44
- var _popupRef$current, _popupRef$current2;
45
- if (!settingsBtnRef.current) return;
46
- var rect = settingsBtnRef.current.getBoundingClientRect();
47
- var viewportPadding = 8;
48
- var popupWidth = ((_popupRef$current = popupRef.current) === null || _popupRef$current === void 0 ? void 0 : _popupRef$current.offsetWidth) || 272;
49
- var popupHeight = ((_popupRef$current2 = popupRef.current) === null || _popupRef$current2 === void 0 ? void 0 : _popupRef$current2.offsetHeight) || 320;
50
- var left = rtl ? rect.left : rect.right - popupWidth;
51
- if (left + popupWidth > window.innerWidth - viewportPadding) {
52
- left = Math.max(viewportPadding, window.innerWidth - popupWidth - viewportPadding);
53
- }
54
- if (left < viewportPadding) {
55
- left = viewportPadding;
56
- }
57
- var top = rect.bottom + 4;
58
- if (top + popupHeight > window.innerHeight - viewportPadding) {
59
- top = Math.max(viewportPadding, rect.top - popupHeight - 4);
60
- }
61
- setPosition({
62
- top: top,
63
- left: left
64
- });
65
- }, [rtl]);
66
33
  (0, _react.useEffect)(function () {
67
34
  var handleCloseOthers = function handleCloseOthers(event) {
68
35
  var detail = event.detail;
@@ -75,16 +42,6 @@ var ColumnToggle = function ColumnToggle(_ref) {
75
42
  return document.removeEventListener(_columnToggleCoordinator.COLUMN_TOGGLE_CLOSE_OTHERS, handleCloseOthers);
76
43
  };
77
44
  }, [setIsOpen, toggleId]);
78
- (0, _react.useEffect)(function () {
79
- if (!isOpen) return;
80
- updatePopupPosition();
81
- var frame = requestAnimationFrame(function () {
82
- return updatePopupPosition();
83
- });
84
- return function () {
85
- return cancelAnimationFrame(frame);
86
- };
87
- }, [isOpen, updatePopupPosition]);
88
45
  var handleToggle = (0, _react.useCallback)(function (columnName) {
89
46
  onToggle(columnName);
90
47
  }, [onToggle]);
@@ -109,9 +66,9 @@ var ColumnToggle = function ColumnToggle(_ref) {
109
66
  setDraggedItem(null);
110
67
  }, [columns, draggedItem, onReorder]);
111
68
  var handleClickOutside = (0, _react.useCallback)(function (event) {
112
- var _popupRef$current3, _settingsBtnRef$curre;
69
+ var _popupRef$current;
113
70
  var target = event.target;
114
- if ((_popupRef$current3 = popupRef.current) !== null && _popupRef$current3 !== void 0 && _popupRef$current3.contains(target) || (_settingsBtnRef$curre = settingsBtnRef.current) !== null && _settingsBtnRef$curre !== void 0 && _settingsBtnRef$curre.contains(target)) {
71
+ if ((_popupRef$current = popupRef.current) !== null && _popupRef$current !== void 0 && _popupRef$current.contains(target)) {
115
72
  return;
116
73
  }
117
74
  setIsOpen(false);
@@ -139,9 +96,9 @@ var ColumnToggle = function ColumnToggle(_ref) {
139
96
  return handleToggle(column.title);
140
97
  },
141
98
  className: "qbs-table-checkbox-input",
142
- id: column.title
99
+ id: toggleId + "-" + column.title
143
100
  }), /*#__PURE__*/_react["default"].createElement("label", {
144
- htmlFor: column.title
101
+ htmlFor: toggleId + "-" + column.title
145
102
  }, /*#__PURE__*/_react["default"].createElement("svg", {
146
103
  width: "8",
147
104
  height: "6",
@@ -181,9 +138,9 @@ var ColumnToggle = function ColumnToggle(_ref) {
181
138
  return handleToggle(column.title);
182
139
  },
183
140
  className: "qbs-table-checkbox-input",
184
- id: column.title
141
+ id: toggleId + "-" + column.title
185
142
  }), /*#__PURE__*/_react["default"].createElement("label", {
186
- htmlFor: column.title
143
+ htmlFor: toggleId + "-" + column.title
187
144
  }, /*#__PURE__*/_react["default"].createElement("svg", {
188
145
  width: "8",
189
146
  height: "6",
@@ -220,15 +177,23 @@ var ColumnToggle = function ColumnToggle(_ref) {
220
177
  setIsOpen(false);
221
178
  handleColumnToggle === null || handleColumnToggle === void 0 ? void 0 : handleColumnToggle(columns);
222
179
  };
223
- var portalTarget = (_document$getElementB = document.getElementById('portal-root')) != null ? _document$getElementB : document.body;
224
- var popupContent = /*#__PURE__*/_react["default"].createElement("div", {
180
+ return /*#__PURE__*/_react["default"].createElement("div", {
181
+ className: "qbs-table-settings-wrapper"
182
+ }, /*#__PURE__*/_react["default"].createElement("button", {
183
+ type: "button",
184
+ onClick: function onClick(event) {
185
+ event.stopPropagation();
186
+ if (isOpen) {
187
+ setIsOpen(false);
188
+ return;
189
+ }
190
+ (0, _columnToggleCoordinator.closeOtherColumnToggles)(toggleId);
191
+ setIsOpen(true);
192
+ }
193
+ }, /*#__PURE__*/_react["default"].createElement(_icons.SettingsIcon, null)), isOpen && /*#__PURE__*/_react["default"].createElement("div", {
225
194
  className: "qbs-table-column-popup" + (rtl ? ' qbs-table-column-popup--rtl' : ''),
226
195
  style: {
227
- position: 'fixed',
228
- top: position.top,
229
- left: position.left,
230
- maxHeight: tableHeight - 40,
231
- zIndex: 10060
196
+ maxHeight: tableHeight - 40
232
197
  },
233
198
  ref: popupRef,
234
199
  dir: rtl ? 'rtl' : 'ltr'
@@ -284,24 +249,7 @@ var ColumnToggle = function ColumnToggle(_ref) {
284
249
  onClick: function onClick() {
285
250
  return handleColToggle();
286
251
  }
287
- }, labels.save))));
288
- return /*#__PURE__*/_react["default"].createElement("div", {
289
- className: "qbs-table-settings-wrapper"
290
- }, /*#__PURE__*/_react["default"].createElement("button", {
291
- type: "button",
292
- className: "qbs-table-settings-btn",
293
- ref: settingsBtnRef,
294
- onClick: function onClick(event) {
295
- event.stopPropagation();
296
- if (isOpen) {
297
- setIsOpen(false);
298
- return;
299
- }
300
- (0, _columnToggleCoordinator.closeOtherColumnToggles)(toggleId);
301
- updatePopupPosition();
302
- setIsOpen(true);
303
- }
304
- }, /*#__PURE__*/_react["default"].createElement(_icons.SettingsIcon, null)), isOpen && portalTarget && /*#__PURE__*/_reactDom["default"].createPortal(popupContent, portalTarget));
252
+ }, labels.save)))));
305
253
  };
306
254
  var _default = ColumnToggle;
307
255
  exports["default"] = _default;
@@ -41,7 +41,8 @@ var TooltipComponent = function TooltipComponent(_ref) {
41
41
  }
42
42
  }, children), /*#__PURE__*/_react["default"].createElement("span", {
43
43
  ref: dropRef,
44
- className: 'tooltiptext'
44
+ className: "tooltiptext",
45
+ dir: "auto"
45
46
  }, title));
46
47
  };
47
48
  var _default = TooltipComponent;
@@ -58,7 +58,11 @@ var VerticalMenuDropdown = function VerticalMenuDropdown(_ref) {
58
58
  var menuHeight = visibleItems.length * 40;
59
59
  var spaceBelow = window.innerHeight - rect.bottom;
60
60
  var openBelow = spaceBelow >= menuHeight + menuGap;
61
- var left = rect.left;
61
+ var isRtl = (document.documentElement.getAttribute('dir') || document.body.getAttribute('dir') || getComputedStyle(document.documentElement).direction) === 'rtl';
62
+ var left = isRtl ? rect.left : rect.left - menuWidth;
63
+ if (!isRtl && left < viewportPadding) {
64
+ left = rect.left;
65
+ }
62
66
  if (left + menuWidth > window.innerWidth - viewportPadding) {
63
67
  left = Math.max(viewportPadding, rect.right - menuWidth);
64
68
  }
@@ -172,7 +176,7 @@ var VerticalMenuDropdown = function VerticalMenuDropdown(_ref) {
172
176
  className: "inline-block vertical-menu-dropdown-wrapper"
173
177
  }, visibleCount > 0 && /*#__PURE__*/_react["default"].createElement("button", {
174
178
  type: "button",
175
- className: "vertical-menu-trigger-button p-2 rounded text-base-gray hover:bg-gray-light-1 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",
179
+ className: "vertical-menu-trigger-button",
176
180
  onClick: function onClick(event) {
177
181
  event.stopPropagation();
178
182
  if (openMenu) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qbs-react-grid",
3
- "version": "2.2.9",
3
+ "version": "2.2.12",
4
4
  "description": "A React table component",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -381,16 +381,45 @@
381
381
  display: inline-flex;
382
382
  align-items: center;
383
383
  justify-content: center;
384
+ width: 100%;
385
+
386
+ > button {
387
+ display: inline-flex;
388
+ align-items: center;
389
+ justify-content: center;
390
+ padding: 0;
391
+ margin: 0;
392
+ border: none;
393
+ background: transparent;
394
+ cursor: pointer;
395
+ color: #585858;
396
+
397
+ svg {
398
+ width: 20px;
399
+ height: 20px;
400
+ }
401
+
402
+ &:hover,
403
+ &:focus {
404
+ background: transparent;
405
+ outline: none;
406
+ }
407
+ }
384
408
  }
385
409
 
386
410
  .qbs-table-column-popup {
387
- position: fixed;
411
+ position: absolute;
412
+ top: calc(100% + 4px);
413
+ inset-inline-end: 0;
414
+ inset-inline-start: auto;
388
415
  padding: 8px;
389
416
  z-index: 10060;
390
417
  border-radius: 8px;
391
418
  background: #fff;
392
419
  box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15);
393
- min-width: 272px;
420
+ min-width: 300px;
421
+ width: max-content;
422
+ max-width: min(400px, calc(100vw - 16px));
394
423
  gap: 4px;
395
424
  display: flex;
396
425
  flex-direction: column;
@@ -413,10 +442,6 @@
413
442
 
414
443
  .qbs-table-columns-container {
415
444
  display: flex;
416
- flex-direction: row;
417
- }
418
-
419
- .qbs-table-column-popup--rtl .qbs-table-columns-container {
420
445
  flex-direction: row-reverse;
421
446
  }
422
447
 
@@ -429,6 +454,10 @@
429
454
  padding: 4px 0 0;
430
455
  }
431
456
 
457
+ .qbs-table-column-popup--rtl {
458
+ text-align: right;
459
+ }
460
+
432
461
  .qbs-table-column-popup--rtl .qbs-table-popup-footer {
433
462
  flex-direction: row-reverse;
434
463
  }
@@ -103,9 +103,13 @@ const QbsTable: React.FC<QbsTableProps> = ({
103
103
  setRowViewToggle,
104
104
  isFullScreen = false,
105
105
  rowHeight,
106
+ showHeader = true,
106
107
  }) => {
107
108
  const labels = useMemo(() => mergeQbsTableLabels(labelsProp), [labelsProp]);
108
- const pinSide = rtl ? 'left' : 'right';
109
+ const effectiveWordWrap = useMemo(() => {
110
+ if (!rowViewToggle) return wordWrap;
111
+ return defaultRowView ? false : 'break-word';
112
+ }, [rowViewToggle, defaultRowView, wordWrap]);
109
113
  const [loading, setLoading] = useState(false);
110
114
  const [columns, setColumns] = useState(propColumn);
111
115
  const [checkedKeys, setCheckedKeys] = useState<(number | string)[]>([]);
@@ -115,6 +119,14 @@ const QbsTable: React.FC<QbsTableProps> = ({
115
119
  const [tableViewToggle, setTableViewToggle] = useState(tableView);
116
120
  const isMobile = useResponsiveStore();
117
121
  const tableBodyRef = useRef<HTMLDivElement>(null);
122
+ const [rowViewRefreshKey, setRowViewRefreshKey] = useState(0);
123
+
124
+ useEffect(() => {
125
+ if (rowViewToggle) {
126
+ setRowViewRefreshKey(key => key + 1);
127
+ }
128
+ }, [defaultRowView, rowViewToggle]);
129
+
118
130
  const handleSortColumn = useCallback(
119
131
  (sortColumn: any, sortType: any) => {
120
132
  setLoading(true);
@@ -602,13 +614,13 @@ const QbsTable: React.FC<QbsTableProps> = ({
602
614
  {tableViewToggle ? (
603
615
  <Table
604
616
  height={autoHeight ? undefined : height}
605
- key={tableKey}
617
+ key={`${tableKey}-${rowViewRefreshKey}`}
606
618
  tableKey={tableKey}
607
619
  rtl={rtl}
608
620
  data={data}
609
621
  tableBodyRef={tableBodyRef as React.RefObject<HTMLDivElement>}
610
622
  dataTheme={dataTheme}
611
- wordWrap={wordWrap}
623
+ wordWrap={effectiveWordWrap}
612
624
  autoHeight={autoHeight}
613
625
  sortColumn={sortColumn}
614
626
  style={{ position: 'relative' }}
@@ -631,7 +643,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
631
643
  rowHeight={rowHeight}
632
644
  rowExpandedHeight={rowExpandedHeight}
633
645
  loading={isLoading ?? loading}
634
- showHeader
646
+ showHeader={showHeader}
635
647
  defaultChecked
636
648
  expandedRowKeys={expandedRowKeys}
637
649
  onExpandChange={onExpandChange}
@@ -728,7 +740,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
728
740
  {columnsRendered}
729
741
  {!actionProps ||
730
742
  (actionProps?.length === 0 && columnToggle && (
731
- <Column width={40} fixed={pinSide}>
743
+ <Column width={40} fixed="right">
732
744
  <HeaderCell
733
745
  verticalAlign={findGrouped() ? 'middle' : undefined}
734
746
  className={` ${classes.headerlClass}`}
@@ -752,7 +764,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
752
764
  </Column>
753
765
  ))}
754
766
  {actionProps && actionProps?.length > 0 && (
755
- <Column width={40} fixed={pinSide}>
767
+ <Column width={40} fixed="right">
756
768
  <HeaderCell
757
769
  verticalAlign={findGrouped() ? 'middle' : undefined}
758
770
  className={` ${classes.headerlClass}`}
@@ -92,9 +92,13 @@ const QbsTable: React.FC<QbsTableProps> = ({
92
92
  setTableFullView,
93
93
  setRowViewToggle,
94
94
  isFullScreen = false,
95
+ showHeader = true,
95
96
  }) => {
96
97
  const labels = useMemo(() => mergeQbsTableLabels(labelsProp), [labelsProp]);
97
- const pinSide = rtl ? 'left' : 'right';
98
+ const effectiveWordWrap = useMemo(() => {
99
+ if (!rowViewToggle) return wordWrap;
100
+ return defaultRowView ? false : 'break-word';
101
+ }, [rowViewToggle, defaultRowView, wordWrap]);
98
102
  const [loading, setLoading] = useState(false);
99
103
  const [columns, setColumns] = useState(propColumn);
100
104
  const [checkedKeys, setCheckedKeys] = useState<(number | string)[]>([]);
@@ -478,7 +482,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
478
482
  data={data}
479
483
  tableBodyRef={tableBodyRef as React.RefObject<HTMLDivElement>}
480
484
  dataTheme={dataTheme}
481
- wordWrap={wordWrap}
485
+ wordWrap={effectiveWordWrap}
482
486
  autoHeight={autoHeight}
483
487
  sortColumn={sortColumn}
484
488
  style={{ position: 'relative' }}
@@ -500,7 +504,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
500
504
  headerHeight={headerHeight}
501
505
  rowExpandedHeight={rowExpandedHeight}
502
506
  loading={isLoading ?? loading}
503
- showHeader
507
+ showHeader={showHeader}
504
508
  defaultChecked
505
509
  expandedRowKeys={expandedRowKeys}
506
510
  onExpandChange={onExpandChange}
@@ -595,7 +599,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
595
599
  {columnsRendered}
596
600
  {!actionProps ||
597
601
  (actionProps?.length === 0 && columnToggle && (
598
- <Column width={40} fixed={pinSide}>
602
+ <Column width={40} fixed="right">
599
603
  <HeaderCell
600
604
  verticalAlign={findGrouped() ? 'middle' : undefined}
601
605
  className={` ${classes.headerlClass}`}
@@ -619,7 +623,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
619
623
  </Column>
620
624
  ))}
621
625
  {actionProps && actionProps?.length > 0 && (
622
- <Column width={40} fixed={pinSide}>
626
+ <Column width={40} fixed="right">
623
627
  <HeaderCell
624
628
  verticalAlign={findGrouped() ? 'middle' : undefined}
625
629
  className={` ${classes.headerlClass}`}
@@ -36,7 +36,6 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
36
36
  setRowViewToggle,
37
37
  isFullScreen = false,
38
38
  labels: labelsProp,
39
- rtl = false,
40
39
  }) => {
41
40
  const labels = useMemo(() => mergeQbsTableLabels(labelsProp), [labelsProp]);
42
41
  const debouncedOnSearch = useCallback(debounce(onSearch ?? (() => {}), 1000), [onSearch]);
@@ -78,7 +77,7 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
78
77
  };
79
78
 
80
79
  return (
81
- <div className="qbs-table-toolbar-container" ref={toolbarRef} dir={rtl ? 'rtl' : 'ltr'}>
80
+ <div className="qbs-table-toolbar-container" ref={toolbarRef}>
82
81
  <div className={`qbs-table-toolbar ${className ?? ''}`}>
83
82
  <div className="start-container" style={{ display: 'flex', justifyContent: 'flex-end' }}>
84
83
  <div className="qbs-table-primary-filter">
@@ -116,32 +115,44 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
116
115
  {tableHeaderActions}
117
116
  <div className="pr-1 cursor-pointer relative table_custom_ctions">
118
117
  {(rowViewToggle || isFullScreen) && (
119
- <div className="flex gap-2 qbs-row-switch-container">
118
+ <div className="flex gap-2 qbs-row-switch-cntainer">
120
119
  {rowViewToggle && (
121
120
  <div className="flex gap-2 table_cell_style qbs-table-top-icons">
122
121
  <TooltipComponent
123
122
  tableBodyRef={toolbarRef}
124
123
  title={labels.switchToDefaultView ?? ''}
125
124
  >
126
- <button
127
- type="button"
128
- className="qbs-table-view-btn"
125
+ <div
126
+ role="button"
127
+ tabIndex={0}
128
+ title={labels.switchToDefaultView}
129
129
  onClick={() => setRowViewToggle?.(true)}
130
+ onKeyDown={e => {
131
+ if (e.key === 'Enter' || e.key === ' ') {
132
+ setRowViewToggle?.(true);
133
+ }
134
+ }}
130
135
  >
131
136
  <DefaultView className={`${defaultRowView ? 'active' : ''}`} />
132
- </button>
137
+ </div>
133
138
  </TooltipComponent>
134
139
  <TooltipComponent
135
140
  tableBodyRef={toolbarRef}
136
141
  title={labels.switchToRelaxedView ?? ''}
137
142
  >
138
- <button
139
- type="button"
140
- className="qbs-table-view-btn"
143
+ <div
144
+ role="button"
145
+ tabIndex={0}
146
+ title={labels.switchToRelaxedView}
141
147
  onClick={() => setRowViewToggle?.(false)}
148
+ onKeyDown={e => {
149
+ if (e.key === 'Enter' || e.key === ' ') {
150
+ setRowViewToggle?.(false);
151
+ }
152
+ }}
142
153
  >
143
154
  <ContentView className={`${!defaultRowView ? 'active' : ''}`} />
144
- </button>
155
+ </div>
145
156
  </TooltipComponent>
146
157
  </div>
147
158
  )}
@@ -151,13 +162,19 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
151
162
  tableBodyRef={toolbarRef}
152
163
  title={labels.switchToFullScreen ?? ''}
153
164
  >
154
- <button
155
- type="button"
156
- className="qbs-table-view-btn"
165
+ <div
166
+ role="button"
167
+ tabIndex={0}
168
+ title={labels.switchToFullScreen}
157
169
  onClick={() => setTableFullView?.(!fullWidthView)}
170
+ onKeyDown={e => {
171
+ if (e.key === 'Enter' || e.key === ' ') {
172
+ setTableFullView?.(!fullWidthView);
173
+ }
174
+ }}
158
175
  >
159
176
  <ExpandIcon className={`${fullWidthView ? 'active' : ''}`} />
160
- </button>
177
+ </div>
161
178
  </TooltipComponent>
162
179
  </div>
163
180
  )}
@@ -167,25 +184,17 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
167
184
  {enableTableToggle && !isMobile && (
168
185
  <div className="qbs-table-top-icons flex gap-2">
169
186
  <TooltipComponent tableBodyRef={toolbarRef} title={labels.switchToTableView ?? ''}>
170
- <button
171
- type="button"
172
- className="qbs-table-view-btn"
173
- onClick={() => setTableViewToggle?.(true)}
174
- >
187
+ <div onClick={() => setTableViewToggle?.(true)}>
175
188
  <TableView className={`${tableViewToggle ? 'active' : ''}`} />
176
- </button>
189
+ </div>
177
190
  </TooltipComponent>
178
191
 
179
192
  <div className="border-r h-4 w-1" />
180
193
 
181
194
  <TooltipComponent tableBodyRef={toolbarRef} title={labels.switchToCardView ?? ''}>
182
- <button
183
- type="button"
184
- className="qbs-table-view-btn"
185
- onClick={() => setTableViewToggle?.(false)}
186
- >
195
+ <div onClick={() => setTableViewToggle?.(false)}>
187
196
  <CardView className={`${!tableViewToggle ? 'active' : ''}`} />
188
- </button>
197
+ </div>
189
198
  </TooltipComponent>
190
199
  </div>
191
200
  )}
@@ -142,6 +142,7 @@ export interface QbsTableProps {
142
142
  setRowViewToggle?: (value: boolean) => void;
143
143
  isFullScreen?: boolean;
144
144
  rowHeight?: number;
145
+ showHeader?: boolean;
145
146
  }
146
147
 
147
148
  export interface QbsTableToolbarProps {