///|
pub fn[Msg] rich_text_editor(
value~ : @core.Binding[String],
placeholder~ : String,
size~ : @core.Size,
format~ : RichTextFormatter,
font~ : @core.FontSpec,
foreground~ : @core.Color,
placeholder_color~ : @core.Color,
background~ : @core.Brush,
border? : @core.BorderStyle? = None,
focused_border? : @core.BorderStyle? = None,
cursor_color~ : @core.Color,
corner_radius? : Double = 0.0,
on_input? : ((String) -> Msg)? = None,
on_input_edit? : ((String, Int, @core.TextRange?) -> Msg)? = None,
on_selection_change? : ((Int, @core.TextRange?) -> Msg)? = None,
on_prefix_click? : ((Int) -> Msg)? = None,
on_command_click? : ((Int) -> Msg)? = None,
input_transform? : ((String, Int, @core.TextRange?, String) -> RichTextInputTransform?)? = None,
accepts_tab_input? : Bool = false,
visible_scroll_y? : Double = 0.0,
visible_viewport_height? : Double = 0.0,
visible_overscan? : Double = 320.0,
visible_scroll_state? : @core.ScrollState? = None,
selection_caret? : Int = -1,
selection_range? : @core.TextRange? = None,
kind? : String = "RichTextEditor",
key? : String? = None,
) -> @core.View[Msg] {
@core.View::node(
identity=() => @core.ViewIdentity::new(kind~, key~),
revision=() => {
"rich-text-editor:\{value.get()}:\{placeholder}:\{view_size_revision(size)}:\{view_font_revision(font)}:\{view_color_revision(foreground)}:\{view_color_revision(placeholder_color)}:\{view_brush_revision(background)}:\{view_border_option_revision(border)}:\{view_border_option_revision(focused_border)}:\{view_color_revision(cursor_color)}:\{corner_radius}:\{accepts_tab_input}:\{selection_caret}:\{view_text_range_option_revision(selection_range)}"
},
paint_revision=() => {
"rich-text-editor-scroll:\{markdown_session_current_scroll_y(visible_scroll_y, visible_scroll_state)}"
},
layout=ctx => {
@core.ViewLayoutResult::new(size=ctx.constraints.constrain(size))
},
paint=ctx => {
rich_text_editor_paint(
ctx,
value~,
placeholder~,
format~,
font~,
foreground~,
placeholder_color~,
background~,
border~,
focused_border~,
cursor_color~,
corner_radius~,
visible_scroll_y~,
visible_viewport_height~,
visible_overscan~,
visible_scroll_state~,
)
},
event=ctx => {
rich_text_editor_event(
ctx,
value~,
format~,
font~,
on_input~,
on_input_edit~,
on_selection_change~,
on_prefix_click~,
on_command_click~,
input_transform~,
accepts_tab_input~,
visible_scroll_y~,
visible_viewport_height~,
visible_overscan~,
visible_scroll_state~,
)
},
text_input_state=ctx => {
Some(
rich_text_input_state(
text=value.get(),
frame=ctx.frame,
format~,
font~,
control=ctx.text_control,
selection_caret~,
selection_range~,
visible_scroll_y~,
visible_viewport_height~,
visible_overscan~,
visible_scroll_state~,
text_system=ctx.text_system,
),
)
},
text_command=(ctx, intent, paste_text) => {
rich_text_editor_command(
ctx,
value~,
format~,
on_input~,
on_input_edit~,
on_selection_change~,
input_transform~,
intent,
paste_text~,
)
},
semantics=() => {
@core.ViewSemanticsInfo::new(
role=@core.SemanticsRole::TextField,
label=placeholder,
value=value.get(),
actions=[
@core.SemanticsAction::Focus,
@core.SemanticsAction::SetText,
@core.SemanticsAction::Submit,
],
)
},
focusable=() => true,
)
}
///|
pub fn[Msg] controlled_rich_text_editor(
value~ : String,
on_input~ : (String) -> Msg,
placeholder~ : String,
size~ : @core.Size,
format~ : RichTextFormatter,
font~ : @core.FontSpec,
foreground~ : @core.Color,
placeholder_color~ : @core.Color,
background~ : @core.Brush,
border? : @core.BorderStyle? = None,
focused_border? : @core.BorderStyle? = None,
cursor_color~ : @core.Color,
corner_radius? : Double = 0.0,
on_selection_change? : ((Int, @core.TextRange?) -> Msg)? = None,
on_prefix_click? : ((Int) -> Msg)? = None,
on_command_click? : ((Int) -> Msg)? = None,
input_transform? : ((String, Int, @core.TextRange?, String) -> RichTextInputTransform?)? = None,
accepts_tab_input? : Bool = false,
visible_scroll_y? : Double = 0.0,
visible_viewport_height? : Double = 0.0,
visible_overscan? : Double = 320.0,
visible_scroll_state? : @core.ScrollState? = None,
selection_caret? : Int = -1,
selection_range? : @core.TextRange? = None,
kind? : String = "RichTextEditor",
key? : String? = None,
) -> @core.View[Msg] {
rich_text_editor(
value=@core.Binding::new(get=() => value, set=_next => ()),
placeholder~,
size~,
format~,
font~,
foreground~,
placeholder_color~,
background~,
border~,
focused_border~,
cursor_color~,
corner_radius~,
on_input=Some(on_input),
on_input_edit=None,
on_selection_change~,
on_prefix_click~,
on_command_click~,
input_transform~,
accepts_tab_input~,
visible_scroll_y~,
visible_viewport_height~,
visible_overscan~,
visible_scroll_state~,
selection_caret~,
selection_range~,
kind~,
key~,
)
}
///|
pub fn[Msg] controlled_rich_text_document_editor(
value~ : String,
document~ : RichTextDocument,
on_input~ : (String) -> Msg,
placeholder~ : String,
size~ : @core.Size,
font~ : @core.FontSpec,
foreground~ : @core.Color,
placeholder_color~ : @core.Color,
background~ : @core.Brush,
border? : @core.BorderStyle? = None,
focused_border? : @core.BorderStyle? = None,
cursor_color~ : @core.Color,
corner_radius? : Double = 0.0,
on_selection_change? : ((Int, @core.TextRange?) -> Msg)? = None,
on_prefix_click? : ((Int) -> Msg)? = None,
on_command_click? : ((Int) -> Msg)? = None,
input_transform? : ((String, Int, @core.TextRange?, String) -> RichTextInputTransform?)? = None,
accepts_tab_input? : Bool = false,
visible_scroll_y? : Double = 0.0,
visible_viewport_height? : Double = 0.0,
visible_overscan? : Double = 320.0,
visible_scroll_state? : @core.ScrollState? = None,
selection_caret? : Int = -1,
selection_range? : @core.TextRange? = None,
kind? : String = "RichTextDocumentEditor",
key? : String? = None,
) -> @core.View[Msg] {
controlled_rich_text_editor(
value~,
on_input~,
placeholder~,
size~,
format=_source => document,
font~,
foreground~,
placeholder_color~,
background~,
border~,
focused_border~,
cursor_color~,
corner_radius~,
on_selection_change~,
on_prefix_click~,
on_command_click~,
input_transform~,
accepts_tab_input~,
visible_scroll_y~,
visible_viewport_height~,
visible_overscan~,
visible_scroll_state~,
selection_caret~,
selection_range~,
kind~,
key~,
)
}