# `osui::extensions::id` The `id` module provides a simple way to assign unique identifiers to OSUI widgets and retrieve them later by that ID. This is useful for direct access to specific UI elements for manipulation or querying. ## `Id` (Component) ```rust component!(Id(pub usize)); ``` A tuple struct component that holds a `usize` value, representing a unique identifier for the widget it's attached to. **Example:** ```rust use osui::prelude::*; rsx! { @Id(101); // Assign ID 101 to this Div Div { "My uniquely identified div" } } ``` ## `IdExtension` The `IdExtension` provides functionality to look up widgets by their `Id` component. ```rust pub struct IdExtension(pub Arc); ``` ### Associated Methods #### `IdExtension::new(screen: Arc) -> Arc` Creates a new `IdExtension` instance. It requires an `Arc` because it needs to access the screen's list of widgets to perform ID lookups. **Arguments:** * `screen`: An `Arc` to the main `Screen` instance. **Returns:** An `Arc`. It's recommended to store extensions that are queried by other parts of your app in an `Arc` so they can be easily shared. **Example:** ```rust use osui::prelude::*; let screen = Screen::new(); let id_ext = IdExtension::new(screen.clone()); screen.extension(id_ext.clone()); // Register the extension ``` #### `IdExtension::get_element(self: &Arc, id: usize) -> Option>` Retrieves an `Arc` from the `Screen`'s widget list that has an `Id` component matching the provided `id`. **Arguments:** * `id`: The `usize` identifier to search for. **Returns:** `Some(Arc)` if a widget with the matching ID is found, `None` otherwise. **Example:** ```rust use osui::prelude::*; let screen = Screen::new(); let id_ext = IdExtension::new(screen.clone()); screen.extension(id_ext.clone()); rsx! { @Id(100); Div { "Hello, ID 100!" } }.draw(&screen); // Later, perhaps in an event handler or another part of your app: if let Some(widget_100) = id_ext.get_element(100) { // You can now interact with widget_100 directly, e.g., get its transform, set components etc. // let transform: Transform = widget_100.get().unwrap(); } ``` ### `Extension` Trait Implementation `IdExtension` currently has an empty implementation for the `Extension` trait (`impl Extension for Arc {}`). This means it doesn't hook into any lifecycle events or event dispatching by default. Its primary purpose is to provide the `get_element` lookup method, which is invoked manually when needed.