hazo_ui 6.12.0 → 6.12.4

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.
package/CHANGE_LOG.md CHANGED
@@ -5,6 +5,86 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## v6.12.4 (2026-10-03)
9
+
10
+ ### Changed — i18n string wiring (remaining components)
11
+
12
+ - The 8 remaining components are now wired through
13
+ `createPackageT("hazo_ui", en)` from `hazo_core/i18n`: `HazoUiDialog`,
14
+ `kanban_editor`, `MarkdownEditor`, `HazoUiImageCropperDialog`,
15
+ `HazoUiImageCropper`, `HazoUiMemoryDropdown`, `HazoUiCelebration` and
16
+ `DateRangeSelector`.
17
+ - `src/locales/en.json` grows from 102 to 133 keys, adding the `dialog.*`,
18
+ `kanban.*`, `markdown.*`, `cropper.*`, `memory.*`, `celebration.*` and
19
+ `charts.date_range` namespaces. Additive only.
20
+ - Prop defaults for user-facing labels now resolve in the component body via
21
+ `prop ?? t(key)`, so consumer overrides still win. Behaviour is identical
22
+ in English.
23
+ - Intentionally left hardcoded: the `![uploading…]()` markdown marker and
24
+ developer-facing `Error` messages.
25
+ - Non-English translations (de/es/fr/zh) are to be generated via the
26
+ test-app `/translations` page.
27
+
28
+ ## v6.12.3 (2026-09-30)
29
+
30
+ ### Changed — i18n string wiring
31
+
32
+ - Hardcoded English in `canvas_text_toolbar`, `error_banner`, `error_page`,
33
+ `hazo_ui_confirm_dialog`, `hazo_ui_icon_picker`, `hazo_ui_multi_sort_dialog`,
34
+ `loading_timeout`, `notification_item`, `notification_panel` and `toaster`
35
+ now goes through `t()`. Prop defaults (`title`, `description`,
36
+ `cancelLabel`, ...) resolve via `t()` so consumer overrides still win.
37
+ - `src/locales/en.json` gains the matching keys (`sort.*`, `canvas_toolbar.*`,
38
+ `toast.permission_*`, `error.*`, `loading.taking_longer`, `notification.*`,
39
+ `confirm.cancel`, `icon_picker.search_placeholder`, `common.*`).
40
+ Additive only; English output is unchanged.
41
+
42
+ ### Added — test-app
43
+
44
+ - `/translations` page + `/api/i18n/[...path]` route (via
45
+ `hazo_i18n/api` `createI18nRoutes`) with a "Translate with AI" flow, sidebar
46
+ entry, `config/hazo_i18n_config.ini` + `hazo_llm_api_config.ini`.
47
+ - `src/lib/llm_init.ts` loads `hazo_llm_api/server` with `optional_import`
48
+ instead of a static import. A static import is bundled as a separate module
49
+ instance from the runtime copy `hazo_i18n`'s `translateMessages` resolves,
50
+ so init ran on the wrong instance and every chunk failed with "LLM API not
51
+ initialized". Verified: 25/25 chunks ok.
52
+ - `next.config.js`: `hazo_i18n`/`hazo_connect` transpile + source aliases,
53
+ `sql.js` server external. Generated `.hazo-i18n/` and `*.sqlite` ignored.
54
+
55
+ ## v6.12.2 (2026-09-30)
56
+
57
+ ### Fixed — `useFullscreen`
58
+
59
+ - The fullscreen toggle silently did nothing on iOS Safari. iOS Safari has no
60
+ `requestFullscreen` at all for arbitrary elements (not a missing vendor
61
+ prefix — the method is simply absent), so `enter()` hit its
62
+ `!document.documentElement.requestFullscreen` guard and returned without
63
+ ever flipping `isFullscreen`, and `fullscreenchange` never fired to sync it
64
+ either. Any consumer driving a CSS-based fullscreen layout off
65
+ `isFullscreen` (GoTimer's `TimerShellV2`, for example — a `fixed inset-0
66
+ z-[9999]` overlay with no dependency on the real browser fullscreen state)
67
+ got a dead button on iPhone with no error.
68
+ `enter()`/`exit()`/`toggle()` now detect API support up front and, when
69
+ it's missing, track `isFullscreen` as plain local state instead of no-op'ing
70
+ — the real browser-chrome-hiding effect is still unavailable on iOS (a
71
+ platform limitation, not fixable from JS), but the CSS-driven fullscreen
72
+ layout itself now activates correctly. Added
73
+ `src/hooks/__tests__/use_fullscreen.test.ts` covering both the
74
+ native-API and no-API-available paths.
75
+
76
+ ## v6.12.1 (2026-09-29)
77
+
78
+ ### Fixed / Added — `HazoUiEtaProgress`/`HazoUiProgressBar`
79
+
80
+ - Bar fill used `bg-accent`, which reads as a near-invisible low-contrast tint
81
+ against several theme presets — switched to `bg-primary` to match the rest
82
+ of the design system's progress/loading affordances.
83
+ - New optional `showPercent` (percentage text next to the label, default
84
+ `false`) and `size` (bar height in px, default `8`) props on both
85
+ `HazoUiEtaProgress` and `HazoUiProgressBar`. Purely additive — no existing
86
+ caller's behavior changes.
87
+
8
88
  ## v6.12.0 (2026-09-20)
9
89
 
10
90
  ### Changed — migrated onto the canonical `hazo_core/i18n` bridge
package/README.md CHANGED
@@ -81,6 +81,10 @@ The `tw-animate-css` import replaces the legacy `tailwindcss-animate` plugin (us
81
81
 
82
82
  ---
83
83
 
84
+ ## Internationalisation
85
+
86
+ All built-in user-facing strings (dialogs, kanban editor, markdown editor, image cropper, memory dropdown, celebration, date-range selector, etc.) resolve through `createPackageT("hazo_ui", en)` from `hazo_core/i18n`. The English catalogue lives in `src/locales/en.json` (133 keys). Prop defaults for labels resolve as `prop ?? t(key)`, so explicit props always override translations. Other locales are generated through `hazo_i18n` (see the test-app `/translations` page).
87
+
84
88
  ## Color Configuration
85
89
 
86
90
  hazo_ui provides a centralized configuration system for customizing button and header colors across all components. You can set colors globally using `set_hazo_ui_config()` or override them per-component using props.
@@ -99,7 +99,7 @@ The following peer dependencies are required:
99
99
  - [ ] React (^18.0.0 or ^19.0.0)
100
100
  - [ ] React DOM (^18.0.0 or ^19.0.0)
101
101
  - [ ] hazo_core (^1.2.0)
102
- - [ ] hazo_state (^0.1.0) — the `hazo_ui` barrel statically imports `hazo_state/client` (for `HazoUiEtaProgress`), so this is **required** even if you don't use the ETA progress bar.
102
+ - [ ] hazo_state (^0.6.3) — the `hazo_ui` barrel statically imports `hazo_state/client` (for `HazoUiEtaProgress`), so this is **required** even if you don't use the ETA progress bar.
103
103
 
104
104
  If not already installed:
105
105
 
@@ -143,7 +143,7 @@ npm install @radix-ui/react-dialog @radix-ui/react-popover @radix-ui/react-selec
143
143
  - **Slider**: `@radix-ui/react-slider`
144
144
  - **InputAffix**: No additional dependencies (uses the base shadcn/ui `Input` component)
145
145
  - **HazoUiProgressBar, useEtaProgress, median, computeEta, easeToward**: No additional dependencies
146
- - **HazoUiEtaProgress**: `hazo_state` (^0.1.0) — a **required** peer dep of hazo_ui (the barrel imports it unconditionally), so it is always installed regardless of which components you use.
146
+ - **HazoUiEtaProgress**: `hazo_state` (^0.6.3) — a **required** peer dep of hazo_ui (the barrel imports it unconditionally), so it is always installed regardless of which components you use.
147
147
 
148
148
  ### 4. Configure Tailwind CSS
149
149