@helpwave/hightide 0.0.19 → 0.1.1

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 (665) hide show
  1. package/README.md +21 -2
  2. package/dist/coloring/shading.cjs +562 -0
  3. package/dist/coloring/shading.cjs.map +1 -0
  4. package/dist/coloring/{shading.d.mts → shading.d.cts} +1 -1
  5. package/dist/coloring/shading.js +482 -37
  6. package/dist/coloring/shading.js.map +1 -1
  7. package/dist/coloring/types.cjs +31 -0
  8. package/dist/coloring/{types.mjs.map → types.cjs.map} +1 -1
  9. package/dist/coloring/types.js +2 -27
  10. package/dist/coloring/types.js.map +1 -1
  11. package/dist/components/{HelpwaveBadge.js → branding/HelpwaveBadge.cjs} +65 -33
  12. package/dist/components/branding/HelpwaveBadge.cjs.map +1 -0
  13. package/dist/components/branding/HelpwaveBadge.js +123 -0
  14. package/dist/components/branding/HelpwaveBadge.js.map +1 -0
  15. package/dist/components/date/{DatePicker.mjs → DatePicker.cjs} +158 -94
  16. package/dist/components/date/DatePicker.cjs.map +1 -0
  17. package/dist/components/date/{DatePicker.d.mts → DatePicker.d.cts} +7 -8
  18. package/dist/components/date/DatePicker.d.ts +4 -5
  19. package/dist/components/date/DatePicker.js +121 -129
  20. package/dist/components/date/DatePicker.js.map +1 -1
  21. package/dist/components/date/{DayPicker.mjs → DayPicker.cjs} +77 -24
  22. package/dist/components/date/DayPicker.cjs.map +1 -0
  23. package/dist/components/date/{DayPicker.d.mts → DayPicker.d.cts} +3 -3
  24. package/dist/components/date/DayPicker.d.ts +2 -2
  25. package/dist/components/date/DayPicker.js +38 -61
  26. package/dist/components/date/DayPicker.js.map +1 -1
  27. package/dist/components/{TimeDisplay.js → date/TimeDisplay.cjs} +24 -9
  28. package/dist/components/date/TimeDisplay.cjs.map +1 -0
  29. package/dist/components/{TimeDisplay.d.mts → date/TimeDisplay.d.cts} +2 -3
  30. package/dist/components/{TimeDisplay.d.ts → date/TimeDisplay.d.ts} +2 -3
  31. package/dist/components/{TimeDisplay.mjs → date/TimeDisplay.js} +23 -8
  32. package/dist/components/date/TimeDisplay.js.map +1 -0
  33. package/dist/components/date/{TimePicker.mjs → TimePicker.cjs} +62 -26
  34. package/dist/components/date/TimePicker.cjs.map +1 -0
  35. package/dist/components/date/{TimePicker.d.mts → TimePicker.d.cts} +2 -2
  36. package/dist/components/date/TimePicker.d.ts +2 -2
  37. package/dist/components/date/TimePicker.js +25 -61
  38. package/dist/components/date/TimePicker.js.map +1 -1
  39. package/dist/components/date/{YearMonthPicker.mjs → YearMonthPicker.cjs} +93 -42
  40. package/dist/components/date/YearMonthPicker.cjs.map +1 -0
  41. package/dist/components/date/{YearMonthPicker.d.mts → YearMonthPicker.d.cts} +2 -2
  42. package/dist/components/date/YearMonthPicker.d.ts +2 -2
  43. package/dist/components/date/YearMonthPicker.js +56 -77
  44. package/dist/components/date/YearMonthPicker.js.map +1 -1
  45. package/dist/components/dialogs/ConfirmDialog.cjs +509 -0
  46. package/dist/components/dialogs/ConfirmDialog.cjs.map +1 -0
  47. package/dist/components/dialogs/ConfirmDialog.d.cts +37 -0
  48. package/dist/components/dialogs/ConfirmDialog.d.ts +37 -0
  49. package/dist/components/dialogs/ConfirmDialog.js +472 -0
  50. package/dist/components/dialogs/ConfirmDialog.js.map +1 -0
  51. package/dist/components/{AvatarGroup.js → icons-and-geometry/Avatar.cjs} +23 -19
  52. package/dist/components/icons-and-geometry/Avatar.cjs.map +1 -0
  53. package/dist/components/icons-and-geometry/Avatar.d.cts +30 -0
  54. package/dist/components/icons-and-geometry/Avatar.d.ts +30 -0
  55. package/dist/components/{AvatarGroup.mjs → icons-and-geometry/Avatar.js} +13 -10
  56. package/dist/components/icons-and-geometry/Avatar.js.map +1 -0
  57. package/dist/components/{Circle.js → icons-and-geometry/Circle.cjs} +3 -3
  58. package/dist/components/icons-and-geometry/Circle.cjs.map +1 -0
  59. package/dist/components/{Circle.mjs → icons-and-geometry/Circle.js} +2 -2
  60. package/dist/components/icons-and-geometry/Circle.js.map +1 -0
  61. package/dist/components/{icons/Helpwave.js → icons-and-geometry/Helpwave.cjs} +38 -6
  62. package/dist/components/icons-and-geometry/Helpwave.cjs.map +1 -0
  63. package/dist/components/icons-and-geometry/Helpwave.js +75 -0
  64. package/dist/components/icons-and-geometry/Helpwave.js.map +1 -0
  65. package/dist/components/{Ring.js → icons-and-geometry/Ring.cjs} +6 -6
  66. package/dist/components/icons-and-geometry/Ring.cjs.map +1 -0
  67. package/dist/components/{Ring.mjs → icons-and-geometry/Ring.js} +4 -4
  68. package/dist/components/icons-and-geometry/Ring.js.map +1 -0
  69. package/dist/components/{icons/Tag.js → icons-and-geometry/Tag.cjs} +3 -3
  70. package/dist/components/icons-and-geometry/Tag.cjs.map +1 -0
  71. package/dist/components/{icons/Tag.mjs → icons-and-geometry/Tag.js} +2 -2
  72. package/dist/components/icons-and-geometry/Tag.js.map +1 -0
  73. package/dist/components/{BreadCrumb.js → layout-and-navigation/BreadCrumb.cjs} +12 -5
  74. package/dist/components/layout-and-navigation/BreadCrumb.cjs.map +1 -0
  75. package/dist/components/{BreadCrumb.mjs → layout-and-navigation/BreadCrumb.js} +10 -3
  76. package/dist/components/layout-and-navigation/BreadCrumb.js.map +1 -0
  77. package/dist/components/{layout/Carousel.js → layout-and-navigation/Carousel.cjs} +4 -4
  78. package/dist/components/layout-and-navigation/Carousel.cjs.map +1 -0
  79. package/dist/components/{layout/Carousel.mjs → layout-and-navigation/Carousel.js} +4 -4
  80. package/dist/components/layout-and-navigation/Carousel.js.map +1 -0
  81. package/dist/components/{ChipList.js → layout-and-navigation/Chip.cjs} +6 -6
  82. package/dist/components/layout-and-navigation/Chip.cjs.map +1 -0
  83. package/dist/components/{ChipList.mjs → layout-and-navigation/Chip.js} +2 -2
  84. package/dist/components/layout-and-navigation/Chip.js.map +1 -0
  85. package/dist/components/{layout/DividerInserter.js → layout-and-navigation/DividerInserter.cjs} +3 -3
  86. package/dist/components/layout-and-navigation/DividerInserter.cjs.map +1 -0
  87. package/dist/components/{layout/DividerInserter.mjs → layout-and-navigation/DividerInserter.js} +2 -2
  88. package/dist/components/layout-and-navigation/DividerInserter.js.map +1 -0
  89. package/dist/components/{Expandable.js → layout-and-navigation/Expandable.cjs} +3 -3
  90. package/dist/components/layout-and-navigation/Expandable.cjs.map +1 -0
  91. package/dist/components/{Expandable.mjs → layout-and-navigation/Expandable.js} +2 -2
  92. package/dist/components/layout-and-navigation/Expandable.js.map +1 -0
  93. package/dist/components/{layout/FAQSection.js → layout-and-navigation/FAQSection.cjs} +7 -7
  94. package/dist/components/layout-and-navigation/FAQSection.cjs.map +1 -0
  95. package/dist/components/{layout/FAQSection.d.mts → layout-and-navigation/FAQSection.d.cts} +1 -1
  96. package/dist/components/{layout → layout-and-navigation}/FAQSection.d.ts +1 -1
  97. package/dist/components/{layout/FAQSection.mjs → layout-and-navigation/FAQSection.js} +5 -5
  98. package/dist/components/layout-and-navigation/FAQSection.js.map +1 -0
  99. package/dist/components/{MarkdownInterpreter.js → layout-and-navigation/MarkdownInterpreter.cjs} +2 -2
  100. package/dist/components/layout-and-navigation/MarkdownInterpreter.cjs.map +1 -0
  101. package/dist/components/{MarkdownInterpreter.mjs → layout-and-navigation/MarkdownInterpreter.js} +2 -2
  102. package/dist/components/layout-and-navigation/MarkdownInterpreter.js.map +1 -0
  103. package/dist/components/layout-and-navigation/Overlay.cjs +460 -0
  104. package/dist/components/layout-and-navigation/Overlay.cjs.map +1 -0
  105. package/dist/components/layout-and-navigation/Overlay.d.cts +68 -0
  106. package/dist/components/layout-and-navigation/Overlay.d.ts +68 -0
  107. package/dist/components/layout-and-navigation/Overlay.js +422 -0
  108. package/dist/components/layout-and-navigation/Overlay.js.map +1 -0
  109. package/dist/components/{Pagination.js → layout-and-navigation/Pagination.cjs} +25 -10
  110. package/dist/components/layout-and-navigation/Pagination.cjs.map +1 -0
  111. package/dist/components/{Pagination.d.mts → layout-and-navigation/Pagination.d.cts} +2 -3
  112. package/dist/components/{Pagination.d.ts → layout-and-navigation/Pagination.d.ts} +2 -3
  113. package/dist/components/{Pagination.mjs → layout-and-navigation/Pagination.js} +25 -10
  114. package/dist/components/layout-and-navigation/Pagination.js.map +1 -0
  115. package/dist/components/{SearchableList.js → layout-and-navigation/SearchableList.cjs} +51 -34
  116. package/dist/components/layout-and-navigation/SearchableList.cjs.map +1 -0
  117. package/dist/components/{SearchableList.d.mts → layout-and-navigation/SearchableList.d.cts} +2 -2
  118. package/dist/components/{SearchableList.d.ts → layout-and-navigation/SearchableList.d.ts} +2 -2
  119. package/dist/components/{SearchableList.mjs → layout-and-navigation/SearchableList.js} +52 -40
  120. package/dist/components/layout-and-navigation/SearchableList.js.map +1 -0
  121. package/dist/components/{StepperBar.js → layout-and-navigation/StepperBar.cjs} +42 -16
  122. package/dist/components/layout-and-navigation/StepperBar.cjs.map +1 -0
  123. package/dist/components/{StepperBar.d.mts → layout-and-navigation/StepperBar.d.cts} +2 -3
  124. package/dist/components/{StepperBar.d.ts → layout-and-navigation/StepperBar.d.ts} +2 -3
  125. package/dist/components/{StepperBar.mjs → layout-and-navigation/StepperBar.js} +40 -14
  126. package/dist/components/layout-and-navigation/StepperBar.js.map +1 -0
  127. package/dist/components/{Table.js → layout-and-navigation/Table.cjs} +176 -40
  128. package/dist/components/layout-and-navigation/Table.cjs.map +1 -0
  129. package/dist/components/{Table.d.mts → layout-and-navigation/Table.d.cts} +10 -1
  130. package/dist/components/{Table.d.ts → layout-and-navigation/Table.d.ts} +10 -1
  131. package/dist/components/{Table.mjs → layout-and-navigation/Table.js} +175 -40
  132. package/dist/components/layout-and-navigation/Table.js.map +1 -0
  133. package/dist/components/{TextImage.js → layout-and-navigation/TextImage.cjs} +25 -10
  134. package/dist/components/layout-and-navigation/TextImage.cjs.map +1 -0
  135. package/dist/components/{TextImage.d.mts → layout-and-navigation/TextImage.d.cts} +2 -3
  136. package/dist/components/{TextImage.d.ts → layout-and-navigation/TextImage.d.ts} +2 -3
  137. package/dist/components/{TextImage.mjs → layout-and-navigation/TextImage.js} +23 -8
  138. package/dist/components/layout-and-navigation/TextImage.js.map +1 -0
  139. package/dist/components/{layout/Tile.js → layout-and-navigation/Tile.cjs} +4 -4
  140. package/dist/components/layout-and-navigation/Tile.cjs.map +1 -0
  141. package/dist/components/{layout/Tile.mjs → layout-and-navigation/Tile.js} +2 -2
  142. package/dist/components/layout-and-navigation/Tile.js.map +1 -0
  143. package/dist/components/{VerticalDivider.js → layout-and-navigation/VerticalDivider.cjs} +2 -2
  144. package/dist/components/layout-and-navigation/VerticalDivider.cjs.map +1 -0
  145. package/dist/components/{VerticalDivider.mjs → layout-and-navigation/VerticalDivider.js} +2 -2
  146. package/dist/components/layout-and-navigation/VerticalDivider.js.map +1 -0
  147. package/dist/components/{ErrorComponent.js → loading-states/ErrorComponent.cjs} +25 -10
  148. package/dist/components/loading-states/ErrorComponent.cjs.map +1 -0
  149. package/dist/components/{ErrorComponent.d.mts → loading-states/ErrorComponent.d.cts} +2 -3
  150. package/dist/components/{ErrorComponent.d.ts → loading-states/ErrorComponent.d.ts} +2 -3
  151. package/dist/components/{ErrorComponent.mjs → loading-states/ErrorComponent.js} +24 -9
  152. package/dist/components/loading-states/ErrorComponent.js.map +1 -0
  153. package/dist/components/{LoadingAndErrorComponent.js → loading-states/LoadingAndErrorComponent.cjs} +67 -18
  154. package/dist/components/loading-states/LoadingAndErrorComponent.cjs.map +1 -0
  155. package/dist/components/{LoadingAndErrorComponent.d.mts → loading-states/LoadingAndErrorComponent.d.cts} +6 -6
  156. package/dist/components/{LoadingAndErrorComponent.d.ts → loading-states/LoadingAndErrorComponent.d.ts} +4 -4
  157. package/dist/components/{LoadingAndErrorComponent.mjs → loading-states/LoadingAndErrorComponent.js} +66 -17
  158. package/dist/components/loading-states/LoadingAndErrorComponent.js.map +1 -0
  159. package/dist/components/{LoadingAnimation.js → loading-states/LoadingAnimation.cjs} +64 -15
  160. package/dist/components/loading-states/LoadingAnimation.cjs.map +1 -0
  161. package/dist/components/{LoadingAnimation.d.mts → loading-states/LoadingAnimation.d.cts} +2 -3
  162. package/dist/components/{LoadingAnimation.d.ts → loading-states/LoadingAnimation.d.ts} +2 -3
  163. package/dist/components/{LoadingAnimation.mjs → loading-states/LoadingAnimation.js} +63 -14
  164. package/dist/components/loading-states/LoadingAnimation.js.map +1 -0
  165. package/dist/components/{LoadingButton.js → loading-states/LoadingButton.cjs} +101 -58
  166. package/dist/components/loading-states/LoadingButton.cjs.map +1 -0
  167. package/dist/components/{LoadingButton.d.mts → loading-states/LoadingButton.d.cts} +1 -1
  168. package/dist/components/{LoadingButton.d.ts → loading-states/LoadingButton.d.ts} +1 -1
  169. package/dist/components/{LoadingButton.mjs → loading-states/LoadingButton.js} +100 -57
  170. package/dist/components/loading-states/LoadingButton.js.map +1 -0
  171. package/dist/components/{ProgressIndicator.js → loading-states/ProgressIndicator.cjs} +2 -2
  172. package/dist/components/loading-states/ProgressIndicator.cjs.map +1 -0
  173. package/dist/components/{ProgressIndicator.mjs → loading-states/ProgressIndicator.js} +2 -2
  174. package/dist/components/loading-states/ProgressIndicator.js.map +1 -0
  175. package/dist/components/modals/{ConfirmDialog.js → ConfirmModal.cjs} +214 -117
  176. package/dist/components/modals/ConfirmModal.cjs.map +1 -0
  177. package/dist/components/modals/ConfirmModal.d.cts +36 -0
  178. package/dist/components/modals/ConfirmModal.d.ts +36 -0
  179. package/dist/components/modals/{ConfirmDialog.mjs → ConfirmModal.js} +203 -106
  180. package/dist/components/modals/ConfirmModal.js.map +1 -0
  181. package/dist/components/modals/DiscardChangesModal.cjs +570 -0
  182. package/dist/components/modals/DiscardChangesModal.cjs.map +1 -0
  183. package/dist/components/modals/DiscardChangesModal.d.cts +25 -0
  184. package/dist/components/modals/DiscardChangesModal.d.ts +25 -0
  185. package/dist/components/modals/DiscardChangesModal.js +533 -0
  186. package/dist/components/modals/DiscardChangesModal.js.map +1 -0
  187. package/dist/components/modals/InputModal.cjs +689 -0
  188. package/dist/components/modals/InputModal.cjs.map +1 -0
  189. package/dist/components/modals/{InputModal.d.mts → InputModal.d.cts} +7 -7
  190. package/dist/components/modals/InputModal.d.ts +7 -7
  191. package/dist/components/modals/InputModal.js +273 -221
  192. package/dist/components/modals/InputModal.js.map +1 -1
  193. package/dist/components/modals/LanguageModal.cjs +667 -0
  194. package/dist/components/modals/LanguageModal.cjs.map +1 -0
  195. package/dist/components/modals/LanguageModal.d.cts +20 -0
  196. package/dist/components/modals/LanguageModal.d.ts +7 -8
  197. package/dist/components/modals/LanguageModal.js +308 -206
  198. package/dist/components/modals/LanguageModal.js.map +1 -1
  199. package/dist/components/modals/ThemeModal.cjs +694 -0
  200. package/dist/components/modals/ThemeModal.cjs.map +1 -0
  201. package/dist/components/modals/ThemeModal.d.cts +21 -0
  202. package/dist/components/modals/ThemeModal.d.ts +21 -0
  203. package/dist/components/modals/ThemeModal.js +657 -0
  204. package/dist/components/modals/ThemeModal.js.map +1 -0
  205. package/dist/components/properties/CheckboxProperty.cjs +362 -0
  206. package/dist/components/properties/CheckboxProperty.cjs.map +1 -0
  207. package/dist/components/properties/{CheckboxProperty.d.mts → CheckboxProperty.d.cts} +3 -3
  208. package/dist/components/properties/CheckboxProperty.d.ts +2 -2
  209. package/dist/components/properties/CheckboxProperty.js +94 -93
  210. package/dist/components/properties/CheckboxProperty.js.map +1 -1
  211. package/dist/components/properties/DateProperty.cjs +451 -0
  212. package/dist/components/properties/DateProperty.cjs.map +1 -0
  213. package/dist/components/properties/{DateProperty.d.mts → DateProperty.d.cts} +3 -3
  214. package/dist/components/properties/DateProperty.d.ts +2 -2
  215. package/dist/components/properties/DateProperty.js +110 -116
  216. package/dist/components/properties/DateProperty.js.map +1 -1
  217. package/dist/components/properties/{MultiSelectProperty.mjs → MultiSelectProperty.cjs} +216 -155
  218. package/dist/components/properties/MultiSelectProperty.cjs.map +1 -0
  219. package/dist/components/properties/{MultiSelectProperty.d.mts → MultiSelectProperty.d.cts} +5 -5
  220. package/dist/components/properties/MultiSelectProperty.d.ts +4 -4
  221. package/dist/components/properties/MultiSelectProperty.js +180 -184
  222. package/dist/components/properties/MultiSelectProperty.js.map +1 -1
  223. package/dist/components/properties/NumberProperty.cjs +459 -0
  224. package/dist/components/properties/NumberProperty.cjs.map +1 -0
  225. package/dist/components/properties/{NumberProperty.d.mts → NumberProperty.d.cts} +3 -3
  226. package/dist/components/properties/NumberProperty.d.ts +2 -2
  227. package/dist/components/properties/NumberProperty.js +109 -116
  228. package/dist/components/properties/NumberProperty.js.map +1 -1
  229. package/dist/components/properties/PropertyBase.cjs +223 -0
  230. package/dist/components/properties/PropertyBase.cjs.map +1 -0
  231. package/dist/components/properties/{PropertyBase.d.mts → PropertyBase.d.cts} +2 -2
  232. package/dist/components/properties/PropertyBase.d.ts +2 -2
  233. package/dist/components/properties/PropertyBase.js +60 -69
  234. package/dist/components/properties/PropertyBase.js.map +1 -1
  235. package/dist/components/properties/{SelectProperty.mjs → SelectProperty.cjs} +251 -199
  236. package/dist/components/properties/SelectProperty.cjs.map +1 -0
  237. package/dist/components/properties/{SelectProperty.d.mts → SelectProperty.d.cts} +5 -6
  238. package/dist/components/properties/SelectProperty.d.ts +4 -5
  239. package/dist/components/properties/SelectProperty.js +215 -228
  240. package/dist/components/properties/SelectProperty.js.map +1 -1
  241. package/dist/components/properties/TextProperty.cjs +428 -0
  242. package/dist/components/properties/TextProperty.cjs.map +1 -0
  243. package/dist/components/properties/{TextProperty.d.mts → TextProperty.d.cts} +3 -3
  244. package/dist/components/properties/TextProperty.d.ts +2 -2
  245. package/dist/components/properties/TextProperty.js +134 -121
  246. package/dist/components/properties/TextProperty.js.map +1 -1
  247. package/dist/components/{Button.js → user-action/Button.cjs} +70 -12
  248. package/dist/components/user-action/Button.cjs.map +1 -0
  249. package/dist/components/{Button.d.mts → user-action/Button.d.cts} +32 -5
  250. package/dist/components/{Button.d.ts → user-action/Button.d.ts} +32 -5
  251. package/dist/components/{Button.mjs → user-action/Button.js} +66 -10
  252. package/dist/components/user-action/Button.js.map +1 -0
  253. package/dist/components/{user-input/Checkbox.js → user-action/Checkbox.cjs} +26 -16
  254. package/dist/components/user-action/Checkbox.cjs.map +1 -0
  255. package/dist/components/{user-input/Checkbox.d.mts → user-action/Checkbox.d.cts} +5 -5
  256. package/dist/components/{user-input → user-action}/Checkbox.d.ts +4 -4
  257. package/dist/components/{user-input/Checkbox.mjs → user-action/Checkbox.js} +24 -14
  258. package/dist/components/user-action/Checkbox.js.map +1 -0
  259. package/dist/components/{user-input/DateAndTimePicker.js → user-action/DateAndTimePicker.cjs} +51 -23
  260. package/dist/components/user-action/DateAndTimePicker.cjs.map +1 -0
  261. package/dist/components/{user-input/DateAndTimePicker.d.mts → user-action/DateAndTimePicker.d.cts} +7 -8
  262. package/dist/components/{user-input → user-action}/DateAndTimePicker.d.ts +2 -3
  263. package/dist/components/{user-input/DateAndTimePicker.mjs → user-action/DateAndTimePicker.js} +44 -16
  264. package/dist/components/user-action/DateAndTimePicker.js.map +1 -0
  265. package/dist/components/{user-input/Input.js → user-action/Input.cjs} +35 -34
  266. package/dist/components/user-action/Input.cjs.map +1 -0
  267. package/dist/components/{user-input/Input.d.mts → user-action/Input.d.cts} +9 -16
  268. package/dist/components/{user-input → user-action}/Input.d.ts +8 -15
  269. package/dist/components/{user-input/Input.mjs → user-action/Input.js} +35 -39
  270. package/dist/components/user-action/Input.js.map +1 -0
  271. package/dist/components/{user-input/Label.js → user-action/Label.cjs} +15 -3
  272. package/dist/components/user-action/Label.cjs.map +1 -0
  273. package/dist/components/{user-input/Label.d.mts → user-action/Label.d.cts} +1 -1
  274. package/dist/components/{user-input → user-action}/Label.d.ts +1 -1
  275. package/dist/components/{user-input/Label.mjs → user-action/Label.js} +5 -3
  276. package/dist/components/user-action/Label.js.map +1 -0
  277. package/dist/components/{user-input/Menu.js → user-action/Menu.cjs} +4 -4
  278. package/dist/components/user-action/Menu.cjs.map +1 -0
  279. package/dist/components/{user-input/Menu.mjs → user-action/Menu.js} +3 -3
  280. package/dist/components/user-action/Menu.js.map +1 -0
  281. package/dist/components/{user-input/MultiSelect.js → user-action/MultiSelect.cjs} +76 -51
  282. package/dist/components/user-action/MultiSelect.cjs.map +1 -0
  283. package/dist/components/{user-input/MultiSelect.d.mts → user-action/MultiSelect.d.cts} +3 -3
  284. package/dist/components/{user-input → user-action}/MultiSelect.d.ts +2 -2
  285. package/dist/components/{user-input/MultiSelect.mjs → user-action/MultiSelect.js} +75 -55
  286. package/dist/components/user-action/MultiSelect.js.map +1 -0
  287. package/dist/components/{user-input/ScrollPicker.js → user-action/ScrollPicker.cjs} +4 -4
  288. package/dist/components/user-action/ScrollPicker.cjs.map +1 -0
  289. package/dist/components/{user-input/ScrollPicker.mjs → user-action/ScrollPicker.js} +3 -3
  290. package/dist/components/user-action/ScrollPicker.js.map +1 -0
  291. package/dist/components/{user-input/SearchableSelect.js → user-action/Select.cjs} +181 -152
  292. package/dist/components/user-action/Select.cjs.map +1 -0
  293. package/dist/components/user-action/Select.d.cts +49 -0
  294. package/dist/components/user-action/Select.d.ts +49 -0
  295. package/dist/components/{user-input/SearchableSelect.mjs → user-action/Select.js} +167 -145
  296. package/dist/components/user-action/Select.js.map +1 -0
  297. package/dist/components/{user-input/Textarea.js → user-action/Textarea.cjs} +80 -35
  298. package/dist/components/user-action/Textarea.cjs.map +1 -0
  299. package/dist/components/user-action/Textarea.d.cts +28 -0
  300. package/dist/components/{user-input → user-action}/Textarea.d.ts +9 -5
  301. package/dist/components/user-action/Textarea.js +163 -0
  302. package/dist/components/user-action/Textarea.js.map +1 -0
  303. package/dist/components/{user-input/ToggleableInput.js → user-action/ToggleableInput.cjs} +9 -15
  304. package/dist/components/user-action/ToggleableInput.cjs.map +1 -0
  305. package/dist/components/{user-input/ToggleableInput.mjs → user-action/ToggleableInput.js} +8 -14
  306. package/dist/components/user-action/ToggleableInput.js.map +1 -0
  307. package/dist/components/{Tooltip.js → user-action/Tooltip.cjs} +13 -9
  308. package/dist/components/user-action/Tooltip.cjs.map +1 -0
  309. package/dist/components/{Tooltip.d.mts → user-action/Tooltip.d.cts} +1 -1
  310. package/dist/components/{Tooltip.d.ts → user-action/Tooltip.d.ts} +1 -1
  311. package/dist/components/{Tooltip.mjs → user-action/Tooltip.js} +12 -8
  312. package/dist/components/user-action/Tooltip.js.map +1 -0
  313. package/dist/css/globals.css +185 -129
  314. package/dist/css/uncompiled/globals.css +71 -32
  315. package/dist/hooks/useHoverState.cjs +72 -0
  316. package/dist/hooks/{useHoverState.mjs.map → useHoverState.cjs.map} +1 -1
  317. package/dist/hooks/useHoverState.js +7 -32
  318. package/dist/hooks/useHoverState.js.map +1 -1
  319. package/dist/hooks/useLocalStorage.cjs +83 -0
  320. package/dist/hooks/useLocalStorage.cjs.map +1 -0
  321. package/dist/hooks/useLocalStorage.js +9 -34
  322. package/dist/hooks/useLocalStorage.js.map +1 -1
  323. package/dist/hooks/useOutsideClick.cjs +48 -0
  324. package/dist/hooks/{useOutsideClick.mjs.map → useOutsideClick.cjs.map} +1 -1
  325. package/dist/hooks/useOutsideClick.js +4 -29
  326. package/dist/hooks/useOutsideClick.js.map +1 -1
  327. package/dist/hooks/useSaveDelay.cjs +68 -0
  328. package/dist/hooks/{useSaveDelay.mjs.map → useSaveDelay.cjs.map} +1 -1
  329. package/dist/hooks/useSaveDelay.js +6 -31
  330. package/dist/hooks/useSaveDelay.js.map +1 -1
  331. package/dist/{index.mjs → index.cjs} +4042 -3867
  332. package/dist/index.cjs.map +1 -0
  333. package/dist/index.d.cts +83 -0
  334. package/dist/index.d.ts +51 -56
  335. package/dist/index.js +3858 -4041
  336. package/dist/index.js.map +1 -1
  337. package/dist/{hooks/useLanguage.js → localization/LanguageProvider.cjs} +30 -26
  338. package/dist/localization/LanguageProvider.cjs.map +1 -0
  339. package/dist/localization/LanguageProvider.d.cts +18 -0
  340. package/dist/localization/LanguageProvider.d.ts +18 -0
  341. package/dist/{hooks/useLanguage.mjs → localization/LanguageProvider.js} +26 -19
  342. package/dist/localization/LanguageProvider.js.map +1 -0
  343. package/dist/{hooks/useTranslation.js → localization/useTranslation.cjs} +23 -8
  344. package/dist/localization/useTranslation.cjs.map +1 -0
  345. package/dist/{hooks/useTranslation.d.mts → localization/useTranslation.d.cts} +5 -7
  346. package/dist/{hooks → localization}/useTranslation.d.ts +5 -7
  347. package/dist/{hooks/useTranslation.mjs → localization/useTranslation.js} +22 -7
  348. package/dist/localization/useTranslation.js.map +1 -0
  349. package/dist/localization/util.cjs +41 -0
  350. package/dist/localization/util.cjs.map +1 -0
  351. package/dist/localization/util.d.cts +18 -0
  352. package/dist/localization/util.d.ts +18 -0
  353. package/dist/localization/util.js +16 -0
  354. package/dist/localization/util.js.map +1 -0
  355. package/dist/{hooks/useTheme.js → theming/useTheme.cjs} +19 -11
  356. package/dist/theming/useTheme.cjs.map +1 -0
  357. package/dist/{hooks/useTheme.d.mts → theming/useTheme.d.cts} +9 -5
  358. package/dist/{hooks → theming}/useTheme.d.ts +9 -5
  359. package/dist/{hooks/useTheme.mjs → theming/useTheme.js} +15 -7
  360. package/dist/theming/useTheme.js.map +1 -0
  361. package/dist/util/{array.mjs → array.cjs} +34 -3
  362. package/dist/util/array.cjs.map +1 -0
  363. package/dist/util/array.js +2 -33
  364. package/dist/util/array.js.map +1 -1
  365. package/dist/util/builder.cjs +34 -0
  366. package/dist/util/{builder.mjs.map → builder.cjs.map} +1 -1
  367. package/dist/util/builder.js +2 -27
  368. package/dist/util/builder.js.map +1 -1
  369. package/dist/util/{date.mjs → date.cjs} +41 -3
  370. package/dist/util/date.cjs.map +1 -0
  371. package/dist/util/date.js +2 -40
  372. package/dist/util/date.js.map +1 -1
  373. package/dist/util/easeFunctions.cjs +63 -0
  374. package/dist/util/easeFunctions.cjs.map +1 -0
  375. package/dist/util/easeFunctions.js +2 -29
  376. package/dist/util/easeFunctions.js.map +1 -1
  377. package/dist/util/emailValidation.cjs +33 -0
  378. package/dist/util/{emailValidation.mjs.map → emailValidation.cjs.map} +1 -1
  379. package/dist/util/emailValidation.js +2 -27
  380. package/dist/util/emailValidation.js.map +1 -1
  381. package/dist/util/{loopingArray.mjs → loopingArray.cjs} +28 -3
  382. package/dist/util/{loopingArray.mjs.map → loopingArray.cjs.map} +1 -1
  383. package/dist/util/loopingArray.js +2 -27
  384. package/dist/util/loopingArray.js.map +1 -1
  385. package/dist/util/math.cjs +33 -0
  386. package/dist/util/{math.mjs.map → math.cjs.map} +1 -1
  387. package/dist/util/math.js +2 -27
  388. package/dist/util/math.js.map +1 -1
  389. package/dist/util/news.cjs +77 -0
  390. package/dist/util/news.cjs.map +1 -0
  391. package/dist/util/{news.d.mts → news.d.cts} +11 -13
  392. package/dist/util/news.d.ts +11 -13
  393. package/dist/util/news.js +22 -49
  394. package/dist/util/news.js.map +1 -1
  395. package/dist/util/noop.cjs +31 -0
  396. package/dist/util/noop.cjs.map +1 -0
  397. package/dist/util/noop.js +2 -27
  398. package/dist/util/noop.js.map +1 -1
  399. package/dist/util/simpleSearch.cjs +54 -0
  400. package/dist/util/simpleSearch.cjs.map +1 -0
  401. package/dist/util/simpleSearch.js +2 -30
  402. package/dist/util/simpleSearch.js.map +1 -1
  403. package/dist/util/storage.cjs +64 -0
  404. package/dist/util/storage.cjs.map +1 -0
  405. package/dist/util/storage.js +2 -28
  406. package/dist/util/storage.js.map +1 -1
  407. package/dist/util/types.cjs +19 -0
  408. package/dist/util/types.cjs.map +1 -0
  409. package/dist/util/types.js +0 -18
  410. package/dist/util/types.js.map +1 -1
  411. package/package.json +9 -12
  412. package/dist/coloring/shading.mjs +0 -47
  413. package/dist/coloring/shading.mjs.map +0 -1
  414. package/dist/coloring/types.mjs +0 -6
  415. package/dist/components/Avatar.d.mts +0 -17
  416. package/dist/components/Avatar.d.ts +0 -17
  417. package/dist/components/Avatar.js +0 -85
  418. package/dist/components/Avatar.js.map +0 -1
  419. package/dist/components/Avatar.mjs +0 -48
  420. package/dist/components/Avatar.mjs.map +0 -1
  421. package/dist/components/AvatarGroup.d.mts +0 -14
  422. package/dist/components/AvatarGroup.d.ts +0 -14
  423. package/dist/components/AvatarGroup.js.map +0 -1
  424. package/dist/components/AvatarGroup.mjs.map +0 -1
  425. package/dist/components/BreadCrumb.js.map +0 -1
  426. package/dist/components/BreadCrumb.mjs.map +0 -1
  427. package/dist/components/Button.js.map +0 -1
  428. package/dist/components/Button.mjs.map +0 -1
  429. package/dist/components/ChipList.js.map +0 -1
  430. package/dist/components/ChipList.mjs.map +0 -1
  431. package/dist/components/Circle.js.map +0 -1
  432. package/dist/components/Circle.mjs.map +0 -1
  433. package/dist/components/ErrorComponent.js.map +0 -1
  434. package/dist/components/ErrorComponent.mjs.map +0 -1
  435. package/dist/components/Expandable.js.map +0 -1
  436. package/dist/components/Expandable.mjs.map +0 -1
  437. package/dist/components/HelpwaveBadge.js.map +0 -1
  438. package/dist/components/HelpwaveBadge.mjs +0 -91
  439. package/dist/components/HelpwaveBadge.mjs.map +0 -1
  440. package/dist/components/HideableContentSection.d.mts +0 -14
  441. package/dist/components/HideableContentSection.d.ts +0 -14
  442. package/dist/components/HideableContentSection.js +0 -70
  443. package/dist/components/HideableContentSection.js.map +0 -1
  444. package/dist/components/HideableContentSection.mjs +0 -35
  445. package/dist/components/HideableContentSection.mjs.map +0 -1
  446. package/dist/components/InputGroup.d.mts +0 -17
  447. package/dist/components/InputGroup.d.ts +0 -17
  448. package/dist/components/InputGroup.js +0 -97
  449. package/dist/components/InputGroup.js.map +0 -1
  450. package/dist/components/InputGroup.mjs +0 -62
  451. package/dist/components/InputGroup.mjs.map +0 -1
  452. package/dist/components/LoadingAndErrorComponent.js.map +0 -1
  453. package/dist/components/LoadingAndErrorComponent.mjs.map +0 -1
  454. package/dist/components/LoadingAnimation.js.map +0 -1
  455. package/dist/components/LoadingAnimation.mjs.map +0 -1
  456. package/dist/components/LoadingButton.js.map +0 -1
  457. package/dist/components/LoadingButton.mjs.map +0 -1
  458. package/dist/components/MarkdownInterpreter.js.map +0 -1
  459. package/dist/components/MarkdownInterpreter.mjs.map +0 -1
  460. package/dist/components/Pagination.js.map +0 -1
  461. package/dist/components/Pagination.mjs.map +0 -1
  462. package/dist/components/Profile.d.mts +0 -31
  463. package/dist/components/Profile.d.ts +0 -31
  464. package/dist/components/Profile.js +0 -197
  465. package/dist/components/Profile.js.map +0 -1
  466. package/dist/components/Profile.mjs +0 -162
  467. package/dist/components/Profile.mjs.map +0 -1
  468. package/dist/components/ProgressIndicator.js.map +0 -1
  469. package/dist/components/ProgressIndicator.mjs.map +0 -1
  470. package/dist/components/Ring.js.map +0 -1
  471. package/dist/components/Ring.mjs.map +0 -1
  472. package/dist/components/SearchableList.js.map +0 -1
  473. package/dist/components/SearchableList.mjs.map +0 -1
  474. package/dist/components/SortButton.d.mts +0 -15
  475. package/dist/components/SortButton.d.ts +0 -15
  476. package/dist/components/SortButton.js +0 -132
  477. package/dist/components/SortButton.js.map +0 -1
  478. package/dist/components/SortButton.mjs +0 -97
  479. package/dist/components/SortButton.mjs.map +0 -1
  480. package/dist/components/StepperBar.js.map +0 -1
  481. package/dist/components/StepperBar.mjs.map +0 -1
  482. package/dist/components/Table.js.map +0 -1
  483. package/dist/components/Table.mjs.map +0 -1
  484. package/dist/components/TechRadar.d.mts +0 -39
  485. package/dist/components/TechRadar.d.ts +0 -39
  486. package/dist/components/TechRadar.js +0 -243
  487. package/dist/components/TechRadar.js.map +0 -1
  488. package/dist/components/TechRadar.mjs +0 -208
  489. package/dist/components/TechRadar.mjs.map +0 -1
  490. package/dist/components/TextImage.js.map +0 -1
  491. package/dist/components/TextImage.mjs.map +0 -1
  492. package/dist/components/TimeDisplay.js.map +0 -1
  493. package/dist/components/TimeDisplay.mjs.map +0 -1
  494. package/dist/components/Tooltip.js.map +0 -1
  495. package/dist/components/Tooltip.mjs.map +0 -1
  496. package/dist/components/VerticalDivider.js.map +0 -1
  497. package/dist/components/VerticalDivider.mjs.map +0 -1
  498. package/dist/components/date/DatePicker.mjs.map +0 -1
  499. package/dist/components/date/DayPicker.mjs.map +0 -1
  500. package/dist/components/date/TimePicker.mjs.map +0 -1
  501. package/dist/components/date/YearMonthPicker.mjs.map +0 -1
  502. package/dist/components/icons/Helpwave.js.map +0 -1
  503. package/dist/components/icons/Helpwave.mjs +0 -43
  504. package/dist/components/icons/Helpwave.mjs.map +0 -1
  505. package/dist/components/icons/Tag.js.map +0 -1
  506. package/dist/components/icons/Tag.mjs.map +0 -1
  507. package/dist/components/layout/Carousel.js.map +0 -1
  508. package/dist/components/layout/Carousel.mjs.map +0 -1
  509. package/dist/components/layout/DividerInserter.js.map +0 -1
  510. package/dist/components/layout/DividerInserter.mjs.map +0 -1
  511. package/dist/components/layout/FAQSection.js.map +0 -1
  512. package/dist/components/layout/FAQSection.mjs.map +0 -1
  513. package/dist/components/layout/Tile.js.map +0 -1
  514. package/dist/components/layout/Tile.mjs.map +0 -1
  515. package/dist/components/modals/ConfirmDialog.d.mts +0 -38
  516. package/dist/components/modals/ConfirmDialog.d.ts +0 -38
  517. package/dist/components/modals/ConfirmDialog.js.map +0 -1
  518. package/dist/components/modals/ConfirmDialog.mjs.map +0 -1
  519. package/dist/components/modals/DiscardChangesDialog.d.mts +0 -23
  520. package/dist/components/modals/DiscardChangesDialog.d.ts +0 -23
  521. package/dist/components/modals/DiscardChangesDialog.js +0 -409
  522. package/dist/components/modals/DiscardChangesDialog.js.map +0 -1
  523. package/dist/components/modals/DiscardChangesDialog.mjs +0 -372
  524. package/dist/components/modals/DiscardChangesDialog.mjs.map +0 -1
  525. package/dist/components/modals/InputModal.mjs +0 -568
  526. package/dist/components/modals/InputModal.mjs.map +0 -1
  527. package/dist/components/modals/LanguageModal.d.mts +0 -21
  528. package/dist/components/modals/LanguageModal.mjs +0 -491
  529. package/dist/components/modals/LanguageModal.mjs.map +0 -1
  530. package/dist/components/modals/Modal.d.mts +0 -43
  531. package/dist/components/modals/Modal.d.ts +0 -43
  532. package/dist/components/modals/Modal.js +0 -288
  533. package/dist/components/modals/Modal.js.map +0 -1
  534. package/dist/components/modals/Modal.mjs +0 -251
  535. package/dist/components/modals/Modal.mjs.map +0 -1
  536. package/dist/components/modals/ModalRegister.d.mts +0 -16
  537. package/dist/components/modals/ModalRegister.d.ts +0 -16
  538. package/dist/components/modals/ModalRegister.js +0 -63
  539. package/dist/components/modals/ModalRegister.js.map +0 -1
  540. package/dist/components/modals/ModalRegister.mjs +0 -37
  541. package/dist/components/modals/ModalRegister.mjs.map +0 -1
  542. package/dist/components/properties/CheckboxProperty.mjs +0 -291
  543. package/dist/components/properties/CheckboxProperty.mjs.map +0 -1
  544. package/dist/components/properties/DateProperty.mjs +0 -392
  545. package/dist/components/properties/DateProperty.mjs.map +0 -1
  546. package/dist/components/properties/MultiSelectProperty.mjs.map +0 -1
  547. package/dist/components/properties/NumberProperty.mjs +0 -401
  548. package/dist/components/properties/NumberProperty.mjs.map +0 -1
  549. package/dist/components/properties/PropertyBase.mjs +0 -162
  550. package/dist/components/properties/PropertyBase.mjs.map +0 -1
  551. package/dist/components/properties/SelectProperty.mjs.map +0 -1
  552. package/dist/components/properties/TextProperty.mjs +0 -345
  553. package/dist/components/properties/TextProperty.mjs.map +0 -1
  554. package/dist/components/user-input/Checkbox.js.map +0 -1
  555. package/dist/components/user-input/Checkbox.mjs.map +0 -1
  556. package/dist/components/user-input/DateAndTimePicker.js.map +0 -1
  557. package/dist/components/user-input/DateAndTimePicker.mjs.map +0 -1
  558. package/dist/components/user-input/Input.js.map +0 -1
  559. package/dist/components/user-input/Input.mjs.map +0 -1
  560. package/dist/components/user-input/Label.js.map +0 -1
  561. package/dist/components/user-input/Label.mjs.map +0 -1
  562. package/dist/components/user-input/Menu.js.map +0 -1
  563. package/dist/components/user-input/Menu.mjs.map +0 -1
  564. package/dist/components/user-input/MultiSelect.js.map +0 -1
  565. package/dist/components/user-input/MultiSelect.mjs.map +0 -1
  566. package/dist/components/user-input/ScrollPicker.js.map +0 -1
  567. package/dist/components/user-input/ScrollPicker.mjs.map +0 -1
  568. package/dist/components/user-input/SearchableSelect.d.mts +0 -14
  569. package/dist/components/user-input/SearchableSelect.d.ts +0 -14
  570. package/dist/components/user-input/SearchableSelect.js.map +0 -1
  571. package/dist/components/user-input/SearchableSelect.mjs.map +0 -1
  572. package/dist/components/user-input/Select.d.mts +0 -36
  573. package/dist/components/user-input/Select.d.ts +0 -36
  574. package/dist/components/user-input/Select.js +0 -153
  575. package/dist/components/user-input/Select.js.map +0 -1
  576. package/dist/components/user-input/Select.mjs +0 -118
  577. package/dist/components/user-input/Select.mjs.map +0 -1
  578. package/dist/components/user-input/Textarea.d.mts +0 -24
  579. package/dist/components/user-input/Textarea.js.map +0 -1
  580. package/dist/components/user-input/Textarea.mjs +0 -119
  581. package/dist/components/user-input/Textarea.mjs.map +0 -1
  582. package/dist/components/user-input/ToggleableInput.js.map +0 -1
  583. package/dist/components/user-input/ToggleableInput.mjs.map +0 -1
  584. package/dist/hooks/useHoverState.mjs +0 -47
  585. package/dist/hooks/useLanguage.d.mts +0 -21
  586. package/dist/hooks/useLanguage.d.ts +0 -21
  587. package/dist/hooks/useLanguage.js.map +0 -1
  588. package/dist/hooks/useLanguage.mjs.map +0 -1
  589. package/dist/hooks/useLocalStorage.mjs +0 -58
  590. package/dist/hooks/useLocalStorage.mjs.map +0 -1
  591. package/dist/hooks/useOutsideClick.mjs +0 -23
  592. package/dist/hooks/useSaveDelay.mjs +0 -43
  593. package/dist/hooks/useTheme.js.map +0 -1
  594. package/dist/hooks/useTheme.mjs.map +0 -1
  595. package/dist/hooks/useTranslation.js.map +0 -1
  596. package/dist/hooks/useTranslation.mjs.map +0 -1
  597. package/dist/index.d.mts +0 -88
  598. package/dist/index.mjs.map +0 -1
  599. package/dist/util/array.mjs.map +0 -1
  600. package/dist/util/builder.mjs +0 -9
  601. package/dist/util/date.mjs.map +0 -1
  602. package/dist/util/easeFunctions.mjs +0 -36
  603. package/dist/util/easeFunctions.mjs.map +0 -1
  604. package/dist/util/emailValidation.mjs +0 -8
  605. package/dist/util/math.mjs +0 -8
  606. package/dist/util/news.mjs +0 -48
  607. package/dist/util/news.mjs.map +0 -1
  608. package/dist/util/noop.mjs +0 -6
  609. package/dist/util/noop.mjs.map +0 -1
  610. package/dist/util/simpleSearch.mjs +0 -26
  611. package/dist/util/simpleSearch.mjs.map +0 -1
  612. package/dist/util/storage.mjs +0 -38
  613. package/dist/util/storage.mjs.map +0 -1
  614. package/dist/util/types.mjs +0 -1
  615. package/dist/util/types.mjs.map +0 -1
  616. /package/dist/coloring/{types.d.mts → types.d.cts} +0 -0
  617. /package/dist/components/{HelpwaveBadge.d.mts → branding/HelpwaveBadge.d.cts} +0 -0
  618. /package/dist/components/{HelpwaveBadge.d.ts → branding/HelpwaveBadge.d.ts} +0 -0
  619. /package/dist/components/{Circle.d.mts → icons-and-geometry/Circle.d.cts} +0 -0
  620. /package/dist/components/{Circle.d.ts → icons-and-geometry/Circle.d.ts} +0 -0
  621. /package/dist/components/{icons/Helpwave.d.mts → icons-and-geometry/Helpwave.d.cts} +0 -0
  622. /package/dist/components/{icons → icons-and-geometry}/Helpwave.d.ts +0 -0
  623. /package/dist/components/{Ring.d.mts → icons-and-geometry/Ring.d.cts} +0 -0
  624. /package/dist/components/{Ring.d.ts → icons-and-geometry/Ring.d.ts} +0 -0
  625. /package/dist/components/{icons/Tag.d.mts → icons-and-geometry/Tag.d.cts} +0 -0
  626. /package/dist/components/{icons → icons-and-geometry}/Tag.d.ts +0 -0
  627. /package/dist/components/{BreadCrumb.d.mts → layout-and-navigation/BreadCrumb.d.cts} +0 -0
  628. /package/dist/components/{BreadCrumb.d.ts → layout-and-navigation/BreadCrumb.d.ts} +0 -0
  629. /package/dist/components/{layout/Carousel.d.mts → layout-and-navigation/Carousel.d.cts} +0 -0
  630. /package/dist/components/{layout → layout-and-navigation}/Carousel.d.ts +0 -0
  631. /package/dist/components/{ChipList.d.mts → layout-and-navigation/Chip.d.cts} +0 -0
  632. /package/dist/components/{ChipList.d.ts → layout-and-navigation/Chip.d.ts} +0 -0
  633. /package/dist/components/{layout/DividerInserter.d.mts → layout-and-navigation/DividerInserter.d.cts} +0 -0
  634. /package/dist/components/{layout → layout-and-navigation}/DividerInserter.d.ts +0 -0
  635. /package/dist/components/{Expandable.d.mts → layout-and-navigation/Expandable.d.cts} +0 -0
  636. /package/dist/components/{Expandable.d.ts → layout-and-navigation/Expandable.d.ts} +0 -0
  637. /package/dist/components/{MarkdownInterpreter.d.mts → layout-and-navigation/MarkdownInterpreter.d.cts} +0 -0
  638. /package/dist/components/{MarkdownInterpreter.d.ts → layout-and-navigation/MarkdownInterpreter.d.ts} +0 -0
  639. /package/dist/components/{layout/Tile.d.mts → layout-and-navigation/Tile.d.cts} +0 -0
  640. /package/dist/components/{layout → layout-and-navigation}/Tile.d.ts +0 -0
  641. /package/dist/components/{VerticalDivider.d.mts → layout-and-navigation/VerticalDivider.d.cts} +0 -0
  642. /package/dist/components/{VerticalDivider.d.ts → layout-and-navigation/VerticalDivider.d.ts} +0 -0
  643. /package/dist/components/{ProgressIndicator.d.mts → loading-states/ProgressIndicator.d.cts} +0 -0
  644. /package/dist/components/{ProgressIndicator.d.ts → loading-states/ProgressIndicator.d.ts} +0 -0
  645. /package/dist/components/{user-input/Menu.d.mts → user-action/Menu.d.cts} +0 -0
  646. /package/dist/components/{user-input → user-action}/Menu.d.ts +0 -0
  647. /package/dist/components/{user-input/ScrollPicker.d.mts → user-action/ScrollPicker.d.cts} +0 -0
  648. /package/dist/components/{user-input → user-action}/ScrollPicker.d.ts +0 -0
  649. /package/dist/components/{user-input/ToggleableInput.d.mts → user-action/ToggleableInput.d.cts} +0 -0
  650. /package/dist/components/{user-input → user-action}/ToggleableInput.d.ts +0 -0
  651. /package/dist/hooks/{useHoverState.d.mts → useHoverState.d.cts} +0 -0
  652. /package/dist/hooks/{useLocalStorage.d.mts → useLocalStorage.d.cts} +0 -0
  653. /package/dist/hooks/{useOutsideClick.d.mts → useOutsideClick.d.cts} +0 -0
  654. /package/dist/hooks/{useSaveDelay.d.mts → useSaveDelay.d.cts} +0 -0
  655. /package/dist/util/{array.d.mts → array.d.cts} +0 -0
  656. /package/dist/util/{builder.d.mts → builder.d.cts} +0 -0
  657. /package/dist/util/{date.d.mts → date.d.cts} +0 -0
  658. /package/dist/util/{easeFunctions.d.mts → easeFunctions.d.cts} +0 -0
  659. /package/dist/util/{emailValidation.d.mts → emailValidation.d.cts} +0 -0
  660. /package/dist/util/{loopingArray.d.mts → loopingArray.d.cts} +0 -0
  661. /package/dist/util/{math.d.mts → math.d.cts} +0 -0
  662. /package/dist/util/{noop.d.mts → noop.d.cts} +0 -0
  663. /package/dist/util/{simpleSearch.d.mts → simpleSearch.d.cts} +0 -0
  664. /package/dist/util/{storage.d.mts → storage.d.cts} +0 -0
  665. /package/dist/util/{types.d.mts → types.d.cts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layout-and-navigation/Overlay.tsx","../../../src/hooks/useHoverState.ts","../../../src/components/user-action/Tooltip.tsx","../../../src/components/user-action/Button.tsx","../../../src/localization/LanguageProvider.tsx","../../../src/hooks/useLocalStorage.ts","../../../src/localization/util.ts","../../../src/localization/useTranslation.ts"],"sourcesContent":["import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport clsx from 'clsx'\nimport { Tooltip } from '@/components/user-action/Tooltip'\nimport { X } from 'lucide-react'\nimport { IconButton } from '@/components/user-action/Button'\nimport type { PropsForTranslation } from '@/localization/useTranslation'\nimport { useTranslation } from '@/localization/useTranslation'\nimport type { Language } from '@/localization/util'\n\nexport type OverlayProps = PropsWithChildren<{\n /**\n * Whether the overlay should be currently displayed\n */\n isOpen: boolean,\n /**\n * Callback when the background is clicked\n */\n onBackgroundClick?: () => void,\n /**\n * Styling for the background\n *\n * To remove the darkening, set bg-transparent\n */\n backgroundClassName?: string,\n}>\n\n/**\n * A generic overlay window which is managed by its parent\n */\nexport const Overlay = ({\n children,\n isOpen,\n onBackgroundClick,\n backgroundClassName,\n }: PropsWithChildren<OverlayProps>) => {\n // The element to which the overlay will be attached to\n const [root, setRoot] = useState<HTMLElement>()\n\n useEffect(() => {\n setRoot(document.body)\n }, [])\n\n if (!root || !isOpen) return null\n\n\n return ReactDOM.createPortal(\n <div className={clsx('fixed inset-0 z-[9999]')}>\n <div\n className={clsx('fixed inset-0 h-screen w-screen bg-black/30', backgroundClassName)}\n onClick={onBackgroundClick}\n />\n {children}\n </div>,\n root\n )\n}\n\n\nlet overlayStack: HTMLDivElement[] = []\n\n\n// --- Modal ---\n\ntype ModalHeaderTranslation = {\n close: string,\n}\n\nconst defaultModalHeaderTranslation: Record<Language, ModalHeaderTranslation> = {\n en: {\n close: 'Close'\n },\n de: {\n close: 'Schließen'\n }\n}\n\nexport type OverlayHeaderProps = {\n /**\n * Callback when the close button is clicked. If omitted or undefined, the button is hidden\n */\n onClose?: () => void,\n /** The title of the Modal. If you want to only set the text use `titleText` instead */\n title?: ReactNode,\n /** The title text of the Modal. If you want to set a custom title use `title` instead */\n titleText?: string,\n /** The description of the Modal. If you want to only set the text use `descriptionText` instead */\n description?: ReactNode,\n /** The description text of the Modal. If you want to set a custom description use `description` instead */\n descriptionText?: string,\n}\n\n/**\n * A header that should be in an Overlay\n */\nexport const OverlayHeader = ({\n overwriteTranslation,\n onClose,\n title,\n titleText = '',\n description,\n descriptionText = ''\n }: PropsForTranslation<ModalHeaderTranslation, OverlayHeaderProps>) => {\n const translation = useTranslation(defaultModalHeaderTranslation, overwriteTranslation)\n const hasTitleRow = !!title || !!titleText || !!onClose\n const titleRow = (\n <div className=\"row justify-between items-start gap-x-8\">\n {title ?? (\n <h2\n className={clsx('textstyle-title-lg', {\n 'mb-1': description || descriptionText,\n })}\n >\n {titleText}\n </h2>\n )}\n {!!onClose && (\n <Tooltip tooltip={translation.close}>\n <IconButton color=\"neutral\" size=\"small\" onClick={onClose}>\n <X className=\"w-full h-full\"/>\n </IconButton>\n </Tooltip>\n )}\n </div>\n )\n\n return (\n <div className=\"col\">\n {hasTitleRow && (titleRow)}\n {description ?? (descriptionText && (<span className=\"textstyle-description\">{descriptionText}</span>))}\n </div>\n )\n}\n\nexport type ModalProps = {\n isOpen: boolean,\n onClose: () => void,\n className?: string,\n backgroundClassName?: string,\n headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n}\n\n/**\n * A Generic Modal Window\n */\nexport const Modal = ({\n children,\n isOpen,\n onClose,\n className,\n backgroundClassName,\n headerProps,\n }: PropsWithChildren<ModalProps>) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!isOpen) return\n\n const modal = ref.current\n\n if (!modal) {\n console.error('modal open, but no ref found')\n return\n }\n\n overlayStack.push(modal)\n\n const focusable = modal?.querySelectorAll(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n )\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isTopmost = overlayStack[overlayStack.length - 1] === modal\n if (!isTopmost) return\n\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose()\n } else if (e.key === 'Tab') {\n if (focusable.length === 0) return\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n (last as HTMLElement).focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n (first as HTMLElement).focus()\n }\n }\n }\n\n modal.focus()\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n overlayStack = overlayStack.filter(m => m !== modal)\n }\n }, [isOpen, onClose])\n\n return (\n <Overlay\n isOpen={isOpen}\n onBackgroundClick={onClose}\n backgroundClassName={backgroundClassName}\n >\n <div\n ref={ref}\n tabIndex={-1}\n className={clsx(\n 'fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 col p-4 bg-overlay-background text-overlay-text rounded-xl shadow-xl',\n className\n )}\n role=\"dialog\"\n aria-modal={true}\n >\n <OverlayHeader {...headerProps} onClose={onClose}/>\n {children}\n </div>\n </Overlay>\n )\n}\n\n// --- Dialog ---\n\nexport type DialogProps = Omit<OverlayProps, 'onBackgroundClick'> & {\n headerProps?: Omit<OverlayHeaderProps, 'onClose'>,\n className?: string,\n}\n\n/**\n * A Generic Dialog Window\n */\nexport const Dialog = ({\n children,\n isOpen,\n className,\n backgroundClassName,\n headerProps,\n }: PropsWithChildren<DialogProps>) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!isOpen) return\n\n const dialog = ref.current\n\n if (!dialog) {\n console.error('dialog open, but no ref found')\n return\n }\n\n overlayStack.push(dialog)\n\n const focusable = dialog?.querySelectorAll(\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])'\n )\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const isTopmost = overlayStack[overlayStack.length - 1] === dialog\n if (!isTopmost) return\n\n if (e.key === 'Escape') {\n e.stopPropagation()\n } else if (e.key === 'Tab') {\n if (focusable.length === 0) return\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n (last as HTMLElement).focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n (first as HTMLElement).focus()\n }\n }\n }\n\n dialog.focus()\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n overlayStack = overlayStack.filter(m => m !== dialog)\n }\n }, [isOpen])\n\n return (\n <Overlay\n isOpen={isOpen}\n backgroundClassName={backgroundClassName}\n >\n <div\n ref={ref}\n tabIndex={-1}\n className={clsx(\n 'fixed left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 col p-4 bg-overlay-background text-overlay-text rounded-xl shadow-xl',\n className\n )}\n role=\"dialog\"\n aria-modal={true}\n >\n {!!headerProps && (<OverlayHeader {...headerProps}/>)}\n {children}\n </div>\n </Overlay>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useEffect, useState } from 'react'\n\ntype UseHoverStateProps = {\n /**\n * The delay after which the menu is closed in milliseconds\n *\n * default: 200ms\n */\n closingDelay: number,\n /**\n * Whether the hover state management should be disabled\n *\n * default: false\n */\n isDisabled: boolean,\n}\n\ntype UseHoverStateReturnType = {\n /**\n * Whether the element is hovered\n */\n isHovered: boolean,\n /**\n * Function to change the current hover status\n */\n setIsHovered: Dispatch<SetStateAction<boolean>>,\n /**\n * Handlers to pass on to the component that should be hovered\n */\n handlers: {\n onMouseEnter: () => void,\n onMouseLeave: () => void,\n },\n}\n\nconst defaultUseHoverStateProps: UseHoverStateProps = {\n closingDelay: 200,\n isDisabled: false,\n}\n\n/**\n * @param props See UseHoverStateProps\n *\n * A react hook for managing the hover state of a component. The handlers provided should be\n * forwarded to the component which should be hovered over\n */\nexport const useHoverState = (props: Partial<UseHoverStateProps> | undefined = undefined): UseHoverStateReturnType => {\n const { closingDelay, isDisabled } = { ...defaultUseHoverStateProps, ...props }\n\n const [isHovered, setIsHovered] = useState(false)\n const [timer, setTimer] = useState<NodeJS.Timeout>()\n\n const onMouseEnter = () => {\n if (isDisabled) {\n return\n }\n clearTimeout(timer)\n setIsHovered(true)\n }\n\n const onMouseLeave = () => {\n if (isDisabled) {\n return\n }\n setTimer(setTimeout(() => {\n setIsHovered(false)\n }, closingDelay))\n }\n\n useEffect(() => {\n if (timer) {\n return () => {\n clearTimeout(timer)\n }\n }\n })\n\n useEffect(() => {\n if (timer) {\n clearTimeout(timer)\n }\n }, [isDisabled]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n isHovered, setIsHovered, handlers: { onMouseEnter, onMouseLeave }\n }\n}\n","import type { CSSProperties, PropsWithChildren, ReactNode } from 'react'\nimport { useHoverState } from '@/hooks/useHoverState'\nimport { clsx } from 'clsx'\n\ntype Position = 'top' | 'bottom' | 'left' | 'right'\n\nexport type TooltipProps = PropsWithChildren<{\n tooltip: string | ReactNode,\n /**\n * Number of milliseconds until the tooltip appears\n *\n * defaults to 1000ms\n */\n animationDelay?: number,\n /**\n * Class names of additional styling properties for the tooltip\n */\n tooltipClassName?: string,\n /**\n * Class names of additional styling properties for the container from which the tooltip will be created\n */\n containerClassName?: string,\n position?: Position,\n zIndex?: number,\n}>\n\n/**\n * A Component for showing a tooltip when hovering over Content\n * @param tooltip The tooltip to show can be a text or any ReactNode\n * @param children The Content for which the tooltip should be created\n * @param animationDelay The delay before the tooltip appears\n * @param tooltipClassName Additional ClassNames for the Container of the tooltip\n * @param containerClassName Additional ClassNames for the Container holding the content\n * @param position The direction of the tooltip relative to the Container\n * @param zIndex The z Index of the tooltip (you may require this when stacking modal)\n * @constructor\n */\nexport const Tooltip = ({\n tooltip,\n children,\n animationDelay = 650,\n tooltipClassName = '',\n containerClassName = '',\n position = 'bottom',\n zIndex = 10,\n }: TooltipProps) => {\n const { isHovered, handlers } = useHoverState()\n\n const positionClasses = {\n top: `bottom-full left-1/2 -translate-x-1/2 mb-[6px]`,\n bottom: `top-full left-1/2 -translate-x-1/2 mt-[6px]`,\n left: `right-full top-1/2 -translate-y-1/2 mr-[6px]`,\n right: `left-full top-1/2 -translate-y-1/2 ml-[6px]`\n }\n\n const triangleSize = 6\n const triangleClasses = {\n top: `top-full left-1/2 -translate-x-1/2 border-t-tooltip-background border-l-transparent border-r-transparent`,\n bottom: `bottom-full left-1/2 -translate-x-1/2 border-b-tooltip-background border-l-transparent border-r-transparent`,\n left: `left-full top-1/2 -translate-y-1/2 border-l-tooltip-background border-t-transparent border-b-transparent`,\n right: `right-full top-1/2 -translate-y-1/2 border-r-tooltip-background border-t-transparent border-b-transparent`\n }\n\n const triangleStyle: Record<Position, CSSProperties> = {\n top: { borderWidth: `${triangleSize}px ${triangleSize}px 0 ${triangleSize}px` },\n bottom: { borderWidth: `0 ${triangleSize}px ${triangleSize}px ${triangleSize}px` },\n left: { borderWidth: `${triangleSize}px 0 ${triangleSize}px ${triangleSize}px` },\n right: { borderWidth: `${triangleSize}px ${triangleSize}px ${triangleSize}px 0` }\n }\n\n return (\n <div\n className={clsx('relative inline-block', containerClassName)}\n {...handlers}\n >\n {children}\n {isHovered && (\n <div\n className={clsx(\n `opacity-0 absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap\n animate-tooltip-fade-in shadow-lg bg-tooltip-background`,\n positionClasses[position], tooltipClassName\n )}\n style={{ zIndex, animationDelay: animationDelay + 'ms' }}\n >\n {tooltip}\n <div\n className={clsx(`absolute w-0 h-0`, triangleClasses[position])}\n style={{ ...triangleStyle[position], zIndex }}\n />\n </div>\n )}\n </div>\n )\n}\n","import type { ButtonHTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport clsx from 'clsx'\n\n\nexport const ButtonColorUtil = {\n solid: ['primary', 'secondary', 'tertiary', 'positive', 'warning', 'negative', 'neutral'] as const,\n text: ['primary', 'negative', 'neutral'] as const,\n outline: ['primary'] as const,\n}\n\n\n/**\n * The allowed colors for the SolidButton and IconButton\n */\nexport type SolidButtonColor = typeof ButtonColorUtil.solid[number]\n/**\n * The allowed colors for the OutlineButton\n */\nexport type OutlineButtonColor = typeof ButtonColorUtil.outline[number]\n/**\n * The allowed colors for the TextButton\n */\nexport type TextButtonColor = typeof ButtonColorUtil.text[number]\n\n/**\n * The different sizes for a button\n */\ntype ButtonSizes = 'small' | 'medium' | 'large'\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = PropsWithChildren<{\n /**\n * @default 'medium'\n */\n size?: ButtonSizes,\n}> & ButtonHTMLAttributes<Element>\n\nconst paddingMapping: Record<ButtonSizes, string> = {\n small: 'btn-sm',\n medium: 'btn-md',\n large: 'btn-lg'\n}\n\nconst iconPaddingMapping: Record<ButtonSizes, string> = {\n small: 'icon-btn-sm',\n medium: 'icon-btn-md',\n large: 'icon-btn-lg'\n}\n\nexport const ButtonUtil = {\n paddingMapping,\n iconPaddingMapping\n}\n\ntype ButtonWithIconsProps = ButtonProps & {\n startIcon?: ReactNode,\n endIcon?: ReactNode,\n}\n\nexport type SolidButtonProps = ButtonWithIconsProps & {\n color?: SolidButtonColor,\n}\n\nexport type OutlineButtonProps = ButtonWithIconsProps & {\n color?: OutlineButtonColor,\n}\n\nexport type TextButtonProps = ButtonWithIconsProps & {\n color?: TextButtonColor,\n}\n\nexport type IconButtonProps = ButtonProps & {\n color?: SolidButtonColor,\n}\n\n/**\n * A button with a solid background and different sizes\n */\nconst SolidButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: SolidButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-solid-primary-icon',\n secondary: 'text-button-solid-secondary-icon',\n tertiary: 'text-button-solid-tertiary-icon',\n positive: 'text-button-solid-positive-icon',\n warning: 'text-button-solid-warning-icon',\n negative: 'text-button-solid-negative-icon',\n neutral: 'text-button-solid-neutral-icon',\n }[color]\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n className,\n {\n 'text-disabled-text bg-disabled-background': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.paddingMapping[size]\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A button with an outline border and different sizes\n */\nconst OutlineButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: OutlineButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent border-2 border-button-outline-primary-text text-button-outline-primary-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-outline-primary-icon',\n }[color]\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n className, {\n 'text-disabled-text border-disabled-outline': disabled,\n [clsx(colorClasses, 'hover:brightness-80')]: !disabled,\n },\n ButtonUtil.paddingMapping[size]\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A text that is a button that can have different sizes\n */\nconst TextButton = ({\n children,\n disabled = false,\n color = 'neutral',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: TextButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent text-button-text-primary-text',\n negative: 'bg-transparent text-button-text-negative-text',\n neutral: 'bg-transparent text-button-text-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-text-primary-icon',\n negative: 'text-button-text-negative-icon',\n neutral: 'text-button-text-neutral-icon',\n }[color]\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n className, {\n 'text-disabled-text': disabled,\n [clsx(colorClasses, 'hover:bg-button-text-hover-background rounded-full')]: !disabled,\n },\n ButtonUtil.paddingMapping[size]\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n\n/**\n * A button for icons with a solid background and different sizes\n */\nconst IconButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n onClick,\n className,\n ...restProps\n }: IconButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n className,\n {\n 'text-disabled-text bg-disabled-background': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.iconPaddingMapping[size]\n )}\n {...restProps}\n >\n {children}\n </button>\n )\n}\n\nexport { SolidButton, OutlineButton, TextButton, IconButton }\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '@/hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\nexport type Translation<T> = Record<Language, T>\n\ntype OverwriteTranslationType<Translation extends Record<string, unknown>> = {\n language?: Language,\n translation?: Partial<Record<Language, Partial<Translation>>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends Record<string, unknown>,\n Props = Record<string, never>\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n};\n\nexport const useTranslation = <Translation extends Record<string, unknown>>(\n defaults: Record<Language, Translation>,\n translationOverwrite: OverwriteTranslationType<Translation> = {}\n): Translation => {\n const { language: languageProp, translation: overwrite } = translationOverwrite\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n let defaultValues: Translation = defaults[usedLanguage]\n if (overwrite && overwrite[usedLanguage]) {\n defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }\n }\n return defaultValues\n}\n"],"mappings":"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","names":["useEffect","useState","clsx","clsx","jsx","jsxs","jsx","clsx","useEffect","useState","useEffect","useState","jsx","jsx","jsxs","useState","useEffect","clsx"]}
@@ -27,28 +27,43 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
- // src/components/Pagination.tsx
30
+ // src/components/layout-and-navigation/Pagination.tsx
31
31
  var Pagination_exports = {};
32
32
  __export(Pagination_exports, {
33
33
  Pagination: () => Pagination
34
34
  });
35
35
  module.exports = __toCommonJS(Pagination_exports);
36
36
  var import_lucide_react = require("lucide-react");
37
- var import_clsx = __toESM(require("clsx"));
37
+ var import_clsx = __toESM(require("clsx"), 1);
38
38
 
39
- // src/hooks/useLanguage.tsx
39
+ // src/localization/LanguageProvider.tsx
40
40
  var import_react2 = require("react");
41
41
 
42
- // src/hooks/useLocalStorage.tsx
42
+ // src/hooks/useLocalStorage.ts
43
43
  var import_react = require("react");
44
44
 
45
- // src/hooks/useLanguage.tsx
46
- var import_jsx_runtime = require("react/jsx-runtime");
45
+ // src/localization/util.ts
46
+ var languages = ["en", "de"];
47
+ var languagesLocalNames = {
48
+ en: "English",
49
+ de: "Deutsch"
50
+ };
47
51
  var DEFAULT_LANGUAGE = "en";
48
- var LanguageContext = (0, import_react2.createContext)({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v });
52
+ var LanguageUtil = {
53
+ languages,
54
+ DEFAULT_LANGUAGE,
55
+ languagesLocalNames
56
+ };
57
+
58
+ // src/localization/LanguageProvider.tsx
59
+ var import_jsx_runtime = require("react/jsx-runtime");
60
+ var LanguageContext = (0, import_react2.createContext)({
61
+ language: LanguageUtil.DEFAULT_LANGUAGE,
62
+ setLanguage: (v) => v
63
+ });
49
64
  var useLanguage = () => (0, import_react2.useContext)(LanguageContext);
50
65
 
51
- // src/hooks/useTranslation.ts
66
+ // src/localization/useTranslation.ts
52
67
  var useTranslation = (defaults, translationOverwrite = {}) => {
53
68
  const { language: languageProp, translation: overwrite } = translationOverwrite;
54
69
  const { language: inferredLanguage } = useLanguage();
@@ -60,7 +75,7 @@ var useTranslation = (defaults, translationOverwrite = {}) => {
60
75
  return defaultValues;
61
76
  };
62
77
 
63
- // src/components/Pagination.tsx
78
+ // src/components/layout-and-navigation/Pagination.tsx
64
79
  var import_jsx_runtime2 = require("react/jsx-runtime");
65
80
  var defaultPaginationTranslations = {
66
81
  en: {
@@ -99,4 +114,4 @@ var Pagination = ({
99
114
  0 && (module.exports = {
100
115
  Pagination
101
116
  });
102
- //# sourceMappingURL=Pagination.js.map
117
+ //# sourceMappingURL=Pagination.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layout-and-navigation/Pagination.tsx","../../../src/localization/LanguageProvider.tsx","../../../src/hooks/useLocalStorage.ts","../../../src/localization/util.ts","../../../src/localization/useTranslation.ts"],"sourcesContent":["import { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { Language } from '../../localization/util'\n\ntype PaginationTranslation = {\n of: string,\n}\nconst defaultPaginationTranslations: Record<Language, PaginationTranslation> = {\n en: {\n of: 'of'\n },\n de: {\n of: 'von'\n }\n}\n\nexport type PaginationProps = {\n page: number, // starts with 0\n numberOfPages: number,\n onPageChanged: (page: number) => void,\n}\n\n/**\n * A Component showing the pagination allowing first, before, next and last page navigation\n */\nexport const Pagination = ({\n overwriteTranslation,\n page,\n numberOfPages,\n onPageChanged\n }: PropsForTranslation<PaginationTranslation, PaginationProps>) => {\n const translation = useTranslation(defaultPaginationTranslations, overwriteTranslation)\n\n const changePage = (page: number) => {\n onPageChanged(page)\n }\n\n const noPages = numberOfPages === 0\n const onFirstPage = page === 0 && !noPages\n const onLastPage = page === numberOfPages - 1\n\n return (\n <div className={clsx('row', { 'opacity-30': noPages })}>\n <button onClick={() => changePage(0)} disabled={onFirstPage}>\n <ChevronFirst className={clsx({ 'opacity-30': onFirstPage })}/>\n </button>\n <button onClick={() => changePage(page - 1)} disabled={onFirstPage}>\n <ChevronLeft className={clsx({ 'opacity-30': onFirstPage })}/>\n </button>\n <div className=\"min-w-[80px] justify-center mx-2\">\n <span className=\"select-none text-right flex-1\">{noPages ? 0 : page + 1}</span>\n <span className=\"select-none mx-2\">{translation.of}</span>\n <span className=\"select-none text-left flex-1\">{numberOfPages}</span>\n </div>\n <button onClick={() => changePage(page + 1)} disabled={onLastPage || noPages}>\n <ChevronRight className={clsx({ 'opacity-30': onLastPage })}/>\n </button>\n <button onClick={() => changePage(numberOfPages - 1)} disabled={onLastPage || noPages}>\n <ChevronLast className={clsx({ 'opacity-30': onLastPage })}/>\n </button>\n </div>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '@/hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\nexport type Translation<T> = Record<Language, T>\n\ntype OverwriteTranslationType<Translation extends Record<string, unknown>> = {\n language?: Language,\n translation?: Partial<Record<Language, Partial<Translation>>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends Record<string, unknown>,\n Props = Record<string, never>\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n};\n\nexport const useTranslation = <Translation extends Record<string, unknown>>(\n defaults: Record<Language, Translation>,\n translationOverwrite: OverwriteTranslationType<Translation> = {}\n): Translation => {\n const { language: languageProp, translation: overwrite } = translationOverwrite\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n let defaultValues: Translation = defaults[usedLanguage]\n if (overwrite && overwrite[usedLanguage]) {\n defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }\n }\n return defaultValues\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAqE;AACrE,kBAAiB;;;ACAjB,IAAAA,gBAA+D;;;ACA/D,mBAAiD;;;ACEjD,IAAM,YAAY,CAAC,MAAM,IAAI;AAU7B,IAAM,sBAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AACN;AAKA,IAAM,mBAA6B;AAK5B,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;;;AFoCI;AAvDG,IAAM,sBAAkB,6BAAoC;AAAA,EACjE,UAAU,aAAa;AAAA,EACvB,aAAa,CAAC,MAAM;AACtB,CAAC;AAEM,IAAM,cAAc,UAAM,0BAAW,eAAe;;;AGcpD,IAAM,iBAAiB,CAC5B,UACA,uBAA8D,CAAC,MAC/C;AAChB,QAAM,EAAE,UAAU,cAAc,aAAa,UAAU,IAAI;AAC3D,QAAM,EAAE,UAAU,iBAAiB,IAAI,YAAY;AACnD,QAAM,eAAe,gBAAgB;AACrC,MAAI,gBAA6B,SAAS,YAAY;AACtD,MAAI,aAAa,UAAU,YAAY,GAAG;AACxC,oBAAgB,EAAE,GAAG,eAAe,GAAG,UAAU,YAAY,EAAE;AAAA,EACjE;AACA,SAAO;AACT;;;AJIQ,IAAAC,sBAAA;AArCR,IAAM,gCAAyE;AAAA,EAC7E,IAAI;AAAA,IACF,IAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,IAAI;AAAA,EACN;AACF;AAWO,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAmE;AAC5F,QAAM,cAAc,eAAe,+BAA+B,oBAAoB;AAEtF,QAAM,aAAa,CAACC,UAAiB;AACnC,kBAAcA,KAAI;AAAA,EACpB;AAEA,QAAM,UAAU,kBAAkB;AAClC,QAAM,cAAc,SAAS,KAAK,CAAC;AACnC,QAAM,aAAa,SAAS,gBAAgB;AAE5C,SACE,8CAAC,SAAI,eAAW,YAAAC,SAAK,OAAO,EAAE,cAAc,QAAQ,CAAC,GACnD;AAAA,iDAAC,YAAO,SAAS,MAAM,WAAW,CAAC,GAAG,UAAU,aAC9C,uDAAC,oCAAa,eAAW,YAAAA,SAAK,EAAE,cAAc,YAAY,CAAC,GAAE,GAC/D;AAAA,IACA,6CAAC,YAAO,SAAS,MAAM,WAAW,OAAO,CAAC,GAAG,UAAU,aACrD,uDAAC,mCAAY,eAAW,YAAAA,SAAK,EAAE,cAAc,YAAY,CAAC,GAAE,GAC9D;AAAA,IACA,8CAAC,SAAI,WAAU,oCACb;AAAA,mDAAC,UAAK,WAAU,iCAAiC,oBAAU,IAAI,OAAO,GAAE;AAAA,MACxE,6CAAC,UAAK,WAAU,oBAAoB,sBAAY,IAAG;AAAA,MACnD,6CAAC,UAAK,WAAU,gCAAgC,yBAAc;AAAA,OAChE;AAAA,IACA,6CAAC,YAAO,SAAS,MAAM,WAAW,OAAO,CAAC,GAAG,UAAU,cAAc,SACnE,uDAAC,oCAAa,eAAW,YAAAA,SAAK,EAAE,cAAc,WAAW,CAAC,GAAE,GAC9D;AAAA,IACA,6CAAC,YAAO,SAAS,MAAM,WAAW,gBAAgB,CAAC,GAAG,UAAU,cAAc,SAC5E,uDAAC,mCAAY,eAAW,YAAAA,SAAK,EAAE,cAAc,WAAW,CAAC,GAAE,GAC7D;AAAA,KACF;AAEJ;","names":["import_react","import_jsx_runtime","page","clsx"]}
@@ -1,7 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { PropsForTranslation } from '../hooks/useTranslation.mjs';
3
- import '../hooks/useLanguage.mjs';
4
- import 'react';
2
+ import { PropsForTranslation } from '../../localization/useTranslation.cjs';
3
+ import '../../localization/util.cjs';
5
4
 
6
5
  type PaginationTranslation = {
7
6
  of: string;
@@ -1,7 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { PropsForTranslation } from '../hooks/useTranslation.js';
3
- import '../hooks/useLanguage.js';
4
- import 'react';
2
+ import { PropsForTranslation } from '../../localization/useTranslation.js';
3
+ import '../../localization/util.js';
5
4
 
6
5
  type PaginationTranslation = {
7
6
  of: string;
@@ -1,20 +1,35 @@
1
- // src/components/Pagination.tsx
2
- import { ChevronLast, ChevronLeft, ChevronFirst, ChevronRight } from "lucide-react";
1
+ // src/components/layout-and-navigation/Pagination.tsx
2
+ import { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from "lucide-react";
3
3
  import clsx from "clsx";
4
4
 
5
- // src/hooks/useLanguage.tsx
5
+ // src/localization/LanguageProvider.tsx
6
6
  import { createContext, useContext, useEffect as useEffect2, useState as useState2 } from "react";
7
7
 
8
- // src/hooks/useLocalStorage.tsx
8
+ // src/hooks/useLocalStorage.ts
9
9
  import { useCallback, useEffect, useState } from "react";
10
10
 
11
- // src/hooks/useLanguage.tsx
12
- import { jsx } from "react/jsx-runtime";
11
+ // src/localization/util.ts
12
+ var languages = ["en", "de"];
13
+ var languagesLocalNames = {
14
+ en: "English",
15
+ de: "Deutsch"
16
+ };
13
17
  var DEFAULT_LANGUAGE = "en";
14
- var LanguageContext = createContext({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v });
18
+ var LanguageUtil = {
19
+ languages,
20
+ DEFAULT_LANGUAGE,
21
+ languagesLocalNames
22
+ };
23
+
24
+ // src/localization/LanguageProvider.tsx
25
+ import { jsx } from "react/jsx-runtime";
26
+ var LanguageContext = createContext({
27
+ language: LanguageUtil.DEFAULT_LANGUAGE,
28
+ setLanguage: (v) => v
29
+ });
15
30
  var useLanguage = () => useContext(LanguageContext);
16
31
 
17
- // src/hooks/useTranslation.ts
32
+ // src/localization/useTranslation.ts
18
33
  var useTranslation = (defaults, translationOverwrite = {}) => {
19
34
  const { language: languageProp, translation: overwrite } = translationOverwrite;
20
35
  const { language: inferredLanguage } = useLanguage();
@@ -26,7 +41,7 @@ var useTranslation = (defaults, translationOverwrite = {}) => {
26
41
  return defaultValues;
27
42
  };
28
43
 
29
- // src/components/Pagination.tsx
44
+ // src/components/layout-and-navigation/Pagination.tsx
30
45
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
31
46
  var defaultPaginationTranslations = {
32
47
  en: {
@@ -64,4 +79,4 @@ var Pagination = ({
64
79
  export {
65
80
  Pagination
66
81
  };
67
- //# sourceMappingURL=Pagination.mjs.map
82
+ //# sourceMappingURL=Pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layout-and-navigation/Pagination.tsx","../../../src/localization/LanguageProvider.tsx","../../../src/hooks/useLocalStorage.ts","../../../src/localization/util.ts","../../../src/localization/useTranslation.ts"],"sourcesContent":["import { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\nimport type { Language } from '../../localization/util'\n\ntype PaginationTranslation = {\n of: string,\n}\nconst defaultPaginationTranslations: Record<Language, PaginationTranslation> = {\n en: {\n of: 'of'\n },\n de: {\n of: 'von'\n }\n}\n\nexport type PaginationProps = {\n page: number, // starts with 0\n numberOfPages: number,\n onPageChanged: (page: number) => void,\n}\n\n/**\n * A Component showing the pagination allowing first, before, next and last page navigation\n */\nexport const Pagination = ({\n overwriteTranslation,\n page,\n numberOfPages,\n onPageChanged\n }: PropsForTranslation<PaginationTranslation, PaginationProps>) => {\n const translation = useTranslation(defaultPaginationTranslations, overwriteTranslation)\n\n const changePage = (page: number) => {\n onPageChanged(page)\n }\n\n const noPages = numberOfPages === 0\n const onFirstPage = page === 0 && !noPages\n const onLastPage = page === numberOfPages - 1\n\n return (\n <div className={clsx('row', { 'opacity-30': noPages })}>\n <button onClick={() => changePage(0)} disabled={onFirstPage}>\n <ChevronFirst className={clsx({ 'opacity-30': onFirstPage })}/>\n </button>\n <button onClick={() => changePage(page - 1)} disabled={onFirstPage}>\n <ChevronLeft className={clsx({ 'opacity-30': onFirstPage })}/>\n </button>\n <div className=\"min-w-[80px] justify-center mx-2\">\n <span className=\"select-none text-right flex-1\">{noPages ? 0 : page + 1}</span>\n <span className=\"select-none mx-2\">{translation.of}</span>\n <span className=\"select-none text-left flex-1\">{numberOfPages}</span>\n </div>\n <button onClick={() => changePage(page + 1)} disabled={onLastPage || noPages}>\n <ChevronRight className={clsx({ 'opacity-30': onLastPage })}/>\n </button>\n <button onClick={() => changePage(numberOfPages - 1)} disabled={onLastPage || noPages}>\n <ChevronLast className={clsx({ 'opacity-30': onLastPage })}/>\n </button>\n </div>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '@/hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\nexport type Translation<T> = Record<Language, T>\n\ntype OverwriteTranslationType<Translation extends Record<string, unknown>> = {\n language?: Language,\n translation?: Partial<Record<Language, Partial<Translation>>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends Record<string, unknown>,\n Props = Record<string, never>\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n};\n\nexport const useTranslation = <Translation extends Record<string, unknown>>(\n defaults: Record<Language, Translation>,\n translationOverwrite: OverwriteTranslationType<Translation> = {}\n): Translation => {\n const { language: languageProp, translation: overwrite } = translationOverwrite\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n let defaultValues: Translation = defaults[usedLanguage]\n if (overwrite && overwrite[usedLanguage]) {\n defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }\n }\n return defaultValues\n}\n"],"mappings":";AAAA,SAAS,cAAc,aAAa,aAAa,oBAAoB;AACrE,OAAO,UAAU;;;ACAjB,SAAS,eAAe,YAAY,aAAAA,YAAW,YAAAC,iBAAgB;;;ACA/D,SAAS,aAAa,WAAW,gBAAgB;;;ACEjD,IAAM,YAAY,CAAC,MAAM,IAAI;AAU7B,IAAM,sBAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AACN;AAKA,IAAM,mBAA6B;AAK5B,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;;;AFoCI;AAvDG,IAAM,kBAAkB,cAAoC;AAAA,EACjE,UAAU,aAAa;AAAA,EACvB,aAAa,CAAC,MAAM;AACtB,CAAC;AAEM,IAAM,cAAc,MAAM,WAAW,eAAe;;;AGcpD,IAAM,iBAAiB,CAC5B,UACA,uBAA8D,CAAC,MAC/C;AAChB,QAAM,EAAE,UAAU,cAAc,aAAa,UAAU,IAAI;AAC3D,QAAM,EAAE,UAAU,iBAAiB,IAAI,YAAY;AACnD,QAAM,eAAe,gBAAgB;AACrC,MAAI,gBAA6B,SAAS,YAAY;AACtD,MAAI,aAAa,UAAU,YAAY,GAAG;AACxC,oBAAgB,EAAE,GAAG,eAAe,GAAG,UAAU,YAAY,EAAE;AAAA,EACjE;AACA,SAAO;AACT;;;AJIQ,gBAAAC,MAKF,YALE;AArCR,IAAM,gCAAyE;AAAA,EAC7E,IAAI;AAAA,IACF,IAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,IAAI;AAAA,EACN;AACF;AAWO,IAAM,aAAa,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAmE;AAC5F,QAAM,cAAc,eAAe,+BAA+B,oBAAoB;AAEtF,QAAM,aAAa,CAACC,UAAiB;AACnC,kBAAcA,KAAI;AAAA,EACpB;AAEA,QAAM,UAAU,kBAAkB;AAClC,QAAM,cAAc,SAAS,KAAK,CAAC;AACnC,QAAM,aAAa,SAAS,gBAAgB;AAE5C,SACE,qBAAC,SAAI,WAAW,KAAK,OAAO,EAAE,cAAc,QAAQ,CAAC,GACnD;AAAA,oBAAAD,KAAC,YAAO,SAAS,MAAM,WAAW,CAAC,GAAG,UAAU,aAC9C,0BAAAA,KAAC,gBAAa,WAAW,KAAK,EAAE,cAAc,YAAY,CAAC,GAAE,GAC/D;AAAA,IACA,gBAAAA,KAAC,YAAO,SAAS,MAAM,WAAW,OAAO,CAAC,GAAG,UAAU,aACrD,0BAAAA,KAAC,eAAY,WAAW,KAAK,EAAE,cAAc,YAAY,CAAC,GAAE,GAC9D;AAAA,IACA,qBAAC,SAAI,WAAU,oCACb;AAAA,sBAAAA,KAAC,UAAK,WAAU,iCAAiC,oBAAU,IAAI,OAAO,GAAE;AAAA,MACxE,gBAAAA,KAAC,UAAK,WAAU,oBAAoB,sBAAY,IAAG;AAAA,MACnD,gBAAAA,KAAC,UAAK,WAAU,gCAAgC,yBAAc;AAAA,OAChE;AAAA,IACA,gBAAAA,KAAC,YAAO,SAAS,MAAM,WAAW,OAAO,CAAC,GAAG,UAAU,cAAc,SACnE,0BAAAA,KAAC,gBAAa,WAAW,KAAK,EAAE,cAAc,WAAW,CAAC,GAAE,GAC9D;AAAA,IACA,gBAAAA,KAAC,YAAO,SAAS,MAAM,WAAW,gBAAgB,CAAC,GAAG,UAAU,cAAc,SAC5E,0BAAAA,KAAC,eAAY,WAAW,KAAK,EAAE,cAAc,WAAW,CAAC,GAAE,GAC7D;AAAA,KACF;AAEJ;","names":["useEffect","useState","jsx","page"]}
@@ -27,7 +27,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
- // src/components/SearchableList.tsx
30
+ // src/components/layout-and-navigation/SearchableList.tsx
31
31
  var SearchableList_exports = {};
32
32
  __export(SearchableList_exports, {
33
33
  SearchableList: () => SearchableList
@@ -35,21 +35,36 @@ __export(SearchableList_exports, {
35
35
  module.exports = __toCommonJS(SearchableList_exports);
36
36
  var import_react5 = require("react");
37
37
  var import_lucide_react = require("lucide-react");
38
- var import_clsx2 = __toESM(require("clsx"));
38
+ var import_clsx3 = __toESM(require("clsx"), 1);
39
39
 
40
- // src/hooks/useLanguage.tsx
40
+ // src/localization/LanguageProvider.tsx
41
41
  var import_react2 = require("react");
42
42
 
43
- // src/hooks/useLocalStorage.tsx
43
+ // src/hooks/useLocalStorage.ts
44
44
  var import_react = require("react");
45
45
 
46
- // src/hooks/useLanguage.tsx
47
- var import_jsx_runtime = require("react/jsx-runtime");
46
+ // src/localization/util.ts
47
+ var languages = ["en", "de"];
48
+ var languagesLocalNames = {
49
+ en: "English",
50
+ de: "Deutsch"
51
+ };
48
52
  var DEFAULT_LANGUAGE = "en";
49
- var LanguageContext = (0, import_react2.createContext)({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v });
53
+ var LanguageUtil = {
54
+ languages,
55
+ DEFAULT_LANGUAGE,
56
+ languagesLocalNames
57
+ };
58
+
59
+ // src/localization/LanguageProvider.tsx
60
+ var import_jsx_runtime = require("react/jsx-runtime");
61
+ var LanguageContext = (0, import_react2.createContext)({
62
+ language: LanguageUtil.DEFAULT_LANGUAGE,
63
+ setLanguage: (v) => v
64
+ });
50
65
  var useLanguage = () => (0, import_react2.useContext)(LanguageContext);
51
66
 
52
- // src/hooks/useTranslation.ts
67
+ // src/localization/useTranslation.ts
53
68
  var useTranslation = (defaults, translationOverwrite = {}) => {
54
69
  const { language: languageProp, translation: overwrite } = translationOverwrite;
55
70
  const { language: inferredLanguage } = useLanguage();
@@ -69,9 +84,9 @@ var MultiSearchWithMapping = (search, objects, mapping) => {
69
84
  });
70
85
  };
71
86
 
72
- // src/components/user-input/Input.tsx
87
+ // src/components/user-action/Input.tsx
73
88
  var import_react4 = require("react");
74
- var import_clsx = __toESM(require("clsx"));
89
+ var import_clsx2 = __toESM(require("clsx"), 1);
75
90
 
76
91
  // src/hooks/useSaveDelay.ts
77
92
  var import_react3 = require("react");
@@ -116,7 +131,8 @@ function useSaveDelay(setNotificationStatus, delay) {
116
131
  // src/util/noop.ts
117
132
  var noop = () => void 0;
118
133
 
119
- // src/components/user-input/Label.tsx
134
+ // src/components/user-action/Label.tsx
135
+ var import_clsx = __toESM(require("clsx"), 1);
120
136
  var import_jsx_runtime2 = require("react/jsx-runtime");
121
137
  var styleMapping = {
122
138
  labelSmall: "textstyle-label-sm",
@@ -127,23 +143,25 @@ var Label = ({
127
143
  children,
128
144
  name,
129
145
  labelType = "labelSmall",
146
+ className,
130
147
  ...props
131
148
  }) => {
132
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("label", { ...props, children: children ? children : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: styleMapping[labelType], children: name }) });
149
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("label", { ...props, className: (0, import_clsx.default)(styleMapping[labelType], className), children: children ? children : name });
133
150
  };
134
151
 
135
- // src/components/user-input/Input.tsx
152
+ // src/components/user-action/Input.tsx
136
153
  var import_jsx_runtime3 = require("react/jsx-runtime");
137
- var ControlledInput = ({
154
+ var Input = ({
138
155
  id,
139
156
  type = "text",
140
157
  value,
141
158
  label,
142
159
  onChange = noop,
143
- onChangeEvent = noop,
144
- className = "",
160
+ onChangeText = noop,
145
161
  onEditCompleted,
162
+ className = "",
146
163
  expanded = true,
164
+ autoFocus,
147
165
  onBlur,
148
166
  containerClassName,
149
167
  ...restProps
@@ -154,12 +172,12 @@ var ControlledInput = ({
154
172
  } = useSaveDelay(() => void 0, 3e3);
155
173
  const ref = (0, import_react4.useRef)(null);
156
174
  (0, import_react4.useEffect)(() => {
157
- if (restProps.autoFocus) {
175
+ if (autoFocus) {
158
176
  ref.current?.focus();
159
177
  }
160
- }, [restProps.autoFocus]);
161
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx.default)({ "w-full": expanded }, containerClassName), children: [
162
- label && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Label, { ...label, htmlFor: id, className: (0, import_clsx.default)("mb-1", label.className) }),
178
+ }, [autoFocus]);
179
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx2.default)({ "w-full": expanded }, containerClassName), children: [
180
+ label && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Label, { ...label, htmlFor: id, className: (0, import_clsx2.default)("mb-1", label.className) }),
163
181
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
164
182
  "input",
165
183
  {
@@ -167,13 +185,13 @@ var ControlledInput = ({
167
185
  value,
168
186
  id,
169
187
  type,
170
- className: (0, import_clsx.default)("block bg-surface text-on-surface px-3 py-2 rounded-md w-full border-2 border-gray-200 hover:border-primary focus:outline-none focus:border-primary focus:ring-primary", className),
188
+ className,
171
189
  onBlur: (event) => {
172
190
  if (onBlur) {
173
191
  onBlur(event);
174
192
  }
175
193
  if (onEditCompleted) {
176
- onEditCompleted(event.target.value, event);
194
+ onEditCompleted(event.target.value);
177
195
  clearUpdateTimer();
178
196
  }
179
197
  },
@@ -181,12 +199,12 @@ var ControlledInput = ({
181
199
  const value2 = e.target.value;
182
200
  if (onEditCompleted) {
183
201
  restartTimer(() => {
184
- onEditCompleted(value2, e);
202
+ onEditCompleted(value2);
185
203
  clearUpdateTimer();
186
204
  });
187
205
  }
188
- onChange(value2, e);
189
- onChangeEvent(e);
206
+ onChange(e);
207
+ onChangeText(value2);
190
208
  },
191
209
  ...restProps
192
210
  }
@@ -210,8 +228,7 @@ var FormInput = (0, import_react4.forwardRef)(function FormInput2({
210
228
  ref,
211
229
  id,
212
230
  ...restProps,
213
- className: (0, import_clsx.default)(
214
- "block bg-surface text-on-surface px-3 py-2 rounded-md w-full border-2 border-gray-200 hover:border-primary focus:outline-none focus:border-primary focus:ring-primary",
231
+ className: (0, import_clsx2.default)(
215
232
  {
216
233
  "focus:border-primary focus:ring-primary": !errorText,
217
234
  "focus:border-negative focus:ring-negative text-negative": !!errorText
@@ -220,17 +237,17 @@ var FormInput = (0, import_react4.forwardRef)(function FormInput2({
220
237
  )
221
238
  }
222
239
  );
223
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx.default)("flex flex-col gap-y-1", containerClassName), children: [
224
- labelText && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { htmlFor: id, className: (0, import_clsx.default)("textstyle-label-md", labelClassName), children: [
240
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx2.default)("flex flex-col gap-y-1", containerClassName), children: [
241
+ labelText && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { htmlFor: id, className: (0, import_clsx2.default)("textstyle-label-md", labelClassName), children: [
225
242
  labelText,
226
243
  required && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-primary font-bold", children: "*" })
227
244
  ] }),
228
245
  input,
229
- errorText && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("label", { htmlFor: id, className: (0, import_clsx.default)("text-negative", errorClassName), children: errorText })
246
+ errorText && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("label", { htmlFor: id, className: (0, import_clsx2.default)("text-negative", errorClassName), children: errorText })
230
247
  ] });
231
248
  });
232
249
 
233
- // src/components/SearchableList.tsx
250
+ // src/components/layout-and-navigation/SearchableList.tsx
234
251
  var import_jsx_runtime4 = require("react/jsx-runtime");
235
252
  var defaultSearchableListTranslation = {
236
253
  en: {
@@ -254,9 +271,9 @@ var SearchableList = ({
254
271
  const [search, setSearch] = (0, import_react5.useState)(initialSearch);
255
272
  (0, import_react5.useEffect)(() => setSearch(initialSearch), [initialSearch]);
256
273
  const filteredEntries = (0, import_react5.useMemo)(() => MultiSearchWithMapping(search, list, searchMapping), [search, list, searchMapping]);
257
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: (0, import_clsx2.default)("col gap-y-2", className), children: [
274
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: (0, import_clsx3.default)("col gap-y-2", className), children: [
258
275
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "row justify-between gap-x-2 items-center", children: [
259
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlledInput, { value: search, onChange: setSearch, placeholder: translation.search }) }),
276
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Input, { value: search, onChangeText: setSearch, placeholder: translation.search }) }),
260
277
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react.Search, { size: 20 })
261
278
  ] }),
262
279
  filteredEntries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "col gap-y-1", children: filteredEntries.map(itemMapper) }),
@@ -267,4 +284,4 @@ var SearchableList = ({
267
284
  0 && (module.exports = {
268
285
  SearchableList
269
286
  });
270
- //# sourceMappingURL=SearchableList.js.map
287
+ //# sourceMappingURL=SearchableList.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layout-and-navigation/SearchableList.tsx","../../../src/localization/LanguageProvider.tsx","../../../src/hooks/useLocalStorage.ts","../../../src/localization/util.ts","../../../src/localization/useTranslation.ts","../../../src/util/simpleSearch.ts","../../../src/components/user-action/Input.tsx","../../../src/hooks/useSaveDelay.ts","../../../src/util/noop.ts","../../../src/components/user-action/Label.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Search } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Language } from '@/localization/util'\nimport type { PropsForTranslation } from '@/localization/useTranslation'\nimport { useTranslation } from '@/localization/useTranslation'\nimport { MultiSearchWithMapping } from '@/util/simpleSearch'\nimport { Input } from '../user-action/Input'\n\ntype SearchableListTranslation = {\n search: string,\n nothingFound: string,\n}\n\nconst defaultSearchableListTranslation: Record<Language, SearchableListTranslation> = {\n en: {\n search: 'Search',\n nothingFound: 'Nothing found'\n },\n de: {\n search: 'Suche',\n nothingFound: 'Nichts gefunden'\n }\n}\n\nexport type SearchableListProps<T> = {\n list: T[],\n initialSearch?: string,\n searchMapping: (value: T) => string[],\n itemMapper: (value: T) => ReactNode,\n className?: string,\n}\n\n/**\n * A component for searching a list\n */\nexport const SearchableList = <T, >({\n overwriteTranslation,\n list,\n initialSearch = '',\n searchMapping,\n itemMapper,\n className\n }: PropsForTranslation<SearchableListTranslation, SearchableListProps<T>>) => {\n const translation = useTranslation(defaultSearchableListTranslation, overwriteTranslation)\n const [search, setSearch] = useState<string>(initialSearch)\n\n useEffect(() => setSearch(initialSearch), [initialSearch])\n\n const filteredEntries = useMemo(() => MultiSearchWithMapping(search, list, searchMapping), [search, list, searchMapping])\n\n return (\n <div className={clsx('col gap-y-2', className)}>\n <div className=\"row justify-between gap-x-2 items-center\">\n <div className=\"flex-1\">\n <Input value={search} onChangeText={setSearch} placeholder={translation.search}/>\n </div>\n <Search size={20}/>\n </div>\n {filteredEntries.length > 0 && (\n <div className=\"col gap-y-1\">\n {filteredEntries.map(itemMapper)}\n </div>\n )}\n {!filteredEntries.length && <div className=\"row justify-center\">{translation.nothingFound}</div>}\n </div>\n )\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '@/hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\nexport type Translation<T> = Record<Language, T>\n\ntype OverwriteTranslationType<Translation extends Record<string, unknown>> = {\n language?: Language,\n translation?: Partial<Record<Language, Partial<Translation>>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends Record<string, unknown>,\n Props = Record<string, never>\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n};\n\nexport const useTranslation = <Translation extends Record<string, unknown>>(\n defaults: Record<Language, Translation>,\n translationOverwrite: OverwriteTranslationType<Translation> = {}\n): Translation => {\n const { language: languageProp, translation: overwrite } = translationOverwrite\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n let defaultValues: Translation = defaults[usedLanguage]\n if (overwrite && overwrite[usedLanguage]) {\n defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }\n }\n return defaultValues\n}\n","/**\n * Finds all values matching the search values by first mapping the values to a string array and then checking each entry for matches.\n * Returns the list of all matches.\n *\n * @param search The list of search strings e.g. `[name, type]`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to the string properties they fulfil\n *\n * @return The list of objects that match all search strings\n */\nexport const MultiSubjectSearchWithMapping = <T>(search: string[], objects: T[], mapping: (value: T) => (string | undefined)[]) => {\n return objects.filter(object => {\n const mappedSearchKeywords = mapping(object).map(value => value ? value.toLowerCase().trim() : undefined)\n return search.every(searchValue => !!mappedSearchKeywords.find(value => !!value && value.includes(searchValue.toLowerCase().trim())))\n })\n}\n\n/**\n * Finds all values matching the search value by first mapping the values to a string array and then checking each entry for matches.\n * Returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to the string properties they fulfil\n *\n * @return The list of objects that match the search string\n */\nexport const MultiSearchWithMapping = <T>(search: string, objects: T[], mapping: (value: T) => string[]) => {\n return objects.filter(object => {\n const mappedSearchKeywords = mapping(object).map(value => value.toLowerCase().trim())\n return !!mappedSearchKeywords.find(value => value.includes(search.toLowerCase().trim()))\n })\n}\n\n/**\n * Finds all values matching the search value by first mapping the values to a string and returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @param mapping The mapping of objects to a string that is compared to the search\n *\n * @return The list of objects that match the search string\n */\nexport const SimpleSearchWithMapping = <T>(search: string, objects: T[], mapping: (value: T) => string) => {\n return MultiSearchWithMapping(search, objects, value => [mapping(value)])\n}\n\n/**\n * Finds all values matching the search value and returns the list of all matches.\n *\n * @param search The search string e.g `name`\n *\n * @param objects The list of objects to be searched in\n *\n * @return The list of objects that match the search string\n */\nexport const SimpleSearch = (search: string, objects: string[]) => {\n return SimpleSearchWithMapping(search, objects, value => value)\n}\n","import React, { forwardRef, type InputHTMLAttributes, useEffect, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { useSaveDelay } from '@/hooks/useSaveDelay'\nimport { noop } from '@/util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type InputProps = {\n /**\n * used for the label's `for` attribute\n */\n label?: Omit<LabelProps, 'id'>,\n /**\n * Callback for when the input's value changes\n * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n * That could be enforced through a union type but that seems a bit overkill\n * @default noop\n */\n onChangeText?: (text: string) => void,\n className?: string,\n onEditCompleted?: (text: string) => void,\n expanded?: boolean,\n containerClassName?: string,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'label'>\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nconst Input = ({\n id,\n type = 'text',\n value,\n label,\n onChange = noop,\n onChangeText = noop,\n onEditCompleted,\n className = '',\n expanded = true,\n autoFocus,\n onBlur,\n containerClassName,\n ...restProps\n }: InputProps) => {\n const {\n restartTimer,\n clearUpdateTimer\n } = useSaveDelay(() => undefined, 3000)\n const ref = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if(autoFocus) {\n ref.current?.focus()\n }\n }, [autoFocus])\n\n return (\n <div className={clsx({ 'w-full': expanded }, containerClassName)}>\n {label && <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)}/>}\n <input\n ref={ref}\n value={value}\n id={id}\n type={type}\n className={className}\n onBlur={event => {\n if (onBlur) {\n onBlur(event)\n }\n if (onEditCompleted) {\n onEditCompleted(event.target.value)\n clearUpdateTimer()\n }\n }}\n onChange={e => {\n const value = e.target.value\n if (onEditCompleted) {\n restartTimer(() => {\n onEditCompleted(value)\n clearUpdateTimer()\n })\n }\n onChange(e)\n onChangeText(value)\n }}\n {...restProps}\n />\n </div>\n )\n}\n\ntype InputUncontrolledProps = Omit<InputProps, 'value'> & {\n /**\n * @default ''\n */\n defaultValue?: string,\n}\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed by the component itself\n */\nconst InputUncontrolled = ({\n defaultValue = '',\n onChangeText = noop,\n ...props\n }: InputUncontrolledProps) => {\n const [value, setValue] = useState(defaultValue)\n\n return (\n <Input\n {...props}\n value={value}\n onChangeText={text => {\n setValue(text)\n onChangeText(text)\n }}\n />\n )\n}\n\nexport type FormInputProps = InputHTMLAttributes<HTMLInputElement> & {\n id: string,\n labelText?: string,\n errorText?: string,\n labelClassName?: string,\n errorClassName?: string,\n containerClassName?: string,\n}\n\nconst FormInput = forwardRef<HTMLInputElement, FormInputProps>(function FormInput({\n id,\n labelText,\n errorText,\n className,\n labelClassName,\n errorClassName,\n containerClassName,\n required,\n ...restProps\n }, ref) {\n const input = (\n <input\n ref={ref}\n id={id}\n {...restProps}\n className={clsx(\n {\n 'focus:border-primary focus:ring-primary': !errorText,\n 'focus:border-negative focus:ring-negative text-negative': !!errorText,\n },\n className\n )}\n />\n )\n\n return (\n <div className={clsx('flex flex-col gap-y-1', containerClassName)}>\n {labelText && (\n <label htmlFor={id} className={clsx('textstyle-label-md', labelClassName)}>\n {labelText}\n {required && <span className=\"text-primary font-bold\">*</span>}\n </label>\n )}\n {input}\n {errorText && <label htmlFor={id} className={clsx('text-negative', errorClassName)}>{errorText}</label>}\n </div>\n )\n})\n\nexport {\n InputUncontrolled,\n Input,\n FormInput\n}\n","import { useEffect, useState } from 'react'\n\nexport function useSaveDelay(setNotificationStatus: (isShowing: boolean) => void, delay: number) {\n const [updateTimer, setUpdateTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n const [notificationTimer, setNotificationTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n\n const restartTimer = (onSave: () => void) => {\n clearTimeout(updateTimer)\n setUpdateTimer(setTimeout(() => {\n onSave()\n setNotificationStatus(true)\n // Show Saved Notification for fade animation duration\n clearTimeout(notificationTimer)\n setNotificationTimer(setTimeout(() => {\n setNotificationStatus(false)\n clearTimeout(notificationTimer)\n }, delay))\n clearTimeout(updateTimer)\n }, delay))\n }\n\n const clearUpdateTimer = (hasSaved = true) => {\n clearTimeout(updateTimer)\n if (hasSaved) {\n setNotificationStatus(true)\n clearTimeout(notificationTimer)\n setNotificationTimer(setTimeout(() => {\n setNotificationStatus(false)\n clearTimeout(notificationTimer)\n }, delay))\n } else {\n setNotificationStatus(false)\n }\n }\n\n useEffect(() => {\n return () => {\n clearTimeout(updateTimer)\n clearTimeout(notificationTimer)\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return { restartTimer, clearUpdateTimer }\n}","export const noop = () => undefined\n","import type { LabelHTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type LabelType = 'labelSmall' | 'labelMedium' | 'labelBig'\n\nconst styleMapping: Record<LabelType, string> = {\n labelSmall: 'textstyle-label-sm',\n labelMedium: 'textstyle-label-md',\n labelBig: 'textstyle-label-lg',\n}\n\nexport type LabelProps = {\n /** The text for the label */\n name?: string,\n /** The styling for the label */\n labelType?: LabelType,\n} & LabelHTMLAttributes<HTMLLabelElement>\n\n/**\n * A Label component\n */\nexport const Label = ({\n children,\n name,\n labelType = 'labelSmall',\n className,\n ...props\n }: LabelProps) => {\n return (\n <label {...props} className={clsx(styleMapping[labelType], className)}>\n {children ? children : name}\n </label>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAAA,gBAA6C;AAC7C,0BAAuB;AACvB,IAAAC,eAAiB;;;ACFjB,IAAAC,gBAA+D;;;ACA/D,mBAAiD;;;ACEjD,IAAM,YAAY,CAAC,MAAM,IAAI;AAU7B,IAAM,sBAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AACN;AAKA,IAAM,mBAA6B;AAK5B,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;;;AFoCI;AAvDG,IAAM,sBAAkB,6BAAoC;AAAA,EACjE,UAAU,aAAa;AAAA,EACvB,aAAa,CAAC,MAAM;AACtB,CAAC;AAEM,IAAM,cAAc,UAAM,0BAAW,eAAe;;;AGcpD,IAAM,iBAAiB,CAC5B,UACA,uBAA8D,CAAC,MAC/C;AAChB,QAAM,EAAE,UAAU,cAAc,aAAa,UAAU,IAAI;AAC3D,QAAM,EAAE,UAAU,iBAAiB,IAAI,YAAY;AACnD,QAAM,eAAe,gBAAgB;AACrC,MAAI,gBAA6B,SAAS,YAAY;AACtD,MAAI,aAAa,UAAU,YAAY,GAAG;AACxC,oBAAgB,EAAE,GAAG,eAAe,GAAG,UAAU,YAAY,EAAE;AAAA,EACjE;AACA,SAAO;AACT;;;ACXO,IAAM,yBAAyB,CAAI,QAAgB,SAAc,YAAoC;AAC1G,SAAO,QAAQ,OAAO,YAAU;AAC9B,UAAM,uBAAuB,QAAQ,MAAM,EAAE,IAAI,WAAS,MAAM,YAAY,EAAE,KAAK,CAAC;AACpF,WAAO,CAAC,CAAC,qBAAqB,KAAK,WAAS,MAAM,SAAS,OAAO,YAAY,EAAE,KAAK,CAAC,CAAC;AAAA,EACzF,CAAC;AACH;;;ACpCA,IAAAC,gBAAyF;AACzF,IAAAC,eAAiB;;;ACDjB,IAAAC,gBAAoC;AAE7B,SAAS,aAAa,uBAAqD,OAAe;AAC/F,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAqC,MAAS;AACpF,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAqC,MAAS;AAEhG,QAAM,eAAe,CAAC,WAAuB;AAC3C,iBAAa,WAAW;AACxB,mBAAe,WAAW,MAAM;AAC9B,aAAO;AACP,4BAAsB,IAAI;AAE1B,mBAAa,iBAAiB;AAC9B,2BAAqB,WAAW,MAAM;AACpC,8BAAsB,KAAK;AAC3B,qBAAa,iBAAiB;AAAA,MAChC,GAAG,KAAK,CAAC;AACT,mBAAa,WAAW;AAAA,IAC1B,GAAG,KAAK,CAAC;AAAA,EACX;AAEA,QAAM,mBAAmB,CAAC,WAAW,SAAS;AAC5C,iBAAa,WAAW;AACxB,QAAI,UAAU;AACZ,4BAAsB,IAAI;AAC1B,mBAAa,iBAAiB;AAC9B,2BAAqB,WAAW,MAAM;AACpC,8BAAsB,KAAK;AAC3B,qBAAa,iBAAiB;AAAA,MAChC,GAAG,KAAK,CAAC;AAAA,IACX,OAAO;AACL,4BAAsB,KAAK;AAAA,IAC7B;AAAA,EACF;AAEA,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,mBAAa,WAAW;AACxB,mBAAa,iBAAiB;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,cAAc,iBAAiB;AAC1C;;;AC3CO,IAAM,OAAO,MAAM;;;ACC1B,kBAAiB;AA4Bb,IAAAC,sBAAA;AAxBJ,IAAM,eAA0C;AAAA,EAC9C,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,UAAU;AACZ;AAYO,IAAM,QAAQ,CAAC;AAAA,EACE;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,MAAkB;AACtC,SACE,6CAAC,WAAO,GAAG,OAAO,eAAW,YAAAC,SAAK,aAAa,SAAS,GAAG,SAAS,GACjE,qBAAW,WAAW,MACzB;AAEJ;;;AHyBI,IAAAC,sBAAA;AA5BJ,IAAM,QAAQ,CAAC;AAAA,EACE;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,eAAe;AAAA,EACf;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAkB;AAC/B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,aAAa,MAAM,QAAW,GAAI;AACtC,QAAM,UAAM,sBAAyB,IAAI;AAEzC,+BAAU,MAAM;AACd,QAAG,WAAW;AACZ,UAAI,SAAS,MAAM;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,SACE,8CAAC,SAAI,eAAW,aAAAC,SAAK,EAAE,UAAU,SAAS,GAAG,kBAAkB,GAC5D;AAAA,aAAS,6CAAC,SAAO,GAAG,OAAO,SAAS,IAAI,eAAW,aAAAA,SAAK,QAAQ,MAAM,SAAS,GAAE;AAAA,IAClF;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,WAAS;AACf,cAAI,QAAQ;AACV,mBAAO,KAAK;AAAA,UACd;AACA,cAAI,iBAAiB;AACnB,4BAAgB,MAAM,OAAO,KAAK;AAClC,6BAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA,UAAU,OAAK;AACb,gBAAMC,SAAQ,EAAE,OAAO;AACvB,cAAI,iBAAiB;AACnB,yBAAa,MAAM;AACjB,8BAAgBA,MAAK;AACrB,+BAAiB;AAAA,YACnB,CAAC;AAAA,UACH;AACA,mBAAS,CAAC;AACV,uBAAaA,MAAK;AAAA,QACpB;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,KACF;AAEJ;AA0CA,IAAM,gBAAY,0BAA6C,SAASC,WAAU;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG,KAAK;AACxF,QAAM,QACJ;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MACJ,eAAW,aAAAC;AAAA,QACT;AAAA,UACE,2CAA2C,CAAC;AAAA,UAC5C,2DAA2D,CAAC,CAAC;AAAA,QAC/D;AAAA,QACA;AAAA,MACF;AAAA;AAAA,EACF;AAGF,SACE,8CAAC,SAAI,eAAW,aAAAA,SAAK,yBAAyB,kBAAkB,GAC7D;AAAA,iBACC,8CAAC,WAAM,SAAS,IAAI,eAAW,aAAAA,SAAK,sBAAsB,cAAc,GACrE;AAAA;AAAA,MACA,YAAY,6CAAC,UAAK,WAAU,0BAAyB,eAAC;AAAA,OACzD;AAAA,IAED;AAAA,IACA,aAAa,6CAAC,WAAM,SAAS,IAAI,eAAW,aAAAA,SAAK,iBAAiB,cAAc,GAAI,qBAAU;AAAA,KACjG;AAEJ,CAAC;;;ANpHK,IAAAC,sBAAA;AAvCN,IAAM,mCAAgF;AAAA,EACpF,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AACF;AAaO,IAAM,iBAAiB,CAAM;AAAA,EACE;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AACF,MAA8E;AAChH,QAAM,cAAc,eAAe,kCAAkC,oBAAoB;AACzF,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAiB,aAAa;AAE1D,+BAAU,MAAM,UAAU,aAAa,GAAG,CAAC,aAAa,CAAC;AAEzD,QAAM,sBAAkB,uBAAQ,MAAM,uBAAuB,QAAQ,MAAM,aAAa,GAAG,CAAC,QAAQ,MAAM,aAAa,CAAC;AAExH,SACE,8CAAC,SAAI,eAAW,aAAAC,SAAK,eAAe,SAAS,GAC3C;AAAA,kDAAC,SAAI,WAAU,4CACb;AAAA,mDAAC,SAAI,WAAU,UACb,uDAAC,SAAM,OAAO,QAAQ,cAAc,WAAW,aAAa,YAAY,QAAO,GACjF;AAAA,MACA,6CAAC,8BAAO,MAAM,IAAG;AAAA,OACnB;AAAA,IACC,gBAAgB,SAAS,KACxB,6CAAC,SAAI,WAAU,eACZ,0BAAgB,IAAI,UAAU,GACjC;AAAA,IAED,CAAC,gBAAgB,UAAU,6CAAC,SAAI,WAAU,sBAAsB,sBAAY,cAAa;AAAA,KAC5F;AAEJ;","names":["import_react","import_clsx","import_react","import_react","import_clsx","import_react","import_jsx_runtime","clsx","import_jsx_runtime","clsx","value","FormInput","clsx","import_jsx_runtime","clsx"]}
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { PropsForTranslation } from '../hooks/useTranslation.mjs';
4
- import '../hooks/useLanguage.mjs';
3
+ import { PropsForTranslation } from '../../localization/useTranslation.cjs';
4
+ import '../../localization/util.cjs';
5
5
 
6
6
  type SearchableListTranslation = {
7
7
  search: string;
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { PropsForTranslation } from '../hooks/useTranslation.js';
4
- import '../hooks/useLanguage.js';
3
+ import { PropsForTranslation } from '../../localization/useTranslation.js';
4
+ import '../../localization/util.js';
5
5
 
6
6
  type SearchableListTranslation = {
7
7
  search: string;