@iobroker/json-config 7.7.2 → 7.7.4
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/README.md +15 -3
- package/build/JsonConfigComponent/ChipInput.d.ts +2 -2
- package/build/JsonConfigComponent/ChipInput.js +5 -8
- package/build/JsonConfigComponent/ChipInput.js.map +1 -1
- package/build/JsonConfigComponent/ConfigAccordion.d.ts +5 -0
- package/build/JsonConfigComponent/ConfigAccordion.js +86 -6
- package/build/JsonConfigComponent/ConfigAccordion.js.map +1 -1
- package/build/JsonConfigComponent/ConfigAutocompleteSendTo.d.ts +4 -1
- package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js +25 -9
- package/build/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigCheckDocker.d.ts +16 -0
- package/build/JsonConfigComponent/ConfigCheckDocker.js +52 -0
- package/build/JsonConfigComponent/ConfigCheckDocker.js.map +1 -0
- package/build/JsonConfigComponent/ConfigGeneric.js +5 -2
- package/build/JsonConfigComponent/ConfigGeneric.js.map +1 -1
- package/build/JsonConfigComponent/ConfigJsonEditor.js +10 -2
- package/build/JsonConfigComponent/ConfigJsonEditor.js.map +1 -1
- package/build/JsonConfigComponent/ConfigNumber.js +20 -3
- package/build/JsonConfigComponent/ConfigNumber.js.map +1 -1
- package/build/JsonConfigComponent/ConfigPanel.js +2 -0
- package/build/JsonConfigComponent/ConfigPanel.js.map +1 -1
- package/build/JsonConfigComponent/ConfigPort.js +47 -8
- package/build/JsonConfigComponent/ConfigPort.js.map +1 -1
- package/build/JsonConfigComponent/ConfigSelectSendTo.js +1 -1
- package/build/JsonConfigComponent/ConfigSelectSendTo.js.map +1 -1
- package/build/JsonConfigComponent/ConfigState.js +1 -1
- package/build/JsonConfigComponent/ConfigState.js.map +1 -1
- package/build/JsonConfigComponent/ConfigTable.d.ts +5 -0
- package/build/JsonConfigComponent/ConfigTable.js +71 -7
- package/build/JsonConfigComponent/ConfigTable.js.map +1 -1
- package/build/JsonConfigComponent/ConfigTabs.d.ts +3 -0
- package/build/JsonConfigComponent/ConfigTabs.js +42 -7
- package/build/JsonConfigComponent/ConfigTabs.js.map +1 -1
- package/build/JsonConfigComponent/wrapper/Components/CustomModal.js +4 -2
- package/build/JsonConfigComponent/wrapper/Components/CustomModal.js.map +1 -1
- package/build/JsonConfigComponent/wrapper/Components/Editor.d.ts +1 -1
- package/build/JsonConfigComponent/wrapper/Components/Editor.js +1 -1
- package/build/JsonConfigComponent/wrapper/Components/Editor.js.map +1 -1
- package/build/types.d.ts +15 -5
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -137,6 +137,7 @@ You can install it via GitHub icon in admin by entering `iobroker.jsonconfig-dem
|
|
|
137
137
|
- [**`certificateCollection`:**](#certificatecollection) Selects a collection for Let's Encrypt certificates
|
|
138
138
|
- [**`certificates`:**](#certificates) Universal type for managing different certificate types (from Admin 6.4.0)
|
|
139
139
|
- [**`checkbox`:**](#checkbox) Checkbox for boolean values
|
|
140
|
+
- [**`checkDocker`:**](#checkdocker) Special component to check if the docker available and if yes, you can activate a checkbox (from Admin 7.8.0)
|
|
140
141
|
- [**`checkLicense`:**](#checklicense) Very special component to check the license online
|
|
141
142
|
- [**`chips`:**](#chips) User can enter words that are added to an array
|
|
142
143
|
- [**`color`:**](#color) Color picker
|
|
@@ -756,6 +757,7 @@ Button to open a JSON(5) editor. JSON5 is supported from admin version 5.7.3
|
|
|
756
757
|
| `allowEmpty` | if true, the JSON will be validated only if the value is not empty |
|
|
757
758
|
| `json5` | if JSON5 format allowed (From 7.5.3) |
|
|
758
759
|
| `doNotApplyWithError` | Do not allow to save the value if error in JSON or JSON5 (From 7.5.3) |
|
|
760
|
+
| `readOnly` | Open the editor in read-only mode - editor can be opened but content cannot be modified |
|
|
759
761
|
|
|
760
762
|
### `language`
|
|
761
763
|
|
|
@@ -1085,7 +1087,7 @@ Determines current location and used `system.config` coordinates if not possible
|
|
|
1085
1087
|
|
|
1086
1088
|
### `interface`
|
|
1087
1089
|
|
|
1088
|
-
|
|
1090
|
+
Select the interface of the host, where the instance runs
|
|
1089
1091
|
|
|
1090
1092
|
| Property | Description |
|
|
1091
1093
|
|------------------|----------------------------------------------------------------|
|
|
@@ -1104,6 +1106,16 @@ shows the license information if not already accepted. One of attributes `texts`
|
|
|
1104
1106
|
| `agreeText` | Text of the agreed button |
|
|
1105
1107
|
| `checkBox` | If defined, the checkbox with the given name will be shown. If checked, the agreed button will be enabled. |
|
|
1106
1108
|
|
|
1109
|
+
### `checkDocker`
|
|
1110
|
+
- (admin >= 7.7.2) initial implementation
|
|
1111
|
+
|
|
1112
|
+
Special component to check if Docker is installed and running.
|
|
1113
|
+
If docker is installed, a checkbox will be shown to allow the usage of docker.
|
|
1114
|
+
|
|
1115
|
+
| Property | Description |
|
|
1116
|
+
|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
1117
|
+
| `hideVersion` | If the information about docker version or error should be hidden (e.g. if used more than one such element on the page the error or version will be shown once |
|
|
1118
|
+
|
|
1107
1119
|
### `checkLicense`
|
|
1108
1120
|
|
|
1109
1121
|
Very special component to check the license online. It's required exactly `license` and `useLicenseManager` properties in native.
|
|
@@ -1127,8 +1139,8 @@ Special input for ports. It checks automatically if port is used by other instan
|
|
|
1127
1139
|
|
|
1128
1140
|
### `state`
|
|
1129
1141
|
|
|
1130
|
-
(admin >= 7.1.0) Show control or information from the state
|
|
1131
|
-
(admin >= 7.6.4) attributes `showEnterButton` and `setOnEnterKey`
|
|
1142
|
+
- (admin >= 7.1.0) Show control or information from the state
|
|
1143
|
+
- (admin >= 7.6.4) attributes `showEnterButton` and `setOnEnterKey`
|
|
1132
1144
|
|
|
1133
1145
|
| Property | Description |
|
|
1134
1146
|
|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
@@ -95,7 +95,7 @@ interface ChipInputState {
|
|
|
95
95
|
prevPropsValue: string[];
|
|
96
96
|
variant: 'outlined' | 'standard' | 'filled';
|
|
97
97
|
}
|
|
98
|
-
|
|
98
|
+
export default class ChipInput extends React.Component<ChipInputProps, ChipInputState> {
|
|
99
99
|
private readonly labelRef;
|
|
100
100
|
private labelNode;
|
|
101
101
|
private readonly input;
|
|
@@ -150,4 +150,4 @@ declare class ChipInput extends React.Component<ChipInputProps, ChipInputState>
|
|
|
150
150
|
setActualInputRef: (ref: HTMLInputElement) => void;
|
|
151
151
|
render(): JSX.Element;
|
|
152
152
|
}
|
|
153
|
-
export
|
|
153
|
+
export {};
|
|
@@ -170,7 +170,7 @@ export const defaultChipRenderer = ({ value, isFocused, isDisabled, isReadOnly,
|
|
|
170
170
|
pointerEvents: isDisabled || isReadOnly ? 'none' : undefined,
|
|
171
171
|
backgroundColor: isFocused ? blue[300] : undefined,
|
|
172
172
|
}, onClick: handleClick, onDelete: handleDelete, label: value }));
|
|
173
|
-
class ChipInput extends React.Component {
|
|
173
|
+
export default class ChipInput extends React.Component {
|
|
174
174
|
labelRef;
|
|
175
175
|
labelNode = null;
|
|
176
176
|
input;
|
|
@@ -290,9 +290,7 @@ class ChipInput extends React.Component {
|
|
|
290
290
|
};
|
|
291
291
|
handleInputFocus = (event) => {
|
|
292
292
|
this.setState({ isFocused: true });
|
|
293
|
-
|
|
294
|
-
this.props.onFocus(event);
|
|
295
|
-
}
|
|
293
|
+
this.props.onFocus?.(event);
|
|
296
294
|
};
|
|
297
295
|
handleKeyDown = (event) => {
|
|
298
296
|
const { focusedChip } = this.state;
|
|
@@ -425,7 +423,7 @@ class ChipInput extends React.Component {
|
|
|
425
423
|
if (this.state.focusedChip === i) {
|
|
426
424
|
focusedChip = null;
|
|
427
425
|
}
|
|
428
|
-
else if (this.state.focusedChip > i) {
|
|
426
|
+
else if (this.state.focusedChip !== null && this.state.focusedChip > i) {
|
|
429
427
|
focusedChip = this.state.focusedChip - 1;
|
|
430
428
|
}
|
|
431
429
|
this.updateChips(chips, { focusedChip });
|
|
@@ -484,7 +482,7 @@ class ChipInput extends React.Component {
|
|
|
484
482
|
const chipComponents = chips.map((chip, i) => chipRenderer({
|
|
485
483
|
value: chip,
|
|
486
484
|
isDisabled: !!disabled,
|
|
487
|
-
isReadOnly: readOnly,
|
|
485
|
+
isReadOnly: !!readOnly,
|
|
488
486
|
isFocused: this.state.focusedChip === i,
|
|
489
487
|
handleClick: () => this.setState({ focusedChip: i }),
|
|
490
488
|
handleDelete: () => this.handleDeleteChip(chip, i),
|
|
@@ -525,9 +523,8 @@ class ChipInput extends React.Component {
|
|
|
525
523
|
onKeyUp: this.handleKeyUp, onFocus: this.handleInputFocus, onBlur: this.handleInputBlur, inputRef: this.setActualInputRef, disabled: disabled, fullWidth: fullWidthInput, placeholder: (!hasInput && (shrinkFloatingLabel || label === null || label === undefined)) ||
|
|
526
524
|
alwaysShowPlaceholder
|
|
527
525
|
? placeholder
|
|
528
|
-
:
|
|
526
|
+
: undefined, readOnly: readOnly, ...InputProps, ...InputMore })),
|
|
529
527
|
helperText && (React.createElement(FormHelperText, { ...FormHelperTextProps, className: FormHelperTextProps?.className, style: this.styles.helperText }, helperText))));
|
|
530
528
|
}
|
|
531
529
|
}
|
|
532
|
-
export default ChipInput;
|
|
533
530
|
//# sourceMappingURL=ChipInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipInput.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ChipInput.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Notice: Some code was adapted from Material-UI's text field.\n * Copyright (c) 2014 Call-Em-All (https://github.com/callemall/material-ui)\n */\nimport React, { type RefObject, type JSX } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Input, OutlinedInput, InputLabel, Chip, FormControl, FormHelperText, Box } from '@mui/material';\nimport FilledInput from '@mui/material/FilledInput/FilledInput';\nimport blue from '@mui/material/colors/blue';\n\nimport { type IobTheme, type ThemeType, Utils } from '@iobroker/adapter-react-v5';\n\nconst variantComponent = {\n standard: Input,\n filled: FilledInput,\n outlined: OutlinedInput,\n};\n\nconst styles: Record<string, any> = (theme: IobTheme): Record<string, any> => {\n const light = theme.palette.mode === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n\n return {\n root: {},\n inputRoot: {\n display: 'inline-flex',\n flexWrap: 'wrap',\n flex: 1,\n marginTop: 0,\n minWidth: 70,\n '&.mui-variant-outlined,&.mui-variant-filled': {\n boxSizing: 'border-box',\n },\n '&.mui-variant-outlined': {\n paddingTop: '14px',\n },\n '&.mui-variant-filled': {\n paddingTop: '28px',\n },\n },\n input: {\n display: 'inline-block',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n appearance: 'none', // Remove border in Safari, doesn't seem to break anything in other browsers\n WebkitTapHighlightColor: 'rgba(0,0,0,0)', // Remove mobile color flashing (deprecated style).\n float: 'left',\n flex: 1,\n },\n chipContainer: {\n display: 'flex',\n flexFlow: 'row wrap',\n alignItems: 'center',\n cursor: 'text',\n marginBottom: '-2px',\n minHeight: 40,\n },\n outlined: {\n '& input': {\n height: 16,\n paddingTop: '4px',\n paddingBottom: '12px',\n marginTop: '4px',\n marginBottom: '4px',\n },\n },\n standard: {\n marginTop: '18px',\n },\n filled: {\n '& input': {\n height: 22,\n marginBottom: '4px',\n marginTop: '4px',\n paddingTop: 0,\n },\n '$marginDense & input': {\n height: 26,\n },\n },\n labeled: {},\n label: {\n top: 4,\n '&$outlined&:not($labelShrink)': {\n top: 2,\n '$marginDense &': {\n top: 5,\n },\n },\n '&$filled&:not($labelShrink)': {\n top: 15,\n '$marginDense &': {\n top: 20,\n },\n },\n },\n labelShrink: {\n top: 0,\n },\n helperText: {\n marginBottom: -20,\n },\n focused: {},\n disabled: {},\n underline: {\n '&:after': {\n borderBottom: `2px solid ${theme.palette.primary[light ? 'dark' : 'light']}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&$focused:after': {\n transform: 'scaleX(1)',\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n '&:before': {\n borderBottom: `1px solid ${bottomLineColor}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&:hover:not($disabled):not($focused):not($error):before': {\n borderBottom: `2px solid ${theme.palette.text.primary}`,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n borderBottom: `1px solid ${bottomLineColor}`,\n },\n },\n '&$disabled:before': {\n borderBottomStyle: 'dotted',\n },\n },\n error: {\n '&:after': {\n backgroundColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n },\n chip: {\n margin: '0 8px 8px 0',\n float: 'left',\n },\n marginDense: {},\n };\n};\n\nconst keyCodes = {\n BACKSPACE: 8,\n DELETE: 46,\n LEFT_ARROW: 37,\n RIGHT_ARROW: 39,\n};\n\ninterface ChipRendererProps {\n value: string;\n isFocused: boolean;\n isDisabled: boolean;\n isReadOnly: boolean;\n handleClick: () => void;\n handleDelete: () => void;\n style: React.CSSProperties;\n}\n\nexport const defaultChipRenderer = (\n { value, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, style }: ChipRendererProps,\n key: string,\n): JSX.Element => (\n <Chip\n key={key}\n style={{\n ...style,\n pointerEvents: isDisabled || isReadOnly ? 'none' : undefined,\n backgroundColor: isFocused ? blue[300] : undefined,\n }}\n onClick={handleClick}\n onDelete={handleDelete}\n label={value}\n />\n);\n\ninterface ChipInputProps {\n /** Allows duplicate chips if set to true. */\n allowDuplicates?: boolean;\n /** If true, the placeholder will always be visible. */\n alwaysShowPlaceholder?: boolean;\n /** Behavior when the chip input is blurred: `'clear'` clears the input, `'add'` creates a chip and `'ignore'` keeps the input. */\n blurBehavior?: 'clear' | 'add' | 'add-or-clear' | 'ignore';\n /** A function of the type `({ value, text, chip, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, className }, key) => node` that returns a chip based on the given properties. This can be used to customize chip styles. Each item in the `dataSource` array will be passed to `chipRenderer` as arguments `chip`, `value` and `text`. If `dataSource` is an array of objects and `dataSourceConfig` is present, then `value` and `text` will instead correspond to the object values defined in `dataSourceConfig`. If `dataSourceConfig` is not set and `dataSource` is an array of objects, then a custom `chipRenderer` must be set. `chip` is always the raw value from `dataSource`, either an object or a string. */\n chipRenderer?: (props: ChipRendererProps) => JSX.Element;\n /** Whether the input value should be cleared if the `value` prop is changed. */\n clearInputValueOnChange?: boolean;\n /** Data source for auto complete. This should be an array of strings or objects. */\n dataSource?: string[];\n /** The chips to display by default (for uncontrolled mode). */\n defaultValue?: string[];\n /** Whether to use `setTimeout` to delay adding chips in case other input events like `onSelection` need to fire first */\n delayBeforeAdd?: boolean;\n /** Disables the chip input if set to true. */\n disabled?: boolean;\n /** Disable the input underline. Only valid for 'standard' variant */\n disableUnderline?: boolean;\n /** Props to pass through to the `FormHelperText` component. */\n FormHelperTextProps?: Record<string, any>;\n /** If true, the chip input will fill the available width. */\n fullWidth?: boolean;\n /** If true, the input field will always be below the chips and fill the available space. By default, it will try to be beside the chips. */\n fullWidthInput?: boolean;\n /** Helper text that is displayed below the input. */\n helperText?: string | JSX.Element;\n /** Props to pass through to the `InputLabel`. */\n InputLabelProps?: Record<string, any>;\n /** Props to pass through to the `Input`. */\n InputProps?: Record<string, any>;\n /** Use this property to pass a ref callback to the native input component. */\n inputRef?: (el: HTMLInputElement) => void;\n /** The input value (enables controlled mode for the text input if set). */\n inputValue?: string;\n /* The content of the floating label. */\n label?: string | JSX.Element;\n /** The key codes (`KeyboardEvent.keyCode`) used to determine when to create a new chip. */\n newChipKeyCodes?: number[];\n /** The keys (`KeyboardEvent.key`) used to determine when to create a new chip. */\n newChipKeys?: string[];\n /** Callback function that is called when a new chip was added (in controlled mode). */\n onAdd?: (chip: string) => void;\n /** Callback function that is called with the chip to be added and should return true to add the chip or false to prevent the chip from being added without clearing the text input. */\n onBeforeAdd?: (chip: string) => boolean;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n // onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n /** Callback function that is called when the chips change (in uncontrolled mode). */\n onChange?: (chips: string[]) => void;\n /** Callback function that is called when a new chip was removed (in controlled mode). */\n onDelete: (chip: string, i: number) => void;\n /** Callback function that is called when the input changes. */\n onUpdateInput?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** A placeholder that is displayed if the input has no values. */\n placeholder?: string;\n /** Makes the chip input read-only if set to true. */\n readOnly?: boolean;\n /** The chips to display (enables controlled mode if set). */\n value?: string[];\n /** The variant of the Input component */\n variant?: 'outlined' | 'standard' | 'filled';\n className?: string;\n error?: boolean;\n id?: string;\n required?: boolean;\n rootRef?: RefObject<HTMLDivElement>;\n margin?: 'dense' | 'normal' | 'none';\n theme: IobTheme;\n}\n\ninterface ChipInputState {\n chips: string[];\n focusedChip: number | null;\n inputValue: string;\n isFocused: boolean;\n chipsUpdated: boolean;\n prevPropsValue: string[];\n variant: 'outlined' | 'standard' | 'filled';\n}\n\nclass ChipInput extends React.Component<ChipInputProps, ChipInputState> {\n private readonly labelRef: React.RefObject<HTMLLabelElement>;\n\n private labelNode: HTMLLabelElement | null = null;\n\n private readonly input: React.RefObject<HTMLInputElement>;\n\n private readonly newChipKeyCodes: number[];\n\n private readonly newChipKeys: string[];\n\n private actualInput: HTMLInputElement | null = null;\n\n private inputBlurTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private _keyPressed: boolean;\n\n private _preventChipCreation: boolean;\n\n private styles: Record<string, any> = {};\n\n private styleTheme: ThemeType | null = null;\n\n constructor(props: ChipInputProps) {\n super(props);\n this.state = {\n chips: props.defaultValue || [],\n focusedChip: null,\n inputValue: '',\n isFocused: false,\n chipsUpdated: false,\n prevPropsValue: [],\n variant: this.props.variant || 'standard',\n };\n this.newChipKeyCodes = props.newChipKeyCodes || [13];\n this.newChipKeys = props.newChipKeys || ['Enter'];\n\n this.labelRef = React.createRef();\n this.input = React.createRef();\n }\n\n componentDidMount(): void {\n if (this.state.variant === 'outlined') {\n // eslint-disable-next-line react/no-find-dom-node\n this.labelNode = ReactDOM.findDOMNode(this.labelRef.current) as HTMLLabelElement;\n this.forceUpdate();\n }\n }\n\n componentWillUnmount(): void {\n if (this.inputBlurTimeout) {\n clearTimeout(this.inputBlurTimeout);\n }\n }\n\n static getDerivedStateFromProps(props: ChipInputProps, state: ChipInputState): Partial<ChipInputState> | null {\n let newState: Partial<ChipInputState> | null = null;\n\n if (props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value };\n if (props.clearInputValueOnChange) {\n newState.inputValue = '';\n }\n }\n\n // if change detection is only necessary for clearInputValueOnChange\n if (props.clearInputValueOnChange && props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value, inputValue: '' };\n }\n\n if (props.disabled) {\n newState = { ...newState, focusedChip: null };\n }\n\n if (!state.chipsUpdated && props.defaultValue) {\n newState = { ...newState, chips: props.defaultValue };\n }\n\n return newState;\n }\n\n /**\n * Blurs this component.\n */\n // blur() {\n // if (this.input) {\n // this.actualInput.blur();\n // }\n // }\n\n /**\n * Focuses this component.\n */\n focus = (): void => {\n this.actualInput?.focus();\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n };\n\n handleInputBlur = (event: React.FocusEvent<HTMLInputElement>): void => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n this.setState({ isFocused: false });\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n const value = event.target.value;\n let addChipOptions: { clearInputOnFail: boolean };\n switch (this.props.blurBehavior || 'clear') {\n case 'add-or-clear':\n addChipOptions = { clearInputOnFail: true };\n // falls through\n case 'add':\n if (this.props.delayBeforeAdd) {\n // Let's assume that we only want to add the existing content as chip, when\n // another event has not added a chip within 200ms.\n // e.g., onSelection Callback in Autocomplete case\n const numChipsBefore = (this.props.value || this.state.chips).length;\n this.inputBlurTimeout = setTimeout(() => {\n const numChipsAfter = (this.props.value || this.state.chips).length;\n if (numChipsBefore === numChipsAfter) {\n this.handleAddChip(value, addChipOptions);\n } else {\n this.clearInput();\n }\n }, 150);\n } else {\n this.handleAddChip(value, addChipOptions);\n }\n break;\n\n case 'clear':\n this.clearInput();\n break;\n\n default:\n break;\n }\n };\n\n handleInputFocus = (event: React.FocusEvent<HTMLInputElement>): void => {\n this.setState({ isFocused: true });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n const { focusedChip } = this.state;\n this._keyPressed = false;\n this._preventChipCreation = false;\n\n if (this.props.onKeyDown) {\n // Needed for arrow controls on a menu in autocomplete scenario\n this.props.onKeyDown(event);\n // Check if the callback marked the event as isDefaultPrevented() and skip further actions\n // enter key, for example, should not always add the current value of the inputField\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n const chips = this.props.value || this.state.chips;\n if (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) {\n const result = this.handleAddChip((event.target as HTMLInputElement).value);\n if (result !== false) {\n event.preventDefault();\n }\n return;\n }\n\n switch (event.keyCode) {\n case keyCodes.BACKSPACE:\n if ((event.target as HTMLInputElement).value === '') {\n if (focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n } else {\n this.setState({ focusedChip: chips.length - 1 });\n }\n }\n break;\n case keyCodes.DELETE:\n if ((event.target as HTMLInputElement).value === '' && focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip <= chips.length - 1) {\n this.setState({ focusedChip });\n }\n }\n break;\n case keyCodes.LEFT_ARROW:\n if (focusedChip === null && (event.target as HTMLInputElement).value === '' && chips.length) {\n this.setState({ focusedChip: chips.length - 1 });\n } else if (focusedChip !== null && focusedChip > 0) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n break;\n case keyCodes.RIGHT_ARROW:\n if (focusedChip !== null && focusedChip < chips.length - 1) {\n this.setState({ focusedChip: focusedChip + 1 });\n } else {\n this.setState({ focusedChip: null });\n }\n break;\n default:\n this.setState({ focusedChip: null });\n break;\n }\n };\n\n handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (\n !this._preventChipCreation &&\n (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) &&\n this._keyPressed\n ) {\n this.clearInput();\n } else {\n this.updateInput((event.target as HTMLInputElement).value);\n }\n if (this.props.onKeyUp) {\n this.props.onKeyUp(event);\n }\n };\n\n // handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n // this._keyPressed = true;\n // if (this.props.onKeyPress) {\n // this.props.onKeyPress(event);\n // }\n // };\n\n handleUpdateInput = (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (this.props.inputValue === null || this.props.inputValue === undefined) {\n this.updateInput(e.target.value);\n }\n\n if (this.props.onUpdateInput) {\n this.props.onUpdateInput(e);\n }\n };\n\n /**\n * Handles adding a chip.\n *\n * @param chip Value of the chip, either a string or an object (if dataSourceConfig is set)\n * @param options Additional options\n * @param options.clearInputOnFail If `true`, and `onBeforeAdd` returns `false`, clear the input\n * @returns True if the chip was added (or at least `onAdd` was called), false if adding the chip was prevented\n */\n handleAddChip(chip: string, options?: { clearInputOnFail: boolean }): boolean {\n if (this.props.onBeforeAdd && !this.props.onBeforeAdd(chip)) {\n this._preventChipCreation = true;\n if (options && options.clearInputOnFail) {\n this.clearInput();\n }\n return false;\n }\n this.clearInput();\n const chips = this.props.value || this.state.chips;\n\n if (chip.trim().length) {\n if (this.props.allowDuplicates || !chips.includes(chip)) {\n if (this.props.value && this.props.onAdd) {\n this.props.onAdd(chip);\n } else {\n this.updateChips([...this.state.chips, chip]);\n }\n }\n return true;\n }\n return false;\n }\n\n handleDeleteChip(chip: string, i: number): void {\n if (!this.props.value) {\n const chips = this.state.chips.slice();\n const changed = chips.splice(i, 1); // remove the chip at index i\n if (changed) {\n let focusedChip = this.state.focusedChip;\n if (this.state.focusedChip === i) {\n focusedChip = null;\n } else if (this.state.focusedChip > i) {\n focusedChip = this.state.focusedChip - 1;\n }\n this.updateChips(chips, { focusedChip });\n }\n } else if (this.props.onDelete) {\n this.props.onDelete(chip, i);\n }\n }\n\n updateChips(chips: string[], additionalUpdates = {}): void {\n this.setState({ chips, chipsUpdated: true, ...additionalUpdates });\n if (this.props.onChange) {\n this.props.onChange(chips);\n }\n }\n\n /**\n * Clears the text field for adding new chips.\n * This only works in uncontrolled input mode, i.e., if the inputValue prop is not used.\n */\n clearInput(): void {\n this.updateInput('');\n }\n\n updateInput(value: string): void {\n this.setState({ inputValue: value });\n }\n\n /**\n * Set the reference to the actual input, that is the input of the Input.\n *\n * @param ref - The reference\n */\n setActualInputRef = (ref: HTMLInputElement): void => {\n this.actualInput = ref;\n if (this.props.inputRef) {\n this.props.inputRef(ref);\n }\n };\n\n render(): JSX.Element {\n const {\n alwaysShowPlaceholder,\n chipRenderer = defaultChipRenderer,\n className,\n disabled,\n disableUnderline,\n error,\n FormHelperTextProps,\n fullWidth,\n fullWidthInput,\n helperText,\n id,\n InputProps = {},\n InputLabelProps = {},\n inputValue,\n label,\n placeholder,\n readOnly,\n required,\n rootRef,\n value,\n margin,\n } = this.props;\n const variant = this.state.variant;\n\n if (this.styleTheme !== this.props.theme.palette.mode) {\n this.styleTheme = this.props.theme.palette.mode;\n this.styles = Utils.getStyle(this.props.theme, styles);\n }\n\n let chips = value || this.state.chips || [];\n if (!Array.isArray(chips)) {\n chips = ((chips as string) || '')\n .toString()\n .split(/[,\\s]+/)\n .map((c: string) => c.trim());\n }\n const actualInputValue = inputValue ?? this.state.inputValue;\n\n const hasInput = (this.props.value || actualInputValue).length || actualInputValue.length;\n const shrinkFloatingLabel =\n typeof InputLabelProps.shrink === 'boolean'\n ? InputLabelProps.shrink\n : label !== null && (hasInput || this.state.isFocused || chips.length);\n\n const chipComponents = chips.map((chip, i) =>\n chipRenderer(\n {\n value: chip,\n isDisabled: !!disabled,\n isReadOnly: readOnly,\n isFocused: this.state.focusedChip === i,\n handleClick: () => this.setState({ focusedChip: i }),\n handleDelete: () => this.handleDeleteChip(chip, i),\n style: this.styles.chip,\n },\n i.toString(),\n ),\n );\n\n const InputMore: { notched?: boolean; labelWidth?: number; startAdornment?: JSX.Element[] } = {};\n if (variant === 'outlined') {\n InputMore.notched = !!shrinkFloatingLabel;\n InputMore.labelWidth = (shrinkFloatingLabel && this.labelNode && this.labelNode.offsetWidth) || 0;\n }\n\n if (variant !== 'standard') {\n InputMore.startAdornment = chipComponents;\n } else {\n InputProps.disableUnderline = true;\n }\n\n const InputComponent = variantComponent[variant];\n\n return (\n <FormControl\n ref={rootRef}\n fullWidth={fullWidth}\n className={className}\n sx={{ ...this.styles.root, ...(margin === 'dense' ? this.styles.marginDense : {}) }}\n error={error}\n required={chips.length > 0 ? undefined : required}\n onClick={this.focus}\n disabled={disabled}\n variant={variant}\n component=\"div\"\n margin={margin}\n >\n {label && (\n <InputLabel\n htmlFor={id}\n sx={{\n '&.MuiInputLabel-root': this.styles.label,\n '&.MuiInputLabel-shrink': this.styles.labelShrink,\n }}\n shrink={!!shrinkFloatingLabel}\n focused={this.state.isFocused}\n variant={variant}\n ref={this.labelRef}\n required={required}\n component=\"label\"\n {...InputLabelProps}\n >\n {label}\n </InputLabel>\n )}\n <Box\n component=\"div\"\n id=\"input-chip-container\"\n sx={{\n ...this.styles[variant],\n ...this.styles.chipContainer,\n ...(this.state.isFocused ? this.styles.focused : undefined),\n ...(!disableUnderline && variant === 'standard' ? this.styles.underline : undefined),\n ...(disabled ? this.styles.disabled : undefined),\n ...(label ? this.styles.labeled : undefined),\n ...(error ? this.styles.error : undefined),\n }}\n >\n {variant === 'standard' && chipComponents}\n <InputComponent\n ref={this.input}\n className={`mui-variant-${this.styles[variant]} ${label ? 'mui-chip-with-label' : 'mui-chip-no-label'}`}\n sx={{\n '&.MuiInputBase-input': { ...this.styles.input, ...this.styles[variant] },\n '&.MuiInputBase-root': { ...this.styles.inputRoot },\n }}\n id={id}\n value={actualInputValue}\n onChange={this.handleUpdateInput}\n onKeyDown={this.handleKeyDown}\n // onKeyPress={this.handleKeyPress}\n onKeyUp={this.handleKeyUp}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n inputRef={this.setActualInputRef}\n disabled={disabled}\n fullWidth={fullWidthInput}\n placeholder={\n (!hasInput && (shrinkFloatingLabel || label === null || label === undefined)) ||\n alwaysShowPlaceholder\n ? placeholder\n : null\n }\n readOnly={readOnly}\n {...InputProps}\n {...InputMore}\n />\n </Box>\n {helperText && (\n <FormHelperText\n {...FormHelperTextProps}\n className={FormHelperTextProps?.className}\n style={this.styles.helperText}\n >\n {helperText}\n </FormHelperText>\n )}\n </FormControl>\n );\n }\n}\n\nexport default ChipInput;\n"]}
|
|
1
|
+
{"version":3,"file":"ChipInput.js","sourceRoot":"./src/","sources":["JsonConfigComponent/ChipInput.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAmC,MAAM,OAAO,CAAC;AACxD,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,WAAW,MAAM,uCAAuC,CAAC;AAChE,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAE7C,OAAO,EAAiC,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAElF,MAAM,gBAAgB,GAAG;IACrB,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,aAAa;CAC1B,CAAC;AAEF,MAAM,MAAM,GAAwB,CAAC,KAAe,EAAuB,EAAE;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;IAC7C,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,0BAA0B,CAAC;IAEnF,OAAO;QACH,IAAI,EAAE,EAAE;QACR,SAAS,EAAE;YACP,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC;YACP,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,EAAE;YACZ,6CAA6C,EAAE;gBAC3C,SAAS,EAAE,YAAY;aAC1B;YACD,wBAAwB,EAAE;gBACtB,UAAU,EAAE,MAAM;aACrB;YACD,sBAAsB,EAAE;gBACpB,UAAU,EAAE,MAAM;aACrB;SACJ;QACD,KAAK,EAAE;YACH,OAAO,EAAE,cAAc;YACvB,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,MAAM,EAAE,4EAA4E;YAChG,uBAAuB,EAAE,eAAe,EAAE,mDAAmD;YAC7F,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,CAAC;SACV;QACD,aAAa,EAAE;YACX,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;SAChB;QACD,QAAQ,EAAE;YACN,SAAS,EAAE;gBACP,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,KAAK;gBACjB,aAAa,EAAE,MAAM;gBACrB,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,KAAK;aACtB;SACJ;QACD,QAAQ,EAAE;YACN,SAAS,EAAE,MAAM;SACpB;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,MAAM,EAAE,EAAE;gBACV,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;aAChB;YACD,sBAAsB,EAAE;gBACpB,MAAM,EAAE,EAAE;aACb;SACJ;QACD,OAAO,EAAE,EAAE;QACX,KAAK,EAAE;YACH,GAAG,EAAE,CAAC;YACN,+BAA+B,EAAE;gBAC7B,GAAG,EAAE,CAAC;gBACN,gBAAgB,EAAE;oBACd,GAAG,EAAE,CAAC;iBACT;aACJ;YACD,6BAA6B,EAAE;gBAC3B,GAAG,EAAE,EAAE;gBACP,gBAAgB,EAAE;oBACd,GAAG,EAAE,EAAE;iBACV;aACJ;SACJ;QACD,WAAW,EAAE;YACT,GAAG,EAAE,CAAC;SACT;QACD,UAAU,EAAE;YACR,YAAY,EAAE,CAAC,EAAE;SACpB;QACD,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE;YACP,SAAS,EAAE;gBACP,YAAY,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBAC5E,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;gBACT,6FAA6F;gBAC7F,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,WAAW;gBACtB,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE;oBAC9C,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO;oBAC5C,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO;iBAC3C,CAAC;gBACF,aAAa,EAAE,MAAM,EAAE,kCAAkC;aAC5D;YACD,iBAAiB,EAAE;gBACf,SAAS,EAAE,WAAW;aACzB;YACD,eAAe,EAAE;gBACb,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;gBAC3C,SAAS,EAAE,WAAW,EAAE,oCAAoC;aAC/D;YACD,UAAU,EAAE;gBACR,YAAY,EAAE,aAAa,eAAe,EAAE;gBAC5C,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;gBACT,6FAA6F;gBAC7F,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,qBAAqB,EAAE;oBACxD,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO;iBAC/C,CAAC;gBACF,aAAa,EAAE,MAAM,EAAE,kCAAkC;aAC5D;YACD,yDAAyD,EAAE;gBACvD,YAAY,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvD,qDAAqD;gBACrD,sBAAsB,EAAE;oBACpB,YAAY,EAAE,aAAa,eAAe,EAAE;iBAC/C;aACJ;YACD,mBAAmB,EAAE;gBACjB,iBAAiB,EAAE,QAAQ;aAC9B;SACJ;QACD,KAAK,EAAE;YACH,SAAS,EAAE;gBACP,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;gBACzC,SAAS,EAAE,WAAW,EAAE,oCAAoC;aAC/D;SACJ;QACD,IAAI,EAAE;YACF,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,MAAM;SAChB;QACD,WAAW,EAAE,EAAE;KAClB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG;IACb,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;CAClB,CAAC;AAYF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAqB,EACjG,GAAW,EACA,EAAE,CAAC,CACd,oBAAC,IAAI,IACD,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;QACH,GAAG,KAAK;QACR,aAAa,EAAE,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC5D,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;KACrD,EACD,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,GACd,CACL,CAAC;AAuFF,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK,CAAC,SAAyC;IACjE,QAAQ,CAAoC;IAErD,SAAS,GAA4B,IAAI,CAAC;IAEjC,KAAK,CAAoC;IAEzC,eAAe,CAAW;IAE1B,WAAW,CAAW;IAE/B,WAAW,GAA4B,IAAI,CAAC;IAE5C,gBAAgB,GAAyC,IAAI,CAAC;IAE9D,WAAW,CAAU;IAErB,oBAAoB,CAAU;IAE9B,MAAM,GAAwB,EAAE,CAAC;IAEjC,UAAU,GAAqB,IAAI,CAAC;IAE5C,YAAY,KAAqB;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG;YACT,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE;YAC/B,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,EAAE;YAClB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,UAAU;SAC5C,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,iBAAiB;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACpC,kDAAkD;YAClD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAqB,CAAC;YACjF,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,KAAqB,EAAE,KAAqB;QACxE,IAAI,QAAQ,GAAmC,IAAI,CAAC;QAEpD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YACpE,QAAQ,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;gBAChC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,oEAAoE;QACpE,IAAI,KAAK,CAAC,uBAAuB,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YACrG,QAAQ,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC/D,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC5C,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1D,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,WAAW;IACX,wBAAwB;IACxB,mCAAmC;IACnC,QAAQ;IACR,IAAI;IAEJ;;OAEG;IACH,KAAK,GAAG,GAAS,EAAE;QACf,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACL,CAAC,CAAC;IAEF,eAAe,GAAG,CAAC,KAAyC,EAAQ,EAAE;QAClE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,IAAI,cAAyD,CAAC;QAC9D,QAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,OAAO,EAAE,CAAC;YACzC,KAAK,cAAc;gBACf,cAAc,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;YAChD,gBAAgB;YAChB,KAAK,KAAK;gBACN,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC5B,2EAA2E;oBAC3E,mDAAmD;oBACnD,kDAAkD;oBAClD,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;oBACrE,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;wBACpC,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;wBACpE,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;4BACnC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;wBAC9C,CAAC;6BAAM,CAAC;4BACJ,IAAI,CAAC,UAAU,EAAE,CAAC;wBACtB,CAAC;oBACL,CAAC,EAAE,GAAG,CAAC,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;gBAC9C,CAAC;gBACD,MAAM;YAEV,KAAK,OAAO;gBACR,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,MAAM;YAEV;gBACI,MAAM;QACd,CAAC;IACL,CAAC,CAAC;IAEF,gBAAgB,GAAG,CAAC,KAAyC,EAAQ,EAAE;QACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,aAAa,GAAG,CAAC,KAA4C,EAAQ,EAAE;QACnE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAElC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACvB,+DAA+D;YAC/D,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC5B,0FAA0F;YAC1F,oFAAoF;YACpF,IAAI,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC7B,OAAO;YACX,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACvF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACnB,KAAK,CAAC,cAAc,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO;QACX,CAAC;QAED,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,QAAQ,CAAC,SAAS;gBACnB,IAAK,KAAK,CAAC,MAA2B,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;oBAClD,IAAI,WAAW,EAAE,CAAC;wBACd,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;wBACvD,IAAI,WAAW,EAAE,CAAC;4BACd,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;wBACpD,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrD,CAAC;gBACL,CAAC;gBACD,MAAM;YACV,KAAK,QAAQ,CAAC,MAAM;gBAChB,IAAK,KAAK,CAAC,MAA2B,CAAC,KAAK,KAAK,EAAE,IAAI,WAAW,EAAE,CAAC;oBACjE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;oBACvD,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;oBACnC,CAAC;gBACL,CAAC;gBACD,MAAM;YACV,KAAK,QAAQ,CAAC,UAAU;gBACpB,IAAI,WAAW,KAAK,IAAI,IAAK,KAAK,CAAC,MAA2B,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC1F,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpD,CAAC;gBACD,MAAM;YACV,KAAK,QAAQ,CAAC,WAAW;gBACrB,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM;YACV;gBACI,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrC,MAAM;QACd,CAAC;IACL,CAAC,CAAC;IAEF,WAAW,GAAG,CAAC,KAA4C,EAAQ,EAAE;QACjE,IACI,CAAC,IAAI,CAAC,oBAAoB;YAC1B,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtF,IAAI,CAAC,WAAW,EAClB,CAAC;YACC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC,CAAC;IAEF,uEAAuE;IACvE,+BAA+B;IAC/B,mCAAmC;IACnC,wCAAwC;IACxC,QAAQ;IACR,KAAK;IAEL,iBAAiB,GAAG,CAAC,CAAsC,EAAQ,EAAE;QACjE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;IACL,CAAC,CAAC;IAEF;;;;;;;OAOG;IACH,aAAa,CAAC,IAAY,EAAE,OAAuC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBACtC,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAEnD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,CAAS;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,6BAA6B;YACjE,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBACzC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;oBAC/B,WAAW,GAAG,IAAI,CAAC;gBACvB,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBACvE,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,KAAe,EAAE,iBAAiB,GAAG,EAAE;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,UAAU;QACN,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,KAAa;QACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,iBAAiB,GAAG,CAAC,GAAqB,EAAQ,EAAE;QAChD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC;IAEF,MAAM;QACF,MAAM,EACF,qBAAqB,EACrB,YAAY,GAAG,mBAAmB,EAClC,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,UAAU,EACV,EAAE,EACF,UAAU,GAAG,EAAE,EACf,eAAe,GAAG,EAAE,EACpB,UAAU,EACV,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,GACT,GAAG,IAAI,CAAC,KAAK,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAEnC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAChD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,GAAG,CAAE,KAAgB,IAAI,EAAE,CAAC;iBAC5B,QAAQ,EAAE;iBACV,KAAK,CAAC,QAAQ,CAAC;iBACf,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,gBAAgB,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAE7D,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC;QAC1F,MAAM,mBAAmB,GACrB,OAAO,eAAe,CAAC,MAAM,KAAK,SAAS;YACvC,CAAC,CAAC,eAAe,CAAC,MAAM;YACxB,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAE/E,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACzC,YAAY,CACR;YACI,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,CAAC,CAAC,QAAQ;YACtB,UAAU,EAAE,CAAC,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC;YACvC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YACpD,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;SAC1B,EACD,CAAC,CAAC,QAAQ,EAAE,CACf,CACJ,CAAC;QAEF,MAAM,SAAS,GAA+E,EAAE,CAAC;QACjG,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YACzB,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,mBAAmB,CAAC;YAC1C,SAAS,CAAC,UAAU,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YACzB,SAAS,CAAC,cAAc,GAAG,cAAc,CAAC;QAC9C,CAAC;aAAM,CAAC;YACJ,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACvC,CAAC;QAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEjD,OAAO,CACH,oBAAC,WAAW,IACR,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACnF,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EACjD,OAAO,EAAE,IAAI,CAAC,KAAK,EACnB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,KAAK,EACf,MAAM,EAAE,MAAM;YAEb,KAAK,IAAI,CACN,oBAAC,UAAU,IACP,OAAO,EAAE,EAAE,EACX,EAAE,EAAE;oBACA,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACzC,wBAAwB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;iBACpD,EACD,MAAM,EAAE,CAAC,CAAC,mBAAmB,EAC7B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,IAAI,CAAC,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,OAAO,KACb,eAAe,IAElB,KAAK,CACG,CAChB;YACD,oBAAC,GAAG,IACA,SAAS,EAAC,KAAK,EACf,EAAE,EAAC,sBAAsB,EACzB,EAAE,EAAE;oBACA,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;oBACvB,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;oBAC5B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC3D,GAAG,CAAC,CAAC,gBAAgB,IAAI,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;oBACpF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;oBAChD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC5C,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;iBAC7C;gBAEA,OAAO,KAAK,UAAU,IAAI,cAAc;gBACzC,oBAAC,cAAc,IACX,GAAG,EAAE,IAAI,CAAC,KAAK,EACf,SAAS,EAAE,eAAe,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,EAAE,EACvG,EAAE,EAAE;wBACA,sBAAsB,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;wBACzE,qBAAqB,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;qBACtD,EACD,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAChC,SAAS,EAAE,IAAI,CAAC,aAAa;oBAC7B,mCAAmC;oBACnC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAC9B,MAAM,EAAE,IAAI,CAAC,eAAe,EAC5B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,WAAW,EACP,CAAC,CAAC,QAAQ,IAAI,CAAC,mBAAmB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;wBAC7E,qBAAqB;wBACjB,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,SAAS,EAEnB,QAAQ,EAAE,QAAQ,KACd,UAAU,KACV,SAAS,GACf,CACA;YACL,UAAU,IAAI,CACX,oBAAC,cAAc,OACP,mBAAmB,EACvB,SAAS,EAAE,mBAAmB,EAAE,SAAS,EACzC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAE5B,UAAU,CACE,CACpB,CACS,CACjB,CAAC;IACN,CAAC;CACJ","sourcesContent":["/**\n * Notice: Some code was adapted from Material-UI's text field.\n * Copyright (c) 2014 Call-Em-All (https://github.com/callemall/material-ui)\n */\nimport React, { type RefObject, type JSX } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Input, OutlinedInput, InputLabel, Chip, FormControl, FormHelperText, Box } from '@mui/material';\nimport FilledInput from '@mui/material/FilledInput/FilledInput';\nimport blue from '@mui/material/colors/blue';\n\nimport { type IobTheme, type ThemeType, Utils } from '@iobroker/adapter-react-v5';\n\nconst variantComponent = {\n standard: Input,\n filled: FilledInput,\n outlined: OutlinedInput,\n};\n\nconst styles: Record<string, any> = (theme: IobTheme): Record<string, any> => {\n const light = theme.palette.mode === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n\n return {\n root: {},\n inputRoot: {\n display: 'inline-flex',\n flexWrap: 'wrap',\n flex: 1,\n marginTop: 0,\n minWidth: 70,\n '&.mui-variant-outlined,&.mui-variant-filled': {\n boxSizing: 'border-box',\n },\n '&.mui-variant-outlined': {\n paddingTop: '14px',\n },\n '&.mui-variant-filled': {\n paddingTop: '28px',\n },\n },\n input: {\n display: 'inline-block',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n appearance: 'none', // Remove border in Safari, doesn't seem to break anything in other browsers\n WebkitTapHighlightColor: 'rgba(0,0,0,0)', // Remove mobile color flashing (deprecated style).\n float: 'left',\n flex: 1,\n },\n chipContainer: {\n display: 'flex',\n flexFlow: 'row wrap',\n alignItems: 'center',\n cursor: 'text',\n marginBottom: '-2px',\n minHeight: 40,\n },\n outlined: {\n '& input': {\n height: 16,\n paddingTop: '4px',\n paddingBottom: '12px',\n marginTop: '4px',\n marginBottom: '4px',\n },\n },\n standard: {\n marginTop: '18px',\n },\n filled: {\n '& input': {\n height: 22,\n marginBottom: '4px',\n marginTop: '4px',\n paddingTop: 0,\n },\n '$marginDense & input': {\n height: 26,\n },\n },\n labeled: {},\n label: {\n top: 4,\n '&$outlined&:not($labelShrink)': {\n top: 2,\n '$marginDense &': {\n top: 5,\n },\n },\n '&$filled&:not($labelShrink)': {\n top: 15,\n '$marginDense &': {\n top: 20,\n },\n },\n },\n labelShrink: {\n top: 0,\n },\n helperText: {\n marginBottom: -20,\n },\n focused: {},\n disabled: {},\n underline: {\n '&:after': {\n borderBottom: `2px solid ${theme.palette.primary[light ? 'dark' : 'light']}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&$focused:after': {\n transform: 'scaleX(1)',\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n '&:before': {\n borderBottom: `1px solid ${bottomLineColor}`,\n left: 0,\n bottom: 0,\n // Doing the other way around a crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&:hover:not($disabled):not($focused):not($error):before': {\n borderBottom: `2px solid ${theme.palette.text.primary}`,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n borderBottom: `1px solid ${bottomLineColor}`,\n },\n },\n '&$disabled:before': {\n borderBottomStyle: 'dotted',\n },\n },\n error: {\n '&:after': {\n backgroundColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n },\n chip: {\n margin: '0 8px 8px 0',\n float: 'left',\n },\n marginDense: {},\n };\n};\n\nconst keyCodes = {\n BACKSPACE: 8,\n DELETE: 46,\n LEFT_ARROW: 37,\n RIGHT_ARROW: 39,\n};\n\ninterface ChipRendererProps {\n value: string;\n isFocused: boolean;\n isDisabled: boolean;\n isReadOnly: boolean;\n handleClick: () => void;\n handleDelete: () => void;\n style: React.CSSProperties;\n}\n\nexport const defaultChipRenderer = (\n { value, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, style }: ChipRendererProps,\n key: string,\n): JSX.Element => (\n <Chip\n key={key}\n style={{\n ...style,\n pointerEvents: isDisabled || isReadOnly ? 'none' : undefined,\n backgroundColor: isFocused ? blue[300] : undefined,\n }}\n onClick={handleClick}\n onDelete={handleDelete}\n label={value}\n />\n);\n\ninterface ChipInputProps {\n /** Allows duplicate chips if set to true. */\n allowDuplicates?: boolean;\n /** If true, the placeholder will always be visible. */\n alwaysShowPlaceholder?: boolean;\n /** Behavior when the chip input is blurred: `'clear'` clears the input, `'add'` creates a chip and `'ignore'` keeps the input. */\n blurBehavior?: 'clear' | 'add' | 'add-or-clear' | 'ignore';\n /** A function of the type `({ value, text, chip, isFocused, isDisabled, isReadOnly, handleClick, handleDelete, className }, key) => node` that returns a chip based on the given properties. This can be used to customize chip styles. Each item in the `dataSource` array will be passed to `chipRenderer` as arguments `chip`, `value` and `text`. If `dataSource` is an array of objects and `dataSourceConfig` is present, then `value` and `text` will instead correspond to the object values defined in `dataSourceConfig`. If `dataSourceConfig` is not set and `dataSource` is an array of objects, then a custom `chipRenderer` must be set. `chip` is always the raw value from `dataSource`, either an object or a string. */\n chipRenderer?: (props: ChipRendererProps) => JSX.Element;\n /** Whether the input value should be cleared if the `value` prop is changed. */\n clearInputValueOnChange?: boolean;\n /** Data source for auto complete. This should be an array of strings or objects. */\n dataSource?: string[];\n /** The chips to display by default (for uncontrolled mode). */\n defaultValue?: string[];\n /** Whether to use `setTimeout` to delay adding chips in case other input events like `onSelection` need to fire first */\n delayBeforeAdd?: boolean;\n /** Disables the chip input if set to true. */\n disabled?: boolean;\n /** Disable the input underline. Only valid for 'standard' variant */\n disableUnderline?: boolean;\n /** Props to pass through to the `FormHelperText` component. */\n FormHelperTextProps?: Record<string, any>;\n /** If true, the chip input will fill the available width. */\n fullWidth?: boolean;\n /** If true, the input field will always be below the chips and fill the available space. By default, it will try to be beside the chips. */\n fullWidthInput?: boolean;\n /** Helper text that is displayed below the input. */\n helperText?: string | JSX.Element;\n /** Props to pass through to the `InputLabel`. */\n InputLabelProps?: Record<string, any>;\n /** Props to pass through to the `Input`. */\n InputProps?: Record<string, any>;\n /** Use this property to pass a ref callback to the native input component. */\n inputRef?: (el: HTMLInputElement) => void;\n /** The input value (enables controlled mode for the text input if set). */\n inputValue?: string;\n /* The content of the floating label. */\n label?: string | JSX.Element;\n /** The key codes (`KeyboardEvent.keyCode`) used to determine when to create a new chip. */\n newChipKeyCodes?: number[];\n /** The keys (`KeyboardEvent.key`) used to determine when to create a new chip. */\n newChipKeys?: string[];\n /** Callback function that is called when a new chip was added (in controlled mode). */\n onAdd?: (chip: string) => void;\n /** Callback function that is called with the chip to be added and should return true to add the chip or false to prevent the chip from being added without clearing the text input. */\n onBeforeAdd?: (chip: string) => boolean;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n // onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n /** Callback function that is called when the chips change (in uncontrolled mode). */\n onChange?: (chips: string[]) => void;\n /** Callback function that is called when a new chip was removed (in controlled mode). */\n onDelete: (chip: string, i: number) => void;\n /** Callback function that is called when the input changes. */\n onUpdateInput?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** A placeholder that is displayed if the input has no values. */\n placeholder?: string;\n /** Makes the chip input read-only if set to true. */\n readOnly?: boolean;\n /** The chips to display (enables controlled mode if set). */\n value?: string[];\n /** The variant of the Input component */\n variant?: 'outlined' | 'standard' | 'filled';\n className?: string;\n error?: boolean;\n id?: string;\n required?: boolean;\n rootRef?: RefObject<HTMLDivElement>;\n margin?: 'dense' | 'normal' | 'none';\n theme: IobTheme;\n}\n\ninterface ChipInputState {\n chips: string[];\n focusedChip: number | null;\n inputValue: string;\n isFocused: boolean;\n chipsUpdated: boolean;\n prevPropsValue: string[];\n variant: 'outlined' | 'standard' | 'filled';\n}\n\nexport default class ChipInput extends React.Component<ChipInputProps, ChipInputState> {\n private readonly labelRef: React.RefObject<HTMLLabelElement>;\n\n private labelNode: HTMLLabelElement | null = null;\n\n private readonly input: React.RefObject<HTMLInputElement>;\n\n private readonly newChipKeyCodes: number[];\n\n private readonly newChipKeys: string[];\n\n private actualInput: HTMLInputElement | null = null;\n\n private inputBlurTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private _keyPressed: boolean;\n\n private _preventChipCreation: boolean;\n\n private styles: Record<string, any> = {};\n\n private styleTheme: ThemeType | null = null;\n\n constructor(props: ChipInputProps) {\n super(props);\n this.state = {\n chips: props.defaultValue || [],\n focusedChip: null,\n inputValue: '',\n isFocused: false,\n chipsUpdated: false,\n prevPropsValue: [],\n variant: this.props.variant || 'standard',\n };\n this.newChipKeyCodes = props.newChipKeyCodes || [13];\n this.newChipKeys = props.newChipKeys || ['Enter'];\n\n this.labelRef = React.createRef();\n this.input = React.createRef();\n }\n\n componentDidMount(): void {\n if (this.state.variant === 'outlined') {\n // eslint-disable-next-line react/no-find-dom-node\n this.labelNode = ReactDOM.findDOMNode(this.labelRef.current) as HTMLLabelElement;\n this.forceUpdate();\n }\n }\n\n componentWillUnmount(): void {\n if (this.inputBlurTimeout) {\n clearTimeout(this.inputBlurTimeout);\n }\n }\n\n static getDerivedStateFromProps(props: ChipInputProps, state: ChipInputState): Partial<ChipInputState> | null {\n let newState: Partial<ChipInputState> | null = null;\n\n if (props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value };\n if (props.clearInputValueOnChange) {\n newState.inputValue = '';\n }\n }\n\n // if change detection is only necessary for clearInputValueOnChange\n if (props.clearInputValueOnChange && props.value && props.value.length !== state.prevPropsValue.length) {\n newState = { prevPropsValue: props.value, inputValue: '' };\n }\n\n if (props.disabled) {\n newState = { ...newState, focusedChip: null };\n }\n\n if (!state.chipsUpdated && props.defaultValue) {\n newState = { ...newState, chips: props.defaultValue };\n }\n\n return newState;\n }\n\n /**\n * Blurs this component.\n */\n // blur() {\n // if (this.input) {\n // this.actualInput.blur();\n // }\n // }\n\n /**\n * Focuses this component.\n */\n focus = (): void => {\n this.actualInput?.focus();\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n };\n\n handleInputBlur = (event: React.FocusEvent<HTMLInputElement>): void => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n this.setState({ isFocused: false });\n if (this.state.focusedChip) {\n this.setState({ focusedChip: null });\n }\n const value = event.target.value;\n let addChipOptions: { clearInputOnFail: boolean } | undefined;\n switch (this.props.blurBehavior || 'clear') {\n case 'add-or-clear':\n addChipOptions = { clearInputOnFail: true };\n // falls through\n case 'add':\n if (this.props.delayBeforeAdd) {\n // Let's assume that we only want to add the existing content as chip, when\n // another event has not added a chip within 200ms.\n // e.g., onSelection Callback in Autocomplete case\n const numChipsBefore = (this.props.value || this.state.chips).length;\n this.inputBlurTimeout = setTimeout(() => {\n const numChipsAfter = (this.props.value || this.state.chips).length;\n if (numChipsBefore === numChipsAfter) {\n this.handleAddChip(value, addChipOptions);\n } else {\n this.clearInput();\n }\n }, 150);\n } else {\n this.handleAddChip(value, addChipOptions);\n }\n break;\n\n case 'clear':\n this.clearInput();\n break;\n\n default:\n break;\n }\n };\n\n handleInputFocus = (event: React.FocusEvent<HTMLInputElement>): void => {\n this.setState({ isFocused: true });\n this.props.onFocus?.(event);\n };\n\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n const { focusedChip } = this.state;\n this._keyPressed = false;\n this._preventChipCreation = false;\n\n if (this.props.onKeyDown) {\n // Needed for arrow controls on a menu in autocomplete scenario\n this.props.onKeyDown(event);\n // Check if the callback marked the event as isDefaultPrevented() and skip further actions\n // enter key, for example, should not always add the current value of the inputField\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n const chips = this.props.value || this.state.chips;\n if (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) {\n const result = this.handleAddChip((event.target as HTMLInputElement).value);\n if (result !== false) {\n event.preventDefault();\n }\n return;\n }\n\n switch (event.keyCode) {\n case keyCodes.BACKSPACE:\n if ((event.target as HTMLInputElement).value === '') {\n if (focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n } else {\n this.setState({ focusedChip: chips.length - 1 });\n }\n }\n break;\n case keyCodes.DELETE:\n if ((event.target as HTMLInputElement).value === '' && focusedChip) {\n this.handleDeleteChip(chips[focusedChip], focusedChip);\n if (focusedChip <= chips.length - 1) {\n this.setState({ focusedChip });\n }\n }\n break;\n case keyCodes.LEFT_ARROW:\n if (focusedChip === null && (event.target as HTMLInputElement).value === '' && chips.length) {\n this.setState({ focusedChip: chips.length - 1 });\n } else if (focusedChip !== null && focusedChip > 0) {\n this.setState({ focusedChip: focusedChip - 1 });\n }\n break;\n case keyCodes.RIGHT_ARROW:\n if (focusedChip !== null && focusedChip < chips.length - 1) {\n this.setState({ focusedChip: focusedChip + 1 });\n } else {\n this.setState({ focusedChip: null });\n }\n break;\n default:\n this.setState({ focusedChip: null });\n break;\n }\n };\n\n handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (\n !this._preventChipCreation &&\n (this.newChipKeyCodes.includes(event.keyCode) || this.newChipKeys.includes(event.key)) &&\n this._keyPressed\n ) {\n this.clearInput();\n } else {\n this.updateInput((event.target as HTMLInputElement).value);\n }\n if (this.props.onKeyUp) {\n this.props.onKeyUp(event);\n }\n };\n\n // handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n // this._keyPressed = true;\n // if (this.props.onKeyPress) {\n // this.props.onKeyPress(event);\n // }\n // };\n\n handleUpdateInput = (e: React.ChangeEvent<HTMLInputElement>): void => {\n if (this.props.inputValue === null || this.props.inputValue === undefined) {\n this.updateInput(e.target.value);\n }\n\n if (this.props.onUpdateInput) {\n this.props.onUpdateInput(e);\n }\n };\n\n /**\n * Handles adding a chip.\n *\n * @param chip Value of the chip, either a string or an object (if dataSourceConfig is set)\n * @param options Additional options\n * @param options.clearInputOnFail If `true`, and `onBeforeAdd` returns `false`, clear the input\n * @returns True if the chip was added (or at least `onAdd` was called), false if adding the chip was prevented\n */\n handleAddChip(chip: string, options?: { clearInputOnFail: boolean }): boolean {\n if (this.props.onBeforeAdd && !this.props.onBeforeAdd(chip)) {\n this._preventChipCreation = true;\n if (options && options.clearInputOnFail) {\n this.clearInput();\n }\n return false;\n }\n this.clearInput();\n const chips = this.props.value || this.state.chips;\n\n if (chip.trim().length) {\n if (this.props.allowDuplicates || !chips.includes(chip)) {\n if (this.props.value && this.props.onAdd) {\n this.props.onAdd(chip);\n } else {\n this.updateChips([...this.state.chips, chip]);\n }\n }\n return true;\n }\n return false;\n }\n\n handleDeleteChip(chip: string, i: number): void {\n if (!this.props.value) {\n const chips = this.state.chips.slice();\n const changed = chips.splice(i, 1); // remove the chip at index i\n if (changed) {\n let focusedChip = this.state.focusedChip;\n if (this.state.focusedChip === i) {\n focusedChip = null;\n } else if (this.state.focusedChip !== null && this.state.focusedChip > i) {\n focusedChip = this.state.focusedChip - 1;\n }\n this.updateChips(chips, { focusedChip });\n }\n } else if (this.props.onDelete) {\n this.props.onDelete(chip, i);\n }\n }\n\n updateChips(chips: string[], additionalUpdates = {}): void {\n this.setState({ chips, chipsUpdated: true, ...additionalUpdates });\n if (this.props.onChange) {\n this.props.onChange(chips);\n }\n }\n\n /**\n * Clears the text field for adding new chips.\n * This only works in uncontrolled input mode, i.e., if the inputValue prop is not used.\n */\n clearInput(): void {\n this.updateInput('');\n }\n\n updateInput(value: string): void {\n this.setState({ inputValue: value });\n }\n\n /**\n * Set the reference to the actual input, that is the input of the Input.\n *\n * @param ref - The reference\n */\n setActualInputRef = (ref: HTMLInputElement): void => {\n this.actualInput = ref;\n if (this.props.inputRef) {\n this.props.inputRef(ref);\n }\n };\n\n render(): JSX.Element {\n const {\n alwaysShowPlaceholder,\n chipRenderer = defaultChipRenderer,\n className,\n disabled,\n disableUnderline,\n error,\n FormHelperTextProps,\n fullWidth,\n fullWidthInput,\n helperText,\n id,\n InputProps = {},\n InputLabelProps = {},\n inputValue,\n label,\n placeholder,\n readOnly,\n required,\n rootRef,\n value,\n margin,\n } = this.props;\n const variant = this.state.variant;\n\n if (this.styleTheme !== this.props.theme.palette.mode) {\n this.styleTheme = this.props.theme.palette.mode;\n this.styles = Utils.getStyle(this.props.theme, styles);\n }\n\n let chips = value || this.state.chips || [];\n if (!Array.isArray(chips)) {\n chips = ((chips as string) || '')\n .toString()\n .split(/[,\\s]+/)\n .map((c: string) => c.trim());\n }\n const actualInputValue = inputValue ?? this.state.inputValue;\n\n const hasInput = (this.props.value || actualInputValue).length || actualInputValue.length;\n const shrinkFloatingLabel =\n typeof InputLabelProps.shrink === 'boolean'\n ? InputLabelProps.shrink\n : label !== null && (hasInput || this.state.isFocused || chips.length);\n\n const chipComponents = chips.map((chip, i) =>\n chipRenderer(\n {\n value: chip,\n isDisabled: !!disabled,\n isReadOnly: !!readOnly,\n isFocused: this.state.focusedChip === i,\n handleClick: () => this.setState({ focusedChip: i }),\n handleDelete: () => this.handleDeleteChip(chip, i),\n style: this.styles.chip,\n },\n i.toString(),\n ),\n );\n\n const InputMore: { notched?: boolean; labelWidth?: number; startAdornment?: JSX.Element[] } = {};\n if (variant === 'outlined') {\n InputMore.notched = !!shrinkFloatingLabel;\n InputMore.labelWidth = (shrinkFloatingLabel && this.labelNode && this.labelNode.offsetWidth) || 0;\n }\n\n if (variant !== 'standard') {\n InputMore.startAdornment = chipComponents;\n } else {\n InputProps.disableUnderline = true;\n }\n\n const InputComponent = variantComponent[variant];\n\n return (\n <FormControl\n ref={rootRef}\n fullWidth={fullWidth}\n className={className}\n sx={{ ...this.styles.root, ...(margin === 'dense' ? this.styles.marginDense : {}) }}\n error={error}\n required={chips.length > 0 ? undefined : required}\n onClick={this.focus}\n disabled={disabled}\n variant={variant}\n component=\"div\"\n margin={margin}\n >\n {label && (\n <InputLabel\n htmlFor={id}\n sx={{\n '&.MuiInputLabel-root': this.styles.label,\n '&.MuiInputLabel-shrink': this.styles.labelShrink,\n }}\n shrink={!!shrinkFloatingLabel}\n focused={this.state.isFocused}\n variant={variant}\n ref={this.labelRef}\n required={required}\n component=\"label\"\n {...InputLabelProps}\n >\n {label}\n </InputLabel>\n )}\n <Box\n component=\"div\"\n id=\"input-chip-container\"\n sx={{\n ...this.styles[variant],\n ...this.styles.chipContainer,\n ...(this.state.isFocused ? this.styles.focused : undefined),\n ...(!disableUnderline && variant === 'standard' ? this.styles.underline : undefined),\n ...(disabled ? this.styles.disabled : undefined),\n ...(label ? this.styles.labeled : undefined),\n ...(error ? this.styles.error : undefined),\n }}\n >\n {variant === 'standard' && chipComponents}\n <InputComponent\n ref={this.input}\n className={`mui-variant-${this.styles[variant]} ${label ? 'mui-chip-with-label' : 'mui-chip-no-label'}`}\n sx={{\n '&.MuiInputBase-input': { ...this.styles.input, ...this.styles[variant] },\n '&.MuiInputBase-root': { ...this.styles.inputRoot },\n }}\n id={id}\n value={actualInputValue}\n onChange={this.handleUpdateInput}\n onKeyDown={this.handleKeyDown}\n // onKeyPress={this.handleKeyPress}\n onKeyUp={this.handleKeyUp}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n inputRef={this.setActualInputRef}\n disabled={disabled}\n fullWidth={fullWidthInput}\n placeholder={\n (!hasInput && (shrinkFloatingLabel || label === null || label === undefined)) ||\n alwaysShowPlaceholder\n ? placeholder\n : undefined\n }\n readOnly={readOnly}\n {...InputProps}\n {...InputMore}\n />\n </Box>\n {helperText && (\n <FormHelperText\n {...FormHelperTextProps}\n className={FormHelperTextProps?.className}\n style={this.styles.helperText}\n >\n {helperText}\n </FormHelperText>\n )}\n </FormControl>\n );\n }\n}\n"]}
|
|
@@ -8,12 +8,15 @@ interface ConfigAccordionState extends ConfigGenericState {
|
|
|
8
8
|
value: Record<string, any>[];
|
|
9
9
|
activeIndex: number;
|
|
10
10
|
iteration: number;
|
|
11
|
+
accordionErrors: Record<number, Record<string, string>>;
|
|
11
12
|
}
|
|
12
13
|
declare class ConfigAccordion extends ConfigGeneric<ConfigAccordionProps, ConfigAccordionState> {
|
|
13
14
|
private typingTimer;
|
|
14
15
|
constructor(props: ConfigAccordionProps);
|
|
15
16
|
componentDidMount(): void;
|
|
16
17
|
componentWillUnmount(): void;
|
|
18
|
+
onAccordionError: (accordionIndex: number) => (attr: string, error?: string) => void;
|
|
19
|
+
hasAccordionErrors: (accordionIndex: number) => boolean;
|
|
17
20
|
itemAccordion(data: Record<string, any>, idx: number): JSX.Element;
|
|
18
21
|
onDelete: (index: number) => () => void;
|
|
19
22
|
onClone: (index: number) => () => void;
|
|
@@ -21,6 +24,8 @@ declare class ConfigAccordion extends ConfigGeneric<ConfigAccordionProps, Config
|
|
|
21
24
|
onAdd: () => void;
|
|
22
25
|
onMoveUp(idx: number): void;
|
|
23
26
|
onMoveDown(idx: number): void;
|
|
27
|
+
onExport: () => void;
|
|
28
|
+
onImport: (replace: boolean) => void;
|
|
24
29
|
renderItem(): JSX.Element | null;
|
|
25
30
|
}
|
|
26
31
|
export default ConfigAccordion;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { FormHelperText, Accordion, AccordionSummary, AccordionDetails, IconButton, Paper, Toolbar, Tooltip, Typography, } from '@mui/material';
|
|
3
|
-
import { Add as AddIcon, Delete as DeleteIcon, ArrowUpward as UpIcon, ArrowDownward as DownIcon, ContentCopy as CopyContentIcon, ExpandMore as ExpandMoreIcon, } from '@mui/icons-material';
|
|
2
|
+
import { FormHelperText, Accordion, AccordionSummary, AccordionDetails, IconButton, Paper, Toolbar, Tooltip, Typography, Box, } from '@mui/material';
|
|
3
|
+
import { Add as AddIcon, Delete as DeleteIcon, ArrowUpward as UpIcon, ArrowDownward as DownIcon, ContentCopy as CopyContentIcon, ExpandMore as ExpandMoreIcon, Error as ErrorIcon, FileDownload as FileDownloadIcon, FileUpload as FileUploadIcon, AddCircle as AddCircleIcon, } from '@mui/icons-material';
|
|
4
4
|
import { I18n, Utils } from '@iobroker/adapter-react-v5';
|
|
5
5
|
import ConfigGeneric from './ConfigGeneric';
|
|
6
6
|
import ConfigPanel from './ConfigPanel';
|
|
@@ -38,6 +38,7 @@ class ConfigAccordion extends ConfigGeneric {
|
|
|
38
38
|
value,
|
|
39
39
|
activeIndex: -1,
|
|
40
40
|
iteration: 0,
|
|
41
|
+
accordionErrors: {},
|
|
41
42
|
});
|
|
42
43
|
}
|
|
43
44
|
componentWillUnmount() {
|
|
@@ -47,6 +48,29 @@ class ConfigAccordion extends ConfigGeneric {
|
|
|
47
48
|
}
|
|
48
49
|
super.componentWillUnmount();
|
|
49
50
|
}
|
|
51
|
+
onAccordionError = (accordionIndex) => (attr, error) => {
|
|
52
|
+
const newAccordionErrors = { ...this.state.accordionErrors };
|
|
53
|
+
if (!newAccordionErrors[accordionIndex]) {
|
|
54
|
+
newAccordionErrors[accordionIndex] = {};
|
|
55
|
+
}
|
|
56
|
+
if (!error) {
|
|
57
|
+
delete newAccordionErrors[accordionIndex][attr];
|
|
58
|
+
// Clean up empty accordion error objects
|
|
59
|
+
if (Object.keys(newAccordionErrors[accordionIndex]).length === 0) {
|
|
60
|
+
delete newAccordionErrors[accordionIndex];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
newAccordionErrors[accordionIndex][attr] = error;
|
|
65
|
+
}
|
|
66
|
+
this.setState({ accordionErrors: newAccordionErrors });
|
|
67
|
+
// Also forward to parent
|
|
68
|
+
this.props.onError(attr, error);
|
|
69
|
+
};
|
|
70
|
+
hasAccordionErrors = (accordionIndex) => {
|
|
71
|
+
return !!(this.state.accordionErrors[accordionIndex] &&
|
|
72
|
+
Object.keys(this.state.accordionErrors[accordionIndex]).length > 0);
|
|
73
|
+
};
|
|
50
74
|
itemAccordion(data, idx) {
|
|
51
75
|
const { value } = this.state;
|
|
52
76
|
const { schema } = this.props;
|
|
@@ -62,7 +86,7 @@ class ConfigAccordion extends ConfigGeneric {
|
|
|
62
86
|
const newObj = JSON.parse(JSON.stringify(value));
|
|
63
87
|
newObj[idx][attr] = valueChange;
|
|
64
88
|
this.setState({ value: newObj }, () => this.onChangeWrapper(newObj));
|
|
65
|
-
}, onError:
|
|
89
|
+
}, onError: this.onAccordionError(idx), table: this.props.table }));
|
|
66
90
|
}
|
|
67
91
|
onDelete = (index) => () => {
|
|
68
92
|
const newValue = JSON.parse(JSON.stringify(this.state.value));
|
|
@@ -150,6 +174,50 @@ class ConfigAccordion extends ConfigGeneric {
|
|
|
150
174
|
const newIndex = this.state.activeIndex + 1;
|
|
151
175
|
this.setState({ value: newValue, activeIndex: newIndex, iteration: this.state.iteration + 10000 }, () => this.onChangeWrapper(newValue));
|
|
152
176
|
}
|
|
177
|
+
onExport = () => {
|
|
178
|
+
const { value } = this.state;
|
|
179
|
+
const dataStr = JSON.stringify(value, null, 2);
|
|
180
|
+
const dataUri = `data:application/json;charset=utf-8,${encodeURIComponent(dataStr)}`;
|
|
181
|
+
const exportFileDefaultName = `config_section_${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.json`;
|
|
182
|
+
const linkElement = document.createElement('a');
|
|
183
|
+
linkElement.setAttribute('href', dataUri);
|
|
184
|
+
linkElement.setAttribute('download', exportFileDefaultName);
|
|
185
|
+
linkElement.click();
|
|
186
|
+
};
|
|
187
|
+
onImport = (replace) => {
|
|
188
|
+
const input = document.createElement('input');
|
|
189
|
+
input.type = 'file';
|
|
190
|
+
input.accept = '.json';
|
|
191
|
+
input.onchange = (event) => {
|
|
192
|
+
const file = event.target.files?.[0];
|
|
193
|
+
if (!file) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const reader = new FileReader();
|
|
197
|
+
reader.onload = e => {
|
|
198
|
+
try {
|
|
199
|
+
const jsonData = JSON.parse(e.target?.result);
|
|
200
|
+
if (!Array.isArray(jsonData)) {
|
|
201
|
+
alert(I18n.t('ra_Invalid JSON format. Expected an array.'));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
let newValue;
|
|
205
|
+
if (replace) {
|
|
206
|
+
newValue = jsonData;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
newValue = [...this.state.value, ...jsonData];
|
|
210
|
+
}
|
|
211
|
+
this.setState({ value: newValue, activeIndex: -1 }, () => this.onChangeWrapper(newValue));
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
alert(I18n.t('ra_Invalid JSON file.'));
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
reader.readAsText(file);
|
|
218
|
+
};
|
|
219
|
+
input.click();
|
|
220
|
+
};
|
|
153
221
|
renderItem( /* error, disabled, defaultValue */) {
|
|
154
222
|
const { schema } = this.props;
|
|
155
223
|
const { value } = this.state;
|
|
@@ -159,11 +227,23 @@ class ConfigAccordion extends ConfigGeneric {
|
|
|
159
227
|
return (React.createElement(Paper, null,
|
|
160
228
|
schema.label || !schema.noDelete ? (React.createElement(Toolbar, { variant: "dense" },
|
|
161
229
|
schema.label ? (React.createElement(Typography, { variant: "h6", id: "tableTitle", component: "div" }, this.getText(schema.label))) : null,
|
|
162
|
-
!schema.noDelete ? (React.createElement(
|
|
163
|
-
React.createElement(
|
|
230
|
+
!schema.noDelete ? (React.createElement(React.Fragment, null,
|
|
231
|
+
React.createElement(Tooltip, { title: I18n.t('ra_Export configuration section') },
|
|
232
|
+
React.createElement(IconButton, { size: "small", color: "primary", onClick: this.onExport },
|
|
233
|
+
React.createElement(FileDownloadIcon, null))),
|
|
234
|
+
React.createElement(Tooltip, { title: I18n.t('ra_Import and replace configuration section') },
|
|
235
|
+
React.createElement(IconButton, { size: "small", color: "primary", onClick: () => this.onImport(true) },
|
|
236
|
+
React.createElement(FileUploadIcon, null))),
|
|
237
|
+
React.createElement(Tooltip, { title: I18n.t('ra_Import and add configuration section') },
|
|
238
|
+
React.createElement(IconButton, { size: "small", color: "primary", onClick: () => this.onImport(false) },
|
|
239
|
+
React.createElement(AddCircleIcon, null))),
|
|
240
|
+
React.createElement(IconButton, { size: "small", color: "primary", onClick: this.onAdd },
|
|
241
|
+
React.createElement(AddIcon, null)))) : null)) : null,
|
|
164
242
|
value.map((idx, i) => (React.createElement(Accordion, { key: `${idx}_${i}`, expanded: this.state.activeIndex === i, onChange: (_e, expanded) => this.setState({ activeIndex: expanded ? i : -1 }) },
|
|
165
243
|
React.createElement(AccordionSummary, { expandIcon: React.createElement(ExpandMoreIcon, null), sx: Utils.getStyle(this.props.oContext.theme, styles.fullWidth, styles.accordionSummary) },
|
|
166
|
-
React.createElement(
|
|
244
|
+
React.createElement(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1, width: '100%' } },
|
|
245
|
+
React.createElement(Typography, { style: styles.accordionTitle }, idx[schema.titleAttr]),
|
|
246
|
+
this.hasAccordionErrors(i) && React.createElement(ErrorIcon, { sx: { fontSize: 20, color: 'error.main' } }))),
|
|
167
247
|
React.createElement(AccordionDetails, { style: {
|
|
168
248
|
...schema.style,
|
|
169
249
|
...(this.props.oContext.themeType ? schema.darkStyle : undefined),
|