wip: Sicherungs-Commit aller Änderungen seit April + Arbeitsstruktur (CLAUDE.md, ROADMAP.md, PROGRESS.md, Autopilot)

6 Wochen uncommittete Arbeit (Voice-Channels, LiveKit-Manager, Settings-Modal u.v.m.)
als ein WIP-Commit gesichert, damit nichts verloren geht und der Pi den aktuellen
Stand klonen kann. Thematische Aufarbeitung: siehe ROADMAP M0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPrAGBxBT6GfPXzeWQ4AXb
This commit is contained in:
Bernd Steckmeister
2026-07-03 05:47:18 +02:00
parent d706ace35f
commit 25ed765a03
195 changed files with 47784 additions and 1236 deletions
File diff suppressed because it is too large Load Diff
-52
View File
@@ -1,52 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:pyramid/features/rooms/rooms_page.dart';
final sidebarWidthProvider = StateProvider<double>((ref) => 280);
class PanelLayout extends ConsumerWidget {
final Widget mainContent;
const PanelLayout({super.key, required this.mainContent});
@override
Widget build(BuildContext context, WidgetRef ref) {
final sidebarWidth = ref.watch(sidebarWidthProvider);
return Row(
children: [
SizedBox(
width: sidebarWidth,
child: const RoomsPage(),
),
_ResizeDivider(
onDrag: (delta) {
final notifier = ref.read(sidebarWidthProvider.notifier);
notifier.state =
(notifier.state + delta).clamp(180.0, 480.0);
},
),
Expanded(child: mainContent),
],
);
}
}
class _ResizeDivider extends StatelessWidget {
final ValueChanged<double> onDrag;
const _ResizeDivider({required this.onDrag});
@override
Widget build(BuildContext context) {
return GestureDetector(
behavior: HitTestBehavior.translucent,
onHorizontalDragUpdate: (d) => onDrag(d.delta.dx),
child: MouseRegion(
cursor: SystemMouseCursors.resizeColumn,
child: Container(
width: 6,
color: Theme.of(context).dividerColor,
),
),
);
}
}
-19
View File
@@ -1,19 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:pyramid/layout/panel_layout.dart';
class ShellPage extends ConsumerWidget {
final Widget child;
const ShellPage({super.key, required this.child});
@override
Widget build(BuildContext context, WidgetRef ref) {
final isWide = MediaQuery.sizeOf(context).width >= 700;
return Scaffold(
body: isWide
? PanelLayout(mainContent: child)
: child,
);
}
}