@cratis/components 3.4.0 → 3.5.1
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/README.md +148 -98
- package/dist/esm/Canvas/Canvas.d.ts +67 -0
- package/dist/esm/Canvas/Canvas.d.ts.map +1 -0
- package/dist/esm/Canvas/Canvas.js +767 -0
- package/dist/esm/Canvas/Canvas.js.map +1 -0
- package/dist/esm/Canvas/CanvasControls.d.ts +32 -0
- package/dist/esm/Canvas/CanvasControls.d.ts.map +1 -0
- package/dist/esm/Canvas/CanvasControls.js +34 -0
- package/dist/esm/Canvas/CanvasControls.js.map +1 -0
- package/dist/esm/Canvas/CanvasItem.d.ts +10 -0
- package/dist/esm/Canvas/CanvasItem.d.ts.map +1 -0
- package/dist/esm/Canvas/CanvasItem.js +51 -0
- package/dist/esm/Canvas/CanvasItem.js.map +1 -0
- package/dist/esm/Canvas/CanvasMinimap.d.ts +25 -0
- package/dist/esm/Canvas/CanvasMinimap.d.ts.map +1 -0
- package/dist/esm/Canvas/CanvasMinimap.js +102 -0
- package/dist/esm/Canvas/CanvasMinimap.js.map +1 -0
- package/dist/esm/Canvas/CanvasOverlay.d.ts +6 -0
- package/dist/esm/Canvas/CanvasOverlay.d.ts.map +1 -0
- package/dist/esm/Canvas/CanvasOverlay.js +8 -0
- package/dist/esm/Canvas/CanvasOverlay.js.map +1 -0
- package/dist/esm/Canvas/canvasGesture.d.ts +8 -0
- package/dist/esm/Canvas/canvasGesture.d.ts.map +1 -0
- package/dist/esm/Canvas/canvasGesture.js +32 -0
- package/dist/esm/Canvas/canvasGesture.js.map +1 -0
- package/dist/esm/Canvas/canvasTransformActivity.d.ts +7 -0
- package/dist/esm/Canvas/canvasTransformActivity.d.ts.map +1 -0
- package/dist/esm/Canvas/canvasTransformActivity.js +22 -0
- package/dist/esm/Canvas/canvasTransformActivity.js.map +1 -0
- package/dist/esm/Canvas/glassAttributes.d.ts +4 -0
- package/dist/esm/Canvas/glassAttributes.d.ts.map +1 -0
- package/dist/esm/Canvas/glassAttributes.js +25 -0
- package/dist/esm/Canvas/glassAttributes.js.map +1 -0
- package/dist/esm/Canvas/index.d.ts +18 -0
- package/dist/esm/Canvas/index.d.ts.map +1 -0
- package/dist/esm/Canvas/index.js +38 -0
- package/dist/esm/Canvas/index.js.map +1 -0
- package/dist/esm/Canvas/isBackgroundPointerTarget.d.ts +2 -0
- package/dist/esm/Canvas/isBackgroundPointerTarget.d.ts.map +1 -0
- package/dist/esm/Canvas/isBackgroundPointerTarget.js +17 -0
- package/dist/esm/Canvas/isBackgroundPointerTarget.js.map +1 -0
- package/dist/esm/Canvas/isWithinScrollableContent.d.ts +11 -0
- package/dist/esm/Canvas/isWithinScrollableContent.d.ts.map +1 -0
- package/dist/esm/Canvas/isWithinScrollableContent.js +38 -0
- package/dist/esm/Canvas/isWithinScrollableContent.js.map +1 -0
- package/dist/esm/Canvas/panMomentum.d.ts +13 -0
- package/dist/esm/Canvas/panMomentum.d.ts.map +1 -0
- package/dist/esm/Canvas/panMomentum.js +41 -0
- package/dist/esm/Canvas/panMomentum.js.map +1 -0
- package/dist/esm/Canvas/pinchGesture.d.ts +16 -0
- package/dist/esm/Canvas/pinchGesture.d.ts.map +1 -0
- package/dist/esm/Canvas/pinchGesture.js +30 -0
- package/dist/esm/Canvas/pinchGesture.js.map +1 -0
- package/dist/esm/Canvas/selfSuspendingFrameLoop.d.ts +10 -0
- package/dist/esm/Canvas/selfSuspendingFrameLoop.d.ts.map +1 -0
- package/dist/esm/Canvas/selfSuspendingFrameLoop.js +33 -0
- package/dist/esm/Canvas/selfSuspendingFrameLoop.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/AnchoredOverlay.d.ts +13 -0
- package/dist/esm/Canvas/shapes/ChatBubble/AnchoredOverlay.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/AnchoredOverlay.js +61 -0
- package/dist/esm/Canvas/shapes/ChatBubble/AnchoredOverlay.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/PersonAvatarCircle.d.ts +20 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/PersonAvatarCircle.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/PersonAvatarCircle.js +27 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/PersonAvatarCircle.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getAvatarColor.d.ts +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getAvatarColor.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getAvatarColor.js +20 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getAvatarColor.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getInitials.d.ts +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getInitials.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getInitials.js +11 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/getInitials.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/index.d.ts +5 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/index.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/index.js +4 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Avatar/index.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Chat.d.ts +41 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Chat.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Chat.js +76 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Chat.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatAuthorKind.d.ts +5 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatAuthorKind.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatAuthorKind.js +14 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatAuthorKind.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatBubble.d.ts +18 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatBubble.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatBubble.js +89 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatBubble.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatComposer.d.ts +23 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatComposer.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatComposer.js +107 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatComposer.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessage.d.ts +17 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessage.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessage.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessage.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageBubble.d.ts +25 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageBubble.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageBubble.js +31 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageBubble.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReaction.d.ts +6 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReaction.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReaction.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReaction.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReactionUser.d.ts +7 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReactionUser.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReactionUser.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatMessageReactionUser.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatOwnReaction.d.ts +6 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatOwnReaction.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatOwnReaction.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatOwnReaction.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatTypingAuthor.d.ts +8 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatTypingAuthor.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatTypingAuthor.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatTypingAuthor.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatVariant.d.ts +5 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatVariant.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatVariant.js +15 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ChatVariant.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategory.d.ts +6 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategory.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategory.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategory.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategoryKey.d.ts +12 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategoryKey.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategoryKey.js +18 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiCategoryKey.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiMemory.d.ts +5 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiMemory.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiMemory.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiMemory.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiPicker.d.ts +14 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiPicker.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiPicker.js +51 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/EmojiPicker.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/emojiCatalog.d.ts +3 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/emojiCatalog.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/emojiCatalog.js +155 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/emojiCatalog.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/index.d.ts +7 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/index.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/index.js +7 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/index.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/recentEmojis.d.ts +6 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/recentEmojis.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/recentEmojis.js +59 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Emoji/recentEmojis.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/FailedReply.d.ts +23 -0
- package/dist/esm/Canvas/shapes/ChatBubble/FailedReply.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/FailedReply.js +28 -0
- package/dist/esm/Canvas/shapes/ChatBubble/FailedReply.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionCandidate.d.ts +9 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionCandidate.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionCandidate.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionCandidate.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionQuery.d.ts +5 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionQuery.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionQuery.js +2 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionQuery.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionSuggestions.d.ts +11 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionSuggestions.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionSuggestions.js +14 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/MentionSuggestions.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/activeMentionQuery.d.ts +3 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/activeMentionQuery.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/activeMentionQuery.js +34 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/activeMentionQuery.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/applyMention.d.ts +7 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/applyMention.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/applyMention.js +23 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/applyMention.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/index.d.ts +7 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/index.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/index.js +7 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/index.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/matchCandidates.d.ts +3 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/matchCandidates.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/matchCandidates.js +24 -0
- package/dist/esm/Canvas/shapes/ChatBubble/Mentions/matchCandidates.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/MessageReactions.d.ts +6 -0
- package/dist/esm/Canvas/shapes/ChatBubble/MessageReactions.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/MessageReactions.js +28 -0
- package/dist/esm/Canvas/shapes/ChatBubble/MessageReactions.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ReactionPicker.d.ts +20 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ReactionPicker.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ReactionPicker.js +50 -0
- package/dist/esm/Canvas/shapes/ChatBubble/ReactionPicker.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/TypingIndicator.d.ts +9 -0
- package/dist/esm/Canvas/shapes/ChatBubble/TypingIndicator.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/TypingIndicator.js +18 -0
- package/dist/esm/Canvas/shapes/ChatBubble/TypingIndicator.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/findOwnReaction.d.ts +5 -0
- package/dist/esm/Canvas/shapes/ChatBubble/findOwnReaction.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/findOwnReaction.js +19 -0
- package/dist/esm/Canvas/shapes/ChatBubble/findOwnReaction.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/index.d.ts +31 -0
- package/dist/esm/Canvas/shapes/ChatBubble/index.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/index.js +17 -0
- package/dist/esm/Canvas/shapes/ChatBubble/index.js.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/reactionsExcludingUser.d.ts +4 -0
- package/dist/esm/Canvas/shapes/ChatBubble/reactionsExcludingUser.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/ChatBubble/reactionsExcludingUser.js +16 -0
- package/dist/esm/Canvas/shapes/ChatBubble/reactionsExcludingUser.js.map +1 -0
- package/dist/esm/Canvas/shapes/Note/Note.d.ts +22 -0
- package/dist/esm/Canvas/shapes/Note/Note.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/Note/Note.js +237 -0
- package/dist/esm/Canvas/shapes/Note/Note.js.map +1 -0
- package/dist/esm/Canvas/shapes/Note/index.d.ts +3 -0
- package/dist/esm/Canvas/shapes/Note/index.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/Note/index.js +2 -0
- package/dist/esm/Canvas/shapes/Note/index.js.map +1 -0
- package/dist/esm/Canvas/shapes/Note/noteFont.d.ts +2 -0
- package/dist/esm/Canvas/shapes/Note/noteFont.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/Note/noteFont.js +26 -0
- package/dist/esm/Canvas/shapes/Note/noteFont.js.map +1 -0
- package/dist/esm/Canvas/shapes/Region/Region.d.ts +22 -0
- package/dist/esm/Canvas/shapes/Region/Region.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/Region/Region.js +150 -0
- package/dist/esm/Canvas/shapes/Region/Region.js.map +1 -0
- package/dist/esm/Canvas/shapes/Region/index.d.ts +3 -0
- package/dist/esm/Canvas/shapes/Region/index.d.ts.map +1 -0
- package/dist/esm/Canvas/shapes/Region/index.js +2 -0
- package/dist/esm/Canvas/shapes/Region/index.js.map +1 -0
- package/dist/esm/Canvas/useDragSelectionGuard.d.ts +2 -0
- package/dist/esm/Canvas/useDragSelectionGuard.d.ts.map +1 -0
- package/dist/esm/Canvas/useDragSelectionGuard.js +59 -0
- package/dist/esm/Canvas/useDragSelectionGuard.js.map +1 -0
- package/dist/esm/Canvas/zoomMechanism.d.ts +4 -0
- package/dist/esm/Canvas/zoomMechanism.d.ts.map +1 -0
- package/dist/esm/Canvas/zoomMechanism.js +58 -0
- package/dist/esm/Canvas/zoomMechanism.js.map +1 -0
- package/dist/esm/CommandDialog/CommandDialog.d.ts +3 -6
- package/dist/esm/CommandDialog/CommandDialog.d.ts.map +1 -1
- package/dist/esm/CommandDialog/CommandDialog.js +3 -2
- package/dist/esm/CommandDialog/CommandDialog.js.map +1 -1
- package/dist/esm/CommandDialog/CommandStepper.d.ts.map +1 -1
- package/dist/esm/CommandDialog/CommandStepper.js +3 -2
- package/dist/esm/CommandDialog/CommandStepper.js.map +1 -1
- package/dist/esm/CommandDialog/StepperCommandDialog.js.map +1 -1
- package/dist/esm/CommandDialog/StepperPanel.js.map +1 -1
- package/dist/esm/CommandDialog/applyBeforeExecute.js.map +1 -1
- package/dist/esm/CommandDialog/stepChildren.js.map +1 -1
- package/dist/esm/CommandForm/AutoCommandForm.js.map +1 -1
- package/dist/esm/CommandForm/commandFormMarkers.d.ts +12 -0
- package/dist/esm/CommandForm/commandFormMarkers.d.ts.map +1 -0
- package/dist/esm/CommandForm/commandFormMarkers.js +69 -0
- package/dist/esm/CommandForm/commandFormMarkers.js.map +1 -0
- package/dist/esm/CommandForm/defaultFieldTypeProviders.js.map +1 -1
- package/dist/esm/CommandForm/fieldTypeProviderRegistry.js.map +1 -1
- package/dist/esm/CommandForm/fields/CalendarField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/CalendarField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/CalendarField.js.map +1 -1
- package/dist/esm/CommandForm/fields/CheckboxField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/CheckboxField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/CheckboxField.js.map +1 -1
- package/dist/esm/CommandForm/fields/ChipsField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/ChipsField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/ChipsField.js.map +1 -1
- package/dist/esm/CommandForm/fields/ColorPickerField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/ColorPickerField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/ColorPickerField.js.map +1 -1
- package/dist/esm/CommandForm/fields/DropdownField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/DropdownField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/DropdownField.js.map +1 -1
- package/dist/esm/CommandForm/fields/InputTextField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/InputTextField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/InputTextField.js.map +1 -1
- package/dist/esm/CommandForm/fields/MultiSelectField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/MultiSelectField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/MultiSelectField.js.map +1 -1
- package/dist/esm/CommandForm/fields/NumberField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/NumberField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/NumberField.js.map +1 -1
- package/dist/esm/CommandForm/fields/PasswordField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/PasswordField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/PasswordField.js.map +1 -1
- package/dist/esm/CommandForm/fields/RadioButtonField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/RadioButtonField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/RadioButtonField.js.map +1 -1
- package/dist/esm/CommandForm/fields/RadioGroupField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/RadioGroupField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/RadioGroupField.js.map +1 -1
- package/dist/esm/CommandForm/fields/RatingField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/RatingField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/RatingField.js.map +1 -1
- package/dist/esm/CommandForm/fields/SliderField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/SliderField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/SliderField.js.map +1 -1
- package/dist/esm/CommandForm/fields/TextAreaField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/TextAreaField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/TextAreaField.js.map +1 -1
- package/dist/esm/CommandForm/fields/ToggleSwitchField.d.ts +1 -1
- package/dist/esm/CommandForm/fields/ToggleSwitchField.d.ts.map +1 -1
- package/dist/esm/CommandForm/fields/ToggleSwitchField.js.map +1 -1
- package/dist/esm/CommandForm/index.d.ts +1 -0
- package/dist/esm/CommandForm/index.d.ts.map +1 -1
- package/dist/esm/CommandForm/index.js +1 -0
- package/dist/esm/CommandForm/index.js.map +1 -1
- package/dist/esm/Common/ActionMenubar.js.map +1 -1
- package/dist/esm/Common/Button.js.map +1 -1
- package/dist/esm/Common/CratisComponentsProvider.js +1 -1
- package/dist/esm/Common/CratisComponentsProvider.js.map +1 -1
- package/dist/esm/Common/DatePickerInput.d.ts +11 -4
- package/dist/esm/Common/DatePickerInput.d.ts.map +1 -1
- package/dist/esm/Common/DatePickerInput.js +18 -2
- package/dist/esm/Common/DatePickerInput.js.map +1 -1
- package/dist/esm/Common/ErrorBoundary.d.ts +1 -1
- package/dist/esm/Common/ErrorBoundary.js.map +1 -1
- package/dist/esm/Common/FormElement.js.map +1 -1
- package/dist/esm/Common/Icon.js.map +1 -1
- package/dist/esm/Common/Page.js.map +1 -1
- package/dist/esm/Common/Tooltip.js.map +1 -1
- package/dist/esm/Common/normalizeIconClass.js.map +1 -1
- package/dist/esm/Compatibility/PrimeReact11PassThroughComponent.d.ts +3 -0
- package/dist/esm/Compatibility/PrimeReact11PassThroughComponent.d.ts.map +1 -0
- package/dist/esm/Compatibility/PrimeReact11PassThroughComponent.js +2 -0
- package/dist/esm/Compatibility/PrimeReact11PassThroughComponent.js.map +1 -0
- package/dist/esm/Compatibility/assertPrimeReact11PassThroughCompatibility.d.ts +3 -0
- package/dist/esm/Compatibility/assertPrimeReact11PassThroughCompatibility.d.ts.map +1 -0
- package/dist/esm/Compatibility/assertPrimeReact11PassThroughCompatibility.js +49 -0
- package/dist/esm/Compatibility/assertPrimeReact11PassThroughCompatibility.js.map +1 -0
- package/dist/esm/Compatibility/components3PrimeReact11PassThroughContract.d.ts +369 -0
- package/dist/esm/Compatibility/components3PrimeReact11PassThroughContract.d.ts.map +1 -0
- package/dist/esm/Compatibility/components3PrimeReact11PassThroughContract.js +271 -0
- package/dist/esm/Compatibility/components3PrimeReact11PassThroughContract.js.map +1 -0
- package/dist/esm/Compatibility/index.d.ts +5 -0
- package/dist/esm/Compatibility/index.d.ts.map +1 -0
- package/dist/esm/Compatibility/index.js +7 -0
- package/dist/esm/Compatibility/index.js.map +1 -0
- package/dist/esm/Compatibility/primeReact11PassThroughSentinelPreset.d.ts +8 -0
- package/dist/esm/Compatibility/primeReact11PassThroughSentinelPreset.d.ts.map +1 -0
- package/dist/esm/Compatibility/primeReact11PassThroughSentinelPreset.js +48 -0
- package/dist/esm/Compatibility/primeReact11PassThroughSentinelPreset.js.map +1 -0
- package/dist/esm/DataPage/DataPage.d.ts +4 -4
- package/dist/esm/DataPage/DataPage.d.ts.map +1 -1
- package/dist/esm/DataPage/DataPage.js +6 -10
- package/dist/esm/DataPage/DataPage.js.map +1 -1
- package/dist/esm/DataPage/DataPageLayout.js.map +1 -1
- package/dist/esm/DataTables/Column.d.ts +3 -1
- package/dist/esm/DataTables/Column.d.ts.map +1 -1
- package/dist/esm/DataTables/Column.js.map +1 -1
- package/dist/esm/DataTables/ColumnFilterMenu.d.ts +22 -2
- package/dist/esm/DataTables/ColumnFilterMenu.d.ts.map +1 -1
- package/dist/esm/DataTables/ColumnFilterMenu.js +50 -13
- package/dist/esm/DataTables/ColumnFilterMenu.js.map +1 -1
- package/dist/esm/DataTables/DataTableCore.d.ts.map +1 -1
- package/dist/esm/DataTables/DataTableCore.js +22 -3
- package/dist/esm/DataTables/DataTableCore.js.map +1 -1
- package/dist/esm/DataTables/DataTableFilterMatcherRegistry.d.ts +14 -0
- package/dist/esm/DataTables/DataTableFilterMatcherRegistry.d.ts.map +1 -0
- package/dist/esm/DataTables/DataTableFilterMatcherRegistry.js +67 -0
- package/dist/esm/DataTables/DataTableFilterMatcherRegistry.js.map +1 -0
- package/dist/esm/DataTables/DataTableFilterMeta.d.ts +26 -1
- package/dist/esm/DataTables/DataTableFilterMeta.d.ts.map +1 -1
- package/dist/esm/DataTables/DataTableFilterMeta.js +24 -2
- package/dist/esm/DataTables/DataTableFilterMeta.js.map +1 -1
- package/dist/esm/DataTables/DataTableForObservableQuery.d.ts +3 -3
- package/dist/esm/DataTables/DataTableForObservableQuery.d.ts.map +1 -1
- package/dist/esm/DataTables/DataTableForObservableQuery.js +9 -3
- package/dist/esm/DataTables/DataTableForObservableQuery.js.map +1 -1
- package/dist/esm/DataTables/DataTableForQuery.d.ts +3 -3
- package/dist/esm/DataTables/DataTableForQuery.d.ts.map +1 -1
- package/dist/esm/DataTables/DataTableForQuery.js +8 -2
- package/dist/esm/DataTables/DataTableForQuery.js.map +1 -1
- package/dist/esm/DataTables/TablePaginator.d.ts +1 -1
- package/dist/esm/DataTables/TablePaginator.d.ts.map +1 -1
- package/dist/esm/DataTables/TablePaginator.js +13 -4
- package/dist/esm/DataTables/TablePaginator.js.map +1 -1
- package/dist/esm/DataTables/index.d.ts +1 -0
- package/dist/esm/DataTables/index.d.ts.map +1 -1
- package/dist/esm/DataTables/index.js +3 -1
- package/dist/esm/DataTables/index.js.map +1 -1
- package/dist/esm/DataTables/paginatorRange.js.map +1 -1
- package/dist/esm/DataTables/selectionKeys.js.map +1 -1
- package/dist/esm/Dialogs/BusyIndicatorDialog.js.map +1 -1
- package/dist/esm/Dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/esm/Dialogs/Dialog.d.ts +2 -2
- package/dist/esm/Dialogs/Dialog.d.ts.map +1 -1
- package/dist/esm/Dialogs/Dialog.js +16 -18
- package/dist/esm/Dialogs/Dialog.js.map +1 -1
- package/dist/esm/Dialogs/DialogInitialFocus.js.map +1 -1
- package/dist/esm/Display/Avatar.js.map +1 -1
- package/dist/esm/Display/Badge.js.map +1 -1
- package/dist/esm/Display/Chip.js.map +1 -1
- package/dist/esm/Display/Message.js.map +1 -1
- package/dist/esm/Display/ProgressBar.js.map +1 -1
- package/dist/esm/Display/ProgressSpinner.js.map +1 -1
- package/dist/esm/Display/Skeleton.js.map +1 -1
- package/dist/esm/Display/Tag.js.map +1 -1
- package/dist/esm/Dropdown/Dropdown.d.ts +4 -2
- package/dist/esm/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/Dropdown/Dropdown.js +8 -3
- package/dist/esm/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/Filter/FilterEditor.js.map +1 -1
- package/dist/esm/Filter/FilterPanel.d.ts.map +1 -1
- package/dist/esm/Filter/FilterPanel.js +1 -1
- package/dist/esm/Filter/FilterPanel.js.map +1 -1
- package/dist/esm/Filter/RangeHistogramFilter.d.ts +4 -3
- package/dist/esm/Filter/RangeHistogramFilter.d.ts.map +1 -1
- package/dist/esm/Filter/RangeHistogramFilter.js +4 -23
- package/dist/esm/Filter/RangeHistogramFilter.js.map +1 -1
- package/dist/esm/Filter/index.d.ts +3 -2
- package/dist/esm/Filter/index.d.ts.map +1 -1
- package/dist/esm/Filter/index.js +1 -1
- package/dist/esm/Filter/types.d.ts +7 -1
- package/dist/esm/Filter/types.d.ts.map +1 -1
- package/dist/esm/Filter/useFilterState.js.map +1 -1
- package/dist/esm/Filter/utils.d.ts +5 -1
- package/dist/esm/Filter/utils.d.ts.map +1 -1
- package/dist/esm/Filter/utils.js +33 -1
- package/dist/esm/Filter/utils.js.map +1 -1
- package/dist/esm/Notifications/Toaster.d.ts +8 -1
- package/dist/esm/Notifications/Toaster.d.ts.map +1 -1
- package/dist/esm/Notifications/Toaster.js +16 -10
- package/dist/esm/Notifications/Toaster.js.map +1 -1
- package/dist/esm/Notifications/index.js +1 -1
- package/dist/esm/Notifications/toast.d.ts +52 -2
- package/dist/esm/Notifications/toast.d.ts.map +1 -1
- package/dist/esm/Notifications/toast.js +100 -2
- package/dist/esm/Notifications/toast.js.map +1 -1
- package/dist/esm/Notifications/toastCommandResult.js +2 -2
- package/dist/esm/Notifications/toastCommandResult.js.map +1 -1
- package/dist/esm/ObjectContentEditor/ObjectContentEditor.js.map +1 -1
- package/dist/esm/ObjectContentEditor/objectHelpers.js.map +1 -1
- package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.js.map +1 -1
- package/dist/esm/ObjectNavigationalBar/breadcrumbHelpers.js.map +1 -1
- package/dist/esm/PatrickHand-latin-ext.woff2 +0 -0
- package/dist/esm/PatrickHand-latin.woff2 +0 -0
- package/dist/esm/PatrickHand-vietnamese.woff2 +0 -0
- package/dist/esm/PivotViewer/PivotViewer.js.map +1 -1
- package/dist/esm/PivotViewer/components/AxisLabels.js.map +1 -1
- package/dist/esm/PivotViewer/components/DetailPanel.js.map +1 -1
- package/dist/esm/PivotViewer/components/FilterPanel.js.map +1 -1
- package/dist/esm/PivotViewer/components/FilterPanelContainer.js.map +1 -1
- package/dist/esm/PivotViewer/components/PivotCanvas.js.map +1 -1
- package/dist/esm/PivotViewer/components/PivotViewerMain.js.map +1 -1
- package/dist/esm/PivotViewer/components/Spinner.js.map +1 -1
- package/dist/esm/PivotViewer/components/Toolbar.js.map +1 -1
- package/dist/esm/PivotViewer/components/ToolbarContainer.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/animation.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/colorResolver.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/constants.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/groups.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/sprites.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/visibility.js.map +1 -1
- package/dist/esm/PivotViewer/constants.js.map +1 -1
- package/dist/esm/PivotViewer/engine/layout.js.map +1 -1
- package/dist/esm/PivotViewer/engine/store.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useAnimationModeTracking.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useCardSelection.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useContainerDimensions.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useCurrentFilters.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useDetailPanelClose.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useDimensionState.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useFieldExtractors.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useFilterOptions.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useFilterState.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/usePanning.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/usePivotEngine.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useScrollSync.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useViewModeScrollHandling.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useWheelZoom.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useZoomState.js.map +1 -1
- package/dist/esm/PivotViewer/types.js.map +1 -1
- package/dist/esm/PivotViewer/utils/animations.js.map +1 -1
- package/dist/esm/PivotViewer/utils/cardPosition.js.map +1 -1
- package/dist/esm/PivotViewer/utils/constants.js.map +1 -1
- package/dist/esm/PivotViewer/utils/idResolution.js.map +1 -1
- package/dist/esm/PivotViewer/utils/selection.js.map +1 -1
- package/dist/esm/PivotViewer/utils/utils.js.map +1 -1
- package/dist/esm/SchemaEditor/NameCell.js.map +1 -1
- package/dist/esm/SchemaEditor/SchemaEditor.js.map +1 -1
- package/dist/esm/SchemaEditor/TypeCell.js.map +1 -1
- package/dist/esm/SchemaEditor/schemaHelpers.js.map +1 -1
- package/dist/esm/Styled/CratisPreset.js.map +1 -1
- package/dist/esm/Styled/primeReactStyles.js.map +1 -1
- package/dist/esm/Styled/styledMode.js.map +1 -1
- package/dist/esm/TimeMachine/EventsView.js.map +1 -1
- package/dist/esm/TimeMachine/Properties.js.map +1 -1
- package/dist/esm/TimeMachine/ReadModelView.js.map +1 -1
- package/dist/esm/TimeMachine/TimeMachine.js.map +1 -1
- package/dist/esm/TimeMachine/TimeMachineLabels.js.map +1 -1
- package/dist/esm/TimeMachine/propertiesHelpers.js.map +1 -1
- package/dist/esm/Toolbar/Toolbar.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarButton.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarContext.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarDragContext.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarFanOutItem.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarFolder.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarFolderContext.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarGroup.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarLayout.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarSection.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarSeparator.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarSlot.js.map +1 -1
- package/dist/esm/index.d.ts +4 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +42 -35
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/styles.css +1285 -3
- package/dist/esm/types/TypeFormat.js.map +1 -1
- package/package.json +16 -6
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useState, useEffect, useCallback, useLayoutEffect } from 'react';
|
|
3
|
+
import { whenNoteFontReady } from './noteFont.js';
|
|
4
|
+
|
|
5
|
+
const MIN_SIZE = 80;
|
|
6
|
+
// How small the fitted text is allowed to get. Notes live on a canvas that zooms, so text too small to
|
|
7
|
+
// read at 1:1 is still perfectly legible one zoom step in — shrinking is a far better answer than
|
|
8
|
+
// hiding the text behind an affordance, and the floor is set low enough to say so. Only text that will
|
|
9
|
+
// not fit even at this size falls back to the expand affordance.
|
|
10
|
+
const MIN_FONT_SIZE = 4;
|
|
11
|
+
const MAX_FONT_SIZE = 120;
|
|
12
|
+
const PADDING = 12;
|
|
13
|
+
const LINE_HEIGHT_RATIO = 1.4;
|
|
14
|
+
function textFitsAtSize(measurer, text, fontSize, availableWidth, availableHeight) {
|
|
15
|
+
measurer.style.width = `${availableWidth}px`;
|
|
16
|
+
measurer.style.fontSize = `${fontSize}px`;
|
|
17
|
+
measurer.style.lineHeight = `${LINE_HEIGHT_RATIO}`;
|
|
18
|
+
measurer.textContent = text;
|
|
19
|
+
return measurer.scrollHeight <= availableHeight;
|
|
20
|
+
}
|
|
21
|
+
function findOptimalFontSize(measurer, text, width, height) {
|
|
22
|
+
if (!(text ?? '').trim())
|
|
23
|
+
return { fontSize: Math.min(MAX_FONT_SIZE, Math.min(width, height) * 0.4), overflows: false };
|
|
24
|
+
const availableWidth = width - PADDING * 2;
|
|
25
|
+
const availableHeight = height - PADDING * 2;
|
|
26
|
+
let low = MIN_FONT_SIZE;
|
|
27
|
+
let high = MAX_FONT_SIZE;
|
|
28
|
+
// Quick check: if the readability floor doesn't fit, stop shrinking and flag the overflow instead.
|
|
29
|
+
if (!textFitsAtSize(measurer, text, low, availableWidth, availableHeight)) {
|
|
30
|
+
return { fontSize: MIN_FONT_SIZE, overflows: true };
|
|
31
|
+
}
|
|
32
|
+
// Binary search for the largest fitting font size
|
|
33
|
+
while (high - low > 0.5) {
|
|
34
|
+
const mid = (low + high) / 2;
|
|
35
|
+
if (textFitsAtSize(measurer, text, mid, availableWidth, availableHeight)) {
|
|
36
|
+
low = mid;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
high = mid;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { fontSize: Math.floor(low), overflows: false };
|
|
43
|
+
}
|
|
44
|
+
const HANDLE_KEYS = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
|
|
45
|
+
const HANDLE_POSITIONS = {
|
|
46
|
+
nw: { top: -4, left: -4 },
|
|
47
|
+
n: { top: -4, left: '50%', transform: 'translateX(-50%)' },
|
|
48
|
+
ne: { top: -4, right: -4 },
|
|
49
|
+
e: { top: '50%', right: -4, transform: 'translateY(-50%)' },
|
|
50
|
+
se: { bottom: -4, right: -4 },
|
|
51
|
+
s: { bottom: -4, left: '50%', transform: 'translateX(-50%)' },
|
|
52
|
+
sw: { bottom: -4, left: -4 },
|
|
53
|
+
w: { top: '50%', left: -4, transform: 'translateY(-50%)' },
|
|
54
|
+
};
|
|
55
|
+
const RESIZE_CURSORS = {
|
|
56
|
+
nw: 'nw-resize', n: 'n-resize', ne: 'ne-resize',
|
|
57
|
+
e: 'e-resize', se: 'se-resize',
|
|
58
|
+
s: 's-resize', sw: 'sw-resize', w: 'w-resize',
|
|
59
|
+
};
|
|
60
|
+
const Note = ({ note, selected, onSelect, onMove, onMoveEnd, onResize, onResizeEnd, onTextChange, onExpandedChange }) => {
|
|
61
|
+
const noteRef = useRef(null);
|
|
62
|
+
const measurerRef = useRef(null);
|
|
63
|
+
const textareaRef = useRef(null);
|
|
64
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
65
|
+
const [liveText, setLiveText] = useState(note.text);
|
|
66
|
+
const [fontSize, setFontSize] = useState(MAX_FONT_SIZE);
|
|
67
|
+
const [textareaTopPadding, setTextareaTopPadding] = useState(PADDING);
|
|
68
|
+
// True once the text no longer fits even at the readability floor — shows the "see full text" button.
|
|
69
|
+
const [isOverflowing, setIsOverflowing] = useState(false);
|
|
70
|
+
// The height the note needs to show every line of its text at the fitted size.
|
|
71
|
+
const [fullTextHeight, setFullTextHeight] = useState(0);
|
|
72
|
+
const [isShowingFullText, setIsShowingFullText] = useState(false);
|
|
73
|
+
// The note face is a webfont, so the first measurement can land against the fallback's metrics.
|
|
74
|
+
// Flipping this re-runs the fit once the real face is in.
|
|
75
|
+
const [isFontReady, setIsFontReady] = useState(false);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
let cancelled = false;
|
|
78
|
+
void whenNoteFontReady().then(() => {
|
|
79
|
+
if (!cancelled)
|
|
80
|
+
setIsFontReady(true);
|
|
81
|
+
});
|
|
82
|
+
return () => {
|
|
83
|
+
cancelled = true;
|
|
84
|
+
};
|
|
85
|
+
}, []);
|
|
86
|
+
const dragRef = useRef(null);
|
|
87
|
+
const resizeRef = useRef(null);
|
|
88
|
+
const readEffectiveZoom = useCallback(() => {
|
|
89
|
+
if (!noteRef.current)
|
|
90
|
+
return 1;
|
|
91
|
+
const renderedWidth = noteRef.current.getBoundingClientRect().width;
|
|
92
|
+
return renderedWidth > 0 ? renderedWidth / note.width : 1;
|
|
93
|
+
}, [note.width]);
|
|
94
|
+
// ── Move ────────────────────────────────────────────────────────────────
|
|
95
|
+
const handlePointerDown = useCallback((event) => {
|
|
96
|
+
if (isEditing)
|
|
97
|
+
return;
|
|
98
|
+
event.stopPropagation();
|
|
99
|
+
onSelect(note.id, event.shiftKey || event.metaKey || event.ctrlKey);
|
|
100
|
+
dragRef.current = {
|
|
101
|
+
clientX: event.clientX,
|
|
102
|
+
clientY: event.clientY,
|
|
103
|
+
startX: note.x,
|
|
104
|
+
startY: note.y,
|
|
105
|
+
zoom: readEffectiveZoom(),
|
|
106
|
+
};
|
|
107
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
108
|
+
}, [isEditing, note.id, note.x, note.y, onSelect, readEffectiveZoom]);
|
|
109
|
+
const handlePointerMove = useCallback((event) => {
|
|
110
|
+
if (!dragRef.current || !event.buttons)
|
|
111
|
+
return;
|
|
112
|
+
const { clientX, clientY, startX, startY, zoom } = dragRef.current;
|
|
113
|
+
const deltaX = (event.clientX - clientX) / zoom;
|
|
114
|
+
const deltaY = (event.clientY - clientY) / zoom;
|
|
115
|
+
onMove(note.id, startX + deltaX, startY + deltaY);
|
|
116
|
+
}, [note.id, onMove]);
|
|
117
|
+
const handlePointerUp = useCallback(() => {
|
|
118
|
+
if (dragRef.current) {
|
|
119
|
+
dragRef.current = null;
|
|
120
|
+
onMoveEnd?.(note.id);
|
|
121
|
+
}
|
|
122
|
+
}, [note.id, onMoveEnd]);
|
|
123
|
+
// ── Resize ──────────────────────────────────────────────────────────────
|
|
124
|
+
const handleResizePointerDown = useCallback((handle) => (event) => {
|
|
125
|
+
event.stopPropagation();
|
|
126
|
+
resizeRef.current = {
|
|
127
|
+
handle,
|
|
128
|
+
clientX: event.clientX,
|
|
129
|
+
clientY: event.clientY,
|
|
130
|
+
startX: note.x,
|
|
131
|
+
startY: note.y,
|
|
132
|
+
startWidth: note.width,
|
|
133
|
+
startHeight: note.height,
|
|
134
|
+
zoom: readEffectiveZoom(),
|
|
135
|
+
};
|
|
136
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
137
|
+
}, [note.x, note.y, note.width, note.height, readEffectiveZoom]);
|
|
138
|
+
const handleResizePointerMove = useCallback((event) => {
|
|
139
|
+
if (!resizeRef.current || !event.buttons)
|
|
140
|
+
return;
|
|
141
|
+
const { handle, clientX, clientY, startX, startY, startWidth, startHeight, zoom } = resizeRef.current;
|
|
142
|
+
const deltaX = (event.clientX - clientX) / zoom;
|
|
143
|
+
const deltaY = (event.clientY - clientY) / zoom;
|
|
144
|
+
let newX = startX;
|
|
145
|
+
let newY = startY;
|
|
146
|
+
let newWidth = startWidth;
|
|
147
|
+
let newHeight = startHeight;
|
|
148
|
+
if (handle === 'e' || handle === 'ne' || handle === 'se') {
|
|
149
|
+
newWidth = Math.max(MIN_SIZE, startWidth + deltaX);
|
|
150
|
+
}
|
|
151
|
+
if (handle === 'w' || handle === 'nw' || handle === 'sw') {
|
|
152
|
+
newWidth = Math.max(MIN_SIZE, startWidth - deltaX);
|
|
153
|
+
newX = startX + startWidth - newWidth;
|
|
154
|
+
}
|
|
155
|
+
if (handle === 's' || handle === 'se' || handle === 'sw') {
|
|
156
|
+
newHeight = Math.max(MIN_SIZE, startHeight + deltaY);
|
|
157
|
+
}
|
|
158
|
+
if (handle === 'n' || handle === 'ne' || handle === 'nw') {
|
|
159
|
+
newHeight = Math.max(MIN_SIZE, startHeight - deltaY);
|
|
160
|
+
newY = startY + startHeight - newHeight;
|
|
161
|
+
}
|
|
162
|
+
onResize(note.id, newX, newY, newWidth, newHeight);
|
|
163
|
+
}, [note.id, onResize]);
|
|
164
|
+
const handleResizePointerUp = useCallback(() => {
|
|
165
|
+
if (resizeRef.current) {
|
|
166
|
+
resizeRef.current = null;
|
|
167
|
+
onResizeEnd?.(note.id);
|
|
168
|
+
}
|
|
169
|
+
}, [note.id, onResizeEnd]);
|
|
170
|
+
// ── Text editing ────────────────────────────────────────────────────────
|
|
171
|
+
const handleDoubleClick = useCallback((event) => {
|
|
172
|
+
event.stopPropagation();
|
|
173
|
+
setLiveText(note.text);
|
|
174
|
+
setIsEditing(true);
|
|
175
|
+
}, [note.text]);
|
|
176
|
+
const handleTextareaChange = useCallback((event) => {
|
|
177
|
+
setLiveText(event.currentTarget.value);
|
|
178
|
+
}, []);
|
|
179
|
+
const handleTextareaBlur = useCallback((event) => {
|
|
180
|
+
onTextChange(note.id, event.currentTarget.value);
|
|
181
|
+
setIsEditing(false);
|
|
182
|
+
}, [note.id, onTextChange]);
|
|
183
|
+
const handleTextareaKeyDown = useCallback((event) => {
|
|
184
|
+
if (event.key === 'Escape') {
|
|
185
|
+
setIsEditing(false);
|
|
186
|
+
}
|
|
187
|
+
}, []);
|
|
188
|
+
// Use live text for font sizing when editing, otherwise use committed text
|
|
189
|
+
const displayText = isEditing ? liveText : note.text;
|
|
190
|
+
// Measure optimal font size using an off-screen div that mirrors the note's
|
|
191
|
+
// word-wrap behavior. Runs synchronously before paint so there is no flash.
|
|
192
|
+
// Also measures actual text height so the textarea can be vertically centred.
|
|
193
|
+
useLayoutEffect(() => {
|
|
194
|
+
if (!measurerRef.current)
|
|
195
|
+
return;
|
|
196
|
+
const { fontSize: optimal, overflows } = findOptimalFontSize(measurerRef.current, displayText, note.width, note.height);
|
|
197
|
+
setFontSize(optimal);
|
|
198
|
+
setIsOverflowing(overflows);
|
|
199
|
+
// After finding the font, read the actual rendered text height to compute
|
|
200
|
+
// vertical padding that centres the text inside the textarea.
|
|
201
|
+
const measurer = measurerRef.current;
|
|
202
|
+
measurer.style.width = `${note.width - PADDING * 2}px`;
|
|
203
|
+
measurer.style.fontSize = `${optimal}px`;
|
|
204
|
+
measurer.style.lineHeight = `${LINE_HEIGHT_RATIO}`;
|
|
205
|
+
measurer.textContent = displayText || '\u00A0';
|
|
206
|
+
const renderedHeight = measurer.scrollHeight;
|
|
207
|
+
const topPad = Math.max(PADDING, (note.height - renderedHeight) / 2);
|
|
208
|
+
setTextareaTopPadding(topPad);
|
|
209
|
+
// The same measurement answers how tall the note has to grow to show everything.
|
|
210
|
+
setFullTextHeight(renderedHeight + PADDING * 2);
|
|
211
|
+
}, [displayText, note.width, note.height, isFontReady]);
|
|
212
|
+
const isExpanded = isShowingFullText && isOverflowing && !isEditing;
|
|
213
|
+
// Editing, retyping or resizing the note re-fits the text, and the note may well fit again — the
|
|
214
|
+
// grown state belongs to the text that no longer fits, so it never outlives it.
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
if (!isOverflowing)
|
|
217
|
+
setIsShowingFullText(false);
|
|
218
|
+
}, [isOverflowing]);
|
|
219
|
+
useEffect(() => {
|
|
220
|
+
onExpandedChange?.(note.id, isExpanded);
|
|
221
|
+
}, [isExpanded, note.id, onExpandedChange]);
|
|
222
|
+
const handleExpand = useCallback((event) => {
|
|
223
|
+
event.stopPropagation();
|
|
224
|
+
setIsShowingFullText(true);
|
|
225
|
+
}, []);
|
|
226
|
+
// Growing is a look, not a mode: the note falls back to its own size the moment the pointer leaves it.
|
|
227
|
+
const handlePointerLeave = useCallback(() => setIsShowingFullText(false), []);
|
|
228
|
+
return (jsxs("div", { ref: noteRef, className: `canvas-note${selected ? ' canvas-note--selected' : ''}${isExpanded ? ' canvas-note--expanded' : ''}`, style: { width: note.width, height: isExpanded ? Math.max(note.height, fullTextHeight) : note.height }, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerUp, onPointerCancel: handlePointerUp, onPointerLeave: handlePointerLeave, onDoubleClick: handleDoubleClick, children: [jsx("div", { ref: measurerRef, className: 'canvas-note__measurer', "aria-hidden": 'true' }), isEditing ? (jsx("textarea", { ref: textareaRef, className: 'canvas-note__textarea', value: liveText, style: {
|
|
229
|
+
fontSize,
|
|
230
|
+
lineHeight: LINE_HEIGHT_RATIO,
|
|
231
|
+
paddingTop: textareaTopPadding,
|
|
232
|
+
paddingBottom: textareaTopPadding,
|
|
233
|
+
}, autoFocus: true, onChange: handleTextareaChange, onBlur: handleTextareaBlur, onKeyDown: handleTextareaKeyDown, onPointerDown: event => event.stopPropagation() })) : (jsx("p", { className: 'canvas-note__text', style: { fontSize }, children: note.text })), isOverflowing && !isEditing && !isExpanded && (jsx("button", { type: 'button', className: 'canvas-note__expand', "aria-label": 'See full text', title: 'See full text', onClick: handleExpand, onPointerDown: event => event.stopPropagation(), children: jsx("i", { className: 'pi pi-plus' }) })), selected && !isExpanded && HANDLE_KEYS.map(handle => (jsx("div", { className: 'canvas-note__handle', style: { ...HANDLE_POSITIONS[handle], cursor: RESIZE_CURSORS[handle] }, onPointerDown: handleResizePointerDown(handle), onPointerMove: handleResizePointerMove, onPointerUp: handleResizePointerUp, onPointerCancel: handleResizePointerUp }, handle)))] }));
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
export { Note };
|
|
237
|
+
//# sourceMappingURL=Note.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Note.js","sources":["../../../../../Canvas/shapes/Note/Note.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../Canvas/shapes/Note/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../Canvas/shapes/Note/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noteFont.d.ts","sourceRoot":"","sources":["../../../../../Canvas/shapes/Note/noteFont.ts"],"names":[],"mappings":"AAiBA,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOjD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** A specimen of the embedded note face (declared in Note.css) — the size is irrelevant to
|
|
4
|
+
* `FontFaceSet.load`, only the family matters. */
|
|
5
|
+
const SPECIMEN = '16px "Patrick Hand"';
|
|
6
|
+
let ready = null;
|
|
7
|
+
/**
|
|
8
|
+
* Resolves once the embedded note font is usable for measurement.
|
|
9
|
+
*
|
|
10
|
+
* The note text is sized by measuring it, and a webfont arrives asynchronously: a measurement taken
|
|
11
|
+
* before it loads uses the fallback face's metrics, so the fitted size is wrong for the face that
|
|
12
|
+
* ends up painting. Notes must re-measure once the real face is in — hence one shared promise for
|
|
13
|
+
* every note on the board rather than a load per note.
|
|
14
|
+
*/
|
|
15
|
+
function whenNoteFontReady() {
|
|
16
|
+
if (ready)
|
|
17
|
+
return ready;
|
|
18
|
+
const fonts = typeof document === 'undefined' ? undefined : document.fonts;
|
|
19
|
+
// A failed/unsupported load is not an error worth surfacing — the fallback face still renders,
|
|
20
|
+
// it just measures against different metrics.
|
|
21
|
+
ready = fonts ? fonts.load(SPECIMEN).then(() => undefined, () => undefined) : Promise.resolve();
|
|
22
|
+
return ready;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { whenNoteFontReady };
|
|
26
|
+
//# sourceMappingURL=noteFont.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noteFont.js","sources":["../../../../../Canvas/shapes/Note/noteFont.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AAEA;AACkD;AAClD,MAAM,QAAQ,GAAG,qBAAqB;AAEtC,IAAI,KAAK,GAAyB,IAAI;AAEtC;;;;;;;AAOG;SACa,iBAAiB,GAAA;AAC7B,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,KAAK;AACvB,IAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC,KAAK;;;AAG1E,IAAA,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,EAAE,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE;AAC/F,IAAA,OAAO,KAAK;AAChB;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface RegionData {
|
|
3
|
+
id: string;
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
10
|
+
export interface RegionProps {
|
|
11
|
+
region: RegionData;
|
|
12
|
+
selected: boolean;
|
|
13
|
+
onSelect: (id: string, additive: boolean) => void;
|
|
14
|
+
onMove: (id: string, x: number, y: number) => void;
|
|
15
|
+
onMoveEnd?: (id: string) => void;
|
|
16
|
+
onResize: (id: string, x: number, y: number, width: number, height: number) => void;
|
|
17
|
+
onResizeEnd?: (id: string) => void;
|
|
18
|
+
onNameChange: (id: string, name: string) => void;
|
|
19
|
+
children?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
export declare const Region: ({ region, selected, onSelect, onMove, onMoveEnd, onResize, onResizeEnd, onNameChange, children }: RegionProps) => React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=Region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Region.d.ts","sourceRoot":"","sources":["../../../../../Canvas/shapes/Region/Region.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAwB7D,MAAM,WAAW,UAAU;IAEvB,EAAE,EAAE,MAAM,CAAC;IAEX,CAAC,EAAE,MAAM,CAAC;IAEV,CAAC,EAAE,MAAM,CAAC;IAEV,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAExB,MAAM,EAAE,UAAU,CAAC;IAEnB,QAAQ,EAAE,OAAO,CAAC;IAMlB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAElD,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnD,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpF,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAQjD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAUD,eAAO,MAAM,MAAM,GAAI,kGAAkG,WAAW,sBAmNnI,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
const MIN_SIZE = 100;
|
|
5
|
+
const HANDLE_KEYS = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
|
|
6
|
+
const HANDLE_POSITIONS = {
|
|
7
|
+
nw: { top: -4, left: -4 },
|
|
8
|
+
n: { top: -4, left: '50%', transform: 'translateX(-50%)' },
|
|
9
|
+
ne: { top: -4, right: -4 },
|
|
10
|
+
e: { top: '50%', right: -4, transform: 'translateY(-50%)' },
|
|
11
|
+
se: { bottom: -4, right: -4 },
|
|
12
|
+
s: { bottom: -4, left: '50%', transform: 'translateX(-50%)' },
|
|
13
|
+
sw: { bottom: -4, left: -4 },
|
|
14
|
+
w: { top: '50%', left: -4, transform: 'translateY(-50%)' },
|
|
15
|
+
};
|
|
16
|
+
const RESIZE_CURSORS = {
|
|
17
|
+
nw: 'nw-resize', n: 'n-resize', ne: 'ne-resize',
|
|
18
|
+
e: 'e-resize', se: 'se-resize',
|
|
19
|
+
s: 's-resize', sw: 'sw-resize', w: 'w-resize',
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A resizable, draggable, labeled box a host can place other shapes inside of — the generic shell
|
|
23
|
+
* behind a "region" or "group" affordance on a board. Presentational and fully controlled: like
|
|
24
|
+
* {@link Note}, it owns no position/size/name state of its own and reads `region` fresh every render,
|
|
25
|
+
* reporting every change through callbacks instead of committing anything locally. A host that is slow
|
|
26
|
+
* to feed a new `region` back after a callback will see the box spring back to its last known value —
|
|
27
|
+
* the same trade-off `Note` makes for its own drag/resize/rename.
|
|
28
|
+
*/
|
|
29
|
+
const Region = ({ region, selected, onSelect, onMove, onMoveEnd, onResize, onResizeEnd, onNameChange, children }) => {
|
|
30
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
31
|
+
const regionRef = useRef(null);
|
|
32
|
+
const titleBarRef = useRef(null);
|
|
33
|
+
const clickedTitleBarRef = useRef(false);
|
|
34
|
+
const dragRef = useRef(null);
|
|
35
|
+
const resizeRef = useRef(null);
|
|
36
|
+
const readEffectiveZoom = useCallback(() => {
|
|
37
|
+
if (!regionRef.current)
|
|
38
|
+
return 1;
|
|
39
|
+
const renderedWidth = regionRef.current.getBoundingClientRect().width;
|
|
40
|
+
return renderedWidth > 0 ? renderedWidth / region.width : 1;
|
|
41
|
+
}, [region.width]);
|
|
42
|
+
// ── Move ────────────────────────────────────────────────────────────────
|
|
43
|
+
// Only the title bar is a drag handle. A press anywhere on the region's body is deliberately left
|
|
44
|
+
// to bubble up to the host: a drag from there is free to become a rubber-band selection instead, and
|
|
45
|
+
// a plain click can select the region itself — a region is a backdrop you can both sweep a
|
|
46
|
+
// selection across and click to select, not a surface that swallows the gesture.
|
|
47
|
+
const handlePointerDown = useCallback((event) => {
|
|
48
|
+
if (isEditing)
|
|
49
|
+
return;
|
|
50
|
+
clickedTitleBarRef.current = titleBarRef.current?.contains(event.target) ?? false;
|
|
51
|
+
if (!clickedTitleBarRef.current)
|
|
52
|
+
return;
|
|
53
|
+
event.stopPropagation();
|
|
54
|
+
onSelect(region.id, event.shiftKey || event.metaKey || event.ctrlKey);
|
|
55
|
+
dragRef.current = {
|
|
56
|
+
clientX: event.clientX,
|
|
57
|
+
clientY: event.clientY,
|
|
58
|
+
startX: region.x,
|
|
59
|
+
startY: region.y,
|
|
60
|
+
zoom: readEffectiveZoom(),
|
|
61
|
+
};
|
|
62
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
63
|
+
}, [isEditing, region.id, region.x, region.y, onSelect, readEffectiveZoom]);
|
|
64
|
+
const handlePointerMove = useCallback((event) => {
|
|
65
|
+
if (!dragRef.current || !event.buttons)
|
|
66
|
+
return;
|
|
67
|
+
const { clientX, clientY, startX, startY, zoom } = dragRef.current;
|
|
68
|
+
const deltaX = (event.clientX - clientX) / zoom;
|
|
69
|
+
const deltaY = (event.clientY - clientY) / zoom;
|
|
70
|
+
onMove(region.id, startX + deltaX, startY + deltaY);
|
|
71
|
+
}, [region.id, onMove]);
|
|
72
|
+
const handlePointerUp = useCallback(() => {
|
|
73
|
+
if (dragRef.current) {
|
|
74
|
+
dragRef.current = null;
|
|
75
|
+
onMoveEnd?.(region.id);
|
|
76
|
+
}
|
|
77
|
+
}, [region.id, onMoveEnd]);
|
|
78
|
+
// ── Resize ──────────────────────────────────────────────────────────────
|
|
79
|
+
const handleResizePointerDown = useCallback((handle) => (event) => {
|
|
80
|
+
clickedTitleBarRef.current = false;
|
|
81
|
+
event.stopPropagation();
|
|
82
|
+
resizeRef.current = {
|
|
83
|
+
handle,
|
|
84
|
+
clientX: event.clientX,
|
|
85
|
+
clientY: event.clientY,
|
|
86
|
+
startX: region.x,
|
|
87
|
+
startY: region.y,
|
|
88
|
+
startWidth: region.width,
|
|
89
|
+
startHeight: region.height,
|
|
90
|
+
zoom: readEffectiveZoom(),
|
|
91
|
+
};
|
|
92
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
93
|
+
}, [region.x, region.y, region.width, region.height, readEffectiveZoom]);
|
|
94
|
+
const handleResizePointerMove = useCallback((event) => {
|
|
95
|
+
if (!resizeRef.current || !event.buttons)
|
|
96
|
+
return;
|
|
97
|
+
const { handle, clientX, clientY, startX, startY, startWidth, startHeight, zoom } = resizeRef.current;
|
|
98
|
+
const deltaX = (event.clientX - clientX) / zoom;
|
|
99
|
+
const deltaY = (event.clientY - clientY) / zoom;
|
|
100
|
+
let newX = startX;
|
|
101
|
+
let newY = startY;
|
|
102
|
+
let newWidth = startWidth;
|
|
103
|
+
let newHeight = startHeight;
|
|
104
|
+
if (handle === 'e' || handle === 'ne' || handle === 'se') {
|
|
105
|
+
newWidth = Math.max(MIN_SIZE, startWidth + deltaX);
|
|
106
|
+
}
|
|
107
|
+
if (handle === 'w' || handle === 'nw' || handle === 'sw') {
|
|
108
|
+
newWidth = Math.max(MIN_SIZE, startWidth - deltaX);
|
|
109
|
+
newX = startX + startWidth - newWidth;
|
|
110
|
+
}
|
|
111
|
+
if (handle === 's' || handle === 'se' || handle === 'sw') {
|
|
112
|
+
newHeight = Math.max(MIN_SIZE, startHeight + deltaY);
|
|
113
|
+
}
|
|
114
|
+
if (handle === 'n' || handle === 'ne' || handle === 'nw') {
|
|
115
|
+
newHeight = Math.max(MIN_SIZE, startHeight - deltaY);
|
|
116
|
+
newY = startY + startHeight - newHeight;
|
|
117
|
+
}
|
|
118
|
+
onResize(region.id, newX, newY, newWidth, newHeight);
|
|
119
|
+
}, [region.id, onResize]);
|
|
120
|
+
const handleResizePointerUp = useCallback(() => {
|
|
121
|
+
if (resizeRef.current) {
|
|
122
|
+
resizeRef.current = null;
|
|
123
|
+
onResizeEnd?.(region.id);
|
|
124
|
+
}
|
|
125
|
+
}, [region.id, onResizeEnd]);
|
|
126
|
+
// ── Rename ──────────────────────────────────────────────────────────────
|
|
127
|
+
const handleDoubleClick = useCallback((event) => {
|
|
128
|
+
if (!clickedTitleBarRef.current)
|
|
129
|
+
return;
|
|
130
|
+
event.stopPropagation();
|
|
131
|
+
setIsEditing(true);
|
|
132
|
+
}, []);
|
|
133
|
+
const commitRename = useCallback((newName) => {
|
|
134
|
+
setIsEditing(false);
|
|
135
|
+
const trimmed = newName.trim();
|
|
136
|
+
if (trimmed && trimmed !== region.name)
|
|
137
|
+
onNameChange(region.id, trimmed);
|
|
138
|
+
}, [region.id, region.name, onNameChange]);
|
|
139
|
+
const handleInputBlur = useCallback((event) => commitRename(event.currentTarget.value), [commitRename]);
|
|
140
|
+
const handleInputKeyDown = useCallback((event) => {
|
|
141
|
+
if (event.key === 'Enter')
|
|
142
|
+
commitRename(event.currentTarget.value);
|
|
143
|
+
else if (event.key === 'Escape')
|
|
144
|
+
setIsEditing(false);
|
|
145
|
+
}, [commitRename]);
|
|
146
|
+
return (jsxs(Fragment, { children: [jsxs("div", { ref: regionRef, className: `canvas-region${selected ? ' canvas-region--selected' : ''}`, style: { width: region.width, height: region.height }, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerUp, onPointerCancel: handlePointerUp, onDoubleClick: handleDoubleClick, children: [jsx("div", { ref: titleBarRef, className: 'canvas-region__title-bar', children: isEditing ? (jsx("input", { className: 'canvas-region__name-input', type: 'text', defaultValue: region.name, autoFocus: true, onBlur: handleInputBlur, onKeyDown: handleInputKeyDown, onPointerDown: event => event.stopPropagation() })) : (jsx("span", { className: 'canvas-region__name', children: region.name })) }), selected && HANDLE_KEYS.map(handle => (jsx("div", { className: 'canvas-region__handle', style: { ...HANDLE_POSITIONS[handle], cursor: RESIZE_CURSORS[handle] }, onPointerDown: handleResizePointerDown(handle), onPointerMove: handleResizePointerMove, onPointerUp: handleResizePointerUp, onPointerCancel: handleResizePointerUp }, handle)))] }), jsx("div", { className: 'canvas-region__items', children: children })] }));
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export { Region };
|
|
150
|
+
//# sourceMappingURL=Region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Region.js","sources":["../../../../../Canvas/shapes/Region/Region.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;AAKA,MAAM,QAAQ,GAAG,GAAG;AAEpB,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAU;AAGzE,MAAM,gBAAgB,GAA2C;IAC7D,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACzB,IAAA,CAAC,EAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE;IAC3D,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAC1B,IAAA,CAAC,EAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE;IAC5D,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7B,IAAA,CAAC,EAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE;IAC9D,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AAC5B,IAAA,CAAC,EAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE;CAC9D;AAED,MAAM,cAAc,GAA8B;IAC9C,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW;AAC/C,IAAA,CAAC,EAAE,UAAU,EAAI,EAAE,EAAE,WAAW;IAChC,CAAC,EAAE,UAAU,EAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU;CAClD;AAgDD;;;;;;;AAOG;AACI,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAe,KAAI;IACpI,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAEjD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC;AAC9C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;AAChD,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;AAExC,IAAA,MAAM,OAAO,GAAG,MAAM,CAMZ,IAAI,CAAC;AAEf,IAAA,MAAM,SAAS,GAAG,MAAM,CASd,IAAI,CAAC;AAEf,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAa;QAC/C,IAAI,CAAC,SAAS,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC;QAChC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACrE,QAAA,OAAO,aAAa,GAAG,CAAC,GAAG,aAAa,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;AAC/D,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;;;;;AAQlB,IAAA,MAAM,iBAAiB,GAAG,WAAW,CACjC,CAAC,KAAyC,KAAI;AAC1C,QAAA,IAAI,SAAS;YAAE;AACf,QAAA,kBAAkB,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,IAAI,KAAK;QACzF,IAAI,CAAC,kBAAkB,CAAC,OAAO;YAAE;QACjC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;QACrE,OAAO,CAAC,OAAO,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,MAAM,CAAC,CAAC;YAChB,MAAM,EAAE,MAAM,CAAC,CAAC;YAChB,IAAI,EAAE,iBAAiB,EAAE;SAC5B;QACD,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC1D,CAAC,EACD,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAC1E;AAED,IAAA,MAAM,iBAAiB,GAAG,WAAW,CACjC,CAAC,KAAyC,KAAI;QAC1C,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE;AACxC,QAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO;QAClE,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI;QAC/C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI;AAC/C,QAAA,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD,CAAC,EACD,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CACtB;AAED,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,MAAK;AACrC,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,CAAC,OAAO,GAAG,IAAI;AACtB,YAAA,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;QAC1B;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;;AAI1B,IAAA,MAAM,uBAAuB,GAAG,WAAW,CACvC,CAAC,MAAiB,KAAK,CAAC,KAAyC,KAAI;AACjE,QAAA,kBAAkB,CAAC,OAAO,GAAG,KAAK;QAClC,KAAK,CAAC,eAAe,EAAE;QACvB,SAAS,CAAC,OAAO,GAAG;YAChB,MAAM;YACN,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,MAAM,CAAC,CAAC;YAChB,MAAM,EAAE,MAAM,CAAC,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC,KAAK;YACxB,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,IAAI,EAAE,iBAAiB,EAAE;SAC5B;QACD,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC1D,CAAC,EACD,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CACvE;AAED,IAAA,MAAM,uBAAuB,GAAG,WAAW,CACvC,CAAC,KAAyC,KAAI;QAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE;QAC1C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,OAAO;QACrG,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI;QAC/C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI;QAE/C,IAAI,IAAI,GAAG,MAAM;QACjB,IAAI,IAAI,GAAG,MAAM;QACjB,IAAI,QAAQ,GAAG,UAAU;QACzB,IAAI,SAAS,GAAG,WAAW;AAE3B,QAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;YACtD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAAC;QACtD;AACA,QAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;YACtD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAAC;AAClD,YAAA,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ;QACzC;AACA,QAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;YACtD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC;QACxD;AACA,QAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;YACtD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC;AACpD,YAAA,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS;QAC3C;AAEA,QAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;IACxD,CAAC,EACD,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CACxB;AAED,IAAA,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAK;AAC3C,QAAA,IAAI,SAAS,CAAC,OAAO,EAAE;AACnB,YAAA,SAAS,CAAC,OAAO,GAAG,IAAI;AACxB,YAAA,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC;QAC5B;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;;AAI5B,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAAuC,KAAI;QAC9E,IAAI,CAAC,kBAAkB,CAAC,OAAO;YAAE;QACjC,KAAK,CAAC,eAAe,EAAE;QACvB,YAAY,CAAC,IAAI,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,OAAe,KAAI;QACjD,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;AAC9B,QAAA,IAAI,OAAO,IAAI,OAAO,KAAK,MAAM,CAAC,IAAI;AAAE,YAAA,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;AAC5E,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAE1C,MAAM,eAAe,GAAG,WAAW,CAC/B,CAAC,KAAyC,KAAK,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EACtF,CAAC,YAAY,CAAC,CACjB;AAED,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAClC,CAAC,KAA4C,KAAI;AAC7C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;AAAE,YAAA,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7D,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE,YAAY,CAAC,KAAK,CAAC;AACxD,IAAA,CAAC,EACD,CAAC,YAAY,CAAC,CACjB;IAED,QACIA,4BACIA,IAAA,CAAA,KAAA,EAAA,EACI,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,CAAA,aAAA,EAAgB,QAAQ,GAAG,0BAA0B,GAAG,EAAE,EAAE,EACvE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EACrD,aAAa,EAAE,iBAAiB,EAChC,aAAa,EAAE,iBAAiB,EAChC,WAAW,EAAE,eAAe,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,iBAAiB,EAAA,QAAA,EAAA,CAEhCC,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAC,0BAA0B,EAAA,QAAA,EACtD,SAAS,IACNA,GAAA,CAAA,OAAA,EAAA,EACI,SAAS,EAAC,2BAA2B,EACrC,IAAI,EAAC,MAAM,EACX,YAAY,EAAE,MAAM,CAAC,IAAI,EACzB,SAAS,EAAA,IAAA,EACT,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,kBAAkB,EAC7B,aAAa,EAAE,KAAK,IAAI,KAAK,CAAC,eAAe,EAAE,EAAA,CACjD,KAEFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,qBAAqB,YAAE,MAAM,CAAC,IAAI,EAAA,CAAQ,CAC7D,GACC,EAEL,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,KAC/BA,GAAA,CAAA,KAAA,EAAA,EAEI,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,EACtE,aAAa,EAAE,uBAAuB,CAAC,MAAM,CAAC,EAC9C,aAAa,EAAE,uBAAuB,EACtC,WAAW,EAAE,qBAAqB,EAClC,eAAe,EAAE,qBAAqB,EAAA,EANjC,MAAM,CAOb,CACL,CAAC,IACA,EAKNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,YAChC,QAAQ,EAAA,CACP,CAAA,EAAA,CACP;AAEX;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../Canvas/shapes/Region/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../Canvas/shapes/Region/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDragSelectionGuard.d.ts","sourceRoot":"","sources":["../../../Canvas/useDragSelectionGuard.ts"],"names":[],"mappings":"AAcA,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,QA4CtF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/**
|
|
6
|
+
* Suppresses native text selection for the duration of any pointer drag that starts inside the
|
|
7
|
+
* given container. The `user-select: none` rules on the boards are not enough in Safari — it still
|
|
8
|
+
* starts a selection on mousedown and extends it into chrome outside the board (top bar, controls,
|
|
9
|
+
* dialogs) as the drag sweeps over it. While a drag is live this guard cancels `selectstart` at the
|
|
10
|
+
* document level, clears any existing selection, and turns off selection on `body` (with the
|
|
11
|
+
* `-webkit-` form Safari honors). Drags starting in text inputs keep native selection behavior.
|
|
12
|
+
* @param containerRef The container whose pointer drags should suppress selection.
|
|
13
|
+
*/
|
|
14
|
+
function useDragSelectionGuard(containerRef) {
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const container = containerRef.current;
|
|
17
|
+
if (!container)
|
|
18
|
+
return;
|
|
19
|
+
let active = false;
|
|
20
|
+
let previousUserSelect = '';
|
|
21
|
+
let previousWebkitUserSelect = '';
|
|
22
|
+
const suppressSelection = (event) => event.preventDefault();
|
|
23
|
+
const end = () => {
|
|
24
|
+
if (!active)
|
|
25
|
+
return;
|
|
26
|
+
active = false;
|
|
27
|
+
document.removeEventListener('selectstart', suppressSelection, true);
|
|
28
|
+
document.body.style.userSelect = previousUserSelect;
|
|
29
|
+
document.body.style.webkitUserSelect = previousWebkitUserSelect;
|
|
30
|
+
};
|
|
31
|
+
const begin = (event) => {
|
|
32
|
+
const target = event.target;
|
|
33
|
+
if (target?.closest('textarea, input, [contenteditable="true"]'))
|
|
34
|
+
return;
|
|
35
|
+
if (active)
|
|
36
|
+
return;
|
|
37
|
+
active = true;
|
|
38
|
+
previousUserSelect = document.body.style.userSelect;
|
|
39
|
+
previousWebkitUserSelect = document.body.style.webkitUserSelect;
|
|
40
|
+
document.body.style.userSelect = 'none';
|
|
41
|
+
document.body.style.webkitUserSelect = 'none';
|
|
42
|
+
window.getSelection()?.removeAllRanges();
|
|
43
|
+
document.addEventListener('selectstart', suppressSelection, true);
|
|
44
|
+
};
|
|
45
|
+
const handleRelease = () => end();
|
|
46
|
+
container.addEventListener('pointerdown', begin, true);
|
|
47
|
+
document.addEventListener('pointerup', handleRelease, true);
|
|
48
|
+
document.addEventListener('pointercancel', handleRelease, true);
|
|
49
|
+
return () => {
|
|
50
|
+
container.removeEventListener('pointerdown', begin, true);
|
|
51
|
+
document.removeEventListener('pointerup', handleRelease, true);
|
|
52
|
+
document.removeEventListener('pointercancel', handleRelease, true);
|
|
53
|
+
end();
|
|
54
|
+
};
|
|
55
|
+
}, [containerRef]);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { useDragSelectionGuard };
|
|
59
|
+
//# sourceMappingURL=useDragSelectionGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDragSelectionGuard.js","sources":["../../../Canvas/useDragSelectionGuard.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;AACA;AAIA;;;;;;;;AAQG;AACG,SAAU,qBAAqB,CAAC,YAAiD,EAAA;IACnF,SAAS,CAAC,MAAK;AACX,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO;AACtC,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,kBAAkB,GAAG,EAAE;QAC3B,IAAI,wBAAwB,GAAG,EAAE;QAEjC,MAAM,iBAAiB,GAAG,CAAC,KAAY,KAAK,KAAK,CAAC,cAAc,EAAE;QAElE,MAAM,GAAG,GAAG,MAAK;AACb,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,MAAM,GAAG,KAAK;YACd,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,iBAAiB,EAAE,IAAI,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,kBAAkB;YACnD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,wBAAwB;AACnE,QAAA,CAAC;AAED,QAAA,MAAM,KAAK,GAAG,CAAC,KAAmB,KAAI;AAClC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;AACjD,YAAA,IAAI,MAAM,EAAE,OAAO,CAAC,2CAA2C,CAAC;gBAAE;AAClE,YAAA,IAAI,MAAM;gBAAE;YACZ,MAAM,GAAG,IAAI;YACb,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;YACnD,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB;YAC/D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;YACvC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM;AAC7C,YAAA,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE;YACxC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,EAAE,IAAI,CAAC;AACrE,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,MAAM,GAAG,EAAE;QAEjC,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC;QACtD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,aAAa,EAAE,IAAI,CAAC;AAC/D,QAAA,OAAO,MAAK;YACR,SAAS,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC;YACzD,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC;YAC9D,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,aAAa,EAAE,IAAI,CAAC;AAClE,YAAA,GAAG,EAAE;AACT,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AACtB;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const isMultiTouchCapableDevice: boolean;
|
|
2
|
+
export declare function shouldUseCssZoom(zoom: number, preferTransform: boolean, isMultiTouchCapable: boolean): boolean;
|
|
3
|
+
export declare function applyZoomLayer(element: HTMLElement, zoom: number, preferTransform?: boolean): void;
|
|
4
|
+
//# sourceMappingURL=zoomMechanism.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoomMechanism.d.ts","sourceRoot":"","sources":["../../../Canvas/zoomMechanism.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,yBAAyB,SAAyB,CAAC;AAoBhE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,GAAG,OAAO,CAE9G;AAaD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,UAAQ,GAAG,IAAI,CAUhG"}
|