@ttoss/fsl-theme 2.1.0 → 2.1.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/dist/{Types-a_sfpbha.d.cts → Types-8o6d09ll.d.cts} +23 -24
- package/dist/{Types-a_sfpbha.d.mts → Types-8o6d09ll.d.mts} +23 -24
- package/dist/{baseBundle-CXdxj_re.mjs → baseBundle-C6RP-2Qb.mjs} +1 -1
- package/dist/{baseBundle-a9LDsqYy.cjs → baseBundle-C6yVk4x0.cjs} +1 -1
- package/dist/{createTheme-B7H0xSVp.cjs → createTheme-BzlJdFAG.cjs} +18 -18
- package/dist/{createTheme-Bm9LVQ4w.mjs → createTheme-gTjIryKH.mjs} +18 -18
- package/dist/css-BVePVvTJ.mjs +96 -0
- package/dist/css-CKvOE4mT.cjs +113 -0
- package/dist/css.cjs +5 -41
- package/dist/css.d.cts +22 -2
- package/dist/css.d.mts +22 -2
- package/dist/css.mjs +3 -41
- package/dist/dataviz/index.cjs +2 -2
- package/dist/dataviz/index.d.cts +1 -1
- package/dist/dataviz/index.d.mts +1 -1
- package/dist/dataviz/index.mjs +1 -1
- package/dist/dtcg.cjs +11 -16
- package/dist/dtcg.d.cts +3 -3
- package/dist/dtcg.d.mts +3 -3
- package/dist/dtcg.mjs +11 -16
- package/dist/{index-BmZQVd3G.d.cts → index-CIkVRaGC.d.cts} +1 -1
- package/dist/{index-XZsRrMTF.d.mts → index-OP4B-9hU.d.mts} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +1 -1
- package/dist/{react-DQErMGJz.cjs → react-C1WRCOFF.cjs} +43 -9
- package/dist/{react-BwsjWKmo.d.mts → react-C9QSshf3.d.mts} +34 -7
- package/dist/{react-Drr-QSuX.d.cts → react-CZDLBN6v.d.cts} +34 -7
- package/dist/react.cjs +2 -1
- package/dist/react.d.cts +2 -2
- package/dist/react.d.mts +2 -2
- package/dist/react.mjs +38 -10
- package/dist/themes/bruttal.cjs +2 -2
- package/dist/themes/bruttal.d.cts +1 -1
- package/dist/themes/bruttal.d.mts +1 -1
- package/dist/themes/bruttal.mjs +2 -2
- package/dist/{toCssVars-CWTlp9St.mjs → toCssVars-CTGqZ_t3.mjs} +5 -5
- package/dist/{toCssVars-D0BR23cP.cjs → toCssVars-NGi4K2Oc.cjs} +5 -5
- package/dist/vars.cjs +2 -2
- package/dist/vars.d.cts +1 -1
- package/dist/vars.d.mts +1 -1
- package/dist/vars.mjs +2 -2
- package/dist/{withDataviz-DrUtw8cc.cjs → withDataviz-B-XQ1MDT.cjs} +1 -1
- package/dist/{withDataviz-Ln3sEwb7.mjs → withDataviz-B3mEhBPh.mjs} +1 -1
- package/llms.txt +10 -10
- package/package.json +8 -4
package/dist/react.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use client';
|
|
3
3
|
|
|
4
4
|
import { r as deepMerge, s as toFlatTokens } from "./helpers-BXaKe2s3.mjs";
|
|
5
|
-
import { getThemeStylesContent } from "./css.mjs";
|
|
5
|
+
import { n as PREFLIGHT_CSS, t as getThemeStylesContent } from "./css-BVePVvTJ.mjs";
|
|
6
6
|
import { i as createThemeRuntime, t as getThemeScriptContent } from "./ssrScript-zDK1dqXr.mjs";
|
|
7
7
|
import * as React from "react";
|
|
8
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -96,19 +96,18 @@ var useCoarsePointer = () => {
|
|
|
96
96
|
/**
|
|
97
97
|
* Apply coarse-pointer hit target overrides to a resolved token map.
|
|
98
98
|
*
|
|
99
|
-
* When `isCoarse` is true, replaces `semantic.sizing.hit
|
|
100
|
-
*
|
|
101
|
-
*
|
|
99
|
+
* When `isCoarse` is true, replaces the `semantic.sizing.hit` value with the
|
|
100
|
+
* raw coarse value from `core.sizing.hit.coarse`. This mirrors the
|
|
101
|
+
* `@media (any-pointer: coarse)` block that `toCssVars` emits for CSS
|
|
102
102
|
* consumers — ensuring non-CSS consumers (React Native, canvas) get
|
|
103
103
|
* touch-appropriate hit targets.
|
|
104
104
|
*/
|
|
105
105
|
var applyCoarseHitOverrides = (tokens, theme, isCoarse) => {
|
|
106
106
|
if (!isCoarse) return tokens;
|
|
107
|
-
|
|
108
|
-
...tokens
|
|
107
|
+
return {
|
|
108
|
+
...tokens,
|
|
109
|
+
"semantic.sizing.hit": theme.core.sizing.hit.coarse
|
|
109
110
|
};
|
|
110
|
-
for (const [key, value] of Object.entries(theme.core.sizing.hit.coarse)) if (typeof value === "string") overrides[`semantic.sizing.hit.${key}`] = value;
|
|
111
|
-
return overrides;
|
|
112
111
|
};
|
|
113
112
|
var SemanticTokensCtx = React.createContext(null);
|
|
114
113
|
/**
|
|
@@ -319,7 +318,7 @@ var useTokens = () => {
|
|
|
319
318
|
*
|
|
320
319
|
* ### ⚠ CSS-coupled tokens stay unresolved
|
|
321
320
|
* A registered set of dimensional tokens (model.md §8 — spacing steps, fluid
|
|
322
|
-
* `text.*.fontSize`, `sizing.hit
|
|
321
|
+
* `text.*.fontSize`, `sizing.hit`, `sizing.viewport.*`, `sizing.measure.reading`,
|
|
323
322
|
* `spacing.gutter.*`) carry CSS-only constructs (`var()`, `calc()`, `clamp()`,
|
|
324
323
|
* `cqi`, `dvh`, `ch`). This hook returns those **as-is** — they are not usable
|
|
325
324
|
* outside a CSS engine. Colors, opacity, z-index, font weights/leading and
|
|
@@ -448,6 +447,35 @@ var ThemeStyles = ({
|
|
|
448
447
|
});
|
|
449
448
|
};
|
|
450
449
|
/**
|
|
450
|
+
* Injects the theme's base stylesheet (the {@link PREFLIGHT_CSS} preflight):
|
|
451
|
+
* a box-sizing reset, the document body's default typography and colour drawn
|
|
452
|
+
* from the semantic tokens, and the global reduced-motion guard. Render it
|
|
453
|
+
* once at the app root, alongside `<ThemeProvider>` / `<ThemeStyles>` — so the
|
|
454
|
+
* base layer is the theme's responsibility, not hand-written per app.
|
|
455
|
+
*
|
|
456
|
+
* It sets no widths, heights, or component styling (those belong to
|
|
457
|
+
* `@ttoss/fsl-ui` and the app). Requires the `--tt-*` custom properties to be
|
|
458
|
+
* present on the page.
|
|
459
|
+
*
|
|
460
|
+
* @example
|
|
461
|
+
* ```tsx
|
|
462
|
+
* <ThemeProvider theme={theme}>
|
|
463
|
+
* <ThemeReset />
|
|
464
|
+
* <App />
|
|
465
|
+
* </ThemeProvider>
|
|
466
|
+
* ```
|
|
467
|
+
*/
|
|
468
|
+
var ThemeReset = ({
|
|
469
|
+
nonce
|
|
470
|
+
} = {}) => {
|
|
471
|
+
return /* @__PURE__ */jsx("style", {
|
|
472
|
+
nonce,
|
|
473
|
+
dangerouslySetInnerHTML: {
|
|
474
|
+
__html: PREFLIGHT_CSS
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
};
|
|
478
|
+
/**
|
|
451
479
|
* Convenience component that renders both `<ThemeScript>` and `<ThemeStyles>`
|
|
452
480
|
* in a single line — the complete SSR `<head>` setup for flash-free theming.
|
|
453
481
|
*
|
|
@@ -513,4 +541,4 @@ var ThemeHead = ({
|
|
|
513
541
|
};
|
|
514
542
|
|
|
515
543
|
//#endregion
|
|
516
|
-
export { ThemeHead, ThemeProvider, ThemeScript, ThemeStyles, useColorMode, useResolvedTokens, useTokens };
|
|
544
|
+
export { ThemeHead, ThemeProvider, ThemeReset, ThemeScript, ThemeStyles, useColorMode, useResolvedTokens, useTokens };
|
package/dist/themes/bruttal.cjs
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, {
|
|
3
3
|
value: 'Module'
|
|
4
4
|
});
|
|
5
|
-
const require_createTheme = require('../createTheme-
|
|
5
|
+
const require_createTheme = require('../createTheme-BzlJdFAG.cjs');
|
|
6
6
|
const require_helpers = require('../helpers-BU40JvFA.cjs');
|
|
7
|
-
const require_withDataviz = require('../withDataviz-
|
|
7
|
+
const require_withDataviz = require('../withDataviz-B-XQ1MDT.cjs');
|
|
8
8
|
|
|
9
9
|
//#region src/themes/bruttal.ts
|
|
10
10
|
/**
|
package/dist/themes/bruttal.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
|
|
2
|
-
import { a as darkAlternate, n as createTheme } from "../createTheme-
|
|
2
|
+
import { a as darkAlternate, n as createTheme } from "../createTheme-gTjIryKH.mjs";
|
|
3
3
|
import { r as deepMerge } from "../helpers-BXaKe2s3.mjs";
|
|
4
|
-
import { t as withDataviz } from "../withDataviz-
|
|
4
|
+
import { t as withDataviz } from "../withDataviz-B3mEhBPh.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/themes/bruttal.ts
|
|
7
7
|
/**
|
|
@@ -130,13 +130,13 @@ var buildReducedMotionVars = theme => {
|
|
|
130
130
|
* contains the coarse overrides, to be emitted inside
|
|
131
131
|
* `@media (any-pointer: coarse)`.
|
|
132
132
|
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
133
|
+
* `hit` is a single floor per pointer profile: the coarse override maps
|
|
134
|
+
* `semantic.sizing.hit` to `core.sizing.hit.coarse`.
|
|
135
135
|
*/
|
|
136
136
|
var buildCoarseHitVars = theme => {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
return {
|
|
138
|
+
[toCssVarName("semantic.sizing.hit")]: theme.core.sizing.hit.coarse
|
|
139
|
+
};
|
|
140
140
|
};
|
|
141
141
|
/**
|
|
142
142
|
* Render a complete scoped CSS block from a vars record.
|
|
@@ -130,13 +130,13 @@ var buildReducedMotionVars = theme => {
|
|
|
130
130
|
* contains the coarse overrides, to be emitted inside
|
|
131
131
|
* `@media (any-pointer: coarse)`.
|
|
132
132
|
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
133
|
+
* `hit` is a single floor per pointer profile: the coarse override maps
|
|
134
|
+
* `semantic.sizing.hit` to `core.sizing.hit.coarse`.
|
|
135
135
|
*/
|
|
136
136
|
var buildCoarseHitVars = theme => {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
return {
|
|
138
|
+
[toCssVarName("semantic.sizing.hit")]: theme.core.sizing.hit.coarse
|
|
139
|
+
};
|
|
140
140
|
};
|
|
141
141
|
/**
|
|
142
142
|
* Render a complete scoped CSS block from a vars record.
|
package/dist/vars.cjs
CHANGED
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, Symbol.toStringTag, {
|
|
|
3
3
|
value: 'Module'
|
|
4
4
|
});
|
|
5
5
|
const require_helpers = require('./helpers-BU40JvFA.cjs');
|
|
6
|
-
const require_baseBundle = require('./baseBundle-
|
|
7
|
-
const require_toCssVars = require('./toCssVars-
|
|
6
|
+
const require_baseBundle = require('./baseBundle-C6yVk4x0.cjs');
|
|
7
|
+
const require_toCssVars = require('./toCssVars-NGi4K2Oc.cjs');
|
|
8
8
|
|
|
9
9
|
//#region src/roots/toVars.ts
|
|
10
10
|
/**
|
package/dist/vars.d.cts
CHANGED
package/dist/vars.d.mts
CHANGED
package/dist/vars.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
|
|
2
2
|
import { o as isPlainObject } from "./helpers-BXaKe2s3.mjs";
|
|
3
|
-
import { t as baseBundle } from "./baseBundle-
|
|
4
|
-
import { t as toCssVarName } from "./toCssVars-
|
|
3
|
+
import { t as baseBundle } from "./baseBundle-C6RP-2Qb.mjs";
|
|
4
|
+
import { t as toCssVarName } from "./toCssVars-CTGqZ_t3.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/roots/toVars.ts
|
|
7
7
|
/**
|
package/llms.txt
CHANGED
|
@@ -77,7 +77,7 @@ Components consume **only** `semantic.*`. Core values never change between light
|
|
|
77
77
|
| `semantic.colors.` | `--tt-colors-` | `vars.colors.action.primary.background.default` → `var(--tt-colors-action-primary-background-default)` |
|
|
78
78
|
| `semantic.text.` | `--tt-text-` | `vars.text.body.md.fontSize` → `var(--tt-text-body-md-fontSize)` |
|
|
79
79
|
| `semantic.spacing.` | `--tt-spacing-` | `vars.spacing.inset.control.md` → `var(--tt-spacing-inset-control-md)` |
|
|
80
|
-
| `semantic.sizing.` | `--tt-sizing-` | `vars.sizing.hit
|
|
80
|
+
| `semantic.sizing.` | `--tt-sizing-` | `vars.sizing.hit` → `var(--tt-sizing-hit)` |
|
|
81
81
|
| `semantic.radii.` | `--tt-radii-` | `vars.radii.control` → `var(--tt-radii-control)` |
|
|
82
82
|
| `semantic.border.` | `--tt-border-` | `vars.border.outline.control.width` → `var(--tt-border-outline-control-width)` |
|
|
83
83
|
| `semantic.focus.` | `--tt-focus-` | `vars.focus.ring.color` → `var(--tt-focus-ring-color)` |
|
|
@@ -139,7 +139,7 @@ Valid `{ux, state}` combinations: see [Color state legality](#color-state-legali
|
|
|
139
139
|
| | `vars.spacing.gutter.{page,section}` | CSS length / `clamp()` |
|
|
140
140
|
| | `vars.spacing.separation.interactive.min` | CSS length |
|
|
141
141
|
| **text** | `vars.text.{display,headline,title,body,label,code}.{lg,md,sm}` | TextStyle (object — see below) |
|
|
142
|
-
| **sizing** | `vars.sizing.hit
|
|
142
|
+
| **sizing** | `vars.sizing.hit` | CSS length |
|
|
143
143
|
| | `vars.sizing.icon.{sm,md,lg}` | CSS length |
|
|
144
144
|
| | `vars.sizing.identity.{sm,md,lg,xl}` | CSS length |
|
|
145
145
|
| | `vars.sizing.measure.reading` | CSS `ch` / `clamp()` |
|
|
@@ -215,7 +215,7 @@ Available fields: `fontFamily` · `fontSize` · `fontWeight` · `lineHeight` ·
|
|
|
215
215
|
|
|
216
216
|
**`width` / `height` / `min-width` / `min-height` → `sizing`**
|
|
217
217
|
|
|
218
|
-
- Interactive area (hit target) → `vars.sizing.hit
|
|
218
|
+
- Interactive area (hit target) → `vars.sizing.hit` (apply via `min-width`/`min-height`, not visual size)
|
|
219
219
|
- Icon glyph → `vars.sizing.icon.{sm|md|lg}`
|
|
220
220
|
- Avatar / identity → `vars.sizing.identity.{sm|md|lg|xl}`
|
|
221
221
|
- Reading line length → `vars.sizing.measure.reading` (use as `max-width`)
|
|
@@ -313,7 +313,7 @@ Never both. Never neither.
|
|
|
313
313
|
|
|
314
314
|
**§3 — `opacity.disabled` is for visual media only.** Disabled controls and disabled text **must** use `vars.colors.{ux}.{role}.{dimension}.disabled` color tokens (which carry contrast guarantees). `vars.opacity.disabled` is exclusive to images, avatars, illustrations — assets without a color contract.
|
|
315
315
|
|
|
316
|
-
**§4 — `sizing.hit
|
|
316
|
+
**§4 — `sizing.hit` is enforced via `min-*`, not visual size.** Apply as `min-width` / `min-height`. The CSS layer auto-injects coarse-pointer overrides under `@media (any-pointer: coarse)` — do not write that media query yourself. `hit` is a single ergonomic floor (not a `min`/`base`/`prominent` scale) — see ADR-020.
|
|
317
317
|
|
|
318
318
|
**§5 — `tonal` elevation requires its shadow counterpart.** Using `vars.elevation.tonal.raised` is only valid when `vars.elevation.surface.raised` is also applied to the same element. Tonal alone breaks depth perception when the theme switches modes.
|
|
319
319
|
|
|
@@ -408,7 +408,7 @@ function PrimaryButton({
|
|
|
408
408
|
: vars.colors.action.primary.text.default,
|
|
409
409
|
// §6 — density uniform: inset / sizing / typography all md
|
|
410
410
|
padding: `0 ${vars.spacing.inset.control.md}`,
|
|
411
|
-
minHeight: vars.sizing.hit
|
|
411
|
+
minHeight: vars.sizing.hit, // §4: min-height enforces hit target
|
|
412
412
|
// typography — each TextStyle field is its own var() string
|
|
413
413
|
fontFamily: vars.text.label.md.fontFamily,
|
|
414
414
|
fontSize: vars.text.label.md.fontSize,
|
|
@@ -463,7 +463,7 @@ function TextField({
|
|
|
463
463
|
borderWidth: vars.border.outline.control.width,
|
|
464
464
|
borderStyle: vars.border.outline.control.style,
|
|
465
465
|
borderRadius: vars.radii.control,
|
|
466
|
-
minHeight: vars.sizing.hit
|
|
466
|
+
minHeight: vars.sizing.hit,
|
|
467
467
|
padding: `0 ${vars.spacing.inset.control.md}`,
|
|
468
468
|
fontSize: vars.text.body.md.fontSize,
|
|
469
469
|
lineHeight: vars.text.body.md.lineHeight,
|
|
@@ -540,7 +540,7 @@ For every component you generate, verify:
|
|
|
540
540
|
2. **Focus** (§1) — every focusable element has *exactly one* of: per-ux `{ux}.{role}.border.focused`, system `focus.ring.*`, or valence-aware input override. Never both. Never neither.
|
|
541
541
|
3. **Pairing** (§2) — every `colors.{ux}.{role}.background.{state}` is paired with `colors.{ux}.{role}.text.{state}` at the same state.
|
|
542
542
|
4. **Disabled** (§3) — disabled controls and text use `colors.{ux}.{role}.{dimension}.disabled`; `opacity.disabled` appears only on `<img>`, `<Avatar>`, illustrations.
|
|
543
|
-
5. **Hit target** (§4) — interactive elements set `minWidth` or `minHeight` (not `width`/`height`) to `vars.sizing.hit
|
|
543
|
+
5. **Hit target** (§4) — interactive elements set `minWidth` or `minHeight` (not `width`/`height`) to `vars.sizing.hit`.
|
|
544
544
|
6. **Density** (§6) — the same step (`sm`/`md`/`lg`) is used across `spacing.inset.*`, `spacing.gap.*`, `sizing.icon.*`, and `text.label.*` within the component.
|
|
545
545
|
7. **Validation** — invalid inputs use `input.negative.*` *role*, never `input.primary.*` + a fictitious `invalid` state.
|
|
546
546
|
8. **Stateful CSS** — `:hover`, `:focus-visible`, `:active`, `:disabled` are written in a `.css` file or CSS-in-JS; inline `style` cannot express pseudo-classes.
|
|
@@ -594,7 +594,7 @@ const NativeButton = ({ disabled }: { disabled?: boolean }) => {
|
|
|
594
594
|
|
|
595
595
|
`useResolvedTokens()` automatically applies coarse-pointer hit target overrides — mirrors the `@media (any-pointer: coarse)` block that `toCssVars` injects for CSS consumers.
|
|
596
596
|
|
|
597
|
-
⚠ **CSS-coupled tokens stay unresolved** (model.md §8): spacing steps (`calc(N * var(--tt-core-spacing-engine-unit))`), fluid `text.*.fontSize`
|
|
597
|
+
⚠ **CSS-coupled tokens stay unresolved** (model.md §8): spacing steps (`calc(N * var(--tt-core-spacing-engine-unit))`), fluid `text.*.fontSize` (`clamp()` + `cqi`), `sizing.hit` (`clamp()` + `rem`), `sizing.viewport.*` (`dvh`/`dvw`), `sizing.measure.reading` (`ch`), and `spacing.gutter.*` are CSS expressions and are **not usable** outside a CSS engine. In non-CSS environments, consume colors, opacity, z-index, font weights/leading, and other scalar tokens — derive dimensional values from your platform's layout system.
|
|
598
598
|
|
|
599
599
|
---
|
|
600
600
|
|
|
@@ -644,12 +644,12 @@ createTheme({
|
|
|
644
644
|
|
|
645
645
|
**Override paths (all together):**
|
|
646
646
|
- `core.spacing.{1..16}` — base spacing scale steps
|
|
647
|
-
- `core.sizing.hit.fine
|
|
647
|
+
- `core.sizing.hit.fine` — fine-pointer hit targets
|
|
648
648
|
- `core.sizing.icon.*` — icon ramp
|
|
649
649
|
- `core.font.size.*` (optional) — type scale
|
|
650
650
|
|
|
651
651
|
**Invariants:**
|
|
652
|
-
- Touch targets (`core.sizing.hit.coarse
|
|
652
|
+
- Touch targets (`core.sizing.hit.coarse`) must remain ≥ 44px regardless of fine-pointer values (a11y minimum).
|
|
653
653
|
- Density propagates uniformly: if you reduce `core.spacing.4` by 25%, reduce other spacing steps proportionally to preserve the scale ratios.
|
|
654
654
|
- Hit target floors in `clamp()` expressions must remain ergonomic (≥ 32px for fine pointer).
|
|
655
655
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ttoss/fsl-theme",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "ttoss theme provider for UI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"css-variables",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"directory": "packages/fsl-theme"
|
|
19
19
|
},
|
|
20
20
|
"license": "MIT",
|
|
21
|
-
"author": "
|
|
21
|
+
"author": "Ennio Lopes <enniolopes@gmail.com>",
|
|
22
22
|
"contributors": [
|
|
23
|
-
"Ennio
|
|
23
|
+
"Ennio Lopes <enniolopes@gmail.com>"
|
|
24
24
|
],
|
|
25
25
|
"sideEffects": false,
|
|
26
26
|
"type": "module",
|
|
@@ -63,8 +63,12 @@
|
|
|
63
63
|
],
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@testing-library/react": "^16.3.2",
|
|
66
|
+
"@types/node": "^24.12.0",
|
|
67
|
+
"@types/react": "^19.2.14",
|
|
68
|
+
"@types/react-dom": "^19.0.2",
|
|
66
69
|
"jest": "^30.4.2",
|
|
67
70
|
"react": "^19.2.6",
|
|
71
|
+
"react-dom": "^19.2.6",
|
|
68
72
|
"ts-morph": "^28.0.0",
|
|
69
73
|
"tsdown": "^0.22.2",
|
|
70
74
|
"tsx": "^4.21.0",
|
|
@@ -86,6 +90,6 @@
|
|
|
86
90
|
"scripts": {
|
|
87
91
|
"build": "tsdown",
|
|
88
92
|
"build:verify": "pnpm run build && tsx scripts/probe-jsdoc-propagation.ts",
|
|
89
|
-
"test": "jest --projects tests/unit"
|
|
93
|
+
"test": "tsc --noEmit -p tsconfig.json && jest --projects tests/unit"
|
|
90
94
|
}
|
|
91
95
|
}
|