0.10.8: main.archify opens with its top-level panels collapsed

Shared, Diagrams, Registries and Decisions start closed on the model page;
folders inside keep their own default. Open or closed is still kept in
the webview state while the page is open.
This commit is contained in:
root-at-skic committed 2026-11-08 20:48:35 +02:00
1 parent 86a8adf03b
commit c71296b01a
4 files changed
+12 -7

No files matched your search

+4
View File
@@ -1,5 +1,9 @@
# Changelog # Changelog
## 0.10.8 — 2026-11-08
- **A model opens as its outline.** On `main.archify` the top-level panels (Shared, Diagrams, Registries, Decisions) start collapsed; open the one you need. What you open or close is kept while the page is open.
## 0.10.7 — 2026-11-08 ## 0.10.7 — 2026-11-08
- **Model | Graph | Source looks like 2D | 3D.** The selected view is the same inset pill, the same height as the other toolbar controls. - **Model | Graph | Source looks like 2D | 3D.** The selected view is the same inset pill, the same height as the other toolbar controls.
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "archify-vscode-ext", "name": "archify-vscode-ext",
"version": "0.10.7", "version": "0.10.8",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "archify-vscode-ext", "name": "archify-vscode-ext",
"version": "0.10.7", "version": "0.10.8",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@codemirror/autocomplete": "^6.20.4", "@codemirror/autocomplete": "^6.20.4",
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "archify-vscode-ext", "name": "archify-vscode-ext",
"displayName": "Archify Diagram Viewer", "displayName": "Archify Diagram Viewer",
"description": "Archify diagrams in VS Code. Write diagrams as .archify files in YAML: they open as the interactive diagram, with live updates, validation, templates and completion. Also previews Archify's own JSON files (*.architecture.json, …) and opens rendered Archify HTML.", "description": "Archify diagrams in VS Code. Write diagrams as .archify files in YAML: they open as the interactive diagram, with live updates, validation, templates and completion. Also previews Archify's own JSON files (*.architecture.json, …) and opens rendered Archify HTML.",
"version": "0.10.7", "version": "0.10.8",
"publisher": "root-at-skic", "publisher": "root-at-skic",
"license": "MIT", "license": "MIT",
"sponsor": { "sponsor": {
+5 -4
View File
@@ -208,6 +208,7 @@ function bridgeScript(options: PageOptions): string {
}, true); }, true);
// Collapsible panels of the model page; open/closed is kept in the webview state. // Collapsible panels of the model page; open/closed is kept in the webview state.
// The model page's top-level panels start closed: a model opens as its outline.
function panelStates() { return (vscode.getState() || {}).modelPanels || {}; } function panelStates() { return (vscode.getState() || {}).modelPanels || {}; }
function panel(key, className, title, count, defaultOpen) { function panel(key, className, title, count, defaultOpen) {
// count: a number or a short text such as "3 files". // count: a number or a short text such as "3 files".
@@ -624,7 +625,7 @@ function bridgeScript(options: PageOptions): string {
live.hidden = true; live.hidden = true;
body.appendChild(live); body.appendChild(live);
var count = model.groups.reduce(function (n, g) { return n + g.diagrams.length; }, 0); var count = model.groups.reduce(function (n, g) { return n + g.diagrams.length; }, 0);
var diagramsPanel = panel('diagrams', 'archify-model-diagrams', 'Diagrams', count, true); var diagramsPanel = panel('diagrams', 'archify-model-diagrams', 'Diagrams', count, false);
body.appendChild(diagramsPanel); body.appendChild(diagramsPanel);
if (!count) diagramsPanel.appendChild(el('p', 'archify-model-empty', 'No diagrams yet. Add .archify files next to main.archify or in subfolders.')); if (!count) diagramsPanel.appendChild(el('p', 'archify-model-empty', 'No diagrams yet. Add .archify files next to main.archify or in subfolders.'));
model.groups.forEach(function (group) { model.groups.forEach(function (group) {
@@ -658,7 +659,7 @@ function bridgeScript(options: PageOptions): string {
byFile[element.file].push(element); byFile[element.file].push(element);
}); });
files.sort(); files.sort();
var registryPanel = panel('registry', 'archify-model-registry', 'Registries', files.length + (files.length === 1 ? ' file' : ' files'), true); var registryPanel = panel('registry', 'archify-model-registry', 'Registries', files.length + (files.length === 1 ? ' file' : ' files'), false);
body.appendChild(registryPanel); body.appendChild(registryPanel);
files.forEach(function (file) { files.forEach(function (file) {
var elements = byFile[file].slice().sort(function (a, b) { return a.line - b.line; }); var elements = byFile[file].slice().sort(function (a, b) { return a.line - b.line; });
@@ -676,7 +677,7 @@ function bridgeScript(options: PageOptions): string {
} }
// Decisions: one list, live ones first, superseded and rejected dimmed and last. // Decisions: one list, live ones first, superseded and rejected dimmed and last.
if (model.decisions && model.decisions.length) { if (model.decisions && model.decisions.length) {
var decisionsPanel = panel('decisions', 'archify-model-decisions', 'Decisions', model.decisions.length, true); var decisionsPanel = panel('decisions', 'archify-model-decisions', 'Decisions', model.decisions.length, false);
body.appendChild(decisionsPanel); body.appendChild(decisionsPanel);
var decisionList = el('ul', 'archify-model-list archify-decision-list'); var decisionList = el('ul', 'archify-model-list archify-decision-list');
model.decisions.forEach(function (row) { decisionList.appendChild(decisionRowItem(row)); }); model.decisions.forEach(function (row) { decisionList.appendChild(decisionRowItem(row)); });
@@ -723,7 +724,7 @@ function bridgeScript(options: PageOptions): string {
if (!info) { holder.hidden = true; return; } if (!info) { holder.hidden = true; return; }
holder.hidden = false; holder.hidden = false;
var others = info.people.filter(function (p) { return !p.me; }); var others = info.people.filter(function (p) { return !p.me; });
var livePanel = panel('live', 'archify-model-live is-' + info.state, 'Shared \u00b7 ' + info.name, others.length ? others.length + 1 + ' here' : info.host, true); var livePanel = panel('live', 'archify-model-live is-' + info.state, 'Shared \u00b7 ' + info.name, others.length ? others.length + 1 + ' here' : info.host, false);
var status = el('div', 'archify-live-status'); var status = el('div', 'archify-live-status');
status.appendChild(el('span', 'archify-live-dot')); status.appendChild(el('span', 'archify-live-dot'));
status.appendChild(el('span', 'archify-live-state', (LIVE_STATE[info.state] || info.state) + (info.state === 'online' ? ' on ' + info.host : ''))); status.appendChild(el('span', 'archify-live-state', (LIVE_STATE[info.state] || info.state) + (info.state === 'online' ? ' on ' + info.host : '')));