@hiver/connector-agent 4.16.1 → 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.
- package/README.md +9 -9
- package/app/omni-slack/SlackConnectModalIsland.d.ts +26 -0
- package/app/omni-slack/SlackConnectModalIsland.d.ts.map +1 -0
- package/app/omni-slack/index.d.ts +14 -0
- package/app/omni-slack/index.d.ts.map +1 -0
- package/app/omni-slack/provider.d.ts +15 -0
- package/app/omni-slack/provider.d.ts.map +1 -0
- package/constants/tracking-events.d.ts +8 -0
- package/constants/tracking-events.d.ts.map +1 -1
- package/features/email-logger/omni/components/LogEmailPill.d.ts.map +1 -1
- package/features/email-logger/omni/components/LogEmailPill.test.d.ts +2 -0
- package/features/email-logger/omni/components/LogEmailPill.test.d.ts.map +1 -0
- package/features/slack/api/channels.d.ts +11 -0
- package/features/slack/api/channels.d.ts.map +1 -0
- package/features/slack/api/conversations.d.ts +41 -0
- package/features/slack/api/conversations.d.ts.map +1 -0
- package/features/slack/api/effective-config.d.ts +21 -0
- package/features/slack/api/effective-config.d.ts.map +1 -0
- package/features/slack/api/index.d.ts +4 -0
- package/features/slack/api/index.d.ts.map +1 -0
- package/features/slack/api/linked-conv.d.ts +33 -0
- package/features/slack/api/linked-conv.d.ts.map +1 -0
- package/features/slack/api/members.d.ts +10 -0
- package/features/slack/api/members.d.ts.map +1 -0
- package/features/slack/api/messages.d.ts +10 -0
- package/features/slack/api/messages.d.ts.map +1 -0
- package/features/slack/api/normalise.d.ts +3 -0
- package/features/slack/api/normalise.d.ts.map +1 -0
- package/features/slack/api/users.d.ts +11 -0
- package/features/slack/api/users.d.ts.map +1 -0
- package/features/slack/avatar/SlackAvatar.d.ts +20 -0
- package/features/slack/avatar/SlackAvatar.d.ts.map +1 -0
- package/features/slack/avatar/cache.d.ts +10 -0
- package/features/slack/avatar/cache.d.ts.map +1 -0
- package/features/slack/avatar/index.d.ts +2 -0
- package/features/slack/avatar/index.d.ts.map +1 -0
- package/features/slack/components/AnimatedDots.d.ts +2 -0
- package/features/slack/components/AnimatedDots.d.ts.map +1 -0
- package/features/slack/components/HeroIllustration.d.ts +14 -0
- package/features/slack/components/HeroIllustration.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts +21 -0
- package/features/slack/components/LinkedConversationPanel/ChannelStateView.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts +28 -0
- package/features/slack/components/LinkedConversationPanel/ChannelThreadGroup.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/Composer.d.ts +50 -0
- package/features/slack/components/LinkedConversationPanel/Composer.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts +24 -0
- package/features/slack/components/LinkedConversationPanel/ConfirmDeleteModal.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts +16 -0
- package/features/slack/components/LinkedConversationPanel/DeletedTombstone.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts +16 -0
- package/features/slack/components/LinkedConversationPanel/LoadOlderMessages.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts +27 -0
- package/features/slack/components/LinkedConversationPanel/MentionPicker.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts +31 -0
- package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts +5 -0
- package/features/slack/components/LinkedConversationPanel/NotMemberTooltip.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts +15 -0
- package/features/slack/components/LinkedConversationPanel/ReconnectSlackBanner.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts +18 -0
- package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts +3 -0
- package/features/slack/components/LinkedConversationPanel/ThreadSkeleton.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts +2 -0
- package/features/slack/components/LinkedConversationPanel/__tests__/MessageItem.test.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/index.d.ts +27 -0
- package/features/slack/components/LinkedConversationPanel/index.d.ts.map +1 -0
- package/features/slack/components/LinkedConversationPanel/style.d.ts +114 -0
- package/features/slack/components/LinkedConversationPanel/style.d.ts.map +1 -0
- package/features/slack/components/SlackConnectModal.d.ts +29 -0
- package/features/slack/components/SlackConnectModal.d.ts.map +1 -0
- package/features/slack/components/SlackConversationTab.d.ts +10 -0
- package/features/slack/components/SlackConversationTab.d.ts.map +1 -0
- package/features/slack/components/SlackLogo.d.ts +11 -0
- package/features/slack/components/SlackLogo.d.ts.map +1 -0
- package/features/slack/components/StartModal/MemberSelect.d.ts +9 -0
- package/features/slack/components/StartModal/MemberSelect.d.ts.map +1 -0
- package/features/slack/components/StartModal/MentionTextarea.d.ts +28 -0
- package/features/slack/components/StartModal/MentionTextarea.d.ts.map +1 -0
- package/features/slack/components/StartModal/SelectField.d.ts +19 -0
- package/features/slack/components/StartModal/SelectField.d.ts.map +1 -0
- package/features/slack/components/StartModal/SlackChannelTab.d.ts +23 -0
- package/features/slack/components/StartModal/SlackChannelTab.d.ts.map +1 -0
- package/features/slack/components/StartModal/SlackThreadTab.d.ts +26 -0
- package/features/slack/components/StartModal/SlackThreadTab.d.ts.map +1 -0
- package/features/slack/components/StartModal/TabIcon.d.ts +16 -0
- package/features/slack/components/StartModal/TabIcon.d.ts.map +1 -0
- package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts +2 -0
- package/features/slack/components/StartModal/__tests__/MemberSelect.test.d.ts.map +1 -0
- package/features/slack/components/StartModal/dropdownOmni.d.ts +121 -0
- package/features/slack/components/StartModal/dropdownOmni.d.ts.map +1 -0
- package/features/slack/components/StartModal/index.d.ts +27 -0
- package/features/slack/components/StartModal/index.d.ts.map +1 -0
- package/features/slack/components/StartModal/style.d.ts +39 -0
- package/features/slack/components/StartModal/style.d.ts.map +1 -0
- package/features/slack/components/figma-tokens.d.ts +94 -0
- package/features/slack/components/figma-tokens.d.ts.map +1 -0
- package/features/slack/components/style.d.ts +54 -0
- package/features/slack/components/style.d.ts.map +1 -0
- package/features/slack/constants/api.d.ts +13 -0
- package/features/slack/constants/api.d.ts.map +1 -0
- package/features/slack/context.d.ts +75 -0
- package/features/slack/context.d.ts.map +1 -0
- package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts +2 -0
- package/features/slack/hooks/__tests__/useOlderMessages.test.d.ts.map +1 -0
- package/features/slack/hooks/useLeftChannelGuard.d.ts +5 -0
- package/features/slack/hooks/useLeftChannelGuard.d.ts.map +1 -0
- package/features/slack/hooks/useOlderMessages.d.ts +51 -0
- package/features/slack/hooks/useOlderMessages.d.ts.map +1 -0
- package/features/slack/hooks/useSlackTabLabel.d.ts +23 -0
- package/features/slack/hooks/useSlackTabLabel.d.ts.map +1 -0
- package/features/slack/messageType.d.ts +16 -0
- package/features/slack/messageType.d.ts.map +1 -0
- package/features/slack/types/wire.d.ts +205 -0
- package/features/slack/types/wire.d.ts.map +1 -0
- package/features/slack/utils/emoji.d.ts +7 -0
- package/features/slack/utils/emoji.d.ts.map +1 -0
- package/features/slack/utils/mentions.d.ts +18 -0
- package/features/slack/utils/mentions.d.ts.map +1 -0
- package/features/slack/utils/text.d.ts +7 -0
- package/features/slack/utils/text.d.ts.map +1 -0
- package/features/toast-message/ToastRoot.d.ts.map +1 -1
- package/index.d.ts +5 -0
- package/index.d.ts.map +1 -1
- package/index.es.js +19553 -13397
- package/index.umd.js +1051 -427
- package/main-dev.d.ts.map +1 -1
- package/package.json +1 -1
- package/testing/mocks/handlers/fetch-cards.d.ts +2 -2
- package/testing/mocks/handlers/slack.d.ts +36 -0
- package/testing/mocks/handlers/slack.d.ts.map +1 -0
- package/testing/mocks/handlers.d.ts.map +1 -1
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,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;
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface LoadOlderMessagesProps {
|
|
3
|
+
isLoading: boolean;
|
|
4
|
+
error: boolean;
|
|
5
|
+
/** Triggered by clicking the affordance (fallback to scroll-to-top). */
|
|
6
|
+
onLoad: () => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Top-of-list "load older messages" affordance. Scroll-to-top is the
|
|
10
|
+
* primary trigger; this row makes the state visible and offers a click
|
|
11
|
+
* fallback (and a retry path on error). Rendered only when older history
|
|
12
|
+
* exists or a fetch is in flight / failed.
|
|
13
|
+
*/
|
|
14
|
+
export declare const LoadOlderMessages: FC<LoadOlderMessagesProps>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=LoadOlderMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadOlderMessages.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkedConversationPanel/LoadOlderMessages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAO3B,UAAU,sBAAsB;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA2BxD,CAAC"}
|