@hiver/connector-agent 4.14.0-multiRef-beta.1 → 4.14.0-slack-beta.2

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.
Files changed (160) hide show
  1. package/README.md +9 -9
  2. package/app/connector-cards.d.ts.map +1 -1
  3. package/app/omni-slack/SlackConnectModalIsland.d.ts +26 -0
  4. package/app/omni-slack/SlackConnectModalIsland.d.ts.map +1 -0
  5. package/app/omni-slack/index.d.ts +14 -0
  6. package/app/omni-slack/index.d.ts.map +1 -0
  7. package/app/omni-slack/provider.d.ts +15 -0
  8. package/app/omni-slack/provider.d.ts.map +1 -0
  9. package/app/provider.d.ts.map +1 -1
  10. package/constants/tracking-events.d.ts +8 -0
  11. package/constants/tracking-events.d.ts.map +1 -1
  12. package/features/connector-cards/api/userAuth.d.ts +25 -0
  13. package/features/connector-cards/api/userAuth.d.ts.map +1 -0
  14. package/features/connector-cards/components/card-list/CardWithUserAuth.d.ts +33 -0
  15. package/features/connector-cards/components/card-list/CardWithUserAuth.d.ts.map +1 -0
  16. package/features/connector-cards/components/card-list/ListCards.d.ts.map +1 -1
  17. package/features/connector-cards/components/card-list/NoCardsUserAuthGate.d.ts +24 -0
  18. package/features/connector-cards/components/card-list/NoCardsUserAuthGate.d.ts.map +1 -0
  19. package/features/connector-cards/components/card-list/card-content-value.d.ts +2 -2
  20. package/features/connector-cards/components/card-list/card-content-value.d.ts.map +1 -1
  21. package/features/connector-cards/components/card-list/list-item-modal.d.ts.map +1 -1
  22. package/features/connector-cards/components/card-list/style.d.ts +0 -2
  23. package/features/connector-cards/components/card-list/style.d.ts.map +1 -1
  24. package/features/connector-cards/components/connection-in-progress-modal/index.d.ts +19 -0
  25. package/features/connector-cards/components/connection-in-progress-modal/index.d.ts.map +1 -0
  26. package/features/connector-cards/components/user-auth-card/__tests__/UserAuthCard.test.d.ts +2 -0
  27. package/features/connector-cards/components/user-auth-card/__tests__/UserAuthCard.test.d.ts.map +1 -0
  28. package/features/connector-cards/components/user-auth-card/index.d.ts +33 -0
  29. package/features/connector-cards/components/user-auth-card/index.d.ts.map +1 -0
  30. package/features/connector-cards/components/user-auth-card/style.d.ts +29 -0
  31. package/features/connector-cards/components/user-auth-card/style.d.ts.map +1 -0
  32. package/features/connector-cards/constants/api.d.ts +2 -0
  33. package/features/connector-cards/constants/api.d.ts.map +1 -1
  34. package/features/connector-cards/hooks/useUserAuthFlow.d.ts +42 -0
  35. package/features/connector-cards/hooks/useUserAuthFlow.d.ts.map +1 -0
  36. package/features/connector-cards/store/userAuth.d.ts +85 -0
  37. package/features/connector-cards/store/userAuth.d.ts.map +1 -0
  38. package/features/connector-cards/store/userAuth.test.d.ts +2 -0
  39. package/features/connector-cards/store/userAuth.test.d.ts.map +1 -0
  40. package/features/connector-cards/utils/registerUserAuthCallback.d.ts +13 -0
  41. package/features/connector-cards/utils/registerUserAuthCallback.d.ts.map +1 -0
  42. package/features/connector-cards/utils.d.ts +0 -1
  43. package/features/connector-cards/utils.d.ts.map +1 -1
  44. package/features/slack/api/channels.d.ts +11 -0
  45. package/features/slack/api/channels.d.ts.map +1 -0
  46. package/features/slack/api/conversations.d.ts +41 -0
  47. package/features/slack/api/conversations.d.ts.map +1 -0
  48. package/features/slack/api/effective-config.d.ts +21 -0
  49. package/features/slack/api/effective-config.d.ts.map +1 -0
  50. package/features/slack/api/index.d.ts +4 -0
  51. package/features/slack/api/index.d.ts.map +1 -0
  52. package/features/slack/api/linked-conv.d.ts +33 -0
  53. package/features/slack/api/linked-conv.d.ts.map +1 -0
  54. package/features/slack/api/members.d.ts +10 -0
  55. package/features/slack/api/members.d.ts.map +1 -0
  56. package/features/slack/api/messages.d.ts +10 -0
  57. package/features/slack/api/messages.d.ts.map +1 -0
  58. package/features/slack/api/normalise.d.ts +3 -0
  59. package/features/slack/api/normalise.d.ts.map +1 -0
  60. package/features/slack/avatar/SlackAvatar.d.ts +20 -0
  61. package/features/slack/avatar/SlackAvatar.d.ts.map +1 -0
  62. package/features/slack/avatar/cache.d.ts +10 -0
  63. package/features/slack/avatar/cache.d.ts.map +1 -0
  64. package/features/slack/avatar/index.d.ts +2 -0
  65. package/features/slack/avatar/index.d.ts.map +1 -0
  66. package/features/slack/components/HeroIllustration.d.ts +16 -0
  67. package/features/slack/components/HeroIllustration.d.ts.map +1 -0
  68. package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts +25 -0
  69. package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts.map +1 -0
  70. package/features/slack/components/LinkedConversationPanel/Composer.d.ts +45 -0
  71. package/features/slack/components/LinkedConversationPanel/Composer.d.ts.map +1 -0
  72. package/features/slack/components/LinkedConversationPanel/LeftChannelBanner.d.ts +26 -0
  73. package/features/slack/components/LinkedConversationPanel/LeftChannelBanner.d.ts.map +1 -0
  74. package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts +16 -0
  75. package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts.map +1 -0
  76. package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts +23 -0
  77. package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts.map +1 -0
  78. package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts +27 -0
  79. package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts.map +1 -0
  80. package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts +15 -0
  81. package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts.map +1 -0
  82. package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts +19 -0
  83. package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts.map +1 -0
  84. package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts +3 -0
  85. package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts.map +1 -0
  86. package/features/slack/components/LinkedConversationPanel/index.d.ts +27 -0
  87. package/features/slack/components/LinkedConversationPanel/index.d.ts.map +1 -0
  88. package/features/slack/components/LinkedConversationPanel/style.d.ts +96 -0
  89. package/features/slack/components/LinkedConversationPanel/style.d.ts.map +1 -0
  90. package/features/slack/components/SlackConnectModal.d.ts +29 -0
  91. package/features/slack/components/SlackConnectModal.d.ts.map +1 -0
  92. package/features/slack/components/SlackConversationTab.d.ts +31 -0
  93. package/features/slack/components/SlackConversationTab.d.ts.map +1 -0
  94. package/features/slack/components/SlackLogo.d.ts +11 -0
  95. package/features/slack/components/SlackLogo.d.ts.map +1 -0
  96. package/features/slack/components/StartModal/SelectField.d.ts +19 -0
  97. package/features/slack/components/StartModal/SelectField.d.ts.map +1 -0
  98. package/features/slack/components/StartModal/SlackChannelTab.d.ts +21 -0
  99. package/features/slack/components/StartModal/SlackChannelTab.d.ts.map +1 -0
  100. package/features/slack/components/StartModal/SlackThreadTab.d.ts +25 -0
  101. package/features/slack/components/StartModal/SlackThreadTab.d.ts.map +1 -0
  102. package/features/slack/components/StartModal/TabIcon.d.ts +16 -0
  103. package/features/slack/components/StartModal/TabIcon.d.ts.map +1 -0
  104. package/features/slack/components/StartModal/index.d.ts +27 -0
  105. package/features/slack/components/StartModal/index.d.ts.map +1 -0
  106. package/features/slack/components/StartModal/style.d.ts +38 -0
  107. package/features/slack/components/StartModal/style.d.ts.map +1 -0
  108. package/features/slack/components/figma-tokens.d.ts +89 -0
  109. package/features/slack/components/figma-tokens.d.ts.map +1 -0
  110. package/features/slack/components/style.d.ts +54 -0
  111. package/features/slack/components/style.d.ts.map +1 -0
  112. package/features/slack/constants/api.d.ts +12 -0
  113. package/features/slack/constants/api.d.ts.map +1 -0
  114. package/features/slack/context.d.ts +40 -0
  115. package/features/slack/context.d.ts.map +1 -0
  116. package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts +2 -0
  117. package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts.map +1 -0
  118. package/features/slack/hooks/useLeftChannelGuard.d.ts +5 -0
  119. package/features/slack/hooks/useLeftChannelGuard.d.ts.map +1 -0
  120. package/features/slack/hooks/useOlderMessages.d.ts +51 -0
  121. package/features/slack/hooks/useOlderMessages.d.ts.map +1 -0
  122. package/features/slack/hooks/useSlackTabLabel.d.ts +23 -0
  123. package/features/slack/hooks/useSlackTabLabel.d.ts.map +1 -0
  124. package/features/slack/messageType.d.ts +16 -0
  125. package/features/slack/messageType.d.ts.map +1 -0
  126. package/features/slack/types/wire.d.ts +154 -0
  127. package/features/slack/types/wire.d.ts.map +1 -0
  128. package/features/toast-message/ToastRoot.d.ts.map +1 -1
  129. package/features/write-form/components/map-form-defaults/index.d.ts.map +1 -1
  130. package/features/write-form/components/write-form/index.d.ts.map +1 -1
  131. package/features/write-form/store/slice.d.ts.map +1 -1
  132. package/features/write-form/types/form.d.ts +0 -1
  133. package/features/write-form/types/form.d.ts.map +1 -1
  134. package/features/write-form/utils/response.d.ts.map +1 -1
  135. package/index.d.ts +5 -0
  136. package/index.d.ts.map +1 -1
  137. package/index.es.js +12491 -9617
  138. package/index.umd.js +1014 -423
  139. package/main-dev.d.ts.map +1 -1
  140. package/package.json +1 -1
  141. package/store/hooks.d.ts +2 -0
  142. package/store/hooks.d.ts.map +1 -1
  143. package/store/index.d.ts +6 -0
  144. package/store/index.d.ts.map +1 -1
  145. package/store/slice.d.ts +4 -4
  146. package/store/slice.d.ts.map +1 -1
  147. package/testing/mocks/handlers/fetch-cards.d.ts +4 -4
  148. package/testing/mocks/handlers/fetch-cards.d.ts.map +1 -1
  149. package/testing/mocks/handlers/slack.d.ts +35 -0
  150. package/testing/mocks/handlers/slack.d.ts.map +1 -0
  151. package/testing/mocks/handlers/user-auth.d.ts +31 -0
  152. package/testing/mocks/handlers/user-auth.d.ts.map +1 -0
  153. package/testing/mocks/handlers/write-capability.d.ts.map +1 -1
  154. package/testing/mocks/handlers.d.ts.map +1 -1
  155. package/types/cards.d.ts +6 -6
  156. package/types/cards.d.ts.map +1 -1
  157. package/types/form.d.ts +3 -2
  158. package/types/form.d.ts.map +1 -1
  159. package/utils/form.d.ts +3 -3
  160. package/utils/form.d.ts.map +1 -1
@@ -0,0 +1,11 @@
1
+ import { SlackChannel } from '../types/wire';
2
+ /**
3
+ * Lists Slack channels accessible to the signed-in agent. Backend
4
+ * endpoint pending — UI uses MSW mock for now. Once backend ships,
5
+ * the response shape should be `{ channels: SlackChannel[] }`.
6
+ *
7
+ * Drives UI-3's existing-channel picker. Cache the result for 60s
8
+ * so opening the modal multiple times doesn't re-fetch.
9
+ */
10
+ export declare function useSlackChannels(): import('@tanstack/react-query').UseQueryResult<SlackChannel[], Error>;
11
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/channels.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,0EAc/B"}
@@ -0,0 +1,41 @@
1
+ import { ExternalConversation, SlackOlderPage, SlackThreadGroup, StartExistingChannelRequest, StartNewChannelRequest, StartResponse } from '../types/wire';
2
+ /**
3
+ * Older-message pagination cursor. The backend accepts `before_ts` (fetch
4
+ * messages older than this Slack ts) and `page_size` (window size, max 50)
5
+ * as query params on the external-conversation and thread endpoints.
6
+ * Omit `beforeTs` for page 0 (newest window, served from cache).
7
+ */
8
+ export interface SlackPageParams {
9
+ beforeTs?: string;
10
+ pageSize?: number;
11
+ }
12
+ export declare const startExistingChannel: (payload: StartExistingChannelRequest) => Promise<StartResponse>;
13
+ export declare const startNewChannel: (payload: StartNewChannelRequest) => Promise<StartResponse>;
14
+ export declare const getExternalConversation: (hiverConvId: string, page?: SlackPageParams) => Promise<ExternalConversation>;
15
+ /**
16
+ * Imperative older-page fetch for the message list. Bypasses the polled
17
+ * page-0 query: pass the previous page's nextCursor as `beforeTs` to walk
18
+ * backwards into older history. Returns older thread replies (thread mode)
19
+ * or older thread roots (channel mode); the caller merges + dedupes.
20
+ */
21
+ export declare const getExternalConversationPage: (hiverConvId: string, beforeTs: string, pageSize?: number) => Promise<SlackOlderPage>;
22
+ /**
23
+ * Channel mode (B4): lazily fetch a single thread's full messages
24
+ * (root + replies) when the user drills into it. The list view only
25
+ * carries roots + reply counts, so this is the on-demand fetch. Pass
26
+ * `page` to page into older replies (see getThreadPage).
27
+ */
28
+ export declare const getThread: (hiverConvId: string, threadTs: string, page?: SlackPageParams) => Promise<SlackThreadGroup>;
29
+ /**
30
+ * Imperative older-replies fetch for a thread drill-in. Pass the previous
31
+ * page's nextCursor as `beforeTs`. Returns the older replies window (the
32
+ * thread root is omitted from `messages` — it stays pinned in page 0).
33
+ */
34
+ export declare const getThreadPage: (hiverConvId: string, threadTs: string, beforeTs: string, pageSize?: number) => Promise<SlackOlderPage>;
35
+ export declare const getExternalConversationsByTarget: (params: {
36
+ channelId: string;
37
+ externalThreadTs?: string;
38
+ }) => Promise<{
39
+ hiverConvIds: string[];
40
+ }>;
41
+ //# sourceMappingURL=conversations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/conversations.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,oBAAoB,EAEpB,cAAc,EAGd,gBAAgB,EAChB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,EACd,MAAM,6BAA6B,CAAC;AAErC;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA0DD,eAAO,MAAM,oBAAoB,YAAmB,2BAA2B,KAAG,OAAO,CAAC,aAAa,CAQtG,CAAC;AAEF,eAAO,MAAM,eAAe,YAAmB,sBAAsB,KAAG,OAAO,CAAC,aAAa,CAQ5F,CAAC;AAeF,eAAO,MAAM,uBAAuB,gBACrB,MAAM,SACZ,eAAe,KACrB,OAAO,CAAC,oBAAoB,CAmB9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,gBACzB,MAAM,YACT,MAAM,aACL,MAAM,KAChB,OAAO,CAAC,cAAc,CASxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,gBACP,MAAM,YACT,MAAM,SACT,eAAe,KACrB,OAAO,CAAC,gBAAgB,CAQ1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,gBACX,MAAM,YACT,MAAM,YACN,MAAM,aACL,MAAM,KAChB,OAAO,CAAC,cAAc,CAQxB,CAAC;AAEF,eAAO,MAAM,gCAAgC,WAAkB;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,KAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAUrC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type EffectiveConfigReason = 'config_not_found' | 'role_not_allowed' | 'user_not_in_mailbox' | 'feature_flag_off' | 'effective';
2
+ export interface EffectiveConfigResponse {
3
+ enabled: boolean;
4
+ reason: EffectiveConfigReason;
5
+ workspaceConnectorId?: string | null;
6
+ }
7
+ /**
8
+ * Resolves whether the signed-in user can use Slack in this mailbox.
9
+ * Backend evaluates: SM-admin config exists, this user's role is in
10
+ * allow-list, mailbox is in scope, LD flag is on. Returns one of
11
+ * five reason codes (Phase 9 contract).
12
+ *
13
+ * `smId` is required by the backend (`sm_id` query param). Pre-2026-06-09
14
+ * the hook called the endpoint without it and 422'd every time — the
15
+ * caller (SlackConversationTab) now sources smId from SlackContext.
16
+ *
17
+ * Lives on the agent side because every Slack panel mount calls it;
18
+ * admin only consumes it from the Configure page to preview gating.
19
+ */
20
+ export declare function useSlackEffectiveConfig(smId: string): import('@tanstack/react-query').UseQueryResult<EffectiveConfigResponse, Error>;
21
+ //# sourceMappingURL=effective-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-config.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/effective-config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,qBAAqB,GAC7B,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,WAAW,CAAC;AAEhB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,kFAcnD"}
@@ -0,0 +1,4 @@
1
+ export { getExternalConversation, getExternalConversationPage, getExternalConversationsByTarget, getThreadPage, startExistingChannel, startNewChannel } from './conversations';
2
+ export { postMessage } from './messages';
3
+ export { getChannelMembers } from './members';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,aAAa,EACb,oBAAoB,EACpB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { ExternalConversation, SlackThreadGroup } from '../types/wire';
2
+ /**
3
+ * Polling cadence for the linked-conversation refetch. Currently a
4
+ * stopgap until VS's websocket setup lands ([[plan-slack-m1-phase-X]]
5
+ * — Cross-repo dependency #10) — events don't push into the UI yet,
6
+ * so we pull on a timer to keep inbound Slack messages visible. The
7
+ * 5s default is chosen to be perceptually "live" without hammering
8
+ * the backend; set this constant (or override via `refetchIntervalMs`
9
+ * arg to `useLinkedConversation`) when ws ships and we want to drop
10
+ * the timer.
11
+ */
12
+ export declare const LINKED_CONV_POLL_INTERVAL_MS = 5000;
13
+ /**
14
+ * Reads the linked Slack thread for a Hiver conversation, if any.
15
+ * Returns `null` on 404 (no link yet) and surfaces other errors
16
+ * normally so the panel can render the left-channel / 502 states.
17
+ *
18
+ * Used by SlackEmptyState (UI-1) to branch between the "Start" CTAs
19
+ * and the LinkedConversationPanel (UI-5). Polls every
20
+ * LINKED_CONV_POLL_INTERVAL_MS while the tab is mounted so inbound
21
+ * Slack messages surface without a websocket — react-query pauses
22
+ * the timer automatically when the tab is in the background, so
23
+ * idle conversations don't burn requests.
24
+ */
25
+ export declare function useLinkedConversation(hiverConvId: string, enabled?: boolean, refetchIntervalMs?: number): import('@tanstack/react-query').UseQueryResult<ExternalConversation | null, Error>;
26
+ /**
27
+ * Channel mode (B4): lazily fetch a single thread's messages (root +
28
+ * replies) when the user drills into it from the channel list. Enabled
29
+ * only while a thread is open, so the channel list view never pays for
30
+ * replies. Polls on the same cadence so live replies surface.
31
+ */
32
+ export declare function useThread(hiverConvId: string, threadTs: string | null): import('@tanstack/react-query').UseQueryResult<SlackThreadGroup, Error>;
33
+ //# sourceMappingURL=linked-conv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linked-conv.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/linked-conv.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE1F;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,UAAO,EACd,iBAAiB,GAAE,MAAqC,sFAoBzD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,2EASrE"}
@@ -0,0 +1,10 @@
1
+ import { ChannelMember } from '../types/wire';
2
+ export declare const getChannelMembers: (hiverConvId: string) => Promise<ChannelMember[]>;
3
+ /**
4
+ * Cached channel-members query. Used by the linked-conv panel to
5
+ * resolve `<@USER_ID>` mention tokens to display names, and by the
6
+ * composer's @-mention picker — same queryKey → one shared fetch.
7
+ * Names are stable, so a long staleTime avoids refetch churn.
8
+ */
9
+ export declare function useChannelMembers(hiverConvId: string, enabled?: boolean): import('@tanstack/react-query').UseQueryResult<ChannelMember[], Error>;
10
+ //# sourceMappingURL=members.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/members.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,eAAO,MAAM,iBAAiB,gBAAuB,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CASpF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,UAAO,0EAQpE"}
@@ -0,0 +1,10 @@
1
+ import { PostMessageRequest, SlackMessage } from '../types/wire';
2
+ export declare const postMessage: (payload: PostMessageRequest) => Promise<SlackMessage>;
3
+ /**
4
+ * Delete a message the signed-in agent authored. Backend runs chat.delete
5
+ * on the agent's own user token and drops it from the Redis cache, then
6
+ * returns 204. `hiver_conv_id` resolves the linked channel/thread the
7
+ * message lives in.
8
+ */
9
+ export declare const deleteMessage: (externalMessageId: string, hiverConvId: string) => Promise<void>;
10
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/messages.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAqBpF,eAAO,MAAM,WAAW,YAAmB,kBAAkB,KAAG,OAAO,CAAC,YAAY,CAOnF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,sBAA6B,MAAM,eAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAWhG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { SlackMessage } from '../types/wire';
2
+ export declare const normaliseSlackMessage: (msg: SlackMessage) => SlackMessage;
3
+ //# sourceMappingURL=normalise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalise.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/normalise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA6C,MAAM,6BAA6B,CAAC;AAyB3G,eAAO,MAAM,qBAAqB,QAAS,YAAY,KAAG,YAGxD,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { FC } from 'react';
2
+ /**
3
+ * Two-letter initials from a display name, falling back to an id (and finally
4
+ * '?') so the avatar never renders blank when the BE hasn't enriched a name.
5
+ */
6
+ export declare const initialsFor: (name?: string | null, fallback?: string | null) => string;
7
+ /**
8
+ * Renders a member's avatar with a layered fallback so it is *always* visible:
9
+ * cached blob (no CDN hit) → raw <img> if bytes can't be fetched → initials
10
+ *
11
+ * Renders inner content only (an <img> or the initials text), so it slots into
12
+ * whatever avatar container the call site provides (`AvatarCircle`, the
13
+ * mention-picker circle, etc.).
14
+ */
15
+ export declare const SlackAvatar: FC<{
16
+ url?: string | null;
17
+ name?: string | null;
18
+ fallbackId?: string | null;
19
+ }>;
20
+ //# sourceMappingURL=SlackAvatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlackAvatar.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/avatar/SlackAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,EAAE,EAAuB,MAAM,OAAO,CAAC;AAU/D;;;GAGG;AAIH,eAAO,MAAM,WAAW,UAAW,MAAM,GAAG,IAAI,aAAa,MAAM,GAAG,IAAI,KAAG,MAQ5E,CAAC;AA2CF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAWA,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** Synchronous peek — lets a component render a cached avatar with no flash. */
2
+ export declare function peekAvatar(key: string): string | null;
3
+ /**
4
+ * Resolve an avatar URL to a locally-served object URL, fetching + caching on
5
+ * first sight and reusing the cached Blob forever after. Rejects if the bytes
6
+ * can't be fetched (CORS-blocked, or 429 past retries) — callers should fall
7
+ * back to a raw `<img>` in that case.
8
+ */
9
+ export declare function loadAvatar(url: string): Promise<string>;
10
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/avatar/cache.ts"],"names":[],"mappings":"AAkDA,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErD;AA0DD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBvD"}
@@ -0,0 +1,2 @@
1
+ export { SlackAvatar, initialsFor } from './SlackAvatar';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { FC } from 'react';
2
+ /**
3
+ * Hero illustration for the Slack tab's empty/ready state — the
4
+ * designer-exported composition showing Hiver ⇄ Slack with the
5
+ * three M1/M2 capability chips baked in (Create channel / Link
6
+ * thread / Read messages). Since the chips are part of the asset,
7
+ * the surrounding tab content no longer renders a separate chip
8
+ * row — just the body copy and the "Start New" CTA below.
9
+ *
10
+ * The lavender panel and inner card are part of the SVG; we don't
11
+ * need to wrap it in any tinted container.
12
+ */
13
+ export declare const HeroIllustration: FC<{
14
+ width?: number;
15
+ }>;
16
+ //# sourceMappingURL=HeroIllustration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeroIllustration.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/components/HeroIllustration.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQnD,CAAC"}
@@ -0,0 +1,25 @@
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
+ }
17
+ /**
18
+ * B4 channel LIST item — a single top-level message (thread root).
19
+ * Replies are NOT rendered here (lazy); instead, a "Replies (n)" link
20
+ * drills into the thread detail view, as does the hover "Reply" action.
21
+ * Per Figma 683:661492.
22
+ */
23
+ export declare const ChannelThreadGroup: FC<ChannelThreadGroupProps>;
24
+ export {};
25
+ //# 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;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CA2C1D,CAAC"}
@@ -0,0 +1,45 @@
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
+ }
21
+ /**
22
+ * Composer per Figma 683:667012. Plain textarea + emoji /
23
+ * attachment slots (UI-7 + UI-8 stubs) + Send button.
24
+ *
25
+ * UI-10 layered on top:
26
+ * - Typing `@` opens the MentionPicker, anchored to a hidden
27
+ * div positioned at the cursor's location (approximate — we
28
+ * anchor to the textarea itself for M1; revisit if PD wants
29
+ * cursor-precise positioning).
30
+ * - As the user keeps typing, the substring between the `@` and
31
+ * the cursor filters the picker.
32
+ * - Picking a member replaces the in-flight `@xxx` with
33
+ * `@DisplayName ` in the textarea and remembers the
34
+ * externalUserId mapping. On send, every tracked
35
+ * `@DisplayName` literal gets swapped back to Slack's
36
+ * `<@externalUserId>` mention syntax server-side.
37
+ * - Esc closes the picker; Backspace before the `@` does too.
38
+ *
39
+ * Mention map is a flat array (not a Map) because the same name
40
+ * could be inserted twice — we replace the first matching span
41
+ * per occurrence at send time.
42
+ */
43
+ export declare const Composer: FC<ComposerProps>;
44
+ export {};
45
+ //# 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,EAAE,EAAE,EAAyD,MAAM,OAAO,CAAC;AA2BlF,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;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAoctC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { FC } from 'react';
2
+ interface LeftChannelBannerProps {
3
+ /** Slack workspace id (team_id). Used for the deep-link app
4
+ * scheme + web fallback URL. When undefined we omit the
5
+ * CTA — the user can rejoin in their browser separately. */
6
+ externalTeamId?: string;
7
+ externalChannelId: string;
8
+ }
9
+ /**
10
+ * UI-16 — empty-state banner that replaces the composer when an
11
+ * agent action returned 502 / not_in_channel. The plan memory
12
+ * (plan-slack-m1-left-channel-ux) calls for:
13
+ *
14
+ * - Neutral info banner copy
15
+ * - "Open in Slack" CTA using slack://channel?team=…&id=… with
16
+ * a https://app.slack.com/client/… web fallback
17
+ * - Keep cached messages visible (the parent already handles
18
+ * this by only swapping the composer surface)
19
+ * - State auto-clears on the next successful agent action —
20
+ * handled in the parent's wrapper hook.
21
+ *
22
+ * No Figma frame yet — using the M1 defaults from the plan.
23
+ */
24
+ export declare const LeftChannelBanner: FC<LeftChannelBannerProps>;
25
+ export {};
26
+ //# sourceMappingURL=LeftChannelBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeftChannelBanner.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/LeftChannelBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,UAAU,sBAAsB;IAC9B;;iEAE6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAiFxD,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,23 @@
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
+ onPick: (member: ChannelMember) => void;
8
+ onClose: () => void;
9
+ }
10
+ /**
11
+ * UI-10 — @ mention picker per Figma 683:670087. Shows above the
12
+ * composer with a scrollable list of channel members. Each row =
13
+ * 24px avatar + display name (Inter Medium 13/19 slate-body).
14
+ * Filtered by the `query` substring after the `@` keystroke.
15
+ *
16
+ * Keyboard handling lives in the parent Composer (so the textarea
17
+ * keeps focus while the popover navigates); this component only
18
+ * renders the list + handles row clicks. ArrowUp/Down + Enter are
19
+ * translated by the parent into onPick calls.
20
+ */
21
+ export declare const MentionPicker: FC<MentionPickerProps>;
22
+ export {};
23
+ //# 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,EAAuB,MAAM,OAAO,CAAC;AAKhD,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,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAoEhD,CAAC"}
@@ -0,0 +1,27 @@
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
+ }
16
+ /**
17
+ * Single Chat-UI row per Figma 683:666933 / 666934.
18
+ * Layout: 30×30 rounded-100 avatar + 8px gap + body column.
19
+ * Body column gap 4px, header row 12px gap items-baseline.
20
+ *
21
+ * The BE still emits editedAt/deletedAt for messages edited or
22
+ * deleted natively in Slack, so we render the `(edited)` badge and
23
+ * the "This message was deleted." tombstone for inbound display.
24
+ */
25
+ export declare const MessageItem: FC<MessageItemProps>;
26
+ export {};
27
+ //# 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,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAC;AAQzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAYhE,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;CACpB;AA+ID;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA2I5C,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,19 @@
1
+ import { FC } from 'react';
2
+ interface ThreadDetailViewProps {
3
+ /** Root ts of the thread being viewed. */
4
+ threadTs: string;
5
+ channelId: string;
6
+ memberNames?: Map<string, string>;
7
+ hasLeftChannel: boolean;
8
+ guard?: <T>(fn: () => Promise<T>) => Promise<T>;
9
+ onBack: () => void;
10
+ }
11
+ /**
12
+ * B4 channel thread-detail (Figma 683:669379) — drilled in from the
13
+ * channel list. Lazily fetches the thread's messages (root + replies),
14
+ * shows a "‹ back" affordance, and a composer that replies INTO this
15
+ * thread. Replies are only fetched here, never in the list view.
16
+ */
17
+ export declare const ThreadDetailView: FC<ThreadDetailViewProps>;
18
+ export {};
19
+ //# 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,EAAyC,MAAM,OAAO,CAAC;AA8ElE,UAAU,qBAAqB;IAC7B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,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;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAwHtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ export declare const ThreadSkeleton: FC;
3
+ //# sourceMappingURL=ThreadSkeleton.d.ts.map
@@ -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,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;AAsBvF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,uBAAuB,EAAE,EAiRrC,CAAC"}