@dbcdk/react-components 0.0.1 → 0.0.3

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 (281) hide show
  1. package/dist/assets/logo.cjs +87 -0
  2. package/dist/assets/logo.d.ts +2 -0
  3. package/dist/assets/logo.js +85 -0
  4. package/dist/components/app-header/AppHeader.cjs +14 -0
  5. package/dist/components/app-header/AppHeader.d.ts +5 -0
  6. package/dist/components/app-header/AppHeader.js +8 -0
  7. package/dist/components/app-header/AppHeader.module.css +73 -0
  8. package/dist/components/avatar/Avatar.cjs +67 -0
  9. package/dist/components/avatar/Avatar.d.ts +15 -0
  10. package/dist/components/avatar/Avatar.js +42 -0
  11. package/dist/components/avatar/Avatar.module.css +43 -0
  12. package/dist/components/breadcrumbs/Breadcrumbs.cjs +23 -0
  13. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +12 -0
  14. package/dist/components/breadcrumbs/Breadcrumbs.js +16 -0
  15. package/dist/components/breadcrumbs/Breadcrumbs.module.css +84 -0
  16. package/dist/components/button/Button.cjs +79 -0
  17. package/dist/components/button/Button.d.ts +13 -0
  18. package/dist/components/button/Button.js +54 -0
  19. package/dist/components/button/Button.module.css +156 -0
  20. package/dist/components/card/Card.cjs +29 -0
  21. package/dist/components/card/Card.d.ts +11 -0
  22. package/dist/components/card/Card.js +23 -0
  23. package/dist/components/card/Card.module.css +69 -0
  24. package/dist/components/card-container/CardContainer.cjs +23 -0
  25. package/dist/components/card-container/CardContainer.d.ts +8 -0
  26. package/dist/components/card-container/CardContainer.js +17 -0
  27. package/dist/components/card-container/CardContainer.module.css +18 -0
  28. package/dist/components/checkbox/Checkbox.cjs +43 -0
  29. package/dist/components/checkbox/Checkbox.d.ts +12 -0
  30. package/dist/components/checkbox/Checkbox.js +37 -0
  31. package/dist/components/checkbox/Checkbox.module.css +63 -0
  32. package/dist/components/chip/Chip.cjs +49 -0
  33. package/dist/components/chip/Chip.d.ts +13 -0
  34. package/dist/components/chip/Chip.js +43 -0
  35. package/dist/components/chip/Chip.module.css +97 -0
  36. package/dist/components/circle/Circle.cjs +18 -0
  37. package/dist/components/circle/Circle.d.ts +8 -0
  38. package/dist/components/circle/Circle.js +12 -0
  39. package/dist/components/circle/Circle.module.css +62 -0
  40. package/dist/components/clear-button/ClearButton.cjs +26 -0
  41. package/dist/components/clear-button/ClearButton.d.ts +6 -0
  42. package/dist/components/clear-button/ClearButton.js +20 -0
  43. package/dist/components/clear-button/ClearButton.module.css +16 -0
  44. package/dist/components/data-summary/DataSummary.cjs +49 -0
  45. package/dist/components/data-summary/DataSummary.d.ts +19 -0
  46. package/dist/components/data-summary/DataSummary.js +43 -0
  47. package/dist/components/data-summary/DataSummary.module.css +51 -0
  48. package/dist/components/filter-field/FilterField.cjs +174 -0
  49. package/dist/components/filter-field/FilterField.d.ts +28 -0
  50. package/dist/components/filter-field/FilterField.js +167 -0
  51. package/dist/components/filter-field/FilterField.module.css +109 -0
  52. package/dist/components/headline/Headline.cjs +47 -0
  53. package/dist/components/headline/Headline.d.ts +14 -0
  54. package/dist/components/headline/Headline.js +41 -0
  55. package/dist/components/headline/Headline.module.css +35 -0
  56. package/dist/components/icon/Icon.cjs +27 -0
  57. package/dist/components/icon/Icon.d.ts +9 -0
  58. package/dist/components/icon/Icon.js +20 -0
  59. package/dist/components/icon/Icon.module.css +34 -0
  60. package/dist/components/input/Input.cjs +48 -0
  61. package/dist/components/input/Input.d.ts +13 -0
  62. package/dist/components/input/Input.js +42 -0
  63. package/dist/components/input/Input.module.css +112 -0
  64. package/dist/components/menu/Menu.cjs +96 -0
  65. package/dist/components/menu/Menu.d.ts +12 -0
  66. package/dist/components/menu/Menu.js +71 -0
  67. package/dist/components/menu/Menu.module.css +95 -0
  68. package/dist/components/multi-select/MultiSelect.cjs +48 -0
  69. package/dist/components/multi-select/MultiSelect.d.ts +18 -0
  70. package/dist/components/multi-select/MultiSelect.js +46 -0
  71. package/dist/components/nav-bar/NavBar.cjs +55 -0
  72. package/dist/components/nav-bar/NavBar.d.ts +20 -0
  73. package/dist/components/nav-bar/NavBar.js +49 -0
  74. package/dist/components/nav-bar/NavBar.module.css +101 -0
  75. package/dist/components/page/Page.cjs +30 -0
  76. package/dist/components/page/Page.d.ts +13 -0
  77. package/dist/components/page/Page.js +24 -0
  78. package/dist/components/page/Page.module.css +26 -0
  79. package/dist/components/page-layout/PageLayout.cjs +101 -0
  80. package/dist/components/page-layout/PageLayout.d.ts +35 -0
  81. package/dist/components/page-layout/PageLayout.js +95 -0
  82. package/dist/components/page-layout/PageLayout.module.css +142 -0
  83. package/dist/components/pagination/Pagination.cjs +117 -0
  84. package/dist/components/pagination/Pagination.d.ts +17 -0
  85. package/dist/components/pagination/Pagination.js +111 -0
  86. package/dist/components/pagination/Pagination.module.css +17 -0
  87. package/dist/components/panel/Panel.cjs +18 -0
  88. package/dist/components/panel/Panel.d.ts +10 -0
  89. package/dist/components/panel/Panel.js +12 -0
  90. package/dist/components/panel/Panel.module.css +29 -0
  91. package/dist/components/popover/Popover.cjs +132 -0
  92. package/dist/components/popover/Popover.d.ts +15 -0
  93. package/dist/components/popover/Popover.js +126 -0
  94. package/dist/components/popover/Popover.module.css +25 -0
  95. package/dist/components/search-box/SearchBox.cjs +162 -0
  96. package/dist/components/search-box/SearchBox.d.ts +22 -0
  97. package/dist/components/search-box/SearchBox.js +156 -0
  98. package/dist/components/search-box/SearchBox.module.css +20 -0
  99. package/dist/components/segmented-progress-bar/SegmentedProgressBar.cjs +97 -0
  100. package/dist/components/segmented-progress-bar/SegmentedProgressBar.d.ts +24 -0
  101. package/dist/components/segmented-progress-bar/SegmentedProgressBar.js +91 -0
  102. package/dist/components/segmented-progress-bar/SegmentedProgressBar.module.css +55 -0
  103. package/dist/components/select/Select.cjs +52 -0
  104. package/dist/components/select/Select.d.ts +11 -0
  105. package/dist/components/select/Select.js +50 -0
  106. package/dist/components/sidebar/Sidebar.cjs +38 -0
  107. package/dist/components/sidebar/Sidebar.d.ts +12 -0
  108. package/dist/components/sidebar/Sidebar.js +31 -0
  109. package/dist/components/sidebar/Sidebar.module.css +66 -0
  110. package/dist/components/sidebar/components/SidebarItem.cjs +16 -0
  111. package/dist/components/sidebar/components/SidebarItem.d.ts +9 -0
  112. package/dist/components/sidebar/components/SidebarItem.js +14 -0
  113. package/dist/components/sidebar/components/SidebarItem.module.css +0 -0
  114. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.cjs +74 -0
  115. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.d.ts +9 -0
  116. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.js +68 -0
  117. package/dist/components/sidebar/components/expandable-sidebar-item/ExpandableSidebarItem.module.css +61 -0
  118. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.cjs +27 -0
  119. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.d.ts +8 -0
  120. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.js +21 -0
  121. package/dist/components/sidebar/components/sidebar-item-content/SidebarItemContent.module.css +62 -0
  122. package/dist/components/sidebar/components/sidebar-items/SidebarItems.cjs +28 -0
  123. package/dist/components/sidebar/components/sidebar-items/SidebarItems.d.ts +4 -0
  124. package/dist/components/sidebar/components/sidebar-items/SidebarItems.js +26 -0
  125. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.cjs +25 -0
  126. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.d.ts +3 -0
  127. package/dist/components/sidebar/components/sidenav-filteirng/SidenavFiltering.js +23 -0
  128. package/dist/components/sidebar/providers/SidebarProvider.cjs +81 -0
  129. package/dist/components/sidebar/providers/SidebarProvider.d.ts +24 -0
  130. package/dist/components/sidebar/providers/SidebarProvider.js +78 -0
  131. package/dist/components/skeleton-loader/SkeletonLoader.cjs +270 -0
  132. package/dist/components/skeleton-loader/SkeletonLoader.d.ts +9 -0
  133. package/dist/components/skeleton-loader/SkeletonLoader.js +268 -0
  134. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.cjs +42 -0
  135. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.d.ts +11 -0
  136. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.js +36 -0
  137. package/dist/components/skeleton-loader/skeleton-loader-item/SkeletonLoaderItem.module.css +63 -0
  138. package/dist/components/split-button/SplitButton.cjs +37 -0
  139. package/dist/components/split-button/SplitButton.d.ts +14 -0
  140. package/dist/components/split-button/SplitButton.js +31 -0
  141. package/dist/components/split-button/SplitButton.module.css +32 -0
  142. package/dist/components/table/Table.cjs +181 -0
  143. package/dist/components/table/Table.d.ts +45 -0
  144. package/dist/components/table/Table.js +175 -0
  145. package/dist/components/table/Table.module.css +143 -0
  146. package/dist/components/table/components/column-resizer/ColumnResizer.cjs +22 -0
  147. package/dist/components/table/components/column-resizer/ColumnResizer.d.ts +7 -0
  148. package/dist/components/table/components/column-resizer/ColumnResizer.js +16 -0
  149. package/dist/components/table/components/column-resizer/ColumnResizer.module.css +13 -0
  150. package/dist/components/tabs/Tabs.cjs +74 -0
  151. package/dist/components/tabs/Tabs.d.ts +18 -0
  152. package/dist/components/tabs/Tabs.js +68 -0
  153. package/dist/components/tabs/Tabs.module.css +113 -0
  154. package/dist/components/text-area/Textarea.cjs +62 -0
  155. package/dist/components/text-area/Textarea.d.ts +14 -0
  156. package/dist/components/text-area/Textarea.js +56 -0
  157. package/dist/components/text-area/Textarea.module.css +3 -0
  158. package/dist/components/tooltip/Tooltip.cjs +78 -0
  159. package/dist/components/tooltip/Tooltip.d.ts +11 -0
  160. package/dist/components/tooltip/Tooltip.js +72 -0
  161. package/dist/components/tooltip/Tooltip.module.css +84 -0
  162. package/dist/components/user-display/UserDisplay.cjs +28 -0
  163. package/dist/components/user-display/UserDisplay.d.ts +9 -0
  164. package/dist/components/user-display/UserDisplay.js +22 -0
  165. package/dist/components/user-display/UserDisplay.module.css +25 -0
  166. package/dist/constants/severity.cjs +21 -0
  167. package/dist/constants/severity.d.ts +3 -0
  168. package/dist/constants/severity.js +18 -0
  169. package/dist/constants/severity.types.cjs +2 -0
  170. package/dist/constants/severity.types.d.ts +1 -0
  171. package/dist/constants/severity.types.js +1 -0
  172. package/dist/constants/sizes.cjs +10 -0
  173. package/dist/constants/sizes.d.ts +2 -0
  174. package/dist/constants/sizes.js +8 -0
  175. package/dist/hooks/useTheme.cjs +58 -0
  176. package/dist/hooks/useTheme.d.ts +9 -0
  177. package/dist/hooks/useTheme.js +55 -0
  178. package/dist/hooks/useViewportFill.cjs +52 -0
  179. package/dist/hooks/useViewportFill.d.ts +15 -0
  180. package/dist/hooks/useViewportFill.js +50 -0
  181. package/dist/index.cjs +264 -2
  182. package/dist/index.d.ts +37 -12
  183. package/dist/index.js +37 -2
  184. package/dist/src/styles/styles.css +124 -0
  185. package/dist/styles/css-helper-classes/spacing.css +291 -0
  186. package/dist/styles/fonts/Roboto/OFL.txt +93 -0
  187. package/dist/styles/fonts/Roboto/README.txt +118 -0
  188. package/dist/styles/fonts/Roboto/Roboto-Black.ttf +0 -0
  189. package/dist/styles/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  190. package/dist/styles/fonts/Roboto/Roboto-Bold.ttf +0 -0
  191. package/dist/styles/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  192. package/dist/styles/fonts/Roboto/Roboto-ExtraBold.ttf +0 -0
  193. package/dist/styles/fonts/Roboto/Roboto-ExtraBoldItalic.ttf +0 -0
  194. package/dist/styles/fonts/Roboto/Roboto-ExtraLight.ttf +0 -0
  195. package/dist/styles/fonts/Roboto/Roboto-ExtraLightItalic.ttf +0 -0
  196. package/dist/styles/fonts/Roboto/Roboto-Italic.ttf +0 -0
  197. package/dist/styles/fonts/Roboto/Roboto-Light.ttf +0 -0
  198. package/dist/styles/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  199. package/dist/styles/fonts/Roboto/Roboto-Medium.ttf +0 -0
  200. package/dist/styles/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  201. package/dist/styles/fonts/Roboto/Roboto-Regular.ttf +0 -0
  202. package/dist/styles/fonts/Roboto/Roboto-SemiBold.ttf +0 -0
  203. package/dist/styles/fonts/Roboto/Roboto-SemiBoldItalic.ttf +0 -0
  204. package/dist/styles/fonts/Roboto/Roboto-Thin.ttf +0 -0
  205. package/dist/styles/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  206. package/dist/styles/fonts/Roboto/Roboto_Condensed-Black.ttf +0 -0
  207. package/dist/styles/fonts/Roboto/Roboto_Condensed-BlackItalic.ttf +0 -0
  208. package/dist/styles/fonts/Roboto/Roboto_Condensed-Bold.ttf +0 -0
  209. package/dist/styles/fonts/Roboto/Roboto_Condensed-BoldItalic.ttf +0 -0
  210. package/dist/styles/fonts/Roboto/Roboto_Condensed-ExtraBold.ttf +0 -0
  211. package/dist/styles/fonts/Roboto/Roboto_Condensed-ExtraBoldItalic.ttf +0 -0
  212. package/dist/styles/fonts/Roboto/Roboto_Condensed-ExtraLight.ttf +0 -0
  213. package/dist/styles/fonts/Roboto/Roboto_Condensed-ExtraLightItalic.ttf +0 -0
  214. package/dist/styles/fonts/Roboto/Roboto_Condensed-Italic.ttf +0 -0
  215. package/dist/styles/fonts/Roboto/Roboto_Condensed-Light.ttf +0 -0
  216. package/dist/styles/fonts/Roboto/Roboto_Condensed-LightItalic.ttf +0 -0
  217. package/dist/styles/fonts/Roboto/Roboto_Condensed-Medium.ttf +0 -0
  218. package/dist/styles/fonts/Roboto/Roboto_Condensed-MediumItalic.ttf +0 -0
  219. package/dist/styles/fonts/Roboto/Roboto_Condensed-Regular.ttf +0 -0
  220. package/dist/styles/fonts/Roboto/Roboto_Condensed-SemiBold.ttf +0 -0
  221. package/dist/styles/fonts/Roboto/Roboto_Condensed-SemiBoldItalic.ttf +0 -0
  222. package/dist/styles/fonts/Roboto/Roboto_Condensed-Thin.ttf +0 -0
  223. package/dist/styles/fonts/Roboto/Roboto_Condensed-ThinItalic.ttf +0 -0
  224. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-Black.ttf +0 -0
  225. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-BlackItalic.ttf +0 -0
  226. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-Bold.ttf +0 -0
  227. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-BoldItalic.ttf +0 -0
  228. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-ExtraBold.ttf +0 -0
  229. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  230. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-ExtraLight.ttf +0 -0
  231. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-ExtraLightItalic.ttf +0 -0
  232. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-Italic.ttf +0 -0
  233. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-Light.ttf +0 -0
  234. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-LightItalic.ttf +0 -0
  235. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-Medium.ttf +0 -0
  236. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-MediumItalic.ttf +0 -0
  237. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-Regular.ttf +0 -0
  238. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-SemiBold.ttf +0 -0
  239. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-SemiBoldItalic.ttf +0 -0
  240. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-Thin.ttf +0 -0
  241. package/dist/styles/fonts/Roboto/Roboto_SemiCondensed-ThinItalic.ttf +0 -0
  242. package/dist/styles/fonts/Tajawal/OFL.txt +93 -0
  243. package/dist/styles/fonts/Tajawal/Tajawal-Black.ttf +0 -0
  244. package/dist/styles/fonts/Tajawal/Tajawal-Bold.ttf +0 -0
  245. package/dist/styles/fonts/Tajawal/Tajawal-ExtraBold.ttf +0 -0
  246. package/dist/styles/fonts/Tajawal/Tajawal-ExtraLight.ttf +0 -0
  247. package/dist/styles/fonts/Tajawal/Tajawal-Light.ttf +0 -0
  248. package/dist/styles/fonts/Tajawal/Tajawal-Medium.ttf +0 -0
  249. package/dist/styles/fonts/Tajawal/Tajawal-Regular.ttf +0 -0
  250. package/dist/styles/styles.css +124 -0
  251. package/dist/styles/themes/dbc/dark.css +240 -0
  252. package/dist/styles/themes/dbc/light.css +245 -0
  253. package/dist/styles/themes/forfatterweb/light.css +104 -0
  254. package/dist/styles/themes/types.cjs +2 -0
  255. package/dist/styles/themes/types.d.ts +16 -0
  256. package/dist/styles/themes/types.js +1 -0
  257. package/dist/tanstack.cjs +231 -0
  258. package/dist/tanstack.d.ts +25 -0
  259. package/dist/tanstack.js +206 -0
  260. package/dist/types/a11y-props.types.cjs +2 -0
  261. package/dist/types/a11y-props.types.d.ts +8 -0
  262. package/dist/types/a11y-props.types.js +1 -0
  263. package/dist/types/assets.d.cjs +2 -0
  264. package/dist/types/assets.d.js +1 -0
  265. package/dist/types/css.d.cjs +2 -0
  266. package/dist/types/css.d.js +1 -0
  267. package/dist/types/sizes.types.cjs +2 -0
  268. package/dist/types/sizes.types.d.ts +2 -0
  269. package/dist/types/sizes.types.js +1 -0
  270. package/dist/utils/arrays/nested-filtering.cjs +40 -0
  271. package/dist/utils/arrays/nested-filtering.d.ts +9 -0
  272. package/dist/utils/arrays/nested-filtering.js +38 -0
  273. package/dist/utils/date/formatDate.cjs +19 -0
  274. package/dist/utils/date/formatDate.d.ts +12 -0
  275. package/dist/utils/date/formatDate.js +17 -0
  276. package/package.json +67 -20
  277. package/dist/index.cjs.map +0 -1
  278. package/dist/index.css +0 -2
  279. package/dist/index.css.map +0 -1
  280. package/dist/index.d.cts +0 -12
  281. package/dist/index.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ export type TabItem = {
2
+ header: string;
3
+ headerIcon?: React.ReactNode;
4
+ content: React.ReactNode;
5
+ disabled?: boolean;
6
+ hidden?: boolean;
7
+ };
8
+ interface TabsProps {
9
+ header?: string;
10
+ variant: 'filled' | 'outlined';
11
+ panelStyle?: boolean;
12
+ tabs: TabItem[];
13
+ activeIndex?: number;
14
+ onTabChange?: (index: number) => void;
15
+ addition?: React.ReactNode;
16
+ }
17
+ export declare function Tabs({ variant, header, tabs, activeIndex, onTabChange, addition, panelStyle, }: TabsProps): React.ReactNode;
18
+ export {};
@@ -0,0 +1,68 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useEffect, useCallback, useMemo } from 'react';
3
+ import styles from './Tabs.module.css';
4
+ import { Headline } from '../headline/Headline';
5
+
6
+ function Tabs({
7
+ variant,
8
+ header,
9
+ tabs,
10
+ activeIndex = 0,
11
+ onTabChange,
12
+ addition,
13
+ panelStyle
14
+ }) {
15
+ const [currentIndex, setCurrentIndex] = useState(activeIndex);
16
+ useEffect(() => {
17
+ if (activeIndex !== void 0) {
18
+ setCurrentIndex(activeIndex);
19
+ }
20
+ }, [activeIndex]);
21
+ const setActiveTab = useCallback(
22
+ (index) => {
23
+ setCurrentIndex(index);
24
+ },
25
+ [setCurrentIndex]
26
+ );
27
+ const handleTabChange = useCallback(
28
+ (index) => {
29
+ if (!onTabChange) {
30
+ setActiveTab(index);
31
+ }
32
+ onTabChange == null ? void 0 : onTabChange(index);
33
+ },
34
+ [onTabChange]
35
+ );
36
+ const filteredTabs = useMemo(() => tabs.filter((tab) => !tab.hidden), [tabs]);
37
+ return /* @__PURE__ */ jsxs("div", { className: "grow-container", children: [
38
+ header && /* @__PURE__ */ jsxs("div", { className: styles.headerContainer, children: [
39
+ /* @__PURE__ */ jsx(Headline, { disableMargin: true, size: 2, children: header }),
40
+ addition
41
+ ] }),
42
+ /* @__PURE__ */ jsxs("div", { className: `${styles.tabs} ${styles[variant]} ${panelStyle ? styles.panelStyle : ""}`, children: [
43
+ /* @__PURE__ */ jsx("div", { className: styles.tabList, children: filteredTabs.map((tab, index) => /* @__PURE__ */ jsx(
44
+ "div",
45
+ {
46
+ "data-index": index,
47
+ className: `${styles.tab} ${currentIndex === index ? styles.active : ""}`,
48
+ children: /* @__PURE__ */ jsxs(
49
+ "button",
50
+ {
51
+ className: `${styles.tabButton}`,
52
+ onClick: () => handleTabChange(index),
53
+ disabled: tab.disabled,
54
+ children: [
55
+ /* @__PURE__ */ jsx("span", { className: styles.icon, children: tab.headerIcon }),
56
+ /* @__PURE__ */ jsx("span", { className: styles.header, children: tab.header })
57
+ ]
58
+ }
59
+ )
60
+ },
61
+ index
62
+ )) }),
63
+ /* @__PURE__ */ jsx("div", { className: `${styles.tabContent} scrollable`, children: tabs[currentIndex].content })
64
+ ] })
65
+ ] });
66
+ }
67
+
68
+ export { Tabs };
@@ -0,0 +1,113 @@
1
+ .tabs {
2
+ display: flex;
3
+ flex-direction: column;
4
+ flex-grow: 1;
5
+ gap: var(--spacing-xl);
6
+ overflow: hidden;
7
+ }
8
+
9
+ /* ========== Filled variant ========== */
10
+ .tabs.filled .tab.active {
11
+ background: var(--opac-bg-brand);
12
+ color: var(--color-primary);
13
+ border: var(--border-width-thin) solid var(--opac-bg-dark);
14
+ border-block-end: 0;
15
+ }
16
+ .tabs.filled {
17
+ gap: 0;
18
+ }
19
+ .tabs.filled .tabList {
20
+ border-start-start-radius: var(--border-radius-default);
21
+ border-start-end-radius: var(--border-radius-default);
22
+ inline-size: fit-content;
23
+ }
24
+ .tabs.filled .tab {
25
+ border: var(--border-width-thin) solid transparent;
26
+ color: var(--color-text-muted);
27
+ font-size: var(--font-size-sm);
28
+ z-index: 3;
29
+ transition:
30
+ background-color var(--transition-fast) var(--ease-standard),
31
+ color var(--transition-fast) var(--ease-standard);
32
+ border-start-start-radius: var(--border-radius-default);
33
+ border-start-end-radius: var(--border-radius-default);
34
+ }
35
+ .tabs.filled .tab:not(.active):hover {
36
+ color: var(--color-primary);
37
+ }
38
+ .tabs.filled .tabContent {
39
+ border: var(--border-width-thin) solid var(--opac-bg-dark);
40
+ background: var(--color-background);
41
+ padding: var(--spacing-lg);
42
+ flex-grow: 1;
43
+ overflow: auto;
44
+ }
45
+
46
+ /* ========== Panel style variant ========== */
47
+ .panelStyle .tabList {
48
+ border: var(--border-width-thin) solid var(--color-border);
49
+ border-block-end: 0;
50
+ }
51
+ .panelStyle .tab.active {
52
+ border: 0 !important;
53
+ }
54
+ .panelStyle .tab {
55
+ border: 0 !important;
56
+ }
57
+
58
+ .tabButton {
59
+ text-transform: var(--tab-label-transform);
60
+ font-size: var(--font-size-sm);
61
+ color: inherit;
62
+ display: inline-flex;
63
+ white-space: nowrap;
64
+ background: none;
65
+ align-items: center;
66
+ justify-content: center;
67
+ gap: var(--spacing-xs);
68
+ border: 0;
69
+ border-radius: 0;
70
+ padding-block: calc(var(--spacing-sm) + var(--density));
71
+ padding-inline: var(--spacing-md);
72
+ cursor: pointer;
73
+ transition:
74
+ border var(--transition-normal) var(--ease-standard),
75
+ color var(--transition-fast) var(--ease-standard),
76
+ background-color var(--transition-fast) var(--ease-standard);
77
+ }
78
+ .tabButton:focus-visible {
79
+ outline: none;
80
+ box-shadow: var(--focus-ring);
81
+ }
82
+
83
+ /* ========== Tablist and tabs ========== */
84
+ .tabList {
85
+ display: flex;
86
+ flex-wrap: wrap;
87
+ }
88
+
89
+ .tab {
90
+ display: flex;
91
+ flex-direction: column;
92
+ border-radius: 0;
93
+ border-block-end: 2px solid var(--color-border);
94
+ }
95
+ .tab.active {
96
+ border-block-end-color: var(--color-primary);
97
+ }
98
+
99
+ .tab .icon {
100
+ display: contents;
101
+ color: inherit;
102
+ }
103
+ .tab .icon svg {
104
+ inline-size: var(--icon-size);
105
+ block-size: var(--icon-size);
106
+ }
107
+
108
+ .headerContainer {
109
+ display: flex;
110
+ justify-content: space-between;
111
+ align-items: center;
112
+ padding-block: var(--spacing-lg);
113
+ }
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var styles = require('./Textarea.module.css');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var styles__default = /*#__PURE__*/_interopDefault(styles);
10
+
11
+ function Textarea({
12
+ value,
13
+ inputChanged,
14
+ disabled,
15
+ loading,
16
+ rows = 3,
17
+ showCount,
18
+ tooltip,
19
+ showTooltip,
20
+ placeholder,
21
+ adjustHeight,
22
+ ...props
23
+ }) {
24
+ const onInput = react.useCallback(
25
+ (e) => {
26
+ const textarea = e.currentTarget;
27
+ const currentTextValue = textarea.value;
28
+ if (adjustHeight && textarea) {
29
+ textarea.style.height = "auto";
30
+ textarea.style.height = `${textarea.scrollHeight}px`;
31
+ }
32
+ inputChanged(currentTextValue);
33
+ },
34
+ [inputChanged, adjustHeight]
35
+ );
36
+ const inputField = react.useMemo(
37
+ () => /* @__PURE__ */ jsxRuntime.jsx(
38
+ "textarea",
39
+ {
40
+ placeholder,
41
+ rows,
42
+ value,
43
+ onInput,
44
+ disabled,
45
+ ...props
46
+ }
47
+ ),
48
+ [value, disabled, placeholder, rows, onInput]
49
+ );
50
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles__default.default.container, children: [
51
+ showTooltip ? /* @__PURE__ */ jsxRuntime.jsx("span", { title: tooltip, children: inputField }) : inputField,
52
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles__default.default.footer, children: [
53
+ loading && /* @__PURE__ */ jsxRuntime.jsx("div", { children: loading }),
54
+ showCount && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles__default.default.internalCount, children: [
55
+ value == null ? void 0 : value.length,
56
+ " tegn i denne boks"
57
+ ] })
58
+ ] })
59
+ ] });
60
+ }
61
+
62
+ exports.Textarea = Textarea;
@@ -0,0 +1,14 @@
1
+ type TextareaProps = {
2
+ value: string;
3
+ inputChanged: (value: string) => void;
4
+ disabled?: boolean;
5
+ loading?: React.ReactNode;
6
+ rows: number;
7
+ showCount?: boolean;
8
+ tooltip?: string;
9
+ showTooltip?: boolean;
10
+ adjustHeight?: boolean;
11
+ placeholder?: string;
12
+ };
13
+ export declare function Textarea({ value, inputChanged, disabled, loading, rows, showCount, tooltip, showTooltip, placeholder, adjustHeight, ...props }: TextareaProps & React.HtmlHTMLAttributes<HTMLTextAreaElement>): React.ReactNode;
14
+ export {};
@@ -0,0 +1,56 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useCallback, useMemo } from 'react';
3
+ import styles from './Textarea.module.css';
4
+
5
+ function Textarea({
6
+ value,
7
+ inputChanged,
8
+ disabled,
9
+ loading,
10
+ rows = 3,
11
+ showCount,
12
+ tooltip,
13
+ showTooltip,
14
+ placeholder,
15
+ adjustHeight,
16
+ ...props
17
+ }) {
18
+ const onInput = useCallback(
19
+ (e) => {
20
+ const textarea = e.currentTarget;
21
+ const currentTextValue = textarea.value;
22
+ if (adjustHeight && textarea) {
23
+ textarea.style.height = "auto";
24
+ textarea.style.height = `${textarea.scrollHeight}px`;
25
+ }
26
+ inputChanged(currentTextValue);
27
+ },
28
+ [inputChanged, adjustHeight]
29
+ );
30
+ const inputField = useMemo(
31
+ () => /* @__PURE__ */ jsx(
32
+ "textarea",
33
+ {
34
+ placeholder,
35
+ rows,
36
+ value,
37
+ onInput,
38
+ disabled,
39
+ ...props
40
+ }
41
+ ),
42
+ [value, disabled, placeholder, rows, onInput]
43
+ );
44
+ return /* @__PURE__ */ jsxs("div", { className: styles.container, children: [
45
+ showTooltip ? /* @__PURE__ */ jsx("span", { title: tooltip, children: inputField }) : inputField,
46
+ /* @__PURE__ */ jsxs("div", { className: styles.footer, children: [
47
+ loading && /* @__PURE__ */ jsx("div", { children: loading }),
48
+ showCount && /* @__PURE__ */ jsxs("div", { className: styles.internalCount, children: [
49
+ value == null ? void 0 : value.length,
50
+ " tegn i denne boks"
51
+ ] })
52
+ ] })
53
+ ] });
54
+ }
55
+
56
+ export { Textarea };
@@ -0,0 +1,3 @@
1
+ .container textarea {
2
+ width: 100%;
3
+ }
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var styles = require('./Tooltip.module.css');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var styles__default = /*#__PURE__*/_interopDefault(styles);
10
+
11
+ const Tooltip = ({
12
+ children,
13
+ content,
14
+ placement = "top",
15
+ className,
16
+ open,
17
+ flip = true,
18
+ offset = 8,
19
+ ...rest
20
+ }) => {
21
+ const id = react.useId();
22
+ const wrapperRef = react.useRef(null);
23
+ const bubbleRef = react.useRef(null);
24
+ const [resolvedPlacement, setResolvedPlacement] = react.useState(placement);
25
+ react.useEffect(() => setResolvedPlacement(placement), [placement]);
26
+ const recomputePlacement = () => {
27
+ if (!flip) return setResolvedPlacement(placement);
28
+ const wrapper = wrapperRef.current;
29
+ const bubble = bubbleRef.current;
30
+ if (!wrapper || !bubble) return;
31
+ const wrapperRect = wrapper.getBoundingClientRect();
32
+ const bubbleRect = bubble.getBoundingClientRect();
33
+ const spaceAbove = wrapperRect.top - (bubbleRect.height + offset);
34
+ const spaceBelow = window.innerHeight - wrapperRect.bottom - (bubbleRect.height + offset);
35
+ if (placement === "top") {
36
+ setResolvedPlacement(spaceAbove >= 0 ? "top" : "bottom");
37
+ } else if (placement === "bottom") {
38
+ setResolvedPlacement(spaceBelow >= 0 ? "bottom" : "top");
39
+ } else {
40
+ setResolvedPlacement(placement);
41
+ }
42
+ };
43
+ react.useLayoutEffect(() => {
44
+ const wrapper = wrapperRef.current;
45
+ if (!wrapper) return;
46
+ const onShow = () => recomputePlacement();
47
+ const onResize = () => recomputePlacement();
48
+ const onScroll = () => recomputePlacement();
49
+ wrapper.addEventListener("mouseenter", onShow);
50
+ wrapper.addEventListener("focusin", onShow);
51
+ window.addEventListener("resize", onResize);
52
+ window.addEventListener("scroll", onScroll, { passive: true });
53
+ if (open) recomputePlacement();
54
+ return () => {
55
+ wrapper.removeEventListener("mouseenter", onShow);
56
+ wrapper.removeEventListener("focusin", onShow);
57
+ window.removeEventListener("resize", onResize);
58
+ window.removeEventListener("scroll", onScroll);
59
+ };
60
+ }, [open, placement, flip, offset]);
61
+ const rootClass = [styles__default.default.container, className].filter(Boolean).join(" ");
62
+ return /* @__PURE__ */ jsxRuntime.jsxs(
63
+ "div",
64
+ {
65
+ ref: wrapperRef,
66
+ className: rootClass,
67
+ "data-open": open ? "true" : void 0,
68
+ "data-placement": resolvedPlacement,
69
+ ...rest,
70
+ children: [
71
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.trigger, "aria-describedby": id, tabIndex: 0, children }),
72
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: bubbleRef, id, role: "tooltip", className: styles__default.default.bubble, children: content })
73
+ ]
74
+ }
75
+ );
76
+ };
77
+
78
+ exports.Tooltip = Tooltip;
@@ -0,0 +1,11 @@
1
+ import React, { HTMLAttributes, ReactNode } from 'react';
2
+ export type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
3
+ export interface TooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {
4
+ children: ReactNode;
5
+ content: ReactNode;
6
+ placement?: TooltipPlacement;
7
+ open?: boolean;
8
+ flip?: boolean;
9
+ offset?: number;
10
+ }
11
+ export declare const Tooltip: React.FC<TooltipProps>;
@@ -0,0 +1,72 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useId, useRef, useState, useEffect, useLayoutEffect } from 'react';
3
+ import styles from './Tooltip.module.css';
4
+
5
+ const Tooltip = ({
6
+ children,
7
+ content,
8
+ placement = "top",
9
+ className,
10
+ open,
11
+ flip = true,
12
+ offset = 8,
13
+ ...rest
14
+ }) => {
15
+ const id = useId();
16
+ const wrapperRef = useRef(null);
17
+ const bubbleRef = useRef(null);
18
+ const [resolvedPlacement, setResolvedPlacement] = useState(placement);
19
+ useEffect(() => setResolvedPlacement(placement), [placement]);
20
+ const recomputePlacement = () => {
21
+ if (!flip) return setResolvedPlacement(placement);
22
+ const wrapper = wrapperRef.current;
23
+ const bubble = bubbleRef.current;
24
+ if (!wrapper || !bubble) return;
25
+ const wrapperRect = wrapper.getBoundingClientRect();
26
+ const bubbleRect = bubble.getBoundingClientRect();
27
+ const spaceAbove = wrapperRect.top - (bubbleRect.height + offset);
28
+ const spaceBelow = window.innerHeight - wrapperRect.bottom - (bubbleRect.height + offset);
29
+ if (placement === "top") {
30
+ setResolvedPlacement(spaceAbove >= 0 ? "top" : "bottom");
31
+ } else if (placement === "bottom") {
32
+ setResolvedPlacement(spaceBelow >= 0 ? "bottom" : "top");
33
+ } else {
34
+ setResolvedPlacement(placement);
35
+ }
36
+ };
37
+ useLayoutEffect(() => {
38
+ const wrapper = wrapperRef.current;
39
+ if (!wrapper) return;
40
+ const onShow = () => recomputePlacement();
41
+ const onResize = () => recomputePlacement();
42
+ const onScroll = () => recomputePlacement();
43
+ wrapper.addEventListener("mouseenter", onShow);
44
+ wrapper.addEventListener("focusin", onShow);
45
+ window.addEventListener("resize", onResize);
46
+ window.addEventListener("scroll", onScroll, { passive: true });
47
+ if (open) recomputePlacement();
48
+ return () => {
49
+ wrapper.removeEventListener("mouseenter", onShow);
50
+ wrapper.removeEventListener("focusin", onShow);
51
+ window.removeEventListener("resize", onResize);
52
+ window.removeEventListener("scroll", onScroll);
53
+ };
54
+ }, [open, placement, flip, offset]);
55
+ const rootClass = [styles.container, className].filter(Boolean).join(" ");
56
+ return /* @__PURE__ */ jsxs(
57
+ "div",
58
+ {
59
+ ref: wrapperRef,
60
+ className: rootClass,
61
+ "data-open": open ? "true" : void 0,
62
+ "data-placement": resolvedPlacement,
63
+ ...rest,
64
+ children: [
65
+ /* @__PURE__ */ jsx("div", { className: styles.trigger, "aria-describedby": id, tabIndex: 0, children }),
66
+ /* @__PURE__ */ jsx("div", { ref: bubbleRef, id, role: "tooltip", className: styles.bubble, children: content })
67
+ ]
68
+ }
69
+ );
70
+ };
71
+
72
+ export { Tooltip };
@@ -0,0 +1,84 @@
1
+ .container {
2
+ position: relative;
3
+ display: inline-flex;
4
+ }
5
+
6
+ .trigger {
7
+ width: 100%;
8
+ }
9
+ .trigger:focus-visible {
10
+ outline: none;
11
+ box-shadow: var(--focus-ring);
12
+ border-radius: var(--border-radius-default);
13
+ }
14
+
15
+ .bubble {
16
+ position: absolute;
17
+ background: var(--color-text);
18
+ color: var(--color-text-inverse);
19
+ font-size: var(--font-size-xs);
20
+ padding: var(--spacing-xxs) var(--spacing-sm);
21
+ border-radius: var(--border-radius-default);
22
+ line-height: var(--line-height-tight);
23
+ white-space: nowrap;
24
+ z-index: var(--z-tooltip);
25
+ pointer-events: none;
26
+ opacity: 0;
27
+ transform: translate(-50%, -8px);
28
+ left: 50%;
29
+ bottom: calc(100% + var(--spacing-xs));
30
+ transition:
31
+ opacity var(--transition-fast),
32
+ transform var(--transition-fast);
33
+ }
34
+
35
+ .container[data-placement='top'] .bubble {
36
+ left: 50%;
37
+ bottom: calc(100% + var(--spacing-xs));
38
+ transform: translate(-50%, -8px);
39
+ }
40
+ .container[data-placement='bottom'] .bubble {
41
+ top: calc(100% + var(--spacing-xs));
42
+ left: 50%;
43
+ transform: translate(-50%, 8px);
44
+ }
45
+ .container[data-placement='left'] .bubble {
46
+ right: calc(100% + var(--spacing-xs));
47
+ top: 50%;
48
+ transform: translate(-8px, -50%);
49
+ }
50
+ .container[data-placement='right'] .bubble {
51
+ left: calc(100% + var(--spacing-xs));
52
+ top: 50%;
53
+ transform: translate(8px, -50%);
54
+ }
55
+
56
+ .container:hover .bubble,
57
+ .container:focus-within .bubble,
58
+ .container[data-open='true'] .bubble {
59
+ opacity: 1;
60
+ height: fit-content;
61
+ transform: translate(-50%, 0);
62
+ }
63
+
64
+ .container[data-placement='bottom']:hover .bubble,
65
+ .container[data-placement='bottom']:focus-within .bubble,
66
+ .container[data-placement='bottom'][data-open='true'] .bubble {
67
+ transform: translate(-50%, 0);
68
+ }
69
+ .container[data-placement='left']:hover .bubble,
70
+ .container[data-placement='left']:focus-within .bubble,
71
+ .container[data-placement='left'][data-open='true'] .bubble {
72
+ transform: translate(0, -50%);
73
+ }
74
+ .container[data-placement='right']:hover .bubble,
75
+ .container[data-placement='right']:focus-within .bubble,
76
+ .container[data-placement='right'][data-open='true'] .bubble {
77
+ transform: translate(0, -50%);
78
+ }
79
+
80
+ @media (prefers-reduced-motion: reduce) {
81
+ .bubble {
82
+ transition: none;
83
+ }
84
+ }
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var Avatar = require('../avatar/Avatar');
5
+ var styles = require('./UserDisplay.module.css');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var styles__default = /*#__PURE__*/_interopDefault(styles);
10
+
11
+ function UserDisplay({
12
+ id,
13
+ name,
14
+ email,
15
+ role,
16
+ avatarUrl
17
+ }) {
18
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles__default.default.container, children: [
19
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(Avatar.Avatar, { imgSrc: avatarUrl, imgAlt: name, fullName: name, size: "xl" }) }),
20
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles__default.default.userInfo, children: [
21
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { children: name }),
22
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: email }),
23
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: role })
24
+ ] })
25
+ ] });
26
+ }
27
+
28
+ exports.UserDisplay = UserDisplay;
@@ -0,0 +1,9 @@
1
+ interface UserDisplayProps {
2
+ id?: string;
3
+ name?: string;
4
+ email?: string;
5
+ role?: string;
6
+ avatarUrl?: string;
7
+ }
8
+ export declare function UserDisplay({ id, name, email, role, avatarUrl, }: UserDisplayProps): React.ReactNode;
9
+ export {};
@@ -0,0 +1,22 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Avatar } from '../avatar/Avatar';
3
+ import styles from './UserDisplay.module.css';
4
+
5
+ function UserDisplay({
6
+ id,
7
+ name,
8
+ email,
9
+ role,
10
+ avatarUrl
11
+ }) {
12
+ return /* @__PURE__ */ jsxs("div", { className: styles.container, children: [
13
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Avatar, { imgSrc: avatarUrl, imgAlt: name, fullName: name, size: "xl" }) }),
14
+ /* @__PURE__ */ jsxs("div", { className: styles.userInfo, children: [
15
+ /* @__PURE__ */ jsx("h4", { children: name }),
16
+ /* @__PURE__ */ jsx("p", { children: email }),
17
+ /* @__PURE__ */ jsx("p", { children: role })
18
+ ] })
19
+ ] });
20
+ }
21
+
22
+ export { UserDisplay };
@@ -0,0 +1,25 @@
1
+ .container {
2
+ display: flex;
3
+ gap: var(--spacing-sm);
4
+ align-items: center;
5
+ padding: var(--spacing-xs);
6
+ background-color: var(--opac-bg-light);
7
+ }
8
+
9
+ .userInfo {
10
+ display: flex;
11
+ flex-direction: column;
12
+ justify-content: center;
13
+ padding: var(--spacing-sm);
14
+ flex-grow: 0;
15
+ color: var(--color-text-muted);
16
+ }
17
+
18
+ .userInfo h4 {
19
+ color: var(--color-text);
20
+ margin: 0;
21
+ }
22
+
23
+ .userInfo p {
24
+ margin: 0;
25
+ }