@flamingo-stack/openframe-frontend-core 0.0.737 → 0.0.739

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 (146) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-AZL332TK.cjs → chunk-2QMBXGMQ.cjs} +15 -2
  3. package/dist/{chunk-HZJRERJW.cjs → chunk-3RFQPQ7Z.cjs} +3 -3
  4. package/dist/{chunk-YADG5Q7C.cjs → chunk-63N4FN5V.cjs} +3 -3
  5. package/dist/{chunk-FTTLBMHU.cjs → chunk-7ZFCR7UY.cjs} +2 -2
  6. package/dist/{chunk-MJGX357L.cjs → chunk-B27QEHYR.cjs} +2 -2
  7. package/dist/{chunk-VRNNIV5Y.cjs → chunk-B3XBJCOD.cjs} +9 -9
  8. package/dist/{chunk-VL4JKXU2.cjs → chunk-BV5WZVOP.cjs} +243 -243
  9. package/dist/{chunk-KVGBDWYV.cjs → chunk-CUDTMCXK.cjs} +36 -36
  10. package/dist/{chunk-L4ZNR5V7.cjs → chunk-DSVNFRY5.cjs} +87 -87
  11. package/dist/{chunk-LW3QSP47.cjs → chunk-DTLHY2ZF.cjs} +27 -27
  12. package/dist/{chunk-4ISP3XP4.cjs → chunk-EGN4I5Q7.cjs} +76 -76
  13. package/dist/{chunk-XPP7VCNY.cjs → chunk-ENCAIAMY.cjs} +10 -10
  14. package/dist/{chunk-FA2LATDM.cjs → chunk-FL6UO7IR.cjs} +4 -4
  15. package/dist/{chunk-ZRYKDN2J.cjs → chunk-GABDE3FM.cjs} +24 -24
  16. package/dist/{chunk-MYBTNOS6.cjs → chunk-GSWQZX23.cjs} +2 -2
  17. package/dist/{chunk-L535OD7V.cjs → chunk-HF7Z2E4W.cjs} +2 -2
  18. package/dist/chunk-HOTM4UM6.cjs +84 -0
  19. package/dist/{chunk-EAY6ZUES.cjs → chunk-I5MSCD57.cjs} +2 -2
  20. package/dist/{chunk-FCGLSWKR.cjs → chunk-IFS4AH77.cjs} +19 -1
  21. package/dist/{chunk-MGW5DO6P.cjs → chunk-KLI4OSRA.cjs} +7 -7
  22. package/dist/{chunk-O4MG7FXW.cjs → chunk-NX6JQT25.cjs} +6 -6
  23. package/dist/{chunk-ZJNYWNCB.cjs → chunk-O67V3HJR.cjs} +29 -29
  24. package/dist/{chunk-DUXLZPMJ.cjs → chunk-PQ2M7P2U.cjs} +7 -7
  25. package/dist/{chunk-SGVQO5J6.cjs → chunk-Q7GG3WC5.cjs} +26 -26
  26. package/dist/{chunk-TJQYX3QC.cjs → chunk-RGFT3P3L.cjs} +97 -97
  27. package/dist/{chunk-4FJZ7RJD.cjs → chunk-S2CA5WE4.cjs} +161 -93
  28. package/dist/{chunk-E2JCZU36.cjs → chunk-SB4VWA5V.cjs} +1044 -857
  29. package/dist/{chunk-XLSVQJBA.cjs → chunk-SFY4UYPY.cjs} +44 -44
  30. package/dist/{chunk-4RMLAHU2.cjs → chunk-TF7J6VXG.cjs} +20 -20
  31. package/dist/{chunk-CM35DLKS.cjs → chunk-UI3HROSI.cjs} +35 -35
  32. package/dist/{chunk-DA4VS6TS.cjs → chunk-UXFJXIUT.cjs} +4 -4
  33. package/dist/{chunk-N6YOOGCD.cjs → chunk-UYP3G6PB.cjs} +12 -12
  34. package/dist/{chunk-URIJ6YUG.cjs → chunk-V2ZFH42N.cjs} +22 -17
  35. package/dist/{chunk-77SD7RXY.cjs → chunk-WBANGORJ.cjs} +7 -7
  36. package/dist/{chunk-VYODTHMR.cjs → chunk-WMKNZI4G.cjs} +54 -54
  37. package/dist/{chunk-EX2GYIGW.cjs → chunk-YRE3O65E.cjs} +12 -12
  38. package/dist/{chunk-EJOXXJJB.cjs → chunk-YXKB5WRE.cjs} +95 -104
  39. package/dist/{cloud-tenants-IWQ5FFLY.cjs → cloud-tenants-QSFSO3PA.cjs} +20 -20
  40. package/dist/components/agent-identity.d.ts +8 -1
  41. package/dist/components/agent-identity.d.ts.map +1 -1
  42. package/dist/components/agent-identity.js +6 -1
  43. package/dist/components/calendar.cjs +4 -4
  44. package/dist/components/case-studies/index.cjs +32 -32
  45. package/dist/components/chat/chat-turn.d.ts +23 -0
  46. package/dist/components/chat/chat-turn.d.ts.map +1 -0
  47. package/dist/components/chat/chat-turn.js +30 -0
  48. package/dist/components/chat/index.cjs +18 -16
  49. package/dist/components/chat/index.d.ts +1 -0
  50. package/dist/components/chat/index.d.ts.map +1 -1
  51. package/dist/components/chat/index.js +1 -0
  52. package/dist/components/contact/index.cjs +21 -21
  53. package/dist/components/docs/index.cjs +24 -24
  54. package/dist/components/embeds/index.cjs +21 -21
  55. package/dist/components/faq/faq-section.d.ts.map +1 -1
  56. package/dist/components/faq/faq-section.js +9 -4
  57. package/dist/components/faq/index.cjs +22 -22
  58. package/dist/components/features/auth/auth-benefits-panel.d.ts +3 -5
  59. package/dist/components/features/auth/auth-benefits-panel.d.ts.map +1 -1
  60. package/dist/components/features/auth/auth-benefits-panel.js +3 -19
  61. package/dist/components/features/conversation-card.d.ts +12 -4
  62. package/dist/components/features/conversation-card.d.ts.map +1 -1
  63. package/dist/components/features/conversation-card.js +30 -38
  64. package/dist/components/features/index.cjs +20 -20
  65. package/dist/components/features/walkthrough-video.d.ts +3 -0
  66. package/dist/components/features/walkthrough-video.d.ts.map +1 -1
  67. package/dist/components/features/walkthrough-video.js +36 -13
  68. package/dist/components/help-center-pages/index.cjs +127 -127
  69. package/dist/components/index.cjs +114 -98
  70. package/dist/components/meeting-scheduler/index.cjs +67 -67
  71. package/dist/components/navigation/index.cjs +23 -23
  72. package/dist/components/onboarding-guides/index.cjs +23 -23
  73. package/dist/components/platform/ToolBadge.d.ts.map +1 -1
  74. package/dist/components/platform/ToolBadge.js +4 -3
  75. package/dist/components/product-demo/index.cjs +8 -8
  76. package/dist/components/related-content/index.cjs +12 -12
  77. package/dist/components/tickets/index.cjs +26 -26
  78. package/dist/components/ui/app-window-frame.d.ts +7 -1
  79. package/dist/components/ui/app-window-frame.d.ts.map +1 -1
  80. package/dist/components/ui/app-window-frame.js +10 -2
  81. package/dist/components/ui/benefit-list.d.ts +42 -0
  82. package/dist/components/ui/benefit-list.d.ts.map +1 -0
  83. package/dist/components/ui/benefit-list.js +62 -0
  84. package/dist/components/ui/button/button.d.ts +1 -0
  85. package/dist/components/ui/button/button.d.ts.map +1 -1
  86. package/dist/components/ui/button/button.js +15 -2
  87. package/dist/components/ui/dropdown-button.d.ts +20 -2
  88. package/dist/components/ui/dropdown-button.d.ts.map +1 -1
  89. package/dist/components/ui/dropdown-button.js +57 -1
  90. package/dist/components/ui/file-manager/index.cjs +11 -11
  91. package/dist/components/ui/index.cjs +34 -20
  92. package/dist/components/ui/index.d.ts +3 -0
  93. package/dist/components/ui/index.d.ts.map +1 -1
  94. package/dist/components/ui/index.js +3 -0
  95. package/dist/components/ui/leader-row.d.ts +17 -0
  96. package/dist/components/ui/leader-row.d.ts.map +1 -0
  97. package/dist/components/ui/leader-row.js +14 -0
  98. package/dist/components/ui/strip-card.d.ts +23 -0
  99. package/dist/components/ui/strip-card.d.ts.map +1 -0
  100. package/dist/components/ui/strip-card.js +56 -0
  101. package/dist/{devices-OUHGWA6Y.cjs → devices-C7XLWJFC.cjs} +21 -21
  102. package/dist/embed-shims/index.cjs +2 -2
  103. package/dist/embed-shims/next-image.cjs +2 -2
  104. package/dist/embed-shims/next-image.d.ts.map +1 -1
  105. package/dist/embed-shims/next-image.js +6 -2
  106. package/dist/{embeddable-chat-U3C4WWB7.cjs → embeddable-chat-6JKKFQEB.cjs} +89 -89
  107. package/dist/hooks/index.cjs +3 -3
  108. package/dist/index.cjs +46 -25
  109. package/dist/{knowledge-3ZASPWMF.cjs → knowledge-3QKWTOE7.cjs} +21 -21
  110. package/dist/{logs-E6Y54P6K.cjs → logs-JXD75NR4.cjs} +29 -29
  111. package/dist/{policies-LAV75B5B.cjs → policies-ZPN53PFQ.cjs} +24 -24
  112. package/dist/{remote-session-Z4YZFG5E.cjs → remote-session-DNFZ5OLY.cjs} +10 -10
  113. package/dist/{software-update-2CAL3AMJ.cjs → software-update-CRSIBS3K.cjs} +24 -24
  114. package/dist/{tickets-board-JOSYLOS7.cjs → tickets-board-CKZRB6YV.cjs} +12 -12
  115. package/dist/utils/demo-clock.d.ts +22 -0
  116. package/dist/utils/demo-clock.d.ts.map +1 -0
  117. package/dist/utils/demo-clock.js +40 -0
  118. package/dist/utils/identity-tint.d.ts +13 -0
  119. package/dist/utils/identity-tint.d.ts.map +1 -0
  120. package/dist/utils/identity-tint.js +14 -0
  121. package/dist/utils/index.cjs +54 -0
  122. package/dist/utils/index.d.ts +2 -0
  123. package/dist/utils/index.d.ts.map +1 -1
  124. package/dist/utils/index.js +2 -0
  125. package/dist/{video-file-player-6NWGXZ3W.cjs → video-file-player-ZH2ILAPO.cjs} +12 -12
  126. package/package.json +1 -1
  127. package/src/components/agent-identity.tsx +12 -1
  128. package/src/components/chat/chat-turn.tsx +52 -0
  129. package/src/components/chat/index.ts +1 -0
  130. package/src/components/faq/faq-section.tsx +4 -1
  131. package/src/components/features/auth/auth-benefits-panel.tsx +5 -32
  132. package/src/components/features/conversation-card.tsx +48 -46
  133. package/src/components/features/walkthrough-video.tsx +59 -18
  134. package/src/components/platform/ToolBadge.tsx +4 -3
  135. package/src/components/ui/app-window-frame.tsx +18 -2
  136. package/src/components/ui/benefit-list.tsx +97 -0
  137. package/src/components/ui/button/button.tsx +14 -1
  138. package/src/components/ui/dropdown-button.tsx +73 -1
  139. package/src/components/ui/index.ts +3 -0
  140. package/src/components/ui/leader-row.tsx +28 -0
  141. package/src/components/ui/strip-card.tsx +68 -0
  142. package/src/embed-shims/next-image.tsx +15 -4
  143. package/src/utils/demo-clock.ts +62 -0
  144. package/src/utils/identity-tint.ts +23 -0
  145. package/src/utils/index.ts +2 -0
  146. package/dist/chunk-UR4K2NSL.cjs +0 -69
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-clock.d.ts","sourceRoot":"","sources":["../../src/utils/demo-clock.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oHAAoH;IACpH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,EAAE,CAWrF"}
@@ -0,0 +1,40 @@
1
+ function hashSeed(seed) {
2
+ let hash = 2166136261;
3
+ for (let i = 0; i < seed.length; i++) {
4
+ hash ^= seed.charCodeAt(i);
5
+ hash = Math.imul(hash, 16777619);
6
+ }
7
+ return hash >>> 0;
8
+ }
9
+ function seededRandom(seed) {
10
+ let state = hashSeed(seed);
11
+ return () => {
12
+ state = state + 1831565813 >>> 0;
13
+ let t = state;
14
+ t = Math.imul(t ^ t >>> 15, t | 1);
15
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
16
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
17
+ };
18
+ }
19
+ function formatDemoClock(minutesOfDay) {
20
+ const minutes = (Math.floor(minutesOfDay) % 1440 + 1440) % 1440;
21
+ const hour24 = Math.floor(minutes / 60);
22
+ const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;
23
+ return `${hour12}:${String(minutes % 60).padStart(2, "0")} ${hour24 < 12 ? "AM" : "PM"}`;
24
+ }
25
+ function demoClockTimes(seed, options = {}) {
26
+ const { count = 2, fromHour = 8, toHour = 18, maxGapMinutes = 3 } = options;
27
+ const random = seededRandom(seed);
28
+ const span = Math.max(1, (toHour - fromHour) * 60);
29
+ let minutes = fromHour * 60 + Math.floor(random() * span);
30
+ const times = [];
31
+ for (let i = 0; i < Math.max(0, count); i++) {
32
+ if (i > 0) minutes += Math.floor(random() * (maxGapMinutes + 1));
33
+ times.push(formatDemoClock(minutes));
34
+ }
35
+ return times;
36
+ }
37
+ export {
38
+ demoClockTimes,
39
+ formatDemoClock
40
+ };
@@ -0,0 +1,13 @@
1
+ import type { CSSProperties } from 'react';
2
+ /**
3
+ * A surface tinted by an identity colour (an agent's): its border mixed from
4
+ * the colour, a faint wash of it over the page surface and a glow of it in the
5
+ * far corner. THE tint of every card and window that belongs to one agent, so
6
+ * they read as that agent's at a glance and all read alike.
7
+ *
8
+ * `accent` is a CSS colour (the hex an agent's identity stores). The surface
9
+ * under it should be the page surface (`bg-ods-bg`). Undefined gives no style,
10
+ * so a surface with no agent keeps its own border and background.
11
+ */
12
+ export declare function identityTint(accent: string | null | undefined): CSSProperties | undefined;
13
+ //# sourceMappingURL=identity-tint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-tint.d.ts","sourceRoot":"","sources":["../../src/utils/identity-tint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAUzF"}
@@ -0,0 +1,14 @@
1
+ function identityTint(accent) {
2
+ if (!accent) return void 0;
3
+ const wash = `color-mix(in srgb, ${accent} 2%, transparent)`;
4
+ return {
5
+ borderColor: `color-mix(in srgb, ${accent} 30%, transparent)`,
6
+ backgroundImage: [
7
+ `radial-gradient(120% 120% at 100% 100%, color-mix(in srgb, ${accent} 4%, transparent), transparent 70%)`,
8
+ `linear-gradient(${wash}, ${wash})`
9
+ ].join(", ")
10
+ };
11
+ }
12
+ export {
13
+ identityTint
14
+ };
@@ -85851,6 +85851,57 @@ function pathMatchesAny(pathname, patterns) {
85851
85851
  return (patterns ?? []).some((pattern) => matchesPathPattern(pathname, pattern));
85852
85852
  }
85853
85853
 
85854
+ // src/utils/demo-clock.ts
85855
+ function hashSeed(seed) {
85856
+ let hash = 2166136261;
85857
+ for (let i = 0; i < seed.length; i++) {
85858
+ hash ^= seed.charCodeAt(i);
85859
+ hash = Math.imul(hash, 16777619);
85860
+ }
85861
+ return hash >>> 0;
85862
+ }
85863
+ function seededRandom(seed) {
85864
+ let state = hashSeed(seed);
85865
+ return () => {
85866
+ state = state + 1831565813 >>> 0;
85867
+ let t = state;
85868
+ t = Math.imul(t ^ t >>> 15, t | 1);
85869
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
85870
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
85871
+ };
85872
+ }
85873
+ function formatDemoClock(minutesOfDay) {
85874
+ const minutes = (Math.floor(minutesOfDay) % 1440 + 1440) % 1440;
85875
+ const hour24 = Math.floor(minutes / 60);
85876
+ const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;
85877
+ return `${hour12}:${String(minutes % 60).padStart(2, "0")} ${hour24 < 12 ? "AM" : "PM"}`;
85878
+ }
85879
+ function demoClockTimes(seed, options = {}) {
85880
+ const { count = 2, fromHour = 8, toHour = 18, maxGapMinutes = 3 } = options;
85881
+ const random = seededRandom(seed);
85882
+ const span = Math.max(1, (toHour - fromHour) * 60);
85883
+ let minutes = fromHour * 60 + Math.floor(random() * span);
85884
+ const times = [];
85885
+ for (let i = 0; i < Math.max(0, count); i++) {
85886
+ if (i > 0) minutes += Math.floor(random() * (maxGapMinutes + 1));
85887
+ times.push(formatDemoClock(minutes));
85888
+ }
85889
+ return times;
85890
+ }
85891
+
85892
+ // src/utils/identity-tint.ts
85893
+ function identityTint(accent) {
85894
+ if (!accent) return void 0;
85895
+ const wash = `color-mix(in srgb, ${accent} 2%, transparent)`;
85896
+ return {
85897
+ borderColor: `color-mix(in srgb, ${accent} 30%, transparent)`,
85898
+ backgroundImage: [
85899
+ `radial-gradient(120% 120% at 100% 100%, color-mix(in srgb, ${accent} 4%, transparent), transparent 70%)`,
85900
+ `linear-gradient(${wash}, ${wash})`
85901
+ ].join(", ")
85902
+ };
85903
+ }
85904
+
85854
85905
  exports.ACTIVE_ANCHOR_ATTRIBUTE = ACTIVE_ANCHOR_ATTRIBUTE;
85855
85906
  exports.AI_PROVIDERS = AI_PROVIDERS;
85856
85907
  exports.ANTHROPIC_SUPPORTED_IMAGE_MIME = ANTHROPIC_SUPPORTED_IMAGE_MIME;
@@ -85985,6 +86036,7 @@ exports.deepClone = deepClone;
85985
86036
  exports.defineParamSchema = defineParamSchema;
85986
86037
  exports.defineRescueForm = defineRescueForm;
85987
86038
  exports.delay = delay;
86039
+ exports.demoClockTimes = demoClockTimes;
85988
86040
  exports.deriveActiveColor = deriveActiveColor;
85989
86041
  exports.deriveHoverColor = deriveHoverColor;
85990
86042
  exports.designDocReadiness = designDocReadiness;
@@ -86042,6 +86094,7 @@ exports.formatDateTimeAt = formatDateTimeAt;
86042
86094
  exports.formatDateTimeYmd = formatDateTimeYmd;
86043
86095
  exports.formatDateUTC = formatDateUTC;
86044
86096
  exports.formatDateWithTimezone = formatDateWithTimezone;
86097
+ exports.formatDemoClock = formatDemoClock;
86045
86098
  exports.formatDocName = formatDocName;
86046
86099
  exports.formatDuration = formatDuration;
86047
86100
  exports.formatDurationCompact = formatDurationCompact;
@@ -86146,6 +86199,7 @@ exports.groupsByTable = groupsByTable;
86146
86199
  exports.hasGenericEmailDomain = hasGenericEmailDomain;
86147
86200
  exports.hexToRgb = hexToRgb2;
86148
86201
  exports.hostMatches = hostMatches;
86202
+ exports.identityTint = identityTint;
86149
86203
  exports.isAnnouncementDismissed = isAnnouncementDismissed;
86150
86204
  exports.isBadgePaletteKey = isBadgePaletteKey;
86151
86205
  exports.isBlankLine = isBlankLine;
@@ -97,4 +97,6 @@ export type { ProgramDateFields, ProgramInstant, ProgramMetaRenderers } from './
97
97
  export { copyrightLine } from './copyright-line';
98
98
  export * from './path-pattern';
99
99
  export * from './random-id';
100
+ export * from './demo-clock';
101
+ export * from './identity-tint';
100
102
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -261,6 +261,8 @@ import { PROGRAM_META_RENDERERS } from "./program-meta-renderers.js";
261
261
  import { copyrightLine } from "./copyright-line.js";
262
262
  export * from "./path-pattern.js";
263
263
  export * from "./random-id.js";
264
+ export * from "./demo-clock.js";
265
+ export * from "./identity-tint.js";
264
266
  export {
265
267
  ACTIVE_ANCHOR_ATTRIBUTE,
266
268
  ANTHROPIC_SUPPORTED_IMAGE_MIME,
@@ -2,7 +2,7 @@
2
2
  "use client";
3
3
 
4
4
 
5
- var _chunkHZJRERJWcjs = require('./chunk-HZJRERJW.cjs');
5
+ var _chunk3RFQPQ7Zcjs = require('./chunk-3RFQPQ7Z.cjs');
6
6
 
7
7
 
8
8
  var _chunkJKX2C3I2cjs = require('./chunk-JKX2C3I2.cjs');
@@ -13,7 +13,7 @@ var _chunkJKX2C3I2cjs = require('./chunk-JKX2C3I2.cjs');
13
13
 
14
14
 
15
15
 
16
- var _chunkYADG5Q7Ccjs = require('./chunk-YADG5Q7C.cjs');
16
+ var _chunk63N4FN5Vcjs = require('./chunk-63N4FN5V.cjs');
17
17
  require('./chunk-S5C3OZCO.cjs');
18
18
  require('./chunk-4IYNDV3G.cjs');
19
19
  require('./chunk-CW3ML76U.cjs');
@@ -23,7 +23,7 @@ var _chunkVOX4E6AXcjs = require('./chunk-VOX4E6AX.cjs');
23
23
  require('./chunk-UJ7AXHRZ.cjs');
24
24
 
25
25
 
26
- var _chunkAZL332TKcjs = require('./chunk-AZL332TK.cjs');
26
+ var _chunk2QMBXGMQcjs = require('./chunk-2QMBXGMQ.cjs');
27
27
  require('./chunk-V45KLJQP.cjs');
28
28
  require('./chunk-3ATAYP36.cjs');
29
29
 
@@ -244,7 +244,7 @@ function useHoverPlayback(mediaRef, sound, { playOnHover, playWhenHovered, muted
244
244
  onLiveElement(() => {
245
245
  element.volume = SOUND_VOLUME;
246
246
  });
247
- if (_chunkYADG5Q7Ccjs.hasUserInteracted.call(void 0, )) {
247
+ if (_chunk63N4FN5Vcjs.hasUserInteracted.call(void 0, )) {
248
248
  void playWithSound(element, hostMutedRef.current, wanted);
249
249
  return;
250
250
  }
@@ -257,8 +257,8 @@ function useHoverPlayback(mediaRef, sound, { playOnHover, playWhenHovered, muted
257
257
  });
258
258
  endMutedFallback();
259
259
  };
260
- _chunkYADG5Q7Ccjs.activationWaiters.add(onFirstGesture);
261
- cleanups.push(() => _chunkYADG5Q7Ccjs.activationWaiters.delete(onFirstGesture));
260
+ _chunk63N4FN5Vcjs.activationWaiters.add(onFirstGesture);
261
+ cleanups.push(() => _chunk63N4FN5Vcjs.activationWaiters.delete(onFirstGesture));
262
262
  }, [mediaRef, hostMutedRef, playWithSound, playMuted, endMutedFallback]);
263
263
  _react.useEffect.call(void 0, () => () => _optionalChain([endHoverRef, 'access', _41 => _41.current, 'optionalCall', _42 => _42()]), []);
264
264
  const controlled = typeof playWhenHovered === "boolean";
@@ -284,7 +284,7 @@ function usePlaybackHealth(mediaRef, url, monitored) {
284
284
  if (!monitored) return;
285
285
  clearStallTimer();
286
286
  setFailed(true);
287
- _chunkYADG5Q7Ccjs.reportPlaybackFailure.call(void 0, { kind: "file", src: url, reason });
287
+ _chunk63N4FN5Vcjs.reportPlaybackFailure.call(void 0, { kind: "file", src: url, reason });
288
288
  },
289
289
  [monitored, clearStallTimer, url]
290
290
  );
@@ -294,7 +294,7 @@ function usePlaybackHealth(mediaRef, url, monitored) {
294
294
  stallTimerRef.current = setTimeout(() => {
295
295
  stallTimerRef.current = null;
296
296
  fail("stall");
297
- }, _chunkYADG5Q7Ccjs.VIDEO_STALL_TIMEOUT_MS);
297
+ }, _chunk63N4FN5Vcjs.VIDEO_STALL_TIMEOUT_MS);
298
298
  }, [mediaRef, monitored, fail]);
299
299
  const alive = _react.useCallback.call(void 0, () => {
300
300
  clearStallTimer();
@@ -415,7 +415,7 @@ function FilePlayer({
415
415
  src: url,
416
416
  poster: poster || void 0,
417
417
  streamType: "on-demand",
418
- preload: _nullishCoalesce(preload, () => ( (_chunkHZJRERJWcjs.saveDataEnabled.call(void 0, ) ? "none" : "metadata"))),
418
+ preload: _nullishCoalesce(preload, () => ( (_chunk3RFQPQ7Zcjs.saveDataEnabled.call(void 0, ) ? "none" : "metadata"))),
419
419
  playsInline: true,
420
420
  muted,
421
421
  preferCmcd: "header",
@@ -433,7 +433,7 @@ function FilePlayer({
433
433
  const unmute = sound.mutedFallback && !hideMutedBadge ? (
434
434
  // The common Button's bare media glyph: white at rest, the accent while hovered.
435
435
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
436
- _chunkAZL332TKcjs.Button,
436
+ _chunk2QMBXGMQcjs.Button,
437
437
  {
438
438
  type: "button",
439
439
  variant: "glyph",
@@ -442,11 +442,11 @@ function FilePlayer({
442
442
  title: "Unmute",
443
443
  onClick: sound.unmute,
444
444
  className: "absolute inset-0 z-10 m-auto",
445
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYADG5Q7Ccjs.VideoUnmuteGlyph, {})
445
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63N4FN5Vcjs.VideoUnmuteGlyph, {})
446
446
  }
447
447
  )
448
448
  ) : null;
449
- const failure = health.failed ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYADG5Q7Ccjs.VideoErrorOverlay, { onRetry: health.retry }) : null;
449
+ const failure = health.failed ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk63N4FN5Vcjs.VideoErrorOverlay, { onRetry: health.retry }) : null;
450
450
  const boxed = Boolean(playOnHover) || hover.controlled || Boolean(autoPlayUnmuted) || Boolean(startMuted) || !chromeless;
451
451
  if (!boxed) return player;
452
452
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative h-full w-full", ...hover.pointerHandlers, children: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flamingo-stack/openframe-frontend-core",
3
- "version": "0.0.737",
3
+ "version": "0.0.739",
4
4
  "description": "Shared design system and components for all Flamingo platforms",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -1,12 +1,13 @@
1
1
  'use client';
2
2
 
3
- import { createContext, useCallback, useContext, useEffect, useMemo, type ReactNode } from 'react';
3
+ import { createContext, useCallback, useContext, useEffect, useMemo, type CSSProperties, type ReactNode } from 'react';
4
4
  import {
5
5
  AGENT_IDENTITIES_API_PATH,
6
6
  useAgentIdentities,
7
7
  type AgentIdentityIcon,
8
8
  type AgentIdentityIcons,
9
9
  } from '../hooks/use-agent-identities';
10
+ import { identityTint } from '../utils/identity-tint';
10
11
  import { HEX_PATTERN } from '../utils/ods-color-utils';
11
12
 
12
13
  export { AGENT_IDENTITIES_API_PATH, type AgentIdentityIcon, type AgentIdentityIcons };
@@ -126,3 +127,13 @@ export function useAgentAccents(): (slug: string | null | undefined) => string |
126
127
  [identities],
127
128
  );
128
129
  }
130
+
131
+ /**
132
+ * The tint of a surface that belongs to an agent (a card of its answer, the
133
+ * window it works in), from the agent's own identity colour. THE way a surface
134
+ * is tinted for an agent: a component names the agent, never a colour. With no
135
+ * agent, or one whose identity names no colour, there is no tint.
136
+ */
137
+ export function useAgentTint(slug: string | null | undefined): CSSProperties | undefined {
138
+ return identityTint(useAgentAccents()(slug));
139
+ }
@@ -0,0 +1,52 @@
1
+ import type { ReactNode } from 'react';
2
+ import { cn } from '../../utils/cn';
3
+
4
+ export interface ChatTurnProps {
5
+ /** Rendered as given, at the size the caller draws it (a person's picture, an agent's mark). */
6
+ avatar?: ReactNode;
7
+ name: string;
8
+ /** A quieter word after the name ("on her laptop"). */
9
+ meta?: string;
10
+ /** `quiet` steps the name back to the caption size and colour (a turn inside a denser card). */
11
+ nameSize?: 'default' | 'quiet';
12
+ /** Shown as given, at the far end of the name row ("2:47 PM"). */
13
+ time?: string | null;
14
+ /** What was said. A string is drawn as the message text; a node is drawn as given. */
15
+ children?: ReactNode;
16
+ className?: string;
17
+ }
18
+
19
+ /**
20
+ * THE turn of a scripted conversation (an example card, a step of a demo): the
21
+ * speaker's picture, then beside it their name, the time at the far end, and
22
+ * what was said under them. Names read as they do everywhere else: the body
23
+ * face, the text colour.
24
+ */
25
+ export function ChatTurn({ avatar, name, meta, nameSize = 'default', time, children, className }: ChatTurnProps) {
26
+ return (
27
+ <div className={cn('flex min-w-0 items-start gap-[var(--spacing-system-sf)]', className)}>
28
+ {avatar && <span className="shrink-0">{avatar}</span>}
29
+ <div className="flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]">
30
+ <div className="flex min-w-0 items-baseline gap-[var(--spacing-system-xsf)]">
31
+ <span className="flex min-w-0 flex-1 items-baseline gap-[var(--spacing-system-xsf)]">
32
+ <span
33
+ className={cn(
34
+ 'min-w-0 truncate',
35
+ nameSize === 'quiet' ? 'text-ods-text-secondary text-h6' : 'text-ods-text-primary text-h4',
36
+ )}
37
+ >
38
+ {name}
39
+ </span>
40
+ {meta && <span className="min-w-0 truncate text-ods-text-secondary text-h6">{meta}</span>}
41
+ </span>
42
+ {time && <span className="shrink-0 text-ods-text-secondary text-h6">{time}</span>}
43
+ </div>
44
+ {typeof children === 'string' ? (
45
+ <p className="m-0 whitespace-pre-wrap text-ods-text-primary text-h4">{children}</p>
46
+ ) : (
47
+ children
48
+ )}
49
+ </div>
50
+ </div>
51
+ );
52
+ }
@@ -23,6 +23,7 @@ export * from './slash-command-suggestions';
23
23
  export * from './chat-message-enhanced';
24
24
  export * from './chat-message-list';
25
25
  export * from './chat-message-row';
26
+ export * from './chat-turn';
26
27
  export * from './chat-message-skeleton';
27
28
 
28
29
  export * from './quick-action-chip';
@@ -498,8 +498,11 @@ export function FaqSection({
498
498
  const titleNode = heading === undefined ? <h2 className={SECTION_HEADING_CLASS}>{DEFAULT_HEADING_TEXT}</h2> : heading;
499
499
  const headingNode =
500
500
  showTopic && topic ? (
501
+ // The host's heading may arrive from a server component, still streaming: React cannot check such a
502
+ // node when it sits in a list of siblings and warns about a missing key. So it is the ONLY child of its
503
+ // own wrapper, and the two siblings here are this component's own elements.
501
504
  <div className="space-y-1">
502
- {titleNode}
505
+ <div>{titleNode}</div>
503
506
  <p className="text-ods-text-muted text-h6">{topic}</p>
504
507
  </div>
505
508
  ) : (
@@ -1,19 +1,12 @@
1
1
  'use client';
2
2
 
3
- import type { ReactNode } from 'react';
4
3
  import { cn } from '../../../utils/cn';
5
- import { trialLabels } from '../../../utils/trial';
6
- import { FileOffIcon } from '../../icons-v2-generated/documents/file-off-icon';
7
- import { CreditCardXmarkIcon } from '../../icons-v2-generated/finance/credit-card-xmark-icon';
8
4
  import { OpenframeLogoIcon } from '../../icons-v2-generated/logos/openframe-logo-icon';
9
- import { FlaskVialIcon } from '../../icons-v2-generated/school/flask-vial-icon';
10
- import { XmarkAltIcon } from '../../icons-v2-generated/signs-and-symbols/xmark-alt-icon';
5
+ import { BenefitList, trialBenefits, type BenefitItem } from '../../ui/benefit-list';
11
6
  import { Button } from '../../ui/button';
12
7
 
13
- export interface AuthBenefit {
14
- icon: ReactNode;
15
- label: string;
16
- }
8
+ /** One benefit of the panel: the lib's benefit item. */
9
+ export type AuthBenefit = BenefitItem;
17
10
 
18
11
  export interface AuthBenefitsPanelProps {
19
12
  title?: string;
@@ -31,17 +24,6 @@ const DEFAULT_TITLE = 'The All-in-One Open Platform for MSPs';
31
24
  const DEFAULT_DESCRIPTION =
32
25
  'All your core ops in one place - built for MSPs who are done duct-taping tools together. Unified stack, AI-ready, no vendor tax. Just solid software that lets you run lean and fast.';
33
26
 
34
- /** The default chips: the trial's terms, and its length when the host knows it. */
35
- function defaultBenefits(trialDays: number | null | undefined): AuthBenefit[] {
36
- const labels = trialLabels(trialDays);
37
- return [
38
- { icon: <CreditCardXmarkIcon />, label: labels.noCard },
39
- { icon: <XmarkAltIcon />, label: labels.cancel },
40
- ...(labels.length ? [{ icon: <FlaskVialIcon />, label: labels.length }] : []),
41
- { icon: <FileOffIcon />, label: labels.noContract },
42
- ];
43
- }
44
-
45
27
  /**
46
28
  * Marketing panel shown alongside the auth forms — title, blurb, benefit chips
47
29
  * and a "learn more" link. Presentational; content is overridable via props.
@@ -50,7 +32,7 @@ export function AuthBenefitsPanel({
50
32
  title = DEFAULT_TITLE,
51
33
  description = DEFAULT_DESCRIPTION,
52
34
  trialDays,
53
- benefits = defaultBenefits(trialDays),
35
+ benefits = trialBenefits(trialDays),
54
36
  learnMoreLabel = 'Learn More About OpenFrame',
55
37
  learnMoreUrl = 'https://www.flamingo.run/',
56
38
  className,
@@ -65,16 +47,7 @@ export function AuthBenefitsPanel({
65
47
  <h2 className="tracking-[-0.64px] text-ods-text-primary text-h2">{title}</h2>
66
48
  <p className="text-ods-text-primary text-h4">{description}</p>
67
49
 
68
- <div className="flex flex-wrap content-center items-center gap-[var(--spacing-system-m)]">
69
- {benefits.map(benefit => (
70
- <div key={benefit.label} className="flex items-center gap-[var(--spacing-system-xs)]">
71
- <span className="flex size-4 shrink-0 items-center justify-center text-ods-text-secondary [&_svg]:size-4">
72
- {benefit.icon}
73
- </span>
74
- <span className="whitespace-nowrap text-ods-text-primary text-h4">{benefit.label}</span>
75
- </div>
76
- ))}
77
- </div>
50
+ <BenefitList items={benefits} />
78
51
 
79
52
  <Button
80
53
  variant="outline"
@@ -1,6 +1,11 @@
1
+ 'use client';
2
+
1
3
  import type { ReactNode } from 'react';
2
4
  import { cn } from '../../utils/cn';
5
+ import { useAgentTint } from '../agent-identity';
6
+ import { ChatTurn } from '../chat/chat-turn';
3
7
  import { CheckCircleIcon } from '../icons-v2-generated/signs-and-symbols/check-circle-icon';
8
+ import { Tag } from '../ui/tag';
4
9
 
5
10
  export interface ConversationCardSpeaker {
6
11
  /** Rendered as given (an avatar, an agent mark). */
@@ -8,11 +13,13 @@ export interface ConversationCardSpeaker {
8
13
  name: string;
9
14
  /** A quieter word after the name ("on her laptop", "this computer"). */
10
15
  meta?: string;
16
+ /** When they spoke, as shown ("2:47 PM"). */
17
+ time?: string;
11
18
  }
12
19
 
13
20
  export interface ConversationCardProps {
14
21
  requester: ConversationCardSpeaker;
15
- /** What they said, shown in quotation marks. */
22
+ /** What they said. */
16
23
  request: string;
17
24
  responder: ConversationCardSpeaker;
18
25
  /** What was done about it. */
@@ -25,22 +32,19 @@ export interface ConversationCardProps {
25
32
  footerValue: string;
26
33
  /** `attention` paints the answer in the warning colour: it needs a person. */
27
34
  footerTone?: 'default' | 'attention';
35
+ /**
36
+ * The slug of the agent that answered. The card takes that agent's tint from
37
+ * its identity, so it reads as that agent's at a glance. A card names its
38
+ * agent, never a colour.
39
+ */
40
+ agent?: string | null;
28
41
  className?: string;
29
42
  }
30
43
 
31
- function Who({ speaker }: { speaker: ConversationCardSpeaker }) {
32
- return (
33
- <div className="flex items-baseline gap-2 text-ods-text-primary text-h4">
34
- {speaker.name}
35
- {speaker.meta && <span className="text-ods-text-secondary text-h6">{speaker.meta}</span>}
36
- </div>
37
- );
38
- }
39
-
40
44
  /**
41
45
  * A request and what was done about it, as two turns and a footer: who asked
42
- * and what they said, who answered and the result, then one line that sums up
43
- * the reader's own part in it.
46
+ * and what they said, who answered and the result (a command block with its
47
+ * check), then one line that sums up the reader's own part in it.
44
48
  */
45
49
  export function ConversationCard({
46
50
  requester,
@@ -51,47 +55,45 @@ export function ConversationCard({
51
55
  footerLabel,
52
56
  footerValue,
53
57
  footerTone = 'default',
58
+ agent,
54
59
  className,
55
60
  }: ConversationCardProps) {
61
+ const tint = useAgentTint(agent);
56
62
  return (
57
63
  <div
58
- className={cn('flex h-full flex-col gap-4 rounded-xl border border-ods-border bg-ods-card p-5 md:p-7', className)}
64
+ className={cn(
65
+ 'flex h-full flex-col gap-[var(--spacing-system-mf)] overflow-hidden rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-mf)]',
66
+ className,
67
+ )}
68
+ style={tint}
59
69
  >
60
- <div className="flex items-start gap-3">
61
- <span className="shrink-0">{requester.avatar}</span>
62
- <div className="min-w-0 flex-1">
63
- <Who speaker={requester} />
64
- {/* Every part keeps a fixed number of lines, so cards in a row or a carousel line up part by part. */}
65
- <p className="m-0 mt-1 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3" title={request}>
66
- &ldquo;{request}&rdquo;
67
- </p>
68
- </div>
69
- </div>
70
- <div className="flex items-start gap-3 rounded-md border border-ods-border bg-ods-bg p-3.5">
71
- <span className="shrink-0">{responder.avatar}</span>
72
- <div className="min-w-0 flex-1">
73
- <Who speaker={responder} />
74
- <div className="mt-1 flex items-start gap-2 text-ods-text-secondary text-h4">
75
- <CheckCircleIcon size={16} className="mt-1 shrink-0 text-ods-success" aria-hidden />
76
- <span className="line-clamp-3 min-h-[3lh] min-w-0 flex-1" title={outcome}>
77
- {outcome}
78
- </span>
79
- {outcomeAside}
80
- </div>
70
+ {/* Every part keeps a fixed number of lines, so cards in a row or a carousel line up part by part. */}
71
+ <ChatTurn avatar={requester.avatar} name={requester.name} meta={requester.meta} time={requester.time}>
72
+ <p className="m-0 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3" title={request}>
73
+ &ldquo;{request}&rdquo;
74
+ </p>
75
+ </ChatTurn>
76
+ {/* The answer is a command block: who did it, what was done, and its check. */}
77
+ <ChatTurn
78
+ avatar={responder.avatar}
79
+ name={responder.name}
80
+ meta={responder.meta}
81
+ time={responder.time}
82
+ className="rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-sf)]"
83
+ >
84
+ <div className="flex items-start gap-[var(--spacing-system-xsf)] text-ods-text-secondary text-h4">
85
+ <span className="line-clamp-3 min-h-[3lh] min-w-0 flex-1" title={outcome}>
86
+ {outcome}
87
+ </span>
88
+ {outcomeAside}
89
+ <span className="flex h-[1lh] shrink-0 items-center">
90
+ <CheckCircleIcon size={16} className="text-ods-success" aria-hidden />
91
+ </span>
81
92
  </div>
82
- </div>
83
- <div className="mt-auto flex items-center justify-between gap-3 border-t border-ods-border pt-3.5 text-ods-text-secondary text-h6">
93
+ </ChatTurn>
94
+ <div className="mt-auto flex items-center justify-between gap-[var(--spacing-system-sf)] text-ods-text-secondary text-h6">
84
95
  <span>{footerLabel}</span>
85
- <span
86
- className={cn(
87
- 'inline-flex whitespace-nowrap rounded-full border px-3 py-1',
88
- footerTone === 'attention'
89
- ? 'border-ods-warning text-ods-warning'
90
- : 'border-ods-border text-ods-text-secondary',
91
- )}
92
- >
93
- {footerValue}
94
- </span>
96
+ <Tag as="span" label={footerValue} variant={footerTone === 'attention' ? 'warning' : 'badge'} />
95
97
  </div>
96
98
  </div>
97
99
  );