@hiver/connector-agent 4.16.1 → 4.18.0-slackm2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/app/hig-slack/HigSlackConnectModalIsland.d.ts +19 -0
- package/app/hig-slack/HigSlackConnectModalIsland.d.ts.map +1 -0
- package/app/hig-slack/HigSlackSection.d.ts +15 -0
- package/app/hig-slack/HigSlackSection.d.ts.map +1 -0
- package/app/hig-slack/index.d.ts +15 -0
- package/app/hig-slack/index.d.ts.map +1 -0
- package/app/hig-slack/provider.d.ts +21 -0
- package/app/hig-slack/provider.d.ts.map +1 -0
- package/app/hig-slack/style.d.ts +38 -0
- package/app/hig-slack/style.d.ts.map +1 -0
- package/app/omni-slack/SlackConnectModalIsland.d.ts +26 -0
- package/app/omni-slack/SlackConnectModalIsland.d.ts.map +1 -0
- package/app/omni-slack/index.d.ts +14 -0
- package/app/omni-slack/index.d.ts.map +1 -0
- package/app/omni-slack/provider.d.ts +15 -0
- package/app/omni-slack/provider.d.ts.map +1 -0
- package/constants/tracking-events.d.ts +8 -0
- package/constants/tracking-events.d.ts.map +1 -1
- package/features/email-logger/omni/components/LogEmailPill.d.ts.map +1 -1
- package/features/email-logger/omni/components/LogEmailPill.test.d.ts +2 -0
- package/features/email-logger/omni/components/LogEmailPill.test.d.ts.map +1 -0
- package/features/slack/api/channels.d.ts +11 -0
- package/features/slack/api/channels.d.ts.map +1 -0
- package/features/slack/api/conversations.d.ts +41 -0
- package/features/slack/api/conversations.d.ts.map +1 -0
- package/features/slack/api/effective-config.d.ts +21 -0
- package/features/slack/api/effective-config.d.ts.map +1 -0
- package/features/slack/api/index.d.ts +4 -0
- package/features/slack/api/index.d.ts.map +1 -0
- package/features/slack/api/linked-conv.d.ts +33 -0
- package/features/slack/api/linked-conv.d.ts.map +1 -0
- package/features/slack/api/members.d.ts +10 -0
- package/features/slack/api/members.d.ts.map +1 -0
- package/features/slack/api/messages.d.ts +10 -0
- package/features/slack/api/messages.d.ts.map +1 -0
- package/features/slack/api/normalise.d.ts +3 -0
- package/features/slack/api/normalise.d.ts.map +1 -0
- package/features/slack/api/users.d.ts +11 -0
- package/features/slack/api/users.d.ts.map +1 -0
- package/features/slack/avatar/SlackAvatar.d.ts +20 -0
- package/features/slack/avatar/SlackAvatar.d.ts.map +1 -0
- package/features/slack/avatar/cache.d.ts +10 -0
- package/features/slack/avatar/cache.d.ts.map +1 -0
- package/features/slack/avatar/index.d.ts +2 -0
- package/features/slack/avatar/index.d.ts.map +1 -0
- package/features/slack/components/AnimatedDots.d.ts +2 -0
- package/features/slack/components/AnimatedDots.d.ts.map +1 -0
- package/features/slack/components/HeroIllustration.d.ts +14 -0
- package/features/slack/components/HeroIllustration.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts +21 -0
- package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts +28 -0
- package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/Composer.d.ts +50 -0
- package/features/slack/components/LinkedConversationPanel/Composer.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts +24 -0
- package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts +16 -0
- package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/LinkedChannelHeader.d.ts +21 -0
- package/features/slack/components/LinkedConversationPanel/LinkedChannelHeader.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts +16 -0
- package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts +27 -0
- package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts +31 -0
- package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts +5 -0
- package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts +15 -0
- package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts +22 -0
- package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts +3 -0
- package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts +2 -0
- package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/index.d.ts +27 -0
- package/features/slack/components/LinkedConversationPanel/index.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/style.d.ts +147 -0
- package/features/slack/components/LinkedConversationPanel/style.d.ts.map +1 -0
- package/features/slack/components/SlackConnectModal.d.ts +29 -0
- package/features/slack/components/SlackConnectModal.d.ts.map +1 -0
- package/features/slack/components/SlackConversationTab.d.ts +10 -0
- package/features/slack/components/SlackConversationTab.d.ts.map +1 -0
- package/features/slack/components/SlackLogo.d.ts +11 -0
- package/features/slack/components/SlackLogo.d.ts.map +1 -0
- package/features/slack/components/StartModal/MemberSelect.d.ts +9 -0
- package/features/slack/components/StartModal/MemberSelect.d.ts.map +1 -0
- package/features/slack/components/StartModal/MentionTextarea.d.ts +28 -0
- package/features/slack/components/StartModal/MentionTextarea.d.ts.map +1 -0
- package/features/slack/components/StartModal/SelectField.d.ts +19 -0
- package/features/slack/components/StartModal/SelectField.d.ts.map +1 -0
- package/features/slack/components/StartModal/SlackChannelTab.d.ts +23 -0
- package/features/slack/components/StartModal/SlackChannelTab.d.ts.map +1 -0
- package/features/slack/components/StartModal/SlackThreadTab.d.ts +26 -0
- package/features/slack/components/StartModal/SlackThreadTab.d.ts.map +1 -0
- package/features/slack/components/StartModal/TabIcon.d.ts +16 -0
- package/features/slack/components/StartModal/TabIcon.d.ts.map +1 -0
- package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts +2 -0
- package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts.map +1 -0
- package/features/slack/components/StartModal/dropdownOmni.d.ts +121 -0
- package/features/slack/components/StartModal/dropdownOmni.d.ts.map +1 -0
- package/features/slack/components/StartModal/index.d.ts +27 -0
- package/features/slack/components/StartModal/index.d.ts.map +1 -0
- package/features/slack/components/StartModal/style.d.ts +39 -0
- package/features/slack/components/StartModal/style.d.ts.map +1 -0
- package/features/slack/components/figma-tokens.d.ts +94 -0
- package/features/slack/components/figma-tokens.d.ts.map +1 -0
- package/features/slack/components/style.d.ts +54 -0
- package/features/slack/components/style.d.ts.map +1 -0
- package/features/slack/constants/api.d.ts +13 -0
- package/features/slack/constants/api.d.ts.map +1 -0
- package/features/slack/context.d.ts +99 -0
- package/features/slack/context.d.ts.map +1 -0
- package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts +2 -0
- package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts.map +1 -0
- package/features/slack/hooks/useLeftChannelGuard.d.ts +5 -0
- package/features/slack/hooks/useLeftChannelGuard.d.ts.map +1 -0
- package/features/slack/hooks/useOlderMessages.d.ts +51 -0
- package/features/slack/hooks/useOlderMessages.d.ts.map +1 -0
- package/features/slack/hooks/useSlackTabLabel.d.ts +23 -0
- package/features/slack/hooks/useSlackTabLabel.d.ts.map +1 -0
- package/features/slack/messageType.d.ts +16 -0
- package/features/slack/messageType.d.ts.map +1 -0
- package/features/slack/types/wire.d.ts +205 -0
- package/features/slack/types/wire.d.ts.map +1 -0
- package/features/slack/utils/emoji.d.ts +7 -0
- package/features/slack/utils/emoji.d.ts.map +1 -0
- package/features/slack/utils/format-timestamp.d.ts +3 -0
- package/features/slack/utils/format-timestamp.d.ts.map +1 -0
- package/features/slack/utils/mentions.d.ts +18 -0
- package/features/slack/utils/mentions.d.ts.map +1 -0
- package/features/slack/utils/render-mentions.d.ts +15 -0
- package/features/slack/utils/render-mentions.d.ts.map +1 -0
- package/features/slack/utils/slack-links.d.ts +23 -0
- package/features/slack/utils/slack-links.d.ts.map +1 -0
- package/features/slack/utils/text.d.ts +7 -0
- package/features/slack/utils/text.d.ts.map +1 -0
- package/features/toast-message/ToastRoot.d.ts.map +1 -1
- package/index.d.ts +11 -0
- package/index.d.ts.map +1 -1
- package/index.es.js +20208 -13642
- package/index.umd.js +1226 -427
- package/main-dev.d.ts.map +1 -1
- package/package.json +1 -1
- package/testing/mocks/handlers/fetch-cards.d.ts +2 -2
- package/testing/mocks/handlers/slack.d.ts +36 -0
- package/testing/mocks/handlers/slack.d.ts.map +1 -0
- package/testing/mocks/handlers.d.ts.map +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { SlackThreadGroup } from '../../types/wire';
|
|
3
|
+
interface ChannelThreadGroupProps {
|
|
4
|
+
thread: SlackThreadGroup;
|
|
5
|
+
/** externalUserId → display name, shared with the composer's picker
|
|
6
|
+
* so `<@U…>` tokens render as `@DisplayName`. */
|
|
7
|
+
memberNames?: Map<string, string>;
|
|
8
|
+
/** Drill into this thread's detail view (root + lazily-loaded
|
|
9
|
+
* replies). Fired by both the hover "Reply" action and the
|
|
10
|
+
* "Replies (n)" link. */
|
|
11
|
+
onOpenThread: (rootTs: string) => void;
|
|
12
|
+
/** Whether the viewer may post in this channel. When false, the
|
|
13
|
+
* hover "Reply" toolbar is suppressed (the "Replies (n)" read link
|
|
14
|
+
* stays — reading is always allowed). Defaults to true. */
|
|
15
|
+
canReply?: boolean;
|
|
16
|
+
/** Paint the root row with the Slack-notification highlight wash (the
|
|
17
|
+
* channel list only shows roots, so a deep-link highlight lands here). */
|
|
18
|
+
isHighlighted?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* B4 channel LIST item — a single top-level message (thread root).
|
|
22
|
+
* Replies are NOT rendered here (lazy); instead, a "Replies (n)" link
|
|
23
|
+
* drills into the thread detail view, as does the hover "Reply" action.
|
|
24
|
+
* Per Figma 683:661492.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ChannelThreadGroup: FC<ChannelThreadGroupProps>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=ChannelThreadGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelThreadGroup.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAKpE,UAAU,uBAAuB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB;sDACkD;IAClD,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;8BAE0B;IAC1B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;gEAE4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;+EAC2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CA6C1D,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface ComposerProps {
|
|
3
|
+
/** Wraps every agent API call so the parent's left-channel
|
|
4
|
+
* guard hook can flip into the not_in_channel state on 502. */
|
|
5
|
+
guard?: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
6
|
+
/** Channel mode (B4): when set, the composer replies INTO this thread
|
|
7
|
+
* (root ts) instead of posting a new top-level channel message. */
|
|
8
|
+
threadTs?: string;
|
|
9
|
+
/** Fired after a successful send — lets an inline reply composer
|
|
10
|
+
* collapse itself once the message is away. */
|
|
11
|
+
onSent?: () => void;
|
|
12
|
+
/** Smaller, single-row presentation for the inline reply box. */
|
|
13
|
+
compact?: boolean;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
autoFocus?: boolean;
|
|
16
|
+
/** Linked-conversation kind, for the `slack_reply_sent` Gainsight
|
|
17
|
+
* event's `link_type` metadata. Derived from the conversation's
|
|
18
|
+
* `targetKind` by the parent panel. */
|
|
19
|
+
linkType?: 'thread' | 'channel';
|
|
20
|
+
/** Read-only/blocked presentation: textarea + emoji + Send are inert.
|
|
21
|
+
* Used by the panel when the viewer can't post (public-left, no-access,
|
|
22
|
+
* archived) — the composer stays visible but does nothing. The "why" is
|
|
23
|
+
* surfaced by the parent (NotMemberTooltip / ChannelStateView). */
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Composer per Figma 683:667012. Plain textarea + emoji /
|
|
28
|
+
* attachment slots (UI-7 + UI-8 stubs) + Send button.
|
|
29
|
+
*
|
|
30
|
+
* UI-10 layered on top:
|
|
31
|
+
* - Typing `@` opens the MentionPicker, anchored to a hidden
|
|
32
|
+
* div positioned at the cursor's location (approximate — we
|
|
33
|
+
* anchor to the textarea itself for M1; revisit if PD wants
|
|
34
|
+
* cursor-precise positioning).
|
|
35
|
+
* - As the user keeps typing, the substring between the `@` and
|
|
36
|
+
* the cursor filters the picker.
|
|
37
|
+
* - Picking a member replaces the in-flight `@xxx` with
|
|
38
|
+
* `@DisplayName ` in the textarea and remembers the
|
|
39
|
+
* externalUserId mapping. On send, every tracked
|
|
40
|
+
* `@DisplayName` literal gets swapped back to Slack's
|
|
41
|
+
* `<@externalUserId>` mention syntax server-side.
|
|
42
|
+
* - Esc closes the picker; Backspace before the `@` does too.
|
|
43
|
+
*
|
|
44
|
+
* Mention map is a flat array (not a Map) because the same name
|
|
45
|
+
* could be inserted twice — we replace the first matching span
|
|
46
|
+
* per occurrence at send time.
|
|
47
|
+
*/
|
|
48
|
+
export declare const Composer: FC<ComposerProps>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=Composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,EAAE,EAA+E,MAAM,OAAO,CAAC;AA+EvH,UAAU,aAAa;IACrB;oEACgE;IAChE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD;wEACoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;oDACgD;IAChD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;4CAEwC;IACxC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC;;;wEAGoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAsgBtC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface ConfirmDeleteModalProps {
|
|
3
|
+
shown: boolean;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
onConfirm: () => void;
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
/** Confirm-button label; pass the in-flight label while deleting. */
|
|
9
|
+
confirmLabel: string;
|
|
10
|
+
/** Disables the confirm button while the delete is in flight. */
|
|
11
|
+
isConfirming?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Slack-owned destructive confirmation dialog — Figma frame 1062:182996.
|
|
15
|
+
* Header band (slate-subtle + hairline divider) with title + close, body copy,
|
|
16
|
+
* and a right-aligned Cancel (secondary) / Confirm (destructive red) row.
|
|
17
|
+
*
|
|
18
|
+
* Self-contained to the Slack feature (own tokens + Hanken font) rather than
|
|
19
|
+
* leaning on the shared write-form ConfirmationModal — its chrome and the
|
|
20
|
+
* destructive styling are Slack-specific.
|
|
21
|
+
*/
|
|
22
|
+
export declare const ConfirmDeleteModal: FC<ConfirmDeleteModalProps>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=ConfirmDeleteModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDeleteModal.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B,UAAU,uBAAuB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAgG1D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Unified deleted-message tombstone — Figma frame 1062:184262 ("Chat UI").
|
|
4
|
+
* One treatment for every place a message can be deleted: the thread-mode
|
|
5
|
+
* pinned parent, a channel-list thread root, and a thread-detail root/reply.
|
|
6
|
+
* Replaces the message's avatar + header + body with a trash glyph in a white
|
|
7
|
+
* circle and the line "This message was deleted", on a slate-subtle rounded
|
|
8
|
+
* card.
|
|
9
|
+
*
|
|
10
|
+
* The trash icon is the exact vector exported from Figma (tabler-icon-trash-x,
|
|
11
|
+
* node 1062:184696) — not a re-draw.
|
|
12
|
+
*/
|
|
13
|
+
export declare const DeletedTombstone: FC<{
|
|
14
|
+
indented?: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=DeletedTombstone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeletedTombstone.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/DeletedTombstone.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CA8CvD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface LinkedChannelHeaderProps {
|
|
3
|
+
/** Channel name (without the leading `#`) from the cached linked-conversation
|
|
4
|
+
* query. The band does not fetch — the panel passes the value it already has. */
|
|
5
|
+
channelName: string;
|
|
6
|
+
/** Slack `app_redirect` deep link to the channel/thread (Phase 2). When
|
|
7
|
+
* present, the additive `URL:` row renders a blue, truncated link opening in
|
|
8
|
+
* a new tab. Absent → `Channel:`-only Phase-1 layout. */
|
|
9
|
+
channelUrl?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* HIG-only top content band (Figma 679:621193) pinned above the linked panel.
|
|
13
|
+
* Phase 1 renders a `Channel:` (gray label) + `#<name>` (dark value) row; Phase 2
|
|
14
|
+
* adds an additive `URL:` row (blue, truncated link opening Slack in a new tab)
|
|
15
|
+
* whenever a `channelUrl` is supplied. The bottom hairline lives on
|
|
16
|
+
* `ChannelHeaderBand`. Purely presentational — gated by `showChannelHeader` at
|
|
17
|
+
* the call site.
|
|
18
|
+
*/
|
|
19
|
+
export declare const LinkedChannelHeader: FC<LinkedChannelHeaderProps>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=LinkedChannelHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkedChannelHeader.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/LinkedChannelHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B,UAAU,wBAAwB;IAChC;sFACkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB;;8DAE0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CA4C5D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface LoadOlderMessagesProps {
|
|
3
|
+
isLoading: boolean;
|
|
4
|
+
error: boolean;
|
|
5
|
+
/** Triggered by clicking the affordance (fallback to scroll-to-top). */
|
|
6
|
+
onLoad: () => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Top-of-list "load older messages" affordance. Scroll-to-top is the
|
|
10
|
+
* primary trigger; this row makes the state visible and offers a click
|
|
11
|
+
* fallback (and a retry path on error). Rendered only when older history
|
|
12
|
+
* exists or a fetch is in flight / failed.
|
|
13
|
+
*/
|
|
14
|
+
export declare const LoadOlderMessages: FC<LoadOlderMessagesProps>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=LoadOlderMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadOlderMessages.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/LoadOlderMessages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAO3B,UAAU,sBAAsB;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA2BxD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { ChannelMember } from '../../types/wire';
|
|
3
|
+
interface MentionPickerProps {
|
|
4
|
+
anchor: HTMLElement | null;
|
|
5
|
+
query: string;
|
|
6
|
+
members: ChannelMember[];
|
|
7
|
+
/** Index of the row the keyboard has highlighted (drives Enter-select). */
|
|
8
|
+
highlightIdx: number;
|
|
9
|
+
onPick: (member: ChannelMember) => void;
|
|
10
|
+
/** Keep highlight in sync with mouse hover so click + keyboard agree. */
|
|
11
|
+
onHighlightChange: (idx: number) => void;
|
|
12
|
+
onClose: () => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* UI-10 — @ mention picker per Figma 683:670087. Shows above the
|
|
16
|
+
* composer with a scrollable list of channel members. Each row =
|
|
17
|
+
* 24px avatar + display name (Inter Medium 13/19 slate-body).
|
|
18
|
+
* Filtered by the `query` substring after the `@` keystroke.
|
|
19
|
+
*
|
|
20
|
+
* Keyboard handling lives in the parent composer (so the textarea keeps
|
|
21
|
+
* focus while the popover navigates); `highlightIdx` is owned there and
|
|
22
|
+
* passed down. This component renders the list + handles row clicks/hover.
|
|
23
|
+
* ArrowUp/Down + Enter are translated by the parent into onPick calls.
|
|
24
|
+
*/
|
|
25
|
+
export declare const MentionPicker: FC<MentionPickerProps>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=MentionPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentionPicker.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/MentionPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAa,MAAM,OAAO,CAAC;AAMtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,yEAAyE;IACzE,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAiFhD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { SlackMessage } from '../../types/wire';
|
|
3
|
+
interface MessageItemProps {
|
|
4
|
+
message: SlackMessage;
|
|
5
|
+
/** externalUserId → display name, for rendering `<@U…>` mention
|
|
6
|
+
* tokens as `@DisplayName`. Falls back to `@<id>` when unknown. */
|
|
7
|
+
memberNames?: Map<string, string>;
|
|
8
|
+
/** When provided, a hover toolbar with a "Reply" action is shown on
|
|
9
|
+
* the row (channel list roots). Omitted → no toolbar (e.g. replies
|
|
10
|
+
* inside an open thread). */
|
|
11
|
+
onReply?: () => void;
|
|
12
|
+
/** Thread-detail replies: indent the content by 32px. Applied as row
|
|
13
|
+
* padding (not a wrapper) so the hover highlight stays full-width. */
|
|
14
|
+
indented?: boolean;
|
|
15
|
+
/** When true, paint the row with the Slack-notification highlight wash
|
|
16
|
+
* (deep-link arrival). Inline background overrides the :hover rule so the
|
|
17
|
+
* highlight holds steady while hovered. */
|
|
18
|
+
isHighlighted?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Single Chat-UI row per Figma 683:666933 / 666934.
|
|
22
|
+
* Layout: 30×30 rounded-100 avatar + 8px gap + body column.
|
|
23
|
+
* Body column gap 4px, header row 12px gap items-baseline.
|
|
24
|
+
*
|
|
25
|
+
* The BE still emits editedAt/deletedAt for messages edited or
|
|
26
|
+
* deleted natively in Slack, so we render the `(edited)` badge and
|
|
27
|
+
* the "This message was deleted." tombstone for inbound display.
|
|
28
|
+
*/
|
|
29
|
+
export declare const MessageItem: FC<MessageItemProps>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=MessageItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageItem.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/MessageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,EAAE,EAAqB,MAAM,OAAO,CAAC;AAU7D,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,6BAA6B,CAAC;AAgB/E,UAAU,gBAAgB;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB;wEACoE;IACpE,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;kCAE8B;IAC9B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;2EACuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;gDAE4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAkDD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAyK5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotMemberTooltip.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/NotMemberTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAmDzC,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,QAAQ,EAAE,YAAY,CAAA;CAAE,CAI3D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Composer replacement for the `slack_not_connected` block reason —
|
|
4
|
+
* the viewer reached the linked panel but has no active Slack auth
|
|
5
|
+
* (e.g. token revoked between the connect-status check and this read).
|
|
6
|
+
*
|
|
7
|
+
* This is a defensive surface: SlackConversationTab already gates the
|
|
8
|
+
* whole panel behind `userAuthState === 'connected'` and opens
|
|
9
|
+
* <SlackConnectModal> when auth is missing, so in practice the modal
|
|
10
|
+
* handles (re)connection. We still block the composer here rather than
|
|
11
|
+
* let a doomed send through — the whole point of the per-viewer hint
|
|
12
|
+
* is to avoid the wait-for-failure experience.
|
|
13
|
+
*/
|
|
14
|
+
export declare const ReconnectSlackBanner: FC;
|
|
15
|
+
//# sourceMappingURL=ReconnectSlackBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReconnectSlackBanner.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAoClC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
interface ThreadDetailViewProps {
|
|
3
|
+
/** Root ts of the thread being viewed. */
|
|
4
|
+
threadTs: string;
|
|
5
|
+
memberNames?: Map<string, string>;
|
|
6
|
+
hasLeftChannel: boolean;
|
|
7
|
+
guard?: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
8
|
+
onBack: () => void;
|
|
9
|
+
/** HIG-only pinned channel band (already gated/built by the panel). Rendered
|
|
10
|
+
* at the top of the drill-in so the band stays visible across the channel
|
|
11
|
+
* list ↔ thread-detail navigation. Null on Omni / flags-off. */
|
|
12
|
+
channelBand?: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* B4 channel thread-detail (Figma 683:669379) — drilled in from the
|
|
16
|
+
* channel list. Lazily fetches the thread's messages (root + replies),
|
|
17
|
+
* shows a "‹ back" affordance, and a composer that replies INTO this
|
|
18
|
+
* thread. Replies are only fetched here, never in the list view.
|
|
19
|
+
*/
|
|
20
|
+
export declare const ThreadDetailView: FC<ThreadDetailViewProps>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=ThreadDetailView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadDetailView.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/ThreadDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAyC,MAAM,OAAO,CAAC;AA0F7E,UAAU,qBAAqB;IAC7B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;qEAEiE;IACjE,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAsJtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadSkeleton.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/ThreadSkeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AA+B3B,eAAO,MAAM,cAAc,EAAE,EAM5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageItem.test.d.ts","sourceRoot":"","sources":["../../../../../../src/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* UI-5 — content of the Slack tab when a Slack thread is already
|
|
4
|
+
* linked to the current Hiver conversation. Layout per Figma frame
|
|
5
|
+
* 683:666565 (and variants 665917 / 660800):
|
|
6
|
+
*
|
|
7
|
+
* ┌──────────────────────────────────────┐
|
|
8
|
+
* │ Parent message (pinned, not scroll) │
|
|
9
|
+
* ├──────────────────────────────────────┤
|
|
10
|
+
* │ Reply 1 │
|
|
11
|
+
* │ Reply 2 │
|
|
12
|
+
* │ ... │ ← scrollable
|
|
13
|
+
* ├──────────────────────────────────────┤
|
|
14
|
+
* │ Composer (UI-9 slot) │
|
|
15
|
+
* └──────────────────────────────────────┘
|
|
16
|
+
*
|
|
17
|
+
* Backend's `messages` array is reverse-chronological with the
|
|
18
|
+
* parent slot pinned at index 0 (cache shape — see plan-slack-m1-
|
|
19
|
+
* phase-4). UI-5 keeps that invariant in render: index 0 is the
|
|
20
|
+
* <ParentPin>, the tail is the scrollable list reversed so newest
|
|
21
|
+
* sits at the bottom (chat convention).
|
|
22
|
+
*
|
|
23
|
+
* The 50-entry trim flag (`isTrimmed`) renders a muted footer at
|
|
24
|
+
* the top of the scroll list when the cache hit the M1 cap.
|
|
25
|
+
*/
|
|
26
|
+
export declare const LinkedConversationPanel: FC;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAA8D,MAAM,OAAO,CAAC;AA6BvF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,uBAAuB,EAAE,EAmfrC,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { BoxProps, ButtonProps, StackProps } from '@hiver/hiver-ui-kit';
|
|
2
|
+
import { StyledComponent } from '@emotion/styled';
|
|
3
|
+
/**
|
|
4
|
+
* Layout for the linked-conv tab content per Figma frame
|
|
5
|
+
* 683:666932. The host (outlook-ui) owns the tab bar above; we
|
|
6
|
+
* paint the area under it. Outer vertical borders match the
|
|
7
|
+
* Figma frame which has `border-l border-r border-[#e2e8f0]`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const LinkedRoot: StyledComponent<BoxProps>;
|
|
10
|
+
/**
|
|
11
|
+
* Pinned parent slot. Per Figma the parent message is just a
|
|
12
|
+
* normal Chat-UI row at the top of the panel (same px-[20px]
|
|
13
|
+
* py-[12px] as replies). No visible separator below it in the
|
|
14
|
+
* static frame — the visual separation comes from the
|
|
15
|
+
* subsequent rows starting at their own padded slot.
|
|
16
|
+
*
|
|
17
|
+
* `boxed` (HIG UI layer): when the boxed-message flag is on, message
|
|
18
|
+
* cards carry their own outer horizontal gutter, so the pinned parent
|
|
19
|
+
* needs the same horizontal inset to line its card up with the scrolled
|
|
20
|
+
* reply cards. Off → today's `padding: <xl> 0` (no horizontal), since the
|
|
21
|
+
* plain message row owns its horizontal padding.
|
|
22
|
+
*/
|
|
23
|
+
export declare const ParentPin: StyledComponent<BoxProps & {
|
|
24
|
+
boxed?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* HIG-only pinned "Channel:/URL:" band (Figma 679:621193), rendered above
|
|
28
|
+
* the scroll region in the linked state only (gated on `showChannelHeader`).
|
|
29
|
+
* `flex: 0 0 auto` keeps it fixed while messages/threads scroll below. Phase 1
|
|
30
|
+
* carries the `Channel:` row only; the `URL:` row drops in additively as a
|
|
31
|
+
* second `ChannelHeaderRow` child (see LinkedChannelHeader).
|
|
32
|
+
*/
|
|
33
|
+
export declare const ChannelHeaderBand: StyledComponent<BoxProps>;
|
|
34
|
+
/** One row inside the band — a label + value pair, baseline-aligned. */
|
|
35
|
+
export declare const ChannelHeaderRow: StyledComponent<BoxProps>;
|
|
36
|
+
export declare const RepliesScroll: StyledComponent<BoxProps & {
|
|
37
|
+
boxed?: boolean;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Top-of-list "load older" affordance. Centered, muted caption row shown
|
|
41
|
+
* above the message list while older history exists (or is loading /
|
|
42
|
+
* errored). Clickable as a fallback to the scroll-to-top trigger.
|
|
43
|
+
*/
|
|
44
|
+
export declare const LoadOlderBar: StyledComponent<BoxProps>;
|
|
45
|
+
/**
|
|
46
|
+
* Thread-detail "‹ back" row (Figma 683:669379) — sits above the
|
|
47
|
+
* drilled-in thread, left-aligned with the message column.
|
|
48
|
+
*/
|
|
49
|
+
export declare const BackRow: StyledComponent<BoxProps>;
|
|
50
|
+
/**
|
|
51
|
+
* Channel-mode scroll region (B4) — the full list of thread groups in
|
|
52
|
+
* the linked channel. Same scroll mechanics as RepliesScroll.
|
|
53
|
+
*/
|
|
54
|
+
export declare const ChannelThreadsScroll: StyledComponent<BoxProps & {
|
|
55
|
+
boxed?: boolean;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* One thread group (a root message + its "Replies (n)" link). Threads
|
|
59
|
+
* are separated by whitespace only — the Figma has no divider rule
|
|
60
|
+
* between messages.
|
|
61
|
+
*/
|
|
62
|
+
export declare const ThreadGroupRoot: StyledComponent<BoxProps>;
|
|
63
|
+
/**
|
|
64
|
+
* Thread-detail reply stack (Figma 683:669746). Replies are indented
|
|
65
|
+
* 32px so their avatars sit under the root message's text column, and a
|
|
66
|
+
* vertical rail with a rounded elbow connects each reply back to the
|
|
67
|
+
* thread — mirroring the design's "Line 19" + "Vector 3" guide.
|
|
68
|
+
*/
|
|
69
|
+
export declare const ThreadReplies: StyledComponent<BoxProps>;
|
|
70
|
+
/**
|
|
71
|
+
* The reply-threading guide (vertical rail + rounded elbow) is drawn in
|
|
72
|
+
* ThreadDetailView's ReplyConnector with real positioned elements rather
|
|
73
|
+
* than pseudo-elements here — it needs deterministic per-reply control
|
|
74
|
+
* (e.g. capping the rail at the LAST reply), which CSS positional
|
|
75
|
+
* selectors didn't deliver reliably through the styled Box.
|
|
76
|
+
*/
|
|
77
|
+
/**
|
|
78
|
+
* Composer outer slot — Figma 683:667011 gives this a 20px
|
|
79
|
+
* surrounding pad and white background. The inner box (border +
|
|
80
|
+
* radius) is composed inside the Composer component itself.
|
|
81
|
+
*/
|
|
82
|
+
export declare const ComposerSlotRoot: StyledComponent<BoxProps>;
|
|
83
|
+
/**
|
|
84
|
+
* One Chat-UI row (Figma 683:666934). Padded 20/12 with 8px gap
|
|
85
|
+
* between avatar and body column.
|
|
86
|
+
*
|
|
87
|
+
* `boxed` (HIG UI layer): renders the row as a light-gray rounded card. The
|
|
88
|
+
* outer horizontal gutter comes from the scroll container / ParentPin (so the
|
|
89
|
+
* pinned parent and scrolled cards share the same left/right inset); here we add
|
|
90
|
+
* the rounded base fill, a vertical gap between cards, and a hover shade
|
|
91
|
+
* **distinct from the base** so the hover reads against the gray card (the plain
|
|
92
|
+
* white-row hover would be invisible on it). The deep-link `isHighlighted` wash
|
|
93
|
+
* stays an inline `backgroundColor` on the row, which beats this rule and so
|
|
94
|
+
* still wins over the boxed base — see MessageItem.
|
|
95
|
+
*/
|
|
96
|
+
export declare const MessageRow: StyledComponent<StackProps & {
|
|
97
|
+
boxed?: boolean;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Floating per-message action bar, pinned to the row's top-right
|
|
101
|
+
* (Figma 683:661942: 26px tall white pill, 0.5px hairline border, a
|
|
102
|
+
* soft `0 0 2px rgba(51,65,85,0.25)` shadow, 6px radius). M1 carries a
|
|
103
|
+
* single icon-only "Reply" action — the reaction/emoji affordance is
|
|
104
|
+
* omitted.
|
|
105
|
+
*
|
|
106
|
+
* Figma floats it ~half-above the row's top edge (negative offset), so we use
|
|
107
|
+
* `top: -13px` (= -height/2) to overhang upward. The overhang lands outside
|
|
108
|
+
* the row's box, so the topmost row in a scroll container would have its pill
|
|
109
|
+
* clipped by `overflow-y: auto` (and, in thread mode, hidden behind the
|
|
110
|
+
* separately-rendered ParentPin). The scroll containers (RepliesScroll /
|
|
111
|
+
* ChannelThreadsScroll) reserve >= 13px top padding so that overhang stays
|
|
112
|
+
* inside their padding box and renders un-clipped — see those styles. A high
|
|
113
|
+
* z-index keeps it above adjacent rows' hover background. `overflow: hidden`
|
|
114
|
+
* clamps the button's hover tint to the pill's rounded corners.
|
|
115
|
+
*/
|
|
116
|
+
export declare const HoverToolbar: StyledComponent<BoxProps>;
|
|
117
|
+
export declare const ReplyButton: StyledComponent<ButtonProps>;
|
|
118
|
+
export declare const DeleteButton: StyledComponent<ButtonProps>;
|
|
119
|
+
/**
|
|
120
|
+
* Avatar — 30px fully rounded per Figma 683:666937 (`size-[30px]
|
|
121
|
+
* rounded-[100px]`). Background per-author in production; the
|
|
122
|
+
* fallback uses Hiver's purple-light tint.
|
|
123
|
+
*/
|
|
124
|
+
export declare const AvatarCircle: StyledComponent<BoxProps>;
|
|
125
|
+
export declare const MessageBodyCol: StyledComponent<BoxProps>;
|
|
126
|
+
/**
|
|
127
|
+
* Header row — author + timestamp baseline-aligned with 12px gap
|
|
128
|
+
* (Figma 683:666940).
|
|
129
|
+
*/
|
|
130
|
+
export declare const MessageHeaderRow: StyledComponent<StackProps>;
|
|
131
|
+
/**
|
|
132
|
+
* Inbound reactions row (Figma 683:671873) — the third child of
|
|
133
|
+
* MessageBodyCol, so the column's 4px gap already spaces it 4px below the
|
|
134
|
+
* message text. Reactions wrap to the next line when they overflow the
|
|
135
|
+
* panel width.
|
|
136
|
+
*/
|
|
137
|
+
export declare const ReactionsRow: StyledComponent<BoxProps>;
|
|
138
|
+
/**
|
|
139
|
+
* One reaction pill (Figma 683:671874 "Emoji states") — a fully-rounded
|
|
140
|
+
* chip holding a 12px emoji glyph + the reactor count. Neutral fill by
|
|
141
|
+
* default; the viewer's own reactions get the primary blue wash + hairline
|
|
142
|
+
* border (the component's "reacted" state). Display-only in M1, so no
|
|
143
|
+
* hover/cursor affordance. The 1px transparent base border keeps the box
|
|
144
|
+
* the same size whether or not the self-border is shown.
|
|
145
|
+
*/
|
|
146
|
+
export declare const ReactionPill: StyledComponent<BoxProps>;
|
|
147
|
+
//# sourceMappingURL=style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,QAAQ,CAQhD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,EAAE,eAAe,CAAC,QAAQ,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAKrE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAAe,CAAC,QAAQ,CAQvD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,QAAQ,CAMtD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,QAAQ,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAiBzE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,QAAQ,CAMlD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,eAAe,CAAC,QAAQ,CAG7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,QAAQ,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAWhF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,QAAQ,CAGrD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,QAAQ,CAGnD,CAAC;AAEF;;;;;;GAMG;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,QAAQ,CAStD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAoCxE,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,QAAQ,CAalD,CAAC;AAKF,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,WAAW,CAkBpD,CAAC;AAKF,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,WAAW,CAmBrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,QAAQ,CAoBlD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CAMpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,UAAU,CAKxD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,QAAQ,CAKlD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,QAAQ,CAQlD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { ITrackingData } from '../../../context';
|
|
3
|
+
interface SlackConnectModalProps {
|
|
4
|
+
connectorId: string;
|
|
5
|
+
open: boolean;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
/** Fired once when user-auth transitions to `connected`. Lets a
|
|
8
|
+
* host (outlook-ui) re-check auth status and swap the pre-auth
|
|
9
|
+
* button for the Slack tab. */
|
|
10
|
+
onConnected?: () => void;
|
|
11
|
+
/** Gainsight sink. Passed as a prop (not read from SlackContext)
|
|
12
|
+
* because the host-triggered <SlackConnectModalIsland> mounts this
|
|
13
|
+
* modal WITHOUT a SlackContextProvider. */
|
|
14
|
+
sendTrackingEvent?: (event: string, data?: ITrackingData) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Connect Slack modal — Figma frame 683:659445 (default) and
|
|
18
|
+
* 683:660125 (Connecting variant).
|
|
19
|
+
*
|
|
20
|
+
* Card 399×auto, white bg, radius 12. Top band is a 164px lavender
|
|
21
|
+
* (primary-subtle #e6effd) logo panel showing Hiver ⇄ Slack
|
|
22
|
+
* icons. Below: body copy + primary blue CTA. Close X at top-right.
|
|
23
|
+
*
|
|
24
|
+
* Reuses useUserAuthFlow from connector-cards so the OAuth popup
|
|
25
|
+
* + status polling is identical to other user-tier integrations.
|
|
26
|
+
*/
|
|
27
|
+
export declare const SlackConnectModal: FC<SlackConnectModalProps>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=SlackConnectModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackConnectModal.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/components/SlackConnectModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAUxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAgB/C,UAAU,sBAAsB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;oCAEgC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;gDAE4C;IAC5C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CACnE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA6FxD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface SlackConversationTabProps {
|
|
3
|
+
/** Optional external trigger for parent-driven open. Internal
|
|
4
|
+
* state still owns visibility; the host can listen if it needs to
|
|
5
|
+
* track when the user opens the start flow. */
|
|
6
|
+
onStartFlowRequested?: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const SlackConversationTab: FC<SlackConversationTabProps>;
|
|
9
|
+
export default SlackConversationTab;
|
|
10
|
+
//# sourceMappingURL=SlackConversationTab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackConversationTab.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/components/SlackConversationTab.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAoC,MAAM,OAAO,CAAC;AAuB7D,UAAU,yBAAyB;IACjC;;oDAEgD;IAChD,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;CACnC;AAiCD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CAwK9D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Inlined Slack logomark — Slack's brand-approved four-square shape.
|
|
4
|
+
* Inlined rather than fetched from @hiver/hiver-ui-kit because the
|
|
5
|
+
* kit doesn't ship third-party logos, and a single SVG is cheaper
|
|
6
|
+
* than a managed asset for the empty-state hero.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SlackLogo: FC<{
|
|
9
|
+
size?: number;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=SlackLogo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackLogo.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/components/SlackLogo.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAO3C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { SlackUser } from '../../types/wire';
|
|
3
|
+
interface MemberSelectProps {
|
|
4
|
+
value: SlackUser[];
|
|
5
|
+
onChange: (next: SlackUser[]) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const MemberSelect: FC<MemberSelectProps>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=MemberSelect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemberSelect.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/StartModal/MemberSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAM7D,UAAU,iBAAiB;IACzB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;CACvC;AAuCD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA0G9C,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface MentionTextareaProps {
|
|
3
|
+
/** Human-readable draft (with "@DisplayName" literals). */
|
|
4
|
+
value: string;
|
|
5
|
+
/** Reports both the display text and the Slack-mention form (picked
|
|
6
|
+
* mentions rewritten to `<@user_id>`) so the parent can show one and
|
|
7
|
+
* post the other. */
|
|
8
|
+
onChange: (displayText: string, slackText: string) => void;
|
|
9
|
+
/** Slack channel the agent picked in the Start flow. Members are fetched
|
|
10
|
+
* for this channel (no link exists yet, so we can't resolve via the conv).
|
|
11
|
+
* Mentions are disabled until a channel is selected. */
|
|
12
|
+
channelId: string | null;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
autoFocus?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Bug 1 — message field for the Start flow that resolves @-mentions to real
|
|
18
|
+
* Slack mentions, mirroring the thread-reply Composer. Without this the Start
|
|
19
|
+
* compose posted "@name" as literal text and nobody was notified.
|
|
20
|
+
*
|
|
21
|
+
* Controlled: the parent owns the draft string (so Cancel can reset it — see
|
|
22
|
+
* Bug 8). This component owns only the transient mention map + picker state,
|
|
23
|
+
* and reuses the shared MentionPicker + mention helpers so keyboard nav
|
|
24
|
+
* (Bug 4) and `<@id>` conversion behave identically in both composers.
|
|
25
|
+
*/
|
|
26
|
+
export declare const MentionTextarea: FC<MentionTextareaProps>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=MentionTextarea.d.ts.map
|