| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 
							- import 'package:flutter/material.dart';
 
- // ignore: unused_import
 
- import 'package:flowy_infra/time/duration.dart';
 
- typedef HoverBuilder = Widget Function(BuildContext context, bool onHover);
 
- class FlowyHover extends StatefulWidget {
 
-   final HoverDisplayConfig config;
 
-   final HoverBuilder builder;
 
-   const FlowyHover({
 
-     Key? key,
 
-     required this.builder,
 
-     this.config = const HoverDisplayConfig(),
 
-   }) : super(key: key);
 
-   @override
 
-   State<FlowyHover> createState() => _FlowyHoverState();
 
- }
 
- class _FlowyHoverState extends State<FlowyHover> {
 
-   bool _onHover = false;
 
-   @override
 
-   Widget build(BuildContext context) {
 
-     final hoverColor = _onHover
 
-         ? widget.config.hoverColor
 
-         : Theme.of(context).colorScheme.background;
 
-     final config = widget.config.copyWith(hoverColor: hoverColor);
 
-     return MouseRegion(
 
-       cursor: SystemMouseCursors.click,
 
-       onEnter: (p) => setOnHover(true),
 
-       onExit: (p) => setOnHover(false),
 
-       child: FlowyHoverBackground(
 
-           config: config, child: widget.builder(context, _onHover)),
 
-     );
 
-   }
 
-   void setOnHover(bool value) => setState(() => _onHover = value);
 
- }
 
- class HoverDisplayConfig {
 
-   final Color borderColor;
 
-   final double borderWidth;
 
-   final Color? hoverColor;
 
-   final BorderRadius borderRadius;
 
-   const HoverDisplayConfig(
 
-       {this.borderColor = Colors.transparent,
 
-       this.borderWidth = 0,
 
-       this.borderRadius = const BorderRadius.all(Radius.circular(8)),
 
-       this.hoverColor});
 
-   HoverDisplayConfig copyWith({Color? hoverColor}) {
 
-     return HoverDisplayConfig(
 
-         borderColor: borderColor,
 
-         borderWidth: borderWidth,
 
-         borderRadius: borderRadius,
 
-         hoverColor: hoverColor);
 
-   }
 
- }
 
- class FlowyHoverBackground extends StatelessWidget {
 
-   final HoverDisplayConfig config;
 
-   final Widget child;
 
-   const FlowyHoverBackground({
 
-     Key? key,
 
-     required this.child,
 
-     this.config = const HoverDisplayConfig(),
 
-   }) : super(key: key);
 
-   @override
 
-   Widget build(BuildContext context) {
 
-     final color = config.hoverColor ?? Theme.of(context).colorScheme.background;
 
-     final hoverBorder = Border.all(
 
-       color: config.borderColor,
 
-       width: config.borderWidth,
 
-     );
 
-     return Container(
 
-       decoration: BoxDecoration(
 
-         border: hoverBorder,
 
-         color: color,
 
-         borderRadius: config.borderRadius,
 
-       ),
 
-       child: child,
 
-     );
 
-   }
 
- }
 
 
  |