@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
package/dist/index.js CHANGED
@@ -2845,6 +2845,7 @@ __export(index_exports, {
2845
2845
  ArrayUtil: () => ArrayUtil,
2846
2846
  Avatar: () => Avatar,
2847
2847
  AvatarGroup: () => AvatarGroup,
2848
+ BagFunctionUtil: () => BagFunctionUtil,
2848
2849
  BreadCrumb: () => BreadCrumb,
2849
2850
  ButtonColorUtil: () => ButtonColorUtil,
2850
2851
  ButtonUtil: () => ButtonUtil,
@@ -2889,12 +2890,13 @@ __export(index_exports, {
2889
2890
  LocalStorageService: () => LocalStorageService,
2890
2891
  LoopingArrayCalculator: () => LoopingArrayCalculator,
2891
2892
  MarkdownInterpreter: () => MarkdownInterpreter,
2892
- Menu: () => Menu2,
2893
+ Menu: () => Menu,
2893
2894
  MenuItem: () => MenuItem,
2894
2895
  Modal: () => Modal,
2895
2896
  MultiSearchWithMapping: () => MultiSearchWithMapping,
2896
2897
  MultiSelect: () => MultiSelect,
2897
2898
  MultiSelectProperty: () => MultiSelectProperty,
2899
+ MultiSelectUncontrolled: () => MultiSelectUncontrolled,
2898
2900
  MultiSubjectSearchWithMapping: () => MultiSubjectSearchWithMapping,
2899
2901
  NumberProperty: () => NumberProperty,
2900
2902
  OutlineButton: () => OutlineButton,
@@ -2908,7 +2910,6 @@ __export(index_exports, {
2908
2910
  RingWave: () => RingWave,
2909
2911
  ScrollPicker: () => ScrollPicker,
2910
2912
  SearchableList: () => SearchableList,
2911
- SearchableSelect: () => SearchableSelect,
2912
2913
  Select: () => Select,
2913
2914
  SelectUncontrolled: () => SelectUncontrolled,
2914
2915
  SessionStorageService: () => SessionStorageService,
@@ -2956,6 +2957,7 @@ __export(index_exports, {
2956
2957
  equalDate: () => equalDate,
2957
2958
  equalSizeGroups: () => equalSizeGroups,
2958
2959
  filterNews: () => filterNews,
2960
+ formTranslation: () => formTranslation,
2959
2961
  formatDate: () => formatDate,
2960
2962
  formatDateTime: () => formatDateTime,
2961
2963
  generateShadingColors: () => generateShadingColors,
@@ -2966,6 +2968,7 @@ __export(index_exports, {
2966
2968
  isDataObjectSelected: () => isDataObjectSelected,
2967
2969
  isInTimeSpan: () => isInTimeSpan,
2968
2970
  localizedNewsSchema: () => localizedNewsSchema,
2971
+ monthTranslation: () => monthTranslation,
2969
2972
  monthsList: () => monthsList,
2970
2973
  newsListSchema: () => newsListSchema,
2971
2974
  newsSchema: () => newsSchema,
@@ -2975,6 +2978,7 @@ __export(index_exports, {
2975
2978
  removeFromTableSelection: () => removeFromTableSelection,
2976
2979
  shadingColorValues: () => shadingColorValues,
2977
2980
  subtractDuration: () => subtractDuration,
2981
+ timeTranslation: () => timeTranslation,
2978
2982
  updatePagination: () => updatePagination,
2979
2983
  useHoverState: () => useHoverState,
2980
2984
  useLanguage: () => useLanguage,
@@ -2982,6 +2986,7 @@ __export(index_exports, {
2982
2986
  useLocale: () => useLocale,
2983
2987
  useOutsideClick: () => useOutsideClick,
2984
2988
  useSaveDelay: () => useSaveDelay,
2989
+ useSearch: () => useSearch,
2985
2990
  useTheme: () => useTheme,
2986
2991
  useTranslation: () => useTranslation,
2987
2992
  validateEmail: () => validateEmail,
@@ -3038,22 +3043,44 @@ var import_clsx3 = __toESM(require("clsx"));
3038
3043
 
3039
3044
  // src/components/layout-and-navigation/Tile.tsx
3040
3045
  var import_clsx = __toESM(require("clsx"));
3046
+ var import_lucide_react = require("lucide-react");
3041
3047
  var import_jsx_runtime = require("react/jsx-runtime");
3042
3048
  var Tile = ({
3043
3049
  title,
3044
3050
  description,
3051
+ onClick,
3052
+ isSelected = false,
3053
+ isDisabled = false,
3045
3054
  prefix,
3046
3055
  suffix,
3056
+ normalClassName = "hover:bg-primary/40 cursor-pointer",
3057
+ selectedClassName = " bg-primary/20",
3058
+ disabledClassName = "text-disabled-text bg-disabled-background cursor-not-allowed",
3047
3059
  className
3048
3060
  }) => {
3049
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_clsx.default)("row gap-x-4 w-full items-center", className), children: [
3050
- prefix,
3051
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "col gap-y-0 w-full", children: [
3052
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: (0, import_clsx.default)(title.className ?? "textstyle-title-normal"), children: title.value }),
3053
- !!description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: (0, import_clsx.default)(description.className ?? "textstyle-description"), children: description.value })
3054
- ] }),
3055
- suffix
3056
- ] });
3061
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
3062
+ "div",
3063
+ {
3064
+ className: (0, import_clsx.default)(
3065
+ "row gap-x-2 w-full items-center",
3066
+ {
3067
+ [normalClassName]: !!onClick && !isDisabled,
3068
+ [selectedClassName]: isSelected && !isDisabled,
3069
+ [disabledClassName]: isDisabled
3070
+ },
3071
+ className
3072
+ ),
3073
+ onClick: isDisabled ? void 0 : onClick,
3074
+ children: [
3075
+ prefix ?? (isSelected ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Check, { size: 24 }) : void 0),
3076
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "col gap-y-0 w-full", children: [
3077
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: (0, import_clsx.default)(title.className ?? "textstyle-title-normal"), children: title.value }),
3078
+ !!description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: (0, import_clsx.default)(description.className ?? "textstyle-description"), children: description.value })
3079
+ ] }),
3080
+ suffix
3081
+ ]
3082
+ }
3083
+ );
3057
3084
  };
3058
3085
 
3059
3086
  // src/components/icons-and-geometry/Helpwave.tsx
@@ -3154,7 +3181,7 @@ var HelpwaveBadge = ({
3154
3181
 
3155
3182
  // src/components/date/DatePicker.tsx
3156
3183
  var import_react6 = require("react");
3157
- var import_lucide_react2 = require("lucide-react");
3184
+ var import_lucide_react3 = require("lucide-react");
3158
3185
 
3159
3186
  // src/localization/LanguageProvider.tsx
3160
3187
  var import_react2 = require("react");
@@ -3277,15 +3304,55 @@ var LanguageProvider = ({ initialLanguage, children }) => {
3277
3304
  };
3278
3305
 
3279
3306
  // src/localization/useTranslation.ts
3280
- var useTranslation = (defaults, translationOverwrite = {}) => {
3281
- const { language: languageProp, translation: overwrite } = translationOverwrite;
3307
+ var useTranslation = (translations, overwriteTranslation = {}) => {
3308
+ const { language: languageProp, translation: overwrite } = overwriteTranslation;
3282
3309
  const { language: inferredLanguage } = useLanguage();
3283
3310
  const usedLanguage = languageProp ?? inferredLanguage;
3284
- let defaultValues = defaults[usedLanguage];
3285
- if (overwrite && overwrite[usedLanguage]) {
3286
- defaultValues = { ...defaultValues, ...overwrite[usedLanguage] };
3287
- }
3288
- return defaultValues;
3311
+ const usedTranslations = [...translations];
3312
+ if (overwrite) {
3313
+ usedTranslations.push(overwrite);
3314
+ }
3315
+ return (key, options) => {
3316
+ const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options };
3317
+ try {
3318
+ for (let i = translations.length - 1; i >= 0; i--) {
3319
+ const translation = translations[i];
3320
+ const localizedTranslation = translation[usedLanguage];
3321
+ if (!localizedTranslation) {
3322
+ continue;
3323
+ }
3324
+ const value = localizedTranslation[key];
3325
+ if (!value) {
3326
+ continue;
3327
+ }
3328
+ let forProcessing;
3329
+ if (typeof value !== "string") {
3330
+ if (count <= 0 && value?.zero) {
3331
+ forProcessing = value.zero;
3332
+ } else if (count === 1 && value?.one) {
3333
+ forProcessing = value.one;
3334
+ } else if (count === 2 && value?.two) {
3335
+ forProcessing = value.two;
3336
+ } else if (count <= 10 && value?.few) {
3337
+ forProcessing = value.few;
3338
+ } else if (count > 10 && value?.many) {
3339
+ forProcessing = value.many;
3340
+ } else {
3341
+ forProcessing = value.other;
3342
+ }
3343
+ } else {
3344
+ forProcessing = value;
3345
+ }
3346
+ forProcessing = forProcessing.replace(/\{\{(\w+)}}/g, (_, placeholder) => {
3347
+ return replacements[placeholder] ?? `{{${placeholder}}}`;
3348
+ });
3349
+ return forProcessing;
3350
+ }
3351
+ } catch (e) {
3352
+ console.error(e);
3353
+ }
3354
+ return `{{${usedLanguage}:${key}}}`;
3355
+ };
3289
3356
  };
3290
3357
 
3291
3358
  // src/util/noop.ts
@@ -3766,10 +3833,10 @@ var import_clsx6 = __toESM(require("clsx"));
3766
3833
 
3767
3834
  // src/components/layout-and-navigation/Expandable.tsx
3768
3835
  var import_react3 = require("react");
3769
- var import_lucide_react = require("lucide-react");
3836
+ var import_lucide_react2 = require("lucide-react");
3770
3837
  var import_clsx5 = __toESM(require("clsx"));
3771
3838
  var import_jsx_runtime6 = require("react/jsx-runtime");
3772
- var DefaultIcon = (expanded) => expanded ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.ChevronUp, { size: 16, className: "min-w-[16px]" }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.ChevronDown, { size: 16, className: "min-w-[16px]" });
3839
+ var DefaultIcon = (expanded) => expanded ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.ChevronUp, { size: 16, className: "min-w-[16px]" }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.ChevronDown, { size: 16, className: "min-w-[16px]" });
3773
3840
  var Expandable = (0, import_react3.forwardRef)(function Expandable2({
3774
3841
  children,
3775
3842
  label,
@@ -3778,8 +3845,9 @@ var Expandable = (0, import_react3.forwardRef)(function Expandable2({
3778
3845
  onChange = noop,
3779
3846
  clickOnlyOnHeader = true,
3780
3847
  disabled = false,
3781
- className = "",
3782
- headerClassName = ""
3848
+ className,
3849
+ headerClassName,
3850
+ contentClassName
3783
3851
  }, ref) {
3784
3852
  icon ??= DefaultIcon;
3785
3853
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
@@ -3808,7 +3876,7 @@ var Expandable = (0, import_react3.forwardRef)(function Expandable2({
3808
3876
  ]
3809
3877
  }
3810
3878
  ),
3811
- isExpanded && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "col px-4 pb-2", children })
3879
+ isExpanded && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: (0, import_clsx5.default)("col px-4 pb-2", contentClassName), children })
3812
3880
  ]
3813
3881
  }
3814
3882
  );
@@ -3873,7 +3941,8 @@ var YearMonthPicker = ({
3873
3941
  ref: (displayedYearMonth.getFullYear() ?? (/* @__PURE__ */ new Date()).getFullYear()) === year ? ref : void 0,
3874
3942
  label: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: (0, import_clsx6.default)({ "text-primary font-bold": selectedYear }), children: year }),
3875
3943
  isExpanded: showValueOpen && selectedYear,
3876
- children: equalSizeGroups([...monthsList], 3).map((monthList, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "row", children: monthList.map((month) => {
3944
+ contentClassName: "gap-y-1",
3945
+ children: equalSizeGroups([...monthsList], 3).map((monthList, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "row gap-x-1", children: monthList.map((month) => {
3877
3946
  const monthIndex = monthsList.indexOf(month);
3878
3947
  const newDate = new Date(year, monthIndex);
3879
3948
  const selectedMonth = selectedYear && monthIndex === displayedYearMonth.getMonth();
@@ -3883,17 +3952,12 @@ var YearMonthPicker = ({
3883
3952
  const isBeforeEnd = end === void 0 || firstOfMonth <= end;
3884
3953
  const isValid = isAfterStart && isBeforeEnd;
3885
3954
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
3886
- "button",
3955
+ SolidButton,
3887
3956
  {
3888
3957
  disabled: !isValid,
3889
- className: (0, import_clsx6.default)(
3890
- "chip hover:brightness-95 flex-1",
3891
- {
3892
- "bg-gray-50 text-black": !selectedMonth && isValid,
3893
- "bg-primary text-on-primary": selectedMonth && isValid,
3894
- "bg-disabled-background text-disabled-text": !isValid
3895
- }
3896
- ),
3958
+ color: selectedMonth && isValid ? "primary" : "neutral",
3959
+ className: "flex-1",
3960
+ size: "small",
3897
3961
  onClick: () => {
3898
3962
  onChange(newDate);
3899
3963
  },
@@ -3908,11 +3972,11 @@ var YearMonthPicker = ({
3908
3972
  }) }) }) });
3909
3973
  };
3910
3974
  var YearMonthPickerUncontrolled = ({
3911
- displayedYearMonth = /* @__PURE__ */ new Date(),
3975
+ displayedYearMonth,
3912
3976
  onChange = noop,
3913
3977
  ...props
3914
3978
  }) => {
3915
- const [yearMonth, setYearMonth] = (0, import_react4.useState)(displayedYearMonth);
3979
+ const [yearMonth, setYearMonth] = (0, import_react4.useState)(displayedYearMonth ?? /* @__PURE__ */ new Date());
3916
3980
  (0, import_react4.useEffect)(() => setYearMonth(displayedYearMonth), [displayedYearMonth]);
3917
3981
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
3918
3982
  YearMonthPicker,
@@ -3956,14 +4020,15 @@ var DayPicker = ({
3956
4020
  {
3957
4021
  disabled: !isDayValid,
3958
4022
  className: (0, import_clsx7.default)(
3959
- "flex-1 rounded-full border-2 border-transparent shadow-sm",
4023
+ "flex-1 rounded-full border-2",
3960
4024
  {
3961
- "text-gray-700 bg-gray-100": !isSameMonth && isDayValid,
3962
- "text-black bg-white": !isSelected && isSameMonth && isDayValid,
3963
- "text-on-primary bg-primary": isSelected,
3964
- "border-black": isToday && markToday,
3965
- "hover:brightness-90 hover:bg-primary hover:text-on-primary": isDayValid,
3966
- "text-disabled-text bg-disabled-background": !isDayValid
4025
+ "text-description": !isSameMonth && !isSelected && isDayValid,
4026
+ "text-button-solid-neutral-text bg-button-solid-neutral-background": !isSelected && isSameMonth && isDayValid,
4027
+ "text-button-solid-primary-text bg-button-solid-primary-background": isSelected && isDayValid,
4028
+ "hover:brightness-90 hover:bg-button-solid-primary-background hover:text-button-solid-primary-text": isDayValid,
4029
+ "text-disabled-text bg-disabled-background cursor-not-allowed": !isDayValid,
4030
+ "border-secondary": isToday && markToday,
4031
+ "border-transparent": !isToday || !markToday
3967
4032
  }
3968
4033
  ),
3969
4034
  onClick: () => onChange(date),
@@ -3974,15 +4039,26 @@ var DayPicker = ({
3974
4039
  }) }, index))
3975
4040
  ] });
3976
4041
  };
3977
- var DayPickerUncontrolled = ({ displayedMonth, onChange = noop, ...restProps }) => {
3978
- const [date, setDate] = (0, import_react5.useState)(displayedMonth);
3979
- (0, import_react5.useEffect)(() => setDate(displayedMonth), [displayedMonth]);
4042
+ var DayPickerUncontrolled = ({
4043
+ displayedMonth,
4044
+ selected,
4045
+ onChange = noop,
4046
+ ...restProps
4047
+ }) => {
4048
+ const [date, setDate] = (0, import_react5.useState)(selected);
4049
+ const [usedDisplayedMonth, setUsedDDisplayedMonth] = (0, import_react5.useState)(displayedMonth);
4050
+ (0, import_react5.useEffect)(() => {
4051
+ setDate(selected);
4052
+ setUsedDDisplayedMonth(selected);
4053
+ }, [selected]);
3980
4054
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3981
4055
  DayPicker,
3982
4056
  {
3983
- displayedMonth: date,
4057
+ displayedMonth: usedDisplayedMonth,
4058
+ selected: date,
3984
4059
  onChange: (newDate) => {
3985
4060
  setDate(newDate);
4061
+ setUsedDDisplayedMonth(newDate);
3986
4062
  onChange(newDate);
3987
4063
  },
3988
4064
  ...restProps
@@ -3990,16 +4066,80 @@ var DayPickerUncontrolled = ({ displayedMonth, onChange = noop, ...restProps })
3990
4066
  );
3991
4067
  };
3992
4068
 
3993
- // src/components/date/DatePicker.tsx
3994
- var import_jsx_runtime9 = require("react/jsx-runtime");
3995
- var defaultDatePickerTranslation = {
4069
+ // src/localization/defaults/time.ts
4070
+ var monthTranslation = {
4071
+ en: {
4072
+ january: "January",
4073
+ february: "Febuary",
4074
+ march: "March",
4075
+ april: "April",
4076
+ may: "May",
4077
+ june: "June",
4078
+ july: "July",
4079
+ august: "August",
4080
+ september: "September",
4081
+ october: "October",
4082
+ november: "November",
4083
+ december: "December"
4084
+ },
4085
+ de: {
4086
+ january: "Januar",
4087
+ february: "Febuar",
4088
+ march: "M\xE4rz",
4089
+ april: "April",
4090
+ may: "Mai",
4091
+ june: "Juni",
4092
+ july: "Juli",
4093
+ august: "August",
4094
+ september: "September",
4095
+ october: "October",
4096
+ november: "November",
4097
+ december: "December"
4098
+ }
4099
+ };
4100
+ var timeTranslation = {
3996
4101
  en: {
3997
- today: "Today"
4102
+ ...monthTranslation.en,
4103
+ century: { one: "Century", other: "Centuries" },
4104
+ decade: { one: "Decade", other: "Decades" },
4105
+ year: { one: "Year", other: "Years" },
4106
+ month: { one: "Month", other: "Months" },
4107
+ day: { one: "Day", other: "Days" },
4108
+ hour: { one: "Hour", other: "Hours" },
4109
+ minute: { one: "Minute", other: "Minutes" },
4110
+ second: { one: "Second", other: "Seconds" },
4111
+ millisecond: { one: "Millisecond", other: "Milliseconds" },
4112
+ microsecond: { one: "Microsecond", other: "Microseconds" },
4113
+ nanosecond: { one: "Nanosecond", other: "Nanoseconds" },
4114
+ yesterday: "Yesterday",
4115
+ today: "Today",
4116
+ tomorrow: "Tomorrow",
4117
+ in: "in",
4118
+ ago: "ago"
3998
4119
  },
3999
4120
  de: {
4000
- today: "Heute"
4121
+ ...monthTranslation.de,
4122
+ century: { one: "Jahrhundert", other: "Jahrhunderte" },
4123
+ decade: { one: "Jahrzehnt", other: "Jahrzehnte" },
4124
+ year: { one: "Jahr", other: "Jahre" },
4125
+ month: { one: "Monat", other: "Monate" },
4126
+ day: { one: "Tag", other: "Tage" },
4127
+ hour: { one: "Stunde", other: "Stunden" },
4128
+ minute: { one: "Minute", other: "Minuten" },
4129
+ second: { one: "Sekunde", other: "Sekunden" },
4130
+ millisecond: { one: "Millisekunde", other: "Millisekunden" },
4131
+ microsecond: { one: "Mikrosekunde", other: "Mikrosekunden" },
4132
+ nanosecond: { one: "Nanosekunde", other: "Nanosekunden" },
4133
+ yesterday: "Gestern",
4134
+ today: "Heute",
4135
+ tomorrow: "Morgen",
4136
+ in: "in",
4137
+ ago: "vor"
4001
4138
  }
4002
4139
  };
4140
+
4141
+ // src/components/date/DatePicker.tsx
4142
+ var import_jsx_runtime9 = require("react/jsx-runtime");
4003
4143
  var DatePicker = ({
4004
4144
  overwriteTranslation,
4005
4145
  value = /* @__PURE__ */ new Date(),
@@ -4012,7 +4152,7 @@ var DatePicker = ({
4012
4152
  className = ""
4013
4153
  }) => {
4014
4154
  const locale = useLocale();
4015
- const translation = useTranslation(defaultDatePickerTranslation, overwriteTranslation);
4155
+ const translation = useTranslation([timeTranslation], overwriteTranslation);
4016
4156
  const [displayedMonth, setDisplayedMonth] = (0, import_react6.useState)(value);
4017
4157
  const [displayMode, setDisplayMode] = (0, import_react6.useState)(initialDisplay);
4018
4158
  (0, import_react6.useEffect)(() => {
@@ -4029,7 +4169,7 @@ var DatePicker = ({
4029
4169
  onClick: () => setDisplayMode(displayMode === "day" ? "yearMonth" : "day"),
4030
4170
  children: [
4031
4171
  `${new Intl.DateTimeFormat(locale, { month: "long" }).format(displayedMonth)} ${displayedMonth.getFullYear()}`,
4032
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react2.ChevronDown, { size: 16 })
4172
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.ChevronDown, { size: 16 })
4033
4173
  ]
4034
4174
  }
4035
4175
  ),
@@ -4043,7 +4183,7 @@ var DatePicker = ({
4043
4183
  onClick: () => {
4044
4184
  setDisplayedMonth(subtractDuration(displayedMonth, { months: 1 }));
4045
4185
  },
4046
- children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react2.ArrowUp, { size: 20 })
4186
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.ArrowUp, { size: 20 })
4047
4187
  }
4048
4188
  ),
4049
4189
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
@@ -4055,7 +4195,7 @@ var DatePicker = ({
4055
4195
  onClick: () => {
4056
4196
  setDisplayedMonth(addDuration(displayedMonth, { months: 1 }));
4057
4197
  },
4058
- children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react2.ArrowDown, { size: 20 })
4198
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.ArrowDown, { size: 20 })
4059
4199
  }
4060
4200
  )
4061
4201
  ] })
@@ -4095,7 +4235,7 @@ var DatePicker = ({
4095
4235
  newDate.setHours(value.getHours(), value.getMinutes());
4096
4236
  onChange(newDate);
4097
4237
  },
4098
- children: translation.today
4238
+ children: translation("today")
4099
4239
  }
4100
4240
  ) })
4101
4241
  ] })
@@ -4125,42 +4265,14 @@ var DatePickerUncontrolled = ({
4125
4265
  var import_jsx_runtime10 = require("react/jsx-runtime");
4126
4266
  var defaultTimeDisplayTranslations = {
4127
4267
  en: {
4128
- today: "today",
4129
- yesterday: "yesterday",
4130
- tomorrow: "tomorrow",
4131
- inDays: (days) => `in ${days} days`,
4132
- agoDays: (days) => `${days} days ago`,
4133
- january: "January",
4134
- february: "February",
4135
- march: "March",
4136
- april: "April",
4137
- may: "May",
4138
- june: "June",
4139
- july: "July",
4140
- august: "August",
4141
- september: "September",
4142
- october: "October",
4143
- november: "November",
4144
- december: "December"
4268
+ ...timeTranslation.en,
4269
+ inDays: `in {{days}} days`,
4270
+ agoDays: `{{days}} days ago`
4145
4271
  },
4146
4272
  de: {
4147
- today: "heute",
4148
- yesterday: "gestern",
4149
- tomorrow: "morgen",
4150
- inDays: (days) => `in ${days} Tagen`,
4151
- agoDays: (days) => `vor ${days} Tagen`,
4152
- january: "Januar",
4153
- february: "Februar",
4154
- march: "M\xE4rz",
4155
- april: "April",
4156
- may: "Mai",
4157
- june: "Juni",
4158
- july: "Juli",
4159
- august: "August",
4160
- september: "September",
4161
- october: "October",
4162
- november: "November",
4163
- december: "December"
4273
+ ...timeTranslation.de,
4274
+ inDays: `in {{days}} Tagen`,
4275
+ agoDays: `vor {{days}} Tagen`
4164
4276
  }
4165
4277
  };
4166
4278
  var TimeDisplay = ({
@@ -4168,31 +4280,31 @@ var TimeDisplay = ({
4168
4280
  date,
4169
4281
  mode = "daysFromToday"
4170
4282
  }) => {
4171
- const translation = useTranslation(defaultTimeDisplayTranslations, overwriteTranslation);
4283
+ const translation = useTranslation([defaultTimeDisplayTranslations], overwriteTranslation);
4172
4284
  const difference = (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0).valueOf() - new Date(date).setHours(0, 0, 0, 0).valueOf();
4173
4285
  const isBefore = difference > 0;
4174
4286
  const differenceInDays = Math.floor(Math.abs(difference) / (1e3 * 3600 * 24));
4175
4287
  let displayString;
4176
4288
  if (differenceInDays === 0) {
4177
- displayString = translation.today;
4289
+ displayString = translation("today");
4178
4290
  } else if (differenceInDays === 1) {
4179
- displayString = isBefore ? translation.yesterday : translation.tomorrow;
4291
+ displayString = isBefore ? translation("yesterday") : translation("tomorrow");
4180
4292
  } else {
4181
- displayString = isBefore ? translation.agoDays(differenceInDays) : translation.inDays(differenceInDays);
4293
+ displayString = isBefore ? translation("agoDays", { replacements: { days: differenceInDays.toString() } }) : translation("inDays", { replacements: { days: differenceInDays.toString() } });
4182
4294
  }
4183
4295
  const monthToTranslation = {
4184
- 0: translation.january,
4185
- 1: translation.february,
4186
- 2: translation.march,
4187
- 3: translation.april,
4188
- 4: translation.may,
4189
- 5: translation.june,
4190
- 6: translation.july,
4191
- 7: translation.august,
4192
- 8: translation.september,
4193
- 9: translation.october,
4194
- 10: translation.november,
4195
- 11: translation.december
4296
+ 0: translation("january"),
4297
+ 1: translation("february"),
4298
+ 2: translation("march"),
4299
+ 3: translation("april"),
4300
+ 4: translation("may"),
4301
+ 5: translation("june"),
4302
+ 6: translation("july"),
4303
+ 7: translation("august"),
4304
+ 8: translation("september"),
4305
+ 9: translation("october"),
4306
+ 10: translation("november"),
4307
+ 11: translation("december")
4196
4308
  };
4197
4309
  let fullString;
4198
4310
  if (mode === "daysFromToday") {
@@ -4438,7 +4550,7 @@ var Tooltip = ({
4438
4550
  {
4439
4551
  className: (0, import_clsx10.clsx)(
4440
4552
  `opacity-0 absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap
4441
- animate-tooltip-fade-in shadow-lg bg-tooltip-background`,
4553
+ animate-tooltip-fade-in shadow-around-md bg-tooltip-background`,
4442
4554
  positionClasses[position],
4443
4555
  tooltipClassName
4444
4556
  ),
@@ -4449,7 +4561,7 @@ var Tooltip = ({
4449
4561
  "div",
4450
4562
  {
4451
4563
  className: (0, import_clsx10.clsx)(`absolute w-0 h-0`, triangleClasses[position]),
4452
- style: { ...triangleStyle[position], zIndex }
4564
+ style: { ...triangleStyle[position], zIndex: zIndex + 1 }
4453
4565
  }
4454
4566
  )
4455
4567
  ]
@@ -4461,7 +4573,109 @@ var Tooltip = ({
4461
4573
  };
4462
4574
 
4463
4575
  // src/components/layout-and-navigation/Overlay.tsx
4464
- var import_lucide_react3 = require("lucide-react");
4576
+ var import_lucide_react4 = require("lucide-react");
4577
+
4578
+ // src/localization/defaults/form.ts
4579
+ var formTranslation = {
4580
+ en: {
4581
+ all: "All",
4582
+ back: "Back",
4583
+ cancel: "Cancel",
4584
+ change: "Change",
4585
+ clear: "Clear",
4586
+ close: "Close",
4587
+ confirm: "Confirm",
4588
+ decline: "Decline",
4589
+ delete: "Delete",
4590
+ discard: "Discard",
4591
+ discardChanges: "Discard Changes",
4592
+ done: "Done",
4593
+ edit: "Edit",
4594
+ enterText: "Enter text here",
4595
+ error: "Error",
4596
+ exit: "Exit",
4597
+ fieldRequiredError: "This field is required.",
4598
+ invalidEmailError: "Please enter a valid email address.",
4599
+ less: "Less",
4600
+ loading: "Loading",
4601
+ maxLengthError: "Maximum length exceeded.",
4602
+ minLengthError: "Minimum length not met.",
4603
+ more: "More",
4604
+ next: "Next",
4605
+ no: "No",
4606
+ none: "None",
4607
+ of: "of",
4608
+ optional: "Optional",
4609
+ pleaseWait: "Please wait...",
4610
+ previous: "Previous",
4611
+ remove: "Remove",
4612
+ required: "Required",
4613
+ reset: "Reset",
4614
+ save: "Save",
4615
+ search: "Search",
4616
+ select: "Select",
4617
+ selectOption: "Select an option",
4618
+ show: "Show",
4619
+ showMore: "Show more",
4620
+ showLess: "Show less",
4621
+ submit: "Submit",
4622
+ success: "Success",
4623
+ update: "Update",
4624
+ unsavedChanges: "Unsaved Changes",
4625
+ unsavedChangesSaveQuestion: "Do you want to save your changes?",
4626
+ yes: "Yes"
4627
+ },
4628
+ de: {
4629
+ all: "Alle",
4630
+ back: "Zur\xFCck",
4631
+ cancel: "Abbrechen",
4632
+ change: "\xC4ndern",
4633
+ clear: "L\xF6schen",
4634
+ close: "Schlie\xDFen",
4635
+ confirm: "Best\xE4tigen",
4636
+ decline: "Ablehnen",
4637
+ delete: "L\xF6schen",
4638
+ discard: "Verwerfen",
4639
+ discardChanges: "\xC4nderungen Verwerfen",
4640
+ done: "Fertig",
4641
+ edit: "Bearbeiten",
4642
+ enterText: "Text hier eingeben",
4643
+ error: "Fehler",
4644
+ exit: "Beenden",
4645
+ fieldRequiredError: "Dieses Feld ist erforderlich.",
4646
+ invalidEmailError: "Bitte geben Sie eine g\xFCltige E-Mail-Adresse ein.",
4647
+ less: "Weniger",
4648
+ loading: "L\xE4dt",
4649
+ maxLengthError: "Maximale L\xE4nge \xFCberschritten.",
4650
+ minLengthError: "Mindestl\xE4nge nicht erreicht.",
4651
+ more: "Mehr",
4652
+ next: "Weiter",
4653
+ no: "Nein",
4654
+ none: "Nichts",
4655
+ of: "von",
4656
+ optional: "Optional",
4657
+ pleaseWait: "Bitte warten...",
4658
+ previous: "Vorherige",
4659
+ remove: "Entfernen",
4660
+ required: "Erforderlich",
4661
+ reset: "Zur\xFCcksetzen",
4662
+ save: "Speichern",
4663
+ search: "Suche",
4664
+ select: "Select",
4665
+ selectOption: "Option ausw\xE4hlen",
4666
+ show: "Anzeigen",
4667
+ showMore: "Mehr anzeigen",
4668
+ showLess: "Weniger anzeigen",
4669
+ submit: "Abschicken",
4670
+ success: "Erfolg",
4671
+ update: "Update",
4672
+ unsavedChanges: "Ungespeicherte \xC4nderungen",
4673
+ unsavedChangesSaveQuestion: "M\xF6chtest du die \xC4nderungen speichern?",
4674
+ yes: "Ja"
4675
+ }
4676
+ };
4677
+
4678
+ // src/components/layout-and-navigation/Overlay.tsx
4465
4679
  var import_jsx_runtime13 = require("react/jsx-runtime");
4466
4680
  var Overlay = ({
4467
4681
  children,
@@ -4491,10 +4705,10 @@ var Overlay = ({
4491
4705
  var overlayStack = [];
4492
4706
  var defaultModalHeaderTranslation = {
4493
4707
  en: {
4494
- close: "Close"
4708
+ ...formTranslation.en
4495
4709
  },
4496
4710
  de: {
4497
- close: "Schlie\xDFen"
4711
+ ...formTranslation.de
4498
4712
  }
4499
4713
  };
4500
4714
  var OverlayHeader = ({
@@ -4505,7 +4719,7 @@ var OverlayHeader = ({
4505
4719
  description,
4506
4720
  descriptionText = ""
4507
4721
  }) => {
4508
- const translation = useTranslation(defaultModalHeaderTranslation, overwriteTranslation);
4722
+ const translation = useTranslation([defaultModalHeaderTranslation], overwriteTranslation);
4509
4723
  const hasTitleRow = !!title || !!titleText || !!onClose;
4510
4724
  const titleRow = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "row justify-between items-start gap-x-8", children: [
4511
4725
  title ?? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
@@ -4517,7 +4731,7 @@ var OverlayHeader = ({
4517
4731
  children: titleText
4518
4732
  }
4519
4733
  ),
4520
- !!onClose && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Tooltip, { tooltip: translation.close, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(IconButton, { color: "neutral", size: "small", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.X, { className: "w-full h-full" }) }) })
4734
+ !!onClose && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Tooltip, { tooltip: translation("close"), children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(IconButton, { color: "neutral", size: "small", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react4.X, { className: "w-full h-full" }) }) })
4521
4735
  ] });
4522
4736
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "col", children: [
4523
4737
  hasTitleRow && titleRow,
@@ -4668,16 +4882,6 @@ var Dialog = ({
4668
4882
 
4669
4883
  // src/components/dialogs/ConfirmDialog.tsx
4670
4884
  var import_jsx_runtime14 = require("react/jsx-runtime");
4671
- var defaultConfirmDialogTranslation = {
4672
- en: {
4673
- confirm: "Confirm",
4674
- decline: "Decline"
4675
- },
4676
- de: {
4677
- confirm: "Best\xE4tigen",
4678
- decline: "Ablehnen"
4679
- }
4680
- };
4681
4885
  var ConfirmDialog = ({
4682
4886
  overwriteTranslation,
4683
4887
  children,
@@ -4688,7 +4892,7 @@ var ConfirmDialog = ({
4688
4892
  className,
4689
4893
  ...restProps
4690
4894
  }) => {
4691
- const translation = useTranslation(defaultConfirmDialogTranslation, overwriteTranslation);
4895
+ const translation = useTranslation([formTranslation], overwriteTranslation);
4692
4896
  const mapping = {
4693
4897
  neutral: "primary",
4694
4898
  negative: "negative",
@@ -4704,7 +4908,7 @@ var ConfirmDialog = ({
4704
4908
  color: buttonOverwrites?.[0].color ?? "negative",
4705
4909
  onClick: onDecline,
4706
4910
  disabled: buttonOverwrites?.[0].disabled ?? false,
4707
- children: buttonOverwrites?.[0].text ?? translation.decline
4911
+ children: buttonOverwrites?.[0].text ?? translation("decline")
4708
4912
  }
4709
4913
  ),
4710
4914
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
@@ -4714,7 +4918,7 @@ var ConfirmDialog = ({
4714
4918
  color: buttonOverwrites?.[1].color ?? mapping[confirmType],
4715
4919
  onClick: onConfirm,
4716
4920
  disabled: buttonOverwrites?.[1].disabled ?? false,
4717
- children: buttonOverwrites?.[1].text ?? translation.confirm
4921
+ children: buttonOverwrites?.[1].text ?? translation("confirm")
4718
4922
  }
4719
4923
  )
4720
4924
  ] })
@@ -4749,10 +4953,10 @@ var Avatar = ({ avatarUrl, alt, size = "medium", className = "" }) => {
4749
4953
  };
4750
4954
  return (
4751
4955
  // TODO transparent or white background later
4752
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: (0, import_clsx13.default)(`rounded-full bg-primary`, className), style, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4956
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: (0, import_clsx13.default)(`rounded-full bg-primary shadow`, className), style, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4753
4957
  "img",
4754
4958
  {
4755
- className: "rounded-full border border-gray-200",
4959
+ className: "rounded-full",
4756
4960
  style,
4757
4961
  src: avatarUrl,
4758
4962
  alt,
@@ -5125,7 +5329,7 @@ var BreadCrumb = ({ crumbs, linkClassName, containerClassName }) => {
5125
5329
  // src/components/layout-and-navigation/Carousel.tsx
5126
5330
  var import_react11 = require("react");
5127
5331
  var import_clsx17 = __toESM(require("clsx"));
5128
- var import_lucide_react4 = require("lucide-react");
5332
+ var import_lucide_react5 = require("lucide-react");
5129
5333
 
5130
5334
  // src/util/math.ts
5131
5335
  var clamp = (value, min = 0, max = 1) => {
@@ -5242,7 +5446,7 @@ var Carousel = ({
5242
5446
  arrows = false,
5243
5447
  dots = true,
5244
5448
  overScrollThreshold = 0.1,
5245
- blurColor = "from-white",
5449
+ blurColor = "from-background",
5246
5450
  className = "",
5247
5451
  heightClassName = "h-[24rem]",
5248
5452
  widthClassName = "w-[70%] desktop:w-1/2"
@@ -5474,19 +5678,23 @@ var Carousel = ({
5474
5678
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_clsx17.default)(`relative w-full overflow-hidden`, heightClassName, className), children: [
5475
5679
  arrows && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
5476
5680
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
5477
- "div",
5681
+ IconButton,
5478
5682
  {
5479
- className: (0, import_clsx17.default)("absolute z-10 left-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2", { hidden: !canGoLeft() }),
5683
+ color: "neutral",
5684
+ className: (0, import_clsx17.default)("absolute z-10 left-0 top-1/2 -translate-y-1/2 shadow-md", { hidden: !canGoLeft() }),
5685
+ disabled: !canGoLeft(),
5480
5686
  onClick: () => left(),
5481
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.ChevronLeft, { size: 32 })
5687
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react5.ChevronLeft, { size: 24 })
5482
5688
  }
5483
5689
  ),
5484
5690
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
5485
- "div",
5691
+ IconButton,
5486
5692
  {
5487
- className: (0, import_clsx17.default)("absolute z-10 right-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2", { hidden: !canGoRight() }),
5693
+ color: "neutral",
5694
+ className: (0, import_clsx17.default)("absolute z-10 right-0 top-1/2 -translate-y-1/2 shadow-md", { hidden: !canGoRight() }),
5695
+ disabled: !canGoRight(),
5488
5696
  onClick: () => right(),
5489
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.ChevronRight, { size: 32 })
5697
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react5.ChevronRight, { size: 24 })
5490
5698
  }
5491
5699
  )
5492
5700
  ] }),
@@ -5526,9 +5734,9 @@ var Carousel = ({
5526
5734
  children: range(0, length - 1).map((index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
5527
5735
  "button",
5528
5736
  {
5529
- className: (0, import_clsx17.default)("w-[2rem] min-w-[2rem] h-[0.75rem] min-h-[0.75rem] hover:bg-primary hover:brightness-90 first:rounded-l-md last:rounded-r-md", {
5530
- "bg-gray-200": currentIndex !== index,
5531
- "bg-primary": currentIndex === index
5737
+ className: (0, import_clsx17.default)("w-[2rem] min-w-[2rem] h-[0.75rem] min-h-[0.75rem] first:rounded-l-md last:rounded-r-md", {
5738
+ "bg-carousel-dot-disabled hover:bg-carousel-dot-active": currentIndex !== index,
5739
+ "bg-carousel-dot-active hover:brightness-90": currentIndex === index
5532
5740
  }),
5533
5741
  onClick: () => startAnimation(index)
5534
5742
  },
@@ -5628,7 +5836,7 @@ var DividerInserter = ({
5628
5836
 
5629
5837
  // src/components/layout-and-navigation/FAQSection.tsx
5630
5838
  var import_clsx20 = __toESM(require("clsx"));
5631
- var import_lucide_react5 = require("lucide-react");
5839
+ var import_lucide_react6 = require("lucide-react");
5632
5840
 
5633
5841
  // src/components/layout-and-navigation/MarkdownInterpreter.tsx
5634
5842
  var import_jsx_runtime23 = require("react/jsx-runtime");
@@ -5726,7 +5934,7 @@ var inserterIdentifierMapping = [
5726
5934
  { id: "helpwave", name: "helpwave" },
5727
5935
  { id: "newline", name: "newline" }
5728
5936
  ];
5729
- var parseMarkdown = (text, commandStart = "\\", open = "{", close = "}") => {
5937
+ var parseMarkdown = (text, commandStart = "\\", open2 = "{", close = "}") => {
5730
5938
  let start = text.indexOf(commandStart);
5731
5939
  const children = [];
5732
5940
  while (text !== "") {
@@ -5747,7 +5955,7 @@ var parseMarkdown = (text, commandStart = "\\", open = "{", close = "}") => {
5747
5955
  text = "";
5748
5956
  continue;
5749
5957
  }
5750
- const simpleReplace = [commandStart, open, close];
5958
+ const simpleReplace = [commandStart, open2, close];
5751
5959
  if (simpleReplace.some((value) => text[1] === value)) {
5752
5960
  children.push({
5753
5961
  type: "text",
@@ -5768,7 +5976,7 @@ var parseMarkdown = (text, commandStart = "\\", open = "{", close = "}") => {
5768
5976
  }
5769
5977
  const modifier = modifierIdentifierMapping.find((value) => text.substring(1).startsWith(value.id));
5770
5978
  if (modifier) {
5771
- if (text[modifier.id.length + 1] !== open) {
5979
+ if (text[modifier.id.length + 1] !== open2) {
5772
5980
  children.push({
5773
5981
  type: "text",
5774
5982
  text: text.substring(0, modifier.id.length + 1)
@@ -5782,7 +5990,7 @@ var parseMarkdown = (text, commandStart = "\\", open = "{", close = "}") => {
5782
5990
  let counter = 1;
5783
5991
  let escaping = false;
5784
5992
  while (index < text.length) {
5785
- if (text[index] === open && !escaping) {
5993
+ if (text[index] === open2 && !escaping) {
5786
5994
  counter++;
5787
5995
  }
5788
5996
  if (text[index] === close && !escaping) {
@@ -5874,7 +6082,7 @@ var FAQSection = ({
5874
6082
  ...restProps,
5875
6083
  label: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h3", { id, className: "textstyle-title-md", children: title }),
5876
6084
  clickOnlyOnHeader: false,
5877
- icon: (expanded) => expanded ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react5.ChevronUp, { size: chevronSize, className: "text-primary", style: { minWidth: `${chevronSize}px` } }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react5.ChevronDown, { size: chevronSize, className: "text-primary" }),
6085
+ icon: (expanded) => expanded ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react6.ChevronUp, { size: chevronSize, className: "text-primary", style: { minWidth: `${chevronSize}px` } }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react6.ChevronDown, { size: chevronSize, className: "text-primary" }),
5878
6086
  className: (0, import_clsx20.default)("rounded-xl", expandableClassName),
5879
6087
  children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mt-2", children: content.type === "markdown" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(MarkdownInterpreter, { text: content.value }) : content.value })
5880
6088
  },
@@ -5883,24 +6091,16 @@ var FAQSection = ({
5883
6091
  };
5884
6092
 
5885
6093
  // src/components/layout-and-navigation/Pagination.tsx
5886
- var import_lucide_react6 = require("lucide-react");
6094
+ var import_lucide_react7 = require("lucide-react");
5887
6095
  var import_clsx21 = __toESM(require("clsx"));
5888
6096
  var import_jsx_runtime25 = require("react/jsx-runtime");
5889
- var defaultPaginationTranslations = {
5890
- en: {
5891
- of: "of"
5892
- },
5893
- de: {
5894
- of: "von"
5895
- }
5896
- };
5897
6097
  var Pagination = ({
5898
6098
  overwriteTranslation,
5899
6099
  page,
5900
6100
  numberOfPages,
5901
6101
  onPageChanged
5902
6102
  }) => {
5903
- const translation = useTranslation(defaultPaginationTranslations, overwriteTranslation);
6103
+ const translation = useTranslation([formTranslation], overwriteTranslation);
5904
6104
  const changePage = (page2) => {
5905
6105
  onPageChanged(page2);
5906
6106
  };
@@ -5908,43 +6108,22 @@ var Pagination = ({
5908
6108
  const onFirstPage = page === 0 && !noPages;
5909
6109
  const onLastPage = page === numberOfPages - 1;
5910
6110
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: (0, import_clsx21.default)("row", { "opacity-30": noPages }), children: [
5911
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(0), disabled: onFirstPage, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.ChevronFirst, { className: (0, import_clsx21.default)({ "opacity-30": onFirstPage }) }) }),
5912
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(page - 1), disabled: onFirstPage, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.ChevronLeft, { className: (0, import_clsx21.default)({ "opacity-30": onFirstPage }) }) }),
6111
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(0), disabled: onFirstPage, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react7.ChevronFirst, { className: (0, import_clsx21.default)({ "opacity-30": onFirstPage }) }) }),
6112
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(page - 1), disabled: onFirstPage, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react7.ChevronLeft, { className: (0, import_clsx21.default)({ "opacity-30": onFirstPage }) }) }),
5913
6113
  /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "min-w-[80px] justify-center mx-2", children: [
5914
6114
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "select-none text-right flex-1", children: noPages ? 0 : page + 1 }),
5915
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "select-none mx-2", children: translation.of }),
6115
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "select-none mx-2", children: translation("of") }),
5916
6116
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "select-none text-left flex-1", children: numberOfPages })
5917
6117
  ] }),
5918
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(page + 1), disabled: onLastPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.ChevronRight, { className: (0, import_clsx21.default)({ "opacity-30": onLastPage }) }) }),
5919
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(numberOfPages - 1), disabled: onLastPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.ChevronLast, { className: (0, import_clsx21.default)({ "opacity-30": onLastPage }) }) })
6118
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(page + 1), disabled: onLastPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react7.ChevronRight, { className: (0, import_clsx21.default)({ "opacity-30": onLastPage }) }) }),
6119
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { onClick: () => changePage(numberOfPages - 1), disabled: onLastPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react7.ChevronLast, { className: (0, import_clsx21.default)({ "opacity-30": onLastPage }) }) })
5920
6120
  ] });
5921
6121
  };
5922
6122
 
5923
6123
  // src/components/layout-and-navigation/SearchableList.tsx
5924
- var import_react14 = require("react");
5925
- var import_lucide_react7 = require("lucide-react");
6124
+ var import_lucide_react8 = require("lucide-react");
5926
6125
  var import_clsx24 = __toESM(require("clsx"));
5927
6126
 
5928
- // src/util/simpleSearch.ts
5929
- var MultiSubjectSearchWithMapping = (search, objects, mapping) => {
5930
- return objects.filter((object) => {
5931
- const mappedSearchKeywords = mapping(object).map((value) => value ? value.toLowerCase().trim() : void 0);
5932
- return search.every((searchValue) => !!mappedSearchKeywords.find((value) => !!value && value.includes(searchValue.toLowerCase().trim())));
5933
- });
5934
- };
5935
- var MultiSearchWithMapping = (search, objects, mapping) => {
5936
- return objects.filter((object) => {
5937
- const mappedSearchKeywords = mapping(object).map((value) => value.toLowerCase().trim());
5938
- return !!mappedSearchKeywords.find((value) => value.includes(search.toLowerCase().trim()));
5939
- });
5940
- };
5941
- var SimpleSearchWithMapping = (search, objects, mapping) => {
5942
- return MultiSearchWithMapping(search, objects, (value) => [mapping(value)]);
5943
- };
5944
- var SimpleSearch = (search, objects) => {
5945
- return SimpleSearchWithMapping(search, objects, (value) => value);
5946
- };
5947
-
5948
6127
  // src/components/user-action/Input.tsx
5949
6128
  var import_react13 = require("react");
5950
6129
  var import_clsx23 = __toESM(require("clsx"));
@@ -6123,15 +6302,64 @@ var FormInput = (0, import_react13.forwardRef)(function FormInput2({
6123
6302
  ] });
6124
6303
  });
6125
6304
 
6305
+ // src/hooks/useSearch.ts
6306
+ var import_react14 = require("react");
6307
+
6308
+ // src/util/simpleSearch.ts
6309
+ var MultiSubjectSearchWithMapping = (search, objects, mapping) => {
6310
+ return objects.filter((object) => {
6311
+ const mappedSearchKeywords = mapping(object).map((value) => value ? value.toLowerCase().trim() : void 0);
6312
+ return search.every((searchValue) => !!mappedSearchKeywords.find((value) => !!value && value.includes(searchValue.toLowerCase().trim())));
6313
+ });
6314
+ };
6315
+ var MultiSearchWithMapping = (search, objects, mapping) => {
6316
+ return objects.filter((object) => {
6317
+ const mappedSearchKeywords = mapping(object)?.map((value) => value.toLowerCase().trim());
6318
+ if (!mappedSearchKeywords) {
6319
+ return true;
6320
+ }
6321
+ return !!mappedSearchKeywords.find((value) => value.includes(search.toLowerCase().trim()));
6322
+ });
6323
+ };
6324
+ var SimpleSearchWithMapping = (search, objects, mapping) => {
6325
+ return MultiSearchWithMapping(search, objects, (value) => [mapping(value)]);
6326
+ };
6327
+ var SimpleSearch = (search, objects) => {
6328
+ return SimpleSearchWithMapping(search, objects, (value) => value);
6329
+ };
6330
+
6331
+ // src/hooks/useSearch.ts
6332
+ var useSearch = ({
6333
+ list,
6334
+ initialSearch,
6335
+ searchMapping
6336
+ }) => {
6337
+ const [items, setItems] = (0, import_react14.useState)(list);
6338
+ const [search, setSearch] = (0, import_react14.useState)(initialSearch);
6339
+ (0, import_react14.useEffect)(() => {
6340
+ setItems(list);
6341
+ }, [list]);
6342
+ const result = (0, import_react14.useMemo)(
6343
+ () => MultiSearchWithMapping(search, items, searchMapping),
6344
+ [search, items, searchMapping]
6345
+ );
6346
+ return {
6347
+ result,
6348
+ hasResult: result.length > 0,
6349
+ allItems: items,
6350
+ setItems,
6351
+ search,
6352
+ setSearch
6353
+ };
6354
+ };
6355
+
6126
6356
  // src/components/layout-and-navigation/SearchableList.tsx
6127
6357
  var import_jsx_runtime28 = require("react/jsx-runtime");
6128
6358
  var defaultSearchableListTranslation = {
6129
6359
  en: {
6130
- search: "Search",
6131
6360
  nothingFound: "Nothing found"
6132
6361
  },
6133
6362
  de: {
6134
- search: "Suche",
6135
6363
  nothingFound: "Nichts gefunden"
6136
6364
  }
6137
6365
  };
@@ -6140,40 +6368,37 @@ var SearchableList = ({
6140
6368
  list,
6141
6369
  initialSearch = "",
6142
6370
  searchMapping,
6371
+ autoFocus,
6372
+ minimumItemsForSearch = 6,
6143
6373
  itemMapper,
6144
- className
6374
+ className,
6375
+ resultListClassName
6145
6376
  }) => {
6146
- const translation = useTranslation(defaultSearchableListTranslation, overwriteTranslation);
6147
- const [search, setSearch] = (0, import_react14.useState)(initialSearch);
6148
- (0, import_react14.useEffect)(() => setSearch(initialSearch), [initialSearch]);
6149
- const filteredEntries = (0, import_react14.useMemo)(() => MultiSearchWithMapping(search, list, searchMapping), [search, list, searchMapping]);
6377
+ const translation = useTranslation([defaultSearchableListTranslation, formTranslation], overwriteTranslation);
6378
+ const { result, hasResult, search, setSearch } = useSearch({ list, initialSearch, searchMapping });
6150
6379
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: (0, import_clsx24.default)("col gap-y-2", className), children: [
6151
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "row justify-between gap-x-2 items-center", children: [
6152
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Input, { value: search, onChangeText: setSearch, placeholder: translation.search }) }),
6153
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react7.Search, { size: 20 })
6380
+ list.length > minimumItemsForSearch && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "row justify-between gap-x-4 items-center", children: [
6381
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
6382
+ Input,
6383
+ {
6384
+ value: search,
6385
+ onChangeText: setSearch,
6386
+ placeholder: translation("search"),
6387
+ autoFocus,
6388
+ className: "w-full"
6389
+ }
6390
+ ),
6391
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(IconButton, { color: "neutral", disabled: search.length === 0, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react8.Search, { className: "w-full h-full" }) })
6154
6392
  ] }),
6155
- filteredEntries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "col gap-y-1", children: filteredEntries.map(itemMapper) }),
6156
- !filteredEntries.length && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "row justify-center", children: translation.nothingFound })
6393
+ hasResult ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: (0, import_clsx24.default)("col gap-y-1", resultListClassName), children: result.map(itemMapper) }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "row text-description py-2 px-2", children: translation("nothingFound") })
6157
6394
  ] });
6158
6395
  };
6159
6396
 
6160
6397
  // src/components/layout-and-navigation/StepperBar.tsx
6161
- var import_lucide_react8 = require("lucide-react");
6398
+ var import_lucide_react9 = require("lucide-react");
6162
6399
  var import_clsx25 = __toESM(require("clsx"));
6163
6400
  var import_react15 = require("react");
6164
6401
  var import_jsx_runtime29 = require("react/jsx-runtime");
6165
- var defaultStepperBarTranslation = {
6166
- en: {
6167
- back: "Back",
6168
- next: "Next Step",
6169
- confirm: "Create"
6170
- },
6171
- de: {
6172
- back: "Zur\xFCck",
6173
- next: "N\xE4chster Schritt",
6174
- confirm: "Erstellen"
6175
- }
6176
- };
6177
6402
  var defaultState = {
6178
6403
  currentStep: 0,
6179
6404
  seenSteps: /* @__PURE__ */ new Set([0])
@@ -6189,7 +6414,7 @@ var StepperBar = ({
6189
6414
  showDots = true,
6190
6415
  className = ""
6191
6416
  }) => {
6192
- const translation = useTranslation(defaultStepperBarTranslation, overwriteTranslation);
6417
+ const translation = useTranslation([formTranslation], overwriteTranslation);
6193
6418
  const dots = range(0, numberOfSteps);
6194
6419
  const { currentStep, seenSteps } = state ?? defaultState;
6195
6420
  const update = (newStep) => {
@@ -6210,8 +6435,8 @@ var StepperBar = ({
6210
6435
  },
6211
6436
  className: "row gap-x-1 items-center justify-center",
6212
6437
  children: [
6213
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react8.ChevronLeft, { size: 14 }),
6214
- translation.back
6438
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.ChevronLeft, { size: 14 }),
6439
+ translation("back")
6215
6440
  ]
6216
6441
  }
6217
6442
  ) }),
@@ -6224,9 +6449,9 @@ var StepperBar = ({
6224
6449
  className: (0, import_clsx25.default)(
6225
6450
  "rounded-full w-4 h-4",
6226
6451
  {
6227
- "bg-primary hover:brightness-75": index === currentStep && seen && !disabledSteps.has(currentStep),
6228
- "bg-primary/40 hover:bg-primary": index !== currentStep && seen && !disabledSteps.has(currentStep),
6229
- "bg-gray-200 outline-transparent": !seen || disabledSteps.has(currentStep)
6452
+ "bg-stepperbar-dot-active hover:brightness-75": index === currentStep && seen && !disabledSteps.has(currentStep),
6453
+ "bg-stepperbar-dot-normal hover:bg-stepperbar-dot-active": index !== currentStep && seen && !disabledSteps.has(currentStep),
6454
+ "bg-stepperbar-dot-disabled": !seen || disabledSteps.has(currentStep)
6230
6455
  },
6231
6456
  {
6232
6457
  "cursor-pointer": seen,
@@ -6244,8 +6469,8 @@ var StepperBar = ({
6244
6469
  className: "row gap-x-1 items-center justify-center",
6245
6470
  disabled: disabledSteps.has(currentStep),
6246
6471
  children: [
6247
- translation.next,
6248
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react8.ChevronRight, { size: 14 })
6472
+ translation("next"),
6473
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.ChevronRight, { size: 14 })
6249
6474
  ]
6250
6475
  }
6251
6476
  ) }),
@@ -6256,8 +6481,8 @@ var StepperBar = ({
6256
6481
  onClick: onFinish,
6257
6482
  className: "row gap-x-1 items-center justify-center",
6258
6483
  children: [
6259
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react8.Check, { size: 14 }),
6260
- finishText ?? translation.confirm
6484
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.Check, { size: 14 }),
6485
+ finishText ?? translation("confirm")
6261
6486
  ]
6262
6487
  }
6263
6488
  ) })
@@ -6290,7 +6515,7 @@ var import_react_custom_scrollbars_23 = require("react-custom-scrollbars-2");
6290
6515
  // src/components/user-action/Checkbox.tsx
6291
6516
  var import_react16 = require("react");
6292
6517
  var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"));
6293
- var import_lucide_react9 = require("lucide-react");
6518
+ var import_lucide_react10 = require("lucide-react");
6294
6519
  var import_clsx26 = __toESM(require("clsx"));
6295
6520
  var import_jsx_runtime30 = require("react/jsx-runtime");
6296
6521
  var checkboxSizeMapping = {
@@ -6343,8 +6568,8 @@ var Checkbox = ({
6343
6568
  "hover:border-primary focus:hover:border-primary": !checked
6344
6569
  }, className),
6345
6570
  children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(CheckboxPrimitive.Indicator, { children: [
6346
- checked === true && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react9.Check, { className: innerIconSize }),
6347
- checked === "indeterminate" && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react9.Minus, { className: innerIconSize })
6571
+ checked === true && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react10.Check, { className: innerIconSize }),
6572
+ checked === "indeterminate" && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react10.Minus, { className: innerIconSize })
6348
6573
  ] })
6349
6574
  }
6350
6575
  ),
@@ -6387,7 +6612,7 @@ var CheckboxUncontrolled = ({
6387
6612
 
6388
6613
  // src/components/layout-and-navigation/Table.tsx
6389
6614
  var import_clsx27 = __toESM(require("clsx"));
6390
- var import_lucide_react10 = require("lucide-react");
6615
+ var import_lucide_react11 = require("lucide-react");
6391
6616
  var import_jsx_runtime31 = require("react/jsx-runtime");
6392
6617
  var defaultTableStatePagination = {
6393
6618
  currentPage: 0,
@@ -6536,7 +6761,7 @@ var Table = ({
6536
6761
  } else {
6537
6762
  currentPage = 0;
6538
6763
  }
6539
- const headerRow = "border-b-2 border-gray-300";
6764
+ const headerRow = "border-b-2";
6540
6765
  const headerPaddingHead = "pb-2";
6541
6766
  const headerPaddingBody = "pt-2";
6542
6767
  const cellPadding = "py-1 px-2";
@@ -6612,7 +6837,7 @@ var SortButton = ({
6612
6837
  ...buttonProps,
6613
6838
  children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "row gap-x-2", children: [
6614
6839
  children,
6615
- ascending === "ascending" ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react10.ChevronUp, {}) : !ascending ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react10.ChevronsUpDown, {}) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react10.ChevronDown, {})
6840
+ ascending === "ascending" ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react11.ChevronUp, {}) : !ascending ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react11.ChevronsUpDown, {}) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react11.ChevronDown, {})
6616
6841
  ] })
6617
6842
  }
6618
6843
  );
@@ -6621,14 +6846,6 @@ var SortButton = ({
6621
6846
  // src/components/layout-and-navigation/TextImage.tsx
6622
6847
  var import_clsx28 = __toESM(require("clsx"));
6623
6848
  var import_jsx_runtime32 = require("react/jsx-runtime");
6624
- var defaultTextImageTranslation = {
6625
- de: {
6626
- showMore: "Mehr anzeigen"
6627
- },
6628
- en: {
6629
- showMore: "Show more"
6630
- }
6631
- };
6632
6849
  var TextImage = ({
6633
6850
  overwriteTranslation,
6634
6851
  title,
@@ -6640,11 +6857,11 @@ var TextImage = ({
6640
6857
  contentClassName = "",
6641
6858
  className = ""
6642
6859
  }) => {
6643
- const translation = useTranslation(defaultTextImageTranslation, overwriteTranslation);
6860
+ const translation = useTranslation([formTranslation], overwriteTranslation);
6644
6861
  const chipColorMapping = {
6645
- primary: "text-text-image-primary-background bg-text-text-image-primary-text",
6646
- secondary: "text-text-image-secondary-background bg-text-text-image-secondary-text",
6647
- dark: "text-text-image-dark-background bg-text-text-image-dark-text"
6862
+ primary: "text-text-image-primary-background bg-text-image-primary-text",
6863
+ secondary: "text-text-image-secondary-background bg-text-image-secondary-text",
6864
+ dark: "text-text-image-dark-background bg-text-image-dark-text"
6648
6865
  };
6649
6866
  const colorMapping = {
6650
6867
  primary: "text-text-image-primary-text bg-linear-to-r from-30% from-text-image-primary-background to-text-image-primary-background/55",
@@ -6664,12 +6881,12 @@ var TextImage = ({
6664
6881
  {
6665
6882
  className: (0, import_clsx28.default)(`col px-6 py-12 rounded-2xl h-full`, colorMapping[color], contentClassName),
6666
6883
  children: [
6667
- badge && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: (0, import_clsx28.default)(`chip-full bg-white mb-2 py-2 px-4 w-fit`, chipColorMapping[color]), children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-lg font-bold", children: badge }) }),
6668
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "col gap-y-1 text-white overflow-hidden", children: [
6884
+ badge && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: (0, import_clsx28.default)(`chip-full mb-2 py-2 px-4 w-fit`, chipColorMapping[color]), children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-lg font-bold", children: badge }) }),
6885
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "col gap-y-1 overflow-hidden", children: [
6669
6886
  /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "textstyle-title-xl", children: title }),
6670
6887
  /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-ellipsis overflow-hidden", children: description })
6671
6888
  ] }),
6672
- onShowMoreClicked && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "row mt-2 text-white underline", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("button", { onClick: onShowMoreClicked, children: translation.showMore }) })
6889
+ onShowMoreClicked && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "row mt-2 underline", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("button", { onClick: onShowMoreClicked, children: translation("showMore") }) })
6673
6890
  ]
6674
6891
  }
6675
6892
  )
@@ -6731,7 +6948,7 @@ var VerticalDivider = ({
6731
6948
  };
6732
6949
 
6733
6950
  // src/components/loading-states/ErrorComponent.tsx
6734
- var import_lucide_react11 = require("lucide-react");
6951
+ var import_lucide_react12 = require("lucide-react");
6735
6952
  var import_clsx29 = __toESM(require("clsx"));
6736
6953
  var import_jsx_runtime34 = require("react/jsx-runtime");
6737
6954
  var defaultErrorComponentTranslation = {
@@ -6747,10 +6964,10 @@ var ErrorComponent = ({
6747
6964
  errorText,
6748
6965
  classname
6749
6966
  }) => {
6750
- const translation = useTranslation(defaultErrorComponentTranslation, overwriteTranslation);
6967
+ const translation = useTranslation([defaultErrorComponentTranslation], overwriteTranslation);
6751
6968
  return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: (0, import_clsx29.default)("col items-center justify-center gap-y-4 w-full h-24", classname), children: [
6752
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react11.AlertOctagon, { size: 64, className: "text-warning" }),
6753
- errorText ?? `${translation.errorOccurred} :(`
6969
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react12.AlertOctagon, { size: 64, className: "text-warning" }),
6970
+ errorText ?? `${translation("errorOccurred")} :(`
6754
6971
  ] });
6755
6972
  };
6756
6973
 
@@ -6760,23 +6977,15 @@ var import_react18 = require("react");
6760
6977
  // src/components/loading-states/LoadingAnimation.tsx
6761
6978
  var import_clsx30 = __toESM(require("clsx"));
6762
6979
  var import_jsx_runtime35 = require("react/jsx-runtime");
6763
- var defaultLoadingAnimationTranslation = {
6764
- en: {
6765
- loading: "Loading data"
6766
- },
6767
- de: {
6768
- loading: "Lade Daten"
6769
- }
6770
- };
6771
6980
  var LoadingAnimation = ({
6772
6981
  overwriteTranslation,
6773
6982
  loadingText,
6774
6983
  classname
6775
6984
  }) => {
6776
- const translation = useTranslation(defaultLoadingAnimationTranslation, overwriteTranslation);
6985
+ const translation = useTranslation([formTranslation], overwriteTranslation);
6777
6986
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: (0, import_clsx30.default)("col items-center justify-center w-full h-24", classname), children: [
6778
6987
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Helpwave, { animate: "loading" }),
6779
- loadingText ?? `${translation.loading}...`
6988
+ loadingText ?? `${translation("loading")}...`
6780
6989
  ] });
6781
6990
  };
6782
6991
 
@@ -6854,7 +7063,7 @@ var ProgressIndicator = ({
6854
7063
  r: radius,
6855
7064
  fill: "transparent",
6856
7065
  strokeWidth,
6857
- className: "stroke-primary"
7066
+ className: "stroke-progress-indicator-fill"
6858
7067
  }
6859
7068
  ),
6860
7069
  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
@@ -6867,7 +7076,7 @@ var ProgressIndicator = ({
6867
7076
  strokeWidth,
6868
7077
  strokeDasharray: arcLength,
6869
7078
  strokeDashoffset: arcOffset,
6870
- className: "stroke-gray-300"
7079
+ className: "stroke-progress-indicator-background"
6871
7080
  }
6872
7081
  )
6873
7082
  ]
@@ -6878,18 +7087,6 @@ var ProgressIndicator = ({
6878
7087
  // src/components/modals/ConfirmModal.tsx
6879
7088
  var import_clsx32 = __toESM(require("clsx"));
6880
7089
  var import_jsx_runtime39 = require("react/jsx-runtime");
6881
- var defaultConfirmDialogTranslation2 = {
6882
- en: {
6883
- confirm: "Confirm",
6884
- cancel: "Cancel",
6885
- decline: "Decline"
6886
- },
6887
- de: {
6888
- confirm: "Best\xE4tigen",
6889
- cancel: "Abbrechen",
6890
- decline: "Ablehnen"
6891
- }
6892
- };
6893
7090
  var ConfirmModal = ({
6894
7091
  overwriteTranslation,
6895
7092
  children,
@@ -6901,7 +7098,7 @@ var ConfirmModal = ({
6901
7098
  className,
6902
7099
  ...restProps
6903
7100
  }) => {
6904
- const translation = useTranslation(defaultConfirmDialogTranslation2, overwriteTranslation);
7101
+ const translation = useTranslation([formTranslation], overwriteTranslation);
6905
7102
  const mapping = {
6906
7103
  neutral: "neutral",
6907
7104
  negative: "negative",
@@ -6917,7 +7114,7 @@ var ConfirmModal = ({
6917
7114
  color: buttonOverwrites?.[0].color ?? "neutral",
6918
7115
  onClick: onCancel,
6919
7116
  disabled: buttonOverwrites?.[0].disabled ?? false,
6920
- children: buttonOverwrites?.[0].text ?? translation.cancel
7117
+ children: buttonOverwrites?.[0].text ?? translation("cancel")
6921
7118
  }
6922
7119
  ),
6923
7120
  onDecline && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
@@ -6926,7 +7123,7 @@ var ConfirmModal = ({
6926
7123
  color: buttonOverwrites?.[1].color ?? "negative",
6927
7124
  onClick: onDecline,
6928
7125
  disabled: buttonOverwrites?.[1].disabled ?? false,
6929
- children: buttonOverwrites?.[1].text ?? translation.decline
7126
+ children: buttonOverwrites?.[1].text ?? translation("decline")
6930
7127
  }
6931
7128
  ),
6932
7129
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
@@ -6936,7 +7133,7 @@ var ConfirmModal = ({
6936
7133
  color: buttonOverwrites?.[2].color ?? mapping[confirmType],
6937
7134
  onClick: onConfirm,
6938
7135
  disabled: buttonOverwrites?.[2].disabled ?? false,
6939
- children: buttonOverwrites?.[2].text ?? translation.confirm
7136
+ children: buttonOverwrites?.[2].text ?? translation("confirm")
6940
7137
  }
6941
7138
  )
6942
7139
  ] })
@@ -6945,22 +7142,6 @@ var ConfirmModal = ({
6945
7142
 
6946
7143
  // src/components/modals/DiscardChangesModal.tsx
6947
7144
  var import_jsx_runtime40 = require("react/jsx-runtime");
6948
- var defaultDiscardChangesModalTranslation = {
6949
- en: {
6950
- save: "Save",
6951
- cancel: "Cancel",
6952
- dontSave: "Don't save",
6953
- title: "Unsaved Changes",
6954
- description: "Do you want to save your changes?"
6955
- },
6956
- de: {
6957
- save: "Speichern",
6958
- cancel: "Abbrechen",
6959
- dontSave: "Nicht Speichern",
6960
- title: "Ungespeicherte \xC4nderungen",
6961
- description: "M\xF6chtest du die \xC4nderungen speichern?"
6962
- }
6963
- };
6964
7145
  var DiscardChangesModal = ({
6965
7146
  overwriteTranslation,
6966
7147
  children,
@@ -6970,19 +7151,19 @@ var DiscardChangesModal = ({
6970
7151
  headerProps,
6971
7152
  ...modalProps
6972
7153
  }) => {
6973
- const translation = useTranslation(defaultDiscardChangesModalTranslation, overwriteTranslation);
7154
+ const translation = useTranslation([formTranslation], overwriteTranslation);
6974
7155
  return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
6975
7156
  ConfirmModal,
6976
7157
  {
6977
7158
  headerProps: {
6978
7159
  ...headerProps,
6979
- titleText: headerProps?.titleText ?? translation.title,
6980
- descriptionText: headerProps?.descriptionText ?? translation.description
7160
+ titleText: headerProps?.titleText ?? translation("unsavedChanges"),
7161
+ descriptionText: headerProps?.descriptionText ?? translation("unsavedChangesSaveQuestion")
6981
7162
  },
6982
7163
  onConfirm: onSave,
6983
7164
  onCancel,
6984
7165
  onDecline: onDontSave,
6985
- buttonOverwrites: [{ text: translation.cancel }, { text: translation.dontSave }, { text: translation.save }],
7166
+ buttonOverwrites: [{ text: translation("cancel") }, { text: translation("discardChanges") }, { text: translation("save") }],
6986
7167
  ...modalProps,
6987
7168
  children
6988
7169
  }
@@ -7007,99 +7188,107 @@ var InputModal = ({
7007
7188
  };
7008
7189
 
7009
7190
  // src/components/user-action/Select.tsx
7010
- var import_react19 = require("@headlessui/react");
7011
- var import_lucide_react12 = require("lucide-react");
7191
+ var import_lucide_react13 = require("lucide-react");
7012
7192
  var import_react20 = require("react");
7013
7193
  var import_clsx33 = __toESM(require("clsx"));
7014
- var import_jsx_runtime42 = require("react/jsx-runtime");
7015
- var Select = ({
7016
- value,
7017
- label,
7018
- options,
7019
- onChange,
7020
- isHidingCurrentValue = true,
7194
+
7195
+ // src/hooks/useOutsideClick.ts
7196
+ var import_react19 = require("react");
7197
+ var useOutsideClick = (refs, handler) => {
7198
+ (0, import_react19.useEffect)(() => {
7199
+ const listener = (event) => {
7200
+ if (event.target === null) return;
7201
+ if (refs.some((ref) => !ref.current || ref.current.contains(event.target))) {
7202
+ return;
7203
+ }
7204
+ handler();
7205
+ };
7206
+ document.addEventListener("mousedown", listener);
7207
+ document.addEventListener("touchstart", listener);
7208
+ return () => {
7209
+ document.removeEventListener("mousedown", listener);
7210
+ document.removeEventListener("touchstart", listener);
7211
+ };
7212
+ }, [refs, handler]);
7213
+ };
7214
+
7215
+ // src/components/user-action/Select.tsx
7216
+ var import_jsx_runtime42 = require("react/jsx-runtime");
7217
+ var Select = ({
7218
+ value,
7219
+ label,
7220
+ options,
7221
+ onChange,
7021
7222
  hintText = "",
7022
- showDisabledOptions = true,
7023
7223
  isDisabled,
7224
+ isSearchEnabled = false,
7024
7225
  className,
7025
- textColor = "text-menu-text",
7026
- additionalItems,
7027
7226
  selectedDisplayOverwrite
7028
7227
  }) => {
7029
- let filteredOptions = isHidingCurrentValue ? options.filter((option) => option.value !== value) : options;
7030
- if (!showDisabledOptions) {
7031
- filteredOptions = filteredOptions.filter((value2) => !value2.disabled);
7032
- }
7228
+ const triggerRef = (0, import_react20.useRef)(null);
7229
+ const menuRef = (0, import_react20.useRef)(null);
7230
+ const [isOpen, setIsOpen] = (0, import_react20.useState)(false);
7231
+ useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
7033
7232
  const selectedOption = options.find((option) => option.value === value);
7034
7233
  if (value !== void 0 && selectedOption === void 0 && selectedDisplayOverwrite === void 0) {
7035
7234
  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");
7036
7235
  }
7037
- const borderColor = "border-menu-border";
7236
+ const isShowingHint = !selectedDisplayOverwrite && !selectedOption?.label;
7038
7237
  return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: (0, import_clsx33.default)(className), children: [
7039
7238
  label && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Label, { ...label, labelType: label.labelType ?? "labelBig", className: (0, import_clsx33.default)("mb-1", label.className) }),
7040
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react19.Menu, { as: "div", className: "relative text-menu-text", children: ({ open }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
7239
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "relative", children: [
7041
7240
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
7042
- import_react19.Menu.Button,
7241
+ "button",
7043
7242
  {
7243
+ ref: triggerRef,
7044
7244
  className: (0, import_clsx33.default)(
7045
- "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",
7046
- textColor,
7047
- borderColor,
7245
+ "btn-md justify-between w-full border-2",
7048
7246
  {
7049
7247
  "rounded-b-lg": !open,
7050
- "hover:border-primary": !isDisabled,
7051
- "bg-disabled-background cursor-not-allowed text-disabled": isDisabled
7248
+ "bg-menu-background border-menu-border hover:border-primary": !isDisabled,
7249
+ "bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed": isDisabled
7052
7250
  }
7053
7251
  ),
7252
+ onClick: () => setIsOpen(!isOpen),
7054
7253
  disabled: isDisabled,
7055
7254
  children: [
7056
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { children: selectedDisplayOverwrite ?? selectedOption?.label ?? hintText }),
7057
- open ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react12.ChevronUp, {}) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react12.ChevronDown, {})
7255
+ !isShowingHint && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "font-semibold text-menu-text", children: selectedDisplayOverwrite ?? selectedOption?.label }),
7256
+ isShowingHint && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "textstyle-description", children: hintText }),
7257
+ isOpen ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.ChevronUp, {}) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.ChevronDown, {})
7058
7258
  ]
7059
7259
  }
7060
7260
  ),
7061
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
7062
- import_react19.Menu.Items,
7261
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7262
+ "div",
7063
7263
  {
7064
- className: "absolute w-full z-10 rounded-b-lg bg-menu-background text-menu-text shadow-lg max-h-[500px] overflow-y-auto",
7065
- children: [
7066
- (additionalItems ?? []).map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7067
- "div",
7068
- {
7069
- className: (0, import_clsx33.default)(borderColor, "px-4 py-2 overflow-hidden whitespace-nowrap text-ellipsis border-2 border-t-0", {
7070
- "border-b-0 rounded-b-lg": filteredOptions.length === 0 && index === (additionalItems?.length ?? 1) - 1
7071
- }),
7072
- children: item
7073
- },
7074
- `additionalItems${index}`
7075
- )),
7076
- filteredOptions.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react19.Menu.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7077
- "div",
7078
- {
7079
- className: (0, import_clsx33.default)(
7080
- "px-4 py-2 overflow-hidden whitespace-nowrap text-ellipsis border-2 border-t-0 cursor-pointer",
7081
- option.className,
7082
- borderColor,
7083
- {
7084
- "brightness-90": option.value === value,
7085
- "brightness-95": index % 2 === 1,
7086
- "text-disabled bg-disabled-background cursor-not-allowed": !!option.disabled,
7087
- "bg-menu-background text-menu-text hover:brightness-90 cursor-pointer": !option.disabled,
7088
- "rounded-b-lg": index === filteredOptions.length - 1
7089
- }
7090
- ),
7091
- onClick: () => {
7092
- if (!option.disabled) {
7264
+ ref: menuRef,
7265
+ 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",
7266
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7267
+ SearchableList,
7268
+ {
7269
+ list: options,
7270
+ minimumItemsForSearch: isSearchEnabled ? void 0 : options.length,
7271
+ searchMapping: (item) => item.searchTags,
7272
+ itemMapper: (option, index) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7273
+ Tile,
7274
+ {
7275
+ isSelected: selectedOption?.value === option.value,
7276
+ className: "px-2 py-1 rounded-md",
7277
+ disabledClassName: "text-disabled-text cursor-not-allowed",
7278
+ title: { value: option.label, className: "font-semibold" },
7279
+ onClick: () => {
7093
7280
  onChange(option.value);
7094
- }
7281
+ setIsOpen(false);
7282
+ },
7283
+ isDisabled: option.disabled
7095
7284
  },
7096
- children: option.label
7097
- }
7098
- ) }, `item${index}`))
7099
- ]
7285
+ index
7286
+ )
7287
+ }
7288
+ )
7100
7289
  }
7101
7290
  )
7102
- ] }) })
7291
+ ] })
7103
7292
  ] });
7104
7293
  };
7105
7294
  var SelectUncontrolled = ({
@@ -7129,40 +7318,19 @@ var SelectUncontrolled = ({
7129
7318
  }
7130
7319
  );
7131
7320
  };
7132
- var SearchableSelect = ({
7133
- value,
7134
- options,
7135
- searchMapping,
7136
- ...selectProps
7137
- }) => {
7138
- const [search, setSearch] = (0, import_react20.useState)("");
7139
- const filteredOptions = MultiSearchWithMapping(search, options, searchMapping);
7140
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7141
- Select,
7142
- {
7143
- value,
7144
- options: filteredOptions,
7145
- additionalItems: [/* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "row gap-x-2 items-center", children: [
7146
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Input, { autoFocus: true, value: search, onChangeText: setSearch, className: "w-full" }),
7147
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react12.Search, { className: "min-w-[1.5rem] min-h-[1.5rem]" })
7148
- ] }, "selectSearch")],
7149
- ...selectProps
7150
- }
7151
- );
7152
- };
7153
7321
 
7154
7322
  // src/components/modals/LanguageModal.tsx
7155
7323
  var import_jsx_runtime43 = require("react/jsx-runtime");
7156
7324
  var defaultLanguageModalTranslation = {
7157
7325
  en: {
7158
- title: "Language",
7159
- message: "Choose your language",
7326
+ language: "Language",
7327
+ chooseLanguage: "Choose your language",
7160
7328
  done: "Done",
7161
7329
  ...LanguageUtil.languagesLocalNames
7162
7330
  },
7163
7331
  de: {
7164
- title: "Sprache",
7165
- message: "W\xE4hle deine bevorzugte Sprache",
7332
+ language: "Sprache",
7333
+ chooseLanguage: "W\xE4hle deine bevorzugte Sprache",
7166
7334
  done: "Fertig",
7167
7335
  ...LanguageUtil.languagesLocalNames
7168
7336
  }
@@ -7174,14 +7342,14 @@ var LanguageModal = ({
7174
7342
  ...modalProps
7175
7343
  }) => {
7176
7344
  const { language, setLanguage } = useLanguage();
7177
- const translation = useTranslation(defaultLanguageModalTranslation, overwriteTranslation);
7345
+ const translation = useTranslation([defaultLanguageModalTranslation], overwriteTranslation);
7178
7346
  return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
7179
7347
  Modal,
7180
7348
  {
7181
7349
  headerProps: {
7182
7350
  ...headerProps,
7183
- titleText: headerProps?.titleText ?? translation.title,
7184
- descriptionText: headerProps?.descriptionText ?? translation.message
7351
+ titleText: headerProps?.titleText ?? translation("language"),
7352
+ descriptionText: headerProps?.descriptionText ?? translation("chooseLanguage")
7185
7353
  },
7186
7354
  onClose,
7187
7355
  ...modalProps,
@@ -7195,7 +7363,7 @@ var LanguageModal = ({
7195
7363
  onChange: (language2) => setLanguage(language2)
7196
7364
  }
7197
7365
  ),
7198
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "row mt-3 gap-x-4 justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SolidButton, { autoFocus: true, color: "positive", onClick: onClose, children: translation.done }) })
7366
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "row mt-3 gap-x-4 justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SolidButton, { autoFocus: true, color: "positive", onClick: onClose, children: translation("done") }) })
7199
7367
  ] })
7200
7368
  }
7201
7369
  );
@@ -7208,11 +7376,19 @@ var themes = ["light", "dark"];
7208
7376
  var defaultThemeTypeTranslation = {
7209
7377
  en: {
7210
7378
  dark: "Dark",
7211
- light: "Light"
7379
+ light: "Light",
7380
+ theme: {
7381
+ one: "Theme",
7382
+ other: "Themes"
7383
+ }
7212
7384
  },
7213
7385
  de: {
7214
7386
  dark: "Dunkel",
7215
- light: "Hell"
7387
+ light: "Hell",
7388
+ theme: {
7389
+ one: "Farbschema",
7390
+ other: "Farbschemas"
7391
+ }
7216
7392
  }
7217
7393
  };
7218
7394
  var ThemeUtil = {
@@ -7240,18 +7416,12 @@ var useTheme = () => (0, import_react21.useContext)(ThemeContext);
7240
7416
 
7241
7417
  // src/components/modals/ThemeModal.tsx
7242
7418
  var import_jsx_runtime45 = require("react/jsx-runtime");
7243
- var defaultConfirmDialogTranslation3 = {
7419
+ var defaultConfirmDialogTranslation = {
7244
7420
  en: {
7245
- title: "Theme",
7246
- message: "Choose your preferred theme",
7247
- done: "Done",
7248
- ...ThemeUtil.translation.en
7421
+ chooseTheme: "Choose your preferred theme"
7249
7422
  },
7250
7423
  de: {
7251
- title: "Farbschema",
7252
- message: "W\xE4hle dein bevorzugtes Farbschema",
7253
- done: "Fertig",
7254
- ...ThemeUtil.translation.en
7424
+ chooseTheme: "W\xE4hle dein bevorzugtes Farbschema"
7255
7425
  }
7256
7426
  };
7257
7427
  var ThemeModal = ({
@@ -7261,14 +7431,14 @@ var ThemeModal = ({
7261
7431
  ...modalProps
7262
7432
  }) => {
7263
7433
  const { theme, setTheme } = useTheme();
7264
- const translation = useTranslation(defaultConfirmDialogTranslation3, overwriteTranslation);
7434
+ const translation = useTranslation([defaultConfirmDialogTranslation, formTranslation, ThemeUtil.translation], overwriteTranslation);
7265
7435
  return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7266
7436
  Modal,
7267
7437
  {
7268
7438
  headerProps: {
7269
7439
  ...headerProps,
7270
- titleText: headerProps?.titleText ?? translation.title,
7271
- descriptionText: headerProps?.descriptionText ?? translation.message
7440
+ titleText: headerProps?.titleText ?? translation("theme"),
7441
+ descriptionText: headerProps?.descriptionText ?? translation("chooseTheme")
7272
7442
  },
7273
7443
  onClose,
7274
7444
  ...modalProps,
@@ -7282,27 +7452,19 @@ var ThemeModal = ({
7282
7452
  onChange: (theme2) => setTheme(theme2)
7283
7453
  }
7284
7454
  ),
7285
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "row mt-3 gap-x-4 justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(SolidButton, { autoFocus: true, color: "positive", onClick: onClose, children: translation.done }) })
7455
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "row mt-3 gap-x-4 justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(SolidButton, { autoFocus: true, color: "positive", onClick: onClose, children: translation("done") }) })
7286
7456
  ] })
7287
7457
  }
7288
7458
  );
7289
7459
  };
7290
7460
 
7291
7461
  // src/components/properties/CheckboxProperty.tsx
7292
- var import_lucide_react14 = require("lucide-react");
7462
+ var import_lucide_react15 = require("lucide-react");
7293
7463
 
7294
7464
  // src/components/properties/PropertyBase.tsx
7295
- var import_lucide_react13 = require("lucide-react");
7465
+ var import_lucide_react14 = require("lucide-react");
7296
7466
  var import_clsx34 = __toESM(require("clsx"));
7297
7467
  var import_jsx_runtime46 = require("react/jsx-runtime");
7298
- var defaultPropertyBaseTranslation = {
7299
- en: {
7300
- remove: "Remove"
7301
- },
7302
- de: {
7303
- remove: "Entfernen"
7304
- }
7305
- };
7306
7468
  var PropertyBase = ({
7307
7469
  overwriteTranslation,
7308
7470
  name,
@@ -7314,7 +7476,7 @@ var PropertyBase = ({
7314
7476
  onRemove,
7315
7477
  className = ""
7316
7478
  }) => {
7317
- const translation = useTranslation(defaultPropertyBaseTranslation, overwriteTranslation);
7479
+ const translation = useTranslation([formTranslation], overwriteTranslation);
7318
7480
  const requiredAndNoValue = softRequired && !hasValue;
7319
7481
  return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: (0, import_clsx34.default)("row gap-x-0 group", className), children: [
7320
7482
  /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
@@ -7333,13 +7495,13 @@ var PropertyBase = ({
7333
7495
  /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
7334
7496
  "div",
7335
7497
  {
7336
- className: (0, import_clsx34.default)("row grow justify-between items-center rounded-r-xl border-2 border-l-0", {
7498
+ className: (0, import_clsx34.default)("row gap-x-0 grow justify-between items-center rounded-r-xl border-2 border-l-0", {
7337
7499
  "bg-surface group-hover:border-primary": !requiredAndNoValue,
7338
7500
  "bg-surface-warning group-hover:border-warning border-warning/90": requiredAndNoValue
7339
7501
  }, className),
7340
7502
  children: [
7341
7503
  input({ softRequired, hasValue }),
7342
- requiredAndNoValue && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "text-warning pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.AlertTriangle, { size: 24 }) }),
7504
+ requiredAndNoValue && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "text-warning pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.AlertTriangle, { size: 24 }) }),
7343
7505
  onRemove && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
7344
7506
  TextButton,
7345
7507
  {
@@ -7347,7 +7509,7 @@ var PropertyBase = ({
7347
7509
  color: "negative",
7348
7510
  className: (0, import_clsx34.default)("pr-4 items-center", { "!text-transparent": !hasValue || readOnly }),
7349
7511
  disabled: !hasValue || readOnly,
7350
- children: translation.remove
7512
+ children: translation("remove")
7351
7513
  }
7352
7514
  )
7353
7515
  ]
@@ -7358,16 +7520,6 @@ var PropertyBase = ({
7358
7520
 
7359
7521
  // src/components/properties/CheckboxProperty.tsx
7360
7522
  var import_jsx_runtime47 = require("react/jsx-runtime");
7361
- var defaultCheckboxPropertyTranslation = {
7362
- en: {
7363
- yes: "Yes",
7364
- no: "No"
7365
- },
7366
- de: {
7367
- yes: "Ja",
7368
- no: "Nein"
7369
- }
7370
- };
7371
7523
  var CheckboxProperty = ({
7372
7524
  overwriteTranslation,
7373
7525
  value,
@@ -7375,21 +7527,21 @@ var CheckboxProperty = ({
7375
7527
  readOnly,
7376
7528
  ...baseProps
7377
7529
  }) => {
7378
- const translation = useTranslation(defaultCheckboxPropertyTranslation, overwriteTranslation);
7530
+ const translation = useTranslation([formTranslation], overwriteTranslation);
7379
7531
  return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7380
7532
  PropertyBase,
7381
7533
  {
7382
7534
  ...baseProps,
7383
7535
  hasValue: true,
7384
7536
  readOnly,
7385
- icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Check, { size: 16 }),
7537
+ icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.Check, { size: 16 }),
7386
7538
  input: () => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "row py-2 px-4 items-center", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7387
7539
  Checkbox,
7388
7540
  {
7389
7541
  checked: value ?? true,
7390
7542
  disabled: readOnly,
7391
7543
  onChange,
7392
- label: { name: `${translation.yes}/${translation.no}`, labelType: "labelMedium" }
7544
+ label: { name: `${translation("yes")}/${translation("no")}`, labelType: "labelMedium" }
7393
7545
  }
7394
7546
  ) })
7395
7547
  }
@@ -7397,7 +7549,7 @@ var CheckboxProperty = ({
7397
7549
  };
7398
7550
 
7399
7551
  // src/components/properties/DateProperty.tsx
7400
- var import_lucide_react15 = require("lucide-react");
7552
+ var import_lucide_react16 = require("lucide-react");
7401
7553
  var import_clsx35 = __toESM(require("clsx"));
7402
7554
  var import_jsx_runtime48 = require("react/jsx-runtime");
7403
7555
  var DateProperty = ({
@@ -7415,7 +7567,7 @@ var DateProperty = ({
7415
7567
  {
7416
7568
  ...baseProps,
7417
7569
  hasValue,
7418
- icon: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react15.CalendarDays, { size: 16 }),
7570
+ icon: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react16.CalendarDays, { size: 16 }),
7419
7571
  input: ({ softRequired }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
7420
7572
  "div",
7421
7573
  {
@@ -7446,222 +7598,168 @@ var DateProperty = ({
7446
7598
  };
7447
7599
 
7448
7600
  // src/components/properties/MultiSelectProperty.tsx
7449
- var import_lucide_react17 = require("lucide-react");
7450
- var import_clsx38 = __toESM(require("clsx"));
7451
-
7452
- // src/components/user-action/MultiSelect.tsx
7453
- var import_react24 = require("react");
7454
- var import_lucide_react16 = require("lucide-react");
7601
+ var import_lucide_react18 = require("lucide-react");
7455
7602
  var import_clsx37 = __toESM(require("clsx"));
7456
7603
 
7457
- // src/components/user-action/Menu.tsx
7458
- var import_react23 = require("react");
7459
- var import_clsx36 = __toESM(require("clsx"));
7460
-
7461
- // src/hooks/useOutsideClick.ts
7604
+ // src/components/user-action/MultiSelect.tsx
7462
7605
  var import_react22 = require("react");
7463
- var useOutsideClick = (refs, handler) => {
7464
- (0, import_react22.useEffect)(() => {
7465
- const listener = (event) => {
7466
- if (event.target === null) return;
7467
- if (refs.some((ref) => !ref.current || ref.current.contains(event.target))) {
7468
- return;
7469
- }
7470
- handler();
7471
- };
7472
- document.addEventListener("mousedown", listener);
7473
- document.addEventListener("touchstart", listener);
7474
- return () => {
7475
- document.removeEventListener("mousedown", listener);
7476
- document.removeEventListener("touchstart", listener);
7477
- };
7478
- }, [refs, handler]);
7479
- };
7480
-
7481
- // src/components/user-action/Menu.tsx
7606
+ var import_lucide_react17 = require("lucide-react");
7607
+ var import_clsx36 = __toESM(require("clsx"));
7482
7608
  var import_jsx_runtime49 = require("react/jsx-runtime");
7483
- var MenuItem = ({
7484
- children,
7485
- onClick,
7486
- alignment = "left",
7487
- className
7488
- }) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7489
- "div",
7490
- {
7491
- className: (0, import_clsx36.default)("block px-3 py-1 bg-menu-background text-menu-text hover:brightness-90", {
7492
- "text-right": alignment === "right",
7493
- "text-left": alignment === "left"
7494
- }, className),
7495
- onClick,
7496
- children
7497
- }
7498
- );
7499
- var Menu2 = ({
7500
- trigger,
7501
- children,
7502
- alignment = "tl",
7503
- showOnHover = false,
7504
- menuClassName = ""
7505
- }) => {
7506
- const { isHovered: isOpen, setIsHovered: setIsOpen, handlers } = useHoverState({ isDisabled: !showOnHover });
7507
- const triggerRef = (0, import_react23.useRef)(null);
7508
- const menuRef = (0, import_react23.useRef)(null);
7509
- useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
7510
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
7511
- "div",
7512
- {
7513
- className: "relative",
7514
- ...handlers,
7515
- children: [
7516
- trigger(() => setIsOpen(!isOpen), triggerRef),
7517
- isOpen ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7518
- "div",
7519
- {
7520
- ref: menuRef,
7521
- onClick: (e) => e.stopPropagation(),
7522
- className: (0, import_clsx36.default)("absolute top-full mt-1 py-2 w-60 rounded-lg bg-menu-background text-menu-text ring-1 ring-slate-900/5 text-sm leading-6 font-semibold shadow-md z-[1]", {
7523
- " top-[8px]": alignment[0] === "t",
7524
- " bottom-[8px]": alignment[0] === "b",
7525
- " left-[-8px]": alignment[1] === "l",
7526
- " right-[-8px]": alignment[1] === "r"
7527
- }, menuClassName),
7528
- children
7529
- }
7530
- ) : null
7531
- ]
7532
- }
7533
- );
7534
- };
7535
-
7536
- // src/components/user-action/MultiSelect.tsx
7537
- var import_jsx_runtime50 = require("react/jsx-runtime");
7538
7609
  var defaultMultiSelectTranslation = {
7539
7610
  en: {
7540
- select: "Select",
7541
- search: "Search",
7542
- selected: "selected"
7611
+ selected: `{{amount}} selected`
7543
7612
  },
7544
7613
  de: {
7545
- select: "Ausw\xE4hlen",
7546
- search: "Suche",
7547
- selected: "ausgew\xE4hlt"
7614
+ selected: `{{amount}} ausgew\xE4hlt`
7548
7615
  }
7549
7616
  };
7550
7617
  var MultiSelect = ({
7551
7618
  overwriteTranslation,
7552
7619
  options,
7553
- onChange,
7554
- search,
7555
- disabled = false,
7556
- selectedDisplay,
7557
7620
  label,
7621
+ onChange,
7558
7622
  hintText,
7559
- showDisabledOptions = true,
7560
- className = "",
7561
- triggerClassName = ""
7623
+ isDisabled = false,
7624
+ isSearchEnabled = false,
7625
+ selectedDisplayOverwrite,
7626
+ useChipDisplay = false,
7627
+ className = ""
7562
7628
  }) => {
7563
- const translation = useTranslation(defaultMultiSelectTranslation, overwriteTranslation);
7564
- const [searchText, setSearchText] = (0, import_react24.useState)(search?.initialSearch ?? "");
7565
- let filteredOptions = options;
7566
- const enableSearch = !!search;
7567
- if (enableSearch && !!searchText) {
7568
- filteredOptions = MultiSearchWithMapping(
7569
- searchText,
7570
- filteredOptions,
7571
- (value) => search.searchMapping(value)
7572
- );
7573
- }
7574
- if (!showDisabledOptions) {
7575
- filteredOptions = filteredOptions.filter((value) => !value.disabled);
7576
- }
7629
+ const translation = useTranslation([formTranslation, defaultMultiSelectTranslation], overwriteTranslation);
7630
+ const triggerRef = (0, import_react22.useRef)(null);
7631
+ const menuRef = (0, import_react22.useRef)(null);
7632
+ const [isOpen, setIsOpen] = (0, import_react22.useState)(false);
7633
+ useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
7577
7634
  const selectedItems = options.filter((value) => value.selected);
7578
- const menuButtonText = selectedItems.length === 0 ? hintText ?? translation.select : /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { children: `${selectedItems.length} ${translation.selected}` });
7579
- const borderColor = "border-menu-border";
7580
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: (0, import_clsx37.default)(className), children: [
7581
- label && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
7635
+ const isShowingHint = !selectedDisplayOverwrite && selectedItems.length === 0;
7636
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: (0, import_clsx36.default)(className), children: [
7637
+ label && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7582
7638
  Label,
7583
7639
  {
7584
7640
  ...label,
7585
7641
  htmlFor: label.name,
7586
- className: (0, import_clsx37.default)(" mb-1", label.className),
7642
+ className: (0, import_clsx36.default)(" mb-1", label.className),
7587
7643
  labelType: label.labelType ?? "labelBig"
7588
7644
  }
7589
7645
  ),
7590
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
7591
- Menu2,
7592
- {
7593
- alignment: "t_",
7594
- trigger: (onClick, ref) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
7595
- "div",
7596
- {
7597
- ref,
7598
- onClick: disabled ? void 0 : onClick,
7599
- className: (0, import_clsx37.default)(
7600
- borderColor,
7601
- "bg-menu-background text-menu-text inline-w-full justify-between items-center rounded-lg border-2 px-4 py-2 font-medium",
7602
- {
7603
- "hover:border-primary cursor-pointer": !disabled,
7604
- "bg-disabled-background text-disabled cursor-not-allowed": disabled
7605
- },
7606
- triggerClassName
7607
- ),
7608
- children: selectedDisplay ? selectedDisplay({ items: options, disabled }) : menuButtonText
7609
- }
7610
- ),
7611
- menuClassName: (0, import_clsx37.default)(
7612
- "!rounded-lg !shadow-lg !max-h-[500px] !min-w-[400px] !max-w-[70vh] !overflow-y-auto !border !border-2",
7613
- borderColor,
7614
- { "!py-0": !enableSearch, "!pb-0": enableSearch }
7615
- ),
7616
- children: [
7617
- enableSearch && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "row gap-x-2 items-center px-2 py-2", children: [
7618
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Input, { autoFocus: true, className: "w-full", value: searchText, onChangeText: setSearchText }),
7619
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react16.Search, {})
7620
- ] }, "selectSearch"),
7621
- filteredOptions.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
7622
- MenuItem,
7646
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "relative", children: [
7647
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
7648
+ "button",
7649
+ {
7650
+ ref: triggerRef,
7651
+ className: (0, import_clsx36.default)(
7652
+ "btn-md justify-between w-full border-2 h-auto",
7623
7653
  {
7624
- className: (0, import_clsx37.default)({
7625
- "cursor-not-allowed !bg-disabled-background !text-disabled-text hover:brightness-100": !!option.disabled,
7626
- "cursor-pointer": !option.disabled
7627
- }),
7628
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
7629
- "div",
7630
- {
7631
- className: (0, import_clsx37.default)("overflow-hidden whitespace-nowrap text-ellipsis row items-center gap-x-2", option.className),
7632
- onClick: () => {
7633
- if (!option.disabled) {
7654
+ "rounded-b-lg": !open,
7655
+ "bg-menu-background border-menu-border hover:border-primary": !isDisabled,
7656
+ "bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed": isDisabled
7657
+ }
7658
+ ),
7659
+ onClick: () => setIsOpen(!isOpen),
7660
+ disabled: isDisabled,
7661
+ children: [
7662
+ !isShowingHint && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "font-semibold text-menu-text", children: selectedDisplayOverwrite ?? (useChipDisplay && selectedItems ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ChipList, { list: selectedItems.map((value) => ({ children: value.label })) }) : translation("selected", { replacements: { amount: selectedItems.length.toString() } })) }),
7663
+ isShowingHint && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "textstyle-description", children: hintText ?? translation("select") }),
7664
+ isOpen ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react17.ChevronUp, { size: 24, className: "min-w-6" }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react17.ChevronDown, { className: "min-w-6" })
7665
+ ]
7666
+ }
7667
+ ),
7668
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
7669
+ "div",
7670
+ {
7671
+ ref: menuRef,
7672
+ 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",
7673
+ children: [
7674
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7675
+ SearchableList,
7676
+ {
7677
+ list: options,
7678
+ minimumItemsForSearch: isSearchEnabled ? void 0 : options.length,
7679
+ searchMapping: (item) => item.searchTags,
7680
+ itemMapper: (option, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7681
+ Tile,
7682
+ {
7683
+ isSelected: option.selected,
7684
+ className: "px-2 py-1 rounded-md",
7685
+ disabledClassName: "text-disabled-text cursor-not-allowed",
7686
+ title: { value: option.label, className: "font-semibold" },
7687
+ onClick: () => {
7634
7688
  onChange(options.map((value) => value.value === option.value ? {
7635
7689
  ...option,
7636
7690
  selected: !value.selected
7637
7691
  } : value));
7638
- }
7692
+ },
7693
+ isDisabled: option.disabled
7639
7694
  },
7640
- children: [
7641
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Checkbox, { checked: option.selected, disabled: option.disabled, size: "small" }),
7642
- option.label
7643
- ]
7644
- }
7645
- )
7646
- },
7647
- `item${index}`
7648
- ))
7649
- ]
7650
- }
7651
- )
7695
+ index
7696
+ )
7697
+ }
7698
+ ),
7699
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "row justify-between mt-2", children: [
7700
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "row gap-x-2", children: [
7701
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7702
+ SolidButton,
7703
+ {
7704
+ color: "neutral",
7705
+ size: "small",
7706
+ onClick: () => {
7707
+ onChange(options.map((option) => ({
7708
+ ...option,
7709
+ selected: !option.disabled
7710
+ })));
7711
+ },
7712
+ disabled: options.every((value) => value.selected || value.disabled),
7713
+ children: translation("all")
7714
+ }
7715
+ ),
7716
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7717
+ SolidButton,
7718
+ {
7719
+ color: "neutral",
7720
+ size: "small",
7721
+ onClick: () => {
7722
+ onChange(options.map((option) => ({
7723
+ ...option,
7724
+ selected: false
7725
+ })));
7726
+ },
7727
+ children: translation("none")
7728
+ }
7729
+ )
7730
+ ] }),
7731
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SolidButton, { size: "small", onClick: () => setIsOpen(false), children: "Done" })
7732
+ ] })
7733
+ ]
7734
+ }
7735
+ )
7736
+ ] })
7652
7737
  ] });
7653
7738
  };
7739
+ var MultiSelectUncontrolled = ({
7740
+ options,
7741
+ onChange,
7742
+ ...props
7743
+ }) => {
7744
+ const [usedOptions, setUsedOptions] = (0, import_react22.useState)(options);
7745
+ (0, import_react22.useEffect)(() => {
7746
+ setUsedOptions(options);
7747
+ }, [options]);
7748
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
7749
+ MultiSelect,
7750
+ {
7751
+ ...props,
7752
+ options: usedOptions,
7753
+ onChange: (options2) => {
7754
+ setUsedOptions(options2);
7755
+ onChange(options2);
7756
+ }
7757
+ }
7758
+ );
7759
+ };
7654
7760
 
7655
7761
  // src/components/properties/MultiSelectProperty.tsx
7656
- var import_jsx_runtime51 = require("react/jsx-runtime");
7657
- var defaultMultiSelectPropertyTranslation = {
7658
- en: {
7659
- select: "Select"
7660
- },
7661
- de: {
7662
- select: "Ausw\xE4hlen"
7663
- }
7664
- };
7762
+ var import_jsx_runtime50 = require("react/jsx-runtime");
7665
7763
  var MultiSelectProperty = ({
7666
7764
  overwriteTranslation,
7667
7765
  options,
@@ -7671,13 +7769,9 @@ var MultiSelectProperty = ({
7671
7769
  onRemove,
7672
7770
  ...multiSelectProps
7673
7771
  }) => {
7674
- const translation = useTranslation(defaultMultiSelectPropertyTranslation, overwriteTranslation);
7772
+ const translation = useTranslation([formTranslation], overwriteTranslation);
7675
7773
  const hasValue = options.some((value) => value.selected);
7676
- let triggerClassName;
7677
- if (softRequired && !hasValue) {
7678
- triggerClassName = "border-warning hover:brightness-90";
7679
- }
7680
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
7774
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
7681
7775
  PropertyBase,
7682
7776
  {
7683
7777
  name,
@@ -7685,27 +7779,20 @@ var MultiSelectProperty = ({
7685
7779
  readOnly,
7686
7780
  softRequired,
7687
7781
  hasValue,
7688
- icon: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react17.List, { size: 16 }),
7689
- input: ({ softRequired: softRequired2 }) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
7782
+ icon: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react18.List, { size: 16 }),
7783
+ input: ({ softRequired: softRequired2 }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
7690
7784
  "div",
7691
7785
  {
7692
- className: (0, import_clsx38.default)("row grow py-2 px-4 cursor-pointer", { "text-warning": softRequired2 && !hasValue }),
7693
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
7786
+ className: (0, import_clsx37.default)("row grow py-2 px-4 cursor-pointer", { "text-warning": softRequired2 && !hasValue }),
7787
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
7694
7788
  MultiSelect,
7695
7789
  {
7696
7790
  ...multiSelectProps,
7697
- className: (0, import_clsx38.default)("w-full", { "bg-surface-warning": softRequired2 && !hasValue }),
7698
- triggerClassName,
7699
- selectedDisplay: ({ items }) => {
7700
- const selected = items.filter((value) => value.selected);
7701
- if (selected.length === 0) {
7702
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { children: "Select" });
7703
- }
7704
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ChipList, { list: selected.map((value) => ({ children: value.label })) });
7705
- },
7791
+ className: (0, import_clsx37.default)("w-full", { "bg-surface-warning": softRequired2 && !hasValue }),
7706
7792
  options,
7707
- disabled: readOnly,
7708
- hintText: `${translation.select}...`
7793
+ isDisabled: readOnly,
7794
+ useChipDisplay: true,
7795
+ hintText: `${translation("select")}...`
7709
7796
  }
7710
7797
  )
7711
7798
  }
@@ -7715,9 +7802,9 @@ var MultiSelectProperty = ({
7715
7802
  };
7716
7803
 
7717
7804
  // src/components/properties/NumberProperty.tsx
7718
- var import_lucide_react18 = require("lucide-react");
7719
- var import_clsx39 = __toESM(require("clsx"));
7720
- var import_jsx_runtime52 = require("react/jsx-runtime");
7805
+ var import_lucide_react19 = require("lucide-react");
7806
+ var import_clsx38 = __toESM(require("clsx"));
7807
+ var import_jsx_runtime51 = require("react/jsx-runtime");
7721
7808
  var defaultNumberPropertyTranslation = {
7722
7809
  en: {
7723
7810
  value: "Value"
@@ -7736,29 +7823,29 @@ var NumberProperty = ({
7736
7823
  suffix,
7737
7824
  ...baseProps
7738
7825
  }) => {
7739
- const translation = useTranslation(defaultNumberPropertyTranslation, overwriteTranslation);
7826
+ const translation = useTranslation([defaultNumberPropertyTranslation], overwriteTranslation);
7740
7827
  const hasValue = value !== void 0;
7741
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7828
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
7742
7829
  PropertyBase,
7743
7830
  {
7744
7831
  ...baseProps,
7745
7832
  onRemove,
7746
7833
  hasValue,
7747
- icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react18.Binary, { size: 16 }),
7748
- input: ({ softRequired }) => /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
7834
+ icon: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react19.Binary, { size: 16 }),
7835
+ input: ({ softRequired }) => /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
7749
7836
  "div",
7750
7837
  {
7751
- className: (0, import_clsx39.default)("row grow py-2 px-4 cursor-pointer", { "text-warning": softRequired && !hasValue }),
7838
+ className: (0, import_clsx38.default)("row grow py-2 px-4 cursor-pointer", { "text-warning": softRequired && !hasValue }),
7752
7839
  children: [
7753
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7840
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
7754
7841
  Input,
7755
7842
  {
7756
7843
  expanded: false,
7757
- className: (0, import_clsx39.default)("!ring-0 !border-0 !outline-0 !p-0 !m-0 !w-fit !shadow-none !rounded-none", { "bg-surface-warning placeholder-warning": softRequired && !hasValue }),
7844
+ className: (0, import_clsx38.default)("!ring-0 !border-0 !outline-0 !p-0 !m-0 !w-fit !shadow-none !rounded-none", { "bg-surface-warning placeholder-warning": softRequired && !hasValue }),
7758
7845
  value: value?.toString() ?? "",
7759
7846
  type: "number",
7760
7847
  readOnly,
7761
- placeholder: `${translation.value}...`,
7848
+ placeholder: `${translation("value")}...`,
7762
7849
  onChangeText: (value2) => {
7763
7850
  const numberValue = parseFloat(value2);
7764
7851
  if (isNaN(numberValue)) {
@@ -7777,7 +7864,7 @@ var NumberProperty = ({
7777
7864
  }
7778
7865
  }
7779
7866
  ),
7780
- suffix && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: (0, import_clsx39.default)("ml-1", { "bg-surface-warning": softRequired && !hasValue }), children: suffix })
7867
+ suffix && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: (0, import_clsx38.default)("ml-1", { "bg-surface-warning": softRequired && !hasValue }), children: suffix })
7781
7868
  ]
7782
7869
  }
7783
7870
  )
@@ -7786,17 +7873,9 @@ var NumberProperty = ({
7786
7873
  };
7787
7874
 
7788
7875
  // src/components/properties/SelectProperty.tsx
7789
- var import_lucide_react19 = require("lucide-react");
7790
- var import_clsx40 = __toESM(require("clsx"));
7791
- var import_jsx_runtime53 = require("react/jsx-runtime");
7792
- var defaultSingleSelectPropertyTranslation = {
7793
- en: {
7794
- select: "Select"
7795
- },
7796
- de: {
7797
- select: "Ausw\xE4hlen"
7798
- }
7799
- };
7876
+ var import_lucide_react20 = require("lucide-react");
7877
+ var import_clsx39 = __toESM(require("clsx"));
7878
+ var import_jsx_runtime52 = require("react/jsx-runtime");
7800
7879
  var SingleSelectProperty = ({
7801
7880
  overwriteTranslation,
7802
7881
  value,
@@ -7805,11 +7884,11 @@ var SingleSelectProperty = ({
7805
7884
  readOnly = false,
7806
7885
  softRequired,
7807
7886
  onRemove,
7808
- ...multiSelectProps
7887
+ ...selectProps
7809
7888
  }) => {
7810
- const translation = useTranslation(defaultSingleSelectPropertyTranslation, overwriteTranslation);
7889
+ const translation = useTranslation([formTranslation], overwriteTranslation);
7811
7890
  const hasValue = value !== void 0;
7812
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
7891
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7813
7892
  PropertyBase,
7814
7893
  {
7815
7894
  name,
@@ -7817,20 +7896,20 @@ var SingleSelectProperty = ({
7817
7896
  readOnly,
7818
7897
  softRequired,
7819
7898
  hasValue,
7820
- icon: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react19.List, { size: 16 }),
7821
- input: ({ softRequired: softRequired2 }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
7899
+ icon: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react20.List, { size: 16 }),
7900
+ input: ({ softRequired: softRequired2 }) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7822
7901
  "div",
7823
7902
  {
7824
- className: (0, import_clsx40.default)("row grow py-2 px-4 cursor-pointer", { "text-warning": softRequired2 && !hasValue }),
7825
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
7826
- SearchableSelect,
7903
+ className: (0, import_clsx39.default)("row grow py-2 px-4 cursor-pointer", { "text-warning": softRequired2 && !hasValue }),
7904
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
7905
+ Select,
7827
7906
  {
7828
- ...multiSelectProps,
7907
+ ...selectProps,
7829
7908
  value,
7830
7909
  options,
7831
7910
  isDisabled: readOnly,
7832
- className: (0, import_clsx40.default)("w-full", { "bg-surface-warning": softRequired2 && !hasValue }),
7833
- hintText: `${translation.select}...`
7911
+ className: (0, import_clsx39.default)("w-full", { "bg-surface-warning": softRequired2 && !hasValue }),
7912
+ hintText: `${translation("select")}...`
7834
7913
  }
7835
7914
  )
7836
7915
  }
@@ -7840,13 +7919,13 @@ var SingleSelectProperty = ({
7840
7919
  };
7841
7920
 
7842
7921
  // src/components/properties/TextProperty.tsx
7843
- var import_lucide_react20 = require("lucide-react");
7844
- var import_clsx42 = __toESM(require("clsx"));
7922
+ var import_lucide_react21 = require("lucide-react");
7923
+ var import_clsx41 = __toESM(require("clsx"));
7845
7924
 
7846
7925
  // src/components/user-action/Textarea.tsx
7847
- var import_react25 = require("react");
7848
- var import_clsx41 = __toESM(require("clsx"));
7849
- var import_jsx_runtime54 = require("react/jsx-runtime");
7926
+ var import_react23 = require("react");
7927
+ var import_clsx40 = __toESM(require("clsx"));
7928
+ var import_jsx_runtime53 = require("react/jsx-runtime");
7850
7929
  var Textarea = ({
7851
7930
  label,
7852
7931
  headline,
@@ -7861,33 +7940,33 @@ var Textarea = ({
7861
7940
  className,
7862
7941
  ...props
7863
7942
  }) => {
7864
- const [hasFocus, setHasFocus] = (0, import_react25.useState)(false);
7943
+ const [hasFocus, setHasFocus] = (0, import_react23.useState)(false);
7865
7944
  const { restartTimer, clearUpdateTimer } = useSaveDelay(() => void 0, 3e3);
7866
7945
  const onEditCompletedWrapper = (text) => {
7867
7946
  onEditCompleted(text);
7868
7947
  clearUpdateTimer();
7869
7948
  };
7870
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "w-full", children: [
7871
- label && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
7949
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "w-full", children: [
7950
+ label && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
7872
7951
  Label,
7873
7952
  {
7874
7953
  ...label,
7875
7954
  htmlFor: id,
7876
- className: (0, import_clsx41.default)("mb-1", label.className),
7955
+ className: (0, import_clsx40.default)("mb-1", label.className),
7877
7956
  labelType: label.labelType ?? "labelSmall"
7878
7957
  }
7879
7958
  ),
7880
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
7959
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
7881
7960
  "div",
7882
7961
  {
7883
- className: `${(0, import_clsx41.default)(" bg-surface text-on-surface focus-within:border-primary relative", { "shadow border-2 hover:border-primary rounded-lg": defaultStyle })}`,
7962
+ className: `${(0, import_clsx40.default)(" bg-surface text-on-surface focus-within:border-primary relative", { "shadow border-2 hover:border-primary rounded-lg": defaultStyle })}`,
7884
7963
  children: [
7885
- headline && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "mx-3 mt-3 block textstyle-label-md", children: headline }),
7886
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
7964
+ headline && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "mx-3 mt-3 block textstyle-label-md", children: headline }),
7965
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
7887
7966
  "textarea",
7888
7967
  {
7889
7968
  id,
7890
- className: (0, import_clsx41.default)("pt-0 px-3 border-transparent focus:border-transparent focus:ring-0 appearance-none border w-full leading-tight focus:outline-none", {
7969
+ className: (0, import_clsx40.default)("pt-0 px-3 border-transparent focus:border-transparent focus:ring-0 appearance-none border w-full leading-tight focus:outline-none", {
7891
7970
  "resize-none": !resizable,
7892
7971
  "h-32": defaultStyle,
7893
7972
  "mt-3": !headline
@@ -7914,7 +7993,7 @@ var Textarea = ({
7914
7993
  ]
7915
7994
  }
7916
7995
  ),
7917
- hasFocus && disclaimer && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "text-negative", children: disclaimer })
7996
+ hasFocus && disclaimer && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("label", { className: "text-negative", children: disclaimer })
7918
7997
  ] });
7919
7998
  };
7920
7999
  var TextareaUncontrolled = ({
@@ -7922,11 +8001,11 @@ var TextareaUncontrolled = ({
7922
8001
  onChangeText = noop,
7923
8002
  ...props
7924
8003
  }) => {
7925
- const [text, setText] = (0, import_react25.useState)(value);
7926
- (0, import_react25.useEffect)(() => {
8004
+ const [text, setText] = (0, import_react23.useState)(value);
8005
+ (0, import_react23.useEffect)(() => {
7927
8006
  setText(value);
7928
8007
  }, [value]);
7929
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
8008
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
7930
8009
  Textarea,
7931
8010
  {
7932
8011
  ...props,
@@ -7940,13 +8019,13 @@ var TextareaUncontrolled = ({
7940
8019
  };
7941
8020
 
7942
8021
  // src/components/properties/TextProperty.tsx
7943
- var import_jsx_runtime55 = require("react/jsx-runtime");
8022
+ var import_jsx_runtime54 = require("react/jsx-runtime");
7944
8023
  var defaultTextPropertyTranslation = {
7945
8024
  en: {
7946
- value: "Text"
8025
+ text: "Text"
7947
8026
  },
7948
8027
  de: {
7949
- value: "Text"
8028
+ text: "Text"
7950
8029
  }
7951
8030
  };
7952
8031
  var TextProperty = ({
@@ -7958,28 +8037,28 @@ var TextProperty = ({
7958
8037
  onEditComplete = noop,
7959
8038
  ...baseProps
7960
8039
  }) => {
7961
- const translation = useTranslation(defaultTextPropertyTranslation, overwriteTranslation);
8040
+ const translation = useTranslation([defaultTextPropertyTranslation], overwriteTranslation);
7962
8041
  const hasValue = value !== void 0;
7963
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
8042
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
7964
8043
  PropertyBase,
7965
8044
  {
7966
8045
  ...baseProps,
7967
8046
  onRemove,
7968
8047
  hasValue,
7969
- icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react20.Text, { size: 16 }),
7970
- input: ({ softRequired }) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
8048
+ icon: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react21.Text, { size: 16 }),
8049
+ input: ({ softRequired }) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
7971
8050
  "div",
7972
8051
  {
7973
- className: (0, import_clsx42.default)("row grow pt-2 pb-1 px-4 cursor-pointer", { "text-warning": softRequired && !hasValue }),
7974
- children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
8052
+ className: (0, import_clsx41.default)("row grow pt-2 pb-1 px-4 cursor-pointer", { "text-warning": softRequired && !hasValue }),
8053
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
7975
8054
  Textarea,
7976
8055
  {
7977
- className: (0, import_clsx42.default)("ring-0 border-0 outline-0 p-0 m-0 shadow-none rounded-none", { "bg-surface-warning placeholder-warning": softRequired && !hasValue }),
8056
+ className: (0, import_clsx41.default)("ring-0 border-0 outline-0 p-0 m-0 shadow-none rounded-none", { "bg-surface-warning placeholder-warning": softRequired && !hasValue }),
7978
8057
  rows: 5,
7979
8058
  defaultStyle: false,
7980
8059
  value: value ?? "",
7981
8060
  readOnly,
7982
- placeholder: `${translation.value}...`,
8061
+ placeholder: `${translation("text")}...`,
7983
8062
  onChangeText: (value2) => {
7984
8063
  if (!value2) {
7985
8064
  onRemove();
@@ -8003,48 +8082,8 @@ var TextProperty = ({
8003
8082
  };
8004
8083
 
8005
8084
  // src/components/user-action/DateAndTimePicker.tsx
8006
- var import_clsx43 = __toESM(require("clsx"));
8007
- var import_jsx_runtime56 = require("react/jsx-runtime");
8008
- var defaultTimeTranslation = {
8009
- en: {
8010
- clear: "Clear",
8011
- change: "Change",
8012
- year: "Year",
8013
- month: "Month",
8014
- day: "Day",
8015
- january: "January",
8016
- february: "Febuary",
8017
- march: "March",
8018
- april: "April",
8019
- may: "May",
8020
- june: "June",
8021
- july: "July",
8022
- august: "August",
8023
- september: "September",
8024
- october: "October",
8025
- november: "November",
8026
- december: "December"
8027
- },
8028
- de: {
8029
- clear: "Entfernen",
8030
- change: "\xC4ndern",
8031
- year: "Jahr",
8032
- month: "Monat",
8033
- day: "Tag",
8034
- january: "Januar",
8035
- february: "Febuar",
8036
- march: "M\xE4rz",
8037
- april: "April",
8038
- may: "Mai",
8039
- june: "Juni",
8040
- july: "Juli",
8041
- august: "August",
8042
- september: "September",
8043
- october: "October",
8044
- november: "November",
8045
- december: "December"
8046
- }
8047
- };
8085
+ var import_clsx42 = __toESM(require("clsx"));
8086
+ var import_jsx_runtime55 = require("react/jsx-runtime");
8048
8087
  var DateTimePicker = ({
8049
8088
  overwriteTranslation,
8050
8089
  value = /* @__PURE__ */ new Date(),
@@ -8057,13 +8096,13 @@ var DateTimePicker = ({
8057
8096
  timePickerProps,
8058
8097
  datePickerProps
8059
8098
  }) => {
8060
- const translation = useTranslation(defaultTimeTranslation, overwriteTranslation);
8099
+ const translation = useTranslation([formTranslation, timeTranslation], overwriteTranslation);
8061
8100
  const useDate = mode === "dateTime" || mode === "date";
8062
8101
  const useTime = mode === "dateTime" || mode === "time";
8063
8102
  let dateDisplay;
8064
8103
  let timeDisplay;
8065
8104
  if (useDate) {
8066
- dateDisplay = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
8105
+ dateDisplay = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
8067
8106
  DatePicker,
8068
8107
  {
8069
8108
  ...datePickerProps,
@@ -8077,38 +8116,118 @@ var DateTimePicker = ({
8077
8116
  );
8078
8117
  }
8079
8118
  if (useTime) {
8080
- timeDisplay = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
8119
+ timeDisplay = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
8081
8120
  TimePicker,
8082
8121
  {
8083
8122
  ...timePickerProps,
8084
- className: (0, import_clsx43.default)("h-full", { "justify-between w-full": mode === "time" }),
8123
+ className: (0, import_clsx42.default)("h-full", { "justify-between w-full": mode === "time" }),
8085
8124
  maxHeight: 250,
8086
8125
  time: value,
8087
8126
  onChange
8088
8127
  }
8089
8128
  );
8090
8129
  }
8091
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "col w-fit", children: [
8092
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "row gap-x-4", children: [
8130
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "col w-fit", children: [
8131
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "row gap-x-4", children: [
8093
8132
  dateDisplay,
8094
8133
  timeDisplay
8095
8134
  ] }),
8096
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "row justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "row gap-x-2 mt-1", children: [
8097
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(SolidButton, { size: "medium", color: "negative", onClick: onRemove, children: translation.clear }),
8098
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
8135
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "row justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "row gap-x-2 mt-1", children: [
8136
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(SolidButton, { size: "medium", color: "negative", onClick: onRemove, children: translation("clear") }),
8137
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
8099
8138
  SolidButton,
8100
8139
  {
8101
8140
  size: "medium",
8102
8141
  onClick: () => onFinish(value),
8103
- children: translation.change
8142
+ children: translation("change")
8104
8143
  }
8105
8144
  )
8106
8145
  ] }) })
8107
8146
  ] });
8108
8147
  };
8109
8148
 
8149
+ // src/components/user-action/Menu.tsx
8150
+ var import_react24 = require("react");
8151
+ var import_clsx43 = __toESM(require("clsx"));
8152
+
8153
+ // src/util/PropsWithFunctionChildren.ts
8154
+ var resolve = (children, bag) => {
8155
+ if (typeof children === "function") {
8156
+ return children(bag);
8157
+ }
8158
+ return children ?? void 0;
8159
+ };
8160
+ var BagFunctionUtil = {
8161
+ resolve
8162
+ };
8163
+
8164
+ // src/components/user-action/Menu.tsx
8165
+ var import_jsx_runtime56 = require("react/jsx-runtime");
8166
+ var MenuItem = ({
8167
+ children,
8168
+ onClick,
8169
+ alignment = "left",
8170
+ isDisabled = false,
8171
+ className
8172
+ }) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
8173
+ "div",
8174
+ {
8175
+ className: (0, import_clsx43.default)("block px-3 py-1.5 bg-menu-background first:rounded-t-lg last:rounded-b-lg text-sm font-semibold", {
8176
+ "text-right": alignment === "right",
8177
+ "text-left": alignment === "left",
8178
+ "text-disabled-text cursor-not-allowed": isDisabled,
8179
+ "text-menu-text hover:bg-primary/20": !isDisabled,
8180
+ "cursor-pointer": !!onClick
8181
+ }, className),
8182
+ onClick,
8183
+ children
8184
+ }
8185
+ );
8186
+ var Menu = ({
8187
+ trigger,
8188
+ children,
8189
+ alignment = "tl",
8190
+ showOnHover = false,
8191
+ menuClassName = ""
8192
+ }) => {
8193
+ const { isHovered: isOpen, setIsHovered: setIsOpen, handlers } = useHoverState({ isDisabled: !showOnHover });
8194
+ const triggerRef = (0, import_react24.useRef)(null);
8195
+ const menuRef = (0, import_react24.useRef)(null);
8196
+ useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
8197
+ const bag = { isOpen, close: () => setIsOpen(false) };
8198
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
8199
+ "div",
8200
+ {
8201
+ className: "relative",
8202
+ ...handlers,
8203
+ children: [
8204
+ trigger(() => setIsOpen(!isOpen), triggerRef),
8205
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
8206
+ "div",
8207
+ {
8208
+ ref: menuRef,
8209
+ onClick: (e) => e.stopPropagation(),
8210
+ className: (0, import_clsx43.default)(
8211
+ "absolute top-full mt-1 min-w-40 rounded-lg bg-menu-background text-menu-text shadow-around-md z-10",
8212
+ {
8213
+ "top-0": alignment[0] === "t",
8214
+ "bottom-0": alignment[0] === "b",
8215
+ "left-0": alignment[1] === "l",
8216
+ "right-0": alignment[1] === "r",
8217
+ "hidden": !isOpen
8218
+ },
8219
+ menuClassName
8220
+ ),
8221
+ children: BagFunctionUtil.resolve(children, bag)
8222
+ }
8223
+ )
8224
+ ]
8225
+ }
8226
+ );
8227
+ };
8228
+
8110
8229
  // src/components/user-action/ScrollPicker.tsx
8111
- var import_react26 = require("react");
8230
+ var import_react25 = require("react");
8112
8231
  var import_clsx44 = __toESM(require("clsx"));
8113
8232
  var import_jsx_runtime57 = require("react/jsx-runtime");
8114
8233
  var up = 1;
@@ -8129,7 +8248,7 @@ var ScrollPicker = ({
8129
8248
  transition,
8130
8249
  items,
8131
8250
  lastTimeStamp
8132
- }, setAnimation] = (0, import_react26.useState)({
8251
+ }, setAnimation] = (0, import_react25.useState)({
8133
8252
  targetIndex: selectedIndex,
8134
8253
  currentIndex: disabled ? selectedIndex : 0,
8135
8254
  velocity: 0,
@@ -8145,7 +8264,7 @@ var ScrollPicker = ({
8145
8264
  const itemHeight = 40;
8146
8265
  const distance = 8;
8147
8266
  const containerHeight = itemHeight * (itemsShownCount - 2) + distance * (itemsShownCount - 2 + 1);
8148
- const getDirection = (0, import_react26.useCallback)((targetIndex, currentIndex2, transition2, length) => {
8267
+ const getDirection = (0, import_react25.useCallback)((targetIndex, currentIndex2, transition2, length) => {
8149
8268
  if (targetIndex === currentIndex2) {
8150
8269
  return transition2 > 0 ? up : down;
8151
8270
  }
@@ -8155,7 +8274,7 @@ var ScrollPicker = ({
8155
8274
  }
8156
8275
  return distanceForward >= length / 2 ? down : up;
8157
8276
  }, []);
8158
- const animate = (0, import_react26.useCallback)((timestamp, startTime) => {
8277
+ const animate = (0, import_react25.useCallback)((timestamp, startTime) => {
8159
8278
  setAnimation((prevState) => {
8160
8279
  const {
8161
8280
  targetIndex,
@@ -8228,7 +8347,7 @@ var ScrollPicker = ({
8228
8347
  };
8229
8348
  });
8230
8349
  }, [disabled, getDirection, onChange]);
8231
- (0, import_react26.useEffect)(() => {
8350
+ (0, import_react25.useEffect)(() => {
8232
8351
  requestAnimationFrame((timestamp) => animate(timestamp, lastTimeStamp));
8233
8352
  });
8234
8353
  const opacity = (transition2, index, itemsCount) => {
@@ -8305,8 +8424,8 @@ var ScrollPicker = ({
8305
8424
  };
8306
8425
 
8307
8426
  // src/components/user-action/ToggleableInput.tsx
8308
- var import_react27 = require("react");
8309
- var import_lucide_react21 = require("lucide-react");
8427
+ var import_react26 = require("react");
8428
+ var import_lucide_react22 = require("lucide-react");
8310
8429
  var import_clsx45 = __toESM(require("clsx"));
8311
8430
  var import_jsx_runtime58 = require("react/jsx-runtime");
8312
8431
  var ToggleableInput = ({
@@ -8322,14 +8441,14 @@ var ToggleableInput = ({
8322
8441
  onBlur,
8323
8442
  ...restProps
8324
8443
  }) => {
8325
- const [isEditing, setIsEditing] = (0, import_react27.useState)(initialState !== "display");
8444
+ const [isEditing, setIsEditing] = (0, import_react26.useState)(initialState !== "display");
8326
8445
  const { restartTimer, clearUpdateTimer } = useSaveDelay(() => void 0, 3e3);
8327
- const ref = (0, import_react27.useRef)(null);
8446
+ const ref = (0, import_react26.useRef)(null);
8328
8447
  const onEditCompletedWrapper = (text) => {
8329
8448
  onEditCompleted(text);
8330
8449
  clearUpdateTimer();
8331
8450
  };
8332
- (0, import_react27.useEffect)(() => {
8451
+ (0, import_react26.useEffect)(() => {
8333
8452
  if (isEditing) {
8334
8453
  ref.current?.focus();
8335
8454
  }
@@ -8376,7 +8495,7 @@ var ToggleableInput = ({
8376
8495
  }
8377
8496
  ) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: (0, import_clsx45.default)("max-w-xs break-words overflow-hidden", labelClassName), children: value }) }),
8378
8497
  /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
8379
- import_lucide_react21.Pencil,
8498
+ import_lucide_react22.Pencil,
8380
8499
  {
8381
8500
  className: (0, import_clsx45.default)(`cursor-pointer`, { "text-transparent": isEditing }),
8382
8501
  size,
@@ -8394,8 +8513,8 @@ var ToggleableInputUncontrolled = ({
8394
8513
  onChangeText = noop,
8395
8514
  ...restProps
8396
8515
  }) => {
8397
- const [value, setValue] = (0, import_react27.useState)(initialValue);
8398
- (0, import_react27.useEffect)(() => {
8516
+ const [value, setValue] = (0, import_react26.useState)(initialValue);
8517
+ (0, import_react26.useEffect)(() => {
8399
8518
  setValue(initialValue);
8400
8519
  }, [initialValue]);
8401
8520
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
@@ -8456,6 +8575,7 @@ var filterNews = (localizedNews, requiredKeys) => {
8456
8575
  ArrayUtil,
8457
8576
  Avatar,
8458
8577
  AvatarGroup,
8578
+ BagFunctionUtil,
8459
8579
  BreadCrumb,
8460
8580
  ButtonColorUtil,
8461
8581
  ButtonUtil,
@@ -8506,6 +8626,7 @@ var filterNews = (localizedNews, requiredKeys) => {
8506
8626
  MultiSearchWithMapping,
8507
8627
  MultiSelect,
8508
8628
  MultiSelectProperty,
8629
+ MultiSelectUncontrolled,
8509
8630
  MultiSubjectSearchWithMapping,
8510
8631
  NumberProperty,
8511
8632
  OutlineButton,
@@ -8519,7 +8640,6 @@ var filterNews = (localizedNews, requiredKeys) => {
8519
8640
  RingWave,
8520
8641
  ScrollPicker,
8521
8642
  SearchableList,
8522
- SearchableSelect,
8523
8643
  Select,
8524
8644
  SelectUncontrolled,
8525
8645
  SessionStorageService,
@@ -8567,6 +8687,7 @@ var filterNews = (localizedNews, requiredKeys) => {
8567
8687
  equalDate,
8568
8688
  equalSizeGroups,
8569
8689
  filterNews,
8690
+ formTranslation,
8570
8691
  formatDate,
8571
8692
  formatDateTime,
8572
8693
  generateShadingColors,
@@ -8577,6 +8698,7 @@ var filterNews = (localizedNews, requiredKeys) => {
8577
8698
  isDataObjectSelected,
8578
8699
  isInTimeSpan,
8579
8700
  localizedNewsSchema,
8701
+ monthTranslation,
8580
8702
  monthsList,
8581
8703
  newsListSchema,
8582
8704
  newsSchema,
@@ -8586,6 +8708,7 @@ var filterNews = (localizedNews, requiredKeys) => {
8586
8708
  removeFromTableSelection,
8587
8709
  shadingColorValues,
8588
8710
  subtractDuration,
8711
+ timeTranslation,
8589
8712
  updatePagination,
8590
8713
  useHoverState,
8591
8714
  useLanguage,
@@ -8593,6 +8716,7 @@ var filterNews = (localizedNews, requiredKeys) => {
8593
8716
  useLocale,
8594
8717
  useOutsideClick,
8595
8718
  useSaveDelay,
8719
+ useSearch,
8596
8720
  useTheme,
8597
8721
  useTranslation,
8598
8722
  validateEmail,