@cahyo-dimas/freeday 1.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 +447 -0
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/adapters/blazor/freeday-blazor.js +79 -0
- package/adapters/react/components/FdyAutocomplete.tsx +159 -0
- package/adapters/react/components/FdyCascade.tsx +230 -0
- package/adapters/react/components/FdyCfl.tsx +362 -0
- package/adapters/react/components/FdyChart.tsx +69 -0
- package/adapters/react/components/FdyCombo.tsx +166 -0
- package/adapters/react/components/FdyDateRange.tsx +66 -0
- package/adapters/react/components/FdyDatepicker.tsx +354 -0
- package/adapters/react/index.d.ts +37 -0
- package/adapters/react/index.js +9 -0
- package/adapters/react/tsconfig.json +14 -0
- package/adapters/react/useFreeday.js +44 -0
- package/adapters/react/usePopover.ts +64 -0
- package/adapters/vue/components/FdyAutocomplete.vue +174 -0
- package/adapters/vue/components/FdyCascade.vue +241 -0
- package/adapters/vue/components/FdyCfl.vue +354 -0
- package/adapters/vue/components/FdyChart.vue +89 -0
- package/adapters/vue/components/FdyCombo.vue +232 -0
- package/adapters/vue/components/FdyDateRange.vue +78 -0
- package/adapters/vue/components/FdyDatepicker.vue +333 -0
- package/adapters/vue/index.d.ts +44 -0
- package/adapters/vue/index.js +8 -0
- package/adapters/vue/useFreeday.js +44 -0
- package/adapters/vue/usePopover.ts +78 -0
- package/dist/freeday-autocomplete.js +135 -0
- package/dist/freeday-breakpoint.js +51 -0
- package/dist/freeday-carousel.js +111 -0
- package/dist/freeday-cascade.js +256 -0
- package/dist/freeday-cfl.js +213 -0
- package/dist/freeday-chart.js +403 -0
- package/dist/freeday-chip.js +83 -0
- package/dist/freeday-datepicker.js +321 -0
- package/dist/freeday-datetime.js +59 -0
- package/dist/freeday-drawer.js +43 -0
- package/dist/freeday-form.js +181 -0
- package/dist/freeday-mask.js +114 -0
- package/dist/freeday-menu.js +93 -0
- package/dist/freeday-popover.js +69 -0
- package/dist/freeday-rating.js +50 -0
- package/dist/freeday-select.js +194 -0
- package/dist/freeday-slider.js +34 -0
- package/dist/freeday-stepper.js +90 -0
- package/dist/freeday-table.js +475 -0
- package/dist/freeday-tabs.js +68 -0
- package/dist/freeday-timepicker.js +180 -0
- package/dist/freeday-toast.js +84 -0
- package/dist/freeday-tree.js +94 -0
- package/dist/freeday-upload.js +206 -0
- package/dist/freeday.bundle.css +1352 -0
- package/dist/freeday.css +1007 -0
- package/dist/freeday.js +3632 -0
- package/dist/freeday.tokens.css +343 -0
- package/package.json +72 -0
- package/src/base.css +20 -0
- package/src/components/.gitkeep +0 -0
- package/src/components/accordion.css +13 -0
- package/src/components/alert.css +18 -0
- package/src/components/app-shell.css +88 -0
- package/src/components/appbar.css +15 -0
- package/src/components/autocomplete.css +12 -0
- package/src/components/avatar.css +8 -0
- package/src/components/badge.css +27 -0
- package/src/components/breadcrumb.css +9 -0
- package/src/components/breakpoints.css +15 -0
- package/src/components/button.css +58 -0
- package/src/components/card.css +9 -0
- package/src/components/carousel.css +17 -0
- package/src/components/cascade.css +36 -0
- package/src/components/cfl.css +28 -0
- package/src/components/chart.css +55 -0
- package/src/components/chip.css +18 -0
- package/src/components/combo.css +27 -0
- package/src/components/datepicker.css +44 -0
- package/src/components/datetimepicker.css +8 -0
- package/src/components/description-list.css +6 -0
- package/src/components/divider.css +3 -0
- package/src/components/drawer.css +25 -0
- package/src/components/file-upload.css +34 -0
- package/src/components/filterbar.css +25 -0
- package/src/components/form-grid.css +8 -0
- package/src/components/input-group.css +22 -0
- package/src/components/input.css +13 -0
- package/src/components/kbd.css +2 -0
- package/src/components/menu.css +28 -0
- package/src/components/modal.css +22 -0
- package/src/components/pagination.css +8 -0
- package/src/components/progress.css +7 -0
- package/src/components/rating.css +10 -0
- package/src/components/selection.css +25 -0
- package/src/components/skeleton.css +7 -0
- package/src/components/slider.css +12 -0
- package/src/components/spinner.css +6 -0
- package/src/components/states.css +8 -0
- package/src/components/stepper.css +21 -0
- package/src/components/table.css +55 -0
- package/src/components/tabs.css +10 -0
- package/src/components/timeline.css +12 -0
- package/src/components/timepicker.css +22 -0
- package/src/components/toast.css +17 -0
- package/src/components/tooltip.css +6 -0
- package/src/components/tree.css +21 -0
- package/src/freeday-autocomplete.js +135 -0
- package/src/freeday-breakpoint.js +51 -0
- package/src/freeday-carousel.js +111 -0
- package/src/freeday-cascade.js +256 -0
- package/src/freeday-cfl.js +213 -0
- package/src/freeday-chart.js +403 -0
- package/src/freeday-chip.js +83 -0
- package/src/freeday-datepicker.js +321 -0
- package/src/freeday-datetime.js +59 -0
- package/src/freeday-drawer.js +43 -0
- package/src/freeday-form.js +181 -0
- package/src/freeday-mask.js +114 -0
- package/src/freeday-menu.js +93 -0
- package/src/freeday-popover.js +69 -0
- package/src/freeday-rating.js +50 -0
- package/src/freeday-select.js +194 -0
- package/src/freeday-slider.js +34 -0
- package/src/freeday-stepper.js +90 -0
- package/src/freeday-table.js +475 -0
- package/src/freeday-tabs.js +68 -0
- package/src/freeday-timepicker.js +180 -0
- package/src/freeday-toast.js +84 -0
- package/src/freeday-tree.js +94 -0
- package/src/freeday-upload.js +206 -0
- package/tokens/breakpoints.mjs +4 -0
- package/tokens/tokens.json +123 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Semua perubahan penting dicatat di sini. Format longgar mengikuti
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/); tiap versi = git tag.
|
|
5
|
+
|
|
6
|
+
## [1.7.0] — 2026-07-24
|
|
7
|
+
Rilis **1.7 — tree checkbox, form-grid, & tiga section docs full-width**. Non-breaking, aditif.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **Tree checkbox (cascading) — `freeday-tree.js` + `.fdy-tree--checkbox`.** Varian tree yang
|
|
11
|
+
bisa dipilih: centang cabang → semua anak ikut; sebagian anak → cabang jadi native
|
|
12
|
+
`:indeterminate`. Checkbox = `<input class="fdy-checkbox">` native (Space toggle, nama lewat
|
|
13
|
+
`aria-label`); klik checkbox `stopPropagation` sehingga memilih **tak pernah** membuka/menutup
|
|
14
|
+
cabang, sedangkan teks summary tetap toggle `<details>`. Opt-in via `data-fdy-tree`; init
|
|
15
|
+
post-order menghitung state cabang dari leaf yang sudah tercentang saat load. Zero-dependency,
|
|
16
|
+
`window.FreedayTree`. Tree dasar tetap tanpa JS.
|
|
17
|
+
- **`.fdy-form-grid` — layout header/dokumen.** Pelengkap dua-dimensi dari stack `.fdy-field`
|
|
18
|
+
satu kolom dan baris `.fdy-filterbar`: field tersusun di kolom yang rapi (`auto-fit`, reflow ke
|
|
19
|
+
satu kolom di layar sempit); `.fdy-field--full` membentang penuh (mis. alamat). Zero JS — murni
|
|
20
|
+
layout di atas `.fdy-field`.
|
|
21
|
+
- **File upload — layout melebar.** Modifier `.fdy-dropzone--row` (ikon di samping teks, bukan
|
|
22
|
+
bertumpuk) dan `.fdy-filelist--grid` (baris file berdampingan di layar lebar).
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- **Docs — tiga section jadi full-width & selaras.** Tree (kini menampilkan varian dasar +
|
|
26
|
+
checkbox berdampingan), Form (validasi inline + contoh **header + detail**: `.fdy-form-grid` +
|
|
27
|
+
tabel item), dan File upload semuanya melebar mengisi kolom konten agar lebar semua section rata.
|
|
28
|
+
Terverifikasi lewat gestur mouse asli (headless CDP `Input.dispatchMouseEvent`): cascade
|
|
29
|
+
centang/indeterminate, checkbox tak melipat cabang, teks summary tetap toggle.
|
|
30
|
+
|
|
31
|
+
## [1.6.2] — 2026-07-24
|
|
32
|
+
Rilis **patch — lisensi**. Tak ada perubahan kode.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- **Lisensi jadi [MIT](LICENSE)** (`Copyright (c) 2026 Cahyo D. Kurnianto`). Sebelumnya
|
|
36
|
+
`"license": "UNLICENSED"` tanpa file `LICENSE` — di repo publik itu berarti *all rights
|
|
37
|
+
reserved*, jadi tak ada yang boleh memakainya secara legal. Sekarang bebas dipakai/ubah/
|
|
38
|
+
distribusi asal menyertakan copyright. `package.json`/`package-lock.json` → `"MIT"`, tambah
|
|
39
|
+
file `LICENSE`, catat di README + footer docs. `"private": true` dipertahankan (pengaman
|
|
40
|
+
anti-`npm publish`, tak terkait lisensi).
|
|
41
|
+
|
|
42
|
+
## [1.6.1] — 2026-07-24
|
|
43
|
+
Rilis **patch — perbaikan bug pemilihan combo dengan mouse**. Non-breaking.
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
- **`freeday-select.js` (combo/select vanilla) — memilih opsi dengan mouse tidak berfungsi.**
|
|
47
|
+
Menekan (mousedown) sebuah opsi mem-blur tombol combo; handler `focusout` lalu memanggil
|
|
48
|
+
`close()` yang menyembunyikan listbox **sebelum** event `click` opsi sempat menjalankan
|
|
49
|
+
`choose()` — sehingga pilihan hilang dan nilai tak berubah (hanya terlihat dengan mouse asli;
|
|
50
|
+
navigasi keyboard tak terpengaruh). Perbaikan: `preventDefault` pada `mousedown` listbox agar
|
|
51
|
+
tombol tetap fokus, jadi `click` mendarat normal. Terverifikasi lewat gestur mouse asli
|
|
52
|
+
(headless CDP `Input.dispatchMouseEvent`) pada playground docs dan section Select. Memengaruhi
|
|
53
|
+
konsumen vanilla `freeday/js`; adapter Vue/React punya implementasi sendiri dan tak terdampak.
|
|
54
|
+
|
|
55
|
+
## [1.6.0] — 2026-07-24
|
|
56
|
+
Rilis **1.6 — wrapper input ekstra (Vue + React) + filter-bar**. Non-breaking, aditif.
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
- **`FdyDateRange` (Vue + React)** — rentang tanggal terkontrol `{start, end}` yang menyusun dua
|
|
60
|
+
`FdyDatepicker` di atas layout `.fdy-daterange` yang sudah ada (akhir tak bisa mendahului awal,
|
|
61
|
+
lewat min/max saling terkait). `v-model` di Vue, `value`/`onChange` di React. Tanpa CSS baru.
|
|
62
|
+
- **`FdyAutocomplete` (Vue + React)** — editable combobox WAI-ARIA APG terkontrol, port dari
|
|
63
|
+
enhancer `freeday-autocomplete.js` di atas CSS `.fdy-autocomplete` yang sama: filter saat
|
|
64
|
+
mengetik (substring case-insensitive pada query ter-trim), ↑/↓ dengan wrap, Enter commit,
|
|
65
|
+
Esc/Tab/klik-luar menutup, `aria-activedescendant` + empty state, dropdown top-layer via
|
|
66
|
+
Popover API. `onSelect`/`select` hanya saat commit — terpisah dari perubahan ketikan, jadi
|
|
67
|
+
options yang sudah difilter server bisa dilempar masuk apa adanya.
|
|
68
|
+
- **`FdyCascade` (Vue + React)** — picker hierarkis drill-down terkontrol, port dari enhancer
|
|
69
|
+
`freeday-cascade.js` di atas CSS `.fdy-cascade` yang sama: satu level sekaligus, branch masuk,
|
|
70
|
+
kontrol back naik, leaf memilih (value = value leaf, tampilan = path penuh), buka ulang di level
|
|
71
|
+
terpilih. Keyboard: Up/Down/Home/End, ArrowRight/Enter/Space aktifkan, ArrowLeft/Backspace naik,
|
|
72
|
+
Esc tutup; `aria-activedescendant` + crumb live. Model data = **pohon `CascadeNode` bertipe**,
|
|
73
|
+
menggantikan `<ul>` bersarang tersembunyi milik enhancer.
|
|
74
|
+
- **`.fdy-filterbar`** — layout primitive untuk baris filter yang konsisten, di atas `.fdy-field`:
|
|
75
|
+
ritme lebar kolom (`--w-sm` / default / `--w-lg` / `--w-xl`), satu field `--w-grow` menyerap sisa
|
|
76
|
+
ruang, `__actions` menempel di ujung sejajar kontrol, wrap rapi di layar sempit. Nol JS.
|
|
77
|
+
Menutup gap "filter row ragged" dari adoption backlog #11.
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
- Contoh `react-faktur` kini menggerakkan **Kategori** lewat `FdyCascade` — menghapus jembatan
|
|
81
|
+
event `fdy-cascade-change` manual; ditambah field Periode (`FdyDateRange`) & Kota (`FdyAutocomplete`).
|
|
82
|
+
- Contoh `vue-faktur` mendapat demo Vue-native untuk ketiga komponen baru.
|
|
83
|
+
|
|
84
|
+
Dengan rilis ini adapter **Vue dan React simetris penuh** — tujuh komponen controlled typed yang
|
|
85
|
+
sama di kedua sisi: `FdyCombo` · `FdyDatepicker` · `FdyDateRange` · `FdyAutocomplete` ·
|
|
86
|
+
`FdyCascade` · `FdyCfl` · `FdyChart`.
|
|
87
|
+
|
|
88
|
+
## [1.5.0] — 2026-07-24
|
|
89
|
+
Rilis **1.5 — React adapter parity**. Non-breaking, aditif.
|
|
90
|
+
### Added
|
|
91
|
+
- **React adapter parity** — komponen controlled typed `FdyCombo` / `FdyDatepicker` / `FdyCfl` /
|
|
92
|
+
`FdyChart` + `usePopover`, di atas CSS kit yang sama (aksesibilitas WAI-ARIA APG, dropdown
|
|
93
|
+
top-layer lewat Popover API). Aplikasi React tak lagi butuh fallback `<select>`/`<input
|
|
94
|
+
type="date">` native. Dikonsumsi lewat `freeday/react`; Vite men-transpile source component
|
|
95
|
+
langsung tanpa config tambahan, konsumen Next.js mungkin butuh
|
|
96
|
+
`transpilePackages: ['freeday']`.
|
|
97
|
+
|
|
98
|
+
## [1.4.1] — 2026-07-23
|
|
99
|
+
Rilis **1.4.1 — patch**. Dropdown tak lagi ter-clip di dalam card / scroll container.
|
|
100
|
+
### Fixed
|
|
101
|
+
- **Dropdown lepas dari clipping ancestor** (`.fdy-card{overflow:hidden}`, scroll container, atau
|
|
102
|
+
ancestor ber-`transform`). Semua dropdown `position:absolute` — **combo/select, datepicker,
|
|
103
|
+
cascade, autocomplete, timepicker, menu** — kini di-render di **top layer** lewat native
|
|
104
|
+
**Popover API** (`popover="manual"`) dan diposisikan `fixed` ke trigger (flip ke atas bila
|
|
105
|
+
sempit di bawah, lebar mengikuti trigger, reposisi saat scroll/resize). Panel tetap DOM child
|
|
106
|
+
komponennya, jadi focus, outside-click, dan ARIA tak berubah. Berlaku untuk enhancer vanilla
|
|
107
|
+
**dan** komponen Vue `FdyCombo`/`FdyDatepicker`. `FdyCfl` sudah aman (berbasis `<dialog>`).
|
|
108
|
+
Degradasi mulus ke perilaku lama pada browser tanpa Popover API. Non-breaking, tanpa perubahan API.
|
|
109
|
+
### Internal
|
|
110
|
+
- Helper baru `src/freeday-popover.js` (`window.FreedayPopover`) + composable `usePopover` di
|
|
111
|
+
`freeday/vue` (internal, tak diekspor). Panel dropdown kini set `color:var(--color-text)` eksplisit
|
|
112
|
+
(UA `[popover]` default-nya `CanvasText`).
|
|
113
|
+
|
|
114
|
+
## [1.4.0] — 2026-07-23
|
|
115
|
+
Rilis **1.4 — motion & native charts**. Dua fitur besar (gerak enter/exit lintas komponen +
|
|
116
|
+
chart native yang cukup untuk mem-pensiun-kan Chart.js) plus satu fix layout. Non-breaking.
|
|
117
|
+
|
|
118
|
+
### Added
|
|
119
|
+
- **Chart native — parity untuk drop Chart.js.** Tipe baru **`line`** & **`area`** dan **`bar`
|
|
120
|
+
multi-seri + `data-fdy-stacked`**, semuanya dengan **sumbu ber-tema** (y-gridline + tick,
|
|
121
|
+
x-label autoskip, baseline nol) dari `--chart-grid`/`--chart-tick`. Data multi-seri lewat
|
|
122
|
+
**`data-series`** (JSON `[{label,values}]`); `data-values` tetap jadi shortcut seri-tunggal.
|
|
123
|
+
**`data-fdy-format="number|percent|currency"`** memformat tick + tooltip; **legenda otomatis**
|
|
124
|
+
untuk ≥2 seri (`data-fdy-legend="auto|always|none"`); hover band per-kategori. Warna dari token
|
|
125
|
+
→ **chart re-warna otomatis saat `data-theme` berubah** (tak perlu observer/re-paint kanvas).
|
|
126
|
+
- **`FreedayChart.update(el)`** — render ulang idempoten saat data berubah (auto-init tetap sekali).
|
|
127
|
+
- **`freeday/vue` → `<FdyChart>`** — wrapper reaktif & typed di atas renderer (re-render on prop
|
|
128
|
+
change): `type` · `series`/`values` · `labels` · `format` · `stacked` · `legend` · `colors`/`color`
|
|
129
|
+
· `center`; `aria-label` fallthrough. Tipe `FdyChartSeries` diekspor. Diverifikasi `vue-tsc` + `vite build`.
|
|
130
|
+
|
|
131
|
+
### Changed
|
|
132
|
+
- **Motion pass — gerak yang bermakna, semua hormati `prefers-reduced-motion`.**
|
|
133
|
+
- **Drawer & Modal** kini beranimasi **masuk _dan_ keluar** (slide / fade-scale + backdrop blur)
|
|
134
|
+
via `@starting-style` + `allow-discrete` pada `<dialog>` native — sebelumnya hanya masuk.
|
|
135
|
+
- **Sidebar app-shell** collapse/expand desktop kini **meluncur** (animasi `width`) — sebelumnya
|
|
136
|
+
`display:none` (snap). Mobile (off-canvas) tak berubah.
|
|
137
|
+
- **Accordion** & **Tabs** me-reveal konten (fade + rise) saat dibuka/diganti.
|
|
138
|
+
- **Baris tabel** transisi `background` halus saat hover.
|
|
139
|
+
- **`.fdy-daterange` responsif** — dua picker kini boleh menyusut (`min-width:0`) & wrap, jadi tak
|
|
140
|
+
lagi overflow di row/HP < ~23rem; di lebar cukup tetap hug ~23rem seperti sebelumnya.
|
|
141
|
+
|
|
142
|
+
### Migrasi konsumen (opsional, aman)
|
|
143
|
+
1. Bump pin: `npm i github:cahyo-dimas/freeday-ui-kit#v1.4.0`, lalu rebuild.
|
|
144
|
+
2. **Motion & daterange:** otomatis, tanpa perubahan kode.
|
|
145
|
+
3. **Drop Chart.js (opsional):** ganti wrapper chart lokal dengan `<FdyChart type="line" :series>`
|
|
146
|
+
(atau bentuk `data-fdy-chart`), hapus folder wrapper chart lokal, dan buang `chart.js` dari
|
|
147
|
+
`package.json`. Machinery tema chart (probe warna + observer) tak lagi perlu — token yang urus.
|
|
148
|
+
|
|
149
|
+
## [1.3.1] — 2026-07-23
|
|
150
|
+
Rilis **1.3.1 — patch**. Buang rail aksen "eyebrow" di state aktif/terpilih.
|
|
151
|
+
### Removed
|
|
152
|
+
- **Rail aksen 3px pada state aktif/terpilih** (`box-shadow:inset 3px 0 0 var(--color-primary)`)
|
|
153
|
+
dihapus dari nav app-shell (`[aria-current="page"]`), opsi cascade & autocomplete
|
|
154
|
+
(`[aria-selected="true"]`), dan baris tabel terpilih. State terpilih tetap jelas & aksesibel
|
|
155
|
+
lewat background `--color-primary-soft` + teks `--color-primary-strong` + semibold (tabel:
|
|
156
|
+
soft-bg satu baris penuh). Murni visual, non-breaking; kontras tetap **9/9**.
|
|
157
|
+
### Kept
|
|
158
|
+
- Indikator fungsional yang **beda motif** sengaja dipertahankan: rail fokus keyboard CFL
|
|
159
|
+
(`:focus-visible`, wajib a11y — pembeda fokus vs terpilih), underline tab aktif, checkmark
|
|
160
|
+
combo, ring highlight combo.
|
|
161
|
+
|
|
162
|
+
## [1.3.0] — 2026-07-23
|
|
163
|
+
Rilis **1.3 — accent Azure**. Warna sekunder/aksen berubah dari **teal → biru Microsoft Azure**.
|
|
164
|
+
### Changed
|
|
165
|
+
- **Accent: teal → sky / Azure blue** — `--color-accent` kini `#0078d4` (light) / `#47a1e6` (dark),
|
|
166
|
+
menggantikan teal `#0d9488`. Ramp primitif `teal` diganti `sky` (biru Azure muda);
|
|
167
|
+
`--color-accent-hover` & `--color-on-accent` ikut disesuaikan (on-accent dark `#06233f` agar
|
|
168
|
+
kontras di atas accent biru-muda dark). Semua konsumen `--color-accent` ikut otomatis: varian
|
|
169
|
+
opt-in `.fdy-fab--accent`/`.fdy-slider--accent`/`.fdy-badge-ov--accent`, chrome docs, swatch
|
|
170
|
+
identitas. Identitas kit kini **Azure** (primary biru-deep + accent biru-muda) — teal dibuang.
|
|
171
|
+
Kontras WCAG tetap **9/9** (accent/surface + on-accent/accent lolos light & dark). Non-breaking
|
|
172
|
+
(nilai token berubah; nama token/kelas/API tetap).
|
|
173
|
+
|
|
174
|
+
## [1.2.2] — 2026-07-23
|
|
175
|
+
Rilis **1.2.2 — patch**. Polish app-shell + koreksi warna indikator aktif/terpilih.
|
|
176
|
+
### Fixed
|
|
177
|
+
- **Brand link-safe (#17)** — `.fdy-app__brand` kini set `text-decoration:none`; saat brand
|
|
178
|
+
dijadikan link "logo → home", judul/subjudul tak lagi ber-underline default browser.
|
|
179
|
+
- **Indikator aktif/terpilih: teal → primary (#18 + extend)** — bar/underline/check pada state
|
|
180
|
+
aktif/terpilih sebelumnya pakai `--color-accent` (teal), yang **clash** dengan bg
|
|
181
|
+
`--color-primary-soft` + teks `--color-primary-strong` pada palet re-theme (accent ≠ primary).
|
|
182
|
+
Kini semua cue "you-are-here / terpilih" seragam di keluarga **primary**: item nav, underline
|
|
183
|
+
tab, rail baris tabel, opsi combo/cascade/autocomplete. Varian aksen opt-in
|
|
184
|
+
(`.fdy-fab--accent`, `.fdy-badge-ov--accent`, `.fdy-slider--accent`) tak berubah. Membalik
|
|
185
|
+
bagian "teal sebagai aksen fungsional" dari v1.1.0. Murni CSS, backward-compatible.
|
|
186
|
+
|
|
187
|
+
## [1.2.1] — 2026-07-23
|
|
188
|
+
Rilis **1.2.1 — patch**. Perbaikan CSS ikon depan `.fdy-input-group`.
|
|
189
|
+
### Fixed
|
|
190
|
+
- **Ikon depan input-group tak ke-center + gap** — `.fdy-input-group__addon--icon` dipakai
|
|
191
|
+
standalone tapi tak set `display`/`align-items`, jadi `<svg>`-nya nempel ke atas kotak flex
|
|
192
|
+
yang ter-stretch (ikon melayang tinggi); dan padding-kiri ikon menumpuk dengan padding-kiri
|
|
193
|
+
`.fdy-input` → gap lebar. Kini `--icon` self-contained (`inline-flex` + center, meniru
|
|
194
|
+
`.fdy-input-group__btn`) dan `.fdy-input` setelah ikon memangkas padding-kirinya. Murni CSS,
|
|
195
|
+
backward-compatible. Kena semua field search/find (topbar search, filter tabel, dialog CFL, dst).
|
|
196
|
+
|
|
197
|
+
## [1.2.0] — 2026-07-23
|
|
198
|
+
Rilis **1.2 — Vue input wrappers (native reimpl)**. Komponen Vue idiomatik dengan `v-model`
|
|
199
|
+
nyata di atas class CSS kit, supaya form Vue tak perlu fallback ke `<select>`/`<input type=date>`
|
|
200
|
+
native. **Non-breaking**: murni tambahan (file `.vue` + export baru); enhancer, `useFreeday`,
|
|
201
|
+
dan semua class/token lama tak berubah. `vue` tetap peerDependency opsional.
|
|
202
|
+
### Added
|
|
203
|
+
- **`FdyCombo`** (`import { FdyCombo } from 'freeday/vue'`) — combobox select-only WAI-ARIA APG
|
|
204
|
+
dengan `v-model` (generic `T extends string`), keyboard penuh (↑↓/Home/End/Enter/Esc/typeahead)
|
|
205
|
+
+ outside-click; props `options`/`placeholder`/`disabled`/`invalid`/`describedby`/`ariaLabelledby`.
|
|
206
|
+
- **`FdyDatepicker`** — kalender native di atas `datepicker.css`; `v-model` string ISO
|
|
207
|
+
`YYYY-MM-DD`, `min`/`max`, `locale` (Intl), keyboard grid penuh, `invalid`/`ariaLabelledby`.
|
|
208
|
+
- **`FdyCfl`** — choose-from-list **controlled + async**: `v-model:Row|null` +
|
|
209
|
+
`fetchPage(query,page) => Promise<{rows,hasMore}>`, `columns`/`display`/`rowKey`. `<dialog>`
|
|
210
|
+
native, search debounced, state loading/empty/error(+retry), pagination append, cache opsional,
|
|
211
|
+
guard respons out-of-order. Ini kontrak integrasi field lookup (map nilai → master data server).
|
|
212
|
+
- **Error-state kit** — varian `--error`/`[aria-invalid]` ditambah ke `combo`/`cascade`/
|
|
213
|
+
`datepicker`/`timepicker`, dan `input-group :has()` diperluas menangkap error kontrol — jadi
|
|
214
|
+
validasi vanilla (`freeday-form`) **dan** prop `invalid` wrapper Vue sama-sama ber-styling.
|
|
215
|
+
(Field CFL = `.fdy-input`+input-group, jadi error-nya via `aria-invalid` pada input, bukan
|
|
216
|
+
kelas `.fdy-cfl--error`.)
|
|
217
|
+
### Notes
|
|
218
|
+
- Komponen Vue di-ship sebagai `.vue` mentah (bundler konsumen yang meng-compile); type-check
|
|
219
|
+
butuh `vue-tsc`/Volar, bukan `tsc` polos. Install: `npm i github:cahyo-dimas/freeday-ui-kit#v1.2.0`.
|
|
220
|
+
- QA interaksi runtime (klik/keyboard di browser) = tanggung jawab konsumen; komponen
|
|
221
|
+
terverifikasi type-check + build (`vue-tsc --noEmit` + `vite build`) + review kode.
|
|
222
|
+
- Follow-up diketahui (warisan datepicker, non-blocking): grid `role="grid"` datar tanpa `row`;
|
|
223
|
+
hari fokus-awal yang ter-`min`/`max`-disable bisa bikin grid tak ter-fokus keyboard di config tepi.
|
|
224
|
+
|
|
225
|
+
## [1.1.0] — 2026-07-23
|
|
226
|
+
Rilis **1.1 — "Precision" visual polish + pengerasan adopsi**. Dua bagian: **(1) penyegaran
|
|
227
|
+
visual** token-driven — radius lebih tajam, elevation overlay lebih tegas, hierarki tipografi
|
|
228
|
+
heading lebih jelas, teal (`--color-accent`) sebagai indikator fungsional non-teks untuk state
|
|
229
|
+
aktif/terpilih; **(2) pengerasan adopsi** dari pemakaian project nyata — palet chart tervalidasi,
|
|
230
|
+
ukuran modal, nav statis, brand shell, export breakpoint, drawer `initAll`, dan tokenisasi kontrol.
|
|
231
|
+
**Non-breaking**: tak ada rename kelas/token/API (`fdy-` prefix, `--color-*`,
|
|
232
|
+
`window.Freeday*` tetap stabil). **AA-gated**: `npm test` tetap hijau (9/9), termasuk 6
|
|
233
|
+
assertion kontras baru yang menjaga teal-on-surface ≥3:1 di light & dark.
|
|
234
|
+
### Changed
|
|
235
|
+
- **Radius ramp lebih tajam** — skala dirapatkan ke `3/4/6/10/14/999px` (dari nilai lama yang
|
|
236
|
+
lebih membulat), kesan lebih presisi di semua kontrol & container.
|
|
237
|
+
- **Motion lebih responsif** — durasi dasar `--dur-base` 200ms→180ms, `--dur-slow` 320ms→280ms.
|
|
238
|
+
- **Elevation overlay dijatah ulang** — bayangan `--shadow-3` (menu/dropdown/popover) dan
|
|
239
|
+
`--shadow-4` (modal) kini lebih tajam & lebih hadir secara visual; bayangan resting
|
|
240
|
+
(kartu, tombol) tidak berubah.
|
|
241
|
+
- **Hierarki heading "Precision"** — `h1`–`h4` kini memakai `--font-display` (Sora) / 700 /
|
|
242
|
+
`--tracking-tighter` (token baru, -0.03em) / `--leading-snug`; ukuran font tidak berubah.
|
|
243
|
+
- **State interaksi disatukan** — hover/active/disabled/focus-visible dirapikan lintas
|
|
244
|
+
input/combo/cascade/chip/pagination/selection; memperbaiki bug nyata di mana
|
|
245
|
+
`.fdy-chip--filter` tidak punya focus ring sama sekali.
|
|
246
|
+
- **`.fdy-table-scroll` scroll tanpa syarat** — tak lagi hanya berlaku di dalam `.fdy-datatable`
|
|
247
|
+
(`.fdy-table-wrap` untuk shell berbingkai, `.fdy-table-scroll` untuk scroll polos standalone).
|
|
248
|
+
- **`selection.css` di-tokenkan** — nilai mentah (`#fff` thumb switch, inset `rgba`, dimensi
|
|
249
|
+
`1.15`/`2.4`/`1.35rem`) → token (`--color-switch-thumb`, `--color-shadow-inset`, `--control-box`,
|
|
250
|
+
`--control-switch-w/-h`). Nol perubahan visual.
|
|
251
|
+
- **Default warna seri donut** — saat `data-fdy-colors` lebih pendek dari jumlah seri, celah kini
|
|
252
|
+
diisi `--chart-N` fixed-order (bukan cycle palet semantik lama). Non-breaking.
|
|
253
|
+
### Added
|
|
254
|
+
- **Teal sebagai aksen fungsional** — `--color-accent` dipakai sebagai indikator non-teks
|
|
255
|
+
untuk state aktif/terpilih: item nav aktif, underline tab aktif, baris tabel terpilih,
|
|
256
|
+
opsi combo/cascade/autocomplete terpilih. Bukan dekorasi — murni penanda status.
|
|
257
|
+
- **Token baru** `--tracking-tighter` (-0.03em) untuk heading Sora.
|
|
258
|
+
- **6 assertion kontras WCAG (`AA_UI`, 3:1)** baru di `test/contrast.test.mjs` yang menjaga
|
|
259
|
+
teal-on-surface di light & dark tetap lolos ambang kontrol non-teks.
|
|
260
|
+
- **Palet chart kategorikal** — token `--chart-1..8` (+ `--chart-grid`/`--chart-tick`), 8 warna
|
|
261
|
+
colorblind-safe **tervalidasi** (validator dataviz, light & dark di surface Freeday: dark
|
|
262
|
+
all-pass, light lolos + relief rule). Donut menggambar seri **fixed-order** (tanpa cycle).
|
|
263
|
+
Token chart sengaja di luar `contrast.test.mjs` (a11y via validator palet + legend/label).
|
|
264
|
+
- **Modal size** — `.fdy-modal--sm/--md/--lg/--wide` (24/32/48/60rem, responsif, anti-overflow).
|
|
265
|
+
- **`.fdy-nav--flat`** — varian nav grup statis (tanpa caret / garis antar-grup / affordance
|
|
266
|
+
collapse) + dukung markup non-`<details>` yang benar-benar tak bisa dilipat.
|
|
267
|
+
- **Brand shell berstruktur** — `.fdy-app__brand-mark`/`-title`/`-subtitle` (ikon + 2 baris di
|
|
268
|
+
header shell); pemakaian teks satu-baris tetap jalan.
|
|
269
|
+
- **`FreedayDrawer.initAll`** — drawer kini ter-hydrate `useFreeday` di subtree Vue/React.
|
|
270
|
+
- **Export skala breakpoint** — `freeday/breakpoints` (`{ sm:600, md:960, lg:1280, xl:1920 }`)
|
|
271
|
+
untuk `matchMedia` / menyelaraskan `@media` app ke skala kit.
|
|
272
|
+
- **Docs** — contoh **product-appbar** siap-copas (breadcrumb + input-group search + menu);
|
|
273
|
+
install `git+https` untuk CI (repo privat tanpa SSH key); klarifikasi `.fdy-btn` = primary,
|
|
274
|
+
`.fdy-table-wrap`, dan density `--control-h` untuk komponen custom.
|
|
275
|
+
|
|
276
|
+
## [1.0.0] — 2026-07-22
|
|
277
|
+
Rilis **1.0 — project-ready**, sekaligus **rebrand ke Freeday**. Definisi v1.0 terpenuhi:
|
|
278
|
+
kontras WCAG AA lolos audit otomatis · installable via git · integrasi Vue/React/Blazor
|
|
279
|
+
terbukti di contoh faktur yang jalan · docs adopsi lengkap.
|
|
280
|
+
### Changed
|
|
281
|
+
- **Rebrand Foundry → Freeday.** Nama paket `freeday`; export
|
|
282
|
+
`freeday/css | /vue | /react | /blazor | /tokens | /enhancers/*`; API JS
|
|
283
|
+
`window.Freeday*` / `Freeday.toast()` / hook `useFreeday`; artefak dist `freeday.*` + `freeday-*.js`.
|
|
284
|
+
Prefix kelas/token **`fdy-` dipertahankan** (backronym FreeDaY) sehingga markup konsumen
|
|
285
|
+
**tidak** breaking. Repo: `github:cahyo-dimas/freeday-ui-kit`. Filosofi: *"lebih banyak free day
|
|
286
|
+
buat dev karena UI kit-nya sudah siap pakai"*.
|
|
287
|
+
- Install: `npm i github:cahyo-dimas/freeday-ui-kit#v1.0.0`.
|
|
288
|
+
### Docs
|
|
289
|
+
- Root redirect `index.html` → `docs/` untuk GitHub Pages (URL bersih `/freeday-ui-kit/`).
|
|
290
|
+
|
|
291
|
+
## [0.9.6] — 2026-07-22
|
|
292
|
+
### Docs
|
|
293
|
+
- **Whole-app language toggle (ID ⇄ EN)** — the topbar toggle now switches the entire docs,
|
|
294
|
+
not just the landing: topbar, sidebar labels + group headers, every section heading, and
|
|
295
|
+
every description. Keyed by section id / nav href, round-trips cleanly. (In-demo sample
|
|
296
|
+
labels stay as illustrative content.)
|
|
297
|
+
- **Proper state icons** — the empty / error state cards use duotone SVG icons instead of
|
|
298
|
+
emoji (🗂️/⚠️).
|
|
299
|
+
- Hero CTA spacing loosened (removed a stale `.doc-hero p` rule that zeroed the gap).
|
|
300
|
+
### Changed
|
|
301
|
+
- **Icons stay single-tone** — reverted the date/time picker glyphs to minimalist single-tone
|
|
302
|
+
(duotone is reserved for the larger illustrative icons — states — and the theme toggle).
|
|
303
|
+
|
|
304
|
+
## [0.9.5] — 2026-07-22
|
|
305
|
+
### Added
|
|
306
|
+
- **Two-tone (duotone) control icons** — the date/time picker triggers (and the datetime
|
|
307
|
+
composer that reuses them) now render with a low-opacity fill behind the stroke, matching the
|
|
308
|
+
sun/moon theme toggle. A coherent duotone treatment for the control-glyph family.
|
|
309
|
+
### Docs
|
|
310
|
+
- **Landing language toggle (ID ⇄ EN)** — a topbar button swaps the landing copy (hero, stats,
|
|
311
|
+
framework-integration, footer) between Indonesian and English via `[data-i18n]`; inline
|
|
312
|
+
markup (bold/code) is preserved. Version references synced to v0.9.5.
|
|
313
|
+
|
|
314
|
+
## [0.9.4] — 2026-07-22
|
|
315
|
+
### Added
|
|
316
|
+
- **Sidebar-menu component** — `.fdy-nav` (App shell) now supports per-node `.fdy-nav__icon`
|
|
317
|
+
and `.fdy-nav__badge` (count), collapsible sections `.fdy-nav__group`/`.fdy-nav__grouplabel`,
|
|
318
|
+
and nested items `.fdy-nav__tree` + `.fdy-nav__sub` (native `<details>`, zero-JS). Any node
|
|
319
|
+
can be icon+text, text-only, or badged. New "Sidebar menu" docs section.
|
|
320
|
+
- **Responsive App shell** — on mobile (≤720px) the sidebar becomes an **off-canvas drawer**
|
|
321
|
+
opened by the topbar toggle, with a `.fdy-app__backdrop`; on desktop the toggle collapses it.
|
|
322
|
+
### Changed
|
|
323
|
+
- **Brand ↔ topbar aligned** — `.fdy-app__brand` is now the same height as the topbar
|
|
324
|
+
(`--space-16`) so the logo and page title sit on the same line. `.fdy-app__title` truncates
|
|
325
|
+
instead of forcing overflow.
|
|
326
|
+
### Fixed
|
|
327
|
+
- **Awkward Indonesian copy** — dropzone “Jatuhkan …” → “Seret berkas ke sini …”.
|
|
328
|
+
### Docs
|
|
329
|
+
- Theme toggle is now a two-tone **sun/moon icon** button. Clearer **notification badge** demo
|
|
330
|
+
(bell + count) explaining the overlay badge works on any element. Responsive fixes so nothing
|
|
331
|
+
overflows down to 320px.
|
|
332
|
+
|
|
333
|
+
## [0.9.3] — 2026-07-22
|
|
334
|
+
### Added
|
|
335
|
+
- **Chart hover (Chart.js-style)** — bar & donut charts now show an interactive tooltip that
|
|
336
|
+
follows the cursor (`label: value`, donut adds `(%)`). Bars dim while one is hovered (the
|
|
337
|
+
hovered bar stays lit); donut gains a transparent SVG sector per slice that pops on hover.
|
|
338
|
+
### Changed
|
|
339
|
+
- **App shell**: the brand is now a fixed header (only the nav scrolls, so the logo never
|
|
340
|
+
scrolls away). New `.fdy-app__navtoggle` (hamburger) + `.fdy-app--nav-collapsed` to
|
|
341
|
+
collapse/hide the sidebar. Roomier `--space-8` main padding.
|
|
342
|
+
### Fixed
|
|
343
|
+
- **Anchor buttons underlined** — `.fdy-btn` now sets `text-decoration:none`, so links styled
|
|
344
|
+
as buttons (e.g. hero CTAs) no longer show an underline.
|
|
345
|
+
### Docs
|
|
346
|
+
- Nav categories are collapsible `<details>` groups with chevrons (PrimeVue-style); more
|
|
347
|
+
section whitespace; topbar hamburger to collapse the sidebar.
|
|
348
|
+
|
|
349
|
+
## [0.9.2] — 2026-07-22
|
|
350
|
+
### Fixed
|
|
351
|
+
- **Hover kontrol form tak terlihat** — sejak border resting jadi `--color-control-border`
|
|
352
|
+
(slate-500) untuk a11y, hover yang menuju `--color-text-subtle` (juga slate-500) tak berubah.
|
|
353
|
+
Semua kontrol (input, textarea, combo, cascade, time/date picker, input-group, dropzone) kini
|
|
354
|
+
hover ke `--color-text-muted` (slate-600) → menggelap terlihat.
|
|
355
|
+
- **Split button rusak saat hover** — `translateY(-1px)` per-tombol mengangkat satu paruh saja
|
|
356
|
+
sehingga jahitan tak sejajar. Kini `.fdy-btn-split` menjadi satu unit: tiap paruh tak
|
|
357
|
+
mengangkat/berbayang sendiri; split terangkat & berbayang sebagai satu kesatuan, plus garis
|
|
358
|
+
pemisah tipis antar paruh.
|
|
359
|
+
|
|
360
|
+
## [0.9.1] — 2026-07-22
|
|
361
|
+
### Added
|
|
362
|
+
- **Adapter React** (`freeday/react`) — hook `useFreeday(rootRef?)` yang meng-*hydrate* enhancer
|
|
363
|
+
di subtree pada mount + tiap commit (idempotent). Tipe `event.detail` di
|
|
364
|
+
`adapters/react/index.d.ts`. Contoh jalan `examples/react-faktur/` (Vite + React 19 + TS).
|
|
365
|
+
- **Interop Blazor** (`freeday/blazor`, `adapters/blazor/freeday-blazor.js`) — script klasik yang
|
|
366
|
+
mendaftarkan `window.FreedayBlazor` dengan `initAll` / `on` / `off` / `toast` / `toggleTheme`.
|
|
367
|
+
`on(el, event, dotNetRef, method)` meneruskan detail (JSON-safe) ke method `[JSInvokable]` C#.
|
|
368
|
+
Contoh jalan `examples/blazor-faktur/` (Blazor WASM, .NET 10, code-behind `.razor` + `.razor.cs`).
|
|
369
|
+
- Ketiga adapter (Vue/React/Blazor) diverifikasi headless dengan layar faktur yang sama:
|
|
370
|
+
hydrate markup framework, validasi men-gate submit, event → state framework, tema light/dark.
|
|
371
|
+
### Changed
|
|
372
|
+
- `package.json`: export `./react` + `./blazor`, `react` peerDependency opsional (`>=18`).
|
|
373
|
+
`version` 0.9.0 → 0.9.1.
|
|
374
|
+
|
|
375
|
+
## [0.9.0] — 2026-07-22
|
|
376
|
+
### Added
|
|
377
|
+
- **Adapter Vue 3** (`freeday/vue`) — composable `useFreeday(rootRef?)` yang meng-*hydrate*
|
|
378
|
+
semua enhancer di subtree komponen saat mount + tiap update (idempotent). Tipis: enhancer
|
|
379
|
+
tetap sumber kebenaran, event `fdy-*` mengalir lewat `v-on` native. Tipe `event.detail`
|
|
380
|
+
disertakan (`FdyCascadeChangeDetail`, dst) di `adapters/vue/index.d.ts`.
|
|
381
|
+
- **Contoh jalan** `examples/vue-faktur/` — layar faktur nyata (Vite + Vue 3 + TS) yang memakai
|
|
382
|
+
form validation + mask + cascade + datepicker + combo + table via adapter. `npm install &&
|
|
383
|
+
npm run dev`. Membuktikan kontrak integrasi end-to-end (diverifikasi headless: hydrate,
|
|
384
|
+
validasi men-gate submit, event → state Vue, tema light/dark).
|
|
385
|
+
### Changed
|
|
386
|
+
- `package.json`: export `./vue`, `adapters/` masuk `files`, `vue` sebagai peerDependency
|
|
387
|
+
opsional (`^3.4.0`). `version` 0.8.1 → 0.9.0.
|
|
388
|
+
|
|
389
|
+
## [0.8.1] — 2026-07-22
|
|
390
|
+
### Added
|
|
391
|
+
- **Form validation** (`freeday-form.js`, `[data-fdy-validate]`) — Constraint Validation
|
|
392
|
+
API di-wire ke error inline aksesibel: `aria-invalid` + pesan ter-`aria-describedby`,
|
|
393
|
+
fokus ke field invalid pertama saat submit, re-validasi live tiap blur/input. Pesan
|
|
394
|
+
custom `data-fdy-msg-*`, cocok antar-field `data-fdy-match`. Event `fdy-form-invalid`/
|
|
395
|
+
`fdy-form-valid`, `window.FreedayForm`.
|
|
396
|
+
- **Password reveal + input mask** (`freeday-mask.js`) — `[data-fdy-password]` tambah
|
|
397
|
+
toggle tampil/sembunyi (memakai ulang chrome tombol input-group); `[data-fdy-mask]`
|
|
398
|
+
format saat mengetik (`#` digit, `A` huruf, `*` alnum, sisanya literal), raw value di
|
|
399
|
+
`dataset.fdyRaw` + event `fdy-mask`. `window.FreedayMask`.
|
|
400
|
+
- **Cascade select** (`cascade.css` + `freeday-cascade.js`, `[data-fdy-cascade]`) —
|
|
401
|
+
pemilih hierarki drill-down dari `<ul>` bersarang; cabang membuka level berikut, daun
|
|
402
|
+
memilih (nilai = jalur lengkap), back/crumb + keyboard penuh. Event `fdy-cascade-change`,
|
|
403
|
+
`window.FreedayCascade`.
|
|
404
|
+
- **Chip choice/filter** (`chip.css` + `freeday-chip.js`) — chip interaktif
|
|
405
|
+
(`fdy-chip--choice` / `fdy-chip--filter`, `<button aria-pressed>`) dalam grup
|
|
406
|
+
`[data-fdy-chips]` (`data-single` = pilih-satu), plus wiring hapus untuk
|
|
407
|
+
`.fdy-chip__remove`. Event `fdy-chip-change` / `fdy-chip-remove`, `window.FreedayChip`.
|
|
408
|
+
### Changed
|
|
409
|
+
- `.fdy-input`/`.fdy-textarea` kini juga menampilkan border error lewat
|
|
410
|
+
`aria-invalid="true"` (bukan cuma kelas `--error`), jadi enhancer cukup toggle satu
|
|
411
|
+
atribut aksesibel.
|
|
412
|
+
|
|
413
|
+
## [0.8.0] — 2026-07-22
|
|
414
|
+
### Added
|
|
415
|
+
- **Installable sebagai paket GitHub.** `npm i github:cahyo-dimas/freeday-ui-kit#v0.8.0`.
|
|
416
|
+
`package.json` kini punya `exports`, `files`, `sideEffects`. Jalur import:
|
|
417
|
+
`freeday/css` (token+komponen), `freeday` (semua enhancer), `freeday/tokens`,
|
|
418
|
+
`freeday/css/components`, `freeday/enhancers/<nama>`.
|
|
419
|
+
- `dist/freeday.bundle.css` — token + komponen dalam satu file (satu import, anti-footgun
|
|
420
|
+
"lupa token").
|
|
421
|
+
- Skrip rilis: lifecycle `version` build-ulang + `git add dist`; `prepack` build-ulang.
|
|
422
|
+
### Changed
|
|
423
|
+
- `version` 0.1.0 → 0.8.0 (mulai semver bersih; komponen baru berikutnya = rilis minor 0.8.x).
|
|
424
|
+
|
|
425
|
+
## [0.7.0] — 2026-07-22
|
|
426
|
+
### Added
|
|
427
|
+
- **Time picker** (`freeday-timepicker.js`, `[data-fdy-timepicker]`) — trigger + popup daftar
|
|
428
|
+
waktu (listbox WAI-ARIA), 24 jam, `data-step`/`data-min`/`data-max`, keyboard penuh.
|
|
429
|
+
- **Datetime picker** (`freeday-datetime.js`, `[data-fdy-datetimepicker]`) — komposisi date +
|
|
430
|
+
time, satu event `fdy-datetime-change` (`YYYY-MM-DDTHH:MM`).
|
|
431
|
+
- **Konvensi varian ikon**: `data-fdy-no-icon` / `<template data-fdy-icon>` di date/time/datetime
|
|
432
|
+
picker; `fdy-combo--no-icon` + `.fdy-combo__icon` di select; contoh ikon depan di input-group.
|
|
433
|
+
- Test regresi kontras WCAG (`test/contrast.test.mjs`) — audit graf token (light + dark),
|
|
434
|
+
composite fill `-soft`, tegakkan 4.5:1 teks / 3:1 batas kontrol.
|
|
435
|
+
### Fixed
|
|
436
|
+
- **A11y (WCAG 1.4.11 & AA):** border kontrol form 1.55:1 → token `--color-control-border`
|
|
437
|
+
(≥3:1); badge danger/info gelap di surface-3 → ramp baru red-300/blue-300; `text-subtle`
|
|
438
|
+
sebagai teks nyata (header hari kalender, timestamp) → `text-muted`.
|
|
439
|
+
- **App-shell scroll:** header sticky via natural-scroll (sidebar + topbar `position:sticky`),
|
|
440
|
+
mengganti pendekatan `--fill` yang menyisakan area putih saat scroll ke bawah.
|
|
441
|
+
- **Cross-browser:** `-webkit-backdrop-filter` untuk Safari; floor browser didokumentasikan
|
|
442
|
+
(`color-mix()` → Chrome 111 / Safari 16.4 / Firefox 113).
|
|
443
|
+
|
|
444
|
+
## [0.6.0] dan sebelumnya
|
|
445
|
+
Lihat git tag `v0.2`…`v0.6`. Ringkas: pipeline token (`tokens.json` → CSS) + theming 3-sumbu,
|
|
446
|
+
app-shell/table/modal, 40+ komponen (form, feedback, navigasi, data, chart), enhancer JS
|
|
447
|
+
0-dependency, docs demo-site.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Cahyo D. Kurnianto
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|