fold-ng 0.23.0 → 0.25.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 +68 -1
- package/README.md +1 -1
- package/fesm2022/fold-ng.mjs +149 -32
- package/fesm2022/fold-ng.mjs.map +1 -1
- package/package.json +1 -1
- package/tmp-esm2022/tsconfig.lib.tsbuildinfo +1 -1
- package/types/fold-ng.d.ts +144 -10
- package/types/fold-ng.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,71 @@ All notable changes to **fold-ng** are documented here. The format follows
|
|
|
8
8
|
|
|
9
9
|
_Nothing yet._
|
|
10
10
|
|
|
11
|
+
## [0.25.0] - 2026-09-05
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`fold-search` devient un contrôle, et non plus un capteur.** Sa `value` est
|
|
16
|
+
un `model()` : la boîte se pilote donc de l'extérieur. C'est ce qui manquait
|
|
17
|
+
pour qu'elle remplace une recherche écrite à la main — choisir un filtre
|
|
18
|
+
ailleurs doit pouvoir VIDER le champ, et une recherche en écriture seule
|
|
19
|
+
continuait d'afficher un terme que les résultats n'honoraient plus.
|
|
20
|
+
|
|
21
|
+
Deux façons de s'en servir, et elles répondent à deux questions : `[(value)]`
|
|
22
|
+
donne le terme comme **état**, à chaque frappe — c'est ce que veut un filtrage
|
|
23
|
+
d'un tableau déjà en mémoire, où l'anti-rebond n'ajoute que de la latence ;
|
|
24
|
+
`(searchChange)` le donne comme **événement**, une fois posé — c'est ce que
|
|
25
|
+
veut une requête au serveur. Les deux se composent. Écrire `value` de
|
|
26
|
+
l'extérieur n'émet jamais : celui qui écrit sait déjà.
|
|
27
|
+
|
|
28
|
+
- **`fold-search` porte enfin sa loupe, sa croix et son compte.** Les trois
|
|
29
|
+
étaient recopiés dans chaque écran, avec le même oubli à chaque fois : le
|
|
30
|
+
compte de résultats change sous une recherche, donc il doit être **annoncé**.
|
|
31
|
+
Il porte `role="status"` et `aria-live="polite"`, et un utilisateur qui ne
|
|
32
|
+
voit pas la grille apprend enfin que quatre cents lignes sont devenues trois.
|
|
33
|
+
|
|
34
|
+
`resultCount` (rien tant qu'il vaut `null`), `resultLabel` (le mot après le
|
|
35
|
+
nombre — « pièces », "rows") et `placement` : `top`, `end` ou `bottom`.
|
|
36
|
+
`end` et non `right` — la bibliothèque se pose en propriétés **logiques**, et
|
|
37
|
+
le compte doit suivre le sens de lecture plutôt qu'un côté de l'écran.
|
|
38
|
+
|
|
39
|
+
- **`fold-input` gagne deux affixes**, et c'est de là que `fold-search` tire les
|
|
40
|
+
siens : `leadingIcon` dessine un glyphe DANS la boîte, avant le texte (le
|
|
41
|
+
champ réserve la place lui-même, et le glyphe ne prend pas le clic) ;
|
|
42
|
+
`clearable` + `clearLabel` posent un `×` de fin tant qu'il y a quelque chose à
|
|
43
|
+
effacer, qui vide la valeur **et rend le focus** — sans quoi il faut un second
|
|
44
|
+
clic pour reprendre la saisie.
|
|
45
|
+
|
|
46
|
+
Les deux sont à `false` par défaut : un champ de formulaire qui s'efface tout
|
|
47
|
+
seul invite l'accident qu'il ne sait pas défaire. Le `×` ne paraît ni en
|
|
48
|
+
lecture seule ni désactivé — il promettrait un geste que le contrôle refuse —
|
|
49
|
+
et un mot de passe `revealable` garde la place de fin : perdre son œil casse
|
|
50
|
+
la saisie, perdre la croix la rend seulement moins commode.
|
|
51
|
+
|
|
52
|
+
## [0.24.0] - 2026-08-29
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
|
|
56
|
+
- **`FoldTableColumn.numeric`** — la colonne tient des NOMBRES, et deux choses
|
|
57
|
+
suivent : chiffres tabulaires et alignement à droite. C'est la même chose dite
|
|
58
|
+
deux fois, d'où un drapeau et non deux propriétés — des chiffres
|
|
59
|
+
proportionnels alignés à droite ne s'alignent toujours pas sous eux-mêmes, et
|
|
60
|
+
des chiffres tabulaires en drapeau à gauche perdent leur raison d'être.
|
|
61
|
+
|
|
62
|
+
Une colonne de montants en chiffres proportionnels oblige l'œil à lire chaque
|
|
63
|
+
ligne au lieu de balayer la colonne — ce qui est la seule raison de mettre des
|
|
64
|
+
nombres dans un tableau. L'en-tête suit sans qu'on le lui dise ; un `align`
|
|
65
|
+
écrit à la main gagne toujours.
|
|
66
|
+
|
|
67
|
+
### Docs
|
|
68
|
+
|
|
69
|
+
- **`FoldTableColumn.cellClass` dit enfin où sa classe atterrit** : sur le
|
|
70
|
+
`<td>` de la table, qui porte l'encapsulation de la TABLE. Les styles de
|
|
71
|
+
composant du consommateur ne l'atteignent donc jamais — seule une classe
|
|
72
|
+
globale y fait quelque chose. Pour habiller une cellule depuis sa propre
|
|
73
|
+
feuille de style, il faut projeter un `<ng-template foldCell>` : ce qu'il rend
|
|
74
|
+
appartient au consommateur, attribut compris.
|
|
75
|
+
|
|
11
76
|
## [0.23.0] - 2026-08-29
|
|
12
77
|
|
|
13
78
|
### Added
|
|
@@ -2390,7 +2455,9 @@ design-token stylesheet.
|
|
|
2390
2455
|
`currentColor`; `prefers-reduced-motion` + `forced-colors` are respected;
|
|
2391
2456
|
strings localise via inputs / providers (`provideFoldPanelLabels`).
|
|
2392
2457
|
|
|
2393
|
-
[unreleased]: https://github.com/hugoheynard/fold-ng/compare/v0.
|
|
2458
|
+
[unreleased]: https://github.com/hugoheynard/fold-ng/compare/v0.25.0...HEAD
|
|
2459
|
+
[0.25.0]: https://github.com/hugoheynard/fold-ng/releases/tag/v0.25.0
|
|
2460
|
+
[0.24.0]: https://github.com/hugoheynard/fold-ng/releases/tag/v0.24.0
|
|
2394
2461
|
[0.23.0]: https://github.com/hugoheynard/fold-ng/releases/tag/v0.23.0
|
|
2395
2462
|
[0.22.1]: https://github.com/hugoheynard/fold-ng/releases/tag/v0.22.1
|
|
2396
2463
|
[0.22.0]: https://github.com/hugoheynard/fold-ng/releases/tag/v0.22.0
|
package/README.md
CHANGED
|
@@ -353,7 +353,7 @@ ships it.
|
|
|
353
353
|
| `FoldFieldsetComponent` | `fold-fieldset` | Named group of controls — a real `<fieldset>`/`<legend>` with the browser's margin/padding/3D border undone and the rhythm on tokens. `disabled` disables every control inside (the element's unique power); `hint` wired through `aria-describedby` (`hintPosition` `under`/`inline`); `legend` (empty renders none) or `ariaLabel`; `optional` marks the whole group (not each member); `legendVariant` (`eyebrow`/`heading` — the same two registers as a page-section's title), `direction` (`vertical`/`horizontal`), `appearance` (`plain`/`border`); `--fold-fieldset-gap`. |
|
|
354
354
|
| `FoldPasswordFieldComponent` | `fold-password-field` | Password input + a live requirements checklist (a dot/tick per rule). Rules injected via `FoldPasswordRule` (`{ label, test }` — regex/zod/anything); `revealable` eye (a `fold-input` capability); `marker` dot/check; `[rules]` slot to redesign the list; `validChange`; Signal Forms. |
|
|
355
355
|
| `FoldViewToggleComponent` | `fold-view-toggle` | Segmented single-select (Cards/Table, density, chart-mode…). Generic `options` (`{ value, icon?, label?, ariaLabel?, disabled? }`) + `[(value)]`; a real `role="radiogroup"` — roving tabindex, arrow keys, Home/End, disabled-skip; `size`, `iconOnly`, `activeStyle` (raised / accent). |
|
|
356
|
-
| `FoldSearchComponent` | `fold-search` |
|
|
356
|
+
| `FoldSearchComponent` | `fold-search` | Search box — magnifier, clear `×`, optional announced result count (`resultCount` / `resultLabel` / `placement`). `[(value)]` is the term as state (every keystroke); `searchChange` emits it once typing settles (`delayMs`), trimmed + de-duplicated. |
|
|
357
357
|
| `FoldListboxComponent` / `FoldOptionComponent` | `fold-listbox` / `fold-option` | Styleable single-select — the richer sibling of `fold-select` (native `<select>`) for options that need custom rows (icon, second line, status). On `fold-popover`; `role="listbox"` + `aria-activedescendant`, full keyboard (↑/↓, `Home`/`End`, type-ahead, `Enter`). Signal Forms (`FormValueControl<string>`, `[formField]`/`[(value)]`); shares `fold-input`'s box chrome. |
|
|
358
358
|
| `FoldMultiselectComponent` | `fold-multiselect` | Multi-select sibling of `fold-listbox` (same popover + `fold-option` rows). Value is a set (`readonly string[]`); activating a row toggles it and the panel stays open. Separate component — not a `multiple` flag — so the Signal-Forms value type stays honest. `role="listbox"` + `aria-multiselectable`; the trigger summarises the picks. |
|
|
359
359
|
| `FoldOptgroupComponent` | `fold-optgroup` | Labelled group of `<fold-option>`s inside a `fold-listbox` / `fold-multiselect` — the styleable `<optgroup>`. Presentational: `role="group"` + `aria-labelledby` header (no `role="option"`, so keyboard nav skips it); the owner discovers grouped options in document order, so roving crosses groups seamlessly. |
|