providers is a panel, not a section in officer's settings

`IntegrationsSettings/index.tsx` has carried the rule since email was extracted
on 2026-08-18: a plugin contributes panels, not settings sections. the
extraction brief said the opposite and the brief was wrong.

settings living in the platform mean this plugin is not self-contained — it
cannot be configured on an older platform, and uninstalling would leave a dead
"Atelier" section in the settings screen for someone to delete by hand.

so: a fourth panel, `atelier-providers`, and the default layout stacks it under
Collections in the right column. smallest and last because it is configured once
and then ignored — but it has to be REACHABLE, which is the whole point.

Generate's empty state pointed at "Settings → Integrations → Atelier". it now
points at the Providers panel, which is where the key actually goes.
This commit is contained in:
2026-08-20 17:58:38 +00:00
parent c892f2e700
commit 2726541ede
6 changed files with 285 additions and 6 deletions
+21 -3
View File
@@ -1,8 +1,15 @@
import type { LayoutNode } from 'officerdev';
// Generate stays narrow and fixed — it is a form, not a working area. Gallery gets the most room: it
// is the main "what did I make" view. Collections is the organising view, smallest of the three. Users
// can resize or rearrange freely; this is only the starting point.
// is the main "what did I make" view. The right column stacks the two organising views: Collections
// above, Providers below.
//
// Providers is here rather than in Officer's settings because a plugin contributes panels, not settings
// sections — the rule `IntegrationsSettings/index.tsx` states for email. It is placed smallest and last
// because it is configured once and then ignored, but it has to be REACHABLE, and a plugin whose only
// configuration screen lives in the platform is not self-contained.
//
// Users can resize or rearrange freely; this is only the starting point.
export const defaultLayout: LayoutNode = {
type: 'group',
id: 'atelier-root',
@@ -10,6 +17,17 @@ export const defaultLayout: LayoutNode = {
children: [
{ node: { type: 'panel', id: 'atelier-generate', appType: 'atelier-generate' }, size: 26 },
{ node: { type: 'panel', id: 'atelier-gallery', appType: 'atelier-gallery' }, size: 48 },
{ node: { type: 'panel', id: 'atelier-collections', appType: 'atelier-collections' }, size: 26 },
{
node: {
type: 'group',
id: 'atelier-side',
direction: 'vertical',
children: [
{ node: { type: 'panel', id: 'atelier-collections', appType: 'atelier-collections' }, size: 60 },
{ node: { type: 'panel', id: 'atelier-providers', appType: 'atelier-providers' }, size: 40 },
],
},
size: 26,
},
],
};