@variocube/app-ui 1.14.0

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 (644) hide show
  1. package/README.md +65 -0
  2. package/esm/AppShell/AppShell.d.ts +12 -0
  3. package/esm/AppShell/AppShell.js +92 -0
  4. package/esm/AppShell/AppShell.js.map +1 -0
  5. package/esm/AppShell/index.d.ts +1 -0
  6. package/esm/AppShell/index.js +2 -0
  7. package/esm/AppShell/index.js.map +1 -0
  8. package/esm/ErrorAlert.d.ts +12 -0
  9. package/esm/ErrorAlert.js +61 -0
  10. package/esm/ErrorAlert.js.map +1 -0
  11. package/esm/Input/ActionsMenu.d.ts +9 -0
  12. package/esm/Input/ActionsMenu.js +29 -0
  13. package/esm/Input/ActionsMenu.js.map +1 -0
  14. package/esm/Input/Checkbox.d.ts +9 -0
  15. package/esm/Input/Checkbox.js +23 -0
  16. package/esm/Input/Checkbox.js.map +1 -0
  17. package/esm/Input/EmailSenderField.d.ts +8 -0
  18. package/esm/Input/EmailSenderField.js +71 -0
  19. package/esm/Input/EmailSenderField.js.map +1 -0
  20. package/esm/Input/NumberField.d.ts +10 -0
  21. package/esm/Input/NumberField.js +94 -0
  22. package/esm/Input/NumberField.js.map +1 -0
  23. package/esm/Input/RadioGroup.d.ts +12 -0
  24. package/esm/Input/RadioGroup.js +20 -0
  25. package/esm/Input/RadioGroup.js.map +1 -0
  26. package/esm/Input/Select.d.ts +11 -0
  27. package/esm/Input/Select.js +19 -0
  28. package/esm/Input/Select.js.map +1 -0
  29. package/esm/Input/Selector.d.ts +10 -0
  30. package/esm/Input/Selector.js +19 -0
  31. package/esm/Input/Selector.js.map +1 -0
  32. package/esm/Input/Switch.d.ts +9 -0
  33. package/esm/Input/Switch.js +23 -0
  34. package/esm/Input/Switch.js.map +1 -0
  35. package/esm/Input/TextField.d.ts +7 -0
  36. package/esm/Input/TextField.js +58 -0
  37. package/esm/Input/TextField.js.map +1 -0
  38. package/esm/Input/UrlUploadField.d.ts +9 -0
  39. package/esm/Input/UrlUploadField.js +43 -0
  40. package/esm/Input/UrlUploadField.js.map +1 -0
  41. package/esm/Input/index.d.ts +9 -0
  42. package/esm/Input/index.js +10 -0
  43. package/esm/Input/index.js.map +1 -0
  44. package/esm/LanguageSwitcher/LanguageSwitcher.d.ts +14 -0
  45. package/esm/LanguageSwitcher/LanguageSwitcher.js +20 -0
  46. package/esm/LanguageSwitcher/LanguageSwitcher.js.map +1 -0
  47. package/esm/LanguageSwitcher/index.d.ts +1 -0
  48. package/esm/LanguageSwitcher/index.js +2 -0
  49. package/esm/LanguageSwitcher/index.js.map +1 -0
  50. package/esm/Paging/Paging.d.ts +40 -0
  51. package/esm/Paging/Paging.js +43 -0
  52. package/esm/Paging/Paging.js.map +1 -0
  53. package/esm/Paging/index.d.ts +1 -0
  54. package/esm/Paging/index.js +2 -0
  55. package/esm/Paging/index.js.map +1 -0
  56. package/esm/VCThemeProvider/JetbrainsMonoFont.d.ts +5 -0
  57. package/esm/VCThemeProvider/JetbrainsMonoFont.js +52 -0
  58. package/esm/VCThemeProvider/JetbrainsMonoFont.js.map +1 -0
  59. package/esm/VCThemeProvider/RobotoFont.d.ts +7 -0
  60. package/esm/VCThemeProvider/RobotoFont.js +49 -0
  61. package/esm/VCThemeProvider/RobotoFont.js.map +1 -0
  62. package/esm/VCThemeProvider/ThemeModeSwitcher.d.ts +2 -0
  63. package/esm/VCThemeProvider/ThemeModeSwitcher.js +14 -0
  64. package/esm/VCThemeProvider/ThemeModeSwitcher.js.map +1 -0
  65. package/esm/VCThemeProvider/VCThemeProvider.d.ts +25 -0
  66. package/esm/VCThemeProvider/VCThemeProvider.js +173 -0
  67. package/esm/VCThemeProvider/VCThemeProvider.js.map +1 -0
  68. package/esm/VCThemeProvider/code-colors.d.ts +108 -0
  69. package/esm/VCThemeProvider/code-colors.js +26 -0
  70. package/esm/VCThemeProvider/code-colors.js.map +1 -0
  71. package/esm/VCThemeProvider/index.d.ts +5 -0
  72. package/esm/VCThemeProvider/index.js +6 -0
  73. package/esm/VCThemeProvider/index.js.map +1 -0
  74. package/esm/audit/AuditChanges.d.ts +9 -0
  75. package/esm/audit/AuditChanges.js +43 -0
  76. package/esm/audit/AuditChanges.js.map +1 -0
  77. package/esm/audit/AuditTimeline.d.ts +6 -0
  78. package/esm/audit/AuditTimeline.js +13 -0
  79. package/esm/audit/AuditTimeline.js.map +1 -0
  80. package/esm/audit/AuditTimelineItem.d.ts +10 -0
  81. package/esm/audit/AuditTimelineItem.js +27 -0
  82. package/esm/audit/AuditTimelineItem.js.map +1 -0
  83. package/esm/audit/index.d.ts +4 -0
  84. package/esm/audit/index.js +5 -0
  85. package/esm/audit/index.js.map +1 -0
  86. package/esm/audit/types.d.ts +42 -0
  87. package/esm/audit/types.js +2 -0
  88. package/esm/audit/types.js.map +1 -0
  89. package/esm/breadcrumbs.d.ts +6 -0
  90. package/esm/breadcrumbs.js +13 -0
  91. package/esm/breadcrumbs.js.map +1 -0
  92. package/esm/code/Code.d.ts +10 -0
  93. package/esm/code/Code.js +19 -0
  94. package/esm/code/Code.js.map +1 -0
  95. package/esm/code/CodeBlock.d.ts +4 -0
  96. package/esm/code/CodeBlock.js +6 -0
  97. package/esm/code/CodeBlock.js.map +1 -0
  98. package/esm/code/Json.d.ts +4 -0
  99. package/esm/code/Json.js +60 -0
  100. package/esm/code/Json.js.map +1 -0
  101. package/esm/code/index.d.ts +3 -0
  102. package/esm/code/index.js +4 -0
  103. package/esm/code/index.js.map +1 -0
  104. package/esm/confirm/ConfirmButton.d.ts +16 -0
  105. package/esm/confirm/ConfirmButton.js +29 -0
  106. package/esm/confirm/ConfirmButton.js.map +1 -0
  107. package/esm/confirm/ConfirmDialog.d.ts +16 -0
  108. package/esm/confirm/ConfirmDialog.js +35 -0
  109. package/esm/confirm/ConfirmDialog.js.map +1 -0
  110. package/esm/confirm/ConfirmIconButton.d.ts +14 -0
  111. package/esm/confirm/ConfirmIconButton.js +29 -0
  112. package/esm/confirm/ConfirmIconButton.js.map +1 -0
  113. package/esm/confirm/ConfirmMenuItem.d.ts +15 -0
  114. package/esm/confirm/ConfirmMenuItem.js +31 -0
  115. package/esm/confirm/ConfirmMenuItem.js.map +1 -0
  116. package/esm/confirm/index.d.ts +4 -0
  117. package/esm/confirm/index.js +5 -0
  118. package/esm/confirm/index.js.map +1 -0
  119. package/esm/container/ContainerLayout.d.ts +8 -0
  120. package/esm/container/ContainerLayout.js +20 -0
  121. package/esm/container/ContainerLayout.js.map +1 -0
  122. package/esm/container/ContainerSettingsContext.d.ts +12 -0
  123. package/esm/container/ContainerSettingsContext.js +46 -0
  124. package/esm/container/ContainerSettingsContext.js.map +1 -0
  125. package/esm/container/ContainerWidthControl.d.ts +6 -0
  126. package/esm/container/ContainerWidthControl.js +12 -0
  127. package/esm/container/ContainerWidthControl.js.map +1 -0
  128. package/esm/container/index.d.ts +3 -0
  129. package/esm/container/index.js +4 -0
  130. package/esm/container/index.js.map +1 -0
  131. package/esm/content-table/ContentTable.d.ts +25 -0
  132. package/esm/content-table/ContentTable.js +87 -0
  133. package/esm/content-table/ContentTable.js.map +1 -0
  134. package/esm/content-table/UndrawEmpty.d.ts +2 -0
  135. package/esm/content-table/UndrawEmpty.js +71 -0
  136. package/esm/content-table/UndrawEmpty.js.map +1 -0
  137. package/esm/content-table/index.d.ts +1 -0
  138. package/esm/content-table/index.js +2 -0
  139. package/esm/content-table/index.js.map +1 -0
  140. package/esm/country/countries.d.ts +34 -0
  141. package/esm/country/countries.js +266 -0
  142. package/esm/country/countries.js.map +1 -0
  143. package/esm/country/country-select.d.ts +8 -0
  144. package/esm/country/country-select.js +18 -0
  145. package/esm/country/country-select.js.map +1 -0
  146. package/esm/country/index.d.ts +5 -0
  147. package/esm/country/index.js +6 -0
  148. package/esm/country/index.js.map +1 -0
  149. package/esm/country/locale-select.d.ts +9 -0
  150. package/esm/country/locale-select.js +15 -0
  151. package/esm/country/locale-select.js.map +1 -0
  152. package/esm/country/locales.d.ts +10 -0
  153. package/esm/country/locales.js +190 -0
  154. package/esm/country/locales.js.map +1 -0
  155. package/esm/country/phone-prefix-select.d.ts +9 -0
  156. package/esm/country/phone-prefix-select.js +18 -0
  157. package/esm/country/phone-prefix-select.js.map +1 -0
  158. package/esm/cube/BoxFeatures.d.ts +11 -0
  159. package/esm/cube/BoxFeatures.js +40 -0
  160. package/esm/cube/BoxFeatures.js.map +1 -0
  161. package/esm/cube/BoxMaintenanceChip.d.ts +9 -0
  162. package/esm/cube/BoxMaintenanceChip.js +15 -0
  163. package/esm/cube/BoxMaintenanceChip.js.map +1 -0
  164. package/esm/cube/BoxNumber.d.ts +6 -0
  165. package/esm/cube/BoxNumber.js +6 -0
  166. package/esm/cube/BoxNumber.js.map +1 -0
  167. package/esm/cube/BoxType.d.ts +7 -0
  168. package/esm/cube/BoxType.js +21 -0
  169. package/esm/cube/BoxType.js.map +1 -0
  170. package/esm/cube/CubeConnectedChip.d.ts +9 -0
  171. package/esm/cube/CubeConnectedChip.js +22 -0
  172. package/esm/cube/CubeConnectedChip.js.map +1 -0
  173. package/esm/cube/LockStatusChip.d.ts +11 -0
  174. package/esm/cube/LockStatusChip.js +40 -0
  175. package/esm/cube/LockStatusChip.js.map +1 -0
  176. package/esm/cube/UtilizationBar.d.ts +11 -0
  177. package/esm/cube/UtilizationBar.js +38 -0
  178. package/esm/cube/UtilizationBar.js.map +1 -0
  179. package/esm/cube/accessibility.d.ts +48 -0
  180. package/esm/cube/accessibility.js +242 -0
  181. package/esm/cube/accessibility.js.map +1 -0
  182. package/esm/cube/index.d.ts +8 -0
  183. package/esm/cube/index.js +9 -0
  184. package/esm/cube/index.js.map +1 -0
  185. package/esm/data-table/DataTable.d.ts +63 -0
  186. package/esm/data-table/DataTable.js +124 -0
  187. package/esm/data-table/DataTable.js.map +1 -0
  188. package/esm/data-table/DataTableColumnSettings.d.ts +10 -0
  189. package/esm/data-table/DataTableColumnSettings.js +98 -0
  190. package/esm/data-table/DataTableColumnSettings.js.map +1 -0
  191. package/esm/data-table/DataTableHeader.d.ts +2 -0
  192. package/esm/data-table/DataTableHeader.js +6 -0
  193. package/esm/data-table/DataTableHeader.js.map +1 -0
  194. package/esm/data-table/DataTableToolbar.d.ts +2 -0
  195. package/esm/data-table/DataTableToolbar.js +6 -0
  196. package/esm/data-table/DataTableToolbar.js.map +1 -0
  197. package/esm/data-table/index.d.ts +8 -0
  198. package/esm/data-table/index.js +9 -0
  199. package/esm/data-table/index.js.map +1 -0
  200. package/esm/data-table/useDataTableColumnStorage.d.ts +5 -0
  201. package/esm/data-table/useDataTableColumnStorage.js +20 -0
  202. package/esm/data-table/useDataTableColumnStorage.js.map +1 -0
  203. package/esm/data-table/useDataTableStorage.d.ts +16 -0
  204. package/esm/data-table/useDataTableStorage.js +19 -0
  205. package/esm/data-table/useDataTableStorage.js.map +1 -0
  206. package/esm/data-table/useSpringPage.d.ts +6 -0
  207. package/esm/data-table/useSpringPage.js +18 -0
  208. package/esm/data-table/useSpringPage.js.map +1 -0
  209. package/esm/data-table/useSpringPageable.d.ts +9 -0
  210. package/esm/data-table/useSpringPageable.js +10 -0
  211. package/esm/data-table/useSpringPageable.js.map +1 -0
  212. package/esm/date-pickers/PlainAdapterCommon.d.ts +31 -0
  213. package/esm/date-pickers/PlainAdapterCommon.js +97 -0
  214. package/esm/date-pickers/PlainAdapterCommon.js.map +1 -0
  215. package/esm/date-pickers/PlainDateAdapter.d.ts +30 -0
  216. package/esm/date-pickers/PlainDateAdapter.js +114 -0
  217. package/esm/date-pickers/PlainDateAdapter.js.map +1 -0
  218. package/esm/date-pickers/PlainDatePicker.d.ts +21 -0
  219. package/esm/date-pickers/PlainDatePicker.js +26 -0
  220. package/esm/date-pickers/PlainDatePicker.js.map +1 -0
  221. package/esm/date-pickers/PlainDatePicker.spec.d.ts +1 -0
  222. package/esm/date-pickers/PlainDatePicker.spec.js +15 -0
  223. package/esm/date-pickers/PlainDatePicker.spec.js.map +1 -0
  224. package/esm/date-pickers/PlainDateTimeAdapter.d.ts +30 -0
  225. package/esm/date-pickers/PlainDateTimeAdapter.js +114 -0
  226. package/esm/date-pickers/PlainDateTimeAdapter.js.map +1 -0
  227. package/esm/date-pickers/PlainDateTimePicker.d.ts +20 -0
  228. package/esm/date-pickers/PlainDateTimePicker.js +26 -0
  229. package/esm/date-pickers/PlainDateTimePicker.js.map +1 -0
  230. package/esm/date-pickers/PlainDateTimePicker.spec.d.ts +1 -0
  231. package/esm/date-pickers/PlainDateTimePicker.spec.js +15 -0
  232. package/esm/date-pickers/PlainDateTimePicker.spec.js.map +1 -0
  233. package/esm/date-pickers/PlainTimeAdapter.d.ts +58 -0
  234. package/esm/date-pickers/PlainTimeAdapter.js +194 -0
  235. package/esm/date-pickers/PlainTimeAdapter.js.map +1 -0
  236. package/esm/date-pickers/PlainTimePicker.d.ts +16 -0
  237. package/esm/date-pickers/PlainTimePicker.js +24 -0
  238. package/esm/date-pickers/PlainTimePicker.js.map +1 -0
  239. package/esm/date-pickers/PlainTimePicker.spec.d.ts +1 -0
  240. package/esm/date-pickers/PlainTimePicker.spec.js +15 -0
  241. package/esm/date-pickers/PlainTimePicker.spec.js.map +1 -0
  242. package/esm/date-pickers/TemporalAdapter.d.ts +18 -0
  243. package/esm/date-pickers/TemporalAdapter.js +109 -0
  244. package/esm/date-pickers/TemporalAdapter.js.map +1 -0
  245. package/esm/date-pickers/TimezoneSelect.d.ts +9 -0
  246. package/esm/date-pickers/TimezoneSelect.js +357 -0
  247. package/esm/date-pickers/TimezoneSelect.js.map +1 -0
  248. package/esm/date-pickers/getFormatString.d.ts +11 -0
  249. package/esm/date-pickers/getFormatString.js +26 -0
  250. package/esm/date-pickers/getFormatString.js.map +1 -0
  251. package/esm/date-pickers/index.d.ts +5 -0
  252. package/esm/date-pickers/index.js +6 -0
  253. package/esm/date-pickers/index.js.map +1 -0
  254. package/esm/date-pickers/parse.d.ts +4 -0
  255. package/esm/date-pickers/parse.js +66 -0
  256. package/esm/date-pickers/parse.js.map +1 -0
  257. package/esm/date-pickers/timeframe-picker.d.ts +46 -0
  258. package/esm/date-pickers/timeframe-picker.js +120 -0
  259. package/esm/date-pickers/timeframe-picker.js.map +1 -0
  260. package/esm/date-pickers/useLocale.d.ts +1 -0
  261. package/esm/date-pickers/useLocale.js +6 -0
  262. package/esm/date-pickers/useLocale.js.map +1 -0
  263. package/esm/date-pickers/useRenderInput.d.ts +4 -0
  264. package/esm/date-pickers/useRenderInput.js +8 -0
  265. package/esm/date-pickers/useRenderInput.js.map +1 -0
  266. package/esm/fetch.d.ts +51 -0
  267. package/esm/fetch.js +138 -0
  268. package/esm/fetch.js.map +1 -0
  269. package/esm/filter/Filter.d.ts +38 -0
  270. package/esm/filter/Filter.js +72 -0
  271. package/esm/filter/Filter.js.map +1 -0
  272. package/esm/filter/index.d.ts +1 -0
  273. package/esm/filter/index.js +2 -0
  274. package/esm/filter/index.js.map +1 -0
  275. package/esm/formats/CompactFormat.d.ts +22 -0
  276. package/esm/formats/CompactFormat.js +21 -0
  277. package/esm/formats/CompactFormat.js.map +1 -0
  278. package/esm/formats/CompactFormat.spec.d.ts +1 -0
  279. package/esm/formats/CompactFormat.spec.js +22 -0
  280. package/esm/formats/CompactFormat.spec.js.map +1 -0
  281. package/esm/formats/CurrencyFormat.d.ts +39 -0
  282. package/esm/formats/CurrencyFormat.js +25 -0
  283. package/esm/formats/CurrencyFormat.js.map +1 -0
  284. package/esm/formats/CurrencyFormat.spec.d.ts +1 -0
  285. package/esm/formats/CurrencyFormat.spec.js +22 -0
  286. package/esm/formats/CurrencyFormat.spec.js.map +1 -0
  287. package/esm/formats/DecimalFormat.d.ts +29 -0
  288. package/esm/formats/DecimalFormat.js +22 -0
  289. package/esm/formats/DecimalFormat.js.map +1 -0
  290. package/esm/formats/DecimalFormat.spec.d.ts +1 -0
  291. package/esm/formats/DecimalFormat.spec.js +22 -0
  292. package/esm/formats/DecimalFormat.spec.js.map +1 -0
  293. package/esm/formats/DurationFormat.d.ts +23 -0
  294. package/esm/formats/DurationFormat.js +35 -0
  295. package/esm/formats/DurationFormat.js.map +1 -0
  296. package/esm/formats/DurationFormat.spec.d.ts +1 -0
  297. package/esm/formats/DurationFormat.spec.js +52 -0
  298. package/esm/formats/DurationFormat.spec.js.map +1 -0
  299. package/esm/formats/RelativeTemporalFormat.d.ts +22 -0
  300. package/esm/formats/RelativeTemporalFormat.js +57 -0
  301. package/esm/formats/RelativeTemporalFormat.js.map +1 -0
  302. package/esm/formats/RelativeTemporalFormat.spec.d.ts +1 -0
  303. package/esm/formats/RelativeTemporalFormat.spec.js +77 -0
  304. package/esm/formats/RelativeTemporalFormat.spec.js.map +1 -0
  305. package/esm/formats/SwitchableTemporalFormat.d.ts +5 -0
  306. package/esm/formats/SwitchableTemporalFormat.js +11 -0
  307. package/esm/formats/SwitchableTemporalFormat.js.map +1 -0
  308. package/esm/formats/TemporalFormat.d.ts +27 -0
  309. package/esm/formats/TemporalFormat.js +19 -0
  310. package/esm/formats/TemporalFormat.js.map +1 -0
  311. package/esm/formats/TemporalFormat.spec.d.ts +1 -0
  312. package/esm/formats/TemporalFormat.spec.js +87 -0
  313. package/esm/formats/TemporalFormat.spec.js.map +1 -0
  314. package/esm/formats/TemporalRangeFormat.d.ts +30 -0
  315. package/esm/formats/TemporalRangeFormat.js +17 -0
  316. package/esm/formats/TemporalRangeFormat.js.map +1 -0
  317. package/esm/formats/TemporalRangeFormat.spec.d.ts +1 -0
  318. package/esm/formats/TemporalRangeFormat.spec.js +87 -0
  319. package/esm/formats/TemporalRangeFormat.spec.js.map +1 -0
  320. package/esm/formats/index.d.ts +8 -0
  321. package/esm/formats/index.js +9 -0
  322. package/esm/formats/index.js.map +1 -0
  323. package/esm/formats/types.d.ts +2 -0
  324. package/esm/formats/types.js +2 -0
  325. package/esm/formats/types.js.map +1 -0
  326. package/esm/formats/useDateTimeFormat.d.ts +2 -0
  327. package/esm/formats/useDateTimeFormat.js +7 -0
  328. package/esm/formats/useDateTimeFormat.js.map +1 -0
  329. package/esm/formats/useNumberFormat.d.ts +1 -0
  330. package/esm/formats/useNumberFormat.js +6 -0
  331. package/esm/formats/useNumberFormat.js.map +1 -0
  332. package/esm/formats/useRelativeTimeFormat.d.ts +1 -0
  333. package/esm/formats/useRelativeTimeFormat.js +6 -0
  334. package/esm/formats/useRelativeTimeFormat.js.map +1 -0
  335. package/esm/forms/EditForm.d.ts +13 -0
  336. package/esm/forms/EditForm.js +22 -0
  337. package/esm/forms/EditForm.js.map +1 -0
  338. package/esm/forms/SearchForm.d.ts +7 -0
  339. package/esm/forms/SearchForm.js +36 -0
  340. package/esm/forms/SearchForm.js.map +1 -0
  341. package/esm/forms/SubmitButton.d.ts +9 -0
  342. package/esm/forms/SubmitButton.js +28 -0
  343. package/esm/forms/SubmitButton.js.map +1 -0
  344. package/esm/forms/index.d.ts +4 -0
  345. package/esm/forms/index.js +5 -0
  346. package/esm/forms/index.js.map +1 -0
  347. package/esm/forms/useFormSubmit.d.ts +12 -0
  348. package/esm/forms/useFormSubmit.js +28 -0
  349. package/esm/forms/useFormSubmit.js.map +1 -0
  350. package/esm/getNavigatorLanguages.d.ts +5 -0
  351. package/esm/getNavigatorLanguages.js +11 -0
  352. package/esm/getNavigatorLanguages.js.map +1 -0
  353. package/esm/getSupportedFormatLocale.d.ts +19 -0
  354. package/esm/getSupportedFormatLocale.js +21 -0
  355. package/esm/getSupportedFormatLocale.js.map +1 -0
  356. package/esm/help/HelpButton.d.ts +12 -0
  357. package/esm/help/HelpButton.js +74 -0
  358. package/esm/help/HelpButton.js.map +1 -0
  359. package/esm/help/HelpDrawer.d.ts +3 -0
  360. package/esm/help/HelpDrawer.js +48 -0
  361. package/esm/help/HelpDrawer.js.map +1 -0
  362. package/esm/help/HelpSettingsContext.d.ts +26 -0
  363. package/esm/help/HelpSettingsContext.js +94 -0
  364. package/esm/help/HelpSettingsContext.js.map +1 -0
  365. package/esm/help/index.d.ts +3 -0
  366. package/esm/help/index.js +4 -0
  367. package/esm/help/index.js.map +1 -0
  368. package/esm/icons.d.ts +21 -0
  369. package/esm/icons.js +22 -0
  370. package/esm/icons.js.map +1 -0
  371. package/esm/index.d.ts +34 -0
  372. package/esm/index.js +35 -0
  373. package/esm/index.js.map +1 -0
  374. package/esm/layout/ErrorBoundary.d.ts +46 -0
  375. package/esm/layout/ErrorBoundary.js +186 -0
  376. package/esm/layout/ErrorBoundary.js.map +1 -0
  377. package/esm/layout/NotFound.d.ts +9 -0
  378. package/esm/layout/NotFound.js +26 -0
  379. package/esm/layout/NotFound.js.map +1 -0
  380. package/esm/layout/NotFoundSvg.d.ts +2 -0
  381. package/esm/layout/NotFoundSvg.js +37 -0
  382. package/esm/layout/NotFoundSvg.js.map +1 -0
  383. package/esm/layout/UserNav.d.ts +15 -0
  384. package/esm/layout/UserNav.js +50 -0
  385. package/esm/layout/UserNav.js.map +1 -0
  386. package/esm/layout/index.d.ts +5 -0
  387. package/esm/layout/index.js +6 -0
  388. package/esm/layout/index.js.map +1 -0
  389. package/esm/layout/layout-context.d.ts +9 -0
  390. package/esm/layout/layout-context.js +23 -0
  391. package/esm/layout/layout-context.js.map +1 -0
  392. package/esm/layout/page-title.d.ts +7 -0
  393. package/esm/layout/page-title.js +41 -0
  394. package/esm/layout/page-title.js.map +1 -0
  395. package/esm/list/List.d.ts +14 -0
  396. package/esm/list/List.js +25 -0
  397. package/esm/list/List.js.map +1 -0
  398. package/esm/list/SkeletonListItem.d.ts +14 -0
  399. package/esm/list/SkeletonListItem.js +11 -0
  400. package/esm/list/SkeletonListItem.js.map +1 -0
  401. package/esm/list/index.d.ts +1 -0
  402. package/esm/list/index.js +2 -0
  403. package/esm/list/index.js.map +1 -0
  404. package/esm/localization.d.ts +140 -0
  405. package/esm/localization.js +200 -0
  406. package/esm/localization.js.map +1 -0
  407. package/esm/logo/Logo.d.ts +7 -0
  408. package/esm/logo/Logo.js +29 -0
  409. package/esm/logo/Logo.js.map +1 -0
  410. package/esm/logo/VCAppLogo.d.ts +7 -0
  411. package/esm/logo/VCAppLogo.js +28 -0
  412. package/esm/logo/VCAppLogo.js.map +1 -0
  413. package/esm/logo/VCLogo.d.ts +4 -0
  414. package/esm/logo/VCLogo.js +33 -0
  415. package/esm/logo/VCLogo.js.map +1 -0
  416. package/esm/logo/VCLogoIcon.d.ts +4 -0
  417. package/esm/logo/VCLogoIcon.js +36 -0
  418. package/esm/logo/VCLogoIcon.js.map +1 -0
  419. package/esm/logo/index.d.ts +4 -0
  420. package/esm/logo/index.js +5 -0
  421. package/esm/logo/index.js.map +1 -0
  422. package/esm/splash/index.d.ts +3 -0
  423. package/esm/splash/index.js +37 -0
  424. package/esm/splash/index.js.map +1 -0
  425. package/esm/spring.d.ts +14 -0
  426. package/esm/spring.js +2 -0
  427. package/esm/spring.js.map +1 -0
  428. package/esm/storage/MemoryStorage.d.ts +7 -0
  429. package/esm/storage/MemoryStorage.js +18 -0
  430. package/esm/storage/MemoryStorage.js.map +1 -0
  431. package/esm/storage/index.d.ts +2 -0
  432. package/esm/storage/index.js +3 -0
  433. package/esm/storage/index.js.map +1 -0
  434. package/esm/storage/storage.d.ts +16 -0
  435. package/esm/storage/storage.js +87 -0
  436. package/esm/storage/storage.js.map +1 -0
  437. package/esm/storage/useStorage.d.ts +1 -0
  438. package/esm/storage/useStorage.js +29 -0
  439. package/esm/storage/useStorage.js.map +1 -0
  440. package/esm/tabs/Tabs.d.ts +10 -0
  441. package/esm/tabs/Tabs.js +95 -0
  442. package/esm/tabs/Tabs.js.map +1 -0
  443. package/esm/tabs/index.d.ts +1 -0
  444. package/esm/tabs/index.js +2 -0
  445. package/esm/tabs/index.js.map +1 -0
  446. package/esm/temporal/index.d.ts +2 -0
  447. package/esm/temporal/index.js +3 -0
  448. package/esm/temporal/index.js.map +1 -0
  449. package/esm/temporal/parse.d.ts +4 -0
  450. package/esm/temporal/parse.js +25 -0
  451. package/esm/temporal/parse.js.map +1 -0
  452. package/esm/temporal/polyfill.d.ts +34 -0
  453. package/esm/temporal/polyfill.js +10 -0
  454. package/esm/temporal/polyfill.js.map +1 -0
  455. package/esm/utils/defined.d.ts +1 -0
  456. package/esm/utils/defined.js +4 -0
  457. package/esm/utils/defined.js.map +1 -0
  458. package/esm/utils/index.d.ts +3 -0
  459. package/esm/utils/index.js +4 -0
  460. package/esm/utils/index.js.map +1 -0
  461. package/esm/utils/useFlag.d.ts +1 -0
  462. package/esm/utils/useFlag.js +9 -0
  463. package/esm/utils/useFlag.js.map +1 -0
  464. package/esm/utils/useIsMounted.d.ts +1 -0
  465. package/esm/utils/useIsMounted.js +12 -0
  466. package/esm/utils/useIsMounted.js.map +1 -0
  467. package/esm/view/View.d.ts +9 -0
  468. package/esm/view/View.js +22 -0
  469. package/esm/view/View.js.map +1 -0
  470. package/esm/view/ViewHeader.d.ts +10 -0
  471. package/esm/view/ViewHeader.js +15 -0
  472. package/esm/view/ViewHeader.js.map +1 -0
  473. package/esm/view/index.d.ts +2 -0
  474. package/esm/view/index.js +3 -0
  475. package/esm/view/index.js.map +1 -0
  476. package/package.json +72 -0
  477. package/src/AppShell/AppShell.tsx +165 -0
  478. package/src/AppShell/index.tsx +1 -0
  479. package/src/ErrorAlert.tsx +71 -0
  480. package/src/Input/ActionsMenu.tsx +102 -0
  481. package/src/Input/Checkbox.tsx +33 -0
  482. package/src/Input/EmailSenderField.tsx +64 -0
  483. package/src/Input/NumberField.tsx +127 -0
  484. package/src/Input/RadioGroup.tsx +37 -0
  485. package/src/Input/Select.tsx +33 -0
  486. package/src/Input/Selector.tsx +21 -0
  487. package/src/Input/Switch.tsx +33 -0
  488. package/src/Input/TextField.tsx +69 -0
  489. package/src/Input/UrlUploadField.tsx +84 -0
  490. package/src/Input/index.ts +9 -0
  491. package/src/LanguageSwitcher/LanguageSwitcher.tsx +63 -0
  492. package/src/LanguageSwitcher/index.ts +1 -0
  493. package/src/Paging/Paging.ts +77 -0
  494. package/src/Paging/index.ts +1 -0
  495. package/src/VCThemeProvider/JetbrainsMonoFont.tsx +55 -0
  496. package/src/VCThemeProvider/RobotoFont.tsx +52 -0
  497. package/src/VCThemeProvider/ThemeModeSwitcher.tsx +23 -0
  498. package/src/VCThemeProvider/VCThemeProvider.tsx +232 -0
  499. package/src/VCThemeProvider/code-colors.ts +34 -0
  500. package/src/VCThemeProvider/files.d.ts +2 -0
  501. package/src/VCThemeProvider/index.ts +5 -0
  502. package/src/audit/AuditChanges.tsx +82 -0
  503. package/src/audit/AuditTimeline.tsx +25 -0
  504. package/src/audit/AuditTimelineItem.tsx +75 -0
  505. package/src/audit/index.ts +4 -0
  506. package/src/audit/types.ts +46 -0
  507. package/src/breadcrumbs.tsx +27 -0
  508. package/src/code/Code.tsx +53 -0
  509. package/src/code/CodeBlock.tsx +15 -0
  510. package/src/code/Json.tsx +73 -0
  511. package/src/code/index.ts +3 -0
  512. package/src/confirm/ConfirmButton.tsx +69 -0
  513. package/src/confirm/ConfirmDialog.tsx +68 -0
  514. package/src/confirm/ConfirmIconButton.tsx +62 -0
  515. package/src/confirm/ConfirmMenuItem.tsx +66 -0
  516. package/src/confirm/index.ts +4 -0
  517. package/src/container/ContainerLayout.tsx +40 -0
  518. package/src/container/ContainerSettingsContext.tsx +77 -0
  519. package/src/container/ContainerWidthControl.tsx +20 -0
  520. package/src/container/index.ts +3 -0
  521. package/src/content-table/ContentTable.tsx +214 -0
  522. package/src/content-table/UndrawEmpty.tsx +285 -0
  523. package/src/content-table/index.ts +1 -0
  524. package/src/country/countries.ts +268 -0
  525. package/src/country/country-select.tsx +48 -0
  526. package/src/country/index.ts +5 -0
  527. package/src/country/locale-select.tsx +43 -0
  528. package/src/country/locales.ts +192 -0
  529. package/src/country/phone-prefix-select.tsx +50 -0
  530. package/src/cube/BoxFeatures.tsx +91 -0
  531. package/src/cube/BoxMaintenanceChip.tsx +33 -0
  532. package/src/cube/BoxNumber.tsx +10 -0
  533. package/src/cube/BoxType.tsx +22 -0
  534. package/src/cube/CubeConnectedChip.tsx +16 -0
  535. package/src/cube/LockStatusChip.tsx +54 -0
  536. package/src/cube/UtilizationBar.tsx +94 -0
  537. package/src/cube/accessibility.tsx +422 -0
  538. package/src/cube/index.tsx +8 -0
  539. package/src/data-table/DataTable.tsx +338 -0
  540. package/src/data-table/DataTableColumnSettings.tsx +204 -0
  541. package/src/data-table/DataTableHeader.tsx +10 -0
  542. package/src/data-table/DataTableToolbar.tsx +10 -0
  543. package/src/data-table/index.tsx +8 -0
  544. package/src/data-table/useDataTableColumnStorage.ts +26 -0
  545. package/src/data-table/useDataTableStorage.ts +43 -0
  546. package/src/data-table/useSpringPage.ts +21 -0
  547. package/src/data-table/useSpringPageable.ts +25 -0
  548. package/src/date-pickers/PlainAdapterCommon.ts +125 -0
  549. package/src/date-pickers/PlainDateAdapter.spec.ts +50 -0
  550. package/src/date-pickers/PlainDateAdapter.ts +139 -0
  551. package/src/date-pickers/PlainDatePicker.spec.tsx +22 -0
  552. package/src/date-pickers/PlainDatePicker.tsx +73 -0
  553. package/src/date-pickers/PlainDateTimeAdapter.spec.ts +50 -0
  554. package/src/date-pickers/PlainDateTimeAdapter.ts +140 -0
  555. package/src/date-pickers/PlainDateTimePicker.spec.tsx +22 -0
  556. package/src/date-pickers/PlainDateTimePicker.tsx +65 -0
  557. package/src/date-pickers/PlainTimeAdapter.ts +247 -0
  558. package/src/date-pickers/PlainTimePicker.spec.tsx +22 -0
  559. package/src/date-pickers/PlainTimePicker.tsx +45 -0
  560. package/src/date-pickers/TemporalAdapter.ts +150 -0
  561. package/src/date-pickers/TimezoneSelect.tsx +387 -0
  562. package/src/date-pickers/getFormatString.ts +38 -0
  563. package/src/date-pickers/index.ts +5 -0
  564. package/src/date-pickers/parse.spec.ts +43 -0
  565. package/src/date-pickers/parse.ts +72 -0
  566. package/src/date-pickers/timeframe-picker.tsx +202 -0
  567. package/src/date-pickers/useLocale.ts +6 -0
  568. package/src/date-pickers/useRenderInput.tsx +20 -0
  569. package/src/fetch.spec.ts +85 -0
  570. package/src/fetch.ts +165 -0
  571. package/src/filter/Filter.tsx +194 -0
  572. package/src/filter/index.ts +1 -0
  573. package/src/formats/CompactFormat.spec.tsx +25 -0
  574. package/src/formats/CompactFormat.tsx +48 -0
  575. package/src/formats/CurrencyFormat.spec.tsx +25 -0
  576. package/src/formats/CurrencyFormat.tsx +77 -0
  577. package/src/formats/DecimalFormat.spec.tsx +25 -0
  578. package/src/formats/DecimalFormat.tsx +59 -0
  579. package/src/formats/DurationFormat.spec.tsx +57 -0
  580. package/src/formats/DurationFormat.tsx +72 -0
  581. package/src/formats/RelativeTemporalFormat.spec.tsx +84 -0
  582. package/src/formats/RelativeTemporalFormat.tsx +86 -0
  583. package/src/formats/SwitchableTemporalFormat.tsx +17 -0
  584. package/src/formats/TemporalFormat.spec.tsx +110 -0
  585. package/src/formats/TemporalFormat.tsx +58 -0
  586. package/src/formats/TemporalRangeFormat.spec.tsx +159 -0
  587. package/src/formats/TemporalRangeFormat.tsx +62 -0
  588. package/src/formats/index.ts +8 -0
  589. package/src/formats/types.ts +4 -0
  590. package/src/formats/useDateTimeFormat.ts +7 -0
  591. package/src/formats/useNumberFormat.ts +6 -0
  592. package/src/formats/useRelativeTimeFormat.ts +6 -0
  593. package/src/forms/EditForm.tsx +69 -0
  594. package/src/forms/SearchForm.tsx +51 -0
  595. package/src/forms/SubmitButton.tsx +34 -0
  596. package/src/forms/index.ts +4 -0
  597. package/src/forms/useFormSubmit.tsx +28 -0
  598. package/src/getNavigatorLanguages.ts +11 -0
  599. package/src/getSupportedFormatLocale.ts +24 -0
  600. package/src/help/HelpButton.tsx +134 -0
  601. package/src/help/HelpDrawer.tsx +65 -0
  602. package/src/help/HelpSettingsContext.tsx +178 -0
  603. package/src/help/index.ts +3 -0
  604. package/src/icons.ts +23 -0
  605. package/src/index.ts +34 -0
  606. package/src/layout/ErrorBoundary.tsx +232 -0
  607. package/src/layout/NotFound.tsx +51 -0
  608. package/src/layout/NotFoundSvg.tsx +172 -0
  609. package/src/layout/UserNav.tsx +107 -0
  610. package/src/layout/index.ts +5 -0
  611. package/src/layout/layout-context.tsx +40 -0
  612. package/src/layout/page-title.tsx +33 -0
  613. package/src/list/List.tsx +40 -0
  614. package/src/list/SkeletonListItem.tsx +50 -0
  615. package/src/list/index.tsx +1 -0
  616. package/src/localization.tsx +404 -0
  617. package/src/logo/Logo.tsx +35 -0
  618. package/src/logo/VCAppLogo.tsx +28 -0
  619. package/src/logo/VCLogo.tsx +56 -0
  620. package/src/logo/VCLogoIcon.tsx +55 -0
  621. package/src/logo/V_C_LOGO.svg +1 -0
  622. package/src/logo/V_C_LOGO_ICON.svg +1 -0
  623. package/src/logo/V_C_LOGO_ICON_WHITE.svg +1 -0
  624. package/src/logo/V_C_LOGO_WHITE.svg +1 -0
  625. package/src/logo/index.tsx +4 -0
  626. package/src/splash/index.tsx +34 -0
  627. package/src/splash/template.html +86 -0
  628. package/src/spring.ts +15 -0
  629. package/src/storage/MemoryStorage.ts +21 -0
  630. package/src/storage/index.ts +2 -0
  631. package/src/storage/storage.ts +97 -0
  632. package/src/storage/useStorage.ts +35 -0
  633. package/src/tabs/Tabs.tsx +187 -0
  634. package/src/tabs/index.ts +1 -0
  635. package/src/temporal/index.ts +2 -0
  636. package/src/temporal/parse.ts +29 -0
  637. package/src/temporal/polyfill.ts +36 -0
  638. package/src/utils/defined.ts +4 -0
  639. package/src/utils/index.ts +3 -0
  640. package/src/utils/useFlag.ts +9 -0
  641. package/src/utils/useIsMounted.ts +12 -0
  642. package/src/view/View.tsx +22 -0
  643. package/src/view/ViewHeader.tsx +35 -0
  644. package/src/view/index.ts +2 -0
@@ -0,0 +1,48 @@
1
+ import {useNumberFormat} from "./useNumberFormat";
2
+ import {Fragment, useMemo} from "react";
3
+ import * as React from "react";
4
+
5
+ export type CompactDisplay = "long" | "short";
6
+
7
+ export interface CompactFormatProps {
8
+ /**
9
+ * The numeric amount of currency.
10
+ */
11
+ value: number | bigint | null | undefined;
12
+
13
+ /**
14
+ * Compact display.
15
+ */
16
+ compactDisplay?: CompactDisplay;
17
+
18
+ /**
19
+ * Overrides the user's locale. Use for testing only.
20
+ */
21
+ locale?: string;
22
+ }
23
+
24
+ /**
25
+ * Returns a compact string representing the large number `value` formatted according to the user's locale.
26
+ * @param props
27
+ * @constructor
28
+ */
29
+ export function CompactFormat(props: CompactFormatProps) {
30
+ const {
31
+ value,
32
+ compactDisplay,
33
+ locale,
34
+ } = props;
35
+
36
+ const options = useMemo(() => ({
37
+ notation: "compact",
38
+ compactDisplay,
39
+ } as const), [compactDisplay]);
40
+
41
+ const numberFormat = useNumberFormat(options, locale);
42
+
43
+ const str = useMemo(() => {
44
+ return (typeof value == "number" || typeof value == "bigint") ? numberFormat.format(value) : "";
45
+ }, [numberFormat, value]);
46
+
47
+ return <Fragment>{str}</Fragment>;
48
+ }
@@ -0,0 +1,25 @@
1
+ import {act, create, ReactTestRenderer} from "react-test-renderer";
2
+ import * as React from "react";
3
+ import {CurrencyFormat} from "./CurrencyFormat";
4
+
5
+ describe("CurrencyFormat", () => {
6
+
7
+ test("render de-AT", () => {
8
+ let element: ReactTestRenderer;
9
+ act(() => {
10
+ element = create(<CurrencyFormat value={1234.5} currency="EUR" locale="de-AT" />);
11
+ })
12
+ const value = element!.root.children[0];
13
+ expect(value).toBe("€\u00a01.234,50"); // \u00a0 is a non-breaking space
14
+ });
15
+
16
+ test("render en-US", () => {
17
+ let element: ReactTestRenderer;
18
+ act(() => {
19
+ element = create(<CurrencyFormat value={1234.5} currency="USD" locale="en-US" />);
20
+ })
21
+ const value = element!.root.children[0];
22
+ expect(value).toBe("$1,234.50");
23
+ });
24
+
25
+ });
@@ -0,0 +1,77 @@
1
+ import {useNumberFormat} from "./useNumberFormat";
2
+ import {Fragment, useMemo} from "react";
3
+ import * as React from "react";
4
+
5
+ export type CurrencyDisplay = "symbol" | "name" | "narrowSymbol" | "code";
6
+ export type CurrencySign = "accounting" | "standard";
7
+
8
+ export interface CurrencyFormatProps {
9
+ /**
10
+ * The numeric amount of currency.
11
+ */
12
+ value: number | bigint | null | undefined;
13
+
14
+ /**
15
+ * The 3-letter currency identifier.
16
+ */
17
+ currency: string;
18
+
19
+ /**
20
+ * How to display the currency. Default depends on the browser.
21
+ */
22
+ currencyDisplay?: CurrencyDisplay;
23
+
24
+ /**
25
+ * The currency sign to use. Default depends on the browser.
26
+ */
27
+ currencySign?: CurrencySign;
28
+
29
+ /**
30
+ * Minimum fraction digits. Default depends on the browser.
31
+ */
32
+ minimumFractionDigits?: number;
33
+
34
+ /**
35
+ * Maximum fraction digits. Default depends on the browser.
36
+ */
37
+ maximumFractionDigits?: number;
38
+
39
+ /**
40
+ * Overrides the user's locale. Use for testing only.
41
+ */
42
+ locale?: string;
43
+ }
44
+
45
+ /**
46
+ * Returns a string representing the specified `value` in the specified `currency` in the user's locale.
47
+ * @param props
48
+ * @constructor
49
+ */
50
+ export function CurrencyFormat(props: CurrencyFormatProps) {
51
+ const {
52
+ value,
53
+ currency,
54
+ currencyDisplay,
55
+ currencySign,
56
+ minimumFractionDigits,
57
+ maximumFractionDigits,
58
+ locale,
59
+ } = props;
60
+
61
+ const options = useMemo(() => ({
62
+ style: "currency",
63
+ currency,
64
+ currencyDisplay,
65
+ currencySign,
66
+ minimumFractionDigits,
67
+ maximumFractionDigits,
68
+ }), [currency, currencyDisplay, currencySign, minimumFractionDigits, maximumFractionDigits]);
69
+
70
+ const numberFormat = useNumberFormat(options, locale);
71
+
72
+ const str = useMemo(() => {
73
+ return (typeof value == "number" || typeof value == "bigint") ? numberFormat.format(value) : "";
74
+ }, [numberFormat, value]);
75
+
76
+ return <Fragment>{str}</Fragment>;
77
+ }
@@ -0,0 +1,25 @@
1
+ import {act, create, ReactTestRenderer} from "react-test-renderer";
2
+ import * as React from "react";
3
+ import {DecimalFormat} from "./DecimalFormat";
4
+
5
+ describe("DecimalFormat", () => {
6
+
7
+ test("render de-AT", () => {
8
+ let element: ReactTestRenderer;
9
+ act(() => {
10
+ element = create(<DecimalFormat value={1234.5} locale="de-AT" />);
11
+ })
12
+ const value = element!.root.children[0];
13
+ expect(value).toBe("1\u00a0234,5");
14
+ });
15
+
16
+ test("render en-US", () => {
17
+ let element: ReactTestRenderer;
18
+ act(() => {
19
+ element = create(<DecimalFormat value={1234.5} locale="en-US" />);
20
+ })
21
+ const value = element!.root.children[0];
22
+ expect(value).toBe("1,234.5");
23
+ });
24
+
25
+ });
@@ -0,0 +1,59 @@
1
+ import {useNumberFormat} from "./useNumberFormat";
2
+ import {Fragment, useMemo} from "react";
3
+ import * as React from "react";
4
+
5
+ export interface DecimalFormatProps {
6
+ /**
7
+ * The numeric amount of currency.
8
+ */
9
+ value: number | bigint | null | undefined;
10
+
11
+ /**
12
+ * Minimum fraction digits. Default depends on the browser.
13
+ */
14
+ minimumFractionDigits?: number;
15
+
16
+ /**
17
+ * Maximum fraction digits. Default depends on the browser.
18
+ */
19
+ maximumFractionDigits?: number;
20
+
21
+ /**
22
+ * Fraction digits. Shorthand to set both `minimumFractionDigits` and `maximumFractionDigits`.
23
+ */
24
+ fractionDigits?: number;
25
+
26
+ /**
27
+ * Overrides the user's locale. Use for testing only.
28
+ */
29
+ locale?: string;
30
+ }
31
+
32
+ /**
33
+ * Returns a string representing the specified `value` formatted according to the user's locale.
34
+ * @param props
35
+ * @constructor
36
+ */
37
+ export function DecimalFormat(props: DecimalFormatProps) {
38
+ const {
39
+ value,
40
+ fractionDigits,
41
+ minimumFractionDigits = fractionDigits,
42
+ maximumFractionDigits = fractionDigits,
43
+ locale,
44
+ } = props;
45
+
46
+ const options = useMemo(() => ({
47
+ style: "decimal",
48
+ minimumFractionDigits,
49
+ maximumFractionDigits,
50
+ }), [minimumFractionDigits, maximumFractionDigits]);
51
+
52
+ const numberFormat = useNumberFormat(options, locale);
53
+
54
+ const str = useMemo(() => {
55
+ return (typeof value == "number" || typeof value == "bigint") ? numberFormat.format(value) : "";
56
+ }, [numberFormat, value]);
57
+
58
+ return <Fragment>{str}</Fragment>;
59
+ }
@@ -0,0 +1,57 @@
1
+ import {act, create, ReactTestRenderer} from "react-test-renderer";
2
+ import * as React from "react";
3
+ import {DurationFormat} from "./DurationFormat";
4
+ import {Duration, Now} from "../temporal";
5
+
6
+ describe("DurationFormat", () => {
7
+
8
+ test("render de-AT", () => {
9
+ let element: ReactTestRenderer;
10
+ act(() => {
11
+ element = create(<DurationFormat value={Duration.from({days: 5, hours: 2, seconds: 2})} locale="de-AT" />);
12
+ })
13
+ const value = element!.root.children[0];
14
+ expect(value).toBe("5d 02:00:02");
15
+ });
16
+
17
+ test("render en-US", () => {
18
+ let element: ReactTestRenderer;
19
+ act(() => {
20
+ element = create(<DurationFormat value={Duration.from({days: 5, hours: 2, seconds: 2})} locale="en-US" />);
21
+ })
22
+ const value = element!.root.children[0];
23
+ expect(value).toBe("5d 02:00:02");
24
+ });
25
+
26
+ test("balance seconds de-AT", () => {
27
+ let element: ReactTestRenderer;
28
+ act(() => {
29
+ const duration = Now.instant().until(Now.instant().add({seconds: 10000}))
30
+ .round({largestUnit: "hours"});
31
+ element = create(<DurationFormat value={duration} locale="de-AT" />);
32
+ })
33
+ const value = element!.root.children[0];
34
+ expect(value).toBe("02:46:40");
35
+ });
36
+
37
+ test("balance days de-AT", () => {
38
+ let element: ReactTestRenderer;
39
+ act(() => {
40
+ const duration = Now.instant().until(Now.instant().add({hours: 5 * 24}))
41
+ .round({largestUnit: "days"});
42
+ element = create(<DurationFormat value={duration} locale="de-AT" />);
43
+ })
44
+ const value = element!.root.children[0];
45
+ expect(value).toBe("5d");
46
+ });
47
+
48
+ test("complex de-AT", () => {
49
+ let element: ReactTestRenderer;
50
+ act(() => {
51
+ const duration = Duration.from({years: 3, months: 4, weeks: 1, days: 6});
52
+ element = create(<DurationFormat value={duration} locale="de-AT" />);
53
+ })
54
+ const value = element!.root.children[0];
55
+ expect(value).toBe("3y 4m 1w 6d");
56
+ });
57
+ });
@@ -0,0 +1,72 @@
1
+ import {Duration} from "../temporal";
2
+ import {getSupportedFormatLocale} from "../getSupportedFormatLocale";
3
+ import * as React from "react";
4
+ import {Fragment, useMemo} from "react";
5
+ import {DateStyle, TimeStyle} from "./types";
6
+
7
+ interface DurationFormatProps {
8
+ /**
9
+ * The duration value to format.
10
+ */
11
+ value?: Duration | null | undefined;
12
+
13
+ /**
14
+ * The style of the date format.
15
+ */
16
+ dateStyle?: DateStyle | undefined;
17
+
18
+ /**
19
+ * The style of the time format.
20
+ */
21
+ timeStyle?: TimeStyle | undefined;
22
+
23
+ /**
24
+ * Overrides the user's locale. Use for testing only.
25
+ */
26
+ locale?: string;
27
+ }
28
+
29
+ export function DurationFormat(props: DurationFormatProps) {
30
+ const {
31
+ value,
32
+ dateStyle,
33
+ timeStyle,
34
+ locale: suppliedLocale
35
+ } = props;
36
+
37
+ if (!value) {
38
+ return null;
39
+ }
40
+
41
+ const options = useMemo(() => ({
42
+ dateStyle,
43
+ timeStyle,
44
+ }), [dateStyle, timeStyle]);
45
+
46
+ const locale = useMemo(() => suppliedLocale ?? getSupportedFormatLocale("dateTime"), [suppliedLocale]);
47
+
48
+ const strValue = useMemo(() => {
49
+ // TODO: this can only be supported once a polyfill or browser support for DurationFormat is available
50
+ // https://github.com/tc39/proposal-intl-duration-format/
51
+ // In the meantime, we format the duration in a simple neural format.
52
+ return formatDuration(value);
53
+ }, [value, locale, options]);
54
+
55
+ return <Fragment>{strValue}</Fragment>;
56
+ }
57
+
58
+ function formatDuration(value: Duration) {
59
+ const parts = (["years", "months", "weeks", "days"] as const)
60
+ .map(prop => [prop, value[prop]] as const)
61
+ .filter(([_, value]) => Boolean(value))
62
+ .map(([prop, value]) => value + prop.charAt(0));
63
+
64
+ if (value.hours || value.minutes || value.seconds) {
65
+ const time = [value.hours || 0, value.minutes || 0, value.seconds]
66
+ .map(value => value.toString().padStart(2, "0"))
67
+ .join(":");
68
+ parts.push(time);
69
+ }
70
+
71
+ return parts.join(" ");
72
+ }
@@ -0,0 +1,84 @@
1
+ import * as React from "react";
2
+ import {act, create, ReactTestRenderer} from "react-test-renderer";
3
+ import {Now} from "../temporal";
4
+ import {RelativeTemporalFormat} from "./RelativeTemporalFormat";
5
+
6
+ describe("RelativeTemporalFormat", () => {
7
+ test("plainDate de-AT", () => {
8
+ let element: ReactTestRenderer;
9
+ act(() => {
10
+ element = create(<RelativeTemporalFormat value={Now.plainDateISO().subtract({days: 1})} locale="de-AT" />);
11
+ });
12
+ const value = element!.root.children[0];
13
+ expect(value).toBe("gestern");
14
+ });
15
+
16
+ test("plainDate en-US", () => {
17
+ let element: ReactTestRenderer;
18
+ act(() => {
19
+ element = create(<RelativeTemporalFormat value={Now.plainDateISO().subtract({days: 1})} locale="en-US" />);
20
+ });
21
+ const value = element!.root.children[0];
22
+ expect(value).toBe("yesterday");
23
+ });
24
+
25
+ // TODO: Does not round correctly on Node, but works in browser
26
+ test.skip("plainDateTime de-AT", () => {
27
+ let element: ReactTestRenderer;
28
+ act(() => {
29
+ element = create(<RelativeTemporalFormat value={Now.plainDateTimeISO().add({hours: 3})} locale="de-AT" />);
30
+ });
31
+ const value = element!.root.children[0];
32
+ expect(value).toBe("in 3 Stunden");
33
+ });
34
+
35
+ // TODO: Does not round correctly on Node, but works in browser
36
+ test.skip("plainDateTime en-US", () => {
37
+ let element: ReactTestRenderer;
38
+ act(() => {
39
+ element = create(<RelativeTemporalFormat value={Now.plainDateTimeISO().add({hours: 3})} locale="en-US" />);
40
+ });
41
+ const value = element!.root.children[0];
42
+ expect(value).toBe("in 3 hours");
43
+ });
44
+
45
+ // TODO: Does not round correctly on Node, but works in browser
46
+ test.skip("zonedDateTime de-AT", () => {
47
+ let element: ReactTestRenderer;
48
+ act(() => {
49
+ element = create(<RelativeTemporalFormat value={Now.zonedDateTimeISO().add({hours: 3})} locale="de-AT" />);
50
+ });
51
+ const value = element!.root.children[0];
52
+ expect(value).toBe("in 3 Stunden");
53
+ });
54
+
55
+ // TODO: Does not round correctly on Node, but works in browser
56
+ test.skip("zonedDateTime en-US", () => {
57
+ let element: ReactTestRenderer;
58
+ act(() => {
59
+ element = create(<RelativeTemporalFormat value={Now.zonedDateTimeISO().add({hours: 3})} locale="en-US" />);
60
+ });
61
+ const value = element!.root.children[0];
62
+ expect(value).toBe("in 3 hours");
63
+ });
64
+
65
+ // TODO: Does not round correctly on Node, but works in browser
66
+ test.skip("instant de-AT", () => {
67
+ let element: ReactTestRenderer;
68
+ act(() => {
69
+ element = create(<RelativeTemporalFormat value={Now.instant().add({hours: 3})} locale="de-AT" />);
70
+ });
71
+ const value = element!.root.children[0];
72
+ expect(value).toBe("in 3 Stunden");
73
+ });
74
+
75
+ // TODO: Does not round correctly on Node, but works in browser
76
+ test.skip("instant en-US", () => {
77
+ let element: ReactTestRenderer;
78
+ act(() => {
79
+ element = create(<RelativeTemporalFormat value={Now.instant().add({hours: 3})} locale="en-US" />);
80
+ });
81
+ const value = element!.root.children[0];
82
+ expect(value).toBe("in 3 hours");
83
+ });
84
+ });
@@ -0,0 +1,86 @@
1
+ import * as React from "react";
2
+ import {Fragment, useMemo} from "react";
3
+ import {Duration, Instant, Now, PlainDate, PlainDateTime, ZonedDateTime} from "../temporal";
4
+ import {useRelativeTimeFormat} from "./useRelativeTimeFormat";
5
+
6
+ export interface RelativeTemporalFormatProps {
7
+ /** The value to format. */
8
+ value?: PlainDate | PlainDateTime | ZonedDateTime | Instant | null | undefined;
9
+
10
+ /** The format of output message. */
11
+ numeric?: "always" | "auto" | undefined;
12
+
13
+ /** The length of the internationalized message */
14
+ style?: "long" | "short" | "narrow" | undefined;
15
+
16
+ /**
17
+ * Overrides the user's locale. Use for testing only.
18
+ */
19
+ locale?: string;
20
+ }
21
+
22
+ /**
23
+ * Returns a Temporal type formatted as relative time.
24
+ */
25
+ export function useRelativeTemporalFormat(props: RelativeTemporalFormatProps) {
26
+ const {
27
+ value,
28
+ numeric = "auto",
29
+ style,
30
+ locale,
31
+ } = props;
32
+
33
+ const options = useMemo(() => ({
34
+ numeric,
35
+ style,
36
+ }), [numeric, style]);
37
+
38
+ // Convert the given value to a duration relative to "now", rounded to the largest unit.
39
+ // Unfortunately this is not straightforward and there might even be bugs in the polyfill.
40
+ const duration = useMemo(() => {
41
+ if (value instanceof PlainDate) {
42
+ const relativeTo = Now.plainDateISO();
43
+ return value.since(relativeTo, {largestUnit: "auto"})
44
+ .round({largestUnit: "years", relativeTo});
45
+ }
46
+ if (value instanceof PlainDateTime) {
47
+ const relativeTo = Now.plainDateTimeISO();
48
+ return value.since(relativeTo, {largestUnit: "auto"})
49
+ .round({largestUnit: "years", relativeTo});
50
+ }
51
+ if (value instanceof ZonedDateTime) {
52
+ const relativeTo = Now.zonedDateTimeISO();
53
+ return value.since(relativeTo, {largestUnit: "auto"})
54
+ .round({largestUnit: "years", relativeTo});
55
+ }
56
+ if (value instanceof Instant) {
57
+ const now = Now.instant();
58
+ const relativeTo = now.toZonedDateTimeISO(Now.timeZone());
59
+ return value.since(now, {largestUnit: "auto"})
60
+ .round({largestUnit: "years", relativeTo}) // first time rounds to hours
61
+ .round({largestUnit: "years", relativeTo}); // second time round to years
62
+ }
63
+ return undefined;
64
+ }, [value]);
65
+
66
+ const format = useRelativeTimeFormat(options, locale);
67
+
68
+ return useMemo(() => {
69
+ return duration ? format.format(...convertDuration(duration)) : "";
70
+ }, [format, duration]);
71
+ }
72
+
73
+ /**
74
+ * Displays a Temporal type formatted as relative time.
75
+ */
76
+ export function RelativeTemporalFormat(props: RelativeTemporalFormatProps) {
77
+ return <Fragment>{useRelativeTemporalFormat(props)}</Fragment>;
78
+ }
79
+
80
+ type RelativeDateTimeFormatArgs = [number, Intl.RelativeTimeFormatUnit];
81
+
82
+ function convertDuration(duration: Duration): RelativeDateTimeFormatArgs {
83
+ const props = ["years", "months", "weeks", "days", "hours", "minutes", "seconds"] as const;
84
+ const prop = props.find(prop => Boolean(duration[prop]));
85
+ return prop ? [duration[prop], prop] : [0, "seconds"];
86
+ }
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import {useFlag} from "../utils";
3
+ import {RelativeTemporalFormatProps, useRelativeTemporalFormat} from "./RelativeTemporalFormat";
4
+ import {TemporalFormatProps, useTemporalFormat} from "./TemporalFormat";
5
+
6
+ export type SwitchableTemporalFormatProps = TemporalFormatProps & RelativeTemporalFormatProps;
7
+
8
+ export function SwitchableTemporalFormat(props: SwitchableTemporalFormatProps) {
9
+ const [isRelative, , , toggleRelative] = useFlag(true);
10
+ const relative = useRelativeTemporalFormat(props);
11
+ const absolute = useTemporalFormat(props);
12
+ return (
13
+ <abbr title={isRelative ? absolute : relative} onClick={toggleRelative}>
14
+ {isRelative ? relative : absolute}
15
+ </abbr>
16
+ );
17
+ }
@@ -0,0 +1,110 @@
1
+ import {act, create, ReactTestRenderer} from "react-test-renderer";
2
+ import * as React from "react";
3
+ import {Instant, PlainDate, PlainDateTime, PlainTime, ZonedDateTime} from "../temporal";
4
+ import {TemporalFormat} from "./TemporalFormat";
5
+
6
+ describe("TemporalFormat", () => {
7
+
8
+ test("PlainDate de-AT", () => {
9
+ let element: ReactTestRenderer;
10
+ act(() => {
11
+ element = create(<TemporalFormat value={PlainDate.from("2022-06-22")} locale="de-AT"/>);
12
+ });
13
+ const value = element!.root.children[0];
14
+ expect(value).toBe("22.6.2022");
15
+ });
16
+
17
+ test("PlainDate en-US", () => {
18
+ let element: ReactTestRenderer;
19
+ act(() => {
20
+ element = create(<TemporalFormat value={PlainDate.from("2022-06-22")} locale="en-US"/>);
21
+ });
22
+ const value = element!.root.children[0];
23
+ expect(value).toBe("6/22/2022");
24
+ });
25
+
26
+ test("PlainDateTime de-AT", () => {
27
+ let element: ReactTestRenderer;
28
+ act(() => {
29
+ element = create(<TemporalFormat value={PlainDateTime.from("2022-06-22T14:22")} locale="de-AT"/>);
30
+ });
31
+ const value = element!.root.children[0];
32
+ expect(value).toBe("22.6.2022, 14:22:00");
33
+ });
34
+
35
+ test("PlainDateTime en-US", () => {
36
+ let element: ReactTestRenderer;
37
+ act(() => {
38
+ element = create(<TemporalFormat value={PlainDateTime.from("2022-06-22T14:22")} locale="en-US"/>);
39
+ });
40
+ const value = element!.root.children[0];
41
+ expect(value).toBe("6/22/2022, 2:22:00 PM");
42
+ });
43
+
44
+ test("PlainTime de-AT", () => {
45
+ let element: ReactTestRenderer;
46
+ act(() => {
47
+ element = create(<TemporalFormat value={PlainTime.from({hour: 14, minute: 22})} locale="de-AT"/>);
48
+ });
49
+ const value = element!.root.children[0];
50
+ expect(value).toBe("14:22:00");
51
+ });
52
+
53
+ test("PlainTime en-US", () => {
54
+ let element: ReactTestRenderer;
55
+ act(() => {
56
+ element = create(<TemporalFormat value={PlainTime.from({hour: 14, minute: 22})} locale="en-US"/>);
57
+ });
58
+ const value = element!.root.children[0];
59
+ expect(value).toBe("2:22:00 PM");
60
+ });
61
+
62
+ test("ZonedDateTime de-AT", () => {
63
+ let element: ReactTestRenderer;
64
+ act(() => {
65
+ element = create(<TemporalFormat value={ZonedDateTime.from("2022-06-22T14:22[MET]")} locale="de-AT"/>);
66
+ });
67
+ const value = element!.root.children[0];
68
+ expect(value).toBe("22.6.2022, 14:22:00 GMT+2");
69
+ });
70
+
71
+ test("ZonedDateTime en-US", () => {
72
+ let element: ReactTestRenderer;
73
+ act(() => {
74
+ element = create(<TemporalFormat value={ZonedDateTime.from("2022-06-22T14:22[MET]")} locale="en-US"/>);
75
+ });
76
+ const value = element!.root.children[0];
77
+ expect(value).toBe("6/22/2022, 2:22:00 PM GMT+2");
78
+ });
79
+
80
+ test("Instant de-AT", () => {
81
+ let element: ReactTestRenderer;
82
+ act(() => {
83
+ element = create(
84
+ <TemporalFormat
85
+ value={Instant.from("2022-06-22T14:22:11Z")}
86
+ timeZone="Europe/Vienna"
87
+ locale="de-AT"
88
+ />
89
+ );
90
+ });
91
+ const value = element!.root.children[0];
92
+ expect(value).toBe("22.6.2022, 16:22:11");
93
+ });
94
+
95
+ test("Instant en-US", () => {
96
+ let element: ReactTestRenderer;
97
+ act(() => {
98
+ element = create(
99
+ <TemporalFormat
100
+ value={Instant.from("2022-06-22T14:22:11Z")}
101
+ locale="en-US"
102
+ timeZone="UTC"
103
+ />
104
+ );
105
+ });
106
+ const value = element!.root.children[0];
107
+ expect(value).toBe("6/22/2022, 2:22:11 PM");
108
+ });
109
+
110
+ });