From f108eaa7c501dc07c7f1cd38f8e36842be8637ac Mon Sep 17 00:00:00 2001 From: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Date: Sat, 13 Jun 2026 06:26:15 +0500 Subject: [PATCH] =?UTF-8?q?feat(spec):=20ADR-0047=20=E2=80=94=20Interface?= =?UTF-8?q?=20section=20in=20the=20page=20authoring=20form?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the 'Interface (list pages)' section to the Studio page form, visible when type == 'list': the interfaceConfig composite renders the full Airtable-right-panel equivalent — Source/Source View (iron-rule help text), Levels, Filter By rows, Appearance (Show Description + Allowed Visualizations tags), User Filters (Element style + Fields rows with showCount) and User Actions toggles. Completes the phase-5 authoring surface: views got their End-user controls section in #1792; pages now have the same for interface mode. Browser-verified in Studio against the showcase Task Workbench page. Co-Authored-By: Claude Fable 5 --- packages/spec/src/ui/page.form.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/spec/src/ui/page.form.ts b/packages/spec/src/ui/page.form.ts index 0e3f1d02dd..604a5fc017 100644 --- a/packages/spec/src/ui/page.form.ts +++ b/packages/spec/src/ui/page.form.ts @@ -39,6 +39,21 @@ export const pageForm = defineForm({ { field: 'regions', type: 'repeater', required: true, helpText: 'Layout regions (header, main, sidebar, footer) with components' }, ], }, + { + label: 'Interface (list pages)', + description: 'ADR-0047 interface mode: bind a source view and curate the end-user surface — quick filters, locked visualizations, toolbar actions (Airtable Interfaces parity).', + collapsible: true, + collapsed: true, + visibleOn: "data.type == 'list'", + fields: [ + { + field: 'interfaceConfig', + type: 'composite', + helpText: + 'source/sourceView bind the object view (columns, base filter and sort are inherited — the iron rule); userFilters picks the element style (dropdown / tabs / toggle) and exposed fields; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar.', + }, + ], + }, { label: 'Advanced', description: 'Activation, audience, and accessibility.',