@flamingo-stack/openframe-frontend-core 0.0.726 → 0.0.727

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 (87) hide show
  1. package/dist/{chunk-3XDVGHL4.js → chunk-33AFAVBF.js} +2 -2
  2. package/dist/{chunk-R3BOJNZI.cjs → chunk-3D2SCG2E.cjs} +16 -16
  3. package/dist/{chunk-RSE3MU4G.cjs → chunk-3N3QA47Y.cjs} +11 -11
  4. package/dist/{chunk-COFT3YPA.js → chunk-3Q7ZNY4B.js} +5 -5
  5. package/dist/{chunk-3UZET2G7.js → chunk-4FQ5ZICE.js} +2 -2
  6. package/dist/{chunk-Q2G7NVFH.cjs → chunk-AM2RHT3H.cjs} +280 -280
  7. package/dist/{chunk-NZYMMYWN.js → chunk-AU4WWLFP.js} +1 -1
  8. package/dist/{chunk-RVSNXG6J.cjs → chunk-BKTV3VOD.cjs} +483 -418
  9. package/dist/{chunk-4ND65E2B.cjs → chunk-BMOEUIFI.cjs} +35 -35
  10. package/dist/{chunk-JYJBL7GD.js → chunk-C6Y22J32.js} +1 -1
  11. package/dist/{chunk-DXDLCYCM.cjs → chunk-CGL3TJ2A.cjs} +3 -3
  12. package/dist/{chunk-SBPPM65Y.js → chunk-CIAAU44V.js} +257 -192
  13. package/dist/{chunk-X2PG6XWF.cjs → chunk-CNBGSWLN.cjs} +9 -9
  14. package/dist/{chunk-4VRHDFF2.js → chunk-FIKAJKPE.js} +1 -1
  15. package/dist/{chunk-MZ3TMXIX.cjs → chunk-FLCYWEEB.cjs} +3 -3
  16. package/dist/{chunk-YVWJ3TRY.js → chunk-GKJFSE72.js} +5 -5
  17. package/dist/{chunk-NLWIBA55.js → chunk-HVMH67Z7.js} +3 -3
  18. package/dist/{chunk-MQ3ZM7FJ.js → chunk-J274GOBJ.js} +1 -1
  19. package/dist/{chunk-5SWQ2ZU5.cjs → chunk-MAGVU2HZ.cjs} +26 -26
  20. package/dist/{chunk-VPABPC2M.cjs → chunk-MGVT5RT6.cjs} +29 -56
  21. package/dist/{chunk-C5KMQLJP.js → chunk-N27CSEDR.js} +1 -1
  22. package/dist/{chunk-MZY6LBM5.cjs → chunk-N2PHC6RX.cjs} +3 -3
  23. package/dist/{chunk-AZKVHJA5.js → chunk-NQRFGXDG.js} +2 -2
  24. package/dist/{chunk-XEIDJ6SL.cjs → chunk-QJVG5V46.cjs} +65 -65
  25. package/dist/{chunk-Z3VAFLYK.cjs → chunk-RZFTEUV4.cjs} +9 -9
  26. package/dist/{chunk-EHYAOIE4.cjs → chunk-U6HOC7JD.cjs} +8 -8
  27. package/dist/{chunk-SCTS3EMJ.js → chunk-URDJXB75.js} +3 -3
  28. package/dist/{chunk-MM66P4X4.js → chunk-VTXIY33G.js} +22 -49
  29. package/dist/{chunk-FMFCPX3R.cjs → chunk-WWJOQGSH.cjs} +33 -33
  30. package/dist/{chunk-VKR56R3U.js → chunk-WXL5G7WC.js} +3 -3
  31. package/dist/{cloud-tenants-NH7VE7KE.js → cloud-tenants-65EUPGVC.js} +2 -2
  32. package/dist/{cloud-tenants-5JTQ2ENQ.cjs → cloud-tenants-PT5QPWWU.cjs} +3 -3
  33. package/dist/components/case-studies/index.cjs +14 -14
  34. package/dist/components/case-studies/index.js +3 -3
  35. package/dist/components/chat/assistant-ask-prompts.d.ts +34 -14
  36. package/dist/components/chat/assistant-ask-prompts.d.ts.map +1 -1
  37. package/dist/components/chat/hooks/index.d.ts +1 -1
  38. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  39. package/dist/components/chat/hooks/use-ask-prompts.d.ts +34 -7
  40. package/dist/components/chat/hooks/use-ask-prompts.d.ts.map +1 -1
  41. package/dist/components/chat/index.cjs +2 -4
  42. package/dist/components/chat/index.js +3 -5
  43. package/dist/components/contact/index.cjs +4 -4
  44. package/dist/components/contact/index.js +3 -3
  45. package/dist/components/docs/index.cjs +7 -7
  46. package/dist/components/docs/index.js +6 -6
  47. package/dist/components/embeds/index.cjs +4 -4
  48. package/dist/components/embeds/index.js +3 -3
  49. package/dist/components/faq/faq-ask-card.d.ts +8 -11
  50. package/dist/components/faq/faq-ask-card.d.ts.map +1 -1
  51. package/dist/components/faq/index.cjs +4 -4
  52. package/dist/components/faq/index.js +3 -3
  53. package/dist/components/features/index.cjs +3 -3
  54. package/dist/components/features/index.js +2 -2
  55. package/dist/components/help-center-pages/index.cjs +71 -71
  56. package/dist/components/help-center-pages/index.js +13 -13
  57. package/dist/components/index.cjs +35 -37
  58. package/dist/components/index.js +14 -16
  59. package/dist/components/meeting-scheduler/index.cjs +19 -19
  60. package/dist/components/meeting-scheduler/index.js +2 -2
  61. package/dist/components/navigation/index.cjs +6 -6
  62. package/dist/components/navigation/index.js +5 -5
  63. package/dist/components/onboarding-guides/index.cjs +5 -5
  64. package/dist/components/onboarding-guides/index.js +4 -4
  65. package/dist/components/product-demo/index.cjs +6 -6
  66. package/dist/components/product-demo/index.js +6 -6
  67. package/dist/components/tickets/index.cjs +7 -7
  68. package/dist/components/tickets/index.js +6 -6
  69. package/dist/components/ui/index.cjs +3 -5
  70. package/dist/components/ui/index.js +4 -6
  71. package/dist/{devices-OC7JEI6U.js → devices-J253LQNQ.js} +2 -2
  72. package/dist/{devices-PV76NGQO.cjs → devices-ZPVLATZA.cjs} +4 -4
  73. package/dist/index.cjs +7 -9
  74. package/dist/index.js +8 -10
  75. package/dist/{knowledge-5AYFIVKD.cjs → knowledge-3FAF5T7Q.cjs} +4 -4
  76. package/dist/{knowledge-L7WQ7IEP.js → knowledge-IMTMYURI.js} +2 -2
  77. package/dist/{logs-MGFHGVIE.js → logs-55GOSGVE.js} +2 -2
  78. package/dist/{logs-4F77RJXJ.cjs → logs-UL7BQEXP.cjs} +11 -11
  79. package/dist/{policies-WRDZFNIB.js → policies-KRDF563O.js} +2 -2
  80. package/dist/{policies-VCGM3C5Z.cjs → policies-O5F2XSCY.cjs} +7 -7
  81. package/dist/{software-update-WVG2GDZO.js → software-update-NXSC4OVM.js} +2 -2
  82. package/dist/{software-update-YD2MNL3K.cjs → software-update-R2ASCRWP.cjs} +6 -6
  83. package/package.json +1 -1
  84. package/src/components/chat/assistant-ask-prompts.tsx +84 -39
  85. package/src/components/chat/hooks/index.ts +3 -2
  86. package/src/components/chat/hooks/use-ask-prompts.ts +140 -56
  87. package/src/components/faq/faq-ask-card.tsx +22 -67
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  ShellTypeBadge,
9
9
  SoftwareInfo,
10
10
  SoftwareSourceBadge
11
- } from "./chunk-4VRHDFF2.js";
11
+ } from "./chunk-FIKAJKPE.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-SCTS3EMJ.js";
36
+ } from "./chunk-URDJXB75.js";
37
37
  import {
38
38
  MobileNavigationDropdown,
39
39
  MultiLevelNavigation,
40
40
  StickySectionNav,
41
41
  useScrollSpy,
42
42
  useSectionNavigation
43
- } from "./chunk-NZYMMYWN.js";
44
- import "./chunk-JYJBL7GD.js";
43
+ } from "./chunk-AU4WWLFP.js";
44
+ import "./chunk-C6Y22J32.js";
45
45
  import {
46
46
  AIEnrichButton,
47
47
  AIEnrichSection,
@@ -573,7 +573,7 @@ import {
573
573
  useTrackerClock,
574
574
  useWalkthroughVideo,
575
575
  usersCountLabel
576
- } from "./chunk-C5KMQLJP.js";
576
+ } from "./chunk-N27CSEDR.js";
577
577
  import {
578
578
  Board,
579
579
  BoardColumn,
@@ -1173,6 +1173,7 @@ import {
1173
1173
  tokensForBalance,
1174
1174
  upsertTrailingCompaction,
1175
1175
  useAskPrompts,
1176
+ useAskSurface,
1176
1177
  useAssistantOpen,
1177
1178
  useCaptions,
1178
1179
  useChat,
@@ -1196,8 +1197,6 @@ import {
1196
1197
  useSSE,
1197
1198
  useScriptedStream,
1198
1199
  useScrollFade,
1199
- useShownAskPromptIds,
1200
- useShownAskPrompts,
1201
1200
  useSlashCommandRegistry,
1202
1201
  useSlashCommands,
1203
1202
  useSseChatAdapter,
@@ -1210,7 +1209,7 @@ import {
1210
1209
  withFirstTouchAttribution,
1211
1210
  withWalkthroughOpenParam,
1212
1211
  writeDismissCookie
1213
- } from "./chunk-SBPPM65Y.js";
1212
+ } from "./chunk-CIAAU44V.js";
1214
1213
  import {
1215
1214
  ApprovalBatchMessage,
1216
1215
  ApprovalStatusTag,
@@ -3859,6 +3858,7 @@ export {
3859
3858
  useApiParams,
3860
3859
  useAppLayoutDrawerContainer,
3861
3860
  useAskPrompts,
3861
+ useAskSurface,
3862
3862
  useAssistantOpen,
3863
3863
  useAuthedAssetSrc,
3864
3864
  useAuthedImageSrc,
@@ -3956,8 +3956,6 @@ export {
3956
3956
  useScrollToHash,
3957
3957
  useSearch,
3958
3958
  useSectionNavigation,
3959
- useShownAskPromptIds,
3960
- useShownAskPrompts,
3961
3959
  useSlashCommandRegistry,
3962
3960
  useSlashCommands,
3963
3961
  useSmUp,
@@ -8,7 +8,7 @@ var _chunkII4QMH26cjs = require('./chunk-II4QMH26.cjs');
8
8
  var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
9
9
 
10
10
 
11
- var _chunkQ2G7NVFHcjs = require('./chunk-Q2G7NVFH.cjs');
11
+ var _chunkAM2RHT3Hcjs = require('./chunk-AM2RHT3H.cjs');
12
12
  require('./chunk-ABSWD4PQ.cjs');
13
13
  require('./chunk-HQQE74RO.cjs');
14
14
  require('./chunk-DEY6XXGO.cjs');
@@ -21,7 +21,7 @@ require('./chunk-BYUIFT7Q.cjs');
21
21
  require('./chunk-LX22Y43B.cjs');
22
22
 
23
23
 
24
- var _chunkRVSNXG6Jcjs = require('./chunk-RVSNXG6J.cjs');
24
+ var _chunkBKTV3VODcjs = require('./chunk-BKTV3VOD.cjs');
25
25
  require('./chunk-HP4UUBJC.cjs');
26
26
  require('./chunk-EWPR7662.cjs');
27
27
  require('./chunk-NJV3LIDE.cjs');
@@ -97,10 +97,10 @@ function KnowledgeScreen(_props) {
97
97
  const cast = _chunkII4QMH26cjs.useProductDemoCast.call(void 0, );
98
98
  const fixture = _react.useMemo.call(void 0, () => buildKnowledgeFixture(cast), [cast]);
99
99
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
100
- _chunkQ2G7NVFHcjs.KnowledgeBaseArticleView,
100
+ _chunkAM2RHT3Hcjs.KnowledgeBaseArticleView,
101
101
  {
102
102
  ...fixture.article,
103
- content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRVSNXG6Jcjs.SimpleMarkdownRenderer, { content: fixture.content, textSize: "compact" })
103
+ content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBKTV3VODcjs.SimpleMarkdownRenderer, { content: fixture.content, textSize: "compact" })
104
104
  }
105
105
  ) });
106
106
  }
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-CYUUHFXL.js";
9
9
  import {
10
10
  KnowledgeBaseArticleView
11
- } from "./chunk-C5KMQLJP.js";
11
+ } from "./chunk-N27CSEDR.js";
12
12
  import "./chunk-KS3YLYVL.js";
13
13
  import "./chunk-LQYXMEYF.js";
14
14
  import "./chunk-4JPLYOS6.js";
@@ -21,7 +21,7 @@ import "./chunk-3UBWDR65.js";
21
21
  import "./chunk-PLWMIU72.js";
22
22
  import {
23
23
  SimpleMarkdownRenderer
24
- } from "./chunk-SBPPM65Y.js";
24
+ } from "./chunk-CIAAU44V.js";
25
25
  import "./chunk-5D2K7TFT.js";
26
26
  import "./chunk-AFTRPEXO.js";
27
27
  import "./chunk-JXJFUGJY.js";
@@ -16,7 +16,7 @@ import {
16
16
  ToolBadge,
17
17
  logSeverityVariant,
18
18
  logSourceLabels
19
- } from "./chunk-C5KMQLJP.js";
19
+ } from "./chunk-N27CSEDR.js";
20
20
  import "./chunk-KS3YLYVL.js";
21
21
  import "./chunk-LQYXMEYF.js";
22
22
  import "./chunk-4JPLYOS6.js";
@@ -29,7 +29,7 @@ import "./chunk-3UBWDR65.js";
29
29
  import "./chunk-PLWMIU72.js";
30
30
  import {
31
31
  normalizeToolTypeWithFallback
32
- } from "./chunk-SBPPM65Y.js";
32
+ } from "./chunk-CIAAU44V.js";
33
33
  import "./chunk-5D2K7TFT.js";
34
34
  import "./chunk-AFTRPEXO.js";
35
35
  import "./chunk-JXJFUGJY.js";
@@ -16,7 +16,7 @@ var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
16
16
 
17
17
 
18
18
 
19
- var _chunkQ2G7NVFHcjs = require('./chunk-Q2G7NVFH.cjs');
19
+ var _chunkAM2RHT3Hcjs = require('./chunk-AM2RHT3H.cjs');
20
20
  require('./chunk-ABSWD4PQ.cjs');
21
21
  require('./chunk-HQQE74RO.cjs');
22
22
  require('./chunk-DEY6XXGO.cjs');
@@ -29,7 +29,7 @@ require('./chunk-BYUIFT7Q.cjs');
29
29
  require('./chunk-LX22Y43B.cjs');
30
30
 
31
31
 
32
- var _chunkRVSNXG6Jcjs = require('./chunk-RVSNXG6J.cjs');
32
+ var _chunkBKTV3VODcjs = require('./chunk-BKTV3VOD.cjs');
33
33
  require('./chunk-HP4UUBJC.cjs');
34
34
  require('./chunk-EWPR7662.cjs');
35
35
  require('./chunk-NJV3LIDE.cjs');
@@ -78,7 +78,7 @@ function entry(logId, minutesAgo, severity, toolType, device2, summary) {
78
78
  id: logId,
79
79
  logId,
80
80
  timestamp: displayTime(_chunkKHXZFLINcjs.demoMinutesAgo.call(void 0, minutesAgo)),
81
- status: { label: severity, variant: _chunkQ2G7NVFHcjs.logSeverityVariant.call(void 0, severity) },
81
+ status: { label: severity, variant: _chunkAM2RHT3Hcjs.logSeverityVariant.call(void 0, severity) },
82
82
  source: { name: toolType, toolType },
83
83
  device: device2,
84
84
  description: { title: summary }
@@ -150,13 +150,13 @@ var NO_FILTERS = {};
150
150
  var ACTION_COLUMNS = ["copy", "quickView", "open"];
151
151
  var BESIDE_DRAWER_HIDDEN = [...ACTION_COLUMNS, "tool", "source"];
152
152
  var logHref = () => "#";
153
- var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQ2G7NVFHcjs.LogCopyIconButton, {});
153
+ var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAM2RHT3Hcjs.LogCopyIconButton, {});
154
154
  function LogsScreen({ compact = false }) {
155
155
  const [dock, setDock] = _react.useState.call(void 0, null);
156
156
  const selected = LOGS_FIXTURE_SELECTED;
157
157
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full bg-ods-bg", children: [
158
158
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1 overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
159
- _chunkQ2G7NVFHcjs.LogsPageView,
159
+ _chunkAM2RHT3Hcjs.LogsPageView,
160
160
  {
161
161
  showHeader: false,
162
162
  className: "p-[var(--spacing-system-l)]",
@@ -164,7 +164,7 @@ function LogsScreen({ compact = false }) {
164
164
  onSearchChange: noop,
165
165
  onOpenFilters: noop,
166
166
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
167
- _chunkQ2G7NVFHcjs.LogsTableView,
167
+ _chunkAM2RHT3Hcjs.LogsTableView,
168
168
  {
169
169
  logs: LOGS_FIXTURE_ENTRIES,
170
170
  facets: LOGS_FIXTURE_FACETS,
@@ -178,8 +178,8 @@ function LogsScreen({ compact = false }) {
178
178
  )
179
179
  }
180
180
  ) }),
181
- !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, _chunkQ2G7NVFHcjs.AppLayoutDrawerContainerContext.Provider, { value: dock, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
182
- _chunkQ2G7NVFHcjs.LogDrawer,
181
+ !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, _chunkAM2RHT3Hcjs.AppLayoutDrawerContainerContext.Provider, { value: dock, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
182
+ _chunkAM2RHT3Hcjs.LogDrawer,
183
183
  {
184
184
  docked: true,
185
185
  isOpen: true,
@@ -191,12 +191,12 @@ function LogsScreen({ compact = false }) {
191
191
  { label: "Log ID", value: selected.logId },
192
192
  {
193
193
  label: "Source",
194
- value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQ2G7NVFHcjs.ToolBadge, { toolType: _chunkRVSNXG6Jcjs.normalizeToolTypeWithFallback.call(void 0, selected.source.toolType) })
194
+ value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAM2RHT3Hcjs.ToolBadge, { toolType: _chunkBKTV3VODcjs.normalizeToolTypeWithFallback.call(void 0, selected.source.toolType) })
195
195
  },
196
- { label: "Device", value: _chunkQ2G7NVFHcjs.logSourceLabels.call(void 0, selected.device).deviceName }
196
+ { label: "Device", value: _chunkAM2RHT3Hcjs.logSourceLabels.call(void 0, selected.device).deviceName }
197
197
  ],
198
198
  deviceCard: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
199
- _chunkQ2G7NVFHcjs.DeviceCard,
199
+ _chunkAM2RHT3Hcjs.DeviceCard,
200
200
  {
201
201
  ...LOGS_FIXTURE_DEVICE,
202
202
  actions: {
@@ -10,7 +10,7 @@ import {
10
10
  PolicySummaryCards,
11
11
  computePolicySummary,
12
12
  getPolicyTableStatus
13
- } from "./chunk-C5KMQLJP.js";
13
+ } from "./chunk-N27CSEDR.js";
14
14
  import "./chunk-KS3YLYVL.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-YYYVS7CX.js";
22
22
  import "./chunk-3UBWDR65.js";
23
23
  import "./chunk-PLWMIU72.js";
24
- import "./chunk-SBPPM65Y.js";
24
+ import "./chunk-CIAAU44V.js";
25
25
  import "./chunk-5D2K7TFT.js";
26
26
  import "./chunk-AFTRPEXO.js";
27
27
  import "./chunk-JXJFUGJY.js";
@@ -10,7 +10,7 @@ var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
10
10
 
11
11
 
12
12
 
13
- var _chunkQ2G7NVFHcjs = require('./chunk-Q2G7NVFH.cjs');
13
+ var _chunkAM2RHT3Hcjs = require('./chunk-AM2RHT3H.cjs');
14
14
  require('./chunk-ABSWD4PQ.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-A6P6DHEZ.cjs');
22
22
  require('./chunk-BYUIFT7Q.cjs');
23
23
  require('./chunk-LX22Y43B.cjs');
24
- require('./chunk-RVSNXG6J.cjs');
24
+ require('./chunk-BKTV3VOD.cjs');
25
25
  require('./chunk-HP4UUBJC.cjs');
26
26
  require('./chunk-EWPR7662.cjs');
27
27
  require('./chunk-NJV3LIDE.cjs');
@@ -83,14 +83,14 @@ var POLICIES = [
83
83
  policy("policy-local-admins", "No local admins", "No everyday account is a local administrator.", false, 0)
84
84
  ];
85
85
  var POLICIES_FIXTURE = {
86
- summary: _chunkQ2G7NVFHcjs.computePolicySummary.call(void 0, POLICIES),
86
+ summary: _chunkAM2RHT3Hcjs.computePolicySummary.call(void 0, POLICIES),
87
87
  rows: POLICIES.map((item) => ({
88
88
  id: item.id,
89
89
  name: item.name,
90
90
  description: item.description,
91
91
  critical: item.critical,
92
92
  severityLabel: item.critical ? "Critical" : "Low",
93
- status: _chunkQ2G7NVFHcjs.getPolicyTableStatus.call(void 0, item),
93
+ status: _chunkAM2RHT3Hcjs.getPolicyTableStatus.call(void 0, item),
94
94
  actions: [
95
95
  { label: "Policy Details", onClick: noop },
96
96
  { label: "Delete Policy", onClick: noop }
@@ -104,16 +104,16 @@ var POLICIES_FIXTURE = {
104
104
  var _jsxruntime = require('react/jsx-runtime');
105
105
  function PoliciesScreen({ compact = false }) {
106
106
  const table = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
107
- _chunkQ2G7NVFHcjs.PoliciesTable,
107
+ _chunkAM2RHT3Hcjs.PoliciesTable,
108
108
  {
109
109
  rows: POLICIES_FIXTURE.rows,
110
110
  rowAsLink: true,
111
- rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQ2G7NVFHcjs.DataTable.RowCount, {}),
111
+ rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAM2RHT3Hcjs.DataTable.RowCount, {}),
112
112
  emptyMessage: "No policies found."
113
113
  }
114
114
  );
115
115
  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: [
116
- !compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQ2G7NVFHcjs.PolicySummaryCards, { summary: POLICIES_FIXTURE.summary, now: POLICIES_FIXTURE.now }),
116
+ !compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAM2RHT3Hcjs.PolicySummaryCards, { summary: POLICIES_FIXTURE.summary, now: POLICIES_FIXTURE.now }),
117
117
  table
118
118
  ] });
119
119
  }
@@ -15,7 +15,7 @@ import {
15
15
  PACKAGE_SEARCH_LABEL,
16
16
  PACKAGE_SEARCH_PLACEHOLDER,
17
17
  SoftwareActionForm
18
- } from "./chunk-C5KMQLJP.js";
18
+ } from "./chunk-N27CSEDR.js";
19
19
  import "./chunk-KS3YLYVL.js";
20
20
  import "./chunk-LQYXMEYF.js";
21
21
  import "./chunk-4JPLYOS6.js";
@@ -28,7 +28,7 @@ import "./chunk-HFL2F4RM.js";
28
28
  import "./chunk-YYYVS7CX.js";
29
29
  import "./chunk-3UBWDR65.js";
30
30
  import "./chunk-PLWMIU72.js";
31
- import "./chunk-SBPPM65Y.js";
31
+ import "./chunk-CIAAU44V.js";
32
32
  import "./chunk-5D2K7TFT.js";
33
33
  import "./chunk-AFTRPEXO.js";
34
34
  import "./chunk-JXJFUGJY.js";
@@ -15,7 +15,7 @@ var _chunkKHXZFLINcjs = require('./chunk-KHXZFLIN.cjs');
15
15
 
16
16
 
17
17
 
18
- var _chunkQ2G7NVFHcjs = require('./chunk-Q2G7NVFH.cjs');
18
+ var _chunkAM2RHT3Hcjs = require('./chunk-AM2RHT3H.cjs');
19
19
  require('./chunk-ABSWD4PQ.cjs');
20
20
  require('./chunk-HQQE74RO.cjs');
21
21
  require('./chunk-DEY6XXGO.cjs');
@@ -28,7 +28,7 @@ require('./chunk-MZ4KBSH7.cjs');
28
28
  require('./chunk-A6P6DHEZ.cjs');
29
29
  require('./chunk-BYUIFT7Q.cjs');
30
30
  require('./chunk-LX22Y43B.cjs');
31
- require('./chunk-RVSNXG6J.cjs');
31
+ require('./chunk-BKTV3VOD.cjs');
32
32
  require('./chunk-HP4UUBJC.cjs');
33
33
  require('./chunk-EWPR7662.cjs');
34
34
  require('./chunk-NJV3LIDE.cjs');
@@ -118,12 +118,12 @@ function StaticPackageField({ value }) {
118
118
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
119
119
  _chunkU6LRRG2Ecjs.Autocomplete,
120
120
  {
121
- label: _chunkQ2G7NVFHcjs.PACKAGE_SEARCH_LABEL,
121
+ label: _chunkAM2RHT3Hcjs.PACKAGE_SEARCH_LABEL,
122
122
  labelVariant: "large",
123
123
  options: value ? [{ value: value.id, label: value.name, description: _nullishCoalesce(value.description, () => ( void 0)) }] : [],
124
124
  value: _nullishCoalesce(_optionalChain([value, 'optionalAccess', _ => _.id]), () => ( null)),
125
125
  onChange: noop,
126
- placeholder: _chunkQ2G7NVFHcjs.PACKAGE_SEARCH_PLACEHOLDER
126
+ placeholder: _chunkAM2RHT3Hcjs.PACKAGE_SEARCH_PLACEHOLDER
127
127
  }
128
128
  );
129
129
  }
@@ -137,7 +137,7 @@ function SoftwareUpdateScreen({ compact = false }) {
137
137
  [fixture.devices, fixture.selectedIds]
138
138
  );
139
139
  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,
140
- _chunkQ2G7NVFHcjs.SoftwareActionForm,
140
+ _chunkAM2RHT3Hcjs.SoftwareActionForm,
141
141
  {
142
142
  action: fixture.action,
143
143
  showHeader: false,
@@ -149,7 +149,7 @@ function SoftwareUpdateScreen({ compact = false }) {
149
149
  initialValues: fixture.initialValues,
150
150
  renderPackageSearch,
151
151
  renderDevicePicker: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
152
- _chunkQ2G7NVFHcjs.DeviceSelector,
152
+ _chunkAM2RHT3Hcjs.DeviceSelector,
153
153
  {
154
154
  devices: selected,
155
155
  loading: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flamingo-stack/openframe-frontend-core",
3
- "version": "0.0.726",
3
+ "version": "0.0.727",
4
4
  "description": "Shared design system and components for all Flamingo platforms",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,74 +1,119 @@
1
1
  'use client';
2
2
 
3
- import { useMemo } from 'react';
4
3
  import {
5
4
  AssistantRuntimeContext,
6
5
  useAssistantRuntime,
7
6
  type AssistantOpenRequest,
8
7
  } from '../../contexts/assistant-runtime-context';
9
- import { AskPrompts, type AskPromptsProps } from './ask-prompts';
10
- import {
11
- assistantAvailable,
12
- ASK_PROMPTS_DEFAULT_COUNT,
13
- useAskPrompts,
14
- useAssistantOpen,
15
- useShownAskPrompts,
16
- } from './hooks/use-ask-prompts';
8
+ import { AskCard, AskPrompts, type AskPromptsProps } from './ask-prompts';
9
+ import { assistantAvailable, ASK_PROMPTS_DEFAULT_COUNT, useAskSurface } from './hooks/use-ask-prompts';
10
+
11
+ /** The lib's own wording of the card, when neither the host nor the runtime states it. */
12
+ const DEFAULT_ASK_CARD = {
13
+ title: 'Still deciding?',
14
+ description: '{assistant} answers from our docs and customer stories.',
15
+ } as const;
16
+
17
+ const fillAssistant = (text: string, name: string) => text.split('{assistant}').join(name);
17
18
 
18
19
  export interface AssistantAskPromptsProps extends Pick<AskPromptsProps, 'align' | 'fadeColor' | 'className'> {
19
- /** What this row is about: any string the host's questions endpoint knows. Reported with every click. */
20
+ /**
21
+ * How the surface looks. `row` (default): the launcher, then the questions,
22
+ * for a page section. `card`: the "still deciding?" card beside a list of
23
+ * questions (a FAQ), with a title, a line of description and the launcher.
24
+ */
25
+ variant?: 'row' | 'card';
26
+ /** What this surface is about: any string the host's questions endpoint knows. Reported with every click. */
20
27
  topic?: string;
21
- /** How many questions the row offers: the same number of slots on every load. */
28
+ /** How many questions it offers: the same number of slots on every load. Absent: three (a card: the runtime's, else three). */
22
29
  count?: number;
30
+ /**
31
+ * Ids of questions never to offer. Absent: the ones the page's other "ask"
32
+ * surfaces show, which this one waits for. `null`: wait.
33
+ */
34
+ exclude?: readonly string[] | null;
35
+ /** False: the surface does not pick yet (its host is waiting for it to be reached). Default true. */
36
+ enabled?: boolean;
23
37
  /** The launcher's name. Absent: the assistant's configured name, else the launcher's default. */
24
38
  label?: string;
25
- /** Something else the row waits for (the host is still reading the name it will show). */
39
+ /** Something else the surface waits for (the host is still reading the name it will show). */
26
40
  loading?: boolean;
27
- /** How the chat is opened from THIS row. Absent: the assistant runtime's opener. */
41
+ /** A card's wording. `{assistant}` is replaced by the assistant's name. Absent: the runtime's, else the lib's. */
42
+ title?: string;
43
+ description?: string;
44
+ /** How the chat is opened from THIS surface. Absent: the assistant runtime's opener. */
28
45
  onOpen?: (request: AssistantOpenRequest) => void;
29
46
  }
30
47
 
31
48
  /**
32
- * A row of questions for the host's assistant, wired by itself: the launcher
33
- * with the assistant's name and glyph, then the questions the host picked for
34
- * this row's `topic`, each opening the chat and asking it. Everything comes
35
- * from the nearest assistant runtime (`AssistantRuntimeContext`): whether a
36
- * chat is there, the identity, the questions endpoint and the opener. While
37
- * the pick is on its way the row is the SAME block (a chip skeleton in every
38
- * slot), so nothing moves when the questions land. The row tells the page
39
- * which questions it shows, so the FAQ's card never repeats one. Nothing
40
- * renders with no chat, or once the pick has settled empty.
49
+ * THE "ask the assistant" surface, wired by itself: a row of questions in a
50
+ * page section, or the card beside a FAQ (`variant`). Everything comes from
51
+ * the nearest assistant runtime (`AssistantRuntimeContext`) through ONE hook,
52
+ * `useAskSurface`: whether a chat is there, the identity, the questions the
53
+ * host picked for this surface's `topic`, the opener and the click report.
54
+ * Surfaces of one page pick one after another and never show a question
55
+ * another already shows, so two of them may share a topic. While a pick is on
56
+ * its way the surface is the SAME block (a chip skeleton in every slot), so
57
+ * nothing moves when the questions land.
58
+ *
59
+ * Nothing renders with no chat. A row also renders nothing with no questions
60
+ * endpoint, or once its pick has settled empty; a card needs the assistant's
61
+ * name for its words, and with no endpoint is the launcher alone.
41
62
  */
42
63
  export function AssistantAskPrompts({
64
+ variant = 'row',
43
65
  topic,
44
- count = ASK_PROMPTS_DEFAULT_COUNT,
66
+ count,
67
+ exclude,
68
+ enabled,
45
69
  label,
46
70
  loading = false,
71
+ title,
72
+ description,
47
73
  onOpen,
48
74
  align,
49
75
  fadeColor,
50
76
  className,
51
77
  }: AssistantAskPromptsProps) {
78
+ const card = variant === 'card';
52
79
  const assistant = useAssistantRuntime();
53
- const { prompts, isLoading, supported } = useAskPrompts({ topic, count });
54
- const open = useAssistantOpen(topic, onOpen);
55
- const shown = assistantAvailable(assistant) && supported;
56
- // Nothing to say where the row shows nothing; `null` while its pick is on its way.
57
- useShownAskPrompts(shown ? (isLoading ? null : prompts.map(prompt => prompt.id)) : undefined);
58
- // The row's launcher opens the same chat as its questions, with the row's topic: it reads the runtime.
59
- const scoped = useMemo(() => (assistant ? { ...assistant, open } : null), [assistant, open]);
60
- if (!assistantAvailable(assistant) || !supported) return null;
80
+ const slots = count ?? (card ? assistant?.askCard?.count : undefined) ?? ASK_PROMPTS_DEFAULT_COUNT;
81
+ const ask = useAskSurface({ topic, count: slots, exclude, enabled, onOpen });
82
+ if (!assistantAvailable(assistant)) return null;
83
+
84
+ const shared = {
85
+ prompts: ask.prompts,
86
+ loading: ask.isLoading || loading,
87
+ source: assistant.source,
88
+ icon: assistant.icon,
89
+ onOpen: ask.open,
90
+ onAsk: ask.reportAsk,
91
+ };
92
+ if (card) {
93
+ const name = label ?? assistant.name;
94
+ if (!name) return null;
95
+ const words = description ?? assistant.askCard?.description ?? DEFAULT_ASK_CARD.description;
96
+ return (
97
+ <AssistantRuntimeContext.Provider value={ask.scoped}>
98
+ <AskCard
99
+ {...shared}
100
+ title={fillAssistant(title ?? assistant.askCard?.title ?? DEFAULT_ASK_CARD.title, name)}
101
+ description={words ? fillAssistant(words, name) : undefined}
102
+ // Fixed slots, one question per row: chip skeletons until the pick lands, the same box after.
103
+ count={ask.supported ? slots : 0}
104
+ label={name}
105
+ className={className}
106
+ />
107
+ </AssistantRuntimeContext.Provider>
108
+ );
109
+ }
110
+ if (!ask.supported) return null;
61
111
  return (
62
- <AssistantRuntimeContext.Provider value={scoped}>
112
+ <AssistantRuntimeContext.Provider value={ask.scoped}>
63
113
  <AskPrompts
64
- prompts={prompts}
65
- loading={isLoading || loading}
66
- count={count}
67
- source={assistant.source}
114
+ {...shared}
115
+ count={slots}
68
116
  label={label ?? assistant.name ?? undefined}
69
- icon={assistant.icon}
70
- onOpen={open}
71
- onAsk={prompt => assistant.onAsk?.({ promptId: prompt.id, topic })}
72
117
  align={align}
73
118
  fadeColor={fadeColor}
74
119
  className={className}
@@ -45,9 +45,10 @@ export {
45
45
  buildAskPromptsUrl,
46
46
  useAskPrompts,
47
47
  useAssistantOpen,
48
- useShownAskPromptIds,
49
- useShownAskPrompts,
48
+ useAskSurface,
50
49
  type AskPromptsResponse,
51
50
  type UseAskPromptsOptions,
52
51
  type UseAskPromptsResult,
52
+ type UseAskSurfaceOptions,
53
+ type UseAskSurfaceResult,
53
54
  } from './use-ask-prompts';