@dbcdk/react-components 0.0.3 → 0.0.5

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 (223) hide show
  1. package/dist/assets/logo.cjs +10 -10
  2. package/dist/assets/logo.js +10 -10
  3. package/dist/components/__stories__/story-components/Colors.cjs +159 -0
  4. package/dist/components/__stories__/story-components/Colors.d.ts +10 -0
  5. package/dist/components/__stories__/story-components/Colors.js +151 -0
  6. package/dist/components/__stories__/story-components/Colors.module.css +27 -0
  7. package/dist/components/__stories__/story-components/Spacing.cjs +190 -0
  8. package/dist/components/__stories__/story-components/Spacing.d.ts +1 -0
  9. package/dist/components/__stories__/story-components/Spacing.js +184 -0
  10. package/dist/components/__stories__/story-components/Spacing.module.css +154 -0
  11. package/dist/components/app-header/AppHeader.module.css +10 -15
  12. package/dist/components/attribute-chip/AttributeChip.cjs +22 -0
  13. package/dist/components/attribute-chip/AttributeChip.d.ts +8 -0
  14. package/dist/components/attribute-chip/AttributeChip.js +16 -0
  15. package/dist/components/attribute-chip/AttributeChip.module.css +65 -0
  16. package/dist/components/avatar/Avatar.cjs +38 -4
  17. package/dist/components/avatar/Avatar.d.ts +4 -2
  18. package/dist/components/avatar/Avatar.js +39 -5
  19. package/dist/components/avatar/Avatar.module.css +27 -0
  20. package/dist/components/breadcrumbs/Breadcrumbs.cjs +1 -2
  21. package/dist/components/breadcrumbs/Breadcrumbs.js +1 -2
  22. package/dist/components/breadcrumbs/Breadcrumbs.module.css +19 -22
  23. package/dist/components/button/Button.cjs +20 -12
  24. package/dist/components/button/Button.d.ts +4 -1
  25. package/dist/components/button/Button.js +20 -12
  26. package/dist/components/button/Button.module.css +118 -55
  27. package/dist/components/card/Card.cjs +53 -13
  28. package/dist/components/card/Card.d.ts +21 -6
  29. package/dist/components/card/Card.js +54 -14
  30. package/dist/components/card/Card.module.css +148 -44
  31. package/dist/components/card-container/CardContainer.cjs +6 -5
  32. package/dist/components/card-container/CardContainer.d.ts +5 -2
  33. package/dist/components/card-container/CardContainer.js +6 -5
  34. package/dist/components/card-container/CardContainer.module.css +40 -0
  35. package/dist/components/checkbox/Checkbox.cjs +3 -4
  36. package/dist/components/checkbox/Checkbox.d.ts +1 -1
  37. package/dist/components/checkbox/Checkbox.js +3 -4
  38. package/dist/components/checkbox/Checkbox.module.css +10 -10
  39. package/dist/components/chip/Chip.cjs +2 -1
  40. package/dist/components/chip/Chip.d.ts +2 -1
  41. package/dist/components/chip/Chip.js +2 -1
  42. package/dist/components/chip/Chip.module.css +42 -27
  43. package/dist/components/circle/Circle.module.css +11 -11
  44. package/dist/components/clear-button/ClearButton.cjs +3 -3
  45. package/dist/components/clear-button/ClearButton.js +3 -3
  46. package/dist/components/clear-button/ClearButton.module.css +8 -7
  47. package/dist/components/code-block/CodeBlock.cjs +18 -0
  48. package/dist/components/code-block/CodeBlock.d.ts +6 -0
  49. package/dist/components/code-block/CodeBlock.js +12 -0
  50. package/dist/components/code-block/CodeBlock.module.css +60 -0
  51. package/dist/components/copy-button/CopyButton.cjs +35 -0
  52. package/dist/components/copy-button/CopyButton.d.ts +9 -0
  53. package/dist/components/copy-button/CopyButton.js +29 -0
  54. package/dist/components/copy-button/CopyButton.module.css +6 -0
  55. package/dist/components/datetime-picker/DateTimePicker.cjs +504 -0
  56. package/dist/components/datetime-picker/DateTimePicker.d.ts +39 -0
  57. package/dist/components/datetime-picker/DateTimePicker.js +498 -0
  58. package/dist/components/datetime-picker/DateTimePicker.module.css +144 -0
  59. package/dist/components/filter-field/FilterField.cjs +34 -19
  60. package/dist/components/filter-field/FilterField.d.ts +2 -2
  61. package/dist/components/filter-field/FilterField.js +35 -20
  62. package/dist/components/filter-field/FilterField.module.css +14 -20
  63. package/dist/components/headline/Headline.cjs +10 -4
  64. package/dist/components/headline/Headline.d.ts +9 -1
  65. package/dist/components/headline/Headline.js +10 -4
  66. package/dist/components/headline/Headline.module.css +32 -7
  67. package/dist/components/icon/Icon.module.css +10 -9
  68. package/dist/components/input/Input.cjs +60 -19
  69. package/dist/components/input/Input.d.ts +7 -2
  70. package/dist/components/input/Input.js +60 -19
  71. package/dist/components/input/Input.module.css +90 -43
  72. package/dist/components/link/Link.cjs +46 -0
  73. package/dist/components/link/Link.d.ts +9 -0
  74. package/dist/components/link/Link.js +21 -0
  75. package/dist/components/link/Link.module.css +32 -0
  76. package/dist/components/menu/Menu.module.css +10 -32
  77. package/dist/components/meta-bar/MetaBar.cjs +29 -0
  78. package/dist/components/meta-bar/MetaBar.d.ts +11 -0
  79. package/dist/components/meta-bar/MetaBar.js +22 -0
  80. package/dist/components/meta-bar/MetaBar.module.css +12 -0
  81. package/dist/components/modal/Modal.cjs +134 -0
  82. package/dist/components/modal/Modal.d.ts +21 -0
  83. package/dist/components/modal/Modal.js +128 -0
  84. package/dist/components/modal/Modal.module.css +66 -0
  85. package/dist/components/modal/provider/ModalProvider.cjs +80 -0
  86. package/dist/components/modal/provider/ModalProvider.d.ts +21 -0
  87. package/dist/components/modal/provider/ModalProvider.js +77 -0
  88. package/dist/components/multi-select/MultiSelect.cjs +12 -1
  89. package/dist/components/multi-select/MultiSelect.js +12 -1
  90. package/dist/components/nav-bar/NavBar.module.css +11 -16
  91. package/dist/components/page/Page.module.css +2 -2
  92. package/dist/components/page-layout/PageLayout.cjs +5 -22
  93. package/dist/components/page-layout/PageLayout.d.ts +1 -8
  94. package/dist/components/page-layout/PageLayout.js +5 -22
  95. package/dist/components/page-layout/PageLayout.module.css +4 -80
  96. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.cjs +32 -0
  97. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.d.ts +11 -0
  98. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.js +25 -0
  99. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.module.css +84 -0
  100. package/dist/components/pagination/Pagination.cjs +83 -67
  101. package/dist/components/pagination/Pagination.d.ts +3 -1
  102. package/dist/components/pagination/Pagination.js +84 -68
  103. package/dist/components/pagination/Pagination.module.css +11 -3
  104. package/dist/components/panel/Panel.module.css +5 -7
  105. package/dist/components/popover/Popover.cjs +25 -8
  106. package/dist/components/popover/Popover.d.ts +2 -1
  107. package/dist/components/popover/Popover.js +25 -8
  108. package/dist/components/popover/Popover.module.css +4 -6
  109. package/dist/components/search-box/SearchBox.cjs +50 -37
  110. package/dist/components/search-box/SearchBox.d.ts +10 -7
  111. package/dist/components/search-box/SearchBox.js +50 -37
  112. package/dist/components/search-box/SearchBox.module.css +0 -1
  113. package/dist/components/segmented-progress-bar/SegmentedProgressBar.cjs +12 -6
  114. package/dist/components/segmented-progress-bar/SegmentedProgressBar.js +12 -6
  115. package/dist/components/segmented-progress-bar/SegmentedProgressBar.module.css +5 -1
  116. package/dist/components/select/Select.cjs +82 -13
  117. package/dist/components/select/Select.d.ts +2 -1
  118. package/dist/components/select/Select.js +83 -14
  119. package/dist/components/sidebar/Sidebar.cjs +3 -30
  120. package/dist/components/sidebar/Sidebar.d.ts +2 -1
  121. package/dist/components/sidebar/Sidebar.js +4 -26
  122. package/dist/components/sidebar/components/SidebarItem.cjs +3 -1
  123. package/dist/components/sidebar/components/SidebarItem.js +3 -1
  124. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.cjs +40 -14
  125. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.d.ts +3 -1
  126. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.js +40 -14
  127. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.module.css +9 -38
  128. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.cjs +50 -0
  129. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.d.ts +8 -0
  130. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.js +43 -0
  131. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.module.css +155 -0
  132. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.cjs +16 -9
  133. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.d.ts +2 -1
  134. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.js +16 -9
  135. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.module.css +25 -12
  136. package/dist/components/sidebar/components/sidebar-items/SidebarItems.cjs +2 -1
  137. package/dist/components/sidebar/components/sidebar-items/SidebarItems.d.ts +1 -1
  138. package/dist/components/sidebar/components/sidebar-items/SidebarItems.js +2 -1
  139. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.cjs +29 -2
  140. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.js +25 -2
  141. package/dist/components/sidebar/providers/SidebarProvider.cjs +108 -10
  142. package/dist/components/sidebar/providers/SidebarProvider.d.ts +7 -3
  143. package/dist/components/sidebar/providers/SidebarProvider.js +109 -11
  144. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.cjs +1 -1
  145. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.js +1 -1
  146. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.module.css +0 -12
  147. package/dist/components/split-pane/SplitPane.cjs +123 -0
  148. package/dist/components/split-pane/SplitPane.d.ts +34 -0
  149. package/dist/components/split-pane/SplitPane.js +114 -0
  150. package/dist/components/split-pane/SplitPane.module.css +106 -0
  151. package/dist/components/split-pane/provider/SplitPaneContext.cjs +87 -0
  152. package/dist/components/split-pane/provider/SplitPaneContext.d.ts +23 -0
  153. package/dist/components/split-pane/provider/SplitPaneContext.js +79 -0
  154. package/dist/components/table/Table.cjs +180 -112
  155. package/dist/components/table/Table.d.ts +22 -6
  156. package/dist/components/table/Table.js +181 -113
  157. package/dist/components/table/Table.module.css +74 -47
  158. package/dist/components/table/components/empty-state/EmptyState.cjs +52 -0
  159. package/dist/components/table/components/empty-state/EmptyState.d.ts +40 -0
  160. package/dist/components/table/components/empty-state/EmptyState.js +46 -0
  161. package/dist/components/table/components/empty-state/EmptyState.module.css +16 -0
  162. package/dist/components/table/components/table-settings/TableSettings.cjs +32 -0
  163. package/dist/components/table/components/table-settings/TableSettings.d.ts +7 -0
  164. package/dist/components/table/components/table-settings/TableSettings.js +30 -0
  165. package/dist/{tanstack.cjs → components/table/tanstack.cjs} +61 -99
  166. package/dist/components/table/tanstack.d.ts +14 -0
  167. package/dist/{tanstack.js → components/table/tanstack.js} +61 -99
  168. package/dist/components/tabs/Tabs.cjs +33 -17
  169. package/dist/components/tabs/Tabs.d.ts +6 -3
  170. package/dist/components/tabs/Tabs.js +33 -17
  171. package/dist/components/tabs/Tabs.module.css +9 -9
  172. package/dist/components/toast/Toast.cjs +47 -0
  173. package/dist/components/toast/Toast.d.ts +14 -0
  174. package/dist/components/toast/Toast.js +41 -0
  175. package/dist/components/toast/Toast.module.css +101 -0
  176. package/dist/components/toast/provider/ToastProvider.cjs +98 -0
  177. package/dist/components/toast/provider/ToastProvider.d.ts +23 -0
  178. package/dist/components/toast/provider/ToastProvider.js +91 -0
  179. package/dist/components/tooltip/Tooltip.cjs +134 -29
  180. package/dist/components/tooltip/Tooltip.js +135 -30
  181. package/dist/components/tooltip/Tooltip.module.css +25 -43
  182. package/dist/components/user-display/UserDisplay.module.css +2 -2
  183. package/dist/constants/severity.cjs +12 -12
  184. package/dist/constants/severity.js +12 -12
  185. package/dist/constants/sizes.cjs +1 -0
  186. package/dist/constants/sizes.d.ts +1 -1
  187. package/dist/constants/sizes.js +1 -0
  188. package/dist/hooks/usePagination.cjs +88 -0
  189. package/dist/hooks/usePagination.d.ts +33 -0
  190. package/dist/hooks/usePagination.js +86 -0
  191. package/dist/hooks/useSorting.cjs +118 -0
  192. package/dist/hooks/useSorting.d.ts +49 -0
  193. package/dist/hooks/useSorting.js +116 -0
  194. package/dist/hooks/useTableData.cjs +52 -0
  195. package/dist/hooks/useTableData.d.ts +40 -0
  196. package/dist/hooks/useTableData.js +50 -0
  197. package/dist/hooks/useTableSelection.cjs +130 -0
  198. package/dist/hooks/useTableSelection.d.ts +25 -0
  199. package/dist/hooks/useTableSelection.js +128 -0
  200. package/dist/hooks/useTableSettings.cjs +28 -0
  201. package/dist/hooks/useTableSettings.d.ts +7 -0
  202. package/dist/hooks/useTableSettings.js +26 -0
  203. package/dist/hooks/useTimeDuration.cjs +39 -0
  204. package/dist/hooks/useTimeDuration.d.ts +22 -0
  205. package/dist/hooks/useTimeDuration.js +37 -0
  206. package/dist/hooks/useViewportFill.js +1 -1
  207. package/dist/index.cjs +119 -0
  208. package/dist/index.d.ts +17 -0
  209. package/dist/index.js +17 -0
  210. package/dist/src/styles/styles.css +101 -8
  211. package/dist/styles/css-helper-classes/flex.css +97 -0
  212. package/dist/styles/css-helper-classes/typography.css +7 -0
  213. package/dist/styles/styles.css +101 -8
  214. package/dist/styles/themes/dbc/dark.css +206 -99
  215. package/dist/styles/themes/dbc/light.css +183 -89
  216. package/dist/types/sizes.types.d.ts +2 -2
  217. package/package.json +17 -11
  218. package/dist/components/data-summary/DataSummary.cjs +0 -49
  219. package/dist/components/data-summary/DataSummary.d.ts +0 -19
  220. package/dist/components/data-summary/DataSummary.js +0 -43
  221. package/dist/components/data-summary/DataSummary.module.css +0 -51
  222. package/dist/components/sidebar/Sidebar.module.css +0 -66
  223. package/dist/tanstack.d.ts +0 -25
@@ -1,13 +1,15 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
4
5
  var lucideReact = require('lucide-react');
5
6
  var Checkbox = require('../checkbox/Checkbox');
6
- var react = require('react');
7
7
  var styles = require('./Table.module.css');
8
8
  var useViewportFill = require('../../hooks/useViewportFill');
9
9
  var Pagination = require('../pagination/Pagination');
10
10
  var SkeletonLoaderItem = require('../skeleton-loader/skeleton-loader-item/SkeletonLoaderItem');
11
+ var severity = require('../../constants/severity');
12
+ var EmptyState = require('./components/empty-state/EmptyState');
11
13
 
12
14
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
15
 
@@ -18,9 +20,10 @@ function Table({
18
20
  columns,
19
21
  selectedRows,
20
22
  onRowSelect,
23
+ selectionMode = "single",
21
24
  onSortChange,
22
25
  onRowClick,
23
- sortBy,
26
+ sortById,
24
27
  sortDirection,
25
28
  dataKey,
26
29
  headerExtras,
@@ -33,11 +36,18 @@ function Table({
33
36
  viewportIncludeMarginTop = false,
34
37
  take,
35
38
  skip,
39
+ paginationPlacement = "bottom",
36
40
  totalItemsCount,
37
41
  onPageChange,
38
42
  loading,
39
- variant = "filled",
40
- size = "md"
43
+ variant = "primary",
44
+ size = "md",
45
+ getRowSeverity,
46
+ showFirstLast = false,
47
+ allRowsSelected,
48
+ onSelectAllRows,
49
+ viewMode,
50
+ emptyConfig
41
51
  }) {
42
52
  const filteredColumns = react.useMemo(() => columns.filter((c) => !c.hidden), [columns]);
43
53
  const handlePageChange = react.useCallback(
@@ -46,11 +56,13 @@ function Table({
46
56
  },
47
57
  [onPageChange]
48
58
  );
49
- const getColStyle = (accessor, alignment) => {
50
- const baseStyle = accessor ? columnStyles == null ? void 0 : columnStyles[String(accessor)] : void 0;
59
+ const getColStyle = (columnId, alignment, verticalAlignment) => {
60
+ const baseStyle = columnStyles == null ? void 0 : columnStyles[columnId];
51
61
  return {
52
- textAlign: alignment != null ? alignment : "left",
53
- ...baseStyle != null ? baseStyle : {}
62
+ ...baseStyle != null ? baseStyle : {},
63
+ ...alignment === "right" && { fontVariantNumeric: "tabular-nums" },
64
+ verticalAlign: verticalAlignment != null ? verticalAlignment : "top",
65
+ textAlign: alignment != null ? alignment : "left"
54
66
  };
55
67
  };
56
68
  const scrollRef = react.useRef(null);
@@ -59,123 +71,179 @@ function Table({
59
71
  min: viewportMin,
60
72
  includeMarginTop: viewportIncludeMarginTop
61
73
  });
62
- const tableEl = /* @__PURE__ */ jsxRuntime.jsxs("table", { className: `${styles__default.default.table} ${styles__default.default[variant]} ${styles__default.default[size]}`, children: [
63
- /* @__PURE__ */ jsxRuntime.jsxs("thead", { children: [
64
- /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
65
- selectedRows && dataKey && /* @__PURE__ */ jsxRuntime.jsx("th", { className: "fitContent" }),
66
- filteredColumns.map((column, index) => {
67
- var _a;
68
- const accessorKey = String((_a = column.accessor) != null ? _a : "");
69
- const isActiveSort = sortBy === column.accessor;
70
- const ariaSort = column.sortable && isActiveSort ? sortDirection === "asc" ? "ascending" : "descending" : "none";
71
- const toggleSort = () => {
72
- if (!onSortChange || !column.sortable) return;
73
- const nextDir = !isActiveSort ? "asc" : sortDirection === "asc" ? "desc" : null;
74
- onSortChange(column, nextDir);
75
- };
76
- return /* @__PURE__ */ jsxRuntime.jsx(
77
- "th",
78
- {
79
- style: getColStyle(column.accessor, column.align),
80
- "aria-sort": ariaSort,
81
- className: `${styles__default.default.th} ${column.sortable ? styles__default.default.sortable : ""}`,
82
- onClick: (e) => {
83
- if (!column.sortable) return;
84
- if (e.target instanceof HTMLElement && e.target.closest(".resizer")) return;
85
- toggleSort();
86
- },
87
- role: column.sortable ? "button" : void 0,
88
- tabIndex: column.sortable ? 0 : void 0,
89
- onKeyDown: (e) => {
90
- if (!column.sortable) return;
91
- if (e.key === "Enter" || e.key === " ") {
92
- e.preventDefault();
93
- toggleSort();
94
- }
95
- },
96
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.thInner, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
97
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles__default.default.thLabel, children: column.header }),
98
- column.sortable && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: styles__default.default.sortIndicator, "aria-hidden": "true", children: [
99
- isActiveSort && sortDirection === "asc" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, {}),
100
- isActiveSort && sortDirection === "desc" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDown, { className: styles__default.default.descending }),
101
- !isActiveSort && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDown, { className: styles__default.default.descending })
102
- ] }),
103
- headerExtras == null ? void 0 : headerExtras({ column, index })
104
- ] }) })
105
- },
106
- `${accessorKey}-${index}`
107
- );
108
- })
109
- ] }),
110
- headerBelowRow ? /* @__PURE__ */ jsxRuntime.jsx("tr", { className: styles__default.default.headerBelowRow, children: /* @__PURE__ */ jsxRuntime.jsx("th", { colSpan: filteredColumns.length, children: headerBelowRow }) }) : null
111
- ] }),
112
- loading && !data.length ? /* @__PURE__ */ jsxRuntime.jsx("tbody", { className: `${styles__default.default.tBody} ${striped ? styles__default.default.striped : ""}`, children: Array.from({ length: take != null ? take : 5 }).map((_, rowIndex) => /* @__PURE__ */ jsxRuntime.jsx("tr", { children: filteredColumns.map((column, colIndex) => /* @__PURE__ */ jsxRuntime.jsx(
113
- "td",
114
- {
115
- style: getColStyle(column.accessor, column.align),
116
- className: `${styles__default.default.tableCell}`,
117
- children: /* @__PURE__ */ jsxRuntime.jsx(SkeletonLoaderItem.SkeletonLoaderItem, { height: 20, width: "100%" })
118
- },
119
- `loading-cell-${colIndex}`
120
- )) }, `loading-row-${rowIndex}`)) }) : /* @__PURE__ */ jsxRuntime.jsx("tbody", { className: `${styles__default.default.tBody} ${striped ? styles__default.default.striped : ""}`, children: data == null ? void 0 : data.map((row, rowIndex) => /* @__PURE__ */ jsxRuntime.jsxs(
121
- "tr",
122
- {
123
- onClick: () => onRowClick == null ? void 0 : onRowClick(row),
124
- className: `${onRowClick ? styles__default.default.clickableRow : ""} ${(selectedRows == null ? void 0 : selectedRows.has(row[dataKey])) ? styles__default.default.selectedRow : ""}`,
125
- children: [
126
- selectedRows && dataKey && /* @__PURE__ */ jsxRuntime.jsx("td", { className: "fitContent", children: /* @__PURE__ */ jsxRuntime.jsx(
74
+ const tableEl = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
75
+ /* @__PURE__ */ jsxRuntime.jsxs("table", { className: `${styles__default.default.table} ${styles__default.default[variant]} ${styles__default.default[size]}`, children: [
76
+ /* @__PURE__ */ jsxRuntime.jsxs("thead", { children: [
77
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
78
+ selectedRows && dataKey && /* @__PURE__ */ jsxRuntime.jsx("th", { className: `${styles__default.default.fitContent} ${styles__default.default.th}`, children: selectionMode === "multiple" ? /* @__PURE__ */ jsxRuntime.jsx(
127
79
  Checkbox.Checkbox,
128
80
  {
129
- checked: selectedRows.has(row[dataKey]),
130
81
  size: "sm",
131
- onChange: () => onRowSelect == null ? void 0 : onRowSelect(row[dataKey], !selectedRows.has(row[dataKey]))
82
+ variant: "primary",
83
+ checked: allRowsSelected,
84
+ onChange: (checked) => onSelectAllRows == null ? void 0 : onSelectAllRows(checked)
132
85
  }
133
- ) }),
134
- filteredColumns.map((column) => {
135
- var _a;
136
- const accessorKey = String((_a = column.accessor) != null ? _a : "");
86
+ ) : null }),
87
+ filteredColumns.map((column, index) => {
88
+ const isActiveSort = sortById === column.id;
89
+ const ariaSort = column.sortable && isActiveSort ? sortDirection === "asc" ? "ascending" : "descending" : "none";
90
+ const toggleSort = () => {
91
+ if (!onSortChange || !column.sortable) return;
92
+ const nextDir = !isActiveSort ? "asc" : sortDirection === "asc" ? "desc" : null;
93
+ onSortChange(column, nextDir);
94
+ };
137
95
  return /* @__PURE__ */ jsxRuntime.jsx(
138
- "td",
96
+ "th",
139
97
  {
140
- style: getColStyle(column.accessor, column.align),
141
- className: `${styles__default.default.tableCell} `,
142
- children: column.render ? column.render(row) : row[accessorKey]
98
+ style: getColStyle(column.id, column.align, "middle"),
99
+ "aria-sort": ariaSort,
100
+ className: `${styles__default.default.th} ${column.sortable ? styles__default.default.sortable : ""} `,
101
+ onClick: (e) => {
102
+ if (!column.sortable) return;
103
+ if (e.target instanceof HTMLElement && e.target.closest(".resizer")) return;
104
+ toggleSort();
105
+ },
106
+ role: column.sortable ? "button" : void 0,
107
+ tabIndex: column.sortable ? 0 : void 0,
108
+ onKeyDown: (e) => {
109
+ if (!column.sortable) return;
110
+ if (e.key === "Enter" || e.key === " ") {
111
+ e.preventDefault();
112
+ toggleSort();
113
+ }
114
+ },
115
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.thInner, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
116
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles__default.default.thLabel, children: typeof column.header === "function" ? column.header() : column.header }),
117
+ column.sortable && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: styles__default.default.sortIndicator, "aria-hidden": "true", children: [
118
+ isActiveSort && sortDirection === "asc" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, {}),
119
+ isActiveSort && sortDirection === "desc" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDown, { className: styles__default.default.descending }),
120
+ !isActiveSort && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDown, { className: `${styles__default.default.descending} ${styles__default.default.inActiveSort}` })
121
+ ] }),
122
+ headerExtras == null ? void 0 : headerExtras({ column, index })
123
+ ] }) })
143
124
  },
144
- accessorKey
125
+ column.id
145
126
  );
146
127
  })
147
- ]
148
- },
149
- `tableRow-${String(row[dataKey])}-${rowIndex} `
150
- )) })
128
+ ] }),
129
+ headerBelowRow ? /* @__PURE__ */ jsxRuntime.jsx("tr", { className: styles__default.default.headerBelowRow, children: /* @__PURE__ */ jsxRuntime.jsx("th", { colSpan: filteredColumns.length, children: headerBelowRow }) }) : null
130
+ ] }),
131
+ loading && !data.length ? /* @__PURE__ */ jsxRuntime.jsx("tbody", { className: `${styles__default.default.tBody} ${striped ? styles__default.default.striped : ""}`, children: Array.from({ length: take != null ? take : 5 }).map((_, rowIndex) => /* @__PURE__ */ jsxRuntime.jsx("tr", { children: filteredColumns.map((column, colIndex) => /* @__PURE__ */ jsxRuntime.jsx(
132
+ "td",
133
+ {
134
+ style: getColStyle(column.id, column.align),
135
+ className: `${styles__default.default.tableCell} ${column.fitContent ? "fitContent" : ""}`,
136
+ children: /* @__PURE__ */ jsxRuntime.jsx(SkeletonLoaderItem.SkeletonLoaderItem, { height: 20, width: "100%" })
137
+ },
138
+ `${column.id}-${colIndex}`
139
+ )) }, `loading-row-${rowIndex}`)) }) : /* @__PURE__ */ jsxRuntime.jsx("tbody", { className: `${styles__default.default.tBody} ${striped ? styles__default.default.striped : ""}`, children: data == null ? void 0 : data.map((row, rowIndex) => {
140
+ const rowSeverity = getRowSeverity == null ? void 0 : getRowSeverity(row);
141
+ return /* @__PURE__ */ jsxRuntime.jsxs(
142
+ "tr",
143
+ {
144
+ tabIndex: onRowClick ? 0 : -1,
145
+ onClick: (e) => {
146
+ const rowId = row[dataKey];
147
+ const isModifierClick = e.metaKey || e.ctrlKey;
148
+ const canSelect = Boolean(selectedRows && onRowSelect && dataKey);
149
+ if (isModifierClick && canSelect) {
150
+ e.preventDefault();
151
+ e.stopPropagation();
152
+ const isSelected = selectedRows.has(rowId);
153
+ if (selectionMode === "single") {
154
+ onRowSelect(rowId, !isSelected);
155
+ } else {
156
+ onRowSelect(rowId, !isSelected);
157
+ }
158
+ return;
159
+ }
160
+ onRowClick == null ? void 0 : onRowClick(row);
161
+ },
162
+ style: {
163
+ ["--row-severity-color"]: rowSeverity ? severity.SeverityBgColor[rowSeverity] : void 0
164
+ },
165
+ className: `${onRowClick ? styles__default.default.clickableRow : ""} ${(selectedRows == null ? void 0 : selectedRows.has(row[dataKey])) ? styles__default.default.selectedRow : ""} ${rowSeverity ? styles__default.default.severity : ""}`,
166
+ children: [
167
+ selectedRows && dataKey && /* @__PURE__ */ jsxRuntime.jsx("td", { className: "fitContent", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsx(
168
+ Checkbox.Checkbox,
169
+ {
170
+ variant: "primary",
171
+ checked: selectedRows.has(row[dataKey]),
172
+ size: "sm",
173
+ onChange: () => onRowSelect == null ? void 0 : onRowSelect(row[dataKey], !selectedRows.has(row[dataKey]))
174
+ }
175
+ ) }),
176
+ filteredColumns.map((column) => {
177
+ var _a, _b;
178
+ return /* @__PURE__ */ jsxRuntime.jsx(
179
+ "td",
180
+ {
181
+ style: getColStyle(column.id, column.align, column.verticalAlign),
182
+ className: `${styles__default.default.tableCell} ${column.fitContent ? "fitContent" : ""} ${column.allowWrap || (selectedRows == null ? void 0 : selectedRows.has(row[dataKey])) || viewMode === "comfortable" ? "" : styles__default.default.nowrap} `,
183
+ children: column.render ? column.render(row) || ((_a = column.emptyPlaceholder) != null ? _a : "") : column.accessor ? row[column.accessor] || ((_b = column.emptyPlaceholder) != null ? _b : "") : null
184
+ },
185
+ column.id
186
+ );
187
+ })
188
+ ]
189
+ },
190
+ `tableRow-${String(row[dataKey])}-${rowIndex}`
191
+ );
192
+ }) })
193
+ ] }),
194
+ !data.length && /* @__PURE__ */ jsxRuntime.jsx(EmptyState.TableEmptyState, { config: emptyConfig })
151
195
  ] });
152
196
  if (fillViewport) {
153
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "20px" }, children: [
154
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, style: viewportStyle, className: styles__default.default.tableScroll, children: tableEl }),
155
- onPageChange && /* @__PURE__ */ jsxRuntime.jsx(
156
- Pagination.Pagination,
157
- {
158
- itemsCount: totalItemsCount,
159
- take,
160
- skip,
161
- onPageChange: handlePageChange
162
- }
163
- )
164
- ] });
165
- }
166
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "20px" }, children: [
167
- tableEl,
168
- " ",
169
- onPageChange && /* @__PURE__ */ jsxRuntime.jsx(
170
- Pagination.Pagination,
197
+ return /* @__PURE__ */ jsxRuntime.jsxs(
198
+ "div",
171
199
  {
172
- itemsCount: totalItemsCount,
173
- take,
174
- skip,
175
- onPageChange: handlePageChange
200
+ style: {
201
+ display: "flex",
202
+ flexDirection: "column",
203
+ gap: "20px",
204
+ flexFlow: paginationPlacement === "top" ? "column-reverse" : "column",
205
+ position: "relative"
206
+ },
207
+ children: [
208
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, style: viewportStyle, className: styles__default.default.tableScroll, children: tableEl }),
209
+ onPageChange && /* @__PURE__ */ jsxRuntime.jsx(
210
+ Pagination.Pagination,
211
+ {
212
+ itemsCount: totalItemsCount,
213
+ take,
214
+ skip,
215
+ onPageChange: handlePageChange,
216
+ showFirstLast
217
+ }
218
+ )
219
+ ]
176
220
  }
177
- )
178
- ] });
221
+ );
222
+ }
223
+ return /* @__PURE__ */ jsxRuntime.jsxs(
224
+ "div",
225
+ {
226
+ style: {
227
+ display: "flex",
228
+ flexDirection: "column",
229
+ gap: "20px",
230
+ flexFlow: paginationPlacement === "top" ? "column-reverse" : "column",
231
+ position: "relative"
232
+ },
233
+ children: [
234
+ tableEl,
235
+ onPageChange && /* @__PURE__ */ jsxRuntime.jsx(
236
+ Pagination.Pagination,
237
+ {
238
+ itemsCount: totalItemsCount,
239
+ take,
240
+ skip,
241
+ onPageChange: handlePageChange
242
+ }
243
+ )
244
+ ]
245
+ }
246
+ );
179
247
  }
180
248
 
181
249
  exports.Table = Table;
@@ -1,29 +1,40 @@
1
+ import React from 'react';
1
2
  import { PageChangeEvent } from '../pagination/Pagination';
3
+ import { Severity } from '../../constants/severity.types';
4
+ import { ViewMode } from '@/hooks/useTableSettings';
5
+ import { TableEmptyConfig } from './components/empty-state/EmptyState';
2
6
  type SortDirection = 'asc' | 'desc' | null;
3
7
  export interface ColumnItem<T> {
4
- header: string;
8
+ id: string;
9
+ header: string | (() => React.ReactNode);
5
10
  accessor?: keyof T;
6
11
  sortable?: boolean;
7
12
  sortFunction?: (a: T, b: T) => -1 | 0 | 1;
8
13
  render?: (item: T) => React.ReactNode;
9
14
  hidden?: boolean;
10
15
  align?: 'left' | 'right' | 'center';
16
+ verticalAlign?: 'top' | 'middle' | 'bottom';
11
17
  fitContent?: boolean;
18
+ allowWrap?: boolean;
19
+ emptyPlaceholder?: React.ReactNode;
12
20
  }
13
21
  type HeaderExtrasArgs<T> = {
14
22
  column: ColumnItem<T>;
15
23
  index: number;
16
24
  };
17
- export type TableVariant = 'filled' | 'outlined';
18
- interface TableProps<T extends Record<string, any>> {
25
+ export type TableVariant = 'primary' | 'embedded';
26
+ export interface TableProps<T extends Record<string, any>> {
19
27
  data: T[];
20
28
  dataKey: keyof T;
21
29
  columns: ColumnItem<T>[];
22
30
  selectedRows?: Set<number | string>;
31
+ selectionMode?: 'single' | 'multiple';
32
+ allRowsSelected?: boolean;
23
33
  onRowClick?: (row: T) => void;
24
- onRowSelect?: (rowIndex: number | string, isSelected: boolean) => void;
34
+ onRowSelect?: (rowId: number | string, isSelected: boolean) => void;
35
+ onSelectAllRows?: (isSelected: boolean) => void;
25
36
  onSortChange?: (column: ColumnItem<T>, direction: SortDirection) => void;
26
- sortBy?: keyof T;
37
+ sortById?: string;
27
38
  sortDirection?: SortDirection;
28
39
  loading?: boolean;
29
40
  headerExtras?: (args: HeaderExtrasArgs<T>) => React.ReactNode;
@@ -36,10 +47,15 @@ interface TableProps<T extends Record<string, any>> {
36
47
  viewportIncludeMarginTop?: boolean;
37
48
  take?: number;
38
49
  skip?: number;
50
+ paginationPlacement?: 'top' | 'bottom';
39
51
  totalItemsCount?: number;
40
52
  onPageChange?: (e: PageChangeEvent) => void;
41
53
  variant?: TableVariant;
42
54
  size?: 'sm' | 'md';
55
+ getRowSeverity?: (row: T) => Severity | undefined;
56
+ showFirstLast?: boolean;
57
+ viewMode?: ViewMode;
58
+ emptyConfig?: TableEmptyConfig;
43
59
  }
44
- export declare function Table<T extends Record<string, any>>({ data, columns, selectedRows, onRowSelect, onSortChange, onRowClick, sortBy, sortDirection, dataKey, headerExtras, columnStyles, headerBelowRow, striped, fillViewport, viewportBottomOffset, viewportMin, viewportIncludeMarginTop, take, skip, totalItemsCount, onPageChange, loading, variant, size, }: TableProps<T>): JSX.Element;
60
+ export declare function Table<T extends Record<string, any>>({ data, columns, selectedRows, onRowSelect, selectionMode, onSortChange, onRowClick, sortById, sortDirection, dataKey, headerExtras, columnStyles, headerBelowRow, striped, fillViewport, viewportBottomOffset, viewportMin, viewportIncludeMarginTop, take, skip, paginationPlacement, totalItemsCount, onPageChange, loading, variant, size, getRowSeverity, showFirstLast, allRowsSelected, onSelectAllRows, viewMode, emptyConfig, }: TableProps<T>): JSX.Element;
45
61
  export {};