singlestage/components/field/
field.rs1use crate::FieldContext;
2use leptos::{context::Provider, prelude::*};
3
4#[component]
7pub fn Field(
8 children: Children,
9
10 #[prop(optional, into)]
14 orientation: MaybeProp<String>,
15 #[prop(optional, into)]
19 variant: MaybeProp<String>,
20
21 #[prop(optional, into)]
26 accesskey: MaybeProp<String>,
27 #[prop(optional, into)]
32 autocapitalize: MaybeProp<String>,
33 #[prop(optional, into)]
36 autofocus: MaybeProp<bool>,
37 #[prop(optional, into)]
39 class: MaybeProp<String>,
40 #[prop(optional, into)]
44 contenteditable: MaybeProp<String>,
45 #[prop(optional, into)]
49 dir: MaybeProp<String>,
50 #[prop(optional, into)]
52 draggable: MaybeProp<bool>,
53 #[prop(optional, into)]
55 enterkeyhint: MaybeProp<String>,
56 #[prop(optional, into)]
58 exportparts: MaybeProp<String>,
59 #[prop(optional, into)]
61 hidden: MaybeProp<String>,
62 #[prop(optional, into)]
64 id: MaybeProp<String>,
65 #[prop(optional, into)]
67 inert: MaybeProp<bool>,
68 #[prop(optional, into)]
71 inputmode: MaybeProp<String>,
72 #[prop(optional, into)]
74 is: MaybeProp<String>,
75 #[prop(optional, into)]
77 itemid: MaybeProp<String>,
78 #[prop(optional, into)]
80 itemprop: MaybeProp<String>,
81 #[prop(optional, into)]
83 itemref: MaybeProp<String>,
84 #[prop(optional, into)]
86 itemscope: MaybeProp<String>,
87 #[prop(optional, into)]
89 itemtype: MaybeProp<String>,
90 #[prop(optional, into)]
92 lang: MaybeProp<String>,
93 #[prop(optional, into)]
95 nonce: MaybeProp<String>,
96 #[prop(optional, into)]
98 part: MaybeProp<String>,
99 #[prop(optional, into)]
101 popover: MaybeProp<String>,
102 #[prop(optional, into)]
104 slot: MaybeProp<String>,
105 #[prop(optional, into)]
109 spellcheck: MaybeProp<String>,
110 #[prop(optional, into)]
112 style: MaybeProp<String>,
113 #[prop(optional, into)]
115 tabindex: MaybeProp<usize>,
116 #[prop(optional, into)]
118 title: MaybeProp<String>,
119 #[prop(optional, into)]
121 translate: MaybeProp<String>,
122) -> impl IntoView {
123 let context = FieldContext {
124 description_id: RwSignal::new(String::default()),
125 input_id: RwSignal::new(String::default()),
126 label_id: RwSignal::new(String::default()),
127 };
128
129 let global_attrs_1 = view! {
130 <{..}
131 accesskey=move || accesskey.get()
132 autocapitalize=move || autocapitalize.get()
133 autofocus=move || autofocus.get()
134 contenteditable=move || contenteditable.get()
135 dir=move || dir.get()
136 draggable=move || draggable.get()
137 enterkeyhint=move || enterkeyhint.get()
138 exportparts=move || exportparts.get()
139 hidden=move || hidden.get()
140 id=move || id.get()
141 inert=move || inert.get()
142 inputmode=move || inputmode.get()
143 is=move || is.get()
144 itemid=move || itemid.get()
145 />
146 };
147
148 let global_attrs_2 = view! {
149 <{..}
150 itemprop=move || itemprop.get()
151 itemref=move || itemref.get()
152 itemscope=move || itemscope.get()
153 itemtype=move || itemtype.get()
154 lang=move || lang.get()
155 nonce=move || nonce.get()
156 part=move || part.get()
157 popover=move || popover.get()
158 slot=move || slot.get()
159 spellcheck=move || spellcheck.get()
160 style=move || style.get()
161 tabindex=move || tabindex.get()
162 title=move || title.get()
163 translate=move || translate.get()
164 />
165 };
166
167 view! {
168 <div
169 class=move || {
170 format!(
171 "singlestage-field{}{}{}",
172 match orientation.get().unwrap_or_default().as_str() {
173 "horizontal" => " singlestage-field-horizontal",
174 "responsive" => " singlestage-field-responsive",
175 _ => " singlestage-field-vertical",
176 },
177 match variant.get().unwrap_or_default().as_str() {
178 "button" => " singlestage-field-button",
179 _ => "",
180 },
181 class.get().unwrap_or_default(),
182 )
183 }
184 role="group"
185
186 {..global_attrs_1}
187 {..global_attrs_2}
188 >
189 <Provider value=context>{children()}</Provider>
190 </div>
191 }
192}