CLAUDE.md · UI5/webcomponents-react
CLAUDE.md from UI5/webcomponents-react: 428 lines covering Overview, Critical: Working with Web Components, Core Architecture, Working in This Repo and more.
Template by UI5
Chalk Labs
Need help deploying CLAUDE.md · UI5/webcomponents-react?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code. Read the repository before you give any tool access to your data.
curl -fsSL https://raw.githubusercontent.com/UI5/webcomponents-react/main/CLAUDE.md -o CLAUDE.md
Read it and adapt it to your project before use.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: prompt-engineering, frontend-development
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
What's in it
A CLAUDE.md file: project memory Claude Code loads at the start of every session.
- For
- Claude Code
- Length
- 428 lines
- File
CLAUDE.md
Sections
- Overview
- Critical: Working with Web Components
- Core Architecture
- Working in This Repo
- Tests
- Stories (Storybook)
- TypeScript Patterns
- Internationalization
- Breaking Changes
- Accessibility
- Abstract Components
First lines (shown under the repo's Apache-2.0 license)
# CLAUDE.md
This file provides guidance to Claude Code when working with code in this repository.
## Overview
UI5 Web Components for React is a React wrapper library for SAP's UI5 Web Components. It provides Fiori-compliant React components by wrapping native UI5 Web Components with React-specific implementations. The project is a monorepo managed with Lerna and Yarn workspaces.
## Critical: Working with Web Components
### Event Handling (MUST KNOW)
Web components emit **CustomEvents** with data in the `detail` property:
```tsx
// ❌ WRONG - won't work with web components
const handleChange = (e) => {
console.log(e.selectedOption); // undefined!
console.log(e.value); // undefined!
};
// ✅ CORRECT - access via e.detail
const handleChange = (e) => {
console.log(e.detail.selectedOption);
console.log(e.detail.value);
};
```
For enriching events with additional data (internal use):
```tsx
import { enrichEventWithDetails } from '@ui5/webcomponents-react-base/internal/utils';
onLoadMore(enrichEventWithDetails(e, { rowCount, totalRowCount }));
```
### Controlled Components (MUST KNOW)
UI5 Web Components update internal state **before** firing events. For fully controlled components, call `e.preventDefault()` in the handler to prevent internal state updates (e.g., `Input.onInput`, `CheckBox.onChange`, `Select.onChange`, `Dialog.onBeforeClose`).
### Ref Handling (MUST KNOW)
When a component needs **both** a forwarded ref and internal access to the same DOM node, use `useSyncRef()` instead of `useRef()`:
```tsx
import { useSyncRef } from '@ui5/webcomponents-react-base/internal/hooks';
const MyComponent = forwardRef((props, ref) => {
const [componentRef, internalRef] = useSyncRef(ref);
useEffect(() => {
// internalRef gives stable access to the DOM node inside the component
internalRef.current?.focus();
}, []);
// componentRef is passed to the DOM element so both the forwarded ref and internalRef stay in sync
return <div ref={componentRef} />;
});
```
If the ref is just passed through without internal usage, forward it directly - no `useSyncRef` needed.
### Slot Props (MUST KNOW)
When passing custom React components to slot props, they **must forward the `slot` prop**:
```tsx
// ❌ WRONG - slot won't render correctly
const CustomHeader = ({ children }) => <div>{children}</div>;
// ✅ CORRECT - forwards slot prop to root element
const CustomHeader = ({ children, slot }) => <div slot={slot}>{children}</div>;
// Usage
<Dialog header={<CustomHeader>Title</CustomHeader>} />;
```
**Note:** React Portals are NOT supported in slot props (will log warning).
### CSS and Shadow DOM Styling
Web component internals are in Shadow DOM. Use `::part()` pseudo-element:
```css
/* ❌ WRONG - can't pierce shadow DOM */
.myButton button {
background: red;
}
/* ✅ CORRECT - use ::part() for shadow DOM */
.myCheckbox::part(root) {
display: flex;
width: unset;
}
.actionSheet::part(content) {
padding: 0.1875rem 0.375rem;
}
```
Use SAP CSS variables directly:
```css
.myComponent {
background: var(--sapBackgroundColor);
color: var(--sapTextColor);
border-radius: var(--sapElement_BorderCornerRadius);
font-family: var(--sapFontFamily);
/* Semantic colors */
--success: var(--sapPositiveColor);
--error: var(--sapNegativeColor);
--warning: var(--sapCriticalColor);
--info: var(--sapInformativeColor);
}
```
Internal component variables use `--_ui5wcr*` prefix:
```tsx
const style = {
'--_ui5wcr-AnalyticalTableRowHeight': `${rowHeight}px`,
} as CSSProperties;
```
### SSR Compatibility
Components must work in both SPA and SSR environments. Wrappers use `suppressHydrationWarning` because web component internal state doesn't serialize consistently.
### CSS Modules
Component styles use CSS Modules (`.module.css` files). The corresponding `.css.ts` files are **auto-generated** by the build system and **gitignored** (`src/**/*.css.ts` in each package's `.gitignore`). Never create or edit `.css.ts` files manually — only create the `.module.css` source file.
## Core Architecture
### Base Package Imports
The `@ui5/webcomponents-react-base` package uses subpath exports. Always use the specific subpath, not the root import:
```tsx
// ❌ WRONG - don't use root import
import { useSyncRef } from '@ui5/webcomponents-react-base';
// ✅ CORRECT - use subpath exports
import { useI18nBundle, useViewportRange } from '@ui5/webcomponents-react-base/hooks';
import {
useSyncRef,
useStylesheet,
useIsRTL,
useIsomorphicLayoutEffect,
useCurrentTheme,
} from '@ui5/webcomponents-react-base/internal/hooks';
import { debounce, throttle, enrichEventWithDetails } from '@ui5/webcomponents-react-base/internal/utils';
import { Device } from '@ui5/webcomponents-react-base/Device';
```
**Available subpath exports:**
- `./hooks` - Public hooks: `useI18nBundle`, `useViewportRange`
- `./internal/hooks` - Internal hooks: `useSyncRef`, `useStylesheet`, `useIsRTL`, `useIsomorphicLayoutEffect`, `useCurrentTheme`Signals
- Stars
- 543
- Forks
- 114
- Open issues
- 9
- Contributors
- 53
- Last commit (this folder)
- Oct 1, 2026 (1 month ago)
- Last release
- Oct 22, 2026 (8 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/UI5/webcomponents-react
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from UI5
- 0.687score
Webcomponents React MCP Server
UI5
MCP server for UI5 Web Components for React - Developer documentation and API assistance
ConnectorAFreshness: ARemoteLocalRead-only★ 543Claude Code +5 - 0.663score
UI5/mcp-server
UI5
MCP server for SAPUI5/OpenUI5 development
ConnectorAFreshness: ALocal★ 104Claude Code +5 - 0.484score
Webcomponents MCP Server
UI5
MCP server for UI5 Web Components development assistance
ConnectorDFreshness: DLocal★ 20Claude Code +5
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get CLAUDE.md · UI5/webcomponents-react running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
CLAUDE.md · UI5/webcomponents-react. Agent Mart. https://agentmart.dev/templates/ui5-webcomponents-react-claude-md (last updated 2026-10-24)