@enact/limestone 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- package/.github/workflows/update-copyright-years.yml +25 -0
- package/.travis.yml +40 -0
- package/ActionGuide/ActionGuide.d.ts +73 -0
- package/ActionGuide/ActionGuide.js +164 -0
- package/ActionGuide/ActionGuide.module.css +73 -0
- package/ActionGuide/package.json +3 -0
- package/ActionGuide/tests/ActionGuide-specs.js +51 -0
- package/Alert/Alert.d.ts +155 -0
- package/Alert/Alert.js +313 -0
- package/Alert/Alert.module.css +190 -0
- package/Alert/AlertImage.js +102 -0
- package/Alert/AlertImage.module.css +15 -0
- package/Alert/package.json +3 -0
- package/Alert/tests/Alert-specs.js +204 -0
- package/BodyText/BodyText.d.ts +74 -0
- package/BodyText/BodyText.js +170 -0
- package/BodyText/BodyText.module.css +95 -0
- package/BodyText/package.json +3 -0
- package/BodyText/tests/BodyText-specs.js +55 -0
- package/Button/Button.d.ts +131 -0
- package/Button/Button.js +351 -0
- package/Button/Button.module.css +2518 -0
- package/Button/package.json +3 -0
- package/Button/tests/Button-specs.js +252 -0
- package/CHANGELOG.md +170 -0
- package/Card/Card.d.ts +138 -0
- package/Card/Card.js +396 -0
- package/Card/Card.module.css +1296 -0
- package/Card/package.json +3 -0
- package/Card/tests/Card-specs.js +65 -0
- package/Checkbox/Checkbox.d.ts +99 -0
- package/Checkbox/Checkbox.js +222 -0
- package/Checkbox/Checkbox.module.css +1395 -0
- package/Checkbox/package.json +3 -0
- package/Checkbox/tests/Checkbox-specs.js +79 -0
- package/CheckboxItem/CheckboxItem.d.ts +99 -0
- package/CheckboxItem/CheckboxItem.js +210 -0
- package/CheckboxItem/CheckboxItem.module.css +50 -0
- package/CheckboxItem/package.json +3 -0
- package/CheckboxItem/tests/CheckboxItem-specs.js +52 -0
- package/Chips/Chip.js +252 -0
- package/Chips/Chip.module.css +30 -0
- package/Chips/Chips.js +215 -0
- package/Chips/Chips.module.css +8 -0
- package/Chips/index.js +86 -0
- package/Chips/tests/Chip-specs.js +186 -0
- package/Chips/tests/Chips-specs.js +312 -0
- package/ColorPicker/ColorPicker.js +416 -0
- package/ColorPicker/ColorPicker.module.css +78 -0
- package/ColorPicker/package.json +3 -0
- package/ColorPicker/tests/ColorPicker-specs.js +225 -0
- package/ColorPicker/utils.js +135 -0
- package/ContextualMenuDecorator/ContextualMenuDecorator.d.ts +106 -0
- package/ContextualMenuDecorator/ContextualMenuDecorator.js +264 -0
- package/ContextualMenuDecorator/ContextualMenuDecorator.module.css +42 -0
- package/ContextualMenuDecorator/package.json +3 -0
- package/ContextualMenuDecorator/tests/ContextualMenuDecorator-specs.js +136 -0
- package/ContextualPopupDecorator/ContextualPopup.js +200 -0
- package/ContextualPopupDecorator/ContextualPopup.module.css +270 -0
- package/ContextualPopupDecorator/ContextualPopupDecorator.d.ts +182 -0
- package/ContextualPopupDecorator/ContextualPopupDecorator.js +867 -0
- package/ContextualPopupDecorator/ContextualPopupDecorator.module.css +3 -0
- package/ContextualPopupDecorator/HolePunchScrim.js +69 -0
- package/ContextualPopupDecorator/HolePunchScrim.module.css +38 -0
- package/ContextualPopupDecorator/package.json +3 -0
- package/ContextualPopupDecorator/tests/ContextualPopupDecorator-specs.js +621 -0
- package/DatePicker/DatePicker.d.ts +173 -0
- package/DatePicker/DatePicker.js +175 -0
- package/DatePicker/DatePicker.module.css +5 -0
- package/DatePicker/DatePickerBase.js +348 -0
- package/DatePicker/package.json +3 -0
- package/DatePicker/tests/DatePicker-specs.js +247 -0
- package/DayPicker/DayPicker.d.ts +92 -0
- package/DayPicker/DayPicker.js +188 -0
- package/DayPicker/DayPicker.module.css +35 -0
- package/DayPicker/DaySelectorDecorator.js +301 -0
- package/DayPicker/package.json +3 -0
- package/DayPicker/tests/DayPicker-specs.js +138 -0
- package/Dropdown/Dropdown.d.ts +135 -0
- package/Dropdown/Dropdown.js +460 -0
- package/Dropdown/Dropdown.module.css +160 -0
- package/Dropdown/DropdownList.js +360 -0
- package/Dropdown/package.json +3 -0
- package/Dropdown/tests/Dropdown-specs.js +267 -0
- package/FixedPopupPanels/FixedPopupPanels.d.ts +72 -0
- package/FixedPopupPanels/FixedPopupPanels.js +170 -0
- package/FixedPopupPanels/FixedPopupPanels.module.css +146 -0
- package/FixedPopupPanels/package.json +3 -0
- package/FixedPopupPanels/tests/FixedPopupPanels-specs.js +142 -0
- package/FlexiblePopupPanels/FlexiblePopupPanels.js +177 -0
- package/FlexiblePopupPanels/FlexiblePopupPanels.module.css +291 -0
- package/FlexiblePopupPanels/Header.js +110 -0
- package/FlexiblePopupPanels/Panel.js +256 -0
- package/FlexiblePopupPanels/index.d.ts +145 -0
- package/FlexiblePopupPanels/index.js +68 -0
- package/FlexiblePopupPanels/package.json +3 -0
- package/FlexiblePopupPanels/tests/FlexiblePopupPanels-specs.js +305 -0
- package/FlexiblePopupPanels/useNavButtonFocus.js +65 -0
- package/FormCheckboxItem/FormCheckboxItem.d.ts +87 -0
- package/FormCheckboxItem/FormCheckboxItem.js +200 -0
- package/FormCheckboxItem/FormCheckboxItem.module.css +374 -0
- package/FormCheckboxItem/package.json +3 -0
- package/FormCheckboxItem/tests/FormCheckboxItem-specs.js +164 -0
- package/Heading/Heading.d.ts +104 -0
- package/Heading/Heading.js +203 -0
- package/Heading/Heading.module.css +217 -0
- package/Heading/package.json +3 -0
- package/Heading/tests/Heading-specs.js +57 -0
- package/Icon/Icon.d.ts +377 -0
- package/Icon/Icon.js +503 -0
- package/Icon/Icon.module.css +121 -0
- package/Icon/IconList.js +611 -0
- package/Icon/package.json +3 -0
- package/Icon/tests/Icon-specs.js +131 -0
- package/IconItem/IconItem.d.ts +137 -0
- package/IconItem/IconItem.js +360 -0
- package/IconItem/IconItem.module.css +414 -0
- package/IconItem/package.json +3 -0
- package/IconItem/tests/IconItem-specs.js +106 -0
- package/Image/Image.d.ts +60 -0
- package/Image/Image.js +165 -0
- package/Image/Image.module.css +5 -0
- package/Image/package.json +3 -0
- package/Image/tests/Image-specs.js +62 -0
- package/ImageItem/ImageItem.d.ts +134 -0
- package/ImageItem/ImageItem.js +377 -0
- package/ImageItem/ImageItem.module.css +1079 -0
- package/ImageItem/package.json +3 -0
- package/ImageItem/tests/ImageItem-specs.js +223 -0
- package/Input/Input.js +715 -0
- package/Input/Input.module.css +699 -0
- package/Input/InputField.js +487 -0
- package/Input/InputField.module.css +763 -0
- package/Input/InputFieldDecoratorIcon.js +66 -0
- package/Input/InputFieldSpotlightDecorator.js +380 -0
- package/Input/Keypad.js +111 -0
- package/Input/NumberField.js +311 -0
- package/Input/index.d.ts +423 -0
- package/Input/index.js +87 -0
- package/Input/package.json +3 -0
- package/Input/pointer.js +103 -0
- package/Input/tests/Input-specs.js +537 -0
- package/Input/tests/InputField-specs.js +292 -0
- package/Input/tests/InputPopup-specs.js +56 -0
- package/Input/util.js +130 -0
- package/Item/Item.d.ts +108 -0
- package/Item/Item.js +360 -0
- package/Item/Item.module.css +665 -0
- package/Item/package.json +3 -0
- package/Item/tests/Item-specs.js +108 -0
- package/KeyGuide/KeyGuide.d.ts +103 -0
- package/KeyGuide/KeyGuide.js +254 -0
- package/KeyGuide/KeyGuide.module.css +431 -0
- package/KeyGuide/package.json +3 -0
- package/KeyGuide/tests/KeyGuide-specs.js +168 -0
- package/LICENSE +201 -0
- package/Marquee/Marquee.d.ts +42 -0
- package/Marquee/Marquee.js +45 -0
- package/Marquee/package.json +3 -0
- package/MediaOverlay/MediaOverlay.d.ts +134 -0
- package/MediaOverlay/MediaOverlay.js +304 -0
- package/MediaOverlay/MediaOverlay.module.css +292 -0
- package/MediaOverlay/package.json +3 -0
- package/MediaOverlay/tests/MediaOverlay-specs.js +127 -0
- package/MediaPlayer/MediaControls.js +934 -0
- package/MediaPlayer/MediaControls.module.css +86 -0
- package/MediaPlayer/MediaKnob.js +61 -0
- package/MediaPlayer/MediaSlider.js +131 -0
- package/MediaPlayer/MediaSlider.module.css +319 -0
- package/MediaPlayer/MediaSliderDecorator.js +245 -0
- package/MediaPlayer/Times.js +152 -0
- package/MediaPlayer/Times.module.css +34 -0
- package/MediaPlayer/index.d.ts +223 -0
- package/MediaPlayer/index.js +34 -0
- package/MediaPlayer/package.json +3 -0
- package/MediaPlayer/tests/MediaSlider-specs.js +126 -0
- package/MediaPlayer/tests/util-specs.js +114 -0
- package/MediaPlayer/util.js +83 -0
- package/PageViews/Page.js +77 -0
- package/PageViews/Page.module.css +3 -0
- package/PageViews/PageViews.js +440 -0
- package/PageViews/PageViews.module.css +175 -0
- package/PageViews/PageViewsRouter.js +150 -0
- package/PageViews/index.js +45 -0
- package/PageViews/tests/PageViews-specs.js +192 -0
- package/Panels/Header.js +599 -0
- package/Panels/Header.module.css +243 -0
- package/Panels/Panel.js +347 -0
- package/Panels/Panel.module.css +33 -0
- package/Panels/Panels.js +258 -0
- package/Panels/Panels.module.css +12 -0
- package/Panels/index.d.ts +376 -0
- package/Panels/index.js +66 -0
- package/Panels/package.json +3 -0
- package/Panels/tests/Header-specs.js +146 -0
- package/Panels/tests/Panels-specs.js +257 -0
- package/Picker/Picker.d.ts +193 -0
- package/Picker/Picker.js +389 -0
- package/Picker/Picker.module.css +46 -0
- package/Picker/package.json +3 -0
- package/Picker/tests/Picker-specs.js +91 -0
- package/Popup/Popup.d.ts +169 -0
- package/Popup/Popup.js +690 -0
- package/Popup/Popup.module.css +180 -0
- package/Popup/package.json +3 -0
- package/Popup/tests/Popup-specs.js +475 -0
- package/PopupTabLayout/PopupTabLayout.d.ts +196 -0
- package/PopupTabLayout/PopupTabLayout.js +605 -0
- package/PopupTabLayout/PopupTabLayout.module.css +226 -0
- package/PopupTabLayout/package.json +3 -0
- package/PopupTabLayout/tests/PopupTabLayout-specs.js +285 -0
- package/ProgressBar/ProgressBar.d.ts +171 -0
- package/ProgressBar/ProgressBar.js +223 -0
- package/ProgressBar/ProgressBar.module.css +264 -0
- package/ProgressBar/ProgressBarTooltip.js +359 -0
- package/ProgressBar/ProgressBarTooltip.module.css +86 -0
- package/ProgressBar/package.json +3 -0
- package/ProgressBar/tests/ProgressBar-specs.js +400 -0
- package/ProgressButton/ProgressButton.d.ts +57 -0
- package/ProgressButton/ProgressButton.js +143 -0
- package/ProgressButton/ProgressButton.module.css +147 -0
- package/ProgressButton/package.json +3 -0
- package/ProgressButton/tests/ProgressButton-specs.js +71 -0
- package/QuickGuidePanels/Panel.js +90 -0
- package/QuickGuidePanels/QuickGuidePanels.js +463 -0
- package/QuickGuidePanels/QuickGuidePanels.module.css +26 -0
- package/QuickGuidePanels/index.js +52 -0
- package/QuickGuidePanels/tests/QuickGuidePanels-specs.js +250 -0
- package/README.md +59 -0
- package/RadioItem/RadioItem.d.ts +59 -0
- package/RadioItem/RadioItem.js +146 -0
- package/RadioItem/RadioItem.module.css +233 -0
- package/RadioItem/package.json +3 -0
- package/RadioItem/tests/RadioItem-specs.js +62 -0
- package/RangePicker/RangePicker.d.ts +174 -0
- package/RangePicker/RangePicker.js +372 -0
- package/RangePicker/RangePicker.module.css +55 -0
- package/RangePicker/package.json +3 -0
- package/RangePicker/tests/RangePicker-specs.js +122 -0
- package/Region/Region.d.ts +33 -0
- package/Region/Region.js +91 -0
- package/Region/package.json +3 -0
- package/Region/tests/Region-specs.js +28 -0
- package/Scroller/ContentContainerDecorator.js +24 -0
- package/Scroller/EditableWrapper.js +1036 -0
- package/Scroller/EditableWrapper.module.css +22 -0
- package/Scroller/Scroller.d.ts +270 -0
- package/Scroller/Scroller.js +470 -0
- package/Scroller/Scroller.module.css +41 -0
- package/Scroller/package.json +3 -0
- package/Scroller/tests/ContentContainerDecorator-specs.js +20 -0
- package/Scroller/tests/EditableWrapper-specs.js +133 -0
- package/Scroller/tests/Scroller-specs.js +159 -0
- package/Scroller/useEvent.js +39 -0
- package/Scroller/useThemeScroller.js +410 -0
- package/Skinnable/Skinnable.d.ts +27 -0
- package/Skinnable/Skinnable.js +65 -0
- package/Skinnable/package.json +3 -0
- package/Slider/Slider.d.ts +218 -0
- package/Slider/Slider.js +441 -0
- package/Slider/Slider.module.css +880 -0
- package/Slider/SliderBehaviorDecorator.js +184 -0
- package/Slider/package.json +3 -0
- package/Slider/tests/Slider-specs.js +573 -0
- package/Slider/utils.js +114 -0
- package/Spinner/Spinner.d.ts +64 -0
- package/Spinner/Spinner.js +254 -0
- package/Spinner/Spinner.module.css +368 -0
- package/Spinner/package.json +3 -0
- package/Spinner/tests/Spinner-specs.js +70 -0
- package/Sprite/Sprite.d.ts +100 -0
- package/Sprite/Sprite.js +345 -0
- package/Sprite/Sprite.module.css +32 -0
- package/Sprite/package.json +3 -0
- package/Sprite/tests/Sprite-specs.js +59 -0
- package/Steps/Steps.d.ts +119 -0
- package/Steps/Steps.js +303 -0
- package/Steps/Steps.module.css +130 -0
- package/Steps/package.json +3 -0
- package/Steps/tests/Steps-specs.js +175 -0
- package/Switch/Switch.d.ts +54 -0
- package/Switch/Switch.js +143 -0
- package/Switch/Switch.module.css +714 -0
- package/Switch/package.json +3 -0
- package/Switch/tests/Switch-specs.js +54 -0
- package/SwitchItem/SwitchItem.d.ts +56 -0
- package/SwitchItem/SwitchItem.js +144 -0
- package/SwitchItem/SwitchItem.module.css +31 -0
- package/SwitchItem/package.json +3 -0
- package/SwitchItem/tests/SwitchItem-specs.js +49 -0
- package/TabLayout/RefocusDecorator.js +142 -0
- package/TabLayout/Tab.js +84 -0
- package/TabLayout/TabGroup.js +377 -0
- package/TabLayout/TabGroup.module.css +280 -0
- package/TabLayout/TabLayout.d.ts +161 -0
- package/TabLayout/TabLayout.js +661 -0
- package/TabLayout/TabLayout.module.css +101 -0
- package/TabLayout/package.json +3 -0
- package/TabLayout/tests/TabGroup-specs.js +214 -0
- package/TabLayout/tests/TabLayout-specs.js +740 -0
- package/ThemeDecorator/AccessibilityDecorator.js +151 -0
- package/ThemeDecorator/I18nFontDecorator.js +33 -0
- package/ThemeDecorator/ThemeDecorator.d.ts +143 -0
- package/ThemeDecorator/ThemeDecorator.js +307 -0
- package/ThemeDecorator/ThemeDecorator.module.css +1250 -0
- package/ThemeDecorator/fontGenerator.js +76 -0
- package/ThemeDecorator/package.json +3 -0
- package/ThemeDecorator/screenTypes.json +10 -0
- package/ThemeDecorator/tests/ThemeDecorator-specs.js +151 -0
- package/TimePicker/TimePicker.d.ts +147 -0
- package/TimePicker/TimePicker.js +255 -0
- package/TimePicker/TimePicker.module.css +61 -0
- package/TimePicker/TimePickerBase.js +396 -0
- package/TimePicker/package.json +3 -0
- package/TimePicker/tests/TimePicker-specs.js +248 -0
- package/TooltipDecorator/Tooltip.js +252 -0
- package/TooltipDecorator/Tooltip.module.css +496 -0
- package/TooltipDecorator/TooltipDecorator.d.ts +229 -0
- package/TooltipDecorator/TooltipDecorator.js +260 -0
- package/TooltipDecorator/TooltipLabel.js +117 -0
- package/TooltipDecorator/package.json +3 -0
- package/TooltipDecorator/tests/TooltipDecorator-specs.js +224 -0
- package/TooltipDecorator/tests/useTooltip-specs.js +266 -0
- package/TooltipDecorator/useTooltip.js +278 -0
- package/TooltipDecorator/util.js +273 -0
- package/VideoPlayer/Feedback.js +110 -0
- package/VideoPlayer/Feedback.module.css +55 -0
- package/VideoPlayer/FeedbackContent.js +99 -0
- package/VideoPlayer/FeedbackIcon.js +67 -0
- package/VideoPlayer/FeedbackIcons.js +76 -0
- package/VideoPlayer/FeedbackTooltip.js +242 -0
- package/VideoPlayer/FeedbackTooltip.module.css +160 -0
- package/VideoPlayer/MediaTitle.js +143 -0
- package/VideoPlayer/MediaTitle.module.css +95 -0
- package/VideoPlayer/Overlay.js +51 -0
- package/VideoPlayer/Video.js +345 -0
- package/VideoPlayer/VideoPlayer.d.ts +582 -0
- package/VideoPlayer/VideoPlayer.js +2116 -0
- package/VideoPlayer/VideoPlayer.module.css +164 -0
- package/VideoPlayer/package.json +3 -0
- package/VideoPlayer/tests/Video-specs.js +235 -0
- package/VideoPlayer/tests/VideoPlayer-specs.js +180 -0
- package/VirtualList/VirtualList.d.ts +411 -0
- package/VirtualList/VirtualList.js +931 -0
- package/VirtualList/VirtualList.module.css +52 -0
- package/VirtualList/package.json +3 -0
- package/VirtualList/tests/VirtualGridList-specs.js +289 -0
- package/VirtualList/tests/VirtualGridList-translate-specs.js +711 -0
- package/VirtualList/tests/VirtualList-specs.js +288 -0
- package/VirtualList/tests/VirtualList-translate-specs.js +704 -0
- package/VirtualList/tests/useEvent-specs.js +172 -0
- package/VirtualList/tests/useEvent-translate-specs.js +309 -0
- package/VirtualList/useEvent.js +324 -0
- package/VirtualList/usePreventScroll.js +31 -0
- package/VirtualList/useSpotlight.js +157 -0
- package/VirtualList/useThemeVirtualList.js +471 -0
- package/VirtualList/useThemeVirtualList.module.css +34 -0
- package/WizardPanels/Panel.js +99 -0
- package/WizardPanels/WizardPanels.js +501 -0
- package/WizardPanels/WizardPanels.module.css +15 -0
- package/WizardPanels/index.d.ts +182 -0
- package/WizardPanels/index.js +50 -0
- package/WizardPanels/package.json +3 -0
- package/WizardPanels/tests/WizardPanels-specs.js +713 -0
- package/codecov.yml +13 -0
- package/fonts/Limestone_Icons.ttf +0 -0
- package/fonts/Miso/LICENSE.txt +75 -0
- package/fonts/Miso/Miso-Bold.ttf +0 -0
- package/fonts/Miso/Miso-Light.ttf +0 -0
- package/fonts/Miso/Miso-Regular.ttf +0 -0
- package/fonts/MuseoSans/LICENSE.txt +75 -0
- package/fonts/MuseoSans/MuseoSans-Black.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-BlackItalic.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Bold.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-BoldItalic.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Light.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Medium.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-MediumItalic.ttf +0 -0
- package/fonts/MuseoSans/MuseoSans-Thin.ttf +0 -0
- package/index.js +2 -0
- package/internal/$L/$L.d.ts +21 -0
- package/internal/$L/$L.js +97 -0
- package/internal/$L/package.json +3 -0
- package/internal/AsyncRenderChildren/AsyncRenderChildren.js +74 -0
- package/internal/AsyncRenderChildren/package.json +3 -0
- package/internal/AsyncRenderChildren/tests/AsyncRenderChildren-specs.js +49 -0
- package/internal/DateComponentPicker/DateComponentPicker.js +165 -0
- package/internal/DateComponentPicker/DateComponentPicker.module.css +53 -0
- package/internal/DateComponentPicker/DateComponentRangePicker.js +132 -0
- package/internal/DateComponentPicker/index.js +31 -0
- package/internal/DateComponentPicker/package.json +3 -0
- package/internal/DateTime/DateTime.js +83 -0
- package/internal/DateTime/DateTime.module.css +51 -0
- package/internal/DateTime/DateTimeDecorator.js +268 -0
- package/internal/DateTime/index.js +37 -0
- package/internal/DateTime/package.json +3 -0
- package/internal/DateTime/tests/DateTimeDecorator-specs.js +33 -0
- package/internal/DebounceDecorator/DebounceDecorator.js +125 -0
- package/internal/DebounceDecorator/package.json +3 -0
- package/internal/DebounceDecorator/tests/DebounceDecorator-specs.js +151 -0
- package/internal/Panels/Arrangers.js +248 -0
- package/internal/Panels/CancelDecorator.js +43 -0
- package/internal/Panels/FloatingLayerIdProvider.js +27 -0
- package/internal/Panels/NavigationButton.js +64 -0
- package/internal/Panels/NavigationButton.module.css +69 -0
- package/internal/Panels/PanelsRouter.js +223 -0
- package/internal/Panels/PopupDecorator.js +287 -0
- package/internal/Panels/TransitionDecorator.js +99 -0
- package/internal/Panels/Viewport.js +313 -0
- package/internal/Panels/Viewport.module.css +25 -0
- package/internal/Panels/captureKeys.js +48 -0
- package/internal/Panels/index.js +101 -0
- package/internal/Panels/package.json +3 -0
- package/internal/Panels/useAutoFocus.js +95 -0
- package/internal/Panels/useFocusOnTransition.js +45 -0
- package/internal/Panels/useToggleRole.js +30 -0
- package/internal/Panels/util.js +64 -0
- package/internal/Picker/Picker.js +942 -0
- package/internal/Picker/Picker.module.css +1145 -0
- package/internal/Picker/PickerButton.js +97 -0
- package/internal/Picker/PickerItem.js +38 -0
- package/internal/Picker/SpottablePicker.js +63 -0
- package/internal/Picker/package.json +3 -0
- package/internal/Picker/tests/Picker-specs.js +968 -0
- package/internal/SharedStateDecorator/SharedStateDecorator.js +167 -0
- package/internal/SharedStateDecorator/package.json +3 -0
- package/internal/SharedStateDecorator/tests/SharedStateDecorator-specs.js +277 -0
- package/internal/WindowEventable/WindowEventable.js +114 -0
- package/internal/WindowEventable/package.json +3 -0
- package/internal/util/package.json +3 -0
- package/internal/util/util.js +79 -0
- package/internal/validators/package.json +4 -0
- package/internal/validators/tests/validators-specs.js +80 -0
- package/internal/validators/validators.js +136 -0
- package/package.json +69 -0
- package/resources/ilibmanifest.json +3 -0
- package/styles/color-mixins.less +230 -0
- package/styles/colors-game-green.less +25 -0
- package/styles/colors-game-orange.less +25 -0
- package/styles/colors-game.less +56 -0
- package/styles/colors-highcontrast.less +21 -0
- package/styles/colors.less +435 -0
- package/styles/mixins.less +337 -0
- package/styles/skin.less +54 -0
- package/styles/variables-base.less +32 -0
- package/styles/variables-game.less +25 -0
- package/styles/variables.less +1182 -0
- package/useScroll/HoverToScroll.js +265 -0
- package/useScroll/HoverToScroll.module.css +38 -0
- package/useScroll/OverscrollEffect.module.css +14 -0
- package/useScroll/Scrollbar.js +171 -0
- package/useScroll/Scrollbar.module.css +19 -0
- package/useScroll/ScrollbarPlaceholder.js +64 -0
- package/useScroll/ScrollbarTrack.js +209 -0
- package/useScroll/ScrollbarTrack.module.css +136 -0
- package/useScroll/package.json +3 -0
- package/useScroll/useEvent.js +693 -0
- package/useScroll/useOverscrollEffect.js +105 -0
- package/useScroll/useScroll.js +523 -0
- package/useScroll/useScroll.module.css +49 -0
- package/useScroll/useSpotlight.js +32 -0
- package/useScroll/useThemeScrollContentHandle.js +32 -0
package/Popup/Popup.js
ADDED
|
@@ -0,0 +1,690 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.PopupBase = exports.Popup = void 0;
|
|
7
|
+
var _keymap = require("@enact/core/keymap");
|
|
8
|
+
var _dispatcher = require("@enact/core/dispatcher");
|
|
9
|
+
var _FloatingLayer = _interopRequireDefault(require("@enact/ui/FloatingLayer"));
|
|
10
|
+
var _kind = _interopRequireDefault(require("@enact/core/kind"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
var _spotlight = _interopRequireWildcard(require("@enact/spotlight"));
|
|
14
|
+
var _Pause = _interopRequireDefault(require("@enact/spotlight/Pause"));
|
|
15
|
+
var _SpotlightContainerDecorator = _interopRequireDefault(require("@enact/spotlight/SpotlightContainerDecorator"));
|
|
16
|
+
var _container = require("@enact/spotlight/src/container");
|
|
17
|
+
var _Transition = _interopRequireDefault(require("@enact/ui/Transition"));
|
|
18
|
+
var _handle = require("@enact/core/handle");
|
|
19
|
+
var _warning = _interopRequireDefault(require("warning"));
|
|
20
|
+
var _Skinnable = _interopRequireDefault(require("../Skinnable"));
|
|
21
|
+
var _PopupModule = _interopRequireDefault(require("./Popup.module.css"));
|
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
+
var _excluded = ["children", "css", "direction", "noAnimation", "onHide", "onShow", "open", "position", "spotlightId", "spotlightRestrict", "transitionContainerClassName"],
|
|
24
|
+
_excluded2 = ["noAutoDismiss", "scrimType"];
|
|
25
|
+
/**
|
|
26
|
+
* Modal component that appears at the bottom of the screen and takes up the full screen width.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* <Popup open>Hello!</Popup>
|
|
30
|
+
*
|
|
31
|
+
* @module limestone/Popup
|
|
32
|
+
* @exports Popup
|
|
33
|
+
* @exports PopupBase
|
|
34
|
+
*/
|
|
35
|
+
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); }
|
|
36
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
37
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
38
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
39
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
40
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
41
|
+
function _possibleConstructorReturn(t, e) { if (e && ("object" == typeof e || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
42
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
43
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
44
|
+
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
45
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
46
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
47
|
+
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; }
|
|
48
|
+
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; }
|
|
49
|
+
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; }
|
|
50
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
51
|
+
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); }
|
|
52
|
+
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; }
|
|
53
|
+
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; }
|
|
54
|
+
var isDown = (0, _keymap.is)('down');
|
|
55
|
+
var isLeft = (0, _keymap.is)('left');
|
|
56
|
+
var isRight = (0, _keymap.is)('right');
|
|
57
|
+
var isUp = (0, _keymap.is)('up');
|
|
58
|
+
var TransitionContainer = (0, _SpotlightContainerDecorator["default"])({
|
|
59
|
+
enterTo: 'default-element',
|
|
60
|
+
preserveId: true
|
|
61
|
+
}, _Transition["default"]);
|
|
62
|
+
var getContainerNode = function getContainerNode(containerId) {
|
|
63
|
+
return document.querySelector("[data-spotlight-id='".concat(containerId, "']"));
|
|
64
|
+
};
|
|
65
|
+
var forwardHide = (0, _handle.forward)('onHide');
|
|
66
|
+
var forwardShow = (0, _handle.forward)('onShow');
|
|
67
|
+
var transitionDirection = {
|
|
68
|
+
bottom: 'down',
|
|
69
|
+
center: 'down',
|
|
70
|
+
fullscreen: 'down',
|
|
71
|
+
left: 'left',
|
|
72
|
+
right: 'right',
|
|
73
|
+
top: 'up'
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The base popup component.
|
|
78
|
+
*
|
|
79
|
+
* @class PopupBase
|
|
80
|
+
* @memberof limestone/Popup
|
|
81
|
+
* @ui
|
|
82
|
+
* @public
|
|
83
|
+
*/
|
|
84
|
+
var PopupBase = exports.PopupBase = (0, _kind["default"])({
|
|
85
|
+
name: 'PopupBase',
|
|
86
|
+
propTypes: /** @lends limestone/Popup.PopupBase.prototype */{
|
|
87
|
+
/**
|
|
88
|
+
* The contents to be displayed in the body of the popup.
|
|
89
|
+
*
|
|
90
|
+
* @type {Node}
|
|
91
|
+
* @required
|
|
92
|
+
* @public
|
|
93
|
+
*/
|
|
94
|
+
children: _propTypes["default"].node.isRequired,
|
|
95
|
+
/**
|
|
96
|
+
* Set the priority with which screen reader should treat updates to live regions for the Popup.
|
|
97
|
+
*
|
|
98
|
+
* @type {String|Object}
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
'aria-live': _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
|
|
102
|
+
/**
|
|
103
|
+
* Customizes the component by mapping the supplied collection of CSS class names to the
|
|
104
|
+
* corresponding internal elements and states of this component.
|
|
105
|
+
*
|
|
106
|
+
* The following classes are supported:
|
|
107
|
+
*
|
|
108
|
+
* * `popup` - The root class name
|
|
109
|
+
* * `body` - Applied to the body content container
|
|
110
|
+
* * `popupTransitionContainer` - Applied to the Popup's outermost container. Sizing can be
|
|
111
|
+
* applied here for percentage-of-screen values.
|
|
112
|
+
* * `top` - Applied when the `position` is 'top'
|
|
113
|
+
* * `right` - Applied when the `position` is 'right'
|
|
114
|
+
* * `bottom` - Applied when the `position` is 'bottom'
|
|
115
|
+
* * `left` - Applied when the `position` is 'left'
|
|
116
|
+
*
|
|
117
|
+
* @type {Object}
|
|
118
|
+
* @private
|
|
119
|
+
*/
|
|
120
|
+
css: _propTypes["default"].object,
|
|
121
|
+
/**
|
|
122
|
+
* Support accessibility options.
|
|
123
|
+
*
|
|
124
|
+
* If true, the aria-live and role in Popup are `null`.
|
|
125
|
+
*
|
|
126
|
+
* @type {Boolean}
|
|
127
|
+
* @default false
|
|
128
|
+
* @private
|
|
129
|
+
*/
|
|
130
|
+
noAlertRole: _propTypes["default"].bool,
|
|
131
|
+
/**
|
|
132
|
+
* Disables transition animation.
|
|
133
|
+
*
|
|
134
|
+
* @type {Boolean}
|
|
135
|
+
* @default false
|
|
136
|
+
* @public
|
|
137
|
+
*/
|
|
138
|
+
noAnimation: _propTypes["default"].bool,
|
|
139
|
+
/**
|
|
140
|
+
* Disables the outline in high contrast mode.
|
|
141
|
+
*
|
|
142
|
+
* @type {Boolean}
|
|
143
|
+
* @default false
|
|
144
|
+
* @private
|
|
145
|
+
*/
|
|
146
|
+
noOutline: _propTypes["default"].bool,
|
|
147
|
+
/**
|
|
148
|
+
* Called after the popup's "hide" transition finishes.
|
|
149
|
+
*
|
|
150
|
+
* @type {Function}
|
|
151
|
+
* @public
|
|
152
|
+
*/
|
|
153
|
+
onHide: _propTypes["default"].func,
|
|
154
|
+
/**
|
|
155
|
+
* Called after the popup's "show" transition finishes.
|
|
156
|
+
*
|
|
157
|
+
* @type {Function}
|
|
158
|
+
* @public
|
|
159
|
+
*/
|
|
160
|
+
onShow: _propTypes["default"].func,
|
|
161
|
+
/**
|
|
162
|
+
* Controls the visibility of the Popup.
|
|
163
|
+
*
|
|
164
|
+
* By default, the Popup and its contents are not rendered until `open`.
|
|
165
|
+
*
|
|
166
|
+
* @type {Boolean}
|
|
167
|
+
* @default false
|
|
168
|
+
* @public
|
|
169
|
+
*/
|
|
170
|
+
open: _propTypes["default"].bool,
|
|
171
|
+
/**
|
|
172
|
+
* Position of the Popup on the screen.
|
|
173
|
+
*
|
|
174
|
+
* @type {('bottom'|'bottom left'|'bottom right'|'center'|'fullscreen'|'left'|'right'|'top'|'top left'|'top right')}
|
|
175
|
+
* @default 'bottom'
|
|
176
|
+
* @public
|
|
177
|
+
*/
|
|
178
|
+
position: _propTypes["default"].oneOf(['bottom', 'bottom left', 'bottom right', 'center', 'fullscreen', 'left', 'right', 'top', 'top left', 'top right']),
|
|
179
|
+
/**
|
|
180
|
+
* The ARIA role for the Popup.
|
|
181
|
+
*
|
|
182
|
+
* @type {String|Object}
|
|
183
|
+
* @public
|
|
184
|
+
*/
|
|
185
|
+
role: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
|
|
186
|
+
/**
|
|
187
|
+
* The container id for {@link spotlight/SpotlightContainerDecorator/#SpotlightContainerDecorator.spotlightId|Spotlight container}.
|
|
188
|
+
*
|
|
189
|
+
* @type {String}
|
|
190
|
+
* @default null
|
|
191
|
+
* @public
|
|
192
|
+
*/
|
|
193
|
+
spotlightId: _propTypes["default"].string,
|
|
194
|
+
/**
|
|
195
|
+
* Restricts or prioritizes navigation when focus attempts to leave the popup.
|
|
196
|
+
*
|
|
197
|
+
* It can be either `'none'`, `'self-first'`, or `'self-only'`.
|
|
198
|
+
*
|
|
199
|
+
* Note: The ready-to-use {@link limestone/Popup.Popup|Popup} component only supports
|
|
200
|
+
* `'self-first'` and `'self-only'`.
|
|
201
|
+
*
|
|
202
|
+
* @type {('none'|'self-first'|'self-only')}
|
|
203
|
+
* @default 'self-only'
|
|
204
|
+
* @public
|
|
205
|
+
*/
|
|
206
|
+
spotlightRestrict: _propTypes["default"].oneOf(['none', 'self-first', 'self-only'])
|
|
207
|
+
},
|
|
208
|
+
defaultProps: {
|
|
209
|
+
noAlertRole: false,
|
|
210
|
+
noAnimation: false,
|
|
211
|
+
open: false,
|
|
212
|
+
position: 'bottom',
|
|
213
|
+
spotlightRestrict: 'self-only'
|
|
214
|
+
},
|
|
215
|
+
styles: {
|
|
216
|
+
css: _PopupModule["default"],
|
|
217
|
+
className: 'popup',
|
|
218
|
+
publicClassNames: ['popup', 'body', 'popupTransitionContainer', 'top', 'right', 'bottom', 'left']
|
|
219
|
+
},
|
|
220
|
+
computed: {
|
|
221
|
+
// When passing `aria-live` prop to the Popup, the prop should work first.
|
|
222
|
+
// If `noAlertRole` is true, alert role and aria-live will be removed. Contents of the popup won't be read automatically when opened.
|
|
223
|
+
// Otherwise, `aria-live` will be usually `off`.
|
|
224
|
+
'aria-live': function ariaLive(_ref) {
|
|
225
|
+
var live = _ref['aria-live'],
|
|
226
|
+
noAlertRole = _ref.noAlertRole;
|
|
227
|
+
return typeof live !== 'undefined' ? live : !noAlertRole && 'off' || null;
|
|
228
|
+
},
|
|
229
|
+
className: function className(_ref2) {
|
|
230
|
+
var noOutline = _ref2.noOutline,
|
|
231
|
+
position = _ref2.position,
|
|
232
|
+
styler = _ref2.styler;
|
|
233
|
+
return styler.append(position.split(' '), position === 'fullscreen' || noOutline ? null : _PopupModule["default"].outline);
|
|
234
|
+
},
|
|
235
|
+
direction: function direction(_ref3) {
|
|
236
|
+
var position = _ref3.position;
|
|
237
|
+
return transitionDirection[position];
|
|
238
|
+
},
|
|
239
|
+
noAnimation: function noAnimation(_ref4) {
|
|
240
|
+
var _noAnimation = _ref4.noAnimation;
|
|
241
|
+
return typeof ENACT_PACK_NO_ANIMATION !== 'undefined' && ENACT_PACK_NO_ANIMATION || _noAnimation;
|
|
242
|
+
},
|
|
243
|
+
// When passing `role` prop to the Popup, the prop should work first.
|
|
244
|
+
// If `noAlertRole` is true, alert role and aria-live will be removed. Contents of the popup won't be read automatically when opened.
|
|
245
|
+
// Otherwise, `role` will be usually `alert`.
|
|
246
|
+
role: function role(_ref5) {
|
|
247
|
+
var noAlertRole = _ref5.noAlertRole,
|
|
248
|
+
_role = _ref5.role;
|
|
249
|
+
return typeof _role !== 'undefined' ? _role : !noAlertRole && 'alert' || null;
|
|
250
|
+
},
|
|
251
|
+
transitionContainerClassName: function transitionContainerClassName(_ref6) {
|
|
252
|
+
var css = _ref6.css,
|
|
253
|
+
position = _ref6.position,
|
|
254
|
+
styler = _ref6.styler;
|
|
255
|
+
return styler.join(css.popupTransitionContainer, position.split(' '));
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
render: function render(_ref7) {
|
|
259
|
+
var children = _ref7.children,
|
|
260
|
+
css = _ref7.css,
|
|
261
|
+
direction = _ref7.direction,
|
|
262
|
+
noAnimation = _ref7.noAnimation,
|
|
263
|
+
onHide = _ref7.onHide,
|
|
264
|
+
onShow = _ref7.onShow,
|
|
265
|
+
open = _ref7.open,
|
|
266
|
+
position = _ref7.position,
|
|
267
|
+
spotlightId = _ref7.spotlightId,
|
|
268
|
+
spotlightRestrict = _ref7.spotlightRestrict,
|
|
269
|
+
transitionContainerClassName = _ref7.transitionContainerClassName,
|
|
270
|
+
rest = _objectWithoutProperties(_ref7, _excluded);
|
|
271
|
+
delete rest.noAlertRole;
|
|
272
|
+
delete rest.noOutline;
|
|
273
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionContainer, {
|
|
274
|
+
className: transitionContainerClassName,
|
|
275
|
+
css: css,
|
|
276
|
+
direction: direction,
|
|
277
|
+
duration: "short",
|
|
278
|
+
noAnimation: position === 'fullscreen' ? true : noAnimation,
|
|
279
|
+
onHide: onHide,
|
|
280
|
+
onShow: onShow,
|
|
281
|
+
spotlightDisabled: !open,
|
|
282
|
+
spotlightId: spotlightId,
|
|
283
|
+
spotlightRestrict: spotlightRestrict,
|
|
284
|
+
type: "slide",
|
|
285
|
+
visible: open,
|
|
286
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", _objectSpread(_objectSpread({}, rest), {}, {
|
|
287
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
288
|
+
className: css.body,
|
|
289
|
+
children: children
|
|
290
|
+
})
|
|
291
|
+
}))
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
var SkinnedPopupBase = (0, _Skinnable["default"])(PopupBase);
|
|
296
|
+
|
|
297
|
+
// Deprecate using scrimType 'none' with spotlightRestrict of 'self-only'
|
|
298
|
+
var checkScrimNone = function checkScrimNone(props) {
|
|
299
|
+
var validScrim = !(props.scrimType === 'none' && props.spotlightRestrict === 'self-only');
|
|
300
|
+
process.env.NODE_ENV !== "production" ? (0, _warning["default"])(validScrim, "Using 'spotlightRestrict' of 'self-only' without a scrim " + 'is not supported. Use a transparent scrim to prevent spotlight focus outside of the popup') : void 0;
|
|
301
|
+
};
|
|
302
|
+
var OpenState = {
|
|
303
|
+
CLOSED: 0,
|
|
304
|
+
OPENING: 1,
|
|
305
|
+
OPEN: 2
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* A stateful component that renders a popup in a
|
|
310
|
+
* {@link ui/FloatingLayer.FloatingLayer|FloatingLayer}.
|
|
311
|
+
*
|
|
312
|
+
* @class Popup
|
|
313
|
+
* @memberof limestone/Popup
|
|
314
|
+
* @extends limestone/Popup.PopupBase
|
|
315
|
+
* @ui
|
|
316
|
+
* @public
|
|
317
|
+
*/
|
|
318
|
+
var Popup = exports.Popup = /*#__PURE__*/function (_Component) {
|
|
319
|
+
function Popup(props) {
|
|
320
|
+
var _this;
|
|
321
|
+
_classCallCheck(this, Popup);
|
|
322
|
+
_this = _callSuper(this, Popup, [props]);
|
|
323
|
+
_this.handleFloatingLayerOpen = function () {
|
|
324
|
+
if (!_this.props.noAnimation && _this.state.popupOpen !== OpenState.OPEN) {
|
|
325
|
+
_this.setState({
|
|
326
|
+
popupOpen: OpenState.OPENING
|
|
327
|
+
});
|
|
328
|
+
} else if (_this.state.popupOpen === OpenState.OPEN && _this.props.open) {
|
|
329
|
+
_this.spotPopupContent();
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
_this.handleKeyDown = function (ev) {
|
|
333
|
+
var _this$props = _this.props,
|
|
334
|
+
onClose = _this$props.onClose,
|
|
335
|
+
no5WayClose = _this$props.no5WayClose,
|
|
336
|
+
position = _this$props.position,
|
|
337
|
+
spotlightRestrict = _this$props.spotlightRestrict;
|
|
338
|
+
if (no5WayClose) return;
|
|
339
|
+
var containerId = _this.state.containerId;
|
|
340
|
+
var keyCode = ev.keyCode;
|
|
341
|
+
var direction = (0, _spotlight.getDirection)(keyCode);
|
|
342
|
+
var spottables = _spotlight["default"].getSpottableDescendants(containerId).length;
|
|
343
|
+
var current = _spotlight["default"].getCurrent();
|
|
344
|
+
if (direction && (!spottables || current && getContainerNode(containerId).contains(current))) {
|
|
345
|
+
// explicitly restrict navigation in order to manage focus state when attempting to leave the popup
|
|
346
|
+
_spotlight["default"].set(containerId, {
|
|
347
|
+
restrict: 'self-only'
|
|
348
|
+
});
|
|
349
|
+
if (onClose) {
|
|
350
|
+
var focusChanged;
|
|
351
|
+
if (spottables && current && spotlightRestrict !== 'self-only') {
|
|
352
|
+
focusChanged = _spotlight["default"].move(direction);
|
|
353
|
+
if (focusChanged) {
|
|
354
|
+
// stop propagation to prevent default spotlight behavior
|
|
355
|
+
ev.stopPropagation();
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (!spottables || focusChanged === false && (position === 'center' || isUp(keyCode) && position === 'bottom' || isDown(keyCode) && position === 'top' || isRight(keyCode) && position === 'left' || isLeft(keyCode) && position === 'right')) {
|
|
359
|
+
// prevent default page scrolling
|
|
360
|
+
ev.preventDefault();
|
|
361
|
+
// stop propagation to prevent default spotlight behavior
|
|
362
|
+
ev.stopPropagation();
|
|
363
|
+
// set the pointer mode to false on keydown
|
|
364
|
+
_spotlight["default"].setPointerMode(false);
|
|
365
|
+
(0, _handle.forwardCustom)('onClose')(null, _this.props);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
_this.handleDismiss = function (ev) {
|
|
371
|
+
(0, _handle.forwardCustom)('onClose', function () {
|
|
372
|
+
return {
|
|
373
|
+
detail: ev === null || ev === void 0 ? void 0 : ev.detail
|
|
374
|
+
};
|
|
375
|
+
})(null, _this.props);
|
|
376
|
+
};
|
|
377
|
+
_this.handlePopupHide = function (ev) {
|
|
378
|
+
forwardHide(ev, _this.props);
|
|
379
|
+
_this.setState({
|
|
380
|
+
floatLayerOpen: false
|
|
381
|
+
}, function () {
|
|
382
|
+
if (!ev.currentTarget || ev.currentTarget.getAttribute('data-spotlight-id') === _this.state.containerId) {
|
|
383
|
+
_this.spotActivator(_this.state.activator);
|
|
384
|
+
}
|
|
385
|
+
_this.setState({
|
|
386
|
+
activator: null
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
};
|
|
390
|
+
_this.handlePopupShow = function (ev) {
|
|
391
|
+
forwardShow(ev, _this.props);
|
|
392
|
+
_this.setState({
|
|
393
|
+
popupOpen: OpenState.OPEN
|
|
394
|
+
});
|
|
395
|
+
if (!ev.currentTarget || ev.currentTarget.getAttribute('data-spotlight-id') === _this.state.containerId) {
|
|
396
|
+
_this.spotPopupContent();
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
_this.spotActivator = function (activator) {
|
|
400
|
+
_this.paused.resume();
|
|
401
|
+
|
|
402
|
+
// only spot the activator if the popup is closed
|
|
403
|
+
if (_this.props.open) return;
|
|
404
|
+
var current = _spotlight["default"].getCurrent();
|
|
405
|
+
var containerNode = getContainerNode(_this.state.containerId);
|
|
406
|
+
var lastContainerId = (0, _container.getLastContainer)();
|
|
407
|
+
(0, _dispatcher.off)('keydown', _this.handleKeyDown);
|
|
408
|
+
|
|
409
|
+
// if there is no currently-spotted control, or it is wrapped by the popup's container, we
|
|
410
|
+
// know it's safe to change focus
|
|
411
|
+
if (!current || containerNode && containerNode.contains(current)) {
|
|
412
|
+
// attempt to set focus to the activator, if available
|
|
413
|
+
if (!_spotlight["default"].isPaused()) {
|
|
414
|
+
if (activator) {
|
|
415
|
+
if (!_spotlight["default"].focus(activator)) {
|
|
416
|
+
_spotlight["default"].focus();
|
|
417
|
+
}
|
|
418
|
+
} else {
|
|
419
|
+
_spotlight["default"].disableSelector(lastContainerId);
|
|
420
|
+
_spotlight["default"].focus();
|
|
421
|
+
_spotlight["default"].enableSelector(lastContainerId);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
_this.spotPopupContent = function () {
|
|
427
|
+
_this.paused.resume();
|
|
428
|
+
|
|
429
|
+
// only spot the activator if the popup is open
|
|
430
|
+
if (!_this.props.open) return;
|
|
431
|
+
var containerId = _this.state.containerId;
|
|
432
|
+
(0, _dispatcher.on)('keydown', _this.handleKeyDown);
|
|
433
|
+
if (!_spotlight["default"].isPaused() && !_spotlight["default"].focus(containerId)) {
|
|
434
|
+
var current = _spotlight["default"].getCurrent();
|
|
435
|
+
|
|
436
|
+
// In cases where the container contains no spottable controls, or we're in pointer-mode, focus
|
|
437
|
+
// cannot inherently set the active container or blur the active control, so we must do that
|
|
438
|
+
// here.
|
|
439
|
+
if (current) {
|
|
440
|
+
current.blur();
|
|
441
|
+
}
|
|
442
|
+
_spotlight["default"].setActiveContainer(containerId);
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
_this.paused = new _Pause["default"]('Popup');
|
|
446
|
+
_this.state = {
|
|
447
|
+
floatLayerOpen: _this.props.open,
|
|
448
|
+
popupOpen: _this.props.open ? OpenState.OPEN : OpenState.CLOSED,
|
|
449
|
+
prevOpen: _this.props.open,
|
|
450
|
+
containerId: _spotlight["default"].add(),
|
|
451
|
+
activator: null
|
|
452
|
+
};
|
|
453
|
+
checkScrimNone(_this.props);
|
|
454
|
+
return _this;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// Spot the content after it's mounted.
|
|
458
|
+
_inherits(Popup, _Component);
|
|
459
|
+
return _createClass(Popup, [{
|
|
460
|
+
key: "componentDidMount",
|
|
461
|
+
value: function componentDidMount() {
|
|
462
|
+
if (this.props.open) {
|
|
463
|
+
// If the popup is open on mount, we need to pause spotlight so nothing steals focus
|
|
464
|
+
// while the popup is rendering.
|
|
465
|
+
this.paused.pause();
|
|
466
|
+
if (getContainerNode(this.state.containerId)) {
|
|
467
|
+
this.spotPopupContent();
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}, {
|
|
472
|
+
key: "componentDidUpdate",
|
|
473
|
+
value: function componentDidUpdate(prevProps, prevState) {
|
|
474
|
+
if (this.props.open !== prevProps.open) {
|
|
475
|
+
if (!this.props.noAnimation) {
|
|
476
|
+
if (!this.props.open && this.state.popupOpen === OpenState.CLOSED) {
|
|
477
|
+
// If the popup is supposed to be closed (!this.props.open) and is actually
|
|
478
|
+
// fully closed (OpenState.CLOSED), we must resume spotlight navigation. This
|
|
479
|
+
// can occur when quickly toggling a Popup open and closed.
|
|
480
|
+
this.paused.resume();
|
|
481
|
+
} else {
|
|
482
|
+
// Otherwise, we pause spotlight so it is locked until the popup is ready
|
|
483
|
+
this.paused.pause();
|
|
484
|
+
}
|
|
485
|
+
} else if (this.props.open) {
|
|
486
|
+
forwardShow(null, this.props);
|
|
487
|
+
this.spotPopupContent();
|
|
488
|
+
} else if (prevProps.open) {
|
|
489
|
+
forwardHide(null, this.props);
|
|
490
|
+
this.spotActivator(prevState.activator);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
checkScrimNone(this.props);
|
|
494
|
+
}
|
|
495
|
+
}, {
|
|
496
|
+
key: "componentWillUnmount",
|
|
497
|
+
value: function componentWillUnmount() {
|
|
498
|
+
if (this.props.open) {
|
|
499
|
+
(0, _dispatcher.off)('keydown', this.handleKeyDown);
|
|
500
|
+
}
|
|
501
|
+
_spotlight["default"].remove(this.state.containerId);
|
|
502
|
+
}
|
|
503
|
+
}, {
|
|
504
|
+
key: "render",
|
|
505
|
+
value: function render() {
|
|
506
|
+
var _this$props2 = this.props,
|
|
507
|
+
noAutoDismiss = _this$props2.noAutoDismiss,
|
|
508
|
+
scrimType = _this$props2.scrimType,
|
|
509
|
+
rest = _objectWithoutProperties(_this$props2, _excluded2);
|
|
510
|
+
delete rest.no5WayClose;
|
|
511
|
+
delete rest.onClose;
|
|
512
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_FloatingLayer["default"], {
|
|
513
|
+
noAutoDismiss: noAutoDismiss,
|
|
514
|
+
open: this.state.floatLayerOpen,
|
|
515
|
+
onOpen: this.handleFloatingLayerOpen,
|
|
516
|
+
onDismiss: this.handleDismiss,
|
|
517
|
+
scrimType: scrimType,
|
|
518
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SkinnedPopupBase, _objectSpread(_objectSpread({}, rest), {}, {
|
|
519
|
+
"data-webos-voice-exclusive": true,
|
|
520
|
+
onHide: this.handlePopupHide,
|
|
521
|
+
onShow: this.handlePopupShow,
|
|
522
|
+
open: this.state.popupOpen >= OpenState.OPENING,
|
|
523
|
+
spotlightId: this.state.containerId
|
|
524
|
+
}))
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
}], [{
|
|
528
|
+
key: "getDerivedStateFromProps",
|
|
529
|
+
value: function getDerivedStateFromProps(props, state) {
|
|
530
|
+
if (props.open !== state.prevOpen) {
|
|
531
|
+
if (props.open) {
|
|
532
|
+
return {
|
|
533
|
+
popupOpen: props.noAnimation || state.floatLayerOpen ? OpenState.OPEN : OpenState.CLOSED,
|
|
534
|
+
floatLayerOpen: true,
|
|
535
|
+
activator: _spotlight["default"].getCurrent(),
|
|
536
|
+
prevOpen: props.open
|
|
537
|
+
};
|
|
538
|
+
} else {
|
|
539
|
+
// Disables the spotlight conatiner of popup when `noAnimation` set
|
|
540
|
+
if (props.noAnimation) {
|
|
541
|
+
var node = getContainerNode(state.containerId);
|
|
542
|
+
if (node) {
|
|
543
|
+
node.dataset['spotlightContainerDisabled'] = true;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
return {
|
|
547
|
+
popupOpen: OpenState.CLOSED,
|
|
548
|
+
floatLayerOpen: state.popupOpen === OpenState.OPEN ? !props.noAnimation : false,
|
|
549
|
+
activator: props.noAnimation ? null : state.activator,
|
|
550
|
+
prevOpen: props.open
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
return null;
|
|
555
|
+
}
|
|
556
|
+
}]);
|
|
557
|
+
}(_react.Component);
|
|
558
|
+
Popup.propTypes = /** @lends limestone/Popup.Popup.prototype */{
|
|
559
|
+
/**
|
|
560
|
+
* Prevents closing the popup via 5-way navigation out of the content.
|
|
561
|
+
*
|
|
562
|
+
* @type {Boolean}
|
|
563
|
+
* @default false
|
|
564
|
+
* @private
|
|
565
|
+
*/
|
|
566
|
+
no5WayClose: _propTypes["default"].bool,
|
|
567
|
+
/**
|
|
568
|
+
* Disables transition animation.
|
|
569
|
+
*
|
|
570
|
+
* @type {Boolean}
|
|
571
|
+
* @default false
|
|
572
|
+
* @public
|
|
573
|
+
*/
|
|
574
|
+
noAnimation: _propTypes["default"].bool,
|
|
575
|
+
/**
|
|
576
|
+
* Indicates that the popup will not trigger `onClose` when the user presses the cancel/back (e.g. `ESC`) key or
|
|
577
|
+
* taps outside the popup.
|
|
578
|
+
*
|
|
579
|
+
* @type {Boolean}
|
|
580
|
+
* @default false
|
|
581
|
+
* @public
|
|
582
|
+
*/
|
|
583
|
+
noAutoDismiss: _propTypes["default"].bool,
|
|
584
|
+
/**
|
|
585
|
+
* Called on:
|
|
586
|
+
*
|
|
587
|
+
* * pressing `ESC` key,
|
|
588
|
+
* * clicking on outside the boundary of the popup, or
|
|
589
|
+
* * moving spotlight focus outside the boundary of the popup when `spotlightRestrict` is
|
|
590
|
+
* `'self-first'`.
|
|
591
|
+
*
|
|
592
|
+
* Event payload:
|
|
593
|
+
*
|
|
594
|
+
* * pressing `ESC` key, carries `detail` property containing `inputType` value of `'key'`.
|
|
595
|
+
* * clicking outside the boundary of the popup, carries `detail` property containing
|
|
596
|
+
* `inputType` value of `'click'`.
|
|
597
|
+
*
|
|
598
|
+
* It is the responsibility of the callback to set the `open` property to `false`.
|
|
599
|
+
*
|
|
600
|
+
* @type {Function}
|
|
601
|
+
* @public
|
|
602
|
+
*/
|
|
603
|
+
onClose: _propTypes["default"].func,
|
|
604
|
+
/**
|
|
605
|
+
* Called after hide transition has completed, and immediately with no transition.
|
|
606
|
+
*
|
|
607
|
+
* @type {Function}
|
|
608
|
+
* @public
|
|
609
|
+
*/
|
|
610
|
+
onHide: _propTypes["default"].func,
|
|
611
|
+
/**
|
|
612
|
+
* Called when a key is pressed.
|
|
613
|
+
*
|
|
614
|
+
* @type {Function}
|
|
615
|
+
* @public
|
|
616
|
+
*/
|
|
617
|
+
onKeyDown: _propTypes["default"].func,
|
|
618
|
+
/**
|
|
619
|
+
* Called after show transition has completed, and immediately with no transition.
|
|
620
|
+
*
|
|
621
|
+
* Note: The function does not run if Popup is initially opened and
|
|
622
|
+
* {@link limestone/Popup.PopupBase.noAnimation|noAnimation} is `true`.
|
|
623
|
+
*
|
|
624
|
+
* @type {Function}
|
|
625
|
+
* @public
|
|
626
|
+
*/
|
|
627
|
+
onShow: _propTypes["default"].func,
|
|
628
|
+
/**
|
|
629
|
+
* Controls the visibility of the Popup.
|
|
630
|
+
*
|
|
631
|
+
* By default, the Popup and its contents are not rendered until `open`.
|
|
632
|
+
*
|
|
633
|
+
* @type {Boolean}
|
|
634
|
+
* @default false
|
|
635
|
+
* @public
|
|
636
|
+
*/
|
|
637
|
+
open: _propTypes["default"].bool,
|
|
638
|
+
/**
|
|
639
|
+
* Position of the Popup on the screen.
|
|
640
|
+
*
|
|
641
|
+
* @type {('bottom'|'bottom left'|'bottom right'|'center'|'fullscreen'|'left'|'right'|'top'|'top left'|'top right')}
|
|
642
|
+
* @default 'bottom'
|
|
643
|
+
* @public
|
|
644
|
+
*/
|
|
645
|
+
position: _propTypes["default"].oneOf(['bottom', 'bottom left', 'bottom right', 'center', 'fullscreen', 'left', 'right', 'top', 'top left', 'top right']),
|
|
646
|
+
/**
|
|
647
|
+
* Scrim type.
|
|
648
|
+
*
|
|
649
|
+
* * Values: `'transparent'`, `'translucent'`, or `'none'`.
|
|
650
|
+
*
|
|
651
|
+
* `'none'` is not compatible with `spotlightRestrict` of `'self-only'`, use a transparent scrim
|
|
652
|
+
* to prevent mouse focus when using popup.
|
|
653
|
+
*
|
|
654
|
+
* @type {('transparent'|'translucent'|'none')}
|
|
655
|
+
* @default 'translucent'
|
|
656
|
+
* @public
|
|
657
|
+
*/
|
|
658
|
+
scrimType: _propTypes["default"].oneOf(['transparent', 'translucent', 'none']),
|
|
659
|
+
/**
|
|
660
|
+
* Restricts or prioritizes navigation when focus attempts to leave the popup.
|
|
661
|
+
*
|
|
662
|
+
* * Values: `'self-first'`, or `'self-only'`.
|
|
663
|
+
*
|
|
664
|
+
* When using `self-first`, attempts to leave the popup via 5-way will fire `onClose` based
|
|
665
|
+
* on the following values of `position`:
|
|
666
|
+
*
|
|
667
|
+
* * `'bottom'` - When leaving via 5-way up
|
|
668
|
+
* * `'top'` - When leaving via 5-way down
|
|
669
|
+
* * `'left'` - When leaving via 5-way right
|
|
670
|
+
* * `'right'` - When leaving via 5-way left
|
|
671
|
+
* * `'center'` - When leaving via any 5-way direction
|
|
672
|
+
*
|
|
673
|
+
* Note: If `onClose` is not set, then this has no effect on 5-way navigation. If the popup
|
|
674
|
+
* has no spottable children, 5-way navigation will cause the Popup to fire `onClose`.
|
|
675
|
+
*
|
|
676
|
+
* @type {('self-first'|'self-only')}
|
|
677
|
+
* @default 'self-only'
|
|
678
|
+
* @public
|
|
679
|
+
*/
|
|
680
|
+
spotlightRestrict: _propTypes["default"].oneOf(['self-first', 'self-only'])
|
|
681
|
+
};
|
|
682
|
+
Popup.defaultProps = {
|
|
683
|
+
noAnimation: false,
|
|
684
|
+
noAutoDismiss: false,
|
|
685
|
+
open: false,
|
|
686
|
+
position: 'bottom',
|
|
687
|
+
scrimType: 'translucent',
|
|
688
|
+
spotlightRestrict: 'self-only'
|
|
689
|
+
};
|
|
690
|
+
var _default = exports["default"] = Popup;
|