@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
@@ -32,7 +32,7 @@ __export(MultiSelectProperty_exports, {
32
32
  MultiSelectProperty: () => MultiSelectProperty
33
33
  });
34
34
  module.exports = __toCommonJS(MultiSelectProperty_exports);
35
- var import_lucide_react4 = require("lucide-react");
35
+ var import_lucide_react5 = require("lucide-react");
36
36
  var import_clsx9 = __toESM(require("clsx"));
37
37
 
38
38
  // src/localization/LanguageProvider.tsx
@@ -63,164 +63,93 @@ var LanguageContext = (0, import_react2.createContext)({
63
63
  var useLanguage = () => (0, import_react2.useContext)(LanguageContext);
64
64
 
65
65
  // src/localization/useTranslation.ts
66
- var useTranslation = (defaults, translationOverwrite = {}) => {
67
- const { language: languageProp, translation: overwrite } = translationOverwrite;
66
+ var useTranslation = (translations, overwriteTranslation = {}) => {
67
+ const { language: languageProp, translation: overwrite } = overwriteTranslation;
68
68
  const { language: inferredLanguage } = useLanguage();
69
69
  const usedLanguage = languageProp ?? inferredLanguage;
70
- let defaultValues = defaults[usedLanguage];
71
- if (overwrite && overwrite[usedLanguage]) {
72
- defaultValues = { ...defaultValues, ...overwrite[usedLanguage] };
70
+ const usedTranslations = [...translations];
71
+ if (overwrite) {
72
+ usedTranslations.push(overwrite);
73
73
  }
74
- return defaultValues;
75
- };
76
-
77
- // src/components/user-action/MultiSelect.tsx
78
- var import_react9 = require("react");
79
- var import_lucide_react2 = require("lucide-react");
80
-
81
- // src/util/simpleSearch.ts
82
- var MultiSearchWithMapping = (search, objects, mapping) => {
83
- return objects.filter((object) => {
84
- const mappedSearchKeywords = mapping(object).map((value) => value.toLowerCase().trim());
85
- return !!mappedSearchKeywords.find((value) => value.includes(search.toLowerCase().trim()));
86
- });
87
- };
88
-
89
- // src/components/user-action/MultiSelect.tsx
90
- var import_clsx5 = __toESM(require("clsx"));
91
-
92
- // src/components/user-action/Menu.tsx
93
- var import_react5 = require("react");
94
- var import_clsx = __toESM(require("clsx"));
95
-
96
- // src/hooks/useOutsideClick.ts
97
- var import_react3 = require("react");
98
- var useOutsideClick = (refs, handler) => {
99
- (0, import_react3.useEffect)(() => {
100
- const listener = (event) => {
101
- if (event.target === null) return;
102
- if (refs.some((ref) => !ref.current || ref.current.contains(event.target))) {
103
- return;
74
+ return (key, options) => {
75
+ const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options };
76
+ try {
77
+ for (let i = translations.length - 1; i >= 0; i--) {
78
+ const translation = translations[i];
79
+ const localizedTranslation = translation[usedLanguage];
80
+ if (!localizedTranslation) {
81
+ continue;
82
+ }
83
+ const value = localizedTranslation[key];
84
+ if (!value) {
85
+ continue;
86
+ }
87
+ let forProcessing;
88
+ if (typeof value !== "string") {
89
+ if (count <= 0 && value?.zero) {
90
+ forProcessing = value.zero;
91
+ } else if (count === 1 && value?.one) {
92
+ forProcessing = value.one;
93
+ } else if (count === 2 && value?.two) {
94
+ forProcessing = value.two;
95
+ } else if (count <= 10 && value?.few) {
96
+ forProcessing = value.few;
97
+ } else if (count > 10 && value?.many) {
98
+ forProcessing = value.many;
99
+ } else {
100
+ forProcessing = value.other;
101
+ }
102
+ } else {
103
+ forProcessing = value;
104
+ }
105
+ forProcessing = forProcessing.replace(/\{\{(\w+)}}/g, (_, placeholder) => {
106
+ return replacements[placeholder] ?? `{{${placeholder}}}`;
107
+ });
108
+ return forProcessing;
104
109
  }
105
- handler();
106
- };
107
- document.addEventListener("mousedown", listener);
108
- document.addEventListener("touchstart", listener);
109
- return () => {
110
- document.removeEventListener("mousedown", listener);
111
- document.removeEventListener("touchstart", listener);
112
- };
113
- }, [refs, handler]);
114
- };
115
-
116
- // src/hooks/useHoverState.ts
117
- var import_react4 = require("react");
118
- var defaultUseHoverStateProps = {
119
- closingDelay: 200,
120
- isDisabled: false
121
- };
122
- var useHoverState = (props = void 0) => {
123
- const { closingDelay, isDisabled } = { ...defaultUseHoverStateProps, ...props };
124
- const [isHovered, setIsHovered] = (0, import_react4.useState)(false);
125
- const [timer, setTimer] = (0, import_react4.useState)();
126
- const onMouseEnter = () => {
127
- if (isDisabled) {
128
- return;
129
- }
130
- clearTimeout(timer);
131
- setIsHovered(true);
132
- };
133
- const onMouseLeave = () => {
134
- if (isDisabled) {
135
- return;
110
+ } catch (e) {
111
+ console.error(e);
136
112
  }
137
- setTimer(setTimeout(() => {
138
- setIsHovered(false);
139
- }, closingDelay));
140
- };
141
- (0, import_react4.useEffect)(() => {
142
- if (timer) {
143
- return () => {
144
- clearTimeout(timer);
145
- };
146
- }
147
- });
148
- (0, import_react4.useEffect)(() => {
149
- if (timer) {
150
- clearTimeout(timer);
151
- }
152
- }, [isDisabled]);
153
- return {
154
- isHovered,
155
- setIsHovered,
156
- handlers: { onMouseEnter, onMouseLeave }
113
+ return `{{${usedLanguage}:${key}}}`;
157
114
  };
158
115
  };
159
116
 
160
- // src/components/user-action/Menu.tsx
117
+ // src/components/user-action/MultiSelect.tsx
118
+ var import_react7 = require("react");
119
+ var import_lucide_react3 = require("lucide-react");
120
+ var import_clsx7 = __toESM(require("clsx"));
121
+
122
+ // src/components/user-action/Label.tsx
123
+ var import_clsx = __toESM(require("clsx"));
161
124
  var import_jsx_runtime2 = require("react/jsx-runtime");
162
- var MenuItem = ({
163
- children,
164
- onClick,
165
- alignment = "left",
166
- className
167
- }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
168
- "div",
169
- {
170
- className: (0, import_clsx.default)("block px-3 py-1 bg-menu-background text-menu-text hover:brightness-90", {
171
- "text-right": alignment === "right",
172
- "text-left": alignment === "left"
173
- }, className),
174
- onClick,
175
- children
176
- }
177
- );
178
- var Menu = ({
179
- trigger,
125
+ var styleMapping = {
126
+ labelSmall: "textstyle-label-sm",
127
+ labelMedium: "textstyle-label-md",
128
+ labelBig: "textstyle-label-lg"
129
+ };
130
+ var Label = ({
180
131
  children,
181
- alignment = "tl",
182
- showOnHover = false,
183
- menuClassName = ""
132
+ name,
133
+ labelType = "labelSmall",
134
+ className,
135
+ ...props
184
136
  }) => {
185
- const { isHovered: isOpen, setIsHovered: setIsOpen, handlers } = useHoverState({ isDisabled: !showOnHover });
186
- const triggerRef = (0, import_react5.useRef)(null);
187
- const menuRef = (0, import_react5.useRef)(null);
188
- useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
189
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
190
- "div",
191
- {
192
- className: "relative",
193
- ...handlers,
194
- children: [
195
- trigger(() => setIsOpen(!isOpen), triggerRef),
196
- isOpen ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
197
- "div",
198
- {
199
- ref: menuRef,
200
- onClick: (e) => e.stopPropagation(),
201
- className: (0, import_clsx.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]", {
202
- " top-[8px]": alignment[0] === "t",
203
- " bottom-[8px]": alignment[0] === "b",
204
- " left-[-8px]": alignment[1] === "l",
205
- " right-[-8px]": alignment[1] === "r"
206
- }, menuClassName),
207
- children
208
- }
209
- ) : null
210
- ]
211
- }
212
- );
137
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("label", { ...props, className: (0, import_clsx.default)(styleMapping[labelType], className), children: children ? children : name });
213
138
  };
214
139
 
140
+ // src/components/layout-and-navigation/SearchableList.tsx
141
+ var import_lucide_react = require("lucide-react");
142
+ var import_clsx4 = __toESM(require("clsx"));
143
+
215
144
  // src/components/user-action/Input.tsx
216
- var import_react7 = require("react");
217
- var import_clsx3 = __toESM(require("clsx"));
145
+ var import_react4 = require("react");
146
+ var import_clsx2 = __toESM(require("clsx"));
218
147
 
219
148
  // src/hooks/useSaveDelay.ts
220
- var import_react6 = require("react");
149
+ var import_react3 = require("react");
221
150
  function useSaveDelay(setNotificationStatus, delay) {
222
- const [updateTimer, setUpdateTimer] = (0, import_react6.useState)(void 0);
223
- const [notificationTimer, setNotificationTimer] = (0, import_react6.useState)(void 0);
151
+ const [updateTimer, setUpdateTimer] = (0, import_react3.useState)(void 0);
152
+ const [notificationTimer, setNotificationTimer] = (0, import_react3.useState)(void 0);
224
153
  const restartTimer = (onSave) => {
225
154
  clearTimeout(updateTimer);
226
155
  setUpdateTimer(setTimeout(() => {
@@ -247,7 +176,7 @@ function useSaveDelay(setNotificationStatus, delay) {
247
176
  setNotificationStatus(false);
248
177
  }
249
178
  };
250
- (0, import_react6.useEffect)(() => {
179
+ (0, import_react3.useEffect)(() => {
251
180
  return () => {
252
181
  clearTimeout(updateTimer);
253
182
  clearTimeout(notificationTimer);
@@ -259,26 +188,8 @@ function useSaveDelay(setNotificationStatus, delay) {
259
188
  // src/util/noop.ts
260
189
  var noop = () => void 0;
261
190
 
262
- // src/components/user-action/Label.tsx
263
- var import_clsx2 = __toESM(require("clsx"));
264
- var import_jsx_runtime3 = require("react/jsx-runtime");
265
- var styleMapping = {
266
- labelSmall: "textstyle-label-sm",
267
- labelMedium: "textstyle-label-md",
268
- labelBig: "textstyle-label-lg"
269
- };
270
- var Label = ({
271
- children,
272
- name,
273
- labelType = "labelSmall",
274
- className,
275
- ...props
276
- }) => {
277
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("label", { ...props, className: (0, import_clsx2.default)(styleMapping[labelType], className), children: children ? children : name });
278
- };
279
-
280
191
  // src/components/user-action/Input.tsx
281
- var import_jsx_runtime4 = require("react/jsx-runtime");
192
+ var import_jsx_runtime3 = require("react/jsx-runtime");
282
193
  var Input = ({
283
194
  id,
284
195
  type = "text",
@@ -298,15 +209,15 @@ var Input = ({
298
209
  restartTimer,
299
210
  clearUpdateTimer
300
211
  } = useSaveDelay(() => void 0, 3e3);
301
- const ref = (0, import_react7.useRef)(null);
302
- (0, import_react7.useEffect)(() => {
212
+ const ref = (0, import_react4.useRef)(null);
213
+ (0, import_react4.useEffect)(() => {
303
214
  if (autoFocus) {
304
215
  ref.current?.focus();
305
216
  }
306
217
  }, [autoFocus]);
307
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: (0, import_clsx3.default)({ "w-full": expanded }, containerClassName), children: [
308
- label && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Label, { ...label, htmlFor: id, className: (0, import_clsx3.default)("mb-1", label.className) }),
309
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
218
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx2.default)({ "w-full": expanded }, containerClassName), children: [
219
+ label && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Label, { ...label, htmlFor: id, className: (0, import_clsx2.default)("mb-1", label.className) }),
220
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
310
221
  "input",
311
222
  {
312
223
  ref,
@@ -339,7 +250,7 @@ var Input = ({
339
250
  )
340
251
  ] });
341
252
  };
342
- var FormInput = (0, import_react7.forwardRef)(function FormInput2({
253
+ var FormInput = (0, import_react4.forwardRef)(function FormInput2({
343
254
  id,
344
255
  labelText,
345
256
  errorText,
@@ -350,13 +261,13 @@ var FormInput = (0, import_react7.forwardRef)(function FormInput2({
350
261
  required,
351
262
  ...restProps
352
263
  }, ref) {
353
- const input = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
264
+ const input = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
354
265
  "input",
355
266
  {
356
267
  ref,
357
268
  id,
358
269
  ...restProps,
359
- className: (0, import_clsx3.default)(
270
+ className: (0, import_clsx2.default)(
360
271
  {
361
272
  "focus:border-primary focus:ring-primary": !errorText,
362
273
  "focus:border-negative focus:ring-negative text-negative": !!errorText
@@ -365,208 +276,422 @@ var FormInput = (0, import_react7.forwardRef)(function FormInput2({
365
276
  )
366
277
  }
367
278
  );
368
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: (0, import_clsx3.default)("flex flex-col gap-y-1", containerClassName), children: [
369
- labelText && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { htmlFor: id, className: (0, import_clsx3.default)("textstyle-label-md", labelClassName), children: [
279
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx2.default)("flex flex-col gap-y-1", containerClassName), children: [
280
+ labelText && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { htmlFor: id, className: (0, import_clsx2.default)("textstyle-label-md", labelClassName), children: [
370
281
  labelText,
371
- required && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-primary font-bold", children: "*" })
282
+ required && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-primary font-bold", children: "*" })
372
283
  ] }),
373
284
  input,
374
- errorText && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("label", { htmlFor: id, className: (0, import_clsx3.default)("text-negative", errorClassName), children: errorText })
285
+ errorText && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("label", { htmlFor: id, className: (0, import_clsx2.default)("text-negative", errorClassName), children: errorText })
375
286
  ] });
376
287
  });
377
288
 
378
- // src/components/user-action/Checkbox.tsx
379
- var import_react8 = require("react");
380
- var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"));
381
- var import_lucide_react = require("lucide-react");
382
- var import_clsx4 = __toESM(require("clsx"));
383
- var import_jsx_runtime5 = require("react/jsx-runtime");
384
- var checkboxSizeMapping = {
385
- small: "size-4",
386
- medium: "size-6",
387
- large: "size-8"
289
+ // src/components/user-action/Button.tsx
290
+ var import_clsx3 = __toESM(require("clsx"));
291
+ var import_jsx_runtime4 = require("react/jsx-runtime");
292
+ var paddingMapping = {
293
+ small: "btn-sm",
294
+ medium: "btn-md",
295
+ large: "btn-lg"
388
296
  };
389
- var checkboxIconSizeMapping = {
390
- small: "size-3",
391
- medium: "size-5",
392
- large: "size-7"
297
+ var iconPaddingMapping = {
298
+ small: "icon-btn-sm",
299
+ medium: "icon-btn-md",
300
+ large: "icon-btn-lg"
393
301
  };
394
- var Checkbox = ({
395
- id,
396
- label,
397
- checked,
398
- disabled,
399
- onChange,
400
- onChangeTristate,
302
+ var ButtonUtil = {
303
+ paddingMapping,
304
+ iconPaddingMapping
305
+ };
306
+ var SolidButton = ({
307
+ children,
308
+ disabled = false,
309
+ color = "primary",
401
310
  size = "medium",
402
- className = "",
403
- containerClassName
311
+ startIcon,
312
+ endIcon,
313
+ onClick,
314
+ className,
315
+ ...restProps
404
316
  }) => {
405
- const usedSizeClass = checkboxSizeMapping[size];
406
- const innerIconSize = checkboxIconSizeMapping[size];
407
- const propagateChange = (checked2) => {
408
- if (onChangeTristate) {
409
- onChangeTristate(checked2);
317
+ const colorClasses = {
318
+ primary: "bg-button-solid-primary-background text-button-solid-primary-text",
319
+ secondary: "bg-button-solid-secondary-background text-button-solid-secondary-text",
320
+ tertiary: "bg-button-solid-tertiary-background text-button-solid-tertiary-text",
321
+ positive: "bg-button-solid-positive-background text-button-solid-positive-text",
322
+ warning: "bg-button-solid-warning-background text-button-solid-warning-text",
323
+ negative: "bg-button-solid-negative-background text-button-solid-negative-text",
324
+ neutral: "bg-button-solid-neutral-background text-button-solid-neutral-text"
325
+ }[color];
326
+ const iconColorClasses = {
327
+ primary: "text-button-solid-primary-icon",
328
+ secondary: "text-button-solid-secondary-icon",
329
+ tertiary: "text-button-solid-tertiary-icon",
330
+ positive: "text-button-solid-positive-icon",
331
+ warning: "text-button-solid-warning-icon",
332
+ negative: "text-button-solid-negative-icon",
333
+ neutral: "text-button-solid-neutral-icon"
334
+ }[color];
335
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
336
+ "button",
337
+ {
338
+ onClick: disabled ? void 0 : onClick,
339
+ disabled: disabled || onClick === void 0,
340
+ className: (0, import_clsx3.default)(
341
+ {
342
+ "text-disabled-text bg-disabled-background cursor-not-allowed": disabled,
343
+ [(0, import_clsx3.default)(colorClasses, "hover:brightness-90")]: !disabled
344
+ },
345
+ ButtonUtil.paddingMapping[size],
346
+ className
347
+ ),
348
+ ...restProps,
349
+ children: [
350
+ startIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
351
+ "span",
352
+ {
353
+ className: (0, import_clsx3.default)({
354
+ [iconColorClasses]: !disabled,
355
+ [`text-disabled-icon`]: disabled
356
+ }),
357
+ children: startIcon
358
+ }
359
+ ),
360
+ children,
361
+ endIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
362
+ "span",
363
+ {
364
+ className: (0, import_clsx3.default)({
365
+ [iconColorClasses]: !disabled,
366
+ [`text-disabled-icon`]: disabled
367
+ }),
368
+ children: endIcon
369
+ }
370
+ )
371
+ ]
410
372
  }
411
- if (onChange) {
412
- onChange(checked2 === "indeterminate" ? false : checked2);
373
+ );
374
+ };
375
+ var TextButton = ({
376
+ children,
377
+ disabled = false,
378
+ color = "neutral",
379
+ size = "medium",
380
+ startIcon,
381
+ endIcon,
382
+ onClick,
383
+ className,
384
+ ...restProps
385
+ }) => {
386
+ const colorClasses = {
387
+ primary: "bg-transparent text-button-text-primary-text",
388
+ negative: "bg-transparent text-button-text-negative-text",
389
+ neutral: "bg-transparent text-button-text-neutral-text"
390
+ }[color];
391
+ const iconColorClasses = {
392
+ primary: "text-button-text-primary-icon",
393
+ negative: "text-button-text-negative-icon",
394
+ neutral: "text-button-text-neutral-icon"
395
+ }[color];
396
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
397
+ "button",
398
+ {
399
+ onClick: disabled ? void 0 : onClick,
400
+ disabled: disabled || onClick === void 0,
401
+ className: (0, import_clsx3.default)(
402
+ {
403
+ "text-disabled-text cursor-not-allowed": disabled,
404
+ [(0, import_clsx3.default)(colorClasses, "hover:bg-button-text-hover-background rounded-full")]: !disabled
405
+ },
406
+ ButtonUtil.paddingMapping[size],
407
+ className
408
+ ),
409
+ ...restProps,
410
+ children: [
411
+ startIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
412
+ "span",
413
+ {
414
+ className: (0, import_clsx3.default)({
415
+ [iconColorClasses]: !disabled,
416
+ [`text-disabled-icon`]: disabled
417
+ }),
418
+ children: startIcon
419
+ }
420
+ ),
421
+ children,
422
+ endIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
423
+ "span",
424
+ {
425
+ className: (0, import_clsx3.default)({
426
+ [iconColorClasses]: !disabled,
427
+ [`text-disabled-icon`]: disabled
428
+ }),
429
+ children: endIcon
430
+ }
431
+ )
432
+ ]
413
433
  }
434
+ );
435
+ };
436
+ var IconButton = ({
437
+ children,
438
+ disabled = false,
439
+ color = "primary",
440
+ size = "medium",
441
+ onClick,
442
+ className,
443
+ ...restProps
444
+ }) => {
445
+ const colorClasses = {
446
+ primary: "bg-button-solid-primary-background text-button-solid-primary-text",
447
+ secondary: "bg-button-solid-secondary-background text-button-solid-secondary-text",
448
+ tertiary: "bg-button-solid-tertiary-background text-button-solid-tertiary-text",
449
+ positive: "bg-button-solid-positive-background text-button-solid-positive-text",
450
+ warning: "bg-button-solid-warning-background text-button-solid-warning-text",
451
+ negative: "bg-button-solid-negative-background text-button-solid-negative-text",
452
+ neutral: "bg-button-solid-neutral-background text-button-solid-neutral-text"
453
+ }[color];
454
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
455
+ "button",
456
+ {
457
+ onClick: disabled ? void 0 : onClick,
458
+ disabled: disabled || onClick === void 0,
459
+ className: (0, import_clsx3.default)(
460
+ {
461
+ "text-disabled-text bg-disabled-background cursor-not-allowed": disabled,
462
+ [(0, import_clsx3.default)(colorClasses, "hover:brightness-90")]: !disabled
463
+ },
464
+ ButtonUtil.iconPaddingMapping[size],
465
+ className
466
+ ),
467
+ ...restProps,
468
+ children
469
+ }
470
+ );
471
+ };
472
+
473
+ // src/hooks/useSearch.ts
474
+ var import_react5 = require("react");
475
+
476
+ // src/util/simpleSearch.ts
477
+ var MultiSearchWithMapping = (search, objects, mapping) => {
478
+ return objects.filter((object) => {
479
+ const mappedSearchKeywords = mapping(object)?.map((value) => value.toLowerCase().trim());
480
+ if (!mappedSearchKeywords) {
481
+ return true;
482
+ }
483
+ return !!mappedSearchKeywords.find((value) => value.includes(search.toLowerCase().trim()));
484
+ });
485
+ };
486
+
487
+ // src/hooks/useSearch.ts
488
+ var useSearch = ({
489
+ list,
490
+ initialSearch,
491
+ searchMapping
492
+ }) => {
493
+ const [items, setItems] = (0, import_react5.useState)(list);
494
+ const [search, setSearch] = (0, import_react5.useState)(initialSearch);
495
+ (0, import_react5.useEffect)(() => {
496
+ setItems(list);
497
+ }, [list]);
498
+ const result = (0, import_react5.useMemo)(
499
+ () => MultiSearchWithMapping(search, items, searchMapping),
500
+ [search, items, searchMapping]
501
+ );
502
+ return {
503
+ result,
504
+ hasResult: result.length > 0,
505
+ allItems: items,
506
+ setItems,
507
+ search,
508
+ setSearch
414
509
  };
415
- const changeValue = () => {
416
- const newValue = checked === "indeterminate" ? false : !checked;
417
- propagateChange(newValue);
418
- };
419
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: (0, import_clsx4.default)("row justify-center items-center", containerClassName), children: [
420
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
421
- CheckboxPrimitive.Root,
422
- {
423
- onCheckedChange: propagateChange,
424
- checked,
425
- disabled,
426
- id,
427
- className: (0, import_clsx4.default)(usedSizeClass, `items-center border-2 rounded outline-none focus:border-primary`, {
428
- "text-disabled-text border-disabled-text bg-disabled-background": disabled,
429
- "bg-surface": !disabled && !checked,
430
- "bg-primary/30 border-primary text-primary": checked === true || checked === "indeterminate",
431
- "hover:border-primary focus:hover:border-primary": !checked
432
- }, className),
433
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(CheckboxPrimitive.Indicator, { children: [
434
- checked === true && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Check, { className: innerIconSize }),
435
- checked === "indeterminate" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Minus, { className: innerIconSize })
436
- ] })
437
- }
438
- ),
439
- label && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
440
- Label,
441
- {
442
- ...label,
443
- className: (0, import_clsx4.default)("cursor-pointer", label.className),
444
- htmlFor: id,
445
- onClick: changeValue
446
- }
447
- )
448
- ] });
449
510
  };
450
511
 
451
- // src/components/user-action/MultiSelect.tsx
452
- var import_jsx_runtime6 = require("react/jsx-runtime");
453
- var defaultMultiSelectTranslation = {
512
+ // src/localization/defaults/form.ts
513
+ var formTranslation = {
454
514
  en: {
455
- select: "Select",
515
+ all: "All",
516
+ back: "Back",
517
+ cancel: "Cancel",
518
+ change: "Change",
519
+ clear: "Clear",
520
+ close: "Close",
521
+ confirm: "Confirm",
522
+ decline: "Decline",
523
+ delete: "Delete",
524
+ discard: "Discard",
525
+ discardChanges: "Discard Changes",
526
+ done: "Done",
527
+ edit: "Edit",
528
+ enterText: "Enter text here",
529
+ error: "Error",
530
+ exit: "Exit",
531
+ fieldRequiredError: "This field is required.",
532
+ invalidEmailError: "Please enter a valid email address.",
533
+ less: "Less",
534
+ loading: "Loading",
535
+ maxLengthError: "Maximum length exceeded.",
536
+ minLengthError: "Minimum length not met.",
537
+ more: "More",
538
+ next: "Next",
539
+ no: "No",
540
+ none: "None",
541
+ of: "of",
542
+ optional: "Optional",
543
+ pleaseWait: "Please wait...",
544
+ previous: "Previous",
545
+ remove: "Remove",
546
+ required: "Required",
547
+ reset: "Reset",
548
+ save: "Save",
456
549
  search: "Search",
457
- selected: "selected"
550
+ select: "Select",
551
+ selectOption: "Select an option",
552
+ show: "Show",
553
+ showMore: "Show more",
554
+ showLess: "Show less",
555
+ submit: "Submit",
556
+ success: "Success",
557
+ update: "Update",
558
+ unsavedChanges: "Unsaved Changes",
559
+ unsavedChangesSaveQuestion: "Do you want to save your changes?",
560
+ yes: "Yes"
458
561
  },
459
562
  de: {
460
- select: "Ausw\xE4hlen",
563
+ all: "Alle",
564
+ back: "Zur\xFCck",
565
+ cancel: "Abbrechen",
566
+ change: "\xC4ndern",
567
+ clear: "L\xF6schen",
568
+ close: "Schlie\xDFen",
569
+ confirm: "Best\xE4tigen",
570
+ decline: "Ablehnen",
571
+ delete: "L\xF6schen",
572
+ discard: "Verwerfen",
573
+ discardChanges: "\xC4nderungen Verwerfen",
574
+ done: "Fertig",
575
+ edit: "Bearbeiten",
576
+ enterText: "Text hier eingeben",
577
+ error: "Fehler",
578
+ exit: "Beenden",
579
+ fieldRequiredError: "Dieses Feld ist erforderlich.",
580
+ invalidEmailError: "Bitte geben Sie eine g\xFCltige E-Mail-Adresse ein.",
581
+ less: "Weniger",
582
+ loading: "L\xE4dt",
583
+ maxLengthError: "Maximale L\xE4nge \xFCberschritten.",
584
+ minLengthError: "Mindestl\xE4nge nicht erreicht.",
585
+ more: "Mehr",
586
+ next: "Weiter",
587
+ no: "Nein",
588
+ none: "Nichts",
589
+ of: "von",
590
+ optional: "Optional",
591
+ pleaseWait: "Bitte warten...",
592
+ previous: "Vorherige",
593
+ remove: "Entfernen",
594
+ required: "Erforderlich",
595
+ reset: "Zur\xFCcksetzen",
596
+ save: "Speichern",
461
597
  search: "Suche",
462
- selected: "ausgew\xE4hlt"
598
+ select: "Select",
599
+ selectOption: "Option ausw\xE4hlen",
600
+ show: "Anzeigen",
601
+ showMore: "Mehr anzeigen",
602
+ showLess: "Weniger anzeigen",
603
+ submit: "Abschicken",
604
+ success: "Erfolg",
605
+ update: "Update",
606
+ unsavedChanges: "Ungespeicherte \xC4nderungen",
607
+ unsavedChangesSaveQuestion: "M\xF6chtest du die \xC4nderungen speichern?",
608
+ yes: "Ja"
463
609
  }
464
610
  };
465
- var MultiSelect = ({
611
+
612
+ // src/components/layout-and-navigation/SearchableList.tsx
613
+ var import_jsx_runtime5 = require("react/jsx-runtime");
614
+ var defaultSearchableListTranslation = {
615
+ en: {
616
+ nothingFound: "Nothing found"
617
+ },
618
+ de: {
619
+ nothingFound: "Nichts gefunden"
620
+ }
621
+ };
622
+ var SearchableList = ({
466
623
  overwriteTranslation,
467
- options,
468
- onChange,
469
- search,
470
- disabled = false,
471
- selectedDisplay,
472
- label,
473
- hintText,
474
- showDisabledOptions = true,
475
- className = "",
476
- triggerClassName = ""
624
+ list,
625
+ initialSearch = "",
626
+ searchMapping,
627
+ autoFocus,
628
+ minimumItemsForSearch = 6,
629
+ itemMapper,
630
+ className,
631
+ resultListClassName
477
632
  }) => {
478
- const translation = useTranslation(defaultMultiSelectTranslation, overwriteTranslation);
479
- const [searchText, setSearchText] = (0, import_react9.useState)(search?.initialSearch ?? "");
480
- let filteredOptions = options;
481
- const enableSearch = !!search;
482
- if (enableSearch && !!searchText) {
483
- filteredOptions = MultiSearchWithMapping(
484
- searchText,
485
- filteredOptions,
486
- (value) => search.searchMapping(value)
487
- );
488
- }
489
- if (!showDisabledOptions) {
490
- filteredOptions = filteredOptions.filter((value) => !value.disabled);
491
- }
492
- const selectedItems = options.filter((value) => value.selected);
493
- const menuButtonText = selectedItems.length === 0 ? hintText ?? translation.select : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: `${selectedItems.length} ${translation.selected}` });
494
- const borderColor = "border-menu-border";
495
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: (0, import_clsx5.default)(className), children: [
496
- label && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
497
- Label,
498
- {
499
- ...label,
500
- htmlFor: label.name,
501
- className: (0, import_clsx5.default)(" mb-1", label.className),
502
- labelType: label.labelType ?? "labelBig"
503
- }
504
- ),
505
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
506
- Menu,
507
- {
508
- alignment: "t_",
509
- trigger: (onClick, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
510
- "div",
511
- {
512
- ref,
513
- onClick: disabled ? void 0 : onClick,
514
- className: (0, import_clsx5.default)(
515
- borderColor,
516
- "bg-menu-background text-menu-text inline-w-full justify-between items-center rounded-lg border-2 px-4 py-2 font-medium",
517
- {
518
- "hover:border-primary cursor-pointer": !disabled,
519
- "bg-disabled-background text-disabled cursor-not-allowed": disabled
520
- },
521
- triggerClassName
522
- ),
523
- children: selectedDisplay ? selectedDisplay({ items: options, disabled }) : menuButtonText
524
- }
525
- ),
526
- menuClassName: (0, import_clsx5.default)(
527
- "!rounded-lg !shadow-lg !max-h-[500px] !min-w-[400px] !max-w-[70vh] !overflow-y-auto !border !border-2",
528
- borderColor,
529
- { "!py-0": !enableSearch, "!pb-0": enableSearch }
530
- ),
531
- children: [
532
- enableSearch && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "row gap-x-2 items-center px-2 py-2", children: [
533
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Input, { autoFocus: true, className: "w-full", value: searchText, onChangeText: setSearchText }),
534
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Search, {})
535
- ] }, "selectSearch"),
536
- filteredOptions.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
537
- MenuItem,
538
- {
539
- className: (0, import_clsx5.default)({
540
- "cursor-not-allowed !bg-disabled-background !text-disabled-text hover:brightness-100": !!option.disabled,
541
- "cursor-pointer": !option.disabled
542
- }),
543
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
544
- "div",
545
- {
546
- className: (0, import_clsx5.default)("overflow-hidden whitespace-nowrap text-ellipsis row items-center gap-x-2", option.className),
547
- onClick: () => {
548
- if (!option.disabled) {
549
- onChange(options.map((value) => value.value === option.value ? {
550
- ...option,
551
- selected: !value.selected
552
- } : value));
553
- }
554
- },
555
- children: [
556
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Checkbox, { checked: option.selected, disabled: option.disabled, size: "small" }),
557
- option.label
558
- ]
559
- }
560
- )
561
- },
562
- `item${index}`
563
- ))
564
- ]
565
- }
566
- )
633
+ const translation = useTranslation([defaultSearchableListTranslation, formTranslation], overwriteTranslation);
634
+ const { result, hasResult, search, setSearch } = useSearch({ list, initialSearch, searchMapping });
635
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: (0, import_clsx4.default)("col gap-y-2", className), children: [
636
+ list.length > minimumItemsForSearch && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "row justify-between gap-x-4 items-center", children: [
637
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
638
+ Input,
639
+ {
640
+ value: search,
641
+ onChangeText: setSearch,
642
+ placeholder: translation("search"),
643
+ autoFocus,
644
+ className: "w-full"
645
+ }
646
+ ),
647
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(IconButton, { color: "neutral", disabled: search.length === 0, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Search, { className: "w-full h-full" }) })
648
+ ] }),
649
+ hasResult ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: (0, import_clsx4.default)("col gap-y-1", resultListClassName), children: result.map(itemMapper) }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "row text-description py-2 px-2", children: translation("nothingFound") })
567
650
  ] });
568
651
  };
569
652
 
653
+ // src/components/layout-and-navigation/Tile.tsx
654
+ var import_clsx5 = __toESM(require("clsx"));
655
+ var import_lucide_react2 = require("lucide-react");
656
+ var import_jsx_runtime6 = require("react/jsx-runtime");
657
+ var Tile = ({
658
+ title,
659
+ description,
660
+ onClick,
661
+ isSelected = false,
662
+ isDisabled = false,
663
+ prefix,
664
+ suffix,
665
+ normalClassName = "hover:bg-primary/40 cursor-pointer",
666
+ selectedClassName = " bg-primary/20",
667
+ disabledClassName = "text-disabled-text bg-disabled-background cursor-not-allowed",
668
+ className
669
+ }) => {
670
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
671
+ "div",
672
+ {
673
+ className: (0, import_clsx5.default)(
674
+ "row gap-x-2 w-full items-center",
675
+ {
676
+ [normalClassName]: !!onClick && !isDisabled,
677
+ [selectedClassName]: isSelected && !isDisabled,
678
+ [disabledClassName]: isDisabled
679
+ },
680
+ className
681
+ ),
682
+ onClick: isDisabled ? void 0 : onClick,
683
+ children: [
684
+ prefix ?? (isSelected ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Check, { size: 24 }) : void 0),
685
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "col gap-y-0 w-full", children: [
686
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h4", { className: (0, import_clsx5.default)(title.className ?? "textstyle-title-normal"), children: title.value }),
687
+ !!description && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: (0, import_clsx5.default)(description.className ?? "textstyle-description"), children: description.value })
688
+ ] }),
689
+ suffix
690
+ ]
691
+ }
692
+ );
693
+ };
694
+
570
695
  // src/components/layout-and-navigation/Chip.tsx
571
696
  var import_clsx6 = __toESM(require("clsx"));
572
697
  var import_jsx_runtime7 = require("react/jsx-runtime");
@@ -632,99 +757,163 @@ var ChipList = ({
632
757
  )) });
633
758
  };
634
759
 
635
- // src/components/properties/PropertyBase.tsx
636
- var import_lucide_react3 = require("lucide-react");
637
- var import_clsx8 = __toESM(require("clsx"));
760
+ // src/hooks/useOutsideClick.ts
761
+ var import_react6 = require("react");
762
+ var useOutsideClick = (refs, handler) => {
763
+ (0, import_react6.useEffect)(() => {
764
+ const listener = (event) => {
765
+ if (event.target === null) return;
766
+ if (refs.some((ref) => !ref.current || ref.current.contains(event.target))) {
767
+ return;
768
+ }
769
+ handler();
770
+ };
771
+ document.addEventListener("mousedown", listener);
772
+ document.addEventListener("touchstart", listener);
773
+ return () => {
774
+ document.removeEventListener("mousedown", listener);
775
+ document.removeEventListener("touchstart", listener);
776
+ };
777
+ }, [refs, handler]);
778
+ };
638
779
 
639
- // src/components/user-action/Button.tsx
640
- var import_clsx7 = __toESM(require("clsx"));
780
+ // src/components/user-action/MultiSelect.tsx
641
781
  var import_jsx_runtime8 = require("react/jsx-runtime");
642
- var paddingMapping = {
643
- small: "btn-sm",
644
- medium: "btn-md",
645
- large: "btn-lg"
646
- };
647
- var iconPaddingMapping = {
648
- small: "icon-btn-sm",
649
- medium: "icon-btn-md",
650
- large: "icon-btn-lg"
651
- };
652
- var ButtonUtil = {
653
- paddingMapping,
654
- iconPaddingMapping
782
+ var defaultMultiSelectTranslation = {
783
+ en: {
784
+ selected: `{{amount}} selected`
785
+ },
786
+ de: {
787
+ selected: `{{amount}} ausgew\xE4hlt`
788
+ }
655
789
  };
656
- var TextButton = ({
657
- children,
658
- disabled = false,
659
- color = "neutral",
660
- size = "medium",
661
- startIcon,
662
- endIcon,
663
- onClick,
664
- className,
665
- ...restProps
790
+ var MultiSelect = ({
791
+ overwriteTranslation,
792
+ options,
793
+ label,
794
+ onChange,
795
+ hintText,
796
+ isDisabled = false,
797
+ isSearchEnabled = false,
798
+ selectedDisplayOverwrite,
799
+ useChipDisplay = false,
800
+ className = ""
666
801
  }) => {
667
- const colorClasses = {
668
- primary: "bg-transparent text-button-text-primary-text",
669
- negative: "bg-transparent text-button-text-negative-text",
670
- neutral: "bg-transparent text-button-text-neutral-text"
671
- }[color];
672
- const iconColorClasses = {
673
- primary: "text-button-text-primary-icon",
674
- negative: "text-button-text-negative-icon",
675
- neutral: "text-button-text-neutral-icon"
676
- }[color];
677
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
678
- "button",
679
- {
680
- onClick: disabled ? void 0 : onClick,
681
- disabled: disabled || onClick === void 0,
682
- className: (0, import_clsx7.default)(
802
+ const translation = useTranslation([formTranslation, defaultMultiSelectTranslation], overwriteTranslation);
803
+ const triggerRef = (0, import_react7.useRef)(null);
804
+ const menuRef = (0, import_react7.useRef)(null);
805
+ const [isOpen, setIsOpen] = (0, import_react7.useState)(false);
806
+ useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
807
+ const selectedItems = options.filter((value) => value.selected);
808
+ const isShowingHint = !selectedDisplayOverwrite && selectedItems.length === 0;
809
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: (0, import_clsx7.default)(className), children: [
810
+ label && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
811
+ Label,
812
+ {
813
+ ...label,
814
+ htmlFor: label.name,
815
+ className: (0, import_clsx7.default)(" mb-1", label.className),
816
+ labelType: label.labelType ?? "labelBig"
817
+ }
818
+ ),
819
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "relative", children: [
820
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
821
+ "button",
683
822
  {
684
- "text-disabled-text cursor-not-allowed": disabled,
685
- [(0, import_clsx7.default)(colorClasses, "hover:bg-button-text-hover-background rounded-full")]: !disabled
686
- },
687
- ButtonUtil.paddingMapping[size],
688
- className
823
+ ref: triggerRef,
824
+ className: (0, import_clsx7.default)(
825
+ "btn-md justify-between w-full border-2 h-auto",
826
+ {
827
+ "rounded-b-lg": !open,
828
+ "bg-menu-background border-menu-border hover:border-primary": !isDisabled,
829
+ "bg-disabled-background text-disabled-text border-disabled-background cursor-not-allowed": isDisabled
830
+ }
831
+ ),
832
+ onClick: () => setIsOpen(!isOpen),
833
+ disabled: isDisabled,
834
+ children: [
835
+ !isShowingHint && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "font-semibold text-menu-text", children: selectedDisplayOverwrite ?? (useChipDisplay && selectedItems ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ChipList, { list: selectedItems.map((value) => ({ children: value.label })) }) : translation("selected", { replacements: { amount: selectedItems.length.toString() } })) }),
836
+ isShowingHint && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "textstyle-description", children: hintText ?? translation("select") }),
837
+ isOpen ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react3.ChevronUp, { size: 24, className: "min-w-6" }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react3.ChevronDown, { className: "min-w-6" })
838
+ ]
839
+ }
689
840
  ),
690
- ...restProps,
691
- children: [
692
- startIcon && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
693
- "span",
694
- {
695
- className: (0, import_clsx7.default)({
696
- [iconColorClasses]: !disabled,
697
- [`text-disabled-icon`]: disabled
698
- }),
699
- children: startIcon
700
- }
701
- ),
702
- children,
703
- endIcon && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
704
- "span",
705
- {
706
- className: (0, import_clsx7.default)({
707
- [iconColorClasses]: !disabled,
708
- [`text-disabled-icon`]: disabled
709
- }),
710
- children: endIcon
711
- }
712
- )
713
- ]
714
- }
715
- );
841
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
842
+ "div",
843
+ {
844
+ ref: menuRef,
845
+ 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",
846
+ children: [
847
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
848
+ SearchableList,
849
+ {
850
+ list: options,
851
+ minimumItemsForSearch: isSearchEnabled ? void 0 : options.length,
852
+ searchMapping: (item) => item.searchTags,
853
+ itemMapper: (option, index) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
854
+ Tile,
855
+ {
856
+ isSelected: option.selected,
857
+ className: "px-2 py-1 rounded-md",
858
+ disabledClassName: "text-disabled-text cursor-not-allowed",
859
+ title: { value: option.label, className: "font-semibold" },
860
+ onClick: () => {
861
+ onChange(options.map((value) => value.value === option.value ? {
862
+ ...option,
863
+ selected: !value.selected
864
+ } : value));
865
+ },
866
+ isDisabled: option.disabled
867
+ },
868
+ index
869
+ )
870
+ }
871
+ ),
872
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "row justify-between mt-2", children: [
873
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "row gap-x-2", children: [
874
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
875
+ SolidButton,
876
+ {
877
+ color: "neutral",
878
+ size: "small",
879
+ onClick: () => {
880
+ onChange(options.map((option) => ({
881
+ ...option,
882
+ selected: !option.disabled
883
+ })));
884
+ },
885
+ disabled: options.every((value) => value.selected || value.disabled),
886
+ children: translation("all")
887
+ }
888
+ ),
889
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
890
+ SolidButton,
891
+ {
892
+ color: "neutral",
893
+ size: "small",
894
+ onClick: () => {
895
+ onChange(options.map((option) => ({
896
+ ...option,
897
+ selected: false
898
+ })));
899
+ },
900
+ children: translation("none")
901
+ }
902
+ )
903
+ ] }),
904
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SolidButton, { size: "small", onClick: () => setIsOpen(false), children: "Done" })
905
+ ] })
906
+ ]
907
+ }
908
+ )
909
+ ] })
910
+ ] });
716
911
  };
717
912
 
718
913
  // src/components/properties/PropertyBase.tsx
914
+ var import_lucide_react4 = require("lucide-react");
915
+ var import_clsx8 = __toESM(require("clsx"));
719
916
  var import_jsx_runtime9 = require("react/jsx-runtime");
720
- var defaultPropertyBaseTranslation = {
721
- en: {
722
- remove: "Remove"
723
- },
724
- de: {
725
- remove: "Entfernen"
726
- }
727
- };
728
917
  var PropertyBase = ({
729
918
  overwriteTranslation,
730
919
  name,
@@ -736,7 +925,7 @@ var PropertyBase = ({
736
925
  onRemove,
737
926
  className = ""
738
927
  }) => {
739
- const translation = useTranslation(defaultPropertyBaseTranslation, overwriteTranslation);
928
+ const translation = useTranslation([formTranslation], overwriteTranslation);
740
929
  const requiredAndNoValue = softRequired && !hasValue;
741
930
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: (0, import_clsx8.default)("row gap-x-0 group", className), children: [
742
931
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
@@ -755,13 +944,13 @@ var PropertyBase = ({
755
944
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
756
945
  "div",
757
946
  {
758
- className: (0, import_clsx8.default)("row grow justify-between items-center rounded-r-xl border-2 border-l-0", {
947
+ className: (0, import_clsx8.default)("row gap-x-0 grow justify-between items-center rounded-r-xl border-2 border-l-0", {
759
948
  "bg-surface group-hover:border-primary": !requiredAndNoValue,
760
949
  "bg-surface-warning group-hover:border-warning border-warning/90": requiredAndNoValue
761
950
  }, className),
762
951
  children: [
763
952
  input({ softRequired, hasValue }),
764
- requiredAndNoValue && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "text-warning pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.AlertTriangle, { size: 24 }) }),
953
+ requiredAndNoValue && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "text-warning pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react4.AlertTriangle, { size: 24 }) }),
765
954
  onRemove && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
766
955
  TextButton,
767
956
  {
@@ -769,7 +958,7 @@ var PropertyBase = ({
769
958
  color: "negative",
770
959
  className: (0, import_clsx8.default)("pr-4 items-center", { "!text-transparent": !hasValue || readOnly }),
771
960
  disabled: !hasValue || readOnly,
772
- children: translation.remove
961
+ children: translation("remove")
773
962
  }
774
963
  )
775
964
  ]
@@ -780,14 +969,6 @@ var PropertyBase = ({
780
969
 
781
970
  // src/components/properties/MultiSelectProperty.tsx
782
971
  var import_jsx_runtime10 = require("react/jsx-runtime");
783
- var defaultMultiSelectPropertyTranslation = {
784
- en: {
785
- select: "Select"
786
- },
787
- de: {
788
- select: "Ausw\xE4hlen"
789
- }
790
- };
791
972
  var MultiSelectProperty = ({
792
973
  overwriteTranslation,
793
974
  options,
@@ -797,12 +978,8 @@ var MultiSelectProperty = ({
797
978
  onRemove,
798
979
  ...multiSelectProps
799
980
  }) => {
800
- const translation = useTranslation(defaultMultiSelectPropertyTranslation, overwriteTranslation);
981
+ const translation = useTranslation([formTranslation], overwriteTranslation);
801
982
  const hasValue = options.some((value) => value.selected);
802
- let triggerClassName;
803
- if (softRequired && !hasValue) {
804
- triggerClassName = "border-warning hover:brightness-90";
805
- }
806
983
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
807
984
  PropertyBase,
808
985
  {
@@ -811,7 +988,7 @@ var MultiSelectProperty = ({
811
988
  readOnly,
812
989
  softRequired,
813
990
  hasValue,
814
- icon: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react4.List, { size: 16 }),
991
+ icon: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react5.List, { size: 16 }),
815
992
  input: ({ softRequired: softRequired2 }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
816
993
  "div",
817
994
  {
@@ -821,17 +998,10 @@ var MultiSelectProperty = ({
821
998
  {
822
999
  ...multiSelectProps,
823
1000
  className: (0, import_clsx9.default)("w-full", { "bg-surface-warning": softRequired2 && !hasValue }),
824
- triggerClassName,
825
- selectedDisplay: ({ items }) => {
826
- const selected = items.filter((value) => value.selected);
827
- if (selected.length === 0) {
828
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: "Select" });
829
- }
830
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ChipList, { list: selected.map((value) => ({ children: value.label })) });
831
- },
832
1001
  options,
833
- disabled: readOnly,
834
- hintText: `${translation.select}...`
1002
+ isDisabled: readOnly,
1003
+ useChipDisplay: true,
1004
+ hintText: `${translation("select")}...`
835
1005
  }
836
1006
  )
837
1007
  }