@cahyo-dimas/freeday 3.9.2 → 3.9.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/CHANGELOG.md +60 -0
- package/README.id.md +1 -1
- package/README.md +1 -1
- package/dist/freeday.bundle.css +39 -1
- package/dist/freeday.css +39 -1
- package/docs/getting-started.md +1 -1
- package/package.json +1 -1
- package/src/base.css +26 -0
- package/src/components/app-shell.css +13 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,66 @@ 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.4] - 2026-10-26
|
|
13
|
+
|
|
14
|
+
**Sembilan dari lima puluh enam, dan empat puluh delapan sisanya ranjau.** Tiga rilis berturut-turut
|
|
15
|
+
menambal transisi yang tersangkut di bawah Reduce Motion satu per satu: scrim drawer di 3.9.2, yang
|
|
16
|
+
spesifisitasnya salah dan diperbaiki di 3.9.3, lalu centang checkbox yang dilaporkan dari perangkat
|
|
17
|
+
yang sama. Yang ketiga itu lolos dari penjaga 3.9.3 karena penjaga itu hanya memeriksa transisi yang
|
|
18
|
+
menyentuh `pointer-events`, dan centang checkbox tidak menyentuhnya: ia cuma `transform: scale(0)`
|
|
19
|
+
menjadi `scale(1)`. Inputnya benar-benar tercentang selama ini; centangnya yang tidak pernah
|
|
20
|
+
digambar.
|
|
21
|
+
|
|
22
|
+
Hitungannya yang menghentikan pola menambal: kit mentransisikan sesuatu di 56 selektor dan
|
|
23
|
+
menetralkan 9.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
- **Setiap transisi dinetralkan di bawah `prefers-reduced-motion`** (`#090`), satu aturan di
|
|
27
|
+
`src/base.css` alih-alih daftar yang dipelihara tangan. WebKit menjepit durasi transisi ke
|
|
28
|
+
0.000001s ketika setelan itu menyala, dan pada durasi itu transisinya tidak pernah berjalan:
|
|
29
|
+
propertinya tersangkut di nilai awal. Akibatnya bukan "kurang halus" melainkan keadaan yang salah
|
|
30
|
+
di layar.
|
|
31
|
+
- **`transition:none`, bukan durasi mungil.** Reset aksesibilitas yang beredar luas memakai
|
|
32
|
+
`transition-duration: 0.01ms` supaya `transitionend` tetap menyala, dan durasi mungil itu persis
|
|
33
|
+
bentuk yang menyangkut di WebKit; reset itu akan memperburuk cacat ini. Satu-satunya yang pernah
|
|
34
|
+
menunggu `transitionend` di kit ini adalah toast, dan ia sudah punya cadangan
|
|
35
|
+
`setTimeout(finish, 400)`.
|
|
36
|
+
- **Animasi sengaja tidak disentuh.** Kit memasangnya lewat `prefers-reduced-motion: no-preference`,
|
|
37
|
+
jadi ia opt-in dan sudah mati di sana, sementara `.fdy-spinner` dan `.fdy-progress` punya
|
|
38
|
+
perlakuan bernuansa sendiri yang memang harus bertahan.
|
|
39
|
+
- **Penjaganya menuntut aturan menyeluruhnya ada**, dan menolak bentuk durasi-mungil. Dua penjaga
|
|
40
|
+
sebelumnya hijau untuk kit yang masih punya ranjau; yang ini tidak bisa, sebab ia tidak
|
|
41
|
+
mendaftar selektor.
|
|
42
|
+
|
|
43
|
+
## [3.9.3] - 2026-10-26
|
|
44
|
+
|
|
45
|
+
**Perbaikan 3.9.2 tidak pernah bisa bekerja, dan penjaganya hijau untuknya.** Penetralan
|
|
46
|
+
`prefers-reduced-motion` yang dikirim kemarin memakai `.fdy-app__backdrop`, spesifisitas `(0,1,0)`,
|
|
47
|
+
sementara keadaan terbukanya `.fdy-app--nav-open .fdy-app__backdrop` adalah `(0,2,0)` dan juga
|
|
48
|
+
mendeklarasikan transisi. Jadi penetralannya menang saat drawer tertutup dan kalah saat drawer
|
|
49
|
+
terbuka, yaitu satu-satunya saat ia penting. Yang menanam bomnya 3.9.1 sendiri: ia yang menambahkan
|
|
50
|
+
`transition` ke aturan keadaan terbuka.
|
|
51
|
+
|
|
52
|
+
Diukur dengan reduced motion diemulasi, bukan disimpulkan: tertutup melaporkan `none`, terbuka
|
|
53
|
+
melaporkan `opacity 1e-06s cubic-bezier(0.2, 0, 0, 1), visibility 1e-06s linear`.
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
- **Keempat selektor yang mendeklarasikan transisi backdrop dinetralkan, bukan yang paling lemah**
|
|
57
|
+
(`#089`). `.fdy-app__backdrop`, keadaan terbukanya, dan kedua padanannya di mode overlay.
|
|
58
|
+
- **Penjaganya menuntut selektor yang SAMA PERSIS**, bukan nama elemennya. Versi pertama hanya
|
|
59
|
+
memeriksa apakah nama itu muncul di suatu tempat di dalam blok reduced-motion, dan itulah
|
|
60
|
+
sebabnya ia hijau untuk perbaikan yang mati. Sekarang spesifisitasnya terjaga oleh konstruksi,
|
|
61
|
+
dan merahnya dibuktikan dengan mengembalikan bentuk 3.9.2: ia menyebut ketiga selektor yang
|
|
62
|
+
hilang dengan nama.
|
|
63
|
+
|
|
64
|
+
### Catatan: kelas bug ini dapat direproduksi di laptop
|
|
65
|
+
Sepanjang penyelidikan ini dicatat bahwa hanya perangkat sungguhan yang dapat menemukannya. Untuk
|
|
66
|
+
yang satu ini itu tidak benar. Chrome ikut menjepit durasi transisi ke `1e-06s` di bawah
|
|
67
|
+
`emulateMedia({ reducedMotion: 'reduce' })`, jadi cacat spesifisitasnya terukur di mesin mana pun.
|
|
68
|
+
Yang tetap tidak dapat direproduksi di Chromium adalah akibatnya, yakni properti yang tersangkut di
|
|
69
|
+
nilai awal; tetapi kontrak yang mencegahnya, `transition` wajib `none` di kedua keadaan, dapat
|
|
70
|
+
diperiksa di mana saja.
|
|
71
|
+
|
|
12
72
|
## [3.9.2] - 2026-10-26
|
|
13
73
|
|
|
14
74
|
**Satu setelan aksesibilitas, dan sebuah scrim yang tak terlihat tetapi tetap menangkap tap.**
|
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
|
[](https://cahyo-dimas.github.io/freeday-ui-kit/)
|
|
8
|
-
[](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.9.4)
|
|
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
|
[](https://cahyo-dimas.github.io/freeday-ui-kit/)
|
|
8
|
-
[](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.9.4)
|
|
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/dist/freeday.bundle.css
CHANGED
|
@@ -1217,6 +1217,32 @@ a { color: var(--color-primary-strong); }
|
|
|
1217
1217
|
*, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
|
|
1218
1218
|
}
|
|
1219
1219
|
|
|
1220
|
+
/* ===========================================================================
|
|
1221
|
+
* Reduce Motion: SETIAP transisi dinetralkan, bukan daftar yang dipelihara tangan.
|
|
1222
|
+
*
|
|
1223
|
+
* WebKit menjepit durasi transisi ke 0.000001s ketika setelan itu menyala, dan pada durasi itu
|
|
1224
|
+
* transisinya tidak pernah berjalan: propertinya tersangkut di nilai AWAL, selamanya. Akibatnya
|
|
1225
|
+
* bukan "kurang halus" melainkan keadaan yang salah di layar. Terukur di iPhone 7 tiga kali:
|
|
1226
|
+
* scrim drawer yang tinggal gelap sambil tetap menangkap tap, dan centang checkbox yang tak
|
|
1227
|
+
* pernah digambar padahal inputnya benar-benar tercentang.
|
|
1228
|
+
*
|
|
1229
|
+
* Sebelum aturan ini, kit menetralkan sembilan selektor dari lima puluh enam yang mentransisikan
|
|
1230
|
+
* sesuatu. Empat puluh delapan sisanya ranjau yang menunggu, dan tiga sudah meledak di tangan satu
|
|
1231
|
+
* pemilik app. Menambal yang keempat adalah cara kita sampai di sini.
|
|
1232
|
+
*
|
|
1233
|
+
* `transition: none`, BUKAN `transition-duration: 0.01ms` yang biasa beredar sebagai reset
|
|
1234
|
+
* aksesibilitas: durasi mungil itu persis bentuk yang menyangkut di WebKit. Satu-satunya yang
|
|
1235
|
+
* pernah menunggu `transitionend` di kit ini adalah toast, dan ia sudah punya cadangan
|
|
1236
|
+
* `setTimeout(finish, 400)` untuk kasus event itu tak pernah datang.
|
|
1237
|
+
*
|
|
1238
|
+
* ANIMASI sengaja tidak disentuh: kit memasangnya lewat `prefers-reduced-motion: no-preference`,
|
|
1239
|
+
* jadi ia opt-in dan sudah mati di sini, sementara `--spinner` dan `--progress` punya perlakuan
|
|
1240
|
+
* bernuansa sendiri yang memang harus bertahan.
|
|
1241
|
+
* ======================================================================== */
|
|
1242
|
+
@media (prefers-reduced-motion:reduce){
|
|
1243
|
+
*,*::before,*::after{transition:none !important;}
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1220
1246
|
/* Freeday. Accordion (native <details>/<summary>, zero-JS) */
|
|
1221
1247
|
/* position:relative, containing block for out-of-flow panel content (see base.css). NOT redundant
|
|
1222
1248
|
with the panel's reveal animation: that animation gives the panel a transform (which happens to
|
|
@@ -1416,7 +1442,19 @@ a { color: var(--color-primary-strong); }
|
|
|
1416
1442
|
* Scrim yang tak terlihat tetapi menangkap tap, jadi ketukan pertama pengguna hilang dan ketukan
|
|
1417
1443
|
* kedua yang bekerja. Setelan yang sama dimatikan, deret yang sama berjalan 0.87 lalu 1.00.
|
|
1418
1444
|
* Sidebar sudah dinetralkan sejak lama; backdrop terlewat, dan ia yang menggerbangi interaksi. */
|
|
1419
|
-
@media (prefers-reduced-motion:reduce){
|
|
1445
|
+
@media (prefers-reduced-motion:reduce){
|
|
1446
|
+
.fdy-app__sidebar{transition:none;}
|
|
1447
|
+
/* KEEMPAT selektor yang mendeklarasikan transisi backdrop, bukan hanya yang paling lemah.
|
|
1448
|
+
`.fdy-app__backdrop` sendirian berspesifisitas (0,1,0) dan kalah dari keadaan terbukanya,
|
|
1449
|
+
`.fdy-app--nav-open .fdy-app__backdrop` (0,2,0), sehingga penetralan ini diam-diam tidak
|
|
1450
|
+
berlaku justru pada saat drawer terbuka, yaitu satu-satunya saat ia penting. Diukur dengan
|
|
1451
|
+
reduced motion diemulasi: tertutup melaporkan `none`, terbuka melaporkan
|
|
1452
|
+
`opacity 1e-06s, visibility 1e-06s`. */
|
|
1453
|
+
.fdy-app__backdrop,
|
|
1454
|
+
.fdy-app--nav-open .fdy-app__backdrop,
|
|
1455
|
+
.fdy-app--nav-overlay .fdy-app__backdrop,
|
|
1456
|
+
.fdy-app--nav-overlay.fdy-app--nav-open .fdy-app__backdrop{transition:none;}
|
|
1457
|
+
}
|
|
1420
1458
|
|
|
1421
1459
|
/* Freeday. App bar (standalone top bar: brand · actions · spacer).
|
|
1422
1460
|
* Distinct from .fdy-app__topbar (which is bound to the shell grid). Use anywhere;
|
package/dist/freeday.css
CHANGED
|
@@ -40,6 +40,32 @@ a { color: var(--color-primary-strong); }
|
|
|
40
40
|
*, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
/* ===========================================================================
|
|
44
|
+
* Reduce Motion: SETIAP transisi dinetralkan, bukan daftar yang dipelihara tangan.
|
|
45
|
+
*
|
|
46
|
+
* WebKit menjepit durasi transisi ke 0.000001s ketika setelan itu menyala, dan pada durasi itu
|
|
47
|
+
* transisinya tidak pernah berjalan: propertinya tersangkut di nilai AWAL, selamanya. Akibatnya
|
|
48
|
+
* bukan "kurang halus" melainkan keadaan yang salah di layar. Terukur di iPhone 7 tiga kali:
|
|
49
|
+
* scrim drawer yang tinggal gelap sambil tetap menangkap tap, dan centang checkbox yang tak
|
|
50
|
+
* pernah digambar padahal inputnya benar-benar tercentang.
|
|
51
|
+
*
|
|
52
|
+
* Sebelum aturan ini, kit menetralkan sembilan selektor dari lima puluh enam yang mentransisikan
|
|
53
|
+
* sesuatu. Empat puluh delapan sisanya ranjau yang menunggu, dan tiga sudah meledak di tangan satu
|
|
54
|
+
* pemilik app. Menambal yang keempat adalah cara kita sampai di sini.
|
|
55
|
+
*
|
|
56
|
+
* `transition: none`, BUKAN `transition-duration: 0.01ms` yang biasa beredar sebagai reset
|
|
57
|
+
* aksesibilitas: durasi mungil itu persis bentuk yang menyangkut di WebKit. Satu-satunya yang
|
|
58
|
+
* pernah menunggu `transitionend` di kit ini adalah toast, dan ia sudah punya cadangan
|
|
59
|
+
* `setTimeout(finish, 400)` untuk kasus event itu tak pernah datang.
|
|
60
|
+
*
|
|
61
|
+
* ANIMASI sengaja tidak disentuh: kit memasangnya lewat `prefers-reduced-motion: no-preference`,
|
|
62
|
+
* jadi ia opt-in dan sudah mati di sini, sementara `--spinner` dan `--progress` punya perlakuan
|
|
63
|
+
* bernuansa sendiri yang memang harus bertahan.
|
|
64
|
+
* ======================================================================== */
|
|
65
|
+
@media (prefers-reduced-motion:reduce){
|
|
66
|
+
*,*::before,*::after{transition:none !important;}
|
|
67
|
+
}
|
|
68
|
+
|
|
43
69
|
/* Freeday. Accordion (native <details>/<summary>, zero-JS) */
|
|
44
70
|
/* position:relative, containing block for out-of-flow panel content (see base.css). NOT redundant
|
|
45
71
|
with the panel's reveal animation: that animation gives the panel a transform (which happens to
|
|
@@ -239,7 +265,19 @@ a { color: var(--color-primary-strong); }
|
|
|
239
265
|
* Scrim yang tak terlihat tetapi menangkap tap, jadi ketukan pertama pengguna hilang dan ketukan
|
|
240
266
|
* kedua yang bekerja. Setelan yang sama dimatikan, deret yang sama berjalan 0.87 lalu 1.00.
|
|
241
267
|
* Sidebar sudah dinetralkan sejak lama; backdrop terlewat, dan ia yang menggerbangi interaksi. */
|
|
242
|
-
@media (prefers-reduced-motion:reduce){
|
|
268
|
+
@media (prefers-reduced-motion:reduce){
|
|
269
|
+
.fdy-app__sidebar{transition:none;}
|
|
270
|
+
/* KEEMPAT selektor yang mendeklarasikan transisi backdrop, bukan hanya yang paling lemah.
|
|
271
|
+
`.fdy-app__backdrop` sendirian berspesifisitas (0,1,0) dan kalah dari keadaan terbukanya,
|
|
272
|
+
`.fdy-app--nav-open .fdy-app__backdrop` (0,2,0), sehingga penetralan ini diam-diam tidak
|
|
273
|
+
berlaku justru pada saat drawer terbuka, yaitu satu-satunya saat ia penting. Diukur dengan
|
|
274
|
+
reduced motion diemulasi: tertutup melaporkan `none`, terbuka melaporkan
|
|
275
|
+
`opacity 1e-06s, visibility 1e-06s`. */
|
|
276
|
+
.fdy-app__backdrop,
|
|
277
|
+
.fdy-app--nav-open .fdy-app__backdrop,
|
|
278
|
+
.fdy-app--nav-overlay .fdy-app__backdrop,
|
|
279
|
+
.fdy-app--nav-overlay.fdy-app--nav-open .fdy-app__backdrop{transition:none;}
|
|
280
|
+
}
|
|
243
281
|
|
|
244
282
|
/* Freeday. App bar (standalone top bar: brand · actions · spacer).
|
|
245
283
|
* Distinct from .fdy-app__topbar (which is bound to the shell grid). Use anywhere;
|
package/docs/getting-started.md
CHANGED
|
@@ -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.
|
|
194
|
+
Lands in `package.json` as `"@cahyo-dimas/freeday": "^3.9.4"` (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
package/src/base.css
CHANGED
|
@@ -38,3 +38,29 @@ a { color: var(--color-primary-strong); }
|
|
|
38
38
|
@media (prefers-reduced-motion: reduce) {
|
|
39
39
|
*, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
|
|
40
40
|
}
|
|
41
|
+
|
|
42
|
+
/* ===========================================================================
|
|
43
|
+
* Reduce Motion: SETIAP transisi dinetralkan, bukan daftar yang dipelihara tangan.
|
|
44
|
+
*
|
|
45
|
+
* WebKit menjepit durasi transisi ke 0.000001s ketika setelan itu menyala, dan pada durasi itu
|
|
46
|
+
* transisinya tidak pernah berjalan: propertinya tersangkut di nilai AWAL, selamanya. Akibatnya
|
|
47
|
+
* bukan "kurang halus" melainkan keadaan yang salah di layar. Terukur di iPhone 7 tiga kali:
|
|
48
|
+
* scrim drawer yang tinggal gelap sambil tetap menangkap tap, dan centang checkbox yang tak
|
|
49
|
+
* pernah digambar padahal inputnya benar-benar tercentang.
|
|
50
|
+
*
|
|
51
|
+
* Sebelum aturan ini, kit menetralkan sembilan selektor dari lima puluh enam yang mentransisikan
|
|
52
|
+
* sesuatu. Empat puluh delapan sisanya ranjau yang menunggu, dan tiga sudah meledak di tangan satu
|
|
53
|
+
* pemilik app. Menambal yang keempat adalah cara kita sampai di sini.
|
|
54
|
+
*
|
|
55
|
+
* `transition: none`, BUKAN `transition-duration: 0.01ms` yang biasa beredar sebagai reset
|
|
56
|
+
* aksesibilitas: durasi mungil itu persis bentuk yang menyangkut di WebKit. Satu-satunya yang
|
|
57
|
+
* pernah menunggu `transitionend` di kit ini adalah toast, dan ia sudah punya cadangan
|
|
58
|
+
* `setTimeout(finish, 400)` untuk kasus event itu tak pernah datang.
|
|
59
|
+
*
|
|
60
|
+
* ANIMASI sengaja tidak disentuh: kit memasangnya lewat `prefers-reduced-motion: no-preference`,
|
|
61
|
+
* jadi ia opt-in dan sudah mati di sini, sementara `--spinner` dan `--progress` punya perlakuan
|
|
62
|
+
* bernuansa sendiri yang memang harus bertahan.
|
|
63
|
+
* ======================================================================== */
|
|
64
|
+
@media (prefers-reduced-motion:reduce){
|
|
65
|
+
*,*::before,*::after{transition:none !important;}
|
|
66
|
+
}
|
|
@@ -160,4 +160,16 @@
|
|
|
160
160
|
* Scrim yang tak terlihat tetapi menangkap tap, jadi ketukan pertama pengguna hilang dan ketukan
|
|
161
161
|
* kedua yang bekerja. Setelan yang sama dimatikan, deret yang sama berjalan 0.87 lalu 1.00.
|
|
162
162
|
* Sidebar sudah dinetralkan sejak lama; backdrop terlewat, dan ia yang menggerbangi interaksi. */
|
|
163
|
-
@media (prefers-reduced-motion:reduce){
|
|
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
|
+
}
|