@hiver/connector-agent 4.16.0 → 4.17.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 (147) 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/constants/tracking-events.d.ts +8 -0
  10. package/constants/tracking-events.d.ts.map +1 -1
  11. package/features/connector-cards/components/card-list/card-content-value.d.ts.map +1 -1
  12. package/features/connector-cards/components/card-list/list-item-modal.d.ts.map +1 -1
  13. package/features/email-logger/omni/components/LogEmailPill.d.ts.map +1 -1
  14. package/features/email-logger/omni/components/LogEmailPill.test.d.ts +2 -0
  15. package/features/email-logger/omni/components/LogEmailPill.test.d.ts.map +1 -0
  16. package/features/slack/api/channels.d.ts +11 -0
  17. package/features/slack/api/channels.d.ts.map +1 -0
  18. package/features/slack/api/conversations.d.ts +41 -0
  19. package/features/slack/api/conversations.d.ts.map +1 -0
  20. package/features/slack/api/effective-config.d.ts +21 -0
  21. package/features/slack/api/effective-config.d.ts.map +1 -0
  22. package/features/slack/api/index.d.ts +4 -0
  23. package/features/slack/api/index.d.ts.map +1 -0
  24. package/features/slack/api/linked-conv.d.ts +33 -0
  25. package/features/slack/api/linked-conv.d.ts.map +1 -0
  26. package/features/slack/api/members.d.ts +10 -0
  27. package/features/slack/api/members.d.ts.map +1 -0
  28. package/features/slack/api/messages.d.ts +10 -0
  29. package/features/slack/api/messages.d.ts.map +1 -0
  30. package/features/slack/api/normalise.d.ts +3 -0
  31. package/features/slack/api/normalise.d.ts.map +1 -0
  32. package/features/slack/api/users.d.ts +11 -0
  33. package/features/slack/api/users.d.ts.map +1 -0
  34. package/features/slack/avatar/SlackAvatar.d.ts +20 -0
  35. package/features/slack/avatar/SlackAvatar.d.ts.map +1 -0
  36. package/features/slack/avatar/cache.d.ts +10 -0
  37. package/features/slack/avatar/cache.d.ts.map +1 -0
  38. package/features/slack/avatar/index.d.ts +2 -0
  39. package/features/slack/avatar/index.d.ts.map +1 -0
  40. package/features/slack/components/AnimatedDots.d.ts +2 -0
  41. package/features/slack/components/AnimatedDots.d.ts.map +1 -0
  42. package/features/slack/components/HeroIllustration.d.ts +14 -0
  43. package/features/slack/components/HeroIllustration.d.ts.map +1 -0
  44. package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts +21 -0
  45. package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts.map +1 -0
  46. package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts +28 -0
  47. package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts.map +1 -0
  48. package/features/slack/components/LinkedConversationPanel/Composer.d.ts +50 -0
  49. package/features/slack/components/LinkedConversationPanel/Composer.d.ts.map +1 -0
  50. package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts +24 -0
  51. package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts.map +1 -0
  52. package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts +16 -0
  53. package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts.map +1 -0
  54. package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts +16 -0
  55. package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts.map +1 -0
  56. package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts +27 -0
  57. package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts.map +1 -0
  58. package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts +31 -0
  59. package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts.map +1 -0
  60. package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts +5 -0
  61. package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts.map +1 -0
  62. package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts +15 -0
  63. package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts.map +1 -0
  64. package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts +18 -0
  65. package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts.map +1 -0
  66. package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts +3 -0
  67. package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts.map +1 -0
  68. package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts +2 -0
  69. package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts.map +1 -0
  70. package/features/slack/components/LinkedConversationPanel/index.d.ts +27 -0
  71. package/features/slack/components/LinkedConversationPanel/index.d.ts.map +1 -0
  72. package/features/slack/components/LinkedConversationPanel/style.d.ts +114 -0
  73. package/features/slack/components/LinkedConversationPanel/style.d.ts.map +1 -0
  74. package/features/slack/components/SlackConnectModal.d.ts +29 -0
  75. package/features/slack/components/SlackConnectModal.d.ts.map +1 -0
  76. package/features/slack/components/SlackConversationTab.d.ts +10 -0
  77. package/features/slack/components/SlackConversationTab.d.ts.map +1 -0
  78. package/features/slack/components/SlackLogo.d.ts +11 -0
  79. package/features/slack/components/SlackLogo.d.ts.map +1 -0
  80. package/features/slack/components/StartModal/MemberSelect.d.ts +9 -0
  81. package/features/slack/components/StartModal/MemberSelect.d.ts.map +1 -0
  82. package/features/slack/components/StartModal/MentionTextarea.d.ts +28 -0
  83. package/features/slack/components/StartModal/MentionTextarea.d.ts.map +1 -0
  84. package/features/slack/components/StartModal/SelectField.d.ts +19 -0
  85. package/features/slack/components/StartModal/SelectField.d.ts.map +1 -0
  86. package/features/slack/components/StartModal/SlackChannelTab.d.ts +23 -0
  87. package/features/slack/components/StartModal/SlackChannelTab.d.ts.map +1 -0
  88. package/features/slack/components/StartModal/SlackThreadTab.d.ts +26 -0
  89. package/features/slack/components/StartModal/SlackThreadTab.d.ts.map +1 -0
  90. package/features/slack/components/StartModal/TabIcon.d.ts +16 -0
  91. package/features/slack/components/StartModal/TabIcon.d.ts.map +1 -0
  92. package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts +2 -0
  93. package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts.map +1 -0
  94. package/features/slack/components/StartModal/dropdownOmni.d.ts +121 -0
  95. package/features/slack/components/StartModal/dropdownOmni.d.ts.map +1 -0
  96. package/features/slack/components/StartModal/index.d.ts +27 -0
  97. package/features/slack/components/StartModal/index.d.ts.map +1 -0
  98. package/features/slack/components/StartModal/style.d.ts +39 -0
  99. package/features/slack/components/StartModal/style.d.ts.map +1 -0
  100. package/features/slack/components/figma-tokens.d.ts +94 -0
  101. package/features/slack/components/figma-tokens.d.ts.map +1 -0
  102. package/features/slack/components/style.d.ts +54 -0
  103. package/features/slack/components/style.d.ts.map +1 -0
  104. package/features/slack/constants/api.d.ts +13 -0
  105. package/features/slack/constants/api.d.ts.map +1 -0
  106. package/features/slack/context.d.ts +75 -0
  107. package/features/slack/context.d.ts.map +1 -0
  108. package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts +2 -0
  109. package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts.map +1 -0
  110. package/features/slack/hooks/useLeftChannelGuard.d.ts +5 -0
  111. package/features/slack/hooks/useLeftChannelGuard.d.ts.map +1 -0
  112. package/features/slack/hooks/useOlderMessages.d.ts +51 -0
  113. package/features/slack/hooks/useOlderMessages.d.ts.map +1 -0
  114. package/features/slack/hooks/useSlackTabLabel.d.ts +23 -0
  115. package/features/slack/hooks/useSlackTabLabel.d.ts.map +1 -0
  116. package/features/slack/messageType.d.ts +16 -0
  117. package/features/slack/messageType.d.ts.map +1 -0
  118. package/features/slack/types/wire.d.ts +205 -0
  119. package/features/slack/types/wire.d.ts.map +1 -0
  120. package/features/slack/utils/emoji.d.ts +7 -0
  121. package/features/slack/utils/emoji.d.ts.map +1 -0
  122. package/features/slack/utils/mentions.d.ts +18 -0
  123. package/features/slack/utils/mentions.d.ts.map +1 -0
  124. package/features/slack/utils/text.d.ts +7 -0
  125. package/features/slack/utils/text.d.ts.map +1 -0
  126. package/features/toast-message/ToastRoot.d.ts.map +1 -1
  127. package/features/write-form/components/write-form/index.d.ts.map +1 -1
  128. package/features/write-form/store/slice.d.ts.map +1 -1
  129. package/features/write-form/utils/response.d.ts.map +1 -1
  130. package/index.d.ts +5 -0
  131. package/index.d.ts.map +1 -1
  132. package/index.es.js +19754 -13372
  133. package/index.umd.js +1100 -435
  134. package/main-dev.d.ts.map +1 -1
  135. package/package.json +1 -1
  136. package/testing/mocks/handlers/fetch-cards.d.ts +2 -2
  137. package/testing/mocks/handlers/fetch-cards.d.ts.map +1 -1
  138. package/testing/mocks/handlers/slack.d.ts +36 -0
  139. package/testing/mocks/handlers/slack.d.ts.map +1 -0
  140. package/testing/mocks/handlers/write-capability.d.ts.map +1 -1
  141. package/testing/mocks/handlers.d.ts.map +1 -1
  142. package/types/cards.d.ts +2 -2
  143. package/types/cards.d.ts.map +1 -1
  144. package/types/form.d.ts +3 -3
  145. package/types/form.d.ts.map +1 -1
  146. package/utils/form.d.ts +1 -1
  147. package/utils/form.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
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"connector-cards.d.ts","sourceRoot":"","sources":["../../src/app/connector-cards.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAkF,MAAM,OAAO,CAAC;AAyG3G,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,SAAS,CAkrBxC,CAAC"}
1
+ {"version":3,"file":"connector-cards.d.ts","sourceRoot":"","sources":["../../src/app/connector-cards.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAkF,MAAM,OAAO,CAAC;AAyG3G,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,SAAS,CA0rBxC,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":"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;AAGrE,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AACjE,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAC/E,eAAO,MAAM,6BAA6B,kCAAkC,CAAC;AAC7E,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAInD,eAAO,MAAM,2BAA2B,gCAAgC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"card-content-value.d.ts","sourceRoot":"","sources":["../../../../../src/features/connector-cards/components/card-list/card-content-value.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtD,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,gBAAgB,UAAW,MAAM,4CA6K7C,CAAC"}
1
+ {"version":3,"file":"card-content-value.d.ts","sourceRoot":"","sources":["../../../../../src/features/connector-cards/components/card-list/card-content-value.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtD,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,gBAAgB,UAAW,MAAM,4CA8K7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-item-modal.d.ts","sourceRoot":"","sources":["../../../../../src/features/connector-cards/components/card-list/list-item-modal.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzD,UAAU,MAAM;IACd,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D;AAaD,eAAO,MAAM,aAAa,+CAAgD,MAAM,4CAyG/E,CAAC"}
1
+ {"version":3,"file":"list-item-modal.d.ts","sourceRoot":"","sources":["../../../../../src/features/connector-cards/components/card-list/list-item-modal.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzD,UAAU,MAAM;IACd,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D;AAaD,eAAO,MAAM,aAAa,+CAAgD,MAAM,4CA0G/E,CAAC"}
@@ -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"}
@@ -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"}