From de65c1dc7285b15c87862198b98b435345715d7d Mon Sep 17 00:00:00 2001 From: alex-ds13 <145657253+alex-ds13@users.noreply.github.com> Date: Thu, 4 Dec 2025 02:40:12 +0000 Subject: feat(selectable): draft implementation of selectable widget --- src/lib.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 34c1f73..c1c41cf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,9 +5,12 @@ #[cfg(feature = "markdown")] pub mod markdown; +pub mod operation; +pub mod selectable; pub mod selection; pub mod text; +use core::Element; use iced_widget::core; use iced_widget::graphics::text::Paragraph; #[cfg(feature = "markdown")] @@ -225,3 +228,45 @@ pub fn span<'a, Link>( ) -> text::Span<'a, Link, core::Font> { text::Span::new(text) } + +/// Creates some [`Selectable`] with the given content. +/// +/// [`Selectable`]: crate::selectable::Selectable +/// +/// # Example +/// ```no_run,ignore +/// use iced::font; +/// use iced_selection::{rich_text, selectable, span}; +/// use iced::{color, column, never, Font}; +/// +/// #[derive(Debug, Clone)] +/// enum Message { +/// LinkClicked(&'static str), +/// // ... +/// } +/// +/// fn view(state: &State) -> Element<'_, Message> { +/// selectable( +/// column![ +/// rich_text([ +/// span("I am red!").color(color!(0xff0000)), +/// span(" "), +/// span("And I am bold!").font(Font { weight: font::Weight::Bold, ..Font::default() }), +/// ]) +/// .on_link_click(never) +/// .size(20), +/// text("Hello, this is iced!"), +/// ] +/// ) +/// .into() +/// } +/// ``` +pub fn selectable<'a, Message, Theme, Renderer>( + content: impl Into>, +) -> selectable::Selectable<'a, Message, Theme, Renderer> +where + Theme: 'a, + Renderer: core::Renderer, +{ + selectable::Selectable::new(content) +} -- cgit v1.2.3