-
-
Notifications
You must be signed in to change notification settings - Fork 144
feat: CSS showcase updates, Cupertino layout fixes, and Apache-2.0 licensing #754
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
- Update FeatureCatalogPage to navigate Cupertino UI entry to CupertinoShowcasePage for better organization - Add comprehensive RTL (Right-to-Left) text direction showcases to InlineFormattingPage - Include examples of LTR/RTL comparison, bidirectional text, inline elements in RTL, text alignment, and inline-block behavior 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive RTL showcases to InlineFormattingPage with bidirectional text examples - Enhance DisplayFlowPage with display values, normal flow, and width/height behavior - Migrate GesturePage to TailwindCSS with optimized gesture info layout - Add FlutterGestureDetector standalone category in FeatureCatalogPage - Create Forms & Input category and reorganize catalog structure - Enhance KeyframesPage with timing functions, animation properties, multi-step keyframes, and combined animations - Update TransitionsPage styling and examples 🤖 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.
|
WalkthroughThis PR updates project licenses from GPL v3/AGPL/MIT/ISC to Apache 2.0 across package manifests, source file headers, and LICENSE files. Additionally, it reorganizes use_cases application pages with UI restructuring, accessibility enhancements, and content additions to multiple demo pages. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Areas requiring extra attention:
Possibly related PRs
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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 (4)
use_cases/src/pages/css/TransitionsPage.tsx (2)
10-10: Remove unused state variables.The state variables
slow(line 10),g1(line 39), andf1(line 42) are declared but never used in the active code. The first two are only referenced in commented-out sections.Apply this diff to remove unused state:
- const [slow, setSlow] = useState(false);- // Group/child translation - const [g1, setG1] = useState(false); - - // Filters and shadow - const [f1, setF1] = useState(false); + // Filters and shadowAlso applies to: 39-39, 42-42
56-64: Add keyboard accessibility to interactive demo tiles.These interactive demo tiles use
<div onClick={...}>without keyboard support or semantic button elements, preventing keyboard-only users from interacting with the examples.Consider wrapping the interactive divs in button elements or adding proper keyboard handlers:
<div className="bg-surface-secondary border border-line rounded-xl p-4 w-full md:w-[280px]"> - <div onClick={() => setB1(v => !v)} className={[ 'w-20 h-20 bg-blue-300 rounded transition-[transform,background-color] duration-300 ease-in-out cursor-pointer', b1 ? '-translate-y-2 scale-105 bg-blue-400' : '' ].join(' ')} /> + <button onClick={() => setB1(v => !v)} className="bg-transparent border-0 p-0"> + <div className={[ 'w-20 h-20 bg-blue-300 rounded transition-[transform,background-color] duration-300 ease-in-out cursor-pointer', b1 ? '-translate-y-2 scale-105 bg-blue-400' : '' ].join(' ')} /> + </button> <div className="text-sm text-fg-secondary mt-2">Click square to toggle transform and bg-color.</div> </div>Apply similar changes to the opacity tile on lines 61-64.
use_cases/src/pages/cupertino/CupertinoIconsPage.tsx (1)
290-304: Fix responsive flex item widths to account for gaps.The search results use fixed percentage widths (
w-1/3 md:w-1/4 lg:w-1/6) withgap-3, but these widths don't account for the gap spacing. At each breakpoint, the total width of items plus gaps exceeds 100%, causing unintended wrapping.Use responsive flex-basis with gap-adjusted calculations:
<div key={iconName} - className="flex flex-col items-center gap-2 p-3 rounded-lg hover:bg-surface-tertiary transition-colors cursor-pointer w-1/3 md:w-1/4 lg:w-1/6" + className="flex flex-col items-center gap-2 p-3 rounded-lg hover:bg-surface-tertiary transition-colors cursor-pointer flex-[0_0_calc(33.333%-0.5rem)] md:flex-[0_0_calc(25%-0.563rem)] lg:flex-[0_0_calc(16.666%-0.625rem)]" title={iconName} >The calc values account for the gaps:
- Mobile (3 cols, 2 gaps):
33.333% - (2/3 × 0.75rem)=33.333% - 0.5rem- md (4 cols, 3 gaps):
25% - (3/4 × 0.75rem)=25% - 0.563rem- lg (6 cols, 5 gaps):
16.666% - (5/6 × 0.75rem)=16.666% - 0.625remwebf_cupertino_ui/lib/src/modal_popup.dart (1)
204-219: Fix potential crash when there are no popup children
_buildPopupContentcurrently does:
- Line 206:
var node = widgetElement.childNodes.first;- Line 207: checks
widgetElement.childNodes.isEmpty.If
childNodesis empty, Line 206 will throw aRangeErrorbefore theisEmptyguard can run, andnodeis not used at all. This contradicts the intent to safely handle the empty case with aSizedBox.shrink().Recommend removing the premature
.firstaccess and relying solely on the emptiness check:- Widget _buildPopupContent(BuildContext dialogContext) { - Widget child; - var node = widgetElement.childNodes.first; - if (widgetElement.childNodes.isEmpty) { - child = const SizedBox.shrink(); - } else { + Widget _buildPopupContent(BuildContext dialogContext) { + Widget child; + if (widgetElement.childNodes.isEmpty) { + child = const SizedBox.shrink(); + } else { child = WebFWidgetElementChild( child: WebFHTMLElement( tagName: 'BUG', controller: widgetElement.ownerDocument.controller, parentElement: widgetElement, children: widgetElement.childNodes.toWidgetList(), ), ); }This both eliminates the unused
nodevariable and ensures an empty popup element doesn’t crash the widget tree.
🧹 Nitpick comments (7)
use_cases/src/pages/css/InlineFormattingPage.tsx (1)
145-188: Consider addinglangattributes and tightening the Arabic/Hebrew labelingTo improve screen‑reader behavior and i18n clarity:
- Mark pure Arabic content and Arabic inline spans with
lang="ar"so assistive tech uses the correct voice.- The label “Arabic/Hebrew” (Line 145) currently shows only Arabic; either adjust the label or add a short Hebrew snippet to match.
For example:
- <div className="text-xs text-fg-secondary mb-2">RTL (Right-to-Left) - Arabic/Hebrew</div> + <div className="text-xs text-fg-secondary mb-2">RTL (Right-to-Left) - Arabic</div> - <p className="text-[16px] bg-blue-50 p-2 rounded" dir="rtl"> + <p className="text-[16px] bg-blue-50 p-2 rounded" dir="rtl" lang="ar"> هذا نص عربي يتدفق من اليمين إلى اليسار </p> ... - <p className="text-[16px] bg-blue-50 p-2 rounded" dir="rtl"> - This is English mixed with عربي (Arabic) and numbers 123. - </p> + <p className="text-[16px] bg-blue-50 p-2 rounded" dir="rtl"> + This is English mixed with <span lang="ar">عربي</span> (Arabic) and numbers 123. + </p> ... - <span className="bg-yellow-200 px-1">مرحبا</span> بك في + <span className="bg-yellow-200 px-1" lang="ar">مرحبا</span> بك في ... - <span className="bg-green-200 px-1">اختبار RTL</span> + <span className="bg-green-200 px-1" lang="ar">اختبار RTL</span>You could similarly add
lang="ar"to the alignment and inline‑block RTL paragraphs if you want full coverage.use_cases/src/pages/css/DisplayFlowPage.tsx (3)
31-58: Solid “More display values” examples; only tiny copy/layout nitsThe table and
display: contentsdemos are clear and consistent with the rest of the page; structure and classes look fine. One optional clarity tweak: the helper text fordisplay: contentscould explicitly mention that the wrapper’s children become direct flex items of the pink border container, to tie it back to what users see.
81-94: Normal-flow section is correct; consider aligning labels with actual display modeThe block vs “inline” contrast is implemented with
blockandinline-blockclasses (for better box visibility), which is technically accurate but the pill labels say “Inline 1/2/3”. To avoid confusing learners, you might either rename the labels to “Inline-block 1/2/3” or switch the spans toinlineand adjust padding/visuals.
95-118: Width/height behavior block looks good; optional responsiveness tweakThe three sub-examples correctly illustrate block vs inline vs inline-block sizing. On very narrow screens, the fixed
width: '200px'spans might cause horizontal overflow; if that’s undesirable, you could addmax-w-full(or similar) to keep them within the container.use_cases/src/pages/css/KeyframesPage.tsx (1)
254-290: Good inline keyframe definitions; consider placement for render optimization.The inline
<style>block correctly defines all custom keyframes used throughout the page. However, placing it at the end of the JSX means it's parsed after the animated elements are rendered, which could cause a brief flash of unstyled animations on initial load.Consider moving the
<style>block to the beginning of the JSX (right after the opening<div>), or extracting these keyframes to a CSS file that's imported at the top:return ( <div id="main" className="min-h-screen w-full bg-surface"> + <style>{` + @keyframes slide { ... } + /* ... other keyframes ... */ + `}</style> <WebFListView className="w-full px-3 md:px-6 max-w-5xl mx-auto py-6"> ... </WebFListView> - <style>{`...`}</style> </div> );use_cases/src/pages/cupertino/CupertinoTabsPage.tsx (1)
152-169: Consider removing redundant nested overflow containers.The Chat tab has
overflow-autoon both the outer container (line 152) and the inner messages list (line 155). Nested scrollable regions can create UX confusion with nested scroll events and potential double scrollbars. Since the outer container already hash-full overflow-auto, the inneroverflow-autoon line 155 is likely unnecessary.Apply this diff to simplify the scroll hierarchy:
- <div className="space-y-2 overflow-auto"> + <div className="space-y-2">webf_cupertino_ui/lib/src/list_section.dart (1)
97-110: Deduplicate margin computation logicThe margin computation for
useInsetGrouped == truevsfalseis currently identical, so the outerif (useInsetGrouped)adds complexity without changing behavior. You can simplify this block while preserving semantics:- EdgeInsetsGeometry? margin; - if (useInsetGrouped) { - if (styleMargin != EdgeInsets.zero) { - margin = styleMargin; - } else { - margin = null; - } - } else { - if (styleMargin != EdgeInsets.zero) { - margin = styleMargin; - } else { - margin = null; - } - } + EdgeInsetsGeometry? margin; + if (styleMargin != EdgeInsets.zero) { + margin = styleMargin; + } else { + margin = null; + }Down below,
marginis already handled differently for inset vs non‑inset variants, so this refactor is behavior‑preserving and reduces duplication.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (52)
cli/package.json(1 hunks)packages/react-core-ui/package.json(1 hunks)packages/vue-core-ui/package.json(1 hunks)packages/vue-cupertino-ui/package.json(1 hunks)packages/webf-deeplink/package.json(1 hunks)packages/webf-share/package.json(1 hunks)use_cases/src/App.tsx(2 hunks)use_cases/src/pages/AccessibilityPage.tsx(2 hunks)use_cases/src/pages/AnimationPage.module.css(0 hunks)use_cases/src/pages/AnimationPage.tsx(1 hunks)use_cases/src/pages/FeatureCatalogPage.tsx(1 hunks)use_cases/src/pages/GesturePage.tsx(6 hunks)use_cases/src/pages/css/DisplayFlowPage.tsx(2 hunks)use_cases/src/pages/css/InlineFormattingPage.tsx(1 hunks)use_cases/src/pages/css/KeyframesPage.tsx(1 hunks)use_cases/src/pages/css/TransitionsPage.tsx(2 hunks)use_cases/src/pages/cupertino/CupertinoIconsPage.tsx(2 hunks)use_cases/src/pages/cupertino/CupertinoTabsPage.tsx(2 hunks)webf_cupertino_ui/lib/src/action_sheet.dart(1 hunks)webf_cupertino_ui/lib/src/alert.dart(1 hunks)webf_cupertino_ui/lib/src/button.dart(1 hunks)webf_cupertino_ui/lib/src/checkbox.d.ts(1 hunks)webf_cupertino_ui/lib/src/checkbox.dart(1 hunks)webf_cupertino_ui/lib/src/context_menu.dart(1 hunks)webf_cupertino_ui/lib/src/date_picker.dart(1 hunks)webf_cupertino_ui/lib/src/form_section.dart(1 hunks)webf_cupertino_ui/lib/src/icon.dart(1 hunks)webf_cupertino_ui/lib/src/input.dart(1 hunks)webf_cupertino_ui/lib/src/list_section.d.ts(1 hunks)webf_cupertino_ui/lib/src/list_section.dart(1 hunks)webf_cupertino_ui/lib/src/list_tile.d.ts(1 hunks)webf_cupertino_ui/lib/src/list_tile.dart(1 hunks)webf_cupertino_ui/lib/src/modal_popup.dart(1 hunks)webf_cupertino_ui/lib/src/radio.d.ts(1 hunks)webf_cupertino_ui/lib/src/radio.dart(1 hunks)webf_cupertino_ui/lib/src/search_text_field.dart(1 hunks)webf_cupertino_ui/lib/src/slider.d.ts(1 hunks)webf_cupertino_ui/lib/src/slider.dart(1 hunks)webf_cupertino_ui/lib/src/sliding-segmented-control.d.ts(1 hunks)webf_cupertino_ui/lib/src/sliding_segmented_control.dart(1 hunks)webf_cupertino_ui/lib/src/switch.d.ts(1 hunks)webf_cupertino_ui/lib/src/switch.dart(1 hunks)webf_cupertino_ui/lib/src/tab-scaffold.d.ts(1 hunks)webf_cupertino_ui/lib/src/tab-view.d.ts(1 hunks)webf_cupertino_ui/lib/src/tab.d.ts(1 hunks)webf_cupertino_ui/lib/src/tab_bar.d.ts(1 hunks)webf_cupertino_ui/lib/src/tab_bar.dart(1 hunks)webf_cupertino_ui/lib/src/tab_scaffold.dart(1 hunks)webf_cupertino_ui/lib/src/tab_view.dart(1 hunks)webf_cupertino_ui/lib/src/text_form_field_row.dart(1 hunks)webf_modules/deeplink/LICENSE(1 hunks)webf_modules/share/LICENSE(1 hunks)
💤 Files with no reviewable changes (1)
- use_cases/src/pages/AnimationPage.module.css
🧰 Additional context used
🧠 Learnings (8)
📓 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/**/*.{css,scss,vue} : Prefer CSS transforms for animations to improve performance
📚 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:
webf_cupertino_ui/lib/src/button.dartwebf_cupertino_ui/lib/src/sliding_segmented_control.dartwebf_cupertino_ui/lib/src/switch.dartwebf_cupertino_ui/lib/src/tab_view.dartwebf_cupertino_ui/lib/src/search_text_field.dartwebf_cupertino_ui/lib/src/form_section.dartwebf_cupertino_ui/lib/src/list_tile.dartwebf_cupertino_ui/lib/src/checkbox.dartwebf_cupertino_ui/lib/src/radio.dartwebf_cupertino_ui/lib/src/list_section.dartuse_cases/src/pages/cupertino/CupertinoTabsPage.tsxwebf_cupertino_ui/lib/src/icon.dartpackages/vue-cupertino-ui/package.jsonwebf_cupertino_ui/lib/src/date_picker.dartwebf_cupertino_ui/lib/src/tab-view.d.tswebf_cupertino_ui/lib/src/slider.dartwebf_cupertino_ui/lib/src/context_menu.dartwebf_cupertino_ui/lib/src/modal_popup.dartuse_cases/src/pages/FeatureCatalogPage.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/utils/**/tabBarManager.@(js|ts) : Maintain navigation state via the TabBarManager singleton
Applied to files:
webf_cupertino_ui/lib/src/tab_bar.d.tswebf_cupertino_ui/lib/src/tab.d.tsuse_cases/src/pages/cupertino/CupertinoTabsPage.tsxwebf_cupertino_ui/lib/src/tab-view.d.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:
webf_cupertino_ui/lib/src/list_tile.dartwebf_cupertino_ui/lib/src/checkbox.dartwebf_cupertino_ui/lib/src/radio.dartwebf_cupertino_ui/lib/src/context_menu.dartwebf_cupertino_ui/lib/src/modal_popup.dart
📚 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:
webf_cupertino_ui/lib/src/list_tile.dartwebf_cupertino_ui/lib/src/checkbox.dartwebf_cupertino_ui/lib/src/radio.dart
📚 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/cupertino/CupertinoTabsPage.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/**/*.{css,scss,vue} : Prefer CSS transforms for animations to improve performance
Applied to files:
use_cases/src/pages/cupertino/CupertinoTabsPage.tsxuse_cases/src/pages/AnimationPage.tsxuse_cases/src/pages/css/KeyframesPage.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/**/package.json : Do not include vue-router as a project dependency
Applied to files:
packages/vue-cupertino-ui/package.json
🧬 Code graph analysis (5)
use_cases/src/pages/AccessibilityPage.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/AccessibilityPage.tsx (1)
AccessibilityPage(25-384)
use_cases/src/pages/AnimationPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
WebFListView(168-202)
use_cases/src/pages/GesturePage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
WebFListView(168-202)
use_cases/src/pages/css/KeyframesPage.tsx (1)
packages/react-core-ui/src/lib/src/html/listview.tsx (1)
WebFListView(168-202)
⏰ 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-macos
- GitHub Check: build-ios
- GitHub Check: build-android
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Analyze (c-cpp)
- GitHub Check: Analyze (rust)
🔇 Additional comments (58)
webf_cupertino_ui/lib/src/list_tile.d.ts (1)
1-4: License header update approved.The Apache 2.0 license header replacement is correct and has no impact on the TypeScript type definitions. All interface declarations remain unchanged and properly documented.
webf_cupertino_ui/lib/src/switch.d.ts (1)
1-4: License header updated to Apache 2.0 — approved.The license header change is compliant with the PR's license migration objectives. No changes to the public API surface or type definitions.
use_cases/src/pages/css/InlineFormattingPage.tsx (1)
132-192: RTL demo block is well-structured and covers key bidi casesThe new RTL section is cohesive and pedagogical: it shows default LTR, pure RTL, mixed bidi, inline elements, alignment, and inline‑block ordering in a compact, consistent layout. This fits nicely with the rest of the page’s “explain then demonstrate” style.
use_cases/src/pages/AnimationPage.tsx (5)
1-10: LGTM on imports and state setup.Clean use of
useStatewith a record type for tracking multiple animation states. The toggle function pattern is appropriate for this use case.
11-15: Good semantic structure.Appropriate use of
WebFListViewas the scrollable container and proper heading hierarchy withh1for the page title.
17-87: Good use of CSS transforms for animations.The Fade, Slide, and Scale animations correctly use CSS transitions with
transition-opacity,transition-transform, and transform properties (translate-x,scale). This aligns with the best practice of preferring CSS transforms for better performance.
158-181: Combined animation uses appropriate transform properties.Good approach combining multiple transform properties (
translate-x-8,scale-110,rotate-[15deg]) withtransition-allfor smooth combined effects. The gradient color change adds a nice visual touch.
89-156: Perfect! I've found the verification results. All three custom animation classes are properly defined in the Tailwind configuration file.The
use_cases/tailwind.config.jsfile (lines 10-21) contains:
animate-spin-slow(line 18): References the built-inspinkeyframe with a 2s durationanimate-bounce-fast(line 19): References the built-inbouncekeyframe with a 0.6s durationanimate-pulse-scale(lines 11-15, 20): Has a custompulse-scalekeyframe defined with scale and opacity transforms, plus the animation definitionSince all the animation classes used in the AnimationPage.tsx file are correctly defined in the Tailwind config, the original review comment's concern is unfounded.
The custom animation classes are properly defined in the Tailwind config.
All three animation classes referenced in lines 98, 121, and 144 of AnimationPage.tsx (
animate-spin-slow,animate-bounce-fast, andanimate-pulse-scale) are correctly configured inuse_cases/tailwind.config.js(lines 18-20), including the custompulse-scalekeyframe definition (lines 11-15). The animations will work as expected.use_cases/src/pages/css/KeyframesPage.tsx (3)
1-10: Good page structure and semantic markup.Clean use of
WebFListViewas the container and appropriate heading hierarchy for the showcase page.
11-56: Good use of CSS transforms for animations.The keyframe animations properly leverage CSS transforms (
translateX,rotate,rotateY,scale) which are GPU-accelerated and provide smooth performance. This aligns with the best practice of preferring CSS transforms for animations. Based on learnings.Also applies to: 175-218
208-216: Nice 3D flip implementation.Good use of
transformStyle: 'preserve-3d'inline style to enable 3D transforms for the flip animation usingrotateY.use_cases/src/pages/css/TransitionsPage.tsx (3)
1-11: Clean component structure.The imports and initial setup are appropriate. The SectionHeader helper component provides good reusability for section titles.
65-68: Good use of semantic button element.The button color toggle example correctly uses a
<button>element, ensuring proper keyboard navigation and accessibility.
131-152: Existing width/height section demonstrates good practices.The accordion example on lines 137-151 correctly uses a semantic
<button>element for the toggle control, providing proper keyboard accessibility.use_cases/src/pages/cupertino/CupertinoTabsPage.tsx (1)
200-217: LGTM!The Music tab correctly adds scrolling with a single
overflow-autocontainer. The layout is clean and functional.use_cases/src/pages/cupertino/CupertinoIconsPage.tsx (1)
99-114: LGTM!The popular icons section correctly uses
flex flex-wrap gap-4without fixed widths, allowing items to size naturally based on content. This approach avoids layout issues with gaps.use_cases/src/pages/GesturePage.tsx (1)
1-289: LGTM! Clean refactor from CSS modules to Tailwind.The gesture page has been successfully refactored from CSS modules to inline Tailwind classes. The changes maintain functional parity while improving maintainability:
- Event handlers correctly destructure gesture data
- State management preserved with cleaner object literal formatting
- UI structure reorganized with responsive Tailwind utilities
- All gesture types (tap, pan, scale, rotate) remain properly wired
The new layout provides better visual hierarchy and real-time feedback for gesture interactions.
use_cases/src/App.tsx (1)
11-11: LGTM! Accessibility page properly registered.The AccessibilityPage import and route registration are correctly implemented. The route path
/accessibilityand title "Accessibility Use Cases" align with the component's purpose and the overall PR objectives.Also applies to: 127-127
use_cases/src/pages/AccessibilityPage.tsx (1)
144-146: LGTM! Excellent accessibility enhancements.The ARIA improvements properly connect page landmarks:
- The page title now has an
idthat labels the main content region viaaria-labelledby- The live region has a clear
aria-labelfor announcement context- These changes follow WCAG best practices and improve the screen reader experience
The semantic relationships between landmarks are now explicit and discoverable.
Also applies to: 154-159, 371-377
use_cases/src/pages/FeatureCatalogPage.tsx (1)
92-130: LGTM! Catalog structure aligns with PR objectives.The feature catalog reorganization correctly reflects the PR changes:
- Cupertino UI consolidated to a single showcase entry
- New Gestures section added for FlutterGestureDetector
- Accessibility route registered in App.tsx but catalog entry kept commented (as noted in PR summary)
- Forms & Input and Others sections restructured for better organization
The catalog provides clear navigation paths to all active feature pages.
webf_cupertino_ui/lib/src/radio.dart (1)
1-4: License header change looks consistentLine 3 updating the header to “Licensed under the Apache License, Version 2.0.” aligns with the rest of the Cupertino UI package; no functional impact on
FlutterCupertinoRadio.webf_cupertino_ui/lib/src/text_form_field_row.dart (1)
1-4: Apache 2.0 license header applied correctlyLine 3’s Apache 2.0 header matches the project’s updated licensing; no behavioral changes to the text form field row widget.
webf_cupertino_ui/lib/src/tab-view.d.ts (1)
1-4: Type definition header updated to Apache 2.0License header on Line 3 is now Apache 2.0 and is consistent with the implementation file; no changes to the TS interface surface.
webf_cupertino_ui/lib/src/tab.d.ts (1)
1-4: Header license switch is correctThe Line 3 change to Apache 2.0 is consistent with other Cupertino typings; no impact on
FlutterCupertinoTabBarItemPropertiesor events.webf_cupertino_ui/lib/src/radio.d.ts (1)
1-4: DTS header now matches Apache 2.0 migrationLine 3’s Apache 2.0 header aligns with the Dart
radio.dartfile; typings for radio properties/events remain intact.webf_cupertino_ui/lib/src/context_menu.dart (1)
1-4: Context menu file correctly re-licensedUpdating Line 3 to Apache 2.0 matches the rest of the module; the
FlutterCupertinoContextMenubehavior is unaffected.webf_cupertino_ui/lib/src/modal_popup.dart (1)
1-4: Modal popup header updated to Apache 2.0Line 3’s Apache 2.0 header is consistent with the other Cupertino files; implementation of
FlutterCupertinoModalPopupis unchanged.webf_cupertino_ui/lib/src/list_tile.dart (1)
1-4: List tile source re-licensed without behavioral changesLine 3’s Apache 2.0 license header is consistent with other Cupertino components;
FlutterCupertinoListTileand its slot elements remain functionally identical.webf_cupertino_ui/lib/src/icon.dart (1)
3-3: LGTM! License header updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
webf_cupertino_ui/lib/src/checkbox.dart (1)
3-3: LGTM! License header updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
webf_cupertino_ui/lib/src/tab_view.dart (1)
3-3: LGTM! License header updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
webf_cupertino_ui/lib/src/checkbox.d.ts (1)
3-3: LGTM! License header updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
webf_cupertino_ui/lib/src/switch.dart (1)
3-3: LGTM! License header updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
webf_cupertino_ui/lib/src/tab_scaffold.dart (1)
3-3: LGTM! License header updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
packages/vue-core-ui/package.json (1)
12-12: LGTM! License field updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
webf_cupertino_ui/lib/src/sliding_segmented_control.dart (1)
3-3: LGTM! License header updated to Apache-2.0.This administrative change aligns with the repository-wide license harmonization effort.
webf_cupertino_ui/lib/src/tab_bar.dart (1)
1-4: License update looks good.The license header change from GNU AGPL to Apache License 2.0 is consistent with the broader license harmonization effort across the repository.
webf_cupertino_ui/lib/src/tab_bar.d.ts (1)
1-4: License update looks good.Consistent with the license harmonization to Apache 2.0 across the codebase.
packages/webf-share/package.json (1)
26-26: License field update looks good.The SPDX identifier
Apache-2.0is correct and consistent with the license harmonization across other packages in this PR.webf_cupertino_ui/lib/src/slider.dart (1)
1-4: License update looks good.Consistent with the Apache 2.0 license harmonization across the webf_cupertino_ui package.
webf_cupertino_ui/lib/src/button.dart (1)
1-4: License update looks good.Consistent with the Apache 2.0 license harmonization across the repository.
webf_cupertino_ui/lib/src/sliding-segmented-control.d.ts (1)
1-4: License header updated; typings unaffectedHeader change to Apache License 2.0 looks consistent with the rest of the Cupertino UI package, and no public interfaces or event typings are modified here. Nothing to block from an engineering perspective.
webf_cupertino_ui/lib/src/tab-scaffold.d.ts (1)
1-4: Tab scaffold declaration: license-only changeThe switch to Apache License 2.0 in the header is consistent with other files, and the tab scaffold props/events declarations remain unchanged. No engineering concerns here.
webf_cupertino_ui/lib/src/input.dart (1)
1-4: Cupertino input: header migrated, implementation unchangedThis file only updates the license header to Apache 2.0; the Cupertino input wrapper logic (bindings, focus/blur/clear, controller sync, maxLength, type handling, slots) is unchanged and remains internally consistent. No changes requested here.
webf_cupertino_ui/lib/src/form_section.dart (1)
1-4: Form section: license header onlyThe transition to Apache License 2.0 in the header doesn’t affect the Cupertino form section behavior or API surface. Implementation remains the same and looks fine.
webf_cupertino_ui/lib/src/list_section.dart (1)
1-4: List section: header migrated to Apache 2.0Only the license header is adjusted here; the Cupertino list section wrapper and its header/footer helpers remain exactly as before. No engineering issues from this change.
webf_cupertino_ui/lib/src/slider.d.ts (1)
1-4: Slider typings: license-only changeUpdating the header to Apache License 2.0 doesn’t alter any of the slider property/method/event typings. Looks good from the type declaration standpoint.
webf_cupertino_ui/lib/src/action_sheet.dart (1)
1-4: Action sheet: Apache header, same behaviorOnly the license header text has changed; the ActionSheet element’s show logic, config parsing, and event dispatching are untouched. No issues from an engineering side.
webf_cupertino_ui/lib/src/date_picker.dart (1)
1-4: Date picker: header migration onlyThe only change here is the move to an Apache 2.0 license header; the Cupertino date picker wrapper logic and public bindings are unchanged and remain consistent.
cli/package.json (1)
27-27: License field updated to Apache-2.0SPDX identifier is correct; metadata-only change with no runtime impact.
webf_cupertino_ui/lib/src/list_section.d.ts (1)
3-3: Type declaration header switched to Apache-2.0Header text aligns with the new project license; no impact on the exported interfaces.
webf_cupertino_ui/lib/src/alert.dart (1)
3-3: Alert widget license header updatedApache-2.0 header looks correct; no functional or API changes in this file.
webf_cupertino_ui/lib/src/search_text_field.dart (1)
3-3: Search text field header moved to Apache-2.0License header update is consistent with the rest of the package; no code or API impact.
packages/vue-cupertino-ui/package.json (1)
12-12: vue-cupertino-ui package.json license aligned to Apache-2.0SPDX license string is valid; no changes to dependencies or runtime configuration.
packages/webf-deeplink/package.json (1)
25-25: webf-deeplink package license updatedPackage now correctly advertises Apache-2.0; aligns with the deeplink module LICENSE and has no behavioral effect.
packages/react-core-ui/package.json (1)
16-16: react-core-ui package.json license set to Apache-2.0License metadata now matches the rest of the project; no impact on build or runtime.
webf_modules/deeplink/LICENSE (1)
1-176: Deeplink module relicensed to Apache-2.0Full Apache License 2.0 text is present and matches the package.json license; no code or API behavior involved here.
webf_modules/share/LICENSE (1)
1-177: Verify: License change scope and documentation alignment.The entire LICENSE file has been replaced with Apache License 2.0 text, but the PR objectives describe UI fixes (grid-to-flexbox refactoring, AnimationPage rebuild, accessibility improvements) without explicitly mentioning license updates. The AI summary confirms a broader license migration across the project (GPL v3/AGPL → Apache 2.0), but this disconnect warrants clarification.
Key concerns:
- Is this license change intentional and part of this PR's actual scope, or was it included accidentally?
- Have all other project files been updated consistently with the new Apache 2.0 license?
- Is there a companion RFC, issue, or release notes documenting the license migration?
Verify and confirm the license change is intentional before merging. Consider ensuring the PR title, objectives, and commit messages clearly document this breaking license change.
Summary: Migrate WebF packages and Cupertino source headers to Apache-2.0 licensing, enhance CSS use case pages and navigation, refine Cupertino layouts (removing remaining grid usage), and rebuild the animation and accessibility demos.
Licensing changes: Update license fields in cli and package.json files to Apache-2.0, switch WebF Cupertino UI Dart and TypeScript headers to Apache-2.0, and replace webf_modules deeplink and share LICENSE files with the Apache 2.0 text.
Use cases and navigation: Expand and reorganize CSS showcases in DisplayFlowPage, KeyframesPage, TransitionsPage, and InlineFormattingPage, improve the GesturePage examples, and tweak FeatureCatalogPage groupings including RTL related entries.
Cupertino and animation: Remove grid based layouts from the Cupertino icons search and tab photo gallery, ensure tab bodies use scrollable containers, and replace the CSS module based AnimationPage with a self contained React implementation using utility classes.