devextreme-angular 18.1.16 → 18.1.17

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 (879) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +668 -668
  3. package/core/component.d.ts +65 -65
  4. package/core/component.js +220 -220
  5. package/core/component.js.map +1 -1
  6. package/core/events-strategy.d.ts +35 -35
  7. package/core/events-strategy.js +92 -92
  8. package/core/events-strategy.js.map +1 -1
  9. package/core/integration.d.ts +17 -17
  10. package/core/integration.js +95 -95
  11. package/core/integration.js.map +1 -1
  12. package/core/iterable-differ-helper.d.ts +26 -26
  13. package/core/iterable-differ-helper.js +73 -73
  14. package/core/iterable-differ-helper.js.map +1 -1
  15. package/core/nested-option.d.ts +74 -74
  16. package/core/nested-option.js +229 -229
  17. package/core/nested-option.js.map +1 -1
  18. package/core/template-host.d.ts +21 -21
  19. package/core/template-host.js +27 -27
  20. package/core/template-host.js.map +1 -1
  21. package/core/template.d.ts +33 -33
  22. package/core/template.js +113 -113
  23. package/core/template.js.map +1 -1
  24. package/core/transfer-state.d.ts +19 -19
  25. package/core/transfer-state.js +82 -82
  26. package/core/transfer-state.js.map +1 -1
  27. package/core/utils.d.ts +13 -13
  28. package/core/utils.js +19 -19
  29. package/core/utils.js.map +1 -1
  30. package/core/watcher-helper.d.ts +20 -20
  31. package/core/watcher-helper.js +85 -85
  32. package/core/watcher-helper.js.map +1 -1
  33. package/index.d.ts +93 -93
  34. package/index.js +110 -110
  35. package/index.js.map +1 -1
  36. package/package.json +3 -3
  37. package/ui/accordion.d.ts +312 -312
  38. package/ui/accordion.js +601 -601
  39. package/ui/accordion.js.map +1 -1
  40. package/ui/action-sheet.d.ts +234 -234
  41. package/ui/action-sheet.js +451 -451
  42. package/ui/action-sheet.js.map +1 -1
  43. package/ui/all.d.ts +14 -14
  44. package/ui/all.js +242 -242
  45. package/ui/all.js.map +1 -1
  46. package/ui/autocomplete.d.ts +481 -481
  47. package/ui/autocomplete.js +903 -903
  48. package/ui/autocomplete.js.map +1 -1
  49. package/ui/bar-gauge.d.ts +446 -446
  50. package/ui/bar-gauge.js +593 -593
  51. package/ui/bar-gauge.js.map +1 -1
  52. package/ui/box.d.ts +204 -204
  53. package/ui/box.js +388 -388
  54. package/ui/box.js.map +1 -1
  55. package/ui/bullet.d.ts +281 -281
  56. package/ui/bullet.js +414 -414
  57. package/ui/bullet.js.map +1 -1
  58. package/ui/button.d.ts +194 -194
  59. package/ui/button.js +398 -398
  60. package/ui/button.js.map +1 -1
  61. package/ui/calendar.d.ts +290 -290
  62. package/ui/calendar.js +628 -628
  63. package/ui/calendar.js.map +1 -1
  64. package/ui/chart.d.ts +1738 -1738
  65. package/ui/chart.js +1233 -1233
  66. package/ui/chart.js.map +1 -1
  67. package/ui/check-box.d.ts +215 -215
  68. package/ui/check-box.js +458 -458
  69. package/ui/check-box.js.map +1 -1
  70. package/ui/circular-gauge.d.ts +536 -536
  71. package/ui/circular-gauge.js +573 -573
  72. package/ui/circular-gauge.js.map +1 -1
  73. package/ui/color-box.d.ts +359 -359
  74. package/ui/color-box.js +674 -674
  75. package/ui/color-box.js.map +1 -1
  76. package/ui/context-menu.d.ts +356 -356
  77. package/ui/context-menu.js +688 -688
  78. package/ui/context-menu.js.map +1 -1
  79. package/ui/data-grid.d.ts +1134 -1134
  80. package/ui/data-grid.js +1432 -1432
  81. package/ui/data-grid.js.map +1 -1
  82. package/ui/date-box.d.ts +507 -507
  83. package/ui/date-box.js +983 -983
  84. package/ui/date-box.js.map +1 -1
  85. package/ui/defer-rendering.d.ts +183 -183
  86. package/ui/defer-rendering.js +372 -372
  87. package/ui/defer-rendering.js.map +1 -1
  88. package/ui/drop-down-box.d.ts +413 -413
  89. package/ui/drop-down-box.js +817 -817
  90. package/ui/drop-down-box.js.map +1 -1
  91. package/ui/file-uploader.d.ts +346 -346
  92. package/ui/file-uploader.js +704 -704
  93. package/ui/file-uploader.js.map +1 -1
  94. package/ui/filter-builder.d.ts +261 -261
  95. package/ui/filter-builder.js +516 -516
  96. package/ui/filter-builder.js.map +1 -1
  97. package/ui/form.d.ts +330 -330
  98. package/ui/form.js +685 -685
  99. package/ui/form.js.map +1 -1
  100. package/ui/funnel.d.ts +626 -626
  101. package/ui/funnel.js +676 -676
  102. package/ui/funnel.js.map +1 -1
  103. package/ui/gallery.d.ts +314 -314
  104. package/ui/gallery.js +611 -611
  105. package/ui/gallery.js.map +1 -1
  106. package/ui/linear-gauge.d.ts +542 -542
  107. package/ui/linear-gauge.js +576 -576
  108. package/ui/linear-gauge.js.map +1 -1
  109. package/ui/list.d.ts +546 -546
  110. package/ui/list.js +1024 -1024
  111. package/ui/list.js.map +1 -1
  112. package/ui/load-indicator.d.ts +102 -102
  113. package/ui/load-indicator.js +220 -220
  114. package/ui/load-indicator.js.map +1 -1
  115. package/ui/load-panel.d.ts +261 -261
  116. package/ui/load-panel.js +527 -527
  117. package/ui/load-panel.js.map +1 -1
  118. package/ui/lookup.d.ts +659 -659
  119. package/ui/lookup.js +1317 -1317
  120. package/ui/lookup.js.map +1 -1
  121. package/ui/map.d.ts +309 -309
  122. package/ui/map.js +556 -556
  123. package/ui/map.js.map +1 -1
  124. package/ui/menu.d.ts +358 -358
  125. package/ui/menu.js +667 -667
  126. package/ui/menu.js.map +1 -1
  127. package/ui/multi-view.d.ts +270 -270
  128. package/ui/multi-view.js +531 -531
  129. package/ui/multi-view.js.map +1 -1
  130. package/ui/nav-bar.d.ts +276 -276
  131. package/ui/nav-bar.js +535 -535
  132. package/ui/nav-bar.js.map +1 -1
  133. package/ui/nested/adapter.d.ts +26 -26
  134. package/ui/nested/adapter.js +142 -142
  135. package/ui/nested/adapter.js.map +1 -1
  136. package/ui/nested/adaptive-layout.d.ts +23 -23
  137. package/ui/nested/adaptive-layout.js +109 -109
  138. package/ui/nested/adaptive-layout.js.map +1 -1
  139. package/ui/nested/aggregation-interval.d.ts +29 -29
  140. package/ui/nested/aggregation-interval.js +175 -175
  141. package/ui/nested/aggregation-interval.js.map +1 -1
  142. package/ui/nested/aggregation.d.ts +23 -23
  143. package/ui/nested/aggregation.js +109 -109
  144. package/ui/nested/aggregation.js.map +1 -1
  145. package/ui/nested/animation.d.ts +20 -20
  146. package/ui/nested/animation.js +90 -90
  147. package/ui/nested/animation.js.map +1 -1
  148. package/ui/nested/area-settings.d.ts +42 -42
  149. package/ui/nested/area-settings.js +263 -263
  150. package/ui/nested/area-settings.js.map +1 -1
  151. package/ui/nested/area.d.ts +20 -20
  152. package/ui/nested/area.js +137 -137
  153. package/ui/nested/area.js.map +1 -1
  154. package/ui/nested/argument-axis.d.ts +239 -239
  155. package/ui/nested/argument-axis.js +629 -629
  156. package/ui/nested/argument-axis.js.map +1 -1
  157. package/ui/nested/argument-format.d.ts +20 -20
  158. package/ui/nested/argument-format.js +81 -81
  159. package/ui/nested/argument-format.js.map +1 -1
  160. package/ui/nested/at.d.ts +22 -22
  161. package/ui/nested/at.js +98 -98
  162. package/ui/nested/at.js.map +1 -1
  163. package/ui/nested/background-image.d.ts +23 -23
  164. package/ui/nested/background-image.js +109 -109
  165. package/ui/nested/background-image.js.map +1 -1
  166. package/ui/nested/background.d.ts +27 -27
  167. package/ui/nested/background.js +120 -120
  168. package/ui/nested/background.js.map +1 -1
  169. package/ui/nested/bar.d.ts +20 -20
  170. package/ui/nested/bar.js +137 -137
  171. package/ui/nested/bar.js.map +1 -1
  172. package/ui/nested/base/animation-config.d.ts +30 -30
  173. package/ui/nested/base/animation-config.js +173 -173
  174. package/ui/nested/base/animation-config.js.map +1 -1
  175. package/ui/nested/base/box-options.d.ts +48 -48
  176. package/ui/nested/base/box-options.js +253 -253
  177. package/ui/nested/base/box-options.js.map +1 -1
  178. package/ui/nested/base/button-options.d.ts +38 -38
  179. package/ui/nested/base/button-options.js +263 -263
  180. package/ui/nested/base/button-options.js.map +1 -1
  181. package/ui/nested/base/calendar-options.d.ts +47 -47
  182. package/ui/nested/base/calendar-options.js +353 -353
  183. package/ui/nested/base/calendar-options.js.map +1 -1
  184. package/ui/nested/base/chart-common-series-settings.d.ts +323 -323
  185. package/ui/nested/base/chart-common-series-settings.js +703 -703
  186. package/ui/nested/base/chart-common-series-settings.js.map +1 -1
  187. package/ui/nested/base/chart-series-dxi.d.ts +302 -302
  188. package/ui/nested/base/chart-series-dxi.js +493 -493
  189. package/ui/nested/base/chart-series-dxi.js.map +1 -1
  190. package/ui/nested/base/context-menu-item-dxi.d.ts +108 -108
  191. package/ui/nested/base/context-menu-item-dxi.js +623 -623
  192. package/ui/nested/base/context-menu-item-dxi.js.map +1 -1
  193. package/ui/nested/base/data-grid-column-dxi.d.ts +90 -90
  194. package/ui/nested/base/data-grid-column-dxi.js +653 -653
  195. package/ui/nested/base/data-grid-column-dxi.js.map +1 -1
  196. package/ui/nested/base/filter-builder-custom-operation-dxi.d.ts +23 -23
  197. package/ui/nested/base/filter-builder-custom-operation-dxi.js +113 -113
  198. package/ui/nested/base/filter-builder-custom-operation-dxi.js.map +1 -1
  199. package/ui/nested/base/filter-builder-field-dxi.d.ts +71 -71
  200. package/ui/nested/base/filter-builder-field-dxi.js +493 -493
  201. package/ui/nested/base/filter-builder-field-dxi.js.map +1 -1
  202. package/ui/nested/base/filter-builder-options.d.ts +59 -59
  203. package/ui/nested/base/filter-builder-options.js +273 -273
  204. package/ui/nested/base/filter-builder-options.js.map +1 -1
  205. package/ui/nested/base/form-options.d.ts +59 -59
  206. package/ui/nested/base/form-options.js +413 -413
  207. package/ui/nested/base/form-options.js.map +1 -1
  208. package/ui/nested/base/form-simple-item.d.ts +36 -36
  209. package/ui/nested/base/form-simple-item.js +173 -173
  210. package/ui/nested/base/form-simple-item.js.map +1 -1
  211. package/ui/nested/base/format.d.ts +20 -20
  212. package/ui/nested/base/format.js +83 -83
  213. package/ui/nested/base/format.js.map +1 -1
  214. package/ui/nested/base/gauge-indicator.d.ts +41 -41
  215. package/ui/nested/base/gauge-indicator.js +223 -223
  216. package/ui/nested/base/gauge-indicator.js.map +1 -1
  217. package/ui/nested/base/pivot-grid-data-source.d.ts +71 -71
  218. package/ui/nested/base/pivot-grid-data-source.js +123 -123
  219. package/ui/nested/base/pivot-grid-data-source.js.map +1 -1
  220. package/ui/nested/base/popup-options.d.ts +73 -73
  221. package/ui/nested/base/popup-options.js +473 -473
  222. package/ui/nested/base/popup-options.js.map +1 -1
  223. package/ui/nested/base/position-config.d.ts +37 -37
  224. package/ui/nested/base/position-config.js +103 -103
  225. package/ui/nested/base/position-config.js.map +1 -1
  226. package/ui/nested/base/tab-panel-options.d.ts +64 -64
  227. package/ui/nested/base/tab-panel-options.js +423 -423
  228. package/ui/nested/base/tab-panel-options.js.map +1 -1
  229. package/ui/nested/base/text-box-options.d.ts +63 -63
  230. package/ui/nested/base/text-box-options.js +513 -513
  231. package/ui/nested/base/text-box-options.js.map +1 -1
  232. package/ui/nested/base/viz-font.d.ts +20 -20
  233. package/ui/nested/base/viz-font.js +83 -83
  234. package/ui/nested/base/viz-font.js.map +1 -1
  235. package/ui/nested/base/viz-scale-break-dxi.d.ts +17 -17
  236. package/ui/nested/base/viz-scale-break-dxi.js +53 -53
  237. package/ui/nested/base/viz-scale-break-dxi.js.map +1 -1
  238. package/ui/nested/behavior.d.ts +27 -27
  239. package/ui/nested/behavior.js +153 -153
  240. package/ui/nested/behavior.js.map +1 -1
  241. package/ui/nested/border.d.ts +30 -30
  242. package/ui/nested/border.js +186 -186
  243. package/ui/nested/border.js.map +1 -1
  244. package/ui/nested/boundary-offset.d.ts +22 -22
  245. package/ui/nested/boundary-offset.js +98 -98
  246. package/ui/nested/boundary-offset.js.map +1 -1
  247. package/ui/nested/box.d.ts +38 -38
  248. package/ui/nested/box.js +116 -116
  249. package/ui/nested/box.js.map +1 -1
  250. package/ui/nested/break-dxi.d.ts +20 -20
  251. package/ui/nested/break-dxi.js +78 -78
  252. package/ui/nested/break-dxi.js.map +1 -1
  253. package/ui/nested/break-style.d.ts +23 -23
  254. package/ui/nested/break-style.js +109 -109
  255. package/ui/nested/break-style.js.map +1 -1
  256. package/ui/nested/bubble.d.ts +20 -20
  257. package/ui/nested/bubble.js +136 -136
  258. package/ui/nested/bubble.js.map +1 -1
  259. package/ui/nested/button-options.d.ts +20 -20
  260. package/ui/nested/button-options.js +99 -99
  261. package/ui/nested/button-options.js.map +1 -1
  262. package/ui/nested/calendar-options.d.ts +29 -29
  263. package/ui/nested/calendar-options.js +116 -116
  264. package/ui/nested/calendar-options.js.map +1 -1
  265. package/ui/nested/candlestick.d.ts +20 -20
  266. package/ui/nested/candlestick.js +136 -136
  267. package/ui/nested/candlestick.js.map +1 -1
  268. package/ui/nested/center-dxi.d.ts +22 -22
  269. package/ui/nested/center-dxi.js +98 -98
  270. package/ui/nested/center-dxi.js.map +1 -1
  271. package/ui/nested/chart.d.ts +52 -52
  272. package/ui/nested/chart.js +253 -253
  273. package/ui/nested/chart.js.map +1 -1
  274. package/ui/nested/col-count-by-screen.d.ts +24 -24
  275. package/ui/nested/col-count-by-screen.js +120 -120
  276. package/ui/nested/col-count-by-screen.js.map +1 -1
  277. package/ui/nested/col-dxi.d.ts +24 -24
  278. package/ui/nested/col-dxi.js +120 -120
  279. package/ui/nested/col-dxi.js.map +1 -1
  280. package/ui/nested/collision.d.ts +22 -22
  281. package/ui/nested/collision.js +98 -98
  282. package/ui/nested/collision.js.map +1 -1
  283. package/ui/nested/colorizer.d.ts +26 -26
  284. package/ui/nested/colorizer.js +142 -142
  285. package/ui/nested/colorizer.js.map +1 -1
  286. package/ui/nested/column-chooser.d.ts +28 -28
  287. package/ui/nested/column-chooser.js +164 -164
  288. package/ui/nested/column-chooser.js.map +1 -1
  289. package/ui/nested/column-dxi.d.ts +56 -56
  290. package/ui/nested/column-dxi.js +181 -181
  291. package/ui/nested/column-dxi.js.map +1 -1
  292. package/ui/nested/column-fixing.d.ts +27 -27
  293. package/ui/nested/column-fixing.js +98 -98
  294. package/ui/nested/column-fixing.js.map +1 -1
  295. package/ui/nested/common-axis-settings.d.ts +121 -121
  296. package/ui/nested/common-axis-settings.js +318 -318
  297. package/ui/nested/common-axis-settings.js.map +1 -1
  298. package/ui/nested/common-pane-settings.d.ts +32 -32
  299. package/ui/nested/common-pane-settings.js +98 -98
  300. package/ui/nested/common-pane-settings.js.map +1 -1
  301. package/ui/nested/common-series-settings.d.ts +20 -20
  302. package/ui/nested/common-series-settings.js +143 -143
  303. package/ui/nested/common-series-settings.js.map +1 -1
  304. package/ui/nested/connector.d.ts +24 -24
  305. package/ui/nested/connector.js +120 -120
  306. package/ui/nested/connector.js.map +1 -1
  307. package/ui/nested/constant-line-dxi.d.ts +39 -39
  308. package/ui/nested/constant-line-dxi.js +153 -153
  309. package/ui/nested/constant-line-dxi.js.map +1 -1
  310. package/ui/nested/constant-line-style.d.ts +40 -40
  311. package/ui/nested/constant-line-style.js +142 -142
  312. package/ui/nested/constant-line-style.js.map +1 -1
  313. package/ui/nested/control-bar.d.ts +27 -27
  314. package/ui/nested/control-bar.js +153 -153
  315. package/ui/nested/control-bar.js.map +1 -1
  316. package/ui/nested/crosshair.d.ts +64 -64
  317. package/ui/nested/crosshair.js +164 -164
  318. package/ui/nested/crosshair.js.map +1 -1
  319. package/ui/nested/custom-operation-dxi.d.ts +20 -20
  320. package/ui/nested/custom-operation-dxi.js +84 -84
  321. package/ui/nested/custom-operation-dxi.js.map +1 -1
  322. package/ui/nested/data-prepare-settings.d.ts +23 -23
  323. package/ui/nested/data-prepare-settings.js +109 -109
  324. package/ui/nested/data-prepare-settings.js.map +1 -1
  325. package/ui/nested/data-source.d.ts +23 -23
  326. package/ui/nested/data-source.js +104 -104
  327. package/ui/nested/data-source.js.map +1 -1
  328. package/ui/nested/delay.d.ts +22 -22
  329. package/ui/nested/delay.js +98 -98
  330. package/ui/nested/delay.js.map +1 -1
  331. package/ui/nested/display-format.d.ts +20 -20
  332. package/ui/nested/display-format.js +81 -81
  333. package/ui/nested/display-format.js.map +1 -1
  334. package/ui/nested/drop-down-options.d.ts +40 -40
  335. package/ui/nested/drop-down-options.js +144 -144
  336. package/ui/nested/drop-down-options.js.map +1 -1
  337. package/ui/nested/editing.d.ts +56 -56
  338. package/ui/nested/editing.js +187 -187
  339. package/ui/nested/editing.js.map +1 -1
  340. package/ui/nested/export.d.ts +36 -36
  341. package/ui/nested/export.js +208 -208
  342. package/ui/nested/export.js.map +1 -1
  343. package/ui/nested/field-chooser.d.ts +35 -35
  344. package/ui/nested/field-chooser.js +175 -175
  345. package/ui/nested/field-chooser.js.map +1 -1
  346. package/ui/nested/field-dxi.d.ts +20 -20
  347. package/ui/nested/field-dxi.js +122 -122
  348. package/ui/nested/field-dxi.js.map +1 -1
  349. package/ui/nested/field-panel.d.ts +32 -32
  350. package/ui/nested/field-panel.js +153 -153
  351. package/ui/nested/field-panel.js.map +1 -1
  352. package/ui/nested/filter-builder-popup.d.ts +40 -40
  353. package/ui/nested/filter-builder-popup.js +144 -144
  354. package/ui/nested/filter-builder-popup.js.map +1 -1
  355. package/ui/nested/filter-builder.d.ts +29 -29
  356. package/ui/nested/filter-builder.js +130 -130
  357. package/ui/nested/filter-builder.js.map +1 -1
  358. package/ui/nested/filter-operation-descriptions.d.ts +33 -33
  359. package/ui/nested/filter-operation-descriptions.js +219 -219
  360. package/ui/nested/filter-operation-descriptions.js.map +1 -1
  361. package/ui/nested/filter-panel.d.ts +33 -33
  362. package/ui/nested/filter-panel.js +124 -124
  363. package/ui/nested/filter-panel.js.map +1 -1
  364. package/ui/nested/filter-row.d.ts +41 -41
  365. package/ui/nested/filter-row.js +175 -175
  366. package/ui/nested/filter-row.js.map +1 -1
  367. package/ui/nested/font.d.ts +20 -20
  368. package/ui/nested/font.js +81 -81
  369. package/ui/nested/font.js.map +1 -1
  370. package/ui/nested/form-item.d.ts +23 -23
  371. package/ui/nested/form-item.js +104 -104
  372. package/ui/nested/form-item.js.map +1 -1
  373. package/ui/nested/form.d.ts +27 -27
  374. package/ui/nested/form.js +132 -132
  375. package/ui/nested/form.js.map +1 -1
  376. package/ui/nested/format.d.ts +20 -20
  377. package/ui/nested/format.js +81 -81
  378. package/ui/nested/format.js.map +1 -1
  379. package/ui/nested/fullstackedarea.d.ts +20 -20
  380. package/ui/nested/fullstackedarea.js +136 -136
  381. package/ui/nested/fullstackedarea.js.map +1 -1
  382. package/ui/nested/fullstackedbar.d.ts +20 -20
  383. package/ui/nested/fullstackedbar.js +136 -136
  384. package/ui/nested/fullstackedbar.js.map +1 -1
  385. package/ui/nested/fullstackedline.d.ts +20 -20
  386. package/ui/nested/fullstackedline.js +136 -136
  387. package/ui/nested/fullstackedline.js.map +1 -1
  388. package/ui/nested/fullstackedspline.d.ts +20 -20
  389. package/ui/nested/fullstackedspline.js +136 -136
  390. package/ui/nested/fullstackedspline.js.map +1 -1
  391. package/ui/nested/fullstackedsplinearea.d.ts +20 -20
  392. package/ui/nested/fullstackedsplinearea.js +136 -136
  393. package/ui/nested/fullstackedsplinearea.js.map +1 -1
  394. package/ui/nested/geometry.d.ts +23 -23
  395. package/ui/nested/geometry.js +109 -109
  396. package/ui/nested/geometry.js.map +1 -1
  397. package/ui/nested/grid.d.ts +24 -24
  398. package/ui/nested/grid.js +120 -120
  399. package/ui/nested/grid.js.map +1 -1
  400. package/ui/nested/group-item-dxi.d.ts +32 -32
  401. package/ui/nested/group-item-dxi.js +197 -197
  402. package/ui/nested/group-item-dxi.js.map +1 -1
  403. package/ui/nested/group-operation-descriptions.d.ts +24 -24
  404. package/ui/nested/group-operation-descriptions.js +120 -120
  405. package/ui/nested/group-operation-descriptions.js.map +1 -1
  406. package/ui/nested/group-panel.d.ts +23 -23
  407. package/ui/nested/group-panel.js +109 -109
  408. package/ui/nested/group-panel.js.map +1 -1
  409. package/ui/nested/group.d.ts +46 -46
  410. package/ui/nested/group.js +153 -153
  411. package/ui/nested/group.js.map +1 -1
  412. package/ui/nested/grouping.d.ts +31 -31
  413. package/ui/nested/grouping.js +131 -131
  414. package/ui/nested/grouping.js.map +1 -1
  415. package/ui/nested/hatching.d.ts +24 -24
  416. package/ui/nested/hatching.js +120 -120
  417. package/ui/nested/hatching.js.map +1 -1
  418. package/ui/nested/header-filter.d.ts +34 -34
  419. package/ui/nested/header-filter.js +175 -175
  420. package/ui/nested/header-filter.js.map +1 -1
  421. package/ui/nested/height.d.ts +22 -22
  422. package/ui/nested/height.js +98 -98
  423. package/ui/nested/height.js.map +1 -1
  424. package/ui/nested/hide-event.d.ts +22 -22
  425. package/ui/nested/hide-event.js +98 -98
  426. package/ui/nested/hide-event.js.map +1 -1
  427. package/ui/nested/hide.d.ts +20 -20
  428. package/ui/nested/hide.js +86 -86
  429. package/ui/nested/hide.js.map +1 -1
  430. package/ui/nested/horizontal-line.d.ts +34 -34
  431. package/ui/nested/horizontal-line.js +142 -142
  432. package/ui/nested/horizontal-line.js.map +1 -1
  433. package/ui/nested/hover-style.d.ts +43 -43
  434. package/ui/nested/hover-style.js +142 -142
  435. package/ui/nested/hover-style.js.map +1 -1
  436. package/ui/nested/image.d.ts +33 -33
  437. package/ui/nested/image.js +120 -120
  438. package/ui/nested/image.js.map +1 -1
  439. package/ui/nested/indent.d.ts +22 -22
  440. package/ui/nested/indent.js +98 -98
  441. package/ui/nested/indent.js.map +1 -1
  442. package/ui/nested/item-dxi.d.ts +35 -35
  443. package/ui/nested/item-dxi.js +200 -200
  444. package/ui/nested/item-dxi.js.map +1 -1
  445. package/ui/nested/item.d.ts +51 -51
  446. package/ui/nested/item.js +109 -109
  447. package/ui/nested/item.js.map +1 -1
  448. package/ui/nested/key.d.ts +23 -23
  449. package/ui/nested/key.js +109 -109
  450. package/ui/nested/key.js.map +1 -1
  451. package/ui/nested/label.d.ts +79 -79
  452. package/ui/nested/label.js +484 -484
  453. package/ui/nested/label.js.map +1 -1
  454. package/ui/nested/layer-dxi.d.ts +54 -54
  455. package/ui/nested/layer-dxi.js +395 -395
  456. package/ui/nested/layer-dxi.js.map +1 -1
  457. package/ui/nested/legend-dxi.d.ts +58 -58
  458. package/ui/nested/legend-dxi.js +319 -319
  459. package/ui/nested/legend-dxi.js.map +1 -1
  460. package/ui/nested/legend.d.ts +54 -54
  461. package/ui/nested/legend.js +308 -308
  462. package/ui/nested/legend.js.map +1 -1
  463. package/ui/nested/line.d.ts +20 -20
  464. package/ui/nested/line.js +137 -137
  465. package/ui/nested/line.js.map +1 -1
  466. package/ui/nested/load-panel.d.ts +29 -29
  467. package/ui/nested/load-panel.js +175 -175
  468. package/ui/nested/load-panel.js.map +1 -1
  469. package/ui/nested/loading-indicator.d.ts +30 -30
  470. package/ui/nested/loading-indicator.js +125 -125
  471. package/ui/nested/loading-indicator.js.map +1 -1
  472. package/ui/nested/location-dxi.d.ts +27 -27
  473. package/ui/nested/location-dxi.js +153 -153
  474. package/ui/nested/location-dxi.js.map +1 -1
  475. package/ui/nested/lookup.d.ts +25 -25
  476. package/ui/nested/lookup.js +120 -120
  477. package/ui/nested/lookup.js.map +1 -1
  478. package/ui/nested/major-tick-interval.d.ts +27 -27
  479. package/ui/nested/major-tick-interval.js +153 -153
  480. package/ui/nested/major-tick-interval.js.map +1 -1
  481. package/ui/nested/major-tick.d.ts +28 -28
  482. package/ui/nested/major-tick.js +164 -164
  483. package/ui/nested/major-tick.js.map +1 -1
  484. package/ui/nested/margin.d.ts +24 -24
  485. package/ui/nested/margin.js +120 -120
  486. package/ui/nested/margin.js.map +1 -1
  487. package/ui/nested/marker-dxi.d.ts +39 -39
  488. package/ui/nested/marker-dxi.js +198 -198
  489. package/ui/nested/marker-dxi.js.map +1 -1
  490. package/ui/nested/marker-settings.d.ts +47 -47
  491. package/ui/nested/marker-settings.js +329 -329
  492. package/ui/nested/marker-settings.js.map +1 -1
  493. package/ui/nested/marker.d.ts +30 -30
  494. package/ui/nested/marker.js +142 -142
  495. package/ui/nested/marker.js.map +1 -1
  496. package/ui/nested/master-detail.d.ts +31 -31
  497. package/ui/nested/master-detail.js +125 -125
  498. package/ui/nested/master-detail.js.map +1 -1
  499. package/ui/nested/max-range.d.ts +29 -29
  500. package/ui/nested/max-range.js +175 -175
  501. package/ui/nested/max-range.js.map +1 -1
  502. package/ui/nested/menu-item-dxi.d.ts +22 -22
  503. package/ui/nested/menu-item-dxi.js +98 -98
  504. package/ui/nested/menu-item-dxi.js.map +1 -1
  505. package/ui/nested/min-range.d.ts +29 -29
  506. package/ui/nested/min-range.js +175 -175
  507. package/ui/nested/min-range.js.map +1 -1
  508. package/ui/nested/minor-grid.d.ts +24 -24
  509. package/ui/nested/minor-grid.js +120 -120
  510. package/ui/nested/minor-grid.js.map +1 -1
  511. package/ui/nested/minor-tick-interval.d.ts +29 -29
  512. package/ui/nested/minor-tick-interval.js +175 -175
  513. package/ui/nested/minor-tick-interval.js.map +1 -1
  514. package/ui/nested/minor-tick.d.ts +28 -28
  515. package/ui/nested/minor-tick.js +164 -164
  516. package/ui/nested/minor-tick.js.map +1 -1
  517. package/ui/nested/my.d.ts +22 -22
  518. package/ui/nested/my.js +98 -98
  519. package/ui/nested/my.js.map +1 -1
  520. package/ui/nested/offset.d.ts +22 -22
  521. package/ui/nested/offset.js +98 -98
  522. package/ui/nested/offset.js.map +1 -1
  523. package/ui/nested/operation-descriptions.d.ts +31 -31
  524. package/ui/nested/operation-descriptions.js +197 -197
  525. package/ui/nested/operation-descriptions.js.map +1 -1
  526. package/ui/nested/overlapping-behavior.d.ts +25 -25
  527. package/ui/nested/overlapping-behavior.js +131 -131
  528. package/ui/nested/overlapping-behavior.js.map +1 -1
  529. package/ui/nested/pager.d.ts +26 -26
  530. package/ui/nested/pager.js +142 -142
  531. package/ui/nested/pager.js.map +1 -1
  532. package/ui/nested/paging.d.ts +32 -32
  533. package/ui/nested/paging.js +115 -115
  534. package/ui/nested/paging.js.map +1 -1
  535. package/ui/nested/pane-dxi.d.ts +33 -33
  536. package/ui/nested/pane-dxi.js +109 -109
  537. package/ui/nested/pane-dxi.js.map +1 -1
  538. package/ui/nested/placeholder-size.d.ts +25 -25
  539. package/ui/nested/placeholder-size.js +98 -98
  540. package/ui/nested/placeholder-size.js.map +1 -1
  541. package/ui/nested/point.d.ts +67 -67
  542. package/ui/nested/point.js +186 -186
  543. package/ui/nested/point.js.map +1 -1
  544. package/ui/nested/popup.d.ts +40 -40
  545. package/ui/nested/popup.js +144 -144
  546. package/ui/nested/popup.js.map +1 -1
  547. package/ui/nested/position.d.ts +20 -20
  548. package/ui/nested/position.js +83 -83
  549. package/ui/nested/position.js.map +1 -1
  550. package/ui/nested/range-container.d.ts +39 -39
  551. package/ui/nested/range-container.js +187 -187
  552. package/ui/nested/range-container.js.map +1 -1
  553. package/ui/nested/range-dxi.d.ts +23 -23
  554. package/ui/nested/range-dxi.js +109 -109
  555. package/ui/nested/range-dxi.js.map +1 -1
  556. package/ui/nested/rangearea.d.ts +20 -20
  557. package/ui/nested/rangearea.js +136 -136
  558. package/ui/nested/rangearea.js.map +1 -1
  559. package/ui/nested/rangebar.d.ts +20 -20
  560. package/ui/nested/rangebar.js +136 -136
  561. package/ui/nested/rangebar.js.map +1 -1
  562. package/ui/nested/reduction.d.ts +22 -22
  563. package/ui/nested/reduction.js +98 -98
  564. package/ui/nested/reduction.js.map +1 -1
  565. package/ui/nested/remote-operations.d.ts +26 -26
  566. package/ui/nested/remote-operations.js +142 -142
  567. package/ui/nested/remote-operations.js.map +1 -1
  568. package/ui/nested/resource-dxi.d.ts +29 -29
  569. package/ui/nested/resource-dxi.js +164 -164
  570. package/ui/nested/resource-dxi.js.map +1 -1
  571. package/ui/nested/route-dxi.d.ts +31 -31
  572. package/ui/nested/route-dxi.js +143 -143
  573. package/ui/nested/route-dxi.js.map +1 -1
  574. package/ui/nested/row-dxi.d.ts +24 -24
  575. package/ui/nested/row-dxi.js +120 -120
  576. package/ui/nested/row-dxi.js.map +1 -1
  577. package/ui/nested/scale.d.ts +203 -203
  578. package/ui/nested/scale.js +539 -539
  579. package/ui/nested/scale.js.map +1 -1
  580. package/ui/nested/scatter.d.ts +20 -20
  581. package/ui/nested/scatter.js +137 -137
  582. package/ui/nested/scatter.js.map +1 -1
  583. package/ui/nested/scroll-bar.d.ts +26 -26
  584. package/ui/nested/scroll-bar.js +142 -142
  585. package/ui/nested/scroll-bar.js.map +1 -1
  586. package/ui/nested/scrolling.d.ts +28 -28
  587. package/ui/nested/scrolling.js +164 -164
  588. package/ui/nested/scrolling.js.map +1 -1
  589. package/ui/nested/search-editor-options.d.ts +29 -29
  590. package/ui/nested/search-editor-options.js +132 -132
  591. package/ui/nested/search-editor-options.js.map +1 -1
  592. package/ui/nested/search-panel.d.ts +32 -32
  593. package/ui/nested/search-panel.js +157 -157
  594. package/ui/nested/search-panel.js.map +1 -1
  595. package/ui/nested/selected-range.d.ts +22 -22
  596. package/ui/nested/selected-range.js +98 -98
  597. package/ui/nested/selected-range.js.map +1 -1
  598. package/ui/nested/selection-style.d.ts +43 -43
  599. package/ui/nested/selection-style.js +142 -142
  600. package/ui/nested/selection-style.js.map +1 -1
  601. package/ui/nested/selection.d.ts +26 -26
  602. package/ui/nested/selection.js +142 -142
  603. package/ui/nested/selection.js.map +1 -1
  604. package/ui/nested/series-dxi.d.ts +20 -20
  605. package/ui/nested/series-dxi.js +122 -122
  606. package/ui/nested/series-dxi.js.map +1 -1
  607. package/ui/nested/series-template.d.ts +22 -22
  608. package/ui/nested/series-template.js +98 -98
  609. package/ui/nested/series-template.js.map +1 -1
  610. package/ui/nested/shadow.d.ts +25 -25
  611. package/ui/nested/shadow.js +131 -131
  612. package/ui/nested/shadow.js.map +1 -1
  613. package/ui/nested/show-event.d.ts +22 -22
  614. package/ui/nested/show-event.js +98 -98
  615. package/ui/nested/show-event.js.map +1 -1
  616. package/ui/nested/show-first-submenu-mode.d.ts +25 -25
  617. package/ui/nested/show-first-submenu-mode.js +98 -98
  618. package/ui/nested/show-first-submenu-mode.js.map +1 -1
  619. package/ui/nested/show-submenu-mode.d.ts +25 -25
  620. package/ui/nested/show-submenu-mode.js +98 -98
  621. package/ui/nested/show-submenu-mode.js.map +1 -1
  622. package/ui/nested/show.d.ts +20 -20
  623. package/ui/nested/show.js +86 -86
  624. package/ui/nested/show.js.map +1 -1
  625. package/ui/nested/shutter.d.ts +22 -22
  626. package/ui/nested/shutter.js +98 -98
  627. package/ui/nested/shutter.js.map +1 -1
  628. package/ui/nested/size.d.ts +22 -22
  629. package/ui/nested/size.js +98 -98
  630. package/ui/nested/size.js.map +1 -1
  631. package/ui/nested/slider-handle.d.ts +23 -23
  632. package/ui/nested/slider-handle.js +109 -109
  633. package/ui/nested/slider-handle.js.map +1 -1
  634. package/ui/nested/slider-marker.d.ts +39 -39
  635. package/ui/nested/slider-marker.js +209 -209
  636. package/ui/nested/slider-marker.js.map +1 -1
  637. package/ui/nested/small-values-grouping.d.ts +24 -24
  638. package/ui/nested/small-values-grouping.js +120 -120
  639. package/ui/nested/small-values-grouping.js.map +1 -1
  640. package/ui/nested/sort-by-group-summary-info-dxi.d.ts +23 -23
  641. package/ui/nested/sort-by-group-summary-info-dxi.js +109 -109
  642. package/ui/nested/sort-by-group-summary-info-dxi.js.map +1 -1
  643. package/ui/nested/sorting.d.ts +24 -24
  644. package/ui/nested/sorting.js +120 -120
  645. package/ui/nested/sorting.js.map +1 -1
  646. package/ui/nested/source.d.ts +22 -22
  647. package/ui/nested/source.js +98 -98
  648. package/ui/nested/source.js.map +1 -1
  649. package/ui/nested/spline.d.ts +20 -20
  650. package/ui/nested/spline.js +136 -136
  651. package/ui/nested/spline.js.map +1 -1
  652. package/ui/nested/splinearea.d.ts +20 -20
  653. package/ui/nested/splinearea.js +136 -136
  654. package/ui/nested/splinearea.js.map +1 -1
  655. package/ui/nested/stackedarea.d.ts +20 -20
  656. package/ui/nested/stackedarea.js +136 -136
  657. package/ui/nested/stackedarea.js.map +1 -1
  658. package/ui/nested/stackedbar.d.ts +20 -20
  659. package/ui/nested/stackedbar.js +137 -137
  660. package/ui/nested/stackedbar.js.map +1 -1
  661. package/ui/nested/stackedline.d.ts +20 -20
  662. package/ui/nested/stackedline.js +136 -136
  663. package/ui/nested/stackedline.js.map +1 -1
  664. package/ui/nested/stackedspline.d.ts +20 -20
  665. package/ui/nested/stackedspline.js +136 -136
  666. package/ui/nested/stackedspline.js.map +1 -1
  667. package/ui/nested/stackedsplinearea.d.ts +20 -20
  668. package/ui/nested/stackedsplinearea.js +136 -136
  669. package/ui/nested/stackedsplinearea.js.map +1 -1
  670. package/ui/nested/state-storing.d.ts +26 -26
  671. package/ui/nested/state-storing.js +142 -142
  672. package/ui/nested/state-storing.js.map +1 -1
  673. package/ui/nested/steparea.d.ts +20 -20
  674. package/ui/nested/steparea.js +136 -136
  675. package/ui/nested/steparea.js.map +1 -1
  676. package/ui/nested/stepline.d.ts +20 -20
  677. package/ui/nested/stepline.js +136 -136
  678. package/ui/nested/stepline.js.map +1 -1
  679. package/ui/nested/stock.d.ts +20 -20
  680. package/ui/nested/stock.js +136 -136
  681. package/ui/nested/stock.js.map +1 -1
  682. package/ui/nested/store.d.ts +21 -21
  683. package/ui/nested/store.js +87 -87
  684. package/ui/nested/store.js.map +1 -1
  685. package/ui/nested/strip-dxi.d.ts +35 -35
  686. package/ui/nested/strip-dxi.js +142 -142
  687. package/ui/nested/strip-dxi.js.map +1 -1
  688. package/ui/nested/strip-style.d.ts +30 -30
  689. package/ui/nested/strip-style.js +109 -109
  690. package/ui/nested/strip-style.js.map +1 -1
  691. package/ui/nested/subtitle.d.ts +23 -23
  692. package/ui/nested/subtitle.js +99 -99
  693. package/ui/nested/subtitle.js.map +1 -1
  694. package/ui/nested/subvalue-indicator.d.ts +20 -20
  695. package/ui/nested/subvalue-indicator.js +95 -95
  696. package/ui/nested/subvalue-indicator.js.map +1 -1
  697. package/ui/nested/summary.d.ts +65 -65
  698. package/ui/nested/summary.js +155 -155
  699. package/ui/nested/summary.js.map +1 -1
  700. package/ui/nested/tab-dxi.d.ts +46 -46
  701. package/ui/nested/tab-dxi.js +214 -214
  702. package/ui/nested/tab-dxi.js.map +1 -1
  703. package/ui/nested/tab-panel-options.d.ts +44 -44
  704. package/ui/nested/tab-panel-options.js +137 -137
  705. package/ui/nested/tab-panel-options.js.map +1 -1
  706. package/ui/nested/text.d.ts +26 -26
  707. package/ui/nested/text.js +132 -132
  708. package/ui/nested/text.js.map +1 -1
  709. package/ui/nested/texts.d.ts +79 -79
  710. package/ui/nested/texts.js +725 -725
  711. package/ui/nested/texts.js.map +1 -1
  712. package/ui/nested/tick-interval.d.ts +29 -29
  713. package/ui/nested/tick-interval.js +175 -175
  714. package/ui/nested/tick-interval.js.map +1 -1
  715. package/ui/nested/tick.d.ts +25 -25
  716. package/ui/nested/tick.js +131 -131
  717. package/ui/nested/tick.js.map +1 -1
  718. package/ui/nested/tile.d.ts +44 -44
  719. package/ui/nested/tile.js +131 -131
  720. package/ui/nested/tile.js.map +1 -1
  721. package/ui/nested/title.d.ts +37 -37
  722. package/ui/nested/title.js +165 -165
  723. package/ui/nested/title.js.map +1 -1
  724. package/ui/nested/toolbar-item-dxi.d.ts +37 -37
  725. package/ui/nested/toolbar-item-dxi.js +191 -191
  726. package/ui/nested/toolbar-item-dxi.js.map +1 -1
  727. package/ui/nested/tooltip.d.ts +58 -58
  728. package/ui/nested/tooltip.js +352 -352
  729. package/ui/nested/tooltip.js.map +1 -1
  730. package/ui/nested/total-item-dxi.d.ts +32 -32
  731. package/ui/nested/total-item-dxi.js +197 -197
  732. package/ui/nested/total-item-dxi.js.map +1 -1
  733. package/ui/nested/url.d.ts +22 -22
  734. package/ui/nested/url.js +98 -98
  735. package/ui/nested/url.js.map +1 -1
  736. package/ui/nested/validation-rule-dxi.d.ts +30 -30
  737. package/ui/nested/validation-rule-dxi.js +186 -186
  738. package/ui/nested/validation-rule-dxi.js.map +1 -1
  739. package/ui/nested/value-axis-dxi.d.ts +186 -186
  740. package/ui/nested/value-axis-dxi.js +585 -585
  741. package/ui/nested/value-axis-dxi.js.map +1 -1
  742. package/ui/nested/value-axis.d.ts +139 -139
  743. package/ui/nested/value-axis.js +452 -452
  744. package/ui/nested/value-axis.js.map +1 -1
  745. package/ui/nested/value-error-bar.d.ts +29 -29
  746. package/ui/nested/value-error-bar.js +175 -175
  747. package/ui/nested/value-error-bar.js.map +1 -1
  748. package/ui/nested/value-format.d.ts +20 -20
  749. package/ui/nested/value-format.js +81 -81
  750. package/ui/nested/value-format.js.map +1 -1
  751. package/ui/nested/value-indicator.d.ts +20 -20
  752. package/ui/nested/value-indicator.js +95 -95
  753. package/ui/nested/value-indicator.js.map +1 -1
  754. package/ui/nested/vertical-line.d.ts +34 -34
  755. package/ui/nested/vertical-line.js +142 -142
  756. package/ui/nested/vertical-line.js.map +1 -1
  757. package/ui/nested/view-dxi.d.ts +39 -39
  758. package/ui/nested/view-dxi.js +285 -285
  759. package/ui/nested/view-dxi.js.map +1 -1
  760. package/ui/nested/width.d.ts +26 -26
  761. package/ui/nested/width.js +142 -142
  762. package/ui/nested/width.js.map +1 -1
  763. package/ui/number-box.d.ts +356 -356
  764. package/ui/number-box.js +675 -675
  765. package/ui/number-box.js.map +1 -1
  766. package/ui/panorama.d.ts +240 -240
  767. package/ui/panorama.js +454 -454
  768. package/ui/panorama.js.map +1 -1
  769. package/ui/pie-chart.d.ts +580 -580
  770. package/ui/pie-chart.js +759 -759
  771. package/ui/pie-chart.js.map +1 -1
  772. package/ui/pivot-grid-field-chooser.d.ts +250 -250
  773. package/ui/pivot-grid-field-chooser.js +465 -465
  774. package/ui/pivot-grid-field-chooser.js.map +1 -1
  775. package/ui/pivot-grid.d.ts +474 -474
  776. package/ui/pivot-grid.js +680 -680
  777. package/ui/pivot-grid.js.map +1 -1
  778. package/ui/pivot.d.ts +234 -234
  779. package/ui/pivot.js +451 -451
  780. package/ui/pivot.js.map +1 -1
  781. package/ui/polar-chart.d.ts +1208 -1208
  782. package/ui/polar-chart.js +910 -910
  783. package/ui/polar-chart.js.map +1 -1
  784. package/ui/popover.d.ts +346 -346
  785. package/ui/popover.js +658 -658
  786. package/ui/popover.js.map +1 -1
  787. package/ui/popup.d.ts +370 -370
  788. package/ui/popup.js +706 -706
  789. package/ui/popup.js.map +1 -1
  790. package/ui/progress-bar.d.ts +203 -203
  791. package/ui/progress-bar.js +428 -428
  792. package/ui/progress-bar.js.map +1 -1
  793. package/ui/radio-group.d.ts +277 -277
  794. package/ui/radio-group.js +583 -583
  795. package/ui/radio-group.js.map +1 -1
  796. package/ui/range-selector.d.ts +760 -760
  797. package/ui/range-selector.js +808 -808
  798. package/ui/range-selector.js.map +1 -1
  799. package/ui/range-slider.d.ts +313 -313
  800. package/ui/range-slider.js +639 -639
  801. package/ui/range-slider.js.map +1 -1
  802. package/ui/resizable.d.ts +126 -126
  803. package/ui/resizable.js +256 -256
  804. package/ui/resizable.js.map +1 -1
  805. package/ui/responsive-box.d.ts +242 -242
  806. package/ui/responsive-box.js +438 -438
  807. package/ui/responsive-box.js.map +1 -1
  808. package/ui/scheduler.d.ts +604 -604
  809. package/ui/scheduler.js +1051 -1051
  810. package/ui/scheduler.js.map +1 -1
  811. package/ui/scroll-view.d.ts +178 -178
  812. package/ui/scroll-view.js +354 -354
  813. package/ui/scroll-view.js.map +1 -1
  814. package/ui/select-box.d.ts +533 -533
  815. package/ui/select-box.js +1001 -1001
  816. package/ui/select-box.js.map +1 -1
  817. package/ui/slide-out-view.d.ts +154 -154
  818. package/ui/slide-out-view.js +330 -330
  819. package/ui/slide-out-view.js.map +1 -1
  820. package/ui/slide-out.d.ts +282 -282
  821. package/ui/slide-out.js +535 -535
  822. package/ui/slide-out.js.map +1 -1
  823. package/ui/slider.d.ts +282 -282
  824. package/ui/slider.js +563 -563
  825. package/ui/slider.js.map +1 -1
  826. package/ui/sparkline.d.ts +392 -392
  827. package/ui/sparkline.js +650 -650
  828. package/ui/sparkline.js.map +1 -1
  829. package/ui/switch.d.ts +223 -223
  830. package/ui/switch.js +474 -474
  831. package/ui/switch.js.map +1 -1
  832. package/ui/tab-panel.d.ts +322 -322
  833. package/ui/tab-panel.js +601 -601
  834. package/ui/tab-panel.js.map +1 -1
  835. package/ui/tabs.d.ts +292 -292
  836. package/ui/tabs.js +567 -567
  837. package/ui/tabs.js.map +1 -1
  838. package/ui/tag-box.d.ts +553 -553
  839. package/ui/tag-box.js +1051 -1051
  840. package/ui/tag-box.js.map +1 -1
  841. package/ui/text-area.d.ts +323 -323
  842. package/ui/text-area.js +608 -608
  843. package/ui/text-area.js.map +1 -1
  844. package/ui/text-box.d.ts +363 -363
  845. package/ui/text-box.js +688 -688
  846. package/ui/text-box.js.map +1 -1
  847. package/ui/tile-view.d.ts +264 -264
  848. package/ui/tile-view.js +513 -513
  849. package/ui/tile-view.js.map +1 -1
  850. package/ui/toast.d.ts +285 -285
  851. package/ui/toast.js +575 -575
  852. package/ui/toast.js.map +1 -1
  853. package/ui/toolbar.d.ts +216 -216
  854. package/ui/toolbar.js +401 -401
  855. package/ui/toolbar.js.map +1 -1
  856. package/ui/tooltip.d.ts +273 -273
  857. package/ui/tooltip.js +533 -533
  858. package/ui/tooltip.js.map +1 -1
  859. package/ui/tree-list.d.ts +954 -954
  860. package/ui/tree-list.js +1371 -1371
  861. package/ui/tree-list.js.map +1 -1
  862. package/ui/tree-map.d.ts +550 -550
  863. package/ui/tree-map.js +656 -656
  864. package/ui/tree-map.js.map +1 -1
  865. package/ui/tree-view.d.ts +444 -444
  866. package/ui/tree-view.js +881 -881
  867. package/ui/tree-view.js.map +1 -1
  868. package/ui/validation-group.d.ts +66 -66
  869. package/ui/validation-group.js +154 -154
  870. package/ui/validation-group.js.map +1 -1
  871. package/ui/validation-summary.d.ts +111 -111
  872. package/ui/validation-summary.js +233 -233
  873. package/ui/validation-summary.js.map +1 -1
  874. package/ui/validator.d.ts +126 -126
  875. package/ui/validator.js +266 -266
  876. package/ui/validator.js.map +1 -1
  877. package/ui/vector-map.d.ts +732 -732
  878. package/ui/vector-map.js +716 -716
  879. package/ui/vector-map.js.map +1 -1
package/README.md CHANGED
@@ -1,669 +1,669 @@
1
- [![CircleCI](https://img.shields.io/circleci/project/github/DevExpress/devextreme-angular/18.1.svg)](https://circleci.com/gh/DevExpress/devextreme-angular) [![npm version](https://badge.fury.io/js/devextreme-angular.svg)](https://badge.fury.io/js/devextreme-angular)
2
-
3
- ### If you are looking for the v17.2 branch, please follow this link: [https://github.com/DevExpress/devextreme-angular/tree/17.2](https://github.com/DevExpress/devextreme-angular/tree/17.2).
4
-
5
- # Angular UI and Visualization Components Based on DevExtreme Widgets #
6
-
7
- This project allows you to use [DevExtreme Widgets](http://js.devexpress.com/Demos/WidgetsGallery/) in [Angular](https://angular.io/) applications.
8
-
9
- * [Getting started](#getting-started)
10
- * [Prerequisites](#prerequisites)
11
- * [DevExtreme installation](#add-to-existing-app)
12
- * [Starting a new application](#create-application)
13
- * [Server-side Rendering](#server-side-rendering)
14
- * [Running the local examples](#running-examples)
15
- * [Include jQuery integration](#jquery-integration)
16
- * [Usage samples](#usage-samples)
17
- * [Static string option value](#static-option)
18
- * [Static non-string option value](#static-non-string-option)
19
- * [Event handling](#event-handling)
20
- * [Callback functions](#callback-functions)
21
- * [One-way option binding](#one-way-binding)
22
- * [Two-way option binding](#two-way-binding)
23
- * [Custom templates](#custom-templates)
24
- * [Data layer](#data-layer)
25
- * [DevExtreme utils](#devextreme-utils)
26
- * [Components with transcluded content](#components-with-transcluded-content)
27
- * [Angular forms](#angular-forms)
28
- * [Using DevExtreme validation features](#devextreme-validation-features)
29
- * [Configuration components](#configuration-components)
30
- * [Accessing a DevExtreme widget instance](#accessing-widget-instance)
31
- * [Angular change detection](#angular-change-detection)
32
- * [Demos](#demos)
33
- * [API reference](#api-reference)
34
- * [Bundle size optimization](#bundle-optimization)
35
- * [License](#license)
36
- * [Support & feedback](#support-feedback)
37
- * [Version history](#version-history)
38
-
39
- ## <a name="getting-started"></a>Getting Started ##
40
-
41
- You have the following options to start:
42
-
43
- * Play around with our [Plunker](http://next.plnkr.co/edit/XuAPDd?preview) or [Stackblitz](https://stackblitz.com/edit/angular-c2djgn) without installing anything
44
- * [Add DevExtreme to your existing Angular application](#add-to-existing-app)
45
- * [Creating a new Angular application](#create-application) and install DevExtreme
46
- * [Run the local examples](#running-examples)
47
-
48
- ### <a name="prerequisites"></a>Prerequisites ###
49
-
50
- **Starting with v18.1, DevExtreme-Angular requires [Angular](https://angular.io/) version 5 or later**
51
-
52
- <a href="https://docs.npmjs.com/getting-started/installing-node" target="_blank" title="Installing Node.js and updating npm">Node.js and npm</a> are
53
- required and essential to Angular development.
54
-
55
- <a href="https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md" target="_blank" title="Installing Gulp">Gulp</a> is
56
- required to build the project and run tests.
57
-
58
- ### <a name="add-to-existing-app"></a>Adding DevExteme to an Existing Angular Application ###
59
-
60
- #### <a name="installation"></a>Install DevExtreme ####
61
-
62
- Install the **devextreme** and **devextreme-angular** npm packages:
63
-
64
- ```bash
65
- npm install --save devextreme devextreme-angular
66
- ```
67
-
68
- #### <a name="additional-configuration"></a>Additional Configuration ####
69
-
70
- The further configuration steps depend on which build tool, bundler or module loader you are using. Please choose the one you need:
71
-
72
- * [Configuring SystemJS](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-systemjs.md#configuration)
73
- * [Configuring Angular CLI](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-angular-cli.md#configuration)
74
- - [Third-party dependencies registration in Angular CLI 6+](https://github.com/DevExpress/devextreme-angular/blob/master/docs/setup-3rd-party-dependencies.md)
75
- * [Configuring Webpack](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-webpack.md#configuration)
76
- * [Configuring Rollup](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-rollup.md#configuration)
77
- * [Configuring Ionic 2](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-ionic2.md#configuration)
78
-
79
- #### <a name="import-modules"></a>Import DevExtreme Modules ####
80
-
81
- Go to your main .ts file (usually *src/app.module.ts*) and import the required modules to your app:
82
-
83
- ```js
84
- ...
85
- import { DxButtonModule } from 'devextreme-angular';
86
-
87
- @NgModule({
88
- ...
89
- imports: [
90
- ...
91
- DxButtonModule,
92
- ...
93
- ]
94
- })
95
- export class AppModule {}
96
- ```
97
-
98
- Note, you can import the **DevExtremeModule** module to include all the DevExtreme components at once, but it might affect the final bundle size and startup time.
99
- Check the [bundle optimization](#bundle-optimization) section for more info.
100
-
101
- #### Use DevExtreme Components ####
102
-
103
- Now you can use a DevExteme component in your application:
104
-
105
- ```js
106
- @Component({
107
- selector: 'my-app',
108
- template: '<dx-button text="Press me" (onClick)="helloWorld()"></dx-button>'
109
- })
110
- export class AppComponent {
111
- helloWorld() {
112
- alert('Hello world!');
113
- }
114
- }
115
- ```
116
-
117
- ### <a name="create-application"></a>Create a new Angular Application ###
118
-
119
- Depending on your requirements you can choose one of the following ways to start:
120
-
121
- * [Start with SystemJS](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-systemjs.md)
122
- * [Start with Angular CLI](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-angular-cli.md)
123
- - [Third-party dependencies registration in Angular CLI 6+](https://github.com/DevExpress/devextreme-angular/blob/master/docs/setup-3rd-party-dependencies.md)
124
- * [Start with Webpack](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-webpack.md)
125
- * [Start with Rollup](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-rollup.md)
126
- * [Start with Ionic 2](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-ionic2.md)
127
-
128
- ### <a name="server-side-rendering"></a>Server-side Rendering ###
129
-
130
- Angular Universal provides [server-side rendering](https://angular.io/guide/universal#angular-universal-server-side-rendering) that significantly reduces the application's loading time. You can use DevExtreme widgets in Angular Universal applications in the same manner as in other Angular apps.
131
-
132
- **Note: DevExtreme-angular does not support [dynamic theme loading](https://js.devexpress.com/Documentation/Guide/Themes/Predefined_Themes/#Themes_in_DevExtreme_Apps) in the Server-side rendering mode due to technical restrictions. You can only use a single static theme by linking the corresponding CSS file.**
133
-
134
- You can [create a new Angular Universal app](https://github.com/angular/angular-cli/wiki/stories-universal-rendering#angular-universal-integration) and [add DevExtreme widgets](#add-to-existing-app) to it, or add the Universal module to an existing Angular application with DevExtreme. Use the following command to add the Universal module to an existing app:
135
-
136
- ```bash
137
- ng generate universal my-app
138
- ```
139
-
140
- See [Angular 5.1 & More Now Available](https://blog.angular.io/angular-5-1-more-now-available-27d372f5eb4e) for more information.
141
-
142
- [This example](https://github.com/DevExpress/devextreme-examples/tree/18_1/universal-angular) demonstrates the use of DevExtreme Angular controls in an Angular Universal application.
143
-
144
- #### <a name="cache-requests"></a>Cache Requests on the Server ####
145
-
146
- DevExtreme-angular supports caching requests on the server in the server-side rendering mode. This avoids repeatedly requesting data from the browser and renders widgets using data that is initially applied when the page is loaded for the first time.
147
-
148
- To enable caching, import the `DxServerTransferStateModule` module in the module's .ts file (usually *src/app.module.ts*):
149
-
150
- ```js
151
- import { DxServerTransferStateModule } from 'devextreme-angular';
152
-
153
- @NgModule({
154
- ...
155
- imports: [
156
- ...
157
- DxServerTransferStateModule,
158
- ...
159
- ]
160
- })
161
- export class AppModule {}
162
- ```
163
-
164
- and import the the `ServerTransferStateModule` module in the server module's .ts file (usually *src/app.server.module.ts*):
165
-
166
- ```js
167
- import { ServerModule, ServerTransferStateModule } from '@angular/platform-server';
168
-
169
- @NgModule({
170
- imports: [
171
- AppModule,
172
- ServerModule,
173
- ServerTransferStateModule,
174
- ModuleMapLoaderModule
175
- ],
176
- bootstrap: [AppComponent],
177
- })
178
- ```
179
-
180
- Also, ensure that the application module is bootstrapped when the document has been loaded (the *main.ts* file should contain the code below). Otherwise, caching does not work correctly.
181
-
182
- ```js
183
- document.addEventListener('DOMContentLoaded', () => {
184
- platformBrowserDynamic().bootstrapModule(AppModule)
185
- .catch(err => console.log(err));
186
- });
187
- ```
188
-
189
- ### <a name="running-examples"></a>Running the Local Examples ###
190
-
191
- ```bash
192
- # clone our repo
193
- # --depth 1 removes all but one .git commit history
194
- git clone --depth 1 https://github.com/DevExpress/devextreme-angular.git
195
-
196
- # change directory to our repo
197
- cd devextreme-angular
198
-
199
- # install the repo with npm
200
- npm install
201
-
202
- # start the web-server
203
- npm start
204
-
205
- ```
206
-
207
- Navigate to [http://127.0.0.1:8875/examples/](http://127.0.0.1:8875/examples/) in the opened browser window. Explore the **examples** folder of this repository for the examples source code.
208
-
209
- ### <a name="jquery-integration"></a>Include jQuery integration ###
210
- Starting with version 17.2, DevExtreme doesn't depend on jQuery. It means that our widgets work without jQuery elements. If you need to use jQuery, you can manually install the jquery npm package and include the jQuery integration as described below:
211
-
212
- ```bash
213
- npm install --save jquery
214
- ```
215
-
216
- ```js
217
- import 'devextreme/integration/jquery';
218
- ```
219
-
220
- ## <a name="usage-samples"></a>Usage Samples ##
221
-
222
- ### <a name="static-option"></a>Static String Option Value ###
223
-
224
- To specify a string widget's option statically
225
- (the [text](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxButton/Configuration/#text)
226
- option of dxButton):
227
-
228
- ```html
229
- <dx-button text="Simple button"></dx-button>
230
- ```
231
-
232
- ### <a name="static-non-string-option"></a>Static Non-string Option Value ###
233
-
234
- To specify a non-string widget's option statically
235
- (the [disabled](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxButton/Configuration/#disabled)
236
- option of dxButton):
237
-
238
- ```html
239
- <dx-button [disabled]="false"></dx-button>
240
- ```
241
-
242
- ### <a name="event-handling"></a>Event Handling ###
243
-
244
- To bind the dxButton’s [click](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxButton/Events/#click) event:
245
-
246
- ```html
247
- <dx-button (onClick)="handler()"></dx-button>
248
- ```
249
-
250
- ### <a name="callback-functions"></a>Callback Functions ###
251
-
252
- To specify a widget's option using a callback function (the [layer.customize](https://js.devexpress.com/Documentation/ApiReference/Data_Visualization_Widgets/dxVectorMap/Configuration/layers/#customize)
253
- option of dxVectorMap):
254
-
255
- ```html
256
- <dx-vector-map>
257
- ...
258
- <dxi-layer
259
- ...
260
- [customize]="customizeLayers">
261
- </dxi-layer>
262
- </dx-vector-map>
263
- ```
264
-
265
- Note that callback functions are executed _outside_ the context of the component, but if the context is important, you can explicitly bind it to the callback function in the constructor.
266
-
267
- ```js
268
- constructor() {
269
- this.customizeLayers = this.customizeLayers.bind(this);
270
- }
271
-
272
- customizeLayers(elements) {
273
- let country = this.myCountry;
274
- ...
275
- }
276
- ```
277
-
278
- ### <a name="one-way-binding"></a>One-way Option Binding ###
279
-
280
- If we want changes to the value of ‘bindingProperty’ of the host component to propagate to the
281
- [value](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxTextBox/Configuration/#value) of the dxTextBox widget,
282
- a one-way binding approach is used:
283
-
284
- ```html
285
- <dx-text-box [value]="bindingProperty"></dx-text-box>
286
- ```
287
-
288
- ### <a name="two-way-binding"></a>Two-way Option Binding ###
289
-
290
- In addition to the one-way binding, we can also perform two-way binding, which propagates changes from the bindingProperty to the widget
291
- or vice versa from the widget to the bindingProperty:
292
-
293
- ```html
294
- <dx-text-box [(value)]="bindingProperty"></dx-text-box>
295
- ```
296
-
297
- ### <a name="custom-templates"></a>Custom Templates ###
298
-
299
- In case you want to customize the rendering of a DevExtreme widget, we support custom templates. For instance, we can specify
300
- the [itemTemplate](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxList/Configuration/#itemTemplate)
301
- and [groupTemplate](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxList/Configuration/#groupTemplate)
302
- of the dxList widget as follows:
303
-
304
- ```html
305
- <dx-list [grouped]="true" [items]="grouppedItems">
306
- <div *dxTemplate="let itemData of 'item'; let itemIndex = index">
307
- {{itemIndex}} - {{itemData.someProperty}}
308
- </div>
309
- <div *dxTemplate="let groupData of 'group'">
310
- {{groupData.someProperty}}
311
- </div>
312
- </dx-list>
313
- ```
314
- The local 'itemData' and 'groupData' variables (that are declared via the 'let' keyword) expose the corresponding item data object. You can use it to
315
- render the data where you need inside the template.
316
-
317
- The 'item' and 'group' names are default template names for the 'itemTemplate' and 'groupTemplate' options of the dxList widget.
318
-
319
- ### <a name="data-layer"></a>Data Layer ###
320
-
321
- The DevExtreme framework includes a data layer, which is a set of complementary components that enable you to read and write data.
322
- For more details please refer to [the documentation on the official website](https://js.devexpress.com/Documentation/Guide/Data_Layer/Data_Layer/).
323
-
324
- ### <a name="devextreme-utils"></a>DevExtreme Utils ###
325
-
326
- The DevExtreme provides utils that can be used in different application parts such as widgets and data. For more details please refer to [the documentation on the official website](https://js.devexpress.com/Documentation/ApiReference/Common/utils/).
327
-
328
- ### <a name="components-with-transcluded-content"></a>Components with Transcluded Content ###
329
-
330
- In addition to using dxTemplate, it is possible to put the content of the following widgets directly into the markup:
331
- [dxResizable](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxResizable/),
332
- [dxScrollView](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxScrollView/),
333
- [dxValidationGroup](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxValidationGroup/).
334
- For instance, we can set the content for
335
- the [dxScrollView](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxScrollView/) widget as shown below:
336
-
337
- ```html
338
- <dx-scroll-view>
339
- <div>Some scrollable content</div>
340
- </dx-scroll-view>
341
- ```
342
-
343
- ### <a name="angular-forms"></a>Angular Forms ###
344
-
345
- The DevExtreme Angular editors support the 'ngModel' binding as well as the 'formControlName' directive, which are necessary for the
346
- [Angular forms](https://angular.io/docs/ts/latest/guide/forms.html) features.
347
-
348
- ```html
349
- <form [formGroup]="form">
350
- <dx-text-box
351
- name="email"
352
- [(ngModel)]="email"
353
- [isValid]="emailControl.valid || emailControl.pristine"
354
- [validationError]="{ message: 'Email is invalid'}">
355
- </dx-text-box>
356
- </form>
357
- ```
358
-
359
- ```js
360
- @Component({
361
- selector: 'my-app',
362
- templateUrl: 'app/app.component.html'
363
- })
364
- export class AppComponent implements OnInit {
365
- email: string;
366
- emailControl: AbstractControl;
367
- form: FormGroup;
368
- ngOnInit() {
369
- this.form = new FormGroup({
370
- email: new FormControl('', Validators.compose([Validators.required, Validators.email]))
371
- });
372
- this.emailControl = this.form.controls['email'];
373
- }
374
- }
375
- ```
376
-
377
- ### <a name="devextreme-validation-features"></a>Using DevExtreme Validation Features ###
378
-
379
- You can use the [built-in validators](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxValidator/Validation_Rules/),
380
- validation summary and other DevExtreme validation features with Angular DevExtreme editors.
381
-
382
-
383
- ```html
384
- <dx-validation-group>
385
-
386
- <dx-text-box [(value)]="email">
387
- <dx-validator [validationRules]="validationRules.email"></dx-validator>
388
- </dx-text-box>
389
- <dx-text-box [(value)]="password" mode="password">
390
- <dx-validator [validationRules]="validationRules.password"></dx-validator>
391
- </dx-text-box>
392
-
393
- <dx-validation-summary></dx-validation-summary>
394
-
395
- <dx-button (onClick)="validate($event)" text="Submit"></dx-button>
396
-
397
- </dx-validation-group>
398
- ```
399
-
400
- ```js
401
- @Component({
402
- selector: 'my-app',
403
- templateUrl: 'app/app.component.html'
404
- })
405
- export class AppComponent {
406
- email: string;
407
- password: string;
408
- validationRules = {
409
- email: [
410
- { type: 'required', message: 'Email is required.' },
411
- { type: 'email', message: 'Email is invalid.' }
412
- ],
413
- password: [
414
- { type: 'required', message: 'Email is required.' }
415
- ]
416
- };
417
- validate(params) {
418
- let result = params.validationGroup.validate();
419
- if (result.isValid) {
420
- // form data is valid
421
- // params.validationGroup.reset();
422
- }
423
- }
424
- }
425
- ```
426
-
427
- ### <a name="configuration-components"></a>Configuration Components ###
428
-
429
- You can use `dxo-` ('o' is a contraction of 'option') prefixed components to configure complex nested options for widgets.
430
- The following example demonstrates how to configure the [tooltip](https://js.devexpress.com/Documentation/ApiReference/Data_Visualization_Widgets/dxTreeMap/Configuration/tooltip/) option of the dxTreeMap widget:
431
-
432
- ```html
433
- <dx-tree-map [dataSource]="treeData">
434
- <dxo-tooltip [enabled]="showTooltip" format="thousands"></dxo-tooltip>
435
- </dx-tree-map>
436
-
437
- <dx-button text="Toggle tooltip" (onClick)="toggleTooltip()"></dx-button>
438
- ```
439
-
440
- ```js
441
- @Component({
442
- selector: 'my-app',
443
- templateUrl: 'app/app.component.html'
444
- })
445
- export class AppComponent {
446
- treeData = ...;
447
- showTooltip = false;
448
- toggleTooltip() {
449
- this.showTooltip = !this.showTooltip;
450
- }
451
- }
452
- ```
453
-
454
- You can also use `dxi-` ('i' is a contraction of 'item') prefixed components to configure complex collection options for widgets.
455
- The following example demonstrates how to configure the [columns](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/) option of the dxDataGrid widget:
456
-
457
- ```html
458
- <dx-data-grid [dataSource]="data">
459
- <dxi-column dataField="firstName" caption="First Name"></dxi-column>
460
- <dxi-column dataField="lastName" caption="Last Name" [visible]="showLastName"></dxi-column>
461
- </dx-data-grid>
462
-
463
- <dx-button text="Toggle the 'Last Name' column" (onClick)="toggleLastName()"></dx-button>
464
- ```
465
-
466
- ```js
467
- @Component({
468
- selector: 'my-app',
469
- templateUrl: 'app/app.component.html'
470
- })
471
- export class AppComponent {
472
- data = ...;
473
- showLastName = false;
474
- toggleLastName() {
475
- this.showLastName = !this.showLastName;
476
- }
477
- }
478
- ```
479
-
480
- To configure options that can accept a configuration object or an array of configuration objects, use `dxi-` prefixed components.
481
- The following example demonstrates how to configure the [valueAxis](https://js.devexpress.com/Documentation/ApiReference/Data_Visualization_Widgets/dxChart/Configuration/valueAxis/) option of the dxChart widget:
482
-
483
- ```html
484
- <dx-chart [dataSource]="data">
485
- <dxi-series valueField="value" argumentField="argument"></dxi-series>
486
- <dxi-value-axis>
487
- <dxo-label format="millions"></dxo-label>
488
- </dxi-value-axis>
489
- </dx-chart>
490
- ```
491
-
492
- ```js
493
- @Component({
494
- selector: 'my-app',
495
- templateUrl: 'app/app.component.html'
496
- })
497
- export class AppComponent {
498
- data = ...;
499
- }
500
- ```
501
-
502
- It is possible to specify an item template inside the `dxi-` prefixed components and use Angular
503
- [structural directives](https://angular.io/docs/ts/latest/guide/structural-directives.html) such as ngFor. Note that
504
- the available item properties are described in the [Default Item Template](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxList/Default_Item_Template/)
505
- section of a corresponding widget documentation reference.
506
-
507
- ```html
508
- <dx-list>
509
- <dxi-item>
510
- <h1>Items available</h1>
511
- </dxi-item>
512
- <dxi-item *ngFor="let item of listItems" [badge]="item.badge">
513
- <h2>{{item.text}}</h2>
514
- </dxi-item>
515
- </dx-list>
516
- ```
517
-
518
- ```js
519
- @Component({
520
- selector: 'my-app',
521
- templateUrl: 'app/app.component.html'
522
- })
523
- export class AppComponent {
524
- listItems = [
525
- {
526
- text: 'Cars',
527
- badge: '12'
528
- },
529
- {
530
- text: 'Bikes',
531
- badge: '5'
532
- }
533
- ];
534
- }
535
- ```
536
-
537
- If your item template contains some *nested* components, declare it using the parameterless `dxTemplate` structural directive as follows:
538
-
539
- ```html
540
- <dx-list>
541
- <dxi-item>
542
- <div *dxTemplate>
543
- <dx-button text="I'm a nested child component"></dx-button>
544
- </div>
545
- </dxi-item>
546
- </dx-list>
547
- ```
548
-
549
- Angular has a built-in `template` directive. To define the `template` property of the configuration component (for example, `dxo-master-detail`), use the following code:
550
- ```html
551
- <dxo-master-detail [template]="'masterDetail'"></dxo-master-detail>
552
- ```
553
-
554
- Note that some options with an object type are not implemented as nested components - for example,
555
- [editorOptions of dxDataGrid](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/#editorOptions), [editorOptions of dxForm](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxForm/Item_Types/SimpleItem/#editorOptions), [the widget option of dxToolbar](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxToolbar/Default_Item_Template/#options).
556
-
557
- ### <a name="accessing-widget-instance"></a>Accessing a DevExtreme Widget Instance ###
558
-
559
- You can access a DevExtreme widget instance using the `@ViewChild` or `@ViewChildren` decorator (depending on whether you are getting just one or several instances of one widget) and the component's
560
- 'instance' property. Both decorators accept a component name or a [template reference variable](https://angular.io/guide/template-syntax#template-reference-variables--var-). In the example below, the
561
- [refresh](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Methods/#refresh)
562
- method of the dxDataGrid is called:
563
-
564
- ```js
565
- import { Component, ViewChild } from '@angular/core';
566
- import { DxDataGridComponent } from "devextreme-angular";
567
-
568
- @Component({
569
- selector: 'my-app',
570
- template: `
571
- <dx-data-grid #targetDataGrid [dataSource]="dataSource"></dx-data-grid>
572
- <dx-button text="Refresh data" (onClick)="refresh()"></dx-button>
573
- `
574
- })
575
- export class AppComponent implements OnChanges {
576
- @ViewChild(DxDataGridComponent) dataGrid:DxDataGridComponent
577
- // or
578
- // @ViewChild("targetDataGrid") dataGrid: DxDataGridComponent
579
- refresh() {
580
- this.dataGrid.instance.refresh();
581
- }
582
- }
583
- ```
584
-
585
- To access a DevExtreme widget instance in markup, you can use the same template reference variables. The following example demonstrates how you can get a dxSelectBox value in the template.
586
-
587
- ```html
588
- <dx-select-box #selectbox [items]="items"></dx-select-box>
589
- {{selectbox.value}}
590
- ```
591
-
592
- ### <a name="angular-change-detection"></a>Angular Change Detection ###
593
-
594
- By default, in Angular, options changes are checked on each user action.
595
- If you bind a widget option to this function, it should return a static object.
596
- Otherwise, Angular considers that the option is constantly changed after each user action.
597
- Alternatively, you can change the default behavior and set the [ChangeDetectionStrategy](https://angular.io/docs/ts/latest/api/core/index/ChangeDetectionStrategy-enum.html) component option to "OnPush".
598
-
599
- ```js
600
- import {Component, ChangeDetectionStrategy} from '@angular/core';
601
-
602
- @Component({
603
- selector: 'my-app',
604
- ....
605
- changeDetection: ChangeDetectionStrategy.OnPush
606
- })
607
- ```
608
-
609
- ## <a name="demos"></a>Demos ##
610
-
611
- * [GolfClub real-world application](https://devexpress.github.io/golfclub/) ([sources](https://github.com/DevExpress/golfclub))
612
- * [Lots of feature-based examples](https://js.devexpress.com/Demos/WidgetsGallery/Demo/Data_Grid/LocalDataSource/Angular/Light/)
613
-
614
- ## <a name="api-reference"></a>API Reference ##
615
-
616
- DevExtreme Angular components mirror
617
- [DevExtreme JavaScript API](http://js.devexpress.com/Documentation/ApiReference/) but use
618
- [Angular syntax](#usage-samples) for specifying widget options, subscribing to events and custom templates declaration.
619
-
620
- ## <a name="bundle-optimization"></a>Bundle Size Optimization ##
621
-
622
- ### Bundlers with Tree Shaking Support ###
623
-
624
- *Tree shaking* can greatly reduce the downloaded size of the application by removing unused portions of both source and library code. There are a number of
625
- bundlers with tree shaking support, such as Webpack 2, Rollup, SystemJS Bundler, etc. Due to specifics of the tree shaking algorithm, your project typescript sources should
626
- be prepared accordingly to make tree shaking available. This preparations are [performed by the Angular Compiler](https://angular.io/docs/ts/latest/cookbook/aot-compiler.html#!#tree-shaking).
627
- You can follow one of the existing guides to configure tree shaking with your bundler ([Webpack 2](http://blog.rangle.io/optimize-your-angular2-application-with-tree-shaking/),
628
- [Angular CLI](https://github.com/angular/angular-cli#bundling),
629
- [Rollup](https://angular.io/docs/ts/latest/cookbook/aot-compiler.html#!#tree-shaking)).
630
-
631
- To make it work with DevExtreme Angular package, you just need to import only the modules required in your application, not the whole DevExtremeModule. For instance,
632
- you can import only DxButtonModule as follows:
633
-
634
- ```js
635
- import { DxButtonModule } from 'devextreme-angular';
636
- ```
637
-
638
- Note, AOT Compilation also decreases a bundle size by precompiling your HTML templates. So, the markup and the template compiler are not included into the final bundle.
639
-
640
- ### Bundlers without Tree Shaking Support ###
641
-
642
- If you are not going to configure tree shaking, you can optimize your bundle size by using imports from specific modules, not from the main 'devextreme-angular' module. You can do this
643
- as follows:
644
-
645
- ```js
646
- import { DxButtonModule } from 'devextreme-angular/ui/button';
647
- ```
648
-
649
- ## <a name="license"></a>License ##
650
-
651
- Familiarize yourself with the
652
- [DevExtreme License](https://js.devexpress.com/Licensing/).
653
- [Free trial is available!](http://js.devexpress.com/Buy/)
654
-
655
- **DevExtreme Angular components are released as a MIT-licensed (free and open-source) add-on to DevExtreme.**
656
-
657
- ## <a name="support-feedback"></a>Support & Feedback ##
658
-
659
- * For general Angular topics, follow [these guidelines](https://github.com/angular/angular/blob/master/CONTRIBUTING.md)
660
- * For questions regarding DevExtreme libraries and JavaScript API, use [DevExpress Support Center](https://www.devexpress.com/Support/Center)
661
- * For DevExtreme Angular integration bugs, questions and suggestions, use the [GitHub issue tracker](https://github.com/DevExpress/devextreme-angular/issues)
662
-
663
- ## <a name="version-history"></a>Version history ###
664
-
665
- | DevExtreme | Angular |
666
- | ---------- | ----------------|
667
- | v18.1+ <br/> v18.2+ | v5.0 - v7.0+ |
668
- | v17.1+ <br/> v17.2+ | v2.4 - v5.0+ |
1
+ [![CircleCI](https://img.shields.io/circleci/project/github/DevExpress/devextreme-angular/18.1.svg)](https://circleci.com/gh/DevExpress/devextreme-angular) [![npm version](https://badge.fury.io/js/devextreme-angular.svg)](https://badge.fury.io/js/devextreme-angular)
2
+
3
+ ### If you are looking for the v17.2 branch, please follow this link: [https://github.com/DevExpress/devextreme-angular/tree/17.2](https://github.com/DevExpress/devextreme-angular/tree/17.2).
4
+
5
+ # Angular UI and Visualization Components Based on DevExtreme Widgets #
6
+
7
+ This project allows you to use [DevExtreme Widgets](http://js.devexpress.com/Demos/WidgetsGallery/) in [Angular](https://angular.io/) applications.
8
+
9
+ * [Getting started](#getting-started)
10
+ * [Prerequisites](#prerequisites)
11
+ * [DevExtreme installation](#add-to-existing-app)
12
+ * [Starting a new application](#create-application)
13
+ * [Server-side Rendering](#server-side-rendering)
14
+ * [Running the local examples](#running-examples)
15
+ * [Include jQuery integration](#jquery-integration)
16
+ * [Usage samples](#usage-samples)
17
+ * [Static string option value](#static-option)
18
+ * [Static non-string option value](#static-non-string-option)
19
+ * [Event handling](#event-handling)
20
+ * [Callback functions](#callback-functions)
21
+ * [One-way option binding](#one-way-binding)
22
+ * [Two-way option binding](#two-way-binding)
23
+ * [Custom templates](#custom-templates)
24
+ * [Data layer](#data-layer)
25
+ * [DevExtreme utils](#devextreme-utils)
26
+ * [Components with transcluded content](#components-with-transcluded-content)
27
+ * [Angular forms](#angular-forms)
28
+ * [Using DevExtreme validation features](#devextreme-validation-features)
29
+ * [Configuration components](#configuration-components)
30
+ * [Accessing a DevExtreme widget instance](#accessing-widget-instance)
31
+ * [Angular change detection](#angular-change-detection)
32
+ * [Demos](#demos)
33
+ * [API reference](#api-reference)
34
+ * [Bundle size optimization](#bundle-optimization)
35
+ * [License](#license)
36
+ * [Support & feedback](#support-feedback)
37
+ * [Version history](#version-history)
38
+
39
+ ## <a name="getting-started"></a>Getting Started ##
40
+
41
+ You have the following options to start:
42
+
43
+ * Play around with our [Plunker](http://next.plnkr.co/edit/XuAPDd?preview) or [Stackblitz](https://stackblitz.com/edit/angular-c2djgn) without installing anything
44
+ * [Add DevExtreme to your existing Angular application](#add-to-existing-app)
45
+ * [Creating a new Angular application](#create-application) and install DevExtreme
46
+ * [Run the local examples](#running-examples)
47
+
48
+ ### <a name="prerequisites"></a>Prerequisites ###
49
+
50
+ **Starting with v18.1, DevExtreme-Angular requires [Angular](https://angular.io/) version 5 or later**
51
+
52
+ <a href="https://docs.npmjs.com/getting-started/installing-node" target="_blank" title="Installing Node.js and updating npm">Node.js and npm</a> are
53
+ required and essential to Angular development.
54
+
55
+ <a href="https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md" target="_blank" title="Installing Gulp">Gulp</a> is
56
+ required to build the project and run tests.
57
+
58
+ ### <a name="add-to-existing-app"></a>Adding DevExteme to an Existing Angular Application ###
59
+
60
+ #### <a name="installation"></a>Install DevExtreme ####
61
+
62
+ Install the **devextreme** and **devextreme-angular** npm packages:
63
+
64
+ ```bash
65
+ npm install --save devextreme devextreme-angular
66
+ ```
67
+
68
+ #### <a name="additional-configuration"></a>Additional Configuration ####
69
+
70
+ The further configuration steps depend on which build tool, bundler or module loader you are using. Please choose the one you need:
71
+
72
+ * [Configuring SystemJS](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-systemjs.md#configuration)
73
+ * [Configuring Angular CLI](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-angular-cli.md#configuration)
74
+ - [Third-party dependencies registration in Angular CLI 6+](https://github.com/DevExpress/devextreme-angular/blob/master/docs/setup-3rd-party-dependencies.md)
75
+ * [Configuring Webpack](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-webpack.md#configuration)
76
+ * [Configuring Rollup](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-rollup.md#configuration)
77
+ * [Configuring Ionic 2](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-ionic2.md#configuration)
78
+
79
+ #### <a name="import-modules"></a>Import DevExtreme Modules ####
80
+
81
+ Go to your main .ts file (usually *src/app.module.ts*) and import the required modules to your app:
82
+
83
+ ```js
84
+ ...
85
+ import { DxButtonModule } from 'devextreme-angular';
86
+
87
+ @NgModule({
88
+ ...
89
+ imports: [
90
+ ...
91
+ DxButtonModule,
92
+ ...
93
+ ]
94
+ })
95
+ export class AppModule {}
96
+ ```
97
+
98
+ Note, you can import the **DevExtremeModule** module to include all the DevExtreme components at once, but it might affect the final bundle size and startup time.
99
+ Check the [bundle optimization](#bundle-optimization) section for more info.
100
+
101
+ #### Use DevExtreme Components ####
102
+
103
+ Now you can use a DevExteme component in your application:
104
+
105
+ ```js
106
+ @Component({
107
+ selector: 'my-app',
108
+ template: '<dx-button text="Press me" (onClick)="helloWorld()"></dx-button>'
109
+ })
110
+ export class AppComponent {
111
+ helloWorld() {
112
+ alert('Hello world!');
113
+ }
114
+ }
115
+ ```
116
+
117
+ ### <a name="create-application"></a>Create a new Angular Application ###
118
+
119
+ Depending on your requirements you can choose one of the following ways to start:
120
+
121
+ * [Start with SystemJS](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-systemjs.md)
122
+ * [Start with Angular CLI](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-angular-cli.md)
123
+ - [Third-party dependencies registration in Angular CLI 6+](https://github.com/DevExpress/devextreme-angular/blob/master/docs/setup-3rd-party-dependencies.md)
124
+ * [Start with Webpack](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-webpack.md)
125
+ * [Start with Rollup](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-rollup.md)
126
+ * [Start with Ionic 2](https://github.com/DevExpress/devextreme-angular/blob/master/docs/using-ionic2.md)
127
+
128
+ ### <a name="server-side-rendering"></a>Server-side Rendering ###
129
+
130
+ Angular Universal provides [server-side rendering](https://angular.io/guide/universal#angular-universal-server-side-rendering) that significantly reduces the application's loading time. You can use DevExtreme widgets in Angular Universal applications in the same manner as in other Angular apps.
131
+
132
+ **Note: DevExtreme-angular does not support [dynamic theme loading](https://js.devexpress.com/Documentation/Guide/Themes/Predefined_Themes/#Themes_in_DevExtreme_Apps) in the Server-side rendering mode due to technical restrictions. You can only use a single static theme by linking the corresponding CSS file.**
133
+
134
+ You can [create a new Angular Universal app](https://github.com/angular/angular-cli/wiki/stories-universal-rendering#angular-universal-integration) and [add DevExtreme widgets](#add-to-existing-app) to it, or add the Universal module to an existing Angular application with DevExtreme. Use the following command to add the Universal module to an existing app:
135
+
136
+ ```bash
137
+ ng generate universal my-app
138
+ ```
139
+
140
+ See [Angular 5.1 & More Now Available](https://blog.angular.io/angular-5-1-more-now-available-27d372f5eb4e) for more information.
141
+
142
+ [This example](https://github.com/DevExpress/devextreme-examples/tree/18_1/universal-angular) demonstrates the use of DevExtreme Angular controls in an Angular Universal application.
143
+
144
+ #### <a name="cache-requests"></a>Cache Requests on the Server ####
145
+
146
+ DevExtreme-angular supports caching requests on the server in the server-side rendering mode. This avoids repeatedly requesting data from the browser and renders widgets using data that is initially applied when the page is loaded for the first time.
147
+
148
+ To enable caching, import the `DxServerTransferStateModule` module in the module's .ts file (usually *src/app.module.ts*):
149
+
150
+ ```js
151
+ import { DxServerTransferStateModule } from 'devextreme-angular';
152
+
153
+ @NgModule({
154
+ ...
155
+ imports: [
156
+ ...
157
+ DxServerTransferStateModule,
158
+ ...
159
+ ]
160
+ })
161
+ export class AppModule {}
162
+ ```
163
+
164
+ and import the the `ServerTransferStateModule` module in the server module's .ts file (usually *src/app.server.module.ts*):
165
+
166
+ ```js
167
+ import { ServerModule, ServerTransferStateModule } from '@angular/platform-server';
168
+
169
+ @NgModule({
170
+ imports: [
171
+ AppModule,
172
+ ServerModule,
173
+ ServerTransferStateModule,
174
+ ModuleMapLoaderModule
175
+ ],
176
+ bootstrap: [AppComponent],
177
+ })
178
+ ```
179
+
180
+ Also, ensure that the application module is bootstrapped when the document has been loaded (the *main.ts* file should contain the code below). Otherwise, caching does not work correctly.
181
+
182
+ ```js
183
+ document.addEventListener('DOMContentLoaded', () => {
184
+ platformBrowserDynamic().bootstrapModule(AppModule)
185
+ .catch(err => console.log(err));
186
+ });
187
+ ```
188
+
189
+ ### <a name="running-examples"></a>Running the Local Examples ###
190
+
191
+ ```bash
192
+ # clone our repo
193
+ # --depth 1 removes all but one .git commit history
194
+ git clone --depth 1 https://github.com/DevExpress/devextreme-angular.git
195
+
196
+ # change directory to our repo
197
+ cd devextreme-angular
198
+
199
+ # install the repo with npm
200
+ npm install
201
+
202
+ # start the web-server
203
+ npm start
204
+
205
+ ```
206
+
207
+ Navigate to [http://127.0.0.1:8875/examples/](http://127.0.0.1:8875/examples/) in the opened browser window. Explore the **examples** folder of this repository for the examples source code.
208
+
209
+ ### <a name="jquery-integration"></a>Include jQuery integration ###
210
+ Starting with version 17.2, DevExtreme doesn't depend on jQuery. It means that our widgets work without jQuery elements. If you need to use jQuery, you can manually install the jquery npm package and include the jQuery integration as described below:
211
+
212
+ ```bash
213
+ npm install --save jquery
214
+ ```
215
+
216
+ ```js
217
+ import 'devextreme/integration/jquery';
218
+ ```
219
+
220
+ ## <a name="usage-samples"></a>Usage Samples ##
221
+
222
+ ### <a name="static-option"></a>Static String Option Value ###
223
+
224
+ To specify a string widget's option statically
225
+ (the [text](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxButton/Configuration/#text)
226
+ option of dxButton):
227
+
228
+ ```html
229
+ <dx-button text="Simple button"></dx-button>
230
+ ```
231
+
232
+ ### <a name="static-non-string-option"></a>Static Non-string Option Value ###
233
+
234
+ To specify a non-string widget's option statically
235
+ (the [disabled](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxButton/Configuration/#disabled)
236
+ option of dxButton):
237
+
238
+ ```html
239
+ <dx-button [disabled]="false"></dx-button>
240
+ ```
241
+
242
+ ### <a name="event-handling"></a>Event Handling ###
243
+
244
+ To bind the dxButton’s [click](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxButton/Events/#click) event:
245
+
246
+ ```html
247
+ <dx-button (onClick)="handler()"></dx-button>
248
+ ```
249
+
250
+ ### <a name="callback-functions"></a>Callback Functions ###
251
+
252
+ To specify a widget's option using a callback function (the [layer.customize](https://js.devexpress.com/Documentation/ApiReference/Data_Visualization_Widgets/dxVectorMap/Configuration/layers/#customize)
253
+ option of dxVectorMap):
254
+
255
+ ```html
256
+ <dx-vector-map>
257
+ ...
258
+ <dxi-layer
259
+ ...
260
+ [customize]="customizeLayers">
261
+ </dxi-layer>
262
+ </dx-vector-map>
263
+ ```
264
+
265
+ Note that callback functions are executed _outside_ the context of the component, but if the context is important, you can explicitly bind it to the callback function in the constructor.
266
+
267
+ ```js
268
+ constructor() {
269
+ this.customizeLayers = this.customizeLayers.bind(this);
270
+ }
271
+
272
+ customizeLayers(elements) {
273
+ let country = this.myCountry;
274
+ ...
275
+ }
276
+ ```
277
+
278
+ ### <a name="one-way-binding"></a>One-way Option Binding ###
279
+
280
+ If we want changes to the value of ‘bindingProperty’ of the host component to propagate to the
281
+ [value](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxTextBox/Configuration/#value) of the dxTextBox widget,
282
+ a one-way binding approach is used:
283
+
284
+ ```html
285
+ <dx-text-box [value]="bindingProperty"></dx-text-box>
286
+ ```
287
+
288
+ ### <a name="two-way-binding"></a>Two-way Option Binding ###
289
+
290
+ In addition to the one-way binding, we can also perform two-way binding, which propagates changes from the bindingProperty to the widget
291
+ or vice versa from the widget to the bindingProperty:
292
+
293
+ ```html
294
+ <dx-text-box [(value)]="bindingProperty"></dx-text-box>
295
+ ```
296
+
297
+ ### <a name="custom-templates"></a>Custom Templates ###
298
+
299
+ In case you want to customize the rendering of a DevExtreme widget, we support custom templates. For instance, we can specify
300
+ the [itemTemplate](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxList/Configuration/#itemTemplate)
301
+ and [groupTemplate](http://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxList/Configuration/#groupTemplate)
302
+ of the dxList widget as follows:
303
+
304
+ ```html
305
+ <dx-list [grouped]="true" [items]="grouppedItems">
306
+ <div *dxTemplate="let itemData of 'item'; let itemIndex = index">
307
+ {{itemIndex}} - {{itemData.someProperty}}
308
+ </div>
309
+ <div *dxTemplate="let groupData of 'group'">
310
+ {{groupData.someProperty}}
311
+ </div>
312
+ </dx-list>
313
+ ```
314
+ The local 'itemData' and 'groupData' variables (that are declared via the 'let' keyword) expose the corresponding item data object. You can use it to
315
+ render the data where you need inside the template.
316
+
317
+ The 'item' and 'group' names are default template names for the 'itemTemplate' and 'groupTemplate' options of the dxList widget.
318
+
319
+ ### <a name="data-layer"></a>Data Layer ###
320
+
321
+ The DevExtreme framework includes a data layer, which is a set of complementary components that enable you to read and write data.
322
+ For more details please refer to [the documentation on the official website](https://js.devexpress.com/Documentation/Guide/Data_Layer/Data_Layer/).
323
+
324
+ ### <a name="devextreme-utils"></a>DevExtreme Utils ###
325
+
326
+ The DevExtreme provides utils that can be used in different application parts such as widgets and data. For more details please refer to [the documentation on the official website](https://js.devexpress.com/Documentation/ApiReference/Common/utils/).
327
+
328
+ ### <a name="components-with-transcluded-content"></a>Components with Transcluded Content ###
329
+
330
+ In addition to using dxTemplate, it is possible to put the content of the following widgets directly into the markup:
331
+ [dxResizable](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxResizable/),
332
+ [dxScrollView](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxScrollView/),
333
+ [dxValidationGroup](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxValidationGroup/).
334
+ For instance, we can set the content for
335
+ the [dxScrollView](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxScrollView/) widget as shown below:
336
+
337
+ ```html
338
+ <dx-scroll-view>
339
+ <div>Some scrollable content</div>
340
+ </dx-scroll-view>
341
+ ```
342
+
343
+ ### <a name="angular-forms"></a>Angular Forms ###
344
+
345
+ The DevExtreme Angular editors support the 'ngModel' binding as well as the 'formControlName' directive, which are necessary for the
346
+ [Angular forms](https://angular.io/docs/ts/latest/guide/forms.html) features.
347
+
348
+ ```html
349
+ <form [formGroup]="form">
350
+ <dx-text-box
351
+ name="email"
352
+ [(ngModel)]="email"
353
+ [isValid]="emailControl.valid || emailControl.pristine"
354
+ [validationError]="{ message: 'Email is invalid'}">
355
+ </dx-text-box>
356
+ </form>
357
+ ```
358
+
359
+ ```js
360
+ @Component({
361
+ selector: 'my-app',
362
+ templateUrl: 'app/app.component.html'
363
+ })
364
+ export class AppComponent implements OnInit {
365
+ email: string;
366
+ emailControl: AbstractControl;
367
+ form: FormGroup;
368
+ ngOnInit() {
369
+ this.form = new FormGroup({
370
+ email: new FormControl('', Validators.compose([Validators.required, Validators.email]))
371
+ });
372
+ this.emailControl = this.form.controls['email'];
373
+ }
374
+ }
375
+ ```
376
+
377
+ ### <a name="devextreme-validation-features"></a>Using DevExtreme Validation Features ###
378
+
379
+ You can use the [built-in validators](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxValidator/Validation_Rules/),
380
+ validation summary and other DevExtreme validation features with Angular DevExtreme editors.
381
+
382
+
383
+ ```html
384
+ <dx-validation-group>
385
+
386
+ <dx-text-box [(value)]="email">
387
+ <dx-validator [validationRules]="validationRules.email"></dx-validator>
388
+ </dx-text-box>
389
+ <dx-text-box [(value)]="password" mode="password">
390
+ <dx-validator [validationRules]="validationRules.password"></dx-validator>
391
+ </dx-text-box>
392
+
393
+ <dx-validation-summary></dx-validation-summary>
394
+
395
+ <dx-button (onClick)="validate($event)" text="Submit"></dx-button>
396
+
397
+ </dx-validation-group>
398
+ ```
399
+
400
+ ```js
401
+ @Component({
402
+ selector: 'my-app',
403
+ templateUrl: 'app/app.component.html'
404
+ })
405
+ export class AppComponent {
406
+ email: string;
407
+ password: string;
408
+ validationRules = {
409
+ email: [
410
+ { type: 'required', message: 'Email is required.' },
411
+ { type: 'email', message: 'Email is invalid.' }
412
+ ],
413
+ password: [
414
+ { type: 'required', message: 'Email is required.' }
415
+ ]
416
+ };
417
+ validate(params) {
418
+ let result = params.validationGroup.validate();
419
+ if (result.isValid) {
420
+ // form data is valid
421
+ // params.validationGroup.reset();
422
+ }
423
+ }
424
+ }
425
+ ```
426
+
427
+ ### <a name="configuration-components"></a>Configuration Components ###
428
+
429
+ You can use `dxo-` ('o' is a contraction of 'option') prefixed components to configure complex nested options for widgets.
430
+ The following example demonstrates how to configure the [tooltip](https://js.devexpress.com/Documentation/ApiReference/Data_Visualization_Widgets/dxTreeMap/Configuration/tooltip/) option of the dxTreeMap widget:
431
+
432
+ ```html
433
+ <dx-tree-map [dataSource]="treeData">
434
+ <dxo-tooltip [enabled]="showTooltip" format="thousands"></dxo-tooltip>
435
+ </dx-tree-map>
436
+
437
+ <dx-button text="Toggle tooltip" (onClick)="toggleTooltip()"></dx-button>
438
+ ```
439
+
440
+ ```js
441
+ @Component({
442
+ selector: 'my-app',
443
+ templateUrl: 'app/app.component.html'
444
+ })
445
+ export class AppComponent {
446
+ treeData = ...;
447
+ showTooltip = false;
448
+ toggleTooltip() {
449
+ this.showTooltip = !this.showTooltip;
450
+ }
451
+ }
452
+ ```
453
+
454
+ You can also use `dxi-` ('i' is a contraction of 'item') prefixed components to configure complex collection options for widgets.
455
+ The following example demonstrates how to configure the [columns](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/) option of the dxDataGrid widget:
456
+
457
+ ```html
458
+ <dx-data-grid [dataSource]="data">
459
+ <dxi-column dataField="firstName" caption="First Name"></dxi-column>
460
+ <dxi-column dataField="lastName" caption="Last Name" [visible]="showLastName"></dxi-column>
461
+ </dx-data-grid>
462
+
463
+ <dx-button text="Toggle the 'Last Name' column" (onClick)="toggleLastName()"></dx-button>
464
+ ```
465
+
466
+ ```js
467
+ @Component({
468
+ selector: 'my-app',
469
+ templateUrl: 'app/app.component.html'
470
+ })
471
+ export class AppComponent {
472
+ data = ...;
473
+ showLastName = false;
474
+ toggleLastName() {
475
+ this.showLastName = !this.showLastName;
476
+ }
477
+ }
478
+ ```
479
+
480
+ To configure options that can accept a configuration object or an array of configuration objects, use `dxi-` prefixed components.
481
+ The following example demonstrates how to configure the [valueAxis](https://js.devexpress.com/Documentation/ApiReference/Data_Visualization_Widgets/dxChart/Configuration/valueAxis/) option of the dxChart widget:
482
+
483
+ ```html
484
+ <dx-chart [dataSource]="data">
485
+ <dxi-series valueField="value" argumentField="argument"></dxi-series>
486
+ <dxi-value-axis>
487
+ <dxo-label format="millions"></dxo-label>
488
+ </dxi-value-axis>
489
+ </dx-chart>
490
+ ```
491
+
492
+ ```js
493
+ @Component({
494
+ selector: 'my-app',
495
+ templateUrl: 'app/app.component.html'
496
+ })
497
+ export class AppComponent {
498
+ data = ...;
499
+ }
500
+ ```
501
+
502
+ It is possible to specify an item template inside the `dxi-` prefixed components and use Angular
503
+ [structural directives](https://angular.io/docs/ts/latest/guide/structural-directives.html) such as ngFor. Note that
504
+ the available item properties are described in the [Default Item Template](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxList/Default_Item_Template/)
505
+ section of a corresponding widget documentation reference.
506
+
507
+ ```html
508
+ <dx-list>
509
+ <dxi-item>
510
+ <h1>Items available</h1>
511
+ </dxi-item>
512
+ <dxi-item *ngFor="let item of listItems" [badge]="item.badge">
513
+ <h2>{{item.text}}</h2>
514
+ </dxi-item>
515
+ </dx-list>
516
+ ```
517
+
518
+ ```js
519
+ @Component({
520
+ selector: 'my-app',
521
+ templateUrl: 'app/app.component.html'
522
+ })
523
+ export class AppComponent {
524
+ listItems = [
525
+ {
526
+ text: 'Cars',
527
+ badge: '12'
528
+ },
529
+ {
530
+ text: 'Bikes',
531
+ badge: '5'
532
+ }
533
+ ];
534
+ }
535
+ ```
536
+
537
+ If your item template contains some *nested* components, declare it using the parameterless `dxTemplate` structural directive as follows:
538
+
539
+ ```html
540
+ <dx-list>
541
+ <dxi-item>
542
+ <div *dxTemplate>
543
+ <dx-button text="I'm a nested child component"></dx-button>
544
+ </div>
545
+ </dxi-item>
546
+ </dx-list>
547
+ ```
548
+
549
+ Angular has a built-in `template` directive. To define the `template` property of the configuration component (for example, `dxo-master-detail`), use the following code:
550
+ ```html
551
+ <dxo-master-detail [template]="'masterDetail'"></dxo-master-detail>
552
+ ```
553
+
554
+ Note that some options with an object type are not implemented as nested components - for example,
555
+ [editorOptions of dxDataGrid](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/#editorOptions), [editorOptions of dxForm](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxForm/Item_Types/SimpleItem/#editorOptions), [the widget option of dxToolbar](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxToolbar/Default_Item_Template/#options).
556
+
557
+ ### <a name="accessing-widget-instance"></a>Accessing a DevExtreme Widget Instance ###
558
+
559
+ You can access a DevExtreme widget instance using the `@ViewChild` or `@ViewChildren` decorator (depending on whether you are getting just one or several instances of one widget) and the component's
560
+ 'instance' property. Both decorators accept a component name or a [template reference variable](https://angular.io/guide/template-syntax#template-reference-variables--var-). In the example below, the
561
+ [refresh](https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Methods/#refresh)
562
+ method of the dxDataGrid is called:
563
+
564
+ ```js
565
+ import { Component, ViewChild } from '@angular/core';
566
+ import { DxDataGridComponent } from "devextreme-angular";
567
+
568
+ @Component({
569
+ selector: 'my-app',
570
+ template: `
571
+ <dx-data-grid #targetDataGrid [dataSource]="dataSource"></dx-data-grid>
572
+ <dx-button text="Refresh data" (onClick)="refresh()"></dx-button>
573
+ `
574
+ })
575
+ export class AppComponent implements OnChanges {
576
+ @ViewChild(DxDataGridComponent) dataGrid:DxDataGridComponent
577
+ // or
578
+ // @ViewChild("targetDataGrid") dataGrid: DxDataGridComponent
579
+ refresh() {
580
+ this.dataGrid.instance.refresh();
581
+ }
582
+ }
583
+ ```
584
+
585
+ To access a DevExtreme widget instance in markup, you can use the same template reference variables. The following example demonstrates how you can get a dxSelectBox value in the template.
586
+
587
+ ```html
588
+ <dx-select-box #selectbox [items]="items"></dx-select-box>
589
+ {{selectbox.value}}
590
+ ```
591
+
592
+ ### <a name="angular-change-detection"></a>Angular Change Detection ###
593
+
594
+ By default, in Angular, options changes are checked on each user action.
595
+ If you bind a widget option to this function, it should return a static object.
596
+ Otherwise, Angular considers that the option is constantly changed after each user action.
597
+ Alternatively, you can change the default behavior and set the [ChangeDetectionStrategy](https://angular.io/docs/ts/latest/api/core/index/ChangeDetectionStrategy-enum.html) component option to "OnPush".
598
+
599
+ ```js
600
+ import {Component, ChangeDetectionStrategy} from '@angular/core';
601
+
602
+ @Component({
603
+ selector: 'my-app',
604
+ ....
605
+ changeDetection: ChangeDetectionStrategy.OnPush
606
+ })
607
+ ```
608
+
609
+ ## <a name="demos"></a>Demos ##
610
+
611
+ * [GolfClub real-world application](https://devexpress.github.io/golfclub/) ([sources](https://github.com/DevExpress/golfclub))
612
+ * [Lots of feature-based examples](https://js.devexpress.com/Demos/WidgetsGallery/Demo/Data_Grid/LocalDataSource/Angular/Light/)
613
+
614
+ ## <a name="api-reference"></a>API Reference ##
615
+
616
+ DevExtreme Angular components mirror
617
+ [DevExtreme JavaScript API](http://js.devexpress.com/Documentation/ApiReference/) but use
618
+ [Angular syntax](#usage-samples) for specifying widget options, subscribing to events and custom templates declaration.
619
+
620
+ ## <a name="bundle-optimization"></a>Bundle Size Optimization ##
621
+
622
+ ### Bundlers with Tree Shaking Support ###
623
+
624
+ *Tree shaking* can greatly reduce the downloaded size of the application by removing unused portions of both source and library code. There are a number of
625
+ bundlers with tree shaking support, such as Webpack 2, Rollup, SystemJS Bundler, etc. Due to specifics of the tree shaking algorithm, your project typescript sources should
626
+ be prepared accordingly to make tree shaking available. This preparations are [performed by the Angular Compiler](https://angular.io/docs/ts/latest/cookbook/aot-compiler.html#!#tree-shaking).
627
+ You can follow one of the existing guides to configure tree shaking with your bundler ([Webpack 2](http://blog.rangle.io/optimize-your-angular2-application-with-tree-shaking/),
628
+ [Angular CLI](https://github.com/angular/angular-cli#bundling),
629
+ [Rollup](https://angular.io/docs/ts/latest/cookbook/aot-compiler.html#!#tree-shaking)).
630
+
631
+ To make it work with DevExtreme Angular package, you just need to import only the modules required in your application, not the whole DevExtremeModule. For instance,
632
+ you can import only DxButtonModule as follows:
633
+
634
+ ```js
635
+ import { DxButtonModule } from 'devextreme-angular';
636
+ ```
637
+
638
+ Note, AOT Compilation also decreases a bundle size by precompiling your HTML templates. So, the markup and the template compiler are not included into the final bundle.
639
+
640
+ ### Bundlers without Tree Shaking Support ###
641
+
642
+ If you are not going to configure tree shaking, you can optimize your bundle size by using imports from specific modules, not from the main 'devextreme-angular' module. You can do this
643
+ as follows:
644
+
645
+ ```js
646
+ import { DxButtonModule } from 'devextreme-angular/ui/button';
647
+ ```
648
+
649
+ ## <a name="license"></a>License ##
650
+
651
+ Familiarize yourself with the
652
+ [DevExtreme License](https://js.devexpress.com/Licensing/).
653
+ [Free trial is available!](http://js.devexpress.com/Buy/)
654
+
655
+ **DevExtreme Angular components are released as a MIT-licensed (free and open-source) add-on to DevExtreme.**
656
+
657
+ ## <a name="support-feedback"></a>Support & Feedback ##
658
+
659
+ * For general Angular topics, follow [these guidelines](https://github.com/angular/angular/blob/master/CONTRIBUTING.md)
660
+ * For questions regarding DevExtreme libraries and JavaScript API, use [DevExpress Support Center](https://www.devexpress.com/Support/Center)
661
+ * For DevExtreme Angular integration bugs, questions and suggestions, use the [GitHub issue tracker](https://github.com/DevExpress/devextreme-angular/issues)
662
+
663
+ ## <a name="version-history"></a>Version history ###
664
+
665
+ | DevExtreme | Angular |
666
+ | ---------- | ----------------|
667
+ | v18.1+ <br/> v18.2+ | v5.0 - v7.0+ |
668
+ | v17.1+ <br/> v17.2+ | v2.4 - v5.0+ |
669
669