igniteui-webcomponents 6.1.1 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE +1 -1
  3. package/README.md +13 -1
  4. package/animations/player.d.ts +1 -1
  5. package/animations/player.js.map +1 -1
  6. package/components/calendar/calendar.d.ts +1 -0
  7. package/components/calendar/calendar.js +5 -8
  8. package/components/calendar/calendar.js.map +1 -1
  9. package/components/calendar/themes/calendar.base.css.js +1 -1
  10. package/components/calendar/themes/calendar.base.css.js.map +1 -1
  11. package/components/calendar/themes/dark/calendar.bootstrap.css.js +1 -1
  12. package/components/calendar/themes/dark/calendar.bootstrap.css.js.map +1 -1
  13. package/components/calendar/themes/dark/calendar.fluent.css.js +1 -1
  14. package/components/calendar/themes/dark/calendar.fluent.css.js.map +1 -1
  15. package/components/calendar/themes/dark/calendar.indigo.css.js +1 -1
  16. package/components/calendar/themes/dark/calendar.indigo.css.js.map +1 -1
  17. package/components/calendar/themes/dark/calendar.material.css.js +1 -1
  18. package/components/calendar/themes/dark/calendar.material.css.js.map +1 -1
  19. package/components/calendar/themes/light/calendar.bootstrap.css.js +1 -1
  20. package/components/calendar/themes/light/calendar.bootstrap.css.js.map +1 -1
  21. package/components/calendar/themes/light/calendar.fluent.css.js +1 -1
  22. package/components/calendar/themes/light/calendar.fluent.css.js.map +1 -1
  23. package/components/calendar/themes/light/calendar.indigo.css.js +1 -1
  24. package/components/calendar/themes/light/calendar.indigo.css.js.map +1 -1
  25. package/components/calendar/themes/light/calendar.material.css.js +1 -1
  26. package/components/calendar/themes/light/calendar.material.css.js.map +1 -1
  27. package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js +1 -1
  28. package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js.map +1 -1
  29. package/components/calendar/themes/shared/fluent/calendar.fluent.css.js +1 -1
  30. package/components/calendar/themes/shared/fluent/calendar.fluent.css.js.map +1 -1
  31. package/components/calendar/themes/shared/indigo/calendar.indigo.css.js +1 -1
  32. package/components/calendar/themes/shared/indigo/calendar.indigo.css.js.map +1 -1
  33. package/components/calendar/themes/shared/material/calendar.material.css.js +1 -1
  34. package/components/calendar/themes/shared/material/calendar.material.css.js.map +1 -1
  35. package/components/card/themes/content.js +7 -0
  36. package/components/card/themes/content.js.map +1 -1
  37. package/components/card/themes/shared/content/card.content.indigo.css.d.ts +1 -0
  38. package/components/card/themes/shared/content/card.content.indigo.css.js +3 -0
  39. package/components/card/themes/shared/content/card.content.indigo.css.js.map +1 -0
  40. package/components/carousel/carousel-indicator.d.ts +1 -1
  41. package/components/carousel/carousel-indicator.js.map +1 -1
  42. package/components/carousel/carousel-slide.d.ts +3 -3
  43. package/components/carousel/carousel-slide.js +7 -13
  44. package/components/carousel/carousel-slide.js.map +1 -1
  45. package/components/carousel/carousel.d.ts +41 -42
  46. package/components/carousel/carousel.js +173 -187
  47. package/components/carousel/carousel.js.map +1 -1
  48. package/components/checkbox/checkbox-base.d.ts +3 -5
  49. package/components/checkbox/checkbox-base.js +15 -21
  50. package/components/checkbox/checkbox-base.js.map +1 -1
  51. package/components/checkbox/checkbox.d.ts +3 -4
  52. package/components/checkbox/checkbox.js +18 -17
  53. package/components/checkbox/checkbox.js.map +1 -1
  54. package/components/checkbox/switch.d.ts +0 -1
  55. package/components/checkbox/switch.js +7 -10
  56. package/components/checkbox/switch.js.map +1 -1
  57. package/components/checkbox/themes/dark/checkbox/checkbox.bootstrap.css.js +1 -1
  58. package/components/checkbox/themes/dark/checkbox/checkbox.bootstrap.css.js.map +1 -1
  59. package/components/checkbox/themes/dark/checkbox/checkbox.fluent.css.js +1 -1
  60. package/components/checkbox/themes/dark/checkbox/checkbox.fluent.css.js.map +1 -1
  61. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
  62. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
  63. package/components/checkbox/themes/shared/checkbox/checkbox.common.css.js +1 -1
  64. package/components/checkbox/themes/shared/checkbox/checkbox.common.css.js.map +1 -1
  65. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
  66. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
  67. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js +1 -1
  68. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js.map +1 -1
  69. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
  70. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
  71. package/components/chip/chip.d.ts +11 -11
  72. package/components/chip/chip.js +61 -65
  73. package/components/chip/chip.js.map +1 -1
  74. package/components/combo/combo.d.ts +3 -3
  75. package/components/combo/combo.js +12 -6
  76. package/components/combo/combo.js.map +1 -1
  77. package/components/combo/themes/dark/combo.bootstrap.css.js +1 -1
  78. package/components/combo/themes/dark/combo.bootstrap.css.js.map +1 -1
  79. package/components/combo/themes/light/combo.bootstrap.css.js +1 -1
  80. package/components/combo/themes/light/combo.bootstrap.css.js.map +1 -1
  81. package/components/combo/themes/light/combo.shared.css.js +1 -1
  82. package/components/combo/themes/light/combo.shared.css.js.map +1 -1
  83. package/components/combo/themes/shared/combo.common.css.js +1 -1
  84. package/components/combo/themes/shared/combo.common.css.js.map +1 -1
  85. package/components/combo/themes/shared/combo.indigo.css.js +1 -1
  86. package/components/combo/themes/shared/combo.indigo.css.js.map +1 -1
  87. package/components/combo/themes/shared/combo.material.css.js +1 -1
  88. package/components/combo/themes/shared/combo.material.css.js.map +1 -1
  89. package/components/common/controllers/internals.d.ts +66 -2
  90. package/components/common/controllers/internals.js +21 -0
  91. package/components/common/controllers/internals.js.map +1 -1
  92. package/components/common/controllers/slot.d.ts +87 -0
  93. package/components/common/controllers/slot.js +75 -0
  94. package/components/common/controllers/slot.js.map +1 -0
  95. package/components/common/mixins/alert.d.ts +7 -8
  96. package/components/common/mixins/alert.js +23 -34
  97. package/components/common/mixins/alert.js.map +1 -1
  98. package/components/common/mixins/forms/associated.d.ts +1 -1
  99. package/components/common/mixins/forms/associated.js +91 -36
  100. package/components/common/mixins/forms/associated.js.map +1 -1
  101. package/components/common/mixins/forms/form-transformers.d.ts +21 -0
  102. package/components/common/mixins/forms/form-transformers.js +64 -0
  103. package/components/common/mixins/forms/form-transformers.js.map +1 -0
  104. package/components/common/mixins/forms/form-value.d.ts +7 -36
  105. package/components/common/mixins/forms/form-value.js +2 -64
  106. package/components/common/mixins/forms/form-value.js.map +1 -1
  107. package/components/common/mixins/forms/types.d.ts +19 -10
  108. package/components/common/mixins/forms/types.js +2 -1
  109. package/components/common/mixins/forms/types.js.map +1 -1
  110. package/components/common/util.d.ts +1 -0
  111. package/components/common/util.js +3 -0
  112. package/components/common/util.js.map +1 -1
  113. package/components/date-picker/date-picker.d.ts +1 -3
  114. package/components/date-picker/date-picker.js +11 -13
  115. package/components/date-picker/date-picker.js.map +1 -1
  116. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js +1 -1
  117. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js.map +1 -1
  118. package/components/date-picker/themes/dark/date-picker.fluent.css.js +1 -1
  119. package/components/date-picker/themes/dark/date-picker.fluent.css.js.map +1 -1
  120. package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
  121. package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
  122. package/components/date-picker/themes/dark/date-picker.material.css.js +1 -1
  123. package/components/date-picker/themes/dark/date-picker.material.css.js.map +1 -1
  124. package/components/date-picker/themes/light/date-picker.bootstrap.css.js +1 -1
  125. package/components/date-picker/themes/light/date-picker.bootstrap.css.js.map +1 -1
  126. package/components/date-picker/themes/light/date-picker.fluent.css.js +1 -1
  127. package/components/date-picker/themes/light/date-picker.fluent.css.js.map +1 -1
  128. package/components/date-picker/themes/light/date-picker.indigo.css.js +1 -1
  129. package/components/date-picker/themes/light/date-picker.indigo.css.js.map +1 -1
  130. package/components/date-picker/themes/light/date-picker.material.css.js +1 -1
  131. package/components/date-picker/themes/light/date-picker.material.css.js.map +1 -1
  132. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
  133. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
  134. package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
  135. package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
  136. package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
  137. package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
  138. package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
  139. package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
  140. package/components/date-picker/themes/shared/date-picker.material.css.js +1 -1
  141. package/components/date-picker/themes/shared/date-picker.material.css.js.map +1 -1
  142. package/components/date-range-picker/date-range-picker.d.ts +1 -3
  143. package/components/date-range-picker/date-range-picker.js +19 -26
  144. package/components/date-range-picker/date-range-picker.js.map +1 -1
  145. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js +1 -1
  146. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js.map +1 -1
  147. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js +1 -1
  148. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js.map +1 -1
  149. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +1 -1
  150. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -1
  151. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js +1 -1
  152. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js.map +1 -1
  153. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +1 -1
  154. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -1
  155. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +1 -1
  156. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -1
  157. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +1 -1
  158. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -1
  159. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +1 -1
  160. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -1
  161. package/components/date-range-picker/themes/shared/date-range-picker.material.css.js +1 -1
  162. package/components/date-range-picker/themes/shared/date-range-picker.material.css.js.map +1 -1
  163. package/components/date-time-input/date-time-input.d.ts +1 -2
  164. package/components/date-time-input/date-time-input.js +7 -7
  165. package/components/date-time-input/date-time-input.js.map +1 -1
  166. package/components/dialog/dialog.d.ts +23 -25
  167. package/components/dialog/dialog.js +108 -115
  168. package/components/dialog/dialog.js.map +1 -1
  169. package/components/dialog/themes/dark/dialog.bootstrap.css.js +1 -1
  170. package/components/dialog/themes/dark/dialog.bootstrap.css.js.map +1 -1
  171. package/components/expansion-panel/expansion-panel.d.ts +12 -14
  172. package/components/expansion-panel/expansion-panel.js +43 -56
  173. package/components/expansion-panel/expansion-panel.js.map +1 -1
  174. package/components/file-input/file-input.d.ts +1 -3
  175. package/components/file-input/file-input.js +6 -11
  176. package/components/file-input/file-input.js.map +1 -1
  177. package/components/file-input/themes/dark/file-input.bootstrap.css.d.ts +1 -0
  178. package/components/file-input/themes/dark/file-input.bootstrap.css.js +3 -0
  179. package/components/file-input/themes/dark/file-input.bootstrap.css.js.map +1 -0
  180. package/components/file-input/themes/dark/file-input.fluent.css.d.ts +1 -0
  181. package/components/file-input/themes/dark/file-input.fluent.css.js +3 -0
  182. package/components/file-input/themes/dark/file-input.fluent.css.js.map +1 -0
  183. package/components/file-input/themes/dark/file-input.indigo.css.d.ts +1 -0
  184. package/components/file-input/themes/dark/file-input.indigo.css.js +3 -0
  185. package/components/file-input/themes/dark/file-input.indigo.css.js.map +1 -0
  186. package/components/file-input/themes/dark/file-input.material.css.d.ts +1 -0
  187. package/components/file-input/themes/dark/file-input.material.css.js +3 -0
  188. package/components/file-input/themes/dark/file-input.material.css.js.map +1 -0
  189. package/components/file-input/themes/file-input.base.css.js +1 -1
  190. package/components/file-input/themes/file-input.base.css.js.map +1 -1
  191. package/components/file-input/themes/light/file-input.bootstrap.css.d.ts +1 -0
  192. package/components/file-input/themes/light/file-input.bootstrap.css.js +3 -0
  193. package/components/file-input/themes/light/file-input.bootstrap.css.js.map +1 -0
  194. package/components/file-input/themes/light/file-input.fluent.css.d.ts +1 -0
  195. package/components/file-input/themes/light/file-input.fluent.css.js +3 -0
  196. package/components/file-input/themes/light/file-input.fluent.css.js.map +1 -0
  197. package/components/file-input/themes/light/file-input.indigo.css.d.ts +1 -0
  198. package/components/file-input/themes/light/file-input.indigo.css.js +3 -0
  199. package/components/file-input/themes/light/file-input.indigo.css.js.map +1 -0
  200. package/components/file-input/themes/light/file-input.material.css.d.ts +1 -0
  201. package/components/file-input/themes/light/file-input.material.css.js +3 -0
  202. package/components/file-input/themes/light/file-input.material.css.js.map +1 -0
  203. package/components/file-input/themes/light/file-input.shared.css.d.ts +1 -0
  204. package/components/file-input/themes/light/file-input.shared.css.js +3 -0
  205. package/components/file-input/themes/light/file-input.shared.css.js.map +1 -0
  206. package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
  207. package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
  208. package/components/file-input/themes/shared/file-input.indigo.css.js +1 -1
  209. package/components/file-input/themes/shared/file-input.indigo.css.js.map +1 -1
  210. package/components/file-input/themes/shared/file-input.material.css.js +1 -1
  211. package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
  212. package/components/file-input/themes/themes.js +19 -0
  213. package/components/file-input/themes/themes.js.map +1 -1
  214. package/components/input/input.d.ts +1 -4
  215. package/components/input/input.js +7 -12
  216. package/components/input/input.js.map +1 -1
  217. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  218. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  219. package/components/input/themes/shared/input.common.css.js +1 -1
  220. package/components/input/themes/shared/input.common.css.js.map +1 -1
  221. package/components/input/themes/shared/input.fluent.css.js +1 -1
  222. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  223. package/components/input/themes/shared/input.indigo.css.js +1 -1
  224. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  225. package/components/input/themes/shared/input.material.css.js +1 -1
  226. package/components/input/themes/shared/input.material.css.js.map +1 -1
  227. package/components/mask-input/mask-input-base.js +1 -0
  228. package/components/mask-input/mask-input-base.js.map +1 -1
  229. package/components/mask-input/mask-input.d.ts +2 -3
  230. package/components/mask-input/mask-input.js +5 -8
  231. package/components/mask-input/mask-input.js.map +1 -1
  232. package/components/nav-drawer/nav-drawer-item.d.ts +3 -4
  233. package/components/nav-drawer/nav-drawer-item.js +15 -18
  234. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  235. package/components/nav-drawer/nav-drawer.d.ts +1 -2
  236. package/components/nav-drawer/nav-drawer.js +9 -11
  237. package/components/nav-drawer/nav-drawer.js.map +1 -1
  238. package/components/nav-drawer/themes/container.base.css.js +1 -1
  239. package/components/nav-drawer/themes/container.base.css.js.map +1 -1
  240. package/components/nav-drawer/themes/shared/container/nav-drawer.common.css.js +1 -1
  241. package/components/nav-drawer/themes/shared/container/nav-drawer.common.css.js.map +1 -1
  242. package/components/popover/popover.d.ts +17 -16
  243. package/components/popover/popover.js +81 -91
  244. package/components/popover/popover.js.map +1 -1
  245. package/components/progress/base.d.ts +8 -8
  246. package/components/progress/base.js +19 -23
  247. package/components/progress/base.js.map +1 -1
  248. package/components/progress/circular-gradient.js.map +1 -1
  249. package/components/progress/circular-progress.d.ts +3 -4
  250. package/components/progress/circular-progress.js +15 -18
  251. package/components/progress/circular-progress.js.map +1 -1
  252. package/components/progress/linear-progress.d.ts +1 -0
  253. package/components/progress/linear-progress.js +5 -1
  254. package/components/progress/linear-progress.js.map +1 -1
  255. package/components/radio/radio.d.ts +3 -5
  256. package/components/radio/radio.js +33 -31
  257. package/components/radio/radio.js.map +1 -1
  258. package/components/radio/themes/dark/radio.fluent.css.js +1 -1
  259. package/components/radio/themes/dark/radio.fluent.css.js.map +1 -1
  260. package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
  261. package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
  262. package/components/radio/themes/shared/radio.common.css.js +1 -1
  263. package/components/radio/themes/shared/radio.common.css.js.map +1 -1
  264. package/components/radio/themes/shared/radio.fluent.css.js +1 -1
  265. package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
  266. package/components/radio/themes/shared/radio.indigo.css.js +1 -1
  267. package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
  268. package/components/radio/themes/shared/radio.material.css.js +1 -1
  269. package/components/radio/themes/shared/radio.material.css.js.map +1 -1
  270. package/components/radio-group/radio-group.d.ts +4 -4
  271. package/components/radio-group/radio-group.js +24 -21
  272. package/components/radio-group/radio-group.js.map +1 -1
  273. package/components/rating/rating.d.ts +1 -2
  274. package/components/rating/rating.js +4 -3
  275. package/components/rating/rating.js.map +1 -1
  276. package/components/select/select.d.ts +35 -38
  277. package/components/select/select.js +138 -146
  278. package/components/select/select.js.map +1 -1
  279. package/components/select/themes/shared/select.bootstrap.css.js +1 -1
  280. package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
  281. package/components/select/themes/shared/select.common.css.js +1 -1
  282. package/components/select/themes/shared/select.common.css.js.map +1 -1
  283. package/components/select/themes/shared/select.fluent.css.js +1 -1
  284. package/components/select/themes/shared/select.fluent.css.js.map +1 -1
  285. package/components/select/themes/shared/select.indigo.css.js +1 -1
  286. package/components/select/themes/shared/select.indigo.css.js.map +1 -1
  287. package/components/select/themes/shared/select.material.css.js +1 -1
  288. package/components/select/themes/shared/select.material.css.js.map +1 -1
  289. package/components/slider/slider-label.js.map +1 -1
  290. package/components/slider/slider.d.ts +1 -2
  291. package/components/slider/slider.js +5 -2
  292. package/components/slider/slider.js.map +1 -1
  293. package/components/snackbar/snackbar.d.ts +3 -5
  294. package/components/snackbar/snackbar.js +5 -5
  295. package/components/snackbar/snackbar.js.map +1 -1
  296. package/components/stepper/stepper.d.ts +1 -0
  297. package/components/stepper/stepper.js +9 -0
  298. package/components/stepper/stepper.js.map +1 -1
  299. package/components/textarea/textarea.d.ts +13 -20
  300. package/components/textarea/textarea.js +66 -90
  301. package/components/textarea/textarea.js.map +1 -1
  302. package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
  303. package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
  304. package/components/textarea/themes/shared/textarea.common.css.js +1 -1
  305. package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
  306. package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
  307. package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
  308. package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
  309. package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
  310. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  311. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  312. package/components/tile-manager/position.js +2 -1
  313. package/components/tile-manager/position.js.map +1 -1
  314. package/components/tile-manager/tile.d.ts +8 -12
  315. package/components/tile-manager/tile.js +16 -37
  316. package/components/tile-manager/tile.js.map +1 -1
  317. package/components/toast/toast.d.ts +1 -2
  318. package/components/toast/toast.js +1 -1
  319. package/components/toast/toast.js.map +1 -1
  320. package/components/validation-container/validation-container.d.ts +9 -6
  321. package/components/validation-container/validation-container.js +56 -38
  322. package/components/validation-container/validation-container.js.map +1 -1
  323. package/custom-elements.json +9595 -6648
  324. package/igniteui-webcomponents.css-data.json +1 -1
  325. package/igniteui-webcomponents.html-data.json +1 -1
  326. package/package.json +1 -1
  327. package/web-types.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { eventOptions, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\n\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport {\n createFormValueState,\n defaultDateTimeTransformers,\n type FormValueOf,\n} from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport type { IgcInputComponentEventMap } from '../input/input-base.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskRange,\n} from '../mask-input/mask-input-base.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n type DatePartInfo,\n DateParts,\n DateTimeUtil,\n} from './date-util.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport interface IgcDateTimeInputComponentEventMap\n extends Omit<IgcInputComponentEventMap, 'igcChange'> {\n igcChange: CustomEvent<Date | null>;\n}\n\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcDateTimeInputComponent extends EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n AbstractConstructor<IgcMaskInputBaseComponent>\n>(IgcMaskInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override readonly _formValue: FormValueOf<Date | null> =\n createFormValueState(this, {\n initialValue: null,\n transformers: defaultDateTimeTransformers,\n });\n\n protected _defaultMask!: string;\n private _oldValue: Date | null = null;\n private _min: Date | null = null;\n private _max: Date | null = null;\n\n private _inputDateParts!: DatePartInfo[];\n private _inputFormat!: string;\n private _datePartDeltas: DatePartDeltas = {\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n };\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._defaultMask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this.setMask(val);\n this._inputFormat = val;\n if (this.value) {\n this.updateMask();\n }\n }\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this.updateMask();\n this._validate();\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._updateValidity();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._updateValidity();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the input format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public displayFormat!: string;\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta!: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * The locale settings used to display the value.\n * @attr\n */\n @property()\n public locale = 'en';\n\n @watch('locale', { waitUntilFirstUpdate: true })\n protected setDefaultMask(): void {\n if (!this._inputFormat) {\n this.updateDefaultMask();\n this.setMask(this._defaultMask);\n }\n\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('displayFormat', { waitUntilFirstUpdate: true })\n protected setDisplayFormat(): void {\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('prompt', { waitUntilFirstUpdate: true })\n protected promptChange(): void {\n if (!this.prompt) {\n this.prompt = this.parser.prompt;\n } else {\n this.parser.prompt = this.prompt;\n }\n }\n\n protected get hasDateParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n\n return parts.some(\n (p) =>\n p.type === DateParts.Date ||\n p.type === DateParts.Month ||\n p.type === DateParts.Year\n );\n }\n\n protected get hasTimeParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n return parts.some(\n (p) =>\n p.type === DateParts.Hours ||\n p.type === DateParts.Minutes ||\n p.type === DateParts.Seconds\n );\n }\n\n private get targetDatePart(): DatePart | undefined {\n let result: DatePart | undefined;\n\n if (this.focused) {\n const partType = this._inputDateParts.find(\n (p) =>\n p.start <= this.inputSelection.start &&\n this.inputSelection.start <= p.end &&\n p.type !== DateParts.Literal\n )?.type as string as DatePart;\n\n if (partType) {\n result = partType;\n }\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Date)) {\n result = DatePart.Date;\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Hours)) {\n result = DatePart.Hours;\n } else {\n result = this._inputDateParts[0].type as string as DatePart;\n }\n\n return result;\n }\n\n private get datePartDeltas(): DatePartDeltas {\n return Object.assign({}, this._datePartDeltas, this.spinDelta);\n }\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { preventDefault: true, triggers: ['keydownRepeat'] },\n })\n .set([ctrlKey, ';'], this.setToday)\n .set(arrowUp, this.keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this.keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this.navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this.navigateParts.bind(this, 1));\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.updateDefaultMask();\n this.setMask(this.inputFormat);\n this._updateValidity();\n if (this.value) {\n this.updateMask();\n }\n }\n\n /** Increments a date/time portion. */\n public stepUp(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this.inputSelection;\n const newValue = this.trySpinValue(targetPart, delta);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Decrements a date/time portion. */\n public stepDown(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this.inputSelection;\n const newValue = this.trySpinValue(targetPart, delta, true);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Clears the input element of user input. */\n public clear(): void {\n this.maskedValue = '';\n this.value = null;\n }\n\n protected setToday() {\n this.value = new Date();\n this.handleInput();\n }\n\n protected updateMask() {\n if (this.focused) {\n this.maskedValue = this.getMaskedValue();\n } else {\n if (!DateTimeUtil.isValidDate(this.value)) {\n this.maskedValue = '';\n return;\n }\n\n const format = this.displayFormat || this.inputFormat;\n\n if (this.displayFormat) {\n this.maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format,\n true\n );\n } else if (this.inputFormat) {\n this.maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format\n );\n } else {\n this.maskedValue = this.value.toLocaleString();\n }\n }\n }\n\n protected override handleInput() {\n this.emitEvent('igcInput', { detail: this.value?.toString() });\n }\n\n protected handleDragLeave() {\n if (!this.focused) {\n this.updateMask();\n }\n }\n\n protected handleDragEnter() {\n if (!this.focused) {\n this.maskedValue = this.getMaskedValue();\n }\n }\n\n protected async updateInput(string: string, range: MaskRange) {\n const { value, end } = this.parser.replace(\n this.maskedValue,\n string,\n range.start,\n range.end\n );\n\n this.maskedValue = value;\n\n this.updateValue();\n this.requestUpdate();\n\n if (range.start !== this.inputFormat.length) {\n this.handleInput();\n }\n await this.updateComplete;\n this.input.setSelectionRange(end, end);\n }\n\n private trySpinValue(\n datePart: DatePart,\n delta?: number,\n negative = false\n ): Date {\n // default to 1 if a delta is set to 0 or any other falsy value\n const _delta =\n delta || this.datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinValue = negative ? -Math.abs(_delta) : Math.abs(_delta);\n return this.spinValue(datePart, spinValue);\n }\n\n private spinValue(datePart: DatePart, delta: number): Date {\n if (!(this.value && DateTimeUtil.isValidDate(this.value))) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n let formatPart: DatePartInfo | undefined;\n let amPmFromMask: string;\n\n switch (datePart) {\n case DatePart.Date:\n DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n break;\n case DatePart.Month:\n DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n break;\n case DatePart.Year:\n DateTimeUtil.spinYear(delta, newDate);\n break;\n case DatePart.Hours:\n DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n break;\n case DatePart.Minutes:\n DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n break;\n case DatePart.Seconds:\n DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n break;\n case DatePart.AmPm:\n formatPart = this._inputDateParts.find(\n (dp) => dp.type === DateParts.AmPm\n );\n if (formatPart !== undefined) {\n amPmFromMask = this.maskedValue.substring(\n formatPart!.start,\n formatPart!.end\n );\n return DateTimeUtil.spinAmPm(newDate, this.value, amPmFromMask);\n }\n break;\n }\n\n return newDate;\n }\n\n @eventOptions({ passive: false })\n private async onWheel(event: WheelEvent) {\n if (!this.focused || this.readOnly) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this.inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this.handleInput();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n private updateDefaultMask(): void {\n this._defaultMask = DateTimeUtil.getDefaultMask(this.locale);\n }\n\n private setMask(string: string): void {\n const oldFormat = this._inputDateParts?.map((p) => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string);\n const value = this._inputDateParts.map((p) => p.format).join('');\n\n this._defaultMask = value;\n\n const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(\n new RegExp(/(?=[^t])[\\w]/, 'g'),\n '0'\n );\n\n this._mask = newMask.includes('tt')\n ? newMask.replace(/tt/g, 'LL')\n : newMask;\n\n this.parser.mask = this._mask;\n this.parser.prompt = this.prompt;\n\n if (!this.placeholder || oldFormat === this.placeholder) {\n this.placeholder = value;\n }\n }\n\n private parseDate(val: string) {\n return val\n ? DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.prompt)\n : null;\n }\n\n private getMaskedValue(): string {\n let mask = this.emptyMask;\n\n if (DateTimeUtil.isValidDate(this.value)) {\n for (const part of this._inputDateParts) {\n if (part.type === DateParts.Literal) {\n continue;\n }\n\n const targetValue = DateTimeUtil.getPartValue(\n part,\n part.format.length,\n this.value\n );\n\n mask = this.parser.replace(\n mask,\n targetValue,\n part.start,\n part.end\n ).value;\n }\n return mask;\n }\n\n return this.maskedValue === '' ? mask : this.maskedValue;\n }\n\n private isComplete(): boolean {\n return !this.maskedValue.includes(this.prompt);\n }\n\n private updateValue(): void {\n if (this.isComplete()) {\n const parsedDate = this.parseDate(this.maskedValue);\n this.value = DateTimeUtil.isValidDate(parsedDate) ? parsedDate : null;\n } else {\n this.value = null;\n }\n }\n\n protected override _updateSetRangeTextValue() {\n this.updateValue();\n }\n\n private getNewPosition(value: string, direction = 0): number {\n const cursorPos = this.selection.start;\n\n if (!direction) {\n // Last literal before the current cursor position or start of input value\n const part = this._inputDateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // First literal after the current cursor position or end of input value\n const part = this._inputDateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? value.length;\n }\n\n protected async handleFocus() {\n this.focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n const areFormatsDifferent = this.displayFormat !== this.inputFormat;\n\n if (!this.value) {\n this.maskedValue = this.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (areFormatsDifferent) {\n this.updateMask();\n }\n }\n\n protected handleBlur() {\n const isEmptyMask = this.maskedValue === this.emptyMask;\n\n this.focused = false;\n\n if (!(this.isComplete() || isEmptyMask)) {\n const parse = this.parseDate(this.maskedValue);\n\n if (parse) {\n this.value = parse;\n } else {\n this.value = null;\n this.maskedValue = '';\n }\n } else {\n this.updateMask();\n }\n\n const isSameValue = this._oldValue === this.value;\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n this.checkValidity();\n }\n\n protected navigateParts(delta: number) {\n const position = this.getNewPosition(this.input.value, delta);\n this.setSelectionRange(position, position);\n }\n\n protected async keyboardSpin(direction: 'up' | 'down') {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this.handleInput();\n await this.updateComplete;\n this.setSelectionRange(this.selection.start, this.selection.end);\n }\n\n protected override renderInput() {\n return html`\n <input\n type=\"text\"\n part=${partMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this.maskedValue)}\n .placeholder=${live(this.placeholder || this.emptyMask)}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${super.handleInput}\n @wheel=${this.onWheel}\n @keydown=${super.handleKeydown}\n @click=${this.handleClick}\n @cut=${this.handleCut}\n @compositionstart=${this.handleCompositionStart}\n @compositionend=${this.handleCompositionEnd}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${this.handleDragStart}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,EACP,OAAO,GACR,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EACL,yBAAyB,GAE1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,+BAA+B,MAAM,iDAAiD,CAAC;AAC9F,OAAO,EACL,QAAQ,EAGR,SAAS,EACT,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAgC1D,MAAqB,yBAA0B,SAAQ,iBAAiB,CAGtE,yBAAyB,CAAC;IAInB,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CACf,yBAAyB,EACzB,+BAA+B,CAChC,CAAC;IACJ,CAAC;IAED,IAAuB,YAAY;QACjC,OAAO,uBAAuB,CAAC;IACjC,CAAC;IA4BD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC;IAChD,CAAC;IAED,IAAW,WAAW,CAAC,GAAW;QAChC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YACxB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC;IAQD,IAAW,KAAK,CAAC,KAAuC;QACtD,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAoB,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAOD,IAAW,GAAG,CAAC,KAAuC;QACpD,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAOD,IAAW,GAAG,CAAC,KAAuC;QACpD,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAgCS,cAAc;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAGS,gBAAgB;QACxB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAGS,YAAY;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAc,YAAY;QACxB,MAAM,KAAK,GACT,IAAI,CAAC,eAAe;YACpB,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;YACzB,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK;YAC1B,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAc,YAAY;QACxB,MAAM,KAAK,GACT,IAAI,CAAC,eAAe;YACpB,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK;YAC1B,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO;YAC5B,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,CAC/B,CAAC;IACJ,CAAC;IAED,IAAY,cAAc;QACxB,IAAI,MAA4B,CAAC;QAEjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG;gBAClC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,CAC/B,EAAE,IAA0B,CAAC;YAE9B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,QAAQ,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAA0B,CAAC;QAC9D,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAY,cAAc;QACxB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACjE,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAnMkB,eAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE;YAClE,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,6BAA6B;SAC5C,CAAC,CAAC;QAGK,cAAS,GAAgB,IAAI,CAAC;QAC9B,SAAI,GAAgB,IAAI,CAAC;QACzB,SAAI,GAAgB,IAAI,CAAC;QAIzB,oBAAe,GAAmB;YACxC,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;SACX,CAAC;QAoFK,aAAQ,GAAG,IAAI,CAAC;QAOhB,WAAM,GAAG,IAAI,CAAC;QAuFnB,cAAc,CAAC,IAAI,EAAE;YACnB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ;YACzB,eAAe,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE;SACvE,CAAC;aACC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;aAClC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAChD,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aACpD,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;aAC3D,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAEe,iBAAiB;QAC/B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAGM,MAAM,CAAC,QAAmB,EAAE,KAAc;QAC/C,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC;QAEnD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAGM,QAAQ,CAAC,QAAmB,EAAE,KAAc;QACjD,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC;QAEnD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAGM,KAAK;QACV,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAES,QAAQ;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAES,UAAU;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC;YAEtD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,UAAU,CACxC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,MAAM,EACN,IAAI,CACL,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,UAAU,CACxC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,MAAM,CACP,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAEkB,WAAW;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAES,eAAe;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAES,eAAe;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,KAAgB;QAC1D,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,IAAI,CAAC,WAAW,EAChB,MAAM,EACN,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,CACV,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAEO,YAAY,CAClB,QAAkB,EAClB,KAAc,EACd,QAAQ,GAAG,KAAK;QAGhB,MAAM,MAAM,GACV,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,QAAgC,CAAC,IAAI,CAAC,CAAC;QAEtE,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IAEO,SAAS,CAAC,QAAkB,EAAE,KAAa;QACjD,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,IAAI,UAAoC,CAAC;QACzC,IAAI,YAAoB,CAAC;QAEzB,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ,CAAC,IAAI;gBAChB,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,QAAQ,CAAC,KAAK;gBACjB,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtD,MAAM;YACR,KAAK,QAAQ,CAAC,IAAI;gBAChB,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,QAAQ,CAAC,KAAK;gBACjB,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtD,MAAM;YACR,KAAK,QAAQ,CAAC,OAAO;gBACnB,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxD,MAAM;YACR,KAAK,QAAQ,CAAC,OAAO;gBACnB,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxD,MAAM;YACR,KAAK,QAAQ,CAAC,IAAI;gBAChB,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACpC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CACnC,CAAC;gBACF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CACvC,UAAW,CAAC,KAAK,EACjB,UAAW,CAAC,GAAG,CAChB,CAAC;oBACF,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBAClE,CAAC;gBACD,MAAM;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAGa,AAAN,KAAK,CAAC,OAAO,CAAC,KAAiB;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAEO,OAAO,CAAC,MAAc;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAClE,IAAI,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,EAC/B,GAAG,CACJ,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC;QAEZ,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACxD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,GAAW;QAC3B,OAAO,GAAG;YACR,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC;YACzE,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAE1B,IAAI,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;oBACpC,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAC3C,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,IAAI,CAAC,KAAK,CACX,CAAC;gBAEF,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,IAAI,EACJ,WAAW,EACX,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,GAAG,CACT,CAAC,KAAK,CAAC;YACV,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3D,CAAC;IAEO,UAAU;QAChB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAEkB,wBAAwB;QACzC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,SAAS,GAAG,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;YAEf,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,SAAS,CAClE,CAAC;YACF,OAAO,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;QAGD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,CACpE,CAAC;QACF,OAAO,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,WAAW;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,WAAW,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YAClC,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,mBAAmB,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAES,UAAU;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,SAAS,CAAC;QAExD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/C,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;QAElD,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;IAES,aAAa,CAAC,KAAa;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,SAAwB;QACnD,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;IAEkB,WAAW;QAC5B,OAAO,IAAI,CAAA;;;eAGA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;eACvC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;uBAChB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC;oBAC3C,IAAI,CAAC,QAAQ;oBACb,IAAI,CAAC,QAAQ;gBACjB,IAAI,CAAC,UAAU;iBACd,IAAI,CAAC,WAAW;iBAChB,KAAK,CAAC,WAAW;iBACjB,IAAI,CAAC,OAAO;mBACV,KAAK,CAAC,aAAa;iBACrB,IAAI,CAAC,WAAW;eAClB,IAAI,CAAC,SAAS;4BACD,IAAI,CAAC,sBAAsB;0BAC7B,IAAI,CAAC,oBAAoB;qBAC9B,IAAI,CAAC,eAAe;qBACpB,IAAI,CAAC,eAAe;qBACpB,IAAI,CAAC,eAAe;;KAEpC,CAAC;IACJ,CAAC;;AA/kBsB,iCAAO,GAAG,qBAAqB,AAAxB,CAAyB;eAJpC,yBAAyB;AA4C5C;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;4DAGvC;AAsBD;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;sDAItC;AAOD;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;oDAItC;AAWD;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;oDAItC;AAYM;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;gEACZ;AAOvB;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;4DACG;AAO3B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;2DAC7B;AAOhB;IADN,QAAQ,EAAE;yDACU;AAGX;IADT,KAAK,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;+DAU/C;AAGS;IADT,KAAK,CAAC,eAAe,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;iEAKtD;AAGS;IADT,KAAK,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;6DAO/C;AAoPa;IADb,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;wDAehC","sourcesContent":["import { html } from 'lit';\nimport { eventOptions, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\n\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport type { IgcInputComponentEventMap } from '../input/input-base.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskRange,\n} from '../mask-input/mask-input-base.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n type DatePartInfo,\n DateParts,\n DateTimeUtil,\n} from './date-util.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport interface IgcDateTimeInputComponentEventMap\n extends Omit<IgcInputComponentEventMap, 'igcChange'> {\n igcChange: CustomEvent<Date | null>;\n}\n\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcDateTimeInputComponent extends EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n AbstractConstructor<IgcMaskInputBaseComponent>\n>(IgcMaskInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueDateTimeTransformers,\n });\n\n protected _defaultMask!: string;\n private _oldValue: Date | null = null;\n private _min: Date | null = null;\n private _max: Date | null = null;\n\n private _inputDateParts!: DatePartInfo[];\n private _inputFormat!: string;\n private _datePartDeltas: DatePartDeltas = {\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n };\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._defaultMask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this.setMask(val);\n this._inputFormat = val;\n if (this.value) {\n this.updateMask();\n }\n }\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this.updateMask();\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._validate();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._validate();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the input format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public displayFormat!: string;\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta!: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * The locale settings used to display the value.\n * @attr\n */\n @property()\n public locale = 'en';\n\n @watch('locale', { waitUntilFirstUpdate: true })\n protected setDefaultMask(): void {\n if (!this._inputFormat) {\n this.updateDefaultMask();\n this.setMask(this._defaultMask);\n }\n\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('displayFormat', { waitUntilFirstUpdate: true })\n protected setDisplayFormat(): void {\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('prompt', { waitUntilFirstUpdate: true })\n protected promptChange(): void {\n if (!this.prompt) {\n this.prompt = this.parser.prompt;\n } else {\n this.parser.prompt = this.prompt;\n }\n }\n\n protected get hasDateParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n\n return parts.some(\n (p) =>\n p.type === DateParts.Date ||\n p.type === DateParts.Month ||\n p.type === DateParts.Year\n );\n }\n\n protected get hasTimeParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n return parts.some(\n (p) =>\n p.type === DateParts.Hours ||\n p.type === DateParts.Minutes ||\n p.type === DateParts.Seconds\n );\n }\n\n private get targetDatePart(): DatePart | undefined {\n let result: DatePart | undefined;\n\n if (this.focused) {\n const partType = this._inputDateParts.find(\n (p) =>\n p.start <= this.inputSelection.start &&\n this.inputSelection.start <= p.end &&\n p.type !== DateParts.Literal\n )?.type as string as DatePart;\n\n if (partType) {\n result = partType;\n }\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Date)) {\n result = DatePart.Date;\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Hours)) {\n result = DatePart.Hours;\n } else {\n result = this._inputDateParts[0].type as string as DatePart;\n }\n\n return result;\n }\n\n private get datePartDeltas(): DatePartDeltas {\n return Object.assign({}, this._datePartDeltas, this.spinDelta);\n }\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { preventDefault: true, triggers: ['keydownRepeat'] },\n })\n .set([ctrlKey, ';'], this.setToday)\n .set(arrowUp, this.keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this.keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this.navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this.navigateParts.bind(this, 1));\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.updateDefaultMask();\n this.setMask(this.inputFormat);\n if (this.value) {\n this.updateMask();\n }\n }\n\n /** Increments a date/time portion. */\n public stepUp(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this.inputSelection;\n const newValue = this.trySpinValue(targetPart, delta);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Decrements a date/time portion. */\n public stepDown(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this.inputSelection;\n const newValue = this.trySpinValue(targetPart, delta, true);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Clears the input element of user input. */\n public clear(): void {\n this.maskedValue = '';\n this.value = null;\n }\n\n protected setToday() {\n this.value = new Date();\n this.handleInput();\n }\n\n protected updateMask() {\n if (this.focused) {\n this.maskedValue = this.getMaskedValue();\n } else {\n if (!DateTimeUtil.isValidDate(this.value)) {\n this.maskedValue = '';\n return;\n }\n\n const format = this.displayFormat || this.inputFormat;\n\n if (this.displayFormat) {\n this.maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format,\n true\n );\n } else if (this.inputFormat) {\n this.maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format\n );\n } else {\n this.maskedValue = this.value.toLocaleString();\n }\n }\n }\n\n protected override handleInput() {\n this._setTouchedState();\n this.emitEvent('igcInput', { detail: this.value?.toString() });\n }\n\n protected handleDragLeave() {\n if (!this.focused) {\n this.updateMask();\n }\n }\n\n protected handleDragEnter() {\n if (!this.focused) {\n this.maskedValue = this.getMaskedValue();\n }\n }\n\n protected async updateInput(string: string, range: MaskRange) {\n const { value, end } = this.parser.replace(\n this.maskedValue,\n string,\n range.start,\n range.end\n );\n\n this.maskedValue = value;\n\n this.updateValue();\n this.requestUpdate();\n\n if (range.start !== this.inputFormat.length) {\n this.handleInput();\n }\n await this.updateComplete;\n this.input.setSelectionRange(end, end);\n }\n\n private trySpinValue(\n datePart: DatePart,\n delta?: number,\n negative = false\n ): Date {\n // default to 1 if a delta is set to 0 or any other falsy value\n const _delta =\n delta || this.datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinValue = negative ? -Math.abs(_delta) : Math.abs(_delta);\n return this.spinValue(datePart, spinValue);\n }\n\n private spinValue(datePart: DatePart, delta: number): Date {\n if (!(this.value && DateTimeUtil.isValidDate(this.value))) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n let formatPart: DatePartInfo | undefined;\n let amPmFromMask: string;\n\n switch (datePart) {\n case DatePart.Date:\n DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n break;\n case DatePart.Month:\n DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n break;\n case DatePart.Year:\n DateTimeUtil.spinYear(delta, newDate);\n break;\n case DatePart.Hours:\n DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n break;\n case DatePart.Minutes:\n DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n break;\n case DatePart.Seconds:\n DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n break;\n case DatePart.AmPm:\n formatPart = this._inputDateParts.find(\n (dp) => dp.type === DateParts.AmPm\n );\n if (formatPart !== undefined) {\n amPmFromMask = this.maskedValue.substring(\n formatPart!.start,\n formatPart!.end\n );\n return DateTimeUtil.spinAmPm(newDate, this.value, amPmFromMask);\n }\n break;\n }\n\n return newDate;\n }\n\n @eventOptions({ passive: false })\n private async onWheel(event: WheelEvent) {\n if (!this.focused || this.readOnly) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this.inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this.handleInput();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n private updateDefaultMask(): void {\n this._defaultMask = DateTimeUtil.getDefaultMask(this.locale);\n }\n\n private setMask(string: string): void {\n const oldFormat = this._inputDateParts?.map((p) => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string);\n const value = this._inputDateParts.map((p) => p.format).join('');\n\n this._defaultMask = value;\n\n const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(\n new RegExp(/(?=[^t])[\\w]/, 'g'),\n '0'\n );\n\n this._mask = newMask.includes('tt')\n ? newMask.replace(/tt/g, 'LL')\n : newMask;\n\n this.parser.mask = this._mask;\n this.parser.prompt = this.prompt;\n\n if (!this.placeholder || oldFormat === this.placeholder) {\n this.placeholder = value;\n }\n }\n\n private parseDate(val: string) {\n return val\n ? DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.prompt)\n : null;\n }\n\n private getMaskedValue(): string {\n let mask = this.emptyMask;\n\n if (DateTimeUtil.isValidDate(this.value)) {\n for (const part of this._inputDateParts) {\n if (part.type === DateParts.Literal) {\n continue;\n }\n\n const targetValue = DateTimeUtil.getPartValue(\n part,\n part.format.length,\n this.value\n );\n\n mask = this.parser.replace(\n mask,\n targetValue,\n part.start,\n part.end\n ).value;\n }\n return mask;\n }\n\n return this.maskedValue === '' ? mask : this.maskedValue;\n }\n\n private isComplete(): boolean {\n return !this.maskedValue.includes(this.prompt);\n }\n\n private updateValue(): void {\n if (this.isComplete()) {\n const parsedDate = this.parseDate(this.maskedValue);\n this.value = DateTimeUtil.isValidDate(parsedDate) ? parsedDate : null;\n } else {\n this.value = null;\n }\n }\n\n protected override _updateSetRangeTextValue() {\n this.updateValue();\n }\n\n private getNewPosition(value: string, direction = 0): number {\n const cursorPos = this.selection.start;\n\n if (!direction) {\n // Last literal before the current cursor position or start of input value\n const part = this._inputDateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // First literal after the current cursor position or end of input value\n const part = this._inputDateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? value.length;\n }\n\n protected async handleFocus() {\n this.focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n const areFormatsDifferent = this.displayFormat !== this.inputFormat;\n\n if (!this.value) {\n this.maskedValue = this.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (areFormatsDifferent) {\n this.updateMask();\n }\n }\n\n protected handleBlur() {\n const isEmptyMask = this.maskedValue === this.emptyMask;\n\n this.focused = false;\n\n if (!(this.isComplete() || isEmptyMask)) {\n const parse = this.parseDate(this.maskedValue);\n\n if (parse) {\n this.value = parse;\n } else {\n this.value = null;\n this.maskedValue = '';\n }\n } else {\n this.updateMask();\n }\n\n const isSameValue = this._oldValue === this.value;\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n protected navigateParts(delta: number) {\n const position = this.getNewPosition(this.input.value, delta);\n this.setSelectionRange(position, position);\n }\n\n protected async keyboardSpin(direction: 'up' | 'down') {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this.handleInput();\n await this.updateComplete;\n this.setSelectionRange(this.selection.start, this.selection.end);\n }\n\n protected override renderInput() {\n return html`\n <input\n type=\"text\"\n part=${partMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this.maskedValue)}\n .placeholder=${live(this.placeholder || this.emptyMask)}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${super.handleInput}\n @wheel=${this.onWheel}\n @keydown=${super.handleKeydown}\n @click=${this.handleClick}\n @cut=${this.handleCut}\n @compositionstart=${this.handleCompositionStart}\n @compositionend=${this.handleCompositionEnd}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${this.handleDragStart}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
@@ -10,37 +10,34 @@ declare const IgcDialogComponent_base: Constructor<import("../common/mixins/even
10
10
  *
11
11
  * @element igc-dialog
12
12
  *
13
- * @fires igcClosing - Emitter just before the dialog is closed.
13
+ * @fires igcClosing - Emitter just before the dialog is closed. Cancelable.
14
14
  * @fires igcClosed - Emitted after closing the dialog.
15
15
  *
16
- * @slot - Renders content inside the default slot.
17
- * @slot title - Renders the title of the dialog header.
16
+ * @slot - Renders content inside the default slot of the dialog.
17
+ * @slot title - Renders content in the title slot of the dialog header.
18
18
  * @slot message - Renders the message content of the dialog.
19
- * @slot footer - Renders the dialog footer.
19
+ * @slot footer - Renders content in the dialog footer.
20
20
  *
21
21
  * @csspart base - The base wrapper of the dialog.
22
- * @csspart title - The title container.
23
- * @csspart footer - The footer container.
24
- * @csspart overlay - The overlay.
22
+ * @csspart title - The title container of the dialog.
23
+ * @csspart footer - The footer container of the dialog.
24
+ * @csspart overlay - The backdrop overlay of the dialog.
25
25
  */
26
26
  export default class IgcDialogComponent extends IgcDialogComponent_base {
27
27
  static readonly tagName = "igc-dialog";
28
28
  static styles: import("lit").CSSResult[];
29
29
  static register(): void;
30
- private static readonly increment;
31
- private titleId;
32
- private dialogRef;
33
- private animationPlayer;
30
+ private readonly _titleId;
31
+ private readonly _slots;
32
+ private readonly _dialogRef;
33
+ private readonly _player;
34
34
  /**
35
35
  * Backdrop animation helper.
36
36
  */
37
- private animating;
38
- private get dialog();
39
- private titleElements;
40
- private messageElements;
41
- private footerElements;
37
+ private _animating;
38
+ private get _dialog();
42
39
  /**
43
- * Whether the dialog should be kept open when pressing the 'ESCAPE' button.
40
+ * Whether the dialog should be kept open when pressing the 'Escape' button.
44
41
  * @attr keep-open-on-escape
45
42
  */
46
43
  keepOpenOnEscape: boolean;
@@ -69,23 +66,24 @@ export default class IgcDialogComponent extends IgcDialogComponent_base {
69
66
  title: string;
70
67
  /** Sets the return value for the dialog. */
71
68
  returnValue: string;
72
- protected handleOpenState(): void;
73
69
  constructor();
74
- protected createRenderRoot(): HTMLElement | DocumentFragment;
75
70
  protected firstUpdated(): void;
76
- private toggleAnimation;
71
+ protected _handleOpenState(): void;
72
+ private _emitClosing;
77
73
  private _hide;
74
+ protected _handleFormSubmit(event: SubmitEvent): void;
75
+ private _handleCancel;
76
+ private _handleClick;
78
77
  /** Opens the dialog. */
79
78
  show(): Promise<boolean>;
80
79
  /** Closes the dialog. */
81
80
  hide(): Promise<boolean>;
82
81
  /** Toggles the open state of the dialog. */
83
82
  toggle(): Promise<boolean>;
84
- private handleCancel;
85
- private handleClick;
86
- private emitClosing;
87
- protected formSubmitHandler: (e: SubmitEvent) => void;
88
- private handleContentChange;
83
+ protected _renderBackdrop(): import("lit-html").TemplateResult<1>;
84
+ protected _renderHeader(): import("lit-html").TemplateResult<1>;
85
+ protected _renderContent(): import("lit-html").TemplateResult<1>;
86
+ protected _renderFooter(): import("lit-html").TemplateResult<1>;
89
87
  protected render(): import("lit-html").TemplateResult<1>;
90
88
  }
91
89
  declare global {
@@ -4,92 +4,103 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- var IgcDialogComponent_1;
8
7
  import { html, LitElement, nothing } from 'lit';
9
- import { property, queryAssignedElements, state } from 'lit/decorators.js';
10
- import { ifDefined } from 'lit/directives/if-defined.js';
8
+ import { property, state } from 'lit/decorators.js';
11
9
  import { createRef, ref } from 'lit/directives/ref.js';
12
10
  import { addAnimationController } from '../../animations/player.js';
13
11
  import { fadeIn, fadeOut } from '../../animations/presets/fade/index.js';
14
12
  import { addThemingController } from '../../theming/theming-controller.js';
15
13
  import IgcButtonComponent from '../button/button.js';
16
- import { blazorAdditionalDependencies } from '../common/decorators/blazorAdditionalDependencies.js';
14
+ import { addSlotController, setSlots } from '../common/controllers/slot.js';
17
15
  import { watch } from '../common/decorators/watch.js';
18
16
  import { registerComponent } from '../common/definitions/register.js';
19
17
  import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
20
18
  import { partMap } from '../common/part-map.js';
21
- import { createCounter, isEmpty, numberInRangeInclusive, } from '../common/util.js';
19
+ import { numberInRangeInclusive } from '../common/util.js';
22
20
  import { styles } from './themes/dialog.base.css.js';
23
21
  import { styles as shared } from './themes/shared/dialog.common.css.js';
24
22
  import { all } from './themes/themes.js';
25
- let IgcDialogComponent = IgcDialogComponent_1 = class IgcDialogComponent extends EventEmitterMixin(LitElement) {
23
+ let nextId = 1;
24
+ class IgcDialogComponent extends EventEmitterMixin(LitElement) {
26
25
  static register() {
27
- registerComponent(IgcDialogComponent_1, IgcButtonComponent);
26
+ registerComponent(IgcDialogComponent, IgcButtonComponent);
28
27
  }
29
- get dialog() {
30
- return this.dialogRef.value;
31
- }
32
- handleOpenState() {
33
- this.open ? this.dialog.showModal() : this.dialog.close();
28
+ get _dialog() {
29
+ return this._dialogRef.value;
34
30
  }
35
31
  constructor() {
36
32
  super();
37
- this.titleId = `title-${IgcDialogComponent_1.increment()}`;
38
- this.dialogRef = createRef();
39
- this.animationPlayer = addAnimationController(this, this.dialogRef);
40
- this.animating = false;
33
+ this._titleId = `title-${nextId++}`;
34
+ this._slots = addSlotController(this, {
35
+ slots: setSlots('title', 'message', 'footer'),
36
+ });
37
+ this._dialogRef = createRef();
38
+ this._player = addAnimationController(this, this._dialogRef);
39
+ this._animating = false;
41
40
  this.keepOpenOnEscape = false;
42
41
  this.closeOnOutsideClick = false;
43
42
  this.hideDefaultAction = false;
44
43
  this.open = false;
45
- this.formSubmitHandler = (e) => {
46
- if (e.submitter) {
47
- this.returnValue = e.submitter?.value ?? '';
48
- }
49
- if (!e.defaultPrevented) {
50
- this._hide(true);
51
- }
52
- };
53
44
  addThemingController(this, all);
54
45
  }
55
- createRenderRoot() {
56
- const root = super.createRenderRoot();
57
- root.addEventListener('slotchange', () => this.requestUpdate());
58
- return root;
59
- }
60
46
  firstUpdated() {
61
47
  if (this.open) {
62
- this.dialog.showModal();
48
+ this._dialog.showModal();
63
49
  }
64
50
  }
65
- async toggleAnimation(dir) {
66
- const animation = dir === 'open' ? fadeIn : fadeOut;
67
- const [_, event] = await Promise.all([
68
- this.animationPlayer.stopAll(),
69
- this.animationPlayer.play(animation()),
70
- ]);
71
- return event.type === 'finish';
51
+ _handleOpenState() {
52
+ this.open ? this._dialog.showModal() : this._dialog.close();
53
+ }
54
+ _emitClosing() {
55
+ return this.emitEvent('igcClosing', { cancelable: true });
72
56
  }
73
57
  async _hide(emitEvent = false) {
74
- if (!this.open || (emitEvent && !this.emitClosing())) {
58
+ if (!this.open || (emitEvent && !this._emitClosing())) {
75
59
  return false;
76
60
  }
77
- this.animating = true;
78
- await this.toggleAnimation('close');
61
+ this._animating = true;
62
+ await this._player.playExclusive(fadeOut());
79
63
  this.open = false;
80
- this.animating = false;
64
+ this._animating = false;
81
65
  if (emitEvent) {
82
66
  await this.updateComplete;
83
67
  this.emitEvent('igcClosed');
84
68
  }
85
69
  return true;
86
70
  }
71
+ _handleFormSubmit(event) {
72
+ const form = event.target;
73
+ if (form.method === 'dialog') {
74
+ if (hasSubmitter(event.submitter)) {
75
+ this.returnValue = event.submitter.value ?? '';
76
+ }
77
+ if (!event.defaultPrevented) {
78
+ this._hide(true);
79
+ }
80
+ }
81
+ }
82
+ _handleCancel(event) {
83
+ event.preventDefault();
84
+ if (!this.keepOpenOnEscape) {
85
+ this._hide(true);
86
+ }
87
+ }
88
+ _handleClick({ clientX, clientY, target }) {
89
+ if (this.closeOnOutsideClick && this._dialog === target) {
90
+ const rect = this._dialog.getBoundingClientRect();
91
+ const inX = numberInRangeInclusive(clientX, rect.left, rect.right);
92
+ const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);
93
+ if (!(inX && inY)) {
94
+ this._hide(true);
95
+ }
96
+ }
97
+ }
87
98
  async show() {
88
99
  if (this.open) {
89
100
  return false;
90
101
  }
91
102
  this.open = true;
92
- await this.toggleAnimation('open');
103
+ await this._player.playExclusive(fadeIn());
93
104
  return true;
94
105
  }
95
106
  async hide() {
@@ -98,90 +109,73 @@ let IgcDialogComponent = IgcDialogComponent_1 = class IgcDialogComponent extends
98
109
  async toggle() {
99
110
  return this.open ? this.hide() : this.show();
100
111
  }
101
- handleCancel(event) {
102
- event.preventDefault();
103
- if (!this.keepOpenOnEscape) {
104
- this._hide(true);
105
- }
112
+ _renderBackdrop() {
113
+ return html `
114
+ <div
115
+ aria-hidden=${!this.open}
116
+ part=${partMap({ backdrop: true, animating: this._animating })}
117
+ ></div>
118
+ `;
106
119
  }
107
- handleClick({ clientX, clientY, target }) {
108
- if (this.closeOnOutsideClick && this.dialog === target) {
109
- const rect = this.dialog.getBoundingClientRect();
110
- const inX = numberInRangeInclusive(clientX, rect.left, rect.right);
111
- const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);
112
- if (!(inX && inY)) {
113
- this._hide(true);
114
- }
115
- }
120
+ _renderHeader() {
121
+ return html `
122
+ <header part="title" id=${this._titleId}>
123
+ <slot name="title">
124
+ <span>${this.title}</span>
125
+ </slot>
126
+ </header>
127
+ `;
116
128
  }
117
- emitClosing() {
118
- return this.emitEvent('igcClosing', { cancelable: true });
129
+ _renderContent() {
130
+ const hasMessage = this._slots.hasAssignedElements('message');
131
+ return html `
132
+ <section part="content">
133
+ <slot name="message" ?hidden=${!hasMessage}></slot>
134
+ <slot @submit=${this._handleFormSubmit}></slot>
135
+ </section>
136
+ `;
119
137
  }
120
- handleContentChange() {
121
- const forms = this.querySelectorAll('form[method="dialog"]');
122
- for (const form of forms) {
123
- form.removeEventListener('submit', this.formSubmitHandler);
124
- form.addEventListener('submit', this.formSubmitHandler);
125
- }
138
+ _renderFooter() {
139
+ return html `
140
+ <footer part="footer">
141
+ <slot name="footer">
142
+ ${this.hideDefaultAction
143
+ ? nothing
144
+ : html `
145
+ <igc-button variant="flat" @click=${() => this._hide(true)}>
146
+ OK
147
+ </igc-button>
148
+ `}
149
+ </slot>
150
+ </footer>
151
+ `;
126
152
  }
127
153
  render() {
128
- const label = this.ariaLabel ? this.ariaLabel : undefined;
129
- const labelledBy = label ? undefined : this.titleId;
130
- const backdropParts = {
131
- backdrop: true,
132
- animating: this.animating,
133
- };
134
- const baseParts = {
135
- base: true,
136
- titled: this.titleElements.length > 0 || !!this.title,
137
- footed: this.footerElements.length > 0 || !this.hideDefaultAction,
138
- };
154
+ const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;
155
+ const hasFooter = this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;
156
+ const labelledBy = this.ariaLabel ?? this._titleId;
139
157
  return html `
140
- <div part=${partMap(backdropParts)} aria-hidden=${!this.open}></div>
158
+ ${this._renderBackdrop()}
141
159
  <dialog
142
- ${ref(this.dialogRef)}
143
- part=${partMap(baseParts)}
160
+ ${ref(this._dialogRef)}
161
+ part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}
144
162
  role="dialog"
145
- @click=${this.handleClick}
146
- @cancel=${this.handleCancel}
147
- aria-label=${ifDefined(label)}
148
- aria-labelledby=${ifDefined(labelledBy)}
163
+ aria-label=${this.ariaLabel || nothing}
164
+ aria-labelledby=${labelledBy || nothing}
165
+ @click=${this._handleClick}
166
+ @cancel=${this._handleCancel}
149
167
  >
150
- <header part="title" id=${this.titleId}>
151
- <slot name="title"><span>${this.title}</span></slot>
152
- </header>
153
- <section part="content">
154
- <slot name="message" .hidden=${isEmpty(this.messageElements)}></slot>
155
- <slot @slotchange=${this.handleContentChange}></slot>
156
- </section>
157
- <footer part="footer">
158
- <slot name="footer">
159
- ${this.hideDefaultAction
160
- ? nothing
161
- : html `<igc-button variant="flat" @click=${() => this._hide(true)}
162
- >OK</igc-button
163
- >`}
164
- </slot>
165
- </footer>
168
+ ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}
166
169
  </dialog>
167
170
  `;
168
171
  }
169
- };
172
+ }
170
173
  IgcDialogComponent.tagName = 'igc-dialog';
171
174
  IgcDialogComponent.styles = [styles, shared];
172
- IgcDialogComponent.increment = createCounter();
175
+ export default IgcDialogComponent;
173
176
  __decorate([
174
177
  state()
175
- ], IgcDialogComponent.prototype, "animating", void 0);
176
- __decorate([
177
- queryAssignedElements({ slot: 'title' })
178
- ], IgcDialogComponent.prototype, "titleElements", void 0);
179
- __decorate([
180
- queryAssignedElements({ slot: 'message' })
181
- ], IgcDialogComponent.prototype, "messageElements", void 0);
182
- __decorate([
183
- queryAssignedElements({ slot: 'footer' })
184
- ], IgcDialogComponent.prototype, "footerElements", void 0);
178
+ ], IgcDialogComponent.prototype, "_animating", void 0);
185
179
  __decorate([
186
180
  property({ type: Boolean, attribute: 'keep-open-on-escape' })
187
181
  ], IgcDialogComponent.prototype, "keepOpenOnEscape", void 0);
@@ -202,9 +196,8 @@ __decorate([
202
196
  ], IgcDialogComponent.prototype, "returnValue", void 0);
203
197
  __decorate([
204
198
  watch('open', { waitUntilFirstUpdate: true })
205
- ], IgcDialogComponent.prototype, "handleOpenState", null);
206
- IgcDialogComponent = IgcDialogComponent_1 = __decorate([
207
- blazorAdditionalDependencies('IgcButtonComponent')
208
- ], IgcDialogComponent);
209
- export default IgcDialogComponent;
199
+ ], IgcDialogComponent.prototype, "_handleOpenState", null);
200
+ function hasSubmitter(submitter) {
201
+ return submitter != null;
202
+ }
210
203
  //# sourceMappingURL=dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\n\nimport { addAnimationController } from '../../animations/player.js';\nimport { fadeIn, fadeOut } from '../../animations/presets/fade/index.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { blazorAdditionalDependencies } from '../common/decorators/blazorAdditionalDependencies.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { partMap } from '../common/part-map.js';\nimport {\n createCounter,\n isEmpty,\n numberInRangeInclusive,\n} from '../common/util.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\n/**\n * Represents a Dialog component.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitter just before the dialog is closed.\n * @fires igcClosed - Emitted after closing the dialog.\n *\n * @slot - Renders content inside the default slot.\n * @slot title - Renders the title of the dialog header.\n * @slot message - Renders the message content of the dialog.\n * @slot footer - Renders the dialog footer.\n *\n * @csspart base - The base wrapper of the dialog.\n * @csspart title - The title container.\n * @csspart footer - The footer container.\n * @csspart overlay - The overlay.\n */\n@blazorAdditionalDependencies('IgcButtonComponent')\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register() {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n private static readonly increment = createCounter();\n private titleId = `title-${IgcDialogComponent.increment()}`;\n\n private dialogRef: Ref<HTMLDialogElement> = createRef();\n private animationPlayer = addAnimationController(this, this.dialogRef);\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private animating = false;\n\n private get dialog() {\n return this.dialogRef.value!;\n }\n\n @queryAssignedElements({ slot: 'title' })\n private titleElements!: Array<HTMLElement>;\n\n @queryAssignedElements({ slot: 'message' })\n private messageElements!: Array<HTMLElement>;\n\n @queryAssignedElements({ slot: 'footer' })\n private footerElements!: Array<HTMLElement>;\n\n /**\n * Whether the dialog should be kept open when pressing the 'ESCAPE' button.\n * @attr keep-open-on-escape\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * Whether the dialog should be closed when clicking outside of it.\n * @attr close-on-outside-click\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * Whether to hide the default action button for the dialog.\n *\n * When there is projected content in the `footer` slot this property\n * has no effect.\n * @attr hide-default-action\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is opened.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * Sets the title of the dialog.\n * @attr\n */\n @property()\n public override title!: string;\n\n /** Sets the return value for the dialog. */\n @property({ attribute: false })\n public returnValue!: string;\n\n @watch('open', { waitUntilFirstUpdate: true })\n protected handleOpenState() {\n this.open ? this.dialog.showModal() : this.dialog.close();\n }\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override createRenderRoot() {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', () => this.requestUpdate());\n return root;\n }\n\n protected override firstUpdated() {\n if (this.open) {\n this.dialog.showModal();\n }\n }\n\n private async toggleAnimation(dir: 'open' | 'close') {\n const animation = dir === 'open' ? fadeIn : fadeOut;\n\n const [_, event] = await Promise.all([\n this.animationPlayer.stopAll(),\n this.animationPlayer.play(animation()),\n ]);\n\n return event.type === 'finish';\n }\n\n private async _hide(emitEvent = false) {\n if (!this.open || (emitEvent && !this.emitClosing())) {\n return false;\n }\n\n this.animating = true;\n await this.toggleAnimation('close');\n this.open = false;\n this.animating = false;\n\n if (emitEvent) {\n await this.updateComplete;\n this.emitEvent('igcClosed');\n }\n\n return true;\n }\n\n /** Opens the dialog. */\n public async show(): Promise<boolean> {\n if (this.open) {\n return false;\n }\n\n this.open = true;\n await this.toggleAnimation('open');\n return true;\n }\n\n /** Closes the dialog. */\n public async hide(): Promise<boolean> {\n return this._hide();\n }\n\n /** Toggles the open state of the dialog. */\n public async toggle(): Promise<boolean> {\n return this.open ? this.hide() : this.show();\n }\n\n private handleCancel(event: Event) {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._hide(true);\n }\n }\n\n private handleClick({ clientX, clientY, target }: PointerEvent) {\n if (this.closeOnOutsideClick && this.dialog === target) {\n const rect = this.dialog.getBoundingClientRect();\n const inX = numberInRangeInclusive(clientX, rect.left, rect.right);\n const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);\n\n if (!(inX && inY)) {\n this._hide(true);\n }\n }\n }\n\n private emitClosing(): boolean {\n return this.emitEvent('igcClosing', { cancelable: true });\n }\n\n protected formSubmitHandler = (e: SubmitEvent) => {\n if (e.submitter) {\n this.returnValue = (e.submitter as any)?.value ?? '';\n }\n\n if (!e.defaultPrevented) {\n this._hide(true);\n }\n };\n\n private handleContentChange() {\n // Setup submit handling for forms\n const forms = this.querySelectorAll<HTMLFormElement>(\n 'form[method=\"dialog\"]'\n );\n\n for (const form of forms) {\n form.removeEventListener('submit', this.formSubmitHandler);\n form.addEventListener('submit', this.formSubmitHandler);\n }\n }\n\n protected override render() {\n const label = this.ariaLabel ? this.ariaLabel : undefined;\n const labelledBy = label ? undefined : this.titleId;\n const backdropParts = {\n backdrop: true,\n animating: this.animating,\n };\n const baseParts = {\n base: true,\n titled: this.titleElements.length > 0 || !!this.title,\n footed: this.footerElements.length > 0 || !this.hideDefaultAction,\n };\n\n return html`\n <div part=${partMap(backdropParts)} aria-hidden=${!this.open}></div>\n <dialog\n ${ref(this.dialogRef)}\n part=${partMap(baseParts)}\n role=\"dialog\"\n @click=${this.handleClick}\n @cancel=${this.handleCancel}\n aria-label=${ifDefined(label)}\n aria-labelledby=${ifDefined(labelledBy)}\n >\n <header part=\"title\" id=${this.titleId}>\n <slot name=\"title\"><span>${this.title}</span></slot>\n </header>\n <section part=\"content\">\n <slot name=\"message\" .hidden=${isEmpty(this.messageElements)}></slot>\n <slot @slotchange=${this.handleContentChange}></slot>\n </section>\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${this.hideDefaultAction\n ? nothing\n : html`<igc-button variant=\"flat\" @click=${() => this._hide(true)}\n >OK</igc-button\n >`}\n </slot>\n </footer>\n </dialog>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '../../animations/player.js';\nimport { fadeIn, fadeOut } from '../../animations/presets/fade/index.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { addSlotController, setSlots } from '../common/controllers/slot.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { partMap } from '../common/part-map.js';\nimport { numberInRangeInclusive } from '../common/util.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\nlet nextId = 1;\n\n/* blazorAdditionalDependency: IgcButtonComponent */\n/**\n * Represents a Dialog component.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitter just before the dialog is closed. Cancelable.\n * @fires igcClosed - Emitted after closing the dialog.\n *\n * @slot - Renders content inside the default slot of the dialog.\n * @slot title - Renders content in the title slot of the dialog header.\n * @slot message - Renders the message content of the dialog.\n * @slot footer - Renders content in the dialog footer.\n *\n * @csspart base - The base wrapper of the dialog.\n * @csspart title - The title container of the dialog.\n * @csspart footer - The footer container of the dialog.\n * @csspart overlay - The backdrop overlay of the dialog.\n */\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n //#region Private state and properties\n\n private readonly _titleId = `title-${nextId++}`;\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'message', 'footer'),\n });\n\n private readonly _dialogRef = createRef<HTMLDialogElement>();\n private readonly _player = addAnimationController(this, this._dialogRef);\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private _animating = false;\n\n private get _dialog(): HTMLDialogElement {\n return this._dialogRef.value!;\n }\n\n //#endregion\n\n //#region Public properties\n\n /**\n * Whether the dialog should be kept open when pressing the 'Escape' button.\n * @attr keep-open-on-escape\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * Whether the dialog should be closed when clicking outside of it.\n * @attr close-on-outside-click\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * Whether to hide the default action button for the dialog.\n *\n * When there is projected content in the `footer` slot this property\n * has no effect.\n * @attr hide-default-action\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is opened.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * Sets the title of the dialog.\n * @attr\n */\n @property()\n public override title!: string;\n\n /** Sets the return value for the dialog. */\n @property({ attribute: false })\n public returnValue!: string;\n\n //#endregion\n\n //#region Internal API\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override firstUpdated(): void {\n if (this.open) {\n this._dialog.showModal();\n }\n }\n\n @watch('open', { waitUntilFirstUpdate: true })\n protected _handleOpenState(): void {\n this.open ? this._dialog.showModal() : this._dialog.close();\n }\n\n private _emitClosing(): boolean {\n return this.emitEvent('igcClosing', { cancelable: true });\n }\n\n private async _hide(emitEvent = false): Promise<boolean> {\n if (!this.open || (emitEvent && !this._emitClosing())) {\n return false;\n }\n\n this._animating = true;\n await this._player.playExclusive(fadeOut());\n this.open = false;\n this._animating = false;\n\n if (emitEvent) {\n await this.updateComplete;\n this.emitEvent('igcClosed');\n }\n\n return true;\n }\n\n protected _handleFormSubmit(event: SubmitEvent): void {\n const form = event.target as HTMLFormElement;\n\n if (form.method === 'dialog') {\n if (hasSubmitter(event.submitter)) {\n this.returnValue = event.submitter.value ?? '';\n }\n\n if (!event.defaultPrevented) {\n this._hide(true);\n }\n }\n }\n\n private _handleCancel(event: Event): void {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._hide(true);\n }\n }\n\n private _handleClick({ clientX, clientY, target }: PointerEvent): void {\n if (this.closeOnOutsideClick && this._dialog === target) {\n const rect = this._dialog.getBoundingClientRect();\n const inX = numberInRangeInclusive(clientX, rect.left, rect.right);\n const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);\n\n if (!(inX && inY)) {\n this._hide(true);\n }\n }\n }\n\n //#endregion\n\n //#region Public API\n\n /** Opens the dialog. */\n public async show(): Promise<boolean> {\n if (this.open) {\n return false;\n }\n\n this.open = true;\n await this._player.playExclusive(fadeIn());\n return true;\n }\n\n /** Closes the dialog. */\n public async hide(): Promise<boolean> {\n return this._hide();\n }\n\n /** Toggles the open state of the dialog. */\n public async toggle(): Promise<boolean> {\n return this.open ? this.hide() : this.show();\n }\n\n //#endregion\n\n //#region Render methods\n\n protected _renderBackdrop() {\n return html`\n <div\n aria-hidden=${!this.open}\n part=${partMap({ backdrop: true, animating: this._animating })}\n ></div>\n `;\n }\n\n protected _renderHeader() {\n return html`\n <header part=\"title\" id=${this._titleId}>\n <slot name=\"title\">\n <span>${this.title}</span>\n </slot>\n </header>\n `;\n }\n\n protected _renderContent() {\n const hasMessage = this._slots.hasAssignedElements('message');\n return html`\n <section part=\"content\">\n <slot name=\"message\" ?hidden=${!hasMessage}></slot>\n <slot @submit=${this._handleFormSubmit}></slot>\n </section>\n `;\n }\n\n protected _renderFooter() {\n return html`\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${this.hideDefaultAction\n ? nothing\n : html`\n <igc-button variant=\"flat\" @click=${() => this._hide(true)}>\n OK\n </igc-button>\n `}\n </slot>\n </footer>\n `;\n }\n\n protected override render() {\n const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;\n const hasFooter =\n this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;\n const labelledBy = this.ariaLabel ?? this._titleId;\n\n return html`\n ${this._renderBackdrop()}\n <dialog\n ${ref(this._dialogRef)}\n part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}\n role=\"dialog\"\n aria-label=${this.ariaLabel || nothing}\n aria-labelledby=${labelledBy || nothing}\n @click=${this._handleClick}\n @cancel=${this._handleCancel}\n >\n ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}\n </dialog>\n `;\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n\nfunction hasSubmitter(\n submitter: SubmitEvent['submitter']\n): submitter is HTMLButtonElement | HTMLInputElement {\n return submitter != null;\n}\n"]}