@helpwave/hightide 0.1.18 → 0.1.20

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 (261) hide show
  1. package/dist/components/branding/HelpwaveBadge.js +7 -7
  2. package/dist/components/branding/HelpwaveBadge.js.map +1 -1
  3. package/dist/components/branding/HelpwaveBadge.mjs +7 -7
  4. package/dist/components/branding/HelpwaveBadge.mjs.map +1 -1
  5. package/dist/components/date/DatePicker.js +67 -39
  6. package/dist/components/date/DatePicker.js.map +1 -1
  7. package/dist/components/date/DatePicker.mjs +56 -28
  8. package/dist/components/date/DatePicker.mjs.map +1 -1
  9. package/dist/components/date/DayPicker.js +3 -3
  10. package/dist/components/date/DayPicker.js.map +1 -1
  11. package/dist/components/date/DayPicker.mjs +3 -3
  12. package/dist/components/date/DayPicker.mjs.map +1 -1
  13. package/dist/components/date/TimePicker.js +4 -4
  14. package/dist/components/date/TimePicker.js.map +1 -1
  15. package/dist/components/date/TimePicker.mjs +4 -4
  16. package/dist/components/date/TimePicker.mjs.map +1 -1
  17. package/dist/components/date/YearMonthPicker.js +48 -20
  18. package/dist/components/date/YearMonthPicker.js.map +1 -1
  19. package/dist/components/date/YearMonthPicker.mjs +46 -18
  20. package/dist/components/date/YearMonthPicker.mjs.map +1 -1
  21. package/dist/components/dialogs/ConfirmDialog.js +32 -28
  22. package/dist/components/dialogs/ConfirmDialog.js.map +1 -1
  23. package/dist/components/dialogs/ConfirmDialog.mjs +18 -14
  24. package/dist/components/dialogs/ConfirmDialog.mjs.map +1 -1
  25. package/dist/components/icons-and-geometry/Avatar.js +2 -2
  26. package/dist/components/icons-and-geometry/Avatar.js.map +1 -1
  27. package/dist/components/icons-and-geometry/Avatar.mjs +2 -2
  28. package/dist/components/icons-and-geometry/Avatar.mjs.map +1 -1
  29. package/dist/components/icons-and-geometry/Ring.js +2 -2
  30. package/dist/components/icons-and-geometry/Ring.js.map +1 -1
  31. package/dist/components/icons-and-geometry/Ring.mjs +2 -2
  32. package/dist/components/icons-and-geometry/Ring.mjs.map +1 -1
  33. package/dist/components/layout-and-navigation/BreadCrumb.js +1 -1
  34. package/dist/components/layout-and-navigation/BreadCrumb.js.map +1 -1
  35. package/dist/components/layout-and-navigation/BreadCrumb.mjs +1 -1
  36. package/dist/components/layout-and-navigation/BreadCrumb.mjs.map +1 -1
  37. package/dist/components/layout-and-navigation/Carousel.js +84 -15
  38. package/dist/components/layout-and-navigation/Carousel.js.map +1 -1
  39. package/dist/components/layout-and-navigation/Carousel.mjs +76 -7
  40. package/dist/components/layout-and-navigation/Carousel.mjs.map +1 -1
  41. package/dist/components/layout-and-navigation/Chip.js +1 -1
  42. package/dist/components/layout-and-navigation/Chip.js.map +1 -1
  43. package/dist/components/layout-and-navigation/Chip.mjs +1 -1
  44. package/dist/components/layout-and-navigation/Chip.mjs.map +1 -1
  45. package/dist/components/layout-and-navigation/Expandable.d.mts +10 -1
  46. package/dist/components/layout-and-navigation/Expandable.d.ts +10 -1
  47. package/dist/components/layout-and-navigation/Expandable.js +38 -10
  48. package/dist/components/layout-and-navigation/Expandable.js.map +1 -1
  49. package/dist/components/layout-and-navigation/Expandable.mjs +38 -11
  50. package/dist/components/layout-and-navigation/Expandable.mjs.map +1 -1
  51. package/dist/components/layout-and-navigation/FAQSection.js +36 -12
  52. package/dist/components/layout-and-navigation/FAQSection.js.map +1 -1
  53. package/dist/components/layout-and-navigation/FAQSection.mjs +38 -14
  54. package/dist/components/layout-and-navigation/FAQSection.mjs.map +1 -1
  55. package/dist/components/layout-and-navigation/Overlay.js +92 -19
  56. package/dist/components/layout-and-navigation/Overlay.js.map +1 -1
  57. package/dist/components/layout-and-navigation/Overlay.mjs +81 -8
  58. package/dist/components/layout-and-navigation/Overlay.mjs.map +1 -1
  59. package/dist/components/layout-and-navigation/Pagination.js +82 -9
  60. package/dist/components/layout-and-navigation/Pagination.js.map +1 -1
  61. package/dist/components/layout-and-navigation/Pagination.mjs +79 -6
  62. package/dist/components/layout-and-navigation/Pagination.mjs.map +1 -1
  63. package/dist/components/layout-and-navigation/SearchableList.js +127 -25
  64. package/dist/components/layout-and-navigation/SearchableList.js.map +1 -1
  65. package/dist/components/layout-and-navigation/SearchableList.mjs +126 -24
  66. package/dist/components/layout-and-navigation/SearchableList.mjs.map +1 -1
  67. package/dist/components/layout-and-navigation/StepperBar.js +22 -16
  68. package/dist/components/layout-and-navigation/StepperBar.js.map +1 -1
  69. package/dist/components/layout-and-navigation/StepperBar.mjs +19 -13
  70. package/dist/components/layout-and-navigation/StepperBar.mjs.map +1 -1
  71. package/dist/components/layout-and-navigation/TextImage.js +7 -3
  72. package/dist/components/layout-and-navigation/TextImage.js.map +1 -1
  73. package/dist/components/layout-and-navigation/TextImage.mjs +7 -3
  74. package/dist/components/layout-and-navigation/TextImage.mjs.map +1 -1
  75. package/dist/components/layout-and-navigation/Tile.d.mts +2 -2
  76. package/dist/components/layout-and-navigation/Tile.d.ts +2 -2
  77. package/dist/components/layout-and-navigation/Tile.js +7 -7
  78. package/dist/components/layout-and-navigation/Tile.js.map +1 -1
  79. package/dist/components/layout-and-navigation/Tile.mjs +7 -7
  80. package/dist/components/layout-and-navigation/Tile.mjs.map +1 -1
  81. package/dist/components/loading-states/ErrorComponent.js +1 -1
  82. package/dist/components/loading-states/ErrorComponent.js.map +1 -1
  83. package/dist/components/loading-states/ErrorComponent.mjs +1 -1
  84. package/dist/components/loading-states/ErrorComponent.mjs.map +1 -1
  85. package/dist/components/loading-states/LoadingAndErrorComponent.d.mts +5 -10
  86. package/dist/components/loading-states/LoadingAndErrorComponent.d.ts +5 -10
  87. package/dist/components/loading-states/LoadingAndErrorComponent.js +14 -327
  88. package/dist/components/loading-states/LoadingAndErrorComponent.js.map +1 -1
  89. package/dist/components/loading-states/LoadingAndErrorComponent.mjs +15 -318
  90. package/dist/components/loading-states/LoadingAndErrorComponent.mjs.map +1 -1
  91. package/dist/components/loading-states/LoadingAnimation.js +5 -1
  92. package/dist/components/loading-states/LoadingAnimation.js.map +1 -1
  93. package/dist/components/loading-states/LoadingAnimation.mjs +5 -1
  94. package/dist/components/loading-states/LoadingAnimation.mjs.map +1 -1
  95. package/dist/components/loading-states/LoadingButton.js +8 -6
  96. package/dist/components/loading-states/LoadingButton.js.map +1 -1
  97. package/dist/components/loading-states/LoadingButton.mjs +8 -6
  98. package/dist/components/loading-states/LoadingButton.mjs.map +1 -1
  99. package/dist/components/loading-states/LoadingContainer.d.mts +8 -0
  100. package/dist/components/loading-states/LoadingContainer.d.ts +8 -0
  101. package/dist/components/loading-states/LoadingContainer.js +34 -0
  102. package/dist/components/loading-states/LoadingContainer.js.map +1 -0
  103. package/dist/components/loading-states/LoadingContainer.mjs +10 -0
  104. package/dist/components/loading-states/LoadingContainer.mjs.map +1 -0
  105. package/dist/components/modals/ConfirmModal.js +32 -28
  106. package/dist/components/modals/ConfirmModal.js.map +1 -1
  107. package/dist/components/modals/ConfirmModal.mjs +18 -14
  108. package/dist/components/modals/ConfirmModal.mjs.map +1 -1
  109. package/dist/components/modals/DiscardChangesModal.js +28 -24
  110. package/dist/components/modals/DiscardChangesModal.js.map +1 -1
  111. package/dist/components/modals/DiscardChangesModal.mjs +18 -14
  112. package/dist/components/modals/DiscardChangesModal.mjs.map +1 -1
  113. package/dist/components/modals/InputModal.js +32 -28
  114. package/dist/components/modals/InputModal.js.map +1 -1
  115. package/dist/components/modals/InputModal.mjs +18 -14
  116. package/dist/components/modals/InputModal.mjs.map +1 -1
  117. package/dist/components/modals/LanguageModal.js +729 -434
  118. package/dist/components/modals/LanguageModal.js.map +1 -1
  119. package/dist/components/modals/LanguageModal.mjs +729 -430
  120. package/dist/components/modals/LanguageModal.mjs.map +1 -1
  121. package/dist/components/modals/ThemeModal.js +733 -438
  122. package/dist/components/modals/ThemeModal.js.map +1 -1
  123. package/dist/components/modals/ThemeModal.mjs +732 -433
  124. package/dist/components/modals/ThemeModal.mjs.map +1 -1
  125. package/dist/components/properties/CheckboxProperty.js +110 -35
  126. package/dist/components/properties/CheckboxProperty.js.map +1 -1
  127. package/dist/components/properties/CheckboxProperty.mjs +110 -35
  128. package/dist/components/properties/CheckboxProperty.mjs.map +1 -1
  129. package/dist/components/properties/DateProperty.js +118 -41
  130. package/dist/components/properties/DateProperty.js.map +1 -1
  131. package/dist/components/properties/DateProperty.mjs +114 -37
  132. package/dist/components/properties/DateProperty.mjs.map +1 -1
  133. package/dist/components/properties/MultiSelectProperty.d.mts +10 -3
  134. package/dist/components/properties/MultiSelectProperty.d.ts +10 -3
  135. package/dist/components/properties/MultiSelectProperty.js +916 -463
  136. package/dist/components/properties/MultiSelectProperty.js.map +1 -1
  137. package/dist/components/properties/MultiSelectProperty.mjs +921 -464
  138. package/dist/components/properties/MultiSelectProperty.mjs.map +1 -1
  139. package/dist/components/properties/NumberProperty.js +101 -18
  140. package/dist/components/properties/NumberProperty.js.map +1 -1
  141. package/dist/components/properties/NumberProperty.mjs +101 -18
  142. package/dist/components/properties/NumberProperty.mjs.map +1 -1
  143. package/dist/components/properties/PropertyBase.js +103 -20
  144. package/dist/components/properties/PropertyBase.js.map +1 -1
  145. package/dist/components/properties/PropertyBase.mjs +99 -16
  146. package/dist/components/properties/PropertyBase.mjs.map +1 -1
  147. package/dist/components/properties/SelectProperty.d.mts +9 -2
  148. package/dist/components/properties/SelectProperty.d.ts +9 -2
  149. package/dist/components/properties/SelectProperty.js +683 -243
  150. package/dist/components/properties/SelectProperty.js.map +1 -1
  151. package/dist/components/properties/SelectProperty.mjs +687 -243
  152. package/dist/components/properties/SelectProperty.mjs.map +1 -1
  153. package/dist/components/properties/TextProperty.js +133 -46
  154. package/dist/components/properties/TextProperty.js.map +1 -1
  155. package/dist/components/properties/TextProperty.mjs +133 -46
  156. package/dist/components/properties/TextProperty.mjs.map +1 -1
  157. package/dist/components/table/Table.js +285 -185
  158. package/dist/components/table/Table.js.map +1 -1
  159. package/dist/components/table/Table.mjs +270 -166
  160. package/dist/components/table/Table.mjs.map +1 -1
  161. package/dist/components/table/TableFilterButton.js +179 -78
  162. package/dist/components/table/TableFilterButton.js.map +1 -1
  163. package/dist/components/table/TableFilterButton.mjs +160 -55
  164. package/dist/components/table/TableFilterButton.mjs.map +1 -1
  165. package/dist/components/table/TableSortButton.js +72 -3
  166. package/dist/components/table/TableSortButton.js.map +1 -1
  167. package/dist/components/table/TableSortButton.mjs +72 -3
  168. package/dist/components/table/TableSortButton.mjs.map +1 -1
  169. package/dist/components/user-action/Button.d.mts +15 -2
  170. package/dist/components/user-action/Button.d.ts +15 -2
  171. package/dist/components/user-action/Button.js +12 -12
  172. package/dist/components/user-action/Button.js.map +1 -1
  173. package/dist/components/user-action/Button.mjs +12 -12
  174. package/dist/components/user-action/Button.mjs.map +1 -1
  175. package/dist/components/user-action/Checkbox.js +6 -15
  176. package/dist/components/user-action/Checkbox.js.map +1 -1
  177. package/dist/components/user-action/Checkbox.mjs +6 -15
  178. package/dist/components/user-action/Checkbox.mjs.map +1 -1
  179. package/dist/components/user-action/CopyToClipboardWrapper.js +6 -2
  180. package/dist/components/user-action/CopyToClipboardWrapper.js.map +1 -1
  181. package/dist/components/user-action/CopyToClipboardWrapper.mjs +6 -2
  182. package/dist/components/user-action/CopyToClipboardWrapper.mjs.map +1 -1
  183. package/dist/components/user-action/DateAndTimePicker.js +81 -49
  184. package/dist/components/user-action/DateAndTimePicker.js.map +1 -1
  185. package/dist/components/user-action/DateAndTimePicker.mjs +67 -35
  186. package/dist/components/user-action/DateAndTimePicker.mjs.map +1 -1
  187. package/dist/components/user-action/Menu.d.mts +11 -6
  188. package/dist/components/user-action/Menu.d.ts +11 -6
  189. package/dist/components/user-action/Menu.js +128 -31
  190. package/dist/components/user-action/Menu.js.map +1 -1
  191. package/dist/components/user-action/Menu.mjs +134 -33
  192. package/dist/components/user-action/Menu.mjs.map +1 -1
  193. package/dist/components/user-action/MultiSelect.d.mts +17 -7
  194. package/dist/components/user-action/MultiSelect.d.ts +17 -7
  195. package/dist/components/user-action/MultiSelect.js +797 -375
  196. package/dist/components/user-action/MultiSelect.js.map +1 -1
  197. package/dist/components/user-action/MultiSelect.mjs +782 -356
  198. package/dist/components/user-action/MultiSelect.mjs.map +1 -1
  199. package/dist/components/user-action/ScrollPicker.js +2 -2
  200. package/dist/components/user-action/ScrollPicker.js.map +1 -1
  201. package/dist/components/user-action/ScrollPicker.mjs +2 -2
  202. package/dist/components/user-action/ScrollPicker.mjs.map +1 -1
  203. package/dist/components/user-action/SearchBar.d.mts +14 -0
  204. package/dist/components/user-action/SearchBar.d.ts +14 -0
  205. package/dist/components/user-action/SearchBar.js +673 -0
  206. package/dist/components/user-action/SearchBar.js.map +1 -0
  207. package/dist/components/user-action/SearchBar.mjs +637 -0
  208. package/dist/components/user-action/SearchBar.mjs.map +1 -0
  209. package/dist/components/user-action/Select.d.mts +18 -5
  210. package/dist/components/user-action/Select.d.ts +18 -5
  211. package/dist/components/user-action/Select.js +765 -355
  212. package/dist/components/user-action/Select.js.map +1 -1
  213. package/dist/components/user-action/Select.mjs +762 -349
  214. package/dist/components/user-action/Select.mjs.map +1 -1
  215. package/dist/components/user-action/Textarea.d.mts +1 -1
  216. package/dist/components/user-action/Textarea.d.ts +1 -1
  217. package/dist/components/user-action/Textarea.js +13 -3
  218. package/dist/components/user-action/Textarea.js.map +1 -1
  219. package/dist/components/user-action/Textarea.mjs +13 -3
  220. package/dist/components/user-action/Textarea.mjs.map +1 -1
  221. package/dist/components/user-action/ToggleableInput.js +2 -2
  222. package/dist/components/user-action/ToggleableInput.js.map +1 -1
  223. package/dist/components/user-action/ToggleableInput.mjs +2 -2
  224. package/dist/components/user-action/ToggleableInput.mjs.map +1 -1
  225. package/dist/css/globals.css +284 -113
  226. package/dist/css/uncompiled/globals.css +19 -13
  227. package/dist/css/uncompiled/theme/colors-component.css +12 -3
  228. package/dist/css/uncompiled/theme/colors-semantic.css +10 -7
  229. package/dist/css/uncompiled/utitlity/animation.css +96 -1
  230. package/dist/css/uncompiled/utitlity/general.css +16 -0
  231. package/dist/hooks/usePopoverPosition.d.mts +15 -0
  232. package/dist/hooks/usePopoverPosition.d.ts +15 -0
  233. package/dist/hooks/usePopoverPosition.js +81 -0
  234. package/dist/hooks/usePopoverPosition.js.map +1 -0
  235. package/dist/hooks/usePopoverPosition.mjs +57 -0
  236. package/dist/hooks/usePopoverPosition.mjs.map +1 -0
  237. package/dist/hooks/useSearch.d.mts +7 -2
  238. package/dist/hooks/useSearch.d.ts +7 -2
  239. package/dist/hooks/useSearch.js +44 -15
  240. package/dist/hooks/useSearch.js.map +1 -1
  241. package/dist/hooks/useSearch.mjs +45 -16
  242. package/dist/hooks/useSearch.mjs.map +1 -1
  243. package/dist/index.d.mts +7 -4
  244. package/dist/index.d.ts +7 -4
  245. package/dist/index.js +1197 -902
  246. package/dist/index.js.map +1 -1
  247. package/dist/index.mjs +1048 -754
  248. package/dist/index.mjs.map +1 -1
  249. package/dist/localization/defaults/form.d.mts +2 -0
  250. package/dist/localization/defaults/form.d.ts +2 -0
  251. package/dist/localization/defaults/form.js +4 -0
  252. package/dist/localization/defaults/form.js.map +1 -1
  253. package/dist/localization/defaults/form.mjs +4 -0
  254. package/dist/localization/defaults/form.mjs.map +1 -1
  255. package/dist/util/simpleSearch.d.mts +1 -1
  256. package/dist/util/simpleSearch.d.ts +1 -1
  257. package/dist/util/simpleSearch.js +4 -1
  258. package/dist/util/simpleSearch.js.map +1 -1
  259. package/dist/util/simpleSearch.mjs +4 -1
  260. package/dist/util/simpleSearch.mjs.map +1 -1
  261. package/package.json +1 -1
@@ -0,0 +1,637 @@
1
+ // src/components/user-action/Input.tsx
2
+ import { forwardRef, useEffect as useEffect3, useImperativeHandle, useRef, useState as useState2 } from "react";
3
+ import clsx2 from "clsx";
4
+
5
+ // src/hooks/useDelay.ts
6
+ import { useEffect, useState } from "react";
7
+ var defaultOptions = {
8
+ delay: 3e3,
9
+ disabled: false
10
+ };
11
+ function useDelay(options) {
12
+ const [timer, setTimer] = useState(void 0);
13
+ const { delay, disabled } = {
14
+ ...defaultOptions,
15
+ ...options
16
+ };
17
+ const clearTimer = () => {
18
+ clearTimeout(timer);
19
+ setTimer(void 0);
20
+ };
21
+ const restartTimer = (onDelayFinish) => {
22
+ if (disabled) {
23
+ return;
24
+ }
25
+ clearTimeout(timer);
26
+ setTimer(setTimeout(() => {
27
+ onDelayFinish();
28
+ setTimer(void 0);
29
+ }, delay));
30
+ };
31
+ useEffect(() => {
32
+ return () => {
33
+ clearTimeout(timer);
34
+ };
35
+ }, [timer]);
36
+ useEffect(() => {
37
+ if (disabled) {
38
+ clearTimeout(timer);
39
+ setTimer(void 0);
40
+ }
41
+ }, [disabled, timer]);
42
+ return { restartTimer, clearTimer, hasActiveTimer: !!timer };
43
+ }
44
+
45
+ // src/util/noop.ts
46
+ var noop = () => void 0;
47
+
48
+ // src/components/user-action/Label.tsx
49
+ import clsx from "clsx";
50
+ import { jsx } from "react/jsx-runtime";
51
+ var styleMapping = {
52
+ labelSmall: "textstyle-label-sm",
53
+ labelMedium: "textstyle-label-md",
54
+ labelBig: "textstyle-label-lg"
55
+ };
56
+ var Label = ({
57
+ children,
58
+ name,
59
+ labelType = "labelSmall",
60
+ className,
61
+ ...props
62
+ }) => {
63
+ return /* @__PURE__ */ jsx("label", { ...props, className: clsx(styleMapping[labelType], className), children: children ? children : name });
64
+ };
65
+
66
+ // src/hooks/useFocusManagement.ts
67
+ import { useCallback } from "react";
68
+ function useFocusManagement() {
69
+ const getFocusableElements = useCallback(() => {
70
+ return Array.from(
71
+ document.querySelectorAll(
72
+ 'input, button, select, textarea, a[href], [tabindex]:not([tabindex="-1"])'
73
+ )
74
+ ).filter(
75
+ (el) => el instanceof HTMLElement && !el.hasAttribute("disabled") && !el.hasAttribute("hidden") && el.tabIndex !== -1
76
+ );
77
+ }, []);
78
+ const getNextFocusElement = useCallback(() => {
79
+ const elements = getFocusableElements();
80
+ if (elements.length === 0) {
81
+ return void 0;
82
+ }
83
+ let nextElement = elements[0];
84
+ if (document.activeElement instanceof HTMLElement) {
85
+ const currentIndex = elements.indexOf(document.activeElement);
86
+ nextElement = elements[(currentIndex + 1) % elements.length];
87
+ }
88
+ return nextElement;
89
+ }, [getFocusableElements]);
90
+ const focusNext = useCallback(() => {
91
+ const nextElement = getNextFocusElement();
92
+ nextElement?.focus();
93
+ }, [getNextFocusElement]);
94
+ const getPreviousFocusElement = useCallback(() => {
95
+ const elements = getFocusableElements();
96
+ if (elements.length === 0) {
97
+ return void 0;
98
+ }
99
+ let previousElement = elements[0];
100
+ if (document.activeElement instanceof HTMLElement) {
101
+ const currentIndex = elements.indexOf(document.activeElement);
102
+ if (currentIndex === 0) {
103
+ previousElement = elements[elements.length - 1];
104
+ } else {
105
+ previousElement = elements[currentIndex - 1];
106
+ }
107
+ }
108
+ return previousElement;
109
+ }, [getFocusableElements]);
110
+ const focusPrevious = useCallback(() => {
111
+ const previousElement = getPreviousFocusElement();
112
+ if (previousElement) previousElement.focus();
113
+ }, [getPreviousFocusElement]);
114
+ return {
115
+ getFocusableElements,
116
+ getNextFocusElement,
117
+ getPreviousFocusElement,
118
+ focusNext,
119
+ focusPrevious
120
+ };
121
+ }
122
+
123
+ // src/hooks/useFocusOnceVisible.ts
124
+ import React, { useEffect as useEffect2 } from "react";
125
+ var useFocusOnceVisible = (ref, disable = false) => {
126
+ const [hasUsedFocus, setHasUsedFocus] = React.useState(false);
127
+ useEffect2(() => {
128
+ if (disable || hasUsedFocus) {
129
+ return;
130
+ }
131
+ const observer = new IntersectionObserver(([entry]) => {
132
+ if (entry.isIntersecting && !hasUsedFocus) {
133
+ ref.current?.focus();
134
+ setHasUsedFocus(hasUsedFocus);
135
+ }
136
+ }, {
137
+ threshold: 0.1
138
+ });
139
+ if (ref.current) {
140
+ observer.observe(ref.current);
141
+ }
142
+ return () => observer.disconnect();
143
+ }, [disable, hasUsedFocus, ref]);
144
+ };
145
+
146
+ // src/components/user-action/Input.tsx
147
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
148
+ var getInputClassName = ({ disabled = false, hasError = false }) => {
149
+ return clsx2(
150
+ "px-2 py-1.5 rounded-md border-2",
151
+ {
152
+ "bg-surface text-on-surface hover:border-primary focus:border-primary": !disabled && !hasError,
153
+ "bg-on-negative text-negative border-negative-border hover:border-negative-border-hover": !disabled && hasError,
154
+ "bg-disabled-background text-disabled-text border-disabled-border": disabled
155
+ }
156
+ );
157
+ };
158
+ var defaultEditCompleteOptions = {
159
+ onBlur: true,
160
+ afterDelay: true,
161
+ delay: 2500
162
+ };
163
+ var Input = forwardRef(function Input2({
164
+ id,
165
+ type = "text",
166
+ value,
167
+ label,
168
+ onChange = noop,
169
+ onChangeText = noop,
170
+ onEditCompleted,
171
+ className = "",
172
+ allowEnterComplete = true,
173
+ expanded = true,
174
+ autoFocus = false,
175
+ onBlur,
176
+ editCompleteOptions,
177
+ containerClassName,
178
+ disabled,
179
+ ...restProps
180
+ }, forwardedRef) {
181
+ const { onBlur: allowEditCompleteOnBlur, afterDelay, delay } = { ...defaultEditCompleteOptions, ...editCompleteOptions };
182
+ const {
183
+ restartTimer,
184
+ clearTimer
185
+ } = useDelay({ delay, disabled: !afterDelay });
186
+ const innerRef = useRef(null);
187
+ const { focusNext } = useFocusManagement();
188
+ useFocusOnceVisible(innerRef, !autoFocus);
189
+ useImperativeHandle(forwardedRef, () => innerRef.current);
190
+ const handleKeyDown = (e) => {
191
+ if (e.key === "Enter" && !e.shiftKey) {
192
+ e.preventDefault();
193
+ innerRef.current?.blur();
194
+ focusNext();
195
+ }
196
+ };
197
+ return /* @__PURE__ */ jsxs("div", { className: clsx2({ "w-full": expanded }, containerClassName), children: [
198
+ label && /* @__PURE__ */ jsx2(Label, { ...label, htmlFor: id, className: clsx2("mb-1", label.className) }),
199
+ /* @__PURE__ */ jsx2(
200
+ "input",
201
+ {
202
+ ...restProps,
203
+ ref: innerRef,
204
+ value,
205
+ id,
206
+ type,
207
+ disabled,
208
+ className: clsx2(getInputClassName({ disabled }), className),
209
+ onKeyDown: allowEnterComplete ? handleKeyDown : void 0,
210
+ onBlur: (event) => {
211
+ onBlur?.(event);
212
+ if (onEditCompleted && allowEditCompleteOnBlur) {
213
+ onEditCompleted(event.target.value);
214
+ clearTimer();
215
+ }
216
+ },
217
+ onChange: (e) => {
218
+ const value2 = e.target.value;
219
+ if (onEditCompleted) {
220
+ restartTimer(() => {
221
+ if (innerRef.current) {
222
+ innerRef.current.blur();
223
+ if (!allowEditCompleteOnBlur) {
224
+ onEditCompleted(value2);
225
+ }
226
+ } else {
227
+ onEditCompleted(value2);
228
+ }
229
+ });
230
+ }
231
+ onChange(e);
232
+ onChangeText(value2);
233
+ }
234
+ }
235
+ )
236
+ ] });
237
+ });
238
+ var FormInput = forwardRef(function FormInput2({
239
+ id,
240
+ labelText,
241
+ errorText,
242
+ className,
243
+ labelClassName,
244
+ errorClassName,
245
+ containerClassName,
246
+ required,
247
+ disabled,
248
+ ...restProps
249
+ }, ref) {
250
+ const input = /* @__PURE__ */ jsx2(
251
+ "input",
252
+ {
253
+ ...restProps,
254
+ ref,
255
+ id,
256
+ disabled,
257
+ className: clsx2(
258
+ getInputClassName({ disabled, hasError: !!errorText }),
259
+ className
260
+ )
261
+ }
262
+ );
263
+ return /* @__PURE__ */ jsxs("div", { className: clsx2("flex flex-col gap-y-1", containerClassName), children: [
264
+ labelText && /* @__PURE__ */ jsxs("label", { htmlFor: id, className: clsx2("textstyle-label-md", labelClassName), children: [
265
+ labelText,
266
+ required && /* @__PURE__ */ jsx2("span", { className: "text-primary font-bold", children: "*" })
267
+ ] }),
268
+ input,
269
+ errorText && /* @__PURE__ */ jsx2("label", { htmlFor: id, className: clsx2("text-negative", errorClassName), children: errorText })
270
+ ] });
271
+ });
272
+
273
+ // src/localization/LanguageProvider.tsx
274
+ import { createContext, useContext, useEffect as useEffect5, useState as useState4 } from "react";
275
+
276
+ // src/hooks/useLocalStorage.ts
277
+ import { useCallback as useCallback2, useEffect as useEffect4, useState as useState3 } from "react";
278
+
279
+ // src/localization/util.ts
280
+ var languages = ["en", "de"];
281
+ var languagesLocalNames = {
282
+ en: "English",
283
+ de: "Deutsch"
284
+ };
285
+ var DEFAULT_LANGUAGE = "en";
286
+ var LanguageUtil = {
287
+ languages,
288
+ DEFAULT_LANGUAGE,
289
+ languagesLocalNames
290
+ };
291
+
292
+ // src/localization/LanguageProvider.tsx
293
+ import { jsx as jsx3 } from "react/jsx-runtime";
294
+ var LanguageContext = createContext({
295
+ language: LanguageUtil.DEFAULT_LANGUAGE,
296
+ setLanguage: (v) => v
297
+ });
298
+ var useLanguage = () => useContext(LanguageContext);
299
+
300
+ // src/localization/useTranslation.ts
301
+ var TranslationPluralCount = {
302
+ zero: 0,
303
+ one: 1,
304
+ two: 2,
305
+ few: 3,
306
+ many: 11,
307
+ other: -1
308
+ };
309
+ var useTranslation = (translations, overwriteTranslation = {}) => {
310
+ const { language: languageProp, translation: overwrite } = overwriteTranslation;
311
+ const { language: inferredLanguage } = useLanguage();
312
+ const usedLanguage = languageProp ?? inferredLanguage;
313
+ const usedTranslations = [...translations];
314
+ if (overwrite) {
315
+ usedTranslations.push(overwrite);
316
+ }
317
+ return (key, options) => {
318
+ const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options };
319
+ try {
320
+ for (let i = translations.length - 1; i >= 0; i--) {
321
+ const translation = translations[i];
322
+ const localizedTranslation = translation[usedLanguage];
323
+ if (!localizedTranslation) {
324
+ continue;
325
+ }
326
+ const value = localizedTranslation[key];
327
+ if (!value) {
328
+ continue;
329
+ }
330
+ let forProcessing;
331
+ if (typeof value !== "string") {
332
+ if (count === TranslationPluralCount.zero && value?.zero) {
333
+ forProcessing = value.zero;
334
+ } else if (count === TranslationPluralCount.one && value?.one) {
335
+ forProcessing = value.one;
336
+ } else if (count === TranslationPluralCount.two && value?.two) {
337
+ forProcessing = value.two;
338
+ } else if (TranslationPluralCount.few <= count && count < TranslationPluralCount.many && value?.few) {
339
+ forProcessing = value.few;
340
+ } else if (count > TranslationPluralCount.many && value?.many) {
341
+ forProcessing = value.many;
342
+ } else {
343
+ forProcessing = value.other;
344
+ }
345
+ } else {
346
+ forProcessing = value;
347
+ }
348
+ forProcessing = forProcessing.replace(/\{\{(\w+)}}/g, (_, placeholder) => {
349
+ return replacements[placeholder] ?? `{{key:${placeholder}}}`;
350
+ });
351
+ return forProcessing;
352
+ }
353
+ } catch (e) {
354
+ console.error(e);
355
+ }
356
+ return `{{${usedLanguage}:${key}}}`;
357
+ };
358
+ };
359
+
360
+ // src/localization/defaults/form.ts
361
+ var formTranslation = {
362
+ en: {
363
+ add: "Add",
364
+ all: "All",
365
+ apply: "Apply",
366
+ back: "Back",
367
+ cancel: "Cancel",
368
+ change: "Change",
369
+ clear: "Clear",
370
+ click: "Click",
371
+ clickToCopy: "Click to Copy",
372
+ close: "Close",
373
+ confirm: "Confirm",
374
+ copy: "Copy",
375
+ copied: "Copied",
376
+ create: "Create",
377
+ decline: "Decline",
378
+ delete: "Delete",
379
+ discard: "Discard",
380
+ discardChanges: "Discard Changes",
381
+ done: "Done",
382
+ edit: "Edit",
383
+ enterText: "Enter text here",
384
+ error: "Error",
385
+ exit: "Exit",
386
+ fieldRequiredError: "This field is required.",
387
+ invalidEmailError: "Please enter a valid email address.",
388
+ less: "Less",
389
+ loading: "Loading",
390
+ maxLengthError: "Maximum length exceeded.",
391
+ minLengthError: "Minimum length not met.",
392
+ more: "More",
393
+ next: "Next",
394
+ no: "No",
395
+ none: "None",
396
+ of: "of",
397
+ optional: "Optional",
398
+ pleaseWait: "Please wait...",
399
+ previous: "Previous",
400
+ remove: "Remove",
401
+ required: "Required",
402
+ reset: "Reset",
403
+ save: "Save",
404
+ saved: "Saved",
405
+ search: "Search",
406
+ select: "Select",
407
+ selectOption: "Select an option",
408
+ show: "Show",
409
+ showMore: "Show more",
410
+ showLess: "Show less",
411
+ submit: "Submit",
412
+ success: "Success",
413
+ update: "Update",
414
+ unsavedChanges: "Unsaved Changes",
415
+ unsavedChangesSaveQuestion: "Do you want to save your changes?",
416
+ yes: "Yes"
417
+ },
418
+ de: {
419
+ add: "Hinzuf\xFCgen",
420
+ all: "Alle",
421
+ apply: "Anwenden",
422
+ back: "Zur\xFCck",
423
+ cancel: "Abbrechen",
424
+ change: "\xC4ndern",
425
+ clear: "L\xF6schen",
426
+ click: "Klicken",
427
+ clickToCopy: "Zum kopieren klicken",
428
+ close: "Schlie\xDFen",
429
+ confirm: "Best\xE4tigen",
430
+ copy: "Kopieren",
431
+ copied: "Kopiert",
432
+ create: "Erstellen",
433
+ decline: "Ablehnen",
434
+ delete: "L\xF6schen",
435
+ discard: "Verwerfen",
436
+ discardChanges: "\xC4nderungen Verwerfen",
437
+ done: "Fertig",
438
+ edit: "Bearbeiten",
439
+ enterText: "Text hier eingeben",
440
+ error: "Fehler",
441
+ exit: "Beenden",
442
+ fieldRequiredError: "Dieses Feld ist erforderlich.",
443
+ invalidEmailError: "Bitte geben Sie eine g\xFCltige E-Mail-Adresse ein.",
444
+ less: "Weniger",
445
+ loading: "L\xE4dt",
446
+ maxLengthError: "Maximale L\xE4nge \xFCberschritten.",
447
+ minLengthError: "Mindestl\xE4nge nicht erreicht.",
448
+ more: "Mehr",
449
+ next: "Weiter",
450
+ no: "Nein",
451
+ none: "Nichts",
452
+ of: "von",
453
+ optional: "Optional",
454
+ pleaseWait: "Bitte warten...",
455
+ previous: "Vorherige",
456
+ remove: "Entfernen",
457
+ required: "Erforderlich",
458
+ reset: "Zur\xFCcksetzen",
459
+ save: "Speichern",
460
+ saved: "Gespeichert",
461
+ search: "Suche",
462
+ select: "Select",
463
+ selectOption: "Option ausw\xE4hlen",
464
+ show: "Anzeigen",
465
+ showMore: "Mehr anzeigen",
466
+ showLess: "Weniger anzeigen",
467
+ submit: "Abschicken",
468
+ success: "Erfolg",
469
+ update: "Update",
470
+ unsavedChanges: "Ungespeicherte \xC4nderungen",
471
+ unsavedChangesSaveQuestion: "M\xF6chtest du die \xC4nderungen speichern?",
472
+ yes: "Ja"
473
+ }
474
+ };
475
+
476
+ // src/components/user-action/Button.tsx
477
+ import { forwardRef as forwardRef2 } from "react";
478
+ import clsx3 from "clsx";
479
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
480
+ var ButtonColorUtil = {
481
+ solid: ["primary", "secondary", "tertiary", "positive", "warning", "negative", "neutral"],
482
+ text: ["primary", "negative", "neutral"],
483
+ outline: ["primary"]
484
+ };
485
+ var IconButtonUtil = {
486
+ icon: [...ButtonColorUtil.solid, "transparent"]
487
+ };
488
+ var paddingMapping = {
489
+ small: "btn-sm",
490
+ medium: "btn-md",
491
+ large: "btn-lg"
492
+ };
493
+ var iconPaddingMapping = {
494
+ tiny: "icon-btn-xs",
495
+ small: "icon-btn-sm",
496
+ medium: "icon-btn-md",
497
+ large: "icon-btn-lg"
498
+ };
499
+ var ButtonUtil = {
500
+ paddingMapping,
501
+ iconPaddingMapping
502
+ };
503
+ var SolidButton = forwardRef2(function SolidButton2({
504
+ children,
505
+ disabled = false,
506
+ color = "primary",
507
+ size = "medium",
508
+ startIcon,
509
+ endIcon,
510
+ onClick,
511
+ className,
512
+ ...restProps
513
+ }, ref) {
514
+ const colorClasses = {
515
+ primary: "bg-button-solid-primary-background text-button-solid-primary-text",
516
+ secondary: "bg-button-solid-secondary-background text-button-solid-secondary-text",
517
+ tertiary: "bg-button-solid-tertiary-background text-button-solid-tertiary-text",
518
+ positive: "bg-button-solid-positive-background text-button-solid-positive-text",
519
+ warning: "bg-button-solid-warning-background text-button-solid-warning-text",
520
+ negative: "bg-button-solid-negative-background text-button-solid-negative-text",
521
+ neutral: "bg-button-solid-neutral-background text-button-solid-neutral-text"
522
+ }[color];
523
+ const iconColorClasses = {
524
+ primary: "text-button-solid-primary-icon",
525
+ secondary: "text-button-solid-secondary-icon",
526
+ tertiary: "text-button-solid-tertiary-icon",
527
+ positive: "text-button-solid-positive-icon",
528
+ warning: "text-button-solid-warning-icon",
529
+ negative: "text-button-solid-negative-icon",
530
+ neutral: "text-button-solid-neutral-icon"
531
+ }[color];
532
+ return /* @__PURE__ */ jsxs2(
533
+ "button",
534
+ {
535
+ ref,
536
+ onClick,
537
+ disabled,
538
+ className: clsx3(
539
+ {
540
+ "text-disabled-text bg-disabled-background cursor-not-allowed": disabled,
541
+ [clsx3(colorClasses, "hover:brightness-90")]: !disabled
542
+ },
543
+ ButtonUtil.paddingMapping[size],
544
+ className
545
+ ),
546
+ ...restProps,
547
+ children: [
548
+ startIcon && /* @__PURE__ */ jsx4(
549
+ "span",
550
+ {
551
+ className: clsx3({
552
+ [iconColorClasses]: !disabled,
553
+ [`text-disabled-icon`]: disabled
554
+ }),
555
+ children: startIcon
556
+ }
557
+ ),
558
+ children,
559
+ endIcon && /* @__PURE__ */ jsx4(
560
+ "span",
561
+ {
562
+ className: clsx3({
563
+ [iconColorClasses]: !disabled,
564
+ [`text-disabled-icon`]: disabled
565
+ }),
566
+ children: endIcon
567
+ }
568
+ )
569
+ ]
570
+ }
571
+ );
572
+ });
573
+ var IconButton = ({
574
+ children,
575
+ disabled = false,
576
+ color = "primary",
577
+ size = "medium",
578
+ className,
579
+ ...restProps
580
+ }) => {
581
+ const colorClasses = {
582
+ primary: "bg-button-solid-primary-background text-button-solid-primary-text",
583
+ secondary: "bg-button-solid-secondary-background text-button-solid-secondary-text",
584
+ tertiary: "bg-button-solid-tertiary-background text-button-solid-tertiary-text",
585
+ positive: "bg-button-solid-positive-background text-button-solid-positive-text",
586
+ warning: "bg-button-solid-warning-background text-button-solid-warning-text",
587
+ negative: "bg-button-solid-negative-background text-button-solid-negative-text",
588
+ neutral: "bg-button-solid-neutral-background text-button-solid-neutral-text",
589
+ transparent: "bg-transparent"
590
+ }[color];
591
+ return /* @__PURE__ */ jsx4(
592
+ "button",
593
+ {
594
+ disabled,
595
+ className: clsx3(
596
+ {
597
+ "text-disabled-text bg-disabled-background cursor-not-allowed": disabled && color !== "transparent",
598
+ "text-disabled-text cursor-not-allowed opacity-70": disabled && color === "transparent",
599
+ "hover:bg-button-text-hover-background": !disabled && color === "transparent",
600
+ [clsx3(colorClasses, "hover:brightness-90")]: !disabled
601
+ },
602
+ ButtonUtil.iconPaddingMapping[size],
603
+ className
604
+ ),
605
+ ...restProps,
606
+ children
607
+ }
608
+ );
609
+ };
610
+
611
+ // src/components/user-action/SearchBar.tsx
612
+ import { Search } from "lucide-react";
613
+ import { clsx as clsx4 } from "clsx";
614
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
615
+ var SearchBar = ({
616
+ placeholder,
617
+ onSearch,
618
+ disableOnSearch,
619
+ containerClassName,
620
+ ...inputProps
621
+ }) => {
622
+ const translation = useTranslation([formTranslation]);
623
+ return /* @__PURE__ */ jsxs3("div", { className: clsx4("flex-row-2 justify-between items-center", containerClassName), children: [
624
+ /* @__PURE__ */ jsx5(
625
+ Input,
626
+ {
627
+ ...inputProps,
628
+ placeholder: placeholder ?? translation("search")
629
+ }
630
+ ),
631
+ onSearch && /* @__PURE__ */ jsx5(IconButton, { color: "neutral", disabled: disableOnSearch, onClick: onSearch, children: /* @__PURE__ */ jsx5(Search, { className: "w-full h-full" }) })
632
+ ] });
633
+ };
634
+ export {
635
+ SearchBar
636
+ };
637
+ //# sourceMappingURL=SearchBar.mjs.map