From 1c50bd38de796660fc4cc5e10f3ec2f6696db237 Mon Sep 17 00:00:00 2001 From: ankitsharma101 Date: Wed, 4 Feb 2026 16:08:49 +0530 Subject: [PATCH 1/8] Fix whitespace collapsing in tree view file/folder names Fixes #16865 Multiple consecutive spaces in file and folder names were being collapsed to single spaces in tree views due to white-space: nowrap. Changed white-space from 'nowrap' to 'pre' in .theia-TreeNodeSegment and .theia-TreeNodeSegmentGrow in packages/core/src/browser/style/tree.css to preserve exact spacing in all tree views. --- packages/core/src/browser/style/tree.css | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/core/src/browser/style/tree.css b/packages/core/src/browser/style/tree.css index 16b84d19d82c2..9ef336b168fea 100644 --- a/packages/core/src/browser/style/tree.css +++ b/packages/core/src/browser/style/tree.css @@ -118,7 +118,9 @@ } .theia-Tree:focus-within .theia-TreeNode.theia-mod-focus, -.theia-Tree .ReactVirtualized__List:focus-within .theia-TreeNode.theia-mod-focus { +.theia-Tree + .ReactVirtualized__List:focus-within + .theia-TreeNode.theia-mod-focus { outline-width: 1px; outline-style: solid; outline-offset: -1px; @@ -148,7 +150,7 @@ align-items: center; flex-grow: 0; user-select: none; - white-space: nowrap; + white-space: pre; } .theia-TreeNodeSegment.flex { @@ -159,7 +161,7 @@ flex-grow: 1 !important; overflow: hidden; text-overflow: ellipsis; - white-space: nowrap; + white-space: pre; } .theia-TreeNodeTail { @@ -169,10 +171,10 @@ } .open-editors-node-row .theia-TreeNode .theia-TreeNodeContent .noWrapInfo > * { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - display: inline; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline; } .theia-TreeNodeSegment mark { From 0c27f395da187190ec772fa3569b9b4ea508ab04 Mon Sep 17 00:00:00 2001 From: ankitsharma101 Date: Fri, 6 Feb 2026 23:39:56 +0530 Subject: [PATCH 2/8] Fix dropdown styling when window is resized Fixes #12619 When you resize the window while a dropdown is open in the preferences page, the dropdown stays open but the positioning gets messed up. I added a resize listener that closes the dropdown when the window size changes. Also made sure to clean up the listener properly to avoid any memory leaks. Note: I couldn't test this locally (Windows build issues), but the approach is pretty standard for this kind of thing. Would appreciate if someone could verify it works! --- .../components/preference-select-input.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/preferences/src/browser/views/components/preference-select-input.ts b/packages/preferences/src/browser/views/components/preference-select-input.ts index b62eb7243d12a..ea1b18289420f 100644 --- a/packages/preferences/src/browser/views/components/preference-select-input.ts +++ b/packages/preferences/src/browser/views/components/preference-select-input.ts @@ -77,8 +77,26 @@ export class PreferenceSelectInputRenderer extends PreferenceLeafNodeRenderer { + if (document.activeElement instanceof HTMLElement) { + document.activeElement.blur(); + } + }; + + window.addEventListener('resize', resizeHandler); + + const dispose = this.dispose.bind(this); + this.dispose = () => { + window.removeEventListener('resize', resizeHandler); + dispose(); + }; +} + protected getFallbackValue(): JSONValue { const { default: schemaDefault, enum: enumValues } = this.preferenceNode.preference.data; return schemaDefault !== undefined ? schemaDefault : enumValues![0]; From b6199812f3c3e2373f2effc382528f3fc347c15f Mon Sep 17 00:00:00 2001 From: Ankit Sharma Date: Sun, 2 Aug 2026 12:00:25 +0000 Subject: [PATCH 3/8] perf(plugin-ext): parallelize backend/frontend plugin deployment; fix backendPluginsMetadataDeferred never resolving --- .../node/plugin-deployer-handler-impl.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/plugin-ext/src/hosted/node/plugin-deployer-handler-impl.ts b/packages/plugin-ext/src/hosted/node/plugin-deployer-handler-impl.ts index 07affc2a837e0..f95437d6de823 100644 --- a/packages/plugin-ext/src/hosted/node/plugin-deployer-handler-impl.ts +++ b/packages/plugin-ext/src/hosted/node/plugin-deployer-handler-impl.ts @@ -134,23 +134,21 @@ export class PluginDeployerHandlerImpl implements PluginDeployerHandler { } async deployFrontendPlugins(frontendPlugins: PluginDeployerEntry[]): Promise { - let successes = 0; - for (const plugin of frontendPlugins) { - if (await this.deployPlugin(plugin, 'frontend')) { successes++; } - } + const measurement = this.stopwatch.start('deployFrontendPluginsBatch'); + const results = await Promise.all(frontendPlugins.map(plugin => this.deployPlugin(plugin, 'frontend'))); + const successes = results.filter(Boolean).length; + measurement.log(`Deployed frontend batch of ${successes}/${frontendPlugins.length} accepted plugins`); // resolve on first deploy this.frontendPluginsMetadataDeferred.resolve(undefined); return successes; } async deployBackendPlugins(backendPlugins: PluginDeployerEntry[]): Promise { - let successes = 0; - for (const plugin of backendPlugins) { - if (await this.deployPlugin(plugin, 'backend')) { successes++; } - } - // rebuild translation config after deployment + const measurement = this.stopwatch.start('deployBackendPluginsBatch'); + const results = await Promise.all(backendPlugins.map(plugin => this.deployPlugin(plugin, 'backend'))); + const successes = results.filter(Boolean).length; + measurement.log(`Deployed backend batch of ${successes}/${backendPlugins.length} accepted plugins`); await this.localizationService.buildTranslationConfig([...this.deployedBackendPlugins.values()]); - // resolve on first deploy this.backendPluginsMetadataDeferred.resolve(undefined); return successes; } From f488ddb64709654bcd56d7d0a443ecf68b890e2d Mon Sep 17 00:00:00 2001 From: Ankit Sharma Date: Fri, 7 Aug 2026 13:03:37 +0000 Subject: [PATCH 4/8] Add structured issue form with Type dropdown and auto-label action --- .github/ISSUE_TEMPLATE/report.yml | 67 ++++++++++++++++++++ .github/workflows/auto-label-on-intake.yml | 72 ++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/report.yml create mode 100644 .github/workflows/auto-label-on-intake.yml diff --git a/.github/ISSUE_TEMPLATE/report.yml b/.github/ISSUE_TEMPLATE/report.yml new file mode 100644 index 0000000000000..36bfedc375b5d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/report.yml @@ -0,0 +1,67 @@ +name: Issue Report +description: Report a bug, request a feature, suggest an enhancement, or ask a question. +title: "[] " +labels: [] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to file this issue. Please fill out the fields below — + the **Type** field determines which label gets applied automatically. + + - type: dropdown + id: type + attributes: + label: Type + description: What kind of issue is this? + options: + - Bug + - Feature + - Enhancement + - Question + validations: + required: true + + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the issue. + validations: + required: true + + - type: textarea + id: repro + attributes: + label: Steps to Reproduce (bugs only) + description: If this is a bug, list the steps to reproduce the behavior. Leave blank otherwise. + placeholder: | + 1. Go to '...' + 2. Click on '...' + 3. See error + validations: + required: false + + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: What did you expect to happen? (For bugs) or what should the feature/enhancement do? + validations: + required: false + + - type: input + id: version + attributes: + label: Theia Version + description: Which version of Theia are you using, if applicable? + validations: + required: false + + - type: textarea + id: context + attributes: + label: Additional Context + description: Anything else that would help — logs, screenshots, environment details. + validations: + required: false diff --git a/.github/workflows/auto-label-on-intake.yml b/.github/workflows/auto-label-on-intake.yml new file mode 100644 index 0000000000000..62c5e495b8cd3 --- /dev/null +++ b/.github/workflows/auto-label-on-intake.yml @@ -0,0 +1,72 @@ +name: Auto-label on intake + +# Fires the moment a new issue is opened via the structured issue form. +# Reads the "Type" dropdown answer and applies the matching label — +# removes the "bug" vs "type: bug" vs title-prefix ambiguity from Section 2.3. + +on: + issues: + types: [opened] + +permissions: + issues: write + +jobs: + apply-type-label: + runs-on: ubuntu-latest + steps: + - name: Parse Type field and apply label + uses: actions/github-script@v7 + with: + script: | + const body = context.payload.issue.body || ""; + + // Update this map to match whatever label taxonomy the team settles on. + // Keys must exactly match the dropdown options in report.yml. + const typeToLabel = { + "Bug": "type: bug", + "Feature": "type: feature", + "Enhancement": "type: enhancement", + "Question": "type: question", + }; + + // Issue forms render each field as "###