-
-
Notifications
You must be signed in to change notification settings - Fork 144
feat(cupertino): add WebF Cupertino UI package and gallery #753
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- 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>
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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. WalkthroughAdds 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
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (7)
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. Comment |
There was a problem hiding this 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: UpdatethemeJSDoc to match new non-default behaviorThe implementation no longer defaults
themeto"material". The function destructuresthemewithout a default value (line 39:{path, prerender = false, element, title, theme}), so when omitted it becomesundefinedand is passed toWebFRouterLink. 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 syncThe test
should run npm install when creating new projectstill expects['install', '--omit=peer'], butcreateCommandnow runs plainnpm install. Either the behavior or the assertion should be updated so they agree on whether--omit=peeris desired for newly scaffolded React packages.cli/src/generator.ts (1)
105-120: Fixglob.globSyncAPI calls in two locationsThe
globpackage exportsglobSyncas a separate named export, not a method on theglobobject. Bothcli/src/generator.ts:110andcli/src/commands.ts:244incorrectly callglob.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:110ingetTypeFiles()cli/src/commands.ts:244in the markdown copy helpercli/src/analyzer.ts (1)
413-536: Fix string literal quoting in non-union CustomEvent caseLine 492-493 drops quotes from string literals (
argument.literal.text), producing invalid TypeScript syntax likeCustomEvent<foo>instead ofCustomEvent<'foo'>. This contradicts the union branch at line 428, which correctly usesJSON.stringify(lit.text).TypeScript string literal types require quotes, e.g.,
'foo'notfoo. Update the non-union string literal case to useJSON.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 unuseddependenciesvariable from Dart code generation – it's never rendered in the templateThe
dependenciesblock (lines 324-337) builds TS-style interface declarations with Dart types, butclass.dart.tplnever 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
dependenciesvariable construction- Line 380: the
dependencies,parameter in the template data objectcli/src/react.ts (1)
164-205: Moveexport declare constand type aliases from .tsx module to generated .d.ts filesThe
dependenciesblock ingenerateReactComponent(line 198:export declare const ${c.name}: ${c.type}) is injected directly into.tsxmodule files. In TypeScript, thedeclaremodifier is only valid in ambient declarations (.d.tsfiles), not in module files with imports. This violates TypeScript module semantics and will trigger"declare" modifier not allowed hereerrors during compilation, especially with strict mode enabled in the generated packages.Fix approach:
- Move
typeAliasDeclarations,constDeclarations, andenumDeclarationsfrom the.tsxoutput to a corresponding generated.d.tsfile instead- If type-only const branding is needed in
.tsx, either re-export from the.d.tsor use a different pattern (e.g.,export constwith actual values or useunique symbolin types)To verify: Run
npm run buildin 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 setupThe 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 tinycreateAnalyzedCheckboxBlob()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
HybridRouteStackEntryinterface mirrors the shape of entries returned fromwebf.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 importEnumObjectandEnumMemberObject, 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 solidThe page cleanly reuses an
Itemhelper with proper typing, usesWebFRouter.pushStateconsistently, and applies the shared layout classes viaWebFListView. The grouping and copy are coherent, and disabled items are correctly made non-interactive whentois absent.If you want to micro-optimize, you could hoist
Itemoutside the component or wrapnavigateToinuseCallback, 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 correctThe tests exercise the new ConstObject/EnumObject paths in
generateReactComponentand assert the exact emitted declarations, which matches the generator implementation. Only minor nit is the second test description mentioning “declare enum” while checking forexport enum, but that’s non-blocking.cli/templates/vue.components.d.ts.tpl (1)
8-26: Vue typings template placeholders are in the right placesInjecting
typesImportafter the core Vue imports and emittingconsts/enumsbefore theDefineCustomElementhelper keeps ambient declarations at the top level and is consistent with how React typings emit consts/enums. AssuminggenerateVueTypingsnow 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, andCupertinoPopupSurfacePageare 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 aggregatedtypes.tsgeneration is consistent with declaration modelThe post‑processing step that:
- Collects
ConstObject,EnumObject, andTypeAliasObjectinstances across blobs,- Deduplicates them by name,
- Writes a single
src/types.tswithexport declare const,export enum, andexport typedeclarations,- And ensures
src/index.tsre‑exports from'./types'is a sensible way to surface shared types. The enum/text formats mirror those in
react.ts, andwriteFileIfChangedprevents unnecessary rewrites.As per coding guidelines.
cli/src/commands.ts (2)
381-424: Package name sanitization is a good safeguardNormalizing
options.packageNameviaisValidNpmPackageName/sanitizePackageNameincreateCommandensures newly scaffolded React/Vue packages always have valid npm names. This complements the interactive validation ingenerateCommandand avoids subtle publish failures due to invalid names.
772-787: Post‑build markdown copy for React packages is a nice DX improvementHooking
copyMarkdownDocsToDistright afterbuildPackagewhenframework === 'react'andflutterPackageSrcis set will surface Flutter‑side markdown docs next to built JS indist. The conditional log oncopied > 0keeps output tidy. Once theglobusage is fixed as noted above, this should be robust.cli/src/analyzer.ts (1)
1010-1049: Variable statement processing only inspects the first declaration
processVariableStatementnow:
- returns a
FunctionObjectwhen the first declaration has a function type- otherwise returns a
ConstObjectwith the printed type text- ignores any additional declarators in the same
VariableStatementIf 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 alldeclarationsand returning an array.cli/src/vue.ts (1)
14-44: Union / pointer return-type handling is duplicated but with intentional semantic differencesThe 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
typeofpointers to include__webfTypesprefix (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__webfTypesbehavior. Given thatutils.tsalready contains shared helpers (isUnionType,isPointerType,getPointerType), this follows the established pattern.cli/src/react.ts (1)
14-46: ExtractgenRTclosure into a parameterized helper to eliminate duplicationThe two
genRTclosures at lines 345 and 482 are byte-for-byte identical. Both recursively handle unions, null, pointer types with__webfTypesprefixing (using closure variablelocalTypeNames), array types, and basic type mapping.Extract this logic into a shared helper function that accepts
localTypeNamesas 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
localTypeNamesdependency explicit.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 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.tscli/test/vue.test.tscli/test/react-vue-nullable-props.test.tscli/test/dart-nullable-props.test.tscli/test/commands.test.tscli/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.tscli/src/IDLBlob.tscli/src/commands.tscli/test/vue.test.tscli/src/vue.tscli/test/react-vue-nullable-props.test.tscli/test/dart-nullable-props.test.tscli/src/declaration.tscli/test/commands.test.tscli/test/react.test.tscli/src/generator.tscli/src/react.tscli/src/analyzer.tscli/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.tscli/src/IDLBlob.tscli/src/commands.tscli/test/vue.test.tscli/src/vue.tscli/test/react-vue-nullable-props.test.tscli/test/dart-nullable-props.test.tscli/src/declaration.tscli/test/commands.test.tscli/test/react.test.tscli/src/generator.tscli/src/react.tscli/src/analyzer.tscli/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.tplcli/templates/vue.components.d.ts.tplcli/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.tscli/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.tscli/src/react.tscli/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.tscli/src/generator.tscli/src/react.tscli/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.tscli/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.tscli/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.tsxuse_cases/src/pages/LoadingPage.tsxcli/README.mdcli/TYPING_GUIDE.mduse_cases/src/pages/AlertPage.tsxuse_cases/src/pages/cupertino/CupertinoActionSheetPage.tsxuse_cases/README.mdcli/bin/webf.jscli/templates/vue.components.d.ts.tpluse_cases/src/App.tsxuse_cases/src/pages/CupertinoShowcasePage.tsxuse_cases/src/main.cssuse_cases/src/pages/ShowCasePage.tsxuse_cases/src/pages/FeatureCatalogPage.tsxREADME.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.tscli/CLAUDE.mdcli/src/commands.tscli/test/vue.test.tscli/test/react-vue-nullable-props.test.tscli/test/dart-nullable-props.test.tscli/test/commands.test.tscli/test/react.test.tscli/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.tsxuse_cases/src/pages/CSSShowcasePage.tsxuse_cases/src/pages/ImagePreloadPage.tsxuse_cases/src/pages/css/ClipPathPage.tsxuse_cases/src/pages/FeatureCatalogPage.tsxuse_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.tplcli/README.mdcli/CLAUDE.mdcli/bin/webf.jscli/templates/vue.components.d.ts.tplcli/templates/react.package.json.tplcli/src/commands.tscli/src/vue.tscli/test/commands.test.tscli/test/react.test.tscli/src/generator.tscli/src/react.tscli/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.tplcli/src/commands.tscli/src/vue.tscli/test/react-vue-nullable-props.test.tscli/test/dart-nullable-props.test.tscli/test/react.test.tscli/src/generator.tscli/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.tplcli/bin/webf.jscli/test/dart-nullable-props.test.tscli/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.tsxuse_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.mdcli/TYPING_GUIDE.mdcli/CLAUDE.mdcli/bin/webf.jscli/src/commands.tscli/test/commands.test.tscli/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.mdcli/TYPING_GUIDE.mdcli/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.mdcli/CLAUDE.mdcli/templates/vue.components.d.ts.tplcli/src/commands.tscli/test/vue.test.tscli/src/vue.tscli/test/commands.test.tscli/test/react.test.tscli/src/generator.tscli/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.mdcli/bin/webf.jscli/templates/vue.components.d.ts.tplcli/src/commands.tscli/src/vue.tscli/test/react-vue-nullable-props.test.tscli/test/dart-nullable-props.test.tscli/test/react.test.tscli/src/generator.tscli/src/react.tscli/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.mdcli/CLAUDE.mdcli/src/commands.tscli/src/vue.tscli/src/generator.tscli/src/react.tscli/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.tsxuse_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.mdcli/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.jsonuse_cases/src/App.tsxuse_cases/src/pages/CupertinoShowcasePage.tsxpackages/react-router/src/routes/utils.tsuse_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.tsxuse_cases/src/pages/CupertinoShowcasePage.tsxuse_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.tsxuse_cases/src/pages/CupertinoShowcasePage.tsxuse_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.tsxuse_cases/src/pages/CupertinoShowcasePage.tsxuse_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.tscli/test/commands.test.tscli/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.tscli/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.tsxuse_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.tscli/test/dart-nullable-props.test.tscli/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.tscli/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)
Summary
WebFRouterhelper for push/replace/pop/popUntil and web-stylepushState/replaceStatenavigation, used by the new Cupertino pages.Breaking Changes / Migration
packages/react-cupertino-uipackage is removed; React apps should migrate to generated wrappers based on the Cupertino typings and the new migration guidelines.Routetheme 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.jsnpm run build:bridge:macos(or your platform/CI equivalent)npm testcd webf && flutter testSummary by CodeRabbit
New Features
Documentation
Chores
✏️ Tip: You can customize this high-level summary in your review settings.