@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.
- package/CHANGELOG.md +6 -1
- package/README.md +1 -0
- package/lib/cjs/ClipboardUtilities.js.map +1 -1
- package/lib/cjs/FrontEndDevTools.d.ts.map +1 -1
- package/lib/cjs/FrontEndDevTools.js +2 -0
- package/lib/cjs/FrontEndDevTools.js.map +1 -1
- package/lib/cjs/effects/Convolution.js +17 -17
- package/lib/cjs/effects/Convolution.js.map +1 -1
- package/lib/cjs/effects/EffectTools.js.map +1 -1
- package/lib/cjs/effects/Explosion.js.map +1 -1
- package/lib/cjs/effects/FlipImage.js +20 -20
- package/lib/cjs/effects/FlipImage.js.map +1 -1
- package/lib/cjs/effects/LensDistortion.js +21 -21
- package/lib/cjs/effects/LensDistortion.js.map +1 -1
- package/lib/cjs/effects/Random.js.map +1 -1
- package/lib/cjs/effects/Saturation.js +26 -26
- package/lib/cjs/effects/Saturation.js.map +1 -1
- package/lib/cjs/effects/Snow.js.map +1 -1
- package/lib/cjs/effects/Vignette.js +29 -29
- package/lib/cjs/effects/Vignette.js.map +1 -1
- package/lib/cjs/frontend-devtools.js.map +1 -1
- package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
- package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
- package/lib/cjs/tools/ClipTools.js.map +1 -1
- package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
- package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
- package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
- package/lib/cjs/tools/InspectElementTool.js.map +1 -1
- package/lib/cjs/tools/MapLayerTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
- package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
- package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
- package/lib/cjs/tools/ProjectExtents.js.map +1 -1
- package/lib/cjs/tools/RealityModelTools.js.map +1 -1
- package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
- package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
- package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
- package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
- package/lib/cjs/tools/SavedViews.js.map +1 -1
- package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
- package/lib/cjs/tools/SelectionTools.js.map +1 -1
- package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
- package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
- package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
- package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
- package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
- package/lib/cjs/tools/ViewDefinitionDecorator.d.ts +12 -0
- package/lib/cjs/tools/ViewDefinitionDecorator.d.ts.map +1 -0
- package/lib/cjs/tools/ViewDefinitionDecorator.js +115 -0
- package/lib/cjs/tools/ViewDefinitionDecorator.js.map +1 -0
- package/lib/cjs/tools/ViewportTools.js.map +1 -1
- package/lib/cjs/tools/parseArgs.js.map +1 -1
- package/lib/cjs/tools/parseBoolean.js.map +1 -1
- package/lib/cjs/tools/parseToggle.js.map +1 -1
- package/lib/cjs/ui/Button.js.map +1 -1
- package/lib/cjs/ui/CheckBox.js.map +1 -1
- package/lib/cjs/ui/ColorInput.js.map +1 -1
- package/lib/cjs/ui/ComboBox.js.map +1 -1
- package/lib/cjs/ui/DataList.js.map +1 -1
- package/lib/cjs/ui/NestedMenu.js.map +1 -1
- package/lib/cjs/ui/NumericInput.js.map +1 -1
- package/lib/cjs/ui/RadioBox.js.map +1 -1
- package/lib/cjs/ui/Slider.js.map +1 -1
- package/lib/cjs/ui/TextBox.js.map +1 -1
- package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
- package/lib/cjs/widgets/FpsTracker.js.map +1 -1
- package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
- package/lib/cjs/widgets/KeyinField.js.map +1 -1
- package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
- package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
- package/lib/esm/ClipboardUtilities.js.map +1 -1
- package/lib/esm/FrontEndDevTools.d.ts.map +1 -1
- package/lib/esm/FrontEndDevTools.js +2 -0
- package/lib/esm/FrontEndDevTools.js.map +1 -1
- package/lib/esm/effects/Convolution.js +17 -17
- package/lib/esm/effects/Convolution.js.map +1 -1
- package/lib/esm/effects/EffectTools.js.map +1 -1
- package/lib/esm/effects/Explosion.js.map +1 -1
- package/lib/esm/effects/FlipImage.js +20 -20
- package/lib/esm/effects/FlipImage.js.map +1 -1
- package/lib/esm/effects/LensDistortion.js +21 -21
- package/lib/esm/effects/LensDistortion.js.map +1 -1
- package/lib/esm/effects/Random.js.map +1 -1
- package/lib/esm/effects/Saturation.js +26 -26
- package/lib/esm/effects/Saturation.js.map +1 -1
- package/lib/esm/effects/Snow.js.map +1 -1
- package/lib/esm/effects/Vignette.js +29 -29
- package/lib/esm/effects/Vignette.js.map +1 -1
- package/lib/esm/frontend-devtools.js.map +1 -1
- package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
- package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
- package/lib/esm/tools/ClipTools.js.map +1 -1
- package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
- package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
- package/lib/esm/tools/FrustumDecoration.js.map +1 -1
- package/lib/esm/tools/InspectElementTool.js.map +1 -1
- package/lib/esm/tools/MapLayerTool.js.map +1 -1
- package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
- package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
- package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
- package/lib/esm/tools/ProjectExtents.js.map +1 -1
- package/lib/esm/tools/RealityModelTools.js.map +1 -1
- package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
- package/lib/esm/tools/RenderSystemTools.js.map +1 -1
- package/lib/esm/tools/RenderTargetTools.js.map +1 -1
- package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
- package/lib/esm/tools/SavedViews.js.map +1 -1
- package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
- package/lib/esm/tools/SelectionTools.js.map +1 -1
- package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
- package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
- package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
- package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
- package/lib/esm/tools/ToolTipProvider.js.map +1 -1
- package/lib/esm/tools/ViewDefinitionDecorator.d.ts +12 -0
- package/lib/esm/tools/ViewDefinitionDecorator.d.ts.map +1 -0
- package/lib/esm/tools/ViewDefinitionDecorator.js +111 -0
- package/lib/esm/tools/ViewDefinitionDecorator.js.map +1 -0
- package/lib/esm/tools/ViewportTools.js.map +1 -1
- package/lib/esm/tools/parseArgs.js.map +1 -1
- package/lib/esm/tools/parseBoolean.js.map +1 -1
- package/lib/esm/tools/parseToggle.js.map +1 -1
- package/lib/esm/ui/Button.js.map +1 -1
- package/lib/esm/ui/CheckBox.js.map +1 -1
- package/lib/esm/ui/ColorInput.js.map +1 -1
- package/lib/esm/ui/ComboBox.js.map +1 -1
- package/lib/esm/ui/DataList.js.map +1 -1
- package/lib/esm/ui/NestedMenu.js.map +1 -1
- package/lib/esm/ui/NumericInput.js.map +1 -1
- package/lib/esm/ui/RadioBox.js.map +1 -1
- package/lib/esm/ui/Slider.js.map +1 -1
- package/lib/esm/ui/TextBox.js.map +1 -1
- package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
- package/lib/esm/widgets/FpsTracker.js.map +1 -1
- package/lib/esm/widgets/GpuProfiler.js.map +1 -1
- package/lib/esm/widgets/KeyinField.js.map +1 -1
- package/lib/esm/widgets/MemoryTracker.js.map +1 -1
- package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
- package/lib/public/locales/en/FrontendDevTools.json +497 -494
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseArgs.js","sourceRoot":"","sources":["../../../src/tools/parseArgs.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AA0B/F,8BA8CC;AAnDD;;;;GAIG;AACH,SAAgB,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;;AA0B/F,8BA8CC;AAnDD;;;;GAIG;AACH,SAAgB,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;;AAU/F,oCAWC;AAnBD;;GAEG;AAEH;;;GAGG;AACH,SAAgB,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;;AAU/F,oCAWC;AAnBD;;GAEG;AAEH;;;GAGG;AACH,SAAgB,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;;AAU/F,kCAUC;AAlBD;;GAEG;AAEH;;;GAGG;AACH,SAAgB,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;;AAU/F,kCAUC;AAlBD;;GAEG;AAEH;;;GAGG;AACH,SAAgB,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"]}
|
package/lib/cjs/ui/Button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/ui/Button.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAkC/F,oCAiBC;AApBD;;GAEG;AACH,SAAgB,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;;AAkC/F,oCAiBC;AApBD;;GAEG;AACH,SAAgB,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;;AA4B/F,wCAsBC;AAvBD,aAAa;AACb,SAAgB,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;;AA4B/F,wCAsBC;AAvBD,aAAa;AACb,SAAgB,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;;AA2BH,0CAQC;AAGD,4CAqCC;AAzED,oDAA8C;AAwB9C,aAAa;AACb,SAAgB,eAAe,CAAC,GAAW;IACzC,kDAAkD;IAClD,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,sBAAQ,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,SAAgB,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;;AA2BH,0CAQC;AAGD,4CAqCC;AAzED,oDAA8C;AAwB9C,aAAa;AACb,SAAgB,eAAe,CAAC,GAAW;IACzC,kDAAkD;IAClD,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,sBAAQ,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,SAAgB,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;;AA0C/F,wCAiCC;AA1CD,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,SAAgB,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;;AA0C/F,wCAiCC;AA1CD,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,SAAgB,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;;AAsC/F,sDAIC;AAGD,wCAqBC;AApCD,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,SAAgB,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,SAAgB,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;;AAsC/F,sDAIC;AAGD,wCAqBC;AApCD,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,SAAgB,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,SAAgB,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;;AA6B/F,4CAyCC;AApED;;GAEG;AAEH,qCAAwC;AAsBxC,aAAa;AACb,SAAgB,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,IAAA,qBAAY,EAAC;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;;AA6B/F,4CAyCC;AApED;;GAEG;AAEH,qCAAwC;AAsBxC,aAAa;AACb,SAAgB,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,IAAA,qBAAY,EAAC;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"]}
|
package/lib/cjs/ui/Slider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../../src/ui/Slider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAiC/F,oCAuCC;AAGD,8CAGC;AA9CD,aAAa;AACb,SAAgB,YAAY,CAAC,KAAkB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,KAAK,CAAC,aAAa;QACrB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAEhD,IAAI,KAAK,CAAC,SAAS;QACjB,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAExC,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,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACpC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExB,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,aAAa;AACb,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,KAAa;IACjE,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,UAAU,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACvC,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 Slider {\n label: HTMLLabelElement;\n slider: HTMLInputElement;\n div: HTMLDivElement;\n readout: HTMLLabelElement;\n}\n\n/** @alpha */\nexport type SliderHandler = (slider: HTMLInputElement) => void;\n\n/** @alpha */\nexport interface SliderProps {\n name: string;\n handler: SliderHandler;\n id: string;\n parent?: HTMLElement;\n min: string;\n max: string;\n step: string;\n value: string;\n verticalAlign?: \"middle\" | false;\n textAlign?: \"right\" | false;\n readout?: \"right\" | false;\n}\n\n/** @alpha */\nexport function createSlider(props: SliderProps): Slider {\n const div = document.createElement(\"div\");\n div.style.display = \"block\";\n if (props.verticalAlign)\n div.style.verticalAlign = props.verticalAlign;\n\n if (props.textAlign)\n div.style.textAlign = props.textAlign;\n\n const label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n\n const readout = document.createElement(\"label\");\n\n const slider = document.createElement(\"input\");\n slider.type = \"range\";\n slider.className = \"slider\";\n slider.id = props.id;\n slider.min = props.min;\n slider.max = props.max;\n slider.step = props.step;\n slider.value = props.value;\n slider.addEventListener(\"input\", () => {\n props.handler(slider);\n readout.innerText = slider.value;\n });\n div.appendChild(slider);\n\n if (props.readout === \"right\") {\n readout.innerText = slider.value;\n div.appendChild(readout);\n }\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n return { label, slider, div, readout };\n}\n\n/** @alpha */\nexport function updateSliderValue(sliderCtrl: Slider, value: string) {\n sliderCtrl.slider.value = value;\n sliderCtrl.readout.innerText = value;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../../src/ui/Slider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAiC/F,oCAuCC;AAGD,8CAGC;AA9CD,aAAa;AACb,SAAgB,YAAY,CAAC,KAAkB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,KAAK,CAAC,aAAa;QACrB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAEhD,IAAI,KAAK,CAAC,SAAS;QACjB,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAExC,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,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACpC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExB,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,aAAa;AACb,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,KAAa;IACjE,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,UAAU,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACvC,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 Slider {\r\n label: HTMLLabelElement;\r\n slider: HTMLInputElement;\r\n div: HTMLDivElement;\r\n readout: HTMLLabelElement;\r\n}\r\n\r\n/** @alpha */\r\nexport type SliderHandler = (slider: HTMLInputElement) => void;\r\n\r\n/** @alpha */\r\nexport interface SliderProps {\r\n name: string;\r\n handler: SliderHandler;\r\n id: string;\r\n parent?: HTMLElement;\r\n min: string;\r\n max: string;\r\n step: string;\r\n value: string;\r\n verticalAlign?: \"middle\" | false;\r\n textAlign?: \"right\" | false;\r\n readout?: \"right\" | false;\r\n}\r\n\r\n/** @alpha */\r\nexport function createSlider(props: SliderProps): Slider {\r\n const div = document.createElement(\"div\");\r\n div.style.display = \"block\";\r\n if (props.verticalAlign)\r\n div.style.verticalAlign = props.verticalAlign;\r\n\r\n if (props.textAlign)\r\n div.style.textAlign = props.textAlign;\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 readout = document.createElement(\"label\");\r\n\r\n const slider = document.createElement(\"input\");\r\n slider.type = \"range\";\r\n slider.className = \"slider\";\r\n slider.id = props.id;\r\n slider.min = props.min;\r\n slider.max = props.max;\r\n slider.step = props.step;\r\n slider.value = props.value;\r\n slider.addEventListener(\"input\", () => {\r\n props.handler(slider);\r\n readout.innerText = slider.value;\r\n });\r\n div.appendChild(slider);\r\n\r\n if (props.readout === \"right\") {\r\n readout.innerText = slider.value;\r\n div.appendChild(readout);\r\n }\r\n\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n return { label, slider, div, readout };\r\n}\r\n\r\n/** @alpha */\r\nexport function updateSliderValue(sliderCtrl: Slider, value: string) {\r\n sliderCtrl.slider.value = value;\r\n sliderCtrl.readout.innerText = value;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextBox.js","sourceRoot":"","sources":["../../../src/ui/TextBox.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAsC/F,sCAwDC;AAzDD,aAAa;AACb,SAAgB,aAAa,CAAC,KAAmB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,KAAK,CAAC,MAAM;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,IAAI,KAAK,CAAC;IACV,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;YACxB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QAE3B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IACtB,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAExB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,sFAAsF;IACtF,MAAM,eAAe,GAAG,CAAC,EAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;IACpE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC;IACtD,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAiB,EAAE,EAAE;YACzC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,CAAC,eAAe,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,uDAAuD;IAC/F,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACjC,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 text input field.\n * @beta\n */\nexport interface TextBox {\n /** The label, if the text box has one. */\n label?: HTMLLabelElement;\n /** The text input element. */\n textbox: HTMLInputElement;\n /** The div containing the text box. */\n div: HTMLDivElement;\n}\n\n/** @alpha */\nexport type TextBoxHandler = (textbox: HTMLInputElement) => void;\n\n/** @alpha */\nexport type TextBoxKeyPressHandler = (textbox: HTMLInputElement, ev: KeyboardEvent) => void;\n\n/** @alpha */\nexport interface TextBoxProps {\n label?: string;\n id?: string;\n parent?: HTMLElement;\n handler?: TextBoxHandler;\n keypresshandler?: TextBoxKeyPressHandler;\n focushandler?: TextBoxHandler;\n tooltip?: string;\n inline?: boolean;\n list?: string; // if defined, contains the id of a datalist to bind to this textbox for autocompletion\n}\n\n/** @alpha */\nexport function createTextBox(props: TextBoxProps): TextBox {\n const div = document.createElement(\"div\");\n if (true === props.inline)\n div.style.display = \"inline\";\n\n let label;\n if (undefined !== props.label) {\n label = document.createElement(\"label\");\n label.innerText = props.label;\n if (undefined !== props.id)\n label.htmlFor = props.id;\n\n div.appendChild(label);\n }\n\n const textbox = document.createElement(\"input\");\n textbox.type = \"text\";\n if (undefined !== props.id)\n textbox.id = props.id;\n\n div.appendChild(textbox);\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n const handler = props.handler;\n if (undefined !== handler) {\n textbox.onchange = () => handler(textbox);\n }\n\n // Don't want the document's listeners intepreting keypresses as keyboard shortcuts...\n const stopPropagation = (ev: KeyboardEvent) => ev.stopPropagation();\n textbox.onkeydown = textbox.onkeyup = stopPropagation;\n const keypresshandler = props.keypresshandler;\n if (undefined !== keypresshandler) {\n textbox.onkeypress = (ev: KeyboardEvent) => { // eslint-disable-line @typescript-eslint/no-deprecated\n keypresshandler(textbox, ev);\n ev.stopPropagation();\n };\n } else {\n textbox.onkeypress = stopPropagation; // eslint-disable-line @typescript-eslint/no-deprecated\n }\n\n const focushandler = props.focushandler;\n if (undefined !== focushandler) {\n textbox.onfocus = () => focushandler(textbox);\n }\n\n if (undefined !== props.list) {\n textbox.setAttribute(\"list\", props.list);\n }\n\n if (undefined !== props.tooltip)\n div.title = props.tooltip;\n\n return { label, textbox, div };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TextBox.js","sourceRoot":"","sources":["../../../src/ui/TextBox.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAsC/F,sCAwDC;AAzDD,aAAa;AACb,SAAgB,aAAa,CAAC,KAAmB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,KAAK,CAAC,MAAM;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,IAAI,KAAK,CAAC;IACV,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;YACxB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QAE3B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IACtB,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAExB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,sFAAsF;IACtF,MAAM,eAAe,GAAG,CAAC,EAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;IACpE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC;IACtD,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAiB,EAAE,EAAE;YACzC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,CAAC,eAAe,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,uDAAuD;IAC/F,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACjC,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 text input field.\r\n * @beta\r\n */\r\nexport interface TextBox {\r\n /** The label, if the text box has one. */\r\n label?: HTMLLabelElement;\r\n /** The text input element. */\r\n textbox: HTMLInputElement;\r\n /** The div containing the text box. */\r\n div: HTMLDivElement;\r\n}\r\n\r\n/** @alpha */\r\nexport type TextBoxHandler = (textbox: HTMLInputElement) => void;\r\n\r\n/** @alpha */\r\nexport type TextBoxKeyPressHandler = (textbox: HTMLInputElement, ev: KeyboardEvent) => void;\r\n\r\n/** @alpha */\r\nexport interface TextBoxProps {\r\n label?: string;\r\n id?: string;\r\n parent?: HTMLElement;\r\n handler?: TextBoxHandler;\r\n keypresshandler?: TextBoxKeyPressHandler;\r\n focushandler?: TextBoxHandler;\r\n tooltip?: string;\r\n inline?: boolean;\r\n list?: string; // if defined, contains the id of a datalist to bind to this textbox for autocompletion\r\n}\r\n\r\n/** @alpha */\r\nexport function createTextBox(props: TextBoxProps): TextBox {\r\n const div = document.createElement(\"div\");\r\n if (true === props.inline)\r\n div.style.display = \"inline\";\r\n\r\n let label;\r\n if (undefined !== props.label) {\r\n label = document.createElement(\"label\");\r\n label.innerText = props.label;\r\n if (undefined !== props.id)\r\n label.htmlFor = props.id;\r\n\r\n div.appendChild(label);\r\n }\r\n\r\n const textbox = document.createElement(\"input\");\r\n textbox.type = \"text\";\r\n if (undefined !== props.id)\r\n textbox.id = props.id;\r\n\r\n div.appendChild(textbox);\r\n\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n const handler = props.handler;\r\n if (undefined !== handler) {\r\n textbox.onchange = () => handler(textbox);\r\n }\r\n\r\n // Don't want the document's listeners intepreting keypresses as keyboard shortcuts...\r\n const stopPropagation = (ev: KeyboardEvent) => ev.stopPropagation();\r\n textbox.onkeydown = textbox.onkeyup = stopPropagation;\r\n const keypresshandler = props.keypresshandler;\r\n if (undefined !== keypresshandler) {\r\n textbox.onkeypress = (ev: KeyboardEvent) => { // eslint-disable-line @typescript-eslint/no-deprecated\r\n keypresshandler(textbox, ev);\r\n ev.stopPropagation();\r\n };\r\n } else {\r\n textbox.onkeypress = stopPropagation; // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n\r\n const focushandler = props.focushandler;\r\n if (undefined !== focushandler) {\r\n textbox.onfocus = () => focushandler(textbox);\r\n }\r\n\r\n if (undefined !== props.list) {\r\n textbox.setAttribute(\"list\", props.list);\r\n }\r\n\r\n if (undefined !== props.tooltip)\r\n div.title = props.tooltip;\r\n\r\n return { label, textbox, div };\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiagnosticsPanel.js","sourceRoot":"","sources":["../../../src/widgets/DiagnosticsPanel.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 Widgets\n */\n\nimport { dispose } from \"@itwin/core-bentley\";\nimport { Viewport } from \"@itwin/core-frontend\";\nimport { FpsTracker } from \"./FpsTracker\";\nimport { GpuProfiler } from \"./GpuProfiler\";\nimport { KeyinField } from \"./KeyinField\";\nimport { MemoryTracker } from \"./MemoryTracker\";\nimport { RenderCommandBreakdown } from \"./RenderCommandBreakdown\";\nimport { TileMemoryBreakdown } from \"./TileMemoryBreakdown\";\nimport { TileStatisticsTracker } from \"./TileStatisticsTracker\";\nimport { ToolSettingsTracker } from \"./ToolSettingsTracker\";\n\n/** Options for configuring a [[DiagnosticsPanel]].\n * @beta\n */\nexport interface DiagnosticsPanelProps {\n /** Widgets to exclude from the panel. */\n exclude?: {\n keyin?: boolean;\n fps?: boolean;\n tileStats?: boolean;\n memory?: boolean;\n tileMemoryBreakdown?: boolean;\n renderCommands?: boolean;\n gpuProfiler?: boolean;\n toolSettings?: boolean;\n };\n}\n\n/** Consolidates many other widgets into a single panel.\n * @beta\n */\nexport class DiagnosticsPanel {\n private readonly _element: HTMLElement;\n private readonly _parentElement?: HTMLElement;\n private readonly _fpsTracker?: FpsTracker;\n private readonly _memoryTracker?: MemoryTracker;\n private readonly _tileMemoryBreakdown?: TileMemoryBreakdown;\n private readonly _renderCommands?: RenderCommandBreakdown;\n private readonly _statsTracker?: TileStatisticsTracker;\n private readonly _gpuProfiler?: GpuProfiler;\n private readonly _toolSettingsTracker?: ToolSettingsTracker;\n public readonly keyinField?: KeyinField;\n\n public constructor(vp: Viewport, props?: DiagnosticsPanelProps) {\n const exclude = (undefined !== props && undefined !== props.exclude) ? props.exclude : {};\n\n this._element = document.createElement(\"div\");\n this._element.className = \"debugPanel\";\n\n if (true !== exclude.fps) {\n this._fpsTracker = new FpsTracker(this._element, vp);\n this.addSeparator();\n }\n\n if (true !== exclude.keyin) {\n this.keyinField = new KeyinField({\n parent: this._element,\n baseId: \"diagnosticsPanelKeyin\",\n wantButton: true,\n wantLabel: true,\n historyLength: 20,\n });\n\n this.addSeparator();\n }\n\n if (true !== exclude.tileStats) {\n this._statsTracker = new TileStatisticsTracker(this._element, vp);\n this.addSeparator();\n }\n\n if (true !== exclude.tileMemoryBreakdown) {\n this._tileMemoryBreakdown = new TileMemoryBreakdown(this._element);\n this.addSeparator();\n }\n\n if (!exclude.renderCommands) {\n this._renderCommands = new RenderCommandBreakdown(this._element);\n this.addSeparator();\n }\n\n if (true !== exclude.memory) {\n this._memoryTracker = new MemoryTracker(this._element, vp);\n this.addSeparator();\n }\n\n if (true !== exclude.gpuProfiler) {\n this._gpuProfiler = new GpuProfiler(this._element);\n this.addSeparator();\n }\n\n if (true !== exclude.toolSettings)\n this._toolSettingsTracker = new ToolSettingsTracker(this._element, vp);\n }\n\n public get element(): HTMLElement { return this._element; }\n\n public [Symbol.dispose](): void {\n dispose(this._fpsTracker);\n dispose(this._memoryTracker);\n dispose(this._tileMemoryBreakdown);\n dispose(this._renderCommands);\n dispose(this._statsTracker);\n dispose(this._gpuProfiler);\n dispose(this._toolSettingsTracker);\n\n if (undefined !== this._parentElement)\n this._parentElement.removeChild(this._element);\n }\n\n private addSeparator(): void {\n this._element.appendChild(document.createElement(\"hr\"));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DiagnosticsPanel.js","sourceRoot":"","sources":["../../../src/widgets/DiagnosticsPanel.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 Widgets\r\n */\r\n\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport { Viewport } from \"@itwin/core-frontend\";\r\nimport { FpsTracker } from \"./FpsTracker\";\r\nimport { GpuProfiler } from \"./GpuProfiler\";\r\nimport { KeyinField } from \"./KeyinField\";\r\nimport { MemoryTracker } from \"./MemoryTracker\";\r\nimport { RenderCommandBreakdown } from \"./RenderCommandBreakdown\";\r\nimport { TileMemoryBreakdown } from \"./TileMemoryBreakdown\";\r\nimport { TileStatisticsTracker } from \"./TileStatisticsTracker\";\r\nimport { ToolSettingsTracker } from \"./ToolSettingsTracker\";\r\n\r\n/** Options for configuring a [[DiagnosticsPanel]].\r\n * @beta\r\n */\r\nexport interface DiagnosticsPanelProps {\r\n /** Widgets to exclude from the panel. */\r\n exclude?: {\r\n keyin?: boolean;\r\n fps?: boolean;\r\n tileStats?: boolean;\r\n memory?: boolean;\r\n tileMemoryBreakdown?: boolean;\r\n renderCommands?: boolean;\r\n gpuProfiler?: boolean;\r\n toolSettings?: boolean;\r\n };\r\n}\r\n\r\n/** Consolidates many other widgets into a single panel.\r\n * @beta\r\n */\r\nexport class DiagnosticsPanel {\r\n private readonly _element: HTMLElement;\r\n private readonly _parentElement?: HTMLElement;\r\n private readonly _fpsTracker?: FpsTracker;\r\n private readonly _memoryTracker?: MemoryTracker;\r\n private readonly _tileMemoryBreakdown?: TileMemoryBreakdown;\r\n private readonly _renderCommands?: RenderCommandBreakdown;\r\n private readonly _statsTracker?: TileStatisticsTracker;\r\n private readonly _gpuProfiler?: GpuProfiler;\r\n private readonly _toolSettingsTracker?: ToolSettingsTracker;\r\n public readonly keyinField?: KeyinField;\r\n\r\n public constructor(vp: Viewport, props?: DiagnosticsPanelProps) {\r\n const exclude = (undefined !== props && undefined !== props.exclude) ? props.exclude : {};\r\n\r\n this._element = document.createElement(\"div\");\r\n this._element.className = \"debugPanel\";\r\n\r\n if (true !== exclude.fps) {\r\n this._fpsTracker = new FpsTracker(this._element, vp);\r\n this.addSeparator();\r\n }\r\n\r\n if (true !== exclude.keyin) {\r\n this.keyinField = new KeyinField({\r\n parent: this._element,\r\n baseId: \"diagnosticsPanelKeyin\",\r\n wantButton: true,\r\n wantLabel: true,\r\n historyLength: 20,\r\n });\r\n\r\n this.addSeparator();\r\n }\r\n\r\n if (true !== exclude.tileStats) {\r\n this._statsTracker = new TileStatisticsTracker(this._element, vp);\r\n this.addSeparator();\r\n }\r\n\r\n if (true !== exclude.tileMemoryBreakdown) {\r\n this._tileMemoryBreakdown = new TileMemoryBreakdown(this._element);\r\n this.addSeparator();\r\n }\r\n\r\n if (!exclude.renderCommands) {\r\n this._renderCommands = new RenderCommandBreakdown(this._element);\r\n this.addSeparator();\r\n }\r\n\r\n if (true !== exclude.memory) {\r\n this._memoryTracker = new MemoryTracker(this._element, vp);\r\n this.addSeparator();\r\n }\r\n\r\n if (true !== exclude.gpuProfiler) {\r\n this._gpuProfiler = new GpuProfiler(this._element);\r\n this.addSeparator();\r\n }\r\n\r\n if (true !== exclude.toolSettings)\r\n this._toolSettingsTracker = new ToolSettingsTracker(this._element, vp);\r\n }\r\n\r\n public get element(): HTMLElement { return this._element; }\r\n\r\n public [Symbol.dispose](): void {\r\n dispose(this._fpsTracker);\r\n dispose(this._memoryTracker);\r\n dispose(this._tileMemoryBreakdown);\r\n dispose(this._renderCommands);\r\n dispose(this._statsTracker);\r\n dispose(this._gpuProfiler);\r\n dispose(this._toolSettingsTracker);\r\n\r\n if (undefined !== this._parentElement)\r\n this._parentElement.removeChild(this._element);\r\n }\r\n\r\n private addSeparator(): void {\r\n this._element.appendChild(document.createElement(\"hr\"));\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FpsTracker.js","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,wDAA4E;AAC5E,6CAAgD;AAEhD;;;GAGG;AACH,MAAa,UAAU;IACJ,MAAM,CAAmB;IAClC,QAAQ,CAAsB;IAC9B,cAAc,CAAU;IACf,GAAG,CAAW;IAE/B,YAAmB,MAAmB,EAAE,QAAkB;QACxD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAA,yBAAc,EAAC;YAC3B,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,mBAAmB;YACvB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;SACzC,CAAC,CAAC,KAAK,CAAC;IACX,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAgB;QAC7B,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,kCAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;QACtC,CAAC;QAEA,IAAI,CAAC,GAAG,CAAC,MAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjE,CAAC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAS,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC;IACxC,CAAC;CACF;AA/CD,gCA+CC","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 Widgets\n */\n\nimport { PerformanceMetrics, Target, Viewport } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\n\n/** Displays average frames-per-second.\n * NOTE: Enabling fps tracking causes a new frame to render on every tick of the render loop, which may negatively impact battery life.\n * @beta\n */\nexport class FpsTracker {\n private readonly _label: HTMLLabelElement;\n private _metrics?: PerformanceMetrics;\n private _curIntervalId?: number;\n private readonly _vp: Viewport;\n\n public constructor(parent: HTMLElement, viewport: Viewport) {\n this._vp = viewport;\n this._label = createCheckBox({\n parent,\n name: \"Track FPS\",\n id: \"fpsTracker_toggle\",\n handler: (cb) => this.toggle(cb.checked),\n }).label;\n }\n\n public [Symbol.dispose](): void {\n this.toggle(false);\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private toggle(enabled: boolean): void {\n this._vp.continuousRendering = enabled;\n if (enabled) {\n this._metrics = new PerformanceMetrics(false, true);\n this._curIntervalId = window.setInterval(() => this.updateFPS(), 500);\n this._label.innerText = \"Tracking FPS...\";\n } else {\n this._metrics = undefined;\n this.clearInterval();\n this._label.innerText = \"Track FPS\";\n }\n\n (this._vp.target as Target).performanceMetrics = this._metrics;\n }\n\n private updateFPS(): void {\n const metrics = this._metrics!;\n const fps = (metrics.spfTimes.length / metrics.spfSum).toFixed(2);\n this._label.innerText = `FPS: ${fps}`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FpsTracker.js","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,wDAA4E;AAC5E,6CAAgD;AAEhD;;;GAGG;AACH,MAAa,UAAU;IACJ,MAAM,CAAmB;IAClC,QAAQ,CAAsB;IAC9B,cAAc,CAAU;IACf,GAAG,CAAW;IAE/B,YAAmB,MAAmB,EAAE,QAAkB;QACxD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAA,yBAAc,EAAC;YAC3B,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,mBAAmB;YACvB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;SACzC,CAAC,CAAC,KAAK,CAAC;IACX,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAgB;QAC7B,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,kCAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;QACtC,CAAC;QAEA,IAAI,CAAC,GAAG,CAAC,MAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjE,CAAC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAS,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC;IACxC,CAAC;CACF;AA/CD,gCA+CC","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 Widgets\r\n */\r\n\r\nimport { PerformanceMetrics, Target, Viewport } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\n\r\n/** Displays average frames-per-second.\r\n * NOTE: Enabling fps tracking causes a new frame to render on every tick of the render loop, which may negatively impact battery life.\r\n * @beta\r\n */\r\nexport class FpsTracker {\r\n private readonly _label: HTMLLabelElement;\r\n private _metrics?: PerformanceMetrics;\r\n private _curIntervalId?: number;\r\n private readonly _vp: Viewport;\r\n\r\n public constructor(parent: HTMLElement, viewport: Viewport) {\r\n this._vp = viewport;\r\n this._label = createCheckBox({\r\n parent,\r\n name: \"Track FPS\",\r\n id: \"fpsTracker_toggle\",\r\n handler: (cb) => this.toggle(cb.checked),\r\n }).label;\r\n }\r\n\r\n public [Symbol.dispose](): void {\r\n this.toggle(false);\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n window.clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private toggle(enabled: boolean): void {\r\n this._vp.continuousRendering = enabled;\r\n if (enabled) {\r\n this._metrics = new PerformanceMetrics(false, true);\r\n this._curIntervalId = window.setInterval(() => this.updateFPS(), 500);\r\n this._label.innerText = \"Tracking FPS...\";\r\n } else {\r\n this._metrics = undefined;\r\n this.clearInterval();\r\n this._label.innerText = \"Track FPS\";\r\n }\r\n\r\n (this._vp.target as Target).performanceMetrics = this._metrics;\r\n }\r\n\r\n private updateFPS(): void {\r\n const metrics = this._metrics!;\r\n const fps = (metrics.spfTimes.length / metrics.spfSum).toFixed(2);\r\n this._label.innerText = `FPS: ${fps}`;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GpuProfiler.js","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.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 Widgets\n */\n\nimport { saveAs } from \"file-saver\";\nimport { GLTimerResult, IModelApp, RenderSystemDebugControl } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\n\n/** Trace Event Format, viewable with chrome://tracing\n * https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit\n */\ninterface ChromeTrace {\n traceEvents: ChromeTraceEvent[];\n}\n\ninterface ChromeTraceEvent {\n /** Required by chrome://tracing */\n pid: 1;\n /** Timestamp in microseconds */\n ts: number;\n /** Duration in microseconds */\n dur: number;\n /** Denotes \"complete\" event */\n ph: \"X\";\n /** Label for chrome://tracing view */\n name: string;\n /** dummy value, args must be defined for entries to be clickable in chrome://tracing */\n args: ChromeTraceEventArgs;\n}\n\ninterface ChromeTraceEventArgs { 0: 0 }\nconst dummyArgs: ChromeTraceEventArgs = { 0: 0 }; // Reuse instead of allocating for each entry\n\n/**\n * @param name Label for the trace event\n * @param start Timestamp in microseconds of when trace event started\n * @param duration Duration in microseconds of trace event\n */\nfunction createTraceEvent(name: string, start: number, duration: number): ChromeTraceEvent {\n return {\n pid: 1,\n ts: start,\n dur: duration,\n ph: \"X\",\n name,\n args: dummyArgs,\n };\n}\n\nfunction createTraceFromTimerResults(timerResults: GLTimerResult[]): ChromeTrace {\n const traceEvents: ChromeTraceEvent[] = [];\n\n const addChildren = (startTime: number, children: GLTimerResult[]) => {\n for (const child of children) {\n if (child.nanoseconds < 100)\n continue;\n const microseconds = child.nanoseconds / 1E3;\n traceEvents.push(createTraceEvent(child.label, startTime, microseconds));\n if (child.children)\n addChildren(startTime, child.children);\n startTime += microseconds;\n }\n };\n\n let frameStartTime = 0;\n let frameNumber = 0;\n for (const tr of timerResults) {\n const microseconds = tr.nanoseconds / 1E3;\n traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));\n if (tr.children)\n addChildren(frameStartTime, tr.children);\n frameStartTime += microseconds;\n ++frameNumber;\n }\n\n return { traceEvents };\n}\n\n/** @internal */\ninterface GpuProfilerResults {\n label: string;\n sum: number;\n paddingLeft: string;\n values: number[];\n}\n\n/** @alpha */\nexport class GpuProfiler {\n private readonly _div: HTMLDivElement;\n private readonly _resultsDiv: HTMLDivElement;\n private readonly _results: GpuProfilerResults[];\n private readonly _debugControl: RenderSystemDebugControl;\n\n private readonly _recordButton!: HTMLButtonElement;\n private _recordedResults: GLTimerResult[];\n private _isRecording: boolean;\n\n public constructor(parent: HTMLElement) {\n this._debugControl = IModelApp.renderSystem.debugControl!;\n\n const checkBox = createCheckBox({\n parent,\n name: \"Profile GPU\",\n id: \"gpu-profiler-toggle\",\n handler: (cb) => this.toggleProfileCheckBox(cb.checked),\n });\n\n if (!this._debugControl.isGLTimerSupported) {\n checkBox.checkbox.disabled = true;\n checkBox.div.title = \"EXT_disjoint_timer_query is not available in this browser\";\n }\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n\n this._recordButton = document.createElement(\"button\");\n this._recordButton.style.textAlign = \"center\";\n this._isRecording = false;\n this._recordButton.innerText = \"Record Profile\";\n this._recordButton.title = \"Record a profile to open with chrome://tracing\";\n this._recordedResults = [];\n this._recordButton.addEventListener(\"click\", this._clickRecord);\n this._div.appendChild(this._recordButton);\n\n this._results = [];\n this._resultsDiv = document.createElement(\"div\");\n this._resultsDiv.style.textAlign = \"left\";\n this._div.appendChild(this._resultsDiv);\n\n parent.appendChild(this._div);\n }\n\n public [Symbol.dispose](): void {\n this._debugControl.resultsCallback = undefined;\n }\n\n private toggleProfileCheckBox(isEnabled: boolean): void {\n if (isEnabled) {\n this._debugControl.resultsCallback = this._resultsCallback;\n this._resultsDiv.innerHTML = \"\";\n this._div.style.display = \"block\";\n } else {\n this._debugControl.resultsCallback = undefined;\n this._div.style.display = \"none\";\n this.stopRecording();\n }\n }\n\n private _clickRecord = () => {\n if (!this._isRecording) {\n this._isRecording = true;\n this._recordButton.innerText = \"Stop Recording\";\n return;\n }\n\n this.stopRecording();\n };\n\n private stopRecording() {\n this._isRecording = false;\n this._recordButton.innerText = \"Record Profile\";\n\n if (this._recordedResults.length !== 0) {\n const chromeTrace = createTraceFromTimerResults(this._recordedResults);\n const blob = new Blob([JSON.stringify(chromeTrace)], { type: \"application/json;charset=utf-8\" });\n saveAs(blob, \"gpu-profile.json\");\n this._recordedResults = [];\n }\n }\n\n private _resultsCallback = (result: GLTimerResult): void => {\n if (this._isRecording)\n this._recordedResults.push(result);\n\n const fragment = document.createDocumentFragment();\n const numSavedFrames = 120;\n let lastValue: string;\n const changedResults = new Array<boolean>(this._results.length); // default values false\n const printDepth = (depth: number, currentRes: GLTimerResult) => {\n const index = this._results.findIndex((res) => res.label === currentRes.label);\n if (index < 0) { // Add brand new entry\n const data: GpuProfilerResults = {\n label: currentRes.label,\n paddingLeft: `${depth}em`,\n sum: currentRes.nanoseconds,\n values: [currentRes.nanoseconds],\n };\n if (lastValue === undefined) {\n this._results.unshift(data);\n changedResults.unshift(true);\n } else if (currentRes.label === \"Read Pixels\") {\n this._results.push(data); // Read Pixels should go at the end of the list\n changedResults.push(true);\n } else {\n const prevIndex = this._results.findIndex((res) => res.label === lastValue);\n this._results.splice(prevIndex + 1, 0, data);\n changedResults.splice(prevIndex + 1, 0, true);\n }\n } else { // Edit old entry\n let oldVal = 0.0;\n const savedResults = this._results[index];\n if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between\n oldVal = savedResults.values.shift()!;\n }\n const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise\n savedResults.sum += newVal - oldVal;\n savedResults.values.push(newVal);\n changedResults[index] = true;\n }\n lastValue = currentRes.label;\n\n if (!currentRes.children)\n return;\n\n for (const childRes of currentRes.children)\n printDepth(depth + 1, childRes);\n };\n printDepth(0, result);\n\n this._results.forEach((value, index) => {\n if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.\n const oldVal = value.values.length >= numSavedFrames ? value.values.shift()! : 0.0;\n value.sum -= oldVal;\n value.values.push(0.0);\n }\n const div = document.createElement(\"div\");\n div.style.display = \"flex\";\n div.style.width = \"75%\";\n const textLabel = document.createElement(\"text\");\n textLabel.innerText = `${value.label}`;\n textLabel.style.paddingLeft = value.paddingLeft;\n div.appendChild(textLabel);\n const divLine = document.createElement(\"div\");\n divLine.style.flexGrow = \"1\";\n divLine.style.borderBottom = \"dotted 1px\";\n div.appendChild(divLine);\n const textValue = document.createElement(\"text\");\n textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\\n`;\n div.appendChild(textValue);\n fragment.appendChild(div);\n });\n\n this._resultsDiv.innerHTML = \"\";\n this._resultsDiv.appendChild(fragment);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GpuProfiler.js","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.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 Widgets\r\n */\r\n\r\nimport { saveAs } from \"file-saver\";\r\nimport { GLTimerResult, IModelApp, RenderSystemDebugControl } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\n\r\n/** Trace Event Format, viewable with chrome://tracing\r\n * https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit\r\n */\r\ninterface ChromeTrace {\r\n traceEvents: ChromeTraceEvent[];\r\n}\r\n\r\ninterface ChromeTraceEvent {\r\n /** Required by chrome://tracing */\r\n pid: 1;\r\n /** Timestamp in microseconds */\r\n ts: number;\r\n /** Duration in microseconds */\r\n dur: number;\r\n /** Denotes \"complete\" event */\r\n ph: \"X\";\r\n /** Label for chrome://tracing view */\r\n name: string;\r\n /** dummy value, args must be defined for entries to be clickable in chrome://tracing */\r\n args: ChromeTraceEventArgs;\r\n}\r\n\r\ninterface ChromeTraceEventArgs { 0: 0 }\r\nconst dummyArgs: ChromeTraceEventArgs = { 0: 0 }; // Reuse instead of allocating for each entry\r\n\r\n/**\r\n * @param name Label for the trace event\r\n * @param start Timestamp in microseconds of when trace event started\r\n * @param duration Duration in microseconds of trace event\r\n */\r\nfunction createTraceEvent(name: string, start: number, duration: number): ChromeTraceEvent {\r\n return {\r\n pid: 1,\r\n ts: start,\r\n dur: duration,\r\n ph: \"X\",\r\n name,\r\n args: dummyArgs,\r\n };\r\n}\r\n\r\nfunction createTraceFromTimerResults(timerResults: GLTimerResult[]): ChromeTrace {\r\n const traceEvents: ChromeTraceEvent[] = [];\r\n\r\n const addChildren = (startTime: number, children: GLTimerResult[]) => {\r\n for (const child of children) {\r\n if (child.nanoseconds < 100)\r\n continue;\r\n const microseconds = child.nanoseconds / 1E3;\r\n traceEvents.push(createTraceEvent(child.label, startTime, microseconds));\r\n if (child.children)\r\n addChildren(startTime, child.children);\r\n startTime += microseconds;\r\n }\r\n };\r\n\r\n let frameStartTime = 0;\r\n let frameNumber = 0;\r\n for (const tr of timerResults) {\r\n const microseconds = tr.nanoseconds / 1E3;\r\n traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));\r\n if (tr.children)\r\n addChildren(frameStartTime, tr.children);\r\n frameStartTime += microseconds;\r\n ++frameNumber;\r\n }\r\n\r\n return { traceEvents };\r\n}\r\n\r\n/** @internal */\r\ninterface GpuProfilerResults {\r\n label: string;\r\n sum: number;\r\n paddingLeft: string;\r\n values: number[];\r\n}\r\n\r\n/** @alpha */\r\nexport class GpuProfiler {\r\n private readonly _div: HTMLDivElement;\r\n private readonly _resultsDiv: HTMLDivElement;\r\n private readonly _results: GpuProfilerResults[];\r\n private readonly _debugControl: RenderSystemDebugControl;\r\n\r\n private readonly _recordButton!: HTMLButtonElement;\r\n private _recordedResults: GLTimerResult[];\r\n private _isRecording: boolean;\r\n\r\n public constructor(parent: HTMLElement) {\r\n this._debugControl = IModelApp.renderSystem.debugControl!;\r\n\r\n const checkBox = createCheckBox({\r\n parent,\r\n name: \"Profile GPU\",\r\n id: \"gpu-profiler-toggle\",\r\n handler: (cb) => this.toggleProfileCheckBox(cb.checked),\r\n });\r\n\r\n if (!this._debugControl.isGLTimerSupported) {\r\n checkBox.checkbox.disabled = true;\r\n checkBox.div.title = \"EXT_disjoint_timer_query is not available in this browser\";\r\n }\r\n\r\n this._div = document.createElement(\"div\");\r\n this._div.style.display = \"none\";\r\n\r\n this._recordButton = document.createElement(\"button\");\r\n this._recordButton.style.textAlign = \"center\";\r\n this._isRecording = false;\r\n this._recordButton.innerText = \"Record Profile\";\r\n this._recordButton.title = \"Record a profile to open with chrome://tracing\";\r\n this._recordedResults = [];\r\n this._recordButton.addEventListener(\"click\", this._clickRecord);\r\n this._div.appendChild(this._recordButton);\r\n\r\n this._results = [];\r\n this._resultsDiv = document.createElement(\"div\");\r\n this._resultsDiv.style.textAlign = \"left\";\r\n this._div.appendChild(this._resultsDiv);\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public [Symbol.dispose](): void {\r\n this._debugControl.resultsCallback = undefined;\r\n }\r\n\r\n private toggleProfileCheckBox(isEnabled: boolean): void {\r\n if (isEnabled) {\r\n this._debugControl.resultsCallback = this._resultsCallback;\r\n this._resultsDiv.innerHTML = \"\";\r\n this._div.style.display = \"block\";\r\n } else {\r\n this._debugControl.resultsCallback = undefined;\r\n this._div.style.display = \"none\";\r\n this.stopRecording();\r\n }\r\n }\r\n\r\n private _clickRecord = () => {\r\n if (!this._isRecording) {\r\n this._isRecording = true;\r\n this._recordButton.innerText = \"Stop Recording\";\r\n return;\r\n }\r\n\r\n this.stopRecording();\r\n };\r\n\r\n private stopRecording() {\r\n this._isRecording = false;\r\n this._recordButton.innerText = \"Record Profile\";\r\n\r\n if (this._recordedResults.length !== 0) {\r\n const chromeTrace = createTraceFromTimerResults(this._recordedResults);\r\n const blob = new Blob([JSON.stringify(chromeTrace)], { type: \"application/json;charset=utf-8\" });\r\n saveAs(blob, \"gpu-profile.json\");\r\n this._recordedResults = [];\r\n }\r\n }\r\n\r\n private _resultsCallback = (result: GLTimerResult): void => {\r\n if (this._isRecording)\r\n this._recordedResults.push(result);\r\n\r\n const fragment = document.createDocumentFragment();\r\n const numSavedFrames = 120;\r\n let lastValue: string;\r\n const changedResults = new Array<boolean>(this._results.length); // default values false\r\n const printDepth = (depth: number, currentRes: GLTimerResult) => {\r\n const index = this._results.findIndex((res) => res.label === currentRes.label);\r\n if (index < 0) { // Add brand new entry\r\n const data: GpuProfilerResults = {\r\n label: currentRes.label,\r\n paddingLeft: `${depth}em`,\r\n sum: currentRes.nanoseconds,\r\n values: [currentRes.nanoseconds],\r\n };\r\n if (lastValue === undefined) {\r\n this._results.unshift(data);\r\n changedResults.unshift(true);\r\n } else if (currentRes.label === \"Read Pixels\") {\r\n this._results.push(data); // Read Pixels should go at the end of the list\r\n changedResults.push(true);\r\n } else {\r\n const prevIndex = this._results.findIndex((res) => res.label === lastValue);\r\n this._results.splice(prevIndex + 1, 0, data);\r\n changedResults.splice(prevIndex + 1, 0, true);\r\n }\r\n } else { // Edit old entry\r\n let oldVal = 0.0;\r\n const savedResults = this._results[index];\r\n if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between\r\n oldVal = savedResults.values.shift()!;\r\n }\r\n const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise\r\n savedResults.sum += newVal - oldVal;\r\n savedResults.values.push(newVal);\r\n changedResults[index] = true;\r\n }\r\n lastValue = currentRes.label;\r\n\r\n if (!currentRes.children)\r\n return;\r\n\r\n for (const childRes of currentRes.children)\r\n printDepth(depth + 1, childRes);\r\n };\r\n printDepth(0, result);\r\n\r\n this._results.forEach((value, index) => {\r\n if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.\r\n const oldVal = value.values.length >= numSavedFrames ? value.values.shift()! : 0.0;\r\n value.sum -= oldVal;\r\n value.values.push(0.0);\r\n }\r\n const div = document.createElement(\"div\");\r\n div.style.display = \"flex\";\r\n div.style.width = \"75%\";\r\n const textLabel = document.createElement(\"text\");\r\n textLabel.innerText = `${value.label}`;\r\n textLabel.style.paddingLeft = value.paddingLeft;\r\n div.appendChild(textLabel);\r\n const divLine = document.createElement(\"div\");\r\n divLine.style.flexGrow = \"1\";\r\n divLine.style.borderBottom = \"dotted 1px\";\r\n div.appendChild(divLine);\r\n const textValue = document.createElement(\"text\");\r\n textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\\n`;\r\n div.appendChild(textValue);\r\n fragment.appendChild(div);\r\n });\r\n\r\n this._resultsDiv.innerHTML = \"\";\r\n this._resultsDiv.appendChild(fragment);\r\n };\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyinField.js","sourceRoot":"","sources":["../../../src/widgets/KeyinField.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 Widgets\n */\n\nimport { IModelApp, MessageBoxIconType, MessageBoxType, ParseAndRunResult } from \"@itwin/core-frontend\";\nimport { createButton } from \"../ui/Button\";\nimport { appendDataListEntries, createDataList, DataList, DataListEntry } from \"../ui/DataList\";\nimport { createTextBox, TextBox } from \"../ui/TextBox\";\n\nfunction keyinsToDataListEntries(keyins: string[]): DataListEntry[] {\n const entries: DataListEntry[] = [];\n for (const keyin of keyins) {\n entries.push({ value: keyin });\n }\n\n return entries;\n}\n\n/** Controls whether localized and/or non-localized key-in strings appear in a KeyinField's auto-completion list.\n * @beta\n */\nexport enum KeyinFieldLocalization {\n /** Include only non-localized key-in strings. */\n NonLocalized,\n /** Include only localized key-in strings. */\n Localized,\n /** Include localized and non-localized strings for each key-in. */\n Both,\n}\n\n/** Properties controlling how a KeyinField is created.\n * @beta\n */\nexport interface KeyinFieldProps {\n /** If supplied, the keyin field's elements will be added as children of this parent element. */\n parent?: HTMLElement;\n /** Required, unique ID prefix used to produce unique IDs for child elements. */\n baseId: string;\n /** Default: false. */\n wantButton?: boolean;\n /** Default: false. */\n wantLabel?: boolean;\n /** The maximum number of submitted key-ins to store in the history.\n * If greater than zero, pressing up/down while the KeyinField has focus will move backwards/forwards through the history.\n * Default: zero;\n */\n historyLength?: number;\n /** Controls whether localized and/or non-localized keyin strings appear in the autocompletion list.\n * Note: the KeyinField will still accept either localized or non-localized strings; this option only controls what is displayed in the auto-completion list.\n * Default: non-localized\n */\n localization?: KeyinFieldLocalization;\n}\n\n/** A textbox allowing input of key-ins (localized tool names) combined with a drop-down that lists all registered key-ins, filtered by substring match on the current input.\n * Press `enter` or click the Enter button to run the key-in.\n * @beta\n */\nexport class KeyinField {\n /** @alpha */\n public readonly autoCompleteList: DataList;\n public readonly textBox: TextBox;\n public readonly keyins: string[];\n private _historyIndex?: number;\n private _historyLength = 0;\n private readonly _history: string[] | undefined;\n private readonly _localization: KeyinFieldLocalization;\n\n public constructor(props: KeyinFieldProps) {\n this._localization = props.localization ?? KeyinFieldLocalization.NonLocalized;\n this.keyins = this.findKeyins();\n const autoCompleteListId = `${props.baseId}_autoComplete`;\n this.autoCompleteList = createDataList({\n parent: props.parent,\n entries: keyinsToDataListEntries(this.keyins),\n id: autoCompleteListId,\n inline: true,\n });\n\n this.textBox = createTextBox({\n label: props.wantLabel ? \"Key-in: \" : undefined,\n id: `${props.baseId}_textBox`,\n parent: props.parent,\n handler: () => this.selectAll(),\n keypresshandler: async (_tb, ev) => { await this.handleKeyPress(ev); },\n focushandler: (_tb) => { this.respondToKeyinFocus(); },\n tooltip: \"Type the key-in text here\",\n inline: true,\n list: autoCompleteListId,\n });\n\n if (props.wantButton) {\n createButton({\n handler: async (_bt) => { await this.submitKeyin(); },\n parent: props.parent,\n value: \"Enter\",\n inline: true,\n tooltip: \"Click here to execute the key-in\",\n });\n }\n\n if (undefined !== props.historyLength && props.historyLength > 0) {\n this.textBox.textbox.onkeydown = (ev) => this.handleKeyDown(ev); // eslint-disable-line @typescript-eslint/promise-function-async\n this._historyLength = props.historyLength;\n this._history = [];\n }\n }\n\n public focus() { this.textBox.textbox.focus(); }\n public loseFocus() { this.textBox.textbox.blur(); }\n\n public selectAll(): void {\n this.textBox.textbox.setSelectionRange(0, this.textBox.textbox.value.length);\n }\n\n private async handleKeyPress(ev: KeyboardEvent): Promise<void> {\n ev.stopPropagation();\n\n if (\"Enter\" === ev.key)\n await this.submitKeyin();\n }\n\n private async handleKeyDown(ev: KeyboardEvent): Promise<void> {\n ev.stopPropagation();\n\n if (undefined === this._history || 0 === this._history.length)\n return;\n\n // NB: History list is ordered by most to least recent so moving \"backwards\" means incrementing the index.\n const direction = ev.key === \"ArrowDown\" ? 1 : (ev.key === \"ArrowUp\" ? 1 : 0);\n if (0 === direction)\n return;\n\n ev.preventDefault();\n ev.stopPropagation();\n\n if (this._historyIndex === undefined) {\n if (direction < 0)\n return;\n else\n this._historyIndex = -1;\n }\n\n const newIndex = this._historyIndex + direction;\n if (newIndex >= 0 && newIndex < this._history.length) {\n this._historyIndex = newIndex;\n if (this._historyIndex >= 0)\n this.textBox.textbox.value = this._history[newIndex];\n }\n }\n\n private resetHistoryIndex(): void {\n this._historyIndex = undefined;\n }\n\n private pushHistory(keyin: string): void {\n if (undefined === this._history)\n return;\n\n this.textBox.textbox.value = \"\";\n this.resetHistoryIndex();\n if (this._history.length === 0 || keyin.toLowerCase() !== this._history[0].toLowerCase()) {\n this._history.unshift(keyin);\n if (this._history.length > this._historyLength)\n this._history.pop();\n }\n }\n\n private async submitKeyin(): Promise<void> {\n this.selectAll();\n const textBox = this.textBox.textbox;\n\n const input = textBox.value;\n this.pushHistory(input);\n\n let message: string | undefined;\n try {\n switch (await IModelApp.tools.parseAndRun(input)) {\n case ParseAndRunResult.ToolNotFound:\n message = `Cannot find a key-in that matches: ${input}`;\n break;\n case ParseAndRunResult.BadArgumentCount:\n message = \"Incorrect number of arguments\";\n break;\n case ParseAndRunResult.FailedToRun:\n message = \"Key-in failed to run\";\n break;\n }\n } catch (ex) {\n message = `Key-in produced exception: ${ex}`;\n }\n\n if (undefined !== message)\n await IModelApp.notifications.openMessageBox(MessageBoxType.MediumAlert, message, MessageBoxIconType.Warning);\n }\n\n private respondToKeyinFocus() {\n this.resetHistoryIndex();\n\n // Handle case in which new tools were registered since we last populated the auto-complete list.\n // This can occur e.g. as a result of loading a extension, or deferred initialization of a package like markup.\n const keyins = this.findKeyins();\n if (keyins.length > this.keyins.length) {\n const newKeyins: string[] = [];\n for (const keyin of keyins)\n if (!this.keyins.includes(keyin)) {\n newKeyins.push(keyin);\n this.keyins.push(keyin);\n }\n\n if (newKeyins.length > 0)\n appendDataListEntries(this.autoCompleteList, keyinsToDataListEntries(newKeyins));\n }\n }\n\n private findKeyins(): string[] {\n const keyins: string[] = [];\n const tools = IModelApp.tools.getToolList();\n for (const tool of tools) {\n switch (this._localization) {\n case KeyinFieldLocalization.Localized:\n keyins.push(tool.keyin);\n break;\n case KeyinFieldLocalization.Both:\n keyins.push(tool.keyin);\n if (tool.keyin === tool.englishKeyin)\n break;\n /* falls through */\n default:\n case KeyinFieldLocalization.NonLocalized:\n keyins.push(tool.englishKeyin);\n break;\n }\n }\n\n return keyins;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"KeyinField.js","sourceRoot":"","sources":["../../../src/widgets/KeyinField.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 Widgets\r\n */\r\n\r\nimport { IModelApp, MessageBoxIconType, MessageBoxType, ParseAndRunResult } from \"@itwin/core-frontend\";\r\nimport { createButton } from \"../ui/Button\";\r\nimport { appendDataListEntries, createDataList, DataList, DataListEntry } from \"../ui/DataList\";\r\nimport { createTextBox, TextBox } from \"../ui/TextBox\";\r\n\r\nfunction keyinsToDataListEntries(keyins: string[]): DataListEntry[] {\r\n const entries: DataListEntry[] = [];\r\n for (const keyin of keyins) {\r\n entries.push({ value: keyin });\r\n }\r\n\r\n return entries;\r\n}\r\n\r\n/** Controls whether localized and/or non-localized key-in strings appear in a KeyinField's auto-completion list.\r\n * @beta\r\n */\r\nexport enum KeyinFieldLocalization {\r\n /** Include only non-localized key-in strings. */\r\n NonLocalized,\r\n /** Include only localized key-in strings. */\r\n Localized,\r\n /** Include localized and non-localized strings for each key-in. */\r\n Both,\r\n}\r\n\r\n/** Properties controlling how a KeyinField is created.\r\n * @beta\r\n */\r\nexport interface KeyinFieldProps {\r\n /** If supplied, the keyin field's elements will be added as children of this parent element. */\r\n parent?: HTMLElement;\r\n /** Required, unique ID prefix used to produce unique IDs for child elements. */\r\n baseId: string;\r\n /** Default: false. */\r\n wantButton?: boolean;\r\n /** Default: false. */\r\n wantLabel?: boolean;\r\n /** The maximum number of submitted key-ins to store in the history.\r\n * If greater than zero, pressing up/down while the KeyinField has focus will move backwards/forwards through the history.\r\n * Default: zero;\r\n */\r\n historyLength?: number;\r\n /** Controls whether localized and/or non-localized keyin strings appear in the autocompletion list.\r\n * Note: the KeyinField will still accept either localized or non-localized strings; this option only controls what is displayed in the auto-completion list.\r\n * Default: non-localized\r\n */\r\n localization?: KeyinFieldLocalization;\r\n}\r\n\r\n/** A textbox allowing input of key-ins (localized tool names) combined with a drop-down that lists all registered key-ins, filtered by substring match on the current input.\r\n * Press `enter` or click the Enter button to run the key-in.\r\n * @beta\r\n */\r\nexport class KeyinField {\r\n /** @alpha */\r\n public readonly autoCompleteList: DataList;\r\n public readonly textBox: TextBox;\r\n public readonly keyins: string[];\r\n private _historyIndex?: number;\r\n private _historyLength = 0;\r\n private readonly _history: string[] | undefined;\r\n private readonly _localization: KeyinFieldLocalization;\r\n\r\n public constructor(props: KeyinFieldProps) {\r\n this._localization = props.localization ?? KeyinFieldLocalization.NonLocalized;\r\n this.keyins = this.findKeyins();\r\n const autoCompleteListId = `${props.baseId}_autoComplete`;\r\n this.autoCompleteList = createDataList({\r\n parent: props.parent,\r\n entries: keyinsToDataListEntries(this.keyins),\r\n id: autoCompleteListId,\r\n inline: true,\r\n });\r\n\r\n this.textBox = createTextBox({\r\n label: props.wantLabel ? \"Key-in: \" : undefined,\r\n id: `${props.baseId}_textBox`,\r\n parent: props.parent,\r\n handler: () => this.selectAll(),\r\n keypresshandler: async (_tb, ev) => { await this.handleKeyPress(ev); },\r\n focushandler: (_tb) => { this.respondToKeyinFocus(); },\r\n tooltip: \"Type the key-in text here\",\r\n inline: true,\r\n list: autoCompleteListId,\r\n });\r\n\r\n if (props.wantButton) {\r\n createButton({\r\n handler: async (_bt) => { await this.submitKeyin(); },\r\n parent: props.parent,\r\n value: \"Enter\",\r\n inline: true,\r\n tooltip: \"Click here to execute the key-in\",\r\n });\r\n }\r\n\r\n if (undefined !== props.historyLength && props.historyLength > 0) {\r\n this.textBox.textbox.onkeydown = (ev) => this.handleKeyDown(ev); // eslint-disable-line @typescript-eslint/promise-function-async\r\n this._historyLength = props.historyLength;\r\n this._history = [];\r\n }\r\n }\r\n\r\n public focus() { this.textBox.textbox.focus(); }\r\n public loseFocus() { this.textBox.textbox.blur(); }\r\n\r\n public selectAll(): void {\r\n this.textBox.textbox.setSelectionRange(0, this.textBox.textbox.value.length);\r\n }\r\n\r\n private async handleKeyPress(ev: KeyboardEvent): Promise<void> {\r\n ev.stopPropagation();\r\n\r\n if (\"Enter\" === ev.key)\r\n await this.submitKeyin();\r\n }\r\n\r\n private async handleKeyDown(ev: KeyboardEvent): Promise<void> {\r\n ev.stopPropagation();\r\n\r\n if (undefined === this._history || 0 === this._history.length)\r\n return;\r\n\r\n // NB: History list is ordered by most to least recent so moving \"backwards\" means incrementing the index.\r\n const direction = ev.key === \"ArrowDown\" ? 1 : (ev.key === \"ArrowUp\" ? 1 : 0);\r\n if (0 === direction)\r\n return;\r\n\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n if (this._historyIndex === undefined) {\r\n if (direction < 0)\r\n return;\r\n else\r\n this._historyIndex = -1;\r\n }\r\n\r\n const newIndex = this._historyIndex + direction;\r\n if (newIndex >= 0 && newIndex < this._history.length) {\r\n this._historyIndex = newIndex;\r\n if (this._historyIndex >= 0)\r\n this.textBox.textbox.value = this._history[newIndex];\r\n }\r\n }\r\n\r\n private resetHistoryIndex(): void {\r\n this._historyIndex = undefined;\r\n }\r\n\r\n private pushHistory(keyin: string): void {\r\n if (undefined === this._history)\r\n return;\r\n\r\n this.textBox.textbox.value = \"\";\r\n this.resetHistoryIndex();\r\n if (this._history.length === 0 || keyin.toLowerCase() !== this._history[0].toLowerCase()) {\r\n this._history.unshift(keyin);\r\n if (this._history.length > this._historyLength)\r\n this._history.pop();\r\n }\r\n }\r\n\r\n private async submitKeyin(): Promise<void> {\r\n this.selectAll();\r\n const textBox = this.textBox.textbox;\r\n\r\n const input = textBox.value;\r\n this.pushHistory(input);\r\n\r\n let message: string | undefined;\r\n try {\r\n switch (await IModelApp.tools.parseAndRun(input)) {\r\n case ParseAndRunResult.ToolNotFound:\r\n message = `Cannot find a key-in that matches: ${input}`;\r\n break;\r\n case ParseAndRunResult.BadArgumentCount:\r\n message = \"Incorrect number of arguments\";\r\n break;\r\n case ParseAndRunResult.FailedToRun:\r\n message = \"Key-in failed to run\";\r\n break;\r\n }\r\n } catch (ex) {\r\n message = `Key-in produced exception: ${ex}`;\r\n }\r\n\r\n if (undefined !== message)\r\n await IModelApp.notifications.openMessageBox(MessageBoxType.MediumAlert, message, MessageBoxIconType.Warning);\r\n }\r\n\r\n private respondToKeyinFocus() {\r\n this.resetHistoryIndex();\r\n\r\n // Handle case in which new tools were registered since we last populated the auto-complete list.\r\n // This can occur e.g. as a result of loading a extension, or deferred initialization of a package like markup.\r\n const keyins = this.findKeyins();\r\n if (keyins.length > this.keyins.length) {\r\n const newKeyins: string[] = [];\r\n for (const keyin of keyins)\r\n if (!this.keyins.includes(keyin)) {\r\n newKeyins.push(keyin);\r\n this.keyins.push(keyin);\r\n }\r\n\r\n if (newKeyins.length > 0)\r\n appendDataListEntries(this.autoCompleteList, keyinsToDataListEntries(newKeyins));\r\n }\r\n }\r\n\r\n private findKeyins(): string[] {\r\n const keyins: string[] = [];\r\n const tools = IModelApp.tools.getToolList();\r\n for (const tool of tools) {\r\n switch (this._localization) {\r\n case KeyinFieldLocalization.Localized:\r\n keyins.push(tool.keyin);\r\n break;\r\n case KeyinFieldLocalization.Both:\r\n keyins.push(tool.keyin);\r\n if (tool.keyin === tool.englishKeyin)\r\n break;\r\n /* falls through */\r\n default:\r\n case KeyinFieldLocalization.NonLocalized:\r\n keyins.push(tool.englishKeyin);\r\n break;\r\n }\r\n }\r\n\r\n return keyins;\r\n }\r\n}\r\n"]}
|