@flamingo-stack/openframe-frontend-core 0.0.716 → 0.0.717
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/dist/chat-protocol/index.cjs +23 -14
- package/dist/chat-protocol/index.js +23 -14
- package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
- package/dist/chat-protocol/source-metadata.d.ts +11 -2
- package/dist/chat-protocol/source-metadata.d.ts.map +1 -1
- package/dist/{chunk-DLEO53NX.cjs → chunk-2AI2E3O2.cjs} +65 -65
- package/dist/{chunk-V36WGIYR.js → chunk-2EK7PA73.js} +3 -3
- package/dist/{chunk-3AJIQPFG.js → chunk-2X2P3VHF.js} +5 -5
- package/dist/{chunk-DPX6244M.js → chunk-3MJPCKB6.js} +2 -2
- package/dist/{chunk-2V7D5GJX.cjs → chunk-3QAMMWV2.cjs} +8 -8
- package/dist/{chunk-BVZ7W4HW.js → chunk-47FISYO5.js} +3 -3
- package/dist/{chunk-S2VWQX6T.cjs → chunk-5MF3NMYC.cjs} +261 -261
- package/dist/{chunk-YTMV4OBY.js → chunk-6MZI5SQ4.js} +2 -2
- package/dist/{chunk-C5AGSZBT.js → chunk-B5XU6KOA.js} +1 -1
- package/dist/{chunk-P7IL4CX3.js → chunk-E6FLX4TX.js} +3 -3
- package/dist/{chunk-ZX7SCPLO.cjs → chunk-E7YCPY7K.cjs} +3 -3
- package/dist/{chunk-MXPQMQI3.js → chunk-FGKSAQR3.js} +5 -5
- package/dist/{chunk-EOKSKJSS.cjs → chunk-FROXS52D.cjs} +11 -11
- package/dist/{chunk-I5F2OTFE.cjs → chunk-J3Q53TWW.cjs} +26 -26
- package/dist/{chunk-ROBQ5TR7.js → chunk-JH2SIWPQ.js} +28 -17
- package/dist/{chunk-DDWFCWOE.js → chunk-JPD4NXH6.js} +1 -1
- package/dist/{chunk-STCJYO2Z.cjs → chunk-LANNTTKP.cjs} +9 -9
- package/dist/{chunk-JVCAK4W3.cjs → chunk-LE5WKGJV.cjs} +3 -3
- package/dist/{chunk-KNOZVVCU.cjs → chunk-M2A5SC6H.cjs} +9 -9
- package/dist/{chunk-YO5JB3WE.cjs → chunk-NB6EWUDE.cjs} +33 -33
- package/dist/{chunk-H5R7U2D2.js → chunk-NZ5BHDFZ.js} +1 -1
- package/dist/{chunk-X2MNNV5H.cjs → chunk-OHLBO4LM.cjs} +3 -3
- package/dist/{chunk-64F6OEEV.js → chunk-PD4W2VMH.js} +1 -1
- package/dist/{chunk-KYFNFRSV.js → chunk-TYVS64YN.js} +2 -2
- package/dist/{chunk-5IJXM3RU.cjs → chunk-U3TP4UGA.cjs} +6 -6
- package/dist/{chunk-HETQETPV.cjs → chunk-UWQWMGJ7.cjs} +28 -17
- package/dist/{chunk-NKILEG3Y.cjs → chunk-VYKFM2NB.cjs} +35 -35
- package/dist/{chunk-YBS5QGON.js → chunk-VZI5BA4L.js} +1 -1
- package/dist/{chunk-JCA5MBVY.js → chunk-WH5GJSID.js} +2 -2
- package/dist/{chunk-DHMO5GI4.cjs → chunk-X3RVDBXU.cjs} +16 -16
- package/dist/{cloud-tenants-2J7CPTKT.cjs → cloud-tenants-KDWTVHSI.cjs} +3 -3
- package/dist/{cloud-tenants-YOY2WLGC.js → cloud-tenants-LNC26WY2.js} +2 -2
- package/dist/components/case-studies/index.cjs +14 -14
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/chat/types/message.types.d.ts +20 -16
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/types/unified-chat-state.types.d.ts +1 -1
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/help-center-pages/index.cjs +62 -62
- package/dist/components/help-center-pages/index.js +13 -13
- package/dist/components/index.cjs +33 -33
- package/dist/components/index.js +12 -12
- package/dist/components/meeting-scheduler/index.cjs +19 -19
- package/dist/components/meeting-scheduler/index.js +2 -2
- package/dist/components/navigation/index.cjs +6 -6
- package/dist/components/navigation/index.js +5 -5
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/product-demo/index.cjs +6 -6
- package/dist/components/product-demo/index.js +6 -6
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/{devices-5NADSKDZ.cjs → devices-ATHYJUVQ.cjs} +4 -4
- package/dist/{devices-EQXXILXW.js → devices-NYCRQ3PG.js} +2 -2
- package/dist/index.cjs +7 -7
- package/dist/index.js +6 -6
- package/dist/{knowledge-YCQITBJB.js → knowledge-DEKYJXBS.js} +2 -2
- package/dist/{knowledge-LHQYZJE7.cjs → knowledge-EHNRYT7U.cjs} +4 -4
- package/dist/{logs-DUVKSQU3.cjs → logs-3V765P7O.cjs} +11 -11
- package/dist/{logs-LZNXGOSW.js → logs-Q7YFIVYI.js} +2 -2
- package/dist/{policies-VYWOJ7IF.js → policies-BTIENK5A.js} +2 -2
- package/dist/{policies-5H74FS4S.cjs → policies-TXU5AIXS.cjs} +7 -7
- package/dist/{software-update-VRRX5U4W.cjs → software-update-MINTICZY.cjs} +7 -7
- package/dist/{software-update-MSDY3OLX.js → software-update-SW2HOBHW.js} +2 -2
- package/package.json +1 -1
- package/src/chat-protocol/nats-decoder.ts +10 -8
- package/src/chat-protocol/source-metadata.ts +25 -2
- package/src/components/chat/types/message.types.ts +21 -15
- package/src/components/chat/types/unified-chat-state.types.ts +1 -1
- package/src/components/chat/utils/process-historical-messages.ts +12 -4
|
@@ -308,15 +308,13 @@ var MESSAGE_TYPE = {
|
|
|
308
308
|
TEXT: "TEXT",
|
|
309
309
|
THINKING: "THINKING",
|
|
310
310
|
ASK: "ASK",
|
|
311
|
-
/** Per-answer
|
|
311
|
+
/** Per-answer attachments (cited documents, videos, entity cards).
|
|
312
312
|
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
|
|
317
|
-
* deletion here and nothing else. */
|
|
313
|
+
* `ATTACHMENTS` carries `sources` / `videos` / `cards` on the record itself.
|
|
314
|
+
* `GUIDE` is the envelope it replaced — the same arrays under `payload` —
|
|
315
|
+
* and stays only until every backend ships `ATTACHMENTS`. */
|
|
316
|
+
ATTACHMENTS: "ATTACHMENTS",
|
|
318
317
|
GUIDE: "GUIDE",
|
|
319
|
-
SOURCES: "SOURCES",
|
|
320
318
|
EXECUTING_TOOL: "EXECUTING_TOOL",
|
|
321
319
|
EXECUTED_TOOL: "EXECUTED_TOOL",
|
|
322
320
|
APPROVAL_REQUEST: "APPROVAL_REQUEST",
|
|
@@ -544,6 +542,16 @@ function sourceMetadataEvent(payload) {
|
|
|
544
542
|
...refs.length > 0 ? { refs } : {}
|
|
545
543
|
};
|
|
546
544
|
}
|
|
545
|
+
function withoutNulls(value) {
|
|
546
|
+
if (Array.isArray(value)) return value.map(withoutNulls);
|
|
547
|
+
if (!isRecord(value)) return value;
|
|
548
|
+
return Object.fromEntries(
|
|
549
|
+
Object.entries(value).filter(([, field]) => field !== null).map(([key, field]) => [key, withoutNulls(field)])
|
|
550
|
+
);
|
|
551
|
+
}
|
|
552
|
+
function attachmentsEvent(record) {
|
|
553
|
+
return sourceMetadataEvent(withoutNulls(record));
|
|
554
|
+
}
|
|
547
555
|
|
|
548
556
|
// src/chat-protocol/nats-decoder.ts
|
|
549
557
|
function str(value) {
|
|
@@ -610,13 +618,14 @@ function decodeNatsChunk(chunk) {
|
|
|
610
618
|
return { type: "thinking-delta", text: data.text, ...seq };
|
|
611
619
|
}
|
|
612
620
|
return null;
|
|
613
|
-
//
|
|
614
|
-
//
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
621
|
+
// The chunk arrives BEFORE or between the answer's text deltas, so the
|
|
622
|
+
// reducer — not this decoder — owns attaching it to the right turn.
|
|
623
|
+
case MESSAGE_TYPE.ATTACHMENTS: {
|
|
624
|
+
const event = attachmentsEvent(data);
|
|
625
|
+
return event ? { ...event, ...seq } : null;
|
|
626
|
+
}
|
|
627
|
+
// The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
|
|
628
|
+
case MESSAGE_TYPE.GUIDE: {
|
|
620
629
|
const event = sourceMetadataEvent(data.payload);
|
|
621
630
|
return event ? { ...event, ...seq } : null;
|
|
622
631
|
}
|
|
@@ -306,15 +306,13 @@ var MESSAGE_TYPE = {
|
|
|
306
306
|
TEXT: "TEXT",
|
|
307
307
|
THINKING: "THINKING",
|
|
308
308
|
ASK: "ASK",
|
|
309
|
-
/** Per-answer
|
|
309
|
+
/** Per-answer attachments (cited documents, videos, entity cards).
|
|
310
310
|
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
|
|
315
|
-
* deletion here and nothing else. */
|
|
311
|
+
* `ATTACHMENTS` carries `sources` / `videos` / `cards` on the record itself.
|
|
312
|
+
* `GUIDE` is the envelope it replaced — the same arrays under `payload` —
|
|
313
|
+
* and stays only until every backend ships `ATTACHMENTS`. */
|
|
314
|
+
ATTACHMENTS: "ATTACHMENTS",
|
|
316
315
|
GUIDE: "GUIDE",
|
|
317
|
-
SOURCES: "SOURCES",
|
|
318
316
|
EXECUTING_TOOL: "EXECUTING_TOOL",
|
|
319
317
|
EXECUTED_TOOL: "EXECUTED_TOOL",
|
|
320
318
|
APPROVAL_REQUEST: "APPROVAL_REQUEST",
|
|
@@ -542,6 +540,16 @@ function sourceMetadataEvent(payload) {
|
|
|
542
540
|
...refs.length > 0 ? { refs } : {}
|
|
543
541
|
};
|
|
544
542
|
}
|
|
543
|
+
function withoutNulls(value) {
|
|
544
|
+
if (Array.isArray(value)) return value.map(withoutNulls);
|
|
545
|
+
if (!isRecord(value)) return value;
|
|
546
|
+
return Object.fromEntries(
|
|
547
|
+
Object.entries(value).filter(([, field]) => field !== null).map(([key, field]) => [key, withoutNulls(field)])
|
|
548
|
+
);
|
|
549
|
+
}
|
|
550
|
+
function attachmentsEvent(record) {
|
|
551
|
+
return sourceMetadataEvent(withoutNulls(record));
|
|
552
|
+
}
|
|
545
553
|
|
|
546
554
|
// src/chat-protocol/nats-decoder.ts
|
|
547
555
|
function str(value) {
|
|
@@ -608,13 +616,14 @@ function decodeNatsChunk(chunk) {
|
|
|
608
616
|
return { type: "thinking-delta", text: data.text, ...seq };
|
|
609
617
|
}
|
|
610
618
|
return null;
|
|
611
|
-
//
|
|
612
|
-
//
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
619
|
+
// The chunk arrives BEFORE or between the answer's text deltas, so the
|
|
620
|
+
// reducer — not this decoder — owns attaching it to the right turn.
|
|
621
|
+
case MESSAGE_TYPE.ATTACHMENTS: {
|
|
622
|
+
const event = attachmentsEvent(data);
|
|
623
|
+
return event ? { ...event, ...seq } : null;
|
|
624
|
+
}
|
|
625
|
+
// The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
|
|
626
|
+
case MESSAGE_TYPE.GUIDE: {
|
|
618
627
|
const event = sourceMetadataEvent(data.payload);
|
|
619
628
|
return event ? { ...event, ...seq } : null;
|
|
620
629
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nats-decoder.d.ts","sourceRoot":"","sources":["../../src/chat-protocol/nats-decoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAE5E,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,UAAU,CAAC;AAyClE;;wDAEwD;AACxD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,EAAE,CASjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"nats-decoder.d.ts","sourceRoot":"","sources":["../../src/chat-protocol/nats-decoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAE5E,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,UAAU,CAAC;AAyClE;;wDAEwD;AACxD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,EAAE,CASjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAyStE"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Source-metadata payload → `{ sources, refs }`.
|
|
3
3
|
*
|
|
4
|
-
* ONE decoder for two arrival paths: the live `
|
|
5
|
-
*
|
|
4
|
+
* ONE decoder for two arrival paths: the live `ATTACHMENTS` NATS chunk and the
|
|
5
|
+
* persisted row of the same name in dialog history. That is the whole point
|
|
6
6
|
* of putting it here rather than in either consumer — a reloaded thread has to
|
|
7
7
|
* render identically to the live turn, and two parsers is exactly how that stops
|
|
8
8
|
* being true.
|
|
@@ -46,6 +46,15 @@ export declare function youtubeVideoId(value: unknown): string | undefined;
|
|
|
46
46
|
* an earlier chunk of the same turn had already supplied.
|
|
47
47
|
*/
|
|
48
48
|
export declare function sourceMetadataEvent(payload: unknown): SourcesEvent | null;
|
|
49
|
+
/**
|
|
50
|
+
* Decode one typed `ATTACHMENTS` record — the live chunk or the persisted
|
|
51
|
+
* `AttachmentsData` row, which carry `sources` / `videos` / `cards` directly.
|
|
52
|
+
*
|
|
53
|
+
* GraphQL answers an unset field with `null` where the live chunk omits it, so
|
|
54
|
+
* nulls are read as absent: a reloaded source must not gain a
|
|
55
|
+
* `targetPlatform: null` ("no destination") the live one never carried.
|
|
56
|
+
*/
|
|
57
|
+
export declare function attachmentsEvent(record: unknown): SourcesEvent | null;
|
|
49
58
|
/** What one assistant answer carries: its citations and its expandable refs. */
|
|
50
59
|
export interface SourceMetadata {
|
|
51
60
|
sources?: ChatSource[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-metadata.d.ts","sourceRoot":"","sources":["../../src/chat-protocol/source-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsC7C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkBjE;AAqMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAYzE;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,CAcxG"}
|
|
1
|
+
{"version":3,"file":"source-metadata.d.ts","sourceRoot":"","sources":["../../src/chat-protocol/source-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsC7C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkBjE;AAqMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAYzE;AAaD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAErE;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,CAcxG"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunk3QAMMWV2cjs = require('./chunk-3QAMMWV2.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunkLANNTTKPcjs = require('./chunk-LANNTTKP.cjs');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
@@ -19,7 +19,7 @@ var _chunkMA4Q5RBPcjs = require('./chunk-MA4Q5RBP.cjs');
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var _chunkE7YCPY7Kcjs = require('./chunk-E7YCPY7K.cjs');
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
@@ -31,7 +31,7 @@ var _chunkZX7SCPLOcjs = require('./chunk-ZX7SCPLO.cjs');
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
var
|
|
34
|
+
var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
|
|
@@ -48,7 +48,7 @@ var _chunkJO5TLJPMcjs = require('./chunk-JO5TLJPM.cjs');
|
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
var
|
|
51
|
+
var _chunkUWQWMGJ7cjs = require('./chunk-UWQWMGJ7.cjs');
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
var _chunkKT3U3ZRPcjs = require('./chunk-KT3U3ZRP.cjs');
|
|
@@ -122,7 +122,7 @@ var TicketActionFailure = class extends Error {
|
|
|
122
122
|
function useTicketActions(options) {
|
|
123
123
|
const queryClient = _reactquery.useQueryClient.call(void 0, );
|
|
124
124
|
const ticketActionEndpoint = _nullishCoalesce(_chunkUJ7AXHRZcjs.useRequiredChatRuntime.call(void 0, ).endpoints.ticketActionUrl, () => ( TICKET_ACTION_ENDPOINT));
|
|
125
|
-
const ticketLive =
|
|
125
|
+
const ticketLive = _chunkE7YCPY7Kcjs.useOptionalTicketLive.call(void 0, );
|
|
126
126
|
const notifyTicketCreated = _optionalChain([ticketLive, 'optionalAccess', _2 => _2.notifyTicketCreated]);
|
|
127
127
|
const { prependOptimistic, removeOptimistic, removeTicketFromCache, toast: toast2, onSupportSystemDown } = options;
|
|
128
128
|
const formInFlightRef = _react.useRef.call(void 0, null);
|
|
@@ -283,10 +283,10 @@ function useTicketActions(options) {
|
|
|
283
283
|
..._optionalChain([input, 'access', _3 => _3.attachments, 'optionalAccess', _4 => _4.length]) ? { attachments: input.attachments } : {}
|
|
284
284
|
});
|
|
285
285
|
if (result.mirror_synced === false) {
|
|
286
|
-
toast2(
|
|
286
|
+
toast2(_chunkE7YCPY7Kcjs.TOAST_COPY.open_mirror_pending);
|
|
287
287
|
watchMirrorSync(placeholderId, result.ticket_id);
|
|
288
288
|
} else {
|
|
289
|
-
toast2(
|
|
289
|
+
toast2(_chunkE7YCPY7Kcjs.TOAST_COPY.open_success);
|
|
290
290
|
await queryClient.invalidateQueries({ queryKey: ["tickets"] });
|
|
291
291
|
removeOptimistic(placeholderId);
|
|
292
292
|
}
|
|
@@ -372,7 +372,7 @@ function useTicketActions(options) {
|
|
|
372
372
|
...hasText ? { content_addendum: trimmed } : {},
|
|
373
373
|
...hasFiles ? { attachments } : {}
|
|
374
374
|
},
|
|
375
|
-
|
|
375
|
+
_chunkE7YCPY7Kcjs.TOAST_COPY.comment_success,
|
|
376
376
|
"send message"
|
|
377
377
|
);
|
|
378
378
|
if (ok) {
|
|
@@ -395,13 +395,13 @@ function useTicketActions(options) {
|
|
|
395
395
|
status: "CLOSED",
|
|
396
396
|
..._optionalChain([resolution, 'optionalAccess', _6 => _6.trim, 'call', _7 => _7()]) ? { resolution: resolution.trim() } : {}
|
|
397
397
|
},
|
|
398
|
-
|
|
398
|
+
_chunkE7YCPY7Kcjs.TOAST_COPY.close_success,
|
|
399
399
|
"close ticket"
|
|
400
400
|
),
|
|
401
401
|
[updateTicket]
|
|
402
402
|
);
|
|
403
403
|
const reopenTicket = _react.useCallback.call(void 0,
|
|
404
|
-
(ticket) => updateTicket(ticket, { status: "OPEN" },
|
|
404
|
+
(ticket) => updateTicket(ticket, { status: "OPEN" }, _chunkE7YCPY7Kcjs.TOAST_COPY.reopen_success, "reopen ticket"),
|
|
405
405
|
[updateTicket]
|
|
406
406
|
);
|
|
407
407
|
return _react.useMemo.call(void 0,
|
|
@@ -616,14 +616,14 @@ function useTicketsList(filters) {
|
|
|
616
616
|
// src/components/tickets/ticket-open-form.tsx
|
|
617
617
|
|
|
618
618
|
var _jsxruntime = require('react/jsx-runtime');
|
|
619
|
-
var COUNTER_VISIBLE_AT = Math.floor(
|
|
619
|
+
var COUNTER_VISIBLE_AT = Math.floor(_chunkE7YCPY7Kcjs.TICKET_TEXT_MAX_CHARS * 0.8);
|
|
620
620
|
function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
|
|
621
621
|
const [subject, setSubject] = _react.useState.call(void 0, "");
|
|
622
622
|
const [content, setContent] = _react.useState.call(void 0, "");
|
|
623
|
-
const { attachments, readyAttachments, hasInflightUploads, addFiles, removeAttachment, clear } =
|
|
623
|
+
const { attachments, readyAttachments, hasInflightUploads, addFiles, removeAttachment, clear } = _chunkUWQWMGJ7cjs.useChatAttachments.call(void 0, );
|
|
624
624
|
const trimmedSubject = subject.trim();
|
|
625
625
|
const trimmedContent = content.trim();
|
|
626
|
-
const overCap = content.length >
|
|
626
|
+
const overCap = content.length > _chunkE7YCPY7Kcjs.TICKET_TEXT_MAX_CHARS;
|
|
627
627
|
const showCounter = content.length >= COUNTER_VISIBLE_AT;
|
|
628
628
|
const canSubmit = !isSubmitting && !supportSystemDown && !hasInflightUploads && trimmedSubject.length > 0 && trimmedContent.length > 0 && !overCap;
|
|
629
629
|
const handleSubmit = async (e) => {
|
|
@@ -640,7 +640,7 @@ function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
|
|
|
640
640
|
clear();
|
|
641
641
|
}
|
|
642
642
|
};
|
|
643
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col gap-6 md:flex-row", ...
|
|
643
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.Card, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit, className: "flex flex-col gap-6 md:flex-row", ..._chunkUWQWMGJ7cjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS, children: [
|
|
644
644
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 flex-1 md:max-w-md", children: [
|
|
645
645
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "mb-2 text-ods-text-primary text-h2", children: "Need Support?" }),
|
|
646
646
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: "Can't find what you're looking for? Submit a support ticket below \u2014 we'll follow up shortly." }),
|
|
@@ -665,7 +665,7 @@ function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
|
|
|
665
665
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
666
666
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { htmlFor: "ticket-content", className: "mb-1 block text-ods-text-primary text-h6", children: "Your Message" }),
|
|
667
667
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
668
|
-
|
|
668
|
+
_chunk5MF3NMYCcjs.Textarea,
|
|
669
669
|
{
|
|
670
670
|
id: "ticket-content",
|
|
671
671
|
placeholder: "Describe your issue or question in detail...",
|
|
@@ -679,11 +679,11 @@ function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
|
|
|
679
679
|
showCounter && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: `mt-1 text-right text-h6 ${overCap ? "text-ods-error" : "text-ods-text-secondary"}`, children: [
|
|
680
680
|
content.length,
|
|
681
681
|
"/",
|
|
682
|
-
|
|
682
|
+
_chunkE7YCPY7Kcjs.TICKET_TEXT_MAX_CHARS
|
|
683
683
|
] })
|
|
684
684
|
] }),
|
|
685
685
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
686
|
-
|
|
686
|
+
_chunkUWQWMGJ7cjs.ChatAttachmentChipStrip,
|
|
687
687
|
{
|
|
688
688
|
attachments,
|
|
689
689
|
onRemove: removeAttachment,
|
|
@@ -692,7 +692,7 @@ function TicketOpenForm({ onSubmit, isSubmitting, supportSystemDown }) {
|
|
|
692
692
|
),
|
|
693
693
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between gap-3", children: [
|
|
694
694
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
695
|
-
|
|
695
|
+
_chunkUWQWMGJ7cjs.ChatAttachmentAddButton,
|
|
696
696
|
{
|
|
697
697
|
attachmentsEnabled: !supportSystemDown,
|
|
698
698
|
attachmentsCount: attachments.length,
|
|
@@ -722,7 +722,7 @@ var _usesticktobottom = require('use-stick-to-bottom');
|
|
|
722
722
|
|
|
723
723
|
var LIST_ENGAGEMENTS_ENDPOINT = "/api/chat/agent/list-engagements";
|
|
724
724
|
function useTicketEngagements(externalTicketId, enabled = true) {
|
|
725
|
-
const identity =
|
|
725
|
+
const identity = _chunkUWQWMGJ7cjs.useChatIdentity.call(void 0, );
|
|
726
726
|
const identityKey = _nullishCoalesce(_optionalChain([identity, 'access', _21 => _21.user, 'optionalAccess', _22 => _22.email]), () => ( "anon"));
|
|
727
727
|
const listEngagementsEndpoint = _nullishCoalesce(_chunkUJ7AXHRZcjs.useRequiredChatRuntime.call(void 0, ).endpoints.listEngagementsUrl, () => ( LIST_ENGAGEMENTS_ENDPOINT));
|
|
728
728
|
const fetchable = enabled && !!externalTicketId && !externalTicketId.startsWith("temp-");
|
|
@@ -795,7 +795,7 @@ function TicketLinkedDeliveryCard({ clickup, className }) {
|
|
|
795
795
|
dateClosed: clickup.date_closed,
|
|
796
796
|
clickupUrl: _nullishCoalesce(clickup.clickup_url, () => ( ""))
|
|
797
797
|
};
|
|
798
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${_chunkETYLOZOBcjs.CONTENT_CARD_SKELETON_FRAME_CLASS} ${_nullishCoalesce(className, () => ( ""))}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
798
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${_chunkETYLOZOBcjs.CONTENT_CARD_SKELETON_FRAME_CLASS} ${_nullishCoalesce(className, () => ( ""))}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLANNTTKPcjs.DeliveryRow, { item, href: clickup.delivery_href, caption: "Linked delivery" }) });
|
|
799
799
|
}
|
|
800
800
|
|
|
801
801
|
// src/components/tickets/ticket-reply-composer.tsx
|
|
@@ -810,7 +810,7 @@ function TicketReplyComposer({
|
|
|
810
810
|
}) {
|
|
811
811
|
const [resolution, setResolution] = _react.useState.call(void 0, "");
|
|
812
812
|
const [closeDialogOpen, setCloseDialogOpen] = _react.useState.call(void 0, false);
|
|
813
|
-
const attachments =
|
|
813
|
+
const attachments = _chunkUWQWMGJ7cjs.useChatAttachments.call(void 0, );
|
|
814
814
|
const { readyAttachments, clear: clearAttachments } = attachments;
|
|
815
815
|
const ticketRef = { id: ticket.id, external_id: ticket.external_id };
|
|
816
816
|
const hasReadyFiles = readyAttachments.length > 0;
|
|
@@ -831,7 +831,7 @@ function TicketReplyComposer({
|
|
|
831
831
|
const disabled = busy || supportSystemDown;
|
|
832
832
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2", children: [
|
|
833
833
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
834
|
-
|
|
834
|
+
_chunkUWQWMGJ7cjs.ChatAttachmentChipStrip,
|
|
835
835
|
{
|
|
836
836
|
attachments: attachments.attachments,
|
|
837
837
|
onRemove: attachments.removeAttachment,
|
|
@@ -848,13 +848,13 @@ function TicketReplyComposer({
|
|
|
848
848
|
sending: busy || attachments.hasInflightUploads,
|
|
849
849
|
disabled: supportSystemDown,
|
|
850
850
|
allowEmptySend: hasReadyFiles,
|
|
851
|
-
maxLength:
|
|
851
|
+
maxLength: _chunkE7YCPY7Kcjs.TICKET_TEXT_MAX_CHARS,
|
|
852
852
|
onSend: handleSend
|
|
853
853
|
}
|
|
854
854
|
),
|
|
855
855
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full items-center gap-2", children: [
|
|
856
856
|
!supportSystemDown && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
857
|
-
|
|
857
|
+
_chunkUWQWMGJ7cjs.ChatAttachmentAddButton,
|
|
858
858
|
{
|
|
859
859
|
attachmentsEnabled: true,
|
|
860
860
|
attachmentsCount: attachments.attachments.length,
|
|
@@ -877,25 +877,25 @@ function TicketReplyComposer({
|
|
|
877
877
|
}
|
|
878
878
|
)
|
|
879
879
|
] }),
|
|
880
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
881
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
882
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
883
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
880
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.AlertDialog, { open: closeDialogOpen, onOpenChange: setCloseDialogOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk5MF3NMYCcjs.AlertDialogContent, { className: "border-ods-border bg-ods-card", children: [
|
|
881
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk5MF3NMYCcjs.AlertDialogHeader, { children: [
|
|
882
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.AlertDialogTitle, { className: "text-ods-text-primary", children: "Close this ticket?" }),
|
|
883
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.AlertDialogDescription, { className: "text-ods-text-secondary", children: "Add an optional resolution note below. You can reopen the ticket later if needed." })
|
|
884
884
|
] }),
|
|
885
885
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
886
|
-
|
|
886
|
+
_chunk5MF3NMYCcjs.Textarea,
|
|
887
887
|
{
|
|
888
888
|
value: resolution,
|
|
889
889
|
onChange: (e) => setResolution(e.target.value),
|
|
890
890
|
placeholder: "Resolution (optional)",
|
|
891
891
|
rows: 3,
|
|
892
|
-
maxLength:
|
|
892
|
+
maxLength: _chunkE7YCPY7Kcjs.TICKET_TEXT_MAX_CHARS,
|
|
893
893
|
className: "mt-2"
|
|
894
894
|
}
|
|
895
895
|
),
|
|
896
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
896
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk5MF3NMYCcjs.AlertDialogFooter, { children: [
|
|
897
897
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
898
|
-
|
|
898
|
+
_chunk5MF3NMYCcjs.AlertDialogCancel,
|
|
899
899
|
{
|
|
900
900
|
disabled: busy,
|
|
901
901
|
className: "border-ods-border bg-transparent text-ods-text-primary hover:bg-ods-border",
|
|
@@ -903,7 +903,7 @@ function TicketReplyComposer({
|
|
|
903
903
|
}
|
|
904
904
|
),
|
|
905
905
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
906
|
-
|
|
906
|
+
_chunk5MF3NMYCcjs.AlertDialogAction,
|
|
907
907
|
{
|
|
908
908
|
onClick: () => void confirmClose(),
|
|
909
909
|
disabled: busy,
|
|
@@ -965,10 +965,10 @@ var TICKET_FEED_HEIGHT = "h-[60vh] md:h-[420px]";
|
|
|
965
965
|
var TICKET_FEED_INNER = "flex flex-col gap-4 md:gap-6 px-4 md:px-6 py-4 md:py-6";
|
|
966
966
|
var TICKET_FEED_SKELETON_ROWS = 6;
|
|
967
967
|
function TicketTimelinePanel({ ticket }) {
|
|
968
|
-
const identity =
|
|
969
|
-
const externalId =
|
|
968
|
+
const identity = _chunkUWQWMGJ7cjs.useChatIdentity.call(void 0, );
|
|
969
|
+
const externalId = _chunkE7YCPY7Kcjs.isOptimistic.call(void 0, ticket) ? null : ticket.external_id;
|
|
970
970
|
const { engagements, isLoading } = useTicketEngagements(externalId, !!externalId);
|
|
971
|
-
const live =
|
|
971
|
+
const live = _chunkE7YCPY7Kcjs.useOptionalTicketLive.call(void 0, );
|
|
972
972
|
const setOpenTicketId = _optionalChain([live, 'optionalAccess', _25 => _25.setOpenTicketId]);
|
|
973
973
|
const markRead = _optionalChain([live, 'optionalAccess', _26 => _26.markRead]);
|
|
974
974
|
const markReadDebounceRef = _react.useRef.call(void 0, null);
|
|
@@ -992,7 +992,7 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
992
992
|
markReadDebounceRef.current = setTimeout(() => {
|
|
993
993
|
markReadDebounceRef.current = null;
|
|
994
994
|
void markRead(externalId);
|
|
995
|
-
},
|
|
995
|
+
}, _chunkE7YCPY7Kcjs.TICKET_MARK_READ_DEBOUNCE_MS);
|
|
996
996
|
}, [engagementsCount, externalId, markRead]);
|
|
997
997
|
const { scrollRef, contentRef } = _usesticktobottom.useStickToBottom.call(void 0, { initial: "instant", resize: "smooth" });
|
|
998
998
|
const bodyTurns = ticket.body ? ticket.body.split(TURN_SEPARATOR_RE).map((t) => t.trim()).filter(Boolean) : [];
|
|
@@ -1007,7 +1007,7 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
1007
1007
|
const customerName = (isViewerTheCustomer ? viewerName : null) || ticketCustomerName || viewerName || _optionalChain([identity, 'access', _40 => _40.user, 'optionalAccess', _41 => _41.email]) || "You";
|
|
1008
1008
|
const customerAvatar = isViewerTheCustomer ? _nullishCoalesce(_optionalChain([identity, 'access', _42 => _42.user, 'optionalAccess', _43 => _43.avatarUrl]), () => ( void 0)) : void 0;
|
|
1009
1009
|
if (isLoading) {
|
|
1010
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${TICKET_FEED_FRAME} ${TICKET_FEED_HEIGHT}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: TICKET_FEED_INNER, children: Array.from({ length: TICKET_FEED_SKELETON_ROWS }, (_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1010
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `${TICKET_FEED_FRAME} ${TICKET_FEED_HEIGHT}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: TICKET_FEED_INNER, children: Array.from({ length: TICKET_FEED_SKELETON_ROWS }, (_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUWQWMGJ7cjs.ChatMessageRowSkeleton, {}, i)) }) });
|
|
1011
1011
|
}
|
|
1012
1012
|
if (bodyTurns.length === 0 && engagements.length === 0) {
|
|
1013
1013
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -1026,7 +1026,7 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
1026
1026
|
const isResolution = turn.startsWith("[Resolution]");
|
|
1027
1027
|
const text = isResolution ? turn.replace(/^\[Resolution\]\s*/, "") : turn;
|
|
1028
1028
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1029
|
-
|
|
1029
|
+
_chunkUWQWMGJ7cjs.ChatMessageRow,
|
|
1030
1030
|
{
|
|
1031
1031
|
displayName: customerName,
|
|
1032
1032
|
avatarUrl: customerAvatar,
|
|
@@ -1055,13 +1055,13 @@ function TicketTimelinePanel({ ticket }) {
|
|
|
1055
1055
|
}
|
|
1056
1056
|
const engAttachments = mapEngagementAttachments(eng.attachments);
|
|
1057
1057
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1058
|
-
|
|
1058
|
+
_chunkUWQWMGJ7cjs.ChatMessageRow,
|
|
1059
1059
|
{
|
|
1060
1060
|
displayName: author,
|
|
1061
1061
|
avatarUrl: avatarSrc,
|
|
1062
1062
|
timeLabel: eng.createdAt ? _chunkKT3U3ZRPcjs.formatRelativeTime.call(void 0, eng.createdAt) : null,
|
|
1063
1063
|
body: stripAttachmentsPreamble(_nullishCoalesce(eng.body, () => ( ""))),
|
|
1064
|
-
footer: engAttachments.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1064
|
+
footer: engAttachments.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.TicketAttachmentsList, { attachments: engAttachments, size: "compact" }) }) : null
|
|
1065
1065
|
},
|
|
1066
1066
|
eng.id
|
|
1067
1067
|
);
|
|
@@ -1174,7 +1174,7 @@ function TicketRow({
|
|
|
1174
1174
|
onActionCollapsed,
|
|
1175
1175
|
id
|
|
1176
1176
|
}) {
|
|
1177
|
-
const optimistic =
|
|
1177
|
+
const optimistic = _chunkE7YCPY7Kcjs.isOptimistic.call(void 0, ticket);
|
|
1178
1178
|
const rowRef = _react.useRef.call(void 0, null);
|
|
1179
1179
|
const handleClick = _react.useCallback.call(void 0, () => {
|
|
1180
1180
|
onToggle(ticket.id);
|
|
@@ -1212,7 +1212,7 @@ function TicketRow({
|
|
|
1212
1212
|
};
|
|
1213
1213
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rowRef, id, className: "scroll-mt-24", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Collapsible, { open: expanded && !optimistic, className: "border-b border-ods-border last:border-b-0", children: [
|
|
1214
1214
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1215
|
-
|
|
1215
|
+
_chunkUWQWMGJ7cjs.ChatTicketItem,
|
|
1216
1216
|
{
|
|
1217
1217
|
ticket: tileData,
|
|
1218
1218
|
onClick: optimistic ? void 0 : handleClick,
|
|
@@ -1245,7 +1245,7 @@ function TicketRow({
|
|
|
1245
1245
|
// src/components/tickets/ticket-center.tsx
|
|
1246
1246
|
|
|
1247
1247
|
function TicketCenter({ toast: toast2 = _chunkJO5TLJPMcjs.toast } = {}) {
|
|
1248
|
-
const identity =
|
|
1248
|
+
const identity = _chunkUWQWMGJ7cjs.useChatIdentity.call(void 0, );
|
|
1249
1249
|
if (identity.isLoading) {
|
|
1250
1250
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketCenterSkeleton, {});
|
|
1251
1251
|
}
|
|
@@ -1343,11 +1343,11 @@ function TicketCenterAuthed({
|
|
|
1343
1343
|
) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkETYLOZOBcjs.Card, { className: "overflow-hidden", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1344
1344
|
TicketRow,
|
|
1345
1345
|
{
|
|
1346
|
-
id:
|
|
1346
|
+
id: _chunkUWQWMGJ7cjs.devSectionAnchorId.call(void 0, "ticket", ticket.external_id),
|
|
1347
1347
|
ticket,
|
|
1348
1348
|
expanded: expandedTicketId === ticket.id,
|
|
1349
1349
|
onToggle: toggleRow,
|
|
1350
|
-
busy:
|
|
1350
|
+
busy: _chunkE7YCPY7Kcjs.isOptimistic.call(void 0, ticket) ? false : actions.isRowBusy(ticket.id),
|
|
1351
1351
|
supportSystemDown,
|
|
1352
1352
|
onSendMessage: actions.sendMessage,
|
|
1353
1353
|
onClose: actions.closeTicket,
|
|
@@ -1401,7 +1401,7 @@ function HelpCenterCard({
|
|
|
1401
1401
|
onClearReplyError,
|
|
1402
1402
|
id
|
|
1403
1403
|
}) {
|
|
1404
|
-
const optimistic =
|
|
1404
|
+
const optimistic = _chunkE7YCPY7Kcjs.isOptimistic.call(void 0, ticket);
|
|
1405
1405
|
const rawStatus = (_nullishCoalesce(ticket.status, () => ( "OPEN"))).toUpperCase();
|
|
1406
1406
|
const priority = (_nullishCoalesce(ticket.priority, () => ( ""))).toUpperCase();
|
|
1407
1407
|
const relativeUpdated = ticket.hubspot_updated_at ? _chunkKT3U3ZRPcjs.formatRelativeTime.call(void 0, ticket.hubspot_updated_at) : "recently";
|
|
@@ -1423,7 +1423,7 @@ function HelpCenterCard({
|
|
|
1423
1423
|
});
|
|
1424
1424
|
return () => cancelAnimationFrame(raf);
|
|
1425
1425
|
}, [isExpanded]);
|
|
1426
|
-
const live =
|
|
1426
|
+
const live = _chunkE7YCPY7Kcjs.useOptionalTicketLive.call(void 0, );
|
|
1427
1427
|
const unreadCount = !optimistic && ticket.external_id && _optionalChain([live, 'optionalAccess', _64 => _64.unreadByTicket, 'access', _65 => _65[ticket.external_id]]) || 0;
|
|
1428
1428
|
const rightBadges = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1429
1429
|
unreadCount > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -1473,7 +1473,7 @@ function HelpCenterCard({
|
|
|
1473
1473
|
"aria-controls": isExpanded ? `help-center-drawer-${ticket.id}` : void 0,
|
|
1474
1474
|
className: "w-full p-[12px] text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-accent disabled:cursor-default content-md:p-[16px]",
|
|
1475
1475
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1476
|
-
|
|
1476
|
+
_chunkLANNTTKPcjs.DevCardRowContent,
|
|
1477
1477
|
{
|
|
1478
1478
|
title,
|
|
1479
1479
|
subtitle,
|
|
@@ -1574,7 +1574,7 @@ function HelpCenterCreateForm({
|
|
|
1574
1574
|
subjectError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { id: "help-center-subject-error", className: "mt-1 text-ods-error text-h6", children: subjectError })
|
|
1575
1575
|
] });
|
|
1576
1576
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1577
|
-
|
|
1577
|
+
_chunk3QAMMWV2cjs.ContactForm,
|
|
1578
1578
|
{
|
|
1579
1579
|
rescue: null,
|
|
1580
1580
|
title: "Open a new ticket",
|
|
@@ -1613,29 +1613,29 @@ function HelpCenterCreateForm({
|
|
|
1613
1613
|
// src/components/tickets/help-center-list.tsx
|
|
1614
1614
|
|
|
1615
1615
|
function HelpCenterList({ toast: toast2 = _chunkJO5TLJPMcjs.toast, backButton, title, shell } = {}) {
|
|
1616
|
-
const identity =
|
|
1616
|
+
const identity = _chunkUWQWMGJ7cjs.useChatIdentity.call(void 0, );
|
|
1617
1617
|
const searchParams = _chunk7DNL734Scjs.useSearchParams.call(void 0, );
|
|
1618
1618
|
const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
|
|
1619
1619
|
const pathname = _chunk7DNL734Scjs.usePathname.call(void 0, );
|
|
1620
|
-
const search = searchParams.get(
|
|
1620
|
+
const search = searchParams.get(_chunkUWQWMGJ7cjs.DEV_SECTION_PARAM_KEYS.search) || "";
|
|
1621
1621
|
const status = searchParams.get("status") || "all";
|
|
1622
|
-
const ticketParam = searchParams.get(
|
|
1622
|
+
const ticketParam = searchParams.get(_chunkUWQWMGJ7cjs.TICKET_OPEN_PARAM) || "";
|
|
1623
1623
|
const page = _chunkAECTRMGQcjs.positiveInt.call(void 0, searchParams.get("page"), 1);
|
|
1624
1624
|
if (identity.isLoading) {
|
|
1625
1625
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1626
|
-
|
|
1626
|
+
_chunkLANNTTKPcjs.DevSectionPage,
|
|
1627
1627
|
{
|
|
1628
1628
|
sectionKey: "tickets",
|
|
1629
1629
|
backButton,
|
|
1630
1630
|
title,
|
|
1631
1631
|
shell,
|
|
1632
1632
|
preControls: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HelpCenterCreateFormSkeleton, {}),
|
|
1633
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1633
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLANNTTKPcjs.DevCardRowSkeletonList, {})
|
|
1634
1634
|
}
|
|
1635
1635
|
);
|
|
1636
1636
|
}
|
|
1637
1637
|
if (identity.authTier === "anon" || !_optionalChain([identity, 'access', _66 => _66.user, 'optionalAccess', _67 => _67.email])) {
|
|
1638
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1638
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLANNTTKPcjs.DevSectionPage, { sectionKey: "tickets", backButton, title, shell, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1639
1639
|
_chunkMA4Q5RBPcjs.EmptyState,
|
|
1640
1640
|
{
|
|
1641
1641
|
type: "generic",
|
|
@@ -1687,8 +1687,8 @@ function HelpCenterListAuthed({
|
|
|
1687
1687
|
const setOpenTicket = _react.useCallback.call(void 0,
|
|
1688
1688
|
(externalId) => {
|
|
1689
1689
|
const params = new URLSearchParams(searchParams.toString());
|
|
1690
|
-
if (externalId) params.set(
|
|
1691
|
-
else params.delete(
|
|
1690
|
+
if (externalId) params.set(_chunkUWQWMGJ7cjs.TICKET_OPEN_PARAM, externalId);
|
|
1691
|
+
else params.delete(_chunkUWQWMGJ7cjs.TICKET_OPEN_PARAM);
|
|
1692
1692
|
const qs = params.toString();
|
|
1693
1693
|
router.replace(qs ? `${pathname}?${qs}` : pathname, { scroll: false });
|
|
1694
1694
|
},
|
|
@@ -1765,15 +1765,15 @@ function HelpCenterListAuthed({
|
|
|
1765
1765
|
] }),
|
|
1766
1766
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkDFQYAYBHcjs.Button, { type: "button", variant: "accent", onClick: () => refetch(), children: "Retry" })
|
|
1767
1767
|
] }),
|
|
1768
|
-
!error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1768
|
+
!error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLANNTTKPcjs.DevCardRowSkeletonList, {}) : !hasResults && isFetching ? (
|
|
1769
1769
|
// Bridge state — background refetch in flight and the
|
|
1770
1770
|
// optimistic placeholder was just removed by the mutation
|
|
1771
1771
|
// callback. Without this branch "No tickets yet" would flash
|
|
1772
1772
|
// for ~50ms between `removeOptimistic` and the server
|
|
1773
1773
|
// response landing.
|
|
1774
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1774
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLANNTTKPcjs.DevCardRowSkeletonList, { rows: 1 })
|
|
1775
1775
|
) : !hasResults ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1776
|
-
|
|
1776
|
+
_chunkLANNTTKPcjs.ListEmptyState,
|
|
1777
1777
|
{
|
|
1778
1778
|
isFiltered: hasActiveFilters,
|
|
1779
1779
|
filtered: {
|
|
@@ -1804,11 +1804,11 @@ function HelpCenterListAuthed({
|
|
|
1804
1804
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full overflow-clip rounded-[6px] border border-ods-border bg-ods-card", children: merged.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1805
1805
|
HelpCenterCard,
|
|
1806
1806
|
{
|
|
1807
|
-
id:
|
|
1807
|
+
id: _chunkUWQWMGJ7cjs.devSectionAnchorId.call(void 0, "ticket", ticket.external_id),
|
|
1808
1808
|
ticket,
|
|
1809
1809
|
expanded: expandedTicketId === ticket.id,
|
|
1810
1810
|
onToggle: toggleRow,
|
|
1811
|
-
busy:
|
|
1811
|
+
busy: _chunkE7YCPY7Kcjs.isOptimistic.call(void 0, ticket) ? false : actions.isRowBusy(ticket.id),
|
|
1812
1812
|
supportSystemDown,
|
|
1813
1813
|
onSendMessage: actions.sendMessage,
|
|
1814
1814
|
onClose: actions.closeTicket,
|
|
@@ -1822,7 +1822,7 @@ function HelpCenterListAuthed({
|
|
|
1822
1822
|
) }),
|
|
1823
1823
|
!error && totalPages > 1 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMA4Q5RBPcjs.UnifiedPagination, { currentPage: page, totalPages })
|
|
1824
1824
|
] });
|
|
1825
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1825
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLANNTTKPcjs.DevSectionPage, { sectionKey: "tickets", backButton, title, shell, preControls: form, children: body });
|
|
1826
1826
|
}
|
|
1827
1827
|
|
|
1828
1828
|
|