goblin-gadgets 3.2.2 → 3.2.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 (361) hide show
  1. package/.editorconfig +9 -9
  2. package/.eslintrc.js +28 -28
  3. package/.zou-flow +2 -2
  4. package/builders/builders.js +5 -5
  5. package/builders/gadget.js +85 -85
  6. package/calendar-boards-gadget.js +64 -64
  7. package/demo-gadget.js +17 -17
  8. package/glyphs-dialog.js +13 -13
  9. package/login-dialog.js +13 -13
  10. package/package.json +46 -46
  11. package/pivot-gadget.js +18 -18
  12. package/stack-navigation.js +13 -13
  13. package/table-gadget.js +102 -102
  14. package/test/code-parser.spec.js +61 -61
  15. package/tree-gadget.js +70 -70
  16. package/types/types.js +455 -455
  17. package/widgets/accordion/styles.js +16 -16
  18. package/widgets/accordion/widget.js +90 -90
  19. package/widgets/analog-clock/props.js +102 -102
  20. package/widgets/analog-clock/scenarios.js +43 -43
  21. package/widgets/analog-clock/styles.js +754 -754
  22. package/widgets/analog-clock/widget.js +404 -404
  23. package/widgets/animated-container/animations.js +566 -566
  24. package/widgets/animated-container/styles.js +36 -36
  25. package/widgets/animated-container/widget.js +24 -24
  26. package/widgets/badge/styles.js +107 -107
  27. package/widgets/badge/widget.js +33 -33
  28. package/widgets/button/props.js +377 -377
  29. package/widgets/button/scenarios.js +54 -54
  30. package/widgets/button/styles.js +1082 -1082
  31. package/widgets/button/widget.js +426 -426
  32. package/widgets/button-combo/styles.js +73 -73
  33. package/widgets/button-combo/widget.js +297 -297
  34. package/widgets/calendar/props.js +207 -207
  35. package/widgets/calendar/scenarios.js +50 -50
  36. package/widgets/calendar/styles.js +198 -198
  37. package/widgets/calendar/widget.js +895 -895
  38. package/widgets/calendar-boards/styles.js +29 -29
  39. package/widgets/calendar-boards/widget.js +215 -215
  40. package/widgets/calendar-button/styles.js +273 -273
  41. package/widgets/calendar-button/widget.js +94 -94
  42. package/widgets/calendar-list/styles.js +35 -35
  43. package/widgets/calendar-list/widget.js +223 -223
  44. package/widgets/calendar-recurrence/widget.js +183 -183
  45. package/widgets/carousel/props.js +104 -104
  46. package/widgets/carousel/scenarios.js +163 -163
  47. package/widgets/carousel/styles.js +133 -133
  48. package/widgets/carousel/widget.js +491 -491
  49. package/widgets/carousel-bullet/styles.js +29 -29
  50. package/widgets/carousel-bullet/widget.js +25 -25
  51. package/widgets/carousel-button/styles.js +71 -71
  52. package/widgets/carousel-button/widget.js +33 -33
  53. package/widgets/carousel-item/styles.js +21 -21
  54. package/widgets/carousel-item/widget.js +24 -24
  55. package/widgets/chat-balloon/props.js +65 -65
  56. package/widgets/chat-balloon/scenarios.js +47 -47
  57. package/widgets/chat-balloon/styles.js +193 -193
  58. package/widgets/chat-balloon/widget.js +62 -62
  59. package/widgets/chat-dialog/styles.js +15 -15
  60. package/widgets/chat-dialog/widget.js +62 -62
  61. package/widgets/check-list/styles.js +66 -66
  62. package/widgets/check-list/widget.js +168 -168
  63. package/widgets/checkbox/widget.js +15 -15
  64. package/widgets/checkbox-nc/props.js +191 -191
  65. package/widgets/checkbox-nc/scenarios.js +41 -41
  66. package/widgets/checkbox-nc/styles.js +122 -122
  67. package/widgets/checkbox-nc/widget.js +116 -116
  68. package/widgets/clock-combo/styles.js +174 -174
  69. package/widgets/clock-combo/widget.js +390 -390
  70. package/widgets/color-picker/props.js +145 -145
  71. package/widgets/color-picker/scenarios.js +34 -34
  72. package/widgets/color-picker/styles.js +209 -209
  73. package/widgets/color-picker/widget.js +735 -735
  74. package/widgets/colored-container/props.js +34 -34
  75. package/widgets/colored-container/scenarios.js +54 -54
  76. package/widgets/colored-container/styles.js +100 -100
  77. package/widgets/colored-container/widget.js +27 -27
  78. package/widgets/combo/styles.js +69 -69
  79. package/widgets/combo/widget.js +224 -224
  80. package/widgets/combo-container/styles.js +66 -66
  81. package/widgets/combo-container/widget.js +188 -188
  82. package/widgets/command-button/widget.js +39 -39
  83. package/widgets/container/props.js +295 -295
  84. package/widgets/container/scenarios.js +47 -47
  85. package/widgets/container/styles.js +1439 -1439
  86. package/widgets/container/widget.js +279 -279
  87. package/widgets/demo/widget.js +24 -24
  88. package/widgets/dialog/styles.js +29 -29
  89. package/widgets/dialog/widget.js +26 -26
  90. package/widgets/dialog-modal/props.js +126 -126
  91. package/widgets/dialog-modal/styles.js +234 -234
  92. package/widgets/dialog-modal/widget.js +273 -273
  93. package/widgets/dialog-resizable/props.js +1 -1
  94. package/widgets/dialog-resizable/scenarios.js +18 -18
  95. package/widgets/dialog-resizable/widget.js +367 -367
  96. package/widgets/dialog-resizable-nc/props.js +150 -150
  97. package/widgets/dialog-resizable-nc/scenarios.js +18 -18
  98. package/widgets/dialog-resizable-nc/styles.js +259 -259
  99. package/widgets/dialog-resizable-nc/widget.js +197 -197
  100. package/widgets/directory-input/widget.js +18 -18
  101. package/widgets/directory-input-nc/widget.js +20 -20
  102. package/widgets/document-container/getPath.js +43 -43
  103. package/widgets/document-container/props.js +79 -79
  104. package/widgets/document-container/scenarios.js +39 -39
  105. package/widgets/document-container/styles.js +69 -69
  106. package/widgets/document-container/widget.js +53 -53
  107. package/widgets/drag-cab/styles.js +56 -56
  108. package/widgets/drag-cab/widget.js +285 -285
  109. package/widgets/drag-carrier/styles.js +21 -21
  110. package/widgets/drag-carrier/widget.js +780 -780
  111. package/widgets/dynamic-toolbar/styles.js +110 -110
  112. package/widgets/dynamic-toolbar/widget.js +128 -128
  113. package/widgets/field/readonly/label.js +39 -39
  114. package/widgets/field/widget.js +1743 -1743
  115. package/widgets/file-input/widget.js +18 -18
  116. package/widgets/file-input-nc/styles.js +38 -38
  117. package/widgets/file-input-nc/widget.js +88 -88
  118. package/widgets/flat-combo/styles.js +21 -21
  119. package/widgets/flat-combo/widget.js +61 -61
  120. package/widgets/flat-list/styles.js +30 -30
  121. package/widgets/flat-list/widget.js +219 -219
  122. package/widgets/flying-balloon/styles.js +52 -52
  123. package/widgets/flying-balloon/widget.js +43 -43
  124. package/widgets/fragment/widget.js +26 -26
  125. package/widgets/full-screen/props.js +27 -27
  126. package/widgets/full-screen/styles.js +32 -32
  127. package/widgets/full-screen/widget.js +40 -40
  128. package/widgets/gauge/props.js +71 -71
  129. package/widgets/gauge/scenarios.js +83 -83
  130. package/widgets/gauge/styles.js +183 -183
  131. package/widgets/gauge/widget.js +36 -36
  132. package/widgets/glyph-detail/service.js +9 -9
  133. package/widgets/glyph-detail/widget.js +109 -109
  134. package/widgets/glyphs-dialog/service.js +94 -94
  135. package/widgets/glyphs-dialog/styles.js +37 -37
  136. package/widgets/glyphs-dialog/widget.js +236 -236
  137. package/widgets/goblin-editor/widget.js +146 -146
  138. package/widgets/guild-entry/props.js +53 -53
  139. package/widgets/guild-entry/scenarios.js +26 -26
  140. package/widgets/guild-entry/styles.js +98 -98
  141. package/widgets/guild-entry/widget.js +126 -126
  142. package/widgets/guild-user-logo/guild-helpers.js +77 -77
  143. package/widgets/guild-user-logo/props.js +48 -48
  144. package/widgets/guild-user-logo/scenarios.js +64 -64
  145. package/widgets/guild-user-logo/styles.js +114 -114
  146. package/widgets/guild-user-logo/widget.js +81 -81
  147. package/widgets/guild-user-profile/props.js +73 -73
  148. package/widgets/guild-user-profile/scenarios.js +54 -54
  149. package/widgets/guild-user-profile/styles.js +162 -162
  150. package/widgets/guild-user-profile/widget.js +202 -202
  151. package/widgets/helpers/combo-helpers.js +218 -218
  152. package/widgets/helpers/geom-helpers.js +80 -80
  153. package/widgets/helpers/rect-helpers.js +10 -10
  154. package/widgets/helpers/shortcut-helpers.js +56 -56
  155. package/widgets/helpers/spacing-helpers.js +26 -26
  156. package/widgets/helpers/svg-helpers.js +151 -151
  157. package/widgets/helpers/table-helpers.js +68 -68
  158. package/widgets/hinter/styles.js +79 -79
  159. package/widgets/hinter/widget.js +205 -205
  160. package/widgets/hinter-column/widget.js +49 -49
  161. package/widgets/hinter-field/reducer.js +18 -18
  162. package/widgets/hinter-field/widget.js +176 -176
  163. package/widgets/hinter-field-nc/props.js +114 -114
  164. package/widgets/hinter-field-nc/scenarios.js +47 -47
  165. package/widgets/hinter-field-nc/widget.js +191 -191
  166. package/widgets/input-wrapper/widget.js +157 -157
  167. package/widgets/key-trap.js +96 -96
  168. package/widgets/label/props.js +1 -1
  169. package/widgets/label/scenarios.js +1 -1
  170. package/widgets/label/widget.js +7 -7
  171. package/widgets/label-nc/props.js +308 -308
  172. package/widgets/label-nc/scenarios.js +29 -29
  173. package/widgets/label-nc/styles.js +1218 -1218
  174. package/widgets/label-nc/widget.js +314 -314
  175. package/widgets/label-row/props.js +1 -1
  176. package/widgets/label-row/scenarios.js +1 -1
  177. package/widgets/label-row/widget.js +7 -7
  178. package/widgets/label-row-nc/props.js +94 -94
  179. package/widgets/label-row-nc/scenarios.js +46 -46
  180. package/widgets/label-row-nc/widget.js +81 -81
  181. package/widgets/label-text-field/styles.js +55 -55
  182. package/widgets/label-text-field/widget.js +178 -178
  183. package/widgets/launcher/props.js +177 -177
  184. package/widgets/launcher/scenarios.js +55 -55
  185. package/widgets/launcher/styles.js +46 -46
  186. package/widgets/launcher/widget.js +79 -79
  187. package/widgets/launcher-blob/props.js +25 -25
  188. package/widgets/launcher-blob/scenarios.js +24 -24
  189. package/widgets/launcher-blob/styles.js +62 -62
  190. package/widgets/launcher-blob/widget.js +50 -50
  191. package/widgets/list/widget.js +211 -211
  192. package/widgets/login-dialog/service.js +117 -117
  193. package/widgets/login-dialog/widget.js +117 -117
  194. package/widgets/map/reaflet.js +208 -208
  195. package/widgets/map/widget.js +67 -67
  196. package/widgets/markdown/styles.js +85 -85
  197. package/widgets/markdown/widget.js +31 -31
  198. package/widgets/notification/styles.js +97 -97
  199. package/widgets/notification/widget.js +207 -207
  200. package/widgets/pivot/custom.css +320 -320
  201. package/widgets/pivot/widget.js +42 -42
  202. package/widgets/radio-list/styles.js +48 -48
  203. package/widgets/radio-list/widget.js +111 -111
  204. package/widgets/resizable-container/styles.js +108 -108
  205. package/widgets/resizable-container/widget.js +225 -225
  206. package/widgets/retro-action-button/helpers.js +106 -106
  207. package/widgets/retro-action-button/styles.js +285 -285
  208. package/widgets/retro-action-button/widget.js +364 -364
  209. package/widgets/retro-badge-button/styles.js +87 -87
  210. package/widgets/retro-badge-button/widget.js +251 -251
  211. package/widgets/retro-gear/helpers.js +156 -156
  212. package/widgets/retro-gear/styles.js +130 -130
  213. package/widgets/retro-gear/widget.js +51 -51
  214. package/widgets/retro-illuminated-button/styles.js +274 -274
  215. package/widgets/retro-illuminated-button/widget.js +147 -147
  216. package/widgets/retro-panel/helpers.js +57 -57
  217. package/widgets/retro-panel/styles.js +293 -293
  218. package/widgets/retro-panel/widget.js +239 -239
  219. package/widgets/retro-screw/styles.js +80 -80
  220. package/widgets/retro-screw/widget.js +25 -25
  221. package/widgets/rocket/props.js +124 -124
  222. package/widgets/rocket/scenarios.js +71 -71
  223. package/widgets/rocket/styles.js +306 -306
  224. package/widgets/rocket/widget.js +225 -225
  225. package/widgets/samples-monitor/helpers.js +147 -147
  226. package/widgets/samples-monitor/styles.js +529 -529
  227. package/widgets/samples-monitor/widget.js +516 -516
  228. package/widgets/scrollable-container/styles.js +58 -58
  229. package/widgets/scrollable-container/widget.js +132 -132
  230. package/widgets/scrollable-linkable-container/reducer.js +18 -18
  231. package/widgets/scrollable-linkable-container/styles.js +42 -42
  232. package/widgets/scrollable-linkable-container/widget.js +78 -78
  233. package/widgets/select/styles.js +68 -68
  234. package/widgets/select/widget.js +119 -119
  235. package/widgets/separator/props.js +46 -46
  236. package/widgets/separator/styles.js +116 -116
  237. package/widgets/separator/widget.js +27 -27
  238. package/widgets/slider/props.js +136 -136
  239. package/widgets/slider/scenarios.js +74 -74
  240. package/widgets/slider/styles.js +246 -246
  241. package/widgets/slider/widget.js +404 -404
  242. package/widgets/slider-circle/props.js +72 -72
  243. package/widgets/slider-circle/scenarios.js +16 -16
  244. package/widgets/slider-circle/styles.js +78 -78
  245. package/widgets/slider-circle/widget.js +154 -154
  246. package/widgets/slider-xy/props.js +87 -87
  247. package/widgets/slider-xy/scenarios.js +19 -19
  248. package/widgets/slider-xy/styles.js +102 -102
  249. package/widgets/slider-xy/widget.js +234 -234
  250. package/widgets/smiley/props.js +51 -51
  251. package/widgets/smiley/scenarios.js +58 -58
  252. package/widgets/smiley/styles.js +489 -489
  253. package/widgets/smiley/widget.js +72 -72
  254. package/widgets/spinner/props.js +31 -31
  255. package/widgets/spinner/scenarios.js +31 -31
  256. package/widgets/spinner/styles.js +49 -49
  257. package/widgets/spinner/widget.js +23 -23
  258. package/widgets/splitter/props.js +71 -71
  259. package/widgets/splitter/scenarios.js +182 -182
  260. package/widgets/splitter/styles.js +41 -41
  261. package/widgets/splitter/widget.js +455 -455
  262. package/widgets/stack-navigation/service.js +324 -324
  263. package/widgets/stack-navigation/widget.js +296 -296
  264. package/widgets/state-browser/styles.js +19 -19
  265. package/widgets/state-browser/widget.js +135 -135
  266. package/widgets/state-browser-dialog/styles.js +100 -100
  267. package/widgets/state-browser-dialog/widget.js +253 -253
  268. package/widgets/state-monitor/styles.js +50 -50
  269. package/widgets/state-monitor/widget.js +324 -324
  270. package/widgets/switch-on-off/props.js +30 -30
  271. package/widgets/switch-on-off/scenarios.js +34 -34
  272. package/widgets/switch-on-off/styles.js +63 -63
  273. package/widgets/switch-on-off/widget.js +41 -41
  274. package/widgets/table/helpers.js +160 -160
  275. package/widgets/table/props.js +658 -658
  276. package/widgets/table/reducer.js +196 -196
  277. package/widgets/table/scenarios.js +54 -54
  278. package/widgets/table/widget.js +253 -253
  279. package/widgets/table-cell/props.js +145 -145
  280. package/widgets/table-cell/styles.js +160 -160
  281. package/widgets/table-cell/widget.js +139 -139
  282. package/widgets/table-header-drag-manager/styles.js +184 -184
  283. package/widgets/table-header-drag-manager/widget.js +392 -392
  284. package/widgets/table-nc/styles.js +100 -100
  285. package/widgets/table-nc/widget.js +409 -409
  286. package/widgets/table-row/props.js +73 -73
  287. package/widgets/table-row/styles.js +82 -82
  288. package/widgets/table-row/widget.js +207 -207
  289. package/widgets/text-field/widget.js +18 -18
  290. package/widgets/text-field-combo/widget.js +21 -21
  291. package/widgets/text-field-combo-nc/props.js +300 -300
  292. package/widgets/text-field-combo-nc/scenarios.js +72 -72
  293. package/widgets/text-field-combo-nc/widget.js +339 -339
  294. package/widgets/text-field-date-interval/styles.js +37 -37
  295. package/widgets/text-field-date-interval/widget.js +162 -162
  296. package/widgets/text-field-nc/props.js +40 -40
  297. package/widgets/text-field-nc/scenarios.js +67 -67
  298. package/widgets/text-field-nc/widget.js +14 -14
  299. package/widgets/text-field-time-interval/styles.js +37 -37
  300. package/widgets/text-field-time-interval/widget.js +160 -160
  301. package/widgets/text-field-typed/widget.js +51 -51
  302. package/widgets/text-field-typed-nc/props.js +81 -81
  303. package/widgets/text-field-typed-nc/scenarios.js +105 -105
  304. package/widgets/text-field-typed-nc/styles.js +20 -20
  305. package/widgets/text-field-typed-nc/widget.js +749 -750
  306. package/widgets/text-input-info-nc/props.js +62 -62
  307. package/widgets/text-input-info-nc/widget.js +55 -55
  308. package/widgets/text-input-nc/props.js +143 -143
  309. package/widgets/text-input-nc/scenarios.js +44 -44
  310. package/widgets/text-input-nc/styles.js +242 -242
  311. package/widgets/text-input-nc/widget.js +234 -234
  312. package/widgets/ticket/getPath.js +128 -128
  313. package/widgets/ticket/props.js +181 -181
  314. package/widgets/ticket/scenarios.js +39 -39
  315. package/widgets/ticket/styles.js +332 -332
  316. package/widgets/ticket/ticket-helpers.js +33 -33
  317. package/widgets/ticket/widget.js +348 -348
  318. package/widgets/ticket-hover/styles.js +207 -207
  319. package/widgets/ticket-hover/widget.js +53 -53
  320. package/widgets/time-gauge/widget.js +64 -64
  321. package/widgets/tips/styles.js +48 -48
  322. package/widgets/tips/widget.js +171 -171
  323. package/widgets/translatable-text-field/styles.js +202 -202
  324. package/widgets/translatable-text-field/text-field.js +132 -132
  325. package/widgets/translatable-text-field/widget.js +660 -660
  326. package/widgets/tree/props.js +246 -246
  327. package/widgets/tree/scenarios.js +14 -14
  328. package/widgets/tree/styles.js +142 -142
  329. package/widgets/tree/widget.js +383 -383
  330. package/widgets/tree-cell/styles.js +140 -140
  331. package/widgets/tree-cell/widget.js +100 -100
  332. package/widgets/tree-row/styles.js +77 -77
  333. package/widgets/tree-row/widget.js +135 -135
  334. package/widgets/triangle/props.js +48 -48
  335. package/widgets/triangle/scenarios.js +33 -33
  336. package/widgets/triangle/styles.js +92 -92
  337. package/widgets/triangle/widget.js +36 -36
  338. package/widgets/well-done/widget.js +170 -170
  339. package/widgets/widget-doc/reducer.js +68 -68
  340. package/widgets/widget-doc/styles.js +15 -15
  341. package/widgets/widget-doc/widget-list.js +25 -25
  342. package/widgets/widget-doc/widget.js +89 -89
  343. package/widgets/widget-doc-menu/styles.js +12 -12
  344. package/widgets/widget-doc-menu/widget.js +79 -79
  345. package/widgets/widget-doc-preview/parse-code.js +20 -20
  346. package/widgets/widget-doc-preview/styles.js +77 -77
  347. package/widgets/widget-doc-preview/widget.js +481 -481
  348. package/widgets/widget-doc-preview-container/styles.js +60 -60
  349. package/widgets/widget-doc-preview-container/widget.js +129 -129
  350. package/widgets/widget-doc-properties/styles.js +41 -41
  351. package/widgets/widget-doc-properties/widget.js +307 -307
  352. package/widgets/widget-doc-property/styles.js +75 -75
  353. package/widgets/widget-doc-property/widget.js +108 -108
  354. package/widgets/widget-doc-property-control/styles.js +14 -14
  355. package/widgets/widget-doc-property-control/widget.js +343 -343
  356. package/widgets/wizard/service.js +2132 -2132
  357. package/widgets/wizard/styles.js +21 -21
  358. package/widgets/wizard/widget.js +927 -927
  359. package/widgets/work-dialog/styles.js +31 -31
  360. package/widgets/work-dialog/widget.js +162 -162
  361. package/wizard.js +13 -13
@@ -1,529 +1,529 @@
1
- import {ColorManipulator} from 'goblin-theme';
2
-
3
- /******************************************************************************/
4
-
5
- export const propNames = [
6
- 'chartMargin',
7
- 'backgroundColor',
8
- 'width',
9
- 'height',
10
- 'look',
11
- 'disableRightPanel',
12
- 'showed',
13
- 'aging',
14
- ];
15
-
16
- export default function styles(theme, props) {
17
- const {
18
- backgroundColor,
19
- width,
20
- height,
21
- disableRightPanel,
22
- showed,
23
- aging = 'old',
24
- } = props;
25
-
26
- const look = theme.look.name;
27
-
28
- let monitor = {};
29
- let tube = {};
30
- let crt = {};
31
- let channels = {};
32
- let sampleName = {};
33
- let panel = {};
34
- let backgroundCRT = {};
35
- let foregroundCRT1 = {};
36
- let foregroundCRT2 = {};
37
- let foregroundCRT3 = {};
38
- let screen = {};
39
- let grid = {};
40
- let samples = {};
41
- let flare = {};
42
- let border = {};
43
-
44
- const chartMargin = props.chartMargin || 40;
45
- let chart = {
46
- marginLeft: chartMargin,
47
- marginRight: disableRightPanel ? chartMargin : 2 * chartMargin,
48
- };
49
-
50
- /******************************************************************************/
51
-
52
- //---------\
53
- // MODERN >
54
- //---------/
55
- if (look === 'modern') {
56
- monitor = {
57
- width: width,
58
- height: height,
59
- display: 'flex',
60
- flexDirection: 'row',
61
- borderTopLeftRadius: '20px',
62
- backgroundColor: backgroundColor || '#333',
63
- overflow: 'hidden',
64
- };
65
-
66
- tube = {
67
- position: 'relative',
68
- flexGrow: 1,
69
- };
70
-
71
- channels = {
72
- position: 'absolute',
73
- left: '0px',
74
- right: '0px',
75
- top: '0px',
76
- bottom: '0px',
77
- };
78
-
79
- sampleName = {
80
- position: 'absolute',
81
- fontSize: '75%',
82
- textTransform: 'uppercase',
83
- whiteSpace: 'nowrap',
84
- overflow: 'hidden',
85
- textOverflow: 'ellipsis',
86
- };
87
-
88
- panel = {
89
- margin: '0px',
90
- width: '47px',
91
- padding: '33px 0px',
92
- display: 'flex',
93
- flexDirection: 'column',
94
- justifyContent: 'flex-end',
95
- alignItems: 'center',
96
- backgroundColor: '#888',
97
- };
98
-
99
- grid = {
100
- position: 'absolute',
101
- width: '100%',
102
- height: '100%',
103
- };
104
-
105
- samples = {
106
- position: 'absolute',
107
- width: '100%',
108
- height: '100%',
109
- };
110
-
111
- flare = {};
112
- border = {};
113
- }
114
-
115
- /******************************************************************************/
116
-
117
- //--------\
118
- // RETRO >
119
- //--------/
120
- if (look === 'retro') {
121
- monitor = {
122
- 'width': width,
123
- 'height': height,
124
- 'display': 'flex',
125
- 'flexDirection': 'row',
126
- 'borderRadius': '30px',
127
- 'borderTop': `10px solid ${ColorManipulator.lighten(
128
- theme.palette.actionButtonBackground,
129
- 0.4
130
- )}`,
131
- 'borderBottom': `10px solid ${ColorManipulator.darken(
132
- theme.palette.actionButtonBackground,
133
- 0.5
134
- )}`,
135
- 'borderLeft': `10px solid ${ColorManipulator.lighten(
136
- theme.palette.actionButtonBackground,
137
- 0.2
138
- )}`,
139
- 'borderRight': `10px solid ${ColorManipulator.darken(
140
- theme.palette.actionButtonBackground,
141
- 0.3
142
- )}`,
143
- 'background': 'radial-gradient(ellipse at top left, #000, #333)',
144
- 'boxShadow': '0px 0px 29px 22px black',
145
- 'overflow': 'hidden',
146
- ':hover .flare-hover': {
147
- right: '-300px',
148
- bottom: '-300px',
149
- width: '700px',
150
- height: '700px',
151
- opacity: 0.2,
152
- },
153
- };
154
-
155
- tube = {
156
- position: 'relative',
157
- flexGrow: 1,
158
- };
159
-
160
- const keyframesPowerOn = {
161
- 'new': null,
162
- 'old': {
163
- '0%': {transform: 'scale(1)'},
164
- '10.0%': {transform: 'scale(1)'},
165
- '10.1%': {transform: 'scale(0.99)'},
166
- '10.2%': {transform: 'scale(1)'},
167
- '20.0%': {transform: 'skewX(0deg)'},
168
- '20.1%': {transform: 'skewX(-5deg)'},
169
- '20.2%': {transform: 'skewX(0deg)'},
170
- '50.0%': {transform: 'scale(1)'},
171
- '50.1%': {transform: 'scale(0.97)'},
172
- '50.2%': {transform: 'scale(1)'},
173
- '50.5%': {transform: 'scale(1)'},
174
- '50.6%': {transform: 'scale(0.96)'},
175
- '50.7%': {transform: 'scale(1)'},
176
- '60.0%': {transform: 'scale(1)'},
177
- '60.1%': {transform: 'scale(0.97)'},
178
- '60.2%': {transform: 'scale(1)'},
179
- '70.0%': {transform: 'skewX(0deg)'},
180
- '70.2%': {transform: 'skewX(-6deg)'},
181
- '70.4%': {transform: 'skewX(0deg)'},
182
- '80.5%': {transform: 'skewX(0deg)'},
183
- '80.6%': {transform: 'skewX(-5deg)'},
184
- '80.7%': {transform: 'skewX(0deg)'},
185
- '80.8%': {transform: 'skewX(-5deg)'},
186
- '80.9%': {transform: 'skewX(0deg)'},
187
- '90.2%': {transform: 'scale(1)'},
188
- '90.4%': {transform: 'scale(0.93)'},
189
- '90.6%': {transform: 'scale(1)'},
190
- '100%': {transform: 'scale(1)'},
191
- },
192
- 'very-old': {
193
- '0%': {transform: 'scale(1)'},
194
- '10.0%': {transform: 'scale(1)'},
195
- '10.1%': {transform: 'scale(0.98)'},
196
- '10.2%': {transform: 'scale(1)'},
197
- '10.6%': {transform: 'scale(0.97)'},
198
- '10.7%': {transform: 'scale(1)'},
199
- '12.6%': {transform: 'scale(0.96)'},
200
- '12.7%': {transform: 'scale(1)'},
201
- '15.1%': {transform: 'scale(0.97)'},
202
- '15.3%': {transform: 'scale(1)'},
203
- '20.0%': {transform: 'skewX(0deg)'},
204
- '20.1%': {transform: 'skewX(-8deg)'},
205
- '20.2%': {transform: 'skewX(0deg)'},
206
- '30.0%': {transform: 'scale(1)'},
207
- '30.1%': {transform: 'scale(0.97)'},
208
- '30.2%': {transform: 'scale(1)'},
209
- '30.4%': {transform: 'scale(0.99)'},
210
- '30.6%': {transform: 'scale(1)'},
211
- '33.0%': {transform: 'skewX(0deg)'},
212
- '33.2%': {transform: 'skewX(-8deg)'},
213
- '33.4%': {transform: 'skewX(0deg)'},
214
- '40.3%': {transform: 'scale(0.98)'},
215
- '40.4%': {transform: 'scale(1)'},
216
- '40.7%': {transform: 'scale(0.98)'},
217
- '40.8%': {transform: 'scale(1)'},
218
- '40.9%': {transform: 'scale(0.97)'},
219
- '41.0%': {transform: 'scale(1)'},
220
- '44.3%': {transform: 'skewX(0deg)'},
221
- '44.4%': {transform: 'skewX(-6deg)'},
222
- '44.6%': {transform: 'skewX(0deg)'},
223
- '44.7%': {transform: 'skewX(-8deg)'},
224
- '44.9%': {transform: 'skewX(0deg)'},
225
- '46.1%': {transform: 'skewX(-5deg)'},
226
- '46.2%': {transform: 'skewX(0deg)'},
227
- '50.0%': {transform: 'scale(1)'},
228
- '50.1%': {transform: 'scale(0.94)'},
229
- '50.2%': {transform: 'scale(1)'},
230
- '50.3%': {transform: 'skewX(0deg)'},
231
- '50.4%': {transform: 'skewX(-6deg)'},
232
- '50.6%': {transform: 'skewX(0deg)'},
233
- '50.8%': {transform: 'scale(1)'},
234
- '50.9%': {transform: 'scale(0.92)'},
235
- '51.0%': {transform: 'scale(1)'},
236
- '56.0%': {transform: 'skewX(0deg)'},
237
- '56.2%': {transform: 'skewX(-8deg)'},
238
- '56.4%': {transform: 'skewX(0deg)'},
239
- '60.0%': {transform: 'scale(1)'},
240
- '60.1%': {transform: 'scale(0.97)'},
241
- '60.2%': {transform: 'scale(1)'},
242
- '60.3%': {transform: 'scale(0.94)'},
243
- '60.4%': {transform: 'scale(1)'},
244
- '60.6%': {transform: 'scale(0.97)'},
245
- '60.7%': {transform: 'scale(1)'},
246
- '70.0%': {transform: 'skewX(0deg)'},
247
- '70.2%': {transform: 'skewX(-8deg)'},
248
- '70.4%': {transform: 'skewX(0deg)'},
249
- '75.3%': {transform: 'scale(1)'},
250
- '75.4%': {transform: 'scale(0.95)'},
251
- '75.5%': {transform: 'scale(1)'},
252
- '77.0%': {transform: 'scale(1)'},
253
- '77.1%': {transform: 'scale(0.97)'},
254
- '77.3%': {transform: 'scale(1)'},
255
- '80.0%': {transform: 'scale(1)'},
256
- '80.1%': {transform: 'scale(0.97)'},
257
- '80.2%': {transform: 'scale(1)'},
258
- '80.3%': {transform: 'scale(0.94)'},
259
- '80.4%': {transform: 'scale(1)'},
260
- '80.5%': {transform: 'skewX(0deg)'},
261
- '80.6%': {transform: 'skewX(-7deg)'},
262
- '80.7%': {transform: 'skewX(0deg)'},
263
- '80.8%': {transform: 'skewX(-7deg)'},
264
- '80.9%': {transform: 'skewX(0deg)'},
265
- '82.0%': {transform: 'scale(1)'},
266
- '82.1%': {transform: 'scale(0.98)'},
267
- '82.2%': {transform: 'scale(1)'},
268
- '82.5%': {transform: 'scale(0.93)'},
269
- '82.7%': {transform: 'scale(1)'},
270
- '90.2%': {transform: 'scale(1)'},
271
- '90.4%': {transform: 'scale(0.95)'},
272
- '90.6%': {transform: 'scale(1)'},
273
- '90.8%': {transform: 'scale(0.94)'},
274
- '90.9%': {transform: 'scale(1)'},
275
- '93.1%': {transform: 'scale(0.97)'},
276
- '93.2%': {transform: 'scale(1)'},
277
- '98.1%': {transform: 'scale(0.96)'},
278
- '98.2%': {transform: 'scale(1)'},
279
- '100%': {transform: 'scale(1)'},
280
- },
281
- };
282
-
283
- const keyframesPowerOff = {
284
- '0%': {transform: 'scale(1)'},
285
- '60%': {transform: 'scale(0.5, 0)'},
286
- '100%': {transform: 'scale(0.5, 0)'},
287
- };
288
-
289
- crt = {
290
- position: 'absolute',
291
- left: '0px',
292
- right: '0px',
293
- top: '0px',
294
- bottom: '0px',
295
- flexGrow: 1,
296
- animationName: showed ? keyframesPowerOn[aging] : keyframesPowerOff,
297
- animationDuration: showed ? '27s' : '0.6s',
298
- animationIterationCount: showed ? 'infinite' : 1,
299
- };
300
-
301
- channels = {
302
- position: 'absolute',
303
- left: '0px',
304
- right: '0px',
305
- top: '0px',
306
- bottom: '0px',
307
- };
308
-
309
- sampleName = {
310
- position: 'absolute',
311
- fontSize: '75%',
312
- textTransform: 'uppercase',
313
- whiteSpace: 'nowrap',
314
- overflow: 'hidden',
315
- textOverflow: 'ellipsis',
316
- };
317
-
318
- panel = {
319
- margin: '2px',
320
- width: '47px',
321
- padding: '33px 0px',
322
- display: 'flex',
323
- flexDirection: 'column',
324
- justifyContent: 'flex-end',
325
- alignItems: 'center',
326
- background: 'linear-gradient(-180deg, black -100%, #555)',
327
- };
328
-
329
- /******************************************************************************/
330
-
331
- // Enforced shadow.
332
- const keyframesCRTOff = {
333
- '20%': {
334
- border: '0px solid',
335
- borderBottomColor: 'transparent',
336
- borderLeftColor: 'transparent',
337
- borderRightColor: 'transparent',
338
- borderTopColor: 'transparent',
339
- },
340
- '60%': {
341
- backgroundColor: '#0cff72',
342
- borderRadius: width,
343
- },
344
- '100%': {
345
- backgroundColor: '#0cff72',
346
- borderRadius: width,
347
- },
348
- };
349
-
350
- backgroundCRT = {
351
- position: 'absolute',
352
- top: '0px',
353
- left: '0px',
354
- bottom: '0px',
355
- right: '0px',
356
- backgroundColor: '#07401f',
357
- border: '40px solid',
358
- borderBottomColor: '#121212',
359
- borderLeftColor: '#080808',
360
- borderRightColor: '#080808',
361
- borderTopColor: '#020202',
362
- boxShadow: 'inset 0 0 90px black, inset 0 0 15px black, 0 0 50px black',
363
- animationName: showed ? null : keyframesCRTOff,
364
- animationDuration: showed ? null : '0.6s',
365
- animationIterationCount: showed ? null : 1,
366
- };
367
-
368
- // Scan lines.
369
- foregroundCRT1 = {
370
- position: 'absolute',
371
- top: '0px',
372
- left: '0px',
373
- bottom: '0px',
374
- right: '0px',
375
- background:
376
- 'linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 50%, rgba(0, 0, 0, 0.2) 70%, rgba(0, 0, 0, 0.6)) 0% 0% / 100% 5px',
377
- borderRadius: '50px',
378
- };
379
-
380
- // Horizontal spot trace, from top to bottom.
381
- const keyframesTrace = {
382
- 'new': null,
383
- 'old': {
384
- '0%': {top: '-100px'},
385
- '75%': {top: '-100px'},
386
- '100%': {top: '100%'},
387
- },
388
- 'very-old': {
389
- '0%': {top: '-100px'},
390
- '100%': {top: '100%'},
391
- },
392
- };
393
-
394
- const durationTrace = {
395
- 'new': null,
396
- 'old': '20s',
397
- 'very-old': '5s',
398
- };
399
-
400
- foregroundCRT2 = {
401
- position: 'absolute',
402
- top: '0px',
403
- height: '100px',
404
- left: '40px',
405
- right: '40px',
406
- background: 'linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0.1))',
407
- animationName: keyframesTrace[aging],
408
- animationDuration: durationTrace[aging],
409
- animationIterationCount: 'infinite',
410
- animationTimingFunction: 'linear',
411
- opacity: aging === 'new' ? 0 : 1,
412
- };
413
-
414
- // Video flicker.
415
- const keyframesFlicker = {
416
- '0%': {opacity: 0.27861},
417
- '5%': {opacity: 0.34769},
418
- '10%': {opacity: 0.23604},
419
- '15%': {opacity: 0.90626},
420
- '20%': {opacity: 0.18128},
421
- '25%': {opacity: 0.83891},
422
- '30%': {opacity: 0.65583},
423
- '35%': {opacity: 0.67807},
424
- '40%': {opacity: 0.26559},
425
- '45%': {opacity: 0.84693},
426
- '50%': {opacity: 0.96019},
427
- '55%': {opacity: 0.08594},
428
- '60%': {opacity: 0.20313},
429
- '65%': {opacity: 0.71988},
430
- '70%': {opacity: 0.53455},
431
- '75%': {opacity: 0.37288},
432
- '80%': {opacity: 0.71428},
433
- '85%': {opacity: 0.70419},
434
- '90%': {opacity: 0.7003},
435
- '95%': {opacity: 0.36108},
436
- '100%': {opacity: 0.24387},
437
- };
438
-
439
- const durationFlicker = {
440
- 'new': null,
441
- 'old': '0.15s',
442
- 'very-old': '0.6s',
443
- };
444
-
445
- foregroundCRT3 = {
446
- position: 'absolute',
447
- top: '0px',
448
- left: '0px',
449
- bottom: '0px',
450
- right: '0px',
451
- background: 'rgba(18, 16, 16, 0.15)',
452
- animationName: keyframesFlicker,
453
- animationDuration: durationFlicker[aging],
454
- animationIterationCount: 'infinite',
455
- };
456
-
457
- screen = {
458
- position: 'absolute',
459
- top: '2px',
460
- left: '2px',
461
- width: 'calc(100% - 4px)',
462
- height: 'calc(100% - 4px)',
463
- };
464
-
465
- /******************************************************************************/
466
-
467
- grid = {
468
- position: 'absolute',
469
- width: '100%',
470
- height: '100%',
471
- };
472
-
473
- samples = {
474
- position: 'absolute',
475
- width: '100%',
476
- height: '100%',
477
- };
478
-
479
- flare = {
480
- position: 'absolute',
481
- margin: '20px',
482
- right: '0px',
483
- bottom: '0px',
484
- width: '100px',
485
- height: '100px',
486
- background: 'radial-gradient(circle closest-side, white, transparent)',
487
- opacity: 0.1,
488
- transition: '10s ease-out',
489
- };
490
-
491
- border = {
492
- position: 'absolute',
493
- left: '0px',
494
- right: '-50px',
495
- top: '0px',
496
- bottom: '0px',
497
- borderRadius: '20px',
498
- borderTop: '2px solid #ddd',
499
- borderBottom: '2px solid #333',
500
- borderLeft: '2px solid #ddd',
501
- borderRight: '2px solid #222',
502
- };
503
- }
504
-
505
- /******************************************************************************/
506
-
507
- return {
508
- monitor,
509
- tube,
510
- crt,
511
- channels,
512
- sampleName,
513
- panel,
514
-
515
- backgroundCRT,
516
- foregroundCRT1,
517
- foregroundCRT2,
518
- foregroundCRT3,
519
- screen,
520
-
521
- grid,
522
- samples,
523
- flare,
524
- border,
525
- chart,
526
- };
527
- }
528
-
529
- /******************************************************************************/
1
+ import {ColorManipulator} from 'goblin-theme';
2
+
3
+ /******************************************************************************/
4
+
5
+ export const propNames = [
6
+ 'chartMargin',
7
+ 'backgroundColor',
8
+ 'width',
9
+ 'height',
10
+ 'look',
11
+ 'disableRightPanel',
12
+ 'showed',
13
+ 'aging',
14
+ ];
15
+
16
+ export default function styles(theme, props) {
17
+ const {
18
+ backgroundColor,
19
+ width,
20
+ height,
21
+ disableRightPanel,
22
+ showed,
23
+ aging = 'old',
24
+ } = props;
25
+
26
+ const look = theme.look.name;
27
+
28
+ let monitor = {};
29
+ let tube = {};
30
+ let crt = {};
31
+ let channels = {};
32
+ let sampleName = {};
33
+ let panel = {};
34
+ let backgroundCRT = {};
35
+ let foregroundCRT1 = {};
36
+ let foregroundCRT2 = {};
37
+ let foregroundCRT3 = {};
38
+ let screen = {};
39
+ let grid = {};
40
+ let samples = {};
41
+ let flare = {};
42
+ let border = {};
43
+
44
+ const chartMargin = props.chartMargin || 40;
45
+ let chart = {
46
+ marginLeft: chartMargin,
47
+ marginRight: disableRightPanel ? chartMargin : 2 * chartMargin,
48
+ };
49
+
50
+ /******************************************************************************/
51
+
52
+ //---------\
53
+ // MODERN >
54
+ //---------/
55
+ if (look === 'modern') {
56
+ monitor = {
57
+ width: width,
58
+ height: height,
59
+ display: 'flex',
60
+ flexDirection: 'row',
61
+ borderTopLeftRadius: '20px',
62
+ backgroundColor: backgroundColor || '#333',
63
+ overflow: 'hidden',
64
+ };
65
+
66
+ tube = {
67
+ position: 'relative',
68
+ flexGrow: 1,
69
+ };
70
+
71
+ channels = {
72
+ position: 'absolute',
73
+ left: '0px',
74
+ right: '0px',
75
+ top: '0px',
76
+ bottom: '0px',
77
+ };
78
+
79
+ sampleName = {
80
+ position: 'absolute',
81
+ fontSize: '75%',
82
+ textTransform: 'uppercase',
83
+ whiteSpace: 'nowrap',
84
+ overflow: 'hidden',
85
+ textOverflow: 'ellipsis',
86
+ };
87
+
88
+ panel = {
89
+ margin: '0px',
90
+ width: '47px',
91
+ padding: '33px 0px',
92
+ display: 'flex',
93
+ flexDirection: 'column',
94
+ justifyContent: 'flex-end',
95
+ alignItems: 'center',
96
+ backgroundColor: '#888',
97
+ };
98
+
99
+ grid = {
100
+ position: 'absolute',
101
+ width: '100%',
102
+ height: '100%',
103
+ };
104
+
105
+ samples = {
106
+ position: 'absolute',
107
+ width: '100%',
108
+ height: '100%',
109
+ };
110
+
111
+ flare = {};
112
+ border = {};
113
+ }
114
+
115
+ /******************************************************************************/
116
+
117
+ //--------\
118
+ // RETRO >
119
+ //--------/
120
+ if (look === 'retro') {
121
+ monitor = {
122
+ 'width': width,
123
+ 'height': height,
124
+ 'display': 'flex',
125
+ 'flexDirection': 'row',
126
+ 'borderRadius': '30px',
127
+ 'borderTop': `10px solid ${ColorManipulator.lighten(
128
+ theme.palette.actionButtonBackground,
129
+ 0.4
130
+ )}`,
131
+ 'borderBottom': `10px solid ${ColorManipulator.darken(
132
+ theme.palette.actionButtonBackground,
133
+ 0.5
134
+ )}`,
135
+ 'borderLeft': `10px solid ${ColorManipulator.lighten(
136
+ theme.palette.actionButtonBackground,
137
+ 0.2
138
+ )}`,
139
+ 'borderRight': `10px solid ${ColorManipulator.darken(
140
+ theme.palette.actionButtonBackground,
141
+ 0.3
142
+ )}`,
143
+ 'background': 'radial-gradient(ellipse at top left, #000, #333)',
144
+ 'boxShadow': '0px 0px 29px 22px black',
145
+ 'overflow': 'hidden',
146
+ ':hover .flare-hover': {
147
+ right: '-300px',
148
+ bottom: '-300px',
149
+ width: '700px',
150
+ height: '700px',
151
+ opacity: 0.2,
152
+ },
153
+ };
154
+
155
+ tube = {
156
+ position: 'relative',
157
+ flexGrow: 1,
158
+ };
159
+
160
+ const keyframesPowerOn = {
161
+ 'new': null,
162
+ 'old': {
163
+ '0%': {transform: 'scale(1)'},
164
+ '10.0%': {transform: 'scale(1)'},
165
+ '10.1%': {transform: 'scale(0.99)'},
166
+ '10.2%': {transform: 'scale(1)'},
167
+ '20.0%': {transform: 'skewX(0deg)'},
168
+ '20.1%': {transform: 'skewX(-5deg)'},
169
+ '20.2%': {transform: 'skewX(0deg)'},
170
+ '50.0%': {transform: 'scale(1)'},
171
+ '50.1%': {transform: 'scale(0.97)'},
172
+ '50.2%': {transform: 'scale(1)'},
173
+ '50.5%': {transform: 'scale(1)'},
174
+ '50.6%': {transform: 'scale(0.96)'},
175
+ '50.7%': {transform: 'scale(1)'},
176
+ '60.0%': {transform: 'scale(1)'},
177
+ '60.1%': {transform: 'scale(0.97)'},
178
+ '60.2%': {transform: 'scale(1)'},
179
+ '70.0%': {transform: 'skewX(0deg)'},
180
+ '70.2%': {transform: 'skewX(-6deg)'},
181
+ '70.4%': {transform: 'skewX(0deg)'},
182
+ '80.5%': {transform: 'skewX(0deg)'},
183
+ '80.6%': {transform: 'skewX(-5deg)'},
184
+ '80.7%': {transform: 'skewX(0deg)'},
185
+ '80.8%': {transform: 'skewX(-5deg)'},
186
+ '80.9%': {transform: 'skewX(0deg)'},
187
+ '90.2%': {transform: 'scale(1)'},
188
+ '90.4%': {transform: 'scale(0.93)'},
189
+ '90.6%': {transform: 'scale(1)'},
190
+ '100%': {transform: 'scale(1)'},
191
+ },
192
+ 'very-old': {
193
+ '0%': {transform: 'scale(1)'},
194
+ '10.0%': {transform: 'scale(1)'},
195
+ '10.1%': {transform: 'scale(0.98)'},
196
+ '10.2%': {transform: 'scale(1)'},
197
+ '10.6%': {transform: 'scale(0.97)'},
198
+ '10.7%': {transform: 'scale(1)'},
199
+ '12.6%': {transform: 'scale(0.96)'},
200
+ '12.7%': {transform: 'scale(1)'},
201
+ '15.1%': {transform: 'scale(0.97)'},
202
+ '15.3%': {transform: 'scale(1)'},
203
+ '20.0%': {transform: 'skewX(0deg)'},
204
+ '20.1%': {transform: 'skewX(-8deg)'},
205
+ '20.2%': {transform: 'skewX(0deg)'},
206
+ '30.0%': {transform: 'scale(1)'},
207
+ '30.1%': {transform: 'scale(0.97)'},
208
+ '30.2%': {transform: 'scale(1)'},
209
+ '30.4%': {transform: 'scale(0.99)'},
210
+ '30.6%': {transform: 'scale(1)'},
211
+ '33.0%': {transform: 'skewX(0deg)'},
212
+ '33.2%': {transform: 'skewX(-8deg)'},
213
+ '33.4%': {transform: 'skewX(0deg)'},
214
+ '40.3%': {transform: 'scale(0.98)'},
215
+ '40.4%': {transform: 'scale(1)'},
216
+ '40.7%': {transform: 'scale(0.98)'},
217
+ '40.8%': {transform: 'scale(1)'},
218
+ '40.9%': {transform: 'scale(0.97)'},
219
+ '41.0%': {transform: 'scale(1)'},
220
+ '44.3%': {transform: 'skewX(0deg)'},
221
+ '44.4%': {transform: 'skewX(-6deg)'},
222
+ '44.6%': {transform: 'skewX(0deg)'},
223
+ '44.7%': {transform: 'skewX(-8deg)'},
224
+ '44.9%': {transform: 'skewX(0deg)'},
225
+ '46.1%': {transform: 'skewX(-5deg)'},
226
+ '46.2%': {transform: 'skewX(0deg)'},
227
+ '50.0%': {transform: 'scale(1)'},
228
+ '50.1%': {transform: 'scale(0.94)'},
229
+ '50.2%': {transform: 'scale(1)'},
230
+ '50.3%': {transform: 'skewX(0deg)'},
231
+ '50.4%': {transform: 'skewX(-6deg)'},
232
+ '50.6%': {transform: 'skewX(0deg)'},
233
+ '50.8%': {transform: 'scale(1)'},
234
+ '50.9%': {transform: 'scale(0.92)'},
235
+ '51.0%': {transform: 'scale(1)'},
236
+ '56.0%': {transform: 'skewX(0deg)'},
237
+ '56.2%': {transform: 'skewX(-8deg)'},
238
+ '56.4%': {transform: 'skewX(0deg)'},
239
+ '60.0%': {transform: 'scale(1)'},
240
+ '60.1%': {transform: 'scale(0.97)'},
241
+ '60.2%': {transform: 'scale(1)'},
242
+ '60.3%': {transform: 'scale(0.94)'},
243
+ '60.4%': {transform: 'scale(1)'},
244
+ '60.6%': {transform: 'scale(0.97)'},
245
+ '60.7%': {transform: 'scale(1)'},
246
+ '70.0%': {transform: 'skewX(0deg)'},
247
+ '70.2%': {transform: 'skewX(-8deg)'},
248
+ '70.4%': {transform: 'skewX(0deg)'},
249
+ '75.3%': {transform: 'scale(1)'},
250
+ '75.4%': {transform: 'scale(0.95)'},
251
+ '75.5%': {transform: 'scale(1)'},
252
+ '77.0%': {transform: 'scale(1)'},
253
+ '77.1%': {transform: 'scale(0.97)'},
254
+ '77.3%': {transform: 'scale(1)'},
255
+ '80.0%': {transform: 'scale(1)'},
256
+ '80.1%': {transform: 'scale(0.97)'},
257
+ '80.2%': {transform: 'scale(1)'},
258
+ '80.3%': {transform: 'scale(0.94)'},
259
+ '80.4%': {transform: 'scale(1)'},
260
+ '80.5%': {transform: 'skewX(0deg)'},
261
+ '80.6%': {transform: 'skewX(-7deg)'},
262
+ '80.7%': {transform: 'skewX(0deg)'},
263
+ '80.8%': {transform: 'skewX(-7deg)'},
264
+ '80.9%': {transform: 'skewX(0deg)'},
265
+ '82.0%': {transform: 'scale(1)'},
266
+ '82.1%': {transform: 'scale(0.98)'},
267
+ '82.2%': {transform: 'scale(1)'},
268
+ '82.5%': {transform: 'scale(0.93)'},
269
+ '82.7%': {transform: 'scale(1)'},
270
+ '90.2%': {transform: 'scale(1)'},
271
+ '90.4%': {transform: 'scale(0.95)'},
272
+ '90.6%': {transform: 'scale(1)'},
273
+ '90.8%': {transform: 'scale(0.94)'},
274
+ '90.9%': {transform: 'scale(1)'},
275
+ '93.1%': {transform: 'scale(0.97)'},
276
+ '93.2%': {transform: 'scale(1)'},
277
+ '98.1%': {transform: 'scale(0.96)'},
278
+ '98.2%': {transform: 'scale(1)'},
279
+ '100%': {transform: 'scale(1)'},
280
+ },
281
+ };
282
+
283
+ const keyframesPowerOff = {
284
+ '0%': {transform: 'scale(1)'},
285
+ '60%': {transform: 'scale(0.5, 0)'},
286
+ '100%': {transform: 'scale(0.5, 0)'},
287
+ };
288
+
289
+ crt = {
290
+ position: 'absolute',
291
+ left: '0px',
292
+ right: '0px',
293
+ top: '0px',
294
+ bottom: '0px',
295
+ flexGrow: 1,
296
+ animationName: showed ? keyframesPowerOn[aging] : keyframesPowerOff,
297
+ animationDuration: showed ? '27s' : '0.6s',
298
+ animationIterationCount: showed ? 'infinite' : 1,
299
+ };
300
+
301
+ channels = {
302
+ position: 'absolute',
303
+ left: '0px',
304
+ right: '0px',
305
+ top: '0px',
306
+ bottom: '0px',
307
+ };
308
+
309
+ sampleName = {
310
+ position: 'absolute',
311
+ fontSize: '75%',
312
+ textTransform: 'uppercase',
313
+ whiteSpace: 'nowrap',
314
+ overflow: 'hidden',
315
+ textOverflow: 'ellipsis',
316
+ };
317
+
318
+ panel = {
319
+ margin: '2px',
320
+ width: '47px',
321
+ padding: '33px 0px',
322
+ display: 'flex',
323
+ flexDirection: 'column',
324
+ justifyContent: 'flex-end',
325
+ alignItems: 'center',
326
+ background: 'linear-gradient(-180deg, black -100%, #555)',
327
+ };
328
+
329
+ /******************************************************************************/
330
+
331
+ // Enforced shadow.
332
+ const keyframesCRTOff = {
333
+ '20%': {
334
+ border: '0px solid',
335
+ borderBottomColor: 'transparent',
336
+ borderLeftColor: 'transparent',
337
+ borderRightColor: 'transparent',
338
+ borderTopColor: 'transparent',
339
+ },
340
+ '60%': {
341
+ backgroundColor: '#0cff72',
342
+ borderRadius: width,
343
+ },
344
+ '100%': {
345
+ backgroundColor: '#0cff72',
346
+ borderRadius: width,
347
+ },
348
+ };
349
+
350
+ backgroundCRT = {
351
+ position: 'absolute',
352
+ top: '0px',
353
+ left: '0px',
354
+ bottom: '0px',
355
+ right: '0px',
356
+ backgroundColor: '#07401f',
357
+ border: '40px solid',
358
+ borderBottomColor: '#121212',
359
+ borderLeftColor: '#080808',
360
+ borderRightColor: '#080808',
361
+ borderTopColor: '#020202',
362
+ boxShadow: 'inset 0 0 90px black, inset 0 0 15px black, 0 0 50px black',
363
+ animationName: showed ? null : keyframesCRTOff,
364
+ animationDuration: showed ? null : '0.6s',
365
+ animationIterationCount: showed ? null : 1,
366
+ };
367
+
368
+ // Scan lines.
369
+ foregroundCRT1 = {
370
+ position: 'absolute',
371
+ top: '0px',
372
+ left: '0px',
373
+ bottom: '0px',
374
+ right: '0px',
375
+ background:
376
+ 'linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 50%, rgba(0, 0, 0, 0.2) 70%, rgba(0, 0, 0, 0.6)) 0% 0% / 100% 5px',
377
+ borderRadius: '50px',
378
+ };
379
+
380
+ // Horizontal spot trace, from top to bottom.
381
+ const keyframesTrace = {
382
+ 'new': null,
383
+ 'old': {
384
+ '0%': {top: '-100px'},
385
+ '75%': {top: '-100px'},
386
+ '100%': {top: '100%'},
387
+ },
388
+ 'very-old': {
389
+ '0%': {top: '-100px'},
390
+ '100%': {top: '100%'},
391
+ },
392
+ };
393
+
394
+ const durationTrace = {
395
+ 'new': null,
396
+ 'old': '20s',
397
+ 'very-old': '5s',
398
+ };
399
+
400
+ foregroundCRT2 = {
401
+ position: 'absolute',
402
+ top: '0px',
403
+ height: '100px',
404
+ left: '40px',
405
+ right: '40px',
406
+ background: 'linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0.1))',
407
+ animationName: keyframesTrace[aging],
408
+ animationDuration: durationTrace[aging],
409
+ animationIterationCount: 'infinite',
410
+ animationTimingFunction: 'linear',
411
+ opacity: aging === 'new' ? 0 : 1,
412
+ };
413
+
414
+ // Video flicker.
415
+ const keyframesFlicker = {
416
+ '0%': {opacity: 0.27861},
417
+ '5%': {opacity: 0.34769},
418
+ '10%': {opacity: 0.23604},
419
+ '15%': {opacity: 0.90626},
420
+ '20%': {opacity: 0.18128},
421
+ '25%': {opacity: 0.83891},
422
+ '30%': {opacity: 0.65583},
423
+ '35%': {opacity: 0.67807},
424
+ '40%': {opacity: 0.26559},
425
+ '45%': {opacity: 0.84693},
426
+ '50%': {opacity: 0.96019},
427
+ '55%': {opacity: 0.08594},
428
+ '60%': {opacity: 0.20313},
429
+ '65%': {opacity: 0.71988},
430
+ '70%': {opacity: 0.53455},
431
+ '75%': {opacity: 0.37288},
432
+ '80%': {opacity: 0.71428},
433
+ '85%': {opacity: 0.70419},
434
+ '90%': {opacity: 0.7003},
435
+ '95%': {opacity: 0.36108},
436
+ '100%': {opacity: 0.24387},
437
+ };
438
+
439
+ const durationFlicker = {
440
+ 'new': null,
441
+ 'old': '0.15s',
442
+ 'very-old': '0.6s',
443
+ };
444
+
445
+ foregroundCRT3 = {
446
+ position: 'absolute',
447
+ top: '0px',
448
+ left: '0px',
449
+ bottom: '0px',
450
+ right: '0px',
451
+ background: 'rgba(18, 16, 16, 0.15)',
452
+ animationName: keyframesFlicker,
453
+ animationDuration: durationFlicker[aging],
454
+ animationIterationCount: 'infinite',
455
+ };
456
+
457
+ screen = {
458
+ position: 'absolute',
459
+ top: '2px',
460
+ left: '2px',
461
+ width: 'calc(100% - 4px)',
462
+ height: 'calc(100% - 4px)',
463
+ };
464
+
465
+ /******************************************************************************/
466
+
467
+ grid = {
468
+ position: 'absolute',
469
+ width: '100%',
470
+ height: '100%',
471
+ };
472
+
473
+ samples = {
474
+ position: 'absolute',
475
+ width: '100%',
476
+ height: '100%',
477
+ };
478
+
479
+ flare = {
480
+ position: 'absolute',
481
+ margin: '20px',
482
+ right: '0px',
483
+ bottom: '0px',
484
+ width: '100px',
485
+ height: '100px',
486
+ background: 'radial-gradient(circle closest-side, white, transparent)',
487
+ opacity: 0.1,
488
+ transition: '10s ease-out',
489
+ };
490
+
491
+ border = {
492
+ position: 'absolute',
493
+ left: '0px',
494
+ right: '-50px',
495
+ top: '0px',
496
+ bottom: '0px',
497
+ borderRadius: '20px',
498
+ borderTop: '2px solid #ddd',
499
+ borderBottom: '2px solid #333',
500
+ borderLeft: '2px solid #ddd',
501
+ borderRight: '2px solid #222',
502
+ };
503
+ }
504
+
505
+ /******************************************************************************/
506
+
507
+ return {
508
+ monitor,
509
+ tube,
510
+ crt,
511
+ channels,
512
+ sampleName,
513
+ panel,
514
+
515
+ backgroundCRT,
516
+ foregroundCRT1,
517
+ foregroundCRT2,
518
+ foregroundCRT3,
519
+ screen,
520
+
521
+ grid,
522
+ samples,
523
+ flare,
524
+ border,
525
+ chart,
526
+ };
527
+ }
528
+
529
+ /******************************************************************************/