@dbcdk/react-components 0.0.96 → 0.0.98

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 (235) hide show
  1. package/dist/components/page/Page.d.ts +2 -1
  2. package/dist/components/page-layout/PageLayout.d.ts +0 -2
  3. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.d.ts +1 -12
  4. package/dist/components/skeleton-loader/SkeletonLoader.d.ts +1 -1
  5. package/dist/components/table/Table.d.ts +1 -1
  6. package/dist/components/table/Table.types.d.ts +3 -0
  7. package/dist/components/table/components/TableHeader.d.ts +2 -1
  8. package/dist/components/tabs/Tabs.d.ts +2 -1
  9. package/dist/constants/chart-colors.d.ts +2 -0
  10. package/dist/constants/chart-colors.types.d.ts +3 -0
  11. package/dist/index.cjs +12830 -0
  12. package/dist/index.css +7084 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.js +12720 -79
  15. package/dist/styles/styles.css +6 -1
  16. package/dist/styles/themes/dbc/colors.css +14 -6
  17. package/dist/styles/themes/forfatterweb/light.css +17 -0
  18. package/dist/styles.css +6 -1
  19. package/dist/tanstack.cjs +2660 -0
  20. package/dist/tanstack.css +1267 -0
  21. package/dist/tanstack.js +2636 -3
  22. package/dist/themes/dbc.css +3 -0
  23. package/dist/themes/forfatterweb.css +2 -0
  24. package/package.json +11 -10
  25. package/dist/assets/logo.js +0 -2
  26. package/dist/components/__stories__/_data/table.d.ts +0 -15
  27. package/dist/components/__stories__/_data/table.js +0 -55
  28. package/dist/components/__stories__/_data/tabs.d.ts +0 -9
  29. package/dist/components/__stories__/_data/tabs.js +0 -31
  30. package/dist/components/__stories__/story-components/Colors.d.ts +0 -11
  31. package/dist/components/__stories__/story-components/Colors.js +0 -96
  32. package/dist/components/__stories__/story-components/Colors.module.css +0 -27
  33. package/dist/components/__stories__/story-components/ComponentSizes.d.ts +0 -2
  34. package/dist/components/__stories__/story-components/ComponentSizes.js +0 -26
  35. package/dist/components/__stories__/story-components/Elevation.d.ts +0 -2
  36. package/dist/components/__stories__/story-components/Elevation.js +0 -49
  37. package/dist/components/__stories__/story-components/Flex.d.ts +0 -2
  38. package/dist/components/__stories__/story-components/Flex.js +0 -177
  39. package/dist/components/__stories__/story-components/Flex.module.css +0 -317
  40. package/dist/components/__stories__/story-components/Spacing.d.ts +0 -6
  41. package/dist/components/__stories__/story-components/Spacing.js +0 -76
  42. package/dist/components/__stories__/story-components/Spacing.module.css +0 -154
  43. package/dist/components/accordion/Accordion.js +0 -70
  44. package/dist/components/accordion/Accordion.module.css +0 -28
  45. package/dist/components/accordion/components/AccordionRow.js +0 -53
  46. package/dist/components/accordion/components/AccordionRow.module.css +0 -90
  47. package/dist/components/alert/Alert.js +0 -17
  48. package/dist/components/alert/Alert.module.css +0 -98
  49. package/dist/components/app-header/AppHeader.js +0 -5
  50. package/dist/components/app-header/AppHeader.module.css +0 -74
  51. package/dist/components/attribute-chip/AttributeChip.js +0 -5
  52. package/dist/components/attribute-chip/AttributeChip.module.css +0 -65
  53. package/dist/components/avatar/Avatar.js +0 -48
  54. package/dist/components/avatar/Avatar.module.css +0 -91
  55. package/dist/components/breadcrumbs/Breadcrumbs.js +0 -6
  56. package/dist/components/breadcrumbs/Breadcrumbs.module.css +0 -80
  57. package/dist/components/button/Button.js +0 -81
  58. package/dist/components/button/Button.module.css +0 -249
  59. package/dist/components/button-select/ButtonSelect.js +0 -7
  60. package/dist/components/button-select/ButtonSelect.module.css +0 -40
  61. package/dist/components/card/Card.js +0 -71
  62. package/dist/components/card/Card.module.css +0 -160
  63. package/dist/components/card/components/CardMeta.js +0 -26
  64. package/dist/components/card/components/CardMeta.module.css +0 -55
  65. package/dist/components/card-container/CardContainer.js +0 -6
  66. package/dist/components/card-container/CardContainer.module.css +0 -61
  67. package/dist/components/chip/Chip.js +0 -31
  68. package/dist/components/chip/Chip.module.css +0 -236
  69. package/dist/components/circle/Circle.js +0 -5
  70. package/dist/components/circle/Circle.module.css +0 -128
  71. package/dist/components/clear-button/ClearButton.js +0 -13
  72. package/dist/components/clear-button/ClearButton.module.css +0 -26
  73. package/dist/components/code-block/CodeBlock.js +0 -58
  74. package/dist/components/code-block/CodeBlock.module.css +0 -124
  75. package/dist/components/copy-button/CopyButton.js +0 -78
  76. package/dist/components/copy-button/CopyButton.module.css +0 -22
  77. package/dist/components/datetime-picker/DateTimePicker.js +0 -403
  78. package/dist/components/datetime-picker/DateTimePicker.module.css +0 -155
  79. package/dist/components/datetime-picker/dateTimeHelpers.js +0 -248
  80. package/dist/components/divider/Divider.js +0 -12
  81. package/dist/components/filter-field/FilterField.js +0 -191
  82. package/dist/components/filter-field/FilterField.module.css +0 -379
  83. package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.js +0 -52
  84. package/dist/components/filtering/chip-multi-toggle/ChipMultiToggle.module.css +0 -59
  85. package/dist/components/forms/checkbox/Checkbox.js +0 -28
  86. package/dist/components/forms/checkbox/Checkbox.module.css +0 -103
  87. package/dist/components/forms/checkbox-group/CheckboxGroup.js +0 -75
  88. package/dist/components/forms/checkbox-group/CheckboxGroup.module.css +0 -115
  89. package/dist/components/forms/form-select/FormSelect.js +0 -86
  90. package/dist/components/forms/form-select/FormSelect.module.css +0 -236
  91. package/dist/components/forms/input/Input.js +0 -77
  92. package/dist/components/forms/input/Input.module.css +0 -468
  93. package/dist/components/forms/input-container/InputContainer.js +0 -15
  94. package/dist/components/forms/input-container/InputContainer.module.css +0 -60
  95. package/dist/components/forms/multi-select/MultiSelect.js +0 -122
  96. package/dist/components/forms/radio-buttons/RadioButton.js +0 -26
  97. package/dist/components/forms/radio-buttons/RadioButtonGroup.js +0 -19
  98. package/dist/components/forms/radio-buttons/RadioButtons.module.css +0 -118
  99. package/dist/components/forms/select/Select.js +0 -185
  100. package/dist/components/forms/select/Select.module.css +0 -32
  101. package/dist/components/forms/text-area/Textarea.js +0 -47
  102. package/dist/components/forms/text-area/Textarea.module.css +0 -70
  103. package/dist/components/forms/typeahead/Typeahead.js +0 -668
  104. package/dist/components/forms/typeahead/Typeahead.module.css +0 -38
  105. package/dist/components/grid/Grid.js +0 -23
  106. package/dist/components/grid/Grid.module.css +0 -35
  107. package/dist/components/headline/CollapsibleHeadline.js +0 -29
  108. package/dist/components/headline/Headline.js +0 -26
  109. package/dist/components/headline/Headline.module.css +0 -185
  110. package/dist/components/hyperlink/Hyperlink.js +0 -40
  111. package/dist/components/hyperlink/Hyperlink.module.css +0 -107
  112. package/dist/components/icon/Icon.js +0 -14
  113. package/dist/components/icon/Icon.module.css +0 -36
  114. package/dist/components/interval-select/IntervalSelect.js +0 -99
  115. package/dist/components/json-viewer/HighlightedText.js +0 -6
  116. package/dist/components/json-viewer/JsonNode.js +0 -30
  117. package/dist/components/json-viewer/JsonViewer.js +0 -68
  118. package/dist/components/json-viewer/JsonViewer.module.css +0 -346
  119. package/dist/components/json-viewer/types.js +0 -1
  120. package/dist/components/json-viewer/useClipboardStatus.js +0 -11
  121. package/dist/components/json-viewer/utils.js +0 -125
  122. package/dist/components/menu/Menu.js +0 -165
  123. package/dist/components/menu/Menu.module.css +0 -220
  124. package/dist/components/meta-bar/MetaBar.js +0 -9
  125. package/dist/components/meta-bar/MetaBar.module.css +0 -27
  126. package/dist/components/nav-bar/NavBar.js +0 -29
  127. package/dist/components/nav-bar/NavBar.module.css +0 -221
  128. package/dist/components/overlay/fade-overlay/FadeOverlay.js +0 -8
  129. package/dist/components/overlay/fade-overlay/FadeOverlay.module.css +0 -54
  130. package/dist/components/overlay/modal/Modal.js +0 -115
  131. package/dist/components/overlay/modal/Modal.module.css +0 -109
  132. package/dist/components/overlay/modal/provider/ModalProvider.js +0 -73
  133. package/dist/components/overlay/side-panel/SidePanel.js +0 -83
  134. package/dist/components/overlay/side-panel/SidePanel.module.css +0 -177
  135. package/dist/components/overlay/side-panel/useSidePanel.js +0 -11
  136. package/dist/components/overlay/tooltip/Tooltip.js +0 -17
  137. package/dist/components/overlay/tooltip/Tooltip.module.css +0 -104
  138. package/dist/components/overlay/tooltip/TooltipProvider.js +0 -255
  139. package/dist/components/overlay/tooltip/useTooltipTrigger.js +0 -118
  140. package/dist/components/page/Page.js +0 -11
  141. package/dist/components/page/Page.module.css +0 -89
  142. package/dist/components/page-layout/PageLayout.js +0 -76
  143. package/dist/components/page-layout/PageLayout.module.css +0 -236
  144. package/dist/components/page-layout/components/layout-footer/LayoutFooter.js +0 -27
  145. package/dist/components/page-layout/components/layout-footer/LayoutFooter.module.css +0 -89
  146. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.js +0 -14
  147. package/dist/components/page-layout/components/page-layout-hero/PageLayoutHero.module.css +0 -84
  148. package/dist/components/pagination/Pagination.js +0 -56
  149. package/dist/components/pagination/Pagination.module.css +0 -25
  150. package/dist/components/panel/Panel.js +0 -7
  151. package/dist/components/panel/Panel.module.css +0 -29
  152. package/dist/components/popover/Popover.js +0 -257
  153. package/dist/components/popover/Popover.module.css +0 -54
  154. package/dist/components/search-box/SearchBox.js +0 -170
  155. package/dist/components/search-box/SearchBox.module.css +0 -21
  156. package/dist/components/segmented-progress-bar/SegmentedProgressBar.js +0 -48
  157. package/dist/components/segmented-progress-bar/SegmentedProgressBar.module.css +0 -167
  158. package/dist/components/sidebar/Sidebar.js +0 -6
  159. package/dist/components/sidebar/components/SidebarItem.js +0 -8
  160. package/dist/components/sidebar/components/SidebarItem.module.css +0 -0
  161. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.js +0 -63
  162. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.module.css +0 -29
  163. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.js +0 -153
  164. package/dist/components/sidebar/components/sidebar-container/SidebarContainer.module.css +0 -260
  165. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.js +0 -18
  166. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.module.css +0 -106
  167. package/dist/components/sidebar/components/sidebar-items/SidebarItems.js +0 -26
  168. package/dist/components/sidebar/components/sidebar-items/SidebarItems.module.css +0 -20
  169. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.js +0 -30
  170. package/dist/components/sidebar/providers/SidebarProvider.js +0 -229
  171. package/dist/components/skeleton-loader/SkeletonLoader.js +0 -73
  172. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.js +0 -13
  173. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.module.css +0 -51
  174. package/dist/components/split-button/SplitButton.js +0 -10
  175. package/dist/components/split-button/SplitButton.module.css +0 -32
  176. package/dist/components/split-pane/SplitPane.js +0 -107
  177. package/dist/components/split-pane/SplitPane.module.css +0 -111
  178. package/dist/components/split-pane/provider/SplitPaneContext.js +0 -124
  179. package/dist/components/stack/Stack.js +0 -33
  180. package/dist/components/stack/Stack.module.css +0 -61
  181. package/dist/components/state-page/StatePage.js +0 -20
  182. package/dist/components/state-page/StatePage.module.css +0 -9
  183. package/dist/components/state-page/empty.js +0 -2
  184. package/dist/components/state-page/error.js +0 -2
  185. package/dist/components/state-page/notFound.js +0 -2
  186. package/dist/components/sticky-footer-layout/StickyFooterLayout.js +0 -64
  187. package/dist/components/table/Table.js +0 -50
  188. package/dist/components/table/Table.module.css +0 -536
  189. package/dist/components/table/Table.types.js +0 -1
  190. package/dist/components/table/TanstackTable.js +0 -111
  191. package/dist/components/table/components/TableBody.js +0 -10
  192. package/dist/components/table/components/TableHeader.js +0 -7
  193. package/dist/components/table/components/TableHeaderCell.js +0 -24
  194. package/dist/components/table/components/TableLoadingBody.js +0 -26
  195. package/dist/components/table/components/TablePagination.js +0 -1
  196. package/dist/components/table/components/TableRow.js +0 -54
  197. package/dist/components/table/components/TableSelectionCell.js +0 -16
  198. package/dist/components/table/components/column-resizer/ColumnResizer.js +0 -5
  199. package/dist/components/table/components/column-resizer/ColumnResizer.module.css +0 -22
  200. package/dist/components/table/components/empty-state/EmptyState.js +0 -23
  201. package/dist/components/table/components/empty-state/EmptyState.module.css +0 -4
  202. package/dist/components/table/components/table-settings/TableSettings.js +0 -63
  203. package/dist/components/table/hooks/useTableRowInteractions.js +0 -30
  204. package/dist/components/table/table.classes.js +0 -23
  205. package/dist/components/table/table.utils.js +0 -47
  206. package/dist/components/table/tanstackTable.utils.js +0 -175
  207. package/dist/components/tabs/Tabs.js +0 -125
  208. package/dist/components/tabs/Tabs.module.css +0 -233
  209. package/dist/components/theme-button/ThemeButton.js +0 -23
  210. package/dist/components/toast/Toast.js +0 -20
  211. package/dist/components/toast/Toast.module.css +0 -161
  212. package/dist/components/toast/provider/ToastProvider.js +0 -70
  213. package/dist/components/user-display/UserDisplay.js +0 -6
  214. package/dist/components/user-display/UserDisplay.module.css +0 -25
  215. package/dist/constants/severity.js +0 -24
  216. package/dist/constants/severity.types.js +0 -1
  217. package/dist/constants/sizes.js +0 -7
  218. package/dist/hooks/useDeviceSize.js +0 -32
  219. package/dist/hooks/useListNavigation.js +0 -234
  220. package/dist/hooks/usePagination.js +0 -140
  221. package/dist/hooks/useSorting.js +0 -118
  222. package/dist/hooks/useTableData.js +0 -45
  223. package/dist/hooks/useTableSelection.js +0 -164
  224. package/dist/hooks/useTableSettings.js +0 -71
  225. package/dist/hooks/useTheme.js +0 -66
  226. package/dist/hooks/useTimeDuration.js +0 -68
  227. package/dist/hooks/useViewportFill.js +0 -77
  228. package/dist/styles/animation.js +0 -5
  229. package/dist/styles/themes/types.js +0 -1
  230. package/dist/types/a11y-props.types.js +0 -1
  231. package/dist/types/sizes.types.js +0 -1
  232. package/dist/utils/arrays/nested-filtering.js +0 -48
  233. package/dist/utils/date/formatDate.js +0 -51
  234. package/dist/utils/localStorage.utils.js +0 -78
  235. package/dist/utils/text/get-highlighted-segments.js +0 -46
@@ -1,167 +0,0 @@
1
- .container {
2
- width: 100%;
3
- min-width: 0;
4
- display: flex;
5
- align-items: center;
6
- }
7
-
8
- .progressBar {
9
- --progress-radius: 10px;
10
- --progress-separator: color-mix(in srgb, var(--color-border-subtle) 55%, transparent);
11
-
12
- position: relative;
13
- width: 100%;
14
- min-width: 0;
15
- display: flex;
16
- align-items: stretch;
17
- overflow: hidden;
18
-
19
- border-radius: var(--progress-radius);
20
- background: var(--color-bg-surface-subtle);
21
- box-shadow: inset 0 0 0 1px var(--color-border-subtle);
22
- }
23
-
24
- .progressBar[data-rounded='false'] {
25
- border-radius: 0;
26
- }
27
-
28
- .segmentsContainer {
29
- display: flex;
30
- width: 100%;
31
- height: 100%;
32
- min-width: 0;
33
- }
34
-
35
- .segmentWrapper {
36
- display: flex;
37
- height: 100%;
38
- min-width: 2px;
39
- min-height: 0;
40
- }
41
-
42
- .progressSegment {
43
- position: relative;
44
- width: 100%;
45
- height: 100%;
46
- background: var(--segment-color, var(--color-bg-surface-strong));
47
- }
48
-
49
- /* Subtle separators between segments */
50
- .segmentWrapper + .segmentWrapper .progressSegment::before {
51
- content: '';
52
- position: absolute;
53
- inset-inline-start: 0;
54
- inset-block: 2px;
55
- width: 1px;
56
- background: var(--progress-separator);
57
- pointer-events: none;
58
- }
59
-
60
- /* =====================================
61
- Custom progress semantics (quiet)
62
- ===================================== */
63
-
64
- .progressSegment[data-severity='done'] {
65
- background: color-mix(in srgb, var(--color-fg-default) 25%, var(--color-bg-surface));
66
- }
67
-
68
- .progressSegment[data-severity='progress'] {
69
- background: color-mix(in srgb, var(--color-fg-subtle) 5%, var(--color-bg-surface));
70
- }
71
-
72
- .progressSegment[data-severity='missing'] {
73
- background: color-mix(in srgb, var(--color-fg-subtle) 2.5%, var(--color-bg-surface));
74
- }
75
-
76
- .progressSegment[data-severity='neutral'] {
77
- background: var(--color-bg-surface-strong);
78
- }
79
-
80
- /* =====================================
81
- Existing semantic severities
82
- Keep these semantic and more colorful
83
- for consumers who want that behavior
84
- ===================================== */
85
-
86
- .progressSegment[data-severity='success'] {
87
- background: color-mix(in srgb, var(--color-status-success) 50%, var(--color-bg-surface));
88
- }
89
-
90
- .progressSegment[data-severity='info'] {
91
- background: color-mix(in srgb, var(--color-status-info) 50%, var(--color-bg-surface));
92
- }
93
-
94
- .progressSegment[data-severity='warning'] {
95
- background: color-mix(in srgb, var(--color-status-warning) 50%, var(--color-bg-surface));
96
- }
97
-
98
- .progressSegment[data-severity='error'] {
99
- background: color-mix(in srgb, var(--color-status-error) 50%, var(--color-bg-surface));
100
- }
101
-
102
- /* Label overlay */
103
- .progressCenter {
104
- position: absolute;
105
- inset: 0;
106
- display: flex;
107
- align-items: center;
108
- justify-content: center;
109
- padding-inline: 8px;
110
- pointer-events: none;
111
- }
112
-
113
- .progressCenterLabel {
114
- display: inline-flex;
115
- align-items: center;
116
- justify-content: center;
117
- min-width: 0;
118
- max-width: calc(100% - 8px);
119
- color: var(--color-fg-default);
120
- font-size: var(--font-size-xs);
121
- font-weight: 500;
122
- font-variant-numeric: tabular-nums;
123
- letter-spacing: 0.01em;
124
- line-height: 1;
125
- white-space: nowrap;
126
- overflow: hidden;
127
- text-overflow: ellipsis;
128
-
129
- text-shadow: none;
130
- }
131
-
132
- .emptySegments .progressCenterLabel {
133
- color: var(--color-fg-subtle);
134
- }
135
-
136
- /* Rounded ends only on the outer edges */
137
- .segmentWrapper:first-child .progressSegment {
138
- border-top-left-radius: var(--progress-radius);
139
- border-bottom-left-radius: var(--progress-radius);
140
- }
141
-
142
- .segmentWrapper:last-child .progressSegment {
143
- border-top-right-radius: var(--progress-radius);
144
- border-bottom-right-radius: var(--progress-radius);
145
- }
146
-
147
- .progressBar[data-rounded='false'] .segmentWrapper:first-child .progressSegment,
148
- .progressBar[data-rounded='false'] .segmentWrapper:last-child .progressSegment {
149
- border-radius: 0;
150
- }
151
-
152
- .progressBar,
153
- .progressSegment,
154
- .progressCenterLabel {
155
- transition:
156
- background-color 140ms ease,
157
- color 140ms ease,
158
- box-shadow 140ms ease;
159
- }
160
-
161
- @media (prefers-reduced-motion: reduce) {
162
- .progressBar,
163
- .progressSegment,
164
- .progressCenterLabel {
165
- transition: none;
166
- }
167
- }
@@ -1,6 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { SidebarContainer } from './components/sidebar-container/SidebarContainer';
3
- import { SidebarProvider } from './providers/SidebarProvider';
4
- export function Sidebar({ items, productLogo, activeLink, version, hideSearch, searchPlaceholder, showSettings, footer, resizable, defaultWidth, minWidth, storageKey, }) {
5
- return (_jsx(SidebarProvider, { items: items, children: _jsx(SidebarContainer, { productLogo: productLogo, activeLink: activeLink, version: version, hideSearch: hideSearch, searchPlaceholder: searchPlaceholder, showSettings: showSettings, footer: footer, resizable: resizable, defaultWidth: defaultWidth, minWidth: minWidth, storageKey: storageKey }) }));
6
- }
@@ -1,8 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { SidebarItemContent } from './sidebar-item-content/SidebarItemContent';
3
- export function SidebarItem({ component: Component, label, icon, href, iconWidth, truncateLabel, }) {
4
- if (!Component) {
5
- return null;
6
- }
7
- return (_jsx(Component, { children: _jsx(SidebarItemContent, { icon: icon, iconWidth: iconWidth, label: label, href: href, truncateLabel: truncateLabel }) }));
8
- }
@@ -1,63 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ChevronDown } from 'lucide-react';
4
- import { useCallback, useEffect, useMemo, useState } from 'react';
5
- import styles from './ExpandableSidebarItem.module.css';
6
- import { Button } from '../../../button/Button';
7
- import { useSidebar } from '../../providers/SidebarProvider';
8
- import { ExpandableSidebarItem as ExpandableChild } from '../expandable-sidebar-item/ExpandableSidebarItem';
9
- import { SidebarItemContent } from '../sidebar-item-content/SidebarItemContent';
10
- import { SidebarItem } from '../SidebarItem';
11
- const isGroup = (item) => item.type === 'group';
12
- const isExpandable = (item) => item.type === 'expandable';
13
- export function ExpandableSidebarItem({ items, label, icon, component: Component, href, iconWidth, truncateLabel, }) {
14
- const { defaultExpanded, resetExpandAll, isSidebarCollapsed, handleSidebarCollapseChange, expandItem, collapseItem, isExpanded, } = useSidebar();
15
- // Local-only state for animation coordination
16
- const [closing, setClosing] = useState(false);
17
- const ready = true;
18
- // Single source of truth: expanded comes from provider state
19
- const expanded = useMemo(() => isExpanded(href), [href, isExpanded]);
20
- // Expand-all behavior (e.g. search)
21
- useEffect(() => {
22
- if (defaultExpanded === null)
23
- return;
24
- if (defaultExpanded)
25
- expandItem(href);
26
- else
27
- collapseItem(href);
28
- }, [defaultExpanded, expandItem, collapseItem, href]);
29
- const handleAnimationEnd = useCallback(() => {
30
- if (!ready)
31
- return;
32
- if (closing) {
33
- // After collapse animation, commit closed state
34
- collapseItem(href);
35
- setClosing(false);
36
- }
37
- }, [closing, ready, collapseItem, href]);
38
- const toggleAccordion = useCallback((e, onlyExpand = false) => {
39
- e === null || e === void 0 ? void 0 : e.preventDefault();
40
- e === null || e === void 0 ? void 0 : e.stopPropagation();
41
- resetExpandAll();
42
- handleSidebarCollapseChange(false);
43
- if (!expanded) {
44
- expandItem(href);
45
- return;
46
- }
47
- if (!isSidebarCollapsed && !onlyExpand) {
48
- // Start collapse animation; state commit happens onAnimationEnd
49
- setClosing(true);
50
- }
51
- }, [expanded, expandItem, href, handleSidebarCollapseChange, isSidebarCollapsed, resetExpandAll]);
52
- const renderNavItem = (item, key) => {
53
- var _a, _b;
54
- if (isGroup(item)) {
55
- return (_jsxs("div", { className: styles.group, children: [_jsx("div", { className: styles.groupLabel, children: item.label }), (_a = item.children) === null || _a === void 0 ? void 0 : _a.map((child, idx) => renderNavItem(child, `${key}-${idx}`))] }, key));
56
- }
57
- if (isExpandable(item)) {
58
- return (_jsx(ExpandableChild, { items: (_b = item.children) !== null && _b !== void 0 ? _b : [], label: item.label, icon: item.icon, href: item.href, iconWidth: item.iconWidth, component: item.component }, key));
59
- }
60
- return (_jsx(SidebarItem, { component: item.component, label: item.label, icon: item.icon, href: item.href, iconWidth: item.iconWidth, truncateLabel: item.truncateLabel }, key));
61
- };
62
- return (_jsxs("div", { className: `${styles.container}`, children: [_jsx(Component, { onClick: () => toggleAccordion(undefined, true), children: _jsx(SidebarItemContent, { headerStyle: expanded, icon: icon, iconWidth: iconWidth, label: label, href: href, disableActiveStyles: expanded, truncateLabel: truncateLabel, suffixIcon: isSidebarCollapsed ? null : (_jsx(Button, { variant: "outlined", onClick: toggleAccordion, children: _jsx(ChevronDown, { className: `${styles.chevron} ${expanded ? styles.chevronExpanded : ''}` }) })) }) }), expanded && !isSidebarCollapsed && (_jsx("div", { onAnimationEnd: handleAnimationEnd, className: `${styles.childrenContainer} ${closing ? 'animate--collapse' : ''} ${expanded ? 'animate--expand' : 'visually-hidden'}`, children: items.map((item, idx) => renderNavItem(item, `${href}-${idx}`)) }))] }));
63
- }
@@ -1,29 +0,0 @@
1
- .container {
2
- position: relative;
3
- display: flex;
4
- flex-direction: column;
5
- border-radius: var(--border-radius-default);
6
- }
7
-
8
- .container button {
9
- color: var(--color-text);
10
- min-block-size: 20px !important;
11
- min-inline-size: 20px !important;
12
- max-block-size: 20px !important;
13
- max-inline-size: 20px !important;
14
- &:hover {
15
- background-color: var(--color-bg-contextual-subtle) !important;
16
- }
17
- }
18
-
19
- .childrenContainer {
20
- overflow: hidden;
21
- }
22
-
23
- .chevron {
24
- transition: transform 0.3s ease;
25
- }
26
-
27
- .chevronExpanded {
28
- transform: rotate(180deg);
29
- }
@@ -1,153 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ChevronLeft } from 'lucide-react';
4
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
5
- import { Logo } from '../../../../assets/logo';
6
- import { Button } from '../../../../components/button/Button';
7
- import { SidebarItems } from '../../../../components/sidebar/components/sidebar-items/SidebarItems';
8
- import SidenavFiltering from '../../../../components/sidebar/components/sidenav-filteirng/SidenavFiltering';
9
- import { useSidebar } from '../../../../components/sidebar/providers/SidebarProvider';
10
- import styles from './SidebarContainer.module.css';
11
- function clamp(n, min, max) {
12
- return Math.max(min, Math.min(max, n));
13
- }
14
- function readStoredWidth(key) {
15
- try {
16
- const raw = localStorage.getItem(key);
17
- if (!raw)
18
- return null;
19
- const num = Number(raw);
20
- return Number.isFinite(num) ? num : null;
21
- }
22
- catch {
23
- return null;
24
- }
25
- }
26
- function writeStoredWidth(key, value) {
27
- try {
28
- localStorage.setItem(key, String(Math.round(value)));
29
- }
30
- catch {
31
- // ignore
32
- }
33
- }
34
- function removeStoredWidth(key) {
35
- try {
36
- localStorage.removeItem(key);
37
- }
38
- catch {
39
- // ignore
40
- }
41
- }
42
- export function SidebarContainer({ logo, productLogo, activeLink, version, hideSearch, searchPlaceholder = 'Filtrer menu', showSettings = false, footer, resizable, defaultWidth = 240, minWidth = 160, storageKey, }) {
43
- const { isSidebarCollapsed, handleSidebarCollapseChange } = useSidebar();
44
- // Always start from defaultWidth so server and client render identical HTML.
45
- // localStorage is read in a useEffect after hydration to avoid SSR mismatch.
46
- const [sidebarWidth, setSidebarWidth] = useState(defaultWidth);
47
- const [manualWidth, setManualWidth] = useState(null);
48
- const [isResizing, setIsResizing] = useState(false);
49
- const [ariaMaxWidth, setAriaMaxWidth] = useState(undefined);
50
- const containerRef = useRef(null);
51
- const draggingRef = useRef(false);
52
- const pointerIdRef = useRef(null);
53
- const startXRef = useRef(0);
54
- const startWidthRef = useRef(0);
55
- const maxWidthRef = useRef(Infinity);
56
- // Use the viewport width as the ceiling — avoids the circular-dependency
57
- // that occurs when the sidebar lives in an `auto`-width grid column whose
58
- // size is determined by the sidebar itself (e.g. PageLayout vertical).
59
- const getMaxWidth = useCallback(() => {
60
- const viewportWidth = typeof window !== 'undefined'
61
- ? window.innerWidth || document.documentElement.clientWidth
62
- : Infinity;
63
- return Math.max(minWidth, viewportWidth - minWidth);
64
- }, [minWidth]);
65
- // Read stored width after hydration — never during render to avoid SSR mismatch.
66
- useEffect(() => {
67
- if (!storageKey)
68
- return;
69
- const stored = readStoredWidth(storageKey);
70
- if (stored === null)
71
- return;
72
- setManualWidth(stored);
73
- setSidebarWidth(stored);
74
- }, [storageKey]);
75
- useEffect(() => {
76
- if (!storageKey)
77
- return;
78
- if (manualWidth === null) {
79
- removeStoredWidth(storageKey);
80
- return;
81
- }
82
- writeStoredWidth(storageKey, manualWidth);
83
- }, [manualWidth, storageKey]);
84
- useEffect(() => {
85
- setAriaMaxWidth(getMaxWidth());
86
- }, [getMaxWidth]);
87
- useEffect(() => {
88
- return () => {
89
- document.body.style.cursor = '';
90
- document.body.style.userSelect = '';
91
- };
92
- }, []);
93
- const updateWidth = useCallback((nextWidth) => {
94
- setManualWidth(nextWidth);
95
- setSidebarWidth(nextWidth);
96
- }, []);
97
- const onResizePointerDown = useCallback((e) => {
98
- const maxWidth = getMaxWidth();
99
- if (maxWidth === null)
100
- return;
101
- e.currentTarget.setPointerCapture(e.pointerId);
102
- maxWidthRef.current = maxWidth;
103
- draggingRef.current = true;
104
- pointerIdRef.current = e.pointerId;
105
- startXRef.current = e.clientX;
106
- startWidthRef.current = sidebarWidth;
107
- setIsResizing(true);
108
- document.body.style.userSelect = 'none';
109
- document.body.style.cursor = 'col-resize';
110
- }, [getMaxWidth, sidebarWidth]);
111
- const onResizePointerMove = useCallback((e) => {
112
- if (!draggingRef.current)
113
- return;
114
- if (pointerIdRef.current !== null && e.pointerId !== pointerIdRef.current)
115
- return;
116
- const next = startWidthRef.current + (e.clientX - startXRef.current);
117
- updateWidth(clamp(next, minWidth, maxWidthRef.current));
118
- }, [minWidth, updateWidth]);
119
- const endResizeDrag = useCallback(() => {
120
- if (!draggingRef.current)
121
- return;
122
- draggingRef.current = false;
123
- pointerIdRef.current = null;
124
- setIsResizing(false);
125
- document.body.style.cursor = '';
126
- document.body.style.userSelect = '';
127
- }, []);
128
- const resetWidth = useCallback(() => {
129
- setManualWidth(null);
130
- setSidebarWidth(clamp(defaultWidth, minWidth, getMaxWidth()));
131
- }, [defaultWidth, getMaxWidth, minWidth]);
132
- const onKeyDown = useCallback((e) => {
133
- const maxWidth = getMaxWidth();
134
- const step = e.shiftKey ? 32 : 8;
135
- let next = null;
136
- if (e.key === 'ArrowLeft')
137
- next = sidebarWidth - step;
138
- if (e.key === 'ArrowRight')
139
- next = sidebarWidth + step;
140
- if (e.key === 'Home')
141
- next = minWidth;
142
- if (e.key === 'End')
143
- next = maxWidth;
144
- if (next === null)
145
- return;
146
- e.preventDefault();
147
- updateWidth(clamp(next, minWidth, maxWidth));
148
- }, [getMaxWidth, minWidth, sidebarWidth, updateWidth]);
149
- const containerStyle = useMemo(() => ({
150
- '--sidebar-width': `${sidebarWidth}px`,
151
- }), [sidebarWidth]);
152
- return (_jsxs("div", { ref: containerRef, role: "complementary", className: `${styles.container} ${isSidebarCollapsed ? styles.collapsed : ''} ${isResizing ? styles.resizing : ''}`, style: containerStyle, children: [_jsx("div", { className: styles.header, children: _jsxs("div", { className: styles.productHeader, children: [_jsx("div", { className: styles.productLogo, children: productLogo }), _jsx(Button, { size: "md", variant: "inline", shape: "round", "aria-label": "Collapse sidebar", icon: _jsx(ChevronLeft, { className: isSidebarCollapsed ? styles.collapsedIcon : '' }), onClick: () => handleSidebarCollapseChange(!isSidebarCollapsed) })] }) }), _jsxs("div", { className: styles.content, children: [!hideSearch && (_jsx("div", { className: styles.filter, children: _jsx(SidenavFiltering, { placeholder: searchPlaceholder, showSettings: showSettings }) })), _jsx("div", { className: `${styles.links} hideScrollBar`, children: _jsx(SidebarItems, { activeLink: activeLink }) })] }), footer && _jsx("div", { className: styles.footerSlot, children: footer }), _jsxs("div", { className: styles.footer, children: [_jsx("div", { className: styles.companyLogo, children: logo !== null && logo !== void 0 ? logo : _jsx(Logo, {}) }), version && _jsx("div", { className: `${styles.version} dbc-muted-text dbc-sm-text`, children: version })] }), resizable && (_jsx("div", { className: styles.resizeHandle, role: "separator", "aria-label": "Resize sidebar", "aria-orientation": "vertical", "aria-valuemin": Math.round(minWidth), "aria-valuemax": ariaMaxWidth !== undefined ? Math.round(ariaMaxWidth) : undefined, "aria-valuenow": Math.round(sidebarWidth), tabIndex: isSidebarCollapsed ? -1 : 0, onPointerDown: onResizePointerDown, onPointerMove: onResizePointerMove, onPointerUp: endResizeDrag, onPointerCancel: endResizeDrag, onDoubleClick: resetWidth, onKeyDown: onKeyDown }))] }));
153
- }
@@ -1,260 +0,0 @@
1
- .container {
2
- position: relative;
3
- flex-shrink: 1;
4
- height: 100%;
5
- overflow: auto;
6
- display: flex;
7
- flex-direction: column;
8
- gap: var(--spacing-md);
9
- width: var(--sidebar-width);
10
- inline-size: var(--sidebar-width);
11
- box-sizing: border-box;
12
- border-inline-end: var(--border-width-thin) solid var(--color-border-default);
13
- transition:
14
- width var(--transition-fast) var(--ease-standard),
15
- inline-size var(--transition-fast) var(--ease-standard);
16
- }
17
-
18
- .container.resizing {
19
- transition: none;
20
- }
21
-
22
- /* Collapsed state */
23
- .container.collapsed {
24
- width: var(--component-size-lg);
25
- inline-size: var(--component-size-lg);
26
- box-sizing: content-box;
27
- gap: var(--spacing-sm);
28
- }
29
-
30
- /* Global links / focus */
31
- .container a {
32
- text-decoration: none;
33
- color: inherit;
34
- }
35
-
36
- .container a:focus-visible,
37
- .container button:focus-visible {
38
- outline: none;
39
- box-shadow: var(--focus-ring);
40
- }
41
-
42
- /* HEADER (product + collapse) */
43
- .header {
44
- flex: 0 0 auto;
45
- box-sizing: border-box;
46
- box-shadow: 0 1px 0 var(--color-border-default);
47
- padding-inline: var(--spacing-xs);
48
- min-block-size: 60px;
49
- display: flex;
50
- align-items: center;
51
- justify-content: space-between;
52
- }
53
-
54
- .productHeader {
55
- display: flex;
56
- align-items: center;
57
- justify-content: space-between;
58
- gap: var(--spacing-sm);
59
- flex-grow: 1;
60
- }
61
-
62
- /* Product logo container */
63
- .productLogo {
64
- display: flex;
65
- align-items: center;
66
- max-inline-size: 100%;
67
- block-size: 25px;
68
- min-width: 0;
69
- }
70
-
71
- /* Let wrapper elements such as Next.js <Link> inherit the logo sizing context */
72
- .productLogo > * {
73
- display: flex;
74
- align-items: center;
75
- max-inline-size: 100%;
76
- block-size: 100%;
77
- min-inline-size: 0;
78
- }
79
-
80
- /* Keep product logo visible in expanded state even when wrapped */
81
- .productLogo :is(img, svg) {
82
- display: block;
83
- block-size: 100%;
84
- inline-size: auto;
85
- max-inline-size: 100%;
86
- }
87
-
88
- /* Collapse button */
89
- .productHeader button {
90
- flex: 0 0 auto;
91
- }
92
-
93
- /* Rotate icon when collapsed */
94
- .collapsedIcon {
95
- transform: rotate(180deg);
96
- transition: transform 0.3s ease;
97
- }
98
-
99
- /* CONTENT */
100
- .content {
101
- overflow: auto;
102
- flex: 1 1 auto;
103
- overflow-y: visible;
104
- display: flex;
105
- flex-direction: column;
106
- position: relative;
107
- width: 100%;
108
- gap: 5px;
109
- }
110
-
111
- .container:not(.collapsed) .content {
112
- gap: var(--spacing-md);
113
- }
114
-
115
- /* FILTER */
116
- .filter button {
117
- border-radius: 0;
118
- min-height: var(--component-size-md);
119
- width: 100%;
120
- padding: var(--spacing-xs);
121
- color: var(--color-fg-muted);
122
- }
123
-
124
- .container:not(.collapsed) .filter {
125
- padding-inline: var(--spacing-xs);
126
- }
127
-
128
- /* LINKS */
129
- .links {
130
- overflow: auto;
131
- display: flex;
132
- flex-grow: 1;
133
- flex-direction: column;
134
- gap: 2px;
135
- font-size: var(--font-size-sm);
136
- }
137
-
138
- .container:not(.collapsed) .links {
139
- padding-inline: var(--spacing-xs);
140
- }
141
-
142
- .container .links button {
143
- background: none;
144
- border: 0;
145
- font-size: inherit;
146
- color: inherit;
147
- display: inline-flex;
148
- padding: 0;
149
- }
150
-
151
- /* RESIZE HANDLE */
152
- .resizeHandle {
153
- position: absolute;
154
- top: 0;
155
- bottom: 0;
156
- right: 0;
157
- width: 8px;
158
- cursor: col-resize;
159
- z-index: 1;
160
- user-select: none;
161
- touch-action: none;
162
- outline: none;
163
- }
164
-
165
- .resizeHandle::after {
166
- content: '';
167
- position: absolute;
168
- top: 0;
169
- bottom: 0;
170
- right: 0;
171
- width: var(--border-width-thin);
172
- background-color: var(--color-border-subtle);
173
- opacity: 0;
174
- transition:
175
- opacity var(--transition-fast) var(--ease-standard),
176
- background-color var(--transition-fast) var(--ease-standard);
177
- }
178
-
179
- .resizeHandle:hover::after,
180
- .resizeHandle:active::after {
181
- opacity: 1;
182
- background-color: var(--color-border-strong);
183
- }
184
-
185
- .resizeHandle:active::after {
186
- background-color: var(--color-brand);
187
- }
188
-
189
- .resizeHandle:focus-visible {
190
- box-shadow: var(--focus-ring);
191
- }
192
-
193
- .container.collapsed .resizeHandle {
194
- display: none;
195
- }
196
-
197
- /* CUSTOM FOOTER SLOT */
198
- .footerSlot {
199
- flex: 0 0 auto;
200
- }
201
-
202
- .container:not(.collapsed) .footerSlot {
203
- padding-inline: var(--spacing-xs);
204
- }
205
-
206
- /* FOOTER (company logo) */
207
- .footer {
208
- flex: 0 0 auto;
209
- border-top: 1px solid var(--color-border-default);
210
- padding: var(--spacing-sm);
211
- display: flex;
212
- justify-content: space-between;
213
- align-items: center;
214
- gap: var(--spacing-sm);
215
- }
216
-
217
- .companyLogo {
218
- opacity: 0.6;
219
- }
220
-
221
- .companyLogo svg {
222
- width: 80px;
223
- height: auto;
224
- display: block;
225
- }
226
-
227
- /* Hide company logo in collapsed state */
228
- .container.collapsed .companyLogo {
229
- display: none;
230
- }
231
-
232
- .version {
233
- overflow: hidden;
234
- white-space: nowrap;
235
- text-overflow: ellipsis;
236
- min-width: 0;
237
- }
238
- .logo {
239
- display: none;
240
- }
241
-
242
- /* === Collapsed header behavior ===
243
- Hide product logo entirely so the collapse button can truly center. */
244
- .container.collapsed .productLogo {
245
- display: none;
246
- }
247
-
248
- /* Center the collapse button in collapsed state */
249
- .container.collapsed .productHeader {
250
- justify-content: center;
251
- gap: 0;
252
- }
253
-
254
- .container.collapsed .header {
255
- padding: 0;
256
- }
257
-
258
- .container.collapsed .productHeader button {
259
- margin-inline: auto;
260
- }