@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,70 @@
1
+ "use strict";
2
+
3
+ var _FloatingLayer = require("@enact/ui/FloatingLayer");
4
+ require("@testing-library/jest-dom");
5
+ var _react = require("@testing-library/react");
6
+ var _Spinner = _interopRequireDefault(require("../Spinner"));
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
9
+ var FloatingLayerController = (0, _FloatingLayer.FloatingLayerDecorator)('div');
10
+ describe('Spinner Specs', function () {
11
+ test('should not have client node when Spinner has no children', function () {
12
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {}));
13
+ var spinner = _react.screen.getByRole('alert');
14
+ var children = spinner.children;
15
+ expect(children.length).toEqual(1);
16
+ expect(children.item(0)).toHaveClass('bg');
17
+ expect(children.item(1)).not.toBeInTheDocument();
18
+ });
19
+ test('should have a client node when Spinner has children', function () {
20
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {
21
+ children: "Loading..."
22
+ }));
23
+ var spinner = _react.screen.getByRole('alert');
24
+ var childClient = spinner.children.item(1);
25
+ expect(childClient).toHaveClass('client');
26
+ });
27
+ test('should have content class when Spinner has children', function () {
28
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {
29
+ children: "Loading..."
30
+ }));
31
+ var spinner = _react.screen.getByRole('alert');
32
+ expect(spinner).toHaveClass('content');
33
+ });
34
+ test('should have transparent class when transparent prop equals true', function () {
35
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {
36
+ transparent: true,
37
+ children: "Loading..."
38
+ }));
39
+ var spinner = _react.screen.getByRole('alert');
40
+ expect(spinner).toHaveClass('transparent');
41
+ });
42
+ test('should set role to alert by default', function () {
43
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {}));
44
+ var spinner = _react.screen.getByLabelText('Loading');
45
+ expect(spinner).toHaveAttribute('role', 'alert');
46
+ });
47
+ test('should set aria-live to off by default', function () {
48
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {}));
49
+ var spinner = _react.screen.getByRole('alert');
50
+ expect(spinner).toHaveAttribute('aria-live', 'off');
51
+ });
52
+ test('should apply custom aria-label to spinner', function () {
53
+ var customAriaLabel = 'custom aria label';
54
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {
55
+ "aria-label": customAriaLabel
56
+ }));
57
+ var spinner = _react.screen.getByRole('alert');
58
+ expect(spinner).toHaveAttribute('aria-label', customAriaLabel);
59
+ });
60
+ test('should render a spinner with \'blockClickOn\' = \'screen\' inside FloatingLayer', function () {
61
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
62
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner["default"], {
63
+ blockClickOn: "screen"
64
+ })
65
+ }));
66
+ var floatingLayer = _react.screen.getByRole('alert').parentElement;
67
+ var expectedClass = 'floatingLayer';
68
+ expect(floatingLayer).toHaveClass(expectedClass);
69
+ });
70
+ });
@@ -0,0 +1,100 @@
1
+ // Type definitions for limestone/Sprite
2
+
3
+ import * as React from "react";
4
+
5
+ type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
6
+ type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
7
+
8
+ export interface SpriteProps {
9
+ /**
10
+ * The amount of animation cells spread across the X (horizontal) axis.
11
+ */
12
+ columns?: number;
13
+ /**
14
+ * The length of the animation in milliseconds.
15
+ */
16
+ duration?: number;
17
+ /**
18
+ * The height of a single cell in pixels.
19
+ *
20
+ * This value is scaled automatically based on the "base" screen resolution for
21
+ this theme. All measurements should be with respect to a 4k UHD display.
22
+ */
23
+ height?: number;
24
+ /**
25
+ * The number of times the animation should repeat.
26
+ *
27
+ * The JavaScript reserved word `Infinity` is a valid option here (set by default) that
28
+ means "repeat indefinitely".
29
+ */
30
+ iterations?: number;
31
+ /**
32
+ * Sets the left distance that the first cell is from the top left corner.
33
+ *
34
+ * This can be useful if you have several sprite animations in one image file.
35
+ *
36
+ * This value is scaled automatically based on the "base" screen resolution for
37
+ this theme. All measurements should be with respect to a 4k UHD display.
38
+ */
39
+ offsetLeft?: number;
40
+ /**
41
+ * Sets the top distance that the first cell is from the top left corner.
42
+ *
43
+ * This can be useful if you have several sprite animations in one image file.
44
+ *
45
+ * This value is scaled automatically based on the "base" screen resolution for
46
+ this theme. All measurements should be with respect to a 4k UHD display.
47
+ */
48
+ offsetTop?: number;
49
+ /**
50
+ * Event callback for when animation events occur.
51
+ *
52
+ * This callback can be used for more fine-grained control of the sprite animation.
53
+ The arguments payload contains an object with the following keys:
54
+ * * `animation` : the `animate` handle
55
+ * * `playing` : boolean representing the "playing" vs "stopped" state
56
+ * * `paused` : boolean representing whether the animation has paused
57
+ *
58
+ * Note: Playing and paused are handled separately, since a paused animation is
59
+ still in a playing state, while a stopped animation is both not paused and
60
+ not playing.
61
+ */
62
+ onSpriteAnimation?: Function;
63
+ /**
64
+ * Sets the orientation of the frames on the sprite sheet ( `src` ).
65
+ *
66
+ * A horizontal setting would indicate that the cells are arranged left to right with the
67
+ next row starting below the first row.
68
+ A vertical setting would indicate that the cells are arranged top to bottom with the
69
+ next column starting to the right of the first column.
70
+ */
71
+ orientation?: "horizontal" | "vertical";
72
+ /**
73
+ * The amount of animation cells spread across the Y (vertical) axis.
74
+ */
75
+ rows?: number;
76
+ /**
77
+ * The sprite-sheet image with all the cells on it.
78
+ */
79
+ src?: string | object;
80
+ /**
81
+ * Stops the animation from playing, resetting to the beginning.
82
+ */
83
+ stopped?: boolean;
84
+ /**
85
+ * The width of a single cell in pixels.
86
+ *
87
+ * This value is scaled automatically based on the "base" screen resolution for
88
+ this theme. All measurements should be with respect to a 4k UHD display.
89
+ */
90
+ width?: number;
91
+ }
92
+ /**
93
+ * Renders a Sprite animation.
94
+ */
95
+
96
+ export class Sprite extends React.Component<
97
+ Merge<React.HTMLProps<HTMLElement>, SpriteProps>
98
+ > {}
99
+
100
+ export default Sprite;
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.SpriteBase = exports.Sprite = void 0;
7
+ var _kind = _interopRequireDefault(require("@enact/core/kind"));
8
+ var _resolution = require("@enact/ui/resolution");
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _react = require("react");
11
+ var _Image = _interopRequireDefault(require("../Image"));
12
+ var _SpriteModule = _interopRequireDefault(require("./Sprite.module.css"));
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ var _excluded = ["columns", "duration", "height", "iterations", "onSpriteAnimation", "orientation", "paused", "rows", "stopped", "src", "width"];
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
16
+ 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; }
17
+ 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; }
18
+ 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; }
19
+ 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; }
20
+ 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; }
21
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
22
+ 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); } /**
23
+ * A "sprite" is an animated sequence of cells.
24
+ *
25
+ * Cells, like a filmstrip, are pre-arranged in one or more rows and one or more columns.
26
+ * This component steps through those cells to create an animation.
27
+ *
28
+ * Example:
29
+ * ```
30
+ * <Sprite
31
+ * src="images/sprite-sheet.png"
32
+ * height={60}
33
+ * width={60}
34
+ * rows={5}
35
+ * columns={10}
36
+ * />
37
+ * ```
38
+ *
39
+ * @module limestone/Sprite
40
+ * @exports Sprite
41
+ */
42
+ var createKeyframe = function createKeyframe(_ref) {
43
+ var dimension = _ref.dimension,
44
+ axis = _ref.axis,
45
+ vertical = _ref.vertical,
46
+ offset = _ref.offset;
47
+ var x = (0, _resolution.scaleToRem)(vertical ? axis : dimension);
48
+ var y = (0, _resolution.scaleToRem)(vertical ? dimension : axis);
49
+ var keyframe = {
50
+ transform: "translate(".concat(x, ", ").concat(y, ")")
51
+ };
52
+ if (offset != null) keyframe.offset = offset;
53
+ return keyframe;
54
+ };
55
+
56
+ /**
57
+ * Renders a Sprite animation.
58
+ *
59
+ * @class Sprite
60
+ * @memberof limestone/Sprite
61
+ * @ui
62
+ * @public
63
+ */
64
+ var SpriteBase = exports.SpriteBase = exports.Sprite = (0, _kind["default"])({
65
+ name: 'Sprite',
66
+ functional: true,
67
+ propTypes: /** @lends limestone/Sprite.Sprite.prototype */{
68
+ /**
69
+ * The amount of animation cells spread across the X (horizontal) axis.
70
+ *
71
+ * @type {Number}
72
+ * @default 1
73
+ * @public
74
+ */
75
+ columns: _propTypes["default"].number,
76
+ /**
77
+ * The length of the animation in milliseconds.
78
+ *
79
+ * @type {Number}
80
+ * @default 1000
81
+ * @public
82
+ */
83
+ duration: _propTypes["default"].number,
84
+ /**
85
+ * The height of a single cell in pixels.
86
+ *
87
+ * This value is scaled automatically based on the "base" screen resolution for
88
+ * this theme. All measurements should be with respect to a 4k UHD display.
89
+ *
90
+ * @type {Number}
91
+ * @default 120
92
+ * @public
93
+ */
94
+ height: _propTypes["default"].number,
95
+ /**
96
+ * The number of times the animation should repeat.
97
+ *
98
+ * The JavaScript reserved word `Infinity` is a valid option here (set by default) that
99
+ * means "repeat indefinitely".
100
+ *
101
+ * @type {Number}
102
+ * @default Infinity
103
+ * @public
104
+ */
105
+ iterations: _propTypes["default"].number,
106
+ /**
107
+ * Sets the left distance that the first cell is from the top left corner.
108
+ *
109
+ * This can be useful if you have several sprite animations in one image file.
110
+ *
111
+ * This value is scaled automatically based on the "base" screen resolution for
112
+ * this theme. All measurements should be with respect to a 4k UHD display.
113
+ *
114
+ * @type {Number}
115
+ * @default 0
116
+ * @public
117
+ */
118
+ offsetLeft: _propTypes["default"].number,
119
+ /**
120
+ * Sets the top distance that the first cell is from the top left corner.
121
+ *
122
+ * This can be useful if you have several sprite animations in one image file.
123
+ *
124
+ * This value is scaled automatically based on the "base" screen resolution for
125
+ * this theme. All measurements should be with respect to a 4k UHD display.
126
+ *
127
+ * @type {Number}
128
+ * @default 0
129
+ * @public
130
+ */
131
+ offsetTop: _propTypes["default"].number,
132
+ /**
133
+ * Event callback for when animation events occur.
134
+ *
135
+ * This callback can be used for more fine-grained control of the sprite animation.
136
+ * The arguments payload contains an object with the following keys:
137
+ * * `animation`: the `animate` handle {@link https://developer.mozilla.org/en-US/docs/Web/API/Element/animate}
138
+ * * `playing`: boolean representing the "playing" vs "stopped" state
139
+ * * `paused`: boolean representing whether the animation has paused
140
+ *
141
+ * Note: Playing and paused are handled separately, since a paused animation is
142
+ * still in a playing state, while a stopped animation is both not paused and
143
+ * not playing.
144
+ *
145
+ * @type {Function}
146
+ * @public
147
+ */
148
+ onSpriteAnimation: _propTypes["default"].func,
149
+ /**
150
+ * Sets the orientation of the frames on the sprite sheet (`src`).
151
+ *
152
+ * A horizontal setting would indicate that the cells are arranged left to right with the
153
+ * next row starting below the first row.
154
+ * A vertical setting would indicate that the cells are arranged top to bottom with the
155
+ * next column starting to the right of the first column.
156
+ *
157
+ * @type {('horizontal'|'vertical')}
158
+ * @default 'horizontal'
159
+ * @public
160
+ */
161
+ orientation: _propTypes["default"].oneOf(['horizontal', 'vertical']),
162
+ /**
163
+ * Pauses the animation, holding on the current frame.
164
+ *
165
+ * @type {Boolean}
166
+ * @private
167
+ */
168
+ paused: _propTypes["default"].bool,
169
+ /**
170
+ * The amount of animation cells spread across the Y (vertical) axis.
171
+ *
172
+ * @type {Number}
173
+ * @default 1
174
+ * @public
175
+ */
176
+ rows: _propTypes["default"].number,
177
+ /**
178
+ * The sprite-sheet image with all the cells on it.
179
+ *
180
+ * @see {@link ui/Image.ImageBase.src}
181
+ * @type {String|Object}
182
+ * @public
183
+ */
184
+ src: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
185
+ /**
186
+ * Stops the animation from playing, resetting to the beginning.
187
+ *
188
+ * @type {Boolean}
189
+ * @public
190
+ */
191
+ stopped: _propTypes["default"].bool,
192
+ /**
193
+ * The width of a single cell in pixels.
194
+ *
195
+ * This value is scaled automatically based on the "base" screen resolution for
196
+ * this theme. All measurements should be with respect to a 4k UHD display.
197
+ *
198
+ * @type {Number}
199
+ * @default 120
200
+ * @public
201
+ */
202
+ width: _propTypes["default"].number
203
+ },
204
+ styles: {
205
+ css: _SpriteModule["default"],
206
+ className: 'sprite'
207
+ },
208
+ computed: {
209
+ style: function style(_ref2) {
210
+ var _ref2$offsetTop = _ref2.offsetTop,
211
+ offsetTop = _ref2$offsetTop === void 0 ? 0 : _ref2$offsetTop,
212
+ _ref2$offsetLeft = _ref2.offsetLeft,
213
+ offsetLeft = _ref2$offsetLeft === void 0 ? 0 : _ref2$offsetLeft,
214
+ _ref2$rows = _ref2.rows,
215
+ rows = _ref2$rows === void 0 ? 1 : _ref2$rows,
216
+ _ref2$columns = _ref2.columns,
217
+ columns = _ref2$columns === void 0 ? 1 : _ref2$columns,
218
+ _ref2$height = _ref2.height,
219
+ height = _ref2$height === void 0 ? 120 : _ref2$height,
220
+ _ref2$width = _ref2.width,
221
+ width = _ref2$width === void 0 ? 120 : _ref2$width,
222
+ _style = _ref2.style;
223
+ return _objectSpread(_objectSpread({}, _style), {}, {
224
+ '--lime-sprite-offset-top': (0, _resolution.scaleToRem)(offsetTop),
225
+ '--lime-sprite-offset-left': (0, _resolution.scaleToRem)(offsetLeft),
226
+ '--lime-sprite-rows': rows,
227
+ '--lime-sprite-columns': columns,
228
+ '--lime-sprite-height': (0, _resolution.scaleToRem)(height),
229
+ '--lime-sprite-width': (0, _resolution.scaleToRem)(width)
230
+ });
231
+ }
232
+ },
233
+ render: function render(_ref3) {
234
+ var _ref3$columns = _ref3.columns,
235
+ columns = _ref3$columns === void 0 ? 1 : _ref3$columns,
236
+ _ref3$duration = _ref3.duration,
237
+ duration = _ref3$duration === void 0 ? 1000 : _ref3$duration,
238
+ _ref3$height = _ref3.height,
239
+ height = _ref3$height === void 0 ? 120 : _ref3$height,
240
+ _ref3$iterations = _ref3.iterations,
241
+ iterations = _ref3$iterations === void 0 ? Infinity : _ref3$iterations,
242
+ onSpriteAnimation = _ref3.onSpriteAnimation,
243
+ _ref3$orientation = _ref3.orientation,
244
+ orientation = _ref3$orientation === void 0 ? 'horizontal' : _ref3$orientation,
245
+ _ref3$paused = _ref3.paused,
246
+ paused = _ref3$paused === void 0 ? false : _ref3$paused,
247
+ _ref3$rows = _ref3.rows,
248
+ rows = _ref3$rows === void 0 ? 1 : _ref3$rows,
249
+ stopped = _ref3.stopped,
250
+ src = _ref3.src,
251
+ _ref3$width = _ref3.width,
252
+ width = _ref3$width === void 0 ? 120 : _ref3$width,
253
+ rest = _objectWithoutProperties(_ref3, _excluded);
254
+ delete rest.offsetTop;
255
+ delete rest.offsetLeft;
256
+
257
+ // eslint-disable-next-line react-hooks/rules-of-hooks
258
+ var imageRef = (0, _react.useRef)();
259
+ // eslint-disable-next-line react-hooks/rules-of-hooks
260
+ var animation = (0, _react.useRef)();
261
+
262
+ // eslint-disable-next-line react-hooks/rules-of-hooks
263
+ var keyframes = (0, _react.useMemo)(function () {
264
+ var framesets = [];
265
+ var vertical = orientation === 'vertical';
266
+
267
+ // Orientation agnostic terms to generate keyframes
268
+ var steps = vertical ? rows : columns;
269
+ var sets = vertical ? columns : rows;
270
+ var dimension = vertical ? height : width;
271
+ var axis = vertical ? width : height;
272
+ for (var i = 0; i < sets; i++) {
273
+ var axisValue = i * axis * -1;
274
+ var dimensionValue = (steps - 0) * dimension * -1;
275
+ framesets.push(createKeyframe({
276
+ offset: i / sets,
277
+ vertical: vertical,
278
+ dimension: 0,
279
+ axis: axisValue
280
+ }), createKeyframe({
281
+ offset: (i + 1) / sets,
282
+ vertical: vertical,
283
+ dimension: dimensionValue,
284
+ axis: axisValue
285
+ }));
286
+ }
287
+ return framesets;
288
+ }, [
289
+ // Only update if these change
290
+ columns, height, orientation, rows, width]);
291
+
292
+ // eslint-disable-next-line react-hooks/rules-of-hooks
293
+ (0, _react.useLayoutEffect)(function () {
294
+ if (imageRef && imageRef.current) {
295
+ var node = imageRef.current;
296
+ var frameCount = columns * rows;
297
+ if (animation.current) {
298
+ animation.current.cancel();
299
+ }
300
+ animation.current = node.animate(keyframes, {
301
+ easing: "steps(".concat(frameCount, ", end)"),
302
+ duration: duration,
303
+ iterations: iterations || Infinity
304
+ });
305
+
306
+ // Playing and paused are handled separately, since a paused animation is
307
+ // still in a playing state, while a stopped animation is both not paused and
308
+ // not playing.
309
+ var eventPayload = {
310
+ type: 'onSpriteAnimation',
311
+ animation: animation.current,
312
+ value: 'testing',
313
+ paused: false,
314
+ playing: false
315
+ };
316
+ if (stopped) {
317
+ if (animation.current.pause) animation.current.pause();
318
+ } else if (paused) {
319
+ if (animation.current.pause) animation.current.pause();
320
+ eventPayload.paused = true;
321
+ eventPayload.playing = true;
322
+ } else {
323
+ if (animation.current.play) animation.current.play();
324
+ eventPayload.playing = true;
325
+ }
326
+ if (typeof onSpriteAnimation === 'function') {
327
+ onSpriteAnimation(eventPayload);
328
+ }
329
+ }
330
+ }, [
331
+ // Only update if these change
332
+ columns, duration, iterations, keyframes, onSpriteAnimation, paused, rows, stopped]);
333
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", _objectSpread(_objectSpread({}, rest), {}, {
334
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Image["default"], {
335
+ src: src,
336
+ ref: imageRef,
337
+ className: _SpriteModule["default"].image
338
+ })
339
+ }));
340
+ }
341
+ });
342
+ SpriteBase.defaultPropValues = {
343
+ iterations: Infinity
344
+ };
345
+ var _default = exports["default"] = SpriteBase;
@@ -0,0 +1,32 @@
1
+ .sprite {
2
+ display: inline-block;
3
+ overflow: hidden;
4
+ position: relative;
5
+ height: var(--lime-sprite-height);
6
+ width: var(--lime-sprite-width);
7
+ }
8
+ .sprite .image {
9
+ margin: 0;
10
+ position: absolute;
11
+ top: calc(var(--lime-sprite-offset-top, 0) * -1);
12
+ left: calc(var(--lime-sprite-offset-left, 0) * -1);
13
+ background-position: top left;
14
+ height: calc(calc(var(--lime-sprite-height) * var(--lime-sprite-rows)) + var(--lime-sprite-offset-top, 0));
15
+ width: calc(calc(var(--lime-sprite-width) * var(--lime-sprite-columns)) + var(--lime-sprite-offset-left, 0));
16
+ background-size: calc(var(--lime-sprite-width) * var(--lime-sprite-columns)) calc(var(--lime-sprite-height) * var(--lime-sprite-rows));
17
+ will-change: transform;
18
+ }
19
+ :global(.debug.sprites) .sprite {
20
+ outline: 1px dashed orange;
21
+ overflow: visible;
22
+ }
23
+ :global(.debug.sprites) .sprite .image {
24
+ outline: 1px dashed cyan;
25
+ }
26
+ :global(.spotlight-input-key) :global(.spottable):focus .sprite .image,
27
+ :global(.spotlight-input-mouse) :global(.spottable):focus .sprite .image {
28
+ filter: invert(0.8);
29
+ }
30
+ :global(.spotlight-input-touch) :global(.spottable):active .sprite .image {
31
+ filter: invert(0.8);
32
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "main": "Sprite.js"
3
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var _react = require("@testing-library/react");
4
+ var _Sprite = require("../Sprite");
5
+ var _jsxRuntime = require("react/jsx-runtime");
6
+ 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; }
7
+ 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; }
8
+ 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; }
9
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
10
+ 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); }
11
+ describe('Sprite Specs', function () {
12
+ var simpleAnimationProps = {
13
+ src: 'dummyimage',
14
+ rows: 2,
15
+ columns: 2
16
+ };
17
+ describe('events', function () {
18
+ describe('on first render', function () {
19
+ test('should call onSpriteAnimation', function () {
20
+ var handleAnimation = jest.fn();
21
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Sprite.SpriteBase, _objectSpread(_objectSpread({}, simpleAnimationProps), {}, {
22
+ onSpriteAnimation: handleAnimation
23
+ })));
24
+ var expected = 1;
25
+ var actual = handleAnimation.mock.calls.length;
26
+ expect(actual).toBe(expected);
27
+ });
28
+ test('should call onSpriteAnimation and default to "playing"', function () {
29
+ var handleAnimation = jest.fn();
30
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Sprite.SpriteBase, _objectSpread(_objectSpread({}, simpleAnimationProps), {}, {
31
+ onSpriteAnimation: handleAnimation
32
+ })));
33
+ var expected = true;
34
+ var actual = handleAnimation.mock.calls[0][0].playing;
35
+ expect(actual).toBe(expected);
36
+ });
37
+ test('should call onSpriteAnimation with stopped:true when stopped', function () {
38
+ var handleAnimation = jest.fn();
39
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Sprite.SpriteBase, _objectSpread(_objectSpread({}, simpleAnimationProps), {}, {
40
+ onSpriteAnimation: handleAnimation,
41
+ stopped: true
42
+ })));
43
+ var expected = false;
44
+ var actual = handleAnimation.mock.calls[0][0].playing;
45
+ expect(actual).toBe(expected);
46
+ });
47
+ test('should call onSpriteAnimation with paused:true when paused', function () {
48
+ var handleAnimation = jest.fn();
49
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Sprite.SpriteBase, _objectSpread(_objectSpread({}, simpleAnimationProps), {}, {
50
+ onSpriteAnimation: handleAnimation,
51
+ paused: true
52
+ })));
53
+ var expected = true;
54
+ var actual = handleAnimation.mock.calls[0][0].paused;
55
+ expect(actual).toBe(expected);
56
+ });
57
+ });
58
+ });
59
+ });