@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,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useOverscrollEffect = exports["default"] = void 0;
7
+ var _util = require("@enact/core/util");
8
+ var _resolution = _interopRequireDefault(require("@enact/ui/resolution"));
9
+ var _useScroll = require("@enact/ui/useScroll");
10
+ var _react = require("react");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
+ var overscrollTypeDone = _useScroll.constants.overscrollTypeDone,
13
+ overscrollTypeHold = _useScroll.constants.overscrollTypeHold,
14
+ overscrollTypeNone = _useScroll.constants.overscrollTypeNone,
15
+ overscrollTypeOnce = _useScroll.constants.overscrollTypeOnce,
16
+ overscrollTransitionPrefix = '--scroll-overscroll-transition-',
17
+ overscrollTranslatePrefix = '--scroll-overscroll-translate-',
18
+ overscrollTransitionStart = 'transform 300ms cubic-bezier(0.5, 1, 0.89, 1)',
19
+ overscrollTransitionEnd = 'transform 500ms cubic-bezier(0.34, 1.56, 0.64, 1)',
20
+ overscrollMaxTranslate = _resolution["default"].scale(180),
21
+ overscrollTimeout = 220;
22
+ var useOverscrollEffect = exports.useOverscrollEffect = function useOverscrollEffect(props, instances) {
23
+ var scrollContainerHandle = instances.scrollContainerHandle,
24
+ scrollContentRef = instances.scrollContentRef;
25
+
26
+ // Mutable value
27
+
28
+ var mutableRef = (0, _react.useRef)({
29
+ overscrollJobs: {
30
+ horizontal: {
31
+ before: null,
32
+ after: null
33
+ },
34
+ vertical: {
35
+ before: null,
36
+ after: null
37
+ }
38
+ }
39
+ });
40
+
41
+ // Hooks
42
+
43
+ var applyOverscrollEffect = (0, _react.useCallback)(function (orientation, edge, type, ratio) {
44
+ var isHorizontal = orientation === 'horizontal';
45
+ if (type !== overscrollTypeHold && scrollContentRef.current) {
46
+ var effectSize = ratio * (edge === 'before' ? 1 : -1) * (isHorizontal && scrollContainerHandle.current.rtl ? -1 : 1) * overscrollMaxTranslate,
47
+ translate = "translate".concat(isHorizontal ? 'X' : 'Y', "(").concat(effectSize, "px)"),
48
+ transition = ratio !== 0 ? overscrollTransitionStart : overscrollTransitionEnd;
49
+ scrollContentRef.current.style.setProperty(overscrollTranslatePrefix + orientation, translate);
50
+ scrollContentRef.current.style.setProperty(overscrollTransitionPrefix + orientation, transition);
51
+ if (type === overscrollTypeOnce) {
52
+ mutableRef.current.overscrollJobs[orientation][edge].start(orientation, edge, overscrollTypeDone, 0);
53
+ }
54
+ }
55
+ }, [scrollContainerHandle, scrollContentRef]);
56
+ (0, _react.useEffect)(function () {
57
+ function createOverscrollJob(orientation, edge) {
58
+ if (!mutableRef.current.overscrollJobs[orientation][edge]) {
59
+ mutableRef.current.overscrollJobs[orientation][edge] = new _util.Job(applyOverscrollEffect, overscrollTimeout);
60
+ }
61
+ }
62
+ function stopOverscrollJob(orientation, edge) {
63
+ var job = mutableRef.current.overscrollJobs[orientation][edge];
64
+ if (job) {
65
+ job.stop();
66
+ }
67
+ }
68
+ createOverscrollJob('horizontal', 'before');
69
+ createOverscrollJob('horizontal', 'after');
70
+ createOverscrollJob('vertical', 'before');
71
+ createOverscrollJob('vertical', 'after');
72
+ return function () {
73
+ stopOverscrollJob('horizontal', 'before');
74
+ stopOverscrollJob('horizontal', 'after');
75
+ stopOverscrollJob('vertical', 'before');
76
+ stopOverscrollJob('vertical', 'after');
77
+ };
78
+ }, [applyOverscrollEffect]);
79
+
80
+ // Functions
81
+
82
+ function clearOverscrollEffect(orientation, edge) {
83
+ mutableRef.current.overscrollJobs[orientation][edge].startAfter(overscrollTimeout, orientation, edge, overscrollTypeNone, 0);
84
+ scrollContainerHandle.current.setOverscrollStatus(orientation, edge, overscrollTypeNone, 0);
85
+ }
86
+ function checkAndApplyOverscrollEffectByDirection(direction) {
87
+ var orientation = direction === 'up' || direction === 'down' ? 'vertical' : 'horizontal',
88
+ bounds = scrollContainerHandle.current.getScrollBounds(),
89
+ scrollability = orientation === 'vertical' ? scrollContainerHandle.current.canScrollVertically(bounds) : scrollContainerHandle.current.canScrollHorizontally(bounds);
90
+ if (scrollability) {
91
+ var isRtl = scrollContainerHandle.current.rtl,
92
+ edge = direction === 'up' || !isRtl && direction === 'left' || isRtl && direction === 'right' ? 'before' : 'after';
93
+ scrollContainerHandle.current.checkAndApplyOverscrollEffect(orientation, edge, overscrollTypeOnce);
94
+ }
95
+ }
96
+
97
+ // Return
98
+
99
+ return {
100
+ applyOverscrollEffect: applyOverscrollEffect,
101
+ checkAndApplyOverscrollEffectByDirection: checkAndApplyOverscrollEffectByDirection,
102
+ clearOverscrollEffect: clearOverscrollEffect
103
+ };
104
+ };
105
+ var _default = exports["default"] = useOverscrollEffect;
@@ -0,0 +1,523 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useScroll = exports["default"] = exports.dataIndexAttribute = exports.affordanceSize = void 0;
7
+ var _handle = require("@enact/core/handle");
8
+ var _platform = _interopRequireDefault(require("@enact/core/platform"));
9
+ var _spotlight = _interopRequireWildcard(require("@enact/spotlight"));
10
+ var _Spottable = require("@enact/spotlight/Spottable");
11
+ var _container = require("@enact/spotlight/src/container");
12
+ var _target = require("@enact/spotlight/src/target");
13
+ var _utils = require("@enact/spotlight/src/utils");
14
+ var _useScroll = require("@enact/ui/useScroll");
15
+ var _utilDOM = _interopRequireDefault(require("@enact/ui/useScroll/utilDOM"));
16
+ var _utilEvent = _interopRequireDefault(require("@enact/ui/useScroll/utilEvent"));
17
+ var _react = require("react");
18
+ var _$L = _interopRequireDefault(require("../internal/$L"));
19
+ var _SharedStateDecorator = require("../internal/SharedStateDecorator");
20
+ var _useThemeScrollContentHandle = require("./useThemeScrollContentHandle");
21
+ var _useEvent = require("./useEvent");
22
+ var _useOverscrollEffect2 = _interopRequireDefault(require("./useOverscrollEffect"));
23
+ var _useSpotlight = require("./useSpotlight");
24
+ var _OverscrollEffectModule = _interopRequireDefault(require("./OverscrollEffect.module.css"));
25
+ var _useScrollModule = _interopRequireDefault(require("./useScroll.module.css"));
26
+ var _excluded = ["className", "data-spotlight-container", "data-spotlight-container-disabled", "data-spotlight-id", "data-webos-voice-disabled", "data-webos-voice-focused", "data-webos-voice-group-label", "editable", "focusableScrollbar", "fadeOut", "horizontalScrollThumbAriaLabel", "noAffordance", "scrollMode", "snapToCenter", "style", "verticalScrollThumbAriaLabel"];
27
+ 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); }
28
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
29
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
30
+ 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."); }
31
+ 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; } }
32
+ 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; }
33
+ 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; } }
34
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
35
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
36
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
37
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
38
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
39
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
40
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
41
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
42
+ * Limestone-themed scrollable hook and behaviors.
43
+ *
44
+ * @module limestone/useScroll
45
+ * @exports affordanceSize
46
+ * @exports dataIndexAttribute
47
+ * @exports useScroll
48
+ * @private
49
+ */
50
+ var arrowKeyMultiplier = 0.2,
51
+ affordanceSize = exports.affordanceSize = 48,
52
+ paginationPageMultiplier = _useScroll.constants.paginationPageMultiplier,
53
+ reverseDirections = {
54
+ down: 'up',
55
+ up: 'down'
56
+ };
57
+
58
+ /**
59
+ * The name of a custom attribute which indicates the index of an item in
60
+ * {@link limestone/VirtualList.VirtualList|VirtualList} or
61
+ * {@link limestone/VirtualList.VirtualGridList|VirtualGridList}.
62
+ *
63
+ * @constant dataIndexAttribute
64
+ * @memberof limestone/useScroll
65
+ * @type {String}
66
+ * @private
67
+ */
68
+ var dataIndexAttribute = exports.dataIndexAttribute = 'data-index';
69
+ var isIntersecting = function isIntersecting(elem, container) {
70
+ return elem && (0, _utils.intersects)((0, _utils.getRect)(container), (0, _utils.getRect)(elem));
71
+ };
72
+ var getIntersectingElement = function getIntersectingElement(elem, container) {
73
+ return isIntersecting(elem, container) && elem;
74
+ };
75
+ var getTargetInViewByDirectionFromPosition = function getTargetInViewByDirectionFromPosition(direction, position, container) {
76
+ var target = (0, _target.getTargetByDirectionFromPosition)(direction, position, (0, _container.getContainerId)(container));
77
+ return getIntersectingElement(target, container);
78
+ };
79
+ var useThemeScroll = function useThemeScroll(props, instances) {
80
+ var scrollbarTrackCss = props.scrollbarTrackCss,
81
+ scrollMode = props.scrollMode;
82
+ var themeScrollContentHandle = instances.themeScrollContentHandle,
83
+ scrollContentRef = instances.scrollContentRef,
84
+ scrollContainerHandle = instances.scrollContainerHandle,
85
+ scrollContainerRef = instances.scrollContainerRef;
86
+ var contextSharedState = (0, _react.use)(_SharedStateDecorator.SharedState);
87
+
88
+ // Mutable value
89
+
90
+ var mutableRef = (0, _react.useRef)({
91
+ animateOnFocus: true,
92
+ indexToFocus: null,
93
+ isWheeling: false,
94
+ lastScrollPositionOnFocus: null,
95
+ nodeToFocus: null,
96
+ pointToFocus: null
97
+ });
98
+
99
+ // Hooks
100
+
101
+ (0, _useSpotlight.useSpotlightRestore)(props, instances);
102
+ var _useOverscrollEffect = (0, _useOverscrollEffect2["default"])({}, instances),
103
+ applyOverscrollEffect = _useOverscrollEffect.applyOverscrollEffect,
104
+ checkAndApplyOverscrollEffectByDirection = _useOverscrollEffect.checkAndApplyOverscrollEffectByDirection,
105
+ clearOverscrollEffect = _useOverscrollEffect.clearOverscrollEffect;
106
+ var _useEventWheel = (0, _useEvent.useEventWheel)(props, _objectSpread(_objectSpread({}, instances), {}, {
107
+ spottable: mutableRef
108
+ })),
109
+ handleWheel = _useEventWheel.handleWheel;
110
+ var _useEventFocus = (0, _useEvent.useEventFocus)(props, _objectSpread(_objectSpread({}, instances), {}, {
111
+ spottable: mutableRef
112
+ })),
113
+ calculateAndScrollTo = _useEventFocus.calculateAndScrollTo,
114
+ handleFocus = _useEventFocus.handleFocus,
115
+ hasFocus = _useEventFocus.hasFocus;
116
+ var _useEventKey = (0, _useEvent.useEventKey)(props, _objectSpread(_objectSpread({}, instances), {}, {
117
+ spottable: mutableRef
118
+ }), {
119
+ checkAndApplyOverscrollEffectByDirection: checkAndApplyOverscrollEffectByDirection,
120
+ hasFocus: hasFocus,
121
+ isContent: isContent
122
+ }),
123
+ handleKeyDown = _useEventKey.handleKeyDown,
124
+ lastPointer = _useEventKey.lastPointer,
125
+ scrollByPageOnPointerMode = _useEventKey.scrollByPageOnPointerMode;
126
+ (0, _useEvent.useEventMonitor)({}, instances, {
127
+ lastPointer: lastPointer,
128
+ scrollByPageOnPointerMode: scrollByPageOnPointerMode
129
+ });
130
+ var _useEventMouse = (0, _useEvent.useEventMouse)({}, instances),
131
+ handleFlick = _useEventMouse.handleFlick,
132
+ handleMouseDown = _useEventMouse.handleMouseDown;
133
+ var _useEventTouch = (0, _useEvent.useEventTouch)(),
134
+ handleTouchStart = _useEventTouch.handleTouchStart;
135
+ var _useEventVoice = (0, _useEvent.useEventVoice)(props, instances),
136
+ addVoiceEventListener = _useEventVoice.addVoiceEventListener,
137
+ removeVoiceEventListener = _useEventVoice.removeVoiceEventListener,
138
+ stopVoice = _useEventVoice.stopVoice;
139
+ var scrollbarProps = {
140
+ cbAlertScrollbarTrack: alertScrollbarTrack,
141
+ onInteractionForScroll: onInteractionForScroll,
142
+ scrollbarTrackCss: scrollbarTrackCss
143
+ };
144
+
145
+ // Functions
146
+
147
+ function isContent(element) {
148
+ return element && _utilDOM["default"].containsDangerously(scrollContentRef, element);
149
+ }
150
+ function scrollTo(opt) {
151
+ mutableRef.current.indexToFocus = opt.focus && typeof opt.index === 'number' ? opt.index : null;
152
+ mutableRef.current.nodeToFocus = opt.focus && opt.node instanceof Object && opt.node.nodeType === 1 ? opt.node : null;
153
+ }
154
+ function start(animate) {
155
+ if (scrollMode === 'native' && !animate) {
156
+ focusOnItem();
157
+ }
158
+ }
159
+ function stop() {
160
+ if (!props['data-spotlight-container-disabled']) {
161
+ themeScrollContentHandle.current.setContainerDisabled(false);
162
+ }
163
+ if (themeScrollContentHandle.current.pauseSpotlight) {
164
+ themeScrollContentHandle.current.pauseSpotlight(false);
165
+ }
166
+ focusOnItem();
167
+ mutableRef.current.lastScrollPositionOnFocus = null;
168
+ mutableRef.current.isWheeling = false;
169
+ stopVoice();
170
+ }
171
+ function scrollStopOnScroll() {
172
+ stop();
173
+ }
174
+ function onInteractionForScroll(_ref) {
175
+ var inputType = _ref.inputType,
176
+ isForward = _ref.isForward,
177
+ isPagination = _ref.isPagination,
178
+ isVerticalScrollBar = _ref.isVerticalScrollBar;
179
+ var wheelDirection = scrollContainerHandle.current.wheelDirection,
180
+ bounds = scrollContainerHandle.current.getScrollBounds(),
181
+ direction = isForward ? 1 : -1,
182
+ pageSize = isVerticalScrollBar ? bounds.clientHeight : bounds.clientWidth,
183
+ distance = pageSize * (isPagination ? paginationPageMultiplier : arrowKeyMultiplier);
184
+ scrollContainerHandle.current.lastInputType = inputType;
185
+ if (direction !== wheelDirection) {
186
+ scrollContainerHandle.current.isScrollAnimationTargetAccumulated = false;
187
+ scrollContainerHandle.current.wheelDirection = direction;
188
+ }
189
+ scrollContainerHandle.current.scrollToAccumulatedTarget(direction * distance, isVerticalScrollBar, props.overscrollEffectOn[inputType]);
190
+ }
191
+ function alertScrollbarTrack() {
192
+ var bounds = scrollContainerHandle.current.getScrollBounds();
193
+ scrollContainerHandle.current.showScrollbarTrack(bounds);
194
+ scrollContainerHandle.current.startHidingScrollbarTrack();
195
+ }
196
+ function focusOnItem() {
197
+ var isItemFocused = false;
198
+ if (mutableRef.current.indexToFocus !== null && typeof themeScrollContentHandle.current.focusByIndex === 'function') {
199
+ themeScrollContentHandle.current.focusByIndex(mutableRef.current.indexToFocus);
200
+ mutableRef.current.indexToFocus = null;
201
+ isItemFocused = true;
202
+ }
203
+ if (mutableRef.current.nodeToFocus !== null && typeof themeScrollContentHandle.current.focusOnNode === 'function') {
204
+ themeScrollContentHandle.current.focusOnNode(mutableRef.current.nodeToFocus);
205
+ mutableRef.current.nodeToFocus = null;
206
+ isItemFocused = true;
207
+ }
208
+ if (mutableRef.current.pointToFocus !== null) {
209
+ // no need to focus on pointer mode
210
+ if (!_spotlight["default"].getPointerMode()) {
211
+ var _mutableRef$current$p = mutableRef.current.pointToFocus,
212
+ direction = _mutableRef$current$p.direction,
213
+ x = _mutableRef$current$p.x,
214
+ y = _mutableRef$current$p.y,
215
+ position = {
216
+ x: x,
217
+ y: y
218
+ },
219
+ elemFromPoint = document.elementFromPoint(x, y),
220
+ target = elemFromPoint && elemFromPoint.closest && getIntersectingElement(elemFromPoint.closest(".".concat(_Spottable.spottableClass)), scrollContainerRef.current) || getTargetInViewByDirectionFromPosition(direction, position, scrollContainerRef.current) || getTargetInViewByDirectionFromPosition(reverseDirections[direction], position, scrollContainerRef.current);
221
+ if (target) {
222
+ _spotlight["default"].focus(target);
223
+ isItemFocused = true;
224
+ }
225
+ }
226
+ mutableRef.current.pointToFocus = null;
227
+ }
228
+ if (_spotlight["default"].getPointerMode() && !isItemFocused) {
229
+ _spotlight["default"].focus(scrollContainerRef.current, {
230
+ enterTo: 'topmost'
231
+ });
232
+ }
233
+ }
234
+ function handleScroll(ev) {
235
+ var x = ev.scrollLeft,
236
+ y = ev.scrollTop,
237
+ id = props.id;
238
+ (0, _handle.forward)('onScroll', ev, props);
239
+ if (id && contextSharedState && contextSharedState.set) {
240
+ contextSharedState.set(ev, props);
241
+ contextSharedState.set("".concat(id, ".scrollPosition"), {
242
+ x: x,
243
+ y: y
244
+ });
245
+ }
246
+ }
247
+
248
+ // Callback for scroller updates; calculate and, if needed, scroll to new position based on focused item.
249
+ function handleScrollerUpdate() {
250
+ if (scrollContainerHandle.current.scrollToInfo === null) {
251
+ var scrollHeight = scrollContainerHandle.current.getScrollBounds().scrollHeight;
252
+ if (scrollHeight !== scrollContainerHandle.current.bounds.scrollHeight) {
253
+ calculateAndScrollTo();
254
+ }
255
+ }
256
+
257
+ // oddly, Scroller manages scrollContainerHandle.current.bounds so if we don't update it here (it is also
258
+ // updated in calculateAndScrollTo, but we might not have made it to that point), it will be
259
+ // out of date when we land back in this method next time.
260
+ scrollContainerHandle.current.bounds.scrollHeight = scrollContainerHandle.current.getScrollBounds().scrollHeight;
261
+ }
262
+ function handleResizeWindow() {
263
+ var focusedItem = _spotlight["default"].getCurrent();
264
+ if (focusedItem) {
265
+ focusedItem.scrollIntoView(true);
266
+ return false;
267
+ }
268
+ return true;
269
+ }
270
+
271
+ // FIXME setting event handlers directly to work on the V8 snapshot.
272
+ function addEventListeners(ref) {
273
+ // `ref` is always `scrollContentRef`.
274
+ (0, _utilEvent["default"])('focusin').addEventListener(ref, handleFocus);
275
+ if (ref.current) {
276
+ addVoiceEventListener(ref);
277
+ }
278
+ }
279
+
280
+ // FIXME setting event handlers directly to work on the V8 snapshot.
281
+ function removeEventListeners(ref) {
282
+ // `ref` is always `scrollContentRef`.
283
+ (0, _utilEvent["default"])('focusin').removeEventListener(ref, handleFocus);
284
+ if (ref.current) {
285
+ removeVoiceEventListener(ref);
286
+ }
287
+ }
288
+ function preventScroll(ev) {
289
+ if (_spotlight["default"].isPaused() && _spotlight["default"].getPausedInstance() === 'Popup' && (0, _spotlight.getDirection)(ev.keyCode)) {
290
+ ev.preventDefault();
291
+ ev.stopPropagation();
292
+ }
293
+ }
294
+
295
+ // Return
296
+
297
+ return {
298
+ addEventListeners: addEventListeners,
299
+ applyOverscrollEffect: applyOverscrollEffect,
300
+ clearOverscrollEffect: clearOverscrollEffect,
301
+ handleFlick: handleFlick,
302
+ handleKeyDown: handleKeyDown,
303
+ handleMouseDown: handleMouseDown,
304
+ handleResizeWindow: handleResizeWindow,
305
+ handleScroll: handleScroll,
306
+ handleScrollerUpdate: handleScrollerUpdate,
307
+ handleTouchStart: handleTouchStart,
308
+ handleWheel: handleWheel,
309
+ removeEventListeners: removeEventListeners,
310
+ preventScroll: preventScroll,
311
+ scrollbarProps: scrollbarProps,
312
+ scrollStopOnScroll: scrollStopOnScroll,
313
+ scrollTo: scrollTo,
314
+ start: start,
315
+ stop: stop
316
+ };
317
+ };
318
+
319
+ /**
320
+ * A custom hook that passes Limestone-themed scrollable behavior information as its render prop.
321
+ *
322
+ * @class
323
+ * @memberof limestone/useScroll
324
+ * @ui
325
+ * @private
326
+ */
327
+ var useScroll = exports.useScroll = function useScroll(props) {
328
+ var className = props.className,
329
+ spotlightContainer = props['data-spotlight-container'],
330
+ spotlightContainerDisabled = props['data-spotlight-container-disabled'],
331
+ spotlightId = props['data-spotlight-id'],
332
+ voiceDisabled = props['data-webos-voice-disabled'],
333
+ voiceFocused = props['data-webos-voice-focused'],
334
+ voiceGroupLabel = props['data-webos-voice-group-label'],
335
+ editable = props.editable,
336
+ focusableScrollbar = props.focusableScrollbar,
337
+ fadeOut = props.fadeOut,
338
+ horizontalScrollThumbAriaLabel = props.horizontalScrollThumbAriaLabel,
339
+ noAffordance = props.noAffordance,
340
+ scrollMode = props.scrollMode,
341
+ snapToCenter = props.snapToCenter,
342
+ style = props.style,
343
+ verticalScrollThumbAriaLabel = props.verticalScrollThumbAriaLabel,
344
+ rest = _objectWithoutProperties(props, _excluded);
345
+ delete rest.scrollbarTrackCss;
346
+ delete rest.scrollToContentContainerOnFocus;
347
+
348
+ // Mutable value
349
+
350
+ var scrollContainerRef = (0, _react.useRef)();
351
+ var scrollContentHandle = (0, _react.useRef)();
352
+ var scrollContentRef = (0, _react.useRef)();
353
+ var itemRefs = (0, _react.useRef)([]);
354
+ var horizontalScrollbarHandle = (0, _react.useRef)();
355
+ var verticalScrollbarHandle = (0, _react.useRef)();
356
+
357
+ // Handles
358
+
359
+ var _useThemeScrollConten = (0, _useThemeScrollContentHandle.useThemeScrollContentHandle)(),
360
+ _useThemeScrollConten2 = _slicedToArray(_useThemeScrollConten, 2),
361
+ themeScrollContentHandle = _useThemeScrollConten2[0],
362
+ setThemeScrollContentHandle = _useThemeScrollConten2[1];
363
+ var scrollContainerHandle = (0, _react.useRef)({}); // To prevent referencing errors before calling `setScrollContainerHandle`, an empty object is provided as a default.
364
+ /* Properties in `scrollContainerHandle` provided by `setScrollContainerHandle`
365
+ animator
366
+ applyOverscrollEffect
367
+ bounds
368
+ calculateDistanceByWheel
369
+ canScrollHorizontally
370
+ canScrollVertically
371
+ checkAndApplyOverscrollEffect
372
+ getScrollBounds
373
+ isDragging
374
+ isScrollAnimationTargetAccumulated
375
+ lastInputType
376
+ rtl
377
+ scrollBounds
378
+ scrollHeight
379
+ scrolling
380
+ scrollLeft
381
+ scrollTo
382
+ scrollToAccumulatedTarget
383
+ scrollToInfo
384
+ scrollTop
385
+ setOverscrollStatus
386
+ showScrollbarTrack
387
+ start
388
+ startHidingScrollbarTrack
389
+ stop
390
+ wheelDirection
391
+ */
392
+
393
+ var setScrollContainerHandle = function setScrollContainerHandle(handle) {
394
+ scrollContainerHandle.current = handle;
395
+ };
396
+
397
+ // Hooks
398
+
399
+ var instance = {
400
+ // Ref
401
+ scrollContainerRef: scrollContainerRef,
402
+ scrollContentRef: scrollContentRef,
403
+ // Adapter
404
+ themeScrollContentHandle: themeScrollContentHandle,
405
+ scrollContainerHandle: scrollContainerHandle,
406
+ scrollContentHandle: scrollContentHandle
407
+ };
408
+ var collectionOfProperties = {},
409
+ assignProperties = (0, _useScroll.assignPropertiesOf)(collectionOfProperties),
410
+ scrollProps = {};
411
+ var _useThemeScroll = useThemeScroll(props, instance),
412
+ addEventListeners = _useThemeScroll.addEventListeners,
413
+ applyOverscrollEffect = _useThemeScroll.applyOverscrollEffect,
414
+ clearOverscrollEffect = _useThemeScroll.clearOverscrollEffect,
415
+ handleFlick = _useThemeScroll.handleFlick,
416
+ handleKeyDown = _useThemeScroll.handleKeyDown,
417
+ handleMouseDown = _useThemeScroll.handleMouseDown,
418
+ handleResizeWindow = _useThemeScroll.handleResizeWindow,
419
+ handleScroll = _useThemeScroll.handleScroll,
420
+ handleScrollerUpdate = _useThemeScroll.handleScrollerUpdate,
421
+ handleTouchStart = _useThemeScroll.handleTouchStart,
422
+ handleWheel = _useThemeScroll.handleWheel,
423
+ removeEventListeners = _useThemeScroll.removeEventListeners,
424
+ preventScroll = _useThemeScroll.preventScroll,
425
+ scrollbarProps = _useThemeScroll.scrollbarProps,
426
+ scrollStopOnScroll = _useThemeScroll.scrollStopOnScroll,
427
+ scrollTo = _useThemeScroll.scrollTo,
428
+ start = _useThemeScroll.start,
429
+ stop = _useThemeScroll.stop;
430
+
431
+ // Render
432
+
433
+ if (scrollMode === 'translate') {
434
+ scrollProps.stop = stop;
435
+ } else {
436
+ scrollProps.preventScroll = preventScroll;
437
+ scrollProps.scrollStopOnScroll = scrollStopOnScroll;
438
+ scrollProps.start = start;
439
+ }
440
+ var _useScrollBase = (0, _useScroll.useScrollBase)(_objectSpread(_objectSpread(_objectSpread({}, rest), scrollProps), {}, {
441
+ assignProperties: assignProperties,
442
+ noScrollByDrag: !_platform["default"].touchScreen,
443
+ addEventListeners: addEventListeners,
444
+ applyOverscrollEffect: applyOverscrollEffect,
445
+ clearOverscrollEffect: clearOverscrollEffect,
446
+ handleResizeWindow: handleResizeWindow,
447
+ horizontalScrollbarHandle: horizontalScrollbarHandle,
448
+ onFlick: handleFlick,
449
+ onKeyDown: handleKeyDown,
450
+ onMouseDown: handleMouseDown,
451
+ onScroll: handleScroll,
452
+ onWheel: handleWheel,
453
+ removeEventListeners: removeEventListeners,
454
+ scrollTo: scrollTo,
455
+ setScrollContainerHandle: setScrollContainerHandle,
456
+ scrollMode: scrollMode,
457
+ scrollContentHandle: scrollContentHandle,
458
+ scrollContentRef: scrollContentRef,
459
+ scrollContainerRef: scrollContainerRef,
460
+ snapToCenter: snapToCenter,
461
+ spotlightContainerDisabled: spotlightContainerDisabled,
462
+ verticalScrollbarHandle: verticalScrollbarHandle
463
+ })),
464
+ isHorizontalScrollbarVisible = _useScrollBase.isHorizontalScrollbarVisible,
465
+ isVerticalScrollbarVisible = _useScrollBase.isVerticalScrollbarVisible,
466
+ scrollContentWrapper = _useScrollBase.scrollContentWrapper,
467
+ scrollObserver = _useScrollBase.scrollObserver;
468
+ assignProperties('scrollContainerProps', {
469
+ className: [className, _useScrollModule["default"].scroll, _OverscrollEffectModule["default"].scroll, focusableScrollbar ? _useScrollModule["default"].focusableScrollbar : null, focusableScrollbar && isVerticalScrollbarVisible ? _useScrollModule["default"].verticalPadding : null, isVerticalScrollbarVisible && isHorizontalScrollbarVisible ? _useScrollModule["default"].bidirectional : null],
470
+ style: style,
471
+ 'data-spotlight-container': spotlightContainer,
472
+ 'data-spotlight-container-disabled': spotlightContainerDisabled,
473
+ 'data-spotlight-id': spotlightId,
474
+ onTouchStart: handleTouchStart,
475
+ ref: scrollContainerRef
476
+ });
477
+ var voiceProps = {
478
+ 'data-webos-voice-disabled': voiceDisabled,
479
+ 'data-webos-voice-focused': voiceFocused,
480
+ 'data-webos-voice-group-label': voiceGroupLabel
481
+ };
482
+ assignProperties('scrollContentProps', _objectSpread(_objectSpread(_objectSpread({}, props.itemRenderer ? {
483
+ itemRefs: itemRefs,
484
+ noAffordance: noAffordance,
485
+ snapToCenter: snapToCenter
486
+ } : {
487
+ editable: editable,
488
+ fadeOut: fadeOut
489
+ }), voiceProps), {}, {
490
+ className: [props.direction === 'both' || props.direction === 'vertical' ? _OverscrollEffectModule["default"].vertical : _OverscrollEffectModule["default"].horizontal, _useScrollModule["default"].scrollContent],
491
+ onUpdate: handleScrollerUpdate,
492
+ scrollContainerRef: scrollContainerRef,
493
+ setThemeScrollContentHandle: setThemeScrollContentHandle,
494
+ spotlightId: spotlightId,
495
+ scrollContainerHandle: scrollContainerHandle,
496
+ scrollContentHandle: scrollContentHandle,
497
+ scrollContentRef: scrollContentRef
498
+ }));
499
+ var scrollThumbAriaLabelForByEnter = focusableScrollbar === 'byEnter' ? ' ' + (0, _$L["default"])('press ok button to read text') : '';
500
+ assignProperties('horizontalScrollbarProps', _objectSpread(_objectSpread({}, scrollbarProps), {}, {
501
+ 'aria-label': horizontalScrollThumbAriaLabel == null ? (0, _$L["default"])('scroll left or right with left right button') + scrollThumbAriaLabelForByEnter : horizontalScrollThumbAriaLabel,
502
+ className: [_useScrollModule["default"].horizontalScrollbar],
503
+ focusableScrollbar: focusableScrollbar,
504
+ scrollbarHandle: horizontalScrollbarHandle
505
+ }));
506
+ assignProperties('verticalScrollbarProps', _objectSpread(_objectSpread({}, scrollbarProps), {}, {
507
+ 'aria-label': verticalScrollThumbAriaLabel == null ? (0, _$L["default"])('scroll up or down with up down button') + scrollThumbAriaLabelForByEnter : verticalScrollThumbAriaLabel,
508
+ className: [_useScrollModule["default"].verticalScrollbar],
509
+ focusableScrollbar: focusableScrollbar,
510
+ scrollbarHandle: verticalScrollbarHandle
511
+ }));
512
+ assignProperties('hoverToScrollProps', {
513
+ scrollContainerHandle: scrollContainerHandle,
514
+ scrollObserver: scrollObserver
515
+ });
516
+ return _objectSpread(_objectSpread({}, collectionOfProperties), {}, {
517
+ scrollContentWrapper: scrollContentWrapper,
518
+ scrollContentHandle: scrollContentHandle,
519
+ isHorizontalScrollbarVisible: isHorizontalScrollbarVisible,
520
+ isVerticalScrollbarVisible: isVerticalScrollbarVisible
521
+ });
522
+ };
523
+ var _default = exports["default"] = useScroll;
@@ -0,0 +1,49 @@
1
+ .verticalPadding {
2
+ padding-left: 0;
3
+ padding-right: 0.5rem;
4
+ }
5
+ :global(.enact-locale-right-to-left) .verticalPadding {
6
+ padding-left: 0.5rem;
7
+ padding-right: 0;
8
+ }
9
+ .scroll {
10
+ --scroll-scrollbar-size: 0.75rem;
11
+ box-sizing: border-box;
12
+ overflow: hidden;
13
+ }
14
+ .scroll.focusableScrollbar {
15
+ --scroll-scrollbar-size: 1.25rem;
16
+ }
17
+ .scroll .verticalScrollbar {
18
+ position: absolute;
19
+ width: var(--scroll-scrollbar-size);
20
+ height: calc(100% - 2 * 0.25rem);
21
+ right: 0;
22
+ top: 0;
23
+ padding: 0.25rem 0;
24
+ }
25
+ :global(.enact-locale-right-to-left) .scroll .verticalScrollbar {
26
+ left: 0;
27
+ right: initial;
28
+ }
29
+ .scroll .horizontalScrollbar {
30
+ position: absolute;
31
+ width: calc(100% - 2 * 0.25rem);
32
+ height: var(--scroll-scrollbar-size);
33
+ left: 0;
34
+ bottom: 0;
35
+ padding: 0 0.25rem;
36
+ }
37
+ .scroll.bidirectional .verticalScrollbar {
38
+ height: calc(100% - 2 * 0.25rem - var(--scroll-scrollbar-size));
39
+ }
40
+ .scroll.bidirectional .horizontalScrollbar {
41
+ width: calc(100% - 2 * 0.25rem - var(--scroll-scrollbar-size));
42
+ left: 0;
43
+ }
44
+ :global(.enact-locale-right-to-left) .scroll.bidirectional .horizontalScrollbar {
45
+ left: var(--scroll-scrollbar-size);
46
+ }
47
+ .scroll .scrollContent {
48
+ box-sizing: border-box;
49
+ }