From d256687676c4755806113660689d059a07c56b0e Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Wed, 30 Sep 2026 04:09:14 +0000 Subject: [PATCH] plugin-designer skill: reusable by default, pilot before roll-out, one shape per kind of control Three rules for work that spans plugins, in section 3 (Reuse library/ first): - A component that could serve more than one plugin is built once in library/, driven by props, and landed through the build owner, so other plugins adopt it instead of copying it. This replaces "Graduate late". - A new pattern starts on one plugin, built by its owner. A maintainer approves it on the dev server, and only then do the other owners adopt it in their own plugins. - Map controls are round and spaced: MapToolbar's default column of round MapControlButtons, not its grouped square card. Dashboard header-bar buttons are rounded squares with the vertical tabs' radius, var(--vtl-radius, 8px). --- skills/plugin-designer/SKILL.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/skills/plugin-designer/SKILL.md b/skills/plugin-designer/SKILL.md index d85b08250..e90b14336 100644 --- a/skills/plugin-designer/SKILL.md +++ b/skills/plugin-designer/SKILL.md @@ -84,8 +84,17 @@ provided instance. Drop the provide and a host can no longer set your plugin's l - **Don't edit `library/` to customise one plugin.** A library change reaches every plugin that imports it, so it needs every consumer rebuilt. On a team with a build owner, hand library changes to that owner rather than landing them yourself. -- **Graduate late.** Move code into `library/` only when a second plugin needs the same thing - and it takes props instead of hard-coded specifics. +- **Reusable by default.** If a component could serve more than one plugin, build it once in + `library/`, driven by props rather than hard-coded to your plugin, and land it through the build owner. + Other plugins then adopt it instead of copying it. +- **A new pattern is piloted, approved, then rolled out.** It starts on one plugin, built by that + plugin's owner, and a maintainer approves it on the dev server (the Plugin Studio). Only then do + the owners of the other plugins it applies to adopt it, each in their own plugin. +- **One shape per kind of control.** Controls on a map are round and spaced apart: put them in + `MapToolbar`, whose default is a spaced column of round `MapControlButton`s (both in + `library/components/map-controls/`), not its grouped square card (`controls="square"`). Buttons in + a dashboard's header bar are rounded squares with the vertical tabs' corner radius + (`var(--vtl-radius, 8px)` in `library/layouts/VerticalTabsLayout.vue`). ## 4. The universal props — every plugin honours these