@flamingo-stack/openframe-frontend-core 0.0.285 → 0.0.286

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 (211) hide show
  1. package/dist/chunk-3MCHAFHB.js +89 -0
  2. package/dist/chunk-3MCHAFHB.js.map +1 -0
  3. package/dist/{chunk-IMNGGLKL.js → chunk-3ZXUQQL4.js} +2 -2
  4. package/dist/{chunk-44ZFLMYC.cjs → chunk-4WACBTZU.cjs} +30 -30
  5. package/dist/{chunk-44ZFLMYC.cjs.map → chunk-4WACBTZU.cjs.map} +1 -1
  6. package/dist/{chunk-23UOJUDF.js → chunk-5BTZOVDQ.js} +4 -4
  7. package/dist/chunk-5KD3S25X.cjs +312 -0
  8. package/dist/chunk-5KD3S25X.cjs.map +1 -0
  9. package/dist/chunk-6N26CURS.cjs +2417 -0
  10. package/dist/chunk-6N26CURS.cjs.map +1 -0
  11. package/dist/{chunk-XX7P4IL2.js → chunk-7NM7DEUK.js} +4 -143
  12. package/dist/chunk-7NM7DEUK.js.map +1 -0
  13. package/dist/chunk-BBZ7AX5H.cjs +290 -0
  14. package/dist/chunk-BBZ7AX5H.cjs.map +1 -0
  15. package/dist/chunk-C6SCWXDP.js +290 -0
  16. package/dist/chunk-C6SCWXDP.js.map +1 -0
  17. package/dist/{chunk-GVSTRN36.cjs → chunk-D3LEFMOA.cjs} +3 -3
  18. package/dist/{chunk-GVSTRN36.cjs.map → chunk-D3LEFMOA.cjs.map} +1 -1
  19. package/dist/{chunk-P45Q4QCU.cjs → chunk-D5YY5U6J.cjs} +19 -15
  20. package/dist/chunk-D5YY5U6J.cjs.map +1 -0
  21. package/dist/chunk-DDAT4RKX.js +2417 -0
  22. package/dist/chunk-DDAT4RKX.js.map +1 -0
  23. package/dist/{chunk-PVXCVPJD.cjs → chunk-EI4WALN2.cjs} +67 -1626
  24. package/dist/chunk-EI4WALN2.cjs.map +1 -0
  25. package/dist/{chunk-ZIODAAFY.cjs → chunk-EL5GCMPU.cjs} +20 -159
  26. package/dist/chunk-EL5GCMPU.cjs.map +1 -0
  27. package/dist/{chunk-VQW7CEGS.js → chunk-FSBDVT6R.js} +1831 -3672
  28. package/dist/chunk-FSBDVT6R.js.map +1 -0
  29. package/dist/{chunk-DPKUSBQH.cjs → chunk-GDF2R2ER.cjs} +1073 -2914
  30. package/dist/chunk-GDF2R2ER.cjs.map +1 -0
  31. package/dist/chunk-HLQW7MWJ.cjs +1594 -0
  32. package/dist/chunk-HLQW7MWJ.cjs.map +1 -0
  33. package/dist/chunk-I6ZPGKZ2.cjs +151 -0
  34. package/dist/chunk-I6ZPGKZ2.cjs.map +1 -0
  35. package/dist/{chunk-J66U3LPZ.cjs → chunk-KBKZYJRI.cjs} +33 -332
  36. package/dist/chunk-KBKZYJRI.cjs.map +1 -0
  37. package/dist/{chunk-USPATRSC.js → chunk-N6ZM5PYZ.js} +45 -344
  38. package/dist/chunk-N6ZM5PYZ.js.map +1 -0
  39. package/dist/{chunk-RGALV4UX.js → chunk-POKKCWKF.js} +3 -82
  40. package/dist/chunk-POKKCWKF.js.map +1 -0
  41. package/dist/{chunk-XDI5JSWB.cjs → chunk-QCKN37OP.cjs} +45 -41
  42. package/dist/chunk-QCKN37OP.cjs.map +1 -0
  43. package/dist/{chunk-KNCDUWY2.js → chunk-QF2X6PTD.js} +10 -6
  44. package/dist/{chunk-KNCDUWY2.js.map → chunk-QF2X6PTD.js.map} +1 -1
  45. package/dist/{chunk-Z3V2SGQZ.js → chunk-R2KT5GDD.js} +324 -1883
  46. package/dist/chunk-R2KT5GDD.js.map +1 -0
  47. package/dist/{chunk-RJUGNL2A.cjs → chunk-RQ6RTBKF.cjs} +16 -12
  48. package/dist/chunk-RQ6RTBKF.cjs.map +1 -0
  49. package/dist/chunk-TFSYSWPS.cjs +89 -0
  50. package/dist/chunk-TFSYSWPS.cjs.map +1 -0
  51. package/dist/chunk-TYZEMPPH.js +312 -0
  52. package/dist/chunk-TYZEMPPH.js.map +1 -0
  53. package/dist/{chunk-O5N57CRV.js → chunk-VCQ3CTYK.js} +12 -8
  54. package/dist/{chunk-O5N57CRV.js.map → chunk-VCQ3CTYK.js.map} +1 -1
  55. package/dist/chunk-VRSXJ5QJ.js +1599 -0
  56. package/dist/chunk-VRSXJ5QJ.js.map +1 -0
  57. package/dist/{chunk-53CFL7PH.js → chunk-XQL4WDML.js} +11 -7
  58. package/dist/{chunk-53CFL7PH.js.map → chunk-XQL4WDML.js.map} +1 -1
  59. package/dist/chunk-Y4JNA4W6.cjs +1599 -0
  60. package/dist/chunk-Y4JNA4W6.cjs.map +1 -0
  61. package/dist/{chunk-ZSUNQJRO.cjs → chunk-YETA25JW.cjs} +2 -81
  62. package/dist/chunk-YETA25JW.cjs.map +1 -0
  63. package/dist/chunk-YVB3VDIQ.js +1594 -0
  64. package/dist/chunk-YVB3VDIQ.js.map +1 -0
  65. package/dist/chunk-ZLN6SM2U.js +151 -0
  66. package/dist/chunk-ZLN6SM2U.js.map +1 -0
  67. package/dist/components/chat/chat-attachment-bar.d.ts.map +1 -1
  68. package/dist/components/chat/index.cjs +12 -6
  69. package/dist/components/chat/index.cjs.map +1 -1
  70. package/dist/components/chat/index.js +45 -39
  71. package/dist/components/contact/index.cjs +11 -7
  72. package/dist/components/contact/index.cjs.map +1 -1
  73. package/dist/components/contact/index.js +10 -6
  74. package/dist/components/docs/doc-navigation-context.d.ts +39 -0
  75. package/dist/components/docs/doc-navigation-context.d.ts.map +1 -0
  76. package/dist/components/docs/doc-viewer.d.ts +66 -0
  77. package/dist/components/docs/doc-viewer.d.ts.map +1 -0
  78. package/dist/components/docs/index.cjs +34 -0
  79. package/dist/components/docs/index.cjs.map +1 -0
  80. package/dist/components/docs/index.d.ts +8 -0
  81. package/dist/components/docs/index.d.ts.map +1 -0
  82. package/dist/components/docs/index.js +34 -0
  83. package/dist/components/docs/index.js.map +1 -0
  84. package/dist/components/docs/use-document-tree.d.ts +41 -0
  85. package/dist/components/docs/use-document-tree.d.ts.map +1 -0
  86. package/dist/components/docs/use-scroll-spy.d.ts +16 -0
  87. package/dist/components/docs/use-scroll-spy.d.ts.map +1 -0
  88. package/dist/components/embeds/embed-iframe.d.ts +29 -0
  89. package/dist/components/embeds/embed-iframe.d.ts.map +1 -0
  90. package/dist/components/embeds/figma-embed.d.ts +27 -0
  91. package/dist/components/embeds/figma-embed.d.ts.map +1 -0
  92. package/dist/components/embeds/google-sheets-viewer.d.ts +8 -0
  93. package/dist/components/embeds/google-sheets-viewer.d.ts.map +1 -0
  94. package/dist/components/embeds/index.cjs +37 -0
  95. package/dist/components/embeds/index.cjs.map +1 -0
  96. package/dist/components/embeds/index.d.ts +9 -0
  97. package/dist/components/embeds/index.d.ts.map +1 -0
  98. package/dist/components/embeds/index.js +37 -0
  99. package/dist/components/embeds/index.js.map +1 -0
  100. package/dist/components/embeds/pdf-viewer.d.ts +10 -0
  101. package/dist/components/embeds/pdf-viewer.d.ts.map +1 -0
  102. package/dist/components/faq/index.cjs +12 -8
  103. package/dist/components/faq/index.cjs.map +1 -1
  104. package/dist/components/faq/index.js +11 -7
  105. package/dist/components/features/index.cjs +10 -6
  106. package/dist/components/features/index.cjs.map +1 -1
  107. package/dist/components/features/index.js +9 -5
  108. package/dist/components/index.cjs +247 -1120
  109. package/dist/components/index.cjs.map +1 -1
  110. package/dist/components/index.d.ts +2 -0
  111. package/dist/components/index.d.ts.map +1 -1
  112. package/dist/components/index.js +645 -1518
  113. package/dist/components/index.js.map +1 -1
  114. package/dist/components/navigation/index.cjs +15 -6
  115. package/dist/components/navigation/index.cjs.map +1 -1
  116. package/dist/components/navigation/index.d.ts +2 -0
  117. package/dist/components/navigation/index.d.ts.map +1 -1
  118. package/dist/components/navigation/index.js +15 -6
  119. package/dist/components/navigation/multi-level-navigation.d.ts +28 -0
  120. package/dist/components/navigation/multi-level-navigation.d.ts.map +1 -0
  121. package/dist/components/onboarding-guides/index.cjs +34 -29
  122. package/dist/components/onboarding-guides/index.cjs.map +1 -1
  123. package/dist/components/onboarding-guides/index.js +13 -8
  124. package/dist/components/onboarding-guides/index.js.map +1 -1
  125. package/dist/components/related-content/index.cjs +12 -8
  126. package/dist/components/related-content/index.cjs.map +1 -1
  127. package/dist/components/related-content/index.js +11 -7
  128. package/dist/components/tickets/index.cjs +75 -70
  129. package/dist/components/tickets/index.cjs.map +1 -1
  130. package/dist/components/tickets/index.js +16 -11
  131. package/dist/components/tickets/index.js.map +1 -1
  132. package/dist/components/ui/index.cjs +12 -6
  133. package/dist/components/ui/index.cjs.map +1 -1
  134. package/dist/components/ui/index.js +65 -59
  135. package/dist/embed-shims/index.cjs +3 -3
  136. package/dist/embed-shims/index.cjs.map +1 -1
  137. package/dist/embed-shims/index.js +8 -8
  138. package/dist/hooks/index.cjs +6 -3
  139. package/dist/hooks/index.cjs.map +1 -1
  140. package/dist/hooks/index.js +7 -4
  141. package/dist/index.cjs +62 -6
  142. package/dist/index.cjs.map +1 -1
  143. package/dist/index.js +257 -201
  144. package/dist/types/doc-source.cjs +4 -0
  145. package/dist/types/doc-source.cjs.map +1 -0
  146. package/dist/types/doc-source.d.ts +86 -0
  147. package/dist/types/doc-source.d.ts.map +1 -0
  148. package/dist/types/doc-source.js +3 -0
  149. package/dist/types/doc-source.js.map +1 -0
  150. package/dist/types/index.d.ts +1 -0
  151. package/dist/types/index.d.ts.map +1 -1
  152. package/dist/utils/doc-path-utils.d.ts +24 -0
  153. package/dist/utils/doc-path-utils.d.ts.map +1 -0
  154. package/dist/utils/doc-tree-nav.d.ts +35 -0
  155. package/dist/utils/doc-tree-nav.d.ts.map +1 -0
  156. package/dist/utils/embed-url-converters.d.ts +16 -0
  157. package/dist/utils/embed-url-converters.d.ts.map +1 -0
  158. package/dist/utils/format.d.ts +9 -0
  159. package/dist/utils/format.d.ts.map +1 -1
  160. package/dist/utils/index.cjs +297 -0
  161. package/dist/utils/index.cjs.map +1 -1
  162. package/dist/utils/index.d.ts +7 -1
  163. package/dist/utils/index.d.ts.map +1 -1
  164. package/dist/utils/index.js +276 -1
  165. package/dist/utils/index.js.map +1 -1
  166. package/dist/utils/markdown-section-extractor.d.ts +23 -0
  167. package/dist/utils/markdown-section-extractor.d.ts.map +1 -0
  168. package/dist/utils/markdown-to-plain.d.ts +32 -0
  169. package/dist/utils/markdown-to-plain.d.ts.map +1 -0
  170. package/dist/utils/tree-builder.d.ts +30 -0
  171. package/dist/utils/tree-builder.d.ts.map +1 -0
  172. package/package.json +19 -1
  173. package/src/components/chat/chat-attachment-bar.tsx +6 -11
  174. package/src/components/docs/doc-navigation-context.tsx +123 -0
  175. package/src/components/docs/doc-viewer.tsx +345 -0
  176. package/src/components/docs/index.ts +12 -0
  177. package/src/components/docs/use-document-tree.ts +427 -0
  178. package/src/components/docs/use-scroll-spy.ts +93 -0
  179. package/src/components/embeds/embed-iframe.tsx +103 -0
  180. package/src/components/embeds/figma-embed.tsx +147 -0
  181. package/src/components/embeds/google-sheets-viewer.tsx +54 -0
  182. package/src/components/embeds/index.ts +11 -0
  183. package/src/components/embeds/pdf-viewer.tsx +64 -0
  184. package/src/components/index.ts +2 -0
  185. package/src/components/navigation/index.ts +5 -0
  186. package/src/components/navigation/multi-level-navigation.tsx +358 -0
  187. package/src/types/doc-source.ts +88 -0
  188. package/src/types/index.ts +4 -0
  189. package/src/utils/doc-path-utils.ts +47 -0
  190. package/src/utils/doc-tree-nav.ts +111 -0
  191. package/src/utils/embed-url-converters.ts +77 -0
  192. package/src/utils/format.ts +16 -0
  193. package/src/utils/index.ts +11 -0
  194. package/src/utils/markdown-section-extractor.ts +106 -0
  195. package/src/utils/markdown-to-plain.ts +69 -0
  196. package/src/utils/tree-builder.ts +114 -0
  197. package/dist/chunk-DPKUSBQH.cjs.map +0 -1
  198. package/dist/chunk-J66U3LPZ.cjs.map +0 -1
  199. package/dist/chunk-P45Q4QCU.cjs.map +0 -1
  200. package/dist/chunk-PVXCVPJD.cjs.map +0 -1
  201. package/dist/chunk-RGALV4UX.js.map +0 -1
  202. package/dist/chunk-RJUGNL2A.cjs.map +0 -1
  203. package/dist/chunk-USPATRSC.js.map +0 -1
  204. package/dist/chunk-VQW7CEGS.js.map +0 -1
  205. package/dist/chunk-XDI5JSWB.cjs.map +0 -1
  206. package/dist/chunk-XX7P4IL2.js.map +0 -1
  207. package/dist/chunk-Z3V2SGQZ.js.map +0 -1
  208. package/dist/chunk-ZIODAAFY.cjs.map +0 -1
  209. package/dist/chunk-ZSUNQJRO.cjs.map +0 -1
  210. /package/dist/{chunk-IMNGGLKL.js.map → chunk-3ZXUQQL4.js.map} +0 -0
  211. /package/dist/{chunk-23UOJUDF.js.map → chunk-5BTZOVDQ.js.map} +0 -0
@@ -4,13 +4,10 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkZSUNQJROcjs = require('./chunk-ZSUNQJRO.cjs');
8
7
 
9
8
 
10
- var _chunkAQOWFSMBcjs = require('./chunk-AQOWFSMB.cjs');
11
9
 
12
10
 
13
- var _chunkXL4V2PYGcjs = require('./chunk-XL4V2PYG.cjs');
14
11
 
15
12
 
16
13
 
@@ -18,199 +15,48 @@ var _chunkXL4V2PYGcjs = require('./chunk-XL4V2PYG.cjs');
18
15
 
19
16
 
20
17
 
21
- var _chunkXXI7BNB6cjs = require('./chunk-XXI7BNB6.cjs');
22
18
 
23
19
 
24
-
25
- var _chunkWBR7H6E3cjs = require('./chunk-WBR7H6E3.cjs');
26
-
20
+ var _chunkY4JNA4W6cjs = require('./chunk-Y4JNA4W6.cjs');
27
21
 
28
22
 
29
23
 
24
+ var _chunkTFSYSWPScjs = require('./chunk-TFSYSWPS.cjs');
30
25
 
31
26
 
27
+ var _chunkAQOWFSMBcjs = require('./chunk-AQOWFSMB.cjs');
32
28
 
33
29
 
30
+ var _chunkXL4V2PYGcjs = require('./chunk-XL4V2PYG.cjs');
34
31
 
35
32
 
36
33
 
37
- var _chunkLGLPNWS6cjs = require('./chunk-LGLPNWS6.cjs');
38
34
 
39
35
 
40
36
 
41
37
 
42
- var _chunkFIG2RKZFcjs = require('./chunk-FIG2RKZF.cjs');
38
+ var _chunkXXI7BNB6cjs = require('./chunk-XXI7BNB6.cjs');
43
39
 
44
40
 
45
41
 
42
+ var _chunkWBR7H6E3cjs = require('./chunk-WBR7H6E3.cjs');
46
43
 
47
44
 
48
45
 
46
+ var _chunkFIG2RKZFcjs = require('./chunk-FIG2RKZF.cjs');
49
47
 
50
48
 
51
- var _chunkZS2SBWBRcjs = require('./chunk-ZS2SBWBR.cjs');
52
49
 
53
50
 
54
- var _chunkWZW7C7TFcjs = require('./chunk-WZW7C7TF.cjs');
55
51
 
56
- // src/components/ui/hidden-tags-popup.tsx
57
- var _react = require('react'); var React = _interopRequireWildcard(_react); var React2 = _interopRequireWildcard(_react); var React4 = _interopRequireWildcard(_react); var React6 = _interopRequireWildcard(_react); var React5 = _interopRequireWildcard(_react); var React22 = _interopRequireWildcard(_react); var React13 = _interopRequireWildcard(_react);
58
- _chunkFIG2RKZFcjs.init_cn.call(void 0, );
59
- var _jsxruntime = require('react/jsx-runtime');
60
- var HiddenTagsPopup = _react.forwardRef.call(void 0, function HiddenTagsPopup2({ items, onRemove, disabled, className, style }, ref) {
61
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
62
- "div",
63
- {
64
- ref,
65
- style,
66
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
67
- // Base positioning is neutral (left-anchored); consumers override via
68
- // `style.left` (search-input, tag-search-input) or `className` (autocomplete).
69
- "absolute top-full left-0 mt-1 z-50 min-w-[200px]",
70
- "bg-ods-card border border-ods-border rounded-[6px] shadow-lg",
71
- "animate-in fade-in-0 zoom-in-95 duration-150",
72
- className
73
- ),
74
- children: items.map((item) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
75
- "div",
76
- {
77
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
78
- "flex items-center justify-between gap-3 px-3 h-11 md:h-12",
79
- "border-b border-ods-border last:border-b-0"
80
- ),
81
- children: [
82
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-w-0 flex-1 text-h5 truncate uppercase text-ods-text-primary", title: typeof item.label === "string" ? item.label : void 0, children: item.label }),
83
- !disabled && onRemove && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
84
- "button",
85
- {
86
- type: "button",
87
- onClick: (e) => {
88
- e.stopPropagation();
89
- onRemove(item.value);
90
- },
91
- className: "shrink-0 text-ods-text-secondary hover:text-ods-text-primary transition-colors",
92
- "aria-label": `Remove ${String(item.label)}`,
93
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.XmarkCircleIcon, { size: 20 })
94
- }
95
- )
96
- ]
97
- },
98
- String(item.value)
99
- ))
100
- }
101
- );
102
- });
103
52
 
104
- // src/components/ui/tag.tsx
105
- var _classvarianceauthority = require('class-variance-authority');
106
- _chunkFIG2RKZFcjs.init_cn.call(void 0, );
107
53
 
108
- var tagVariants = _classvarianceauthority.cva.call(void 0,
109
- [
110
- "text-h5 h-8 inline-flex items-center justify-center gap-[var(--spacing-system-xxs)] p-[var(--spacing-system-xsf)] rounded-md",
111
- "transition-colors duration-150"
112
- ],
113
- {
114
- variants: {
115
- variant: {
116
- primary: [
117
- "bg-[var(--ods-open-yellow-base)] text-[var(--ods-system-greys-black)]",
118
- "hover:bg-[var(--ods-open-yellow-hover)] active:bg-[var(--ods-open-yellow-action)]"
119
- ],
120
- outline: [
121
- "bg-[var(--ods-system-greys-black)] text-[var(--ods-system-greys-white)] border border-[var(--ods-system-greys-soft-grey)]",
122
- "hover:bg-[var(--ods-system-greys-black-hover)] hover:border-[var(--ods-system-greys-soft-grey-hover)]",
123
- "active:bg-[var(--ods-system-greys-black-action)] active:border-[var(--ods-system-greys-soft-grey-action)]"
124
- ],
125
- success: [
126
- "bg-[var(--ods-attention-green-success-secondary)] text-[var(--ods-attention-green-success)]",
127
- "hover:bg-[#385029] active:bg-[#425a33]"
128
- ],
129
- warning: [
130
- "bg-[var(--ods-attention-yellow-warning-secondary)] text-[var(--ods-attention-yellow-warning)]",
131
- "hover:bg-[#544729] active:bg-[#5e5133]"
132
- ],
133
- error: [
134
- "bg-[var(--ods-attention-red-error-secondary)] text-[var(--ods-attention-red-error)]",
135
- "hover:bg-[#542b2b] active:bg-[#5e3535]"
136
- ],
137
- critical: [
138
- "bg-[var(--ods-attention-red-error)] text-[var(--ods-attention-red-error-secondary)]",
139
- "hover:bg-[var(--ods-attention-red-error-hover)] active:bg-[var(--ods-attention-red-error-action)]"
140
- ],
141
- grey: [
142
- "bg-[var(--ods-system-greys-soft-grey)] text-[var(--ods-system-greys-grey)]",
143
- "hover:bg-[var(--ods-system-greys-soft-grey-hover)] active:bg-[var(--ods-system-greys-soft-grey-action)]"
144
- ],
145
- // Matches the EntityTagBadges / StatusBadge tag skin (ods-card + ods-border,
146
- // mono uppercase) so the tag-editor chips render identically to the public
147
- // tag badges. Used for FilterChipData variant 'tag' (see search-input).
148
- badge: [
149
- "bg-ods-card text-ods-text-primary border border-ods-border font-mono uppercase tracking-wide",
150
- "hover:border-ods-accent transition-colors"
151
- ]
152
- }
153
- },
154
- defaultVariants: {
155
- variant: "primary"
156
- }
157
- }
158
- );
159
- var disabledTagClasses = [
160
- "bg-[var(--ods-system-greys-soft-grey)] text-[var(--ods-system-greys-grey)]",
161
- "border-transparent",
162
- "cursor-not-allowed",
163
- "pointer-events-none"
164
- ];
165
- function Tag({
166
- label,
167
- variant,
168
- icon,
169
- onClose,
170
- className,
171
- labelClassName,
172
- disabled,
173
- ...props
174
- }) {
175
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
176
- "div",
177
- {
178
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
179
- tagVariants({ variant }),
180
- disabled && disabledTagClasses,
181
- className
182
- ),
183
- "aria-disabled": disabled || void 0,
184
- ...props,
185
- children: [
186
- icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex items-center justify-center size-5 shrink-0", children: icon }),
187
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkFIG2RKZFcjs.cn.call(void 0, "truncate", labelClassName), title: typeof label === "string" ? label : void 0, children: label }),
188
- onClose && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
189
- "button",
190
- {
191
- type: "button",
192
- disabled,
193
- onClick: (e) => {
194
- e.stopPropagation();
195
- onClose();
196
- },
197
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
198
- "flex items-center justify-center size-5 shrink-0 rounded-full opacity-70 transition-opacity",
199
- disabled ? "cursor-not-allowed" : "hover:opacity-100"
200
- ),
201
- "aria-label": "Remove",
202
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.XmarkCircleIcon, { className: "size-4" })
203
- }
204
- )
205
- ]
206
- }
207
- );
208
- }
54
+ var _chunkZS2SBWBRcjs = require('./chunk-ZS2SBWBR.cjs');
209
55
 
210
56
  // src/components/ui/card.tsx
211
57
  _chunkFIG2RKZFcjs.init_cn.call(void 0, );
212
-
213
-
58
+ var _react = require('react'); var React = _interopRequireWildcard(_react); var React2 = _interopRequireWildcard(_react); var React4 = _interopRequireWildcard(_react); var React6 = _interopRequireWildcard(_react); var React5 = _interopRequireWildcard(_react); var React22 = _interopRequireWildcard(_react);
59
+ var _jsxruntime = require('react/jsx-runtime');
214
60
  var Card = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
215
61
  "div",
216
62
  {
@@ -329,7 +175,7 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
329
175
 
330
176
  // src/components/ui/status-badge.tsx
331
177
  _chunkFIG2RKZFcjs.init_cn.call(void 0, );
332
-
178
+ var _classvarianceauthority = require('class-variance-authority');
333
179
 
334
180
  var statusBadgeVariants = _classvarianceauthority.cva.call(void 0,
335
181
  "inline-flex items-center justify-center rounded font-mono font-medium uppercase tracking-wide",
@@ -840,11 +686,11 @@ var SimpleMarkdownRendererImpl = ({
840
686
  [preprocessContent, content]
841
687
  );
842
688
  const makeHeading = _react.useCallback.call(void 0,
843
- (Tag2, level, headingClassName) => ({ children }) => {
689
+ (Tag, level, headingClassName) => ({ children }) => {
844
690
  const text = extractText(children);
845
- const effectiveLevel = Tag2 === "h1" && demoteMarkdownH1ToH2 ? 2 : level;
691
+ const effectiveLevel = Tag === "h1" && demoteMarkdownH1ToH2 ? 2 : level;
846
692
  const id = generateHeadingId(text, effectiveLevel);
847
- const EffectiveTag = Tag2 === "h1" && demoteMarkdownH1ToH2 ? "h2" : Tag2;
693
+ const EffectiveTag = Tag === "h1" && demoteMarkdownH1ToH2 ? "h2" : Tag;
848
694
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, EffectiveTag, { id, className: headingClassName, children });
849
695
  },
850
696
  [generateHeadingId, demoteMarkdownH1ToH2]
@@ -1051,308 +897,6 @@ var SimpleMarkdownRendererImpl = ({
1051
897
  };
1052
898
  var SimpleMarkdownRenderer = _react.memo.call(void 0, SimpleMarkdownRendererImpl);
1053
899
 
1054
- // src/utils/format.ts
1055
- function formatDate(date, options = {
1056
- year: "numeric",
1057
- month: "long",
1058
- day: "numeric"
1059
- }) {
1060
- const dateObj = typeof date === "string" ? new Date(date) : date;
1061
- if (isNaN(dateObj.getTime())) {
1062
- console.warn("Invalid date provided to formatDate:", date);
1063
- return "Invalid Date";
1064
- }
1065
- return dateObj.toLocaleDateString("en-US", options);
1066
- }
1067
- function formatNumber(num) {
1068
- return num.toLocaleString();
1069
- }
1070
- function formatPrice(price, currency = "USD") {
1071
- return new Intl.NumberFormat("en-US", {
1072
- style: "currency",
1073
- currency
1074
- }).format(price);
1075
- }
1076
- function formatBytes(bytes, decimals = 2) {
1077
- if (bytes === 0) return "0 Bytes";
1078
- const k = 1024;
1079
- const dm = decimals < 0 ? 0 : decimals;
1080
- const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
1081
- const i = Math.floor(Math.log(bytes) / Math.log(k));
1082
- return Number.parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i];
1083
- }
1084
- function formatBytesShort(bytes) {
1085
- if (bytes === 0) return "0 B";
1086
- const k = 1024;
1087
- const sizes = ["B", "KB", "MB", "GB", "TB"];
1088
- const i = Math.floor(Math.log(bytes) / Math.log(k));
1089
- return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
1090
- }
1091
- function formatLargeNumber(num) {
1092
- if (num === 0) return "0";
1093
- const isNegative = num < 0;
1094
- const absNum = Math.abs(num);
1095
- let result;
1096
- if (absNum >= 1e9) {
1097
- result = `${Math.floor(absNum / 1e9)}B`;
1098
- } else if (absNum >= 1e6) {
1099
- result = `${Math.floor(absNum / 1e6)}M`;
1100
- } else if (absNum >= 1e3) {
1101
- result = `${Math.floor(absNum / 1e3)}K`;
1102
- } else {
1103
- result = Math.floor(absNum).toString();
1104
- }
1105
- return isNegative ? `-${result}` : result;
1106
- }
1107
- function formatAbbreviatedNumber(n) {
1108
- if (n >= 1e9) {
1109
- const value = n / 1e9;
1110
- return `${Number.isInteger(value) ? value.toFixed(0) : value.toFixed(1)}B`;
1111
- }
1112
- if (n >= 1e6) {
1113
- const value = n / 1e6;
1114
- return `${Number.isInteger(value) ? value.toFixed(0) : value.toFixed(1)}M`;
1115
- }
1116
- if (n >= 1e3) {
1117
- const value = n / 1e3;
1118
- return `${Number.isInteger(value) ? value.toFixed(0) : value.toFixed(1)}K`;
1119
- }
1120
- return n.toLocaleString();
1121
- }
1122
- function getFirstLastInitials(name) {
1123
- if (!name) return "";
1124
- const words = name.trim().split(/\s+/);
1125
- if (words.length === 0 || !words[0]) return "";
1126
- if (words.length === 1) return words[0].charAt(0).toUpperCase();
1127
- return (words[0].charAt(0) + words[words.length - 1].charAt(0)).toUpperCase();
1128
- }
1129
- function nameInitials(name, fallback = "E") {
1130
- const source = typeof name === "string" ? name.trim() : "";
1131
- const words = source.length > 0 ? source.split(/\s+/) : [];
1132
- const letters = words.map((w) => w[0]).filter(Boolean).slice(0, 2).join("");
1133
- return (letters || fallback).toUpperCase();
1134
- }
1135
- function formatDurationMMSS(seconds) {
1136
- if (!seconds) return "";
1137
- const hours = Math.floor(seconds / 3600);
1138
- const minutes = Math.floor(seconds % 3600 / 60);
1139
- const secs = Math.floor(seconds % 60);
1140
- if (hours > 0) {
1141
- return `${hours}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`;
1142
- }
1143
- return `${minutes}:${secs.toString().padStart(2, "0")}`;
1144
- }
1145
- function formatDurationCompact(seconds) {
1146
- if (!seconds) return "";
1147
- const hours = Math.floor(seconds / 3600);
1148
- const minutes = Math.floor(seconds % 3600 / 60);
1149
- if (hours > 0) {
1150
- return `${hours}h ${minutes}m`;
1151
- }
1152
- return `${minutes} min`;
1153
- }
1154
- function formatTimeWithTimezone(date, timezone) {
1155
- if (!date) return "";
1156
- const dateObj = typeof date === "string" ? new Date(date) : date;
1157
- const timeStr = dateObj.toLocaleTimeString("en-US", {
1158
- hour: "numeric",
1159
- minute: "2-digit",
1160
- hour12: true
1161
- });
1162
- return timezone ? `${timeStr} ${timezone}` : timeStr;
1163
- }
1164
- function formatDurationFromRange(startAt, endAt) {
1165
- if (!startAt || !endAt) return "";
1166
- const start = typeof startAt === "string" ? new Date(startAt) : startAt;
1167
- const end = typeof endAt === "string" ? new Date(endAt) : endAt;
1168
- const durationMs = end.getTime() - start.getTime();
1169
- const minutes = Math.round(durationMs / 6e4);
1170
- if (minutes >= 60) {
1171
- const hours = Math.floor(minutes / 60);
1172
- const mins = minutes % 60;
1173
- return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`;
1174
- }
1175
- return `${minutes}m`;
1176
- }
1177
- function formatDateUTC(value, options = {}) {
1178
- const { fallback = "N/A", timezone = "UTC" } = options;
1179
- if (value === null || value === void 0 || value === "") return fallback;
1180
- let ms;
1181
- if (typeof value === "number") {
1182
- ms = value;
1183
- } else {
1184
- const n = Number(value);
1185
- if (Number.isFinite(n) && n > 0 && /^-?\d+(\.\d+)?$/.test(value.trim())) {
1186
- ms = n;
1187
- } else {
1188
- ms = Date.parse(value.includes("T") ? value : value + "T00:00:00Z");
1189
- }
1190
- }
1191
- if (!Number.isFinite(ms)) return fallback;
1192
- return new Date(ms).toLocaleDateString("en-US", {
1193
- year: "numeric",
1194
- month: "short",
1195
- day: "numeric",
1196
- timeZone: timezone === "local" ? void 0 : "UTC"
1197
- });
1198
- }
1199
- function formatEntryMonthUTC(entryMonth, style = "short") {
1200
- if (!entryMonth) return null;
1201
- return new Date(entryMonth).toLocaleDateString("en-US", { month: style, year: "numeric", timeZone: "UTC" });
1202
- }
1203
- function formatLegalDate(dateInput) {
1204
- return new Intl.DateTimeFormat("en-US", {
1205
- year: "numeric",
1206
- month: "2-digit",
1207
- day: "2-digit"
1208
- }).format(new Date(dateInput));
1209
- }
1210
- function formatCurrency(value) {
1211
- if (value == null) return "N/A";
1212
- return new Intl.NumberFormat("en-US", {
1213
- style: "currency",
1214
- currency: "USD",
1215
- maximumFractionDigits: 0
1216
- }).format(value);
1217
- }
1218
- function formatPercent(value) {
1219
- if (value == null) return "N/A";
1220
- return `${value.toFixed(2)}%`;
1221
- }
1222
- function formatWholeDollars(price, currency = "USD") {
1223
- return new Intl.NumberFormat("en-US", {
1224
- style: "currency",
1225
- currency,
1226
- maximumFractionDigits: 0
1227
- }).format(price);
1228
- }
1229
- function formatCompactMetric(value, format = "number", options) {
1230
- if (value === 0 || value === null || value === void 0) {
1231
- if (format === "currency") return `${_optionalChain([options, 'optionalAccess', _7 => _7.prefix]) || "$"}0`;
1232
- if (format === "percentage") return "0%";
1233
- if (format === "months") return `0 ${_optionalChain([options, 'optionalAccess', _8 => _8.suffix]) || "months"}`;
1234
- return "0";
1235
- }
1236
- const absValue = Math.abs(value);
1237
- const sign = value < 0 ? "-" : "";
1238
- if (format === "currency") {
1239
- const prefix = _optionalChain([options, 'optionalAccess', _9 => _9.prefix]) || "$";
1240
- const compact = (val, divisor, suffix) => {
1241
- const divided = val / divisor;
1242
- const formatted = divided % 1 === 0 ? divided.toFixed(0) : divided.toFixed(1);
1243
- return `${sign}${prefix}${formatted}${suffix}`;
1244
- };
1245
- if (absValue >= 1e9) return compact(absValue, 1e9, "B");
1246
- if (absValue >= 1e6) return compact(absValue, 1e6, "M");
1247
- if (absValue >= 1e3) return `${sign}${prefix}${(absValue / 1e3).toFixed(0)}K`;
1248
- return `${sign}${prefix}${absValue.toLocaleString()}`;
1249
- }
1250
- if (format === "percentage") {
1251
- return `${sign}${absValue}%`;
1252
- }
1253
- if (format === "months") {
1254
- const rounded = Math.round(value * 10) / 10;
1255
- return `${rounded} ${_optionalChain([options, 'optionalAccess', _10 => _10.suffix]) || "months"}`;
1256
- }
1257
- if (absValue >= 1e6) return `${sign}${(absValue / 1e6).toFixed(1)}M`;
1258
- if (absValue >= 1e3) return `${sign}${(absValue / 1e3).toFixed(1)}K`;
1259
- return value.toLocaleString();
1260
- }
1261
- function getTrendColors(direction, polarity = "positive") {
1262
- if (direction === "neutral" || polarity === "neutral") {
1263
- return {
1264
- textClass: "text-ods-text-secondary",
1265
- badgeClass: "bg-ods-border text-ods-text-secondary"
1266
- };
1267
- }
1268
- const isPositiveOutcome = direction === "up" && polarity === "positive" || direction === "down" && polarity === "negative";
1269
- if (isPositiveOutcome) {
1270
- return {
1271
- textClass: "text-ods-success",
1272
- badgeClass: "bg-ods-success-secondary text-ods-success"
1273
- };
1274
- }
1275
- return {
1276
- textClass: "text-ods-error",
1277
- badgeClass: "bg-ods-error-secondary text-ods-error"
1278
- };
1279
- }
1280
- function formatDateRange(start, end) {
1281
- if (!start || !end) return "";
1282
- const fmt = (s) => {
1283
- const bareMatch = /^(\d{4})-(\d{2})-(\d{2})$/.exec(s);
1284
- const d = bareMatch ? new Date(Number(bareMatch[1]), Number(bareMatch[2]) - 1, Number(bareMatch[3])) : new Date(s);
1285
- if (Number.isNaN(d.getTime())) return s;
1286
- return d.toLocaleDateString(void 0, {
1287
- month: "short",
1288
- day: "numeric",
1289
- year: "numeric"
1290
- });
1291
- };
1292
- return `${fmt(start)} \u2014 ${fmt(end)}`;
1293
- }
1294
- function formatDateTimeAt(dateString) {
1295
- const date = new Date(dateString);
1296
- const dateStr = date.toLocaleDateString("en-US", {
1297
- month: "short",
1298
- day: "numeric",
1299
- year: "numeric"
1300
- });
1301
- const timeStr = date.toLocaleTimeString("en-US", {
1302
- hour: "numeric",
1303
- minute: "2-digit",
1304
- hour12: true
1305
- });
1306
- return `${dateStr} at ${timeStr}`;
1307
- }
1308
- function formatDurationFromMs(ms) {
1309
- if (!ms || isNaN(ms) || ms < 0) return "0ms";
1310
- if (ms < 1e3) return `${ms}ms`;
1311
- if (ms < 6e4) return `${(ms / 1e3).toFixed(1)}s`;
1312
- return `${(ms / 6e4).toFixed(1)}m`;
1313
- }
1314
- function formatDuration(seconds) {
1315
- if (seconds < 60) return `${seconds} seconds`;
1316
- if (seconds < 3600) return `${Math.floor(seconds / 60)} minutes`;
1317
- const hours = Math.floor(seconds / 3600);
1318
- const minutes = Math.floor(seconds % 3600 / 60);
1319
- if (minutes === 0) return `${hours} hour${hours > 1 ? "s" : ""}`;
1320
- return `${hours} hour${hours > 1 ? "s" : ""} ${minutes} minute${minutes > 1 ? "s" : ""}`;
1321
- }
1322
- function formatUnderscoreText(text) {
1323
- return text.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
1324
- }
1325
- function stripHtml(html) {
1326
- let noTags = html;
1327
- let prev;
1328
- do {
1329
- prev = noTags;
1330
- noTags = noTags.replace(/<[^<>]*>/g, "");
1331
- } while (noTags !== prev);
1332
- 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();
1333
- }
1334
- function formatClassification(classification) {
1335
- const customMappings = {
1336
- openframe_selected: "OpenFrame Selected"
1337
- };
1338
- return customMappings[classification] || formatUnderscoreText(classification);
1339
- }
1340
- function formatPricingModel(pricingModel) {
1341
- const customMappings = {
1342
- one_time: "One-time Purchase",
1343
- self_hosted: "Self-hosted"
1344
- };
1345
- return customMappings[pricingModel] || formatUnderscoreText(pricingModel);
1346
- }
1347
- function formatBioText(aboutHtml, fallback = "") {
1348
- if (!aboutHtml || !aboutHtml.trim()) return fallback;
1349
- if (aboutHtml.includes("<p")) {
1350
- const paragraphs = aboutHtml.split(/<p[^<>]*>/).slice(1).map((part) => part.split("</p>")[0]).map((text) => stripHtml(text).trim()).filter((text) => text.length > 0);
1351
- if (paragraphs.length > 0) return paragraphs.join(" ");
1352
- }
1353
- return stripHtml(aboutHtml).trim() || fallback;
1354
- }
1355
-
1356
900
  // src/components/ui/square-avatar.tsx
1357
901
 
1358
902
  _chunkFIG2RKZFcjs.init_cn.call(void 0, );
@@ -1401,7 +945,7 @@ var SquareAvatar = React4.memo(React4.forwardRef(
1401
945
  "flex items-center justify-center text-xs font-medium text-[color:var(--ods-avatar-initials,var(--color-text-primary))]",
1402
946
  initialsClassName,
1403
947
  src && "hidden"
1404
- ), children: getFirstLastInitials(fallback || alt) || "?" }),
948
+ ), children: _chunkY4JNA4W6cjs.getFirstLastInitials.call(void 0, fallback || alt) || "?" }),
1405
949
  src && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1406
950
  _chunkXL4V2PYGcjs.next_image_default,
1407
951
  {
@@ -1432,7 +976,7 @@ var _reactdropdownmenu = require('@radix-ui/react-dropdown-menu'); var DropdownM
1432
976
 
1433
977
  // node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
1434
978
 
1435
- var useLayoutEffect2 = _optionalChain([globalThis, 'optionalAccess', _11 => _11.document]) ? React5.useLayoutEffect : () => {
979
+ var useLayoutEffect2 = _optionalChain([globalThis, 'optionalAccess', _7 => _7.document]) ? React5.useLayoutEffect : () => {
1436
980
  };
1437
981
 
1438
982
  // node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs
@@ -1470,7 +1014,7 @@ function useControllableState({
1470
1014
  if (isControlled) {
1471
1015
  const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;
1472
1016
  if (value2 !== prop) {
1473
- _optionalChain([onChangeRef, 'access', _12 => _12.current, 'optionalCall', _13 => _13(value2)]);
1017
+ _optionalChain([onChangeRef, 'access', _8 => _8.current, 'optionalCall', _9 => _9(value2)]);
1474
1018
  }
1475
1019
  } else {
1476
1020
  setUncontrolledProp(nextValue);
@@ -1492,7 +1036,7 @@ function useUncontrolledState({
1492
1036
  }, [onChange]);
1493
1037
  React6.useEffect(() => {
1494
1038
  if (prevValueRef.current !== value) {
1495
- _optionalChain([onChangeRef, 'access', _14 => _14.current, 'optionalCall', _15 => _15(value)]);
1039
+ _optionalChain([onChangeRef, 'access', _10 => _10.current, 'optionalCall', _11 => _11(value)]);
1496
1040
  prevValueRef.current = value;
1497
1041
  }
1498
1042
  }, [value, prevValueRef]);
@@ -1520,7 +1064,7 @@ var SecondaryAction = ({ action }) => {
1520
1064
  e.preventDefault();
1521
1065
  return;
1522
1066
  }
1523
- _optionalChain([action, 'access', _16 => _16.onClick, 'optionalCall', _17 => _17()]);
1067
+ _optionalChain([action, 'access', _12 => _12.onClick, 'optionalCall', _13 => _13()]);
1524
1068
  },
1525
1069
  [action]
1526
1070
  );
@@ -1561,13 +1105,13 @@ var MenuItem = ({ item, onItemClick }) => {
1561
1105
  const activate = _react.useCallback.call(void 0, () => {
1562
1106
  if (item.disabled) return;
1563
1107
  if (item.type === "checkbox") {
1564
- _optionalChain([item, 'access', _18 => _18.onClick, 'optionalCall', _19 => _19()]);
1565
- _optionalChain([onItemClick, 'optionalCall', _20 => _20(item)]);
1108
+ _optionalChain([item, 'access', _14 => _14.onClick, 'optionalCall', _15 => _15()]);
1109
+ _optionalChain([onItemClick, 'optionalCall', _16 => _16(item)]);
1566
1110
  return;
1567
1111
  }
1568
1112
  if (item.type === "submenu") return;
1569
- _optionalChain([item, 'access', _21 => _21.onClick, 'optionalCall', _22 => _22()]);
1570
- _optionalChain([onItemClick, 'optionalCall', _23 => _23(item)]);
1113
+ _optionalChain([item, 'access', _17 => _17.onClick, 'optionalCall', _18 => _18()]);
1114
+ _optionalChain([onItemClick, 'optionalCall', _19 => _19(item)]);
1571
1115
  }, [item, onItemClick]);
1572
1116
  const handleClick = _react.useCallback.call(void 0,
1573
1117
  (e) => {
@@ -1593,8 +1137,8 @@ var MenuItem = ({ item, onItemClick }) => {
1593
1137
  e.stopPropagation();
1594
1138
  return;
1595
1139
  }
1596
- _optionalChain([item, 'access', _24 => _24.onClick, 'optionalCall', _25 => _25()]);
1597
- _optionalChain([onItemClick, 'optionalCall', _26 => _26(item)]);
1140
+ _optionalChain([item, 'access', _20 => _20.onClick, 'optionalCall', _21 => _21()]);
1141
+ _optionalChain([onItemClick, 'optionalCall', _22 => _22(item)]);
1598
1142
  },
1599
1143
  [item, onItemClick]
1600
1144
  );
@@ -1757,7 +1301,7 @@ var ActionsMenuDropdown = ({
1757
1301
  });
1758
1302
  const handleItemClick = _react.useCallback.call(void 0,
1759
1303
  (item) => {
1760
- _optionalChain([onItemClick, 'optionalCall', _27 => _27(item)]);
1304
+ _optionalChain([onItemClick, 'optionalCall', _23 => _23(item)]);
1761
1305
  if (item.type !== "checkbox" && item.type !== "submenu" && item.closeOnSelect !== false) {
1762
1306
  setOpen(false);
1763
1307
  }
@@ -1799,74 +1343,11 @@ var ActionsMenuDropdown = ({
1799
1343
  ] });
1800
1344
  };
1801
1345
 
1802
- // src/utils/image-proxy.ts
1803
- function getProxiedImageUrl(imageUrl, options) {
1804
- if (!imageUrl) return null;
1805
- const proxyPrefix = _optionalChain([options, 'optionalAccess', _28 => _28.proxyPrefix]);
1806
- const skipDomains = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _29 => _29.skipDomains]), () => ( []));
1807
- const directHttps = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _30 => _30.directHttps]), () => ( false));
1808
- if (proxyPrefix && imageUrl.includes(proxyPrefix)) {
1809
- return imageUrl;
1810
- }
1811
- if (!imageUrl.startsWith("http://") && !imageUrl.startsWith("https://")) {
1812
- return imageUrl;
1813
- }
1814
- if (directHttps && imageUrl.startsWith("https://")) {
1815
- return imageUrl;
1816
- }
1817
- if (!proxyPrefix) {
1818
- return imageUrl;
1819
- }
1820
- for (const domain of skipDomains) {
1821
- if (imageUrl.includes(domain)) {
1822
- return imageUrl;
1823
- }
1824
- }
1825
- return `${proxyPrefix}?url=${encodeURIComponent(imageUrl)}`;
1826
- }
1827
- function urlPathLooksLikeSvg(imageUrl) {
1828
- try {
1829
- return /\.svg$/i.test(new URL(imageUrl).pathname);
1830
- } catch (e2) {
1831
- return /\.svg(\?|#|$)/i.test(imageUrl);
1832
- }
1833
- }
1834
- function shouldProxyImage(imageUrl, proxyPrefix) {
1835
- if (!imageUrl) return false;
1836
- if (!imageUrl.startsWith("http://") && !imageUrl.startsWith("https://")) return false;
1837
- if (proxyPrefix && imageUrl.includes(proxyPrefix)) return false;
1838
- return true;
1839
- }
1840
- function generateImageSizes(_url) {
1841
- return `(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw`;
1842
- }
1843
-
1844
- // src/components/chat/utils/is-cross-origin-url.ts
1845
- function isCrossOriginUrl(url) {
1846
- if (!url) return false;
1847
- if (url.startsWith("/") && !url.startsWith("//")) return false;
1848
- return true;
1849
- }
1850
-
1851
- // src/components/chat/utils/decide-new-tab.ts
1852
- function decideNewTab(input) {
1853
- const { href, targetPlatform, openIn, alwaysNewTab, runtimeMode, currentSource } = input;
1854
- if (runtimeMode === "embed") return true;
1855
- if (openIn === "new-tab") return true;
1856
- if (alwaysNewTab === true) return true;
1857
- if (openIn === "same-tab") return false;
1858
- if (targetPlatform !== void 0 && targetPlatform !== null && currentSource) {
1859
- return targetPlatform !== currentSource;
1860
- }
1861
- if (!href) return false;
1862
- return isCrossOriginUrl(href);
1863
- }
1864
-
1865
1346
  // src/components/chat/utils/nav-anchor-props.ts
1866
1347
  function computeIsNewTab(runtime, href, targetPlatform) {
1867
1348
  if (!href) return false;
1868
1349
  if (runtime.navigation.mode === "embed") return true;
1869
- return _nullishCoalesce(_optionalChain([runtime, 'access', _31 => _31.navigation, 'access', _32 => _32.decideNewTab, 'optionalCall', _33 => _33({ href, targetPlatform })]), () => ( decideNewTab({
1350
+ return _nullishCoalesce(_optionalChain([runtime, 'access', _24 => _24.navigation, 'access', _25 => _25.decideNewTab, 'optionalCall', _26 => _26({ href, targetPlatform })]), () => ( _chunkY4JNA4W6cjs.decideNewTab.call(void 0, {
1870
1351
  href,
1871
1352
  targetPlatform,
1872
1353
  currentSource: _nullishCoalesce(runtime.source, () => ( ""))
@@ -1879,53 +1360,6 @@ function buildAnchorProps(href, isNewTab) {
1879
1360
  return href ? { href, ...newTabAnchorAttrs(isNewTab) } : void 0;
1880
1361
  }
1881
1362
 
1882
- // src/components/chat/utils/chat-nav-resolution.ts
1883
- var NEW_TAB_FEATURES = "noopener,noreferrer";
1884
- function isModifierClick(e) {
1885
- return e.button !== 0 || !!e.metaKey || !!e.ctrlKey || !!e.shiftKey || !!e.altKey;
1886
- }
1887
- function stripSameOriginToPath(href) {
1888
- if (!href.startsWith("http")) return href;
1889
- try {
1890
- const u = new URL(href);
1891
- return u.pathname + u.search + u.hash;
1892
- } catch (e3) {
1893
- return href;
1894
- }
1895
- }
1896
- function resolveHrefForRuntime(href, runtime) {
1897
- if (runtime.navigation.mode !== "embed") return href;
1898
- if (href.startsWith("http")) return href;
1899
- if (href.startsWith("//")) return href;
1900
- const origin = runtime.navigation.defaultContentOrigin;
1901
- if (!origin) return href;
1902
- return origin.replace(/\/+$/, "") + (href.startsWith("/") ? href : "/" + href);
1903
- }
1904
- function resolveExternalNavigation(args) {
1905
- let abs = args.href;
1906
- if (abs.startsWith("//")) abs = window.location.protocol + abs;
1907
- if (!abs.startsWith("http")) {
1908
- if (args.runtime.navigation.defaultContentOrigin) {
1909
- let origin = args.runtime.navigation.defaultContentOrigin;
1910
- while (origin.endsWith("/")) origin = origin.slice(0, -1);
1911
- abs = origin + (abs.startsWith("/") ? abs : "/" + abs);
1912
- } else if (args.runtime.navigation.mode === "embed" && process.env.NODE_ENV !== "production") {
1913
- console.warn(
1914
- "[chat-nav-resolution] relative href in embed mode with no defaultContentOrigin set on runtime.navigation \u2014 link will resolve against the embedder origin.",
1915
- { href: abs, targetPlatform: args.targetPlatform }
1916
- );
1917
- }
1918
- }
1919
- const open = () => {
1920
- if (args.runtime.navigation.openExternal) {
1921
- args.runtime.navigation.openExternal(abs);
1922
- } else {
1923
- window.open(abs, "_blank", NEW_TAB_FEATURES);
1924
- }
1925
- };
1926
- return { href: abs, open };
1927
- }
1928
-
1929
1363
  // src/components/chat/entity-cards/entity-author-card.tsx
1930
1364
  _chunkWBR7H6E3cjs.init_next_link.call(void 0, );
1931
1365
 
@@ -1959,7 +1393,7 @@ function EntityMetadataAuthorCell({
1959
1393
  {
1960
1394
  src: author.avatar_url || "",
1961
1395
  alt: fullName,
1962
- fallback: nameInitials(fullName, ""),
1396
+ fallback: _chunkY4JNA4W6cjs.nameInitials.call(void 0, fullName, ""),
1963
1397
  size: "md",
1964
1398
  variant: "round"
1965
1399
  }
@@ -1980,10 +1414,10 @@ function EntityAuthorCard({
1980
1414
  renderEmptyAuthor = false,
1981
1415
  className
1982
1416
  }) {
1983
- const hasAuthor = !!_optionalChain([author, 'optionalAccess', _34 => _34.full_name]);
1417
+ const hasAuthor = !!_optionalChain([author, 'optionalAccess', _27 => _27.full_name]);
1984
1418
  if (!hasAuthor && !renderEmptyAuthor) return null;
1985
1419
  const effectiveAuthor = hasAuthor ? author : EMPTY_AUTHOR_PLACEHOLDER;
1986
- const formatted = publishedAt ? formatDate(publishedAt) : "";
1420
+ const formatted = publishedAt ? _chunkY4JNA4W6cjs.formatDate.call(void 0, publishedAt) : "";
1987
1421
  const dateLabel = formatted === "Invalid Date" ? "" : formatted;
1988
1422
  const showDateCell = !!dateLabel;
1989
1423
  const extras = _nullishCoalesce(extraCells, () => ( []));
@@ -2042,22 +1476,13 @@ function BlogImagePlaceholder({
2042
1476
  ) });
2043
1477
  }
2044
1478
 
2045
- // src/utils/fetch-priority.ts
2046
-
2047
- var REACT_MAJOR = parseInt((React.default.version || "0").split(".")[0], 10);
2048
- var USE_CAMEL_CASE_FETCH_PRIORITY = REACT_MAJOR >= 19;
2049
- function fetchPriorityProp(priority) {
2050
- const value = priority === void 0 ? "auto" : typeof priority === "boolean" ? priority ? "high" : "low" : priority;
2051
- return USE_CAMEL_CASE_FETCH_PRIORITY ? { fetchPriority: value } : { fetchpriority: value };
2052
- }
2053
-
2054
1479
  // src/components/features/video.tsx
2055
1480
 
2056
1481
  var _muxplayerreact = require('@mux/mux-player-react'); var _muxplayerreact2 = _interopRequireDefault(_muxplayerreact);
2057
1482
 
2058
1483
  if (typeof window !== "undefined") {
2059
1484
  const w = window;
2060
- if (!_optionalChain([w, 'access', _35 => _35.chrome, 'optionalAccess', _36 => _36.cast])) {
1485
+ if (!_optionalChain([w, 'access', _28 => _28.chrome, 'optionalAccess', _29 => _29.cast])) {
2061
1486
  w.chrome = { ..._nullishCoalesce(w.chrome, () => ( {})), cast: { isAvailable: false } };
2062
1487
  }
2063
1488
  }
@@ -2086,7 +1511,7 @@ var YT_HOSTS = /* @__PURE__ */ new Set([
2086
1511
  function isYouTubeUrl(url) {
2087
1512
  try {
2088
1513
  return YT_HOSTS.has(new URL(url, "http://placeholder.local").hostname.toLowerCase());
2089
- } catch (e4) {
1514
+ } catch (e2) {
2090
1515
  return false;
2091
1516
  }
2092
1517
  }
@@ -2098,7 +1523,7 @@ function extractYouTubeId(url) {
2098
1523
  let u;
2099
1524
  try {
2100
1525
  u = new URL(url, "http://placeholder.local");
2101
- } catch (e5) {
1526
+ } catch (e3) {
2102
1527
  return null;
2103
1528
  }
2104
1529
  if (!YT_HOSTS.has(u.hostname.toLowerCase())) return null;
@@ -2247,7 +1672,7 @@ function YouTubeFacadeInner({
2247
1672
  const iframe = iframeRef.current;
2248
1673
  if (!iframe) return;
2249
1674
  function subscribe() {
2250
- _optionalChain([iframe, 'optionalAccess', _37 => _37.contentWindow, 'optionalAccess', _38 => _38.postMessage, 'call', _39 => _39(
1675
+ _optionalChain([iframe, 'optionalAccess', _30 => _30.contentWindow, 'optionalAccess', _31 => _31.postMessage, 'call', _32 => _32(
2251
1676
  '{"event":"listening"}',
2252
1677
  YT_NOCOOKIE_ORIGIN
2253
1678
  )]);
@@ -2261,17 +1686,17 @@ function YouTubeFacadeInner({
2261
1686
  let payload = null;
2262
1687
  try {
2263
1688
  payload = JSON.parse(event.data);
2264
- } catch (e6) {
1689
+ } catch (e4) {
2265
1690
  return;
2266
1691
  }
2267
1692
  if (!payload || payload.event !== "infoDelivery") return;
2268
- const state = _optionalChain([payload, 'access', _40 => _40.info, 'optionalAccess', _41 => _41.playerState]);
1693
+ const state = _optionalChain([payload, 'access', _33 => _33.info, 'optionalAccess', _34 => _34.playerState]);
2269
1694
  if (typeof state !== "number") return;
2270
1695
  if (state === YT_STATE_PLAYING) {
2271
1696
  if (blurTimer !== null) return;
2272
1697
  blurTimer = setTimeout(() => {
2273
1698
  blurTimer = null;
2274
- _optionalChain([iframeRef, 'access', _42 => _42.current, 'optionalAccess', _43 => _43.blur, 'call', _44 => _44()]);
1699
+ _optionalChain([iframeRef, 'access', _35 => _35.current, 'optionalAccess', _36 => _36.blur, 'call', _37 => _37()]);
2275
1700
  }, YT_PLAYING_BLUR_DELAY_MS);
2276
1701
  return;
2277
1702
  }
@@ -2317,7 +1742,7 @@ function YouTubeFacadeInner({
2317
1742
  src: posterJpg,
2318
1743
  alt: title,
2319
1744
  loading: "lazy",
2320
- ...fetchPriorityProp(priority),
1745
+ ..._chunkY4JNA4W6cjs.fetchPriorityProp.call(void 0, priority),
2321
1746
  decoding: priority ? "sync" : "async",
2322
1747
  className: "absolute inset-0 w-full h-full object-cover"
2323
1748
  }
@@ -2329,27 +1754,6 @@ function YouTubeFacadeInner({
2329
1754
  ) });
2330
1755
  }
2331
1756
 
2332
- // src/components/layout/page-heading.tsx
2333
-
2334
- var PAGE_HEADING_CLASS = "text-h1 text-ods-text-primary";
2335
- var SECTION_HEADING_CLASS = "text-h2 text-ods-text-primary";
2336
- var DESCRIPTION_CLASS = "mt-6 max-w-[640px] font-['DM_Sans'] text-[16px] md:text-[18px] leading-[24px] md:leading-[28px] text-ods-text-secondary";
2337
- function PageHeading({
2338
- children,
2339
- as: Tag2 = "h1",
2340
- description,
2341
- className,
2342
- descriptionClassName
2343
- }) {
2344
- const headingClass = className ? `${PAGE_HEADING_CLASS} ${className}` : PAGE_HEADING_CLASS;
2345
- const descClass = descriptionClassName ? `${DESCRIPTION_CLASS} ${descriptionClassName}` : DESCRIPTION_CLASS;
2346
- const hasDescription = description != null && description !== "" && typeof description !== "boolean";
2347
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
2348
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Tag2, { className: headingClass, children }),
2349
- hasDescription && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: descClass, children: description })
2350
- ] });
2351
- }
2352
-
2353
1757
  // src/components/features/video-ratio-tabs.tsx
2354
1758
 
2355
1759
  var TAB_TRIGGER_CLASS = "rounded-none border-b-2 border-transparent data-[state=active]:border-ods-accent data-[state=active]:bg-transparent data-[state=active]:shadow-none px-4 py-2 text-sm text-ods-text-secondary data-[state=active]:text-ods-text-primary";
@@ -2436,7 +1840,7 @@ var RATIO_TO_CSS_ASPECT = {
2436
1840
  landscape: "16 / 9"
2437
1841
  };
2438
1842
  function LazyBite({ ratio, children }) {
2439
- const { ref, isNear } = _chunkZSUNQJROcjs.useNearViewport.call(void 0, "500px");
1843
+ const { ref, isNear } = _chunkTFSYSWPScjs.useNearViewport.call(void 0, "500px");
2440
1844
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, style: { aspectRatio: RATIO_TO_CSS_ASPECT[ratio] }, children: isNear ? children : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full h-full bg-ods-card rounded-md" }) });
2441
1845
  }
2442
1846
  function VideoBitesDisplay({
@@ -2461,7 +1865,7 @@ function VideoBitesDisplay({
2461
1865
  const totalCount = grouped.portrait.length + grouped.square.length + grouped.landscape.length;
2462
1866
  if (totalCount === 0) return null;
2463
1867
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6 w-full min-w-0", children: [
2464
- showTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: `${SECTION_HEADING_CLASS} break-words`, children: title }),
1868
+ showTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: `${_chunkY4JNA4W6cjs.SECTION_HEADING_CLASS} break-words`, children: title }),
2465
1869
  grouped.hasMultiple ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2466
1870
  RatioTabs,
2467
1871
  {
@@ -2588,7 +1992,7 @@ function EntityVideoSection({
2588
1992
  }
2589
1993
  )),
2590
1994
  videoSummary && MarkdownRenderer && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6 w-full min-w-0", children: [
2591
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: `${SECTION_HEADING_CLASS} break-words`, children: "Summary" }),
1995
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: `${_chunkY4JNA4W6cjs.SECTION_HEADING_CLASS} break-words`, children: "Summary" }),
2592
1996
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-h4 text-ods-text-primary break-words overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownRenderer, { content: videoSummary }) })
2593
1997
  ] }),
2594
1998
  videoBites && videoBites.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -2602,40 +2006,6 @@ function EntityVideoSection({
2602
2006
  ] });
2603
2007
  }
2604
2008
 
2605
- // src/components/chat/utils/compact-card-classes.ts
2606
- var COMPACT_CARD_OUTER = "my-1.5 flex items-start gap-3 w-full p-2 rounded-lg border border-ods-border bg-ods-card no-underline transition-colors hover:border-ods-text-secondary/40";
2607
- var COMPACT_CARD_OUTER_STATIC = "my-1.5 flex items-start gap-3 w-full p-2 rounded-lg border border-ods-border bg-ods-card no-underline cursor-default";
2608
- var COMPACT_CARD_SKELETON_OUTER = "my-1.5 flex w-full animate-pulse items-start gap-3 rounded-lg border border-ods-border bg-ods-card p-2";
2609
- var COMPACT_CARD_IMAGE_SLOT = "relative block shrink-0 self-start w-14 h-14 aspect-square overflow-hidden rounded-md bg-ods-bg";
2610
- var COMPACT_CARD_SKELETON_IMAGE_SLOT = "block h-14 w-14 aspect-square shrink-0 self-start rounded-md bg-ods-bg";
2611
- var COMPACT_CARD_ICON_SLOT = "flex h-14 w-14 aspect-square shrink-0 self-start items-center justify-center rounded-md bg-ods-bg text-ods-accent";
2612
- var COMPACT_CARD_TEXT_COL = "flex min-w-0 flex-1 flex-col gap-0.5 min-h-14";
2613
- var COMPACT_CARD_TITLE_ROW = "flex items-center min-w-0 h-5";
2614
- var COMPACT_CARD_META_ROW_BOX = "flex items-center min-w-0 h-4";
2615
- var COMPACT_CARD_TITLE = "truncate text-sm font-semibold leading-5 text-ods-text-primary";
2616
- var COMPACT_CARD_SUBTITLE = "truncate text-[11px] leading-4 text-ods-text-secondary";
2617
- var COMPACT_CARD_SUMMARY = "truncate text-[11px] leading-4 text-ods-text-secondary/80";
2618
- var COMPACT_CARD_META_ROW = "flex items-center gap-1.5 min-w-0 text-[11px] leading-4 text-ods-text-secondary";
2619
- var COMPACT_CARD_ROW_FILLER = "\xA0";
2620
- var SAFE_URL_SCHEMES = ["http:", "https:", "mailto:"];
2621
- function safeHref(url) {
2622
- if (!url) return null;
2623
- if (/[\u0000-\u001f\u007f\u200b-\u200d\u2028\u2029\ufeff]/.test(url)) return null;
2624
- const trimmed = url.trim();
2625
- if (!trimmed) return null;
2626
- if (trimmed.startsWith("/") && !trimmed.startsWith("//")) return trimmed;
2627
- if (trimmed.startsWith("#")) return trimmed;
2628
- if (/^[a-z][a-z0-9+.-]*:$/i.test(trimmed)) return null;
2629
- try {
2630
- const parsed = new URL(trimmed, "https://_safehref_base.invalid");
2631
- if (!SAFE_URL_SCHEMES.includes(parsed.protocol)) return null;
2632
- if ((parsed.protocol === "https:" || parsed.protocol === "http:") && !parsed.hostname) return null;
2633
- return trimmed;
2634
- } catch (e7) {
2635
- return null;
2636
- }
2637
- }
2638
-
2639
2009
  // src/components/chat/entity-cards/onboarding-guide-card.tsx
2640
2010
  _chunkWBR7H6E3cjs.init_next_link.call(void 0, );
2641
2011
  _chunkFIG2RKZFcjs.init_cn.call(void 0, );
@@ -2669,9 +2039,9 @@ function useEntityCardPlaceholder({
2669
2039
  aspect = "wide"
2670
2040
  }) {
2671
2041
  const runtime = _chunkAQOWFSMBcjs.useChatRuntime.call(void 0, );
2672
- const builder = _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _45 => _45.resolvePlaceholderUrl]), () => ( NO_OP_BUILDER));
2673
- const enabled = placeholderUrl === void 0 && !!_optionalChain([runtime, 'optionalAccess', _46 => _46.resolvePlaceholderUrl]);
2674
- const derived = _chunkZSUNQJROcjs.useOgPlaceholder.call(void 0, builder, title, siteName, enabled, aspect);
2042
+ const builder = _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _38 => _38.resolvePlaceholderUrl]), () => ( NO_OP_BUILDER));
2043
+ const enabled = placeholderUrl === void 0 && !!_optionalChain([runtime, 'optionalAccess', _39 => _39.resolvePlaceholderUrl]);
2044
+ const derived = _chunkTFSYSWPScjs.useOgPlaceholder.call(void 0, builder, title, siteName, enabled, aspect);
2675
2045
  return placeholderUrl !== void 0 ? placeholderUrl : derived;
2676
2046
  }
2677
2047
 
@@ -2727,12 +2097,12 @@ function OnboardingGuideCardSkeleton({ size = "default" }) {
2727
2097
  ] });
2728
2098
  }
2729
2099
  if (size === "sm") {
2730
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
2731
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
2732
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_TEXT_COL, children: [
2733
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
2734
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-3 w-2/5 rounded bg-ods-bg/70" }) }),
2735
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
2100
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_SKELETON_OUTER, children: [
2101
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_SKELETON_IMAGE_SLOT }),
2102
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_TEXT_COL, children: [
2103
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
2104
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-3 w-2/5 rounded bg-ods-bg/70" }) }),
2105
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
2736
2106
  ] }),
2737
2107
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex shrink-0 items-center self-start h-5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-3.5 w-3.5 rounded bg-ods-bg" }) })
2738
2108
  ] });
@@ -2778,7 +2148,7 @@ function OnboardingGuideCard({
2778
2148
  const coverImage = guide.featured_image || guide.main_video_thumbnail || guide.og_image_url || null;
2779
2149
  const hasVideoCover = !!(guide.main_video_thumbnail || guide.highlight_video_thumbnail);
2780
2150
  const stepLabel = typeof guide.step_order === "number" ? String(guide.step_order).padStart(2, "0") : "\u2014";
2781
- const durationLabel = typeof guide.highlight_video_duration_ms === "number" && guide.highlight_video_duration_ms > 0 ? formatDurationMMSS(Math.floor(guide.highlight_video_duration_ms / 1e3)) : "";
2151
+ const durationLabel = typeof guide.highlight_video_duration_ms === "number" && guide.highlight_video_duration_ms > 0 ? _chunkY4JNA4W6cjs.formatDurationMMSS.call(void 0, Math.floor(guide.highlight_video_duration_ms / 1e3)) : "";
2782
2152
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2783
2153
  _chunkWBR7H6E3cjs.next_link_default,
2784
2154
  {
@@ -2851,14 +2221,14 @@ function OnboardingGuideCard({
2851
2221
  const compactCover = coverImage || placeholderUrl || null;
2852
2222
  const hasVideoCover = !guide.featured_image && !!guide.main_video_thumbnail;
2853
2223
  const summary2 = stripMarkdownPreview(guide.video_summary || guide.content || "");
2854
- const author = _optionalChain([guide, 'access', _47 => _47.author, 'optionalAccess', _48 => _48.full_name, 'optionalAccess', _49 => _49.trim, 'call', _50 => _50()]) || "";
2224
+ const author = _optionalChain([guide, 'access', _40 => _40.author, 'optionalAccess', _41 => _41.full_name, 'optionalAccess', _42 => _42.trim, 'call', _43 => _43()]) || "";
2855
2225
  const subtitleParts = [
2856
2226
  `Step ${guide.step_order}`,
2857
2227
  guide.section,
2858
2228
  author
2859
2229
  ].filter((s) => typeof s === "string" && s.length > 0);
2860
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWBR7H6E3cjs.next_link_default, { href, target, rel, prefetch: false, className: _chunkFIG2RKZFcjs.cn.call(void 0, COMPACT_CARD_OUTER, className), children: [
2861
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_IMAGE_SLOT, children: [
2230
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWBR7H6E3cjs.next_link_default, { href, target, rel, prefetch: false, className: _chunkFIG2RKZFcjs.cn.call(void 0, _chunkY4JNA4W6cjs.COMPACT_CARD_OUTER, className), children: [
2231
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_IMAGE_SLOT, children: [
2862
2232
  compactCover ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2863
2233
  _chunkXL4V2PYGcjs.next_image_default,
2864
2234
  {
@@ -2872,10 +2242,10 @@ function OnboardingGuideCard({
2872
2242
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex h-full w-full items-center justify-center text-ods-accent", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.GraduationCap, { className: "w-4 h-4" }) }),
2873
2243
  hasVideoCover && compactCover && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "absolute inset-0 flex items-center justify-center bg-black/30", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Play, { className: "h-4 w-4 text-white", fill: "white" }) })
2874
2244
  ] }),
2875
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: COMPACT_CARD_TEXT_COL, children: [
2876
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkFIG2RKZFcjs.cn.call(void 0, COMPACT_CARD_TITLE, "font-['Azeret_Mono']"), children: guide.title }) }),
2877
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-[11px] leading-4 text-[var(--color-accent-primary)]", children: subtitleParts.join(" \xB7 ") }) }),
2878
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: COMPACT_CARD_SUMMARY, children: summary2 || COMPACT_CARD_ROW_FILLER }) })
2245
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_TEXT_COL, children: [
2246
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkFIG2RKZFcjs.cn.call(void 0, _chunkY4JNA4W6cjs.COMPACT_CARD_TITLE, "font-['Azeret_Mono']"), children: guide.title }) }),
2247
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-[11px] leading-4 text-[var(--color-accent-primary)]", children: subtitleParts.join(" \xB7 ") }) }),
2248
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkY4JNA4W6cjs.COMPACT_CARD_SUMMARY, children: summary2 || _chunkY4JNA4W6cjs.COMPACT_CARD_ROW_FILLER }) })
2879
2249
  ] }),
2880
2250
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex shrink-0 items-center self-start h-5 text-ods-text-secondary", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { className: "w-3.5 h-3.5" }) })
2881
2251
  ] });
@@ -2915,414 +2285,6 @@ function OnboardingGuideCard({
2915
2285
  );
2916
2286
  }
2917
2287
 
2918
- // src/utils/source-icons.ts
2919
- var SOURCE_ICON_NAMES = {
2920
- // Doc tables
2921
- "openframe-docs": "openframe",
2922
- "data-room-docs": "shield",
2923
- // CMS / programs
2924
- "blog-posts": "newspaper",
2925
- "product-releases": "rocket",
2926
- "case-studies": "briefcase",
2927
- "onboarding-guides": "graduation-cap",
2928
- webinars: "video",
2929
- events: "calendar",
2930
- podcasts: "headphones",
2931
- "customer-interviews": "users",
2932
- // Financials
2933
- "investor-updates": "mail",
2934
- "financial-kpis": "activity",
2935
- "financial-cap-table": "table",
2936
- "financial-pnl": "trending-up",
2937
- "financial-balance-sheet": "dollar-sign",
2938
- "financial-cash-flow": "banknote",
2939
- // ClickUp
2940
- "clickup-roadmap": "clickup",
2941
- "clickup-delivery": "clickup",
2942
- "clickup-tasks-internal": "clickup",
2943
- // GitHub
2944
- "github-commits": "github",
2945
- "github-pull-requests": "github",
2946
- "github-pr-reviews": "github",
2947
- "github-commits-public": "github",
2948
- "github-pull-requests-public": "github",
2949
- "github-pr-reviews-public": "github",
2950
- // HubSpot
2951
- "hubspot-tickets": "hubspot",
2952
- "hubspot-tickets-anon": "hubspot",
2953
- "hubspot-tickets-self": "hubspot",
2954
- // Communications
2955
- "slack-messages": "slack"
2956
- };
2957
- function getSourceIconName(tableId) {
2958
- if (!tableId) return void 0;
2959
- return SOURCE_ICON_NAMES[tableId];
2960
- }
2961
- var SOURCE_LABELS_BY_TABLE = {
2962
- // Doc tables
2963
- "openframe-docs": "OpenFrame Docs",
2964
- "data-room-docs": "Data Room",
2965
- // CMS / programs
2966
- "blog-posts": "Blog Posts",
2967
- "product-releases": "Product Releases",
2968
- "case-studies": "Case Studies",
2969
- "onboarding-guides": "Onboarding Guides",
2970
- webinars: "Webinars",
2971
- events: "Events",
2972
- podcasts: "Podcasts",
2973
- "customer-interviews": "Customer Interviews",
2974
- // Financials
2975
- "investor-updates": "Investor Updates",
2976
- "financial-kpis": "Financial KPIs",
2977
- "financial-cap-table": "Cap Table",
2978
- "financial-pnl": "Profit & Loss",
2979
- "financial-balance-sheet": "Balance Sheet",
2980
- "financial-cash-flow": "Cash Flow",
2981
- // ClickUp
2982
- "clickup-roadmap": "ClickUp Roadmap",
2983
- "clickup-delivery": "ClickUp Delivery",
2984
- "clickup-tasks-internal": "ClickUp Tasks",
2985
- // GitHub
2986
- "github-commits": "GitHub Commits",
2987
- "github-pull-requests": "GitHub Pull Requests",
2988
- "github-pr-reviews": "GitHub PR Reviews",
2989
- "github-commits-public": "OpenFrame Commits",
2990
- "github-pull-requests-public": "OpenFrame Pull Requests",
2991
- "github-pr-reviews-public": "OpenFrame PR Reviews",
2992
- // HubSpot
2993
- "hubspot-tickets": "HubSpot Tickets",
2994
- "hubspot-tickets-anon": "Known Issues",
2995
- "hubspot-tickets-self": "My Tickets",
2996
- // Communications
2997
- "slack-messages": "OpenMSP Community"
2998
- };
2999
- function getSourceLabel(tableId) {
3000
- return _nullishCoalesce(SOURCE_LABELS_BY_TABLE[tableId], () => ( tableId));
3001
- }
3002
- var DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID = {
3003
- // Doc tables
3004
- markdown: "openframe-docs",
3005
- data_room_doc: "data-room-docs",
3006
- // CMS / programs
3007
- blog_post: "blog-posts",
3008
- product_release: "product-releases",
3009
- case_study: "case-studies",
3010
- onboarding_guide: "onboarding-guides",
3011
- webinar: "webinars",
3012
- event: "events",
3013
- podcast: "podcasts",
3014
- customer_interview: "customer-interviews",
3015
- // Financials
3016
- investor_update: "investor-updates",
3017
- financial_kpi: "financial-kpis",
3018
- cap_table: "financial-cap-table",
3019
- profit_loss: "financial-pnl",
3020
- balance_sheet: "financial-balance-sheet",
3021
- cash_flow: "financial-cash-flow",
3022
- // ClickUp
3023
- roadmap_item: "clickup-roadmap",
3024
- delivery_item: "clickup-delivery",
3025
- internal_task: "clickup-tasks-internal",
3026
- // GitHub
3027
- github_commit: "github-commits",
3028
- github_pull_request: "github-pull-requests",
3029
- github_pr_review: "github-pr-reviews",
3030
- github_commit_public: "github-commits-public",
3031
- github_pull_request_public: "github-pull-requests-public",
3032
- github_pr_review_public: "github-pr-reviews-public",
3033
- // HubSpot
3034
- hubspot_ticket: "hubspot-tickets",
3035
- hubspot_ticket_anon: "hubspot-tickets-anon",
3036
- hubspot_ticket_self: "hubspot-tickets-self",
3037
- // Communications
3038
- slack_message: "slack-messages"
3039
- };
3040
- function defaultTableIdForDocumentType(documentType) {
3041
- return _nullishCoalesce(DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID[documentType], () => ( null));
3042
- }
3043
-
3044
- // src/components/chat/utils/icon-registry.ts
3045
-
3046
-
3047
-
3048
-
3049
-
3050
-
3051
-
3052
-
3053
-
3054
-
3055
-
3056
-
3057
-
3058
-
3059
-
3060
-
3061
-
3062
-
3063
-
3064
-
3065
-
3066
-
3067
-
3068
-
3069
-
3070
-
3071
-
3072
-
3073
-
3074
-
3075
-
3076
-
3077
-
3078
-
3079
-
3080
-
3081
-
3082
-
3083
- var OpenFrameLogoIcon = ({ className }) => _react.createElement.call(void 0, _chunkLGLPNWS6cjs.OpenFrameLogo, { className, upperPathColor: "currentColor" });
3084
- var ICON_REGISTRY = {
3085
- // lucide-react (kebab-case)
3086
- activity: _lucidereact.Activity,
3087
- banknote: _lucidereact.Banknote,
3088
- bell: _lucidereact.Bell,
3089
- "book-open": _lucidereact.BookOpen,
3090
- box: _lucidereact.Box,
3091
- briefcase: _lucidereact.Briefcase,
3092
- calendar: _lucidereact.Calendar,
3093
- "check-square": _lucidereact.CheckSquare,
3094
- "dollar-sign": _lucidereact.DollarSign,
3095
- // For brand-vs-lucide variants the kebab key is the BRAND (most-common
3096
- // social-platform intent); `'<name>-lucide'` carries the lucide outline.
3097
- facebook: _chunkLGLPNWS6cjs.FacebookIcon,
3098
- "facebook-lucide": _lucidereact.Facebook,
3099
- "file-text": _lucidereact.FileText,
3100
- // `'github-lucide'` is the lucide outline glyph (used by
3101
- // `social_platforms.icon_name='Github'`); `'github'` is the brand icon
3102
- // (used by `chat_admin_slash_commands.icon_name='github'`). The PascalCase
3103
- // alias `'Github' → 'github-lucide'` routes the lucide glyph for
3104
- // social-platform DB rows; `'GitHubIcon' → 'github'` keeps brand routing
3105
- // consistent for callers that store the PascalCase component name.
3106
- github: _chunkLGLPNWS6cjs.GitHubIcon,
3107
- "github-lucide": _lucidereact.Github,
3108
- globe: _lucidereact.Globe,
3109
- "graduation-cap": _lucidereact.GraduationCap,
3110
- headphones: _lucidereact.Headphones,
3111
- info: _lucidereact.Info,
3112
- instagram: _chunkLGLPNWS6cjs.InstagramIcon,
3113
- "instagram-lucide": _lucidereact.Instagram,
3114
- mail: _lucidereact.Mail,
3115
- megaphone: _lucidereact.Megaphone,
3116
- "message-circle": _lucidereact.MessageCircle,
3117
- "message-square": _lucidereact.MessageSquare,
3118
- newspaper: _lucidereact.Newspaper,
3119
- package: _lucidereact.Package,
3120
- "pen-square": _lucidereact.PenSquare,
3121
- rocket: _lucidereact.Rocket,
3122
- search: _lucidereact.Search,
3123
- send: _lucidereact.Send,
3124
- shield: _lucidereact.Shield,
3125
- star: _lucidereact.Star,
3126
- table: _lucidereact.TableProperties,
3127
- "trending-up": _lucidereact.TrendingUp,
3128
- twitter: _lucidereact.Twitter,
3129
- users: _lucidereact.Users,
3130
- video: _lucidereact.Video,
3131
- youtube: _chunkLGLPNWS6cjs.YouTubeIcon,
3132
- "youtube-lucide": _lucidereact.Youtube,
3133
- // brand-only icons (no lucide variant in current use)
3134
- slack: _chunkLGLPNWS6cjs.SlackIcon,
3135
- clickup: _chunkLGLPNWS6cjs.ClickUpIcon,
3136
- hubspot: _chunkLGLPNWS6cjs.HubspotIcon,
3137
- linkedin: _chunkLGLPNWS6cjs.LinkedInIcon,
3138
- x: _chunkLGLPNWS6cjs.XLogo,
3139
- openframe: OpenFrameLogoIcon
3140
- };
3141
- var PASCAL_TO_KEBAB_ALIASES = {
3142
- // Lucide PascalCase names → kebab equivalents
3143
- Activity: "activity",
3144
- Banknote: "banknote",
3145
- Bell: "bell",
3146
- BookOpen: "book-open",
3147
- Box: "box",
3148
- Briefcase: "briefcase",
3149
- Calendar: "calendar",
3150
- CheckSquare: "check-square",
3151
- DollarSign: "dollar-sign",
3152
- // Lucide PascalCase → the `-lucide` kebab variant (kebab default is the
3153
- // brand icon for the social-platform names below).
3154
- Facebook: "facebook-lucide",
3155
- FileText: "file-text",
3156
- Github: "github-lucide",
3157
- Globe: "globe",
3158
- GraduationCap: "graduation-cap",
3159
- Headphones: "headphones",
3160
- Info: "info",
3161
- Instagram: "instagram-lucide",
3162
- Mail: "mail",
3163
- Megaphone: "megaphone",
3164
- MessageCircle: "message-circle",
3165
- MessageSquare: "message-square",
3166
- Newspaper: "newspaper",
3167
- Package: "package",
3168
- PenSquare: "pen-square",
3169
- Rocket: "rocket",
3170
- Search: "search",
3171
- Send: "send",
3172
- Shield: "shield",
3173
- Star: "star",
3174
- TableProperties: "table",
3175
- TrendingUp: "trending-up",
3176
- Twitter: "twitter",
3177
- Users: "users",
3178
- Video: "video",
3179
- Youtube: "youtube-lucide",
3180
- // Brand-icon PascalCase exports → kebab (kebab default is the brand)
3181
- SlackIcon: "slack",
3182
- GitHubIcon: "github",
3183
- ClickUpIcon: "clickup",
3184
- HubspotIcon: "hubspot",
3185
- LinkedInIcon: "linkedin",
3186
- FacebookIcon: "facebook",
3187
- InstagramIcon: "instagram",
3188
- YouTubeIcon: "youtube",
3189
- XLogo: "x",
3190
- OpenFrameLogo: "openframe"
3191
- };
3192
- function normalizeIconKey(key) {
3193
- return _nullishCoalesce(PASCAL_TO_KEBAB_ALIASES[key], () => ( key));
3194
- }
3195
- function getIconComponent(iconName) {
3196
- if (!iconName) return _lucidereact.FileText;
3197
- return _nullishCoalesce(ICON_REGISTRY[normalizeIconKey(iconName)], () => ( _lucidereact.FileText));
3198
- }
3199
- var SIZE_CLASSES = {
3200
- xs: "w-3 h-3",
3201
- // 12px
3202
- sm: "w-4 h-4",
3203
- // 16px
3204
- md: "w-6 h-6",
3205
- // 24px
3206
- lg: "w-8 h-8",
3207
- // 32px
3208
- xl: "w-12 h-12"
3209
- // 48px
3210
- };
3211
- var ICON_COLORS = {
3212
- linkedin: { color: "#0A66C2" },
3213
- facebook: { color: "#1877F2" },
3214
- youtube: { color: "#FF0000" }
3215
- };
3216
- function getDynamicIcon(iconName, size = "md", className) {
3217
- if (!iconName) {
3218
- console.warn("[getDynamicIcon] No iconName provided, using Globe fallback");
3219
- return _react.createElement.call(void 0, _lucidereact.Globe, { className: SIZE_CLASSES[size] });
3220
- }
3221
- const sizeClass = SIZE_CLASSES[size];
3222
- const finalClassName = className ? `${sizeClass} ${className}` : sizeClass;
3223
- const canonicalKey = normalizeIconKey(iconName);
3224
- const IconComponent = ICON_REGISTRY[canonicalKey];
3225
- if (IconComponent) {
3226
- const colorConfig = ICON_COLORS[canonicalKey] || {};
3227
- return _react.createElement.call(void 0, IconComponent, { className: finalClassName, ...colorConfig });
3228
- }
3229
- console.error(
3230
- `[getDynamicIcon] Icon NOT found in registry: "${iconName}" (normalized to "${canonicalKey}"). Available icons:`,
3231
- Object.keys(ICON_REGISTRY)
3232
- );
3233
- return _react.createElement.call(void 0, _lucidereact.Globe, { className: finalClassName });
3234
- }
3235
-
3236
- // src/components/chat/utils/source-row-cta.ts
3237
-
3238
- _chunkFIG2RKZFcjs.init_cn.call(void 0, );
3239
- function sanitizePath(path) {
3240
- return (path || "").replace(/[^a-zA-Z0-9/_\-.]/g, "");
3241
- }
3242
- function sourceRowCtxFromRuntime(runtime, surface = {}) {
3243
- return {
3244
- currentPlatform: _nullishCoalesce(runtime.source, () => ( null)),
3245
- composeContentUrl: runtime.composeContentUrl,
3246
- docPlatformTargets: runtime.docPlatformTargets,
3247
- baseRoute: surface.baseRoute,
3248
- chipBasePlatform: surface.chipBasePlatform
3249
- };
3250
- }
3251
- function pickSourceIcon(sourceRepo, documentType) {
3252
- const iconName = sourceRepo ? getSourceIconName(sourceRepo) : void 0;
3253
- const icon = iconName ? getIconComponent(iconName) : _lucidereact.FileText;
3254
- const iconLabel = _nullishCoalesce(documentType, () => ( "Source"));
3255
- return { icon, iconLabel };
3256
- }
3257
- var DOC_TABLE_TYPES = ["markdown", "data_room_doc"];
3258
- function shouldFallbackToPathNav(row) {
3259
- return !!row.documentType && DOC_TABLE_TYPES.includes(row.documentType);
3260
- }
3261
- function resolveSourceRowCTA(row, ctx = {}) {
3262
- const sourceRepo = _nullishCoalesce(_nullishCoalesce(row.sourceRepo, () => ( (row.documentType && ctx.tableIdForDocumentType ? ctx.tableIdForDocumentType(row.documentType) : null))), () => ( null));
3263
- const { icon, iconLabel } = pickSourceIcon(sourceRepo, row.documentType);
3264
- let href = null;
3265
- let targetPlatform = null;
3266
- const idValue = (_nullishCoalesce(row.id, () => ( ""))).trim();
3267
- if (row.path && shouldFallbackToPathNav(row) && !row.externalUrl) {
3268
- const safePath = sanitizePath(row.path);
3269
- if (safePath) {
3270
- const docTarget = row.documentType ? _optionalChain([ctx, 'access', _51 => _51.docPlatformTargets, 'optionalAccess', _52 => _52[row.documentType]]) : void 0;
3271
- if (docTarget) {
3272
- const seg = docTarget.basePath.split("/").filter(Boolean).join("/");
3273
- const base = `${_chunkFIG2RKZFcjs.getBaseUrl.call(void 0, docTarget.platform)}${seg ? `/${seg}` : ""}/`;
3274
- href = _nullishCoalesce(safeHref(new URL(safePath, base).toString()), () => ( null));
3275
- targetPlatform = docTarget.platform;
3276
- } else if (ctx.chipBasePlatform) {
3277
- const base = `${_chunkFIG2RKZFcjs.getBaseUrl.call(void 0, ctx.chipBasePlatform)}/knowledge-base/`;
3278
- href = _nullishCoalesce(safeHref(new URL(safePath, base).toString()), () => ( null));
3279
- targetPlatform = ctx.chipBasePlatform;
3280
- } else if (ctx.baseRoute) {
3281
- const synthetic = `https://_internal_.local${ctx.baseRoute.startsWith("/") ? ctx.baseRoute : "/" + ctx.baseRoute}/`;
3282
- const absolute = new URL(safePath, synthetic).toString();
3283
- href = _nullishCoalesce(safeHref(absolute.replace("https://_internal_.local", "")), () => ( null));
3284
- targetPlatform = _nullishCoalesce(ctx.currentPlatform, () => ( null));
3285
- }
3286
- }
3287
- } else if (ctx.composeContentUrl && row.documentType && row.externalUrl) {
3288
- const composed = ctx.composeContentUrl({
3289
- type: row.documentType,
3290
- identifier: idValue,
3291
- externalUrl: row.externalUrl,
3292
- targetPlatform: _nullishCoalesce(row.targetPlatform, () => ( null))
3293
- });
3294
- href = composed.href ? _nullishCoalesce(safeHref(composed.href), () => ( null)) : null;
3295
- targetPlatform = composed.targetPlatform;
3296
- } else if (row.externalUrl) {
3297
- href = _nullishCoalesce(safeHref(row.externalUrl), () => ( null));
3298
- targetPlatform = _nullishCoalesce(row.targetPlatform, () => ( null));
3299
- }
3300
- const askable = !!(idValue && row.documentType);
3301
- const chatRef = askable ? {
3302
- type: row.documentType,
3303
- ...sourceRepo ? { sourceRepo } : {},
3304
- id: idValue,
3305
- title: row.title,
3306
- url: href,
3307
- targetPlatform,
3308
- // Carry `path` so a downstream inline card (rendered from this
3309
- // chatRef on a subsequent turn) gets the same doc-tree-swap
3310
- // routing the chip already used. Without it, the Ask drill-in
3311
- // would resolve to a same-tab full-page nav even when an in-app
3312
- // path is available.
3313
- ...row.path ? { metadata: { path: row.path } } : {}
3314
- } : null;
3315
- return { icon, iconLabel, href, targetPlatform, askable, chatRef };
3316
- }
3317
- function resolveSourceIcon(input, ctx = {}) {
3318
- if (!input) return { Icon: _lucidereact.FileText, label: "Source" };
3319
- const { sourceRepo, documentType } = typeof input === "string" ? { sourceRepo: null, documentType: input } : input;
3320
- if (!sourceRepo && !documentType) return { Icon: _lucidereact.FileText, label: "Source" };
3321
- const resolvedRepo = _nullishCoalesce(_nullishCoalesce(sourceRepo, () => ( (documentType && ctx.tableIdForDocumentType ? ctx.tableIdForDocumentType(documentType) : null))), () => ( null));
3322
- const { icon, iconLabel } = pickSourceIcon(resolvedRepo, documentType);
3323
- return { Icon: icon, label: iconLabel };
3324
- }
3325
-
3326
2288
  // src/components/ui/page-actions.tsx
3327
2289
  _chunkFIG2RKZFcjs.init_cn.call(void 0, );
3328
2290
 
@@ -3455,7 +2417,7 @@ function IconButtonsVariant({
3455
2417
  }) {
3456
2418
  const desktopActions = actions.filter((a) => !a.showOnlyMobile);
3457
2419
  const hasMenuActions = !!menuActions && menuActions.some((g) => g.items.length > 0);
3458
- const isSingleAction = actions.length === 1 && !_optionalChain([actions, 'access', _53 => _53[0], 'access', _54 => _54.submenu, 'optionalAccess', _55 => _55.length]);
2420
+ const isSingleAction = actions.length === 1 && !_optionalChain([actions, 'access', _44 => _44[0], 'access', _45 => _45.submenu, 'optionalAccess', _46 => _46.length]);
3459
2421
  const singleAction = isSingleAction ? actions[0] : null;
3460
2422
  const useSingleActionMobile = isSingleAction && !hasMenuActions;
3461
2423
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
@@ -3537,7 +2499,7 @@ function EntityImage({ src, alt, fallbackText, className }) {
3537
2499
  setImageFailed(false);
3538
2500
  }, [src]);
3539
2501
  const showFallback = imageFailed || !src;
3540
- const initials = getFirstLastInitials(_nullishCoalesce(fallbackText, () => ( alt)));
2502
+ const initials = _chunkY4JNA4W6cjs.getFirstLastInitials.call(void 0, _nullishCoalesce(fallbackText, () => ( alt)));
3541
2503
  if (showFallback) {
3542
2504
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3543
2505
  "div",
@@ -3720,53 +2682,6 @@ function ArticleDetailLayout({ children, schemas, contentClassName }) {
3720
2682
  ] });
3721
2683
  }
3722
2684
 
3723
- // src/utils/content-href.ts
3724
- var DEFAULT_CONTENT_SUFFIXES = {
3725
- onboarding_guide: "onboarding-guides",
3726
- product_release: "releases",
3727
- blog_post: "blog",
3728
- case_study: "case-studies",
3729
- customer_interview: "interviews",
3730
- investor_update: "investor-updates",
3731
- webinar: "webinars",
3732
- podcast: "podcasts",
3733
- event: "events",
3734
- // Author profile pages (`/authors/<slug>`) — identified by the profile
3735
- // slug. Mirrors the hub's `PUBLIC_URL_PATHS.author`, which derives from
3736
- // `AUTHORS_PATH` in the hub's `lib/utils/breadcrumbs.ts` (the hub-side
3737
- // SSOT for the segment).
3738
- author: "authors"
3739
- };
3740
- function lastPathSegment(url) {
3741
- try {
3742
- const pathname = new URL(url, "https://_.local").pathname;
3743
- const segs = pathname.split("/").filter(Boolean);
3744
- return segs.length > 0 ? segs[segs.length - 1] : null;
3745
- } catch (e8) {
3746
- return null;
3747
- }
3748
- }
3749
- function makeComposeContentUrl(opts) {
3750
- const suffixes = _nullishCoalesce(opts.suffixes, () => ( DEFAULT_CONTENT_SUFFIXES));
3751
- return ({ type, identifier, externalUrl, targetPlatform }) => {
3752
- const override = opts.overrides && Object.prototype.hasOwnProperty.call(opts.overrides, type) ? opts.overrides[type] : void 0;
3753
- if (override) return override(identifier);
3754
- const seg = _nullishCoalesce((Object.prototype.hasOwnProperty.call(suffixes, type) ? suffixes[type] : void 0), () => ( type));
3755
- if (opts.hostedTypes.has(type)) {
3756
- const recovered = externalUrl ? lastPathSegment(externalUrl) : null;
3757
- const slug = recovered && recovered !== seg ? recovered : identifier;
3758
- return { href: `/${seg}/${slug}`, targetPlatform: null };
3759
- }
3760
- return externalUrl ? { href: externalUrl, targetPlatform: _nullishCoalesce(targetPlatform, () => ( null)) } : { href: `${opts.contentOrigin}/${seg}/${identifier}`, targetPlatform: null };
3761
- };
3762
- }
3763
- function buildDefaultHref(basePath, slug) {
3764
- return { href: `${basePath}/${slug}`, targetPlatform: null };
3765
- }
3766
- function resolveContentHref(composeContentUrl, args) {
3767
- return composeContentUrl ? composeContentUrl({ type: args.type, identifier: args.slug, platforms: args.platforms }) : buildDefaultHref(args.basePath, args.slug);
3768
- }
3769
-
3770
2685
  // src/components/ui/error-state.tsx
3771
2686
  _chunkXXI7BNB6cjs.init_button2.call(void 0, );
3772
2687
  _chunkFIG2RKZFcjs.init_cn.call(void 0, );
@@ -3928,7 +2843,7 @@ function useVideoOriginPreconnect({
3928
2843
  supabaseStorageOrigin
3929
2844
  } = {}) {
3930
2845
  const runtime = _chunkAQOWFSMBcjs.useChatRuntime.call(void 0, );
3931
- const resolvedOrigin = _nullishCoalesce(supabaseStorageOrigin, () => ( _optionalChain([runtime, 'optionalAccess', _56 => _56.endpoints, 'access', _57 => _57.supabaseStorageOrigin])));
2846
+ const resolvedOrigin = _nullishCoalesce(supabaseStorageOrigin, () => ( _optionalChain([runtime, 'optionalAccess', _47 => _47.endpoints, 'access', _48 => _48.supabaseStorageOrigin])));
3932
2847
  try {
3933
2848
  _reactdom2.default.preconnect(MUX_STREAM_ORIGIN, { crossOrigin: "anonymous" });
3934
2849
  _reactdom2.default.preconnect(MUX_IMAGE_ORIGIN, { crossOrigin: "anonymous" });
@@ -3947,17 +2862,17 @@ function useVideoWarmup({
3947
2862
  nearMargin = "1000px"
3948
2863
  } = {}) {
3949
2864
  const runtime = _chunkAQOWFSMBcjs.useChatRuntime.call(void 0, );
3950
- const resolvedOrigin = _nullishCoalesce(supabaseStorageOrigin, () => ( _optionalChain([runtime, 'optionalAccess', _58 => _58.endpoints, 'access', _59 => _59.supabaseStorageOrigin])));
2865
+ const resolvedOrigin = _nullishCoalesce(supabaseStorageOrigin, () => ( _optionalChain([runtime, 'optionalAccess', _49 => _49.endpoints, 'access', _50 => _50.supabaseStorageOrigin])));
3951
2866
  useVideoOriginPreconnect({ supabaseStorageOrigin: resolvedOrigin });
3952
- const { ref, isNear } = _chunkZSUNQJROcjs.useNearViewport.call(void 0, nearMargin);
2867
+ const { ref, isNear } = _chunkTFSYSWPScjs.useNearViewport.call(void 0, nearMargin);
3953
2868
  _react.useEffect.call(void 0, () => {
3954
2869
  if (!isNear || !videoUrl || !resolvedOrigin) return;
3955
2870
  const conn = navigator.connection;
3956
- if (_optionalChain([conn, 'optionalAccess', _60 => _60.saveData]) === true) return;
2871
+ if (_optionalChain([conn, 'optionalAccess', _51 => _51.saveData]) === true) return;
3957
2872
  let videoOrigin;
3958
2873
  try {
3959
2874
  videoOrigin = new URL(videoUrl, "http://placeholder.local").origin;
3960
- } catch (e9) {
2875
+ } catch (e5) {
3961
2876
  return;
3962
2877
  }
3963
2878
  if (videoOrigin !== resolvedOrigin) return;
@@ -3985,399 +2900,6 @@ function getCaptionsUrl(entityType, entityId, srtContent) {
3985
2900
  return `/api/captions/${entityType}/${entityId}?v=${hash}`;
3986
2901
  }
3987
2902
 
3988
- // src/components/ui/search-input.tsx
3989
- _chunkFIG2RKZFcjs.init_cn.call(void 0, );
3990
- var _reactpopover = require('@radix-ui/react-popover'); var PopoverPrimitive = _interopRequireWildcard(_reactpopover);
3991
- var _reactscrollarea = require('@radix-ui/react-scroll-area'); var ScrollAreaPrimitive = _interopRequireWildcard(_reactscrollarea);
3992
-
3993
-
3994
- var containerStyles = _chunkFIG2RKZFcjs.cn.call(void 0,
3995
- // Layout & spacing — matches lib Input component
3996
- "flex items-center gap-2 rounded-[6px] border px-3 h-11 md:h-12 cursor-text",
3997
- "has-[:focus-visible]:outline-none",
3998
- "group",
3999
- "transition-colors duration-200",
4000
- // Theme palette — matches lib Input component
4001
- "bg-ods-card border-ods-border has-[:focus]:border-ods-accent"
4002
- );
4003
- var innerInputStyles = _chunkFIG2RKZFcjs.cn.call(void 0,
4004
- "flex-1 min-w-[60px] bg-transparent border-none outline-none",
4005
- "text-h4",
4006
- "text-ods-text-primary placeholder:text-ods-text-secondary",
4007
- "disabled:cursor-not-allowed",
4008
- "touch-manipulation"
4009
- );
4010
- function chipVariantToTagVariant(variant) {
4011
- switch (variant) {
4012
- case "selected":
4013
- return "primary";
4014
- // Content tags render with the unified badge skin (ods-card + ods-border,
4015
- // mono uppercase) — identical to the public EntityTagBadges display.
4016
- case "tag":
4017
- return "badge";
4018
- case "category":
4019
- case "subcategory":
4020
- default:
4021
- return "outline";
4022
- }
4023
- }
4024
- function SearchInput({
4025
- placeholder = "Search...",
4026
- value,
4027
- defaultValue = "",
4028
- onChange,
4029
- onSubmit,
4030
- results = [],
4031
- isLoading = false,
4032
- onResultSelect,
4033
- debounceMs = 300,
4034
- renderResult,
4035
- groupBy,
4036
- emptyResultsText = "No results found",
4037
- showDropdown: showDropdownProp,
4038
- filterChips = [],
4039
- onFilterRemove,
4040
- startAdornment,
4041
- endAdornment,
4042
- className,
4043
- dropdownClassName,
4044
- minQueryLength = 2,
4045
- limitTags = "auto",
4046
- getLimitTagsText = (more) => `+${more}`
4047
- }) {
4048
- const [internalValue, setInternalValue] = React13.useState(defaultValue);
4049
- const currentValue = onChange ? _nullishCoalesce(value, () => ( "")) : internalValue;
4050
- const debouncedValue = _chunkZSUNQJROcjs.useDebounce.call(void 0, currentValue, debounceMs);
4051
- const [isOpen, setIsOpen] = React13.useState(false);
4052
- const [highlightedIndex, setHighlightedIndex] = React13.useState(-1);
4053
- const containerRef = React13.useRef(null);
4054
- const currentPlaceholder = filterChips.length > 0 ? "Add filter..." : placeholder;
4055
- const {
4056
- visibleCount: rawVisibleCount,
4057
- middleRef,
4058
- measureRef,
4059
- textMeasureRef,
4060
- badgeRef,
4061
- inputRef
4062
- } = _chunkZSUNQJROcjs.useAutoLimitTags.call(void 0, {
4063
- count: filterChips.length,
4064
- limitTags,
4065
- // When chips exist, pass empty placeholder so the hook only reserves input minWidth,
4066
- // not the full placeholder text width — gives more room for chips on narrow screens
4067
- placeholder: filterChips.length > 0 ? "" : placeholder
4068
- });
4069
- const visibleCount = filterChips.length > 0 ? Math.max(1, rawVisibleCount) : rawVisibleCount;
4070
- const hiddenTagsRef = React13.useRef(null);
4071
- const hiddenTagsPopupRef = React13.useRef(null);
4072
- const [showHiddenTags, setShowHiddenTags] = React13.useState(false);
4073
- React13.useEffect(() => {
4074
- if (!showHiddenTags) return;
4075
- const handleClick = (e) => {
4076
- const target = e.target;
4077
- if (!_optionalChain([hiddenTagsRef, 'access', _61 => _61.current, 'optionalAccess', _62 => _62.contains, 'call', _63 => _63(target)]) && !_optionalChain([hiddenTagsPopupRef, 'access', _64 => _64.current, 'optionalAccess', _65 => _65.contains, 'call', _66 => _66(target)])) {
4078
- setShowHiddenTags(false);
4079
- }
4080
- };
4081
- document.addEventListener("mousedown", handleClick);
4082
- return () => document.removeEventListener("mousedown", handleClick);
4083
- }, [showHiddenTags]);
4084
- const hiddenCount = filterChips.length - visibleCount;
4085
- const visibleChips = filterChips.slice(0, visibleCount);
4086
- const hiddenChips = filterChips.slice(visibleCount);
4087
- const { flatResults, groups } = React13.useMemo(() => {
4088
- if (!groupBy) return { flatResults: results, groups: null };
4089
- const grouped = /* @__PURE__ */ new Map();
4090
- for (const r of results) {
4091
- const key = groupBy(r);
4092
- const arr = grouped.get(key);
4093
- if (arr) {
4094
- arr.push(r);
4095
- } else {
4096
- grouped.set(key, [r]);
4097
- }
4098
- }
4099
- return { flatResults: results, groups: grouped };
4100
- }, [results, groupBy]);
4101
- const meetsMinQuery = debouncedValue.length >= minQueryLength;
4102
- const autoShow = meetsMinQuery;
4103
- const dropdownVisible = _nullishCoalesce(showDropdownProp, () => ( (isOpen && autoShow)));
4104
- React13.useEffect(() => {
4105
- setHighlightedIndex(-1);
4106
- }, [flatResults.length]);
4107
- const handleChange = (e) => {
4108
- const newVal = e.target.value;
4109
- if (onChange) {
4110
- onChange(newVal);
4111
- } else {
4112
- setInternalValue(newVal);
4113
- }
4114
- if (!isOpen) setIsOpen(true);
4115
- setHighlightedIndex(-1);
4116
- };
4117
- const handleClear = (e) => {
4118
- e.stopPropagation();
4119
- e.preventDefault();
4120
- if (onChange) {
4121
- onChange("");
4122
- } else {
4123
- setInternalValue("");
4124
- }
4125
- _optionalChain([inputRef, 'access', _67 => _67.current, 'optionalAccess', _68 => _68.focus, 'call', _69 => _69()]);
4126
- };
4127
- const handleResultClick = (result, e) => {
4128
- _optionalChain([onResultSelect, 'optionalCall', _70 => _70(
4129
- result,
4130
- e ? {
4131
- metaKey: e.metaKey,
4132
- ctrlKey: e.ctrlKey,
4133
- shiftKey: e.shiftKey,
4134
- altKey: e.altKey,
4135
- button: e.button
4136
- } : void 0
4137
- )]);
4138
- setIsOpen(false);
4139
- };
4140
- const handleKeyDown = (e) => {
4141
- switch (e.key) {
4142
- case "ArrowDown":
4143
- e.preventDefault();
4144
- if (!isOpen) setIsOpen(true);
4145
- setHighlightedIndex(
4146
- (prev) => prev < flatResults.length - 1 ? prev + 1 : 0
4147
- );
4148
- break;
4149
- case "ArrowUp":
4150
- e.preventDefault();
4151
- setHighlightedIndex(
4152
- (prev) => prev > 0 ? prev - 1 : flatResults.length - 1
4153
- );
4154
- break;
4155
- case "Enter":
4156
- e.preventDefault();
4157
- if (highlightedIndex >= 0 && flatResults[highlightedIndex]) {
4158
- handleResultClick(flatResults[highlightedIndex]);
4159
- } else {
4160
- _optionalChain([onSubmit, 'optionalCall', _71 => _71(currentValue)]);
4161
- }
4162
- break;
4163
- case "Escape":
4164
- setIsOpen(false);
4165
- setHighlightedIndex(-1);
4166
- break;
4167
- case "Backspace":
4168
- if (!currentValue && filterChips.length > 0 && onFilterRemove) {
4169
- onFilterRemove(filterChips[filterChips.length - 1].id);
4170
- }
4171
- break;
4172
- }
4173
- };
4174
- const handleOpenChange = (open) => {
4175
- setIsOpen(open);
4176
- };
4177
- const defaultRenderResult = (result, isHighlighted) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3 w-full min-w-0", children: [
4178
- result.icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-shrink-0 text-ods-text-secondary [&_svg]:size-4", children: result.icon }),
4179
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 flex-1", children: [
4180
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkFIG2RKZFcjs.cn.call(void 0,
4181
- "text-sm font-medium leading-5 truncate",
4182
- isHighlighted ? "text-ods-accent" : "text-ods-text-primary"
4183
- ), title: result.title, children: result.title }),
4184
- result.description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-xs leading-4 text-ods-text-secondary truncate mt-0.5", title: result.description, children: result.description })
4185
- ] }),
4186
- result.type && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-shrink-0 text-[11px] font-medium text-ods-text-muted uppercase tracking-wider", children: result.type })
4187
- ] });
4188
- const renderRow = (result, index) => {
4189
- const isHighlighted = index === highlightedIndex;
4190
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4191
- "div",
4192
- {
4193
- role: "option",
4194
- "aria-selected": isHighlighted,
4195
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
4196
- "flex items-center min-h-10 px-3 cursor-pointer transition-colors border-b border-ods-border last:border-b-0",
4197
- isHighlighted && "bg-ods-bg-hover",
4198
- !isHighlighted && "hover:bg-ods-bg-hover"
4199
- ),
4200
- onClick: (e) => handleResultClick(result, e),
4201
- onMouseEnter: () => setHighlightedIndex(index),
4202
- children: renderResult ? renderResult(result, isHighlighted) : defaultRenderResult(result, isHighlighted)
4203
- },
4204
- result.id
4205
- );
4206
- };
4207
- const renderDropdownContent = () => {
4208
- if (isLoading) {
4209
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-4 py-3 text-ods-text-secondary text-[14px]", children: "Loading..." });
4210
- }
4211
- if (flatResults.length === 0) {
4212
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-4 py-3 text-ods-text-secondary text-[14px]", children: emptyResultsText });
4213
- }
4214
- if (groups) {
4215
- let globalIndex = 0;
4216
- return Array.from(groups.entries()).map(([groupLabel, groupResults]) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
4217
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-4 py-2 text-[12px] font-semibold text-ods-text-secondary uppercase tracking-wide bg-ods-bg", children: groupLabel }),
4218
- groupResults.map((result) => {
4219
- const idx = globalIndex++;
4220
- return renderRow(result, idx);
4221
- })
4222
- ] }, groupLabel));
4223
- }
4224
- return flatResults.map((result, index) => renderRow(result, index));
4225
- };
4226
- const hasValue = currentValue.length > 0;
4227
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkFIG2RKZFcjs.cn.call(void 0, "relative", className), ref: containerRef, children: [
4228
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, PopoverPrimitive.Root, { open: dropdownVisible, onOpenChange: handleOpenChange, modal: false, children: [
4229
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PopoverPrimitive.Anchor, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
4230
- "div",
4231
- {
4232
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
4233
- containerStyles,
4234
- "hover:bg-ods-bg-hover hover:border-ods-border-hover active:bg-ods-bg-active active:border-ods-border-active",
4235
- dropdownVisible && "!border-ods-accent"
4236
- ),
4237
- onClick: () => {
4238
- _optionalChain([inputRef, 'access', _72 => _72.current, 'optionalAccess', _73 => _73.focus, 'call', _74 => _74()]);
4239
- setIsOpen(true);
4240
- },
4241
- children: [
4242
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-shrink-0 text-ods-text-secondary transition-colors duration-200 group-has-[:focus]:text-ods-accent [&_svg]:size-4 md:[&_svg]:size-6", children: startAdornment !== void 0 ? startAdornment : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZW7C7TFcjs.SearchIcon, {}) }),
4243
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref: middleRef, className: "flex-1 flex items-center gap-2 min-w-0 overflow-hidden", children: [
4244
- visibleChips.map((chip) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4245
- Tag,
4246
- {
4247
- variant: chipVariantToTagVariant(chip.variant),
4248
- label: chip.label,
4249
- labelClassName: "truncate max-w-[120px]",
4250
- onClose: onFilterRemove ? () => onFilterRemove(chip.id) : void 0
4251
- },
4252
- chip.id
4253
- )),
4254
- hiddenCount > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: hiddenTagsRef, className: "shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4255
- "button",
4256
- {
4257
- ref: badgeRef,
4258
- type: "button",
4259
- onClick: (e) => {
4260
- e.stopPropagation();
4261
- setShowHiddenTags((prev) => !prev);
4262
- },
4263
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
4264
- "flex items-center h-8 px-2",
4265
- "bg-ods-card border border-ods-border rounded-[6px]",
4266
- "font-mono text-[14px] font-medium leading-5 text-ods-text-secondary uppercase tracking-[-0.28px]",
4267
- "hover:bg-ods-bg-hover transition-colors cursor-pointer"
4268
- ),
4269
- "aria-label": `${hiddenCount} more selected filters`,
4270
- children: getLimitTagsText(hiddenCount)
4271
- }
4272
- ) }),
4273
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4274
- "input",
4275
- {
4276
- ref: inputRef,
4277
- type: "text",
4278
- value: currentValue,
4279
- onChange: handleChange,
4280
- onKeyDown: handleKeyDown,
4281
- onFocus: () => {
4282
- setIsOpen(true);
4283
- setShowHiddenTags(false);
4284
- },
4285
- placeholder: currentPlaceholder,
4286
- className: innerInputStyles
4287
- }
4288
- )
4289
- ] }),
4290
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-1 shrink-0 ml-auto", children: [
4291
- hasValue && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4292
- "button",
4293
- {
4294
- type: "button",
4295
- onClick: handleClear,
4296
- className: "flex items-center justify-center hover:opacity-70 transition-opacity",
4297
- "aria-label": "Clear search",
4298
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.XmarkCircleIcon, { className: "text-ods-text-secondary", size: 24 })
4299
- }
4300
- ),
4301
- endAdornment
4302
- ] })
4303
- ]
4304
- }
4305
- ) }),
4306
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4307
- PopoverPrimitive.Content,
4308
- {
4309
- className: _chunkFIG2RKZFcjs.cn.call(void 0,
4310
- "z-50 w-[var(--radix-popover-trigger-width)] mt-1",
4311
- "bg-ods-card border border-ods-border rounded-[6px] overflow-hidden shadow-lg",
4312
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
4313
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
4314
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
4315
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
4316
- dropdownClassName
4317
- ),
4318
- sideOffset: 4,
4319
- align: "start",
4320
- onOpenAutoFocus: (e) => {
4321
- e.preventDefault();
4322
- _optionalChain([inputRef, 'access', _75 => _75.current, 'optionalAccess', _76 => _76.focus, 'call', _77 => _77()]);
4323
- },
4324
- onInteractOutside: (e) => {
4325
- if (_optionalChain([containerRef, 'access', _78 => _78.current, 'optionalAccess', _79 => _79.contains, 'call', _80 => _80(e.target)])) {
4326
- e.preventDefault();
4327
- }
4328
- },
4329
- children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, ScrollAreaPrimitive.Root, { className: "overflow-hidden", children: [
4330
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScrollAreaPrimitive.Viewport, { className: "max-h-[320px] w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { role: "listbox", children: renderDropdownContent() }) }),
4331
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScrollAreaPrimitive.Scrollbar, { className: "hidden", orientation: "vertical", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScrollAreaPrimitive.Thumb, {}) })
4332
- ] })
4333
- }
4334
- )
4335
- ] }),
4336
- showHiddenTags && hiddenCount > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4337
- HiddenTagsPopup,
4338
- {
4339
- ref: hiddenTagsPopupRef,
4340
- items: hiddenChips.map((chip) => ({ label: chip.label, value: chip.id })),
4341
- style: {
4342
- left: badgeRef.current ? badgeRef.current.getBoundingClientRect().left - (_nullishCoalesce(_optionalChain([containerRef, 'access', _81 => _81.current, 'optionalAccess', _82 => _82.getBoundingClientRect, 'call', _83 => _83(), 'access', _84 => _84.left]), () => ( 0))) : 0
4343
- },
4344
- onRemove: (value2) => {
4345
- _optionalChain([onFilterRemove, 'optionalCall', _85 => _85(value2)]);
4346
- if (hiddenCount <= 1) setShowHiddenTags(false);
4347
- }
4348
- }
4349
- ),
4350
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4351
- "span",
4352
- {
4353
- ref: textMeasureRef,
4354
- "aria-hidden": "true",
4355
- className: "fixed -left-[9999px] top-0 pointer-events-none whitespace-nowrap text-ods-text-primary",
4356
- children: currentPlaceholder
4357
- }
4358
- ),
4359
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4360
- "div",
4361
- {
4362
- ref: measureRef,
4363
- "aria-hidden": "true",
4364
- className: "fixed -left-[9999px] top-0 flex gap-2 pointer-events-none",
4365
- children: filterChips.map((chip) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4366
- Tag,
4367
- {
4368
- variant: chipVariantToTagVariant(chip.variant),
4369
- label: chip.label,
4370
- labelClassName: "truncate max-w-[120px]",
4371
- onClose: () => {
4372
- }
4373
- },
4374
- `m-${chip.id}`
4375
- ))
4376
- }
4377
- )
4378
- ] });
4379
- }
4380
-
4381
2903
  // src/components/ui/filter-pill-row.tsx
4382
2904
  _chunkXXI7BNB6cjs.init_button2.call(void 0, );
4383
2905
 
@@ -4473,86 +2995,5 @@ function FilterPillRow({
4473
2995
 
4474
2996
 
4475
2997
 
4476
-
4477
-
4478
-
4479
-
4480
-
4481
-
4482
-
4483
-
4484
-
4485
-
4486
-
4487
-
4488
-
4489
-
4490
-
4491
-
4492
-
4493
-
4494
-
4495
-
4496
-
4497
-
4498
-
4499
-
4500
-
4501
-
4502
-
4503
-
4504
-
4505
-
4506
-
4507
-
4508
-
4509
-
4510
-
4511
-
4512
-
4513
-
4514
-
4515
-
4516
-
4517
-
4518
-
4519
-
4520
-
4521
-
4522
-
4523
-
4524
-
4525
-
4526
-
4527
-
4528
-
4529
-
4530
-
4531
-
4532
-
4533
-
4534
-
4535
-
4536
-
4537
-
4538
-
4539
-
4540
-
4541
-
4542
-
4543
-
4544
-
4545
-
4546
-
4547
-
4548
-
4549
-
4550
-
4551
-
4552
-
4553
-
4554
-
4555
-
4556
-
4557
- exports.HiddenTagsPopup = HiddenTagsPopup; exports.tagVariants = tagVariants; exports.Tag = Tag; exports.Card = Card; exports.CardHeader = CardHeader; exports.CardTitle = CardTitle; exports.CardDescription = CardDescription; exports.CardContent = CardContent; exports.CardFooter = CardFooter; exports.CardHorizontal = CardHorizontal; exports.Tabs = Tabs; exports.TabsList = TabsList; exports.TabsTrigger = TabsTrigger; exports.TabsContent = TabsContent; exports.statusBadgeVariants = statusBadgeVariants; exports.StatusBadge = StatusBadge; exports.SimpleMarkdownRenderer = SimpleMarkdownRenderer; exports.formatDate = formatDate; exports.formatNumber = formatNumber; exports.formatPrice = formatPrice; exports.formatBytes = formatBytes; exports.formatBytesShort = formatBytesShort; exports.formatLargeNumber = formatLargeNumber; exports.formatAbbreviatedNumber = formatAbbreviatedNumber; exports.getFirstLastInitials = getFirstLastInitials; exports.nameInitials = nameInitials; exports.formatDurationMMSS = formatDurationMMSS; exports.formatDurationCompact = formatDurationCompact; exports.formatTimeWithTimezone = formatTimeWithTimezone; 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.formatUnderscoreText = formatUnderscoreText; exports.stripHtml = stripHtml; exports.formatClassification = formatClassification; exports.formatPricingModel = formatPricingModel; exports.formatBioText = formatBioText; exports.SquareAvatar = SquareAvatar; exports.useControllableState = useControllableState; exports.ActionsMenu = ActionsMenu; exports.ActionsMenuDropdown = ActionsMenuDropdown; exports.getProxiedImageUrl = getProxiedImageUrl; exports.urlPathLooksLikeSvg = urlPathLooksLikeSvg; exports.shouldProxyImage = shouldProxyImage; exports.generateImageSizes = generateImageSizes; exports.isCrossOriginUrl = isCrossOriginUrl; exports.decideNewTab = decideNewTab; exports.computeIsNewTab = computeIsNewTab; exports.newTabAnchorAttrs = newTabAnchorAttrs; exports.buildAnchorProps = buildAnchorProps; exports.NEW_TAB_FEATURES = NEW_TAB_FEATURES; exports.isModifierClick = isModifierClick; exports.stripSameOriginToPath = stripSameOriginToPath; exports.resolveHrefForRuntime = resolveHrefForRuntime; exports.resolveExternalNavigation = resolveExternalNavigation; exports.EMPTY_AUTHOR_PLACEHOLDER = EMPTY_AUTHOR_PLACEHOLDER; exports.EntityMetadataValueCell = EntityMetadataValueCell; exports.EntityMetadataAuthorCell = EntityMetadataAuthorCell; exports.EntityAuthorCard = EntityAuthorCard; exports.BlogImagePlaceholder = BlogImagePlaceholder; exports.fetchPriorityProp = fetchPriorityProp; exports.extractYouTubeId = extractYouTubeId; exports.Video = Video; exports.PAGE_HEADING_CLASS = PAGE_HEADING_CLASS; exports.SECTION_HEADING_CLASS = SECTION_HEADING_CLASS; exports.PageHeading = PageHeading; exports.RATIO_GRID_CLASS = RATIO_GRID_CLASS; exports.RATIO_DISPLAY_GRID_CLASS = RATIO_DISPLAY_GRID_CLASS; exports.RatioTabs = RatioTabs; exports.detectAspectRatio = detectAspectRatio; exports.ratioToCategory = ratioToCategory; exports.groupByAspectRatio = groupByAspectRatio; exports.VideoBitesDisplay = VideoBitesDisplay; exports.VideoBiteCard = VideoBiteCard; exports.EntityVideoSection = EntityVideoSection; exports.useEntityCardLink = useEntityCardLink; exports.useEntityCardPlaceholder = useEntityCardPlaceholder; exports.COMPACT_CARD_OUTER = COMPACT_CARD_OUTER; exports.COMPACT_CARD_OUTER_STATIC = COMPACT_CARD_OUTER_STATIC; exports.COMPACT_CARD_SKELETON_OUTER = COMPACT_CARD_SKELETON_OUTER; exports.COMPACT_CARD_IMAGE_SLOT = COMPACT_CARD_IMAGE_SLOT; exports.COMPACT_CARD_SKELETON_IMAGE_SLOT = COMPACT_CARD_SKELETON_IMAGE_SLOT; exports.COMPACT_CARD_ICON_SLOT = COMPACT_CARD_ICON_SLOT; exports.COMPACT_CARD_TEXT_COL = COMPACT_CARD_TEXT_COL; exports.COMPACT_CARD_TITLE_ROW = COMPACT_CARD_TITLE_ROW; exports.COMPACT_CARD_META_ROW_BOX = COMPACT_CARD_META_ROW_BOX; exports.COMPACT_CARD_TITLE = COMPACT_CARD_TITLE; exports.COMPACT_CARD_SUBTITLE = COMPACT_CARD_SUBTITLE; exports.COMPACT_CARD_SUMMARY = COMPACT_CARD_SUMMARY; exports.COMPACT_CARD_META_ROW = COMPACT_CARD_META_ROW; exports.COMPACT_CARD_ROW_FILLER = COMPACT_CARD_ROW_FILLER; exports.safeHref = safeHref; exports.OnboardingGuideCardSkeleton = OnboardingGuideCardSkeleton; exports.OnboardingGuideCard = OnboardingGuideCard; exports.SOURCE_ICON_NAMES = SOURCE_ICON_NAMES; exports.getSourceIconName = getSourceIconName; exports.SOURCE_LABELS_BY_TABLE = SOURCE_LABELS_BY_TABLE; exports.getSourceLabel = getSourceLabel; exports.DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID = DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID; exports.defaultTableIdForDocumentType = defaultTableIdForDocumentType; exports.ICON_REGISTRY = ICON_REGISTRY; exports.normalizeIconKey = normalizeIconKey; exports.getIconComponent = getIconComponent; exports.getDynamicIcon = getDynamicIcon; exports.sourceRowCtxFromRuntime = sourceRowCtxFromRuntime; exports.resolveSourceRowCTA = resolveSourceRowCTA; exports.resolveSourceIcon = resolveSourceIcon; exports.PageActions = PageActions; exports.usePageActionsBottomPadding = usePageActionsBottomPadding; exports.BackButton = BackButton; exports.EntityImage = EntityImage; exports.TitleBlock = TitleBlock; exports.PageLayout = PageLayout; exports.PageShell = PageShell; exports.ArticleDetailLayout = ArticleDetailLayout; exports.DEFAULT_CONTENT_SUFFIXES = DEFAULT_CONTENT_SUFFIXES; exports.makeComposeContentUrl = makeComposeContentUrl; exports.buildDefaultHref = buildDefaultHref; exports.resolveContentHref = resolveContentHref; exports.ErrorState = ErrorState; exports.PageError = PageError; exports.LoadError = LoadError; exports.NotFoundError = NotFoundError; exports.TAG_BADGE_CLASS = TAG_BADGE_CLASS; exports.EntityTagBadges = EntityTagBadges; exports.MUX_STREAM_ORIGIN = MUX_STREAM_ORIGIN; exports.MUX_IMAGE_ORIGIN = MUX_IMAGE_ORIGIN; exports.useVideoOriginPreconnect = useVideoOriginPreconnect; exports.useVideoWarmup = useVideoWarmup; exports.getCaptionsUrl = getCaptionsUrl; exports.SearchInput = SearchInput; exports.FilterPillRow = FilterPillRow;
4558
- //# sourceMappingURL=chunk-PVXCVPJD.cjs.map
2998
+ exports.Card = Card; exports.CardHeader = CardHeader; exports.CardTitle = CardTitle; exports.CardDescription = CardDescription; exports.CardContent = CardContent; exports.CardFooter = CardFooter; exports.CardHorizontal = CardHorizontal; exports.Tabs = Tabs; exports.TabsList = TabsList; exports.TabsTrigger = TabsTrigger; exports.TabsContent = TabsContent; exports.statusBadgeVariants = statusBadgeVariants; exports.StatusBadge = StatusBadge; exports.SimpleMarkdownRenderer = SimpleMarkdownRenderer; exports.SquareAvatar = SquareAvatar; exports.useControllableState = useControllableState; exports.ActionsMenu = ActionsMenu; exports.ActionsMenuDropdown = ActionsMenuDropdown; exports.computeIsNewTab = computeIsNewTab; exports.newTabAnchorAttrs = newTabAnchorAttrs; exports.buildAnchorProps = buildAnchorProps; exports.EMPTY_AUTHOR_PLACEHOLDER = EMPTY_AUTHOR_PLACEHOLDER; exports.EntityMetadataValueCell = EntityMetadataValueCell; exports.EntityMetadataAuthorCell = EntityMetadataAuthorCell; exports.EntityAuthorCard = EntityAuthorCard; exports.BlogImagePlaceholder = BlogImagePlaceholder; exports.extractYouTubeId = extractYouTubeId; exports.Video = Video; exports.RATIO_GRID_CLASS = RATIO_GRID_CLASS; exports.RATIO_DISPLAY_GRID_CLASS = RATIO_DISPLAY_GRID_CLASS; exports.RatioTabs = RatioTabs; exports.detectAspectRatio = detectAspectRatio; exports.ratioToCategory = ratioToCategory; exports.groupByAspectRatio = groupByAspectRatio; exports.VideoBitesDisplay = VideoBitesDisplay; exports.VideoBiteCard = VideoBiteCard; exports.EntityVideoSection = EntityVideoSection; exports.useEntityCardLink = useEntityCardLink; exports.useEntityCardPlaceholder = useEntityCardPlaceholder; exports.OnboardingGuideCardSkeleton = OnboardingGuideCardSkeleton; exports.OnboardingGuideCard = OnboardingGuideCard; exports.PageActions = PageActions; exports.usePageActionsBottomPadding = usePageActionsBottomPadding; exports.BackButton = BackButton; exports.EntityImage = EntityImage; exports.TitleBlock = TitleBlock; exports.PageLayout = PageLayout; exports.PageShell = PageShell; exports.ArticleDetailLayout = ArticleDetailLayout; exports.ErrorState = ErrorState; exports.PageError = PageError; exports.LoadError = LoadError; exports.NotFoundError = NotFoundError; exports.TAG_BADGE_CLASS = TAG_BADGE_CLASS; exports.EntityTagBadges = EntityTagBadges; exports.MUX_STREAM_ORIGIN = MUX_STREAM_ORIGIN; exports.MUX_IMAGE_ORIGIN = MUX_IMAGE_ORIGIN; exports.useVideoOriginPreconnect = useVideoOriginPreconnect; exports.useVideoWarmup = useVideoWarmup; exports.getCaptionsUrl = getCaptionsUrl; exports.FilterPillRow = FilterPillRow;
2999
+ //# sourceMappingURL=chunk-EI4WALN2.cjs.map