@cahyo-dimas/freeday 1.52.0 → 1.52.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,33 @@
3
3
  Semua perubahan penting dicatat di sini. Format longgar mengikuti
4
4
  [Keep a Changelog](https://keepachangelog.com/); tiap versi = git tag.
5
5
 
6
+ ## [1.52.1] — 2026-08-24
7
+ ### Docs
8
+ - **1.51.1's close-watcher caveat named the wrong condition** (#048). It said a `showModal()` with
9
+ no transient activation — "from a timer, or after an `await` that outlived the click" — has its
10
+ close watcher grouped with the dialog below, so one Escape closes both. A consumer audited three
11
+ call sites of exactly that shape and could not reproduce it. They were right, and the reason is
12
+ that the line is **sticky** activation, not transient: grouping needs a page that has received no
13
+ user input *at all*. Six seconds after a single click — transient activation long expired,
14
+ `navigator.userActivation.isActive === false` — two stacked overlays are still independent. So the
15
+ grouping is reachable in a test harness and nowhere else, which is exactly where the kit met it.
16
+ - **What the advice was protecting was real, but it is a different failure.** Open either overlay
17
+ from script and the second one's `cancel` event arrives **non-cancelable**: Escape still closes
18
+ only the topmost, but `preventDefault()` on it is ignored, so an "unsaved changes, stay open" guard
19
+ on that dialog silently stops working. Only when both overlays are opened by a real gesture is that
20
+ veto available. The Modal entry now says this instead.
21
+ - The note also proposed documenting that the typed wrappers' `@cancel.prevent` makes them immune to
22
+ the grouping. **Measured, they are not** — in a page with no activation the `cancel` event is not
23
+ cancelable at all, so preventing it does nothing and both dialogs close regardless. That claim is
24
+ not in the docs, and this is why.
25
+ ### Added — guards
26
+ - `browser/overlay-stack.mjs` gains the whole matrix as one assertion — four ways to open two
27
+ overlays × what one Escape leaves open × whether it could be refused — so a row changing is
28
+ reported as news about the browser rather than a regression in the kit. Verified identical on
29
+ Chromium 133 (the suite's engine) and Chrome 151.
30
+ - The fixture records each `cancel` event's `cancelable` flag; nothing prevents it, so the older
31
+ tests measure what they always did.
32
+
6
33
  ## [1.52.0] — 2026-08-24
7
34
  ### Fixed
8
35
  - **A chart's legend, bar values and donut centre were exposed to assistive tech after all** (#047).
package/COMPONENTS.md CHANGED
@@ -1061,10 +1061,19 @@ that. Escape closes the topmost first, so cancelling returns to the still-open d
1061
1061
  Escape then closes the drawer. Closing them out of order is fine too: closing the drawer while the
1062
1062
  modal is up leaves the modal open, painted and dismissible.
1063
1063
 
1064
- One caveat, and it is the browser's rather than the kit's: **open each overlay from the gesture
1065
- that asked for it.** A `showModal()` that runs with no user activation from a timer, or after an
1066
- `await` that outlived the click — has its close watcher grouped with the dialog below it, and then
1067
- a single Escape closes both at once instead of the topmost only.
1064
+ One caveat, and it is the browser's rather than the kit's: **the second overlay's Escape can only
1065
+ be refused if both were opened by a real gesture.** A `showModal()` that runs from script — a timer,
1066
+ or after an `await` that outlived the click — still closes only the topmost, but its `cancel` event
1067
+ arrives **non-cancelable**, so `preventDefault()` on it is ignored and an "unsaved changes, stay
1068
+ open" guard silently stops working. Routing Escape through app state instead, which is what the
1069
+ typed wrappers do, is unaffected: the dialog closes and your state follows it.
1070
+
1071
+ *Correction to 1.51.1, which said such a dialog has its close watcher grouped with the one below so
1072
+ that a single Escape closes both.* That happens only on a page that has received **no user input at
1073
+ all** — a test harness, never an app; six seconds after one click the overlays are still
1074
+ independent. Open overlays with real clicks in a test, or a stacking assertion fails for a reason
1075
+ that is not the kit. Both rules measured on Chromium 133 and 151, and pinned as a matrix in
1076
+ `browser/overlay-stack.mjs`.
1068
1077
 
1069
1078
  ## Drawer — `.fdy-drawer`
1070
1079
  > **Typed wrapper: `<FdyDrawer>`** — Vue (`:open` + `@close`) · React (`open` + `onClose`) · Blazor (`@bind-Open`). In those stacks use the wrapper; the markup below is for stacks without an adapter (and is what the wrapper renders).
package/README.id.md CHANGED
@@ -5,7 +5,7 @@
5
5
  > **Lebih banyak _free day_ buat dev — UI kit-nya sudah siap pakai.**
6
6
 
7
7
  [![Live docs](https://img.shields.io/badge/docs-live-2050d8?style=flat-square)](https://cahyo-dimas.github.io/freeday-ui-kit/)
8
- [![Release](https://img.shields.io/badge/release-v1.52.0-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v1.52.0)
8
+ [![Release](https://img.shields.io/badge/release-v1.52.1-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v1.52.1)
9
9
 
10
10
  UI KIT yang token-driven & framework-agnostic — satu sumber kebenaran untuk warna, tipografi,
11
11
  spasi, dan komponen. Blueprint: `docs/superpowers/specs/2026-07-21-freeday-ui-kit-design.md`.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  > **More free days for devs — the UI kit is ready to use.**
6
6
 
7
7
  [![Live docs](https://img.shields.io/badge/docs-live-2050d8?style=flat-square)](https://cahyo-dimas.github.io/freeday-ui-kit/)
8
- [![Release](https://img.shields.io/badge/release-v1.52.0-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v1.52.0)
8
+ [![Release](https://img.shields.io/badge/release-v1.52.1-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v1.52.1)
9
9
 
10
10
  A token-driven, framework-agnostic UI kit — one source of truth for color, typography,
11
11
  spacing, and components. Blueprint: `docs/superpowers/specs/2026-07-21-freeday-ui-kit-design.md`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cahyo-dimas/freeday",
3
- "version": "1.52.0",
3
+ "version": "1.52.1",
4
4
  "description": "Freeday — token-driven, framework-agnostic UI KIT (design source-of-truth).",
5
5
  "type": "module",
6
6
  "license": "MIT",