@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
|
@@ -0,0 +1,54 @@
|
|
|
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 _Switch = _interopRequireWildcard(require("../Switch"));
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
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); }
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
10
|
+
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); }
|
|
11
|
+
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); }); }; }
|
|
12
|
+
describe('Switch Specs', function () {
|
|
13
|
+
test('should not have `selected` className', function () {
|
|
14
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Switch.SwitchBase, {}));
|
|
15
|
+
var unexpected = 'selected';
|
|
16
|
+
var actual = _react.screen.getByRole('button');
|
|
17
|
+
expect(actual).not.toHaveClass(unexpected);
|
|
18
|
+
});
|
|
19
|
+
test('should have `selected` className', function () {
|
|
20
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Switch.SwitchBase, {
|
|
21
|
+
selected: true
|
|
22
|
+
}));
|
|
23
|
+
var expected = 'selected';
|
|
24
|
+
var actual = _react.screen.getByRole('button');
|
|
25
|
+
expect(actual).toHaveClass(expected);
|
|
26
|
+
});
|
|
27
|
+
test('should have `animated` className', function () {
|
|
28
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Switch.SwitchBase, {}));
|
|
29
|
+
var expected = 'animated';
|
|
30
|
+
var actual = _react.screen.getByRole('button');
|
|
31
|
+
expect(actual).toHaveClass(expected);
|
|
32
|
+
});
|
|
33
|
+
test('should not have `animated` className when `noAnimation`', function () {
|
|
34
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Switch.SwitchBase, {
|
|
35
|
+
noAnimation: true
|
|
36
|
+
}));
|
|
37
|
+
var unexpected = 'animated';
|
|
38
|
+
var actual = _react.screen.getByRole('button');
|
|
39
|
+
expect(actual).not.toHaveClass(unexpected);
|
|
40
|
+
});
|
|
41
|
+
test('toggle Switch', /*#__PURE__*/_asyncToGenerator(function* () {
|
|
42
|
+
var handleToggle = jest.fn();
|
|
43
|
+
var user = _userEvent["default"].setup();
|
|
44
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Switch["default"], {
|
|
45
|
+
onToggle: handleToggle
|
|
46
|
+
}));
|
|
47
|
+
var actual = _react.screen.getByRole('button');
|
|
48
|
+
yield user.click(actual);
|
|
49
|
+
var expectedClass = 'selected';
|
|
50
|
+
expect(actual).toHaveClass(expectedClass);
|
|
51
|
+
var expectedTimes = 1;
|
|
52
|
+
expect(handleToggle).toHaveBeenCalledTimes(expectedTimes);
|
|
53
|
+
}));
|
|
54
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Type definitions for limestone/SwitchItem
|
|
2
|
+
|
|
3
|
+
import { ToggleableProps as ui_Toggleable_ToggleableProps } from "@enact/ui/Toggleable";
|
|
4
|
+
import { ItemProps as limestone_Item_ItemProps } from "limestone/Item";
|
|
5
|
+
import * as React from "react";
|
|
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 SwitchItemBaseProps
|
|
11
|
+
extends Omit<limestone_Item_ItemProps, "iconComponent"> {
|
|
12
|
+
/**
|
|
13
|
+
* Customizes the component by mapping the supplied collection of CSS class names to the
|
|
14
|
+
corresponding internal elements and states of this component.
|
|
15
|
+
*
|
|
16
|
+
* The following classes are supported:
|
|
17
|
+
* * `switchItem` - The root class name
|
|
18
|
+
*/
|
|
19
|
+
css?: object;
|
|
20
|
+
/**
|
|
21
|
+
* If true the switch will be selected.
|
|
22
|
+
*/
|
|
23
|
+
selected?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Nodes to be inserted after `children` and before the switch.
|
|
26
|
+
*/
|
|
27
|
+
slotAfter?: React.ReactNode;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Renders an item with a .
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
export class SwitchItemBase extends React.Component<
|
|
34
|
+
Merge<React.HTMLProps<HTMLElement>, SwitchItemBaseProps>
|
|
35
|
+
> {}
|
|
36
|
+
|
|
37
|
+
export interface SwitchItemDecoratorProps
|
|
38
|
+
extends ui_Toggleable_ToggleableProps {}
|
|
39
|
+
export function SwitchItemDecorator<P>(
|
|
40
|
+
Component: React.ComponentType<P> | string,
|
|
41
|
+
): React.ComponentType<P & SwitchItemDecoratorProps>;
|
|
42
|
+
|
|
43
|
+
export interface SwitchItemProps
|
|
44
|
+
extends Merge<SwitchItemBaseProps, SwitchItemDecoratorProps> {}
|
|
45
|
+
/**
|
|
46
|
+
* A Limestone-styled item with a switch component.
|
|
47
|
+
*
|
|
48
|
+
* `SwitchItem` will manage its `selected` state via unless set
|
|
49
|
+
directly.
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
export class SwitchItem extends React.Component<
|
|
53
|
+
Merge<React.HTMLProps<HTMLElement>, SwitchItemProps>
|
|
54
|
+
> {}
|
|
55
|
+
|
|
56
|
+
export default SwitchItem;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.SwitchItemDecorator = exports.SwitchItemBase = exports.SwitchItem = void 0;
|
|
7
|
+
var _kind = _interopRequireDefault(require("@enact/core/kind"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _compose = _interopRequireDefault(require("ramda/src/compose"));
|
|
10
|
+
var _Pure = _interopRequireDefault(require("@enact/ui/internal/Pure"));
|
|
11
|
+
var _Slottable = _interopRequireDefault(require("@enact/ui/Slottable"));
|
|
12
|
+
var _Toggleable = _interopRequireDefault(require("@enact/ui/Toggleable"));
|
|
13
|
+
var _Item = require("../Item");
|
|
14
|
+
var _Skinnable = _interopRequireDefault(require("../Skinnable"));
|
|
15
|
+
var _Switch = require("../Switch");
|
|
16
|
+
var _SwitchItemModule = _interopRequireDefault(require("./SwitchItem.module.css"));
|
|
17
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
|
+
var _excluded = ["children", "css", "selected", "slotAfter"];
|
|
19
|
+
/**
|
|
20
|
+
* Provides Limestone-themed item component and interactive toggleable switch.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* <SwitchItem>
|
|
24
|
+
* Item
|
|
25
|
+
* </SwitchItem>
|
|
26
|
+
*
|
|
27
|
+
* @module limestone/SwitchItem
|
|
28
|
+
* @exports SwitchItem
|
|
29
|
+
* @exports SwitchItemBase
|
|
30
|
+
*/
|
|
31
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
32
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
33
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
34
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
35
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
36
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
37
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
38
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
39
|
+
var Item = (0, _Item.ItemDecorator)(_Item.ItemBase);
|
|
40
|
+
var Switch = (0, _Skinnable["default"])(_Switch.SwitchBase);
|
|
41
|
+
Switch.displayName = 'Switch';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Renders an item with a {@link limestone/Switch|Switch}.
|
|
45
|
+
*
|
|
46
|
+
* @class SwitchItemBase
|
|
47
|
+
* @memberof limestone/SwitchItem
|
|
48
|
+
* @extends limestone/Item.Item
|
|
49
|
+
* @omit iconComponent
|
|
50
|
+
* @ui
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
var SwitchItemBase = exports.SwitchItemBase = (0, _kind["default"])({
|
|
54
|
+
name: 'SwitchItem',
|
|
55
|
+
propTypes: /** @lends limestone/SwitchItem.SwitchItemBase.prototype */{
|
|
56
|
+
/**
|
|
57
|
+
* Customizes the component by mapping the supplied collection of CSS class names to the
|
|
58
|
+
* corresponding internal elements and states of this component.
|
|
59
|
+
*
|
|
60
|
+
* The following classes are supported:
|
|
61
|
+
*
|
|
62
|
+
* * `switchItem` - The root class name
|
|
63
|
+
*
|
|
64
|
+
* @type {Object}
|
|
65
|
+
* @public
|
|
66
|
+
*/
|
|
67
|
+
css: _propTypes["default"].object,
|
|
68
|
+
/**
|
|
69
|
+
* If true the switch will be selected.
|
|
70
|
+
*
|
|
71
|
+
* @type {Boolean}
|
|
72
|
+
* @default false
|
|
73
|
+
* @public
|
|
74
|
+
*/
|
|
75
|
+
selected: _propTypes["default"].bool,
|
|
76
|
+
/**
|
|
77
|
+
* Nodes to be inserted after `children` and before the switch.
|
|
78
|
+
*
|
|
79
|
+
* @type {Node}
|
|
80
|
+
* @public
|
|
81
|
+
*/
|
|
82
|
+
slotAfter: _propTypes["default"].node
|
|
83
|
+
},
|
|
84
|
+
defaultProps: {
|
|
85
|
+
selected: false
|
|
86
|
+
},
|
|
87
|
+
styles: {
|
|
88
|
+
css: _SwitchItemModule["default"],
|
|
89
|
+
className: 'switchItem',
|
|
90
|
+
publicClassNames: ['switchItem']
|
|
91
|
+
},
|
|
92
|
+
render: function render(_ref) {
|
|
93
|
+
var children = _ref.children,
|
|
94
|
+
css = _ref.css,
|
|
95
|
+
selected = _ref.selected,
|
|
96
|
+
slotAfter = _ref.slotAfter,
|
|
97
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
98
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Item, _objectSpread(_objectSpread({
|
|
99
|
+
"data-webos-voice-intent": "SetToggleItem",
|
|
100
|
+
role: "button"
|
|
101
|
+
}, rest), {}, {
|
|
102
|
+
"aria-pressed": selected,
|
|
103
|
+
css: css,
|
|
104
|
+
selected: selected,
|
|
105
|
+
children: [children, /*#__PURE__*/(0, _jsxRuntime.jsxs)("slotAfter", {
|
|
106
|
+
children: [slotAfter, /*#__PURE__*/(0, _jsxRuntime.jsx)(Switch, {
|
|
107
|
+
selected: selected,
|
|
108
|
+
css: css
|
|
109
|
+
})]
|
|
110
|
+
})]
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Adds interactive functionality to `SwitchItem`.
|
|
117
|
+
*
|
|
118
|
+
* @class SwitchItemDecorator
|
|
119
|
+
* @memberof limestone/SwitchItem
|
|
120
|
+
* @mixes ui/Toggleable.Toggleable
|
|
121
|
+
* @hoc
|
|
122
|
+
* @public
|
|
123
|
+
*/
|
|
124
|
+
var SwitchItemDecorator = exports.SwitchItemDecorator = (0, _compose["default"])((0, _Toggleable["default"])({
|
|
125
|
+
toggleProp: 'onClick'
|
|
126
|
+
}), (0, _Slottable["default"])({
|
|
127
|
+
slots: ['label', 'slotAfter', 'slotBefore']
|
|
128
|
+
}));
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* A Limestone-styled item with a switch component.
|
|
132
|
+
*
|
|
133
|
+
* `SwitchItem` will manage its `selected` state via {@link ui/Toggleable|Toggleable} unless set
|
|
134
|
+
* directly.
|
|
135
|
+
*
|
|
136
|
+
* @class SwitchItem
|
|
137
|
+
* @memberof limestone/SwitchItem
|
|
138
|
+
* @extends limestone/SwitchItem.SwitchItemBase
|
|
139
|
+
* @mixes limestone/SwitchItem.SwitchItemDecorator
|
|
140
|
+
* @ui
|
|
141
|
+
* @public
|
|
142
|
+
*/
|
|
143
|
+
var SwitchItem = exports.SwitchItem = (0, _Pure["default"])(SwitchItemDecorator(SwitchItemBase));
|
|
144
|
+
var _default = exports["default"] = SwitchItem;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
:global(.neutral) .switchItem.selected .bg {
|
|
2
|
+
background-color: transparent;
|
|
3
|
+
}
|
|
4
|
+
:global(.enact-a11y-high-contrast) :global(.neutral):global(.highContrast) .switchItem.selected .bg {
|
|
5
|
+
background-color: transparent;
|
|
6
|
+
}
|
|
7
|
+
:global(.light) .switchItem.selected .bg {
|
|
8
|
+
background-color: transparent;
|
|
9
|
+
}
|
|
10
|
+
:global(.game) {
|
|
11
|
+
--semantic-color-surface-default: #2d224c;
|
|
12
|
+
--semantic-color-surface-default-focused: #6d2fa1;
|
|
13
|
+
--semantic-color-on-surface-main-focused: #e6e6e6;
|
|
14
|
+
}
|
|
15
|
+
:global(.game) .switchItem.selected .bg {
|
|
16
|
+
background-color: transparent;
|
|
17
|
+
}
|
|
18
|
+
:global(.green) :global(.game) {
|
|
19
|
+
--semantic-color-surface-default: #1F2C24;
|
|
20
|
+
--semantic-color-surface-default-focused: #3ea07d;
|
|
21
|
+
}
|
|
22
|
+
:global(.green) :global(.game) .switchItem.selected .bg {
|
|
23
|
+
background-color: transparent;
|
|
24
|
+
}
|
|
25
|
+
:global(.orange) :global(.game) {
|
|
26
|
+
--semantic-color-surface-default: #422923;
|
|
27
|
+
--semantic-color-surface-default-focused: #b85f23;
|
|
28
|
+
}
|
|
29
|
+
:global(.orange) :global(.game) .switchItem.selected .bg {
|
|
30
|
+
background-color: transparent;
|
|
31
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
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 _SwitchItem = _interopRequireWildcard(require("../SwitchItem"));
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
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); }
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
10
|
+
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); }
|
|
11
|
+
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); }); }; }
|
|
12
|
+
describe('SwitchItem Specs', function () {
|
|
13
|
+
test('should contain a Switch', function () {
|
|
14
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SwitchItem.SwitchItemBase, {}));
|
|
15
|
+
var expected = 'switch';
|
|
16
|
+
var actual = _react.screen.getAllByRole('button')[1];
|
|
17
|
+
expect(actual).toHaveClass(expected);
|
|
18
|
+
});
|
|
19
|
+
test('should pass `selected` to Switch element', function () {
|
|
20
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SwitchItem.SwitchItemBase, {
|
|
21
|
+
selected: true
|
|
22
|
+
}));
|
|
23
|
+
var expected = 'selected';
|
|
24
|
+
var SwitchItemElement = _react.screen.getAllByRole('button')[0];
|
|
25
|
+
var SwitchElement = _react.screen.getAllByRole('button')[1];
|
|
26
|
+
expect(SwitchItemElement).toHaveClass(expected);
|
|
27
|
+
expect(SwitchElement).toHaveClass(expected);
|
|
28
|
+
});
|
|
29
|
+
test('should toggle Switch', /*#__PURE__*/_asyncToGenerator(function* () {
|
|
30
|
+
var handleToggle = jest.fn();
|
|
31
|
+
var user = _userEvent["default"].setup();
|
|
32
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SwitchItem["default"], {
|
|
33
|
+
onToggle: handleToggle
|
|
34
|
+
}));
|
|
35
|
+
var actual = _react.screen.getAllByRole('button')[1];
|
|
36
|
+
yield user.click(actual);
|
|
37
|
+
var expectedClass = 'selected';
|
|
38
|
+
expect(actual).toHaveClass(expectedClass);
|
|
39
|
+
var expectedTimes = 1;
|
|
40
|
+
expect(handleToggle).toHaveBeenCalledTimes(expectedTimes);
|
|
41
|
+
}));
|
|
42
|
+
test('should render correct children', function () {
|
|
43
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_SwitchItem["default"], {
|
|
44
|
+
children: "Hello SwitchItem"
|
|
45
|
+
}));
|
|
46
|
+
var Child = _react.screen.getByText(/Hello SwitchItem/i);
|
|
47
|
+
expect(Child).toBeInTheDocument();
|
|
48
|
+
});
|
|
49
|
+
});
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getNavigableFilter = exports["default"] = exports.RefocusDecorator = void 0;
|
|
7
|
+
exports.getTabsSpotlightId = getTabsSpotlightId;
|
|
8
|
+
var _spotlight = _interopRequireDefault(require("@enact/spotlight"));
|
|
9
|
+
var _IdProvider = require("@enact/ui/internal/IdProvider");
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _TabGroupModule = _interopRequireDefault(require("./TabGroup.module.css"));
|
|
13
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
+
var _excluded = ["blockCollapseOnPortrait", "collapsed", "index", "onCollapse", "onTabAnimationEnd", "orientation", "spotlightId"];
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
16
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
19
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
20
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
21
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
22
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
23
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
24
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
25
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
26
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
27
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
28
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
29
|
+
function getTabsSpotlightId(spotlightId, collapsed) {
|
|
30
|
+
return "".concat(spotlightId, "-tabs-").concat(collapsed ? 'collapsed' : 'expanded');
|
|
31
|
+
}
|
|
32
|
+
function getContainerNode(containerId) {
|
|
33
|
+
return document.querySelector("[data-spotlight-id='".concat(containerId, "']"));
|
|
34
|
+
}
|
|
35
|
+
var getNavigableFilter = exports.getNavigableFilter = function getNavigableFilter(spotlightId, collapsed) {
|
|
36
|
+
return function (elem) {
|
|
37
|
+
return _spotlight["default"].getPointerMode() || !elem.classList.contains(_TabGroupModule["default"].tab) && elem.dataset.spotlightId !== getTabsSpotlightId(spotlightId, collapsed);
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
function useScreenOrientation() {
|
|
41
|
+
var getOrientation = function getOrientation() {
|
|
42
|
+
return window.innerWidth > window.innerHeight ? 'landscape' : 'portrait';
|
|
43
|
+
};
|
|
44
|
+
var _useState = (0, _react.useState)(getOrientation()),
|
|
45
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
46
|
+
orientation = _useState2[0],
|
|
47
|
+
setOrientation = _useState2[1];
|
|
48
|
+
(0, _react.useEffect)(function () {
|
|
49
|
+
var handleResize = function handleResize() {
|
|
50
|
+
setOrientation(getOrientation());
|
|
51
|
+
};
|
|
52
|
+
window.addEventListener('resize', handleResize);
|
|
53
|
+
|
|
54
|
+
// Cleanup
|
|
55
|
+
return function () {
|
|
56
|
+
return window.removeEventListener('resize', handleResize);
|
|
57
|
+
};
|
|
58
|
+
}, []);
|
|
59
|
+
return orientation;
|
|
60
|
+
}
|
|
61
|
+
var RefocusDecorator = exports.RefocusDecorator = function RefocusDecorator(Wrapped) {
|
|
62
|
+
// eslint-disable-next-line no-shadow
|
|
63
|
+
function RefocusDecorator(_ref) {
|
|
64
|
+
var blockCollapseOnPortrait = _ref.blockCollapseOnPortrait,
|
|
65
|
+
collapsed = _ref.collapsed,
|
|
66
|
+
index = _ref.index,
|
|
67
|
+
onCollapse = _ref.onCollapse,
|
|
68
|
+
onTabAnimationEnd = _ref.onTabAnimationEnd,
|
|
69
|
+
orientation = _ref.orientation,
|
|
70
|
+
spotlightId = _ref.spotlightId,
|
|
71
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
72
|
+
var _useId = (0, _IdProvider.useId)({
|
|
73
|
+
prefix: 'lime-tablayout-'
|
|
74
|
+
}),
|
|
75
|
+
generateId = _useId.generateId;
|
|
76
|
+
var screenOrientation = useScreenOrientation();
|
|
77
|
+
var screenOrientationRef = (0, _react.useRef)(null);
|
|
78
|
+
|
|
79
|
+
// generate an id for the component (and a derived id for the tabs) so we can refocus them
|
|
80
|
+
// generating a different ID by orientation so swapping orientations doesn't clear container
|
|
81
|
+
// config before the new one is mounted
|
|
82
|
+
spotlightId = spotlightId || generateId(orientation || 'vertical');
|
|
83
|
+
(0, _react.useLayoutEffect)(function () {
|
|
84
|
+
if (!_spotlight["default"].getPointerMode() && !_spotlight["default"].isPaused()) {
|
|
85
|
+
var current = _spotlight["default"].getCurrent(),
|
|
86
|
+
tabsSpotlightId = getTabsSpotlightId(spotlightId, collapsed),
|
|
87
|
+
containerNode = getContainerNode(tabsSpotlightId);
|
|
88
|
+
if (!current || containerNode && containerNode.querySelector(".".concat(_TabGroupModule["default"].selected)) !== current) {
|
|
89
|
+
_spotlight["default"].focus(spotlightId);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}, [index]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
93
|
+
|
|
94
|
+
(0, _react.useEffect)(function () {
|
|
95
|
+
_spotlight["default"].set(spotlightId, {
|
|
96
|
+
navigableFilter: collapsed && orientation !== 'horizontal' ? getNavigableFilter(spotlightId, collapsed) : null
|
|
97
|
+
});
|
|
98
|
+
}, [collapsed, orientation, spotlightId]);
|
|
99
|
+
(0, _react.useEffect)(function () {
|
|
100
|
+
if (!blockCollapseOnPortrait && screenOrientationRef.current !== screenOrientation) {
|
|
101
|
+
if (screenOrientation === 'portrait') {
|
|
102
|
+
var currentFocusedElement = document.querySelector(':focus'),
|
|
103
|
+
tabsSpotlightId = getTabsSpotlightId(spotlightId, false),
|
|
104
|
+
tabsContainer = getContainerNode(tabsSpotlightId);
|
|
105
|
+
if (tabsContainer && !tabsContainer.contains(currentFocusedElement)) {
|
|
106
|
+
onCollapse();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
screenOrientationRef.current = screenOrientation;
|
|
110
|
+
}
|
|
111
|
+
}, [blockCollapseOnPortrait, onCollapse, screenOrientation, spotlightId]);
|
|
112
|
+
var handleTabAnimationEnd = (0, _react.useCallback)(function (ev) {
|
|
113
|
+
if (onTabAnimationEnd) {
|
|
114
|
+
onTabAnimationEnd(ev);
|
|
115
|
+
}
|
|
116
|
+
if (!collapsed && !_spotlight["default"].getPointerMode() && !_spotlight["default"].isPaused()) {
|
|
117
|
+
var tabsSpotlightId = getTabsSpotlightId(spotlightId, collapsed);
|
|
118
|
+
var containerNode = getContainerNode(tabsSpotlightId);
|
|
119
|
+
if (containerNode && !containerNode.contains(_spotlight["default"].getCurrent())) {
|
|
120
|
+
_spotlight["default"].focus(tabsSpotlightId);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}, [collapsed, onTabAnimationEnd, spotlightId]);
|
|
124
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Wrapped, _objectSpread(_objectSpread({}, rest), {}, {
|
|
125
|
+
collapsed: collapsed,
|
|
126
|
+
index: index,
|
|
127
|
+
onCollapse: onCollapse,
|
|
128
|
+
onTabAnimationEnd: handleTabAnimationEnd,
|
|
129
|
+
orientation: orientation,
|
|
130
|
+
spotlightId: spotlightId
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
RefocusDecorator.propTypes = {
|
|
134
|
+
collapsed: _propTypes["default"].bool,
|
|
135
|
+
index: _propTypes["default"].number,
|
|
136
|
+
onTabAnimationEnd: _propTypes["default"].func,
|
|
137
|
+
orientation: _propTypes["default"].string,
|
|
138
|
+
spotlightId: _propTypes["default"].string
|
|
139
|
+
};
|
|
140
|
+
return RefocusDecorator;
|
|
141
|
+
};
|
|
142
|
+
var _default = exports["default"] = RefocusDecorator;
|
package/TabLayout/Tab.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _kind = _interopRequireDefault(require("@enact/core/kind"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
11
|
+
/**
|
|
12
|
+
* An item for the TabLayout.
|
|
13
|
+
*
|
|
14
|
+
* Configures the tab title and icon.
|
|
15
|
+
*
|
|
16
|
+
* @class Tab
|
|
17
|
+
* @memberof limestone/TabLayout
|
|
18
|
+
* @ui
|
|
19
|
+
* @public
|
|
20
|
+
*/var Tab = (0, _kind["default"])({
|
|
21
|
+
name: 'Tab',
|
|
22
|
+
propTypes: /** @lends limestone/TabLayout.Tab.prototype */{
|
|
23
|
+
/**
|
|
24
|
+
* Title of the tab.
|
|
25
|
+
*
|
|
26
|
+
* @type {String}
|
|
27
|
+
* @required
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
title: _propTypes["default"].string.isRequired,
|
|
31
|
+
/**
|
|
32
|
+
* The contents to show when the tab is selected.
|
|
33
|
+
*
|
|
34
|
+
* @type {Node}
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
children: _propTypes["default"].node,
|
|
38
|
+
/**
|
|
39
|
+
* The icon content of the tab.
|
|
40
|
+
*
|
|
41
|
+
* @see {@link ui/Icon.IconBase.children}
|
|
42
|
+
* @type {String|Object}
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
icon: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
|
|
46
|
+
/**
|
|
47
|
+
* Called when a tab is clicked.
|
|
48
|
+
*
|
|
49
|
+
* @type {Function}
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
onTabClick: _propTypes["default"].func,
|
|
53
|
+
/**
|
|
54
|
+
* Configuration props for a {@link limestone/Sprite.Sprite|Sprite} icon.
|
|
55
|
+
*
|
|
56
|
+
* All props on {@link limestone/Sprite.Sprite|Sprite} are supported here. By default,
|
|
57
|
+
* `stopped` will be set to `false` when the tab is focused and `true` otherwise. To
|
|
58
|
+
* override, pass `stopped` in this object.
|
|
59
|
+
*
|
|
60
|
+
* @see {@link limestone/Sprite.Sprite}
|
|
61
|
+
* @type {Object}
|
|
62
|
+
* @public
|
|
63
|
+
*/
|
|
64
|
+
sprite: _propTypes["default"].object,
|
|
65
|
+
/**
|
|
66
|
+
* Key for the tab.
|
|
67
|
+
*
|
|
68
|
+
* Note: `TabLayout` automatically generates a key based on the title and icon combination.
|
|
69
|
+
* If this combination is not unique for all items, `tabKey` must be specified to make each
|
|
70
|
+
* tab have a unique (and persistent) key.
|
|
71
|
+
*
|
|
72
|
+
* @type {String|Number}
|
|
73
|
+
* @required
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
tabKey: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
|
|
77
|
+
},
|
|
78
|
+
render: function render() {
|
|
79
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
80
|
+
children: "Tab is only to be used in TabLayout!"
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
var _default = exports["default"] = Tab;
|