From ce5225c655cbb7afbd083dbd8533cea879541d3a Mon Sep 17 00:00:00 2001 From: GerardasB <10091419+GerardasB@users.noreply.github.com> Date: Mon, 7 Sep 2026 18:19:49 +0300 Subject: [PATCH 1/4] Remove unused GenericLocateTool --- .../public/locales/en/AppuiTestProviders.json | 9 - .../src/appui-test-providers.ts | 1 - .../src/tools/GenericLocateTool.ts | 177 ------------------ 3 files changed, 187 deletions(-) delete mode 100644 apps/test-providers/src/tools/GenericLocateTool.ts diff --git a/apps/test-providers/public/locales/en/AppuiTestProviders.json b/apps/test-providers/public/locales/en/AppuiTestProviders.json index 01ffdd12b80..ef978090443 100644 --- a/apps/test-providers/public/locales/en/AppuiTestProviders.json +++ b/apps/test-providers/public/locales/en/AppuiTestProviders.json @@ -74,15 +74,6 @@ "NewYork": "New York" } }, - "uiItemsProvidersTest-GenericLocateTool": { - "keyin": "state generic tool", - "description": "Generic Tool from Provider", - "flyover": "Generic Tool", - "Prompts": { - "identifyElement": "Identify Element", - "identifyPosition": "Identify Position" - } - }, "SetWidgetStateTool": { "keyin": "widget setstate" }, diff --git a/apps/test-providers/src/appui-test-providers.ts b/apps/test-providers/src/appui-test-providers.ts index 5e1a7b42016..71f6206b35e 100644 --- a/apps/test-providers/src/appui-test-providers.ts +++ b/apps/test-providers/src/appui-test-providers.ts @@ -3,7 +3,6 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ export * from "./tools/ContentLayoutTools.js"; -export * from "./tools/GenericLocateTool.js"; export * from "./tools/InspectUiItemInfoTool.js"; export * from "./tools/OpenAbstractModalDialogTool.js"; export * from "./tools/OpenCustomDialogTool.js"; diff --git a/apps/test-providers/src/tools/GenericLocateTool.ts b/apps/test-providers/src/tools/GenericLocateTool.ts deleted file mode 100644 index ad029d66bfc..00000000000 --- a/apps/test-providers/src/tools/GenericLocateTool.ts +++ /dev/null @@ -1,177 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Bentley Systems, Incorporated. All rights reserved. - * See LICENSE.md in the project root for license terms and full copyright notice. - *--------------------------------------------------------------------------------------------*/ - -import { - BeButtonEvent, - CoordinateLockOverrides, - EventHandled, - HitDetail, - IModelApp, - LocateFilterStatus, - LocateResponse, - PrimitiveTool, - SelectionMethod, - SelectionMode, -} from "@itwin/core-frontend"; -import { Point3d } from "@itwin/core-geometry"; -import { UiFramework } from "@itwin/appui-react"; -import { ToolbarItemUtilities } from "@itwin/appui-abstract"; -import { AppUiTestProviders } from "../AppUiTestProviders.js"; -import genericToolSvg from "./generic-tool.svg"; - -/** Sample Primitive tool where user selects an element for processing */ -export class GenericLocateTool extends PrimitiveTool { - public userPoint: Point3d | undefined; - public elementId: string | undefined; - public static override get toolId() { - return "uiItemsProvidersTest-GenericLocateTool"; - } - public static get toolStringKey() { - return `tools.${GenericLocateTool.toolId}.`; - } - public static override iconSpec = genericToolSvg; - public static useDefaultPosition = false; - public override autoLockTarget(): void {} // NOTE: For selecting elements we only care about iModel, so don't lock target model automatically. - protected wantSelectionClearOnMiss(_ev: BeButtonEvent): boolean { - return SelectionMode.Replace === this.getSelectionMode(); - } - protected wantPickableDecorations(): boolean { - return false; - } // Allow pickable decorations selection to be independent of manipulators... - protected getSelectionMethod(): SelectionMethod { - return SelectionMethod.Pick; - } - protected getSelectionMode(): SelectionMode { - return SelectionMode.Replace; - } - public override requireWriteableTarget() { - return false; - } - public override async filterHit(_hit: HitDetail, _out?: LocateResponse) { - return Promise.resolve(LocateFilterStatus.Accept); - } - - public static getPrompt(name: string): string { - const key = `tools.${this.toolId}.Prompts.${name}`; - return AppUiTestProviders.translate(key); - } - - public async process(_elementId: string, _point?: Point3d) { - // Exit the tool - return this.exitTool(); - } - - public override async onDataButtonUp( - ev: BeButtonEvent - ): Promise { - const hit = await IModelApp.locateManager.doLocate( - new LocateResponse(), - true, - ev.point, - ev.viewport, - ev.inputSource - ); - if (this.elementId === undefined) { - if (hit !== undefined) { - this.elementId = hit.sourceId; - // Process right away if user wants default position - if (GenericLocateTool.useDefaultPosition) - await this.process(hit.sourceId); - else this.setupAndPromptForNextAction(); - } - } else if (!GenericLocateTool.useDefaultPosition) { - this.userPoint = ev.point; - if (hit !== undefined) this.userPoint = hit.hitPoint; - // Process with the defined point - await this.process(this.elementId, this.userPoint); - } - - return EventHandled.Yes; - } - - public override async onResetButtonUp( - _ev: BeButtonEvent - ): Promise { - await this.onReinitialize(); - return EventHandled.No; - } - - protected outputMarkupPrompt(msg: string) { - IModelApp.notifications.outputPrompt(GenericLocateTool.getPrompt(msg)); - } - - public setupAndPromptForNextAction() { - if (!this.elementId) { - this.outputMarkupPrompt("identifyElement"); - } else if (!GenericLocateTool.useDefaultPosition) { - this.outputMarkupPrompt("identifyPosition"); - // Enable snapping for accurate positions - IModelApp.accuSnap.enableSnap(true); - } - } - - public override async onPostInstall() { - await super.onPostInstall(); - - const iModelConnection = UiFramework.getIModelConnection(); - if (!iModelConnection) return; - - if (iModelConnection.selectionSet.size === 1) { - // Process and exit tool - iModelConnection.selectionSet.elements.forEach( - (elementId: string, _val: string, _set: Set) => { - void this.process(elementId); - } - ); - await IModelApp.toolAdmin.startDefaultTool(); - } else { - // Empty all before starting tool - iModelConnection.selectionSet.emptyAll(); - // Show prompt for identifying the element - this.outputMarkupPrompt("identifyElement"); - - IModelApp.toolAdmin.setCursor("arrow"); - IModelApp.toolAdmin.setLocateCircleOn(true); - - IModelApp.toolAdmin.toolState.coordLockOvr = CoordinateLockOverrides.All; - IModelApp.locateManager.initToolLocate(); - IModelApp.locateManager.options.allowDecorations = true; // Always locate to display tool tip even if we reject for adding to selection set... - - // Locate elements - IModelApp.accuSnap.enableLocate(true); - IModelApp.accuSnap.enableSnap(false); - } - } - - public async onRestartTool() { - return this.exitTool(); - } - - public static async startTool(): Promise { - return new GenericLocateTool().run(); - } - - public static getActionButtonDef( - itemPriority: number, - groupPriority?: number - ) { - const overrides = undefined !== groupPriority ? { groupPriority } : {}; - const iconSpec = this.iconSpec; - return ToolbarItemUtilities.createActionButton( - GenericLocateTool.toolId, - itemPriority, - iconSpec, - GenericLocateTool.flyover, - async () => { - await IModelApp.tools.run( - GenericLocateTool.toolId, - IModelApp.viewManager.selectedView, - true - ); - }, - overrides - ); - } -} From b2d2312a711900bc869df56ff80e4a94df96377c Mon Sep 17 00:00:00 2001 From: GerardasB <10091419+GerardasB@users.noreply.github.com> Date: Tue, 8 Sep 2026 01:05:49 +0300 Subject: [PATCH 2/4] Remove usage of @bentley/icons-generic --- apps/test-app/package.json | 1 - apps/test-providers/package.json | 1 - .../src/tools/ContentLayoutTools.tsx | 27 +++++++++++++------ ...mInfoTool.ts => InspectUiItemInfoTool.tsx} | 16 ++++++----- .../src/tools/OpenPopoutDialogTool.tsx | 11 +++++--- .../src/tools/OpenPopoutViewTool.tsx | 13 ++++++--- .../src/tools/OpenSynchronizedViewTool.tsx | 15 +++++++---- docs/storybook/package.json | 1 - .../components/ToolbarComposer.stories.tsx | 2 +- pnpm-lock.yaml | 17 ------------ pnpm-workspace.yaml | 1 - 11 files changed, 56 insertions(+), 49 deletions(-) rename apps/test-providers/src/tools/{InspectUiItemInfoTool.ts => InspectUiItemInfoTool.tsx} (92%) diff --git a/apps/test-app/package.json b/apps/test-app/package.json index 22856aa8af1..9854f25b4e1 100644 --- a/apps/test-app/package.json +++ b/apps/test-app/package.json @@ -62,7 +62,6 @@ "vite-plugin-static-copy": "catalog:" }, "dependencies": { - "@bentley/icons-generic": "catalog:", "@bentley/icons-generic-webfont": "catalog:", "@itwin/appui-abstract": "catalog:", "@itwin/appui-react": "workspace:*", diff --git a/apps/test-providers/package.json b/apps/test-providers/package.json index f0d42fcdaea..0fa65835274 100644 --- a/apps/test-providers/package.json +++ b/apps/test-providers/package.json @@ -47,7 +47,6 @@ "typescript": "~5.6.3" }, "dependencies": { - "@bentley/icons-generic": "catalog:", "@itwin/appui-abstract": "catalog:", "@itwin/appui-react": "workspace:*", "@itwin/components-react": "workspace:*", diff --git a/apps/test-providers/src/tools/ContentLayoutTools.tsx b/apps/test-providers/src/tools/ContentLayoutTools.tsx index 3d7fd9f82da..5088b3a5cf5 100644 --- a/apps/test-providers/src/tools/ContentLayoutTools.tsx +++ b/apps/test-providers/src/tools/ContentLayoutTools.tsx @@ -20,10 +20,13 @@ import { useConditionalValue, } from "@itwin/appui-react"; import { IModelConnection, ScreenViewport, Tool } from "@itwin/core-frontend"; -import { SvgWindow, SvgWindowSplitVertical } from "@itwin/itwinui-icons-react"; - -import layoutRestoreIconSvg from "@bentley/icons-generic/icons/download.svg"; -import layoutSaveIconSvg from "@bentley/icons-generic/icons/upload.svg"; +import { ToolUtilities } from "@itwin/imodel-components-react"; +import { + SvgDownload, + SvgUpload, + SvgWindow, + SvgWindowSplitVertical, +} from "@itwin/itwinui-icons-react"; import { ViewportContent } from "../ui/ViewportContent.js"; function getIModelSpecificKey( @@ -64,9 +67,8 @@ export async function getSavedViewLayoutProps( return savedViewLayoutProps; } -export class SaveContentLayoutTool extends Tool { +class SaveContentLayoutToolBase extends Tool { public static override toolId = "SaveContentLayoutTool"; - public static override iconSpec = layoutSaveIconSvg; public static override get minArgs() { return 0; } @@ -124,9 +126,13 @@ export class SaveContentLayoutTool extends Tool { } } -export class RestoreSavedContentLayoutTool extends Tool { +export const SaveContentLayoutTool = ToolUtilities.defineIcon( + SaveContentLayoutToolBase, + +); + +class RestoreSavedContentLayoutToolBase extends Tool { public static override toolId = "RestoreSavedContentLayoutTool"; - public static override iconSpec = layoutRestoreIconSvg; public static override get minArgs() { return 0; } @@ -182,6 +188,11 @@ export class RestoreSavedContentLayoutTool extends Tool { } } +export const RestoreSavedContentLayoutTool = ToolUtilities.defineIcon( + RestoreSavedContentLayoutToolBase, + +); + function SplitWindowIcon() { const split = useConditionalValue( () => diff --git a/apps/test-providers/src/tools/InspectUiItemInfoTool.ts b/apps/test-providers/src/tools/InspectUiItemInfoTool.tsx similarity index 92% rename from apps/test-providers/src/tools/InspectUiItemInfoTool.ts rename to apps/test-providers/src/tools/InspectUiItemInfoTool.tsx index 6f772984bd6..e7a9ba723db 100644 --- a/apps/test-providers/src/tools/InspectUiItemInfoTool.ts +++ b/apps/test-providers/src/tools/InspectUiItemInfoTool.tsx @@ -2,27 +2,24 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -/** @packageDocumentation - * @module Tools - */ +import * as React from "react"; import { BeButtonEvent, EventHandled, IModelApp, PrimitiveTool, } from "@itwin/core-frontend"; -import inspectIconSvg from "@bentley/icons-generic/icons/search.svg"; +import { ToolUtilities } from "@itwin/imodel-components-react"; +import { SvgSearch } from "@itwin/itwinui-icons-react"; -export class InspectUiItemInfoTool extends PrimitiveTool { +class InspectUiItemInfoToolBase extends PrimitiveTool { private _timerId: number | undefined; private _currentX = 0; private _currentY = 0; private _lastElement: HTMLElement | null = null; - private static _counter = 0; public static override toolId = "InspectUiItemInfoTool"; - public static override iconSpec = inspectIconSvg; public static override get minArgs() { return 0; @@ -153,3 +150,8 @@ export class InspectUiItemInfoTool extends PrimitiveTool { IModelApp.notifications.outputPrompt("click over UI item"); } } + +export const InspectUiItemInfoTool = ToolUtilities.defineIcon( + InspectUiItemInfoToolBase, + +); diff --git a/apps/test-providers/src/tools/OpenPopoutDialogTool.tsx b/apps/test-providers/src/tools/OpenPopoutDialogTool.tsx index 0b19d3c8605..25df1ca4481 100644 --- a/apps/test-providers/src/tools/OpenPopoutDialogTool.tsx +++ b/apps/test-providers/src/tools/OpenPopoutDialogTool.tsx @@ -8,8 +8,9 @@ import { ConditionalBooleanValue, ToolbarItemUtilities, } from "@itwin/appui-abstract"; -import windowAddSvg from "@bentley/icons-generic/icons/window-add.svg"; import { ChildWindowLocationProps, UiFramework } from "@itwin/appui-react"; +import { ToolUtilities } from "@itwin/imodel-components-react"; +import { SvgWindowAdd } from "@itwin/itwinui-icons-react"; import { PopoutDialog } from "../ui/dialogs/PopoutDialog.js"; /** @@ -17,9 +18,8 @@ import { PopoutDialog } from "../ui/dialogs/PopoutDialog.js"; * to activate the tool via the key-in palette using the tools keyin property (which must be unique across * all registered tools). */ -export class OpenPopoutDialogTool extends Tool { +class OpenPopoutDialogToolBase extends Tool { public static override toolId = "appuiTestProviders-OpenPopoutDialogTool"; - public static override iconSpec = windowAddSvg; public static override get minArgs() { return 0; @@ -82,3 +82,8 @@ export class OpenPopoutDialogTool extends Tool { ); } } + +export const OpenPopoutDialogTool = ToolUtilities.defineIcon( + OpenPopoutDialogToolBase, + +); diff --git a/apps/test-providers/src/tools/OpenPopoutViewTool.tsx b/apps/test-providers/src/tools/OpenPopoutViewTool.tsx index e5523b954ec..68dfeb911ff 100644 --- a/apps/test-providers/src/tools/OpenPopoutViewTool.tsx +++ b/apps/test-providers/src/tools/OpenPopoutViewTool.tsx @@ -2,17 +2,17 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ +import * as React from "react"; import { ToolbarItemUtilities } from "@itwin/appui-abstract"; import { ChildWindowLocationProps, UiFramework } from "@itwin/appui-react"; import { IModelApp, Tool } from "@itwin/core-frontend"; -import * as React from "react"; -import windowPopoutSvg from "@bentley/icons-generic/icons/window-new.svg"; +import { ToolUtilities } from "@itwin/imodel-components-react"; +import { SvgWindowPopout } from "@itwin/itwinui-icons-react"; import { PopupTestView } from "../ui/dialogs/PopupTestView.js"; -export class OpenPopoutViewTool extends Tool { +class OpenPopoutViewToolBase extends Tool { private static _counter = 0; public static override toolId = "OpenViewPopout"; - public static override iconSpec = windowPopoutSvg; public static get dialogId(): string { return `appui-test-app:popup-view-dialog-${OpenPopoutViewTool._counter}`; } @@ -79,3 +79,8 @@ export class OpenPopoutViewTool extends Tool { ); } } + +export const OpenPopoutViewTool = ToolUtilities.defineIcon( + OpenPopoutViewToolBase, + +); diff --git a/apps/test-providers/src/tools/OpenSynchronizedViewTool.tsx b/apps/test-providers/src/tools/OpenSynchronizedViewTool.tsx index 2955d908f31..2f719b41ca2 100644 --- a/apps/test-providers/src/tools/OpenSynchronizedViewTool.tsx +++ b/apps/test-providers/src/tools/OpenSynchronizedViewTool.tsx @@ -2,17 +2,17 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ +import * as React from "react"; import { UiFramework } from "@itwin/appui-react"; import { IModelApp, Tool } from "@itwin/core-frontend"; -import * as React from "react"; -import { SynchronizedFloatingView } from "../ui/dialogs/SynchronizedFloatingViewComponent.js"; -import panoramaconSvg from "@bentley/icons-generic/icons/panorama.svg"; +import { ToolUtilities } from "@itwin/imodel-components-react"; import { Dialog } from "@itwin/itwinui-react"; +import { SvgPanorama } from "@itwin/itwinui-icons-react"; +import { SynchronizedFloatingView } from "../ui/dialogs/SynchronizedFloatingViewComponent.js"; -export class OpenSynchronizedViewTool extends Tool { +class OpenSynchronizedViewToolBase extends Tool { private static _counter = 0; public static override toolId = "OpenViewDialog"; - public static override iconSpec = panoramaconSvg; public static get dialogId(): string { return `ui-test-app:popup-view-dialog-${OpenSynchronizedViewTool._counter}`; } @@ -118,3 +118,8 @@ function IModelViewDialog({ ); } + +export const OpenSynchronizedViewTool = ToolUtilities.defineIcon( + OpenSynchronizedViewToolBase, + +); diff --git a/docs/storybook/package.json b/docs/storybook/package.json index 7573a1942b1..d054e826c95 100644 --- a/docs/storybook/package.json +++ b/docs/storybook/package.json @@ -14,7 +14,6 @@ "docs": "betools extract --fileExt=ts,tsx --extractFrom=./src --recursive --out=../../generated-docs/extract" }, "dependencies": { - "@bentley/icons-generic": "catalog:", "@bentley/icons-generic-webfont": "catalog:", "@itwin/appui-abstract": "catalog:", "@itwin/appui-react": "workspace:*", diff --git a/docs/storybook/src/components/ToolbarComposer.stories.tsx b/docs/storybook/src/components/ToolbarComposer.stories.tsx index 5189af8d797..ac125f1fbce 100644 --- a/docs/storybook/src/components/ToolbarComposer.stories.tsx +++ b/docs/storybook/src/components/ToolbarComposer.stories.tsx @@ -32,7 +32,7 @@ import { SvgPlaceholder, SvgRemove, } from "@itwin/itwinui-icons-react"; -import placeholderIcon from "@bentley/icons-generic/icons/placeholder.svg"; +import placeholderIcon from "../../assets/placeholder.svg"; import { AppUiDecorator, InitializerDecorator } from "../Decorators"; import { withResizer } from "../../.storybook/addons/Resizer"; import { createBumpEvent } from "../createBumpEvent"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7511b1a0291..1c265efb737 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,9 +6,6 @@ settings: catalogs: default: - '@bentley/icons-generic': - specifier: ^1.0.34 - version: 1.0.34 '@bentley/icons-generic-webfont': specifier: ^1.0.34 version: 1.0.34 @@ -176,9 +173,6 @@ importers: apps/test-app: dependencies: - '@bentley/icons-generic': - specifier: 'catalog:' - version: 1.0.34 '@bentley/icons-generic-webfont': specifier: 'catalog:' version: 1.0.34 @@ -399,9 +393,6 @@ importers: apps/test-providers: dependencies: - '@bentley/icons-generic': - specifier: 'catalog:' - version: 1.0.34 '@itwin/appui-abstract': specifier: 'catalog:' version: 5.8.1(@itwin/core-bentley@5.8.1) @@ -496,9 +487,6 @@ importers: docs/storybook: dependencies: - '@bentley/icons-generic': - specifier: 'catalog:' - version: 1.0.34 '@bentley/icons-generic-webfont': specifier: 'catalog:' version: 1.0.34 @@ -1913,9 +1901,6 @@ packages: '@bentley/icons-generic-webfont@1.0.34': resolution: {integrity: sha512-5zZgs+himE2vjf39CVlDXMHCFAwSfcoORqJBk3Vji8QVCF8AIX4IX2DO6HlsIAM7szxMNqhz1kd07Xfppro6MA==} - '@bentley/icons-generic@1.0.34': - resolution: {integrity: sha512-IIs1wDcY2oZ8tJ3EZRw0U51M+0ZL3MvwoDYYmhUXaa9/UZqpFoOyLBGaxjirQteWXqTIMm3mFvmC+Nbn1ok4Iw==} - '@bentley/imodeljs-native@5.8.27': resolution: {integrity: sha512-sGNvkjCxspiBWJBFH9/cF23BvrZ1p1zXwjTlXzgpgdOzVM8ZWA2WFIZUo4g6MJOX5OWAD1MNgz5OP3SHC2TINQ==} @@ -9410,8 +9395,6 @@ snapshots: '@bentley/icons-generic-webfont@1.0.34': {} - '@bentley/icons-generic@1.0.34': {} - '@bentley/imodeljs-native@5.8.27': {} '@changesets/apply-release-plan@7.1.1': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0276d05e756..b7a6e02162b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,6 @@ packages: - docs/storybook catalog: - '@bentley/icons-generic': ^1.0.34 '@bentley/icons-generic-webfont': ^1.0.34 '@itwin/appui-abstract': ^5.8.1 '@itwin/build-tools': ^5.8.1 From 0d028626724ce996190a5bcd4b192d785d50e4df Mon Sep 17 00:00:00 2001 From: GerardasB <10091419+GerardasB@users.noreply.github.com> Date: Tue, 8 Sep 2026 01:35:21 +0300 Subject: [PATCH 3/4] Replace usage of custom SVGs --- .../src/frontend/appui/icons/draw.svg | 1 - .../frontend/appui/icons/filter-outlined.svg | 1 - .../src/frontend/appui/icons/filter.svg | 1 - .../src/frontend/appui/icons/rotate.svg | 6 ---- apps/test-providers/src/tools/DynamicTool.svg | 16 ---------- .../src/tools/OpenCustomDialogTool.tsx | 13 +++++--- apps/test-providers/src/tools/SampleTool.svg | 31 ------------------- apps/test-providers/src/tools/SampleTool.tsx | 12 ++++--- ...ettings.ts => ToolWithDynamicSettings.tsx} | 13 +++++--- .../test-providers/src/tools/generic-tool.svg | 1 - .../src/ui/icons/connected-query.svg | 1 - .../ui/icons/visibility-semi-transparent.svg | 1 - .../CustomContentStageUiProvider.tsx | 4 +-- 13 files changed, 28 insertions(+), 73 deletions(-) delete mode 100644 apps/test-app/src/frontend/appui/icons/draw.svg delete mode 100644 apps/test-app/src/frontend/appui/icons/filter-outlined.svg delete mode 100644 apps/test-app/src/frontend/appui/icons/filter.svg delete mode 100644 apps/test-app/src/frontend/appui/icons/rotate.svg delete mode 100644 apps/test-providers/src/tools/DynamicTool.svg delete mode 100644 apps/test-providers/src/tools/SampleTool.svg rename apps/test-providers/src/tools/{ToolWithDynamicSettings.ts => ToolWithDynamicSettings.tsx} (95%) delete mode 100644 apps/test-providers/src/tools/generic-tool.svg delete mode 100644 apps/test-providers/src/ui/icons/connected-query.svg delete mode 100644 apps/test-providers/src/ui/icons/visibility-semi-transparent.svg diff --git a/apps/test-app/src/frontend/appui/icons/draw.svg b/apps/test-app/src/frontend/appui/icons/draw.svg deleted file mode 100644 index b4566be1ab8..00000000000 --- a/apps/test-app/src/frontend/appui/icons/draw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/test-app/src/frontend/appui/icons/filter-outlined.svg b/apps/test-app/src/frontend/appui/icons/filter-outlined.svg deleted file mode 100644 index 9d1baf8551c..00000000000 --- a/apps/test-app/src/frontend/appui/icons/filter-outlined.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/test-app/src/frontend/appui/icons/filter.svg b/apps/test-app/src/frontend/appui/icons/filter.svg deleted file mode 100644 index 8d6efb5bd8e..00000000000 --- a/apps/test-app/src/frontend/appui/icons/filter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/test-app/src/frontend/appui/icons/rotate.svg b/apps/test-app/src/frontend/appui/icons/rotate.svg deleted file mode 100644 index 35f2167f494..00000000000 --- a/apps/test-app/src/frontend/appui/icons/rotate.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/apps/test-providers/src/tools/DynamicTool.svg b/apps/test-providers/src/tools/DynamicTool.svg deleted file mode 100644 index 4065232587c..00000000000 --- a/apps/test-providers/src/tools/DynamicTool.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/apps/test-providers/src/tools/OpenCustomDialogTool.tsx b/apps/test-providers/src/tools/OpenCustomDialogTool.tsx index 849dbc7d5dd..4800ea8f1ee 100644 --- a/apps/test-providers/src/tools/OpenCustomDialogTool.tsx +++ b/apps/test-providers/src/tools/OpenCustomDialogTool.tsx @@ -7,20 +7,20 @@ */ import * as React from "react"; +import { UiFramework } from "@itwin/appui-react"; import { Tool } from "@itwin/core-frontend"; +import { ToolUtilities } from "@itwin/imodel-components-react"; +import { SvgRefresh } from "@itwin/itwinui-icons-react"; import { SampleModalDialog } from "../ui/dialogs/SampleModalDialog.js"; import { AppUiTestProviders } from "../AppUiTestProviders.js"; -import connectedQuerySvg from "../ui/icons/connected-query.svg"; -import { UiFramework } from "@itwin/appui-react"; /** * Immediate tool that will open an example modal dialog.The tool is created and register to allow the user * to activate the tool via the key-in palette using the tools keyin property (which must be unique across * all registered tools). */ -export class OpenCustomDialogTool extends Tool { +class OpenCustomDialogToolBase extends Tool { public static override toolId = "appuiTestProviders-OpenCustomDialogTool"; - public static override iconSpec = connectedQuerySvg; public static override get minArgs() { return 0; @@ -47,3 +47,8 @@ export class OpenCustomDialogTool extends Tool { return "open custom dialog"; } } + +export const OpenCustomDialogTool = ToolUtilities.defineIcon( + OpenCustomDialogToolBase, + +); diff --git a/apps/test-providers/src/tools/SampleTool.svg b/apps/test-providers/src/tools/SampleTool.svg deleted file mode 100644 index fa15b397553..00000000000 --- a/apps/test-providers/src/tools/SampleTool.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/apps/test-providers/src/tools/SampleTool.tsx b/apps/test-providers/src/tools/SampleTool.tsx index e35b2f97f57..b99c3e8dae2 100644 --- a/apps/test-providers/src/tools/SampleTool.tsx +++ b/apps/test-providers/src/tools/SampleTool.tsx @@ -39,8 +39,8 @@ import { UiFramework, } from "@itwin/appui-react"; import { AppUiTestProviders } from "../AppUiTestProviders.js"; -import sampleToolSvg from "./SampleTool.svg"; -import { SvgPlaceholder } from "@itwin/itwinui-icons-react"; +import { SvgFeedback, SvgPlaceholder } from "@itwin/itwinui-icons-react"; +import { ToolUtilities } from "@itwin/imodel-components-react"; enum ToolOptions { Red, @@ -51,10 +51,9 @@ enum ToolOptions { Pink, } -export class SampleTool extends PrimitiveTool { +class SampleToolBase extends PrimitiveTool { // ensure toolId is unique by adding "uiItemsProvidersTest-" prefix public static override toolId = "uiItemsProvidersTest-SampleTool"; - public static override iconSpec = sampleToolSvg; public readonly points: Point3d[] = []; private _showCoordinatesOnPointerMove = false; private _stationFormatterSpec?: FormatterSpec; @@ -730,3 +729,8 @@ export class SampleTool extends PrimitiveTool { return true; } } + +export const SampleTool = ToolUtilities.defineIcon( + SampleToolBase, + +); diff --git a/apps/test-providers/src/tools/ToolWithDynamicSettings.ts b/apps/test-providers/src/tools/ToolWithDynamicSettings.tsx similarity index 95% rename from apps/test-providers/src/tools/ToolWithDynamicSettings.ts rename to apps/test-providers/src/tools/ToolWithDynamicSettings.tsx index 2549323efb0..95f2a429b97 100644 --- a/apps/test-providers/src/tools/ToolWithDynamicSettings.ts +++ b/apps/test-providers/src/tools/ToolWithDynamicSettings.tsx @@ -2,7 +2,7 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ - +import * as React from "react"; import { Point3d } from "@itwin/core-geometry"; import { BeButtonEvent, @@ -19,7 +19,8 @@ import { EnumerationChoice, PropertyDescription, } from "@itwin/appui-abstract"; -import dynamicToolSvg from "./DynamicTool.svg"; +import { ToolUtilities } from "@itwin/imodel-components-react"; +import { SvgCopy } from "@itwin/itwinui-icons-react"; import { AppUiTestProviders } from "../AppUiTestProviders.js"; interface MajorCities { @@ -55,10 +56,9 @@ const cities: MajorCities[] = [ }, ]; -export class ToolWithDynamicSettings extends PrimitiveTool { +class ToolWithDynamicSettingsBase extends PrimitiveTool { public static override toolId = "uiItemsProvidersTest-ToolWithDynamicSettings"; - public static override iconSpec = dynamicToolSvg; public points: Point3d[] = []; private static translate(str: string) { return AppUiTestProviders.translate(`tools.${this.toolId}.${str}`); @@ -242,3 +242,8 @@ export class ToolWithDynamicSettings extends PrimitiveTool { return true; } } + +export const ToolWithDynamicSettings = ToolUtilities.defineIcon( + ToolWithDynamicSettingsBase, + +); diff --git a/apps/test-providers/src/tools/generic-tool.svg b/apps/test-providers/src/tools/generic-tool.svg deleted file mode 100644 index 7f6289cf5ce..00000000000 --- a/apps/test-providers/src/tools/generic-tool.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/test-providers/src/ui/icons/connected-query.svg b/apps/test-providers/src/ui/icons/connected-query.svg deleted file mode 100644 index 4e36856b2cf..00000000000 --- a/apps/test-providers/src/ui/icons/connected-query.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/test-providers/src/ui/icons/visibility-semi-transparent.svg b/apps/test-providers/src/ui/icons/visibility-semi-transparent.svg deleted file mode 100644 index c886fd8f295..00000000000 --- a/apps/test-providers/src/ui/icons/visibility-semi-transparent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/test-providers/src/ui/providers/CustomContentStageUiProvider.tsx b/apps/test-providers/src/ui/providers/CustomContentStageUiProvider.tsx index 2ee4f7f1172..0450f14606a 100644 --- a/apps/test-providers/src/ui/providers/CustomContentStageUiProvider.tsx +++ b/apps/test-providers/src/ui/providers/CustomContentStageUiProvider.tsx @@ -28,11 +28,11 @@ import { import { AppUiTestProviders } from "../../AppUiTestProviders.js"; import { OpenCustomDialogTool } from "../../tools/OpenCustomDialogTool.js"; import { SampleModelessDialog } from "../dialogs/SampleModelessDialog.js"; -import visibilitySemiTransparentSvg from "../icons/visibility-semi-transparent.svg"; import { SelectedElementDataWidgetComponent } from "../widgets/SelectedElementDataWidget.js"; import { SvgActivity, SvgFlag, + SvgVisibilityShow, SvgWindow, SvgWindowAdd, } from "@itwin/itwinui-icons-react"; @@ -56,7 +56,7 @@ export class CustomContentStageUiProvider implements UiItemsProvider { const customActionButton = ToolbarItemUtilities.createActionItem( "custom-action-button", -1, - visibilitySemiTransparentSvg, + , "Custom Action Button", () => { IModelApp.notifications.outputMessage( From 79394e017cd6aa626c3cf3b1ea85c4bccef75223 Mon Sep 17 00:00:00 2001 From: GerardasB <10091419+GerardasB@users.noreply.github.com> Date: Tue, 8 Sep 2026 11:10:12 +0300 Subject: [PATCH 4/4] Update snaps --- ...toolbar-composer-test-1-chromium-linux.png | Bin 3317 -> 3188 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/e2e-tests/tests/toolbar/toolbar-composer.test.ts-snapshots/toolbar-composer-test-1-chromium-linux.png b/e2e-tests/tests/toolbar/toolbar-composer.test.ts-snapshots/toolbar-composer-test-1-chromium-linux.png index 3996cf73c4b225cddc67864041f42a49bf3bab8d..868eca05aa0b7a44543685fdba3693f25845dfd1 100644 GIT binary patch literal 3188 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 QBv=7pW>%&juiSq0Kk7?I_W%F@ literal 3317 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 HaE<;C$~j*U