@itwin/components-react 5.3.1 → 5.4.0
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 +9 -1
- package/lib/components-react/editors/CustomNumberEditor.d.ts +1 -1
- package/lib/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
- package/lib/components-react/editors/CustomNumberEditor.js +5 -0
- package/lib/components-react/editors/CustomNumberEditor.js.map +1 -1
- package/lib/components-react/new-editors/EditorRenderer.d.ts +11 -0
- package/lib/components-react/new-editors/EditorRenderer.d.ts.map +1 -0
- package/lib/components-react/new-editors/EditorRenderer.js +22 -0
- package/lib/components-react/new-editors/EditorRenderer.js.map +1 -0
- package/lib/components-react/new-editors/Types.d.ts +46 -0
- package/lib/components-react/new-editors/Types.d.ts.map +1 -0
- package/lib/components-react/new-editors/Types.js +20 -0
- package/lib/components-react/new-editors/Types.js.map +1 -0
- package/lib/components-react/new-editors/UseCommittableValue.d.ts +51 -0
- package/lib/components-react/new-editors/UseCommittableValue.d.ts.map +1 -0
- package/lib/components-react/new-editors/UseCommittableValue.js +85 -0
- package/lib/components-react/new-editors/UseCommittableValue.js.map +1 -0
- package/lib/components-react/new-editors/editors/BooleanEditor.d.ts +10 -0
- package/lib/components-react/new-editors/editors/BooleanEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/BooleanEditor.js +22 -0
- package/lib/components-react/new-editors/editors/BooleanEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors/DateEditor.d.ts +10 -0
- package/lib/components-react/new-editors/editors/DateEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/DateEditor.js +18 -0
- package/lib/components-react/new-editors/editors/DateEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors/DateInput.d.ts +15 -0
- package/lib/components-react/new-editors/editors/DateInput.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/DateInput.js +23 -0
- package/lib/components-react/new-editors/editors/DateInput.js.map +1 -0
- package/lib/components-react/new-editors/editors/DateTimeEditor.d.ts +10 -0
- package/lib/components-react/new-editors/editors/DateTimeEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/DateTimeEditor.js +18 -0
- package/lib/components-react/new-editors/editors/DateTimeEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors/EnumEditor.d.ts +10 -0
- package/lib/components-react/new-editors/editors/EnumEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/EnumEditor.js +30 -0
- package/lib/components-react/new-editors/editors/EnumEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors/FallbackEditor.d.ts +8 -0
- package/lib/components-react/new-editors/editors/FallbackEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/FallbackEditor.js +41 -0
- package/lib/components-react/new-editors/editors/FallbackEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors/FormattedNumericInput.d.ts +24 -0
- package/lib/components-react/new-editors/editors/FormattedNumericInput.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/FormattedNumericInput.js +77 -0
- package/lib/components-react/new-editors/editors/FormattedNumericInput.js.map +1 -0
- package/lib/components-react/new-editors/editors/NumericEditor.d.ts +10 -0
- package/lib/components-react/new-editors/editors/NumericEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/NumericEditor.js +23 -0
- package/lib/components-react/new-editors/editors/NumericEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors/TextEditor.d.ts +10 -0
- package/lib/components-react/new-editors/editors/TextEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/TextEditor.js +17 -0
- package/lib/components-react/new-editors/editors/TextEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors/ToggleEditor.d.ts +10 -0
- package/lib/components-react/new-editors/editors/ToggleEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors/ToggleEditor.js +22 -0
- package/lib/components-react/new-editors/editors/ToggleEditor.js.map +1 -0
- package/lib/components-react/new-editors/editors-registry/DefaultEditors.d.ts +50 -0
- package/lib/components-react/new-editors/editors-registry/DefaultEditors.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors-registry/DefaultEditors.js +117 -0
- package/lib/components-react/new-editors/editors-registry/DefaultEditors.js.map +1 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryContext.d.ts +12 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryContext.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryContext.js +14 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryContext.js.map +1 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryProvider.d.ts +15 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryProvider.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryProvider.js +25 -0
- package/lib/components-react/new-editors/editors-registry/EditorsRegistryProvider.js.map +1 -0
- package/lib/components-react/new-editors/editors-registry/UseEditor.d.ts +16 -0
- package/lib/components-react/new-editors/editors-registry/UseEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/editors-registry/UseEditor.js +36 -0
- package/lib/components-react/new-editors/editors-registry/UseEditor.js.map +1 -0
- package/lib/components-react/new-editors/interop/EditorInterop.d.ts +17 -0
- package/lib/components-react/new-editors/interop/EditorInterop.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/EditorInterop.js +146 -0
- package/lib/components-react/new-editors/interop/EditorInterop.js.map +1 -0
- package/lib/components-react/new-editors/interop/IconsRegistry.d.ts +6 -0
- package/lib/components-react/new-editors/interop/IconsRegistry.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/IconsRegistry.js +41 -0
- package/lib/components-react/new-editors/interop/IconsRegistry.js.map +1 -0
- package/lib/components-react/new-editors/interop/Metadata.d.ts +21 -0
- package/lib/components-react/new-editors/interop/Metadata.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/Metadata.js +13 -0
- package/lib/components-react/new-editors/interop/Metadata.js.map +1 -0
- package/lib/components-react/new-editors/interop/PropertyRecordEditor.d.ts +22 -0
- package/lib/components-react/new-editors/interop/PropertyRecordEditor.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/PropertyRecordEditor.js +41 -0
- package/lib/components-react/new-editors/interop/PropertyRecordEditor.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/Color.d.ts +7 -0
- package/lib/components-react/new-editors/interop/old-editors/Color.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/Color.js +48 -0
- package/lib/components-react/new-editors/interop/old-editors/Color.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/CustomNumber.d.ts +3 -0
- package/lib/components-react/new-editors/interop/old-editors/CustomNumber.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/CustomNumber.js +59 -0
- package/lib/components-react/new-editors/interop/old-editors/CustomNumber.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/Enum.d.ts +4 -0
- package/lib/components-react/new-editors/interop/old-editors/Enum.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/Enum.js +23 -0
- package/lib/components-react/new-editors/interop/old-editors/Enum.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/EnumButtonGroup.d.ts +4 -0
- package/lib/components-react/new-editors/interop/old-editors/EnumButtonGroup.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/EnumButtonGroup.js +50 -0
- package/lib/components-react/new-editors/interop/old-editors/EnumButtonGroup.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/NumericInput.d.ts +4 -0
- package/lib/components-react/new-editors/interop/old-editors/NumericInput.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/NumericInput.js +86 -0
- package/lib/components-react/new-editors/interop/old-editors/NumericInput.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/Slider.d.ts +3 -0
- package/lib/components-react/new-editors/interop/old-editors/Slider.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/Slider.js +66 -0
- package/lib/components-react/new-editors/interop/old-editors/Slider.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/TextArea.d.ts +3 -0
- package/lib/components-react/new-editors/interop/old-editors/TextArea.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/TextArea.js +33 -0
- package/lib/components-react/new-editors/interop/old-editors/TextArea.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEditorParams.d.ts +31 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEditorParams.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEditorParams.js +52 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEditorParams.js.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEnumMetadata.d.ts +8 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEnumMetadata.d.ts.map +1 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEnumMetadata.js +41 -0
- package/lib/components-react/new-editors/interop/old-editors/UseEnumMetadata.js.map +1 -0
- package/lib/components-react/new-editors/values/Metadata.d.ts +35 -0
- package/lib/components-react/new-editors/values/Metadata.d.ts.map +1 -0
- package/lib/components-react/new-editors/values/Metadata.js +9 -0
- package/lib/components-react/new-editors/values/Metadata.js.map +1 -0
- package/lib/components-react/new-editors/values/ValueUtilities.d.ts +40 -0
- package/lib/components-react/new-editors/values/ValueUtilities.d.ts.map +1 -0
- package/lib/components-react/new-editors/values/ValueUtilities.js +84 -0
- package/lib/components-react/new-editors/values/ValueUtilities.js.map +1 -0
- package/lib/components-react/new-editors/values/Values.d.ts +58 -0
- package/lib/components-react/new-editors/values/Values.d.ts.map +1 -0
- package/lib/components-react/new-editors/values/Values.js +9 -0
- package/lib/components-react/new-editors/values/Values.js.map +1 -0
- package/lib/components-react/properties/IconNodeEditorParam.d.ts +16 -0
- package/lib/components-react/properties/IconNodeEditorParam.d.ts.map +1 -0
- package/lib/components-react/properties/IconNodeEditorParam.js +20 -0
- package/lib/components-react/properties/IconNodeEditorParam.js.map +1 -0
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +7 -0
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts.map +1 -1
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGrid.js +2 -1
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +6 -0
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +1 -1
- package/lib/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
- package/lib/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.d.ts +2 -0
- package/lib/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.d.ts.map +1 -1
- package/lib/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js +3 -3
- package/lib/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js.map +1 -1
- package/lib/components-react.d.ts +9 -0
- package/lib/components-react.d.ts.map +1 -1
- package/lib/components-react.js +7 -0
- package/lib/components-react.js.map +1 -1
- package/lib/internal.d.ts +1 -0
- package/lib/internal.d.ts.map +1 -1
- package/lib/internal.js +1 -0
- package/lib/internal.js.map +1 -1
- package/package.json +4 -6
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { PropertyEditorParamTypes, StandardEditorNames, } from "@itwin/appui-abstract";
|
|
7
|
+
import { InputWithDecorations } from "@itwin/itwinui-react";
|
|
8
|
+
import { createEditorSpec } from "../../Types.js";
|
|
9
|
+
import { isOldEditorMetadata } from "../Metadata.js";
|
|
10
|
+
import { useCustomFormattedNumberParams, useIconEditorParams, useInputEditorSizeParams, } from "./UseEditorParams.js";
|
|
11
|
+
import { findIcon } from "../IconsRegistry.js";
|
|
12
|
+
import { isNumeric } from "../../values/ValueUtilities.js";
|
|
13
|
+
/* v8 ignore start */
|
|
14
|
+
/** @internal */
|
|
15
|
+
export const CustomNumberEditorSpec = createEditorSpec({
|
|
16
|
+
isMetadataSupported: (metadata) => isOldEditorMetadata(metadata) &&
|
|
17
|
+
metadata.type === "number" &&
|
|
18
|
+
!!metadata.params?.find((param) => param.type === PropertyEditorParamTypes.CustomFormattedNumber.valueOf()) &&
|
|
19
|
+
metadata.preferredEditor === StandardEditorNames.NumberCustom,
|
|
20
|
+
isValueSupported: isNumeric,
|
|
21
|
+
Editor: CustomNumberEditor,
|
|
22
|
+
});
|
|
23
|
+
function CustomNumberEditor({ metadata, value, onChange, size, disabled, }) {
|
|
24
|
+
const formatParams = useCustomFormattedNumberParams(metadata);
|
|
25
|
+
const sizeParams = useInputEditorSizeParams(metadata);
|
|
26
|
+
const iconParams = useIconEditorParams(metadata);
|
|
27
|
+
const inputRef = React.useRef(null);
|
|
28
|
+
const [inputValue, setInputValue] = React.useState(() => {
|
|
29
|
+
return value?.rawValue !== undefined && formatParams
|
|
30
|
+
? formatParams.formatFunction(value.rawValue)
|
|
31
|
+
: "";
|
|
32
|
+
});
|
|
33
|
+
if (!formatParams) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const style = sizeParams?.size !== undefined
|
|
37
|
+
? {
|
|
38
|
+
minWidth: `${sizeParams?.size * 0.75}em`,
|
|
39
|
+
}
|
|
40
|
+
: undefined;
|
|
41
|
+
const icon = iconParams?.definition?.iconSpec !== undefined
|
|
42
|
+
? findIcon(iconParams.definition.iconSpec)
|
|
43
|
+
: undefined;
|
|
44
|
+
const handleChange = (e) => {
|
|
45
|
+
const currentValue = e.target.value;
|
|
46
|
+
const result = formatParams.parseFunction(currentValue);
|
|
47
|
+
const parsedValue = typeof result.value === "number" ? result.value : undefined;
|
|
48
|
+
setInputValue(currentValue);
|
|
49
|
+
onChange({
|
|
50
|
+
rawValue: parsedValue,
|
|
51
|
+
displayValue: currentValue,
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
return (React.createElement(InputWithDecorations, { size: size },
|
|
55
|
+
icon !== undefined ? (React.createElement(InputWithDecorations.Icon, null, icon)) : null,
|
|
56
|
+
React.createElement(InputWithDecorations.Input, { ref: inputRef, style: style, disabled: disabled, onChange: handleChange, value: inputValue })));
|
|
57
|
+
}
|
|
58
|
+
/* v8 ignore stop */
|
|
59
|
+
//# sourceMappingURL=CustomNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomNumber.js","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/CustomNumber.tsx"],"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\nimport * as React from \"react\";\nimport {\n PropertyEditorParamTypes,\n StandardEditorNames,\n} from \"@itwin/appui-abstract\";\nimport { InputWithDecorations } from \"@itwin/itwinui-react\";\nimport type { EditorProps } from \"../../Types.js\";\nimport { createEditorSpec } from \"../../Types.js\";\nimport type { OldEditorMetadata } from \"../Metadata.js\";\nimport { isOldEditorMetadata } from \"../Metadata.js\";\nimport type { NumericValue } from \"../../values/Values.js\";\nimport {\n useCustomFormattedNumberParams,\n useIconEditorParams,\n useInputEditorSizeParams,\n} from \"./UseEditorParams.js\";\nimport { findIcon } from \"../IconsRegistry.js\";\nimport { isNumeric } from \"../../values/ValueUtilities.js\";\n\n/* v8 ignore start */\n\n/** @internal */\nexport const CustomNumberEditorSpec = createEditorSpec({\n isMetadataSupported: (metadata): metadata is OldEditorMetadata =>\n isOldEditorMetadata(metadata) &&\n metadata.type === \"number\" &&\n !!metadata.params?.find(\n (param) =>\n param.type === PropertyEditorParamTypes.CustomFormattedNumber.valueOf()\n ) &&\n metadata.preferredEditor === StandardEditorNames.NumberCustom,\n isValueSupported: isNumeric,\n Editor: CustomNumberEditor,\n});\n\nfunction CustomNumberEditor({\n metadata,\n value,\n onChange,\n size,\n disabled,\n}: EditorProps<OldEditorMetadata, NumericValue>) {\n const formatParams = useCustomFormattedNumberParams(metadata);\n const sizeParams = useInputEditorSizeParams(metadata);\n const iconParams = useIconEditorParams(metadata);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = React.useState(() => {\n return value?.rawValue !== undefined && formatParams\n ? formatParams.formatFunction(value.rawValue)\n : \"\";\n });\n\n if (!formatParams) {\n return null;\n }\n\n const style: React.CSSProperties | undefined =\n sizeParams?.size !== undefined\n ? {\n minWidth: `${sizeParams?.size * 0.75}em`,\n }\n : undefined;\n const icon =\n iconParams?.definition?.iconSpec !== undefined\n ? findIcon(iconParams.definition.iconSpec)\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const currentValue = e.target.value;\n const result = formatParams.parseFunction(currentValue);\n const parsedValue =\n typeof result.value === \"number\" ? result.value : undefined;\n\n setInputValue(currentValue);\n\n onChange({\n rawValue: parsedValue,\n displayValue: currentValue,\n });\n };\n\n return (\n <InputWithDecorations size={size}>\n {icon !== undefined ? (\n <InputWithDecorations.Icon>{icon}</InputWithDecorations.Icon>\n ) : null}\n <InputWithDecorations.Input\n ref={inputRef}\n style={style}\n disabled={disabled}\n onChange={handleChange}\n value={inputValue}\n />\n </InputWithDecorations>\n );\n}\n\n/* v8 ignore stop */\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Enum.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/Enum.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAUxB,gBAAgB;AAChB,eAAO,MAAM,cAAc,EAAE,UAK3B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { createEditorSpec, } from "../../Types.js";
|
|
7
|
+
import { EnumEditor as NewEnumEditor } from "../../editors/EnumEditor.js";
|
|
8
|
+
import { isOldEditorMetadata } from "../Metadata.js";
|
|
9
|
+
import { useEnumMetadata } from "./UseEnumMetadata.js";
|
|
10
|
+
import { isEnum } from "../../values/ValueUtilities.js";
|
|
11
|
+
/* v8 ignore start */
|
|
12
|
+
/** @internal */
|
|
13
|
+
export const EnumEditorSpec = createEditorSpec({
|
|
14
|
+
isMetadataSupported: (metadata) => isOldEditorMetadata(metadata) && metadata.type === "enum",
|
|
15
|
+
isValueSupported: isEnum,
|
|
16
|
+
Editor: EnumEditor,
|
|
17
|
+
});
|
|
18
|
+
function EnumEditor(props) {
|
|
19
|
+
const newMetadata = useEnumMetadata(props.metadata);
|
|
20
|
+
return React.createElement(NewEnumEditor, { ...props, metadata: newMetadata });
|
|
21
|
+
}
|
|
22
|
+
/* v8 ignore stop */
|
|
23
|
+
//# sourceMappingURL=Enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Enum.js","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/Enum.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,gBAAgB,GAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,qBAAqB;AAErB,gBAAgB;AAChB,MAAM,CAAC,MAAM,cAAc,GAAe,gBAAgB,CAAC;IACzD,mBAAmB,EAAE,CAAC,QAAQ,EAAiC,EAAE,CAC/D,mBAAmB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;IAC3D,gBAAgB,EAAE,MAAM;IACxB,MAAM,EAAE,UAAU;CACnB,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,KAAgD;IAClE,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,OAAO,oBAAC,aAAa,OAAK,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAI,CAAC;AAC7D,CAAC;AAED,oBAAoB","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\nimport * as React from \"react\";\nimport {\n createEditorSpec,\n type EditorProps,\n type EditorSpec,\n} from \"../../Types.js\";\nimport { EnumEditor as NewEnumEditor } from \"../../editors/EnumEditor.js\";\nimport type { OldEditorMetadata } from \"../Metadata.js\";\nimport { isOldEditorMetadata } from \"../Metadata.js\";\nimport type { EnumValue } from \"../../values/Values.js\";\nimport { useEnumMetadata } from \"./UseEnumMetadata.js\";\nimport { isEnum } from \"../../values/ValueUtilities.js\";\n\n/* v8 ignore start */\n\n/** @internal */\nexport const EnumEditorSpec: EditorSpec = createEditorSpec({\n isMetadataSupported: (metadata): metadata is OldEditorMetadata =>\n isOldEditorMetadata(metadata) && metadata.type === \"enum\",\n isValueSupported: isEnum,\n Editor: EnumEditor,\n});\n\nfunction EnumEditor(props: EditorProps<OldEditorMetadata, EnumValue>) {\n const newMetadata = useEnumMetadata(props.metadata);\n return <NewEnumEditor {...props} metadata={newMetadata} />;\n}\n\n/* v8 ignore stop */\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnumButtonGroup.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/EnumButtonGroup.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAa9D,gBAAgB;AAChB,eAAO,MAAM,yBAAyB,EAAE,UAOtC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { StandardEditorNames, } from "@itwin/appui-abstract";
|
|
7
|
+
import { createEditorSpec } from "../../Types.js";
|
|
8
|
+
import { isOldEditorMetadata } from "../Metadata.js";
|
|
9
|
+
import { useEnumMetadata } from "./UseEnumMetadata.js";
|
|
10
|
+
import { useButtonGroupEditorParams } from "./UseEditorParams.js";
|
|
11
|
+
import { ButtonGroup, IconButton } from "@itwin/itwinui-react";
|
|
12
|
+
import { findIcon } from "../IconsRegistry.js";
|
|
13
|
+
import { isEnum } from "../../values/ValueUtilities.js";
|
|
14
|
+
/* v8 ignore start */
|
|
15
|
+
/** @internal */
|
|
16
|
+
export const EnumButtonGroupEditorSpec = createEditorSpec({
|
|
17
|
+
isMetadataSupported: (metadata) => isOldEditorMetadata(metadata) &&
|
|
18
|
+
metadata.type === "enum" &&
|
|
19
|
+
metadata.preferredEditor === StandardEditorNames.EnumButtonGroup,
|
|
20
|
+
isValueSupported: isEnum,
|
|
21
|
+
Editor: EnumButtonGroupEditor,
|
|
22
|
+
});
|
|
23
|
+
function EnumButtonGroupEditor({ value, onChange, commit, size, disabled, metadata, }) {
|
|
24
|
+
const enumMetadata = useEnumMetadata(metadata);
|
|
25
|
+
const buttonGroupParams = useButtonGroupEditorParams(metadata);
|
|
26
|
+
const enumIcons = React.useMemo(() => {
|
|
27
|
+
return buttonGroupParams
|
|
28
|
+
? createIconsMap(enumMetadata.choices, buttonGroupParams)
|
|
29
|
+
: undefined;
|
|
30
|
+
}, [enumMetadata, buttonGroupParams]);
|
|
31
|
+
const firstChoice = enumMetadata.choices[0];
|
|
32
|
+
const currentValue = value ? value : { choice: firstChoice?.value ?? "" };
|
|
33
|
+
return (React.createElement(ButtonGroup, { orientation: "horizontal" }, enumMetadata.choices.map((choice) => {
|
|
34
|
+
const icon = findIcon(enumIcons?.get(choice.value));
|
|
35
|
+
return (React.createElement(IconButton, { key: choice.value, onClick: () => {
|
|
36
|
+
onChange({ choice: choice.value });
|
|
37
|
+
commit?.();
|
|
38
|
+
}, label: choice.label, isActive: choice.value === currentValue.choice, size: size, disabled: disabled }, icon));
|
|
39
|
+
})));
|
|
40
|
+
}
|
|
41
|
+
function createIconsMap(choices, params) {
|
|
42
|
+
const icons = new Map();
|
|
43
|
+
for (let i = 0; i < choices.length; i++) {
|
|
44
|
+
const iconDef = params.buttons[i];
|
|
45
|
+
icons.set(choices[i].value, iconDef.iconSpec);
|
|
46
|
+
}
|
|
47
|
+
return icons;
|
|
48
|
+
}
|
|
49
|
+
/* v8 ignore stop */
|
|
50
|
+
//# sourceMappingURL=EnumButtonGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnumButtonGroup.js","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/EnumButtonGroup.tsx"],"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\nimport * as React from \"react\";\nimport type { ButtonGroupEditorParams } from \"@itwin/appui-abstract\";\nimport {\n type EnumerationChoice,\n StandardEditorNames,\n} from \"@itwin/appui-abstract\";\nimport type { EditorProps, EditorSpec } from \"../../Types.js\";\nimport { createEditorSpec } from \"../../Types.js\";\nimport type { OldEditorMetadata } from \"../Metadata.js\";\nimport { isOldEditorMetadata } from \"../Metadata.js\";\nimport type { EnumValue } from \"../../values/Values.js\";\nimport { useEnumMetadata } from \"./UseEnumMetadata.js\";\nimport { useButtonGroupEditorParams } from \"./UseEditorParams.js\";\nimport { ButtonGroup, IconButton } from \"@itwin/itwinui-react\";\nimport { findIcon } from \"../IconsRegistry.js\";\nimport { isEnum } from \"../../values/ValueUtilities.js\";\n\n/* v8 ignore start */\n\n/** @internal */\nexport const EnumButtonGroupEditorSpec: EditorSpec = createEditorSpec({\n isMetadataSupported: (metadata): metadata is OldEditorMetadata =>\n isOldEditorMetadata(metadata) &&\n metadata.type === \"enum\" &&\n metadata.preferredEditor === StandardEditorNames.EnumButtonGroup,\n isValueSupported: isEnum,\n Editor: EnumButtonGroupEditor,\n});\n\nfunction EnumButtonGroupEditor({\n value,\n onChange,\n commit,\n size,\n disabled,\n metadata,\n}: EditorProps<OldEditorMetadata, EnumValue>) {\n const enumMetadata = useEnumMetadata(metadata);\n const buttonGroupParams = useButtonGroupEditorParams(metadata);\n\n const enumIcons = React.useMemo(() => {\n return buttonGroupParams\n ? createIconsMap(enumMetadata.choices, buttonGroupParams)\n : undefined;\n }, [enumMetadata, buttonGroupParams]);\n\n const firstChoice = enumMetadata.choices[0] as EnumerationChoice | undefined;\n const currentValue = value ? value : { choice: firstChoice?.value ?? \"\" };\n\n return (\n <ButtonGroup orientation=\"horizontal\">\n {enumMetadata.choices.map((choice) => {\n const icon = findIcon(enumIcons?.get(choice.value));\n return (\n <IconButton\n key={choice.value}\n onClick={() => {\n onChange({ choice: choice.value });\n commit?.();\n }}\n label={choice.label}\n isActive={choice.value === currentValue.choice}\n size={size}\n disabled={disabled}\n >\n {icon}\n </IconButton>\n );\n })}\n </ButtonGroup>\n );\n}\n\nfunction createIconsMap(\n choices: EnumerationChoice[],\n params: ButtonGroupEditorParams\n) {\n const icons = new Map<string | number, string>();\n for (let i = 0; i < choices.length; i++) {\n const iconDef = params.buttons[i];\n icons.set(choices[i].value, iconDef.iconSpec);\n }\n return icons;\n}\n\n/* v8 ignore stop */\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumericInput.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/NumericInput.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAc9D,gBAAgB;AAChB,eAAO,MAAM,sBAAsB,EAAE,UAOnC,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { StandardEditorNames } from "@itwin/appui-abstract";
|
|
7
|
+
import { createEditorSpec } from "../../Types.js";
|
|
8
|
+
import { isOldEditorMetadata } from "../Metadata.js";
|
|
9
|
+
import { useInputEditorSizeParams, useRangeEditorParams, } from "./UseEditorParams.js";
|
|
10
|
+
import { Input } from "@itwin/itwinui-react";
|
|
11
|
+
import { isNumeric } from "../../values/ValueUtilities.js";
|
|
12
|
+
/* v8 ignore start */
|
|
13
|
+
/** @internal */
|
|
14
|
+
export const NumericInputEditorSpec = createEditorSpec({
|
|
15
|
+
isMetadataSupported: (metadata) => isOldEditorMetadata(metadata) &&
|
|
16
|
+
metadata.type === "number" &&
|
|
17
|
+
metadata.preferredEditor === StandardEditorNames.NumericInput,
|
|
18
|
+
isValueSupported: isNumeric,
|
|
19
|
+
Editor: NumericInputEditor,
|
|
20
|
+
});
|
|
21
|
+
function NumericInputEditor({ metadata, value, onChange, size, disabled, }) {
|
|
22
|
+
const sizeParams = useInputEditorSizeParams(metadata);
|
|
23
|
+
const rangeParams = useRangeEditorParams(metadata);
|
|
24
|
+
const handleChange = (newValue) => {
|
|
25
|
+
onChange({
|
|
26
|
+
displayValue: newValue,
|
|
27
|
+
rawValue: parseFloat(newValue),
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
const style = sizeParams?.size !== undefined
|
|
31
|
+
? {
|
|
32
|
+
minWidth: `${sizeParams?.size * 0.75}em`,
|
|
33
|
+
}
|
|
34
|
+
: undefined;
|
|
35
|
+
const inputProps = useNumericInput({
|
|
36
|
+
min: rangeParams?.minimum,
|
|
37
|
+
max: rangeParams?.maximum,
|
|
38
|
+
precision: rangeParams?.precision,
|
|
39
|
+
step: rangeParams?.step,
|
|
40
|
+
maxLength: sizeParams?.maxLength,
|
|
41
|
+
onChange: handleChange,
|
|
42
|
+
value: value?.displayValue ?? "",
|
|
43
|
+
});
|
|
44
|
+
return (React.createElement(Input, { style: style, size: size, disabled: disabled, ...inputProps }));
|
|
45
|
+
}
|
|
46
|
+
function useNumericInput({ min, max, step, precision, maxLength, value, onChange, }) {
|
|
47
|
+
const formatValue = (val) => {
|
|
48
|
+
const appliedMin = min ?? Number.MIN_VALUE;
|
|
49
|
+
const appliedMax = max ?? Number.MAX_VALUE;
|
|
50
|
+
const valueInRange = Math.min(appliedMax, Math.max(appliedMin, val));
|
|
51
|
+
return precision
|
|
52
|
+
? valueInRange.toFixed(precision)
|
|
53
|
+
: valueInRange.toString();
|
|
54
|
+
};
|
|
55
|
+
const [formattedValue, setFormattedValue] = React.useState(() => {
|
|
56
|
+
return value.length !== 0 ? formatValue(Number(value)) : value;
|
|
57
|
+
});
|
|
58
|
+
const handleChange = (event) => {
|
|
59
|
+
const currentValue = event.target.value;
|
|
60
|
+
if (maxLength && currentValue.length > maxLength) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
setFormattedValue(currentValue);
|
|
64
|
+
onChange(currentValue);
|
|
65
|
+
};
|
|
66
|
+
const handleBlur = () => {
|
|
67
|
+
if (precision) {
|
|
68
|
+
const newFormattedValue = formatValue(Number(formattedValue));
|
|
69
|
+
if (newFormattedValue !== formattedValue) {
|
|
70
|
+
setFormattedValue(newFormattedValue);
|
|
71
|
+
onChange(newFormattedValue);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
return {
|
|
76
|
+
type: "number",
|
|
77
|
+
min,
|
|
78
|
+
max,
|
|
79
|
+
step,
|
|
80
|
+
value: formattedValue,
|
|
81
|
+
onChange: handleChange,
|
|
82
|
+
onBlur: handleBlur,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/* v8 ignore stop */
|
|
86
|
+
//# sourceMappingURL=NumericInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/NumericInput.tsx"],"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\nimport * as React from \"react\";\nimport { StandardEditorNames } from \"@itwin/appui-abstract\";\nimport type { EditorProps, EditorSpec } from \"../../Types.js\";\nimport { createEditorSpec } from \"../../Types.js\";\nimport type { OldEditorMetadata } from \"../Metadata.js\";\nimport { isOldEditorMetadata } from \"../Metadata.js\";\nimport type { NumericValue } from \"../../values/Values.js\";\nimport {\n useInputEditorSizeParams,\n useRangeEditorParams,\n} from \"./UseEditorParams.js\";\nimport { Input } from \"@itwin/itwinui-react\";\nimport { isNumeric } from \"../../values/ValueUtilities.js\";\n\n/* v8 ignore start */\n\n/** @internal */\nexport const NumericInputEditorSpec: EditorSpec = createEditorSpec({\n isMetadataSupported: (metadata): metadata is OldEditorMetadata =>\n isOldEditorMetadata(metadata) &&\n metadata.type === \"number\" &&\n metadata.preferredEditor === StandardEditorNames.NumericInput,\n isValueSupported: isNumeric,\n Editor: NumericInputEditor,\n});\n\nfunction NumericInputEditor({\n metadata,\n value,\n onChange,\n size,\n disabled,\n}: EditorProps<OldEditorMetadata, NumericValue>) {\n const sizeParams = useInputEditorSizeParams(metadata);\n const rangeParams = useRangeEditorParams(metadata);\n const handleChange = (newValue: string) => {\n onChange({\n displayValue: newValue,\n rawValue: parseFloat(newValue),\n });\n };\n\n const style: React.CSSProperties | undefined =\n sizeParams?.size !== undefined\n ? {\n minWidth: `${sizeParams?.size * 0.75}em`,\n }\n : undefined;\n\n const inputProps = useNumericInput({\n min: rangeParams?.minimum,\n max: rangeParams?.maximum,\n precision: rangeParams?.precision,\n step: rangeParams?.step,\n maxLength: sizeParams?.maxLength,\n onChange: handleChange,\n value: value?.displayValue ?? \"\",\n });\n\n return (\n <Input style={style} size={size} disabled={disabled} {...inputProps} />\n );\n}\n\ninterface UseNumericInputProps {\n min?: number;\n max?: number;\n step?: number;\n precision?: number;\n maxLength?: number;\n value: string;\n onChange: (newValue: string) => void;\n}\n\nfunction useNumericInput({\n min,\n max,\n step,\n precision,\n maxLength,\n value,\n onChange,\n}: UseNumericInputProps) {\n const formatValue = (val: number) => {\n const appliedMin = min ?? Number.MIN_VALUE;\n const appliedMax = max ?? Number.MAX_VALUE;\n const valueInRange = Math.min(appliedMax, Math.max(appliedMin, val));\n\n return precision\n ? valueInRange.toFixed(precision)\n : valueInRange.toString();\n };\n\n const [formattedValue, setFormattedValue] = React.useState(() => {\n return value.length !== 0 ? formatValue(Number(value)) : value;\n });\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const currentValue = event.target.value;\n if (maxLength && currentValue.length > maxLength) {\n return;\n }\n setFormattedValue(currentValue);\n onChange(currentValue);\n };\n\n const handleBlur = () => {\n if (precision) {\n const newFormattedValue = formatValue(Number(formattedValue));\n if (newFormattedValue !== formattedValue) {\n setFormattedValue(newFormattedValue);\n onChange(newFormattedValue);\n }\n }\n };\n\n return {\n type: \"number\",\n min,\n max,\n step,\n value: formattedValue,\n onChange: handleChange,\n onBlur: handleBlur,\n };\n}\n\n/* v8 ignore stop */\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/Slider.tsx"],"names":[],"mappings":"AAuBA,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,qCAU3B,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { createEditorSpec } from "../../Types.js";
|
|
7
|
+
import { isOldEditorMetadata } from "../Metadata.js";
|
|
8
|
+
import { PropertyEditorParamTypes, StandardEditorNames, } from "@itwin/appui-abstract";
|
|
9
|
+
import { Button, Icon, Popover, Slider } from "@itwin/itwinui-react";
|
|
10
|
+
import { useSliderEditorParams } from "./UseEditorParams.js";
|
|
11
|
+
import { findIcon } from "../IconsRegistry.js";
|
|
12
|
+
import { isNumeric } from "../../values/ValueUtilities.js";
|
|
13
|
+
/* v8 ignore start */
|
|
14
|
+
/** @internal */
|
|
15
|
+
export const SliderEditorSpec = createEditorSpec({
|
|
16
|
+
isMetadataSupported: (metadata) => isOldEditorMetadata(metadata) &&
|
|
17
|
+
metadata.type === "number" &&
|
|
18
|
+
!!metadata.params?.find((param) => param.type === PropertyEditorParamTypes.Slider.valueOf()) &&
|
|
19
|
+
metadata.preferredEditor === StandardEditorNames.Slider,
|
|
20
|
+
isValueSupported: isNumeric,
|
|
21
|
+
Editor: SliderEditor,
|
|
22
|
+
});
|
|
23
|
+
function SliderEditor({ metadata, value, disabled, onChange, commit, size, }) {
|
|
24
|
+
const sliderParams = useSliderEditorParams(metadata);
|
|
25
|
+
if (!sliderParams) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const minLabel = sliderParams.showMinMax && sliderParams.minIconSpec ? (React.createElement(Icon, null, findIcon(sliderParams.minIconSpec))) : undefined;
|
|
29
|
+
const maxLabel = sliderParams.showMinMax && sliderParams.maxIconSpec ? (React.createElement(Icon, null, findIcon(sliderParams.maxIconSpec))) : undefined;
|
|
30
|
+
const handleChange = (values) => {
|
|
31
|
+
const newValue = values[0];
|
|
32
|
+
onChange({ rawValue: newValue, displayValue: `${newValue}` });
|
|
33
|
+
};
|
|
34
|
+
const currentValue = value?.rawValue ?? sliderParams.minimum;
|
|
35
|
+
const slider = (React.createElement(Slider, { values: [currentValue], min: sliderParams.minimum, max: sliderParams.maximum, step: sliderParams.step, thumbMode: 1 === sliderParams.mode ? "allow-crossing" : "inhibit-crossing", trackDisplayMode: !sliderParams.reversed ? "auto" : "odd-segments", minLabel: minLabel, maxLabel: maxLabel, tooltipProps: (_index, tooltipValue) => {
|
|
36
|
+
return {
|
|
37
|
+
placement: sliderParams.tooltipBelow ? "bottom" : "top",
|
|
38
|
+
content: formatTickLabel(tooltipValue, sliderParams),
|
|
39
|
+
visible: sliderParams.showTooltip,
|
|
40
|
+
};
|
|
41
|
+
}, tickLabels: getTickLabels(sliderParams), onChange: handleChange, disabled: disabled }));
|
|
42
|
+
return (React.createElement(Popover, { placement: "bottom", style: { minWidth: "300px", padding: "8px" }, content: slider, onVisibleChange: (visible) => {
|
|
43
|
+
if (!visible) {
|
|
44
|
+
commit?.();
|
|
45
|
+
}
|
|
46
|
+
}, applyBackground: true },
|
|
47
|
+
React.createElement(Button, { style: { width: "100%" }, size: size, disabled: disabled }, currentValue)));
|
|
48
|
+
}
|
|
49
|
+
function getTickLabels(sliderParams) {
|
|
50
|
+
if (!sliderParams.showTicks || !sliderParams.showTickLabels) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const count = sliderParams.getTickCount ? sliderParams.getTickCount() : 0;
|
|
54
|
+
if (count > 0) {
|
|
55
|
+
const increment = (sliderParams.maximum - sliderParams.minimum) / count;
|
|
56
|
+
return Array.from({ length: count + 1 }, (_, i) => formatTickLabel(i * increment + sliderParams.minimum, sliderParams));
|
|
57
|
+
}
|
|
58
|
+
return sliderParams
|
|
59
|
+
.getTickValues?.()
|
|
60
|
+
.map((val) => formatTickLabel(val, sliderParams));
|
|
61
|
+
}
|
|
62
|
+
function formatTickLabel(value, params) {
|
|
63
|
+
return params.formatTooltip ? params.formatTooltip(value) : `${value}`;
|
|
64
|
+
}
|
|
65
|
+
/* v8 ignore stop */
|
|
66
|
+
//# sourceMappingURL=Slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/Slider.tsx"],"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\nimport * as React from \"react\";\nimport type { EditorProps } from \"../../Types.js\";\nimport { createEditorSpec } from \"../../Types.js\";\nimport type { OldEditorMetadata } from \"../Metadata.js\";\nimport { isOldEditorMetadata } from \"../Metadata.js\";\nimport type { NumericValue } from \"../../values/Values.js\";\nimport type { SliderEditorParams } from \"@itwin/appui-abstract\";\nimport {\n PropertyEditorParamTypes,\n StandardEditorNames,\n} from \"@itwin/appui-abstract\";\nimport { Button, Icon, Popover, Slider } from \"@itwin/itwinui-react\";\nimport { useSliderEditorParams } from \"./UseEditorParams.js\";\nimport { findIcon } from \"../IconsRegistry.js\";\nimport { isNumeric } from \"../../values/ValueUtilities.js\";\n\n/* v8 ignore start */\n\n/** @internal */\nexport const SliderEditorSpec = createEditorSpec({\n isMetadataSupported: (metadata): metadata is OldEditorMetadata =>\n isOldEditorMetadata(metadata) &&\n metadata.type === \"number\" &&\n !!metadata.params?.find(\n (param) => param.type === PropertyEditorParamTypes.Slider.valueOf()\n ) &&\n metadata.preferredEditor === StandardEditorNames.Slider,\n isValueSupported: isNumeric,\n Editor: SliderEditor,\n});\n\nfunction SliderEditor({\n metadata,\n value,\n disabled,\n onChange,\n commit,\n size,\n}: EditorProps<OldEditorMetadata, NumericValue>) {\n const sliderParams = useSliderEditorParams(metadata);\n if (!sliderParams) {\n return null;\n }\n\n const minLabel =\n sliderParams.showMinMax && sliderParams.minIconSpec ? (\n <Icon>{findIcon(sliderParams.minIconSpec)}</Icon>\n ) : undefined;\n const maxLabel =\n sliderParams.showMinMax && sliderParams.maxIconSpec ? (\n <Icon>{findIcon(sliderParams.maxIconSpec)}</Icon>\n ) : undefined;\n\n const handleChange = (values: ReadonlyArray<number>): void => {\n const newValue = values[0];\n onChange({ rawValue: newValue, displayValue: `${newValue}` });\n };\n\n const currentValue = value?.rawValue ?? sliderParams.minimum;\n const slider = (\n <Slider\n values={[currentValue]}\n min={sliderParams.minimum}\n max={sliderParams.maximum}\n step={sliderParams.step}\n thumbMode={\n 1 === sliderParams.mode ? \"allow-crossing\" : \"inhibit-crossing\"\n }\n trackDisplayMode={!sliderParams.reversed ? \"auto\" : \"odd-segments\"}\n minLabel={minLabel}\n maxLabel={maxLabel}\n tooltipProps={(_index, tooltipValue) => {\n return {\n placement: sliderParams.tooltipBelow ? \"bottom\" : \"top\",\n content: formatTickLabel(tooltipValue, sliderParams),\n visible: sliderParams.showTooltip,\n };\n }}\n tickLabels={getTickLabels(sliderParams)}\n onChange={handleChange}\n disabled={disabled}\n />\n );\n return (\n <Popover\n placement=\"bottom\"\n style={{ minWidth: \"300px\", padding: \"8px\" }}\n content={slider}\n onVisibleChange={(visible) => {\n if (!visible) {\n commit?.();\n }\n }}\n applyBackground={true}\n >\n <Button style={{ width: \"100%\" }} size={size} disabled={disabled}>\n {currentValue}\n </Button>\n </Popover>\n );\n}\n\nfunction getTickLabels(sliderParams: SliderEditorParams) {\n if (!sliderParams.showTicks || !sliderParams.showTickLabels) {\n return undefined;\n }\n const count = sliderParams.getTickCount ? sliderParams.getTickCount() : 0;\n if (count > 0) {\n const increment = (sliderParams.maximum - sliderParams.minimum) / count;\n return Array.from({ length: count + 1 }, (_, i) =>\n formatTickLabel(i * increment + sliderParams.minimum, sliderParams)\n );\n }\n return sliderParams\n .getTickValues?.()\n .map((val) => formatTickLabel(val, sliderParams));\n}\n\nfunction formatTickLabel(value: number, params: SliderEditorParams) {\n return params.formatTooltip ? params.formatTooltip(value) : `${value}`;\n}\n\n/* v8 ignore stop */\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextArea.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/TextArea.tsx"],"names":[],"mappings":"AAeA,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,qCAO9B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { Button, Popover, Textarea } from "@itwin/itwinui-react";
|
|
7
|
+
import { createEditorSpec } from "../../Types.js";
|
|
8
|
+
import { isOldEditorMetadata } from "../Metadata.js";
|
|
9
|
+
import { StandardEditorNames } from "@itwin/appui-abstract";
|
|
10
|
+
import { isText } from "../../values/ValueUtilities.js";
|
|
11
|
+
/* v8 ignore start */
|
|
12
|
+
/** @internal */
|
|
13
|
+
export const MultilineEditorSpec = createEditorSpec({
|
|
14
|
+
isMetadataSupported: (metadata) => isOldEditorMetadata(metadata) &&
|
|
15
|
+
metadata.type === "string" &&
|
|
16
|
+
metadata.preferredEditor === StandardEditorNames.MultiLine,
|
|
17
|
+
isValueSupported: isText,
|
|
18
|
+
Editor: TextAreaEditor,
|
|
19
|
+
});
|
|
20
|
+
function TextAreaEditor({ value, onChange, commit, size, disabled, }) {
|
|
21
|
+
const currentValue = value ?? { value: "" };
|
|
22
|
+
return (React.createElement(Popover, { placement: "bottom", content: React.createElement(Textarea, { value: currentValue.value, onChange: (e) => {
|
|
23
|
+
const newValue = e.currentTarget.value;
|
|
24
|
+
onChange({ value: newValue });
|
|
25
|
+
} }), onVisibleChange: (visible) => {
|
|
26
|
+
if (!visible) {
|
|
27
|
+
commit?.();
|
|
28
|
+
}
|
|
29
|
+
} },
|
|
30
|
+
React.createElement(Button, { style: { width: "100%" }, size: size, disabled: disabled }, currentValue.value)));
|
|
31
|
+
}
|
|
32
|
+
/* v8 ignore stop */
|
|
33
|
+
//# sourceMappingURL=TextArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextArea.js","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/TextArea.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAoB,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAA0B,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,qBAAqB;AAErB,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;IAClD,mBAAmB,EAAE,CAAC,QAAQ,EAAiC,EAAE,CAC/D,mBAAmB,CAAC,QAAQ,CAAC;QAC7B,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAC1B,QAAQ,CAAC,eAAe,KAAK,mBAAmB,CAAC,SAAS;IAC5D,gBAAgB,EAAE,MAAM;IACxB,MAAM,EAAE,cAAc;CACvB,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,QAAQ,GACkC;IAC1C,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAE5C,OAAO,CACL,oBAAC,OAAO,IACN,SAAS,EAAC,QAAQ,EAClB,OAAO,EACL,oBAAC,QAAQ,IACP,KAAK,EAAE,YAAY,CAAC,KAAK,EACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,MAAM,QAAQ,GAAG,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;gBACvC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChC,CAAC,GACD,EAEJ,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,EAAE,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QAED,oBAAC,MAAM,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAC7D,YAAY,CAAC,KAAK,CACZ,CACD,CACX,CAAC;AACJ,CAAC;AAED,oBAAoB","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\nimport * as React from \"react\";\nimport { Button, Popover, Textarea } from \"@itwin/itwinui-react\";\nimport { createEditorSpec, type EditorProps } from \"../../Types.js\";\nimport { isOldEditorMetadata, type OldEditorMetadata } from \"../Metadata.js\";\nimport { type TextValue } from \"../../values/Values.js\";\nimport { StandardEditorNames } from \"@itwin/appui-abstract\";\nimport { isText } from \"../../values/ValueUtilities.js\";\n\n/* v8 ignore start */\n\n/** @internal */\nexport const MultilineEditorSpec = createEditorSpec({\n isMetadataSupported: (metadata): metadata is OldEditorMetadata =>\n isOldEditorMetadata(metadata) &&\n metadata.type === \"string\" &&\n metadata.preferredEditor === StandardEditorNames.MultiLine,\n isValueSupported: isText,\n Editor: TextAreaEditor,\n});\n\nfunction TextAreaEditor({\n value,\n onChange,\n commit,\n size,\n disabled,\n}: EditorProps<OldEditorMetadata, TextValue>) {\n const currentValue = value ?? { value: \"\" };\n\n return (\n <Popover\n placement=\"bottom\"\n content={\n <Textarea\n value={currentValue.value}\n onChange={(e) => {\n const newValue = e.currentTarget.value;\n onChange({ value: newValue });\n }}\n />\n }\n onVisibleChange={(visible) => {\n if (!visible) {\n commit?.();\n }\n }}\n >\n <Button style={{ width: \"100%\" }} size={size} disabled={disabled}>\n {currentValue.value}\n </Button>\n </Popover>\n );\n}\n\n/* v8 ignore stop */\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { OldEditorMetadata } from "../Metadata.js";
|
|
2
|
+
import type { ButtonGroupEditorParams, ColorEditorParams, CustomFormattedNumberParams, IconEditorParams, InputEditorSizeParams, RangeEditorParams, SliderEditorParams } from "@itwin/appui-abstract";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare function useCustomFormattedNumberParams(metadata: OldEditorMetadata): CustomFormattedNumberParams | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare function useInputEditorSizeParams(metadata: OldEditorMetadata): InputEditorSizeParams | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function useIconEditorParams(metadata: OldEditorMetadata): IconEditorParams | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export declare function useButtonGroupEditorParams(metadata: OldEditorMetadata): ButtonGroupEditorParams | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export declare function useColorEditorParams(metadata: OldEditorMetadata): ColorEditorParams | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export declare function useRangeEditorParams(metadata: OldEditorMetadata): RangeEditorParams | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export declare function useSliderEditorParams(metadata: OldEditorMetadata): SliderEditorParams | undefined;
|
|
31
|
+
//# sourceMappingURL=UseEditorParams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseEditorParams.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/UseEditorParams.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAK/B;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,iBAAiB,GAC1B,2BAA2B,GAAG,SAAS,CAUzC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,GAC1B,qBAAqB,GAAG,SAAS,CASnC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,GAAG,SAAS,CAQ9B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAC1B,uBAAuB,GAAG,SAAS,CASrC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,GAAG,SAAS,CAQ/B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,GAAG,SAAS,CAQ/B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,iBAAiB,GAC1B,kBAAkB,GAAG,SAAS,CAQhC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { PropertyEditorParamTypes } from "@itwin/appui-abstract";
|
|
7
|
+
/* v8 ignore start */
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export function useCustomFormattedNumberParams(metadata) {
|
|
12
|
+
return React.useMemo(() => metadata.params?.find((param) => param.type ===
|
|
13
|
+
PropertyEditorParamTypes.CustomFormattedNumber.valueOf()), [metadata]);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export function useInputEditorSizeParams(metadata) {
|
|
19
|
+
return React.useMemo(() => metadata.params?.find((param) => param.type === PropertyEditorParamTypes.InputEditorSize.valueOf()), [metadata]);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export function useIconEditorParams(metadata) {
|
|
25
|
+
return React.useMemo(() => metadata.params?.find((param) => param.type === PropertyEditorParamTypes.Icon.valueOf()), [metadata]);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export function useButtonGroupEditorParams(metadata) {
|
|
31
|
+
return React.useMemo(() => metadata.params?.find((param) => param.type === PropertyEditorParamTypes.ButtonGroupData.valueOf()), [metadata]);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export function useColorEditorParams(metadata) {
|
|
37
|
+
return React.useMemo(() => metadata.params?.find((param) => param.type === PropertyEditorParamTypes.ColorData.valueOf()), [metadata]);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export function useRangeEditorParams(metadata) {
|
|
43
|
+
return React.useMemo(() => metadata.params?.find((param) => param.type === PropertyEditorParamTypes.Range.valueOf()), [metadata]);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
export function useSliderEditorParams(metadata) {
|
|
49
|
+
return React.useMemo(() => metadata.params?.find((param) => param.type === PropertyEditorParamTypes.Slider.valueOf()), [metadata]);
|
|
50
|
+
}
|
|
51
|
+
/* v8 ignore stop */
|
|
52
|
+
//# sourceMappingURL=UseEditorParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseEditorParams.js","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/UseEditorParams.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,qBAAqB;AAErB;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,QAA2B;IAE3B,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI;QACV,wBAAwB,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAC5B,EAClC,CAAC,QAAQ,CAAC,CACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA2B;IAE3B,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,eAAe,CAAC,OAAO,EAAE,CAC3C,EAC5B,CAAC,QAAQ,CAAC,CACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAA2B;IAE3B,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,CAC9C,EACvB,CAAC,QAAQ,CAAC,CACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAA2B;IAE3B,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,eAAe,CAAC,OAAO,EAAE,CACzC,EAC9B,CAAC,QAAQ,CAAC,CACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA2B;IAE3B,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,SAAS,CAAC,OAAO,EAAE,CAClD,EACxB,CAAC,QAAQ,CAAC,CACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA2B;IAE3B,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,CAC9C,EACxB,CAAC,QAAQ,CAAC,CACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAA2B;IAE3B,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,MAAM,CAAC,OAAO,EAAE,CAC9C,EACzB,CAAC,QAAQ,CAAC,CACX,CAAC;AACJ,CAAC;AAED,oBAAoB","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\nimport * as React from \"react\";\nimport type { OldEditorMetadata } from \"../Metadata.js\";\nimport type {\n ButtonGroupEditorParams,\n ColorEditorParams,\n CustomFormattedNumberParams,\n IconEditorParams,\n InputEditorSizeParams,\n RangeEditorParams,\n SliderEditorParams,\n} from \"@itwin/appui-abstract\";\nimport { PropertyEditorParamTypes } from \"@itwin/appui-abstract\";\n\n/* v8 ignore start */\n\n/**\n * @internal\n */\nexport function useCustomFormattedNumberParams(\n metadata: OldEditorMetadata\n): CustomFormattedNumberParams | undefined {\n return React.useMemo(\n () =>\n metadata.params?.find(\n (param) =>\n param.type ===\n PropertyEditorParamTypes.CustomFormattedNumber.valueOf()\n ) as CustomFormattedNumberParams,\n [metadata]\n );\n}\n\n/**\n * @internal\n */\nexport function useInputEditorSizeParams(\n metadata: OldEditorMetadata\n): InputEditorSizeParams | undefined {\n return React.useMemo(\n () =>\n metadata.params?.find(\n (param) =>\n param.type === PropertyEditorParamTypes.InputEditorSize.valueOf()\n ) as InputEditorSizeParams,\n [metadata]\n );\n}\n\n/**\n * @internal\n */\nexport function useIconEditorParams(\n metadata: OldEditorMetadata\n): IconEditorParams | undefined {\n return React.useMemo(\n () =>\n metadata.params?.find(\n (param) => param.type === PropertyEditorParamTypes.Icon.valueOf()\n ) as IconEditorParams,\n [metadata]\n );\n}\n\n/**\n * @internal\n */\nexport function useButtonGroupEditorParams(\n metadata: OldEditorMetadata\n): ButtonGroupEditorParams | undefined {\n return React.useMemo(\n () =>\n metadata.params?.find(\n (param) =>\n param.type === PropertyEditorParamTypes.ButtonGroupData.valueOf()\n ) as ButtonGroupEditorParams,\n [metadata]\n );\n}\n\n/**\n * @internal\n */\nexport function useColorEditorParams(\n metadata: OldEditorMetadata\n): ColorEditorParams | undefined {\n return React.useMemo(\n () =>\n metadata.params?.find(\n (param) => param.type === PropertyEditorParamTypes.ColorData.valueOf()\n ) as ColorEditorParams,\n [metadata]\n );\n}\n\n/**\n * @internal\n */\nexport function useRangeEditorParams(\n metadata: OldEditorMetadata\n): RangeEditorParams | undefined {\n return React.useMemo(\n () =>\n metadata.params?.find(\n (param) => param.type === PropertyEditorParamTypes.Range.valueOf()\n ) as RangeEditorParams,\n [metadata]\n );\n}\n\n/**\n * @internal\n */\nexport function useSliderEditorParams(\n metadata: OldEditorMetadata\n): SliderEditorParams | undefined {\n return React.useMemo(\n () =>\n metadata.params?.find(\n (param) => param.type === PropertyEditorParamTypes.Slider.valueOf()\n ) as SliderEditorParams,\n [metadata]\n );\n}\n\n/* v8 ignore stop */\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { OldEditorMetadata } from "../Metadata.js";
|
|
2
|
+
import type { EnumValueMetadata } from "../../values/Metadata.js";
|
|
3
|
+
/**
|
|
4
|
+
* Converts old enum metadata definition into the new one. It takes care of lazy loaded choices.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function useEnumMetadata(oldMetadata: OldEditorMetadata): EnumValueMetadata;
|
|
8
|
+
//# sourceMappingURL=UseEnumMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseEnumMetadata.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/new-editors/interop/old-editors/UseEnumMetadata.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,iBAAiB,GAC7B,iBAAiB,CAkCnB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
/* v8 ignore start */
|
|
7
|
+
/**
|
|
8
|
+
* Converts old enum metadata definition into the new one. It takes care of lazy loaded choices.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export function useEnumMetadata(oldMetadata) {
|
|
12
|
+
const [metadata, setMetadata] = React.useState(() => ({
|
|
13
|
+
type: "enum",
|
|
14
|
+
choices: [],
|
|
15
|
+
isStrict: false,
|
|
16
|
+
}));
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
let disposed = false;
|
|
19
|
+
const loadChoices = async () => {
|
|
20
|
+
const loadedChoices = oldMetadata.enum === undefined
|
|
21
|
+
? []
|
|
22
|
+
: oldMetadata.enum.choices instanceof Promise
|
|
23
|
+
? [...(await oldMetadata.enum.choices)]
|
|
24
|
+
: [...oldMetadata.enum.choices];
|
|
25
|
+
if (!disposed) {
|
|
26
|
+
setMetadata({
|
|
27
|
+
type: "enum",
|
|
28
|
+
choices: loadedChoices,
|
|
29
|
+
isStrict: oldMetadata.enum?.isStrict ?? false,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
void loadChoices();
|
|
34
|
+
return () => {
|
|
35
|
+
disposed = true;
|
|
36
|
+
};
|
|
37
|
+
}, [oldMetadata]);
|
|
38
|
+
return metadata;
|
|
39
|
+
}
|
|
40
|
+
/* v8 ignore stop */
|
|
41
|
+
//# sourceMappingURL=UseEnumMetadata.js.map
|