@dbcdk/react-components 0.0.5 → 0.0.6

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 (272) hide show
  1. package/dist/assets/logo.js +2 -85
  2. package/dist/components/__stories__/_data/table.d.ts +15 -0
  3. package/dist/components/__stories__/_data/table.js +49 -0
  4. package/dist/components/__stories__/story-components/Colors.d.ts +2 -1
  5. package/dist/components/__stories__/story-components/Colors.js +87 -142
  6. package/dist/components/__stories__/story-components/Spacing.d.ts +1 -0
  7. package/dist/components/__stories__/story-components/Spacing.js +58 -166
  8. package/dist/components/app-header/AppHeader.d.ts +4 -3
  9. package/dist/components/app-header/AppHeader.js +3 -6
  10. package/dist/components/attribute-chip/AttributeChip.d.ts +1 -0
  11. package/dist/components/attribute-chip/AttributeChip.js +3 -14
  12. package/dist/components/avatar/Avatar.d.ts +2 -2
  13. package/dist/components/avatar/Avatar.js +37 -71
  14. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +4 -4
  15. package/dist/components/breadcrumbs/Breadcrumbs.js +4 -13
  16. package/dist/components/button/Button.d.ts +3 -2
  17. package/dist/components/button/Button.js +54 -56
  18. package/dist/components/button/Button.module.css +1 -1
  19. package/dist/components/card/Card.d.ts +8 -7
  20. package/dist/components/card/Card.js +19 -60
  21. package/dist/components/card-container/CardContainer.d.ts +3 -3
  22. package/dist/components/card-container/CardContainer.js +4 -16
  23. package/dist/components/chip/Chip.d.ts +6 -5
  24. package/dist/components/chip/Chip.js +14 -38
  25. package/dist/components/chip/Chip.module.css +9 -1
  26. package/dist/components/circle/Circle.d.ts +3 -2
  27. package/dist/components/circle/Circle.js +3 -10
  28. package/dist/components/clear-button/ClearButton.d.ts +2 -1
  29. package/dist/components/clear-button/ClearButton.js +6 -17
  30. package/dist/components/code-block/CodeBlock.d.ts +1 -0
  31. package/dist/components/code-block/CodeBlock.js +4 -10
  32. package/dist/components/copy-button/CopyButton.d.ts +4 -3
  33. package/dist/components/copy-button/CopyButton.js +19 -26
  34. package/dist/components/datetime-picker/DateTimePicker.d.ts +8 -5
  35. package/dist/components/datetime-picker/DateTimePicker.js +364 -459
  36. package/dist/components/filter-field/FilterField.d.ts +5 -2
  37. package/dist/components/filter-field/FilterField.js +130 -173
  38. package/dist/components/filter-field/FilterField.module.css +21 -5
  39. package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.d.ts +36 -0
  40. package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.js +53 -0
  41. package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.module.css +60 -0
  42. package/dist/components/forms/checkbox/Checkbox.d.ts +31 -0
  43. package/dist/components/forms/checkbox/Checkbox.js +27 -0
  44. package/dist/components/{checkbox → forms/checkbox}/Checkbox.module.css +0 -1
  45. package/dist/components/forms/checkbox-group/CheckboxGroup.d.ts +47 -0
  46. package/dist/components/forms/checkbox-group/CheckboxGroup.js +75 -0
  47. package/dist/components/forms/checkbox-group/CheckboxGroup.module.css +115 -0
  48. package/dist/components/{input → forms/input}/Input.d.ts +9 -5
  49. package/dist/components/forms/input/Input.js +70 -0
  50. package/dist/components/{input → forms/input}/Input.module.css +1 -0
  51. package/dist/components/forms/input-container/InputContainer.d.ts +15 -0
  52. package/dist/components/forms/input-container/InputContainer.js +15 -0
  53. package/dist/components/forms/input-container/InputContainer.module.css +34 -0
  54. package/dist/components/forms/multi-select/MultiSelect.d.ts +20 -0
  55. package/dist/components/forms/multi-select/MultiSelect.js +19 -0
  56. package/dist/components/forms/select/Select.d.ts +21 -0
  57. package/dist/components/forms/select/Select.js +94 -0
  58. package/dist/components/forms/text-area/Textarea.d.ts +17 -0
  59. package/dist/components/forms/text-area/Textarea.js +33 -0
  60. package/dist/components/forms/text-area/Textarea.module.css +26 -0
  61. package/dist/components/headline/Headline.js +18 -43
  62. package/dist/components/{link/Link.d.ts → hyperlink/Hyperlink.d.ts} +2 -2
  63. package/dist/components/hyperlink/Hyperlink.js +11 -0
  64. package/dist/components/{link/Link.module.css → hyperlink/Hyperlink.module.css} +5 -14
  65. package/dist/components/icon/Icon.d.ts +4 -3
  66. package/dist/components/icon/Icon.js +11 -17
  67. package/dist/components/menu/Menu.js +25 -67
  68. package/dist/components/meta-bar/MetaBar.d.ts +4 -4
  69. package/dist/components/meta-bar/MetaBar.js +7 -20
  70. package/dist/components/nav-bar/NavBar.d.ts +5 -5
  71. package/dist/components/nav-bar/NavBar.js +15 -45
  72. package/dist/components/{modal → overlay/modal}/Modal.d.ts +4 -2
  73. package/dist/components/overlay/modal/Modal.js +92 -0
  74. package/dist/components/{modal → overlay/modal}/provider/ModalProvider.d.ts +0 -1
  75. package/dist/components/overlay/modal/provider/ModalProvider.js +70 -0
  76. package/dist/components/overlay/side-panel/SidePanel.d.ts +16 -0
  77. package/dist/components/overlay/side-panel/SidePanel.js +10 -0
  78. package/dist/components/overlay/side-panel/SidePanel.module.css +56 -0
  79. package/dist/components/overlay/side-panel/useSidePanel.d.ts +5 -0
  80. package/dist/components/overlay/side-panel/useSidePanel.js +11 -0
  81. package/dist/components/overlay/tooltip/Tooltip.d.ts +13 -0
  82. package/dist/components/overlay/tooltip/Tooltip.js +17 -0
  83. package/dist/components/overlay/tooltip/Tooltip.module.css +106 -0
  84. package/dist/components/overlay/tooltip/TooltipProvider.d.ts +20 -0
  85. package/dist/components/overlay/tooltip/TooltipProvider.js +244 -0
  86. package/dist/components/overlay/tooltip/useTooltipTrigger.d.ts +24 -0
  87. package/dist/components/overlay/tooltip/useTooltipTrigger.js +108 -0
  88. package/dist/components/page/Page.d.ts +7 -6
  89. package/dist/components/page/Page.js +4 -21
  90. package/dist/components/page-layout/PageLayout.d.ts +11 -12
  91. package/dist/components/page-layout/PageLayout.js +35 -71
  92. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.js +4 -22
  93. package/dist/components/pagination/Pagination.d.ts +2 -1
  94. package/dist/components/pagination/Pagination.js +38 -121
  95. package/dist/components/panel/Panel.d.ts +4 -3
  96. package/dist/components/panel/Panel.js +5 -10
  97. package/dist/components/popover/Popover.d.ts +1 -0
  98. package/dist/components/popover/Popover.js +116 -141
  99. package/dist/components/search-box/SearchBox.d.ts +2 -2
  100. package/dist/components/search-box/SearchBox.js +112 -162
  101. package/dist/components/segmented-progress-bar/SegmentedProgressBar.d.ts +1 -1
  102. package/dist/components/segmented-progress-bar/SegmentedProgressBar.js +47 -94
  103. package/dist/components/sidebar/Sidebar.d.ts +1 -0
  104. package/dist/components/sidebar/Sidebar.js +5 -7
  105. package/dist/components/sidebar/components/SidebarItem.js +6 -14
  106. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.d.ts +1 -1
  107. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.js +48 -88
  108. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.d.ts +3 -2
  109. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.js +11 -41
  110. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.d.ts +1 -0
  111. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.js +4 -25
  112. package/dist/components/sidebar/components/sidebar-items/SidebarItems.js +9 -23
  113. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.js +19 -40
  114. package/dist/components/sidebar/providers/SidebarProvider.d.ts +2 -1
  115. package/dist/components/sidebar/providers/SidebarProvider.js +182 -165
  116. package/dist/components/skeleton-loader/SkeletonLoader.js +68 -266
  117. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.js +11 -34
  118. package/dist/components/split-button/SplitButton.d.ts +7 -5
  119. package/dist/components/split-button/SplitButton.js +4 -27
  120. package/dist/components/split-pane/SplitPane.js +69 -105
  121. package/dist/components/split-pane/provider/SplitPaneContext.js +77 -71
  122. package/dist/components/table/Table.d.ts +9 -7
  123. package/dist/components/table/Table.js +115 -238
  124. package/dist/components/table/Table.module.css +5 -1
  125. package/dist/components/table/components/column-resizer/ColumnResizer.js +4 -15
  126. package/dist/components/table/components/empty-state/EmptyState.d.ts +6 -5
  127. package/dist/components/table/components/empty-state/EmptyState.js +22 -41
  128. package/dist/components/table/components/table-settings/TableSettings.d.ts +2 -1
  129. package/dist/components/table/components/table-settings/TableSettings.js +9 -27
  130. package/dist/components/table/tanstack.d.ts +1 -1
  131. package/dist/components/table/tanstack.js +154 -160
  132. package/dist/components/tabs/Tabs.d.ts +1 -0
  133. package/dist/components/tabs/Tabs.js +32 -81
  134. package/dist/components/toast/Toast.d.ts +1 -1
  135. package/dist/components/toast/Toast.js +4 -37
  136. package/dist/components/toast/Toast.module.css +1 -0
  137. package/dist/components/toast/provider/ToastProvider.d.ts +1 -1
  138. package/dist/components/toast/provider/ToastProvider.js +60 -87
  139. package/dist/components/user-display/UserDisplay.d.ts +2 -1
  140. package/dist/components/user-display/UserDisplay.js +4 -20
  141. package/dist/constants/severity.d.ts +1 -1
  142. package/dist/constants/severity.js +14 -16
  143. package/dist/constants/severity.types.d.ts +1 -1
  144. package/dist/constants/severity.types.js +1 -1
  145. package/dist/constants/sizes.js +6 -8
  146. package/dist/hooks/usePagination.d.ts +1 -1
  147. package/dist/hooks/usePagination.js +75 -82
  148. package/dist/hooks/useSorting.js +112 -110
  149. package/dist/hooks/useTableData.d.ts +1 -1
  150. package/dist/hooks/useTableData.js +42 -47
  151. package/dist/hooks/useTableSelection.js +121 -121
  152. package/dist/hooks/useTableSettings.js +23 -25
  153. package/dist/hooks/useTheme.d.ts +3 -7
  154. package/dist/hooks/useTheme.js +52 -47
  155. package/dist/hooks/useTimeDuration.d.ts +2 -2
  156. package/dist/hooks/useTimeDuration.js +33 -34
  157. package/dist/hooks/useViewportFill.d.ts +3 -2
  158. package/dist/hooks/useViewportFill.js +55 -48
  159. package/dist/index.d.ts +17 -8
  160. package/dist/index.js +18 -8
  161. package/dist/src/styles/styles.css +3 -3
  162. package/dist/styles/css-helper-classes/flex.css +4 -0
  163. package/dist/styles/styles.css +3 -3
  164. package/dist/styles/themes/dbc/dark.css +1 -1
  165. package/dist/styles/themes/dbc/light.css +2 -1
  166. package/dist/styles/themes/forfatterweb/light.css +1 -1
  167. package/dist/styles/themes/types.js +1 -1
  168. package/dist/types/a11y-props.types.d.ts +5 -5
  169. package/dist/types/a11y-props.types.js +1 -1
  170. package/dist/types/sizes.types.js +1 -1
  171. package/dist/utils/arrays/nested-filtering.js +43 -33
  172. package/dist/utils/date/formatDate.js +25 -16
  173. package/package.json +18 -9
  174. package/dist/assets/logo.cjs +0 -87
  175. package/dist/components/__stories__/story-components/Colors.cjs +0 -159
  176. package/dist/components/__stories__/story-components/Spacing.cjs +0 -190
  177. package/dist/components/app-header/AppHeader.cjs +0 -14
  178. package/dist/components/attribute-chip/AttributeChip.cjs +0 -22
  179. package/dist/components/avatar/Avatar.cjs +0 -101
  180. package/dist/components/breadcrumbs/Breadcrumbs.cjs +0 -22
  181. package/dist/components/button/Button.cjs +0 -87
  182. package/dist/components/card/Card.cjs +0 -69
  183. package/dist/components/card-container/CardContainer.cjs +0 -24
  184. package/dist/components/checkbox/Checkbox.cjs +0 -42
  185. package/dist/components/checkbox/Checkbox.d.ts +0 -12
  186. package/dist/components/checkbox/Checkbox.js +0 -36
  187. package/dist/components/chip/Chip.cjs +0 -50
  188. package/dist/components/circle/Circle.cjs +0 -18
  189. package/dist/components/clear-button/ClearButton.cjs +0 -26
  190. package/dist/components/code-block/CodeBlock.cjs +0 -18
  191. package/dist/components/copy-button/CopyButton.cjs +0 -35
  192. package/dist/components/datetime-picker/DateTimePicker.cjs +0 -504
  193. package/dist/components/filter-field/FilterField.cjs +0 -189
  194. package/dist/components/headline/Headline.cjs +0 -53
  195. package/dist/components/icon/Icon.cjs +0 -27
  196. package/dist/components/input/Input.cjs +0 -89
  197. package/dist/components/input/Input.js +0 -83
  198. package/dist/components/link/Link.cjs +0 -46
  199. package/dist/components/link/Link.js +0 -21
  200. package/dist/components/menu/Menu.cjs +0 -96
  201. package/dist/components/meta-bar/MetaBar.cjs +0 -29
  202. package/dist/components/modal/Modal.cjs +0 -134
  203. package/dist/components/modal/Modal.js +0 -128
  204. package/dist/components/modal/provider/ModalProvider.cjs +0 -80
  205. package/dist/components/modal/provider/ModalProvider.js +0 -77
  206. package/dist/components/multi-select/MultiSelect.cjs +0 -59
  207. package/dist/components/multi-select/MultiSelect.d.ts +0 -18
  208. package/dist/components/multi-select/MultiSelect.js +0 -57
  209. package/dist/components/nav-bar/NavBar.cjs +0 -55
  210. package/dist/components/page/Page.cjs +0 -30
  211. package/dist/components/page-layout/PageLayout.cjs +0 -84
  212. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.cjs +0 -32
  213. package/dist/components/pagination/Pagination.cjs +0 -133
  214. package/dist/components/panel/Panel.cjs +0 -18
  215. package/dist/components/popover/Popover.cjs +0 -149
  216. package/dist/components/search-box/SearchBox.cjs +0 -175
  217. package/dist/components/segmented-progress-bar/SegmentedProgressBar.cjs +0 -103
  218. package/dist/components/select/Select.cjs +0 -121
  219. package/dist/components/select/Select.d.ts +0 -12
  220. package/dist/components/select/Select.js +0 -119
  221. package/dist/components/sidebar/Sidebar.cjs +0 -11
  222. package/dist/components/sidebar/components/SidebarItem.cjs +0 -18
  223. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.cjs +0 -100
  224. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.cjs +0 -50
  225. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.cjs +0 -34
  226. package/dist/components/sidebar/components/sidebar-items/SidebarItems.cjs +0 -29
  227. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.cjs +0 -52
  228. package/dist/components/sidebar/providers/SidebarProvider.cjs +0 -179
  229. package/dist/components/skeleton-loader/SkeletonLoader.cjs +0 -270
  230. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.cjs +0 -42
  231. package/dist/components/split-button/SplitButton.cjs +0 -37
  232. package/dist/components/split-pane/SplitPane.cjs +0 -123
  233. package/dist/components/split-pane/provider/SplitPaneContext.cjs +0 -87
  234. package/dist/components/table/Table.cjs +0 -249
  235. package/dist/components/table/components/column-resizer/ColumnResizer.cjs +0 -22
  236. package/dist/components/table/components/empty-state/EmptyState.cjs +0 -52
  237. package/dist/components/table/components/table-settings/TableSettings.cjs +0 -32
  238. package/dist/components/table/tanstack.cjs +0 -193
  239. package/dist/components/tabs/Tabs.cjs +0 -90
  240. package/dist/components/text-area/Textarea.cjs +0 -62
  241. package/dist/components/text-area/Textarea.d.ts +0 -14
  242. package/dist/components/text-area/Textarea.js +0 -56
  243. package/dist/components/text-area/Textarea.module.css +0 -3
  244. package/dist/components/toast/Toast.cjs +0 -47
  245. package/dist/components/toast/provider/ToastProvider.cjs +0 -98
  246. package/dist/components/tooltip/Tooltip.cjs +0 -183
  247. package/dist/components/tooltip/Tooltip.d.ts +0 -11
  248. package/dist/components/tooltip/Tooltip.js +0 -177
  249. package/dist/components/tooltip/Tooltip.module.css +0 -66
  250. package/dist/components/user-display/UserDisplay.cjs +0 -28
  251. package/dist/constants/severity.cjs +0 -21
  252. package/dist/constants/severity.types.cjs +0 -2
  253. package/dist/constants/sizes.cjs +0 -11
  254. package/dist/hooks/usePagination.cjs +0 -88
  255. package/dist/hooks/useSorting.cjs +0 -118
  256. package/dist/hooks/useTableData.cjs +0 -52
  257. package/dist/hooks/useTableSelection.cjs +0 -130
  258. package/dist/hooks/useTableSettings.cjs +0 -28
  259. package/dist/hooks/useTheme.cjs +0 -58
  260. package/dist/hooks/useTimeDuration.cjs +0 -39
  261. package/dist/hooks/useViewportFill.cjs +0 -52
  262. package/dist/index.cjs +0 -383
  263. package/dist/styles/themes/types.cjs +0 -2
  264. package/dist/types/a11y-props.types.cjs +0 -2
  265. package/dist/types/assets.d.cjs +0 -2
  266. package/dist/types/assets.d.js +0 -1
  267. package/dist/types/css.d.cjs +0 -2
  268. package/dist/types/css.d.js +0 -1
  269. package/dist/types/sizes.types.cjs +0 -2
  270. package/dist/utils/arrays/nested-filtering.cjs +0 -40
  271. package/dist/utils/date/formatDate.cjs +0 -19
  272. /package/dist/components/{modal → overlay/modal}/Modal.module.css +0 -0
@@ -1,55 +1,60 @@
1
- import { useState, useEffect, useCallback } from 'react';
2
-
3
- const LINK_ID = "dbc-theme-link";
4
- const STORAGE_KEY = "dbc_theme";
5
- function createLinkElement() {
6
- if (typeof document === "undefined") return null;
7
- let el = document.getElementById(LINK_ID);
8
- if (!el) {
9
- el = document.createElement("link");
10
- el.id = LINK_ID;
11
- el.rel = "stylesheet";
12
- document.head.appendChild(el);
13
- }
14
- return el;
1
+ 'use client';
2
+ import { useCallback, useEffect, useState } from 'react';
3
+ const THEME_VARIANTS = ['light', 'dark'];
4
+ const STORAGE_KEY = 'dbc_theme';
5
+ function isThemeVariant(x) {
6
+ return !!x && THEME_VARIANTS.includes(x);
15
7
  }
16
- function setLinkHref(href) {
17
- const el = createLinkElement();
18
- if (el && el.getAttribute("href") !== href) el.setAttribute("href", href);
8
+ function getCookie(name) {
9
+ const match = document.cookie.match(new RegExp(`(?:^|; )${name}=([^;]*)`));
10
+ return match ? decodeURIComponent(match[1]) : null;
19
11
  }
20
- function useTheme(initialTheme = "light") {
21
- const [theme, setTheme] = useState(null);
22
- useEffect(() => {
23
- let stored = initialTheme;
12
+ function persistTheme(id) {
24
13
  try {
25
- stored = localStorage.getItem(STORAGE_KEY);
26
- console.log("Restored theme from localStorage:", stored);
27
- } catch {
14
+ localStorage.setItem(STORAGE_KEY, id);
28
15
  }
29
- if (stored) {
30
- setLinkHref(`/themes/${stored}.css`);
31
- setTheme(stored);
32
- try {
33
- localStorage.setItem(STORAGE_KEY, stored);
34
- } catch {
35
- }
16
+ catch {
17
+ console.error('Failed to access localStorage');
36
18
  }
37
- }, []);
38
- const switchTheme = useCallback((id) => {
39
- const href = `/themes/${id}.css`;
40
- if (!href) return "";
41
- setLinkHref(href);
42
- setTheme(id);
43
19
  try {
44
- localStorage.setItem(STORAGE_KEY, id);
45
- document.cookie = `${STORAGE_KEY}=${encodeURIComponent(
46
- id
47
- )}; Path=/; Max-Age=${60 * 60 * 24 * 365}`;
48
- } catch {
20
+ document.cookie = `${STORAGE_KEY}=${encodeURIComponent(id)}; Path=/; Max-Age=${60 * 60 * 24 * 365}`;
49
21
  }
50
- return id;
51
- }, []);
52
- return { theme, switchTheme, linkId: LINK_ID };
22
+ catch {
23
+ console.error('Failed to set theme cookie');
24
+ }
25
+ }
26
+ function applyTheme(id) {
27
+ document.documentElement.dataset.theme = id;
28
+ }
29
+ export function useTheme(initialTheme = 'light') {
30
+ const [theme, setTheme] = useState(null);
31
+ useEffect(() => {
32
+ let resolved = initialTheme;
33
+ // Prefer cookie (SSR + client consistency)
34
+ const fromCookie = getCookie(STORAGE_KEY);
35
+ if (isThemeVariant(fromCookie)) {
36
+ resolved = fromCookie;
37
+ }
38
+ else {
39
+ // fallback to localStorage
40
+ try {
41
+ const fromStorage = localStorage.getItem(STORAGE_KEY);
42
+ if (isThemeVariant(fromStorage))
43
+ resolved = fromStorage;
44
+ }
45
+ catch {
46
+ console.error('Failed to access localStorage');
47
+ }
48
+ }
49
+ applyTheme(resolved);
50
+ setTheme(resolved);
51
+ persistTheme(resolved);
52
+ }, [initialTheme]);
53
+ const switchTheme = useCallback((id) => {
54
+ applyTheme(id);
55
+ setTheme(id);
56
+ persistTheme(id);
57
+ return id;
58
+ }, []);
59
+ return { theme, switchTheme };
53
60
  }
54
-
55
- export { LINK_ID, useTheme };
@@ -1,4 +1,4 @@
1
- export type useTimeDuration = {
1
+ export type useTimeDurationReturn = {
2
2
  /** Formatted start date (hydration-safe) */
3
3
  started: string;
4
4
  /** Formatted end date (hydration-safe) */
@@ -18,5 +18,5 @@ type useTimeDurationArgs = {
18
18
  /** Custom duration formatter if you don’t want the default "1t 2m 3s" */
19
19
  formatDuration?: (ms: number) => string;
20
20
  };
21
- export declare function useTimeDuration({ start, end, dateFormat, fallback, formatDuration, }: useTimeDurationArgs): useTimeDuration;
21
+ export declare function useTimeDuration({ start, end, dateFormat, fallback, formatDuration, }: useTimeDurationArgs): useTimeDurationReturn;
22
22
  export {};
@@ -1,37 +1,36 @@
1
- import { useState, useEffect, useMemo } from 'react';
2
-
1
+ 'use client';
2
+ import { useEffect, useMemo, useState } from 'react';
3
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`;
4
+ if (!Number.isFinite(ms) || ms < 0)
5
+ return '—';
6
+ const sec = Math.floor(ms / 1000) % 60;
7
+ const min = Math.floor(ms / (1000 * 60)) % 60;
8
+ const hr = Math.floor(ms / (1000 * 60 * 60));
9
+ return hr > 0 ? `${hr}t ${min}m ${sec}s` : `${min}m ${sec}s`;
9
10
  }
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 };
11
+ export function useTimeDuration({ start, end, dateFormat = { dateStyle: 'short', timeStyle: 'medium' }, fallback = '—', formatDuration = defaultDuration, }) {
12
+ const [hydrated, setHydrated] = useState(false);
13
+ useEffect(() => setHydrated(true), []);
14
+ const started = useMemo(() => {
15
+ if (!start)
16
+ return fallback;
17
+ if (!hydrated)
18
+ return fallback;
19
+ return new Intl.DateTimeFormat(undefined, dateFormat).format(start);
20
+ }, [start, hydrated, fallback, dateFormat]);
21
+ const ended = useMemo(() => {
22
+ if (!end)
23
+ return fallback;
24
+ if (!hydrated)
25
+ return fallback;
26
+ return new Intl.DateTimeFormat(undefined, dateFormat).format(end);
27
+ }, [end, hydrated, fallback, dateFormat]);
28
+ const duration = useMemo(() => {
29
+ if (!start || !end)
30
+ return fallback;
31
+ if (!hydrated)
32
+ return fallback;
33
+ return formatDuration(end.getTime() - start.getTime());
34
+ }, [start, end, hydrated, fallback, formatDuration]);
35
+ return { started, ended, duration, hydrated };
35
36
  }
36
-
37
- export { useTimeDuration };
@@ -1,3 +1,4 @@
1
+ import { CSSProperties, RefObject } from 'react';
1
2
  type Options = {
2
3
  bottomOffset?: number;
3
4
  min?: number;
@@ -7,9 +8,9 @@ type Options = {
7
8
  * Computes the remaining viewport space below the element and returns a style
8
9
  * with `maxHeight` + `overflow: auto`.
9
10
  */
10
- export declare function useViewportFill<T extends HTMLElement>(ref: React.RefObject<T>, { bottomOffset, min, includeMarginTop }?: Options): {
11
+ export declare function useViewportFill<T extends HTMLElement>(ref: RefObject<T>, { bottomOffset, min, includeMarginTop }?: Options): {
11
12
  maxHeight: number;
12
- style: React.CSSProperties;
13
+ style: CSSProperties;
13
14
  recompute: () => void;
14
15
  };
15
16
  export {};
@@ -1,50 +1,57 @@
1
- import { useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
2
-
3
- const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
4
- function useViewportFill(ref, { bottomOffset = 0, min = 120, includeMarginTop = false } = {}) {
5
- const [maxHeight, setMaxHeight] = useState(0);
6
- const raf = useRef(null);
7
- const measure = useCallback(() => {
8
- if (typeof window === "undefined" || !ref.current) return;
9
- const el = ref.current;
10
- const rect = el.getBoundingClientRect();
11
- let top = rect.top;
12
- if (includeMarginTop) {
13
- const mt = parseFloat(getComputedStyle(el).marginTop || "0") || 0;
14
- top -= mt;
15
- }
16
- const raw = window.innerHeight - bottomOffset - top;
17
- const next = Math.max(min, Math.floor(raw));
18
- setMaxHeight(next);
19
- }, [ref, bottomOffset, min, includeMarginTop]);
20
- useIsomorphicLayoutEffect(() => {
21
- measure();
22
- }, [measure]);
23
- useEffect(() => {
24
- if (typeof window === "undefined") return;
25
- const onFrame = () => {
26
- if (raf.current) cancelAnimationFrame(raf.current);
27
- raf.current = requestAnimationFrame(measure);
1
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState, } from 'react';
2
+ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
3
+ /**
4
+ * Computes the remaining viewport space below the element and returns a style
5
+ * with `maxHeight` + `overflow: auto`.
6
+ */
7
+ export function useViewportFill(ref, { bottomOffset = 0, min = 120, includeMarginTop = false } = {}) {
8
+ const [maxHeight, setMaxHeight] = useState(0);
9
+ const raf = useRef(null);
10
+ const measure = useCallback(() => {
11
+ if (typeof window === 'undefined' || !ref.current)
12
+ return;
13
+ const el = ref.current;
14
+ const rect = el.getBoundingClientRect();
15
+ let top = rect.top;
16
+ if (includeMarginTop) {
17
+ const mt = parseFloat(getComputedStyle(el).marginTop || '0') || 0;
18
+ top -= mt;
19
+ }
20
+ const raw = window.innerHeight - bottomOffset - top;
21
+ const next = Math.max(min, Math.floor(raw));
22
+ setMaxHeight(next);
23
+ }, [ref, bottomOffset, min, includeMarginTop]);
24
+ // Initial + dependency-triggered measurement
25
+ useIsomorphicLayoutEffect(() => {
26
+ measure();
27
+ }, [measure]);
28
+ useEffect(() => {
29
+ if (typeof window === 'undefined')
30
+ return;
31
+ const onFrame = () => {
32
+ if (raf.current)
33
+ cancelAnimationFrame(raf.current);
34
+ raf.current = requestAnimationFrame(measure);
35
+ };
36
+ window.addEventListener('scroll', onFrame, { passive: true });
37
+ window.addEventListener('resize', onFrame);
38
+ let ro = null;
39
+ if ('ResizeObserver' in window && ref.current) {
40
+ ro = new ResizeObserver(onFrame);
41
+ ro.observe(ref.current);
42
+ }
43
+ return () => {
44
+ window.removeEventListener('scroll', onFrame);
45
+ window.removeEventListener('resize', onFrame);
46
+ if (ro)
47
+ ro.disconnect();
48
+ if (raf.current)
49
+ cancelAnimationFrame(raf.current);
50
+ };
51
+ }, [measure, ref]);
52
+ return {
53
+ maxHeight,
54
+ style: { height: maxHeight, overflow: 'auto' },
55
+ recompute: measure,
28
56
  };
29
- window.addEventListener("scroll", onFrame, { passive: true });
30
- window.addEventListener("resize", onFrame);
31
- let ro = null;
32
- if ("ResizeObserver" in window && ref.current) {
33
- ro = new ResizeObserver(onFrame);
34
- ro.observe(ref.current);
35
- }
36
- return () => {
37
- window.removeEventListener("scroll", onFrame);
38
- window.removeEventListener("resize", onFrame);
39
- if (ro) ro.disconnect();
40
- if (raf.current) cancelAnimationFrame(raf.current);
41
- };
42
- }, [measure, ref]);
43
- return {
44
- maxHeight,
45
- style: { height: maxHeight, overflow: "auto" },
46
- recompute: measure
47
- };
48
57
  }
49
-
50
- export { useViewportFill };
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export * from './components/user-display/UserDisplay';
8
8
  export * from './components/tabs/Tabs';
9
9
  export * from './components/headline/Headline';
10
10
  export * from './components/page-layout/PageLayout';
11
- export * from './components/input/Input';
11
+ export * from './components/forms/input/Input';
12
12
  export * from './components/search-box/SearchBox';
13
13
  export * from './hooks/useTheme';
14
14
  export * from './components/chip/Chip';
@@ -20,24 +20,23 @@ export * from './components/skeleton-loader/SkeletonLoader';
20
20
  export * from './components/page/Page';
21
21
  export * from './components/breadcrumbs/Breadcrumbs';
22
22
  export * from './components/circle/Circle';
23
- export * from './components/checkbox/Checkbox';
23
+ export * from './components/forms/checkbox/Checkbox';
24
24
  export * from './components/table/Table';
25
25
  export * from './constants/severity.types';
26
- export * from './components/text-area/Textarea';
26
+ export * from './components/forms/text-area/Textarea';
27
27
  export * from './components/app-header/AppHeader';
28
28
  export * from './components/sidebar/Sidebar';
29
29
  export * from './utils/arrays/nested-filtering';
30
- export * from './components/multi-select/MultiSelect';
30
+ export * from './components/forms/multi-select/MultiSelect';
31
31
  export * from './hooks/useViewportFill';
32
32
  export * from './utils/date/formatDate';
33
33
  export * from './components/filter-field/FilterField';
34
- export * from './components/select/Select';
34
+ export * from './components/forms/select/Select';
35
35
  export * from './components/split-button/SplitButton';
36
- export * from './components/tooltip/Tooltip';
37
36
  export * from './components/segmented-progress-bar/SegmentedProgressBar';
38
37
  export * from './components/datetime-picker/DateTimePicker';
39
- export * from './components/modal/provider/ModalProvider';
40
- export * from './components/modal/Modal';
38
+ export * from './components/overlay/modal/provider/ModalProvider';
39
+ export * from './components/overlay/modal/Modal';
41
40
  export * from './components/toast/provider/ToastProvider';
42
41
  export * from './components/toast/Toast';
43
42
  export * from './components/attribute-chip/AttributeChip';
@@ -52,3 +51,13 @@ export * from './hooks/useTableData';
52
51
  export * from './hooks/useTableSelection';
53
52
  export * from './hooks/useTableSettings';
54
53
  export * from './components/table/components/table-settings/TableSettings';
54
+ export * from './components/filtering/chip-multi-toggle/ChipMultiToggle';
55
+ export * from './components/forms/checkbox-group/CheckboxGroup';
56
+ export * from './components/table/tanstack';
57
+ export * from './components/overlay/side-panel/SidePanel';
58
+ export * from './components/overlay/side-panel/useSidePanel';
59
+ export * from './components/forms/input-container/InputContainer';
60
+ export * from './components/hyperlink/Hyperlink';
61
+ export * from './components/overlay/tooltip/Tooltip';
62
+ export * from './components/overlay/tooltip/TooltipProvider';
63
+ export * from './components/overlay/tooltip/useTooltipTrigger';
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  export * from './components/button/Button';
2
3
  export * from './components/nav-bar/NavBar';
3
4
  export * from './components/avatar/Avatar';
@@ -8,7 +9,7 @@ export * from './components/user-display/UserDisplay';
8
9
  export * from './components/tabs/Tabs';
9
10
  export * from './components/headline/Headline';
10
11
  export * from './components/page-layout/PageLayout';
11
- export * from './components/input/Input';
12
+ export * from './components/forms/input/Input';
12
13
  export * from './components/search-box/SearchBox';
13
14
  export * from './hooks/useTheme';
14
15
  export * from './components/chip/Chip';
@@ -20,24 +21,23 @@ export * from './components/skeleton-loader/SkeletonLoader';
20
21
  export * from './components/page/Page';
21
22
  export * from './components/breadcrumbs/Breadcrumbs';
22
23
  export * from './components/circle/Circle';
23
- export * from './components/checkbox/Checkbox';
24
+ export * from './components/forms/checkbox/Checkbox';
24
25
  export * from './components/table/Table';
25
26
  export * from './constants/severity.types';
26
- export * from './components/text-area/Textarea';
27
+ export * from './components/forms/text-area/Textarea';
27
28
  export * from './components/app-header/AppHeader';
28
29
  export * from './components/sidebar/Sidebar';
29
30
  export * from './utils/arrays/nested-filtering';
30
- export * from './components/multi-select/MultiSelect';
31
+ export * from './components/forms/multi-select/MultiSelect';
31
32
  export * from './hooks/useViewportFill';
32
33
  export * from './utils/date/formatDate';
33
34
  export * from './components/filter-field/FilterField';
34
- export * from './components/select/Select';
35
+ export * from './components/forms/select/Select';
35
36
  export * from './components/split-button/SplitButton';
36
- export * from './components/tooltip/Tooltip';
37
37
  export * from './components/segmented-progress-bar/SegmentedProgressBar';
38
38
  export * from './components/datetime-picker/DateTimePicker';
39
- export * from './components/modal/provider/ModalProvider';
40
- export * from './components/modal/Modal';
39
+ export * from './components/overlay/modal/provider/ModalProvider';
40
+ export * from './components/overlay/modal/Modal';
41
41
  export * from './components/toast/provider/ToastProvider';
42
42
  export * from './components/toast/Toast';
43
43
  export * from './components/attribute-chip/AttributeChip';
@@ -52,3 +52,13 @@ export * from './hooks/useTableData';
52
52
  export * from './hooks/useTableSelection';
53
53
  export * from './hooks/useTableSettings';
54
54
  export * from './components/table/components/table-settings/TableSettings';
55
+ export * from './components/filtering/chip-multi-toggle/ChipMultiToggle';
56
+ export * from './components/forms/checkbox-group/CheckboxGroup';
57
+ export * from './components/table/tanstack';
58
+ export * from './components/overlay/side-panel/SidePanel';
59
+ export * from './components/overlay/side-panel/useSidePanel';
60
+ export * from './components/forms/input-container/InputContainer';
61
+ export * from './components/hyperlink/Hyperlink';
62
+ export * from './components/overlay/tooltip/Tooltip';
63
+ export * from './components/overlay/tooltip/TooltipProvider';
64
+ export * from './components/overlay/tooltip/useTooltipTrigger';
@@ -60,11 +60,10 @@ body.dbc-app {
60
60
  line-height: var(--line-height-normal);
61
61
  tr + tr th,
62
62
  tr + tr td {
63
- padding-top: var(--spacing-xxs);
63
+ padding-block: var(--spacing-xxs);
64
64
  }
65
65
 
66
66
  th {
67
- width: 1%;
68
67
  white-space: nowrap;
69
68
  color: var(--color-fg-subtle);
70
69
  font-weight: var(--font-weight-default);
@@ -161,7 +160,8 @@ body.dbc-app {
161
160
  .fitContent {
162
161
  white-space: nowrap !important;
163
162
  width: 1% !important;
164
- min-width: unset !important;
163
+ min-width: 1% !important;
164
+ max-width: 1% !important;
165
165
  }
166
166
 
167
167
  .dbc-full-height {
@@ -2,6 +2,10 @@
2
2
  display: flex;
3
3
  }
4
4
 
5
+ .dbc-inline-flex {
6
+ display: inline-flex;
7
+ }
8
+
5
9
  .dbc-flex-row {
6
10
  flex-direction: row;
7
11
  }
@@ -60,11 +60,10 @@ body.dbc-app {
60
60
  line-height: var(--line-height-normal);
61
61
  tr + tr th,
62
62
  tr + tr td {
63
- padding-top: var(--spacing-xxs);
63
+ padding-block: var(--spacing-xxs);
64
64
  }
65
65
 
66
66
  th {
67
- width: 1%;
68
67
  white-space: nowrap;
69
68
  color: var(--color-fg-subtle);
70
69
  font-weight: var(--font-weight-default);
@@ -161,7 +160,8 @@ body.dbc-app {
161
160
  .fitContent {
162
161
  white-space: nowrap !important;
163
162
  width: 1% !important;
164
- min-width: unset !important;
163
+ min-width: 1% !important;
164
+ max-width: 1% !important;
165
165
  }
166
166
 
167
167
  .dbc-full-height {
@@ -1,4 +1,4 @@
1
- :root {
1
+ html[data-theme='dark'] {
2
2
  /* Brand blues */
3
3
  --dbc-blue-500: #3b82f6;
4
4
  --dbc-blue-600: #2563eb;
@@ -1,4 +1,4 @@
1
- :root {
1
+ html[data-theme='light'] {
2
2
  /* ==========================================================================
3
3
  * PRIMITIVES (DBC)
4
4
  * ======================================================================= */
@@ -286,6 +286,7 @@
286
286
 
287
287
  /* Layers */
288
288
  --z-base: 0;
289
+ --z-backdrop: 1245;
289
290
  --z-dropdown: 1000;
290
291
  --z-sticky: 1100;
291
292
  --z-banner: 1150;
@@ -63,7 +63,7 @@
63
63
  --border-radius-round: 50%;
64
64
 
65
65
  /* Typography */
66
- --font-family: Roboto, -apple-system, "Segoe UI", Roboto, sans-serif;
66
+ --font-family: Roboto, -apple-system, 'Segoe UI', Roboto, sans-serif;
67
67
  --font-family-mono: ui-monospace, SFMono-Regular, monospace;
68
68
 
69
69
  --font-size-xs: 0.75rem;
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1,8 +1,8 @@
1
1
  export type A11yProps = {
2
- "aria-label"?: string;
3
- "aria-describedby"?: string;
4
- "aria-controls"?: string;
5
- "aria-current"?: "page" | "step" | "location" | "date" | "time" | "true" | "false";
6
- "aria-hidden"?: boolean;
2
+ 'aria-label'?: string;
3
+ 'aria-describedby'?: string;
4
+ 'aria-controls'?: string;
5
+ 'aria-current'?: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';
6
+ 'aria-hidden'?: boolean;
7
7
  title?: string;
8
8
  };
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1,38 +1,48 @@
1
- const normalize = (s) => s.normalize("NFKC").toLowerCase().trim();
1
+ const normalize = (s) => s.normalize('NFKC').toLowerCase().trim();
2
2
  const toTerms = (q) => (Array.isArray(q) ? q : q.split(/\s+/)).map(normalize).filter(Boolean);
3
- const valueToSearchable = (value) => typeof value === "string" ? value : Array.isArray(value) || typeof value === "object" ? JSON.stringify(value) : value == null ? "" : String(value);
3
+ const valueToSearchable = (value) => typeof value === 'string'
4
+ ? value
5
+ : Array.isArray(value) || typeof value === 'object'
6
+ ? JSON.stringify(value)
7
+ : value == null
8
+ ? ''
9
+ : String(value);
4
10
  const itemMatches = (item, keys, terms, mode) => {
5
- if (terms.length === 0) return true;
6
- const haystack = keys.map((k) => valueToSearchable(item[k])).join(" ").toString();
7
- const h = normalize(haystack);
8
- const hit = (t) => h.includes(t);
9
- return mode === "AND" ? terms.every(hit) : terms.some(hit);
11
+ if (terms.length === 0)
12
+ return true;
13
+ const haystack = keys
14
+ .map(k => valueToSearchable(item[k]))
15
+ .join(' ')
16
+ .toString();
17
+ const h = normalize(haystack);
18
+ const hit = (t) => h.includes(t);
19
+ return mode === 'AND' ? terms.every(hit) : terms.some(hit);
10
20
  };
11
- function nestedFiltering(items, opts) {
12
- const { keys, query, includeParents = true, childrenKey, mode = "AND" } = opts;
13
- const ck = childrenKey != null ? childrenKey : "children";
14
- const terms = toTerms(query);
15
- const searchNested = (list) => {
16
- const out = [];
17
- for (const item of list) {
18
- const children = item[ck] || [];
19
- const filteredChildren = searchNested(children);
20
- const matchedSelf = itemMatches(item, keys, terms, mode);
21
- if (matchedSelf) {
22
- const clone = { ...item, [ck]: filteredChildren };
23
- out.push(clone);
24
- } else if (filteredChildren.length) {
25
- if (includeParents) {
26
- const clone = { ...item, [ck]: filteredChildren };
27
- out.push(clone);
28
- } else {
29
- out.push(...filteredChildren);
21
+ export function nestedFiltering(items, opts) {
22
+ const { keys, query, includeParents = true, childrenKey, mode = 'AND' } = opts;
23
+ const ck = (childrenKey !== null && childrenKey !== void 0 ? childrenKey : 'children');
24
+ const terms = toTerms(query);
25
+ const searchNested = (list) => {
26
+ const out = [];
27
+ for (const item of list) {
28
+ const children = item[ck] || [];
29
+ const filteredChildren = searchNested(children);
30
+ const matchedSelf = itemMatches(item, keys, terms, mode);
31
+ if (matchedSelf) {
32
+ const clone = { ...item, [ck]: filteredChildren };
33
+ out.push(clone);
34
+ }
35
+ else if (filteredChildren.length) {
36
+ if (includeParents) {
37
+ const clone = { ...item, [ck]: filteredChildren };
38
+ out.push(clone);
39
+ }
40
+ else {
41
+ out.push(...filteredChildren);
42
+ }
43
+ }
30
44
  }
31
- }
32
- }
33
- return out;
34
- };
35
- return searchNested(items);
45
+ return out;
46
+ };
47
+ return searchNested(items);
36
48
  }
37
-
38
- export { nestedFiltering };