Skip to main content
rule official · GitHub

pcf-fluent-modern-theming — GitHub Copilot rule for Fluent UI themes

This rule shows how to style PCF components with an app’s modern theme. Use it with Fluent UI controls or custom elements that read theme tokens.

Install into GitHub Copilot · Manually: put the files in place All methods and platforms ↓
.github/instructions/pcf-fluent-modern-theming.instructions.md
Open on GitHub

What pcf-fluent-modern-theming does

The rule applies to ts, tsx, js, json, xml, pcfproj, and csproj files. It covers four options: Fluent UI v9, Fluent UI v8, custom non-Fluent elements that read theme tokens, and a separate theme supplied through FluentProvider.

For v9, the component needs a dependency on the React controls and platform libraries to share the platform’s React context. For v8, the rule uses createV8Theme from @fluentui/react-migration-v8-v9 to build a theme from v9 tokens. Portal-based v9 controls need a theme provider around them; otherwise, their styles may not be applied.

What it helps with

  • style a PCF component to match the app theme
  • connect Fluent UI v8 controls to v9 theme tokens
  • read theme tokens in a custom HTML element
  • give a component its own theme with FluentProvider
  • check whether modern theming is enabled

Example prompts for the agent

  • Style this PCF component with Fluent UI v9 and the app theme.
  • Adapt the app’s v9 theme for this Fluent UI v8 component.
  • Check whether this component can read modern theme tokens.

How to install pcf-fluent-modern-theming

Manually: put the files in place

.github/instructions/pcf-fluent-modern-theming.instructions.md

The applyTo field sets which files it applies to

Step by step, with commands for each platform: AGENTS.md vs CLAUDE.md: what they are and which one to use

Questions about pcf-fluent-modern-theming

How do I install pcf-fluent-modern-theming in GitHub Copilot?

Add .github/instructions/pcf-fluent-modern-theming.instructions.md to your project.

What does pcf-fluent-modern-theming do?

It guides styling PCF components with modern app themes, including Fluent UI v9 and v8, custom elements, and a separate FluentProvider theme.

What does a Fluent UI v9 component need?

It needs a dependency on the React controls and platform libraries to share the React context that carries theme tokens.

Source text

pcf-fluent-modern-theming.instructions.md · MIT
---
description: 'Style components with modern theming using Fluent UI'
applyTo: '**/*.{ts,tsx,js,json,xml,pcfproj,csproj}'
---

# Style Components with Modern Theming (Preview)

[This topic is pre-release documentation and is subject to change.]

Developers need to be able to style their components so they look like the rest of the application they're included in. They can do this when modern theming is in effect for either a canvas app (via the [Modern controls and themes](https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/overview-modern-controls) feature) or model-driven app (through the [new refreshed look](https://learn.microsoft.com/en-us/power-apps/user/modern-fluent-design)).

Use modern theming, which is based on [Fluent UI React v9](https://react.fluentui.dev/), to style your component. This approach is recommended to get the best performance and theming experience for your component.

## Four Ways to Apply Modern Theming

1. **Fluent UI v9 controls**
2. **Fluent UI v8 controls**
3. **Non-Fluent UI controls**
4. **Custom theme providers**

## Fluent UI v9 Controls

Wrapping Fluent UI v9 controls as a component is the easiest way to utilize modern theming because the modern theme is automatically applied to these controls. The only prerequisite is to ensure your component adds a dependency on the [React controls & platform libraries](https://learn.microsoft.com/en-us/power-apps/developer/component-framework/react-controls-platform-libraries).

This approach allows your component to use the same React and Fluent libraries as the platform, and therefore share the same React context that passes the theme tokens down to the component.

```xml
<resources>
  <code path="index.ts" order="1"/>
  <!-- Dependency on React controls & platform libraries -->
  <platform-library name="React" version="16.14.0" />
  <platform-library name="Fluent" version="9.46.2" />
</resources>
```

## Fluent UI v8 Controls

Fluent provides a migration path for applying v9 theme constructs when you use Fluent UI v8 controls in your component. Use the `createV8Theme` function included in the [Fluent's v8 to v9 migration package](https://www.npmjs.com/package/@fluentui/react-migration-v8-v9) to create a v8 theme based on v9 theme tokens:

```typescript
const theme = createV8Theme(
  context.fluentDesignLanguage.brand,
  context.fluentDesignLanguage.theme
);
return <ThemeProvider theme={theme}></ThemeProvider>;
```

## Non-Fluent UI Controls

If your component doesn't use Fluent UI, you can take a dependency directly on the v9 theme tokens available through the `fluentDesignLanguage` context parameter. Use this parameter to get access to all [theme](https://learn.microsoft.com/en-us/power-apps/developer/component-framework/reference/theming) tokens so it can reference any aspect of the theme to style itself.

```typescript
<span style={{ fontSize: context.fluentDesignLanguage.theme.fontSizeBase300 }}>
  {"Stylizing HTML with platform provided theme."}
</span>
```

## Custom Theme Providers

When your component requires styling that is different from the current theme of the app, create your own `FluentProvider` and pass your own set of theme tokens to be used by your component.

```typescript
<FluentProvider theme={context.fluentDesignLanguage.tokenTheme}>
  {/* your control */}
</FluentProvider>
```

## Sample Controls

Examples for each of these use cases are available at [Modern Theming API control](https://learn.microsoft.com/en-us/power-apps/developer/component-framework/sample-controls/modern-theming-api-control).

## FAQ

### Q: My control uses Fluent UI v9 and has a dependency on the platform libraries, but I don't want to utilize modern theming. How can I disable it for my component?

A: You can do this two different ways:

**Option 1**: Create your own component-level `FluentProvider`

```typescript
<FluentProvider theme={customFluentV9Theme}>
  {/* your control */}
</FluentProvider>
```

**Option 2**: Wrap your control inside `IdPrefixContext.Provider` and set your own `idPrefix` value. This prevents your component from getting theme tokens from the platform.

```typescript
<IdPrefixProvider value="custom-control-prefix">
  <Label weight="semibold">This label is not getting Modern Theming</Label>
</IdPrefixProvider>
```

### Q: Some of my Fluent UI v9 controls aren't getting styles

A: Fluent v9 controls that rely on the React Portal need to be rewrapped in the theme provider to ensure styling is properly applied. You can use `FluentProvider`.

### Q: How can I check if modern theming is enabled?

A: You can check if tokens are available: `context.fluentDesignLanguage?.tokenTheme`. Or in model-driven applications you can check app settings: `context.appSettings.getIsFluentThemingEnabled()`.

## Related Articles

- [Theming (Power Apps component framework API reference)](https://learn.microsoft.com/en-us/power-apps/developer/component-framework/reference/theming)
- [Modern Theming API control](https://learn.microsoft.com/en-us/power-apps/developer/component-framework/sample-controls/modern-theming-api-control)
- [Use modern themes in canvas apps (preview)](https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-theming)

© github · MIT · github/awesome-copilot

Topics and platforms

All IDE rules for Frontend and UI →

From the same set861

The whole set →
pcf-overview Guides GitHub Copilot on Power Apps Component Framework architecture. Helps generate code components for canvas and model-driven applications. ★ 40,418repo stars pcf-model-driven-apps Teaches GitHub Copilot how to build and update code components for model-driven apps. Applies to ts, tsx, js, json, xml, pcfproj and csproj files. ★ 40,418repo stars pcf-manifest-schema A rule that feeds Copilot the structure of ControlManifest.Input.xml: which elements and attributes exist and what they do. Useful when editing a PCF component manifest. ★ 40,418repo stars pcf-limitations Instructs GitHub Copilot on Power Apps Component Framework restrictions. It prevents unsupported API calls and insecure storage patterns in PCF projects. ★ 40,418repo stars pcf-events A rule that tells Copilot how to declare and handle custom events in Power Apps Component Framework components. ★ 40,418repo stars pcf-dependent-libraries Guides GitHub Copilot in configuring shared prebuilt libraries for Power Apps Component Framework (PCF) components to avoid bundling duplicates. ★ 40,418repo stars pcf-community-resources Find PCF component examples, learning videos, developer blogs, and builder tools in one guide. Use it when you need a starting point or help with PCF development. ★ 40,418repo stars pcf-code-components A rule that teaches Copilot how Power Apps code components are built: manifest, TypeScript implementation, resources. Useful when editing ControlManifest.Input.xml or index.ts. ★ 40,418repo stars

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor