@jotforminc/dnd-builder 3.1.0 → 3.2.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/CHANGELOG.md +25 -0
- package/index.d.ts +428 -0
- package/lib/cjs/assets/search.svg.js +5 -2
- package/lib/cjs/assets/search.svg.js.map +1 -1
- package/lib/cjs/assets/svg/all_slides.svg.js +9 -29
- package/lib/cjs/assets/svg/all_slides.svg.js.map +1 -1
- package/lib/cjs/assets/svg/close.svg.js +4 -2
- package/lib/cjs/assets/svg/close.svg.js.map +1 -1
- package/lib/cjs/assets/svg/customize.svg.js +4 -2
- package/lib/cjs/assets/svg/customize.svg.js.map +1 -1
- package/lib/cjs/assets/svg/duplicate.svg.js +5 -2
- package/lib/cjs/assets/svg/duplicate.svg.js.map +1 -1
- package/lib/cjs/assets/svg/fit_screen.svg.js +7 -7
- package/lib/cjs/assets/svg/heart_rating.svg.js +5 -3
- package/lib/cjs/assets/svg/heart_rating.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-down-left.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-down-left.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-down-right.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-down-right.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-down.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-down.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-left.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-left.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-right.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-right.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-up-left.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-up-left.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-up-right.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-arrow-up-right.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-down-circle.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-down-circle.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-left-circle.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-left-circle.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-right-circle.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-right-circle.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-up-circle.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-caret-up-circle.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-cloud.svg.js +2 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-download.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-download.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-eye.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-eye.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-folder.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-folder.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-heart.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-heart.svg.js.map +1 -1
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-home.svg.js +4 -2
- package/lib/cjs/assets/svg/icon-selector/jfc_icon_solid-home.svg.js.map +1 -1
- package/lib/cjs/assets/svg/minus.svg.js +6 -9
- package/lib/cjs/assets/svg/minus.svg.js.map +1 -1
- package/lib/cjs/assets/svg/page-actions/duplicate_line.svg.js +5 -2
- package/lib/cjs/assets/svg/page-actions/duplicate_line.svg.js.map +1 -1
- package/lib/cjs/assets/svg/page-actions/trash_line.svg.js +5 -2
- package/lib/cjs/assets/svg/page-actions/trash_line.svg.js.map +1 -1
- package/lib/cjs/assets/svg/page_settings.svg.js +4 -4
- package/lib/cjs/assets/svg/plus.svg.js +5 -2
- package/lib/cjs/assets/svg/plus.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/attachment.svg.js +4 -2
- package/lib/cjs/assets/svg/presentation/attachment.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/download.svg.js +5 -2
- package/lib/cjs/assets/svg/presentation/download.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/enter_fullscreen.svg.js +8 -12
- package/lib/cjs/assets/svg/presentation/enter_fullscreen.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/exit_fullscreen.svg.js +8 -12
- package/lib/cjs/assets/svg/presentation/exit_fullscreen.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/eye.svg.js +6 -5
- package/lib/cjs/assets/svg/presentation/eye.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/key.svg.js +5 -3
- package/lib/cjs/assets/svg/presentation/key.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/pause.svg.js +4 -2
- package/lib/cjs/assets/svg/presentation/pause.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/pen.svg.js +4 -2
- package/lib/cjs/assets/svg/presentation/pen.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/play.svg.js +5 -3
- package/lib/cjs/assets/svg/presentation/play.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/print.svg.js +5 -2
- package/lib/cjs/assets/svg/presentation/print.svg.js.map +1 -1
- package/lib/cjs/assets/svg/presentation/share.svg.js +5 -2
- package/lib/cjs/assets/svg/presentation/share.svg.js.map +1 -1
- package/lib/cjs/assets/svg/rotate.svg.js +5 -2
- package/lib/cjs/assets/svg/rotate.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/align_center.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/align_center.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/align_left.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/align_left.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/align_right.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/align_right.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/drag.svg.js +7 -26
- package/lib/cjs/assets/svg/settings/drag.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/ellipse.svg.js +6 -5
- package/lib/cjs/assets/svg/settings/ellipse.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/font_bold.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/font_bold.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/font_italic.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/font_italic.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/font_underline.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/font_underline.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/line.svg.js +8 -10
- package/lib/cjs/assets/svg/settings/line.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/lock.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/lock.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/rectangle.svg.js +6 -4
- package/lib/cjs/assets/svg/settings/rectangle.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/star.svg.js +6 -4
- package/lib/cjs/assets/svg/settings/star.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/triangle.svg.js +6 -4
- package/lib/cjs/assets/svg/settings/triangle.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings/unlock.svg.js +5 -2
- package/lib/cjs/assets/svg/settings/unlock.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings.svg.js +3 -2
- package/lib/cjs/assets/svg/settings.svg.js.map +1 -1
- package/lib/cjs/assets/svg/settings_toggle.svg.js +7 -5
- package/lib/cjs/assets/svg/settings_toggle.svg.js.map +1 -1
- package/lib/cjs/assets/svg/slides.svg.js +8 -14
- package/lib/cjs/assets/svg/slides.svg.js.map +1 -1
- package/lib/cjs/assets/svg/star_rating.svg.js +5 -2
- package/lib/cjs/assets/svg/star_rating.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/email.svg.js +5 -2
- package/lib/cjs/assets/svg/toolbox/email.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/header.svg.js +5 -2
- package/lib/cjs/assets/svg/toolbox/header.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/icon.svg.js +6 -11
- package/lib/cjs/assets/svg/toolbox/icon.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/image.svg.js +7 -7
- package/lib/cjs/assets/svg/toolbox/label.svg.js +4 -2
- package/lib/cjs/assets/svg/toolbox/label.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/multiple_choice.svg.js +6 -5
- package/lib/cjs/assets/svg/toolbox/multiple_choice.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/shapes.svg.js +7 -10
- package/lib/cjs/assets/svg/toolbox/shapes.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/single_choice.svg.js +5 -2
- package/lib/cjs/assets/svg/toolbox/single_choice.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/star.svg.js +5 -2
- package/lib/cjs/assets/svg/toolbox/star.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/table.svg.js +5 -2
- package/lib/cjs/assets/svg/toolbox/table.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/text.svg.js +5 -2
- package/lib/cjs/assets/svg/toolbox/text.svg.js.map +1 -1
- package/lib/cjs/assets/svg/toolbox/text_element.svg.js +5 -2
- package/lib/cjs/assets/svg/toolbox/text_element.svg.js.map +1 -1
- package/lib/cjs/assets/svg/trash.svg.js +5 -2
- package/lib/cjs/assets/svg/trash.svg.js.map +1 -1
- package/lib/cjs/components/AlignmentGuides.js +28 -18
- package/lib/cjs/components/AlignmentGuides.js.map +1 -1
- package/lib/cjs/components/Builder/ContextMenu.js +4 -1
- package/lib/cjs/components/Builder/ContextMenu.js.map +1 -1
- package/lib/cjs/components/Builder/DraggableLayer.js +40 -0
- package/lib/cjs/components/Builder/DraggableLayer.js.map +1 -0
- package/lib/cjs/components/Builder/Element.js +7 -3
- package/lib/cjs/components/Builder/Element.js.map +1 -1
- package/lib/cjs/components/Builder/Page.js +58 -65
- package/lib/cjs/components/Builder/Page.js.map +1 -1
- package/lib/cjs/components/Builder/Scene.js +33 -255
- package/lib/cjs/components/Builder/Scene.js.map +1 -1
- package/lib/cjs/components/Builder/SearchInput.js +3 -1
- package/lib/cjs/components/Builder/SearchInput.js.map +1 -1
- package/lib/cjs/components/Builder/SelectionBox.js +48 -0
- package/lib/cjs/components/Builder/SelectionBox.js.map +1 -0
- package/lib/cjs/components/DraggableItem/DraggableItem.js +78 -135
- package/lib/cjs/components/DraggableItem/DraggableItem.js.map +1 -1
- package/lib/cjs/components/DraggableItem/DraggableItemActions.js +69 -29
- package/lib/cjs/components/DraggableItem/DraggableItemActions.js.map +1 -1
- package/lib/cjs/components/DraggableItem/DraggableItemLayer.js +96 -220
- package/lib/cjs/components/DraggableItem/DraggableItemLayer.js.map +1 -1
- package/lib/cjs/components/PageItemResizer.js +37 -43
- package/lib/cjs/components/PageItemResizer.js.map +1 -1
- package/lib/cjs/components/Panels/AllSlidesPanel/AllSlidesPanel.js +1 -3
- package/lib/cjs/components/Panels/AllSlidesPanel/AllSlidesPanel.js.map +1 -1
- package/lib/cjs/components/Panels/AllSlidesPanel/PageList.js +0 -6
- package/lib/cjs/components/Panels/AllSlidesPanel/PageList.js.map +1 -1
- package/lib/cjs/components/Panels/LeftPanel/LeftPanel.js +1 -4
- package/lib/cjs/components/Panels/LeftPanel/LeftPanel.js.map +1 -1
- package/lib/cjs/components/Panels/LeftPanel/LeftPanelOpener.js +6 -7
- package/lib/cjs/components/Panels/LeftPanel/LeftPanelOpener.js.map +1 -1
- package/lib/cjs/components/Panels/RightPanel/RightPanel.js +7 -7
- package/lib/cjs/components/Panels/RightPanel/RightPanel.js.map +1 -1
- package/lib/cjs/components/Panels/RightPanel/RightPanelToggler.js +9 -10
- package/lib/cjs/components/Panels/RightPanel/RightPanelToggler.js.map +1 -1
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanel.js +1 -3
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanel.js.map +1 -1
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanelToggler.js +8 -6
- package/lib/cjs/components/Panels/SlidesPanel/SlidesPanelToggler.js.map +1 -1
- package/lib/cjs/components/ReportItemsWrapper.js +5 -11
- package/lib/cjs/components/ReportItemsWrapper.js.map +1 -1
- package/lib/cjs/components/Settings/PageLayer/LayerDragOverlay.js +2 -4
- package/lib/cjs/components/Settings/PageLayer/LayerDragOverlay.js.map +1 -1
- package/lib/cjs/components/Settings/PageLayer/LayerItem.js +12 -7
- package/lib/cjs/components/Settings/PageLayer/LayerItem.js.map +1 -1
- package/lib/cjs/components/Settings/PageLayer/PageLayer.js +2 -4
- package/lib/cjs/components/Settings/PageLayer/PageLayer.js.map +1 -1
- package/lib/cjs/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js +3 -8
- package/lib/cjs/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js.map +1 -1
- package/lib/cjs/constants/texts.js +0 -1
- package/lib/cjs/constants/texts.js.map +1 -1
- package/lib/cjs/contexts/BuilderContext.js +47 -23
- package/lib/cjs/contexts/BuilderContext.js.map +1 -1
- package/lib/cjs/styles/_jfDarkTheme.scss +0 -5
- package/lib/cjs/styles/_jfPrint.scss +0 -4
- package/lib/cjs/styles/_jfReportsPages.scss +12 -3
- package/lib/cjs/styles/_jfReportsSVG.scss +6 -6
- package/lib/cjs/styles/_jfSearchInput.scss +0 -2
- package/lib/cjs/utils/functions.js +129 -57
- package/lib/cjs/utils/functions.js.map +1 -1
- package/lib/cjs/utils/hooks.js +37 -0
- package/lib/cjs/utils/hooks.js.map +1 -1
- package/lib/cjs/utils/useKeyboardActions.js +263 -0
- package/lib/cjs/utils/useKeyboardActions.js.map +1 -0
- package/lib/cjs/utils/useMarqueeSelection.js +156 -0
- package/lib/cjs/utils/useMarqueeSelection.js.map +1 -0
- package/lib/esm/assets/search.svg.js +5 -2
- package/lib/esm/assets/search.svg.js.map +1 -1
- package/lib/esm/assets/svg/all_slides.svg.js +9 -29
- package/lib/esm/assets/svg/all_slides.svg.js.map +1 -1
- package/lib/esm/assets/svg/close.svg.js +4 -2
- package/lib/esm/assets/svg/close.svg.js.map +1 -1
- package/lib/esm/assets/svg/customize.svg.js +4 -2
- package/lib/esm/assets/svg/customize.svg.js.map +1 -1
- package/lib/esm/assets/svg/duplicate.svg.js +5 -2
- package/lib/esm/assets/svg/duplicate.svg.js.map +1 -1
- package/lib/esm/assets/svg/fit_screen.svg.js +7 -7
- package/lib/esm/assets/svg/heart_rating.svg.js +5 -3
- package/lib/esm/assets/svg/heart_rating.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-down-left.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-down-left.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-down-right.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-down-right.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-down.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-down.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-left.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-left.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-right.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-right.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-up-left.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-up-left.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-up-right.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-arrow-up-right.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-down-circle.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-down-circle.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-left-circle.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-left-circle.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-right-circle.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-right-circle.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-up-circle.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-caret-up-circle.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-cloud.svg.js +2 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-download.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-download.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-eye.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-eye.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-folder.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-folder.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-heart.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-heart.svg.js.map +1 -1
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-home.svg.js +4 -2
- package/lib/esm/assets/svg/icon-selector/jfc_icon_solid-home.svg.js.map +1 -1
- package/lib/esm/assets/svg/minus.svg.js +6 -9
- package/lib/esm/assets/svg/minus.svg.js.map +1 -1
- package/lib/esm/assets/svg/page-actions/duplicate_line.svg.js +5 -2
- package/lib/esm/assets/svg/page-actions/duplicate_line.svg.js.map +1 -1
- package/lib/esm/assets/svg/page-actions/trash_line.svg.js +5 -2
- package/lib/esm/assets/svg/page-actions/trash_line.svg.js.map +1 -1
- package/lib/esm/assets/svg/page_settings.svg.js +4 -4
- package/lib/esm/assets/svg/plus.svg.js +5 -2
- package/lib/esm/assets/svg/plus.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/attachment.svg.js +4 -2
- package/lib/esm/assets/svg/presentation/attachment.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/download.svg.js +5 -2
- package/lib/esm/assets/svg/presentation/download.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/enter_fullscreen.svg.js +8 -12
- package/lib/esm/assets/svg/presentation/enter_fullscreen.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/exit_fullscreen.svg.js +8 -12
- package/lib/esm/assets/svg/presentation/exit_fullscreen.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/eye.svg.js +6 -5
- package/lib/esm/assets/svg/presentation/eye.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/key.svg.js +5 -3
- package/lib/esm/assets/svg/presentation/key.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/pause.svg.js +4 -2
- package/lib/esm/assets/svg/presentation/pause.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/pen.svg.js +4 -2
- package/lib/esm/assets/svg/presentation/pen.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/play.svg.js +5 -3
- package/lib/esm/assets/svg/presentation/play.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/print.svg.js +5 -2
- package/lib/esm/assets/svg/presentation/print.svg.js.map +1 -1
- package/lib/esm/assets/svg/presentation/share.svg.js +5 -2
- package/lib/esm/assets/svg/presentation/share.svg.js.map +1 -1
- package/lib/esm/assets/svg/rotate.svg.js +5 -2
- package/lib/esm/assets/svg/rotate.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/align_center.svg.js +5 -2
- package/lib/esm/assets/svg/settings/align_center.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/align_left.svg.js +5 -2
- package/lib/esm/assets/svg/settings/align_left.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/align_right.svg.js +5 -2
- package/lib/esm/assets/svg/settings/align_right.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/drag.svg.js +7 -26
- package/lib/esm/assets/svg/settings/drag.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/ellipse.svg.js +6 -5
- package/lib/esm/assets/svg/settings/ellipse.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/font_bold.svg.js +5 -2
- package/lib/esm/assets/svg/settings/font_bold.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/font_italic.svg.js +5 -2
- package/lib/esm/assets/svg/settings/font_italic.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/font_underline.svg.js +5 -2
- package/lib/esm/assets/svg/settings/font_underline.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/line.svg.js +8 -10
- package/lib/esm/assets/svg/settings/line.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/lock.svg.js +5 -2
- package/lib/esm/assets/svg/settings/lock.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/rectangle.svg.js +6 -4
- package/lib/esm/assets/svg/settings/rectangle.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/star.svg.js +6 -4
- package/lib/esm/assets/svg/settings/star.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/triangle.svg.js +6 -4
- package/lib/esm/assets/svg/settings/triangle.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings/unlock.svg.js +5 -2
- package/lib/esm/assets/svg/settings/unlock.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings.svg.js +3 -2
- package/lib/esm/assets/svg/settings.svg.js.map +1 -1
- package/lib/esm/assets/svg/settings_toggle.svg.js +7 -5
- package/lib/esm/assets/svg/settings_toggle.svg.js.map +1 -1
- package/lib/esm/assets/svg/slides.svg.js +8 -14
- package/lib/esm/assets/svg/slides.svg.js.map +1 -1
- package/lib/esm/assets/svg/star_rating.svg.js +5 -2
- package/lib/esm/assets/svg/star_rating.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/email.svg.js +5 -2
- package/lib/esm/assets/svg/toolbox/email.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/header.svg.js +5 -2
- package/lib/esm/assets/svg/toolbox/header.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/icon.svg.js +6 -11
- package/lib/esm/assets/svg/toolbox/icon.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/image.svg.js +7 -7
- package/lib/esm/assets/svg/toolbox/label.svg.js +4 -2
- package/lib/esm/assets/svg/toolbox/label.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/multiple_choice.svg.js +6 -5
- package/lib/esm/assets/svg/toolbox/multiple_choice.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/shapes.svg.js +7 -10
- package/lib/esm/assets/svg/toolbox/shapes.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/single_choice.svg.js +5 -2
- package/lib/esm/assets/svg/toolbox/single_choice.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/star.svg.js +5 -2
- package/lib/esm/assets/svg/toolbox/star.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/table.svg.js +5 -2
- package/lib/esm/assets/svg/toolbox/table.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/text.svg.js +5 -2
- package/lib/esm/assets/svg/toolbox/text.svg.js.map +1 -1
- package/lib/esm/assets/svg/toolbox/text_element.svg.js +5 -2
- package/lib/esm/assets/svg/toolbox/text_element.svg.js.map +1 -1
- package/lib/esm/assets/svg/trash.svg.js +5 -2
- package/lib/esm/assets/svg/trash.svg.js.map +1 -1
- package/lib/esm/components/AlignmentGuides.js +28 -18
- package/lib/esm/components/AlignmentGuides.js.map +1 -1
- package/lib/esm/components/Builder/ContextMenu.js +4 -1
- package/lib/esm/components/Builder/ContextMenu.js.map +1 -1
- package/lib/esm/components/Builder/DraggableLayer.js +34 -0
- package/lib/esm/components/Builder/DraggableLayer.js.map +1 -0
- package/lib/esm/components/Builder/Element.js +7 -3
- package/lib/esm/components/Builder/Element.js.map +1 -1
- package/lib/esm/components/Builder/Page.js +60 -67
- package/lib/esm/components/Builder/Page.js.map +1 -1
- package/lib/esm/components/Builder/Scene.js +35 -257
- package/lib/esm/components/Builder/Scene.js.map +1 -1
- package/lib/esm/components/Builder/SearchInput.js +3 -1
- package/lib/esm/components/Builder/SearchInput.js.map +1 -1
- package/lib/esm/components/Builder/SelectionBox.js +42 -0
- package/lib/esm/components/Builder/SelectionBox.js.map +1 -0
- package/lib/esm/components/DraggableItem/DraggableItem.js +80 -137
- package/lib/esm/components/DraggableItem/DraggableItem.js.map +1 -1
- package/lib/esm/components/DraggableItem/DraggableItemActions.js +72 -28
- package/lib/esm/components/DraggableItem/DraggableItemActions.js.map +1 -1
- package/lib/esm/components/DraggableItem/DraggableItemLayer.js +99 -222
- package/lib/esm/components/DraggableItem/DraggableItemLayer.js.map +1 -1
- package/lib/esm/components/PageItemResizer.js +38 -44
- package/lib/esm/components/PageItemResizer.js.map +1 -1
- package/lib/esm/components/Panels/AllSlidesPanel/AllSlidesPanel.js +2 -4
- package/lib/esm/components/Panels/AllSlidesPanel/AllSlidesPanel.js.map +1 -1
- package/lib/esm/components/Panels/AllSlidesPanel/PageList.js +0 -6
- package/lib/esm/components/Panels/AllSlidesPanel/PageList.js.map +1 -1
- package/lib/esm/components/Panels/LeftPanel/LeftPanel.js +3 -6
- package/lib/esm/components/Panels/LeftPanel/LeftPanel.js.map +1 -1
- package/lib/esm/components/Panels/LeftPanel/LeftPanelOpener.js +6 -7
- package/lib/esm/components/Panels/LeftPanel/LeftPanelOpener.js.map +1 -1
- package/lib/esm/components/Panels/RightPanel/RightPanel.js +7 -7
- package/lib/esm/components/Panels/RightPanel/RightPanel.js.map +1 -1
- package/lib/esm/components/Panels/RightPanel/RightPanelToggler.js +9 -10
- package/lib/esm/components/Panels/RightPanel/RightPanelToggler.js.map +1 -1
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanel.js +2 -4
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanel.js.map +1 -1
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanelToggler.js +8 -6
- package/lib/esm/components/Panels/SlidesPanel/SlidesPanelToggler.js.map +1 -1
- package/lib/esm/components/ReportItemsWrapper.js +5 -11
- package/lib/esm/components/ReportItemsWrapper.js.map +1 -1
- package/lib/esm/components/Settings/PageLayer/LayerDragOverlay.js +2 -4
- package/lib/esm/components/Settings/PageLayer/LayerDragOverlay.js.map +1 -1
- package/lib/esm/components/Settings/PageLayer/LayerItem.js +12 -7
- package/lib/esm/components/Settings/PageLayer/LayerItem.js.map +1 -1
- package/lib/esm/components/Settings/PageLayer/PageLayer.js +2 -4
- package/lib/esm/components/Settings/PageLayer/PageLayer.js.map +1 -1
- package/lib/esm/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js +3 -8
- package/lib/esm/components/TextEditor/CustomToolbar/CustomToolbarWrapper.js.map +1 -1
- package/lib/esm/constants/texts.js +0 -1
- package/lib/esm/constants/texts.js.map +1 -1
- package/lib/esm/contexts/BuilderContext.js +47 -23
- package/lib/esm/contexts/BuilderContext.js.map +1 -1
- package/lib/esm/styles/_jfDarkTheme.scss +0 -5
- package/lib/esm/styles/_jfPrint.scss +0 -4
- package/lib/esm/styles/_jfReportsPages.scss +12 -3
- package/lib/esm/styles/_jfReportsSVG.scss +6 -6
- package/lib/esm/styles/_jfSearchInput.scss +0 -2
- package/lib/esm/utils/functions.js +126 -56
- package/lib/esm/utils/functions.js.map +1 -1
- package/lib/esm/utils/hooks.js +37 -1
- package/lib/esm/utils/hooks.js.map +1 -1
- package/lib/esm/utils/useKeyboardActions.js +261 -0
- package/lib/esm/utils/useKeyboardActions.js.map +1 -0
- package/lib/esm/utils/useMarqueeSelection.js +154 -0
- package/lib/esm/utils/useMarqueeSelection.js.map +1 -0
- package/package.json +11 -7
package/lib/esm/utils/hooks.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import 'core-js/modules/es.array.find.js';
|
|
2
|
+
import 'core-js/modules/es.array.map.js';
|
|
2
3
|
import 'core-js/modules/es.object.keys.js';
|
|
3
4
|
import 'core-js/modules/es.object.to-string.js';
|
|
4
5
|
import 'core-js/modules/es.object.values.js';
|
|
@@ -11,6 +12,12 @@ import { usePropStore } from '../contexts/PropContext.js';
|
|
|
11
12
|
import { useBuilderStore } from '../contexts/BuilderContext.js';
|
|
12
13
|
import { usePresentationStore } from '../contexts/PresentationContext.js';
|
|
13
14
|
|
|
15
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
16
|
+
|
|
17
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
18
|
+
|
|
19
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
20
|
+
|
|
14
21
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
15
22
|
|
|
16
23
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -175,6 +182,35 @@ var usePageTransition = function usePageTransition(style, currentPage) {
|
|
|
175
182
|
}, [style, currentPage]);
|
|
176
183
|
return finalStyle;
|
|
177
184
|
};
|
|
185
|
+
var useSelectedElements = function useSelectedElements() {
|
|
186
|
+
var pages = usePropStore(function (state) {
|
|
187
|
+
return state.pages;
|
|
188
|
+
});
|
|
189
|
+
var activeElements = useBuilderStore(function (state) {
|
|
190
|
+
return state.activeElements;
|
|
191
|
+
});
|
|
192
|
+
var acceptedItems = usePropStore(function (state) {
|
|
193
|
+
return state.acceptedItems;
|
|
194
|
+
});
|
|
195
|
+
return useMemo(function () {
|
|
196
|
+
if (activeElements.length === 0) return [];
|
|
197
|
+
var items = activeElements.map(function (itemID) {
|
|
198
|
+
var foundItem = [];
|
|
199
|
+
pages.forEach(function (page) {
|
|
200
|
+
var item = page.items.find(function (el) {
|
|
201
|
+
return el.id === itemID;
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
if (item) {
|
|
205
|
+
foundItem = item;
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
var defItem = acceptedItems[foundItem.itemType] && acceptedItems[foundItem.itemType].defaultItem || {};
|
|
209
|
+
return _objectSpread(_objectSpread({}, defItem), foundItem);
|
|
210
|
+
});
|
|
211
|
+
return items;
|
|
212
|
+
}, [pages, activeElements, acceptedItems]);
|
|
213
|
+
};
|
|
178
214
|
|
|
179
|
-
export { useClickOutsideListener, useEventListener, useFitZoom, useFullscreenChange, usePageTransition, usePageVisibility, useTranslatedTexts };
|
|
215
|
+
export { useClickOutsideListener, useEventListener, useFitZoom, useFullscreenChange, usePageTransition, usePageVisibility, useSelectedElements, useTranslatedTexts };
|
|
180
216
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../../../src/utils/hooks.js"],"sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n useMemo,\n useCallback,\n} from 'react';\nimport { getZoomValue } from './functions';\nimport { SharingTextsModule } from '../constants/texts';\nimport { usePropStore } from '../contexts/PropContext';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePresentationStore } from '../contexts/PresentationContext';\n\nexport const useStateWithCallback = (initialState, callback) => {\n const [state, setState] = useState(initialState);\n\n useEffect(() => callback(state), [state, callback]);\n\n return [state, setState];\n};\n\nexport const useEventListener = (eventName, handler, element = global) => {\n const savedHandler = useRef();\n\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n useEffect(\n () => {\n const isSupported = element && element.addEventListener;\n if (!isSupported) return;\n\n const eventListener = event => savedHandler.current(event);\n element.addEventListener(eventName, eventListener);\n return () => {\n element.removeEventListener(eventName, eventListener);\n };\n },\n [eventName, element],\n );\n};\n\nexport const useInterval = (callback, delay) => {\n const savedCallback = useRef();\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n};\n\nexport const usePrevious = value => {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport const useFitZoom = () => {\n const settings = usePropStore(state => state.settings);\n const setZoom = useBuilderStore(state => state.setZoom);\n\n useEffect(() => {\n const newZoom = getZoomValue({\n limitZoom: true,\n settings: {\n reportLayoutHeight: settings.reportLayoutHeight,\n reportLayoutWidth: settings.reportLayoutWidth,\n },\n });\n setZoom(newZoom, settings.reportLayoutWidth);\n }, [\n settings.reportLayoutHeight,\n settings.reportLayoutWidth,\n setZoom,\n ]);\n};\n\nexport const usePageVisibility = (callback, pageCount, selectedPageIndex) => {\n const ratio = useRef({});\n const pageRefs = useRef([]);\n const observer = useMemo(() => new window.IntersectionObserver(entries => {\n entries.forEach(entry => {\n const order = entry.target.getAttribute('data-order');\n if (entry.intersectionRatio !== 0) {\n ratio.current[order] = entry.intersectionRatio;\n } else {\n delete ratio.current[order];\n }\n });\n callback(parseInt(\n Object.keys(ratio.current)\n .find(key => ratio.current[key] === Math.max(...Object.values(ratio.current))),\n 10,\n ));\n },\n {\n delay: 100,\n root: document.querySelector('.jfReport-viewport'),\n threshold: [0, 0.5, 1],\n }), [callback]);\n\n useEffect(() => {\n ratio.current = {};\n pageRefs.current = document.querySelectorAll('.jfReport-page');\n }, [pageCount]);\n\n useEffect(() => {\n if (selectedPageIndex === -1) {\n pageRefs.current.forEach(page => {\n observer.observe(page);\n });\n }\n\n return () => {\n pageRefs.current.forEach(page => {\n observer.unobserve(page);\n });\n };\n }, [selectedPageIndex, observer]);\n};\n\nexport const useFullscreenChange = (isFullscreen, fitToScreen) => {\n /**\n * All this is just to cover if the user exits fullscreen via ESC key :(\n */\n const onAnEventTrigger = usePropStore(state => state.onAnEventTrigger);\n const setIsFullscreen = usePresentationStore(state => state.setIsFullscreen);\n\n const onFullscreenChange = useCallback(() => {\n if (!(\n document.fullScreen\n || document.mozFullScreen\n || document.webkitIsFullScreen\n )) {\n onAnEventTrigger('clickedFullscreen');\n setIsFullscreen(false);\n fitToScreen(500);\n } else {\n setIsFullscreen(true);\n fitToScreen(600);\n }\n }, [fitToScreen, setIsFullscreen, onAnEventTrigger]);\n\n useEventListener('fullscreenchange', onFullscreenChange);\n useEventListener('webkitfullscreenchange', onFullscreenChange);\n useEventListener('mozfullscreenchange', onFullscreenChange);\n useEventListener('MSFullscreenChange', onFullscreenChange);\n};\n\nexport const useTranslatedTexts = () => {\n return useMemo(() => SharingTextsModule.Texts, []);\n};\n\nexport const useClickOutsideListener = (classes, conditionValue, onClose) => {\n const onClickOutsideForPanel = useCallback(({ target: { classList } }) => {\n const shouldClose = classes.some(c => classList.contains(c));\n if (shouldClose) {\n onClose();\n }\n }, [classes, onClose]);\n\n useEffect(() => {\n if (conditionValue) window.addEventListener('click', onClickOutsideForPanel, false);\n return () => window.removeEventListener('click', onClickOutsideForPanel, false);\n }, [conditionValue, onClickOutsideForPanel]);\n};\n\nexport const usePageTransition = (style, currentPage) => {\n const finalStyle = useMemo(() => {\n switch (style) {\n case 'verticalSlide':\n return { transform: `translateY(-${(currentPage * 100).toString()}%)` };\n case 'scaleAndFade':\n return {};\n case 'rotate':\n return { '-webkit-perspective': 1000 };\n case 'scaleAndSlide':\n case 'horizontalSlide':\n default:\n return { transform: `translateX(-${(currentPage * 100).toString()}%)` };\n }\n }, [style, currentPage]);\n\n return finalStyle;\n};\n"],"names":["useEventListener","eventName","handler","element","global","savedHandler","useRef","useEffect","current","isSupported","addEventListener","eventListener","event","removeEventListener","useFitZoom","settings","usePropStore","state","setZoom","useBuilderStore","newZoom","getZoomValue","limitZoom","reportLayoutHeight","reportLayoutWidth","usePageVisibility","callback","pageCount","selectedPageIndex","ratio","pageRefs","observer","useMemo","window","IntersectionObserver","entries","forEach","entry","order","target","getAttribute","intersectionRatio","parseInt","Object","keys","find","key","Math","max","values","delay","root","document","querySelector","threshold","querySelectorAll","page","observe","unobserve","useFullscreenChange","isFullscreen","fitToScreen","onAnEventTrigger","setIsFullscreen","usePresentationStore","onFullscreenChange","useCallback","fullScreen","mozFullScreen","webkitIsFullScreen","useTranslatedTexts","SharingTextsModule","Texts","useClickOutsideListener","classes","conditionValue","onClose","onClickOutsideForPanel","classList","shouldClose","some","c","contains","usePageTransition","style","currentPage","finalStyle","transform","toString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../../../src/utils/hooks.js"],"sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n useMemo,\n useCallback,\n} from 'react';\nimport { getZoomValue } from './functions';\nimport { SharingTextsModule } from '../constants/texts';\nimport { usePropStore } from '../contexts/PropContext';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePresentationStore } from '../contexts/PresentationContext';\n\nexport const useStateWithCallback = (initialState, callback) => {\n const [state, setState] = useState(initialState);\n\n useEffect(() => callback(state), [state, callback]);\n\n return [state, setState];\n};\n\nexport const useEventListener = (eventName, handler, element = global) => {\n const savedHandler = useRef();\n\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n useEffect(\n () => {\n const isSupported = element && element.addEventListener;\n if (!isSupported) return;\n\n const eventListener = event => savedHandler.current(event);\n element.addEventListener(eventName, eventListener);\n return () => {\n element.removeEventListener(eventName, eventListener);\n };\n },\n [eventName, element],\n );\n};\n\nexport const useInterval = (callback, delay) => {\n const savedCallback = useRef();\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n};\n\nexport const usePrevious = value => {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport const useFitZoom = () => {\n const settings = usePropStore(state => state.settings);\n const setZoom = useBuilderStore(state => state.setZoom);\n\n useEffect(() => {\n const newZoom = getZoomValue({\n limitZoom: true,\n settings: {\n reportLayoutHeight: settings.reportLayoutHeight,\n reportLayoutWidth: settings.reportLayoutWidth,\n },\n });\n setZoom(newZoom, settings.reportLayoutWidth);\n }, [\n settings.reportLayoutHeight,\n settings.reportLayoutWidth,\n setZoom,\n ]);\n};\n\nexport const usePageVisibility = (callback, pageCount, selectedPageIndex) => {\n const ratio = useRef({});\n const pageRefs = useRef([]);\n const observer = useMemo(() => new window.IntersectionObserver(entries => {\n entries.forEach(entry => {\n const order = entry.target.getAttribute('data-order');\n if (entry.intersectionRatio !== 0) {\n ratio.current[order] = entry.intersectionRatio;\n } else {\n delete ratio.current[order];\n }\n });\n callback(parseInt(\n Object.keys(ratio.current)\n .find(key => ratio.current[key] === Math.max(...Object.values(ratio.current))),\n 10,\n ));\n },\n {\n delay: 100,\n root: document.querySelector('.jfReport-viewport'),\n threshold: [0, 0.5, 1],\n }), [callback]);\n\n useEffect(() => {\n ratio.current = {};\n pageRefs.current = document.querySelectorAll('.jfReport-page');\n }, [pageCount]);\n\n useEffect(() => {\n if (selectedPageIndex === -1) {\n pageRefs.current.forEach(page => {\n observer.observe(page);\n });\n }\n\n return () => {\n pageRefs.current.forEach(page => {\n observer.unobserve(page);\n });\n };\n }, [selectedPageIndex, observer]);\n};\n\nexport const useFullscreenChange = (isFullscreen, fitToScreen) => {\n /**\n * All this is just to cover if the user exits fullscreen via ESC key :(\n */\n const onAnEventTrigger = usePropStore(state => state.onAnEventTrigger);\n const setIsFullscreen = usePresentationStore(state => state.setIsFullscreen);\n\n const onFullscreenChange = useCallback(() => {\n if (!(\n document.fullScreen\n || document.mozFullScreen\n || document.webkitIsFullScreen\n )) {\n onAnEventTrigger('clickedFullscreen');\n setIsFullscreen(false);\n fitToScreen(500);\n } else {\n setIsFullscreen(true);\n fitToScreen(600);\n }\n }, [fitToScreen, setIsFullscreen, onAnEventTrigger]);\n\n useEventListener('fullscreenchange', onFullscreenChange);\n useEventListener('webkitfullscreenchange', onFullscreenChange);\n useEventListener('mozfullscreenchange', onFullscreenChange);\n useEventListener('MSFullscreenChange', onFullscreenChange);\n};\n\nexport const useTranslatedTexts = () => {\n return useMemo(() => SharingTextsModule.Texts, []);\n};\n\nexport const useClickOutsideListener = (classes, conditionValue, onClose) => {\n const onClickOutsideForPanel = useCallback(({ target: { classList } }) => {\n const shouldClose = classes.some(c => classList.contains(c));\n if (shouldClose) {\n onClose();\n }\n }, [classes, onClose]);\n\n useEffect(() => {\n if (conditionValue) window.addEventListener('click', onClickOutsideForPanel, false);\n return () => window.removeEventListener('click', onClickOutsideForPanel, false);\n }, [conditionValue, onClickOutsideForPanel]);\n};\n\nexport const usePageTransition = (style, currentPage) => {\n const finalStyle = useMemo(() => {\n switch (style) {\n case 'verticalSlide':\n return { transform: `translateY(-${(currentPage * 100).toString()}%)` };\n case 'scaleAndFade':\n return {};\n case 'rotate':\n return { '-webkit-perspective': 1000 };\n case 'scaleAndSlide':\n case 'horizontalSlide':\n default:\n return { transform: `translateX(-${(currentPage * 100).toString()}%)` };\n }\n }, [style, currentPage]);\n\n return finalStyle;\n};\n\nexport const useSelectedElements = () => {\n const pages = usePropStore(state => state.pages);\n const activeElements = useBuilderStore(state => state.activeElements);\n const acceptedItems = usePropStore(state => state.acceptedItems);\n\n return useMemo(() => {\n if (activeElements.length === 0) return [];\n const items = activeElements.map(itemID => {\n let foundItem = [];\n pages.forEach(page => {\n const item = page.items.find(el => el.id === itemID);\n if (item) {\n foundItem = item;\n }\n });\n const defItem = (acceptedItems[foundItem.itemType] && acceptedItems[foundItem.itemType].defaultItem) || {};\n return { ...defItem, ...foundItem };\n });\n return items;\n }, [pages, activeElements, acceptedItems]);\n};\n"],"names":["useEventListener","eventName","handler","element","global","savedHandler","useRef","useEffect","current","isSupported","addEventListener","eventListener","event","removeEventListener","useFitZoom","settings","usePropStore","state","setZoom","useBuilderStore","newZoom","getZoomValue","limitZoom","reportLayoutHeight","reportLayoutWidth","usePageVisibility","callback","pageCount","selectedPageIndex","ratio","pageRefs","observer","useMemo","window","IntersectionObserver","entries","forEach","entry","order","target","getAttribute","intersectionRatio","parseInt","Object","keys","find","key","Math","max","values","delay","root","document","querySelector","threshold","querySelectorAll","page","observe","unobserve","useFullscreenChange","isFullscreen","fitToScreen","onAnEventTrigger","setIsFullscreen","usePresentationStore","onFullscreenChange","useCallback","fullScreen","mozFullScreen","webkitIsFullScreen","useTranslatedTexts","SharingTextsModule","Texts","useClickOutsideListener","classes","conditionValue","onClose","onClickOutsideForPanel","classList","shouldClose","some","c","contains","usePageTransition","style","currentPage","finalStyle","transform","toString","useSelectedElements","pages","activeElements","acceptedItems","length","items","map","itemID","foundItem","item","el","id","defItem","itemType","defaultItem"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqBaA,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,SAAD,EAAYC,OAAZ,EAA0C;AAAA,MAArBC,OAAqB,uEAAXC,MAAW;AACxE,MAAMC,YAAY,GAAGC,MAAM,EAA3B;AAEAC,EAAAA,SAAS,CAAC,YAAM;AACdF,IAAAA,YAAY,CAACG,OAAb,GAAuBN,OAAvB;AACD,GAFQ,EAEN,CAACA,OAAD,CAFM,CAAT;AAIAK,EAAAA,SAAS,CACP,YAAM;AACJ,QAAME,WAAW,GAAGN,OAAO,IAAIA,OAAO,CAACO,gBAAvC;AACA,QAAI,CAACD,WAAL,EAAkB;;AAElB,QAAME,aAAa,GAAG,SAAhBA,aAAgB,CAAAC,KAAK;AAAA,aAAIP,YAAY,CAACG,OAAb,CAAqBI,KAArB,CAAJ;AAAA,KAA3B;;AACAT,IAAAA,OAAO,CAACO,gBAAR,CAAyBT,SAAzB,EAAoCU,aAApC;AACA,WAAO,YAAM;AACXR,MAAAA,OAAO,CAACU,mBAAR,CAA4BZ,SAA5B,EAAuCU,aAAvC;AACD,KAFD;AAGD,GAVM,EAWP,CAACV,SAAD,EAAYE,OAAZ,CAXO,CAAT;AAaD;IA2BYW,UAAU,GAAG,SAAbA,UAAa,GAAM;AAC9B,MAAMC,QAAQ,GAAGC,YAAY,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAACF,QAAV;AAAA,GAAN,CAA7B;AACA,MAAMG,OAAO,GAAGC,eAAe,CAAC,UAAAF,KAAK;AAAA,WAAIA,KAAK,CAACC,OAAV;AAAA,GAAN,CAA/B;AAEAX,EAAAA,SAAS,CAAC,YAAM;AACd,QAAMa,OAAO,GAAGC,YAAY,CAAC;AAC3BC,MAAAA,SAAS,EAAE,IADgB;AAE3BP,MAAAA,QAAQ,EAAE;AACRQ,QAAAA,kBAAkB,EAAER,QAAQ,CAACQ,kBADrB;AAERC,QAAAA,iBAAiB,EAAET,QAAQ,CAACS;AAFpB;AAFiB,KAAD,CAA5B;AAOAN,IAAAA,OAAO,CAACE,OAAD,EAAUL,QAAQ,CAACS,iBAAnB,CAAP;AACD,GATQ,EASN,CACDT,QAAQ,CAACQ,kBADR,EAEDR,QAAQ,CAACS,iBAFR,EAGDN,OAHC,CATM,CAAT;AAcD;IAEYO,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,QAAD,EAAWC,SAAX,EAAsBC,iBAAtB,EAA4C;AAC3E,MAAMC,KAAK,GAAGvB,MAAM,CAAC,EAAD,CAApB;AACA,MAAMwB,QAAQ,GAAGxB,MAAM,CAAC,EAAD,CAAvB;AACA,MAAMyB,QAAQ,GAAGC,OAAO,CAAC;AAAA,WAAM,IAAIC,MAAM,CAACC,oBAAX,CAAgC,UAAAC,OAAO,EAAI;AACxEA,MAAAA,OAAO,CAACC,OAAR,CAAgB,UAAAC,KAAK,EAAI;AACvB,YAAMC,KAAK,GAAGD,KAAK,CAACE,MAAN,CAAaC,YAAb,CAA0B,YAA1B,CAAd;;AACA,YAAIH,KAAK,CAACI,iBAAN,KAA4B,CAAhC,EAAmC;AACjCZ,UAAAA,KAAK,CAACrB,OAAN,CAAc8B,KAAd,IAAuBD,KAAK,CAACI,iBAA7B;AACD,SAFD,MAEO;AACL,iBAAOZ,KAAK,CAACrB,OAAN,CAAc8B,KAAd,CAAP;AACD;AACF,OAPD;AAQAZ,MAAAA,QAAQ,CAACgB,QAAQ,CACfC,MAAM,CAACC,IAAP,CAAYf,KAAK,CAACrB,OAAlB,EACGqC,IADH,CACQ,UAAAC,GAAG;AAAA,eAAIjB,KAAK,CAACrB,OAAN,CAAcsC,GAAd,MAAuBC,IAAI,CAACC,GAAL,OAAAD,IAAI,qBAAQJ,MAAM,CAACM,MAAP,CAAcpB,KAAK,CAACrB,OAApB,CAAR,EAA/B;AAAA,OADX,CADe,EAGf,EAHe,CAAT,CAAR;AAKD,KAd8B,EAe/B;AACE0C,MAAAA,KAAK,EAAE,GADT;AAEEC,MAAAA,IAAI,EAAEC,QAAQ,CAACC,aAAT,CAAuB,oBAAvB,CAFR;AAGEC,MAAAA,SAAS,EAAE,CAAC,CAAD,EAAI,GAAJ,EAAS,CAAT;AAHb,KAf+B,CAAN;AAAA,GAAD,EAmBpB,CAAC5B,QAAD,CAnBoB,CAAxB;AAqBAnB,EAAAA,SAAS,CAAC,YAAM;AACdsB,IAAAA,KAAK,CAACrB,OAAN,GAAgB,EAAhB;AACAsB,IAAAA,QAAQ,CAACtB,OAAT,GAAmB4C,QAAQ,CAACG,gBAAT,CAA0B,gBAA1B,CAAnB;AACD,GAHQ,EAGN,CAAC5B,SAAD,CAHM,CAAT;AAKApB,EAAAA,SAAS,CAAC,YAAM;AACd,QAAIqB,iBAAiB,KAAK,CAAC,CAA3B,EAA8B;AAC5BE,MAAAA,QAAQ,CAACtB,OAAT,CAAiB4B,OAAjB,CAAyB,UAAAoB,IAAI,EAAI;AAC/BzB,QAAAA,QAAQ,CAAC0B,OAAT,CAAiBD,IAAjB;AACD,OAFD;AAGD;;AAED,WAAO,YAAM;AACX1B,MAAAA,QAAQ,CAACtB,OAAT,CAAiB4B,OAAjB,CAAyB,UAAAoB,IAAI,EAAI;AAC/BzB,QAAAA,QAAQ,CAAC2B,SAAT,CAAmBF,IAAnB;AACD,OAFD;AAGD,KAJD;AAKD,GAZQ,EAYN,CAAC5B,iBAAD,EAAoBG,QAApB,CAZM,CAAT;AAaD;IAEY4B,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,YAAD,EAAeC,WAAf,EAA+B;AAChE;AACF;AACA;AACE,MAAMC,gBAAgB,GAAG9C,YAAY,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAAC6C,gBAAV;AAAA,GAAN,CAArC;AACA,MAAMC,eAAe,GAAGC,oBAAoB,CAAC,UAAA/C,KAAK;AAAA,WAAIA,KAAK,CAAC8C,eAAV;AAAA,GAAN,CAA5C;AAEA,MAAME,kBAAkB,GAAGC,WAAW,CAAC,YAAM;AAC3C,QAAI,EACFd,QAAQ,CAACe,UAAT,IACGf,QAAQ,CAACgB,aADZ,IAEGhB,QAAQ,CAACiB,kBAHV,CAAJ,EAIG;AACDP,MAAAA,gBAAgB,CAAC,mBAAD,CAAhB;AACAC,MAAAA,eAAe,CAAC,KAAD,CAAf;AACAF,MAAAA,WAAW,CAAC,GAAD,CAAX;AACD,KARD,MAQO;AACLE,MAAAA,eAAe,CAAC,IAAD,CAAf;AACAF,MAAAA,WAAW,CAAC,GAAD,CAAX;AACD;AACF,GAbqC,EAanC,CAACA,WAAD,EAAcE,eAAd,EAA+BD,gBAA/B,CAbmC,CAAtC;AAeA9D,EAAAA,gBAAgB,CAAC,kBAAD,EAAqBiE,kBAArB,CAAhB;AACAjE,EAAAA,gBAAgB,CAAC,wBAAD,EAA2BiE,kBAA3B,CAAhB;AACAjE,EAAAA,gBAAgB,CAAC,qBAAD,EAAwBiE,kBAAxB,CAAhB;AACAjE,EAAAA,gBAAgB,CAAC,oBAAD,EAAuBiE,kBAAvB,CAAhB;AACD;IAEYK,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AACtC,SAAOtC,OAAO,CAAC;AAAA,WAAMuC,kBAAkB,CAACC,KAAzB;AAAA,GAAD,EAAiC,EAAjC,CAAd;AACD;IAEYC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACC,OAAD,EAAUC,cAAV,EAA0BC,OAA1B,EAAsC;AAC3E,MAAMC,sBAAsB,GAAGX,WAAW,CAAC,gBAA+B;AAAA,QAAlBY,SAAkB,QAA5BvC,MAA4B,CAAlBuC,SAAkB;AACxE,QAAMC,WAAW,GAAGL,OAAO,CAACM,IAAR,CAAa,UAAAC,CAAC;AAAA,aAAIH,SAAS,CAACI,QAAV,CAAmBD,CAAnB,CAAJ;AAAA,KAAd,CAApB;;AACA,QAAIF,WAAJ,EAAiB;AACfH,MAAAA,OAAO;AACR;AACF,GALyC,EAKvC,CAACF,OAAD,EAAUE,OAAV,CALuC,CAA1C;AAOArE,EAAAA,SAAS,CAAC,YAAM;AACd,QAAIoE,cAAJ,EAAoB1C,MAAM,CAACvB,gBAAP,CAAwB,OAAxB,EAAiCmE,sBAAjC,EAAyD,KAAzD;AACpB,WAAO;AAAA,aAAM5C,MAAM,CAACpB,mBAAP,CAA2B,OAA3B,EAAoCgE,sBAApC,EAA4D,KAA5D,CAAN;AAAA,KAAP;AACD,GAHQ,EAGN,CAACF,cAAD,EAAiBE,sBAAjB,CAHM,CAAT;AAID;IAEYM,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,KAAD,EAAQC,WAAR,EAAwB;AACvD,MAAMC,UAAU,GAAGtD,OAAO,CAAC,YAAM;AAC/B,YAAQoD,KAAR;AACA,WAAK,eAAL;AACE,eAAO;AAAEG,UAAAA,SAAS,wBAAiB,CAACF,WAAW,GAAG,GAAf,EAAoBG,QAApB,EAAjB;AAAX,SAAP;;AACF,WAAK,cAAL;AACE,eAAO,EAAP;;AACF,WAAK,QAAL;AACE,eAAO;AAAE,iCAAuB;AAAzB,SAAP;;AACF,WAAK,eAAL;AACA,WAAK,iBAAL;AACA;AACE,eAAO;AAAED,UAAAA,SAAS,wBAAiB,CAACF,WAAW,GAAG,GAAf,EAAoBG,QAApB,EAAjB;AAAX,SAAP;AAVF;AAYD,GAbyB,EAavB,CAACJ,KAAD,EAAQC,WAAR,CAbuB,CAA1B;AAeA,SAAOC,UAAP;AACD;IAEYG,mBAAmB,GAAG,SAAtBA,mBAAsB,GAAM;AACvC,MAAMC,KAAK,GAAG1E,YAAY,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAACyE,KAAV;AAAA,GAAN,CAA1B;AACA,MAAMC,cAAc,GAAGxE,eAAe,CAAC,UAAAF,KAAK;AAAA,WAAIA,KAAK,CAAC0E,cAAV;AAAA,GAAN,CAAtC;AACA,MAAMC,aAAa,GAAG5E,YAAY,CAAC,UAAAC,KAAK;AAAA,WAAIA,KAAK,CAAC2E,aAAV;AAAA,GAAN,CAAlC;AAEA,SAAO5D,OAAO,CAAC,YAAM;AACnB,QAAI2D,cAAc,CAACE,MAAf,KAA0B,CAA9B,EAAiC,OAAO,EAAP;AACjC,QAAMC,KAAK,GAAGH,cAAc,CAACI,GAAf,CAAmB,UAAAC,MAAM,EAAI;AACzC,UAAIC,SAAS,GAAG,EAAhB;AACAP,MAAAA,KAAK,CAACtD,OAAN,CAAc,UAAAoB,IAAI,EAAI;AACpB,YAAM0C,IAAI,GAAG1C,IAAI,CAACsC,KAAL,CAAWjD,IAAX,CAAgB,UAAAsD,EAAE;AAAA,iBAAIA,EAAE,CAACC,EAAH,KAAUJ,MAAd;AAAA,SAAlB,CAAb;;AACA,YAAIE,IAAJ,EAAU;AACRD,UAAAA,SAAS,GAAGC,IAAZ;AACD;AACF,OALD;AAMA,UAAMG,OAAO,GAAIT,aAAa,CAACK,SAAS,CAACK,QAAX,CAAb,IAAqCV,aAAa,CAACK,SAAS,CAACK,QAAX,CAAb,CAAkCC,WAAxE,IAAwF,EAAxG;AACA,6CAAYF,OAAZ,GAAwBJ,SAAxB;AACD,KAVa,CAAd;AAWA,WAAOH,KAAP;AACD,GAda,EAcX,CAACJ,KAAD,EAAQC,cAAR,EAAwBC,aAAxB,CAdW,CAAd;AAeD;;;;"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import 'core-js/modules/es.array.find.js';
|
|
2
|
+
import 'core-js/modules/es.array.find-index.js';
|
|
3
|
+
import 'core-js/modules/es.array.includes.js';
|
|
4
|
+
import 'core-js/modules/web.dom-collections.for-each.js';
|
|
5
|
+
import { useState, useRef } from 'react';
|
|
6
|
+
import { useBuilderStore } from '../contexts/BuilderContext.js';
|
|
7
|
+
import { usePropStore } from '../contexts/PropContext.js';
|
|
8
|
+
import { findItemById, getMostVisiblePage, getDimensions } from './functions.js';
|
|
9
|
+
import { useSelectedElements, useEventListener } from './hooks.js';
|
|
10
|
+
import { EVENT_IGNORED_ROLES } from '../constants/eventIgnoredRoles.js';
|
|
11
|
+
import generateId from './generateId.js';
|
|
12
|
+
|
|
13
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
14
|
+
|
|
15
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
16
|
+
|
|
17
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
18
|
+
|
|
19
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
20
|
+
|
|
21
|
+
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."); }
|
|
22
|
+
|
|
23
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
24
|
+
|
|
25
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
26
|
+
|
|
27
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
28
|
+
|
|
29
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
30
|
+
|
|
31
|
+
var useKeyboardActions = function useKeyboardActions() {
|
|
32
|
+
var _useState = useState(null),
|
|
33
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
34
|
+
itemToPaste = _useState2[0],
|
|
35
|
+
setItemToPaste = _useState2[1];
|
|
36
|
+
|
|
37
|
+
var keyDownCount = useRef(null);
|
|
38
|
+
var activeElements = useBuilderStore(function (state) {
|
|
39
|
+
return state.activeElements;
|
|
40
|
+
});
|
|
41
|
+
var isRightPanelOpen = useBuilderStore(function (state) {
|
|
42
|
+
return state.isRightPanelOpen;
|
|
43
|
+
});
|
|
44
|
+
var setActiveElements = useBuilderStore(function (state) {
|
|
45
|
+
return state.setActiveElements;
|
|
46
|
+
});
|
|
47
|
+
var setIsRightPanelOpen = useBuilderStore(function (state) {
|
|
48
|
+
return state.setIsRightPanelOpen;
|
|
49
|
+
});
|
|
50
|
+
var resetActiveElements = useBuilderStore(function (state) {
|
|
51
|
+
return state.resetActiveElements;
|
|
52
|
+
});
|
|
53
|
+
var pages = usePropStore(function (state) {
|
|
54
|
+
return state.pages;
|
|
55
|
+
});
|
|
56
|
+
var onItemAdd = usePropStore(function (state) {
|
|
57
|
+
return state.onItemAdd;
|
|
58
|
+
});
|
|
59
|
+
var onItemRemove = usePropStore(function (state) {
|
|
60
|
+
return state.onItemRemove;
|
|
61
|
+
});
|
|
62
|
+
var onItemChange = usePropStore(function (state) {
|
|
63
|
+
return state.onItemChange;
|
|
64
|
+
});
|
|
65
|
+
var onAnEventTrigger = usePropStore(function (state) {
|
|
66
|
+
return state.onAnEventTrigger;
|
|
67
|
+
});
|
|
68
|
+
var isMultipleItemSelected = activeElements.length > 1;
|
|
69
|
+
var foundItem = findItemById(activeElements.length ? activeElements[0] : null, pages);
|
|
70
|
+
var selectedItems = useSelectedElements();
|
|
71
|
+
|
|
72
|
+
var moveItemWithKeyboard = function moveItemWithKeyboard(event, direction, value) {
|
|
73
|
+
event.preventDefault();
|
|
74
|
+
selectedItems.forEach(function (item) {
|
|
75
|
+
var _objectSpread2;
|
|
76
|
+
|
|
77
|
+
if (item.isLocked) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
onItemChange({
|
|
82
|
+
id: item.id
|
|
83
|
+
}, _objectSpread(_objectSpread({}, getDimensions(item)), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, direction, item[direction] + value), _defineProperty(_objectSpread2, "pageID", item.pageID), _objectSpread2)));
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
var selectNextOrPrevElement = function selectNextOrPrevElement(event, deletedItem) {
|
|
88
|
+
if (event.preventDefault) event.preventDefault();
|
|
89
|
+
var referenceItem = deletedItem ? deletedItem : foundItem;
|
|
90
|
+
var page = pages.find(function (_page) {
|
|
91
|
+
return _page.id === referenceItem.pageID;
|
|
92
|
+
});
|
|
93
|
+
if (!page || page && !page.items.length) return resetActiveElements();
|
|
94
|
+
var items = page.items;
|
|
95
|
+
var currentIndex = items.findIndex(function (item) {
|
|
96
|
+
return item.id === referenceItem.id;
|
|
97
|
+
}); // Pages are not updated in time so here is an unnecessary check
|
|
98
|
+
|
|
99
|
+
if (items.length === 1 && deletedItem) {
|
|
100
|
+
return resetActiveElements();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (event.shiftKey) {
|
|
104
|
+
if (items[currentIndex - 1]) setActiveElements(items[currentIndex - 1].id);else setActiveElements(items[items.length - 1].id);
|
|
105
|
+
} else if (items[currentIndex + 1]) {
|
|
106
|
+
setActiveElements(items[currentIndex + 1].id);
|
|
107
|
+
} else setActiveElements(items[0].id);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
var onItemRemoveFromPage = function onItemRemoveFromPage(e) {
|
|
111
|
+
// Firefox updates browser history on backspace
|
|
112
|
+
e.preventDefault();
|
|
113
|
+
if (isMultipleItemSelected) return;
|
|
114
|
+
|
|
115
|
+
if (foundItem.isLocked) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
resetActiveElements();
|
|
120
|
+
onItemRemove(foundItem);
|
|
121
|
+
selectNextOrPrevElement({
|
|
122
|
+
shiftKey: false
|
|
123
|
+
}, foundItem);
|
|
124
|
+
onAnEventTrigger('removeItem', foundItem.itemType);
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
var handlePaste = function handlePaste() {
|
|
128
|
+
if (isMultipleItemSelected) return;
|
|
129
|
+
var itemID = generateId();
|
|
130
|
+
var pageID = getMostVisiblePage(true);
|
|
131
|
+
var offset = itemToPaste.pageID === pageID ? 50 : 0;
|
|
132
|
+
|
|
133
|
+
var item = _objectSpread(_objectSpread({}, itemToPaste), {}, {
|
|
134
|
+
id: itemID,
|
|
135
|
+
left: itemToPaste.left + offset,
|
|
136
|
+
pageID: pageID,
|
|
137
|
+
top: itemToPaste.top + offset
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
onItemAdd(item);
|
|
141
|
+
onAnEventTrigger('pasteItem', itemToPaste.itemType);
|
|
142
|
+
setActiveElements(itemID); // set as last reference to paste
|
|
143
|
+
|
|
144
|
+
setItemToPaste(item);
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
var keyboardActions = function keyboardActions(event) {
|
|
148
|
+
var key = event.key,
|
|
149
|
+
metaKey = event.metaKey,
|
|
150
|
+
shiftKey = event.shiftKey;
|
|
151
|
+
|
|
152
|
+
if (metaKey) {
|
|
153
|
+
if (key === 'l') {
|
|
154
|
+
// Lock
|
|
155
|
+
if (isMultipleItemSelected) return;
|
|
156
|
+
event.preventDefault(); // Dont focus to URL bar
|
|
157
|
+
|
|
158
|
+
onAnEventTrigger(foundItem.isLocked ? 'unlockReportItem' : 'lockReportItem', foundItem.itemType);
|
|
159
|
+
onItemChange({
|
|
160
|
+
id: foundItem.id
|
|
161
|
+
}, {
|
|
162
|
+
isLocked: foundItem.isLocked ? false : true
|
|
163
|
+
});
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (key === 'c' || key === 'x') {
|
|
168
|
+
if (isMultipleItemSelected) return; // Copy or Cut
|
|
169
|
+
|
|
170
|
+
if (key === 'x') {
|
|
171
|
+
onItemRemoveFromPage(event);
|
|
172
|
+
onAnEventTrigger('cutItem', foundItem.itemType);
|
|
173
|
+
} else {
|
|
174
|
+
onAnEventTrigger('copyItem', foundItem.itemType);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
setItemToPaste(foundItem);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (foundItem && key === 'd') {
|
|
182
|
+
if (isMultipleItemSelected) return; // Duplicate
|
|
183
|
+
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
var itemID = generateId();
|
|
186
|
+
onItemAdd(_objectSpread(_objectSpread({}, foundItem), {}, {
|
|
187
|
+
id: itemID,
|
|
188
|
+
left: foundItem.left + 50,
|
|
189
|
+
top: foundItem.top + 50
|
|
190
|
+
}));
|
|
191
|
+
onAnEventTrigger('duplicateItem', foundItem.itemType);
|
|
192
|
+
setActiveElements(itemID);
|
|
193
|
+
|
|
194
|
+
if (!isRightPanelOpen) {
|
|
195
|
+
setIsRightPanelOpen(true);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
keyDownCount.current++;
|
|
203
|
+
var movementValue = shiftKey ? 10 : 1 + keyDownCount.current; // Others
|
|
204
|
+
|
|
205
|
+
switch (key) {
|
|
206
|
+
case 'Backspace':
|
|
207
|
+
return onItemRemoveFromPage(event);
|
|
208
|
+
|
|
209
|
+
case 'Delete':
|
|
210
|
+
return onItemRemoveFromPage(event);
|
|
211
|
+
|
|
212
|
+
case 'Escape':
|
|
213
|
+
return resetActiveElements();
|
|
214
|
+
|
|
215
|
+
case 'ArrowLeft':
|
|
216
|
+
return moveItemWithKeyboard(event, 'left', -movementValue);
|
|
217
|
+
|
|
218
|
+
case 'ArrowUp':
|
|
219
|
+
return moveItemWithKeyboard(event, 'top', -movementValue);
|
|
220
|
+
|
|
221
|
+
case 'ArrowRight':
|
|
222
|
+
return moveItemWithKeyboard(event, 'left', movementValue);
|
|
223
|
+
|
|
224
|
+
case 'ArrowDown':
|
|
225
|
+
return moveItemWithKeyboard(event, 'top', movementValue);
|
|
226
|
+
|
|
227
|
+
case 'Tab':
|
|
228
|
+
return selectNextOrPrevElement(event);
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
var shouldSuppressKeyboardEvent = function shouldSuppressKeyboardEvent(e) {
|
|
233
|
+
return EVENT_IGNORED_ROLES.some(function (role) {
|
|
234
|
+
return e.target.closest("[role=".concat(role, "]"));
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
var handleKeyboardEvent = function handleKeyboardEvent(e) {
|
|
239
|
+
var shouldPaste = itemToPaste && e.key === 'v' && e.metaKey;
|
|
240
|
+
|
|
241
|
+
if (shouldSuppressKeyboardEvent(e)) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (activeElements.length && !shouldPaste) {
|
|
246
|
+
var arrowKeyCodes = ['ArrowLeft', 'ArrowUp', 'ArrowDown', 'ArrowBottom'];
|
|
247
|
+
if (arrowKeyCodes.includes(e.key)) e.preventDefault();
|
|
248
|
+
keyboardActions(e);
|
|
249
|
+
} else if (shouldPaste) {
|
|
250
|
+
handlePaste();
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
useEventListener('keydown', handleKeyboardEvent);
|
|
255
|
+
useEventListener('keyup', function () {
|
|
256
|
+
keyDownCount.current = 0;
|
|
257
|
+
});
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
export default useKeyboardActions;
|
|
261
|
+
//# sourceMappingURL=useKeyboardActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardActions.js","sources":["../../../src/utils/useKeyboardActions.js"],"sourcesContent":["/* eslint-disable complexity */\nimport { useRef, useState } from 'react';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePropStore } from '../contexts/PropContext';\nimport { findItemById, getDimensions, getMostVisiblePage } from './functions';\nimport { useEventListener, useSelectedElements } from './hooks';\nimport { EVENT_IGNORED_ROLES } from '../constants/eventIgnoredRoles';\nimport generateId from './generateId';\n\nconst useKeyboardActions = () => {\n const [itemToPaste, setItemToPaste] = useState(null);\n const keyDownCount = useRef(null);\n\n const activeElements = useBuilderStore(state => state.activeElements);\n const isRightPanelOpen = useBuilderStore(state => state.isRightPanelOpen);\n const setActiveElements = useBuilderStore(state => state.setActiveElements);\n const setIsRightPanelOpen = useBuilderStore(state => state.setIsRightPanelOpen);\n const resetActiveElements = useBuilderStore(state => state.resetActiveElements);\n\n const pages = usePropStore(state => state.pages);\n const onItemAdd = usePropStore(state => state.onItemAdd);\n const onItemRemove = usePropStore(state => state.onItemRemove);\n const onItemChange = usePropStore(state => state.onItemChange);\n const onAnEventTrigger = usePropStore(state => state.onAnEventTrigger);\n\n const isMultipleItemSelected = activeElements.length > 1;\n\n const foundItem = findItemById(activeElements.length ? activeElements[0] : null, pages);\n\n const selectedItems = useSelectedElements();\n const moveItemWithKeyboard = (event, direction, value) => {\n event.preventDefault();\n selectedItems.forEach(item => {\n if (item.isLocked) {\n return false;\n }\n onItemChange(\n { id: item.id },\n {\n ...getDimensions(item),\n [direction]: item[direction] + value,\n pageID: item.pageID,\n },\n );\n });\n };\n\n const selectNextOrPrevElement = (event, deletedItem) => {\n if (event.preventDefault) event.preventDefault();\n const referenceItem = deletedItem ? deletedItem : foundItem;\n\n const page = pages.find(_page => _page.id === referenceItem.pageID);\n if (!page || (page && !page.items.length)) return resetActiveElements();\n const { items } = page;\n\n const currentIndex = items.findIndex(item => item.id === referenceItem.id);\n\n // Pages are not updated in time so here is an unnecessary check\n if (items.length === 1 && deletedItem) {\n return resetActiveElements();\n }\n\n if (event.shiftKey) {\n if (items[currentIndex - 1]) setActiveElements(items[currentIndex - 1].id);\n else setActiveElements(items[items.length - 1].id);\n } else if (items[currentIndex + 1]) {\n setActiveElements(items[currentIndex + 1].id);\n } else setActiveElements(items[0].id);\n };\n\n const onItemRemoveFromPage = e => {\n // Firefox updates browser history on backspace\n e.preventDefault();\n if (isMultipleItemSelected) return;\n if (foundItem.isLocked) {\n return false;\n }\n resetActiveElements();\n onItemRemove(foundItem);\n selectNextOrPrevElement({ shiftKey: false }, foundItem);\n onAnEventTrigger('removeItem', foundItem.itemType);\n };\n\n const handlePaste = () => {\n if (isMultipleItemSelected) return;\n const itemID = generateId();\n const pageID = getMostVisiblePage(true);\n const offset = itemToPaste.pageID === pageID ? 50 : 0;\n\n const item = {\n ...itemToPaste,\n id: itemID,\n left: itemToPaste.left + offset,\n pageID,\n top: itemToPaste.top + offset,\n };\n\n onItemAdd(item);\n\n onAnEventTrigger('pasteItem', itemToPaste.itemType);\n setActiveElements(itemID);\n // set as last reference to paste\n setItemToPaste(item);\n };\n\n const keyboardActions = event => {\n const {\n key,\n metaKey,\n shiftKey,\n } = event;\n\n if (metaKey) {\n if (key === 'l') {\n // Lock\n if (isMultipleItemSelected) return;\n event.preventDefault(); // Dont focus to URL bar\n onAnEventTrigger(\n foundItem.isLocked ? 'unlockReportItem' : 'lockReportItem',\n foundItem.itemType,\n );\n onItemChange(\n { id: foundItem.id },\n { isLocked: foundItem.isLocked ? false : true },\n );\n return;\n }\n\n if (key === 'c' || key === 'x') {\n if (isMultipleItemSelected) return;\n // Copy or Cut\n if (key === 'x') {\n onItemRemoveFromPage(event);\n onAnEventTrigger('cutItem', foundItem.itemType);\n } else {\n onAnEventTrigger('copyItem', foundItem.itemType);\n }\n\n setItemToPaste(foundItem);\n return;\n }\n\n if (foundItem && key === 'd') {\n if (isMultipleItemSelected) return;\n // Duplicate\n event.preventDefault();\n const itemID = generateId();\n onItemAdd({\n ...foundItem,\n id: itemID,\n left: foundItem.left + 50,\n top: foundItem.top + 50,\n });\n onAnEventTrigger('duplicateItem', foundItem.itemType);\n setActiveElements(itemID);\n if (!isRightPanelOpen) {\n setIsRightPanelOpen(true);\n }\n return;\n }\n }\n\n keyDownCount.current++;\n const movementValue = shiftKey ? 10 : 1 + keyDownCount.current;\n\n // Others\n switch (key) {\n case 'Backspace': return onItemRemoveFromPage(event);\n case 'Delete': return onItemRemoveFromPage(event);\n case 'Escape': return resetActiveElements();\n case 'ArrowLeft': return moveItemWithKeyboard(event, 'left', -movementValue);\n case 'ArrowUp': return moveItemWithKeyboard(event, 'top', -movementValue);\n case 'ArrowRight': return moveItemWithKeyboard(event, 'left', movementValue);\n case 'ArrowDown': return moveItemWithKeyboard(event, 'top', movementValue);\n case 'Tab': return selectNextOrPrevElement(event);\n default:\n }\n };\n\n const shouldSuppressKeyboardEvent = e => (\n EVENT_IGNORED_ROLES.some(role => e.target.closest(`[role=${role}]`))\n );\n\n const handleKeyboardEvent = e => {\n const shouldPaste = itemToPaste && e.key === 'v' && e.metaKey;\n\n if (shouldSuppressKeyboardEvent(e)) {\n return;\n }\n\n if (activeElements.length && !shouldPaste) {\n const arrowKeyCodes = ['ArrowLeft', 'ArrowUp', 'ArrowDown', 'ArrowBottom'];\n if (arrowKeyCodes.includes(e.key)) e.preventDefault();\n keyboardActions(e);\n } else if (shouldPaste) {\n handlePaste();\n }\n };\n\n useEventListener('keydown', handleKeyboardEvent);\n useEventListener('keyup', () => { keyDownCount.current = 0; });\n};\n\nexport default useKeyboardActions;\n"],"names":["useKeyboardActions","useState","itemToPaste","setItemToPaste","keyDownCount","useRef","activeElements","useBuilderStore","state","isRightPanelOpen","setActiveElements","setIsRightPanelOpen","resetActiveElements","pages","usePropStore","onItemAdd","onItemRemove","onItemChange","onAnEventTrigger","isMultipleItemSelected","length","foundItem","findItemById","selectedItems","useSelectedElements","moveItemWithKeyboard","event","direction","value","preventDefault","forEach","item","isLocked","id","getDimensions","pageID","selectNextOrPrevElement","deletedItem","referenceItem","page","find","_page","items","currentIndex","findIndex","shiftKey","onItemRemoveFromPage","e","itemType","handlePaste","itemID","generateId","getMostVisiblePage","offset","left","top","keyboardActions","key","metaKey","current","movementValue","shouldSuppressKeyboardEvent","EVENT_IGNORED_ROLES","some","role","target","closest","handleKeyboardEvent","shouldPaste","arrowKeyCodes","includes","useEventListener"],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import 'core-js/modules/es.array.find.js';
|
|
2
|
+
import 'core-js/modules/es.regexp.exec.js';
|
|
3
|
+
import 'core-js/modules/es.string.replace.js';
|
|
4
|
+
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
5
|
+
import { useBuilderStore } from '../contexts/BuilderContext.js';
|
|
6
|
+
import { usePropStore } from '../contexts/PropContext.js';
|
|
7
|
+
import { getItemsInSelectionBox } from './functions.js';
|
|
8
|
+
|
|
9
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
10
|
+
|
|
11
|
+
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."); }
|
|
12
|
+
|
|
13
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
14
|
+
|
|
15
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
16
|
+
|
|
17
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
18
|
+
|
|
19
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
20
|
+
var EXCLUDED_SELECTORS = ['.reportItem', '.reportItemWrapper', '.pageActions', '.jfReport-addSlide', '[role="button"]', 'button', '.contextMenu', '.reportItemResizer-wrapper'];
|
|
21
|
+
|
|
22
|
+
var useMarqueeSelection = function useMarqueeSelection(canvasRef) {
|
|
23
|
+
var _useState = useState(false),
|
|
24
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
25
|
+
isSelecting = _useState2[0],
|
|
26
|
+
setIsSelecting = _useState2[1];
|
|
27
|
+
|
|
28
|
+
var _useState3 = useState(null),
|
|
29
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
30
|
+
selectionBox = _useState4[0],
|
|
31
|
+
setSelectionBox = _useState4[1];
|
|
32
|
+
|
|
33
|
+
var _useState5 = useState(null),
|
|
34
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
35
|
+
selectionPageId = _useState6[0],
|
|
36
|
+
setSelectionPageId = _useState6[1];
|
|
37
|
+
|
|
38
|
+
var selectionStartRef = useRef(null);
|
|
39
|
+
var pages = usePropStore(function (state) {
|
|
40
|
+
return state.pages;
|
|
41
|
+
});
|
|
42
|
+
var zoom = useBuilderStore(function (state) {
|
|
43
|
+
return state.zoom;
|
|
44
|
+
});
|
|
45
|
+
var resetActiveElements = useBuilderStore(function (state) {
|
|
46
|
+
return state.resetActiveElements;
|
|
47
|
+
});
|
|
48
|
+
var setActiveElementsSelection = useBuilderStore(function (state) {
|
|
49
|
+
return state.setActiveElementsSelection;
|
|
50
|
+
});
|
|
51
|
+
var handleMouseDown = useCallback(function (e) {
|
|
52
|
+
if (e.button !== 0) return;
|
|
53
|
+
var target = e.target; // Don't start selection if clicking on an interactive element
|
|
54
|
+
|
|
55
|
+
if (EXCLUDED_SELECTORS.some(function (selector) {
|
|
56
|
+
return target.closest(selector);
|
|
57
|
+
})) {
|
|
58
|
+
return;
|
|
59
|
+
} // Find the page element from the click target
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
var pageElement = target.closest('.jfReport-page') || target.closest('[id*="presentation-page-"]');
|
|
63
|
+
if (!pageElement) return;
|
|
64
|
+
var pageId = pageElement.getAttribute('data-id') || pageElement.getAttribute('id').replace('presentation-page-', '');
|
|
65
|
+
if (!pageId) return;
|
|
66
|
+
e.preventDefault();
|
|
67
|
+
var pageRect = pageElement.getBoundingClientRect();
|
|
68
|
+
var startX = e.clientX - pageRect.left;
|
|
69
|
+
var startY = e.clientY - pageRect.top;
|
|
70
|
+
selectionStartRef.current = {
|
|
71
|
+
pageRect: pageRect,
|
|
72
|
+
startX: startX,
|
|
73
|
+
startY: startY
|
|
74
|
+
};
|
|
75
|
+
setSelectionPageId(pageId);
|
|
76
|
+
setSelectionBox({
|
|
77
|
+
endX: startX,
|
|
78
|
+
endY: startY,
|
|
79
|
+
startX: startX,
|
|
80
|
+
startY: startY
|
|
81
|
+
});
|
|
82
|
+
setIsSelecting(true);
|
|
83
|
+
resetActiveElements();
|
|
84
|
+
}, [resetActiveElements]);
|
|
85
|
+
var handleMouseMove = useCallback(function (e) {
|
|
86
|
+
if (!isSelecting || !selectionStartRef.current) return;
|
|
87
|
+
var _selectionStartRef$cu = selectionStartRef.current,
|
|
88
|
+
pageRect = _selectionStartRef$cu.pageRect,
|
|
89
|
+
startX = _selectionStartRef$cu.startX,
|
|
90
|
+
startY = _selectionStartRef$cu.startY;
|
|
91
|
+
var endX = Math.max(0, Math.min(e.clientX - pageRect.left, pageRect.width));
|
|
92
|
+
var endY = Math.max(0, Math.min(e.clientY - pageRect.top, pageRect.height));
|
|
93
|
+
setSelectionBox({
|
|
94
|
+
endX: endX,
|
|
95
|
+
endY: endY,
|
|
96
|
+
startX: startX,
|
|
97
|
+
startY: startY
|
|
98
|
+
});
|
|
99
|
+
}, [isSelecting]);
|
|
100
|
+
var handleMouseUp = useCallback(function () {
|
|
101
|
+
if (!isSelecting || !selectionBox || !selectionPageId) {
|
|
102
|
+
setIsSelecting(false);
|
|
103
|
+
setSelectionBox(null);
|
|
104
|
+
selectionStartRef.current = null;
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
var page = pages.find(function (p) {
|
|
109
|
+
return p.id === selectionPageId;
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
if (page !== null && page !== void 0 && page.items) {
|
|
113
|
+
var selectedItemIds = getItemsInSelectionBox(selectionBox, page.items, zoom);
|
|
114
|
+
|
|
115
|
+
if (selectedItemIds.length > 0) {
|
|
116
|
+
setActiveElementsSelection(selectedItemIds);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
setIsSelecting(false);
|
|
121
|
+
setSelectionBox(null);
|
|
122
|
+
setSelectionPageId(null);
|
|
123
|
+
selectionStartRef.current = null;
|
|
124
|
+
}, [isSelecting, selectionBox, selectionPageId, pages, zoom, setActiveElementsSelection]); // Canvas mouse down listener
|
|
125
|
+
|
|
126
|
+
useEffect(function () {
|
|
127
|
+
var canvas = canvasRef === null || canvasRef === void 0 ? void 0 : canvasRef.current;
|
|
128
|
+
if (!canvas) return;
|
|
129
|
+
canvas.addEventListener('mousedown', handleMouseDown);
|
|
130
|
+
return function () {
|
|
131
|
+
return canvas.removeEventListener('mousedown', handleMouseDown);
|
|
132
|
+
};
|
|
133
|
+
}, [canvasRef, handleMouseDown]); // Global mouse event listeners for drag
|
|
134
|
+
|
|
135
|
+
useEffect(function () {
|
|
136
|
+
if (!isSelecting) return;
|
|
137
|
+
document.body.style.cursor = 'crosshair';
|
|
138
|
+
document.addEventListener('mousemove', handleMouseMove);
|
|
139
|
+
document.addEventListener('mouseup', handleMouseUp);
|
|
140
|
+
return function () {
|
|
141
|
+
document.body.style.cursor = '';
|
|
142
|
+
document.removeEventListener('mousemove', handleMouseMove);
|
|
143
|
+
document.removeEventListener('mouseup', handleMouseUp);
|
|
144
|
+
};
|
|
145
|
+
}, [isSelecting, handleMouseMove, handleMouseUp]);
|
|
146
|
+
return {
|
|
147
|
+
isSelecting: isSelecting,
|
|
148
|
+
selectionBox: selectionBox,
|
|
149
|
+
selectionPageId: selectionPageId
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export default useMarqueeSelection;
|
|
154
|
+
//# sourceMappingURL=useMarqueeSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMarqueeSelection.js","sources":["../../../src/utils/useMarqueeSelection.js"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useBuilderStore } from '../contexts/BuilderContext';\nimport { usePropStore } from '../contexts/PropContext';\nimport { getItemsInSelectionBox } from './functions';\n\nconst EXCLUDED_SELECTORS = [\n '.reportItem',\n '.reportItemWrapper',\n '.pageActions',\n '.jfReport-addSlide',\n '[role=\"button\"]',\n 'button',\n '.contextMenu',\n '.reportItemResizer-wrapper',\n];\n\nconst useMarqueeSelection = canvasRef => {\n const [isSelecting, setIsSelecting] = useState(false);\n const [selectionBox, setSelectionBox] = useState(null);\n const [selectionPageId, setSelectionPageId] = useState(null);\n const selectionStartRef = useRef(null);\n\n const pages = usePropStore(state => state.pages);\n const zoom = useBuilderStore(state => state.zoom);\n const resetActiveElements = useBuilderStore(state => state.resetActiveElements);\n const setActiveElementsSelection = useBuilderStore(state => state.setActiveElementsSelection);\n\n const handleMouseDown = useCallback(e => {\n if (e.button !== 0) return;\n\n const { target } = e;\n\n // Don't start selection if clicking on an interactive element\n if (EXCLUDED_SELECTORS.some(selector => target.closest(selector))) {\n return;\n }\n\n // Find the page element from the click target\n const pageElement = target.closest('.jfReport-page')\n || target.closest('[id*=\"presentation-page-\"]');\n if (!pageElement) return;\n\n const pageId = pageElement.getAttribute('data-id')\n || pageElement.getAttribute('id').replace('presentation-page-', '');\n if (!pageId) return;\n\n e.preventDefault();\n\n const pageRect = pageElement.getBoundingClientRect();\n const startX = e.clientX - pageRect.left;\n const startY = e.clientY - pageRect.top;\n\n selectionStartRef.current = { pageRect, startX, startY };\n setSelectionPageId(pageId);\n setSelectionBox({\n endX: startX,\n endY: startY,\n startX,\n startY,\n });\n setIsSelecting(true);\n resetActiveElements();\n }, [resetActiveElements]);\n\n const handleMouseMove = useCallback(e => {\n if (!isSelecting || !selectionStartRef.current) return;\n\n const { pageRect, startX, startY } = selectionStartRef.current;\n const endX = Math.max(0, Math.min(e.clientX - pageRect.left, pageRect.width));\n const endY = Math.max(0, Math.min(e.clientY - pageRect.top, pageRect.height));\n\n setSelectionBox({\n endX,\n endY,\n startX,\n startY,\n });\n }, [isSelecting]);\n\n const handleMouseUp = useCallback(() => {\n if (!isSelecting || !selectionBox || !selectionPageId) {\n setIsSelecting(false);\n setSelectionBox(null);\n selectionStartRef.current = null;\n return;\n }\n\n const page = pages.find(p => p.id === selectionPageId);\n\n if (page?.items) {\n const selectedItemIds = getItemsInSelectionBox(selectionBox, page.items, zoom);\n if (selectedItemIds.length > 0) {\n setActiveElementsSelection(selectedItemIds);\n }\n }\n\n setIsSelecting(false);\n setSelectionBox(null);\n setSelectionPageId(null);\n selectionStartRef.current = null;\n }, [isSelecting, selectionBox, selectionPageId, pages, zoom, setActiveElementsSelection]);\n\n // Canvas mouse down listener\n useEffect(() => {\n const canvas = canvasRef?.current;\n if (!canvas) return;\n\n canvas.addEventListener('mousedown', handleMouseDown);\n return () => canvas.removeEventListener('mousedown', handleMouseDown);\n }, [canvasRef, handleMouseDown]);\n\n // Global mouse event listeners for drag\n useEffect(() => {\n if (!isSelecting) return;\n\n document.body.style.cursor = 'crosshair';\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n document.body.style.cursor = '';\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isSelecting, handleMouseMove, handleMouseUp]);\n\n return {\n isSelecting,\n selectionBox,\n selectionPageId,\n };\n};\n\nexport default useMarqueeSelection;\n"],"names":["EXCLUDED_SELECTORS","useMarqueeSelection","canvasRef","useState","isSelecting","setIsSelecting","selectionBox","setSelectionBox","selectionPageId","setSelectionPageId","selectionStartRef","useRef","pages","usePropStore","state","zoom","useBuilderStore","resetActiveElements","setActiveElementsSelection","handleMouseDown","useCallback","e","button","target","some","selector","closest","pageElement","pageId","getAttribute","replace","preventDefault","pageRect","getBoundingClientRect","startX","clientX","left","startY","clientY","top","current","endX","endY","handleMouseMove","Math","max","min","width","height","handleMouseUp","page","find","p","id","items","selectedItemIds","getItemsInSelectionBox","length","useEffect","canvas","addEventListener","removeEventListener","document","body","style","cursor"],"mappings":"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"}
|