Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
9e29139
fix(extractor): let a later css() part replace an earlier one's decla…
owjs3901 Oct 1, 2026
337ddeb
test(extractor): cover known style composition branches
owjs3901 Oct 1, 2026
024a24c
chore: satisfy clippy assert_is_empty lint on Rust 1.99
owjs3901 Oct 1, 2026
71585a9
test(extractor): cover false ?? composition branch
owjs3901 Oct 1, 2026
52f4518
refactor(extractor): split coalesce check so composition lines are me…
owjs3901 Oct 1, 2026
1cedf9f
fix(extractor): compose styled extensions, merge attrs and let later …
owjs3901 Oct 1, 2026
01adab9
test(extractor): restore runtime-value composition test and cover sty…
owjs3901 Oct 1, 2026
53f740b
fix(extractor): render styled as targets and compile withComponent
owjs3901 Oct 1, 2026
b4b42cf
fix(extractor): keep read, $ and theme props off styled tags and eval…
owjs3901 Oct 1, 2026
e2cfa67
test(extractor): cover shouldForwardProp forms and element prop filte…
owjs3901 Oct 1, 2026
ce9f390
fix(extractor): forward refs from generated styled components
owjs3901 Oct 2, 2026
95d35c8
fix(extractor): compile Emotion's css prop at build time
owjs3901 Oct 2, 2026
e017367
test(extractor): cover css props on styled components with responsive…
owjs3901 Oct 2, 2026
0faa84e
fix(plugin-utils): compile the css prop where tsconfig builds JSX wit…
owjs3901 Oct 2, 2026
1a6a31e
fix(extractor): compile Emotion's ClassNames at build time
owjs3901 Oct 2, 2026
4f88bd4
test(extractor): cover ClassNames child functions taking rest or nest…
owjs3901 Oct 2, 2026
d44950f
fix(extractor): compile Emotion component selectors at build time
owjs3901 Oct 3, 2026
a558a34
fix(extractor): compile Devup UI re-exported by project modules and r…
owjs3901 Oct 3, 2026
10ec611
test(extractor): cover the namespace styled read a stylesheet still t…
owjs3901 Oct 3, 2026
07e1712
fix(extractor): follow aliases of Devup UI and read style constants d…
owjs3901 Oct 3, 2026
4830601
test(extractor): cover alias forms that are not package exports
owjs3901 Oct 3, 2026
e0a97d4
fix(extractor): scope build-time style callee detection
owjs3901 Oct 3, 2026
f091ff1
fix(extractor): resolve compiled APIs and lowered reads by lexical bi…
owjs3901 Oct 3, 2026
39ef954
fix(extractor): scope aliased library number rewrites by binding
owjs3901 Oct 3, 2026
5c23118
fix(extractor): follow barrel exports and aliases by symbol
owjs3901 Oct 3, 2026
b54606a
chore: add scoped compiled names patch changepack
owjs3901 Oct 3, 2026
29812f3
test(extractor): cover ClassNames whitespace and non-function children
owjs3901 Oct 3, 2026
c647ab5
fix(extractor): reject whole Devup namespace runtime escapes
owjs3901 Oct 4, 2026
81d9a56
fix(extractor): preserve exact lexical values and binding-aware require
owjs3901 Oct 4, 2026
d257aac
fix(extractor): preserve JavaScript props evaluation during lowering
owjs3901 Oct 4, 2026
d4e0187
fix(components): reorder compile-time style defaults after DOM spreads
owjs3901 Oct 4, 2026
58fe5a1
fix(landing): keep selector defaults after Card DOM props
owjs3901 Oct 4, 2026
5e167b6
fix(extractor): report original parse and module reference locations
owjs3901 Oct 4, 2026
955bf5e
test(extractor): cover direct literal selection and dynamic value paths
owjs3901 Oct 4, 2026
5574d55
fix(extractor): locate deterministic stylesheet evaluation failures
owjs3901 Oct 4, 2026
eceb1ce
fix(wasm): preserve located module resolver failure causes
owjs3901 Oct 4, 2026
1e81fdf
test(extractor): cover native written class spread precedence
owjs3901 Oct 4, 2026
4b24361
test(extractor): cover scalar order and runtime CSS suffix branches
owjs3901 Oct 4, 2026
6749633
test(extractor): cover initialization and exact constant safety branches
owjs3901 Oct 4, 2026
5657601
test(extractor): cover native logical and suspension capture edges
owjs3901 Oct 4, 2026
f0969a0
refactor(extractor): make JSX ordering and pruning paths measurable
owjs3901 Oct 4, 2026
dca611f
fix(extractor): prove module effects before exact stylesheet evaluation
owjs3901 Oct 4, 2026
06c66b9
fix(extractor): reject recoverable source and semantic parse errors
owjs3901 Oct 4, 2026
400cf89
fix(extractor): reject synthetic reflection during static evaluation
owjs3901 Oct 4, 2026
1949a6b
test(extractor): cover evaluation setup and naming seams
owjs3901 Oct 4, 2026
920d8ad
chore(wasm): record located diagnostics patch changepack
owjs3901 Oct 4, 2026
cc0aaf6
test(extractor): cover stylesheet precompute errors and import proof …
owjs3901 Oct 4, 2026
3dc297c
fix(extractor): match import packages at path boundaries
owjs3901 Oct 4, 2026
042d6a6
fix(extractor): preserve evaluated helper effects and opaque CSS reads
owjs3901 Oct 5, 2026
27666e7
chore(wasm): document helper CSS diagnostics in patch changepack
owjs3901 Oct 5, 2026
6d0c9c8
test(extractor): cover portable CSS paths and nested member provenance
owjs3901 Oct 5, 2026
9b36c0d
fix(extractor): validate vanilla-extract theme assignments
owjs3901 Oct 5, 2026
70e924d
fix(extractor): compose imported vanilla-extract styles exactly
owjs3901 Oct 5, 2026
6fb8171
fix(extractor): preserve vanilla-extract selector identities and exports
owjs3901 Oct 5, 2026
099830a
fix(extractor): evaluate static vanilla-extract modules across script…
owjs3901 Oct 5, 2026
cc824ab
fix(extractor): evaluate exact vanilla-extract slices in mixed modules
owjs3901 Oct 6, 2026
e1acaa9
fix(extractor): evaluate demand-selected vanilla-extract module views
owjs3901 Oct 6, 2026
f3fe8c8
fix(extractor): preserve inherited properties in demanded values
owjs3901 Oct 6, 2026
c9aeaae
fix(extractor): resolve imported vanilla-extract values and API prove…
owjs3901 Oct 7, 2026
8ec7cb4
fix(extractor): align vanilla-extract fonts and live token traversal
owjs3901 Oct 7, 2026
db0bd4a
fix(extractor): support demand-proven stylesheet API carriers
owjs3901 Oct 8, 2026
44cd3a4
fix(extractor): preserve authored stylesheet exports and fallback state
owjs3901 Oct 8, 2026
af1177d
merge: update PR #706 with main ESLint checks
owjs3901 Oct 8, 2026
944e723
merge: update PR #706 with 9a953607
owjs3901 Oct 8, 2026
5a70d2a
merge: update PR #706 with db631c6c
owjs3901 Oct 8, 2026
30247ba
merge: update PR #706 with main
owjs3901 Oct 8, 2026
c7ea90a
merge: update PR #707 with main
owjs3901 Oct 8, 2026
4669b17
merge: update PR #710 with PR #707
owjs3901 Oct 8, 2026
9e4d28a
merge: update PR #711 with PR #710
owjs3901 Oct 8, 2026
ae283a7
merge: update PR #722 with PR #711
owjs3901 Oct 8, 2026
12328b9
merge: update PR #727 with PR #722
owjs3901 Oct 8, 2026
9f94748
merge: update PR #728 with main
owjs3901 Oct 8, 2026
7a8d96b
merge: update PR #729 with PR #728
owjs3901 Oct 8, 2026
a355130
merge: update PR #730 with PR #729
owjs3901 Oct 8, 2026
70d6417
merge: update PR #737 with PR #730
owjs3901 Oct 8, 2026
0607f78
merge: update PR #742 with main
owjs3901 Oct 8, 2026
f66b4c5
fix(bun-plugin): keep local barrel consumers compiled after main update
owjs3901 Oct 8, 2026
a7f3c31
merge: update PR #742 with main
owjs3901 Oct 8, 2026
74afb76
merge: update PR #750 with PR #742
owjs3901 Oct 8, 2026
f2fc451
merge: update PR #756 with main
owjs3901 Oct 8, 2026
78ef660
merge: update PR #757 with PR #750
owjs3901 Oct 8, 2026
c7c3992
fix(extractor): publish dependency stylesheet effects by original owner
owjs3901 Oct 8, 2026
c464f90
merge: update vanilla-extract themes with exact PR #756 base
owjs3901 Oct 8, 2026
75999b8
merge: update vanilla-extract themes with exact PR #757 base
owjs3901 Oct 9, 2026
e4a6189
fix(extractor): preserve unknown inner CommonJS export diagnostics
owjs3901 Oct 9, 2026
7211ee3
test(extractor): cover exact consumer proof and scheduling
owjs3901 Oct 9, 2026
eee1f0c
fix(extractor): encode exact consumer proof invariants
owjs3901 Oct 9, 2026
11bbbe6
fix(extractor): narrow imported values for exact computed keys
owjs3901 Oct 9, 2026
c3212c7
test(extractor): cover exact loader demand and source contracts
owjs3901 Oct 10, 2026
14e9053
test(extractor): cover native member provenance and failure origins
owjs3901 Oct 10, 2026
6b5078d
test(extractor): cover exact callable selection shapes
owjs3901 Oct 10, 2026
edcad35
test(extractor): cover receiver and property demand contracts
owjs3901 Oct 10, 2026
9e49fcb
test(extractor): cover capture graph data and scalar roundtrips
owjs3901 Oct 10, 2026
cc8d8d2
fix(extractor): resolve known computed initializer keys
owjs3901 Oct 10, 2026
357dc76
fix(extractor): encode ordered property admission invariant
owjs3901 Oct 10, 2026
69296f0
test(extractor): cover authored export index ownership
owjs3901 Oct 10, 2026
f44d049
test(extractor): cover authored eager region boundaries
owjs3901 Oct 10, 2026
cff09aa
fix(extractor): read type assertions like as casts
owjs3901 Oct 10, 2026
c10c08c
fix(extractor): read angle-bracket assertions like as casts in seven …
owjs3901 Oct 11, 2026
3fbeb00
fix(extractor): keep optional access when a selected table reads a mi…
owjs3901 Oct 11, 2026
7160762
fix(extractor): convert Emotion numbers through type assertions
owjs3901 Oct 11, 2026
da9e816
refactor(extractor): remove defensive branches no caller can reach
owjs3901 Oct 11, 2026
b2adda3
test(extractor): cover mixed-module dispatch, replacement overlap and…
owjs3901 Oct 11, 2026
5012323
test(extractor): cover native execution alias, escape and diagnostic …
owjs3901 Oct 11, 2026
c896e78
test(extractor): cover native import and source slice edges
owjs3901 Oct 11, 2026
babada4
test(extractor): cover native rewrite and API selection edges
owjs3901 Oct 11, 2026
93a8ca4
test(extractor): cover native selection closure, demand and escape edges
owjs3901 Oct 11, 2026
c4452db
test(extractor): cover mixed detection, selector escapes and styleshe…
owjs3901 Oct 11, 2026
fc5fb66
test(extractor): cover authored stylesheet import, alias and safety e…
owjs3901 Oct 11, 2026
252420c
test(extractor): cover native capture emission errors and prototypes
owjs3901 Oct 11, 2026
432ad20
test(extractor): cover retained native state failures and terminal ma…
owjs3901 Oct 11, 2026
49e6386
test(extractor): cover native demand runtime compile and finalize edges
owjs3901 Oct 11, 2026
bdf164c
test(extractor): cover star export fallbacks and stylesheet execution…
owjs3901 Oct 11, 2026
0509495
test(extractor): cover the last four Linux coverage gaps
owjs3901 Oct 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_barrel_namespace_imports.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "A project module re-exporting Devup UI (export { Box, css } from '@devup-ui/react', export * from '@devup-ui/react', export { styled as s }, export * as Devup, a default export of an import, chains of barrels and the compat entry) now works: a file importing Box or css from it compiles exactly as if it imported from the package, following the barrel through the resolver (relative paths, tsconfig paths, package exports), and hasDevupUI sees such a file. Members read from a namespace or default import of the package (Devup['css'], const { css } = Devup, Devup.css as a value) compile where the build can follow them, `Devup.x` for a name the package compiles being read like the named import. New build errors, located at the use: what a barrel re-exports but the build cannot read (an unresolvable `export *` or module, a namespace of modules re-exporting the package) is an error where its name is used instead of a runtime crash, and a namespace member read by a key the build cannot know (Devup[key]), written, or destructured in a form it cannot follow (a rest, a computed key, a default value, a nested pattern, an exported declaration, or members mixed with ones that stay at runtime) is an error that names the members to read. A namespace passed on whole (Object.keys(Devup), spyOn(Devup, 'css'), export default Devup) is left as it is",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_compose_known_styles.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "css(a, b) composing classes whose styles the build knows (a const bound to css() in the file, or a css() result another module exports with a rule object every value of which is known) merges their styles: a later part's declaration replaces an earlier one's for the same property, selector, breakpoint and layer, also under conditions (css(base, cond && danger)) and for ||/?? parts, where the classes used to be joined and the stylesheet order picked the winner. vanilla-extract style([a, b]) passes each composed style as its own argument, so the later one wins, and a style composed again later (style([a, b, a])) is kept. Classes the build does not know (strings, props, CSS Modules) are kept as they are",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_compose_styled.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "styled(Base) extending a styled component the file binds to a const renders Base's tag directly with Base's styles composed under its own, so the extension's declarations replace Base's for the same property, selector, breakpoint and layer instead of losing to them by stylesheet order; Base's attrs apply before the extension's. attrs merge as styled-components merges them: className is joined with the caller's, style is merged and other props replace earlier ones. On an element, a className or style spread after the explicit prop now wins, as React merges props in the order they are written",
"date": "2026-10-01T00:00:00.000Z"
}
8 changes: 8 additions & 0 deletions .changepacks/changepack_log_emotion_class_names.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch",
"packages/react/package.json": "Patch"
},
"note": "Emotion's <ClassNames> now compiles at build time with no runtime: the element becomes what its child function ({ css, cx, theme }) => ... renders, each css and cx call becomes the classes it composes (later styles replace earlier ones; css reads strings as CSS text and its tagged templates split around mixins; cx keeps unknown classes, reads { name: condition } objects as conditional classes and composes nested css and cx calls), and theme.a.b in their values becomes var(--a-b). Numbers in css rules are px lengths, as Emotion reads them, and top-level constants are inlined. New build errors, each at file:line:col: a <ClassNames> without exactly one child function taking { css, cx, theme } that gives what it renders at once (attributes, other children, rest or default parameters, async or generator functions, several statements); reading the theme other than as theme.a.b in a css value; using css or cx other than by calling them; a cx object with a spread, getter or method; parts css and cx cannot compose (runtime calls, spreads, a condition choosing between styles and classes). @devup-ui/react/compat exports ClassNames with the ClassNamesContent and ClassNamesArg types, and the @emotion/react declarations include them",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_emotion_component_selectors.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "Emotion and styled-components component selectors now compile at build time: a styled component the file defines that another style selects (${Child} { ... } in CSS text, [Child] or [`&:hover ${Child}`] as a rule key) gets a short marker class, which only such components get, and the selector reads it as .marker; a component extending it, or an element inlining it for its css prop, keeps the marker. Selectors written without & now nest under the component as stylis nests them (ul { ... } is & ul, a selector list nests each selector, :hover applies to the component itself) instead of becoming global rules, and rule-object keys starting with ., #, [, *, >, + or ~ are read as nested selectors instead of properties",
"date": "2026-10-01T00:00:00.000Z"
}
8 changes: 8 additions & 0 deletions .changepacks/changepack_log_emotion_css_prop.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch",
"packages/react/package.json": "Patch"
},
"note": "Emotion's css prop compiles at build time while @emotion/react is aliased: on tags and Devup UI components always, and on every element once the file imports @emotion/react or @emotion/styled or names @emotion/react in a @jsxImportSource pragma; jsx, jsxs and jsxDEV from @emotion/react/jsx-runtime (or jsx-dev-runtime) and jsx from @emotion/react compile it too, so libraries built with Emotion's JSX runtime do as well. The prop becomes the element's className, with CSS variables in its style for values only the runtime gives: arrays and conditions compose with a later part replacing what an earlier one sets, css() classes the file knows compose by their styles, strings and templates are CSS text, css`` mixins split the text around them, a function of the theme reads theme.a.b as var(--a-b), unitless numbers are px as in Emotion (constants included), and a className holding known css() classes overrides the prop as Emotion's registered classes do. A styled component the file defines renders its tag in the element's place when the prop overrides its styles and it renders a tag with no attrs or props read and the element has no spread, as or forwardedAs. Emotion's JSX runtime imports become react/jsx-runtime, the pragma names react, and jsx comes from @devup-ui/react/compat (React's createElement); @devup-ui/react/compat/css-prop types the prop on React.Attributes. New build errors, each with file:line:column and the code: a css prop part the build cannot read (a call, an element), a style object declared inside a function or with let, a binding only running the module gives or code changes, a theme function that does more than return rules or reads the theme other than as theme.a.b in a value, an interpolation CSS text cannot place or a mixin inside a nested rule, and a css prop overriding a styled component's styles where its tag cannot be rendered in place. Composing css() with a part that reads a known binding (such as a keyframes name) now reads its value",
"date": "2026-10-01T00:00:00.000Z"
}
14 changes: 14 additions & 0 deletions .changepacks/changepack_log_emotion_jsx_import_source.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch",
"packages/plugin-utils/package.json": "Patch",
"packages/react/package.json": "Patch",
"packages/vite-plugin/package.json": "Patch",
"packages/next-plugin/package.json": "Patch",
"packages/webpack-plugin/package.json": "Patch",
"packages/rsbuild-plugin/package.json": "Patch",
"packages/bun-plugin/package.json": "Patch"
},
"note": "A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source",
"date": "2026-10-01T00:00:00.000Z"
}
8 changes: 8 additions & 0 deletions .changepacks/changepack_log_follow_aliases.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch",
"packages/bun-plugin/package.json": "Patch"
},
"note": "hasDevupUI takes the import aliases and is true for a file extraction changes: one importing a redirected package (@emotion/styled, ...), naming @emotion/react in a @jsxImportSource pragma, or in a project whose tsconfig jsxImportSource is @emotion/react, so the Bun plugin no longer skips files whose only Devup UI is Emotion's css prop or an aliased import. Aliases of Devup UI now compile like the original: `export const B = Box`, `const c = css; export { c as cc }`, `export const D = Devup` and `export const C = Devup.css` in a barrel (the barrel module exports them as re-exports of the package, and what imports them follows them), `export { Box }` after an import, `export default Box`, `const D = Devup` namespace aliases, and `const inner = css` declared inside a function. A css() or keyframes() const that a function reads before its declaration compiles. New build error: a css()/keyframes() const read before its declaration runs (outside a function) is located and says to move the declaration above its first read",
"date": "2026-10-01T00:00:00.000Z"
}
9 changes: 9 additions & 0 deletions .changepacks/changepack_log_js_semantics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch",
"packages/components/package.json": "Patch",
"packages/reset-css/package.json": "Patch"
},
"note": "Preserve JavaScript semantics for exact imported enum and Math values including negative zero, lexical constants, binding-aware CommonJS require, React createElement calls, type-only imports, and source-ordered props evaluation with native spread snapshots and CSS-variable fallbacks without a styling runtime. Migrate UI-kit style defaults by pure reordering and test reset CSS through compiled output. Report located build errors for runtime styleOrder values, unknowable whole-object style overrides, opaque selector literals, genuinely unmovable lazy logical suspension, Devup UI namespaces passed whole to runtime code, and immediate style reads in the temporal dead zone of lexical bindings; deferred initialized reads keep folding and pre-assignment var reads remain dynamic.",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_located_diagnostics.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "Report extraction, module-resolution and stylesheet execution failures at their original source locations with the cause and repair. Reject recoverable syntax errors, nondeterministic build-time reads, synthetic descriptor/function-source and legacy accessor reflection, and unsafe stylesheet execution fallbacks instead of silently changing CSS. Preserve module resolver and serialization exceptions, evaluate transitive helper side effects, and prevent placeholder-name collisions from losing styles. Match import package names only at exact or slash-delimited boundaries so sibling data packages remain external. Retain helper CSS loads in evaluation order with deduplicated portable relative specifiers and query suffixes, without CSS content dependencies. Report missing CSS or incompatible path roots as located errors, and reject host-recorded unknown CSS export observations even when caught; unused bindings, object passing and typeof follow default TypeScript/JavaScript import semantics.",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_scoped_compiled_names.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "Resolve compiled styling APIs and components by their lexical binding so shadowed local names, including minified library identifiers, remain ordinary JavaScript and JSX. No new build errors; existing diagnostics now apply only to the compiled binding they describe.",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_styled_forward_ref.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "Styled components the build generates are wrapped in React's forwardRef, so a ref passed to them reaches the element they render on React 18 as well as React 19; the file imports forwardRef from react when it defines one",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_styled_props.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "Styled components no longer pass every prop to the tag they render: `$` props, `theme` and the props their style functions or attrs read are kept away from a tag unless it takes them as attributes, and `shouldForwardProp` (Emotion options or styled-components withConfig) is evaluated at build time. A `shouldForwardProp` the build cannot evaluate is a build error naming the file, line and code, with the forms it accepts. An element using a styled component the file defines drops props the component neither reads nor passes on; spread props are passed as written",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_styled_targets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "Styled components render what their `as` prop names, defaulting to the tag or component they were defined with, and pass `forwardedAs` on as `as`, as styled-components and Emotion do; `as` used to reach the rendered tag as an attribute. `Component.withComponent(target)` on a styled component the file binds to a const builds a component rendering the same styles and attrs as `target` (a tag name or a component JSX can name), where it used to call a method the generated function does not have and throw",
"date": "2026-10-01T00:00:00.000Z"
}
9 changes: 9 additions & 0 deletions .changepacks/changepack_log_vanilla_extract_themes.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch",
"packages/plugin-utils/package.json": "Patch",
"packages/react/package.json": "Patch"
},
"note": "Compile vanilla-extract static styling-data modules independently of their script suffix, sharing theme contracts, native API values, deterministic variable references and later-wins static composition. Modules that also hold unrelated runtime or JSX code evaluate only the code a styling value needs, and values imported through other modules, barrels and namespaces are read exactly, including through type assertions written as `as` or `<T>`. Preserve registered selector identities independently of declaration atoms, and capture default, aliased and forwarded module exports without replaying initializers. Align theme.css source resolution between evaluation and the import graph, map consumer contract leaves and theme overloads to their real values, return the quoted generated family from fontFace, enumerate styleVariants keys like vanilla-extract, and stop self-cyclic theme contracts instead of hanging; fontFace and globalFontFace no longer trap the WASM. Report located build errors (file, line, column, cause and fix) for unknown, forward, erased or nondeterministic static inputs, native values or helpers that escape their exact initialization slice, mutated or aliased inputs, unrepresentable captures, non-object theme tokens, mismatched theme contracts, invalid non-final fallback variables, invalid global theme variable names and an authored fontFamily inside fontFace instead of emitting incomplete or malformed CSS.",
"date": "2026-10-01T00:00:00.000Z"
}
14 changes: 7 additions & 7 deletions apps/landing/src/app/(detail)/components/Card.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,6 @@ export default function Card({
}: React.ComponentProps<'div'>) {
return (
<VStack
_active={{
boxShadow: 'none',
transform: 'scale(0.95)',
}}
_hover={{
boxShadow: '0 0 20px 0 rgba(0, 0, 0, 0.15)',
}}
bg="$containerBackground"
border="1px solid $border"
borderRadius="10px"
Expand All @@ -22,6 +15,13 @@ export default function Card({
styleOrder={1}
transition="all 0.2s ease"
{...props}
_active={{
boxShadow: 'none',
transform: 'scale(0.95)',
}}
_hover={{
boxShadow: '0 0 20px 0 rgba(0, 0, 0, 0.15)',
}}
>
{children}
</VStack>
Expand Down
8 changes: 4 additions & 4 deletions apps/landing/src/components/Header/HeaderInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@ export function HeaderInput(props: React.ComponentProps<'input'>) {
>
<Image boxSize="24px" src="/search.svg" />
<Input
_placeholder={{
color: '$caption',
}}
bg="transparent"
border="none"
color="$text"
outline="none"
placeholder="Search documentation..."
typography="caption"
w="100%"
{...props}
_placeholder={{
color: '$caption',
}}
typography="caption"
/>
</Flex>
)
Expand Down
52 changes: 52 additions & 0 deletions bindings/devup-ui-wasm/src/graph_publication.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
use css::file_map::{canonical, is_global};
use extractor::{ExtractGraphOutput, ExtractOutput};

use super::{Output, with_style_sheet_mut};

pub(super) fn publish(graph: ExtractGraphOutput, filename: &str, mode: (bool, bool)) -> Output {
let (single, import_main) = mode;
let canonical_entry = canonical(filename);
let global_entry = single || is_global(filename);
with_style_sheet_mut(|sheet| {
let mut collected = false;
let mut base = false;
let mut removed = false;
for (raw, output) in graph
.artifacts
.iter()
.map(|artifact| (artifact.filename.as_str(), &artifact.output))
.chain(std::iter::once((filename, &graph.entry)))
{
let global = single || is_global(raw);
removed |= sheet.rm_global_css(raw, global);
let changed = sheet.update_styles(&output.styles, &canonical(raw), global);
collected |= changed.0;
base |= changed.1;
}
let css = (collected || base || removed).then(|| {
sheet.create_css(
if global_entry {
None
} else {
Some(&canonical_entry)
},
import_main,
)
});
let ExtractOutput {
code,
map,
css_file,
dependencies,
styles: _,
} = graph.entry;
Output {
code,
map,
css_file,
dependencies,
css,
updated_base_style: base || removed,
}
})
}
11 changes: 11 additions & 0 deletions bindings/devup-ui-wasm/src/graph_publication_tests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use super::*;
use rstest::rstest;
use serial_test::serial;

mod effects;
mod failures;
mod fallback;
mod freshness;
mod owners;
mod support;
mod terminals;
Loading
Loading