@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,324 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useEventKey = exports.useEventFocus = exports["default"] = void 0;
7
+ var _keymap = require("@enact/core/keymap");
8
+ var _spotlight = _interopRequireWildcard(require("@enact/spotlight"));
9
+ var _container = require("@enact/spotlight/src/container");
10
+ var _target = require("@enact/spotlight/src/target");
11
+ var _utilDOM = _interopRequireDefault(require("@enact/ui/useScroll/utilDOM"));
12
+ var _utilEvent = _interopRequireDefault(require("@enact/ui/useScroll/utilEvent"));
13
+ var _clamp = _interopRequireDefault(require("ramda/src/clamp"));
14
+ var _react = require("react");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
16
+ 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); }
17
+ var isDown = (0, _keymap.is)('down'),
18
+ isEnter = (0, _keymap.is)('enter'),
19
+ isLeft = (0, _keymap.is)('left'),
20
+ isPageUp = (0, _keymap.is)('pageUp'),
21
+ isPageDown = (0, _keymap.is)('pageDown'),
22
+ isRight = (0, _keymap.is)('right'),
23
+ isUp = (0, _keymap.is)('up'),
24
+ isPointerHide = (0, _keymap.is)('pointerHide'),
25
+ getNumberValue = function getNumberValue(index) {
26
+ // using '+ operator' for string > number conversion based on performance: https://jsperf.com/convert-string-to-number-techniques/7
27
+ var number = +index;
28
+ // should return -1 if index is not a number or a negative value
29
+ return number >= 0 ? number : -1;
30
+ };
31
+ var prevKeyDownIndex = -1;
32
+ var useEventKey = exports.useEventKey = function useEventKey(props, instances, context) {
33
+ // Mutable value
34
+
35
+ var mutableRef = (0, _react.useRef)({
36
+ fn: null
37
+ });
38
+
39
+ // Functions
40
+
41
+ var findSpottableItem = (0, _react.useCallback)(function (indexFrom, indexTo) {
42
+ var dataSize = props.dataSize;
43
+ if (indexFrom < 0 && indexTo < 0 || indexFrom >= dataSize && indexTo >= dataSize) {
44
+ return -1;
45
+ } else {
46
+ return (0, _clamp["default"])(0, dataSize - 1, indexFrom);
47
+ }
48
+ }, [props]);
49
+ var getNextIndex = (0, _react.useCallback)(function (_ref) {
50
+ var index = _ref.index,
51
+ keyCode = _ref.keyCode,
52
+ repeat = _ref.repeat;
53
+ var dataSize = props.dataSize,
54
+ rtl = props.rtl,
55
+ wrap = props.wrap;
56
+ var scrollContentHandle = instances.scrollContentHandle;
57
+ var _scrollContentHandle$ = scrollContentHandle.current,
58
+ isPrimaryDirectionVertical = _scrollContentHandle$.isPrimaryDirectionVertical,
59
+ dimensionToExtent = _scrollContentHandle$.dimensionToExtent;
60
+ var column = index % dimensionToExtent;
61
+ var row = (index - column) % dataSize / dimensionToExtent;
62
+ var isDownKey = isDown(keyCode);
63
+ var isLeftMovement = !rtl && isLeft(keyCode) || rtl && isRight(keyCode);
64
+ var isRightMovement = !rtl && isRight(keyCode) || rtl && isLeft(keyCode);
65
+ var isUpKey = isUp(keyCode);
66
+ var isNextRow = index + dimensionToExtent < dataSize;
67
+ var isNextAdjacent = column < dimensionToExtent - 1 && index < dataSize - 1;
68
+ var isBackward = isPrimaryDirectionVertical && isUpKey || !isPrimaryDirectionVertical && isLeftMovement || null;
69
+ var isForward = isPrimaryDirectionVertical && isDownKey || !isPrimaryDirectionVertical && isRightMovement || null;
70
+ var isWrapped = false;
71
+ var nextIndex = -1;
72
+ var targetIndex = -1;
73
+ if (index >= 0) {
74
+ if (isPrimaryDirectionVertical) {
75
+ if (isUpKey && row) {
76
+ targetIndex = index - dimensionToExtent;
77
+ } else if (isDownKey && isNextRow) {
78
+ targetIndex = index + dimensionToExtent;
79
+ } else if (isLeftMovement && column) {
80
+ targetIndex = index - 1;
81
+ } else if (isRightMovement && isNextAdjacent) {
82
+ targetIndex = index + 1;
83
+ }
84
+ } else if (isLeftMovement && row) {
85
+ targetIndex = index - dimensionToExtent;
86
+ } else if (isRightMovement && isNextRow) {
87
+ targetIndex = index + dimensionToExtent;
88
+ } else if (isUpKey && column) {
89
+ targetIndex = index - 1;
90
+ } else if (isDownKey && isNextAdjacent) {
91
+ targetIndex = index + 1;
92
+ }
93
+ if (targetIndex >= 0) {
94
+ nextIndex = targetIndex;
95
+ }
96
+ }
97
+ if (!repeat && nextIndex === -1 && wrap) {
98
+ if (isForward && findSpottableItem((row + 1) * dimensionToExtent, dataSize) < 0) {
99
+ nextIndex = findSpottableItem(0, index);
100
+ isWrapped = true;
101
+ } else if (isBackward && findSpottableItem(-1, row * dimensionToExtent - 1) < 0) {
102
+ nextIndex = findSpottableItem(dataSize, index);
103
+ isWrapped = true;
104
+ }
105
+ }
106
+ return {
107
+ isDownKey: isDownKey,
108
+ isUpKey: isUpKey,
109
+ isLeftMovement: isLeftMovement,
110
+ isRightMovement: isRightMovement,
111
+ isWrapped: isWrapped,
112
+ nextIndex: nextIndex
113
+ };
114
+ }, [findSpottableItem, props, instances]);
115
+
116
+ // Hooks
117
+
118
+ (0, _react.useEffect)(function () {
119
+ var scrollContainerRef = instances.scrollContainerRef,
120
+ scrollContentHandle = instances.scrollContentHandle;
121
+ var handle5WayKeyUp = context.handle5WayKeyUp,
122
+ handleDirectionKeyDown = context.handleDirectionKeyDown,
123
+ handlePageUpDownKeyDown = context.handlePageUpDownKeyDown,
124
+ spotlightAcceleratorProcessKey = context.spotlightAcceleratorProcessKey;
125
+ function handleKeyDown(ev) {
126
+ var keyCode = ev.keyCode,
127
+ target = ev.target;
128
+ var direction = (0, _spotlight.getDirection)(keyCode);
129
+ if (direction) {
130
+ _spotlight["default"].setPointerMode(false);
131
+ if (spotlightAcceleratorProcessKey(ev)) {
132
+ ev.stopPropagation();
133
+ } else {
134
+ var spotlightId = props.spotlightId;
135
+ var targetIndex = target.dataset.index;
136
+ var isNotItem =
137
+ // if target has an index, it must be an item
138
+ !targetIndex &&
139
+ // if it lacks an index and is inside the scroller, we need to handle this
140
+ target.matches("[data-spotlight-id=\"".concat(spotlightId, "\"] *"));
141
+ var index = !isNotItem ? getNumberValue(targetIndex) : -1;
142
+ var candidate = (0, _target.getTargetByDirectionFromElement)(direction, target);
143
+ var candidateInside = _utilDOM["default"].containsDangerously(ev.currentTarget, candidate);
144
+ var candidateIndex = candidate && candidateInside && candidate.dataset && getNumberValue(candidate.dataset.index);
145
+ var isLeaving = false;
146
+ if (isNotItem) {
147
+ // if the focused node is not an item
148
+ if (!candidateInside) {
149
+ // if the candidate is out of a list
150
+ isLeaving = true;
151
+ }
152
+ } else if (index >= 0 && candidateIndex !== index) {
153
+ // the focused node is an item and focus will move out of the item
154
+ var repeat = ev.repeat;
155
+ var _getNextIndex = getNextIndex({
156
+ index: index,
157
+ keyCode: keyCode,
158
+ repeat: repeat
159
+ }),
160
+ isDownKey = _getNextIndex.isDownKey,
161
+ isUpKey = _getNextIndex.isUpKey,
162
+ isLeftMovement = _getNextIndex.isLeftMovement,
163
+ isRightMovement = _getNextIndex.isRightMovement,
164
+ isWrapped = _getNextIndex.isWrapped,
165
+ nextIndex = _getNextIndex.nextIndex;
166
+ if (nextIndex >= 0) {
167
+ // if the candidate is another item
168
+ ev.preventDefault();
169
+ ev.stopPropagation();
170
+ if (repeat && prevKeyDownIndex !== -1 && (isDownKey && prevKeyDownIndex > index || isUpKey && prevKeyDownIndex < index)) {
171
+ // Ignore keyEvent from item with wrong data-index (Workaround for data-index bug)
172
+ // Sometimes keyDown event occurs before the data-index updated, it causes reverse focus change
173
+ return;
174
+ }
175
+ if (props.scrollContainerHandle && props.scrollContainerHandle.current) {
176
+ props.scrollContainerHandle.current.lastInputType = 'arrowKey';
177
+ }
178
+ handleDirectionKeyDown(ev, 'acceleratedKeyDown', {
179
+ isWrapped: isWrapped,
180
+ keyCode: keyCode,
181
+ nextIndex: nextIndex,
182
+ repeat: repeat,
183
+ target: target
184
+ });
185
+ } else {
186
+ // if the candidate is not found
187
+ var dataSize = props.dataSize,
188
+ focusableScrollbar = props.focusableScrollbar,
189
+ isHorizontalScrollbarVisible = props.isHorizontalScrollbarVisible,
190
+ isVerticalScrollbarVisible = props.isVerticalScrollbarVisible;
191
+ var _scrollContentHandle$2 = scrollContentHandle.current,
192
+ dimensionToExtent = _scrollContentHandle$2.dimensionToExtent,
193
+ isPrimaryDirectionVertical = _scrollContentHandle$2.isPrimaryDirectionVertical;
194
+ var column = index % dimensionToExtent;
195
+ var row = (index - column) % dataSize / dimensionToExtent;
196
+ var directions = {};
197
+ var isScrollbarVisible;
198
+ if (isPrimaryDirectionVertical) {
199
+ directions.left = isLeftMovement;
200
+ directions.right = isRightMovement;
201
+ directions.up = isUpKey;
202
+ directions.down = isDownKey;
203
+ isScrollbarVisible = isVerticalScrollbarVisible;
204
+ } else {
205
+ directions.left = isUpKey;
206
+ directions.right = isDownKey;
207
+ directions.up = isLeftMovement;
208
+ directions.down = isRightMovement;
209
+ isScrollbarVisible = isHorizontalScrollbarVisible;
210
+ }
211
+ isLeaving = directions.up && row === 0 || directions.down && row === Math.floor((dataSize - 1) % dataSize / dimensionToExtent) || directions.left && column === 0 || directions.right && (!focusableScrollbar || !isScrollbarVisible) && (column === dimensionToExtent - 1 || index === dataSize - 1 && row === 0);
212
+
213
+ /* istanbul ignore next */
214
+ if (isLeaving) {
215
+ if (repeat) {
216
+ var _getContainerConfig;
217
+ // if focus is about to leave items by holding down an arrowy key
218
+ ev.preventDefault();
219
+ if (spotlightId && !((_getContainerConfig = (0, _container.getContainerConfig)(spotlightId)) !== null && _getContainerConfig !== void 0 && _getContainerConfig.continue5WayHold)) {
220
+ ev.stopPropagation();
221
+ }
222
+ } else if (!candidate && ev.timeStamp - mutableRef.current.pointerHideTimeStamp < 30) {
223
+ // No candidate
224
+ // Spotlight will focus the same item again, then a list scrolls to show the focused item
225
+ // 30 is an arbitrary value
226
+ target.blur();
227
+ mutableRef.current.pointerHideTimeStamp = 0;
228
+ }
229
+ } else {
230
+ handleDirectionKeyDown(ev, 'keyDown', {
231
+ direction: direction,
232
+ keyCode: keyCode,
233
+ repeat: repeat,
234
+ target: target
235
+ });
236
+ }
237
+ }
238
+ }
239
+ prevKeyDownIndex = index;
240
+ if (isLeaving) {
241
+ handleDirectionKeyDown(ev, 'keyLeave');
242
+ }
243
+ }
244
+ } else if (isPageUp(keyCode) || isPageDown(keyCode)) {
245
+ handlePageUpDownKeyDown();
246
+ } else if (isPointerHide(keyCode)) {
247
+ /* istanbul ignore next */
248
+ mutableRef.current.pointerHideTimeStamp = ev.timeStamp;
249
+ }
250
+ }
251
+ function handleKeyUp(_ref2) {
252
+ var keyCode = _ref2.keyCode;
253
+ if ((0, _spotlight.getDirection)(keyCode) || isEnter(keyCode)) {
254
+ handle5WayKeyUp();
255
+ }
256
+ }
257
+ (0, _utilEvent["default"])('keydown').addEventListener(scrollContainerRef, handleKeyDown, {
258
+ capture: true
259
+ });
260
+ (0, _utilEvent["default"])('keyup').addEventListener(scrollContainerRef, handleKeyUp, {
261
+ capture: true
262
+ });
263
+ return function () {
264
+ (0, _utilEvent["default"])('keydown').removeEventListener(scrollContainerRef, handleKeyDown, {
265
+ capture: true
266
+ });
267
+ (0, _utilEvent["default"])('keyup').removeEventListener(scrollContainerRef, handleKeyUp, {
268
+ capture: true
269
+ });
270
+ };
271
+ }, [getNextIndex, props, instances, context]);
272
+
273
+ // Functions
274
+
275
+ function addGlobalKeyDownEventListener(fn) {
276
+ mutableRef.current.fn = fn;
277
+ (0, _utilEvent["default"])('keydown').addEventListener(document, mutableRef.current.fn, {
278
+ capture: true
279
+ });
280
+ }
281
+ function removeGlobalKeyDownEventListener() {
282
+ (0, _utilEvent["default"])('keydown').removeEventListener(document, mutableRef.current.fn, {
283
+ capture: true
284
+ });
285
+ mutableRef.current.fn = null;
286
+ }
287
+
288
+ // Return
289
+
290
+ return {
291
+ addGlobalKeyDownEventListener: addGlobalKeyDownEventListener,
292
+ removeGlobalKeyDownEventListener: removeGlobalKeyDownEventListener
293
+ };
294
+ };
295
+ var useEventFocus = exports.useEventFocus = function useEventFocus(props, instances, context) {
296
+ var scrollContainerRef = instances.scrollContainerRef,
297
+ scrollContentHandle = instances.scrollContentHandle;
298
+ var removeScaleEffect = context.removeScaleEffect;
299
+ (0, _react.useEffect)(function () {
300
+ function handleFocus(ev) {
301
+ // only for VirtualGridList
302
+ // To make the focused item cover other near items
303
+ // We need to find out the general solution for multiple spottable inside of one item
304
+ if (ev.target && scrollContentHandle.current && scrollContentHandle.current.isItemSized) {
305
+ ev.target.parentNode.style.setProperty('z-index', 1);
306
+ removeScaleEffect();
307
+ }
308
+ }
309
+ function handleBlur(ev) {
310
+ // only for VirtualGridList
311
+ // To make the blurred item normal
312
+ if (ev.target && scrollContentHandle.current && scrollContentHandle.current.isItemSized) {
313
+ ev.target.parentNode.style.setProperty('z-index', null);
314
+ }
315
+ }
316
+ (0, _utilEvent["default"])('focusin').addEventListener(scrollContainerRef, handleFocus);
317
+ (0, _utilEvent["default"])('focusout').addEventListener(scrollContainerRef, handleBlur);
318
+ return function () {
319
+ (0, _utilEvent["default"])('focusin').removeEventListener(scrollContainerRef, handleFocus);
320
+ (0, _utilEvent["default"])('focusout').removeEventListener(scrollContainerRef, handleBlur);
321
+ };
322
+ });
323
+ };
324
+ var _default = exports["default"] = useEventKey;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.usePreventScroll = exports["default"] = void 0;
7
+ var _utilEvent = _interopRequireDefault(require("@enact/ui/useScroll/utilEvent"));
8
+ var _react = require("react");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ var usePreventScroll = exports.usePreventScroll = function usePreventScroll(props, instances) {
11
+ // Hooks
12
+
13
+ (0, _react.useEffect)(function () {
14
+ var rtl = props.rtl,
15
+ scrollMode = props.scrollMode;
16
+ var scrollContentRef = instances.scrollContentRef;
17
+ var scrollContentNode = scrollContentRef.current;
18
+ if (scrollMode === 'translate' && scrollContentNode) {
19
+ var preventScroll = function preventScroll() {
20
+ scrollContentNode.scrollTop = 0;
21
+ scrollContentNode.scrollLeft = rtl ? scrollContentNode.scrollWidth : 0;
22
+ };
23
+ (0, _utilEvent["default"])('scroll').addEventListener(scrollContentNode, preventScroll);
24
+ return function () {
25
+ // remove a function for preventing native scrolling by Spotlight
26
+ (0, _utilEvent["default"])('scroll').removeEventListener(scrollContentNode, preventScroll);
27
+ };
28
+ }
29
+ }, [props, instances]);
30
+ };
31
+ var _default = exports["default"] = usePreventScroll;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSpotlightRestore = exports.useSpotlightConfig = void 0;
7
+ var _spotlight = _interopRequireDefault(require("@enact/spotlight"));
8
+ var _utilDOM = _interopRequireDefault(require("@enact/ui/useScroll/utilDOM"));
9
+ var _react = require("react");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
+ var useSpotlightConfig = exports.useSpotlightConfig = function useSpotlightConfig(props, instances) {
12
+ // Hooks
13
+
14
+ (0, _react.useEffect)(function () {
15
+ function lastFocusedPersist() {
16
+ var lastFocusedIndex = instances.spottable.current.lastFocusedIndex;
17
+ if (lastFocusedIndex != null) {
18
+ return {
19
+ container: false,
20
+ element: true,
21
+ key: lastFocusedIndex
22
+ };
23
+ }
24
+ }
25
+ function lastFocusedRestore(_ref, all) {
26
+ var key = _ref.key;
27
+ var placeholder = all.find(function (el) {
28
+ return 'vlPlaceholder' in el.dataset;
29
+ });
30
+ if (placeholder) {
31
+ placeholder.dataset.index = key;
32
+ return placeholder;
33
+ }
34
+ return all.reduce(function (focused, node) {
35
+ return focused || Number(node.dataset.index) === key && node;
36
+ }, null);
37
+ }
38
+ function configureSpotlight() {
39
+ var spacing = props.spacing,
40
+ spotlightId = props.spotlightId;
41
+ _spotlight["default"].set(spotlightId, {
42
+ enterTo: 'last-focused',
43
+ /*
44
+ * Returns the data-index as the key for last focused
45
+ */
46
+ lastFocusedPersist: lastFocusedPersist,
47
+ /*
48
+ * Restores the data-index into the placeholder if it's the only element. Tries to find a
49
+ * matching child otherwise.
50
+ */
51
+ lastFocusedRestore: lastFocusedRestore,
52
+ /*
53
+ * Directs spotlight focus to favor straight elements that are within range of `spacing`
54
+ * over oblique elements, like scroll buttons.
55
+ */
56
+ obliqueMultiplier: spacing > 0 ? spacing : 1
57
+ });
58
+ }
59
+ configureSpotlight();
60
+ }, [props, instances]);
61
+ };
62
+ var getNumberValue = function getNumberValue(index) {
63
+ // using '+ operator' for string > number conversion based on performance: https://jsperf.com/convert-string-to-number-techniques/7
64
+ var number = +index;
65
+ // should return -1 if index is not a number or a negative value
66
+ return number >= 0 ? number : -1;
67
+ };
68
+ var useSpotlightRestore = exports.useSpotlightRestore = function useSpotlightRestore(props, instances, context) {
69
+ var scrollContentRef = instances.scrollContentRef,
70
+ spottable = instances.spottable;
71
+ var focusByIndex = context.focusByIndex,
72
+ getItemNode = context.getItemNode;
73
+
74
+ // Mutable value
75
+
76
+ var mutableRef = (0, _react.useRef)({
77
+ preservedIndex: false,
78
+ lastSpotlightDirection: null,
79
+ restoreLastFocused: false
80
+ });
81
+
82
+ // Hooks
83
+
84
+ (0, _react.useEffect)(restoreFocus);
85
+
86
+ // Functions
87
+
88
+ function handlePlaceholderFocus(ev) {
89
+ var placeholder = ev.currentTarget;
90
+ if (placeholder) {
91
+ var index = placeholder.dataset.index;
92
+ if (index) {
93
+ mutableRef.current.preservedIndex = getNumberValue(index);
94
+ mutableRef.current.lastSpotlightDirection = null;
95
+ mutableRef.current.restoreLastFocused = true;
96
+ }
97
+ }
98
+ }
99
+ function isPlaceholderFocused() {
100
+ var current = _spotlight["default"].getCurrent();
101
+ if (current && current.dataset.vlPlaceholder && _utilDOM["default"].containsDangerously(scrollContentRef.current, current)) {
102
+ return true;
103
+ }
104
+ return false;
105
+ }
106
+ function restoreFocus() {
107
+ if (mutableRef.current.restoreLastFocused && !isPlaceholderFocused()) {
108
+ var spotlightId = props.spotlightId,
109
+ itemNode = getItemNode(mutableRef.current.preservedIndex);
110
+ if (itemNode) {
111
+ // if we're supposed to restore focus and virtual list has positioned a set of items
112
+ // that includes lastFocusedIndex, clear the indicator
113
+ mutableRef.current.restoreLastFocused = false;
114
+
115
+ // try to focus the last focused item
116
+ spottable.current.isScrolledByJump = true;
117
+ var foundLastFocused = focusByIndex(mutableRef.current.preservedIndex, mutableRef.current.lastSpotlightDirection);
118
+ spottable.current.isScrolledByJump = false;
119
+
120
+ // but if that fails (because it isn't found or is disabled), focus the container so
121
+ // spotlight isn't lost
122
+ if (!foundLastFocused) {
123
+ mutableRef.current.restoreLastFocused = true;
124
+ _spotlight["default"].focus(spotlightId);
125
+ }
126
+ }
127
+ }
128
+ }
129
+ function handleRestoreLastFocus(_ref2) {
130
+ var firstIndex = _ref2.firstIndex,
131
+ lastIndex = _ref2.lastIndex;
132
+ if (mutableRef.current.restoreLastFocused && mutableRef.current.preservedIndex >= firstIndex && mutableRef.current.preservedIndex <= lastIndex) {
133
+ restoreFocus();
134
+ }
135
+ }
136
+ function updateStatesAndBounds(_ref3) {
137
+ var dataSize = _ref3.dataSize,
138
+ moreInfo = _ref3.moreInfo,
139
+ numOfItems = _ref3.numOfItems;
140
+ return mutableRef.current.restoreLastFocused && numOfItems > 0 && mutableRef.current.preservedIndex < dataSize && (mutableRef.current.preservedIndex < moreInfo.firstVisibleIndex || mutableRef.current.preservedIndex > moreInfo.lastVisibleIndex);
141
+ }
142
+ function setPreservedIndex(index) {
143
+ var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
144
+ mutableRef.current.preservedIndex = index;
145
+ mutableRef.current.lastSpotlightDirection = direction;
146
+ mutableRef.current.restoreLastFocused = true;
147
+ }
148
+
149
+ // Return
150
+
151
+ return {
152
+ handlePlaceholderFocus: handlePlaceholderFocus,
153
+ handleRestoreLastFocus: handleRestoreLastFocus,
154
+ setPreservedIndex: setPreservedIndex,
155
+ updateStatesAndBounds: updateStatesAndBounds
156
+ };
157
+ };