Graphite/frontend/src/components
Keavon Chambers 9db91a1ac4
Use the SpectrumInput widget for the adjustment node Properties panel layouts (#4105)
2026-05-05 03:42:44 -07:00
..
floating-menus Port the color picker popover to a Rust-defined layout (#4102) 2026-05-05 02:47:53 -07:00
layout Fix menu bar sub-menus being incorrectly positioned (#4073) 2026-04-28 18:51:45 -07:00
panels Prep for the RC5 release of the desktop app 2026-05-01 21:58:16 -07:00
views Optimize the node graph panel while panning 2026-05-01 17:02:10 +00:00
widgets Use the SpectrumInput widget for the adjustment node Properties panel layouts (#4105) 2026-05-05 03:42:44 -07:00
window Fix panel docking bugs and polish its behavior (#4087) 2026-05-01 17:02:10 +00:00
Editor.svelte Port the color picker popover to a Rust-defined layout (#4102) 2026-05-05 02:47:53 -07:00
README.md Refactor the TypeScript data flow for full type safety and auto-generation of Rust types (#3865) 2026-03-09 16:35:04 -07:00

README.md

Overview of /frontend/src/components/

Each component represents a (usually reusable) part of the Graphite editor GUI.

Floating Menus: floating-menus/

The temporary UI areas with dark backgrounds which hover over the top of the editor window content. Examples include menu lists, popovers, and dialogs.

Layout: layout/

Useful containers that control the flow of content held within.

Panels: panels/

The dockable tabbed regions like the Document, Properties, Layers, Data, and Welcome panels.

Views: views/

Content views rendered within panels, such as the node graph.

Widgets: widgets/

The interactive input items used to display information and provide user control.

Window: window/

The building blocks for the Title Bar, Workspace, and Status Bar within an editor application window.

Svelte tips and tricks

This section contains a growing list of quick reference information for helpful Svelte solutions and best practices. Feel free to add to this to help contributors learn things, or yourself remember tricks you'll likely forget in a few months.

Bi-directional props

The component declares this:

// The dispatcher that sends the changed value as a custom event to the parent
const dispatch = createEventDispatcher<{ theBidirectionalProperty: number }>();

// The prop
export let theBidirectionalProperty: number;

// Called only when `theBidirectionalProperty` is changed from outside this component via its props
$: console.log(theBidirectionalProperty);

// Example of a method that would update the value
function doSomething() {
	dispatch("theBidirectionalProperty", SOME_NEW_VALUE);
},

Users of the component do this for theCorrespondingDataEntry to be a two-way binding:

let theCorrespondingDataEntry = 42;
<DropdownInput
	theBidirectionalProperty={theCorrespondingDataEntry}
	on:theBidirectionalProperty={({ detail }) => { theCorrespondingDataEntry = detail; }}
/>