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