@cahyo-dimas/freeday 3.6.0 → 3.7.0

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,52 @@ 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.7.0] - 2026-10-23
13
+
14
+ **Kit ini tidak bisa dipakai di Safari 15, dan yang menemukannya adalah sebuah HP.** Pemilik sebuah
15
+ app ronda membuka aplikasinya di iPhone 7 dan menulis tiga kata: tampilannya ancur banget. Sebabnya
16
+ `color-mix()`, 94 kemunculan tanpa satu pun cadangan, dipakai untuk `box-shadow` (26),
17
+ `border-color` (17), `color` (11) dan `background` (5). Safari baru mendukungnya di 16.2; iPhone 7
18
+ mentok di iOS 15.
19
+
20
+ Perbaikan pertama yang dicoba justru membuktikan sebabnya. Pola cadangan yang biasa dipakai orang,
21
+ nilai statis dulu lalu `color-mix()` sesudahnya, tidak bekerja ketika deklarasinya memuat `var()`:
22
+ deklarasi itu sah saat parse dan baru gagal saat computed-value, dan di jalur itu properti jatuh ke
23
+ nilai initial, bukan ke baris sebelumnya. Untuk `border-color` nilai initial itu `currentColor`,
24
+ yaitu hitam. Keluhan tentang garis hitam tebal di mana-mana itulah bukti mekanismenya. Jadi
25
+ `color-mix()`-nya yang dibuang.
26
+
27
+ ### Fixed
28
+ - **Nol `color-mix()` di seluruh CSS yang dikirim** (`#072`). `rgba(var(--x-rgb), .p)` identik
29
+ dengan `color-mix(in srgb, X p%, transparent)` menurut definisi, jadi 10 token semantik baru
30
+ menutup 84 dari 94 kemunculan; `--color-primary-rgb` sendirian menutup 45. Sisanya yang mencampur
31
+ terhadap permukaan dipipihkan di `tokens/build.mjs`, yang kini menghitung nilai bertulis
32
+ `color-mix(in srgb, {a} p%, {b})` sekali per tema sambil menelusuri rantai `$dark ?? $value`,
33
+ sehingga nilai gelapnya diturunkan alih-alih diketik dua kali.
34
+ - **Modifier tone bekerja di Safari 15** (`#072`). Delapan tone kali latar, tinta dan dua garis kini
35
+ 33 token terhitung, dan properti privat `--_fdy-{avatar,badge,chip}-tone` hilang seluruhnya.
36
+ Tampilan di peramban modern terbukti tidak berubah: byte yang benar-benar dicat dibandingkan lewat
37
+ tangkapan layar satu piksel, nol selisih di 48 warna kali dua tema.
38
+ - **Lima tempat yang mencetak teks dengan `--color-primary` pindah ke `--color-primary-strong`**
39
+ (`#073`). Kontrak kontras hanya pernah menjanjikan peran itu terhadap permukaan pada ambang 3:1,
40
+ yakni ambang WCAG untuk komponen UI, bukan untuk teks. Jadi suite-nya lulus sambil kit mencetak
41
+ tinta di bawah AA pada teal 3.74, cyan 3.68, emerald 3.77 dan lime 3.09. Azure lulus di 6.56, dan
42
+ itu sebabnya tidak ada yang menyadarinya. Yang pindah: tautan, centang combo, ikon dropzone saat
43
+ seret, dan dua panah urut tabel. Sembilan belas tempat lain yang polanya ikut tertangkap sengaja
44
+ tidak disentuh, sebab semuanya batas kontrol dan objek grafis yang memang sah di 3:1.
45
+
46
+ ### Added
47
+ - **Penjaga yang membuat ketiganya tidak bisa kembali diam-diam.** Satu uji menegaskan nol
48
+ `color-mix()` di CSS yang dikirim. Satu lagi menegaskan nol properti `color` yang menyebut
49
+ `--color-primary` gundul, membaca nama properti alih-alih substring supaya kesembilan belas isian
50
+ tetap sah. Dan kontrak kontras kini mengukur `--color-primary-strong` terhadap permukaan pada
51
+ ambang teks untuk setiap palet, bukan hanya azure.
52
+
53
+ ### Catatan dukungan peramban
54
+ Floor-nya kini Chrome 105, Safari 15.4 dan Firefox 121, ditentukan `:has()`. Angka itu diaudit dari
55
+ fitur yang dipakai, bukan dari sesi di perangkat sungguhan. Belum ada yang menjalankan kit ini di
56
+ Safari 15.4 nyata.
57
+
12
58
  ## [3.6.0] - 2026-10-22
13
59
 
14
60
  **Tiga belas hal yang dibangun ulang sebuah app back-office karena kit belum punya.** App-nya tidak
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.6.0-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.6.0)
8
+ [![Release](https://img.shields.io/badge/release-v3.7.0-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.7.0)
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`.
@@ -255,11 +255,24 @@ terlihat, HTML native dulu sebelum ARIA, komponen interaktif ikut pola WAI-ARIA
255
255
  `docs/index.html`.
256
256
 
257
257
  ## Dukungan browser
258
- Butuh browser evergreen, kira-kira 2023+: **Chrome 111 · Safari 16.4 · Firefox 113** (floor
259
- ditentukan `color-mix()`). Fitur lain: native `<dialog>`/`::backdrop`, `accent-color`, `100dvh`,
260
- `conic-gradient`, `scroll-snap`, semuanya ≥ Safari 15.4. Blur backdrop pakai
261
- `-webkit-backdrop-filter` + `backdrop-filter` (Safari lama tetap jalan, hanya tanpa blur). Belum ada
262
- CSS build/autoprefixer, jadi dukungan browser lama jadi tanggung jawab konsumen.
258
+ **Chrome 105 · Safari 15.4 · Firefox 121.** Floor-nya ditentukan `:has()`, dan oleh generasi Safari
259
+ 15.4 untuk native `<dialog>`/`::backdrop`, `accent-color`, dan `100dvh`. `conic-gradient` dan
260
+ `scroll-snap` lebih tua lagi.
261
+
262
+ Dulu floor itu ditentukan `color-mix()` di Safari 16.4, dan sekarang tidak lagi. Harganya memang tak
263
+ pernah pantas: deklarasi yang mencampur sebuah token membawa `var()`, jadi ia dianggap sah saat
264
+ parse dan baru gagal saat computed-value, dan di jalur itu properti jatuh ke nilai *initial*-nya,
265
+ bukan ke baris cadangan di atasnya. Di iPhone yang mentok di iOS 15, 17 deklarasi `border-color`
266
+ berubah jadi `currentColor`, yaitu garis hitam tebal di hampir segalanya. Semua alpha di kit ini
267
+ sekarang ditulis `rgba(var(--color-primary-rgb), .26)`, warnanya sama dan sudah bisa diparse sejak
268
+ Safari 9; empat aturan yang memang tak bisa dijawab secara statis membawa pasangan `@supports` yang
269
+ sungguhan. `test/color-mix.test.mjs` menjaga agar yang berikutnya tetap jujur.
270
+
271
+ Yang paling baru dipakai kit ini (`@container`, `@starting-style`, `text-wrap`) sifatnya peningkatan:
272
+ browser yang belum punya akan melewati bloknya dan tetap memakai aturan tanpa syarat di bawahnya.
273
+ Blur backdrop pakai `-webkit-backdrop-filter` + `backdrop-filter` (Safari lama tetap jalan, hanya
274
+ tanpa blur). Belum ada CSS build/autoprefixer, jadi dukungan di bawah floor itu jadi tanggung jawab
275
+ konsumen.
263
276
 
264
277
  ## Lisensi
265
278
  [MIT](LICENSE) © 2026 Cahyo D. Kurnianto. Bebas dipakai, diubah, dan didistribusikan asal
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.6.0-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.6.0)
8
+ [![Release](https://img.shields.io/badge/release-v3.7.0-0078d4?style=flat-square)](https://github.com/cahyo-dimas/freeday-ui-kit/tree/v3.7.0)
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`.
@@ -264,11 +264,23 @@ patterns, and `prefers-reduced-motion` is respected. Status is never conveyed by
264
264
  the "Accessibility" section in `docs/index.html`.
265
265
 
266
266
  ## Browser support
267
- Needs an evergreen browser, roughly 2023+: **Chrome 111 · Safari 16.4 · Firefox 113** (the floor is
268
- set by `color-mix()`). Other features used: native `<dialog>`/`::backdrop`, `accent-color`,
269
- `100dvh`, `conic-gradient`, `scroll-snap`, all of them ≥ Safari 15.4. Backdrop blur uses
267
+ **Chrome 105 · Safari 15.4 · Firefox 121.** The floor is set by `:has()`, and by the Safari 15.4
268
+ generation of native `<dialog>`/`::backdrop`, `accent-color` and `100dvh`. `conic-gradient` and
269
+ `scroll-snap` are older still.
270
+
271
+ `color-mix()` used to set that floor at Safari 16.4, and it no longer does. It was never worth it:
272
+ a declaration that mixes a token carries `var()`, so it is assumed valid at parse time and only
273
+ fails at computed-value time, where the property drops to its *initial* value instead of to a
274
+ fallback line. On an iPhone that stopped at iOS 15 that turned 17 `border-color` declarations into
275
+ `currentColor`, which is a thick black outline on roughly everything. Every alpha in the kit is now
276
+ written `rgba(var(--color-primary-rgb), .26)`, which is the same colour and parses back to Safari 9;
277
+ the four rules that cannot be answered statically carry a real `@supports` counterpart.
278
+ `test/color-mix.test.mjs` keeps the next one honest.
279
+
280
+ The newest things the kit touches (`@container`, `@starting-style`, `text-wrap`) are enhancements: a
281
+ browser without them skips the block and keeps the unconditional rule underneath. Backdrop blur uses
270
282
  `-webkit-backdrop-filter` + `backdrop-filter` (older Safari still works, just without the blur).
271
- There's no CSS build or autoprefixer step, so supporting older browsers is the consumer's
283
+ There's no CSS build or autoprefixer step, so supporting anything below the floor is the consumer's
272
284
  responsibility.
273
285
 
274
286
  ## License
package/USAGE.md CHANGED
@@ -107,6 +107,48 @@ point, everything around it quiet.
107
107
  - **Surfaces:** most backgrounds are `--color-surface`; `--color-surface-2`/`-3` for a recessed area;
108
108
  `--color-primary-soft` only when you want a tinted callout, not as a default panel colour.
109
109
 
110
+ ### Putting an alpha on a role: use the channel triple, not `color-mix()`
111
+
112
+ Every role you are likely to fade has a companion triple, so a 26% primary wash is:
113
+
114
+ ```css
115
+ background: rgba(var(--color-primary-rgb), .26);
116
+ ```
117
+
118
+ Reach for `color-mix(in srgb, var(--color-primary) 26%, transparent)` instead and you get the same
119
+ colour on your machine and a missing one on an older iPhone, with **no way to put a fallback under
120
+ it.** A declaration that mentions a custom property is assumed valid when the stylesheet is parsed
121
+ and is only checked later, when the variable is substituted; if `color-mix()` is unknown at that
122
+ point the declaration is thrown away *there*, and the browser does not go back to the static line
123
+ you wrote above it. The property takes its initial value instead, which for `border-color` means
124
+ `currentColor`: a thick black outline. Safari learned `color-mix()` in 16.2, so every phone that
125
+ stopped at iOS 15 sees that.
126
+
127
+ The triples are generated from the tokens they are named after, in all 18 palettes and both themes,
128
+ so they follow a re-brand on their own. The ones that ship: `--color-primary-rgb`,
129
+ `--color-on-primary-rgb`, `--color-danger-rgb`, `--color-danger-btn-rgb`, `--color-success-rgb`,
130
+ `--color-warning-rgb`, `--color-info-rgb`, `--color-surface-rgb` and `--color-inverse-text-rgb`.
131
+ If you need one the kit does not publish, ask for it rather than hard-coding channels.
132
+
133
+ ### Tinting one role over another: the colour is already a token
134
+
135
+ A triple puts an alpha on **one** role. It cannot say "18% of this tone over the surface", because
136
+ the result depends on two roles and on the theme. Those blends are computed when the kit is built
137
+ and published as flat tokens, so you never write the mix at all:
138
+
139
+ ```css
140
+ background: var(--tone-3-bg); /* 18% of --tone-3 over --color-surface */
141
+ color: var(--tone-3-ink); /* 50% of --tone-3 toward --color-text */
142
+ border-color: var(--tone-3-border);/* 30% of --tone-3 over --color-border */
143
+ ```
144
+
145
+ `--tone-N-bg` / `-ink` / `-border` / `-border-soft` exist for all eight tones in both themes, and are
146
+ exactly what `.fdy-avatar--tone-N`, `.fdy-badge--tone-N` and `.fdy-chip--tone-N` paint — the
147
+ `-ink` on the `-bg` is the pair the WCAG gate measures, so a custom element built from the same two
148
+ tokens inherits that guarantee. `--color-danger-border` (40% of danger over the border) is the same
149
+ idea for a row that failed. If you need a blend the kit does not publish, ask for it: it belongs in
150
+ `tokens/tokens.json`, where the build can resolve it down both themes, not in a component.
151
+
110
152
  ## 5b. Theme: global by default, per-subtree when a region is inverted
111
153
 
112
154
  `data-theme="light|dark"` redefines the semantic tokens. Set it on `<html>` and it themes the app;