@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.
- package/dist/assets/logo.js +2 -85
- package/dist/components/__stories__/_data/table.d.ts +15 -0
- package/dist/components/__stories__/_data/table.js +49 -0
- package/dist/components/__stories__/story-components/Colors.d.ts +2 -1
- package/dist/components/__stories__/story-components/Colors.js +87 -142
- package/dist/components/__stories__/story-components/Spacing.d.ts +1 -0
- package/dist/components/__stories__/story-components/Spacing.js +58 -166
- package/dist/components/app-header/AppHeader.d.ts +4 -3
- package/dist/components/app-header/AppHeader.js +3 -6
- package/dist/components/attribute-chip/AttributeChip.d.ts +1 -0
- package/dist/components/attribute-chip/AttributeChip.js +3 -14
- package/dist/components/avatar/Avatar.d.ts +2 -2
- package/dist/components/avatar/Avatar.js +37 -71
- package/dist/components/breadcrumbs/Breadcrumbs.d.ts +4 -4
- package/dist/components/breadcrumbs/Breadcrumbs.js +4 -13
- package/dist/components/button/Button.d.ts +3 -2
- package/dist/components/button/Button.js +54 -56
- package/dist/components/button/Button.module.css +1 -1
- package/dist/components/card/Card.d.ts +8 -7
- package/dist/components/card/Card.js +19 -60
- package/dist/components/card-container/CardContainer.d.ts +3 -3
- package/dist/components/card-container/CardContainer.js +4 -16
- package/dist/components/chip/Chip.d.ts +6 -5
- package/dist/components/chip/Chip.js +14 -38
- package/dist/components/chip/Chip.module.css +9 -1
- package/dist/components/circle/Circle.d.ts +3 -2
- package/dist/components/circle/Circle.js +3 -10
- package/dist/components/clear-button/ClearButton.d.ts +2 -1
- package/dist/components/clear-button/ClearButton.js +6 -17
- package/dist/components/code-block/CodeBlock.d.ts +1 -0
- package/dist/components/code-block/CodeBlock.js +4 -10
- package/dist/components/copy-button/CopyButton.d.ts +4 -3
- package/dist/components/copy-button/CopyButton.js +19 -26
- package/dist/components/datetime-picker/DateTimePicker.d.ts +8 -5
- package/dist/components/datetime-picker/DateTimePicker.js +364 -459
- package/dist/components/filter-field/FilterField.d.ts +5 -2
- package/dist/components/filter-field/FilterField.js +130 -173
- package/dist/components/filter-field/FilterField.module.css +21 -5
- package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.d.ts +36 -0
- package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.js +53 -0
- package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.module.css +60 -0
- package/dist/components/forms/checkbox/Checkbox.d.ts +31 -0
- package/dist/components/forms/checkbox/Checkbox.js +27 -0
- package/dist/components/{checkbox → forms/checkbox}/Checkbox.module.css +0 -1
- package/dist/components/forms/checkbox-group/CheckboxGroup.d.ts +47 -0
- package/dist/components/forms/checkbox-group/CheckboxGroup.js +75 -0
- package/dist/components/forms/checkbox-group/CheckboxGroup.module.css +115 -0
- package/dist/components/{input → forms/input}/Input.d.ts +9 -5
- package/dist/components/forms/input/Input.js +70 -0
- package/dist/components/{input → forms/input}/Input.module.css +1 -0
- package/dist/components/forms/input-container/InputContainer.d.ts +15 -0
- package/dist/components/forms/input-container/InputContainer.js +15 -0
- package/dist/components/forms/input-container/InputContainer.module.css +34 -0
- package/dist/components/forms/multi-select/MultiSelect.d.ts +20 -0
- package/dist/components/forms/multi-select/MultiSelect.js +19 -0
- package/dist/components/forms/select/Select.d.ts +21 -0
- package/dist/components/forms/select/Select.js +94 -0
- package/dist/components/forms/text-area/Textarea.d.ts +17 -0
- package/dist/components/forms/text-area/Textarea.js +33 -0
- package/dist/components/forms/text-area/Textarea.module.css +26 -0
- package/dist/components/headline/Headline.js +18 -43
- package/dist/components/{link/Link.d.ts → hyperlink/Hyperlink.d.ts} +2 -2
- package/dist/components/hyperlink/Hyperlink.js +11 -0
- package/dist/components/{link/Link.module.css → hyperlink/Hyperlink.module.css} +5 -14
- package/dist/components/icon/Icon.d.ts +4 -3
- package/dist/components/icon/Icon.js +11 -17
- package/dist/components/menu/Menu.js +25 -67
- package/dist/components/meta-bar/MetaBar.d.ts +4 -4
- package/dist/components/meta-bar/MetaBar.js +7 -20
- package/dist/components/nav-bar/NavBar.d.ts +5 -5
- package/dist/components/nav-bar/NavBar.js +15 -45
- package/dist/components/{modal → overlay/modal}/Modal.d.ts +4 -2
- package/dist/components/overlay/modal/Modal.js +92 -0
- package/dist/components/{modal → overlay/modal}/provider/ModalProvider.d.ts +0 -1
- package/dist/components/overlay/modal/provider/ModalProvider.js +70 -0
- package/dist/components/overlay/side-panel/SidePanel.d.ts +16 -0
- package/dist/components/overlay/side-panel/SidePanel.js +10 -0
- package/dist/components/overlay/side-panel/SidePanel.module.css +56 -0
- package/dist/components/overlay/side-panel/useSidePanel.d.ts +5 -0
- package/dist/components/overlay/side-panel/useSidePanel.js +11 -0
- package/dist/components/overlay/tooltip/Tooltip.d.ts +13 -0
- package/dist/components/overlay/tooltip/Tooltip.js +17 -0
- package/dist/components/overlay/tooltip/Tooltip.module.css +106 -0
- package/dist/components/overlay/tooltip/TooltipProvider.d.ts +20 -0
- package/dist/components/overlay/tooltip/TooltipProvider.js +244 -0
- package/dist/components/overlay/tooltip/useTooltipTrigger.d.ts +24 -0
- package/dist/components/overlay/tooltip/useTooltipTrigger.js +108 -0
- package/dist/components/page/Page.d.ts +7 -6
- package/dist/components/page/Page.js +4 -21
- package/dist/components/page-layout/PageLayout.d.ts +11 -12
- package/dist/components/page-layout/PageLayout.js +35 -71
- package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.js +4 -22
- package/dist/components/pagination/Pagination.d.ts +2 -1
- package/dist/components/pagination/Pagination.js +38 -121
- package/dist/components/panel/Panel.d.ts +4 -3
- package/dist/components/panel/Panel.js +5 -10
- package/dist/components/popover/Popover.d.ts +1 -0
- package/dist/components/popover/Popover.js +116 -141
- package/dist/components/search-box/SearchBox.d.ts +2 -2
- package/dist/components/search-box/SearchBox.js +112 -162
- package/dist/components/segmented-progress-bar/SegmentedProgressBar.d.ts +1 -1
- package/dist/components/segmented-progress-bar/SegmentedProgressBar.js +47 -94
- package/dist/components/sidebar/Sidebar.d.ts +1 -0
- package/dist/components/sidebar/Sidebar.js +5 -7
- package/dist/components/sidebar/components/SidebarItem.js +6 -14
- package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.d.ts +1 -1
- package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.js +48 -88
- package/dist/components/sidebar/components/sidebar-container/SidebarContainer.d.ts +3 -2
- package/dist/components/sidebar/components/sidebar-container/SidebarContainer.js +11 -41
- package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.d.ts +1 -0
- package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.js +4 -25
- package/dist/components/sidebar/components/sidebar-items/SidebarItems.js +9 -23
- package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.js +19 -40
- package/dist/components/sidebar/providers/SidebarProvider.d.ts +2 -1
- package/dist/components/sidebar/providers/SidebarProvider.js +182 -165
- package/dist/components/skeleton-loader/SkeletonLoader.js +68 -266
- package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.js +11 -34
- package/dist/components/split-button/SplitButton.d.ts +7 -5
- package/dist/components/split-button/SplitButton.js +4 -27
- package/dist/components/split-pane/SplitPane.js +69 -105
- package/dist/components/split-pane/provider/SplitPaneContext.js +77 -71
- package/dist/components/table/Table.d.ts +9 -7
- package/dist/components/table/Table.js +115 -238
- package/dist/components/table/Table.module.css +5 -1
- package/dist/components/table/components/column-resizer/ColumnResizer.js +4 -15
- package/dist/components/table/components/empty-state/EmptyState.d.ts +6 -5
- package/dist/components/table/components/empty-state/EmptyState.js +22 -41
- package/dist/components/table/components/table-settings/TableSettings.d.ts +2 -1
- package/dist/components/table/components/table-settings/TableSettings.js +9 -27
- package/dist/components/table/tanstack.d.ts +1 -1
- package/dist/components/table/tanstack.js +154 -160
- package/dist/components/tabs/Tabs.d.ts +1 -0
- package/dist/components/tabs/Tabs.js +32 -81
- package/dist/components/toast/Toast.d.ts +1 -1
- package/dist/components/toast/Toast.js +4 -37
- package/dist/components/toast/Toast.module.css +1 -0
- package/dist/components/toast/provider/ToastProvider.d.ts +1 -1
- package/dist/components/toast/provider/ToastProvider.js +60 -87
- package/dist/components/user-display/UserDisplay.d.ts +2 -1
- package/dist/components/user-display/UserDisplay.js +4 -20
- package/dist/constants/severity.d.ts +1 -1
- package/dist/constants/severity.js +14 -16
- package/dist/constants/severity.types.d.ts +1 -1
- package/dist/constants/severity.types.js +1 -1
- package/dist/constants/sizes.js +6 -8
- package/dist/hooks/usePagination.d.ts +1 -1
- package/dist/hooks/usePagination.js +75 -82
- package/dist/hooks/useSorting.js +112 -110
- package/dist/hooks/useTableData.d.ts +1 -1
- package/dist/hooks/useTableData.js +42 -47
- package/dist/hooks/useTableSelection.js +121 -121
- package/dist/hooks/useTableSettings.js +23 -25
- package/dist/hooks/useTheme.d.ts +3 -7
- package/dist/hooks/useTheme.js +52 -47
- package/dist/hooks/useTimeDuration.d.ts +2 -2
- package/dist/hooks/useTimeDuration.js +33 -34
- package/dist/hooks/useViewportFill.d.ts +3 -2
- package/dist/hooks/useViewportFill.js +55 -48
- package/dist/index.d.ts +17 -8
- package/dist/index.js +18 -8
- package/dist/src/styles/styles.css +3 -3
- package/dist/styles/css-helper-classes/flex.css +4 -0
- package/dist/styles/styles.css +3 -3
- package/dist/styles/themes/dbc/dark.css +1 -1
- package/dist/styles/themes/dbc/light.css +2 -1
- package/dist/styles/themes/forfatterweb/light.css +1 -1
- package/dist/styles/themes/types.js +1 -1
- package/dist/types/a11y-props.types.d.ts +5 -5
- package/dist/types/a11y-props.types.js +1 -1
- package/dist/types/sizes.types.js +1 -1
- package/dist/utils/arrays/nested-filtering.js +43 -33
- package/dist/utils/date/formatDate.js +25 -16
- package/package.json +18 -9
- package/dist/assets/logo.cjs +0 -87
- package/dist/components/__stories__/story-components/Colors.cjs +0 -159
- package/dist/components/__stories__/story-components/Spacing.cjs +0 -190
- package/dist/components/app-header/AppHeader.cjs +0 -14
- package/dist/components/attribute-chip/AttributeChip.cjs +0 -22
- package/dist/components/avatar/Avatar.cjs +0 -101
- package/dist/components/breadcrumbs/Breadcrumbs.cjs +0 -22
- package/dist/components/button/Button.cjs +0 -87
- package/dist/components/card/Card.cjs +0 -69
- package/dist/components/card-container/CardContainer.cjs +0 -24
- package/dist/components/checkbox/Checkbox.cjs +0 -42
- package/dist/components/checkbox/Checkbox.d.ts +0 -12
- package/dist/components/checkbox/Checkbox.js +0 -36
- package/dist/components/chip/Chip.cjs +0 -50
- package/dist/components/circle/Circle.cjs +0 -18
- package/dist/components/clear-button/ClearButton.cjs +0 -26
- package/dist/components/code-block/CodeBlock.cjs +0 -18
- package/dist/components/copy-button/CopyButton.cjs +0 -35
- package/dist/components/datetime-picker/DateTimePicker.cjs +0 -504
- package/dist/components/filter-field/FilterField.cjs +0 -189
- package/dist/components/headline/Headline.cjs +0 -53
- package/dist/components/icon/Icon.cjs +0 -27
- package/dist/components/input/Input.cjs +0 -89
- package/dist/components/input/Input.js +0 -83
- package/dist/components/link/Link.cjs +0 -46
- package/dist/components/link/Link.js +0 -21
- package/dist/components/menu/Menu.cjs +0 -96
- package/dist/components/meta-bar/MetaBar.cjs +0 -29
- package/dist/components/modal/Modal.cjs +0 -134
- package/dist/components/modal/Modal.js +0 -128
- package/dist/components/modal/provider/ModalProvider.cjs +0 -80
- package/dist/components/modal/provider/ModalProvider.js +0 -77
- package/dist/components/multi-select/MultiSelect.cjs +0 -59
- package/dist/components/multi-select/MultiSelect.d.ts +0 -18
- package/dist/components/multi-select/MultiSelect.js +0 -57
- package/dist/components/nav-bar/NavBar.cjs +0 -55
- package/dist/components/page/Page.cjs +0 -30
- package/dist/components/page-layout/PageLayout.cjs +0 -84
- package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.cjs +0 -32
- package/dist/components/pagination/Pagination.cjs +0 -133
- package/dist/components/panel/Panel.cjs +0 -18
- package/dist/components/popover/Popover.cjs +0 -149
- package/dist/components/search-box/SearchBox.cjs +0 -175
- package/dist/components/segmented-progress-bar/SegmentedProgressBar.cjs +0 -103
- package/dist/components/select/Select.cjs +0 -121
- package/dist/components/select/Select.d.ts +0 -12
- package/dist/components/select/Select.js +0 -119
- package/dist/components/sidebar/Sidebar.cjs +0 -11
- package/dist/components/sidebar/components/SidebarItem.cjs +0 -18
- package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.cjs +0 -100
- package/dist/components/sidebar/components/sidebar-container/SidebarContainer.cjs +0 -50
- package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.cjs +0 -34
- package/dist/components/sidebar/components/sidebar-items/SidebarItems.cjs +0 -29
- package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.cjs +0 -52
- package/dist/components/sidebar/providers/SidebarProvider.cjs +0 -179
- package/dist/components/skeleton-loader/SkeletonLoader.cjs +0 -270
- package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.cjs +0 -42
- package/dist/components/split-button/SplitButton.cjs +0 -37
- package/dist/components/split-pane/SplitPane.cjs +0 -123
- package/dist/components/split-pane/provider/SplitPaneContext.cjs +0 -87
- package/dist/components/table/Table.cjs +0 -249
- package/dist/components/table/components/column-resizer/ColumnResizer.cjs +0 -22
- package/dist/components/table/components/empty-state/EmptyState.cjs +0 -52
- package/dist/components/table/components/table-settings/TableSettings.cjs +0 -32
- package/dist/components/table/tanstack.cjs +0 -193
- package/dist/components/tabs/Tabs.cjs +0 -90
- package/dist/components/text-area/Textarea.cjs +0 -62
- package/dist/components/text-area/Textarea.d.ts +0 -14
- package/dist/components/text-area/Textarea.js +0 -56
- package/dist/components/text-area/Textarea.module.css +0 -3
- package/dist/components/toast/Toast.cjs +0 -47
- package/dist/components/toast/provider/ToastProvider.cjs +0 -98
- package/dist/components/tooltip/Tooltip.cjs +0 -183
- package/dist/components/tooltip/Tooltip.d.ts +0 -11
- package/dist/components/tooltip/Tooltip.js +0 -177
- package/dist/components/tooltip/Tooltip.module.css +0 -66
- package/dist/components/user-display/UserDisplay.cjs +0 -28
- package/dist/constants/severity.cjs +0 -21
- package/dist/constants/severity.types.cjs +0 -2
- package/dist/constants/sizes.cjs +0 -11
- package/dist/hooks/usePagination.cjs +0 -88
- package/dist/hooks/useSorting.cjs +0 -118
- package/dist/hooks/useTableData.cjs +0 -52
- package/dist/hooks/useTableSelection.cjs +0 -130
- package/dist/hooks/useTableSettings.cjs +0 -28
- package/dist/hooks/useTheme.cjs +0 -58
- package/dist/hooks/useTimeDuration.cjs +0 -39
- package/dist/hooks/useViewportFill.cjs +0 -52
- package/dist/index.cjs +0 -383
- package/dist/styles/themes/types.cjs +0 -2
- package/dist/types/a11y-props.types.cjs +0 -2
- package/dist/types/assets.d.cjs +0 -2
- package/dist/types/assets.d.js +0 -1
- package/dist/types/css.d.cjs +0 -2
- package/dist/types/css.d.js +0 -1
- package/dist/types/sizes.types.cjs +0 -2
- package/dist/utils/arrays/nested-filtering.cjs +0 -40
- package/dist/utils/date/formatDate.cjs +0 -19
- /package/dist/components/{modal → overlay/modal}/Modal.module.css +0 -0
package/dist/hooks/useTheme.js
CHANGED
|
@@ -1,55 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const STORAGE_KEY =
|
|
5
|
-
function
|
|
6
|
-
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
function getCookie(name) {
|
|
9
|
+
const match = document.cookie.match(new RegExp(`(?:^|; )${name}=([^;]*)`));
|
|
10
|
+
return match ? decodeURIComponent(match[1]) : null;
|
|
19
11
|
}
|
|
20
|
-
function
|
|
21
|
-
const [theme, setTheme] = useState(null);
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
let stored = initialTheme;
|
|
12
|
+
function persistTheme(id) {
|
|
24
13
|
try {
|
|
25
|
-
|
|
26
|
-
console.log("Restored theme from localStorage:", stored);
|
|
27
|
-
} catch {
|
|
14
|
+
localStorage.setItem(STORAGE_KEY, id);
|
|
28
15
|
}
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
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):
|
|
21
|
+
export declare function useTimeDuration({ start, end, dateFormat, fallback, formatDuration, }: useTimeDurationArgs): useTimeDurationReturn;
|
|
22
22
|
export {};
|
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
3
3
|
function defaultDuration(ms) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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:
|
|
11
|
+
export declare function useViewportFill<T extends HTMLElement>(ref: RefObject<T>, { bottomOffset, min, includeMarginTop }?: Options): {
|
|
11
12
|
maxHeight: number;
|
|
12
|
-
style:
|
|
13
|
+
style: CSSProperties;
|
|
13
14
|
recompute: () => void;
|
|
14
15
|
};
|
|
15
16
|
export {};
|
|
@@ -1,50 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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-
|
|
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:
|
|
163
|
+
min-width: 1% !important;
|
|
164
|
+
max-width: 1% !important;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
.dbc-full-height {
|
package/dist/styles/styles.css
CHANGED
|
@@ -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-
|
|
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:
|
|
163
|
+
min-width: 1% !important;
|
|
164
|
+
max-width: 1% !important;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
.dbc-full-height {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
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,
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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(
|
|
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 ===
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
34
|
-
};
|
|
35
|
-
return searchNested(items);
|
|
45
|
+
return out;
|
|
46
|
+
};
|
|
47
|
+
return searchNested(items);
|
|
36
48
|
}
|
|
37
|
-
|
|
38
|
-
export { nestedFiltering };
|