diff --git a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs index a1062f9cde..c7838638bd 100644 --- a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs @@ -362,6 +362,7 @@ pub struct TextAreaInput { pub value: String, pub label: Option, pub disabled: bool, + pub monospace: bool, // Tooltips #[serde(rename = "tooltipLabel")] diff --git a/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs b/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs index ef24204e7f..e58d93cd8d 100644 --- a/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs +++ b/editor/src/messages/portfolio/document/data_panel/data_panel_message_handler.rs @@ -584,7 +584,7 @@ impl TableRowLayout for f64 { "Number (f64)".to_string() } fn element_page(&self, _data: &mut LayoutData) -> Vec { - let widgets = vec![TextLabel::new(self.to_string()).widget_instance()]; + let widgets = vec![NumberInput::new(Some(*self)).disabled(true).max_width(220).display_decimal_places(20).widget_instance()]; vec![LayoutGroup::row(widgets)] } } @@ -597,7 +597,7 @@ impl TableRowLayout for u32 { "Number (u32)".to_string() } fn element_page(&self, _data: &mut LayoutData) -> Vec { - let widgets = vec![TextLabel::new(self.to_string()).widget_instance()]; + let widgets = vec![NumberInput::new(Some(*self as f64)).disabled(true).max_width(220).display_decimal_places(20).widget_instance()]; vec![LayoutGroup::row(widgets)] } } @@ -610,7 +610,8 @@ impl TableRowLayout for u64 { "Number (u64)".to_string() } fn element_page(&self, _data: &mut LayoutData) -> Vec { - let widgets = vec![TextLabel::new(self.to_string()).widget_instance()]; + // TODO: Make this robust for large u64 values that don't fit in f64 (above roughly 2^53). Perhaps using a bigint kind of approach through the widget's data flow. + let widgets = vec![NumberInput::new(Some(*self as f64)).disabled(true).max_width(220).display_decimal_places(20).widget_instance()]; vec![LayoutGroup::row(widgets)] } } @@ -642,7 +643,7 @@ impl TableRowLayout for String { } } fn element_page(&self, _data: &mut LayoutData) -> Vec { - let widgets = vec![TextAreaInput::new(self.to_string()).disabled(true).widget_instance()]; + let widgets = vec![TextAreaInput::new(self.to_string()).monospace(true).disabled(true).widget_instance()]; vec![LayoutGroup::row(widgets)] } } diff --git a/editor/src/messages/portfolio/document/node_graph/node_properties.rs b/editor/src/messages/portfolio/document/node_graph/node_properties.rs index d0745c9a1d..1d74cd3130 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_properties.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_properties.rs @@ -2355,7 +2355,12 @@ pub mod choice { .map(|(item, metadata)| { let updater = updater_factory(); let committer = committer_factory(); - MenuListEntry::new(metadata.name).label(metadata.label).on_update(move |_| updater(item)).on_commit(committer) + MenuListEntry::new(metadata.name) + .label(metadata.label) + .tooltip_label(metadata.label) + .tooltip_description(metadata.description.unwrap_or_default()) + .on_update(move |_| updater(item)) + .on_commit(committer) }) .collect() }) diff --git a/frontend/src/components/Editor.svelte b/frontend/src/components/Editor.svelte index bc507dc93a..b93c6106b3 100644 --- a/frontend/src/components/Editor.svelte +++ b/frontend/src/components/Editor.svelte @@ -261,9 +261,27 @@ font-weight: 400; font-size: 14px; line-height: 1; + tab-size: 4; color: var(--color-e-nearwhite); } + body, + textarea, + input { + &::selection { + background-color: var(--color-4-dimgray); + + // Target only Safari + @supports (background: -webkit-named-image(i)) { + & { + // Setting an alpha value opts out of Safari's "fancy" (but not visible on dark backgrounds) selection highlight rendering + // https://stackoverflow.com/a/71753552/775283 + background-color: rgba(var(--color-4-dimgray-rgb), calc(254 / 255)); + } + } + } + } + svg, img { display: block; diff --git a/frontend/src/components/panels/Data.svelte b/frontend/src/components/panels/Data.svelte index d4876e4fe5..b524ecefa8 100644 --- a/frontend/src/components/panels/Data.svelte +++ b/frontend/src/components/panels/Data.svelte @@ -54,11 +54,16 @@ .widget-span:has(.text-area-input) { flex: 1 1 100%; - .text-area-input textarea { - height: 100%; - margin-top: 0; - margin-bottom: 0; - resize: none; + .text-area-input { + margin: 0; + padding: 4px 0; + + textarea { + height: 100%; + margin-top: 0; + margin-bottom: 0; + resize: none; + } } } } diff --git a/frontend/src/components/views/Graph.svelte b/frontend/src/components/views/Graph.svelte index 4a2a0618e4..0dabf9b50e 100644 --- a/frontend/src/components/views/Graph.svelte +++ b/frontend/src/components/views/Graph.svelte @@ -519,7 +519,7 @@ style:--node-chain-area-left-extension={layerChainWidth !== 0 ? layerChainWidth + 0.5 : 0} data-tooltip-label={nodeNameTooltipLabel(node)} data-tooltip-description={` - ${(description || "").trim()}${editor.inDevelopmentMode() ? `\n\nID: ${node.id}. Position: (${node.position[0]}, ${node.position[1]}).` : ""} + ${(description || "").trim()}${editor.inDevelopmentMode() ? `\n\n*ID: ${node.id}. Position: (${node.position[0]}, ${node.position[1]}).*` : ""} `.trim()} data-node={node.id} > @@ -682,7 +682,7 @@ style:--data-color-dim={`var(--color-data-${(node.primaryOutput?.dataType || "General").toLowerCase()}-dim)`} data-tooltip-label={nodeNameTooltipLabel(node)} data-tooltip-description={` - ${(description || "").trim()}${editor.inDevelopmentMode() ? `\n\nID: ${node.id}. Position: (${node.position[0]}, ${node.position[1]}).` : ""} + ${(description || "").trim()}${editor.inDevelopmentMode() ? `\n\n*ID: ${node.id}. Position: (${node.position[0]}, ${node.position[1]}).*` : ""} `.trim()} data-node={node.id} > diff --git a/frontend/src/components/widgets/buttons/BreadcrumbTrailButtons.svelte b/frontend/src/components/widgets/buttons/BreadcrumbTrailButtons.svelte index 8d4de70086..a6db70ea28 100644 --- a/frontend/src/components/widgets/buttons/BreadcrumbTrailButtons.svelte +++ b/frontend/src/components/widgets/buttons/BreadcrumbTrailButtons.svelte @@ -12,11 +12,31 @@ export let tooltipShortcut: ActionShortcut | undefined = undefined; // Callbacks export let action: (index: number) => void; + + function truncate(label: string): string { + let maxLength = 40; + + if (label.length <= maxLength) return label; + + let truncated = label; + const hasQuotes = label.startsWith(`"`) && label.endsWith(`"`); + + if (hasQuotes) { + truncated = label.slice(1, -1); + maxLength -= 2; + } + + truncated = truncated.slice(0, maxLength - 1) + "…"; + + if (hasQuotes) truncated = `"${truncated}"`; + + return truncated; + } {#each labels as label, index} - !disabled && index !== labels.length - 1 && action(index)} /> + !disabled && index !== labels.length - 1 && action(index)} /> {/each} diff --git a/frontend/src/components/widgets/inputs/FieldInput.svelte b/frontend/src/components/widgets/inputs/FieldInput.svelte index 0288141a83..2be753e261 100644 --- a/frontend/src/components/widgets/inputs/FieldInput.svelte +++ b/frontend/src/components/widgets/inputs/FieldInput.svelte @@ -22,6 +22,7 @@ export let label: string | undefined = undefined; export let spellcheck = false; export let disabled = false; + export let monospace = false; export let narrow = false; export let textarea = false; export let tooltipLabel: string | undefined = undefined; @@ -75,7 +76,7 @@ - + {#if !textarea} diff --git a/frontend/src/components/widgets/inputs/TextAreaInput.svelte b/frontend/src/components/widgets/inputs/TextAreaInput.svelte index edaa502b20..51630d5e77 100644 --- a/frontend/src/components/widgets/inputs/TextAreaInput.svelte +++ b/frontend/src/components/widgets/inputs/TextAreaInput.svelte @@ -11,6 +11,7 @@ export let tooltipDescription: string | undefined = undefined; export let tooltipShortcut: ActionShortcut | undefined = undefined; export let disabled = false; + export let monospace = false; let self: FieldInput | undefined; let editing = false; @@ -57,6 +58,7 @@ spellcheck={true} {label} {disabled} + {monospace} {tooltipLabel} {tooltipDescription} {tooltipShortcut}