@cahyo-dimas/freeday 3.9.1 → 3.9.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.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,64 @@ benar. Perubahan seperti itu ditulis di bawah `### Changed: BREAKING (types)`
9
9
  lama → tipe baru, dan cara menyempitkannya — bukan di bawah `### Added`, betapapun aditifnya dari
10
10
  sisi kit.
11
11
 
12
+ ## [3.9.3] - 2026-10-26
13
+
14
+ **Perbaikan 3.9.2 tidak pernah bisa bekerja, dan penjaganya hijau untuknya.** Penetralan
15
+ `prefers-reduced-motion` yang dikirim kemarin memakai `.fdy-app__backdrop`, spesifisitas `(0,1,0)`,
16
+ sementara keadaan terbukanya `.fdy-app--nav-open .fdy-app__backdrop` adalah `(0,2,0)` dan juga
17
+ mendeklarasikan transisi. Jadi penetralannya menang saat drawer tertutup dan kalah saat drawer
18
+ terbuka, yaitu satu-satunya saat ia penting. Yang menanam bomnya 3.9.1 sendiri: ia yang menambahkan
19
+ `transition` ke aturan keadaan terbuka.
20
+
21
+ Diukur dengan reduced motion diemulasi, bukan disimpulkan: tertutup melaporkan `none`, terbuka
22
+ melaporkan `opacity 1e-06s cubic-bezier(0.2, 0, 0, 1), visibility 1e-06s linear`.
23
+
24
+ ### Fixed
25
+ - **Keempat selektor yang mendeklarasikan transisi backdrop dinetralkan, bukan yang paling lemah**
26
+ (`#089`). `.fdy-app__backdrop`, keadaan terbukanya, dan kedua padanannya di mode overlay.
27
+ - **Penjaganya menuntut selektor yang SAMA PERSIS**, bukan nama elemennya. Versi pertama hanya
28
+ memeriksa apakah nama itu muncul di suatu tempat di dalam blok reduced-motion, dan itulah
29
+ sebabnya ia hijau untuk perbaikan yang mati. Sekarang spesifisitasnya terjaga oleh konstruksi,
30
+ dan merahnya dibuktikan dengan mengembalikan bentuk 3.9.2: ia menyebut ketiga selektor yang
31
+ hilang dengan nama.
32
+
33
+ ### Catatan: kelas bug ini dapat direproduksi di laptop
34
+ Sepanjang penyelidikan ini dicatat bahwa hanya perangkat sungguhan yang dapat menemukannya. Untuk
35
+ yang satu ini itu tidak benar. Chrome ikut menjepit durasi transisi ke `1e-06s` di bawah
36
+ `emulateMedia({ reducedMotion: 'reduce' })`, jadi cacat spesifisitasnya terukur di mesin mana pun.
37
+ Yang tetap tidak dapat direproduksi di Chromium adalah akibatnya, yakni properti yang tersangkut di
38
+ nilai awal; tetapi kontrak yang mencegahnya, `transition` wajib `none` di kedua keadaan, dapat
39
+ diperiksa di mana saja.
40
+
41
+ ## [3.9.2] - 2026-10-26
42
+
43
+ **Satu setelan aksesibilitas, dan sebuah scrim yang tak terlihat tetapi tetap menangkap tap.**
44
+ Pemilik app ronda melaporkan dua gejala di iPhone 7 yang tampak terpisah: layar tinggal redup
45
+ sesudah drawer ditutup, dan setiap navigasi butuh dua ketukan. Keduanya satu sebab, dan yang
46
+ memecahkannya dua foto dari perangkat yang sama, identik kecuali Reduce Motion.
47
+
48
+ Dengan setelan itu menyala, transisi terhitung melaporkan `opacity 0.000001s` dan backdrop diam di
49
+ `opacity 0` serta `visibility hidden` selama tiga detik, dengan kelas `--nav-open` hadir di setiap
50
+ sampel. Dengan setelan itu mati, deret yang sama berjalan 0.87 lalu 1.00. WebKit memaksa durasi
51
+ transisi ke satu mikrodetik di bawah Reduce Motion, dan pada durasi itu transisinya tidak pernah
52
+ berjalan: propertinya tersangkut di nilai awal. Bukan lambat, tidak pernah mulai.
53
+
54
+ ### Fixed
55
+ - **`.fdy-app__backdrop` dinetralkan di bawah `prefers-reduced-motion`** (`#088`). Aturan yang sama
56
+ mengatur `pointer-events` bersama `opacity`, jadi yang tersangkut bukan sekadar tampilan: foto
57
+ perangkat merekam `pointer-events: auto` berdampingan dengan `visibility: hidden`, yaitu scrim
58
+ tak terlihat yang tetap menangkap tap. Ketukan pertama pengguna hilang di sana dan ketukan kedua
59
+ yang bekerja. Sidebar sudah dinetralkan sejak lama; backdrop terlewat, dan backdrop yang
60
+ menggerbangi interaksi.
61
+ - **`.fdy-chart__tip` ikut dinetralkan.** Bentuk cacat yang sama persis, ditemukan oleh audit yang
62
+ sama: transisi yang juga mengatur `pointer-events`, tanpa pagar reduced-motion. `.fdy-tooltip`
63
+ sudah aman sejak lama.
64
+ - **Penjaga yang mengunci pelajarannya, bukan kasusnya.** Setiap aturan yang mentransisikan
65
+ properti sambil mengatur `pointer-events` wajib punya pasangannya di dalam blok
66
+ `prefers-reduced-motion: reduce`. Statis, seperti penjaga `visibility` di 3.9.1, dan karena
67
+ alasan yang sama: mesin yang bisa melihat cacat ini bukan mesin yang menjalankan uji kit, dan di
68
+ sini bahkan bukan mesin mana pun tanpa setelan aksesibilitas itu menyala.
69
+
12
70
  ## [3.9.1] - 2026-10-26
13
71
 
14
72
  **Satu properti yang tidak boleh ditransisikan, dan sebuah HP yang membuktikannya.** Sesudah drawer
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-v3.9.1-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.9.1)
8
+ [![Release](https://img.shields.io/badge/release-v3.9.3-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.9.3)
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-v3.9.1-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.9.1)
8
+ [![Release](https://img.shields.io/badge/release-v3.9.3-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.9.3)
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`.
@@ -1408,7 +1408,27 @@ a { color: var(--color-primary-strong); }
1408
1408
  .fdy-app__main{padding:var(--space-5);}
1409
1409
  .fdy-app__topbar{padding:0 var(--space-4);}
1410
1410
  }
1411
- @media (prefers-reduced-motion:reduce){.fdy-app__sidebar{transition:none;}}
1411
+ /* Backdrop ikut dinetralkan, dan ini BUKAN soal selera gerak. WebKit memaksa durasi transisi ke
1412
+ * 0.000001s saat Reduce Motion menyala, dan pada durasi itu transisinya tidak pernah berjalan:
1413
+ * propertinya tersangkut di nilai AWAL selamanya. Diukur di iPhone 7 dengan setelan itu menyala,
1414
+ * tiga detik sesudah drawer terbuka, dengan kelas `--nav-open` SUDAH terpasang di setiap sampel:
1415
+ * `opacity` diam di 0 dan `visibility` diam di `hidden`, sementara `pointer-events` sudah `auto`.
1416
+ * Scrim yang tak terlihat tetapi menangkap tap, jadi ketukan pertama pengguna hilang dan ketukan
1417
+ * kedua yang bekerja. Setelan yang sama dimatikan, deret yang sama berjalan 0.87 lalu 1.00.
1418
+ * Sidebar sudah dinetralkan sejak lama; backdrop terlewat, dan ia yang menggerbangi interaksi. */
1419
+ @media (prefers-reduced-motion:reduce){
1420
+ .fdy-app__sidebar{transition:none;}
1421
+ /* KEEMPAT selektor yang mendeklarasikan transisi backdrop, bukan hanya yang paling lemah.
1422
+ `.fdy-app__backdrop` sendirian berspesifisitas (0,1,0) dan kalah dari keadaan terbukanya,
1423
+ `.fdy-app--nav-open .fdy-app__backdrop` (0,2,0), sehingga penetralan ini diam-diam tidak
1424
+ berlaku justru pada saat drawer terbuka, yaitu satu-satunya saat ia penting. Diukur dengan
1425
+ reduced motion diemulasi: tertutup melaporkan `none`, terbuka melaporkan
1426
+ `opacity 1e-06s, visibility 1e-06s`. */
1427
+ .fdy-app__backdrop,
1428
+ .fdy-app--nav-open .fdy-app__backdrop,
1429
+ .fdy-app--nav-overlay .fdy-app__backdrop,
1430
+ .fdy-app--nav-overlay.fdy-app--nav-open .fdy-app__backdrop{transition:none;}
1431
+ }
1412
1432
 
1413
1433
  /* Freeday. App bar (standalone top bar: brand · actions · spacer).
1414
1434
  * Distinct from .fdy-app__topbar (which is bound to the shell grid). Use anywhere;
@@ -2035,6 +2055,12 @@ a { color: var(--color-primary-strong); }
2035
2055
  .fdy-chart-xy__bar{transition:opacity var(--dur-fast) var(--ease-standard);}
2036
2056
  .fdy-chart-xy__band{fill:transparent;cursor:pointer;}
2037
2057
 
2058
+ /* Sama sebabnya dengan `.fdy-app__backdrop`: transisi yang juga menggerbangi `pointer-events` dapat
2059
+ * tersangkut di nilai awal ketika WebKit memaksa durasinya ke nol di bawah Reduce Motion, dan yang
2060
+ * tersisa adalah elemen tak terlihat yang tetap menangkap tap. Tooltip sudah dinetralkan sejak lama
2061
+ * untuk alasan yang sama; tip chart terlewat. */
2062
+ @media (prefers-reduced-motion:reduce){.fdy-chart__tip{transition:none;}}
2063
+
2038
2064
  /* Freeday. Chip (tag / removable filter) */
2039
2065
  .fdy-chip{display:inline-flex;align-items:center;gap:var(--space-2);height:1.75rem;padding:0 var(--space-3);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--color-text);background:var(--color-surface-3);border:var(--bw) solid var(--color-border);}
2040
2066
  .fdy-chip--primary{color:var(--color-primary-strong);background:var(--color-primary-soft);border-color:rgba(var(--color-primary-rgb),.22);}
package/dist/freeday.css CHANGED
@@ -231,7 +231,27 @@ a { color: var(--color-primary-strong); }
231
231
  .fdy-app__main{padding:var(--space-5);}
232
232
  .fdy-app__topbar{padding:0 var(--space-4);}
233
233
  }
234
- @media (prefers-reduced-motion:reduce){.fdy-app__sidebar{transition:none;}}
234
+ /* Backdrop ikut dinetralkan, dan ini BUKAN soal selera gerak. WebKit memaksa durasi transisi ke
235
+ * 0.000001s saat Reduce Motion menyala, dan pada durasi itu transisinya tidak pernah berjalan:
236
+ * propertinya tersangkut di nilai AWAL selamanya. Diukur di iPhone 7 dengan setelan itu menyala,
237
+ * tiga detik sesudah drawer terbuka, dengan kelas `--nav-open` SUDAH terpasang di setiap sampel:
238
+ * `opacity` diam di 0 dan `visibility` diam di `hidden`, sementara `pointer-events` sudah `auto`.
239
+ * Scrim yang tak terlihat tetapi menangkap tap, jadi ketukan pertama pengguna hilang dan ketukan
240
+ * kedua yang bekerja. Setelan yang sama dimatikan, deret yang sama berjalan 0.87 lalu 1.00.
241
+ * Sidebar sudah dinetralkan sejak lama; backdrop terlewat, dan ia yang menggerbangi interaksi. */
242
+ @media (prefers-reduced-motion:reduce){
243
+ .fdy-app__sidebar{transition:none;}
244
+ /* KEEMPAT selektor yang mendeklarasikan transisi backdrop, bukan hanya yang paling lemah.
245
+ `.fdy-app__backdrop` sendirian berspesifisitas (0,1,0) dan kalah dari keadaan terbukanya,
246
+ `.fdy-app--nav-open .fdy-app__backdrop` (0,2,0), sehingga penetralan ini diam-diam tidak
247
+ berlaku justru pada saat drawer terbuka, yaitu satu-satunya saat ia penting. Diukur dengan
248
+ reduced motion diemulasi: tertutup melaporkan `none`, terbuka melaporkan
249
+ `opacity 1e-06s, visibility 1e-06s`. */
250
+ .fdy-app__backdrop,
251
+ .fdy-app--nav-open .fdy-app__backdrop,
252
+ .fdy-app--nav-overlay .fdy-app__backdrop,
253
+ .fdy-app--nav-overlay.fdy-app--nav-open .fdy-app__backdrop{transition:none;}
254
+ }
235
255
 
236
256
  /* Freeday. App bar (standalone top bar: brand · actions · spacer).
237
257
  * Distinct from .fdy-app__topbar (which is bound to the shell grid). Use anywhere;
@@ -858,6 +878,12 @@ a { color: var(--color-primary-strong); }
858
878
  .fdy-chart-xy__bar{transition:opacity var(--dur-fast) var(--ease-standard);}
859
879
  .fdy-chart-xy__band{fill:transparent;cursor:pointer;}
860
880
 
881
+ /* Sama sebabnya dengan `.fdy-app__backdrop`: transisi yang juga menggerbangi `pointer-events` dapat
882
+ * tersangkut di nilai awal ketika WebKit memaksa durasinya ke nol di bawah Reduce Motion, dan yang
883
+ * tersisa adalah elemen tak terlihat yang tetap menangkap tap. Tooltip sudah dinetralkan sejak lama
884
+ * untuk alasan yang sama; tip chart terlewat. */
885
+ @media (prefers-reduced-motion:reduce){.fdy-chart__tip{transition:none;}}
886
+
861
887
  /* Freeday. Chip (tag / removable filter) */
862
888
  .fdy-chip{display:inline-flex;align-items:center;gap:var(--space-2);height:1.75rem;padding:0 var(--space-3);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--color-text);background:var(--color-surface-3);border:var(--bw) solid var(--color-border);}
863
889
  .fdy-chip--primary{color:var(--color-primary-strong);background:var(--color-primary-soft);border-color:rgba(var(--color-primary-rgb),.22);}
@@ -191,7 +191,7 @@ live docs also have a copy button per component.
191
191
  ```bash
192
192
  npm i @cahyo-dimas/freeday
193
193
  ```
194
- Lands in `package.json` as `"@cahyo-dimas/freeday": "^3.9.1"` (public npm package). `dist/` is
194
+ Lands in `package.json` as `"@cahyo-dimas/freeday": "^3.9.3"` (public npm package). `dist/` is
195
195
  committed and published → no build step; `npm ci` runs without auth.
196
196
 
197
197
  ### 2. Import the CSS + enhancers **once** in your entry (`src/main.ts`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cahyo-dimas/freeday",
3
- "version": "3.9.1",
3
+ "version": "3.9.3",
4
4
  "description": "Freeday: token-driven, framework-agnostic UI KIT (design source-of-truth).",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -152,4 +152,24 @@
152
152
  .fdy-app__main{padding:var(--space-5);}
153
153
  .fdy-app__topbar{padding:0 var(--space-4);}
154
154
  }
155
- @media (prefers-reduced-motion:reduce){.fdy-app__sidebar{transition:none;}}
155
+ /* Backdrop ikut dinetralkan, dan ini BUKAN soal selera gerak. WebKit memaksa durasi transisi ke
156
+ * 0.000001s saat Reduce Motion menyala, dan pada durasi itu transisinya tidak pernah berjalan:
157
+ * propertinya tersangkut di nilai AWAL selamanya. Diukur di iPhone 7 dengan setelan itu menyala,
158
+ * tiga detik sesudah drawer terbuka, dengan kelas `--nav-open` SUDAH terpasang di setiap sampel:
159
+ * `opacity` diam di 0 dan `visibility` diam di `hidden`, sementara `pointer-events` sudah `auto`.
160
+ * Scrim yang tak terlihat tetapi menangkap tap, jadi ketukan pertama pengguna hilang dan ketukan
161
+ * kedua yang bekerja. Setelan yang sama dimatikan, deret yang sama berjalan 0.87 lalu 1.00.
162
+ * Sidebar sudah dinetralkan sejak lama; backdrop terlewat, dan ia yang menggerbangi interaksi. */
163
+ @media (prefers-reduced-motion:reduce){
164
+ .fdy-app__sidebar{transition:none;}
165
+ /* KEEMPAT selektor yang mendeklarasikan transisi backdrop, bukan hanya yang paling lemah.
166
+ `.fdy-app__backdrop` sendirian berspesifisitas (0,1,0) dan kalah dari keadaan terbukanya,
167
+ `.fdy-app--nav-open .fdy-app__backdrop` (0,2,0), sehingga penetralan ini diam-diam tidak
168
+ berlaku justru pada saat drawer terbuka, yaitu satu-satunya saat ia penting. Diukur dengan
169
+ reduced motion diemulasi: tertutup melaporkan `none`, terbuka melaporkan
170
+ `opacity 1e-06s, visibility 1e-06s`. */
171
+ .fdy-app__backdrop,
172
+ .fdy-app--nav-open .fdy-app__backdrop,
173
+ .fdy-app--nav-overlay .fdy-app__backdrop,
174
+ .fdy-app--nav-overlay.fdy-app--nav-open .fdy-app__backdrop{transition:none;}
175
+ }
@@ -53,3 +53,9 @@
53
53
  .fdy-chart-xy__dot{stroke:var(--color-surface);stroke-width:1;}
54
54
  .fdy-chart-xy__bar{transition:opacity var(--dur-fast) var(--ease-standard);}
55
55
  .fdy-chart-xy__band{fill:transparent;cursor:pointer;}
56
+
57
+ /* Sama sebabnya dengan `.fdy-app__backdrop`: transisi yang juga menggerbangi `pointer-events` dapat
58
+ * tersangkut di nilai awal ketika WebKit memaksa durasinya ke nol di bawah Reduce Motion, dan yang
59
+ * tersisa adalah elemen tak terlihat yang tetap menangkap tap. Tooltip sudah dinetralkan sejak lama
60
+ * untuk alasan yang sama; tip chart terlewat. */
61
+ @media (prefers-reduced-motion:reduce){.fdy-chart__tip{transition:none;}}