Skip to content

Conversation

@andycall
Copy link
Member

@andycall andycall commented Nov 20, 2025

Summary

  • Introduces a new WebF Cupertino UI Flutter package that wraps core Cupertino widgets as WebF custom elements, with typed attributes/events and docs.
  • Adds a full Cupertino gallery to the example app, including tabs, dialogs/sheets, lists/forms, text inputs/search, date picker, sliders/switches, checkboxes and radios.
  • Enhances the WebF CLI codegen pipeline (Dart-only mode, const/enum handling, nullable props, CustomEvent generics, doc aggregation) to support Cupertino-driven React/Vue wrappers.
  • Extends the hybrid router utilities with a WebFRouter helper for push/replace/pop/popUntil and web-style pushState/replaceState navigation, used by the new Cupertino pages.
  • Cleans up the legacy React Cupertino UI package in favor of generator-based wrappers aligned with the new typings and migration rules.

Breaking Changes / Migration

  • The old packages/react-cupertino-ui package is removed; React apps should migrate to generated wrappers based on the Cupertino typings and the new migration guidelines.
  • The React router Route theme behavior is adjusted so it no longer defaults to a material theme; apps relying on the implicit default should pass an explicit theme.

Testing

  • node scripts/generate_binding_code.js
  • npm run build:bridge:macos (or your platform/CI equivalent)
  • npm test
  • cd webf && flutter test
  • Run the example app and verify the new Cupertino gallery pages (navigation, dialogs/sheets, inputs, sliders/switches, checkboxes/radios, date picker) behave as expected.

Summary by CodeRabbit

  • New Features

    • TypeScript enums and ambient constants are now preserved and emitted in generated bindings.
    • New CLI mode to produce Dart-only bindings (skip web frameworks).
    • Router exposes a stack view of the hybrid navigation history.
  • Documentation

    • Expanded README with repository structure.
    • Typing guide and CLI docs updated with constant declarations and Dart-only usage.
  • Chores

    • Package version bumps to 0.23.7.
    • React Cupertino UI package/components removed (deprecated).

✏️ Tip: You can customize this high-level summary in your review settings.

andycall and others added 30 commits November 12, 2025 09:13
- Vue: emit declare const/enum in generated index.d.ts
- React: aggregate consts/enums/type aliases into src/types.ts and export from src/index.ts
- React: include consts/enums in component dependencies when present in same .d.ts
- Analyzer: handle declare enum with quoted names; preserve hex initializers
- Dart: skip writing _bindings_generated.dart when generated content is empty

Also adjusts React enum output to 'export enum' so enums are usable as values.
- analyzer: preserve TypeQuery as 'typeof Name' via TS AST
- dart: map typeof -> dynamic; map known TS enums to String (arrays -> String[])
- react/vue: preserve typeof; namespace external values as __webfTypes and always import types namespace
- templates(vue): inject types import slot
- generator: add WEBF_DEBUG logs + file previews for troubleshooting

Fixes: typeof producing any; ensures React/Vue typings compile; aligns Dart types for CupertinoIcon strings.
- Remove Routes & Transitions section from Cupertino showcase
- Add comprehensive examples for CupertinoAlertDialog
- Add basic alert, confirmation, destructive actions examples
- Add custom button styles and imperative API examples
- Add complete props reference and best practices
- Remove unused route entries from App.tsx

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive examples for CupertinoActionSheet
- Add basic action sheet with title, message, and actions
- Add destructive actions, default actions, and custom events
- Add examples without cancel button and simple usage
- Add complete API reference for options, actions, and events
- Add best practices and common patterns section

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive examples for CupertinoListSection
- Add basic list section and sections with headers/footers
- Add inset grouped style for iOS Settings appearance
- Add multiple stacked sections example
- Add complete API reference for section components
- Add best practices and usage notes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive examples for CupertinoSwitch
- Add basic switch and settings list examples
- Add disabled state and custom color examples
- Add controlled vs uncontrolled usage patterns
- Add complete API reference for switch component
- Add best practices and common patterns
- Add usage notes for colors, events, and behavior

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add interactive examples: basic, stepped, custom range sliders
- Add practical use cases: volume, brightness, temperature controls
- Add RGB color picker example with multiple sliders
- Add event handling demo with live logging
- Add disabled state examples
- Add comprehensive documentation: API reference, best practices, usage notes
- Add common patterns section with code examples
- Fix slider width styling to stretch to full available width

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…howcase

- Add basic control example with state display
- Add two-segment toggle for compact/detailed view switching
- Add four-segment filter with live data filtering
- Add custom colors & text styles with 4 themes:
  - Blue theme: light background with standard text
  - Purple theme: light background with bold text
  - Green theme: dark background with white text
  - Dark theme: iOS-style dark with light text
- Demonstrate fontSize, fontWeight, padding, and color customization
- Add practical examples: time range selector, sorting control
- Add event handling with live logging
- Add comprehensive documentation: API reference, best practices, usage notes
- Add common patterns: view switcher, filters, labels, theming, persistence
- Demonstrate backgroundColor, thumbColor, and CSS text styling
- Use flexbox layouts to avoid CSS grid (WebF limitation)
- Ensure proper text contrast with light text on dark backgrounds

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add detailed showcase page with 11 sections covering:
- Basic checkbox with checked/unchecked states
- Disabled states (checked and unchecked)
- Tristate checkbox with mixed state support
- Custom color themes (red, green, purple, orange)
- Practical examples (agreement forms, settings, task lists)
- Event handling with interactive demo
- Complete API reference
- Best practices and usage notes
- Common implementation patterns
- Accessibility guidelines

Includes polished button styling with transitions and proper alignment
for checkbox elements in agreement form example.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
andycall and others added 19 commits November 16, 2025 17:24
Add detailed showcase page with 13 sections covering:
- Basic radio group with shared groupValue
- Disabled states (selected and unselected)
- Toggleable radio with optional deselection
- Checkmark style as alternative UI
- Custom color themes (red, green, purple, orange)
- Practical examples (size selection, payment methods, theme preference)
- Event handling with interactive demo
- Complete API reference
- Best practices and usage notes
- Common implementation patterns
- Accessibility guidelines
- Radio vs Checkbox comparison

Includes type-safe TypeScript implementations and real-world use case
examples for mutually exclusive selections.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add detailed showcase page with 12 comprehensive sections:
- Basic list tiles with chevron and additional info
- List tiles with leading icons/avatars
- List tiles with subtitles for secondary text
- Custom trailing widgets (switches, badges)
- Notched visual style for contact lists
- Interactive list tiles with onClick handlers
- Complex iOS Settings page example
- API reference and slot component documentation
- Best practices and usage guidelines
- Common patterns with code examples
- Accessibility considerations

Also includes refactoring of webf_cupertino_ui package structure:
- Remove legacy component files from lib/src/legacy/
- Reorganize core files (cupertino_colors, cupertino_icons)
- Add new list_tile implementation with proper bindings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Nov 20, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
use-case Ready Ready Preview Comment Nov 21, 2025 7:23am

@coderabbitai
Copy link

coderabbitai bot commented Nov 20, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

Adds CLI enum/const support and a new --dart-only codegen flag; expands generators (React/Vue/Dart) for enums/consts and nullable unions; removes most components and tooling from the react-cupertino-ui package; updates use_cases with a new Cupertino showcase and widespread layout consolidations and routing updates.

Changes

Cohort / File(s) Summary
CLI: Declarations & Analyzer
cli/src/declaration.ts, cli/src/analyzer.ts, cli/src/IDLBlob.ts
Add ConstObject, EnumMemberObject, EnumObject; extend analyzer to parse enums and ambient consts; include EnumObject in IDLBlob.objects and analyzer output; update variable processing to emit consts.
CLI: Generators & Templates
cli/src/generator.ts, cli/src/react.ts, cli/src/vue.ts, cli/src/dart.ts, cli/templates/*.tpl
Emit ambient const and enum declarations in TS typings; enhance type resolution (unions, typeof/pointer, nullability); adjust Dart generation for nullable unions; add template placeholders and devDependency in templates.
CLI: Commands & Bin
cli/src/commands.ts, cli/bin/webf.js, cli/package.json
Add --dart-only flag and GenerateOptions.dartOnly; branch generation flow for Dart-only mode (skip React/Vue/npm flows); add markdown aggregation; bump CLI package version.
CLI: Docs & Tests
cli/README.md, cli/CLAUDE.md, cli/TYPING_GUIDE.md, cli/test/*
Document --dart-only and declaring constants; remove index.d.ts publishing docs; update and add tests for dart nullable props, enum/const emission, and commands (mock globSync).
React Cupertino UI: Package removal
packages/react-cupertino-ui/*
Removed package config and build files (package.json, tsconfig.json, tsup.config.ts), cleared index exports and deleted createComponent utility; removed many source components and their public interfaces (all src/lib/src/*.tsx), adjusted .gitignore and global types.
React Router: API & Version
packages/react-router/src/routes/utils.ts, packages/react-router/src/routes/Route.tsx, packages/react-router/package.json, packages/react-router/API.md
Add stack getter / HybridRouteStackEntry type exposing hybrid router stack; remove default theme value in Route props destructure; bump package version and dependency.
Use Cases: New pages & routing
use_cases/src/App.tsx, use_cases/src/pages/CupertinoShowcasePage.tsx, use_cases/src/pages/*
Add Cupertino showcase page and many Cupertino routes; update feature catalog and HomePage; change animation route from /animation/css/animation; expand routes and pages.
Use Cases: Layout consolidation & small API tweaks
use_cases/src/pages/**/*.tsx, use_cases/src/components/WebFSlot.tsx, use_cases/src/components/RoutingDemo.tsx
Remove inner wrapper divs across ~40 pages and merge layout classes into WebFListView; add optional id prop to WebFSlot; update routing demo targets and small DOM/class changes.
Use Cases: Styling
use_cases/src/main.css
Add .custom-cupertino-input-demo CSS rule.
Miscellaneous
README.md, packages and tests changes
Insert "Repository Structure" section into README (duplicated); various package version bumps and small test adjustments.

Sequence Diagram(s)

sequenceDiagram
    participant Dev as CLI user
    participant CLI as webf CLI
    participant Analyzer as cli analyzer
    participant Generator as code generators
    participant FS as Filesystem / Dist
    rect `#DFF2E1`
    Dev->>CLI: webf codegen --dart-only ...
    CLI->>Analyzer: parse .d.ts / TS program
    Analyzer-->>CLI: IDLBlob (includes EnumObject/ConstObject)
    CLI->>Generator: generate Dart bindings (dartGen) with blobs
    Generator-->>FS: write Dart files
    note right of FS: skip React/Vue & npm flows in dart-only mode
    FS-->>Dev: success message
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

  • Areas needing extra attention:
    • Full removal of react-cupertino-ui package and many public components — check for orphaned imports/consumers and verify dependency/version alignment.
    • CLI analyzer → generator pipeline for enums/consts: ensure consistent representation across IDLBlob, generator templates (React/Vue/Dart), and tests.
    • Nullable union handling in Dart generation (edge cases with complex unions and enums).
    • React/Vue typing aggregation and emitted ambient declarations — ensure deduplication and import prefixing logic is correct.
    • Widespread layout consolidations in use_cases — sample pages to confirm Tailwind class effects and no regressions in visual layout or behavior.
    • Route rename: confirm no remaining references to /animation.

Possibly related PRs

Poem

🐰 From enums and consts the typings sing,

Dart-only hops in, a leaner spring,
Cupertino pages gathered, wrappers gone,
CLI and generators keep the garden on —
A rabbit's nod to changes, quick and strong. 🎩

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.63% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(cupertino): add WebF Cupertino UI package and gallery' accurately describes the main change: introducing a Cupertino UI package with accompanying gallery/showcase. It clearly highlights the primary feature addition.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 478ebcb and 05eeb93.

📒 Files selected for processing (7)
  • cli/src/commands.ts (26 hunks)
  • cli/src/generator.ts (6 hunks)
  • cli/src/vue.ts (4 hunks)
  • cli/test/commands.test.ts (6 hunks)
  • cli/test/generator.test.ts (13 hunks)
  • use_cases/src/pages/RoutingPage.tsx (1 hunks)
  • use_cases/src/pages/cupertino/CupertinoActionSheetPage.tsx (1 hunks)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (6)
packages/react-router/src/routes/Route.tsx (1)

44-50: Update theme JSDoc to match new non-default behavior

The implementation no longer defaults theme to "material". The function destructures theme without a default value (line 39: {path, prerender = false, element, title, theme}), so when omitted it becomes undefined and is passed to WebFRouterLink. The JSDoc still documents @default "material", creating a documentation-implementation mismatch.

Update the JSDoc to reflect the actual behavior:

-  /**
-   * Theme for this route
-   * Controls the visual style of the navigation bar and page
-   *
-   * @default "material"
-   */
+  /**
+   * Theme for this route
+   * Controls the visual style of the navigation bar and page.
+   *
+   * If omitted, the route uses the router/global default theme.
+   */
   theme?: 'material' | 'cupertino'
cli/test/commands.test.ts (1)

66-91: Keep npm install flags in tests and implementation in sync

The test should run npm install when creating new project still expects ['install', '--omit=peer'], but createCommand now runs plain npm install. Either the behavior or the assertion should be updated so they agree on whether --omit=peer is desired for newly scaffolded React packages.

cli/src/generator.ts (1)

105-120: Fix glob.globSync API calls in two locations

The glob package exports globSync as a separate named export, not a method on the glob object. Both cli/src/generator.ts:110 and cli/src/commands.ts:244 incorrectly call glob.globSync(), which will cause runtime errors.

Update both files:

// Change from:
import { glob } from 'glob';
// To:
import { globSync } from 'glob';

// Then replace:
glob.globSync('**/*.d.ts', { ... })
// With:
globSync('**/*.d.ts', { ... })

Locations to fix:

  • cli/src/generator.ts:110 in getTypeFiles()
  • cli/src/commands.ts:244 in the markdown copy helper
cli/src/analyzer.ts (1)

413-536: Fix string literal quoting in non-union CustomEvent case

Line 492-493 drops quotes from string literals (argument.literal.text), producing invalid TypeScript syntax like CustomEvent<foo> instead of CustomEvent<'foo'>. This contradicts the union branch at line 428, which correctly uses JSON.stringify(lit.text).

TypeScript string literal types require quotes, e.g., 'foo' not foo. Update the non-union string literal case to use JSON.stringify() for consistency and correctness:

- } else if (ts.isLiteralTypeNode(argument) && ts.isStringLiteral(argument.literal)) {
-   genericType = argument.literal.text;
+ } else if (ts.isLiteralTypeNode(argument) && ts.isStringLiteral(argument.literal)) {
+   genericType = JSON.stringify(argument.literal.text);
cli/src/dart.ts (1)

324-337: Remove unused dependencies variable from Dart code generation – it's never rendered in the template

The dependencies block (lines 324-337) builds TS-style interface declarations with Dart types, but class.dart.tpl never uses this variable. It's passed to the template data (line 380) but remains orphaned. This code was likely copied from the React implementation without being integrated into the Dart template.

Remove:

  • Lines 324-337: the dependencies variable construction
  • Line 380: the dependencies, parameter in the template data object
cli/src/react.ts (1)

164-205: Move export declare const and type aliases from .tsx module to generated .d.ts files

The dependencies block in generateReactComponent (line 198: export declare const ${c.name}: ${c.type}) is injected directly into .tsx module files. In TypeScript, the declare modifier is only valid in ambient declarations (.d.ts files), not in module files with imports. This violates TypeScript module semantics and will trigger "declare" modifier not allowed here errors during compilation, especially with strict mode enabled in the generated packages.

Fix approach:

  • Move typeAliasDeclarations, constDeclarations, and enumDeclarations from the .tsx output to a corresponding generated .d.ts file instead
  • If type-only const branding is needed in .tsx, either re-export from the .d.ts or use a different pattern (e.g., export const with actual values or use unique symbol in types)

To verify: Run npm run build in a generated package (e.g., packages/react-core-ui) and check for TypeScript diagnostics around these declarations.

🧹 Nitpick comments (13)
cli/test/react-vue-nullable-props.test.ts (1)

47-64: Vue test mirrors React case; consider a small helper to DRY setup

The Vue typing assertion correctly checks for the kebab-cased 'checked'?: boolean | null; prop in the generated typings, giving symmetric coverage for the Vue generator. The blob/analyzer setup is duplicated between the React and Vue tests; if this pattern grows, you could factor a tiny createAnalyzedCheckboxBlob() helper to keep future tests concise, but that’s optional. Based on learnings.

packages/react-router/src/routes/utils.ts (1)

11-18: Document the interface contract.

The HybridRouteStackEntry interface mirrors the shape of entries returned from webf.hybridHistory.buildContextStack. Consider adding a brief comment linking this to the underlying API for maintainability.

cli/test/vue.test.ts (1)

171-187: Refactor to use ES6 imports for consistency.

The test uses require() to dynamically import EnumObject and EnumMemberObject, which is inconsistent with the ES6 import style used throughout the file.

Refactor to use ES6 imports:

+import { EnumObject, EnumMemberObject } from '../src/declaration';
+
 it('should include declare enum as exported declaration', () => {
   const blob = new IDLBlob('/test/source', '/test/target', 'EnumOnly', 'test', '');
-  // Build a minimal faux EnumObject via analyzer by simulating ast is heavy; create a shape
-  // We'll reuse analyzer classes by importing EnumObject is cumbersome in test; instead
-  // craft an object literal compatible with instanceof check by constructing real class.
-  const { EnumObject, EnumMemberObject } = require('../src/declaration');
   const e = new EnumObject();

Note: The unusual enum member names with quotes (e.g., 'red') appear to be testing edge cases, which is acceptable for test coverage.

use_cases/src/pages/CupertinoShowcasePage.tsx (1)

1-84: Cupertino showcase structure and routing look solid

The page cleanly reuses an Item helper with proper typing, uses WebFRouter.pushState consistently, and applies the shared layout classes via WebFListView. The grouping and copy are coherent, and disabled items are correctly made non-interactive when to is absent.

If you want to micro-optimize, you could hoist Item outside the component or wrap navigateTo in useCallback, but it’s not necessary for this page’s scale. Please just verify that all referenced /cupertino/... routes are registered in the router.

cli/test/react-consts.test.ts (1)

1-29: React const/enum generator tests look correct

The tests exercise the new ConstObject/EnumObject paths in generateReactComponent and assert the exact emitted declarations, which matches the generator implementation. Only minor nit is the second test description mentioning “declare enum” while checking for export enum, but that’s non-blocking.

cli/templates/vue.components.d.ts.tpl (1)

8-26: Vue typings template placeholders are in the right places

Injecting typesImport after the core Vue imports and emitting consts/enums before the DefineCustomElement helper keeps ambient declarations at the top level and is consistent with how React typings emit consts/enums. Assuming generateVueTypings now supplies these three template params, this aligns with the template–generator contract.

As per coding guidelines.

use_cases/src/App.tsx (1)

71-107: Cupertino imports without matching routes may be unused

CupertinoPageRoutePage, CupertinoDialogRoutePage, CupertinoModalPopupRoutePage, CupertinoPageTransitionPage, CupertinoFullscreenDialogTransitionPage, and CupertinoPopupSurfacePage are imported but don’t have corresponding <Route> entries in this file. If these pages are meant to be part of the public Cupertino gallery, consider adding routes (e.g. /cupertino/page-route, /cupertino/page-transition, etc.) or removing the imports if they are intentionally unused.

cli/src/generator.ts (1)

416-480: React aggregated types.ts generation is consistent with declaration model

The post‑processing step that:

  • Collects ConstObject, EnumObject, and TypeAliasObject instances across blobs,
  • Deduplicates them by name,
  • Writes a single src/types.ts with export declare const, export enum, and export type declarations,
  • And ensures src/index.ts re‑exports from './types'

is a sensible way to surface shared types. The enum/text formats mirror those in react.ts, and writeFileIfChanged prevents unnecessary rewrites.

As per coding guidelines.

cli/src/commands.ts (2)

381-424: Package name sanitization is a good safeguard

Normalizing options.packageName via isValidNpmPackageName/sanitizePackageName in createCommand ensures newly scaffolded React/Vue packages always have valid npm names. This complements the interactive validation in generateCommand and avoids subtle publish failures due to invalid names.


772-787: Post‑build markdown copy for React packages is a nice DX improvement

Hooking copyMarkdownDocsToDist right after buildPackage when framework === 'react' and flutterPackageSrc is set will surface Flutter‑side markdown docs next to built JS in dist. The conditional log on copied > 0 keeps output tidy. Once the glob usage is fixed as noted above, this should be robust.

cli/src/analyzer.ts (1)

1010-1049: Variable statement processing only inspects the first declaration

processVariableStatement now:

  • returns a FunctionObject when the first declaration has a function type
  • otherwise returns a ConstObject with the printed type text
  • ignores any additional declarators in the same VariableStatement

If your IDL files ever declare multiple consts in a single statement (e.g., declare const A: X, B: Y;), only the first will be captured. If that’s not expected in your inputs, this is fine; otherwise, consider iterating all declarations and returning an array.

cli/src/vue.ts (1)

14-44: Union / pointer return-type handling is duplicated but with intentional semantic differences

The core logic (union normalization, null de-duplication, basic type conversion) is nearly identical in both files. However, Vue intentionally applies a framework-specific transformation to pointer types that React does not:

  • React (line 44): Returns pointer as-is (return pointerType)
  • Vue (lines 48–50): Transforms typeof pointers to include __webfTypes prefix (typeof __webfTypes.${ident})

This same pattern repeats for array element pointers (Vue lines 54–58 vs. React lines 51–55).

Refactoring recommendation: Extract the common union + null handling logic into a shared utility in utils.ts, then have each generator apply its framework-specific pointer suffix transformation. This reduces duplication (~55 lines) while preserving the intentional Vue-specific __webfTypes behavior. Given that utils.ts already contains shared helpers (isUnionType, isPointerType, getPointerType), this follows the established pattern.

cli/src/react.ts (1)

14-46: Extract genRT closure into a parameterized helper to eliminate duplication

The two genRT closures at lines 345 and 482 are byte-for-byte identical. Both recursively handle unions, null, pointer types with __webfTypes prefixing (using closure variable localTypeNames), array types, and basic type mapping.

Extract this logic into a shared helper function that accepts localTypeNames as a parameter, then call it from both branches to reduce duplication and simplify future maintenance:

function createReturnTypeGenerator(localTypeNames: Set<string>): (type: ParameterType) => string {
  return (type: ParameterType): string => {
    // ... genRT implementation
  };
}

Then replace both closures with:

const genRT = createReturnTypeGenerator(localTypeNames);

This prevents divergence between the two implementations and makes the localTypeNames dependency explicit.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e97785f and 478ebcb.

📒 Files selected for processing (107)
  • README.md (1 hunks)
  • cli/CLAUDE.md (1 hunks)
  • cli/README.md (3 hunks)
  • cli/TYPING_GUIDE.md (1 hunks)
  • cli/bin/webf.js (1 hunks)
  • cli/package.json (1 hunks)
  • cli/src/IDLBlob.ts (2 hunks)
  • cli/src/analyzer.ts (7 hunks)
  • cli/src/commands.ts (26 hunks)
  • cli/src/dart.ts (7 hunks)
  • cli/src/declaration.ts (1 hunks)
  • cli/src/generator.ts (5 hunks)
  • cli/src/react.ts (7 hunks)
  • cli/src/vue.ts (4 hunks)
  • cli/templates/class.dart.tpl (1 hunks)
  • cli/templates/react.package.json.tpl (1 hunks)
  • cli/templates/vue.components.d.ts.tpl (2 hunks)
  • cli/test/commands.test.ts (5 hunks)
  • cli/test/dart-nullable-props.test.ts (1 hunks)
  • cli/test/react-consts.test.ts (1 hunks)
  • cli/test/react-vue-nullable-props.test.ts (1 hunks)
  • cli/test/react.test.ts (1 hunks)
  • cli/test/vue.test.ts (2 hunks)
  • packages/react-cupertino-ui/.gitignore (0 hunks)
  • packages/react-cupertino-ui/global.d.ts (0 hunks)
  • packages/react-cupertino-ui/package.json (0 hunks)
  • packages/react-cupertino-ui/src/index.ts (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/action-sheet.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/alert.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/button.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/checkbox.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/context-menu.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/date-picker.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/form_row.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/form_section.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/icon.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/input.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/list_section.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/list_tile.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/loading.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/modal-popup.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/picker-item.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/picker.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/radio.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/search-input.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/segmented-tab.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/slider.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/switch.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/tab.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/tab_bar.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/textarea.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/timer-picker.tsx (0 hunks)
  • packages/react-cupertino-ui/src/lib/src/toast.tsx (0 hunks)
  • packages/react-cupertino-ui/src/utils/createComponent.ts (0 hunks)
  • packages/react-cupertino-ui/tsconfig.json (0 hunks)
  • packages/react-cupertino-ui/tsup.config.ts (0 hunks)
  • packages/react-router/API.md (2 hunks)
  • packages/react-router/package.json (2 hunks)
  • packages/react-router/src/routes/Route.tsx (1 hunks)
  • packages/react-router/src/routes/utils.ts (2 hunks)
  • use_cases/README.md (1 hunks)
  • use_cases/package.json (3 hunks)
  • use_cases/src/App.tsx (3 hunks)
  • use_cases/src/components/RoutingDemo.tsx (10 hunks)
  • use_cases/src/components/WebFSlot.tsx (3 hunks)
  • use_cases/src/main.css (1 hunks)
  • use_cases/src/pages/ActionSheetPage.tsx (1 hunks)
  • use_cases/src/pages/AlertPage.tsx (1 hunks)
  • use_cases/src/pages/CSSShowcasePage.tsx (2 hunks)
  • use_cases/src/pages/ContextMenuPage.tsx (1 hunks)
  • use_cases/src/pages/CookiesPage.tsx (1 hunks)
  • use_cases/src/pages/CupertinoShowcasePage.tsx (1 hunks)
  • use_cases/src/pages/DOMBoundingRectPage.tsx (1 hunks)
  • use_cases/src/pages/FeatureCatalogPage.tsx (3 hunks)
  • use_cases/src/pages/HomePage.tsx (1 hunks)
  • use_cases/src/pages/ImagePreloadPage.tsx (3 hunks)
  • use_cases/src/pages/LoadingPage.tsx (1 hunks)
  • use_cases/src/pages/ModalPopupPage.tsx (1 hunks)
  • use_cases/src/pages/MutationObserverPage.tsx (1 hunks)
  • use_cases/src/pages/NetworkPage.tsx (1 hunks)
  • use_cases/src/pages/ShowCasePage.tsx (10 hunks)
  • use_cases/src/pages/SvgImagePage.tsx (1 hunks)
  • use_cases/src/pages/TailwindShowcasePage.tsx (1 hunks)
  • use_cases/src/pages/UrlEncodingPage.tsx (1 hunks)
  • use_cases/src/pages/WebSocketPage.tsx (1 hunks)
  • use_cases/src/pages/WebStoragePage.tsx (1 hunks)
  • use_cases/src/pages/css/BGGradientPage.tsx (1 hunks)
  • use_cases/src/pages/css/BGImagePage.tsx (1 hunks)
  • use_cases/src/pages/css/BGPage.tsx (1 hunks)
  • use_cases/src/pages/css/BGRadialPage.tsx (1 hunks)
  • use_cases/src/pages/css/BorderBackgroundShadowPage.tsx (1 hunks)
  • use_cases/src/pages/css/BorderPage.tsx (1 hunks)
  • use_cases/src/pages/css/BorderRadiusPage.tsx (1 hunks)
  • use_cases/src/pages/css/BoxShadowPage.tsx (1 hunks)
  • use_cases/src/pages/css/ClipPathPage.tsx (1 hunks)
  • use_cases/src/pages/css/DisplayFlowPage.tsx (1 hunks)
  • use_cases/src/pages/css/FilterPage.tsx (1 hunks)
  • use_cases/src/pages/css/FlexLayoutPage.tsx (1 hunks)
  • use_cases/src/pages/css/InlineFormattingPage.tsx (1 hunks)
  • use_cases/src/pages/css/OverflowPage.tsx (1 hunks)
  • use_cases/src/pages/css/PositionPage.tsx (1 hunks)
  • use_cases/src/pages/css/SelectorsPage.tsx (1 hunks)
  • use_cases/src/pages/css/SizingPage.tsx (1 hunks)
  • use_cases/src/pages/css/TransformsPage.tsx (1 hunks)
  • use_cases/src/pages/css/TransitionsPage.tsx (1 hunks)
  • use_cases/src/pages/css/ValuesUnitsPage.tsx (1 hunks)
  • use_cases/src/pages/cupertino/CupertinoActionSheetPage.tsx (1 hunks)
⛔ Files not processed due to max files limit (62)
  • use_cases/src/pages/cupertino/CupertinoAdaptiveTextSelectionToolbarPage.tsx
  • use_cases/src/pages/cupertino/CupertinoAlertPage.tsx
  • use_cases/src/pages/cupertino/CupertinoButtonsPage.tsx
  • use_cases/src/pages/cupertino/CupertinoCheckBoxPage.tsx
  • use_cases/src/pages/cupertino/CupertinoColorsPage.tsx
  • use_cases/src/pages/cupertino/CupertinoContextMenuPage.tsx
  • use_cases/src/pages/cupertino/CupertinoControlsPage.tsx
  • use_cases/src/pages/cupertino/CupertinoDatePickerPage.tsx
  • use_cases/src/pages/cupertino/CupertinoDesktopTextSelectionToolbarPage.tsx
  • use_cases/src/pages/cupertino/CupertinoDialogRoutePage.tsx
  • use_cases/src/pages/cupertino/CupertinoFormSectionPage.tsx
  • use_cases/src/pages/cupertino/CupertinoFullscreenDialogTransitionPage.tsx
  • use_cases/src/pages/cupertino/CupertinoIconsPage.tsx
  • use_cases/src/pages/cupertino/CupertinoListSectionPage.tsx
  • use_cases/src/pages/cupertino/CupertinoListTilePage.tsx
  • use_cases/src/pages/cupertino/CupertinoMagnifierPage.tsx
  • use_cases/src/pages/cupertino/CupertinoModalPopupPage.tsx
  • use_cases/src/pages/cupertino/CupertinoModalPopupRoutePage.tsx
  • use_cases/src/pages/cupertino/CupertinoPageRoutePage.tsx
  • use_cases/src/pages/cupertino/CupertinoPageTransitionPage.tsx
  • use_cases/src/pages/cupertino/CupertinoPickerPage.tsx
  • use_cases/src/pages/cupertino/CupertinoPopupSurfacePage.tsx
  • use_cases/src/pages/cupertino/CupertinoRadioPage.tsx
  • use_cases/src/pages/cupertino/CupertinoSearchTextFieldPage.tsx
  • use_cases/src/pages/cupertino/CupertinoSliderPage.tsx
  • use_cases/src/pages/cupertino/CupertinoSlidingSegmentedControlPage.tsx
  • use_cases/src/pages/cupertino/CupertinoSpellCheckSuggestionsToolbarPage.tsx
  • use_cases/src/pages/cupertino/CupertinoSwitchPage.tsx
  • use_cases/src/pages/cupertino/CupertinoTabsPage.tsx
  • use_cases/src/pages/cupertino/CupertinoTextFieldPage.tsx
  • use_cases/src/pages/cupertino/CupertinoTextFormFieldRowPage.tsx
  • use_cases/src/pages/cupertino/CupertinoTextSelectionControlsPage.tsx
  • use_cases/src/pages/cupertino/CupertinoTextSelectionToolbarPage.tsx
  • use_cases/src/pages/cupertino/CupertinoTimerPickerPage.tsx
  • use_cases/src/pages/dom/DOMClassListPage.tsx
  • use_cases/src/pages/dom/DOMEventsPage.tsx
  • use_cases/src/pages/dom/DOMGeometryPage.tsx
  • use_cases/src/pages/dom/DOMInnerHTMLPage.tsx
  • use_cases/src/pages/dom/DOMOffsetsPage.tsx
  • use_cases/src/pages/dom/DOMStylePage.tsx
  • use_cases/src/pages/routeDemo/ProfileEditPage.tsx
  • use_cases/src/pages/routeDemo/ReportDetailsPage.tsx
  • use_cases/src/pages/routeDemo/UserDetailsPage.tsx
  • use_cases/src/router.tsx
  • webf_cupertino_ui/.flutter-plugins
  • webf_cupertino_ui/.flutter-plugins-dependencies
  • webf_cupertino_ui/README.md
  • webf_cupertino_ui/docs/migration-rules.md
  • webf_cupertino_ui/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  • webf_cupertino_ui/example/macos/Flutter/GeneratedPluginRegistrant.swift
  • webf_cupertino_ui/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  • webf_cupertino_ui/index.d.ts
  • webf_cupertino_ui/lib/src/action-sheet.d.ts
  • webf_cupertino_ui/lib/src/action_sheet.dart
  • webf_cupertino_ui/lib/src/action_sheet.md
  • webf_cupertino_ui/lib/src/action_sheet_bindings_generated.dart
  • webf_cupertino_ui/lib/src/alert.d.ts
  • webf_cupertino_ui/lib/src/alert.dart
  • webf_cupertino_ui/lib/src/alert.md
  • webf_cupertino_ui/lib/src/alert_bindings_generated.dart
  • webf_cupertino_ui/lib/src/button.d.ts
  • webf_cupertino_ui/lib/src/button.dart
💤 Files with no reviewable changes (33)
  • packages/react-cupertino-ui/global.d.ts
  • packages/react-cupertino-ui/.gitignore
  • packages/react-cupertino-ui/src/lib/src/picker.tsx
  • packages/react-cupertino-ui/src/lib/src/tab.tsx
  • packages/react-cupertino-ui/src/lib/src/modal-popup.tsx
  • packages/react-cupertino-ui/src/lib/src/date-picker.tsx
  • packages/react-cupertino-ui/src/lib/src/list_section.tsx
  • packages/react-cupertino-ui/src/lib/src/loading.tsx
  • packages/react-cupertino-ui/src/lib/src/button.tsx
  • packages/react-cupertino-ui/src/lib/src/picker-item.tsx
  • packages/react-cupertino-ui/src/lib/src/switch.tsx
  • packages/react-cupertino-ui/src/lib/src/search-input.tsx
  • packages/react-cupertino-ui/src/lib/src/context-menu.tsx
  • packages/react-cupertino-ui/tsconfig.json
  • packages/react-cupertino-ui/src/lib/src/segmented-tab.tsx
  • packages/react-cupertino-ui/src/lib/src/icon.tsx
  • packages/react-cupertino-ui/src/lib/src/textarea.tsx
  • packages/react-cupertino-ui/src/lib/src/form_section.tsx
  • packages/react-cupertino-ui/src/lib/src/list_tile.tsx
  • packages/react-cupertino-ui/src/lib/src/checkbox.tsx
  • packages/react-cupertino-ui/package.json
  • packages/react-cupertino-ui/src/lib/src/toast.tsx
  • packages/react-cupertino-ui/src/lib/src/tab_bar.tsx
  • packages/react-cupertino-ui/src/lib/src/input.tsx
  • packages/react-cupertino-ui/src/lib/src/slider.tsx
  • packages/react-cupertino-ui/src/lib/src/form_row.tsx
  • packages/react-cupertino-ui/src/lib/src/timer-picker.tsx
  • packages/react-cupertino-ui/tsup.config.ts
  • packages/react-cupertino-ui/src/lib/src/radio.tsx
  • packages/react-cupertino-ui/src/lib/src/action-sheet.tsx
  • packages/react-cupertino-ui/src/lib/src/alert.tsx
  • packages/react-cupertino-ui/src/utils/createComponent.ts
  • packages/react-cupertino-ui/src/index.ts
🧰 Additional context used
📓 Path-based instructions (12)
cli/**/{package.json,jest.config.@(js|cjs|mjs|ts)}

📄 CodeRabbit inference engine (cli/CLAUDE.md)

Enforce test coverage threshold of at least 70%

Files:

  • cli/package.json
cli/test/**/*.test.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

cli/test/**/*.test.ts: Provide unit tests for all core modules (analyzer.ts, generator.ts, dart.ts, react.ts, vue.ts, commands.ts, logger.ts)
Mock file system (e.g., jest.mock('fs')) before importing modules that read files at load time

Files:

  • cli/test/react-consts.test.ts
  • cli/test/vue.test.ts
  • cli/test/react-vue-nullable-props.test.ts
  • cli/test/dart-nullable-props.test.ts
  • cli/test/commands.test.ts
  • cli/test/react.test.ts
cli/**/*.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

Use the internal logger (debug, info, warn, error) for debugging instead of console.log

Files:

  • cli/test/react-consts.test.ts
  • cli/src/IDLBlob.ts
  • cli/src/commands.ts
  • cli/test/vue.test.ts
  • cli/src/vue.ts
  • cli/test/react-vue-nullable-props.test.ts
  • cli/test/dart-nullable-props.test.ts
  • cli/src/declaration.ts
  • cli/test/commands.test.ts
  • cli/test/react.test.ts
  • cli/src/generator.ts
  • cli/src/react.ts
  • cli/src/analyzer.ts
  • cli/src/dart.ts
cli/**/*.{ts,tsx}

📄 CodeRabbit inference engine (cli/CLAUDE.md)

cli/**/*.{ts,tsx}: Use async/await for asynchronous operations
Implement proper error handling using try-catch around failing async/sync operations
Provide descriptive error messages when throwing or logging errors

Files:

  • cli/test/react-consts.test.ts
  • cli/src/IDLBlob.ts
  • cli/src/commands.ts
  • cli/test/vue.test.ts
  • cli/src/vue.ts
  • cli/test/react-vue-nullable-props.test.ts
  • cli/test/dart-nullable-props.test.ts
  • cli/src/declaration.ts
  • cli/test/commands.test.ts
  • cli/test/react.test.ts
  • cli/src/generator.ts
  • cli/src/react.ts
  • cli/src/analyzer.ts
  • cli/src/dart.ts
cli/templates/*.tpl

📄 CodeRabbit inference engine (cli/CLAUDE.md)

When modifying a template in /templates/*.tpl, update the corresponding generator function accordingly

Files:

  • cli/templates/class.dart.tpl
  • cli/templates/vue.components.d.ts.tpl
  • cli/templates/react.package.json.tpl
cli/**/commands.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

During automatic build after generation, run npm run build if present, continue on failure with a warning, and provide clear output

Files:

  • cli/src/commands.ts
cli/**/{commands,generator}.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

Clear caches before generation when file changes are not detected (invoke clearCaches())

Files:

  • cli/src/commands.ts
  • cli/src/generator.ts
cli/**/{react,vue,dart}.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

Implement HTML attribute type conversions in generators: boolean (value == 'true' || value == ''), int (int.tryParse(value) ?? 0), double (double.tryParse(value) ?? 0.0), string (direct)

Files:

  • cli/src/vue.ts
  • cli/src/react.ts
  • cli/src/dart.ts
cli/**/{generator,dart,react,vue}.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

cli/**/{generator,dart,react,vue}.ts: After template changes, update the corresponding generator function to reflect the template contract
Use generateAttributeSetter to handle attribute type conversion to avoid boolean-as-string bugs

Files:

  • cli/src/vue.ts
  • cli/src/generator.ts
  • cli/src/react.ts
  • cli/src/dart.ts
cli/**/{analyzer,generator}.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

Process files in batches using processFilesInBatch(items, batchSize, processor) for optimal parallelism

Files:

  • cli/src/generator.ts
  • cli/src/analyzer.ts
cli/**/{generator,dart}.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

Maintain a Type Conversion Cache for frequently used type conversions

Files:

  • cli/src/generator.ts
  • cli/src/dart.ts
cli/**/analyzer.ts

📄 CodeRabbit inference engine (cli/CLAUDE.md)

cli/**/analyzer.ts: Maintain a Source File Cache for parsed TypeScript AST files
Maintain a File Content Cache to detect file changes
When handling TypeScript types, explicitly detect literal null types (LiteralType with NullKeyword)

Files:

  • cli/src/analyzer.ts
🧠 Learnings (32)
📓 Common learnings
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.vue : Use flutter-cupertino- prefixed custom elements for WebF Cupertino components in Vue templates
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.{js,ts,vue} : Use WebF hybrid history (window.webf.hybridHistory) for navigation instead of Vue Router
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/{react,vue,dart}.ts : Implement HTML attribute type conversions in generators: boolean (value == 'true' || value == ''), int (int.tryParse(value) ?? 0), double (double.tryParse(value) ?? 0.0), string (direct)
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.vue : Use flutter-cupertino- prefixed custom elements for WebF Cupertino components in Vue templates

Applied to files:

  • use_cases/src/pages/HomePage.tsx
  • use_cases/src/pages/LoadingPage.tsx
  • cli/README.md
  • cli/TYPING_GUIDE.md
  • use_cases/src/pages/AlertPage.tsx
  • use_cases/src/pages/cupertino/CupertinoActionSheetPage.tsx
  • use_cases/README.md
  • cli/bin/webf.js
  • cli/templates/vue.components.d.ts.tpl
  • use_cases/src/App.tsx
  • use_cases/src/pages/CupertinoShowcasePage.tsx
  • use_cases/src/main.css
  • use_cases/src/pages/ShowCasePage.tsx
  • use_cases/src/pages/FeatureCatalogPage.tsx
  • README.md
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/test/**/*.test.ts : Provide unit tests for all core modules (analyzer.ts, generator.ts, dart.ts, react.ts, vue.ts, commands.ts, logger.ts)

Applied to files:

  • cli/test/react-consts.test.ts
  • cli/CLAUDE.md
  • cli/src/commands.ts
  • cli/test/vue.test.ts
  • cli/test/react-vue-nullable-props.test.ts
  • cli/test/dart-nullable-props.test.ts
  • cli/test/commands.test.ts
  • cli/test/react.test.ts
  • cli/src/generator.ts
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.{css,scss,vue} : Prefer CSS transforms for animations to improve performance

Applied to files:

  • use_cases/src/pages/css/TransitionsPage.tsx
  • use_cases/src/pages/CSSShowcasePage.tsx
  • use_cases/src/pages/ImagePreloadPage.tsx
  • use_cases/src/pages/css/ClipPathPage.tsx
  • use_cases/src/pages/FeatureCatalogPage.tsx
  • use_cases/src/pages/css/TransformsPage.tsx
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/{generator,dart,react,vue}.ts : After template changes, update the corresponding generator function to reflect the template contract

Applied to files:

  • cli/templates/class.dart.tpl
  • cli/README.md
  • cli/CLAUDE.md
  • cli/bin/webf.js
  • cli/templates/vue.components.d.ts.tpl
  • cli/templates/react.package.json.tpl
  • cli/src/commands.ts
  • cli/src/vue.ts
  • cli/test/commands.test.ts
  • cli/test/react.test.ts
  • cli/src/generator.ts
  • cli/src/react.ts
  • cli/src/dart.ts
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/{generator,dart,react,vue}.ts : Use generateAttributeSetter to handle attribute type conversion to avoid boolean-as-string bugs

Applied to files:

  • cli/templates/class.dart.tpl
  • cli/src/commands.ts
  • cli/src/vue.ts
  • cli/test/react-vue-nullable-props.test.ts
  • cli/test/dart-nullable-props.test.ts
  • cli/test/react.test.ts
  • cli/src/generator.ts
  • cli/src/dart.ts
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/*_bindings_generated.dart : Boolean attributes generated for Dart bindings must be non-nullable (e.g., open?: boolean -> bool get open;)

Applied to files:

  • cli/templates/class.dart.tpl
  • cli/bin/webf.js
  • cli/test/dart-nullable-props.test.ts
  • cli/src/dart.ts
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.vue : Use scoped styles for component-specific CSS in SFCs

Applied to files:

  • use_cases/src/pages/css/FilterPage.tsx
  • use_cases/src/pages/css/ClipPathPage.tsx
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/*_bindings_generated.dart : Name Dart binding files with the suffix _bindings_generated.dart

Applied to files:

  • cli/README.md
  • cli/TYPING_GUIDE.md
  • cli/CLAUDE.md
  • cli/bin/webf.js
  • cli/src/commands.ts
  • cli/test/commands.test.ts
  • cli/src/generator.ts
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/**/vue.config.js : Configure Vue compiler to treat tags starting with webf- or flutter- as custom elements (isCustomElement)

Applied to files:

  • cli/README.md
  • cli/TYPING_GUIDE.md
  • cli/bin/webf.js
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/index.d.ts : Generated index.d.ts must include triple-slash references to all .d.ts files and ES module exports for all type definitions; include package metadata in documentation comments

Applied to files:

  • cli/TYPING_GUIDE.md
  • cli/CLAUDE.md
  • cli/templates/vue.components.d.ts.tpl
  • cli/src/commands.ts
  • cli/test/vue.test.ts
  • cli/src/vue.ts
  • cli/test/commands.test.ts
  • cli/test/react.test.ts
  • cli/src/generator.ts
  • cli/src/react.ts
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/{react,vue,dart}.ts : Implement HTML attribute type conversions in generators: boolean (value == 'true' || value == ''), int (int.tryParse(value) ?? 0), double (double.tryParse(value) ?? 0.0), string (direct)

Applied to files:

  • cli/TYPING_GUIDE.md
  • cli/bin/webf.js
  • cli/templates/vue.components.d.ts.tpl
  • cli/src/commands.ts
  • cli/src/vue.ts
  • cli/test/react-vue-nullable-props.test.ts
  • cli/test/dart-nullable-props.test.ts
  • cli/test/react.test.ts
  • cli/src/generator.ts
  • cli/src/react.ts
  • cli/src/dart.ts
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/{generator,dart}.ts : Maintain a Type Conversion Cache for frequently used type conversions

Applied to files:

  • cli/TYPING_GUIDE.md
  • cli/CLAUDE.md
  • cli/src/commands.ts
  • cli/src/vue.ts
  • cli/src/generator.ts
  • cli/src/react.ts
  • cli/src/dart.ts
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.{js,ts,vue} : Avoid direct DOM manipulation; prefer Vue refs and reactive updates

Applied to files:

  • use_cases/src/pages/ImagePreloadPage.tsx
  • use_cases/src/pages/ShowCasePage.tsx
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.vue : Implement lazy loading behaviors using the onscreen event for components entering the viewport

Applied to files:

  • use_cases/src/pages/ImagePreloadPage.tsx
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/*.{ts,tsx} : Implement proper error handling using try-catch around failing async/sync operations

Applied to files:

  • cli/CLAUDE.md
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/*.{ts,tsx} : Provide descriptive error messages when throwing or logging errors

Applied to files:

  • cli/CLAUDE.md
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/tsconfig.json : Enable TypeScript strict mode

Applied to files:

  • cli/CLAUDE.md
  • cli/src/commands.ts
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/*.{ts,tsx} : Use async/await for asynchronous operations

Applied to files:

  • cli/CLAUDE.md
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.vue : Handle component events using Vue’s event syntax with WebF components

Applied to files:

  • cli/templates/vue.components.d.ts.tpl
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.{js,ts,vue} : Use WebF hybrid history (window.webf.hybridHistory) for navigation instead of Vue Router

Applied to files:

  • packages/react-router/package.json
  • use_cases/src/App.tsx
  • use_cases/src/pages/CupertinoShowcasePage.tsx
  • packages/react-router/src/routes/utils.ts
  • use_cases/src/components/RoutingDemo.tsx
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/Pages/**/*.vue : Create new showcase pages as .vue files under src/Pages/

Applied to files:

  • use_cases/src/App.tsx
  • use_cases/src/pages/CupertinoShowcasePage.tsx
  • use_cases/src/pages/ShowCasePage.tsx
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/**/*.vue : Use the custom RouterView component for page routing

Applied to files:

  • use_cases/src/App.tsx
  • use_cases/src/pages/CupertinoShowcasePage.tsx
  • use_cases/src/components/RoutingDemo.tsx
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/Pages/HomePage.vue : Register new component pages in HomePage.vue navigation

Applied to files:

  • use_cases/src/App.tsx
  • use_cases/src/pages/CupertinoShowcasePage.tsx
  • use_cases/src/pages/FeatureCatalogPage.tsx
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/{commands,generator}.ts : Clear caches before generation when file changes are not detected (invoke clearCaches())

Applied to files:

  • cli/src/commands.ts
  • cli/test/commands.test.ts
  • cli/src/generator.ts
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/commands.ts : During automatic build after generation, run npm run build if present, continue on failure with a warning, and provide clear output

Applied to files:

  • cli/src/commands.ts
  • cli/src/generator.ts
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/utils/**/tabBarManager.@(js|ts) : Maintain navigation state via the TabBarManager singleton

Applied to files:

  • use_cases/src/pages/CupertinoShowcasePage.tsx
  • use_cases/src/components/RoutingDemo.tsx
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/analyzer.ts : When handling TypeScript types, explicitly detect literal null types (LiteralType with NullKeyword)

Applied to files:

  • cli/test/react-vue-nullable-props.test.ts
  • cli/test/dart-nullable-props.test.ts
  • cli/src/analyzer.ts
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/src/assets/**/*.{css,scss} : Define theme colors using CSS custom properties under :root

Applied to files:

  • use_cases/src/main.css
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/test/**/*.test.ts : Mock file system (e.g., jest.mock('fs')) before importing modules that read files at load time

Applied to files:

  • cli/test/commands.test.ts
📚 Learning: 2025-09-22T15:33:18.528Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: webf_apps/vue-cupertino-gallery/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:33:18.528Z
Learning: Applies to webf_apps/vue-cupertino-gallery/**/package.json : Do not include vue-router as a project dependency

Applied to files:

  • use_cases/package.json
📚 Learning: 2025-09-22T15:32:31.316Z
Learnt from: CR
Repo: openwebf/webf PR: 0
File: cli/CLAUDE.md:0-0
Timestamp: 2025-09-22T15:32:31.316Z
Learning: Applies to cli/**/analyzer.ts : Maintain a Source File Cache for parsed TypeScript AST files

Applied to files:

  • cli/src/analyzer.ts
  • cli/src/dart.ts
🧬 Code graph analysis (54)
use_cases/src/pages/css/OverflowPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/test/react-consts.test.ts (3)
cli/src/IDLBlob.ts (1)
  • IDLBlob (3-20)
cli/src/declaration.ts (3)
  • ConstObject (93-96)
  • EnumObject (103-107)
  • EnumMemberObject (98-101)
cli/src/react.ts (1)
  • generateReactComponent (164-603)
use_cases/src/pages/css/SizingPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/UrlEncodingPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/ValuesUnitsPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/FlexLayoutPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/BGPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/TransitionsPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/LoadingPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/ActionSheetPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/src/IDLBlob.ts (1)
cli/src/declaration.ts (1)
  • EnumObject (103-107)
use_cases/src/pages/css/BorderPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/FilterPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/SelectorsPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/BGImagePage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/CookiesPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/DOMBoundingRectPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/CSSShowcasePage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/ContextMenuPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/AlertPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/BorderRadiusPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/ModalPopupPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/ImagePreloadPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/cupertino/CupertinoActionSheetPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/NetworkPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/WebSocketPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/App.tsx (2)
use_cases/src/router.tsx (1)
  • Route (54-54)
use_cases/src/pages/CupertinoShowcasePage.tsx (1)
  • CupertinoShowcasePage (5-84)
cli/src/commands.ts (2)
legacy_impls/scripts/tasks.js (1)
  • NPM (50-50)
cli/src/generator.ts (2)
  • dartGen (148-238)
  • reactGen (240-481)
use_cases/src/pages/css/BoxShadowPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/test/vue.test.ts (3)
cli/src/IDLBlob.ts (1)
  • IDLBlob (3-20)
cli/src/declaration.ts (3)
  • ConstObject (93-96)
  • EnumObject (103-107)
  • EnumMemberObject (98-101)
cli/src/vue.ts (1)
  • generateVueTypings (226-309)
cli/src/vue.ts (2)
cli/src/analyzer.ts (1)
  • ParameterType (277-280)
cli/src/declaration.ts (2)
  • ConstObject (93-96)
  • EnumObject (103-107)
use_cases/src/pages/MutationObserverPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/CupertinoShowcasePage.tsx (2)
use_cases/src/router.tsx (1)
  • WebFRouter (72-104)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/WebStoragePage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/PositionPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/DisplayFlowPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/test/react-vue-nullable-props.test.ts (4)
cli/src/analyzer.ts (4)
  • clearCaches (1052-1055)
  • UnionTypeCollector (27-29)
  • ParameterType (277-280)
  • analyzer (60-87)
cli/src/IDLBlob.ts (1)
  • IDLBlob (3-20)
cli/src/react.ts (1)
  • generateReactComponent (164-603)
cli/src/vue.ts (1)
  • generateVueTypings (226-309)
use_cases/src/pages/css/BGRadialPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/test/dart-nullable-props.test.ts (3)
cli/src/analyzer.ts (4)
  • clearCaches (1052-1055)
  • UnionTypeCollector (27-29)
  • ParameterType (277-280)
  • analyzer (60-87)
cli/src/IDLBlob.ts (1)
  • IDLBlob (3-20)
cli/src/dart.ts (1)
  • generateDartClass (304-408)
use_cases/src/pages/css/BGGradientPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/ClipPathPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/InlineFormattingPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/SvgImagePage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/test/react.test.ts (2)
cli/src/IDLBlob.ts (1)
  • IDLBlob (3-20)
cli/src/declaration.ts (2)
  • ClassObject (68-82)
  • PropsDeclaration (40-49)
use_cases/src/pages/TailwindShowcasePage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/ShowCasePage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
use_cases/src/pages/css/BorderBackgroundShadowPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/src/generator.ts (1)
cli/src/declaration.ts (3)
  • ConstObject (93-96)
  • EnumObject (103-107)
  • TypeAliasObject (88-91)
use_cases/src/pages/FeatureCatalogPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/src/react.ts (2)
cli/src/analyzer.ts (1)
  • ParameterType (277-280)
cli/src/declaration.ts (2)
  • ConstObject (93-96)
  • EnumObject (103-107)
use_cases/src/components/RoutingDemo.tsx (2)
use_cases/src/router.tsx (1)
  • WebFRouter (72-104)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/src/analyzer.ts (2)
cli/src/declaration.ts (7)
  • ClassObject (68-82)
  • FunctionObject (84-86)
  • TypeAliasObject (88-91)
  • ConstObject (93-96)
  • EnumObject (103-107)
  • EnumMemberObject (98-101)
  • FunctionDeclaration (55-60)
cli/src/IDLBlob.ts (1)
  • IDLBlob (3-20)
use_cases/src/pages/css/TransformsPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
  • WebFListView (168-202)
cli/src/dart.ts (2)
cli/src/analyzer.ts (1)
  • ParameterType (277-280)
cli/src/declaration.ts (2)
  • EnumObject (103-107)
  • PropsDeclaration (40-49)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: build-windows
  • GitHub Check: build-linux
  • GitHub Check: build-ios
  • GitHub Check: build-android
  • GitHub Check: build-macos
  • GitHub Check: Analyze (rust)
  • GitHub Check: Analyze (c-cpp)
  • GitHub Check: Analyze (javascript-typescript)

@andycall andycall merged commit e6231f0 into main Nov 21, 2025
11 of 13 checks passed
@andycall andycall deleted the fix/cupertino_ui branch November 21, 2025 07:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants