@hiver/connector-agent 4.21.2 → 4.22.0-slackM2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/app/hig-slack/HigSlackSection.d.ts +3 -0
  2. package/app/hig-slack/HigSlackSection.d.ts.map +1 -1
  3. package/constants/tracking-events.d.ts +4 -0
  4. package/constants/tracking-events.d.ts.map +1 -1
  5. package/features/slack/api/__tests__/errors.test.d.ts +2 -0
  6. package/features/slack/api/__tests__/errors.test.d.ts.map +1 -0
  7. package/features/slack/api/__tests__/links.test.d.ts +2 -0
  8. package/features/slack/api/__tests__/links.test.d.ts.map +1 -0
  9. package/features/slack/api/conversations.d.ts +6 -2
  10. package/features/slack/api/conversations.d.ts.map +1 -1
  11. package/features/slack/api/errors.d.ts +37 -0
  12. package/features/slack/api/errors.d.ts.map +1 -0
  13. package/features/slack/api/index.d.ts +2 -0
  14. package/features/slack/api/index.d.ts.map +1 -1
  15. package/features/slack/api/linked-conv.d.ts +11 -2
  16. package/features/slack/api/linked-conv.d.ts.map +1 -1
  17. package/features/slack/api/links.d.ts +90 -0
  18. package/features/slack/api/links.d.ts.map +1 -0
  19. package/features/slack/api/members.d.ts +2 -2
  20. package/features/slack/api/members.d.ts.map +1 -1
  21. package/features/slack/api/messages.d.ts +1 -1
  22. package/features/slack/api/messages.d.ts.map +1 -1
  23. package/features/slack/components/LinkExistingModal/index.d.ts +29 -0
  24. package/features/slack/components/LinkExistingModal/index.d.ts.map +1 -0
  25. package/features/slack/components/LinkedConversationPanel/Composer.d.ts.map +1 -1
  26. package/features/slack/components/LinkedConversationPanel/LinkedChannelHeader.d.ts +10 -3
  27. package/features/slack/components/LinkedConversationPanel/LinkedChannelHeader.d.ts.map +1 -1
  28. package/features/slack/components/LinkedConversationPanel/MessageItem.d.ts.map +1 -1
  29. package/features/slack/components/LinkedConversationPanel/ThreadDetailView.d.ts.map +1 -1
  30. package/features/slack/components/LinkedConversationPanel/index.d.ts +18 -1
  31. package/features/slack/components/LinkedConversationPanel/index.d.ts.map +1 -1
  32. package/features/slack/components/SlackConversationTab.d.ts.map +1 -1
  33. package/features/slack/components/SlackLinkList.d.ts +23 -0
  34. package/features/slack/components/SlackLinkList.d.ts.map +1 -0
  35. package/features/slack/components/StartModal/index.d.ts +8 -2
  36. package/features/slack/components/StartModal/index.d.ts.map +1 -1
  37. package/features/slack/constants/api.d.ts +6 -0
  38. package/features/slack/constants/api.d.ts.map +1 -1
  39. package/features/slack/context.d.ts +18 -0
  40. package/features/slack/context.d.ts.map +1 -1
  41. package/features/slack/hooks/__tests__/useMarkLinkRead.test.d.ts +2 -0
  42. package/features/slack/hooks/__tests__/useMarkLinkRead.test.d.ts.map +1 -0
  43. package/features/slack/hooks/useMarkLinkRead.d.ts +33 -0
  44. package/features/slack/hooks/useMarkLinkRead.d.ts.map +1 -0
  45. package/features/slack/hooks/useSlackLinks.d.ts +32 -0
  46. package/features/slack/hooks/useSlackLinks.d.ts.map +1 -0
  47. package/features/slack/link-scope.d.ts +7 -0
  48. package/features/slack/link-scope.d.ts.map +1 -0
  49. package/features/slack/types/wire.d.ts +75 -0
  50. package/features/slack/types/wire.d.ts.map +1 -1
  51. package/features/slack/utils/__tests__/join-notices.test.d.ts +2 -0
  52. package/features/slack/utils/__tests__/join-notices.test.d.ts.map +1 -0
  53. package/features/slack/utils/__tests__/slack-thread-url.test.d.ts +2 -0
  54. package/features/slack/utils/__tests__/slack-thread-url.test.d.ts.map +1 -0
  55. package/features/slack/utils/join-notices.d.ts +3 -0
  56. package/features/slack/utils/join-notices.d.ts.map +1 -0
  57. package/features/slack/utils/slack-thread-url.d.ts +23 -0
  58. package/features/slack/utils/slack-thread-url.d.ts.map +1 -0
  59. package/index.d.ts +3 -0
  60. package/index.d.ts.map +1 -1
  61. package/index.es.js +13471 -12560
  62. package/index.umd.js +647 -647
  63. package/main-dev.d.ts.map +1 -1
  64. package/package.json +1 -1
  65. package/testing/mocks/handlers/slack.d.ts +22 -12
  66. package/testing/mocks/handlers/slack.d.ts.map +1 -1
@@ -0,0 +1,32 @@
1
+ import { SlackTargetKind } from '../types/wire';
2
+ export interface SlackLinkSummary {
3
+ /** The link row id — the selector every scoped call takes. */
4
+ linkId: string;
5
+ /** Display label; never empty (falls back per target kind when the
6
+ * backend hasn't enriched channelName yet). */
7
+ label: string;
8
+ targetKind: SlackTargetKind;
9
+ unreadCount: number;
10
+ }
11
+ export interface SlackLinksSummary {
12
+ links: SlackLinkSummary[];
13
+ /** Collated unread across all links — drives the tab badge / red dot. */
14
+ totalUnreadCount: number;
15
+ /** True once at least one link exists. */
16
+ isLinked: boolean;
17
+ cap: number;
18
+ remainingSlots: number;
19
+ }
20
+ /**
21
+ * Host-facing links summary (M2) — grows useSlackTabLabel's job to N
22
+ * links: per-item label/kind/unread for a switcher or tab strip, plus the
23
+ * collated unread count for a badge. Reads the SAME query/cache as the
24
+ * panel's own useLinks, so an active panel keeps this fresh for free.
25
+ *
26
+ * `refetchIntervalMs` defaults to 0 (no own polling — piggyback on the
27
+ * mounted panel's poll, mirroring useSlackTabLabel). Hosts that render
28
+ * badges with NO Slack surface mounted (e.g. a host-owned tab strip)
29
+ * pass a positive interval, e.g. LINKS_POLL_INTERVAL_MS.
30
+ */
31
+ export declare function useSlackLinksSummary(hiverConvId: string, refetchIntervalMs?: number): SlackLinksSummary;
32
+ //# sourceMappingURL=useSlackLinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSlackLinks.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/hooks/useSlackLinks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf;oDACgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,eAAe,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,SAAI,GAAG,iBAAiB,CAelG"}
@@ -0,0 +1,7 @@
1
+ import { FC, ReactNode } from 'react';
2
+ export declare const LinkScopeProvider: FC<{
3
+ linkId?: string;
4
+ children: ReactNode;
5
+ }>;
6
+ export declare const useLinkScope: () => string | undefined;
7
+ //# sourceMappingURL=link-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-scope.d.ts","sourceRoot":"","sources":["../../../src/features/slack/link-scope.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,EAAE,EAAE,SAAS,EAAc,MAAM,OAAO,CAAC;AAajE,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAE1E,CAAC;AAGF,eAAO,MAAM,YAAY,QAAO,MAAM,GAAG,SAAyC,CAAC"}
@@ -142,6 +142,77 @@ export interface SlackOlderPage {
142
142
  /** Window size used by the server for this page. */
143
143
  pageSize: number;
144
144
  }
145
+ /** How a link row came to exist. `start_*` = created from Hiver (M1
146
+ * flows), `link_existing_*` = attached pre-existing Slack targets (M2).
147
+ * Drives the "started vs attached" labelling + analytics metadata. */
148
+ export type SlackLinkedVia = 'start_existing_channel' | 'start_new_channel' | 'link_existing_thread' | 'link_existing_channel';
149
+ /**
150
+ * One link row on GET /external-conversations/:hiverConvId/links (M2).
151
+ * `id` is THE linkId passed as the selector everywhere else — an opaque
152
+ * row id, deliberately not the Slack channel/thread id (a stale linkId
153
+ * 404s loudly; a stale Slack id would silently resolve to a re-attached
154
+ * row and post somewhere the rep never chose).
155
+ */
156
+ export interface SlackLink {
157
+ id: string;
158
+ hiverConvId: string;
159
+ connectorId: string;
160
+ /** thread_ts for a thread, channel id for a channel. */
161
+ externalId: string;
162
+ /** Channel id when this is a thread; null for a channel link. */
163
+ parentExternalId: string | null;
164
+ channelId: string;
165
+ /** Null when targetKind === 'channel'. */
166
+ threadTs: string | null;
167
+ /** May be null on older links until first read — display code must
168
+ * fall back (see linkDisplayName). */
169
+ channelName: string | null;
170
+ targetKind: SlackTargetKind;
171
+ linkedVia: SlackLinkedVia;
172
+ linkedByUserId: string;
173
+ /** ISO timestamp; list is ordered by this ascending (stable tab
174
+ * positions as items are added). */
175
+ linkedAt: string;
176
+ /** Newest message ts known to the backend cache; null if nothing
177
+ * cached. Drives the cold-open "most recent activity" rule. */
178
+ lastActivityTs: string | null;
179
+ /** Per-viewer. Only POST …/read clears it; can legitimately be 0
180
+ * with history present (bounded cache) — never treat as a total. */
181
+ unreadCount: number;
182
+ }
183
+ /** GET …/links envelope. `cap`/`remainingSlots` are server-authoritative
184
+ * — never hardcode the 4 (decision D6). */
185
+ export interface SlackLinksResponse {
186
+ links: SlackLink[];
187
+ totalUnreadCount: number;
188
+ cap: number;
189
+ remainingSlots: number;
190
+ }
191
+ export interface LinkExistingThreadRequest {
192
+ hiverConvId: string;
193
+ channelId: string;
194
+ threadTs: string;
195
+ /** Always posted into the target before linking (no silent attach).
196
+ * Product decision D2: the link modal has no compose box — send ''. */
197
+ messageText: string;
198
+ }
199
+ export interface LinkExistingChannelRequest {
200
+ hiverConvId: string;
201
+ channelId: string;
202
+ messageText: string;
203
+ }
204
+ /**
205
+ * DUMMY CONTRACT (D1) — response of the pending /preview/thread
206
+ * endpoint, used to render the link-a-thread preview card before the
207
+ * rep confirms. Shape agreed in discussion; confirm with backend.
208
+ */
209
+ export interface SlackThreadPreview {
210
+ /** First (root) message text of the thread. */
211
+ firstMessage: string;
212
+ channelName: string;
213
+ memberCount: number;
214
+ channelType: 'private' | 'public';
215
+ }
145
216
  export interface MemberResolutionReport {
146
217
  added: Array<{
147
218
  email: string;
@@ -176,6 +247,10 @@ export interface PostMessageRequest {
176
247
  /** Channel mode (B4): root ts of the thread to reply into. Omit to
177
248
  * post a new top-level message (a new thread) to the channel. */
178
249
  externalThreadTs?: string;
250
+ /** Multi-link selector (M2). Omitted ⇒ backend falls back to the most
251
+ * recently linked item (compat shim for the flag-off single-link UI).
252
+ * Always sent by the multi-link surfaces. */
253
+ linkId?: string;
179
254
  }
180
255
  export interface ChannelMember {
181
256
  externalUserId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/types/wire.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/types/wire.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=join-notices.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-notices.test.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/utils/__tests__/join-notices.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=slack-thread-url.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-thread-url.test.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/utils/__tests__/slack-thread-url.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { SlackMessage } from '../types/wire';
2
+ export declare const collapseJoinNotices: (messages: SlackMessage[]) => SlackMessage[];
3
+ //# sourceMappingURL=join-notices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-notices.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/utils/join-notices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA6BhE,eAAO,MAAM,mBAAmB,aAAc,YAAY,EAAE,KAAG,YAAY,EAgC1E,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Parse a pasted Slack thread permalink into the {channelId, threadTs}
3
+ * pair the /link/existing-thread and /preview/thread endpoints need.
4
+ * Parsing happens CLIENT-SIDE (decision D1) — the backend receives ids,
5
+ * never the raw URL.
6
+ *
7
+ * Permalink shapes Slack produces ("Copy link" on a message):
8
+ * https://<ws>.slack.com/archives/C0A21B3CD/p1727123456123456
9
+ * https://<ws>.slack.com/archives/C0A21B3CD/p1727123456123456
10
+ * ?thread_ts=1727123450.000200&cid=C0A21B3CD
11
+ *
12
+ * The `p<16 digits>` segment is the MESSAGE's ts with the dot removed
13
+ * (last 6 digits are the fractional part). When a `thread_ts` query param
14
+ * is present the copied message is a REPLY — the thread root is
15
+ * `thread_ts`, not the p-segment — so that wins. Otherwise the message is
16
+ * the root itself.
17
+ */
18
+ export interface ParsedSlackThreadUrl {
19
+ channelId: string;
20
+ threadTs: string;
21
+ }
22
+ export declare const parseSlackThreadUrl: (raw: string) => ParsedSlackThreadUrl | null;
23
+ //# sourceMappingURL=slack-thread-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-thread-url.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/utils/slack-thread-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,eAAO,MAAM,mBAAmB,QAAS,MAAM,KAAG,oBAAoB,GAAG,IAuBxE,CAAC"}
package/index.d.ts CHANGED
@@ -20,6 +20,9 @@ export type { HigSlackSectionProps, HigSlackSectionBodyProps } from './app/hig-s
20
20
  export { HigSlackConnectModalIsland } from './app/hig-slack/HigSlackConnectModalIsland';
21
21
  export type { HigSlackConnectModalIslandProps } from './app/hig-slack/HigSlackConnectModalIsland';
22
22
  export { useSlackTabLabel } from './features/slack/hooks/useSlackTabLabel';
23
+ export { useSlackLinksSummary } from './features/slack/hooks/useSlackLinks';
24
+ export type { SlackLinkSummary, SlackLinksSummary } from './features/slack/hooks/useSlackLinks';
25
+ export { SLACK_LINKS_API } from './features/slack/constants/api';
23
26
  export { fetchAppCfValues, fetchDeferredAppCfValues } from './api/appCustomField';
24
27
  export type { AppCfValuesRequest, AppCfValuesResponse, AppFieldValue, AppFieldValueStatus } from './api/appCustomField';
25
28
  export { useConnectorSelectedEmail } from './store/connectorEmailStore';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,YAAY,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAI7F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACvF,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAGtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AACxF,YAAY,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAIlG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAClF,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxH,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC9F,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,YAAY,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAI7F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACvF,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAGtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AACxF,YAAY,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAIlG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAIhG,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAClF,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxH,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC9F,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}