@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,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.ContextualMenuDecorator = void 0;
|
|
7
|
+
var _handle = require("@enact/core/handle");
|
|
8
|
+
var _hoc = _interopRequireDefault(require("@enact/core/hoc"));
|
|
9
|
+
var _kind = _interopRequireDefault(require("@enact/core/kind"));
|
|
10
|
+
var _Repeater = _interopRequireDefault(require("@enact/ui/Repeater"));
|
|
11
|
+
var _Toggleable = _interopRequireDefault(require("@enact/ui/Toggleable"));
|
|
12
|
+
var _compose = _interopRequireDefault(require("ramda/src/compose"));
|
|
13
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
14
|
+
var _ContextualPopupDecorator = _interopRequireDefault(require("../ContextualPopupDecorator"));
|
|
15
|
+
var _Item = _interopRequireDefault(require("../Item"));
|
|
16
|
+
var _Scroller = _interopRequireDefault(require("../Scroller"));
|
|
17
|
+
var _Skinnable = _interopRequireDefault(require("../Skinnable"));
|
|
18
|
+
var _ContextualMenuDecoratorModule = _interopRequireDefault(require("./ContextualMenuDecorator.module.css"));
|
|
19
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
|
+
var _excluded = ["className"],
|
|
21
|
+
_excluded2 = ["onOpen", "popupProps"];
|
|
22
|
+
/**
|
|
23
|
+
* A decorator for adding contextual menus to components.
|
|
24
|
+
*
|
|
25
|
+
* @module limestone/ContextualMenuDecorator
|
|
26
|
+
* @exports ContextualMenuDecorator
|
|
27
|
+
*/
|
|
28
|
+
// The maximum number of visible items. More than this number invokes a scroller.
|
|
29
|
+
// When updating this value, you must also set the max-items LESS variable.
|
|
30
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
31
|
+
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; }
|
|
32
|
+
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; }
|
|
33
|
+
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; }
|
|
34
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
35
|
+
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); }
|
|
36
|
+
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; }
|
|
37
|
+
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; }
|
|
38
|
+
var MAX_VISIBLE_MENU_ITEMS = 5;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Default config for {@link limestone/ContextualMenuDecorator.ContextualMenuDecorator}
|
|
42
|
+
*
|
|
43
|
+
* @type {Object}
|
|
44
|
+
* @hocconfig
|
|
45
|
+
* @memberof limestone/ContextualMenuDecorator.ContextualMenuDecorator
|
|
46
|
+
*/
|
|
47
|
+
var defaultConfig = {
|
|
48
|
+
/**
|
|
49
|
+
* Disables passing the `skin` prop to the wrapped component.
|
|
50
|
+
*
|
|
51
|
+
* @see {@link limestone/Skinnable.Skinnable.skin}
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @default false
|
|
54
|
+
* @memberof limestone/ContextualMenuDecorator.ContextualMenuDecorator.defaultConfig
|
|
55
|
+
* @public
|
|
56
|
+
*/
|
|
57
|
+
noSkin: false,
|
|
58
|
+
/**
|
|
59
|
+
* The prop in which to pass the value of `open` state of ContextualMenuDecorator to the
|
|
60
|
+
* wrapped component.
|
|
61
|
+
*
|
|
62
|
+
* @type {String}
|
|
63
|
+
* @default 'selected'
|
|
64
|
+
* @memberof limestone/ContextualMenuDecorator.ContextualMenuDecorator.defaultConfig
|
|
65
|
+
* @public
|
|
66
|
+
*/
|
|
67
|
+
openProp: 'selected'
|
|
68
|
+
};
|
|
69
|
+
var ScrollingRepeater = function ScrollingRepeater(_ref) {
|
|
70
|
+
var className = _ref.className,
|
|
71
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
72
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Scroller["default"], {
|
|
73
|
+
className: className,
|
|
74
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Repeater["default"], _objectSpread({}, rest))
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
var ContextualMenuDecoratorBase = (0, _hoc["default"])(defaultConfig, function (config, Wrapped) {
|
|
78
|
+
// we might not need Skinnable at all here. If we want to skin the popup, and it's defined as a
|
|
79
|
+
// private component in this module, we can wrap it with skinnable and style it as needed there.
|
|
80
|
+
var Component = (0, _Skinnable["default"])((0, _ContextualPopupDecorator["default"])(_objectSpread(_objectSpread({}, config), {}, {
|
|
81
|
+
noArrow: true
|
|
82
|
+
}), Wrapped));
|
|
83
|
+
return (0, _kind["default"])({
|
|
84
|
+
name: 'ContextualMenuDecorator',
|
|
85
|
+
propTypes: /** @lends limestone/ContextualMenuDecorator.ContextualMenuDecorator.prototype */{
|
|
86
|
+
/**
|
|
87
|
+
* Direction of popup with respect to the wrapped component.
|
|
88
|
+
*
|
|
89
|
+
* @type {('above'|'above center'|'above left'|'above right'|'below'|'below center'|'below left'|'below right'|'left middle'|'left top'|'left bottom'|'right middle'|'right top'|'right bottom')}
|
|
90
|
+
* @default 'below right'
|
|
91
|
+
* @public
|
|
92
|
+
*/
|
|
93
|
+
direction: _propTypes["default"].oneOf(['above', 'above center', 'above left', 'above right', 'below', 'below center', 'below left', 'below right', 'left middle', 'left top', 'left bottom', 'right middle', 'right top', 'right bottom']),
|
|
94
|
+
/**
|
|
95
|
+
* The items to be displayed in the `ContextualMenuDecorator` when `open`.
|
|
96
|
+
*
|
|
97
|
+
* Takes either an array of strings or an array of objects. When strings, the values will be
|
|
98
|
+
* used in the generated components as the readable text. When objects, the properties will
|
|
99
|
+
* be passed onto an `Item` component and `children` as well as a unique `key` property are
|
|
100
|
+
* required.
|
|
101
|
+
*
|
|
102
|
+
* @type {String[]|Array.<{key: (Number|String), children: (String|Component)}>}
|
|
103
|
+
* @public
|
|
104
|
+
*/
|
|
105
|
+
menuItems: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].string), _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
106
|
+
children: _propTypes["default"].string.isRequired,
|
|
107
|
+
key: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]).isRequired
|
|
108
|
+
}))]),
|
|
109
|
+
/**
|
|
110
|
+
* Offset from the activator to apply to the position of the popup.
|
|
111
|
+
*
|
|
112
|
+
* @type {('none'|'overlap'|'small'|'large')}
|
|
113
|
+
* @default 'overlap'
|
|
114
|
+
* @public
|
|
115
|
+
*/
|
|
116
|
+
offset: _propTypes["default"].oneOf(['none', 'overlap', 'small', 'large']),
|
|
117
|
+
/**
|
|
118
|
+
* Called when the user has attempted to close the popup.
|
|
119
|
+
*
|
|
120
|
+
* This may occur either when the close button is clicked or when spotlight focus
|
|
121
|
+
* moves outside the boundary of the popup. Setting `spotlightRestrict` to `'self-only'`
|
|
122
|
+
* will prevent Spotlight focus from leaving the popup.
|
|
123
|
+
*
|
|
124
|
+
* @type {Function}
|
|
125
|
+
* @public
|
|
126
|
+
*/
|
|
127
|
+
onClose: _propTypes["default"].func,
|
|
128
|
+
/**
|
|
129
|
+
* Called when the popup is opened.
|
|
130
|
+
*
|
|
131
|
+
* @type {Function}
|
|
132
|
+
* @public
|
|
133
|
+
*/
|
|
134
|
+
onOpen: _propTypes["default"].func,
|
|
135
|
+
/**
|
|
136
|
+
* CSS class name to pass to the
|
|
137
|
+
* {@link limestone/ContextualPopupDecorator.ContextualPopup|ContextualPopup}.
|
|
138
|
+
*
|
|
139
|
+
* This is commonly used to set width and height of the popup.
|
|
140
|
+
*
|
|
141
|
+
* @type {String}
|
|
142
|
+
* @public
|
|
143
|
+
*/
|
|
144
|
+
popupClassName: _propTypes["default"].string,
|
|
145
|
+
/**
|
|
146
|
+
* An object containing properties to be passed to popup component.
|
|
147
|
+
*
|
|
148
|
+
* @type {Object}
|
|
149
|
+
* @public
|
|
150
|
+
*/
|
|
151
|
+
popupProps: _propTypes["default"].object,
|
|
152
|
+
/**
|
|
153
|
+
* Width of the Popup component.
|
|
154
|
+
*
|
|
155
|
+
* When `'auto'` the popup will match the activator's width when `direction` is
|
|
156
|
+
* `'below'` or `'above'` or a width specified in `popupClassName`.
|
|
157
|
+
*
|
|
158
|
+
* @type {('auto'|'large'|'small')}
|
|
159
|
+
* @default 'auto'
|
|
160
|
+
* @private
|
|
161
|
+
*/
|
|
162
|
+
popupWidth: _propTypes["default"].oneOf(['auto', 'large', 'small']),
|
|
163
|
+
/**
|
|
164
|
+
* Set the type of scrim to use
|
|
165
|
+
*
|
|
166
|
+
* @type {('holepunch'|'translucent'|'transparent'|'none')}
|
|
167
|
+
* @default 'holepunch'
|
|
168
|
+
* @private
|
|
169
|
+
*/
|
|
170
|
+
scrimType: _propTypes["default"].oneOf(['holepunch', 'translucent', 'transparent', 'none']),
|
|
171
|
+
/**
|
|
172
|
+
* Restricts or prioritizes spotlight navigation.
|
|
173
|
+
*
|
|
174
|
+
* Allowed values are:
|
|
175
|
+
* * `'none'` - Spotlight can move freely within and beyond the popup
|
|
176
|
+
* * `'self-first'` - Spotlight should prefer components within the popup over
|
|
177
|
+
* components beyond the popup, or
|
|
178
|
+
* * `'self-only'` - Spotlight can only be set within the popup
|
|
179
|
+
*
|
|
180
|
+
* @type {('none'|'self-first'|'self-only')}
|
|
181
|
+
* @default 'self-only'
|
|
182
|
+
* @public
|
|
183
|
+
*/
|
|
184
|
+
spotlightRestrict: _propTypes["default"].oneOf(['none', 'self-first', 'self-only'])
|
|
185
|
+
},
|
|
186
|
+
defaultProps: {
|
|
187
|
+
direction: 'below right',
|
|
188
|
+
offset: 'overlap',
|
|
189
|
+
popupWidth: 'auto',
|
|
190
|
+
scrimType: 'holepunch',
|
|
191
|
+
spotlightRestrict: 'self-only'
|
|
192
|
+
},
|
|
193
|
+
handlers: {
|
|
194
|
+
onOpen: (0, _handle.handle)((0, _handle.forward)('onClick'), (0, _handle.forProp)('open', false), (0, _handle.forward)('onOpen'))
|
|
195
|
+
},
|
|
196
|
+
styles: {
|
|
197
|
+
css: _ContextualMenuDecoratorModule["default"]
|
|
198
|
+
},
|
|
199
|
+
computed: {
|
|
200
|
+
// expect we'll be able to drop this when we add the private popupComponent
|
|
201
|
+
// implementation with the Repeater for the items since the popup class could be set
|
|
202
|
+
// on the component by itself
|
|
203
|
+
popupClassName: function popupClassName(_ref2) {
|
|
204
|
+
var menuItems = _ref2.menuItems,
|
|
205
|
+
popupWidth = _ref2.popupWidth,
|
|
206
|
+
_popupClassName = _ref2.popupClassName,
|
|
207
|
+
styler = _ref2.styler;
|
|
208
|
+
var sizeClass = popupWidth !== 'auto' && popupWidth;
|
|
209
|
+
var verticalScrollbar = menuItems.length > MAX_VISIBLE_MENU_ITEMS;
|
|
210
|
+
return styler.join('popup', 'container', _popupClassName, sizeClass, verticalScrollbar ? 'verticalScrollbar' : null);
|
|
211
|
+
},
|
|
212
|
+
popupComponent: function popupComponent(_ref3) {
|
|
213
|
+
var menuItems = _ref3.menuItems;
|
|
214
|
+
return menuItems && menuItems.length > MAX_VISIBLE_MENU_ITEMS ? ScrollingRepeater : _Repeater["default"];
|
|
215
|
+
},
|
|
216
|
+
popupProps: function popupProps(_ref4) {
|
|
217
|
+
var menuItems = _ref4.menuItems,
|
|
218
|
+
_popupProps = _ref4.popupProps;
|
|
219
|
+
return _objectSpread({
|
|
220
|
+
'aria-live': null,
|
|
221
|
+
children: menuItems,
|
|
222
|
+
childComponent: _Item["default"],
|
|
223
|
+
className: _ContextualMenuDecoratorModule["default"].innerContainer,
|
|
224
|
+
itemProps: {
|
|
225
|
+
className: _ContextualMenuDecoratorModule["default"].item,
|
|
226
|
+
size: 'small'
|
|
227
|
+
},
|
|
228
|
+
component: 'div',
|
|
229
|
+
role: null
|
|
230
|
+
}, _popupProps);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
render: function render(_ref5) {
|
|
234
|
+
var onOpen = _ref5.onOpen,
|
|
235
|
+
popupProps = _ref5.popupProps,
|
|
236
|
+
rest = _objectWithoutProperties(_ref5, _excluded2);
|
|
237
|
+
delete rest.menuItems;
|
|
238
|
+
delete rest.onOpen;
|
|
239
|
+
delete rest.popupWidth;
|
|
240
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, _objectSpread(_objectSpread({}, rest), {}, {
|
|
241
|
+
onClick: onOpen,
|
|
242
|
+
popupProps: popupProps
|
|
243
|
+
}));
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Wraps a component to display a contextual popup menu.
|
|
250
|
+
*
|
|
251
|
+
* @hoc
|
|
252
|
+
* @memberof limestone/ContextualMenuDecorator
|
|
253
|
+
* @mixes ui/Toggleable.Toggleable
|
|
254
|
+
* @mixes limestone/Skinnable.Skinnable
|
|
255
|
+
* @mixes limestone/ContextualPopupDecorator.ContextualPopupDecorator
|
|
256
|
+
* @public
|
|
257
|
+
*/
|
|
258
|
+
var ContextualMenuDecorator = exports.ContextualMenuDecorator = (0, _compose["default"])((0, _Toggleable["default"])({
|
|
259
|
+
activate: 'onOpen',
|
|
260
|
+
deactivate: 'onClose',
|
|
261
|
+
prop: 'open',
|
|
262
|
+
toggle: null
|
|
263
|
+
}), ContextualMenuDecoratorBase);
|
|
264
|
+
var _default = exports["default"] = ContextualMenuDecorator;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
// our convention is to use camelCase class name on the root node of the component. however, we do
|
|
3
|
+
// not have a way to set that class on ContextualPopupDecorator's root so we can't use it right now
|
|
4
|
+
// but keeping it around as a future note.
|
|
5
|
+
.contextualMenu {
|
|
6
|
+
.applySkins({
|
|
7
|
+
&.popup {
|
|
8
|
+
// add theme styles
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
*/
|
|
13
|
+
.popup {
|
|
14
|
+
max-height: 14.625rem;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
/*
|
|
17
|
+
// in order to override the default ContextualPopupDecorator's container padding style, we
|
|
18
|
+
// need to use an arbitrary additional CSS rule for precedence
|
|
19
|
+
*/
|
|
20
|
+
}
|
|
21
|
+
.popup.container {
|
|
22
|
+
min-width: 12.75rem;
|
|
23
|
+
padding: var(--primitive-spacing-36) 0;
|
|
24
|
+
}
|
|
25
|
+
.popup.container .innerContainer {
|
|
26
|
+
max-height: 13.125rem;
|
|
27
|
+
}
|
|
28
|
+
.popup.container.small {
|
|
29
|
+
width: 12.75rem;
|
|
30
|
+
}
|
|
31
|
+
.popup.container.large {
|
|
32
|
+
width: 20rem;
|
|
33
|
+
}
|
|
34
|
+
.popup.container .item {
|
|
35
|
+
margin-bottom: 0;
|
|
36
|
+
}
|
|
37
|
+
.popup.verticalScrollbar {
|
|
38
|
+
min-width: 13.25rem;
|
|
39
|
+
}
|
|
40
|
+
.popup.verticalScrollbar.large {
|
|
41
|
+
width: 20.5rem;
|
|
42
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
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 _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
7
|
+
var _ContextualMenuDecorator = require("../ContextualMenuDecorator");
|
|
8
|
+
var _Button = _interopRequireDefault(require("../../Button"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
11
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
12
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
13
|
+
var ContextualButton = (0, _ContextualMenuDecorator.ContextualMenuDecorator)(_Button["default"]);
|
|
14
|
+
var Root = (0, _FloatingLayer.FloatingLayerDecorator)('div');
|
|
15
|
+
var items = new Array(3).fill().map(function (i, index) {
|
|
16
|
+
return "Option ".concat(index + 1);
|
|
17
|
+
});
|
|
18
|
+
describe('ContextualMenuDecorator Specs', function () {
|
|
19
|
+
test('should render component into FloatingLayer if open', function () {
|
|
20
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
21
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
22
|
+
menuItems: items,
|
|
23
|
+
open: true,
|
|
24
|
+
children: "Hello"
|
|
25
|
+
})
|
|
26
|
+
}));
|
|
27
|
+
var contextualMenu = _react.screen.getByRole('list');
|
|
28
|
+
var expected = 'Option 1';
|
|
29
|
+
var actual = contextualMenu.children.item(0);
|
|
30
|
+
expect(actual).toHaveTextContent(expected);
|
|
31
|
+
});
|
|
32
|
+
test('should not render into FloatingLayer if not open', function () {
|
|
33
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
34
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
35
|
+
menuItems: items,
|
|
36
|
+
children: "Hello"
|
|
37
|
+
})
|
|
38
|
+
}));
|
|
39
|
+
var menu = _react.screen.queryByText('Option 1');
|
|
40
|
+
expect(menu).toBeNull();
|
|
41
|
+
});
|
|
42
|
+
test('should emit onClose event when clicking outside the contextual menu', /*#__PURE__*/_asyncToGenerator(function* () {
|
|
43
|
+
var handleClose = jest.fn();
|
|
44
|
+
var user = _userEvent["default"].setup();
|
|
45
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
46
|
+
"data-testid": "contextualMenu",
|
|
47
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
48
|
+
menuItems: items,
|
|
49
|
+
onClose: handleClose,
|
|
50
|
+
open: true,
|
|
51
|
+
children: "Hello"
|
|
52
|
+
})
|
|
53
|
+
}));
|
|
54
|
+
var floatingLayerScrim = _react.screen.getByTestId('contextualMenu').nextElementSibling.querySelector('.scrim');
|
|
55
|
+
yield user.click(floatingLayerScrim);
|
|
56
|
+
expect(handleClose).toHaveBeenCalled();
|
|
57
|
+
}));
|
|
58
|
+
test('should not close menu when clicking outside if noAutoDismiss is true', /*#__PURE__*/_asyncToGenerator(function* () {
|
|
59
|
+
var handleClose = jest.fn();
|
|
60
|
+
var user = _userEvent["default"].setup();
|
|
61
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
62
|
+
"data-testid": "contextualMenu",
|
|
63
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
64
|
+
menuItems: items,
|
|
65
|
+
noAutoDismiss: true,
|
|
66
|
+
onClose: handleClose,
|
|
67
|
+
open: true,
|
|
68
|
+
children: "Hello"
|
|
69
|
+
})
|
|
70
|
+
}));
|
|
71
|
+
var floatingLayerScrim = _react.screen.getByTestId('contextualMenu').nextElementSibling.querySelector('.scrim');
|
|
72
|
+
yield user.click(floatingLayerScrim);
|
|
73
|
+
expect(handleClose).not.toHaveBeenCalled();
|
|
74
|
+
}));
|
|
75
|
+
test('should have \'below right\' className when direction is set to \'below right\'', function () {
|
|
76
|
+
var handleClose = jest.fn();
|
|
77
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
78
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
79
|
+
direction: "below right",
|
|
80
|
+
menuItems: items,
|
|
81
|
+
onClose: handleClose,
|
|
82
|
+
open: true,
|
|
83
|
+
children: "Hello"
|
|
84
|
+
})
|
|
85
|
+
}));
|
|
86
|
+
var contextualMenu = _react.screen.getByRole('list');
|
|
87
|
+
var expected = 'below right';
|
|
88
|
+
var actual = contextualMenu.parentElement;
|
|
89
|
+
expect(actual).toHaveClass(expected);
|
|
90
|
+
});
|
|
91
|
+
test('should have offset \'none\' when offset is set to \'none\'', function () {
|
|
92
|
+
var handleClose = jest.fn();
|
|
93
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
94
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
95
|
+
menuItems: items,
|
|
96
|
+
offset: "none",
|
|
97
|
+
onClose: handleClose,
|
|
98
|
+
open: true,
|
|
99
|
+
children: "Hello"
|
|
100
|
+
})
|
|
101
|
+
}));
|
|
102
|
+
var contextualMenu = _react.screen.getByRole('list').parentElement.parentElement;
|
|
103
|
+
var expected = 'none';
|
|
104
|
+
expect(contextualMenu).toHaveAttribute('offset', expected);
|
|
105
|
+
});
|
|
106
|
+
test('should have \'large\' className when popupWidth is set to \'large\'', function () {
|
|
107
|
+
var handleClose = jest.fn();
|
|
108
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
109
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
110
|
+
menuItems: items,
|
|
111
|
+
onClose: handleClose,
|
|
112
|
+
open: true,
|
|
113
|
+
popupWidth: "large",
|
|
114
|
+
children: "Hello"
|
|
115
|
+
})
|
|
116
|
+
}));
|
|
117
|
+
var contextualMenu = _react.screen.getByRole('list').parentElement;
|
|
118
|
+
var expected = 'large';
|
|
119
|
+
expect(contextualMenu).toHaveClass(expected);
|
|
120
|
+
});
|
|
121
|
+
test('should wrap content in Scroller component if menuItem length exceeds MAX_VISIBLE_MENU_ITEMS', function () {
|
|
122
|
+
var moreItems = new Array(8).fill().map(function (i, index) {
|
|
123
|
+
return "Option ".concat(index + 1);
|
|
124
|
+
});
|
|
125
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
|
|
126
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualButton, {
|
|
127
|
+
menuItems: moreItems,
|
|
128
|
+
open: true,
|
|
129
|
+
children: "Hello"
|
|
130
|
+
})
|
|
131
|
+
}));
|
|
132
|
+
var scroller = _react.screen.getByRole('list').parentElement;
|
|
133
|
+
var expected = 'scroller';
|
|
134
|
+
expect(scroller).toHaveClass(expected);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.ContextualPopupBase = exports.ContextualPopup = void 0;
|
|
7
|
+
var _propTypes = _interopRequireDefault(require("@enact/core/internal/prop-types"));
|
|
8
|
+
var _kind = _interopRequireDefault(require("@enact/core/kind"));
|
|
9
|
+
var _propTypes2 = _interopRequireDefault(require("prop-types"));
|
|
10
|
+
var _Skinnable = _interopRequireDefault(require("../Skinnable"));
|
|
11
|
+
var _ContextualPopupModule = _interopRequireDefault(require("./ContextualPopup.module.css"));
|
|
12
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
+
var _excluded = ["arrowDirection", "arrowPosition", "className", "containerPosition", "containerRef", "children", "showArrow"];
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
15
|
+
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; }
|
|
16
|
+
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; }
|
|
17
|
+
function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); }
|
|
18
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
19
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
20
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
21
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
22
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
23
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
24
|
+
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; }
|
|
25
|
+
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; }
|
|
26
|
+
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; }
|
|
27
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
28
|
+
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); } /**
|
|
29
|
+
* An SVG arrow for {@link limestone/ContextualPopupDecorator/ContextualPopup.ContextualPopup}.
|
|
30
|
+
*
|
|
31
|
+
* @class ContextualPopupArrow
|
|
32
|
+
* @memberof limestone/ContextualPopupDecorator
|
|
33
|
+
* @ui
|
|
34
|
+
* @private
|
|
35
|
+
*/
|
|
36
|
+
var ContextualPopupArrow = (0, _kind["default"])({
|
|
37
|
+
name: 'ContextualPopupArrow',
|
|
38
|
+
propTypes: /** @lends limestone/ContextualPopupDecorator.ContextualPopupArrow.prototype */{
|
|
39
|
+
direction: _propTypes2["default"].oneOf(['above', 'below', 'left', 'right'])
|
|
40
|
+
},
|
|
41
|
+
defaultProps: {
|
|
42
|
+
direction: 'below'
|
|
43
|
+
},
|
|
44
|
+
styles: {
|
|
45
|
+
css: _ContextualPopupModule["default"],
|
|
46
|
+
className: 'arrow'
|
|
47
|
+
},
|
|
48
|
+
computed: {
|
|
49
|
+
className: function className(_ref) {
|
|
50
|
+
var direction = _ref.direction,
|
|
51
|
+
styler = _ref.styler;
|
|
52
|
+
return styler.append(direction, _ContextualPopupModule["default"].arrow);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
render: function render(props) {
|
|
56
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({}, props), {}, {
|
|
57
|
+
viewBox: "0 0 30 30",
|
|
58
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
|
|
59
|
+
d: "M0 20 L15 2 L30 20",
|
|
60
|
+
className: _ContextualPopupModule["default"].arrowFill
|
|
61
|
+
})
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
var ContextualPopupRoot = (0, _Skinnable["default"])('div');
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* A popup component used by
|
|
69
|
+
* {@link limestone/ContextualPopupDecorator.ContextualPopupDecorator|ContextualPopupDecorator} to
|
|
70
|
+
* wrap its {@link limestone/ContextualPopupDecorator.ContextualPopupDecorator.popupComponent|popupComponent}.
|
|
71
|
+
*
|
|
72
|
+
* `ContextualPopup` is usually not used directly but is made available for unique application use
|
|
73
|
+
* cases.
|
|
74
|
+
*
|
|
75
|
+
* @class ContextualPopup
|
|
76
|
+
* @memberof limestone/ContextualPopupDecorator
|
|
77
|
+
* @ui
|
|
78
|
+
* @public
|
|
79
|
+
*/
|
|
80
|
+
var ContextualPopupBase = exports.ContextualPopupBase = exports.ContextualPopup = (0, _kind["default"])({
|
|
81
|
+
name: 'ContextualPopup',
|
|
82
|
+
propTypes: /** @lends limestone/ContextualPopupDecorator.ContextualPopup.prototype */{
|
|
83
|
+
/**
|
|
84
|
+
* The contents of the popup.
|
|
85
|
+
*
|
|
86
|
+
* @type {Node}
|
|
87
|
+
* @required
|
|
88
|
+
* @public
|
|
89
|
+
*/
|
|
90
|
+
children: _propTypes2["default"].node.isRequired,
|
|
91
|
+
/**
|
|
92
|
+
* Style object for arrow position.
|
|
93
|
+
*
|
|
94
|
+
* @type {Object}
|
|
95
|
+
* @public
|
|
96
|
+
*/
|
|
97
|
+
arrowPosition: _propTypes2["default"].shape({
|
|
98
|
+
bottom: _propTypes2["default"].number,
|
|
99
|
+
left: _propTypes2["default"].number,
|
|
100
|
+
right: _propTypes2["default"].number,
|
|
101
|
+
top: _propTypes2["default"].number
|
|
102
|
+
}),
|
|
103
|
+
/**
|
|
104
|
+
* Style object for container position.
|
|
105
|
+
*
|
|
106
|
+
* @type {Object}
|
|
107
|
+
* @public
|
|
108
|
+
*/
|
|
109
|
+
containerPosition: _propTypes2["default"].shape({
|
|
110
|
+
bottom: _propTypes2["default"].number,
|
|
111
|
+
left: _propTypes2["default"].number,
|
|
112
|
+
right: _propTypes2["default"].number,
|
|
113
|
+
top: _propTypes2["default"].number,
|
|
114
|
+
width: _propTypes2["default"].number
|
|
115
|
+
}),
|
|
116
|
+
/**
|
|
117
|
+
* Called with the reference to the container node.
|
|
118
|
+
*
|
|
119
|
+
* @type {Object|Function}
|
|
120
|
+
* @public
|
|
121
|
+
*/
|
|
122
|
+
containerRef: _propTypes["default"].ref,
|
|
123
|
+
/**
|
|
124
|
+
* Direction of ContextualPopup.
|
|
125
|
+
*
|
|
126
|
+
* @type {('above'|'above center'|'above left'|'above right'|'below'|'below center'|'below left'|'below right'|'left middle'|'left top'|'left bottom'|'right middle'|'right top'|'right bottom')}
|
|
127
|
+
* @default 'below'
|
|
128
|
+
* @public
|
|
129
|
+
*/
|
|
130
|
+
direction: _propTypes2["default"].oneOf(['above', 'above center', 'above left', 'above right', 'below', 'below center', 'below left', 'below right', 'left middle', 'left top', 'left bottom', 'right middle', 'right top', 'right bottom']),
|
|
131
|
+
/**
|
|
132
|
+
* Offset from the activator to apply to the position of the popup.
|
|
133
|
+
*
|
|
134
|
+
* @type {('none'|'overlap'|'small'|'large')}
|
|
135
|
+
* @default 'small'
|
|
136
|
+
* @public
|
|
137
|
+
*/
|
|
138
|
+
offset: _propTypes2["default"].oneOf(['none', 'overlap', 'small', 'large']),
|
|
139
|
+
/**
|
|
140
|
+
* Shows the arrow.
|
|
141
|
+
*
|
|
142
|
+
* @type {Boolean}
|
|
143
|
+
* @default false
|
|
144
|
+
* @public
|
|
145
|
+
*/
|
|
146
|
+
showArrow: _propTypes2["default"].bool
|
|
147
|
+
},
|
|
148
|
+
defaultProps: {
|
|
149
|
+
direction: 'below center',
|
|
150
|
+
offset: 'small'
|
|
151
|
+
},
|
|
152
|
+
styles: {
|
|
153
|
+
css: _ContextualPopupModule["default"],
|
|
154
|
+
className: 'container'
|
|
155
|
+
},
|
|
156
|
+
computed: {
|
|
157
|
+
arrowDirection: function arrowDirection(_ref2) {
|
|
158
|
+
var direction = _ref2.direction;
|
|
159
|
+
var _direction$split = direction.split(' '),
|
|
160
|
+
_direction$split2 = _slicedToArray(_direction$split, 1),
|
|
161
|
+
arrowDirection = _direction$split2[0];
|
|
162
|
+
return arrowDirection;
|
|
163
|
+
},
|
|
164
|
+
className: function className(_ref3) {
|
|
165
|
+
var direction = _ref3.direction,
|
|
166
|
+
offset = _ref3.offset,
|
|
167
|
+
styler = _ref3.styler;
|
|
168
|
+
return styler.append({
|
|
169
|
+
fixedSize: direction === 'above' || direction === 'below'
|
|
170
|
+
}, direction.split(' '), offset, _ContextualPopupModule["default"].outline);
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
render: function render(_ref4) {
|
|
174
|
+
var arrowDirection = _ref4.arrowDirection,
|
|
175
|
+
arrowPosition = _ref4.arrowPosition,
|
|
176
|
+
className = _ref4.className,
|
|
177
|
+
containerPosition = _ref4.containerPosition,
|
|
178
|
+
containerRef = _ref4.containerRef,
|
|
179
|
+
children = _ref4.children,
|
|
180
|
+
showArrow = _ref4.showArrow,
|
|
181
|
+
rest = _objectWithoutProperties(_ref4, _excluded);
|
|
182
|
+
delete rest.direction;
|
|
183
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(ContextualPopupRoot, _objectSpread(_objectSpread({
|
|
184
|
+
"aria-live": "off",
|
|
185
|
+
role: "alert"
|
|
186
|
+
}, rest), {}, {
|
|
187
|
+
className: _ContextualPopupModule["default"].contextualPopup,
|
|
188
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
189
|
+
className: className,
|
|
190
|
+
style: containerPosition,
|
|
191
|
+
ref: containerRef,
|
|
192
|
+
children: children
|
|
193
|
+
}), showArrow ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ContextualPopupArrow, {
|
|
194
|
+
direction: arrowDirection,
|
|
195
|
+
style: arrowPosition
|
|
196
|
+
}) : null]
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
var _default = exports["default"] = ContextualPopupBase;
|