@adcops/autocore-react 3.0.0

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 (136) hide show
  1. package/LICENSE +59 -0
  2. package/additional-docs/ButtonApiSpecs.md +48 -0
  3. package/additional-docs/GlobalEventEmitter.md +244 -0
  4. package/additional-docs/general_recommendations.md +22 -0
  5. package/dist/components/DPad.css +522 -0
  6. package/dist/components/DPad.d.ts +34 -0
  7. package/dist/components/DPad.js +1 -0
  8. package/dist/components/Indicator.d.ts +81 -0
  9. package/dist/components/Indicator.js +1 -0
  10. package/dist/components/IndicatorButton.d.ts +137 -0
  11. package/dist/components/IndicatorButton.js +1 -0
  12. package/dist/components/IndicatorColor.d.ts +26 -0
  13. package/dist/components/IndicatorColor.js +1 -0
  14. package/dist/components/Osk.d.ts +14 -0
  15. package/dist/components/Osk.js +1 -0
  16. package/dist/components/OskDialog.d.ts +33 -0
  17. package/dist/components/OskDialog.js +1 -0
  18. package/dist/components/ValueDisplay.d.ts +99 -0
  19. package/dist/components/ValueDisplay.js +1 -0
  20. package/dist/components/osk.css +123 -0
  21. package/dist/core/EventEmitterContext.d.ts +223 -0
  22. package/dist/core/EventEmitterContext.js +1 -0
  23. package/dist/core/MaskPatterns.d.ts +71 -0
  24. package/dist/core/MaskPatterns.js +1 -0
  25. package/dist/core/NumerableTypes.d.ts +58 -0
  26. package/dist/core/NumerableTypes.js +1 -0
  27. package/dist/core/PositionContext.d.ts +38 -0
  28. package/dist/core/PositionContext.js +1 -0
  29. package/dist/core/UniqueId.d.ts +16 -0
  30. package/dist/core/UniqueId.js +1 -0
  31. package/dist/core/ValueSimulator.d.ts +71 -0
  32. package/dist/core/ValueSimulator.js +1 -0
  33. package/dist/core/hoc.d.ts +31 -0
  34. package/dist/core/hoc.js +1 -0
  35. package/dist/hub/HubBase.d.ts +169 -0
  36. package/dist/hub/HubBase.js +1 -0
  37. package/dist/hub/HubSimulate.d.ts +20 -0
  38. package/dist/hub/HubSimulate.js +1 -0
  39. package/dist/hub/HubSocketIo.d.ts +101 -0
  40. package/dist/hub/HubSocketIo.js +1 -0
  41. package/dist/hub/HubTauri.d.ts +86 -0
  42. package/dist/hub/HubTauri.js +1 -0
  43. package/dist/hub/index.d.ts +13 -0
  44. package/dist/hub/index.js +1 -0
  45. package/docs/.nojekyll +1 -0
  46. package/docs/assets/highlight.css +106 -0
  47. package/docs/assets/icons.js +15 -0
  48. package/docs/assets/icons.svg +1 -0
  49. package/docs/assets/main.js +59 -0
  50. package/docs/assets/navigation.js +1 -0
  51. package/docs/assets/search.js +1 -0
  52. package/docs/assets/style.css +1414 -0
  53. package/docs/classes/components_Indicator.Indicator.html +105 -0
  54. package/docs/classes/components_IndicatorButton.IndicatorButton.html +119 -0
  55. package/docs/classes/components_OskDialog.OskDialog.html +117 -0
  56. package/docs/classes/components_ValueDisplay.ValueDisplay.html +104 -0
  57. package/docs/classes/core_ValueSimulator.ValueSimulator.html +41 -0
  58. package/docs/classes/hub_HubBase.HubBase.html +67 -0
  59. package/docs/classes/hub_HubSimulate.HubSimulate.html +72 -0
  60. package/docs/classes/hub_HubSocketIo.HubSocketIo.html +80 -0
  61. package/docs/classes/hub_HubTauri.HubTauri.html +80 -0
  62. package/docs/enums/components_DPad.VcJoyPadAction.html +10 -0
  63. package/docs/enums/components_DPad.VcJoyPadButtonId.html +7 -0
  64. package/docs/enums/components_IndicatorButton.ActionMode.html +6 -0
  65. package/docs/enums/components_IndicatorColor.IndicatorColor.html +13 -0
  66. package/docs/functions/components_DPad.VcDPad.html +5 -0
  67. package/docs/functions/components_Osk.Osk.html +5 -0
  68. package/docs/functions/core_EventEmitterContext.EventEmitterProvider.html +8 -0
  69. package/docs/functions/core_UniqueId.UniqueId.html +4 -0
  70. package/docs/functions/core_hoc.hocAddSubscription.html +6 -0
  71. package/docs/functions/hub.createHub.html +3 -0
  72. package/docs/hierarchy.html +1 -0
  73. package/docs/index.html +69 -0
  74. package/docs/interfaces/components_IndicatorButton.IndicatorButtonProps.html +635 -0
  75. package/docs/interfaces/components_IndicatorButton.IndicatorButtonState.html +10 -0
  76. package/docs/interfaces/core_DimensionsContext.IDimensionsContext.html +4 -0
  77. package/docs/interfaces/core_EventEmitterContext.Action.html +5 -0
  78. package/docs/interfaces/core_EventEmitterContext.EventEmitterContextType.html +18 -0
  79. package/docs/interfaces/core_EventEmitterContext.State.html +8 -0
  80. package/docs/interfaces/core_EventEmitterContext.Subscription.html +6 -0
  81. package/docs/modules/components_DPad.html +5 -0
  82. package/docs/modules/components_Indicator.html +4 -0
  83. package/docs/modules/components_IndicatorButton.html +7 -0
  84. package/docs/modules/components_IndicatorColor.html +2 -0
  85. package/docs/modules/components_Osk.html +3 -0
  86. package/docs/modules/components_OskDialog.html +3 -0
  87. package/docs/modules/components_ValueDisplay.html +3 -0
  88. package/docs/modules/core_DimensionsContext.html +4 -0
  89. package/docs/modules/core_EventEmitterContext.html +11 -0
  90. package/docs/modules/core_InputPatterns.html +2 -0
  91. package/docs/modules/core_NumerableTypes.html +2 -0
  92. package/docs/modules/core_UniqueId.html +2 -0
  93. package/docs/modules/core_ValueSimulator.html +3 -0
  94. package/docs/modules/core_hoc.html +3 -0
  95. package/docs/modules/hub.html +6 -0
  96. package/docs/modules/hub_HubBase.html +3 -0
  97. package/docs/modules/hub_HubSimulate.html +3 -0
  98. package/docs/modules/hub_HubSocketIo.html +3 -0
  99. package/docs/modules/hub_HubTauri.html +2 -0
  100. package/docs/types/core_EventEmitterContext.EmitterDispatchFunction.html +1 -0
  101. package/docs/types/core_EventEmitterContext.EmitterSubscribeFunction.html +1 -0
  102. package/docs/types/core_EventEmitterContext.EmitterUnsubscribeFunction.html +1 -0
  103. package/docs/types/core_NumerableTypes.NumerableFormatOptions.html +1 -0
  104. package/docs/types/core_hoc.HocAddSubscriptionProps.html +4 -0
  105. package/docs/variables/core_DimensionsContext.DimensionsContext.html +1 -0
  106. package/docs/variables/core_EventEmitterContext.EventEmitterContext.html +5 -0
  107. package/docs/variables/core_InputPatterns.InputPatterns.html +2 -0
  108. package/package.json +79 -0
  109. package/readme.md +140 -0
  110. package/src/components/DPad.css +522 -0
  111. package/src/components/DPad.tsx +94 -0
  112. package/src/components/Indicator.tsx +243 -0
  113. package/src/components/IndicatorButton.tsx +306 -0
  114. package/src/components/IndicatorColor.ts +36 -0
  115. package/src/components/Osk.tsx +193 -0
  116. package/src/components/OskDialog.tsx +165 -0
  117. package/src/components/ValueDisplay.tsx +181 -0
  118. package/src/components/osk.css +123 -0
  119. package/src/core/EventEmitterContext.tsx +394 -0
  120. package/src/core/MaskPatterns.ts +82 -0
  121. package/src/core/NumerableTypes.ts +81 -0
  122. package/src/core/PositionContext.ts +60 -0
  123. package/src/core/UniqueId.ts +41 -0
  124. package/src/core/ValueSimulator.ts +167 -0
  125. package/src/core/hoc.tsx +65 -0
  126. package/src/hub/HubBase.ts +293 -0
  127. package/src/hub/HubSimulate.ts +47 -0
  128. package/src/hub/HubSocketIo.ts +166 -0
  129. package/src/hub/HubTauri.ts +145 -0
  130. package/src/hub/index.ts +41 -0
  131. package/terser.config.cjs +25 -0
  132. package/todo.md +18 -0
  133. package/tools/copy-distribution-files.cjs +73 -0
  134. package/tools/minify.cjs +56 -0
  135. package/tsconfig.json +34 -0
  136. package/typedoc.json +13 -0
@@ -0,0 +1,522 @@
1
+ /*
2
+ * Copyright (C) 2024 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2024-01-16 13:17:33
4
+ * -----
5
+ * Last Modified: 2024-03-08 07:16:53
6
+ * -----
7
+ *
8
+ */
9
+
10
+
11
+ .d-pad {
12
+ position: relative;
13
+ width: 200px;
14
+ height: 200px;
15
+ border-radius: 48%;
16
+ overflow: hidden;
17
+
18
+ &:before {
19
+ content: '';
20
+ position: absolute;
21
+ top: 50%;
22
+ left: 50%;
23
+ border-radius: 5%;
24
+ transform: translate(-50%, -50%);
25
+ width: 66.6%;
26
+ height: 66.6%;
27
+ background: transparent;
28
+ }
29
+
30
+ &:after {
31
+ content: '';
32
+ position: absolute;
33
+ display: none;
34
+ z-index: 2;
35
+ width: 20%;
36
+ height: 20%;
37
+ top: 50%;
38
+ left: 50%;
39
+ background: var(--vc-dpad-fg);
40
+ border-radius: 50%;
41
+ transform: translate(-50%, -50%);
42
+ /* transition: all .25s; */
43
+ }
44
+
45
+ &:hover:after {
46
+ width: 30%;
47
+ height: 30%;
48
+ }
49
+
50
+ a {
51
+ cursor: var(--vc-btn-cursor);
52
+ display: block;
53
+ position: absolute;
54
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
55
+ width: 33.3%;
56
+ height: 43%;
57
+ line-height: 40%;
58
+ color: #fff;
59
+ text-align: center;
60
+ background: var(--vc-btn-bgcolor);
61
+ box-shadow: 0 2px 4px black, inset 0 2px 4px rgba(255, 255, 255, 0.5);
62
+
63
+ &:hover {}
64
+
65
+ &:active {
66
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
67
+ }
68
+
69
+ &:before {
70
+ content: '';
71
+ position: absolute;
72
+ width: 0;
73
+ height: 0;
74
+ border-radius: 5px;
75
+ border-style: solid;
76
+ /* transition: all .25s; */
77
+ }
78
+
79
+ &:after {
80
+ content: '';
81
+ position: absolute;
82
+ width: 102%;
83
+ height: 78%;
84
+ background: var(--vc-dpad-bg);
85
+ border-radius: var(--vc-dpad-radius-in);
86
+ }
87
+ }
88
+
89
+ a.left,
90
+ a.right {
91
+ width: 43%;
92
+ height: 33%;
93
+
94
+ &:after {
95
+ width: 78%;
96
+ height: 102%;
97
+ }
98
+ }
99
+
100
+ a.up {
101
+ top: 0;
102
+ left: 50%;
103
+ transform: translate(-50%, 0);
104
+ border-radius: var(--vc-dpad-radius) var(--vc-dpad-radius) 50% 50%;
105
+
106
+ &:hover {}
107
+
108
+ &:active {
109
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
110
+ }
111
+
112
+ &:after {
113
+ left: 0;
114
+ top: 0;
115
+ transform: translate(-100%, 0);
116
+ border-top-left-radius: 50%;
117
+ pointer-events: none;
118
+ }
119
+
120
+ &:before {
121
+ top: 40%;
122
+ left: 50%;
123
+ transform: translate(-50%, -50%);
124
+ border-width: 0 var(--vc-tri-sml-a) var(--vc-tri-sml-b) var(--vc-tri-sml-a);
125
+ border-color: transparent transparent var(--vc-arrowcolor) transparent;
126
+ }
127
+
128
+ &:active:before {
129
+ border-bottom-color: #333;
130
+ }
131
+ }
132
+
133
+ a.up:hover:before {
134
+ top: var(--vc-dpad-arrow-move);
135
+ box-shadow: inset 0 0 10px rgba(255, 255, 255, .5), 0 0 10px rgba(255, 255, 255, .2);
136
+ outline-color: white;
137
+ outline-offset: 8px;
138
+ text-shadow: 1px 1px 2px var(--vc-color-black);
139
+
140
+ outline: 1px solid;
141
+ transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1);
142
+ }
143
+
144
+ a.down {
145
+ bottom: 0;
146
+ left: 50%;
147
+ transform: translate(-50%, 0);
148
+ border-radius: 50% 50% var(--vc-dpad-radius) var(--vc-dpad-radius);
149
+
150
+ &:hover {}
151
+
152
+ &:active {
153
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
154
+ }
155
+
156
+ &:after {
157
+ right: 0;
158
+ bottom: 0;
159
+ transform: translate(100%, 0);
160
+ border-bottom-right-radius: 50%;
161
+ pointer-events: none;
162
+ }
163
+
164
+ &:before {
165
+ bottom: 40%;
166
+ left: 50%;
167
+ transform: translate(-50%, 50%);
168
+ border-width: var(--vc-tri-sml-b) var(--vc-tri-sml-a) 0px var(--vc-tri-sml-a);
169
+ border-color: var(--vc-arrowcolor) transparent transparent transparent;
170
+ }
171
+
172
+ &:active:before {
173
+ border-top-color: #333;
174
+ }
175
+ }
176
+
177
+ a.down:hover:before {
178
+ bottom: var(--vc-dpad-arrow-move);
179
+ box-shadow: inset 0 0 10px rgba(255, 255, 255, .5), 0 0 10px rgba(255, 255, 255, .2);
180
+ outline-color: white;
181
+ outline-offset: 8px;
182
+ text-shadow: 1px 1px 2px var(--vc-color-black);
183
+
184
+ outline: 1px solid;
185
+ transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1);
186
+ }
187
+
188
+ a.left {
189
+ top: 50%;
190
+ left: 0;
191
+ transform: translate(0, -50%);
192
+ border-radius: var(--vc-dpad-radius) 50% 50% var(--vc-dpad-radius);
193
+
194
+ &:hover {}
195
+
196
+ &:active {
197
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
198
+ }
199
+
200
+ &:after {
201
+ left: 0;
202
+ bottom: 0;
203
+ transform: translate(0, 100%);
204
+ border-bottom-left-radius: 50%;
205
+ pointer-events: none;
206
+ }
207
+
208
+ &:before {
209
+ left: 40%;
210
+ top: 50%;
211
+ transform: translate(-50%, -50%);
212
+ border-width: var(--vc-tri-sml-a) var(--vc-tri-sml-b) var(--vc-tri-sml-a) 0;
213
+ border-color: transparent var(--vc-arrowcolor) transparent transparent;
214
+ }
215
+
216
+ &:active:before {
217
+ border-right-color: #333;
218
+ }
219
+ }
220
+
221
+ a.left:hover:before {
222
+ left: var(--vc-dpad-arrow-move);
223
+ box-shadow: inset 0 0 10px rgba(255, 255, 255, .5), 0 0 10px rgba(255, 255, 255, .2);
224
+ outline-color: white;
225
+ outline-offset: 8px;
226
+ text-shadow: 1px 1px 2px var(--vc-color-black);
227
+
228
+ outline: 1px solid;
229
+ transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1);
230
+ }
231
+
232
+ a.right {
233
+ top: 50%;
234
+ right: 0;
235
+ transform: translate(0, -50%);
236
+ border-radius: 50% var(--vc-dpad-radius) var(--vc-dpad-radius) 50%;
237
+
238
+ &:hover {}
239
+
240
+ &:active {
241
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
242
+ }
243
+
244
+ &:after {
245
+ right: 0;
246
+ top: 0;
247
+ transform: translate(0, -100%);
248
+ border-top-right-radius: 50%;
249
+ pointer-events: none;
250
+ }
251
+
252
+ &:before {
253
+ right: 40%;
254
+ top: 50%;
255
+ transform: translate(50%, -50%);
256
+ border-width: var(--vc-tri-sml-a) 0 var(--vc-tri-sml-a) var(--vc-tri-sml-b);
257
+ border-color: transparent transparent transparent var(--vc-arrowcolor);
258
+ }
259
+
260
+ &:active:before {
261
+ border-left-color: #333;
262
+ }
263
+ }
264
+
265
+ a.right:hover:before {
266
+ right: var(--vc-dpad-arrow-move);
267
+ box-shadow: inset 0 0 10px rgba(255, 255, 255, .5), 0 0 10px rgba(255, 255, 255, .2);
268
+ outline-color: white;
269
+ outline-offset: 8px;
270
+ text-shadow: 1px 1px 2px var(--vc-color-black);
271
+
272
+ outline: 1px solid;
273
+ transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1);
274
+ }
275
+ }
276
+
277
+ .d-pad.up a.up:before {
278
+ border-bottom-color: #333;
279
+ }
280
+
281
+ .d-pad.down a.down:before {
282
+ border-top-color: #333;
283
+ }
284
+
285
+ .d-pad.left a.left:before {
286
+ border-right-color: #333;
287
+ }
288
+
289
+ .d-pad.right a.right:before {
290
+ border-left-color: #333;
291
+ }
292
+
293
+
294
+ .o-pad {
295
+ position: relative;
296
+ background: var(--vc-dpad-fg);
297
+ width: 200px;
298
+ height: 200px;
299
+ border-radius: 50%;
300
+ overflow: hidden;
301
+
302
+
303
+ box-shadow: 2px 2px 4px black;
304
+
305
+ &:after {
306
+ content: '';
307
+ position: absolute;
308
+ z-index: 2;
309
+ width: 20%;
310
+ height: 20%;
311
+ top: 50%;
312
+ left: 50%;
313
+ background: #ddd;
314
+ border-radius: 50%;
315
+ transform: translate(-50%, -50%);
316
+ display: none;
317
+ /* transition: all .25s; */
318
+ }
319
+
320
+ &:hover:after {
321
+ width: 30%;
322
+ height: 30%;
323
+ }
324
+
325
+ a {
326
+ cursor: var(--vc-btn-cursor);
327
+ display: block;
328
+ position: absolute;
329
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
330
+ width: 50%;
331
+ height: 50%;
332
+ text-align: center;
333
+ transform: rotate(45deg);
334
+ border: 1px solid rgba(0, 0, 0, .2);
335
+
336
+ &:before {
337
+ content: '';
338
+ position: absolute;
339
+ width: 60%;
340
+ height: 60%;
341
+ top: 50%;
342
+ left: 50%;
343
+ background: rgba(255, 255, 255, 0.1);
344
+ border-radius: 50%;
345
+ transform: translate(-50%, -50%);
346
+ /* transition: all .25s; */
347
+ display: none;
348
+ }
349
+
350
+ &:after {
351
+ content: '';
352
+ position: absolute;
353
+ width: 0;
354
+ height: 0;
355
+ border-radius: 5px;
356
+ border-style: solid;
357
+ transform: translate(-50%, -50%) rotate(-45deg);
358
+ /* transition: all .25s; */
359
+ }
360
+ }
361
+
362
+ a.up {
363
+ bottom: 50%;
364
+ left: 50%;
365
+ transform: translate(-50%, -20%) rotate(45deg);
366
+ border-top-left-radius: 50%;
367
+ z-index: 1;
368
+
369
+ background: var(--vc-btn-bgcolor);
370
+ box-shadow: 0 1px 4px white, inset 0 -1px 4px black;
371
+
372
+ &:hover {}
373
+
374
+ &:active {
375
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
376
+ }
377
+
378
+ &:before {
379
+ left: 57%;
380
+ top: 57%;
381
+ }
382
+
383
+ &:after {
384
+ left: 53%;
385
+ top: 53%;
386
+ border-width: 0 var(--vc-tri-lrg-a) var(--vc-tri-lrg-b) var(--vc-tri-lrg-a);
387
+ border-color: transparent transparent var(--vc-arrowcolor) transparent;
388
+ }
389
+
390
+ &:active:after {
391
+ border-bottom-color: #333;
392
+ }
393
+ }
394
+
395
+
396
+ a.down {
397
+ top: 50%;
398
+ left: 50%;
399
+ transform: translate(-50%, 20%) rotate(45deg);
400
+ border-bottom-right-radius: 50%;
401
+ z-index: 1;
402
+
403
+ background: var(--vc-btn-bgcolor);
404
+ box-shadow: 0 2px 4px black, inset 0 2px 4px rgba(255, 255, 255, 0.5);
405
+
406
+ &:hover {}
407
+
408
+ &:active {
409
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
410
+ }
411
+
412
+ &:before {
413
+ left: 43%;
414
+ top: 43%;
415
+ }
416
+
417
+ &:after {
418
+ left: 47%;
419
+ top: 47%;
420
+ border-width: var(--vc-tri-lrg-b) var(--vc-tri-lrg-a) 0px var(--vc-tri-lrg-a);
421
+ border-color: var(--vc-arrowcolor) transparent transparent transparent;
422
+ }
423
+
424
+ &:active:after {
425
+ border-top-color: #333;
426
+ }
427
+ }
428
+
429
+ a.left {
430
+ top: 50%;
431
+ right: 50%;
432
+ transform: translate(-20%, -50%) rotate(45deg);
433
+ border-bottom-left-radius: 50%;
434
+ border: none;
435
+
436
+ background: var(--vc-btn-bgcolor);
437
+
438
+ &:hover {}
439
+
440
+ &:active {
441
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
442
+ }
443
+
444
+ &:before {
445
+ left: 57%;
446
+ top: 43%;
447
+ }
448
+
449
+ &:after {
450
+ left: 53%;
451
+ top: 47%;
452
+ border-width: var(--vc-tri-lrg-a) var(--vc-tri-lrg-b) var(--vc-tri-lrg-a) 0;
453
+ border-color: transparent var(--vc-arrowcolor) transparent transparent;
454
+ }
455
+
456
+ &:active:after {
457
+ border-right-color: #333;
458
+ }
459
+ }
460
+
461
+ a.right {
462
+ top: 50%;
463
+ left: 50%;
464
+ transform: translate(20%, -50%) rotate(45deg);
465
+ border-top-right-radius: 50%;
466
+ border: none;
467
+
468
+ background: var(--vc-btn-bgcolor);
469
+ box-shadow: 0 1px 4px white, inset 0 -1px 4px black;
470
+
471
+ &:hover {}
472
+
473
+ &:active {
474
+ background: linear-gradient(45deg, var(--vc-dpad-fg-hover) 15%, var(--vc-dpad-fg-hover) 100%);
475
+ }
476
+
477
+ &:before {
478
+ left: 43%;
479
+ top: 57%;
480
+ }
481
+
482
+ &:after {
483
+ left: 47%;
484
+ top: 53%;
485
+ border-width: var(--vc-tri-lrg-a) 0 var(--vc-tri-lrg-a) var(--vc-tri-lrg-b);
486
+ border-color: transparent transparent transparent var(--vc-arrowcolor);
487
+ }
488
+
489
+ &:active:after {
490
+ border-left-color: #333;
491
+ }
492
+ }
493
+
494
+ a:hover:after {
495
+ left: 50%;
496
+ top: 50%;
497
+ box-shadow: inset 0 0 10px rgba(255, 255, 255, .5), 0 0 10px rgba(255, 255, 255, .2);
498
+ outline-color: white;
499
+ outline-offset: 8px;
500
+ text-shadow: 1px 1px 2px var(--vc-color-black);
501
+
502
+ outline: 1px solid;
503
+ transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1);
504
+ }
505
+ }
506
+
507
+
508
+ .d-pad.up a.up:before {
509
+ border-bottom-color: #333;
510
+ }
511
+
512
+ .d-pad.down a.down:before {
513
+ border-top-color: #333;
514
+ }
515
+
516
+ .d-pad.left a.left:before {
517
+ border-right-color: #333;
518
+ }
519
+
520
+ .d-pad.right a.right:before {
521
+ border-left-color: #333;
522
+ }
@@ -0,0 +1,94 @@
1
+ /*
2
+ * Copyright (C) 2024 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2024-01-16 13:17:23
4
+ * -----
5
+ * Last Modified: 2024-03-08 07:16:59
6
+ * -----
7
+ *
8
+ */
9
+
10
+ import React from 'react';
11
+ import './VcDPad.css'; // Assuming you have extracted CSS into this file
12
+
13
+
14
+ /**
15
+ * Enumerates the source button or action when an event occurs.
16
+ */
17
+ export enum VcJoyPadAction {
18
+ /** Invalid - Ignore this button */
19
+ Invalid = 0x00,
20
+ Up = 0x01,
21
+ Right = 0x02,
22
+ Down = 0x03,
23
+ Left = 0x04,
24
+ /** Stop, clear or reset */
25
+ Stop = 0x10
26
+ }
27
+
28
+ /**
29
+ * Enumerates the id's of buttons used in the joypad for standardization.
30
+ */
31
+ export enum VcJoyPadButtonId {
32
+ Stop = 'stop',
33
+ Up = 'up',
34
+ Right = 'right',
35
+ Down = 'down',
36
+ Left = 'left'
37
+ }
38
+
39
+
40
+ interface VcDPadProps {
41
+ onAction?: (action: VcJoyPadAction) => void;
42
+ onUp?: () => void;
43
+ onDown?: () => void;
44
+ onRight?: () => void;
45
+ onLeft?: () => void;
46
+ }
47
+
48
+ export const VcDPad: React.FC<VcDPadProps> = ({
49
+ onAction,
50
+ onUp,
51
+ onDown,
52
+ onRight,
53
+ onLeft
54
+ }) => {
55
+
56
+ const handleAction = (action: VcJoyPadAction) => {
57
+ if (onAction) {
58
+ onAction(action);
59
+ }
60
+
61
+ if (action === VcJoyPadAction.Up) {
62
+ if (onUp !== undefined && onUp !== null)
63
+ onUp();
64
+ }
65
+ else if (action === VcJoyPadAction.Down) {
66
+ if (onDown !== undefined && onDown !== null)
67
+ onDown();
68
+ }
69
+ else if (action === VcJoyPadAction.Right) {
70
+ if (onRight !== undefined && onRight !== null)
71
+ onRight();
72
+ }
73
+ else if (action === VcJoyPadAction.Left) {
74
+ if (onLeft !== undefined && onLeft !== null)
75
+ onLeft();
76
+ }
77
+
78
+ };
79
+
80
+ return (
81
+ <div className="set">
82
+ <nav className="d-pad">
83
+ <a className="up" onClick={() => handleAction(VcJoyPadAction.Up)}></a>
84
+ <a className="right" onClick={() => handleAction(VcJoyPadAction.Right)}></a>
85
+ <a className="down" onClick={() => handleAction(VcJoyPadAction.Down)}></a>
86
+ <a className="left" onClick={() => handleAction(VcJoyPadAction.Left)}></a>
87
+ </nav>
88
+ </div>
89
+ );
90
+ };
91
+
92
+ export default VcDPad;
93
+
94
+