@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,423 @@
1
+ // Type definitions for limestone/Input
2
+
3
+ import { ChangeableProps as ui_Changeable_ChangeableProps } from "@enact/ui/Changeable";
4
+ import { SkinnableProps as limestone_Skinnable_SkinnableProps } from "limestone/Skinnable";
5
+ import { ToggleableProps as ui_Toggleable_ToggleableProps } from "@enact/ui/Toggleable";
6
+ import * as React from "react";
7
+ import { SpottableProps as spotlight_Spottable_SpottableProps } from "@enact/spotlight/Spottable";
8
+
9
+ type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
10
+ type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
11
+
12
+ export interface InputFieldBaseProps {
13
+ /**
14
+ * Passed by AnnounceDecorator for accessibility.
15
+ */
16
+ announce?: Function;
17
+ /**
18
+ * Disables InputField and becomes non-interactive.
19
+ */
20
+ disabled?: boolean;
21
+ /**
22
+ * Blurs the input when the "enter" key is pressed.
23
+ */
24
+ dismissOnEnter?: boolean;
25
+ /**
26
+ * The icon to be placed at the end of the input.
27
+ */
28
+ iconAfter?: string;
29
+ /**
30
+ * The icon to be placed at the beginning of the input.
31
+ */
32
+ iconBefore?: string;
33
+ /**
34
+ * Indicates is invalid and shows
35
+ , if set.
36
+ */
37
+ invalid?: boolean;
38
+ /**
39
+ * The tooltip text to be displayed when the input is
40
+ .
41
+ *
42
+ * If this value is _falsy_ , the tooltip will be shown with the default message.
43
+ */
44
+ invalidMessage?: string;
45
+ /**
46
+ * Called before the input value is changed.
47
+ *
48
+ * The change can be prevented by calling `preventDefault` on the event.
49
+ */
50
+ onBeforeChange?: Function;
51
+ /**
52
+ * Called when blurred.
53
+ */
54
+ onBlur?: Function;
55
+ /**
56
+ * Called when the input value is changed.
57
+ *
58
+ * The event payload includes the current `value` as well as a `stopPropagation()` method
59
+ which may be called to stop the original `onChange` event from the `<input>` from
60
+ bubbling.
61
+ */
62
+ onChange?: Function;
63
+ /**
64
+ * Called when clicked.
65
+ */
66
+ onClick?: Function;
67
+ /**
68
+ * Called when focused.
69
+ */
70
+ onFocus?: Function;
71
+ /**
72
+ * Called when a key is pressed down.
73
+ */
74
+ onKeyDown?: Function;
75
+ /**
76
+ * Text to display when is not set.
77
+ */
78
+ placeholder?: string;
79
+ /**
80
+ * The size of the input field.
81
+ */
82
+ size?: "large" | "small";
83
+ /**
84
+ * The type of input.
85
+ *
86
+ * Accepted values correspond to the standard HTML5 input types.
87
+ */
88
+ type?: string;
89
+ /**
90
+ * The value of the input.
91
+ */
92
+ value?: string | number;
93
+ }
94
+ /**
95
+ * A Limestone styled input component.
96
+ *
97
+ * It supports start and end icons, but it does not support Spotlight. Apps should use
98
+ .
99
+ */
100
+
101
+ export class InputFieldBase extends React.Component<
102
+ Merge<React.HTMLProps<HTMLElement>, InputFieldBaseProps>
103
+ > {}
104
+
105
+ export interface InputPopupBaseProps {
106
+ /**
107
+ * Passed by AnnounceDecorator for accessibility.
108
+ */
109
+ announce?: object;
110
+ /**
111
+ * Sets the hint string read when focusing the back button.
112
+ */
113
+ backButtonAriaLabel?: string;
114
+ /**
115
+ * Buttons to be included under the component.
116
+ *
117
+ * Typically, up to 3 buttons are used.
118
+ */
119
+ buttons?: JSX.Element | JSX.Element[];
120
+ /**
121
+ * Customize component style
122
+ */
123
+ css?: object;
124
+ /**
125
+ * Initial value of the input.
126
+ *
127
+ * This value is used for setting the `defaultValue` of the `InputField` .
128
+ */
129
+ defaultValue?: string | number;
130
+ /**
131
+ * Disables the input popup.
132
+ */
133
+ disabled?: boolean;
134
+ /**
135
+ * Sets spotlightId to InputField.
136
+ */
137
+ inputFieldSpotlightId?: string;
138
+ /**
139
+ * Indicates the value is invalid and shows
140
+ , if set.
141
+ */
142
+ invalid?: boolean;
143
+ /**
144
+ * The tooltip text to be displayed when the input is
145
+ .
146
+ *
147
+ * If this value is _falsy_ , the tooltip will be shown with the default message.
148
+ */
149
+ invalidMessage?: string;
150
+ /**
151
+ * Set the length of number input field.
152
+ *
153
+ * Sets the amount of numbers this field will collect. Any number between 1 and 6
154
+ (inclusive) will render individual number cells, greater than 6 will render a single box
155
+ with numbers in it. This only has an effect on `'number'` and `'passwordnumber'` `type`
156
+ and when `numberInputField` is `'auto'` .
157
+ *
158
+ * This value will override `minLength` and `maxLength` .
159
+ */
160
+ length?: number;
161
+ /**
162
+ * The maximum length of number input fields.
163
+ *
164
+ * Overridden by `length` value.
165
+ */
166
+ maxLength?: number;
167
+ /**
168
+ * The minimum length of number input fields.
169
+ *
170
+ * Overridden by `length` value.
171
+ *
172
+ * When smaller than `maxLength` , number type inputs will show a submit button and will not
173
+ auto-submit when the length reaches `maxLength` . Defaults to the `maxLength` value.
174
+ */
175
+ minLength?: number;
176
+ /**
177
+ * Omits the back button.
178
+ */
179
+ noBackButton?: boolean;
180
+ /**
181
+ * Omits the submit button.
182
+ */
183
+ noSubmitButton?: boolean;
184
+ /**
185
+ * The type of numeric input to use.
186
+ *
187
+ * The default is to display separated digits when `length` is less than `7` . If `field` is
188
+ set, a standard `InputField` will be used instead of the normal number input.
189
+ *
190
+ * This has no effect on other .
191
+ */
192
+ numberInputField?: "auto" | "separated" | "joined" | "field";
193
+ /**
194
+ * Called before the input value is changed.
195
+ *
196
+ * The change can be prevented by calling `preventDefault` on the event.
197
+ */
198
+ onBeforeChange?: Function;
199
+ /**
200
+ * Called when the input value is changed.
201
+ */
202
+ onChange?: Function;
203
+ /**
204
+ * Called when the popup is closed.
205
+ */
206
+ onClose?: Function;
207
+ /**
208
+ * Called when input is complete.
209
+ */
210
+ onComplete?: Function;
211
+ /**
212
+ * Called when the popup is opened.
213
+ */
214
+ onOpenPopup?: Function;
215
+ /**
216
+ * Opens the popup.
217
+ */
218
+ open?: boolean;
219
+ /**
220
+ * Text displayed when value is not set.
221
+ */
222
+ placeholder?: string;
223
+ /**
224
+ * The "aria-label" for the popup when opened.
225
+ */
226
+ popupAriaLabel?: string;
227
+ /**
228
+ * Type of popup.
229
+ */
230
+ popupType?: "fullscreen" | "overlay";
231
+ /**
232
+ * Size of the input field.
233
+ */
234
+ size?: "large" | "small";
235
+ /**
236
+ * Subtitle below the title of popup.
237
+ */
238
+ subtitle?: string;
239
+ /**
240
+ * Title text of popup.
241
+ */
242
+ title?: string;
243
+ /**
244
+ * Type of the input.
245
+ */
246
+ type?:
247
+ | "text"
248
+ | "password"
249
+ | "number"
250
+ | "passwordnumber"
251
+ | "url"
252
+ | "tel"
253
+ | "passwordtel";
254
+ }
255
+ /**
256
+ * Base component for providing text input in the form of a popup without button.
257
+ */
258
+
259
+ export class InputPopupBase extends React.Component<
260
+ Merge<React.HTMLProps<HTMLElement>, InputPopupBaseProps>
261
+ > {}
262
+
263
+ export interface InputFieldDecoratorProps
264
+ extends Merge<
265
+ ui_Changeable_ChangeableProps,
266
+ limestone_Skinnable_SkinnableProps
267
+ > {}
268
+ export function InputFieldDecorator<P>(
269
+ Component: React.ComponentType<P> | string,
270
+ ): React.ComponentType<P & InputFieldDecoratorProps>;
271
+
272
+ export interface InputFieldProps
273
+ extends Merge<
274
+ Merge<
275
+ Merge<InputFieldBaseProps, ui_Changeable_ChangeableProps>,
276
+ spotlight_Spottable_SpottableProps
277
+ >,
278
+ limestone_Skinnable_SkinnableProps
279
+ > {
280
+ /**
281
+ * Focuses the internal input when the component gains 5-way focus.
282
+ *
283
+ * By default, the internal input is not editable when the component is focused via 5-way and must
284
+ be selected to become interactive. In pointer mode, the input will be editable when clicked.
285
+ */
286
+ autoFocus?: boolean;
287
+ /**
288
+ * Applies a disabled style and prevents interacting with the component.
289
+ */
290
+ disabled?: boolean;
291
+ /**
292
+ * Sets the initial value.
293
+ */
294
+ defaultValue?: string;
295
+ /**
296
+ * Blurs the input when the "enter" key is pressed.
297
+ */
298
+ dismissOnEnter?: boolean;
299
+ /**
300
+ * Called when the internal input is focused.
301
+ */
302
+ onActivate?: Function;
303
+ /**
304
+ * Called when the internal input loses focus.
305
+ */
306
+ onDeactivate?: Function;
307
+ /**
308
+ * Called when the component is removed when it had focus.
309
+ */
310
+ onSpotlightDisappear?: Function;
311
+ /**
312
+ * Disables spotlight navigation into the component.
313
+ */
314
+ spotlightDisabled?: boolean;
315
+ }
316
+ /**
317
+ * A Spottable, Limestone styled input component with embedded icon support.
318
+ *
319
+ * By default, `InputField` maintains the state of its `value` property. Supply the `defaultValue`
320
+ property to control its initial value. If you wish to directly control updates to the component,
321
+ supply a value to `value` at creation time and update it in response to `onChange` events.
322
+ */
323
+
324
+ export class InputField extends React.Component<
325
+ Merge<React.HTMLProps<HTMLElement>, InputFieldProps>
326
+ > {}
327
+
328
+ export interface InputBaseProps {
329
+ /**
330
+ * Disables the button that activates the input popup.
331
+ */
332
+ disabled?: boolean;
333
+ /**
334
+ * Text displayed when value is not set.
335
+ */
336
+ placeholder?: string;
337
+ /**
338
+ * The size of the input field.
339
+ */
340
+ size?: "large" | "small";
341
+ /**
342
+ * Type of the input.
343
+ */
344
+ type?:
345
+ | "text"
346
+ | "password"
347
+ | "number"
348
+ | "passwordnumber"
349
+ | "url"
350
+ | "tel"
351
+ | "passwordtel";
352
+ /**
353
+ * The value of the input.
354
+ */
355
+ value?: string | number;
356
+ }
357
+ /**
358
+ * Base component for providing text input in the form of a popup.
359
+ */
360
+
361
+ export class InputBase extends React.Component<
362
+ Merge<React.HTMLProps<HTMLElement>, InputBaseProps>
363
+ > {}
364
+
365
+ export interface InputDecoratorProps
366
+ extends Merge<
367
+ Merge<ui_Toggleable_ToggleableProps, ui_Changeable_ChangeableProps>,
368
+ limestone_Skinnable_SkinnableProps
369
+ > {}
370
+ export function InputDecorator<P>(
371
+ Component: React.ComponentType<P> | string,
372
+ ): React.ComponentType<P & InputDecoratorProps>;
373
+
374
+ export interface InputProps extends InputBaseProps {}
375
+ /**
376
+ * Provides an input in the form of a popup.
377
+ *
378
+ * Usage:
379
+ * ```
380
+ <Input
381
+ onComplete={this.handleInputComplete}
382
+ placeholder="Placeholder"
383
+ subtitle="TitleBelow"
384
+ title="Title"
385
+ />
386
+ ```
387
+
388
+ * By default, `Input` maintains the state of its `value` property. Supply the `defaultValue`
389
+ property to control its initial value. If you wish to directly control updates to the
390
+ component, supply a value to `value` at creation time and update it in response to `onChange`
391
+ events.
392
+ */
393
+
394
+ export class Input extends React.Component<
395
+ Merge<React.HTMLProps<HTMLElement>, InputProps>
396
+ > {}
397
+
398
+ export interface InputPopupProps extends InputPopupBaseProps {}
399
+ /**
400
+ * Provides an input popup without button.
401
+ *
402
+ * Usage:
403
+ * ```
404
+ <InputPopup
405
+ open={this.state.open}
406
+ onComplete={this.handleInputPopupComplete}
407
+ placeholder="Placeholder"
408
+ subtitle="Subtitle"
409
+ title="Title"
410
+ />
411
+ ```
412
+
413
+ * By default, `InputPopup` maintains the state of its `value` property. Supply the `defaultValue`
414
+ property to control its initial value. If you wish to directly control updates to the
415
+ component, supply a value to `value` at creation time and update it in response to `onChange`
416
+ events.
417
+ */
418
+
419
+ export class InputPopup extends React.Component<
420
+ Merge<React.HTMLProps<HTMLElement>, InputPopupProps>
421
+ > {}
422
+
423
+ export default Input;
package/Input/index.js ADDED
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Input", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _Input.Input;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "InputBase", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _Input.InputBase;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "InputDecorator", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _Input.InputDecorator;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "InputField", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _InputField.InputField;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "InputFieldBase", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _InputField.InputFieldBase;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "InputFieldDecorator", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _InputField.InputFieldDecorator;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "InputPopup", {
43
+ enumerable: true,
44
+ get: function get() {
45
+ return _Input.InputPopup;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "InputPopupBase", {
49
+ enumerable: true,
50
+ get: function get() {
51
+ return _Input.InputPopupBase;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "calcAriaLabel", {
55
+ enumerable: true,
56
+ get: function get() {
57
+ return _util.calcAriaLabel;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "convertToPasswordFormat", {
61
+ enumerable: true,
62
+ get: function get() {
63
+ return _util.convertToPasswordFormat;
64
+ }
65
+ });
66
+ exports["default"] = void 0;
67
+ Object.defineProperty(exports, "extractInputFieldProps", {
68
+ enumerable: true,
69
+ get: function get() {
70
+ return _util.extractInputFieldProps;
71
+ }
72
+ });
73
+ var _Input = require("./Input");
74
+ var _InputField = require("./InputField");
75
+ var _util = require("./util");
76
+ /**
77
+ * Popup style inputs for text and numbers.
78
+ *
79
+ * @module limestone/Input
80
+ * @exports Input
81
+ * @exports InputBase
82
+ * @exports InputDecorator
83
+ * @exports InputField
84
+ * @exports InputFieldBase
85
+ * @exports InputFieldDecorator
86
+ */
87
+ var _default = exports["default"] = _Input.Input;
@@ -0,0 +1,3 @@
1
+ {
2
+ "main": "index.js"
3
+ }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.releasePointer = exports.lockPointer = void 0;
7
+ var _handle = require("@enact/core/handle");
8
+ var active;
9
+ var capturedDown = false;
10
+
11
+ // if there is a focused input (there should be) and the target is not the input
12
+ var shouldCapture = function shouldCapture(_ref) {
13
+ var target = _ref.target;
14
+ return active && target !== active;
15
+ };
16
+ var isCapturing = function isCapturing() {
17
+ return capturedDown && active;
18
+ };
19
+ var setCapturing = function setCapturing(capturing) {
20
+ return (0, _handle.returnsTrue)(function () {
21
+ return capturedDown = capturing;
22
+ });
23
+ };
24
+ var handlePointerDown = (0, _handle.handle)(shouldCapture,
25
+ // If we should capture the click
26
+ _handle.preventDefault,
27
+ // prevent the down event bubbling
28
+ _handle.stop,
29
+ // (and stop propagation to support touch)
30
+ setCapturing(true) // and flag that we've started capturing a down event
31
+ );
32
+ var handlePointerUp = (0, _handle.handle)(isCapturing,
33
+ // if a down event was captured
34
+ _handle.preventDefault,
35
+ // prevent the up event bubbling
36
+ _handle.stop // (and stop propagation to support touch)
37
+ );
38
+
39
+ // This is attached to both click and touchend. On some systems (e.g. Chrome), click events are
40
+ // fired when you touch anything but other systems (e.g. iOS) will only emit click events when you
41
+ // touch a clickable component (something with a tabindex). By attaching the same handler to both,
42
+ // we ensure that we do not leave this module in an unstable state where it thinks capturing is
43
+ // active but focus is not on the input.
44
+ var handleTap = (0, _handle.handle)(isCapturing,
45
+ // if a down event was captured
46
+ _handle.stop,
47
+ // prevent the click event from propagating
48
+ _handle.preventDefault,
49
+ // prevent touchend from triggering a click after releasing lock
50
+ setCapturing(false),
51
+ // clear the capturing flag
52
+ function () {
53
+ return active.blur();
54
+ } // and blur the active node
55
+ );
56
+ var handleTouchStart = (0, _handle.handle)(shouldCapture,
57
+ // If we should capture the click
58
+ _handle.stop,
59
+ // prevent other components from handling this event
60
+ setCapturing(true) // and flag that we've started capturing a down event
61
+ );
62
+
63
+ // Lock the pointer from emitting click events until released
64
+ var lockPointer = exports.lockPointer = function lockPointer(target) {
65
+ active = target;
66
+ document.addEventListener('mousedown', handlePointerDown, {
67
+ capture: true
68
+ });
69
+ document.addEventListener('mouseup', handlePointerUp, {
70
+ capture: true
71
+ });
72
+ document.addEventListener('touchstart', handleTouchStart, {
73
+ capture: true
74
+ });
75
+ document.addEventListener('touchend', handleTap, {
76
+ capture: true
77
+ });
78
+ document.addEventListener('click', handleTap, {
79
+ capture: true
80
+ });
81
+ };
82
+
83
+ // Release the pointer and allow subsequent click events
84
+ var releasePointer = exports.releasePointer = function releasePointer(target) {
85
+ if (target === active) {
86
+ active = null;
87
+ document.removeEventListener('mousedown', handlePointerDown, {
88
+ capture: true
89
+ });
90
+ document.removeEventListener('mouseup', handlePointerUp, {
91
+ capture: true
92
+ });
93
+ document.removeEventListener('touchstart', handleTouchStart, {
94
+ capture: true
95
+ });
96
+ document.removeEventListener('touchend', handleTap, {
97
+ capture: true
98
+ });
99
+ document.removeEventListener('click', handleTap, {
100
+ capture: true
101
+ });
102
+ }
103
+ };