@helpwave/hightide 0.1.11 → 0.1.13

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 (277) hide show
  1. package/dist/components/date/DatePicker.js +37 -7
  2. package/dist/components/date/DatePicker.js.map +1 -1
  3. package/dist/components/date/DatePicker.mjs +37 -7
  4. package/dist/components/date/DatePicker.mjs.map +1 -1
  5. package/dist/components/date/DayPicker.js.map +1 -1
  6. package/dist/components/date/DayPicker.mjs.map +1 -1
  7. package/dist/components/date/TimePicker.js +27 -6
  8. package/dist/components/date/TimePicker.js.map +1 -1
  9. package/dist/components/date/TimePicker.mjs +27 -6
  10. package/dist/components/date/TimePicker.mjs.map +1 -1
  11. package/dist/components/date/YearMonthPicker.js +36 -6
  12. package/dist/components/date/YearMonthPicker.js.map +1 -1
  13. package/dist/components/date/YearMonthPicker.mjs +36 -6
  14. package/dist/components/date/YearMonthPicker.mjs.map +1 -1
  15. package/dist/components/dialogs/ConfirmDialog.js +16 -2
  16. package/dist/components/dialogs/ConfirmDialog.js.map +1 -1
  17. package/dist/components/dialogs/ConfirmDialog.mjs +16 -2
  18. package/dist/components/dialogs/ConfirmDialog.mjs.map +1 -1
  19. package/dist/components/layout-and-navigation/Carousel.js +42 -9
  20. package/dist/components/layout-and-navigation/Carousel.js.map +1 -1
  21. package/dist/components/layout-and-navigation/Carousel.mjs +42 -9
  22. package/dist/components/layout-and-navigation/Carousel.mjs.map +1 -1
  23. package/dist/components/layout-and-navigation/Expandable.js +1 -1
  24. package/dist/components/layout-and-navigation/Expandable.js.map +1 -1
  25. package/dist/components/layout-and-navigation/Expandable.mjs +1 -1
  26. package/dist/components/layout-and-navigation/Expandable.mjs.map +1 -1
  27. package/dist/components/layout-and-navigation/FAQSection.js +1 -1
  28. package/dist/components/layout-and-navigation/FAQSection.js.map +1 -1
  29. package/dist/components/layout-and-navigation/FAQSection.mjs +1 -1
  30. package/dist/components/layout-and-navigation/FAQSection.mjs.map +1 -1
  31. package/dist/components/layout-and-navigation/Overlay.js +16 -2
  32. package/dist/components/layout-and-navigation/Overlay.js.map +1 -1
  33. package/dist/components/layout-and-navigation/Overlay.mjs +16 -2
  34. package/dist/components/layout-and-navigation/Overlay.mjs.map +1 -1
  35. package/dist/components/layout-and-navigation/Pagination.d.mts +6 -3
  36. package/dist/components/layout-and-navigation/Pagination.d.ts +6 -3
  37. package/dist/components/layout-and-navigation/Pagination.js +404 -19
  38. package/dist/components/layout-and-navigation/Pagination.js.map +1 -1
  39. package/dist/components/layout-and-navigation/Pagination.mjs +404 -19
  40. package/dist/components/layout-and-navigation/Pagination.mjs.map +1 -1
  41. package/dist/components/layout-and-navigation/SearchableList.js +187 -67
  42. package/dist/components/layout-and-navigation/SearchableList.js.map +1 -1
  43. package/dist/components/layout-and-navigation/SearchableList.mjs +183 -63
  44. package/dist/components/layout-and-navigation/SearchableList.mjs.map +1 -1
  45. package/dist/components/layout-and-navigation/StepperBar.js +37 -5
  46. package/dist/components/layout-and-navigation/StepperBar.js.map +1 -1
  47. package/dist/components/layout-and-navigation/StepperBar.mjs +37 -5
  48. package/dist/components/layout-and-navigation/StepperBar.mjs.map +1 -1
  49. package/dist/components/layout-and-navigation/TextImage.js +2 -0
  50. package/dist/components/layout-and-navigation/TextImage.js.map +1 -1
  51. package/dist/components/layout-and-navigation/TextImage.mjs +2 -0
  52. package/dist/components/layout-and-navigation/TextImage.mjs.map +1 -1
  53. package/dist/components/loading-states/LoadingAndErrorComponent.js +2 -0
  54. package/dist/components/loading-states/LoadingAndErrorComponent.js.map +1 -1
  55. package/dist/components/loading-states/LoadingAndErrorComponent.mjs +2 -0
  56. package/dist/components/loading-states/LoadingAndErrorComponent.mjs.map +1 -1
  57. package/dist/components/loading-states/LoadingAnimation.js +2 -0
  58. package/dist/components/loading-states/LoadingAnimation.js.map +1 -1
  59. package/dist/components/loading-states/LoadingAnimation.mjs +2 -0
  60. package/dist/components/loading-states/LoadingAnimation.mjs.map +1 -1
  61. package/dist/components/loading-states/LoadingButton.js +9 -0
  62. package/dist/components/loading-states/LoadingButton.js.map +1 -1
  63. package/dist/components/loading-states/LoadingButton.mjs +9 -0
  64. package/dist/components/loading-states/LoadingButton.mjs.map +1 -1
  65. package/dist/components/modals/ConfirmModal.js +16 -2
  66. package/dist/components/modals/ConfirmModal.js.map +1 -1
  67. package/dist/components/modals/ConfirmModal.mjs +16 -2
  68. package/dist/components/modals/ConfirmModal.mjs.map +1 -1
  69. package/dist/components/modals/DiscardChangesModal.js +16 -2
  70. package/dist/components/modals/DiscardChangesModal.js.map +1 -1
  71. package/dist/components/modals/DiscardChangesModal.mjs +16 -2
  72. package/dist/components/modals/DiscardChangesModal.mjs.map +1 -1
  73. package/dist/components/modals/InputModal.d.mts +1 -0
  74. package/dist/components/modals/InputModal.d.ts +1 -0
  75. package/dist/components/modals/InputModal.js +196 -76
  76. package/dist/components/modals/InputModal.js.map +1 -1
  77. package/dist/components/modals/InputModal.mjs +189 -69
  78. package/dist/components/modals/InputModal.mjs.map +1 -1
  79. package/dist/components/modals/LanguageModal.js +203 -83
  80. package/dist/components/modals/LanguageModal.js.map +1 -1
  81. package/dist/components/modals/LanguageModal.mjs +192 -72
  82. package/dist/components/modals/LanguageModal.mjs.map +1 -1
  83. package/dist/components/modals/ThemeModal.js +206 -86
  84. package/dist/components/modals/ThemeModal.js.map +1 -1
  85. package/dist/components/modals/ThemeModal.mjs +193 -73
  86. package/dist/components/modals/ThemeModal.mjs.map +1 -1
  87. package/dist/components/properties/CheckboxProperty.js +17 -5
  88. package/dist/components/properties/CheckboxProperty.js.map +1 -1
  89. package/dist/components/properties/CheckboxProperty.mjs +17 -5
  90. package/dist/components/properties/CheckboxProperty.mjs.map +1 -1
  91. package/dist/components/properties/DateProperty.js +182 -65
  92. package/dist/components/properties/DateProperty.js.map +1 -1
  93. package/dist/components/properties/DateProperty.mjs +179 -62
  94. package/dist/components/properties/DateProperty.mjs.map +1 -1
  95. package/dist/components/properties/MultiSelectProperty.js +194 -74
  96. package/dist/components/properties/MultiSelectProperty.js.map +1 -1
  97. package/dist/components/properties/MultiSelectProperty.mjs +187 -67
  98. package/dist/components/properties/MultiSelectProperty.mjs.map +1 -1
  99. package/dist/components/properties/NumberProperty.js +182 -65
  100. package/dist/components/properties/NumberProperty.js.map +1 -1
  101. package/dist/components/properties/NumberProperty.mjs +179 -62
  102. package/dist/components/properties/NumberProperty.mjs.map +1 -1
  103. package/dist/components/properties/PropertyBase.js +12 -1
  104. package/dist/components/properties/PropertyBase.js.map +1 -1
  105. package/dist/components/properties/PropertyBase.mjs +12 -1
  106. package/dist/components/properties/PropertyBase.mjs.map +1 -1
  107. package/dist/components/properties/SelectProperty.js +194 -74
  108. package/dist/components/properties/SelectProperty.js.map +1 -1
  109. package/dist/components/properties/SelectProperty.mjs +187 -67
  110. package/dist/components/properties/SelectProperty.mjs.map +1 -1
  111. package/dist/components/properties/TextProperty.js +43 -34
  112. package/dist/components/properties/TextProperty.js.map +1 -1
  113. package/dist/components/properties/TextProperty.mjs +43 -34
  114. package/dist/components/properties/TextProperty.mjs.map +1 -1
  115. package/dist/components/table/FillerRowElement.d.mts +8 -0
  116. package/dist/components/table/FillerRowElement.d.ts +8 -0
  117. package/dist/components/table/FillerRowElement.js +36 -0
  118. package/dist/components/table/FillerRowElement.js.map +1 -0
  119. package/dist/components/table/FillerRowElement.mjs +12 -0
  120. package/dist/components/table/FillerRowElement.mjs.map +1 -0
  121. package/dist/components/table/Filter.d.mts +5 -0
  122. package/dist/components/table/Filter.d.ts +5 -0
  123. package/dist/components/table/Filter.js +41 -0
  124. package/dist/components/table/Filter.js.map +1 -0
  125. package/dist/components/table/Filter.mjs +17 -0
  126. package/dist/components/table/Filter.mjs.map +1 -0
  127. package/dist/components/table/Table.d.mts +41 -0
  128. package/dist/components/table/Table.d.ts +41 -0
  129. package/dist/components/table/Table.js +1549 -0
  130. package/dist/components/table/Table.js.map +1 -0
  131. package/dist/components/table/Table.mjs +1520 -0
  132. package/dist/components/table/Table.mjs.map +1 -0
  133. package/dist/components/table/TableCell.d.mts +9 -0
  134. package/dist/components/table/TableCell.d.ts +9 -0
  135. package/dist/components/table/TableCell.js +37 -0
  136. package/dist/components/table/TableCell.js.map +1 -0
  137. package/dist/components/table/TableCell.mjs +13 -0
  138. package/dist/components/table/TableCell.mjs.map +1 -0
  139. package/dist/components/table/TableFilterButton.d.mts +11 -0
  140. package/dist/components/table/TableFilterButton.d.ts +11 -0
  141. package/dist/components/table/TableFilterButton.js +888 -0
  142. package/dist/components/table/TableFilterButton.js.map +1 -0
  143. package/dist/components/table/TableFilterButton.mjs +852 -0
  144. package/dist/components/table/TableFilterButton.mjs.map +1 -0
  145. package/dist/components/table/TableSortButton.d.mts +15 -0
  146. package/dist/components/table/TableSortButton.d.ts +15 -0
  147. package/dist/components/table/TableSortButton.js +136 -0
  148. package/dist/components/table/TableSortButton.js.map +1 -0
  149. package/dist/components/table/TableSortButton.mjs +102 -0
  150. package/dist/components/table/TableSortButton.mjs.map +1 -0
  151. package/dist/components/user-action/Button.d.mts +20 -5
  152. package/dist/components/user-action/Button.d.ts +20 -5
  153. package/dist/components/user-action/Button.js +12 -3
  154. package/dist/components/user-action/Button.js.map +1 -1
  155. package/dist/components/user-action/Button.mjs +11 -3
  156. package/dist/components/user-action/Button.mjs.map +1 -1
  157. package/dist/components/user-action/Checkbox.js +5 -4
  158. package/dist/components/user-action/Checkbox.js.map +1 -1
  159. package/dist/components/user-action/Checkbox.mjs +5 -4
  160. package/dist/components/user-action/Checkbox.mjs.map +1 -1
  161. package/dist/components/user-action/DateAndTimePicker.js +41 -9
  162. package/dist/components/user-action/DateAndTimePicker.js.map +1 -1
  163. package/dist/components/user-action/DateAndTimePicker.mjs +41 -9
  164. package/dist/components/user-action/DateAndTimePicker.mjs.map +1 -1
  165. package/dist/components/user-action/Input.d.mts +27 -7
  166. package/dist/components/user-action/Input.d.ts +27 -7
  167. package/dist/components/user-action/Input.js +173 -64
  168. package/dist/components/user-action/Input.js.map +1 -1
  169. package/dist/components/user-action/Input.mjs +172 -63
  170. package/dist/components/user-action/Input.mjs.map +1 -1
  171. package/dist/components/user-action/MultiSelect.js +195 -75
  172. package/dist/components/user-action/MultiSelect.js.map +1 -1
  173. package/dist/components/user-action/MultiSelect.mjs +187 -67
  174. package/dist/components/user-action/MultiSelect.mjs.map +1 -1
  175. package/dist/components/user-action/ScrollPicker.js +26 -5
  176. package/dist/components/user-action/ScrollPicker.js.map +1 -1
  177. package/dist/components/user-action/ScrollPicker.mjs +26 -5
  178. package/dist/components/user-action/ScrollPicker.mjs.map +1 -1
  179. package/dist/components/user-action/Select.js +195 -75
  180. package/dist/components/user-action/Select.js.map +1 -1
  181. package/dist/components/user-action/Select.mjs +187 -67
  182. package/dist/components/user-action/Select.mjs.map +1 -1
  183. package/dist/components/user-action/Textarea.d.mts +3 -1
  184. package/dist/components/user-action/Textarea.d.ts +3 -1
  185. package/dist/components/user-action/Textarea.js +31 -33
  186. package/dist/components/user-action/Textarea.js.map +1 -1
  187. package/dist/components/user-action/Textarea.mjs +31 -33
  188. package/dist/components/user-action/Textarea.mjs.map +1 -1
  189. package/dist/components/user-action/ToggleableInput.d.mts +3 -1
  190. package/dist/components/user-action/ToggleableInput.d.ts +3 -1
  191. package/dist/components/user-action/ToggleableInput.js +31 -33
  192. package/dist/components/user-action/ToggleableInput.js.map +1 -1
  193. package/dist/components/user-action/ToggleableInput.mjs +31 -33
  194. package/dist/components/user-action/ToggleableInput.mjs.map +1 -1
  195. package/dist/css/globals.css +431 -186
  196. package/dist/css/uncompiled/globals.css +36 -493
  197. package/dist/css/uncompiled/textstyles.css +69 -0
  198. package/dist/css/uncompiled/theme/colors-basic.css +72 -0
  199. package/dist/css/uncompiled/theme/colors-component.css +143 -0
  200. package/dist/css/uncompiled/theme/colors-semantic.css +99 -0
  201. package/dist/css/uncompiled/theme/index.css +5 -0
  202. package/dist/css/uncompiled/theme/theme.css +0 -0
  203. package/dist/css/uncompiled/theme/variants.css +3 -0
  204. package/dist/css/uncompiled/utitlity/animation.css +111 -0
  205. package/dist/css/uncompiled/utitlity/borderradius.css +23 -0
  206. package/dist/css/uncompiled/utitlity/general.css +11 -0
  207. package/dist/css/uncompiled/utitlity/index.css +4 -0
  208. package/dist/css/uncompiled/utitlity/shadow.css +29 -0
  209. package/dist/hooks/useDelay.d.mts +11 -0
  210. package/dist/hooks/useDelay.d.ts +11 -0
  211. package/dist/hooks/useDelay.js +64 -0
  212. package/dist/hooks/useDelay.js.map +1 -0
  213. package/dist/hooks/useDelay.mjs +40 -0
  214. package/dist/hooks/useDelay.mjs.map +1 -0
  215. package/dist/hooks/useFocusManagement.d.mts +9 -0
  216. package/dist/hooks/useFocusManagement.d.ts +9 -0
  217. package/dist/hooks/useFocusManagement.js +84 -0
  218. package/dist/hooks/useFocusManagement.js.map +1 -0
  219. package/dist/hooks/useFocusManagement.mjs +60 -0
  220. package/dist/hooks/useFocusManagement.mjs.map +1 -0
  221. package/dist/hooks/useFocusOnceVisible.d.mts +5 -0
  222. package/dist/hooks/useFocusOnceVisible.d.ts +5 -0
  223. package/dist/hooks/useFocusOnceVisible.js +60 -0
  224. package/dist/hooks/useFocusOnceVisible.js.map +1 -0
  225. package/dist/hooks/useFocusOnceVisible.mjs +26 -0
  226. package/dist/hooks/useFocusOnceVisible.mjs.map +1 -0
  227. package/dist/hooks/useRerender.d.mts +5 -0
  228. package/dist/hooks/useRerender.d.ts +5 -0
  229. package/dist/hooks/useRerender.js +33 -0
  230. package/dist/hooks/useRerender.js.map +1 -0
  231. package/dist/hooks/useRerender.mjs +9 -0
  232. package/dist/hooks/useRerender.mjs.map +1 -0
  233. package/dist/hooks/useResizeCallbackWrapper.d.mts +11 -0
  234. package/dist/hooks/useResizeCallbackWrapper.d.ts +11 -0
  235. package/dist/hooks/useResizeCallbackWrapper.js +38 -0
  236. package/dist/hooks/useResizeCallbackWrapper.js.map +1 -0
  237. package/dist/hooks/useResizeCallbackWrapper.mjs +14 -0
  238. package/dist/hooks/useResizeCallbackWrapper.mjs.map +1 -0
  239. package/dist/index.d.mts +16 -5
  240. package/dist/index.d.ts +16 -5
  241. package/dist/index.js +1428 -860
  242. package/dist/index.js.map +1 -1
  243. package/dist/index.mjs +1370 -799
  244. package/dist/index.mjs.map +1 -1
  245. package/dist/localization/defaults/form.d.mts +1 -0
  246. package/dist/localization/defaults/form.d.ts +1 -0
  247. package/dist/localization/defaults/form.js +2 -0
  248. package/dist/localization/defaults/form.js.map +1 -1
  249. package/dist/localization/defaults/form.mjs +2 -0
  250. package/dist/localization/defaults/form.mjs.map +1 -1
  251. package/dist/util/array.d.mts +11 -5
  252. package/dist/util/array.d.ts +11 -5
  253. package/dist/util/array.js +25 -4
  254. package/dist/util/array.js.map +1 -1
  255. package/dist/util/array.mjs +25 -4
  256. package/dist/util/array.mjs.map +1 -1
  257. package/dist/util/date.js.map +1 -1
  258. package/dist/util/date.mjs.map +1 -1
  259. package/dist/util/resolveSetState.d.mts +5 -0
  260. package/dist/util/resolveSetState.d.ts +5 -0
  261. package/dist/util/resolveSetState.js +32 -0
  262. package/dist/util/resolveSetState.js.map +1 -0
  263. package/dist/util/resolveSetState.mjs +8 -0
  264. package/dist/util/resolveSetState.mjs.map +1 -0
  265. package/package.json +4 -2
  266. package/dist/components/layout-and-navigation/Table.d.mts +0 -99
  267. package/dist/components/layout-and-navigation/Table.d.ts +0 -99
  268. package/dist/components/layout-and-navigation/Table.js +0 -688
  269. package/dist/components/layout-and-navigation/Table.js.map +0 -1
  270. package/dist/components/layout-and-navigation/Table.mjs +0 -645
  271. package/dist/components/layout-and-navigation/Table.mjs.map +0 -1
  272. package/dist/hooks/useSaveDelay.d.mts +0 -6
  273. package/dist/hooks/useSaveDelay.d.ts +0 -6
  274. package/dist/hooks/useSaveDelay.js +0 -67
  275. package/dist/hooks/useSaveDelay.js.map +0 -1
  276. package/dist/hooks/useSaveDelay.mjs +0 -43
  277. package/dist/hooks/useSaveDelay.mjs.map +0 -1
@@ -0,0 +1,1549 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/table/Table.tsx
30
+ var Table_exports = {};
31
+ __export(Table_exports, {
32
+ Table: () => Table,
33
+ TableUncontrolled: () => TableUncontrolled,
34
+ TableWithSelection: () => TableWithSelection
35
+ });
36
+ module.exports = __toCommonJS(Table_exports);
37
+ var import_react14 = require("react");
38
+
39
+ // src/components/layout-and-navigation/Pagination.tsx
40
+ var import_lucide_react = require("lucide-react");
41
+ var import_clsx4 = __toESM(require("clsx"));
42
+
43
+ // src/localization/LanguageProvider.tsx
44
+ var import_react2 = require("react");
45
+
46
+ // src/hooks/useLocalStorage.ts
47
+ var import_react = require("react");
48
+
49
+ // src/localization/util.ts
50
+ var languages = ["en", "de"];
51
+ var languagesLocalNames = {
52
+ en: "English",
53
+ de: "Deutsch"
54
+ };
55
+ var DEFAULT_LANGUAGE = "en";
56
+ var LanguageUtil = {
57
+ languages,
58
+ DEFAULT_LANGUAGE,
59
+ languagesLocalNames
60
+ };
61
+
62
+ // src/localization/LanguageProvider.tsx
63
+ var import_jsx_runtime = require("react/jsx-runtime");
64
+ var LanguageContext = (0, import_react2.createContext)({
65
+ language: LanguageUtil.DEFAULT_LANGUAGE,
66
+ setLanguage: (v) => v
67
+ });
68
+ var useLanguage = () => (0, import_react2.useContext)(LanguageContext);
69
+
70
+ // src/localization/useTranslation.ts
71
+ var TranslationPluralCount = {
72
+ zero: 0,
73
+ one: 1,
74
+ two: 2,
75
+ few: 3,
76
+ many: 11,
77
+ other: -1
78
+ };
79
+ var useTranslation = (translations, overwriteTranslation = {}) => {
80
+ const { language: languageProp, translation: overwrite } = overwriteTranslation;
81
+ const { language: inferredLanguage } = useLanguage();
82
+ const usedLanguage = languageProp ?? inferredLanguage;
83
+ const usedTranslations = [...translations];
84
+ if (overwrite) {
85
+ usedTranslations.push(overwrite);
86
+ }
87
+ return (key, options) => {
88
+ const { count, replacements } = { ...{ count: 0, replacements: {} }, ...options };
89
+ try {
90
+ for (let i = translations.length - 1; i >= 0; i--) {
91
+ const translation = translations[i];
92
+ const localizedTranslation = translation[usedLanguage];
93
+ if (!localizedTranslation) {
94
+ continue;
95
+ }
96
+ const value = localizedTranslation[key];
97
+ if (!value) {
98
+ continue;
99
+ }
100
+ let forProcessing;
101
+ if (typeof value !== "string") {
102
+ if (count === TranslationPluralCount.zero && value?.zero) {
103
+ forProcessing = value.zero;
104
+ } else if (count === TranslationPluralCount.one && value?.one) {
105
+ forProcessing = value.one;
106
+ } else if (count === TranslationPluralCount.two && value?.two) {
107
+ forProcessing = value.two;
108
+ } else if (TranslationPluralCount.few <= count && count < TranslationPluralCount.many && value?.few) {
109
+ forProcessing = value.few;
110
+ } else if (count > TranslationPluralCount.many && value?.many) {
111
+ forProcessing = value.many;
112
+ } else {
113
+ forProcessing = value.other;
114
+ }
115
+ } else {
116
+ forProcessing = value;
117
+ }
118
+ forProcessing = forProcessing.replace(/\{\{(\w+)}}/g, (_, placeholder) => {
119
+ return replacements[placeholder] ?? `{{key:${placeholder}}}`;
120
+ });
121
+ return forProcessing;
122
+ }
123
+ } catch (e) {
124
+ console.error(e);
125
+ }
126
+ return `{{${usedLanguage}:${key}}}`;
127
+ };
128
+ };
129
+
130
+ // src/localization/defaults/form.ts
131
+ var formTranslation = {
132
+ en: {
133
+ all: "All",
134
+ apply: "Apply",
135
+ back: "Back",
136
+ cancel: "Cancel",
137
+ change: "Change",
138
+ clear: "Clear",
139
+ close: "Close",
140
+ confirm: "Confirm",
141
+ decline: "Decline",
142
+ delete: "Delete",
143
+ discard: "Discard",
144
+ discardChanges: "Discard Changes",
145
+ done: "Done",
146
+ edit: "Edit",
147
+ enterText: "Enter text here",
148
+ error: "Error",
149
+ exit: "Exit",
150
+ fieldRequiredError: "This field is required.",
151
+ invalidEmailError: "Please enter a valid email address.",
152
+ less: "Less",
153
+ loading: "Loading",
154
+ maxLengthError: "Maximum length exceeded.",
155
+ minLengthError: "Minimum length not met.",
156
+ more: "More",
157
+ next: "Next",
158
+ no: "No",
159
+ none: "None",
160
+ of: "of",
161
+ optional: "Optional",
162
+ pleaseWait: "Please wait...",
163
+ previous: "Previous",
164
+ remove: "Remove",
165
+ required: "Required",
166
+ reset: "Reset",
167
+ save: "Save",
168
+ search: "Search",
169
+ select: "Select",
170
+ selectOption: "Select an option",
171
+ show: "Show",
172
+ showMore: "Show more",
173
+ showLess: "Show less",
174
+ submit: "Submit",
175
+ success: "Success",
176
+ update: "Update",
177
+ unsavedChanges: "Unsaved Changes",
178
+ unsavedChangesSaveQuestion: "Do you want to save your changes?",
179
+ yes: "Yes"
180
+ },
181
+ de: {
182
+ all: "Alle",
183
+ apply: "Anwenden",
184
+ back: "Zur\xFCck",
185
+ cancel: "Abbrechen",
186
+ change: "\xC4ndern",
187
+ clear: "L\xF6schen",
188
+ close: "Schlie\xDFen",
189
+ confirm: "Best\xE4tigen",
190
+ decline: "Ablehnen",
191
+ delete: "L\xF6schen",
192
+ discard: "Verwerfen",
193
+ discardChanges: "\xC4nderungen Verwerfen",
194
+ done: "Fertig",
195
+ edit: "Bearbeiten",
196
+ enterText: "Text hier eingeben",
197
+ error: "Fehler",
198
+ exit: "Beenden",
199
+ fieldRequiredError: "Dieses Feld ist erforderlich.",
200
+ invalidEmailError: "Bitte geben Sie eine g\xFCltige E-Mail-Adresse ein.",
201
+ less: "Weniger",
202
+ loading: "L\xE4dt",
203
+ maxLengthError: "Maximale L\xE4nge \xFCberschritten.",
204
+ minLengthError: "Mindestl\xE4nge nicht erreicht.",
205
+ more: "Mehr",
206
+ next: "Weiter",
207
+ no: "Nein",
208
+ none: "Nichts",
209
+ of: "von",
210
+ optional: "Optional",
211
+ pleaseWait: "Bitte warten...",
212
+ previous: "Vorherige",
213
+ remove: "Entfernen",
214
+ required: "Erforderlich",
215
+ reset: "Zur\xFCcksetzen",
216
+ save: "Speichern",
217
+ search: "Suche",
218
+ select: "Select",
219
+ selectOption: "Option ausw\xE4hlen",
220
+ show: "Anzeigen",
221
+ showMore: "Mehr anzeigen",
222
+ showLess: "Weniger anzeigen",
223
+ submit: "Abschicken",
224
+ success: "Erfolg",
225
+ update: "Update",
226
+ unsavedChanges: "Ungespeicherte \xC4nderungen",
227
+ unsavedChangesSaveQuestion: "M\xF6chtest du die \xC4nderungen speichern?",
228
+ yes: "Ja"
229
+ }
230
+ };
231
+
232
+ // src/components/user-action/Input.tsx
233
+ var import_react6 = require("react");
234
+ var import_clsx2 = __toESM(require("clsx"));
235
+
236
+ // src/hooks/useDelay.ts
237
+ var import_react3 = require("react");
238
+ var defaultOptions = {
239
+ delay: 3e3,
240
+ disabled: false
241
+ };
242
+ function useDelay(options) {
243
+ const [timer, setTimer] = (0, import_react3.useState)(void 0);
244
+ const { delay, disabled } = {
245
+ ...defaultOptions,
246
+ ...options
247
+ };
248
+ const restartTimer = (onDelayFinish) => {
249
+ if (disabled) {
250
+ return;
251
+ }
252
+ clearTimeout(timer);
253
+ setTimer(setTimeout(() => {
254
+ onDelayFinish();
255
+ }, delay));
256
+ };
257
+ const clearTimer = () => {
258
+ clearTimeout(timer);
259
+ };
260
+ (0, import_react3.useEffect)(() => {
261
+ return () => {
262
+ clearTimeout(timer);
263
+ };
264
+ }, [timer]);
265
+ (0, import_react3.useEffect)(() => {
266
+ if (disabled) {
267
+ clearTimeout(timer);
268
+ }
269
+ }, [disabled, timer]);
270
+ return { restartTimer, clearTimer };
271
+ }
272
+
273
+ // src/util/noop.ts
274
+ var noop = () => void 0;
275
+
276
+ // src/components/user-action/Label.tsx
277
+ var import_clsx = __toESM(require("clsx"));
278
+ var import_jsx_runtime2 = require("react/jsx-runtime");
279
+ var styleMapping = {
280
+ labelSmall: "textstyle-label-sm",
281
+ labelMedium: "textstyle-label-md",
282
+ labelBig: "textstyle-label-lg"
283
+ };
284
+ var Label = ({
285
+ children,
286
+ name,
287
+ labelType = "labelSmall",
288
+ className,
289
+ ...props
290
+ }) => {
291
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("label", { ...props, className: (0, import_clsx.default)(styleMapping[labelType], className), children: children ? children : name });
292
+ };
293
+
294
+ // src/hooks/useFocusManagement.ts
295
+ var import_react4 = require("react");
296
+ function useFocusManagement() {
297
+ const getFocusableElements = (0, import_react4.useCallback)(() => {
298
+ return Array.from(
299
+ document.querySelectorAll(
300
+ 'input, button, select, textarea, a[href], [tabindex]:not([tabindex="-1"])'
301
+ )
302
+ ).filter(
303
+ (el) => el instanceof HTMLElement && !el.hasAttribute("disabled") && !el.hasAttribute("hidden") && el.tabIndex !== -1
304
+ );
305
+ }, []);
306
+ const getNextFocusElement = (0, import_react4.useCallback)(() => {
307
+ const elements = getFocusableElements();
308
+ if (elements.length === 0) {
309
+ return void 0;
310
+ }
311
+ let nextElement = elements[0];
312
+ if (document.activeElement instanceof HTMLElement) {
313
+ const currentIndex = elements.indexOf(document.activeElement);
314
+ nextElement = elements[(currentIndex + 1) % elements.length];
315
+ }
316
+ return nextElement;
317
+ }, [getFocusableElements]);
318
+ const focusNext = (0, import_react4.useCallback)(() => {
319
+ const nextElement = getNextFocusElement();
320
+ nextElement?.focus();
321
+ }, [getNextFocusElement]);
322
+ const getPreviousFocusElement = (0, import_react4.useCallback)(() => {
323
+ const elements = getFocusableElements();
324
+ if (elements.length === 0) {
325
+ return void 0;
326
+ }
327
+ let previousElement = elements[0];
328
+ if (document.activeElement instanceof HTMLElement) {
329
+ const currentIndex = elements.indexOf(document.activeElement);
330
+ if (currentIndex === 0) {
331
+ previousElement = elements[elements.length - 1];
332
+ } else {
333
+ previousElement = elements[currentIndex - 1];
334
+ }
335
+ }
336
+ return previousElement;
337
+ }, [getFocusableElements]);
338
+ const focusPrevious = (0, import_react4.useCallback)(() => {
339
+ const previousElement = getPreviousFocusElement();
340
+ if (previousElement) previousElement.focus();
341
+ }, [getPreviousFocusElement]);
342
+ return {
343
+ getFocusableElements,
344
+ getNextFocusElement,
345
+ getPreviousFocusElement,
346
+ focusNext,
347
+ focusPrevious
348
+ };
349
+ }
350
+
351
+ // src/hooks/useFocusOnceVisible.ts
352
+ var import_react5 = __toESM(require("react"));
353
+ var useFocusOnceVisible = (ref, disable = false) => {
354
+ const [hasUsedFocus, setHasUsedFocus] = import_react5.default.useState(false);
355
+ (0, import_react5.useEffect)(() => {
356
+ if (disable || hasUsedFocus) {
357
+ return;
358
+ }
359
+ const observer = new IntersectionObserver(([entry]) => {
360
+ if (entry.isIntersecting && !hasUsedFocus) {
361
+ ref.current?.focus();
362
+ setHasUsedFocus(hasUsedFocus);
363
+ }
364
+ }, {
365
+ threshold: 0.1
366
+ });
367
+ if (ref.current) {
368
+ observer.observe(ref.current);
369
+ }
370
+ return () => observer.disconnect();
371
+ }, [disable, hasUsedFocus, ref]);
372
+ };
373
+
374
+ // src/components/user-action/Input.tsx
375
+ var import_jsx_runtime3 = require("react/jsx-runtime");
376
+ var getInputClassName = ({ disabled = false, hasError = false }) => {
377
+ return (0, import_clsx2.default)(
378
+ "px-2 py-1.5 rounded-md border-2",
379
+ {
380
+ "bg-surface text-on-surface hover:border-primary focus:border-primary": !disabled && !hasError,
381
+ "bg-on-negative text-negative border-negative-border hover:border-negative-border-hover": !disabled && hasError,
382
+ "bg-disabled-background text-disabled-text border-disabled-border": disabled
383
+ }
384
+ );
385
+ };
386
+ var defaultEditCompleteOptions = {
387
+ onBlur: true,
388
+ afterDelay: true,
389
+ delay: 2500
390
+ };
391
+ var Input = (0, import_react6.forwardRef)(function Input2({
392
+ id,
393
+ type = "text",
394
+ value,
395
+ label,
396
+ onChange = noop,
397
+ onChangeText = noop,
398
+ onEditCompleted,
399
+ className = "",
400
+ allowEnterComplete = true,
401
+ expanded = true,
402
+ autoFocus = false,
403
+ onBlur,
404
+ editCompleteOptions,
405
+ containerClassName,
406
+ disabled,
407
+ ...restProps
408
+ }, forwardedRef) {
409
+ const { onBlur: allowEditCompleteOnBlur, afterDelay, delay } = { ...defaultEditCompleteOptions, ...editCompleteOptions };
410
+ const {
411
+ restartTimer,
412
+ clearTimer
413
+ } = useDelay({ delay, disabled: !afterDelay });
414
+ const innerRef = (0, import_react6.useRef)(null);
415
+ const { focusNext } = useFocusManagement();
416
+ useFocusOnceVisible(innerRef, !autoFocus);
417
+ (0, import_react6.useImperativeHandle)(forwardedRef, () => innerRef.current);
418
+ const handleKeyDown = (e) => {
419
+ if (e.key === "Enter" && !e.shiftKey) {
420
+ e.preventDefault();
421
+ innerRef.current?.blur();
422
+ focusNext();
423
+ }
424
+ };
425
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx2.default)({ "w-full": expanded }, containerClassName), children: [
426
+ label && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Label, { ...label, htmlFor: id, className: (0, import_clsx2.default)("mb-1", label.className) }),
427
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
428
+ "input",
429
+ {
430
+ ...restProps,
431
+ ref: innerRef,
432
+ value,
433
+ id,
434
+ type,
435
+ disabled,
436
+ className: (0, import_clsx2.default)(getInputClassName({ disabled }), className),
437
+ onKeyDown: allowEnterComplete ? handleKeyDown : void 0,
438
+ onBlur: (event) => {
439
+ onBlur?.(event);
440
+ if (onEditCompleted && allowEditCompleteOnBlur) {
441
+ onEditCompleted(event.target.value);
442
+ clearTimer();
443
+ }
444
+ },
445
+ onChange: (e) => {
446
+ const value2 = e.target.value;
447
+ if (onEditCompleted) {
448
+ restartTimer(() => {
449
+ if (innerRef.current) {
450
+ innerRef.current.blur();
451
+ if (!allowEditCompleteOnBlur) {
452
+ onEditCompleted(value2);
453
+ }
454
+ } else {
455
+ onEditCompleted(value2);
456
+ }
457
+ });
458
+ }
459
+ onChange(e);
460
+ onChangeText(value2);
461
+ }
462
+ }
463
+ )
464
+ ] });
465
+ });
466
+ var FormInput = (0, import_react6.forwardRef)(function FormInput2({
467
+ id,
468
+ labelText,
469
+ errorText,
470
+ className,
471
+ labelClassName,
472
+ errorClassName,
473
+ containerClassName,
474
+ required,
475
+ disabled,
476
+ ...restProps
477
+ }, ref) {
478
+ const input = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
479
+ "input",
480
+ {
481
+ ...restProps,
482
+ ref,
483
+ id,
484
+ disabled,
485
+ className: (0, import_clsx2.default)(
486
+ getInputClassName({ disabled, hasError: !!errorText }),
487
+ className
488
+ )
489
+ }
490
+ );
491
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx2.default)("flex flex-col gap-y-1", containerClassName), children: [
492
+ labelText && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { htmlFor: id, className: (0, import_clsx2.default)("textstyle-label-md", labelClassName), children: [
493
+ labelText,
494
+ required && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-primary font-bold", children: "*" })
495
+ ] }),
496
+ input,
497
+ errorText && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("label", { htmlFor: id, className: (0, import_clsx2.default)("text-negative", errorClassName), children: errorText })
498
+ ] });
499
+ });
500
+
501
+ // src/util/math.ts
502
+ var clamp = (value, min = 0, max = 1) => {
503
+ return Math.min(Math.max(value, min), max);
504
+ };
505
+
506
+ // src/components/layout-and-navigation/Pagination.tsx
507
+ var import_react7 = require("react");
508
+
509
+ // src/components/user-action/Button.tsx
510
+ var import_clsx3 = __toESM(require("clsx"));
511
+ var import_jsx_runtime4 = require("react/jsx-runtime");
512
+ var ButtonColorUtil = {
513
+ solid: ["primary", "secondary", "tertiary", "positive", "warning", "negative", "neutral"],
514
+ text: ["primary", "negative", "neutral"],
515
+ outline: ["primary"]
516
+ };
517
+ var IconButtonUtil = {
518
+ icon: [...ButtonColorUtil.solid, "transparent"]
519
+ };
520
+ var paddingMapping = {
521
+ small: "btn-sm",
522
+ medium: "btn-md",
523
+ large: "btn-lg"
524
+ };
525
+ var iconPaddingMapping = {
526
+ tiny: "icon-btn-xs",
527
+ small: "icon-btn-sm",
528
+ medium: "icon-btn-md",
529
+ large: "icon-btn-lg"
530
+ };
531
+ var ButtonUtil = {
532
+ paddingMapping,
533
+ iconPaddingMapping
534
+ };
535
+ var SolidButton = ({
536
+ children,
537
+ disabled = false,
538
+ color = "primary",
539
+ size = "medium",
540
+ startIcon,
541
+ endIcon,
542
+ onClick,
543
+ className,
544
+ ...restProps
545
+ }) => {
546
+ const colorClasses = {
547
+ primary: "bg-button-solid-primary-background text-button-solid-primary-text",
548
+ secondary: "bg-button-solid-secondary-background text-button-solid-secondary-text",
549
+ tertiary: "bg-button-solid-tertiary-background text-button-solid-tertiary-text",
550
+ positive: "bg-button-solid-positive-background text-button-solid-positive-text",
551
+ warning: "bg-button-solid-warning-background text-button-solid-warning-text",
552
+ negative: "bg-button-solid-negative-background text-button-solid-negative-text",
553
+ neutral: "bg-button-solid-neutral-background text-button-solid-neutral-text"
554
+ }[color];
555
+ const iconColorClasses = {
556
+ primary: "text-button-solid-primary-icon",
557
+ secondary: "text-button-solid-secondary-icon",
558
+ tertiary: "text-button-solid-tertiary-icon",
559
+ positive: "text-button-solid-positive-icon",
560
+ warning: "text-button-solid-warning-icon",
561
+ negative: "text-button-solid-negative-icon",
562
+ neutral: "text-button-solid-neutral-icon"
563
+ }[color];
564
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
565
+ "button",
566
+ {
567
+ onClick: disabled ? void 0 : onClick,
568
+ disabled: disabled || onClick === void 0,
569
+ className: (0, import_clsx3.default)(
570
+ {
571
+ "text-disabled-text bg-disabled-background cursor-not-allowed": disabled,
572
+ [(0, import_clsx3.default)(colorClasses, "hover:brightness-90")]: !disabled
573
+ },
574
+ ButtonUtil.paddingMapping[size],
575
+ className
576
+ ),
577
+ ...restProps,
578
+ children: [
579
+ startIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
580
+ "span",
581
+ {
582
+ className: (0, import_clsx3.default)({
583
+ [iconColorClasses]: !disabled,
584
+ [`text-disabled-icon`]: disabled
585
+ }),
586
+ children: startIcon
587
+ }
588
+ ),
589
+ children,
590
+ endIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
591
+ "span",
592
+ {
593
+ className: (0, import_clsx3.default)({
594
+ [iconColorClasses]: !disabled,
595
+ [`text-disabled-icon`]: disabled
596
+ }),
597
+ children: endIcon
598
+ }
599
+ )
600
+ ]
601
+ }
602
+ );
603
+ };
604
+ var IconButton = ({
605
+ children,
606
+ disabled = false,
607
+ color = "primary",
608
+ size = "medium",
609
+ onClick,
610
+ className,
611
+ ...restProps
612
+ }) => {
613
+ const colorClasses = {
614
+ primary: "bg-button-solid-primary-background text-button-solid-primary-text",
615
+ secondary: "bg-button-solid-secondary-background text-button-solid-secondary-text",
616
+ tertiary: "bg-button-solid-tertiary-background text-button-solid-tertiary-text",
617
+ positive: "bg-button-solid-positive-background text-button-solid-positive-text",
618
+ warning: "bg-button-solid-warning-background text-button-solid-warning-text",
619
+ negative: "bg-button-solid-negative-background text-button-solid-negative-text",
620
+ neutral: "bg-button-solid-neutral-background text-button-solid-neutral-text",
621
+ transparent: "bg-transparent"
622
+ }[color];
623
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
624
+ "button",
625
+ {
626
+ onClick: disabled ? void 0 : onClick,
627
+ disabled: disabled || onClick === void 0,
628
+ className: (0, import_clsx3.default)(
629
+ {
630
+ "text-disabled-text bg-disabled-background cursor-not-allowed": disabled && color !== "transparent",
631
+ "text-disabled-text cursor-not-allowed opacity-70": disabled && color === "transparent",
632
+ "hover:bg-button-text-hover-background": !disabled && color === "transparent",
633
+ [(0, import_clsx3.default)(colorClasses, "hover:brightness-90")]: !disabled
634
+ },
635
+ ButtonUtil.iconPaddingMapping[size],
636
+ className
637
+ ),
638
+ ...restProps,
639
+ children
640
+ }
641
+ );
642
+ };
643
+
644
+ // src/components/layout-and-navigation/Pagination.tsx
645
+ var import_jsx_runtime5 = require("react/jsx-runtime");
646
+ var Pagination = ({
647
+ overwriteTranslation,
648
+ pageIndex,
649
+ pageCount,
650
+ onPageChanged,
651
+ className,
652
+ style
653
+ }) => {
654
+ const translation = useTranslation([formTranslation], overwriteTranslation);
655
+ const [value, setValue] = (0, import_react7.useState)((pageIndex + 1).toString());
656
+ const noPages = pageCount === 0;
657
+ const onFirstPage = pageIndex === 0 && !noPages;
658
+ const onLastPage = pageIndex === pageCount - 1;
659
+ (0, import_react7.useEffect)(() => {
660
+ if (noPages) {
661
+ setValue("0");
662
+ } else {
663
+ setValue((pageIndex + 1).toString());
664
+ }
665
+ }, [pageIndex, noPages]);
666
+ const changePage = (page) => {
667
+ onPageChanged(page);
668
+ };
669
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: (0, import_clsx4.default)("row gap-x-1", className), style, children: [
670
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(IconButton, { color: "transparent", onClick: () => changePage(0), disabled: onFirstPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronFirst, {}) }),
671
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(IconButton, { color: "transparent", onClick: () => changePage(pageIndex - 1), disabled: onFirstPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronLeft, {}) }),
672
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "row min-w-56 gap-x-2 items-center justify-center mx-2 text-center", children: [
673
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
674
+ Input,
675
+ {
676
+ value,
677
+ containerClassName: "flex flex-1 h-10",
678
+ className: (0, import_clsx4.default)(
679
+ "w-full text-center font-bold input-indicator-hidden"
680
+ ),
681
+ type: "number",
682
+ min: 1,
683
+ max: pageCount,
684
+ disabled: noPages,
685
+ onChangeText: (value2) => {
686
+ if (value2) {
687
+ setValue(clamp(Number(value2), 1, pageCount).toString());
688
+ } else {
689
+ setValue(value2);
690
+ }
691
+ },
692
+ onEditCompleted: (value2) => {
693
+ changePage(clamp(Number(value2) - 1, 0, pageCount - 1));
694
+ },
695
+ editCompleteOptions: { delay: 800 }
696
+ }
697
+ ),
698
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "select-none w-10", children: translation("of") }),
699
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
700
+ "span",
701
+ {
702
+ className: "row flex-1 items-center justify-center select-none h-10 bg-surface text-on-surface rounded-md font-bold",
703
+ children: pageCount
704
+ }
705
+ )
706
+ ] }),
707
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(IconButton, { color: "transparent", onClick: () => changePage(pageIndex + 1), disabled: onLastPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronRight, {}) }),
708
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(IconButton, { color: "transparent", onClick: () => changePage(pageCount - 1), disabled: onLastPage || noPages, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronLast, {}) })
709
+ ] });
710
+ };
711
+
712
+ // src/components/table/Table.tsx
713
+ var import_clsx10 = __toESM(require("clsx"));
714
+ var import_react_table = require("@tanstack/react-table");
715
+
716
+ // src/util/array.ts
717
+ var defaultRangeOptions = {
718
+ allowEmptyRange: false,
719
+ stepSize: 1,
720
+ exclusiveStart: false,
721
+ exclusiveEnd: true
722
+ };
723
+ var range = (endOrRange, options) => {
724
+ const { allowEmptyRange, stepSize, exclusiveStart, exclusiveEnd } = { ...defaultRangeOptions, ...options };
725
+ let start = 0;
726
+ let end;
727
+ if (typeof endOrRange === "number") {
728
+ end = endOrRange;
729
+ } else {
730
+ start = endOrRange[0];
731
+ end = endOrRange[1];
732
+ }
733
+ if (!exclusiveEnd) {
734
+ end -= 1;
735
+ }
736
+ if (exclusiveStart) {
737
+ start += 1;
738
+ }
739
+ if (end - 1 < start) {
740
+ if (!allowEmptyRange) {
741
+ console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set options.allowEmptyRange to true`);
742
+ }
743
+ return [];
744
+ }
745
+ return Array.from({ length: end - start }, (_, index) => index * stepSize + start);
746
+ };
747
+
748
+ // src/components/table/Table.tsx
749
+ var import_react_custom_scrollbars_2 = require("react-custom-scrollbars-2");
750
+
751
+ // src/components/user-action/Checkbox.tsx
752
+ var import_react8 = require("react");
753
+ var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"));
754
+ var import_lucide_react2 = require("lucide-react");
755
+ var import_clsx5 = __toESM(require("clsx"));
756
+ var import_jsx_runtime6 = require("react/jsx-runtime");
757
+ var checkboxSizeMapping = {
758
+ small: "size-4",
759
+ medium: "size-6",
760
+ large: "size-8"
761
+ };
762
+ var checkboxIconSizeMapping = {
763
+ small: "size-3",
764
+ medium: "size-5",
765
+ large: "size-7"
766
+ };
767
+ var Checkbox = ({
768
+ id,
769
+ label,
770
+ checked,
771
+ disabled,
772
+ onChange,
773
+ onChangeTristate,
774
+ size = "medium",
775
+ className = "",
776
+ containerClassName
777
+ }) => {
778
+ const usedSizeClass = checkboxSizeMapping[size];
779
+ const innerIconSize = checkboxIconSizeMapping[size];
780
+ const propagateChange = (checked2) => {
781
+ if (onChangeTristate) {
782
+ onChangeTristate(checked2);
783
+ }
784
+ if (onChange) {
785
+ onChange(checked2 === "indeterminate" ? false : checked2);
786
+ }
787
+ };
788
+ const changeValue = () => {
789
+ const newValue = checked === "indeterminate" ? false : !checked;
790
+ propagateChange(newValue);
791
+ };
792
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: (0, import_clsx5.default)("row justify-center items-center", containerClassName), children: [
793
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
794
+ CheckboxPrimitive.Root,
795
+ {
796
+ onCheckedChange: propagateChange,
797
+ checked,
798
+ disabled,
799
+ id,
800
+ className: (0, import_clsx5.default)(usedSizeClass, `items-center border-2 rounded outline-none `, {
801
+ "text-disabled-text border-disabled-outline bg-disabled-background cursor-not-allowed": disabled,
802
+ "focus:border-primary": !disabled,
803
+ "bg-surface": !disabled && !checked,
804
+ "bg-primary/30 border-primary text-primary": !disabled && checked === true || checked === "indeterminate",
805
+ "hover:border-primary focus:hover:border-primary": !disabled && !checked
806
+ }, className),
807
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(CheckboxPrimitive.Indicator, { children: [
808
+ checked === true && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Check, { className: innerIconSize }),
809
+ checked === "indeterminate" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Minus, { className: innerIconSize })
810
+ ] })
811
+ }
812
+ ),
813
+ label && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
814
+ Label,
815
+ {
816
+ ...label,
817
+ className: (0, import_clsx5.default)("cursor-pointer", label.className),
818
+ htmlFor: id,
819
+ onClick: changeValue
820
+ }
821
+ )
822
+ ] });
823
+ };
824
+
825
+ // src/components/table/TableFilterButton.tsx
826
+ var import_lucide_react3 = require("lucide-react");
827
+
828
+ // src/components/user-action/Menu.tsx
829
+ var import_react11 = require("react");
830
+ var import_clsx6 = __toESM(require("clsx"));
831
+
832
+ // src/hooks/useOutsideClick.ts
833
+ var import_react9 = require("react");
834
+ var useOutsideClick = (refs, handler) => {
835
+ (0, import_react9.useEffect)(() => {
836
+ const listener = (event) => {
837
+ if (event.target === null) return;
838
+ if (refs.some((ref) => !ref.current || ref.current.contains(event.target))) {
839
+ return;
840
+ }
841
+ handler();
842
+ };
843
+ document.addEventListener("mousedown", listener);
844
+ document.addEventListener("touchstart", listener);
845
+ return () => {
846
+ document.removeEventListener("mousedown", listener);
847
+ document.removeEventListener("touchstart", listener);
848
+ };
849
+ }, [refs, handler]);
850
+ };
851
+
852
+ // src/hooks/useHoverState.ts
853
+ var import_react10 = require("react");
854
+ var defaultUseHoverStateProps = {
855
+ closingDelay: 200,
856
+ isDisabled: false
857
+ };
858
+ var useHoverState = (props = void 0) => {
859
+ const { closingDelay, isDisabled } = { ...defaultUseHoverStateProps, ...props };
860
+ const [isHovered, setIsHovered] = (0, import_react10.useState)(false);
861
+ const [timer, setTimer] = (0, import_react10.useState)();
862
+ const onMouseEnter = () => {
863
+ if (isDisabled) {
864
+ return;
865
+ }
866
+ clearTimeout(timer);
867
+ setIsHovered(true);
868
+ };
869
+ const onMouseLeave = () => {
870
+ if (isDisabled) {
871
+ return;
872
+ }
873
+ setTimer(setTimeout(() => {
874
+ setIsHovered(false);
875
+ }, closingDelay));
876
+ };
877
+ (0, import_react10.useEffect)(() => {
878
+ if (timer) {
879
+ return () => {
880
+ clearTimeout(timer);
881
+ };
882
+ }
883
+ });
884
+ (0, import_react10.useEffect)(() => {
885
+ if (timer) {
886
+ clearTimeout(timer);
887
+ }
888
+ }, [isDisabled]);
889
+ return {
890
+ isHovered,
891
+ setIsHovered,
892
+ handlers: { onMouseEnter, onMouseLeave }
893
+ };
894
+ };
895
+
896
+ // src/util/PropsWithFunctionChildren.ts
897
+ var resolve = (children, bag) => {
898
+ if (typeof children === "function") {
899
+ return children(bag);
900
+ }
901
+ return children ?? void 0;
902
+ };
903
+ var BagFunctionUtil = {
904
+ resolve
905
+ };
906
+
907
+ // src/components/user-action/Menu.tsx
908
+ var import_jsx_runtime7 = require("react/jsx-runtime");
909
+ var Menu = ({
910
+ trigger,
911
+ children,
912
+ alignment = "tl",
913
+ showOnHover = false,
914
+ menuClassName = ""
915
+ }) => {
916
+ const { isHovered: isOpen, setIsHovered: setIsOpen, handlers } = useHoverState({ isDisabled: !showOnHover });
917
+ const triggerRef = (0, import_react11.useRef)(null);
918
+ const menuRef = (0, import_react11.useRef)(null);
919
+ useOutsideClick([triggerRef, menuRef], () => setIsOpen(false));
920
+ const bag = { isOpen, close: () => setIsOpen(false) };
921
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
922
+ "div",
923
+ {
924
+ className: "relative",
925
+ ...handlers,
926
+ children: [
927
+ trigger(() => setIsOpen(!isOpen), triggerRef),
928
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
929
+ "div",
930
+ {
931
+ ref: menuRef,
932
+ onClick: (e) => e.stopPropagation(),
933
+ className: (0, import_clsx6.default)(
934
+ "absolute top-full mt-1 min-w-40 rounded-lg bg-menu-background text-menu-text shadow-around-lg z-10",
935
+ {
936
+ "top-0": alignment[0] === "t",
937
+ "bottom-0": alignment[0] === "b",
938
+ "left-0": alignment[1] === "l",
939
+ "right-0": alignment[1] === "r",
940
+ "hidden": !isOpen
941
+ },
942
+ menuClassName
943
+ ),
944
+ children: BagFunctionUtil.resolve(children, bag)
945
+ }
946
+ )
947
+ ]
948
+ }
949
+ );
950
+ };
951
+
952
+ // src/components/table/TableFilterButton.tsx
953
+ var import_react12 = require("react");
954
+ var import_jsx_runtime8 = require("react/jsx-runtime");
955
+ var defaultTableFilterTranslation = {
956
+ en: {
957
+ filter: "Filter",
958
+ min: "Min",
959
+ max: "Max",
960
+ startDate: "Start",
961
+ endDate: "End",
962
+ text: "Text..."
963
+ },
964
+ de: {
965
+ filter: "Filter",
966
+ min: "Min",
967
+ max: "Max",
968
+ startDate: "Start",
969
+ endDate: "Ende",
970
+ text: "Text..."
971
+ }
972
+ };
973
+ var TableFilterButton = ({
974
+ filterType,
975
+ column
976
+ }) => {
977
+ const translation = useTranslation([formTranslation, defaultTableFilterTranslation]);
978
+ const columnFilterValue = column.getFilterValue();
979
+ const [filterValue, setFilterValue] = (0, import_react12.useState)(columnFilterValue);
980
+ const hasFilter = !!filterValue;
981
+ (0, import_react12.useEffect)(() => {
982
+ setFilterValue(columnFilterValue);
983
+ }, [columnFilterValue]);
984
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
985
+ Menu,
986
+ {
987
+ trigger: (onClick, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { ref, className: "relative", children: [
988
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IconButton, { color: "neutral", size: "tiny", onClick, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react3.FilterIcon, {}) }),
989
+ hasFilter && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
990
+ "div",
991
+ {
992
+ className: "absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-primary pointer-events-none",
993
+ "aria-hidden": true
994
+ }
995
+ )
996
+ ] }),
997
+ children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "col gap-y-1 p-2 items-start font-normal text-menu-text", children: [
998
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h4", { className: "textstyle-title-sm", children: translation("filter") }),
999
+ filterType === "text" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1000
+ Input,
1001
+ {
1002
+ value: filterValue ?? "",
1003
+ autoFocus: true,
1004
+ placeholder: translation("text"),
1005
+ onChangeText: setFilterValue,
1006
+ className: "h-10"
1007
+ }
1008
+ ),
1009
+ filterType === "range" && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "row gap-x-2 items-center", children: [
1010
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1011
+ Input,
1012
+ {
1013
+ value: filterValue?.[0] ?? "",
1014
+ type: "number",
1015
+ placeholder: translation("min"),
1016
+ onChangeText: (text) => {
1017
+ const num = Number(text);
1018
+ setFilterValue((old) => [num, old?.[1]]);
1019
+ },
1020
+ className: "h-10 input-indicator-hidden w-40"
1021
+ }
1022
+ ),
1023
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "font-bold", children: "-" }),
1024
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1025
+ Input,
1026
+ {
1027
+ value: filterValue?.[1] ?? "",
1028
+ type: "number",
1029
+ placeholder: translation("max"),
1030
+ onChangeText: (text) => {
1031
+ const num = Number(text);
1032
+ setFilterValue((old) => [old?.[0], num]);
1033
+ },
1034
+ className: "h-10 input-indicator-hidden w-40"
1035
+ }
1036
+ )
1037
+ ] }),
1038
+ filterType === "dateRange" && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
1039
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1040
+ Input,
1041
+ {
1042
+ value: filterValue?.[0] ? filterValue?.[0].toISOString().slice(0, 16) : "",
1043
+ type: "datetime-local",
1044
+ placeholder: translation("startDate"),
1045
+ onChangeText: (text) => {
1046
+ const value = new Date(text);
1047
+ setFilterValue((old) => [value, old?.[1]]);
1048
+ },
1049
+ className: "h-10 w-50"
1050
+ }
1051
+ ),
1052
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1053
+ Input,
1054
+ {
1055
+ value: filterValue?.[1] ? filterValue?.[1].toISOString().slice(0, 16) : "",
1056
+ type: "datetime-local",
1057
+ placeholder: translation("endDate"),
1058
+ onChangeText: (text) => {
1059
+ const value = new Date(text);
1060
+ setFilterValue((old) => [old?.[0], value]);
1061
+ },
1062
+ className: "h-10 w-50"
1063
+ }
1064
+ )
1065
+ ] }),
1066
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "row justify-end w-full", children: [
1067
+ hasFilter && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SolidButton, { color: "negative", size: "small", onClick: () => {
1068
+ column.setFilterValue(void 0);
1069
+ close();
1070
+ }, children: translation("remove") }),
1071
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SolidButton, { size: "small", onClick: () => {
1072
+ column.setFilterValue(filterValue);
1073
+ close();
1074
+ }, children: translation("apply") })
1075
+ ] })
1076
+ ] })
1077
+ }
1078
+ );
1079
+ };
1080
+
1081
+ // src/components/table/TableSortButton.tsx
1082
+ var import_lucide_react4 = require("lucide-react");
1083
+ var import_clsx7 = __toESM(require("clsx"));
1084
+ var import_jsx_runtime9 = require("react/jsx-runtime");
1085
+ var TableSortButton = ({
1086
+ sortDirection,
1087
+ invert = false,
1088
+ color = "neutral",
1089
+ className,
1090
+ ...buttonProps
1091
+ }) => {
1092
+ let icon = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react4.ChevronsUpDown, { className: "w-full h-full" });
1093
+ if (sortDirection) {
1094
+ let usedSortDirection = sortDirection;
1095
+ if (invert) {
1096
+ usedSortDirection = usedSortDirection === "desc" ? "asc" : "desc";
1097
+ }
1098
+ icon = usedSortDirection === "asc" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react4.ChevronUp, { className: "w-full h-full" }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react4.ChevronDown, { className: "w-full h-full" });
1099
+ }
1100
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1101
+ IconButton,
1102
+ {
1103
+ size: "tiny",
1104
+ color,
1105
+ className: (0, import_clsx7.default)(className),
1106
+ ...buttonProps,
1107
+ children: icon
1108
+ }
1109
+ );
1110
+ };
1111
+
1112
+ // src/components/table/FillerRowElement.tsx
1113
+ var import_clsx8 = require("clsx");
1114
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1115
+ var FillerRowElement = ({
1116
+ className
1117
+ }) => {
1118
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: (0, import_clsx8.clsx)("flex flex-row items-center w-1/2 h-4 text-disabled-text font-bold", className), children: "-" });
1119
+ };
1120
+
1121
+ // src/components/table/Filter.ts
1122
+ var dateRange = (row, columnId, filterValue) => {
1123
+ const [min, max] = filterValue;
1124
+ const value = row.getValue(columnId);
1125
+ const date = value instanceof Date ? value : new Date(value);
1126
+ if (isNaN(date.getTime())) return false;
1127
+ if (min && date < min) return false;
1128
+ if (max && date > max) return false;
1129
+ return true;
1130
+ };
1131
+ var TableFilters = {
1132
+ dateRange
1133
+ };
1134
+
1135
+ // src/hooks/useResizeCallbackWrapper.ts
1136
+ var import_react13 = require("react");
1137
+ var useResizeCallbackWrapper = (callback) => {
1138
+ (0, import_react13.useEffect)(() => {
1139
+ window.addEventListener("resize", callback);
1140
+ return () => {
1141
+ window.removeEventListener("resize", callback);
1142
+ };
1143
+ }, [callback]);
1144
+ };
1145
+
1146
+ // src/components/table/TableCell.tsx
1147
+ var import_clsx9 = require("clsx");
1148
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1149
+ var TableCell = ({
1150
+ children,
1151
+ className
1152
+ }) => {
1153
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: (0, import_clsx9.clsx)("block max-w-full overflow-ellipsis truncate", className), children });
1154
+ };
1155
+
1156
+ // src/components/table/Table.tsx
1157
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1158
+ var Table = ({
1159
+ data,
1160
+ fillerRow,
1161
+ initialState,
1162
+ onRowClick = noop,
1163
+ className,
1164
+ tableClassName,
1165
+ defaultColumn,
1166
+ state,
1167
+ columns,
1168
+ ...tableOptions
1169
+ }) => {
1170
+ const ref = (0, import_react14.useRef)(null);
1171
+ const tableRef = (0, import_react14.useRef)(null);
1172
+ const [columnSizing, setColumnSizing] = (0, import_react14.useState)(columns.reduce((previousValue, currentValue) => {
1173
+ return {
1174
+ ...previousValue,
1175
+ [currentValue.id]: currentValue.minSize ?? defaultColumn.minSize
1176
+ };
1177
+ }, {}));
1178
+ const [columnSizingInfo, setColumnSizingInfo] = (0, import_react14.useState)();
1179
+ const [pagination, setPagination] = (0, import_react14.useState)({
1180
+ pageSize: 10,
1181
+ pageIndex: 0,
1182
+ ...initialState?.pagination
1183
+ });
1184
+ const [columnFilters, setColumnFilters] = (0, import_react14.useState)(initialState?.columnFilters);
1185
+ const computedColumnMinWidths = (0, import_react14.useMemo)(() => {
1186
+ return columns.reduce((previousValue, column) => {
1187
+ return {
1188
+ ...previousValue,
1189
+ // every column is at least 12px wide
1190
+ [column.id]: column.minSize ?? defaultColumn?.minSize ?? 12
1191
+ };
1192
+ }, {});
1193
+ }, [columns, defaultColumn]);
1194
+ const computedColumnMaxWidths = (0, import_react14.useMemo)(() => {
1195
+ return columns.reduce((previousValue, column) => {
1196
+ return {
1197
+ ...previousValue,
1198
+ [column.id]: column.maxSize ?? defaultColumn?.maxSize
1199
+ };
1200
+ }, {});
1201
+ }, [columns, defaultColumn]);
1202
+ const tableMinWidth = (0, import_react14.useMemo)(() => {
1203
+ return columns.reduce((sum, column) => {
1204
+ return sum + computedColumnMinWidths[column.id];
1205
+ }, 0);
1206
+ }, [columns, computedColumnMinWidths]);
1207
+ const updateColumnSizes = (0, import_react14.useMemo)(() => {
1208
+ return (previous) => {
1209
+ const updateSizing = {
1210
+ ...columnSizing,
1211
+ ...previous
1212
+ };
1213
+ const containerWidth = ref.current.offsetWidth;
1214
+ columns.forEach((column) => {
1215
+ updateSizing[column.id] = clamp(updateSizing[column.id], computedColumnMinWidths[column.id], computedColumnMaxWidths[column.id] ?? containerWidth);
1216
+ });
1217
+ const width = columns.reduce((previousValue, currentValue) => previousValue + updateSizing[currentValue.id], 0);
1218
+ if (width > containerWidth) {
1219
+ if (tableMinWidth >= containerWidth) {
1220
+ return columns.reduce((previousValue, currentValue) => ({
1221
+ ...previousValue,
1222
+ [currentValue.id]: computedColumnMinWidths[currentValue.id]
1223
+ }), {});
1224
+ }
1225
+ let reduceableColumns = columns.map((value) => value.id).filter((id) => updateSizing[id] - computedColumnMinWidths[id] > 0);
1226
+ let spaceToReduce = width - containerWidth;
1227
+ while (spaceToReduce > 0 && reduceableColumns.length > 0) {
1228
+ let maxReduceAmount = reduceableColumns.reduce((previousValue, id) => Math.max(previousValue, updateSizing[id] - computedColumnMinWidths[id]), 0);
1229
+ if (maxReduceAmount * reduceableColumns.length > spaceToReduce) {
1230
+ maxReduceAmount = spaceToReduce / reduceableColumns.length;
1231
+ }
1232
+ reduceableColumns.forEach((id) => {
1233
+ updateSizing[id] -= maxReduceAmount;
1234
+ });
1235
+ spaceToReduce -= maxReduceAmount * reduceableColumns.length;
1236
+ reduceableColumns = reduceableColumns.filter((id) => updateSizing[id] - computedColumnMinWidths[id] > 0);
1237
+ }
1238
+ } else if (width <= containerWidth) {
1239
+ let distributableWidth = containerWidth - width;
1240
+ const violatingColumns = columns.filter((value) => computedColumnMaxWidths[value.id] && updateSizing[value.id] > computedColumnMaxWidths[value.id]);
1241
+ const violationColumnsAmount = violatingColumns.reduce(
1242
+ (previousValue, column) => previousValue + updateSizing[column.id] - computedColumnMaxWidths[column.id],
1243
+ 0
1244
+ );
1245
+ distributableWidth += violationColumnsAmount;
1246
+ let enlargeableColumns = columns.filter((col) => !computedColumnMaxWidths[col.id] || updateSizing[col.id] < computedColumnMaxWidths[col.id]).map((value) => value.id);
1247
+ while (distributableWidth > 0 && enlargeableColumns.length > 0) {
1248
+ let minEnlargeableAmount = enlargeableColumns.reduce((previousValue, id) => Math.min(previousValue, computedColumnMaxWidths[id] ? computedColumnMaxWidths[id] - updateSizing[id] : distributableWidth), distributableWidth);
1249
+ if (minEnlargeableAmount * enlargeableColumns.length > distributableWidth) {
1250
+ minEnlargeableAmount = distributableWidth / enlargeableColumns.length;
1251
+ }
1252
+ enlargeableColumns.forEach((id) => {
1253
+ updateSizing[id] += minEnlargeableAmount;
1254
+ });
1255
+ distributableWidth -= minEnlargeableAmount * enlargeableColumns.length;
1256
+ enlargeableColumns = enlargeableColumns.filter((id) => !computedColumnMaxWidths[id] || updateSizing[id] < computedColumnMaxWidths[id]);
1257
+ }
1258
+ if (distributableWidth > 0) {
1259
+ updateSizing[columns[columns.length - 1].id] += distributableWidth;
1260
+ }
1261
+ }
1262
+ return updateSizing;
1263
+ };
1264
+ }, [columns, computedColumnMaxWidths, computedColumnMinWidths, tableMinWidth]);
1265
+ const table = (0, import_react_table.useReactTable)({
1266
+ data,
1267
+ getCoreRowModel: (0, import_react_table.getCoreRowModel)(),
1268
+ getFilteredRowModel: (0, import_react_table.getFilteredRowModel)(),
1269
+ getSortedRowModel: (0, import_react_table.getSortedRowModel)(),
1270
+ getPaginationRowModel: (0, import_react_table.getPaginationRowModel)(),
1271
+ initialState,
1272
+ defaultColumn: {
1273
+ minSize: 60,
1274
+ maxSize: 700,
1275
+ cell: ({ cell }) => {
1276
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TableCell, { children: cell.getValue() });
1277
+ },
1278
+ ...defaultColumn
1279
+ },
1280
+ columns,
1281
+ state: {
1282
+ columnSizing,
1283
+ columnSizingInfo,
1284
+ pagination,
1285
+ columnFilters,
1286
+ ...state
1287
+ },
1288
+ filterFns: {
1289
+ ...tableOptions?.filterFns,
1290
+ dateRange: TableFilters.dateRange
1291
+ },
1292
+ onColumnSizingInfoChange: (updaterOrValue) => {
1293
+ setColumnSizingInfo(updaterOrValue);
1294
+ if (tableOptions.onColumnSizingInfoChange) {
1295
+ tableOptions?.onColumnSizingInfoChange(updaterOrValue);
1296
+ }
1297
+ },
1298
+ onColumnSizingChange: (updaterOrValue) => {
1299
+ setColumnSizing((previous) => {
1300
+ const newSizing = typeof updaterOrValue === "function" ? updaterOrValue(previous) : updaterOrValue;
1301
+ return updateColumnSizes(newSizing);
1302
+ });
1303
+ if (tableOptions.onColumnSizingChange) {
1304
+ tableOptions.onColumnSizingChange(updaterOrValue);
1305
+ }
1306
+ },
1307
+ onPaginationChange: (updaterOrValue) => {
1308
+ setPagination(updaterOrValue);
1309
+ if (tableOptions.onPaginationChange) {
1310
+ tableOptions.onPaginationChange(updaterOrValue);
1311
+ }
1312
+ },
1313
+ onColumnFiltersChange: (updaterOrValue) => {
1314
+ setColumnFilters(updaterOrValue);
1315
+ table.toggleAllRowsSelected(false);
1316
+ if (tableOptions.onColumnFiltersChange) {
1317
+ tableOptions.onColumnFiltersChange(updaterOrValue);
1318
+ }
1319
+ },
1320
+ autoResetPageIndex: false,
1321
+ columnResizeMode: "onChange",
1322
+ ...tableOptions
1323
+ });
1324
+ const [hasInitializedSizing, setHasInitializedSizing] = (0, import_react14.useState)(false);
1325
+ (0, import_react14.useEffect)(() => {
1326
+ if (!hasInitializedSizing && ref.current) {
1327
+ setHasInitializedSizing(true);
1328
+ table.setColumnSizing(updateColumnSizes(columnSizing));
1329
+ }
1330
+ }, [columnSizing, hasInitializedSizing]);
1331
+ useResizeCallbackWrapper((0, import_react14.useCallback)(() => {
1332
+ table.setColumnSizing(updateColumnSizes);
1333
+ }, [updateColumnSizes]));
1334
+ const pageCount = table.getPageCount();
1335
+ (0, import_react14.useEffect)(() => {
1336
+ const totalPages = pageCount;
1337
+ if (totalPages === 0) {
1338
+ if (pagination.pageIndex !== 0) {
1339
+ table.setPagination((prevState) => ({
1340
+ ...prevState,
1341
+ pageIndex: 0
1342
+ }));
1343
+ }
1344
+ } else if (pagination.pageIndex >= totalPages) {
1345
+ table.setPagination((prev) => ({
1346
+ ...prev,
1347
+ pageIndex: totalPages - 1
1348
+ }));
1349
+ }
1350
+ }, [data, pageCount, pagination.pageSize, pagination.pageIndex]);
1351
+ const columnSizeVars = (0, import_react14.useMemo)(() => {
1352
+ const headers = table.getFlatHeaders();
1353
+ const colSizes = {};
1354
+ for (let i = 0; i < headers.length; i++) {
1355
+ const header = headers[i];
1356
+ colSizes[`--header-${header.id}-size`] = header.getSize();
1357
+ colSizes[`--col-${header.column.id}-size`] = header.column.getSize();
1358
+ }
1359
+ return colSizes;
1360
+ }, [table.getState().columnSizingInfo, table.getState().columnSizing]);
1361
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { ref, className: (0, import_clsx10.default)("col gap-y-4", className), children: [
1362
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_custom_scrollbars_2.Scrollbars, { autoHeight: true, autoHeightMax: tableRef.current?.offsetHeight, autoHide: true, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1363
+ "table",
1364
+ {
1365
+ ref: tableRef,
1366
+ className: (0, import_clsx10.default)(tableClassName),
1367
+ style: {
1368
+ ...columnSizeVars,
1369
+ width: Math.max(table.getTotalSize(), ref.current?.offsetWidth ?? table.getTotalSize())
1370
+ },
1371
+ children: [
1372
+ table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("colgroup", { children: headerGroup.headers.map((header) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1373
+ "col",
1374
+ {
1375
+ style: {
1376
+ width: `calc(var(--header-${header?.id}-size) * 1px)`,
1377
+ minWidth: header.column.columnDef.minSize,
1378
+ maxWidth: header.column.columnDef.maxSize
1379
+ }
1380
+ },
1381
+ header.id
1382
+ )) }, headerGroup.id)),
1383
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("thead", { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("tr", { className: table.options.meta?.headerRowClassName, children: headerGroup.headers.map((header) => {
1384
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1385
+ "th",
1386
+ {
1387
+ colSpan: header.colSpan,
1388
+ className: (0, import_clsx10.default)("relative group", header.column.columnDef.meta?.className),
1389
+ children: [
1390
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "row w-full", children: header.isPlaceholder ? null : /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "row gap-x-1 items-center", children: [
1391
+ header.column.getCanSort() && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1392
+ TableSortButton,
1393
+ {
1394
+ sortDirection: header.column.getIsSorted(),
1395
+ onClick: () => header.column.toggleSorting()
1396
+ }
1397
+ ),
1398
+ header.column.getCanFilter() && header.column.columnDef.meta?.filterType ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1399
+ TableFilterButton,
1400
+ {
1401
+ column: header.column,
1402
+ filterType: header.column.columnDef.meta.filterType
1403
+ }
1404
+ ) : null,
1405
+ (0, import_react_table.flexRender)(
1406
+ header.column.columnDef.header,
1407
+ header.getContext()
1408
+ )
1409
+ ] }) }),
1410
+ header.column.getCanResize() && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1411
+ "div",
1412
+ {
1413
+ onMouseDown: header.getResizeHandler(),
1414
+ onTouchStart: header.getResizeHandler(),
1415
+ onDoubleClick: () => {
1416
+ header.column.resetSize();
1417
+ },
1418
+ className: "table-resize-indicator w-2 rounded bg-primary cursor-col-resize select-none touch-none opacity-0 group-hover:opacity-100 transition-opacity",
1419
+ style: {
1420
+ opacity: !columnSizingInfo?.columnSizingStart ? void 0 : columnSizingInfo?.columnSizingStart?.findIndex(([id, _]) => id === header.column.id) !== -1 ? 1 : columnSizingInfo?.columnSizingStart?.length !== 0 ? 0 : void 0
1421
+ }
1422
+ }
1423
+ )
1424
+ ]
1425
+ },
1426
+ header.id
1427
+ );
1428
+ }) }, headerGroup.id)) }),
1429
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("tbody", { children: [
1430
+ table.getRowModel().rows.map((row) => {
1431
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("tr", { onClick: () => onRowClick(row, table), className: table.options.meta?.bodyRowClassName, children: row.getVisibleCells().map((cell) => {
1432
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("td", { children: (0, import_react_table.flexRender)(
1433
+ cell.column.columnDef.cell,
1434
+ cell.getContext()
1435
+ ) }, cell.id);
1436
+ }) }, row.id);
1437
+ }),
1438
+ range(table.getState().pagination.pageSize - table.getRowModel().rows.length, { allowEmptyRange: true }).map((row, index) => {
1439
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("tr", { children: columns.map((column) => {
1440
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("td", { children: fillerRow ? fillerRow(column.id, table) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(FillerRowElement, {}) }, column.id);
1441
+ }) }, "filler-row-" + index);
1442
+ })
1443
+ ] })
1444
+ ]
1445
+ }
1446
+ ) }),
1447
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "row justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1448
+ Pagination,
1449
+ {
1450
+ pageIndex: table.getState().pagination.pageIndex,
1451
+ pageCount: table.getPageCount(),
1452
+ onPageChanged: (page) => table.setPageIndex(page)
1453
+ }
1454
+ ) })
1455
+ ] });
1456
+ };
1457
+ var TableUncontrolled = ({ data, ...props }) => {
1458
+ const [usedDate, setUsedData] = (0, import_react14.useState)(data);
1459
+ (0, import_react14.useEffect)(() => {
1460
+ setUsedData(data);
1461
+ }, [data]);
1462
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1463
+ Table,
1464
+ {
1465
+ ...props,
1466
+ data: usedDate
1467
+ }
1468
+ );
1469
+ };
1470
+ var TableWithSelection = ({
1471
+ columns,
1472
+ state,
1473
+ fillerRow,
1474
+ rowSelection,
1475
+ selectionRowId = "selection",
1476
+ onRowClick = noop,
1477
+ meta,
1478
+ ...props
1479
+ }) => {
1480
+ const columnsWithSelection = (0, import_react14.useMemo)(() => {
1481
+ return [
1482
+ {
1483
+ id: selectionRowId,
1484
+ header: ({ table }) => {
1485
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1486
+ Checkbox,
1487
+ {
1488
+ checked: table.getIsSomeRowsSelected() ? "indeterminate" : table.getIsAllRowsSelected(),
1489
+ onChangeTristate: (value) => {
1490
+ const newValue = !!value;
1491
+ table.toggleAllRowsSelected(newValue);
1492
+ },
1493
+ containerClassName: "max-w-6"
1494
+ }
1495
+ );
1496
+ },
1497
+ cell: ({ row }) => {
1498
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1499
+ Checkbox,
1500
+ {
1501
+ disabled: !row.getCanSelect(),
1502
+ checked: row.getIsSelected(),
1503
+ onChange: row.getToggleSelectedHandler(),
1504
+ containerClassName: "max-w-6"
1505
+ }
1506
+ );
1507
+ },
1508
+ size: 60,
1509
+ minSize: 60,
1510
+ maxSize: 60,
1511
+ enableResizing: false,
1512
+ enableSorting: false
1513
+ },
1514
+ ...columns
1515
+ ];
1516
+ }, [columns, selectionRowId]);
1517
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1518
+ Table,
1519
+ {
1520
+ columns: columnsWithSelection,
1521
+ fillerRow: (columnId, table) => {
1522
+ if (columnId === selectionRowId) {
1523
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Checkbox, { checked: false, disabled: true, containerClassName: "max-w-6" });
1524
+ }
1525
+ return fillerRow ? fillerRow(columnId, table) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(FillerRowElement, {});
1526
+ },
1527
+ state: {
1528
+ rowSelection,
1529
+ ...state
1530
+ },
1531
+ onRowClick: (row, table) => {
1532
+ row.toggleSelected();
1533
+ onRowClick(row, table);
1534
+ },
1535
+ meta: {
1536
+ bodyRowClassName: "cursor-pointer",
1537
+ ...meta
1538
+ },
1539
+ ...props
1540
+ }
1541
+ );
1542
+ };
1543
+ // Annotate the CommonJS export names for ESM import in node:
1544
+ 0 && (module.exports = {
1545
+ Table,
1546
+ TableUncontrolled,
1547
+ TableWithSelection
1548
+ });
1549
+ //# sourceMappingURL=Table.js.map