You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: every registered extension appears -- the list derives from nouns, not tray tools (goal 0237)
Settings > Extensions was built off ATLAS_TOOLS (tray tools only), so
diagram and sheet -- both file-drop-only nouns with no tray identity --
were invisible even though they're fully registered canvas nouns.
The list now derives from every registered noun: tray tools plus
tool-less nouns (diagram, sheet), normalized into one ExtensionRowSource
shape (extensionMeta.ts) so ExtensionRow.tsx never branches on which
kind of noun it's rendering. Diagram and sheet declare their own
icon/label/description/disableScopeNote via a new optional `extension`
field on AtlasNounContent, read back by atlasNounRegistry.ts's
toolLessNounExtensions().
Disabling a tool-less noun has no tray button to remove, so its row
states the honest, narrower scope: it gates useAtlasNativeFileDrop.ts's
own drop routing (extracted into the pure, testable resolveFileDropKind)
and, for diagram, dispatchObjectEdit's embedded-engine door (already
keyed off object.Kind since goal 0244).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
Copy file name to clipboardExpand all lines: frontend/src/atlas/atlasNounDeclarationFields.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -77,7 +77,7 @@
77
77
{
78
78
"field": "content",
79
79
"legalValues": "an object with Component (a React component accepting { object, mirrorVersion }), ariaLabelKey (a string), and role ('img' or undefined) -- or null",
80
-
"meaning": "this noun's own placed-instance content contribution. registerNoun() feeds it into the board-object content registry (atlasNounRegistry.ts's registerBoardObjectContent) whenever boardObjectKind is non-null, killing AtlasBoardObjectNode.tsx's former per-Kind hand branch. A tool-less noun (diagram) calls registerBoardObjectContent directly instead of declaring this field at all, since it has no AtlasToolShape to satisfy. mirrorVersion bumps on a live disk change to a fileBacked Kind's own mirrored file (see fileBacked below) -- a non-file-backed Component simply ignores it."
80
+
"meaning": "this noun's own placed-instance content contribution. registerNoun() feeds it into the board-object content registry (atlasNounRegistry.ts's registerBoardObjectContent) whenever boardObjectKind is non-null, killing AtlasBoardObjectNode.tsx's former per-Kind hand branch. A tool-less noun (diagram, sheet) calls registerBoardObjectContent directly instead of declaring this field at all, since it has no AtlasToolShape to satisfy -- it instead sets this same content shape's own optional `extension` member (icon, label, description, disableScopeNote) so Settings > Extensions can still render an honest row for it. mirrorVersion bumps on a live disk change to a fileBacked Kind's own mirrored file (see fileBacked below) -- a non-file-backed Component simply ignores it."
// extension (goal 0237 S3 rider): the Settings > Extensions row for
50
+
// this tool-less noun. disableScopeNote states its scope honestly --
51
+
// there is no tray button to hide, so the toggle instead gates
52
+
// useAtlasNativeFileDrop.ts's own routing (a disabled drop falls
53
+
// through to the plain card path) and dispatchObjectEdit's
54
+
// embedded-engine arm (objectSeams.ts, already keyed off object.Kind).
55
+
extension: {
56
+
icon: FlowchartIcon,
57
+
label: 'Diagram',
58
+
description: 'View and edit diagrams — draw.io files open in the real editor.',
59
+
disableScopeNote: 'Turning this off stops new diagrams from landing on drop and closes the built-in editor. Diagrams already on the board keep working.',
// extension (goal 0237 S3 rider): the Settings > Extensions row for
45
+
// this tool-less noun. disableScopeNote states its scope honestly --
46
+
// there is no tray button to hide and no embedded editor to close
47
+
// (editRoute above is a static 'external-app', which dispatchObjectEdit
48
+
// never gates), so the toggle only affects
49
+
// useAtlasNativeFileDrop.ts's own routing.
50
+
extension: {
51
+
icon: ColumnsIcon,
52
+
label: 'Sheet',
53
+
description: 'Preview spreadsheets and CSV files dropped onto the board.',
54
+
disableScopeNote: 'Turning this off stops new sheets from landing on drop. Sheets already on the board keep working, including opening in your default app.',
0 commit comments