182 lines
6.9 KiB
Rust
182 lines
6.9 KiB
Rust
use iced::{alignment, widget::Space, Alignment, Length};
|
|
|
|
use liana_ui::{
|
|
color,
|
|
component::{
|
|
button, collapse,
|
|
text::{h3, p1_regular, text, Text, H3_SIZE},
|
|
},
|
|
icon, image, theme,
|
|
widget::*,
|
|
};
|
|
|
|
use crate::installer::{
|
|
context,
|
|
message::{self, Message},
|
|
step::descriptor::editor::key::Key,
|
|
view::{
|
|
editor::{define_descriptor_advanced_settings, defined_key, path, undefined_key},
|
|
layout,
|
|
},
|
|
};
|
|
|
|
pub fn inheritance_template_description(progress: (usize, usize)) -> Element<'static, Message> {
|
|
layout(
|
|
progress,
|
|
None,
|
|
"Introduction",
|
|
Column::new()
|
|
.align_items(Alignment::Start)
|
|
.push(h3("Simple inheritance wallet"))
|
|
.max_width(800.0)
|
|
.push(Container::new(
|
|
p1_regular("For this setup you will need 2 Keys: Your Primary Key (for yourself) and an Inheritance Key (for your heir). For security reasons, we suggest you use a separate Hardware Wallet for each key.")
|
|
.style(color::GREY_2)
|
|
.horizontal_alignment(alignment::Horizontal::Left)
|
|
).align_x(alignment::Horizontal::Left).width(Length::Fill))
|
|
.push(Row::new()
|
|
.spacing(30)
|
|
.push(
|
|
Row::new()
|
|
.align_items(Alignment::Center)
|
|
.spacing(10)
|
|
.push(icon::round_key_icon().size(H3_SIZE).style(color::GREEN))
|
|
.push(p1_regular("Primary key").bold())
|
|
).push(
|
|
Row::new()
|
|
.align_items(Alignment::Center)
|
|
.spacing(10)
|
|
.push(icon::round_key_icon().size(H3_SIZE).style(color::WHITE))
|
|
.push(p1_regular("Inheritance key").bold())
|
|
))
|
|
.push(Container::new(
|
|
p1_regular("You will always be able to spend using your Primary Key.
|
|
After a period of inactivity (but not before that) your Inheritance Key will become able to recover your funds.")
|
|
.style(color::GREY_2)
|
|
.horizontal_alignment(alignment::Horizontal::Left)
|
|
).align_x(alignment::Horizontal::Left).width(Length::Fill))
|
|
.push(image::inheritance_template_description().width(Length::Fill))
|
|
.push(Row::new().push(Space::with_width(Length::Fill)).push(button::primary(None, "Next").width(Length::Fixed(200.0)).on_press(Message::Next)))
|
|
.push(Space::with_height(50.0))
|
|
.spacing(20),
|
|
true,
|
|
Some(Message::Previous),
|
|
)
|
|
}
|
|
|
|
pub fn inheritance_template<'a>(
|
|
progress: (usize, usize),
|
|
use_taproot: bool,
|
|
primary_key: Option<&'a Key>,
|
|
recovery_key: Option<&'a Key>,
|
|
sequence: u16,
|
|
valid: bool,
|
|
) -> Element<'a, Message> {
|
|
layout(
|
|
progress,
|
|
None,
|
|
"Set keys",
|
|
Column::new()
|
|
.align_items(Alignment::Start)
|
|
.max_width(1000.0)
|
|
.push(collapse::Collapse::new(
|
|
|| {
|
|
Button::new(
|
|
Row::new()
|
|
.align_items(Alignment::Center)
|
|
.spacing(10)
|
|
.push(text("Advanced settings").small().bold())
|
|
.push(icon::collapse_icon()),
|
|
)
|
|
.style(theme::Button::Transparent)
|
|
},
|
|
|| {
|
|
Button::new(
|
|
Row::new()
|
|
.align_items(Alignment::Center)
|
|
.spacing(10)
|
|
.push(text("Advanced settings").small().bold())
|
|
.push(icon::collapsed_icon()),
|
|
)
|
|
.style(theme::Button::Transparent)
|
|
},
|
|
move || define_descriptor_advanced_settings(use_taproot),
|
|
))
|
|
.push(
|
|
path(
|
|
color::GREEN,
|
|
None,
|
|
0,
|
|
false,
|
|
1,
|
|
vec![if let Some(key) = primary_key {
|
|
defined_key(
|
|
&key.name,
|
|
color::GREEN,
|
|
"Primary key",
|
|
if use_taproot && !key.is_compatible_taproot {
|
|
Some("This device does not support Taproot")
|
|
} else {
|
|
None
|
|
},
|
|
true,
|
|
)
|
|
} else {
|
|
undefined_key(color::GREEN, "Primary key", true, true)
|
|
}
|
|
.map(|msg| message::DefinePath::Key(0, msg))],
|
|
true,
|
|
)
|
|
.map(|msg| Message::DefineDescriptor(message::DefineDescriptor::Path(0, msg))),
|
|
)
|
|
.push(
|
|
path(
|
|
color::WHITE,
|
|
None,
|
|
sequence,
|
|
false,
|
|
1,
|
|
vec![if let Some(key) = recovery_key {
|
|
defined_key(
|
|
&key.name,
|
|
color::WHITE,
|
|
"Inheritance key",
|
|
if use_taproot && !key.is_compatible_taproot {
|
|
Some("This device does not support Taproot")
|
|
} else {
|
|
None
|
|
},
|
|
true,
|
|
)
|
|
} else {
|
|
undefined_key(color::WHITE, "Inheritance key", primary_key.is_some(), true)
|
|
}
|
|
.map(|msg| message::DefinePath::Key(0, msg))],
|
|
true,
|
|
)
|
|
.map(|msg| Message::DefineDescriptor(message::DefineDescriptor::Path(1, msg))),
|
|
)
|
|
.push(
|
|
Row::new()
|
|
.push(
|
|
button::secondary(None, "Customize")
|
|
.width(Length::Fixed(200.0))
|
|
.on_press(Message::DefineDescriptor(
|
|
message::DefineDescriptor::ChangeTemplate(
|
|
context::DescriptorTemplate::Custom,
|
|
),
|
|
)),
|
|
)
|
|
.push(Space::with_width(Length::Fill))
|
|
.push(
|
|
button::primary(None, "Continue")
|
|
.width(Length::Fixed(200.0))
|
|
.on_press_maybe(if valid { Some(Message::Next) } else { None }),
|
|
),
|
|
)
|
|
.spacing(20),
|
|
true,
|
|
Some(Message::Previous),
|
|
)
|
|
}
|