@flamingo-stack/openframe-frontend-core 0.0.289 → 0.0.290-snapshot.20260618201839

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 (56) hide show
  1. package/dist/{chunk-KLXCXNLW.cjs → chunk-2YSC3API.cjs} +233 -208
  2. package/dist/chunk-2YSC3API.cjs.map +1 -0
  3. package/dist/{chunk-HIABEYRE.cjs → chunk-6BWZFRUG.cjs} +3 -3
  4. package/dist/{chunk-HIABEYRE.cjs.map → chunk-6BWZFRUG.cjs.map} +1 -1
  5. package/dist/{chunk-7YLTJXMQ.js → chunk-AGRSALEN.js} +2 -2
  6. package/dist/{chunk-6NL7TTDR.cjs → chunk-BVNYQDZE.cjs} +23 -23
  7. package/dist/{chunk-6NL7TTDR.cjs.map → chunk-BVNYQDZE.cjs.map} +1 -1
  8. package/dist/{chunk-Q6S6DCVP.js → chunk-CSL3ECOF.js} +2 -2
  9. package/dist/{chunk-BZR546EB.js → chunk-D4R2MUPA.js} +2 -2
  10. package/dist/{chunk-UBFYGWFP.js → chunk-EGSAB76W.js} +2 -2
  11. package/dist/{chunk-PYHCHGM5.js → chunk-RSIFEDZX.js} +2 -2
  12. package/dist/{chunk-DFAMTCC4.cjs → chunk-VMRPM24G.cjs} +5 -5
  13. package/dist/{chunk-DFAMTCC4.cjs.map → chunk-VMRPM24G.cjs.map} +1 -1
  14. package/dist/{chunk-P2SO7ADJ.js → chunk-Z2EOXZBW.js} +39 -14
  15. package/dist/chunk-Z2EOXZBW.js.map +1 -0
  16. package/dist/{chunk-OV3ZCU6X.cjs → chunk-Z4GAFSNM.cjs} +4 -4
  17. package/dist/{chunk-OV3ZCU6X.cjs.map → chunk-Z4GAFSNM.cjs.map} +1 -1
  18. package/dist/{chunk-LZQ4HSOR.cjs → chunk-ZYBUFVQV.cjs} +25 -25
  19. package/dist/{chunk-LZQ4HSOR.cjs.map → chunk-ZYBUFVQV.cjs.map} +1 -1
  20. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
  21. package/dist/components/chat/index.cjs +2 -2
  22. package/dist/components/chat/index.js +1 -1
  23. package/dist/components/contact/index.cjs +3 -3
  24. package/dist/components/contact/index.js +2 -2
  25. package/dist/components/embeds/index.cjs +3 -3
  26. package/dist/components/embeds/index.js +2 -2
  27. package/dist/components/faq/index.cjs +3 -3
  28. package/dist/components/faq/index.js +2 -2
  29. package/dist/components/features/index.cjs +2 -2
  30. package/dist/components/features/index.js +1 -1
  31. package/dist/components/features/paths-display.d.ts +1 -1
  32. package/dist/components/features/paths-display.d.ts.map +1 -1
  33. package/dist/components/index.cjs +46 -46
  34. package/dist/components/index.js +5 -5
  35. package/dist/components/navigation/index.cjs +2 -2
  36. package/dist/components/navigation/index.js +1 -1
  37. package/dist/components/related-content/index.cjs +3 -3
  38. package/dist/components/related-content/index.js +2 -2
  39. package/dist/components/tickets/index.cjs +45 -45
  40. package/dist/components/tickets/index.js +3 -3
  41. package/dist/components/ui/index.cjs +2 -2
  42. package/dist/components/ui/index.js +1 -1
  43. package/dist/index.cjs +2 -2
  44. package/dist/index.js +1 -1
  45. package/package.json +1 -1
  46. package/src/components/chat/entity-cards/dispatch.tsx +42 -0
  47. package/src/components/features/.paths-display.md +1 -1
  48. package/src/components/features/command-box.tsx +1 -1
  49. package/src/components/features/paths-display.tsx +13 -14
  50. package/dist/chunk-KLXCXNLW.cjs.map +0 -1
  51. package/dist/chunk-P2SO7ADJ.js.map +0 -1
  52. /package/dist/{chunk-7YLTJXMQ.js.map → chunk-AGRSALEN.js.map} +0 -0
  53. /package/dist/{chunk-Q6S6DCVP.js.map → chunk-CSL3ECOF.js.map} +0 -0
  54. /package/dist/{chunk-BZR546EB.js.map → chunk-D4R2MUPA.js.map} +0 -0
  55. /package/dist/{chunk-UBFYGWFP.js.map → chunk-EGSAB76W.js.map} +0 -0
  56. /package/dist/{chunk-PYHCHGM5.js.map → chunk-RSIFEDZX.js.map} +0 -0
@@ -74,6 +74,7 @@ import { MingoIcon } from '../../icons'
74
74
  import { EyeIcon } from '../../icons-v2-generated/interface/eye-icon'
75
75
  import { ArrowRightUpIcon } from '../../icons-v2-generated/arrows/arrow-right-up-icon'
76
76
  import { TagIcon } from '../../icons-v2-generated/shopping/tag-icon'
77
+ import { QuestionCircleIcon } from '../../icons-v2-generated/signs-and-symbols/question-circle-icon'
77
78
  import { SlackLogoGreyIcon } from '../../icons-v2-generated/brand-logos/slack-logo-grey-icon'
78
79
  import { FileContentIcon } from '../../icons-v2-generated/documents/file-content-icon'
79
80
  import { ChartBar01VerIcon } from '../../icons-v2-generated/charts/chart-bar-01-ver-icon'
@@ -354,6 +355,39 @@ function HubspotTicketChatCard({
354
355
  )
355
356
  }
356
357
 
358
+ /** FAQ Q&A — title=question, body=answer preview, optional section pill.
359
+ * No-fetch card: every field the renderer needs already lives on the
360
+ * ChatRef (hub's `FAQ_MAPPER.toRetrievedDoc` populates `title` /
361
+ * `preview` / `url` / `targetPlatform`, and the section name is threaded
362
+ * through `metadata.section` for the badge). The card itself stays pure
363
+ * presentation — same shape as `SlackChatCard` / `HubspotTicketChatCard`. */
364
+ function FaqChatCard({
365
+ chatRef,
366
+ isNewTab,
367
+ discuss,
368
+ }: {
369
+ chatRef: ChatRef
370
+ isNewTab: boolean
371
+ discuss?: CardDiscussAction
372
+ }) {
373
+ const section =
374
+ typeof chatRef.metadata?.section === 'string'
375
+ ? (chatRef.metadata.section as string).trim()
376
+ : undefined
377
+ const statusLabel = section && section.length > 0 ? section : 'FAQ'
378
+ return (
379
+ <MingoInfoCard
380
+ title={chatRef.title}
381
+ description={chatRef.preview ?? undefined}
382
+ icon={<QuestionCircleIcon size={24} />}
383
+ status={{ label: statusLabel, variant: 'grey' }}
384
+ anchorProps={buildAnchorProps(chatRef.url, isNewTab)}
385
+ menuGroups={cardMenuGroups(chatRef.url, discuss)}
386
+ menuAriaLabel="FAQ actions"
387
+ />
388
+ )
389
+ }
390
+
357
391
  function SlackChatCard({
358
392
  chatRef,
359
393
  isNewTab,
@@ -1121,6 +1155,14 @@ const CHAT_CARD_REGISTRY: Record<string, ChatCardRegistryEntry> = {
1121
1155
  discuss={opts.discuss} />
1122
1156
  ),
1123
1157
  },
1158
+ faq: {
1159
+ mode: 'no-fetch',
1160
+ label: 'FAQ',
1161
+ bareInline: true,
1162
+ render: (chatRef, opts) => (
1163
+ <FaqChatCard chatRef={chatRef} isNewTab={opts.isNewTab} discuss={opts.discuss} />
1164
+ ),
1165
+ },
1124
1166
  hubspot_ticket: {
1125
1167
  mode: 'no-fetch',
1126
1168
  label: 'HubSpot ticket',
@@ -44,7 +44,7 @@ import { PathsDisplay, getOpenFramePaths } from '@flamingo/ui-kit/components/fea
44
44
  | `title` | `string` | — | Optional heading above the list |
45
45
  | `description` | `string` | — | Optional subtext below the title |
46
46
  | `showCopyButtons` | `boolean` | `true` | Toggle copy button visibility |
47
- | `copyIconSize` | `string` | `'w-5 h-5'` | Tailwind size classes for the copy icon |
47
+ | `copyIconSize` | `string` | `'w-6 h-6'` | Tailwind size classes for the copy icon |
48
48
  | `className` | `string` | — | Additional CSS classes for the container |
49
49
 
50
50
  > **Note:** The component renders `null` when `paths` is empty or undefined. Copy buttons only render when both `showCopyButtons` is `true` **and** `onCopyPath` is provided.
@@ -98,7 +98,7 @@ export function CommandBox({
98
98
  {title}
99
99
  </div>
100
100
  )}
101
- <div className="bg-ods-card border border-ods-border rounded-[6px] p-4">
101
+ <div className="bg-ods-bg border border-ods-border rounded-[6px] p-4">
102
102
  <div
103
103
  className={cn(
104
104
  'text-ods-text-primary font-mono text-[14px] md:text-[16px] leading-relaxed break-all',
@@ -1,8 +1,7 @@
1
1
  'use client'
2
2
 
3
3
  import React from 'react'
4
- import { Copy } from 'lucide-react'
5
- import { Button } from '../ui/button'
4
+ import { Copy02Icon } from '../icons-v2-generated/documents/copy-02-icon'
6
5
  import { cn } from '../../utils/cn'
7
6
 
8
7
  export interface PathsDisplayProps {
@@ -37,7 +36,7 @@ export interface PathsDisplayProps {
37
36
  showCopyButtons?: boolean
38
37
 
39
38
  /**
40
- * Size of the copy icon (default: 'w-5 h-5')
39
+ * Size of the copy icon (default: 'w-6 h-6')
41
40
  */
42
41
  copyIconSize?: string
43
42
  }
@@ -78,7 +77,7 @@ export function PathsDisplay({
78
77
  description,
79
78
  className,
80
79
  showCopyButtons = true,
81
- copyIconSize = 'w-5 h-5'
80
+ copyIconSize = 'w-6 h-6'
82
81
  }: PathsDisplayProps) {
83
82
  if (!paths || paths.length === 0) {
84
83
  return null
@@ -87,12 +86,12 @@ export function PathsDisplay({
87
86
  return (
88
87
  <div className={cn('flex flex-col gap-3', className)}>
89
88
  {title && (
90
- <div className="text-ods-text-primary text-[16px] md:text-[18px]">
89
+ <div className="text-h4 text-ods-text-primary">
91
90
  {title}
92
91
  </div>
93
92
  )}
94
93
  {description && (
95
- <div className="text-ods-text-secondary text-[14px] md:text-[16px]">
94
+ <div className="text-h6 text-ods-text-secondary">
96
95
  {description}
97
96
  </div>
98
97
  )}
@@ -100,20 +99,20 @@ export function PathsDisplay({
100
99
  {paths.map((path) => (
101
100
  <div
102
101
  key={path}
103
- className="flex items-center justify-between p-4 border-b border-ods-border last:border-b-0"
102
+ className="flex items-center gap-4 p-4 border-b border-ods-border last:border-b-0"
104
103
  >
105
- <span className="text-ods-text-primary font-medium text-[14px] md:text-[16px] font-mono break-all">
104
+ <span className="flex-1 min-w-0 text-h4 text-ods-text-primary truncate">
106
105
  {path}
107
106
  </span>
108
107
  {showCopyButtons && onCopyPath && (
109
- <Button
110
- variant="transparent"
111
- size="small-legacy"
108
+ <button
109
+ type="button"
112
110
  onClick={() => onCopyPath(path)}
113
- className="ml-4 shrink-0"
111
+ aria-label={`Copy ${path}`}
112
+ className="shrink-0 rounded-md text-ods-text-secondary transition-colors hover:text-ods-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-focus"
114
113
  >
115
- <Copy className={copyIconSize} />
116
- </Button>
114
+ <Copy02Icon className={copyIconSize} />
115
+ </button>
117
116
  )}
118
117
  </div>
119
118
  ))}