The schema-driven property registry that powers every settings panel. One source of truth — every property defined as structured data; the renderer dispatches to one of 9 input types.
The schema-driven property registry that powers every settings panel. One source of truth — every property defined as structured data; the renderer dispatches to one of 9 input types.
The toolbar tree is static: tabs/sections/accordions render once and never unmount. Switching nodes changes the content INSIDE sections via useNode, not the tree itself.
InspectorRegistry at module load — side-effect import in index.ts)PropertyDef, PropertyInput, SectionDef, ShorthandModeregisterProperties, overrideProperty, unregisterProperty, registerSectionDef, getSectionDefs, getProperties, searchProperties+ picker for non-pinned propertiesinspector/registry/properties/ (one file per domain):
sectionDefs.ts — sections (id, title, tab, icon, sortOrder)typography.ts — Font, size, weight, color, alignment + advancedbackground.ts — Color, image, pattern, gradient + clip/blendappearance.ts — Styles section: opacity, shadow, radius + Border / Ring / Outline / Divide bundleseffects.ts — Filter + Backdrop bundles, transition timing, Transforms (scale, rotate, translate, skew, origin, GPU/will-change)layout.ts — Size (width, height, min/max, aspect)display.ts — Position, inset, order + visibility/overflow/cursor/z-index/pointer-events/user-selectaria.ts — ARIA labels, roles, focus, live regionsalignment.ts — Layout direction, gap, align/justify, padding, margininteractions.ts — Action (custom) + hover stylesComponents that need bespoke settings beyond the universal property set ship a MainTab component:
inspector/mainTabs/<Name>MainTab.tsx
Example: DropdownMainTab.tsx, TabsMainTab.tsx. Each defineComponent references its settings (and optional advancedSettings) — the toolbar shell renders these when that node type is selected, alongside the universal sections.
When adding a new component, always pair it with a MainTab unless the universal properties cover everything (rare — see registration).
searchProperties() powers the search bar — fuzzy matches property labels and section titles. Cmd/Ctrl+F opens.
Pinned properties stay always-visible at the top of their section. Non-pinned ones are accessible via AccordionAddMenu (the + button at the section bottom). State held in inspector/inspectorPin/.