--- title: Property Panels description: Build property panels with control composables and headless list primitives. --- # Property Panels Property panels in `@open-pencil/vue` are intentionally composable-first. If a panel mostly needs selection-derived values and update actions, prefer composables. If a panel needs reusable array/list structure, use a headless primitive like `PropertyListRoot`. ## Common control composables For standard property sections, start with: - `usePosition()` - `useLayout()` - `useAppearance()` - `useTypography()` - `useExport()` For list-style panels, use: - `useFillControls()` - `useStrokeControls()` - `useEffectsControls()` ## Example: position panel ```vue ``` ## Example: fills panel ```vue ``` ## Rule of thumb - use composables for direct control logic - use structural primitives when repeated list/tree/slot coordination is the hard part ## Related APIs - [usePosition](../api/composables/use-position) - [useLayout](../api/composables/use-layout) - [useAppearance](../api/composables/use-appearance) - [useTypography](../api/composables/use-typography) - [useFillControls](../api/composables/use-fill-controls) - [useStrokeControls](../api/composables/use-stroke-controls) - [useEffectsControls](../api/composables/use-effects-controls) - [PropertyListRoot](../api/components/property-list-root)