Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .fvmrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"flutter": "3.38.9"
}
"flutter": "stable"
}
10 changes: 5 additions & 5 deletions demo/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:signals_flutter/signals_flutter.dart';
import 'package:superdeck/superdeck.dart';
import 'package:superdeck_genui/superdeck_genui.dart';

import 'src/parts/background.dart';
import 'src/parts/footer.dart';
Expand All @@ -11,24 +12,22 @@ import 'src/widgets/demo_widgets.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
const plugins = [GenUiPlugin()];

// Disable signals logging to reduce console noise
SignalsObserver.instance = null;

// Enable semantics for testing
WidgetsBinding.instance.ensureSemantics();

await SuperDeckApp.initialize();
await SuperDeckApp.initialize(plugins: plugins);
runApp(
SuperDeckApp(
options: DeckOptions(
baseStyle: borderedStyle(),
widgets: {...demoWidgets, 'twitter': const _TwitterWidgetDefinition()},
// debug: true,
styles: {
'announcement': announcementStyle(),
'quote': quoteStyle(),
},
styles: {'announcement': announcementStyle(), 'quote': quoteStyle()},
templates: {
'corporate': corporateTemplate(),
'minimal': minimalTemplate(),
Expand All @@ -39,6 +38,7 @@ void main() async {
background: BackgroundPart(),
),
watchForChanges: true,
plugins: plugins,
),
),
);
Expand Down
1 change: 1 addition & 0 deletions demo/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
mix: ^2.0.0-rc.0
superdeck_core: ^1.0.0
superdeck: ^1.0.0
superdeck_genui: ^1.0.0
signals_flutter: ^6.0.4
naked_ui: ^0.2.0-beta.7
remix: ^0.1.0-beta.1
Expand All @@ -29,4 +30,4 @@
assets:
- assets/
- .superdeck/
- .superdeck/assets/

Check warning on line 33 in demo/pubspec.yaml

View workflow job for this annotation

GitHub Actions / Test

The asset directory '.superdeck/assets/' doesn't exist.

Try creating the directory or fixing the path to the directory.

Check warning on line 33 in demo/pubspec.yaml

View workflow job for this annotation

GitHub Actions / Test / Test

The asset directory '.superdeck/assets/' doesn't exist.

Try creating the directory or fixing the path to the directory.

Check warning on line 33 in demo/pubspec.yaml

View workflow job for this annotation

GitHub Actions / Test

The asset directory '.superdeck/assets/' doesn't exist.

Try creating the directory or fixing the path to the directory.
64 changes: 64 additions & 0 deletions packages/genui/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# superdeck_genui

AI-powered presentation wizard for SuperDeck using GenUI and Gemini.

This package provides a chat-based wizard that guides users through creating
presentations with AI assistance. It handles the full generation pipeline:
wizard conversation → outline → images → final deck.

## What it provides

- **Chat wizard UI** — 8-step GenUI conversation with radio, checkbox, slider, and style selectors
- **AI generation pipeline** — 3-phase deck generation (outline → images → final deck) using Gemini
- **Composable routes** — `genUiRoutes()` function for integration into any GoRouter setup
- **Presentation preview** — Thumbnail generation and deck hosting screens

## Configuration

Set your Gemini API key via either method:

1. **Build-time** (recommended): `--dart-define=GOOGLE_AI_API_KEY=xxx`
2. **Runtime** (dev only): Create a `.env` file with `GOOGLE_AI_API_KEY=xxx`

`genUiRoutes()` automatically initializes GenUI runtime dependencies
(paths, prompt assets, examples, and optional `.env` loading).

## Usage

```dart
import 'package:superdeck_genui/superdeck_genui.dart';

// Optional (recommended for custom/manual integration)
await initializeGenUi();

// Add routes to your GoRouter
final router = GoRouter(
routes: [...genUiRoutes()],
);

// Optional: override default route screens (for custom host integration)
final customRouter = GoRouter(
routes: [
...genUiRoutes(
presentationBuilder: (context, state) {
return PresentationDeckHost(
deckAppBuilder: (options) => MyPresentationApp(options: options),
);
},
),
],
);

// Or use individual screens directly
const GenUiBootstrapScope(child: ChatScreen());
const GenUiBootstrapScope(child: CreatingPresentationScreen());
const GenUiBootstrapScope(child: PresentationDeckHost());
```

## Related packages

| Package | Description |
|---------|-------------|
| `superdeck` | Flutter presentation framework |
| `superdeck_core` | Core models and parsing |
| `superdeck_cli` | CLI tool for building decks |
2 changes: 2 additions & 0 deletions packages/genui/analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
include: package:flutter_lints/flutter.yaml
extends: ../../shared_analysis_options.yaml
Comment on lines +1 to +2
Copy link

Copilot AI Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

analysis_options.yaml doesn’t support an extends: key (unknown keys are ignored), so ../../shared_analysis_options.yaml won’t be applied. Use include: for the shared file (and have the shared file include flutter_lints if needed), or merge the shared rules into this file.

Suggested change
include: package:flutter_lints/flutter.yaml
extends: ../../shared_analysis_options.yaml
include: ../../shared_analysis_options.yaml

Copilot uses AI. Check for mistakes.
Loading
Loading