@cahyo-dimas/freeday 1.37.0 → 1.38.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 +27 -0
- package/adapters/blazor/FdyCfl.razor +1 -1
- package/adapters/blazor/FdyCfl.razor.cs +3 -0
- package/adapters/react/components/FdyCascade.tsx +3 -1
- package/adapters/react/components/FdyCfl.tsx +3 -1
- package/adapters/vue/components/FdyCascade.vue +3 -1
- package/adapters/vue/components/FdyCfl.vue +3 -1
- package/package.json +1 -1
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.38.0] — 2026-08-19
|
|
7
|
+
One note from the back-office app (IDU_EMATE_APPL_WEB, #015).
|
|
8
|
+
### Fixed
|
|
9
|
+
- **`FdyCfl`'s trigger said `"Buka pencarian"`** (Vue · React) — the accessible name of the button
|
|
10
|
+
that opens the picker, and so the first thing a screen-reader user meets on every
|
|
11
|
+
choose-from-list. #009 replaced twelve strings around it and missed this one. It takes an
|
|
12
|
+
`openLabel` prop defaulting to `'Open search'` now. Blazor was not Indonesian but was using
|
|
13
|
+
`SearchPlaceholder` as that button's `aria-label` — a placeholder doing a label's job — and now
|
|
14
|
+
takes the same `OpenLabel`, so all four stacks name the control identically.
|
|
15
|
+
- **`FdyCascade`'s up-one-level button said `"Kembali satu tingkat"`** (Vue · React) — new
|
|
16
|
+
`backLabel`, default `'Back one level'`.
|
|
17
|
+
### Changed
|
|
18
|
+
- **The language guard now lists derived forms, not just roots.** `\bcari\b` cannot match
|
|
19
|
+
*pen·cari·an*, and `kembali` was never listed — Indonesian derives by affix, so a whole-word list
|
|
20
|
+
misses most of the UI vocabulary. Widening it is what surfaced the `FdyCascade` string nobody had
|
|
21
|
+
reported.
|
|
22
|
+
|
|
23
|
+
### Fixed — the test suite
|
|
24
|
+
- **`rules()` read only the last line of a selector**, so a rule written across several lines was
|
|
25
|
+
reported under a fragment of its own name and every guard in `test/css.test.mjs` was blind to it
|
|
26
|
+
(#014). A guard that matches nothing PASSES, which is the worst way for a test to fail — it
|
|
27
|
+
surfaced only because the first draft of the filter-bar rule happened to be wrapped. The helper
|
|
28
|
+
now strips comments from the whole source first (a comment quoting CSS carries braces, and those
|
|
29
|
+
would split a rule in half) and reads the selector whole. Asserted directly rather than left to
|
|
30
|
+
the CSS staying one-rule-per-line: that is a convention, and this is the thing that would quietly
|
|
31
|
+
stop enforcing it. Mutation-tested — restoring the last-line read fails the new test by name.
|
|
32
|
+
|
|
6
33
|
## [1.37.0] — 2026-08-19
|
|
7
34
|
One note from the back-office app (IDU_EMATE_APPL_WEB, #014).
|
|
8
35
|
### Added
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
</button>
|
|
22
22
|
}
|
|
23
23
|
<button class="fdy-input-group__btn" type="button" @onclick="OpenAsync"
|
|
24
|
-
disabled="@(Disabled || Readonly)" aria-label="@
|
|
24
|
+
disabled="@(Disabled || Readonly)" aria-label="@OpenLabel">
|
|
25
25
|
<svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor"
|
|
26
26
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
27
27
|
<circle cx="11" cy="11" r="7"></circle><path d="m21 21-4.3-4.3"></path>
|
|
@@ -32,6 +32,9 @@ public partial class FdyCfl<TRow>
|
|
|
32
32
|
[Parameter] public string MoreText { get; set; } = "Load more";
|
|
33
33
|
[Parameter] public string CloseLabel { get; set; } = "Close";
|
|
34
34
|
|
|
35
|
+
/// <summary>aria-label for the button that opens the picker.</summary>
|
|
36
|
+
[Parameter] public string OpenLabel { get; set; } = "Open search";
|
|
37
|
+
|
|
35
38
|
[Parameter] public bool Disabled { get; set; }
|
|
36
39
|
|
|
37
40
|
/// <summary>Locked/view mode: shows the value but the search dialog can't be opened.</summary>
|
|
@@ -23,6 +23,8 @@ export interface FdyCascadeProps {
|
|
|
23
23
|
options: ReadonlyArray<CascadeNode>;
|
|
24
24
|
/** Path separator in the display, default " / " (matches the enhancer). */
|
|
25
25
|
separator?: string;
|
|
26
|
+
/** aria-label for the button that goes up one level. Default 'Back one level'. */
|
|
27
|
+
backLabel?: string;
|
|
26
28
|
placeholder?: string;
|
|
27
29
|
/** Accessible name for the trigger + listbox (the enhancer's data-label). */
|
|
28
30
|
label?: string;
|
|
@@ -191,7 +193,7 @@ export function FdyCascade(props: FdyCascadeProps): JSX.Element {
|
|
|
191
193
|
<button
|
|
192
194
|
type="button"
|
|
193
195
|
className="fdy-cascade__back"
|
|
194
|
-
aria-label=
|
|
196
|
+
aria-label={props.backLabel ?? 'Back one level'}
|
|
195
197
|
hidden={stack.length === 0}
|
|
196
198
|
onClick={(): void => { ascend(); listRef.current?.focus(); }}
|
|
197
199
|
>
|
|
@@ -43,6 +43,8 @@ export interface FdyCflProps<Row extends Record<string, unknown>> {
|
|
|
43
43
|
moreText?: string;
|
|
44
44
|
/** aria-label for the dialog's close button. Default 'Close'. */
|
|
45
45
|
closeLabel?: string;
|
|
46
|
+
/** aria-label for the button that opens the picker. Default 'Open search'. */
|
|
47
|
+
openLabel?: string;
|
|
46
48
|
placeholder?: string;
|
|
47
49
|
disabled?: boolean;
|
|
48
50
|
/** Locked/view mode: shows the picked value (focusable, copyable), but the search dialog can't be opened. Unlike `disabled`, it keeps tab order and isn't greyed. */
|
|
@@ -300,7 +302,7 @@ export function FdyCfl<Row extends Record<string, unknown>>(props: FdyCflProps<R
|
|
|
300
302
|
className="fdy-input-group__btn"
|
|
301
303
|
aria-haspopup="dialog"
|
|
302
304
|
aria-labelledby={props.ariaLabelledby}
|
|
303
|
-
aria-label={props.ariaLabelledby ? undefined : '
|
|
305
|
+
aria-label={props.ariaLabelledby ? undefined : (props.openLabel ?? 'Open search')}
|
|
304
306
|
disabled={isDisabled || isReadonly}
|
|
305
307
|
onClick={openDialog}
|
|
306
308
|
>
|
|
@@ -36,6 +36,8 @@ const props = defineProps<{
|
|
|
36
36
|
options: ReadonlyArray<CascadeNode>;
|
|
37
37
|
/** Path separator in the display, default " / " (matches the enhancer). */
|
|
38
38
|
separator?: string;
|
|
39
|
+
/** aria-label for the button that goes up one level. Default 'Back one level'. */
|
|
40
|
+
backLabel?: string;
|
|
39
41
|
placeholder?: string;
|
|
40
42
|
/** Accessible name for the trigger + listbox (the enhancer's data-label). */
|
|
41
43
|
label?: string;
|
|
@@ -207,7 +209,7 @@ onBeforeUnmount((): void => {
|
|
|
207
209
|
<button
|
|
208
210
|
type="button"
|
|
209
211
|
class="fdy-cascade__back"
|
|
210
|
-
aria-label="
|
|
212
|
+
:aria-label="backLabel ?? 'Back one level'"
|
|
211
213
|
:hidden="stack.length === 0"
|
|
212
214
|
@click="ascend(); listEl?.focus()"
|
|
213
215
|
>
|
|
@@ -44,6 +44,8 @@ const props = defineProps<{
|
|
|
44
44
|
moreText?: string;
|
|
45
45
|
/** aria-label for the dialog's close button. Default 'Close'. */
|
|
46
46
|
closeLabel?: string;
|
|
47
|
+
/** aria-label for the button that opens the picker. Default 'Open search'. */
|
|
48
|
+
openLabel?: string;
|
|
47
49
|
placeholder?: string;
|
|
48
50
|
disabled?: boolean;
|
|
49
51
|
/** Locked/view mode: shows the picked value (focusable, copyable), but the search dialog can't be opened. Unlike `disabled`, it keeps tab order and isn't greyed. */
|
|
@@ -306,7 +308,7 @@ onBeforeUnmount((): void => {
|
|
|
306
308
|
class="fdy-input-group__btn"
|
|
307
309
|
aria-haspopup="dialog"
|
|
308
310
|
:aria-labelledby="ariaLabelledby"
|
|
309
|
-
:aria-label="ariaLabelledby ? undefined : '
|
|
311
|
+
:aria-label="ariaLabelledby ? undefined : (openLabel ?? 'Open search')"
|
|
310
312
|
:disabled="isDisabled || isReadonly"
|
|
311
313
|
@click="openDialog"
|
|
312
314
|
>
|