@flamingo-stack/openframe-frontend-core 0.0.666 → 0.0.667-2387.7140.1

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 (95) hide show
  1. package/dist/{chunk-ZDGEJFDG.js → chunk-46Q75EJ6.js} +2 -2
  2. package/dist/{chunk-HQHZZ3SL.js → chunk-4GNH6Z7N.js} +2 -2
  3. package/dist/{chunk-7H7LYI4M.cjs → chunk-4PXVQEUJ.cjs} +4 -4
  4. package/dist/{chunk-7H7LYI4M.cjs.map → chunk-4PXVQEUJ.cjs.map} +1 -1
  5. package/dist/{chunk-XMY2XTHG.cjs → chunk-6QS3P3WR.cjs} +3 -3
  6. package/dist/{chunk-XMY2XTHG.cjs.map → chunk-6QS3P3WR.cjs.map} +1 -1
  7. package/dist/{chunk-DDW7G6U7.js → chunk-6VT4TY34.js} +4 -4
  8. package/dist/{chunk-IUNCGKFP.cjs → chunk-7HWZMCQE.cjs} +3 -3
  9. package/dist/{chunk-IUNCGKFP.cjs.map → chunk-7HWZMCQE.cjs.map} +1 -1
  10. package/dist/{chunk-JBRNIUYC.js → chunk-7OBHWW3T.js} +2 -2
  11. package/dist/{chunk-KDFSFVNX.cjs → chunk-BLB5X3XR.cjs} +10 -10
  12. package/dist/{chunk-KDFSFVNX.cjs.map → chunk-BLB5X3XR.cjs.map} +1 -1
  13. package/dist/{chunk-V3B37LQY.js → chunk-CU5BDIAL.js} +4 -4
  14. package/dist/{chunk-YVMSA7LR.js → chunk-DGG6ORNT.js} +5 -5
  15. package/dist/{chunk-2S44CUCH.cjs → chunk-DZ4W2JMA.cjs} +4 -4
  16. package/dist/{chunk-2S44CUCH.cjs.map → chunk-DZ4W2JMA.cjs.map} +1 -1
  17. package/dist/{chunk-L7QXTWI7.cjs → chunk-EJTVYJP7.cjs} +17 -17
  18. package/dist/{chunk-L7QXTWI7.cjs.map → chunk-EJTVYJP7.cjs.map} +1 -1
  19. package/dist/{chunk-VUYRTI3Z.cjs → chunk-FINX7OPD.cjs} +18 -18
  20. package/dist/{chunk-VUYRTI3Z.cjs.map → chunk-FINX7OPD.cjs.map} +1 -1
  21. package/dist/{chunk-WI5LLFA6.cjs → chunk-GJ4PJJYG.cjs} +13 -13
  22. package/dist/{chunk-WI5LLFA6.cjs.map → chunk-GJ4PJJYG.cjs.map} +1 -1
  23. package/dist/{chunk-EYCF3GGM.js → chunk-GLTY7JGI.js} +5 -5
  24. package/dist/{chunk-VI35TSB2.js → chunk-I4WW7UOA.js} +3 -3
  25. package/dist/{chunk-SCRVQY42.js → chunk-L7XUR55A.js} +2 -2
  26. package/dist/{chunk-R6NU4QFR.js → chunk-MCRVTJOK.js} +2 -2
  27. package/dist/{chunk-O5GV3WQO.js → chunk-QADD2X7I.js} +2 -2
  28. package/dist/{chunk-YAF2JKAK.cjs → chunk-SCQORRX5.cjs} +51 -51
  29. package/dist/{chunk-YAF2JKAK.cjs.map → chunk-SCQORRX5.cjs.map} +1 -1
  30. package/dist/{chunk-OPY4JNY2.cjs → chunk-SHC4DU2E.cjs} +36 -36
  31. package/dist/{chunk-OPY4JNY2.cjs.map → chunk-SHC4DU2E.cjs.map} +1 -1
  32. package/dist/{chunk-QSYYYL55.cjs → chunk-STF6ITNW.cjs} +3 -3
  33. package/dist/{chunk-QSYYYL55.cjs.map → chunk-STF6ITNW.cjs.map} +1 -1
  34. package/dist/{chunk-W2WEIVHT.cjs → chunk-UPTG32KO.cjs} +36 -9
  35. package/dist/chunk-UPTG32KO.cjs.map +1 -0
  36. package/dist/{chunk-VN2U4EBP.cjs → chunk-V3UVCAJM.cjs} +33 -33
  37. package/dist/{chunk-VN2U4EBP.cjs.map → chunk-V3UVCAJM.cjs.map} +1 -1
  38. package/dist/{chunk-NIVLGQKS.js → chunk-WISMH2ER.js} +2 -2
  39. package/dist/{chunk-CYPLD5F3.js → chunk-WL2NCWYK.js} +2 -2
  40. package/dist/{chunk-ILAEMVAI.js → chunk-WMCJWEJX.js} +54 -27
  41. package/dist/{chunk-ILAEMVAI.js.map → chunk-WMCJWEJX.js.map} +1 -1
  42. package/dist/{chunk-CRDKQMTP.js → chunk-X6XAQDDM.js} +2 -2
  43. package/dist/{chunk-AAIL6J56.cjs → chunk-YLQZTPZF.cjs} +3 -3
  44. package/dist/{chunk-AAIL6J56.cjs.map → chunk-YLQZTPZF.cjs.map} +1 -1
  45. package/dist/{chunk-XSRIPH6U.cjs → chunk-ZLATHAXJ.cjs} +17 -17
  46. package/dist/{chunk-XSRIPH6U.cjs.map → chunk-ZLATHAXJ.cjs.map} +1 -1
  47. package/dist/components/case-studies/index.cjs +11 -11
  48. package/dist/components/case-studies/index.js +2 -2
  49. package/dist/components/contact/index.cjs +3 -3
  50. package/dist/components/contact/index.js +2 -2
  51. package/dist/components/docs/index.cjs +6 -6
  52. package/dist/components/docs/index.js +5 -5
  53. package/dist/components/embeds/index.cjs +3 -3
  54. package/dist/components/embeds/index.js +2 -2
  55. package/dist/components/faq/index.cjs +3 -3
  56. package/dist/components/faq/index.js +2 -2
  57. package/dist/components/features/board/ticket-card.d.ts +8 -2
  58. package/dist/components/features/board/ticket-card.d.ts.map +1 -1
  59. package/dist/components/features/index.cjs +2 -2
  60. package/dist/components/features/index.js +1 -1
  61. package/dist/components/help-center-pages/index.cjs +22 -22
  62. package/dist/components/help-center-pages/index.js +13 -13
  63. package/dist/components/index.cjs +31 -31
  64. package/dist/components/index.js +12 -12
  65. package/dist/components/meeting-scheduler/index.cjs +21 -21
  66. package/dist/components/meeting-scheduler/index.js +1 -1
  67. package/dist/components/navigation/index.cjs +5 -5
  68. package/dist/components/navigation/index.js +4 -4
  69. package/dist/components/onboarding-guides/index.cjs +5 -5
  70. package/dist/components/onboarding-guides/index.js +4 -4
  71. package/dist/components/tickets/index.cjs +6 -6
  72. package/dist/components/tickets/index.js +5 -5
  73. package/dist/components/ui/index.cjs +2 -2
  74. package/dist/components/ui/index.js +1 -1
  75. package/dist/index.cjs +6 -6
  76. package/dist/index.js +5 -5
  77. package/package.json +1 -1
  78. package/src/__tests__/ticket-card-meta.test.tsx +39 -1
  79. package/src/components/features/board/.ticket-card.md +2 -2
  80. package/src/components/features/board/ticket-card.tsx +44 -9
  81. package/dist/chunk-W2WEIVHT.cjs.map +0 -1
  82. /package/dist/{chunk-ZDGEJFDG.js.map → chunk-46Q75EJ6.js.map} +0 -0
  83. /package/dist/{chunk-HQHZZ3SL.js.map → chunk-4GNH6Z7N.js.map} +0 -0
  84. /package/dist/{chunk-DDW7G6U7.js.map → chunk-6VT4TY34.js.map} +0 -0
  85. /package/dist/{chunk-JBRNIUYC.js.map → chunk-7OBHWW3T.js.map} +0 -0
  86. /package/dist/{chunk-V3B37LQY.js.map → chunk-CU5BDIAL.js.map} +0 -0
  87. /package/dist/{chunk-YVMSA7LR.js.map → chunk-DGG6ORNT.js.map} +0 -0
  88. /package/dist/{chunk-EYCF3GGM.js.map → chunk-GLTY7JGI.js.map} +0 -0
  89. /package/dist/{chunk-VI35TSB2.js.map → chunk-I4WW7UOA.js.map} +0 -0
  90. /package/dist/{chunk-SCRVQY42.js.map → chunk-L7XUR55A.js.map} +0 -0
  91. /package/dist/{chunk-R6NU4QFR.js.map → chunk-MCRVTJOK.js.map} +0 -0
  92. /package/dist/{chunk-O5GV3WQO.js.map → chunk-QADD2X7I.js.map} +0 -0
  93. /package/dist/{chunk-NIVLGQKS.js.map → chunk-WISMH2ER.js.map} +0 -0
  94. /package/dist/{chunk-CYPLD5F3.js.map → chunk-WL2NCWYK.js.map} +0 -0
  95. /package/dist/{chunk-CRDKQMTP.js.map → chunk-X6XAQDDM.js.map} +0 -0
@@ -7,6 +7,7 @@ import { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/elemen
7
7
  import { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';
8
8
  import {
9
9
  memo,
10
+ useCallback,
10
11
  useEffect,
11
12
  useMemo,
12
13
  useRef,
@@ -82,11 +83,25 @@ export interface TicketCardBodyProps {
82
83
  * `TicketCard` adapts its own `(ticketId, requestId)` signature onto these). */
83
84
  onApprove?: (requestId?: string) => void | Promise<void>;
84
85
  onReject?: (requestId?: string) => void | Promise<void>;
86
+ /** Where the card opens. The body sits above the card's own link with pointer
87
+ * events off, but the number/time line has to take them back for its tooltip -
88
+ * so with an `href` that line is a link of its own, and a click on it opens the
89
+ * ticket like a click anywhere else on the card. */
90
+ href?: string;
91
+ onLinkClick?: (e: MouseEvent) => void;
85
92
  }
86
93
 
87
94
  /** The card's inner content: title + device/org, priority + assignees, tags,
88
95
  * timestamp, "New Message", and the approval row. Pure — driven only by props. */
89
- export function TicketCardBody({ ticket, columnColor, renderAssignSlot, onApprove, onReject }: TicketCardBodyProps) {
96
+ export function TicketCardBody({
97
+ ticket,
98
+ columnColor,
99
+ renderAssignSlot,
100
+ onApprove,
101
+ onReject,
102
+ href,
103
+ onLinkClick,
104
+ }: TicketCardBodyProps) {
90
105
  const showNewMessage = !!ticket.hasNewMessage && !!columnColor;
91
106
  const newMessageTextColor = columnColor ? getReadableTextColor(columnColor) : undefined;
92
107
 
@@ -143,6 +158,22 @@ export function TicketCardBody({ ticket, columnColor, renderAssignSlot, onApprov
143
158
  // may be empty - the hub hero card and tickets without one send '' - so either
144
159
  // half stands on its own and the line disappears with both missing.
145
160
  const metaLabel = [ticket.ticketNumber || null, timestampLabel].filter(Boolean).join(' \u2022 ');
161
+ const metaClass = 'truncate text-ods-text-secondary text-h6';
162
+ // Out of the tab order: the card's own link is the one stop for the ticket.
163
+ const meta = href ? (
164
+ <Link
165
+ href={href}
166
+ draggable={false}
167
+ prefetch={false}
168
+ tabIndex={-1}
169
+ onClick={onLinkClick}
170
+ className={cn('pointer-events-auto block', metaClass)}
171
+ >
172
+ {metaLabel}
173
+ </Link>
174
+ ) : (
175
+ <p className={cn(tooltipLabel && 'pointer-events-auto', metaClass)}>{metaLabel}</p>
176
+ );
146
177
 
147
178
  return (
148
179
  <>
@@ -165,14 +196,12 @@ export function TicketCardBody({ ticket, columnColor, renderAssignSlot, onApprov
165
196
  (tooltipLabel ? (
166
197
  <TooltipProvider>
167
198
  <Tooltip>
168
- <TooltipTrigger asChild>
169
- <p className="pointer-events-auto truncate text-ods-text-secondary text-h6">{metaLabel}</p>
170
- </TooltipTrigger>
199
+ <TooltipTrigger asChild>{meta}</TooltipTrigger>
171
200
  <TooltipContent>{tooltipLabel}</TooltipContent>
172
201
  </Tooltip>
173
202
  </TooltipProvider>
174
203
  ) : (
175
- <p className="truncate text-ods-text-secondary text-h6">{metaLabel}</p>
204
+ meta
176
205
  ))}
177
206
  {ticket.escalatedByUser && (
178
207
  <div className="flex items-center gap-[var(--spacing-system-xxs)] text-ods-open-yellow text-h6">
@@ -412,9 +441,13 @@ export const TicketCard = memo(function TicketCardImpl({
412
441
  const style: CSSProperties = {};
413
442
  if (showNewMessage) style.borderColor = columnColor;
414
443
 
415
- const handleClick = (e: MouseEvent) => {
416
- if (isDragging) e.preventDefault();
417
- };
444
+ // Stable between drags: it is handed into the memoized body below.
445
+ const handleClick = useCallback(
446
+ (e: MouseEvent) => {
447
+ if (isDragging) e.preventDefault();
448
+ },
449
+ [isDragging],
450
+ );
418
451
 
419
452
  // Held as one memoized element, not re-created per render. A card being
420
453
  // dragged over re-renders on every edge flip — it owns the hover state that
@@ -430,9 +463,11 @@ export const TicketCard = memo(function TicketCardImpl({
430
463
  renderAssignSlot={renderAssignSlot}
431
464
  onApprove={onApprove ? requestId => onApprove(ticket.id, requestId) : undefined}
432
465
  onReject={onReject ? requestId => onReject(ticket.id, requestId) : undefined}
466
+ href={href}
467
+ onLinkClick={handleClick}
433
468
  />
434
469
  ),
435
- [ticket, columnColor, renderAssignSlot, onApprove, onReject],
470
+ [ticket, columnColor, renderAssignSlot, onApprove, onReject, href, handleClick],
436
471
  );
437
472
 
438
473
  // No transition on the margins below, and that is not a style choice: room is