@adcops/autocore-react 3.0.3 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adcops/autocore-react",
3
- "version": "3.0.3",
3
+ "version": "3.0.5",
4
4
  "description": "A React component library for industrial user interfaces.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -11,7 +11,7 @@
11
11
  "generate-docs": "typedoc",
12
12
  "build": "npm run clean && tsc && node ./tools/copy-distribution-files.cjs && npm run minify",
13
13
  "prestart": "tsc",
14
- "publish-package": "npm run build && npm version patch && npm run generate-docs && npm publish",
14
+ "publish-package": "npm run build && npm version patch && npm publish",
15
15
  "release:patch": "npm version patch && npm publish",
16
16
  "release:minor": "npm version minor && npm publish",
17
17
  "release:major": "npm version major && npm publish",
@@ -2,7 +2,7 @@
2
2
  * Copyright (C) 2024 Automated Design Corp. All Rights Reserved.
3
3
  * Created Date: 2024-01-16 13:17:23
4
4
  * -----
5
- * Last Modified: 2024-03-19 21:20:59
5
+ * Last Modified: 2024-03-20 13:16:29
6
6
  * -----
7
7
  *
8
8
  */
@@ -122,15 +122,18 @@ interface JogPanelState {
122
122
 
123
123
 
124
124
  /**
125
- * Default X, Y, Z configuration.
125
+ * A default jog button configuration for linear 3D motion.
126
126
  */
127
- export const kDefaultButtonDefinitions : (JogPanelButtonDefinition | undefined)[][] = [
127
+ export const DefaultLinearJogButtons : (JogPanelButtonDefinition | undefined)[][] = [
128
128
  [{ icon: "pi pi-arrow-up-left", action: JogPanelAction.yPositive, alt: "Y Positive" }, { icon: "pi pi-arrow-up", action: JogPanelAction.zPositive, alt: "Z Positive" }, undefined],
129
129
  [{ icon: "pi pi-arrow-left", action: JogPanelAction.xNegative, alt: "X Negative" }, undefined, { icon: "pi pi-arrow-right", action: JogPanelAction.xPositive, alt: "X Positive" }],
130
130
  [undefined, { icon: "pi pi-arrow-down", action: JogPanelAction.zNegative, alt: "Z Negative" }, { icon: "pi pi-arrow-down-right", action: JogPanelAction.yNegative, alt: "Y Negative" }],
131
131
  ];
132
132
 
133
- export const kRotationButtonDefinitions : (JogPanelButtonDefinition | undefined)[][] = [
133
+ /**
134
+ * A default jog button configuration for rotational 3D motion.
135
+ */
136
+ export const DefaultRotationJogButtons : (JogPanelButtonDefinition | undefined)[][] = [
134
137
  [{ icon: "pi", action: JogPanelAction.bPositive, alt: "Rot B Positive" }, { icon: "pi", action: JogPanelAction.cPositive, alt: "Rot C Positive" }, undefined],
135
138
  [{ icon: "pi", action: JogPanelAction.aNegative, alt: "Rot A Negative" }, undefined, { icon: "pi", action: JogPanelAction.aPositive, alt: "Rot A Positive" }],
136
139
  [undefined, { icon: "pi", action: JogPanelAction.cNegative, alt: "Rot C Negative" }, { icon: "pi ", action: JogPanelAction.bNegative, alt: "Rot B Negative" }],
@@ -165,7 +168,7 @@ export class JogPanel extends React.Component<JogPanelProps, JogPanelState> {
165
168
  static defaultProps : JogPanelProps = {
166
169
  onClicked: undefined,
167
170
  onJogDistanceChanged: undefined,
168
- buttonDefinitions: kDefaultButtonDefinitions,
171
+ buttonDefinitions: DefaultLinearJogButtons,
169
172
  defaultJogDistance : JogDistanceAction.Short,
170
173
  defaultJogSpeed : JogSpeedAction.Medium,
171
174
  showDistanceControl : true,
@@ -0,0 +1,263 @@
1
+ /*
2
+ * Copyright (C) 2024 Automated Design Corp.. All Rights Reserved.
3
+ * Created Date: 2024-03-20 13:05:42
4
+ * -----
5
+ * Last Modified: 2024-03-21 08:35:18
6
+ * -----
7
+ *
8
+ */
9
+
10
+
11
+ import React from "react";
12
+
13
+ import { InputText } from 'primereact/inputtext';
14
+ import { Button } from "primereact/button";
15
+
16
+ import { EventEmitterContext } from "../core/EventEmitterContext.js";
17
+ import { KeyFilterType } from "primereact/keyfilter";
18
+
19
+ /**
20
+ * Properties of the component.
21
+ */
22
+ interface TextInputProps {
23
+
24
+ /**
25
+ * The label for the field.
26
+ */
27
+ label : React.ReactNode | undefined;
28
+
29
+
30
+ /**
31
+ * The value for the field.
32
+ */
33
+ value : string | undefined;
34
+
35
+
36
+ /**
37
+ * Optional filter for key entry. Not a validator, but won't accept keystrokes outside the filter.
38
+ * @type {RegExp | "pint" | "int" | "pnum" | "money" | "num" | "hex" | "email" | "alpha" | "alphanum"}
39
+ */
40
+ keyFilter : KeyFilterType | undefined;
41
+
42
+
43
+ /**
44
+ * An optional prefix before the data entry field.
45
+ */
46
+ prefix : React.ReactNode | undefined;
47
+
48
+ /**
49
+ * An optional suffix after the data entry field.
50
+ */
51
+ suffix : React.ReactNode | undefined;
52
+
53
+ /**
54
+ * A small, advisory text below the field.
55
+ */
56
+ description : React.ReactNode | undefined;
57
+
58
+ /**
59
+ * If true, all functions of the field will be disabled.
60
+ */
61
+ disabled : boolean | undefined;
62
+
63
+ /** Topic on which the value will be dispatched through the user interfave on successful data entry. */
64
+ dispatchTopic : string | undefined;
65
+
66
+ /**
67
+ * Placeholder string to display if the value is empty.
68
+ */
69
+ placeholder : string | undefined;
70
+
71
+ /**
72
+ * The user has accepted a new value.
73
+ * @param newValue New value accepted by the user.
74
+ */
75
+ onValueChanged?(newValue: string) : void;
76
+ /** Regular expression used to validate the value before it is broadcast */
77
+ validator : RegExp;
78
+ }
79
+
80
+ /**
81
+ * State variables of the component.
82
+ */
83
+ interface TextInputState {
84
+
85
+ entryValue : string | undefined;
86
+ isValid : boolean;
87
+ editing : boolean;
88
+ }
89
+
90
+
91
+ /**
92
+ * A convenient field with all the usual features of inputing values.
93
+ * Wraps the common features of use of a InputText, p-inputgroup, some icon buttons,
94
+ * accepting and rejecting values and keyboard management.
95
+ */
96
+ export class TextInput extends React.Component<TextInputProps, TextInputState> {
97
+
98
+ // Here's an example of using the Application-wide EventEmitter con
99
+ // Define the contextType for the class to access the context
100
+ static contextType = EventEmitterContext;
101
+ // After specifying contextType, you can declare the context's type for the TypeScript compiler.
102
+ // Basically, we're telling TypeScript the type of the context; this line doesn't
103
+ // actually do any linking linking to the EventEmitterContext.
104
+ declare context: React.ContextType<typeof EventEmitterContext>;
105
+
106
+
107
+
108
+
109
+ /**
110
+ * Default properties for the component.
111
+ */
112
+ static defaultProps = {
113
+ label : '',
114
+ value : undefined,
115
+ keyFilter : undefined,
116
+ writeTopic : undefined,
117
+ onValueChanged : undefined,
118
+ description: undefined,
119
+ prefix: undefined,
120
+ suffix : undefined,
121
+ disabled : false,
122
+ dispatchTopic : undefined,
123
+ placeholder : undefined,
124
+ validator : undefined
125
+ };
126
+
127
+ /**
128
+ *
129
+ * @param {FooterViewProps} props
130
+ */
131
+ constructor(props : TextInputProps) {
132
+ super(props);
133
+ this.state = {
134
+ entryValue : props.value,
135
+ isValid : props.value !== undefined ? this.validateValue(props.value) : false,
136
+ editing : false
137
+ };
138
+ }
139
+
140
+ /**
141
+ * The component has been loaded into the DOM.
142
+ */
143
+ componentDidMount() {
144
+ }
145
+
146
+
147
+
148
+ /**
149
+ * Check the new value against the validator RegEx, if one was specified.
150
+ * @param val The new value.
151
+ * @returns True if no validator specified or the value is valid, false if not valid.
152
+ */
153
+ private validateValue = (val : string) => {
154
+
155
+ if (this.props.validator !== undefined && this.props.validator !== null) {
156
+ return this.props.validator.test(val);
157
+ }
158
+ else {
159
+ return true;
160
+ }
161
+
162
+ };
163
+
164
+
165
+ /**
166
+ * The user has elected to accept the input value. Validate and store, if valid.
167
+ */
168
+ private onAcceptValue() {
169
+ if (this.state.entryValue !== undefined ) {
170
+ if (this.validateValue(this.state.entryValue) ) {
171
+ this.setState({isValid : true, editing : false});
172
+
173
+ if (this.props.onValueChanged)
174
+ this.props.onValueChanged(this.state.entryValue);
175
+
176
+ if (this.props.dispatchTopic !== undefined) {
177
+ this.context.dispatch({topic: this.props.dispatchTopic, payload:this.state.entryValue});
178
+ }
179
+
180
+ }
181
+ else {
182
+ this.setState({isValid : false});
183
+ }
184
+ }
185
+ else {
186
+ this.setState({isValid: false});
187
+ }
188
+ }
189
+
190
+ /**
191
+ * The user wishes to reset/cancel the previous value.
192
+ */
193
+ private onResetValue() {
194
+ this.setState({
195
+ entryValue: this.props.value,
196
+ isValid: this.props.value !== undefined ? this.validateValue(this.props.value) : false,
197
+ editing : false
198
+ });
199
+ }
200
+
201
+
202
+ render() {
203
+
204
+ return(
205
+ <div>
206
+ <div className="p-inputgroup flex-1" >
207
+ <span className="p-inputgroup-addon">
208
+ {this.props.label}
209
+ </span>
210
+ { this.props.prefix !== undefined &&
211
+ <span className="p-inputgroup-addon">
212
+ {this.props.prefix}
213
+ </span>
214
+ }
215
+ <InputText
216
+ keyfilter={this.props.keyFilter}
217
+ placeholder={this.props.placeholder}
218
+ value={this.state.entryValue}
219
+ onChange={(e) => {this.setState({entryValue: e.target.value, editing : true})} }
220
+ className={this.state.isValid ? '' : 'p-invalid'}
221
+ onKeyDown={(e) => {
222
+ if (e.key === 'Enter') {
223
+ this.onAcceptValue();
224
+ }
225
+ else if (e.key === 'Escape') {
226
+ this.onResetValue();
227
+ }
228
+ }}
229
+ disabled={this.props.disabled}
230
+ />
231
+ { this.props.suffix !== undefined &&
232
+ <span className="p-inputgroup-addon">
233
+ {this.props.suffix}
234
+ </span>
235
+ }
236
+ <Button
237
+ icon="pi pi-check"
238
+ disabled={this.props.disabled || !this.state.editing}
239
+ className="p-button-success"
240
+ onClick={() => this.onAcceptValue()}
241
+ visible={this.state.editing}
242
+ />
243
+
244
+ <Button
245
+ icon="pi pi-times"
246
+ disabled={this.props.disabled || !this.state.editing}
247
+ className="p-button-danger"
248
+ onClickCapture={()=>this.onResetValue()}
249
+ visible={this.state.editing}
250
+ />
251
+ </div>
252
+
253
+ {this.props.description !== undefined &&
254
+ <small>{this.props.description}</small>
255
+ }
256
+
257
+
258
+ </div>
259
+
260
+ );
261
+ }
262
+
263
+ }
@@ -0,0 +1,315 @@
1
+ /*
2
+ * Copyright (C) 2024 Automated Design Corp.. All Rights Reserved.
3
+ * Created Date: 2024-03-20 13:05:42
4
+ * -----
5
+ * Last Modified: 2024-03-21 09:37:17
6
+ * -----
7
+ *
8
+ */
9
+
10
+
11
+ import React from "react";
12
+
13
+ import { InputNumber} from 'primereact/inputnumber';
14
+ import { Button } from "primereact/button";
15
+
16
+ import { EventEmitterContext } from "../core/EventEmitterContext.js";
17
+
18
+ /**
19
+ * Properties of the ValueInput component.
20
+ */
21
+ interface ValueInputProps {
22
+
23
+ /**
24
+ * The label for the ValueInput field.
25
+ */
26
+ label : React.ReactNode | undefined;
27
+
28
+
29
+ /**
30
+ * The value for the field.
31
+ */
32
+ value : number | null;
33
+
34
+ /**
35
+ * Minimum value for the field.
36
+ */
37
+ min : number | undefined;
38
+
39
+ /**
40
+ * Minimum value for the field.
41
+ */
42
+ max : number | undefined;
43
+
44
+ /**
45
+ * Minimum number of decimal points. The user will not
46
+ * be required to type the decimal values, but this minimum
47
+ * precision will always be displayed.
48
+ * Must be less than or equal to maxPrecision, or
49
+ * the component will throw an error.
50
+ * @default 0
51
+ */
52
+ minPrecision : number | undefined;
53
+
54
+
55
+ /**
56
+ * Maximum number of decimal points.
57
+ * Set to 0 for integer-only. Must be greater or equal to than minPrecision, or
58
+ * the component will throw an error.
59
+ * @default 3
60
+ */
61
+ maxPrecision : number | undefined;
62
+
63
+
64
+ /**
65
+ * Defines the behavior of the component.
66
+ * If set to "currency", then you need to specify the
67
+ * currency type using the currency property.
68
+ * @default "decimal"
69
+ */
70
+ mode : "currency" | "decimal" | undefined;
71
+
72
+
73
+ /**
74
+ * The currency to use in currency formatting. Possible values are the
75
+ * [ISO 4217 currency codes](https://www.six-group.com/en/products-services/financial-information/data-standards.html#scrollTo=maintenance-agency),
76
+ * such as "USD" for the US dollar, "EUR" for the euro, or "CNY" for the Chinese RMB.
77
+ * If the mode is "currency", the currency property must be provided.
78
+ *
79
+ * @default "USD"
80
+ */
81
+ currency : string;
82
+
83
+ /**
84
+ * An optional prefix before the value of the field.
85
+ * Unlike the TextInput control, this prefix is internal to the field.
86
+ */
87
+ prefix : string | undefined;
88
+
89
+ /**
90
+ * An optional suffix after the value of the field.
91
+ * Unlike the TextInput control, this prefix is internal to the field.
92
+ */
93
+ suffix : string | undefined;
94
+
95
+ /**
96
+ * Set true to display buttons to increment/decrement the value.
97
+ * Use the step property to adjust the amount that the value will change.
98
+ *
99
+ * @default false
100
+ */
101
+ showButtons : boolean;
102
+
103
+ /**
104
+ * The amount clicking an increment/decrement buttion will change the value.
105
+ */
106
+ step : number | undefined;
107
+
108
+
109
+ /**
110
+ * Locale to be used in formatting. Changes how the numbers/separators are displayed
111
+ * for international users. The typical locale codes are used.
112
+ *
113
+ * @default "en-US"
114
+ */
115
+ locale : string | undefined;
116
+
117
+ /**
118
+ * A small, advisory text below the field.
119
+ */
120
+ description : React.ReactNode | undefined;
121
+
122
+ /**
123
+ * If true, all functions of the field will be disabled.
124
+ */
125
+ disabled : boolean | undefined;
126
+
127
+ /** Topic on which the value will be dispatched through the user interfave on successful data entry. */
128
+ dispatchTopic : string | undefined;
129
+
130
+ /**
131
+ * Placeholder string to display if the value is empty.
132
+ */
133
+ placeholder : string | undefined;
134
+
135
+ /**
136
+ * The user has accepted a new value.
137
+ * @param newValue New value accepted by the user.
138
+ */
139
+ onValueChanged?(newValue: number) : void;
140
+ }
141
+
142
+ /**
143
+ * State variables of the ValueInput component.
144
+ */
145
+ interface ValueInputState {
146
+
147
+ entryValue : number | null;
148
+ editing : boolean;
149
+ }
150
+
151
+
152
+ /**
153
+ * A convenient field with all the usual features of inputing numbers.
154
+ * Wraps the common features of use of a InputNumber, p-inputgroup, some icon buttons,
155
+ * accepting and rejecting values and keyboard management.
156
+ */
157
+ export class ValueInput extends React.Component<ValueInputProps, ValueInputState> {
158
+
159
+ // Here's an example of using the Application-wide EventEmitter con
160
+ // Define the contextType for the class to access the context
161
+ static contextType = EventEmitterContext;
162
+ // After specifying contextType, you can declare the context's type for the TypeScript compiler.
163
+ // Basically, we're telling TypeScript the type of the context; this line doesn't
164
+ // actually do any linking linking to the EventEmitterContext.
165
+ declare context: React.ContextType<typeof EventEmitterContext>;
166
+
167
+
168
+
169
+
170
+ /**
171
+ * Default properties for the component.
172
+ */
173
+ static defaultProps = {
174
+ label : '',
175
+ value : undefined,
176
+ keyFilter : undefined,
177
+ writeTopic : undefined,
178
+ onValueChanged : undefined,
179
+ description: undefined,
180
+ prefix: undefined,
181
+ suffix : undefined,
182
+ disabled : false,
183
+ dispatchTopic : undefined,
184
+ placeholder : undefined,
185
+ validator : undefined,
186
+ min : undefined,
187
+ max : undefined,
188
+ minPrecision : 0,
189
+ maxPrecision : 3,
190
+ mode : "decimal",
191
+ showButtons : false,
192
+ step : 1,
193
+ locale : "en-US",
194
+ currency : "USD"
195
+ };
196
+
197
+ /**
198
+ *
199
+ * @param {FooterViewProps} props
200
+ */
201
+ constructor(props : ValueInputProps) {
202
+ super(props);
203
+ this.state = {
204
+ entryValue : props.value,
205
+ editing : false
206
+ };
207
+ }
208
+
209
+ /**
210
+ * The component has been loaded into the DOM.
211
+ */
212
+ componentDidMount() {
213
+ }
214
+
215
+
216
+
217
+ /**
218
+ * The user has elected to accept the input value. Validate and store, if valid.
219
+ */
220
+ private onAcceptValue() {
221
+ if (this.state.entryValue !== null ) {
222
+ this.setState({editing : false});
223
+
224
+ if (this.props.onValueChanged)
225
+ this.props.onValueChanged(this.state.entryValue);
226
+
227
+ if (this.props.dispatchTopic !== undefined) {
228
+ this.context.dispatch({topic: this.props.dispatchTopic, payload:this.state.entryValue});
229
+ }
230
+
231
+ }
232
+ }
233
+
234
+ /**
235
+ * The user wishes to reset/cancel the previous value.
236
+ */
237
+ private onResetValue() {
238
+ this.setState({
239
+ entryValue: this.props.value,
240
+ editing : false
241
+ });
242
+ }
243
+
244
+
245
+ render() {
246
+
247
+ return(
248
+ <div>
249
+ <div className="p-inputgroup flex-1" >
250
+ <span className="p-inputgroup-addon">
251
+ {this.props.label}
252
+ </span>
253
+ <InputNumber
254
+ min={this.props.min}
255
+ max={this.props.max}
256
+ minFractionDigits={this.props.minPrecision}
257
+ maxFractionDigits={this.props.maxPrecision}
258
+ mode={this.props.mode}
259
+ prefix={this.props.prefix}
260
+ suffix={this.props.suffix}
261
+ showButtons={this.props.showButtons}
262
+ step={this.props.step}
263
+ placeholder={this.props.placeholder}
264
+ value={this.state.entryValue}
265
+ onChange={(e) => {this.setState({entryValue: e.value, editing : true})} }
266
+
267
+ buttonLayout="horizontal"
268
+ decrementButtonClassName="p-button-danger"
269
+ incrementButtonClassName="p-button-success"
270
+ incrementButtonIcon="pi pi-plus"
271
+ decrementButtonIcon="pi pi-minus"
272
+
273
+ locale="en-US"
274
+ currency={this.props.currency}
275
+
276
+ onKeyDown={(e) => {
277
+ if (e.key === 'Enter') {
278
+ this.onAcceptValue();
279
+ }
280
+ else if (e.key === 'Escape') {
281
+ this.onResetValue();
282
+ }
283
+ }}
284
+ disabled={this.props.disabled}
285
+ />
286
+ <Button
287
+ icon="pi pi-check"
288
+ disabled={this.props.disabled || !this.state.editing}
289
+ className="p-button-success"
290
+ onClick={() => this.onAcceptValue()}
291
+ visible={this.state.editing}
292
+ size="small"
293
+ />
294
+
295
+ <Button
296
+ icon="pi pi-times"
297
+ disabled={this.props.disabled || !this.state.editing}
298
+ className="p-button-danger"
299
+ onClickCapture={()=>this.onResetValue()}
300
+ visible={this.state.editing}
301
+ size="small"
302
+ />
303
+ </div>
304
+
305
+ {this.props.description !== undefined &&
306
+ <small>{this.props.description}</small>
307
+ }
308
+
309
+
310
+ </div>
311
+
312
+ );
313
+ }
314
+
315
+ }
@@ -45,7 +45,13 @@ export const RegExMaskPatterns = {
45
45
  * This pattern matches any positive integer without a decimal point, excluding negative numbers.
46
46
  * Examples of valid inputs: "123"
47
47
  */
48
- IntegerPositive: /^\d+$/
48
+ IntegerPositive: /^\d+$/,
49
+
50
+
51
+ /**
52
+ * Regular expression for matching IPV4 address.
53
+ */
54
+ Ipv4: /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
49
55
  } as const;
50
56
 
51
57
 
@@ -1 +0,0 @@
1
- <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>kRotationButtonDefinitions | autocore-react - v3.0.3</title><meta name="description" content="Documentation for autocore-react"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">autocore-react - v3.0.3</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../index.html">autocore-react</a></li><li><a href="../modules/components_JogPanel.html">components/JogPanel</a></li><li><a href="components_JogPanel.kRotationButtonDefinitions.html">kRotationButtonDefinitions</a></li></ul><h1>Variable kRotationButtonDefinitions<code class="tsd-tag ts-flagConst">Const</code> </h1></div><div class="tsd-signature"><span class="tsd-kind-variable">k<wbr/>Rotation<wbr/>Button<wbr/>Definitions</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><a href="../interfaces/components_JogPanel.JogPanelButtonDefinition.html" class="tsd-signature-type tsd-kind-interface">JogPanelButtonDefinition</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources"><ul><li>Defined in src/components/JogPanel.tsx:133</li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><h4 class="uppercase">Member Visibility</h4><form><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>autocore-react - v3.0.3</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><div class="tsd-generator"><p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div><div class="overlay"></div></body></html>