`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.
34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
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. 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',
|
|
direction: 'horizontal',
|
|
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: '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,
|
|
},
|
|
],
|
|
};
|