@data-club/ai-hub 0.0.2 → 0.0.3

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 (160) hide show
  1. package/dist/auth/locales/cs.d.ts +16 -0
  2. package/dist/auth/locales/cs.d.ts.map +1 -0
  3. package/dist/auth/locales/cs.js +394 -0
  4. package/dist/auth/locales/cs.js.map +1 -0
  5. package/dist/auth/locales/index.d.ts +24 -0
  6. package/dist/auth/locales/index.d.ts.map +1 -0
  7. package/dist/auth/locales/index.js +31 -0
  8. package/dist/auth/locales/index.js.map +1 -0
  9. package/dist/auth/locales/sk.d.ts +16 -0
  10. package/dist/auth/locales/sk.d.ts.map +1 -0
  11. package/dist/auth/locales/sk.js +394 -0
  12. package/dist/auth/locales/sk.js.map +1 -0
  13. package/dist/auth/texts.d.ts +24 -2
  14. package/dist/auth/texts.d.ts.map +1 -1
  15. package/dist/auth/texts.js +20 -7
  16. package/dist/auth/texts.js.map +1 -1
  17. package/dist/client/AIHubClient.d.ts +11 -0
  18. package/dist/client/AIHubClient.d.ts.map +1 -1
  19. package/dist/client/AIHubClient.js +10 -0
  20. package/dist/client/AIHubClient.js.map +1 -1
  21. package/dist/components/AgentsPicker/index.d.ts.map +1 -1
  22. package/dist/components/AgentsPicker/index.js +3 -2
  23. package/dist/components/AgentsPicker/index.js.map +1 -1
  24. package/dist/components/ChangePassword/index.d.ts.map +1 -1
  25. package/dist/components/ChangePassword/index.js +3 -2
  26. package/dist/components/ChangePassword/index.js.map +1 -1
  27. package/dist/components/ChatShell/ShellHeader.d.ts.map +1 -1
  28. package/dist/components/ChatShell/ShellHeader.js +4 -3
  29. package/dist/components/ChatShell/ShellHeader.js.map +1 -1
  30. package/dist/components/ChatShell/index.d.ts.map +1 -1
  31. package/dist/components/ChatShell/index.js +3 -2
  32. package/dist/components/ChatShell/index.js.map +1 -1
  33. package/dist/components/DataClubAIHub/index.d.ts +7 -1
  34. package/dist/components/DataClubAIHub/index.d.ts.map +1 -1
  35. package/dist/components/DataClubAIHub/index.js +3 -1
  36. package/dist/components/DataClubAIHub/index.js.map +1 -1
  37. package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.d.ts.map +1 -1
  38. package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.js +5 -23
  39. package/dist/components/DataClubAIHubAdmin/SessionsOverviewPage.js.map +1 -1
  40. package/dist/components/DataClubAIHubAdmin/SettingsPage.d.ts.map +1 -1
  41. package/dist/components/DataClubAIHubAdmin/SettingsPage.js +45 -16
  42. package/dist/components/DataClubAIHubAdmin/SettingsPage.js.map +1 -1
  43. package/dist/components/DataClubAIHubAdmin/index.d.ts.map +1 -1
  44. package/dist/components/DataClubAIHubAdmin/index.js +3 -2
  45. package/dist/components/DataClubAIHubAdmin/index.js.map +1 -1
  46. package/dist/components/DataClubAIHubLogin/index.d.ts.map +1 -1
  47. package/dist/components/DataClubAIHubLogin/index.js +3 -2
  48. package/dist/components/DataClubAIHubLogin/index.js.map +1 -1
  49. package/dist/components/EffortControl/index.d.ts.map +1 -1
  50. package/dist/components/EffortControl/index.js +3 -2
  51. package/dist/components/EffortControl/index.js.map +1 -1
  52. package/dist/components/LanguageSwitcher/index.d.ts +25 -0
  53. package/dist/components/LanguageSwitcher/index.d.ts.map +1 -0
  54. package/dist/components/LanguageSwitcher/index.js +73 -0
  55. package/dist/components/LanguageSwitcher/index.js.map +1 -0
  56. package/dist/components/MainColumn/index.d.ts.map +1 -1
  57. package/dist/components/MainColumn/index.js +3 -2
  58. package/dist/components/MainColumn/index.js.map +1 -1
  59. package/dist/components/MessageInput/index.d.ts.map +1 -1
  60. package/dist/components/MessageInput/index.js +3 -2
  61. package/dist/components/MessageInput/index.js.map +1 -1
  62. package/dist/components/MessageList/index.d.ts.map +1 -1
  63. package/dist/components/MessageList/index.js +3 -2
  64. package/dist/components/MessageList/index.js.map +1 -1
  65. package/dist/components/ReasoningView/index.d.ts.map +1 -1
  66. package/dist/components/ReasoningView/index.js +3 -2
  67. package/dist/components/ReasoningView/index.js.map +1 -1
  68. package/dist/components/ScrollToPresentButton/index.d.ts.map +1 -1
  69. package/dist/components/ScrollToPresentButton/index.js +3 -2
  70. package/dist/components/ScrollToPresentButton/index.js.map +1 -1
  71. package/dist/components/SessionsPanel/index.d.ts.map +1 -1
  72. package/dist/components/SessionsPanel/index.js +6 -34
  73. package/dist/components/SessionsPanel/index.js.map +1 -1
  74. package/dist/components/ThemeSwitcher/index.d.ts.map +1 -1
  75. package/dist/components/ThemeSwitcher/index.js +3 -2
  76. package/dist/components/ThemeSwitcher/index.js.map +1 -1
  77. package/dist/components/ToolCallView/index.d.ts.map +1 -1
  78. package/dist/components/ToolCallView/index.js +3 -2
  79. package/dist/components/ToolCallView/index.js.map +1 -1
  80. package/dist/components/TpmBanner/index.d.ts.map +1 -1
  81. package/dist/components/TpmBanner/index.js +3 -2
  82. package/dist/components/TpmBanner/index.js.map +1 -1
  83. package/dist/context/AIHubContext.d.ts +23 -0
  84. package/dist/context/AIHubContext.d.ts.map +1 -1
  85. package/dist/context/AIHubContext.js.map +1 -1
  86. package/dist/context/AIHubProvider.d.ts +13 -0
  87. package/dist/context/AIHubProvider.d.ts.map +1 -1
  88. package/dist/context/AIHubProvider.js +39 -2
  89. package/dist/context/AIHubProvider.js.map +1 -1
  90. package/dist/context/index.d.ts +1 -0
  91. package/dist/context/index.d.ts.map +1 -1
  92. package/dist/context/index.js +1 -0
  93. package/dist/context/index.js.map +1 -1
  94. package/dist/context/language.d.ts +44 -0
  95. package/dist/context/language.d.ts.map +1 -0
  96. package/dist/context/language.js +74 -0
  97. package/dist/context/language.js.map +1 -0
  98. package/dist/context/useAIHub.d.ts +8 -0
  99. package/dist/context/useAIHub.d.ts.map +1 -1
  100. package/dist/context/useAIHub.js +4 -0
  101. package/dist/context/useAIHub.js.map +1 -1
  102. package/dist/context/useAIHubTexts.d.ts +40 -0
  103. package/dist/context/useAIHubTexts.d.ts.map +1 -0
  104. package/dist/context/useAIHubTexts.js +52 -0
  105. package/dist/context/useAIHubTexts.js.map +1 -0
  106. package/dist/index.d.ts +4 -2
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +4 -1
  109. package/dist/index.js.map +1 -1
  110. package/dist/primitives/index.d.ts +3 -0
  111. package/dist/primitives/index.d.ts.map +1 -1
  112. package/dist/primitives/index.js +3 -0
  113. package/dist/primitives/index.js.map +1 -1
  114. package/dist/stories/_mockProvider.d.ts.map +1 -1
  115. package/dist/stories/_mockProvider.js +5 -0
  116. package/dist/stories/_mockProvider.js.map +1 -1
  117. package/dist/types.d.ts +13 -0
  118. package/dist/types.d.ts.map +1 -1
  119. package/dist/util/relativeTime.d.ts +49 -0
  120. package/dist/util/relativeTime.d.ts.map +1 -0
  121. package/dist/util/relativeTime.js +78 -0
  122. package/dist/util/relativeTime.js.map +1 -0
  123. package/package.json +1 -1
  124. package/src/auth/locales/cs.ts +452 -0
  125. package/src/auth/locales/index.ts +38 -0
  126. package/src/auth/locales/sk.ts +452 -0
  127. package/src/auth/texts.ts +45 -6
  128. package/src/client/AIHubClient.ts +22 -0
  129. package/src/components/AgentsPicker/index.tsx +3 -2
  130. package/src/components/ChangePassword/index.tsx +2 -2
  131. package/src/components/ChatShell/ShellHeader.tsx +2 -0
  132. package/src/components/ChatShell/index.tsx +2 -2
  133. package/src/components/DataClubAIHub/index.tsx +11 -1
  134. package/src/components/DataClubAIHubAdmin/SessionsOverviewPage.tsx +5 -19
  135. package/src/components/DataClubAIHubAdmin/SettingsPage.tsx +138 -13
  136. package/src/components/DataClubAIHubAdmin/index.tsx +2 -2
  137. package/src/components/DataClubAIHubLogin/index.tsx +3 -2
  138. package/src/components/EffortControl/index.tsx +2 -2
  139. package/src/components/LanguageSwitcher/index.tsx +127 -0
  140. package/src/components/MainColumn/index.tsx +2 -2
  141. package/src/components/MessageInput/index.tsx +2 -2
  142. package/src/components/MessageList/index.tsx +2 -2
  143. package/src/components/ReasoningView/index.tsx +2 -2
  144. package/src/components/ScrollToPresentButton/index.tsx +2 -2
  145. package/src/components/SessionsPanel/index.tsx +5 -27
  146. package/src/components/ThemeSwitcher/index.tsx +3 -2
  147. package/src/components/ToolCallView/index.tsx +2 -2
  148. package/src/components/TpmBanner/index.tsx +2 -2
  149. package/src/context/AIHubContext.ts +25 -0
  150. package/src/context/AIHubProvider.tsx +68 -1
  151. package/src/context/index.ts +1 -0
  152. package/src/context/language.ts +81 -0
  153. package/src/context/useAIHub.ts +12 -0
  154. package/src/context/useAIHubTexts.ts +64 -0
  155. package/src/index.ts +13 -0
  156. package/src/primitives/index.ts +3 -0
  157. package/src/stories/_mockProvider.tsx +5 -0
  158. package/src/styles/default.css +79 -0
  159. package/src/types.ts +14 -0
  160. package/src/util/relativeTime.ts +90 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Locale-aware relative-time / date helpers.
3
+ *
4
+ * These replace the three hand-rolled English `"N min ago"` / `"yesterday"`
5
+ * formatters (sessions panel, admin sessions overview, admin settings). They
6
+ * delegate to the platform `Intl.RelativeTimeFormat` / `Intl.DateTimeFormat`,
7
+ * which know each language's CLDR plural rules for free — important for
8
+ * Czech / Slovak where the count word changes between 1, 2–4 and 5+ ("1
9
+ * minúta" / "2 minúty" / "5 minút"), something a flat `"{n} min ago"`
10
+ * template can't express.
11
+ *
12
+ * @see ../auth/texts.ts — `AIHubLanguage`
13
+ */
14
+
15
+ import type { AIHubLanguage } from "../auth/texts.js";
16
+
17
+ /**
18
+ * Formats an ISO-8601 timestamp as a short relative string in `language`,
19
+ * e.g. `"now"` / `"5 minutes ago"` / `"yesterday"` / `"3 days ago"` (and the
20
+ * Czech / Slovak equivalents).
21
+ *
22
+ * @param iso - ISO timestamp. Returns `""` for an unparseable value.
23
+ * @param language - the active UI language.
24
+ * @param opts.absoluteAfterDays - when set and the timestamp is at least this
25
+ * many days old, returns a short absolute date instead (used by the admin
26
+ * sessions overview, which falls back to a date after a week).
27
+ * @returns the localized relative-time string.
28
+ */
29
+ export function formatRelativeTime(
30
+ iso: string,
31
+ language: AIHubLanguage,
32
+ opts: { absoluteAfterDays?: number } = {},
33
+ ): string {
34
+ const then = Date.parse(iso);
35
+ if (Number.isNaN(then)) return "";
36
+ const diffMs = Date.now() - then;
37
+ const rtf = new Intl.RelativeTimeFormat(language, { numeric: "auto" });
38
+ const minutes = Math.round(diffMs / 60_000);
39
+ if (minutes < 1) return rtf.format(0, "second"); // locale "now"
40
+ if (minutes < 60) return rtf.format(-minutes, "minute");
41
+ const hours = Math.round(minutes / 60);
42
+ if (hours < 24) return rtf.format(-hours, "hour");
43
+ const days = Math.round(hours / 24);
44
+ if (
45
+ opts.absoluteAfterDays !== undefined &&
46
+ days >= opts.absoluteAfterDays
47
+ ) {
48
+ return formatAbsoluteDate(iso, language);
49
+ }
50
+ return rtf.format(-days, "day");
51
+ }
52
+
53
+ /**
54
+ * Formats an ISO timestamp as a short, locale-formatted absolute date
55
+ * (e.g. `2026-06-08` → `08/06/2026` in en-GB style, `8. 6. 2026` in cs).
56
+ *
57
+ * @param iso - ISO timestamp. Returns the raw input for an unparseable value.
58
+ * @param language - the active UI language.
59
+ * @returns the localized date string.
60
+ */
61
+ export function formatAbsoluteDate(
62
+ iso: string,
63
+ language: AIHubLanguage,
64
+ ): string {
65
+ const ts = Date.parse(iso);
66
+ if (Number.isNaN(ts)) return iso;
67
+ return new Intl.DateTimeFormat(language, { dateStyle: "short" }).format(
68
+ new Date(ts),
69
+ );
70
+ }
71
+
72
+ /**
73
+ * Day-granular relative label — `"today"` / `"yesterday"` / `"N days ago"`
74
+ * (localized). Used for the admin settings rotation stamp, which pairs an
75
+ * absolute date with this parenthetical.
76
+ *
77
+ * @param iso - ISO timestamp.
78
+ * @param language - the active UI language.
79
+ * @returns the localized day-relative label, or `""` when unparseable.
80
+ */
81
+ export function formatRelativeDay(
82
+ iso: string,
83
+ language: AIHubLanguage,
84
+ ): string {
85
+ const ts = Date.parse(iso);
86
+ if (Number.isNaN(ts)) return "";
87
+ const diffDays = Math.floor((Date.now() - ts) / (24 * 60 * 60 * 1000));
88
+ const rtf = new Intl.RelativeTimeFormat(language, { numeric: "auto" });
89
+ return rtf.format(-Math.max(0, diffDays), "day");
90
+ }