@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,77 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
4
|
+
import { Emoji } from './components/internal/Emoji.mjs';
|
|
5
|
+
import { pluralize } from './utils/pluralize.mjs';
|
|
6
|
+
|
|
7
|
+
const defaultOverrides = {
|
|
8
|
+
locale: "en",
|
|
9
|
+
dir: "ltr",
|
|
10
|
+
USER_SELF: "you",
|
|
11
|
+
USER_UNKNOWN: "Anonymous",
|
|
12
|
+
LIST_REMAINING: (count) => `${count} more`,
|
|
13
|
+
LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, "other")}`,
|
|
14
|
+
LIST_REMAINING_COMMENTS: (count) => `${count} more ${pluralize(count, "comment")}`,
|
|
15
|
+
EMOJI_PICKER_SEARCH_PLACEHOLDER: "Search\u2026",
|
|
16
|
+
EMOJI_PICKER_EMPTY: "No emoji found.",
|
|
17
|
+
EMOJI_PICKER_ERROR: () => "There was an error while getting the list of emoji.",
|
|
18
|
+
COMPOSER_INSERT_MENTION: "Mention someone",
|
|
19
|
+
COMPOSER_INSERT_EMOJI: "Add emoji",
|
|
20
|
+
COMPOSER_PLACEHOLDER: "Write a comment\u2026",
|
|
21
|
+
COMPOSER_SEND: "Send",
|
|
22
|
+
COMMENT_EDITED: "(edited)",
|
|
23
|
+
COMMENT_DELETED: "This comment has been deleted.",
|
|
24
|
+
COMMENT_MORE: "More",
|
|
25
|
+
COMMENT_EDIT: "Edit comment",
|
|
26
|
+
COMMENT_EDIT_COMPOSER_PLACEHOLDER: "Edit comment\u2026",
|
|
27
|
+
COMMENT_EDIT_COMPOSER_CANCEL: "Cancel",
|
|
28
|
+
COMMENT_EDIT_COMPOSER_SAVE: "Save",
|
|
29
|
+
COMMENT_DELETE: "Delete comment",
|
|
30
|
+
COMMENT_ADD_REACTION: "Add reaction",
|
|
31
|
+
COMMENT_REACTION_LIST: (list, emoji) => /* @__PURE__ */ React.createElement(React.Fragment, null, list, " reacted with ", /* @__PURE__ */ React.createElement(Emoji, {
|
|
32
|
+
emoji
|
|
33
|
+
})),
|
|
34
|
+
COMMENT_REACTION_DESCRIPTION: (emoji, count) => `${count} ${pluralize(count, "reaction")}, react with ${emoji}`,
|
|
35
|
+
THREAD_RESOLVE: "Resolve thread",
|
|
36
|
+
THREAD_UNRESOLVE: "Re-open thread",
|
|
37
|
+
THREAD_NEW_INDICATOR: "New",
|
|
38
|
+
THREAD_NEW_INDICATOR_DESCRIPTION: "New comments",
|
|
39
|
+
THREAD_COMPOSER_PLACEHOLDER: "Reply to thread\u2026",
|
|
40
|
+
THREAD_COMPOSER_SEND: "Reply",
|
|
41
|
+
INBOX_NOTIFICATION_MORE: "More",
|
|
42
|
+
INBOX_NOTIFICATION_MARK_AS_READ: "Mark as read",
|
|
43
|
+
INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (list, room) => /* @__PURE__ */ React.createElement(React.Fragment, null, list, " commented", room ? /* @__PURE__ */ React.createElement(React.Fragment, null, " in ", room) : /* @__PURE__ */ React.createElement(React.Fragment, null, " in a thread")),
|
|
44
|
+
INBOX_NOTIFICATION_THREAD_MENTION: (user, room) => /* @__PURE__ */ React.createElement(React.Fragment, null, user, " mentioned you", room ? /* @__PURE__ */ React.createElement(React.Fragment, null, " in ", room) : null)
|
|
45
|
+
};
|
|
46
|
+
const OverridesContext = createContext(void 0);
|
|
47
|
+
function useOverrides(overrides) {
|
|
48
|
+
const contextOverrides = useContext(OverridesContext);
|
|
49
|
+
return useMemo(
|
|
50
|
+
() => ({
|
|
51
|
+
...defaultOverrides,
|
|
52
|
+
...contextOverrides,
|
|
53
|
+
...overrides
|
|
54
|
+
}),
|
|
55
|
+
[contextOverrides, overrides]
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
function OverridesProvider({
|
|
59
|
+
children,
|
|
60
|
+
overrides: providerOverrides
|
|
61
|
+
}) {
|
|
62
|
+
const contextOverrides = useContext(OverridesContext);
|
|
63
|
+
const overrides = useMemo(
|
|
64
|
+
() => ({
|
|
65
|
+
...defaultOverrides,
|
|
66
|
+
...contextOverrides,
|
|
67
|
+
...providerOverrides
|
|
68
|
+
}),
|
|
69
|
+
[contextOverrides, providerOverrides]
|
|
70
|
+
);
|
|
71
|
+
return /* @__PURE__ */ React.createElement(OverridesContext.Provider, {
|
|
72
|
+
value: overrides
|
|
73
|
+
}, children);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { OverridesContext, OverridesProvider, defaultOverrides, useOverrides };
|
|
77
|
+
//# sourceMappingURL=overrides.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.mjs","sources":["../src/overrides.tsx"],"sourcesContent":["\"use client\";\n\nimport type { PropsWithChildren, ReactNode } from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\nimport * as React from \"react\";\n\nimport { Emoji } from \"./components/internal/Emoji\";\nimport type { Direction } from \"./types\";\nimport { pluralize } from \"./utils/pluralize\";\n\nexport interface LocalizationOverrides {\n locale: string;\n dir: Direction;\n}\n\nexport interface GlobalOverrides {\n USER_SELF: string;\n USER_UNKNOWN: string;\n LIST_REMAINING: (count: number) => string;\n LIST_REMAINING_USERS: (count: number) => string;\n LIST_REMAINING_COMMENTS: (count: number) => string;\n EMOJI_PICKER_SEARCH_PLACEHOLDER: string;\n EMOJI_PICKER_EMPTY: ReactNode;\n EMOJI_PICKER_ERROR: (error: Error) => ReactNode;\n}\n\nexport interface CommentOverrides {\n COMMENT_EDITED: ReactNode;\n COMMENT_DELETED: ReactNode;\n COMMENT_MORE: string;\n COMMENT_EDIT: string;\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: string;\n COMMENT_EDIT_COMPOSER_CANCEL: string;\n COMMENT_EDIT_COMPOSER_SAVE: string;\n COMMENT_DELETE: string;\n COMMENT_ADD_REACTION: string;\n COMMENT_REACTION_LIST: (\n list: ReactNode,\n emoji: string,\n count: number\n ) => ReactNode;\n COMMENT_REACTION_DESCRIPTION: (emoji: string, count: number) => string;\n}\n\nexport interface ComposerOverrides {\n COMPOSER_INSERT_MENTION: string;\n COMPOSER_INSERT_EMOJI: string;\n COMPOSER_PLACEHOLDER: string;\n COMPOSER_SEND: string;\n}\n\nexport interface ThreadOverrides {\n THREAD_RESOLVE: string;\n THREAD_UNRESOLVE: string;\n THREAD_NEW_INDICATOR: string;\n THREAD_NEW_INDICATOR_DESCRIPTION: string;\n THREAD_COMPOSER_PLACEHOLDER: string;\n THREAD_COMPOSER_SEND: string;\n}\n\nexport interface InboxNotificationOverrides {\n INBOX_NOTIFICATION_MORE: string;\n INBOX_NOTIFICATION_MARK_AS_READ: string;\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode | undefined,\n count: number\n ) => ReactNode;\n INBOX_NOTIFICATION_THREAD_MENTION: (\n user: ReactNode,\n room: ReactNode | undefined\n ) => ReactNode;\n}\n\nexport type Overrides = LocalizationOverrides &\n GlobalOverrides &\n ComposerOverrides &\n CommentOverrides &\n ThreadOverrides &\n InboxNotificationOverrides;\n\ntype OverridesProviderProps = PropsWithChildren<{\n overrides?: Partial<Overrides>;\n}>;\n\nexport const defaultOverrides: Overrides = {\n locale: \"en\",\n dir: \"ltr\",\n USER_SELF: \"you\",\n USER_UNKNOWN: \"Anonymous\",\n LIST_REMAINING: (count) => `${count} more`,\n LIST_REMAINING_USERS: (count) => `${count} ${pluralize(count, \"other\")}`,\n LIST_REMAINING_COMMENTS: (count) =>\n `${count} more ${pluralize(count, \"comment\")}`,\n EMOJI_PICKER_SEARCH_PLACEHOLDER: \"Search…\",\n EMOJI_PICKER_EMPTY: \"No emoji found.\",\n EMOJI_PICKER_ERROR: () =>\n \"There was an error while getting the list of emoji.\",\n COMPOSER_INSERT_MENTION: \"Mention someone\",\n COMPOSER_INSERT_EMOJI: \"Add emoji\",\n COMPOSER_PLACEHOLDER: \"Write a comment…\",\n COMPOSER_SEND: \"Send\",\n COMMENT_EDITED: \"(edited)\",\n COMMENT_DELETED: \"This comment has been deleted.\",\n COMMENT_MORE: \"More\",\n COMMENT_EDIT: \"Edit comment\",\n COMMENT_EDIT_COMPOSER_PLACEHOLDER: \"Edit comment…\",\n COMMENT_EDIT_COMPOSER_CANCEL: \"Cancel\",\n COMMENT_EDIT_COMPOSER_SAVE: \"Save\",\n COMMENT_DELETE: \"Delete comment\",\n COMMENT_ADD_REACTION: \"Add reaction\",\n COMMENT_REACTION_LIST: (list, emoji) => (\n <>\n {list} reacted with <Emoji emoji={emoji} />\n </>\n ),\n COMMENT_REACTION_DESCRIPTION: (emoji, count) =>\n `${count} ${pluralize(count, \"reaction\")}, react with ${emoji}`,\n THREAD_RESOLVE: \"Resolve thread\",\n THREAD_UNRESOLVE: \"Re-open thread\",\n THREAD_NEW_INDICATOR: \"New\",\n THREAD_NEW_INDICATOR_DESCRIPTION: \"New comments\",\n THREAD_COMPOSER_PLACEHOLDER: \"Reply to thread…\",\n THREAD_COMPOSER_SEND: \"Reply\",\n INBOX_NOTIFICATION_MORE: \"More\",\n INBOX_NOTIFICATION_MARK_AS_READ: \"Mark as read\",\n INBOX_NOTIFICATION_THREAD_COMMENTS_LIST: (\n list: ReactNode,\n room: ReactNode\n ) => (\n <>\n {list} commented\n {room ? <> in {room}</> : <> in a thread</>}\n </>\n ),\n INBOX_NOTIFICATION_THREAD_MENTION: (user: ReactNode, room: ReactNode) => (\n <>\n {user} mentioned you{room ? <> in {room}</> : null}\n </>\n ),\n};\n\nexport const OverridesContext = createContext<Overrides | undefined>(undefined);\n\nexport function useOverrides(overrides?: Partial<Overrides>): Overrides {\n const contextOverrides = useContext(OverridesContext);\n\n return useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...overrides,\n }),\n [contextOverrides, overrides]\n );\n}\n\nexport function OverridesProvider({\n children,\n overrides: providerOverrides,\n}: OverridesProviderProps) {\n const contextOverrides = useContext(OverridesContext);\n const overrides = useMemo(\n () => ({\n ...defaultOverrides,\n ...contextOverrides,\n ...providerOverrides,\n }),\n [contextOverrides, providerOverrides]\n );\n\n return (\n <OverridesContext.Provider value={overrides}>\n {children}\n </OverridesContext.Provider>\n );\n}\n"],"names":[],"mappings":";;;;;;AAqFO;AAAoC;AACjC;AACH;AACM;AACG;AACgB;AACuC;AAExB;AACZ;AACb;AAElB;AACuB;AACF;AACD;AACP;AACC;AACC;AACH;AACA;AACqB;AACL;AACF;AACZ;AACM;AAGG;AAAM;AAC7B;AAGwD;AAC1C;AACE;AACI;AACY;AACL;AACP;AACG;AACQ;AAQ/B;AAOJ;AAEa;AAEN;AACL;AAEA;AAAO;AACE;AACF;AACA;AACA;AACL;AAC4B;AAEhC;AAEO;AAA2B;AAChC;AAEF;AACE;AACA;AAAkB;AACT;AACF;AACA;AACA;AACL;AACoC;AAGtC;AACG;AAAiC;AAItC;;"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var reactSlot = require('@radix-ui/react-slot');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var mentions = require('../../slate/plugins/mentions.js');
|
|
6
|
+
var utils = require('./utils.js');
|
|
7
|
+
|
|
8
|
+
const COMMENT_MENTION_NAME = "CommentMention";
|
|
9
|
+
const COMMENT_BODY_NAME = "CommentBody";
|
|
10
|
+
const COMMENT_LINK_NAME = "CommentLink";
|
|
11
|
+
const CommentMention = React.forwardRef(
|
|
12
|
+
({ children, asChild, ...props }, forwardedRef) => {
|
|
13
|
+
const Component = asChild ? reactSlot.Slot : "span";
|
|
14
|
+
return /* @__PURE__ */ React.createElement(Component, {
|
|
15
|
+
...props,
|
|
16
|
+
ref: forwardedRef
|
|
17
|
+
}, children);
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
const CommentLink = React.forwardRef(
|
|
21
|
+
({ children, asChild, ...props }, forwardedRef) => {
|
|
22
|
+
const Component = asChild ? reactSlot.Slot : "a";
|
|
23
|
+
return /* @__PURE__ */ React.createElement(Component, {
|
|
24
|
+
target: "_blank",
|
|
25
|
+
rel: "noopener noreferrer nofollow",
|
|
26
|
+
...props,
|
|
27
|
+
ref: forwardedRef
|
|
28
|
+
}, children);
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
const defaultBodyComponents = {
|
|
32
|
+
Mention: ({ userId }) => {
|
|
33
|
+
return /* @__PURE__ */ React.createElement(CommentMention, null, mentions.MENTION_CHARACTER, userId);
|
|
34
|
+
},
|
|
35
|
+
Link: ({ href, children }) => {
|
|
36
|
+
return /* @__PURE__ */ React.createElement(CommentLink, {
|
|
37
|
+
href
|
|
38
|
+
}, children);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const CommentBody = React.forwardRef(
|
|
42
|
+
({ body, components, asChild, ...props }, forwardedRef) => {
|
|
43
|
+
const Component = asChild ? reactSlot.Slot : "div";
|
|
44
|
+
const { Mention, Link } = React.useMemo(
|
|
45
|
+
() => ({ ...defaultBodyComponents, ...components }),
|
|
46
|
+
[components]
|
|
47
|
+
);
|
|
48
|
+
if (!body || !body?.content) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return /* @__PURE__ */ React.createElement(Component, {
|
|
52
|
+
...props,
|
|
53
|
+
ref: forwardedRef
|
|
54
|
+
}, body.content.map((block, index) => {
|
|
55
|
+
switch (block.type) {
|
|
56
|
+
case "paragraph":
|
|
57
|
+
return /* @__PURE__ */ React.createElement("p", {
|
|
58
|
+
key: index
|
|
59
|
+
}, block.children.map((inline, index2) => {
|
|
60
|
+
if (utils.isCommentBodyMention(inline)) {
|
|
61
|
+
return inline.id ? /* @__PURE__ */ React.createElement(Mention, {
|
|
62
|
+
userId: inline.id,
|
|
63
|
+
key: index2
|
|
64
|
+
}) : null;
|
|
65
|
+
}
|
|
66
|
+
if (utils.isCommentBodyLink(inline)) {
|
|
67
|
+
const href = utils.toAbsoluteUrl(inline.url) ?? inline.url;
|
|
68
|
+
return /* @__PURE__ */ React.createElement(Link, {
|
|
69
|
+
href,
|
|
70
|
+
key: index2
|
|
71
|
+
}, inline.url);
|
|
72
|
+
}
|
|
73
|
+
let children = inline.text;
|
|
74
|
+
if (inline.bold) {
|
|
75
|
+
children = /* @__PURE__ */ React.createElement("strong", {
|
|
76
|
+
key: index2
|
|
77
|
+
}, children);
|
|
78
|
+
}
|
|
79
|
+
if (inline.italic) {
|
|
80
|
+
children = /* @__PURE__ */ React.createElement("em", {
|
|
81
|
+
key: index2
|
|
82
|
+
}, children);
|
|
83
|
+
}
|
|
84
|
+
if (inline.strikethrough) {
|
|
85
|
+
children = /* @__PURE__ */ React.createElement("s", {
|
|
86
|
+
key: index2
|
|
87
|
+
}, children);
|
|
88
|
+
}
|
|
89
|
+
if (inline.code) {
|
|
90
|
+
children = /* @__PURE__ */ React.createElement("code", {
|
|
91
|
+
key: index2
|
|
92
|
+
}, children);
|
|
93
|
+
}
|
|
94
|
+
return /* @__PURE__ */ React.createElement("span", {
|
|
95
|
+
key: index2
|
|
96
|
+
}, children);
|
|
97
|
+
}));
|
|
98
|
+
default:
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
if (process.env.NODE_ENV !== "production") {
|
|
105
|
+
CommentBody.displayName = COMMENT_BODY_NAME;
|
|
106
|
+
CommentMention.displayName = COMMENT_MENTION_NAME;
|
|
107
|
+
CommentLink.displayName = COMMENT_LINK_NAME;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
exports.Body = CommentBody;
|
|
111
|
+
exports.Link = CommentLink;
|
|
112
|
+
exports.Mention = CommentMention;
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/primitives/Comment/index.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport type { ReactNode } from \"react\";\nimport React, { forwardRef, useMemo } from \"react\";\n\nimport { MENTION_CHARACTER } from \"../../slate/plugins/mentions\";\nimport type {\n CommentBodyComponents,\n CommentBodyProps,\n CommentLinkProps,\n CommentMentionProps,\n} from \"./types\";\nimport {\n isCommentBodyLink,\n isCommentBodyMention,\n toAbsoluteUrl,\n} from \"./utils\";\n\nconst COMMENT_MENTION_NAME = \"CommentMention\";\nconst COMMENT_BODY_NAME = \"CommentBody\";\nconst COMMENT_LINK_NAME = \"CommentLink\";\n\n/**\n * Displays mentions within `Comment.Body`.\n *\n * @example\n * <Comment.Mention>@{userId}</Comment.Mention>\n */\nconst CommentMention = forwardRef<HTMLSpanElement, CommentMentionProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"span\";\n\n return (\n <Component {...props} ref={forwardedRef}>\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Displays links within `Comment.Body`.\n *\n * @example\n * <Comment.Link href={href}>{children}</Comment.Link>\n */\nconst CommentLink = forwardRef<HTMLAnchorElement, CommentLinkProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\nconst defaultBodyComponents: CommentBodyComponents = {\n Mention: ({ userId }) => {\n return (\n <CommentMention>\n {MENTION_CHARACTER}\n {userId}\n </CommentMention>\n );\n },\n Link: ({ href, children }) => {\n return <CommentLink href={href}>{children}</CommentLink>;\n },\n};\n\n/**\n * Displays a comment body.\n *\n * @example\n * <Comment.Body body={comment.body} />\n */\nconst CommentBody = forwardRef<HTMLDivElement, CommentBodyProps>(\n ({ body, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const { Mention, Link } = useMemo(\n () => ({ ...defaultBodyComponents, ...components }),\n [components]\n );\n\n if (!body || !body?.content) {\n return null;\n }\n\n return (\n <Component {...props} ref={forwardedRef}>\n {body.content.map((block, index) => {\n switch (block.type) {\n case \"paragraph\":\n return (\n <p key={index}>\n {block.children.map((inline, index) => {\n if (isCommentBodyMention(inline)) {\n return inline.id ? (\n <Mention userId={inline.id} key={index} />\n ) : null;\n }\n\n if (isCommentBodyLink(inline)) {\n const href = toAbsoluteUrl(inline.url) ?? inline.url;\n\n return (\n <Link href={href} key={index}>\n {inline.url}\n </Link>\n );\n }\n\n // <code><s><em><strong>text</strong></s></em></code>\n let children: ReactNode = inline.text;\n\n if (inline.bold) {\n children = <strong key={index}>{children}</strong>;\n }\n\n if (inline.italic) {\n children = <em key={index}>{children}</em>;\n }\n\n if (inline.strikethrough) {\n children = <s key={index}>{children}</s>;\n }\n\n if (inline.code) {\n children = <code key={index}>{children}</code>;\n }\n\n return <span key={index}>{children}</span>;\n })}\n </p>\n );\n default:\n return null;\n }\n })}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n CommentBody.displayName = COMMENT_BODY_NAME;\n CommentMention.displayName = COMMENT_MENTION_NAME;\n CommentLink.displayName = COMMENT_LINK_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as Comment.*\nexport { CommentBody as Body, CommentLink as Link, CommentMention as Mention };\n"],"names":["forwardRef","Slot","MENTION_CHARACTER","useMemo","index","isCommentBodyMention","isCommentBodyLink","toAbsoluteUrl"],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
2
|
+
import React__default, { forwardRef, useMemo } from 'react';
|
|
3
|
+
import { MENTION_CHARACTER } from '../../slate/plugins/mentions.mjs';
|
|
4
|
+
import { isCommentBodyMention, isCommentBodyLink, toAbsoluteUrl } from './utils.mjs';
|
|
5
|
+
|
|
6
|
+
const COMMENT_MENTION_NAME = "CommentMention";
|
|
7
|
+
const COMMENT_BODY_NAME = "CommentBody";
|
|
8
|
+
const COMMENT_LINK_NAME = "CommentLink";
|
|
9
|
+
const CommentMention = forwardRef(
|
|
10
|
+
({ children, asChild, ...props }, forwardedRef) => {
|
|
11
|
+
const Component = asChild ? Slot : "span";
|
|
12
|
+
return /* @__PURE__ */ React__default.createElement(Component, {
|
|
13
|
+
...props,
|
|
14
|
+
ref: forwardedRef
|
|
15
|
+
}, children);
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
const CommentLink = forwardRef(
|
|
19
|
+
({ children, asChild, ...props }, forwardedRef) => {
|
|
20
|
+
const Component = asChild ? Slot : "a";
|
|
21
|
+
return /* @__PURE__ */ React__default.createElement(Component, {
|
|
22
|
+
target: "_blank",
|
|
23
|
+
rel: "noopener noreferrer nofollow",
|
|
24
|
+
...props,
|
|
25
|
+
ref: forwardedRef
|
|
26
|
+
}, children);
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
const defaultBodyComponents = {
|
|
30
|
+
Mention: ({ userId }) => {
|
|
31
|
+
return /* @__PURE__ */ React__default.createElement(CommentMention, null, MENTION_CHARACTER, userId);
|
|
32
|
+
},
|
|
33
|
+
Link: ({ href, children }) => {
|
|
34
|
+
return /* @__PURE__ */ React__default.createElement(CommentLink, {
|
|
35
|
+
href
|
|
36
|
+
}, children);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const CommentBody = forwardRef(
|
|
40
|
+
({ body, components, asChild, ...props }, forwardedRef) => {
|
|
41
|
+
const Component = asChild ? Slot : "div";
|
|
42
|
+
const { Mention, Link } = useMemo(
|
|
43
|
+
() => ({ ...defaultBodyComponents, ...components }),
|
|
44
|
+
[components]
|
|
45
|
+
);
|
|
46
|
+
if (!body || !body?.content) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return /* @__PURE__ */ React__default.createElement(Component, {
|
|
50
|
+
...props,
|
|
51
|
+
ref: forwardedRef
|
|
52
|
+
}, body.content.map((block, index) => {
|
|
53
|
+
switch (block.type) {
|
|
54
|
+
case "paragraph":
|
|
55
|
+
return /* @__PURE__ */ React__default.createElement("p", {
|
|
56
|
+
key: index
|
|
57
|
+
}, block.children.map((inline, index2) => {
|
|
58
|
+
if (isCommentBodyMention(inline)) {
|
|
59
|
+
return inline.id ? /* @__PURE__ */ React__default.createElement(Mention, {
|
|
60
|
+
userId: inline.id,
|
|
61
|
+
key: index2
|
|
62
|
+
}) : null;
|
|
63
|
+
}
|
|
64
|
+
if (isCommentBodyLink(inline)) {
|
|
65
|
+
const href = toAbsoluteUrl(inline.url) ?? inline.url;
|
|
66
|
+
return /* @__PURE__ */ React__default.createElement(Link, {
|
|
67
|
+
href,
|
|
68
|
+
key: index2
|
|
69
|
+
}, inline.url);
|
|
70
|
+
}
|
|
71
|
+
let children = inline.text;
|
|
72
|
+
if (inline.bold) {
|
|
73
|
+
children = /* @__PURE__ */ React__default.createElement("strong", {
|
|
74
|
+
key: index2
|
|
75
|
+
}, children);
|
|
76
|
+
}
|
|
77
|
+
if (inline.italic) {
|
|
78
|
+
children = /* @__PURE__ */ React__default.createElement("em", {
|
|
79
|
+
key: index2
|
|
80
|
+
}, children);
|
|
81
|
+
}
|
|
82
|
+
if (inline.strikethrough) {
|
|
83
|
+
children = /* @__PURE__ */ React__default.createElement("s", {
|
|
84
|
+
key: index2
|
|
85
|
+
}, children);
|
|
86
|
+
}
|
|
87
|
+
if (inline.code) {
|
|
88
|
+
children = /* @__PURE__ */ React__default.createElement("code", {
|
|
89
|
+
key: index2
|
|
90
|
+
}, children);
|
|
91
|
+
}
|
|
92
|
+
return /* @__PURE__ */ React__default.createElement("span", {
|
|
93
|
+
key: index2
|
|
94
|
+
}, children);
|
|
95
|
+
}));
|
|
96
|
+
default:
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
if (process.env.NODE_ENV !== "production") {
|
|
103
|
+
CommentBody.displayName = COMMENT_BODY_NAME;
|
|
104
|
+
CommentMention.displayName = COMMENT_MENTION_NAME;
|
|
105
|
+
CommentLink.displayName = COMMENT_LINK_NAME;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export { CommentBody as Body, CommentLink as Link, CommentMention as Mention };
|
|
109
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/primitives/Comment/index.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport type { ReactNode } from \"react\";\nimport React, { forwardRef, useMemo } from \"react\";\n\nimport { MENTION_CHARACTER } from \"../../slate/plugins/mentions\";\nimport type {\n CommentBodyComponents,\n CommentBodyProps,\n CommentLinkProps,\n CommentMentionProps,\n} from \"./types\";\nimport {\n isCommentBodyLink,\n isCommentBodyMention,\n toAbsoluteUrl,\n} from \"./utils\";\n\nconst COMMENT_MENTION_NAME = \"CommentMention\";\nconst COMMENT_BODY_NAME = \"CommentBody\";\nconst COMMENT_LINK_NAME = \"CommentLink\";\n\n/**\n * Displays mentions within `Comment.Body`.\n *\n * @example\n * <Comment.Mention>@{userId}</Comment.Mention>\n */\nconst CommentMention = forwardRef<HTMLSpanElement, CommentMentionProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"span\";\n\n return (\n <Component {...props} ref={forwardedRef}>\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Displays links within `Comment.Body`.\n *\n * @example\n * <Comment.Link href={href}>{children}</Comment.Link>\n */\nconst CommentLink = forwardRef<HTMLAnchorElement, CommentLinkProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\nconst defaultBodyComponents: CommentBodyComponents = {\n Mention: ({ userId }) => {\n return (\n <CommentMention>\n {MENTION_CHARACTER}\n {userId}\n </CommentMention>\n );\n },\n Link: ({ href, children }) => {\n return <CommentLink href={href}>{children}</CommentLink>;\n },\n};\n\n/**\n * Displays a comment body.\n *\n * @example\n * <Comment.Body body={comment.body} />\n */\nconst CommentBody = forwardRef<HTMLDivElement, CommentBodyProps>(\n ({ body, components, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"div\";\n const { Mention, Link } = useMemo(\n () => ({ ...defaultBodyComponents, ...components }),\n [components]\n );\n\n if (!body || !body?.content) {\n return null;\n }\n\n return (\n <Component {...props} ref={forwardedRef}>\n {body.content.map((block, index) => {\n switch (block.type) {\n case \"paragraph\":\n return (\n <p key={index}>\n {block.children.map((inline, index) => {\n if (isCommentBodyMention(inline)) {\n return inline.id ? (\n <Mention userId={inline.id} key={index} />\n ) : null;\n }\n\n if (isCommentBodyLink(inline)) {\n const href = toAbsoluteUrl(inline.url) ?? inline.url;\n\n return (\n <Link href={href} key={index}>\n {inline.url}\n </Link>\n );\n }\n\n // <code><s><em><strong>text</strong></s></em></code>\n let children: ReactNode = inline.text;\n\n if (inline.bold) {\n children = <strong key={index}>{children}</strong>;\n }\n\n if (inline.italic) {\n children = <em key={index}>{children}</em>;\n }\n\n if (inline.strikethrough) {\n children = <s key={index}>{children}</s>;\n }\n\n if (inline.code) {\n children = <code key={index}>{children}</code>;\n }\n\n return <span key={index}>{children}</span>;\n })}\n </p>\n );\n default:\n return null;\n }\n })}\n </Component>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n CommentBody.displayName = COMMENT_BODY_NAME;\n CommentMention.displayName = COMMENT_MENTION_NAME;\n CommentLink.displayName = COMMENT_LINK_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as Comment.*\nexport { CommentBody as Body, CommentLink as Link, CommentMention as Mention };\n"],"names":["React","index"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function isCommentBodyText(element) {
|
|
4
|
+
return "text" in element && typeof element.text === "string";
|
|
5
|
+
}
|
|
6
|
+
function isCommentBodyMention(element) {
|
|
7
|
+
return "type" in element && element.type === "mention";
|
|
8
|
+
}
|
|
9
|
+
function isCommentBodyLink(element) {
|
|
10
|
+
return "type" in element && element.type === "link";
|
|
11
|
+
}
|
|
12
|
+
function toAbsoluteUrl(url) {
|
|
13
|
+
if (url.startsWith("http://") || url.startsWith("https://")) {
|
|
14
|
+
return url;
|
|
15
|
+
} else if (url.startsWith("www.")) {
|
|
16
|
+
return "https://" + url;
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.isCommentBodyLink = isCommentBodyLink;
|
|
22
|
+
exports.isCommentBodyMention = isCommentBodyMention;
|
|
23
|
+
exports.isCommentBodyText = isCommentBodyText;
|
|
24
|
+
exports.toAbsoluteUrl = toAbsoluteUrl;
|
|
25
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/primitives/Comment/utils.ts"],"sourcesContent":["import type {\n CommentBodyElement,\n CommentBodyLink,\n CommentBodyMention,\n CommentBodyText,\n} from \"@liveblocks/core\";\n\nexport function isCommentBodyText(\n element: CommentBodyElement\n): element is CommentBodyText {\n return \"text\" in element && typeof element.text === \"string\";\n}\n\nexport function isCommentBodyMention(\n element: CommentBodyElement\n): element is CommentBodyMention {\n return \"type\" in element && element.type === \"mention\";\n}\n\nexport function isCommentBodyLink(\n element: CommentBodyElement\n): element is CommentBodyLink {\n return \"type\" in element && element.type === \"link\";\n}\n\n/**\n * Helper function to convert a URL (relative or absolute) to an absolute URL.\n *\n * @param url The URL to convert to an absolute URL (relative or absolute).\n * @returns The absolute URL or undefined if the URL is invalid.\n */\nexport function toAbsoluteUrl(url: string): string | undefined {\n // Check if the URL already contains a scheme\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n return url;\n } else if (url.startsWith(\"www.\")) {\n // If the URL starts with \"www.\", prepend \"https://\"\n return \"https://\" + url;\n }\n\n return;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAA,OAAO,MAAU,IAAA,OAAA,IAAW,OAAO,OAAA,CAAQ,IAAS,KAAA,QAAA,CAAA;AACtD,CAAA;AAEO,SAAS,qBACd,OAC+B,EAAA;AAC/B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,SAAA,CAAA;AAC/C,CAAA;AAEO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,MAAA,CAAA;AAC/C,CAAA;AAQO,SAAS,cAAc,GAAiC,EAAA;AAE7D,EAAA,IAAI,IAAI,UAAW,CAAA,SAAS,KAAK,GAAI,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC3D,IAAO,OAAA,GAAA,CAAA;AAAA,GACE,MAAA,IAAA,GAAA,CAAI,UAAW,CAAA,MAAM,CAAG,EAAA;AAEjC,IAAA,OAAO,UAAa,GAAA,GAAA,CAAA;AAAA,GACtB;AAEA,EAAA,OAAA;AACF;;;;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
function isCommentBodyText(element) {
|
|
2
|
+
return "text" in element && typeof element.text === "string";
|
|
3
|
+
}
|
|
4
|
+
function isCommentBodyMention(element) {
|
|
5
|
+
return "type" in element && element.type === "mention";
|
|
6
|
+
}
|
|
7
|
+
function isCommentBodyLink(element) {
|
|
8
|
+
return "type" in element && element.type === "link";
|
|
9
|
+
}
|
|
10
|
+
function toAbsoluteUrl(url) {
|
|
11
|
+
if (url.startsWith("http://") || url.startsWith("https://")) {
|
|
12
|
+
return url;
|
|
13
|
+
} else if (url.startsWith("www.")) {
|
|
14
|
+
return "https://" + url;
|
|
15
|
+
}
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { isCommentBodyLink, isCommentBodyMention, isCommentBodyText, toAbsoluteUrl };
|
|
20
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../../src/primitives/Comment/utils.ts"],"sourcesContent":["import type {\n CommentBodyElement,\n CommentBodyLink,\n CommentBodyMention,\n CommentBodyText,\n} from \"@liveblocks/core\";\n\nexport function isCommentBodyText(\n element: CommentBodyElement\n): element is CommentBodyText {\n return \"text\" in element && typeof element.text === \"string\";\n}\n\nexport function isCommentBodyMention(\n element: CommentBodyElement\n): element is CommentBodyMention {\n return \"type\" in element && element.type === \"mention\";\n}\n\nexport function isCommentBodyLink(\n element: CommentBodyElement\n): element is CommentBodyLink {\n return \"type\" in element && element.type === \"link\";\n}\n\n/**\n * Helper function to convert a URL (relative or absolute) to an absolute URL.\n *\n * @param url The URL to convert to an absolute URL (relative or absolute).\n * @returns The absolute URL or undefined if the URL is invalid.\n */\nexport function toAbsoluteUrl(url: string): string | undefined {\n // Check if the URL already contains a scheme\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n return url;\n } else if (url.startsWith(\"www.\")) {\n // If the URL starts with \"www.\", prepend \"https://\"\n return \"https://\" + url;\n }\n\n return;\n}\n"],"names":[],"mappings":"AAOO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAA,OAAO,MAAU,IAAA,OAAA,IAAW,OAAO,OAAA,CAAQ,IAAS,KAAA,QAAA,CAAA;AACtD,CAAA;AAEO,SAAS,qBACd,OAC+B,EAAA;AAC/B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,SAAA,CAAA;AAC/C,CAAA;AAEO,SAAS,kBACd,OAC4B,EAAA;AAC5B,EAAO,OAAA,MAAA,IAAU,OAAW,IAAA,OAAA,CAAQ,IAAS,KAAA,MAAA,CAAA;AAC/C,CAAA;AAQO,SAAS,cAAc,GAAiC,EAAA;AAE7D,EAAA,IAAI,IAAI,UAAW,CAAA,SAAS,KAAK,GAAI,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC3D,IAAO,OAAA,GAAA,CAAA;AAAA,GACE,MAAA,IAAA,GAAA,CAAI,UAAW,CAAA,MAAM,CAAG,EAAA;AAEjC,IAAA,OAAO,UAAa,GAAA,GAAA,CAAA;AAAA,GACtB;AAEA,EAAA,OAAA;AACF;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@liveblocks/core');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
|
|
6
|
+
const ComposerContext = React.createContext(null);
|
|
7
|
+
const ComposerEditorContext = React.createContext(null);
|
|
8
|
+
const ComposerSuggestionsContext = React.createContext(null);
|
|
9
|
+
function useComposerEditorContext() {
|
|
10
|
+
const composerEditorContext = React.useContext(ComposerEditorContext);
|
|
11
|
+
return core.nn(
|
|
12
|
+
composerEditorContext,
|
|
13
|
+
"Composer.Form is missing from the React tree."
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
function useComposer() {
|
|
17
|
+
const composerContext = React.useContext(ComposerContext);
|
|
18
|
+
return core.nn(composerContext, "Composer.Form is missing from the React tree.");
|
|
19
|
+
}
|
|
20
|
+
function useComposerSuggestionsContext(source = "useComposerSuggestionsContext") {
|
|
21
|
+
const composerSuggestionsContext = React.useContext(ComposerSuggestionsContext);
|
|
22
|
+
return core.nn(
|
|
23
|
+
composerSuggestionsContext,
|
|
24
|
+
`${source} can\u2019t be used outside of Composer.Editor.`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
exports.ComposerContext = ComposerContext;
|
|
29
|
+
exports.ComposerEditorContext = ComposerEditorContext;
|
|
30
|
+
exports.ComposerSuggestionsContext = ComposerSuggestionsContext;
|
|
31
|
+
exports.useComposer = useComposer;
|
|
32
|
+
exports.useComposerEditorContext = useComposerEditorContext;
|
|
33
|
+
exports.useComposerSuggestionsContext = useComposerSuggestionsContext;
|
|
34
|
+
//# sourceMappingURL=contexts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contexts.js","sources":["../../../src/primitives/Composer/contexts.ts"],"sourcesContent":["import type { Placement } from \"@floating-ui/react-dom\";\nimport { nn } from \"@liveblocks/core\";\nimport type { Direction } from \"@radix-ui/react-dropdown-menu\";\nimport type { Dispatch, Ref, SetStateAction } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport type { Editor as SlateEditor, Element as SlateElement } from \"slate\";\n\nexport type ComposerContext = {\n /**\n * Whether the editor is currently focused.\n */\n isFocused: boolean;\n\n /**\n * Whether the editor is currently empty.\n */\n isEmpty: boolean;\n\n /**\n * Submit the composer programmatically.\n */\n submit: () => void;\n\n /**\n * Clear the editor programmatically.\n */\n clear: () => void;\n\n /**\n * Select the editor programmatically.\n */\n select: () => void;\n\n /**\n * Focus the editor programmatically.\n */\n focus: () => void;\n\n /**\n * Blur the editor programmatically.\n */\n blur: () => void;\n\n /**\n * Start creating a mention at the current selection.\n */\n createMention: () => void;\n\n /**\n * Insert text at the current selection.\n */\n insertText: (text: string) => void;\n};\n\nexport type ComposerEditorContext = {\n validate: (value: SlateElement[]) => void;\n editor: SlateEditor;\n setFocused: Dispatch<SetStateAction<boolean>>;\n};\n\nexport type ComposerSuggestionsContext = {\n dir?: Direction;\n id: string;\n itemId: (value?: string) => string | undefined;\n placement: Placement;\n selectedValue?: string;\n setSelectedValue: (value: string) => void;\n onItemSelect: (value: string) => void;\n ref: Ref<HTMLDivElement>;\n};\n\nexport const ComposerContext = createContext<ComposerContext | null>(null);\nexport const ComposerEditorContext =\n createContext<ComposerEditorContext | null>(null);\nexport const ComposerSuggestionsContext =\n createContext<ComposerSuggestionsContext | null>(null);\n\nexport function useComposerEditorContext() {\n const composerEditorContext = useContext(ComposerEditorContext);\n\n return nn(\n composerEditorContext,\n \"Composer.Form is missing from the React tree.\"\n );\n}\n\nexport function useComposer(): ComposerContext {\n const composerContext = useContext(ComposerContext);\n\n return nn(composerContext, \"Composer.Form is missing from the React tree.\");\n}\n\nexport function useComposerSuggestionsContext(\n source = \"useComposerSuggestionsContext\"\n) {\n const composerSuggestionsContext = useContext(ComposerSuggestionsContext);\n\n return nn(\n composerSuggestionsContext,\n `${source} can’t be used outside of Composer.Editor.`\n );\n}\n"],"names":["createContext","useContext","nn"],"mappings":";;;;;AAuEa,MAAA,eAAA,GAAkBA,oBAAsC,IAAI,EAAA;AAC5D,MAAA,qBAAA,GACXA,oBAA4C,IAAI,EAAA;AACrC,MAAA,0BAAA,GACXA,oBAAiD,IAAI,EAAA;AAEhD,SAAS,wBAA2B,GAAA;AACzC,EAAM,MAAA,qBAAA,GAAwBC,iBAAW,qBAAqB,CAAA,CAAA;AAE9D,EAAO,OAAAC,OAAA;AAAA,IACL,qBAAA;AAAA,IACA,+CAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEO,SAAS,WAA+B,GAAA;AAC7C,EAAM,MAAA,eAAA,GAAkBD,iBAAW,eAAe,CAAA,CAAA;AAElD,EAAO,OAAAC,OAAA,CAAG,iBAAiB,+CAA+C,CAAA,CAAA;AAC5E,CAAA;AAEgB,SAAA,6BAAA,CACd,SAAS,+BACT,EAAA;AACA,EAAM,MAAA,0BAAA,GAA6BD,iBAAW,0BAA0B,CAAA,CAAA;AAExE,EAAO,OAAAC,OAAA;AAAA,IACL,0BAAA;AAAA,IACA,CAAG,EAAA,MAAA,CAAA,+CAAA,CAAA;AAAA,GACL,CAAA;AACF;;;;;;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { nn } from '@liveblocks/core';
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
|
|
4
|
+
const ComposerContext = createContext(null);
|
|
5
|
+
const ComposerEditorContext = createContext(null);
|
|
6
|
+
const ComposerSuggestionsContext = createContext(null);
|
|
7
|
+
function useComposerEditorContext() {
|
|
8
|
+
const composerEditorContext = useContext(ComposerEditorContext);
|
|
9
|
+
return nn(
|
|
10
|
+
composerEditorContext,
|
|
11
|
+
"Composer.Form is missing from the React tree."
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
function useComposer() {
|
|
15
|
+
const composerContext = useContext(ComposerContext);
|
|
16
|
+
return nn(composerContext, "Composer.Form is missing from the React tree.");
|
|
17
|
+
}
|
|
18
|
+
function useComposerSuggestionsContext(source = "useComposerSuggestionsContext") {
|
|
19
|
+
const composerSuggestionsContext = useContext(ComposerSuggestionsContext);
|
|
20
|
+
return nn(
|
|
21
|
+
composerSuggestionsContext,
|
|
22
|
+
`${source} can\u2019t be used outside of Composer.Editor.`
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { ComposerContext, ComposerEditorContext, ComposerSuggestionsContext, useComposer, useComposerEditorContext, useComposerSuggestionsContext };
|
|
27
|
+
//# sourceMappingURL=contexts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contexts.mjs","sources":["../../../src/primitives/Composer/contexts.ts"],"sourcesContent":["import type { Placement } from \"@floating-ui/react-dom\";\nimport { nn } from \"@liveblocks/core\";\nimport type { Direction } from \"@radix-ui/react-dropdown-menu\";\nimport type { Dispatch, Ref, SetStateAction } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport type { Editor as SlateEditor, Element as SlateElement } from \"slate\";\n\nexport type ComposerContext = {\n /**\n * Whether the editor is currently focused.\n */\n isFocused: boolean;\n\n /**\n * Whether the editor is currently empty.\n */\n isEmpty: boolean;\n\n /**\n * Submit the composer programmatically.\n */\n submit: () => void;\n\n /**\n * Clear the editor programmatically.\n */\n clear: () => void;\n\n /**\n * Select the editor programmatically.\n */\n select: () => void;\n\n /**\n * Focus the editor programmatically.\n */\n focus: () => void;\n\n /**\n * Blur the editor programmatically.\n */\n blur: () => void;\n\n /**\n * Start creating a mention at the current selection.\n */\n createMention: () => void;\n\n /**\n * Insert text at the current selection.\n */\n insertText: (text: string) => void;\n};\n\nexport type ComposerEditorContext = {\n validate: (value: SlateElement[]) => void;\n editor: SlateEditor;\n setFocused: Dispatch<SetStateAction<boolean>>;\n};\n\nexport type ComposerSuggestionsContext = {\n dir?: Direction;\n id: string;\n itemId: (value?: string) => string | undefined;\n placement: Placement;\n selectedValue?: string;\n setSelectedValue: (value: string) => void;\n onItemSelect: (value: string) => void;\n ref: Ref<HTMLDivElement>;\n};\n\nexport const ComposerContext = createContext<ComposerContext | null>(null);\nexport const ComposerEditorContext =\n createContext<ComposerEditorContext | null>(null);\nexport const ComposerSuggestionsContext =\n createContext<ComposerSuggestionsContext | null>(null);\n\nexport function useComposerEditorContext() {\n const composerEditorContext = useContext(ComposerEditorContext);\n\n return nn(\n composerEditorContext,\n \"Composer.Form is missing from the React tree.\"\n );\n}\n\nexport function useComposer(): ComposerContext {\n const composerContext = useContext(ComposerContext);\n\n return nn(composerContext, \"Composer.Form is missing from the React tree.\");\n}\n\nexport function useComposerSuggestionsContext(\n source = \"useComposerSuggestionsContext\"\n) {\n const composerSuggestionsContext = useContext(ComposerSuggestionsContext);\n\n return nn(\n composerSuggestionsContext,\n `${source} can’t be used outside of Composer.Editor.`\n );\n}\n"],"names":[],"mappings":";;;AAuEa,MAAA,eAAA,GAAkB,cAAsC,IAAI,EAAA;AAC5D,MAAA,qBAAA,GACX,cAA4C,IAAI,EAAA;AACrC,MAAA,0BAAA,GACX,cAAiD,IAAI,EAAA;AAEhD,SAAS,wBAA2B,GAAA;AACzC,EAAM,MAAA,qBAAA,GAAwB,WAAW,qBAAqB,CAAA,CAAA;AAE9D,EAAO,OAAA,EAAA;AAAA,IACL,qBAAA;AAAA,IACA,+CAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEO,SAAS,WAA+B,GAAA;AAC7C,EAAM,MAAA,eAAA,GAAkB,WAAW,eAAe,CAAA,CAAA;AAElD,EAAO,OAAA,EAAA,CAAG,iBAAiB,+CAA+C,CAAA,CAAA;AAC5E,CAAA;AAEgB,SAAA,6BAAA,CACd,SAAS,+BACT,EAAA;AACA,EAAM,MAAA,0BAAA,GAA6B,WAAW,0BAA0B,CAAA,CAAA;AAExE,EAAO,OAAA,EAAA;AAAA,IACL,0BAAA;AAAA,IACA,CAAG,EAAA,MAAA,CAAA,+CAAA,CAAA;AAAA,GACL,CAAA;AACF;;;;"}
|