@adcops/autocore-react 3.3.9 → 3.3.10
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/LICENSE +58 -58
- package/additional-docs/AutoCoreTagContext.md +441 -441
- package/additional-docs/ButtonApiSpecs.md +48 -48
- package/additional-docs/GlobalEventEmitter.md +243 -243
- package/additional-docs/general_recommendations.md +22 -22
- package/additional-docs/react_performance_notes.md +94 -94
- package/dist/assets/svg/blockly_logo.svg +82 -82
- package/dist/assets/svg/distance.svg +40 -40
- package/dist/assets/svg/python_logo.svg +246 -246
- package/dist/assets/svg/rotation_ccw.svg +50 -50
- package/dist/assets/svg/rotation_ccw_a.svg +57 -57
- package/dist/assets/svg/rotation_ccw_b.svg +57 -57
- package/dist/assets/svg/rotation_ccw_c.svg +57 -57
- package/dist/assets/svg/rotation_cw.svg +49 -49
- package/dist/assets/svg/rotation_cw_a.svg +30 -30
- package/dist/assets/svg/rotation_cw_b.svg +30 -30
- package/dist/assets/svg/rotation_cw_c.svg +30 -30
- package/dist/assets/svg/speed.svg +39 -39
- package/dist/components/BlocklyEditor.css +93 -93
- package/dist/components/JogPanel.css +41 -41
- package/dist/components/ProgressBarWithValue.css +27 -27
- package/dist/components/ValueIndicator.css +31 -31
- package/dist/components/osk.css +123 -123
- package/dist/core/AutoCoreTagContext.d.ts.map +1 -1
- package/dist/core/AutoCoreTagContext.js +1 -1
- package/dist/hub/HubBase.d.ts +3 -3
- package/dist/hub/HubBase.d.ts.map +1 -1
- package/dist/hub/HubBase.js +1 -1
- package/package.json +104 -104
- package/readme.md +343 -343
- package/src/assets/BlocklyLogo.tsx +27 -27
- package/src/assets/Distance.tsx +18 -18
- package/src/assets/JogLong.tsx +13 -13
- package/src/assets/JogMedium.tsx +13 -13
- package/src/assets/JogShort.tsx +13 -13
- package/src/assets/PythonLogo.tsx +83 -83
- package/src/assets/Rotation3D.tsx +13 -13
- package/src/assets/RotationCcw.tsx +33 -33
- package/src/assets/RotationCcwA.tsx +45 -45
- package/src/assets/RotationCcwB.tsx +45 -45
- package/src/assets/RotationCcwC.tsx +45 -45
- package/src/assets/RotationCw.tsx +31 -31
- package/src/assets/RotationCwA.tsx +42 -42
- package/src/assets/RotationCwB.tsx +42 -42
- package/src/assets/RotationCwC.tsx +42 -42
- package/src/assets/Run.tsx +13 -13
- package/src/assets/Speed.tsx +18 -18
- package/src/assets/SpeedFast.tsx +13 -13
- package/src/assets/SpeedMedium.tsx +13 -13
- package/src/assets/SpeedNone.tsx +13 -13
- package/src/assets/SpeedSlow.tsx +13 -13
- package/src/assets/Walk.tsx +13 -13
- package/src/assets/index.ts +22 -22
- package/src/assets/svg/blockly_logo.svg +82 -82
- package/src/assets/svg/distance.svg +40 -40
- package/src/assets/svg/python_logo.svg +246 -246
- package/src/assets/svg/rotation_ccw.svg +50 -50
- package/src/assets/svg/rotation_ccw_a.svg +57 -57
- package/src/assets/svg/rotation_ccw_b.svg +57 -57
- package/src/assets/svg/rotation_ccw_c.svg +57 -57
- package/src/assets/svg/rotation_cw.svg +49 -49
- package/src/assets/svg/rotation_cw_a.svg +30 -30
- package/src/assets/svg/rotation_cw_b.svg +30 -30
- package/src/assets/svg/rotation_cw_c.svg +30 -30
- package/src/assets/svg/speed.svg +39 -39
- package/src/components/AutoCoreDevPanel.tsx +414 -414
- package/src/components/BlocklyEditor.css +93 -93
- package/src/components/BlocklyEditor.tsx +609 -609
- package/src/components/CodeEditor.tsx +155 -155
- package/src/components/FileList.tsx +390 -390
- package/src/components/FileSelect.tsx +128 -128
- package/src/components/FitText.tsx +35 -35
- package/src/components/Indicator.tsx +188 -188
- package/src/components/IndicatorButton.tsx +214 -214
- package/src/components/IndicatorRect.tsx +172 -172
- package/src/components/JogPanel.css +41 -41
- package/src/components/JogPanel.tsx +461 -461
- package/src/components/Lamp.tsx +243 -243
- package/src/components/Osk.tsx +192 -192
- package/src/components/OskDialog.tsx +164 -164
- package/src/components/ProgressBarWithValue.css +27 -27
- package/src/components/ProgressBarWithValue.tsx +48 -48
- package/src/components/TextInput.tsx +195 -195
- package/src/components/ToggleGroup.tsx +322 -322
- package/src/components/ValueDisplay.tsx +236 -236
- package/src/components/ValueIndicator.css +31 -31
- package/src/components/ValueIndicator.tsx +135 -135
- package/src/components/ValueInput.tsx +368 -368
- package/src/components/osk.css +123 -123
- package/src/core/ActionMode.ts +19 -19
- package/src/core/AutoCoreTagContext.tsx +625 -614
- package/src/core/AutoCoreTagTypes.ts +334 -334
- package/src/core/CoreStreamTypes.ts +512 -512
- package/src/core/EventEmitterContext.tsx +434 -434
- package/src/core/IndicatorButtonState.ts +34 -34
- package/src/core/IndicatorColor.ts +35 -35
- package/src/core/MaskPatterns.ts +87 -87
- package/src/core/NumerableTypes.ts +80 -80
- package/src/core/PositionContext.ts +59 -59
- package/src/core/UniqueId.ts +41 -41
- package/src/core/ValueSimulator.ts +166 -166
- package/src/core/hoc.tsx +65 -65
- package/src/hooks/adsHooks.tsx +287 -287
- package/src/hooks/commandHooks.tsx +300 -300
- package/src/hooks/index.ts +12 -12
- package/src/hooks/useAutoCoreTag.ts +103 -103
- package/src/hooks/useScaledValue.tsx +99 -99
- package/src/hub/CommandMessage.ts +89 -89
- package/src/hub/DebugPanel.ts +307 -307
- package/src/hub/HubBase.ts +249 -236
- package/src/hub/HubSimulate.ts +124 -124
- package/src/hub/HubTauri.ts +140 -140
- package/src/hub/HubWebSocket.ts +250 -250
- package/src/hub/debug.ts +211 -211
- package/src/hub/index.ts +81 -81
- package/src/themes/adc-dark/_extensions.scss +166 -166
- package/src/themes/adc-dark/_variables.scss +913 -913
- package/src/themes/adc-dark/blue/_fonts.scss +23 -23
- package/src/themes/adc-dark/blue/adc_theme.scss +31 -31
- package/src/themes/adc-dark/blue/theme.scss +14 -14
- package/src/themes/theme-base/_colors.scss +17 -17
- package/src/themes/theme-base/_common.scss +74 -74
- package/src/themes/theme-base/_components.scss +111 -111
- package/src/themes/theme-base/_mixins.scss +243 -243
- package/src/themes/theme-base/components/button/_button.scss +644 -644
- package/src/themes/theme-base/components/button/_speeddial.scss +91 -91
- package/src/themes/theme-base/components/button/_splitbutton.scss +358 -358
- package/src/themes/theme-base/components/data/_carousel.scss +39 -39
- package/src/themes/theme-base/components/data/_datascroller.scss +47 -47
- package/src/themes/theme-base/components/data/_datatable.scss +388 -388
- package/src/themes/theme-base/components/data/_dataview.scss +47 -47
- package/src/themes/theme-base/components/data/_filter.scss +137 -137
- package/src/themes/theme-base/components/data/_orderlist.scss +86 -86
- package/src/themes/theme-base/components/data/_organizationchart.scss +50 -50
- package/src/themes/theme-base/components/data/_paginator.scss +91 -91
- package/src/themes/theme-base/components/data/_picklist.scss +73 -73
- package/src/themes/theme-base/components/data/_timeline.scss +38 -38
- package/src/themes/theme-base/components/data/_tree.scss +184 -184
- package/src/themes/theme-base/components/data/_treetable.scss +431 -431
- package/src/themes/theme-base/components/file/_fileupload.scss +41 -41
- package/src/themes/theme-base/components/input/_autocomplete.scss +94 -94
- package/src/themes/theme-base/components/input/_calendar.scss +251 -251
- package/src/themes/theme-base/components/input/_cascadeselect.scss +107 -107
- package/src/themes/theme-base/components/input/_checkbox.scss +181 -181
- package/src/themes/theme-base/components/input/_chips.scss +102 -102
- package/src/themes/theme-base/components/input/_colorpicker.scss +17 -17
- package/src/themes/theme-base/components/input/_dropdown.scss +252 -252
- package/src/themes/theme-base/components/input/_editor.scss +122 -122
- package/src/themes/theme-base/components/input/_iconfield.scss +9 -9
- package/src/themes/theme-base/components/input/_inputgroup.scss +74 -74
- package/src/themes/theme-base/components/input/_inputicon.scss +14 -14
- package/src/themes/theme-base/components/input/_inputnumber.scss +4 -4
- package/src/themes/theme-base/components/input/_inputotp.scss +10 -10
- package/src/themes/theme-base/components/input/_inputswitch.scss +99 -99
- package/src/themes/theme-base/components/input/_inputtext.scss +101 -101
- package/src/themes/theme-base/components/input/_listbox.scss +138 -138
- package/src/themes/theme-base/components/input/_mention.scss +30 -30
- package/src/themes/theme-base/components/input/_multiselect.scss +278 -278
- package/src/themes/theme-base/components/input/_password.scss +32 -32
- package/src/themes/theme-base/components/input/_radiobutton.scss +169 -169
- package/src/themes/theme-base/components/input/_rating.scss +80 -80
- package/src/themes/theme-base/components/input/_selectbutton.scss +49 -49
- package/src/themes/theme-base/components/input/_slider.scss +49 -49
- package/src/themes/theme-base/components/input/_togglebutton.scss +99 -99
- package/src/themes/theme-base/components/input/_treeselect.scss +151 -151
- package/src/themes/theme-base/components/input/_tristatecheckbox.scss +46 -46
- package/src/themes/theme-base/components/menu/_breadcrumb.scss +42 -42
- package/src/themes/theme-base/components/menu/_contextmenu.scss +39 -39
- package/src/themes/theme-base/components/menu/_dock.scss +109 -109
- package/src/themes/theme-base/components/menu/_megamenu.scss +141 -141
- package/src/themes/theme-base/components/menu/_menu.scss +33 -33
- package/src/themes/theme-base/components/menu/_menubar.scss +216 -216
- package/src/themes/theme-base/components/menu/_panelmenu.scss +153 -153
- package/src/themes/theme-base/components/menu/_slidemenu.scss +60 -60
- package/src/themes/theme-base/components/menu/_steps.scss +57 -57
- package/src/themes/theme-base/components/menu/_tabmenu.scss +50 -50
- package/src/themes/theme-base/components/menu/_tieredmenu.scss +43 -43
- package/src/themes/theme-base/components/messages/_inlinemessage.scss +69 -69
- package/src/themes/theme-base/components/messages/_message.scss +107 -107
- package/src/themes/theme-base/components/messages/_toast.scss +100 -100
- package/src/themes/theme-base/components/misc/_avatar.scss +33 -33
- package/src/themes/theme-base/components/misc/_badge.scss +76 -76
- package/src/themes/theme-base/components/misc/_chip.scss +38 -38
- package/src/themes/theme-base/components/misc/_inplace.scss +17 -17
- package/src/themes/theme-base/components/misc/_metergroup.scss +80 -80
- package/src/themes/theme-base/components/misc/_progressbar.scss +17 -17
- package/src/themes/theme-base/components/misc/_scrolltop.scss +24 -24
- package/src/themes/theme-base/components/misc/_skeleton.scss +7 -7
- package/src/themes/theme-base/components/misc/_tag.scss +39 -39
- package/src/themes/theme-base/components/misc/_terminal.scss +12 -12
- package/src/themes/theme-base/components/multimedia/_galleria.scss +153 -153
- package/src/themes/theme-base/components/multimedia/_image.scss +53 -53
- package/src/themes/theme-base/components/overlay/_confirmpopup.scss +72 -72
- package/src/themes/theme-base/components/overlay/_dialog.scss +78 -78
- package/src/themes/theme-base/components/overlay/_overlaypanel.scss +64 -64
- package/src/themes/theme-base/components/overlay/_sidebar.scss +23 -23
- package/src/themes/theme-base/components/overlay/_tooltip.scss +33 -33
- package/src/themes/theme-base/components/panel/_accordion.scss +118 -118
- package/src/themes/theme-base/components/panel/_card.scss +30 -30
- package/src/themes/theme-base/components/panel/_divider.scss +30 -30
- package/src/themes/theme-base/components/panel/_fieldset.scss +47 -47
- package/src/themes/theme-base/components/panel/_panel.scss +47 -47
- package/src/themes/theme-base/components/panel/_scrollpanel.scss +10 -10
- package/src/themes/theme-base/components/panel/_splitter.scss +23 -23
- package/src/themes/theme-base/components/panel/_stepper.scss +136 -136
- package/src/themes/theme-base/components/panel/_tabview.scss +147 -147
- package/src/themes/theme-base/components/panel/_toolbar.scss +11 -11
- package/terser.config.cjs +25 -25
- package/todo.md +18 -18
- package/tools/build-themes.cjs +65 -65
- package/tools/copy-distribution-files.cjs +77 -77
- package/tools/minify.cjs +55 -55
- package/tsconfig.json +48 -48
- package/typedoc.json +12 -12
- package/.claude/settings.local.json +0 -7
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2025 Automated Design Corp.. All Rights Reserved.
|
|
3
|
-
* Created Date: 2025-01-20 15:09:55
|
|
4
|
-
* -----
|
|
5
|
-
* Last Modified: 2025-09-05 14:51:58
|
|
6
|
-
* -----
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { Component } from 'react';
|
|
11
|
-
import { EventEmitterContext, type EventEmitterContextType } from '../core/EventEmitterContext';
|
|
12
|
-
import { IndicatorColor } from "../core/IndicatorColor";
|
|
13
|
-
export { IndicatorColor };
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Common properties for an indicator rectangle component.
|
|
17
|
-
* This component is used for displaying states and is not interactive.
|
|
18
|
-
* It is commonly used in industrial HMIs for visual indication purposes.
|
|
19
|
-
*
|
|
20
|
-
* These properties support displaying values of boolean, number, and string states.
|
|
21
|
-
*
|
|
22
|
-
* Available boolean states: **on**, **off**, and **not available**:
|
|
23
|
-
*
|
|
24
|
-
* * `true` is treated as **on**
|
|
25
|
-
* * `false` is treated as **off**
|
|
26
|
-
* * `undefined` is treated as **not available**
|
|
27
|
-
*
|
|
28
|
-
* Numeric values can be used. When there are 2 or fewer possible states,
|
|
29
|
-
* 0 will be considered false (OFF), anything else will be considered true (ON).
|
|
30
|
-
* Undefined will be treated as "not available."
|
|
31
|
-
*
|
|
32
|
-
* When the indicator contains more than 2 states, the number will be matched
|
|
33
|
-
* to the available state, in order. More than two states requires usage of the
|
|
34
|
-
* `options` field and declaring more than two states there.
|
|
35
|
-
*
|
|
36
|
-
* If a string state is used, it will be matched exactly to the corresponding
|
|
37
|
-
* label in the `options` field.
|
|
38
|
-
*/
|
|
39
|
-
export interface IndicatorRectProps {
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Topic name to monitor for state indication.
|
|
43
|
-
*/
|
|
44
|
-
topic?: string;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* State to be displayed.
|
|
48
|
-
*/
|
|
49
|
-
value?: boolean | number | string;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Color for the rectangle when the state is TRUE.
|
|
53
|
-
*/
|
|
54
|
-
onColor?: IndicatorColor;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Color for the rectangle when the state is FALSE.
|
|
58
|
-
*/
|
|
59
|
-
offColor?: IndicatorColor;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* An array of string labels to display as the available options.
|
|
63
|
-
*
|
|
64
|
-
* For items with 2 states or less:
|
|
65
|
-
* Index 0 is the label when value is OFF.
|
|
66
|
-
* Index 1 is the label when value is ON.
|
|
67
|
-
*
|
|
68
|
-
* If only one value is given (Index 0), then that value is used for all states.
|
|
69
|
-
*/
|
|
70
|
-
options?: string[];
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Additional CSS class name to apply to the rectangle.
|
|
74
|
-
*/
|
|
75
|
-
className?: string;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Additional inline styles to apply to the rectangle.
|
|
79
|
-
*/
|
|
80
|
-
style?: React.CSSProperties;
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
interface IndicatorRectState {
|
|
85
|
-
currentValue?: boolean | number | string;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export class IndicatorRect extends Component<IndicatorRectProps, IndicatorRectState> {
|
|
89
|
-
static contextType = EventEmitterContext;
|
|
90
|
-
|
|
91
|
-
// Define default props
|
|
92
|
-
static defaultProps = {
|
|
93
|
-
onColor: IndicatorColor.IndicatorGreen,
|
|
94
|
-
offColor: "gray", // Default offColor
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
constructor(props: IndicatorRectProps) {
|
|
98
|
-
super(props);
|
|
99
|
-
this.state = {
|
|
100
|
-
currentValue: undefined,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
componentDidMount() {
|
|
105
|
-
this.setupSubscriptions();
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
componentWillUnmount() {
|
|
109
|
-
// Unsubscribe logic if needed
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Sets up subscriptions based on the provided topic.
|
|
114
|
-
*/
|
|
115
|
-
private setupSubscriptions() {
|
|
116
|
-
const { topic } = this.props;
|
|
117
|
-
const { subscribe } = this.context as EventEmitterContextType;
|
|
118
|
-
|
|
119
|
-
if (topic) {
|
|
120
|
-
subscribe(topic, this.handleTopicUpdate);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Handles updates for the main topic.
|
|
126
|
-
*/
|
|
127
|
-
private handleTopicUpdate = (value: boolean | number | string) => {
|
|
128
|
-
this.setState({ currentValue: value });
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
render() {
|
|
132
|
-
const { currentValue } = this.state;
|
|
133
|
-
const { className, style, value, onColor, offColor, options } = this.props;
|
|
134
|
-
|
|
135
|
-
// Load the value from the proper source
|
|
136
|
-
let displayValue = currentValue;
|
|
137
|
-
if (value !== undefined) {
|
|
138
|
-
displayValue = value;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Determine the label and color based on the current state
|
|
142
|
-
let rectLabel = undefined;
|
|
143
|
-
if (options !== undefined && options.length > 0) {
|
|
144
|
-
rectLabel = displayValue ? options[1] : options[0];
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
let color = displayValue ? onColor : offColor;
|
|
148
|
-
if (displayValue === undefined) {
|
|
149
|
-
color = IndicatorColor.IndicatorInvalid;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
return (
|
|
153
|
-
<div
|
|
154
|
-
className={`indicator-rect ${className || ""}`}
|
|
155
|
-
style={{
|
|
156
|
-
backgroundColor: color,
|
|
157
|
-
color: "white",
|
|
158
|
-
width: "100px",
|
|
159
|
-
height: "100px",
|
|
160
|
-
display: "flex",
|
|
161
|
-
alignItems: "center",
|
|
162
|
-
justifyContent: "center",
|
|
163
|
-
...style,
|
|
164
|
-
}}
|
|
165
|
-
>
|
|
166
|
-
{rectLabel}
|
|
167
|
-
</div>
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export default IndicatorRect;
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2025 Automated Design Corp.. All Rights Reserved.
|
|
3
|
+
* Created Date: 2025-01-20 15:09:55
|
|
4
|
+
* -----
|
|
5
|
+
* Last Modified: 2025-09-05 14:51:58
|
|
6
|
+
* -----
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Component } from 'react';
|
|
11
|
+
import { EventEmitterContext, type EventEmitterContextType } from '../core/EventEmitterContext';
|
|
12
|
+
import { IndicatorColor } from "../core/IndicatorColor";
|
|
13
|
+
export { IndicatorColor };
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Common properties for an indicator rectangle component.
|
|
17
|
+
* This component is used for displaying states and is not interactive.
|
|
18
|
+
* It is commonly used in industrial HMIs for visual indication purposes.
|
|
19
|
+
*
|
|
20
|
+
* These properties support displaying values of boolean, number, and string states.
|
|
21
|
+
*
|
|
22
|
+
* Available boolean states: **on**, **off**, and **not available**:
|
|
23
|
+
*
|
|
24
|
+
* * `true` is treated as **on**
|
|
25
|
+
* * `false` is treated as **off**
|
|
26
|
+
* * `undefined` is treated as **not available**
|
|
27
|
+
*
|
|
28
|
+
* Numeric values can be used. When there are 2 or fewer possible states,
|
|
29
|
+
* 0 will be considered false (OFF), anything else will be considered true (ON).
|
|
30
|
+
* Undefined will be treated as "not available."
|
|
31
|
+
*
|
|
32
|
+
* When the indicator contains more than 2 states, the number will be matched
|
|
33
|
+
* to the available state, in order. More than two states requires usage of the
|
|
34
|
+
* `options` field and declaring more than two states there.
|
|
35
|
+
*
|
|
36
|
+
* If a string state is used, it will be matched exactly to the corresponding
|
|
37
|
+
* label in the `options` field.
|
|
38
|
+
*/
|
|
39
|
+
export interface IndicatorRectProps {
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Topic name to monitor for state indication.
|
|
43
|
+
*/
|
|
44
|
+
topic?: string;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* State to be displayed.
|
|
48
|
+
*/
|
|
49
|
+
value?: boolean | number | string;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Color for the rectangle when the state is TRUE.
|
|
53
|
+
*/
|
|
54
|
+
onColor?: IndicatorColor;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Color for the rectangle when the state is FALSE.
|
|
58
|
+
*/
|
|
59
|
+
offColor?: IndicatorColor;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* An array of string labels to display as the available options.
|
|
63
|
+
*
|
|
64
|
+
* For items with 2 states or less:
|
|
65
|
+
* Index 0 is the label when value is OFF.
|
|
66
|
+
* Index 1 is the label when value is ON.
|
|
67
|
+
*
|
|
68
|
+
* If only one value is given (Index 0), then that value is used for all states.
|
|
69
|
+
*/
|
|
70
|
+
options?: string[];
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Additional CSS class name to apply to the rectangle.
|
|
74
|
+
*/
|
|
75
|
+
className?: string;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Additional inline styles to apply to the rectangle.
|
|
79
|
+
*/
|
|
80
|
+
style?: React.CSSProperties;
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
interface IndicatorRectState {
|
|
85
|
+
currentValue?: boolean | number | string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export class IndicatorRect extends Component<IndicatorRectProps, IndicatorRectState> {
|
|
89
|
+
static contextType = EventEmitterContext;
|
|
90
|
+
|
|
91
|
+
// Define default props
|
|
92
|
+
static defaultProps = {
|
|
93
|
+
onColor: IndicatorColor.IndicatorGreen,
|
|
94
|
+
offColor: "gray", // Default offColor
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
constructor(props: IndicatorRectProps) {
|
|
98
|
+
super(props);
|
|
99
|
+
this.state = {
|
|
100
|
+
currentValue: undefined,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
componentDidMount() {
|
|
105
|
+
this.setupSubscriptions();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
componentWillUnmount() {
|
|
109
|
+
// Unsubscribe logic if needed
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Sets up subscriptions based on the provided topic.
|
|
114
|
+
*/
|
|
115
|
+
private setupSubscriptions() {
|
|
116
|
+
const { topic } = this.props;
|
|
117
|
+
const { subscribe } = this.context as EventEmitterContextType;
|
|
118
|
+
|
|
119
|
+
if (topic) {
|
|
120
|
+
subscribe(topic, this.handleTopicUpdate);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Handles updates for the main topic.
|
|
126
|
+
*/
|
|
127
|
+
private handleTopicUpdate = (value: boolean | number | string) => {
|
|
128
|
+
this.setState({ currentValue: value });
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
render() {
|
|
132
|
+
const { currentValue } = this.state;
|
|
133
|
+
const { className, style, value, onColor, offColor, options } = this.props;
|
|
134
|
+
|
|
135
|
+
// Load the value from the proper source
|
|
136
|
+
let displayValue = currentValue;
|
|
137
|
+
if (value !== undefined) {
|
|
138
|
+
displayValue = value;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Determine the label and color based on the current state
|
|
142
|
+
let rectLabel = undefined;
|
|
143
|
+
if (options !== undefined && options.length > 0) {
|
|
144
|
+
rectLabel = displayValue ? options[1] : options[0];
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
let color = displayValue ? onColor : offColor;
|
|
148
|
+
if (displayValue === undefined) {
|
|
149
|
+
color = IndicatorColor.IndicatorInvalid;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return (
|
|
153
|
+
<div
|
|
154
|
+
className={`indicator-rect ${className || ""}`}
|
|
155
|
+
style={{
|
|
156
|
+
backgroundColor: color,
|
|
157
|
+
color: "white",
|
|
158
|
+
width: "100px",
|
|
159
|
+
height: "100px",
|
|
160
|
+
display: "flex",
|
|
161
|
+
alignItems: "center",
|
|
162
|
+
justifyContent: "center",
|
|
163
|
+
...style,
|
|
164
|
+
}}
|
|
165
|
+
>
|
|
166
|
+
{rectLabel}
|
|
167
|
+
</div>
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export default IndicatorRect;
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2024 Automated Design Corp. All Rights Reserved.
|
|
3
|
-
* Created Date: 2024-01-16 13:17:33
|
|
4
|
-
* -----
|
|
5
|
-
* Last Modified: 2024-03-19 10:37:26
|
|
6
|
-
* -----
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
.jogpanel-container {
|
|
11
|
-
margin: 2mm;
|
|
12
|
-
display: flex;
|
|
13
|
-
flex-direction: column; /* Stack children vertically */
|
|
14
|
-
align-items: center; /* Center children horizontally within the container */
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.grid-container {
|
|
18
|
-
display: flex;
|
|
19
|
-
flex-direction: column;
|
|
20
|
-
gap: 10px; /* Adjust the gap between rows */
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.grid-row {
|
|
25
|
-
display: flex;
|
|
26
|
-
justify-content: space-between;
|
|
27
|
-
gap: 10px; /* Adjust the gap between buttons */
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.button-item {
|
|
31
|
-
flex: 1; /* Make buttons expand to fill the row */
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.distance-selector {
|
|
35
|
-
margin-top: 2mm; /* Gap between buttons and distance selector */
|
|
36
|
-
margin-left: auto;
|
|
37
|
-
margin-right: auto;
|
|
38
|
-
width: -moz-fit-content;
|
|
39
|
-
width: fit-content;
|
|
40
|
-
}
|
|
41
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2024 Automated Design Corp. All Rights Reserved.
|
|
3
|
+
* Created Date: 2024-01-16 13:17:33
|
|
4
|
+
* -----
|
|
5
|
+
* Last Modified: 2024-03-19 10:37:26
|
|
6
|
+
* -----
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.jogpanel-container {
|
|
11
|
+
margin: 2mm;
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column; /* Stack children vertically */
|
|
14
|
+
align-items: center; /* Center children horizontally within the container */
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.grid-container {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
gap: 10px; /* Adjust the gap between rows */
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.grid-row {
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-content: space-between;
|
|
27
|
+
gap: 10px; /* Adjust the gap between buttons */
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.button-item {
|
|
31
|
+
flex: 1; /* Make buttons expand to fill the row */
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.distance-selector {
|
|
35
|
+
margin-top: 2mm; /* Gap between buttons and distance selector */
|
|
36
|
+
margin-left: auto;
|
|
37
|
+
margin-right: auto;
|
|
38
|
+
width: -moz-fit-content;
|
|
39
|
+
width: fit-content;
|
|
40
|
+
}
|
|
41
|
+
|