Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
913b701
refactor(remix): generate Fortal wrappers
leoafarias Jul 24, 2026
61ab553
chore(deps): lock released Mix generator betas
leoafarias Jul 24, 2026
460d41d
feat(fortal): align visuals with Radix Themes 3.3
leoafarias Jul 24, 2026
4c5f0da
Merge remote-tracking branch 'origin/main' into feat/fortal-polish
leoafarias Jul 24, 2026
ebe9ee1
Merge remote-tracking branch 'origin/main' into feat/fortal-generated…
leoafarias Jul 24, 2026
7b6b110
Merge remote-tracking branch 'origin/feat/fortal-generated-wrappers' …
leoafarias Jul 24, 2026
11e35f2
refactor(fortal): rename style recipes and expose full widget params
leoafarias Jul 28, 2026
b16636b
docs(remix): clarify Fortal radio group
leoafarias Jul 28, 2026
16b8c48
fix(fortal): resolve avatar icon sizes through tokens
leoafarias Jul 28, 2026
3a7bb51
fix(remix): keep icon button semantics on one node
leoafarias Jul 28, 2026
b450262
fix(fortal): support 200 percent control text scaling
leoafarias Jul 28, 2026
6b422dd
feat(remix): add structured dialog scrolling
leoafarias Jul 28, 2026
b7ac805
feat(remix): add optional indicator semantics
leoafarias Jul 28, 2026
d8ae559
test(remix): cover dialog scrolling contract
leoafarias Jul 28, 2026
4fbd724
fix(remix): keep unnamed indicators decorative
leoafarias Jul 28, 2026
e9ab45e
ci(remix): validate hosted Mix resolution
leoafarias Jul 28, 2026
641969e
fix(remix): consume Naked UI beta.8
leoafarias Jul 28, 2026
2371ad3
fix(remix): wire the Fortal leaf spinner painter
leoafarias Jul 29, 2026
d3e6a64
fix(fortal): round button loading-spinner leaves
leoafarias Jul 29, 2026
e34478a
fix(remix): derive select placeholder state from item match
leoafarias Jul 29, 2026
a30738a
docs(fortal): attach recipe docs to generated widgets
leoafarias Jul 29, 2026
9d64557
refactor(remix): remove dead Fortal and rendering surface
leoafarias Jul 30, 2026
0d50c5f
refactor(fortal): reuse fortalInsetSurface for inset strokes
leoafarias Jul 30, 2026
ea0f169
docs(remix): record effects lerp decision and complete changelog
leoafarias Jul 30, 2026
b7f2e11
fix(tool): scan generated sources for variant constructors
leoafarias Jul 30, 2026
0fbf1b5
fix(tool): restore working tree when generation check fails
leoafarias Jul 30, 2026
5f867f3
fix(tool): derive parity coverage from component source
leoafarias Jul 30, 2026
1208bd5
fix(tool): verify coverage-evidence citations
leoafarias Jul 30, 2026
588bafc
fix(docs): analyze all Remix documentation snippets
leoafarias Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,10 +194,11 @@ class MyApp extends StatelessWidget {

### Customizing Fortal Styles

Generated Fortal widgets call the matching `fortal*Styler` internally. Use those stylers directly when you need a custom Remix widget composition:
Generated Fortal widgets call the matching `fortal*Style` recipe internally.
Use those recipes directly when you need a custom Remix widget composition:

```dart
final style = fortalButtonStyler(variant: FortalButtonVariant.solid)
final style = fortalButtonStyle(variant: FortalButtonVariant.solid)
.borderRadiusAll(const Radius.circular(8))
.paddingX(32)
.onHovered(.scale(1.05));
Expand Down
19 changes: 12 additions & 7 deletions docs/components/accordion.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ class _AccordionExampleState extends State<AccordionExample> {

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal widget" defaultLanguage="dart">
```dart
Expand Down Expand Up @@ -161,22 +161,26 @@ class _FortalAccordionExampleState extends State<FortalAccordionExample> {
</CodeGroup>

<Info>
See the [fortalAccordionStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/accordion/fortal_accordion_styles.dart) for all available options.
See the [fortalAccordionStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/accordion/fortal_accordion_styles.dart) for all available options.
</Info>

## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
import 'package:flutter/material.dart';
import 'package:naked_ui/naked_ui.dart';
import 'package:remix/remix.dart';

// Accordion Group
const RemixAccordionGroup({
RemixAccordionGroup<T> remixAccordionGroupConstructor<T>({
Key? key,
required Widget child,
required RemixAccordionController<T> controller,
List<T> initialExpandedValues = const [],
})
}) => throw UnimplementedError();

// Accordion Item
const RemixAccordion({
RemixAccordion<T> remixAccordionConstructor<T>({
Key? key,
required T value,
required Widget child,
Expand All @@ -193,10 +197,11 @@ const RemixAccordion({
ValueChanged<bool>? onHoverChange,
ValueChanged<bool>? onPressChange,
String? semanticLabel,
Widget Function(Widget, Animation<double>) transitionBuilder = defaultAccordionTransitionBuilder,
Widget Function(Widget, Animation<double>) transitionBuilder =
RemixAccordion.defaultAccordionTransitionBuilder,
RemixAccordionStyler style = const RemixAccordionStyler.create(),
RemixAccordionSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
14 changes: 10 additions & 4 deletions docs/components/avatar.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class AvatarExample extends StatelessWidget {

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal variants" defaultLanguage="dart">
```dart
Expand All @@ -95,10 +95,12 @@ class FortalAvatarExample extends StatelessWidget {
// Soft variant - Subtle background
FortalAvatar.soft(
label: 'AB',
fallbackLength: 2,
),
// Solid variant - Bold background
FortalAvatar.solid(
label: 'CD',
fallbackLength: 2,
),
],
);
Expand All @@ -108,13 +110,17 @@ class FortalAvatarExample extends StatelessWidget {
</CodeGroup>

<Info>
See the [fortalAvatarStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/avatar/fortal_avatar_styles.dart) for all available options.
Set `fallbackLength: 2` for two-character labels so the generated widget uses
the pinned two-initial typography. See the [fortalAvatarStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/avatar/fortal_avatar_styles.dart) for all available options.
</Info>

## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
const RemixAvatar({
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

RemixAvatar remixAvatarConstructor({
Key? key,
ImageProvider? backgroundImage,
ImageProvider? foregroundImage,
Expand All @@ -127,7 +133,7 @@ const RemixAvatar({
RemixAvatarIconBuilder? iconBuilder,
RemixAvatarStyler style = const RemixAvatarStyler.create(),
RemixAvatarSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
11 changes: 7 additions & 4 deletions docs/components/badge.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class BadgeExample extends StatelessWidget {

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal variants" defaultLanguage="dart">
```dart
Expand Down Expand Up @@ -111,20 +111,23 @@ class FortalBadgeExample extends StatelessWidget {
</CodeGroup>

<Info>
See the [fortalBadgeStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/badge/fortal_badge_styles.dart) for all available options.
See the [fortalBadgeStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/badge/fortal_badge_styles.dart) for all available options.
</Info>

## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
const RemixBadge({
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

RemixBadge remixBadgeConstructor({
Key? key,
String? label,
Widget? child,
RemixBadgeLabelBuilder? labelBuilder,
RemixBadgeStyler style = const RemixBadgeStyler.create(),
RemixBadgeSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
11 changes: 7 additions & 4 deletions docs/components/button.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ class ButtonExample extends StatelessWidget {

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal variants" defaultLanguage="dart">
```dart
Expand Down Expand Up @@ -149,13 +149,16 @@ class FortalButtonExample extends StatelessWidget {
</CodeGroup>

<Info>
See the [fortalButtonStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/button/fortal_button_styles.dart) for all available options.
See the [fortalButtonStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/button/fortal_button_styles.dart) for all available options.
</Info>

## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
const RemixButton({
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

RemixButton remixButtonConstructor({
Key? key,
required String label,
IconData? leadingIcon,
Expand All @@ -177,7 +180,7 @@ const RemixButton({
MouseCursor mouseCursor = SystemMouseCursors.click,
ButtonStyler style = const ButtonStyler.create(),
RemixButtonSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
11 changes: 7 additions & 4 deletions docs/components/callout.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class CalloutExample extends StatelessWidget {

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal variants" defaultLanguage="dart">
```dart
Expand Down Expand Up @@ -94,20 +94,23 @@ class FortalCalloutExample extends StatelessWidget {
</CodeGroup>

<Info>
See the [fortalCalloutStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/callout/fortal_callout_styles.dart) for all available options.
See the [fortalCalloutStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/callout/fortal_callout_styles.dart) for all available options.
</Info>

## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
const RemixCallout({
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

RemixCallout remixCalloutConstructor({
Key? key,
String? text,
IconData? icon,
Widget? child,
RemixCalloutStyler style = const RemixCalloutStyler.create(),
RemixCalloutSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
11 changes: 7 additions & 4 deletions docs/components/card.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class CardExample extends StatelessWidget {

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal variants" defaultLanguage="dart">
```dart
Expand All @@ -74,18 +74,21 @@ class FortalCardExample extends StatelessWidget {
</CodeGroup>

<Info>
See the [fortalCardStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/card/fortal_card_styles.dart) for all available options.
See the [fortalCardStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/card/fortal_card_styles.dart) for all available options.
</Info>

## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
const RemixCard({
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

RemixCard remixCardConstructor({
Key? key,
Widget? child,
RemixCardStyler style = const RemixCardStyler.create(),
RemixCardSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
11 changes: 7 additions & 4 deletions docs/components/checkbox.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class _CheckboxExampleState extends State<CheckboxExample> {

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal variants" defaultLanguage="dart">
```dart
Expand Down Expand Up @@ -99,13 +99,16 @@ class _FortalCheckboxExampleState extends State<FortalCheckboxExample> {
</CodeGroup>

<Info>
See the [fortalCheckboxStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/checkbox/fortal_checkbox_styles.dart) for all available options.
See the [fortalCheckboxStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/checkbox/fortal_checkbox_styles.dart) for all available options.
</Info>

## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
const RemixCheckbox({
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

RemixCheckbox remixCheckboxConstructor({
Key? key,
required bool? selected,
ValueChanged<bool?>? onChanged,
Expand All @@ -121,7 +124,7 @@ const RemixCheckbox({
MouseCursor mouseCursor = SystemMouseCursors.click,
RemixCheckboxStyler style = const RemixCheckboxStyler.create(),
RemixCheckboxSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
54 changes: 31 additions & 23 deletions docs/components/dialog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -65,32 +65,37 @@ configuration is needed.

<CodeGroup title="Destructive alert" defaultLanguage="dart">
```dart
showRemixAlertDialog<void>(
context: context,
semanticLabel: 'Delete project confirmation',
builder: (context) => Center(
child: FortalDialog(
title: 'Delete project?',
description: 'This permanently deletes the project and all of its data.',
actions: [
FortalButton.ghost(
label: 'Cancel',
onPressed: () => Navigator.pop(context),
),
FortalButton(
label: 'Delete project',
onPressed: () => Navigator.pop(context),
),
],
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

Future<void> showDeleteDialog(BuildContext context) async {
await showRemixAlertDialog<void>(
context: context,
semanticLabel: 'Delete project confirmation',
builder: (context) => Center(
child: FortalDialog(
title: 'Delete project?',
description: 'This permanently deletes the project and all of its data.',
actions: [
FortalButton.ghost(
label: 'Cancel',
onPressed: () => Navigator.pop(context),
),
FortalButton(
label: 'Delete project',
onPressed: () => Navigator.pop(context),
),
],
),
),
),
);
);
}
```
</CodeGroup>

## Fortal widgets

Remix includes a generated Fortal-themed widget for this component:
Remix includes a Fortal-themed widget for this component:

<CodeGroup title="Fortal widget" defaultLanguage="dart">
```dart
Expand Down Expand Up @@ -122,7 +127,7 @@ class FortalDialogExample extends StatelessWidget {
</CodeGroup>

<Info>
See the [fortalDialogStyler source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/dialog/fortal_dialog_styles.dart) for all available options.
See the [fortalDialogStyle source code](https://github.com/btwld/remix/blob/main/packages/remix/lib/src/components/dialog/fortal_dialog_styles.dart) for all available options.
</Info>

## Show function
Expand Down Expand Up @@ -176,7 +181,10 @@ the alert with a `null` result.
## Constructor
<CodeGroup title="Constructor" defaultLanguage="dart">
```dart
const RemixDialog({
import 'package:flutter/material.dart';
import 'package:remix/remix.dart';

RemixDialog remixDialogConstructor({
Key? key,
Widget? child,
String? title,
Expand All @@ -186,7 +194,7 @@ const RemixDialog({
String? semanticLabel,
RemixDialogStyler style = const RemixDialogStyler.create(),
RemixDialogSpec? styleSpec,
})
}) => throw UnimplementedError();
```
</CodeGroup>

Expand Down
Loading
Loading