@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
@@ -0,0 +1,130 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ function useTableSelection({
6
+ storageKey,
7
+ items,
8
+ getId,
9
+ initialSelectedIds = /* @__PURE__ */ new Set(),
10
+ totalItems,
11
+ onSelectionChange,
12
+ selectionMode = "single"
13
+ }) {
14
+ const [selectedIds, setSelectedIds] = react.useState(initialSelectedIds);
15
+ const [selectedItemMap, setSelectedItemMap] = react.useState(() => /* @__PURE__ */ new Map());
16
+ const itemsById = react.useMemo(() => {
17
+ const m = /* @__PURE__ */ new Map();
18
+ for (const item of items) m.set(getId(item), item);
19
+ return m;
20
+ }, [items, getId]);
21
+ react.useEffect(() => {
22
+ const stored = window.localStorage.getItem(storageKey);
23
+ if (!stored) {
24
+ setSelectedIds(initialSelectedIds);
25
+ return;
26
+ }
27
+ try {
28
+ const parsed = JSON.parse(stored);
29
+ setSelectedIds(new Set(parsed));
30
+ } catch {
31
+ setSelectedIds(initialSelectedIds);
32
+ }
33
+ }, [storageKey]);
34
+ react.useEffect(() => {
35
+ setSelectedItemMap((prev) => {
36
+ const next = /* @__PURE__ */ new Map();
37
+ for (const id of selectedIds) {
38
+ const item = itemsById.get(id);
39
+ if (item !== void 0) next.set(id, item);
40
+ }
41
+ if (next.size === prev.size) {
42
+ let same = true;
43
+ for (const [id, item] of next) {
44
+ if (prev.get(id) !== item) {
45
+ same = false;
46
+ break;
47
+ }
48
+ }
49
+ if (same) return prev;
50
+ }
51
+ return next;
52
+ });
53
+ }, [selectedIds, itemsById]);
54
+ const selectedItems = react.useMemo(() => Array.from(selectedItemMap.values()), [selectedItemMap]);
55
+ const allSelected = react.useMemo(() => {
56
+ if (typeof totalItems !== "number") return false;
57
+ return totalItems > 0 && selectedIds.size === totalItems;
58
+ }, [selectedIds, totalItems]);
59
+ const anySelected = react.useMemo(() => selectedIds.size > 0, [selectedIds]);
60
+ react.useEffect(() => {
61
+ window.localStorage.setItem(storageKey, JSON.stringify(Array.from(selectedIds)));
62
+ onSelectionChange == null ? void 0 : onSelectionChange({ selectedIds, selectedItems });
63
+ }, [selectedIds, selectedItems, storageKey, onSelectionChange]);
64
+ const toggleId = react.useCallback(
65
+ (id) => {
66
+ setSelectedIds((prevIds) => {
67
+ const nextIds = new Set(prevIds);
68
+ const isSelected = nextIds.has(id);
69
+ if (isSelected) {
70
+ nextIds.delete(id);
71
+ } else {
72
+ if (selectionMode === "single") nextIds.clear();
73
+ nextIds.add(id);
74
+ }
75
+ return nextIds;
76
+ });
77
+ setSelectedItemMap((prevMap) => {
78
+ const nextMap = new Map(prevMap);
79
+ const isSelected = nextMap.has(id);
80
+ if (isSelected) {
81
+ nextMap.delete(id);
82
+ } else {
83
+ if (selectionMode === "single") nextMap.clear();
84
+ const item = itemsById.get(id);
85
+ if (item !== void 0) nextMap.set(id, item);
86
+ }
87
+ return nextMap;
88
+ });
89
+ },
90
+ [itemsById, selectionMode]
91
+ );
92
+ const toggleItem = react.useCallback(
93
+ (item) => {
94
+ toggleId(getId(item));
95
+ },
96
+ [toggleId, getId]
97
+ );
98
+ const toggleAll = react.useCallback(
99
+ (selected) => {
100
+ if (!selected) {
101
+ clearSelection();
102
+ } else {
103
+ const nextIds = /* @__PURE__ */ new Set();
104
+ for (const item of items) {
105
+ nextIds.add(getId(item));
106
+ }
107
+ setSelectedIds(nextIds);
108
+ return nextIds;
109
+ }
110
+ },
111
+ [allSelected, getId, items]
112
+ );
113
+ const clearSelection = react.useCallback(() => {
114
+ setSelectedIds(/* @__PURE__ */ new Set());
115
+ setSelectedItemMap(/* @__PURE__ */ new Map());
116
+ }, []);
117
+ return {
118
+ selectedIds,
119
+ selectedItems,
120
+ selectedItemMap,
121
+ toggleItem,
122
+ toggleId,
123
+ clearSelection,
124
+ allSelected,
125
+ anySelected,
126
+ toggleAll
127
+ };
128
+ }
129
+
130
+ exports.useTableSelection = useTableSelection;
@@ -0,0 +1,25 @@
1
+ type Id = string | number;
2
+ interface Props<T> {
3
+ storageKey: string;
4
+ items: T[];
5
+ getId: (item: T) => Id;
6
+ initialSelectedIds?: Set<Id>;
7
+ onSelectionChange?: (args: {
8
+ selectedIds: Set<Id>;
9
+ selectedItems: T[];
10
+ }) => void;
11
+ totalItems?: number;
12
+ selectionMode?: 'single' | 'multiple';
13
+ }
14
+ export declare function useTableSelection<T>({ storageKey, items, getId, initialSelectedIds, totalItems, onSelectionChange, selectionMode, }: Props<T>): {
15
+ selectedIds: Set<Id>;
16
+ selectedItems: T[];
17
+ selectedItemMap: Map<Id, T>;
18
+ toggleItem: (item: T) => void;
19
+ toggleId: (id: Id) => void;
20
+ clearSelection: () => void;
21
+ allSelected: boolean;
22
+ anySelected: boolean;
23
+ toggleAll: (selected: boolean) => void;
24
+ };
25
+ export {};
@@ -0,0 +1,128 @@
1
+ import { useState, useMemo, useEffect, useCallback } from 'react';
2
+
3
+ function useTableSelection({
4
+ storageKey,
5
+ items,
6
+ getId,
7
+ initialSelectedIds = /* @__PURE__ */ new Set(),
8
+ totalItems,
9
+ onSelectionChange,
10
+ selectionMode = "single"
11
+ }) {
12
+ const [selectedIds, setSelectedIds] = useState(initialSelectedIds);
13
+ const [selectedItemMap, setSelectedItemMap] = useState(() => /* @__PURE__ */ new Map());
14
+ const itemsById = useMemo(() => {
15
+ const m = /* @__PURE__ */ new Map();
16
+ for (const item of items) m.set(getId(item), item);
17
+ return m;
18
+ }, [items, getId]);
19
+ useEffect(() => {
20
+ const stored = window.localStorage.getItem(storageKey);
21
+ if (!stored) {
22
+ setSelectedIds(initialSelectedIds);
23
+ return;
24
+ }
25
+ try {
26
+ const parsed = JSON.parse(stored);
27
+ setSelectedIds(new Set(parsed));
28
+ } catch {
29
+ setSelectedIds(initialSelectedIds);
30
+ }
31
+ }, [storageKey]);
32
+ useEffect(() => {
33
+ setSelectedItemMap((prev) => {
34
+ const next = /* @__PURE__ */ new Map();
35
+ for (const id of selectedIds) {
36
+ const item = itemsById.get(id);
37
+ if (item !== void 0) next.set(id, item);
38
+ }
39
+ if (next.size === prev.size) {
40
+ let same = true;
41
+ for (const [id, item] of next) {
42
+ if (prev.get(id) !== item) {
43
+ same = false;
44
+ break;
45
+ }
46
+ }
47
+ if (same) return prev;
48
+ }
49
+ return next;
50
+ });
51
+ }, [selectedIds, itemsById]);
52
+ const selectedItems = useMemo(() => Array.from(selectedItemMap.values()), [selectedItemMap]);
53
+ const allSelected = useMemo(() => {
54
+ if (typeof totalItems !== "number") return false;
55
+ return totalItems > 0 && selectedIds.size === totalItems;
56
+ }, [selectedIds, totalItems]);
57
+ const anySelected = useMemo(() => selectedIds.size > 0, [selectedIds]);
58
+ useEffect(() => {
59
+ window.localStorage.setItem(storageKey, JSON.stringify(Array.from(selectedIds)));
60
+ onSelectionChange == null ? void 0 : onSelectionChange({ selectedIds, selectedItems });
61
+ }, [selectedIds, selectedItems, storageKey, onSelectionChange]);
62
+ const toggleId = useCallback(
63
+ (id) => {
64
+ setSelectedIds((prevIds) => {
65
+ const nextIds = new Set(prevIds);
66
+ const isSelected = nextIds.has(id);
67
+ if (isSelected) {
68
+ nextIds.delete(id);
69
+ } else {
70
+ if (selectionMode === "single") nextIds.clear();
71
+ nextIds.add(id);
72
+ }
73
+ return nextIds;
74
+ });
75
+ setSelectedItemMap((prevMap) => {
76
+ const nextMap = new Map(prevMap);
77
+ const isSelected = nextMap.has(id);
78
+ if (isSelected) {
79
+ nextMap.delete(id);
80
+ } else {
81
+ if (selectionMode === "single") nextMap.clear();
82
+ const item = itemsById.get(id);
83
+ if (item !== void 0) nextMap.set(id, item);
84
+ }
85
+ return nextMap;
86
+ });
87
+ },
88
+ [itemsById, selectionMode]
89
+ );
90
+ const toggleItem = useCallback(
91
+ (item) => {
92
+ toggleId(getId(item));
93
+ },
94
+ [toggleId, getId]
95
+ );
96
+ const toggleAll = useCallback(
97
+ (selected) => {
98
+ if (!selected) {
99
+ clearSelection();
100
+ } else {
101
+ const nextIds = /* @__PURE__ */ new Set();
102
+ for (const item of items) {
103
+ nextIds.add(getId(item));
104
+ }
105
+ setSelectedIds(nextIds);
106
+ return nextIds;
107
+ }
108
+ },
109
+ [allSelected, getId, items]
110
+ );
111
+ const clearSelection = useCallback(() => {
112
+ setSelectedIds(/* @__PURE__ */ new Set());
113
+ setSelectedItemMap(/* @__PURE__ */ new Map());
114
+ }, []);
115
+ return {
116
+ selectedIds,
117
+ selectedItems,
118
+ selectedItemMap,
119
+ toggleItem,
120
+ toggleId,
121
+ clearSelection,
122
+ allSelected,
123
+ anySelected,
124
+ toggleAll
125
+ };
126
+ }
127
+
128
+ export { useTableSelection };
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ function useTableSettings(storageKey) {
6
+ const [viewMode, setViewMode] = react.useState("compact");
7
+ react.useEffect(() => {
8
+ if (typeof window !== "undefined" && storageKey) {
9
+ const storedMode = window.localStorage.getItem(`dbc-table-settings:${storageKey}`);
10
+ if (storedMode === "compact" || storedMode === "comfortable") {
11
+ setViewMode(storedMode);
12
+ }
13
+ }
14
+ }, [storageKey]);
15
+ const toggleViewMode = react.useCallback(() => {
16
+ if (typeof window !== "undefined" && storageKey) {
17
+ const newMode = viewMode === "comfortable" ? "compact" : "comfortable";
18
+ window.localStorage.setItem(`dbc-table-settings:${storageKey}`, newMode);
19
+ }
20
+ setViewMode((prevMode) => prevMode === "comfortable" ? "compact" : "comfortable");
21
+ }, [storageKey, viewMode]);
22
+ return {
23
+ viewMode,
24
+ toggleViewMode
25
+ };
26
+ }
27
+
28
+ exports.useTableSettings = useTableSettings;
@@ -0,0 +1,7 @@
1
+ export type ViewMode = 'compact' | 'comfortable';
2
+ interface TableSettings {
3
+ viewMode: ViewMode;
4
+ toggleViewMode: () => void;
5
+ }
6
+ export declare function useTableSettings(storageKey?: string): TableSettings;
7
+ export {};
@@ -0,0 +1,26 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+
3
+ function useTableSettings(storageKey) {
4
+ const [viewMode, setViewMode] = useState("compact");
5
+ useEffect(() => {
6
+ if (typeof window !== "undefined" && storageKey) {
7
+ const storedMode = window.localStorage.getItem(`dbc-table-settings:${storageKey}`);
8
+ if (storedMode === "compact" || storedMode === "comfortable") {
9
+ setViewMode(storedMode);
10
+ }
11
+ }
12
+ }, [storageKey]);
13
+ const toggleViewMode = useCallback(() => {
14
+ if (typeof window !== "undefined" && storageKey) {
15
+ const newMode = viewMode === "comfortable" ? "compact" : "comfortable";
16
+ window.localStorage.setItem(`dbc-table-settings:${storageKey}`, newMode);
17
+ }
18
+ setViewMode((prevMode) => prevMode === "comfortable" ? "compact" : "comfortable");
19
+ }, [storageKey, viewMode]);
20
+ return {
21
+ viewMode,
22
+ toggleViewMode
23
+ };
24
+ }
25
+
26
+ export { useTableSettings };
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ function defaultDuration(ms) {
6
+ if (!Number.isFinite(ms) || ms < 0) return "\u2014";
7
+ const sec = Math.floor(ms / 1e3) % 60;
8
+ const min = Math.floor(ms / (1e3 * 60)) % 60;
9
+ const hr = Math.floor(ms / (1e3 * 60 * 60));
10
+ return hr > 0 ? `${hr}t ${min}m ${sec}s` : `${min}m ${sec}s`;
11
+ }
12
+ function useTimeDuration({
13
+ start,
14
+ end,
15
+ dateFormat = { dateStyle: "short", timeStyle: "medium" },
16
+ fallback = "\u2014",
17
+ formatDuration = defaultDuration
18
+ }) {
19
+ const [hydrated, setHydrated] = react.useState(false);
20
+ react.useEffect(() => setHydrated(true), []);
21
+ const started = react.useMemo(() => {
22
+ if (!start) return fallback;
23
+ if (!hydrated) return fallback;
24
+ return new Intl.DateTimeFormat(void 0, dateFormat).format(start);
25
+ }, [start, hydrated, fallback, dateFormat]);
26
+ const ended = react.useMemo(() => {
27
+ if (!end) return fallback;
28
+ if (!hydrated) return fallback;
29
+ return new Intl.DateTimeFormat(void 0, dateFormat).format(end);
30
+ }, [end, hydrated, fallback, dateFormat]);
31
+ const duration = react.useMemo(() => {
32
+ if (!start || !end) return fallback;
33
+ if (!hydrated) return fallback;
34
+ return formatDuration(end.getTime() - start.getTime());
35
+ }, [start, end, hydrated, fallback, formatDuration]);
36
+ return { started, ended, duration, hydrated };
37
+ }
38
+
39
+ exports.useTimeDuration = useTimeDuration;
@@ -0,0 +1,22 @@
1
+ export type useTimeDuration = {
2
+ /** Formatted start date (hydration-safe) */
3
+ started: string;
4
+ /** Formatted end date (hydration-safe) */
5
+ ended: string;
6
+ /** Formatted duration (hydration-safe) */
7
+ duration: string;
8
+ /** Whether client hydration has completed */
9
+ hydrated: boolean;
10
+ };
11
+ type useTimeDurationArgs = {
12
+ start?: Date;
13
+ end?: Date;
14
+ /** Intl options for started/ended formatting */
15
+ dateFormat?: Intl.DateTimeFormatOptions;
16
+ /** Placeholder shown before hydration or when date is missing */
17
+ fallback?: string;
18
+ /** Custom duration formatter if you don’t want the default "1t 2m 3s" */
19
+ formatDuration?: (ms: number) => string;
20
+ };
21
+ export declare function useTimeDuration({ start, end, dateFormat, fallback, formatDuration, }: useTimeDurationArgs): useTimeDuration;
22
+ export {};
@@ -0,0 +1,37 @@
1
+ import { useState, useEffect, useMemo } from 'react';
2
+
3
+ function defaultDuration(ms) {
4
+ if (!Number.isFinite(ms) || ms < 0) return "\u2014";
5
+ const sec = Math.floor(ms / 1e3) % 60;
6
+ const min = Math.floor(ms / (1e3 * 60)) % 60;
7
+ const hr = Math.floor(ms / (1e3 * 60 * 60));
8
+ return hr > 0 ? `${hr}t ${min}m ${sec}s` : `${min}m ${sec}s`;
9
+ }
10
+ function useTimeDuration({
11
+ start,
12
+ end,
13
+ dateFormat = { dateStyle: "short", timeStyle: "medium" },
14
+ fallback = "\u2014",
15
+ formatDuration = defaultDuration
16
+ }) {
17
+ const [hydrated, setHydrated] = useState(false);
18
+ useEffect(() => setHydrated(true), []);
19
+ const started = useMemo(() => {
20
+ if (!start) return fallback;
21
+ if (!hydrated) return fallback;
22
+ return new Intl.DateTimeFormat(void 0, dateFormat).format(start);
23
+ }, [start, hydrated, fallback, dateFormat]);
24
+ const ended = useMemo(() => {
25
+ if (!end) return fallback;
26
+ if (!hydrated) return fallback;
27
+ return new Intl.DateTimeFormat(void 0, dateFormat).format(end);
28
+ }, [end, hydrated, fallback, dateFormat]);
29
+ const duration = useMemo(() => {
30
+ if (!start || !end) return fallback;
31
+ if (!hydrated) return fallback;
32
+ return formatDuration(end.getTime() - start.getTime());
33
+ }, [start, end, hydrated, fallback, formatDuration]);
34
+ return { started, ended, duration, hydrated };
35
+ }
36
+
37
+ export { useTimeDuration };
@@ -1,4 +1,4 @@
1
- import { useState, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
1
+ import { useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
2
2
 
3
3
  const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
4
4
  function useViewportFill(ref, { bottomOffset = 0, min = 120, includeMarginTop = false } = {}) {
package/dist/index.cjs CHANGED
@@ -37,6 +37,23 @@ var Select = require('./components/select/Select');
37
37
  var SplitButton = require('./components/split-button/SplitButton');
38
38
  var Tooltip = require('./components/tooltip/Tooltip');
39
39
  var SegmentedProgressBar = require('./components/segmented-progress-bar/SegmentedProgressBar');
40
+ var DateTimePicker = require('./components/datetime-picker/DateTimePicker');
41
+ var ModalProvider = require('./components/modal/provider/ModalProvider');
42
+ var Modal = require('./components/modal/Modal');
43
+ var ToastProvider = require('./components/toast/provider/ToastProvider');
44
+ var Toast = require('./components/toast/Toast');
45
+ var AttributeChip = require('./components/attribute-chip/AttributeChip');
46
+ var SplitPane = require('./components/split-pane/SplitPane');
47
+ var Pagination = require('./components/pagination/Pagination');
48
+ var MetaBar = require('./components/meta-bar/MetaBar');
49
+ var CodeBlock = require('./components/code-block/CodeBlock');
50
+ var useTimeDuration = require('./hooks/useTimeDuration');
51
+ var useSorting = require('./hooks/useSorting');
52
+ var usePagination = require('./hooks/usePagination');
53
+ var useTableData = require('./hooks/useTableData');
54
+ var useTableSelection = require('./hooks/useTableSelection');
55
+ var useTableSettings = require('./hooks/useTableSettings');
56
+ var TableSettings = require('./components/table/components/table-settings/TableSettings');
40
57
 
41
58
 
42
59
 
@@ -262,3 +279,105 @@ Object.keys(SegmentedProgressBar).forEach(function (k) {
262
279
  get: function () { return SegmentedProgressBar[k]; }
263
280
  });
264
281
  });
282
+ Object.keys(DateTimePicker).forEach(function (k) {
283
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
284
+ enumerable: true,
285
+ get: function () { return DateTimePicker[k]; }
286
+ });
287
+ });
288
+ Object.keys(ModalProvider).forEach(function (k) {
289
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
290
+ enumerable: true,
291
+ get: function () { return ModalProvider[k]; }
292
+ });
293
+ });
294
+ Object.keys(Modal).forEach(function (k) {
295
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
296
+ enumerable: true,
297
+ get: function () { return Modal[k]; }
298
+ });
299
+ });
300
+ Object.keys(ToastProvider).forEach(function (k) {
301
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
302
+ enumerable: true,
303
+ get: function () { return ToastProvider[k]; }
304
+ });
305
+ });
306
+ Object.keys(Toast).forEach(function (k) {
307
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
308
+ enumerable: true,
309
+ get: function () { return Toast[k]; }
310
+ });
311
+ });
312
+ Object.keys(AttributeChip).forEach(function (k) {
313
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
314
+ enumerable: true,
315
+ get: function () { return AttributeChip[k]; }
316
+ });
317
+ });
318
+ Object.keys(SplitPane).forEach(function (k) {
319
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
320
+ enumerable: true,
321
+ get: function () { return SplitPane[k]; }
322
+ });
323
+ });
324
+ Object.keys(Pagination).forEach(function (k) {
325
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
326
+ enumerable: true,
327
+ get: function () { return Pagination[k]; }
328
+ });
329
+ });
330
+ Object.keys(MetaBar).forEach(function (k) {
331
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
332
+ enumerable: true,
333
+ get: function () { return MetaBar[k]; }
334
+ });
335
+ });
336
+ Object.keys(CodeBlock).forEach(function (k) {
337
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
338
+ enumerable: true,
339
+ get: function () { return CodeBlock[k]; }
340
+ });
341
+ });
342
+ Object.keys(useTimeDuration).forEach(function (k) {
343
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
344
+ enumerable: true,
345
+ get: function () { return useTimeDuration[k]; }
346
+ });
347
+ });
348
+ Object.keys(useSorting).forEach(function (k) {
349
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
350
+ enumerable: true,
351
+ get: function () { return useSorting[k]; }
352
+ });
353
+ });
354
+ Object.keys(usePagination).forEach(function (k) {
355
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
356
+ enumerable: true,
357
+ get: function () { return usePagination[k]; }
358
+ });
359
+ });
360
+ Object.keys(useTableData).forEach(function (k) {
361
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
362
+ enumerable: true,
363
+ get: function () { return useTableData[k]; }
364
+ });
365
+ });
366
+ Object.keys(useTableSelection).forEach(function (k) {
367
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
368
+ enumerable: true,
369
+ get: function () { return useTableSelection[k]; }
370
+ });
371
+ });
372
+ Object.keys(useTableSettings).forEach(function (k) {
373
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
374
+ enumerable: true,
375
+ get: function () { return useTableSettings[k]; }
376
+ });
377
+ });
378
+ Object.keys(TableSettings).forEach(function (k) {
379
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
380
+ enumerable: true,
381
+ get: function () { return TableSettings[k]; }
382
+ });
383
+ });
package/dist/index.d.ts CHANGED
@@ -35,3 +35,20 @@ export * from './components/select/Select';
35
35
  export * from './components/split-button/SplitButton';
36
36
  export * from './components/tooltip/Tooltip';
37
37
  export * from './components/segmented-progress-bar/SegmentedProgressBar';
38
+ export * from './components/datetime-picker/DateTimePicker';
39
+ export * from './components/modal/provider/ModalProvider';
40
+ export * from './components/modal/Modal';
41
+ export * from './components/toast/provider/ToastProvider';
42
+ export * from './components/toast/Toast';
43
+ export * from './components/attribute-chip/AttributeChip';
44
+ export * from './components/split-pane/SplitPane';
45
+ export * from './components/pagination/Pagination';
46
+ export * from './components/meta-bar/MetaBar';
47
+ export * from './components/code-block/CodeBlock';
48
+ export * from './hooks/useTimeDuration';
49
+ export * from './hooks/useSorting';
50
+ export * from './hooks/usePagination';
51
+ export * from './hooks/useTableData';
52
+ export * from './hooks/useTableSelection';
53
+ export * from './hooks/useTableSettings';
54
+ export * from './components/table/components/table-settings/TableSettings';
package/dist/index.js CHANGED
@@ -35,3 +35,20 @@ export * from './components/select/Select';
35
35
  export * from './components/split-button/SplitButton';
36
36
  export * from './components/tooltip/Tooltip';
37
37
  export * from './components/segmented-progress-bar/SegmentedProgressBar';
38
+ export * from './components/datetime-picker/DateTimePicker';
39
+ export * from './components/modal/provider/ModalProvider';
40
+ export * from './components/modal/Modal';
41
+ export * from './components/toast/provider/ToastProvider';
42
+ export * from './components/toast/Toast';
43
+ export * from './components/attribute-chip/AttributeChip';
44
+ export * from './components/split-pane/SplitPane';
45
+ export * from './components/pagination/Pagination';
46
+ export * from './components/meta-bar/MetaBar';
47
+ export * from './components/code-block/CodeBlock';
48
+ export * from './hooks/useTimeDuration';
49
+ export * from './hooks/useSorting';
50
+ export * from './hooks/usePagination';
51
+ export * from './hooks/useTableData';
52
+ export * from './hooks/useTableSelection';
53
+ export * from './hooks/useTableSettings';
54
+ export * from './components/table/components/table-settings/TableSettings';