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,491 +1,491 @@
1
- import React from 'react';
2
- import props from './props';
3
- import scenarios from './scenarios';
4
- import {registerWidget} from 'goblin-gadgets/widgets/widget-doc/widget-list';
5
- import Widget from 'goblin-laboratory/widgets/widget';
6
- import * as styles from './styles';
7
- import {Unit} from 'goblin-theme';
8
- const px = Unit.toPx;
9
-
10
- import CarouselButton from '../carousel-button/widget';
11
- import CarouselBullet from '../carousel-bullet/widget';
12
-
13
- /******************************************************************************/
14
-
15
- export default class Carousel extends Widget {
16
- constructor() {
17
- super(...arguments);
18
- this.styles = styles;
19
-
20
- this.carouselNode = null;
21
-
22
- this.state = {
23
- innerWidth: this.maxWidth,
24
- position: 0,
25
- mouseMove: 0,
26
- };
27
-
28
- this.handlePrev = this.handlePrev.bind(this);
29
- this.handleNext = this.handleNext.bind(this);
30
- this.handleResize = this.handleResize.bind(this);
31
- this.handleBulletClicked = this.handleBulletClicked.bind(this);
32
-
33
- this.handleMouseEnter = this.handleMouseEnter.bind(this);
34
- this.handleMouseOver = this.handleMouseOver.bind(this);
35
- this.handleMouseDown = this.handleMouseDown.bind(this);
36
- this.handleMouseMove = this.handleMouseMove.bind(this);
37
- this.handleMouseUp = this.handleMouseUp.bind(this);
38
- this.handleMouseOut = this.handleMouseOut.bind(this);
39
- this.handleMouseLeave = this.handleMouseLeave.bind(this);
40
-
41
- this.handleTouchEnter = this.handleTouchEnter.bind(this);
42
- this.handleTouchMove = this.handleTouchMove.bind(this);
43
- this.handleTouchLeave = this.handleTouchLeave.bind(this);
44
- }
45
-
46
- //#region get/set
47
- get innerWidth() {
48
- return this.state.innerWidth;
49
- }
50
-
51
- set innerWidth(value) {
52
- this.setState({
53
- innerWidth: value,
54
- });
55
- }
56
-
57
- get position() {
58
- return this.state.position;
59
- }
60
-
61
- set position(value) {
62
- this.setState({
63
- position: value,
64
- });
65
- }
66
-
67
- get mouseMove() {
68
- return this.state.mouseMove;
69
- }
70
-
71
- set mouseMove(value) {
72
- this.setState({
73
- mouseMove: value,
74
- });
75
- }
76
- //#endregion
77
-
78
- componentDidMount() {
79
- //- console.log('componentDidMount');
80
- if (this.props.responsive) {
81
- window.addEventListener('resize', this.handleResize);
82
- this.handleResize(); // initialise ui, don't work!!!
83
- }
84
- }
85
-
86
- componentWillUnmount() {
87
- if (this.props.responsive) {
88
- window.removeEventListener('resize', this.handleResize);
89
- }
90
- }
91
-
92
- /******************************************************************************/
93
-
94
- get effectiveWidth() {
95
- if (this.carouselNode) {
96
- return this.carouselNode.getBoundingClientRect().width;
97
- } else {
98
- return null;
99
- }
100
- }
101
-
102
- get maxWidth() {
103
- return Unit.parse(this.props.maxWidth).value;
104
- }
105
-
106
- get itemWidth() {
107
- return Unit.parse(this.props.itemWidth).value;
108
- }
109
-
110
- get itemMargin() {
111
- return Unit.parse(this.props.itemMargin).value;
112
- }
113
-
114
- get carouselWidth() {
115
- const width = Math.min(this.innerWidth, this.maxWidth);
116
- return Math.floor(width / this.itemWidth) * this.itemWidth;
117
- }
118
-
119
- get childrenLength() {
120
- if (this.props.children.length) {
121
- return this.props.children.length;
122
- }
123
-
124
- if (
125
- this.props.children.props &&
126
- this.props.children.props.children &&
127
- this.props.children.props.children.length
128
- ) {
129
- // If <React.Fragment>
130
- return this.props.children.props.children.length;
131
- }
132
-
133
- console.log('Carousel: Invalid children');
134
- return 1;
135
- }
136
-
137
- get pagesCount() {
138
- const visibleCount = Math.ceil(this.carouselWidth / this.itemWidth);
139
- return this.childrenLength - (visibleCount - 1);
140
- }
141
-
142
- get pageSelected() {
143
- const p = Math.floor(
144
- (this.position + this.mouseMove + this.itemWidth / 2) / this.itemWidth
145
- );
146
-
147
- return Math.min(Math.max(p, 0), this.pagesCount - 1);
148
- }
149
-
150
- get minPosition() {
151
- return 0;
152
- }
153
-
154
- get maxPosition() {
155
- return (this.pagesCount - 1) * this.itemWidth;
156
- }
157
-
158
- get leftPosition() {
159
- let position = this.position + this.mouseMove;
160
-
161
- const min = this.minPosition;
162
- const max = this.maxPosition;
163
-
164
- const force = this.props.forceRequiredToOverflow || 5; // 2..n
165
-
166
- if (position < min) {
167
- position = min - (min - position) / force;
168
- }
169
-
170
- if (position > max) {
171
- position = max + (position - max) / force;
172
- }
173
-
174
- return -(position + this.itemMargin);
175
- }
176
-
177
- get hasTouch() {
178
- return this.props.touch && this.pagesCount > 1;
179
- }
180
-
181
- /******************************************************************************/
182
-
183
- startMove(x) {
184
- this.mouseX = x;
185
- this.mouseMove = 0;
186
- this.mouseDown = true;
187
- }
188
-
189
- doMove(x) {
190
- if (this.mouseDown) {
191
- this.mouseMove = this.mouseX - x;
192
- } else {
193
- //
194
- }
195
- }
196
-
197
- endMove() {
198
- const dx =
199
- Math.floor((this.mouseMove + this.itemWidth / 2) / this.itemWidth) *
200
- this.itemWidth;
201
- const position = this.position + dx;
202
-
203
- this.position = Math.min(
204
- Math.max(position, this.minPosition),
205
- this.maxPosition
206
- );
207
-
208
- this.mouseMove = 0;
209
- this.mouseDown = false;
210
- }
211
-
212
- /******************************************************************************/
213
-
214
- handleResize() {
215
- this.position = this.minPosition;
216
- this.innerWidth = this.effectiveWidth;
217
- }
218
-
219
- handlePrev() {
220
- if (this.props.cycling === 'loop' && this.position === this.minPosition) {
221
- this.position = this.maxPosition;
222
- } else {
223
- this.position -= this.itemWidth;
224
- }
225
- }
226
-
227
- handleNext() {
228
- if (this.props.cycling === 'loop' && this.position === this.maxPosition) {
229
- this.position = this.minPosition;
230
- } else {
231
- this.position += this.itemWidth;
232
- }
233
- }
234
-
235
- handleBulletClicked(index) {
236
- this.position = this.itemWidth * index;
237
- }
238
-
239
- handleMouseEnter(e) {
240
- //- console.log('handleMouseEnter');
241
- }
242
-
243
- handleMouseOver(e) {
244
- //- console.log('handleMouseOver');
245
- }
246
-
247
- handleMouseDown(e) {
248
- //- console.log('handleMouseDown');
249
- if (this.hasTouch) {
250
- this.startMove(e.clientX);
251
- }
252
- }
253
-
254
- handleMouseMove(e) {
255
- //- console.log('handleMouseMove');
256
- if (this.hasTouch) {
257
- this.doMove(e.clientX);
258
- }
259
- }
260
-
261
- handleMouseUp(e) {
262
- //- console.log('handleMouseUp');
263
- if (this.hasTouch) {
264
- this.endMove();
265
- }
266
- }
267
-
268
- handleMouseOut(e) {
269
- //- console.log('handleMouseOut');
270
- }
271
-
272
- handleMouseLeave(e) {
273
- //- console.log('handleMouseLeave');
274
- if (this.mouseDown) {
275
- this.handleMouseUp(e);
276
- }
277
- }
278
-
279
- handleTouchEnter(e) {
280
- //- console.log('handleTouchEnter');
281
- if (this.hasTouch && e.touches.length === 1) {
282
- this.startMove(e.touches[0].clientX);
283
- }
284
- }
285
-
286
- handleTouchMove(e) {
287
- //- console.log('handleTouchMove');
288
- if (this.hasTouch && e.touches.length === 1) {
289
- this.doMove(e.touches[0].clientX);
290
- }
291
- }
292
-
293
- handleTouchLeave(e) {
294
- //- console.log('handleTouchLeave');
295
- if (this.hasTouch) {
296
- this.endMove();
297
- }
298
- }
299
-
300
- /******************************************************************************/
301
-
302
- renderBullet(selected, index) {
303
- return (
304
- <CarouselBullet
305
- key={index}
306
- selected={selected}
307
- onClick={() => this.handleBulletClicked(index)}
308
- />
309
- );
310
- }
311
-
312
- renderBullets(pagesCount) {
313
- const pageSelected = this.pageSelected;
314
-
315
- const result = [];
316
- for (let index = 0; index < pagesCount; index++) {
317
- const selected = pageSelected === index;
318
- result.push(this.renderBullet(selected, index));
319
- }
320
- return result;
321
- }
322
-
323
- renderNavigator() {
324
- if (this.props.navigator !== 'bullets') {
325
- return null;
326
- }
327
-
328
- const pagesCount = this.pagesCount;
329
- if (pagesCount <= 1) {
330
- return null;
331
- }
332
-
333
- return (
334
- <div className={this.styles.classNames.navigator}>
335
- {this.renderBullets(pagesCount)}
336
- </div>
337
- );
338
- }
339
-
340
- renderButtonPrev() {
341
- if (this.pagesCount <= 1) {
342
- return null;
343
- }
344
-
345
- const enabled =
346
- this.props.cycling === 'loop' ||
347
- (this.pagesCount > 1 && this.pageSelected > 0);
348
-
349
- return (
350
- <div className={this.styles.classNames.buttonPrev}>
351
- <CarouselButton
352
- kind="left"
353
- shape={this.props.buttonsShape}
354
- size={this.props.buttonsSize}
355
- disabled={!enabled}
356
- onClick={this.handlePrev}
357
- />
358
- </div>
359
- );
360
- }
361
-
362
- renderButtonNext() {
363
- if (this.pagesCount <= 1) {
364
- return null;
365
- }
366
-
367
- const enabled =
368
- this.props.cycling === 'loop' ||
369
- (this.pagesCount > 1 && this.pageSelected < this.pagesCount - 1);
370
-
371
- return (
372
- <div className={this.styles.classNames.buttonNext}>
373
- <CarouselButton
374
- kind="right"
375
- shape={this.props.buttonsShape}
376
- size={this.props.buttonsSize}
377
- disabled={!enabled}
378
- onClick={this.handleNext}
379
- />
380
- </div>
381
- );
382
- }
383
-
384
- renderPages() {
385
- const bandStyle = {
386
- left: px(this.leftPosition),
387
- };
388
-
389
- return (
390
- <div className={this.styles.classNames.horizontalBand} style={bandStyle}>
391
- {this.props.children}
392
- </div>
393
- );
394
- }
395
-
396
- render_SIMPLE() {
397
- return (
398
- <div
399
- className={this.styles.classNames.carousel}
400
- ref={(node) => (this.carouselNode = node)}
401
- >
402
- <div
403
- className={this.styles.classNames.carouselShrinked_SIMPLE}
404
- onMouseEnter={this.handleMouseEnter}
405
- onMouseOver={this.handleMouseOver}
406
- onMouseDown={this.handleMouseDown}
407
- onMouseMove={this.handleMouseMove}
408
- onMouseUp={this.handleMouseUp}
409
- onMouseOut={this.handleMouseOut}
410
- onMouseLeave={this.handleMouseLeave}
411
- onTouchStart={this.handleTouchEnter}
412
- onTouchMove={this.handleTouchMove}
413
- onTouchEnd={this.handleTouchLeave}
414
- onTouchCancel={this.handleTouchLeave}
415
- >
416
- {this.renderPages()}
417
- {this.renderNavigator()}
418
- {this.renderButtonPrev()}
419
- {this.renderButtonNext()}
420
- </div>
421
- </div>
422
- );
423
- }
424
-
425
- render_MEDIA() {
426
- return (
427
- <div
428
- className={this.styles.classNames.carousel}
429
- ref={(node) => (this.carouselNode = node)}
430
- >
431
- <div
432
- className={this.styles.classNames.carouselShrinked_MEDIA}
433
- onMouseEnter={this.handleMouseEnter}
434
- onMouseOver={this.handleMouseOver}
435
- onMouseDown={this.handleMouseDown}
436
- onMouseMove={this.handleMouseMove}
437
- onMouseUp={this.handleMouseUp}
438
- onMouseOut={this.handleMouseOut}
439
- onMouseLeave={this.handleMouseLeave}
440
- onTouchStart={this.handleTouchEnter}
441
- onTouchMove={this.handleTouchMove}
442
- onTouchEnd={this.handleTouchLeave}
443
- onTouchCancel={this.handleTouchLeave}
444
- >
445
- {this.renderPages()}
446
- {this.renderNavigator()}
447
- {this.renderButtonPrev()}
448
- {this.renderButtonNext()}
449
- </div>
450
- </div>
451
- );
452
- }
453
-
454
- render() {
455
- const carouselStyle = {
456
- maxWidth: px(this.carouselWidth - this.itemMargin * 2),
457
- };
458
-
459
- return (
460
- <div
461
- className={this.styles.classNames.carousel}
462
- ref={(node) => (this.carouselNode = node)}
463
- >
464
- <div
465
- className={this.styles.classNames.carouselShrinked}
466
- style={carouselStyle}
467
- onMouseEnter={this.handleMouseEnter}
468
- onMouseOver={this.handleMouseOver}
469
- onMouseDown={this.handleMouseDown}
470
- onMouseMove={this.handleMouseMove}
471
- onMouseUp={this.handleMouseUp}
472
- onMouseOut={this.handleMouseOut}
473
- onMouseLeave={this.handleMouseLeave}
474
- onTouchStart={this.handleTouchEnter}
475
- onTouchMove={this.handleTouchMove}
476
- onTouchEnd={this.handleTouchLeave}
477
- onTouchCancel={this.handleTouchLeave}
478
- >
479
- {this.renderPages()}
480
- {this.renderNavigator()}
481
- {this.renderButtonPrev()}
482
- {this.renderButtonNext()}
483
- </div>
484
- </div>
485
- );
486
- }
487
- }
488
-
489
- /******************************************************************************/
490
-
491
- registerWidget(Carousel, props, scenarios);
1
+ import React from 'react';
2
+ import props from './props';
3
+ import scenarios from './scenarios';
4
+ import {registerWidget} from 'goblin-gadgets/widgets/widget-doc/widget-list';
5
+ import Widget from 'goblin-laboratory/widgets/widget';
6
+ import * as styles from './styles';
7
+ import {Unit} from 'goblin-theme';
8
+ const px = Unit.toPx;
9
+
10
+ import CarouselButton from '../carousel-button/widget';
11
+ import CarouselBullet from '../carousel-bullet/widget';
12
+
13
+ /******************************************************************************/
14
+
15
+ export default class Carousel extends Widget {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.styles = styles;
19
+
20
+ this.carouselNode = null;
21
+
22
+ this.state = {
23
+ innerWidth: this.maxWidth,
24
+ position: 0,
25
+ mouseMove: 0,
26
+ };
27
+
28
+ this.handlePrev = this.handlePrev.bind(this);
29
+ this.handleNext = this.handleNext.bind(this);
30
+ this.handleResize = this.handleResize.bind(this);
31
+ this.handleBulletClicked = this.handleBulletClicked.bind(this);
32
+
33
+ this.handleMouseEnter = this.handleMouseEnter.bind(this);
34
+ this.handleMouseOver = this.handleMouseOver.bind(this);
35
+ this.handleMouseDown = this.handleMouseDown.bind(this);
36
+ this.handleMouseMove = this.handleMouseMove.bind(this);
37
+ this.handleMouseUp = this.handleMouseUp.bind(this);
38
+ this.handleMouseOut = this.handleMouseOut.bind(this);
39
+ this.handleMouseLeave = this.handleMouseLeave.bind(this);
40
+
41
+ this.handleTouchEnter = this.handleTouchEnter.bind(this);
42
+ this.handleTouchMove = this.handleTouchMove.bind(this);
43
+ this.handleTouchLeave = this.handleTouchLeave.bind(this);
44
+ }
45
+
46
+ //#region get/set
47
+ get innerWidth() {
48
+ return this.state.innerWidth;
49
+ }
50
+
51
+ set innerWidth(value) {
52
+ this.setState({
53
+ innerWidth: value,
54
+ });
55
+ }
56
+
57
+ get position() {
58
+ return this.state.position;
59
+ }
60
+
61
+ set position(value) {
62
+ this.setState({
63
+ position: value,
64
+ });
65
+ }
66
+
67
+ get mouseMove() {
68
+ return this.state.mouseMove;
69
+ }
70
+
71
+ set mouseMove(value) {
72
+ this.setState({
73
+ mouseMove: value,
74
+ });
75
+ }
76
+ //#endregion
77
+
78
+ componentDidMount() {
79
+ //- console.log('componentDidMount');
80
+ if (this.props.responsive) {
81
+ window.addEventListener('resize', this.handleResize);
82
+ this.handleResize(); // initialise ui, don't work!!!
83
+ }
84
+ }
85
+
86
+ componentWillUnmount() {
87
+ if (this.props.responsive) {
88
+ window.removeEventListener('resize', this.handleResize);
89
+ }
90
+ }
91
+
92
+ /******************************************************************************/
93
+
94
+ get effectiveWidth() {
95
+ if (this.carouselNode) {
96
+ return this.carouselNode.getBoundingClientRect().width;
97
+ } else {
98
+ return null;
99
+ }
100
+ }
101
+
102
+ get maxWidth() {
103
+ return Unit.parse(this.props.maxWidth).value;
104
+ }
105
+
106
+ get itemWidth() {
107
+ return Unit.parse(this.props.itemWidth).value;
108
+ }
109
+
110
+ get itemMargin() {
111
+ return Unit.parse(this.props.itemMargin).value;
112
+ }
113
+
114
+ get carouselWidth() {
115
+ const width = Math.min(this.innerWidth, this.maxWidth);
116
+ return Math.floor(width / this.itemWidth) * this.itemWidth;
117
+ }
118
+
119
+ get childrenLength() {
120
+ if (this.props.children.length) {
121
+ return this.props.children.length;
122
+ }
123
+
124
+ if (
125
+ this.props.children.props &&
126
+ this.props.children.props.children &&
127
+ this.props.children.props.children.length
128
+ ) {
129
+ // If <React.Fragment>
130
+ return this.props.children.props.children.length;
131
+ }
132
+
133
+ console.log('Carousel: Invalid children');
134
+ return 1;
135
+ }
136
+
137
+ get pagesCount() {
138
+ const visibleCount = Math.ceil(this.carouselWidth / this.itemWidth);
139
+ return this.childrenLength - (visibleCount - 1);
140
+ }
141
+
142
+ get pageSelected() {
143
+ const p = Math.floor(
144
+ (this.position + this.mouseMove + this.itemWidth / 2) / this.itemWidth
145
+ );
146
+
147
+ return Math.min(Math.max(p, 0), this.pagesCount - 1);
148
+ }
149
+
150
+ get minPosition() {
151
+ return 0;
152
+ }
153
+
154
+ get maxPosition() {
155
+ return (this.pagesCount - 1) * this.itemWidth;
156
+ }
157
+
158
+ get leftPosition() {
159
+ let position = this.position + this.mouseMove;
160
+
161
+ const min = this.minPosition;
162
+ const max = this.maxPosition;
163
+
164
+ const force = this.props.forceRequiredToOverflow || 5; // 2..n
165
+
166
+ if (position < min) {
167
+ position = min - (min - position) / force;
168
+ }
169
+
170
+ if (position > max) {
171
+ position = max + (position - max) / force;
172
+ }
173
+
174
+ return -(position + this.itemMargin);
175
+ }
176
+
177
+ get hasTouch() {
178
+ return this.props.touch && this.pagesCount > 1;
179
+ }
180
+
181
+ /******************************************************************************/
182
+
183
+ startMove(x) {
184
+ this.mouseX = x;
185
+ this.mouseMove = 0;
186
+ this.mouseDown = true;
187
+ }
188
+
189
+ doMove(x) {
190
+ if (this.mouseDown) {
191
+ this.mouseMove = this.mouseX - x;
192
+ } else {
193
+ //
194
+ }
195
+ }
196
+
197
+ endMove() {
198
+ const dx =
199
+ Math.floor((this.mouseMove + this.itemWidth / 2) / this.itemWidth) *
200
+ this.itemWidth;
201
+ const position = this.position + dx;
202
+
203
+ this.position = Math.min(
204
+ Math.max(position, this.minPosition),
205
+ this.maxPosition
206
+ );
207
+
208
+ this.mouseMove = 0;
209
+ this.mouseDown = false;
210
+ }
211
+
212
+ /******************************************************************************/
213
+
214
+ handleResize() {
215
+ this.position = this.minPosition;
216
+ this.innerWidth = this.effectiveWidth;
217
+ }
218
+
219
+ handlePrev() {
220
+ if (this.props.cycling === 'loop' && this.position === this.minPosition) {
221
+ this.position = this.maxPosition;
222
+ } else {
223
+ this.position -= this.itemWidth;
224
+ }
225
+ }
226
+
227
+ handleNext() {
228
+ if (this.props.cycling === 'loop' && this.position === this.maxPosition) {
229
+ this.position = this.minPosition;
230
+ } else {
231
+ this.position += this.itemWidth;
232
+ }
233
+ }
234
+
235
+ handleBulletClicked(index) {
236
+ this.position = this.itemWidth * index;
237
+ }
238
+
239
+ handleMouseEnter(e) {
240
+ //- console.log('handleMouseEnter');
241
+ }
242
+
243
+ handleMouseOver(e) {
244
+ //- console.log('handleMouseOver');
245
+ }
246
+
247
+ handleMouseDown(e) {
248
+ //- console.log('handleMouseDown');
249
+ if (this.hasTouch) {
250
+ this.startMove(e.clientX);
251
+ }
252
+ }
253
+
254
+ handleMouseMove(e) {
255
+ //- console.log('handleMouseMove');
256
+ if (this.hasTouch) {
257
+ this.doMove(e.clientX);
258
+ }
259
+ }
260
+
261
+ handleMouseUp(e) {
262
+ //- console.log('handleMouseUp');
263
+ if (this.hasTouch) {
264
+ this.endMove();
265
+ }
266
+ }
267
+
268
+ handleMouseOut(e) {
269
+ //- console.log('handleMouseOut');
270
+ }
271
+
272
+ handleMouseLeave(e) {
273
+ //- console.log('handleMouseLeave');
274
+ if (this.mouseDown) {
275
+ this.handleMouseUp(e);
276
+ }
277
+ }
278
+
279
+ handleTouchEnter(e) {
280
+ //- console.log('handleTouchEnter');
281
+ if (this.hasTouch && e.touches.length === 1) {
282
+ this.startMove(e.touches[0].clientX);
283
+ }
284
+ }
285
+
286
+ handleTouchMove(e) {
287
+ //- console.log('handleTouchMove');
288
+ if (this.hasTouch && e.touches.length === 1) {
289
+ this.doMove(e.touches[0].clientX);
290
+ }
291
+ }
292
+
293
+ handleTouchLeave(e) {
294
+ //- console.log('handleTouchLeave');
295
+ if (this.hasTouch) {
296
+ this.endMove();
297
+ }
298
+ }
299
+
300
+ /******************************************************************************/
301
+
302
+ renderBullet(selected, index) {
303
+ return (
304
+ <CarouselBullet
305
+ key={index}
306
+ selected={selected}
307
+ onClick={() => this.handleBulletClicked(index)}
308
+ />
309
+ );
310
+ }
311
+
312
+ renderBullets(pagesCount) {
313
+ const pageSelected = this.pageSelected;
314
+
315
+ const result = [];
316
+ for (let index = 0; index < pagesCount; index++) {
317
+ const selected = pageSelected === index;
318
+ result.push(this.renderBullet(selected, index));
319
+ }
320
+ return result;
321
+ }
322
+
323
+ renderNavigator() {
324
+ if (this.props.navigator !== 'bullets') {
325
+ return null;
326
+ }
327
+
328
+ const pagesCount = this.pagesCount;
329
+ if (pagesCount <= 1) {
330
+ return null;
331
+ }
332
+
333
+ return (
334
+ <div className={this.styles.classNames.navigator}>
335
+ {this.renderBullets(pagesCount)}
336
+ </div>
337
+ );
338
+ }
339
+
340
+ renderButtonPrev() {
341
+ if (this.pagesCount <= 1) {
342
+ return null;
343
+ }
344
+
345
+ const enabled =
346
+ this.props.cycling === 'loop' ||
347
+ (this.pagesCount > 1 && this.pageSelected > 0);
348
+
349
+ return (
350
+ <div className={this.styles.classNames.buttonPrev}>
351
+ <CarouselButton
352
+ kind="left"
353
+ shape={this.props.buttonsShape}
354
+ size={this.props.buttonsSize}
355
+ disabled={!enabled}
356
+ onClick={this.handlePrev}
357
+ />
358
+ </div>
359
+ );
360
+ }
361
+
362
+ renderButtonNext() {
363
+ if (this.pagesCount <= 1) {
364
+ return null;
365
+ }
366
+
367
+ const enabled =
368
+ this.props.cycling === 'loop' ||
369
+ (this.pagesCount > 1 && this.pageSelected < this.pagesCount - 1);
370
+
371
+ return (
372
+ <div className={this.styles.classNames.buttonNext}>
373
+ <CarouselButton
374
+ kind="right"
375
+ shape={this.props.buttonsShape}
376
+ size={this.props.buttonsSize}
377
+ disabled={!enabled}
378
+ onClick={this.handleNext}
379
+ />
380
+ </div>
381
+ );
382
+ }
383
+
384
+ renderPages() {
385
+ const bandStyle = {
386
+ left: px(this.leftPosition),
387
+ };
388
+
389
+ return (
390
+ <div className={this.styles.classNames.horizontalBand} style={bandStyle}>
391
+ {this.props.children}
392
+ </div>
393
+ );
394
+ }
395
+
396
+ render_SIMPLE() {
397
+ return (
398
+ <div
399
+ className={this.styles.classNames.carousel}
400
+ ref={(node) => (this.carouselNode = node)}
401
+ >
402
+ <div
403
+ className={this.styles.classNames.carouselShrinked_SIMPLE}
404
+ onMouseEnter={this.handleMouseEnter}
405
+ onMouseOver={this.handleMouseOver}
406
+ onMouseDown={this.handleMouseDown}
407
+ onMouseMove={this.handleMouseMove}
408
+ onMouseUp={this.handleMouseUp}
409
+ onMouseOut={this.handleMouseOut}
410
+ onMouseLeave={this.handleMouseLeave}
411
+ onTouchStart={this.handleTouchEnter}
412
+ onTouchMove={this.handleTouchMove}
413
+ onTouchEnd={this.handleTouchLeave}
414
+ onTouchCancel={this.handleTouchLeave}
415
+ >
416
+ {this.renderPages()}
417
+ {this.renderNavigator()}
418
+ {this.renderButtonPrev()}
419
+ {this.renderButtonNext()}
420
+ </div>
421
+ </div>
422
+ );
423
+ }
424
+
425
+ render_MEDIA() {
426
+ return (
427
+ <div
428
+ className={this.styles.classNames.carousel}
429
+ ref={(node) => (this.carouselNode = node)}
430
+ >
431
+ <div
432
+ className={this.styles.classNames.carouselShrinked_MEDIA}
433
+ onMouseEnter={this.handleMouseEnter}
434
+ onMouseOver={this.handleMouseOver}
435
+ onMouseDown={this.handleMouseDown}
436
+ onMouseMove={this.handleMouseMove}
437
+ onMouseUp={this.handleMouseUp}
438
+ onMouseOut={this.handleMouseOut}
439
+ onMouseLeave={this.handleMouseLeave}
440
+ onTouchStart={this.handleTouchEnter}
441
+ onTouchMove={this.handleTouchMove}
442
+ onTouchEnd={this.handleTouchLeave}
443
+ onTouchCancel={this.handleTouchLeave}
444
+ >
445
+ {this.renderPages()}
446
+ {this.renderNavigator()}
447
+ {this.renderButtonPrev()}
448
+ {this.renderButtonNext()}
449
+ </div>
450
+ </div>
451
+ );
452
+ }
453
+
454
+ render() {
455
+ const carouselStyle = {
456
+ maxWidth: px(this.carouselWidth - this.itemMargin * 2),
457
+ };
458
+
459
+ return (
460
+ <div
461
+ className={this.styles.classNames.carousel}
462
+ ref={(node) => (this.carouselNode = node)}
463
+ >
464
+ <div
465
+ className={this.styles.classNames.carouselShrinked}
466
+ style={carouselStyle}
467
+ onMouseEnter={this.handleMouseEnter}
468
+ onMouseOver={this.handleMouseOver}
469
+ onMouseDown={this.handleMouseDown}
470
+ onMouseMove={this.handleMouseMove}
471
+ onMouseUp={this.handleMouseUp}
472
+ onMouseOut={this.handleMouseOut}
473
+ onMouseLeave={this.handleMouseLeave}
474
+ onTouchStart={this.handleTouchEnter}
475
+ onTouchMove={this.handleTouchMove}
476
+ onTouchEnd={this.handleTouchLeave}
477
+ onTouchCancel={this.handleTouchLeave}
478
+ >
479
+ {this.renderPages()}
480
+ {this.renderNavigator()}
481
+ {this.renderButtonPrev()}
482
+ {this.renderButtonNext()}
483
+ </div>
484
+ </div>
485
+ );
486
+ }
487
+ }
488
+
489
+ /******************************************************************************/
490
+
491
+ registerWidget(Carousel, props, scenarios);