@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.
Files changed (151) hide show
  1. package/README.md +9 -9
  2. package/app/hig-slack/HigSlackConnectModalIsland.d.ts +19 -0
  3. package/app/hig-slack/HigSlackConnectModalIsland.d.ts.map +1 -0
  4. package/app/hig-slack/HigSlackSection.d.ts +15 -0
  5. package/app/hig-slack/HigSlackSection.d.ts.map +1 -0
  6. package/app/hig-slack/index.d.ts +15 -0
  7. package/app/hig-slack/index.d.ts.map +1 -0
  8. package/app/hig-slack/provider.d.ts +21 -0
  9. package/app/hig-slack/provider.d.ts.map +1 -0
  10. package/app/hig-slack/style.d.ts +38 -0
  11. package/app/hig-slack/style.d.ts.map +1 -0
  12. package/app/omni-slack/SlackConnectModalIsland.d.ts +26 -0
  13. package/app/omni-slack/SlackConnectModalIsland.d.ts.map +1 -0
  14. package/app/omni-slack/index.d.ts +14 -0
  15. package/app/omni-slack/index.d.ts.map +1 -0
  16. package/app/omni-slack/provider.d.ts +15 -0
  17. package/app/omni-slack/provider.d.ts.map +1 -0
  18. package/constants/tracking-events.d.ts +8 -0
  19. package/constants/tracking-events.d.ts.map +1 -1
  20. package/features/email-logger/omni/components/LogEmailPill.d.ts.map +1 -1
  21. package/features/email-logger/omni/components/LogEmailPill.test.d.ts +2 -0
  22. package/features/email-logger/omni/components/LogEmailPill.test.d.ts.map +1 -0
  23. package/features/slack/api/channels.d.ts +11 -0
  24. package/features/slack/api/channels.d.ts.map +1 -0
  25. package/features/slack/api/conversations.d.ts +41 -0
  26. package/features/slack/api/conversations.d.ts.map +1 -0
  27. package/features/slack/api/effective-config.d.ts +21 -0
  28. package/features/slack/api/effective-config.d.ts.map +1 -0
  29. package/features/slack/api/index.d.ts +4 -0
  30. package/features/slack/api/index.d.ts.map +1 -0
  31. package/features/slack/api/linked-conv.d.ts +33 -0
  32. package/features/slack/api/linked-conv.d.ts.map +1 -0
  33. package/features/slack/api/members.d.ts +10 -0
  34. package/features/slack/api/members.d.ts.map +1 -0
  35. package/features/slack/api/messages.d.ts +10 -0
  36. package/features/slack/api/messages.d.ts.map +1 -0
  37. package/features/slack/api/normalise.d.ts +3 -0
  38. package/features/slack/api/normalise.d.ts.map +1 -0
  39. package/features/slack/api/users.d.ts +11 -0
  40. package/features/slack/api/users.d.ts.map +1 -0
  41. package/features/slack/avatar/SlackAvatar.d.ts +20 -0
  42. package/features/slack/avatar/SlackAvatar.d.ts.map +1 -0
  43. package/features/slack/avatar/cache.d.ts +10 -0
  44. package/features/slack/avatar/cache.d.ts.map +1 -0
  45. package/features/slack/avatar/index.d.ts +2 -0
  46. package/features/slack/avatar/index.d.ts.map +1 -0
  47. package/features/slack/components/AnimatedDots.d.ts +2 -0
  48. package/features/slack/components/AnimatedDots.d.ts.map +1 -0
  49. package/features/slack/components/HeroIllustration.d.ts +14 -0
  50. package/features/slack/components/HeroIllustration.d.ts.map +1 -0
  51. package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts +21 -0
  52. package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts.map +1 -0
  53. package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts +28 -0
  54. package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts.map +1 -0
  55. package/features/slack/components/LinkedConversationPanel/Composer.d.ts +50 -0
  56. package/features/slack/components/LinkedConversationPanel/Composer.d.ts.map +1 -0
  57. package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts +24 -0
  58. package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts.map +1 -0
  59. package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts +16 -0
  60. package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts.map +1 -0
  61. package/features/slack/components/LinkedConversationPanel/LinkedChannelHeader.d.ts +21 -0
  62. package/features/slack/components/LinkedConversationPanel/LinkedChannelHeader.d.ts.map +1 -0
  63. package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts +16 -0
  64. package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts.map +1 -0
  65. package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts +27 -0
  66. package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts.map +1 -0
  67. package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts +31 -0
  68. package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts.map +1 -0
  69. package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts +5 -0
  70. package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts.map +1 -0
  71. package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts +15 -0
  72. package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts.map +1 -0
  73. package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts +22 -0
  74. package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts.map +1 -0
  75. package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts +3 -0
  76. package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts.map +1 -0
  77. package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts +2 -0
  78. package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts.map +1 -0
  79. package/features/slack/components/LinkedConversationPanel/index.d.ts +27 -0
  80. package/features/slack/components/LinkedConversationPanel/index.d.ts.map +1 -0
  81. package/features/slack/components/LinkedConversationPanel/style.d.ts +147 -0
  82. package/features/slack/components/LinkedConversationPanel/style.d.ts.map +1 -0
  83. package/features/slack/components/SlackConnectModal.d.ts +29 -0
  84. package/features/slack/components/SlackConnectModal.d.ts.map +1 -0
  85. package/features/slack/components/SlackConversationTab.d.ts +10 -0
  86. package/features/slack/components/SlackConversationTab.d.ts.map +1 -0
  87. package/features/slack/components/SlackLogo.d.ts +11 -0
  88. package/features/slack/components/SlackLogo.d.ts.map +1 -0
  89. package/features/slack/components/StartModal/MemberSelect.d.ts +9 -0
  90. package/features/slack/components/StartModal/MemberSelect.d.ts.map +1 -0
  91. package/features/slack/components/StartModal/MentionTextarea.d.ts +28 -0
  92. package/features/slack/components/StartModal/MentionTextarea.d.ts.map +1 -0
  93. package/features/slack/components/StartModal/SelectField.d.ts +19 -0
  94. package/features/slack/components/StartModal/SelectField.d.ts.map +1 -0
  95. package/features/slack/components/StartModal/SlackChannelTab.d.ts +23 -0
  96. package/features/slack/components/StartModal/SlackChannelTab.d.ts.map +1 -0
  97. package/features/slack/components/StartModal/SlackThreadTab.d.ts +26 -0
  98. package/features/slack/components/StartModal/SlackThreadTab.d.ts.map +1 -0
  99. package/features/slack/components/StartModal/TabIcon.d.ts +16 -0
  100. package/features/slack/components/StartModal/TabIcon.d.ts.map +1 -0
  101. package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts +2 -0
  102. package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts.map +1 -0
  103. package/features/slack/components/StartModal/dropdownOmni.d.ts +121 -0
  104. package/features/slack/components/StartModal/dropdownOmni.d.ts.map +1 -0
  105. package/features/slack/components/StartModal/index.d.ts +27 -0
  106. package/features/slack/components/StartModal/index.d.ts.map +1 -0
  107. package/features/slack/components/StartModal/style.d.ts +39 -0
  108. package/features/slack/components/StartModal/style.d.ts.map +1 -0
  109. package/features/slack/components/figma-tokens.d.ts +94 -0
  110. package/features/slack/components/figma-tokens.d.ts.map +1 -0
  111. package/features/slack/components/style.d.ts +54 -0
  112. package/features/slack/components/style.d.ts.map +1 -0
  113. package/features/slack/constants/api.d.ts +13 -0
  114. package/features/slack/constants/api.d.ts.map +1 -0
  115. package/features/slack/context.d.ts +99 -0
  116. package/features/slack/context.d.ts.map +1 -0
  117. package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts +2 -0
  118. package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts.map +1 -0
  119. package/features/slack/hooks/useLeftChannelGuard.d.ts +5 -0
  120. package/features/slack/hooks/useLeftChannelGuard.d.ts.map +1 -0
  121. package/features/slack/hooks/useOlderMessages.d.ts +51 -0
  122. package/features/slack/hooks/useOlderMessages.d.ts.map +1 -0
  123. package/features/slack/hooks/useSlackTabLabel.d.ts +23 -0
  124. package/features/slack/hooks/useSlackTabLabel.d.ts.map +1 -0
  125. package/features/slack/messageType.d.ts +16 -0
  126. package/features/slack/messageType.d.ts.map +1 -0
  127. package/features/slack/types/wire.d.ts +205 -0
  128. package/features/slack/types/wire.d.ts.map +1 -0
  129. package/features/slack/utils/emoji.d.ts +7 -0
  130. package/features/slack/utils/emoji.d.ts.map +1 -0
  131. package/features/slack/utils/format-timestamp.d.ts +3 -0
  132. package/features/slack/utils/format-timestamp.d.ts.map +1 -0
  133. package/features/slack/utils/mentions.d.ts +18 -0
  134. package/features/slack/utils/mentions.d.ts.map +1 -0
  135. package/features/slack/utils/render-mentions.d.ts +15 -0
  136. package/features/slack/utils/render-mentions.d.ts.map +1 -0
  137. package/features/slack/utils/slack-links.d.ts +23 -0
  138. package/features/slack/utils/slack-links.d.ts.map +1 -0
  139. package/features/slack/utils/text.d.ts +7 -0
  140. package/features/slack/utils/text.d.ts.map +1 -0
  141. package/features/toast-message/ToastRoot.d.ts.map +1 -1
  142. package/index.d.ts +11 -0
  143. package/index.d.ts.map +1 -1
  144. package/index.es.js +20208 -13642
  145. package/index.umd.js +1226 -427
  146. package/main-dev.d.ts.map +1 -1
  147. package/package.json +1 -1
  148. package/testing/mocks/handlers/fetch-cards.d.ts +2 -2
  149. package/testing/mocks/handlers/slack.d.ts +36 -0
  150. package/testing/mocks/handlers/slack.d.ts.map +1 -0
  151. package/testing/mocks/handlers.d.ts.map +1 -1
package/README.md CHANGED
@@ -19,10 +19,10 @@ export default tseslint.config({
19
19
  // other options...
20
20
  parserOptions: {
21
21
  project: ['./tsconfig.node.json', './tsconfig.app.json'],
22
- tsconfigRootDir: import.meta.dirname,
23
- },
24
- },
25
- })
22
+ tsconfigRootDir: import.meta.dirname
23
+ }
24
+ }
25
+ });
26
26
  ```
27
27
 
28
28
  - Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked`
@@ -31,20 +31,20 @@ export default tseslint.config({
31
31
 
32
32
  ```js
33
33
  // eslint.config.js
34
- import react from 'eslint-plugin-react'
34
+ import react from 'eslint-plugin-react';
35
35
 
36
36
  export default tseslint.config({
37
37
  // Set the react version
38
38
  settings: { react: { version: '18.3' } },
39
39
  plugins: {
40
40
  // Add the react plugin
41
- react,
41
+ react
42
42
  },
43
43
  rules: {
44
44
  // other rules...
45
45
  // Enable its recommended rules
46
46
  ...react.configs.recommended.rules,
47
- ...react.configs['jsx-runtime'].rules,
48
- },
49
- })
47
+ ...react.configs['jsx-runtime'].rules
48
+ }
49
+ });
50
50
  ```
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Connect-modal island for the HIG (Gmail extension) host.
3
+ *
4
+ * M-HIG-1 §5.4 — reuse vs wrap: the existing SlackConnectModalIsland is
5
+ * already host-agnostic (provider stack = Redux + HiverProvider +
6
+ * ReactQueryClientProvider; props connectorId/open/onClose/onConnected?/
7
+ * sendTrackingEvent?; owns OAuth via useUserAuthFlow and portals to
8
+ * document.body). M-HIG-1 ships the same provider stack as omni (the
9
+ * Gmail-DOM style-isolation tuning is deferred — §6 Cross-cutting C), so
10
+ * no HIG-specific provider variant is needed yet.
11
+ *
12
+ * We therefore re-export it under a HIG-named symbol so the extension's
13
+ * import surface stays consistent (`HigSlackConnectModalIsland`). If a
14
+ * Gmail-DOM provider tweak is later required, swap this re-export for a
15
+ * thin wrapper that mounts the omni island inside the HIG provider bits —
16
+ * the export name and props stay stable for consumers.
17
+ */
18
+ export { SlackConnectModalIsland as HigSlackConnectModalIsland, type SlackConnectModalIslandProps as HigSlackConnectModalIslandProps } from '../omni-slack/SlackConnectModalIsland';
19
+ //# sourceMappingURL=HigSlackConnectModalIsland.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HigSlackConnectModalIsland.d.ts","sourceRoot":"","sources":["../../../src/app/hig-slack/HigSlackConnectModalIsland.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,uBAAuB,IAAI,0BAA0B,EACrD,KAAK,4BAA4B,IAAI,+BAA+B,EACrE,MAAM,0CAA0C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { FC } from 'react';
2
+ import { SlackContextData } from '../../features/slack/context';
3
+ export type HigSlackSectionProps = SlackContextData & {
4
+ /** Host hook (M-HIG-2) for the linked-state "View all" link — wired to
5
+ * activating the Slack tab. The section itself stays panel-free. */
6
+ onViewAll?: () => void;
7
+ };
8
+ /**
9
+ * Public surface. Self-wraps in HigSlackProvider (mirroring HigSlackTab) so the
10
+ * host mounts it symmetrically with the same SlackContextData object — keeping
11
+ * the section and tab on the same shared query cache when both are mounted
12
+ * under one provider tree (§0 Addendum / M-HIG-2 §5.0.1).
13
+ */
14
+ export declare const HigSlackSection: FC<HigSlackSectionProps>;
15
+ //# sourceMappingURL=HigSlackSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HigSlackSection.d.ts","sourceRoot":"","sources":["../../../src/app/hig-slack/HigSlackSection.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAkC,MAAM,OAAO,CAAC;AAQ3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAiCjE,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD;yEACqE;IACrE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAiNF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAIpD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { FC } from 'react';
2
+ import { SlackContextData } from '../../features/slack/context';
3
+ export type HigSlackTabProps = SlackContextData;
4
+ /**
5
+ * Top-level mount point the Gmail (HIG) extension consumes for the Slack
6
+ * tab inside the right-rail conversation tab system. Equivalent to
7
+ * OmniSlackTab — the host owns the tab bar / labels; we render only the
8
+ * active-tab content + the portal-mounted connect modal.
9
+ *
10
+ * Reuses SlackConversationTab unchanged — it is the state machine
11
+ * (gated → disconnected/reauth/mismatch → linked → ready) and already
12
+ * drives SlackConnectModal + StartModal internally.
13
+ */
14
+ export declare const HigSlackTab: FC<HigSlackTabProps>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/hig-slack/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEhD;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAyB5C,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { SlackContextData } from '../../features/slack/context';
3
+ interface HigSlackProviderProps extends SlackContextData {
4
+ children: ReactNode;
5
+ }
6
+ /**
7
+ * Provider stack for the HIG (Gmail extension) Slack surfaces. Mirrors
8
+ * OmniSlackProvider exactly — Redux + theme + react-query + feature
9
+ * context, in that order — so HigSlackTab and HigSlackSection mount under
10
+ * ONE shared ReactQueryClientProvider and observe the same query cache
11
+ * (effective-config + linked-conv). That shared cache is what keeps the
12
+ * two surfaces in sync with zero prop threading.
13
+ *
14
+ * Gmail-DOM tuning hook-point (M-HIG-1 §6, Cross-cutting C): this is the
15
+ * one place style-isolation / emotion-cache scoping would land. For
16
+ * M-HIG-1 we ship the same stack as omni and leave the audit as a
17
+ * follow-up — we don't add scoping the real Gmail DOM hasn't validated.
18
+ */
19
+ export declare const HigSlackProvider: FC<HigSlackProviderProps>;
20
+ export {};
21
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/app/hig-slack/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,UAAU,qBAAsB,SAAQ,gBAAgB;IACtD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAqBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAqBtD,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { BoxProps, StackProps, TypographyProps } from '@hiver/hiver-ui-kit';
2
+ import { StyledComponent } from '@emotion/styled';
3
+ /**
4
+ * HigSlackSection accordion shell (§0 Addendum). The section must look
5
+ * IDENTICAL to its sibling detail sections (Priority, Linked conversations):
6
+ * a borderless, divider-separated collapsible row — NOT a bordered card.
7
+ * The library owns the full shell here: a header (logo + "Slack" label +
8
+ * count badge + chevron) and a collapsible body. A divider on top separates
9
+ * it from the section above, matching the host's detail-panel rhythm.
10
+ */
11
+ export declare const AccordionRoot: StyledComponent<BoxProps>;
12
+ /** Clickable header row — logo + "Slack" + count badge on the left, chevron
13
+ * on the right. Toggles the body's collapse. */
14
+ export declare const AccordionHeader: StyledComponent<BoxProps>;
15
+ export declare const HeaderLeft: StyledComponent<BoxProps>;
16
+ export declare const HeaderLabel: StyledComponent<TypographyProps>;
17
+ /** Count badge next to "Slack" when linked — e.g. "2". */
18
+ export declare const CountBadge: StyledComponent<BoxProps>;
19
+ /** Body wrapper — collapses to nothing when the header is toggled shut. */
20
+ export declare const AccordionBody: StyledComponent<StackProps>;
21
+ /** Invitational body copy shared by the connect / start-new states. */
22
+ export declare const SectionBody: StyledComponent<TypographyProps>;
23
+ /** "Channel: #<name>" label/value row in the linked state. */
24
+ export declare const ChannelRow: StyledComponent<BoxProps>;
25
+ export declare const ChannelLabel: StyledComponent<TypographyProps>;
26
+ export declare const ChannelValue: StyledComponent<TypographyProps>;
27
+ /** Last-message preview card — avatar + author + timestamp + body. A compact
28
+ * echo of a MessageItem row; the FULL panel is deferred to HigSlackTab. */
29
+ export declare const PreviewCard: StyledComponent<BoxProps>;
30
+ export declare const PreviewAvatar: StyledComponent<BoxProps>;
31
+ export declare const PreviewBody: StyledComponent<StackProps>;
32
+ export declare const PreviewHeaderRow: StyledComponent<BoxProps>;
33
+ export declare const PreviewAuthor: StyledComponent<TypographyProps>;
34
+ export declare const PreviewTime: StyledComponent<TypographyProps>;
35
+ export declare const PreviewText: StyledComponent<TypographyProps>;
36
+ /** "View all" inline link — opens the Slack tab via onViewAll. */
37
+ export declare const ViewAllLink: StyledComponent<TypographyProps>;
38
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../src/app/hig-slack/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,QAAQ,CAKnD,CAAC;AAEF;iDACiD;AACjD,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,QAAQ,CAarD,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,QAAQ,CAKhD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,eAAe,CAMxD,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,QAAQ,CAehD,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,UAAU,CAGrD,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,eAAe,CAKxD,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,QAAQ,CAKhD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,eAAe,CAMzD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAAe,CAAC,eAAe,CASzD,CAAC;AAEF;4EAC4E;AAC5E,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,QAAQ,CAUjD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,QAAQ,CAoBnD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,UAAU,CAGnD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,QAAQ,CAKtD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,eAAe,CAS1D,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,eAAe,CAMxD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,eAAe,CASxD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,WAAW,EAAE,eAAe,CAAC,eAAe,CAWxD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { FC } from 'react';
2
+ import { ITrackingData } from '../../context';
3
+ export interface SlackConnectModalIslandProps {
4
+ connectorId: string;
5
+ open: boolean;
6
+ onClose: () => void;
7
+ /** Fired once when user-auth completes. The Vue host re-polls
8
+ * user-auth status and swaps the pre-auth button for the tab. */
9
+ onConnected?: () => void;
10
+ /** Gainsight sink injected by the host. This mount path has no
11
+ * SlackContextProvider, so tracking is a direct prop. */
12
+ sendTrackingEvent?: (event: string, data?: ITrackingData) => void;
13
+ }
14
+ /**
15
+ * Standalone mount point for the Slack connect modal, for hosts
16
+ * (outlook-ui) that render the conversation-thread tab bar themselves
17
+ * and need to trigger the connect/user-auth flow from a host button —
18
+ * WITHOUT mounting the full OmniSlackTab.
19
+ *
20
+ * Wraps only the providers useUserAuthFlow needs (Redux + theme +
21
+ * react-query); no SlackContext, since the modal takes connectorId as
22
+ * a prop. The modal itself portals to document.body, so this island's
23
+ * own DOM node stays empty.
24
+ */
25
+ export declare const SlackConnectModalIsland: FC<SlackConnectModalIslandProps>;
26
+ //# sourceMappingURL=SlackConnectModalIsland.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlackConnectModalIsland.d.ts","sourceRoot":"","sources":["../../../src/app/omni-slack/SlackConnectModalIsland.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAK/C,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;sEACkE;IAClE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;8DAC0D;IAC1D,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CACnE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CA+BpE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { FC } from 'react';
2
+ import { SlackContextData } from '../../features/slack/context';
3
+ export type OmniSlackTabProps = SlackContextData;
4
+ /**
5
+ * Top-level mount point outlook-ui consumes for the Slack tab
6
+ * inside the conversation thread area (sibling to "Conversation").
7
+ *
8
+ * Outlook-ui places this component inside its own tab system —
9
+ * NOT alongside <OmniEmailLogger> in the right-panel area. The
10
+ * tab bar / tab labels are host-owned; we only render the active-
11
+ * tab content + the portal-mounted connect modal.
12
+ */
13
+ export declare const OmniSlackTab: FC<OmniSlackTabProps>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/omni-slack/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAEjD;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAuB9C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { SlackContextData } from '../../features/slack/context';
3
+ interface OmniSlackProviderProps extends SlackContextData {
4
+ children: ReactNode;
5
+ }
6
+ /**
7
+ * Provider stack for the Slack right-panel. Mirrors LoggerAppProvider
8
+ * (apps/agent/src/app/email-logger/provider.tsx) — Redux + theme +
9
+ * react-query + feature context, in that order. Slack feature reads
10
+ * `hiverConvId` + `connectorId` from SlackContextProvider via
11
+ * useSlackContext().
12
+ */
13
+ export declare const OmniSlackProvider: FC<OmniSlackProviderProps>;
14
+ export {};
15
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/app/omni-slack/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,UAAU,sBAAuB,SAAQ,gBAAgB;IACvD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAqBD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAcxD,CAAC"}
@@ -48,4 +48,12 @@ export declare const LOOKUP_FIELD_CLICKED = "clicked_on_lookup_field";
48
48
  export declare const LOOKUP_SAVED = "saved_lookup_config";
49
49
  export declare const FIELD_MAP_BUTTON_CLICKED = "settings_defaults_modal_opened";
50
50
  export declare const FIELD_MAP_CONFIG_SAVED = "defaults_configuration_saved";
51
+ export declare const SLACK_CONNECT_INITIATED = "slack_connect_initiated";
52
+ export declare const SLACK_CONNECT_SUCCESS = "slack_connect_success";
53
+ export declare const SLACK_START_CLICKED = "slack_start_clicked";
54
+ export declare const SLACK_START_SUBOPTION_SELECTED = "slack_start_suboption_selected";
55
+ export declare const SLACK_EXISTING_CHANNEL_LINKED = "slack_existing_channel_linked";
56
+ export declare const SLACK_NEW_CHANNEL_LINKED = "slack_new_channel_linked";
57
+ export declare const SLACK_REPLY_SENT = "slack_reply_sent";
58
+ export declare const SLACK_OLDER_MESSAGES_LOADED = "slack_older_messages_loaded";
51
59
  //# sourceMappingURL=tracking-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracking-events.d.ts","sourceRoot":"","sources":["../../src/constants/tracking-events.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AACrE,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,6BAA6B,kCAAkC,CAAC;AAC7E,eAAO,MAAM,gCAAgC,qCAAqC,CAAC;AACnF,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAC/E,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,qBAAqB,oCAAoC,CAAC;AACvE,eAAO,MAAM,6BAA6B,4CAA4C,CAAC;AACvF,eAAO,MAAM,4BAA4B,2CAA2C,CAAC;AACrF,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AACxE,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAC/E,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,eAAO,MAAM,0BAA0B,yCAAyC,CAAC;AACjF,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAC/E,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AACrE,eAAO,MAAM,2BAA2B,0CAA0C,CAAC;AACnF,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAC/E,eAAO,MAAM,mCAAmC,yBAAyB,CAAC;AAC1E,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AACjE,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AACvE,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AACrD,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AACjE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAC/E,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,qBAAqB,6BAA6B,CAAC;AAChE,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,YAAY,wBAAwB,CAAC;AAClD,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AACzE,eAAO,MAAM,sBAAsB,iCAAiC,CAAC"}
1
+ {"version":3,"file":"tracking-events.d.ts","sourceRoot":"","sources":["../../src/constants/tracking-events.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LogEmailPill.d.ts","sourceRoot":"","sources":["../../../../../src/features/email-logger/omni/components/LogEmailPill.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAkGF,eAAO,MAAM,YAAY,sEAOtB,iBAAiB,4CA+BnB,CAAC"}
1
+ {"version":3,"file":"LogEmailPill.d.ts","sourceRoot":"","sources":["../../../../../src/features/email-logger/omni/components/LogEmailPill.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AA4GF,eAAO,MAAM,YAAY,sEAOtB,iBAAiB,4CA+BnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LogEmailPill.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogEmailPill.test.d.ts","sourceRoot":"","sources":["../../../../../src/features/email-logger/omni/components/LogEmailPill.test.tsx"],"names":[],"mappings":""}
@@ -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 | null>;
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;AAgED,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,GAAG,IAAI,CA0BrC,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
+ * 2s 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 = 2000;
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, channelId?: 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,iBAAwB,MAAM,cAAc,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAgBzG,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,11 @@
1
+ import { SlackUser } from '../types/wire';
2
+ export declare const getWorkspaceUsers: () => Promise<SlackUser[]>;
3
+ /**
4
+ * Cached workspace-users query — seeds the create-channel member picker (UI-4).
5
+ * The whole roster loads once and the picker filters client-side (names/emails
6
+ * are stable, so a long staleTime avoids refetch churn on reopen). If the
7
+ * workspace grows large enough that fetching the full list hurts, swap to a
8
+ * server-side `?query=` search behind the same hook.
9
+ */
10
+ export declare function useWorkspaceUsers(enabled?: boolean): import('@tanstack/react-query').UseQueryResult<SlackUser[], Error>;
11
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/users.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,SAAS,EAAE,CAM7D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,UAAO,sEAQ/C"}
@@ -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,2 @@
1
+ export declare const AnimatedDots: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AnimatedDots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedDots.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/components/AnimatedDots.tsx"],"names":[],"mappings":"AAgDA,eAAO,MAAM,YAAY,+CAMxB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { FC } from 'react';
2
+ /**
3
+ * Hero illustration for the Slack tab's empty/ready state — the
4
+ * designer-exported Hiver ⇄ Slack composition (isometric app cards
5
+ * joined by a cord, with floating cubes). Figma frame 1163:185445
6
+ * ("Frame 1618872655") in the Internal-Collaboration Slack file.
7
+ *
8
+ * Rendered at its natural ~260px width and centered in the ready-
9
+ * state card, with the body copy and "Start New" CTA below.
10
+ */
11
+ export declare const HeroIllustration: FC<{
12
+ width?: number;
13
+ }>;
14
+ //# 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;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQnD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { FC } from 'react';
2
+ /**
3
+ * Centered empty-state shown in the message area (replacing history) when the
4
+ * linked Slack channel can't be read by this viewer. Two variants, per Figma
5
+ * frames 1046:18769 (delink badge) and 1052:174648 (lock badge):
6
+ *
7
+ * - 'channel_unavailable' → channel archived/deleted; "no longer available"
8
+ * - 'no_access' → private channel the viewer isn't in
9
+ *
10
+ * The "channel card" illustration mirrors the Figma node structure 1:1 — exact
11
+ * gradients/shadows/positions from the design — and the red status badge is the
12
+ * EXACT vector exported from Figma (Frame 2147240252), not a re-draw. The
13
+ * composer still renders below (disabled), so this fills only the scrollable
14
+ * message region.
15
+ */
16
+ type ChannelStateVariant = 'channel_unavailable' | 'no_access';
17
+ export declare const ChannelStateView: FC<{
18
+ variant: ChannelStateVariant;
19
+ }>;
20
+ export {};
21
+ //# sourceMappingURL=ChannelStateView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelStateView.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/ChannelStateView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B;;;;;;;;;;;;;GAaG;AAEH,KAAK,mBAAmB,GAAG,qBAAqB,GAAG,WAAW,CAAC;AAoI/D,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,CAyBjE,CAAC"}