@liveblocks/react-ui 1.12.0-initial1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/dist/components/Comment.js +473 -0
- package/dist/components/Comment.js.map +1 -0
- package/dist/components/Comment.mjs +447 -0
- package/dist/components/Comment.mjs.map +1 -0
- package/dist/components/Composer.js +299 -0
- package/dist/components/Composer.js.map +1 -0
- package/dist/components/Composer.mjs +297 -0
- package/dist/components/Composer.mjs.map +1 -0
- package/dist/components/InboxNotification.js +374 -0
- package/dist/components/InboxNotification.js.map +1 -0
- package/dist/components/InboxNotification.mjs +372 -0
- package/dist/components/InboxNotification.mjs.map +1 -0
- package/dist/components/InboxNotificationList.js +19 -0
- package/dist/components/InboxNotificationList.js.map +1 -0
- package/dist/components/InboxNotificationList.mjs +17 -0
- package/dist/components/InboxNotificationList.mjs.map +1 -0
- package/dist/components/Thread.js +188 -0
- package/dist/components/Thread.js.map +1 -0
- package/dist/components/Thread.mjs +167 -0
- package/dist/components/Thread.mjs.map +1 -0
- package/dist/components/internal/Attribution.js +26 -0
- package/dist/components/internal/Attribution.js.map +1 -0
- package/dist/components/internal/Attribution.mjs +24 -0
- package/dist/components/internal/Attribution.mjs.map +1 -0
- package/dist/components/internal/Avatar.js +40 -0
- package/dist/components/internal/Avatar.js.map +1 -0
- package/dist/components/internal/Avatar.mjs +38 -0
- package/dist/components/internal/Avatar.mjs.map +1 -0
- package/dist/components/internal/Button.js +24 -0
- package/dist/components/internal/Button.js.map +1 -0
- package/dist/components/internal/Button.mjs +22 -0
- package/dist/components/internal/Button.mjs.map +1 -0
- package/dist/components/internal/Dropdown.js +72 -0
- package/dist/components/internal/Dropdown.js.map +1 -0
- package/dist/components/internal/Dropdown.mjs +47 -0
- package/dist/components/internal/Dropdown.mjs.map +1 -0
- package/dist/components/internal/Emoji.js +18 -0
- package/dist/components/internal/Emoji.js.map +1 -0
- package/dist/components/internal/Emoji.mjs +16 -0
- package/dist/components/internal/Emoji.mjs.map +1 -0
- package/dist/components/internal/EmojiPicker.js +186 -0
- package/dist/components/internal/EmojiPicker.js.map +1 -0
- package/dist/components/internal/EmojiPicker.mjs +162 -0
- package/dist/components/internal/EmojiPicker.mjs.map +1 -0
- package/dist/components/internal/Icon.js +28 -0
- package/dist/components/internal/Icon.js.map +1 -0
- package/dist/components/internal/Icon.mjs +24 -0
- package/dist/components/internal/Icon.mjs.map +1 -0
- package/dist/components/internal/InboxNotificationThread.js +116 -0
- package/dist/components/internal/InboxNotificationThread.js.map +1 -0
- package/dist/components/internal/InboxNotificationThread.mjs +112 -0
- package/dist/components/internal/InboxNotificationThread.mjs.map +1 -0
- package/dist/components/internal/List.js +34 -0
- package/dist/components/internal/List.js.map +1 -0
- package/dist/components/internal/List.mjs +32 -0
- package/dist/components/internal/List.mjs.map +1 -0
- package/dist/components/internal/Room.js +22 -0
- package/dist/components/internal/Room.js.map +1 -0
- package/dist/components/internal/Room.mjs +20 -0
- package/dist/components/internal/Room.mjs.map +1 -0
- package/dist/components/internal/Tooltip.js +91 -0
- package/dist/components/internal/Tooltip.js.map +1 -0
- package/dist/components/internal/Tooltip.mjs +65 -0
- package/dist/components/internal/Tooltip.mjs.map +1 -0
- package/dist/components/internal/User.js +41 -0
- package/dist/components/internal/User.js.map +1 -0
- package/dist/components/internal/User.mjs +39 -0
- package/dist/components/internal/User.mjs.map +1 -0
- package/dist/components.js +64 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +41 -0
- package/dist/components.mjs.map +1 -0
- package/dist/config.js +33 -0
- package/dist/config.js.map +1 -0
- package/dist/config.mjs +30 -0
- package/dist/config.mjs.map +1 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +6 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/icons/ArrowDown.js +15 -0
- package/dist/icons/ArrowDown.js.map +1 -0
- package/dist/icons/ArrowDown.mjs +13 -0
- package/dist/icons/ArrowDown.mjs.map +1 -0
- package/dist/icons/Check.js +15 -0
- package/dist/icons/Check.js.map +1 -0
- package/dist/icons/Check.mjs +13 -0
- package/dist/icons/Check.mjs.map +1 -0
- package/dist/icons/Cross.js +17 -0
- package/dist/icons/Cross.js.map +1 -0
- package/dist/icons/Cross.mjs +15 -0
- package/dist/icons/Cross.mjs.map +1 -0
- package/dist/icons/Delete.js +15 -0
- package/dist/icons/Delete.js.map +1 -0
- package/dist/icons/Delete.mjs +13 -0
- package/dist/icons/Delete.mjs.map +1 -0
- package/dist/icons/Edit.js +15 -0
- package/dist/icons/Edit.js.map +1 -0
- package/dist/icons/Edit.mjs +13 -0
- package/dist/icons/Edit.mjs.map +1 -0
- package/dist/icons/Ellipsis.js +26 -0
- package/dist/icons/Ellipsis.js.map +1 -0
- package/dist/icons/Ellipsis.mjs +24 -0
- package/dist/icons/Ellipsis.mjs.map +1 -0
- package/dist/icons/Emoji.js +27 -0
- package/dist/icons/Emoji.js.map +1 -0
- package/dist/icons/Emoji.mjs +25 -0
- package/dist/icons/Emoji.mjs.map +1 -0
- package/dist/icons/EmojiAdd.js +29 -0
- package/dist/icons/EmojiAdd.js.map +1 -0
- package/dist/icons/EmojiAdd.mjs +27 -0
- package/dist/icons/EmojiAdd.mjs.map +1 -0
- package/dist/icons/Mention.js +17 -0
- package/dist/icons/Mention.js.map +1 -0
- package/dist/icons/Mention.mjs +15 -0
- package/dist/icons/Mention.mjs.map +1 -0
- package/dist/icons/Missing.js +19 -0
- package/dist/icons/Missing.js.map +1 -0
- package/dist/icons/Missing.mjs +17 -0
- package/dist/icons/Missing.mjs.map +1 -0
- package/dist/icons/Resolve.js +19 -0
- package/dist/icons/Resolve.js.map +1 -0
- package/dist/icons/Resolve.mjs +17 -0
- package/dist/icons/Resolve.mjs.map +1 -0
- package/dist/icons/Resolved.js +21 -0
- package/dist/icons/Resolved.js.map +1 -0
- package/dist/icons/Resolved.mjs +19 -0
- package/dist/icons/Resolved.mjs.map +1 -0
- package/dist/icons/Search.js +15 -0
- package/dist/icons/Search.js.map +1 -0
- package/dist/icons/Search.mjs +13 -0
- package/dist/icons/Search.mjs.map +1 -0
- package/dist/icons/Send.js +15 -0
- package/dist/icons/Send.js.map +1 -0
- package/dist/icons/Send.mjs +13 -0
- package/dist/icons/Send.mjs.map +1 -0
- package/dist/icons/Spinner.js +22 -0
- package/dist/icons/Spinner.js.map +1 -0
- package/dist/icons/Spinner.mjs +20 -0
- package/dist/icons/Spinner.mjs.map +1 -0
- package/dist/index.d.mts +476 -0
- package/dist/index.d.ts +476 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +11 -0
- package/dist/index.mjs.map +1 -0
- package/dist/overrides.js +100 -0
- package/dist/overrides.js.map +1 -0
- package/dist/overrides.mjs +77 -0
- package/dist/overrides.mjs.map +1 -0
- package/dist/primitives/Comment/index.js +113 -0
- package/dist/primitives/Comment/index.js.map +1 -0
- package/dist/primitives/Comment/index.mjs +109 -0
- package/dist/primitives/Comment/index.mjs.map +1 -0
- package/dist/primitives/Comment/utils.js +25 -0
- package/dist/primitives/Comment/utils.js.map +1 -0
- package/dist/primitives/Comment/utils.mjs +20 -0
- package/dist/primitives/Comment/utils.mjs.map +1 -0
- package/dist/primitives/Composer/contexts.js +34 -0
- package/dist/primitives/Composer/contexts.js.map +1 -0
- package/dist/primitives/Composer/contexts.mjs +27 -0
- package/dist/primitives/Composer/contexts.mjs.map +1 -0
- package/dist/primitives/Composer/index.js +771 -0
- package/dist/primitives/Composer/index.js.map +1 -0
- package/dist/primitives/Composer/index.mjs +762 -0
- package/dist/primitives/Composer/index.mjs.map +1 -0
- package/dist/primitives/Composer/utils.js +102 -0
- package/dist/primitives/Composer/utils.js.map +1 -0
- package/dist/primitives/Composer/utils.mjs +93 -0
- package/dist/primitives/Composer/utils.mjs.map +1 -0
- package/dist/primitives/EmojiPicker/contexts.js +19 -0
- package/dist/primitives/EmojiPicker/contexts.js.map +1 -0
- package/dist/primitives/EmojiPicker/contexts.mjs +16 -0
- package/dist/primitives/EmojiPicker/contexts.mjs.map +1 -0
- package/dist/primitives/EmojiPicker/index.js +434 -0
- package/dist/primitives/EmojiPicker/index.js.map +1 -0
- package/dist/primitives/EmojiPicker/index.mjs +430 -0
- package/dist/primitives/EmojiPicker/index.mjs.map +1 -0
- package/dist/primitives/EmojiPicker/utils.js +329 -0
- package/dist/primitives/EmojiPicker/utils.js.map +1 -0
- package/dist/primitives/EmojiPicker/utils.mjs +325 -0
- package/dist/primitives/EmojiPicker/utils.mjs.map +1 -0
- package/dist/primitives/Timestamp.js +121 -0
- package/dist/primitives/Timestamp.js.map +1 -0
- package/dist/primitives/Timestamp.mjs +119 -0
- package/dist/primitives/Timestamp.mjs.map +1 -0
- package/dist/primitives/index.d.mts +502 -0
- package/dist/primitives/index.d.ts +502 -0
- package/dist/primitives/index.js +16 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/index.mjs +9 -0
- package/dist/primitives/index.mjs.map +1 -0
- package/dist/primitives/internal/Emoji.js +30 -0
- package/dist/primitives/internal/Emoji.js.map +1 -0
- package/dist/primitives/internal/Emoji.mjs +28 -0
- package/dist/primitives/internal/Emoji.mjs.map +1 -0
- package/dist/shared.js +21 -0
- package/dist/shared.js.map +1 -0
- package/dist/shared.mjs +19 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/slate/plugins/auto-formatting.js +83 -0
- package/dist/slate/plugins/auto-formatting.js.map +1 -0
- package/dist/slate/plugins/auto-formatting.mjs +81 -0
- package/dist/slate/plugins/auto-formatting.mjs.map +1 -0
- package/dist/slate/plugins/auto-links.js +175 -0
- package/dist/slate/plugins/auto-links.js.map +1 -0
- package/dist/slate/plugins/auto-links.mjs +172 -0
- package/dist/slate/plugins/auto-links.mjs.map +1 -0
- package/dist/slate/plugins/empty-clear-formatting.js +18 -0
- package/dist/slate/plugins/empty-clear-formatting.js.map +1 -0
- package/dist/slate/plugins/empty-clear-formatting.mjs +16 -0
- package/dist/slate/plugins/empty-clear-formatting.mjs.map +1 -0
- package/dist/slate/plugins/mentions.js +112 -0
- package/dist/slate/plugins/mentions.js.map +1 -0
- package/dist/slate/plugins/mentions.mjs +105 -0
- package/dist/slate/plugins/mentions.mjs.map +1 -0
- package/dist/slate/utils/get-character.js +50 -0
- package/dist/slate/utils/get-character.js.map +1 -0
- package/dist/slate/utils/get-character.mjs +47 -0
- package/dist/slate/utils/get-character.mjs.map +1 -0
- package/dist/slate/utils/get-dom-range.js +17 -0
- package/dist/slate/utils/get-dom-range.js.map +1 -0
- package/dist/slate/utils/get-dom-range.mjs +15 -0
- package/dist/slate/utils/get-dom-range.mjs.map +1 -0
- package/dist/slate/utils/get-match-range.js +53 -0
- package/dist/slate/utils/get-match-range.js.map +1 -0
- package/dist/slate/utils/get-match-range.mjs +51 -0
- package/dist/slate/utils/get-match-range.mjs.map +1 -0
- package/dist/slate/utils/is-empty-string.js +8 -0
- package/dist/slate/utils/is-empty-string.js.map +1 -0
- package/dist/slate/utils/is-empty-string.mjs +6 -0
- package/dist/slate/utils/is-empty-string.mjs.map +1 -0
- package/dist/slate/utils/is-empty.js +10 -0
- package/dist/slate/utils/is-empty.js.map +1 -0
- package/dist/slate/utils/is-empty.mjs +8 -0
- package/dist/slate/utils/is-empty.mjs.map +1 -0
- package/dist/slate/utils/is-selection-collapsed.js +10 -0
- package/dist/slate/utils/is-selection-collapsed.js.map +1 -0
- package/dist/slate/utils/is-selection-collapsed.mjs +8 -0
- package/dist/slate/utils/is-selection-collapsed.mjs.map +1 -0
- package/dist/slate/utils/marks.js +43 -0
- package/dist/slate/utils/marks.js.map +1 -0
- package/dist/slate/utils/marks.mjs +38 -0
- package/dist/slate/utils/marks.mjs.map +1 -0
- package/dist/utils/Persist.js +85 -0
- package/dist/utils/Persist.js.map +1 -0
- package/dist/utils/Persist.mjs +81 -0
- package/dist/utils/Persist.mjs.map +1 -0
- package/dist/utils/Portal.js +27 -0
- package/dist/utils/Portal.js.map +1 -0
- package/dist/utils/Portal.mjs +25 -0
- package/dist/utils/Portal.mjs.map +1 -0
- package/dist/utils/capitalize.js +8 -0
- package/dist/utils/capitalize.js.map +1 -0
- package/dist/utils/capitalize.mjs +6 -0
- package/dist/utils/capitalize.mjs.map +1 -0
- package/dist/utils/chunk.js +12 -0
- package/dist/utils/chunk.js.map +1 -0
- package/dist/utils/chunk.mjs +10 -0
- package/dist/utils/chunk.mjs.map +1 -0
- package/dist/utils/clamp.js +8 -0
- package/dist/utils/clamp.js.map +1 -0
- package/dist/utils/clamp.mjs +6 -0
- package/dist/utils/clamp.mjs.map +1 -0
- package/dist/utils/class-names.js +8 -0
- package/dist/utils/class-names.js.map +1 -0
- package/dist/utils/class-names.mjs +6 -0
- package/dist/utils/class-names.mjs.map +1 -0
- package/dist/utils/exists.js +8 -0
- package/dist/utils/exists.js.map +1 -0
- package/dist/utils/exists.mjs +6 -0
- package/dist/utils/exists.mjs.map +1 -0
- package/dist/utils/find-last-index.js +15 -0
- package/dist/utils/find-last-index.js.map +1 -0
- package/dist/utils/find-last-index.mjs +13 -0
- package/dist/utils/find-last-index.mjs.map +1 -0
- package/dist/utils/flush-sync.js +12 -0
- package/dist/utils/flush-sync.js.map +1 -0
- package/dist/utils/flush-sync.mjs +10 -0
- package/dist/utils/flush-sync.mjs.map +1 -0
- package/dist/utils/get-initials.js +13 -0
- package/dist/utils/get-initials.js.map +1 -0
- package/dist/utils/get-initials.mjs +11 -0
- package/dist/utils/get-initials.mjs.map +1 -0
- package/dist/utils/intl.js +24 -0
- package/dist/utils/intl.js.map +1 -0
- package/dist/utils/intl.mjs +20 -0
- package/dist/utils/intl.mjs.map +1 -0
- package/dist/utils/is-apple.js +9 -0
- package/dist/utils/is-apple.js.map +1 -0
- package/dist/utils/is-apple.mjs +7 -0
- package/dist/utils/is-apple.mjs.map +1 -0
- package/dist/utils/is-key.js +26 -0
- package/dist/utils/is-key.js.map +1 -0
- package/dist/utils/is-key.mjs +24 -0
- package/dist/utils/is-key.mjs.map +1 -0
- package/dist/utils/memoize.js +19 -0
- package/dist/utils/memoize.js.map +1 -0
- package/dist/utils/memoize.mjs +17 -0
- package/dist/utils/memoize.mjs.map +1 -0
- package/dist/utils/pluralize.js +8 -0
- package/dist/utils/pluralize.js.map +1 -0
- package/dist/utils/pluralize.mjs +6 -0
- package/dist/utils/pluralize.mjs.map +1 -0
- package/dist/utils/request-idle-callback.js +15 -0
- package/dist/utils/request-idle-callback.js.map +1 -0
- package/dist/utils/request-idle-callback.mjs +12 -0
- package/dist/utils/request-idle-callback.mjs.map +1 -0
- package/dist/utils/request-submit.js +20 -0
- package/dist/utils/request-submit.js.map +1 -0
- package/dist/utils/request-submit.mjs +18 -0
- package/dist/utils/request-submit.mjs.map +1 -0
- package/dist/utils/url.js +22 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/utils/url.mjs +20 -0
- package/dist/utils/url.mjs.map +1 -0
- package/dist/utils/use-controllable-state.js +34 -0
- package/dist/utils/use-controllable-state.js.map +1 -0
- package/dist/utils/use-controllable-state.mjs +32 -0
- package/dist/utils/use-controllable-state.mjs.map +1 -0
- package/dist/utils/use-id.js +29 -0
- package/dist/utils/use-id.js.map +1 -0
- package/dist/utils/use-id.mjs +27 -0
- package/dist/utils/use-id.mjs.map +1 -0
- package/dist/utils/use-index.js +32 -0
- package/dist/utils/use-index.js.map +1 -0
- package/dist/utils/use-index.mjs +30 -0
- package/dist/utils/use-index.mjs.map +1 -0
- package/dist/utils/use-initial.js +10 -0
- package/dist/utils/use-initial.js.map +1 -0
- package/dist/utils/use-initial.mjs +8 -0
- package/dist/utils/use-initial.mjs.map +1 -0
- package/dist/utils/use-interval.js +24 -0
- package/dist/utils/use-interval.js.map +1 -0
- package/dist/utils/use-interval.mjs +22 -0
- package/dist/utils/use-interval.mjs.map +1 -0
- package/dist/utils/use-latest.js +14 -0
- package/dist/utils/use-latest.js.map +1 -0
- package/dist/utils/use-latest.mjs +12 -0
- package/dist/utils/use-latest.mjs.map +1 -0
- package/dist/utils/use-layout-effect.js +8 -0
- package/dist/utils/use-layout-effect.js.map +1 -0
- package/dist/utils/use-layout-effect.mjs +6 -0
- package/dist/utils/use-layout-effect.mjs.map +1 -0
- package/dist/utils/use-refs.js +24 -0
- package/dist/utils/use-refs.js.map +1 -0
- package/dist/utils/use-refs.mjs +22 -0
- package/dist/utils/use-refs.mjs.map +1 -0
- package/dist/utils/use-rerender.js +14 -0
- package/dist/utils/use-rerender.js.map +1 -0
- package/dist/utils/use-rerender.mjs +12 -0
- package/dist/utils/use-rerender.mjs.map +1 -0
- package/dist/utils/use-transition.js +12 -0
- package/dist/utils/use-transition.js.map +1 -0
- package/dist/utils/use-transition.mjs +10 -0
- package/dist/utils/use-transition.mjs.map +1 -0
- package/dist/utils/use-visible.js +48 -0
- package/dist/utils/use-visible.js.map +1 -0
- package/dist/utils/use-visible.mjs +46 -0
- package/dist/utils/use-visible.mjs.map +1 -0
- package/dist/utils/visually-hidden.js +17 -0
- package/dist/utils/visually-hidden.js.map +1 -0
- package/dist/utils/visually-hidden.mjs +15 -0
- package/dist/utils/visually-hidden.mjs.map +1 -0
- package/dist/utils/wrap.js +9 -0
- package/dist/utils/wrap.js.map +1 -0
- package/dist/utils/wrap.mjs +7 -0
- package/dist/utils/wrap.mjs.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/dist/version.mjs +6 -0
- package/dist/version.mjs.map +1 -0
- package/package.json +142 -0
- package/primitives/README.md +5 -0
- package/primitives/package.json +4 -0
- package/src/styles/constants.css +17 -0
- package/src/styles/dark/attributes.css +8 -0
- package/src/styles/dark/index.css +29 -0
- package/src/styles/dark/media-query.css +7 -0
- package/src/styles/index.css +1437 -0
- package/src/styles/utils.css +36 -0
- package/styles/dark/attributes.css +1 -0
- package/styles/dark/attributes.css.d.ts +1 -0
- package/styles/dark/attributes.css.map +1 -0
- package/styles/dark/media-query.css +1 -0
- package/styles/dark/media-query.css.d.ts +1 -0
- package/styles/dark/media-query.css.map +1 -0
- package/styles.css +1 -0
- package/styles.css.d.ts +1 -0
- package/styles.css.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Emoji.mjs","sources":["../../../src/components/internal/Emoji.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport type { EmojiProps as EmojiPrimitiveProps } from \"../../primitives/internal/Emoji\";\nimport { Emoji as EmojiPrimitive } from \"../../primitives/internal/Emoji\";\nimport { classNames } from \"../../utils/class-names\";\n\nexport const Emoji = forwardRef<HTMLSpanElement, EmojiPrimitiveProps>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <EmojiPrimitive\n className={classNames(\"lb-emoji\", className)}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n);\n"],"names":["React","EmojiPrimitive"],"mappings":";;;;AAMO,MAAM,KAAQ,GAAA,UAAA;AAAA,EACnB,CAAC,EAAE,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AACzC,IAAA,uBACGA,cAAA,CAAA,aAAA,CAAAC,OAAA,EAAA;AAAA,MACC,SAAA,EAAW,UAAW,CAAA,UAAA,EAAY,SAAS,CAAA;AAAA,MAC1C,GAAG,KAAA;AAAA,MACJ,GAAK,EAAA,YAAA;AAAA,KACP,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var PopoverPrimitive = require('@radix-ui/react-popover');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var config = require('../../config.js');
|
|
6
|
+
var constants = require('../../constants.js');
|
|
7
|
+
var Search = require('../../icons/Search.js');
|
|
8
|
+
var Spinner = require('../../icons/Spinner.js');
|
|
9
|
+
var overrides = require('../../overrides.js');
|
|
10
|
+
var index = require('../../primitives/EmojiPicker/index.js');
|
|
11
|
+
var classNames = require('../../utils/class-names.js');
|
|
12
|
+
var Emoji = require('./Emoji.js');
|
|
13
|
+
|
|
14
|
+
function _interopNamespaceDefault(e) {
|
|
15
|
+
var n = Object.create(null);
|
|
16
|
+
if (e) {
|
|
17
|
+
Object.keys(e).forEach(function (k) {
|
|
18
|
+
if (k !== 'default') {
|
|
19
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return e[k]; }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
n.default = e;
|
|
28
|
+
return Object.freeze(n);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(PopoverPrimitive);
|
|
32
|
+
|
|
33
|
+
function EmojiPickerLoading({
|
|
34
|
+
className,
|
|
35
|
+
...props
|
|
36
|
+
}) {
|
|
37
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
38
|
+
className: classNames.classNames("lb-emoji-picker-loading", className),
|
|
39
|
+
...props
|
|
40
|
+
}, /* @__PURE__ */ React.createElement(Spinner.SpinnerIcon, null));
|
|
41
|
+
}
|
|
42
|
+
function EmojiPickerEmpty({
|
|
43
|
+
className,
|
|
44
|
+
...props
|
|
45
|
+
}) {
|
|
46
|
+
const $ = overrides.useOverrides();
|
|
47
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
48
|
+
className: classNames.classNames("lb-emoji-picker-empty", className),
|
|
49
|
+
...props
|
|
50
|
+
}, $.EMOJI_PICKER_EMPTY);
|
|
51
|
+
}
|
|
52
|
+
function EmojiPickerError({
|
|
53
|
+
error,
|
|
54
|
+
className,
|
|
55
|
+
...props
|
|
56
|
+
}) {
|
|
57
|
+
const $ = overrides.useOverrides();
|
|
58
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
59
|
+
className: classNames.classNames("lb-emoji-picker-error", className),
|
|
60
|
+
...props
|
|
61
|
+
}, $.EMOJI_PICKER_ERROR(error));
|
|
62
|
+
}
|
|
63
|
+
function EmojiPickerCategoryHeader({
|
|
64
|
+
category,
|
|
65
|
+
className,
|
|
66
|
+
...props
|
|
67
|
+
}) {
|
|
68
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
69
|
+
className: classNames.classNames("lb-emoji-picker-category-header", className),
|
|
70
|
+
...props
|
|
71
|
+
}, /* @__PURE__ */ React.createElement("span", {
|
|
72
|
+
className: "lb-emoji-picker-category-header-title"
|
|
73
|
+
}, category));
|
|
74
|
+
}
|
|
75
|
+
function EmojiPickerGrid({
|
|
76
|
+
children,
|
|
77
|
+
className,
|
|
78
|
+
...props
|
|
79
|
+
}) {
|
|
80
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
81
|
+
className: classNames.classNames("lb-emoji-picker-grid", className),
|
|
82
|
+
...props
|
|
83
|
+
}, children);
|
|
84
|
+
}
|
|
85
|
+
function EmojiPickerRow({
|
|
86
|
+
attributes,
|
|
87
|
+
children,
|
|
88
|
+
className,
|
|
89
|
+
...props
|
|
90
|
+
}) {
|
|
91
|
+
const isFirstRow = React.useMemo(
|
|
92
|
+
() => attributes.categoryRowIndex === 0,
|
|
93
|
+
[attributes.categoryRowIndex]
|
|
94
|
+
);
|
|
95
|
+
const isLastRow = React.useMemo(
|
|
96
|
+
() => attributes.categoryRowIndex === attributes.categoryRowsCount - 1,
|
|
97
|
+
[attributes.categoryRowIndex, attributes.categoryRowsCount]
|
|
98
|
+
);
|
|
99
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
100
|
+
className: classNames.classNames("lb-emoji-picker-row", className),
|
|
101
|
+
"data-first": isFirstRow ? "" : void 0,
|
|
102
|
+
"data-last": isLastRow ? "" : void 0,
|
|
103
|
+
...props
|
|
104
|
+
}, children);
|
|
105
|
+
}
|
|
106
|
+
function EmojiPickerEmoji({
|
|
107
|
+
emoji,
|
|
108
|
+
className,
|
|
109
|
+
...props
|
|
110
|
+
}) {
|
|
111
|
+
return /* @__PURE__ */ React.createElement("button", {
|
|
112
|
+
className: classNames.classNames("lb-emoji-picker-emoji", className),
|
|
113
|
+
...props
|
|
114
|
+
}, /* @__PURE__ */ React.createElement(Emoji.Emoji, {
|
|
115
|
+
emoji
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
const EmojiPicker = React.forwardRef(
|
|
119
|
+
({ onEmojiSelect, onOpenChange, children, className, ...props }, forwardedRef) => {
|
|
120
|
+
const [isOpen, setOpen] = React.useState(false);
|
|
121
|
+
const { portalContainer } = config.useLiveblocksUIConfig();
|
|
122
|
+
const $ = overrides.useOverrides();
|
|
123
|
+
const handleOpenChange = React.useCallback(
|
|
124
|
+
(isOpen2) => {
|
|
125
|
+
setOpen(isOpen2);
|
|
126
|
+
onOpenChange?.(isOpen2);
|
|
127
|
+
},
|
|
128
|
+
[onOpenChange]
|
|
129
|
+
);
|
|
130
|
+
const handleEmojiSelect = React.useCallback(
|
|
131
|
+
(emoji) => {
|
|
132
|
+
setOpen(false);
|
|
133
|
+
onEmojiSelect?.(emoji);
|
|
134
|
+
},
|
|
135
|
+
[onEmojiSelect]
|
|
136
|
+
);
|
|
137
|
+
return /* @__PURE__ */ React.createElement(PopoverPrimitive__namespace.Root, {
|
|
138
|
+
open: isOpen,
|
|
139
|
+
onOpenChange: handleOpenChange
|
|
140
|
+
}, children, /* @__PURE__ */ React.createElement(PopoverPrimitive__namespace.Portal, {
|
|
141
|
+
container: portalContainer
|
|
142
|
+
}, /* @__PURE__ */ React.createElement(PopoverPrimitive__namespace.Content, {
|
|
143
|
+
side: "top",
|
|
144
|
+
align: "center",
|
|
145
|
+
sideOffset: constants.FLOATING_ELEMENT_SIDE_OFFSET,
|
|
146
|
+
collisionPadding: constants.FLOATING_ELEMENT_COLLISION_PADDING,
|
|
147
|
+
className: classNames.classNames(
|
|
148
|
+
"lb-root lb-portal lb-elevation lb-emoji-picker",
|
|
149
|
+
className
|
|
150
|
+
),
|
|
151
|
+
...props,
|
|
152
|
+
ref: forwardedRef
|
|
153
|
+
}, /* @__PURE__ */ React.createElement(index.Root, {
|
|
154
|
+
onEmojiSelect: handleEmojiSelect,
|
|
155
|
+
locale: $.locale
|
|
156
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
157
|
+
className: "lb-emoji-picker-header"
|
|
158
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
159
|
+
className: "lb-emoji-picker-search-container"
|
|
160
|
+
}, /* @__PURE__ */ React.createElement(index.Search, {
|
|
161
|
+
className: "lb-emoji-picker-search",
|
|
162
|
+
placeholder: $.EMOJI_PICKER_SEARCH_PLACEHOLDER,
|
|
163
|
+
autoFocus: true
|
|
164
|
+
}), /* @__PURE__ */ React.createElement(Search.SearchIcon, {
|
|
165
|
+
className: "lb-emoji-picker-search-icon"
|
|
166
|
+
}))), /* @__PURE__ */ React.createElement(index.Content, {
|
|
167
|
+
className: "lb-emoji-picker-content",
|
|
168
|
+
components: {
|
|
169
|
+
Loading: EmojiPickerLoading,
|
|
170
|
+
Empty: EmojiPickerEmpty,
|
|
171
|
+
Error: EmojiPickerError,
|
|
172
|
+
CategoryHeader: EmojiPickerCategoryHeader,
|
|
173
|
+
Grid: EmojiPickerGrid,
|
|
174
|
+
Row: EmojiPickerRow,
|
|
175
|
+
Emoji: EmojiPickerEmoji
|
|
176
|
+
}
|
|
177
|
+
})))));
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
Object.defineProperty(exports, 'EmojiPickerTrigger', {
|
|
182
|
+
enumerable: true,
|
|
183
|
+
get: function () { return PopoverPrimitive.PopoverTrigger; }
|
|
184
|
+
});
|
|
185
|
+
exports.EmojiPicker = EmojiPicker;
|
|
186
|
+
//# sourceMappingURL=EmojiPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmojiPicker.js","sources":["../../../src/components/internal/EmojiPicker.tsx"],"sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport React, { forwardRef, useCallback, useMemo, useState } from \"react\";\n\nimport { useLiveblocksUIConfig } from \"../../config\";\nimport {\n FLOATING_ELEMENT_COLLISION_PADDING,\n FLOATING_ELEMENT_SIDE_OFFSET,\n} from \"../../constants\";\nimport { SearchIcon } from \"../../icons/Search\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport { useOverrides } from \"../../overrides\";\nimport * as EmojiPickerPrimitive from \"../../primitives/EmojiPicker\";\nimport type {\n EmojiPickerContentCategoryHeaderProps,\n EmojiPickerContentEmojiProps,\n EmojiPickerContentEmptyProps,\n EmojiPickerContentErrorProps,\n EmojiPickerContentGridProps,\n EmojiPickerContentLoadingProps,\n EmojiPickerContentRowProps,\n} from \"../../primitives/EmojiPicker/types\";\nimport { classNames } from \"../../utils/class-names\";\nimport { Emoji } from \"./Emoji\";\n\nexport interface EmojiPickerProps extends ComponentPropsWithoutRef<\"div\"> {\n onOpenChange?: (open: boolean) => void;\n onEmojiSelect?: (emoji: string) => void;\n}\n\nfunction EmojiPickerLoading({\n className,\n ...props\n}: EmojiPickerContentLoadingProps) {\n return (\n <div\n className={classNames(\"lb-emoji-picker-loading\", className)}\n {...props}\n >\n <SpinnerIcon />\n </div>\n );\n}\n\nfunction EmojiPickerEmpty({\n className,\n ...props\n}: EmojiPickerContentEmptyProps) {\n const $ = useOverrides();\n\n return (\n <div className={classNames(\"lb-emoji-picker-empty\", className)} {...props}>\n {$.EMOJI_PICKER_EMPTY}\n </div>\n );\n}\n\nfunction EmojiPickerError({\n error,\n className,\n ...props\n}: EmojiPickerContentErrorProps) {\n const $ = useOverrides();\n\n return (\n <div className={classNames(\"lb-emoji-picker-error\", className)} {...props}>\n {$.EMOJI_PICKER_ERROR(error)}\n </div>\n );\n}\n\nfunction EmojiPickerCategoryHeader({\n category,\n className,\n ...props\n}: EmojiPickerContentCategoryHeaderProps) {\n return (\n <div\n className={classNames(\"lb-emoji-picker-category-header\", className)}\n {...props}\n >\n <span className=\"lb-emoji-picker-category-header-title\">{category}</span>\n </div>\n );\n}\n\nfunction EmojiPickerGrid({\n children,\n className,\n ...props\n}: EmojiPickerContentGridProps) {\n return (\n <div className={classNames(\"lb-emoji-picker-grid\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nfunction EmojiPickerRow({\n attributes,\n children,\n className,\n ...props\n}: EmojiPickerContentRowProps) {\n const isFirstRow = useMemo(\n () => attributes.categoryRowIndex === 0,\n [attributes.categoryRowIndex]\n );\n const isLastRow = useMemo(\n () => attributes.categoryRowIndex === attributes.categoryRowsCount - 1,\n [attributes.categoryRowIndex, attributes.categoryRowsCount]\n );\n\n return (\n <div\n className={classNames(\"lb-emoji-picker-row\", className)}\n data-first={isFirstRow ? \"\" : undefined}\n data-last={isLastRow ? \"\" : undefined}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction EmojiPickerEmoji({\n emoji,\n className,\n ...props\n}: EmojiPickerContentEmojiProps) {\n return (\n <button\n className={classNames(\"lb-emoji-picker-emoji\", className)}\n {...props}\n >\n <Emoji emoji={emoji} />\n </button>\n );\n}\n\nexport const EmojiPicker = forwardRef<HTMLDivElement, EmojiPickerProps>(\n (\n { onEmojiSelect, onOpenChange, children, className, ...props },\n forwardedRef\n ) => {\n const [isOpen, setOpen] = useState(false);\n const { portalContainer } = useLiveblocksUIConfig();\n const $ = useOverrides();\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen);\n onOpenChange?.(isOpen);\n },\n [onOpenChange]\n );\n\n const handleEmojiSelect = useCallback(\n (emoji: string) => {\n setOpen(false);\n onEmojiSelect?.(emoji);\n },\n [onEmojiSelect]\n );\n\n return (\n <PopoverPrimitive.Root open={isOpen} onOpenChange={handleOpenChange}>\n {children}\n <PopoverPrimitive.Portal container={portalContainer}>\n <PopoverPrimitive.Content\n side=\"top\"\n align=\"center\"\n sideOffset={FLOATING_ELEMENT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-emoji-picker\",\n className\n )}\n {...props}\n ref={forwardedRef}\n >\n <EmojiPickerPrimitive.Root\n onEmojiSelect={handleEmojiSelect}\n locale={$.locale}\n >\n <div className=\"lb-emoji-picker-header\">\n <div className=\"lb-emoji-picker-search-container\">\n <EmojiPickerPrimitive.Search\n className=\"lb-emoji-picker-search\"\n placeholder={$.EMOJI_PICKER_SEARCH_PLACEHOLDER}\n autoFocus\n />\n <SearchIcon className=\"lb-emoji-picker-search-icon\" />\n </div>\n </div>\n <EmojiPickerPrimitive.Content\n className=\"lb-emoji-picker-content\"\n components={{\n Loading: EmojiPickerLoading,\n Empty: EmojiPickerEmpty,\n Error: EmojiPickerError,\n CategoryHeader: EmojiPickerCategoryHeader,\n Grid: EmojiPickerGrid,\n Row: EmojiPickerRow,\n Emoji: EmojiPickerEmoji,\n }}\n />\n </EmojiPickerPrimitive.Root>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n }\n);\n\nexport { PopoverTrigger as EmojiPickerTrigger } from \"@radix-ui/react-popover\";\n"],"names":["classNames","SpinnerIcon","useOverrides","useMemo","Emoji","forwardRef","useState","useLiveblocksUIConfig","useCallback","isOpen","PopoverPrimitive","FLOATING_ELEMENT_SIDE_OFFSET","FLOATING_ELEMENT_COLLISION_PADDING","EmojiPickerPrimitive.Root","EmojiPickerPrimitive.Search","SearchIcon","EmojiPickerPrimitive.Content"],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
2
|
+
export { PopoverTrigger as EmojiPickerTrigger } from '@radix-ui/react-popover';
|
|
3
|
+
import React__default, { forwardRef, useState, useCallback, useMemo } from 'react';
|
|
4
|
+
import { useLiveblocksUIConfig } from '../../config.mjs';
|
|
5
|
+
import { FLOATING_ELEMENT_SIDE_OFFSET, FLOATING_ELEMENT_COLLISION_PADDING } from '../../constants.mjs';
|
|
6
|
+
import { SearchIcon } from '../../icons/Search.mjs';
|
|
7
|
+
import { SpinnerIcon } from '../../icons/Spinner.mjs';
|
|
8
|
+
import { useOverrides } from '../../overrides.mjs';
|
|
9
|
+
import { Root as EmojiPickerRoot, Search as EmojiPickerSearch, Content as EmojiPickerContent } from '../../primitives/EmojiPicker/index.mjs';
|
|
10
|
+
import { classNames } from '../../utils/class-names.mjs';
|
|
11
|
+
import { Emoji } from './Emoji.mjs';
|
|
12
|
+
|
|
13
|
+
function EmojiPickerLoading({
|
|
14
|
+
className,
|
|
15
|
+
...props
|
|
16
|
+
}) {
|
|
17
|
+
return /* @__PURE__ */ React__default.createElement("div", {
|
|
18
|
+
className: classNames("lb-emoji-picker-loading", className),
|
|
19
|
+
...props
|
|
20
|
+
}, /* @__PURE__ */ React__default.createElement(SpinnerIcon, null));
|
|
21
|
+
}
|
|
22
|
+
function EmojiPickerEmpty({
|
|
23
|
+
className,
|
|
24
|
+
...props
|
|
25
|
+
}) {
|
|
26
|
+
const $ = useOverrides();
|
|
27
|
+
return /* @__PURE__ */ React__default.createElement("div", {
|
|
28
|
+
className: classNames("lb-emoji-picker-empty", className),
|
|
29
|
+
...props
|
|
30
|
+
}, $.EMOJI_PICKER_EMPTY);
|
|
31
|
+
}
|
|
32
|
+
function EmojiPickerError({
|
|
33
|
+
error,
|
|
34
|
+
className,
|
|
35
|
+
...props
|
|
36
|
+
}) {
|
|
37
|
+
const $ = useOverrides();
|
|
38
|
+
return /* @__PURE__ */ React__default.createElement("div", {
|
|
39
|
+
className: classNames("lb-emoji-picker-error", className),
|
|
40
|
+
...props
|
|
41
|
+
}, $.EMOJI_PICKER_ERROR(error));
|
|
42
|
+
}
|
|
43
|
+
function EmojiPickerCategoryHeader({
|
|
44
|
+
category,
|
|
45
|
+
className,
|
|
46
|
+
...props
|
|
47
|
+
}) {
|
|
48
|
+
return /* @__PURE__ */ React__default.createElement("div", {
|
|
49
|
+
className: classNames("lb-emoji-picker-category-header", className),
|
|
50
|
+
...props
|
|
51
|
+
}, /* @__PURE__ */ React__default.createElement("span", {
|
|
52
|
+
className: "lb-emoji-picker-category-header-title"
|
|
53
|
+
}, category));
|
|
54
|
+
}
|
|
55
|
+
function EmojiPickerGrid({
|
|
56
|
+
children,
|
|
57
|
+
className,
|
|
58
|
+
...props
|
|
59
|
+
}) {
|
|
60
|
+
return /* @__PURE__ */ React__default.createElement("div", {
|
|
61
|
+
className: classNames("lb-emoji-picker-grid", className),
|
|
62
|
+
...props
|
|
63
|
+
}, children);
|
|
64
|
+
}
|
|
65
|
+
function EmojiPickerRow({
|
|
66
|
+
attributes,
|
|
67
|
+
children,
|
|
68
|
+
className,
|
|
69
|
+
...props
|
|
70
|
+
}) {
|
|
71
|
+
const isFirstRow = useMemo(
|
|
72
|
+
() => attributes.categoryRowIndex === 0,
|
|
73
|
+
[attributes.categoryRowIndex]
|
|
74
|
+
);
|
|
75
|
+
const isLastRow = useMemo(
|
|
76
|
+
() => attributes.categoryRowIndex === attributes.categoryRowsCount - 1,
|
|
77
|
+
[attributes.categoryRowIndex, attributes.categoryRowsCount]
|
|
78
|
+
);
|
|
79
|
+
return /* @__PURE__ */ React__default.createElement("div", {
|
|
80
|
+
className: classNames("lb-emoji-picker-row", className),
|
|
81
|
+
"data-first": isFirstRow ? "" : void 0,
|
|
82
|
+
"data-last": isLastRow ? "" : void 0,
|
|
83
|
+
...props
|
|
84
|
+
}, children);
|
|
85
|
+
}
|
|
86
|
+
function EmojiPickerEmoji({
|
|
87
|
+
emoji,
|
|
88
|
+
className,
|
|
89
|
+
...props
|
|
90
|
+
}) {
|
|
91
|
+
return /* @__PURE__ */ React__default.createElement("button", {
|
|
92
|
+
className: classNames("lb-emoji-picker-emoji", className),
|
|
93
|
+
...props
|
|
94
|
+
}, /* @__PURE__ */ React__default.createElement(Emoji, {
|
|
95
|
+
emoji
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
const EmojiPicker = forwardRef(
|
|
99
|
+
({ onEmojiSelect, onOpenChange, children, className, ...props }, forwardedRef) => {
|
|
100
|
+
const [isOpen, setOpen] = useState(false);
|
|
101
|
+
const { portalContainer } = useLiveblocksUIConfig();
|
|
102
|
+
const $ = useOverrides();
|
|
103
|
+
const handleOpenChange = useCallback(
|
|
104
|
+
(isOpen2) => {
|
|
105
|
+
setOpen(isOpen2);
|
|
106
|
+
onOpenChange?.(isOpen2);
|
|
107
|
+
},
|
|
108
|
+
[onOpenChange]
|
|
109
|
+
);
|
|
110
|
+
const handleEmojiSelect = useCallback(
|
|
111
|
+
(emoji) => {
|
|
112
|
+
setOpen(false);
|
|
113
|
+
onEmojiSelect?.(emoji);
|
|
114
|
+
},
|
|
115
|
+
[onEmojiSelect]
|
|
116
|
+
);
|
|
117
|
+
return /* @__PURE__ */ React__default.createElement(PopoverPrimitive.Root, {
|
|
118
|
+
open: isOpen,
|
|
119
|
+
onOpenChange: handleOpenChange
|
|
120
|
+
}, children, /* @__PURE__ */ React__default.createElement(PopoverPrimitive.Portal, {
|
|
121
|
+
container: portalContainer
|
|
122
|
+
}, /* @__PURE__ */ React__default.createElement(PopoverPrimitive.Content, {
|
|
123
|
+
side: "top",
|
|
124
|
+
align: "center",
|
|
125
|
+
sideOffset: FLOATING_ELEMENT_SIDE_OFFSET,
|
|
126
|
+
collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
|
|
127
|
+
className: classNames(
|
|
128
|
+
"lb-root lb-portal lb-elevation lb-emoji-picker",
|
|
129
|
+
className
|
|
130
|
+
),
|
|
131
|
+
...props,
|
|
132
|
+
ref: forwardedRef
|
|
133
|
+
}, /* @__PURE__ */ React__default.createElement(EmojiPickerRoot, {
|
|
134
|
+
onEmojiSelect: handleEmojiSelect,
|
|
135
|
+
locale: $.locale
|
|
136
|
+
}, /* @__PURE__ */ React__default.createElement("div", {
|
|
137
|
+
className: "lb-emoji-picker-header"
|
|
138
|
+
}, /* @__PURE__ */ React__default.createElement("div", {
|
|
139
|
+
className: "lb-emoji-picker-search-container"
|
|
140
|
+
}, /* @__PURE__ */ React__default.createElement(EmojiPickerSearch, {
|
|
141
|
+
className: "lb-emoji-picker-search",
|
|
142
|
+
placeholder: $.EMOJI_PICKER_SEARCH_PLACEHOLDER,
|
|
143
|
+
autoFocus: true
|
|
144
|
+
}), /* @__PURE__ */ React__default.createElement(SearchIcon, {
|
|
145
|
+
className: "lb-emoji-picker-search-icon"
|
|
146
|
+
}))), /* @__PURE__ */ React__default.createElement(EmojiPickerContent, {
|
|
147
|
+
className: "lb-emoji-picker-content",
|
|
148
|
+
components: {
|
|
149
|
+
Loading: EmojiPickerLoading,
|
|
150
|
+
Empty: EmojiPickerEmpty,
|
|
151
|
+
Error: EmojiPickerError,
|
|
152
|
+
CategoryHeader: EmojiPickerCategoryHeader,
|
|
153
|
+
Grid: EmojiPickerGrid,
|
|
154
|
+
Row: EmojiPickerRow,
|
|
155
|
+
Emoji: EmojiPickerEmoji
|
|
156
|
+
}
|
|
157
|
+
})))));
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
export { EmojiPicker };
|
|
162
|
+
//# sourceMappingURL=EmojiPicker.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmojiPicker.mjs","sources":["../../../src/components/internal/EmojiPicker.tsx"],"sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport React, { forwardRef, useCallback, useMemo, useState } from \"react\";\n\nimport { useLiveblocksUIConfig } from \"../../config\";\nimport {\n FLOATING_ELEMENT_COLLISION_PADDING,\n FLOATING_ELEMENT_SIDE_OFFSET,\n} from \"../../constants\";\nimport { SearchIcon } from \"../../icons/Search\";\nimport { SpinnerIcon } from \"../../icons/Spinner\";\nimport { useOverrides } from \"../../overrides\";\nimport * as EmojiPickerPrimitive from \"../../primitives/EmojiPicker\";\nimport type {\n EmojiPickerContentCategoryHeaderProps,\n EmojiPickerContentEmojiProps,\n EmojiPickerContentEmptyProps,\n EmojiPickerContentErrorProps,\n EmojiPickerContentGridProps,\n EmojiPickerContentLoadingProps,\n EmojiPickerContentRowProps,\n} from \"../../primitives/EmojiPicker/types\";\nimport { classNames } from \"../../utils/class-names\";\nimport { Emoji } from \"./Emoji\";\n\nexport interface EmojiPickerProps extends ComponentPropsWithoutRef<\"div\"> {\n onOpenChange?: (open: boolean) => void;\n onEmojiSelect?: (emoji: string) => void;\n}\n\nfunction EmojiPickerLoading({\n className,\n ...props\n}: EmojiPickerContentLoadingProps) {\n return (\n <div\n className={classNames(\"lb-emoji-picker-loading\", className)}\n {...props}\n >\n <SpinnerIcon />\n </div>\n );\n}\n\nfunction EmojiPickerEmpty({\n className,\n ...props\n}: EmojiPickerContentEmptyProps) {\n const $ = useOverrides();\n\n return (\n <div className={classNames(\"lb-emoji-picker-empty\", className)} {...props}>\n {$.EMOJI_PICKER_EMPTY}\n </div>\n );\n}\n\nfunction EmojiPickerError({\n error,\n className,\n ...props\n}: EmojiPickerContentErrorProps) {\n const $ = useOverrides();\n\n return (\n <div className={classNames(\"lb-emoji-picker-error\", className)} {...props}>\n {$.EMOJI_PICKER_ERROR(error)}\n </div>\n );\n}\n\nfunction EmojiPickerCategoryHeader({\n category,\n className,\n ...props\n}: EmojiPickerContentCategoryHeaderProps) {\n return (\n <div\n className={classNames(\"lb-emoji-picker-category-header\", className)}\n {...props}\n >\n <span className=\"lb-emoji-picker-category-header-title\">{category}</span>\n </div>\n );\n}\n\nfunction EmojiPickerGrid({\n children,\n className,\n ...props\n}: EmojiPickerContentGridProps) {\n return (\n <div className={classNames(\"lb-emoji-picker-grid\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nfunction EmojiPickerRow({\n attributes,\n children,\n className,\n ...props\n}: EmojiPickerContentRowProps) {\n const isFirstRow = useMemo(\n () => attributes.categoryRowIndex === 0,\n [attributes.categoryRowIndex]\n );\n const isLastRow = useMemo(\n () => attributes.categoryRowIndex === attributes.categoryRowsCount - 1,\n [attributes.categoryRowIndex, attributes.categoryRowsCount]\n );\n\n return (\n <div\n className={classNames(\"lb-emoji-picker-row\", className)}\n data-first={isFirstRow ? \"\" : undefined}\n data-last={isLastRow ? \"\" : undefined}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nfunction EmojiPickerEmoji({\n emoji,\n className,\n ...props\n}: EmojiPickerContentEmojiProps) {\n return (\n <button\n className={classNames(\"lb-emoji-picker-emoji\", className)}\n {...props}\n >\n <Emoji emoji={emoji} />\n </button>\n );\n}\n\nexport const EmojiPicker = forwardRef<HTMLDivElement, EmojiPickerProps>(\n (\n { onEmojiSelect, onOpenChange, children, className, ...props },\n forwardedRef\n ) => {\n const [isOpen, setOpen] = useState(false);\n const { portalContainer } = useLiveblocksUIConfig();\n const $ = useOverrides();\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen);\n onOpenChange?.(isOpen);\n },\n [onOpenChange]\n );\n\n const handleEmojiSelect = useCallback(\n (emoji: string) => {\n setOpen(false);\n onEmojiSelect?.(emoji);\n },\n [onEmojiSelect]\n );\n\n return (\n <PopoverPrimitive.Root open={isOpen} onOpenChange={handleOpenChange}>\n {children}\n <PopoverPrimitive.Portal container={portalContainer}>\n <PopoverPrimitive.Content\n side=\"top\"\n align=\"center\"\n sideOffset={FLOATING_ELEMENT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-emoji-picker\",\n className\n )}\n {...props}\n ref={forwardedRef}\n >\n <EmojiPickerPrimitive.Root\n onEmojiSelect={handleEmojiSelect}\n locale={$.locale}\n >\n <div className=\"lb-emoji-picker-header\">\n <div className=\"lb-emoji-picker-search-container\">\n <EmojiPickerPrimitive.Search\n className=\"lb-emoji-picker-search\"\n placeholder={$.EMOJI_PICKER_SEARCH_PLACEHOLDER}\n autoFocus\n />\n <SearchIcon className=\"lb-emoji-picker-search-icon\" />\n </div>\n </div>\n <EmojiPickerPrimitive.Content\n className=\"lb-emoji-picker-content\"\n components={{\n Loading: EmojiPickerLoading,\n Empty: EmojiPickerEmpty,\n Error: EmojiPickerError,\n CategoryHeader: EmojiPickerCategoryHeader,\n Grid: EmojiPickerGrid,\n Row: EmojiPickerRow,\n Emoji: EmojiPickerEmoji,\n }}\n />\n </EmojiPickerPrimitive.Root>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n }\n);\n\nexport { PopoverTrigger as EmojiPickerTrigger } from \"@radix-ui/react-popover\";\n"],"names":["React","isOpen","EmojiPickerPrimitive.Root","EmojiPickerPrimitive.Search","EmojiPickerPrimitive.Content"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var classNames = require('../../utils/class-names.js');
|
|
5
|
+
|
|
6
|
+
const ICON_WIDTH = 20;
|
|
7
|
+
const ICON_HEIGHT = 20;
|
|
8
|
+
function Icon({ children, className, ...props }) {
|
|
9
|
+
return /* @__PURE__ */ React.createElement("svg", {
|
|
10
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11
|
+
width: ICON_WIDTH,
|
|
12
|
+
height: ICON_HEIGHT,
|
|
13
|
+
viewBox: `0 0 ${ICON_WIDTH} ${ICON_HEIGHT}`,
|
|
14
|
+
fill: "none",
|
|
15
|
+
stroke: "currentColor",
|
|
16
|
+
strokeWidth: 1.5,
|
|
17
|
+
strokeLinecap: "round",
|
|
18
|
+
strokeLinejoin: "round",
|
|
19
|
+
role: "presentation",
|
|
20
|
+
className: classNames.classNames("lb-icon", className),
|
|
21
|
+
...props
|
|
22
|
+
}, children);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
exports.ICON_HEIGHT = ICON_HEIGHT;
|
|
26
|
+
exports.ICON_WIDTH = ICON_WIDTH;
|
|
27
|
+
exports.Icon = Icon;
|
|
28
|
+
//# sourceMappingURL=Icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.js","sources":["../../../src/components/internal/Icon.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport React from \"react\";\n\nimport { classNames } from \"../../utils/class-names\";\n\nexport const ICON_WIDTH = 20;\nexport const ICON_HEIGHT = 20;\n\nexport function Icon({ children, className, ...props }: ComponentProps<\"svg\">) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={ICON_WIDTH}\n height={ICON_HEIGHT}\n viewBox={`0 0 ${ICON_WIDTH} ${ICON_HEIGHT}`}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n role=\"presentation\"\n className={classNames(\"lb-icon\", className)}\n {...props}\n >\n {children}\n </svg>\n );\n}\n"],"names":["classNames"],"mappings":";;;;;AAKO,MAAM,UAAa,GAAA,GAAA;AACnB,MAAM,WAAc,GAAA,GAAA;AAEpB,SAAS,IAAK,CAAA,EAAE,QAAU,EAAA,SAAA,EAAA,GAAc,OAAgC,EAAA;AAC7E,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,IACC,KAAM,EAAA,4BAAA;AAAA,IACN,KAAO,EAAA,UAAA;AAAA,IACP,MAAQ,EAAA,WAAA;AAAA,IACR,OAAA,EAAS,OAAO,UAAc,CAAA,CAAA,EAAA,WAAA,CAAA,CAAA;AAAA,IAC9B,IAAK,EAAA,MAAA;AAAA,IACL,MAAO,EAAA,cAAA;AAAA,IACP,WAAa,EAAA,GAAA;AAAA,IACb,aAAc,EAAA,OAAA;AAAA,IACd,cAAe,EAAA,OAAA;AAAA,IACf,IAAK,EAAA,cAAA;AAAA,IACL,SAAA,EAAWA,qBAAW,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,IACzC,GAAG,KAAA;AAAA,GAAA,EAEH,QACH,CAAA,CAAA;AAEJ;;;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { classNames } from '../../utils/class-names.mjs';
|
|
3
|
+
|
|
4
|
+
const ICON_WIDTH = 20;
|
|
5
|
+
const ICON_HEIGHT = 20;
|
|
6
|
+
function Icon({ children, className, ...props }) {
|
|
7
|
+
return /* @__PURE__ */ React__default.createElement("svg", {
|
|
8
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
9
|
+
width: ICON_WIDTH,
|
|
10
|
+
height: ICON_HEIGHT,
|
|
11
|
+
viewBox: `0 0 ${ICON_WIDTH} ${ICON_HEIGHT}`,
|
|
12
|
+
fill: "none",
|
|
13
|
+
stroke: "currentColor",
|
|
14
|
+
strokeWidth: 1.5,
|
|
15
|
+
strokeLinecap: "round",
|
|
16
|
+
strokeLinejoin: "round",
|
|
17
|
+
role: "presentation",
|
|
18
|
+
className: classNames("lb-icon", className),
|
|
19
|
+
...props
|
|
20
|
+
}, children);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { ICON_HEIGHT, ICON_WIDTH, Icon };
|
|
24
|
+
//# sourceMappingURL=Icon.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.mjs","sources":["../../../src/components/internal/Icon.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport React from \"react\";\n\nimport { classNames } from \"../../utils/class-names\";\n\nexport const ICON_WIDTH = 20;\nexport const ICON_HEIGHT = 20;\n\nexport function Icon({ children, className, ...props }: ComponentProps<\"svg\">) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={ICON_WIDTH}\n height={ICON_HEIGHT}\n viewBox={`0 0 ${ICON_WIDTH} ${ICON_HEIGHT}`}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n role=\"presentation\"\n className={classNames(\"lb-icon\", className)}\n {...props}\n >\n {children}\n </svg>\n );\n}\n"],"names":["React"],"mappings":";;;AAKO,MAAM,UAAa,GAAA,GAAA;AACnB,MAAM,WAAc,GAAA,GAAA;AAEpB,SAAS,IAAK,CAAA,EAAE,QAAU,EAAA,SAAA,EAAA,GAAc,OAAgC,EAAA;AAC7E,EAAA,uBACGA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,IACC,KAAM,EAAA,4BAAA;AAAA,IACN,KAAO,EAAA,UAAA;AAAA,IACP,MAAQ,EAAA,WAAA;AAAA,IACR,OAAA,EAAS,OAAO,UAAc,CAAA,CAAA,EAAA,WAAA,CAAA,CAAA;AAAA,IAC9B,IAAK,EAAA,MAAA;AAAA,IACL,MAAO,EAAA,cAAA;AAAA,IACP,WAAa,EAAA,GAAA;AAAA,IACb,aAAc,EAAA,OAAA;AAAA,IACd,cAAe,EAAA,OAAA;AAAA,IACf,IAAK,EAAA,cAAA;AAAA,IACL,SAAA,EAAW,UAAW,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,IACzC,GAAG,KAAA;AAAA,GAAA,EAEH,QACH,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@liveblocks/core');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var overrides = require('../../overrides.js');
|
|
6
|
+
var index = require('../../primitives/Comment/index.js');
|
|
7
|
+
var classNames = require('../../utils/class-names.js');
|
|
8
|
+
var Comment = require('../Comment.js');
|
|
9
|
+
var User = require('./User.js');
|
|
10
|
+
|
|
11
|
+
const INBOX_NOTIFICATION_THREAD_MAX_COMMENTS = 3;
|
|
12
|
+
function InboxNotificationComment({
|
|
13
|
+
comment,
|
|
14
|
+
showHeader = true,
|
|
15
|
+
overrides: overrides$1,
|
|
16
|
+
className,
|
|
17
|
+
...props
|
|
18
|
+
}) {
|
|
19
|
+
const $ = overrides.useOverrides(overrides$1);
|
|
20
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
21
|
+
className: classNames.classNames(
|
|
22
|
+
"lb-root lb-inbox-notification-comment lb-comment",
|
|
23
|
+
className
|
|
24
|
+
),
|
|
25
|
+
...props
|
|
26
|
+
}, showHeader && /* @__PURE__ */ React.createElement("div", {
|
|
27
|
+
className: "lb-comment-header"
|
|
28
|
+
}, /* @__PURE__ */ React.createElement(User.User, {
|
|
29
|
+
className: "lb-comment-author",
|
|
30
|
+
userId: comment.userId
|
|
31
|
+
})), /* @__PURE__ */ React.createElement("div", {
|
|
32
|
+
className: "lb-comment-content"
|
|
33
|
+
}, comment.body ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(index.Body, {
|
|
34
|
+
className: "lb-comment-body",
|
|
35
|
+
body: comment.body,
|
|
36
|
+
components: {
|
|
37
|
+
Mention: Comment.CommentMention,
|
|
38
|
+
Link: Comment.CommentNonInteractiveLink
|
|
39
|
+
}
|
|
40
|
+
}), comment.reactions.length > 0 && /* @__PURE__ */ React.createElement("div", {
|
|
41
|
+
className: "lb-comment-reactions"
|
|
42
|
+
}, comment.reactions.map((reaction) => /* @__PURE__ */ React.createElement(Comment.CommentNonInteractiveReaction, {
|
|
43
|
+
key: reaction.emoji,
|
|
44
|
+
reaction,
|
|
45
|
+
overrides: overrides$1,
|
|
46
|
+
disabled: true
|
|
47
|
+
})))) : /* @__PURE__ */ React.createElement("div", {
|
|
48
|
+
className: "lb-comment-body"
|
|
49
|
+
}, /* @__PURE__ */ React.createElement("p", {
|
|
50
|
+
className: "lb-comment-deleted"
|
|
51
|
+
}, $.COMMENT_DELETED))));
|
|
52
|
+
}
|
|
53
|
+
function findLastCommentWithMentionedId(comments, mentionedId) {
|
|
54
|
+
for (let i = comments.length - 1; i >= 0; i--) {
|
|
55
|
+
const comment = comments[i];
|
|
56
|
+
if (comment.userId === mentionedId) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (comment.body) {
|
|
60
|
+
const mentionedIds = core.getMentionedIdsFromCommentBody(comment.body);
|
|
61
|
+
if (mentionedIds.includes(mentionedId)) {
|
|
62
|
+
return comment;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
function getUserIdsFromComments(comments) {
|
|
69
|
+
return Array.from(new Set(comments.map((comment) => comment.userId)));
|
|
70
|
+
}
|
|
71
|
+
function generateInboxNotificationThreadContents(inboxNotification, thread, userId) {
|
|
72
|
+
const unreadComments = thread.comments.filter((comment) => {
|
|
73
|
+
if (!comment.body) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return inboxNotification.readAt ? comment.createdAt > inboxNotification.readAt && comment.createdAt <= inboxNotification.notifiedAt : comment.createdAt <= inboxNotification.notifiedAt;
|
|
77
|
+
});
|
|
78
|
+
if (unreadComments.length === 0) {
|
|
79
|
+
const lastComments = thread.comments.filter((comment) => comment.body).slice(-INBOX_NOTIFICATION_THREAD_MAX_COMMENTS);
|
|
80
|
+
return {
|
|
81
|
+
type: "comments",
|
|
82
|
+
unread: false,
|
|
83
|
+
comments: lastComments,
|
|
84
|
+
userIds: getUserIdsFromComments(lastComments),
|
|
85
|
+
date: inboxNotification.notifiedAt
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const commentWithMention = findLastCommentWithMentionedId(
|
|
89
|
+
unreadComments,
|
|
90
|
+
userId
|
|
91
|
+
);
|
|
92
|
+
if (commentWithMention) {
|
|
93
|
+
return {
|
|
94
|
+
type: "mention",
|
|
95
|
+
unread: true,
|
|
96
|
+
comments: [commentWithMention],
|
|
97
|
+
userIds: [commentWithMention.userId],
|
|
98
|
+
date: commentWithMention.createdAt
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const lastUnreadComments = unreadComments.slice(
|
|
102
|
+
-INBOX_NOTIFICATION_THREAD_MAX_COMMENTS
|
|
103
|
+
);
|
|
104
|
+
return {
|
|
105
|
+
type: "comments",
|
|
106
|
+
unread: true,
|
|
107
|
+
comments: lastUnreadComments,
|
|
108
|
+
userIds: getUserIdsFromComments(unreadComments),
|
|
109
|
+
date: inboxNotification.notifiedAt
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
exports.INBOX_NOTIFICATION_THREAD_MAX_COMMENTS = INBOX_NOTIFICATION_THREAD_MAX_COMMENTS;
|
|
114
|
+
exports.InboxNotificationComment = InboxNotificationComment;
|
|
115
|
+
exports.generateInboxNotificationThreadContents = generateInboxNotificationThreadContents;
|
|
116
|
+
//# sourceMappingURL=InboxNotificationThread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InboxNotificationThread.js","sources":["../../../src/components/internal/InboxNotificationThread.tsx"],"sourcesContent":["import type {\n BaseMetadata,\n CommentData,\n InboxNotificationThreadData,\n ThreadData,\n} from \"@liveblocks/core\";\nimport { getMentionedIdsFromCommentBody } from \"@liveblocks/core\";\nimport type { ComponentProps } from \"react\";\nimport React from \"react\";\n\nimport {\n type CommentOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../../overrides\";\nimport * as CommentPrimitive from \"../../primitives/Comment\";\nimport { classNames } from \"../../utils/class-names\";\nimport {\n CommentMention,\n CommentNonInteractiveLink,\n CommentNonInteractiveReaction,\n} from \"../Comment\";\nimport { User } from \"./User\";\n\ntype InboxNotificationThreadCommentsContents = {\n type: \"comments\";\n unread: boolean;\n comments: CommentData[];\n userIds: string[];\n date: Date;\n};\n\ntype InboxNotificationThreadMentionContents = {\n type: \"mention\";\n unread: boolean;\n comments: CommentData[];\n userIds: string[];\n date: Date;\n};\n\nexport const INBOX_NOTIFICATION_THREAD_MAX_COMMENTS = 3;\n\ntype InboxNotificationThreadContents =\n | InboxNotificationThreadCommentsContents\n | InboxNotificationThreadMentionContents;\n\ninterface InboxNotificationCommentProps extends ComponentProps<\"div\"> {\n comment: CommentData;\n showHeader?: boolean;\n overrides?: Partial<GlobalOverrides & CommentOverrides>;\n}\n\nexport function InboxNotificationComment({\n comment,\n showHeader = true,\n overrides,\n className,\n ...props\n}: InboxNotificationCommentProps) {\n const $ = useOverrides(overrides);\n\n return (\n <div\n className={classNames(\n \"lb-root lb-inbox-notification-comment lb-comment\",\n className\n )}\n {...props}\n >\n {showHeader && (\n <div className=\"lb-comment-header\">\n <User className=\"lb-comment-author\" userId={comment.userId} />\n </div>\n )}\n <div className=\"lb-comment-content\">\n {comment.body ? (\n <>\n <CommentPrimitive.Body\n className=\"lb-comment-body\"\n body={comment.body}\n components={{\n Mention: CommentMention,\n Link: CommentNonInteractiveLink,\n }}\n />\n {comment.reactions.length > 0 && (\n <div className=\"lb-comment-reactions\">\n {comment.reactions.map((reaction) => (\n <CommentNonInteractiveReaction\n key={reaction.emoji}\n reaction={reaction}\n overrides={overrides}\n disabled\n />\n ))}\n </div>\n )}\n </>\n ) : (\n <div className=\"lb-comment-body\">\n <p className=\"lb-comment-deleted\">{$.COMMENT_DELETED}</p>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * Find the last comment with a mention for the given user ID,\n * unless the comment was created by the user themselves.\n */\nfunction findLastCommentWithMentionedId(\n comments: CommentData[],\n mentionedId: string\n) {\n for (let i = comments.length - 1; i >= 0; i--) {\n const comment = comments[i];\n\n if (comment.userId === mentionedId) {\n continue;\n }\n\n if (comment.body) {\n const mentionedIds = getMentionedIdsFromCommentBody(comment.body);\n\n if (mentionedIds.includes(mentionedId)) {\n return comment;\n }\n }\n }\n\n return;\n}\n\nfunction getUserIdsFromComments(comments: CommentData[]) {\n return Array.from(new Set(comments.map((comment) => comment.userId)));\n}\n\nexport function generateInboxNotificationThreadContents(\n inboxNotification: InboxNotificationThreadData,\n thread: ThreadData<BaseMetadata>,\n userId: string\n): InboxNotificationThreadContents {\n const unreadComments = thread.comments.filter((comment) => {\n if (!comment.body) {\n return false;\n }\n\n return inboxNotification.readAt\n ? comment.createdAt > inboxNotification.readAt &&\n comment.createdAt <= inboxNotification.notifiedAt\n : comment.createdAt <= inboxNotification.notifiedAt;\n });\n\n // If the thread is read, show the last comments.\n if (unreadComments.length === 0) {\n const lastComments = thread.comments\n .filter((comment) => comment.body)\n .slice(-INBOX_NOTIFICATION_THREAD_MAX_COMMENTS);\n\n return {\n type: \"comments\",\n unread: false,\n comments: lastComments,\n userIds: getUserIdsFromComments(lastComments),\n date: inboxNotification.notifiedAt,\n };\n }\n\n const commentWithMention = findLastCommentWithMentionedId(\n unreadComments,\n userId\n );\n\n // If the thread contains one or more mentions for the current user, show the last comment with a mention.\n if (commentWithMention) {\n return {\n type: \"mention\",\n unread: true,\n comments: [commentWithMention],\n userIds: [commentWithMention.userId],\n date: commentWithMention.createdAt,\n };\n }\n\n const lastUnreadComments = unreadComments.slice(\n -INBOX_NOTIFICATION_THREAD_MAX_COMMENTS\n );\n\n // Otherwise, show the last unread comments.\n return {\n type: \"comments\",\n unread: true,\n comments: lastUnreadComments,\n userIds: getUserIdsFromComments(unreadComments),\n date: inboxNotification.notifiedAt,\n };\n}\n"],"names":["overrides","useOverrides","classNames","User","CommentPrimitive.Body","CommentMention","CommentNonInteractiveLink","CommentNonInteractiveReaction","getMentionedIdsFromCommentBody"],"mappings":"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"}
|