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,339 +1,339 @@
1
- import React from 'react';
2
- import Widget from 'goblin-laboratory/widgets/widget';
3
- import props from './props';
4
- import scenarios from './scenarios';
5
- import {registerWidget} from 'goblin-gadgets/widgets/widget-doc/widget-list';
6
- import KeyTrap from 'goblin-gadgets/widgets/key-trap.js';
7
- import {isShredder} from 'xcraft-core-shredder';
8
-
9
- import ButtonCombo from 'goblin-gadgets/widgets/button-combo/widget';
10
- import wrapRawInput from 'goblin-gadgets/widgets/input-wrapper/widget.js';
11
- import TextInputNC from '../text-input-nc/widget';
12
-
13
- /******************************************************************************/
14
-
15
- class TextFieldComboNC extends Widget {
16
- constructor() {
17
- super(...arguments);
18
-
19
- this.state = {
20
- focus: false,
21
- };
22
-
23
- this.isBinded = false;
24
-
25
- this.doChangeCombo = this.doChangeCombo.bind(this);
26
- this.doChangeTextField = this.doChangeTextField.bind(this);
27
- this.onFocus = this.onFocus.bind(this);
28
- this.onBlur = this.onBlur.bind(this);
29
- this.onEscKey = this.onEscKey.bind(this);
30
- this.onUpKey = this.onUpKey.bind(this);
31
- this.onDownKey = this.onDownKey.bind(this);
32
- this.onEnterKey = this.onEnterKey.bind(this);
33
- this.setListRef = this.setListRef.bind(this);
34
- this.onShowCombo = this.onShowCombo.bind(this);
35
- this.onHideCombo = this.onHideCombo.bind(this);
36
- this.setButtonComboRef = this.setButtonComboRef.bind(this);
37
- }
38
-
39
- setListRef(ref) {
40
- this.listRef = ref;
41
- }
42
- setButtonComboRef(ref) {
43
- this.buttonComboRef = ref;
44
- }
45
-
46
- doChangeTextField(id) {
47
- if (this.props.onChange) {
48
- this.props.onChange(id);
49
- }
50
- }
51
-
52
- doChangeCombo(item) {
53
- if (this.props.onValidate) {
54
- this.props.onValidate(item.id);
55
- }
56
- }
57
-
58
- onShowCombo() {
59
- this.bindKeys();
60
- if (this.props.onShowCombo) {
61
- this.props.onShowCombo();
62
- }
63
- }
64
-
65
- onHideCombo() {
66
- if (!this.state.focus) {
67
- this.unbindKeys();
68
- }
69
- if (this.props.onHideCombo) {
70
- this.props.onHideCombo();
71
- }
72
- }
73
-
74
- bindKeys() {
75
- if (!this.isBinded) {
76
- KeyTrap.bind('ArrowUp', this.onUpKey);
77
- KeyTrap.bind('ArrowDown', this.onDownKey);
78
- KeyTrap.bind('Enter', this.onEnterKey);
79
- KeyTrap.bind('Escape', this.onEscKey);
80
- this.isBinded = true;
81
- }
82
- }
83
-
84
- unbindKeys() {
85
- if (this.isBinded) {
86
- KeyTrap.unbind('ArrowUp', this.onUpKey);
87
- KeyTrap.unbind('ArrowDown', this.onDownKey);
88
- KeyTrap.unbind('Enter', this.onEnterKey);
89
- KeyTrap.unbind('Escape', this.onEscKey);
90
- this.isBinded = false;
91
- }
92
- }
93
-
94
- onFocus() {
95
- this.bindKeys();
96
- this.setState({
97
- focus: true,
98
- });
99
- if (this.props.onFocus) {
100
- this.props.onFocus(this.props.selectedId);
101
- }
102
- }
103
-
104
- onBlur() {
105
- this.unbindKeys();
106
- this.setState({
107
- focus: false,
108
- });
109
- if (this.props.onBlur) {
110
- this.props.onBlur(this.props.selectedId);
111
- }
112
- }
113
-
114
- onUpKey() {
115
- this.showCombo();
116
- if (this.listRef) {
117
- this.listRef.onUpKey();
118
- }
119
- }
120
-
121
- onDownKey() {
122
- this.showCombo();
123
- if (this.listRef) {
124
- this.listRef.onDownKey();
125
- }
126
- }
127
-
128
- onEnterKey() {
129
- if (this.listRef) {
130
- this.listRef.onEnterKey();
131
- }
132
- }
133
-
134
- onEscKey() {
135
- if (this.listRef) {
136
- this.listRef.onEscKey();
137
- }
138
- }
139
-
140
- showCombo() {
141
- if (this.buttonComboRef) {
142
- this.buttonComboRef.showCombo();
143
- }
144
- }
145
-
146
- convertList() {
147
- this.list = this.props.list || [];
148
- if (isShredder(this.list)) {
149
- this.list = this.list.toJS();
150
- }
151
-
152
- if (this.list.length > 0 || this.list.size > 0) {
153
- this.list = this.list.map((item) => {
154
- switch (typeof item) {
155
- case 'number':
156
- case 'string':
157
- item = {
158
- id: item,
159
- text: item,
160
- value: item,
161
- action: this.doChangeCombo,
162
- };
163
- break;
164
- case 'object': {
165
- if (item.id === undefined) {
166
- console.warn(
167
- `Id not defined for ${JSON.stringify(
168
- item
169
- )} in TextFieldComboNC !`
170
- );
171
- }
172
- if (item.text === undefined) {
173
- console.warn(
174
- `Text not defined for ${JSON.stringify(
175
- item
176
- )} in TextFieldComboNC !`
177
- );
178
- }
179
- const id =
180
- item.id !== undefined
181
- ? item.id
182
- : item.value !== undefined
183
- ? item.value
184
- : item.text;
185
- item = {
186
- id,
187
- text: item.text !== undefined ? item.text : id,
188
- value: item.value,
189
- glyph: item.glyph,
190
- color: item.color,
191
- action: this.doChangeCombo,
192
- };
193
- if (typeof item.glyph === 'object') {
194
- item.color = item.glyph.color;
195
- item.glyph = item.glyph.glyph;
196
- }
197
- break;
198
- }
199
- default:
200
- throw Error(
201
- 'Item Format not accepted in TextFieldComboNC ! ' +
202
- JSON.stringify(item)
203
- );
204
- }
205
- return item;
206
- });
207
- }
208
- }
209
-
210
- /******************************************************************************/
211
-
212
- renderTextField() {
213
- const shape = this.props.shape || 'smooth';
214
- const hideButton = this.props.readonly || this.props.hideButtonCombo;
215
- const textFieldShapes = hideButton
216
- ? {
217
- smooth: 'smooth',
218
- rounded: 'rounded',
219
- }
220
- : {
221
- smooth: 'left-smooth',
222
- rounded: 'left-rounded',
223
- };
224
- const textFieldShape = textFieldShapes[shape];
225
-
226
- let selectedItem = this.list.find(
227
- (item) => item.id === this.props.selectedId
228
- );
229
-
230
- if (!selectedItem) {
231
- selectedItem = {
232
- id: this.props.selectedId,
233
- text: this.props.selectedId,
234
- value: this.props.selectedId,
235
- glyph: null,
236
- };
237
- }
238
-
239
- let glyph = {glyph: selectedItem.glyph, color: selectedItem.color};
240
- if (this.props.getGlyph && glyph.glyph === null) {
241
- glyph = this.props.getGlyph(this.props.selectedId) || null;
242
- }
243
- if (this.props.menuType !== 'wrap' || !glyph || !glyph.glyph) {
244
- glyph = null;
245
- }
246
-
247
- let value = selectedItem.id || '';
248
-
249
- if (
250
- (this.props.readonly || this.props.restrictsToList) &&
251
- selectedItem.text
252
- ) {
253
- value = selectedItem.text;
254
- }
255
-
256
- let TextComponent = TextInputNC;
257
- if (this.props.renderTextField) {
258
- TextComponent = this.props.renderTextField;
259
- }
260
-
261
- return (
262
- <TextComponent
263
- hintText={this.props.hintText}
264
- tooltip={this.props.tooltip}
265
- horizontalSpacing="overlap"
266
- shape={textFieldShape}
267
- //flyingBalloonAnchor={this.props.flyingBalloonAnchor}
268
- value={value}
269
- glyph={glyph}
270
- width={this.props.fieldWidth}
271
- grow={this.props.fieldWidth ? null : '1'}
272
- rows={this.props.rows}
273
- readonly={this.props.restrictsToList || this.props.readonly}
274
- disabled={this.props.disabled}
275
- required={this.props.required}
276
- embeddedFocus={true}
277
- visibility={this.props.visibility}
278
- onChange={this.doChangeTextField}
279
- onFocus={this.onFocus}
280
- onBlur={this.onBlur}
281
- onValidate={this.props.onValidate}
282
- autoFocus={this.props.autoFocus}
283
- selectAllOnFocus={this.props.selectAllOnFocus}
284
- />
285
- );
286
- }
287
-
288
- render() {
289
- if (this.props.show === false) {
290
- return null;
291
- }
292
-
293
- if (!this.props.list) {
294
- return null;
295
- }
296
-
297
- if (this.props.list !== this.previousList) {
298
- this.convertList();
299
- this.previousList = this.props.list;
300
- }
301
-
302
- return (
303
- <ButtonCombo
304
- parentRect={this.props.parentRect}
305
- width={this.props.width}
306
- grow={this.props.grow}
307
- menuType={this.props.menuType}
308
- menuItemWidth={this.props.menuItemWidth}
309
- menuItemTooltips={this.props.menuItemTooltips}
310
- readonly={this.props.readonly}
311
- restrictsToList={this.props.restrictsToList}
312
- disabled={this.props.disabled}
313
- onShowCombo={this.onShowCombo}
314
- onHideCombo={this.onHideCombo}
315
- node={this.node}
316
- selectedId={this.props.selectedId}
317
- list={this.list}
318
- horizontalSpacing={this.props.horizontalSpacing}
319
- shape={this.props.shape}
320
- comboGlyph={this.props.comboGlyph}
321
- comboTextTransform={this.props.comboTextTransform}
322
- focus={this.state.focus}
323
- hideButtonCombo={this.props.hideButtonCombo}
324
- setListRef={this.setListRef}
325
- ref={this.setButtonComboRef}
326
- >
327
- {this.renderTextField()}
328
- </ButtonCombo>
329
- );
330
- }
331
- }
332
-
333
- /******************************************************************************/
334
-
335
- registerWidget(TextFieldComboNC, props, scenarios);
336
-
337
- /******************************************************************************/
338
-
339
- export default wrapRawInput(TextFieldComboNC, 'selectedId');
1
+ import React from 'react';
2
+ import Widget from 'goblin-laboratory/widgets/widget';
3
+ import props from './props';
4
+ import scenarios from './scenarios';
5
+ import {registerWidget} from 'goblin-gadgets/widgets/widget-doc/widget-list';
6
+ import KeyTrap from 'goblin-gadgets/widgets/key-trap.js';
7
+ import {isShredder} from 'xcraft-core-shredder';
8
+
9
+ import ButtonCombo from 'goblin-gadgets/widgets/button-combo/widget';
10
+ import wrapRawInput from 'goblin-gadgets/widgets/input-wrapper/widget.js';
11
+ import TextInputNC from '../text-input-nc/widget';
12
+
13
+ /******************************************************************************/
14
+
15
+ class TextFieldComboNC extends Widget {
16
+ constructor() {
17
+ super(...arguments);
18
+
19
+ this.state = {
20
+ focus: false,
21
+ };
22
+
23
+ this.isBinded = false;
24
+
25
+ this.doChangeCombo = this.doChangeCombo.bind(this);
26
+ this.doChangeTextField = this.doChangeTextField.bind(this);
27
+ this.onFocus = this.onFocus.bind(this);
28
+ this.onBlur = this.onBlur.bind(this);
29
+ this.onEscKey = this.onEscKey.bind(this);
30
+ this.onUpKey = this.onUpKey.bind(this);
31
+ this.onDownKey = this.onDownKey.bind(this);
32
+ this.onEnterKey = this.onEnterKey.bind(this);
33
+ this.setListRef = this.setListRef.bind(this);
34
+ this.onShowCombo = this.onShowCombo.bind(this);
35
+ this.onHideCombo = this.onHideCombo.bind(this);
36
+ this.setButtonComboRef = this.setButtonComboRef.bind(this);
37
+ }
38
+
39
+ setListRef(ref) {
40
+ this.listRef = ref;
41
+ }
42
+ setButtonComboRef(ref) {
43
+ this.buttonComboRef = ref;
44
+ }
45
+
46
+ doChangeTextField(id) {
47
+ if (this.props.onChange) {
48
+ this.props.onChange(id);
49
+ }
50
+ }
51
+
52
+ doChangeCombo(item) {
53
+ if (this.props.onValidate) {
54
+ this.props.onValidate(item.id);
55
+ }
56
+ }
57
+
58
+ onShowCombo() {
59
+ this.bindKeys();
60
+ if (this.props.onShowCombo) {
61
+ this.props.onShowCombo();
62
+ }
63
+ }
64
+
65
+ onHideCombo() {
66
+ if (!this.state.focus) {
67
+ this.unbindKeys();
68
+ }
69
+ if (this.props.onHideCombo) {
70
+ this.props.onHideCombo();
71
+ }
72
+ }
73
+
74
+ bindKeys() {
75
+ if (!this.isBinded) {
76
+ KeyTrap.bind('ArrowUp', this.onUpKey);
77
+ KeyTrap.bind('ArrowDown', this.onDownKey);
78
+ KeyTrap.bind('Enter', this.onEnterKey);
79
+ KeyTrap.bind('Escape', this.onEscKey);
80
+ this.isBinded = true;
81
+ }
82
+ }
83
+
84
+ unbindKeys() {
85
+ if (this.isBinded) {
86
+ KeyTrap.unbind('ArrowUp', this.onUpKey);
87
+ KeyTrap.unbind('ArrowDown', this.onDownKey);
88
+ KeyTrap.unbind('Enter', this.onEnterKey);
89
+ KeyTrap.unbind('Escape', this.onEscKey);
90
+ this.isBinded = false;
91
+ }
92
+ }
93
+
94
+ onFocus() {
95
+ this.bindKeys();
96
+ this.setState({
97
+ focus: true,
98
+ });
99
+ if (this.props.onFocus) {
100
+ this.props.onFocus(this.props.selectedId);
101
+ }
102
+ }
103
+
104
+ onBlur() {
105
+ this.unbindKeys();
106
+ this.setState({
107
+ focus: false,
108
+ });
109
+ if (this.props.onBlur) {
110
+ this.props.onBlur(this.props.selectedId);
111
+ }
112
+ }
113
+
114
+ onUpKey() {
115
+ this.showCombo();
116
+ if (this.listRef) {
117
+ this.listRef.onUpKey();
118
+ }
119
+ }
120
+
121
+ onDownKey() {
122
+ this.showCombo();
123
+ if (this.listRef) {
124
+ this.listRef.onDownKey();
125
+ }
126
+ }
127
+
128
+ onEnterKey() {
129
+ if (this.listRef) {
130
+ this.listRef.onEnterKey();
131
+ }
132
+ }
133
+
134
+ onEscKey() {
135
+ if (this.listRef) {
136
+ this.listRef.onEscKey();
137
+ }
138
+ }
139
+
140
+ showCombo() {
141
+ if (this.buttonComboRef) {
142
+ this.buttonComboRef.showCombo();
143
+ }
144
+ }
145
+
146
+ convertList() {
147
+ this.list = this.props.list || [];
148
+ if (isShredder(this.list)) {
149
+ this.list = this.list.toJS();
150
+ }
151
+
152
+ if (this.list.length > 0 || this.list.size > 0) {
153
+ this.list = this.list.map((item) => {
154
+ switch (typeof item) {
155
+ case 'number':
156
+ case 'string':
157
+ item = {
158
+ id: item,
159
+ text: item,
160
+ value: item,
161
+ action: this.doChangeCombo,
162
+ };
163
+ break;
164
+ case 'object': {
165
+ if (item.id === undefined) {
166
+ console.warn(
167
+ `Id not defined for ${JSON.stringify(
168
+ item
169
+ )} in TextFieldComboNC !`
170
+ );
171
+ }
172
+ if (item.text === undefined) {
173
+ console.warn(
174
+ `Text not defined for ${JSON.stringify(
175
+ item
176
+ )} in TextFieldComboNC !`
177
+ );
178
+ }
179
+ const id =
180
+ item.id !== undefined
181
+ ? item.id
182
+ : item.value !== undefined
183
+ ? item.value
184
+ : item.text;
185
+ item = {
186
+ id,
187
+ text: item.text !== undefined ? item.text : id,
188
+ value: item.value,
189
+ glyph: item.glyph,
190
+ color: item.color,
191
+ action: this.doChangeCombo,
192
+ };
193
+ if (typeof item.glyph === 'object') {
194
+ item.color = item.glyph.color;
195
+ item.glyph = item.glyph.glyph;
196
+ }
197
+ break;
198
+ }
199
+ default:
200
+ throw Error(
201
+ 'Item Format not accepted in TextFieldComboNC ! ' +
202
+ JSON.stringify(item)
203
+ );
204
+ }
205
+ return item;
206
+ });
207
+ }
208
+ }
209
+
210
+ /******************************************************************************/
211
+
212
+ renderTextField() {
213
+ const shape = this.props.shape || 'smooth';
214
+ const hideButton = this.props.readonly || this.props.hideButtonCombo;
215
+ const textFieldShapes = hideButton
216
+ ? {
217
+ smooth: 'smooth',
218
+ rounded: 'rounded',
219
+ }
220
+ : {
221
+ smooth: 'left-smooth',
222
+ rounded: 'left-rounded',
223
+ };
224
+ const textFieldShape = textFieldShapes[shape];
225
+
226
+ let selectedItem = this.list.find(
227
+ (item) => item.id === this.props.selectedId
228
+ );
229
+
230
+ if (!selectedItem) {
231
+ selectedItem = {
232
+ id: this.props.selectedId,
233
+ text: this.props.selectedId,
234
+ value: this.props.selectedId,
235
+ glyph: null,
236
+ };
237
+ }
238
+
239
+ let glyph = {glyph: selectedItem.glyph, color: selectedItem.color};
240
+ if (this.props.getGlyph && glyph.glyph === null) {
241
+ glyph = this.props.getGlyph(this.props.selectedId) || null;
242
+ }
243
+ if (this.props.menuType !== 'wrap' || !glyph || !glyph.glyph) {
244
+ glyph = null;
245
+ }
246
+
247
+ let value = selectedItem.id || '';
248
+
249
+ if (
250
+ (this.props.readonly || this.props.restrictsToList) &&
251
+ selectedItem.text
252
+ ) {
253
+ value = selectedItem.text;
254
+ }
255
+
256
+ let TextComponent = TextInputNC;
257
+ if (this.props.renderTextField) {
258
+ TextComponent = this.props.renderTextField;
259
+ }
260
+
261
+ return (
262
+ <TextComponent
263
+ hintText={this.props.hintText}
264
+ tooltip={this.props.tooltip}
265
+ horizontalSpacing="overlap"
266
+ shape={textFieldShape}
267
+ //flyingBalloonAnchor={this.props.flyingBalloonAnchor}
268
+ value={value}
269
+ glyph={glyph}
270
+ width={this.props.fieldWidth}
271
+ grow={this.props.fieldWidth ? null : '1'}
272
+ rows={this.props.rows}
273
+ readonly={this.props.restrictsToList || this.props.readonly}
274
+ disabled={this.props.disabled}
275
+ required={this.props.required}
276
+ embeddedFocus={true}
277
+ visibility={this.props.visibility}
278
+ onChange={this.doChangeTextField}
279
+ onFocus={this.onFocus}
280
+ onBlur={this.onBlur}
281
+ onValidate={this.props.onValidate}
282
+ autoFocus={this.props.autoFocus}
283
+ selectAllOnFocus={this.props.selectAllOnFocus}
284
+ />
285
+ );
286
+ }
287
+
288
+ render() {
289
+ if (this.props.show === false) {
290
+ return null;
291
+ }
292
+
293
+ if (!this.props.list) {
294
+ return null;
295
+ }
296
+
297
+ if (this.props.list !== this.previousList) {
298
+ this.convertList();
299
+ this.previousList = this.props.list;
300
+ }
301
+
302
+ return (
303
+ <ButtonCombo
304
+ parentRect={this.props.parentRect}
305
+ width={this.props.width}
306
+ grow={this.props.grow}
307
+ menuType={this.props.menuType}
308
+ menuItemWidth={this.props.menuItemWidth}
309
+ menuItemTooltips={this.props.menuItemTooltips}
310
+ readonly={this.props.readonly}
311
+ restrictsToList={this.props.restrictsToList}
312
+ disabled={this.props.disabled}
313
+ onShowCombo={this.onShowCombo}
314
+ onHideCombo={this.onHideCombo}
315
+ node={this.node}
316
+ selectedId={this.props.selectedId}
317
+ list={this.list}
318
+ horizontalSpacing={this.props.horizontalSpacing}
319
+ shape={this.props.shape}
320
+ comboGlyph={this.props.comboGlyph}
321
+ comboTextTransform={this.props.comboTextTransform}
322
+ focus={this.state.focus}
323
+ hideButtonCombo={this.props.hideButtonCombo}
324
+ setListRef={this.setListRef}
325
+ ref={this.setButtonComboRef}
326
+ >
327
+ {this.renderTextField()}
328
+ </ButtonCombo>
329
+ );
330
+ }
331
+ }
332
+
333
+ /******************************************************************************/
334
+
335
+ registerWidget(TextFieldComboNC, props, scenarios);
336
+
337
+ /******************************************************************************/
338
+
339
+ export default wrapRawInput(TextFieldComboNC, 'selectedId');