@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.
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +7 -7
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +7 -7
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +7 -7
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +7 -7
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +8 -8
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +8 -8
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +8 -8
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +16 -16
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +10 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +7 -7
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select.mjs +7 -7
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +7 -7
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +21 -21
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +8 -8
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +8 -8
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/index.json +1 -1
- package/package.json +1 -1
- package/theme/_dark.css +7 -6
- package/theme/_light.css +70 -14
- package/theme/_semantic.css +29 -30
package/package.json
CHANGED
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 `
|
|
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*`
|
|
215
|
-
high-contrast schemes already
|
|
216
|
-
`_light.css`
|
|
217
|
-
|
|
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-
|
|
172
|
-
--color-primary-border-strong: var(--color-primary-
|
|
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-
|
|
185
|
-
--color-secondary-border-strong: var(--color-secondary-
|
|
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-
|
|
198
|
-
--color-accent-border-strong: var(--color-accent-
|
|
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-
|
|
224
|
-
--color-info-border-strong: var(--color-info-
|
|
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-
|
|
237
|
-
--color-success-border-strong: var(--color-success-
|
|
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-
|
|
250
|
-
--color-warning-border-strong: var(--color-warning-
|
|
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-
|
|
263
|
-
--color-error-border-strong: var(--color-error-
|
|
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
|
|
package/theme/_semantic.css
CHANGED
|
@@ -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.
|
|
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
|
|
199
|
-
light
|
|
200
|
-
dark see `_dark.css`
|
|
201
|
-
high-contrast {hue}-700
|
|
202
|
-
high-contrast-dark {hue}-300
|
|
197
|
+
scheme {role}-border on surface 3:1?
|
|
198
|
+
light see `_light.css` 3.76 – 5.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,
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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-
|
|
240
|
-
--color-primary-border-strong: var(--color-primary-
|
|
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-
|
|
253
|
-
--color-secondary-border-strong: var(--color-secondary-
|
|
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-
|
|
266
|
-
--color-accent-border-strong: var(--color-accent-
|
|
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-
|
|
293
|
-
--color-info-border-strong: var(--color-info-
|
|
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-
|
|
307
|
-
--color-success-border-strong: var(--color-success-
|
|
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-
|
|
322
|
-
--color-warning-border-strong: var(--color-warning-
|
|
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-
|
|
336
|
-
--color-error-border-strong: var(--color-error-
|
|
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
|
|