@itwin/frontend-devtools 5.5.0-dev.2 → 5.5.0-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/README.md +1 -0
  3. package/lib/cjs/ClipboardUtilities.js.map +1 -1
  4. package/lib/cjs/FrontEndDevTools.d.ts.map +1 -1
  5. package/lib/cjs/FrontEndDevTools.js +2 -0
  6. package/lib/cjs/FrontEndDevTools.js.map +1 -1
  7. package/lib/cjs/effects/Convolution.js +17 -17
  8. package/lib/cjs/effects/Convolution.js.map +1 -1
  9. package/lib/cjs/effects/EffectTools.js.map +1 -1
  10. package/lib/cjs/effects/Explosion.js.map +1 -1
  11. package/lib/cjs/effects/FlipImage.js +20 -20
  12. package/lib/cjs/effects/FlipImage.js.map +1 -1
  13. package/lib/cjs/effects/LensDistortion.js +21 -21
  14. package/lib/cjs/effects/LensDistortion.js.map +1 -1
  15. package/lib/cjs/effects/Random.js.map +1 -1
  16. package/lib/cjs/effects/Saturation.js +26 -26
  17. package/lib/cjs/effects/Saturation.js.map +1 -1
  18. package/lib/cjs/effects/Snow.js.map +1 -1
  19. package/lib/cjs/effects/Vignette.js +29 -29
  20. package/lib/cjs/effects/Vignette.js.map +1 -1
  21. package/lib/cjs/frontend-devtools.js.map +1 -1
  22. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  23. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  24. package/lib/cjs/tools/ClipTools.js.map +1 -1
  25. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  26. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  27. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  28. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  29. package/lib/cjs/tools/MapLayerTool.js.map +1 -1
  30. package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
  31. package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
  32. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  33. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  34. package/lib/cjs/tools/ProjectExtents.js.map +1 -1
  35. package/lib/cjs/tools/RealityModelTools.js.map +1 -1
  36. package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
  37. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  38. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  39. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  40. package/lib/cjs/tools/SavedViews.js.map +1 -1
  41. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  42. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  43. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  44. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  45. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  46. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  47. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  48. package/lib/cjs/tools/ViewDefinitionDecorator.d.ts +12 -0
  49. package/lib/cjs/tools/ViewDefinitionDecorator.d.ts.map +1 -0
  50. package/lib/cjs/tools/ViewDefinitionDecorator.js +115 -0
  51. package/lib/cjs/tools/ViewDefinitionDecorator.js.map +1 -0
  52. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  53. package/lib/cjs/tools/parseArgs.js.map +1 -1
  54. package/lib/cjs/tools/parseBoolean.js.map +1 -1
  55. package/lib/cjs/tools/parseToggle.js.map +1 -1
  56. package/lib/cjs/ui/Button.js.map +1 -1
  57. package/lib/cjs/ui/CheckBox.js.map +1 -1
  58. package/lib/cjs/ui/ColorInput.js.map +1 -1
  59. package/lib/cjs/ui/ComboBox.js.map +1 -1
  60. package/lib/cjs/ui/DataList.js.map +1 -1
  61. package/lib/cjs/ui/NestedMenu.js.map +1 -1
  62. package/lib/cjs/ui/NumericInput.js.map +1 -1
  63. package/lib/cjs/ui/RadioBox.js.map +1 -1
  64. package/lib/cjs/ui/Slider.js.map +1 -1
  65. package/lib/cjs/ui/TextBox.js.map +1 -1
  66. package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
  67. package/lib/cjs/widgets/FpsTracker.js.map +1 -1
  68. package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
  69. package/lib/cjs/widgets/KeyinField.js.map +1 -1
  70. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  71. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
  72. package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
  73. package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
  74. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  75. package/lib/esm/ClipboardUtilities.js.map +1 -1
  76. package/lib/esm/FrontEndDevTools.d.ts.map +1 -1
  77. package/lib/esm/FrontEndDevTools.js +2 -0
  78. package/lib/esm/FrontEndDevTools.js.map +1 -1
  79. package/lib/esm/effects/Convolution.js +17 -17
  80. package/lib/esm/effects/Convolution.js.map +1 -1
  81. package/lib/esm/effects/EffectTools.js.map +1 -1
  82. package/lib/esm/effects/Explosion.js.map +1 -1
  83. package/lib/esm/effects/FlipImage.js +20 -20
  84. package/lib/esm/effects/FlipImage.js.map +1 -1
  85. package/lib/esm/effects/LensDistortion.js +21 -21
  86. package/lib/esm/effects/LensDistortion.js.map +1 -1
  87. package/lib/esm/effects/Random.js.map +1 -1
  88. package/lib/esm/effects/Saturation.js +26 -26
  89. package/lib/esm/effects/Saturation.js.map +1 -1
  90. package/lib/esm/effects/Snow.js.map +1 -1
  91. package/lib/esm/effects/Vignette.js +29 -29
  92. package/lib/esm/effects/Vignette.js.map +1 -1
  93. package/lib/esm/frontend-devtools.js.map +1 -1
  94. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  95. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  96. package/lib/esm/tools/ClipTools.js.map +1 -1
  97. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  98. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  99. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  100. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  101. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  102. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  103. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  104. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  105. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  106. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  107. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  108. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  109. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  110. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  111. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  112. package/lib/esm/tools/SavedViews.js.map +1 -1
  113. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  114. package/lib/esm/tools/SelectionTools.js.map +1 -1
  115. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  116. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  117. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  118. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  119. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  120. package/lib/esm/tools/ViewDefinitionDecorator.d.ts +12 -0
  121. package/lib/esm/tools/ViewDefinitionDecorator.d.ts.map +1 -0
  122. package/lib/esm/tools/ViewDefinitionDecorator.js +111 -0
  123. package/lib/esm/tools/ViewDefinitionDecorator.js.map +1 -0
  124. package/lib/esm/tools/ViewportTools.js.map +1 -1
  125. package/lib/esm/tools/parseArgs.js.map +1 -1
  126. package/lib/esm/tools/parseBoolean.js.map +1 -1
  127. package/lib/esm/tools/parseToggle.js.map +1 -1
  128. package/lib/esm/ui/Button.js.map +1 -1
  129. package/lib/esm/ui/CheckBox.js.map +1 -1
  130. package/lib/esm/ui/ColorInput.js.map +1 -1
  131. package/lib/esm/ui/ComboBox.js.map +1 -1
  132. package/lib/esm/ui/DataList.js.map +1 -1
  133. package/lib/esm/ui/NestedMenu.js.map +1 -1
  134. package/lib/esm/ui/NumericInput.js.map +1 -1
  135. package/lib/esm/ui/RadioBox.js.map +1 -1
  136. package/lib/esm/ui/Slider.js.map +1 -1
  137. package/lib/esm/ui/TextBox.js.map +1 -1
  138. package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
  139. package/lib/esm/widgets/FpsTracker.js.map +1 -1
  140. package/lib/esm/widgets/GpuProfiler.js.map +1 -1
  141. package/lib/esm/widgets/KeyinField.js.map +1 -1
  142. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  143. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
  144. package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
  145. package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
  146. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  147. package/lib/public/locales/en/FrontendDevTools.json +497 -494
  148. package/package.json +6 -6
@@ -0,0 +1,12 @@
1
+ import { Tool } from "@itwin/core-frontend";
2
+ /** Display in every viewport a green range graphic for each displayed tile tree, plus a red range graphic for each tile tree's content range if defined.
3
+ * @beta
4
+ */
5
+ export declare class ViewDefinitionDecorationTool extends Tool {
6
+ static toolId: string;
7
+ static get minArgs(): number;
8
+ static get maxArgs(): number;
9
+ run(enable?: boolean): Promise<boolean>;
10
+ parseAndRun(...args: string[]): Promise<boolean>;
11
+ }
12
+ //# sourceMappingURL=ViewDefinitionDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewDefinitionDecorator.d.ts","sourceRoot":"","sources":["../../../src/tools/ViewDefinitionDecorator.ts"],"names":[],"mappings":"AAUA,OAAO,EAAgF,IAAI,EAAsB,MAAM,sBAAsB,CAAC;AAmG9I;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,IAAI;IACpD,OAAuB,MAAM,SAAkC;IAC/D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvC,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE"}
@@ -0,0 +1,111 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Tools
7
+ */
8
+ import { ColorDef, LinePixels } from "@itwin/core-common";
9
+ import { GraphicType, IModelApp, OffScreenViewport, Tool, ViewRect } from "@itwin/core-frontend";
10
+ import { parseToggle } from "./parseToggle";
11
+ import { Id64, Logger } from "@itwin/core-bentley";
12
+ import { Transform, Vector2d } from "@itwin/core-geometry";
13
+ class ViewDefinitionDecoration {
14
+ static _instance;
15
+ _removeMe;
16
+ constructor() {
17
+ this._removeMe = IModelApp.viewManager.addDecorator(this);
18
+ }
19
+ stop() {
20
+ if (this._removeMe) {
21
+ this._removeMe();
22
+ this._removeMe = undefined;
23
+ }
24
+ }
25
+ _viewId;
26
+ _loading = false;
27
+ _preloadedFrustum = [];
28
+ async getFrustumForViewId(iModel, viewId, transform = Transform.createIdentity()) {
29
+ return iModel.views.load(viewId).then((result) => {
30
+ // Use the view extents/delta
31
+ let vector;
32
+ if (result.is2d())
33
+ vector = Vector2d.create(result.delta.x, result.delta.y);
34
+ else
35
+ vector = Vector2d.create(result.getExtents().x, result.getExtents().y);
36
+ // create a viewport to the size of the extents to ensure the aspect is correct.
37
+ const vp = OffScreenViewport.create({ view: result, viewRect: new ViewRect(0, 0, vector.x, vector.y) });
38
+ const frustum = vp.getFrustum();
39
+ this._preloadedFrustum.push(frustum.transformBy(transform));
40
+ }).catch((err) => { Logger.logException("FrontendDevTools", err); });
41
+ }
42
+ preload(viewport) {
43
+ this._loading = true;
44
+ const iModel = viewport.iModel;
45
+ const view = viewport.view;
46
+ const viewId = view.id;
47
+ const loadPromises = [];
48
+ loadPromises.push(this.getFrustumForViewId(iModel, viewId));
49
+ if (view.isDrawingView() && view.sectionDrawingInfo.spatialView)
50
+ loadPromises.push(this.getFrustumForViewId(iModel, view.sectionDrawingInfo.spatialView, view.sectionDrawingInfo.drawingToSpatialTransform.inverse()));
51
+ void Promise.all(loadPromises).finally(() => {
52
+ IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);
53
+ this._viewId = viewId;
54
+ this._loading = false;
55
+ });
56
+ }
57
+ /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */
58
+ useCachedDecorations = true;
59
+ decorate(context) {
60
+ if (context.viewport.view.id !== this._viewId && !this._loading) {
61
+ this._preloadedFrustum.length = 0;
62
+ // just clear the decoration if the view is not from a view definition
63
+ if (Id64.isValidId64(context.viewport.view.id))
64
+ this.preload(context.viewport);
65
+ }
66
+ const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);
67
+ const purple = ColorDef.fromString("#800080");
68
+ // The current view's frustum is at the end of the array.
69
+ builder.setSymbology(purple, purple, 5, LinePixels.Code0);
70
+ const endIndex = this._preloadedFrustum.length - 1;
71
+ const currentFrustum = this._preloadedFrustum[endIndex];
72
+ if (currentFrustum)
73
+ builder.addFrustum(currentFrustum);
74
+ // Add other frustums.
75
+ builder.setSymbology(purple, purple, 4, LinePixels.Code2);
76
+ const remainingFrustums = this._preloadedFrustum.slice(0, endIndex);
77
+ remainingFrustums.forEach((frustum) => builder.addFrustum(frustum));
78
+ context.addDecorationFromBuilder(builder);
79
+ }
80
+ static toggle(enabled) {
81
+ const instance = ViewDefinitionDecoration._instance;
82
+ if (undefined !== enabled && (undefined !== instance) === enabled)
83
+ return;
84
+ if (undefined === instance) {
85
+ ViewDefinitionDecoration._instance = new ViewDefinitionDecoration();
86
+ }
87
+ else {
88
+ instance.stop();
89
+ ViewDefinitionDecoration._instance = undefined;
90
+ }
91
+ }
92
+ }
93
+ /** Display in every viewport a green range graphic for each displayed tile tree, plus a red range graphic for each tile tree's content range if defined.
94
+ * @beta
95
+ */
96
+ export class ViewDefinitionDecorationTool extends Tool {
97
+ static toolId = "ViewDefinitionDecorationTool";
98
+ static get minArgs() { return 0; }
99
+ static get maxArgs() { return 1; }
100
+ async run(enable) {
101
+ ViewDefinitionDecoration.toggle(enable);
102
+ return true;
103
+ }
104
+ async parseAndRun(...args) {
105
+ const enable = parseToggle(args[0]);
106
+ if (typeof enable !== "string")
107
+ await this.run(enable);
108
+ return true;
109
+ }
110
+ }
111
+ //# sourceMappingURL=ViewDefinitionDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewDefinitionDecorator.js","sourceRoot":"","sources":["../../../src/tools/ViewDefinitionDecorator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { ColorDef, Frustum, LinePixels } from \"@itwin/core-common\";\r\nimport { DecorateContext, GraphicType, IModelApp, IModelConnection, OffScreenViewport, Tool, Viewport, ViewRect } from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\nimport { Id64, Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d } from \"@itwin/core-geometry\";\r\n\r\nclass ViewDefinitionDecoration {\r\n private static _instance?: ViewDefinitionDecoration;\r\n private _removeMe?: () => void;\r\n\r\n private constructor() {\r\n this._removeMe = IModelApp.viewManager.addDecorator(this);\r\n }\r\n\r\n private stop() {\r\n if (this._removeMe) {\r\n this._removeMe();\r\n this._removeMe = undefined;\r\n }\r\n }\r\n\r\n private _viewId?: Id64String;\r\n private _loading: boolean = false;\r\n private _preloadedFrustum: Frustum[] = [];\r\n\r\n private async getFrustumForViewId(iModel: IModelConnection, viewId: Id64String, transform: Transform = Transform.createIdentity()): Promise<void> {\r\n return iModel.views.load(viewId).then((result) => {\r\n // Use the view extents/delta\r\n let vector: Vector2d;\r\n if (result.is2d()) vector = Vector2d.create(result.delta.x, result.delta.y);\r\n else vector = Vector2d.create(result.getExtents().x, result.getExtents().y);\r\n // create a viewport to the size of the extents to ensure the aspect is correct.\r\n const vp = OffScreenViewport.create({ view: result, viewRect: new ViewRect(0,0,vector.x,vector.y) });\r\n const frustum = vp.getFrustum();\r\n this._preloadedFrustum.push(frustum.transformBy(transform));\r\n\r\n }).catch((err: unknown) => { Logger.logException(\"FrontendDevTools\", err)});\r\n }\r\n\r\n public preload(viewport: Viewport) {\r\n this._loading = true;\r\n const iModel = viewport.iModel;\r\n const view = viewport.view;\r\n const viewId = view.id;\r\n\r\n const loadPromises: Promise<void>[] = [];\r\n loadPromises.push(this.getFrustumForViewId(iModel, viewId));\r\n\r\n if (view.isDrawingView() && view.sectionDrawingInfo.spatialView)\r\n loadPromises.push(this.getFrustumForViewId(iModel, view.sectionDrawingInfo.spatialView, view.sectionDrawingInfo.drawingToSpatialTransform.inverse()));\r\n\r\n void Promise.all(loadPromises).finally(() => {\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n this._viewId = viewId;\r\n this._loading = false;\r\n });\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (context.viewport.view.id !== this._viewId && !this._loading) {\r\n this._preloadedFrustum.length = 0;\r\n // just clear the decoration if the view is not from a view definition\r\n if (Id64.isValidId64(context.viewport.view.id))\r\n this.preload(context.viewport);\r\n }\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const purple = ColorDef.fromString(\"#800080\");\r\n\r\n // The current view's frustum is at the end of the array.\r\n builder.setSymbology(purple, purple, 5, LinePixels.Code0);\r\n const endIndex = this._preloadedFrustum.length - 1;\r\n const currentFrustum = this._preloadedFrustum[endIndex];\r\n if (currentFrustum) builder.addFrustum(currentFrustum);\r\n\r\n // Add other frustums.\r\n builder.setSymbology(purple, purple, 4, LinePixels.Code2);\r\n const remainingFrustums = this._preloadedFrustum.slice(0, endIndex);\r\n remainingFrustums.forEach((frustum) => builder.addFrustum(frustum));\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(enabled?: boolean): void {\r\n const instance = ViewDefinitionDecoration._instance;\r\n if (undefined !== enabled && (undefined !== instance) === enabled)\r\n return;\r\n\r\n if (undefined === instance) {\r\n ViewDefinitionDecoration._instance = new ViewDefinitionDecoration();\r\n } else {\r\n instance.stop();\r\n ViewDefinitionDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Display in every viewport a green range graphic for each displayed tile tree, plus a red range graphic for each tile tree's content range if defined.\r\n * @beta\r\n */\r\nexport class ViewDefinitionDecorationTool extends Tool {\r\n public static override toolId = \"ViewDefinitionDecorationTool\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n ViewDefinitionDecoration.toggle(enable);\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportTools.js","sourceRoot":"","sources":["../../../src/tools/ViewportTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { Camera, ColorDef, Hilite } from \"@itwin/core-common\";\nimport {\n DrawingViewState, FlashMode, FlashSettings, FlashSettingsOptions, IModelApp, TileBoundingBoxes, Tool, Viewport,\n} from \"@itwin/core-frontend\";\nimport { parseArgs } from \"./parseArgs\";\nimport { parseToggle } from \"./parseToggle\";\n\n/** Base class for a tool that toggles some aspect of a Viewport.\n * @beta\n */\nexport abstract class ViewportToggleTool extends Tool {\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n protected abstract toggle(vp: Viewport, enable?: boolean): Promise<void>;\n\n public override async run(enable?: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp)\n await this.toggle(vp, enable);\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const enable = parseToggle(args[0]);\n if (typeof enable !== \"string\")\n await this.run(enable);\n\n return true;\n }\n}\n\n/** Freeze or unfreeze the scene for the selected viewport. While the scene is frozen, no new tiles will be selected for drawing within the viewport.\n * @beta\n */\nexport class FreezeSceneTool extends ViewportToggleTool {\n public static override toolId = \"FreezeScene\";\n\n protected override async toggle(vp: Viewport, enable?: boolean) {\n if (undefined === enable || enable !== vp.freezeScene)\n vp.freezeScene = !vp.freezeScene;\n\n return Promise.resolve();\n }\n}\n\nconst boundingVolumeNames = [\n \"none\",\n \"volume\",\n \"content\",\n \"both\",\n \"children\",\n \"sphere\",\n \"solid\",\n];\n\n/** Set the tile bounding volume decorations to display in the selected viewport.\n * Omitting the argument turns on Volume bounding boxes if bounding boxes are currently off; otherwise, toggles them off.\n * Allowed inputs are \"none\", \"volume\", \"content\", \"both\" (volume and content), \"children\", and \"sphere\".\n * @beta\n */\nexport class ShowTileVolumesTool extends Tool {\n public static override toolId = \"ShowTileVolumes\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(boxes?: TileBoundingBoxes): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return true;\n\n if (undefined === boxes)\n boxes = TileBoundingBoxes.None === vp.debugBoundingBoxes ? TileBoundingBoxes.Volume : TileBoundingBoxes.None;\n\n vp.debugBoundingBoxes = boxes;\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n let boxes: TileBoundingBoxes | undefined;\n if (0 !== args.length) {\n const arg = args[0].toLowerCase();\n for (let i = 0; i < boundingVolumeNames.length; i++) {\n if (arg === boundingVolumeNames[i]) {\n boxes = i;\n break;\n }\n }\n\n if (undefined === boxes)\n return true;\n }\n\n return this.run(boxes);\n }\n}\n\n/** Sets or unsets or flips the deactivated state of one or more tile tree references within the selected viewport.\n * Deactivated tile tree references are omitted from the scene.\n * This is useful for isolating particular tile trees or tiles for debugging.\n * @beta\n */\nexport class ToggleTileTreeReferencesTool extends Tool {\n public static override toolId = \"ToggleTileTreeReferences\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 3; }\n\n private _modelIds?: string | string[];\n private _which?: \"all\" | \"animated\" | \"primary\" | \"section\" | number[];\n private _deactivate?: boolean;\n\n public override async parseAndRun(...args: string[]) {\n const which = args[0].toLowerCase();\n switch (which) {\n case \"all\":\n case \"animated\":\n case \"primary\":\n case \"section\":\n this._which = which;\n break;\n default:\n this._which = which.split(\",\").map((x) => Number.parseInt(x, 10)).filter((x) => !Number.isNaN(x));\n }\n\n let modelIds = args[2];\n let deactivate = parseToggle(args[1]);\n if (typeof deactivate !== \"string\") {\n if (typeof deactivate === \"boolean\")\n deactivate = !deactivate;\n\n this._deactivate = deactivate;\n } else {\n modelIds = args[1];\n }\n\n if (modelIds)\n this._modelIds = modelIds.toLowerCase().split(\",\");\n\n return this.run();\n }\n\n public override async run(): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (!vp || !this._which || !vp.view.isSpatialView())\n return false;\n\n vp.view.setTileTreeReferencesDeactivated(this._modelIds, this._deactivate, this._which);\n vp.invalidateScene();\n return true;\n }\n}\n\n/** This tool sets the aspect ratio skew for the selected viewport.\n * @beta\n */\nexport class SetAspectRatioSkewTool extends Tool {\n public static override toolId = \"SetAspectRatioSkew\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, setting the aspect ratio skew for the selected viewport.\n * @param skew the aspect ratio (x/y) skew value; 1.0 or undefined removes any skew\n */\n public override async run(skew?: number): Promise<boolean> {\n if (undefined === skew)\n skew = 1.0;\n\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp) {\n vp.view.setAspectRatioSkew(skew);\n vp.synchWithView();\n }\n\n return true;\n }\n\n /** Executes this tool's run method.\n * @param args the first entry of this array contains the `skew` argument\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const skew = args.length > 0 ? parseFloat(args[0]) : 1.0;\n return !Number.isNaN(skew) && this.run(skew);\n }\n}\n\n/** Changes the [ModelSubCategoryHiliteMode]($frontend) for the [HiliteSet]($frontend) associated with the selected Viewport.\n * @beta\n */\nexport class ChangeHiliteModeTool extends Tool {\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n public static override toolId = \"ChangeHiliteMode\";\n\n public override async run(mode?: string) {\n const hilites = IModelApp.viewManager.selectedView?.iModel.hilited;\n if (!hilites)\n return false;\n\n if (mode === \"union\" || mode === \"intersection\")\n hilites.modelSubCategoryMode = mode;\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]) {\n return this.run(args[0]);\n }\n}\n\n/** Changes the selected viewport's hilite or emphasis settings.\n * @beta\n */\nexport abstract class ChangeHiliteTool extends Tool {\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 6; }\n\n public override async run(settings?: Hilite.Settings): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp)\n this.apply(vp, settings);\n\n return true;\n }\n\n protected abstract apply(vp: Viewport, settings: Hilite.Settings | undefined): void;\n protected abstract getCurrentSettings(vp: Viewport): Hilite.Settings;\n\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\n if (0 === inputArgs.length)\n return this.run();\n\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return true;\n\n const cur = this.getCurrentSettings(vp);\n const colors = cur.color.colors;\n let visible = cur.visibleRatio;\n let hidden = cur.hiddenRatio;\n let silhouette = cur.silhouette;\n\n const args = parseArgs(inputArgs);\n const parseColorComponent = (c: \"r\" | \"g\" | \"b\") => {\n const num = args.getInteger(c);\n if (undefined !== num)\n colors[c] = Math.floor(Math.max(0, Math.min(255, num)));\n };\n\n parseColorComponent(\"r\");\n parseColorComponent(\"g\");\n parseColorComponent(\"b\");\n\n const silhouetteArg = args.getInteger(\"s\");\n if (undefined !== silhouetteArg && silhouetteArg >= Hilite.Silhouette.None && silhouetteArg <= Hilite.Silhouette.Thick)\n silhouette = silhouetteArg;\n\n const v = args.getFloat(\"v\");\n if (undefined !== v && v >= 0 && v <= 1)\n visible = v;\n\n const h = args.getFloat(\"h\");\n if (undefined !== h && h >= 0 && h <= 1)\n hidden = h;\n\n if (undefined === silhouette)\n silhouette = cur.silhouette;\n\n if (undefined === visible)\n visible = cur.visibleRatio;\n\n if (undefined === hidden)\n hidden = cur.hiddenRatio;\n\n const settings: Hilite.Settings = {\n color: ColorDef.from(colors.r, colors.g, colors.b),\n silhouette,\n visibleRatio: visible,\n hiddenRatio: hidden,\n };\n\n return this.run(settings);\n }\n}\n\n/** Changes the selected viewport's hilite settings, or resets to defaults.\n * @beta\n */\nexport class ChangeHiliteSettingsTool extends ChangeHiliteTool {\n public static override toolId = \"ChangeHiliteSettings\";\n\n protected getCurrentSettings(vp: Viewport) { return vp.hilite; }\n protected apply(vp: Viewport, settings?: Hilite.Settings): void {\n vp.hilite = undefined !== settings ? settings : new Hilite.Settings();\n }\n}\n\n/** Changes the selected viewport's emphasis settings.\n * @beta\n */\nexport class ChangeEmphasisSettingsTool extends ChangeHiliteTool {\n public static override toolId = \"ChangeEmphasisSettings\";\n\n protected getCurrentSettings(vp: Viewport) { return vp.emphasisSettings; }\n protected apply(vp: Viewport, settings?: Hilite.Settings): void {\n if (undefined !== settings)\n vp.emphasisSettings = settings;\n }\n}\n\n/** Changes the [FlashSettings]($frontend) for the selected [Viewport]($frontend).\n * @beta\n */\nexport class ChangeFlashSettingsTool extends Tool {\n public static override toolId = \"ChangeFlashSettings\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 3; }\n\n public override async run(settings?: FlashSettings): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp)\n vp.flashSettings = settings ?? new FlashSettings();\n\n return true;\n }\n\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (!vp)\n return true;\n\n if (1 === inputArgs.length && \"default\" === inputArgs[0].toLowerCase())\n return this.run();\n\n const options: FlashSettingsOptions = {};\n const args = parseArgs(inputArgs);\n\n const intensity = args.getFloat(\"i\");\n if (undefined !== intensity)\n options.maxIntensity = intensity;\n\n const mode = args.get(\"m\");\n if (mode) {\n switch (mode[0].toLowerCase()) {\n case \"b\":\n options.litMode = FlashMode.Brighten;\n break;\n case \"h\":\n options.litMode = FlashMode.Hilite;\n break;\n default:\n return false;\n }\n }\n\n const duration = args.getFloat(\"d\");\n if (undefined !== duration)\n options.duration = BeDuration.fromSeconds(duration);\n\n return this.run(vp.flashSettings.clone(options));\n }\n}\n\n/** Enables or disables fade-out transparency mode for the selected viewport.\n * @beta\n */\nexport class FadeOutTool extends ViewportToggleTool {\n public static override toolId = \"FadeOut\";\n\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\n if (undefined === enable || enable !== vp.isFadeOutActive)\n vp.isFadeOutActive = !vp.isFadeOutActive;\n\n return Promise.resolve();\n }\n}\n\n/** Sets the default tile size modifier used for all viewports that don't explicitly override it.\n * @beta\n */\nexport class DefaultTileSizeModifierTool extends Tool {\n public static override toolId = \"DefaultTileSizeMod\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, setting the default tile size modifier used for all viewports that don't explicitly override it.\n * @param modifier the tile size modifier to use; if undefined, do not set modifier\n */\n public override async run(modifier?: number): Promise<boolean> {\n if (undefined !== modifier)\n IModelApp.tileAdmin.defaultTileSizeModifier = modifier;\n\n return true;\n }\n\n /** Executes this tool's run method with args[0] containing `modifier`.\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(Number.parseFloat(args[0]));\n }\n}\n\n/** Sets or clears the tile size modifier override for the selected viewport.\n * @beta\n */\nexport class ViewportTileSizeModifierTool extends Tool {\n public static override toolId = \"ViewportTileSizeMod\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, setting the tile size modifier used for the selected viewport.\n * @param modifier the tile size modifier to use; if undefined, reset the modifier\n */\n public override async run(modifier?: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp)\n vp.setTileSizeModifier(modifier);\n\n return true;\n }\n\n /** Executes this tool's run method with args[0] containing the `modifier` argument or the string \"reset\" in order to reset the modifier.\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const arg = args[0].toLowerCase();\n const modifier = \"reset\" === arg ? undefined : Number.parseFloat(args[0]);\n return this.run(modifier);\n }\n}\n\n/** This tool adds a reality model to the viewport.\n * @beta\n */\nexport class ViewportAddRealityModel extends Tool {\n public static override toolId = \"ViewportAddRealityModel\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, adding a reality model to the viewport\n * @param url the URL which points to the reality model tileset\n */\n public override async run(url: string): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp)\n vp.displayStyle.attachRealityModel({ tilesetUrl: url });\n\n return true;\n }\n\n /** Executes this tool's run method with args[0] containing the `url` argument.\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args[0]);\n }\n}\n\n/** Changes the `allow3dManipulations` flag for the selected viewport if the viewport is displaying a `ViewState3d`.\n * @beta\n */\nexport class Toggle3dManipulationsTool extends ViewportToggleTool {\n public static override toolId = \"Toggle3dManipulations\";\n\n protected override async toggle(vp: Viewport, allow?: boolean): Promise<void> {\n if (!vp.view.is3d())\n return Promise.resolve();\n\n if (undefined === allow)\n allow = !vp.view.allow3dManipulations();\n\n if (allow !== vp.view.allow3dManipulations()) {\n vp.view.setAllow3dManipulations(allow);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.startDefaultTool();\n }\n\n return Promise.resolve();\n }\n}\n\n/** Toggles display of view attachments in sheet views.\n * @beta\n */\nexport class ToggleViewAttachmentsTool extends ViewportToggleTool {\n public static override toolId = \"ToggleViewAttachments\";\n\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\n if (undefined === enable || enable !== vp.wantViewAttachments)\n vp.wantViewAttachments = !vp.wantViewAttachments;\n\n return Promise.resolve();\n }\n}\n\n/** Toggle display of view attachment boundaries in sheet views.\n * @beta\n */\nexport class ToggleViewAttachmentBoundariesTool extends ViewportToggleTool {\n public static override toolId = \"ToggleViewAttachmentBoundaries\";\n\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\n if (undefined === enable || enable !== vp.wantViewAttachmentBoundaries)\n vp.wantViewAttachmentBoundaries = !vp.wantViewAttachmentBoundaries;\n\n return Promise.resolve();\n }\n}\n\n/** Toggle display of view attachment clip shapes in sheet views.\n * @beta\n */\nexport class ToggleViewAttachmentClipShapesTool extends ViewportToggleTool {\n public static override toolId = \"ToggleViewAttachmentClipShapes\";\n\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\n if (undefined === enable || enable !== vp.wantViewAttachmentClipShapes)\n vp.wantViewAttachmentClipShapes = !vp.wantViewAttachmentClipShapes;\n\n return Promise.resolve();\n }\n}\n\n/** Toggles display of 2d graphics in a [DrawingViewState]($frontend). This setting affects all drawing views until it is reset.\n * @beta\n */\nexport class ToggleDrawingGraphicsTool extends ViewportToggleTool {\n public static override toolId = \"ToggleDrawingGraphics\";\n\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\n if (undefined === enable || enable !== DrawingViewState.hideDrawingGraphics) {\n DrawingViewState.hideDrawingGraphics = !DrawingViewState.hideDrawingGraphics;\n vp.invalidateScene();\n }\n\n return Promise.resolve();\n }\n}\n\n/** Toggles whether a [SectionDrawing]($backend)'s spatial view is always displayed along with the 2d graphics by a [DrawingViewState]($frontend), even\n * if it otherwise would not be. This setting affects all section drawing views until it is reset.\n * @beta\n */\nexport class ToggleSectionDrawingSpatialViewTool extends ViewportToggleTool {\n public static override toolId = \"ToggleSectionDrawingSpatialView\";\n\n protected async toggle(vp: Viewport, enable?: boolean): Promise<void> {\n if (undefined === enable || enable !== DrawingViewState.alwaysDisplaySpatialView) {\n DrawingViewState.alwaysDisplaySpatialView = !DrawingViewState.alwaysDisplaySpatialView;\n if (vp.view instanceof DrawingViewState) {\n // Force the view to update its section drawing attachment.\n const view = vp.view.clone();\n await view.changeViewedModel(view.baseModelId);\n await view.load();\n vp.changeView(view);\n }\n }\n }\n}\n\n/** Change the camera settings of the selected viewport.\n * @beta\n */\nexport class ChangeCameraTool extends Tool {\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n public static override toolId = \"ChangeCamera\";\n\n public override async run(camera?: Camera): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (camera && vp && vp.view.is3d()) {\n const view = vp.view.clone();\n view.camera.setFrom(camera);\n vp.changeView(view);\n }\n\n return true;\n }\n\n public override async parseAndRun(...inArgs: string[]): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (!vp || !vp.view.is3d())\n return false;\n\n const camera = vp.view.camera.clone();\n const args = parseArgs(inArgs);\n const lens = args.getFloat(\"l\");\n if (undefined !== lens)\n camera.lens.setDegrees(lens);\n\n const focusDist = args.getFloat(\"d\");\n if (undefined !== focusDist)\n camera.focusDist = focusDist;\n\n return this.run(camera);\n }\n}\n"]}
1
+ {"version":3,"file":"ViewportTools.js","sourceRoot":"","sources":["../../../src/tools/ViewportTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { BeDuration } from \"@itwin/core-bentley\";\r\nimport { Camera, ColorDef, Hilite } from \"@itwin/core-common\";\r\nimport {\r\n DrawingViewState, FlashMode, FlashSettings, FlashSettingsOptions, IModelApp, TileBoundingBoxes, Tool, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { parseArgs } from \"./parseArgs\";\r\nimport { parseToggle } from \"./parseToggle\";\r\n\r\n/** Base class for a tool that toggles some aspect of a Viewport.\r\n * @beta\r\n */\r\nexport abstract class ViewportToggleTool extends Tool {\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n protected abstract toggle(vp: Viewport, enable?: boolean): Promise<void>;\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp)\r\n await this.toggle(vp, enable);\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Freeze or unfreeze the scene for the selected viewport. While the scene is frozen, no new tiles will be selected for drawing within the viewport.\r\n * @beta\r\n */\r\nexport class FreezeSceneTool extends ViewportToggleTool {\r\n public static override toolId = \"FreezeScene\";\r\n\r\n protected override async toggle(vp: Viewport, enable?: boolean) {\r\n if (undefined === enable || enable !== vp.freezeScene)\r\n vp.freezeScene = !vp.freezeScene;\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\nconst boundingVolumeNames = [\r\n \"none\",\r\n \"volume\",\r\n \"content\",\r\n \"both\",\r\n \"children\",\r\n \"sphere\",\r\n \"solid\",\r\n];\r\n\r\n/** Set the tile bounding volume decorations to display in the selected viewport.\r\n * Omitting the argument turns on Volume bounding boxes if bounding boxes are currently off; otherwise, toggles them off.\r\n * Allowed inputs are \"none\", \"volume\", \"content\", \"both\" (volume and content), \"children\", and \"sphere\".\r\n * @beta\r\n */\r\nexport class ShowTileVolumesTool extends Tool {\r\n public static override toolId = \"ShowTileVolumes\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(boxes?: TileBoundingBoxes): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return true;\r\n\r\n if (undefined === boxes)\r\n boxes = TileBoundingBoxes.None === vp.debugBoundingBoxes ? TileBoundingBoxes.Volume : TileBoundingBoxes.None;\r\n\r\n vp.debugBoundingBoxes = boxes;\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n let boxes: TileBoundingBoxes | undefined;\r\n if (0 !== args.length) {\r\n const arg = args[0].toLowerCase();\r\n for (let i = 0; i < boundingVolumeNames.length; i++) {\r\n if (arg === boundingVolumeNames[i]) {\r\n boxes = i;\r\n break;\r\n }\r\n }\r\n\r\n if (undefined === boxes)\r\n return true;\r\n }\r\n\r\n return this.run(boxes);\r\n }\r\n}\r\n\r\n/** Sets or unsets or flips the deactivated state of one or more tile tree references within the selected viewport.\r\n * Deactivated tile tree references are omitted from the scene.\r\n * This is useful for isolating particular tile trees or tiles for debugging.\r\n * @beta\r\n */\r\nexport class ToggleTileTreeReferencesTool extends Tool {\r\n public static override toolId = \"ToggleTileTreeReferences\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n private _modelIds?: string | string[];\r\n private _which?: \"all\" | \"animated\" | \"primary\" | \"section\" | number[];\r\n private _deactivate?: boolean;\r\n\r\n public override async parseAndRun(...args: string[]) {\r\n const which = args[0].toLowerCase();\r\n switch (which) {\r\n case \"all\":\r\n case \"animated\":\r\n case \"primary\":\r\n case \"section\":\r\n this._which = which;\r\n break;\r\n default:\r\n this._which = which.split(\",\").map((x) => Number.parseInt(x, 10)).filter((x) => !Number.isNaN(x));\r\n }\r\n\r\n let modelIds = args[2];\r\n let deactivate = parseToggle(args[1]);\r\n if (typeof deactivate !== \"string\") {\r\n if (typeof deactivate === \"boolean\")\r\n deactivate = !deactivate;\r\n\r\n this._deactivate = deactivate;\r\n } else {\r\n modelIds = args[1];\r\n }\r\n\r\n if (modelIds)\r\n this._modelIds = modelIds.toLowerCase().split(\",\");\r\n\r\n return this.run();\r\n }\r\n\r\n public override async run(): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (!vp || !this._which || !vp.view.isSpatialView())\r\n return false;\r\n\r\n vp.view.setTileTreeReferencesDeactivated(this._modelIds, this._deactivate, this._which);\r\n vp.invalidateScene();\r\n return true;\r\n }\r\n}\r\n\r\n/** This tool sets the aspect ratio skew for the selected viewport.\r\n * @beta\r\n */\r\nexport class SetAspectRatioSkewTool extends Tool {\r\n public static override toolId = \"SetAspectRatioSkew\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** This method runs the tool, setting the aspect ratio skew for the selected viewport.\r\n * @param skew the aspect ratio (x/y) skew value; 1.0 or undefined removes any skew\r\n */\r\n public override async run(skew?: number): Promise<boolean> {\r\n if (undefined === skew)\r\n skew = 1.0;\r\n\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp) {\r\n vp.view.setAspectRatioSkew(skew);\r\n vp.synchWithView();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Executes this tool's run method.\r\n * @param args the first entry of this array contains the `skew` argument\r\n * @see [[run]]\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const skew = args.length > 0 ? parseFloat(args[0]) : 1.0;\r\n return !Number.isNaN(skew) && this.run(skew);\r\n }\r\n}\r\n\r\n/** Changes the [ModelSubCategoryHiliteMode]($frontend) for the [HiliteSet]($frontend) associated with the selected Viewport.\r\n * @beta\r\n */\r\nexport class ChangeHiliteModeTool extends Tool {\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n public static override toolId = \"ChangeHiliteMode\";\r\n\r\n public override async run(mode?: string) {\r\n const hilites = IModelApp.viewManager.selectedView?.iModel.hilited;\r\n if (!hilites)\r\n return false;\r\n\r\n if (mode === \"union\" || mode === \"intersection\")\r\n hilites.modelSubCategoryMode = mode;\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]) {\r\n return this.run(args[0]);\r\n }\r\n}\r\n\r\n/** Changes the selected viewport's hilite or emphasis settings.\r\n * @beta\r\n */\r\nexport abstract class ChangeHiliteTool extends Tool {\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 6; }\r\n\r\n public override async run(settings?: Hilite.Settings): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp)\r\n this.apply(vp, settings);\r\n\r\n return true;\r\n }\r\n\r\n protected abstract apply(vp: Viewport, settings: Hilite.Settings | undefined): void;\r\n protected abstract getCurrentSettings(vp: Viewport): Hilite.Settings;\r\n\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n if (0 === inputArgs.length)\r\n return this.run();\r\n\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return true;\r\n\r\n const cur = this.getCurrentSettings(vp);\r\n const colors = cur.color.colors;\r\n let visible = cur.visibleRatio;\r\n let hidden = cur.hiddenRatio;\r\n let silhouette = cur.silhouette;\r\n\r\n const args = parseArgs(inputArgs);\r\n const parseColorComponent = (c: \"r\" | \"g\" | \"b\") => {\r\n const num = args.getInteger(c);\r\n if (undefined !== num)\r\n colors[c] = Math.floor(Math.max(0, Math.min(255, num)));\r\n };\r\n\r\n parseColorComponent(\"r\");\r\n parseColorComponent(\"g\");\r\n parseColorComponent(\"b\");\r\n\r\n const silhouetteArg = args.getInteger(\"s\");\r\n if (undefined !== silhouetteArg && silhouetteArg >= Hilite.Silhouette.None && silhouetteArg <= Hilite.Silhouette.Thick)\r\n silhouette = silhouetteArg;\r\n\r\n const v = args.getFloat(\"v\");\r\n if (undefined !== v && v >= 0 && v <= 1)\r\n visible = v;\r\n\r\n const h = args.getFloat(\"h\");\r\n if (undefined !== h && h >= 0 && h <= 1)\r\n hidden = h;\r\n\r\n if (undefined === silhouette)\r\n silhouette = cur.silhouette;\r\n\r\n if (undefined === visible)\r\n visible = cur.visibleRatio;\r\n\r\n if (undefined === hidden)\r\n hidden = cur.hiddenRatio;\r\n\r\n const settings: Hilite.Settings = {\r\n color: ColorDef.from(colors.r, colors.g, colors.b),\r\n silhouette,\r\n visibleRatio: visible,\r\n hiddenRatio: hidden,\r\n };\r\n\r\n return this.run(settings);\r\n }\r\n}\r\n\r\n/** Changes the selected viewport's hilite settings, or resets to defaults.\r\n * @beta\r\n */\r\nexport class ChangeHiliteSettingsTool extends ChangeHiliteTool {\r\n public static override toolId = \"ChangeHiliteSettings\";\r\n\r\n protected getCurrentSettings(vp: Viewport) { return vp.hilite; }\r\n protected apply(vp: Viewport, settings?: Hilite.Settings): void {\r\n vp.hilite = undefined !== settings ? settings : new Hilite.Settings();\r\n }\r\n}\r\n\r\n/** Changes the selected viewport's emphasis settings.\r\n * @beta\r\n */\r\nexport class ChangeEmphasisSettingsTool extends ChangeHiliteTool {\r\n public static override toolId = \"ChangeEmphasisSettings\";\r\n\r\n protected getCurrentSettings(vp: Viewport) { return vp.emphasisSettings; }\r\n protected apply(vp: Viewport, settings?: Hilite.Settings): void {\r\n if (undefined !== settings)\r\n vp.emphasisSettings = settings;\r\n }\r\n}\r\n\r\n/** Changes the [FlashSettings]($frontend) for the selected [Viewport]($frontend).\r\n * @beta\r\n */\r\nexport class ChangeFlashSettingsTool extends Tool {\r\n public static override toolId = \"ChangeFlashSettings\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n public override async run(settings?: FlashSettings): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp)\r\n vp.flashSettings = settings ?? new FlashSettings();\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (!vp)\r\n return true;\r\n\r\n if (1 === inputArgs.length && \"default\" === inputArgs[0].toLowerCase())\r\n return this.run();\r\n\r\n const options: FlashSettingsOptions = {};\r\n const args = parseArgs(inputArgs);\r\n\r\n const intensity = args.getFloat(\"i\");\r\n if (undefined !== intensity)\r\n options.maxIntensity = intensity;\r\n\r\n const mode = args.get(\"m\");\r\n if (mode) {\r\n switch (mode[0].toLowerCase()) {\r\n case \"b\":\r\n options.litMode = FlashMode.Brighten;\r\n break;\r\n case \"h\":\r\n options.litMode = FlashMode.Hilite;\r\n break;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n const duration = args.getFloat(\"d\");\r\n if (undefined !== duration)\r\n options.duration = BeDuration.fromSeconds(duration);\r\n\r\n return this.run(vp.flashSettings.clone(options));\r\n }\r\n}\r\n\r\n/** Enables or disables fade-out transparency mode for the selected viewport.\r\n * @beta\r\n */\r\nexport class FadeOutTool extends ViewportToggleTool {\r\n public static override toolId = \"FadeOut\";\r\n\r\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\r\n if (undefined === enable || enable !== vp.isFadeOutActive)\r\n vp.isFadeOutActive = !vp.isFadeOutActive;\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\n/** Sets the default tile size modifier used for all viewports that don't explicitly override it.\r\n * @beta\r\n */\r\nexport class DefaultTileSizeModifierTool extends Tool {\r\n public static override toolId = \"DefaultTileSizeMod\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** This method runs the tool, setting the default tile size modifier used for all viewports that don't explicitly override it.\r\n * @param modifier the tile size modifier to use; if undefined, do not set modifier\r\n */\r\n public override async run(modifier?: number): Promise<boolean> {\r\n if (undefined !== modifier)\r\n IModelApp.tileAdmin.defaultTileSizeModifier = modifier;\r\n\r\n return true;\r\n }\r\n\r\n /** Executes this tool's run method with args[0] containing `modifier`.\r\n * @see [[run]]\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n return this.run(Number.parseFloat(args[0]));\r\n }\r\n}\r\n\r\n/** Sets or clears the tile size modifier override for the selected viewport.\r\n * @beta\r\n */\r\nexport class ViewportTileSizeModifierTool extends Tool {\r\n public static override toolId = \"ViewportTileSizeMod\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** This method runs the tool, setting the tile size modifier used for the selected viewport.\r\n * @param modifier the tile size modifier to use; if undefined, reset the modifier\r\n */\r\n public override async run(modifier?: number): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp)\r\n vp.setTileSizeModifier(modifier);\r\n\r\n return true;\r\n }\r\n\r\n /** Executes this tool's run method with args[0] containing the `modifier` argument or the string \"reset\" in order to reset the modifier.\r\n * @see [[run]]\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const arg = args[0].toLowerCase();\r\n const modifier = \"reset\" === arg ? undefined : Number.parseFloat(args[0]);\r\n return this.run(modifier);\r\n }\r\n}\r\n\r\n/** This tool adds a reality model to the viewport.\r\n * @beta\r\n */\r\nexport class ViewportAddRealityModel extends Tool {\r\n public static override toolId = \"ViewportAddRealityModel\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** This method runs the tool, adding a reality model to the viewport\r\n * @param url the URL which points to the reality model tileset\r\n */\r\n public override async run(url: string): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp)\r\n vp.displayStyle.attachRealityModel({ tilesetUrl: url });\r\n\r\n return true;\r\n }\r\n\r\n /** Executes this tool's run method with args[0] containing the `url` argument.\r\n * @see [[run]]\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n return this.run(args[0]);\r\n }\r\n}\r\n\r\n/** Changes the `allow3dManipulations` flag for the selected viewport if the viewport is displaying a `ViewState3d`.\r\n * @beta\r\n */\r\nexport class Toggle3dManipulationsTool extends ViewportToggleTool {\r\n public static override toolId = \"Toggle3dManipulations\";\r\n\r\n protected override async toggle(vp: Viewport, allow?: boolean): Promise<void> {\r\n if (!vp.view.is3d())\r\n return Promise.resolve();\r\n\r\n if (undefined === allow)\r\n allow = !vp.view.allow3dManipulations();\r\n\r\n if (allow !== vp.view.allow3dManipulations()) {\r\n vp.view.setAllow3dManipulations(allow);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.startDefaultTool();\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\n/** Toggles display of view attachments in sheet views.\r\n * @beta\r\n */\r\nexport class ToggleViewAttachmentsTool extends ViewportToggleTool {\r\n public static override toolId = \"ToggleViewAttachments\";\r\n\r\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\r\n if (undefined === enable || enable !== vp.wantViewAttachments)\r\n vp.wantViewAttachments = !vp.wantViewAttachments;\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\n/** Toggle display of view attachment boundaries in sheet views.\r\n * @beta\r\n */\r\nexport class ToggleViewAttachmentBoundariesTool extends ViewportToggleTool {\r\n public static override toolId = \"ToggleViewAttachmentBoundaries\";\r\n\r\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\r\n if (undefined === enable || enable !== vp.wantViewAttachmentBoundaries)\r\n vp.wantViewAttachmentBoundaries = !vp.wantViewAttachmentBoundaries;\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\n/** Toggle display of view attachment clip shapes in sheet views.\r\n * @beta\r\n */\r\nexport class ToggleViewAttachmentClipShapesTool extends ViewportToggleTool {\r\n public static override toolId = \"ToggleViewAttachmentClipShapes\";\r\n\r\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\r\n if (undefined === enable || enable !== vp.wantViewAttachmentClipShapes)\r\n vp.wantViewAttachmentClipShapes = !vp.wantViewAttachmentClipShapes;\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\n/** Toggles display of 2d graphics in a [DrawingViewState]($frontend). This setting affects all drawing views until it is reset.\r\n * @beta\r\n */\r\nexport class ToggleDrawingGraphicsTool extends ViewportToggleTool {\r\n public static override toolId = \"ToggleDrawingGraphics\";\r\n\r\n protected override async toggle(vp: Viewport, enable?: boolean): Promise<void> {\r\n if (undefined === enable || enable !== DrawingViewState.hideDrawingGraphics) {\r\n DrawingViewState.hideDrawingGraphics = !DrawingViewState.hideDrawingGraphics;\r\n vp.invalidateScene();\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\n/** Toggles whether a [SectionDrawing]($backend)'s spatial view is always displayed along with the 2d graphics by a [DrawingViewState]($frontend), even\r\n * if it otherwise would not be. This setting affects all section drawing views until it is reset.\r\n * @beta\r\n */\r\nexport class ToggleSectionDrawingSpatialViewTool extends ViewportToggleTool {\r\n public static override toolId = \"ToggleSectionDrawingSpatialView\";\r\n\r\n protected async toggle(vp: Viewport, enable?: boolean): Promise<void> {\r\n if (undefined === enable || enable !== DrawingViewState.alwaysDisplaySpatialView) {\r\n DrawingViewState.alwaysDisplaySpatialView = !DrawingViewState.alwaysDisplaySpatialView;\r\n if (vp.view instanceof DrawingViewState) {\r\n // Force the view to update its section drawing attachment.\r\n const view = vp.view.clone();\r\n await view.changeViewedModel(view.baseModelId);\r\n await view.load();\r\n vp.changeView(view);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Change the camera settings of the selected viewport.\r\n * @beta\r\n */\r\nexport class ChangeCameraTool extends Tool {\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 2; }\r\n public static override toolId = \"ChangeCamera\";\r\n\r\n public override async run(camera?: Camera): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (camera && vp && vp.view.is3d()) {\r\n const view = vp.view.clone();\r\n view.camera.setFrom(camera);\r\n vp.changeView(view);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...inArgs: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (!vp || !vp.view.is3d())\r\n return false;\r\n\r\n const camera = vp.view.camera.clone();\r\n const args = parseArgs(inArgs);\r\n const lens = args.getFloat(\"l\");\r\n if (undefined !== lens)\r\n camera.lens.setDegrees(lens);\r\n\r\n const focusDist = args.getFloat(\"d\");\r\n if (undefined !== focusDist)\r\n camera.focusDist = focusDist;\r\n\r\n return this.run(camera);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parseArgs.js","sourceRoot":"","sources":["../../../src/tools/parseArgs.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAqB/F;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;QACpC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;YAC1B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExB,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;QAEzC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,SAAS,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;gBACnD,OAAO,GAAG,KAAK,GAAG,CAAC;YAErB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,SAAS,KAAK,GAAG;gBACnB,OAAO,SAAS,CAAC;YAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7C,CAAC;QAED,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,SAAS,KAAK,GAAG;gBACnB,OAAO,SAAS,CAAC;YAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\n/** Represents parsed arguments as name-value pairs.\n * @see [[parseArgs]]\n * @beta\n */\nexport interface ToolArgs {\n /** Find the value associated with the first argument that begins with the specified prefix, case-insensitively; or undefined if no such argument exists. */\n get(namePrefix: string): string | undefined;\n /** Convert the value associated with the first argument beginning with the specified prefix to an integer; return undefined if not found or not an integer. */\n getInteger(namePrefix: string): number | undefined;\n /** Convert the value associated with the first argument beginning with the specified prefix to a boolean, where \"1\" indicates true and \"0\" indicates false. */\n getBoolean(namePrefix: string): boolean | undefined;\n /** Convert the value associated with the first argument beginning with the specified prefix to a float; return undefined if not found or not a float. */\n getFloat(namePrefix: string): number | undefined;\n}\n\n/** Given a list of arguments, parse the arguments into name-value pairs.\n * Each input string is expected to be of the format \"name=value\".\n * Argument names are converted to lower-case; values are left untouched.\n * @beta\n */\nexport function parseArgs(args: string[]): ToolArgs {\n const map = new Map<string, string>();\n for (const arg of args) {\n const parts = arg.split(\"=\");\n if (2 === parts.length)\n map.set(parts[0].toLowerCase(), parts[1]);\n }\n\n const findArgValue = (name: string) => {\n name = name.toLowerCase();\n for (const key of map.keys())\n if (key.startsWith(name))\n return map.get(key);\n\n return undefined;\n };\n\n return {\n get: (name: string) => findArgValue(name),\n\n getBoolean: (name: string) => {\n const val = findArgValue(name);\n if (undefined !== val && (val === \"0\" || val === \"1\"))\n return val === \"1\";\n\n return undefined;\n },\n\n getInteger: (name: string) => {\n const val = findArgValue(name);\n if (undefined === val)\n return undefined;\n\n const num = Number.parseInt(val, 10);\n return Number.isNaN(num) ? undefined : num;\n },\n\n getFloat: (name: string) => {\n const val = findArgValue(name);\n if (undefined === val)\n return undefined;\n\n const num = Number.parseFloat(val);\n return Number.isNaN(num) ? undefined : num;\n },\n };\n}\n"]}
1
+ {"version":3,"file":"parseArgs.js","sourceRoot":"","sources":["../../../src/tools/parseArgs.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAqB/F;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;QACpC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;YAC1B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExB,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;QAEzC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,SAAS,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;gBACnD,OAAO,GAAG,KAAK,GAAG,CAAC;YAErB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,SAAS,KAAK,GAAG;gBACnB,OAAO,SAAS,CAAC;YAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7C,CAAC;QAED,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,SAAS,KAAK,GAAG;gBACnB,OAAO,SAAS,CAAC;YAEnB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\n/** Represents parsed arguments as name-value pairs.\r\n * @see [[parseArgs]]\r\n * @beta\r\n */\r\nexport interface ToolArgs {\r\n /** Find the value associated with the first argument that begins with the specified prefix, case-insensitively; or undefined if no such argument exists. */\r\n get(namePrefix: string): string | undefined;\r\n /** Convert the value associated with the first argument beginning with the specified prefix to an integer; return undefined if not found or not an integer. */\r\n getInteger(namePrefix: string): number | undefined;\r\n /** Convert the value associated with the first argument beginning with the specified prefix to a boolean, where \"1\" indicates true and \"0\" indicates false. */\r\n getBoolean(namePrefix: string): boolean | undefined;\r\n /** Convert the value associated with the first argument beginning with the specified prefix to a float; return undefined if not found or not a float. */\r\n getFloat(namePrefix: string): number | undefined;\r\n}\r\n\r\n/** Given a list of arguments, parse the arguments into name-value pairs.\r\n * Each input string is expected to be of the format \"name=value\".\r\n * Argument names are converted to lower-case; values are left untouched.\r\n * @beta\r\n */\r\nexport function parseArgs(args: string[]): ToolArgs {\r\n const map = new Map<string, string>();\r\n for (const arg of args) {\r\n const parts = arg.split(\"=\");\r\n if (2 === parts.length)\r\n map.set(parts[0].toLowerCase(), parts[1]);\r\n }\r\n\r\n const findArgValue = (name: string) => {\r\n name = name.toLowerCase();\r\n for (const key of map.keys())\r\n if (key.startsWith(name))\r\n return map.get(key);\r\n\r\n return undefined;\r\n };\r\n\r\n return {\r\n get: (name: string) => findArgValue(name),\r\n\r\n getBoolean: (name: string) => {\r\n const val = findArgValue(name);\r\n if (undefined !== val && (val === \"0\" || val === \"1\"))\r\n return val === \"1\";\r\n\r\n return undefined;\r\n },\r\n\r\n getInteger: (name: string) => {\r\n const val = findArgValue(name);\r\n if (undefined === val)\r\n return undefined;\r\n\r\n const num = Number.parseInt(val, 10);\r\n return Number.isNaN(num) ? undefined : num;\r\n },\r\n\r\n getFloat: (name: string) => {\r\n const val = findArgValue(name);\r\n if (undefined === val)\r\n return undefined;\r\n\r\n const num = Number.parseFloat(val);\r\n return Number.isNaN(num) ? undefined : num;\r\n },\r\n };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parseBoolean.js","sourceRoot":"","sources":["../../../src/tools/parseBoolean.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAuB;IAClD,IAAI,SAAS,KAAK,GAAG;QACnB,OAAO,SAAS,CAAC;IAEnB,QAAQ,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC;QACzB,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;QACzB,KAAK,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;QAC3B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Utilities\n */\n\n/** Parses a string case-insensitively returning true for \"ON\" or \"TRUE\", false for \"OFF\" or \"FALSE\" and undefined otherwise.\n * Used by various tools which take such arguments.\n * @beta\n */\nexport function parseBoolean(arg: string | undefined): boolean | undefined {\n if (undefined === arg)\n return undefined;\n\n switch (arg.toLowerCase()) {\n case \"on\": return true;\n case \"true\": return true;\n case \"off\": return false;\n case \"false\": return false;\n default: return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"parseBoolean.js","sourceRoot":"","sources":["../../../src/tools/parseBoolean.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAuB;IAClD,IAAI,SAAS,KAAK,GAAG;QACnB,OAAO,SAAS,CAAC;IAEnB,QAAQ,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC;QACzB,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;QACzB,KAAK,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;QAC3B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Utilities\r\n */\r\n\r\n/** Parses a string case-insensitively returning true for \"ON\" or \"TRUE\", false for \"OFF\" or \"FALSE\" and undefined otherwise.\r\n * Used by various tools which take such arguments.\r\n * @beta\r\n */\r\nexport function parseBoolean(arg: string | undefined): boolean | undefined {\r\n if (undefined === arg)\r\n return undefined;\r\n\r\n switch (arg.toLowerCase()) {\r\n case \"on\": return true;\r\n case \"true\": return true;\r\n case \"off\": return false;\r\n case \"false\": return false;\r\n default: return undefined;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parseToggle.js","sourceRoot":"","sources":["../../../src/tools/parseToggle.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAuB;IACjD,IAAI,SAAS,KAAK,GAAG;QACnB,OAAO,SAAS,CAAC;IAEnB,QAAQ,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;QACzB,KAAK,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC;QAChC,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;IACtB,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Utilities\n */\n\n/** Parses a string case-insensitively returning true for \"ON\", false for \"OFF\" undefined for \"TOGGLE\" or undefined, and the input string for anything else\n * Used by various tools which take such arguments.\n * @beta\n */\nexport function parseToggle(arg: string | undefined): string | boolean | undefined {\n if (undefined === arg)\n return undefined;\n\n switch (arg.toLowerCase()) {\n case \"on\": return true;\n case \"off\": return false;\n case \"toggle\": return undefined;\n default: return arg;\n }\n}\n"]}
1
+ {"version":3,"file":"parseToggle.js","sourceRoot":"","sources":["../../../src/tools/parseToggle.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAuB;IACjD,IAAI,SAAS,KAAK,GAAG;QACnB,OAAO,SAAS,CAAC;IAEnB,QAAQ,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;QACzB,KAAK,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC;QAChC,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;IACtB,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Utilities\r\n */\r\n\r\n/** Parses a string case-insensitively returning true for \"ON\", false for \"OFF\" undefined for \"TOGGLE\" or undefined, and the input string for anything else\r\n * Used by various tools which take such arguments.\r\n * @beta\r\n */\r\nexport function parseToggle(arg: string | undefined): string | boolean | undefined {\r\n if (undefined === arg)\r\n return undefined;\r\n\r\n switch (arg.toLowerCase()) {\r\n case \"on\": return true;\r\n case \"off\": return false;\r\n case \"toggle\": return undefined;\r\n default: return arg;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/ui/Button.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AA+B/F;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExB,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5B,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** Wraps an HTML button\n * @alpha\n */\nexport interface Button {\n button: HTMLInputElement;\n div: HTMLElement;\n}\n\n/** Callback invoked by Button when clicked.\n * @alpha\n */\nexport type ButtonHandler = (button: HTMLInputElement) => void;\n\n/** Describes how to create a Button.\n * @alpha\n */\nexport interface ButtonProps {\n handler: ButtonHandler;\n id?: string;\n parent?: HTMLElement;\n value: string;\n inline?: boolean;\n tooltip?: string;\n}\n\n/** Creates a Button as specified by the ButtonProps.\n * @alpha\n */\nexport function createButton(props: ButtonProps): Button {\n const div = document.createElement(props.inline ? \"span\" : \"div\");\n\n const button = document.createElement(\"input\");\n button.type = \"button\";\n button.value = props.value;\n button.addEventListener(\"click\", () => props.handler(button));\n div.appendChild(button);\n\n if (undefined !== props.id)\n button.id = props.id;\n if (undefined !== props.tooltip)\n div.title = props.tooltip;\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n return { button, div };\n}\n"]}
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/ui/Button.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AA+B/F;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExB,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5B,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\n/** Wraps an HTML button\r\n * @alpha\r\n */\r\nexport interface Button {\r\n button: HTMLInputElement;\r\n div: HTMLElement;\r\n}\r\n\r\n/** Callback invoked by Button when clicked.\r\n * @alpha\r\n */\r\nexport type ButtonHandler = (button: HTMLInputElement) => void;\r\n\r\n/** Describes how to create a Button.\r\n * @alpha\r\n */\r\nexport interface ButtonProps {\r\n handler: ButtonHandler;\r\n id?: string;\r\n parent?: HTMLElement;\r\n value: string;\r\n inline?: boolean;\r\n tooltip?: string;\r\n}\r\n\r\n/** Creates a Button as specified by the ButtonProps.\r\n * @alpha\r\n */\r\nexport function createButton(props: ButtonProps): Button {\r\n const div = document.createElement(props.inline ? \"span\" : \"div\");\r\n\r\n const button = document.createElement(\"input\");\r\n button.type = \"button\";\r\n button.value = props.value;\r\n button.addEventListener(\"click\", () => props.handler(button));\r\n div.appendChild(button);\r\n\r\n if (undefined !== props.id)\r\n button.id = props.id;\r\n if (undefined !== props.tooltip)\r\n div.title = props.tooltip;\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n return { button, div };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CheckBox.js","sourceRoot":"","sources":["../../../src/ui/CheckBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AA2B/F,aAAa;AACb,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;IACrE,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE1B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport interface CheckBox {\n label: HTMLLabelElement;\n checkbox: HTMLInputElement;\n div: HTMLDivElement;\n}\n\n/** @alpha */\nexport type CheckBoxHandler = (checkbox: HTMLInputElement) => void;\n\n/** @alpha */\nexport interface CheckBoxProps {\n name: string;\n handler: CheckBoxHandler;\n id: string;\n parent?: HTMLElement;\n isChecked?: boolean;\n typeOverride?: string;\n tooltip?: string;\n}\n\n/** @alpha */\nexport function createCheckBox(props: CheckBoxProps): CheckBox {\n const div = document.createElement(\"div\");\n\n const checkbox = document.createElement(\"input\");\n checkbox.type = props.typeOverride ? props.typeOverride : \"checkbox\";\n checkbox.id = props.id;\n checkbox.checked = !!props.isChecked;\n checkbox.addEventListener(\"click\", () => props.handler(checkbox));\n div.appendChild(checkbox);\n\n const label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n if (undefined !== props.tooltip)\n div.title = props.tooltip;\n\n return { label, checkbox, div };\n}\n"]}
1
+ {"version":3,"file":"CheckBox.js","sourceRoot":"","sources":["../../../src/ui/CheckBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AA2B/F,aAAa;AACb,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;IACrE,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE1B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\n/** @alpha */\r\nexport interface CheckBox {\r\n label: HTMLLabelElement;\r\n checkbox: HTMLInputElement;\r\n div: HTMLDivElement;\r\n}\r\n\r\n/** @alpha */\r\nexport type CheckBoxHandler = (checkbox: HTMLInputElement) => void;\r\n\r\n/** @alpha */\r\nexport interface CheckBoxProps {\r\n name: string;\r\n handler: CheckBoxHandler;\r\n id: string;\r\n parent?: HTMLElement;\r\n isChecked?: boolean;\r\n typeOverride?: string;\r\n tooltip?: string;\r\n}\r\n\r\n/** @alpha */\r\nexport function createCheckBox(props: CheckBoxProps): CheckBox {\r\n const div = document.createElement(\"div\");\r\n\r\n const checkbox = document.createElement(\"input\");\r\n checkbox.type = props.typeOverride ? props.typeOverride : \"checkbox\";\r\n checkbox.id = props.id;\r\n checkbox.checked = !!props.isChecked;\r\n checkbox.addEventListener(\"click\", () => props.handler(checkbox));\r\n div.appendChild(checkbox);\r\n\r\n const label = document.createElement(\"label\");\r\n label.htmlFor = props.id;\r\n label.innerText = props.name;\r\n div.appendChild(label);\r\n\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n if (undefined !== props.tooltip)\r\n div.title = props.tooltip;\r\n\r\n return { label, checkbox, div };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ColorInput.js","sourceRoot":"","sources":["../../../src/ui/ColorInput.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAwB9C,aAAa;AACb,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,kDAAkD;IAClD,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAC1B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACvB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACvB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACxB,CAAC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,aAAa;AACb,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IAErD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACnD,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;IAC1B,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE/B,UAAU,CAAC,QAAQ,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;YAC/B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC,CAAC;IACF,IAAI,UAA4B,CAAC;IAEjC,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,UAAU,CAAC,SAAS,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;QACzC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IACD,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEjC,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACzC,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAC3B,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IACnC,IAAI,SAAS,KAAK,KAAK,CAAC,QAAQ;QAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACvC,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,SAAS,KAAK,UAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAW,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACrI,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Controls\n */\n\nimport { RgbColor } from \"@itwin/core-common\";\n\n/** @alpha */\nexport type ColorInputHandler = (value: string) => void;\n\n/** @alpha */\nexport interface ColorInputProps {\n handler: ColorInputHandler;\n value: string;\n id?: string;\n label?: string;\n parent?: HTMLElement;\n display?: \"inline\" | \"none\" | \"block\";\n disabled?: boolean;\n tooltip?: string;\n}\n\n/** @alpha */\nexport interface ColorInput {\n div: HTMLDivElement;\n input: HTMLInputElement;\n label?: HTMLLabelElement;\n}\n\n/** @alpha */\nexport function convertHexToRgb(hex: string): RgbColor | undefined {\n // Parse a hex color string formatted as \"#FFFFFF\"\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new RgbColor(\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n ) : undefined;\n}\n\n/** @alpha */\nexport function createColorInput(props: ColorInputProps): ColorInput {\n\n const inputDiv = document.createElement(\"div\");\n\n const colorInput = document.createElement(\"input\");\n colorInput.type = \"color\";\n colorInput.value = props.value;\n\n colorInput.onchange = () => {\n try {\n const value = colorInput.value;\n props.handler(value);\n } catch {\n //\n }\n };\n let colorLabel: HTMLLabelElement;\n\n if (undefined !== props.label) {\n colorLabel = document.createElement(\"label\");\n colorLabel.innerText = `${props.label} `;\n inputDiv.appendChild(colorLabel);\n }\n inputDiv.appendChild(colorInput);\n\n if (undefined !== props.display)\n inputDiv.style.display = props.display;\n if (undefined !== props.id)\n colorInput.id = props.id;\n if (undefined !== props.tooltip)\n colorInput.title = props.tooltip;\n if (undefined !== props.disabled)\n colorInput.disabled = props.disabled;\n if (undefined !== props.parent)\n props.parent.appendChild(inputDiv);\n\n return undefined !== colorLabel! ? { div: inputDiv, input: colorInput, label: colorLabel! } : { div: inputDiv, input: colorInput };\n}\n"]}
1
+ {"version":3,"file":"ColorInput.js","sourceRoot":"","sources":["../../../src/ui/ColorInput.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAwB9C,aAAa;AACb,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,kDAAkD;IAClD,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAC1B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACvB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACvB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACxB,CAAC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,aAAa;AACb,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IAErD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACnD,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;IAC1B,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE/B,UAAU,CAAC,QAAQ,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;YAC/B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC,CAAC;IACF,IAAI,UAA4B,CAAC;IAEjC,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,UAAU,CAAC,SAAS,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;QACzC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IACD,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEjC,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACzC,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAC3B,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IACnC,IAAI,SAAS,KAAK,KAAK,CAAC,QAAQ;QAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACvC,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,SAAS,KAAK,UAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAW,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACrI,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\nimport { RgbColor } from \"@itwin/core-common\";\r\n\r\n/** @alpha */\r\nexport type ColorInputHandler = (value: string) => void;\r\n\r\n/** @alpha */\r\nexport interface ColorInputProps {\r\n handler: ColorInputHandler;\r\n value: string;\r\n id?: string;\r\n label?: string;\r\n parent?: HTMLElement;\r\n display?: \"inline\" | \"none\" | \"block\";\r\n disabled?: boolean;\r\n tooltip?: string;\r\n}\r\n\r\n/** @alpha */\r\nexport interface ColorInput {\r\n div: HTMLDivElement;\r\n input: HTMLInputElement;\r\n label?: HTMLLabelElement;\r\n}\r\n\r\n/** @alpha */\r\nexport function convertHexToRgb(hex: string): RgbColor | undefined {\r\n // Parse a hex color string formatted as \"#FFFFFF\"\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? new RgbColor(\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16),\r\n ) : undefined;\r\n}\r\n\r\n/** @alpha */\r\nexport function createColorInput(props: ColorInputProps): ColorInput {\r\n\r\n const inputDiv = document.createElement(\"div\");\r\n\r\n const colorInput = document.createElement(\"input\");\r\n colorInput.type = \"color\";\r\n colorInput.value = props.value;\r\n\r\n colorInput.onchange = () => {\r\n try {\r\n const value = colorInput.value;\r\n props.handler(value);\r\n } catch {\r\n //\r\n }\r\n };\r\n let colorLabel: HTMLLabelElement;\r\n\r\n if (undefined !== props.label) {\r\n colorLabel = document.createElement(\"label\");\r\n colorLabel.innerText = `${props.label} `;\r\n inputDiv.appendChild(colorLabel);\r\n }\r\n inputDiv.appendChild(colorInput);\r\n\r\n if (undefined !== props.display)\r\n inputDiv.style.display = props.display;\r\n if (undefined !== props.id)\r\n colorInput.id = props.id;\r\n if (undefined !== props.tooltip)\r\n colorInput.title = props.tooltip;\r\n if (undefined !== props.disabled)\r\n colorInput.disabled = props.disabled;\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(inputDiv);\r\n\r\n return undefined !== colorLabel! ? { div: inputDiv, input: colorInput, label: colorLabel! } : { div: inputDiv, input: colorInput };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.js","sourceRoot":"","sources":["../../../src/ui/ComboBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAiC/F,SAAS,oBAAoB,CAAC,MAAyB,EAAE,KAAoB;IAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK;QAC3B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,aAAa;AACb,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,KAAmC,CAAC;IACxC,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAErB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK;QAC3B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAExC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO;QACvB,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport interface ComboBoxEntry {\n name: string;\n value: number | string | undefined;\n}\n\n/** @alpha */\nexport type ComboBoxHandler = (select: HTMLSelectElement) => void;\n\n/** @alpha */\nexport interface ComboBoxProps {\n name?: string;\n id: string;\n entries: ComboBoxEntry[];\n parent?: HTMLElement;\n handler?: ComboBoxHandler;\n value?: number | string;\n tooltip?: string;\n}\n\n/** @alpha */\nexport interface ComboBox {\n label?: HTMLLabelElement;\n select: HTMLSelectElement;\n div: HTMLDivElement;\n}\n\nfunction _appendComboBoxEntry(select: HTMLSelectElement, entry: ComboBoxEntry) {\n const option = document.createElement(\"option\");\n option.innerText = entry.name;\n if (undefined !== entry.value)\n option.value = entry.value.toString();\n select.appendChild(option);\n}\n\n/** @alpha */\nexport function createComboBox(props: ComboBoxProps): ComboBox {\n const div = document.createElement(\"div\");\n\n let label: HTMLLabelElement | undefined;\n if (undefined !== props.name) {\n label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n }\n\n const select = document.createElement(\"select\");\n select.id = props.id;\n\n for (const entry of props.entries) {\n _appendComboBoxEntry(select, entry);\n }\n\n if (undefined !== props.value)\n select.value = props.value.toString();\n\n const handler = props.handler;\n if (undefined !== handler)\n select.onchange = () => handler(select);\n\n if (undefined !== props.tooltip)\n div.title = props.tooltip;\n\n div.appendChild(select);\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n return { div, label, select };\n}\n"]}
1
+ {"version":3,"file":"ComboBox.js","sourceRoot":"","sources":["../../../src/ui/ComboBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAiC/F,SAAS,oBAAoB,CAAC,MAAyB,EAAE,KAAoB;IAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK;QAC3B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,aAAa;AACb,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,KAAmC,CAAC;IACxC,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAErB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK;QAC3B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAExC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO;QACvB,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\n/** @alpha */\r\nexport interface ComboBoxEntry {\r\n name: string;\r\n value: number | string | undefined;\r\n}\r\n\r\n/** @alpha */\r\nexport type ComboBoxHandler = (select: HTMLSelectElement) => void;\r\n\r\n/** @alpha */\r\nexport interface ComboBoxProps {\r\n name?: string;\r\n id: string;\r\n entries: ComboBoxEntry[];\r\n parent?: HTMLElement;\r\n handler?: ComboBoxHandler;\r\n value?: number | string;\r\n tooltip?: string;\r\n}\r\n\r\n/** @alpha */\r\nexport interface ComboBox {\r\n label?: HTMLLabelElement;\r\n select: HTMLSelectElement;\r\n div: HTMLDivElement;\r\n}\r\n\r\nfunction _appendComboBoxEntry(select: HTMLSelectElement, entry: ComboBoxEntry) {\r\n const option = document.createElement(\"option\");\r\n option.innerText = entry.name;\r\n if (undefined !== entry.value)\r\n option.value = entry.value.toString();\r\n select.appendChild(option);\r\n}\r\n\r\n/** @alpha */\r\nexport function createComboBox(props: ComboBoxProps): ComboBox {\r\n const div = document.createElement(\"div\");\r\n\r\n let label: HTMLLabelElement | undefined;\r\n if (undefined !== props.name) {\r\n label = document.createElement(\"label\");\r\n label.htmlFor = props.id;\r\n label.innerText = props.name;\r\n div.appendChild(label);\r\n }\r\n\r\n const select = document.createElement(\"select\");\r\n select.id = props.id;\r\n\r\n for (const entry of props.entries) {\r\n _appendComboBoxEntry(select, entry);\r\n }\r\n\r\n if (undefined !== props.value)\r\n select.value = props.value.toString();\r\n\r\n const handler = props.handler;\r\n if (undefined !== handler)\r\n select.onchange = () => handler(select);\r\n\r\n if (undefined !== props.tooltip)\r\n div.title = props.tooltip;\r\n\r\n div.appendChild(select);\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n return { div, label, select };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataList.js","sourceRoot":"","sources":["../../../src/ui/DataList.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AA8B/F,SAAS,oBAAoB,CAAC,IAAyB,EAAE,KAAoB;IAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK;QAC3B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,aAAa;AACb,MAAM,UAAU,qBAAqB,CAAC,EAAY,EAAE,OAAwB;IAC1E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,aAAa;AACb,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAEnB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO;QACvB,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM;QACd,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport interface DataListEntry {\n value: number | string | undefined;\n}\n\n/** @alpha */\nexport type DataListHandler = (list: HTMLDataListElement) => void;\n\n/** @alpha */\nexport interface DataListProps {\n name?: string;\n id: string;\n entries: DataListEntry[];\n parent?: HTMLElement;\n handler?: DataListHandler;\n inline?: boolean;\n}\n\n/** @alpha */\nexport interface DataList {\n list: HTMLDataListElement;\n div: HTMLDivElement;\n}\n\nfunction _appendDataListEntry(list: HTMLDataListElement, entry: DataListEntry) {\n const option = document.createElement(\"option\");\n if (undefined !== entry.value)\n option.value = entry.value.toString();\n list.appendChild(option);\n}\n\n/** @alpha */\nexport function appendDataListEntries(dl: DataList, entries: DataListEntry[]) {\n for (const entry of entries) {\n _appendDataListEntry(dl.list, entry);\n }\n}\n\n/** @alpha */\nexport function createDataList(props: DataListProps): DataList {\n const list = document.createElement(\"datalist\");\n list.id = props.id;\n\n for (const entry of props.entries) {\n _appendDataListEntry(list, entry);\n }\n\n const handler = props.handler;\n if (undefined !== handler)\n list.onselect = () => handler(list);\n\n const div = document.createElement(\"div\");\n if (props.inline)\n div.style.display = \"inline\";\n\n div.appendChild(list);\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n return { div, list };\n}\n"]}
1
+ {"version":3,"file":"DataList.js","sourceRoot":"","sources":["../../../src/ui/DataList.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AA8B/F,SAAS,oBAAoB,CAAC,IAAyB,EAAE,KAAoB;IAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK;QAC3B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACxC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,aAAa;AACb,MAAM,UAAU,qBAAqB,CAAC,EAAY,EAAE,OAAwB;IAC1E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,aAAa;AACb,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAEnB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO;QACvB,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM;QACd,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\n/** @alpha */\r\nexport interface DataListEntry {\r\n value: number | string | undefined;\r\n}\r\n\r\n/** @alpha */\r\nexport type DataListHandler = (list: HTMLDataListElement) => void;\r\n\r\n/** @alpha */\r\nexport interface DataListProps {\r\n name?: string;\r\n id: string;\r\n entries: DataListEntry[];\r\n parent?: HTMLElement;\r\n handler?: DataListHandler;\r\n inline?: boolean;\r\n}\r\n\r\n/** @alpha */\r\nexport interface DataList {\r\n list: HTMLDataListElement;\r\n div: HTMLDivElement;\r\n}\r\n\r\nfunction _appendDataListEntry(list: HTMLDataListElement, entry: DataListEntry) {\r\n const option = document.createElement(\"option\");\r\n if (undefined !== entry.value)\r\n option.value = entry.value.toString();\r\n list.appendChild(option);\r\n}\r\n\r\n/** @alpha */\r\nexport function appendDataListEntries(dl: DataList, entries: DataListEntry[]) {\r\n for (const entry of entries) {\r\n _appendDataListEntry(dl.list, entry);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport function createDataList(props: DataListProps): DataList {\r\n const list = document.createElement(\"datalist\");\r\n list.id = props.id;\r\n\r\n for (const entry of props.entries) {\r\n _appendDataListEntry(list, entry);\r\n }\r\n\r\n const handler = props.handler;\r\n if (undefined !== handler)\r\n list.onselect = () => handler(list);\r\n\r\n const div = document.createElement(\"div\");\r\n if (props.inline)\r\n div.style.display = \"inline\";\r\n\r\n div.appendChild(list);\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n return { div, list };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NestedMenu.js","sourceRoot":"","sources":["../../../src/ui/NestedMenu.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsBxC,aAAa;AACb,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE7C,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IAE5B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,SAAS,GAAG,SAAS,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,UAAU,GAAG,SAAS,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAEnD,MAAM,gBAAgB,GAAG,YAAY,CAAC;QACpC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACpB,UAAU,GAAG,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACnD,gBAAgB,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACvD,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;YAC7B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IAE9C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAEpB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\nimport { createButton } from \"./Button\";\n\n/** @alpha */\nexport type NestMenuHandler = (expanded: boolean) => void;\n\n/** @alpha */\nexport interface NestedMenuProps {\n id?: string;\n label?: string;\n parent?: HTMLElement;\n expand?: boolean;\n handler?: NestMenuHandler;\n body?: HTMLElement;\n}\n\n/** @alpha */\nexport interface NestedMenu {\n div: HTMLDivElement;\n label: HTMLLabelElement;\n body: HTMLElement;\n}\n\n/** @alpha */\nexport function createNestedMenu(props: NestedMenuProps): NestedMenu {\n const div = document.createElement(\"div\");\n const body = undefined !== props.body ? props.body : document.createElement(\"div\");\n const header = document.createElement(\"div\");\n\n div.appendChild(header);\n div.appendChild(body);\n header.style.width = \"100%\";\n\n const label = document.createElement(\"label\");\n label.innerText = undefined !== props.label ? props.label : \"\";\n header.appendChild(label);\n\n let isExpanded = undefined !== props.expand ? props.expand : false;\n body.style.display = isExpanded ? \"block\" : \"none\";\n\n const toggleMenuButton = createButton({\n parent: header,\n inline: true,\n value: isExpanded ? \"-\" : \"+\",\n handler: () => undefined,\n });\n\n header.onclick = () => {\n isExpanded = !isExpanded;\n body.style.display = isExpanded ? \"block\" : \"none\";\n toggleMenuButton.button.value = isExpanded ? \"-\" : \"+\";\n if (undefined !== props.handler)\n props.handler(isExpanded);\n };\n\n toggleMenuButton.div.style.cssFloat = \"right\";\n\n header.appendChild(document.createElement(\"hr\"));\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n if (undefined !== props.id)\n div.id = props.id;\n\n return { body, label, div };\n}\n"]}
1
+ {"version":3,"file":"NestedMenu.js","sourceRoot":"","sources":["../../../src/ui/NestedMenu.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsBxC,aAAa;AACb,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE7C,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IAE5B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,SAAS,GAAG,SAAS,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,UAAU,GAAG,SAAS,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAEnD,MAAM,gBAAgB,GAAG,YAAY,CAAC;QACpC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;KACzB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACpB,UAAU,GAAG,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACnD,gBAAgB,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACvD,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;YAC7B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IAE9C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAEpB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\nimport { createButton } from \"./Button\";\r\n\r\n/** @alpha */\r\nexport type NestMenuHandler = (expanded: boolean) => void;\r\n\r\n/** @alpha */\r\nexport interface NestedMenuProps {\r\n id?: string;\r\n label?: string;\r\n parent?: HTMLElement;\r\n expand?: boolean;\r\n handler?: NestMenuHandler;\r\n body?: HTMLElement;\r\n}\r\n\r\n/** @alpha */\r\nexport interface NestedMenu {\r\n div: HTMLDivElement;\r\n label: HTMLLabelElement;\r\n body: HTMLElement;\r\n}\r\n\r\n/** @alpha */\r\nexport function createNestedMenu(props: NestedMenuProps): NestedMenu {\r\n const div = document.createElement(\"div\");\r\n const body = undefined !== props.body ? props.body : document.createElement(\"div\");\r\n const header = document.createElement(\"div\");\r\n\r\n div.appendChild(header);\r\n div.appendChild(body);\r\n header.style.width = \"100%\";\r\n\r\n const label = document.createElement(\"label\");\r\n label.innerText = undefined !== props.label ? props.label : \"\";\r\n header.appendChild(label);\r\n\r\n let isExpanded = undefined !== props.expand ? props.expand : false;\r\n body.style.display = isExpanded ? \"block\" : \"none\";\r\n\r\n const toggleMenuButton = createButton({\r\n parent: header,\r\n inline: true,\r\n value: isExpanded ? \"-\" : \"+\",\r\n handler: () => undefined,\r\n });\r\n\r\n header.onclick = () => {\r\n isExpanded = !isExpanded;\r\n body.style.display = isExpanded ? \"block\" : \"none\";\r\n toggleMenuButton.button.value = isExpanded ? \"-\" : \"+\";\r\n if (undefined !== props.handler)\r\n props.handler(isExpanded);\r\n };\r\n\r\n toggleMenuButton.div.style.cssFloat = \"right\";\r\n\r\n header.appendChild(document.createElement(\"hr\"));\r\n\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n if (undefined !== props.id)\r\n div.id = props.id;\r\n\r\n return { body, label, div };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../src/ui/NumericInput.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport type NumericInputHandler = (value: number, input: HTMLInputElement) => void;\n\n/** @alpha */\nexport interface NumericInputProps {\n handler: NumericInputHandler;\n id?: string;\n parent?: HTMLElement;\n value: number;\n display?: \"inline\" | \"none\" | \"block\";\n disabled?: boolean;\n min?: number;\n max?: number;\n step?: number;\n tooltip?: string;\n parseAsFloat?: true;\n}\n\n/** @alpha */\nexport function createNumericInput(props: NumericInputProps, useFloat: boolean = false): HTMLInputElement {\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.value = props.value.toString();\n\n input.onchange = () => {\n try {\n const value = useFloat ? parseFloat(input.value) : parseInt(input.value, 10);\n if (!Number.isNaN(value))\n props.handler(value, input);\n } catch {\n //\n }\n };\n\n if (undefined !== props.id)\n input.id = props.id;\n if (undefined !== props.display)\n input.style.display = props.display;\n if (undefined !== props.min)\n input.min = props.min.toString();\n if (undefined !== props.max)\n input.max = props.max.toString();\n if (undefined !== props.step)\n input.step = props.step.toString();\n if (undefined !== props.tooltip)\n input.title = props.tooltip;\n if (undefined !== props.disabled)\n input.disabled = props.disabled;\n if (undefined !== props.parent)\n props.parent.appendChild(input);\n\n return input;\n}\n\n/** @alpha */\nexport interface LabeledNumericInputProps extends NumericInputProps {\n name: string;\n id: string;\n divDisplay?: \"block\" | \"none\" | \"inline\";\n}\n\n/** @alpha */\nexport interface LabeledNumericInput {\n input: HTMLInputElement;\n div: HTMLDivElement;\n label: HTMLLabelElement;\n}\n\n/** @alpha */\nexport function createLabeledNumericInput(props: LabeledNumericInputProps): LabeledNumericInput {\n const div = document.createElement(\"div\");\n if (props.divDisplay)\n div.style.display = props.divDisplay;\n\n const label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n\n const inputProps = { ...props };\n inputProps.parent = div;\n inputProps.display = \"inline\";\n const input = createNumericInput(inputProps, true === props.parseAsFloat);\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n if (undefined !== props.tooltip)\n div.title = props.tooltip;\n\n return { label, div, input };\n}\n"]}
1
+ {"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../src/ui/NumericInput.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\n/** @alpha */\r\nexport type NumericInputHandler = (value: number, input: HTMLInputElement) => void;\r\n\r\n/** @alpha */\r\nexport interface NumericInputProps {\r\n handler: NumericInputHandler;\r\n id?: string;\r\n parent?: HTMLElement;\r\n value: number;\r\n display?: \"inline\" | \"none\" | \"block\";\r\n disabled?: boolean;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n tooltip?: string;\r\n parseAsFloat?: true;\r\n}\r\n\r\n/** @alpha */\r\nexport function createNumericInput(props: NumericInputProps, useFloat: boolean = false): HTMLInputElement {\r\n const input = document.createElement(\"input\");\r\n input.type = \"number\";\r\n input.value = props.value.toString();\r\n\r\n input.onchange = () => {\r\n try {\r\n const value = useFloat ? parseFloat(input.value) : parseInt(input.value, 10);\r\n if (!Number.isNaN(value))\r\n props.handler(value, input);\r\n } catch {\r\n //\r\n }\r\n };\r\n\r\n if (undefined !== props.id)\r\n input.id = props.id;\r\n if (undefined !== props.display)\r\n input.style.display = props.display;\r\n if (undefined !== props.min)\r\n input.min = props.min.toString();\r\n if (undefined !== props.max)\r\n input.max = props.max.toString();\r\n if (undefined !== props.step)\r\n input.step = props.step.toString();\r\n if (undefined !== props.tooltip)\r\n input.title = props.tooltip;\r\n if (undefined !== props.disabled)\r\n input.disabled = props.disabled;\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(input);\r\n\r\n return input;\r\n}\r\n\r\n/** @alpha */\r\nexport interface LabeledNumericInputProps extends NumericInputProps {\r\n name: string;\r\n id: string;\r\n divDisplay?: \"block\" | \"none\" | \"inline\";\r\n}\r\n\r\n/** @alpha */\r\nexport interface LabeledNumericInput {\r\n input: HTMLInputElement;\r\n div: HTMLDivElement;\r\n label: HTMLLabelElement;\r\n}\r\n\r\n/** @alpha */\r\nexport function createLabeledNumericInput(props: LabeledNumericInputProps): LabeledNumericInput {\r\n const div = document.createElement(\"div\");\r\n if (props.divDisplay)\r\n div.style.display = props.divDisplay;\r\n\r\n const label = document.createElement(\"label\");\r\n label.htmlFor = props.id;\r\n label.innerText = props.name;\r\n div.appendChild(label);\r\n\r\n const inputProps = { ...props };\r\n inputProps.parent = div;\r\n inputProps.display = \"inline\";\r\n const input = createNumericInput(inputProps, true === props.parseAsFloat);\r\n\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n if (undefined !== props.tooltip)\r\n div.title = props.tooltip;\r\n\r\n return { label, div, input };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RadioBox.js","sourceRoot":"","sources":["../../../src/ui/RadioBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport interface RadioBoxEntry {\n value: number | string | undefined;\n label: string;\n}\n\n/** @alpha */\nexport type RadioBoxHandler = (value: string, form: HTMLFormElement) => void;\n\n/** @alpha */\nexport interface RadioBoxProps {\n id: string;\n entries: RadioBoxEntry[];\n handler: RadioBoxHandler;\n name?: string;\n parent?: HTMLElement;\n defaultValue?: number | string;\n vertical?: boolean;\n}\n\n/** @alpha */\nexport interface RadioBox {\n label?: HTMLLabelElement;\n setValue: (newValue: number | string) => boolean;\n div: HTMLDivElement;\n form: HTMLFormElement;\n}\n\n/** @alpha */\nexport function createRadioBox(props: RadioBoxProps): RadioBox {\n const div = document.createElement(\"div\");\n\n let label: HTMLLabelElement | undefined;\n if (undefined !== props.name) {\n label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n }\n\n const form = document.createElement(\"form\");\n form.id = props.id;\n\n const radioBoxes: HTMLInputElement[] = [];\n\n for (const entry of props.entries) {\n const input = document.createElement(\"input\");\n input.type = \"radio\";\n input.name = props.name ? props.name : props.id;\n\n input.value = (undefined !== entry.value) ? entry.value.toString() : \"\";\n\n const inputLabel: HTMLLabelElement = document.createElement(\"label\");\n inputLabel.innerText = entry.label;\n\n inputLabel.onclick = () => {\n try {\n input.checked = true;\n const value = input.value;\n props.handler(value, form);\n } catch {\n //\n }\n };\n\n input.onchange = () => {\n try {\n const value = input.value;\n props.handler(value, form);\n } catch {\n //\n }\n };\n if (props.defaultValue === entry.value) {\n input.checked = true;\n }\n\n radioBoxes.push(input);\n\n if (props.vertical) {\n const container = document.createElement(\"div\");\n container.appendChild(input);\n container.appendChild(inputLabel);\n form.appendChild(container);\n } else {\n form.appendChild(input);\n form.appendChild(inputLabel);\n }\n }\n\n div.appendChild(form);\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n const setValue = (value: number | string): boolean => {\n const stringValue = value.toString();\n const validValue: boolean = radioBoxes.map((input) => input.value).includes(stringValue);\n if (validValue) {\n radioBoxes.forEach((input) => input.checked = input.value === stringValue);\n props.handler(stringValue, form);\n }\n return validValue;\n };\n\n return { div, label, setValue, form };\n}\n"]}
1
+ {"version":3,"file":"RadioBox.js","sourceRoot":"","sources":["../../../src/ui/RadioBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Controls\r\n */\r\n\r\n/** @alpha */\r\nexport interface RadioBoxEntry {\r\n value: number | string | undefined;\r\n label: string;\r\n}\r\n\r\n/** @alpha */\r\nexport type RadioBoxHandler = (value: string, form: HTMLFormElement) => void;\r\n\r\n/** @alpha */\r\nexport interface RadioBoxProps {\r\n id: string;\r\n entries: RadioBoxEntry[];\r\n handler: RadioBoxHandler;\r\n name?: string;\r\n parent?: HTMLElement;\r\n defaultValue?: number | string;\r\n vertical?: boolean;\r\n}\r\n\r\n/** @alpha */\r\nexport interface RadioBox {\r\n label?: HTMLLabelElement;\r\n setValue: (newValue: number | string) => boolean;\r\n div: HTMLDivElement;\r\n form: HTMLFormElement;\r\n}\r\n\r\n/** @alpha */\r\nexport function createRadioBox(props: RadioBoxProps): RadioBox {\r\n const div = document.createElement(\"div\");\r\n\r\n let label: HTMLLabelElement | undefined;\r\n if (undefined !== props.name) {\r\n label = document.createElement(\"label\");\r\n label.htmlFor = props.id;\r\n label.innerText = props.name;\r\n div.appendChild(label);\r\n }\r\n\r\n const form = document.createElement(\"form\");\r\n form.id = props.id;\r\n\r\n const radioBoxes: HTMLInputElement[] = [];\r\n\r\n for (const entry of props.entries) {\r\n const input = document.createElement(\"input\");\r\n input.type = \"radio\";\r\n input.name = props.name ? props.name : props.id;\r\n\r\n input.value = (undefined !== entry.value) ? entry.value.toString() : \"\";\r\n\r\n const inputLabel: HTMLLabelElement = document.createElement(\"label\");\r\n inputLabel.innerText = entry.label;\r\n\r\n inputLabel.onclick = () => {\r\n try {\r\n input.checked = true;\r\n const value = input.value;\r\n props.handler(value, form);\r\n } catch {\r\n //\r\n }\r\n };\r\n\r\n input.onchange = () => {\r\n try {\r\n const value = input.value;\r\n props.handler(value, form);\r\n } catch {\r\n //\r\n }\r\n };\r\n if (props.defaultValue === entry.value) {\r\n input.checked = true;\r\n }\r\n\r\n radioBoxes.push(input);\r\n\r\n if (props.vertical) {\r\n const container = document.createElement(\"div\");\r\n container.appendChild(input);\r\n container.appendChild(inputLabel);\r\n form.appendChild(container);\r\n } else {\r\n form.appendChild(input);\r\n form.appendChild(inputLabel);\r\n }\r\n }\r\n\r\n div.appendChild(form);\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n const setValue = (value: number | string): boolean => {\r\n const stringValue = value.toString();\r\n const validValue: boolean = radioBoxes.map((input) => input.value).includes(stringValue);\r\n if (validValue) {\r\n radioBoxes.forEach((input) => input.checked = input.value === stringValue);\r\n props.handler(stringValue, form);\r\n }\r\n return validValue;\r\n };\r\n\r\n return { div, label, setValue, form };\r\n}\r\n"]}