@helpwave/hightide 0.1.7 → 0.1.9

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 (263) hide show
  1. package/dist/components/branding/HelpwaveBadge.js +30 -8
  2. package/dist/components/branding/HelpwaveBadge.js.map +1 -1
  3. package/dist/components/branding/HelpwaveBadge.mjs +30 -8
  4. package/dist/components/branding/HelpwaveBadge.mjs.map +1 -1
  5. package/dist/components/date/DatePicker.d.mts +3 -4
  6. package/dist/components/date/DatePicker.d.ts +3 -4
  7. package/dist/components/date/DatePicker.js +135 -33
  8. package/dist/components/date/DatePicker.js.map +1 -1
  9. package/dist/components/date/DatePicker.mjs +135 -33
  10. package/dist/components/date/DatePicker.mjs.map +1 -1
  11. package/dist/components/date/DayPicker.d.mts +1 -1
  12. package/dist/components/date/DayPicker.d.ts +1 -1
  13. package/dist/components/date/DayPicker.js +23 -11
  14. package/dist/components/date/DayPicker.js.map +1 -1
  15. package/dist/components/date/DayPicker.mjs +23 -11
  16. package/dist/components/date/DayPicker.mjs.map +1 -1
  17. package/dist/components/date/TimeDisplay.d.mts +5 -19
  18. package/dist/components/date/TimeDisplay.d.ts +5 -19
  19. package/dist/components/date/TimeDisplay.js +121 -37
  20. package/dist/components/date/TimeDisplay.js.map +1 -1
  21. package/dist/components/date/TimeDisplay.mjs +121 -37
  22. package/dist/components/date/TimeDisplay.mjs.map +1 -1
  23. package/dist/components/date/YearMonthPicker.js +106 -22
  24. package/dist/components/date/YearMonthPicker.js.map +1 -1
  25. package/dist/components/date/YearMonthPicker.mjs +106 -22
  26. package/dist/components/date/YearMonthPicker.mjs.map +1 -1
  27. package/dist/components/dialogs/ConfirmDialog.d.mts +2 -5
  28. package/dist/components/dialogs/ConfirmDialog.d.ts +2 -5
  29. package/dist/components/dialogs/ConfirmDialog.js +157 -25
  30. package/dist/components/dialogs/ConfirmDialog.js.map +1 -1
  31. package/dist/components/dialogs/ConfirmDialog.mjs +157 -25
  32. package/dist/components/dialogs/ConfirmDialog.mjs.map +1 -1
  33. package/dist/components/icons-and-geometry/Avatar.js +2 -2
  34. package/dist/components/icons-and-geometry/Avatar.js.map +1 -1
  35. package/dist/components/icons-and-geometry/Avatar.mjs +2 -2
  36. package/dist/components/icons-and-geometry/Avatar.mjs.map +1 -1
  37. package/dist/components/layout-and-navigation/Carousel.d.mts +1 -1
  38. package/dist/components/layout-and-navigation/Carousel.d.ts +1 -1
  39. package/dist/components/layout-and-navigation/Carousel.js +86 -28
  40. package/dist/components/layout-and-navigation/Carousel.js.map +1 -1
  41. package/dist/components/layout-and-navigation/Carousel.mjs +86 -28
  42. package/dist/components/layout-and-navigation/Carousel.mjs.map +1 -1
  43. package/dist/components/layout-and-navigation/Expandable.d.mts +3 -0
  44. package/dist/components/layout-and-navigation/Expandable.d.ts +3 -0
  45. package/dist/components/layout-and-navigation/Expandable.js +4 -3
  46. package/dist/components/layout-and-navigation/Expandable.js.map +1 -1
  47. package/dist/components/layout-and-navigation/Expandable.mjs +4 -3
  48. package/dist/components/layout-and-navigation/Expandable.mjs.map +1 -1
  49. package/dist/components/layout-and-navigation/FAQSection.js +4 -3
  50. package/dist/components/layout-and-navigation/FAQSection.js.map +1 -1
  51. package/dist/components/layout-and-navigation/FAQSection.mjs +4 -3
  52. package/dist/components/layout-and-navigation/FAQSection.mjs.map +1 -1
  53. package/dist/components/layout-and-navigation/Overlay.d.mts +2 -3
  54. package/dist/components/layout-and-navigation/Overlay.d.ts +2 -3
  55. package/dist/components/layout-and-navigation/Overlay.js +152 -12
  56. package/dist/components/layout-and-navigation/Overlay.js.map +1 -1
  57. package/dist/components/layout-and-navigation/Overlay.mjs +152 -12
  58. package/dist/components/layout-and-navigation/Overlay.mjs.map +1 -1
  59. package/dist/components/layout-and-navigation/Pagination.d.mts +2 -3
  60. package/dist/components/layout-and-navigation/Pagination.d.ts +2 -3
  61. package/dist/components/layout-and-navigation/Pagination.js +145 -13
  62. package/dist/components/layout-and-navigation/Pagination.js.map +1 -1
  63. package/dist/components/layout-and-navigation/Pagination.mjs +145 -13
  64. package/dist/components/layout-and-navigation/Pagination.mjs.map +1 -1
  65. package/dist/components/layout-and-navigation/SearchableList.d.mts +10 -8
  66. package/dist/components/layout-and-navigation/SearchableList.d.ts +10 -8
  67. package/dist/components/layout-and-navigation/SearchableList.js +261 -30
  68. package/dist/components/layout-and-navigation/SearchableList.js.map +1 -1
  69. package/dist/components/layout-and-navigation/SearchableList.mjs +261 -30
  70. package/dist/components/layout-and-navigation/SearchableList.mjs.map +1 -1
  71. package/dist/components/layout-and-navigation/StepperBar.d.mts +2 -5
  72. package/dist/components/layout-and-navigation/StepperBar.d.ts +2 -5
  73. package/dist/components/layout-and-navigation/StepperBar.js +149 -19
  74. package/dist/components/layout-and-navigation/StepperBar.js.map +1 -1
  75. package/dist/components/layout-and-navigation/StepperBar.mjs +149 -19
  76. package/dist/components/layout-and-navigation/StepperBar.mjs.map +1 -1
  77. package/dist/components/layout-and-navigation/Table.js +146 -14
  78. package/dist/components/layout-and-navigation/Table.js.map +1 -1
  79. package/dist/components/layout-and-navigation/Table.mjs +146 -14
  80. package/dist/components/layout-and-navigation/Table.mjs.map +1 -1
  81. package/dist/components/layout-and-navigation/TextImage.d.mts +3 -4
  82. package/dist/components/layout-and-navigation/TextImage.d.ts +3 -4
  83. package/dist/components/layout-and-navigation/TextImage.js +153 -19
  84. package/dist/components/layout-and-navigation/TextImage.js.map +1 -1
  85. package/dist/components/layout-and-navigation/TextImage.mjs +153 -19
  86. package/dist/components/layout-and-navigation/TextImage.mjs.map +1 -1
  87. package/dist/components/layout-and-navigation/Tile.d.mts +10 -15
  88. package/dist/components/layout-and-navigation/Tile.d.ts +10 -15
  89. package/dist/components/layout-and-navigation/Tile.js +30 -8
  90. package/dist/components/layout-and-navigation/Tile.js.map +1 -1
  91. package/dist/components/layout-and-navigation/Tile.mjs +30 -8
  92. package/dist/components/layout-and-navigation/Tile.mjs.map +1 -1
  93. package/dist/components/loading-states/ErrorComponent.js +48 -8
  94. package/dist/components/loading-states/ErrorComponent.js.map +1 -1
  95. package/dist/components/loading-states/ErrorComponent.mjs +48 -8
  96. package/dist/components/loading-states/ErrorComponent.mjs.map +1 -1
  97. package/dist/components/loading-states/LoadingAndErrorComponent.d.mts +1 -0
  98. package/dist/components/loading-states/LoadingAndErrorComponent.d.ts +1 -0
  99. package/dist/components/loading-states/LoadingAndErrorComponent.js +147 -15
  100. package/dist/components/loading-states/LoadingAndErrorComponent.js.map +1 -1
  101. package/dist/components/loading-states/LoadingAndErrorComponent.mjs +147 -15
  102. package/dist/components/loading-states/LoadingAndErrorComponent.mjs.map +1 -1
  103. package/dist/components/loading-states/LoadingAnimation.d.mts +2 -3
  104. package/dist/components/loading-states/LoadingAnimation.d.ts +2 -3
  105. package/dist/components/loading-states/LoadingAnimation.js +145 -13
  106. package/dist/components/loading-states/LoadingAnimation.js.map +1 -1
  107. package/dist/components/loading-states/LoadingAnimation.mjs +145 -13
  108. package/dist/components/loading-states/LoadingAnimation.mjs.map +1 -1
  109. package/dist/components/loading-states/ProgressIndicator.js +2 -2
  110. package/dist/components/loading-states/ProgressIndicator.js.map +1 -1
  111. package/dist/components/loading-states/ProgressIndicator.mjs +2 -2
  112. package/dist/components/loading-states/ProgressIndicator.mjs.map +1 -1
  113. package/dist/components/modals/ConfirmModal.d.mts +2 -5
  114. package/dist/components/modals/ConfirmModal.d.ts +2 -5
  115. package/dist/components/modals/ConfirmModal.js +158 -28
  116. package/dist/components/modals/ConfirmModal.js.map +1 -1
  117. package/dist/components/modals/ConfirmModal.mjs +158 -28
  118. package/dist/components/modals/ConfirmModal.mjs.map +1 -1
  119. package/dist/components/modals/DiscardChangesModal.d.mts +2 -7
  120. package/dist/components/modals/DiscardChangesModal.d.ts +2 -7
  121. package/dist/components/modals/DiscardChangesModal.js +162 -48
  122. package/dist/components/modals/DiscardChangesModal.js.map +1 -1
  123. package/dist/components/modals/DiscardChangesModal.mjs +162 -48
  124. package/dist/components/modals/DiscardChangesModal.mjs.map +1 -1
  125. package/dist/components/modals/InputModal.d.mts +1 -0
  126. package/dist/components/modals/InputModal.d.ts +1 -0
  127. package/dist/components/modals/InputModal.js +158 -28
  128. package/dist/components/modals/InputModal.js.map +1 -1
  129. package/dist/components/modals/InputModal.mjs +158 -28
  130. package/dist/components/modals/InputModal.mjs.map +1 -1
  131. package/dist/components/modals/LanguageModal.d.mts +3 -2
  132. package/dist/components/modals/LanguageModal.d.ts +3 -2
  133. package/dist/components/modals/LanguageModal.js +538 -166
  134. package/dist/components/modals/LanguageModal.js.map +1 -1
  135. package/dist/components/modals/LanguageModal.mjs +537 -165
  136. package/dist/components/modals/LanguageModal.mjs.map +1 -1
  137. package/dist/components/modals/ThemeModal.d.mts +5 -5
  138. package/dist/components/modals/ThemeModal.d.ts +5 -5
  139. package/dist/components/modals/ThemeModal.js +547 -176
  140. package/dist/components/modals/ThemeModal.js.map +1 -1
  141. package/dist/components/modals/ThemeModal.mjs +544 -173
  142. package/dist/components/modals/ThemeModal.mjs.map +1 -1
  143. package/dist/components/properties/CheckboxProperty.d.mts +3 -5
  144. package/dist/components/properties/CheckboxProperty.d.ts +3 -5
  145. package/dist/components/properties/CheckboxProperty.js +148 -26
  146. package/dist/components/properties/CheckboxProperty.js.map +1 -1
  147. package/dist/components/properties/CheckboxProperty.mjs +148 -26
  148. package/dist/components/properties/CheckboxProperty.mjs.map +1 -1
  149. package/dist/components/properties/DateProperty.d.mts +1 -0
  150. package/dist/components/properties/DateProperty.d.ts +1 -0
  151. package/dist/components/properties/DateProperty.js +146 -14
  152. package/dist/components/properties/DateProperty.js.map +1 -1
  153. package/dist/components/properties/DateProperty.mjs +146 -14
  154. package/dist/components/properties/DateProperty.mjs.map +1 -1
  155. package/dist/components/properties/MultiSelectProperty.d.mts +5 -5
  156. package/dist/components/properties/MultiSelectProperty.d.ts +5 -5
  157. package/dist/components/properties/MultiSelectProperty.js +626 -456
  158. package/dist/components/properties/MultiSelectProperty.js.map +1 -1
  159. package/dist/components/properties/MultiSelectProperty.mjs +622 -452
  160. package/dist/components/properties/MultiSelectProperty.mjs.map +1 -1
  161. package/dist/components/properties/NumberProperty.d.mts +1 -0
  162. package/dist/components/properties/NumberProperty.d.ts +1 -0
  163. package/dist/components/properties/NumberProperty.js +148 -16
  164. package/dist/components/properties/NumberProperty.js.map +1 -1
  165. package/dist/components/properties/NumberProperty.mjs +148 -16
  166. package/dist/components/properties/NumberProperty.mjs.map +1 -1
  167. package/dist/components/properties/PropertyBase.d.mts +2 -3
  168. package/dist/components/properties/PropertyBase.d.ts +2 -3
  169. package/dist/components/properties/PropertyBase.js +146 -14
  170. package/dist/components/properties/PropertyBase.js.map +1 -1
  171. package/dist/components/properties/PropertyBase.mjs +146 -14
  172. package/dist/components/properties/PropertyBase.mjs.map +1 -1
  173. package/dist/components/properties/SelectProperty.d.mts +5 -6
  174. package/dist/components/properties/SelectProperty.d.ts +5 -6
  175. package/dist/components/properties/SelectProperty.js +542 -279
  176. package/dist/components/properties/SelectProperty.js.map +1 -1
  177. package/dist/components/properties/SelectProperty.mjs +542 -279
  178. package/dist/components/properties/SelectProperty.mjs.map +1 -1
  179. package/dist/components/properties/TextProperty.d.mts +2 -1
  180. package/dist/components/properties/TextProperty.d.ts +2 -1
  181. package/dist/components/properties/TextProperty.js +150 -18
  182. package/dist/components/properties/TextProperty.js.map +1 -1
  183. package/dist/components/properties/TextProperty.mjs +150 -18
  184. package/dist/components/properties/TextProperty.mjs.map +1 -1
  185. package/dist/components/user-action/DateAndTimePicker.d.mts +4 -20
  186. package/dist/components/user-action/DateAndTimePicker.d.ts +4 -20
  187. package/dist/components/user-action/DateAndTimePicker.js +233 -71
  188. package/dist/components/user-action/DateAndTimePicker.js.map +1 -1
  189. package/dist/components/user-action/DateAndTimePicker.mjs +233 -71
  190. package/dist/components/user-action/DateAndTimePicker.mjs.map +1 -1
  191. package/dist/components/user-action/Menu.d.mts +14 -8
  192. package/dist/components/user-action/Menu.d.ts +14 -8
  193. package/dist/components/user-action/Menu.js +32 -11
  194. package/dist/components/user-action/Menu.js.map +1 -1
  195. package/dist/components/user-action/Menu.mjs +32 -11
  196. package/dist/components/user-action/Menu.mjs.map +1 -1
  197. package/dist/components/user-action/MultiSelect.d.mts +13 -23
  198. package/dist/components/user-action/MultiSelect.d.ts +13 -23
  199. package/dist/components/user-action/MultiSelect.js +632 -325
  200. package/dist/components/user-action/MultiSelect.js.map +1 -1
  201. package/dist/components/user-action/MultiSelect.mjs +629 -323
  202. package/dist/components/user-action/MultiSelect.mjs.map +1 -1
  203. package/dist/components/user-action/Select.d.mts +5 -18
  204. package/dist/components/user-action/Select.d.ts +5 -18
  205. package/dist/components/user-action/Select.js +447 -113
  206. package/dist/components/user-action/Select.js.map +1 -1
  207. package/dist/components/user-action/Select.mjs +442 -107
  208. package/dist/components/user-action/Select.mjs.map +1 -1
  209. package/dist/components/user-action/Tooltip.js +2 -2
  210. package/dist/components/user-action/Tooltip.js.map +1 -1
  211. package/dist/components/user-action/Tooltip.mjs +2 -2
  212. package/dist/components/user-action/Tooltip.mjs.map +1 -1
  213. package/dist/css/globals.css +224 -207
  214. package/dist/css/uncompiled/globals.css +138 -74
  215. package/dist/hooks/useSearch.d.mts +17 -0
  216. package/dist/hooks/useSearch.d.ts +17 -0
  217. package/dist/hooks/useSearch.js +66 -0
  218. package/dist/hooks/useSearch.js.map +1 -0
  219. package/dist/hooks/useSearch.mjs +42 -0
  220. package/dist/hooks/useSearch.mjs.map +1 -0
  221. package/dist/index.d.mts +10 -6
  222. package/dist/index.d.ts +10 -6
  223. package/dist/index.js +882 -758
  224. package/dist/index.js.map +1 -1
  225. package/dist/index.mjs +836 -717
  226. package/dist/index.mjs.map +1 -1
  227. package/dist/localization/defaults/form.d.mts +54 -0
  228. package/dist/localization/defaults/form.d.ts +54 -0
  229. package/dist/localization/defaults/form.js +127 -0
  230. package/dist/localization/defaults/form.js.map +1 -0
  231. package/dist/localization/defaults/form.mjs +103 -0
  232. package/dist/localization/defaults/form.mjs.map +1 -0
  233. package/dist/localization/defaults/time.d.mts +39 -0
  234. package/dist/localization/defaults/time.d.ts +39 -0
  235. package/dist/localization/defaults/time.js +101 -0
  236. package/dist/localization/defaults/time.js.map +1 -0
  237. package/dist/localization/defaults/time.mjs +76 -0
  238. package/dist/localization/defaults/time.mjs.map +1 -0
  239. package/dist/localization/useTranslation.d.mts +30 -6
  240. package/dist/localization/useTranslation.d.ts +30 -6
  241. package/dist/localization/useTranslation.js +46 -6
  242. package/dist/localization/useTranslation.js.map +1 -1
  243. package/dist/localization/useTranslation.mjs +46 -6
  244. package/dist/localization/useTranslation.mjs.map +1 -1
  245. package/dist/theming/useTheme.d.mts +4 -2
  246. package/dist/theming/useTheme.d.ts +4 -2
  247. package/dist/theming/useTheme.js +10 -2
  248. package/dist/theming/useTheme.js.map +1 -1
  249. package/dist/theming/useTheme.mjs +10 -2
  250. package/dist/theming/useTheme.mjs.map +1 -1
  251. package/dist/util/PropsWithFunctionChildren.d.mts +14 -0
  252. package/dist/util/PropsWithFunctionChildren.d.ts +14 -0
  253. package/dist/util/PropsWithFunctionChildren.js +38 -0
  254. package/dist/util/PropsWithFunctionChildren.js.map +1 -0
  255. package/dist/util/PropsWithFunctionChildren.mjs +14 -0
  256. package/dist/util/PropsWithFunctionChildren.mjs.map +1 -0
  257. package/dist/util/simpleSearch.d.mts +2 -2
  258. package/dist/util/simpleSearch.d.ts +2 -2
  259. package/dist/util/simpleSearch.js +4 -1
  260. package/dist/util/simpleSearch.js.map +1 -1
  261. package/dist/util/simpleSearch.mjs +4 -1
  262. package/dist/util/simpleSearch.mjs.map +1 -1
  263. package/package.json +1 -2
@@ -1,8 +1,7 @@
1
1
  // src/components/user-action/Select.tsx
2
- import { Menu } from "@headlessui/react";
3
- import { ChevronDown, ChevronUp, Search } from "lucide-react";
4
- import { useEffect as useEffect3, useState as useState3 } from "react";
5
- import clsx3 from "clsx";
2
+ import { ChevronDown, ChevronUp } from "lucide-react";
3
+ import { useEffect as useEffect7, useRef as useRef2, useState as useState6 } from "react";
4
+ import clsx6 from "clsx";
6
5
 
7
6
  // src/components/user-action/Label.tsx
8
7
  import clsx from "clsx";
@@ -22,23 +21,98 @@ var Label = ({
22
21
  return /* @__PURE__ */ jsx("label", { ...props, className: clsx(styleMapping[labelType], className), children: children ? children : name });
23
22
  };
24
23
 
25
- // src/util/simpleSearch.ts
26
- var MultiSearchWithMapping = (search, objects, mapping) => {
27
- return objects.filter((object) => {
28
- const mappedSearchKeywords = mapping(object).map((value) => value.toLowerCase().trim());
29
- return !!mappedSearchKeywords.find((value) => value.includes(search.toLowerCase().trim()));
30
- });
24
+ // src/components/layout-and-navigation/SearchableList.tsx
25
+ import { Search } from "lucide-react";
26
+ import clsx4 from "clsx";
27
+
28
+ // src/localization/LanguageProvider.tsx
29
+ import { createContext, useContext, useEffect as useEffect2, useState as useState2 } from "react";
30
+
31
+ // src/hooks/useLocalStorage.ts
32
+ import { useCallback, useEffect, useState } from "react";
33
+
34
+ // src/localization/util.ts
35
+ var languages = ["en", "de"];
36
+ var languagesLocalNames = {
37
+ en: "English",
38
+ de: "Deutsch"
39
+ };
40
+ var DEFAULT_LANGUAGE = "en";
41
+ var LanguageUtil = {
42
+ languages,
43
+ DEFAULT_LANGUAGE,
44
+ languagesLocalNames
45
+ };
46
+
47
+ // src/localization/LanguageProvider.tsx
48
+ import { jsx as jsx2 } from "react/jsx-runtime";
49
+ var LanguageContext = createContext({
50
+ language: LanguageUtil.DEFAULT_LANGUAGE,
51
+ setLanguage: (v) => v
52
+ });
53
+ var useLanguage = () => useContext(LanguageContext);
54
+
55
+ // src/localization/useTranslation.ts
56
+ var useTranslation = (translations, overwriteTranslation = {}) => {
57
+ const { language: languageProp, translation: overwrite } = overwriteTranslation;
58
+ const { language: inferredLanguage } = useLanguage();
59
+ const usedLanguage = languageProp ?? inferredLanguage;
60
+ const usedTranslations = [...translations];
61
+ if (overwrite) {
62
+ usedTranslations.push(overwrite);
63
+ }
64
+ return (key, options) => {
65
+ const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options };
66
+ try {
67
+ for (let i = translations.length - 1; i >= 0; i--) {
68
+ const translation = translations[i];
69
+ const localizedTranslation = translation[usedLanguage];
70
+ if (!localizedTranslation) {
71
+ continue;
72
+ }
73
+ const value = localizedTranslation[key];
74
+ if (!value) {
75
+ continue;
76
+ }
77
+ let forProcessing;
78
+ if (typeof value !== "string") {
79
+ if (count <= 0 && value?.zero) {
80
+ forProcessing = value.zero;
81
+ } else if (count === 1 && value?.one) {
82
+ forProcessing = value.one;
83
+ } else if (count === 2 && value?.two) {
84
+ forProcessing = value.two;
85
+ } else if (count <= 10 && value?.few) {
86
+ forProcessing = value.few;
87
+ } else if (count > 10 && value?.many) {
88
+ forProcessing = value.many;
89
+ } else {
90
+ forProcessing = value.other;
91
+ }
92
+ } else {
93
+ forProcessing = value;
94
+ }
95
+ forProcessing = forProcessing.replace(/\{\{(\w+)}}/g, (_, placeholder) => {
96
+ return replacements[placeholder] ?? `{{${placeholder}}}`;
97
+ });
98
+ return forProcessing;
99
+ }
100
+ } catch (e) {
101
+ console.error(e);
102
+ }
103
+ return `{{${usedLanguage}:${key}}}`;
104
+ };
31
105
  };
32
106
 
33
107
  // src/components/user-action/Input.tsx
34
- import { forwardRef, useEffect as useEffect2, useRef, useState as useState2 } from "react";
108
+ import { forwardRef, useEffect as useEffect4, useRef, useState as useState4 } from "react";
35
109
  import clsx2 from "clsx";
36
110
 
37
111
  // src/hooks/useSaveDelay.ts
38
- import { useEffect, useState } from "react";
112
+ import { useEffect as useEffect3, useState as useState3 } from "react";
39
113
  function useSaveDelay(setNotificationStatus, delay) {
40
- const [updateTimer, setUpdateTimer] = useState(void 0);
41
- const [notificationTimer, setNotificationTimer] = useState(void 0);
114
+ const [updateTimer, setUpdateTimer] = useState3(void 0);
115
+ const [notificationTimer, setNotificationTimer] = useState3(void 0);
42
116
  const restartTimer = (onSave) => {
43
117
  clearTimeout(updateTimer);
44
118
  setUpdateTimer(setTimeout(() => {
@@ -65,7 +139,7 @@ function useSaveDelay(setNotificationStatus, delay) {
65
139
  setNotificationStatus(false);
66
140
  }
67
141
  };
68
- useEffect(() => {
142
+ useEffect3(() => {
69
143
  return () => {
70
144
  clearTimeout(updateTimer);
71
145
  clearTimeout(notificationTimer);
@@ -78,7 +152,7 @@ function useSaveDelay(setNotificationStatus, delay) {
78
152
  var noop = () => void 0;
79
153
 
80
154
  // src/components/user-action/Input.tsx
81
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
155
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
82
156
  var Input = ({
83
157
  id,
84
158
  type = "text",
@@ -99,14 +173,14 @@ var Input = ({
99
173
  clearUpdateTimer
100
174
  } = useSaveDelay(() => void 0, 3e3);
101
175
  const ref = useRef(null);
102
- useEffect2(() => {
176
+ useEffect4(() => {
103
177
  if (autoFocus) {
104
178
  ref.current?.focus();
105
179
  }
106
180
  }, [autoFocus]);
107
181
  return /* @__PURE__ */ jsxs("div", { className: clsx2({ "w-full": expanded }, containerClassName), children: [
108
- label && /* @__PURE__ */ jsx2(Label, { ...label, htmlFor: id, className: clsx2("mb-1", label.className) }),
109
- /* @__PURE__ */ jsx2(
182
+ label && /* @__PURE__ */ jsx3(Label, { ...label, htmlFor: id, className: clsx2("mb-1", label.className) }),
183
+ /* @__PURE__ */ jsx3(
110
184
  "input",
111
185
  {
112
186
  ref,
@@ -150,7 +224,7 @@ var FormInput = forwardRef(function FormInput2({
150
224
  required,
151
225
  ...restProps
152
226
  }, ref) {
153
- const input = /* @__PURE__ */ jsx2(
227
+ const input = /* @__PURE__ */ jsx3(
154
228
  "input",
155
229
  {
156
230
  ref,
@@ -168,103 +242,386 @@ var FormInput = forwardRef(function FormInput2({
168
242
  return /* @__PURE__ */ jsxs("div", { className: clsx2("flex flex-col gap-y-1", containerClassName), children: [
169
243
  labelText && /* @__PURE__ */ jsxs("label", { htmlFor: id, className: clsx2("textstyle-label-md", labelClassName), children: [
170
244
  labelText,
171
- required && /* @__PURE__ */ jsx2("span", { className: "text-primary font-bold", children: "*" })
245
+ required && /* @__PURE__ */ jsx3("span", { className: "text-primary font-bold", children: "*" })
172
246
  ] }),
173
247
  input,
174
- errorText && /* @__PURE__ */ jsx2("label", { htmlFor: id, className: clsx2("text-negative", errorClassName), children: errorText })
248
+ errorText && /* @__PURE__ */ jsx3("label", { htmlFor: id, className: clsx2("text-negative", errorClassName), children: errorText })
175
249
  ] });
176
250
  });
177
251
 
252
+ // src/components/user-action/Button.tsx
253
+ import clsx3 from "clsx";
254
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
255
+ var paddingMapping = {
256
+ small: "btn-sm",
257
+ medium: "btn-md",
258
+ large: "btn-lg"
259
+ };
260
+ var iconPaddingMapping = {
261
+ small: "icon-btn-sm",
262
+ medium: "icon-btn-md",
263
+ large: "icon-btn-lg"
264
+ };
265
+ var ButtonUtil = {
266
+ paddingMapping,
267
+ iconPaddingMapping
268
+ };
269
+ var IconButton = ({
270
+ children,
271
+ disabled = false,
272
+ color = "primary",
273
+ size = "medium",
274
+ onClick,
275
+ className,
276
+ ...restProps
277
+ }) => {
278
+ const colorClasses = {
279
+ primary: "bg-button-solid-primary-background text-button-solid-primary-text",
280
+ secondary: "bg-button-solid-secondary-background text-button-solid-secondary-text",
281
+ tertiary: "bg-button-solid-tertiary-background text-button-solid-tertiary-text",
282
+ positive: "bg-button-solid-positive-background text-button-solid-positive-text",
283
+ warning: "bg-button-solid-warning-background text-button-solid-warning-text",
284
+ negative: "bg-button-solid-negative-background text-button-solid-negative-text",
285
+ neutral: "bg-button-solid-neutral-background text-button-solid-neutral-text"
286
+ }[color];
287
+ return /* @__PURE__ */ jsx4(
288
+ "button",
289
+ {
290
+ onClick: disabled ? void 0 : onClick,
291
+ disabled: disabled || onClick === void 0,
292
+ className: clsx3(
293
+ {
294
+ "text-disabled-text bg-disabled-background cursor-not-allowed": disabled,
295
+ [clsx3(colorClasses, "hover:brightness-90")]: !disabled
296
+ },
297
+ ButtonUtil.iconPaddingMapping[size],
298
+ className
299
+ ),
300
+ ...restProps,
301
+ children
302
+ }
303
+ );
304
+ };
305
+
306
+ // src/hooks/useSearch.ts
307
+ import { useEffect as useEffect5, useMemo, useState as useState5 } from "react";
308
+
309
+ // src/util/simpleSearch.ts
310
+ var MultiSearchWithMapping = (search, objects, mapping) => {
311
+ return objects.filter((object) => {
312
+ const mappedSearchKeywords = mapping(object)?.map((value) => value.toLowerCase().trim());
313
+ if (!mappedSearchKeywords) {
314
+ return true;
315
+ }
316
+ return !!mappedSearchKeywords.find((value) => value.includes(search.toLowerCase().trim()));
317
+ });
318
+ };
319
+
320
+ // src/hooks/useSearch.ts
321
+ var useSearch = ({
322
+ list,
323
+ initialSearch,
324
+ searchMapping
325
+ }) => {
326
+ const [items, setItems] = useState5(list);
327
+ const [search, setSearch] = useState5(initialSearch);
328
+ useEffect5(() => {
329
+ setItems(list);
330
+ }, [list]);
331
+ const result = useMemo(
332
+ () => MultiSearchWithMapping(search, items, searchMapping),
333
+ [search, items, searchMapping]
334
+ );
335
+ return {
336
+ result,
337
+ hasResult: result.length > 0,
338
+ allItems: items,
339
+ setItems,
340
+ search,
341
+ setSearch
342
+ };
343
+ };
344
+
345
+ // src/localization/defaults/form.ts
346
+ var formTranslation = {
347
+ en: {
348
+ all: "All",
349
+ back: "Back",
350
+ cancel: "Cancel",
351
+ change: "Change",
352
+ clear: "Clear",
353
+ close: "Close",
354
+ confirm: "Confirm",
355
+ decline: "Decline",
356
+ delete: "Delete",
357
+ discard: "Discard",
358
+ discardChanges: "Discard Changes",
359
+ done: "Done",
360
+ edit: "Edit",
361
+ enterText: "Enter text here",
362
+ error: "Error",
363
+ exit: "Exit",
364
+ fieldRequiredError: "This field is required.",
365
+ invalidEmailError: "Please enter a valid email address.",
366
+ less: "Less",
367
+ loading: "Loading",
368
+ maxLengthError: "Maximum length exceeded.",
369
+ minLengthError: "Minimum length not met.",
370
+ more: "More",
371
+ next: "Next",
372
+ no: "No",
373
+ none: "None",
374
+ of: "of",
375
+ optional: "Optional",
376
+ pleaseWait: "Please wait...",
377
+ previous: "Previous",
378
+ remove: "Remove",
379
+ required: "Required",
380
+ reset: "Reset",
381
+ save: "Save",
382
+ search: "Search",
383
+ select: "Select",
384
+ selectOption: "Select an option",
385
+ show: "Show",
386
+ showMore: "Show more",
387
+ showLess: "Show less",
388
+ submit: "Submit",
389
+ success: "Success",
390
+ update: "Update",
391
+ unsavedChanges: "Unsaved Changes",
392
+ unsavedChangesSaveQuestion: "Do you want to save your changes?",
393
+ yes: "Yes"
394
+ },
395
+ de: {
396
+ all: "Alle",
397
+ back: "Zur\xFCck",
398
+ cancel: "Abbrechen",
399
+ change: "\xC4ndern",
400
+ clear: "L\xF6schen",
401
+ close: "Schlie\xDFen",
402
+ confirm: "Best\xE4tigen",
403
+ decline: "Ablehnen",
404
+ delete: "L\xF6schen",
405
+ discard: "Verwerfen",
406
+ discardChanges: "\xC4nderungen Verwerfen",
407
+ done: "Fertig",
408
+ edit: "Bearbeiten",
409
+ enterText: "Text hier eingeben",
410
+ error: "Fehler",
411
+ exit: "Beenden",
412
+ fieldRequiredError: "Dieses Feld ist erforderlich.",
413
+ invalidEmailError: "Bitte geben Sie eine g\xFCltige E-Mail-Adresse ein.",
414
+ less: "Weniger",
415
+ loading: "L\xE4dt",
416
+ maxLengthError: "Maximale L\xE4nge \xFCberschritten.",
417
+ minLengthError: "Mindestl\xE4nge nicht erreicht.",
418
+ more: "Mehr",
419
+ next: "Weiter",
420
+ no: "Nein",
421
+ none: "Nichts",
422
+ of: "von",
423
+ optional: "Optional",
424
+ pleaseWait: "Bitte warten...",
425
+ previous: "Vorherige",
426
+ remove: "Entfernen",
427
+ required: "Erforderlich",
428
+ reset: "Zur\xFCcksetzen",
429
+ save: "Speichern",
430
+ search: "Suche",
431
+ select: "Select",
432
+ selectOption: "Option ausw\xE4hlen",
433
+ show: "Anzeigen",
434
+ showMore: "Mehr anzeigen",
435
+ showLess: "Weniger anzeigen",
436
+ submit: "Abschicken",
437
+ success: "Erfolg",
438
+ update: "Update",
439
+ unsavedChanges: "Ungespeicherte \xC4nderungen",
440
+ unsavedChangesSaveQuestion: "M\xF6chtest du die \xC4nderungen speichern?",
441
+ yes: "Ja"
442
+ }
443
+ };
444
+
445
+ // src/components/layout-and-navigation/SearchableList.tsx
446
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
447
+ var defaultSearchableListTranslation = {
448
+ en: {
449
+ nothingFound: "Nothing found"
450
+ },
451
+ de: {
452
+ nothingFound: "Nichts gefunden"
453
+ }
454
+ };
455
+ var SearchableList = ({
456
+ overwriteTranslation,
457
+ list,
458
+ initialSearch = "",
459
+ searchMapping,
460
+ autoFocus,
461
+ minimumItemsForSearch = 6,
462
+ itemMapper,
463
+ className,
464
+ resultListClassName
465
+ }) => {
466
+ const translation = useTranslation([defaultSearchableListTranslation, formTranslation], overwriteTranslation);
467
+ const { result, hasResult, search, setSearch } = useSearch({ list, initialSearch, searchMapping });
468
+ return /* @__PURE__ */ jsxs3("div", { className: clsx4("col gap-y-2", className), children: [
469
+ list.length > minimumItemsForSearch && /* @__PURE__ */ jsxs3("div", { className: "row justify-between gap-x-4 items-center", children: [
470
+ /* @__PURE__ */ jsx5(
471
+ Input,
472
+ {
473
+ value: search,
474
+ onChangeText: setSearch,
475
+ placeholder: translation("search"),
476
+ autoFocus,
477
+ className: "w-full"
478
+ }
479
+ ),
480
+ /* @__PURE__ */ jsx5(IconButton, { color: "neutral", disabled: search.length === 0, children: /* @__PURE__ */ jsx5(Search, { className: "w-full h-full" }) })
481
+ ] }),
482
+ hasResult ? /* @__PURE__ */ jsx5("div", { className: clsx4("col gap-y-1", resultListClassName), children: result.map(itemMapper) }) : /* @__PURE__ */ jsx5("div", { className: "row text-description py-2 px-2", children: translation("nothingFound") })
483
+ ] });
484
+ };
485
+
486
+ // src/components/layout-and-navigation/Tile.tsx
487
+ import clsx5 from "clsx";
488
+ import { Check } from "lucide-react";
489
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
490
+ var Tile = ({
491
+ title,
492
+ description,
493
+ onClick,
494
+ isSelected = false,
495
+ isDisabled = false,
496
+ prefix,
497
+ suffix,
498
+ normalClassName = "hover:bg-primary/40 cursor-pointer",
499
+ selectedClassName = " bg-primary/20",
500
+ disabledClassName = "text-disabled-text bg-disabled-background cursor-not-allowed",
501
+ className
502
+ }) => {
503
+ return /* @__PURE__ */ jsxs4(
504
+ "div",
505
+ {
506
+ className: clsx5(
507
+ "row gap-x-2 w-full items-center",
508
+ {
509
+ [normalClassName]: !!onClick && !isDisabled,
510
+ [selectedClassName]: isSelected && !isDisabled,
511
+ [disabledClassName]: isDisabled
512
+ },
513
+ className
514
+ ),
515
+ onClick: isDisabled ? void 0 : onClick,
516
+ children: [
517
+ prefix ?? (isSelected ? /* @__PURE__ */ jsx6(Check, { size: 24 }) : void 0),
518
+ /* @__PURE__ */ jsxs4("div", { className: "col gap-y-0 w-full", children: [
519
+ /* @__PURE__ */ jsx6("h4", { className: clsx5(title.className ?? "textstyle-title-normal"), children: title.value }),
520
+ !!description && /* @__PURE__ */ jsx6("span", { className: clsx5(description.className ?? "textstyle-description"), children: description.value })
521
+ ] }),
522
+ suffix
523
+ ]
524
+ }
525
+ );
526
+ };
527
+
528
+ // src/hooks/useOutsideClick.ts
529
+ import { useEffect as useEffect6 } from "react";
530
+ var useOutsideClick = (refs, handler) => {
531
+ useEffect6(() => {
532
+ const listener = (event) => {
533
+ if (event.target === null) return;
534
+ if (refs.some((ref) => !ref.current || ref.current.contains(event.target))) {
535
+ return;
536
+ }
537
+ handler();
538
+ };
539
+ document.addEventListener("mousedown", listener);
540
+ document.addEventListener("touchstart", listener);
541
+ return () => {
542
+ document.removeEventListener("mousedown", listener);
543
+ document.removeEventListener("touchstart", listener);
544
+ };
545
+ }, [refs, handler]);
546
+ };
547
+
178
548
  // src/components/user-action/Select.tsx
179
- import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
549
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
180
550
  var Select = ({
181
551
  value,
182
552
  label,
183
553
  options,
184
554
  onChange,
185
- isHidingCurrentValue = true,
186
555
  hintText = "",
187
- showDisabledOptions = true,
188
556
  isDisabled,
557
+ isSearchEnabled = false,
189
558
  className,
190
- textColor = "text-menu-text",
191
- additionalItems,
192
559
  selectedDisplayOverwrite
193
560
  }) => {
194
- let filteredOptions = isHidingCurrentValue ? options.filter((option) => option.value !== value) : options;
195
- if (!showDisabledOptions) {
196
- filteredOptions = filteredOptions.filter((value2) => !value2.disabled);
197
- }
561
+ const triggerRef = useRef2(null);
562
+ const menuRef = useRef2(null);
563
+ const [isOpen, setIsOpen] = useState6(false);
564
+ useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
198
565
  const selectedOption = options.find((option) => option.value === value);
199
566
  if (value !== void 0 && selectedOption === void 0 && selectedDisplayOverwrite === void 0) {
200
567
  console.warn("The selected value is not found in the options list. This might be an error on your part or default behavior if it is complex data type on which === does not work. In case of the latter use selectedDisplayOverwrite to set your selected text or component");
201
568
  }
202
- const borderColor = "border-menu-border";
203
- return /* @__PURE__ */ jsxs2("div", { className: clsx3(className), children: [
204
- label && /* @__PURE__ */ jsx3(Label, { ...label, labelType: label.labelType ?? "labelBig", className: clsx3("mb-1", label.className) }),
205
- /* @__PURE__ */ jsx3(Menu, { as: "div", className: "relative text-menu-text", children: ({ open }) => /* @__PURE__ */ jsxs2(Fragment, { children: [
206
- /* @__PURE__ */ jsxs2(
207
- Menu.Button,
569
+ const isShowingHint = !selectedDisplayOverwrite && !selectedOption?.label;
570
+ return /* @__PURE__ */ jsxs5("div", { className: clsx6(className), children: [
571
+ label && /* @__PURE__ */ jsx7(Label, { ...label, labelType: label.labelType ?? "labelBig", className: clsx6("mb-1", label.className) }),
572
+ /* @__PURE__ */ jsxs5("div", { className: "relative", children: [
573
+ /* @__PURE__ */ jsxs5(
574
+ "button",
208
575
  {
209
- className: clsx3(
210
- "inline-flex w-full justify-between items-center rounded-t-lg border-2 px-4 py-2 font-medium bg-menu-background text-menu-text",
211
- textColor,
212
- borderColor,
576
+ ref: triggerRef,
577
+ className: clsx6(
578
+ "btn-md justify-between w-full border-2",
213
579
  {
214
580
  "rounded-b-lg": !open,
215
- "hover:border-primary": !isDisabled,
216
- "bg-disabled-background cursor-not-allowed text-disabled": isDisabled
581
+ "bg-menu-background border-menu-border hover:border-primary": !isDisabled,
582
+ "bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed": isDisabled
217
583
  }
218
584
  ),
585
+ onClick: () => setIsOpen(!isOpen),
219
586
  disabled: isDisabled,
220
587
  children: [
221
- /* @__PURE__ */ jsx3("span", { children: selectedDisplayOverwrite ?? selectedOption?.label ?? hintText }),
222
- open ? /* @__PURE__ */ jsx3(ChevronUp, {}) : /* @__PURE__ */ jsx3(ChevronDown, {})
588
+ !isShowingHint && /* @__PURE__ */ jsx7("span", { className: "font-semibold text-menu-text", children: selectedDisplayOverwrite ?? selectedOption?.label }),
589
+ isShowingHint && /* @__PURE__ */ jsx7("span", { className: "textstyle-description", children: hintText }),
590
+ isOpen ? /* @__PURE__ */ jsx7(ChevronUp, {}) : /* @__PURE__ */ jsx7(ChevronDown, {})
223
591
  ]
224
592
  }
225
593
  ),
226
- /* @__PURE__ */ jsxs2(
227
- Menu.Items,
594
+ isOpen && /* @__PURE__ */ jsx7(
595
+ "div",
228
596
  {
229
- className: "absolute w-full z-10 rounded-b-lg bg-menu-background text-menu-text shadow-lg max-h-[500px] overflow-y-auto",
230
- children: [
231
- (additionalItems ?? []).map((item, index) => /* @__PURE__ */ jsx3(
232
- "div",
233
- {
234
- className: clsx3(borderColor, "px-4 py-2 overflow-hidden whitespace-nowrap text-ellipsis border-2 border-t-0", {
235
- "border-b-0 rounded-b-lg": filteredOptions.length === 0 && index === (additionalItems?.length ?? 1) - 1
236
- }),
237
- children: item
238
- },
239
- `additionalItems${index}`
240
- )),
241
- filteredOptions.map((option, index) => /* @__PURE__ */ jsx3(Menu.Item, { children: /* @__PURE__ */ jsx3(
242
- "div",
243
- {
244
- className: clsx3(
245
- "px-4 py-2 overflow-hidden whitespace-nowrap text-ellipsis border-2 border-t-0 cursor-pointer",
246
- option.className,
247
- borderColor,
248
- {
249
- "brightness-90": option.value === value,
250
- "brightness-95": index % 2 === 1,
251
- "text-disabled bg-disabled-background cursor-not-allowed": !!option.disabled,
252
- "bg-menu-background text-menu-text hover:brightness-90 cursor-pointer": !option.disabled,
253
- "rounded-b-lg": index === filteredOptions.length - 1
254
- }
255
- ),
256
- onClick: () => {
257
- if (!option.disabled) {
597
+ ref: menuRef,
598
+ className: "absolute w-full z-10 rounded-lg mt-0.5 bg-menu-background text-menu-text shadow-around-md max-h-[500px] overflow-y-auto p-2",
599
+ children: /* @__PURE__ */ jsx7(
600
+ SearchableList,
601
+ {
602
+ list: options,
603
+ minimumItemsForSearch: isSearchEnabled ? void 0 : options.length,
604
+ searchMapping: (item) => item.searchTags,
605
+ itemMapper: (option, index) => /* @__PURE__ */ jsx7(
606
+ Tile,
607
+ {
608
+ isSelected: selectedOption?.value === option.value,
609
+ className: "px-2 py-1 rounded-md",
610
+ disabledClassName: "text-disabled-text cursor-not-allowed",
611
+ title: { value: option.label, className: "font-semibold" },
612
+ onClick: () => {
258
613
  onChange(option.value);
259
- }
614
+ setIsOpen(false);
615
+ },
616
+ isDisabled: option.disabled
260
617
  },
261
- children: option.label
262
- }
263
- ) }, `item${index}`))
264
- ]
618
+ index
619
+ )
620
+ }
621
+ )
265
622
  }
266
623
  )
267
- ] }) })
624
+ ] })
268
625
  ] });
269
626
  };
270
627
  var SelectUncontrolled = ({
@@ -274,13 +631,13 @@ var SelectUncontrolled = ({
274
631
  hintText,
275
632
  ...props
276
633
  }) => {
277
- const [selected, setSelected] = useState3(value);
278
- useEffect3(() => {
634
+ const [selected, setSelected] = useState6(value);
635
+ useEffect7(() => {
279
636
  if (options.find((options2) => options2.value === value)) {
280
637
  setSelected(value);
281
638
  }
282
639
  }, [options, value]);
283
- return /* @__PURE__ */ jsx3(
640
+ return /* @__PURE__ */ jsx7(
284
641
  Select,
285
642
  {
286
643
  value: selected,
@@ -294,29 +651,7 @@ var SelectUncontrolled = ({
294
651
  }
295
652
  );
296
653
  };
297
- var SearchableSelect = ({
298
- value,
299
- options,
300
- searchMapping,
301
- ...selectProps
302
- }) => {
303
- const [search, setSearch] = useState3("");
304
- const filteredOptions = MultiSearchWithMapping(search, options, searchMapping);
305
- return /* @__PURE__ */ jsx3(
306
- Select,
307
- {
308
- value,
309
- options: filteredOptions,
310
- additionalItems: [/* @__PURE__ */ jsxs2("div", { className: "row gap-x-2 items-center", children: [
311
- /* @__PURE__ */ jsx3(Input, { autoFocus: true, value: search, onChangeText: setSearch, className: "w-full" }),
312
- /* @__PURE__ */ jsx3(Search, { className: "min-w-[1.5rem] min-h-[1.5rem]" })
313
- ] }, "selectSearch")],
314
- ...selectProps
315
- }
316
- );
317
- };
318
654
  export {
319
- SearchableSelect,
320
655
  Select,
321
656
  SelectUncontrolled
322
657
  };