chore(release): version packages#50
Merged
Merged
Conversation
c86080c to
c166365
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to develop, this PR will be updated.
Releases
@lcui/fluent-icons@2.0.0
Major Changes
b39bde0: BREAKING: package renamed from
@lcui/react-iconsto@lcui/fluent-icons.The functionality is unchanged, but the package name on npm has moved. Update
your dependency and import statements:
The previous package (
@lcui/react-icons) will receive no further updates.Patch Changes
lcui-dev/lcui-toolkit, managed withnpm workspaces and Changesets. The original repositories have been archived.
No runtime behaviour changes; published artifacts are equivalent to the prior
standalone releases.
@lcui/cli@1.3.0
Minor Changes
2488da6: feat(cli): incremental compilation with persistent build manifest
lcui buildis now incremental. A build manifest at.lcui/build/manifest.jsonrecords each source file's content hash, loaderchain, dependency hashes (collected from
import, sass@use/@import,postcss / tailwind config, etc.) and output hashes. Unchanged entries are
skipped entirely on subsequent builds and their previous outputs are reused.
Every write also goes through a content-aware
writeIfChanged: if the newbytes match the file on disk, the file is not touched. This prevents
spurious
mtimeupdates from triggering a fullxmakerebuild when nothingactually changed.
New CLI flags:
--force— ignore the manifest and rebuild everything.--skip-xmake— do not invokexmakeafter compilation.The manifest is invalidated automatically when the CLI version, the
compiler configuration, or
tsconfig.json/postcss.config.*/tailwind.config.*/lcui.config.jschange.xmakeis also auto-skippedwhen no output file changed during the build.
220e7e1: feat(cli): compile all component functions in TSX files
Previously only
export defaultcomponents were compiled. Nowts-loadercompiles all three categories:
export default, named exports (export function),and internal functions (non-exported).
Internal components receive a file-name prefix to avoid global namespace
collisions. For example,
MyButtoninhelpers.tsxbecomeshelpers_my_button.Each component independently generates its own
ui_register_{name},ui_create_{name},and related functions, and all registrations are individually called in
main.h.c7a732a: feat(cli): prefix-aware naming for internal components
Improve internal component naming to avoid redundancy and preserve
user-defined customization:
prefix in snake_case (e.g.,
FieldTableProviderinfield-table.tsxbecomes
field_table_provider, notfield_table_field_table_provider)displayNameassignments in AST and preserve them verbatim,without auto-prefix injection or
snakeCasenormalization__) separator when injecting file prefix forinternal components (e.g.,
Headerinpage.tsxbecomespage__header),making injected names visually distinct from natural component names
@lcui/reactto usedisplayNameas-is (not viasnakeCase) whengenerating widget tags, ensuring the
__separator survives through to thefinal C identifier
Patch Changes
62e81f8: fix(react): prefix React dev-mode warnings with source file path
React's dev-mode
console.erroroutputs (e.g., missing "key" prop in.map()) were printed without any source file context duringlcui build,making it impossible to identify which
.tsxtriggered them.Fix by adding an optional
filePathfield tocompile()options. Whenprovided,
@lcui/reacttemporarily patchesconsole.errorduringcomponentFuncexecution andtransformReactNode, prependingin <filePath>:to each warning. The patch is reverted in afinallyblock so the original
console.erroris always restored, even on exception.@lcui/cli's ts-loader now passesloader.resourcePathasfilePathwhen calling
compile(), so every warning during build includes theabsolute path of the source file.
fad5a6f: fix(cli): use default export name for resource loader when shouldPreRender filters inner components
When a TSX file has multiple components and inner ones use
shouldPreRender(so ui-loader filters them out), ui-loader previously derived the resource
loader function name from the surviving schema (
currentSchema.name) insteadof the default export. This caused a linker error because ts-loader declared
ui_load_field_table_resourcesbut ui-loader emittedui_load_field_table_provider_resources.Fix by passing
defaultComponentSnakeNamefrom ts-loader to ui-loader via adefault-componentnode in the tree, so both loaders agree on the resourcefunction name regardless of schema filtering.
8317ce8: fix(cli): track skeleton .c/.h files in manifest to prevent cache from skipping regeneration
Skeleton
.cand.hfiles were lost from the build manifest after thefirst incremental rebuild. When
ts-loaderran on a subsequent build and askeleton already existed on disk,
emitFilewas skipped (by theexistsSyncguard), so
recordEntryOutputwas never called.finalizeEntrythenoverwrote the manifest entry with an
outputslist that omitted theskeletons. Deleting those files afterwards would never invalidate the cache,
and they were never regenerated.
Added a new
CompilerContext.addOutput(filePath)method that lets loadersdeclare an existing file as an entry output without triggering a write.
ts-loadernow calls it in theelsebranch of theexistsSyncguard,ensuring skeletons are always tracked in the manifest regardless of whether
they were created or reused in this build.
576cb31: fix(cli): skip independent compilation for shouldPreRender components
46ca9f5: fix(cli): gracefully skip ui-loader for data-only TypeScript files
When a
.tsfile underapp/orsrc/exports no component functions (i.e. only plain variables, interfaces, or constants), ts-loader now returnsundefinedto the loader chain, and ui-loader handles this by passing through without generating C code. Previously ui-loader would throw "invalid content", breaking the entire build.This aligns with webpack's loader semantics where loaders may return
null/undefinedto signal a no-op pass.b39bde0: Repository restructure: the three packages now live in a single monorepo at
lcui-dev/lcui-toolkit, managed withnpm workspaces and Changesets. The original repositories have been archived.
No runtime behaviour changes; published artifacts are equivalent to the prior
standalone releases.
Updated dependencies [082269c]
Updated dependencies [62e81f8]
Updated dependencies [b39bde0]
Updated dependencies [9638d0a]
Updated dependencies [b39bde0]
Updated dependencies [d97979c]
Bug Fixes
@lcui/react@0.6.0
Minor Changes
9638d0a: feat(react): support Fragment flattening in children
Fragment elements (<>...</>) in children are now auto-flattened at compile
time, so each fragment's children become siblings of the parent node. This
enables list rendering patterns like .map() returning multiple sibling
elements without a wrapper widget.
b39bde0: Internal: split
src/intoruntime/,compiler/, andwidgets/subdirectories.Add subpath exports so callers can import a narrower surface area:
No breaking changes — every symbol previously exported from
@lcui/reactisstill available from the package root.
d97979c: feat(react): allow string C-function names on JSX event props
@lcui/cli'sts-loaderhas always supported<button onClick="handle_click" />as a way to bind a JSX event to a C function — at runtime the string is
emitted as a
ui_widget_on(...)call plus a forward declaration in thegenerated header. Until now this form failed TypeScript's type check because
React declares e.g.
onClickasMouseEventHandler<T> | undefined.This release ships a focused JSX type augmentation that widens the subset of
on*event props that LCUI actually dispatches to also acceptstring. Theaugmentation is loaded automatically when you
importfrom@lcui/react,so no user-side configuration is required. Covered props (chosen from
ui_event_type_t):onClick,onDoubleClick,onMouseDown,onMouseUp,onMouseMove,onMouseOver,onMouseOut,onWheelonKeyDown,onKeyUp,onKeyPressonFocus,onBluronPasteonChange(semantic"change"event dispatched bywidgets such as
TextInput)Event-name compatibility is handled by a small remap table in the React
compiler so the names users write match the names LCUI actually dispatches:
onDoubleClick→"dblclick"(instead of the default"doubleclick")onXxx → "xxx"ruleTextInputPropsnow also declaresonChangeexplicitly for better IDEhints on
<TextInput>.Props for browser-only events (drag / pointer / animation / transition /
contextmenu / touch with mismatched names) and the
SVGAttributesnamespace are intentionally not widened: passing a string on those will
keep failing type-checking, so users do not end up with code that compiles
but cannot bind at runtime.
JavaScript callbacks (
onClick={() => { ... }}) continue to work unchangedand remain type-checked as before. Invalid values like
onClick={42}arestill rejected.
Patch Changes
082269c: fix(react): bind every widget when multiple widgets share the same string event handler
Previously the compiler deduplicated event handler declarations by name,
which caused
ui_widget_onto be emitted only for the first widget whenseveral buttons shared the same
onClick="my_handler". Split the handlerdeclaration (still deduplicated) from the per-widget binding (no longer
deduplicated) so each widget correctly receives its own
ui_widget_oncall.62e81f8: fix(react): prefix React dev-mode warnings with source file path
React's dev-mode
console.erroroutputs (e.g., missing "key" prop in.map()) were printed without any source file context duringlcui build,making it impossible to identify which
.tsxtriggered them.Fix by adding an optional
filePathfield tocompile()options. Whenprovided,
@lcui/reacttemporarily patchesconsole.errorduringcomponentFuncexecution andtransformReactNode, prependingin <filePath>:to each warning. The patch is reverted in afinallyblock so the original
console.erroris always restored, even on exception.@lcui/cli's ts-loader now passesloader.resourcePathasfilePathwhen calling
compile(), so every warning during build includes theabsolute path of the source file.
b39bde0: Repository restructure: the three packages now live in a single monorepo at
lcui-dev/lcui-toolkit, managed withnpm workspaces and Changesets. The original repositories have been archived.
No runtime behaviour changes; published artifacts are equivalent to the prior
standalone releases.
Features
0.4.0 (2024-12-22)
Bug Fixes
Features