@flamingo-stack/openframe-frontend-core 0.0.706-snapshot.20261006181108 → 0.0.706

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 (77) hide show
  1. package/dist/chat-protocol/index.cjs +14 -23
  2. package/dist/chat-protocol/index.js +14 -23
  3. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  4. package/dist/chat-protocol/source-metadata.d.ts +2 -11
  5. package/dist/chat-protocol/source-metadata.d.ts.map +1 -1
  6. package/dist/{chunk-2YHNQAMU.js → chunk-3EZ4HHAP.js} +2 -2
  7. package/dist/{chunk-FBY4V3YS.js → chunk-3NCM4ZQB.js} +1 -1
  8. package/dist/{chunk-F4E3L3KV.cjs → chunk-3PLDQDE6.cjs} +9 -9
  9. package/dist/{chunk-4RVC6TCE.js → chunk-4CJMQLB5.js} +2 -2
  10. package/dist/{chunk-YQWTGQG5.js → chunk-4ILM7W2R.js} +1 -1
  11. package/dist/{chunk-RZNRVXHH.js → chunk-6232S532.js} +1 -1
  12. package/dist/{chunk-IBQZMRWO.js → chunk-7GEBFJT2.js} +17 -28
  13. package/dist/{chunk-AGNG62O2.cjs → chunk-7OFPU7WE.cjs} +17 -28
  14. package/dist/{chunk-O6WNIA6W.cjs → chunk-7SCNMP2B.cjs} +12 -12
  15. package/dist/{chunk-SGJP2WKD.js → chunk-BHI6GVC4.js} +3 -3
  16. package/dist/{chunk-56LOCS37.cjs → chunk-DDVBX42E.cjs} +7 -7
  17. package/dist/{chunk-3FZP73R4.js → chunk-DWPAAWMR.js} +4 -4
  18. package/dist/{chunk-HTBN3XYF.js → chunk-G6UMNAVI.js} +1 -1
  19. package/dist/{chunk-7XVBJDH7.cjs → chunk-GWQEYPYM.cjs} +312 -312
  20. package/dist/{chunk-MY3JYZQY.cjs → chunk-HZ7CBXPL.cjs} +40 -40
  21. package/dist/{chunk-632NGOIH.js → chunk-IKJA3Y7Z.js} +1 -1
  22. package/dist/{chunk-JFSLQ2XS.cjs → chunk-K6O43WDL.cjs} +32 -32
  23. package/dist/{chunk-TB5EDWRC.cjs → chunk-LVSFKENJ.cjs} +2 -2
  24. package/dist/{chunk-4UMOD5NU.cjs → chunk-M75XEEGT.cjs} +24 -24
  25. package/dist/{chunk-L3Q7R7CQ.cjs → chunk-MB4PNY7C.cjs} +2 -2
  26. package/dist/{chunk-Y5VSOYPS.js → chunk-O2RSAA5M.js} +5 -5
  27. package/dist/{chunk-E2TQZIOJ.js → chunk-PXOQIA5K.js} +2 -2
  28. package/dist/{chunk-5CMYEGHE.cjs → chunk-RTIPR53L.cjs} +70 -70
  29. package/dist/{chunk-EUSDLX5W.cjs → chunk-SEKYEWQG.cjs} +20 -20
  30. package/dist/{chunk-I43ZVJRL.cjs → chunk-STHZBOQI.cjs} +9 -9
  31. package/dist/{chunk-WXAT5C4C.cjs → chunk-SW5ZV2BN.cjs} +20 -20
  32. package/dist/{chunk-ECXW3RIH.js → chunk-T5TMCHWM.js} +2 -2
  33. package/dist/{chunk-LSQPH73L.js → chunk-TE773HEH.js} +4 -4
  34. package/dist/{chunk-STXYW25T.cjs → chunk-TQ4LB2DS.cjs} +3 -3
  35. package/dist/{chunk-54L6NMKQ.cjs → chunk-UJ33ZXDT.cjs} +4 -4
  36. package/dist/{chunk-BETJB7UV.js → chunk-VZICIQW2.js} +4 -4
  37. package/dist/{chunk-U6BWEKJC.js → chunk-YGJKKDDM.js} +1 -1
  38. package/dist/components/case-studies/index.cjs +14 -14
  39. package/dist/components/case-studies/index.js +3 -3
  40. package/dist/components/chat/index.cjs +2 -2
  41. package/dist/components/chat/index.js +1 -1
  42. package/dist/components/chat/types/message.types.d.ts +16 -20
  43. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  44. package/dist/components/chat/types/unified-chat-state.types.d.ts +1 -1
  45. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  46. package/dist/components/contact/index.cjs +4 -4
  47. package/dist/components/contact/index.js +3 -3
  48. package/dist/components/docs/index.cjs +7 -7
  49. package/dist/components/docs/index.js +6 -6
  50. package/dist/components/embeds/index.cjs +4 -4
  51. package/dist/components/embeds/index.js +3 -3
  52. package/dist/components/faq/index.cjs +4 -4
  53. package/dist/components/faq/index.js +3 -3
  54. package/dist/components/features/index.cjs +3 -3
  55. package/dist/components/features/index.js +2 -2
  56. package/dist/components/help-center-pages/index.cjs +70 -70
  57. package/dist/components/help-center-pages/index.js +14 -14
  58. package/dist/components/index.cjs +36 -36
  59. package/dist/components/index.js +13 -13
  60. package/dist/components/meeting-scheduler/index.cjs +25 -25
  61. package/dist/components/meeting-scheduler/index.js +2 -2
  62. package/dist/components/navigation/index.cjs +6 -6
  63. package/dist/components/navigation/index.js +5 -5
  64. package/dist/components/onboarding-guides/index.cjs +6 -6
  65. package/dist/components/onboarding-guides/index.js +5 -5
  66. package/dist/components/tickets/index.cjs +7 -7
  67. package/dist/components/tickets/index.js +6 -6
  68. package/dist/components/ui/index.cjs +3 -3
  69. package/dist/components/ui/index.js +2 -2
  70. package/dist/index.cjs +7 -7
  71. package/dist/index.js +6 -6
  72. package/package.json +1 -1
  73. package/src/chat-protocol/nats-decoder.ts +8 -10
  74. package/src/chat-protocol/source-metadata.ts +2 -25
  75. package/src/components/chat/types/message.types.ts +15 -21
  76. package/src/components/chat/types/unified-chat-state.types.ts +1 -1
  77. package/src/components/chat/utils/process-historical-messages.ts +4 -12
@@ -308,13 +308,15 @@ var MESSAGE_TYPE = {
308
308
  TEXT: "TEXT",
309
309
  THINKING: "THINKING",
310
310
  ASK: "ASK",
311
- /** Per-answer attachments (cited documents, videos, entity cards).
311
+ /** Per-answer source metadata (documents, videos, entity cards).
312
312
  *
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",
313
+ * TWO names for ONE payload, on purpose. `SOURCES` is the contract the
314
+ * backend is moving to; `GUIDE` is the envelope it ships in today, reused
315
+ * from Guide Mode v2 so a released frontend keeps working during the v2→v3
316
+ * rollout. Both decode through the same path, so dropping `GUIDE` later is a
317
+ * deletion here and nothing else. */
317
318
  GUIDE: "GUIDE",
319
+ SOURCES: "SOURCES",
318
320
  EXECUTING_TOOL: "EXECUTING_TOOL",
319
321
  EXECUTED_TOOL: "EXECUTED_TOOL",
320
322
  APPROVAL_REQUEST: "APPROVAL_REQUEST",
@@ -542,16 +544,6 @@ function sourceMetadataEvent(payload) {
542
544
  ...refs.length > 0 ? { refs } : {}
543
545
  };
544
546
  }
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
- }
555
547
 
556
548
  // src/chat-protocol/nats-decoder.ts
557
549
  function str(value) {
@@ -618,14 +610,13 @@ function decodeNatsChunk(chunk) {
618
610
  return { type: "thinking-delta", text: data.text, ...seq };
619
611
  }
620
612
  return null;
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: {
613
+ // Two chunk names, one payload and one decoder. `SOURCES` is the contract
614
+ // the backend is moving to; `GUIDE` is the v2 envelope it ships in during
615
+ // the rollout (see `MESSAGE_TYPE.GUIDE`). The chunk arrives BEFORE or
616
+ // between the answer's text deltas, so the reducer — not this decoder —
617
+ // owns attaching it to the right turn.
618
+ case MESSAGE_TYPE.GUIDE:
619
+ case MESSAGE_TYPE.SOURCES: {
629
620
  const event = sourceMetadataEvent(data.payload);
630
621
  return event ? { ...event, ...seq } : null;
631
622
  }
@@ -306,13 +306,15 @@ var MESSAGE_TYPE = {
306
306
  TEXT: "TEXT",
307
307
  THINKING: "THINKING",
308
308
  ASK: "ASK",
309
- /** Per-answer attachments (cited documents, videos, entity cards).
309
+ /** Per-answer source metadata (documents, videos, entity cards).
310
310
  *
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",
311
+ * TWO names for ONE payload, on purpose. `SOURCES` is the contract the
312
+ * backend is moving to; `GUIDE` is the envelope it ships in today, reused
313
+ * from Guide Mode v2 so a released frontend keeps working during the v2→v3
314
+ * rollout. Both decode through the same path, so dropping `GUIDE` later is a
315
+ * deletion here and nothing else. */
315
316
  GUIDE: "GUIDE",
317
+ SOURCES: "SOURCES",
316
318
  EXECUTING_TOOL: "EXECUTING_TOOL",
317
319
  EXECUTED_TOOL: "EXECUTED_TOOL",
318
320
  APPROVAL_REQUEST: "APPROVAL_REQUEST",
@@ -540,16 +542,6 @@ function sourceMetadataEvent(payload) {
540
542
  ...refs.length > 0 ? { refs } : {}
541
543
  };
542
544
  }
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
- }
553
545
 
554
546
  // src/chat-protocol/nats-decoder.ts
555
547
  function str(value) {
@@ -616,14 +608,13 @@ function decodeNatsChunk(chunk) {
616
608
  return { type: "thinking-delta", text: data.text, ...seq };
617
609
  }
618
610
  return null;
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: {
611
+ // Two chunk names, one payload and one decoder. `SOURCES` is the contract
612
+ // the backend is moving to; `GUIDE` is the v2 envelope it ships in during
613
+ // the rollout (see `MESSAGE_TYPE.GUIDE`). The chunk arrives BEFORE or
614
+ // between the answer's text deltas, so the reducer — not this decoder —
615
+ // owns attaching it to the right turn.
616
+ case MESSAGE_TYPE.GUIDE:
617
+ case MESSAGE_TYPE.SOURCES: {
627
618
  const event = sourceMetadataEvent(data.payload);
628
619
  return event ? { ...event, ...seq } : null;
629
620
  }
@@ -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,CAyStE"}
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,CAuStE"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Source-metadata payload → `{ sources, refs }`.
3
3
  *
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
4
+ * ONE decoder for two arrival paths: the live `GUIDE`/`SOURCES` NATS chunk and
5
+ * the 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,15 +46,6 @@ 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;
58
49
  /** What one assistant answer carries: its citations and its expandable refs. */
59
50
  export interface SourceMetadata {
60
51
  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;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
+ {"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,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  createSseSubscription
4
- } from "./chunk-HTBN3XYF.js";
4
+ } from "./chunk-G6UMNAVI.js";
5
5
  import {
6
6
  useChatIdentity
7
- } from "./chunk-IBQZMRWO.js";
7
+ } from "./chunk-7GEBFJT2.js";
8
8
  import {
9
9
  embedAuthedFetch
10
10
  } from "./chunk-FXJ3WWUB.js";
@@ -4,7 +4,7 @@ import {
4
4
  getOSLabel,
5
5
  getShellLabel,
6
6
  getToolLabel
7
- } from "./chunk-HTBN3XYF.js";
7
+ } from "./chunk-G6UMNAVI.js";
8
8
  import {
9
9
  useOnboardingState
10
10
  } from "./chunk-KUC673HM.js";
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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 _chunk7XVBJDH7cjs = require('./chunk-7XVBJDH7.cjs');
4
+ var _chunkGWQEYPYMcjs = require('./chunk-GWQEYPYM.cjs');
5
5
 
6
6
 
7
7
  var _chunkOF6GEI5Acjs = require('./chunk-OF6GEI5A.cjs');
@@ -12,7 +12,7 @@ var _chunkOF6GEI5Acjs = require('./chunk-OF6GEI5A.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunkAGNG62O2cjs = require('./chunk-AGNG62O2.cjs');
15
+ var _chunk7OFPU7WEcjs = require('./chunk-7OFPU7WE.cjs');
16
16
 
17
17
 
18
18
  var _chunkUVTD52MDcjs = require('./chunk-UVTD52MD.cjs');
@@ -39,7 +39,7 @@ var _jsxruntime = require('react/jsx-runtime');
39
39
  function DocSearchResultRow({ result, isHighlighted }) {
40
40
  const docType = _optionalChain([result, 'access', _ => _.metadata, 'optionalAccess', _2 => _2.documentType]) || void 0;
41
41
  const sourceRepo = _optionalChain([result, 'access', _3 => _3.metadata, 'optionalAccess', _4 => _4.sourceRepo]) || void 0;
42
- const { Icon: SourceIcon, label: iconLabel } = _chunkAGNG62O2cjs.resolveSourceIcon.call(void 0, {
42
+ const { Icon: SourceIcon, label: iconLabel } = _chunk7OFPU7WEcjs.resolveSourceIcon.call(void 0, {
43
43
  sourceRepo,
44
44
  documentType: docType
45
45
  });
@@ -69,7 +69,7 @@ function DocSearchBar({
69
69
  renderResult
70
70
  }) {
71
71
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
72
- _chunk7XVBJDH7cjs.SearchInput,
72
+ _chunkGWQEYPYMcjs.SearchInput,
73
73
  {
74
74
  placeholder,
75
75
  value: query,
@@ -119,7 +119,7 @@ function mapDocSearchResults(docs) {
119
119
  results.push({
120
120
  id: `group-${entry.repo}`,
121
121
  // Same table label and count as the chat's grouped chip: one owner each.
122
- title: `${_chunkAGNG62O2cjs.getSourceLabel.call(void 0, entry.repo)} ${_chunkAGNG62O2cjs.recordCountLabel.call(void 0, rows.length)}`,
122
+ title: `${_chunk7OFPU7WEcjs.getSourceLabel.call(void 0, entry.repo)} ${_chunk7OFPU7WEcjs.recordCountLabel.call(void 0, rows.length)}`,
123
123
  path: rows[0].path,
124
124
  type: "file",
125
125
  metadata: {
@@ -311,27 +311,27 @@ function useDocSearch(config) {
311
311
  case "navigate-same-tab": {
312
312
  if (wantsNewTab) {
313
313
  setKeepOpen(true);
314
- window.open(action.href, "_blank", _chunkAGNG62O2cjs.NEW_TAB_FEATURES);
314
+ window.open(action.href, "_blank", _chunk7OFPU7WEcjs.NEW_TAB_FEATURES);
315
315
  return;
316
316
  }
317
317
  setKeepOpen(false);
318
318
  const path = baseRoute && action.href.startsWith(`${baseRoute}/`) ? action.href.slice(baseRoute.length + 1) : null;
319
319
  if (path && _optionalChain([onInPageSwap, 'optionalCall', _16 => _16(path)])) return;
320
- router.push(_chunkAGNG62O2cjs.stripSameOriginToPath.call(void 0, action.href));
320
+ router.push(_chunk7OFPU7WEcjs.stripSameOriginToPath.call(void 0, action.href));
321
321
  return;
322
322
  }
323
323
  case "navigate-new-tab":
324
324
  setKeepOpen(true);
325
325
  if (_optionalChain([runtime, 'optionalAccess', _17 => _17.navigation, 'access', _18 => _18.mode]) === "embed") {
326
326
  const targetPlatform = _nullishCoalesce(_optionalChain([result, 'access', _19 => _19.metadata, 'optionalAccess', _20 => _20.targetPlatform]), () => ( null));
327
- _chunkAGNG62O2cjs.resolveExternalNavigation.call(void 0, {
327
+ _chunk7OFPU7WEcjs.resolveExternalNavigation.call(void 0, {
328
328
  href: action.href,
329
329
  targetPlatform,
330
330
  runtime
331
331
  }).open();
332
332
  return;
333
333
  }
334
- window.open(action.href, "_blank", _chunkAGNG62O2cjs.NEW_TAB_FEATURES);
334
+ window.open(action.href, "_blank", _chunk7OFPU7WEcjs.NEW_TAB_FEATURES);
335
335
  return;
336
336
  case "ask-ai":
337
337
  setKeepOpen(false);
@@ -8,7 +8,7 @@ import {
8
8
  SelectTrigger,
9
9
  SelectValue,
10
10
  Textarea
11
- } from "./chunk-HTBN3XYF.js";
11
+ } from "./chunk-G6UMNAVI.js";
12
12
  import {
13
13
  useContactSubmission,
14
14
  useHumanitySignals,
@@ -18,7 +18,7 @@ import {
18
18
  ChatAttachmentAddButton,
19
19
  ChatAttachmentChipStrip,
20
20
  useChatAttachments
21
- } from "./chunk-IBQZMRWO.js";
21
+ } from "./chunk-7GEBFJT2.js";
22
22
  import {
23
23
  SECTION_HEADING_CLASS,
24
24
  accentSentenceMarks
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  DEFAULT_FOLDER_INDEX_FILE
4
- } from "./chunk-HTBN3XYF.js";
4
+ } from "./chunk-G6UMNAVI.js";
5
5
  import {
6
6
  scrollElementIntoView
7
7
  } from "./chunk-CZ7Y7UG4.js";
@@ -10,7 +10,7 @@ import {
10
10
  StatusFilterComponent,
11
11
  TASK_TYPE_LABELS,
12
12
  TASK_TYPE_TEXT_COLORS
13
- } from "./chunk-HTBN3XYF.js";
13
+ } from "./chunk-G6UMNAVI.js";
14
14
  import {
15
15
  usePathname,
16
16
  useRouter,
@@ -966,13 +966,15 @@ var MESSAGE_TYPE = {
966
966
  TEXT: "TEXT",
967
967
  THINKING: "THINKING",
968
968
  ASK: "ASK",
969
- /** Per-answer attachments (cited documents, videos, entity cards).
969
+ /** Per-answer source metadata (documents, videos, entity cards).
970
970
  *
971
- * `ATTACHMENTS` carries `sources` / `videos` / `cards` on the record itself.
972
- * `GUIDE` is the envelope it replaced — the same arrays under `payload` —
973
- * and stays only until every backend ships `ATTACHMENTS`. */
974
- ATTACHMENTS: "ATTACHMENTS",
971
+ * TWO names for ONE payload, on purpose. `SOURCES` is the contract the
972
+ * backend is moving to; `GUIDE` is the envelope it ships in today, reused
973
+ * from Guide Mode v2 so a released frontend keeps working during the v2→v3
974
+ * rollout. Both decode through the same path, so dropping `GUIDE` later is a
975
+ * deletion here and nothing else. */
975
976
  GUIDE: "GUIDE",
977
+ SOURCES: "SOURCES",
976
978
  EXECUTING_TOOL: "EXECUTING_TOOL",
977
979
  EXECUTED_TOOL: "EXECUTED_TOOL",
978
980
  APPROVAL_REQUEST: "APPROVAL_REQUEST",
@@ -18269,16 +18271,6 @@ function sourceMetadataEvent(payload) {
18269
18271
  ...refs.length > 0 ? { refs } : {}
18270
18272
  };
18271
18273
  }
18272
- function withoutNulls(value) {
18273
- if (Array.isArray(value)) return value.map(withoutNulls);
18274
- if (!isRecord(value)) return value;
18275
- return Object.fromEntries(
18276
- Object.entries(value).filter(([, field]) => field !== null).map(([key, field]) => [key, withoutNulls(field)])
18277
- );
18278
- }
18279
- function attachmentsEvent(record) {
18280
- return sourceMetadataEvent(withoutNulls(record));
18281
- }
18282
18274
  function mergeSourceMetadata(previous, event) {
18283
18275
  const byIndex = /* @__PURE__ */ new Map();
18284
18276
  for (const source of [...previous?.sources ?? [], ...event.sources ?? []]) {
@@ -21492,14 +21484,13 @@ function decodeNatsChunk(chunk) {
21492
21484
  return { type: "thinking-delta", text: data.text, ...seq };
21493
21485
  }
21494
21486
  return null;
21495
- // The chunk arrives BEFORE or between the answer's text deltas, so the
21496
- // reducer — not this decoder — owns attaching it to the right turn.
21497
- case MESSAGE_TYPE.ATTACHMENTS: {
21498
- const event = attachmentsEvent(data);
21499
- return event ? { ...event, ...seq } : null;
21500
- }
21501
- // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
21502
- case MESSAGE_TYPE.GUIDE: {
21487
+ // Two chunk names, one payload and one decoder. `SOURCES` is the contract
21488
+ // the backend is moving to; `GUIDE` is the v2 envelope it ships in during
21489
+ // the rollout (see `MESSAGE_TYPE.GUIDE`). The chunk arrives BEFORE or
21490
+ // between the answer's text deltas, so the reducer — not this decoder —
21491
+ // owns attaching it to the right turn.
21492
+ case MESSAGE_TYPE.GUIDE:
21493
+ case MESSAGE_TYPE.SOURCES: {
21503
21494
  const event = sourceMetadataEvent(data.payload);
21504
21495
  return event ? { ...event, ...seq } : null;
21505
21496
  }
@@ -21854,13 +21845,11 @@ function decodeHistoricalMessageData(data) {
21854
21845
  return { type: "thinking-delta", text: data.text };
21855
21846
  }
21856
21847
  return null;
21857
- // Persisted attachments, through the SAME decoder the live chunk uses
21858
- // (`attachmentsEvent`). That shared parse is the whole reason a reloaded
21848
+ // Persisted source metadata, through the SAME decoder the live chunk uses
21849
+ // (`sourceMetadataEvent`). That shared parse is the whole reason a reloaded
21859
21850
  // answer renders identically to the one the reader watched arrive.
21860
- case MESSAGE_TYPE.ATTACHMENTS:
21861
- return attachmentsEvent(data);
21862
- // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
21863
21851
  case MESSAGE_TYPE.GUIDE:
21852
+ case MESSAGE_TYPE.SOURCES:
21864
21853
  return "payload" in data ? sourceMetadataEvent(data.payload) : null;
21865
21854
  // Same completeness gate as the live decoder (`decodeNatsChunk`): a
21866
21855
  // persisted row without a question or without options is not a card the
@@ -966,13 +966,15 @@ var MESSAGE_TYPE = {
966
966
  TEXT: "TEXT",
967
967
  THINKING: "THINKING",
968
968
  ASK: "ASK",
969
- /** Per-answer attachments (cited documents, videos, entity cards).
969
+ /** Per-answer source metadata (documents, videos, entity cards).
970
970
  *
971
- * `ATTACHMENTS` carries `sources` / `videos` / `cards` on the record itself.
972
- * `GUIDE` is the envelope it replaced — the same arrays under `payload` —
973
- * and stays only until every backend ships `ATTACHMENTS`. */
974
- ATTACHMENTS: "ATTACHMENTS",
971
+ * TWO names for ONE payload, on purpose. `SOURCES` is the contract the
972
+ * backend is moving to; `GUIDE` is the envelope it ships in today, reused
973
+ * from Guide Mode v2 so a released frontend keeps working during the v2→v3
974
+ * rollout. Both decode through the same path, so dropping `GUIDE` later is a
975
+ * deletion here and nothing else. */
975
976
  GUIDE: "GUIDE",
977
+ SOURCES: "SOURCES",
976
978
  EXECUTING_TOOL: "EXECUTING_TOOL",
977
979
  EXECUTED_TOOL: "EXECUTED_TOOL",
978
980
  APPROVAL_REQUEST: "APPROVAL_REQUEST",
@@ -18269,16 +18271,6 @@ function sourceMetadataEvent(payload) {
18269
18271
  ...refs.length > 0 ? { refs } : {}
18270
18272
  };
18271
18273
  }
18272
- function withoutNulls(value) {
18273
- if (Array.isArray(value)) return value.map(withoutNulls);
18274
- if (!isRecord(value)) return value;
18275
- return Object.fromEntries(
18276
- Object.entries(value).filter(([, field]) => field !== null).map(([key, field]) => [key, withoutNulls(field)])
18277
- );
18278
- }
18279
- function attachmentsEvent(record) {
18280
- return sourceMetadataEvent(withoutNulls(record));
18281
- }
18282
18274
  function mergeSourceMetadata(previous, event) {
18283
18275
  const byIndex = /* @__PURE__ */ new Map();
18284
18276
  for (const source of [..._nullishCoalesce(_optionalChain([previous, 'optionalAccess', _538 => _538.sources]), () => ( [])), ..._nullishCoalesce(event.sources, () => ( []))]) {
@@ -21492,14 +21484,13 @@ function decodeNatsChunk(chunk) {
21492
21484
  return { type: "thinking-delta", text: data.text, ...seq };
21493
21485
  }
21494
21486
  return null;
21495
- // The chunk arrives BEFORE or between the answer's text deltas, so the
21496
- // reducer — not this decoder — owns attaching it to the right turn.
21497
- case MESSAGE_TYPE.ATTACHMENTS: {
21498
- const event = attachmentsEvent(data);
21499
- return event ? { ...event, ...seq } : null;
21500
- }
21501
- // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
21502
- case MESSAGE_TYPE.GUIDE: {
21487
+ // Two chunk names, one payload and one decoder. `SOURCES` is the contract
21488
+ // the backend is moving to; `GUIDE` is the v2 envelope it ships in during
21489
+ // the rollout (see `MESSAGE_TYPE.GUIDE`). The chunk arrives BEFORE or
21490
+ // between the answer's text deltas, so the reducer — not this decoder —
21491
+ // owns attaching it to the right turn.
21492
+ case MESSAGE_TYPE.GUIDE:
21493
+ case MESSAGE_TYPE.SOURCES: {
21503
21494
  const event = sourceMetadataEvent(data.payload);
21504
21495
  return event ? { ...event, ...seq } : null;
21505
21496
  }
@@ -21854,13 +21845,11 @@ function decodeHistoricalMessageData(data) {
21854
21845
  return { type: "thinking-delta", text: data.text };
21855
21846
  }
21856
21847
  return null;
21857
- // Persisted attachments, through the SAME decoder the live chunk uses
21858
- // (`attachmentsEvent`). That shared parse is the whole reason a reloaded
21848
+ // Persisted source metadata, through the SAME decoder the live chunk uses
21849
+ // (`sourceMetadataEvent`). That shared parse is the whole reason a reloaded
21859
21850
  // answer renders identically to the one the reader watched arrive.
21860
- case MESSAGE_TYPE.ATTACHMENTS:
21861
- return attachmentsEvent(data);
21862
- // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
21863
21851
  case MESSAGE_TYPE.GUIDE:
21852
+ case MESSAGE_TYPE.SOURCES:
21864
21853
  return "payload" in data ? sourceMetadataEvent(data.payload) : null;
21865
21854
  // Same completeness gate as the live decoder (`decodeNatsChunk`): a
21866
21855
  // persisted row without a question or without options is not a card the
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- var _chunk7XVBJDH7cjs = require('./chunk-7XVBJDH7.cjs');
7
+ var _chunkGWQEYPYMcjs = require('./chunk-GWQEYPYM.cjs');
8
8
 
9
9
 
10
10
  var _chunkWCVZCGK5cjs = require('./chunk-WCVZCGK5.cjs');
@@ -128,7 +128,7 @@ var ToolBadge = ({
128
128
  className,
129
129
  iconClassName
130
130
  }) => {
131
- const text = _nullishCoalesce(label, () => ( (toolType ? _chunk7XVBJDH7cjs.getToolLabel.call(void 0, toolType) : "")));
131
+ const text = _nullishCoalesce(label, () => ( (toolType ? _chunkGWQEYPYMcjs.getToolLabel.call(void 0, toolType) : "")));
132
132
  const mark = _nullishCoalesce(icon, () => ( (toolType ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUVTD52MDcjs.ToolIcon, { toolType, className: iconClassName, size: 16 }) : null)));
133
133
  const linked = (node, linkClassName) => href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "a", { href, target: "_blank", rel: "noopener noreferrer", title: text || void 0, className: linkClassName, children: node }) : node;
134
134
  if (variant === "chip") {
@@ -162,31 +162,31 @@ var ToolBadge = ({
162
162
  // src/components/platform/ShellTypeBadge.tsx
163
163
 
164
164
  var shellIconMap = {
165
- [_chunk7XVBJDH7cjs.ShellTypeValues.POWERSHELL]: {
165
+ [_chunkGWQEYPYMcjs.ShellTypeValues.POWERSHELL]: {
166
166
  icon: _chunkVX4E6YSBcjs.PowershellLogoGreyIcon,
167
167
  props: { size: 16, className: "text-ods-text-secondary" }
168
168
  },
169
- [_chunk7XVBJDH7cjs.ShellTypeValues.CMD]: {
169
+ [_chunkGWQEYPYMcjs.ShellTypeValues.CMD]: {
170
170
  icon: _chunkLLSUVPQCcjs.CmdIcon,
171
171
  props: { size: 16, color: "var(--color-text-secondary)" }
172
172
  },
173
- [_chunk7XVBJDH7cjs.ShellTypeValues.BASH]: {
173
+ [_chunkGWQEYPYMcjs.ShellTypeValues.BASH]: {
174
174
  icon: _chunkLLSUVPQCcjs.BashIcon,
175
175
  props: { size: 16, color: "var(--color-text-secondary)" }
176
176
  },
177
- [_chunk7XVBJDH7cjs.ShellTypeValues.PYTHON]: {
177
+ [_chunkGWQEYPYMcjs.ShellTypeValues.PYTHON]: {
178
178
  icon: _chunkVX4E6YSBcjs.PythonLogoIcon,
179
179
  props: { size: 16, className: "text-ods-text-secondary" }
180
180
  },
181
- [_chunk7XVBJDH7cjs.ShellTypeValues.NUSHELL]: {
181
+ [_chunkGWQEYPYMcjs.ShellTypeValues.NUSHELL]: {
182
182
  icon: _chunkLLSUVPQCcjs.NushellIcon,
183
183
  props: { size: 16, color: "var(--color-text-secondary)" }
184
184
  },
185
- [_chunk7XVBJDH7cjs.ShellTypeValues.DENO]: {
185
+ [_chunkGWQEYPYMcjs.ShellTypeValues.DENO]: {
186
186
  icon: _chunkLLSUVPQCcjs.DenoIcon,
187
187
  props: { size: 16, color: "var(--color-text-secondary)" }
188
188
  },
189
- [_chunk7XVBJDH7cjs.ShellTypeValues.SHELL]: {
189
+ [_chunkGWQEYPYMcjs.ShellTypeValues.SHELL]: {
190
190
  icon: _chunkLLSUVPQCcjs.ShellIcon,
191
191
  props: { size: 16, color: "var(--color-text-secondary)" }
192
192
  }
@@ -197,7 +197,7 @@ var defaultIconConfig = {
197
197
  };
198
198
  var ShellTypeBadge = ({ shellType, className, iconClassName }) => {
199
199
  const normalizedType = _optionalChain([shellType, 'optionalAccess', _ => _.toUpperCase, 'call', _2 => _2()]);
200
- const label = _chunk7XVBJDH7cjs.getShellLabel.call(void 0, normalizedType);
200
+ const label = _chunkGWQEYPYMcjs.getShellLabel.call(void 0, normalizedType);
201
201
  const { icon: IconComponent, props: iconProps } = _nullishCoalesce(shellIconMap[normalizedType], () => ( defaultIconConfig));
202
202
  const defaultIconClassName = "className" in iconProps ? iconProps.className : void 0;
203
203
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex items-center gap-1", className), children: [
@@ -213,7 +213,7 @@ function formatSupportedPlatforms(platforms) {
213
213
  if (!platforms || platforms.length === 0) {
214
214
  return "All Platforms";
215
215
  }
216
- return platforms.map((platform) => _chunk7XVBJDH7cjs.getOSLabel.call(void 0, platform)).join(", ");
216
+ return platforms.map((platform) => _chunkGWQEYPYMcjs.getOSLabel.call(void 0, platform)).join(", ");
217
217
  }
218
218
  function InfoCell({ label, value, avatar, className }) {
219
219
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex min-w-0 items-center gap-2", className), children: [
@@ -233,7 +233,7 @@ var ScriptInfoSection = ({
233
233
  author,
234
234
  className
235
235
  }) => {
236
- const shellLabel = _chunk7XVBJDH7cjs.getShellLabel.call(void 0, shellType);
236
+ const shellLabel = _chunkGWQEYPYMcjs.getShellLabel.call(void 0, shellType);
237
237
  const platformsLabel = formatSupportedPlatforms(supportedPlatforms);
238
238
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "overflow-hidden rounded-[6px] border border-ods-border bg-ods-card", className), children: [
239
239
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-b border-ods-border p-4", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-1", children: [
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useOptionalTicketLive
4
- } from "./chunk-2YHNQAMU.js";
4
+ } from "./chunk-3EZ4HHAP.js";
5
5
  import {
6
6
  AppLayoutDrawerContainerContext,
7
7
  AppLayoutDrawerCoordinationContext,
@@ -14,7 +14,7 @@ import {
14
14
  UnreadDot,
15
15
  buildTicketOpenHref,
16
16
  useOptionalNotifications
17
- } from "./chunk-HTBN3XYF.js";
17
+ } from "./chunk-G6UMNAVI.js";
18
18
  import {
19
19
  resolveActiveSection,
20
20
  shortcutLabel,
@@ -28,7 +28,7 @@ import {
28
28
  import {
29
29
  OVERLAY_BACKDROP_CLASS,
30
30
  useIsHydrated
31
- } from "./chunk-IBQZMRWO.js";
31
+ } from "./chunk-7GEBFJT2.js";
32
32
  import {
33
33
  useHeaderHeight
34
34
  } from "./chunk-CZ7Y7UG4.js";
@@ -5,7 +5,7 @@ var _chunkUDFRUKLCcjs = require('./chunk-UDFRUKLC.cjs');
5
5
 
6
6
 
7
7
 
8
- var _chunk7XVBJDH7cjs = require('./chunk-7XVBJDH7.cjs');
8
+ var _chunkGWQEYPYMcjs = require('./chunk-GWQEYPYM.cjs');
9
9
 
10
10
 
11
11
  var _chunkWCVZCGK5cjs = require('./chunk-WCVZCGK5.cjs');
@@ -16,7 +16,7 @@ var _chunkBIZNSF3Ucjs = require('./chunk-BIZNSF3U.cjs');
16
16
 
17
17
 
18
18
 
19
- var _chunkAGNG62O2cjs = require('./chunk-AGNG62O2.cjs');
19
+ var _chunk7OFPU7WEcjs = require('./chunk-7OFPU7WE.cjs');
20
20
 
21
21
 
22
22
 
@@ -56,7 +56,7 @@ function FaqAccordion({ items, defaultOpenIds = [] }) {
56
56
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
57
57
  "div",
58
58
  {
59
- id: _chunkAGNG62O2cjs.faqItemAnchor.call(void 0, item.id),
59
+ id: _chunk7OFPU7WEcjs.faqItemAnchor.call(void 0, item.id),
60
60
  className: "scroll-mt-24 transition-colors hover:bg-ods-bg-hover",
61
61
  children: [
62
62
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -149,7 +149,7 @@ function groupFaqsBySection(faqs) {
149
149
  }
150
150
  let group = byName.get(name);
151
151
  if (!group) {
152
- group = { section: name, slug: _chunkAGNG62O2cjs.faqSectionSlug.call(void 0, name), items: [] };
152
+ group = { section: name, slug: _chunk7OFPU7WEcjs.faqSectionSlug.call(void 0, name), items: [] };
153
153
  byName.set(name, group);
154
154
  }
155
155
  group.items.push(item);
@@ -202,7 +202,7 @@ function GroupedFaqList({
202
202
  }, [slugKey]);
203
203
  const [hashTarget, setHashTarget] = _react.useState.call(void 0, null);
204
204
  _react.useEffect.call(void 0, () => {
205
- const refresh = () => setHashTarget(_chunkAGNG62O2cjs.parseFaqHash.call(void 0, window.location.hash));
205
+ const refresh = () => setHashTarget(_chunk7OFPU7WEcjs.parseFaqHash.call(void 0, window.location.hash));
206
206
  refresh();
207
207
  window.addEventListener("hashchange", refresh);
208
208
  return () => window.removeEventListener("hashchange", refresh);
@@ -336,7 +336,7 @@ function FaqDocumentPage({
336
336
  label: _nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _16 => _16.label]), () => ( "Back to home")),
337
337
  onClick: () => router.push(_nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _17 => _17.href]), () => ( "/")))
338
338
  };
339
- const inner = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7XVBJDH7cjs.PageLayout, { title, subtitle, backButton: backCfg, titleSize: "h1", titleWrap: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
339
+ const inner = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.PageLayout, { title, subtitle, backButton: backCfg, titleSize: "h1", titleWrap: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
340
340
  FaqSection,
341
341
  {
342
342
  initialFaqs,
@@ -349,7 +349,7 @@ function FaqDocumentPage({
349
349
  minResults
350
350
  }
351
351
  ) });
352
- return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7XVBJDH7cjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
352
+ return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGWQEYPYMcjs.PageShell, { children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: inner });
353
353
  }
354
354
 
355
355