@flamingo-stack/openframe-frontend-core 0.0.745 → 0.0.746

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 (85) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-LJ46XYYP.cjs → chunk-2ZVNXD74.cjs} +24 -24
  3. package/dist/{chunk-75BF7YJR.cjs → chunk-3AUTORMB.cjs} +13 -13
  4. package/dist/{chunk-FNIFUCXU.cjs → chunk-3KVB5FQZ.cjs} +5 -5
  5. package/dist/{chunk-HMSCUL4R.cjs → chunk-3OAACQQG.cjs} +4 -4
  6. package/dist/{chunk-RIGSZEXS.cjs → chunk-5X3F2KL7.cjs} +90 -90
  7. package/dist/{chunk-M4FKV2U5.cjs → chunk-7AKFKPBV.cjs} +12 -12
  8. package/dist/{chunk-4N7KGOBS.cjs → chunk-B24U6KNJ.cjs} +3 -3
  9. package/dist/{chunk-7KHQHYXL.cjs → chunk-DJ4YDVBF.cjs} +18 -18
  10. package/dist/{chunk-NFINQ7IZ.cjs → chunk-FAN73OTP.cjs} +6 -6
  11. package/dist/{chunk-QES5NV4T.cjs → chunk-GPSHFEF2.cjs} +645 -635
  12. package/dist/{chunk-GOTEXQZN.cjs → chunk-GSFANY2L.cjs} +80 -80
  13. package/dist/{chunk-URVIPSAJ.cjs → chunk-HNLI4OU5.cjs} +14 -14
  14. package/dist/{chunk-6IQDQQ56.cjs → chunk-IRKUFXVV.cjs} +38 -38
  15. package/dist/{chunk-ABLUMGCI.cjs → chunk-JHQNUWFM.cjs} +83 -33
  16. package/dist/{chunk-4A6OF4HI.cjs → chunk-KVPSV4ZI.cjs} +44 -44
  17. package/dist/{chunk-UY6A6TEY.cjs → chunk-L2IQESTQ.cjs} +2 -2
  18. package/dist/{chunk-YIOWV7LS.cjs → chunk-NZMQIAQC.cjs} +2 -2
  19. package/dist/{chunk-YJRMCFX3.cjs → chunk-O4J4NIMB.cjs} +7 -7
  20. package/dist/{chunk-GAGNKWOC.cjs → chunk-OWABNVDV.cjs} +2 -2
  21. package/dist/{chunk-PM5ELQBL.cjs → chunk-PLBJ3XVC.cjs} +32 -32
  22. package/dist/{chunk-OWGLRE74.cjs → chunk-PSIKUDUV.cjs} +8 -8
  23. package/dist/{chunk-3LX5AGZO.cjs → chunk-SDDZHPVK.cjs} +24 -24
  24. package/dist/{chunk-GQ2TRIOV.cjs → chunk-SLODGX6D.cjs} +35 -35
  25. package/dist/{chunk-DJO7YMT3.cjs → chunk-TILK7SC4.cjs} +194 -194
  26. package/dist/{chunk-U2O5YQRP.cjs → chunk-U6XWGK53.cjs} +33 -33
  27. package/dist/{chunk-JGZEHBBD.cjs → chunk-VZGCSVH7.cjs} +10 -10
  28. package/dist/{chunk-GEEKJ7SH.cjs → chunk-X4Y74M5K.cjs} +74 -74
  29. package/dist/{chunk-HVR7DPAY.cjs → chunk-XQJOYPPN.cjs} +4 -4
  30. package/dist/{chunk-7PQOZLVP.cjs → chunk-YKF66VQY.cjs} +20 -20
  31. package/dist/{chunk-5TCIRWHL.cjs → chunk-YRULLK7N.cjs} +5 -5
  32. package/dist/{cloud-tenants-DECPWIYQ.cjs → cloud-tenants-OKUFSNPW.cjs} +13 -13
  33. package/dist/components/case-studies/index.cjs +25 -25
  34. package/dist/components/chat/index.cjs +9 -9
  35. package/dist/components/contact/index.cjs +14 -14
  36. package/dist/components/docs/index.cjs +17 -17
  37. package/dist/components/embeds/index.cjs +14 -14
  38. package/dist/components/faq/index.cjs +15 -15
  39. package/dist/components/features/index.cjs +13 -13
  40. package/dist/components/help-center-pages/index.cjs +116 -116
  41. package/dist/components/index.cjs +119 -125
  42. package/dist/components/meeting-scheduler/index.cjs +63 -63
  43. package/dist/components/navigation/index.cjs +16 -16
  44. package/dist/components/onboarding-guides/index.cjs +16 -16
  45. package/dist/components/product-demo/index.cjs +9 -9
  46. package/dist/components/related-content/index.cjs +7 -7
  47. package/dist/components/tickets/index.cjs +19 -19
  48. package/dist/components/ui/filter-checkbox-item.d.ts +8 -2
  49. package/dist/components/ui/filter-checkbox-item.d.ts.map +1 -1
  50. package/dist/components/ui/filter-checkbox-item.js +14 -4
  51. package/dist/components/ui/index.cjs +13 -13
  52. package/dist/components/unified-filter-logic.js +1 -1
  53. package/dist/components/vendor-tag.d.ts +12 -0
  54. package/dist/components/vendor-tag.d.ts.map +1 -1
  55. package/dist/components/vendor-tag.js +50 -47
  56. package/dist/{devices-HJKDRWQX.cjs → devices-URCDMYFU.cjs} +14 -14
  57. package/dist/{embeddable-chat-3SKFBO2P.cjs → embeddable-chat-B35GB5B6.cjs} +80 -80
  58. package/dist/index.cjs +20 -18
  59. package/dist/{knowledge-NH2CGY2C.cjs → knowledge-5MW2PREQ.cjs} +14 -14
  60. package/dist/{logs-KZYIDYQK.cjs → logs-LJJK5CK4.cjs} +21 -21
  61. package/dist/{policies-UAVTPIKM.cjs → policies-6TCEWQYG.cjs} +17 -17
  62. package/dist/{remote-session-N4PJB5FW.cjs → remote-session-IYT4LWJC.cjs} +7 -7
  63. package/dist/{scripts-FRPY43KU.cjs → scripts-ABB2P6PT.cjs} +20 -20
  64. package/dist/{software-update-AEJJNLX5.cjs → software-update-4427ZRMO.cjs} +17 -17
  65. package/dist/{tickets-board-O753S4ZB.cjs → tickets-board-4MT6ZB4F.cjs} +8 -8
  66. package/dist/utils/format.d.ts.map +1 -1
  67. package/dist/utils/format.js +2 -3
  68. package/dist/utils/index.cjs +74 -24
  69. package/dist/utils/index.d.ts +1 -1
  70. package/dist/utils/index.d.ts.map +1 -1
  71. package/dist/utils/index.js +8 -6
  72. package/dist/utils/vendor-classification.d.ts +43 -17
  73. package/dist/utils/vendor-classification.d.ts.map +1 -1
  74. package/dist/utils/vendor-classification.js +73 -22
  75. package/package.json +1 -1
  76. package/src/components/ui/filter-checkbox-item.tsx +21 -5
  77. package/src/components/unified-filter-logic.tsx +1 -1
  78. package/src/components/vendor-tag.tsx +73 -69
  79. package/src/utils/format.ts +2 -3
  80. package/src/utils/index.ts +7 -5
  81. package/src/utils/vendor-classification.ts +113 -34
  82. package/dist/utils/format-text-stub.d.ts +0 -5
  83. package/dist/utils/format-text-stub.d.ts.map +0 -1
  84. package/dist/utils/format-text-stub.js +0 -20
  85. package/src/utils/format-text-stub.ts +0 -17
@@ -12,7 +12,7 @@ var _chunkLU7TD6QScjs = require('./chunk-LU7TD6QS.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunkOWGLRE74cjs = require('./chunk-OWGLRE74.cjs');
15
+ var _chunkPSIKUDUVcjs = require('./chunk-PSIKUDUV.cjs');
16
16
 
17
17
 
18
18
 
@@ -73,7 +73,7 @@ var _chunkQYLIHZKZcjs = require('./chunk-QYLIHZKZ.cjs');
73
73
 
74
74
 
75
75
 
76
- var _chunkABLUMGCIcjs = require('./chunk-ABLUMGCI.cjs');
76
+ var _chunkJHQNUWFMcjs = require('./chunk-JHQNUWFM.cjs');
77
77
 
78
78
 
79
79
  var _chunkKTPR66EEcjs = require('./chunk-KTPR66EE.cjs');
@@ -177,7 +177,7 @@ function BoardColumnHeader({
177
177
  }) {
178
178
  const count = _nullishCoalesce(column.total, () => ( column.tickets.length));
179
179
  const tagStatus = _nullishCoalesce(column.statusKey, () => ( column.id));
180
- const useStatusVariant = _chunkOWGLRE74cjs.resolveTicketStatus.call(void 0, tagStatus) !== null;
180
+ const useStatusVariant = _chunkPSIKUDUVcjs.resolveTicketStatus.call(void 0, tagStatus) !== null;
181
181
  const actionClass = "h-8 w-8 p-0 content-md:h-8 content-md:w-8";
182
182
  if (collapsed) {
183
183
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full flex-col items-center gap-[var(--spacing-system-xsf)]", children: [
@@ -193,7 +193,7 @@ function BoardColumnHeader({
193
193
  }
194
194
  ),
195
195
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
196
- _chunkOWGLRE74cjs.TicketStatusTag,
196
+ _chunkPSIKUDUVcjs.TicketStatusTag,
197
197
  {
198
198
  status: tagStatus,
199
199
  label: column.label,
@@ -206,7 +206,7 @@ function BoardColumnHeader({
206
206
  }
207
207
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
208
208
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xsf)]", children: [
209
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOWGLRE74cjs.TicketStatusTag, { status: tagStatus, label: column.label, color: useStatusVariant ? void 0 : column.color }),
209
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPSIKUDUVcjs.TicketStatusTag, { status: tagStatus, label: column.label, color: useStatusVariant ? void 0 : column.color }),
210
210
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-h5", style: useStatusVariant ? void 0 : { color: column.color }, children: count })
211
211
  ] }),
212
212
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xxs)]", children: [
@@ -264,7 +264,7 @@ function tintOnDark(hex) {
264
264
 
265
265
  function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
266
266
  const [expanded, setExpanded] = _react.useState.call(void 0, false);
267
- const { innerRef, containerStyle } = _chunkOWGLRE74cjs.useCollapsible.call(void 0, { expanded });
267
+ const { innerRef, containerStyle } = _chunkPSIKUDUVcjs.useCollapsible.call(void 0, { expanded });
268
268
  const isAdmin = pendingApproval.approvalType === "ADMIN";
269
269
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "pointer-events-auto flex flex-col", children: [
270
270
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -293,7 +293,7 @@ function BoardTicketApproval({ pendingApproval, onApprove, onReject }) {
293
293
  }
294
294
  ),
295
295
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: containerStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: innerRef, className: "pt-[var(--spacing-system-xs)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
296
- _chunkOWGLRE74cjs.ApprovalBatchMessage,
296
+ _chunkPSIKUDUVcjs.ApprovalBatchMessage,
297
297
  {
298
298
  className: "mb-0",
299
299
  data: {
@@ -485,7 +485,7 @@ function TicketCardBody({
485
485
  role: "img",
486
486
  "aria-label": `Owned by ${ticket.agent === "fae" ? "Fae" : "Mingo"}`,
487
487
  className: "flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-full border border-ods-border bg-ods-bg",
488
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOWGLRE74cjs.AgentMark, { agent: ticket.agent, className: ticket.agent === "fae" ? "size-full" : "size-5" })
488
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPSIKUDUVcjs.AgentMark, { agent: ticket.agent, className: ticket.agent === "fae" ? "size-full" : "size-5" })
489
489
  }
490
490
  ),
491
491
  renderAssignSlot ? renderAssignSlot(ticket) : _optionalChain([ticket, 'access', _19 => _19.assignees, 'optionalAccess', _20 => _20.length]) ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex -space-x-2", children: [
@@ -498,7 +498,7 @@ function TicketCardBody({
498
498
  },
499
499
  a.id
500
500
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
501
- _chunkABLUMGCIcjs.SquareAvatar,
501
+ _chunkJHQNUWFMcjs.SquareAvatar,
502
502
  {
503
503
  src: a.avatarUrl,
504
504
  alt: _nullishCoalesce(_nullishCoalesce(a.name, () => ( a.initials)), () => ( a.id)),
@@ -515,8 +515,8 @@ function TicketCardBody({
515
515
  ] })
516
516
  ] }) : null
517
517
  ] }) : null;
518
- const timestampLabel = ticket.createdAt ? _chunkOWGLRE74cjs.formatTicketRelativeTime.call(void 0, ticket.createdAt) : null;
519
- const tooltipLabel = ticket.createdAt ? _chunkOWGLRE74cjs.formatTicketFullTimestamp.call(void 0, ticket.createdAt) : null;
518
+ const timestampLabel = ticket.createdAt ? _chunkPSIKUDUVcjs.formatTicketRelativeTime.call(void 0, ticket.createdAt) : null;
519
+ const tooltipLabel = ticket.createdAt ? _chunkPSIKUDUVcjs.formatTicketFullTimestamp.call(void 0, ticket.createdAt) : null;
520
520
  const metaLabel = [ticket.ticketNumber || null, timestampLabel].filter(Boolean).join(" \u2022 ");
521
521
  const metaClass = "truncate text-ods-text-secondary text-h6";
522
522
  const meta = href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -565,7 +565,7 @@ function TicketCardBody({
565
565
  }
566
566
  ),
567
567
  showNewMessage && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
568
- _chunkABLUMGCIcjs.Tag,
568
+ _chunkJHQNUWFMcjs.Tag,
569
569
  {
570
570
  label: "New Message",
571
571
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJSIUVERGcjs.MessagesIcon, { size: 16, color: newMessageTextColor }),
@@ -785,8 +785,8 @@ function TicketTagRow({ tags }) {
785
785
  const visible = tags.slice(0, MAX_VISIBLE_TAGS);
786
786
  const hidden = tags.length - visible.length;
787
787
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-8 flex-wrap items-start gap-[var(--spacing-system-xxs)] overflow-clip", children: [
788
- visible.map((tag) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkABLUMGCIcjs.Tag, { variant: "outline", label: tag }, tag)),
789
- hidden > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkABLUMGCIcjs.Tag, { variant: "outline", label: `+${hidden}` })
788
+ visible.map((tag) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJHQNUWFMcjs.Tag, { variant: "outline", label: tag }, tag)),
789
+ hidden > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJHQNUWFMcjs.Tag, { variant: "outline", label: `+${hidden}` })
790
790
  ] });
791
791
  }
792
792
 
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
- var _chunkHMSCUL4Rcjs = require('./chunk-HMSCUL4R.cjs');
4
+ var _chunk3OAACQQGcjs = require('./chunk-3OAACQQG.cjs');
5
5
 
6
6
 
7
7
 
@@ -12,7 +12,7 @@ var _chunkHMSCUL4Rcjs = require('./chunk-HMSCUL4R.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunkQES5NV4Tcjs = require('./chunk-QES5NV4T.cjs');
15
+ var _chunkGPSHFEF2cjs = require('./chunk-GPSHFEF2.cjs');
16
16
 
17
17
 
18
18
  var _chunkNTGIQP7Ocjs = require('./chunk-NTGIQP7O.cjs');
@@ -32,13 +32,13 @@ var _chunk24I6RFVUcjs = require('./chunk-24I6RFVU.cjs');
32
32
 
33
33
 
34
34
 
35
- var _chunkGOTEXQZNcjs = require('./chunk-GOTEXQZN.cjs');
35
+ var _chunkGSFANY2Lcjs = require('./chunk-GSFANY2L.cjs');
36
36
 
37
37
 
38
- var _chunkDJO7YMT3cjs = require('./chunk-DJO7YMT3.cjs');
38
+ var _chunkTILK7SC4cjs = require('./chunk-TILK7SC4.cjs');
39
39
 
40
40
 
41
- var _chunkOWGLRE74cjs = require('./chunk-OWGLRE74.cjs');
41
+ var _chunkPSIKUDUVcjs = require('./chunk-PSIKUDUV.cjs');
42
42
 
43
43
 
44
44
  var _chunk756VZNPPcjs = require('./chunk-756VZNPP.cjs');
@@ -87,11 +87,11 @@ var _chunkSKI6NKOEcjs = require('./chunk-SKI6NKOE.cjs');
87
87
 
88
88
 
89
89
 
90
- var _chunkLJ46XYYPcjs = require('./chunk-LJ46XYYP.cjs');
90
+ var _chunk2ZVNXD74cjs = require('./chunk-2ZVNXD74.cjs');
91
91
 
92
92
 
93
93
 
94
- var _chunkABLUMGCIcjs = require('./chunk-ABLUMGCI.cjs');
94
+ var _chunkJHQNUWFMcjs = require('./chunk-JHQNUWFM.cjs');
95
95
 
96
96
 
97
97
  var _chunkR34JD6NPcjs = require('./chunk-R34JD6NP.cjs');
@@ -155,7 +155,7 @@ function RowGlyph({ link, box, glyph }) {
155
155
  {
156
156
  "aria-hidden": "true",
157
157
  className: _chunk3ATAYP36cjs.cn.call(void 0, "flex shrink-0 items-center justify-center overflow-hidden rounded-full", box),
158
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLJ46XYYPcjs.EntityIcon, { icon: link.icon, className: "h-full w-full" })
158
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2ZVNXD74cjs.EntityIcon, { icon: link.icon, className: "h-full w-full" })
159
159
  }
160
160
  );
161
161
  }
@@ -168,7 +168,7 @@ function RowGlyph({ link, box, glyph }) {
168
168
  "flex shrink-0 items-center justify-center rounded-lg border border-ods-border bg-ods-bg text-ods-text-primary",
169
169
  box
170
170
  ),
171
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLJ46XYYPcjs.EntityIcon, { icon: { name: link.iconName }, size: glyph })
171
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2ZVNXD74cjs.EntityIcon, { icon: { name: link.iconName }, size: glyph })
172
172
  }
173
173
  );
174
174
  }
@@ -181,7 +181,7 @@ function NavItemRow({
181
181
  className
182
182
  }) {
183
183
  const label = navLinkLabel(link);
184
- const counter = badge ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQES5NV4Tcjs.UnreadCountBadge, { count: badge, className: "static shrink-0" }) : null;
184
+ const counter = badge ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGPSHFEF2cjs.UnreadCountBadge, { count: badge, className: "static shrink-0" }) : null;
185
185
  const singleLine = !link.description && !link.builtOn;
186
186
  const rowClassName = _chunk3ATAYP36cjs.cn.call(void 0,
187
187
  ROW_CLASSES[variant],
@@ -198,7 +198,7 @@ function NavItemRow({
198
198
  ] });
199
199
  } else if (variant === "side") {
200
200
  children = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
201
- link.iconName && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "flex shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLJ46XYYPcjs.EntityIcon, { icon: { name: link.iconName }, size: 18 }) }),
201
+ link.iconName && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", className: "flex shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2ZVNXD74cjs.EntityIcon, { icon: { name: link.iconName }, size: 18 }) }),
202
202
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0 flex-1", children: label }),
203
203
  counter
204
204
  ] });
@@ -302,7 +302,7 @@ var NavPanel = _react.forwardRef.call(void 0, function NavPanelImpl({
302
302
  !!_optionalChain([menu, 'access', _10 => _10.features, 'optionalAccess', _11 => _11.length]) && // One row of cards, as many as the bar's width holds: a card that
303
303
  // would wrap lands on a zero-height row, where its cell clips it.
304
304
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "grid min-w-0 flex-[3] auto-rows-[0px] grid-cols-[repeat(auto-fit,minmax(240px,1fr))] grid-rows-[minmax(0,1fr)] gap-x-[var(--spacing-system-mf)]", children: menu.features.map((feature) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-0 min-w-0 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
305
- _chunkLJ46XYYPcjs.CaseStudyCard,
305
+ _chunk2ZVNXD74cjs.CaseStudyCard,
306
306
  {
307
307
  size: "menu",
308
308
  study: feature.study,
@@ -419,7 +419,7 @@ function TopNavigation({
419
419
 
420
420
  var TOP_ITEM_CLASS = "relative inline-flex h-10 items-center gap-1.5 whitespace-nowrap rounded-md px-3.5 text-ods-text-secondary transition-colors text-h6 hover:bg-ods-bg-hover hover:text-ods-text-primary";
421
421
  var TOP_ITEM_CURRENT_CLASS = "rounded-b-none bg-gradient-to-b from-transparent to-ods-accent/10 text-ods-text-primary after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:bg-ods-accent";
422
- var menuIcon = (menu) => menu.iconName ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLJ46XYYPcjs.EntityIcon, { icon: { name: menu.iconName }, size: 20, className: "size-5 shrink-0" }) : null;
422
+ var menuIcon = (menu) => menu.iconName ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2ZVNXD74cjs.EntityIcon, { icon: { name: menu.iconName }, size: 20, className: "size-5 shrink-0" }) : null;
423
423
  function SiteHeader({
424
424
  nav,
425
425
  pathname,
@@ -569,7 +569,7 @@ function SiteHeader({
569
569
  leading: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
570
570
  leading,
571
571
  mobile && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
572
- _chunkQES5NV4Tcjs.HeaderButton,
572
+ _chunkGPSHFEF2cjs.HeaderButton,
573
573
  {
574
574
  className: "border-r border-ods-border lg:hidden",
575
575
  onClick: mobile.onToggle,
@@ -595,7 +595,7 @@ function SiteHeader({
595
595
  centerClassName: "justify-start pl-[var(--spacing-system-xlf)]",
596
596
  cta: hasRight ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
597
597
  mingo && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
598
- _chunkGOTEXQZNcjs.MingoAiButton,
598
+ _chunkGSFANY2Lcjs.MingoAiButton,
599
599
  {
600
600
  source: mingo.source,
601
601
  icon: mingo.icon,
@@ -697,7 +697,7 @@ function MobileNavSheetBody({
697
697
  ] }),
698
698
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-h-0 flex-1 overflow-y-auto overflow-x-hidden overscroll-contain px-5", children: [
699
699
  askAI && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
700
- _chunkGOTEXQZNcjs.MingoAiButton,
700
+ _chunkGSFANY2Lcjs.MingoAiButton,
701
701
  {
702
702
  variant: "field",
703
703
  source: askAI.source,
@@ -875,7 +875,7 @@ function SiteFooter({
875
875
  const columns = nav.footerColumns;
876
876
  const accordion = columns.length > ACCORDION_OVER;
877
877
  const socialRow = _nullishCoalesce(social, () => ( (nav.brand.social.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
878
- _chunkQES5NV4Tcjs.SocialIconRow,
878
+ _chunkGPSHFEF2cjs.SocialIconRow,
879
879
  {
880
880
  compact: true,
881
881
  links: nav.brand.social.map((link) => ({
@@ -978,7 +978,7 @@ var _framermotion = require('framer-motion');
978
978
 
979
979
  function SlidingSidebar({ config }) {
980
980
  const [expandedItems, setExpandedItems] = _react.useState.call(void 0, /* @__PURE__ */ new Set());
981
- const mounted = _chunkDJO7YMT3cjs.useIsHydrated.call(void 0, );
981
+ const mounted = _chunkTILK7SC4cjs.useIsHydrated.call(void 0, );
982
982
  const headerHeight = _chunk24I6RFVUcjs.useHeaderHeight.call(void 0, );
983
983
  const asideRef = _react.useRef.call(void 0, null);
984
984
  const prefersReducedMotion = _framermotion.useReducedMotion.call(void 0, );
@@ -1186,7 +1186,7 @@ function NavigationSidebarHeader({ minimized }) {
1186
1186
 
1187
1187
  function NavigationItemBadge({ label, compact = false, className, ...rest }) {
1188
1188
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1189
- _chunkABLUMGCIcjs.Tag,
1189
+ _chunkJHQNUWFMcjs.Tag,
1190
1190
  {
1191
1191
  as: "span",
1192
1192
  label,
@@ -1251,7 +1251,7 @@ var NavigationSidebarItemButton = _react.memo.call(void 0, function NavigationSi
1251
1251
  _react.cloneElement.call(void 0, item.icon, {
1252
1252
  color: isActive && !disabled ? "text-ods-accent" : "text-ods-text-secondary"
1253
1253
  }),
1254
- hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQES5NV4Tcjs.UnreadDot, { size: "fixed" })
1254
+ hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGPSHFEF2cjs.UnreadDot, { size: "fixed" })
1255
1255
  ] }),
1256
1256
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1257
1257
  "span",
@@ -1352,7 +1352,7 @@ function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
1352
1352
  setTabletFor(isTablet);
1353
1353
  if (isTablet) setTabletMinimized(true);
1354
1354
  }
1355
- const hydrated = _chunkDJO7YMT3cjs.useIsHydrated.call(void 0, );
1355
+ const hydrated = _chunkTILK7SC4cjs.useIsHydrated.call(void 0, );
1356
1356
  const minimized = hydrated ? isTablet ? tabletMinimized : desktopMinimized : _nullishCoalesce(config.minimized, () => ( false));
1357
1357
  const [transitionsEnabled, setTransitionsEnabled] = _react.useState.call(void 0, false);
1358
1358
  const isOverlayOpen = isTablet && !minimized;
@@ -1544,7 +1544,7 @@ function HeaderGlobalSearch({
1544
1544
  "form",
1545
1545
  {
1546
1546
  onSubmit: handleSubmit,
1547
- ..._chunkGOTEXQZNcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
1547
+ ..._chunkGSFANY2Lcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
1548
1548
  className: _chunk3ATAYP36cjs.cn.call(void 0,
1549
1549
  "flex h-full flex-1 items-center gap-2 px-3",
1550
1550
  // Transparent so the cell inherits the bar's background
@@ -1615,7 +1615,7 @@ function HeaderMingoButton({
1615
1615
  ) : (
1616
1616
  // Outer frame follows the button's text color (currentColor); the eyes
1617
1617
  // and corner block are ODS cyan.
1618
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOWGLRE74cjs.AgentMark, { agent: "mingo", className: "h-6 w-6 shrink-0" })
1618
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPSIKUDUVcjs.AgentMark, { agent: "mingo", className: "h-6 w-6 shrink-0" })
1619
1619
  ),
1620
1620
  !iconOnly && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "whitespace-nowrap font-bold tracking-[-0.36px] text-h3", children: "Mingo AI" })
1621
1621
  ]
@@ -1669,16 +1669,16 @@ function HeaderOrganizationFilter({
1669
1669
  // src/components/navigation/ticket-alerts-button.tsx
1670
1670
 
1671
1671
  function TicketAlertsButton({ href, onNavigate, disabled, className }) {
1672
- const live = _chunkHMSCUL4Rcjs.useOptionalTicketLive.call(void 0, );
1672
+ const live = _chunk3OAACQQGcjs.useOptionalTicketLive.call(void 0, );
1673
1673
  if (!live || !live.authed || live.unreadTotal === 0) return null;
1674
1674
  const targetId = live.nextUnreadTicketId;
1675
- const target = targetId ? _chunkGOTEXQZNcjs.buildTicketOpenHref.call(void 0, href, targetId) : href;
1675
+ const target = targetId ? _chunkGSFANY2Lcjs.buildTicketOpenHref.call(void 0, href, targetId) : href;
1676
1676
  const handleClick = () => {
1677
1677
  if (onNavigate) onNavigate(target);
1678
1678
  else window.location.assign(target);
1679
1679
  };
1680
1680
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1681
- _chunkQES5NV4Tcjs.HeaderButton,
1681
+ _chunkGPSHFEF2cjs.HeaderButton,
1682
1682
  {
1683
1683
  icon: (
1684
1684
  // Glyph inherits HeaderButton's standard cell coloring (secondary at
@@ -1688,7 +1688,7 @@ function TicketAlertsButton({ href, onNavigate, disabled, className }) {
1688
1688
  // existing while updates are unread — never by tinting the glyph.
1689
1689
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "relative inline-flex", children: [
1690
1690
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk365ZKGGOcjs.LifeBuoyIcon, { className: "h-6 w-6" }),
1691
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQES5NV4Tcjs.UnreadCountBadge, { count: live.unreadTotal })
1691
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGPSHFEF2cjs.UnreadCountBadge, { count: live.unreadTotal })
1692
1692
  ] })
1693
1693
  ),
1694
1694
  "aria-label": `Support tickets \u2014 ${live.unreadTotal} unread ${live.unreadTotal === 1 ? "update" : "updates"}`,
@@ -1764,7 +1764,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1764
1764
  leading: (
1765
1765
  // Mobile: Burger Menu Button
1766
1766
  !isMdUp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1767
- _chunkQES5NV4Tcjs.HeaderButton,
1767
+ _chunkGPSHFEF2cjs.HeaderButton,
1768
1768
  {
1769
1769
  onClick: onToggleMobileMenu,
1770
1770
  isActive: isMobileMenuOpen,
@@ -1790,7 +1790,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1790
1790
  center: showSearch ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderGlobalSearch, { onSubmit: onSearch, className: _chunk3ATAYP36cjs.cn.call(void 0, "w-full", dimmedClass) }) : void 0,
1791
1791
  sideActions: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1792
1792
  showSearch && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1793
- _chunkQES5NV4Tcjs.HeaderButton,
1793
+ _chunkGPSHFEF2cjs.HeaderButton,
1794
1794
  {
1795
1795
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ74QE57Tcjs.SearchIcon, { className: "h-6 w-6" }),
1796
1796
  "aria-label": "Search",
@@ -1807,7 +1807,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1807
1807
  className: _chunk3ATAYP36cjs.cn.call(void 0, "hidden lg:flex", dimmedClass)
1808
1808
  }
1809
1809
  ),
1810
- showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQES5NV4Tcjs.TimeTrackerHeaderButton, { disabled, className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass) }),
1810
+ showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGPSHFEF2cjs.TimeTrackerHeaderButton, { disabled, className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass) }),
1811
1811
  showNotifications && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1812
1812
  NotificationsHeaderButton,
1813
1813
  {
@@ -1827,10 +1827,10 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1827
1827
  ),
1828
1828
  isMdUp && showUser && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkL2RMTGOKcjs.DropdownMenu, { children: [
1829
1829
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkL2RMTGOKcjs.DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1830
- _chunkQES5NV4Tcjs.HeaderButton,
1830
+ _chunkGPSHFEF2cjs.HeaderButton,
1831
1831
  {
1832
1832
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1833
- _chunkABLUMGCIcjs.SquareAvatar,
1833
+ _chunkJHQNUWFMcjs.SquareAvatar,
1834
1834
  {
1835
1835
  src: userAvatarUrl || void 0,
1836
1836
  alt: userName || "User",
@@ -1856,7 +1856,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1856
1856
  children: [
1857
1857
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 border-b border-ods-border bg-ods-card p-3", children: [
1858
1858
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1859
- _chunkABLUMGCIcjs.SquareAvatar,
1859
+ _chunkJHQNUWFMcjs.SquareAvatar,
1860
1860
  {
1861
1861
  src: userAvatarUrl || void 0,
1862
1862
  alt: userName || "User",
@@ -1912,12 +1912,12 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
1912
1912
  );
1913
1913
  });
1914
1914
  function NotificationsHeaderButton({ fallbackUnreadCount, disabled, dimmedClass }) {
1915
- const ctx = _chunkQES5NV4Tcjs.useOptionalNotifications.call(void 0, );
1915
+ const ctx = _chunkGPSHFEF2cjs.useOptionalNotifications.call(void 0, );
1916
1916
  const hasUnread = (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _52 => _52.unreadCount]), () => ( fallbackUnreadCount))) > 0;
1917
1917
  const isActive = _nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _53 => _53.isOpen]), () => ( false));
1918
1918
  const onClick = _optionalChain([ctx, 'optionalAccess', _54 => _54.toggle]);
1919
1919
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1920
- _chunkQES5NV4Tcjs.HeaderButton,
1920
+ _chunkGPSHFEF2cjs.HeaderButton,
1921
1921
  {
1922
1922
  icon: isActive ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWWUSFOJ7cjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCON36SEJcjs.BellIcon, { className: "h-6 w-6" }),
1923
1923
  showUnreadDot: !isActive && hasUnread,
@@ -2475,7 +2475,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
2475
2475
  "aria-disabled": disabled || void 0,
2476
2476
  children: [
2477
2477
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2478
- _chunkABLUMGCIcjs.SquareAvatar,
2478
+ _chunkJHQNUWFMcjs.SquareAvatar,
2479
2479
  {
2480
2480
  src: user.userAvatarUrl || void 0,
2481
2481
  alt: user.userName || "User",
@@ -2590,7 +2590,7 @@ function AppLayout({
2590
2590
  }),
2591
2591
  []
2592
2592
  );
2593
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQES5NV4Tcjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQES5NV4Tcjs.AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex h-screen flex-col bg-ods-bg", className), children: [
2593
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGPSHFEF2cjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGPSHFEF2cjs.AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex h-screen flex-col bg-ods-bg", className), children: [
2594
2594
  topBar,
2595
2595
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative flex min-h-0 flex-1", children: [
2596
2596
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebar, { config: sidebarConfig, disabled, pushOnTablet: hasSidePanel }),
@@ -2614,7 +2614,7 @@ function AppLayout({
2614
2614
  disabled
2615
2615
  }
2616
2616
  ),
2617
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQES5NV4Tcjs.NotificationDrawer, {}),
2617
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGPSHFEF2cjs.NotificationDrawer, {}),
2618
2618
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
2619
2619
  "div",
2620
2620
  {
@@ -309,35 +309,85 @@ function Tag({
309
309
  }
310
310
 
311
311
  // src/utils/vendor-classification.ts
312
- var VENDOR_CLASSIFICATIONS = [
313
- "open_source",
314
- "commercial",
315
- "openframe_selected",
316
- "openframe_shipped",
317
- "openframe_connect"
318
- ];
319
- var OPENFRAME_CLASSIFICATIONS = {
312
+ var VENDOR_CLASSIFICATION_COPY = {
320
313
  openframe_selected: {
321
- word: "Selected",
322
314
  label: "OpenFrame Selected",
323
- description: "OpenFrame is a unified platform that integrates multiple open-source IT and security tools into a single dashboard for MSPs. This filter shows vendors selected by our team for their excellence, community support, and MSP-specific value."
315
+ word: "Selected",
316
+ description: "OpenFrame is a unified platform that integrates multiple open-source IT and security tools into a single dashboard for MSPs. This filter shows vendors selected by our team for their excellence, community support, and MSP-specific value.",
317
+ group: "openframe",
318
+ icon: { name: "openframe-logo", tone: "accent" }
319
+ },
320
+ openframe_connect: {
321
+ label: "OpenFrame Connect",
322
+ word: "Connect",
323
+ description: "Services OpenFrame connects to and manages for every client, such as Microsoft 365 and Google Workspace, beside devices and tickets.",
324
+ group: "openframe",
325
+ icon: { name: "openframe-logo", tone: "accent" }
324
326
  },
325
327
  openframe_shipped: {
326
- word: "Shipped",
327
328
  label: "OpenFrame Shipped",
328
- description: "Tools and OpenFrame products that are in the released OpenFrame product today, not on the roadmap."
329
+ word: "Shipped",
330
+ description: "Tools and OpenFrame products that are in the released OpenFrame product today, not on the roadmap.",
331
+ group: "openframe",
332
+ icon: { name: "openframe-logo", tone: "accent" }
329
333
  },
330
- openframe_connect: {
331
- word: "Connect",
332
- label: "OpenFrame Connect",
333
- description: "Services OpenFrame connects to and manages for every client, such as Microsoft 365 and Google Workspace, beside devices and tickets."
334
+ open_source: {
335
+ label: "Open Source",
336
+ description: "Released under an OSI-approved open-source license.",
337
+ group: "license",
338
+ icon: { name: "code", tone: "accent" }
339
+ },
340
+ source_available: {
341
+ label: "Source-available",
342
+ description: "The source code is public, but the license restricts how it may be used (for example SSPL, BSL, the Elastic License, or limits on company size or on offering it as a service).",
343
+ group: "license",
344
+ icon: { name: "file-code", tone: "neutral" }
345
+ },
346
+ commercial: {
347
+ label: "Commercial",
348
+ description: "Proprietary software sold by the vendor.",
349
+ group: "license",
350
+ icon: { name: "dollar", tone: "neutral" }
351
+ },
352
+ end_of_life: {
353
+ label: "End of life",
354
+ description: "The vendor has discontinued or retired the product. No new releases.",
355
+ group: "lifecycle",
356
+ icon: { name: "alert-triangle", tone: "warning" }
357
+ },
358
+ end_of_support: {
359
+ label: "End of support",
360
+ description: "The vendor no longer provides support or security fixes, though the product can still be obtained.",
361
+ group: "lifecycle",
362
+ icon: { name: "clock", tone: "warning" }
363
+ },
364
+ unmaintained: {
365
+ label: "Unmaintained",
366
+ description: "No release for years and no official end-of-life notice.",
367
+ group: "lifecycle",
368
+ icon: { name: "pause-circle", tone: "warning" }
334
369
  }
335
370
  };
336
- function isVendorClassification(value) {
337
- return VENDOR_CLASSIFICATIONS.includes(value);
371
+ function vendorClassificationCopy(value) {
372
+ if (!value || !Object.prototype.hasOwnProperty.call(VENDOR_CLASSIFICATION_COPY, value)) return void 0;
373
+ return VENDOR_CLASSIFICATION_COPY[value];
374
+ }
375
+ function vendorClassificationGroup(value) {
376
+ return _optionalChain([vendorClassificationCopy, 'call', _ => _(value), 'optionalAccess', _2 => _2.group]);
338
377
  }
339
378
  function isOpenFrameClassification(value) {
340
- return !!value && Object.prototype.hasOwnProperty.call(OPENFRAME_CLASSIFICATIONS, value);
379
+ return vendorClassificationGroup(value) === "openframe";
380
+ }
381
+ var DISPLAY_ORDER = Object.keys(VENDOR_CLASSIFICATION_COPY);
382
+ function compareVendorClassifications(a, b) {
383
+ const ia = DISPLAY_ORDER.indexOf(a);
384
+ const ib = DISPLAY_ORDER.indexOf(b);
385
+ if (ia !== -1 || ib !== -1) {
386
+ if (ia === -1) return 1;
387
+ if (ib === -1) return -1;
388
+ return ia - ib;
389
+ }
390
+ return a.localeCompare(b);
341
391
  }
342
392
 
343
393
  // src/utils/format.ts
@@ -534,7 +584,7 @@ function formatDateWithTimezone(date, timezone, style = "medium", options) {
534
584
  const dateObj = toValidDate(date);
535
585
  if (!dateObj) return "";
536
586
  const { timeZone: _ignored, ...fields } = typeof style === "string" ? ZONED_DATE_STYLES[style] : style;
537
- return formatterFor(timezone, fields, _optionalChain([options, 'optionalAccess', _ => _.viewerLocale]) ? void 0 : "en-US").format(dateObj);
587
+ return formatterFor(timezone, fields, _optionalChain([options, 'optionalAccess', _3 => _3.viewerLocale]) ? void 0 : "en-US").format(dateObj);
538
588
  }
539
589
  function formatDateTimeYmd(date, timezone, options) {
540
590
  const dateObj = toValidDate(date);
@@ -544,8 +594,8 @@ function formatDateTimeYmd(date, timezone, options) {
544
594
  { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", hourCycle: "h23" },
545
595
  "en-US"
546
596
  ).formatToParts(dateObj);
547
- const part = (type) => _nullishCoalesce(_optionalChain([parts, 'access', _2 => _2.find, 'call', _3 => _3((p) => p.type === type), 'optionalAccess', _4 => _4.value]), () => ( ""));
548
- return `${part("year")}/${part("month")}/${part("day")}${_nullishCoalesce(_optionalChain([options, 'optionalAccess', _5 => _5.separator]), () => ( ", "))}${part("hour")}:${part("minute")}`;
597
+ const part = (type) => _nullishCoalesce(_optionalChain([parts, 'access', _4 => _4.find, 'call', _5 => _5((p) => p.type === type), 'optionalAccess', _6 => _6.value]), () => ( ""));
598
+ return `${part("year")}/${part("month")}/${part("day")}${_nullishCoalesce(_optionalChain([options, 'optionalAccess', _7 => _7.separator]), () => ( ", "))}${part("hour")}:${part("minute")}`;
549
599
  }
550
600
  function formatTimeWithTimezone(date, timezone, options) {
551
601
  return formatDateWithTimezone(
@@ -555,10 +605,10 @@ function formatTimeWithTimezone(date, timezone, options) {
555
605
  hour: "numeric",
556
606
  minute: "2-digit",
557
607
  // A viewer-locale clock uses the locale's own 12/24h convention.
558
- ..._optionalChain([options, 'optionalAccess', _6 => _6.viewerLocale]) ? {} : { hour12: true },
559
- ..._optionalChain([options, 'optionalAccess', _7 => _7.withZoneLabel]) ? { timeZoneName: "short" } : {}
608
+ ..._optionalChain([options, 'optionalAccess', _8 => _8.viewerLocale]) ? {} : { hour12: true },
609
+ ..._optionalChain([options, 'optionalAccess', _9 => _9.withZoneLabel]) ? { timeZoneName: "short" } : {}
560
610
  },
561
- { viewerLocale: _optionalChain([options, 'optionalAccess', _8 => _8.viewerLocale]) }
611
+ { viewerLocale: _optionalChain([options, 'optionalAccess', _10 => _10.viewerLocale]) }
562
612
  );
563
613
  }
564
614
  function formatProgramDate(at, style = "medium") {
@@ -572,7 +622,7 @@ function formatProgramDateRange(at, end) {
572
622
  const formatter = formatterFor(at.timezone, { year: "numeric", month: "short", day: "numeric" }, "en-US");
573
623
  const partsOf = (date) => {
574
624
  const parts = formatter.formatToParts(date);
575
- const part = (type) => _nullishCoalesce(_optionalChain([parts, 'access', _9 => _9.find, 'call', _10 => _10((p) => p.type === type), 'optionalAccess', _11 => _11.value]), () => ( ""));
625
+ const part = (type) => _nullishCoalesce(_optionalChain([parts, 'access', _11 => _11.find, 'call', _12 => _12((p) => p.type === type), 'optionalAccess', _13 => _13.value]), () => ( ""));
576
626
  return { month: part("month"), day: part("day"), year: part("year") };
577
627
  };
578
628
  const from = partsOf(start);
@@ -646,15 +696,15 @@ function formatWholeDollars(price, currency = "USD") {
646
696
  }
647
697
  function formatCompactMetric(value, format = "number", options) {
648
698
  if (value === 0 || value === null || value === void 0) {
649
- if (format === "currency") return `${_optionalChain([options, 'optionalAccess', _12 => _12.prefix]) || "$"}0`;
699
+ if (format === "currency") return `${_optionalChain([options, 'optionalAccess', _14 => _14.prefix]) || "$"}0`;
650
700
  if (format === "percentage") return "0%";
651
- if (format === "months") return `0 ${_optionalChain([options, 'optionalAccess', _13 => _13.suffix]) || "months"}`;
701
+ if (format === "months") return `0 ${_optionalChain([options, 'optionalAccess', _15 => _15.suffix]) || "months"}`;
652
702
  return "0";
653
703
  }
654
704
  const absValue = Math.abs(value);
655
705
  const sign = value < 0 ? "-" : "";
656
706
  if (format === "currency") {
657
- const prefix = _optionalChain([options, 'optionalAccess', _14 => _14.prefix]) || "$";
707
+ const prefix = _optionalChain([options, 'optionalAccess', _16 => _16.prefix]) || "$";
658
708
  const compact = (val, divisor, suffix) => {
659
709
  const divided = val / divisor;
660
710
  const formatted = divided % 1 === 0 ? divided.toFixed(0) : divided.toFixed(1);
@@ -670,7 +720,7 @@ function formatCompactMetric(value, format = "number", options) {
670
720
  }
671
721
  if (format === "months") {
672
722
  const rounded = Math.round(value * 10) / 10;
673
- return `${rounded} ${_optionalChain([options, 'optionalAccess', _15 => _15.suffix]) || "months"}`;
723
+ return `${rounded} ${_optionalChain([options, 'optionalAccess', _17 => _17.suffix]) || "months"}`;
674
724
  }
675
725
  if (absValue >= 1e6) return `${sign}${(absValue / 1e6).toFixed(1)}M`;
676
726
  if (absValue >= 1e3) return `${sign}${(absValue / 1e3).toFixed(1)}K`;
@@ -735,8 +785,7 @@ function stripHtml(html) {
735
785
  return noTags.replace(/&nbsp;/g, " ").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&#x27;/g, "'").replace(/&apos;/g, "'").replace(/&amp;/g, "&").replace(/\s+/g, " ").trim();
736
786
  }
737
787
  function formatClassification(classification) {
738
- if (isOpenFrameClassification(classification)) return OPENFRAME_CLASSIFICATIONS[classification].label;
739
- return formatUnderscoreText(classification);
788
+ return _nullishCoalesce(_optionalChain([vendorClassificationCopy, 'call', _18 => _18(classification), 'optionalAccess', _19 => _19.label]), () => ( formatUnderscoreText(classification)));
740
789
  }
741
790
  function formatPricingModel(pricingModel) {
742
791
  const customMappings = {
@@ -932,4 +981,5 @@ SquareAvatar.displayName = "SquareAvatar";
932
981
 
933
982
 
934
983
 
935
- exports.FloatingTooltip = FloatingTooltip; exports.tagVariants = tagVariants; exports.Tag = Tag; exports.VENDOR_CLASSIFICATIONS = VENDOR_CLASSIFICATIONS; exports.OPENFRAME_CLASSIFICATIONS = OPENFRAME_CLASSIFICATIONS; exports.isVendorClassification = isVendorClassification; exports.isOpenFrameClassification = isOpenFrameClassification; exports.formatDate = formatDate; exports.formatNumber = formatNumber; exports.formatPrice = formatPrice; exports.formatBytes = formatBytes; exports.formatBytesShort = formatBytesShort; exports.formatFileSize = formatFileSize; exports.formatLargeNumber = formatLargeNumber; exports.formatAbbreviatedNumber = formatAbbreviatedNumber; exports.nameInitials = nameInitials; exports.personInitials = personInitials; exports.personFirstName = personFirstName; exports.singleInitial = singleInitial; exports.formatDurationMMSS = formatDurationMMSS; exports.formatDurationCompact = formatDurationCompact; exports.VIEWER_TIMEZONE = VIEWER_TIMEZONE; exports.formatDateWithTimezone = formatDateWithTimezone; exports.formatDateTimeYmd = formatDateTimeYmd; exports.formatTimeWithTimezone = formatTimeWithTimezone; exports.formatProgramDate = formatProgramDate; exports.formatProgramDateRange = formatProgramDateRange; exports.isOrderedRange = isOrderedRange; exports.formatDurationFromRange = formatDurationFromRange; exports.formatDateUTC = formatDateUTC; exports.formatEntryMonthUTC = formatEntryMonthUTC; exports.formatLegalDate = formatLegalDate; exports.formatCurrency = formatCurrency; exports.formatPercent = formatPercent; exports.formatWholeDollars = formatWholeDollars; exports.formatCompactMetric = formatCompactMetric; exports.getTrendColors = getTrendColors; exports.formatDateRange = formatDateRange; exports.formatDateTimeAt = formatDateTimeAt; exports.formatDurationFromMs = formatDurationFromMs; exports.formatDuration = formatDuration; exports.titleCaseFromSlug = titleCaseFromSlug; exports.formatUnderscoreText = formatUnderscoreText; exports.stripHtml = stripHtml; exports.formatClassification = formatClassification; exports.formatPricingModel = formatPricingModel; exports.formatBioText = formatBioText; exports.formatProgramTimeRange = formatProgramTimeRange; exports.formatWebinarTimeMeta = formatWebinarTimeMeta; exports.formatUrlForDisplay = formatUrlForDisplay; exports.SquareAvatar = SquareAvatar;
984
+
985
+ exports.FloatingTooltip = FloatingTooltip; exports.tagVariants = tagVariants; exports.Tag = Tag; exports.VENDOR_CLASSIFICATION_COPY = VENDOR_CLASSIFICATION_COPY; exports.vendorClassificationCopy = vendorClassificationCopy; exports.vendorClassificationGroup = vendorClassificationGroup; exports.isOpenFrameClassification = isOpenFrameClassification; exports.compareVendorClassifications = compareVendorClassifications; exports.formatDate = formatDate; exports.formatNumber = formatNumber; exports.formatPrice = formatPrice; exports.formatBytes = formatBytes; exports.formatBytesShort = formatBytesShort; exports.formatFileSize = formatFileSize; exports.formatLargeNumber = formatLargeNumber; exports.formatAbbreviatedNumber = formatAbbreviatedNumber; exports.nameInitials = nameInitials; exports.personInitials = personInitials; exports.personFirstName = personFirstName; exports.singleInitial = singleInitial; exports.formatDurationMMSS = formatDurationMMSS; exports.formatDurationCompact = formatDurationCompact; exports.VIEWER_TIMEZONE = VIEWER_TIMEZONE; exports.formatDateWithTimezone = formatDateWithTimezone; exports.formatDateTimeYmd = formatDateTimeYmd; exports.formatTimeWithTimezone = formatTimeWithTimezone; exports.formatProgramDate = formatProgramDate; exports.formatProgramDateRange = formatProgramDateRange; exports.isOrderedRange = isOrderedRange; exports.formatDurationFromRange = formatDurationFromRange; exports.formatDateUTC = formatDateUTC; exports.formatEntryMonthUTC = formatEntryMonthUTC; exports.formatLegalDate = formatLegalDate; exports.formatCurrency = formatCurrency; exports.formatPercent = formatPercent; exports.formatWholeDollars = formatWholeDollars; exports.formatCompactMetric = formatCompactMetric; exports.getTrendColors = getTrendColors; exports.formatDateRange = formatDateRange; exports.formatDateTimeAt = formatDateTimeAt; exports.formatDurationFromMs = formatDurationFromMs; exports.formatDuration = formatDuration; exports.titleCaseFromSlug = titleCaseFromSlug; exports.formatUnderscoreText = formatUnderscoreText; exports.stripHtml = stripHtml; exports.formatClassification = formatClassification; exports.formatPricingModel = formatPricingModel; exports.formatBioText = formatBioText; exports.formatProgramTimeRange = formatProgramTimeRange; exports.formatWebinarTimeMeta = formatWebinarTimeMeta; exports.formatUrlForDisplay = formatUrlForDisplay; exports.SquareAvatar = SquareAvatar;