@itwin/imodel-components-react 5.32.0 → 5.32.1
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
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Change Log - @itwin/imodel-components-react
|
|
2
2
|
|
|
3
|
+
## 5.32.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8579336: `Text` and `Numerical` editors now select the input value on focus. `Quantity` editor no longer clear merged values (`-- unit`) on focus.
|
|
8
|
+
- Updated dependencies [8579336]
|
|
9
|
+
- Updated dependencies [6a8e093]
|
|
10
|
+
- @itwin/components-react@5.32.1
|
|
11
|
+
- @itwin/core-react@5.32.1
|
|
12
|
+
|
|
3
13
|
## 5.32.0
|
|
4
14
|
|
|
5
15
|
### Minor Changes
|
|
@@ -56,20 +56,15 @@ function useQuantityInput({ value, onChange, formatter, parser, onFocus, }) {
|
|
|
56
56
|
onFocus?.(e);
|
|
57
57
|
const input = e.currentTarget;
|
|
58
58
|
const unit = formatter?.unitConversions?.[0]?.label ?? "";
|
|
59
|
-
if (state.rawValue === undefined) {
|
|
60
|
-
if (state.displayValue.startsWith("--")) {
|
|
61
|
-
setState({ rawValue: undefined, displayValue: unit });
|
|
62
|
-
requestAnimationFrame(() => {
|
|
63
|
-
input.setSelectionRange(0, 0);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (state.displayValue) {
|
|
59
|
+
if (state.rawValue === undefined && state.displayValue === unit) {
|
|
69
60
|
requestAnimationFrame(() => {
|
|
70
|
-
input.
|
|
61
|
+
input.setSelectionRange(0, 0);
|
|
71
62
|
});
|
|
63
|
+
return;
|
|
72
64
|
}
|
|
65
|
+
requestAnimationFrame(() => {
|
|
66
|
+
input.select();
|
|
67
|
+
});
|
|
73
68
|
};
|
|
74
69
|
return {
|
|
75
70
|
inputProps: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuantityInput.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/inputs/new-editors/QuantityInput.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"QuantityInput.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/inputs/new-editors/QuantityInput.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 { Input } from \"@itwin/itwinui-react\";\nimport type { NumericValue } from \"@itwin/components-react\";\nimport type { FormatterSpec, ParserSpec } from \"@itwin/core-quantity\";\n\n/* v8 ignore start */\n\ninterface QuantityInputProps\n extends Pick<\n React.ComponentPropsWithoutRef<typeof Input>,\n \"onBlur\" | \"onFocus\" | \"size\"\n > {\n value: NumericValue;\n onChange: (value: NumericValue) => void;\n formatter?: FormatterSpec;\n parser?: ParserSpec;\n}\n\n/**\n * A quantity input that manages its own display state and uses formatter/parser for quantity values.\n * @internal\n */\nexport function QuantityInput(props: QuantityInputProps) {\n const { formatter, parser, size, onBlur } = props;\n const { inputProps } = useQuantityInput(props);\n const placeholder = formatter?.unitConversions?.[0]?.label;\n\n return (\n <Input\n {...inputProps}\n placeholder={placeholder}\n disabled={!formatter || !parser}\n size={size}\n onBlur={onBlur}\n />\n );\n}\n\nfunction useQuantityInput({\n value,\n onChange,\n formatter,\n parser,\n onFocus,\n}: QuantityInputProps) {\n const [state, setState] = React.useState<NumericValue>(() => {\n if (value.rawValue !== undefined && formatter) {\n return {\n rawValue: value.rawValue,\n displayValue: formatter.applyFormatting(value.rawValue),\n };\n }\n return value;\n });\n\n React.useLayoutEffect(() => {\n if (!formatter) {\n return;\n }\n setState((prev) => {\n if (prev.rawValue !== undefined) {\n const displayValue = formatter.applyFormatting(prev.rawValue);\n return prev.displayValue === displayValue\n ? prev\n : { ...prev, displayValue };\n }\n\n if (prev.displayValue !== \"\") {\n return prev;\n }\n\n return {\n ...prev,\n displayValue: formatter.unitConversions?.[0]?.label ?? \"\",\n };\n });\n }, [formatter]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputText = e.target.value;\n const unit = formatter?.unitConversions?.[0]?.label;\n const rawValue = parseInput(inputText, parser, unit);\n const newValue: NumericValue = { rawValue, displayValue: inputText };\n setState(newValue);\n onChange(newValue);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n\n const input = e.currentTarget;\n const unit = formatter?.unitConversions?.[0]?.label ?? \"\";\n\n if (state.rawValue === undefined && state.displayValue === unit) {\n requestAnimationFrame(() => {\n input.setSelectionRange(0, 0);\n });\n return;\n }\n\n requestAnimationFrame(() => {\n input.select();\n });\n };\n\n return {\n inputProps: {\n value: state.displayValue,\n onChange: handleChange,\n onFocus: handleFocus,\n },\n };\n}\n\nfunction parseInput(\n userInput: string,\n parser: ParserSpec | undefined,\n placeholder: string | undefined\n): number | undefined {\n if (!parser || userInput === placeholder) {\n return undefined;\n }\n const parseResult = parser.parseToQuantityValue(userInput);\n return parseResult.ok ? parseResult.value : undefined;\n}\n\n/* v8 ignore stop */\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/imodel-components-react",
|
|
3
|
-
"version": "5.32.
|
|
3
|
+
"version": "5.32.1",
|
|
4
4
|
"description": "A react component library of iTwin.js UI iModel components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./lib/imodel-components-react.d.ts",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"@itwin/itwinui-react": "^3.15.0",
|
|
45
45
|
"react": "^18.0.0 || ^19.0.0",
|
|
46
46
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
47
|
-
"@itwin/components-react": "5.32.
|
|
48
|
-
"@itwin/core-react": "5.32.
|
|
47
|
+
"@itwin/components-react": "5.32.1",
|
|
48
|
+
"@itwin/core-react": "5.32.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@itwin/appui-abstract": "^5.8.1",
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
"typescript": "~5.6.3",
|
|
84
84
|
"upath": "^2.0.1",
|
|
85
85
|
"vitest": "^3.2.4",
|
|
86
|
-
"@itwin/
|
|
87
|
-
"@itwin/
|
|
86
|
+
"@itwin/components-react": "5.32.1",
|
|
87
|
+
"@itwin/core-react": "5.32.1"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
90
|
"@itwin/itwinui-icons-react": "^2.11.0",
|