@liveblocks/react-ui 2.18.3 → 2.18.4-uns1
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/dist/_private/index.cjs +118 -0
- package/dist/_private/index.cjs.map +1 -0
- package/dist/_private/index.js +54 -117
- package/dist/_private/index.js.map +1 -1
- package/dist/components/{Comment.mjs → Comment.cjs} +196 -169
- package/dist/components/{Comment.mjs.map → Comment.cjs.map} +1 -1
- package/dist/components/Comment.js +168 -195
- package/dist/components/Comment.js.map +1 -1
- package/dist/components/{Composer.mjs → Composer.cjs} +151 -148
- package/dist/components/{Composer.mjs.map → Composer.cjs.map} +1 -1
- package/dist/components/Composer.js +147 -150
- package/dist/components/Composer.js.map +1 -1
- package/dist/components/HistoryVersionSummary.cjs +45 -0
- package/dist/components/{HistoryVersionSummary.mjs.map → HistoryVersionSummary.cjs.map} +1 -1
- package/dist/components/HistoryVersionSummary.js +17 -19
- package/dist/components/HistoryVersionSummary.js.map +1 -1
- package/dist/components/HistoryVersionSummaryList.cjs +25 -0
- package/dist/components/{HistoryVersionSummaryList.mjs.map → HistoryVersionSummaryList.cjs.map} +1 -1
- package/dist/components/HistoryVersionSummaryList.js +8 -10
- package/dist/components/HistoryVersionSummaryList.js.map +1 -1
- package/dist/components/{InboxNotification.mjs → InboxNotification.cjs} +124 -122
- package/dist/components/{InboxNotification.mjs.map → InboxNotification.cjs.map} +1 -1
- package/dist/components/InboxNotification.js +121 -123
- package/dist/components/InboxNotification.js.map +1 -1
- package/dist/components/InboxNotificationList.cjs +42 -0
- package/dist/components/{InboxNotificationList.mjs.map → InboxNotificationList.cjs.map} +1 -1
- package/dist/components/InboxNotificationList.js +14 -16
- package/dist/components/InboxNotificationList.js.map +1 -1
- package/dist/components/{Thread.mjs → Thread.cjs} +70 -49
- package/dist/components/{Thread.mjs.map → Thread.cjs.map} +1 -1
- package/dist/components/Thread.js +48 -69
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/internal/{Attachment.mjs → Attachment.cjs} +82 -78
- package/dist/components/internal/{Attachment.mjs.map → Attachment.cjs.map} +1 -1
- package/dist/components/internal/Attachment.js +77 -81
- package/dist/components/internal/Attachment.js.map +1 -1
- package/dist/components/internal/{Attribution.mjs → Attribution.cjs} +10 -8
- package/dist/components/internal/{Attribution.mjs.map → Attribution.cjs.map} +1 -1
- package/dist/components/internal/Attribution.js +7 -9
- package/dist/components/internal/Attribution.js.map +1 -1
- package/dist/components/internal/Avatar.cjs +48 -0
- package/dist/components/internal/{Avatar.mjs.map → Avatar.cjs.map} +1 -1
- package/dist/components/internal/Avatar.js +18 -20
- package/dist/components/internal/Avatar.js.map +1 -1
- package/dist/components/internal/Button.cjs +80 -0
- package/dist/components/internal/{Button.mjs.map → Button.cjs.map} +1 -1
- package/dist/components/internal/Button.js +19 -23
- package/dist/components/internal/Button.js.map +1 -1
- package/dist/components/internal/Dropdown.cjs +92 -0
- package/dist/components/internal/{Dropdown.mjs.map → Dropdown.cjs.map} +1 -1
- package/dist/components/internal/Dropdown.js +22 -47
- package/dist/components/internal/Dropdown.js.map +1 -1
- package/dist/components/internal/Emoji.cjs +19 -0
- package/dist/components/internal/{Emoji.mjs.map → Emoji.cjs.map} +1 -1
- package/dist/components/internal/Emoji.js +8 -10
- package/dist/components/internal/Emoji.js.map +1 -1
- package/dist/components/internal/EmojiPicker.cjs +208 -0
- package/dist/components/internal/{EmojiPicker.mjs.map → EmojiPicker.cjs.map} +1 -1
- package/dist/components/internal/EmojiPicker.js +52 -76
- package/dist/components/internal/EmojiPicker.js.map +1 -1
- package/dist/components/internal/{Icon.mjs → Icon.cjs} +10 -6
- package/dist/components/internal/{Icon.mjs.map → Icon.cjs.map} +1 -1
- package/dist/components/internal/Icon.js +5 -9
- package/dist/components/internal/Icon.js.map +1 -1
- package/dist/components/internal/{InboxNotificationThread.mjs → InboxNotificationThread.cjs} +34 -30
- package/dist/components/internal/{InboxNotificationThread.mjs.map → InboxNotificationThread.cjs.map} +1 -1
- package/dist/components/internal/InboxNotificationThread.js +29 -33
- package/dist/components/internal/InboxNotificationThread.js.map +1 -1
- package/dist/components/internal/List.cjs +36 -0
- package/dist/components/internal/{List.mjs.map → List.cjs.map} +1 -1
- package/dist/components/internal/List.js +14 -16
- package/dist/components/internal/List.js.map +1 -1
- package/dist/components/internal/Room.cjs +24 -0
- package/dist/components/internal/{Room.mjs.map → Room.cjs.map} +1 -1
- package/dist/components/internal/Room.js +9 -11
- package/dist/components/internal/Room.js.map +1 -1
- package/dist/components/internal/Tooltip.cjs +134 -0
- package/dist/components/internal/{Tooltip.mjs.map → Tooltip.cjs.map} +1 -1
- package/dist/components/internal/Tooltip.js +29 -54
- package/dist/components/internal/Tooltip.js.map +1 -1
- package/dist/components/internal/User.cjs +28 -0
- package/dist/components/internal/{User.mjs.map → User.cjs.map} +1 -1
- package/dist/components/internal/User.js +13 -15
- package/dist/components/internal/User.js.map +1 -1
- package/dist/components.cjs +48 -0
- package/dist/{components.mjs.map → components.cjs.map} +1 -1
- package/dist/components.js +9 -14
- package/dist/components.js.map +1 -1
- package/dist/config.cjs +39 -0
- package/dist/{config.mjs.map → config.cjs.map} +1 -1
- package/dist/config.js +15 -18
- package/dist/config.js.map +1 -1
- package/dist/{constants.mjs → constants.cjs} +6 -2
- package/dist/{constants.mjs.map → constants.cjs.map} +1 -1
- package/dist/constants.js +1 -5
- package/dist/constants.js.map +1 -1
- package/dist/icon.cjs +69 -0
- package/dist/icon.cjs.map +1 -0
- package/dist/icon.js +32 -68
- package/dist/icon.js.map +1 -1
- package/dist/icons/ArrowCornerDownRight.cjs +16 -0
- package/dist/icons/{ArrowCornerDownRight.mjs.map → ArrowCornerDownRight.cjs.map} +1 -1
- package/dist/icons/ArrowCornerDownRight.js +5 -7
- package/dist/icons/ArrowCornerDownRight.js.map +1 -1
- package/dist/icons/ArrowCornerUpRight.cjs +16 -0
- package/dist/icons/ArrowCornerUpRight.cjs.map +1 -0
- package/dist/icons/ArrowCornerUpRight.js +5 -7
- package/dist/icons/ArrowCornerUpRight.js.map +1 -1
- package/dist/icons/ArrowDown.cjs +16 -0
- package/dist/icons/ArrowDown.cjs.map +1 -0
- package/dist/icons/ArrowDown.js +5 -7
- package/dist/icons/ArrowDown.js.map +1 -1
- package/dist/icons/ArrowUp.cjs +16 -0
- package/dist/icons/ArrowUp.cjs.map +1 -0
- package/dist/icons/ArrowUp.js +5 -7
- package/dist/icons/ArrowUp.js.map +1 -1
- package/dist/icons/{Attachment.mjs → Attachment.cjs} +8 -6
- package/dist/icons/{Attachment.mjs.map → Attachment.cjs.map} +1 -1
- package/dist/icons/Attachment.js +5 -7
- package/dist/icons/Attachment.js.map +1 -1
- package/dist/icons/Blockquote.cjs +16 -0
- package/dist/icons/Blockquote.cjs.map +1 -0
- package/dist/icons/Blockquote.js +5 -7
- package/dist/icons/Blockquote.js.map +1 -1
- package/dist/icons/Bold.cjs +16 -0
- package/dist/icons/{Bold.mjs.map → Bold.cjs.map} +1 -1
- package/dist/icons/Bold.js +5 -7
- package/dist/icons/Bold.js.map +1 -1
- package/dist/icons/Check.cjs +16 -0
- package/dist/icons/Check.cjs.map +1 -0
- package/dist/icons/Check.js +5 -7
- package/dist/icons/Check.js.map +1 -1
- package/dist/icons/ChevronDown.cjs +16 -0
- package/dist/icons/{ChevronDown.mjs.map → ChevronDown.cjs.map} +1 -1
- package/dist/icons/ChevronDown.js +5 -7
- package/dist/icons/ChevronDown.js.map +1 -1
- package/dist/icons/ChevronLeft.cjs +16 -0
- package/dist/icons/{ChevronLeft.mjs.map → ChevronLeft.cjs.map} +1 -1
- package/dist/icons/ChevronLeft.js +5 -7
- package/dist/icons/ChevronLeft.js.map +1 -1
- package/dist/icons/ChevronRight.cjs +16 -0
- package/dist/icons/{ChevronRight.mjs.map → ChevronRight.cjs.map} +1 -1
- package/dist/icons/ChevronRight.js +5 -7
- package/dist/icons/ChevronRight.js.map +1 -1
- package/dist/icons/ChevronUp.cjs +16 -0
- package/dist/icons/{ChevronUp.mjs.map → ChevronUp.cjs.map} +1 -1
- package/dist/icons/ChevronUp.js +5 -7
- package/dist/icons/ChevronUp.js.map +1 -1
- package/dist/icons/Code.cjs +16 -0
- package/dist/icons/Code.cjs.map +1 -0
- package/dist/icons/Code.js +5 -7
- package/dist/icons/Code.js.map +1 -1
- package/dist/icons/Comment.cjs +16 -0
- package/dist/icons/{Comment.mjs.map → Comment.cjs.map} +1 -1
- package/dist/icons/Comment.js +5 -7
- package/dist/icons/Comment.js.map +1 -1
- package/dist/icons/Cross.cjs +21 -0
- package/dist/icons/Cross.cjs.map +1 -0
- package/dist/icons/Cross.js +6 -8
- package/dist/icons/Cross.js.map +1 -1
- package/dist/icons/Delete.cjs +16 -0
- package/dist/icons/{Delete.mjs.map → Delete.cjs.map} +1 -1
- package/dist/icons/Delete.js +5 -7
- package/dist/icons/Delete.js.map +1 -1
- package/dist/icons/Edit.cjs +16 -0
- package/dist/icons/{Edit.mjs.map → Edit.cjs.map} +1 -1
- package/dist/icons/Edit.js +5 -7
- package/dist/icons/Edit.js.map +1 -1
- package/dist/icons/Ellipsis.cjs +31 -0
- package/dist/icons/Ellipsis.cjs.map +1 -0
- package/dist/icons/Ellipsis.js +7 -9
- package/dist/icons/Ellipsis.js.map +1 -1
- package/dist/icons/Emoji.cjs +34 -0
- package/dist/icons/Emoji.cjs.map +1 -0
- package/dist/icons/Emoji.js +9 -11
- package/dist/icons/Emoji.js.map +1 -1
- package/dist/icons/EmojiAdd.cjs +37 -0
- package/dist/icons/EmojiAdd.cjs.map +1 -0
- package/dist/icons/EmojiAdd.js +10 -12
- package/dist/icons/EmojiAdd.js.map +1 -1
- package/dist/icons/H1.cjs +16 -0
- package/dist/icons/{H1.mjs.map → H1.cjs.map} +1 -1
- package/dist/icons/H1.js +5 -7
- package/dist/icons/H1.js.map +1 -1
- package/dist/icons/H2.cjs +16 -0
- package/dist/icons/H2.cjs.map +1 -0
- package/dist/icons/H2.js +5 -7
- package/dist/icons/H2.js.map +1 -1
- package/dist/icons/H3.cjs +16 -0
- package/dist/icons/{H3.mjs.map → H3.cjs.map} +1 -1
- package/dist/icons/H3.js +5 -7
- package/dist/icons/H3.js.map +1 -1
- package/dist/icons/Italic.cjs +16 -0
- package/dist/icons/{Italic.mjs.map → Italic.cjs.map} +1 -1
- package/dist/icons/Italic.js +5 -7
- package/dist/icons/Italic.js.map +1 -1
- package/dist/icons/Lengthen.cjs +16 -0
- package/dist/icons/Lengthen.cjs.map +1 -0
- package/dist/icons/Lengthen.js +5 -7
- package/dist/icons/Lengthen.js.map +1 -1
- package/dist/icons/ListOrdered.cjs +16 -0
- package/dist/icons/{ListOrdered.mjs.map → ListOrdered.cjs.map} +1 -1
- package/dist/icons/ListOrdered.js +5 -7
- package/dist/icons/ListOrdered.js.map +1 -1
- package/dist/icons/ListUnordered.cjs +39 -0
- package/dist/icons/ListUnordered.cjs.map +1 -0
- package/dist/icons/ListUnordered.js +10 -12
- package/dist/icons/ListUnordered.js.map +1 -1
- package/dist/icons/Mention.cjs +21 -0
- package/dist/icons/Mention.cjs.map +1 -0
- package/dist/icons/Mention.js +6 -8
- package/dist/icons/Mention.js.map +1 -1
- package/dist/icons/QuestionMark.cjs +26 -0
- package/dist/icons/QuestionMark.cjs.map +1 -0
- package/dist/icons/QuestionMark.js +7 -9
- package/dist/icons/QuestionMark.js.map +1 -1
- package/dist/icons/Redo.cjs +21 -0
- package/dist/icons/Redo.cjs.map +1 -0
- package/dist/icons/Redo.js +6 -8
- package/dist/icons/Redo.js.map +1 -1
- package/dist/icons/Resolve.cjs +23 -0
- package/dist/icons/Resolve.cjs.map +1 -0
- package/dist/icons/Resolve.js +6 -8
- package/dist/icons/Resolve.js.map +1 -1
- package/dist/icons/Resolved.cjs +25 -0
- package/dist/icons/Resolved.cjs.map +1 -0
- package/dist/icons/Resolved.js +6 -8
- package/dist/icons/Resolved.js.map +1 -1
- package/dist/icons/Restore.cjs +21 -0
- package/dist/icons/Restore.cjs.map +1 -0
- package/dist/icons/Restore.js +6 -8
- package/dist/icons/Restore.js.map +1 -1
- package/dist/icons/Search.cjs +16 -0
- package/dist/icons/{Search.mjs.map → Search.cjs.map} +1 -1
- package/dist/icons/Search.js +5 -7
- package/dist/icons/Search.js.map +1 -1
- package/dist/icons/Send.cjs +16 -0
- package/dist/icons/Send.cjs.map +1 -0
- package/dist/icons/Send.js +5 -7
- package/dist/icons/Send.js.map +1 -1
- package/dist/icons/Shorten.cjs +16 -0
- package/dist/icons/{Shorten.mjs.map → Shorten.cjs.map} +1 -1
- package/dist/icons/Shorten.js +5 -7
- package/dist/icons/Shorten.js.map +1 -1
- package/dist/icons/{Sparkles.mjs → Sparkles.cjs} +8 -6
- package/dist/icons/{Sparkles.mjs.map → Sparkles.cjs.map} +1 -1
- package/dist/icons/Sparkles.js +5 -7
- package/dist/icons/Sparkles.js.map +1 -1
- package/dist/icons/SparklesText.cjs +21 -0
- package/dist/icons/{SparklesText.mjs.map → SparklesText.cjs.map} +1 -1
- package/dist/icons/SparklesText.js +6 -8
- package/dist/icons/SparklesText.js.map +1 -1
- package/dist/icons/Spinner.cjs +17 -0
- package/dist/icons/Spinner.cjs.map +1 -0
- package/dist/icons/Spinner.js +5 -7
- package/dist/icons/Spinner.js.map +1 -1
- package/dist/icons/Strikethrough.cjs +16 -0
- package/dist/icons/{Strikethrough.mjs.map → Strikethrough.cjs.map} +1 -1
- package/dist/icons/Strikethrough.js +5 -7
- package/dist/icons/Strikethrough.js.map +1 -1
- package/dist/icons/Text.cjs +16 -0
- package/dist/icons/{Text.mjs.map → Text.cjs.map} +1 -1
- package/dist/icons/Text.js +5 -7
- package/dist/icons/Text.js.map +1 -1
- package/dist/icons/Translate.cjs +21 -0
- package/dist/icons/{Translate.mjs.map → Translate.cjs.map} +1 -1
- package/dist/icons/Translate.js +6 -8
- package/dist/icons/Translate.js.map +1 -1
- package/dist/icons/Underline.cjs +16 -0
- package/dist/icons/Underline.cjs.map +1 -0
- package/dist/icons/Underline.js +5 -7
- package/dist/icons/Underline.js.map +1 -1
- package/dist/icons/Undo.cjs +21 -0
- package/dist/icons/Undo.cjs.map +1 -0
- package/dist/icons/Undo.js +6 -8
- package/dist/icons/Undo.js.map +1 -1
- package/dist/icons/Warning.cjs +23 -0
- package/dist/icons/Warning.cjs.map +1 -0
- package/dist/icons/Warning.js +6 -8
- package/dist/icons/Warning.js.map +1 -1
- package/dist/icons/index.cjs +96 -0
- package/dist/icons/index.cjs.map +1 -0
- package/dist/icons/index.js +45 -95
- package/dist/icons/index.js.map +1 -1
- package/dist/index.cjs +28 -0
- package/dist/{index.mjs.map → index.cjs.map} +1 -1
- package/dist/index.js +14 -26
- package/dist/index.js.map +1 -1
- package/dist/{overrides.mjs → overrides.cjs} +32 -27
- package/dist/{overrides.mjs.map → overrides.cjs.map} +1 -1
- package/dist/overrides.js +26 -31
- package/dist/overrides.js.map +1 -1
- package/dist/primitives/Comment/{index.mjs → index.cjs} +35 -31
- package/dist/primitives/Comment/{index.mjs.map → index.cjs.map} +1 -1
- package/dist/primitives/Comment/index.js +30 -34
- package/dist/primitives/Comment/index.js.map +1 -1
- package/dist/primitives/Comment/{utils.mjs → utils.cjs} +7 -2
- package/dist/primitives/Comment/{utils.mjs.map → utils.cjs.map} +1 -1
- package/dist/primitives/Comment/utils.js +1 -6
- package/dist/primitives/Comment/utils.js.map +1 -1
- package/dist/primitives/Composer/contexts.cjs +60 -0
- package/dist/primitives/Composer/{contexts.mjs.map → contexts.cjs.map} +1 -1
- package/dist/primitives/Composer/contexts.js +18 -30
- package/dist/primitives/Composer/contexts.js.map +1 -1
- package/dist/primitives/Composer/{index.mjs → index.cjs} +305 -273
- package/dist/primitives/Composer/{index.mjs.map → index.cjs.map} +1 -1
- package/dist/primitives/Composer/index.js +272 -304
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/primitives/Composer/{utils.mjs → utils.cjs} +79 -64
- package/dist/primitives/Composer/{utils.mjs.map → utils.cjs.map} +1 -1
- package/dist/primitives/Composer/utils.js +63 -78
- package/dist/primitives/Composer/utils.js.map +1 -1
- package/dist/primitives/EmojiPicker/contexts.cjs +19 -0
- package/dist/primitives/EmojiPicker/{contexts.mjs.map → contexts.cjs.map} +1 -1
- package/dist/primitives/EmojiPicker/contexts.js +6 -9
- package/dist/primitives/EmojiPicker/contexts.js.map +1 -1
- package/dist/primitives/EmojiPicker/{index.mjs → index.cjs} +96 -92
- package/dist/primitives/EmojiPicker/{index.mjs.map → index.cjs.map} +1 -1
- package/dist/primitives/EmojiPicker/index.js +91 -95
- package/dist/primitives/EmojiPicker/index.js.map +1 -1
- package/dist/primitives/EmojiPicker/{utils.mjs → utils.cjs} +14 -10
- package/dist/primitives/EmojiPicker/{utils.mjs.map → utils.cjs.map} +1 -1
- package/dist/primitives/EmojiPicker/utils.js +9 -13
- package/dist/primitives/EmojiPicker/utils.js.map +1 -1
- package/dist/primitives/FileSize.cjs +36 -0
- package/dist/primitives/{FileSize.mjs.map → FileSize.cjs.map} +1 -1
- package/dist/primitives/FileSize.js +10 -12
- package/dist/primitives/FileSize.js.map +1 -1
- package/dist/primitives/{Timestamp.mjs → Timestamp.cjs} +27 -25
- package/dist/primitives/{Timestamp.mjs.map → Timestamp.cjs.map} +1 -1
- package/dist/primitives/Timestamp.js +24 -26
- package/dist/primitives/Timestamp.js.map +1 -1
- package/dist/primitives/index.cjs +20 -0
- package/dist/primitives/index.cjs.map +1 -0
- package/dist/primitives/index.js +10 -19
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/internal/Emoji.cjs +32 -0
- package/dist/primitives/internal/{Emoji.mjs.map → Emoji.cjs.map} +1 -1
- package/dist/primitives/internal/Emoji.js +9 -11
- package/dist/primitives/internal/Emoji.js.map +1 -1
- package/dist/shared.cjs +13 -0
- package/dist/{shared.mjs.map → shared.cjs.map} +1 -1
- package/dist/shared.js +6 -8
- package/dist/shared.js.map +1 -1
- package/dist/slate/plugins/{auto-formatting.mjs → auto-formatting.cjs} +18 -16
- package/dist/slate/plugins/{auto-formatting.mjs.map → auto-formatting.cjs.map} +1 -1
- package/dist/slate/plugins/auto-formatting.js +15 -17
- package/dist/slate/plugins/auto-formatting.js.map +1 -1
- package/dist/slate/plugins/{auto-links.mjs → auto-links.cjs} +43 -40
- package/dist/slate/plugins/{auto-links.mjs.map → auto-links.cjs.map} +1 -1
- package/dist/slate/plugins/auto-links.js +39 -42
- package/dist/slate/plugins/auto-links.js.map +1 -1
- package/dist/slate/plugins/{custom-links.mjs → custom-links.cjs} +19 -16
- package/dist/slate/plugins/{custom-links.mjs.map → custom-links.cjs.map} +1 -1
- package/dist/slate/plugins/custom-links.js +15 -18
- package/dist/slate/plugins/custom-links.js.map +1 -1
- package/dist/slate/plugins/empty-clear-formatting.cjs +18 -0
- package/dist/slate/plugins/{empty-clear-formatting.mjs.map → empty-clear-formatting.cjs.map} +1 -1
- package/dist/slate/plugins/empty-clear-formatting.js +5 -7
- package/dist/slate/plugins/empty-clear-formatting.js.map +1 -1
- package/dist/slate/plugins/mentions.cjs +129 -0
- package/dist/slate/plugins/{mentions.mjs.map → mentions.cjs.map} +1 -1
- package/dist/slate/plugins/mentions.js +35 -42
- package/dist/slate/plugins/mentions.js.map +1 -1
- package/dist/slate/plugins/normalize.cjs +28 -0
- package/dist/slate/plugins/normalize.cjs.map +1 -0
- package/dist/slate/plugins/normalize.js +8 -10
- package/dist/slate/plugins/normalize.js.map +1 -1
- package/dist/slate/plugins/{paste.mjs → paste.cjs} +14 -12
- package/dist/slate/plugins/{paste.mjs.map → paste.cjs.map} +1 -1
- package/dist/slate/plugins/paste.js +11 -13
- package/dist/slate/plugins/paste.js.map +1 -1
- package/dist/slate/utils/get-character.cjs +50 -0
- package/dist/slate/utils/{get-character.mjs.map → get-character.cjs.map} +1 -1
- package/dist/slate/utils/get-character.js +10 -13
- package/dist/slate/utils/get-character.js.map +1 -1
- package/dist/slate/utils/get-dom-range.cjs +17 -0
- package/dist/slate/utils/{get-dom-range.mjs.map → get-dom-range.cjs.map} +1 -1
- package/dist/slate/utils/get-dom-range.js +3 -5
- package/dist/slate/utils/get-dom-range.js.map +1 -1
- package/dist/slate/utils/{get-match-range.mjs → get-match-range.cjs} +14 -12
- package/dist/slate/utils/{get-match-range.mjs.map → get-match-range.cjs.map} +1 -1
- package/dist/slate/utils/get-match-range.js +11 -13
- package/dist/slate/utils/get-match-range.js.map +1 -1
- package/dist/slate/utils/is-empty-string.cjs +8 -0
- package/dist/slate/utils/is-empty-string.cjs.map +1 -0
- package/dist/slate/utils/is-empty-string.js +1 -3
- package/dist/slate/utils/is-empty-string.js.map +1 -1
- package/dist/slate/utils/is-empty.cjs +27 -0
- package/dist/slate/utils/{is-empty.mjs.map → is-empty.cjs.map} +1 -1
- package/dist/slate/utils/is-empty.js +8 -10
- package/dist/slate/utils/is-empty.js.map +1 -1
- package/dist/slate/utils/{is-text.mjs → is-text.cjs} +5 -2
- package/dist/slate/utils/{is-text.mjs.map → is-text.cjs.map} +1 -1
- package/dist/slate/utils/is-text.js +1 -4
- package/dist/slate/utils/is-text.js.map +1 -1
- package/dist/slate/utils/{is-whitespace-character.mjs → is-whitespace-character.cjs} +4 -2
- package/dist/slate/utils/{is-whitespace-character.mjs.map → is-whitespace-character.cjs.map} +1 -1
- package/dist/slate/utils/is-whitespace-character.js +1 -3
- package/dist/slate/utils/is-whitespace-character.js.map +1 -1
- package/dist/slate/utils/marks.cjs +62 -0
- package/dist/slate/utils/{marks.mjs.map → marks.cjs.map} +1 -1
- package/dist/slate/utils/marks.js +12 -19
- package/dist/slate/utils/marks.js.map +1 -1
- package/dist/slate/utils/selection-contains-inlines.cjs +36 -0
- package/dist/slate/utils/selection-contains-inlines.cjs.map +1 -0
- package/dist/slate/utils/selection-contains-inlines.js +7 -9
- package/dist/slate/utils/selection-contains-inlines.js.map +1 -1
- package/dist/utils/{Persist.mjs → Persist.cjs} +26 -22
- package/dist/utils/{Persist.mjs.map → Persist.cjs.map} +1 -1
- package/dist/utils/Persist.js +21 -25
- package/dist/utils/Persist.js.map +1 -1
- package/dist/utils/Portal.cjs +29 -0
- package/dist/utils/{Portal.mjs.map → Portal.cjs.map} +1 -1
- package/dist/utils/Portal.js +9 -11
- package/dist/utils/Portal.js.map +1 -1
- package/dist/utils/{capitalize.mjs → capitalize.cjs} +4 -2
- package/dist/utils/capitalize.cjs.map +1 -0
- package/dist/utils/capitalize.js +1 -3
- package/dist/utils/capitalize.js.map +1 -1
- package/dist/utils/{clamp.mjs → clamp.cjs} +4 -2
- package/dist/utils/clamp.cjs.map +1 -0
- package/dist/utils/clamp.js +1 -3
- package/dist/utils/clamp.js.map +1 -1
- package/dist/utils/{class-names.mjs → class-names.cjs} +4 -2
- package/dist/utils/{class-names.mjs.map → class-names.cjs.map} +1 -1
- package/dist/utils/class-names.js +1 -3
- package/dist/utils/class-names.js.map +1 -1
- package/dist/utils/{data-transfer.mjs → data-transfer.cjs} +6 -4
- package/dist/utils/{data-transfer.mjs.map → data-transfer.cjs.map} +1 -1
- package/dist/utils/data-transfer.js +3 -5
- package/dist/utils/data-transfer.js.map +1 -1
- package/dist/utils/{download.mjs → download.cjs} +4 -2
- package/dist/utils/download.cjs.map +1 -0
- package/dist/utils/download.js +1 -3
- package/dist/utils/download.js.map +1 -1
- package/dist/utils/exists.cjs +8 -0
- package/dist/utils/exists.cjs.map +1 -0
- package/dist/utils/exists.js +1 -3
- package/dist/utils/exists.js.map +1 -1
- package/dist/utils/{find-last-index.mjs → find-last-index.cjs} +4 -2
- package/dist/utils/find-last-index.cjs.map +1 -0
- package/dist/utils/find-last-index.js +1 -3
- package/dist/utils/find-last-index.js.map +1 -1
- package/dist/utils/{format-file-size.mjs → format-file-size.cjs} +6 -4
- package/dist/utils/format-file-size.cjs.map +1 -0
- package/dist/utils/format-file-size.js +3 -5
- package/dist/utils/format-file-size.js.map +1 -1
- package/dist/utils/{get-initials.mjs → get-initials.cjs} +4 -2
- package/dist/utils/get-initials.cjs.map +1 -0
- package/dist/utils/get-initials.js +1 -3
- package/dist/utils/get-initials.js.map +1 -1
- package/dist/utils/intl.cjs +30 -0
- package/dist/utils/{intl.mjs.map → intl.cjs.map} +1 -1
- package/dist/utils/intl.js +6 -11
- package/dist/utils/intl.js.map +1 -1
- package/dist/utils/{is-apple.mjs → is-apple.cjs} +4 -2
- package/dist/utils/is-apple.cjs.map +1 -0
- package/dist/utils/is-apple.js +1 -3
- package/dist/utils/is-apple.js.map +1 -1
- package/dist/utils/{is-key.mjs → is-key.cjs} +6 -4
- package/dist/utils/{is-key.mjs.map → is-key.cjs.map} +1 -1
- package/dist/utils/is-key.js +3 -5
- package/dist/utils/is-key.js.map +1 -1
- package/dist/utils/{memoize.mjs → memoize.cjs} +6 -4
- package/dist/utils/memoize.cjs.map +1 -0
- package/dist/utils/memoize.js +3 -5
- package/dist/utils/memoize.js.map +1 -1
- package/dist/utils/{pluralize.mjs → pluralize.cjs} +4 -2
- package/dist/utils/pluralize.cjs.map +1 -0
- package/dist/utils/pluralize.js +1 -3
- package/dist/utils/pluralize.js.map +1 -1
- package/dist/utils/{request-idle-callback.mjs → request-idle-callback.cjs} +5 -2
- package/dist/utils/{request-idle-callback.mjs.map → request-idle-callback.cjs.map} +1 -1
- package/dist/utils/request-idle-callback.js +1 -4
- package/dist/utils/request-idle-callback.js.map +1 -1
- package/dist/utils/{request-submit.mjs → request-submit.cjs} +4 -2
- package/dist/utils/request-submit.cjs.map +1 -0
- package/dist/utils/request-submit.js +1 -3
- package/dist/utils/request-submit.js.map +1 -1
- package/dist/utils/{url.mjs → url.cjs} +4 -2
- package/dist/utils/url.cjs.map +1 -0
- package/dist/utils/url.js +1 -3
- package/dist/utils/url.js.map +1 -1
- package/dist/utils/{use-controllable-state.mjs → use-controllable-state.cjs} +11 -9
- package/dist/utils/{use-controllable-state.mjs.map → use-controllable-state.cjs.map} +1 -1
- package/dist/utils/use-controllable-state.js +8 -10
- package/dist/utils/use-controllable-state.js.map +1 -1
- package/dist/utils/use-index.cjs +32 -0
- package/dist/utils/{use-index.mjs.map → use-index.cjs.map} +1 -1
- package/dist/utils/use-index.js +11 -13
- package/dist/utils/use-index.js.map +1 -1
- package/dist/utils/use-initial.cjs +11 -0
- package/dist/utils/{use-initial.mjs.map → use-initial.cjs.map} +1 -1
- package/dist/utils/use-initial.js +3 -5
- package/dist/utils/use-initial.js.map +1 -1
- package/dist/utils/{use-interval.mjs → use-interval.cjs} +8 -6
- package/dist/utils/use-interval.cjs.map +1 -0
- package/dist/utils/use-interval.js +5 -7
- package/dist/utils/use-interval.js.map +1 -1
- package/dist/utils/use-latest.cjs +14 -0
- package/dist/utils/{use-latest.mjs.map → use-latest.cjs.map} +1 -1
- package/dist/utils/use-latest.js +4 -6
- package/dist/utils/use-latest.js.map +1 -1
- package/dist/utils/use-observable.cjs +15 -0
- package/dist/utils/{use-observable.mjs.map → use-observable.cjs.map} +1 -1
- package/dist/utils/use-observable.js +5 -7
- package/dist/utils/use-observable.js.map +1 -1
- package/dist/utils/{use-refs.mjs → use-refs.cjs} +6 -4
- package/dist/utils/{use-refs.mjs.map → use-refs.cjs.map} +1 -1
- package/dist/utils/use-refs.js +3 -5
- package/dist/utils/use-refs.js.map +1 -1
- package/dist/utils/use-rerender.cjs +14 -0
- package/dist/utils/{use-rerender.mjs.map → use-rerender.cjs.map} +1 -1
- package/dist/utils/use-rerender.js +3 -5
- package/dist/utils/use-rerender.js.map +1 -1
- package/dist/utils/{use-visible.mjs → use-visible.cjs} +11 -8
- package/dist/utils/{use-visible.mjs.map → use-visible.cjs.map} +1 -1
- package/dist/utils/use-visible.js +7 -10
- package/dist/utils/use-visible.js.map +1 -1
- package/dist/utils/{use-window-focus.mjs → use-window-focus.cjs} +6 -4
- package/dist/utils/use-window-focus.cjs.map +1 -0
- package/dist/utils/use-window-focus.js +3 -5
- package/dist/utils/use-window-focus.js.map +1 -1
- package/dist/utils/{visually-hidden.mjs → visually-hidden.cjs} +4 -2
- package/dist/utils/visually-hidden.cjs.map +1 -0
- package/dist/utils/visually-hidden.js +1 -3
- package/dist/utils/visually-hidden.js.map +1 -1
- package/dist/utils/{wrap.mjs → wrap.cjs} +4 -2
- package/dist/utils/wrap.cjs.map +1 -0
- package/dist/utils/wrap.js +1 -3
- package/dist/utils/wrap.js.map +1 -1
- package/dist/version.cjs +10 -0
- package/dist/{version.mjs.map → version.cjs.map} +1 -1
- package/dist/version.js +3 -7
- package/dist/version.js.map +1 -1
- package/package.json +28 -27
- package/styles/dark/attributes.css.d.cts +1 -0
- package/styles/dark/media-query.css.d.cts +1 -0
- package/styles.css.d.cts +1 -0
- package/dist/_private/index.mjs +0 -55
- package/dist/_private/index.mjs.map +0 -1
- package/dist/components/HistoryVersionSummary.mjs +0 -43
- package/dist/components/HistoryVersionSummaryList.mjs +0 -23
- package/dist/components/InboxNotificationList.mjs +0 -40
- package/dist/components/internal/Avatar.mjs +0 -46
- package/dist/components/internal/Button.mjs +0 -76
- package/dist/components/internal/Dropdown.mjs +0 -67
- package/dist/components/internal/Emoji.mjs +0 -17
- package/dist/components/internal/EmojiPicker.mjs +0 -184
- package/dist/components/internal/List.mjs +0 -34
- package/dist/components/internal/Room.mjs +0 -22
- package/dist/components/internal/Tooltip.mjs +0 -109
- package/dist/components/internal/User.mjs +0 -26
- package/dist/components.mjs +0 -43
- package/dist/config.mjs +0 -36
- package/dist/icon.mjs +0 -33
- package/dist/icon.mjs.map +0 -1
- package/dist/icons/ArrowCornerDownRight.mjs +0 -14
- package/dist/icons/ArrowCornerUpRight.mjs +0 -14
- package/dist/icons/ArrowCornerUpRight.mjs.map +0 -1
- package/dist/icons/ArrowDown.mjs +0 -14
- package/dist/icons/ArrowDown.mjs.map +0 -1
- package/dist/icons/ArrowUp.mjs +0 -14
- package/dist/icons/ArrowUp.mjs.map +0 -1
- package/dist/icons/Blockquote.mjs +0 -14
- package/dist/icons/Blockquote.mjs.map +0 -1
- package/dist/icons/Bold.mjs +0 -14
- package/dist/icons/Check.mjs +0 -14
- package/dist/icons/Check.mjs.map +0 -1
- package/dist/icons/ChevronDown.mjs +0 -14
- package/dist/icons/ChevronLeft.mjs +0 -14
- package/dist/icons/ChevronRight.mjs +0 -14
- package/dist/icons/ChevronUp.mjs +0 -14
- package/dist/icons/Code.mjs +0 -14
- package/dist/icons/Code.mjs.map +0 -1
- package/dist/icons/Comment.mjs +0 -14
- package/dist/icons/Cross.mjs +0 -19
- package/dist/icons/Cross.mjs.map +0 -1
- package/dist/icons/Delete.mjs +0 -14
- package/dist/icons/Edit.mjs +0 -14
- package/dist/icons/Ellipsis.mjs +0 -29
- package/dist/icons/Ellipsis.mjs.map +0 -1
- package/dist/icons/Emoji.mjs +0 -32
- package/dist/icons/Emoji.mjs.map +0 -1
- package/dist/icons/EmojiAdd.mjs +0 -35
- package/dist/icons/EmojiAdd.mjs.map +0 -1
- package/dist/icons/H1.mjs +0 -14
- package/dist/icons/H2.mjs +0 -14
- package/dist/icons/H2.mjs.map +0 -1
- package/dist/icons/H3.mjs +0 -14
- package/dist/icons/Italic.mjs +0 -14
- package/dist/icons/Lengthen.mjs +0 -14
- package/dist/icons/Lengthen.mjs.map +0 -1
- package/dist/icons/ListOrdered.mjs +0 -14
- package/dist/icons/ListUnordered.mjs +0 -37
- package/dist/icons/ListUnordered.mjs.map +0 -1
- package/dist/icons/Mention.mjs +0 -19
- package/dist/icons/Mention.mjs.map +0 -1
- package/dist/icons/QuestionMark.mjs +0 -24
- package/dist/icons/QuestionMark.mjs.map +0 -1
- package/dist/icons/Redo.mjs +0 -19
- package/dist/icons/Redo.mjs.map +0 -1
- package/dist/icons/Resolve.mjs +0 -21
- package/dist/icons/Resolve.mjs.map +0 -1
- package/dist/icons/Resolved.mjs +0 -23
- package/dist/icons/Resolved.mjs.map +0 -1
- package/dist/icons/Restore.mjs +0 -19
- package/dist/icons/Restore.mjs.map +0 -1
- package/dist/icons/Search.mjs +0 -14
- package/dist/icons/Send.mjs +0 -14
- package/dist/icons/Send.mjs.map +0 -1
- package/dist/icons/Shorten.mjs +0 -14
- package/dist/icons/SparklesText.mjs +0 -19
- package/dist/icons/Spinner.mjs +0 -15
- package/dist/icons/Spinner.mjs.map +0 -1
- package/dist/icons/Strikethrough.mjs +0 -14
- package/dist/icons/Text.mjs +0 -14
- package/dist/icons/Translate.mjs +0 -19
- package/dist/icons/Underline.mjs +0 -14
- package/dist/icons/Underline.mjs.map +0 -1
- package/dist/icons/Undo.mjs +0 -19
- package/dist/icons/Undo.mjs.map +0 -1
- package/dist/icons/Warning.mjs +0 -21
- package/dist/icons/Warning.mjs.map +0 -1
- package/dist/icons/index.mjs +0 -46
- package/dist/icons/index.mjs.map +0 -1
- package/dist/index.mjs +0 -16
- package/dist/primitives/Composer/contexts.mjs +0 -48
- package/dist/primitives/EmojiPicker/contexts.mjs +0 -16
- package/dist/primitives/FileSize.mjs +0 -34
- package/dist/primitives/index.mjs +0 -11
- package/dist/primitives/index.mjs.map +0 -1
- package/dist/primitives/internal/Emoji.mjs +0 -30
- package/dist/shared.mjs +0 -11
- package/dist/slate/plugins/empty-clear-formatting.mjs +0 -16
- package/dist/slate/plugins/mentions.mjs +0 -122
- package/dist/slate/plugins/normalize.mjs +0 -26
- package/dist/slate/plugins/normalize.mjs.map +0 -1
- package/dist/slate/utils/get-character.mjs +0 -47
- package/dist/slate/utils/get-dom-range.mjs +0 -15
- package/dist/slate/utils/is-empty-string.mjs +0 -6
- package/dist/slate/utils/is-empty-string.mjs.map +0 -1
- package/dist/slate/utils/is-empty.mjs +0 -25
- package/dist/slate/utils/marks.mjs +0 -55
- package/dist/slate/utils/selection-contains-inlines.mjs +0 -34
- package/dist/slate/utils/selection-contains-inlines.mjs.map +0 -1
- package/dist/utils/Portal.mjs +0 -27
- package/dist/utils/capitalize.mjs.map +0 -1
- package/dist/utils/clamp.mjs.map +0 -1
- package/dist/utils/download.mjs.map +0 -1
- package/dist/utils/exists.mjs +0 -6
- package/dist/utils/exists.mjs.map +0 -1
- package/dist/utils/find-last-index.mjs.map +0 -1
- package/dist/utils/format-file-size.mjs.map +0 -1
- package/dist/utils/get-initials.mjs.map +0 -1
- package/dist/utils/intl.mjs +0 -25
- package/dist/utils/is-apple.mjs.map +0 -1
- package/dist/utils/memoize.mjs.map +0 -1
- package/dist/utils/pluralize.mjs.map +0 -1
- package/dist/utils/request-submit.mjs.map +0 -1
- package/dist/utils/url.mjs.map +0 -1
- package/dist/utils/use-index.mjs +0 -30
- package/dist/utils/use-initial.mjs +0 -9
- package/dist/utils/use-interval.mjs.map +0 -1
- package/dist/utils/use-latest.mjs +0 -12
- package/dist/utils/use-observable.mjs +0 -13
- package/dist/utils/use-rerender.mjs +0 -12
- package/dist/utils/use-window-focus.mjs.map +0 -1
- package/dist/utils/visually-hidden.mjs.map +0 -1
- package/dist/utils/wrap.mjs.map +0 -1
- package/dist/version.mjs +0 -6
- /package/dist/_private/{index.d.mts → index.d.cts} +0 -0
- /package/dist/{index.d.mts → index.d.cts} +0 -0
- /package/dist/primitives/{index.d.mts → index.d.cts} +0 -0
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var Tooltip = require('./Tooltip.js');
|
|
16
|
-
var utils = require('../../primitives/Composer/utils.js');
|
|
2
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
+
import { useRoomAttachmentUrl } from '@liveblocks/react/_private';
|
|
4
|
+
import { memo, useMemo, useState, useCallback } from 'react';
|
|
5
|
+
import { CrossIcon } from '../../icons/Cross.js';
|
|
6
|
+
import { SpinnerIcon } from '../../icons/Spinner.js';
|
|
7
|
+
import { WarningIcon } from '../../icons/Warning.js';
|
|
8
|
+
import { useOverrides } from '../../overrides.js';
|
|
9
|
+
import '../../primitives/index.js';
|
|
10
|
+
import { useComposerAttachmentsContextOrNull } from '../../primitives/Composer/contexts.js';
|
|
11
|
+
import { classNames } from '../../utils/class-names.js';
|
|
12
|
+
import { formatFileSize } from '../../utils/format-file-size.js';
|
|
13
|
+
import { Tooltip } from './Tooltip.js';
|
|
14
|
+
import { AttachmentTooLargeError } from '../../primitives/Composer/utils.js';
|
|
17
15
|
|
|
18
16
|
|
|
19
17
|
const MAX_DISPLAYED_MEDIA_SIZE = 60 * 1024 * 1024;
|
|
@@ -24,35 +22,35 @@ function splitFileName(name) {
|
|
|
24
22
|
}
|
|
25
23
|
function getAttachmentIconGlyph(mimeType) {
|
|
26
24
|
if (mimeType === "application/zip" || mimeType === "application/gzip" || mimeType === "application/vnd.rar" || mimeType === "application/x-rar-compressed" || mimeType === "application/x-7z-compressed" || mimeType === "application/x-zip-compressed" || mimeType === "application/x-tar" || mimeType === "application/x-bzip" || mimeType === "application/x-bzip2") {
|
|
27
|
-
return /* @__PURE__ */
|
|
25
|
+
return /* @__PURE__ */ jsx("path", {
|
|
28
26
|
d: "M13 15h2v1h-1.5a.5.5 0 0 0 0 1H15v1h-1.5a.5.5 0 0 0 0 1H15v1h-1.5a.5.5 0 0 0 0 1h1a.5.5 0 0 0 .5-.5V20h1.5a.5.5 0 0 0 0-1H15v-1h1.5a.5.5 0 0 0 0-1H15v-1h1.5a.5.5 0 0 0 .5-.5V15a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2Z"
|
|
29
27
|
});
|
|
30
28
|
}
|
|
31
29
|
if (mimeType.startsWith("text/") || mimeType.startsWith("font/") || mimeType.startsWith("application/")) {
|
|
32
|
-
return /* @__PURE__ */
|
|
30
|
+
return /* @__PURE__ */ jsx("path", {
|
|
33
31
|
d: "M10 16a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 0 1h-8a.5.5 0 0 1-.5-.5Z"
|
|
34
32
|
});
|
|
35
33
|
}
|
|
36
34
|
if (mimeType.startsWith("image/")) {
|
|
37
|
-
return /* @__PURE__ */
|
|
35
|
+
return /* @__PURE__ */ jsx("path", {
|
|
38
36
|
d: "M12 16h6a1 1 0 0 1 1 1v3l-1.293-1.293a1 1 0 0 0-1.414 0L14.09 20.91l-.464-.386a1 1 0 0 0-1.265-.013l-1.231.985A.995.995 0 0 1 11 21v-4a1 1 0 0 1 1-1Zm-2 1a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2v-4Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"
|
|
39
37
|
});
|
|
40
38
|
}
|
|
41
39
|
if (mimeType.startsWith("video/")) {
|
|
42
|
-
return /* @__PURE__ */
|
|
40
|
+
return /* @__PURE__ */ jsx("path", {
|
|
43
41
|
d: "M12 15.71a1 1 0 0 1 1.49-.872l4.96 2.79a1 1 0 0 1 0 1.744l-4.96 2.79A1 1 0 0 1 12 21.29v-5.58Z"
|
|
44
42
|
});
|
|
45
43
|
}
|
|
46
44
|
if (mimeType.startsWith("audio/")) {
|
|
47
|
-
return /* @__PURE__ */
|
|
45
|
+
return /* @__PURE__ */ jsx("path", {
|
|
48
46
|
d: "M15 15a.5.5 0 0 0-.5.5v7a.5.5 0 0 0 1 0v-7a.5.5 0 0 0-.5-.5Zm-2.5 2.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3Zm-2 1a.5.5 0 0 1 1 0v1a.5.5 0 0 1-1 0v-1Zm6-1a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3ZM19 16a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v-5a.5.5 0 0 0-.5-.5Z"
|
|
49
47
|
});
|
|
50
48
|
}
|
|
51
49
|
return null;
|
|
52
50
|
}
|
|
53
|
-
const AttachmentFileIcon =
|
|
54
|
-
const iconGlyph =
|
|
55
|
-
return /* @__PURE__ */
|
|
51
|
+
const AttachmentFileIcon = memo(({ mimeType }) => {
|
|
52
|
+
const iconGlyph = useMemo(() => getAttachmentIconGlyph(mimeType), [mimeType]);
|
|
53
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
56
54
|
className: "lb-attachment-icon",
|
|
57
55
|
width: 30,
|
|
58
56
|
height: 30,
|
|
@@ -62,19 +60,19 @@ const AttachmentFileIcon = react.memo(({ mimeType }) => {
|
|
|
62
60
|
clipRule: "evenodd",
|
|
63
61
|
xmlns: "http://www.w3.org/2000/svg",
|
|
64
62
|
children: [
|
|
65
|
-
/* @__PURE__ */
|
|
63
|
+
/* @__PURE__ */ jsx("path", {
|
|
66
64
|
d: "M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z",
|
|
67
65
|
className: "lb-attachment-icon-shadow"
|
|
68
66
|
}),
|
|
69
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ jsx("path", {
|
|
70
68
|
d: "M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z",
|
|
71
69
|
className: "lb-attachment-icon-background"
|
|
72
70
|
}),
|
|
73
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ jsx("path", {
|
|
74
72
|
d: "M14.382 3.037a4 4 0 0 1 2.29 1.135l6.156 6.157a4 4 0 0 1 1.136 2.289A2 2 0 0 0 22 11h-4a2 2 0 0 1-2-2V5a2 2 0 0 0-1.618-1.963Z",
|
|
75
73
|
className: "lb-attachment-icon-fold"
|
|
76
74
|
}),
|
|
77
|
-
iconGlyph && /* @__PURE__ */
|
|
75
|
+
iconGlyph && /* @__PURE__ */ jsx("g", {
|
|
78
76
|
className: "lb-attachment-icon-glyph",
|
|
79
77
|
children: iconGlyph
|
|
80
78
|
})
|
|
@@ -86,18 +84,18 @@ function AttachmentImagePreview({
|
|
|
86
84
|
markPreviewAsUnsupported,
|
|
87
85
|
roomId
|
|
88
86
|
}) {
|
|
89
|
-
const { url } =
|
|
90
|
-
const [isLoaded, setLoaded] =
|
|
91
|
-
const handleLoad =
|
|
87
|
+
const { url } = useRoomAttachmentUrl(attachment.id, roomId);
|
|
88
|
+
const [isLoaded, setLoaded] = useState(false);
|
|
89
|
+
const handleLoad = useCallback(() => {
|
|
92
90
|
setLoaded(true);
|
|
93
91
|
}, []);
|
|
94
|
-
return /* @__PURE__ */
|
|
92
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
95
93
|
children: [
|
|
96
|
-
!isLoaded ? /* @__PURE__ */
|
|
97
|
-
url ? /* @__PURE__ */
|
|
94
|
+
!isLoaded ? /* @__PURE__ */ jsx(SpinnerIcon, {}) : null,
|
|
95
|
+
url ? /* @__PURE__ */ jsx("div", {
|
|
98
96
|
className: "lb-attachment-preview-media",
|
|
99
97
|
"data-hidden": !isLoaded ? "" : void 0,
|
|
100
|
-
children: /* @__PURE__ */
|
|
98
|
+
children: /* @__PURE__ */ jsx("img", {
|
|
101
99
|
src: url,
|
|
102
100
|
loading: "lazy",
|
|
103
101
|
onLoad: handleLoad,
|
|
@@ -112,18 +110,18 @@ function AttachmentVideoPreview({
|
|
|
112
110
|
markPreviewAsUnsupported,
|
|
113
111
|
roomId
|
|
114
112
|
}) {
|
|
115
|
-
const { url } =
|
|
116
|
-
const [isLoaded, setLoaded] =
|
|
117
|
-
const handleLoad =
|
|
113
|
+
const { url } = useRoomAttachmentUrl(attachment.id, roomId);
|
|
114
|
+
const [isLoaded, setLoaded] = useState(false);
|
|
115
|
+
const handleLoad = useCallback(() => {
|
|
118
116
|
setLoaded(true);
|
|
119
117
|
}, []);
|
|
120
|
-
return /* @__PURE__ */
|
|
118
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
121
119
|
children: [
|
|
122
|
-
!isLoaded ? /* @__PURE__ */
|
|
123
|
-
url ? /* @__PURE__ */
|
|
120
|
+
!isLoaded ? /* @__PURE__ */ jsx(SpinnerIcon, {}) : null,
|
|
121
|
+
url ? /* @__PURE__ */ jsx("div", {
|
|
124
122
|
className: "lb-attachment-preview-media",
|
|
125
123
|
"data-hidden": !isLoaded ? "" : void 0,
|
|
126
|
-
children: /* @__PURE__ */
|
|
124
|
+
children: /* @__PURE__ */ jsx("video", {
|
|
127
125
|
src: url,
|
|
128
126
|
onLoadedData: handleLoad,
|
|
129
127
|
onError: markPreviewAsUnsupported
|
|
@@ -137,46 +135,46 @@ function AttachmentPreview({
|
|
|
137
135
|
allowMediaPreview = true,
|
|
138
136
|
roomId
|
|
139
137
|
}) {
|
|
140
|
-
const [isUnsupportedPreview, setUnsupportedPreview] =
|
|
138
|
+
const [isUnsupportedPreview, setUnsupportedPreview] = useState(false);
|
|
141
139
|
const isUploaded = attachment.type === "attachment" || attachment.status === "uploaded";
|
|
142
140
|
function markPreviewAsUnsupported() {
|
|
143
141
|
setUnsupportedPreview(true);
|
|
144
142
|
}
|
|
145
143
|
if (!isUnsupportedPreview && allowMediaPreview && isUploaded && attachment.size <= MAX_DISPLAYED_MEDIA_SIZE) {
|
|
146
144
|
if (attachment.mimeType.startsWith("image/")) {
|
|
147
|
-
return /* @__PURE__ */
|
|
145
|
+
return /* @__PURE__ */ jsx(AttachmentImagePreview, {
|
|
148
146
|
attachment,
|
|
149
147
|
markPreviewAsUnsupported,
|
|
150
148
|
roomId
|
|
151
149
|
});
|
|
152
150
|
}
|
|
153
151
|
if (attachment.mimeType.startsWith("video/")) {
|
|
154
|
-
return /* @__PURE__ */
|
|
152
|
+
return /* @__PURE__ */ jsx(AttachmentVideoPreview, {
|
|
155
153
|
attachment,
|
|
156
154
|
markPreviewAsUnsupported,
|
|
157
155
|
roomId
|
|
158
156
|
});
|
|
159
157
|
}
|
|
160
158
|
}
|
|
161
|
-
return /* @__PURE__ */
|
|
159
|
+
return /* @__PURE__ */ jsx(AttachmentFileIcon, {
|
|
162
160
|
mimeType: attachment.mimeType
|
|
163
161
|
});
|
|
164
162
|
}
|
|
165
163
|
function AttachmentName({
|
|
166
164
|
attachment
|
|
167
165
|
}) {
|
|
168
|
-
const { base: fileBaseName, extension: fileExtension } =
|
|
166
|
+
const { base: fileBaseName, extension: fileExtension } = useMemo(() => {
|
|
169
167
|
return splitFileName(attachment.name);
|
|
170
168
|
}, [attachment.name]);
|
|
171
|
-
return /* @__PURE__ */
|
|
169
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
172
170
|
className: "lb-attachment-name",
|
|
173
171
|
title: attachment.name,
|
|
174
172
|
children: [
|
|
175
|
-
/* @__PURE__ */
|
|
173
|
+
/* @__PURE__ */ jsx("span", {
|
|
176
174
|
className: "lb-attachment-name-base",
|
|
177
175
|
children: fileBaseName
|
|
178
176
|
}),
|
|
179
|
-
fileExtension && /* @__PURE__ */
|
|
177
|
+
fileExtension && /* @__PURE__ */ jsx("span", {
|
|
180
178
|
className: "lb-attachment-name-extension",
|
|
181
179
|
children: fileExtension
|
|
182
180
|
})
|
|
@@ -184,7 +182,7 @@ function AttachmentName({
|
|
|
184
182
|
});
|
|
185
183
|
}
|
|
186
184
|
function useClickOnKeyDown(onKeyDown) {
|
|
187
|
-
const handleKeyDown =
|
|
185
|
+
const handleKeyDown = useCallback(
|
|
188
186
|
(event) => {
|
|
189
187
|
onKeyDown?.(event);
|
|
190
188
|
if (event.isDefaultPrevented()) {
|
|
@@ -204,9 +202,9 @@ function useClickOnKeyDown(onKeyDown) {
|
|
|
204
202
|
);
|
|
205
203
|
return handleKeyDown;
|
|
206
204
|
}
|
|
207
|
-
function useAttachmentContent(attachment, overrides
|
|
208
|
-
const $ =
|
|
209
|
-
const composerAttachmentsContext =
|
|
205
|
+
function useAttachmentContent(attachment, overrides) {
|
|
206
|
+
const $ = useOverrides(overrides);
|
|
207
|
+
const composerAttachmentsContext = useComposerAttachmentsContextOrNull();
|
|
210
208
|
const isInComposer = Boolean(composerAttachmentsContext);
|
|
211
209
|
const maxAttachmentSize = composerAttachmentsContext?.maxAttachmentSize;
|
|
212
210
|
const status = attachment.type === "localAttachment" ? attachment.status : void 0;
|
|
@@ -214,19 +212,19 @@ function useAttachmentContent(attachment, overrides$1) {
|
|
|
214
212
|
const isError = status === "error";
|
|
215
213
|
let description;
|
|
216
214
|
if (attachment.type === "localAttachment" && attachment.status === "error") {
|
|
217
|
-
if (attachment.error instanceof
|
|
215
|
+
if (attachment.error instanceof AttachmentTooLargeError) {
|
|
218
216
|
if (attachment.error.origin === "server") {
|
|
219
217
|
description = $.ATTACHMENT_TOO_LARGE();
|
|
220
218
|
} else {
|
|
221
219
|
description = $.ATTACHMENT_TOO_LARGE(
|
|
222
|
-
maxAttachmentSize ? formatFileSize
|
|
220
|
+
maxAttachmentSize ? formatFileSize(maxAttachmentSize, $.locale) : void 0
|
|
223
221
|
);
|
|
224
222
|
}
|
|
225
223
|
} else {
|
|
226
224
|
description = $.ATTACHMENT_ERROR(attachment.error);
|
|
227
225
|
}
|
|
228
226
|
} else {
|
|
229
|
-
description = formatFileSize
|
|
227
|
+
description = formatFileSize(attachment.size, $.locale);
|
|
230
228
|
}
|
|
231
229
|
const deleteLabel = isInComposer ? $.COMPOSER_REMOVE_ATTACHMENT : $.COMMENT_DELETE_ATTACHMENT;
|
|
232
230
|
return {
|
|
@@ -249,7 +247,7 @@ function MediaAttachment({
|
|
|
249
247
|
...props
|
|
250
248
|
}) {
|
|
251
249
|
const { isUploading, isError, description, deleteLabel } = useAttachmentContent(attachment, overrides);
|
|
252
|
-
const handleDeletePointerDown =
|
|
250
|
+
const handleDeletePointerDown = useCallback(
|
|
253
251
|
(event) => {
|
|
254
252
|
if (preventFocusOnDelete) {
|
|
255
253
|
event.preventDefault();
|
|
@@ -258,8 +256,8 @@ function MediaAttachment({
|
|
|
258
256
|
[preventFocusOnDelete]
|
|
259
257
|
);
|
|
260
258
|
const handleKeyDown = useClickOnKeyDown(onKeyDown);
|
|
261
|
-
return /* @__PURE__ */
|
|
262
|
-
className: classNames
|
|
259
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
260
|
+
className: classNames("lb-attachment lb-media-attachment", className),
|
|
263
261
|
"data-error": isError ? "" : void 0,
|
|
264
262
|
...props,
|
|
265
263
|
role: onClick ? "button" : void 0,
|
|
@@ -267,36 +265,36 @@ function MediaAttachment({
|
|
|
267
265
|
tabIndex: onClick ? 0 : -1,
|
|
268
266
|
onKeyDown: onClick ? handleKeyDown : void 0,
|
|
269
267
|
children: [
|
|
270
|
-
/* @__PURE__ */
|
|
268
|
+
/* @__PURE__ */ jsx("div", {
|
|
271
269
|
className: "lb-attachment-preview",
|
|
272
|
-
children: isUploading ? /* @__PURE__ */
|
|
270
|
+
children: isUploading ? /* @__PURE__ */ jsx(SpinnerIcon, {}) : isError ? /* @__PURE__ */ jsx(WarningIcon, {}) : /* @__PURE__ */ jsx(AttachmentPreview, {
|
|
273
271
|
attachment,
|
|
274
272
|
allowMediaPreview,
|
|
275
273
|
roomId
|
|
276
274
|
})
|
|
277
275
|
}),
|
|
278
|
-
/* @__PURE__ */
|
|
276
|
+
/* @__PURE__ */ jsxs("div", {
|
|
279
277
|
className: "lb-attachment-details",
|
|
280
278
|
children: [
|
|
281
|
-
/* @__PURE__ */
|
|
279
|
+
/* @__PURE__ */ jsx(AttachmentName, {
|
|
282
280
|
attachment
|
|
283
281
|
}),
|
|
284
|
-
/* @__PURE__ */
|
|
282
|
+
/* @__PURE__ */ jsx("span", {
|
|
285
283
|
className: "lb-attachment-description",
|
|
286
284
|
title: description,
|
|
287
285
|
children: description
|
|
288
286
|
})
|
|
289
287
|
]
|
|
290
288
|
}),
|
|
291
|
-
onDeleteClick && /* @__PURE__ */
|
|
289
|
+
onDeleteClick && /* @__PURE__ */ jsx(Tooltip, {
|
|
292
290
|
content: deleteLabel,
|
|
293
|
-
children: /* @__PURE__ */
|
|
291
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
294
292
|
type: "button",
|
|
295
293
|
className: "lb-attachment-delete",
|
|
296
294
|
onClick: onDeleteClick,
|
|
297
295
|
onPointerDown: handleDeletePointerDown,
|
|
298
296
|
"aria-label": deleteLabel,
|
|
299
|
-
children: /* @__PURE__ */
|
|
297
|
+
children: /* @__PURE__ */ jsx(CrossIcon, {})
|
|
300
298
|
})
|
|
301
299
|
})
|
|
302
300
|
]
|
|
@@ -315,7 +313,7 @@ function FileAttachment({
|
|
|
315
313
|
...props
|
|
316
314
|
}) {
|
|
317
315
|
const { isUploading, isError, description, deleteLabel } = useAttachmentContent(attachment, overrides);
|
|
318
|
-
const handleDeletePointerDown =
|
|
316
|
+
const handleDeletePointerDown = useCallback(
|
|
319
317
|
(event) => {
|
|
320
318
|
if (preventFocusOnDelete) {
|
|
321
319
|
event.preventDefault();
|
|
@@ -324,8 +322,8 @@ function FileAttachment({
|
|
|
324
322
|
[preventFocusOnDelete]
|
|
325
323
|
);
|
|
326
324
|
const handleKeyDown = useClickOnKeyDown(onKeyDown);
|
|
327
|
-
return /* @__PURE__ */
|
|
328
|
-
className: classNames
|
|
325
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
326
|
+
className: classNames("lb-attachment lb-file-attachment", className),
|
|
329
327
|
"data-error": isError ? "" : void 0,
|
|
330
328
|
...props,
|
|
331
329
|
role: onClick ? "button" : void 0,
|
|
@@ -333,36 +331,36 @@ function FileAttachment({
|
|
|
333
331
|
tabIndex: onClick ? 0 : -1,
|
|
334
332
|
onKeyDown: onClick ? handleKeyDown : void 0,
|
|
335
333
|
children: [
|
|
336
|
-
/* @__PURE__ */
|
|
334
|
+
/* @__PURE__ */ jsx("div", {
|
|
337
335
|
className: "lb-attachment-preview",
|
|
338
|
-
children: isUploading ? /* @__PURE__ */
|
|
336
|
+
children: isUploading ? /* @__PURE__ */ jsx(SpinnerIcon, {}) : isError ? /* @__PURE__ */ jsx(WarningIcon, {}) : /* @__PURE__ */ jsx(AttachmentPreview, {
|
|
339
337
|
attachment,
|
|
340
338
|
allowMediaPreview,
|
|
341
339
|
roomId
|
|
342
340
|
})
|
|
343
341
|
}),
|
|
344
|
-
/* @__PURE__ */
|
|
342
|
+
/* @__PURE__ */ jsxs("div", {
|
|
345
343
|
className: "lb-attachment-details",
|
|
346
344
|
children: [
|
|
347
|
-
/* @__PURE__ */
|
|
345
|
+
/* @__PURE__ */ jsx(AttachmentName, {
|
|
348
346
|
attachment
|
|
349
347
|
}),
|
|
350
|
-
/* @__PURE__ */
|
|
348
|
+
/* @__PURE__ */ jsx("span", {
|
|
351
349
|
className: "lb-attachment-description",
|
|
352
350
|
title: description,
|
|
353
351
|
children: description
|
|
354
352
|
})
|
|
355
353
|
]
|
|
356
354
|
}),
|
|
357
|
-
onDeleteClick && /* @__PURE__ */
|
|
355
|
+
onDeleteClick && /* @__PURE__ */ jsx(Tooltip, {
|
|
358
356
|
content: deleteLabel,
|
|
359
|
-
children: /* @__PURE__ */
|
|
357
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
360
358
|
type: "button",
|
|
361
359
|
className: "lb-attachment-delete",
|
|
362
360
|
onClick: onDeleteClick,
|
|
363
361
|
onPointerDown: handleDeletePointerDown,
|
|
364
362
|
"aria-label": deleteLabel,
|
|
365
|
-
children: /* @__PURE__ */
|
|
363
|
+
children: /* @__PURE__ */ jsx(CrossIcon, {})
|
|
366
364
|
})
|
|
367
365
|
})
|
|
368
366
|
]
|
|
@@ -384,7 +382,5 @@ function separateMediaAttachments(attachments) {
|
|
|
384
382
|
};
|
|
385
383
|
}
|
|
386
384
|
|
|
387
|
-
|
|
388
|
-
exports.MediaAttachment = MediaAttachment;
|
|
389
|
-
exports.separateMediaAttachments = separateMediaAttachments;
|
|
385
|
+
export { FileAttachment, MediaAttachment, separateMediaAttachments };
|
|
390
386
|
//# sourceMappingURL=Attachment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attachment.js","sources":["../../../src/components/internal/Attachment.tsx"],"sourcesContent":["\"use client\";\n\nimport type { CommentMixedAttachment } from \"@liveblocks/core\";\nimport { useRoomAttachmentUrl } from \"@liveblocks/react/_private\";\nimport type {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEventHandler,\n PointerEvent,\n} from \"react\";\nimport { memo, useCallback, useMemo, useState } from \"react\";\n\nimport { CrossIcon } from \"../../icons/Cross\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport { WarningIcon } from \"../../icons/Warning\";\nimport type { Overrides } from \"../../overrides\";\nimport { useOverrides } from \"../../overrides\";\nimport { AttachmentTooLargeError } from \"../../primitives\";\nimport { useComposerAttachmentsContextOrNull } from \"../../primitives/Composer/contexts\";\nimport { classNames } from \"../../utils/class-names\";\nimport { formatFileSize } from \"../../utils/format-file-size\";\nimport { Tooltip } from \"./Tooltip\";\n\nconst MAX_DISPLAYED_MEDIA_SIZE = 60 * 1024 * 1024; // 60 MB\n\ninterface AttachmentProps extends ComponentPropsWithoutRef<\"div\"> {\n attachment: CommentMixedAttachment;\n onDeleteClick?: MouseEventHandler<HTMLButtonElement>;\n preventFocusOnDelete?: boolean;\n roomId: string;\n overrides?: Partial<Overrides>;\n allowMediaPreview?: boolean;\n}\n\nconst fileExtensionRegex = /^(.+?)(\\.[^.]+)?$/;\n\nfunction splitFileName(name: string) {\n const match = name.match(fileExtensionRegex);\n\n return { base: match?.[1] ?? name, extension: match?.[2] };\n}\n\nfunction getAttachmentIconGlyph(mimeType: string) {\n if (\n mimeType === \"application/zip\" ||\n mimeType === \"application/gzip\" ||\n mimeType === \"application/vnd.rar\" ||\n mimeType === \"application/x-rar-compressed\" ||\n mimeType === \"application/x-7z-compressed\" ||\n mimeType === \"application/x-zip-compressed\" ||\n mimeType === \"application/x-tar\" ||\n mimeType === \"application/x-bzip\" ||\n mimeType === \"application/x-bzip2\"\n ) {\n return (\n <path d=\"M13 15h2v1h-1.5a.5.5 0 0 0 0 1H15v1h-1.5a.5.5 0 0 0 0 1H15v1h-1.5a.5.5 0 0 0 0 1h1a.5.5 0 0 0 .5-.5V20h1.5a.5.5 0 0 0 0-1H15v-1h1.5a.5.5 0 0 0 0-1H15v-1h1.5a.5.5 0 0 0 .5-.5V15a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2Z\" />\n );\n }\n\n if (\n mimeType.startsWith(\"text/\") ||\n mimeType.startsWith(\"font/\") ||\n mimeType.startsWith(\"application/\")\n ) {\n return (\n <path d=\"M10 16a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 0 1h-8a.5.5 0 0 1-.5-.5Z\" />\n );\n }\n\n if (mimeType.startsWith(\"image/\")) {\n return (\n <path d=\"M12 16h6a1 1 0 0 1 1 1v3l-1.293-1.293a1 1 0 0 0-1.414 0L14.09 20.91l-.464-.386a1 1 0 0 0-1.265-.013l-1.231.985A.995.995 0 0 1 11 21v-4a1 1 0 0 1 1-1Zm-2 1a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2v-4Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" />\n );\n }\n\n if (mimeType.startsWith(\"video/\")) {\n return (\n <path d=\"M12 15.71a1 1 0 0 1 1.49-.872l4.96 2.79a1 1 0 0 1 0 1.744l-4.96 2.79A1 1 0 0 1 12 21.29v-5.58Z\" />\n );\n }\n\n if (mimeType.startsWith(\"audio/\")) {\n return (\n <path d=\"M15 15a.5.5 0 0 0-.5.5v7a.5.5 0 0 0 1 0v-7a.5.5 0 0 0-.5-.5Zm-2.5 2.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3Zm-2 1a.5.5 0 0 1 1 0v1a.5.5 0 0 1-1 0v-1Zm6-1a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3ZM19 16a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v-5a.5.5 0 0 0-.5-.5Z\" />\n );\n }\n\n return null;\n}\n\nconst AttachmentFileIcon = memo(({ mimeType }: { mimeType: string }) => {\n const iconGlyph = useMemo(() => getAttachmentIconGlyph(mimeType), [mimeType]);\n\n return (\n <svg\n className=\"lb-attachment-icon\"\n width={30}\n height={30}\n viewBox=\"0 0 30 30\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-shadow\"\n />\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-background\"\n />\n <path\n d=\"M14.382 3.037a4 4 0 0 1 2.29 1.135l6.156 6.157a4 4 0 0 1 1.136 2.289A2 2 0 0 0 22 11h-4a2 2 0 0 1-2-2V5a2 2 0 0 0-1.618-1.963Z\"\n className=\"lb-attachment-icon-fold\"\n />\n\n {iconGlyph && <g className=\"lb-attachment-icon-glyph\">{iconGlyph}</g>}\n </svg>\n );\n});\n\nfunction AttachmentImagePreview({\n attachment,\n markPreviewAsUnsupported,\n roomId,\n}: {\n attachment: CommentMixedAttachment;\n markPreviewAsUnsupported: () => void;\n roomId: string;\n}) {\n const { url } = useRoomAttachmentUrl(attachment.id, roomId);\n const [isLoaded, setLoaded] = useState(false);\n\n const handleLoad = useCallback(() => {\n setLoaded(true);\n }, []);\n\n return (\n <>\n {!isLoaded ? <SpinnerIcon /> : null}\n {url ? (\n <div\n className=\"lb-attachment-preview-media\"\n data-hidden={!isLoaded ? \"\" : undefined}\n >\n <img\n src={url}\n loading=\"lazy\"\n onLoad={handleLoad}\n onError={markPreviewAsUnsupported}\n />\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AttachmentVideoPreview({\n attachment,\n markPreviewAsUnsupported,\n roomId,\n}: {\n attachment: CommentMixedAttachment;\n markPreviewAsUnsupported: () => void;\n roomId: string;\n}) {\n const { url } = useRoomAttachmentUrl(attachment.id, roomId);\n const [isLoaded, setLoaded] = useState(false);\n\n const handleLoad = useCallback(() => {\n setLoaded(true);\n }, []);\n\n return (\n <>\n {!isLoaded ? <SpinnerIcon /> : null}\n {url ? (\n <div\n className=\"lb-attachment-preview-media\"\n data-hidden={!isLoaded ? \"\" : undefined}\n >\n <video\n src={url}\n onLoadedData={handleLoad}\n onError={markPreviewAsUnsupported}\n />\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AttachmentPreview({\n attachment,\n allowMediaPreview = true,\n roomId,\n}: {\n attachment: CommentMixedAttachment;\n allowMediaPreview?: boolean;\n roomId: string;\n}) {\n const [isUnsupportedPreview, setUnsupportedPreview] = useState(false);\n const isUploaded =\n attachment.type === \"attachment\" || attachment.status === \"uploaded\";\n\n function markPreviewAsUnsupported() {\n setUnsupportedPreview(true);\n }\n\n if (\n !isUnsupportedPreview &&\n allowMediaPreview &&\n isUploaded &&\n attachment.size <= MAX_DISPLAYED_MEDIA_SIZE\n ) {\n if (attachment.mimeType.startsWith(\"image/\")) {\n return (\n <AttachmentImagePreview\n attachment={attachment}\n markPreviewAsUnsupported={markPreviewAsUnsupported}\n roomId={roomId}\n />\n );\n }\n\n if (attachment.mimeType.startsWith(\"video/\")) {\n return (\n <AttachmentVideoPreview\n attachment={attachment}\n markPreviewAsUnsupported={markPreviewAsUnsupported}\n roomId={roomId}\n />\n );\n }\n }\n\n return <AttachmentFileIcon mimeType={attachment.mimeType} />;\n}\n\nfunction AttachmentName({\n attachment,\n}: {\n attachment: CommentMixedAttachment;\n}) {\n const { base: fileBaseName, extension: fileExtension } = useMemo(() => {\n return splitFileName(attachment.name);\n }, [attachment.name]);\n\n return (\n <span className=\"lb-attachment-name\" title={attachment.name}>\n <span className=\"lb-attachment-name-base\">{fileBaseName}</span>\n {fileExtension && (\n <span className=\"lb-attachment-name-extension\">{fileExtension}</span>\n )}\n </span>\n );\n}\n\nfunction useClickOnKeyDown(\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void\n) {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n if (event.isDefaultPrevented()) {\n return;\n }\n\n // Simulate a click event on Enter or Space because it's a div\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n\n const clickEvent = new MouseEvent(\"click\", {\n bubbles: true,\n cancelable: true,\n view: window,\n });\n event.target.dispatchEvent(clickEvent);\n }\n },\n [onKeyDown]\n );\n\n return handleKeyDown;\n}\n\nfunction useAttachmentContent(\n attachment: CommentMixedAttachment,\n overrides?: Partial<Overrides>\n) {\n const $ = useOverrides(overrides);\n const composerAttachmentsContext = useComposerAttachmentsContextOrNull();\n const isInComposer = Boolean(composerAttachmentsContext);\n const maxAttachmentSize = composerAttachmentsContext?.maxAttachmentSize;\n\n const status =\n attachment.type === \"localAttachment\" ? attachment.status : undefined;\n const isUploading = status === \"uploading\";\n const isError = status === \"error\";\n\n let description: string;\n\n if (attachment.type === \"localAttachment\" && attachment.status === \"error\") {\n if (attachment.error instanceof AttachmentTooLargeError) {\n if (attachment.error.origin === \"server\") {\n description = $.ATTACHMENT_TOO_LARGE();\n } else {\n description = $.ATTACHMENT_TOO_LARGE(\n maxAttachmentSize\n ? formatFileSize(maxAttachmentSize, $.locale)\n : undefined\n );\n }\n } else {\n description = $.ATTACHMENT_ERROR(attachment.error);\n }\n } else {\n description = formatFileSize(attachment.size, $.locale);\n }\n\n const deleteLabel = isInComposer\n ? $.COMPOSER_REMOVE_ATTACHMENT\n : $.COMMENT_DELETE_ATTACHMENT;\n\n return {\n isUploading,\n isError,\n description,\n deleteLabel,\n };\n}\n\nexport function MediaAttachment({\n attachment,\n overrides,\n onClick,\n onDeleteClick,\n preventFocusOnDelete,\n allowMediaPreview = true,\n roomId,\n className,\n onKeyDown,\n ...props\n}: AttachmentProps) {\n const { isUploading, isError, description, deleteLabel } =\n useAttachmentContent(attachment, overrides);\n\n const handleDeletePointerDown = useCallback(\n (event: PointerEvent<HTMLButtonElement>) => {\n if (preventFocusOnDelete) {\n event.preventDefault();\n }\n },\n [preventFocusOnDelete]\n );\n\n const handleKeyDown = useClickOnKeyDown(onKeyDown);\n\n return (\n <div\n className={classNames(\"lb-attachment lb-media-attachment\", className)}\n data-error={isError ? \"\" : undefined}\n {...props}\n role={onClick ? \"button\" : undefined}\n onClick={onClick}\n tabIndex={onClick ? 0 : -1}\n onKeyDown={onClick ? handleKeyDown : undefined}\n >\n <div className=\"lb-attachment-preview\">\n {isUploading ? (\n <SpinnerIcon />\n ) : isError ? (\n <WarningIcon />\n ) : (\n <AttachmentPreview\n attachment={attachment}\n allowMediaPreview={allowMediaPreview}\n roomId={roomId}\n />\n )}\n </div>\n <div className=\"lb-attachment-details\">\n <AttachmentName attachment={attachment} />\n <span className=\"lb-attachment-description\" title={description}>\n {description}\n </span>\n </div>\n {onDeleteClick && (\n <Tooltip content={deleteLabel}>\n <button\n type=\"button\"\n className=\"lb-attachment-delete\"\n onClick={onDeleteClick}\n onPointerDown={handleDeletePointerDown}\n aria-label={deleteLabel}\n >\n <CrossIcon />\n </button>\n </Tooltip>\n )}\n </div>\n );\n}\n\nexport function FileAttachment({\n attachment,\n overrides,\n onClick,\n onDeleteClick,\n preventFocusOnDelete,\n allowMediaPreview = true,\n roomId,\n className,\n onKeyDown,\n ...props\n}: AttachmentProps) {\n const { isUploading, isError, description, deleteLabel } =\n useAttachmentContent(attachment, overrides);\n\n const handleDeletePointerDown = useCallback(\n (event: PointerEvent<HTMLButtonElement>) => {\n if (preventFocusOnDelete) {\n event.preventDefault();\n }\n },\n [preventFocusOnDelete]\n );\n\n const handleKeyDown = useClickOnKeyDown(onKeyDown);\n\n return (\n <div\n className={classNames(\"lb-attachment lb-file-attachment\", className)}\n data-error={isError ? \"\" : undefined}\n {...props}\n role={onClick ? \"button\" : undefined}\n onClick={onClick}\n tabIndex={onClick ? 0 : -1}\n onKeyDown={onClick ? handleKeyDown : undefined}\n >\n <div className=\"lb-attachment-preview\">\n {isUploading ? (\n <SpinnerIcon />\n ) : isError ? (\n <WarningIcon />\n ) : (\n <AttachmentPreview\n attachment={attachment}\n allowMediaPreview={allowMediaPreview}\n roomId={roomId}\n />\n )}\n </div>\n <div className=\"lb-attachment-details\">\n <AttachmentName attachment={attachment} />\n <span className=\"lb-attachment-description\" title={description}>\n {description}\n </span>\n </div>\n {onDeleteClick && (\n <Tooltip content={deleteLabel}>\n <button\n type=\"button\"\n className=\"lb-attachment-delete\"\n onClick={onDeleteClick}\n onPointerDown={handleDeletePointerDown}\n aria-label={deleteLabel}\n >\n <CrossIcon />\n </button>\n </Tooltip>\n )}\n </div>\n );\n}\n\nexport function separateMediaAttachments<T extends CommentMixedAttachment>(\n attachments: T[]\n) {\n const mediaAttachments: T[] = [];\n const fileAttachments: T[] = [];\n\n for (const attachment of attachments) {\n if (\n (attachment.mimeType.startsWith(\"image/\") ||\n attachment.mimeType.startsWith(\"video/\")) &&\n attachment.size <= MAX_DISPLAYED_MEDIA_SIZE\n ) {\n mediaAttachments.push(attachment);\n } else {\n fileAttachments.push(attachment);\n }\n }\n\n return {\n mediaAttachments,\n fileAttachments,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAuBA;AAWA;AAEA;AACE;AAEA;AACF;AAEA;AACE;AAWE;AACG;AAAO;AAAoP;AAIhQ;AAKE;AACG;AAAO;AAAiP;AAI7P;AACE;AACG;AAAO;AAAiQ;AAI7Q;AACE;AACG;AAAO;AAAiG;AAI7G;AACE;AACG;AAAO;AAAyP;AAIrQ;AACF;AAEA;AACE;AAEA;AACG;AACW;AACH;AACC;AACA;AACH;AACI;AACA;AACH;AAEN;AAAC;AACG;AACQ;AACZ;AACC;AACG;AACQ;AACZ;AACC;AACG;AACQ;AACZ;AAEe;AAAY;AAA4B;AAAU;AAAA;AAGvE;AAEA;AAAgC;AAC9B;AACA;AAEF;AAKE;AACA;AAEA;AACE;AAAc;AAGhB;AACE;AACG;AAA8B;AAE5B;AACW;AACoB;AAE7B;AACM;AACG;AACA;AACC;AACX;AAEA;AAAA;AAGV;AAEA;AAAgC;AAC9B;AACA;AAEF;AAKE;AACA;AAEA;AACE;AAAc;AAGhB;AACE;AACG;AAA8B;AAE5B;AACW;AACoB;AAE7B;AACM;AACS;AACL;AACX;AAEA;AAAA;AAGV;AAEA;AAA2B;AACzB;AACoB;AAEtB;AAKE;AACA;AAGA;AACE;AAA0B;AAG5B;AAME;AACE;AACG;AACC;AACA;AACA;AACF;AAIJ;AACE;AACG;AACC;AACA;AACA;AACF;AAEJ;AAGF;AAAQ;AAAwC;AAClD;AAEA;AAAwB;AAExB;AAGE;AACE;AAAoC;AAGtC;AACG;AAAe;AAAuC;AACrD;AAAC;AAAe;AAA2B;AAAa;AAErD;AAAe;AAAgC;AAAc;AAAA;AAItE;AAEA;AAGE;AAAsB;AAElB;AAEA;AACE;AAAA;AAIF;AACE;AAEA;AAA2C;AAChC;AACG;AACN;AAER;AAAqC;AACvC;AACF;AACU;AAGZ;AACF;AAEA;AAIE;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACE;AACE;AACE;AAAqC;AAErC;AAAgB;AAGV;AACN;AACF;AAEA;AAAiD;AACnD;AAEA;AAAsD;AAGxD;AAIA;AAAO;AACL;AACA;AACA;AACA;AAEJ;AAEO;AAAyB;AAC9B;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AAEF;AACE;AAGA;AAAgC;AAE5B;AACE;AAAqB;AACvB;AACF;AACqB;AAGvB;AAEA;AACG;AACqE;AACzC;AACvB;AACuB;AAC3B;AACwB;AACa;AAErC;AAAC;AAAc;AAMV;AACC;AACA;AACA;AACF;AAEJ;AACC;AAAc;AACb;AAAC;AAAe;AAAwB;AACvC;AAAe;AAAmC;AAChD;AACH;AAAA;AACF;AAEG;AAAiB;AACf;AACM;AACK;AACD;AACM;AACH;AAED;AACb;AACF;AAAA;AAIR;AAEO;AAAwB;AAC7B;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AAEF;AACE;AAGA;AAAgC;AAE5B;AACE;AAAqB;AACvB;AACF;AACqB;AAGvB;AAEA;AACG;AACoE;AACxC;AACvB;AACuB;AAC3B;AACwB;AACa;AAErC;AAAC;AAAc;AAMV;AACC;AACA;AACA;AACF;AAEJ;AACC;AAAc;AACb;AAAC;AAAe;AAAwB;AACvC;AAAe;AAAmC;AAChD;AACH;AAAA;AACF;AAEG;AAAiB;AACf;AACM;AACK;AACD;AACM;AACH;AAED;AACb;AACF;AAAA;AAIR;AAEO;AAGL;AACA;AAEA;AACE;AAKE;AAAgC;AAEhC;AAA+B;AACjC;AAGF;AAAO;AACL;AACA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"Attachment.js","sources":["../../../src/components/internal/Attachment.tsx"],"sourcesContent":["\"use client\";\n\nimport type { CommentMixedAttachment } from \"@liveblocks/core\";\nimport { useRoomAttachmentUrl } from \"@liveblocks/react/_private\";\nimport type {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEventHandler,\n PointerEvent,\n} from \"react\";\nimport { memo, useCallback, useMemo, useState } from \"react\";\n\nimport { CrossIcon } from \"../../icons/Cross\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport { WarningIcon } from \"../../icons/Warning\";\nimport type { Overrides } from \"../../overrides\";\nimport { useOverrides } from \"../../overrides\";\nimport { AttachmentTooLargeError } from \"../../primitives\";\nimport { useComposerAttachmentsContextOrNull } from \"../../primitives/Composer/contexts\";\nimport { classNames } from \"../../utils/class-names\";\nimport { formatFileSize } from \"../../utils/format-file-size\";\nimport { Tooltip } from \"./Tooltip\";\n\nconst MAX_DISPLAYED_MEDIA_SIZE = 60 * 1024 * 1024; // 60 MB\n\ninterface AttachmentProps extends ComponentPropsWithoutRef<\"div\"> {\n attachment: CommentMixedAttachment;\n onDeleteClick?: MouseEventHandler<HTMLButtonElement>;\n preventFocusOnDelete?: boolean;\n roomId: string;\n overrides?: Partial<Overrides>;\n allowMediaPreview?: boolean;\n}\n\nconst fileExtensionRegex = /^(.+?)(\\.[^.]+)?$/;\n\nfunction splitFileName(name: string) {\n const match = name.match(fileExtensionRegex);\n\n return { base: match?.[1] ?? name, extension: match?.[2] };\n}\n\nfunction getAttachmentIconGlyph(mimeType: string) {\n if (\n mimeType === \"application/zip\" ||\n mimeType === \"application/gzip\" ||\n mimeType === \"application/vnd.rar\" ||\n mimeType === \"application/x-rar-compressed\" ||\n mimeType === \"application/x-7z-compressed\" ||\n mimeType === \"application/x-zip-compressed\" ||\n mimeType === \"application/x-tar\" ||\n mimeType === \"application/x-bzip\" ||\n mimeType === \"application/x-bzip2\"\n ) {\n return (\n <path d=\"M13 15h2v1h-1.5a.5.5 0 0 0 0 1H15v1h-1.5a.5.5 0 0 0 0 1H15v1h-1.5a.5.5 0 0 0 0 1h1a.5.5 0 0 0 .5-.5V20h1.5a.5.5 0 0 0 0-1H15v-1h1.5a.5.5 0 0 0 0-1H15v-1h1.5a.5.5 0 0 0 .5-.5V15a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2Z\" />\n );\n }\n\n if (\n mimeType.startsWith(\"text/\") ||\n mimeType.startsWith(\"font/\") ||\n mimeType.startsWith(\"application/\")\n ) {\n return (\n <path d=\"M10 16a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 0 1h-8a.5.5 0 0 1-.5-.5Z\" />\n );\n }\n\n if (mimeType.startsWith(\"image/\")) {\n return (\n <path d=\"M12 16h6a1 1 0 0 1 1 1v3l-1.293-1.293a1 1 0 0 0-1.414 0L14.09 20.91l-.464-.386a1 1 0 0 0-1.265-.013l-1.231.985A.995.995 0 0 1 11 21v-4a1 1 0 0 1 1-1Zm-2 1a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2v-4Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" />\n );\n }\n\n if (mimeType.startsWith(\"video/\")) {\n return (\n <path d=\"M12 15.71a1 1 0 0 1 1.49-.872l4.96 2.79a1 1 0 0 1 0 1.744l-4.96 2.79A1 1 0 0 1 12 21.29v-5.58Z\" />\n );\n }\n\n if (mimeType.startsWith(\"audio/\")) {\n return (\n <path d=\"M15 15a.5.5 0 0 0-.5.5v7a.5.5 0 0 0 1 0v-7a.5.5 0 0 0-.5-.5Zm-2.5 2.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3Zm-2 1a.5.5 0 0 1 1 0v1a.5.5 0 0 1-1 0v-1Zm6-1a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3ZM19 16a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v-5a.5.5 0 0 0-.5-.5Z\" />\n );\n }\n\n return null;\n}\n\nconst AttachmentFileIcon = memo(({ mimeType }: { mimeType: string }) => {\n const iconGlyph = useMemo(() => getAttachmentIconGlyph(mimeType), [mimeType]);\n\n return (\n <svg\n className=\"lb-attachment-icon\"\n width={30}\n height={30}\n viewBox=\"0 0 30 30\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-shadow\"\n />\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-background\"\n />\n <path\n d=\"M14.382 3.037a4 4 0 0 1 2.29 1.135l6.156 6.157a4 4 0 0 1 1.136 2.289A2 2 0 0 0 22 11h-4a2 2 0 0 1-2-2V5a2 2 0 0 0-1.618-1.963Z\"\n className=\"lb-attachment-icon-fold\"\n />\n\n {iconGlyph && <g className=\"lb-attachment-icon-glyph\">{iconGlyph}</g>}\n </svg>\n );\n});\n\nfunction AttachmentImagePreview({\n attachment,\n markPreviewAsUnsupported,\n roomId,\n}: {\n attachment: CommentMixedAttachment;\n markPreviewAsUnsupported: () => void;\n roomId: string;\n}) {\n const { url } = useRoomAttachmentUrl(attachment.id, roomId);\n const [isLoaded, setLoaded] = useState(false);\n\n const handleLoad = useCallback(() => {\n setLoaded(true);\n }, []);\n\n return (\n <>\n {!isLoaded ? <SpinnerIcon /> : null}\n {url ? (\n <div\n className=\"lb-attachment-preview-media\"\n data-hidden={!isLoaded ? \"\" : undefined}\n >\n <img\n src={url}\n loading=\"lazy\"\n onLoad={handleLoad}\n onError={markPreviewAsUnsupported}\n />\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AttachmentVideoPreview({\n attachment,\n markPreviewAsUnsupported,\n roomId,\n}: {\n attachment: CommentMixedAttachment;\n markPreviewAsUnsupported: () => void;\n roomId: string;\n}) {\n const { url } = useRoomAttachmentUrl(attachment.id, roomId);\n const [isLoaded, setLoaded] = useState(false);\n\n const handleLoad = useCallback(() => {\n setLoaded(true);\n }, []);\n\n return (\n <>\n {!isLoaded ? <SpinnerIcon /> : null}\n {url ? (\n <div\n className=\"lb-attachment-preview-media\"\n data-hidden={!isLoaded ? \"\" : undefined}\n >\n <video\n src={url}\n onLoadedData={handleLoad}\n onError={markPreviewAsUnsupported}\n />\n </div>\n ) : null}\n </>\n );\n}\n\nfunction AttachmentPreview({\n attachment,\n allowMediaPreview = true,\n roomId,\n}: {\n attachment: CommentMixedAttachment;\n allowMediaPreview?: boolean;\n roomId: string;\n}) {\n const [isUnsupportedPreview, setUnsupportedPreview] = useState(false);\n const isUploaded =\n attachment.type === \"attachment\" || attachment.status === \"uploaded\";\n\n function markPreviewAsUnsupported() {\n setUnsupportedPreview(true);\n }\n\n if (\n !isUnsupportedPreview &&\n allowMediaPreview &&\n isUploaded &&\n attachment.size <= MAX_DISPLAYED_MEDIA_SIZE\n ) {\n if (attachment.mimeType.startsWith(\"image/\")) {\n return (\n <AttachmentImagePreview\n attachment={attachment}\n markPreviewAsUnsupported={markPreviewAsUnsupported}\n roomId={roomId}\n />\n );\n }\n\n if (attachment.mimeType.startsWith(\"video/\")) {\n return (\n <AttachmentVideoPreview\n attachment={attachment}\n markPreviewAsUnsupported={markPreviewAsUnsupported}\n roomId={roomId}\n />\n );\n }\n }\n\n return <AttachmentFileIcon mimeType={attachment.mimeType} />;\n}\n\nfunction AttachmentName({\n attachment,\n}: {\n attachment: CommentMixedAttachment;\n}) {\n const { base: fileBaseName, extension: fileExtension } = useMemo(() => {\n return splitFileName(attachment.name);\n }, [attachment.name]);\n\n return (\n <span className=\"lb-attachment-name\" title={attachment.name}>\n <span className=\"lb-attachment-name-base\">{fileBaseName}</span>\n {fileExtension && (\n <span className=\"lb-attachment-name-extension\">{fileExtension}</span>\n )}\n </span>\n );\n}\n\nfunction useClickOnKeyDown(\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void\n) {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n if (event.isDefaultPrevented()) {\n return;\n }\n\n // Simulate a click event on Enter or Space because it's a div\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n\n const clickEvent = new MouseEvent(\"click\", {\n bubbles: true,\n cancelable: true,\n view: window,\n });\n event.target.dispatchEvent(clickEvent);\n }\n },\n [onKeyDown]\n );\n\n return handleKeyDown;\n}\n\nfunction useAttachmentContent(\n attachment: CommentMixedAttachment,\n overrides?: Partial<Overrides>\n) {\n const $ = useOverrides(overrides);\n const composerAttachmentsContext = useComposerAttachmentsContextOrNull();\n const isInComposer = Boolean(composerAttachmentsContext);\n const maxAttachmentSize = composerAttachmentsContext?.maxAttachmentSize;\n\n const status =\n attachment.type === \"localAttachment\" ? attachment.status : undefined;\n const isUploading = status === \"uploading\";\n const isError = status === \"error\";\n\n let description: string;\n\n if (attachment.type === \"localAttachment\" && attachment.status === \"error\") {\n if (attachment.error instanceof AttachmentTooLargeError) {\n if (attachment.error.origin === \"server\") {\n description = $.ATTACHMENT_TOO_LARGE();\n } else {\n description = $.ATTACHMENT_TOO_LARGE(\n maxAttachmentSize\n ? formatFileSize(maxAttachmentSize, $.locale)\n : undefined\n );\n }\n } else {\n description = $.ATTACHMENT_ERROR(attachment.error);\n }\n } else {\n description = formatFileSize(attachment.size, $.locale);\n }\n\n const deleteLabel = isInComposer\n ? $.COMPOSER_REMOVE_ATTACHMENT\n : $.COMMENT_DELETE_ATTACHMENT;\n\n return {\n isUploading,\n isError,\n description,\n deleteLabel,\n };\n}\n\nexport function MediaAttachment({\n attachment,\n overrides,\n onClick,\n onDeleteClick,\n preventFocusOnDelete,\n allowMediaPreview = true,\n roomId,\n className,\n onKeyDown,\n ...props\n}: AttachmentProps) {\n const { isUploading, isError, description, deleteLabel } =\n useAttachmentContent(attachment, overrides);\n\n const handleDeletePointerDown = useCallback(\n (event: PointerEvent<HTMLButtonElement>) => {\n if (preventFocusOnDelete) {\n event.preventDefault();\n }\n },\n [preventFocusOnDelete]\n );\n\n const handleKeyDown = useClickOnKeyDown(onKeyDown);\n\n return (\n <div\n className={classNames(\"lb-attachment lb-media-attachment\", className)}\n data-error={isError ? \"\" : undefined}\n {...props}\n role={onClick ? \"button\" : undefined}\n onClick={onClick}\n tabIndex={onClick ? 0 : -1}\n onKeyDown={onClick ? handleKeyDown : undefined}\n >\n <div className=\"lb-attachment-preview\">\n {isUploading ? (\n <SpinnerIcon />\n ) : isError ? (\n <WarningIcon />\n ) : (\n <AttachmentPreview\n attachment={attachment}\n allowMediaPreview={allowMediaPreview}\n roomId={roomId}\n />\n )}\n </div>\n <div className=\"lb-attachment-details\">\n <AttachmentName attachment={attachment} />\n <span className=\"lb-attachment-description\" title={description}>\n {description}\n </span>\n </div>\n {onDeleteClick && (\n <Tooltip content={deleteLabel}>\n <button\n type=\"button\"\n className=\"lb-attachment-delete\"\n onClick={onDeleteClick}\n onPointerDown={handleDeletePointerDown}\n aria-label={deleteLabel}\n >\n <CrossIcon />\n </button>\n </Tooltip>\n )}\n </div>\n );\n}\n\nexport function FileAttachment({\n attachment,\n overrides,\n onClick,\n onDeleteClick,\n preventFocusOnDelete,\n allowMediaPreview = true,\n roomId,\n className,\n onKeyDown,\n ...props\n}: AttachmentProps) {\n const { isUploading, isError, description, deleteLabel } =\n useAttachmentContent(attachment, overrides);\n\n const handleDeletePointerDown = useCallback(\n (event: PointerEvent<HTMLButtonElement>) => {\n if (preventFocusOnDelete) {\n event.preventDefault();\n }\n },\n [preventFocusOnDelete]\n );\n\n const handleKeyDown = useClickOnKeyDown(onKeyDown);\n\n return (\n <div\n className={classNames(\"lb-attachment lb-file-attachment\", className)}\n data-error={isError ? \"\" : undefined}\n {...props}\n role={onClick ? \"button\" : undefined}\n onClick={onClick}\n tabIndex={onClick ? 0 : -1}\n onKeyDown={onClick ? handleKeyDown : undefined}\n >\n <div className=\"lb-attachment-preview\">\n {isUploading ? (\n <SpinnerIcon />\n ) : isError ? (\n <WarningIcon />\n ) : (\n <AttachmentPreview\n attachment={attachment}\n allowMediaPreview={allowMediaPreview}\n roomId={roomId}\n />\n )}\n </div>\n <div className=\"lb-attachment-details\">\n <AttachmentName attachment={attachment} />\n <span className=\"lb-attachment-description\" title={description}>\n {description}\n </span>\n </div>\n {onDeleteClick && (\n <Tooltip content={deleteLabel}>\n <button\n type=\"button\"\n className=\"lb-attachment-delete\"\n onClick={onDeleteClick}\n onPointerDown={handleDeletePointerDown}\n aria-label={deleteLabel}\n >\n <CrossIcon />\n </button>\n </Tooltip>\n )}\n </div>\n );\n}\n\nexport function separateMediaAttachments<T extends CommentMixedAttachment>(\n attachments: T[]\n) {\n const mediaAttachments: T[] = [];\n const fileAttachments: T[] = [];\n\n for (const attachment of attachments) {\n if (\n (attachment.mimeType.startsWith(\"image/\") ||\n attachment.mimeType.startsWith(\"video/\")) &&\n attachment.size <= MAX_DISPLAYED_MEDIA_SIZE\n ) {\n mediaAttachments.push(attachment);\n } else {\n fileAttachments.push(attachment);\n }\n }\n\n return {\n mediaAttachments,\n fileAttachments,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;AAuBA;AAWA;AAEA;AACE;AAEA;AACF;AAEA;AACE;AAWE;AACG;AAAO;AAAoP;AAIhQ;AAKE;AACG;AAAO;AAAiP;AAI7P;AACE;AACG;AAAO;AAAiQ;AAI7Q;AACE;AACG;AAAO;AAAiG;AAI7G;AACE;AACG;AAAO;AAAyP;AAIrQ;AACF;AAEA;AACE;AAEA;AACG;AACW;AACH;AACC;AACA;AACH;AACI;AACA;AACH;AAEN;AAAC;AACG;AACQ;AACZ;AACC;AACG;AACQ;AACZ;AACC;AACG;AACQ;AACZ;AAEe;AAAY;AAA4B;AAAU;AAAA;AAGvE;AAEA;AAAgC;AAC9B;AACA;AAEF;AAKE;AACA;AAEA;AACE;AAAc;AAGhB;AACE;AACG;AAA8B;AAE5B;AACW;AACoB;AAE7B;AACM;AACG;AACA;AACC;AACX;AAEA;AAAA;AAGV;AAEA;AAAgC;AAC9B;AACA;AAEF;AAKE;AACA;AAEA;AACE;AAAc;AAGhB;AACE;AACG;AAA8B;AAE5B;AACW;AACoB;AAE7B;AACM;AACS;AACL;AACX;AAEA;AAAA;AAGV;AAEA;AAA2B;AACzB;AACoB;AAEtB;AAKE;AACA;AAGA;AACE;AAA0B;AAG5B;AAME;AACE;AACG;AACC;AACA;AACA;AACF;AAIJ;AACE;AACG;AACC;AACA;AACA;AACF;AAEJ;AAGF;AAAQ;AAAwC;AAClD;AAEA;AAAwB;AAExB;AAGE;AACE;AAAoC;AAGtC;AACG;AAAe;AAAuC;AACrD;AAAC;AAAe;AAA2B;AAAa;AAErD;AAAe;AAAgC;AAAc;AAAA;AAItE;AAEA;AAGE;AAAsB;AAElB;AAEA;AACE;AAAA;AAIF;AACE;AAEA;AAA2C;AAChC;AACG;AACN;AAER;AAAqC;AACvC;AACF;AACU;AAGZ;AACF;AAEA;AAIE;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACE;AACE;AACE;AAAqC;AAErC;AAAgB;AAGV;AACN;AACF;AAEA;AAAiD;AACnD;AAEA;AAAsD;AAGxD;AAIA;AAAO;AACL;AACA;AACA;AACA;AAEJ;AAEO;AAAyB;AAC9B;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AAEF;AACE;AAGA;AAAgC;AAE5B;AACE;AAAqB;AACvB;AACF;AACqB;AAGvB;AAEA;AACG;AACqE;AACzC;AACvB;AACuB;AAC3B;AACwB;AACa;AAErC;AAAC;AAAc;AAMV;AACC;AACA;AACA;AACF;AAEJ;AACC;AAAc;AACb;AAAC;AAAe;AAAwB;AACvC;AAAe;AAAmC;AAChD;AACH;AAAA;AACF;AAEG;AAAiB;AACf;AACM;AACK;AACD;AACM;AACH;AAED;AACb;AACF;AAAA;AAIR;AAEO;AAAwB;AAC7B;AACA;AACA;AACA;AACA;AACoB;AACpB;AACA;AACA;AAEF;AACE;AAGA;AAAgC;AAE5B;AACE;AAAqB;AACvB;AACF;AACqB;AAGvB;AAEA;AACG;AACoE;AACxC;AACvB;AACuB;AAC3B;AACwB;AACa;AAErC;AAAC;AAAc;AAMV;AACC;AACA;AACA;AACF;AAEJ;AACC;AAAc;AACb;AAAC;AAAe;AAAwB;AACvC;AAAe;AAAmC;AAChD;AACH;AAAA;AACF;AAEG;AAAiB;AACf;AACM;AACK;AACD;AACM;AACH;AAED;AACb;AACF;AAAA;AAIR;AAEO;AAGL;AACA;AAEA;AACE;AAKE;AAAgC;AAEhC;AAA+B;AACjC;AAGF;AAAO;AACL;AACA;AAEJ;;"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var classNames = require('../../utils/class-names.cjs');
|
|
3
5
|
|
|
4
6
|
function Attribution({ className, ...props }) {
|
|
5
|
-
return /* @__PURE__ */ jsx("a", {
|
|
7
|
+
return /* @__PURE__ */ jsxRuntime.jsx("a", {
|
|
6
8
|
href: "https://liveblocks.io",
|
|
7
9
|
target: "_blank",
|
|
8
10
|
rel: "noopener noreferrer",
|
|
9
|
-
className: classNames("lb-composer-attribution", className),
|
|
11
|
+
className: classNames.classNames("lb-composer-attribution", className),
|
|
10
12
|
...props,
|
|
11
|
-
children: /* @__PURE__ */ jsx("svg", {
|
|
13
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("svg", {
|
|
12
14
|
xmlns: "http://www.w3.org/2000/svg",
|
|
13
15
|
viewBox: "0 0 384 72",
|
|
14
16
|
"aria-label": "Made with Liveblocks",
|
|
15
|
-
children: /* @__PURE__ */ jsx("path", {
|
|
17
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", {
|
|
16
18
|
fillRule: "evenodd",
|
|
17
19
|
clipRule: "evenodd",
|
|
18
20
|
d: "M86 10h-8v50h8V10Zm16 14h-8v36h8V24Zm0-15h-8v9h8V9Zm13 15h-9l12 36h10l13-36h-9l-9 28-8-28Zm44-1c-11 0-18 8-18 19s7 19 18 19c8 0 15-4 17-13h-8c-1 4-5 6-9 6-6 0-9-3-9-10h27c0-10-6-21-18-21Zm0 7c5 0 9 3 9 8h-18c0-5 4-8 9-8Zm42-7c-4 0-8 2-11 6V10h-8v50h8v-5c3 4 7 6 11 6 11 0 16-9 16-19s-5-19-16-19Zm-2 32c-7 0-9-7-9-13s2-13 9-13 9 7 9 13-2 13-9 13Zm32-45h-8v50h8V10Zm24 51c11 0 18-8 18-19s-8-19-18-19c-11 0-19 8-19 19s7 19 19 19Zm0-6c-8 0-10-7-10-13s2-13 10-13c7 0 9 7 9 13s-2 13-9 13Zm39 6c8 0 15-4 17-12l-8-1c-2 4-4 6-9 6-7 0-9-6-9-12s2-12 9-12c5 0 8 3 8 7l9-1c-2-8-9-13-17-13-11 0-18 9-18 19 0 11 7 19 18 19Zm30-14 4-4 10 17h10l-15-23 15-13h-11l-13 13V10h-9v50h9V47Zm39 14c8 0 16-3 16-12 0-8-8-10-15-11-2-1-7-1-7-5 0-3 3-4 6-4 4 0 7 3 7 7l8-1c-1-9-8-12-15-12s-15 3-15 11 9 10 15 11c3 1 8 2 8 5 0 4-4 5-7 5-5 0-8-3-9-7l-8 1c1 8 9 12 16 12ZM41 27H0l12 12v17l29-29ZM20 60h40L48 48V32L20 60Z",
|
|
@@ -22,5 +24,5 @@ function Attribution({ className, ...props }) {
|
|
|
22
24
|
});
|
|
23
25
|
}
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=Attribution.
|
|
27
|
+
exports.Attribution = Attribution;
|
|
28
|
+
//# sourceMappingURL=Attribution.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attribution.
|
|
1
|
+
{"version":3,"file":"Attribution.cjs","sources":["../../../src/components/internal/Attribution.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { classNames } from \"../../utils/class-names\";\n\nexport function Attribution({ className, ...props }: ComponentProps<\"a\">) {\n return (\n <a\n href=\"https://liveblocks.io\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classNames(\"lb-composer-attribution\", className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 72\"\n aria-label=\"Made with Liveblocks\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M86 10h-8v50h8V10Zm16 14h-8v36h8V24Zm0-15h-8v9h8V9Zm13 15h-9l12 36h10l13-36h-9l-9 28-8-28Zm44-1c-11 0-18 8-18 19s7 19 18 19c8 0 15-4 17-13h-8c-1 4-5 6-9 6-6 0-9-3-9-10h27c0-10-6-21-18-21Zm0 7c5 0 9 3 9 8h-18c0-5 4-8 9-8Zm42-7c-4 0-8 2-11 6V10h-8v50h8v-5c3 4 7 6 11 6 11 0 16-9 16-19s-5-19-16-19Zm-2 32c-7 0-9-7-9-13s2-13 9-13 9 7 9 13-2 13-9 13Zm32-45h-8v50h8V10Zm24 51c11 0 18-8 18-19s-8-19-18-19c-11 0-19 8-19 19s7 19 19 19Zm0-6c-8 0-10-7-10-13s2-13 10-13c7 0 9 7 9 13s-2 13-9 13Zm39 6c8 0 15-4 17-12l-8-1c-2 4-4 6-9 6-7 0-9-6-9-12s2-12 9-12c5 0 8 3 8 7l9-1c-2-8-9-13-17-13-11 0-18 9-18 19 0 11 7 19 18 19Zm30-14 4-4 10 17h10l-15-23 15-13h-11l-13 13V10h-9v50h9V47Zm39 14c8 0 16-3 16-12 0-8-8-10-15-11-2-1-7-1-7-5 0-3 3-4 6-4 4 0 7 3 7 7l8-1c-1-9-8-12-15-12s-15 3-15 11 9 10 15 11c3 1 8 2 8 5 0 4-4 5-7 5-5 0-8-3-9-7l-8 1c1 8 9 12 16 12ZM41 27H0l12 12v17l29-29ZM20 60h40L48 48V32L20 60Z\"\n fill=\"currentColor\"\n />\n </svg>\n </a>\n );\n}\n"],"names":["jsx","classNames"],"mappings":";;;;;AAIO,SAAS,WAAY,CAAA,EAAE,SAAc,EAAA,GAAA,KAAA,EAA8B,EAAA;AACxE,EAAA,uBACGA,cAAA,CAAA,GAAA,EAAA;AAAA,IACC,IAAK,EAAA,uBAAA;AAAA,IACL,MAAO,EAAA,QAAA;AAAA,IACP,GAAI,EAAA,qBAAA;AAAA,IACJ,SAAA,EAAWC,qBAAW,CAAA,yBAAA,EAA2B,SAAS,CAAA;AAAA,IACzD,GAAG,KAAA;AAAA,IAEJ,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,KAAM,EAAA,4BAAA;AAAA,MACN,OAAQ,EAAA,YAAA;AAAA,MACR,YAAW,EAAA,sBAAA;AAAA,MAEX,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA;AAAA,QACC,QAAS,EAAA,SAAA;AAAA,QACT,QAAS,EAAA,SAAA;AAAA,QACT,CAAE,EAAA,y3BAAA;AAAA,QACF,IAAK,EAAA,cAAA;AAAA,OACP,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var classNames = require('../../utils/class-names.js');
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { classNames } from '../../utils/class-names.js';
|
|
5
3
|
|
|
6
4
|
function Attribution({ className, ...props }) {
|
|
7
|
-
return /* @__PURE__ */
|
|
5
|
+
return /* @__PURE__ */ jsx("a", {
|
|
8
6
|
href: "https://liveblocks.io",
|
|
9
7
|
target: "_blank",
|
|
10
8
|
rel: "noopener noreferrer",
|
|
11
|
-
className: classNames
|
|
9
|
+
className: classNames("lb-composer-attribution", className),
|
|
12
10
|
...props,
|
|
13
|
-
children: /* @__PURE__ */
|
|
11
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
14
12
|
xmlns: "http://www.w3.org/2000/svg",
|
|
15
13
|
viewBox: "0 0 384 72",
|
|
16
14
|
"aria-label": "Made with Liveblocks",
|
|
17
|
-
children: /* @__PURE__ */
|
|
15
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
18
16
|
fillRule: "evenodd",
|
|
19
17
|
clipRule: "evenodd",
|
|
20
18
|
d: "M86 10h-8v50h8V10Zm16 14h-8v36h8V24Zm0-15h-8v9h8V9Zm13 15h-9l12 36h10l13-36h-9l-9 28-8-28Zm44-1c-11 0-18 8-18 19s7 19 18 19c8 0 15-4 17-13h-8c-1 4-5 6-9 6-6 0-9-3-9-10h27c0-10-6-21-18-21Zm0 7c5 0 9 3 9 8h-18c0-5 4-8 9-8Zm42-7c-4 0-8 2-11 6V10h-8v50h8v-5c3 4 7 6 11 6 11 0 16-9 16-19s-5-19-16-19Zm-2 32c-7 0-9-7-9-13s2-13 9-13 9 7 9 13-2 13-9 13Zm32-45h-8v50h8V10Zm24 51c11 0 18-8 18-19s-8-19-18-19c-11 0-19 8-19 19s7 19 19 19Zm0-6c-8 0-10-7-10-13s2-13 10-13c7 0 9 7 9 13s-2 13-9 13Zm39 6c8 0 15-4 17-12l-8-1c-2 4-4 6-9 6-7 0-9-6-9-12s2-12 9-12c5 0 8 3 8 7l9-1c-2-8-9-13-17-13-11 0-18 9-18 19 0 11 7 19 18 19Zm30-14 4-4 10 17h10l-15-23 15-13h-11l-13 13V10h-9v50h9V47Zm39 14c8 0 16-3 16-12 0-8-8-10-15-11-2-1-7-1-7-5 0-3 3-4 6-4 4 0 7 3 7 7l8-1c-1-9-8-12-15-12s-15 3-15 11 9 10 15 11c3 1 8 2 8 5 0 4-4 5-7 5-5 0-8-3-9-7l-8 1c1 8 9 12 16 12ZM41 27H0l12 12v17l29-29ZM20 60h40L48 48V32L20 60Z",
|
|
@@ -24,5 +22,5 @@ function Attribution({ className, ...props }) {
|
|
|
24
22
|
});
|
|
25
23
|
}
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
export { Attribution };
|
|
28
26
|
//# sourceMappingURL=Attribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attribution.js","sources":["../../../src/components/internal/Attribution.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { classNames } from \"../../utils/class-names\";\n\nexport function Attribution({ className, ...props }: ComponentProps<\"a\">) {\n return (\n <a\n href=\"https://liveblocks.io\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classNames(\"lb-composer-attribution\", className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 72\"\n aria-label=\"Made with Liveblocks\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M86 10h-8v50h8V10Zm16 14h-8v36h8V24Zm0-15h-8v9h8V9Zm13 15h-9l12 36h10l13-36h-9l-9 28-8-28Zm44-1c-11 0-18 8-18 19s7 19 18 19c8 0 15-4 17-13h-8c-1 4-5 6-9 6-6 0-9-3-9-10h27c0-10-6-21-18-21Zm0 7c5 0 9 3 9 8h-18c0-5 4-8 9-8Zm42-7c-4 0-8 2-11 6V10h-8v50h8v-5c3 4 7 6 11 6 11 0 16-9 16-19s-5-19-16-19Zm-2 32c-7 0-9-7-9-13s2-13 9-13 9 7 9 13-2 13-9 13Zm32-45h-8v50h8V10Zm24 51c11 0 18-8 18-19s-8-19-18-19c-11 0-19 8-19 19s7 19 19 19Zm0-6c-8 0-10-7-10-13s2-13 10-13c7 0 9 7 9 13s-2 13-9 13Zm39 6c8 0 15-4 17-12l-8-1c-2 4-4 6-9 6-7 0-9-6-9-12s2-12 9-12c5 0 8 3 8 7l9-1c-2-8-9-13-17-13-11 0-18 9-18 19 0 11 7 19 18 19Zm30-14 4-4 10 17h10l-15-23 15-13h-11l-13 13V10h-9v50h9V47Zm39 14c8 0 16-3 16-12 0-8-8-10-15-11-2-1-7-1-7-5 0-3 3-4 6-4 4 0 7 3 7 7l8-1c-1-9-8-12-15-12s-15 3-15 11 9 10 15 11c3 1 8 2 8 5 0 4-4 5-7 5-5 0-8-3-9-7l-8 1c1 8 9 12 16 12ZM41 27H0l12 12v17l29-29ZM20 60h40L48 48V32L20 60Z\"\n fill=\"currentColor\"\n />\n </svg>\n </a>\n );\n}\n"],"names":[
|
|
1
|
+
{"version":3,"file":"Attribution.js","sources":["../../../src/components/internal/Attribution.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\nimport { classNames } from \"../../utils/class-names\";\n\nexport function Attribution({ className, ...props }: ComponentProps<\"a\">) {\n return (\n <a\n href=\"https://liveblocks.io\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classNames(\"lb-composer-attribution\", className)}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 72\"\n aria-label=\"Made with Liveblocks\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M86 10h-8v50h8V10Zm16 14h-8v36h8V24Zm0-15h-8v9h8V9Zm13 15h-9l12 36h10l13-36h-9l-9 28-8-28Zm44-1c-11 0-18 8-18 19s7 19 18 19c8 0 15-4 17-13h-8c-1 4-5 6-9 6-6 0-9-3-9-10h27c0-10-6-21-18-21Zm0 7c5 0 9 3 9 8h-18c0-5 4-8 9-8Zm42-7c-4 0-8 2-11 6V10h-8v50h8v-5c3 4 7 6 11 6 11 0 16-9 16-19s-5-19-16-19Zm-2 32c-7 0-9-7-9-13s2-13 9-13 9 7 9 13-2 13-9 13Zm32-45h-8v50h8V10Zm24 51c11 0 18-8 18-19s-8-19-18-19c-11 0-19 8-19 19s7 19 19 19Zm0-6c-8 0-10-7-10-13s2-13 10-13c7 0 9 7 9 13s-2 13-9 13Zm39 6c8 0 15-4 17-12l-8-1c-2 4-4 6-9 6-7 0-9-6-9-12s2-12 9-12c5 0 8 3 8 7l9-1c-2-8-9-13-17-13-11 0-18 9-18 19 0 11 7 19 18 19Zm30-14 4-4 10 17h10l-15-23 15-13h-11l-13 13V10h-9v50h9V47Zm39 14c8 0 16-3 16-12 0-8-8-10-15-11-2-1-7-1-7-5 0-3 3-4 6-4 4 0 7 3 7 7l8-1c-1-9-8-12-15-12s-15 3-15 11 9 10 15 11c3 1 8 2 8 5 0 4-4 5-7 5-5 0-8-3-9-7l-8 1c1 8 9 12 16 12ZM41 27H0l12 12v17l29-29ZM20 60h40L48 48V32L20 60Z\"\n fill=\"currentColor\"\n />\n </svg>\n </a>\n );\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,WAAY,CAAA,EAAE,SAAc,EAAA,GAAA,KAAA,EAA8B,EAAA;AACxE,EAAA,uBACG,GAAA,CAAA,GAAA,EAAA;AAAA,IACC,IAAK,EAAA,uBAAA;AAAA,IACL,MAAO,EAAA,QAAA;AAAA,IACP,GAAI,EAAA,qBAAA;AAAA,IACJ,SAAA,EAAW,UAAW,CAAA,yBAAA,EAA2B,SAAS,CAAA;AAAA,IACzD,GAAG,KAAA;AAAA,IAEJ,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,MACC,KAAM,EAAA,4BAAA;AAAA,MACN,OAAQ,EAAA,YAAA;AAAA,MACR,YAAW,EAAA,sBAAA;AAAA,MAEX,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA;AAAA,QACC,QAAS,EAAA,SAAA;AAAA,QACT,QAAS,EAAA,SAAA;AAAA,QACT,CAAE,EAAA,y3BAAA;AAAA,QACF,IAAK,EAAA,cAAA;AAAA,OACP,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('@liveblocks/react');
|
|
6
|
+
var react$1 = require('react');
|
|
7
|
+
var classNames = require('../../utils/class-names.cjs');
|
|
8
|
+
var getInitials = require('../../utils/get-initials.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
function Avatar({ userId, className, ...props }) {
|
|
12
|
+
const { user, isLoading } = react.useUser(userId);
|
|
13
|
+
const resolvedUserName = react$1.useMemo(() => user?.name, [user]);
|
|
14
|
+
const resolvedUserAvatar = react$1.useMemo(() => user?.avatar, [user]);
|
|
15
|
+
const resolvedUserInitials = react$1.useMemo(
|
|
16
|
+
() => resolvedUserName ? getInitials.getInitials(resolvedUserName) : void 0,
|
|
17
|
+
[resolvedUserName]
|
|
18
|
+
);
|
|
19
|
+
const resolvedUserIdInitials = react$1.useMemo(
|
|
20
|
+
() => !isLoading && !user ? getInitials.getInitials(userId) : void 0,
|
|
21
|
+
[isLoading, user, userId]
|
|
22
|
+
);
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
24
|
+
className: classNames.classNames("lb-avatar", className),
|
|
25
|
+
"data-loading": isLoading ? "" : void 0,
|
|
26
|
+
...props,
|
|
27
|
+
children: [
|
|
28
|
+
resolvedUserAvatar && /* @__PURE__ */ jsxRuntime.jsx("img", {
|
|
29
|
+
className: "lb-avatar-image",
|
|
30
|
+
src: resolvedUserAvatar,
|
|
31
|
+
alt: resolvedUserName
|
|
32
|
+
}),
|
|
33
|
+
resolvedUserInitials ? /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
34
|
+
className: "lb-avatar-fallback",
|
|
35
|
+
"aria-hidden": true,
|
|
36
|
+
children: resolvedUserInitials
|
|
37
|
+
}) : resolvedUserIdInitials ? /* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
38
|
+
className: "lb-avatar-fallback",
|
|
39
|
+
"aria-label": userId,
|
|
40
|
+
title: userId,
|
|
41
|
+
children: resolvedUserIdInitials
|
|
42
|
+
}) : null
|
|
43
|
+
]
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
exports.Avatar = Avatar;
|
|
48
|
+
//# sourceMappingURL=Avatar.cjs.map
|