@flamingo-stack/openframe-frontend-core 0.0.715 → 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.
Files changed (110) hide show
  1. package/dist/chat-protocol/index.cjs +23 -14
  2. package/dist/chat-protocol/index.js +23 -14
  3. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  4. package/dist/chat-protocol/source-metadata.d.ts +11 -2
  5. package/dist/chat-protocol/source-metadata.d.ts.map +1 -1
  6. package/dist/{chunk-WEEZSGFD.cjs → chunk-2AI2E3O2.cjs} +65 -65
  7. package/dist/{chunk-KSEOIICU.js → chunk-2EK7PA73.js} +3 -3
  8. package/dist/{chunk-AQI74KC7.js → chunk-2X2P3VHF.js} +5 -5
  9. package/dist/{chunk-4GFAKUHF.js → chunk-3MJPCKB6.js} +2 -2
  10. package/dist/{chunk-W4CS6UJS.cjs → chunk-3QAMMWV2.cjs} +8 -8
  11. package/dist/{chunk-JHSPIDV5.js → chunk-47FISYO5.js} +3 -3
  12. package/dist/{chunk-ZSJ6WWFH.cjs → chunk-5MF3NMYC.cjs} +451 -392
  13. package/dist/{chunk-VKIRTB7K.js → chunk-6MZI5SQ4.js} +2 -2
  14. package/dist/{chunk-2LZ3IYGT.js → chunk-B5XU6KOA.js} +2269 -2210
  15. package/dist/{chunk-QW7KTWLB.js → chunk-E6FLX4TX.js} +3 -3
  16. package/dist/{chunk-ZX7SCPLO.cjs → chunk-E7YCPY7K.cjs} +3 -3
  17. package/dist/{chunk-BIFUUH4K.js → chunk-FGKSAQR3.js} +5 -5
  18. package/dist/{chunk-EOKSKJSS.cjs → chunk-FROXS52D.cjs} +11 -11
  19. package/dist/{chunk-GXHWSAV6.cjs → chunk-J3Q53TWW.cjs} +26 -26
  20. package/dist/{chunk-ROBQ5TR7.js → chunk-JH2SIWPQ.js} +28 -17
  21. package/dist/{chunk-DDWFCWOE.js → chunk-JPD4NXH6.js} +1 -1
  22. package/dist/{chunk-LTLHCAZY.cjs → chunk-LANNTTKP.cjs} +9 -9
  23. package/dist/{chunk-JVCAK4W3.cjs → chunk-LE5WKGJV.cjs} +3 -3
  24. package/dist/{chunk-XFFIUXVI.cjs → chunk-M2A5SC6H.cjs} +9 -9
  25. package/dist/{chunk-5MMCYJAJ.cjs → chunk-NB6EWUDE.cjs} +33 -33
  26. package/dist/{chunk-H5R7U2D2.js → chunk-NZ5BHDFZ.js} +1 -1
  27. package/dist/{chunk-E25A235W.cjs → chunk-OHLBO4LM.cjs} +3 -3
  28. package/dist/{chunk-DI5VLY3G.js → chunk-PD4W2VMH.js} +1 -1
  29. package/dist/{chunk-OQVGA3YE.js → chunk-TYVS64YN.js} +2 -2
  30. package/dist/{chunk-EORJFB2Z.cjs → chunk-U3TP4UGA.cjs} +6 -6
  31. package/dist/{chunk-HETQETPV.cjs → chunk-UWQWMGJ7.cjs} +28 -17
  32. package/dist/{chunk-U4WCFIYB.cjs → chunk-VYKFM2NB.cjs} +35 -35
  33. package/dist/{chunk-YBS5QGON.js → chunk-VZI5BA4L.js} +1 -1
  34. package/dist/{chunk-VBDGMXZO.js → chunk-WH5GJSID.js} +2 -2
  35. package/dist/{chunk-S66W6HNZ.cjs → chunk-X3RVDBXU.cjs} +16 -16
  36. package/dist/{cloud-tenants-MI7APZJD.cjs → cloud-tenants-KDWTVHSI.cjs} +3 -3
  37. package/dist/{cloud-tenants-NSEVWC26.js → cloud-tenants-LNC26WY2.js} +2 -2
  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 +20 -16
  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/approval-level.d.ts +30 -22
  55. package/dist/components/features/approval-level.d.ts.map +1 -1
  56. package/dist/components/features/index.cjs +3 -5
  57. package/dist/components/features/index.js +4 -6
  58. package/dist/components/help-center-pages/index.cjs +62 -62
  59. package/dist/components/help-center-pages/index.js +13 -13
  60. package/dist/components/index.cjs +33 -33
  61. package/dist/components/index.js +16 -16
  62. package/dist/components/meeting-scheduler/index.cjs +19 -19
  63. package/dist/components/meeting-scheduler/index.js +2 -2
  64. package/dist/components/navigation/index.cjs +6 -6
  65. package/dist/components/navigation/index.js +5 -5
  66. package/dist/components/onboarding-guides/index.cjs +5 -5
  67. package/dist/components/onboarding-guides/index.js +4 -4
  68. package/dist/components/product-demo/index.cjs +6 -6
  69. package/dist/components/product-demo/index.js +6 -6
  70. package/dist/components/tickets/index.cjs +7 -7
  71. package/dist/components/tickets/index.js +6 -6
  72. package/dist/components/ui/analyzing-state.d.ts +17 -0
  73. package/dist/components/ui/analyzing-state.d.ts.map +1 -0
  74. package/dist/components/ui/feature-list.d.ts +4 -4
  75. package/dist/components/ui/feature-list.d.ts.map +1 -1
  76. package/dist/components/ui/incident-feed.d.ts +4 -1
  77. package/dist/components/ui/incident-feed.d.ts.map +1 -1
  78. package/dist/components/ui/index.cjs +5 -3
  79. package/dist/components/ui/index.d.ts +1 -0
  80. package/dist/components/ui/index.d.ts.map +1 -1
  81. package/dist/components/ui/index.js +4 -2
  82. package/dist/components/ui/playback-toggle.d.ts +10 -4
  83. package/dist/components/ui/playback-toggle.d.ts.map +1 -1
  84. package/dist/components/ui/tab-navigation.d.ts +7 -1
  85. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  86. package/dist/{devices-6NMK4EXV.cjs → devices-ATHYJUVQ.cjs} +4 -4
  87. package/dist/{devices-W3VKQEVZ.js → devices-NYCRQ3PG.js} +2 -2
  88. package/dist/index.cjs +7 -7
  89. package/dist/index.js +10 -10
  90. package/dist/{knowledge-YWCB7HNC.js → knowledge-DEKYJXBS.js} +2 -2
  91. package/dist/{knowledge-GDMGHFEC.cjs → knowledge-EHNRYT7U.cjs} +4 -4
  92. package/dist/{logs-7QDRV3GN.cjs → logs-3V765P7O.cjs} +11 -11
  93. package/dist/{logs-E742S5A2.js → logs-Q7YFIVYI.js} +2 -2
  94. package/dist/{policies-XTPAKRHI.js → policies-BTIENK5A.js} +2 -2
  95. package/dist/{policies-BEVF6AEM.cjs → policies-TXU5AIXS.cjs} +7 -7
  96. package/dist/{software-update-KPHX4XQ7.cjs → software-update-MINTICZY.cjs} +7 -7
  97. package/dist/{software-update-FXWIEKSW.js → software-update-SW2HOBHW.js} +2 -2
  98. package/package.json +1 -1
  99. package/src/chat-protocol/nats-decoder.ts +10 -8
  100. package/src/chat-protocol/source-metadata.ts +25 -2
  101. package/src/components/chat/types/message.types.ts +21 -15
  102. package/src/components/chat/types/unified-chat-state.types.ts +1 -1
  103. package/src/components/chat/utils/process-historical-messages.ts +12 -4
  104. package/src/components/features/approval-level.tsx +62 -44
  105. package/src/components/ui/analyzing-state.tsx +57 -0
  106. package/src/components/ui/feature-list.tsx +26 -16
  107. package/src/components/ui/incident-feed.tsx +6 -2
  108. package/src/components/ui/index.ts +1 -0
  109. package/src/components/ui/playback-toggle.tsx +12 -6
  110. package/src/components/ui/tab-navigation.tsx +12 -1
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  ShellTypeBadge,
9
9
  SoftwareInfo,
10
10
  SoftwareSourceBadge
11
- } from "./chunk-YBS5QGON.js";
11
+ } from "./chunk-VZI5BA4L.js";
12
12
  import {
13
13
  AppHeader,
14
14
  AppLayout,
@@ -33,15 +33,15 @@ import {
33
33
  isMegaMenu,
34
34
  navLinkLabel,
35
35
  siteNavHasMobileMenus
36
- } from "./chunk-JHSPIDV5.js";
36
+ } from "./chunk-47FISYO5.js";
37
37
  import {
38
38
  MobileNavigationDropdown,
39
39
  MultiLevelNavigation,
40
40
  StickySectionNav,
41
41
  useScrollSpy,
42
42
  useSectionNavigation
43
- } from "./chunk-H5R7U2D2.js";
44
- import "./chunk-DDWFCWOE.js";
43
+ } from "./chunk-NZ5BHDFZ.js";
44
+ import "./chunk-JPD4NXH6.js";
45
45
  import {
46
46
  AIEnrichButton,
47
47
  AIEnrichSection,
@@ -73,6 +73,7 @@ import {
73
73
  AlertDialogTrigger,
74
74
  AlertTitle,
75
75
  AllowedDomainsInput,
76
+ AnalyzingState,
76
77
  AnnouncementBarView,
77
78
  AppLayoutDrawerBody,
78
79
  AppLayoutDrawerClose,
@@ -85,8 +86,7 @@ import {
85
86
  AppLayoutDrawerTrigger,
86
87
  AppStoreBadge,
87
88
  AppWindowFrame,
88
- ApprovalLevelControl,
89
- ApprovalLevelMark,
89
+ ApprovalLevelView,
90
90
  ApprovalRequestNotificationTile,
91
91
  ArrayEntryManager,
92
92
  ArticleDetailLayout,
@@ -565,7 +565,7 @@ import {
565
565
  useTrackerClock,
566
566
  useWalkthroughVideo,
567
567
  usersCountLabel
568
- } from "./chunk-2LZ3IYGT.js";
568
+ } from "./chunk-B5XU6KOA.js";
569
569
  import {
570
570
  Board,
571
571
  BoardColumn,
@@ -1173,7 +1173,7 @@ import {
1173
1173
  withFirstTouchAttribution,
1174
1174
  withWalkthroughOpenParam,
1175
1175
  writeDismissCookie
1176
- } from "./chunk-ROBQ5TR7.js";
1176
+ } from "./chunk-JH2SIWPQ.js";
1177
1177
  import {
1178
1178
  ApprovalBatchMessage,
1179
1179
  ApprovalStatusTag,
@@ -2129,6 +2129,7 @@ export {
2129
2129
  AlertTitle,
2130
2130
  AlertTriangleIcon,
2131
2131
  AllowedDomainsInput,
2132
+ AnalyzingState,
2132
2133
  AnnouncementBarView,
2133
2134
  AppHeader,
2134
2135
  AppLayout,
@@ -2145,8 +2146,7 @@ export {
2145
2146
  AppWindowFrame,
2146
2147
  AppleIcon,
2147
2148
  ApprovalBatchMessage,
2148
- ApprovalLevelControl,
2149
- ApprovalLevelMark,
2149
+ ApprovalLevelView,
2150
2150
  ApprovalRequestMessage,
2151
2151
  ApprovalRequestNotificationTile,
2152
2152
  ApprovalStatusTag,
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-CYUUHFXL.js";
9
9
  import {
10
10
  KnowledgeBaseArticleView
11
- } from "./chunk-2LZ3IYGT.js";
11
+ } from "./chunk-B5XU6KOA.js";
12
12
  import "./chunk-ILNN6QRW.js";
13
13
  import "./chunk-LQYXMEYF.js";
14
14
  import "./chunk-4JPLYOS6.js";
@@ -21,7 +21,7 @@ import "./chunk-G3GRYDMS.js";
21
21
  import "./chunk-PLWMIU72.js";
22
22
  import {
23
23
  SimpleMarkdownRenderer
24
- } from "./chunk-ROBQ5TR7.js";
24
+ } from "./chunk-JH2SIWPQ.js";
25
25
  import "./chunk-2NASBO7O.js";
26
26
  import "./chunk-KBJJQFYU.js";
27
27
  import "./chunk-P3JMAMHP.js";
@@ -8,7 +8,7 @@ var _chunkII4QMH26cjs = require('./chunk-II4QMH26.cjs');
8
8
  var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
9
9
 
10
10
 
11
- var _chunkZSJ6WWFHcjs = require('./chunk-ZSJ6WWFH.cjs');
11
+ var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
12
12
  require('./chunk-4HJRHEXD.cjs');
13
13
  require('./chunk-HQQE74RO.cjs');
14
14
  require('./chunk-DEY6XXGO.cjs');
@@ -21,7 +21,7 @@ require('./chunk-AUMKE74M.cjs');
21
21
  require('./chunk-LX22Y43B.cjs');
22
22
 
23
23
 
24
- var _chunkHETQETPVcjs = require('./chunk-HETQETPV.cjs');
24
+ var _chunkUWQWMGJ7cjs = require('./chunk-UWQWMGJ7.cjs');
25
25
  require('./chunk-KT3U3ZRP.cjs');
26
26
  require('./chunk-DC4RTYWK.cjs');
27
27
  require('./chunk-FFT56TYB.cjs');
@@ -96,10 +96,10 @@ function KnowledgeScreen(_props) {
96
96
  const cast = _chunkII4QMH26cjs.useProductDemoCast.call(void 0, );
97
97
  const fixture = _react.useMemo.call(void 0, () => buildKnowledgeFixture(cast), [cast]);
98
98
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
99
- _chunkZSJ6WWFHcjs.KnowledgeBaseArticleView,
99
+ _chunk5MF3NMYCcjs.KnowledgeBaseArticleView,
100
100
  {
101
101
  ...fixture.article,
102
- content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHETQETPVcjs.SimpleMarkdownRenderer, { content: fixture.content, textSize: "compact" })
102
+ content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUWQWMGJ7cjs.SimpleMarkdownRenderer, { content: fixture.content, textSize: "compact" })
103
103
  }
104
104
  ) });
105
105
  }
@@ -16,7 +16,7 @@ var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
16
16
 
17
17
 
18
18
 
19
- var _chunkZSJ6WWFHcjs = require('./chunk-ZSJ6WWFH.cjs');
19
+ var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
20
20
  require('./chunk-4HJRHEXD.cjs');
21
21
  require('./chunk-HQQE74RO.cjs');
22
22
  require('./chunk-DEY6XXGO.cjs');
@@ -29,7 +29,7 @@ require('./chunk-AUMKE74M.cjs');
29
29
  require('./chunk-LX22Y43B.cjs');
30
30
 
31
31
 
32
- var _chunkHETQETPVcjs = require('./chunk-HETQETPV.cjs');
32
+ var _chunkUWQWMGJ7cjs = require('./chunk-UWQWMGJ7.cjs');
33
33
  require('./chunk-KT3U3ZRP.cjs');
34
34
  require('./chunk-DC4RTYWK.cjs');
35
35
  require('./chunk-FFT56TYB.cjs');
@@ -77,7 +77,7 @@ function entry(logId, minutesAgo, severity, toolType, device2, summary) {
77
77
  id: logId,
78
78
  logId,
79
79
  timestamp: displayTime(_chunkKHXZFLINcjs.demoMinutesAgo.call(void 0, minutesAgo)),
80
- status: { label: severity, variant: _chunkZSJ6WWFHcjs.logSeverityVariant.call(void 0, severity) },
80
+ status: { label: severity, variant: _chunk5MF3NMYCcjs.logSeverityVariant.call(void 0, severity) },
81
81
  source: { name: toolType, toolType },
82
82
  device: device2,
83
83
  description: { title: summary }
@@ -149,13 +149,13 @@ var NO_FILTERS = {};
149
149
  var ACTION_COLUMNS = ["copy", "quickView", "open"];
150
150
  var BESIDE_DRAWER_HIDDEN = [...ACTION_COLUMNS, "tool", "source"];
151
151
  var logHref = () => "#";
152
- var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.LogCopyIconButton, {});
152
+ var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.LogCopyIconButton, {});
153
153
  function LogsScreen({ compact = false }) {
154
154
  const [dock, setDock] = _react.useState.call(void 0, null);
155
155
  const selected = LOGS_FIXTURE_SELECTED;
156
156
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full bg-ods-bg", children: [
157
157
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1 overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
158
- _chunkZSJ6WWFHcjs.LogsPageView,
158
+ _chunk5MF3NMYCcjs.LogsPageView,
159
159
  {
160
160
  showHeader: false,
161
161
  className: "p-[var(--spacing-system-l)]",
@@ -163,7 +163,7 @@ function LogsScreen({ compact = false }) {
163
163
  onSearchChange: noop,
164
164
  onOpenFilters: noop,
165
165
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
166
- _chunkZSJ6WWFHcjs.LogsTableView,
166
+ _chunk5MF3NMYCcjs.LogsTableView,
167
167
  {
168
168
  logs: LOGS_FIXTURE_ENTRIES,
169
169
  facets: LOGS_FIXTURE_FACETS,
@@ -177,8 +177,8 @@ function LogsScreen({ compact = false }) {
177
177
  )
178
178
  }
179
179
  ) }),
180
- !compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: setDock, className: "relative w-[calc(400px+var(--spacing-system-m))] shrink-0", children: dock && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.AppLayoutDrawerContainerContext.Provider, { value: dock, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
181
- _chunkZSJ6WWFHcjs.LogDrawer,
180
+ !compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: setDock, className: "relative w-[calc(400px+var(--spacing-system-m))] shrink-0", children: dock && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.AppLayoutDrawerContainerContext.Provider, { value: dock, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
181
+ _chunk5MF3NMYCcjs.LogDrawer,
182
182
  {
183
183
  docked: true,
184
184
  isOpen: true,
@@ -190,12 +190,12 @@ function LogsScreen({ compact = false }) {
190
190
  { label: "Log ID", value: selected.logId },
191
191
  {
192
192
  label: "Source",
193
- value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.ToolBadge, { toolType: _chunkHETQETPVcjs.normalizeToolTypeWithFallback.call(void 0, selected.source.toolType) })
193
+ value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.ToolBadge, { toolType: _chunkUWQWMGJ7cjs.normalizeToolTypeWithFallback.call(void 0, selected.source.toolType) })
194
194
  },
195
- { label: "Device", value: _chunkZSJ6WWFHcjs.logSourceLabels.call(void 0, selected.device).deviceName }
195
+ { label: "Device", value: _chunk5MF3NMYCcjs.logSourceLabels.call(void 0, selected.device).deviceName }
196
196
  ],
197
197
  deviceCard: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
198
- _chunkZSJ6WWFHcjs.DeviceCard,
198
+ _chunk5MF3NMYCcjs.DeviceCard,
199
199
  {
200
200
  ...LOGS_FIXTURE_DEVICE,
201
201
  actions: {
@@ -16,7 +16,7 @@ import {
16
16
  ToolBadge,
17
17
  logSeverityVariant,
18
18
  logSourceLabels
19
- } from "./chunk-2LZ3IYGT.js";
19
+ } from "./chunk-B5XU6KOA.js";
20
20
  import "./chunk-ILNN6QRW.js";
21
21
  import "./chunk-LQYXMEYF.js";
22
22
  import "./chunk-4JPLYOS6.js";
@@ -29,7 +29,7 @@ import "./chunk-G3GRYDMS.js";
29
29
  import "./chunk-PLWMIU72.js";
30
30
  import {
31
31
  normalizeToolTypeWithFallback
32
- } from "./chunk-ROBQ5TR7.js";
32
+ } from "./chunk-JH2SIWPQ.js";
33
33
  import "./chunk-2NASBO7O.js";
34
34
  import "./chunk-KBJJQFYU.js";
35
35
  import "./chunk-P3JMAMHP.js";
@@ -10,7 +10,7 @@ import {
10
10
  PolicySummaryCards,
11
11
  computePolicySummary,
12
12
  getPolicyTableStatus
13
- } from "./chunk-2LZ3IYGT.js";
13
+ } from "./chunk-B5XU6KOA.js";
14
14
  import "./chunk-ILNN6QRW.js";
15
15
  import "./chunk-LQYXMEYF.js";
16
16
  import "./chunk-4JPLYOS6.js";
@@ -21,7 +21,7 @@ import "./chunk-HFL2F4RM.js";
21
21
  import "./chunk-WSDT7LYL.js";
22
22
  import "./chunk-G3GRYDMS.js";
23
23
  import "./chunk-PLWMIU72.js";
24
- import "./chunk-ROBQ5TR7.js";
24
+ import "./chunk-JH2SIWPQ.js";
25
25
  import "./chunk-2NASBO7O.js";
26
26
  import "./chunk-KBJJQFYU.js";
27
27
  import "./chunk-P3JMAMHP.js";
@@ -10,7 +10,7 @@ var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
10
10
 
11
11
 
12
12
 
13
- var _chunkZSJ6WWFHcjs = require('./chunk-ZSJ6WWFH.cjs');
13
+ var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
14
14
  require('./chunk-4HJRHEXD.cjs');
15
15
  require('./chunk-HQQE74RO.cjs');
16
16
  require('./chunk-DEY6XXGO.cjs');
@@ -21,7 +21,7 @@ require('./chunk-MZ4KBSH7.cjs');
21
21
  require('./chunk-WBNAEYTQ.cjs');
22
22
  require('./chunk-AUMKE74M.cjs');
23
23
  require('./chunk-LX22Y43B.cjs');
24
- require('./chunk-HETQETPV.cjs');
24
+ require('./chunk-UWQWMGJ7.cjs');
25
25
  require('./chunk-KT3U3ZRP.cjs');
26
26
  require('./chunk-DC4RTYWK.cjs');
27
27
  require('./chunk-FFT56TYB.cjs');
@@ -82,14 +82,14 @@ var POLICIES = [
82
82
  policy("policy-local-admins", "No local admins", "No everyday account is a local administrator.", false, 0)
83
83
  ];
84
84
  var POLICIES_FIXTURE = {
85
- summary: _chunkZSJ6WWFHcjs.computePolicySummary.call(void 0, POLICIES),
85
+ summary: _chunk5MF3NMYCcjs.computePolicySummary.call(void 0, POLICIES),
86
86
  rows: POLICIES.map((item) => ({
87
87
  id: item.id,
88
88
  name: item.name,
89
89
  description: item.description,
90
90
  critical: item.critical,
91
91
  severityLabel: item.critical ? "Critical" : "Low",
92
- status: _chunkZSJ6WWFHcjs.getPolicyTableStatus.call(void 0, item),
92
+ status: _chunk5MF3NMYCcjs.getPolicyTableStatus.call(void 0, item),
93
93
  actions: [
94
94
  { label: "Policy Details", onClick: noop },
95
95
  { label: "Delete Policy", onClick: noop }
@@ -103,16 +103,16 @@ var POLICIES_FIXTURE = {
103
103
  var _jsxruntime = require('react/jsx-runtime');
104
104
  function PoliciesScreen({ compact = false }) {
105
105
  const table = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
106
- _chunkZSJ6WWFHcjs.PoliciesTable,
106
+ _chunk5MF3NMYCcjs.PoliciesTable,
107
107
  {
108
108
  rows: POLICIES_FIXTURE.rows,
109
109
  rowAsLink: true,
110
- rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.DataTable.RowCount, {}),
110
+ rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.DataTable.RowCount, {}),
111
111
  emptyMessage: "No policies found."
112
112
  }
113
113
  );
114
114
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full flex-col gap-[var(--spacing-system-l)] bg-ods-bg p-[var(--spacing-system-l)]", children: [
115
- !compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZSJ6WWFHcjs.PolicySummaryCards, { summary: POLICIES_FIXTURE.summary, now: POLICIES_FIXTURE.now }),
115
+ !compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5MF3NMYCcjs.PolicySummaryCards, { summary: POLICIES_FIXTURE.summary, now: POLICIES_FIXTURE.now }),
116
116
  table
117
117
  ] });
118
118
  }
@@ -16,7 +16,7 @@ var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
16
16
 
17
17
 
18
18
 
19
- var _chunkZSJ6WWFHcjs = require('./chunk-ZSJ6WWFH.cjs');
19
+ var _chunk5MF3NMYCcjs = require('./chunk-5MF3NMYC.cjs');
20
20
  require('./chunk-4HJRHEXD.cjs');
21
21
  require('./chunk-HQQE74RO.cjs');
22
22
  require('./chunk-DEY6XXGO.cjs');
@@ -27,7 +27,7 @@ require('./chunk-MZ4KBSH7.cjs');
27
27
  require('./chunk-WBNAEYTQ.cjs');
28
28
  require('./chunk-AUMKE74M.cjs');
29
29
  require('./chunk-LX22Y43B.cjs');
30
- require('./chunk-HETQETPV.cjs');
30
+ require('./chunk-UWQWMGJ7.cjs');
31
31
  require('./chunk-KT3U3ZRP.cjs');
32
32
  require('./chunk-DC4RTYWK.cjs');
33
33
  require('./chunk-FFT56TYB.cjs');
@@ -114,14 +114,14 @@ var noop = () => {
114
114
  var HIDDEN_WHEN_COMPACT = ["organization"];
115
115
  function StaticPackageField({ value }) {
116
116
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
117
- _chunkZSJ6WWFHcjs.Autocomplete,
117
+ _chunk5MF3NMYCcjs.Autocomplete,
118
118
  {
119
- label: _chunkZSJ6WWFHcjs.PACKAGE_SEARCH_LABEL,
119
+ label: _chunk5MF3NMYCcjs.PACKAGE_SEARCH_LABEL,
120
120
  labelVariant: "large",
121
121
  options: value ? [{ value: value.id, label: value.name, description: _nullishCoalesce(value.description, () => ( void 0)) }] : [],
122
122
  value: _nullishCoalesce(_optionalChain([value, 'optionalAccess', _ => _.id]), () => ( null)),
123
123
  onChange: noop,
124
- placeholder: _chunkZSJ6WWFHcjs.PACKAGE_SEARCH_PLACEHOLDER
124
+ placeholder: _chunk5MF3NMYCcjs.PACKAGE_SEARCH_PLACEHOLDER
125
125
  }
126
126
  );
127
127
  }
@@ -135,7 +135,7 @@ function SoftwareUpdateScreen({ compact = false }) {
135
135
  [fixture.devices, fixture.selectedIds]
136
136
  );
137
137
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
138
- _chunkZSJ6WWFHcjs.SoftwareActionForm,
138
+ _chunk5MF3NMYCcjs.SoftwareActionForm,
139
139
  {
140
140
  action: fixture.action,
141
141
  showHeader: false,
@@ -147,7 +147,7 @@ function SoftwareUpdateScreen({ compact = false }) {
147
147
  initialValues: fixture.initialValues,
148
148
  renderPackageSearch,
149
149
  renderDevicePicker: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
150
- _chunkZSJ6WWFHcjs.DeviceSelector,
150
+ _chunk5MF3NMYCcjs.DeviceSelector,
151
151
  {
152
152
  devices: selected,
153
153
  loading: false,
@@ -16,7 +16,7 @@ import {
16
16
  PACKAGE_SEARCH_LABEL,
17
17
  PACKAGE_SEARCH_PLACEHOLDER,
18
18
  SoftwareActionForm
19
- } from "./chunk-2LZ3IYGT.js";
19
+ } from "./chunk-B5XU6KOA.js";
20
20
  import "./chunk-ILNN6QRW.js";
21
21
  import "./chunk-LQYXMEYF.js";
22
22
  import "./chunk-4JPLYOS6.js";
@@ -27,7 +27,7 @@ import "./chunk-HFL2F4RM.js";
27
27
  import "./chunk-WSDT7LYL.js";
28
28
  import "./chunk-G3GRYDMS.js";
29
29
  import "./chunk-PLWMIU72.js";
30
- import "./chunk-ROBQ5TR7.js";
30
+ import "./chunk-JH2SIWPQ.js";
31
31
  import "./chunk-2NASBO7O.js";
32
32
  import "./chunk-KBJJQFYU.js";
33
33
  import "./chunk-P3JMAMHP.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flamingo-stack/openframe-frontend-core",
3
- "version": "0.0.715",
3
+ "version": "0.0.717",
4
4
  "description": "Shared design system and components for all Flamingo platforms",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,7 +20,7 @@ import { MESSAGE_TYPE } from '../components/chat/types/message.types';
20
20
  import type { AskOptionData } from '../components/chat/types/message.types';
21
21
  import { ESCALATION_STATE, escalationResolvedStatus } from './events';
22
22
  import type { ApprovalToolCall, ChatStreamEvent } from './events';
23
- import { sourceMetadataEvent } from './source-metadata';
23
+ import { attachmentsEvent, sourceMetadataEvent } from './source-metadata';
24
24
  import { isRecord } from './wire-narrow';
25
25
 
26
26
  /** Minimal structural view of a NATS chunk (see `ChunkData` in
@@ -122,13 +122,15 @@ export function decodeNatsChunk(chunk: unknown): ChatStreamEvent | null {
122
122
  }
123
123
  return null;
124
124
 
125
- // Two chunk names, one payload and one decoder. `SOURCES` is the contract
126
- // the backend is moving to; `GUIDE` is the v2 envelope it ships in during
127
- // the rollout (see `MESSAGE_TYPE.GUIDE`). The chunk arrives BEFORE or
128
- // between the answer's text deltas, so the reducer — not this decoder —
129
- // owns attaching it to the right turn.
130
- case MESSAGE_TYPE.GUIDE:
131
- case MESSAGE_TYPE.SOURCES: {
125
+ // The chunk arrives BEFORE or between the answer's text deltas, so the
126
+ // reducer — not this decoder — owns attaching it to the right turn.
127
+ case MESSAGE_TYPE.ATTACHMENTS: {
128
+ const event = attachmentsEvent(data);
129
+ return event ? { ...event, ...seq } : null;
130
+ }
131
+
132
+ // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
133
+ case MESSAGE_TYPE.GUIDE: {
132
134
  const event = sourceMetadataEvent(data.payload);
133
135
  return event ? { ...event, ...seq } : null;
134
136
  }
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Source-metadata payload → `{ sources, refs }`.
3
3
  *
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
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.
@@ -313,6 +313,29 @@ export function sourceMetadataEvent(payload: unknown): SourcesEvent | null {
313
313
  };
314
314
  }
315
315
 
316
+ /** `null` fields dropped, at any depth. */
317
+ function withoutNulls(value: unknown): unknown {
318
+ if (Array.isArray(value)) return value.map(withoutNulls);
319
+ if (!isRecord(value)) return value;
320
+ return Object.fromEntries(
321
+ Object.entries(value)
322
+ .filter(([, field]) => field !== null)
323
+ .map(([key, field]) => [key, withoutNulls(field)]),
324
+ );
325
+ }
326
+
327
+ /**
328
+ * Decode one typed `ATTACHMENTS` record — the live chunk or the persisted
329
+ * `AttachmentsData` row, which carry `sources` / `videos` / `cards` directly.
330
+ *
331
+ * GraphQL answers an unset field with `null` where the live chunk omits it, so
332
+ * nulls are read as absent: a reloaded source must not gain a
333
+ * `targetPlatform: null` ("no destination") the live one never carried.
334
+ */
335
+ export function attachmentsEvent(record: unknown): SourcesEvent | null {
336
+ return sourceMetadataEvent(withoutNulls(record));
337
+ }
338
+
316
339
  /** What one assistant answer carries: its citations and its expandable refs. */
317
340
  export interface SourceMetadata {
318
341
  sources?: ChatSource[];
@@ -12,15 +12,13 @@ export const MESSAGE_TYPE = {
12
12
  TEXT: 'TEXT',
13
13
  THINKING: 'THINKING',
14
14
  ASK: 'ASK',
15
- /** Per-answer source metadata (documents, videos, entity cards).
15
+ /** Per-answer attachments (cited documents, videos, entity cards).
16
16
  *
17
- * TWO names for ONE payload, on purpose. `SOURCES` is the contract the
18
- * backend is moving to; `GUIDE` is the envelope it ships in today, reused
19
- * from Guide Mode v2 so a released frontend keeps working during the v2→v3
20
- * rollout. Both decode through the same path, so dropping `GUIDE` later is a
21
- * deletion here and nothing else. */
17
+ * `ATTACHMENTS` carries `sources` / `videos` / `cards` on the record itself.
18
+ * `GUIDE` is the envelope it replaced — the same arrays under `payload` —
19
+ * and stays only until every backend ships `ATTACHMENTS`. */
20
+ ATTACHMENTS: 'ATTACHMENTS',
22
21
  GUIDE: 'GUIDE',
23
- SOURCES: 'SOURCES',
24
22
  EXECUTING_TOOL: 'EXECUTING_TOOL',
25
23
  EXECUTED_TOOL: 'EXECUTED_TOOL',
26
24
  APPROVAL_REQUEST: 'APPROVAL_REQUEST',
@@ -412,7 +410,7 @@ export interface ThinkingMessageData extends MessageDataBase {
412
410
  *
413
411
  * Lives here, beside `Message`, because BOTH transports produce it now: the SSE
414
412
  * adapter reads it off the per-turn metadata frame, and the NATS path decodes it
415
- * out of a `GUIDE`/`SOURCES` chunk. It used to be declared inside
413
+ * out of an `ATTACHMENTS` chunk. It used to be declared inside
416
414
  * `use-sse-chat-adapter`, which made "a Guide answer's citations" structurally a
417
415
  * property of one transport — `use-sse-chat-adapter` still re-exports the name
418
416
  * so existing imports keep working.
@@ -451,13 +449,20 @@ export interface ChatSource {
451
449
  label?: string;
452
450
  }
453
451
 
454
- /** Persisted source-metadata row. `payload` is the SAME object the live chunk
455
- * carries, so history and realtime share one decoder (`sourceMetadataEvent`)
456
- * and cannot drift apart. Left as an open record here rather than typed
457
- * structurally: it is unvalidated wire data, and the decoder is what turns it
458
- * into `ChatSource[]` / `ChatRef[]`. */
452
+ /** Persisted attachments row (GraphQL `AttachmentsData`). The arrays are the
453
+ * SAME ones the live chunk carries, so history and realtime share one decoder
454
+ * (`attachmentsEvent`) and cannot drift apart. Left untyped: it is unvalidated
455
+ * wire data, and the decoder is what turns it into `ChatSource[]` / `ChatRef[]`. */
456
+ export interface AttachmentsMessageData extends MessageDataBase {
457
+ type: 'ATTACHMENTS';
458
+ sources?: unknown;
459
+ videos?: unknown;
460
+ cards?: unknown;
461
+ }
462
+
463
+ /** The envelope `ATTACHMENTS` replaced: the same arrays under `payload`. */
459
464
  export interface SourceMetadataMessageData extends MessageDataBase {
460
- type: 'GUIDE' | 'SOURCES';
465
+ type: 'GUIDE';
461
466
  payload?: unknown;
462
467
  }
463
468
 
@@ -603,6 +608,7 @@ export type MessageData =
603
608
  | TextMessageData
604
609
  | ThinkingMessageData
605
610
  | AskMessageData
611
+ | AttachmentsMessageData
606
612
  | SourceMetadataMessageData
607
613
  | ExecutingToolMessageData
608
614
  | ExecutedToolMessageData
@@ -654,7 +660,7 @@ export interface ProcessedMessage {
654
660
  * Absent when the source row(s) carried no seq. */
655
661
  streamSeq?: number;
656
662
  /** Documents this answer cited — see `Message.sources`, the same field.
657
- * Replayed from the turn's persisted `GUIDE`/`SOURCES` row, so a reloaded
663
+ * Replayed from the turn's persisted `ATTACHMENTS` row, so a reloaded
658
664
  * answer carries the citations the live one did. */
659
665
  sources?: ChatSource[];
660
666
  /** Entity references this answer's metadata described — see `Message.refs`. */
@@ -239,7 +239,7 @@ export interface UnifiedChatMessage {
239
239
  /**
240
240
  * Documents this answer cited, rendered as chips beneath it. Produced by
241
241
  * BOTH transports now — SSE reads them off the per-turn metadata frame, NATS
242
- * decodes them out of a `GUIDE`/`SOURCES` chunk.
242
+ * decodes them out of an `ATTACHMENTS` chunk.
243
243
  */
244
244
  sources?: ChatSource[];
245
245
  /**
@@ -34,7 +34,12 @@ import {
34
34
  // One normalizer for ask rows, shared with the live decoder — history and the
35
35
  // stream must agree on which options are usable.
36
36
  import { normalizeAskOptions } from '../../../chat-protocol/nats-decoder';
37
- import { mergeSourceMetadata, sourceMetadataEvent, type SourceMetadata } from '../../../chat-protocol/source-metadata';
37
+ import {
38
+ attachmentsEvent,
39
+ mergeSourceMetadata,
40
+ sourceMetadataEvent,
41
+ type SourceMetadata,
42
+ } from '../../../chat-protocol/source-metadata';
38
43
  import { applyApprovalStatusToSegment } from '../stream/message-mutations';
39
44
  import {
40
45
  MESSAGE_TYPE,
@@ -122,11 +127,14 @@ export function decodeHistoricalMessageData(data: MessageData): ChatStreamEvent
122
127
  }
123
128
  return null;
124
129
 
125
- // Persisted source metadata, through the SAME decoder the live chunk uses
126
- // (`sourceMetadataEvent`). That shared parse is the whole reason a reloaded
130
+ // Persisted attachments, through the SAME decoder the live chunk uses
131
+ // (`attachmentsEvent`). That shared parse is the whole reason a reloaded
127
132
  // answer renders identically to the one the reader watched arrive.
133
+ case MESSAGE_TYPE.ATTACHMENTS:
134
+ return attachmentsEvent(data);
135
+
136
+ // The envelope `ATTACHMENTS` replaced (see `MESSAGE_TYPE.GUIDE`).
128
137
  case MESSAGE_TYPE.GUIDE:
129
- case MESSAGE_TYPE.SOURCES:
130
138
  return 'payload' in data ? sourceMetadataEvent(data.payload) : null;
131
139
 
132
140
  // Same completeness gate as the live decoder (`decodeNatsChunk`): a