htmx_components/server/
flyout.rs1use super::attrs::Attrs;
2use super::transition::Transition;
3use super::yc_control::YcControl;
4use rscx::{component, html, props};
5
6#[props]
7pub struct FlyoutProps {
8 #[builder(setter(into))]
9 title: String,
10 children: String,
11}
12
13#[component]
14pub fn Flyout(props: FlyoutProps) -> String {
15 html! {
16 <YcControl
17 control="flyout"
18 class="relative z-8"
19 role="dialog"
20 aria_labelledby="slide-over-title"
21 attrs=Attrs::with("aria-modal", "true".into())
22 >
23 <div class="fixed inset-0"></div>
25 <div class="fixed inset-0 overflow-hidden">
26 <div class="absolute inset-0 overflow-hidden">
27 <div class="pointer-events-none fixed inset-y-0 right-0 flex max-w-full pl-10 sm:pl-16">
28 <Transition
29 class="pointer-events-auto w-screen max-w-2xl"
30 enter="transform transition ease-in-out duration-500 sm:duration-700"
31 enter_from="translate-x-full"
32 enter_to="translate-x-0"
33 leave="transform transition ease-in-out duration-500 sm:duration-700"
34 leave_from="translate-x-0"
35 leave_to="translate-x-full"
36 attrs=Attrs::with("data-flyout-panel", "true".into())
37 >
38 <div class="flex h-full flex-col overflow-y-scroll bg-white py-6 shadow-xl">
39 <div class="px-4 sm:px-6">
40 <div class="flex items-start justify-between">
41 <h2 class="text-base font-semibold leading-6 text-gray-900" id="slide-over-title">{props.title}</h2>
42 <div class="ml-3 flex h-7 items-center">
43 <button type="button" data-toggle-action="close" class="relative rounded-md bg-white text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">
44 <span class="absolute -inset-2.5"></span>
45 <span class="sr-only">Close panel</span>
46 <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
47 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
48 </svg>
49 </button>
50 </div>
51 </div>
52 </div>
53 <div class="relative mt-6 flex-1 px-4 sm:px-6">
54 {props.children}
55 </div>
56 </div>
57 </Transition>
58 </div>
59 </div>
60 </div>
61 </YcControl>
62 }
63}