@enact/limestone 1.3.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 (463) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  2. package/.github/workflows/update-copyright-years.yml +25 -0
  3. package/.travis.yml +40 -0
  4. package/ActionGuide/ActionGuide.d.ts +73 -0
  5. package/ActionGuide/ActionGuide.js +164 -0
  6. package/ActionGuide/ActionGuide.module.css +73 -0
  7. package/ActionGuide/package.json +3 -0
  8. package/ActionGuide/tests/ActionGuide-specs.js +51 -0
  9. package/Alert/Alert.d.ts +155 -0
  10. package/Alert/Alert.js +313 -0
  11. package/Alert/Alert.module.css +190 -0
  12. package/Alert/AlertImage.js +102 -0
  13. package/Alert/AlertImage.module.css +15 -0
  14. package/Alert/package.json +3 -0
  15. package/Alert/tests/Alert-specs.js +204 -0
  16. package/BodyText/BodyText.d.ts +74 -0
  17. package/BodyText/BodyText.js +170 -0
  18. package/BodyText/BodyText.module.css +95 -0
  19. package/BodyText/package.json +3 -0
  20. package/BodyText/tests/BodyText-specs.js +55 -0
  21. package/Button/Button.d.ts +131 -0
  22. package/Button/Button.js +351 -0
  23. package/Button/Button.module.css +2518 -0
  24. package/Button/package.json +3 -0
  25. package/Button/tests/Button-specs.js +252 -0
  26. package/CHANGELOG.md +170 -0
  27. package/Card/Card.d.ts +138 -0
  28. package/Card/Card.js +396 -0
  29. package/Card/Card.module.css +1296 -0
  30. package/Card/package.json +3 -0
  31. package/Card/tests/Card-specs.js +65 -0
  32. package/Checkbox/Checkbox.d.ts +99 -0
  33. package/Checkbox/Checkbox.js +222 -0
  34. package/Checkbox/Checkbox.module.css +1395 -0
  35. package/Checkbox/package.json +3 -0
  36. package/Checkbox/tests/Checkbox-specs.js +79 -0
  37. package/CheckboxItem/CheckboxItem.d.ts +99 -0
  38. package/CheckboxItem/CheckboxItem.js +210 -0
  39. package/CheckboxItem/CheckboxItem.module.css +50 -0
  40. package/CheckboxItem/package.json +3 -0
  41. package/CheckboxItem/tests/CheckboxItem-specs.js +52 -0
  42. package/Chips/Chip.js +252 -0
  43. package/Chips/Chip.module.css +30 -0
  44. package/Chips/Chips.js +215 -0
  45. package/Chips/Chips.module.css +8 -0
  46. package/Chips/index.js +86 -0
  47. package/Chips/tests/Chip-specs.js +186 -0
  48. package/Chips/tests/Chips-specs.js +312 -0
  49. package/ColorPicker/ColorPicker.js +416 -0
  50. package/ColorPicker/ColorPicker.module.css +78 -0
  51. package/ColorPicker/package.json +3 -0
  52. package/ColorPicker/tests/ColorPicker-specs.js +225 -0
  53. package/ColorPicker/utils.js +135 -0
  54. package/ContextualMenuDecorator/ContextualMenuDecorator.d.ts +106 -0
  55. package/ContextualMenuDecorator/ContextualMenuDecorator.js +264 -0
  56. package/ContextualMenuDecorator/ContextualMenuDecorator.module.css +42 -0
  57. package/ContextualMenuDecorator/package.json +3 -0
  58. package/ContextualMenuDecorator/tests/ContextualMenuDecorator-specs.js +136 -0
  59. package/ContextualPopupDecorator/ContextualPopup.js +200 -0
  60. package/ContextualPopupDecorator/ContextualPopup.module.css +270 -0
  61. package/ContextualPopupDecorator/ContextualPopupDecorator.d.ts +182 -0
  62. package/ContextualPopupDecorator/ContextualPopupDecorator.js +867 -0
  63. package/ContextualPopupDecorator/ContextualPopupDecorator.module.css +3 -0
  64. package/ContextualPopupDecorator/HolePunchScrim.js +69 -0
  65. package/ContextualPopupDecorator/HolePunchScrim.module.css +38 -0
  66. package/ContextualPopupDecorator/package.json +3 -0
  67. package/ContextualPopupDecorator/tests/ContextualPopupDecorator-specs.js +621 -0
  68. package/DatePicker/DatePicker.d.ts +173 -0
  69. package/DatePicker/DatePicker.js +175 -0
  70. package/DatePicker/DatePicker.module.css +5 -0
  71. package/DatePicker/DatePickerBase.js +348 -0
  72. package/DatePicker/package.json +3 -0
  73. package/DatePicker/tests/DatePicker-specs.js +247 -0
  74. package/DayPicker/DayPicker.d.ts +92 -0
  75. package/DayPicker/DayPicker.js +188 -0
  76. package/DayPicker/DayPicker.module.css +35 -0
  77. package/DayPicker/DaySelectorDecorator.js +301 -0
  78. package/DayPicker/package.json +3 -0
  79. package/DayPicker/tests/DayPicker-specs.js +138 -0
  80. package/Dropdown/Dropdown.d.ts +135 -0
  81. package/Dropdown/Dropdown.js +460 -0
  82. package/Dropdown/Dropdown.module.css +160 -0
  83. package/Dropdown/DropdownList.js +360 -0
  84. package/Dropdown/package.json +3 -0
  85. package/Dropdown/tests/Dropdown-specs.js +267 -0
  86. package/FixedPopupPanels/FixedPopupPanels.d.ts +72 -0
  87. package/FixedPopupPanels/FixedPopupPanels.js +170 -0
  88. package/FixedPopupPanels/FixedPopupPanels.module.css +146 -0
  89. package/FixedPopupPanels/package.json +3 -0
  90. package/FixedPopupPanels/tests/FixedPopupPanels-specs.js +142 -0
  91. package/FlexiblePopupPanels/FlexiblePopupPanels.js +177 -0
  92. package/FlexiblePopupPanels/FlexiblePopupPanels.module.css +291 -0
  93. package/FlexiblePopupPanels/Header.js +110 -0
  94. package/FlexiblePopupPanels/Panel.js +256 -0
  95. package/FlexiblePopupPanels/index.d.ts +145 -0
  96. package/FlexiblePopupPanels/index.js +68 -0
  97. package/FlexiblePopupPanels/package.json +3 -0
  98. package/FlexiblePopupPanels/tests/FlexiblePopupPanels-specs.js +305 -0
  99. package/FlexiblePopupPanels/useNavButtonFocus.js +65 -0
  100. package/FormCheckboxItem/FormCheckboxItem.d.ts +87 -0
  101. package/FormCheckboxItem/FormCheckboxItem.js +200 -0
  102. package/FormCheckboxItem/FormCheckboxItem.module.css +374 -0
  103. package/FormCheckboxItem/package.json +3 -0
  104. package/FormCheckboxItem/tests/FormCheckboxItem-specs.js +164 -0
  105. package/Heading/Heading.d.ts +104 -0
  106. package/Heading/Heading.js +203 -0
  107. package/Heading/Heading.module.css +217 -0
  108. package/Heading/package.json +3 -0
  109. package/Heading/tests/Heading-specs.js +57 -0
  110. package/Icon/Icon.d.ts +377 -0
  111. package/Icon/Icon.js +503 -0
  112. package/Icon/Icon.module.css +121 -0
  113. package/Icon/IconList.js +611 -0
  114. package/Icon/package.json +3 -0
  115. package/Icon/tests/Icon-specs.js +131 -0
  116. package/IconItem/IconItem.d.ts +137 -0
  117. package/IconItem/IconItem.js +360 -0
  118. package/IconItem/IconItem.module.css +414 -0
  119. package/IconItem/package.json +3 -0
  120. package/IconItem/tests/IconItem-specs.js +106 -0
  121. package/Image/Image.d.ts +60 -0
  122. package/Image/Image.js +165 -0
  123. package/Image/Image.module.css +5 -0
  124. package/Image/package.json +3 -0
  125. package/Image/tests/Image-specs.js +62 -0
  126. package/ImageItem/ImageItem.d.ts +134 -0
  127. package/ImageItem/ImageItem.js +377 -0
  128. package/ImageItem/ImageItem.module.css +1079 -0
  129. package/ImageItem/package.json +3 -0
  130. package/ImageItem/tests/ImageItem-specs.js +223 -0
  131. package/Input/Input.js +715 -0
  132. package/Input/Input.module.css +699 -0
  133. package/Input/InputField.js +487 -0
  134. package/Input/InputField.module.css +763 -0
  135. package/Input/InputFieldDecoratorIcon.js +66 -0
  136. package/Input/InputFieldSpotlightDecorator.js +380 -0
  137. package/Input/Keypad.js +111 -0
  138. package/Input/NumberField.js +311 -0
  139. package/Input/index.d.ts +423 -0
  140. package/Input/index.js +87 -0
  141. package/Input/package.json +3 -0
  142. package/Input/pointer.js +103 -0
  143. package/Input/tests/Input-specs.js +537 -0
  144. package/Input/tests/InputField-specs.js +292 -0
  145. package/Input/tests/InputPopup-specs.js +56 -0
  146. package/Input/util.js +130 -0
  147. package/Item/Item.d.ts +108 -0
  148. package/Item/Item.js +360 -0
  149. package/Item/Item.module.css +665 -0
  150. package/Item/package.json +3 -0
  151. package/Item/tests/Item-specs.js +108 -0
  152. package/KeyGuide/KeyGuide.d.ts +103 -0
  153. package/KeyGuide/KeyGuide.js +254 -0
  154. package/KeyGuide/KeyGuide.module.css +431 -0
  155. package/KeyGuide/package.json +3 -0
  156. package/KeyGuide/tests/KeyGuide-specs.js +168 -0
  157. package/LICENSE +201 -0
  158. package/Marquee/Marquee.d.ts +42 -0
  159. package/Marquee/Marquee.js +45 -0
  160. package/Marquee/package.json +3 -0
  161. package/MediaOverlay/MediaOverlay.d.ts +134 -0
  162. package/MediaOverlay/MediaOverlay.js +304 -0
  163. package/MediaOverlay/MediaOverlay.module.css +292 -0
  164. package/MediaOverlay/package.json +3 -0
  165. package/MediaOverlay/tests/MediaOverlay-specs.js +127 -0
  166. package/MediaPlayer/MediaControls.js +934 -0
  167. package/MediaPlayer/MediaControls.module.css +86 -0
  168. package/MediaPlayer/MediaKnob.js +61 -0
  169. package/MediaPlayer/MediaSlider.js +131 -0
  170. package/MediaPlayer/MediaSlider.module.css +319 -0
  171. package/MediaPlayer/MediaSliderDecorator.js +245 -0
  172. package/MediaPlayer/Times.js +152 -0
  173. package/MediaPlayer/Times.module.css +34 -0
  174. package/MediaPlayer/index.d.ts +223 -0
  175. package/MediaPlayer/index.js +34 -0
  176. package/MediaPlayer/package.json +3 -0
  177. package/MediaPlayer/tests/MediaSlider-specs.js +126 -0
  178. package/MediaPlayer/tests/util-specs.js +114 -0
  179. package/MediaPlayer/util.js +83 -0
  180. package/PageViews/Page.js +77 -0
  181. package/PageViews/Page.module.css +3 -0
  182. package/PageViews/PageViews.js +440 -0
  183. package/PageViews/PageViews.module.css +175 -0
  184. package/PageViews/PageViewsRouter.js +150 -0
  185. package/PageViews/index.js +45 -0
  186. package/PageViews/tests/PageViews-specs.js +192 -0
  187. package/Panels/Header.js +599 -0
  188. package/Panels/Header.module.css +243 -0
  189. package/Panels/Panel.js +347 -0
  190. package/Panels/Panel.module.css +33 -0
  191. package/Panels/Panels.js +258 -0
  192. package/Panels/Panels.module.css +12 -0
  193. package/Panels/index.d.ts +376 -0
  194. package/Panels/index.js +66 -0
  195. package/Panels/package.json +3 -0
  196. package/Panels/tests/Header-specs.js +146 -0
  197. package/Panels/tests/Panels-specs.js +257 -0
  198. package/Picker/Picker.d.ts +193 -0
  199. package/Picker/Picker.js +389 -0
  200. package/Picker/Picker.module.css +46 -0
  201. package/Picker/package.json +3 -0
  202. package/Picker/tests/Picker-specs.js +91 -0
  203. package/Popup/Popup.d.ts +169 -0
  204. package/Popup/Popup.js +690 -0
  205. package/Popup/Popup.module.css +180 -0
  206. package/Popup/package.json +3 -0
  207. package/Popup/tests/Popup-specs.js +475 -0
  208. package/PopupTabLayout/PopupTabLayout.d.ts +196 -0
  209. package/PopupTabLayout/PopupTabLayout.js +605 -0
  210. package/PopupTabLayout/PopupTabLayout.module.css +226 -0
  211. package/PopupTabLayout/package.json +3 -0
  212. package/PopupTabLayout/tests/PopupTabLayout-specs.js +285 -0
  213. package/ProgressBar/ProgressBar.d.ts +171 -0
  214. package/ProgressBar/ProgressBar.js +223 -0
  215. package/ProgressBar/ProgressBar.module.css +264 -0
  216. package/ProgressBar/ProgressBarTooltip.js +359 -0
  217. package/ProgressBar/ProgressBarTooltip.module.css +86 -0
  218. package/ProgressBar/package.json +3 -0
  219. package/ProgressBar/tests/ProgressBar-specs.js +400 -0
  220. package/ProgressButton/ProgressButton.d.ts +57 -0
  221. package/ProgressButton/ProgressButton.js +143 -0
  222. package/ProgressButton/ProgressButton.module.css +147 -0
  223. package/ProgressButton/package.json +3 -0
  224. package/ProgressButton/tests/ProgressButton-specs.js +71 -0
  225. package/QuickGuidePanels/Panel.js +90 -0
  226. package/QuickGuidePanels/QuickGuidePanels.js +463 -0
  227. package/QuickGuidePanels/QuickGuidePanels.module.css +26 -0
  228. package/QuickGuidePanels/index.js +52 -0
  229. package/QuickGuidePanels/tests/QuickGuidePanels-specs.js +250 -0
  230. package/README.md +59 -0
  231. package/RadioItem/RadioItem.d.ts +59 -0
  232. package/RadioItem/RadioItem.js +146 -0
  233. package/RadioItem/RadioItem.module.css +233 -0
  234. package/RadioItem/package.json +3 -0
  235. package/RadioItem/tests/RadioItem-specs.js +62 -0
  236. package/RangePicker/RangePicker.d.ts +174 -0
  237. package/RangePicker/RangePicker.js +372 -0
  238. package/RangePicker/RangePicker.module.css +55 -0
  239. package/RangePicker/package.json +3 -0
  240. package/RangePicker/tests/RangePicker-specs.js +122 -0
  241. package/Region/Region.d.ts +33 -0
  242. package/Region/Region.js +91 -0
  243. package/Region/package.json +3 -0
  244. package/Region/tests/Region-specs.js +28 -0
  245. package/Scroller/ContentContainerDecorator.js +24 -0
  246. package/Scroller/EditableWrapper.js +1036 -0
  247. package/Scroller/EditableWrapper.module.css +22 -0
  248. package/Scroller/Scroller.d.ts +270 -0
  249. package/Scroller/Scroller.js +470 -0
  250. package/Scroller/Scroller.module.css +41 -0
  251. package/Scroller/package.json +3 -0
  252. package/Scroller/tests/ContentContainerDecorator-specs.js +20 -0
  253. package/Scroller/tests/EditableWrapper-specs.js +133 -0
  254. package/Scroller/tests/Scroller-specs.js +159 -0
  255. package/Scroller/useEvent.js +39 -0
  256. package/Scroller/useThemeScroller.js +410 -0
  257. package/Skinnable/Skinnable.d.ts +27 -0
  258. package/Skinnable/Skinnable.js +65 -0
  259. package/Skinnable/package.json +3 -0
  260. package/Slider/Slider.d.ts +218 -0
  261. package/Slider/Slider.js +441 -0
  262. package/Slider/Slider.module.css +880 -0
  263. package/Slider/SliderBehaviorDecorator.js +184 -0
  264. package/Slider/package.json +3 -0
  265. package/Slider/tests/Slider-specs.js +573 -0
  266. package/Slider/utils.js +114 -0
  267. package/Spinner/Spinner.d.ts +64 -0
  268. package/Spinner/Spinner.js +254 -0
  269. package/Spinner/Spinner.module.css +368 -0
  270. package/Spinner/package.json +3 -0
  271. package/Spinner/tests/Spinner-specs.js +70 -0
  272. package/Sprite/Sprite.d.ts +100 -0
  273. package/Sprite/Sprite.js +345 -0
  274. package/Sprite/Sprite.module.css +32 -0
  275. package/Sprite/package.json +3 -0
  276. package/Sprite/tests/Sprite-specs.js +59 -0
  277. package/Steps/Steps.d.ts +119 -0
  278. package/Steps/Steps.js +303 -0
  279. package/Steps/Steps.module.css +130 -0
  280. package/Steps/package.json +3 -0
  281. package/Steps/tests/Steps-specs.js +175 -0
  282. package/Switch/Switch.d.ts +54 -0
  283. package/Switch/Switch.js +143 -0
  284. package/Switch/Switch.module.css +714 -0
  285. package/Switch/package.json +3 -0
  286. package/Switch/tests/Switch-specs.js +54 -0
  287. package/SwitchItem/SwitchItem.d.ts +56 -0
  288. package/SwitchItem/SwitchItem.js +144 -0
  289. package/SwitchItem/SwitchItem.module.css +31 -0
  290. package/SwitchItem/package.json +3 -0
  291. package/SwitchItem/tests/SwitchItem-specs.js +49 -0
  292. package/TabLayout/RefocusDecorator.js +142 -0
  293. package/TabLayout/Tab.js +84 -0
  294. package/TabLayout/TabGroup.js +377 -0
  295. package/TabLayout/TabGroup.module.css +280 -0
  296. package/TabLayout/TabLayout.d.ts +161 -0
  297. package/TabLayout/TabLayout.js +661 -0
  298. package/TabLayout/TabLayout.module.css +101 -0
  299. package/TabLayout/package.json +3 -0
  300. package/TabLayout/tests/TabGroup-specs.js +214 -0
  301. package/TabLayout/tests/TabLayout-specs.js +740 -0
  302. package/ThemeDecorator/AccessibilityDecorator.js +151 -0
  303. package/ThemeDecorator/I18nFontDecorator.js +33 -0
  304. package/ThemeDecorator/ThemeDecorator.d.ts +143 -0
  305. package/ThemeDecorator/ThemeDecorator.js +307 -0
  306. package/ThemeDecorator/ThemeDecorator.module.css +1250 -0
  307. package/ThemeDecorator/fontGenerator.js +76 -0
  308. package/ThemeDecorator/package.json +3 -0
  309. package/ThemeDecorator/screenTypes.json +10 -0
  310. package/ThemeDecorator/tests/ThemeDecorator-specs.js +151 -0
  311. package/TimePicker/TimePicker.d.ts +147 -0
  312. package/TimePicker/TimePicker.js +255 -0
  313. package/TimePicker/TimePicker.module.css +61 -0
  314. package/TimePicker/TimePickerBase.js +396 -0
  315. package/TimePicker/package.json +3 -0
  316. package/TimePicker/tests/TimePicker-specs.js +248 -0
  317. package/TooltipDecorator/Tooltip.js +252 -0
  318. package/TooltipDecorator/Tooltip.module.css +496 -0
  319. package/TooltipDecorator/TooltipDecorator.d.ts +229 -0
  320. package/TooltipDecorator/TooltipDecorator.js +260 -0
  321. package/TooltipDecorator/TooltipLabel.js +117 -0
  322. package/TooltipDecorator/package.json +3 -0
  323. package/TooltipDecorator/tests/TooltipDecorator-specs.js +224 -0
  324. package/TooltipDecorator/tests/useTooltip-specs.js +266 -0
  325. package/TooltipDecorator/useTooltip.js +278 -0
  326. package/TooltipDecorator/util.js +273 -0
  327. package/VideoPlayer/Feedback.js +110 -0
  328. package/VideoPlayer/Feedback.module.css +55 -0
  329. package/VideoPlayer/FeedbackContent.js +99 -0
  330. package/VideoPlayer/FeedbackIcon.js +67 -0
  331. package/VideoPlayer/FeedbackIcons.js +76 -0
  332. package/VideoPlayer/FeedbackTooltip.js +242 -0
  333. package/VideoPlayer/FeedbackTooltip.module.css +160 -0
  334. package/VideoPlayer/MediaTitle.js +143 -0
  335. package/VideoPlayer/MediaTitle.module.css +95 -0
  336. package/VideoPlayer/Overlay.js +51 -0
  337. package/VideoPlayer/Video.js +345 -0
  338. package/VideoPlayer/VideoPlayer.d.ts +582 -0
  339. package/VideoPlayer/VideoPlayer.js +2116 -0
  340. package/VideoPlayer/VideoPlayer.module.css +164 -0
  341. package/VideoPlayer/package.json +3 -0
  342. package/VideoPlayer/tests/Video-specs.js +235 -0
  343. package/VideoPlayer/tests/VideoPlayer-specs.js +180 -0
  344. package/VirtualList/VirtualList.d.ts +411 -0
  345. package/VirtualList/VirtualList.js +931 -0
  346. package/VirtualList/VirtualList.module.css +52 -0
  347. package/VirtualList/package.json +3 -0
  348. package/VirtualList/tests/VirtualGridList-specs.js +289 -0
  349. package/VirtualList/tests/VirtualGridList-translate-specs.js +711 -0
  350. package/VirtualList/tests/VirtualList-specs.js +288 -0
  351. package/VirtualList/tests/VirtualList-translate-specs.js +704 -0
  352. package/VirtualList/tests/useEvent-specs.js +172 -0
  353. package/VirtualList/tests/useEvent-translate-specs.js +309 -0
  354. package/VirtualList/useEvent.js +324 -0
  355. package/VirtualList/usePreventScroll.js +31 -0
  356. package/VirtualList/useSpotlight.js +157 -0
  357. package/VirtualList/useThemeVirtualList.js +471 -0
  358. package/VirtualList/useThemeVirtualList.module.css +34 -0
  359. package/WizardPanels/Panel.js +99 -0
  360. package/WizardPanels/WizardPanels.js +501 -0
  361. package/WizardPanels/WizardPanels.module.css +15 -0
  362. package/WizardPanels/index.d.ts +182 -0
  363. package/WizardPanels/index.js +50 -0
  364. package/WizardPanels/package.json +3 -0
  365. package/WizardPanels/tests/WizardPanels-specs.js +713 -0
  366. package/codecov.yml +13 -0
  367. package/fonts/Limestone_Icons.ttf +0 -0
  368. package/fonts/Miso/LICENSE.txt +75 -0
  369. package/fonts/Miso/Miso-Bold.ttf +0 -0
  370. package/fonts/Miso/Miso-Light.ttf +0 -0
  371. package/fonts/Miso/Miso-Regular.ttf +0 -0
  372. package/fonts/MuseoSans/LICENSE.txt +75 -0
  373. package/fonts/MuseoSans/MuseoSans-Black.ttf +0 -0
  374. package/fonts/MuseoSans/MuseoSans-BlackItalic.ttf +0 -0
  375. package/fonts/MuseoSans/MuseoSans-Bold.ttf +0 -0
  376. package/fonts/MuseoSans/MuseoSans-BoldItalic.ttf +0 -0
  377. package/fonts/MuseoSans/MuseoSans-Light.ttf +0 -0
  378. package/fonts/MuseoSans/MuseoSans-Medium.ttf +0 -0
  379. package/fonts/MuseoSans/MuseoSans-MediumItalic.ttf +0 -0
  380. package/fonts/MuseoSans/MuseoSans-Thin.ttf +0 -0
  381. package/index.js +2 -0
  382. package/internal/$L/$L.d.ts +21 -0
  383. package/internal/$L/$L.js +97 -0
  384. package/internal/$L/package.json +3 -0
  385. package/internal/AsyncRenderChildren/AsyncRenderChildren.js +74 -0
  386. package/internal/AsyncRenderChildren/package.json +3 -0
  387. package/internal/AsyncRenderChildren/tests/AsyncRenderChildren-specs.js +49 -0
  388. package/internal/DateComponentPicker/DateComponentPicker.js +165 -0
  389. package/internal/DateComponentPicker/DateComponentPicker.module.css +53 -0
  390. package/internal/DateComponentPicker/DateComponentRangePicker.js +132 -0
  391. package/internal/DateComponentPicker/index.js +31 -0
  392. package/internal/DateComponentPicker/package.json +3 -0
  393. package/internal/DateTime/DateTime.js +83 -0
  394. package/internal/DateTime/DateTime.module.css +51 -0
  395. package/internal/DateTime/DateTimeDecorator.js +268 -0
  396. package/internal/DateTime/index.js +37 -0
  397. package/internal/DateTime/package.json +3 -0
  398. package/internal/DateTime/tests/DateTimeDecorator-specs.js +33 -0
  399. package/internal/DebounceDecorator/DebounceDecorator.js +125 -0
  400. package/internal/DebounceDecorator/package.json +3 -0
  401. package/internal/DebounceDecorator/tests/DebounceDecorator-specs.js +151 -0
  402. package/internal/Panels/Arrangers.js +248 -0
  403. package/internal/Panels/CancelDecorator.js +43 -0
  404. package/internal/Panels/FloatingLayerIdProvider.js +27 -0
  405. package/internal/Panels/NavigationButton.js +64 -0
  406. package/internal/Panels/NavigationButton.module.css +69 -0
  407. package/internal/Panels/PanelsRouter.js +223 -0
  408. package/internal/Panels/PopupDecorator.js +287 -0
  409. package/internal/Panels/TransitionDecorator.js +99 -0
  410. package/internal/Panels/Viewport.js +313 -0
  411. package/internal/Panels/Viewport.module.css +25 -0
  412. package/internal/Panels/captureKeys.js +48 -0
  413. package/internal/Panels/index.js +101 -0
  414. package/internal/Panels/package.json +3 -0
  415. package/internal/Panels/useAutoFocus.js +95 -0
  416. package/internal/Panels/useFocusOnTransition.js +45 -0
  417. package/internal/Panels/useToggleRole.js +30 -0
  418. package/internal/Panels/util.js +64 -0
  419. package/internal/Picker/Picker.js +942 -0
  420. package/internal/Picker/Picker.module.css +1145 -0
  421. package/internal/Picker/PickerButton.js +97 -0
  422. package/internal/Picker/PickerItem.js +38 -0
  423. package/internal/Picker/SpottablePicker.js +63 -0
  424. package/internal/Picker/package.json +3 -0
  425. package/internal/Picker/tests/Picker-specs.js +968 -0
  426. package/internal/SharedStateDecorator/SharedStateDecorator.js +167 -0
  427. package/internal/SharedStateDecorator/package.json +3 -0
  428. package/internal/SharedStateDecorator/tests/SharedStateDecorator-specs.js +277 -0
  429. package/internal/WindowEventable/WindowEventable.js +114 -0
  430. package/internal/WindowEventable/package.json +3 -0
  431. package/internal/util/package.json +3 -0
  432. package/internal/util/util.js +79 -0
  433. package/internal/validators/package.json +4 -0
  434. package/internal/validators/tests/validators-specs.js +80 -0
  435. package/internal/validators/validators.js +136 -0
  436. package/package.json +69 -0
  437. package/resources/ilibmanifest.json +3 -0
  438. package/styles/color-mixins.less +230 -0
  439. package/styles/colors-game-green.less +25 -0
  440. package/styles/colors-game-orange.less +25 -0
  441. package/styles/colors-game.less +56 -0
  442. package/styles/colors-highcontrast.less +21 -0
  443. package/styles/colors.less +435 -0
  444. package/styles/mixins.less +337 -0
  445. package/styles/skin.less +54 -0
  446. package/styles/variables-base.less +32 -0
  447. package/styles/variables-game.less +25 -0
  448. package/styles/variables.less +1182 -0
  449. package/useScroll/HoverToScroll.js +265 -0
  450. package/useScroll/HoverToScroll.module.css +38 -0
  451. package/useScroll/OverscrollEffect.module.css +14 -0
  452. package/useScroll/Scrollbar.js +171 -0
  453. package/useScroll/Scrollbar.module.css +19 -0
  454. package/useScroll/ScrollbarPlaceholder.js +64 -0
  455. package/useScroll/ScrollbarTrack.js +209 -0
  456. package/useScroll/ScrollbarTrack.module.css +136 -0
  457. package/useScroll/package.json +3 -0
  458. package/useScroll/useEvent.js +693 -0
  459. package/useScroll/useOverscrollEffect.js +105 -0
  460. package/useScroll/useScroll.js +523 -0
  461. package/useScroll/useScroll.module.css +49 -0
  462. package/useScroll/useSpotlight.js +32 -0
  463. package/useScroll/useThemeScrollContentHandle.js +32 -0
@@ -0,0 +1,693 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useEventWheel = exports.useEventVoice = exports.useEventTouch = exports.useEventMouse = exports.useEventMonitor = exports.useEventKey = exports.useEventFocus = void 0;
7
+ var _handle = require("@enact/core/handle");
8
+ var _platform = _interopRequireDefault(require("@enact/core/platform"));
9
+ var _snapshot = require("@enact/core/snapshot");
10
+ var _util = require("@enact/core/util");
11
+ var _spotlight = _interopRequireWildcard(require("@enact/spotlight"));
12
+ var _container = require("@enact/spotlight/src/container");
13
+ var _utils = require("@enact/spotlight/src/utils");
14
+ var _target = require("@enact/spotlight/src/target");
15
+ var _useScroll = require("@enact/ui/useScroll");
16
+ var _utilEvent = _interopRequireDefault(require("@enact/ui/useScroll/utilEvent"));
17
+ var _utilDOM = _interopRequireDefault(require("@enact/ui/useScroll/utilDOM"));
18
+ var _react = require("react");
19
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
21
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
22
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
24
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
25
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
26
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
27
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
28
+ var animationDuration = _useScroll.constants.animationDuration,
29
+ epsilon = _useScroll.constants.epsilon,
30
+ isPageDown = _useScroll.constants.isPageDown,
31
+ isPageUp = _useScroll.constants.isPageUp,
32
+ overscrollTypeOnce = _useScroll.constants.overscrollTypeOnce,
33
+ paginationPageMultiplier = _useScroll.constants.paginationPageMultiplier,
34
+ scrollWheelPageMultiplierForMaxPixel = _useScroll.constants.scrollWheelPageMultiplierForMaxPixel;
35
+ var lastPointer = {
36
+ x: 0,
37
+ y: 0
38
+ };
39
+ var useEventFocus = exports.useEventFocus = function useEventFocus(props, instances) {
40
+ var scrollMode = props.scrollMode;
41
+ var scrollContainerHandle = instances.scrollContainerHandle,
42
+ scrollContainerRef = instances.scrollContainerRef,
43
+ scrollContentRef = instances.scrollContentRef,
44
+ spottable = instances.spottable,
45
+ themeScrollContentHandle = instances.themeScrollContentHandle;
46
+
47
+ // Functions
48
+
49
+ var startScrollOnFocus = function startScrollOnFocus(pos) {
50
+ if (pos) {
51
+ var top = pos.top,
52
+ left = pos.left,
53
+ bounds = scrollContainerHandle.current.getScrollBounds();
54
+ if (scrollMode === 'translate') {
55
+ var scrollHorizontally = bounds.maxLeft > 0 && left !== scrollContainerHandle.current.scrollLeft,
56
+ scrollVertically = bounds.maxTop > 0 && top !== scrollContainerHandle.current.scrollTop;
57
+ if (scrollHorizontally || scrollVertically) {
58
+ scrollContainerHandle.current.start({
59
+ targetX: left,
60
+ targetY: top,
61
+ animate: animationDuration > 0 && spottable.current.animateOnFocus,
62
+ overscrollEffect: props.overscrollEffectOn[scrollContainerHandle.current.lastInputType] && (!themeScrollContentHandle.current.shouldPreventOverscrollEffect || !themeScrollContentHandle.current.shouldPreventOverscrollEffect())
63
+ });
64
+ spottable.current.lastScrollPositionOnFocus = pos;
65
+ }
66
+ } else {
67
+ var _scrollHorizontally = bounds.maxLeft > 0 && Math.abs(left - scrollContainerHandle.current.scrollLeft) > epsilon,
68
+ _scrollVertically = bounds.maxTop > 0 && Math.abs(top - scrollContainerHandle.current.scrollTop) > epsilon;
69
+ if (_scrollHorizontally || _scrollVertically) {
70
+ scrollContainerHandle.current.start({
71
+ targetX: left,
72
+ targetY: top,
73
+ animate: spottable.current.animateOnFocus,
74
+ overscrollEffect: props.overscrollEffectOn[scrollContainerHandle.current.lastInputType] && (!themeScrollContentHandle.current.shouldPreventOverscrollEffect || !themeScrollContentHandle.current.shouldPreventOverscrollEffect())
75
+ });
76
+ spottable.current.lastScrollPositionOnFocus = pos;
77
+ }
78
+ }
79
+ }
80
+ };
81
+ function calculateAndScrollTo() {
82
+ var positionFn = themeScrollContentHandle.current.calculatePositionOnFocus,
83
+ scrollContentNode = scrollContentRef.current;
84
+ var spotItem = _spotlight["default"].getCurrent();
85
+
86
+ // Scroll to the container created by ContentContainerDecorator when descendants get focused
87
+ if (props.scrollToContentContainerOnFocus) {
88
+ spotItem = (0, _container.getPositionTargetOnFocus)(spotItem);
89
+ }
90
+ if (spotItem && positionFn && _utilDOM["default"].containsDangerously(scrollContentNode, spotItem)) {
91
+ var lastPos = spottable.current.lastScrollPositionOnFocus;
92
+ var pos;
93
+
94
+ // If scroll animation is ongoing, we need to pass last target position to
95
+ // determine correct scroll position.
96
+ if (lastPos & (scrollMode === 'translate' && scrollContainerHandle.current.animator.isAnimating() || scrollMode === 'native' && scrollContainerHandle.current.scrolling)) {
97
+ var contentRect = (0, _utils.getRect)(scrollContentNode),
98
+ itemRect = (0, _utils.getRect)(spotItem);
99
+ var scrollPosition;
100
+ if (props.direction === 'horizontal' || props.direction === 'both' && !(itemRect.left >= contentRect.left && itemRect.right <= contentRect.right)) {
101
+ scrollPosition = lastPos.left;
102
+ } else if (props.direction === 'vertical' || props.direction === 'both' && !(itemRect.top >= contentRect.top && itemRect.bottom <= contentRect.bottom)) {
103
+ scrollPosition = lastPos.top;
104
+ }
105
+ pos = positionFn({
106
+ item: spotItem,
107
+ scrollPosition: scrollPosition
108
+ });
109
+ } else {
110
+ pos = positionFn({
111
+ item: spotItem
112
+ });
113
+ }
114
+ if (pos && (pos.left !== scrollContainerHandle.current.scrollLeft || pos.top !== scrollContainerHandle.current.scrollTop)) {
115
+ startScrollOnFocus(pos);
116
+ }
117
+
118
+ // update `scrollHeight`
119
+ scrollContainerHandle.current.bounds.scrollHeight = scrollContainerHandle.current.getScrollBounds().scrollHeight;
120
+ }
121
+ }
122
+ function handleFocus(ev) {
123
+ var shouldPreventScrollByFocus = themeScrollContentHandle.current.shouldPreventScrollByFocus ? themeScrollContentHandle.current.shouldPreventScrollByFocus() : false;
124
+ if (spottable.current.isWheeling) {
125
+ scrollContainerHandle.current.stop();
126
+ if (scrollMode === 'translate') {
127
+ spottable.current.animateOnFocus = false;
128
+ }
129
+ }
130
+ if (!(shouldPreventScrollByFocus || _spotlight["default"].getPointerMode() || scrollContainerHandle.current.isDragging || spottable.current.indexToFocus)) {
131
+ var item = ev.target,
132
+ spotItem = _spotlight["default"].getCurrent();
133
+ if (item && item === spotItem) {
134
+ calculateAndScrollTo();
135
+ }
136
+ } else if (themeScrollContentHandle.current.setLastFocusedNode) {
137
+ themeScrollContentHandle.current.setLastFocusedNode(ev.target);
138
+ }
139
+ }
140
+ function hasFocus() {
141
+ var current = _spotlight["default"].getCurrent();
142
+ if (current && scrollContainerRef.current) {
143
+ return _utilDOM["default"].containsDangerously(scrollContainerRef, current);
144
+ }
145
+ }
146
+
147
+ // Return
148
+
149
+ return {
150
+ calculateAndScrollTo: calculateAndScrollTo,
151
+ handleFocus: handleFocus,
152
+ hasFocus: hasFocus
153
+ };
154
+ };
155
+ var useEventKey = exports.useEventKey = function useEventKey(props, instances, context) {
156
+ var scrollMode = props.scrollMode;
157
+ var themeScrollContentHandle = instances.themeScrollContentHandle,
158
+ spottable = instances.spottable,
159
+ scrollContentRef = instances.scrollContentRef,
160
+ scrollContainerHandle = instances.scrollContainerHandle;
161
+ var checkAndApplyOverscrollEffectByDirection = context.checkAndApplyOverscrollEffectByDirection,
162
+ hasFocus = context.hasFocus,
163
+ isContent = context.isContent;
164
+
165
+ // Functions
166
+
167
+ function handleKeyDown(ev) {
168
+ var keyCode = ev.keyCode,
169
+ repeat = ev.repeat,
170
+ target = ev.target;
171
+ (0, _handle.forward)('onKeyDown', ev, props);
172
+ if (isPageUp(keyCode) || isPageDown(keyCode)) {
173
+ ev.preventDefault();
174
+ }
175
+ spottable.current.animateOnFocus = true;
176
+ if (!repeat && hasFocus()) {
177
+ var direction = null;
178
+ if (isPageUp(keyCode) || isPageDown(keyCode)) {
179
+ if (props.direction === 'vertical' || props.direction === 'both') {
180
+ direction = isPageUp(keyCode) ? 'up' : 'down';
181
+ if (isContent(target)) {
182
+ ev.stopPropagation();
183
+ scrollByPage(direction);
184
+ }
185
+ if (props.overscrollEffectOn.pageKey) {
186
+ checkAndApplyOverscrollEffectByDirection(direction);
187
+ }
188
+ }
189
+ } else if ((0, _spotlight.getDirection)(keyCode) && (scrollMode === 'translate' || scrollMode === 'native' && !_spotlight["default"].getPointerMode())) {
190
+ var element = _spotlight["default"].getCurrent();
191
+ scrollContainerHandle.current.lastInputType = 'arrowKey';
192
+ direction = (0, _spotlight.getDirection)(keyCode);
193
+ if (props.overscrollEffectOn.arrowKey && !(element ? (0, _target.getTargetByDirectionFromElement)(direction, element) : null)) {
194
+ checkAndApplyOverscrollEffectByDirection(direction);
195
+ }
196
+ }
197
+ }
198
+ }
199
+ function scrollByPage(pageKeyDirection) {
200
+ var scrollTop = scrollContainerHandle.current.scrollTop,
201
+ focusedItem = _spotlight["default"].getCurrent(),
202
+ bounds = scrollContainerHandle.current.getScrollBounds(),
203
+ isUp = pageKeyDirection === 'up',
204
+ directionFactor = isUp ? -1 : 1,
205
+ pageDistance = directionFactor * bounds.clientHeight * paginationPageMultiplier;
206
+ var direction = pageKeyDirection;
207
+ var scrollPossible = false;
208
+ if (scrollMode === 'translate') {
209
+ scrollPossible = isUp ? scrollTop > 0 : bounds.maxTop > scrollTop;
210
+ } else {
211
+ scrollPossible = isUp ? scrollTop > 0 : bounds.maxTop - scrollTop > epsilon;
212
+ }
213
+ scrollContainerHandle.current.lastInputType = 'pageKey';
214
+ if (directionFactor !== scrollContainerHandle.current.wheelDirection) {
215
+ scrollContainerHandle.current.isScrollAnimationTargetAccumulated = false;
216
+ scrollContainerHandle.current.wheelDirection = directionFactor;
217
+ }
218
+ if (scrollPossible) {
219
+ if (focusedItem) {
220
+ var contentNode = scrollContentRef.current;
221
+
222
+ // Should do nothing when focusedItem is paging control button of Scrollbar
223
+ if (_utilDOM["default"].containsDangerously(contentNode, focusedItem)) {
224
+ var contentRect = contentNode.getBoundingClientRect(),
225
+ clientRect = focusedItem.getBoundingClientRect(),
226
+ yAdjust = isUp ? 1 : -1,
227
+ x = (0, _util.clamp)(contentRect.left, contentRect.right, (clientRect.right + clientRect.left) / 2);
228
+ var y = 0;
229
+ if (bounds.maxTop - epsilon < scrollTop + pageDistance || epsilon > scrollTop + pageDistance) {
230
+ y = contentRect[isUp ? 'top' : 'bottom'] + yAdjust;
231
+ direction = isUp ? 'down' : 'up'; // Change direction to find target in the content
232
+ } else {
233
+ y = (0, _util.clamp)(contentRect.top, contentRect.bottom, (clientRect.bottom + clientRect.top) / 2);
234
+ }
235
+ focusedItem.blur();
236
+ if (!props['data-spotlight-container-disabled']) {
237
+ themeScrollContentHandle.current.setContainerDisabled(true);
238
+ }
239
+ if (themeScrollContentHandle.current.pauseSpotlight) {
240
+ themeScrollContentHandle.current.pauseSpotlight(true);
241
+ }
242
+ spottable.current.pointToFocus = {
243
+ direction: direction,
244
+ x: x,
245
+ y: y
246
+ };
247
+ }
248
+ } else {
249
+ spottable.current.pointToFocus = {
250
+ direction: direction,
251
+ x: lastPointer.x,
252
+ y: lastPointer.y
253
+ };
254
+ }
255
+ scrollContainerHandle.current.scrollToAccumulatedTarget(pageDistance, true, props.overscrollEffectOn.pageKey);
256
+ }
257
+ }
258
+ function scrollByPageOnPointerMode(ev) {
259
+ var keyCode = ev.keyCode,
260
+ repeat = ev.repeat;
261
+ (0, _handle.forward)('onKeyDown', ev, props);
262
+ ev.preventDefault();
263
+ spottable.current.animateOnFocus = true;
264
+ if (!repeat && (props.direction === 'vertical' || props.direction === 'both')) {
265
+ var direction = isPageUp(keyCode) ? 'up' : 'down';
266
+ scrollByPage(direction);
267
+ if (props.overscrollEffectOn.pageKey) {
268
+ /* if the spotlight focus will not move */
269
+ checkAndApplyOverscrollEffectByDirection(direction);
270
+ }
271
+ return true; // means consumed
272
+ }
273
+ return false; // means to be propagated
274
+ }
275
+
276
+ // Return
277
+
278
+ return {
279
+ handleKeyDown: handleKeyDown,
280
+ lastPointer: lastPointer,
281
+ scrollByPageOnPointerMode: scrollByPageOnPointerMode
282
+ };
283
+ };
284
+
285
+ /*
286
+ * Track the last position of the pointer to check if a list should scroll by
287
+ * page up/down keys when the pointer is on a list without any focused node.
288
+ * `keydown` event does not occur if there is no focus on the node and
289
+ * its descendants, we add `keydown` handler to `document` also.
290
+ */
291
+ var scrollers = new Map();
292
+
293
+ // An app could have lists and/or scrollers more than one,
294
+ // so we should test all of them when page up/down key is pressed.
295
+ var pointerTracker = function pointerTracker(ev) {
296
+ lastPointer.x = ev.clientX;
297
+ lastPointer.y = ev.clientY;
298
+ };
299
+ var pageKeyHandler = function pageKeyHandler(ev) {
300
+ var keyCode = ev.keyCode;
301
+ if (_spotlight["default"].getPointerMode() && !_spotlight["default"].getCurrent() && (isPageUp(keyCode) || isPageDown(keyCode))) {
302
+ var _lastPointer = lastPointer,
303
+ x = _lastPointer.x,
304
+ y = _lastPointer.y,
305
+ elem = document.elementFromPoint(x, y);
306
+ if (elem) {
307
+ var _iterator = _createForOfIteratorHelper(scrollers),
308
+ _step;
309
+ try {
310
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
311
+ var _step$value = _slicedToArray(_step.value, 2),
312
+ key = _step$value[0],
313
+ value = _step$value[1];
314
+ if (_utilDOM["default"].containsDangerously(value, elem)) {
315
+ /* To handle page keys in nested scrollable components,
316
+ * break the loop only when `scrollByPageOnPointerMode` returns `true`.
317
+ * This approach assumes that an inner scrollable component is
318
+ * mounted earlier than an outer scrollable component.
319
+ */
320
+ if (key.scrollByPageOnPointerMode(ev)) {
321
+ break;
322
+ }
323
+ }
324
+ }
325
+ } catch (err) {
326
+ _iterator.e(err);
327
+ } finally {
328
+ _iterator.f();
329
+ }
330
+ }
331
+ }
332
+ };
333
+ var useEventMonitor = exports.useEventMonitor = function useEventMonitor(props, instances, context) {
334
+ var scrollContainerRef = instances.scrollContainerRef;
335
+ var lastPointerProp = context.lastPointer,
336
+ scrollByPageOnPointerMode = context.scrollByPageOnPointerMode;
337
+
338
+ // Mutable value
339
+
340
+ var mutableRef = (0, _react.useRef)({
341
+ pageKeyHandlerObj: {
342
+ scrollByPageOnPointerMode: scrollByPageOnPointerMode
343
+ }
344
+ });
345
+ lastPointer = lastPointerProp;
346
+
347
+ // Hooks
348
+
349
+ (0, _react.useEffect)(function () {
350
+ var setMonitorEventTarget = function setMonitorEventTarget(target) {
351
+ scrollers.set(mutableRef.current.pageKeyHandlerObj, target);
352
+ };
353
+ var deleteMonitorEventTarget = function deleteMonitorEventTarget() {
354
+ scrollers["delete"](mutableRef.current.pageKeyHandlerObj);
355
+ };
356
+ setMonitorEventTarget(scrollContainerRef.current);
357
+ return function () {
358
+ // TODO: Replace `this` to something.
359
+ deleteMonitorEventTarget();
360
+ };
361
+ }, [scrollContainerRef]);
362
+ };
363
+ (0, _snapshot.onWindowReady)(function () {
364
+ (0, _utilEvent["default"])('mousemove').addEventListener(document, pointerTracker);
365
+ (0, _utilEvent["default"])('keydown').addEventListener(document, pageKeyHandler);
366
+ });
367
+ var useEventMouse = exports.useEventMouse = function useEventMouse(props, instances) {
368
+ var scrollMode = props.scrollMode;
369
+ var themeScrollContentHandle = instances.themeScrollContentHandle,
370
+ scrollContainerHandle = instances.scrollContainerHandle;
371
+
372
+ // Functions
373
+
374
+ function handleFlick(_ref) {
375
+ var direction = _ref.direction;
376
+ var _scrollContainerHandl = scrollContainerHandle.current,
377
+ canScrollHorizontally = _scrollContainerHandl.canScrollHorizontally,
378
+ canScrollVertically = _scrollContainerHandl.canScrollVertically,
379
+ bounds = scrollContainerHandle.current.getScrollBounds(),
380
+ focusedItem = _spotlight["default"].getCurrent();
381
+ if (focusedItem) {
382
+ focusedItem.blur();
383
+ }
384
+ if ((direction === 'vertical' && canScrollVertically(bounds) || direction === 'horizontal' && canScrollHorizontally(bounds)) && !props['data-spotlight-container-disabled']) {
385
+ themeScrollContentHandle.current.setContainerDisabled(true);
386
+ }
387
+ }
388
+ function handleMouseDown(ev) {
389
+ if (props['data-spotlight-container-disabled']) {
390
+ ev.preventDefault();
391
+ } else if (scrollMode === 'native') {
392
+ themeScrollContentHandle.current.setContainerDisabled(false);
393
+ }
394
+ }
395
+
396
+ // Return
397
+
398
+ return {
399
+ handleFlick: handleFlick,
400
+ handleMouseDown: handleMouseDown
401
+ };
402
+ };
403
+ var useEventTouch = exports.useEventTouch = function useEventTouch() {
404
+ // Functions
405
+
406
+ function handleTouchStart() {
407
+ var focusedItem = _spotlight["default"].getCurrent();
408
+ if (!_spotlight["default"].isPaused() && focusedItem) {
409
+ focusedItem.blur();
410
+ }
411
+ }
412
+
413
+ // Return
414
+
415
+ return {
416
+ handleTouchStart: handleTouchStart
417
+ };
418
+ };
419
+ var useEventVoice = exports.useEventVoice = function useEventVoice(props, instances) {
420
+ var scrollContainerRef = instances.scrollContainerRef,
421
+ scrollContainerHandle = instances.scrollContainerHandle;
422
+
423
+ // Mutable value
424
+
425
+ var mutableRef = (0, _react.useRef)({
426
+ isVoiceControl: false,
427
+ voiceControlDirection: 'vertical'
428
+ });
429
+
430
+ // Functions
431
+
432
+ var updateFocusAfterVoiceControl = function updateFocusAfterVoiceControl() {
433
+ var spotItem = _spotlight["default"].getCurrent(),
434
+ scrollContainerNode = scrollContainerRef.current;
435
+ if (spotItem) {
436
+ if (_utilDOM["default"].containsDangerously(scrollContainerNode, spotItem)) {
437
+ var viewportBounds = scrollContainerNode.getBoundingClientRect();
438
+ var spotItemBounds = spotItem.getBoundingClientRect();
439
+ var isVertical = mutableRef.current.voiceControlDirection === 'vertical';
440
+ var first = isVertical ? 'top' : 'left';
441
+ var last = isVertical ? 'bottom' : 'right';
442
+
443
+ /* if the focused element is out of the viewport, find another spottable element in the viewport */
444
+ if (spotItemBounds[last] <= viewportBounds[first] || spotItemBounds[first] >= viewportBounds[last]) {
445
+ var nodes = (0, _container.getDeepSpottableDescendants)(scrollContainerNode.dataset.spotlightId);
446
+ for (var i = 0; i < nodes.length; i++) {
447
+ var nodeBounds = nodes[i].getBoundingClientRect();
448
+ if (nodeBounds[first] >= viewportBounds[first] && nodeBounds[last] <= viewportBounds[last]) {
449
+ _spotlight["default"].focus(nodes[i]);
450
+ break;
451
+ }
452
+ }
453
+ }
454
+ }
455
+ } else if (scrollContainerNode) {
456
+ // There should be an element that receives focus even if spot Item disappears from the virtuallist or scroller
457
+ var backupNodes = (0, _container.getDeepSpottableDescendants)(scrollContainerNode.dataset.spotlightId);
458
+ _spotlight["default"].focus(backupNodes[0]);
459
+ }
460
+ };
461
+ function stopVoice() {
462
+ if (mutableRef.current.isVoiceControl) {
463
+ mutableRef.current.isVoiceControl = false;
464
+ updateFocusAfterVoiceControl();
465
+ }
466
+ }
467
+ var isReachedEdge = function isReachedEdge(scrollPos, ltrBound, rtlBound) {
468
+ var isRtl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
469
+ var bound = isRtl ? rtlBound : ltrBound;
470
+ return bound === 0 && scrollPos === 0 || bound > 0 && scrollPos >= bound - 1;
471
+ };
472
+ var handleVoice = function handleVoice(e) {
473
+ var isHorizontal = props.direction === 'horizontal',
474
+ isRtl = scrollContainerHandle.current.rtl,
475
+ _scrollContainerHandl2 = scrollContainerHandle.current,
476
+ scrollTop = _scrollContainerHandl2.scrollTop,
477
+ scrollLeft = _scrollContainerHandl2.scrollLeft,
478
+ _scrollContainerHandl3 = scrollContainerHandle.current.getScrollBounds(),
479
+ maxLeft = _scrollContainerHandl3.maxLeft,
480
+ maxTop = _scrollContainerHandl3.maxTop,
481
+ verticalDirection = ['up', 'down', 'top', 'bottom'],
482
+ horizontalDirection = isRtl ? ['right', 'left', 'rightmost', 'leftmost'] : ['left', 'right', 'leftmost', 'rightmost'],
483
+ movement = ['previous', 'next', 'first', 'last'];
484
+ var scroll = e && e.detail && e.detail.scroll,
485
+ index = movement.indexOf(scroll);
486
+ if (index > -1) {
487
+ scroll = isHorizontal ? horizontalDirection[index] : verticalDirection[index];
488
+ }
489
+ mutableRef.current.voiceControlDirection = verticalDirection.includes(scroll) && 'vertical' || horizontalDirection.includes(scroll) && 'horizontal' || null;
490
+
491
+ // Case 1. Invalid direction
492
+ if (mutableRef.current.voiceControlDirection === null) {
493
+ mutableRef.current.isVoiceControl = false;
494
+ // Case 2. Cannot scroll
495
+ } else if (['up', 'top'].includes(scroll) && isReachedEdge(scrollTop, 0) || ['down', 'bottom'].includes(scroll) && isReachedEdge(scrollTop, maxTop) || ['left', 'leftmost'].includes(scroll) && isReachedEdge(scrollLeft, 0, maxLeft, isRtl) || ['right', 'rightmost'].includes(scroll) && isReachedEdge(scrollLeft, maxLeft, 0, isRtl)) {
496
+ if (window.webOSVoiceReportActionResult) {
497
+ window.webOSVoiceReportActionResult({
498
+ voiceUi: {
499
+ exception: 'alreadyCompleted'
500
+ }
501
+ });
502
+ e.preventDefault();
503
+ }
504
+ // Case 3. Can scroll
505
+ } else {
506
+ mutableRef.current.isVoiceControl = true;
507
+ if (['up', 'down', 'left', 'right'].includes(scroll)) {
508
+ var bounds = scrollContainerHandle.current.getScrollBounds(),
509
+ directionFactor = scroll === 'up' || scroll === 'left' && !isRtl || scroll === 'right' && isRtl,
510
+ scrollVertically = verticalDirection.includes(scroll),
511
+ direction = directionFactor ? -1 : 1,
512
+ pageDistance = direction * (scrollVertically ? bounds.clientHeight : bounds.clientWidth) * paginationPageMultiplier;
513
+ scrollContainerHandle.current.lastInputType = 'pageKey';
514
+ if (direction !== scrollContainerHandle.current.wheelDirection) {
515
+ scrollContainerHandle.current.isScrollAnimationTargetAccumulated = false;
516
+ scrollContainerHandle.current.wheelDirection = direction;
517
+ }
518
+ scrollContainerHandle.current.scrollToAccumulatedTarget(pageDistance, scrollVertically, props.overscrollEffectOn.pageKey);
519
+ } else {
520
+ // ['top', 'bottom', 'leftmost', 'rightmost'].includes(scroll)
521
+ scrollContainerHandle.current.scrollTo({
522
+ align: verticalDirection.includes(scroll) && scroll || (scroll === 'leftmost' && isRtl || scroll === 'rightmost' && !isRtl) && 'right' || 'left'
523
+ });
524
+ }
525
+ e.preventDefault();
526
+ }
527
+ };
528
+ function addVoiceEventListener(scrollContentRef) {
529
+ if (_platform["default"].type === 'webos') {
530
+ (0, _utilEvent["default"])('webOSVoice').addEventListener(scrollContentRef, handleVoice);
531
+ if (scrollContainerHandle && scrollContainerHandle.current && scrollContainerHandle.current.getScrollBounds) {
532
+ var bounds = scrollContainerHandle.current.getScrollBounds();
533
+ if (scrollContainerHandle.current.canScrollVertically(bounds) || scrollContainerHandle.current.canScrollHorizontally(bounds)) {
534
+ scrollContentRef.current.setAttribute('data-webos-voice-intent', 'Scroll');
535
+ }
536
+ }
537
+ }
538
+ }
539
+ function removeVoiceEventListener(scrollContentRef) {
540
+ if (_platform["default"].type === 'webos') {
541
+ (0, _utilEvent["default"])('webOSVoice').removeEventListener(scrollContentRef, handleVoice);
542
+ scrollContentRef.current.removeAttribute('data-webos-voice-intent');
543
+ }
544
+ }
545
+
546
+ // Return
547
+
548
+ return {
549
+ addVoiceEventListener: addVoiceEventListener,
550
+ removeVoiceEventListener: removeVoiceEventListener,
551
+ stopVoice: stopVoice
552
+ };
553
+ };
554
+ var useEventWheel = exports.useEventWheel = function useEventWheel(props, instances) {
555
+ var dataSize = props.dataSize,
556
+ scrollMode = props.scrollMode,
557
+ snapToCenter = props.snapToCenter;
558
+ var themeScrollContentHandle = instances.themeScrollContentHandle,
559
+ scrollContainerHandle = instances.scrollContainerHandle,
560
+ scrollContentHandle = instances.scrollContentHandle,
561
+ scrollContentRef = instances.scrollContentRef,
562
+ spottable = instances.spottable;
563
+
564
+ // Functions
565
+ function initializeWheeling() {
566
+ if (!props['data-spotlight-container-disabled']) {
567
+ themeScrollContentHandle.current.setContainerDisabled(true);
568
+ }
569
+ spottable.current.isWheeling = true;
570
+ }
571
+ function handleWheel(_ref2) {
572
+ var delta = _ref2.delta;
573
+ var focusedItem = _spotlight["default"].getCurrent();
574
+ if (focusedItem) {
575
+ focusedItem.blur();
576
+ }
577
+ if (delta !== 0) {
578
+ initializeWheeling();
579
+ }
580
+ }
581
+
582
+ /*
583
+ * wheel event handler;
584
+ * - for horizontal scroll, supports wheel action on any children nodes since web engine cannot support this
585
+ * - for vertical scroll, supports wheel action on scrollbars only
586
+ */
587
+ function handleWheelNative(ev) {
588
+ var overscrollEffectRequired = props.overscrollEffectOn.wheel;
589
+ var bounds = scrollContainerHandle.current.getScrollBounds();
590
+ var canScrollHorizontally = scrollContainerHandle.current.canScrollHorizontally(bounds);
591
+ var canScrollVertically = scrollContainerHandle.current.canScrollVertically(bounds);
592
+ var eventDeltaMode = ev.deltaMode;
593
+ var eventDelta = -ev.wheelDeltaY || ev.deltaY;
594
+ var positiveDelta = eventDelta > 0;
595
+ var negativeDelta = eventDelta < 0;
596
+ var _scrollContainerHandl4 = scrollContainerHandle.current,
597
+ scrollTop = _scrollContainerHandl4.scrollTop,
598
+ scrollLeft = _scrollContainerHandl4.scrollLeft;
599
+ var offset = snapToCenter ? scrollContentHandle.current.primary.gridSize : 0;
600
+ var delta = 0;
601
+ var needToHideScrollbarTrack = false;
602
+ if (typeof window !== 'undefined') {
603
+ window.document.activeElement.blur();
604
+ }
605
+ scrollContainerHandle.current.showScrollbarTrack(bounds);
606
+
607
+ // FIXME This routine is a temporary support for horizontal wheel scroll.
608
+ // FIXME If web engine supports horizontal wheel, this routine should be refined or removed.
609
+ if (canScrollVertically) {
610
+ // This routine handles wheel events on scrollbars for vertical scroll.
611
+ if (negativeDelta && scrollTop > 0 + offset || positiveDelta && scrollTop < bounds.maxTop - offset) {
612
+ if (!spottable.current.isWheeling) {
613
+ initializeWheeling();
614
+ }
615
+
616
+ // If ev.target is a descendant of scrollContent, the event will be handled on scroll event handler.
617
+ if (!_utilDOM["default"].containsDangerously(scrollContentRef.current, ev.target) || snapToCenter) {
618
+ delta = scrollContainerHandle.current.calculateDistanceByWheel(eventDeltaMode, eventDelta, bounds.clientHeight * scrollWheelPageMultiplierForMaxPixel);
619
+ needToHideScrollbarTrack = !delta;
620
+ ev.preventDefault();
621
+ } else if (overscrollEffectRequired) {
622
+ scrollContainerHandle.current.checkAndApplyOverscrollEffect('vertical', positiveDelta ? 'after' : 'before', overscrollTypeOnce);
623
+ }
624
+ ev.stopPropagation();
625
+ } else {
626
+ if (overscrollEffectRequired && (negativeDelta && scrollTop <= 0 || positiveDelta && scrollTop >= bounds.maxTop)) {
627
+ scrollContainerHandle.current.applyOverscrollEffect('vertical', positiveDelta ? 'after' : 'before', overscrollTypeOnce);
628
+ }
629
+ needToHideScrollbarTrack = true;
630
+ }
631
+ } else if (canScrollHorizontally) {
632
+ // this routine handles wheel events on any children for horizontal scroll.
633
+ if (negativeDelta && scrollLeft > 0 + offset || positiveDelta && scrollLeft < bounds.maxLeft - offset) {
634
+ if (!spottable.current.isWheeling) {
635
+ initializeWheeling();
636
+ }
637
+ delta = scrollContainerHandle.current.calculateDistanceByWheel(eventDeltaMode, eventDelta, bounds.clientWidth * scrollWheelPageMultiplierForMaxPixel);
638
+ needToHideScrollbarTrack = !delta;
639
+ ev.preventDefault();
640
+ ev.stopPropagation();
641
+ } else {
642
+ if (overscrollEffectRequired && (negativeDelta && scrollLeft <= 0 || positiveDelta && scrollLeft >= bounds.maxLeft)) {
643
+ scrollContainerHandle.current.applyOverscrollEffect('horizontal', positiveDelta ? 'after' : 'before', overscrollTypeOnce);
644
+ }
645
+ needToHideScrollbarTrack = true;
646
+ }
647
+ }
648
+ if (delta !== 0) {
649
+ /* prevent native scrolling feature for vertical direction */
650
+ ev.preventDefault();
651
+ var direction = Math.sign(delta);
652
+
653
+ // Not to accumulate scroll position if wheel direction is different from hold direction
654
+ if (direction !== scrollContainerHandle.current.wheelDirection) {
655
+ scrollContainerHandle.current.isScrollAnimationTargetAccumulated = false;
656
+ scrollContainerHandle.current.wheelDirection = direction;
657
+ }
658
+ if (!snapToCenter) {
659
+ scrollContainerHandle.current.scrollToAccumulatedTarget(delta, canScrollVertically, overscrollEffectRequired);
660
+ } else {
661
+ var dimensionToExtent = scrollContentHandle.current.dimensionToExtent;
662
+ var currentIndex = scrollContentHandle.current.getCenterItemIndexFromScrollPosition(canScrollVertically ? scrollTop : scrollLeft);
663
+ var nextIndex = currentIndex + direction * dimensionToExtent;
664
+ if (nextIndex > 0 && nextIndex < dataSize - 1) {
665
+ if (typeof document === 'object') {
666
+ var target = scrollContentRef.current.querySelector("[data-index=\"".concat(nextIndex, "\"] > div"));
667
+
668
+ // remove effect
669
+ themeScrollContentHandle.current.removeScaleEffect();
670
+ // add effect
671
+ themeScrollContentHandle.current.addScaleEffect(target);
672
+ }
673
+ if (themeScrollContentHandle.current.resetSnapToCenterStatus) {
674
+ themeScrollContentHandle.current.resetSnapToCenterStatus();
675
+ }
676
+ scrollContainerHandle.current.scrollTo({
677
+ index: nextIndex,
678
+ stickTo: 'center'
679
+ });
680
+ }
681
+ }
682
+ }
683
+ if (needToHideScrollbarTrack) {
684
+ scrollContainerHandle.current.startHidingScrollbarTrack();
685
+ }
686
+ }
687
+
688
+ // Return
689
+
690
+ return {
691
+ handleWheel: scrollMode === 'translate' ? handleWheel : handleWheelNative
692
+ };
693
+ };