@cdevhub/ngx-tw 0.6.0 → 0.6.2

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.
Files changed (39) hide show
  1. package/fesm2022/cdevhub-ngx-tw-badge.mjs +7 -7
  2. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  3. package/fesm2022/cdevhub-ngx-tw-button.mjs +7 -7
  4. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  5. package/fesm2022/cdevhub-ngx-tw-card.mjs +7 -7
  6. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  7. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +7 -7
  8. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  9. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +8 -8
  10. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  11. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +8 -8
  12. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  13. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +8 -8
  14. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  15. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +16 -16
  16. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  17. package/fesm2022/cdevhub-ngx-tw-input.mjs +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  19. package/fesm2022/cdevhub-ngx-tw-item.mjs +10 -1
  20. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  21. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +7 -7
  22. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  23. package/fesm2022/cdevhub-ngx-tw-select.mjs +7 -7
  24. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  25. package/fesm2022/cdevhub-ngx-tw-separator.mjs +7 -7
  26. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  27. package/fesm2022/cdevhub-ngx-tw-slider.mjs +21 -21
  28. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  29. package/fesm2022/cdevhub-ngx-tw-switch.mjs +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  31. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +8 -8
  32. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -1
  33. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +8 -8
  34. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  35. package/index.json +1 -1
  36. package/package.json +1 -1
  37. package/theme/_dark.css +7 -6
  38. package/theme/_light.css +70 -14
  39. package/theme/_semantic.css +29 -30
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdevhub/ngx-tw",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Angular component library for Tailwind CSS v4 — accessible, signal-based, built on Angular CDK.",
5
5
  "keywords": [
6
6
  "angular",
package/theme/_dark.css CHANGED
@@ -154,7 +154,7 @@
154
154
 
155
155
  Dark-mode contrast notes. Every number below is MEASURED, not estimated:
156
156
  Tailwind v4's oklch palette → sRGB (gamut-clamped) → WCAG relative
157
- luminance → ratio. Reproduce with `scratchpad/p6-contrast.mjs dark light`.
157
+ luminance → ratio. Reproduce with `docs/research/2026-09-audit/p6-contrast.mjs dark light`.
158
158
 
159
159
  `-solid-fg` on `-solid` — the shipped pairings (AA body text, floor 4.5):
160
160
  blue-950 ↔ blue-400 5.58 ✓ (primary-solid)
@@ -211,11 +211,12 @@
211
211
 
212
212
  Each new value stays strictly dimmer than that role's `-border-strong`
213
213
  (`{hue}-500`, secondary `slate-400`), so the two border tiers remain
214
- visually distinct. `light` and `high-contrast*` are NOT changed here: both
215
- high-contrast schemes already clear 3:1 on every role (4.94–10.34), and
216
- `_light.css` fails the same floor WORSE (1.40–1.92) — that is a change to
217
- the default scheme's outline tier with its own visual blast radius and is
218
- reported separately rather than smuggled in here.
214
+ visually distinct. `light` and `high-contrast*` were NOT changed here: both
215
+ high-contrast schemes already cleared 3:1 on every role (4.94–10.34), and
216
+ `_light.css` failed the same floor WORSE (1.40–1.92) — a change to the
217
+ default scheme's outline tier with its own visual blast radius, so it was
218
+ reported separately rather than smuggled in here. It landed on 2026-09-04;
219
+ `_light.css` carries its own table and its own rule, derived from this one.
219
220
  */
220
221
 
221
222
  /* ----- Primary ----- */
package/theme/_light.css CHANGED
@@ -160,6 +160,62 @@
160
160
  --color-error-900: var(--color-red-900);
161
161
  --color-error-950: var(--color-red-950);
162
162
 
163
+ /* ===== Role slot tokens (light) =====
164
+
165
+ ===== `-border` / `-border-strong`: raised for SC 1.4.11 on 2026-09-04 =====
166
+
167
+ The seven coloured `-border` tokens were `{role}-300`, measuring
168
+ 1.40–1.92:1 against `--color-surface` (white) — the worst of the four
169
+ schemes against the 3:1 non-text-contrast floor, and in the DEFAULT one.
170
+ They are the only boundary of the alert `outline` variant (`alert.ts:50` —
171
+ transparent background, so nothing else marks the container), which makes
172
+ them identifying, not decorative. `info`, `success` and `warning` failed
173
+ the same floor on `-border-strong` too (2.15–2.71 on surface, 2.07–2.54 on
174
+ their own `-soft` fill), so three of the four tiers below move on their own
175
+ evidence rather than as a knock-on.
176
+
177
+ Rule for `-border` — the LIGHTEST palette step measuring ≥ 3.4:1 against
178
+ `--color-surface`. This is `_dark.css`'s rule read in light's direction: on
179
+ white, contrast rises with the step number, so "dimmest passing step" and
180
+ "lightest passing step" are the same instruction about keeping the tier as
181
+ subtle as the floor allows. The 0.4 margin over 3:1 is what stops a palette
182
+ retune dropping the token below it silently. Applied to grey it re-derives
183
+ `gray-500` — the value `--color-border` already ships — which is what makes
184
+ it the right rule rather than one fitted to this table.
185
+
186
+ role was now on surface on soft step below (fails)
187
+ primary blue-300 blue-500 3.76 3.45 blue-400 2.64
188
+ secondary slate-300 slate-500 4.77 4.55 slate-400 2.63
189
+ accent violet-300 violet-500 4.40 4.01 violet-400 2.85
190
+ info sky-300 sky-600 4.02 3.77 sky-500 2.71
191
+ success green-300 green-700 4.94 4.72 green-600 3.22
192
+ warning amber-300 amber-700 5.05 4.87 amber-600 3.19
193
+ error red-300 red-500 3.82 3.50 red-400 2.89
194
+ neutral (--color-border, gray-500) 4.84 4.39 gray-400 2.60
195
+
196
+ `success` and `warning` land two steps further than the rest because
197
+ green-600 (3.22 / 3.07) and amber-600 (3.19 / 3.08) clear the 3:1 floor by
198
+ 0.07 on the soft fill — inside the margin the rule exists to keep. The
199
+ spread of steps is the hues differing in luminance, not an inconsistency;
200
+ `_dark.css` produced the same spread from the same rule.
201
+
202
+ Rule for `-border-strong` — the next palette step darker than that role's
203
+ `-border`. Every role clears both floors with room (4.36–7.23 on `-soft`,
204
+ 4.76–7.56 on surface) and stays strictly darker than `-border`, so the two
205
+ tiers remain distinguishable; `theme-contrast.spec.ts` asserts both halves.
206
+
207
+ Known consequence, considered and accepted: for `primary`, `accent`, `info`
208
+ and `error` the new `-border-strong` now equals that role's `-solid`, so the
209
+ 1px rim on a solid-filled indicator (`stepper.ts`, `timeline.ts`:
210
+ `bg-{role}-solid border border-{role}-border-strong`) no longer reads as a
211
+ separate edge. Those indicators carry their emphasis through the fill and
212
+ the `ring-4 ring-{role}-soft` halo; buying the rim back costs two more steps
213
+ of darkening on every ring in the scheme, which is the worse trade.
214
+
215
+ Re-measure with `docs/research/2026-09-audit/p8-border-steps.mjs light`;
216
+ do not estimate.
217
+ */
218
+
163
219
  /* ----- Primary (blue) ----- */
164
220
  --color-primary-soft: var(--color-primary-50);
165
221
  --color-primary-soft-hover: var(--color-primary-100);
@@ -168,8 +224,8 @@
168
224
  --color-primary-solid: var(--color-primary-600);
169
225
  --color-primary-solid-hover: var(--color-primary-700);
170
226
  --color-primary-solid-fg: var(--color-white);
171
- --color-primary-border: var(--color-primary-300);
172
- --color-primary-border-strong: var(--color-primary-500);
227
+ --color-primary-border: var(--color-primary-500);
228
+ --color-primary-border-strong: var(--color-primary-600);
173
229
  --color-primary-fg: var(--color-primary-700);
174
230
  --color-primary-icon: var(--color-primary-600);
175
231
 
@@ -181,8 +237,8 @@
181
237
  --color-secondary-solid: var(--color-secondary-700);
182
238
  --color-secondary-solid-hover: var(--color-secondary-800);
183
239
  --color-secondary-solid-fg: var(--color-white);
184
- --color-secondary-border: var(--color-secondary-300);
185
- --color-secondary-border-strong: var(--color-secondary-500);
240
+ --color-secondary-border: var(--color-secondary-500);
241
+ --color-secondary-border-strong: var(--color-secondary-600);
186
242
  --color-secondary-fg: var(--color-secondary-700);
187
243
  --color-secondary-icon: var(--color-secondary-600);
188
244
 
@@ -194,8 +250,8 @@
194
250
  --color-accent-solid: var(--color-accent-600);
195
251
  --color-accent-solid-hover: var(--color-accent-700);
196
252
  --color-accent-solid-fg: var(--color-white);
197
- --color-accent-border: var(--color-accent-300);
198
- --color-accent-border-strong: var(--color-accent-500);
253
+ --color-accent-border: var(--color-accent-500);
254
+ --color-accent-border-strong: var(--color-accent-600);
199
255
  --color-accent-fg: var(--color-accent-700);
200
256
  --color-accent-icon: var(--color-accent-600);
201
257
 
@@ -220,8 +276,8 @@
220
276
  --color-info-solid: var(--color-info-700);
221
277
  --color-info-solid-hover: var(--color-info-800);
222
278
  --color-info-solid-fg: var(--color-white);
223
- --color-info-border: var(--color-info-300);
224
- --color-info-border-strong: var(--color-info-500);
279
+ --color-info-border: var(--color-info-600);
280
+ --color-info-border-strong: var(--color-info-700);
225
281
  --color-info-fg: var(--color-info-700);
226
282
  --color-info-icon: var(--color-info-600);
227
283
 
@@ -233,8 +289,8 @@
233
289
  --color-success-solid: var(--color-success-700);
234
290
  --color-success-solid-hover: var(--color-success-800);
235
291
  --color-success-solid-fg: var(--color-white);
236
- --color-success-border: var(--color-success-300);
237
- --color-success-border-strong: var(--color-success-500);
292
+ --color-success-border: var(--color-success-700);
293
+ --color-success-border-strong: var(--color-success-800);
238
294
  --color-success-fg: var(--color-success-700);
239
295
  --color-success-icon: var(--color-success-600);
240
296
 
@@ -246,8 +302,8 @@
246
302
  --color-warning-solid: var(--color-warning-500);
247
303
  --color-warning-solid-hover: var(--color-warning-600);
248
304
  --color-warning-solid-fg: var(--color-warning-950);
249
- --color-warning-border: var(--color-warning-300);
250
- --color-warning-border-strong: var(--color-warning-500);
305
+ --color-warning-border: var(--color-warning-700);
306
+ --color-warning-border-strong: var(--color-warning-800);
251
307
  --color-warning-fg: var(--color-warning-800);
252
308
  --color-warning-icon: var(--color-warning-600);
253
309
 
@@ -259,8 +315,8 @@
259
315
  --color-error-solid: var(--color-error-600);
260
316
  --color-error-solid-hover: var(--color-error-700);
261
317
  --color-error-solid-fg: var(--color-white);
262
- --color-error-border: var(--color-error-300);
263
- --color-error-border-strong: var(--color-error-500);
318
+ --color-error-border: var(--color-error-500);
319
+ --color-error-border-strong: var(--color-error-600);
264
320
  --color-error-fg: var(--color-error-700);
265
321
  --color-error-icon: var(--color-error-600);
266
322
 
@@ -192,25 +192,24 @@
192
192
  `-border` reads as "subtle", but it is NOT decorative the way
193
193
  `--color-border-muted` is: it is the alert `outline` variant's only
194
194
  boundary (`alert.ts:50`, transparent background), so SC 1.4.11's 3:1
195
- applies to it. The four schemes currently disagree about whether they
196
- honour that, and the disagreement is deliberate, not drift:
195
+ applies to it. All four schemes now clear that floor, on both tiers:
197
196
 
198
- scheme {role}-border on surface 3:1?
199
- light {role}-300 1.401.92 (all 7 roles)
200
- dark see `_dark.css` 3.42 – 4.22 ✓ (raised 2026-09-03)
201
- high-contrast {hue}-700 4.94 – 10.34 ✓
202
- high-contrast-dark {hue}-300 10.93 – 15.02 ✓
197
+ scheme {role}-border on surface 3:1?
198
+ light see `_light.css` 3.765.05 (raised 2026-09-04)
199
+ dark see `_dark.css` 3.42 – 4.22 ✓ (raised 2026-09-03)
200
+ high-contrast {hue}-700 4.94 – 10.34 ✓
201
+ high-contrast-dark {hue}-300 10.93 – 15.02 ✓
203
202
 
204
203
  The ✓/✗ column is ENFORCED — `theme-contrast.spec.ts` recomputes it for
205
- every scheme on every run, and `light` is its one dated allowance. The
206
- ranges and step names are indicative and were measured on 2026-09-03; if
207
- you need a current number, re-run the harness rather than quoting this.
208
-
209
- Light is the outstanding one. Raising it means darkening the default
210
- scheme's outline tier across eight colours a visual-baseline change
211
- with its own blast radius, reported for a pass of its own rather than
212
- folded into the dark fix. Re-measure any row here with
213
- `scratchpad/p6-contrast.mjs <scheme> <baseline>`; do not estimate.
204
+ every scheme on every run, over `-border` AND `-border-strong`, against
205
+ both `--color-surface` and the role's own `-soft` fill. Its `KNOWN_FAILING`
206
+ allowance list is now EMPTY, and the assertion is two-sided: an entry that
207
+ stops failing turns the list red, so no scheme can carry a permanent
208
+ exemption. The ranges and step names above are indicative and were measured
209
+ on 2026-09-04; if you need a current number, re-run the harness rather than
210
+ quoting this `docs/research/2026-09-audit/p6-contrast.mjs <scheme>
211
+ <baseline>` for a whole scheme, `p8-border-steps.mjs <scheme>` for the
212
+ per-step border table. Do not estimate.
214
213
  -fg colored text on neutral surface (tab labels, links)
215
214
  -icon icon tint on -soft / surface contexts
216
215
 
@@ -236,8 +235,8 @@
236
235
  --color-primary-solid: var(--color-primary-600);
237
236
  --color-primary-solid-hover: var(--color-primary-700);
238
237
  --color-primary-solid-fg: var(--color-white);
239
- --color-primary-border: var(--color-primary-300);
240
- --color-primary-border-strong: var(--color-primary-500);
238
+ --color-primary-border: var(--color-primary-500);
239
+ --color-primary-border-strong: var(--color-primary-600);
241
240
  --color-primary-fg: var(--color-primary-700);
242
241
  --color-primary-icon: var(--color-primary-600);
243
242
 
@@ -249,8 +248,8 @@
249
248
  --color-secondary-solid: var(--color-secondary-700);
250
249
  --color-secondary-solid-hover: var(--color-secondary-800);
251
250
  --color-secondary-solid-fg: var(--color-white);
252
- --color-secondary-border: var(--color-secondary-300);
253
- --color-secondary-border-strong: var(--color-secondary-500);
251
+ --color-secondary-border: var(--color-secondary-500);
252
+ --color-secondary-border-strong: var(--color-secondary-600);
254
253
  --color-secondary-fg: var(--color-secondary-700);
255
254
  --color-secondary-icon: var(--color-secondary-600);
256
255
 
@@ -262,8 +261,8 @@
262
261
  --color-accent-solid: var(--color-accent-600);
263
262
  --color-accent-solid-hover: var(--color-accent-700);
264
263
  --color-accent-solid-fg: var(--color-white);
265
- --color-accent-border: var(--color-accent-300);
266
- --color-accent-border-strong: var(--color-accent-500);
264
+ --color-accent-border: var(--color-accent-500);
265
+ --color-accent-border-strong: var(--color-accent-600);
267
266
  --color-accent-fg: var(--color-accent-700);
268
267
  --color-accent-icon: var(--color-accent-600);
269
268
 
@@ -289,8 +288,8 @@
289
288
  --color-info-solid: var(--color-info-700);
290
289
  --color-info-solid-hover: var(--color-info-800);
291
290
  --color-info-solid-fg: var(--color-white);
292
- --color-info-border: var(--color-info-300);
293
- --color-info-border-strong: var(--color-info-500);
291
+ --color-info-border: var(--color-info-600);
292
+ --color-info-border-strong: var(--color-info-700);
294
293
  --color-info-fg: var(--color-info-700);
295
294
  --color-info-icon: var(--color-info-600);
296
295
 
@@ -303,8 +302,8 @@
303
302
  --color-success-solid: var(--color-success-700);
304
303
  --color-success-solid-hover: var(--color-success-800);
305
304
  --color-success-solid-fg: var(--color-white);
306
- --color-success-border: var(--color-success-300);
307
- --color-success-border-strong: var(--color-success-500);
305
+ --color-success-border: var(--color-success-700);
306
+ --color-success-border-strong: var(--color-success-800);
308
307
  --color-success-fg: var(--color-success-700);
309
308
  --color-success-icon: var(--color-success-600);
310
309
 
@@ -318,8 +317,8 @@
318
317
  --color-warning-solid: var(--color-warning-500);
319
318
  --color-warning-solid-hover: var(--color-warning-600);
320
319
  --color-warning-solid-fg: var(--color-warning-950);
321
- --color-warning-border: var(--color-warning-300);
322
- --color-warning-border-strong: var(--color-warning-500);
320
+ --color-warning-border: var(--color-warning-700);
321
+ --color-warning-border-strong: var(--color-warning-800);
323
322
  /* -fg uses -800: amber-700/white is 3.4:1 (AA fail). amber-800/white is 6.5:1. */
324
323
  --color-warning-fg: var(--color-warning-800);
325
324
  --color-warning-icon: var(--color-warning-600);
@@ -332,8 +331,8 @@
332
331
  --color-error-solid: var(--color-error-600);
333
332
  --color-error-solid-hover: var(--color-error-700);
334
333
  --color-error-solid-fg: var(--color-white);
335
- --color-error-border: var(--color-error-300);
336
- --color-error-border-strong: var(--color-error-500);
334
+ --color-error-border: var(--color-error-500);
335
+ --color-error-border-strong: var(--color-error-600);
337
336
  --color-error-fg: var(--color-error-700);
338
337
  --color-error-icon: var(--color-error-600);
339
338