diff --git a/packages/primitives/leptos/arrow/src/arrow.rs b/packages/primitives/leptos/arrow/src/arrow.rs
index 6253c79..4f4cae4 100644
--- a/packages/primitives/leptos/arrow/src/arrow.rs
+++ b/packages/primitives/leptos/arrow/src/arrow.rs
@@ -24,6 +24,7 @@ pub fn Arrow(
view! {
+
+
+
+
+
+radix-leptos-focus-group
+
+This is an internal utility, not intended for public usage.
+
+## Rust Radix
+
+[Rust Radix](https://github.com/NixySoftware/radix) is a Rust port of [Radix](https://www.radix-ui.com/primitives).
diff --git a/packages/primitives/leptos/focus-scope/src/focus_scope.rs b/packages/primitives/leptos/focus-scope/src/focus_scope.rs
new file mode 100644
index 0000000..8c81eb0
--- /dev/null
+++ b/packages/primitives/leptos/focus-scope/src/focus_scope.rs
@@ -0,0 +1,246 @@
+// TODO: remove
+#![allow(unused)]
+
+use std::ops::Deref;
+
+use leptos::{html::AnyElement, *};
+use radix_leptos_primitive::Primitive;
+use web_sys::{
+ wasm_bindgen::{closure::Closure, JsCast},
+ NodeFilter,
+};
+
+struct FocusScopeValue {
+ pub paused: bool,
+}
+
+impl FocusScopeValue {
+ pub fn new() -> Self {
+ Self { paused: false }
+ }
+
+ pub fn pause(&mut self) {
+ self.paused = true;
+ }
+
+ pub fn resume(&mut self) {
+ self.paused = false;
+ }
+}
+
+#[component]
+pub fn FocusScope(
+ #[prop(into, optional)] r#loop: MaybeProp,
+ #[prop(into, optional)] trapped: MaybeProp,
+ // TODO: event handlers
+ #[prop(into, optional)] as_child: MaybeProp,
+ #[prop(attrs)] attrs: Vec<(&'static str, Attribute)>,
+ children: ChildrenFn,
+) -> impl IntoView {
+ // let r#loop = move || r#loop.get().unwrap_or(false);
+ let trapped = move || trapped.get().unwrap_or(false);
+
+ // let container_ref = create_node_ref::();
+ // let last_focused_element = create_signal::