@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.
- package/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- package/.github/workflows/update-copyright-years.yml +25 -0
- package/.travis.yml +40 -0
- package/ActionGuide/ActionGuide.d.ts +73 -0
- package/ActionGuide/ActionGuide.js +164 -0
- package/ActionGuide/ActionGuide.module.css +73 -0
- package/ActionGuide/package.json +3 -0
- package/ActionGuide/tests/ActionGuide-specs.js +51 -0
- package/Alert/Alert.d.ts +155 -0
- package/Alert/Alert.js +313 -0
- package/Alert/Alert.module.css +190 -0
- package/Alert/AlertImage.js +102 -0
- package/Alert/AlertImage.module.css +15 -0
- package/Alert/package.json +3 -0
- package/Alert/tests/Alert-specs.js +204 -0
- package/BodyText/BodyText.d.ts +74 -0
- package/BodyText/BodyText.js +170 -0
- package/BodyText/BodyText.module.css +95 -0
- package/BodyText/package.json +3 -0
- package/BodyText/tests/BodyText-specs.js +55 -0
- package/Button/Button.d.ts +131 -0
- package/Button/Button.js +351 -0
- package/Button/Button.module.css +2518 -0
- package/Button/package.json +3 -0
- package/Button/tests/Button-specs.js +252 -0
- package/CHANGELOG.md +170 -0
- package/Card/Card.d.ts +138 -0
- package/Card/Card.js +396 -0
- package/Card/Card.module.css +1296 -0
- package/Card/package.json +3 -0
- package/Card/tests/Card-specs.js +65 -0
- package/Checkbox/Checkbox.d.ts +99 -0
- package/Checkbox/Checkbox.js +222 -0
- package/Checkbox/Checkbox.module.css +1395 -0
- package/Checkbox/package.json +3 -0
- package/Checkbox/tests/Checkbox-specs.js +79 -0
- package/CheckboxItem/CheckboxItem.d.ts +99 -0
- package/CheckboxItem/CheckboxItem.js +210 -0
- package/CheckboxItem/CheckboxItem.module.css +50 -0
- package/CheckboxItem/package.json +3 -0
- package/CheckboxItem/tests/CheckboxItem-specs.js +52 -0
- package/Chips/Chip.js +252 -0
- package/Chips/Chip.module.css +30 -0
- package/Chips/Chips.js +215 -0
- package/Chips/Chips.module.css +8 -0
- package/Chips/index.js +86 -0
- package/Chips/tests/Chip-specs.js +186 -0
- package/Chips/tests/Chips-specs.js +312 -0
- package/ColorPicker/ColorPicker.js +416 -0
- package/ColorPicker/ColorPicker.module.css +78 -0
- package/ColorPicker/package.json +3 -0
- package/ColorPicker/tests/ColorPicker-specs.js +225 -0
- package/ColorPicker/utils.js +135 -0
- package/ContextualMenuDecorator/ContextualMenuDecorator.d.ts +106 -0
- package/ContextualMenuDecorator/ContextualMenuDecorator.js +264 -0
- package/ContextualMenuDecorator/ContextualMenuDecorator.module.css +42 -0
- package/ContextualMenuDecorator/package.json +3 -0
- package/ContextualMenuDecorator/tests/ContextualMenuDecorator-specs.js +136 -0
- package/ContextualPopupDecorator/ContextualPopup.js +200 -0
- package/ContextualPopupDecorator/ContextualPopup.module.css +270 -0
- package/ContextualPopupDecorator/ContextualPopupDecorator.d.ts +182 -0
- package/ContextualPopupDecorator/ContextualPopupDecorator.js +867 -0
- package/ContextualPopupDecorator/ContextualPopupDecorator.module.css +3 -0
- package/ContextualPopupDecorator/HolePunchScrim.js +69 -0
- package/ContextualPopupDecorator/HolePunchScrim.module.css +38 -0
- package/ContextualPopupDecorator/package.json +3 -0
- package/ContextualPopupDecorator/tests/ContextualPopupDecorator-specs.js +621 -0
- package/DatePicker/DatePicker.d.ts +173 -0
- package/DatePicker/DatePicker.js +175 -0
- package/DatePicker/DatePicker.module.css +5 -0
- package/DatePicker/DatePickerBase.js +348 -0
- package/DatePicker/package.json +3 -0
- package/DatePicker/tests/DatePicker-specs.js +247 -0
- package/DayPicker/DayPicker.d.ts +92 -0
- package/DayPicker/DayPicker.js +188 -0
- package/DayPicker/DayPicker.module.css +35 -0
- package/DayPicker/DaySelectorDecorator.js +301 -0
- package/DayPicker/package.json +3 -0
- package/DayPicker/tests/DayPicker-specs.js +138 -0
- package/Dropdown/Dropdown.d.ts +135 -0
- package/Dropdown/Dropdown.js +460 -0
- package/Dropdown/Dropdown.module.css +160 -0
- package/Dropdown/DropdownList.js +360 -0
- package/Dropdown/package.json +3 -0
- package/Dropdown/tests/Dropdown-specs.js +267 -0
- package/FixedPopupPanels/FixedPopupPanels.d.ts +72 -0
- package/FixedPopupPanels/FixedPopupPanels.js +170 -0
- package/FixedPopupPanels/FixedPopupPanels.module.css +146 -0
- package/FixedPopupPanels/package.json +3 -0
- package/FixedPopupPanels/tests/FixedPopupPanels-specs.js +142 -0
- package/FlexiblePopupPanels/FlexiblePopupPanels.js +177 -0
- package/FlexiblePopupPanels/FlexiblePopupPanels.module.css +291 -0
- package/FlexiblePopupPanels/Header.js +110 -0
- package/FlexiblePopupPanels/Panel.js +256 -0
- package/FlexiblePopupPanels/index.d.ts +145 -0
- package/FlexiblePopupPanels/index.js +68 -0
- package/FlexiblePopupPanels/package.json +3 -0
- package/FlexiblePopupPanels/tests/FlexiblePopupPanels-specs.js +305 -0
- package/FlexiblePopupPanels/useNavButtonFocus.js +65 -0
- package/FormCheckboxItem/FormCheckboxItem.d.ts +87 -0
- package/FormCheckboxItem/FormCheckboxItem.js +200 -0
- package/FormCheckboxItem/FormCheckboxItem.module.css +374 -0
- package/FormCheckboxItem/package.json +3 -0
- package/FormCheckboxItem/tests/FormCheckboxItem-specs.js +164 -0
- package/Heading/Heading.d.ts +104 -0
- package/Heading/Heading.js +203 -0
- package/Heading/Heading.module.css +217 -0
- package/Heading/package.json +3 -0
- package/Heading/tests/Heading-specs.js +57 -0
- package/Icon/Icon.d.ts +377 -0
- package/Icon/Icon.js +503 -0
- package/Icon/Icon.module.css +121 -0
- package/Icon/IconList.js +611 -0
- package/Icon/package.json +3 -0
- package/Icon/tests/Icon-specs.js +131 -0
- package/IconItem/IconItem.d.ts +137 -0
- package/IconItem/IconItem.js +360 -0
- package/IconItem/IconItem.module.css +414 -0
- package/IconItem/package.json +3 -0
- package/IconItem/tests/IconItem-specs.js +106 -0
- package/Image/Image.d.ts +60 -0
- package/Image/Image.js +165 -0
- package/Image/Image.module.css +5 -0
- package/Image/package.json +3 -0
- package/Image/tests/Image-specs.js +62 -0
- package/ImageItem/ImageItem.d.ts +134 -0
- package/ImageItem/ImageItem.js +377 -0
- package/ImageItem/ImageItem.module.css +1079 -0
- package/ImageItem/package.json +3 -0
- package/ImageItem/tests/ImageItem-specs.js +223 -0
- package/Input/Input.js +715 -0
- package/Input/Input.module.css +699 -0
- package/Input/InputField.js +487 -0
- package/Input/InputField.module.css +763 -0
- package/Input/InputFieldDecoratorIcon.js +66 -0
- package/Input/InputFieldSpotlightDecorator.js +380 -0
- package/Input/Keypad.js +111 -0
- package/Input/NumberField.js +311 -0
- package/Input/index.d.ts +423 -0
- package/Input/index.js +87 -0
- package/Input/package.json +3 -0
- package/Input/pointer.js +103 -0
- package/Input/tests/Input-specs.js +537 -0
- package/Input/tests/InputField-specs.js +292 -0
- package/Input/tests/InputPopup-specs.js +56 -0
- package/Input/util.js +130 -0
- package/Item/Item.d.ts +108 -0
- package/Item/Item.js +360 -0
- package/Item/Item.module.css +665 -0
- package/Item/package.json +3 -0
- package/Item/tests/Item-specs.js +108 -0
- package/KeyGuide/KeyGuide.d.ts +103 -0
- package/KeyGuide/KeyGuide.js +254 -0
- package/KeyGuide/KeyGuide.module.css +431 -0
- package/KeyGuide/package.json +3 -0
- package/KeyGuide/tests/KeyGuide-specs.js +168 -0
- package/LICENSE +201 -0
- package/Marquee/Marquee.d.ts +42 -0
- package/Marquee/Marquee.js +45 -0
- package/Marquee/package.json +3 -0
- package/MediaOverlay/MediaOverlay.d.ts +134 -0
- package/MediaOverlay/MediaOverlay.js +304 -0
- package/MediaOverlay/MediaOverlay.module.css +292 -0
- package/MediaOverlay/package.json +3 -0
- package/MediaOverlay/tests/MediaOverlay-specs.js +127 -0
- package/MediaPlayer/MediaControls.js +934 -0
- package/MediaPlayer/MediaControls.module.css +86 -0
- package/MediaPlayer/MediaKnob.js +61 -0
- package/MediaPlayer/MediaSlider.js +131 -0
- package/MediaPlayer/MediaSlider.module.css +319 -0
- package/MediaPlayer/MediaSliderDecorator.js +245 -0
- package/MediaPlayer/Times.js +152 -0
- package/MediaPlayer/Times.module.css +34 -0
- package/MediaPlayer/index.d.ts +223 -0
- package/MediaPlayer/index.js +34 -0
- package/MediaPlayer/package.json +3 -0
- package/MediaPlayer/tests/MediaSlider-specs.js +126 -0
- package/MediaPlayer/tests/util-specs.js +114 -0
- package/MediaPlayer/util.js +83 -0
- package/PageViews/Page.js +77 -0
- package/PageViews/Page.module.css +3 -0
- package/PageViews/PageViews.js +440 -0
- package/PageViews/PageViews.module.css +175 -0
- package/PageViews/PageViewsRouter.js +150 -0
- package/PageViews/index.js +45 -0
- package/PageViews/tests/PageViews-specs.js +192 -0
- package/Panels/Header.js +599 -0
- package/Panels/Header.module.css +243 -0
- package/Panels/Panel.js +347 -0
- package/Panels/Panel.module.css +33 -0
- package/Panels/Panels.js +258 -0
- package/Panels/Panels.module.css +12 -0
- package/Panels/index.d.ts +376 -0
- package/Panels/index.js +66 -0
- package/Panels/package.json +3 -0
- package/Panels/tests/Header-specs.js +146 -0
- package/Panels/tests/Panels-specs.js +257 -0
- package/Picker/Picker.d.ts +193 -0
- package/Picker/Picker.js +389 -0
- package/Picker/Picker.module.css +46 -0
- package/Picker/package.json +3 -0
- package/Picker/tests/Picker-specs.js +91 -0
- package/Popup/Popup.d.ts +169 -0
- package/Popup/Popup.js +690 -0
- package/Popup/Popup.module.css +180 -0
- package/Popup/package.json +3 -0
- package/Popup/tests/Popup-specs.js +475 -0
- package/PopupTabLayout/PopupTabLayout.d.ts +196 -0
- package/PopupTabLayout/PopupTabLayout.js +605 -0
- package/PopupTabLayout/PopupTabLayout.module.css +226 -0
- package/PopupTabLayout/package.json +3 -0
- package/PopupTabLayout/tests/PopupTabLayout-specs.js +285 -0
- package/ProgressBar/ProgressBar.d.ts +171 -0
- package/ProgressBar/ProgressBar.js +223 -0
- package/ProgressBar/ProgressBar.module.css +264 -0
- package/ProgressBar/ProgressBarTooltip.js +359 -0
- package/ProgressBar/ProgressBarTooltip.module.css +86 -0
- package/ProgressBar/package.json +3 -0
- package/ProgressBar/tests/ProgressBar-specs.js +400 -0
- package/ProgressButton/ProgressButton.d.ts +57 -0
- package/ProgressButton/ProgressButton.js +143 -0
- package/ProgressButton/ProgressButton.module.css +147 -0
- package/ProgressButton/package.json +3 -0
- package/ProgressButton/tests/ProgressButton-specs.js +71 -0
- package/QuickGuidePanels/Panel.js +90 -0
- package/QuickGuidePanels/QuickGuidePanels.js +463 -0
- package/QuickGuidePanels/QuickGuidePanels.module.css +26 -0
- package/QuickGuidePanels/index.js +52 -0
- package/QuickGuidePanels/tests/QuickGuidePanels-specs.js +250 -0
- package/README.md +59 -0
- package/RadioItem/RadioItem.d.ts +59 -0
- package/RadioItem/RadioItem.js +146 -0
- package/RadioItem/RadioItem.module.css +233 -0
- package/RadioItem/package.json +3 -0
- package/RadioItem/tests/RadioItem-specs.js +62 -0
- package/RangePicker/RangePicker.d.ts +174 -0
- package/RangePicker/RangePicker.js +372 -0
- package/RangePicker/RangePicker.module.css +55 -0
- package/RangePicker/package.json +3 -0
- package/RangePicker/tests/RangePicker-specs.js +122 -0
- package/Region/Region.d.ts +33 -0
- package/Region/Region.js +91 -0
- package/Region/package.json +3 -0
- package/Region/tests/Region-specs.js +28 -0
- package/Scroller/ContentContainerDecorator.js +24 -0
- package/Scroller/EditableWrapper.js +1036 -0
- package/Scroller/EditableWrapper.module.css +22 -0
- package/Scroller/Scroller.d.ts +270 -0
- package/Scroller/Scroller.js +470 -0
- package/Scroller/Scroller.module.css +41 -0
- package/Scroller/package.json +3 -0
- package/Scroller/tests/ContentContainerDecorator-specs.js +20 -0
- package/Scroller/tests/EditableWrapper-specs.js +133 -0
- package/Scroller/tests/Scroller-specs.js +159 -0
- package/Scroller/useEvent.js +39 -0
- package/Scroller/useThemeScroller.js +410 -0
- package/Skinnable/Skinnable.d.ts +27 -0
- package/Skinnable/Skinnable.js +65 -0
- package/Skinnable/package.json +3 -0
- package/Slider/Slider.d.ts +218 -0
- package/Slider/Slider.js +441 -0
- package/Slider/Slider.module.css +880 -0
- package/Slider/SliderBehaviorDecorator.js +184 -0
- package/Slider/package.json +3 -0
- package/Slider/tests/Slider-specs.js +573 -0
- package/Slider/utils.js +114 -0
- package/Spinner/Spinner.d.ts +64 -0
- package/Spinner/Spinner.js +254 -0
- package/Spinner/Spinner.module.css +368 -0
- package/Spinner/package.json +3 -0
- package/Spinner/tests/Spinner-specs.js +70 -0
- package/Sprite/Sprite.d.ts +100 -0
- package/Sprite/Sprite.js +345 -0
- package/Sprite/Sprite.module.css +32 -0
- package/Sprite/package.json +3 -0
- package/Sprite/tests/Sprite-specs.js +59 -0
- package/Steps/Steps.d.ts +119 -0
- package/Steps/Steps.js +303 -0
- package/Steps/Steps.module.css +130 -0
- package/Steps/package.json +3 -0
- package/Steps/tests/Steps-specs.js +175 -0
- package/Switch/Switch.d.ts +54 -0
- package/Switch/Switch.js +143 -0
- package/Switch/Switch.module.css +714 -0
- package/Switch/package.json +3 -0
- package/Switch/tests/Switch-specs.js +54 -0
- package/SwitchItem/SwitchItem.d.ts +56 -0
- package/SwitchItem/SwitchItem.js +144 -0
- package/SwitchItem/SwitchItem.module.css +31 -0
- package/SwitchItem/package.json +3 -0
- package/SwitchItem/tests/SwitchItem-specs.js +49 -0
- package/TabLayout/RefocusDecorator.js +142 -0
- package/TabLayout/Tab.js +84 -0
- package/TabLayout/TabGroup.js +377 -0
- package/TabLayout/TabGroup.module.css +280 -0
- package/TabLayout/TabLayout.d.ts +161 -0
- package/TabLayout/TabLayout.js +661 -0
- package/TabLayout/TabLayout.module.css +101 -0
- package/TabLayout/package.json +3 -0
- package/TabLayout/tests/TabGroup-specs.js +214 -0
- package/TabLayout/tests/TabLayout-specs.js +740 -0
- package/ThemeDecorator/AccessibilityDecorator.js +151 -0
- package/ThemeDecorator/I18nFontDecorator.js +33 -0
- package/ThemeDecorator/ThemeDecorator.d.ts +143 -0
- package/ThemeDecorator/ThemeDecorator.js +307 -0
- package/ThemeDecorator/ThemeDecorator.module.css +1250 -0
- package/ThemeDecorator/fontGenerator.js +76 -0
- package/ThemeDecorator/package.json +3 -0
- package/ThemeDecorator/screenTypes.json +10 -0
- package/ThemeDecorator/tests/ThemeDecorator-specs.js +151 -0
- package/TimePicker/TimePicker.d.ts +147 -0
- package/TimePicker/TimePicker.js +255 -0
- package/TimePicker/TimePicker.module.css +61 -0
- package/TimePicker/TimePickerBase.js +396 -0
- package/TimePicker/package.json +3 -0
- package/TimePicker/tests/TimePicker-specs.js +248 -0
- package/TooltipDecorator/Tooltip.js +252 -0
- package/TooltipDecorator/Tooltip.module.css +496 -0
- package/TooltipDecorator/TooltipDecorator.d.ts +229 -0
- package/TooltipDecorator/TooltipDecorator.js +260 -0
- package/TooltipDecorator/TooltipLabel.js +117 -0
- package/TooltipDecorator/package.json +3 -0
- package/TooltipDecorator/tests/TooltipDecorator-specs.js +224 -0
- package/TooltipDecorator/tests/useTooltip-specs.js +266 -0
- package/TooltipDecorator/useTooltip.js +278 -0
- package/TooltipDecorator/util.js +273 -0
- package/VideoPlayer/Feedback.js +110 -0
- package/VideoPlayer/Feedback.module.css +55 -0
- package/VideoPlayer/FeedbackContent.js +99 -0
- package/VideoPlayer/FeedbackIcon.js +67 -0
- package/VideoPlayer/FeedbackIcons.js +76 -0
- package/VideoPlayer/FeedbackTooltip.js +242 -0
- package/VideoPlayer/FeedbackTooltip.module.css +160 -0
- package/VideoPlayer/MediaTitle.js +143 -0
- package/VideoPlayer/MediaTitle.module.css +95 -0
- package/VideoPlayer/Overlay.js +51 -0
- package/VideoPlayer/Video.js +345 -0
- package/VideoPlayer/VideoPlayer.d.ts +582 -0
- package/VideoPlayer/VideoPlayer.js +2116 -0
- package/VideoPlayer/VideoPlayer.module.css +164 -0
- package/VideoPlayer/package.json +3 -0
- package/VideoPlayer/tests/Video-specs.js +235 -0
- package/VideoPlayer/tests/VideoPlayer-specs.js +180 -0
- package/VirtualList/VirtualList.d.ts +411 -0
- package/VirtualList/VirtualList.js +931 -0
- package/VirtualList/VirtualList.module.css +52 -0
- package/VirtualList/package.json +3 -0
- package/VirtualList/tests/VirtualGridList-specs.js +289 -0
- package/VirtualList/tests/VirtualGridList-translate-specs.js +711 -0
- package/VirtualList/tests/VirtualList-specs.js +288 -0
- package/VirtualList/tests/VirtualList-translate-specs.js +704 -0
- package/VirtualList/tests/useEvent-specs.js +172 -0
- package/VirtualList/tests/useEvent-translate-specs.js +309 -0
- package/VirtualList/useEvent.js +324 -0
- package/VirtualList/usePreventScroll.js +31 -0
- package/VirtualList/useSpotlight.js +157 -0
- package/VirtualList/useThemeVirtualList.js +471 -0
- package/VirtualList/useThemeVirtualList.module.css +34 -0
- package/WizardPanels/Panel.js +99 -0
- package/WizardPanels/WizardPanels.js +501 -0
- package/WizardPanels/WizardPanels.module.css +15 -0
- package/WizardPanels/index.d.ts +182 -0
- package/WizardPanels/index.js +50 -0
- package/WizardPanels/package.json +3 -0
- package/WizardPanels/tests/WizardPanels-specs.js +713 -0
- package/codecov.yml +13 -0
- package/fonts/Limestone_Icons.ttf +0 -0
- package/fonts/Miso/LICENSE.txt +75 -0
- package/fonts/Miso/Miso-Bold.ttf +0 -0
- package/fonts/Miso/Miso-Light.ttf +0 -0
- package/fonts/Miso/Miso-Regular.ttf +0 -0
- package/fonts/MuseoSans/LICENSE.txt +75 -0
- package/fonts/MuseoSans/MuseoSans-Black.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-BlackItalic.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Bold.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-BoldItalic.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Light.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Medium.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-MediumItalic.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Thin.ttf +0 -0
- package/index.js +2 -0
- package/internal/$L/$L.d.ts +21 -0
- package/internal/$L/$L.js +97 -0
- package/internal/$L/package.json +3 -0
- package/internal/AsyncRenderChildren/AsyncRenderChildren.js +74 -0
- package/internal/AsyncRenderChildren/package.json +3 -0
- package/internal/AsyncRenderChildren/tests/AsyncRenderChildren-specs.js +49 -0
- package/internal/DateComponentPicker/DateComponentPicker.js +165 -0
- package/internal/DateComponentPicker/DateComponentPicker.module.css +53 -0
- package/internal/DateComponentPicker/DateComponentRangePicker.js +132 -0
- package/internal/DateComponentPicker/index.js +31 -0
- package/internal/DateComponentPicker/package.json +3 -0
- package/internal/DateTime/DateTime.js +83 -0
- package/internal/DateTime/DateTime.module.css +51 -0
- package/internal/DateTime/DateTimeDecorator.js +268 -0
- package/internal/DateTime/index.js +37 -0
- package/internal/DateTime/package.json +3 -0
- package/internal/DateTime/tests/DateTimeDecorator-specs.js +33 -0
- package/internal/DebounceDecorator/DebounceDecorator.js +125 -0
- package/internal/DebounceDecorator/package.json +3 -0
- package/internal/DebounceDecorator/tests/DebounceDecorator-specs.js +151 -0
- package/internal/Panels/Arrangers.js +248 -0
- package/internal/Panels/CancelDecorator.js +43 -0
- package/internal/Panels/FloatingLayerIdProvider.js +27 -0
- package/internal/Panels/NavigationButton.js +64 -0
- package/internal/Panels/NavigationButton.module.css +69 -0
- package/internal/Panels/PanelsRouter.js +223 -0
- package/internal/Panels/PopupDecorator.js +287 -0
- package/internal/Panels/TransitionDecorator.js +99 -0
- package/internal/Panels/Viewport.js +313 -0
- package/internal/Panels/Viewport.module.css +25 -0
- package/internal/Panels/captureKeys.js +48 -0
- package/internal/Panels/index.js +101 -0
- package/internal/Panels/package.json +3 -0
- package/internal/Panels/useAutoFocus.js +95 -0
- package/internal/Panels/useFocusOnTransition.js +45 -0
- package/internal/Panels/useToggleRole.js +30 -0
- package/internal/Panels/util.js +64 -0
- package/internal/Picker/Picker.js +942 -0
- package/internal/Picker/Picker.module.css +1145 -0
- package/internal/Picker/PickerButton.js +97 -0
- package/internal/Picker/PickerItem.js +38 -0
- package/internal/Picker/SpottablePicker.js +63 -0
- package/internal/Picker/package.json +3 -0
- package/internal/Picker/tests/Picker-specs.js +968 -0
- package/internal/SharedStateDecorator/SharedStateDecorator.js +167 -0
- package/internal/SharedStateDecorator/package.json +3 -0
- package/internal/SharedStateDecorator/tests/SharedStateDecorator-specs.js +277 -0
- package/internal/WindowEventable/WindowEventable.js +114 -0
- package/internal/WindowEventable/package.json +3 -0
- package/internal/util/package.json +3 -0
- package/internal/util/util.js +79 -0
- package/internal/validators/package.json +4 -0
- package/internal/validators/tests/validators-specs.js +80 -0
- package/internal/validators/validators.js +136 -0
- package/package.json +69 -0
- package/resources/ilibmanifest.json +3 -0
- package/styles/color-mixins.less +230 -0
- package/styles/colors-game-green.less +25 -0
- package/styles/colors-game-orange.less +25 -0
- package/styles/colors-game.less +56 -0
- package/styles/colors-highcontrast.less +21 -0
- package/styles/colors.less +435 -0
- package/styles/mixins.less +337 -0
- package/styles/skin.less +54 -0
- package/styles/variables-base.less +32 -0
- package/styles/variables-game.less +25 -0
- package/styles/variables.less +1182 -0
- package/useScroll/HoverToScroll.js +265 -0
- package/useScroll/HoverToScroll.module.css +38 -0
- package/useScroll/OverscrollEffect.module.css +14 -0
- package/useScroll/Scrollbar.js +171 -0
- package/useScroll/Scrollbar.module.css +19 -0
- package/useScroll/ScrollbarPlaceholder.js +64 -0
- package/useScroll/ScrollbarTrack.js +209 -0
- package/useScroll/ScrollbarTrack.module.css +136 -0
- package/useScroll/package.json +3 -0
- package/useScroll/useEvent.js +693 -0
- package/useScroll/useOverscrollEffect.js +105 -0
- package/useScroll/useScroll.js +523 -0
- package/useScroll/useScroll.module.css +49 -0
- package/useScroll/useSpotlight.js +32 -0
- package/useScroll/useThemeScrollContentHandle.js +32 -0
package/Panels/index.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "Header", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _Header["default"];
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "HeaderBase", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _Header.HeaderBase;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "Panel", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _Panel["default"];
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "Panels", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _Panels["default"];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "PanelsBase", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _Panels["default"];
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "Routable", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _Routable["default"];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "Route", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function get() {
|
|
45
|
+
return _Routable.Route;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
exports["default"] = void 0;
|
|
49
|
+
var _Routable = _interopRequireWildcard(require("@enact/ui/Routable"));
|
|
50
|
+
var _Header = _interopRequireWildcard(require("./Header"));
|
|
51
|
+
var _Panel = _interopRequireDefault(require("./Panel"));
|
|
52
|
+
var _Panels = _interopRequireDefault(require("./Panels"));
|
|
53
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
54
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
55
|
+
/**
|
|
56
|
+
* Panels provides a way to manage different screens of an app.
|
|
57
|
+
*
|
|
58
|
+
* @module limestone/Panels
|
|
59
|
+
* @exports Header
|
|
60
|
+
* @exports Panel
|
|
61
|
+
* @exports Panels
|
|
62
|
+
* @exports PanelsBase
|
|
63
|
+
* @exports Routable
|
|
64
|
+
* @exports Route
|
|
65
|
+
*/
|
|
66
|
+
var _default = exports["default"] = _Panels["default"];
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _Header = _interopRequireDefault(require("../Header"));
|
|
6
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
7
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
8
|
+
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); }
|
|
9
|
+
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); }); }; }
|
|
10
|
+
describe('Header Specs', function () {
|
|
11
|
+
test('should render with title text without changing case', function () {
|
|
12
|
+
var expected = 'cRaZy-cased super Header';
|
|
13
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
14
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
15
|
+
children: expected
|
|
16
|
+
})
|
|
17
|
+
}));
|
|
18
|
+
var header = _react.screen.getByText(expected);
|
|
19
|
+
expect(header).toBeInTheDocument();
|
|
20
|
+
});
|
|
21
|
+
test('should support "wizard" type', function () {
|
|
22
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
23
|
+
"data-testid": "header",
|
|
24
|
+
type: "wizard",
|
|
25
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
26
|
+
children: "Wizard Header"
|
|
27
|
+
})
|
|
28
|
+
}));
|
|
29
|
+
var expected = 'wizard';
|
|
30
|
+
var header = _react.screen.getByTestId('header');
|
|
31
|
+
expect(header).toHaveClass(expected);
|
|
32
|
+
});
|
|
33
|
+
test('should support "compact" type', function () {
|
|
34
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
35
|
+
"data-testid": "header",
|
|
36
|
+
type: "compact",
|
|
37
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
38
|
+
children: "Compact Header"
|
|
39
|
+
})
|
|
40
|
+
}));
|
|
41
|
+
var expected = 'compact';
|
|
42
|
+
var header = _react.screen.getByTestId('header');
|
|
43
|
+
expect(header).toHaveClass(expected);
|
|
44
|
+
});
|
|
45
|
+
test('should have centered class applied when the centered prop is true', function () {
|
|
46
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
47
|
+
"data-testid": "header",
|
|
48
|
+
centered: true,
|
|
49
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
50
|
+
children: "Centered Header"
|
|
51
|
+
})
|
|
52
|
+
}));
|
|
53
|
+
var expected = 'centered';
|
|
54
|
+
var header = _react.screen.getByTestId('header');
|
|
55
|
+
expect(header).toHaveClass(expected);
|
|
56
|
+
});
|
|
57
|
+
test('should support `slotAbove`', function () {
|
|
58
|
+
var expected = 'slot above';
|
|
59
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Header["default"], {
|
|
60
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("slotAbove", {
|
|
61
|
+
children: expected
|
|
62
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
63
|
+
children: "Slotted Header"
|
|
64
|
+
})]
|
|
65
|
+
}));
|
|
66
|
+
var slotAbove = _react.screen.getByText(expected);
|
|
67
|
+
var expectedClass = 'slotAbove';
|
|
68
|
+
expect(slotAbove).toHaveClass(expectedClass);
|
|
69
|
+
});
|
|
70
|
+
test('should support `slotBefore`', function () {
|
|
71
|
+
var expected = 'slot before';
|
|
72
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Header["default"], {
|
|
73
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("slotBefore", {
|
|
74
|
+
children: expected
|
|
75
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
76
|
+
children: "Slotted Header"
|
|
77
|
+
})]
|
|
78
|
+
}));
|
|
79
|
+
var slotBefore = _react.screen.getByText(expected).parentElement;
|
|
80
|
+
var expectedClass = 'slotBefore';
|
|
81
|
+
expect(slotBefore).toHaveClass(expectedClass);
|
|
82
|
+
});
|
|
83
|
+
test('should support `slotAfter`', function () {
|
|
84
|
+
var expected = 'slot after';
|
|
85
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Header["default"], {
|
|
86
|
+
noCloseButton: true,
|
|
87
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
88
|
+
children: "Slotted Header"
|
|
89
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("slotAfter", {
|
|
90
|
+
children: expected
|
|
91
|
+
})]
|
|
92
|
+
}));
|
|
93
|
+
var slotAfter = _react.screen.getByText(expected).parentElement;
|
|
94
|
+
var expectedClass = 'slotAfter';
|
|
95
|
+
expect(slotAfter).toHaveClass(expectedClass);
|
|
96
|
+
});
|
|
97
|
+
test('should not render back button', function () {
|
|
98
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {}));
|
|
99
|
+
var backButton = _react.screen.queryByLabelText('go to previous');
|
|
100
|
+
expect(backButton).toBeNull();
|
|
101
|
+
});
|
|
102
|
+
test('should render close button when \'noCloseButton\' is not specified', function () {
|
|
103
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {}));
|
|
104
|
+
var closeButton = _react.screen.getByLabelText('Exit app');
|
|
105
|
+
expect(closeButton).toBeInTheDocument();
|
|
106
|
+
});
|
|
107
|
+
test('should not render close button when \'noCloseButton\' is set to true', function () {
|
|
108
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
109
|
+
noCloseButton: true
|
|
110
|
+
}));
|
|
111
|
+
var closeButton = _react.screen.queryByLabelText('Exit app');
|
|
112
|
+
expect(closeButton).toBeNull();
|
|
113
|
+
});
|
|
114
|
+
test('should call onClose when close button is clicked', /*#__PURE__*/_asyncToGenerator(function* () {
|
|
115
|
+
var handleClose = jest.fn();
|
|
116
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
117
|
+
onClose: handleClose
|
|
118
|
+
}));
|
|
119
|
+
_react.fireEvent.click(_react.screen.getByRole('button'));
|
|
120
|
+
expect(handleClose).toHaveBeenCalled();
|
|
121
|
+
yield (0, _react.waitFor)(function () {
|
|
122
|
+
expect(handleClose).toHaveBeenCalledTimes(1);
|
|
123
|
+
});
|
|
124
|
+
}));
|
|
125
|
+
test('should set close button "aria-label" to closeButtonAriaLabel', function () {
|
|
126
|
+
var label = 'custom close button label';
|
|
127
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
128
|
+
closeButtonAriaLabel: label
|
|
129
|
+
}));
|
|
130
|
+
var closeButtonAriaLabel = _react.screen.getByLabelText(label);
|
|
131
|
+
var slotAfter = closeButtonAriaLabel.parentElement.parentElement;
|
|
132
|
+
expect(closeButtonAriaLabel).toBeInTheDocument();
|
|
133
|
+
expect(slotAfter).toHaveClass('slotAfter');
|
|
134
|
+
});
|
|
135
|
+
test('should set close button `shadowed` to true when `shadowed` is set to true', function () {
|
|
136
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {
|
|
137
|
+
shadowed: true,
|
|
138
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
|
|
139
|
+
children: "title"
|
|
140
|
+
})
|
|
141
|
+
}));
|
|
142
|
+
var button = _react.screen.getByRole('button');
|
|
143
|
+
var expected = 'button shadowed';
|
|
144
|
+
expect(button).toHaveClass(expected);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
6
|
+
var _Header = _interopRequireDefault(require("../Header"));
|
|
7
|
+
var _Panel = _interopRequireDefault(require("../Panel"));
|
|
8
|
+
var _Panels = _interopRequireDefault(require("../Panels"));
|
|
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
|
+
describe('Panels Specs', function () {
|
|
14
|
+
test('should set {autoFocus} on child to "default-element" on first render', function () {
|
|
15
|
+
var DivPanel = function DivPanel(_ref) {
|
|
16
|
+
var autoFocus = _ref.autoFocus,
|
|
17
|
+
id = _ref.id;
|
|
18
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
19
|
+
"data-testid": "panel",
|
|
20
|
+
id: id,
|
|
21
|
+
children: autoFocus
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panels["default"], {
|
|
25
|
+
index: 0,
|
|
26
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {})
|
|
27
|
+
}));
|
|
28
|
+
var expected = 'default-element';
|
|
29
|
+
var actual = _react.screen.getByTestId('panel').textContent;
|
|
30
|
+
expect(actual).toBe(expected);
|
|
31
|
+
});
|
|
32
|
+
test('should set {autoFocus} on child to "default-element" when navigating to a higher index', function () {
|
|
33
|
+
var DivPanel = function DivPanel(_ref2) {
|
|
34
|
+
var autoFocus = _ref2.autoFocus,
|
|
35
|
+
id = _ref2.id;
|
|
36
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
37
|
+
"data-testid": "panel",
|
|
38
|
+
id: id,
|
|
39
|
+
children: autoFocus
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
var _render = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
43
|
+
index: 0,
|
|
44
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {
|
|
45
|
+
id: "p2"
|
|
46
|
+
})]
|
|
47
|
+
})),
|
|
48
|
+
rerender = _render.rerender;
|
|
49
|
+
rerender(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
50
|
+
index: 1,
|
|
51
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {
|
|
52
|
+
id: "p2"
|
|
53
|
+
})]
|
|
54
|
+
}));
|
|
55
|
+
var expected = 'default-element';
|
|
56
|
+
var actual = _react.screen.getAllByTestId('panel')[0].textContent;
|
|
57
|
+
expect(actual).toBe(expected);
|
|
58
|
+
});
|
|
59
|
+
test('should not set {autoFocus} on child when navigating to a higher index when it has an autoFocus prop set', function () {
|
|
60
|
+
var DivPanel = function DivPanel(_ref3) {
|
|
61
|
+
var autoFocus = _ref3.autoFocus,
|
|
62
|
+
id = _ref3.id;
|
|
63
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
64
|
+
"data-testid": "panel",
|
|
65
|
+
id: id,
|
|
66
|
+
children: autoFocus
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
var _render2 = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
70
|
+
index: 0,
|
|
71
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {
|
|
72
|
+
id: "p2",
|
|
73
|
+
autoFocus: "last-focused"
|
|
74
|
+
})]
|
|
75
|
+
})),
|
|
76
|
+
rerender = _render2.rerender;
|
|
77
|
+
rerender(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
78
|
+
index: 1,
|
|
79
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(DivPanel, {
|
|
80
|
+
id: "p2",
|
|
81
|
+
autoFocus: "last-focused"
|
|
82
|
+
})]
|
|
83
|
+
}));
|
|
84
|
+
var expected = 'last-focused';
|
|
85
|
+
var panel = _react.screen.getAllByTestId('panel')[0];
|
|
86
|
+
expect(panel.textContent).toBe(expected);
|
|
87
|
+
expect(panel.id).toBe('p2');
|
|
88
|
+
});
|
|
89
|
+
test('should return a ref to the root Panel node', function () {
|
|
90
|
+
var ref = jest.fn();
|
|
91
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
92
|
+
ref: ref
|
|
93
|
+
}));
|
|
94
|
+
var expected = 'ARTICLE';
|
|
95
|
+
var actual = ref.mock.calls[0][0].nodeName;
|
|
96
|
+
expect(actual).toBe(expected);
|
|
97
|
+
});
|
|
98
|
+
describe('with Panel and Header', function () {
|
|
99
|
+
test('should not render back button on the first panel', function () {
|
|
100
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panels["default"], {
|
|
101
|
+
index: 0,
|
|
102
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
103
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
104
|
+
})
|
|
105
|
+
}));
|
|
106
|
+
var backButton = _react.screen.queryByLabelText('go to previous');
|
|
107
|
+
expect(backButton).toBeNull();
|
|
108
|
+
});
|
|
109
|
+
test('should render back button when not on the first panel', function () {
|
|
110
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
111
|
+
index: 1,
|
|
112
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
113
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
114
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
115
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
116
|
+
})]
|
|
117
|
+
}));
|
|
118
|
+
var backButton = _react.screen.getByLabelText('go to previous');
|
|
119
|
+
expect(backButton).toBeInTheDocument();
|
|
120
|
+
});
|
|
121
|
+
test('should fire `onBack` with `onBack` type when back clicked', /*#__PURE__*/_asyncToGenerator(function* () {
|
|
122
|
+
var handleBack = jest.fn();
|
|
123
|
+
var user = _userEvent["default"].setup();
|
|
124
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
125
|
+
index: 1,
|
|
126
|
+
onBack: handleBack,
|
|
127
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
128
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
129
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
130
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
131
|
+
})]
|
|
132
|
+
}));
|
|
133
|
+
yield user.click(_react.screen.getByLabelText('go to previous'));
|
|
134
|
+
var expected = {
|
|
135
|
+
type: 'onBack'
|
|
136
|
+
};
|
|
137
|
+
yield (0, _react.waitFor)(function () {
|
|
138
|
+
var actual = handleBack.mock.calls.length && handleBack.mock.calls[0][0];
|
|
139
|
+
expect(actual).toMatchObject(expected);
|
|
140
|
+
});
|
|
141
|
+
}));
|
|
142
|
+
test('should not render back button when not on the first panel and \'noBackButton\' is set to true', function () {
|
|
143
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
144
|
+
index: 1,
|
|
145
|
+
noBackButton: true,
|
|
146
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
147
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
148
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
149
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
150
|
+
})]
|
|
151
|
+
}));
|
|
152
|
+
var backButton = _react.screen.queryByLabelText('go to previous');
|
|
153
|
+
expect(backButton).toBeNull();
|
|
154
|
+
});
|
|
155
|
+
test('should not render back button when \'noBackButton\' is set on `Panel` 2', function () {
|
|
156
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
157
|
+
index: 1,
|
|
158
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
159
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
160
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
161
|
+
noBackButton: true,
|
|
162
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
163
|
+
})]
|
|
164
|
+
}));
|
|
165
|
+
var backButton = _react.screen.queryByLabelText('go to previous');
|
|
166
|
+
expect(backButton).toBeNull();
|
|
167
|
+
});
|
|
168
|
+
test('should render back button on panel 3 when \'noBackButton\' is set on panel 2', function () {
|
|
169
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
170
|
+
index: 2,
|
|
171
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
172
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
173
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
174
|
+
noBackButton: true,
|
|
175
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
176
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
177
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
178
|
+
})]
|
|
179
|
+
}));
|
|
180
|
+
var backButton = _react.screen.getByLabelText('go to previous');
|
|
181
|
+
expect(backButton).toBeInTheDocument();
|
|
182
|
+
});
|
|
183
|
+
test('should set back button "aria-label" to backButtonAriaLabel', function () {
|
|
184
|
+
var label = 'custom back button label';
|
|
185
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
186
|
+
backButtonAriaLabel: label,
|
|
187
|
+
index: 1,
|
|
188
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
189
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
190
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
191
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
192
|
+
})]
|
|
193
|
+
}));
|
|
194
|
+
var backButton = _react.screen.getByLabelText(label);
|
|
195
|
+
var backButtonContainer = backButton.parentElement.parentElement;
|
|
196
|
+
var expectedClass = 'slotBefore';
|
|
197
|
+
expect(backButton).toBeInTheDocument();
|
|
198
|
+
expect(backButtonContainer).toHaveClass(expectedClass);
|
|
199
|
+
});
|
|
200
|
+
test('should set back button "aria-label" to backButtonAriaLabel when defined only on a panel', function () {
|
|
201
|
+
var label = 'custom back button label';
|
|
202
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Panels["default"], {
|
|
203
|
+
index: 1,
|
|
204
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
205
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
206
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
207
|
+
backButtonAriaLabel: label,
|
|
208
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
209
|
+
})]
|
|
210
|
+
}));
|
|
211
|
+
var backButton = _react.screen.getByLabelText(label);
|
|
212
|
+
var backButtonContainer = backButton.parentElement.parentElement;
|
|
213
|
+
var expectedClass = 'slotBefore';
|
|
214
|
+
expect(backButton).toBeInTheDocument();
|
|
215
|
+
expect(backButtonContainer).toHaveClass(expectedClass);
|
|
216
|
+
});
|
|
217
|
+
test('should render close button', function () {
|
|
218
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panels["default"], {
|
|
219
|
+
index: 0,
|
|
220
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
221
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
222
|
+
})
|
|
223
|
+
}));
|
|
224
|
+
var closeButton = _react.screen.getByLabelText('Exit app');
|
|
225
|
+
var closeButtonContainer = closeButton.parentElement.parentElement;
|
|
226
|
+
var expectedClass = 'slotAfter';
|
|
227
|
+
expect(closeButton).toBeInTheDocument();
|
|
228
|
+
expect(closeButtonContainer).toHaveClass(expectedClass);
|
|
229
|
+
});
|
|
230
|
+
test('should not render close button when \'noCloseButton\' is set to true', function () {
|
|
231
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panels["default"], {
|
|
232
|
+
index: 0,
|
|
233
|
+
noCloseButton: true,
|
|
234
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
235
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
236
|
+
})
|
|
237
|
+
}));
|
|
238
|
+
var closeButton = _react.screen.queryByLabelText('Exit app');
|
|
239
|
+
expect(closeButton).toBeNull();
|
|
240
|
+
});
|
|
241
|
+
test('should set close button "aria-label" to closeButtonAriaLabel', function () {
|
|
242
|
+
var label = 'custom close button label';
|
|
243
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Panels["default"], {
|
|
244
|
+
closeButtonAriaLabel: label,
|
|
245
|
+
index: 0,
|
|
246
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Panel["default"], {
|
|
247
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Header["default"], {})
|
|
248
|
+
})
|
|
249
|
+
}));
|
|
250
|
+
var closeButton = _react.screen.getByLabelText(label);
|
|
251
|
+
var closeButtonContainer = closeButton.parentElement.parentElement;
|
|
252
|
+
var expectedClass = 'slotAfter';
|
|
253
|
+
expect(closeButton).toBeInTheDocument();
|
|
254
|
+
expect(closeButtonContainer).toHaveClass(expectedClass);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
});
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// Type definitions for limestone/Picker
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { ChangeableProps as ui_Changeable_ChangeableProps } from "@enact/ui/Changeable";
|
|
5
|
+
import { MarqueeControllerProps as limestone_Marquee_MarqueeControllerProps } from "limestone/Marquee";
|
|
6
|
+
|
|
7
|
+
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
|
|
8
|
+
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
|
|
9
|
+
|
|
10
|
+
export interface PickerBaseProps {
|
|
11
|
+
/**
|
|
12
|
+
* Picker value list.
|
|
13
|
+
*/
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
/**
|
|
16
|
+
* The `aria-valuetext` for the picker.
|
|
17
|
+
*
|
|
18
|
+
* By default, `aria-valuetext` is set to the current selected child text.
|
|
19
|
+
*/
|
|
20
|
+
"aria-valuetext"?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Determines which key to adjust the picker's value for the joined horizontal one.
|
|
23
|
+
* * `'enter'` allows the user to use the enter key to adjust the picker's value
|
|
24
|
+
* * `'arrow'` allows the user to use the left or right keys to adjust the picker's value.
|
|
25
|
+
*
|
|
26
|
+
* The default value for joined horizontal picker is `'enter'` .
|
|
27
|
+
If is `'vertical'` or
|
|
28
|
+
is undefined or is `false` , this prop is ignored.
|
|
29
|
+
*/
|
|
30
|
+
changedBy?: "enter" | "arrow";
|
|
31
|
+
/**
|
|
32
|
+
* Customizes the component by mapping the supplied collection of CSS class names to the
|
|
33
|
+
corresponding internal elements and states of this component.
|
|
34
|
+
*
|
|
35
|
+
* The following classes are supported:
|
|
36
|
+
* * `title` - The title component class
|
|
37
|
+
* * `inlineTitle` - The title component class when `inlineTitle` is true
|
|
38
|
+
*/
|
|
39
|
+
css?: object;
|
|
40
|
+
/**
|
|
41
|
+
* The voice control labels for the `children` .
|
|
42
|
+
*
|
|
43
|
+
* By default, `data-webos-voice-labels-ext` is generated from `children` . However, if
|
|
44
|
+
`children` is not an array of numbers or strings, `data-webos-voice-labels-ext` should be
|
|
45
|
+
set to an array of labels.
|
|
46
|
+
*/
|
|
47
|
+
"data-webos-voice-labels-ext"?: number[] | string[];
|
|
48
|
+
/**
|
|
49
|
+
* A custom icon for the decrementer.
|
|
50
|
+
*
|
|
51
|
+
* All strings supported by are supported. Without a
|
|
52
|
+
custom icon, the default is used, and is automatically changed when the
|
|
53
|
+
is changed.
|
|
54
|
+
*/
|
|
55
|
+
decrementIcon?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Disables the picker.
|
|
58
|
+
*/
|
|
59
|
+
disabled?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* A custom icon for the incrementer.
|
|
62
|
+
*
|
|
63
|
+
* All strings supported by are supported. Without a
|
|
64
|
+
custom icon, the default is used, and is automatically changed when the
|
|
65
|
+
is changed.
|
|
66
|
+
*/
|
|
67
|
+
incrementIcon?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Applies inline styling to the title.
|
|
70
|
+
*/
|
|
71
|
+
inlineTitle?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Allows the user to use the arrow keys or enter key to adjust the picker's value.
|
|
74
|
+
*
|
|
75
|
+
* Key presses are captured in the directions of the increment and decrement buttons but
|
|
76
|
+
others are unaffected. A non-joined Picker allows navigation in any direction, but
|
|
77
|
+
requires individual ENTER presses on the incrementer and decrementer buttons. Pointer
|
|
78
|
+
interaction is the same for both formats.
|
|
79
|
+
*/
|
|
80
|
+
joined?: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Disables marqueeing of items.
|
|
83
|
+
*
|
|
84
|
+
* By default, each picker item is wrapped by a
|
|
85
|
+
. When this is set, the items will
|
|
86
|
+
not be wrapped.
|
|
87
|
+
*/
|
|
88
|
+
marqueeDisabled?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Disables transition animation.
|
|
91
|
+
*/
|
|
92
|
+
noAnimation?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Called when the `value` changes.
|
|
95
|
+
*/
|
|
96
|
+
onChange?: Function;
|
|
97
|
+
/**
|
|
98
|
+
* Orientation of the picker.
|
|
99
|
+
*
|
|
100
|
+
* Controls whether the buttons are arranged horizontally or vertically around the value.
|
|
101
|
+
*/
|
|
102
|
+
orientation?: "horizontal" | "vertical";
|
|
103
|
+
/**
|
|
104
|
+
* When `true` , the picker buttons operate in the reverse direction such that pressing
|
|
105
|
+
up/left decrements the value and down/right increments the value. This is more natural
|
|
106
|
+
for vertical lists of text options where "up" implies a spatial change rather than
|
|
107
|
+
incrementing the value.
|
|
108
|
+
*
|
|
109
|
+
* If this prop is omitted, it will be determined by `orientation` .
|
|
110
|
+
For example, if `orientation` is `vertical` , `reverse` is `true` .
|
|
111
|
+
Conversely, if `orientation` is `horizontal` , `reverse` is `false` .
|
|
112
|
+
*/
|
|
113
|
+
reverse?: boolean;
|
|
114
|
+
/**
|
|
115
|
+
* The primary text of the `Picker` .
|
|
116
|
+
*
|
|
117
|
+
* The screen readers read out the title text when the `joined` prop is false
|
|
118
|
+
*/
|
|
119
|
+
title?: string;
|
|
120
|
+
/**
|
|
121
|
+
* The type of picker. It determines the aria-label for the next and previous buttons.
|
|
122
|
+
*
|
|
123
|
+
* Depending on the `type` , `joined` , `decrementAriaLabel` , and `incrementAriaLabel` ,
|
|
124
|
+
the screen readers read out differently when Spotlight is on the next button, the previous button,
|
|
125
|
+
or the picker itself.
|
|
126
|
+
*
|
|
127
|
+
* For example, if Spotlight is on the next button, the `joined` prop is false,
|
|
128
|
+
and aria label props( `decrementAriaLabel` and `incrementAriaLabel` ) are not defined,
|
|
129
|
+
then the screen readers read out as follows.
|
|
130
|
+
`'string'` type: `'next item'`
|
|
131
|
+
`'number'` type: `'press ok button to increase the value'`
|
|
132
|
+
*/
|
|
133
|
+
type?: "number" | "string";
|
|
134
|
+
/**
|
|
135
|
+
* Index of the selected child.
|
|
136
|
+
*/
|
|
137
|
+
value?: number;
|
|
138
|
+
/**
|
|
139
|
+
* The width of the picker.
|
|
140
|
+
*
|
|
141
|
+
* A number can be used to set the minimum number of characters to be shown. Setting a
|
|
142
|
+
number to less than the number of characters in the longest value will cause the width to
|
|
143
|
+
grow for the longer values.
|
|
144
|
+
*
|
|
145
|
+
* A string can be used to select from pre-defined widths:
|
|
146
|
+
* * `'small'` - numeric values
|
|
147
|
+
* * `'medium'` - single or short words
|
|
148
|
+
* * `'large'` - maximum-sized pickers taking full width of its parent
|
|
149
|
+
*
|
|
150
|
+
* By default, the picker will size according to the longest valid value.
|
|
151
|
+
*/
|
|
152
|
+
width?: "small" | "medium" | "large" | number;
|
|
153
|
+
/**
|
|
154
|
+
* Allows picker to continue from the start of the list after it reaches the end and
|
|
155
|
+
vice versa.
|
|
156
|
+
*/
|
|
157
|
+
wrap?: boolean;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The base `Picker` component.
|
|
161
|
+
*
|
|
162
|
+
* This version is not .
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
export class PickerBase extends React.Component<
|
|
166
|
+
Merge<React.HTMLProps<HTMLElement>, PickerBaseProps>
|
|
167
|
+
> {}
|
|
168
|
+
|
|
169
|
+
export interface PickerProps
|
|
170
|
+
extends Merge<
|
|
171
|
+
Merge<PickerBaseProps, ui_Changeable_ChangeableProps>,
|
|
172
|
+
limestone_Marquee_MarqueeControllerProps
|
|
173
|
+
> {
|
|
174
|
+
/**
|
|
175
|
+
* Default index of the selected child.
|
|
176
|
+
*
|
|
177
|
+
* _Note_ : Changing `defaultValue` after initial render has no effect.
|
|
178
|
+
*/
|
|
179
|
+
defaultValue?: number;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* A Picker component that allows selecting values from a list of values.
|
|
183
|
+
*
|
|
184
|
+
* By default, `Picker` maintains the state of its `value` property. Supply the `defaultValue`
|
|
185
|
+
property to control its initial value. If you wish to directly control updates to the component,
|
|
186
|
+
supply a value to `value` at creation time and update it in response to `onChange` events.
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
export class Picker extends React.Component<
|
|
190
|
+
Merge<React.HTMLProps<HTMLElement>, PickerProps>
|
|
191
|
+
> {}
|
|
192
|
+
|
|
193
|
+
export default Picker;
|