Modifier for the dialog.
diff --git a/api/core/ui/org.meshtastic.core.ui.component/-channel-item-preview.html b/api/core/ui/org.meshtastic.core.ui.component/-channel-item-preview.html index 437d622574..0797908e52 100644 --- a/api/core/ui/org.meshtastic.core.ui.component/-channel-item-preview.html +++ b/api/core/ui/org.meshtastic.core.ui.component/-channel-item-preview.html @@ -94,7 +94,7 @@
A comprehensive and flexible dialog component for the Meshtastic application.
Modifier for the dialog.
The title text of the dialog.
The title string resource of the dialog.
Optional plain text message.
Optional string resource message.
Optional color for the plain text message; Color.Unspecified uses the default text color.
Optional HTML formatted message.
Optional leading icon.
Optional custom composable content for the body.
Text for the confirmation button.
String resource for the confirmation button.
Callback for the confirmation button.
Text for the dismiss button.
String resource for the dismiss button.
Callback for when the dialog is dismissed or the dismiss button is clicked.
If provided, displays a list of buttons instead of the standard confirm/dismiss actions.
Whether the dialog can be dismissed by clicking outside or pressing back.
A comprehensive and flexible dialog component for the Meshtastic application.
Modifier for the dialog.
The title text of the dialog.
The title string resource of the dialog.
Optional plain text message.
Optional string resource message.
Optional color for the plain text message; Color.Unspecified uses the default text color.
Optional HTML formatted message.
Optional leading icon.
Optional custom composable content for the body.
Text for the confirmation button.
String resource for the confirmation button.
Callback for the confirmation button.
Text for the dismiss button.
String resource for the dismiss button.
Callback for when the dialog is dismissed or the dismiss button is clicked.
If provided, displays a list of buttons instead of the standard confirm/dismiss actions.
Whether the dialog can be dismissed by clicking outside or pressing back.
Shared adaptive navigation shell using NavigationSuiteScaffold.
This implementation uses the MultiBackstack state holder to manage independent histories for each tab, aligning with Navigation 3 best practices for state preservation during tab switching.
Shared adaptive navigation shell using NavigationSuiteScaffold.
This implementation uses the MultiBackstack state holder to manage independent histories for each tab, aligning with Navigation 3 best practices for state preservation during tab switching.
A simplified MeshtasticDialog using only string resources.
A simplified MeshtasticDialog using only string resources.
A simplified MeshtasticDialog using a title resource and a plain text message.
A simplified MeshtasticDialog using a title resource and a plain text message.
Enables the user to select which channels to accept after scanning a QR code.
Enables the user to select which channels to accept after scanning a QR code.
Complete expressive typescale for the Meshtastic application.
bodyLarge and bodyMedium enforce a minimum of 16.sp per design standards §5. Emphasized variants (e.g. titleMediumEmphasized, bodyLargeEmphasized) are auto-generated by MaterialExpressiveTheme based on these base styles.
Complete expressive typescale for the Meshtastic application.
bodyLarge and bodyMedium enforce a minimum of 16.sp per design standards §5. Emphasized variants (e.g. titleMediumEmphasized, bodyLargeEmphasized) are auto-generated by MaterialExpressiveTheme based on these base styles.
Displays the currently connecting (or connected) device with its name, address, connection status, and a disconnect button.
Displays the currently connecting (or connected) device with its name, address, connection status, and a disconnect button.
Shared "icon + label" button used throughout the Connections screen. Centralises M3 sizing conventions (ButtonDefaults.IconSize, ButtonDefaults.IconSpacing, and the variant-appropriate *WithIconContentPadding) so every scan / add / empty-state affordance renders identically.
accessibility label for the leading icon. Defaults to null because the visible text usually describes the action; override when the icon carries information the text does not.
Shared "icon + label" button used throughout the Connections screen. Centralises M3 sizing conventions (ButtonDefaults.IconSize, ButtonDefaults.IconSpacing, and the variant-appropriate *WithIconContentPadding) so every scan / add / empty-state affordance renders identically.
accessibility label for the leading icon. Defaults to null because the visible text usually describes the action; override when the icon carries information the text does not.
Plain text resolved outside the animated connected-device subtree.
TODO(CMP-6615): Remove this bundle and the caller-provided component labels after upgrading from Compose Multiplatform 1.11.1 to a release containing the Android resource-loading fix.
Plain text resolved outside the animated connected-device subtree.
TODO(CMP-6615): Remove this bundle and the caller-provided component labels after upgrading from Compose Multiplatform 1.11.1 to a release containing the Android resource-loading fix.
Section header used to group content in the Connections list.
Follows the Material 3 "header + trailing action" pattern: a titleSmall label on the left, an optional composable trailing slot on the right (typically a androidx.compose.material3.TextButton for a scan toggle), and an optional thin LinearProgressIndicator rendered underneath when showProgress is true.
The header title and the trailing action are rendered on the same baseline so a section's control never drifts above or below its header.
Section header used to group content in the Connections list.
Follows the Material 3 "header + trailing action" pattern: a titleSmall label on the left, an optional composable trailing slot on the right (typically a androidx.compose.material3.TextButton for a scan toggle), and an optional thin LinearProgressIndicator rendered underneath when showProgress is true.
The header title and the trailing action are rendered on the same baseline so a section's control never drifts above or below its header.
The menu that picks what the map draws underneath the mesh.
Both maps show the same shape — the renderer's own styles, then the shared raster catalogue, then the user's custom sources, then whatever the host appends — and previously each flavour had its own copy of it. What differs is only the contents of groups, which the caller assembles: the Google map opens with Google's four map types where the MapLibre map opens with its vector styles.
Each list in groups renders as a visually separate block; empty ones are dropped so a user with no custom sources sees no empty divider.
The menu that picks what the map draws underneath the mesh.
Both maps show the same shape — the renderer's own styles, then the shared raster catalogue, then the user's custom sources, then whatever the host appends — and previously each flavour had its own copy of it. What differs is only the contents of groups, which the caller assembles: the Google map opens with Google's four map types where the MapLibre map opens with its vector styles.
Each list in groups renders as a visually separate block; empty ones are dropped so a user with no custom sources sees no empty divider.
Shared map controls overlay using HorizontalFloatingToolbar for Material 3 Expressive styling. Provides compass, filter button, location tracking button, and optional slots for flavor-specific content (map type selector, layers, refresh).
Zoom is deliberately not here — it lives in MapZoomControls, in the lower corner where Google Maps draws its own.
Callback to open/close the filter dropdown.
Composable rendered inside a Box alongside the filter button — MapFilterSheet on the main map, a dropdown on the node-track map.
Whether any filter is narrowing what the map shows. Badges the button, because a filter that hides nodes is otherwise indistinguishable from a quiet mesh.
Optional composable for a map type selector button + dropdown. Google flavor provides map type and custom tile options; F-Droid provides a tile source selector.
Optional composable for a layers management button.
Whether to show a refresh button (e.g., for network map layers).
Whether a refresh is currently in progress.
Callback when the refresh button is clicked.
Shared map controls overlay using HorizontalFloatingToolbar for Material 3 Expressive styling. Provides compass, filter button, location tracking button, and optional slots for flavor-specific content (map type selector, layers, refresh).
Zoom is deliberately not here — it lives in MapZoomControls, in the lower corner where Google Maps draws its own.
Callback to open/close the filter dropdown.
Composable rendered inside a Box alongside the filter button — MapFilterSheet on the main map, a dropdown on the node-track map.
Whether any filter is narrowing what the map shows. Badges the button, because a filter that hides nodes is otherwise indistinguishable from a quiet mesh.
Optional composable for a map type selector button + dropdown. Google flavor provides map type and custom tile options; F-Droid provides a tile source selector.
Optional composable for a layers management button.
Whether to show a refresh button (e.g., for network map layers).
Whether a refresh is currently in progress.
Callback when the refresh button is clicked.
Zoom in and out, stacked, for the corner of a map.
Where Google Maps puts its own: MapUiSettings(zoomControlsEnabled = true) draws a vertical pair against the lower trailing edge, clear of the top of the map, and every Google-flavor map surface in this app turns it on. MapLibre publishes no zoom ornament at all, so its maps draw this instead — placed the same way, so the two flavors feel alike and the reachable half of a phone screen is where the frequent control lives.
Separate from MapControlsOverlay on purpose. That toolbar holds the occasional controls — filter, basemap, layers — and belongs at the top; zoom belongs where the thumb is.
Zoom in and out, stacked, for the corner of a map.
Where Google Maps puts its own: MapUiSettings(zoomControlsEnabled = true) draws a vertical pair against the lower trailing edge, clear of the top of the map, and every Google-flavor map surface in this app turns it on. MapLibre publishes no zoom ornament at all, so its maps draw this instead — placed the same way, so the two flavors feel alike and the reachable half of a phone screen is where the frequent control lives.
Separate from MapControlsOverlay on purpose. That toolbar holds the occasional controls — filter, basemap, layers — and belongs at the top; zoom belongs where the thumb is.
The filter menu for one node's position track.
Only the age cutoff, and a different preference from the main map's: that one hides stale nodes, this trims old points off one node's history. Nothing else in the main menu means anything here — there are no other nodes to favourite, no waypoints and no precision circles on a track.
The filter menu for one node's position track.
Only the age cutoff, and a different preference from the main map's: that one hides stale nodes, this trims old points off one node's history. Nothing else in the main menu means anything here — there are no other nodes to favourite, no waypoints and no precision circles on a track.
The top app bar displayed when in message selection mode.
The number of currently selected messages.
Callback for when a menu action is triggered.
The top app bar displayed when in message selection mode.
The number of currently selected messages.
Callback for when a menu action is triggered.
A dialog confirming the deletion of messages.
The number of messages to be deleted.
Callback invoked when the user confirms the deletion.
Callback invoked when the dialog is dismissed.
A dialog confirming the deletion of messages.
The number of messages to be deleted.
Callback invoked when the user confirms the deletion.
Callback invoked when the dialog is dismissed.
The maximum byte size for a message.
The maximum byte size for a message.
Actions available in the message selection mode's top bar.
Actions available in the message selection mode's top bar.
M3 contextual search bar that replaces the standard MessageTopBar when search is active. Follows the M3 "find in page" pattern: back arrow + text field + "X of Y" counter + prev/next arrows + clear.
This uses TopAppBar rather than SearchBar because we're filtering within an existing conversation (contextual search), not performing primary app-level navigation search.
M3 contextual search bar that replaces the standard MessageTopBar when search is active. Follows the M3 "find in page" pattern: back arrow + text field + "X of Y" counter + prev/next arrows + clear.
This uses TopAppBar rather than SearchBar because we're filtering within an existing conversation (contextual search), not performing primary app-level navigation search.
The default top app bar for the message screen.
The title to display (contact or channel name).
The index of the current channel, if applicable.
True if there's a key mismatch for the current PKC.
Callback for the navigation icon.
The set of all channels, used for the SecurityIcon.
The specific channel index for the SecurityIcon.
The default top app bar for the message screen.
The title to display (contact or channel name).
The index of the current channel, if applicable.
True if there's a key mismatch for the current PKC.
Callback for the navigation icon.
The set of all channels, used for the SecurityIcon.
The specific channel index for the SecurityIcon.
A row of quick chat action buttons.
Whether the buttons should be enabled.
The list of QuickChatActions to display.
Callback when a quick chat button is clicked.
A row of quick chat action buttons.
Whether the buttons should be enabled.
The list of QuickChatActions to display.
Callback when a quick chat button is clicked.
Displays a snippet of the message being replied to.
The message being replied to, or null if not replying.
Callback to clear the reply state.
The current user's node information, to display "You" if replying to self.
Displays a snippet of the message being replied to.
The message being replied to, or null if not replying.
Callback to clear the reply state.
The current user's node information, to display "You" if replying to self.
Jump-to-latest control for the message list.
A bare count answers "how many" but not "from whom", which is what actually decides whether to scroll now or keep reading — so when the newest unread message has a sender, the control widens to name them and keeps the count as the overflow case.
The coroutine scope for launching the scroll animation.
The LazyListState of the message list.
The number of unread messages to display as a badge.
Display name of whoever sent the newest unread message, or null when there is none.
Jump-to-latest control for the message list.
A bare count answers "how many" but not "from whom", which is what actually decides whether to scroll now or keep reading — so when the newest unread message has a sender, the control widens to name them and keeps the count as the overflow case.
The coroutine scope for launching the scroll animation.
The LazyListState of the message list.
The number of unread messages to display as a badge.
Display name of whoever sent the newest unread message, or null when there is none.
Handles a quick chat action, either appending its message to the current text or sending it directly.
The QuickChatAction to handle.
The current text in the message input.
Lambda to call when the text needs to be updated (for Append mode).
Lambda to call when a message needs to be sent (for Instant mode).
Handles a quick chat action, either appending its message to the current text or sending it directly.
The QuickChatAction to handle.
The current text in the message input.
Lambda to call when the text needs to be updated (for Append mode).
Lambda to call when a message needs to be sent (for Instant mode).
A live channel row above the same conversation once its channel has left the radio.
The archived row is the point: it keeps the name the channel had (its slot now belongs to someone else), swaps the key-state lock for a history icon, and is flagged unmessageable.
A live channel row above the same conversation once its channel has left the radio.
The archived row is the point: it keeps the name the channel had (its slot now belongs to someone else), swaps the key-state lock for a history icon, and is flagged unmessageable.
A menu of its own: favoriting, muting, messaging or removing yourself is meaningless (design#115).
A menu of its own: favoriting, muting, messaging or removing yourself is meaningless (design#115).
Shared context menu for node actions (favorite, mute, message, trace route, ignore, remove).
Used by both Android and Desktop adaptive node list screens.
Shared context menu for node actions (favorite, mute, message, trace route, ignore, remove).
Used by both Android and Desktop adaptive node list screens.
Shared content composable for node details, usable from both Android and Desktop.
Renders a Crossfade between a loading spinner and the full NodeDetailList when the node is present. This composable contains no Android-specific APIs — overlays (compass, bottom sheets, permission launchers) are handled by the platform-specific screen wrapper.
Shared content composable for node details, usable from both Android and Desktop.
Renders a Crossfade between a loading spinner and the full NodeDetailList when the node is present. This composable contains no Android-specific APIs — overlays (compass, bottom sheets, permission launchers) are handled by the platform-specific screen wrapper.
Scrollable list of node detail sections: identity, device actions (including telemetry and position), hardware details, notes, and administration.
Scrollable list of node detail sections: identity, device actions (including telemetry and position), hardware details, notes, and administration.
A SelectableMetricCard-based position item that matches the visual style of DeviceMetricsCard, SignalMetricsCard, and other metric cards. Replaces the previous table-row layout with a card that shows timestamp, coordinates, satellites, altitude, speed, and heading.
A SelectableMetricCard-based position item that matches the visual style of DeviceMetricsCard, SignalMetricsCard, and other metric cards. Replaces the previous table-row layout with a card that shows timestamp, coordinates, satellites, altitude, speed, and heading.
A styled section container for settings screens.
A styled section container for settings screens.
Shared Acknowledgements screen listing the open-source libraries the app is built on, using the multiplatform LibrariesContainer composable and produceLibraries from the AboutLibraries KMP library.
Leverages the full M3 LibrariesContainer API:
header: app branding with descriptive text
divider: HorizontalDivider between library items for clean visual separation
footer: total library count summary
contentPadding: proper LazyColumn padding (avoids clipping during scroll)
badges: per-row metadata badges (author, version, description, license, funding) via LibraryBadges
license dialog: built-in license dialog wired by default via the container's licenseDialogBody
Each platform provides a jsonProvider lambda that loads the library definitions JSON
Shared Acknowledgements screen listing the open-source libraries the app is built on, using the multiplatform LibrariesContainer composable and produceLibraries from the AboutLibraries KMP library.
Leverages the full M3 LibrariesContainer API:
header: app branding with descriptive text
divider: HorizontalDivider between library items for clean visual separation
footer: total library count summary
contentPadding: proper LazyColumn padding (avoids clipping during scroll)
badges: per-row metadata badges (author, version, description, license, funding) via LibraryBadges
license dialog: built-in license dialog wired by default via the container's licenseDialogBody
Each platform provides a jsonProvider lambda that loads the library definitions JSON
Dedicated settings screen for node list display options (density and field visibility). Provides a focused interface for customizing how nodes are rendered in the list view.
Material 3 expressive design highlights:
Section organization: NodeLayoutSettings component handles grouped layout with cards
Visual hierarchy: MainAppBar provides clear screen identity and navigation
Spacing rhythm: 16dp content padding with 16dp section gaps for consistent rhythm
Scrollability: Full vertical scroll support for all display variations
Responsive preview: Live preview updates as density and field options change
Provides access to node display preferences and update methods
Callback when user requests navigation back (back button in app bar)
Dedicated settings screen for node list display options (density and field visibility). Provides a focused interface for customizing how nodes are rendered in the list view.
Material 3 expressive design highlights:
Section organization: NodeLayoutSettings component handles grouped layout with cards
Visual hierarchy: MainAppBar provides clear screen identity and navigation
Spacing rhythm: 16dp content padding with 16dp section gaps for consistent rhythm
Scrollability: Full vertical scroll support for all display variations
Responsive preview: Live preview updates as density and field options change
Provides access to node display preferences and update methods
Callback when user requests navigation back (back button in app bar)