@adcops/autocore-react 3.0.1 → 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 (284) 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/IndicatorButtonState.d.ts +21 -0
  88. package/dist/core/IndicatorButtonState.js +1 -0
  89. package/docs/assets/highlight.css +25 -18
  90. package/docs/assets/navigation.js +1 -1
  91. package/docs/assets/search.js +1 -1
  92. package/docs/classes/components_BlocklyEditor.BlocklyEditor.html +124 -0
  93. package/docs/classes/components_CodeEditor.CodeEditor.html +128 -0
  94. package/docs/classes/components_Indicator.Indicator.html +8 -8
  95. package/docs/classes/components_IndicatorButton.IndicatorButton.html +17 -17
  96. package/docs/classes/components_JogPanel.JogPanel.html +138 -0
  97. package/docs/classes/components_Lamp.Lamp.html +105 -0
  98. package/docs/classes/components_OskDialog.OskDialog.html +5 -5
  99. package/docs/classes/components_ToggleGroup.ToggleGroup.html +118 -0
  100. package/docs/classes/components_ValueDisplay.ValueDisplay.html +4 -4
  101. package/docs/classes/core_ValueSimulator.ValueSimulator.html +2 -2
  102. package/docs/classes/hub_HubBase.HubBase.html +4 -4
  103. package/docs/classes/hub_HubSimulate.HubSimulate.html +2 -2
  104. package/docs/classes/hub_HubSocketIo.HubSocketIo.html +5 -5
  105. package/docs/classes/hub_HubTauri.HubTauri.html +5 -5
  106. package/docs/enums/components_JogPanel.JogDistanceAction.html +5 -0
  107. package/docs/enums/components_JogPanel.JogPanelAction.html +18 -0
  108. package/docs/enums/components_JogPanel.JogSpeedAction.html +5 -0
  109. package/docs/enums/core_ActionMode.ActionMode.html +6 -0
  110. package/docs/enums/core_IndicatorColor.IndicatorColor.html +23 -0
  111. package/docs/functions/assets_BlocklyLogo.default.html +1 -0
  112. package/docs/functions/assets_Distance.default.html +1 -0
  113. package/docs/functions/assets_JogLong.default.html +1 -0
  114. package/docs/functions/assets_JogMedium.default.html +1 -0
  115. package/docs/functions/assets_JogShort.default.html +1 -0
  116. package/docs/functions/assets_PythonLogo.default.html +1 -0
  117. package/docs/functions/assets_Rotation3D.default.html +1 -0
  118. package/docs/functions/assets_RotationCcw.default.html +1 -0
  119. package/docs/functions/assets_RotationCcwA.default.html +1 -0
  120. package/docs/functions/assets_RotationCcwB.default.html +1 -0
  121. package/docs/functions/assets_RotationCcwC.default.html +1 -0
  122. package/docs/functions/assets_RotationCw.default.html +1 -0
  123. package/docs/functions/assets_RotationCwA.default.html +1 -0
  124. package/docs/functions/assets_RotationCwB.default.html +1 -0
  125. package/docs/functions/assets_RotationCwC.default.html +1 -0
  126. package/docs/functions/assets_Run.default.html +1 -0
  127. package/docs/functions/assets_Speed.default.html +1 -0
  128. package/docs/functions/assets_SpeedFast.default.html +1 -0
  129. package/docs/functions/assets_SpeedMedium.default.html +1 -0
  130. package/docs/functions/assets_SpeedNone.default.html +1 -0
  131. package/docs/functions/assets_SpeedSlow.default.html +1 -0
  132. package/docs/functions/assets_Walk.default.html +1 -0
  133. package/docs/functions/components_BlocklyEditor.createCustomToolbox.html +6 -0
  134. package/docs/functions/components_Osk.Osk.html +2 -2
  135. package/docs/functions/core_EventEmitterContext.EventEmitterProvider.html +2 -2
  136. package/docs/functions/core_UniqueId.UniqueId.html +2 -2
  137. package/docs/functions/core_hoc.hocAddSubscription.html +2 -2
  138. package/docs/functions/hub.createHub.html +2 -2
  139. package/docs/hierarchy.html +1 -1
  140. package/docs/index.html +18 -2
  141. package/docs/interfaces/components_IndicatorButton.IndicatorButtonProps.html +160 -132
  142. package/docs/interfaces/components_JogPanel.JogPanelButtonDefinition.html +5 -0
  143. package/docs/interfaces/components_ToggleGroup.ToggleGroupProps.html +636 -0
  144. package/docs/interfaces/core_EventEmitterContext.Action.html +2 -2
  145. package/docs/interfaces/core_EventEmitterContext.EventEmitterContextType.html +2 -2
  146. package/docs/interfaces/core_EventEmitterContext.State.html +2 -2
  147. package/docs/interfaces/core_EventEmitterContext.Subscription.html +2 -2
  148. package/docs/interfaces/core_IndicatorButtonState.IndicatorButtonState.html +10 -0
  149. package/docs/interfaces/core_PositionContext.IPositionContext.html +2 -2
  150. package/docs/modules/assets.html +23 -0
  151. package/docs/modules/assets_BlocklyLogo.html +2 -0
  152. package/docs/modules/assets_Distance.html +2 -0
  153. package/docs/modules/assets_JogLong.html +2 -0
  154. package/docs/modules/assets_JogMedium.html +2 -0
  155. package/docs/modules/assets_JogShort.html +2 -0
  156. package/docs/modules/assets_PythonLogo.html +2 -0
  157. package/docs/modules/assets_Rotation3D.html +2 -0
  158. package/docs/modules/assets_RotationCcw.html +2 -0
  159. package/docs/modules/assets_RotationCcwA.html +2 -0
  160. package/docs/modules/assets_RotationCcwB.html +2 -0
  161. package/docs/modules/assets_RotationCcwC.html +2 -0
  162. package/docs/modules/assets_RotationCw.html +2 -0
  163. package/docs/modules/assets_RotationCwA.html +2 -0
  164. package/docs/modules/assets_RotationCwB.html +2 -0
  165. package/docs/modules/assets_RotationCwC.html +2 -0
  166. package/docs/modules/assets_Run.html +2 -0
  167. package/docs/modules/assets_Speed.html +2 -0
  168. package/docs/modules/assets_SpeedFast.html +2 -0
  169. package/docs/modules/assets_SpeedMedium.html +2 -0
  170. package/docs/modules/assets_SpeedNone.html +2 -0
  171. package/docs/modules/assets_SpeedSlow.html +2 -0
  172. package/docs/modules/assets_Walk.html +2 -0
  173. package/docs/modules/components_BlocklyEditor.html +5 -0
  174. package/docs/modules/components_CodeEditor.html +3 -0
  175. package/docs/modules/components_Indicator.html +2 -2
  176. package/docs/modules/components_IndicatorButton.html +4 -4
  177. package/docs/modules/components_JogPanel.html +9 -0
  178. package/docs/modules/components_Lamp.html +4 -0
  179. package/docs/modules/components_Osk.html +2 -2
  180. package/docs/modules/components_OskDialog.html +2 -2
  181. package/docs/modules/components_ToggleGroup.html +5 -0
  182. package/docs/modules/components_ValueDisplay.html +2 -2
  183. package/docs/modules/core_ActionMode.html +2 -0
  184. package/docs/modules/core_EventEmitterContext.html +2 -2
  185. package/docs/modules/{components_IndicatorColor.html → core_IndicatorButtonState.html} +2 -2
  186. package/docs/modules/core_IndicatorColor.html +2 -0
  187. package/docs/modules/core_MaskPatterns.html +2 -2
  188. package/docs/modules/core_NumerableTypes.html +2 -2
  189. package/docs/modules/core_PositionContext.html +2 -2
  190. package/docs/modules/core_UniqueId.html +2 -2
  191. package/docs/modules/core_ValueSimulator.html +2 -2
  192. package/docs/modules/core_hoc.html +2 -2
  193. package/docs/modules/hub.html +2 -2
  194. package/docs/modules/hub_HubBase.html +2 -2
  195. package/docs/modules/hub_HubSimulate.html +2 -2
  196. package/docs/modules/hub_HubSocketIo.html +2 -2
  197. package/docs/modules/hub_HubTauri.html +2 -2
  198. package/docs/types/components_IndicatorButton.IndicatorButtonOptionsType.html +1 -0
  199. package/docs/types/core_EventEmitterContext.EmitterDispatchFunction.html +2 -2
  200. package/docs/types/core_EventEmitterContext.EmitterSubscribeFunction.html +2 -2
  201. package/docs/types/core_EventEmitterContext.EmitterUnsubscribeFunction.html +2 -2
  202. package/docs/types/core_NumerableTypes.NumerableFormatOptions.html +2 -2
  203. package/docs/types/core_hoc.HocAddSubscriptionProps.html +2 -2
  204. package/docs/variables/components_BlocklyEditor.StandardToolbox.html +1 -0
  205. package/docs/variables/components_JogPanel.kDefaultButtonDefinitions.html +2 -0
  206. package/docs/variables/components_JogPanel.kRotationButtonDefinitions.html +1 -0
  207. package/docs/variables/core_EventEmitterContext.EventEmitterContext.html +6 -6
  208. package/docs/variables/core_MaskPatterns.PrimeReactMaskPatterns.html +2 -2
  209. package/docs/variables/core_MaskPatterns.RegExMaskPatterns.html +2 -2
  210. package/docs/variables/core_PositionContext.DimensionsContext.html +2 -2
  211. package/package.json +7 -3
  212. package/readme.md +33 -0
  213. package/src/assets/BlocklyLogo.tsx +27 -0
  214. package/src/assets/Distance.tsx +18 -0
  215. package/src/assets/JogLong.tsx +13 -0
  216. package/src/assets/JogMedium.tsx +13 -0
  217. package/src/assets/JogShort.tsx +13 -0
  218. package/src/assets/PythonLogo.tsx +83 -0
  219. package/src/assets/Rotation3D.tsx +13 -0
  220. package/src/assets/RotationCcw.tsx +33 -0
  221. package/src/assets/RotationCcwA.tsx +45 -0
  222. package/src/assets/RotationCcwB.tsx +45 -0
  223. package/src/assets/RotationCcwC.tsx +45 -0
  224. package/src/assets/RotationCw.tsx +31 -0
  225. package/src/assets/RotationCwA.tsx +42 -0
  226. package/src/assets/RotationCwB.tsx +42 -0
  227. package/src/assets/RotationCwC.tsx +42 -0
  228. package/src/assets/Run.tsx +13 -0
  229. package/src/assets/Speed.tsx +18 -0
  230. package/src/assets/SpeedFast.tsx +13 -0
  231. package/src/assets/SpeedMedium.tsx +13 -0
  232. package/src/assets/SpeedNone.tsx +13 -0
  233. package/src/assets/SpeedSlow.tsx +13 -0
  234. package/src/assets/Walk.tsx +13 -0
  235. package/src/assets/index.ts +22 -0
  236. package/src/assets/svg/blockly_logo.svg +82 -0
  237. package/src/assets/svg/distance.svg +40 -0
  238. package/src/assets/svg/jog_long.svg +1 -0
  239. package/src/assets/svg/jog_medium.svg +1 -0
  240. package/src/assets/svg/jog_short.svg +1 -0
  241. package/src/assets/svg/python_logo.svg +246 -0
  242. package/src/assets/svg/rotation_3d.svg +1 -0
  243. package/src/assets/svg/rotation_ccw.svg +50 -0
  244. package/src/assets/svg/rotation_ccw_a.svg +57 -0
  245. package/src/assets/svg/rotation_ccw_b.svg +57 -0
  246. package/src/assets/svg/rotation_ccw_c.svg +57 -0
  247. package/src/assets/svg/rotation_cw.svg +49 -0
  248. package/src/assets/svg/rotation_cw_a.svg +30 -0
  249. package/src/assets/svg/rotation_cw_b.svg +30 -0
  250. package/src/assets/svg/rotation_cw_c.svg +30 -0
  251. package/src/assets/svg/run.svg +1 -0
  252. package/src/assets/svg/speed.svg +39 -0
  253. package/src/assets/svg/speed_fast.svg +1 -0
  254. package/src/assets/svg/speed_medium.svg +1 -0
  255. package/src/assets/svg/speed_none.svg +1 -0
  256. package/src/assets/svg/speed_slow.svg +1 -0
  257. package/src/assets/svg/walk.svg +1 -0
  258. package/src/components/BlocklyEditor.css +25 -0
  259. package/src/components/BlocklyEditor.tsx +598 -0
  260. package/src/components/CodeEditor.tsx +156 -0
  261. package/src/components/Indicator.tsx +63 -118
  262. package/src/components/IndicatorButton.tsx +104 -50
  263. package/src/components/JogPanel.css +41 -0
  264. package/src/components/JogPanel.tsx +458 -0
  265. package/src/components/Lamp.tsx +243 -0
  266. package/src/components/ToggleGroup.tsx +429 -0
  267. package/src/core/ActionMode.ts +20 -0
  268. package/src/core/IndicatorButtonState.ts +34 -0
  269. package/tools/copy-distribution-files.cjs +3 -2
  270. package/dist/components/DPad.css +0 -522
  271. package/dist/components/DPad.d.ts +0 -34
  272. package/dist/components/DPad.js +0 -1
  273. package/docs/enums/components_DPad.VcJoyPadAction.html +0 -10
  274. package/docs/enums/components_DPad.VcJoyPadButtonId.html +0 -7
  275. package/docs/enums/components_IndicatorButton.ActionMode.html +0 -6
  276. package/docs/enums/components_IndicatorColor.IndicatorColor.html +0 -23
  277. package/docs/functions/components_DPad.VcDPad.html +0 -5
  278. package/docs/interfaces/components_IndicatorButton.IndicatorButtonState.html +0 -10
  279. package/docs/modules/components_DPad.html +0 -5
  280. package/src/components/DPad.css +0 -522
  281. package/src/components/DPad.tsx +0 -94
  282. /package/dist/{components → core}/IndicatorColor.d.ts +0 -0
  283. /package/dist/{components → core}/IndicatorColor.js +0 -0
  284. /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={}));
@@ -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,H4sIAAAAAAAACrWY207jMBCG3yW9RbscCgu9AwqiK7GtON0gFLmOIVaTOOs4iGrFu6+SNIljexyHltt25puZ3zNjt8//PEE+hDfxMItTlpBEZN6eh0MaBZwk3uS5MZguUODteSkSoTfxYhbkEcl+tm5+YfAjFHHk7XkrmgTe5NBMCsgryiPhBhu11hV0fHA2Ptoff+41vCf8m60XKDjHgrKkxZIkj3Vo17qb8KmBepELwZJZ4Mqt7W3krpaveVLmYmLqop6MP18k2CwJKEaCcaucjZXTATXWlywaBB5pntCZufSAwu5vBIMWOEJZBmEBVQ4OT80SV0frlnNl+21yS/hvEl2O0C99NU23LCCWOVHZrRM8LKD4tpPd8K2HUZwyGGbBWZq1sWgiCH9FeFC4kqE0wPEJHPNeIEG2jFky9JjGbh7QbaXpVr0M90LFtoXqTuM8W1mTnmernd1CNcthADppGTd6AdOSU7b5PFtNKYrYW19aldUuC5WIbuWqiRoGssUCKaur9glFOZnSLI3Q2pqwbOikwp88JhwtI3LNeIzEPC3PZ1iMEQgBnybGegxKdWLBxVV6yYphxgnwYrt6J4m4iqkQhF+ypPzUUC8nvsHSSdSbfDmQOKpc7NcIsAQBrOkh1120Bq+HdQrtWiAMALHFtW10IAqwwCVmvswwp+lwnWRPq1qVW9F/SODwerPL2mBinVqFMvsrIffPfh0cH+phN1kuyVfjagDHwI9Jtm1oA6I3uG1G3xGnxbYZ1pXdkEdQtAVn7zQg3HxrOYSrAdYL7RZlqwUqzM3LlhNfNnHaOgtOY3JHEBZmuiJbh2/2tUh2R96uPobH0dy0ELJKzb1SbBRIp67RTi49qa0VutnT3M1yJQuW0cLUft8oVts+YwCiyy9GMF91o6oBVE/bRp3SmCRZIWDfiKtQzdPaRo8J/ZuTmfFvGk78+msnuXWWsh4amhmr7IHySXNP4zyC/qvgxO8a7aArDECX/5OAXNtnm462pa4+ckOGgXxDht3eXQyfB4F8oSs/WKXBLpiAfd/lFGpuYDeUmWvmhpboCGF6Pob58utvz9q555l5ky83Z0XsDMnKxmJ4RcSM9bBaKwvrAeWc2kG1CUTBnCBBOvq0p1WAGgPtfDqpXKDMLI+/+XK7CVVBDpOpJVWPpMwyJqfOYF8H+JLBTsrswNxK1RNUym2YYLKmsm3N6ksGuylbhjmWrSWoll0zwWQNZcNz5dffuq4dBaVkV6HMzPrn+8t/QOSaZXgZAAA="
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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";