@@ -24,7 +24,7 @@ type MyComponentProps = {
2424};
2525
2626export const MyComponent = Shade<MyComponentProps>({
27- shadowDomName : 'my-component',
27+ customElementName : 'my-component',
2828 render: ({ props, injector }) => {
2929 return (
3030 <div>
@@ -42,15 +42,15 @@ Always provide a unique `shadowDomName` in kebab-case:
4242
4343```typescript
4444// ✅ Good - unique, descriptive kebab-case names
45- shadowDomName : 'shade-app-layout'
46- shadowDomName : 'shade-login'
47- shadowDomName : 'theme-switch'
48- shadowDomName : 'github-logo'
45+ customElementName : 'shade-app-layout'
46+ customElementName : 'shade-login'
47+ customElementName : 'theme-switch'
48+ customElementName : 'github-logo'
4949
5050// ❌ Avoid - generic or poorly named
51- shadowDomName : 'my-component'
52- shadowDomName : 'div'
53- shadowDomName : 'Component1'
51+ customElementName : 'my-component'
52+ customElementName : 'div'
53+ customElementName : 'Component1'
5454```
5555
5656## Render Function Parameters
@@ -79,11 +79,11 @@ Get service instances using the injector:
7979
8080```typescript
8181export const MyComponent = Shade({
82- shadowDomName : 'my-component',
82+ customElementName : 'my-component',
8383 render: ({ injector }) => {
8484 const themeProvider = injector.getInstance(ThemeProviderService);
8585 const sessionService = injector.getInstance(SessionService);
86-
86+
8787 return (
8888 <div style={{ backgroundColor: themeProvider.theme.background.default }}>
8989 {/* Component content */}
@@ -101,10 +101,10 @@ Use `useState` for component-local state:
101101
102102```typescript
103103export const Counter = Shade({
104- shadowDomName : 'app-counter',
104+ customElementName : 'app-counter',
105105 render: ({ useState }) => {
106106 const [count, setCount] = useState<number>('count', 0);
107-
107+
108108 return (
109109 <div>
110110 <span>Count: {count}</span>
@@ -121,22 +121,22 @@ Subscribe to `ObservableValue` from services:
121121
122122```typescript
123123export const UserStatus = Shade({
124- shadowDomName : 'user-status',
124+ customElementName : 'user-status',
125125 render: ({ injector, useObservable }) => {
126126 const sessionService = injector.getInstance(SessionService);
127-
127+
128128 // Subscribe to observable values
129129 const [isOperationInProgress] = useObservable(
130130 'isOperationInProgress',
131131 sessionService.isOperationInProgress
132132 );
133133 const [currentUser] = useObservable('currentUser', sessionService.currentUser);
134134 const [state] = useObservable('state', sessionService.state);
135-
135+
136136 if (isOperationInProgress) {
137137 return <div>Loading...</div>;
138138 }
139-
139+
140140 return (
141141 <div>
142142 {currentUser ? `Welcome, ${currentUser.username}` : 'Not logged in'}
@@ -154,18 +154,18 @@ Properly manage subscriptions and resources:
154154
155155```typescript
156156export const ThemeSwitch = Shade({
157- shadowDomName : 'theme-switch',
157+ customElementName : 'theme-switch',
158158 render: ({ injector, useState, useDisposable }) => {
159159 const themeProvider = injector.getInstance(ThemeProviderService);
160160 const [theme, setTheme] = useState<'light' | 'dark'>('theme', 'dark');
161-
161+
162162 // Subscribe to theme changes with automatic cleanup
163163 useDisposable('traceThemeChange', () =>
164164 themeProvider.subscribe('themeChanged', (newTheme) => {
165165 setTheme(newTheme.name === 'dark' ? 'dark' : 'light');
166166 }),
167167 );
168-
168+
169169 return <button>{theme === 'dark' ? '☀️' : '🌜'}</button>;
170170 },
171171});
@@ -188,10 +188,10 @@ import {
188188} from '@furystack/shades-common-components';
189189
190190export const LoginForm = Shade({
191- shadowDomName : 'login-form',
191+ customElementName : 'login-form',
192192 render: ({ injector }) => {
193193 const sessionService = injector.getInstance(SessionService);
194-
194+
195195 return (
196196 <Paper elevation={3}>
197197 <Form<{ username: string; password: string }>
@@ -312,10 +312,10 @@ Use `ThemeProviderService` for consistent theming:
312312
313313```typescript
314314export const ThemedComponent = Shade({
315- shadowDomName : 'themed-component',
315+ customElementName : 'themed-component',
316316 render: ({ injector }) => {
317317 const theme = injector.getInstance(ThemeProviderService).theme;
318-
318+
319319 return (
320320 <div
321321 style={{
@@ -336,13 +336,11 @@ export const ThemedComponent = Shade({
336336Allow users to switch between themes:
337337
338338```typescript
339- import { defaultDarkTheme, defaultLightTheme } from '@furystack/shades-common-components';
339+ import { defaultDarkTheme, defaultLightTheme } from '@furystack/shades-common-components'
340340
341341const toggleTheme = (themeProvider: ThemeProviderService, currentTheme: 'light' | 'dark') => {
342- themeProvider.setAssignedTheme(
343- currentTheme === 'dark' ? defaultLightTheme : defaultDarkTheme
344- );
345- };
342+ themeProvider.setAssignedTheme(currentTheme === 'dark' ? defaultLightTheme : defaultDarkTheme)
343+ }
346344```
347345
348346## Page Components
@@ -356,7 +354,7 @@ Place page components in `frontend/src/pages/`:
356354import { createComponent, Shade } from '@furystack/shades';
357355
358356export const Dashboard = Shade({
359- shadowDomName : 'page-dashboard',
357+ customElementName : 'page-dashboard',
360358 render: ({ injector }) => {
361359 return (
362360 <div>
@@ -374,9 +372,9 @@ Export pages from an index file:
374372
375373```typescript
376374// frontend/src/pages/index.ts
377- export * from './dashboard.js';
378- export * from './login.js';
379- export * from './hello-world.js';
375+ export * from './dashboard.js'
376+ export * from './login.js'
377+ export * from './hello-world.js'
380378```
381379
382380## Application Entry Point
0 commit comments