@adcops/autocore-react 3.0.0 → 3.0.3

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.
Files changed (288) hide show
  1. package/dist/assets/BlocklyLogo.d.ts +3 -0
  2. package/dist/assets/BlocklyLogo.js +1 -0
  3. package/dist/assets/Distance.d.ts +3 -0
  4. package/dist/assets/Distance.js +1 -0
  5. package/dist/assets/JogLong.d.ts +3 -0
  6. package/dist/assets/JogLong.js +1 -0
  7. package/dist/assets/JogMedium.d.ts +3 -0
  8. package/dist/assets/JogMedium.js +1 -0
  9. package/dist/assets/JogShort.d.ts +3 -0
  10. package/dist/assets/JogShort.js +1 -0
  11. package/dist/assets/PythonLogo.d.ts +3 -0
  12. package/dist/assets/PythonLogo.js +1 -0
  13. package/dist/assets/Rotation3D.d.ts +3 -0
  14. package/dist/assets/Rotation3D.js +1 -0
  15. package/dist/assets/RotationCcw.d.ts +3 -0
  16. package/dist/assets/RotationCcw.js +1 -0
  17. package/dist/assets/RotationCcwA.d.ts +3 -0
  18. package/dist/assets/RotationCcwA.js +1 -0
  19. package/dist/assets/RotationCcwB.d.ts +3 -0
  20. package/dist/assets/RotationCcwB.js +1 -0
  21. package/dist/assets/RotationCcwC.d.ts +3 -0
  22. package/dist/assets/RotationCcwC.js +1 -0
  23. package/dist/assets/RotationCw.d.ts +3 -0
  24. package/dist/assets/RotationCw.js +1 -0
  25. package/dist/assets/RotationCwA.d.ts +3 -0
  26. package/dist/assets/RotationCwA.js +1 -0
  27. package/dist/assets/RotationCwB.d.ts +3 -0
  28. package/dist/assets/RotationCwB.js +1 -0
  29. package/dist/assets/RotationCwC.d.ts +3 -0
  30. package/dist/assets/RotationCwC.js +1 -0
  31. package/dist/assets/Run.d.ts +3 -0
  32. package/dist/assets/Run.js +1 -0
  33. package/dist/assets/Speed.d.ts +3 -0
  34. package/dist/assets/Speed.js +1 -0
  35. package/dist/assets/SpeedFast.d.ts +3 -0
  36. package/dist/assets/SpeedFast.js +1 -0
  37. package/dist/assets/SpeedMedium.d.ts +3 -0
  38. package/dist/assets/SpeedMedium.js +1 -0
  39. package/dist/assets/SpeedNone.d.ts +3 -0
  40. package/dist/assets/SpeedNone.js +1 -0
  41. package/dist/assets/SpeedSlow.d.ts +3 -0
  42. package/dist/assets/SpeedSlow.js +1 -0
  43. package/dist/assets/Walk.d.ts +3 -0
  44. package/dist/assets/Walk.js +1 -0
  45. package/dist/assets/index.d.ts +22 -0
  46. package/dist/assets/index.js +1 -0
  47. package/dist/assets/svg/blockly_logo.svg +82 -0
  48. package/dist/assets/svg/distance.svg +40 -0
  49. package/dist/assets/svg/jog_long.svg +1 -0
  50. package/dist/assets/svg/jog_medium.svg +1 -0
  51. package/dist/assets/svg/jog_short.svg +1 -0
  52. package/dist/assets/svg/python_logo.svg +246 -0
  53. package/dist/assets/svg/rotation_3d.svg +1 -0
  54. package/dist/assets/svg/rotation_ccw.svg +50 -0
  55. package/dist/assets/svg/rotation_ccw_a.svg +57 -0
  56. package/dist/assets/svg/rotation_ccw_b.svg +57 -0
  57. package/dist/assets/svg/rotation_ccw_c.svg +57 -0
  58. package/dist/assets/svg/rotation_cw.svg +49 -0
  59. package/dist/assets/svg/rotation_cw_a.svg +30 -0
  60. package/dist/assets/svg/rotation_cw_b.svg +30 -0
  61. package/dist/assets/svg/rotation_cw_c.svg +30 -0
  62. package/dist/assets/svg/run.svg +1 -0
  63. package/dist/assets/svg/speed.svg +39 -0
  64. package/dist/assets/svg/speed_fast.svg +1 -0
  65. package/dist/assets/svg/speed_medium.svg +1 -0
  66. package/dist/assets/svg/speed_none.svg +1 -0
  67. package/dist/assets/svg/speed_slow.svg +1 -0
  68. package/dist/assets/svg/walk.svg +1 -0
  69. package/dist/components/BlocklyEditor.css +25 -0
  70. package/dist/components/BlocklyEditor.d.ts +120 -0
  71. package/dist/components/BlocklyEditor.js +1 -0
  72. package/dist/components/CodeEditor.d.ts +76 -0
  73. package/dist/components/CodeEditor.js +1 -0
  74. package/dist/components/Indicator.d.ts +12 -27
  75. package/dist/components/Indicator.js +1 -1
  76. package/dist/components/IndicatorButton.d.ts +56 -37
  77. package/dist/components/IndicatorButton.js +1 -1
  78. package/dist/components/JogPanel.css +41 -0
  79. package/dist/components/JogPanel.d.ts +115 -0
  80. package/dist/components/JogPanel.js +1 -0
  81. package/dist/components/Lamp.d.ts +81 -0
  82. package/dist/components/Lamp.js +1 -0
  83. package/dist/components/ToggleGroup.d.ts +103 -0
  84. package/dist/components/ToggleGroup.js +1 -0
  85. package/dist/core/ActionMode.d.ts +9 -0
  86. package/dist/core/ActionMode.js +1 -0
  87. package/dist/core/EventEmitterContext.d.ts +42 -2
  88. package/dist/core/IndicatorButtonState.d.ts +21 -0
  89. package/dist/core/IndicatorButtonState.js +1 -0
  90. package/docs/assets/highlight.css +25 -18
  91. package/docs/assets/navigation.js +1 -1
  92. package/docs/assets/search.js +1 -1
  93. package/docs/classes/components_BlocklyEditor.BlocklyEditor.html +124 -0
  94. package/docs/classes/components_CodeEditor.CodeEditor.html +128 -0
  95. package/docs/classes/components_Indicator.Indicator.html +8 -8
  96. package/docs/classes/components_IndicatorButton.IndicatorButton.html +17 -17
  97. package/docs/classes/components_JogPanel.JogPanel.html +138 -0
  98. package/docs/classes/components_Lamp.Lamp.html +105 -0
  99. package/docs/classes/components_OskDialog.OskDialog.html +5 -5
  100. package/docs/classes/components_ToggleGroup.ToggleGroup.html +118 -0
  101. package/docs/classes/components_ValueDisplay.ValueDisplay.html +25 -8
  102. package/docs/classes/core_ValueSimulator.ValueSimulator.html +13 -3
  103. package/docs/classes/hub_HubBase.HubBase.html +45 -16
  104. package/docs/classes/hub_HubSimulate.HubSimulate.html +16 -20
  105. package/docs/classes/hub_HubSocketIo.HubSocketIo.html +33 -21
  106. package/docs/classes/hub_HubTauri.HubTauri.html +21 -18
  107. package/docs/enums/components_JogPanel.JogDistanceAction.html +5 -0
  108. package/docs/enums/components_JogPanel.JogPanelAction.html +18 -0
  109. package/docs/enums/components_JogPanel.JogSpeedAction.html +5 -0
  110. package/docs/enums/core_ActionMode.ActionMode.html +6 -0
  111. package/docs/enums/core_IndicatorColor.IndicatorColor.html +23 -0
  112. package/docs/functions/assets_BlocklyLogo.default.html +1 -0
  113. package/docs/functions/assets_Distance.default.html +1 -0
  114. package/docs/functions/assets_JogLong.default.html +1 -0
  115. package/docs/functions/assets_JogMedium.default.html +1 -0
  116. package/docs/functions/assets_JogShort.default.html +1 -0
  117. package/docs/functions/assets_PythonLogo.default.html +1 -0
  118. package/docs/functions/assets_Rotation3D.default.html +1 -0
  119. package/docs/functions/assets_RotationCcw.default.html +1 -0
  120. package/docs/functions/assets_RotationCcwA.default.html +1 -0
  121. package/docs/functions/assets_RotationCcwB.default.html +1 -0
  122. package/docs/functions/assets_RotationCcwC.default.html +1 -0
  123. package/docs/functions/assets_RotationCw.default.html +1 -0
  124. package/docs/functions/assets_RotationCwA.default.html +1 -0
  125. package/docs/functions/assets_RotationCwB.default.html +1 -0
  126. package/docs/functions/assets_RotationCwC.default.html +1 -0
  127. package/docs/functions/assets_Run.default.html +1 -0
  128. package/docs/functions/assets_Speed.default.html +1 -0
  129. package/docs/functions/assets_SpeedFast.default.html +1 -0
  130. package/docs/functions/assets_SpeedMedium.default.html +1 -0
  131. package/docs/functions/assets_SpeedNone.default.html +1 -0
  132. package/docs/functions/assets_SpeedSlow.default.html +1 -0
  133. package/docs/functions/assets_Walk.default.html +1 -0
  134. package/docs/functions/components_BlocklyEditor.createCustomToolbox.html +6 -0
  135. package/docs/functions/components_Osk.Osk.html +2 -2
  136. package/docs/functions/core_EventEmitterContext.EventEmitterProvider.html +3 -3
  137. package/docs/functions/core_UniqueId.UniqueId.html +7 -2
  138. package/docs/functions/core_hoc.hocAddSubscription.html +2 -2
  139. package/docs/functions/hub.createHub.html +2 -2
  140. package/docs/hierarchy.html +1 -1
  141. package/docs/index.html +28 -3
  142. package/docs/interfaces/components_IndicatorButton.IndicatorButtonProps.html +162 -132
  143. package/docs/interfaces/components_JogPanel.JogPanelButtonDefinition.html +5 -0
  144. package/docs/interfaces/components_ToggleGroup.ToggleGroupProps.html +636 -0
  145. package/docs/interfaces/core_EventEmitterContext.Action.html +6 -3
  146. package/docs/interfaces/core_EventEmitterContext.EventEmitterContextType.html +19 -7
  147. package/docs/interfaces/core_EventEmitterContext.State.html +5 -5
  148. package/docs/interfaces/core_EventEmitterContext.Subscription.html +4 -4
  149. package/docs/interfaces/core_IndicatorButtonState.IndicatorButtonState.html +10 -0
  150. package/docs/interfaces/core_PositionContext.IPositionContext.html +17 -0
  151. package/docs/modules/assets.html +23 -0
  152. package/docs/modules/{core_InputPatterns.html → assets_BlocklyLogo.html} +2 -2
  153. package/docs/modules/assets_Distance.html +2 -0
  154. package/docs/modules/assets_JogLong.html +2 -0
  155. package/docs/modules/assets_JogMedium.html +2 -0
  156. package/docs/modules/assets_JogShort.html +2 -0
  157. package/docs/modules/assets_PythonLogo.html +2 -0
  158. package/docs/modules/assets_Rotation3D.html +2 -0
  159. package/docs/modules/assets_RotationCcw.html +2 -0
  160. package/docs/modules/assets_RotationCcwA.html +2 -0
  161. package/docs/modules/assets_RotationCcwB.html +2 -0
  162. package/docs/modules/assets_RotationCcwC.html +2 -0
  163. package/docs/modules/assets_RotationCw.html +2 -0
  164. package/docs/modules/assets_RotationCwA.html +2 -0
  165. package/docs/modules/assets_RotationCwB.html +2 -0
  166. package/docs/modules/assets_RotationCwC.html +2 -0
  167. package/docs/modules/assets_Run.html +2 -0
  168. package/docs/modules/assets_Speed.html +2 -0
  169. package/docs/modules/assets_SpeedFast.html +2 -0
  170. package/docs/modules/assets_SpeedMedium.html +2 -0
  171. package/docs/modules/assets_SpeedNone.html +2 -0
  172. package/docs/modules/assets_SpeedSlow.html +2 -0
  173. package/docs/modules/assets_Walk.html +2 -0
  174. package/docs/modules/components_BlocklyEditor.html +5 -0
  175. package/docs/modules/components_CodeEditor.html +3 -0
  176. package/docs/modules/components_Indicator.html +2 -2
  177. package/docs/modules/components_IndicatorButton.html +4 -4
  178. package/docs/modules/components_JogPanel.html +9 -0
  179. package/docs/modules/components_Lamp.html +4 -0
  180. package/docs/modules/components_Osk.html +2 -2
  181. package/docs/modules/components_OskDialog.html +2 -2
  182. package/docs/modules/{core_DimensionsContext.html → components_ToggleGroup.html} +5 -4
  183. package/docs/modules/components_ValueDisplay.html +2 -2
  184. package/docs/modules/core_ActionMode.html +2 -0
  185. package/docs/modules/core_EventEmitterContext.html +2 -2
  186. package/docs/modules/{components_IndicatorColor.html → core_IndicatorButtonState.html} +2 -2
  187. package/docs/modules/core_IndicatorColor.html +2 -0
  188. package/docs/modules/core_MaskPatterns.html +3 -0
  189. package/docs/modules/core_NumerableTypes.html +2 -2
  190. package/docs/modules/core_PositionContext.html +4 -0
  191. package/docs/modules/core_UniqueId.html +2 -2
  192. package/docs/modules/core_ValueSimulator.html +2 -2
  193. package/docs/modules/core_hoc.html +2 -2
  194. package/docs/modules/hub.html +2 -2
  195. package/docs/modules/hub_HubBase.html +2 -2
  196. package/docs/modules/hub_HubSimulate.html +2 -2
  197. package/docs/modules/hub_HubSocketIo.html +2 -2
  198. package/docs/modules/hub_HubTauri.html +2 -2
  199. package/docs/types/components_IndicatorButton.IndicatorButtonOptionsType.html +1 -0
  200. package/docs/types/core_EventEmitterContext.EmitterDispatchFunction.html +3 -1
  201. package/docs/types/core_EventEmitterContext.EmitterSubscribeFunction.html +3 -1
  202. package/docs/types/core_EventEmitterContext.EmitterUnsubscribeFunction.html +3 -1
  203. package/docs/types/core_NumerableTypes.NumerableFormatOptions.html +4 -1
  204. package/docs/types/core_hoc.HocAddSubscriptionProps.html +2 -2
  205. package/docs/variables/components_BlocklyEditor.StandardToolbox.html +1 -0
  206. package/docs/variables/components_JogPanel.kDefaultButtonDefinitions.html +2 -0
  207. package/docs/variables/components_JogPanel.kRotationButtonDefinitions.html +1 -0
  208. package/docs/variables/core_EventEmitterContext.EventEmitterContext.html +58 -5
  209. package/docs/variables/core_MaskPatterns.PrimeReactMaskPatterns.html +14 -0
  210. package/docs/variables/core_MaskPatterns.RegExMaskPatterns.html +14 -0
  211. package/docs/variables/core_PositionContext.DimensionsContext.html +6 -0
  212. package/package.json +8 -4
  213. package/readme.md +33 -0
  214. package/src/assets/BlocklyLogo.tsx +27 -0
  215. package/src/assets/Distance.tsx +18 -0
  216. package/src/assets/JogLong.tsx +13 -0
  217. package/src/assets/JogMedium.tsx +13 -0
  218. package/src/assets/JogShort.tsx +13 -0
  219. package/src/assets/PythonLogo.tsx +83 -0
  220. package/src/assets/Rotation3D.tsx +13 -0
  221. package/src/assets/RotationCcw.tsx +33 -0
  222. package/src/assets/RotationCcwA.tsx +45 -0
  223. package/src/assets/RotationCcwB.tsx +45 -0
  224. package/src/assets/RotationCcwC.tsx +45 -0
  225. package/src/assets/RotationCw.tsx +31 -0
  226. package/src/assets/RotationCwA.tsx +42 -0
  227. package/src/assets/RotationCwB.tsx +42 -0
  228. package/src/assets/RotationCwC.tsx +42 -0
  229. package/src/assets/Run.tsx +13 -0
  230. package/src/assets/Speed.tsx +18 -0
  231. package/src/assets/SpeedFast.tsx +13 -0
  232. package/src/assets/SpeedMedium.tsx +13 -0
  233. package/src/assets/SpeedNone.tsx +13 -0
  234. package/src/assets/SpeedSlow.tsx +13 -0
  235. package/src/assets/Walk.tsx +13 -0
  236. package/src/assets/index.ts +22 -0
  237. package/src/assets/svg/blockly_logo.svg +82 -0
  238. package/src/assets/svg/distance.svg +40 -0
  239. package/src/assets/svg/jog_long.svg +1 -0
  240. package/src/assets/svg/jog_medium.svg +1 -0
  241. package/src/assets/svg/jog_short.svg +1 -0
  242. package/src/assets/svg/python_logo.svg +246 -0
  243. package/src/assets/svg/rotation_3d.svg +1 -0
  244. package/src/assets/svg/rotation_ccw.svg +50 -0
  245. package/src/assets/svg/rotation_ccw_a.svg +57 -0
  246. package/src/assets/svg/rotation_ccw_b.svg +57 -0
  247. package/src/assets/svg/rotation_ccw_c.svg +57 -0
  248. package/src/assets/svg/rotation_cw.svg +49 -0
  249. package/src/assets/svg/rotation_cw_a.svg +30 -0
  250. package/src/assets/svg/rotation_cw_b.svg +30 -0
  251. package/src/assets/svg/rotation_cw_c.svg +30 -0
  252. package/src/assets/svg/run.svg +1 -0
  253. package/src/assets/svg/speed.svg +39 -0
  254. package/src/assets/svg/speed_fast.svg +1 -0
  255. package/src/assets/svg/speed_medium.svg +1 -0
  256. package/src/assets/svg/speed_none.svg +1 -0
  257. package/src/assets/svg/speed_slow.svg +1 -0
  258. package/src/assets/svg/walk.svg +1 -0
  259. package/src/components/BlocklyEditor.css +25 -0
  260. package/src/components/BlocklyEditor.tsx +598 -0
  261. package/src/components/CodeEditor.tsx +156 -0
  262. package/src/components/Indicator.tsx +63 -118
  263. package/src/components/IndicatorButton.tsx +104 -50
  264. package/src/components/JogPanel.css +41 -0
  265. package/src/components/JogPanel.tsx +458 -0
  266. package/src/components/Lamp.tsx +243 -0
  267. package/src/components/ToggleGroup.tsx +429 -0
  268. package/src/core/ActionMode.ts +20 -0
  269. package/src/core/IndicatorButtonState.ts +34 -0
  270. package/tools/copy-distribution-files.cjs +3 -2
  271. package/dist/components/DPad.css +0 -522
  272. package/dist/components/DPad.d.ts +0 -34
  273. package/dist/components/DPad.js +0 -1
  274. package/docs/enums/components_DPad.VcJoyPadAction.html +0 -10
  275. package/docs/enums/components_DPad.VcJoyPadButtonId.html +0 -7
  276. package/docs/enums/components_IndicatorButton.ActionMode.html +0 -6
  277. package/docs/enums/components_IndicatorColor.IndicatorColor.html +0 -13
  278. package/docs/functions/components_DPad.VcDPad.html +0 -5
  279. package/docs/interfaces/components_IndicatorButton.IndicatorButtonState.html +0 -10
  280. package/docs/interfaces/core_DimensionsContext.IDimensionsContext.html +0 -4
  281. package/docs/modules/components_DPad.html +0 -5
  282. package/docs/variables/core_DimensionsContext.DimensionsContext.html +0 -1
  283. package/docs/variables/core_InputPatterns.InputPatterns.html +0 -2
  284. package/src/components/DPad.css +0 -522
  285. package/src/components/DPad.tsx +0 -94
  286. /package/dist/{components → core}/IndicatorColor.d.ts +0 -0
  287. /package/dist/{components → core}/IndicatorColor.js +0 -0
  288. /package/src/{components → core}/IndicatorColor.ts +0 -0
@@ -0,0 +1,115 @@
1
+ import React from 'react';
2
+ import './JogPanel.css';
3
+ /**
4
+ * Enumerates the source button or action when an event occurs.
5
+ */
6
+ export declare enum JogPanelAction {
7
+ /** Invalid - Ignore this button */
8
+ Invalid = 0,
9
+ xPositive = 1,
10
+ xNegative = 2,
11
+ yPositive = 3,
12
+ yNegative = 4,
13
+ zPositive = 5,
14
+ zNegative = 6,
15
+ aPositive = 7,
16
+ aNegative = 8,
17
+ bPositive = 9,
18
+ bNegative = 16,
19
+ cPositive = 17,
20
+ cNegative = 18,
21
+ /** Stop, clear or reset */
22
+ Stop = 255
23
+ }
24
+ /**
25
+ * Enumerates the selected jog distance.
26
+ */
27
+ export declare enum JogDistanceAction {
28
+ Short = 0,
29
+ Medium = 16,
30
+ Long = 32
31
+ }
32
+ /**
33
+ * Enumerates the selected jog distance.
34
+ */
35
+ export declare enum JogSpeedAction {
36
+ Slow = 0,
37
+ Medium = 16,
38
+ Fast = 32
39
+ }
40
+ /**
41
+ * Jog button definition type for defining the button in the JogPanel.
42
+ */
43
+ export interface JogPanelButtonDefinition {
44
+ icon: string;
45
+ alt: string;
46
+ action: JogPanelAction;
47
+ }
48
+ /**
49
+ * Component properties of the directional pad.
50
+ */
51
+ interface JogPanelProps {
52
+ onClicked?: (action: JogPanelAction) => void;
53
+ onJogDistanceChanged?: (action: JogDistanceAction) => void;
54
+ onJogSpeedChanged?: (action: JogSpeedAction) => void;
55
+ buttonDefinitions: (JogPanelButtonDefinition | undefined)[][] | undefined;
56
+ defaultJogDistance: JogDistanceAction;
57
+ defaultJogSpeed: JogSpeedAction;
58
+ showDistanceControl: boolean;
59
+ showSpeedControl: boolean;
60
+ }
61
+ interface JogPanelState {
62
+ jogDistance: JogDistanceAction;
63
+ jogSpeed: JogSpeedAction;
64
+ }
65
+ /**
66
+ * Default X, Y, Z configuration.
67
+ */
68
+ export declare const kDefaultButtonDefinitions: (JogPanelButtonDefinition | undefined)[][];
69
+ export declare const kRotationButtonDefinitions: (JogPanelButtonDefinition | undefined)[][];
70
+ /**
71
+ * Jogging panel that supports 3D motion. In 3D:
72
+ * - Z is Up and Down,
73
+ * - Y is towards and away
74
+ * - X is left and right
75
+ *
76
+ * This Jog Panel is based upon a standard CNC mill and industrial standards.
77
+ *
78
+ * ## Parameters
79
+ * @param onClicked Callback any time a button is clicked. Includes argument for direction.
80
+ * @param buttonDefinitions A 3x3 matrix of (JogPanelButtonDefinition | undefined) that defines the button. If a button is undefined, it is disabled.
81
+ *
82
+ * ## Button definitions
83
+ *
84
+ * Example:
85
+ * ```
86
+ * export const kDefaultButtonDefinitions : (JogPanelButtonDefinition | undefined)[][] = [
87
+ * [{ icon: "pi pi-arrow-up-left", action: JogPanelAction.yPositive, alt: "Y Positive" }, { icon: "pi pi-arrow-up", action: JogPanelAction.zPositive, alt: "Z Positive" }, undefined],
88
+ * [{ icon: "pi pi-arrow-left", action: JogPanelAction.xNegative, alt: "X Negative" }, undefined, { icon: "pi pi-arrow-right", action: JogPanelAction.xPositive, alt: "X Positive" }],
89
+ * [undefined, { icon: "pi pi-arrow-down", action: JogPanelAction.zNegative, alt: "Z Negative" }, { icon: "pi pi-arrow-down-right", action: JogPanelAction.yNegative, alt: "Y Negative" }],
90
+ * ];
91
+ * ```
92
+ *
93
+ */
94
+ export declare class JogPanel extends React.Component<JogPanelProps, JogPanelState> {
95
+ static defaultProps: JogPanelProps;
96
+ private jogDistanceItems;
97
+ private jogSpeedItems;
98
+ constructor(props: JogPanelProps);
99
+ /**
100
+ * Handle a user action on the DirectionalPad
101
+ * @param action DirectionalPadAction
102
+ */
103
+ private handleClicked;
104
+ /**
105
+ * The user has selected a different jog distance.
106
+ * @param {JogDistanceAction} action The newly-selected distance.
107
+ */
108
+ private handleDistanceChanged;
109
+ private handleSpeedChanged;
110
+ emptyRow(): import("react/jsx-runtime").JSX.Element;
111
+ private actionToIcon;
112
+ standardButton(row: number, col: number): import("react/jsx-runtime").JSX.Element;
113
+ render(): import("react/jsx-runtime").JSX.Element;
114
+ }
115
+ export default JogPanel;
@@ -0,0 +1 @@
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import React from"react";import{Button}from"primereact/button";import{SelectButton}from"primereact/selectbutton";import{Tooltip}from"primereact/tooltip";import"./JogPanel.css";import{Distance,JogShort,JogMedium,JogLong}from"../assets";import{Speed,SpeedSlow,SpeedMedium,SpeedFast}from"../assets";import{RotationCcwA,RotationCcwB,RotationCcwC}from"../assets";import{RotationCwA,RotationCwB,RotationCwC}from"../assets";export var JogPanelAction;!function(t){t[t.Invalid=0]="Invalid",t[t.xPositive=1]="xPositive",t[t.xNegative=2]="xNegative",t[t.yPositive=3]="yPositive",t[t.yNegative=4]="yNegative",t[t.zPositive=5]="zPositive",t[t.zNegative=6]="zNegative",t[t.aPositive=7]="aPositive",t[t.aNegative=8]="aNegative",t[t.bPositive=9]="bPositive",t[t.bNegative=16]="bNegative",t[t.cPositive=17]="cPositive",t[t.cNegative=18]="cNegative",t[t.Stop=255]="Stop"}(JogPanelAction||(JogPanelAction={}));export var JogDistanceAction;!function(t){t[t.Short=0]="Short",t[t.Medium=16]="Medium",t[t.Long=32]="Long"}(JogDistanceAction||(JogDistanceAction={}));export var JogSpeedAction;!function(t){t[t.Slow=0]="Slow",t[t.Medium=16]="Medium",t[t.Fast=32]="Fast"}(JogSpeedAction||(JogSpeedAction={}));export const kDefaultButtonDefinitions=[[{icon:"pi pi-arrow-up-left",action:JogPanelAction.yPositive,alt:"Y Positive"},{icon:"pi pi-arrow-up",action:JogPanelAction.zPositive,alt:"Z Positive"},void 0],[{icon:"pi pi-arrow-left",action:JogPanelAction.xNegative,alt:"X Negative"},void 0,{icon:"pi pi-arrow-right",action:JogPanelAction.xPositive,alt:"X Positive"}],[void 0,{icon:"pi pi-arrow-down",action:JogPanelAction.zNegative,alt:"Z Negative"},{icon:"pi pi-arrow-down-right",action:JogPanelAction.yNegative,alt:"Y Negative"}]];export const kRotationButtonDefinitions=[[{icon:"pi",action:JogPanelAction.bPositive,alt:"Rot B Positive"},{icon:"pi",action:JogPanelAction.cPositive,alt:"Rot C Positive"},void 0],[{icon:"pi",action:JogPanelAction.aNegative,alt:"Rot A Negative"},void 0,{icon:"pi",action:JogPanelAction.aPositive,alt:"Rot A Positive"}],[void 0,{icon:"pi",action:JogPanelAction.cNegative,alt:"Rot C Negative"},{icon:"pi ",action:JogPanelAction.bNegative,alt:"Rot B Negative"}]];export class JogPanel extends React.Component{constructor(t){super(t),Object.defineProperty(this,"jogDistanceItems",{enumerable:!0,configurable:!0,writable:!0,value:[{name:"S",value:JogDistanceAction.Short},{name:"M",value:JogDistanceAction.Medium},{name:"L",value:JogDistanceAction.Long}]}),Object.defineProperty(this,"jogSpeedItems",{enumerable:!0,configurable:!0,writable:!0,value:[{name:"S",value:JogSpeedAction.Slow},{name:"M",value:JogSpeedAction.Medium},{name:"F",value:JogSpeedAction.Fast}]}),this.state={jogDistance:t.defaultJogDistance,jogSpeed:t.defaultJogSpeed}}handleClicked(t){null!=t&&this.props.onClicked&&this.props.onClicked(t)}handleDistanceChanged(t){this.setState({jogDistance:t}),this.props.onJogDistanceChanged&&this.props.onJogDistanceChanged(t)}handleSpeedChanged(t){this.setState({jogSpeed:t}),this.props.onJogSpeedChanged&&this.props.onJogSpeedChanged(t)}emptyRow(){return _jsxs("div",{className:"grid-row",children:[_jsx("div",{className:"button-item empty-slot"}),_jsx("div",{className:"button-item empty-slot"}),_jsx("div",{className:"button-item empty-slot"})]})}actionToIcon(t){return t==JogPanelAction.Invalid||t==JogPanelAction.Stop?_jsx("i",{}):t==JogPanelAction.xNegative?_jsx("i",{className:"pi pi-arrow-left"}):t==JogPanelAction.xPositive?_jsx("i",{className:"pi pi-arrow-right"}):t==JogPanelAction.yNegative?_jsx("i",{className:"pi pi-arrow-up-left"}):t==JogPanelAction.yPositive?_jsx("i",{className:"pi pi-arrow-down-right"}):t==JogPanelAction.zNegative?_jsx("i",{className:"pi pi-up"}):t==JogPanelAction.zPositive?_jsx("i",{className:"pi pi-down"}):t==JogPanelAction.aNegative?_jsx(RotationCcwA,{}):t==JogPanelAction.aPositive?_jsx(RotationCwA,{}):t==JogPanelAction.bNegative?_jsx(RotationCcwB,{}):t==JogPanelAction.bPositive?_jsx(RotationCwB,{}):t==JogPanelAction.cNegative?_jsx(RotationCcwC,{}):t==JogPanelAction.cPositive?_jsx(RotationCwC,{}):_jsx("i",{})}standardButton(t,i){if(void 0!==this.props.buttonDefinitions&&void 0!==this.props.buttonDefinitions[t]&&void 0!==this.props.buttonDefinitions[t][i]&&void 0!==this.props.buttonDefinitions[t][i]?.action){const o=this.props.buttonDefinitions[t][i]?.action;return void 0!==o&&o<JogPanelAction.aPositive?_jsx(Button,{icon:this.props.buttonDefinitions[t][i]?.icon,tooltip:this.props.buttonDefinitions[t][i]?.alt,onClick:()=>this.handleClicked(o),className:"button-item"},`${t}-${i}`):_jsx(Button,{tooltip:this.props.buttonDefinitions[t][i]?.alt,onClick:()=>this.handleClicked(o),className:"button-item",icon:()=>this.actionToIcon(o)},`${t}-${i}`)}return _jsx(Button,{icon:"pi",disabled:!0,className:"button-item empty-slot"},`${t}-${i}`)}render(){return _jsxs("div",{className:"jogpanel-container",children:[_jsx(Tooltip,{target:".distance-selector-button"}),_jsxs("div",{className:"grid-container",children:[_jsxs("div",{className:"grid-row",children:[this.standardButton(0,0),this.standardButton(0,1),this.standardButton(0,2)]},"0"),_jsxs("div",{className:"grid-row",children:[this.standardButton(1,0),this.standardButton(1,1),this.standardButton(1,2)]},"1"),_jsxs("div",{className:"grid-row",children:[this.standardButton(2,0),this.standardButton(2,1),this.standardButton(2,2)]},"2")]}),this.props.showDistanceControl&&_jsxs("div",{className:"distance-selector p-inputgroup flex-1",children:[_jsx("span",{className:"p-inputgroup-addon",children:_jsx(Distance,{width:16,height:16,fill:"white"})}),_jsx(SelectButton,{value:this.state.jogDistance,onChange:t=>this.handleDistanceChanged(t.value),optionLabel:"name",options:this.jogDistanceItems,allowEmpty:!1,itemTemplate:t=>t.value==JogDistanceAction.Short?_jsx(JogShort,{className:"distance-selector-button",width:16,height:16,"data-pr-tooltip":"Short Distance","data-pr-position":"bottom",fill:"white"}):t.value==JogDistanceAction.Medium?_jsx(JogMedium,{className:"distance-selector-button",width:16,height:16,"data-pr-tooltip":"Medium Distance","data-pr-position":"bottom",fill:"white"}):_jsx(JogLong,{className:"distance-selector-button",width:16,height:16,"data-pr-tooltip":"Long Distance","data-pr-position":"bottom",fill:"white"})})]}),this.props.showSpeedControl&&_jsxs("div",{className:"distance-selector p-inputgroup flex-1",children:[_jsx("span",{className:"p-inputgroup-addon",children:_jsx(Speed,{width:16,height:16,fill:"white"})}),_jsx(SelectButton,{value:this.state.jogSpeed,onChange:t=>this.handleSpeedChanged(t.value),optionLabel:"name",options:this.jogSpeedItems,allowEmpty:!1,itemTemplate:t=>t.value==JogSpeedAction.Slow?_jsx(SpeedSlow,{className:"distance-selector-button",width:16,height:16,"data-pr-tooltip":"Slow Speed","data-pr-position":"bottom",fill:"white"}):t.value==JogSpeedAction.Medium?_jsx(SpeedMedium,{className:"distance-selector-button",width:16,height:16,"data-pr-tooltip":"Medium Speed","data-pr-position":"bottom",fill:"white"}):_jsx(SpeedFast,{className:"distance-selector-button",width:16,height:16,"data-pr-tooltip":"Fast Speed","data-pr-position":"bottom",fill:"white"})})]})]})}}Object.defineProperty(JogPanel,"defaultProps",{enumerable:!0,configurable:!0,writable:!0,value:{onClicked:void 0,onJogDistanceChanged:void 0,buttonDefinitions:kDefaultButtonDefinitions,defaultJogDistance:JogDistanceAction.Short,defaultJogSpeed:JogSpeedAction.Medium,showDistanceControl:!0,showSpeedControl:!0}});export default JogPanel;
@@ -0,0 +1,81 @@
1
+ import React, { Component } from 'react';
2
+ import { EventEmitterContextType } from '../core/EventEmitterContext';
3
+ import { IndicatorColor } from "../core/IndicatorColor";
4
+ export { IndicatorColor };
5
+ interface LampProps {
6
+ /**
7
+ * State to be displayed<br/>
8
+ *
9
+ * Available states: **on**, **off** and **not available**:
10
+ *
11
+ * * `true` is treated as **on**
12
+ * * `false` is treated as **off**
13
+ * * `undefined` is treated as **not available**
14
+ */
15
+ value?: boolean | undefined;
16
+ /**
17
+ * X position (in pixels)
18
+ */
19
+ x?: number;
20
+ /**
21
+ * Y position (in pixels)
22
+ */
23
+ y?: number;
24
+ /**
25
+ * Width (in pixels)
26
+ */
27
+ width?: number;
28
+ /**
29
+ * Height (in pixels)<br/>
30
+ * @default width
31
+ */
32
+ height?: number;
33
+ /**
34
+ * CSS color for **enabled** state
35
+ */
36
+ onColor?: string;
37
+ /**
38
+ * CSS color for **disabled** state
39
+ */
40
+ offColor?: string;
41
+ /**
42
+ * CSS color for **not available** state
43
+ */
44
+ invalidColor?: string;
45
+ /**
46
+ * Custom class name to be attached
47
+ */
48
+ className?: string;
49
+ /**
50
+ * Enable absolute positioning for the component, allowing it to be
51
+ * placed on a specific position of its parent. This is useful when
52
+ * laying components over an image or wireframe.
53
+ */
54
+ useAbsolutePositioning?: boolean;
55
+ /**
56
+ * The topic to monitor to display. Optional.
57
+ */
58
+ topic?: string;
59
+ }
60
+ interface LampState {
61
+ subscribedValue?: boolean | null;
62
+ fontSize?: string;
63
+ }
64
+ export declare class Lamp extends Component<LampProps, LampState> {
65
+ static contextType: React.Context<EventEmitterContextType>;
66
+ protected unsubscribeTopicId: number | null;
67
+ static defaultProps: {
68
+ width: number;
69
+ height: number;
70
+ onColor: string;
71
+ offColor: string;
72
+ invalidColor: string;
73
+ useAbsolutePositioning: boolean;
74
+ };
75
+ constructor(props: LampProps);
76
+ componentDidMount(): void;
77
+ componentDidUpdate(prevProps: LampProps): void;
78
+ componentWillUnmount(): void;
79
+ render(): import("react/jsx-runtime").JSX.Element;
80
+ }
81
+ export default Lamp;
@@ -0,0 +1 @@
1
+ import{jsx as _jsx}from"react/jsx-runtime";import{Component}from"react";import clsx from"clsx";import{EventEmitterContext}from"../core/EventEmitterContext";import{IndicatorColor}from"../core/IndicatorColor";export{IndicatorColor};export class Lamp extends Component{constructor(e){super(e),Object.defineProperty(this,"unsubscribeTopicId",{enumerable:!0,configurable:!0,writable:!0,value:null}),this.state={subscribedValue:e.value,fontSize:"100%"}}componentDidMount(){const{topic:e}=this.props;if(e&&null===this.unsubscribeTopicId){const{subscribe:t}=this.context;this.unsubscribeTopicId=t(e,(e=>{this.setState({subscribedValue:e})}))}}componentDidUpdate(e){e.value!==this.props.value&&this.setState({subscribedValue:this.props.value})}componentWillUnmount(){if(null!==this.unsubscribeTopicId){const{unsubscribe:e}=this.context;e(this.unsubscribeTopicId),this.unsubscribeTopicId=null}}render(){const{x:e,y:t,width:o,height:i,className:s,onColor:r,offColor:n,invalidColor:l,useAbsolutePositioning:c}=this.props,{scale:a,xOffset:u,yOffset:p}=this.context,{subscribedValue:b}=this.state;let d=o||10;d<10&&(d=10);let m=i||10;m<10&&(m=10);let h,f=a||1;switch(0===f&&(f=1),b){case!0:h=r;break;case!1:h=n;break;default:h=l}const x={position:c?"absolute":"relative",display:c?"":"inline-block",verticalAlign:"middle",top:c&&t?`${p+f*t}px`:void 0,left:c&&e?`${u+f*e}px`:void 0,width:d?d*f+"px":void 0,height:m?m*f+"px":void 0,lineHeight:m?m*f+"px":void 0,backgroundColor:h,borderRadius:"20px"};return _jsx("div",{className:clsx(s),style:x})}}Object.defineProperty(Lamp,"contextType",{enumerable:!0,configurable:!0,writable:!0,value:EventEmitterContext}),Object.defineProperty(Lamp,"defaultProps",{enumerable:!0,configurable:!0,writable:!0,value:{width:22,height:22,onColor:"green",offColor:"gray",invalidColor:"black",useAbsolutePositioning:!1}});export default Lamp;
@@ -0,0 +1,103 @@
1
+ import { Component } from 'react';
2
+ import { SelectButtonProps } from 'primereact/selectbutton';
3
+ import { EventEmitterContextType } from '../core/EventEmitterContext';
4
+ import { IndicatorColor } from "../core/IndicatorColor";
5
+ export { IndicatorColor };
6
+ import { ActionMode } from '../core/ActionMode';
7
+ export { ActionMode };
8
+ import { IndicatorButtonState } from '../core/IndicatorButtonState';
9
+ export interface ToggleGroupProps extends SelectButtonProps {
10
+ /**
11
+ * Label of the group/row. Can be any element.
12
+ *
13
+ * ## Examples
14
+ * ```
15
+ * <ToggleGroup label="Simple Text" />
16
+ * <ToggleGroup label={<span><i className="pi pi-check"></i> Icon and Text</span>} />
17
+ * <ToggleGroup label={<YourCustomIconComponent />} />
18
+ * ```
19
+ */
20
+ label?: React.ReactNode;
21
+ /**
22
+ * Topic name to monitor for state indication.
23
+ * If `value` field is not undefined, then that value is used instead.
24
+ */
25
+ topic?: string;
26
+ /**
27
+ * Color for the button when the state is TRUE.
28
+ */
29
+ onColor?: IndicatorColor | IndicatorColor[];
30
+ /**
31
+ * Color for the button when the state is FALSE.
32
+ */
33
+ offColor?: IndicatorColor;
34
+ /**
35
+ * Name of the command to invoke on button events.
36
+ * If command is "*", then the commandTopic will be dispatched
37
+ * internally.
38
+ */
39
+ command?: string;
40
+ /**
41
+ * Optional topic parameter to send along with the command.
42
+ * If set, will automatically be included with commandArgs as
43
+ * the value of field 'topic.'
44
+ */
45
+ commandTopic?: string;
46
+ /**
47
+ * Optional arguments sent with the command.
48
+ */
49
+ commandArgs?: any;
50
+ /**
51
+ * Topic to disable button interaction.
52
+ */
53
+ disableTopic?: string;
54
+ /**
55
+ * Topic to control the visibility of the button.
56
+ */
57
+ invisibleTopic?: string;
58
+ /**
59
+ * Mode of input for the button (e.g., TAP, TOGGLE).
60
+ */
61
+ actionMode?: ActionMode;
62
+ /**
63
+ * Inverts the signal values for TAP, PRESSED, and RELEASED modes.
64
+ */
65
+ invert?: boolean;
66
+ }
67
+ export declare class ToggleGroup extends Component<ToggleGroupProps, IndicatorButtonState> {
68
+ static contextType: import("react").Context<EventEmitterContextType>;
69
+ constructor(props: ToggleGroupProps);
70
+ componentDidMount(): void;
71
+ componentDidUpdate(prevProps: ToggleGroupProps): void;
72
+ componentWillUnmount(): void;
73
+ /**
74
+ * Sets up subscriptions based on provided topics.
75
+ */
76
+ private setupSubscriptions;
77
+ /**
78
+ * Handles updates for the main topic.
79
+ */
80
+ private handleTopicUpdate;
81
+ /**
82
+ * Handles updates for the disable topic.
83
+ */
84
+ private handleDisableTopicUpdate;
85
+ /**
86
+ * Handles updates for the invisible topic.
87
+ */
88
+ private handleInvisibleTopicUpdate;
89
+ /**
90
+ * Handle the button being pressed down. Used for TAP and PRESSED action modes.
91
+ */
92
+ protected handleOnPressed(): void;
93
+ /**
94
+ * Handle the button being released. Used for TAP and RELEASED action modes.
95
+ */
96
+ protected handleOnReleased(): void;
97
+ /**
98
+ * Dispatch a value to any listeners.
99
+ * @param value The value to dispatch as part of the payload.
100
+ */
101
+ protected dispatchCommand(value: any): void;
102
+ render(): import("react/jsx-runtime").JSX.Element;
103
+ }
@@ -0,0 +1 @@
1
+ import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{Component}from"react";import{SelectButton}from"primereact/selectbutton";import{EventEmitterContext}from"../core/EventEmitterContext";import{IndicatorColor}from"../core/IndicatorColor";export{IndicatorColor};import{ActionMode}from"../core/ActionMode";export{ActionMode};function matchCurrentValue(e,t){if(null==t||0===t.length)return;let o=typeof e;if("boolean"==o){return e&&t.length>1?t[1]:t[0]}if("number"==o){let o=e;if(void 0!==o&&o<t.length)return t[o]}else if("string"==o)return e}function selectOnColor(e,t,o){if(!t||0===t.length)return IndicatorColor.IndicatorInvalid;let n=Array.isArray(o)?o:void 0!==o?[o]:[IndicatorColor.IndicatorInvalid],i=typeof e;if("boolean"===i)return e?n[0]:n.length>1?n[1]:n[0];if("number"===i&&t.length>e){if(n.length>e){return n[e]}return n[0]}if("string"===i){let o=t.indexOf(e);return-1!==o&&o<n.length?n[o]:n[0]}return null!=o?Array.isArray(o)?o[0]:o:IndicatorColor.IndicatorInvalid}export class ToggleGroup extends Component{constructor(e){super(e),Object.defineProperty(this,"handleTopicUpdate",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.setState({currentValue:e})}}),Object.defineProperty(this,"handleDisableTopicUpdate",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.setState({isDisabled:e})}}),Object.defineProperty(this,"handleInvisibleTopicUpdate",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.setState({isInvisible:e})}}),this.state={currentValue:void 0,isDisabled:!1,isInvisible:!1,isPressed:!1}}componentDidMount(){this.setupSubscriptions()}componentDidUpdate(e){}componentWillUnmount(){}setupSubscriptions(){const{topic:e,disableTopic:t,invisibleTopic:o}=this.props,{subscribe:n}=this.context;e&&n(e,this.handleTopicUpdate),t&&n(t,this.handleDisableTopicUpdate),o&&n(o,this.handleInvisibleTopicUpdate)}handleOnPressed(){const{isPressed:e}=this.state,{actionMode:t}=this.props;e||(this.setState({isPressed:!0}),t!==ActionMode.Tap&&t!==ActionMode.Pressed||this.dispatchCommand(!0))}handleOnReleased(){const{isPressed:e}=this.state,{actionMode:t}=this.props;e&&(this.setState({isPressed:!1}),t===ActionMode.Tap?this.dispatchCommand(!1):t===ActionMode.Released&&this.dispatchCommand(!0))}dispatchCommand(e){const{command:t,commandTopic:o,commandArgs:n}=this.props,{dispatch:i}=this.context;if(null!=t&&t.length>0){i({topic:t,payload:{topic:o,value:e,...n}})}}render(){const{currentValue:e,isDisabled:t,isInvisible:o}=this.state,{label:n,value:i,disabled:r,className:s,onColor:l,offColor:a,options:c,...d}=this.props;let p=e;void 0!==i&&(p=i);let u=selectOnColor(p,c,l);void 0===p&&(u=IndicatorColor.IndicatorInvalid);const h=null!=c&&c.length>2;return _jsxs("div",{className:"flex",children:[_jsx("style",{children:` \n ${void 0!==a?`\n .togglegroup-selectbutton-container .p-selectbutton .p-button {\n background-color: ${a};\n }\n `:""}\n .togglegroup-selectbutton-container .p-selectbutton .p-button.p-highlight {\n background-color: ${u} !important;\n border-color: ${u} !important;\n }\n .togglegroup-selectbutton-container .p-selectbutton .p-highlight {\n background-color: ${u} !important;\n border-color: ${u} !important;\n }\n `}),_jsxs("div",{className:"p-inputgroup togglegroup-selectbutton-container",children:[_jsx("span",{className:"p-inputgroup-addon",style:{flexGrow:1},children:n}),_jsx(SelectButton,{...d,options:c,disabled:t||r,multiple:h,className:`${s||""} ${void 0===p?"p-invalid":""}`.trim(),...o&&{style:{display:"none"}},value:matchCurrentValue(p,c),allowEmpty:!1,onMouseDown:()=>this.handleOnPressed(),onTouchStart:()=>this.handleOnPressed(),onMouseUp:()=>this.handleOnReleased(),onTouchEnd:()=>this.handleOnReleased()})]})]})}}Object.defineProperty(ToggleGroup,"contextType",{enumerable:!0,configurable:!0,writable:!0,value:EventEmitterContext});
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Enum for different input modes of the IndicatorButton.
3
+ */
4
+ export declare enum ActionMode {
5
+ Tap = "Tap",
6
+ Toggle = "Toggle",
7
+ Pressed = "Pressed",
8
+ Released = "Released"
9
+ }
@@ -0,0 +1 @@
1
+ export var ActionMode;!function(e){e.Tap="Tap",e.Toggle="Toggle",e.Pressed="Pressed",e.Released="Released"}(ActionMode||(ActionMode={}));
@@ -38,9 +38,28 @@ export interface Action {
38
38
  */
39
39
  payload?: any;
40
40
  }
41
+ /**
42
+ * Type declaration for the EventEmitter dispatch function, which
43
+ * publishes an Action globally throughout the EventEmitterContext.
44
+ */
41
45
  export type EmitterDispatchFunction = (action: Action) => void;
46
+ /**
47
+ * Type declaration for the EventEmitter dispatch function, which
48
+ * receives an Action on a specific topic broadcast through the EventEmitterContext.
49
+ */
42
50
  export type EmitterSubscribeFunction = (action: Action) => void;
51
+ /**
52
+ * Type declaration for the EventEmitter unsubscribe function, which
53
+ * receives an Action on a specific topic broadcast through the EventEmitterContext.
54
+ */
43
55
  export type EmitterUnsubscribeFunction = (action: Action) => void;
56
+ /**
57
+ * Defines the context for an event emitter used throughout a front-end application to manage and dispatch events.
58
+ * This interface includes methods for managing the application's state, handling global actions, communicating with the back end,
59
+ * subscribing to and unsubscribing from events, and accessing a global hub for event publishing and subscription management.
60
+ * It serves as a central point for event-driven interactions within the application, facilitating communication between
61
+ * components and the back end, as well as among components themselves.
62
+ */
44
63
  export interface EventEmitterContextType {
45
64
  /**
46
65
  * The current state of the event emitter, containing the latest event data.
@@ -86,8 +105,22 @@ export interface EventEmitterContextType {
86
105
  /**
87
106
  * A global context for managing event emission and subscription.
88
107
  *
89
- * Provides a mechanism for decoupled data sharing between components
90
- * using a publish-subscribe pattern.
108
+ * Creates a React context for the EventEmitter system, providing a structured way to manage events and data flow
109
+ * in a React application. It serves as a global event bus that components can subscribe to or emit events, allowing for
110
+ * a loosely coupled architecture. Additionally, it provides a mechanism for invoking backend functions and managing
111
+ * subscriptions, making it easier to integrate React components with backend services.
112
+ *
113
+ * The context includes several key functionalities:
114
+ * - `state`: Maintains the current state of subscriptions and their identifiers.
115
+ * - `dispatch`: Allows components to emit events with specific topics and payloads, which can be listened to by other components.
116
+ * - `subscribe`: Enables components to listen to specific topics and react to those events by providing a callback function.
117
+ * - `unsubscribe`: Provides a way for components to stop listening to events, helping prevent memory leaks and unnecessary updates.
118
+ * - `invoke`: Facilitates calling backend functions with specific arguments and handling their responses asynchronously.
119
+ * - `getSubscriptions`: Offers insight into current active subscriptions, useful for debugging purposes.
120
+ *
121
+ * This context is essential for applications that require a high degree of inter-component communication or need to
122
+ * interact with a backend efficiently.
123
+ *
91
124
  * For more information, see [Additional Documentation](../additional-docs/GlobalEventEmitter.md).
92
125
  *
93
126
  * ## Usage
@@ -182,6 +215,13 @@ export interface EventEmitterContextType {
182
215
  *
183
216
  * ```
184
217
  *
218
+ * For applications that need to access the instance of the hub, get the current instance
219
+ * from the EventEmitterContext:
220
+ *
221
+ * ```
222
+ * const {hub} = useContext(EventEmitterContext);
223
+ * * ```
224
+ *
185
225
  *
186
226
  */
187
227
  export declare const EventEmitterContext: React.Context<EventEmitterContextType>;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Common state for the indicator buttons, toggles or similar components.
3
+ */
4
+ export interface IndicatorButtonState {
5
+ /**
6
+ * Current value/state of the button based on the subscribed topic.
7
+ */
8
+ currentValue?: boolean | number | string;
9
+ /**
10
+ * Indicates whether the button is disabled.
11
+ */
12
+ isDisabled?: boolean;
13
+ /**
14
+ * Indicates whether the button is invisible.
15
+ */
16
+ isInvisible?: boolean;
17
+ /**
18
+ * The button is in the "down" state.
19
+ */
20
+ isPressed: boolean;
21
+ }
@@ -0,0 +1 @@
1
+ export{};
@@ -3,26 +3,28 @@
3
3
  --dark-hl-0: #9CDCFE;
4
4
  --light-hl-1: #000000;
5
5
  --dark-hl-1: #D4D4D4;
6
- --light-hl-2: #008000;
7
- --dark-hl-2: #6A9955;
8
- --light-hl-3: #0000FF;
9
- --dark-hl-3: #569CD6;
10
- --light-hl-4: #000000;
11
- --dark-hl-4: #C8C8C8;
12
- --light-hl-5: #098658;
13
- --dark-hl-5: #B5CEA8;
14
- --light-hl-6: #267F99;
15
- --dark-hl-6: #4EC9B0;
16
- --light-hl-7: #0070C1;
17
- --dark-hl-7: #4FC1FF;
18
- --light-hl-8: #795E26;
19
- --dark-hl-8: #DCDCAA;
20
- --light-hl-9: #AF00DB;
21
- --dark-hl-9: #C586C0;
22
- --light-hl-10: #A31515;
23
- --dark-hl-10: #CE9178;
6
+ --light-hl-2: #AF00DB;
7
+ --dark-hl-2: #C586C0;
8
+ --light-hl-3: #A31515;
9
+ --dark-hl-3: #CE9178;
10
+ --light-hl-4: #098658;
11
+ --dark-hl-4: #B5CEA8;
12
+ --light-hl-5: #008000;
13
+ --dark-hl-5: #6A9955;
14
+ --light-hl-6: #0000FF;
15
+ --dark-hl-6: #569CD6;
16
+ --light-hl-7: #000000;
17
+ --dark-hl-7: #C8C8C8;
18
+ --light-hl-8: #267F99;
19
+ --dark-hl-8: #4EC9B0;
20
+ --light-hl-9: #0070C1;
21
+ --dark-hl-9: #4FC1FF;
22
+ --light-hl-10: #795E26;
23
+ --dark-hl-10: #DCDCAA;
24
24
  --light-hl-11: #CD3131;
25
25
  --dark-hl-11: #F44747;
26
+ --light-hl-12: #811F3F;
27
+ --dark-hl-12: #D16969;
26
28
  --light-code-background: #FFFFFF;
27
29
  --dark-code-background: #1E1E1E;
28
30
  }
@@ -40,6 +42,7 @@
40
42
  --hl-9: var(--light-hl-9);
41
43
  --hl-10: var(--light-hl-10);
42
44
  --hl-11: var(--light-hl-11);
45
+ --hl-12: var(--light-hl-12);
43
46
  --code-background: var(--light-code-background);
44
47
  } }
45
48
 
@@ -56,6 +59,7 @@
56
59
  --hl-9: var(--dark-hl-9);
57
60
  --hl-10: var(--dark-hl-10);
58
61
  --hl-11: var(--dark-hl-11);
62
+ --hl-12: var(--dark-hl-12);
59
63
  --code-background: var(--dark-code-background);
60
64
  } }
61
65
 
@@ -72,6 +76,7 @@
72
76
  --hl-9: var(--light-hl-9);
73
77
  --hl-10: var(--light-hl-10);
74
78
  --hl-11: var(--light-hl-11);
79
+ --hl-12: var(--light-hl-12);
75
80
  --code-background: var(--light-code-background);
76
81
  }
77
82
 
@@ -88,6 +93,7 @@
88
93
  --hl-9: var(--dark-hl-9);
89
94
  --hl-10: var(--dark-hl-10);
90
95
  --hl-11: var(--dark-hl-11);
96
+ --hl-12: var(--dark-hl-12);
91
97
  --code-background: var(--dark-code-background);
92
98
  }
93
99
 
@@ -103,4 +109,5 @@
103
109
  .hl-9 { color: var(--hl-9); }
104
110
  .hl-10 { color: var(--hl-10); }
105
111
  .hl-11 { color: var(--hl-11); }
112
+ .hl-12 { color: var(--hl-12); }
106
113
  pre, code { background: var(--code-background); }
@@ -1 +1 @@
1
- window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAACrWY2W7aQBSG38XcojYhJE25y6pQqQUpy00UWYM9qS1sjzseR0VV3r2yje1ZzhkPgdzCme//zzILPP/zBP0rvJkXsDRnGc1E4Y29IIqTkNPMmz13AddLEnpjLyci8mZeysIyocXXfplfBXyJRJp4Y28dZ6E3m8CkkL6SMhFusFEf3UCnx9+nJ0fT93HHewp+sM2ShBeBiFnWY2lWpiZUjVYNnwPUy1IIls1DV24bbyOrtXwts9oLxDSLejZ9f5Fg8yyMAyIYt5azi3JqUBd9xZKdwCNjJdYzlxnQ2MODANQiSEhRYFikKseTc7jETWvdPDexn1ZuCf9JRZcVhkvf7KafLKSWfaKz+0X4ZkGLb+vslm9tRtVlVGbJWV70WnEmKH8lwU5yNUMbgNMzXPNeEEH31KwZpiY4zTtMWx261yzjs9CwbVLqblwUa6vpRbE+2C3Ushw2gGILPNErmGFOO80Xxfo6Jgn7PWSriTpkohLRLV3dKLAheyxiWT9qn0hS0uu4yBOysRqWA52q8KtMKSerhN4ynhKxyOv+7KYxQiHo0wTMB6iUooUn19RLrljAOMVebHFKs6JyeMWy+jMgW059I27fsUKZLne4xbVyJIIi5mrbAWyReiM8rhqNKg0InUyULt280UzcpLEQlNubAUQ6teOuXO1IHDVL7Dc6XnwIC72p1ZIDqx42OXbtITIIxKZru1wRFeQulZjlqgh4nO9eJ3mltVrNsuooICKIbrfXSi8mNrm1UPB6TfLo+7fj04kpu3W5oh/VNQCOwo9Zsa80gBgUt+1R7TxwnErjTIDVlpy9xSHl8APCQa4FDPxSzEuxJFU8fPFx6isxjg8+kKrVS+VaVLRzs7twq/2NmVaDDvIakIZMo8Mr4dmSM3nM4j8lnYN/oXDqt187uTdZ2rx0NBirDUb93LiP0zLB/kfg1FeDDvBCAIAu//UgXvsnlYm2WdcfoBELEL8RC9wuYhZchKF8wms/JqXZqphI/NBpFRnL0GmonRvhwEgohYDeE1G5+vhjpF088O64K1fbXlE7Q4qysViwpmLOBlh9lIX1QEoe20FtCEYJOCWCKvXpu1WBugCjP4qVS1LA5fG3X+63Q3WQw840TLVbUmaB5vQ9ODQBvhRwkDQVmFuqpkEt3Y6JmoXStg2rLwUcJm0Z5pi2YVBPu2WiZoG08X3lt9+6HjsaSnPXoGBm+9P65T9+qgiTFBkAAA=="
1
+ window.navigationData = "data:application/octet-stream;base64,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"
@@ -1 +1 @@
1
- window.searchData = "data:application/octet-stream;base64,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";
1
+ window.searchData = "data:application/octet-stream;base64,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";