@flamingo-stack/openframe-frontend-core 0.0.254 → 0.0.255-snapshot.20260611213621

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 (173) hide show
  1. package/dist/{chunk-ELF4OOHC.cjs → chunk-3DC6MHW6.cjs} +33 -33
  2. package/dist/{chunk-ELF4OOHC.cjs.map → chunk-3DC6MHW6.cjs.map} +1 -1
  3. package/dist/{chunk-QCRQNKRO.js → chunk-46DHPQY6.js} +4 -4
  4. package/dist/{chunk-ZITMX2IQ.cjs → chunk-6F5CGBVT.cjs} +745 -767
  5. package/dist/chunk-6F5CGBVT.cjs.map +1 -0
  6. package/dist/{chunk-4RDJZIHW.js → chunk-6GBA6YJN.js} +3 -3
  7. package/dist/{chunk-4HHYUEMD.js → chunk-7RLV3U5C.js} +2 -2
  8. package/dist/{chunk-SGJBUL2Y.cjs → chunk-7VMEOFEA.cjs} +45 -2
  9. package/dist/chunk-7VMEOFEA.cjs.map +1 -0
  10. package/dist/{chunk-TSY72CQ6.cjs → chunk-CMWRZECW.cjs} +77 -42
  11. package/dist/chunk-CMWRZECW.cjs.map +1 -0
  12. package/dist/{chunk-CAPVFI5A.js → chunk-HCMVLEC3.js} +4 -4
  13. package/dist/{chunk-LZL6P7SN.cjs → chunk-IG4QRNYZ.cjs} +10 -10
  14. package/dist/{chunk-LZL6P7SN.cjs.map → chunk-IG4QRNYZ.cjs.map} +1 -1
  15. package/dist/{chunk-HYJ5IV4Z.cjs → chunk-ISALYOFX.cjs} +19 -19
  16. package/dist/{chunk-HYJ5IV4Z.cjs.map → chunk-ISALYOFX.cjs.map} +1 -1
  17. package/dist/{chunk-MKVKVJQQ.js → chunk-J3QMPOS6.js} +5 -4
  18. package/dist/chunk-J3QMPOS6.js.map +1 -0
  19. package/dist/{chunk-BE472J6X.js → chunk-JK25REDL.js} +48 -13
  20. package/dist/chunk-JK25REDL.js.map +1 -0
  21. package/dist/{chunk-Z4IBEIWD.cjs → chunk-LGLPNWS6.cjs} +3 -3
  22. package/dist/{chunk-Z4IBEIWD.cjs.map → chunk-LGLPNWS6.cjs.map} +1 -1
  23. package/dist/{chunk-VAUI3CND.js → chunk-NR535XIY.js} +44 -1
  24. package/dist/chunk-NR535XIY.js.map +1 -0
  25. package/dist/{chunk-CZR7ARBA.js → chunk-PHWQLKVE.js} +6 -2
  26. package/dist/chunk-PHWQLKVE.js.map +1 -0
  27. package/dist/{chunk-OZ3GH6OQ.cjs → chunk-PXXS27EE.cjs} +6 -2
  28. package/dist/chunk-PXXS27EE.cjs.map +1 -0
  29. package/dist/{chunk-2FCXJTOV.js → chunk-QXSRQVRO.js} +3 -1
  30. package/dist/chunk-QXSRQVRO.js.map +1 -0
  31. package/dist/{chunk-NP5U35FA.js → chunk-S7IX7YU4.js} +198 -220
  32. package/dist/chunk-S7IX7YU4.js.map +1 -0
  33. package/dist/{chunk-6LK4VEXE.cjs → chunk-TSZBJVYK.cjs} +35 -31
  34. package/dist/chunk-TSZBJVYK.cjs.map +1 -0
  35. package/dist/{chunk-TU26IZPO.cjs → chunk-U6UNAC32.cjs} +3 -1
  36. package/dist/chunk-U6UNAC32.cjs.map +1 -0
  37. package/dist/{chunk-265KKBV2.js → chunk-V4IIBNTA.js} +3 -3
  38. package/dist/chunk-V4IIBNTA.js.map +1 -0
  39. package/dist/{chunk-65JN25VM.cjs → chunk-V4Q5PIBV.cjs} +30 -30
  40. package/dist/{chunk-65JN25VM.cjs.map → chunk-V4Q5PIBV.cjs.map} +1 -1
  41. package/dist/{chunk-LKI3YCAX.js → chunk-V5L4D454.js} +10 -6
  42. package/dist/chunk-V5L4D454.js.map +1 -0
  43. package/dist/{chunk-3TDLFCCS.cjs → chunk-ZJP2BB3E.cjs} +6 -5
  44. package/dist/chunk-ZJP2BB3E.cjs.map +1 -0
  45. package/dist/components/chat/entity-cards/entity-author-card.d.ts +13 -9
  46. package/dist/components/chat/entity-cards/entity-author-card.d.ts.map +1 -1
  47. package/dist/components/chat/hooks/use-nats-dialog-subscription.d.ts.map +1 -1
  48. package/dist/components/chat/index.cjs +10 -8
  49. package/dist/components/chat/index.cjs.map +1 -1
  50. package/dist/components/chat/index.d.ts +1 -0
  51. package/dist/components/chat/index.d.ts.map +1 -1
  52. package/dist/components/chat/index.js +9 -7
  53. package/dist/components/chat/types/entities/onboarding-guide.d.ts +2 -7
  54. package/dist/components/chat/types/entities/onboarding-guide.d.ts.map +1 -1
  55. package/dist/components/contact/index.cjs +9 -9
  56. package/dist/components/contact/index.js +8 -8
  57. package/dist/components/faq/faq-section.d.ts.map +1 -1
  58. package/dist/components/faq/index.cjs +3 -3
  59. package/dist/components/faq/index.js +2 -2
  60. package/dist/components/features/index.cjs +8 -8
  61. package/dist/components/features/index.js +7 -7
  62. package/dist/components/features/notifications/notification-drawer.d.ts.map +1 -1
  63. package/dist/components/icons/index.cjs +2 -2
  64. package/dist/components/icons/index.js +1 -1
  65. package/dist/components/index.cjs +167 -157
  66. package/dist/components/index.cjs.map +1 -1
  67. package/dist/components/index.js +55 -45
  68. package/dist/components/index.js.map +1 -1
  69. package/dist/components/navigation/app-layout-drawer.d.ts +1 -1
  70. package/dist/components/navigation/app-layout-drawer.d.ts.map +1 -1
  71. package/dist/components/navigation/index.cjs +8 -8
  72. package/dist/components/navigation/index.js +7 -7
  73. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  74. package/dist/components/onboarding-guides/index.cjs +25 -23
  75. package/dist/components/onboarding-guides/index.cjs.map +1 -1
  76. package/dist/components/onboarding-guides/index.js +6 -4
  77. package/dist/components/onboarding-guides/index.js.map +1 -1
  78. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts +4 -1
  79. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  80. package/dist/components/related-content/index.cjs +11 -9
  81. package/dist/components/related-content/index.cjs.map +1 -1
  82. package/dist/components/related-content/index.d.ts +1 -1
  83. package/dist/components/related-content/index.d.ts.map +1 -1
  84. package/dist/components/related-content/index.js +10 -8
  85. package/dist/components/related-content/related-content-section.d.ts +16 -1
  86. package/dist/components/related-content/related-content-section.d.ts.map +1 -1
  87. package/dist/components/shared/product-release/release-detail-page.d.ts +4 -1
  88. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  89. package/dist/components/social-icon-row.d.ts +17 -4
  90. package/dist/components/social-icon-row.d.ts.map +1 -1
  91. package/dist/components/tickets/index.cjs +81 -81
  92. package/dist/components/tickets/index.js +9 -9
  93. package/dist/components/ui/button/button.d.ts.map +1 -1
  94. package/dist/components/ui/drawer.d.ts +6 -2
  95. package/dist/components/ui/drawer.d.ts.map +1 -1
  96. package/dist/components/ui/file-manager/index.cjs +20 -20
  97. package/dist/components/ui/file-manager/index.js +1 -1
  98. package/dist/components/ui/index.cjs +10 -8
  99. package/dist/components/ui/index.cjs.map +1 -1
  100. package/dist/components/ui/index.js +9 -7
  101. package/dist/hooks/index.cjs +4 -4
  102. package/dist/hooks/index.js +3 -3
  103. package/dist/index.cjs +13 -9
  104. package/dist/index.cjs.map +1 -1
  105. package/dist/index.js +17 -13
  106. package/dist/nats/index.cjs +2 -2
  107. package/dist/nats/index.js +1 -1
  108. package/dist/nats/nats-provider.d.ts.map +1 -1
  109. package/dist/nats/nats.d.ts.map +1 -1
  110. package/dist/types/blog.d.ts +7 -0
  111. package/dist/types/blog.d.ts.map +1 -1
  112. package/dist/types/entity-author.d.ts +18 -0
  113. package/dist/types/entity-author.d.ts.map +1 -0
  114. package/dist/types/index.cjs.map +1 -1
  115. package/dist/types/index.d.ts +1 -0
  116. package/dist/types/index.d.ts.map +1 -1
  117. package/dist/types/index.js.map +1 -1
  118. package/dist/types/navigation.d.ts +1 -0
  119. package/dist/types/navigation.d.ts.map +1 -1
  120. package/dist/types/product-release.d.ts +2 -7
  121. package/dist/types/product-release.d.ts.map +1 -1
  122. package/dist/utils/common.d.ts +9 -0
  123. package/dist/utils/common.d.ts.map +1 -1
  124. package/dist/utils/index.cjs +6 -2
  125. package/dist/utils/index.cjs.map +1 -1
  126. package/dist/utils/index.d.ts +1 -1
  127. package/dist/utils/index.d.ts.map +1 -1
  128. package/dist/utils/index.js +6 -3
  129. package/dist/utils/index.js.map +1 -1
  130. package/package.json +1 -1
  131. package/src/components/chat/entity-cards/entity-author-card.tsx +30 -11
  132. package/src/components/chat/hooks/use-nats-dialog-subscription.ts +6 -4
  133. package/src/components/chat/index.ts +1 -0
  134. package/src/components/chat/types/entities/onboarding-guide.ts +3 -7
  135. package/src/components/faq/faq-section.tsx +4 -1
  136. package/src/components/features/notifications/notification-drawer.tsx +16 -13
  137. package/src/components/icons/x-logo.tsx +2 -2
  138. package/src/components/navigation/navigation-sidebar-item.tsx +14 -1
  139. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +5 -0
  140. package/src/components/related-content/index.ts +1 -0
  141. package/src/components/related-content/related-content-section.tsx +84 -8
  142. package/src/components/shared/product-release/release-detail-page.tsx +18 -21
  143. package/src/components/social-icon-row.tsx +51 -22
  144. package/src/components/ui/button/button.tsx +7 -0
  145. package/src/components/ui/drawer.tsx +10 -3
  146. package/src/nats/nats-provider.tsx +1 -0
  147. package/src/nats/nats.ts +5 -1
  148. package/src/types/blog.ts +9 -1
  149. package/src/types/entity-author.ts +17 -0
  150. package/src/types/index.ts +1 -0
  151. package/src/types/navigation.ts +1 -0
  152. package/src/types/product-release.ts +2 -7
  153. package/src/utils/common.ts +12 -0
  154. package/src/utils/index.ts +1 -1
  155. package/dist/chunk-265KKBV2.js.map +0 -1
  156. package/dist/chunk-2FCXJTOV.js.map +0 -1
  157. package/dist/chunk-3TDLFCCS.cjs.map +0 -1
  158. package/dist/chunk-6LK4VEXE.cjs.map +0 -1
  159. package/dist/chunk-BE472J6X.js.map +0 -1
  160. package/dist/chunk-CZR7ARBA.js.map +0 -1
  161. package/dist/chunk-LKI3YCAX.js.map +0 -1
  162. package/dist/chunk-MKVKVJQQ.js.map +0 -1
  163. package/dist/chunk-NP5U35FA.js.map +0 -1
  164. package/dist/chunk-OZ3GH6OQ.cjs.map +0 -1
  165. package/dist/chunk-SGJBUL2Y.cjs.map +0 -1
  166. package/dist/chunk-TSY72CQ6.cjs.map +0 -1
  167. package/dist/chunk-TU26IZPO.cjs.map +0 -1
  168. package/dist/chunk-VAUI3CND.js.map +0 -1
  169. package/dist/chunk-ZITMX2IQ.cjs.map +0 -1
  170. /package/dist/{chunk-QCRQNKRO.js.map → chunk-46DHPQY6.js.map} +0 -0
  171. /package/dist/{chunk-4RDJZIHW.js.map → chunk-6GBA6YJN.js.map} +0 -0
  172. /package/dist/{chunk-4HHYUEMD.js.map → chunk-7RLV3U5C.js.map} +0 -0
  173. /package/dist/{chunk-CAPVFI5A.js.map → chunk-HCMVLEC3.js.map} +0 -0
@@ -14,7 +14,10 @@ import {
14
14
  useMdUp,
15
15
  useOnboardingState,
16
16
  useToast
17
- } from "./chunk-4RDJZIHW.js";
17
+ } from "./chunk-6GBA6YJN.js";
18
+ import {
19
+ cn as cn2
20
+ } from "./chunk-NR535XIY.js";
18
21
  import {
19
22
  Checkbox,
20
23
  FieldWrapper,
@@ -25,7 +28,7 @@ import {
25
28
  acquireClient,
26
29
  releaseClient,
27
30
  startConnectionLifecycle
28
- } from "./chunk-CZR7ARBA.js";
31
+ } from "./chunk-PHWQLKVE.js";
29
32
  import {
30
33
  ActionsMenuDropdown,
31
34
  BackButton,
@@ -78,7 +81,7 @@ import {
78
81
  useControllableState,
79
82
  useEntityCardLink,
80
83
  useEntityCardPlaceholder
81
- } from "./chunk-LKI3YCAX.js";
84
+ } from "./chunk-V5L4D454.js";
82
85
  import {
83
86
  useAutoLimitTags,
84
87
  useDebounce
@@ -109,7 +112,7 @@ import {
109
112
  init_button,
110
113
  init_button2,
111
114
  usePortalContainer
112
- } from "./chunk-2FCXJTOV.js";
115
+ } from "./chunk-QXSRQVRO.js";
113
116
  import {
114
117
  init_next_link,
115
118
  next_link_default
@@ -149,7 +152,7 @@ import {
149
152
  WindowsIcon,
150
153
  XLogo,
151
154
  YouTubeIcon
152
- } from "./chunk-265KKBV2.js";
155
+ } from "./chunk-V4IIBNTA.js";
153
156
  import {
154
157
  cn,
155
158
  init_cn,
@@ -3332,6 +3335,99 @@ var ChatQuickAction = React5.forwardRef(
3332
3335
  );
3333
3336
  ChatQuickAction.displayName = "ChatQuickAction";
3334
3337
 
3338
+ // src/components/chat/chat-quick-action-row.tsx
3339
+ init_cn();
3340
+ import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
3341
+ function ChipButton({ chip }) {
3342
+ return /* @__PURE__ */ jsx25(
3343
+ "button",
3344
+ {
3345
+ type: "button",
3346
+ onClick: chip.onSelect,
3347
+ className: "shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
3348
+ children: /* @__PURE__ */ jsx25(Tag, { variant: chip.variant ?? "outline", icon: chip.icon, label: chip.label })
3349
+ }
3350
+ );
3351
+ }
3352
+ function ChatQuickActionRow({
3353
+ leading,
3354
+ chips,
3355
+ className
3356
+ }) {
3357
+ const auto = useAutoLimitTags({
3358
+ count: chips.length,
3359
+ reserveInputWidth: false
3360
+ });
3361
+ const visibleChips = chips.slice(0, auto.visibleCount);
3362
+ const hiddenChips = chips.slice(auto.visibleCount);
3363
+ if (!leading && chips.length === 0) return null;
3364
+ return /* @__PURE__ */ jsxs21(
3365
+ "div",
3366
+ {
3367
+ className: cn("relative flex shrink-0 items-center gap-1", className),
3368
+ children: [
3369
+ leading,
3370
+ chips.length > 0 && // Measured zone: `flex-1 min-w-0 overflow-hidden` so it claims the width
3371
+ // left by the pinned `leading` slot and clips anything past the fit.
3372
+ /* @__PURE__ */ jsxs21(
3373
+ "div",
3374
+ {
3375
+ ref: auto.middleRef,
3376
+ className: "flex flex-1 min-w-0 items-center gap-1 overflow-hidden",
3377
+ children: [
3378
+ visibleChips.map((chip) => /* @__PURE__ */ jsx25(ChipButton, { chip }, chip.id)),
3379
+ hiddenChips.length > 0 && /* @__PURE__ */ jsx25(
3380
+ ActionsMenuDropdown,
3381
+ {
3382
+ triggerAriaLabel: "More quick actions",
3383
+ onCloseAutoFocus: (e) => e.preventDefault(),
3384
+ groups: [
3385
+ {
3386
+ items: hiddenChips.map((chip) => ({
3387
+ id: chip.id,
3388
+ label: chip.label,
3389
+ icon: chip.icon,
3390
+ onClick: chip.onSelect
3391
+ }))
3392
+ }
3393
+ ],
3394
+ customTrigger: /* @__PURE__ */ jsx25(
3395
+ "button",
3396
+ {
3397
+ ref: auto.badgeRef,
3398
+ type: "button",
3399
+ "aria-label": "More quick actions",
3400
+ className: "shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
3401
+ children: /* @__PURE__ */ jsx25(Tag, { variant: "outline", label: /* @__PURE__ */ jsx25(Ellipsis01Icon, { size: 16 }) })
3402
+ }
3403
+ )
3404
+ }
3405
+ )
3406
+ ]
3407
+ }
3408
+ ),
3409
+ /* @__PURE__ */ jsx25(
3410
+ "div",
3411
+ {
3412
+ ref: auto.measureRef,
3413
+ "aria-hidden": true,
3414
+ className: "pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-1",
3415
+ children: chips.map((chip) => /* @__PURE__ */ jsx25(
3416
+ Tag,
3417
+ {
3418
+ variant: chip.variant ?? "outline",
3419
+ icon: chip.icon,
3420
+ label: chip.label
3421
+ },
3422
+ `measure-${chip.id}`
3423
+ ))
3424
+ }
3425
+ )
3426
+ ]
3427
+ }
3428
+ );
3429
+ }
3430
+
3335
3431
  // src/components/chat/chat-ticket-list.tsx
3336
3432
  init_cn();
3337
3433
  import * as React7 from "react";
@@ -3340,7 +3436,7 @@ import * as React7 from "react";
3340
3436
  init_cn();
3341
3437
  import * as React6 from "react";
3342
3438
  import { ChevronRight as ChevronRight2 } from "lucide-react";
3343
- import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
3439
+ import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
3344
3440
  var ChatTicketItem = React6.forwardRef(
3345
3441
  ({ className, ticket, onClick, ...props }, ref) => {
3346
3442
  const statusTagProps = resolveStatusTagProps({
@@ -3351,7 +3447,7 @@ var ChatTicketItem = React6.forwardRef(
3351
3447
  });
3352
3448
  const isResolved = ticket.statusKind === "RESOLVED" || resolveTicketStatus(ticket.status) === "RESOLVED";
3353
3449
  const subtitle = [ticket.ticketNumber, ticket.category, ticket.timeAgo].filter(Boolean).join(" \u2022 ");
3354
- return /* @__PURE__ */ jsxs21(
3450
+ return /* @__PURE__ */ jsxs22(
3355
3451
  "button",
3356
3452
  {
3357
3453
  ref,
@@ -3372,8 +3468,8 @@ var ChatTicketItem = React6.forwardRef(
3372
3468
  ),
3373
3469
  ...props,
3374
3470
  children: [
3375
- /* @__PURE__ */ jsxs21("div", { className: "flex flex-col justify-center flex-1 min-w-0 text-left", children: [
3376
- /* @__PURE__ */ jsx25(
3471
+ /* @__PURE__ */ jsxs22("div", { className: "flex flex-col justify-center flex-1 min-w-0 text-left", children: [
3472
+ /* @__PURE__ */ jsx26(
3377
3473
  "p",
3378
3474
  {
3379
3475
  className: cn(
@@ -3384,19 +3480,19 @@ var ChatTicketItem = React6.forwardRef(
3384
3480
  children: ticket.title
3385
3481
  }
3386
3482
  ),
3387
- subtitle && /* @__PURE__ */ jsx25("p", { className: "text-h6 text-ods-text-secondary truncate", title: subtitle, children: subtitle })
3483
+ subtitle && /* @__PURE__ */ jsx26("p", { className: "text-h6 text-ods-text-secondary truncate", title: subtitle, children: subtitle })
3388
3484
  ] }),
3389
- ticket.linkedTaskLabel && /* @__PURE__ */ jsx25(
3485
+ ticket.linkedTaskLabel && /* @__PURE__ */ jsx26(
3390
3486
  Tag,
3391
3487
  {
3392
3488
  label: ticket.linkedTaskLabel,
3393
3489
  variant: "outline",
3394
- icon: /* @__PURE__ */ jsx25(WrenchIcon, { size: 14, color: "var(--ods-text-secondary)" }),
3490
+ icon: /* @__PURE__ */ jsx26(WrenchIcon, { size: 14, color: "var(--ods-text-secondary)" }),
3395
3491
  className: "shrink-0 hidden sm:inline-flex"
3396
3492
  }
3397
3493
  ),
3398
- (statusTagProps.status || statusTagProps.label) && /* @__PURE__ */ jsx25(TicketStatusTag, { ...statusTagProps }),
3399
- /* @__PURE__ */ jsx25("div", { className: "flex items-center justify-center shrink-0 size-12 rounded-md bg-ods-card border border-ods-border", children: /* @__PURE__ */ jsx25(ChevronRight2, { className: "size-6 text-ods-text-secondary" }) })
3494
+ (statusTagProps.status || statusTagProps.label) && /* @__PURE__ */ jsx26(TicketStatusTag, { ...statusTagProps }),
3495
+ /* @__PURE__ */ jsx26("div", { className: "flex items-center justify-center shrink-0 size-12 rounded-md bg-ods-card border border-ods-border", children: /* @__PURE__ */ jsx26(ChevronRight2, { className: "size-6 text-ods-text-secondary" }) })
3400
3496
  ]
3401
3497
  }
3402
3498
  );
@@ -3405,7 +3501,7 @@ var ChatTicketItem = React6.forwardRef(
3405
3501
  ChatTicketItem.displayName = "ChatTicketItem";
3406
3502
 
3407
3503
  // src/components/chat/chat-ticket-list.tsx
3408
- import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
3504
+ import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
3409
3505
  function getMask(top, bottom) {
3410
3506
  if (top && bottom) return "linear-gradient(to bottom, transparent, black 64px, black calc(100% - 64px), transparent)";
3411
3507
  if (top) return "linear-gradient(to bottom, transparent, black 64px)";
@@ -3429,9 +3525,9 @@ var ChatTicketList = React7.forwardRef(
3429
3525
  }, [ticketCount, updateFade]);
3430
3526
  if (tickets.length === 0) return null;
3431
3527
  const mask = getMask(fadeTop, fadeBottom);
3432
- return /* @__PURE__ */ jsxs22("div", { ref, className: cn("flex flex-col gap-2 min-h-0", className), ...props, children: [
3433
- /* @__PURE__ */ jsx26("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
3434
- /* @__PURE__ */ jsx26(
3528
+ return /* @__PURE__ */ jsxs23("div", { ref, className: cn("flex flex-col gap-2 min-h-0", className), ...props, children: [
3529
+ /* @__PURE__ */ jsx27("p", { className: "text-h5 text-ods-text-secondary shrink-0", children: "Your Chats:" }),
3530
+ /* @__PURE__ */ jsx27(
3435
3531
  "div",
3436
3532
  {
3437
3533
  className: cn(
@@ -3439,14 +3535,14 @@ var ChatTicketList = React7.forwardRef(
3439
3535
  !fadeTop && "border-t rounded-t-md",
3440
3536
  !fadeBottom && "border-b rounded-b-md"
3441
3537
  ),
3442
- children: /* @__PURE__ */ jsx26(
3538
+ children: /* @__PURE__ */ jsx27(
3443
3539
  "div",
3444
3540
  {
3445
3541
  ref: scrollRef,
3446
3542
  className: "overflow-y-auto h-full",
3447
3543
  onScroll: updateFade,
3448
3544
  style: mask !== "none" ? { maskImage: mask, WebkitMaskImage: mask } : void 0,
3449
- children: tickets.map((ticket) => /* @__PURE__ */ jsx26(
3545
+ children: tickets.map((ticket) => /* @__PURE__ */ jsx27(
3450
3546
  ChatTicketItem,
3451
3547
  {
3452
3548
  ticket,
@@ -3465,7 +3561,7 @@ ChatTicketList.displayName = "ChatTicketList";
3465
3561
 
3466
3562
  // src/components/chat/mingo-onboarding-card-skeleton.tsx
3467
3563
  init_cn();
3468
- import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
3564
+ import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
3469
3565
  function MingoOnboardingCardSkeleton({
3470
3566
  titleWidth = "w-32",
3471
3567
  slashWidth = "w-20",
@@ -3474,25 +3570,25 @@ function MingoOnboardingCardSkeleton({
3474
3570
  className
3475
3571
  }) {
3476
3572
  const hasChips = chipWidths.length > 0;
3477
- return /* @__PURE__ */ jsx27(
3573
+ return /* @__PURE__ */ jsx28(
3478
3574
  "div",
3479
3575
  {
3480
3576
  className: cn(
3481
3577
  "flex w-full items-start p-[var(--spacing-system-s)] bg-ods-card border-b border-ods-border last:border-b-0",
3482
3578
  className
3483
3579
  ),
3484
- children: /* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)] w-full", children: [
3485
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] w-full", children: [
3486
- /* @__PURE__ */ jsx27(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
3487
- /* @__PURE__ */ jsx27(Skeleton, { className: cn("h-3.5 rounded-sm", titleWidth) }),
3488
- /* @__PURE__ */ jsx27("span", { className: "flex-1" }),
3489
- /* @__PURE__ */ jsx27(Skeleton, { className: cn("h-3.5 rounded-sm shrink-0", slashWidth) })
3580
+ children: /* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)] w-full", children: [
3581
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-[var(--spacing-system-xxs)] w-full", children: [
3582
+ /* @__PURE__ */ jsx28(Skeleton, { className: "size-4 shrink-0 rounded-sm" }),
3583
+ /* @__PURE__ */ jsx28(Skeleton, { className: cn("h-3.5 rounded-sm", titleWidth) }),
3584
+ /* @__PURE__ */ jsx28("span", { className: "flex-1" }),
3585
+ /* @__PURE__ */ jsx28(Skeleton, { className: cn("h-3.5 rounded-sm shrink-0", slashWidth) })
3490
3586
  ] }),
3491
- /* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
3492
- /* @__PURE__ */ jsx27(Skeleton, { className: "h-3.5 w-full rounded-sm" }),
3493
- descriptionLines === 2 ? /* @__PURE__ */ jsx27(Skeleton, { className: "h-3.5 w-[70%] rounded-sm" }) : null
3587
+ /* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-[var(--spacing-system-xxs)]", children: [
3588
+ /* @__PURE__ */ jsx28(Skeleton, { className: "h-3.5 w-full rounded-sm" }),
3589
+ descriptionLines === 2 ? /* @__PURE__ */ jsx28(Skeleton, { className: "h-3.5 w-[70%] rounded-sm" }) : null
3494
3590
  ] }),
3495
- hasChips ? /* @__PURE__ */ jsx27("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: chipWidths.map((w, i) => /* @__PURE__ */ jsx27(Skeleton, { className: cn("h-7 rounded-md", w) }, i)) }) : null
3591
+ hasChips ? /* @__PURE__ */ jsx28("div", { className: "flex flex-wrap items-center gap-[var(--spacing-system-xxs)] mt-[var(--spacing-system-xs)]", children: chipWidths.map((w, i) => /* @__PURE__ */ jsx28(Skeleton, { className: cn("h-7 rounded-md", w) }, i)) }) : null
3496
3592
  ] })
3497
3593
  }
3498
3594
  );
@@ -3501,7 +3597,7 @@ function MingoOnboardingListSkeleton({
3501
3597
  rows = 6,
3502
3598
  className
3503
3599
  }) {
3504
- return /* @__PURE__ */ jsx27(
3600
+ return /* @__PURE__ */ jsx28(
3505
3601
  "div",
3506
3602
  {
3507
3603
  role: "status",
@@ -3513,7 +3609,7 @@ function MingoOnboardingListSkeleton({
3513
3609
  ),
3514
3610
  children: Array.from({ length: rows }).map((_, i) => {
3515
3611
  const variant = ROW_VARIANTS[i % ROW_VARIANTS.length];
3516
- return /* @__PURE__ */ jsx27(
3612
+ return /* @__PURE__ */ jsx28(
3517
3613
  MingoOnboardingCardSkeleton,
3518
3614
  {
3519
3615
  titleWidth: variant.titleWidth,
@@ -3543,7 +3639,7 @@ import * as React9 from "react";
3543
3639
  init_cn();
3544
3640
  import * as React8 from "react";
3545
3641
  init_button2();
3546
- import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
3642
+ import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
3547
3643
  function dialogTime(d) {
3548
3644
  if (!d.timestamp) return null;
3549
3645
  const t = typeof d.timestamp === "string" ? Date.parse(d.timestamp) : d.timestamp.getTime();
@@ -3595,7 +3691,7 @@ function MingoChatHistoryRow({
3595
3691
  onClick: () => onRequestArchive(dialog)
3596
3692
  }
3597
3693
  ].filter(Boolean);
3598
- return /* @__PURE__ */ jsxs24(
3694
+ return /* @__PURE__ */ jsxs25(
3599
3695
  "div",
3600
3696
  {
3601
3697
  className: cn(
@@ -3604,7 +3700,7 @@ function MingoChatHistoryRow({
3604
3700
  isActive && "bg-ods-bg-hover"
3605
3701
  ),
3606
3702
  children: [
3607
- /* @__PURE__ */ jsxs24(
3703
+ /* @__PURE__ */ jsxs25(
3608
3704
  "div",
3609
3705
  {
3610
3706
  role: "button",
@@ -3618,8 +3714,8 @@ function MingoChatHistoryRow({
3618
3714
  },
3619
3715
  className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)] p-[var(--spacing-system-s)] cursor-pointer focus:outline-none focus-visible:bg-ods-bg-hover",
3620
3716
  children: [
3621
- unread > 0 ? /* @__PURE__ */ jsx28("span", { className: "flex h-8 min-w-8 shrink-0 items-center justify-center rounded-md bg-ods-accent px-[var(--spacing-system-xsf)] text-h5 text-ods-text-on-accent", children: unread > 99 ? "99+" : unread }) : null,
3622
- /* @__PURE__ */ jsx28(
3717
+ unread > 0 ? /* @__PURE__ */ jsx29("span", { className: "flex h-8 min-w-8 shrink-0 items-center justify-center rounded-md bg-ods-accent px-[var(--spacing-system-xsf)] text-h5 text-ods-text-on-accent", children: unread > 99 ? "99+" : unread }) : null,
3718
+ /* @__PURE__ */ jsx29(
3623
3719
  "span",
3624
3720
  {
3625
3721
  className: "min-w-0 flex-1 truncate text-h4 text-ods-text-primary",
@@ -3635,7 +3731,7 @@ function MingoChatHistoryRow({
3635
3731
  // right edge, free of the content's left padding. Revealed on row
3636
3732
  // hover/focus; kept visible while its menu is open. Hidden on mobile —
3637
3733
  // it's a hover affordance (no hover on touch).
3638
- /* @__PURE__ */ jsx28(
3734
+ /* @__PURE__ */ jsx29(
3639
3735
  "span",
3640
3736
  {
3641
3737
  onClick: (e) => e.stopPropagation(),
@@ -3647,7 +3743,7 @@ function MingoChatHistoryRow({
3647
3743
  "self-stretch shrink-0 transition-opacity max-md:hidden",
3648
3744
  menuOpen ? "opacity-100" : "opacity-0 group-hover/row:opacity-100 focus-within:opacity-100"
3649
3745
  ),
3650
- children: /* @__PURE__ */ jsx28(
3746
+ children: /* @__PURE__ */ jsx29(
3651
3747
  ActionsMenuDropdown,
3652
3748
  {
3653
3749
  triggerAriaLabel: "Chat actions",
@@ -3655,14 +3751,14 @@ function MingoChatHistoryRow({
3655
3751
  open: menuOpen,
3656
3752
  onOpenChange: setMenuOpen,
3657
3753
  onCloseAutoFocus: (e) => e.preventDefault(),
3658
- customTrigger: /* @__PURE__ */ jsx28(
3754
+ customTrigger: /* @__PURE__ */ jsx29(
3659
3755
  Button,
3660
3756
  {
3661
3757
  variant: "transparent",
3662
3758
  size: "icon",
3663
3759
  "aria-label": "Chat actions",
3664
3760
  className: "h-full md:h-full rounded-none p-0 text-ods-text-secondary hover:text-ods-text-primary",
3665
- children: /* @__PURE__ */ jsx28(Ellipsis01Icon, {})
3761
+ children: /* @__PURE__ */ jsx29(Ellipsis01Icon, {})
3666
3762
  }
3667
3763
  )
3668
3764
  }
@@ -3679,7 +3775,7 @@ function MingoChatHistorySkeleton({ className }) {
3679
3775
  { withBadge: 2, widths: ["w-3/5", "w-4/5", "w-2/5", "w-3/4"] },
3680
3776
  { withBadge: 0, widths: ["w-1/2", "w-3/5", "w-2/3"] }
3681
3777
  ];
3682
- return /* @__PURE__ */ jsx28(
3778
+ return /* @__PURE__ */ jsx29(
3683
3779
  "div",
3684
3780
  {
3685
3781
  "aria-hidden": true,
@@ -3687,15 +3783,15 @@ function MingoChatHistorySkeleton({ className }) {
3687
3783
  "flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)] overflow-hidden",
3688
3784
  className
3689
3785
  ),
3690
- children: groups.map((group, g) => /* @__PURE__ */ jsxs24("div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
3691
- /* @__PURE__ */ jsx28("div", { className: "h-3 w-16 animate-pulse rounded bg-ods-border" }),
3692
- /* @__PURE__ */ jsx28("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.widths.map((w, i) => /* @__PURE__ */ jsxs24(
3786
+ children: groups.map((group, g) => /* @__PURE__ */ jsxs25("div", { className: "flex shrink-0 flex-col gap-[var(--spacing-system-xxs)]", children: [
3787
+ /* @__PURE__ */ jsx29("div", { className: "h-3 w-16 animate-pulse rounded bg-ods-border" }),
3788
+ /* @__PURE__ */ jsx29("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.widths.map((w, i) => /* @__PURE__ */ jsxs25(
3693
3789
  "div",
3694
3790
  {
3695
3791
  className: "flex h-12 items-center gap-[var(--spacing-system-xsf)] bg-ods-bg border-b border-ods-border px-[var(--spacing-system-s)] last:border-b-0",
3696
3792
  children: [
3697
- i < group.withBadge && /* @__PURE__ */ jsx28("div", { className: "h-8 w-8 shrink-0 animate-pulse rounded-md bg-ods-border" }),
3698
- /* @__PURE__ */ jsx28("div", { className: cn("h-4 animate-pulse rounded bg-ods-border", w) })
3793
+ i < group.withBadge && /* @__PURE__ */ jsx29("div", { className: "h-8 w-8 shrink-0 animate-pulse rounded-md bg-ods-border" }),
3794
+ /* @__PURE__ */ jsx29("div", { className: cn("h-4 animate-pulse rounded bg-ods-border", w) })
3699
3795
  ]
3700
3796
  },
3701
3797
  i
@@ -3754,21 +3850,21 @@ function MingoChatHistory({
3754
3850
  io.observe(sentinel);
3755
3851
  return () => io.disconnect();
3756
3852
  }, [hasMore]);
3757
- return /* @__PURE__ */ jsxs24("div", { className: cn("relative flex flex-1 min-h-0 flex-col", className), children: [
3758
- /* @__PURE__ */ jsxs24(
3853
+ return /* @__PURE__ */ jsxs25("div", { className: cn("relative flex flex-1 min-h-0 flex-col", className), children: [
3854
+ /* @__PURE__ */ jsxs25(
3759
3855
  "div",
3760
3856
  {
3761
3857
  ref: scrollRef,
3762
3858
  onScroll: updateFade,
3763
3859
  className: "flex flex-1 min-h-0 flex-col gap-[var(--spacing-system-m)] overflow-y-auto",
3764
3860
  children: [
3765
- groups.map((group) => /* @__PURE__ */ jsxs24(
3861
+ groups.map((group) => /* @__PURE__ */ jsxs25(
3766
3862
  "div",
3767
3863
  {
3768
3864
  className: "flex flex-col gap-[var(--spacing-system-xxs)]",
3769
3865
  children: [
3770
- /* @__PURE__ */ jsx28("p", { className: "text-h5 text-ods-text-secondary", children: group.label }),
3771
- /* @__PURE__ */ jsx28("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.items.map((dialog) => /* @__PURE__ */ jsx28(
3866
+ /* @__PURE__ */ jsx29("p", { className: "text-h5 text-ods-text-secondary", children: group.label }),
3867
+ /* @__PURE__ */ jsx29("div", { className: "overflow-hidden rounded-md border border-ods-border", children: group.items.map((dialog) => /* @__PURE__ */ jsx29(
3772
3868
  MingoChatHistoryRow,
3773
3869
  {
3774
3870
  dialog,
@@ -3783,11 +3879,11 @@ function MingoChatHistory({
3783
3879
  },
3784
3880
  group.key
3785
3881
  )),
3786
- hasMore ? /* @__PURE__ */ jsx28("div", { ref: sentinelRef, className: "h-px shrink-0" }) : null
3882
+ hasMore ? /* @__PURE__ */ jsx29("div", { ref: sentinelRef, className: "h-px shrink-0" }) : null
3787
3883
  ]
3788
3884
  }
3789
3885
  ),
3790
- /* @__PURE__ */ jsx28(
3886
+ /* @__PURE__ */ jsx29(
3791
3887
  "div",
3792
3888
  {
3793
3889
  "aria-hidden": true,
@@ -3800,7 +3896,7 @@ function MingoChatHistory({
3800
3896
  }
3801
3897
  }
3802
3898
  ),
3803
- /* @__PURE__ */ jsx28(
3899
+ /* @__PURE__ */ jsx29(
3804
3900
  "div",
3805
3901
  {
3806
3902
  "aria-hidden": true,
@@ -3816,99 +3912,6 @@ function MingoChatHistory({
3816
3912
  ] });
3817
3913
  }
3818
3914
 
3819
- // src/components/chat/chat-quick-action-row.tsx
3820
- init_cn();
3821
- import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
3822
- function ChipButton({ chip }) {
3823
- return /* @__PURE__ */ jsx29(
3824
- "button",
3825
- {
3826
- type: "button",
3827
- onClick: chip.onSelect,
3828
- className: "shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
3829
- children: /* @__PURE__ */ jsx29(Tag, { variant: chip.variant ?? "outline", icon: chip.icon, label: chip.label })
3830
- }
3831
- );
3832
- }
3833
- function ChatQuickActionRow({
3834
- leading,
3835
- chips,
3836
- className
3837
- }) {
3838
- const auto = useAutoLimitTags({
3839
- count: chips.length,
3840
- reserveInputWidth: false
3841
- });
3842
- const visibleChips = chips.slice(0, auto.visibleCount);
3843
- const hiddenChips = chips.slice(auto.visibleCount);
3844
- if (!leading && chips.length === 0) return null;
3845
- return /* @__PURE__ */ jsxs25(
3846
- "div",
3847
- {
3848
- className: cn("relative flex shrink-0 items-center gap-1", className),
3849
- children: [
3850
- leading,
3851
- chips.length > 0 && // Measured zone: `flex-1 min-w-0 overflow-hidden` so it claims the width
3852
- // left by the pinned `leading` slot and clips anything past the fit.
3853
- /* @__PURE__ */ jsxs25(
3854
- "div",
3855
- {
3856
- ref: auto.middleRef,
3857
- className: "flex flex-1 min-w-0 items-center gap-1 overflow-hidden",
3858
- children: [
3859
- visibleChips.map((chip) => /* @__PURE__ */ jsx29(ChipButton, { chip }, chip.id)),
3860
- hiddenChips.length > 0 && /* @__PURE__ */ jsx29(
3861
- ActionsMenuDropdown,
3862
- {
3863
- triggerAriaLabel: "More quick actions",
3864
- onCloseAutoFocus: (e) => e.preventDefault(),
3865
- groups: [
3866
- {
3867
- items: hiddenChips.map((chip) => ({
3868
- id: chip.id,
3869
- label: chip.label,
3870
- icon: chip.icon,
3871
- onClick: chip.onSelect
3872
- }))
3873
- }
3874
- ],
3875
- customTrigger: /* @__PURE__ */ jsx29(
3876
- "button",
3877
- {
3878
- ref: auto.badgeRef,
3879
- type: "button",
3880
- "aria-label": "More quick actions",
3881
- className: "shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent",
3882
- children: /* @__PURE__ */ jsx29(Tag, { variant: "outline", label: /* @__PURE__ */ jsx29(Ellipsis01Icon, { size: 16 }) })
3883
- }
3884
- )
3885
- }
3886
- )
3887
- ]
3888
- }
3889
- ),
3890
- /* @__PURE__ */ jsx29(
3891
- "div",
3892
- {
3893
- ref: auto.measureRef,
3894
- "aria-hidden": true,
3895
- className: "pointer-events-none invisible absolute left-0 top-0 -z-10 flex gap-1",
3896
- children: chips.map((chip) => /* @__PURE__ */ jsx29(
3897
- Tag,
3898
- {
3899
- variant: chip.variant ?? "outline",
3900
- icon: chip.icon,
3901
- label: chip.label
3902
- },
3903
- `measure-${chip.id}`
3904
- ))
3905
- }
3906
- )
3907
- ]
3908
- }
3909
- );
3910
- }
3911
-
3912
3915
  // src/components/chat/mingo-welcome.tsx
3913
3916
  init_button2();
3914
3917
  import { Fragment as Fragment2, jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
@@ -10520,7 +10523,7 @@ var DrawerHeader = ({
10520
10523
  }
10521
10524
  );
10522
10525
  DrawerHeader.displayName = "DrawerHeader";
10523
- var DrawerTitle = React40.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs66("div", { className: "flex items-start gap-4", children: [
10526
+ var DrawerTitle = React40.forwardRef(({ className, children, actions, ...props }, ref) => /* @__PURE__ */ jsxs66("div", { className: "flex items-start gap-4", children: [
10524
10527
  /* @__PURE__ */ jsx85(
10525
10528
  DialogPrimitive2.Title,
10526
10529
  {
@@ -10533,6 +10536,7 @@ var DrawerTitle = React40.forwardRef(({ className, children, ...props }, ref) =>
10533
10536
  children
10534
10537
  }
10535
10538
  ),
10539
+ actions,
10536
10540
  /* @__PURE__ */ jsxs66(DialogPrimitive2.Close, { className: "shrink-0 rounded-sm text-ods-text-secondary transition-colors hover:text-ods-text-primary outline-none ring-0 focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0", children: [
10537
10541
  /* @__PURE__ */ jsx85(X5, { className: "size-6" }),
10538
10542
  /* @__PURE__ */ jsx85("span", { className: "sr-only", children: "Close" })
@@ -12152,41 +12156,6 @@ import React54 from "react";
12152
12156
  // src/utils/index.ts
12153
12157
  init_cn();
12154
12158
  init_platform_domains();
12155
-
12156
- // src/utils/common.ts
12157
- import { clsx } from "clsx";
12158
- import { twMerge } from "tailwind-merge";
12159
- function cn2(...inputs) {
12160
- return twMerge(clsx(inputs));
12161
- }
12162
- function delay(ms) {
12163
- return new Promise((resolve) => setTimeout(resolve, ms));
12164
- }
12165
- function generateRandomString(length = 8) {
12166
- const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
12167
- let result = "";
12168
- for (let i = 0; i < length; i++) {
12169
- result += chars.charAt(Math.floor(Math.random() * chars.length));
12170
- }
12171
- return result;
12172
- }
12173
- function truncateString(str, maxLength, suffix = "...") {
12174
- if (str.length <= maxLength) return str;
12175
- return str.substring(0, maxLength - suffix.length) + suffix;
12176
- }
12177
- function deepClone(obj) {
12178
- return JSON.parse(JSON.stringify(obj));
12179
- }
12180
- function getSlackCommunityJoinUrl() {
12181
- const url = process.env.NEXT_PUBLIC_SLACK_COMMUNITY_JOIN_URL;
12182
- if (!url) {
12183
- console.warn("NEXT_PUBLIC_SLACK_COMMUNITY_JOIN_URL is not defined in environment variables");
12184
- return "https://join.slack.com/t/openmsp/shared_invite/zt-36bl7mx0h-3~U2nFH6nqHqoTPXMaHEHA";
12185
- }
12186
- return url;
12187
- }
12188
-
12189
- // src/utils/index.ts
12190
12159
  init_cn();
12191
12160
 
12192
12161
  // src/utils/os-platforms.ts
@@ -20847,7 +20816,6 @@ function useOptionalNotifications() {
20847
20816
  }
20848
20817
 
20849
20818
  // src/components/features/notifications/notification-drawer.tsx
20850
- import * as DialogPrimitive3 from "@radix-ui/react-dialog";
20851
20819
  import { useEffect as useEffect36, useRef as useRef28 } from "react";
20852
20820
  init_button();
20853
20821
  init_cn();
@@ -20990,19 +20958,23 @@ function NotificationDrawer({
20990
20958
  className
20991
20959
  ),
20992
20960
  children: [
20993
- /* @__PURE__ */ jsxs140("div", { className: "flex items-baseline justify-between gap-[var(--spacing-system-m)] px-[var(--spacing-system-m)] pt-[var(--spacing-system-m)]", children: [
20994
- /* @__PURE__ */ jsx180(DialogPrimitive3.Title, { className: "min-w-0 flex-1 truncate text-h3 text-ods-text-primary", children: "New Notifications" }),
20995
- /* @__PURE__ */ jsx180(
20996
- "button",
20997
- {
20998
- type: "button",
20999
- disabled: unreadCount === 0,
21000
- onClick: markAllRead,
21001
- className: "text-h6 text-ods-text-secondary underline transition-colors hover:text-ods-text-primary disabled:opacity-40",
21002
- children: "Complete All"
21003
- }
21004
- )
21005
- ] }),
20961
+ /* @__PURE__ */ jsx180("div", { className: "px-[var(--spacing-system-m)] pt-[var(--spacing-system-m)]", children: /* @__PURE__ */ jsx180(
20962
+ DrawerTitle,
20963
+ {
20964
+ className: "truncate",
20965
+ actions: /* @__PURE__ */ jsx180(
20966
+ "button",
20967
+ {
20968
+ type: "button",
20969
+ disabled: unreadCount === 0,
20970
+ onClick: markAllRead,
20971
+ className: "self-center text-h6 text-ods-text-secondary underline transition-colors hover:text-ods-text-primary disabled:opacity-40",
20972
+ children: "Complete All"
20973
+ }
20974
+ ),
20975
+ children: "New Notifications"
20976
+ }
20977
+ ) }),
21006
20978
  /* @__PURE__ */ jsx180(
21007
20979
  DrawerScrollList,
21008
20980
  {
@@ -22998,6 +22970,8 @@ function NavigationSidebarItemButton({
22998
22970
  onClick
22999
22971
  }) {
23000
22972
  const isActive = item.isActive ?? false;
22973
+ const unreadCount = item.unreadCount ?? 0;
22974
+ const hasUnread = unreadCount > 0;
23001
22975
  return /* @__PURE__ */ jsxs153(
23002
22976
  "button",
23003
22977
  {
@@ -23024,9 +22998,12 @@ function NavigationSidebarItemButton({
23024
22998
  "aria-label": item.label,
23025
22999
  "aria-current": isActive ? "page" : void 0,
23026
23000
  children: [
23027
- /* @__PURE__ */ jsx196("div", { className: "flex items-center justify-center flex-shrink-0", children: cloneElement(item.icon, {
23028
- color: isActive && !disabled ? "text-ods-accent" : "text-ods-text-secondary"
23029
- }) }),
23001
+ /* @__PURE__ */ jsxs153("div", { className: "relative flex items-center justify-center flex-shrink-0", children: [
23002
+ cloneElement(item.icon, {
23003
+ color: isActive && !disabled ? "text-ods-accent" : "text-ods-text-secondary"
23004
+ }),
23005
+ hasUnread && !showLabel && /* @__PURE__ */ jsx196("span", { className: "absolute top-0 right-0 bg-ods-warning rounded-full w-2 h-2" })
23006
+ ] }),
23030
23007
  /* @__PURE__ */ jsx196(
23031
23008
  "span",
23032
23009
  {
@@ -23038,6 +23015,7 @@ function NavigationSidebarItemButton({
23038
23015
  children: item.label
23039
23016
  }
23040
23017
  ),
23018
+ hasUnread && showLabel && /* @__PURE__ */ jsx196("span", { className: "bg-ods-accent flex items-center justify-center flex-shrink-0 p-2 rounded-md size-6", children: /* @__PURE__ */ jsx196("span", { className: "text-xs font-medium text-ods-text-on-accent", children: unreadCount > 99 ? "99+" : unreadCount }) }),
23041
23019
  item.badge && showLabel && /* @__PURE__ */ jsx196(
23042
23020
  "span",
23043
23021
  {
@@ -23893,7 +23871,7 @@ function AppLayout({
23893
23871
  // src/components/navigation/app-layout-drawer.tsx
23894
23872
  init_cn();
23895
23873
  import * as React82 from "react";
23896
- import * as DialogPrimitive4 from "@radix-ui/react-dialog";
23874
+ import * as DialogPrimitive3 from "@radix-ui/react-dialog";
23897
23875
  import { cva as cva8 } from "class-variance-authority";
23898
23876
  import { jsx as jsx206, jsxs as jsxs162 } from "react/jsx-runtime";
23899
23877
  var DrawerOpenContext = React82.createContext(false);
@@ -23916,7 +23894,7 @@ var AppLayoutDrawerRoot = ({
23916
23894
  [isControlled, onOpenChange]
23917
23895
  );
23918
23896
  return /* @__PURE__ */ jsx206(DrawerOpenContext.Provider, { value: open, children: /* @__PURE__ */ jsx206(
23919
- DialogPrimitive4.Root,
23897
+ DialogPrimitive3.Root,
23920
23898
  {
23921
23899
  ...rest,
23922
23900
  open,
@@ -23927,8 +23905,8 @@ var AppLayoutDrawerRoot = ({
23927
23905
  ) });
23928
23906
  };
23929
23907
  AppLayoutDrawerRoot.displayName = "AppLayoutDrawer";
23930
- var AppLayoutDrawerTrigger = DialogPrimitive4.Trigger;
23931
- var AppLayoutDrawerClose = DialogPrimitive4.Close;
23908
+ var AppLayoutDrawerTrigger = DialogPrimitive3.Trigger;
23909
+ var AppLayoutDrawerClose = DialogPrimitive3.Close;
23932
23910
  var appLayoutDrawerVariants = cva8(
23933
23911
  "absolute z-[45] flex outline-none focus:outline-none focus-visible:outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-300",
23934
23912
  {
@@ -24257,7 +24235,7 @@ var AppLayoutDrawerContent = React82.forwardRef(
24257
24235
  const applyInlineSize = resizable && !isMobile;
24258
24236
  const sizeStyle = applyInlineSize ? isHorizontal ? { width: size } : { height: size } : {};
24259
24237
  if (keepMounted && !hasOpened) return null;
24260
- return /* @__PURE__ */ jsxs162(DialogPrimitive4.Portal, { container: portalContainer, forceMount: persist || void 0, children: [
24238
+ return /* @__PURE__ */ jsxs162(DialogPrimitive3.Portal, { container: portalContainer, forceMount: persist || void 0, children: [
24261
24239
  /* @__PURE__ */ jsx206(
24262
24240
  "div",
24263
24241
  {
@@ -24274,7 +24252,7 @@ var AppLayoutDrawerContent = React82.forwardRef(
24274
24252
  }
24275
24253
  ),
24276
24254
  /* @__PURE__ */ jsxs162(
24277
- DialogPrimitive4.Content,
24255
+ DialogPrimitive3.Content,
24278
24256
  {
24279
24257
  ref,
24280
24258
  forceMount: persist || void 0,
@@ -34168,7 +34146,7 @@ function useNatsDialogSubscription({
34168
34146
  abortControllerRef.current?.abort();
34169
34147
  abortControllerRef.current = null;
34170
34148
  };
34171
- const isDisconnectStatus = (status) => status === "closed" || status === "disconnected" || status === "error";
34149
+ const isDisconnectStatus = (status) => status === "closed" || status === "disconnected";
34172
34150
  const lifecycle = startConnectionLifecycle({
34173
34151
  conn: sharedConn,
34174
34152
  wsUrl,
@@ -34176,7 +34154,7 @@ function useNatsDialogSubscription({
34176
34154
  backoff: reconnectionBackoffRef.current,
34177
34155
  getFreshUrl: () => getNatsWsUrlRef.current(),
34178
34156
  shouldRetryOn: isDisconnectStatus,
34179
- onStatusChange: (status) => {
34157
+ onStatusChange: (status, evt) => {
34180
34158
  if (status === "connected") {
34181
34159
  setIsConnected(true);
34182
34160
  if (hadConnectionBeforeRef.current) {
@@ -34185,6 +34163,10 @@ function useNatsDialogSubscription({
34185
34163
  hadConnectionBeforeRef.current = true;
34186
34164
  onConnectRef.current?.();
34187
34165
  }
34166
+ if (status === "error") {
34167
+ console.warn("[NATS] protocol error:", evt.data);
34168
+ return;
34169
+ }
34188
34170
  if (isDisconnectStatus(status)) {
34189
34171
  setIsConnected(false);
34190
34172
  setIsSubscribed(false);
@@ -37946,7 +37928,7 @@ function chatChipClass({ tone, density = "chip", extra }) {
37946
37928
 
37947
37929
  // src/components/chat/embeddable-chat.tsx
37948
37930
  import { useCallback as useCallback43, useEffect as useEffect65, useMemo as useMemo30, useRef as useRef59, useState as useState89 } from "react";
37949
- import * as DialogPrimitive5 from "@radix-ui/react-dialog";
37931
+ import * as DialogPrimitive4 from "@radix-ui/react-dialog";
37950
37932
  import { usePreventScroll } from "@react-aria/overlays";
37951
37933
  import { isIOS } from "@react-aria/utils";
37952
37934
 
@@ -39016,7 +38998,7 @@ function EmbeddableChatInner({
39016
38998
  /* @__PURE__ */ jsx276("div", { ref: setPortalHost, style: { display: "contents" } })
39017
38999
  ] });
39018
39000
  const panel = shellLess ? /* @__PURE__ */ jsxs222(ChatPanelContext.Provider, { value: chatPanelHandle, children: [
39019
- /* @__PURE__ */ jsx276(VisuallyHidden, { children: /* @__PURE__ */ jsxs222(DialogPrimitive5.Title, { children: [
39001
+ /* @__PURE__ */ jsx276(VisuallyHidden, { children: /* @__PURE__ */ jsxs222(DialogPrimitive4.Title, { children: [
39020
39002
  sourceLabel,
39021
39003
  " AI Assistant"
39022
39004
  ] }) }),
@@ -39036,7 +39018,7 @@ function EmbeddableChatInner({
39036
39018
  "aria-describedby": void 0,
39037
39019
  className: "\n mingo-chat-content !bg-ods-bg shadow-2xl\n focus:outline-none focus-visible:outline-none\n w-screen md:w-auto\n ",
39038
39020
  children: [
39039
- /* @__PURE__ */ jsx276(VisuallyHidden, { children: /* @__PURE__ */ jsxs222(DialogPrimitive5.Title, { children: [
39021
+ /* @__PURE__ */ jsx276(VisuallyHidden, { children: /* @__PURE__ */ jsxs222(DialogPrimitive4.Title, { children: [
39040
39022
  sourceLabel,
39041
39023
  " AI Assistant"
39042
39024
  ] }) }),
@@ -39251,6 +39233,7 @@ export {
39251
39233
  ChatMessageRow,
39252
39234
  ChatMessageRowSkeleton,
39253
39235
  ChatQuickAction,
39236
+ ChatQuickActionRow,
39254
39237
  ChatTicketItem,
39255
39238
  ChatTicketList,
39256
39239
  MingoOnboardingCardSkeleton,
@@ -39429,11 +39412,6 @@ export {
39429
39412
  Toggle,
39430
39413
  ToggleGroup,
39431
39414
  ToggleGroupItem,
39432
- delay,
39433
- generateRandomString,
39434
- truncateString,
39435
- deepClone,
39436
- getSlackCommunityJoinUrl,
39437
39415
  OS_PLATFORMS,
39438
39416
  DEFAULT_OS_PLATFORM,
39439
39417
  isValidEmailDomain,
@@ -39739,4 +39717,4 @@ export {
39739
39717
  LogsList,
39740
39718
  assets
39741
39719
  };
39742
- //# sourceMappingURL=chunk-NP5U35FA.js.map
39720
+ //# sourceMappingURL=chunk-S7IX7YU4.js.map