@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,360 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isSelectedValid = exports["default"] = exports.DropdownListBase = exports.DropdownList = void 0;
7
+ var _kind = _interopRequireDefault(require("@enact/core/kind"));
8
+ var _handle = require("@enact/core/handle");
9
+ var _hoc = _interopRequireDefault(require("@enact/core/hoc"));
10
+ var _propTypes = _interopRequireDefault(require("@enact/core/internal/prop-types"));
11
+ var _WithRef = require("@enact/core/internal/WithRef");
12
+ var _spotlight = _interopRequireDefault(require("@enact/spotlight"));
13
+ var _IdProvider = _interopRequireDefault(require("@enact/ui/internal/IdProvider"));
14
+ var _resolution = _interopRequireDefault(require("@enact/ui/resolution"));
15
+ var _IString = _interopRequireDefault(require("ilib/lib/IString"));
16
+ var _propTypes2 = _interopRequireDefault(require("prop-types"));
17
+ var _compose = _interopRequireDefault(require("ramda/src/compose"));
18
+ var _react = require("react");
19
+ var _$L = _interopRequireDefault(require("../internal/$L"));
20
+ var _Icon = _interopRequireDefault(require("../Icon"));
21
+ var _Item = _interopRequireDefault(require("../Item"));
22
+ var _Skinnable = _interopRequireDefault(require("../Skinnable"));
23
+ var _VirtualList = _interopRequireDefault(require("../VirtualList"));
24
+ var _DropdownModule = _interopRequireDefault(require("./Dropdown.module.css"));
25
+ var _util = require("../internal/util");
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+ var _excluded = ["index"],
28
+ _excluded2 = ["key"],
29
+ _excluded3 = ["dataSize", "id", "itemSize", "scrollTo", "width"];
30
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
31
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
32
+ 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."); }
33
+ 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; } }
34
+ 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; }
35
+ 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; } }
36
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
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
+ 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; }
43
+ 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; }
44
+ var isSelectedValid = exports.isSelectedValid = function isSelectedValid(_ref) {
45
+ var children = _ref.children,
46
+ selected = _ref.selected;
47
+ return Array.isArray(children) && children[selected] != null;
48
+ };
49
+ var getKey = function getKey(_ref2) {
50
+ var children = _ref2.children,
51
+ selected = _ref2.selected;
52
+ if (isSelectedValid({
53
+ children: children,
54
+ selected: selected
55
+ })) {
56
+ return children[selected].key;
57
+ }
58
+ };
59
+ var indexFromKey = function indexFromKey(children, key) {
60
+ var index = -1;
61
+ if (children) {
62
+ index = children.findIndex(function (child) {
63
+ return child.key === key;
64
+ });
65
+ }
66
+ return index;
67
+ };
68
+ var DropdownListBase = exports.DropdownListBase = (0, _kind["default"])({
69
+ name: 'DropdownListBase',
70
+ propTypes: {
71
+ /*
72
+ * The selections for Dropdown
73
+ *
74
+ * @type {String[]|Array.<{key: (Number|String), children: (String|Component)}>}
75
+ */
76
+ children: _propTypes2["default"].oneOfType([_propTypes2["default"].arrayOf(_propTypes2["default"].string), _propTypes2["default"].arrayOf(_propTypes2["default"].shape({
77
+ children: _propTypes["default"].renderable.isRequired,
78
+ key: _propTypes2["default"].oneOfType([_propTypes2["default"].string, _propTypes2["default"].number]).isRequired
79
+ }))]),
80
+ /**
81
+ * The `id` of DropdownList referred to when setting aria-labelledby
82
+ *
83
+ * @type {String}
84
+ * @private
85
+ */
86
+ id: _propTypes2["default"].string,
87
+ /*
88
+ * Called when an item is selected.
89
+ *
90
+ * @type {Function}
91
+ */
92
+ onSelect: _propTypes2["default"].func,
93
+ /*
94
+ * Callback function that will receive the scroller's scrollTo() method
95
+ *
96
+ * @type {Function}
97
+ */
98
+ scrollTo: _propTypes2["default"].func,
99
+ /*
100
+ * Index of the selected item.
101
+ *
102
+ * @type {Number}
103
+ */
104
+ selected: _propTypes2["default"].number,
105
+ /*
106
+ * State of possible skin variants.
107
+ *
108
+ * Used to scale the `itemSize` of the `VirtualList` based on large-text mode
109
+ *
110
+ * @type {Object}
111
+ */
112
+ skinVariants: _propTypes2["default"].object,
113
+ /*
114
+ * The width of DropdownList.
115
+ *
116
+ * @type {('huge'|'x-large'|'large'|'medium'|'small'|'tiny')|number}
117
+ */
118
+ width: _propTypes2["default"].oneOfType([_propTypes2["default"].oneOf(['tiny', 'small', 'medium', 'large', 'x-large', 'huge']), _propTypes2["default"].number])
119
+ },
120
+ styles: {
121
+ css: _DropdownModule["default"],
122
+ className: 'dropdownList'
123
+ },
124
+ handlers: {
125
+ itemRenderer: function itemRenderer(_ref3, props) {
126
+ var index = _ref3.index,
127
+ rest = _objectWithoutProperties(_ref3, _excluded);
128
+ var children = props.children,
129
+ selected = props.selected;
130
+ var isSelected = index === selected;
131
+ var slotAfter = isSelected ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon["default"], {
132
+ children: "check"
133
+ }) : null;
134
+ var child = children[index];
135
+ if (typeof child === 'string') {
136
+ child = {
137
+ children: child
138
+ };
139
+ }
140
+ var data = child.children;
141
+ var _child = _objectSpread({}, child),
142
+ key = _child.key,
143
+ restChild = _objectWithoutProperties(_child, _excluded2);
144
+ return /*#__PURE__*/(0, _react.createElement)(_Item["default"], _objectSpread(_objectSpread(_objectSpread({}, rest), restChild), {}, {
145
+ css: _DropdownModule["default"],
146
+ key: key,
147
+ slotAfter: slotAfter,
148
+ "data-selected": isSelected
149
+ // eslint-disable-next-line react/jsx-no-bind
150
+ ,
151
+ onClick: function onClick() {
152
+ return (0, _handle.forward)('onSelect', {
153
+ data: data,
154
+ selected: index
155
+ }, props);
156
+ },
157
+ size: "large"
158
+ }));
159
+ }
160
+ },
161
+ computed: {
162
+ className: function className(_ref4) {
163
+ var children = _ref4.children,
164
+ styler = _ref4.styler,
165
+ width = _ref4.width;
166
+ return styler.append(typeof width === 'string' ? width : null, {
167
+ verticalScrollbar: (children === null || children === void 0 ? void 0 : children.length) > 5
168
+ });
169
+ },
170
+ dataSize: function dataSize(_ref5) {
171
+ var children = _ref5.children;
172
+ return children ? children.length : 0;
173
+ },
174
+ // Note: Retaining this in case we need to support different item sizes for large text mode:
175
+ // itemSize: ({skinVariants}) => ri.scale(skinVariants && skinVariants.largeText ? 156 : 156)
176
+ itemSize: function itemSize() {
177
+ return 156;
178
+ }
179
+ },
180
+ render: function render(_ref6) {
181
+ var dataSize = _ref6.dataSize,
182
+ id = _ref6.id,
183
+ itemSize = _ref6.itemSize,
184
+ scrollTo = _ref6.scrollTo,
185
+ width = _ref6.width,
186
+ rest = _objectWithoutProperties(_ref6, _excluded3);
187
+ delete rest.children;
188
+ delete rest.onSelect;
189
+ delete rest.selected;
190
+ delete rest.skinVariants;
191
+ delete rest.width;
192
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
193
+ role: "region",
194
+ "aria-labelledby": "".concat(id, "_dropdownlist"),
195
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
196
+ id: "".concat(id, "_dropdownlist"),
197
+ "aria-label": new _IString["default"]((0, _$L["default"])('Dropdown list opened {total} items in total')).format({
198
+ total: dataSize
199
+ })
200
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_VirtualList["default"], _objectSpread(_objectSpread({}, rest), {}, {
201
+ cbScrollTo: scrollTo,
202
+ dataSize: dataSize,
203
+ itemSize: _resolution["default"].scale(itemSize),
204
+ role: "group",
205
+ scrollbarTrackCss: _DropdownModule["default"],
206
+ style: {
207
+ backgroundColor: 'transparent',
208
+ height: _resolution["default"].scaleToRem(itemSize * dataSize + 36),
209
+ width: typeof width === 'number' ? _resolution["default"].scaleToRem(width) : null
210
+ }
211
+ }))]
212
+ });
213
+ }
214
+ });
215
+ var ReadyState = {
216
+ // Initial state. Scrolling and focusing pending
217
+ INIT: 0,
218
+ // Scroll requested
219
+ SCROLLED: 1,
220
+ // Focus completed or not required
221
+ DONE: 2
222
+ };
223
+ var DropdownListSpotlightDecorator = (0, _hoc["default"])(function (config, Wrapped) {
224
+ var WrappedWithRef = (0, _WithRef.WithRef)(Wrapped);
225
+
226
+ // eslint-disable-next-line no-shadow
227
+ var DropdownListSpotlightDecorator = function DropdownListSpotlightDecorator(props) {
228
+ var clientSiblingRef = (0, _react.useRef)(null);
229
+ var _useState = (0, _react.useState)({
230
+ prevChildren: props.children,
231
+ prevFocused: null,
232
+ prevSelected: props.selected,
233
+ prevSelectedKey: getKey(props),
234
+ ready: isSelectedValid(props) ? ReadyState.INIT : ReadyState.DONE
235
+ }),
236
+ _useState2 = _slicedToArray(_useState, 2),
237
+ state = _useState2[0],
238
+ setState = _useState2[1];
239
+ var scrollToRef = (0, _react.useRef)(function () {});
240
+ var lastFocusedKey = (0, _react.useRef)(null);
241
+ (0, _react.useEffect)(function () {
242
+ if (props.handleSpotlightPause) {
243
+ props.handleSpotlightPause(false);
244
+ }
245
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
246
+
247
+ var focusSelected = function focusSelected() {
248
+ setState(function (value) {
249
+ return _objectSpread(_objectSpread({}, value), {}, {
250
+ ready: ReadyState.DONE
251
+ });
252
+ });
253
+ };
254
+ var resetFocus = (0, _react.useCallback)(function (keysDiffer) {
255
+ var adjustedFocusIndex;
256
+ if (!keysDiffer && lastFocusedKey.current) {
257
+ var targetIndex = indexFromKey(props.children, lastFocusedKey.current);
258
+ if (targetIndex >= 0) {
259
+ adjustedFocusIndex = targetIndex;
260
+ }
261
+ }
262
+ setState({
263
+ prevChildren: props.children,
264
+ prevFocused: adjustedFocusIndex,
265
+ prevSelected: props.selected,
266
+ prevSelectedKey: getKey(props),
267
+ ready: ReadyState.INIT
268
+ });
269
+ }, [props]);
270
+ var scrollIntoView = (0, _react.useCallback)(function () {
271
+ var selected = props.selected;
272
+ if (state.prevFocused == null && !isSelectedValid(props)) {
273
+ selected = 0;
274
+ } else if (state.prevFocused != null) {
275
+ selected = state.prevFocused;
276
+ }
277
+ scrollToRef.current({
278
+ animate: false,
279
+ focus: true,
280
+ index: selected,
281
+ offset: _resolution["default"].scale(156 * 2),
282
+ // @lime-item-small-height * 2 (TODO: large text mode not supported!)
283
+ stickTo: 'start' // offset from the top of the dropdown
284
+ });
285
+ setState(function (value) {
286
+ return _objectSpread(_objectSpread({}, value), {}, {
287
+ ready: ReadyState.SCROLLED
288
+ });
289
+ });
290
+ }, [props, state.prevFocused]);
291
+ (0, _react.useEffect)(function () {
292
+ if (state.ready === ReadyState.INIT) {
293
+ scrollIntoView();
294
+ } else if (state.ready === ReadyState.SCROLLED) {
295
+ focusSelected();
296
+ } else {
297
+ var key = getKey(props);
298
+ var keysDiffer = key && state.prevSelectedKey && key !== state.prevSelectedKey;
299
+ if (keysDiffer || (!key || !state.prevSelectedKey) && state.prevSelected !== props.selected || !(0, _util.compareChildren)(state.prevChildren, props.children)) {
300
+ resetFocus(keysDiffer);
301
+ }
302
+ }
303
+ }, [props, resetFocus, scrollIntoView, state]);
304
+ var setScrollTo = (0, _react.useCallback)(function (scrollTo) {
305
+ scrollToRef.current = scrollTo;
306
+ }, []);
307
+ var handleFocus = (0, _react.useCallback)(function (ev) {
308
+ var current = ev.target;
309
+ var dropdownListNode = clientSiblingRef === null || clientSiblingRef === void 0 ? void 0 : clientSiblingRef.current;
310
+ if (state.ready === ReadyState.DONE && !_spotlight["default"].getPointerMode() && current.dataset['index'] != null && dropdownListNode.contains(current)) {
311
+ var focusedIndex = Number(current.dataset['index']);
312
+ lastFocusedKey.current = getKey({
313
+ children: props.children,
314
+ selected: focusedIndex
315
+ });
316
+ }
317
+ if (props.onFocus) {
318
+ props.onFocus(ev);
319
+ }
320
+ }, [props, state.ready]);
321
+ var wrappedComponentProps = Object.assign({}, props);
322
+ delete wrappedComponentProps.handleSpotlightPause;
323
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedWithRef, _objectSpread(_objectSpread({}, wrappedComponentProps), {}, {
324
+ onFocus: handleFocus,
325
+ outermostRef: clientSiblingRef,
326
+ referrerName: "DropdownList",
327
+ scrollTo: setScrollTo
328
+ }));
329
+ };
330
+ DropdownListSpotlightDecorator.displayName = 'DropdownListSpotlightDecorator';
331
+ DropdownListSpotlightDecorator.propTypes = {
332
+ /*
333
+ * Passed by DropdownBase to resume Spotlight
334
+ *
335
+ * @type {Function}
336
+ */
337
+ handleSpotlightPause: _propTypes2["default"].func,
338
+ /*
339
+ * Called when an item receives focus.
340
+ *
341
+ * @type {Function}
342
+ */
343
+ onFocus: _propTypes2["default"].func,
344
+ /*
345
+ * Index of the selected item.
346
+ *
347
+ * @type {Number}
348
+ */
349
+ selected: _propTypes2["default"].number
350
+ };
351
+ return DropdownListSpotlightDecorator;
352
+ });
353
+ var DropdownListDecorator = (0, _compose["default"])(DropdownListSpotlightDecorator, (0, _IdProvider["default"])({
354
+ generateProp: null,
355
+ prefix: 'dl_'
356
+ }), (0, _Skinnable["default"])({
357
+ variantsProp: 'skinVariants'
358
+ }));
359
+ var DropdownList = exports.DropdownList = DropdownListDecorator(DropdownListBase);
360
+ var _default = exports["default"] = DropdownList;
@@ -0,0 +1,3 @@
1
+ {
2
+ "main": "Dropdown.js"
3
+ }
@@ -0,0 +1,267 @@
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 _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
7
+ var _Dropdown = require("../Dropdown");
8
+ var _DropdownList = _interopRequireDefault(require("../DropdownList"));
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
12
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
13
+ var FloatingLayerController = (0, _FloatingLayer.FloatingLayerDecorator)('div');
14
+ var children = ['option1', 'option2', 'option3'];
15
+ var placeholder = 'Dropdown select';
16
+ var title = 'Options';
17
+ describe('Dropdown', function () {
18
+ test('should have default `placeholder` when a value is not provided', function () {
19
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
20
+ children: children
21
+ }));
22
+ var actual = _react.screen.getByText('No Selection');
23
+ expect(actual).toBeInTheDocument();
24
+ });
25
+ test('should have `placeholder` when a value is provided', function () {
26
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
27
+ placeholder: placeholder,
28
+ children: children
29
+ }));
30
+ var actual = _react.screen.getByText(placeholder);
31
+ expect(actual).toBeInTheDocument();
32
+ });
33
+ test('should have `title`', function () {
34
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
35
+ title: title,
36
+ children: children
37
+ }));
38
+ var actual = _react.screen.getByText(title);
39
+ var titleContainer = actual.parentElement.parentElement;
40
+ expect(actual).toBeInTheDocument();
41
+ expect(titleContainer).toHaveClass('heading');
42
+ });
43
+ test('should apply id to dropdown', function () {
44
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
45
+ id: "drop",
46
+ children: children
47
+ }));
48
+ var expected = 'drop';
49
+ var actual = _react.screen.getByRole('region');
50
+ expect(actual).toHaveAttribute('id', expected);
51
+ });
52
+ test('should apply aria label id to `title`', function () {
53
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
54
+ title: title,
55
+ id: "drop",
56
+ children: children
57
+ }));
58
+ var actual = _react.screen.getByText(title);
59
+ var titleContainer = actual.parentElement.parentElement;
60
+ expect(actual).toBeInTheDocument();
61
+ expect(titleContainer).toHaveAttribute('id', 'drop_title');
62
+ });
63
+ test('should apply aria-labelled-by to dropdown with title', function () {
64
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
65
+ title: title,
66
+ id: "drop",
67
+ children: children
68
+ }));
69
+ var expected = 'drop_title';
70
+ var actual = _react.screen.getByRole('region');
71
+ expect(actual).toHaveAttribute('aria-labelledby', expected);
72
+ });
73
+ test('should not apply aria-labelled-by when no title exists', function () {
74
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
75
+ id: "drop",
76
+ children: children
77
+ }));
78
+ var actual = _react.screen.getByRole('region');
79
+ expect(actual).not.toHaveAttribute('aria-labelledby');
80
+ });
81
+ test('should have `placeholder` when `children` is invalid', function () {
82
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
83
+ placeholder: placeholder,
84
+ children: null
85
+ }));
86
+ var actual = _react.screen.getByText(placeholder);
87
+ expect(actual).toBeInTheDocument();
88
+ });
89
+ test('should have `placeholder` that reflects `selected` option', function () {
90
+ var selectedIndex = 1;
91
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
92
+ selected: selectedIndex,
93
+ children: children
94
+ }));
95
+ var actual = _react.screen.getByText(children[selectedIndex]);
96
+ expect(actual).toBeInTheDocument();
97
+ });
98
+ test('should have `placeholder` when `selected` is invalid', function () {
99
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
100
+ placeholder: placeholder,
101
+ selected: -1,
102
+ children: children
103
+ }));
104
+ var actual = _react.screen.getByText(placeholder);
105
+ expect(actual).toBeInTheDocument();
106
+ });
107
+ test('should be disabled when `children` is omitted', function () {
108
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
109
+ title: title
110
+ }));
111
+ var expected = 'true';
112
+ var actual = _react.screen.getByRole('button');
113
+ expect(actual).toHaveAttribute('aria-disabled', expected);
114
+ });
115
+ test('should be disabled when there are no `children`', function () {
116
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
117
+ title: title,
118
+ children: []
119
+ }));
120
+ var expected = 'true';
121
+ var actual = _react.screen.getByRole('button');
122
+ expect(actual).toHaveAttribute('aria-disabled', expected);
123
+ });
124
+ test('should update when children are removed or added', function () {
125
+ var _render = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
126
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
127
+ open: true,
128
+ title: title,
129
+ children: children
130
+ })
131
+ })),
132
+ rerender = _render.rerender;
133
+ var lessChildren = children.slice(0, -1);
134
+ rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
135
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
136
+ open: true,
137
+ title: title,
138
+ children: lessChildren
139
+ })
140
+ }));
141
+ var lessChildrenExpected = 2;
142
+ var lessChildrenActual = _react.screen.getByRole('group').children;
143
+ expect(lessChildrenActual).toHaveLength(lessChildrenExpected);
144
+ var moreChildren = children.concat('option3');
145
+ rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
146
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
147
+ open: true,
148
+ title: title,
149
+ children: moreChildren
150
+ })
151
+ }));
152
+ var moreChildrenExpected = 3;
153
+ var moreChildrenActual = _react.screen.getByRole('group').children;
154
+ expect(moreChildrenActual).toHaveLength(moreChildrenExpected);
155
+ });
156
+ test('should set the `role` of items to "checkbox"', function () {
157
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
158
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
159
+ open: true,
160
+ title: title,
161
+ children: ['item']
162
+ })
163
+ }));
164
+ var expected = 'layout item';
165
+ var actual = _react.screen.getByRole('checkbox');
166
+ expect(actual).toBeInTheDocument();
167
+ expect(actual).toHaveClass(expected);
168
+ });
169
+ test('should set the `aria-checked` state of the `selected` item', function () {
170
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
171
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
172
+ open: true,
173
+ selected: 0,
174
+ title: title,
175
+ children: ['item']
176
+ })
177
+ }));
178
+ var expected = 'true';
179
+ var actual = _react.screen.getByRole('checkbox');
180
+ expect(actual).toHaveAttribute('aria-checked', expected);
181
+ });
182
+ test('should set the `aria-posinset` and `aria-setsize` state of the item in the list', function () {
183
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
184
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
185
+ open: true,
186
+ title: title,
187
+ children: children
188
+ })
189
+ }));
190
+ var posinsetExpected = '1';
191
+ var setsizeExpected = '3';
192
+ var actual = _react.screen.getByRole('group').children[0].children[0];
193
+ expect(actual).toHaveAttribute('aria-posinset', posinsetExpected);
194
+ expect(actual).toHaveAttribute('aria-setsize', setsizeExpected);
195
+ });
196
+ test('should pass through members of child objects to props for each item', function () {
197
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
198
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
199
+ open: true,
200
+ title: title,
201
+ children: [{
202
+ disabled: true,
203
+ children: 'child',
204
+ key: 'item-0'
205
+ }]
206
+ })
207
+ }));
208
+ var expected = 'true';
209
+ var actual = _react.screen.getByRole('checkbox');
210
+ expect(actual).toHaveAttribute('aria-disabled', expected);
211
+ });
212
+ test('should allow members in child object to override injected aria values', function () {
213
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
214
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
215
+ open: true,
216
+ selected: 0,
217
+ title: title,
218
+ children: [{
219
+ disabled: true,
220
+ children: 'child',
221
+ key: 'item-0',
222
+ role: 'button',
223
+ 'aria-checked': false
224
+ }]
225
+ })
226
+ }));
227
+ var actual = (0, _react.within)(_react.screen.getByRole('group')).getByRole('button');
228
+ expect(actual).toHaveAttribute('aria-checked', 'false');
229
+ });
230
+ test('should fire `onSelect` event with type `onSelect`', /*#__PURE__*/_asyncToGenerator(function* () {
231
+ var handleSelect = jest.fn();
232
+ var user = _userEvent["default"].setup();
233
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(FloatingLayerController, {
234
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.DropdownBase, {
235
+ open: true,
236
+ onSelect: handleSelect,
237
+ title: title,
238
+ children: children
239
+ })
240
+ }));
241
+ var firstItem = _react.screen.getByRole('group').children[0].children[0];
242
+ yield user.click(firstItem);
243
+ expect(handleSelect).toHaveBeenCalledWith({
244
+ data: 'option1',
245
+ selected: 0,
246
+ type: 'onSelect'
247
+ });
248
+ }));
249
+ describe('DropdownList', function () {
250
+ test('should include `data` and `selected` in `onSelect` callback', /*#__PURE__*/_asyncToGenerator(function* () {
251
+ var handler = jest.fn();
252
+ var user = _userEvent["default"].setup();
253
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DropdownList["default"], {
254
+ onSelect: handler,
255
+ children: children
256
+ }));
257
+ var firstItem = _react.screen.getByRole('group').children[0].children[0];
258
+ yield user.click(firstItem);
259
+ var expected = {
260
+ data: 'option1',
261
+ selected: 0
262
+ };
263
+ var actual = handler.mock.calls[0][0];
264
+ expect(actual).toEqual(expected);
265
+ }));
266
+ });
267
+ });