@flamingo-stack/openframe-frontend-core 0.0.178 → 0.0.179

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 (53) hide show
  1. package/dist/{chunk-L4T24AN4.cjs → chunk-4TM2SBMX.cjs} +855 -1325
  2. package/dist/chunk-4TM2SBMX.cjs.map +1 -0
  3. package/dist/{chunk-AAX27BCR.js → chunk-ZMQP3UZJ.js} +3690 -4160
  4. package/dist/chunk-ZMQP3UZJ.js.map +1 -0
  5. package/dist/components/features/entity-video-section.d.ts +54 -0
  6. package/dist/components/features/entity-video-section.d.ts.map +1 -0
  7. package/dist/components/features/index.cjs +18 -2
  8. package/dist/components/features/index.cjs.map +1 -1
  9. package/dist/components/features/index.d.ts +4 -2
  10. package/dist/components/features/index.d.ts.map +1 -1
  11. package/dist/components/features/index.js +21 -5
  12. package/dist/components/features/video-bites-display.d.ts +38 -0
  13. package/dist/components/features/video-bites-display.d.ts.map +1 -0
  14. package/dist/components/features/video-ratio-tabs.d.ts +62 -0
  15. package/dist/components/features/video-ratio-tabs.d.ts.map +1 -0
  16. package/dist/components/features/video.d.ts +94 -0
  17. package/dist/components/features/video.d.ts.map +1 -0
  18. package/dist/components/index.cjs +18 -2
  19. package/dist/components/index.cjs.map +1 -1
  20. package/dist/components/index.js +21 -5
  21. package/dist/components/media-carousel.d.ts.map +1 -1
  22. package/dist/components/navigation/index.cjs +2 -2
  23. package/dist/components/navigation/index.js +1 -1
  24. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  25. package/dist/components/ui/index.cjs +2 -2
  26. package/dist/components/ui/index.js +1 -1
  27. package/dist/index.cjs +18 -2
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.js +21 -5
  30. package/package.json +2 -2
  31. package/src/components/features/entity-video-section.tsx +175 -0
  32. package/src/components/features/index.ts +9 -2
  33. package/src/components/features/video-bites-display.tsx +216 -0
  34. package/src/components/features/video-ratio-tabs.tsx +174 -0
  35. package/src/components/features/video.tsx +474 -0
  36. package/src/components/media-carousel.tsx +43 -236
  37. package/src/components/shared/product-release/release-detail-page.tsx +26 -19
  38. package/dist/chunk-AAX27BCR.js.map +0 -1
  39. package/dist/chunk-L4T24AN4.cjs.map +0 -1
  40. package/dist/components/features/video-player.d.ts +0 -44
  41. package/dist/components/features/video-player.d.ts.map +0 -1
  42. package/dist/components/features/youtube-embed.d.ts +0 -31
  43. package/dist/components/features/youtube-embed.d.ts.map +0 -1
  44. package/dist/utils/lite-youtube-embed-stub.d.ts +0 -8
  45. package/dist/utils/lite-youtube-embed-stub.d.ts.map +0 -1
  46. package/dist/utils/lite-youtube-embed.d.ts +0 -9
  47. package/dist/utils/lite-youtube-embed.d.ts.map +0 -1
  48. package/src/components/features/.video-player.md +0 -44
  49. package/src/components/features/.youtube-embed.md +0 -40
  50. package/src/components/features/video-player.tsx +0 -893
  51. package/src/components/features/youtube-embed.tsx +0 -158
  52. package/src/utils/lite-youtube-embed-stub.tsx +0 -21
  53. package/src/utils/lite-youtube-embed.tsx +0 -46
@@ -118,13 +118,6 @@ var _chunkOFAYLG6Dcjs = require('./chunk-OFAYLG6D.cjs');
118
118
 
119
119
 
120
120
 
121
-
122
-
123
-
124
-
125
-
126
-
127
-
128
121
 
129
122
 
130
123
 
@@ -150,7 +143,7 @@ var _chunkVRHGVLSLcjs = require('./chunk-VRHGVLSL.cjs');
150
143
 
151
144
  // src/components/pagination.tsx
152
145
  var _lucidereact = require('lucide-react');
153
- var _react = require('react'); var React33 = _interopRequireWildcard(_react); var React2 = _interopRequireWildcard(_react); var React = _interopRequireWildcard(_react); var React3 = _interopRequireWildcard(_react); var React4 = _interopRequireWildcard(_react); var React5 = _interopRequireWildcard(_react); var React7 = _interopRequireWildcard(_react); var React6 = _interopRequireWildcard(_react); var React11 = _interopRequireWildcard(_react); var React10 = _interopRequireWildcard(_react); var React12 = _interopRequireWildcard(_react); var React13 = _interopRequireWildcard(_react); var React14 = _interopRequireWildcard(_react); var React15 = _interopRequireWildcard(_react); var React16 = _interopRequireWildcard(_react); var React17 = _interopRequireWildcard(_react); var React19 = _interopRequireWildcard(_react); var React24 = _interopRequireWildcard(_react); var React27 = _interopRequireWildcard(_react); var React28 = _interopRequireWildcard(_react); var React31 = _interopRequireWildcard(_react); var React35 = _interopRequireWildcard(_react); var React48 = _interopRequireWildcard(_react); var React49 = _interopRequireWildcard(_react); var React51 = _interopRequireWildcard(_react); var React52 = _interopRequireWildcard(_react); var React53 = _interopRequireWildcard(_react); var React54 = _interopRequireWildcard(_react); var React55 = _interopRequireWildcard(_react); var React56 = _interopRequireWildcard(_react); var React57 = _interopRequireWildcard(_react); var React58 = _interopRequireWildcard(_react); var React59 = _interopRequireWildcard(_react); var React60 = _interopRequireWildcard(_react); var React61 = _interopRequireWildcard(_react); var React62 = _interopRequireWildcard(_react); var React63 = _interopRequireWildcard(_react); var React64 = _interopRequireWildcard(_react); var React66 = _interopRequireWildcard(_react); var React67 = _interopRequireWildcard(_react); var React71 = _interopRequireWildcard(_react); var React70 = _interopRequireWildcard(_react); var React74 = _interopRequireWildcard(_react); var React75 = _interopRequireWildcard(_react); var React78 = _interopRequireWildcard(_react); var React77 = _interopRequireWildcard(_react); var React80 = _interopRequireWildcard(_react); var React82 = _interopRequireWildcard(_react); var React83 = _interopRequireWildcard(_react); var React85 = _interopRequireWildcard(_react); var React86 = _interopRequireWildcard(_react); var React87 = _interopRequireWildcard(_react); var React89 = _interopRequireWildcard(_react); var React88 = _interopRequireWildcard(_react); var React94 = _interopRequireWildcard(_react); var React97 = _interopRequireWildcard(_react); var React101 = _interopRequireWildcard(_react); var React100 = _interopRequireWildcard(_react); var React98 = _interopRequireWildcard(_react); var React99 = _interopRequireWildcard(_react);
146
+ var _react = require('react'); var React33 = _interopRequireWildcard(_react); var React2 = _interopRequireWildcard(_react); var React = _interopRequireWildcard(_react); var React3 = _interopRequireWildcard(_react); var React4 = _interopRequireWildcard(_react); var React5 = _interopRequireWildcard(_react); var React7 = _interopRequireWildcard(_react); var React6 = _interopRequireWildcard(_react); var React11 = _interopRequireWildcard(_react); var React10 = _interopRequireWildcard(_react); var React12 = _interopRequireWildcard(_react); var React13 = _interopRequireWildcard(_react); var React14 = _interopRequireWildcard(_react); var React15 = _interopRequireWildcard(_react); var React16 = _interopRequireWildcard(_react); var React17 = _interopRequireWildcard(_react); var React19 = _interopRequireWildcard(_react); var React24 = _interopRequireWildcard(_react); var React27 = _interopRequireWildcard(_react); var React28 = _interopRequireWildcard(_react); var React31 = _interopRequireWildcard(_react); var React35 = _interopRequireWildcard(_react); var React47 = _interopRequireWildcard(_react); var React48 = _interopRequireWildcard(_react); var React50 = _interopRequireWildcard(_react); var React51 = _interopRequireWildcard(_react); var React52 = _interopRequireWildcard(_react); var React53 = _interopRequireWildcard(_react); var React54 = _interopRequireWildcard(_react); var React55 = _interopRequireWildcard(_react); var React56 = _interopRequireWildcard(_react); var React57 = _interopRequireWildcard(_react); var React58 = _interopRequireWildcard(_react); var React59 = _interopRequireWildcard(_react); var React60 = _interopRequireWildcard(_react); var React61 = _interopRequireWildcard(_react); var React62 = _interopRequireWildcard(_react); var React63 = _interopRequireWildcard(_react); var React65 = _interopRequireWildcard(_react); var React66 = _interopRequireWildcard(_react); var React70 = _interopRequireWildcard(_react); var React69 = _interopRequireWildcard(_react); var React73 = _interopRequireWildcard(_react); var React74 = _interopRequireWildcard(_react); var React77 = _interopRequireWildcard(_react); var React76 = _interopRequireWildcard(_react); var React79 = _interopRequireWildcard(_react); var React81 = _interopRequireWildcard(_react); var React82 = _interopRequireWildcard(_react); var React84 = _interopRequireWildcard(_react); var React85 = _interopRequireWildcard(_react); var React86 = _interopRequireWildcard(_react); var React88 = _interopRequireWildcard(_react); var React87 = _interopRequireWildcard(_react); var React93 = _interopRequireWildcard(_react); var React97 = _interopRequireWildcard(_react); var React101 = _interopRequireWildcard(_react); var React100 = _interopRequireWildcard(_react); var React98 = _interopRequireWildcard(_react); var React99 = _interopRequireWildcard(_react);
154
147
  var _jsxruntime = require('react/jsx-runtime');
155
148
  var Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationEllipsis, PaginationPrevious, PaginationNext;
156
149
  var init_pagination = _chunkVRHGVLSLcjs.__esm.call(void 0, {
@@ -13050,59 +13043,231 @@ var ImageCropper = ({
13050
13043
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
13051
13044
 
13052
13045
 
13053
- var ChevronLeftIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: "24", height: "24", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "polyline", { points: "15,18 9,12 15,6" }) });
13054
- var ChevronRightIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: "24", height: "24", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "polyline", { points: "9,18 15,12 9,6" }) });
13055
- var PlayIcon2 = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: "24", height: "24", fill: "white", viewBox: "0 0 24 24", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { d: "M8 5v14l11-7z" }) });
13056
- function getYouTubeVideoId(url) {
13057
- const match = url.match(/(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&\n?#]+)/);
13058
- return match ? match[1] : null;
13046
+ // src/components/features/video.tsx
13047
+
13048
+ var _muxplayerreact = require('@mux/mux-player-react'); var _muxplayerreact2 = _interopRequireDefault(_muxplayerreact);
13049
+
13050
+ var YT_HOSTS = /* @__PURE__ */ new Set([
13051
+ "youtube.com",
13052
+ "www.youtube.com",
13053
+ "m.youtube.com",
13054
+ "youtu.be",
13055
+ "youtube-nocookie.com",
13056
+ "www.youtube-nocookie.com"
13057
+ ]);
13058
+ function isYouTubeUrl(url) {
13059
+ try {
13060
+ return YT_HOSTS.has(new URL(url, "http://placeholder.local").hostname.toLowerCase());
13061
+ } catch (e22) {
13062
+ return false;
13063
+ }
13059
13064
  }
13060
- var CarouselYouTubeEmbed = ({ videoId, title }) => {
13061
- const [mounted, setMounted] = _react.useState.call(void 0, false);
13062
- const [isActivated, setIsActivated] = _react.useState.call(void 0, false);
13063
- const [isLoaded, setIsLoaded] = _react.useState.call(void 0, false);
13065
+ var YT_PATH_RE = /^\/(?:embed|v|shorts)\/([^/]+)\/?$/;
13066
+ var BARE_YT_ID_RE = /^[A-Za-z0-9_-]{11}$/;
13067
+ function extractYouTubeId(url) {
13068
+ if (!url) return null;
13069
+ if (BARE_YT_ID_RE.test(url)) return url;
13070
+ let u;
13071
+ try {
13072
+ u = new URL(url, "http://placeholder.local");
13073
+ } catch (e23) {
13074
+ return null;
13075
+ }
13076
+ if (!YT_HOSTS.has(u.hostname.toLowerCase())) return null;
13077
+ if (u.hostname.toLowerCase().endsWith("youtu.be")) {
13078
+ return _nullishCoalesce(u.pathname.split("/").filter(Boolean)[0], () => ( null));
13079
+ }
13080
+ const v = u.searchParams.get("v");
13081
+ if (v) return v;
13082
+ const m = u.pathname.match(YT_PATH_RE);
13083
+ return m ? m[1] : null;
13084
+ }
13085
+ function Video2(props) {
13086
+ const url = props.url;
13087
+ if (!url) return null;
13088
+ const effectiveKind = resolveKind(props, url);
13089
+ const layout = _nullishCoalesce(props.layout, () => ( "native"));
13090
+ const inner = effectiveKind === "youtube" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13091
+ YouTubeFacade,
13092
+ {
13093
+ url,
13094
+ title: props.title,
13095
+ priority: props.priority,
13096
+ className: props.className,
13097
+ minimalControls: props.minimalControls
13098
+ }
13099
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13100
+ FilePlayer,
13101
+ {
13102
+ url,
13103
+ poster: props.poster,
13104
+ muted: props.muted,
13105
+ srtContent: "srtContent" in props ? props.srtContent : null,
13106
+ captionsUrl: "captionsUrl" in props ? props.captionsUrl : null,
13107
+ className: props.className
13108
+ }
13109
+ );
13110
+ return wrapWithLayout(inner, layout);
13111
+ }
13112
+ function resolveKind(props, url) {
13113
+ if ("kind" in props) {
13114
+ if (props.kind === "youtube") return "youtube";
13115
+ if (props.kind === "file") return "file";
13116
+ }
13117
+ if (BARE_YT_ID_RE.test(url)) return "youtube";
13118
+ return isYouTubeUrl(url) ? "youtube" : "file";
13119
+ }
13120
+ function wrapWithLayout(inner, layout) {
13121
+ switch (layout) {
13122
+ case "centered":
13123
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-center w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full max-w-3xl aspect-video", children: inner }) });
13124
+ case "fill":
13125
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 w-full h-full", children: inner });
13126
+ case "native":
13127
+ default:
13128
+ return inner;
13129
+ }
13130
+ }
13131
+ function FilePlayer({
13132
+ url,
13133
+ poster,
13134
+ muted,
13135
+ srtContent,
13136
+ captionsUrl,
13137
+ className
13138
+ }) {
13139
+ if (process.env.NODE_ENV !== "production" && srtContent && !captionsUrl) {
13140
+ console.warn(
13141
+ "[Video] srtContent supplied without captionsUrl \u2014 captions will not render. Pass captionsUrl (the VTT URL) instead; raw SRT text overlays are no longer supported."
13142
+ );
13143
+ }
13144
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13145
+ _muxplayerreact2.default,
13146
+ {
13147
+ src: url,
13148
+ poster: poster || void 0,
13149
+ streamType: "on-demand",
13150
+ playsInline: true,
13151
+ muted,
13152
+ preferCmcd: "header",
13153
+ accentColor: "var(--ods-accent)",
13154
+ className,
13155
+ style: { width: "100%", height: "100%" },
13156
+ children: captionsUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13157
+ "track",
13158
+ {
13159
+ kind: "captions",
13160
+ src: captionsUrl,
13161
+ srcLang: "en",
13162
+ label: "English",
13163
+ default: true
13164
+ }
13165
+ ) : null
13166
+ }
13167
+ );
13168
+ }
13169
+ function YouTubeFacade({
13170
+ url,
13171
+ title = "YouTube Video",
13172
+ priority,
13173
+ className,
13174
+ minimalControls
13175
+ }) {
13176
+ const videoId = extractYouTubeId(url);
13177
+ if (!videoId) return null;
13178
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, YouTubeFacadeInner, { videoId, title, priority, className, minimalControls });
13179
+ }
13180
+ function YouTubeFacadeInner({
13181
+ videoId,
13182
+ title,
13183
+ priority,
13184
+ className,
13185
+ minimalControls
13186
+ }) {
13187
+ const [activated, setActivated] = _react.useState.call(void 0, false);
13188
+ const wrapperRef = _react.useRef.call(void 0, null);
13189
+ const embedParams = new URLSearchParams({
13190
+ autoplay: "1",
13191
+ rel: "0",
13192
+ modestbranding: "1",
13193
+ playsinline: "1"
13194
+ });
13195
+ if (minimalControls) {
13196
+ embedParams.set("controls", "0");
13197
+ embedParams.set("showinfo", "0");
13198
+ embedParams.set("fs", "0");
13199
+ embedParams.set("iv_load_policy", "3");
13200
+ embedParams.set("cc_load_policy", "0");
13201
+ embedParams.set("disablekb", "1");
13202
+ }
13203
+ const embedUrl = `https://www.youtube-nocookie.com/embed/${videoId}?${embedParams.toString()}`;
13204
+ const posterJpg = `https://i.ytimg.com/vi/${videoId}/mqdefault.jpg`;
13205
+ const posterWebp = `https://i.ytimg.com/vi_webp/${videoId}/mqdefault.webp`;
13064
13206
  _react.useEffect.call(void 0, () => {
13065
- setMounted(true);
13066
- }, []);
13067
- if (!mounted) {
13068
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-black rounded-lg overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-white text-sm", children: "Loading video..." }) }) });
13207
+ if (!activated) return;
13208
+ function handleOutsideClick(event) {
13209
+ const target = event.target;
13210
+ if (!target) return;
13211
+ if (_optionalChain([wrapperRef, 'access', _389 => _389.current, 'optionalAccess', _390 => _390.contains, 'call', _391 => _391(target)])) return;
13212
+ setActivated(false);
13213
+ }
13214
+ document.addEventListener("pointerdown", handleOutsideClick);
13215
+ return () => document.removeEventListener("pointerdown", handleOutsideClick);
13216
+ }, [activated]);
13217
+ _react.useEffect.call(void 0, () => {
13218
+ if (!activated) return;
13219
+ function handleEscape(event) {
13220
+ if (event.key === "Escape") setActivated(false);
13221
+ }
13222
+ document.addEventListener("keydown", handleEscape);
13223
+ return () => document.removeEventListener("keydown", handleEscape);
13224
+ }, [activated]);
13225
+ const wrapperClass = `relative w-full ${_nullishCoalesce(className, () => ( ""))}`;
13226
+ const wrapperStyle = { paddingBottom: "56.25%" };
13227
+ if (activated) {
13228
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: wrapperRef, className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13229
+ "iframe",
13230
+ {
13231
+ src: embedUrl,
13232
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
13233
+ allowFullScreen: true,
13234
+ title,
13235
+ className: "absolute inset-0 w-full h-full border-0 rounded-lg"
13236
+ }
13237
+ ) });
13069
13238
  }
13070
- const thumbnailUrl = `https://i.ytimg.com/vi/${videoId}/maxresdefault.jpg`;
13071
- const embedUrl = `https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1&playsinline=1&rel=0&modestbranding=1`;
13072
- const handleActivate = () => {
13073
- setIsActivated(true);
13074
- setTimeout(() => setIsLoaded(true), 100);
13075
- };
13076
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-black", children: !isActivated ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
13239
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: wrapperRef, className: wrapperClass, style: wrapperStyle, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
13077
13240
  "button",
13078
13241
  {
13079
- onClick: handleActivate,
13080
- className: "absolute inset-0 cursor-pointer group",
13081
- "aria-label": `Play video: ${title}`,
13242
+ type: "button",
13243
+ "aria-label": `Play: ${title}`,
13244
+ onClick: () => setActivated(true),
13245
+ className: "group absolute inset-0 p-0 m-0 border border-ods-border rounded-lg overflow-hidden bg-ods-card cursor-pointer",
13082
13246
  children: [
13083
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13084
- "img",
13085
- {
13086
- src: thumbnailUrl,
13087
- alt: title,
13088
- className: "w-full h-full object-cover transition-opacity group-hover:opacity-90",
13089
- loading: "lazy"
13090
- }
13091
- ),
13092
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 flex items-center justify-center bg-black/20 group-hover:bg-black/30 transition-colors", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-red-600 rounded-full p-4 group-hover:scale-110 transition-transform", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PlayIcon2, {}) }) })
13247
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "picture", { children: [
13248
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "source", { type: "image/webp", srcSet: posterWebp }),
13249
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13250
+ "img",
13251
+ {
13252
+ src: posterJpg,
13253
+ alt: title,
13254
+ loading: "lazy",
13255
+ fetchPriority: priority ? "high" : "low",
13256
+ decoding: priority ? "sync" : "async",
13257
+ className: "absolute inset-0 w-full h-full object-cover"
13258
+ }
13259
+ )
13260
+ ] }),
13261
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 flex items-center justify-center bg-ods-bg-inverse bg-opacity-20 transition-opacity duration-200 group-hover:bg-opacity-30", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex items-center justify-center w-16 h-16 rounded-full bg-ods-accent text-ods-text-on-accent shadow-lg transition-transform duration-200 group-hover:scale-110", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: 24, height: 24, fill: "currentColor", viewBox: "0 0 24 24", className: "ml-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "polygon", { points: "5,3 19,12 5,21" }) }) }) })
13093
13262
  ]
13094
13263
  }
13095
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0", children: isLoaded && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13096
- "iframe",
13097
- {
13098
- src: embedUrl,
13099
- title,
13100
- className: "w-full h-full",
13101
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
13102
- allowFullScreen: true
13103
- }
13104
- ) }) });
13105
- };
13264
+ ) });
13265
+ }
13266
+
13267
+ // src/components/media-carousel.tsx
13268
+
13269
+ var ChevronLeftIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: "24", height: "24", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "polyline", { points: "15,18 9,12 15,6" }) });
13270
+ var ChevronRightIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: "24", height: "24", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "polyline", { points: "9,18 15,12 9,6" }) });
13106
13271
  var MediaCarousel = _react.memo.call(void 0, function MediaCarousel2({
13107
13272
  media,
13108
13273
  className,
@@ -13114,9 +13279,13 @@ var MediaCarousel = _react.memo.call(void 0, function MediaCarousel2({
13114
13279
  const [currentIndex, setCurrentIndex] = _react.useState.call(void 0, 0);
13115
13280
  const [touchStart, setTouchStart] = _react.useState.call(void 0, null);
13116
13281
  const [touchEnd, setTouchEnd] = _react.useState.call(void 0, null);
13117
- const [playingVideos, setPlayingVideos] = _react.useState.call(void 0, /* @__PURE__ */ new Set());
13118
13282
  const carouselRef = _react.useRef.call(void 0, null);
13119
13283
  const thumbnailsRef = _react.useRef.call(void 0, null);
13284
+ _react.useEffect.call(void 0, () => {
13285
+ if (currentIndex >= media.length && media.length > 0) {
13286
+ setCurrentIndex(media.length - 1);
13287
+ }
13288
+ }, [media.length, currentIndex]);
13120
13289
  if (!media || media.length === 0) {
13121
13290
  return null;
13122
13291
  }
@@ -13124,71 +13293,14 @@ var MediaCarousel = _react.memo.call(void 0, function MediaCarousel2({
13124
13293
  if (!currentItem) {
13125
13294
  return null;
13126
13295
  }
13127
- const handleVideoClick = _react.useCallback.call(void 0, (index) => {
13128
- const item = media[index];
13129
- if (item.type !== "video") return;
13130
- const videoElements = document.querySelectorAll(`video[data-video-index="${index}"]`);
13131
- const video = videoElements[0];
13132
- if (!video) {
13133
- console.log("\u274C Video element not found for index:", index);
13134
- return;
13135
- }
13136
- if (video.paused) {
13137
- const playPromise = video.play();
13138
- if (playPromise !== void 0) {
13139
- playPromise.then(() => {
13140
- const playButton = _optionalChain([video, 'access', _389 => _389.parentElement, 'optionalAccess', _390 => _390.querySelector, 'call', _391 => _391(".video-play-button")]);
13141
- if (playButton) {
13142
- playButton.style.display = "none";
13143
- }
13144
- }).catch((error) => {
13145
- if (error.name === "NotSupportedError" || error.name === "MediaElementError") {
13146
- const fallbackDiv = document.createElement("div");
13147
- fallbackDiv.className = "absolute inset-0 flex items-center justify-center bg-ods-card text-center p-4";
13148
- fallbackDiv.innerHTML = `
13149
- <div>
13150
- <p class="text-ods-text-primary text-sm mb-2">Video format not supported</p>
13151
- <a href="${item.src}" target="_blank" rel="noopener noreferrer"
13152
- class="text-ods-accent hover:text-[#FFD700] text-sm">
13153
- Open Video Directly
13154
- </a>
13155
- </div>
13156
- `;
13157
- _optionalChain([video, 'access', _392 => _392.parentElement, 'optionalAccess', _393 => _393.appendChild, 'call', _394 => _394(fallbackDiv)]);
13158
- }
13159
- });
13160
- }
13161
- } else {
13162
- video.pause();
13163
- const playButton = _optionalChain([video, 'access', _395 => _395.parentElement, 'optionalAccess', _396 => _396.querySelector, 'call', _397 => _397(".video-play-button")]);
13164
- if (playButton) {
13165
- playButton.style.display = "flex";
13166
- }
13167
- }
13168
- }, [media]);
13169
13296
  const nextSlide = _react.useCallback.call(void 0, () => {
13170
- const currentVideo = document.querySelector(`[data-video-index="${currentIndex}"]`);
13171
- if (currentVideo && !currentVideo.paused) {
13172
- currentVideo.pause();
13173
- }
13174
- setPlayingVideos(/* @__PURE__ */ new Set());
13175
13297
  setCurrentIndex((prev) => (prev + 1) % media.length);
13176
- }, [currentIndex, media.length]);
13298
+ }, [media.length]);
13177
13299
  const prevSlide = _react.useCallback.call(void 0, () => {
13178
- const currentVideo = document.querySelector(`[data-video-index="${currentIndex}"]`);
13179
- if (currentVideo && !currentVideo.paused) {
13180
- currentVideo.pause();
13181
- }
13182
- setPlayingVideos(/* @__PURE__ */ new Set());
13183
13300
  setCurrentIndex((prev) => (prev - 1 + media.length) % media.length);
13184
- }, [currentIndex, media.length]);
13301
+ }, [media.length]);
13185
13302
  const selectSlide = _react.useCallback.call(void 0, (index) => {
13186
13303
  if (index === currentIndex) return;
13187
- const currentVideo = document.querySelector(`[data-video-index="${currentIndex}"]`);
13188
- if (currentVideo && !currentVideo.paused) {
13189
- currentVideo.pause();
13190
- }
13191
- setPlayingVideos(/* @__PURE__ */ new Set());
13192
13304
  setCurrentIndex(index);
13193
13305
  }, [currentIndex]);
13194
13306
  const handleKeyDown = _react.useCallback.call(void 0, (e) => {
@@ -13221,82 +13333,26 @@ var MediaCarousel = _react.memo.call(void 0, function MediaCarousel2({
13221
13333
  prevSlide();
13222
13334
  }
13223
13335
  };
13224
- const renderYouTubeEmbed = (item, index) => {
13225
- const videoId = getYouTubeVideoId(item.src);
13226
- if (!videoId) {
13227
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 flex items-center justify-center bg-ods-card text-center p-4", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
13228
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-primary text-sm mb-2", children: "Invalid YouTube URL" }),
13229
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "a", { href: item.src, target: "_blank", rel: "noopener noreferrer", className: "text-ods-accent text-sm", children: "Open Link Directly" })
13230
- ] }) });
13336
+ const renderYouTubeEmbed = (item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13337
+ Video2,
13338
+ {
13339
+ kind: "youtube",
13340
+ url: item.src,
13341
+ title: item.alt || `Video ${index + 1}`,
13342
+ layout: "fill",
13343
+ priority: index === currentIndex
13231
13344
  }
13232
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CarouselYouTubeEmbed, { videoId, title: item.alt || `Video ${index + 1}` });
13233
- };
13234
- const renderVideo = (item, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute inset-0 bg-black", children: [
13235
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
13236
- "video",
13237
- {
13238
- className: `w-full h-full object-${objectFit}`,
13239
- poster: item.poster,
13240
- preload: "metadata",
13241
- playsInline: true,
13242
- controls: false,
13243
- muted: true,
13244
- "data-video-index": index,
13245
- onClick: () => handleVideoClick(index),
13246
- onPlay: () => {
13247
- const playButton = _optionalChain([document, 'access', _398 => _398.querySelector, 'call', _399 => _399(`[data-video-index="${index}"]`), 'optionalAccess', _400 => _400.parentElement, 'optionalAccess', _401 => _401.querySelector, 'call', _402 => _402(".video-play-button")]);
13248
- if (playButton) {
13249
- playButton.style.display = "none";
13250
- }
13251
- },
13252
- onPause: () => {
13253
- const playButton = _optionalChain([document, 'access', _403 => _403.querySelector, 'call', _404 => _404(`[data-video-index="${index}"]`), 'optionalAccess', _405 => _405.parentElement, 'optionalAccess', _406 => _406.querySelector, 'call', _407 => _407(".video-play-button")]);
13254
- if (playButton) {
13255
- playButton.style.display = "flex";
13256
- }
13257
- },
13258
- onLoadedMetadata: (e) => {
13259
- const video = e.target;
13260
- video.currentTime = 1;
13261
- },
13262
- onError: (e) => {
13263
- const target = e.target;
13264
- if (target.crossOrigin) {
13265
- target.crossOrigin = "";
13266
- target.load();
13267
- } else {
13268
- target.style.display = "none";
13269
- const fallbackDiv = document.createElement("div");
13270
- fallbackDiv.className = "absolute inset-0 flex items-center justify-center bg-ods-card text-center p-4";
13271
- fallbackDiv.innerHTML = `
13272
- <div>
13273
- <p class="text-ods-text-primary text-sm mb-2">Video could not be loaded</p>
13274
- <a href="${item.src}" target="_blank" rel="noopener noreferrer"
13275
- class="text-ods-accent hover:text-[#FFD700] text-sm">
13276
- Open Video Directly
13277
- </a>
13278
- </div>
13279
- `;
13280
- _optionalChain([target, 'access', _408 => _408.parentElement, 'optionalAccess', _409 => _409.appendChild, 'call', _410 => _410(fallbackDiv)]);
13281
- }
13282
- },
13283
- children: [
13284
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "source", { src: item.src, type: "video/mp4" }),
13285
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "source", { src: item.src, type: "video/webm" }),
13286
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "source", { src: item.src, type: "video/ogg" }),
13287
- "Your browser does not support the video tag."
13288
- ]
13289
- }
13290
- ),
13291
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13292
- "div",
13293
- {
13294
- className: "video-play-button absolute inset-0 flex items-center justify-center bg-black bg-opacity-20 cursor-pointer transition-opacity hover:bg-opacity-30",
13295
- onClick: () => handleVideoClick(index),
13296
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-16 h-16 bg-black bg-opacity-60 rounded-full flex items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PlayIcon2, {}) })
13297
- }
13298
- )
13299
- ] });
13345
+ );
13346
+ const renderVideo = (item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13347
+ Video2,
13348
+ {
13349
+ url: item.src,
13350
+ poster: item.poster,
13351
+ muted: true,
13352
+ layout: "fill",
13353
+ priority: index === currentIndex
13354
+ }
13355
+ );
13300
13356
  const renderImage = (item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-black", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
13301
13357
  "img",
13302
13358
  {
@@ -13305,14 +13361,12 @@ var MediaCarousel = _react.memo.call(void 0, function MediaCarousel2({
13305
13361
  className: `w-full h-full object-${objectFit}`,
13306
13362
  loading: "lazy",
13307
13363
  onError: (e) => {
13308
- console.log("\u274C Image failed to load:", item.src);
13309
13364
  const target = e.target;
13310
13365
  target.style.display = "none";
13311
13366
  }
13312
13367
  }
13313
13368
  ) });
13314
13369
  const renderMainMedia = (item, index) => {
13315
- console.log("\u{1F3AC} Rendering media item:", { type: item.type, src: item.src.substring(0, 100) + "..." });
13316
13370
  switch (item.type) {
13317
13371
  case "youtube":
13318
13372
  return renderYouTubeEmbed(item, index);
@@ -13327,7 +13381,7 @@ var MediaCarousel = _react.memo.call(void 0, function MediaCarousel2({
13327
13381
  const isActive = index === currentIndex;
13328
13382
  let thumbnailSrc = item.src;
13329
13383
  if (item.type === "youtube") {
13330
- const videoId = getYouTubeVideoId(item.src);
13384
+ const videoId = extractYouTubeId(item.src);
13331
13385
  thumbnailSrc = videoId ? `https://img.youtube.com/vi/${videoId}/mqdefault.jpg` : item.src;
13332
13386
  } else if (item.type === "video" && item.poster) {
13333
13387
  thumbnailSrc = item.poster;
@@ -13805,8 +13859,8 @@ function PricingDisplay({
13805
13859
  }
13806
13860
  if (pricingArray.length === 1) {
13807
13861
  const item = pricingArray[0];
13808
- const price = _optionalChain([item, 'access', _411 => _411.ranges, 'optionalAccess', _412 => _412[0], 'optionalAccess', _413 => _413.min]) || 0;
13809
- const unit = _optionalChain([item, 'access', _414 => _414.ranges, 'optionalAccess', _415 => _415[0], 'optionalAccess', _416 => _416.unit]);
13862
+ const price = _optionalChain([item, 'access', _392 => _392.ranges, 'optionalAccess', _393 => _393[0], 'optionalAccess', _394 => _394.min]) || 0;
13863
+ const unit = _optionalChain([item, 'access', _395 => _395.ranges, 'optionalAccess', _396 => _396[0], 'optionalAccess', _397 => _397.unit]);
13810
13864
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: `${styleConfig.fontFamily} ${className}`, children: [
13811
13865
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: formatPriceValue(price, styleConfig.showTildePrefix) }),
13812
13866
  unit && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: [
@@ -13815,11 +13869,11 @@ function PricingDisplay({
13815
13869
  ] })
13816
13870
  ] });
13817
13871
  }
13818
- const priceValues = pricingArray.map((item) => formatPriceValue(_optionalChain([item, 'access', _417 => _417.ranges, 'optionalAccess', _418 => _418[0], 'optionalAccess', _419 => _419.min]) || 0, styleConfig.showTildePrefix));
13819
- const itemWithUnit = pricingArray.find((item) => _optionalChain([item, 'access', _420 => _420.ranges, 'optionalAccess', _421 => _421[0], 'optionalAccess', _422 => _422.unit]));
13872
+ const priceValues = pricingArray.map((item) => formatPriceValue(_optionalChain([item, 'access', _398 => _398.ranges, 'optionalAccess', _399 => _399[0], 'optionalAccess', _400 => _400.min]) || 0, styleConfig.showTildePrefix));
13873
+ const itemWithUnit = pricingArray.find((item) => _optionalChain([item, 'access', _401 => _401.ranges, 'optionalAccess', _402 => _402[0], 'optionalAccess', _403 => _403.unit]));
13820
13874
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: `${styleConfig.fontFamily} ${className}`, children: [
13821
13875
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: priceValues.join(" | ") }),
13822
- itemWithUnit && _optionalChain([itemWithUnit, 'access', _423 => _423.ranges, 'optionalAccess', _424 => _424[0], 'optionalAccess', _425 => _425.unit]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: [
13876
+ itemWithUnit && _optionalChain([itemWithUnit, 'access', _404 => _404.ranges, 'optionalAccess', _405 => _405[0], 'optionalAccess', _406 => _406.unit]) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: [
13823
13877
  "/",
13824
13878
  itemWithUnit.ranges[0].unit
13825
13879
  ] })
@@ -14017,7 +14071,7 @@ function VendorTag({
14017
14071
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "\u2605" }) })
14018
14072
  };
14019
14073
  case "classification":
14020
- const classificationType = _optionalChain([text, 'optionalAccess', _426 => _426.toLowerCase, 'call', _427 => _427()]);
14074
+ const classificationType = _optionalChain([text, 'optionalAccess', _407 => _407.toLowerCase, 'call', _408 => _408()]);
14021
14075
  if (classificationType === "open_source") {
14022
14076
  return {
14023
14077
  text: "Open Source",
@@ -14071,7 +14125,7 @@ function SelectionSourceBadge({ source, hidden = false }) {
14071
14125
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
14072
14126
  VendorTag,
14073
14127
  {
14074
- type: _optionalChain([source, 'optionalAccess', _428 => _428.toLowerCase, 'call', _429 => _429()]),
14128
+ type: _optionalChain([source, 'optionalAccess', _409 => _409.toLowerCase, 'call', _410 => _410()]),
14075
14129
  size: "sm",
14076
14130
  hidden
14077
14131
  },
@@ -16191,12 +16245,12 @@ function OnboardingWalkthrough({
16191
16245
  }
16192
16246
  }, [state.completedSteps, markComplete]);
16193
16247
  const handleStepSkip = (step) => {
16194
- _optionalChain([step, 'access', _430 => _430.onSkip, 'optionalCall', _431 => _431()]);
16248
+ _optionalChain([step, 'access', _411 => _411.onSkip, 'optionalCall', _412 => _412()]);
16195
16249
  markSkipped(step.id);
16196
16250
  };
16197
16251
  const handleDismiss = () => {
16198
16252
  dismissOnboarding();
16199
- _optionalChain([onDismiss, 'optionalCall', _432 => _432()]);
16253
+ _optionalChain([onDismiss, 'optionalCall', _413 => _413()]);
16200
16254
  };
16201
16255
  if (state.dismissed) {
16202
16256
  return null;
@@ -16615,810 +16669,6 @@ function ImageGalleryModal({
16615
16669
  // src/components/shared/product-release/release-detail-page.tsx
16616
16670
 
16617
16671
 
16618
- // src/components/features/youtube-embed.tsx
16619
-
16620
-
16621
- var YouTubeEmbed = ({
16622
- videoId,
16623
- title = "YouTube Video",
16624
- className = "",
16625
- showTitle = true,
16626
- showMeta = true,
16627
- minimalControls = false,
16628
- aboveTheFold = false
16629
- }) => {
16630
- const [activated, setActivated] = _react.useState.call(void 0, false);
16631
- const iframeSlotRef = _react.useRef.call(void 0, null);
16632
- const embedParams = new URLSearchParams({ autoplay: "1", rel: "0", modestbranding: "1", playsinline: "1" });
16633
- if (minimalControls) {
16634
- embedParams.set("controls", "0");
16635
- embedParams.set("showinfo", "0");
16636
- embedParams.set("fs", "0");
16637
- embedParams.set("iv_load_policy", "3");
16638
- embedParams.set("cc_load_policy", "0");
16639
- embedParams.set("disablekb", "1");
16640
- }
16641
- const embedUrl = `https://www.youtube-nocookie.com/embed/${videoId}?${embedParams.toString()}`;
16642
- const watchUrl = `https://www.youtube.com/watch?v=${videoId}`;
16643
- const posterJpg = `https://i.ytimg.com/vi/${videoId}/mqdefault.jpg`;
16644
- const posterWebp = `https://i.ytimg.com/vi_webp/${videoId}/mqdefault.webp`;
16645
- const handleActivate = () => {
16646
- const slot = iframeSlotRef.current;
16647
- if (!slot || activated) return;
16648
- const iframe = document.createElement("iframe");
16649
- iframe.setAttribute("allow", "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share");
16650
- iframe.setAttribute("allowfullscreen", "");
16651
- iframe.setAttribute("title", title);
16652
- iframe.className = "absolute inset-0 w-full h-full border-0";
16653
- iframe.src = embedUrl;
16654
- slot.appendChild(iframe);
16655
- setActivated(true);
16656
- };
16657
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `youtube-embed-container my-6 ${className}`, children: [
16658
- title && showTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "video-title font-sans text-lg font-medium text-ods-text-primary mb-3", children: title }),
16659
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "video-wrapper relative w-full", style: { paddingBottom: "56.25%" }, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute inset-0 rounded-lg overflow-hidden border border-ods-border bg-ods-card", children: [
16660
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: iframeSlotRef, className: "absolute inset-0", "aria-hidden": !activated }),
16661
- !activated && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
16662
- "button",
16663
- {
16664
- type: "button",
16665
- "aria-label": `Play: ${title}`,
16666
- onClick: handleActivate,
16667
- className: "group absolute inset-0 p-0 m-0 border-0 cursor-pointer bg-transparent",
16668
- children: [
16669
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "picture", { children: [
16670
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "source", { type: "image/webp", srcSet: posterWebp }),
16671
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16672
- "img",
16673
- {
16674
- src: posterJpg,
16675
- alt: title,
16676
- loading: "lazy",
16677
- fetchPriority: aboveTheFold ? "high" : "low",
16678
- decoding: aboveTheFold ? "sync" : "async",
16679
- className: "absolute inset-0 w-full h-full object-cover"
16680
- }
16681
- )
16682
- ] }),
16683
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 flex items-center justify-center bg-ods-bg-inverse bg-opacity-20 transition-opacity duration-200 group-hover:bg-opacity-30", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex items-center justify-center w-16 h-16 rounded-full bg-ods-accent text-ods-text-on-accent shadow-lg transition-transform duration-200 group-hover:scale-110", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: 24, height: 24, fill: "currentColor", viewBox: "0 0 24 24", className: "ml-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "polygon", { points: "5,3 19,12 5,21" }) }) }) })
16684
- ]
16685
- }
16686
- )
16687
- ] }) }),
16688
- showMeta && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "video-meta flex items-center justify-between mt-3 text-sm text-ods-text-secondary", children: [
16689
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "video-platform font-sans", children: "YouTube" }),
16690
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16691
- "a",
16692
- {
16693
- href: watchUrl,
16694
- target: "_blank",
16695
- rel: "noopener noreferrer",
16696
- className: "video-link font-sans text-ods-accent hover:text-ods-accent-hover transition-colors duration-200",
16697
- children: "Watch on YouTube \u2192"
16698
- }
16699
- )
16700
- ] })
16701
- ] });
16702
- };
16703
- var YT_HOSTS = /* @__PURE__ */ new Set([
16704
- "youtube.com",
16705
- "www.youtube.com",
16706
- "m.youtube.com",
16707
- "youtu.be",
16708
- "youtube-nocookie.com",
16709
- "www.youtube-nocookie.com"
16710
- ]);
16711
- var YT_PATH_RE = /^\/(?:embed|v|shorts)\/([^/]+)\/?$/;
16712
- var extractYouTubeId = (url) => {
16713
- let u;
16714
- try {
16715
- u = new URL(url);
16716
- } catch (e22) {
16717
- return null;
16718
- }
16719
- if (!YT_HOSTS.has(u.hostname.toLowerCase())) return null;
16720
- if (u.hostname.toLowerCase().endsWith("youtu.be")) {
16721
- return _nullishCoalesce(u.pathname.split("/").filter(Boolean)[0], () => ( null));
16722
- }
16723
- const v = u.searchParams.get("v");
16724
- if (v) return v;
16725
- const m = u.pathname.match(YT_PATH_RE);
16726
- return m ? m[1] : null;
16727
- };
16728
-
16729
- // src/components/features/video-player.tsx
16730
-
16731
- var _reactplayer = require('react-player'); var _reactplayer2 = _interopRequireDefault(_reactplayer);
16732
- _chunkBJTOSUT4cjs.init_button2.call(void 0, );
16733
-
16734
- var webkitCaptionCSSInjected = false;
16735
- function ensureWebkitCaptionCSS() {
16736
- if (webkitCaptionCSSInjected || typeof document === "undefined") return;
16737
- const style = document.createElement("style");
16738
- style.textContent = `
16739
- video::-webkit-media-text-track-container {
16740
- display: block !important;
16741
- visibility: visible !important;
16742
- overflow: visible !important;
16743
- }
16744
- video::-webkit-media-text-track-display {
16745
- white-space: pre-line;
16746
- }
16747
- `;
16748
- document.head.appendChild(style);
16749
- webkitCaptionCSSInjected = true;
16750
- }
16751
- function parseSrt(srt) {
16752
- const cues = [];
16753
- const blocks = srt.replace(/\r\n/g, "\n").trim().split(/\n\n+/);
16754
- for (const block of blocks) {
16755
- const lines = block.split("\n");
16756
- const tsIndex = lines.findIndex((l) => l.includes(" --> "));
16757
- if (tsIndex === -1) continue;
16758
- const [startStr, endStr] = lines[tsIndex].split(" --> ");
16759
- const from = parseSrtTimestamp(_optionalChain([startStr, 'optionalAccess', _433 => _433.trim, 'call', _434 => _434()]));
16760
- const to = parseSrtTimestamp(_optionalChain([endStr, 'optionalAccess', _435 => _435.trim, 'call', _436 => _436()]));
16761
- if (from === null || to === null) continue;
16762
- const text = lines.slice(tsIndex + 1).join("\n").trim();
16763
- if (text) cues.push({ from, to, text });
16764
- }
16765
- return cues;
16766
- }
16767
- function parseSrtTimestamp(ts) {
16768
- if (!ts) return null;
16769
- const match = ts.match(/(\d{2}):(\d{2}):(\d{2})[,.](\d{3})/);
16770
- if (!match) return null;
16771
- return parseInt(match[1]) * 36e5 + parseInt(match[2]) * 6e4 + parseInt(match[3]) * 1e3 + parseInt(match[4]);
16772
- }
16773
- function useSubtitleOverlay(srtContent) {
16774
- const cues = _react.useMemo.call(void 0, () => srtContent ? parseSrt(srtContent) : [], [srtContent]);
16775
- const [activeText, setActiveText] = _react.useState.call(void 0, null);
16776
- const updateTime = _react.useCallback.call(void 0, (playedSeconds) => {
16777
- const timeMs = playedSeconds * 1e3;
16778
- const active = cues.find((c) => timeMs >= c.from && timeMs <= c.to);
16779
- setActiveText(_nullishCoalesce(_optionalChain([active, 'optionalAccess', _437 => _437.text]), () => ( null)));
16780
- }, [cues]);
16781
- return { activeText, updateTime, hasCues: cues.length > 0 };
16782
- }
16783
- var SPEED_OPTIONS = [0.5, 0.75, 1, 1.25, 1.5, 2];
16784
- function formatTime(secs) {
16785
- if (!secs || !isFinite(secs)) return "0:00";
16786
- const h = Math.floor(secs / 3600);
16787
- const m = Math.floor(secs % 3600 / 60);
16788
- const s = Math.floor(secs % 60);
16789
- if (h > 0) return `${h}:${m.toString().padStart(2, "0")}:${s.toString().padStart(2, "0")}`;
16790
- return `${m}:${s.toString().padStart(2, "0")}`;
16791
- }
16792
- var VideoPlayer = ({
16793
- url,
16794
- title,
16795
- poster,
16796
- className = "",
16797
- showTitle = false,
16798
- autoPlay = false,
16799
- loop = false,
16800
- muted = false,
16801
- useNativeAspectRatio = false,
16802
- srtContent,
16803
- captionsUrl,
16804
- subtitleLabel,
16805
- preloadStrategy = "metadata"
16806
- }) => {
16807
- const [hasError, setHasError] = _react.useState.call(void 0, false);
16808
- const [isPlaying, setIsPlaying] = _react.useState.call(void 0, autoPlay);
16809
- const [mounted, setMounted] = _react.useState.call(void 0, false);
16810
- const [hasStarted, setHasStarted] = _react.useState.call(void 0, autoPlay);
16811
- const playerRef = _react.useRef.call(void 0, null);
16812
- const containerRef = _react.useRef.call(void 0, null);
16813
- const [played, setPlayed] = _react.useState.call(void 0, 0);
16814
- const [loaded, setLoaded] = _react.useState.call(void 0, 0);
16815
- const [duration, setDuration] = _react.useState.call(void 0, 0);
16816
- const [volume, setVolume] = _react.useState.call(void 0, 0.8);
16817
- const [prevVolume, setPrevVolume] = _react.useState.call(void 0, 0.8);
16818
- const [isMuted, setIsMuted] = _react.useState.call(void 0, muted);
16819
- const [isBuffering, setIsBuffering] = _react.useState.call(void 0, false);
16820
- const [showControls, setShowControls] = _react.useState.call(void 0, true);
16821
- const hideTimeoutRef = _react.useRef.call(void 0, void 0);
16822
- const clickTimerRef = _react.useRef.call(void 0, void 0);
16823
- const iosFullscreenTimerRef = _react.useRef.call(void 0, void 0);
16824
- const [captionsEnabled, setCaptionsEnabled] = _react.useState.call(void 0, true);
16825
- const [isFullscreen, setIsFullscreen] = _react.useState.call(void 0, false);
16826
- const { activeText, updateTime, hasCues } = useSubtitleOverlay(srtContent);
16827
- _react.useEffect.call(void 0, () => {
16828
- const onChange = () => {
16829
- const fsEl = document.fullscreenElement || document.webkitFullscreenElement;
16830
- setIsFullscreen(!!fsEl);
16831
- };
16832
- document.addEventListener("fullscreenchange", onChange);
16833
- document.addEventListener("webkitfullscreenchange", onChange);
16834
- return () => {
16835
- document.removeEventListener("fullscreenchange", onChange);
16836
- document.removeEventListener("webkitfullscreenchange", onChange);
16837
- };
16838
- }, []);
16839
- const activateCaptionTracks = _react.useCallback.call(void 0, (video) => {
16840
- for (let i = 0; i < video.textTracks.length; i++) {
16841
- if (video.textTracks[i].kind === "captions" || video.textTracks[i].kind === "subtitles") {
16842
- video.textTracks[i].mode = "showing";
16843
- }
16844
- }
16845
- }, []);
16846
- const enterNativeVideoFullscreen = _react.useCallback.call(void 0, () => {
16847
- const video = _optionalChain([playerRef, 'access', _438 => _438.current, 'optionalAccess', _439 => _439.getInternalPlayer, 'call', _440 => _440()]);
16848
- if (!video || !video.webkitEnterFullscreen) return;
16849
- ensureWebkitCaptionCSS();
16850
- const trackSrc = captionsUrl || null;
16851
- if (!trackSrc) {
16852
- try {
16853
- video.webkitEnterFullscreen();
16854
- } catch (e23) {
16855
- }
16856
- return;
16857
- }
16858
- const old = video.querySelector("track[data-native-cc]");
16859
- if (old) old.remove();
16860
- clearTimeout(iosFullscreenTimerRef.current);
16861
- const track = document.createElement("track");
16862
- track.kind = "captions";
16863
- track.label = subtitleLabel || "English";
16864
- track.srclang = "en";
16865
- track.default = true;
16866
- track.setAttribute("data-native-cc", "true");
16867
- video.appendChild(track);
16868
- track.src = trackSrc;
16869
- let entered = false;
16870
- const doFullscreen = () => {
16871
- if (entered) return;
16872
- entered = true;
16873
- activateCaptionTracks(video);
16874
- try {
16875
- video.webkitEnterFullscreen();
16876
- } catch (e24) {
16877
- }
16878
- };
16879
- track.addEventListener("load", doFullscreen, { once: true });
16880
- iosFullscreenTimerRef.current = setTimeout(() => {
16881
- track.removeEventListener("load", doFullscreen);
16882
- doFullscreen();
16883
- }, 500);
16884
- }, [captionsUrl, subtitleLabel, activateCaptionTracks]);
16885
- const toggleFullscreen = _react.useCallback.call(void 0, () => {
16886
- const container = containerRef.current;
16887
- if (!container) return;
16888
- if (isFullscreen) {
16889
- try {
16890
- if (document.exitFullscreen) document.exitFullscreen();
16891
- else if (document.webkitExitFullscreen) document.webkitExitFullscreen();
16892
- } catch (e25) {
16893
- }
16894
- return;
16895
- }
16896
- if (container.requestFullscreen) {
16897
- container.requestFullscreen().catch(() => enterNativeVideoFullscreen());
16898
- } else if (container.webkitRequestFullscreen) {
16899
- container.webkitRequestFullscreen();
16900
- } else {
16901
- enterNativeVideoFullscreen();
16902
- }
16903
- }, [isFullscreen, enterNativeVideoFullscreen]);
16904
- const toggleMute = _react.useCallback.call(void 0, () => {
16905
- if (isMuted) {
16906
- setIsMuted(false);
16907
- setVolume(prevVolume || 0.5);
16908
- } else {
16909
- setPrevVolume(volume);
16910
- setIsMuted(true);
16911
- setVolume(0);
16912
- }
16913
- }, [isMuted, volume, prevVolume]);
16914
- const handleVolumeChange = _react.useCallback.call(void 0, (e) => {
16915
- const val = parseFloat(e.target.value);
16916
- setVolume(val);
16917
- setIsMuted(val === 0);
16918
- if (val > 0) setPrevVolume(val);
16919
- }, []);
16920
- const startHideTimer = _react.useCallback.call(void 0, () => {
16921
- clearTimeout(hideTimeoutRef.current);
16922
- if (isPlaying) {
16923
- hideTimeoutRef.current = setTimeout(() => setShowControls(false), 3e3);
16924
- }
16925
- }, [isPlaying]);
16926
- const handleMouseMove = _react.useCallback.call(void 0, () => {
16927
- setShowControls(true);
16928
- startHideTimer();
16929
- }, [startHideTimer]);
16930
- const handleTouchToggle = _react.useCallback.call(void 0, () => {
16931
- if (!hasStarted) return;
16932
- setShowControls((prev) => {
16933
- const next = !prev;
16934
- clearTimeout(hideTimeoutRef.current);
16935
- if (next && isPlaying) {
16936
- hideTimeoutRef.current = setTimeout(() => setShowControls(false), 3e3);
16937
- }
16938
- return next;
16939
- });
16940
- }, [hasStarted, isPlaying]);
16941
- _react.useEffect.call(void 0, () => {
16942
- if (!hasStarted) return;
16943
- const el = containerRef.current;
16944
- if (!el) return;
16945
- const onKey = (e) => {
16946
- if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) return;
16947
- switch (e.key) {
16948
- case " ":
16949
- case "k":
16950
- e.preventDefault();
16951
- setIsPlaying((prev) => !prev);
16952
- break;
16953
- case "ArrowLeft":
16954
- e.preventDefault();
16955
- _optionalChain([playerRef, 'access', _441 => _441.current, 'optionalAccess', _442 => _442.seekTo, 'call', _443 => _443(Math.max(0, (_nullishCoalesce(_optionalChain([playerRef, 'access', _444 => _444.current, 'optionalAccess', _445 => _445.getCurrentTime, 'call', _446 => _446()]), () => ( 0))) - 5), "seconds")]);
16956
- break;
16957
- case "ArrowRight":
16958
- e.preventDefault();
16959
- _optionalChain([playerRef, 'access', _447 => _447.current, 'optionalAccess', _448 => _448.seekTo, 'call', _449 => _449(Math.min(duration, (_nullishCoalesce(_optionalChain([playerRef, 'access', _450 => _450.current, 'optionalAccess', _451 => _451.getCurrentTime, 'call', _452 => _452()]), () => ( 0))) + 5), "seconds")]);
16960
- break;
16961
- case "ArrowUp":
16962
- e.preventDefault();
16963
- setVolume((v) => {
16964
- const nv = Math.min(1, v + 0.1);
16965
- setIsMuted(false);
16966
- return nv;
16967
- });
16968
- break;
16969
- case "ArrowDown":
16970
- e.preventDefault();
16971
- setVolume((v) => {
16972
- const nv = Math.max(0, v - 0.1);
16973
- if (nv === 0) setIsMuted(true);
16974
- return nv;
16975
- });
16976
- break;
16977
- case "m":
16978
- case "M":
16979
- e.preventDefault();
16980
- toggleMute();
16981
- break;
16982
- case "f":
16983
- case "F":
16984
- e.preventDefault();
16985
- toggleFullscreen();
16986
- break;
16987
- case "c":
16988
- case "C":
16989
- e.preventDefault();
16990
- setCaptionsEnabled((prev) => !prev);
16991
- break;
16992
- }
16993
- };
16994
- el.addEventListener("keydown", onKey);
16995
- return () => el.removeEventListener("keydown", onKey);
16996
- }, [hasStarted, duration, toggleMute, toggleFullscreen]);
16997
- const [seekPreview, setSeekPreview] = _react.useState.call(void 0, null);
16998
- const [playbackRate, setPlaybackRate] = _react.useState.call(void 0, 1);
16999
- const cycleSpeed = _react.useCallback.call(void 0, () => {
17000
- setPlaybackRate((prev) => {
17001
- const idx = SPEED_OPTIONS.indexOf(prev);
17002
- return SPEED_OPTIONS[(idx + 1) % SPEED_OPTIONS.length];
17003
- });
17004
- }, []);
17005
- const progressBarRef = _react.useRef.call(void 0, null);
17006
- const isDraggingRef = _react.useRef.call(void 0, false);
17007
- const dragListenersRef = _react.useRef.call(void 0, null);
17008
- const seekToClientX = _react.useCallback.call(void 0, (clientX) => {
17009
- const rect = _optionalChain([progressBarRef, 'access', _453 => _453.current, 'optionalAccess', _454 => _454.getBoundingClientRect, 'call', _455 => _455()]);
17010
- if (!rect) return;
17011
- const fraction = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));
17012
- setPlayed(fraction);
17013
- _optionalChain([playerRef, 'access', _456 => _456.current, 'optionalAccess', _457 => _457.seekTo, 'call', _458 => _458(fraction, "fraction")]);
17014
- }, []);
17015
- const handleProgressMouseDown = _react.useCallback.call(void 0, (e) => {
17016
- e.stopPropagation();
17017
- e.preventDefault();
17018
- isDraggingRef.current = true;
17019
- seekToClientX(e.clientX);
17020
- if (dragListenersRef.current) {
17021
- document.removeEventListener("mousemove", dragListenersRef.current.move);
17022
- document.removeEventListener("mouseup", dragListenersRef.current.up);
17023
- }
17024
- const onMouseMove = (ev) => {
17025
- if (!isDraggingRef.current) return;
17026
- seekToClientX(ev.clientX);
17027
- };
17028
- const onMouseUp = () => {
17029
- isDraggingRef.current = false;
17030
- document.removeEventListener("mousemove", onMouseMove);
17031
- document.removeEventListener("mouseup", onMouseUp);
17032
- dragListenersRef.current = null;
17033
- };
17034
- dragListenersRef.current = { move: onMouseMove, up: onMouseUp };
17035
- document.addEventListener("mousemove", onMouseMove);
17036
- document.addEventListener("mouseup", onMouseUp);
17037
- }, [seekToClientX]);
17038
- const handleProgressTouchStart = _react.useCallback.call(void 0, (e) => {
17039
- e.stopPropagation();
17040
- const touch = e.touches[0];
17041
- if (touch) seekToClientX(touch.clientX);
17042
- }, [seekToClientX]);
17043
- const handleProgressTouchMove = _react.useCallback.call(void 0, (e) => {
17044
- e.stopPropagation();
17045
- const touch = e.touches[0];
17046
- if (touch) seekToClientX(touch.clientX);
17047
- }, [seekToClientX]);
17048
- const handleProgressKeyDown = _react.useCallback.call(void 0, (e) => {
17049
- if (e.key === "ArrowRight") {
17050
- e.preventDefault();
17051
- e.stopPropagation();
17052
- _optionalChain([playerRef, 'access', _459 => _459.current, 'optionalAccess', _460 => _460.seekTo, 'call', _461 => _461(Math.min(duration, (_nullishCoalesce(_optionalChain([playerRef, 'access', _462 => _462.current, 'optionalAccess', _463 => _463.getCurrentTime, 'call', _464 => _464()]), () => ( 0))) + 5), "seconds")]);
17053
- }
17054
- if (e.key === "ArrowLeft") {
17055
- e.preventDefault();
17056
- e.stopPropagation();
17057
- _optionalChain([playerRef, 'access', _465 => _465.current, 'optionalAccess', _466 => _466.seekTo, 'call', _467 => _467(Math.max(0, (_nullishCoalesce(_optionalChain([playerRef, 'access', _468 => _468.current, 'optionalAccess', _469 => _469.getCurrentTime, 'call', _470 => _470()]), () => ( 0))) - 5), "seconds")]);
17058
- }
17059
- if (e.key === "Home") {
17060
- e.preventDefault();
17061
- e.stopPropagation();
17062
- _optionalChain([playerRef, 'access', _471 => _471.current, 'optionalAccess', _472 => _472.seekTo, 'call', _473 => _473(0, "seconds")]);
17063
- }
17064
- if (e.key === "End") {
17065
- e.preventDefault();
17066
- e.stopPropagation();
17067
- _optionalChain([playerRef, 'access', _474 => _474.current, 'optionalAccess', _475 => _475.seekTo, 'call', _476 => _476(duration, "seconds")]);
17068
- }
17069
- }, [duration]);
17070
- const handleProgressHover = _react.useCallback.call(void 0, (e) => {
17071
- if (isDraggingRef.current) return;
17072
- const rect = e.currentTarget.getBoundingClientRect();
17073
- const fraction = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
17074
- const x = Math.max(30, Math.min(rect.width - 30, e.clientX - rect.left));
17075
- setSeekPreview({ fraction, x });
17076
- }, []);
17077
- const isTouchRef = _react.useRef.call(void 0, false);
17078
- const handleContainerClick = _react.useCallback.call(void 0, (e) => {
17079
- if (isTouchRef.current) {
17080
- isTouchRef.current = false;
17081
- return;
17082
- }
17083
- if (e.target.closest(".video-controls-bar")) return;
17084
- if (!hasStarted) return;
17085
- if (clickTimerRef.current) {
17086
- clearTimeout(clickTimerRef.current);
17087
- clickTimerRef.current = void 0;
17088
- toggleFullscreen();
17089
- } else {
17090
- clickTimerRef.current = setTimeout(() => {
17091
- clickTimerRef.current = void 0;
17092
- setIsPlaying((prev) => !prev);
17093
- }, 250);
17094
- }
17095
- }, [hasStarted, toggleFullscreen]);
17096
- const handleContainerTouchEnd = _react.useCallback.call(void 0, (e) => {
17097
- if (e.target.closest(".video-controls-bar")) return;
17098
- isTouchRef.current = true;
17099
- if (!hasStarted) return;
17100
- handleTouchToggle();
17101
- }, [hasStarted, handleTouchToggle]);
17102
- const effectivePoster = poster || void 0;
17103
- const posterBgColor = _chunkALW3D72Ocjs.useImageEdgeColor.call(void 0, effectivePoster);
17104
- _react.useEffect.call(void 0, () => {
17105
- setMounted(true);
17106
- return () => {
17107
- clearTimeout(clickTimerRef.current);
17108
- clearTimeout(hideTimeoutRef.current);
17109
- clearTimeout(iosFullscreenTimerRef.current);
17110
- isDraggingRef.current = false;
17111
- if (dragListenersRef.current) {
17112
- document.removeEventListener("mousemove", dragListenersRef.current.move);
17113
- document.removeEventListener("mouseup", dragListenersRef.current.up);
17114
- dragListenersRef.current = null;
17115
- }
17116
- };
17117
- }, []);
17118
- _react.useEffect.call(void 0, () => {
17119
- if (!hasStarted) return;
17120
- const video = _optionalChain([playerRef, 'access', _477 => _477.current, 'optionalAccess', _478 => _478.getInternalPlayer, 'call', _479 => _479()]);
17121
- if (!video) return;
17122
- const onBeginFS = () => activateCaptionTracks(video);
17123
- video.addEventListener("webkitbeginfullscreen", onBeginFS);
17124
- return () => video.removeEventListener("webkitbeginfullscreen", onBeginFS);
17125
- }, [hasStarted, activateCaptionTracks]);
17126
- const handleError = _react.useCallback.call(void 0, () => setHasError(true), []);
17127
- const handlePlay = _react.useCallback.call(void 0, () => {
17128
- setIsPlaying(true);
17129
- setHasStarted(true);
17130
- }, []);
17131
- const handlePause = _react.useCallback.call(void 0, () => setIsPlaying(false), []);
17132
- const handleEnded = _react.useCallback.call(void 0, () => setIsPlaying(false), []);
17133
- const handlePlayClick = _react.useCallback.call(void 0, () => {
17134
- const native = _optionalChain([playerRef, 'access', _480 => _480.current, 'optionalAccess', _481 => _481.getInternalPlayer, 'call', _482 => _482()]);
17135
- if (native instanceof HTMLVideoElement) {
17136
- native.play().catch(() => {
17137
- });
17138
- } else if (process.env.NODE_ENV !== "production") {
17139
- console.warn("[VideoPlayer] sync play(): no native HTMLVideoElement yet");
17140
- }
17141
- setHasStarted(true);
17142
- setIsPlaying(true);
17143
- }, []);
17144
- const handleProgress = _react.useCallback.call(void 0, ({ played: p, loaded: l, playedSeconds }) => {
17145
- setPlayed(p);
17146
- setLoaded(l);
17147
- updateTime(playedSeconds);
17148
- }, [updateTime]);
17149
- const handleBuffer = _react.useCallback.call(void 0, () => setIsBuffering(true), []);
17150
- const handleBufferEnd = _react.useCallback.call(void 0, () => setIsBuffering(false), []);
17151
- if (!mounted) {
17152
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `video-player-container ${className}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17153
- "div",
17154
- {
17155
- className: "video-wrapper relative w-full",
17156
- style: useNativeAspectRatio ? {} : { paddingBottom: "56.25%" },
17157
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: useNativeAspectRatio ? "bg-black rounded-md flex items-center justify-center min-h-[200px]" : "absolute inset-0 bg-black rounded-md flex items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-16 h-16 rounded-full bg-ods-accent flex items-center justify-center shadow-lg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.PlayIcon, { size: 24, className: "ml-1 text-ods-text-on-accent" }) }) })
17158
- }
17159
- ) });
17160
- }
17161
- if (hasError) {
17162
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `video-player-error ${className}`, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "error-state bg-ods-card border border-ods-border rounded-md p-6 text-center", children: [
17163
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "error-icon flex justify-center mb-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.AlertCircleIcon, { size: 48, className: "text-ods-attention-red-error" }) }),
17164
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "error-title font-sans font-semibold text-lg text-ods-attention-red-error mb-2", children: "Video Unavailable" }),
17165
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "error-description font-sans text-sm text-ods-text-secondary mb-4", children: "Unable to load video. The video may be unavailable or the format is not supported." })
17166
- ] }) });
17167
- }
17168
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `video-player-container ${className}`, children: [
17169
- title && showTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "video-title font-sans text-lg font-medium text-ods-text-primary mb-3", children: title }),
17170
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
17171
- "div",
17172
- {
17173
- ref: containerRef,
17174
- tabIndex: 0,
17175
- role: "region",
17176
- "aria-label": title || "Video player",
17177
- className: `video-wrapper relative w-full outline-none focus-visible:ring-2 focus-visible:ring-white/50 focus-visible:ring-offset-2 focus-visible:ring-offset-black ${isFullscreen ? "bg-black" : ""} ${isFullscreen && !showControls && isPlaying ? "cursor-none" : ""}`,
17178
- style: isFullscreen ? { width: "100%", height: "100%" } : useNativeAspectRatio ? {} : { paddingBottom: "56.25%" },
17179
- onMouseMove: handleMouseMove,
17180
- onMouseLeave: startHideTimer,
17181
- onTouchEnd: handleContainerTouchEnd,
17182
- onClick: handleContainerClick,
17183
- children: [
17184
- !hasStarted && !hasError && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute inset-0 cursor-pointer group z-20", onClick: handlePlayClick, children: [
17185
- effectivePoster && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17186
- "img",
17187
- {
17188
- src: effectivePoster,
17189
- alt: title || "Video thumbnail",
17190
- className: "w-full h-full object-contain rounded-md",
17191
- style: { backgroundColor: posterBgColor }
17192
- }
17193
- ),
17194
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `absolute inset-0 ${effectivePoster ? "bg-black/40" : "bg-black/20"} group-hover:bg-black/50 transition-all flex items-center justify-center rounded-md`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-16 h-16 rounded-full bg-ods-accent hover:bg-ods-accent/90 transition-all flex items-center justify-center shadow-lg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.PlayIcon, { size: 24, className: "ml-1 text-ods-text-on-accent" }) }) })
17195
- ] }),
17196
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: isFullscreen ? "video-player absolute inset-0" : useNativeAspectRatio ? "video-player rounded-md overflow-hidden border border-ods-border bg-ods-background" : "video-player absolute inset-0 rounded-md overflow-hidden border border-ods-border bg-ods-background", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17197
- _reactplayer2.default,
17198
- {
17199
- ref: playerRef,
17200
- url,
17201
- width: "100%",
17202
- height: "100%",
17203
- controls: false,
17204
- playing: isPlaying,
17205
- playbackRate,
17206
- loop,
17207
- muted: isMuted,
17208
- volume: isMuted ? 0 : volume,
17209
- onError: handleError,
17210
- onPlay: handlePlay,
17211
- onPause: handlePause,
17212
- onEnded: handleEnded,
17213
- onDuration: setDuration,
17214
- onBuffer: handleBuffer,
17215
- onBufferEnd: handleBufferEnd,
17216
- onProgress: handleProgress,
17217
- progressInterval: 200,
17218
- config: { file: { attributes: { controlsList: "nodownload", playsInline: true, preload: hasStarted ? "auto" : preloadStrategy } } },
17219
- light: false,
17220
- playsinline: true
17221
- }
17222
- ) }),
17223
- isBuffering && hasStarted && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 flex items-center justify-center z-20 pointer-events-none", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-12 h-12 border-4 border-white/30 border-t-white rounded-full animate-spin" }) }),
17224
- captionsEnabled && activeText && hasStarted && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17225
- "div",
17226
- {
17227
- className: "absolute left-[5%] right-[5%] text-center pointer-events-none z-10 transition-[bottom] duration-300 ease-in-out",
17228
- style: { bottom: showControls || !isPlaying ? 52 : 12 },
17229
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17230
- "span",
17231
- {
17232
- className: "inline-block bg-black/80 text-white leading-relaxed px-4 py-1.5 rounded font-sans font-medium whitespace-pre-line",
17233
- style: {
17234
- fontSize: isFullscreen ? "clamp(20px, 3.3vh, 42px)" : "clamp(15px, 3.3cqw, 26px)",
17235
- maxWidth: "90%",
17236
- textShadow: "0 1px 4px rgba(0,0,0,0.6)",
17237
- WebkitTextStroke: "0.3px rgba(0,0,0,0.3)"
17238
- },
17239
- children: activeText
17240
- }
17241
- )
17242
- }
17243
- ),
17244
- hasStarted && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17245
- "div",
17246
- {
17247
- className: `video-controls-bar absolute bottom-0 left-0 right-0 z-30 transition-opacity duration-300 ${showControls || !isPlaying ? "opacity-100" : "opacity-0 pointer-events-none"}`,
17248
- onTouchEnd: (e) => {
17249
- e.stopPropagation();
17250
- startHideTimer();
17251
- },
17252
- children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-gradient-to-t from-black/90 via-black/40 to-transparent pt-6 pb-1.5 px-2.5 rounded-b-md", children: [
17253
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
17254
- "div",
17255
- {
17256
- className: "group/seek relative w-full h-6 cursor-pointer mb-0.5 flex items-center",
17257
- ref: progressBarRef,
17258
- role: "slider",
17259
- "aria-label": "Video progress",
17260
- "aria-valuenow": Math.round(played * 100),
17261
- "aria-valuetext": `${formatTime(played * duration)} of ${formatTime(duration)}`,
17262
- "aria-valuemin": 0,
17263
- "aria-valuemax": 100,
17264
- tabIndex: 0,
17265
- onMouseDown: handleProgressMouseDown,
17266
- onTouchStart: handleProgressTouchStart,
17267
- onTouchMove: handleProgressTouchMove,
17268
- onTouchEnd: (e) => e.stopPropagation(),
17269
- onMouseMove: handleProgressHover,
17270
- onMouseLeave: () => setSeekPreview(null),
17271
- onKeyDown: handleProgressKeyDown,
17272
- children: [
17273
- seekPreview && duration > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17274
- "div",
17275
- {
17276
- className: "absolute -top-7 -translate-x-1/2 bg-black/90 text-white text-[11px] font-mono px-1.5 py-0.5 rounded pointer-events-none whitespace-nowrap z-10",
17277
- style: { left: seekPreview.x },
17278
- children: formatTime(seekPreview.fraction * duration)
17279
- }
17280
- ),
17281
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute left-0 right-0 h-1 [@media(hover:hover)]:group-hover/seek:h-[5px] transition-all top-1/2 -translate-y-1/2", children: [
17282
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-white/20 rounded-full" }),
17283
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17284
- "div",
17285
- {
17286
- className: "absolute inset-y-0 left-0 bg-white/40 rounded-full transition-all",
17287
- style: { width: `${loaded * 100}%` }
17288
- }
17289
- ),
17290
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17291
- "div",
17292
- {
17293
- className: "absolute inset-y-0 left-0 bg-white rounded-full",
17294
- style: { width: `${played * 100}%` }
17295
- }
17296
- )
17297
- ] }),
17298
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17299
- "div",
17300
- {
17301
- className: "absolute top-1/2 -translate-y-1/2 w-3 h-3 bg-white rounded-full shadow-sm opacity-100 [@media(hover:hover)]:opacity-0 [@media(hover:hover)]:group-hover/seek:opacity-100 [@media(hover:hover)]:group-hover/seek:scale-110 transition-all",
17302
- style: { left: `calc(${played * 100}% - 6px)` }
17303
- }
17304
- )
17305
- ]
17306
- }
17307
- ),
17308
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between h-9", children: [
17309
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center", children: [
17310
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17311
- _chunkBJTOSUT4cjs.Button,
17312
- {
17313
- variant: "transparent",
17314
- size: "icon",
17315
- onClick: (e) => {
17316
- e.stopPropagation();
17317
- setIsPlaying((prev) => !prev);
17318
- },
17319
- className: "h-9 w-9 text-white hover:text-white/80 hover:bg-white/10",
17320
- "aria-label": isPlaying ? "Pause (Space)" : "Play (Space)",
17321
- children: isPlaying ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.PauseIcon, { size: 20, color: "white" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.PlayIcon, { size: 20, color: "white" })
17322
- }
17323
- ),
17324
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "group/vol flex items-center", children: [
17325
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17326
- _chunkBJTOSUT4cjs.Button,
17327
- {
17328
- variant: "transparent",
17329
- size: "icon",
17330
- onClick: (e) => {
17331
- e.stopPropagation();
17332
- toggleMute();
17333
- },
17334
- className: "h-9 w-9 text-white hover:text-white/80 hover:bg-white/10",
17335
- "aria-label": isMuted ? "Unmute (M)" : "Mute (M)",
17336
- children: isMuted || volume === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.VolumeOffIcon, { size: 18, color: "white" }) : volume < 0.5 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.VolumeDownIcon, { size: 18, color: "white" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.VolumeUpIcon, { size: 18, color: "white" })
17337
- }
17338
- ),
17339
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-0 overflow-hidden group-hover/vol:w-16 transition-all duration-200 flex items-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17340
- _chunkBJTOSUT4cjs.Input,
17341
- {
17342
- type: "range",
17343
- min: 0,
17344
- max: 1,
17345
- step: 0.01,
17346
- value: isMuted ? 0 : volume,
17347
- onChange: handleVolumeChange,
17348
- onClick: (e) => e.stopPropagation(),
17349
- "aria-label": "Volume",
17350
- className: "w-14 ml-1",
17351
- style: { background: `linear-gradient(to right, white ${(isMuted ? 0 : volume) * 100}%, rgba(255,255,255,0.3) ${(isMuted ? 0 : volume) * 100}%)` }
17352
- }
17353
- ) })
17354
- ] }),
17355
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-white/70 text-[12px] font-mono tabular-nums select-none ml-1.5", children: [
17356
- formatTime(played * duration),
17357
- " / ",
17358
- formatTime(duration)
17359
- ] })
17360
- ] }),
17361
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center", children: [
17362
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
17363
- _chunkBJTOSUT4cjs.Button,
17364
- {
17365
- variant: "transparent",
17366
- size: "small-legacy",
17367
- onClick: (e) => {
17368
- e.stopPropagation();
17369
- cycleSpeed();
17370
- },
17371
- className: `h-9 px-1.5 text-[11px] font-bold rounded hover:bg-white/10 ${playbackRate !== 1 ? "text-white" : "text-white/70 hover:text-white"}`,
17372
- title: "Playback speed",
17373
- "aria-label": `Playback speed ${playbackRate}x`,
17374
- children: [
17375
- playbackRate,
17376
- "x"
17377
- ]
17378
- }
17379
- ),
17380
- hasCues && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17381
- _chunkBJTOSUT4cjs.Button,
17382
- {
17383
- variant: "transparent",
17384
- size: "small-legacy",
17385
- onClick: (e) => {
17386
- e.stopPropagation();
17387
- setCaptionsEnabled((prev) => !prev);
17388
- },
17389
- className: `h-9 px-1.5 text-[11px] font-bold rounded ${captionsEnabled ? "bg-white text-black hover:bg-white/90" : "text-white/50 hover:text-white hover:bg-white/10"}`,
17390
- style: { borderBottom: captionsEnabled ? "2px solid white" : "2px solid transparent" },
17391
- title: captionsEnabled ? "Hide captions (C)" : "Show captions (C)",
17392
- "aria-label": captionsEnabled ? "Hide captions" : "Show captions",
17393
- children: "CC"
17394
- }
17395
- ),
17396
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17397
- _chunkBJTOSUT4cjs.Button,
17398
- {
17399
- variant: "transparent",
17400
- size: "icon",
17401
- onClick: (e) => {
17402
- e.stopPropagation();
17403
- toggleFullscreen();
17404
- },
17405
- className: "h-9 w-9 text-white/80 hover:text-white hover:bg-white/10",
17406
- title: isFullscreen ? "Exit fullscreen (F)" : "Fullscreen (F)",
17407
- "aria-label": isFullscreen ? "Exit fullscreen" : "Fullscreen",
17408
- children: isFullscreen ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.Collapse01Icon, { size: 18, color: "white" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.Expand01Icon, { size: 18, color: "white" })
17409
- }
17410
- )
17411
- ] })
17412
- ] })
17413
- ] })
17414
- }
17415
- )
17416
- ]
17417
- }
17418
- )
17419
- ] });
17420
- };
17421
-
17422
16672
  // src/components/layout/page-container.tsx
17423
16673
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
17424
16674
 
@@ -17445,7 +16695,7 @@ var SecondaryAction = ({ action }) => {
17445
16695
  e.preventDefault();
17446
16696
  return;
17447
16697
  }
17448
- _optionalChain([action, 'access', _483 => _483.onClick, 'optionalCall', _484 => _484()]);
16698
+ _optionalChain([action, 'access', _414 => _414.onClick, 'optionalCall', _415 => _415()]);
17449
16699
  },
17450
16700
  [action]
17451
16701
  );
@@ -17486,13 +16736,13 @@ var MenuItem = ({ item, onItemClick }) => {
17486
16736
  const activate = _react.useCallback.call(void 0, () => {
17487
16737
  if (item.disabled) return;
17488
16738
  if (item.type === "checkbox") {
17489
- _optionalChain([item, 'access', _485 => _485.onClick, 'optionalCall', _486 => _486()]);
17490
- _optionalChain([onItemClick, 'optionalCall', _487 => _487(item)]);
16739
+ _optionalChain([item, 'access', _416 => _416.onClick, 'optionalCall', _417 => _417()]);
16740
+ _optionalChain([onItemClick, 'optionalCall', _418 => _418(item)]);
17491
16741
  return;
17492
16742
  }
17493
16743
  if (item.type === "submenu") return;
17494
- _optionalChain([item, 'access', _488 => _488.onClick, 'optionalCall', _489 => _489()]);
17495
- _optionalChain([onItemClick, 'optionalCall', _490 => _490(item)]);
16744
+ _optionalChain([item, 'access', _419 => _419.onClick, 'optionalCall', _420 => _420()]);
16745
+ _optionalChain([onItemClick, 'optionalCall', _421 => _421(item)]);
17496
16746
  }, [item, onItemClick]);
17497
16747
  const handleClick = _react.useCallback.call(void 0,
17498
16748
  (e) => {
@@ -17518,8 +16768,8 @@ var MenuItem = ({ item, onItemClick }) => {
17518
16768
  e.stopPropagation();
17519
16769
  return;
17520
16770
  }
17521
- _optionalChain([item, 'access', _491 => _491.onClick, 'optionalCall', _492 => _492()]);
17522
- _optionalChain([onItemClick, 'optionalCall', _493 => _493(item)]);
16771
+ _optionalChain([item, 'access', _422 => _422.onClick, 'optionalCall', _423 => _423()]);
16772
+ _optionalChain([onItemClick, 'optionalCall', _424 => _424(item)]);
17523
16773
  },
17524
16774
  [item, onItemClick]
17525
16775
  );
@@ -17674,7 +16924,7 @@ var ActionsMenuDropdown = ({
17674
16924
  const [open, setOpen] = _react.useState.call(void 0, false);
17675
16925
  const handleItemClick = _react.useCallback.call(void 0,
17676
16926
  (item) => {
17677
- _optionalChain([onItemClick, 'optionalCall', _494 => _494(item)]);
16927
+ _optionalChain([onItemClick, 'optionalCall', _425 => _425(item)]);
17678
16928
  if (item.type !== "checkbox" && item.type !== "submenu") {
17679
16929
  setOpen(false);
17680
16930
  }
@@ -17845,7 +17095,7 @@ function IconButtonsVariant({
17845
17095
  }) {
17846
17096
  const desktopActions = actions.filter((a) => !a.showOnlyMobile);
17847
17097
  const hasMenuActions = !!menuActions && menuActions.some((g) => g.items.length > 0);
17848
- const isSingleAction = actions.length === 1 && !_optionalChain([actions, 'access', _495 => _495[0], 'access', _496 => _496.submenu, 'optionalAccess', _497 => _497.length]);
17098
+ const isSingleAction = actions.length === 1 && !_optionalChain([actions, 'access', _426 => _426[0], 'access', _427 => _427.submenu, 'optionalAccess', _428 => _428.length]);
17849
17099
  const singleAction = isSingleAction ? actions[0] : null;
17850
17100
  const useSingleActionMobile = isSingleAction && !hasMenuActions;
17851
17101
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
@@ -18275,14 +17525,14 @@ function ReleaseDetailPage({
18275
17525
  releaseVersion
18276
17526
  ] })
18277
17527
  ] }) }),
18278
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap gap-2 w-full", children: _optionalChain([blogTags, 'optionalAccess', _498 => _498.map, 'call', _499 => _499((tag) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17528
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap gap-2 w-full", children: _optionalChain([blogTags, 'optionalAccess', _429 => _429.map, 'call', _430 => _430((tag) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18279
17529
  StatusBadge,
18280
17530
  {
18281
- text: (tag.name || _optionalChain([tag, 'access', _500 => _500.blog_tags, 'optionalAccess', _501 => _501.name]) || "").toUpperCase(),
17531
+ text: (tag.name || _optionalChain([tag, 'access', _431 => _431.blog_tags, 'optionalAccess', _432 => _432.name]) || "").toUpperCase(),
18282
17532
  variant: "card",
18283
17533
  className: "bg-ods-card border border-ods-border"
18284
17534
  },
18285
- tag.id || _optionalChain([tag, 'access', _502 => _502.blog_tags, 'optionalAccess', _503 => _503.id])
17535
+ tag.id || _optionalChain([tag, 'access', _433 => _433.blog_tags, 'optionalAccess', _434 => _434.id])
18286
17536
  ))]) }),
18287
17537
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 md:grid-cols-4 border border-ods-border rounded-md overflow-hidden w-full", children: [
18288
17538
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-0", children: [
@@ -18301,15 +17551,15 @@ function ReleaseDetailPage({
18301
17551
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18302
17552
  SquareAvatar,
18303
17553
  {
18304
- src: _optionalChain([author, 'optionalAccess', _504 => _504.avatar_url]) || "",
18305
- alt: _optionalChain([author, 'optionalAccess', _505 => _505.full_name]) || "Author",
18306
- fallback: getInitials4(_optionalChain([author, 'optionalAccess', _506 => _506.full_name]) || "Unknown"),
17554
+ src: _optionalChain([author, 'optionalAccess', _435 => _435.avatar_url]) || "",
17555
+ alt: _optionalChain([author, 'optionalAccess', _436 => _436.full_name]) || "Author",
17556
+ fallback: getInitials4(_optionalChain([author, 'optionalAccess', _437 => _437.full_name]) || "Unknown"),
18307
17557
  size: "md",
18308
17558
  variant: "round"
18309
17559
  }
18310
17560
  ),
18311
17561
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-0 flex-1 min-w-0", children: [
18312
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h3 tracking-[-0.36px] text-ods-text-primary truncate", children: _optionalChain([author, 'optionalAccess', _507 => _507.full_name]) || "Unknown Author" }),
17562
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h3 tracking-[-0.36px] text-ods-text-primary truncate", children: _optionalChain([author, 'optionalAccess', _438 => _438.full_name]) || "Unknown Author" }),
18313
17563
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Author" })
18314
17564
  ] })
18315
17565
  ] })
@@ -18324,7 +17574,7 @@ function ReleaseDetailPage({
18324
17574
  setGalleryOpen(true);
18325
17575
  }
18326
17576
  },
18327
- children: mediaItem.media_type === "video" || mediaItem.media_type === "demo" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoPlayer, { url: mediaItem.media_url, useNativeAspectRatio: false }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "img", { src: mediaItem.media_url, alt: mediaItem.title || `Media ${index + 1}`, className: "w-full h-full object-cover" })
17577
+ children: mediaItem.media_type === "video" || mediaItem.media_type === "demo" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Video2, { url: mediaItem.media_url, layout: "native" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "img", { src: mediaItem.media_url, alt: mediaItem.title || `Media ${index + 1}`, className: "w-full h-full object-cover" })
18328
17578
  },
18329
17579
  mediaItem.id || index
18330
17580
  )) }),
@@ -18340,16 +17590,36 @@ function ReleaseDetailPage({
18340
17590
  videoBites,
18341
17591
  bitesTitle: "Video Clips",
18342
17592
  filterPublishedBites: true,
18343
- srtContent: _optionalChain([release, 'optionalAccess', _508 => _508.srt_content]),
18344
- captionsUrl: _optionalChain([release, 'optionalAccess', _509 => _509.captionsUrl])
17593
+ srtContent: _optionalChain([release, 'optionalAccess', _439 => _439.srt_content]),
17594
+ captionsUrl: _optionalChain([release, 'optionalAccess', _440 => _440.captionsUrl])
18345
17595
  }
18346
17596
  ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
18347
- youtubeUrl && (() => {
18348
- const videoId = extractYouTubeId(youtubeUrl);
18349
- return videoId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, YouTubeEmbed, { videoId, title: `${releaseTitle} - Video`, showTitle: false, showMeta: true }) : null;
18350
- })(),
18351
- !youtubeUrl && mainVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-center w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full max-w-3xl", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoPlayer, { url: mainVideoUrl, srtContent: _optionalChain([release, 'optionalAccess', _510 => _510.srt_content]), captionsUrl: _optionalChain([release, 'optionalAccess', _511 => _511.captionsUrl]) }) }) }),
18352
- highlightVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-center w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full max-w-3xl", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoPlayer, { url: highlightVideoUrl, poster: highlightVideoThumbnail }) }) })
17597
+ youtubeUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17598
+ Video2,
17599
+ {
17600
+ kind: "youtube",
17601
+ url: youtubeUrl,
17602
+ title: `${releaseTitle} - Video`,
17603
+ layout: "native"
17604
+ }
17605
+ ),
17606
+ !youtubeUrl && mainVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17607
+ Video2,
17608
+ {
17609
+ url: mainVideoUrl,
17610
+ srtContent: _optionalChain([release, 'optionalAccess', _441 => _441.srt_content]),
17611
+ captionsUrl: _optionalChain([release, 'optionalAccess', _442 => _442.captionsUrl]),
17612
+ layout: "centered"
17613
+ }
17614
+ ),
17615
+ highlightVideoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17616
+ Video2,
17617
+ {
17618
+ url: highlightVideoUrl,
17619
+ poster: highlightVideoThumbnail,
17620
+ layout: "centered"
17621
+ }
17622
+ )
18353
17623
  ] }),
18354
17624
  releaseContent && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-h4 text-ods-text-primary", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownRenderer, { content: releaseContent }) }),
18355
17625
  hasBreakingChanges && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Card, { className: "border-red-500 bg-red-500/10", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CardContent, { className: "p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
@@ -18428,7 +17698,7 @@ function ReleaseDetailPage({
18428
17698
  }
18429
17699
  )
18430
17700
  ] }),
18431
- (_optionalChain([githubReleases, 'optionalAccess', _512 => _512.length]) || _optionalChain([knowledgeBaseLinks, 'optionalAccess', _513 => _513.length]) || migrationGuideUrl || documentationUrl) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-1 w-full", children: [
17701
+ (_optionalChain([githubReleases, 'optionalAccess', _443 => _443.length]) || _optionalChain([knowledgeBaseLinks, 'optionalAccess', _444 => _444.length]) || migrationGuideUrl || documentationUrl) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-1 w-full", children: [
18432
17702
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h5 tracking-[-0.28px] text-ods-text-secondary", children: "Related Links" }),
18433
17703
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Card, { className: "bg-ods-card border-ods-border p-6", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
18434
17704
  githubReleases && githubReleases.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: githubReleases.map((ghRelease) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-start gap-1", children: [
@@ -18457,7 +17727,7 @@ function ReleaseDetailPage({
18457
17727
  {
18458
17728
  href: path.startsWith("http") ? path : `/knowledge-base${path.startsWith("/") ? "" : "/"}${path}`,
18459
17729
  className: "text-h4 text-[#ffc008] hover:underline",
18460
- children: _optionalChain([path, 'access', _514 => _514.replace, 'call', _515 => _515(/^\//, ""), 'access', _516 => _516.split, 'call', _517 => _517("/"), 'access', _518 => _518.pop, 'call', _519 => _519(), 'optionalAccess', _520 => _520.replace, 'call', _521 => _521(/-/g, " ")]) || "View Article"
17730
+ children: _optionalChain([path, 'access', _445 => _445.replace, 'call', _446 => _446(/^\//, ""), 'access', _447 => _447.split, 'call', _448 => _448("/"), 'access', _449 => _449.pop, 'call', _450 => _450(), 'optionalAccess', _451 => _451.replace, 'call', _452 => _452(/-/g, " ")]) || "View Article"
18461
17731
  }
18462
17732
  ),
18463
17733
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { className: "h-6 w-6 text-[#ffc008] shrink-0" })
@@ -18603,7 +17873,7 @@ function InfoRow({ label, value, icon }) {
18603
17873
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
18604
17874
 
18605
17875
 
18606
- var InputTrigger = React48.forwardRef(
17876
+ var InputTrigger = React47.forwardRef(
18607
17877
  ({ selectedLabel, placeholder, startIcon, endIcon, invalid, className, disabled, ...props }, ref) => {
18608
17878
  const isPlaceholder = selectedLabel === void 0 || selectedLabel === null || selectedLabel === "";
18609
17879
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -18667,8 +17937,8 @@ function MediaTypeSelector({
18667
17937
  className,
18668
17938
  disabled
18669
17939
  }) {
18670
- const [key, setKey] = React49.useState(0);
18671
- React49.useEffect(() => {
17940
+ const [key, setKey] = React48.useState(0);
17941
+ React48.useEffect(() => {
18672
17942
  setKey((prev) => prev + 1);
18673
17943
  }, [value]);
18674
17944
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -18824,7 +18094,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
18824
18094
 
18825
18095
  var _reactradiogroup = require('@radix-ui/react-radio-group'); var RadioGroupPrimitive = _interopRequireWildcard(_reactradiogroup);
18826
18096
 
18827
- var RadioGroup = React51.forwardRef(({ className, ...props }, ref) => {
18097
+ var RadioGroup = React50.forwardRef(({ className, ...props }, ref) => {
18828
18098
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18829
18099
  RadioGroupPrimitive.Root,
18830
18100
  {
@@ -18835,7 +18105,7 @@ var RadioGroup = React51.forwardRef(({ className, ...props }, ref) => {
18835
18105
  );
18836
18106
  });
18837
18107
  RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
18838
- var RadioGroupItem = React51.forwardRef(({ className, ...props }, ref) => {
18108
+ var RadioGroupItem = React50.forwardRef(({ className, ...props }, ref) => {
18839
18109
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18840
18110
  RadioGroupPrimitive.Item,
18841
18111
  {
@@ -18856,7 +18126,7 @@ var RadioGroupItem = React51.forwardRef(({ className, ...props }, ref) => {
18856
18126
  );
18857
18127
  });
18858
18128
  RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
18859
- var RadioGroupBlock = React51.forwardRef(
18129
+ var RadioGroupBlock = React50.forwardRef(
18860
18130
  ({ className, options, variant = "separated", error, itemClassName, disabled, ...props }, ref) => {
18861
18131
  const isGrouped = variant === "grouped";
18862
18132
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "relative flex w-full flex-col", className), children: [
@@ -18970,7 +18240,7 @@ function TagsInput({
18970
18240
  badgeClassName,
18971
18241
  label
18972
18242
  }) {
18973
- const [inputValue, setInputValue] = React52.useState("");
18243
+ const [inputValue, setInputValue] = React51.useState("");
18974
18244
  const handleAddTag = () => {
18975
18245
  const trimmedValue = inputValue.trim();
18976
18246
  if (!trimmedValue) return;
@@ -19076,19 +18346,19 @@ function TagsManager({
19076
18346
  disabled = false,
19077
18347
  className
19078
18348
  }) {
19079
- const [open, setOpen] = React53.useState(false);
19080
- const [search, setSearch] = React53.useState("");
19081
- const [editingId, setEditingId] = React53.useState(null);
19082
- const [editingName, setEditingName] = React53.useState("");
19083
- const editInputRef = React53.useRef(null);
19084
- const inputRef = React53.useRef(null);
19085
- const containerRef = React53.useRef(null);
18349
+ const [open, setOpen] = React52.useState(false);
18350
+ const [search, setSearch] = React52.useState("");
18351
+ const [editingId, setEditingId] = React52.useState(null);
18352
+ const [editingName, setEditingName] = React52.useState("");
18353
+ const editInputRef = React52.useRef(null);
18354
+ const inputRef = React52.useRef(null);
18355
+ const containerRef = React52.useRef(null);
19086
18356
  const selectedTags = tags.filter((t) => selectedIds.includes(t.id));
19087
18357
  const filtered = tags.filter(
19088
18358
  (t) => t.name.toLowerCase().includes(search.toLowerCase())
19089
18359
  );
19090
18360
  const showCreateOption = onCreateTag && search.trim() && !tags.some((t) => t.name.toLowerCase() === search.trim().toLowerCase());
19091
- const toggleTag = React53.useCallback(
18361
+ const toggleTag = React52.useCallback(
19092
18362
  (id) => {
19093
18363
  if (selectedIds.includes(id)) {
19094
18364
  onChange(selectedIds.filter((i) => i !== id));
@@ -19098,32 +18368,32 @@ function TagsManager({
19098
18368
  },
19099
18369
  [selectedIds, onChange]
19100
18370
  );
19101
- const handleCreate = React53.useCallback(async () => {
18371
+ const handleCreate = React52.useCallback(async () => {
19102
18372
  if (!onCreateTag) return;
19103
18373
  const name = search.trim();
19104
18374
  if (!name) return;
19105
18375
  const result = await onCreateTag(name);
19106
- if (_optionalChain([result, 'optionalAccess', _522 => _522.id])) {
18376
+ if (_optionalChain([result, 'optionalAccess', _453 => _453.id])) {
19107
18377
  onChange([...selectedIds, result.id]);
19108
18378
  setSearch("");
19109
18379
  }
19110
18380
  }, [search, onCreateTag, selectedIds, onChange]);
19111
- const startEdit = React53.useCallback((id, name) => {
18381
+ const startEdit = React52.useCallback((id, name) => {
19112
18382
  setEditingId(id);
19113
18383
  setEditingName(name);
19114
- setTimeout(() => _optionalChain([editInputRef, 'access', _523 => _523.current, 'optionalAccess', _524 => _524.focus, 'call', _525 => _525()]), 0);
18384
+ setTimeout(() => _optionalChain([editInputRef, 'access', _454 => _454.current, 'optionalAccess', _455 => _455.focus, 'call', _456 => _456()]), 0);
19115
18385
  }, []);
19116
- const confirmEdit = React53.useCallback(async () => {
18386
+ const confirmEdit = React52.useCallback(async () => {
19117
18387
  if (!onUpdateTag || !editingId || !editingName.trim()) return;
19118
18388
  await onUpdateTag(editingId, editingName.trim());
19119
18389
  setEditingId(null);
19120
18390
  setEditingName("");
19121
18391
  }, [editingId, editingName, onUpdateTag]);
19122
- const cancelEdit = React53.useCallback(() => {
18392
+ const cancelEdit = React52.useCallback(() => {
19123
18393
  setEditingId(null);
19124
18394
  setEditingName("");
19125
18395
  }, []);
19126
- const handleDelete = React53.useCallback(
18396
+ const handleDelete = React52.useCallback(
19127
18397
  async (id) => {
19128
18398
  if (!onDeleteTag) return;
19129
18399
  await onDeleteTag(id);
@@ -19133,12 +18403,12 @@ function TagsManager({
19133
18403
  },
19134
18404
  [onDeleteTag, selectedIds, onChange]
19135
18405
  );
19136
- const handleClearAll = React53.useCallback(
18406
+ const handleClearAll = React52.useCallback(
19137
18407
  (e) => {
19138
18408
  e.stopPropagation();
19139
18409
  onChange([]);
19140
18410
  setSearch("");
19141
- _optionalChain([inputRef, 'access', _526 => _526.current, 'optionalAccess', _527 => _527.focus, 'call', _528 => _528()]);
18411
+ _optionalChain([inputRef, 'access', _457 => _457.current, 'optionalAccess', _458 => _458.focus, 'call', _459 => _459()]);
19142
18412
  },
19143
18413
  [onChange]
19144
18414
  );
@@ -19237,10 +18507,10 @@ function TagsManager({
19237
18507
  align: "start",
19238
18508
  onOpenAutoFocus: (e) => {
19239
18509
  e.preventDefault();
19240
- _optionalChain([inputRef, 'access', _529 => _529.current, 'optionalAccess', _530 => _530.focus, 'call', _531 => _531()]);
18510
+ _optionalChain([inputRef, 'access', _460 => _460.current, 'optionalAccess', _461 => _461.focus, 'call', _462 => _462()]);
19241
18511
  },
19242
18512
  onInteractOutside: (e) => {
19243
- if (_optionalChain([containerRef, 'access', _532 => _532.current, 'optionalAccess', _533 => _533.contains, 'call', _534 => _534(e.target)])) {
18513
+ if (_optionalChain([containerRef, 'access', _463 => _463.current, 'optionalAccess', _464 => _464.contains, 'call', _465 => _465(e.target)])) {
19244
18514
  e.preventDefault();
19245
18515
  }
19246
18516
  },
@@ -19434,7 +18704,7 @@ var _reactalertdialog = require('@radix-ui/react-alert-dialog'); var AlertDialog
19434
18704
  var AlertDialog = AlertDialogPrimitive.Root;
19435
18705
  var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
19436
18706
  var AlertDialogPortal = AlertDialogPrimitive.Portal;
19437
- var AlertDialogOverlay = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18707
+ var AlertDialogOverlay = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19438
18708
  AlertDialogPrimitive.Overlay,
19439
18709
  {
19440
18710
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
@@ -19446,7 +18716,7 @@ var AlertDialogOverlay = React54.forwardRef(({ className, ...props }, ref) => /*
19446
18716
  }
19447
18717
  ));
19448
18718
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
19449
- var AlertDialogContent = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, AlertDialogPortal, { children: [
18719
+ var AlertDialogContent = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, AlertDialogPortal, { children: [
19450
18720
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AlertDialogOverlay, {}),
19451
18721
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19452
18722
  AlertDialogPrimitive.Content,
@@ -19489,7 +18759,7 @@ var AlertDialogFooter = ({
19489
18759
  }
19490
18760
  );
19491
18761
  AlertDialogFooter.displayName = "AlertDialogFooter";
19492
- var AlertDialogTitle = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18762
+ var AlertDialogTitle = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19493
18763
  AlertDialogPrimitive.Title,
19494
18764
  {
19495
18765
  ref,
@@ -19498,7 +18768,7 @@ var AlertDialogTitle = React54.forwardRef(({ className, ...props }, ref) => /* @
19498
18768
  }
19499
18769
  ));
19500
18770
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
19501
- var AlertDialogDescription = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18771
+ var AlertDialogDescription = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19502
18772
  AlertDialogPrimitive.Description,
19503
18773
  {
19504
18774
  ref,
@@ -19507,7 +18777,7 @@ var AlertDialogDescription = React54.forwardRef(({ className, ...props }, ref) =
19507
18777
  }
19508
18778
  ));
19509
18779
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
19510
- var AlertDialogAction = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18780
+ var AlertDialogAction = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19511
18781
  AlertDialogPrimitive.Action,
19512
18782
  {
19513
18783
  ref,
@@ -19516,7 +18786,7 @@ var AlertDialogAction = React54.forwardRef(({ className, ...props }, ref) => /*
19516
18786
  }
19517
18787
  ));
19518
18788
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
19519
- var AlertDialogCancel = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18789
+ var AlertDialogCancel = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19520
18790
  AlertDialogPrimitive.Cancel,
19521
18791
  {
19522
18792
  ref,
@@ -19544,7 +18814,7 @@ var Dialog = DialogPrimitive3.Root;
19544
18814
  var DialogTrigger = DialogPrimitive3.Trigger;
19545
18815
  var DialogPortal = DialogPrimitive3.Portal;
19546
18816
  var DialogClose = DialogPrimitive3.Close;
19547
- var DialogOverlay = React55.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18817
+ var DialogOverlay = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19548
18818
  DialogPrimitive3.Overlay,
19549
18819
  {
19550
18820
  ref,
@@ -19556,7 +18826,7 @@ var DialogOverlay = React55.forwardRef(({ className, ...props }, ref) => /* @__P
19556
18826
  }
19557
18827
  ));
19558
18828
  DialogOverlay.displayName = DialogPrimitive3.Overlay.displayName;
19559
- var DialogContent = React55.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DialogPortal, { children: [
18829
+ var DialogContent = React54.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DialogPortal, { children: [
19560
18830
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DialogOverlay, {}),
19561
18831
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19562
18832
  DialogPrimitive3.Content,
@@ -19582,7 +18852,7 @@ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ _jsxruntime.jsx.
19582
18852
  DialogHeader.displayName = "DialogHeader";
19583
18853
  var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex flex-col-reverse md:flex-row md:justify-end md:space-x-2", className), ...props });
19584
18854
  DialogFooter.displayName = "DialogFooter";
19585
- var DialogTitle = React55.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18855
+ var DialogTitle = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19586
18856
  DialogPrimitive3.Title,
19587
18857
  {
19588
18858
  ref,
@@ -19591,7 +18861,7 @@ var DialogTitle = React55.forwardRef(({ className, ...props }, ref) => /* @__PUR
19591
18861
  }
19592
18862
  ));
19593
18863
  DialogTitle.displayName = DialogPrimitive3.Title.displayName;
19594
- var DialogDescription = React55.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DialogPrimitive3.Description, { ref, className: _chunkOFAYLG6Dcjs.cn.call(void 0, "text-sm text-muted-foreground", className), ...props }));
18864
+ var DialogDescription = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DialogPrimitive3.Description, { ref, className: _chunkOFAYLG6Dcjs.cn.call(void 0, "text-sm text-muted-foreground", className), ...props }));
19595
18865
  DialogDescription.displayName = DialogPrimitive3.Description.displayName;
19596
18866
 
19597
18867
  // src/components/ui/modal.tsx
@@ -19599,7 +18869,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19599
18869
 
19600
18870
 
19601
18871
 
19602
- var Modal = React56.forwardRef(
18872
+ var Modal = React55.forwardRef(
19603
18873
  ({ isOpen, onClose, children, className }, ref) => {
19604
18874
  _react.useEffect.call(void 0, () => {
19605
18875
  const handleKeyDown = (event) => {
@@ -19643,11 +18913,11 @@ var Modal = React56.forwardRef(
19643
18913
  }
19644
18914
  );
19645
18915
  Modal.displayName = "Modal";
19646
- var ModalContent = React56.forwardRef(
18916
+ var ModalContent = React55.forwardRef(
19647
18917
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunkOFAYLG6Dcjs.cn.call(void 0, "overflow-y-auto min-h-0 flex-1", className), children })
19648
18918
  );
19649
18919
  ModalContent.displayName = "ModalContent";
19650
- var ModalHeader = React56.forwardRef(
18920
+ var ModalHeader = React55.forwardRef(
19651
18921
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19652
18922
  "div",
19653
18923
  {
@@ -19658,7 +18928,7 @@ var ModalHeader = React56.forwardRef(
19658
18928
  )
19659
18929
  );
19660
18930
  ModalHeader.displayName = "ModalHeader";
19661
- var ModalTitle = React56.forwardRef(
18931
+ var ModalTitle = React55.forwardRef(
19662
18932
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19663
18933
  "h2",
19664
18934
  {
@@ -19669,7 +18939,7 @@ var ModalTitle = React56.forwardRef(
19669
18939
  )
19670
18940
  );
19671
18941
  ModalTitle.displayName = "ModalTitle";
19672
- var ModalFooter = React56.forwardRef(
18942
+ var ModalFooter = React55.forwardRef(
19673
18943
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19674
18944
  "div",
19675
18945
  {
@@ -19686,8 +18956,8 @@ ModalFooter.displayName = "ModalFooter";
19686
18956
 
19687
18957
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19688
18958
 
19689
- var ModalContext = React57.createContext({});
19690
- var Modal2 = React57.forwardRef(
18959
+ var ModalContext = React56.createContext({});
18960
+ var Modal2 = React56.forwardRef(
19691
18961
  ({ isOpen, onClose, children, className }, ref) => {
19692
18962
  _react.useEffect.call(void 0, () => {
19693
18963
  const handleKeyDown = (event) => {
@@ -19736,13 +19006,13 @@ var Modal2 = React57.forwardRef(
19736
19006
  }
19737
19007
  );
19738
19008
  Modal2.displayName = "ModalV2";
19739
- var ModalContent2 = React57.forwardRef(
19009
+ var ModalContent2 = React56.forwardRef(
19740
19010
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex-1 min-h-0 overflow-y-auto", className), children })
19741
19011
  );
19742
19012
  ModalContent2.displayName = "ModalV2Content";
19743
- var ModalHeader2 = React57.forwardRef(
19013
+ var ModalHeader2 = React56.forwardRef(
19744
19014
  ({ children, className }, ref) => {
19745
- const { onClose } = React57.useContext(ModalContext);
19015
+ const { onClose } = React56.useContext(ModalContext);
19746
19016
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19747
19017
  "div",
19748
19018
  {
@@ -19765,7 +19035,7 @@ var ModalHeader2 = React57.forwardRef(
19765
19035
  }
19766
19036
  );
19767
19037
  ModalHeader2.displayName = "ModalV2Header";
19768
- var ModalTitle2 = React57.forwardRef(
19038
+ var ModalTitle2 = React56.forwardRef(
19769
19039
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19770
19040
  "h2",
19771
19041
  {
@@ -19776,7 +19046,7 @@ var ModalTitle2 = React57.forwardRef(
19776
19046
  )
19777
19047
  );
19778
19048
  ModalTitle2.displayName = "ModalV2Title";
19779
- var ModalFooter2 = React57.forwardRef(
19049
+ var ModalFooter2 = React56.forwardRef(
19780
19050
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19781
19051
  "div",
19782
19052
  {
@@ -19793,7 +19063,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19793
19063
 
19794
19064
  var _reactseparator = require('@radix-ui/react-separator'); var SeparatorPrimitive = _interopRequireWildcard(_reactseparator);
19795
19065
 
19796
- var Separator2 = React58.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19066
+ var Separator2 = React57.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19797
19067
  SeparatorPrimitive.Root,
19798
19068
  {
19799
19069
  ref,
@@ -19816,7 +19086,7 @@ var Sheet = SheetPrimitive.Root;
19816
19086
  var SheetTrigger = SheetPrimitive.Trigger;
19817
19087
  var SheetClose = SheetPrimitive.Close;
19818
19088
  var SheetPortal = SheetPrimitive.Portal;
19819
- var SheetOverlay = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19089
+ var SheetOverlay = React58.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19820
19090
  SheetPrimitive.Overlay,
19821
19091
  {
19822
19092
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
@@ -19844,7 +19114,7 @@ var sheetVariants = _classvarianceauthority.cva.call(void 0,
19844
19114
  }
19845
19115
  }
19846
19116
  );
19847
- var SheetContent = React59.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, SheetPortal, { children: [
19117
+ var SheetContent = React58.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, SheetPortal, { children: [
19848
19118
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetOverlay, {}),
19849
19119
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19850
19120
  SheetPrimitive.Content,
@@ -19891,7 +19161,7 @@ var SheetFooter = ({
19891
19161
  }
19892
19162
  );
19893
19163
  SheetFooter.displayName = "SheetFooter";
19894
- var SheetTitle = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19164
+ var SheetTitle = React58.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19895
19165
  SheetPrimitive.Title,
19896
19166
  {
19897
19167
  ref,
@@ -19900,7 +19170,7 @@ var SheetTitle = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE
19900
19170
  }
19901
19171
  ));
19902
19172
  SheetTitle.displayName = SheetPrimitive.Title.displayName;
19903
- var SheetDescription = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19173
+ var SheetDescription = React58.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19904
19174
  SheetPrimitive.Description,
19905
19175
  {
19906
19176
  ref,
@@ -19916,7 +19186,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19916
19186
  var _reacttabs = require('@radix-ui/react-tabs'); var TabsPrimitive = _interopRequireWildcard(_reacttabs);
19917
19187
 
19918
19188
  var Tabs = TabsPrimitive.Root;
19919
- var TabsList = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19189
+ var TabsList = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19920
19190
  TabsPrimitive.List,
19921
19191
  {
19922
19192
  ref,
@@ -19928,7 +19198,7 @@ var TabsList = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__
19928
19198
  }
19929
19199
  ));
19930
19200
  TabsList.displayName = TabsPrimitive.List.displayName;
19931
- var TabsTrigger = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19201
+ var TabsTrigger = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19932
19202
  TabsPrimitive.Trigger,
19933
19203
  {
19934
19204
  ref,
@@ -19940,7 +19210,7 @@ var TabsTrigger = React60.forwardRef(({ className, ...props }, ref) => /* @__PUR
19940
19210
  }
19941
19211
  ));
19942
19212
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
19943
- var TabsContent = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19213
+ var TabsContent = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19944
19214
  TabsPrimitive.Content,
19945
19215
  {
19946
19216
  ref,
@@ -19960,9 +19230,9 @@ var _reactaccordion = require('@radix-ui/react-accordion'); var AccordionPrimiti
19960
19230
 
19961
19231
 
19962
19232
  var Accordion = AccordionPrimitive.Root;
19963
- var AccordionItem = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionPrimitive.Item, { ref, className: _chunkOFAYLG6Dcjs.cn.call(void 0, "border-b", className), ...props }));
19233
+ var AccordionItem = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionPrimitive.Item, { ref, className: _chunkOFAYLG6Dcjs.cn.call(void 0, "border-b", className), ...props }));
19964
19234
  AccordionItem.displayName = "AccordionItem";
19965
- var AccordionTrigger = React61.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19235
+ var AccordionTrigger = React60.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19966
19236
  AccordionPrimitive.Trigger,
19967
19237
  {
19968
19238
  ref,
@@ -19978,7 +19248,7 @@ var AccordionTrigger = React61.forwardRef(({ className, children, ...props }, re
19978
19248
  }
19979
19249
  ) }));
19980
19250
  AccordionTrigger.displayName = "AccordionTrigger";
19981
- var AccordionContent = React61.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19251
+ var AccordionContent = React60.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19982
19252
  AccordionPrimitive.Content,
19983
19253
  {
19984
19254
  ref,
@@ -19998,9 +19268,9 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19998
19268
  var _reactslot = require('@radix-ui/react-slot');
19999
19269
 
20000
19270
 
20001
- var Breadcrumb = React62.forwardRef(({ ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { ref, "aria-label": "breadcrumb", ...props }));
19271
+ var Breadcrumb = React61.forwardRef(({ ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { ref, "aria-label": "breadcrumb", ...props }));
20002
19272
  Breadcrumb.displayName = "Breadcrumb";
20003
- var BreadcrumbList = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19273
+ var BreadcrumbList = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20004
19274
  "ol",
20005
19275
  {
20006
19276
  ref,
@@ -20012,7 +19282,7 @@ var BreadcrumbList = React62.forwardRef(({ className, ...props }, ref) => /* @__
20012
19282
  }
20013
19283
  ));
20014
19284
  BreadcrumbList.displayName = "BreadcrumbList";
20015
- var BreadcrumbItem = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19285
+ var BreadcrumbItem = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20016
19286
  "li",
20017
19287
  {
20018
19288
  ref,
@@ -20021,7 +19291,7 @@ var BreadcrumbItem = React62.forwardRef(({ className, ...props }, ref) => /* @__
20021
19291
  }
20022
19292
  ));
20023
19293
  BreadcrumbItem.displayName = "BreadcrumbItem";
20024
- var BreadcrumbLink = React62.forwardRef(({ asChild, className, ...props }, ref) => {
19294
+ var BreadcrumbLink = React61.forwardRef(({ asChild, className, ...props }, ref) => {
20025
19295
  const Comp = asChild ? _reactslot.Slot : "a";
20026
19296
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20027
19297
  Comp,
@@ -20033,7 +19303,7 @@ var BreadcrumbLink = React62.forwardRef(({ asChild, className, ...props }, ref)
20033
19303
  );
20034
19304
  });
20035
19305
  BreadcrumbLink.displayName = "BreadcrumbLink";
20036
- var BreadcrumbPage = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19306
+ var BreadcrumbPage = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20037
19307
  "span",
20038
19308
  {
20039
19309
  ref,
@@ -20089,7 +19359,7 @@ var MenubarGroup = MenubarPrimitive.Group;
20089
19359
  var MenubarPortal = MenubarPrimitive.Portal;
20090
19360
  var MenubarSub = MenubarPrimitive.Sub;
20091
19361
  var MenubarRadioGroup = MenubarPrimitive.RadioGroup;
20092
- var Menubar = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19362
+ var Menubar = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20093
19363
  MenubarPrimitive.Root,
20094
19364
  {
20095
19365
  ref,
@@ -20101,7 +19371,7 @@ var Menubar = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__
20101
19371
  }
20102
19372
  ));
20103
19373
  Menubar.displayName = MenubarPrimitive.Root.displayName;
20104
- var MenubarTrigger = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19374
+ var MenubarTrigger = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20105
19375
  MenubarPrimitive.Trigger,
20106
19376
  {
20107
19377
  ref,
@@ -20113,7 +19383,7 @@ var MenubarTrigger = React63.forwardRef(({ className, ...props }, ref) => /* @__
20113
19383
  }
20114
19384
  ));
20115
19385
  MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
20116
- var MenubarSubTrigger = React63.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19386
+ var MenubarSubTrigger = React62.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
20117
19387
  MenubarPrimitive.SubTrigger,
20118
19388
  {
20119
19389
  ref,
@@ -20130,7 +19400,7 @@ var MenubarSubTrigger = React63.forwardRef(({ className, inset, children, ...pro
20130
19400
  }
20131
19401
  ));
20132
19402
  MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
20133
- var MenubarSubContent = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19403
+ var MenubarSubContent = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20134
19404
  MenubarPrimitive.SubContent,
20135
19405
  {
20136
19406
  ref,
@@ -20142,7 +19412,7 @@ var MenubarSubContent = React63.forwardRef(({ className, ...props }, ref) => /*
20142
19412
  }
20143
19413
  ));
20144
19414
  MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
20145
- var MenubarContent = React63.forwardRef(
19415
+ var MenubarContent = React62.forwardRef(
20146
19416
  ({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MenubarPrimitive.Portal, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20147
19417
  MenubarPrimitive.Content,
20148
19418
  {
@@ -20159,7 +19429,7 @@ var MenubarContent = React63.forwardRef(
20159
19429
  ) })
20160
19430
  );
20161
19431
  MenubarContent.displayName = MenubarPrimitive.Content.displayName;
20162
- var MenubarItem = React63.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19432
+ var MenubarItem = React62.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20163
19433
  MenubarPrimitive.Item,
20164
19434
  {
20165
19435
  ref,
@@ -20172,7 +19442,7 @@ var MenubarItem = React63.forwardRef(({ className, inset, ...props }, ref) => /*
20172
19442
  }
20173
19443
  ));
20174
19444
  MenubarItem.displayName = MenubarPrimitive.Item.displayName;
20175
- var MenubarCheckboxItem = React63.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19445
+ var MenubarCheckboxItem = React62.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
20176
19446
  MenubarPrimitive.CheckboxItem,
20177
19447
  {
20178
19448
  ref,
@@ -20189,7 +19459,7 @@ var MenubarCheckboxItem = React63.forwardRef(({ className, children, checked, ..
20189
19459
  }
20190
19460
  ));
20191
19461
  MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
20192
- var MenubarRadioItem = React63.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19462
+ var MenubarRadioItem = React62.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
20193
19463
  MenubarPrimitive.RadioItem,
20194
19464
  {
20195
19465
  ref,
@@ -20205,7 +19475,7 @@ var MenubarRadioItem = React63.forwardRef(({ className, children, ...props }, re
20205
19475
  }
20206
19476
  ));
20207
19477
  MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
20208
- var MenubarLabel = React63.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19478
+ var MenubarLabel = React62.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20209
19479
  MenubarPrimitive.Label,
20210
19480
  {
20211
19481
  ref,
@@ -20218,7 +19488,7 @@ var MenubarLabel = React63.forwardRef(({ className, inset, ...props }, ref) => /
20218
19488
  }
20219
19489
  ));
20220
19490
  MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
20221
- var MenubarSeparator = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19491
+ var MenubarSeparator = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20222
19492
  MenubarPrimitive.Separator,
20223
19493
  {
20224
19494
  ref,
@@ -20251,7 +19521,7 @@ var _reactnavigationmenu = require('@radix-ui/react-navigation-menu'); var Navig
20251
19521
 
20252
19522
 
20253
19523
 
20254
- var NavigationMenu = React64.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19524
+ var NavigationMenu = React63.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
20255
19525
  NavigationMenuPrimitive.Root,
20256
19526
  {
20257
19527
  ref,
@@ -20267,7 +19537,7 @@ var NavigationMenu = React64.forwardRef(({ className, children, ...props }, ref)
20267
19537
  }
20268
19538
  ));
20269
19539
  NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
20270
- var NavigationMenuList = React64.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19540
+ var NavigationMenuList = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20271
19541
  NavigationMenuPrimitive.List,
20272
19542
  {
20273
19543
  ref,
@@ -20283,7 +19553,7 @@ var NavigationMenuItem = NavigationMenuPrimitive.Item;
20283
19553
  var navigationMenuTriggerStyle = _classvarianceauthority.cva.call(void 0,
20284
19554
  "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"
20285
19555
  );
20286
- var NavigationMenuTrigger = React64.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19556
+ var NavigationMenuTrigger = React63.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
20287
19557
  NavigationMenuPrimitive.Trigger,
20288
19558
  {
20289
19559
  ref,
@@ -20303,7 +19573,7 @@ var NavigationMenuTrigger = React64.forwardRef(({ className, children, ...props
20303
19573
  }
20304
19574
  ));
20305
19575
  NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
20306
- var NavigationMenuContent = React64.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19576
+ var NavigationMenuContent = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20307
19577
  NavigationMenuPrimitive.Content,
20308
19578
  {
20309
19579
  ref,
@@ -20316,7 +19586,7 @@ var NavigationMenuContent = React64.forwardRef(({ className, ...props }, ref) =>
20316
19586
  ));
20317
19587
  NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
20318
19588
  var NavigationMenuLink = NavigationMenuPrimitive.Link;
20319
- var NavigationMenuViewport = React64.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19589
+ var NavigationMenuViewport = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20320
19590
  NavigationMenuPrimitive.Viewport,
20321
19591
  {
20322
19592
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
@@ -20328,7 +19598,7 @@ var NavigationMenuViewport = React64.forwardRef(({ className, ...props }, ref) =
20328
19598
  }
20329
19599
  ) }));
20330
19600
  NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
20331
- var NavigationMenuIndicator = React64.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19601
+ var NavigationMenuIndicator = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20332
19602
  NavigationMenuPrimitive.Indicator,
20333
19603
  {
20334
19604
  ref,
@@ -20387,19 +19657,19 @@ function TabNavigation({
20387
19657
  const validTabIds = _react.useMemo.call(void 0, () => new Set(tabs.map((t) => t.id)), [tabs]);
20388
19658
  const getInitialTab = () => {
20389
19659
  if (isUrlSyncEnabled) {
20390
- const fromUrl = _optionalChain([searchParams, 'optionalAccess', _535 => _535.get, 'call', _536 => _536(paramName)]) || "";
19660
+ const fromUrl = _optionalChain([searchParams, 'optionalAccess', _466 => _466.get, 'call', _467 => _467(paramName)]) || "";
20391
19661
  if (validTabIds.has(fromUrl)) {
20392
19662
  return fromUrl;
20393
19663
  }
20394
19664
  }
20395
- return defaultTab || _optionalChain([tabs, 'access', _537 => _537[0], 'optionalAccess', _538 => _538.id]) || "";
19665
+ return defaultTab || _optionalChain([tabs, 'access', _468 => _468[0], 'optionalAccess', _469 => _469.id]) || "";
20396
19666
  };
20397
19667
  const [internalActiveTab, setInternalActiveTab] = _react.useState.call(void 0, getInitialTab);
20398
19668
  const activeTab = isUrlSyncEnabled ? internalActiveTab : controlledActiveTab || "";
20399
19669
  _react.useEffect.call(void 0, () => {
20400
19670
  if (!isUrlSyncEnabled) return;
20401
- const fromUrl = _optionalChain([searchParams, 'optionalAccess', _539 => _539.get, 'call', _540 => _540(paramName)]) || "";
20402
- const nextTab = validTabIds.has(fromUrl) ? fromUrl : defaultTab || _optionalChain([tabs, 'access', _541 => _541[0], 'optionalAccess', _542 => _542.id]) || "";
19671
+ const fromUrl = _optionalChain([searchParams, 'optionalAccess', _470 => _470.get, 'call', _471 => _471(paramName)]) || "";
19672
+ const nextTab = validTabIds.has(fromUrl) ? fromUrl : defaultTab || _optionalChain([tabs, 'access', _472 => _472[0], 'optionalAccess', _473 => _473.id]) || "";
20403
19673
  if (nextTab !== internalActiveTab) {
20404
19674
  setInternalActiveTab(nextTab);
20405
19675
  }
@@ -20407,13 +19677,13 @@ function TabNavigation({
20407
19677
  const handleTabChange = (tabId) => {
20408
19678
  if (isUrlSyncEnabled) {
20409
19679
  setInternalActiveTab(tabId);
20410
- const params = new URLSearchParams(_optionalChain([searchParams, 'optionalAccess', _543 => _543.toString, 'call', _544 => _544()]));
19680
+ const params = new URLSearchParams(_optionalChain([searchParams, 'optionalAccess', _474 => _474.toString, 'call', _475 => _475()]));
20411
19681
  params.set(paramName, tabId);
20412
19682
  const method = replaceState ? "replace" : "push";
20413
19683
  router[method](`${pathname}?${params.toString()}`);
20414
- _optionalChain([controlledOnTabChange, 'optionalCall', _545 => _545(tabId)]);
19684
+ _optionalChain([controlledOnTabChange, 'optionalCall', _476 => _476(tabId)]);
20415
19685
  } else {
20416
- _optionalChain([controlledOnTabChange, 'optionalCall', _546 => _546(tabId)]);
19686
+ _optionalChain([controlledOnTabChange, 'optionalCall', _477 => _477(tabId)]);
20417
19687
  }
20418
19688
  };
20419
19689
  const scrollRef = _react.useRef.call(void 0, null);
@@ -20501,7 +19771,7 @@ function TabNavigation({
20501
19771
  var getTabById = (tabs, tabId) => tabs.find((tab) => tab.id === tabId);
20502
19772
  var getTabComponent = (tabs, tabId) => {
20503
19773
  const tab = getTabById(tabs, tabId);
20504
- return _optionalChain([tab, 'optionalAccess', _547 => _547.component]) || null;
19774
+ return _optionalChain([tab, 'optionalAccess', _478 => _478.component]) || null;
20505
19775
  };
20506
19776
 
20507
19777
  // src/components/ui/alert.tsx
@@ -20523,7 +19793,7 @@ var alertVariants = _classvarianceauthority.cva.call(void 0,
20523
19793
  }
20524
19794
  }
20525
19795
  );
20526
- var Alert = React66.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19796
+ var Alert = React65.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20527
19797
  "div",
20528
19798
  {
20529
19799
  ref,
@@ -20533,7 +19803,7 @@ var Alert = React66.forwardRef(({ className, variant, ...props }, ref) => /* @__
20533
19803
  }
20534
19804
  ));
20535
19805
  Alert.displayName = "Alert";
20536
- var AlertTitle = React66.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19806
+ var AlertTitle = React65.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20537
19807
  "h5",
20538
19808
  {
20539
19809
  ref,
@@ -20542,7 +19812,7 @@ var AlertTitle = React66.forwardRef(({ className, ...props }, ref) => /* @__PURE
20542
19812
  }
20543
19813
  ));
20544
19814
  AlertTitle.displayName = "AlertTitle";
20545
- var AlertDescription = React66.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19815
+ var AlertDescription = React65.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20546
19816
  "div",
20547
19817
  {
20548
19818
  ref,
@@ -20557,7 +19827,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
20557
19827
 
20558
19828
  var _reactprogress = require('@radix-ui/react-progress'); var ProgressPrimitive = _interopRequireWildcard(_reactprogress);
20559
19829
 
20560
- var Progress = React67.forwardRef(({ className, value, indicatorClassName, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19830
+ var Progress = React66.forwardRef(({ className, value, indicatorClassName, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20561
19831
  ProgressPrimitive.Root,
20562
19832
  {
20563
19833
  ref,
@@ -20838,16 +20108,16 @@ function FilterModal({
20838
20108
  };
20839
20109
  const handleReset = () => {
20840
20110
  onFilterChange({});
20841
- _optionalChain([onTagsChange, 'optionalCall', _548 => _548([])]);
20111
+ _optionalChain([onTagsChange, 'optionalCall', _479 => _479([])]);
20842
20112
  onClose();
20843
20113
  };
20844
20114
  const handleApply = () => {
20845
20115
  onFilterChange(selectedFilters);
20846
- _optionalChain([onTagsChange, 'optionalCall', _549 => _549(pendingTags)]);
20116
+ _optionalChain([onTagsChange, 'optionalCall', _480 => _480(pendingTags)]);
20847
20117
  onClose();
20848
20118
  };
20849
20119
  const getColumnDirection = (columnKey) => {
20850
- return _optionalChain([sortConfig, 'optionalAccess', _550 => _550.sortBy]) === columnKey ? sortConfig.sortDirection : void 0;
20120
+ return _optionalChain([sortConfig, 'optionalAccess', _481 => _481.sortBy]) === columnKey ? sortConfig.sortDirection : void 0;
20851
20121
  };
20852
20122
  const hasSort = !!sortConfig && sortConfig.columns.length > 0;
20853
20123
  const hasFilterGroups = filterGroups.length > 0;
@@ -20896,7 +20166,7 @@ function FilterModal({
20896
20166
  {
20897
20167
  column,
20898
20168
  currentDirection: getColumnDirection(column.key),
20899
- onSort: (direction) => _optionalChain([onSort, 'optionalCall', _551 => _551(column.key, direction)]),
20169
+ onSort: (direction) => _optionalChain([onSort, 'optionalCall', _482 => _482(column.key, direction)]),
20900
20170
  onClear: onSortClear ? () => onSortClear(column.key) : void 0
20901
20171
  },
20902
20172
  column.key
@@ -21062,9 +20332,9 @@ function TitleBlock({
21062
20332
  const [imageFailed, setImageFailed] = React33.default.useState(false);
21063
20333
  React33.default.useEffect(() => {
21064
20334
  setImageFailed(false);
21065
- }, [_optionalChain([image, 'optionalAccess', _552 => _552.src])]);
20335
+ }, [_optionalChain([image, 'optionalAccess', _483 => _483.src])]);
21066
20336
  const showImageFallback = !!image && (imageFailed || !image.src);
21067
- const initials = getInitials3(_optionalChain([image, 'optionalAccess', _553 => _553.alt]) || title);
20337
+ const initials = getInitials3(_optionalChain([image, 'optionalAccess', _484 => _484.alt]) || title);
21068
20338
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
21069
20339
  "div",
21070
20340
  {
@@ -21198,7 +20468,7 @@ var toggleVariants = _classvarianceauthority.cva.call(void 0,
21198
20468
  }
21199
20469
  }
21200
20470
  );
21201
- var Toggle = React70.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20471
+ var Toggle = React69.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
21202
20472
  TogglePrimitive.Root,
21203
20473
  {
21204
20474
  ref,
@@ -21210,11 +20480,11 @@ Toggle.displayName = TogglePrimitive.Root.displayName;
21210
20480
 
21211
20481
  // src/components/toggle-group.tsx
21212
20482
 
21213
- var ToggleGroupContext = React71.createContext({
20483
+ var ToggleGroupContext = React70.createContext({
21214
20484
  size: "default",
21215
20485
  variant: "default"
21216
20486
  });
21217
- var ToggleGroup = React71.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20487
+ var ToggleGroup = React70.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
21218
20488
  ToggleGroupPrimitive.Root,
21219
20489
  {
21220
20490
  ref,
@@ -21224,8 +20494,8 @@ var ToggleGroup = React71.forwardRef(({ className, variant, size, children, ...p
21224
20494
  }
21225
20495
  ));
21226
20496
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
21227
- var ToggleGroupItem = React71.forwardRef(({ className, children, variant, size, value, ...props }, ref) => {
21228
- const context = React71.useContext(ToggleGroupContext);
20497
+ var ToggleGroupItem = React70.forwardRef(({ className, children, variant, size, value, ...props }, ref) => {
20498
+ const context = React70.useContext(ToggleGroupContext);
21229
20499
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
21230
20500
  ToggleGroupPrimitive.Item,
21231
20501
  {
@@ -21584,8 +20854,8 @@ function FloatingTooltip({
21584
20854
  className,
21585
20855
  delayDuration = 0
21586
20856
  }) {
21587
- const [isOpen, setIsOpen] = React74.useState(false);
21588
- const arrowRef = React74.useRef(null);
20857
+ const [isOpen, setIsOpen] = React73.useState(false);
20858
+ const arrowRef = React73.useRef(null);
21589
20859
  const { refs, floatingStyles, context, placement, middlewareData } = _react2.useFloating.call(void 0, {
21590
20860
  open: isOpen,
21591
20861
  onOpenChange: setIsOpen,
@@ -21614,7 +20884,7 @@ function FloatingTooltip({
21614
20884
  dismiss,
21615
20885
  role
21616
20886
  ]);
21617
- const parsedContent = React74.useMemo(() => {
20887
+ const parsedContent = React73.useMemo(() => {
21618
20888
  if (typeof content === "string") {
21619
20889
  return parseColoredText(content);
21620
20890
  }
@@ -21860,26 +21130,26 @@ function DeviceCard({
21860
21130
  ] }),
21861
21131
  device.organization && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary truncate", children: device.organization })
21862
21132
  ] }),
21863
- _optionalChain([actions, 'access', _554 => _554.moreButton, 'optionalAccess', _555 => _555.visible]) !== false && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
21133
+ _optionalChain([actions, 'access', _485 => _485.moreButton, 'optionalAccess', _486 => _486.visible]) !== false && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
21864
21134
  "div",
21865
21135
  {
21866
21136
  className: "flex items-center justify-center p-3 rounded-[6px] shrink-0 border border-ods-border cursor-pointer hover:bg-ods-bg-hover transition-colors",
21867
21137
  onClick: (e) => {
21868
21138
  e.stopPropagation();
21869
- _optionalChain([actions, 'access', _556 => _556.moreButton, 'optionalAccess', _557 => _557.onClick, 'optionalCall', _558 => _558()]);
21139
+ _optionalChain([actions, 'access', _487 => _487.moreButton, 'optionalAccess', _488 => _488.onClick, 'optionalCall', _489 => _489()]);
21870
21140
  },
21871
21141
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.Ellipsis01Icon, { className: "text-ods-text-primary" })
21872
21142
  }
21873
21143
  ),
21874
- _optionalChain([actions, 'access', _559 => _559.detailsButton, 'optionalAccess', _560 => _560.visible]) !== false && _optionalChain([actions, 'access', _561 => _561.detailsButton, 'optionalAccess', _562 => _562.component]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "shrink-0", onClick: (e) => e.stopPropagation(), children: actions.detailsButton.component }),
21875
- _optionalChain([actions, 'access', _563 => _563.customActions, 'optionalAccess', _564 => _564.map, 'call', _565 => _565(
21144
+ _optionalChain([actions, 'access', _490 => _490.detailsButton, 'optionalAccess', _491 => _491.visible]) !== false && _optionalChain([actions, 'access', _492 => _492.detailsButton, 'optionalAccess', _493 => _493.component]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "shrink-0", onClick: (e) => e.stopPropagation(), children: actions.detailsButton.component }),
21145
+ _optionalChain([actions, 'access', _494 => _494.customActions, 'optionalAccess', _495 => _495.map, 'call', _496 => _496(
21876
21146
  (action, index) => action.visible !== false && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
21877
21147
  "div",
21878
21148
  {
21879
21149
  className: "flex items-center justify-center px-4 py-3 rounded-[6px] shrink-0 border border-ods-border cursor-pointer hover:bg-ods-bg-hover transition-colors",
21880
21150
  onClick: (e) => {
21881
21151
  e.stopPropagation();
21882
- _optionalChain([action, 'access', _566 => _566.onClick, 'optionalCall', _567 => _567()]);
21152
+ _optionalChain([action, 'access', _497 => _497.onClick, 'optionalCall', _498 => _498()]);
21883
21153
  },
21884
21154
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-h3 text-ods-text-primary text-nowrap tracking-[-0.36px]", children: action.label })
21885
21155
  },
@@ -22159,7 +21429,7 @@ function HighlightCardGrid({
22159
21429
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
22160
21430
 
22161
21431
 
22162
- var IconsBlock = React75.forwardRef(
21432
+ var IconsBlock = React74.forwardRef(
22163
21433
  ({ className, icons = [], size = "md", ...props }, ref) => {
22164
21434
  const sizeClasses5 = {
22165
21435
  sm: "h-4 w-4",
@@ -22238,7 +21508,7 @@ function MoreActionsMenu({
22238
21508
  ] });
22239
21509
  const handleActivate = (e) => {
22240
21510
  e.stopPropagation();
22241
- if (!item.disabled) _optionalChain([item, 'access', _568 => _568.onClick, 'optionalCall', _569 => _569()]);
21511
+ if (!item.disabled) _optionalChain([item, 'access', _499 => _499.onClick, 'optionalCall', _500 => _500()]);
22242
21512
  };
22243
21513
  if (item.href) {
22244
21514
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -22388,7 +21658,7 @@ function OrganizationIcon({
22388
21658
  backgroundStyle = "dark"
22389
21659
  }) {
22390
21660
  const { width, height } = imageSizeMap2[size];
22391
- const initials = _optionalChain([organizationName, 'optionalAccess', _570 => _570.substring, 'call', _571 => _571(0, 2)]) || "??";
21661
+ const initials = _optionalChain([organizationName, 'optionalAccess', _501 => _501.substring, 'call', _502 => _502(0, 2)]) || "??";
22392
21662
  const containerClasses = _chunkOFAYLG6Dcjs.cn.call(void 0,
22393
21663
  sizeClasses3[size],
22394
21664
  "rounded-lg flex items-center justify-center flex-shrink-0 relative",
@@ -22439,7 +21709,7 @@ function OrganizationCard({
22439
21709
  const handleActionClick = (e) => {
22440
21710
  e.preventDefault();
22441
21711
  e.stopPropagation();
22442
- _optionalChain([actionButton, 'optionalAccess', _572 => _572.onClick, 'call', _573 => _573(organization, e)]);
21712
+ _optionalChain([actionButton, 'optionalAccess', _503 => _503.onClick, 'call', _504 => _504(organization, e)]);
22443
21713
  };
22444
21714
  const card = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
22445
21715
  "div",
@@ -22534,7 +21804,7 @@ var LOG_SEVERITY_LABELS = {
22534
21804
 
22535
21805
  // src/components/log-severity-dot.tsx
22536
21806
 
22537
- var LogSeverityDot = React77.forwardRef(({ severity, size = "md", className }, ref) => {
21807
+ var LogSeverityDot = React76.forwardRef(({ severity, size = "md", className }, ref) => {
22538
21808
  const sizeClasses5 = {
22539
21809
  sm: "w-4 h-4",
22540
21810
  md: "w-6 h-6",
@@ -22596,7 +21866,7 @@ var LogCard = ({ log, isLast, showConnector, onClick }) => {
22596
21866
  onKeyDown: (e) => {
22597
21867
  if (e.key === "Enter" || e.key === " ") {
22598
21868
  e.preventDefault();
22599
- _optionalChain([onClick, 'optionalCall', _574 => _574()]);
21869
+ _optionalChain([onClick, 'optionalCall', _505 => _505()]);
22600
21870
  }
22601
21871
  },
22602
21872
  children: [
@@ -22624,7 +21894,7 @@ var LogCard = ({ log, isLast, showConnector, onClick }) => {
22624
21894
  )
22625
21895
  ] });
22626
21896
  };
22627
- var LogsList = React78.forwardRef(({
21897
+ var LogsList = React77.forwardRef(({
22628
21898
  logs,
22629
21899
  maxHeight = "400px",
22630
21900
  showConnector = true,
@@ -22633,7 +21903,7 @@ var LogsList = React78.forwardRef(({
22633
21903
  emptyMessage = "No logs to display",
22634
21904
  className
22635
21905
  }, ref) => {
22636
- const containerRef = React78.useRef(null);
21906
+ const containerRef = React77.useRef(null);
22637
21907
  const isFullHeight = maxHeight === "100%";
22638
21908
  const getContainerStyles = () => {
22639
21909
  if (isFullHeight) return void 0;
@@ -22697,7 +21967,7 @@ var LogsList = React78.forwardRef(({
22697
21967
  log,
22698
21968
  isLast: index === logs.length - 1,
22699
21969
  showConnector,
22700
- onClick: () => _optionalChain([onLogClick, 'optionalCall', _575 => _575(log)])
21970
+ onClick: () => _optionalChain([onLogClick, 'optionalCall', _506 => _506(log)])
22701
21971
  },
22702
21972
  log.id
22703
21973
  ))
@@ -22938,7 +22208,7 @@ var _reacttooltip = require('@radix-ui/react-tooltip'); var TooltipPrimitive = _
22938
22208
  var TooltipProvider = TooltipPrimitive.Provider;
22939
22209
  var Tooltip = TooltipPrimitive.Root;
22940
22210
  var TooltipTrigger = TooltipPrimitive.Trigger;
22941
- var TooltipContent = React80.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipPrimitive.Portal, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
22211
+ var TooltipContent = React79.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TooltipPrimitive.Portal, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
22942
22212
  TooltipPrimitive.Content,
22943
22213
  {
22944
22214
  ref,
@@ -23286,7 +22556,7 @@ function CursorPaginationSimple({
23286
22556
  {
23287
22557
  variant: "transparent",
23288
22558
  size: "icon",
23289
- onClick: () => _optionalChain([onPrevious, 'optionalCall', _576 => _576("")]),
22559
+ onClick: () => _optionalChain([onPrevious, 'optionalCall', _507 => _507("")]),
23290
22560
  disabled: !hasPreviousPage || loading,
23291
22561
  className: "h-8 w-8",
23292
22562
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft, { className: "h-4 w-4" }),
@@ -23298,7 +22568,7 @@ function CursorPaginationSimple({
23298
22568
  {
23299
22569
  variant: "transparent",
23300
22570
  size: "icon",
23301
- onClick: () => _optionalChain([onNext, 'optionalCall', _577 => _577("")]),
22571
+ onClick: () => _optionalChain([onNext, 'optionalCall', _508 => _508("")]),
23302
22572
  disabled: !hasNextPage || loading,
23303
22573
  className: "h-8 w-8",
23304
22574
  rightIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, { className: "h-4 w-4" }),
@@ -23358,7 +22628,7 @@ function TableColumnFilterDropdown({
23358
22628
  placement = "bottom-start",
23359
22629
  dropdownClassName = "min-w-[240px]"
23360
22630
  }) {
23361
- const activeCount = _optionalChain([filters, 'optionalAccess', _578 => _578[columnKey], 'optionalAccess', _579 => _579.length]) || 0;
22631
+ const activeCount = _optionalChain([filters, 'optionalAccess', _509 => _509[columnKey], 'optionalAccess', _510 => _510.length]) || 0;
23362
22632
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23363
22633
  FiltersDropdown,
23364
22634
  {
@@ -23401,7 +22671,7 @@ function TableColumnFilterDropdown({
23401
22671
  delete newFilters[columnKey];
23402
22672
  onFilterChange(newFilters);
23403
22673
  },
23404
- currentFilters: { [columnKey]: _optionalChain([filters, 'optionalAccess', _580 => _580[columnKey]]) || [] },
22674
+ currentFilters: { [columnKey]: _optionalChain([filters, 'optionalAccess', _511 => _511[columnKey]]) || [] },
23405
22675
  placement,
23406
22676
  dropdownClassName
23407
22677
  }
@@ -23698,7 +22968,7 @@ function TableRow({
23698
22968
  const keys = column.key.split(".");
23699
22969
  let value = item;
23700
22970
  for (const key of keys) {
23701
- value = _optionalChain([value, 'optionalAccess', _581 => _581[key]]);
22971
+ value = _optionalChain([value, 'optionalAccess', _512 => _512[key]]);
23702
22972
  }
23703
22973
  if (value === null || value === void 0) {
23704
22974
  return "-";
@@ -23768,7 +23038,7 @@ function TableRow({
23768
23038
  // src/components/ui/table/table.tsx
23769
23039
 
23770
23040
  function injectSyntheticColumns(columns, rowActions, renderRowActions, rowHref) {
23771
- const hasActions = Boolean(_optionalChain([rowActions, 'optionalAccess', _582 => _582.length])) || Boolean(renderRowActions);
23041
+ const hasActions = Boolean(_optionalChain([rowActions, 'optionalAccess', _513 => _513.length])) || Boolean(renderRowActions);
23772
23042
  const result = [...columns];
23773
23043
  if (hasActions) {
23774
23044
  const actionsColumn = {
@@ -23862,7 +23132,7 @@ function Table({
23862
23132
  return rowKey(item);
23863
23133
  }
23864
23134
  const key = item[rowKey];
23865
- return _optionalChain([key, 'optionalAccess', _583 => _583.toString, 'call', _584 => _584()]) || index.toString();
23135
+ return _optionalChain([key, 'optionalAccess', _514 => _514.toString, 'call', _515 => _515()]) || index.toString();
23866
23136
  };
23867
23137
  const getRowClassName = (item, index) => {
23868
23138
  if (typeof rowClassName === "function") {
@@ -23896,23 +23166,23 @@ function Table({
23896
23166
  const allSelected = selectedRows.length > 0 && selectedRows.length === data.length;
23897
23167
  const someSelected = selectedRows.length > 0 && selectedRows.length < data.length;
23898
23168
  const sentinelRef = _react.useRef.call(void 0, null);
23899
- const onLoadMoreRef = _react.useRef.call(void 0, _optionalChain([infiniteScroll, 'optionalAccess', _585 => _585.onLoadMore]));
23900
- onLoadMoreRef.current = _optionalChain([infiniteScroll, 'optionalAccess', _586 => _586.onLoadMore]);
23169
+ const onLoadMoreRef = _react.useRef.call(void 0, _optionalChain([infiniteScroll, 'optionalAccess', _516 => _516.onLoadMore]));
23170
+ onLoadMoreRef.current = _optionalChain([infiniteScroll, 'optionalAccess', _517 => _517.onLoadMore]);
23901
23171
  _react.useEffect.call(void 0, () => {
23902
- if (!_optionalChain([infiniteScroll, 'optionalAccess', _587 => _587.hasNextPage]) || infiniteScroll.isFetchingNextPage) return;
23172
+ if (!_optionalChain([infiniteScroll, 'optionalAccess', _518 => _518.hasNextPage]) || infiniteScroll.isFetchingNextPage) return;
23903
23173
  const sentinel = sentinelRef.current;
23904
23174
  if (!sentinel) return;
23905
23175
  const observer = new IntersectionObserver(
23906
23176
  (entries) => {
23907
- if (_optionalChain([entries, 'access', _588 => _588[0], 'optionalAccess', _589 => _589.isIntersecting])) {
23908
- _optionalChain([onLoadMoreRef, 'access', _590 => _590.current, 'optionalCall', _591 => _591()]);
23177
+ if (_optionalChain([entries, 'access', _519 => _519[0], 'optionalAccess', _520 => _520.isIntersecting])) {
23178
+ _optionalChain([onLoadMoreRef, 'access', _521 => _521.current, 'optionalCall', _522 => _522()]);
23909
23179
  }
23910
23180
  },
23911
23181
  { rootMargin: "200px" }
23912
23182
  );
23913
23183
  observer.observe(sentinel);
23914
23184
  return () => observer.disconnect();
23915
- }, [_optionalChain([infiniteScroll, 'optionalAccess', _592 => _592.hasNextPage]), _optionalChain([infiniteScroll, 'optionalAccess', _593 => _593.isFetchingNextPage])]);
23185
+ }, [_optionalChain([infiniteScroll, 'optionalAccess', _523 => _523.hasNextPage]), _optionalChain([infiniteScroll, 'optionalAccess', _524 => _524.isFetchingNextPage])]);
23916
23186
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex flex-col gap-1 w-full", containerClassName), children: [
23917
23187
  showToolbar && bulkActions && selectedRows.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between bg-ods-card border border-ods-border rounded-[6px] p-3 mb-2", children: [
23918
23188
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-ods-text-secondary text-sm", children: [
@@ -23983,7 +23253,7 @@ function Table({
23983
23253
  },
23984
23254
  getRowKey(item, index)
23985
23255
  )),
23986
- _optionalChain([infiniteScroll, 'optionalAccess', _594 => _594.isFetchingNextPage]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23256
+ _optionalChain([infiniteScroll, 'optionalAccess', _525 => _525.isFetchingNextPage]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23987
23257
  TableCardSkeleton,
23988
23258
  {
23989
23259
  columns,
@@ -23992,7 +23262,7 @@ function Table({
23992
23262
  hasChevron: Boolean(rowHref)
23993
23263
  }
23994
23264
  ),
23995
- _optionalChain([infiniteScroll, 'optionalAccess', _595 => _595.hasNextPage]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" }),
23265
+ _optionalChain([infiniteScroll, 'optionalAccess', _526 => _526.hasNextPage]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: sentinelRef, className: "h-1", "aria-hidden": "true" }),
23996
23266
  !infiniteScroll && Array.from({ length: Math.max(0, skeletonRows - data.length) }).map((_, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
23997
23267
  "div",
23998
23268
  {
@@ -24350,7 +23620,7 @@ function QueryReportTable({
24350
23620
  );
24351
23621
  const handleExport = () => {
24352
23622
  exportToCSV(data, columns, exportFilename);
24353
- _optionalChain([onExport, 'optionalCall', _596 => _596()]);
23623
+ _optionalChain([onExport, 'optionalCall', _527 => _527()]);
24354
23624
  };
24355
23625
  const tableMinWidth = columns.length * (columnWidth + 16);
24356
23626
  const {
@@ -24523,7 +23793,7 @@ function DataTableColumnFilter({
24523
23793
  align = "left"
24524
23794
  }) {
24525
23795
  const currentValue = column.getFilterValue();
24526
- const activeCount = _nullishCoalesce(_optionalChain([currentValue, 'optionalAccess', _597 => _597.length]), () => ( 0));
23796
+ const activeCount = _nullishCoalesce(_optionalChain([currentValue, 'optionalAccess', _528 => _528.length]), () => ( 0));
24527
23797
  const sections = _react.useMemo.call(void 0,
24528
23798
  () => [
24529
23799
  {
@@ -24603,7 +23873,7 @@ function DataTableHeader({
24603
23873
  const hasVisibleHeaderCell = headerGroup.headers.some((header) => {
24604
23874
  if (header.isPlaceholder) return false;
24605
23875
  if (isLgUp) return true;
24606
- return Boolean(_optionalChain([header, 'access', _598 => _598.column, 'access', _599 => _599.columnDef, 'access', _600 => _600.meta, 'optionalAccess', _601 => _601.filter]));
23876
+ return Boolean(_optionalChain([header, 'access', _529 => _529.column, 'access', _530 => _530.columnDef, 'access', _531 => _531.meta, 'optionalAccess', _532 => _532.filter]));
24607
23877
  });
24608
23878
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24609
23879
  "div",
@@ -24633,20 +23903,20 @@ function HeaderCell({ header, isLgUp, sort, onSortChange }) {
24633
23903
  if (header.isPlaceholder) return null;
24634
23904
  const column = header.column;
24635
23905
  const meta = column.columnDef.meta;
24636
- const hasFilter = Boolean(_optionalChain([meta, 'optionalAccess', _602 => _602.filter]));
24637
- const align = _nullishCoalesce(_optionalChain([meta, 'optionalAccess', _603 => _603.align]), () => ( "left"));
24638
- const canSort = _optionalChain([meta, 'optionalAccess', _604 => _604.sortable]) === true;
24639
- const sortDir = _optionalChain([sort, 'optionalAccess', _605 => _605.id]) === column.id ? sort.desc ? "desc" : "asc" : false;
23906
+ const hasFilter = Boolean(_optionalChain([meta, 'optionalAccess', _533 => _533.filter]));
23907
+ const align = _nullishCoalesce(_optionalChain([meta, 'optionalAccess', _534 => _534.align]), () => ( "left"));
23908
+ const canSort = _optionalChain([meta, 'optionalAccess', _535 => _535.sortable]) === true;
23909
+ const sortDir = _optionalChain([sort, 'optionalAccess', _536 => _536.id]) === column.id ? sort.desc ? "desc" : "asc" : false;
24640
23910
  if (!isLgUp && !hasFilter) return null;
24641
23911
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24642
23912
  "div",
24643
23913
  {
24644
23914
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
24645
23915
  "flex items-stretch",
24646
- isLgUp && (_optionalChain([meta, 'optionalAccess', _606 => _606.width]) || "flex-1 min-w-0"),
24647
- _optionalChain([meta, 'optionalAccess', _607 => _607.headerClassName]),
23916
+ isLgUp && (_optionalChain([meta, 'optionalAccess', _537 => _537.width]) || "flex-1 min-w-0"),
23917
+ _optionalChain([meta, 'optionalAccess', _538 => _538.headerClassName]),
24648
23918
  // Don't apply hide classes if column is filterable on tablet (keep filter accessible)
24649
- !(hasFilter && !isLgUp) && getHideClasses2(_optionalChain([meta, 'optionalAccess', _608 => _608.hideAt]))
23919
+ !(hasFilter && !isLgUp) && getHideClasses2(_optionalChain([meta, 'optionalAccess', _539 => _539.hideAt]))
24650
23920
  ),
24651
23921
  children: hasFilter ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24652
23922
  DataTableColumnFilter,
@@ -24665,7 +23935,7 @@ function HeaderCell({ header, isLgUp, sort, onSortChange }) {
24665
23935
  isLgUp && alignJustify(align),
24666
23936
  canSort && "group cursor-pointer"
24667
23937
  ),
24668
- onClick: canSort ? () => _optionalChain([onSortChange, 'optionalCall', _609 => _609(column.id)]) : void 0,
23938
+ onClick: canSort ? () => _optionalChain([onSortChange, 'optionalCall', _540 => _540(column.id)]) : void 0,
24669
23939
  children: [
24670
23940
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderLabel, { header }),
24671
23941
  canSort && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortIcon, { sorted: sortDir })
@@ -24749,7 +24019,7 @@ function DataTableSkeleton({
24749
24019
  }) {
24750
24020
  const table = useDataTableContext();
24751
24021
  const columns = table.getVisibleFlatColumns();
24752
- const firstColumnId = _optionalChain([columns, 'access', _610 => _610[0], 'optionalAccess', _611 => _611.id]);
24022
+ const firstColumnId = _optionalChain([columns, 'access', _541 => _541[0], 'optionalAccess', _542 => _542.id]);
24753
24023
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
24754
24024
  "div",
24755
24025
  {
@@ -24773,7 +24043,7 @@ function DataTableSkeleton({
24773
24043
  {
24774
24044
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
24775
24045
  "flex flex-col justify-center shrink-0",
24776
- _optionalChain([meta, 'optionalAccess', _612 => _612.width]) || "flex-1"
24046
+ _optionalChain([meta, 'optionalAccess', _543 => _543.width]) || "flex-1"
24777
24047
  ),
24778
24048
  children: [
24779
24049
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-5 bg-ods-bg-surface rounded-sm w-3/4 mb-[var(--spacing-system-xxs)]" }),
@@ -24819,7 +24089,7 @@ function DataTableRowImpl({
24819
24089
  (e) => {
24820
24090
  const target = e.target;
24821
24091
  if (target.closest("[data-no-row-click]")) return;
24822
- _optionalChain([onClick, 'optionalCall', _613 => _613(row.original)]);
24092
+ _optionalChain([onClick, 'optionalCall', _544 => _544(row.original)]);
24823
24093
  },
24824
24094
  [onClick, row.original]
24825
24095
  );
@@ -24857,10 +24127,10 @@ function DataTableRowImpl({
24857
24127
  {
24858
24128
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
24859
24129
  "flex flex-col overflow-hidden",
24860
- alignJustify(_optionalChain([meta, 'optionalAccess', _614 => _614.align])),
24861
- _optionalChain([meta, 'optionalAccess', _615 => _615.width]) || "flex-1 min-w-0",
24862
- _optionalChain([meta, 'optionalAccess', _616 => _616.cellClassName]),
24863
- getHideClasses2(_optionalChain([meta, 'optionalAccess', _617 => _617.hideAt]))
24130
+ alignJustify(_optionalChain([meta, 'optionalAccess', _545 => _545.align])),
24131
+ _optionalChain([meta, 'optionalAccess', _546 => _546.width]) || "flex-1 min-w-0",
24132
+ _optionalChain([meta, 'optionalAccess', _547 => _547.cellClassName]),
24133
+ getHideClasses2(_optionalChain([meta, 'optionalAccess', _548 => _548.hideAt]))
24864
24134
  ),
24865
24135
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CellContent, { children: _reacttable.flexRender.call(void 0, cell.column.columnDef.cell, cell.getContext()) })
24866
24136
  },
@@ -24906,7 +24176,7 @@ function DataTableBody({
24906
24176
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex flex-col gap-[var(--spacing-system-xsf)] w-full", className), children: [
24907
24177
  rows.map((row, index) => {
24908
24178
  const item = row.original;
24909
- const href = _nullishCoalesce(_optionalChain([rowHref, 'optionalCall', _618 => _618(item)]), () => ( void 0));
24179
+ const href = _nullishCoalesce(_optionalChain([rowHref, 'optionalCall', _549 => _549(item)]), () => ( void 0));
24910
24180
  const cls = typeof rowClassName === "function" ? rowClassName(item, index) : rowClassName;
24911
24181
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24912
24182
  DataTableRow,
@@ -24970,7 +24240,7 @@ function DataTableInfiniteFooter({
24970
24240
  if (!sentinel) return;
24971
24241
  const observer = new IntersectionObserver(
24972
24242
  (entries) => {
24973
- if (_optionalChain([entries, 'access', _619 => _619[0], 'optionalAccess', _620 => _620.isIntersecting])) onLoadMoreRef.current();
24243
+ if (_optionalChain([entries, 'access', _550 => _550[0], 'optionalAccess', _551 => _551.isIntersecting])) onLoadMoreRef.current();
24974
24244
  },
24975
24245
  { rootMargin }
24976
24246
  );
@@ -25018,7 +24288,7 @@ function DataTableRowCount({
25018
24288
  const table = useDataTableContext();
25019
24289
  const count = _nullishCoalesce(totalCount, () => ( table.getRowModel().rows.length));
25020
24290
  if (hideWhenEmpty && count === 0) return null;
25021
- const label = _nullishCoalesce(_optionalChain([pluralize, 'optionalCall', _621 => _621(count, itemName)]), () => ( (count === 1 ? itemName : `${itemName}s`)));
24291
+ const label = _nullishCoalesce(_optionalChain([pluralize, 'optionalCall', _552 => _552(count, itemName)]), () => ( (count === 1 ? itemName : `${itemName}s`)));
25022
24292
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25023
24293
  "span",
25024
24294
  {
@@ -25112,12 +24382,12 @@ function PhoneInput({
25112
24382
  const runValidation = _react.useCallback.call(void 0, (phone) => {
25113
24383
  if (!phone || digitCount(phone) === 0) {
25114
24384
  setIsInvalid(false);
25115
- _optionalChain([onValidationChange, 'optionalCall', _622 => _622(false)]);
24385
+ _optionalChain([onValidationChange, 'optionalCall', _553 => _553(false)]);
25116
24386
  return;
25117
24387
  }
25118
24388
  const invalid = !validatePhoneNumber(phone, countryCode);
25119
24389
  setIsInvalid(invalid);
25120
- _optionalChain([onValidationChange, 'optionalCall', _623 => _623(invalid)]);
24390
+ _optionalChain([onValidationChange, 'optionalCall', _554 => _554(invalid)]);
25121
24391
  }, [countryCode, digitCount, onValidationChange]);
25122
24392
  const debouncedValidation = _react.useCallback.call(void 0, (phone) => {
25123
24393
  if (debounceRef.current) clearTimeout(debounceRef.current);
@@ -25166,7 +24436,7 @@ function PhoneInput({
25166
24436
  debouncedValidation(val);
25167
24437
  } else if (digitCount(val) === 0) {
25168
24438
  setIsInvalid(false);
25169
- _optionalChain([onValidationChange, 'optionalCall', _624 => _624(false)]);
24439
+ _optionalChain([onValidationChange, 'optionalCall', _555 => _555(false)]);
25170
24440
  }
25171
24441
  }
25172
24442
  },
@@ -25244,12 +24514,12 @@ function SearchInput({
25244
24514
  limitTags = "auto",
25245
24515
  getLimitTagsText = (more) => `+${more}`
25246
24516
  }) {
25247
- const [internalValue, setInternalValue] = React82.useState(defaultValue);
24517
+ const [internalValue, setInternalValue] = React81.useState(defaultValue);
25248
24518
  const currentValue = onChange ? _nullishCoalesce(value, () => ( "")) : internalValue;
25249
24519
  const debouncedValue = _chunkALW3D72Ocjs.useDebounce.call(void 0, currentValue, debounceMs);
25250
- const [isOpen, setIsOpen] = React82.useState(false);
25251
- const [highlightedIndex, setHighlightedIndex] = React82.useState(-1);
25252
- const containerRef = React82.useRef(null);
24520
+ const [isOpen, setIsOpen] = React81.useState(false);
24521
+ const [highlightedIndex, setHighlightedIndex] = React81.useState(-1);
24522
+ const containerRef = React81.useRef(null);
25253
24523
  const currentPlaceholder = filterChips.length > 0 ? "Add filter..." : placeholder;
25254
24524
  const {
25255
24525
  visibleCount: rawVisibleCount,
@@ -25266,14 +24536,14 @@ function SearchInput({
25266
24536
  placeholder: filterChips.length > 0 ? "" : placeholder
25267
24537
  });
25268
24538
  const visibleCount = filterChips.length > 0 ? Math.max(1, rawVisibleCount) : rawVisibleCount;
25269
- const hiddenTagsRef = React82.useRef(null);
25270
- const hiddenTagsPopupRef = React82.useRef(null);
25271
- const [showHiddenTags, setShowHiddenTags] = React82.useState(false);
25272
- React82.useEffect(() => {
24539
+ const hiddenTagsRef = React81.useRef(null);
24540
+ const hiddenTagsPopupRef = React81.useRef(null);
24541
+ const [showHiddenTags, setShowHiddenTags] = React81.useState(false);
24542
+ React81.useEffect(() => {
25273
24543
  if (!showHiddenTags) return;
25274
24544
  const handleClick = (e) => {
25275
24545
  const target = e.target;
25276
- if (!_optionalChain([hiddenTagsRef, 'access', _625 => _625.current, 'optionalAccess', _626 => _626.contains, 'call', _627 => _627(target)]) && !_optionalChain([hiddenTagsPopupRef, 'access', _628 => _628.current, 'optionalAccess', _629 => _629.contains, 'call', _630 => _630(target)])) {
24546
+ if (!_optionalChain([hiddenTagsRef, 'access', _556 => _556.current, 'optionalAccess', _557 => _557.contains, 'call', _558 => _558(target)]) && !_optionalChain([hiddenTagsPopupRef, 'access', _559 => _559.current, 'optionalAccess', _560 => _560.contains, 'call', _561 => _561(target)])) {
25277
24547
  setShowHiddenTags(false);
25278
24548
  }
25279
24549
  };
@@ -25283,7 +24553,7 @@ function SearchInput({
25283
24553
  const hiddenCount = filterChips.length - visibleCount;
25284
24554
  const visibleChips = filterChips.slice(0, visibleCount);
25285
24555
  const hiddenChips = filterChips.slice(visibleCount);
25286
- const { flatResults, groups } = React82.useMemo(() => {
24556
+ const { flatResults, groups } = React81.useMemo(() => {
25287
24557
  if (!groupBy) return { flatResults: results, groups: null };
25288
24558
  const grouped = /* @__PURE__ */ new Map();
25289
24559
  for (const r of results) {
@@ -25300,7 +24570,7 @@ function SearchInput({
25300
24570
  const meetsMinQuery = debouncedValue.length >= minQueryLength;
25301
24571
  const autoShow = meetsMinQuery;
25302
24572
  const dropdownVisible = _nullishCoalesce(showDropdownProp, () => ( (isOpen && autoShow)));
25303
- React82.useEffect(() => {
24573
+ React81.useEffect(() => {
25304
24574
  setHighlightedIndex(-1);
25305
24575
  }, [flatResults.length]);
25306
24576
  const handleChange = (e) => {
@@ -25321,10 +24591,10 @@ function SearchInput({
25321
24591
  } else {
25322
24592
  setInternalValue("");
25323
24593
  }
25324
- _optionalChain([inputRef, 'access', _631 => _631.current, 'optionalAccess', _632 => _632.focus, 'call', _633 => _633()]);
24594
+ _optionalChain([inputRef, 'access', _562 => _562.current, 'optionalAccess', _563 => _563.focus, 'call', _564 => _564()]);
25325
24595
  };
25326
24596
  const handleResultClick = (result) => {
25327
- _optionalChain([onResultSelect, 'optionalCall', _634 => _634(result)]);
24597
+ _optionalChain([onResultSelect, 'optionalCall', _565 => _565(result)]);
25328
24598
  setIsOpen(false);
25329
24599
  };
25330
24600
  const handleKeyDown = (e) => {
@@ -25347,7 +24617,7 @@ function SearchInput({
25347
24617
  if (highlightedIndex >= 0 && flatResults[highlightedIndex]) {
25348
24618
  handleResultClick(flatResults[highlightedIndex]);
25349
24619
  } else {
25350
- _optionalChain([onSubmit, 'optionalCall', _635 => _635(currentValue)]);
24620
+ _optionalChain([onSubmit, 'optionalCall', _566 => _566(currentValue)]);
25351
24621
  }
25352
24622
  break;
25353
24623
  case "Escape":
@@ -25425,7 +24695,7 @@ function SearchInput({
25425
24695
  dropdownVisible && "!border-ods-accent"
25426
24696
  ),
25427
24697
  onClick: () => {
25428
- _optionalChain([inputRef, 'access', _636 => _636.current, 'optionalAccess', _637 => _637.focus, 'call', _638 => _638()]);
24698
+ _optionalChain([inputRef, 'access', _567 => _567.current, 'optionalAccess', _568 => _568.focus, 'call', _569 => _569()]);
25429
24699
  setIsOpen(true);
25430
24700
  },
25431
24701
  children: [
@@ -25509,10 +24779,10 @@ function SearchInput({
25509
24779
  align: "start",
25510
24780
  onOpenAutoFocus: (e) => {
25511
24781
  e.preventDefault();
25512
- _optionalChain([inputRef, 'access', _639 => _639.current, 'optionalAccess', _640 => _640.focus, 'call', _641 => _641()]);
24782
+ _optionalChain([inputRef, 'access', _570 => _570.current, 'optionalAccess', _571 => _571.focus, 'call', _572 => _572()]);
25513
24783
  },
25514
24784
  onInteractOutside: (e) => {
25515
- if (_optionalChain([containerRef, 'access', _642 => _642.current, 'optionalAccess', _643 => _643.contains, 'call', _644 => _644(e.target)])) {
24785
+ if (_optionalChain([containerRef, 'access', _573 => _573.current, 'optionalAccess', _574 => _574.contains, 'call', _575 => _575(e.target)])) {
25516
24786
  e.preventDefault();
25517
24787
  }
25518
24788
  },
@@ -25529,10 +24799,10 @@ function SearchInput({
25529
24799
  ref: hiddenTagsPopupRef,
25530
24800
  items: hiddenChips.map((chip) => ({ label: chip.label, value: chip.id })),
25531
24801
  style: {
25532
- left: badgeRef.current ? badgeRef.current.getBoundingClientRect().left - (_nullishCoalesce(_optionalChain([containerRef, 'access', _645 => _645.current, 'optionalAccess', _646 => _646.getBoundingClientRect, 'call', _647 => _647(), 'access', _648 => _648.left]), () => ( 0))) : 0
24802
+ left: badgeRef.current ? badgeRef.current.getBoundingClientRect().left - (_nullishCoalesce(_optionalChain([containerRef, 'access', _576 => _576.current, 'optionalAccess', _577 => _577.getBoundingClientRect, 'call', _578 => _578(), 'access', _579 => _579.left]), () => ( 0))) : 0
25533
24803
  },
25534
24804
  onRemove: (value2) => {
25535
- _optionalChain([onFilterRemove, 'optionalCall', _649 => _649(value2)]);
24805
+ _optionalChain([onFilterRemove, 'optionalCall', _580 => _580(value2)]);
25536
24806
  if (hiddenCount <= 1) setShowHiddenTags(false);
25537
24807
  }
25538
24808
  }
@@ -25583,7 +24853,7 @@ function FilterListItem({
25583
24853
  }) {
25584
24854
  const handleToggle = () => {
25585
24855
  if (disabled) return;
25586
- _optionalChain([onToggle, 'optionalCall', _650 => _650(!selected)]);
24856
+ _optionalChain([onToggle, 'optionalCall', _581 => _581(!selected)]);
25587
24857
  };
25588
24858
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25589
24859
  "div",
@@ -25619,7 +24889,7 @@ function FilterListItem({
25619
24889
  "flex items-start gap-[var(--spacing-system-xxs)] text-h6",
25620
24890
  selected ? "text-ods-accent" : "text-ods-text-secondary"
25621
24891
  ),
25622
- children: meta.map((item, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, React83.Fragment, { children: [
24892
+ children: meta.map((item, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, React82.Fragment, { children: [
25623
24893
  index > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", children: "\u2022" }),
25624
24894
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: item })
25625
24895
  ] }, index))
@@ -25630,7 +24900,7 @@ function FilterListItem({
25630
24900
  CheckboxPrimitive4.Root,
25631
24901
  {
25632
24902
  checked: selected,
25633
- onCheckedChange: (c) => _optionalChain([onToggle, 'optionalCall', _651 => _651(c === true)]),
24903
+ onCheckedChange: (c) => _optionalChain([onToggle, 'optionalCall', _582 => _582(c === true)]),
25634
24904
  onClick: (e) => e.stopPropagation(),
25635
24905
  disabled,
25636
24906
  "aria-label": title,
@@ -25729,7 +24999,7 @@ function TagSearchInput({
25729
24999
  if (!showHiddenTags) return;
25730
25000
  const handleClick = (e) => {
25731
25001
  const target = e.target;
25732
- if (!_optionalChain([hiddenTagsRef, 'access', _652 => _652.current, 'optionalAccess', _653 => _653.contains, 'call', _654 => _654(target)]) && !_optionalChain([hiddenTagsPopupRef, 'access', _655 => _655.current, 'optionalAccess', _656 => _656.contains, 'call', _657 => _657(target)])) {
25002
+ if (!_optionalChain([hiddenTagsRef, 'access', _583 => _583.current, 'optionalAccess', _584 => _584.contains, 'call', _585 => _585(target)]) && !_optionalChain([hiddenTagsPopupRef, 'access', _586 => _586.current, 'optionalAccess', _587 => _587.contains, 'call', _588 => _588(target)])) {
25733
25003
  setShowHiddenTags(false);
25734
25004
  }
25735
25005
  };
@@ -25745,13 +25015,13 @@ function TagSearchInput({
25745
25015
  e.preventDefault();
25746
25016
  onSubmit(searchValue);
25747
25017
  }
25748
- _optionalChain([onKeyDown, 'optionalCall', _658 => _658(e)]);
25018
+ _optionalChain([onKeyDown, 'optionalCall', _589 => _589(e)]);
25749
25019
  };
25750
25020
  const handleClearAll = (e) => {
25751
25021
  e.stopPropagation();
25752
25022
  e.preventDefault();
25753
- _optionalChain([onClearAll, 'optionalCall', _659 => _659()]);
25754
- _optionalChain([inputRef, 'access', _660 => _660.current, 'optionalAccess', _661 => _661.focus, 'call', _662 => _662()]);
25023
+ _optionalChain([onClearAll, 'optionalCall', _590 => _590()]);
25024
+ _optionalChain([inputRef, 'access', _591 => _591.current, 'optionalAccess', _592 => _592.focus, 'call', _593 => _593()]);
25755
25025
  };
25756
25026
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref: wrapperRef, className: "relative", children: [
25757
25027
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -25768,7 +25038,7 @@ function TagSearchInput({
25768
25038
  className
25769
25039
  ),
25770
25040
  onClick: () => {
25771
- if (!disabled) _optionalChain([inputRef, 'access', _663 => _663.current, 'optionalAccess', _664 => _664.focus, 'call', _665 => _665()]);
25041
+ if (!disabled) _optionalChain([inputRef, 'access', _594 => _594.current, 'optionalAccess', _595 => _595.focus, 'call', _596 => _596()]);
25772
25042
  },
25773
25043
  children: [
25774
25044
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "shrink-0 flex items-center pl-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZW7C7TFcjs.SearchIcon, { className: "text-ods-text-secondary size-4 md:size-6" }) }),
@@ -25840,7 +25110,7 @@ function TagSearchInput({
25840
25110
  items: hiddenTags,
25841
25111
  disabled,
25842
25112
  style: {
25843
- left: badgeRef.current ? badgeRef.current.getBoundingClientRect().left - (_nullishCoalesce(_optionalChain([wrapperRef, 'access', _666 => _666.current, 'optionalAccess', _667 => _667.getBoundingClientRect, 'call', _668 => _668(), 'access', _669 => _669.left]), () => ( 0))) : 0
25113
+ left: badgeRef.current ? badgeRef.current.getBoundingClientRect().left - (_nullishCoalesce(_optionalChain([wrapperRef, 'access', _597 => _597.current, 'optionalAccess', _598 => _598.getBoundingClientRect, 'call', _599 => _599(), 'access', _600 => _600.left]), () => ( 0))) : 0
25844
25114
  },
25845
25115
  onRemove: (value) => {
25846
25116
  onTagRemove(value);
@@ -25942,7 +25212,7 @@ function MarkdownEditor({
25942
25212
  const [defaultExtraCommands, setDefaultExtraCommands] = _react.useState.call(void 0, []);
25943
25213
  _react.useEffect.call(void 0, () => {
25944
25214
  Promise.resolve().then(() => _interopRequireWildcard(require("@uiw/react-md-editor"))).then((mod) => {
25945
- if (_optionalChain([mod, 'access', _670 => _670.commands, 'optionalAccess', _671 => _671.getExtraCommands])) {
25215
+ if (_optionalChain([mod, 'access', _601 => _601.commands, 'optionalAccess', _602 => _602.getExtraCommands])) {
25946
25216
  setDefaultExtraCommands(mod.commands.getExtraCommands());
25947
25217
  }
25948
25218
  });
@@ -25976,7 +25246,7 @@ function MarkdownEditor({
25976
25246
  const isImage = file.type.startsWith("image/");
25977
25247
  const markdown = isImage ? `![${file.name}](${url})` : `[${file.name}](${url})`;
25978
25248
  insertTextAtCursor(markdown);
25979
- _optionalChain([onFileUploaded, 'optionalCall', _672 => _672(url, file.name)]);
25249
+ _optionalChain([onFileUploaded, 'optionalCall', _603 => _603(url, file.name)]);
25980
25250
  } catch (error) {
25981
25251
  console.error("File upload failed:", error);
25982
25252
  setUploadProgress("Upload failed. Please try again.");
@@ -25989,7 +25259,7 @@ function MarkdownEditor({
25989
25259
  );
25990
25260
  const handleFileInputChange = _react.useCallback.call(void 0,
25991
25261
  (e) => {
25992
- const file = _optionalChain([e, 'access', _673 => _673.target, 'access', _674 => _674.files, 'optionalAccess', _675 => _675[0]]);
25262
+ const file = _optionalChain([e, 'access', _604 => _604.target, 'access', _605 => _605.files, 'optionalAccess', _606 => _606[0]]);
25993
25263
  if (file) {
25994
25264
  handleFileUpload(file);
25995
25265
  e.target.value = "";
@@ -26000,7 +25270,7 @@ function MarkdownEditor({
26000
25270
  const handlePaste = _react.useCallback.call(void 0,
26001
25271
  (e) => {
26002
25272
  if (!onUploadFile) return;
26003
- const items = _optionalChain([e, 'access', _676 => _676.clipboardData, 'optionalAccess', _677 => _677.items]);
25273
+ const items = _optionalChain([e, 'access', _607 => _607.clipboardData, 'optionalAccess', _608 => _608.items]);
26004
25274
  if (!items) return;
26005
25275
  for (const item of items) {
26006
25276
  if (item.type.startsWith("image/")) {
@@ -26025,7 +25295,7 @@ function MarkdownEditor({
26025
25295
  buttonProps: { "aria-label": "Upload file", title: "Upload file" },
26026
25296
  icon: isUploading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Upload, { className: "w-3 h-3" }),
26027
25297
  execute: () => {
26028
- _optionalChain([fileInputRef, 'access', _678 => _678.current, 'optionalAccess', _679 => _679.click, 'call', _680 => _680()]);
25298
+ _optionalChain([fileInputRef, 'access', _609 => _609.current, 'optionalAccess', _610 => _610.click, 'call', _611 => _611()]);
26029
25299
  }
26030
25300
  } : null;
26031
25301
  const extraCommands = uploadCommand ? [...defaultExtraCommands, uploadCommand] : defaultExtraCommands;
@@ -26037,7 +25307,7 @@ function MarkdownEditor({
26037
25307
  const EDGE_ZONE = 60;
26038
25308
  const MAX_SCROLL_SPEED = 15;
26039
25309
  const findScrollParent = _react.useCallback.call(void 0, (el) => {
26040
- let node = _optionalChain([el, 'optionalAccess', _681 => _681.parentElement]);
25310
+ let node = _optionalChain([el, 'optionalAccess', _612 => _612.parentElement]);
26041
25311
  while (node && node !== document.documentElement) {
26042
25312
  const { overflowY } = window.getComputedStyle(node);
26043
25313
  if ((overflowY === "auto" || overflowY === "scroll") && node.scrollHeight > node.clientHeight) {
@@ -26180,7 +25450,7 @@ function matchesAccept(file, accept) {
26180
25450
  });
26181
25451
  }
26182
25452
  function dragHasFiles(e) {
26183
- const types = _optionalChain([e, 'access', _682 => _682.dataTransfer, 'optionalAccess', _683 => _683.types]);
25453
+ const types = _optionalChain([e, 'access', _613 => _613.dataTransfer, 'optionalAccess', _614 => _614.types]);
26184
25454
  if (!types) return false;
26185
25455
  for (let i = 0; i < types.length; i++) {
26186
25456
  if (types[i] === "Files") return true;
@@ -26206,11 +25476,11 @@ function FileUpload({
26206
25476
  maxListHeight,
26207
25477
  acceptWindowDrops = false
26208
25478
  }) {
26209
- const [dragActive, setDragActive] = React85.useState(false);
26210
- const [validationError, setValidationError] = React85.useState(null);
26211
- const fileInputRef = React85.useRef(null);
25479
+ const [dragActive, setDragActive] = React84.useState(false);
25480
+ const [validationError, setValidationError] = React84.useState(null);
25481
+ const fileInputRef = React84.useRef(null);
26212
25482
  const isManaged = managedFiles !== void 0;
26213
- const files = React85.useMemo(() => {
25483
+ const files = React84.useMemo(() => {
26214
25484
  if (!value) return [];
26215
25485
  return Array.isArray(value) ? value : [value];
26216
25486
  }, [value]);
@@ -26258,7 +25528,7 @@ function FileUpload({
26258
25528
  fileInputRef.current.value = "";
26259
25529
  }
26260
25530
  };
26261
- const handleFilesRef = React85.useRef(handleFiles);
25531
+ const handleFilesRef = React84.useRef(handleFiles);
26262
25532
  handleFilesRef.current = handleFiles;
26263
25533
  const handleDrag = (e) => {
26264
25534
  e.preventDefault();
@@ -26275,11 +25545,11 @@ function FileUpload({
26275
25545
  e.stopPropagation();
26276
25546
  setDragActive(false);
26277
25547
  if (disabled) return;
26278
- if (_optionalChain([e, 'access', _684 => _684.dataTransfer, 'access', _685 => _685.files, 'optionalAccess', _686 => _686.length])) {
25548
+ if (_optionalChain([e, 'access', _615 => _615.dataTransfer, 'access', _616 => _616.files, 'optionalAccess', _617 => _617.length])) {
26279
25549
  handleFiles(e.dataTransfer.files);
26280
25550
  }
26281
25551
  };
26282
- React85.useEffect(() => {
25552
+ React84.useEffect(() => {
26283
25553
  if (!acceptWindowDrops || disabled) return;
26284
25554
  let dragCounter = 0;
26285
25555
  const onWindowDragEnter = (e) => {
@@ -26303,7 +25573,7 @@ function FileUpload({
26303
25573
  e.preventDefault();
26304
25574
  dragCounter = 0;
26305
25575
  setDragActive(false);
26306
- if (_optionalChain([e, 'access', _687 => _687.dataTransfer, 'optionalAccess', _688 => _688.files, 'optionalAccess', _689 => _689.length])) {
25576
+ if (_optionalChain([e, 'access', _618 => _618.dataTransfer, 'optionalAccess', _619 => _619.files, 'optionalAccess', _620 => _620.length])) {
26307
25577
  handleFilesRef.current(e.dataTransfer.files);
26308
25578
  }
26309
25579
  };
@@ -26325,7 +25595,7 @@ function FileUpload({
26325
25595
  };
26326
25596
  }, [acceptWindowDrops, disabled]);
26327
25597
  const handleFileSelect = (e) => {
26328
- if (_optionalChain([e, 'access', _690 => _690.target, 'access', _691 => _691.files, 'optionalAccess', _692 => _692.length])) {
25598
+ if (_optionalChain([e, 'access', _621 => _621.target, 'access', _622 => _622.files, 'optionalAccess', _623 => _623.length])) {
26329
25599
  handleFiles(e.target.files);
26330
25600
  }
26331
25601
  };
@@ -26342,7 +25612,7 @@ function FileUpload({
26342
25612
  };
26343
25613
  const openDialog = async () => {
26344
25614
  if (disabled) return;
26345
- _optionalChain([fileInputRef, 'access', _693 => _693.current, 'optionalAccess', _694 => _694.click, 'call', _695 => _695()]);
25615
+ _optionalChain([fileInputRef, 'access', _624 => _624.current, 'optionalAccess', _625 => _625.click, 'call', _626 => _626()]);
26346
25616
  };
26347
25617
  const displayError = error || validationError || void 0;
26348
25618
  const hasFiles = isManaged ? managedFiles.length > 0 : files.length > 0;
@@ -26420,7 +25690,7 @@ function FileUpload({
26420
25690
  "button",
26421
25691
  {
26422
25692
  type: "button",
26423
- onClick: () => _optionalChain([onRemoveManagedFile, 'optionalCall', _696 => _696(entry.id)]),
25693
+ onClick: () => _optionalChain([onRemoveManagedFile, 'optionalCall', _627 => _627(entry.id)]),
26424
25694
  className: "shrink-0 p-1 rounded hover:bg-ods-bg transition-colors",
26425
25695
  "aria-label": `Remove ${entry.fileName}`,
26426
25696
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "size-4 text-ods-text-secondary" })
@@ -26521,10 +25791,10 @@ function ImageUploader({
26521
25791
  alt = "Uploaded image",
26522
25792
  className
26523
25793
  }) {
26524
- const inputRef = React86.useRef(null);
26525
- const [dragActive, setDragActive] = React86.useState(false);
26526
- const [pressed, setPressed] = React86.useState(false);
26527
- const [validationError, setValidationError] = React86.useState(null);
25794
+ const inputRef = React85.useRef(null);
25795
+ const [dragActive, setDragActive] = React85.useState(false);
25796
+ const [pressed, setPressed] = React85.useState(false);
25797
+ const [validationError, setValidationError] = React85.useState(null);
26528
25798
  const interactive = !disabled && !loading;
26529
25799
  const hasImage = Boolean(value);
26530
25800
  const displayError = error || validationError || void 0;
@@ -26543,7 +25813,7 @@ function ImageUploader({
26543
25813
  onChange(file);
26544
25814
  };
26545
25815
  const handleFileSelect = (e) => {
26546
- validateAndEmit(_optionalChain([e, 'access', _697 => _697.target, 'access', _698 => _698.files, 'optionalAccess', _699 => _699[0]]));
25816
+ validateAndEmit(_optionalChain([e, 'access', _628 => _628.target, 'access', _629 => _629.files, 'optionalAccess', _630 => _630[0]]));
26547
25817
  if (inputRef.current) inputRef.current.value = "";
26548
25818
  };
26549
25819
  const handleDrag = (e) => {
@@ -26558,11 +25828,11 @@ function ImageUploader({
26558
25828
  e.stopPropagation();
26559
25829
  setDragActive(false);
26560
25830
  if (!interactive) return;
26561
- validateAndEmit(_optionalChain([e, 'access', _700 => _700.dataTransfer, 'access', _701 => _701.files, 'optionalAccess', _702 => _702[0]]));
25831
+ validateAndEmit(_optionalChain([e, 'access', _631 => _631.dataTransfer, 'access', _632 => _632.files, 'optionalAccess', _633 => _633[0]]));
26562
25832
  };
26563
25833
  const openDialog = () => {
26564
25834
  if (!interactive) return;
26565
- _optionalChain([inputRef, 'access', _703 => _703.current, 'optionalAccess', _704 => _704.click, 'call', _705 => _705()]);
25835
+ _optionalChain([inputRef, 'access', _634 => _634.current, 'optionalAccess', _635 => _635.click, 'call', _636 => _636()]);
26566
25836
  };
26567
25837
  const handleRootKeyDown = (e) => {
26568
25838
  if (hasImage || !interactive) return;
@@ -26701,25 +25971,25 @@ function CompactAssigneeDropdown({
26701
25971
  onAssign,
26702
25972
  className
26703
25973
  }) {
26704
- const [isOpen, setIsOpen] = React87.useState(false);
26705
- const [search, setSearch] = React87.useState("");
25974
+ const [isOpen, setIsOpen] = React86.useState(false);
25975
+ const [search, setSearch] = React86.useState("");
26706
25976
  const hasAssignee = !!currentAssignee;
26707
- React87.useEffect(() => {
25977
+ React86.useEffect(() => {
26708
25978
  if (!isOpen) setSearch("");
26709
25979
  }, [isOpen]);
26710
- const filtered = React87.useMemo(() => {
25980
+ const filtered = React86.useMemo(() => {
26711
25981
  const q = search.trim().toLowerCase();
26712
25982
  if (!q) return options;
26713
25983
  return options.filter((o) => o.label.toLowerCase().includes(q));
26714
25984
  }, [options, search]);
26715
- const orderedOptions = React87.useMemo(() => {
25985
+ const orderedOptions = React86.useMemo(() => {
26716
25986
  if (!currentAssignee) return filtered;
26717
25987
  const current = filtered.find((o) => o.value === currentAssignee.id);
26718
25988
  if (!current) return filtered;
26719
25989
  return [current, ...filtered.filter((o) => o.value !== currentAssignee.id)];
26720
25990
  }, [filtered, currentAssignee]);
26721
25991
  const handleSelect = (userId) => {
26722
- const next = _optionalChain([currentAssignee, 'optionalAccess', _706 => _706.id]) === userId ? null : userId;
25992
+ const next = _optionalChain([currentAssignee, 'optionalAccess', _637 => _637.id]) === userId ? null : userId;
26723
25993
  onAssign(next);
26724
25994
  setIsOpen(false);
26725
25995
  };
@@ -26784,7 +26054,7 @@ function CompactAssigneeDropdown({
26784
26054
  }
26785
26055
  ) }),
26786
26056
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "max-h-80 overflow-y-auto py-[var(--spacing-system-xs)]", role: "listbox", children: isLoading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-[var(--spacing-system-sf)] py-[var(--spacing-system-s)] text-h5 text-ods-text-secondary", children: "Loading\u2026" }) : orderedOptions.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-[var(--spacing-system-sf)] py-[var(--spacing-system-s)] text-h5 text-ods-text-secondary", children: "No users found" }) : orderedOptions.map((opt) => {
26787
- const isCurrent = _optionalChain([currentAssignee, 'optionalAccess', _707 => _707.id]) === opt.value;
26057
+ const isCurrent = _optionalChain([currentAssignee, 'optionalAccess', _638 => _638.id]) === opt.value;
26788
26058
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
26789
26059
  "button",
26790
26060
  {
@@ -26828,9 +26098,9 @@ function DefaultAssigneeDropdown({
26828
26098
  onAssign,
26829
26099
  className
26830
26100
  }) {
26831
- const [isEditing, setIsEditing] = React87.useState(false);
26101
+ const [isEditing, setIsEditing] = React86.useState(false);
26832
26102
  const hasAssignee = !!currentAssignee;
26833
- const renderOption = React87.useCallback((option) => {
26103
+ const renderOption = React86.useCallback((option) => {
26834
26104
  const opt = option;
26835
26105
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-sf)] w-full min-w-0", children: [
26836
26106
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -26853,7 +26123,7 @@ function DefaultAssigneeDropdown({
26853
26123
  Autocomplete,
26854
26124
  {
26855
26125
  options,
26856
- value: _nullishCoalesce(_optionalChain([currentAssignee, 'optionalAccess', _708 => _708.id]), () => ( null)),
26126
+ value: _nullishCoalesce(_optionalChain([currentAssignee, 'optionalAccess', _639 => _639.id]), () => ( null)),
26857
26127
  onChange: (val) => {
26858
26128
  onAssign(val);
26859
26129
  setIsEditing(false);
@@ -27018,8 +26288,8 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
27018
26288
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
27019
26289
 
27020
26290
  function TicketNoteCard({ note, onEdit, onDelete, className }) {
27021
- const [isEditing, setIsEditing] = React88.useState(false);
27022
- const [editText, setEditText] = React88.useState(note.text);
26291
+ const [isEditing, setIsEditing] = React87.useState(false);
26292
+ const [editText, setEditText] = React87.useState(note.text);
27023
26293
  const handleSave = () => {
27024
26294
  const trimmed = editText.trim();
27025
26295
  if (!trimmed || !onEdit) return;
@@ -27135,7 +26405,7 @@ function TicketNotesSection({
27135
26405
  isAddingNote,
27136
26406
  className
27137
26407
  }) {
27138
- const [noteText, setNoteText] = React89.useState("");
26408
+ const [noteText, setNoteText] = React88.useState("");
27139
26409
  const handleSend = () => {
27140
26410
  const trimmed = noteText.trim();
27141
26411
  if (!trimmed || !onAddNote || isAddingNote) return;
@@ -27240,14 +26510,14 @@ function TicketInfoSection({
27240
26510
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27241
26511
  SquareAvatar,
27242
26512
  {
27243
- src: _optionalChain([organization, 'optionalAccess', _709 => _709.imageSrc]),
27244
- alt: _optionalChain([organization, 'optionalAccess', _710 => _710.name]),
27245
- fallback: _optionalChain([organization, 'optionalAccess', _711 => _711.name]) || "Org",
26513
+ src: _optionalChain([organization, 'optionalAccess', _640 => _640.imageSrc]),
26514
+ alt: _optionalChain([organization, 'optionalAccess', _641 => _641.name]),
26515
+ fallback: _optionalChain([organization, 'optionalAccess', _642 => _642.name]) || "Org",
27246
26516
  size: "md",
27247
26517
  className: "shrink-0"
27248
26518
  }
27249
26519
  ),
27250
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, InfoCell2, { value: _optionalChain([organization, 'optionalAccess', _712 => _712.name]) || "Unassigned", label: "Organization" })
26520
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, InfoCell2, { value: _optionalChain([organization, 'optionalAccess', _643 => _643.name]) || "Unassigned", label: "Organization" })
27251
26521
  ] }),
27252
26522
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0", children: assigned ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27253
26523
  AssigneeDropdown,
@@ -27268,10 +26538,10 @@ function TicketInfoSection({
27268
26538
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27269
26539
  InfoCell2,
27270
26540
  {
27271
- value: _optionalChain([device, 'optionalAccess', _713 => _713.name]) || "Unassigned",
26541
+ value: _optionalChain([device, 'optionalAccess', _644 => _644.name]) || "Unassigned",
27272
26542
  label: "Device",
27273
- icon: _optionalChain([device, 'optionalAccess', _714 => _714.icon]),
27274
- onClick: _optionalChain([device, 'optionalAccess', _715 => _715.onClick])
26543
+ icon: _optionalChain([device, 'optionalAccess', _645 => _645.icon]),
26544
+ onClick: _optionalChain([device, 'optionalAccess', _646 => _646.onClick])
27275
26545
  }
27276
26546
  ),
27277
26547
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4 min-w-0", children: [
@@ -28031,10 +27301,10 @@ var getContentDimensions = (config) => {
28031
27301
  const envMobileHeight = process.env.NEXT_PUBLIC_FIGMA_MOBILE_HEIGHT ? parseInt(process.env.NEXT_PUBLIC_FIGMA_MOBILE_HEIGHT) : null;
28032
27302
  const envDesktopWidth = process.env.NEXT_PUBLIC_FIGMA_DESKTOP_WIDTH ? parseInt(process.env.NEXT_PUBLIC_FIGMA_DESKTOP_WIDTH) : null;
28033
27303
  const envDesktopHeight = process.env.NEXT_PUBLIC_FIGMA_DESKTOP_HEIGHT ? parseInt(process.env.NEXT_PUBLIC_FIGMA_DESKTOP_HEIGHT) : null;
28034
- const mobileWidth = _nullishCoalesce(_nullishCoalesce(envMobileWidth, () => ( _optionalChain([config, 'optionalAccess', _716 => _716.mobileContentDimensions, 'optionalAccess', _717 => _717.width]))), () => ( defaultMobile.width));
28035
- const mobileHeight = _nullishCoalesce(_nullishCoalesce(envMobileHeight, () => ( _optionalChain([config, 'optionalAccess', _718 => _718.mobileContentDimensions, 'optionalAccess', _719 => _719.height]))), () => ( defaultMobile.height));
28036
- const desktopWidth = _nullishCoalesce(_nullishCoalesce(envDesktopWidth, () => ( _optionalChain([config, 'optionalAccess', _720 => _720.desktopContentDimensions, 'optionalAccess', _721 => _721.width]))), () => ( defaultDesktop.width));
28037
- const desktopHeight = _nullishCoalesce(_nullishCoalesce(envDesktopHeight, () => ( _optionalChain([config, 'optionalAccess', _722 => _722.desktopContentDimensions, 'optionalAccess', _723 => _723.height]))), () => ( defaultDesktop.height));
27304
+ const mobileWidth = _nullishCoalesce(_nullishCoalesce(envMobileWidth, () => ( _optionalChain([config, 'optionalAccess', _647 => _647.mobileContentDimensions, 'optionalAccess', _648 => _648.width]))), () => ( defaultMobile.width));
27305
+ const mobileHeight = _nullishCoalesce(_nullishCoalesce(envMobileHeight, () => ( _optionalChain([config, 'optionalAccess', _649 => _649.mobileContentDimensions, 'optionalAccess', _650 => _650.height]))), () => ( defaultMobile.height));
27306
+ const desktopWidth = _nullishCoalesce(_nullishCoalesce(envDesktopWidth, () => ( _optionalChain([config, 'optionalAccess', _651 => _651.desktopContentDimensions, 'optionalAccess', _652 => _652.width]))), () => ( defaultDesktop.width));
27307
+ const desktopHeight = _nullishCoalesce(_nullishCoalesce(envDesktopHeight, () => ( _optionalChain([config, 'optionalAccess', _653 => _653.desktopContentDimensions, 'optionalAccess', _654 => _654.height]))), () => ( defaultDesktop.height));
28038
27308
  return {
28039
27309
  mobile: { width: mobileWidth, height: mobileHeight },
28040
27310
  desktop: { width: desktopWidth, height: desktopHeight }
@@ -28168,7 +27438,7 @@ function renderUnifiedUI(state, handlers, config, iframeRef) {
28168
27438
  const contentDimensions = getContentDimensions(config);
28169
27439
  const mobileHeight = contentDimensions.mobile.height;
28170
27440
  const calculatedHeight = Math.max(mobileHeight + 100, 400);
28171
- return `${Math.min(calculatedHeight, _optionalChain([window, 'optionalAccess', _724 => _724.innerHeight]) * 0.85 || 650)}px`;
27441
+ return `${Math.min(calculatedHeight, _optionalChain([window, 'optionalAccess', _655 => _655.innerHeight]) * 0.85 || 650)}px`;
28172
27442
  })(),
28173
27443
  minHeight: viewMode === "DESKTOP" ? "auto" : (() => {
28174
27444
  const contentDimensions = getContentDimensions(config);
@@ -28273,7 +27543,7 @@ var FigmaPrototypeViewer = ({
28273
27543
  const [isInitialized, setIsInitialized] = _react.useState.call(void 0, false);
28274
27544
  const [currentNodeId, setCurrentNodeId] = _react.useState.call(void 0, null);
28275
27545
  const [internalActiveSection, setInternalActiveSection] = _react.useState.call(void 0,
28276
- config.defaultSectionId || _optionalChain([config, 'access', _725 => _725.sections, 'access', _726 => _726[0], 'optionalAccess', _727 => _727.id]) || ""
27546
+ config.defaultSectionId || _optionalChain([config, 'access', _656 => _656.sections, 'access', _657 => _657[0], 'optionalAccess', _658 => _658.id]) || ""
28277
27547
  );
28278
27548
  const activeSection = externalActiveSection || internalActiveSection;
28279
27549
  const [isNavigating, setIsNavigating] = _react.useState.call(void 0, false);
@@ -28363,7 +27633,7 @@ var FigmaPrototypeViewer = ({
28363
27633
  const handleMessage = (event) => {
28364
27634
  if (event.origin !== "https://www.figma.com") return;
28365
27635
  const validEvents = ["INITIAL_LOAD", "NEW_STATE", "PRESENTED_NODE_CHANGED"];
28366
- if (_optionalChain([event, 'access', _728 => _728.data, 'optionalAccess', _729 => _729.type]) && validEvents.includes(event.data.type)) {
27636
+ if (_optionalChain([event, 'access', _659 => _659.data, 'optionalAccess', _660 => _660.type]) && validEvents.includes(event.data.type)) {
28367
27637
  const figmaEvent = event.data;
28368
27638
  console.log("[Figma Event]", figmaEvent.type, viewMode);
28369
27639
  switch (figmaEvent.type) {
@@ -28373,19 +27643,19 @@ var FigmaPrototypeViewer = ({
28373
27643
  setIframeState("READY");
28374
27644
  break;
28375
27645
  case "PRESENTED_NODE_CHANGED":
28376
- if (_optionalChain([figmaEvent, 'access', _730 => _730.data, 'optionalAccess', _731 => _731.presentedNodeId])) {
27646
+ if (_optionalChain([figmaEvent, 'access', _661 => _661.data, 'optionalAccess', _662 => _662.presentedNodeId])) {
28377
27647
  setCurrentNodeId(figmaEvent.data.presentedNodeId);
28378
27648
  if (!isNavigating) {
28379
27649
  const matchingSection = config.sections.find((s) => {
28380
- const desktopMatch = s.startingNodeId === _optionalChain([figmaEvent, 'access', _732 => _732.data, 'optionalAccess', _733 => _733.presentedNodeId]) || s.startingNodeId.replace(":", "-") === _optionalChain([figmaEvent, 'access', _734 => _734.data, 'optionalAccess', _735 => _735.presentedNodeId]);
28381
- const mobileMatch = s.mobileStartingNodeId === _optionalChain([figmaEvent, 'access', _736 => _736.data, 'optionalAccess', _737 => _737.presentedNodeId]) || _optionalChain([s, 'access', _738 => _738.mobileStartingNodeId, 'optionalAccess', _739 => _739.replace, 'call', _740 => _740(":", "-")]) === _optionalChain([figmaEvent, 'access', _741 => _741.data, 'optionalAccess', _742 => _742.presentedNodeId]);
27650
+ const desktopMatch = s.startingNodeId === _optionalChain([figmaEvent, 'access', _663 => _663.data, 'optionalAccess', _664 => _664.presentedNodeId]) || s.startingNodeId.replace(":", "-") === _optionalChain([figmaEvent, 'access', _665 => _665.data, 'optionalAccess', _666 => _666.presentedNodeId]);
27651
+ const mobileMatch = s.mobileStartingNodeId === _optionalChain([figmaEvent, 'access', _667 => _667.data, 'optionalAccess', _668 => _668.presentedNodeId]) || _optionalChain([s, 'access', _669 => _669.mobileStartingNodeId, 'optionalAccess', _670 => _670.replace, 'call', _671 => _671(":", "-")]) === _optionalChain([figmaEvent, 'access', _672 => _672.data, 'optionalAccess', _673 => _673.presentedNodeId]);
28382
27652
  return desktopMatch || mobileMatch;
28383
27653
  });
28384
27654
  if (matchingSection && matchingSection.id !== activeSection) {
28385
27655
  if (!externalActiveSection) {
28386
27656
  setInternalActiveSection(matchingSection.id);
28387
27657
  }
28388
- _optionalChain([config, 'access', _743 => _743.onSectionChange, 'optionalCall', _744 => _744(matchingSection.id)]);
27658
+ _optionalChain([config, 'access', _674 => _674.onSectionChange, 'optionalCall', _675 => _675(matchingSection.id)]);
28389
27659
  }
28390
27660
  }
28391
27661
  }
@@ -28398,7 +27668,7 @@ var FigmaPrototypeViewer = ({
28398
27668
  }, [config.sections, activeSection, isNavigating, externalActiveSection, config.onSectionChange, viewMode]);
28399
27669
  const navigateToSection = _react.useCallback.call(void 0, (sectionId) => {
28400
27670
  const section = config.sections.find((s) => s.id === sectionId);
28401
- if (!section || !_optionalChain([iframeRef, 'access', _745 => _745.current, 'optionalAccess', _746 => _746.contentWindow]) || !isInitialized) {
27671
+ if (!section || !_optionalChain([iframeRef, 'access', _676 => _676.current, 'optionalAccess', _677 => _677.contentWindow]) || !isInitialized) {
28402
27672
  return;
28403
27673
  }
28404
27674
  setIsNavigating(true);
@@ -28406,7 +27676,7 @@ var FigmaPrototypeViewer = ({
28406
27676
  if (!externalActiveSection) {
28407
27677
  setInternalActiveSection(sectionId);
28408
27678
  }
28409
- _optionalChain([config, 'access', _747 => _747.onSectionChange, 'optionalCall', _748 => _748(sectionId)]);
27679
+ _optionalChain([config, 'access', _678 => _678.onSectionChange, 'optionalCall', _679 => _679(sectionId)]);
28410
27680
  const command = {
28411
27681
  type: "NAVIGATE_TO_FRAME_AND_CLOSE_OVERLAYS",
28412
27682
  data: { nodeId }
@@ -28726,7 +27996,7 @@ var FiltersDropdown = ({
28726
27996
  defaults[section.id] = section.defaultSelected || [];
28727
27997
  });
28728
27998
  setSelectedFilters(defaults);
28729
- _optionalChain([onReset, 'optionalCall', _749 => _749()]);
27999
+ _optionalChain([onReset, 'optionalCall', _680 => _680()]);
28730
28000
  setIsOpen(false);
28731
28001
  };
28732
28002
  const handleApply = () => {
@@ -29020,7 +28290,7 @@ function MediaGalleryManager({
29020
28290
  const [deletingIndex, setDeletingIndex] = _react.useState.call(void 0, null);
29021
28291
  const [draggedIndex, setDraggedIndex] = _react.useState.call(void 0, null);
29022
28292
  const handleFileSelect = _react.useCallback.call(void 0, async (event) => {
29023
- const file = _optionalChain([event, 'access', _750 => _750.target, 'access', _751 => _751.files, 'optionalAccess', _752 => _752[0]]);
28293
+ const file = _optionalChain([event, 'access', _681 => _681.target, 'access', _682 => _682.files, 'optionalAccess', _683 => _683[0]]);
29024
28294
  if (!file) return;
29025
28295
  let mediaType;
29026
28296
  if (file.type.startsWith("image/")) {
@@ -29135,7 +28405,7 @@ function MediaGalleryManager({
29135
28405
  {
29136
28406
  type: "button",
29137
28407
  variant: "outline",
29138
- onClick: () => _optionalChain([fileInputRef, 'access', _753 => _753.current, 'optionalAccess', _754 => _754.click, 'call', _755 => _755()]),
28408
+ onClick: () => _optionalChain([fileInputRef, 'access', _684 => _684.current, 'optionalAccess', _685 => _685.click, 'call', _686 => _686()]),
29139
28409
  disabled: isUploading,
29140
28410
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Plus, { className: "h-4 w-4" }),
29141
28411
  className: "font-['DM_Sans'] text-[16px] font-bold",
@@ -29920,7 +29190,7 @@ function ReleaseMediaManager({
29920
29190
  const fileInputRef = _react.useRef.call(void 0, null);
29921
29191
  const [uploadingIndex, setUploadingIndex] = _react.useState.call(void 0, null);
29922
29192
  const handleFileSelect = async (event) => {
29923
- const file = _optionalChain([event, 'access', _756 => _756.target, 'access', _757 => _757.files, 'optionalAccess', _758 => _758[0]]);
29193
+ const file = _optionalChain([event, 'access', _687 => _687.target, 'access', _688 => _688.files, 'optionalAccess', _689 => _689[0]]);
29924
29194
  if (!file) return;
29925
29195
  let mediaType;
29926
29196
  if (file.type.startsWith("image/")) {
@@ -30000,7 +29270,7 @@ function ReleaseMediaManager({
30000
29270
  {
30001
29271
  type: "button",
30002
29272
  variant: "outline",
30003
- onClick: () => _optionalChain([fileInputRef, 'access', _759 => _759.current, 'optionalAccess', _760 => _760.click, 'call', _761 => _761()]),
29273
+ onClick: () => _optionalChain([fileInputRef, 'access', _690 => _690.current, 'optionalAccess', _691 => _691.click, 'call', _692 => _692()]),
30004
29274
  disabled: uploadingIndex !== null,
30005
29275
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Plus, { className: "h-4 w-4" }),
30006
29276
  className: "font-['DM_Sans'] text-[16px] font-bold",
@@ -30213,7 +29483,7 @@ function SEOEditorPreview({
30213
29483
  const displayImage = hasOgImage || hasFeaturedImage;
30214
29484
  const handleImageUpload = async (event) => {
30215
29485
  if (!onOgImageUpload) return;
30216
- const file = _optionalChain([event, 'access', _762 => _762.target, 'access', _763 => _763.files, 'optionalAccess', _764 => _764[0]]);
29486
+ const file = _optionalChain([event, 'access', _693 => _693.target, 'access', _694 => _694.files, 'optionalAccess', _695 => _695[0]]);
30217
29487
  if (!file) return;
30218
29488
  setIsUploading(true);
30219
29489
  try {
@@ -30344,7 +29614,7 @@ function SEOEditorPreview({
30344
29614
  type: "button",
30345
29615
  variant: "outline",
30346
29616
  size: "icon",
30347
- onClick: () => _optionalChain([fileInputRef, 'optionalAccess', _765 => _765.click, 'call', _766 => _766()]),
29617
+ onClick: () => _optionalChain([fileInputRef, 'optionalAccess', _696 => _696.click, 'call', _697 => _697()]),
30348
29618
  disabled: disabled || isUploading,
30349
29619
  className: "bg-white text-black hover:bg-gray-100 rounded-full opacity-0 group-hover:opacity-100",
30350
29620
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Upload, { className: "h-4 w-4" })
@@ -30367,7 +29637,7 @@ function SEOEditorPreview({
30367
29637
  "div",
30368
29638
  {
30369
29639
  className: "h-full min-h-[280px] border-2 border-dashed border-ods-border rounded-lg flex flex-col items-center justify-center cursor-pointer hover:border-ods-accent transition-colors bg-ods-bg-hover",
30370
- onClick: () => onOgImageUpload && _optionalChain([fileInputRef, 'optionalAccess', _767 => _767.click, 'call', _768 => _768()]),
29640
+ onClick: () => onOgImageUpload && _optionalChain([fileInputRef, 'optionalAccess', _698 => _698.click, 'call', _699 => _699()]),
30371
29641
  children: isUploading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { className: "h-8 w-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
30372
29642
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Upload, { className: "h-8 w-8 text-ods-text-secondary mb-2" }),
30373
29643
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm text-ods-text-secondary font-['DM_Sans']", children: onOgImageUpload ? "Click to upload OG image" : "No image" })
@@ -30452,7 +29722,7 @@ function SocialLinksManager({
30452
29722
  className = ""
30453
29723
  }) {
30454
29724
  const addLink = () => {
30455
- const firstPlatform = _optionalChain([platforms, 'access', _769 => _769[0], 'optionalAccess', _770 => _770.name]) || "website";
29725
+ const firstPlatform = _optionalChain([platforms, 'access', _700 => _700[0], 'optionalAccess', _701 => _701.name]) || "website";
30456
29726
  onChange([...links, { platform: firstPlatform, url: "" }]);
30457
29727
  };
30458
29728
  const removeLink = (index) => {
@@ -30464,7 +29734,7 @@ function SocialLinksManager({
30464
29734
  onChange(updated);
30465
29735
  };
30466
29736
  const getIcon = (link, platform) => {
30467
- const iconKey = _optionalChain([platform, 'optionalAccess', _771 => _771.icon_name]) || link.platform;
29737
+ const iconKey = _optionalChain([platform, 'optionalAccess', _702 => _702.icon_name]) || link.platform;
30468
29738
  const IconComponent = iconMap[iconKey];
30469
29739
  return IconComponent ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, IconComponent, { className: "w-5 h-5 text-ods-text-secondary" }) : null;
30470
29740
  };
@@ -30489,7 +29759,7 @@ function SocialLinksManager({
30489
29759
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30490
29760
  _chunkBJTOSUT4cjs.Input,
30491
29761
  {
30492
- placeholder: _optionalChain([platform, 'optionalAccess', _772 => _772.placeholder]) || "Profile URL",
29762
+ placeholder: _optionalChain([platform, 'optionalAccess', _703 => _703.placeholder]) || "Profile URL",
30493
29763
  value: link.url,
30494
29764
  onChange: (e) => updateLink(index, "url", e.target.value),
30495
29765
  onKeyDown: (e) => {
@@ -30533,7 +29803,7 @@ function SocialLinksManager({
30533
29803
  _chunkBJTOSUT4cjs.init_button2.call(void 0, );
30534
29804
 
30535
29805
 
30536
- var StartWithOpenFrameButton = React94.forwardRef(({ children = "Start Free Trial", mode = "outline", className, buttonSize, loading = false, buttonBackgroundColor, buttonTextColor, ...props }, ref) => {
29806
+ var StartWithOpenFrameButton = React93.forwardRef(({ children = "Start Free Trial", mode = "outline", className, buttonSize, loading = false, buttonBackgroundColor, buttonTextColor, ...props }, ref) => {
30537
29807
  const isYellow = mode === "yellow";
30538
29808
  const isPink = mode === "pink" || mode === "purple";
30539
29809
  const isCyan = mode === "cyan";
@@ -30829,6 +30099,258 @@ function TagsSelector({
30829
30099
  ] });
30830
30100
  }
30831
30101
 
30102
+ // src/components/features/video-ratio-tabs.tsx
30103
+
30104
+ 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";
30105
+ var RATIO_GRID_CLASS = {
30106
+ portrait: "grid grid-cols-2 md:grid-cols-3 gap-4",
30107
+ square: "grid grid-cols-2 md:grid-cols-3 gap-4",
30108
+ landscape: "grid grid-cols-1 md:grid-cols-2 gap-4"
30109
+ };
30110
+ var RATIO_DISPLAY_GRID_CLASS = {
30111
+ portrait: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",
30112
+ square: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",
30113
+ landscape: "grid grid-cols-1 md:grid-cols-2 gap-6"
30114
+ };
30115
+ var RATIO_TAB_CONFIG = [
30116
+ { key: "portrait", label: "Portrait 9:16" },
30117
+ { key: "square", label: "Square 1:1" },
30118
+ { key: "landscape", label: "Landscape 16:9" }
30119
+ ];
30120
+ function RatioTabs({
30121
+ groups,
30122
+ defaultTab,
30123
+ className = ""
30124
+ }) {
30125
+ const activeTabs = RATIO_TAB_CONFIG.filter((t) => groups[t.key].count > 0);
30126
+ if (activeTabs.length <= 1) {
30127
+ const active = activeTabs[0];
30128
+ return active ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: groups[active.key].render() }) : null;
30129
+ }
30130
+ const firstTab = defaultTab && groups[defaultTab].count > 0 ? defaultTab : activeTabs[0].key;
30131
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Tabs, { defaultValue: firstTab, className: `w-full ${className}`, children: [
30132
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TabsList, { className: "inline-flex justify-start rounded-none bg-transparent h-auto p-0 gap-0 mb-2", children: activeTabs.map((t) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, TabsTrigger, { value: t.key, className: TAB_TRIGGER_CLASS, children: [
30133
+ t.label,
30134
+ " (",
30135
+ groups[t.key].count,
30136
+ ")"
30137
+ ] }, t.key)) }),
30138
+ activeTabs.map((t) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30139
+ TabsContent,
30140
+ {
30141
+ value: t.key,
30142
+ forceMount: true,
30143
+ className: "data-[state=inactive]:hidden",
30144
+ children: groups[t.key].render()
30145
+ },
30146
+ t.key
30147
+ ))
30148
+ ] });
30149
+ }
30150
+ function detectAspectRatio(ratioString, width, height) {
30151
+ if (ratioString === "16:9") return "16:9";
30152
+ if (ratioString === "1:1") return "1:1";
30153
+ if (ratioString === "9:16") return "9:16";
30154
+ if (width && height) {
30155
+ if (Math.abs(width - height) < Math.min(width, height) * 0.1) return "1:1";
30156
+ if (width > height) return "16:9";
30157
+ }
30158
+ return "9:16";
30159
+ }
30160
+ function ratioToCategory(ratio) {
30161
+ if (ratio === "16:9") return "landscape";
30162
+ if (ratio === "1:1") return "square";
30163
+ return "portrait";
30164
+ }
30165
+ function groupByAspectRatio(items, getAspectRatio) {
30166
+ const portrait = [];
30167
+ const square = [];
30168
+ const landscape = [];
30169
+ for (const item of items) {
30170
+ const cat = ratioToCategory(getAspectRatio(item));
30171
+ if (cat === "landscape") landscape.push(item);
30172
+ else if (cat === "square") square.push(item);
30173
+ else portrait.push(item);
30174
+ }
30175
+ const filled = [portrait, square, landscape].filter((a) => a.length > 0).length;
30176
+ return { portrait, square, landscape, hasMultiple: filled > 1 };
30177
+ }
30178
+
30179
+ // src/components/features/video-bites-display.tsx
30180
+
30181
+
30182
+ var RATIO_TO_CSS_ASPECT = {
30183
+ portrait: "9 / 16",
30184
+ square: "1 / 1",
30185
+ landscape: "16 / 9"
30186
+ };
30187
+ function LazyBite({ ratio, children }) {
30188
+ const { ref, isNear } = _chunkALW3D72Ocjs.useNearViewport.call(void 0, "500px");
30189
+ 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" }) });
30190
+ }
30191
+ function VideoBitesDisplay({
30192
+ bites,
30193
+ title = "Video Highlights",
30194
+ filterPublished = true,
30195
+ showTitle = true
30196
+ }) {
30197
+ const grouped = _react.useMemo.call(void 0, () => {
30198
+ const filtered = filterPublished ? bites.filter((b) => b.published) : bites;
30199
+ const sorted = [...filtered].sort((a, b) => {
30200
+ if (!a.created_at && !b.created_at) return 0;
30201
+ if (!a.created_at) return 1;
30202
+ if (!b.created_at) return -1;
30203
+ return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();
30204
+ });
30205
+ return groupByAspectRatio(
30206
+ sorted,
30207
+ (b) => detectAspectRatio(b.aspect_ratio)
30208
+ );
30209
+ }, [bites, filterPublished]);
30210
+ const totalCount = grouped.portrait.length + grouped.square.length + grouped.landscape.length;
30211
+ if (totalCount === 0) return null;
30212
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6 w-full min-w-0", children: [
30213
+ showTitle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-h1 tracking-[-1.12px] text-ods-text-primary break-words", children: title }),
30214
+ grouped.hasMultiple ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30215
+ RatioTabs,
30216
+ {
30217
+ groups: {
30218
+ portrait: {
30219
+ count: grouped.portrait.length,
30220
+ render: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BiteGrid, { bites: grouped.portrait, ratio: "portrait" })
30221
+ },
30222
+ square: {
30223
+ count: grouped.square.length,
30224
+ render: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BiteGrid, { bites: grouped.square, ratio: "square" })
30225
+ },
30226
+ landscape: {
30227
+ count: grouped.landscape.length,
30228
+ render: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BiteGrid, { bites: grouped.landscape, ratio: "landscape" })
30229
+ }
30230
+ }
30231
+ }
30232
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30233
+ BiteGrid,
30234
+ {
30235
+ bites: grouped.portrait.length > 0 ? grouped.portrait : grouped.square.length > 0 ? grouped.square : grouped.landscape,
30236
+ ratio: grouped.portrait.length > 0 ? "portrait" : grouped.square.length > 0 ? "square" : "landscape"
30237
+ }
30238
+ )
30239
+ ] });
30240
+ }
30241
+ function BiteGrid({ bites, ratio }) {
30242
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: RATIO_DISPLAY_GRID_CLASS[ratio], children: bites.map((bite, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LazyBite, { ratio, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, VideoBiteCard, { url: bite.url, title: bite.title, thumbnailUrl: bite.thumbnail_url }) }, bite.url || index)) });
30243
+ }
30244
+ function VideoBiteCard({ url, title, thumbnailUrl }) {
30245
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Card, { className: "overflow-hidden border border-ods-border bg-ods-card hover:border-ods-accent transition-colors flex flex-col h-full", children: [
30246
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "relative flex-1 min-h-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Video2, { url, poster: thumbnailUrl || void 0, layout: "fill" }) }),
30247
+ title && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4 text-ods-text-primary line-clamp-2", children: title }) })
30248
+ ] });
30249
+ }
30250
+
30251
+ // src/components/features/entity-video-section.tsx
30252
+
30253
+ function EntityVideoSection({
30254
+ mainVideoUrl,
30255
+ youtubeUrl,
30256
+ highlightVideoUrl,
30257
+ highlightVideoThumbnail,
30258
+ mainVideoPoster,
30259
+ title = "Video",
30260
+ videoSummary,
30261
+ videoBites,
30262
+ bitesTitle = "Video Highlights",
30263
+ filterPublishedBites = true,
30264
+ MarkdownRenderer,
30265
+ srtContent,
30266
+ captionsUrl,
30267
+ priority = false
30268
+ }) {
30269
+ const hasFullVideo = !!(youtubeUrl || mainVideoUrl);
30270
+ const hasHighlight = !!highlightVideoUrl;
30271
+ const hasVideo = hasFullVideo || hasHighlight;
30272
+ if (!hasVideo && !videoSummary && (!videoBites || videoBites.length === 0)) {
30273
+ return null;
30274
+ }
30275
+ const fullVideoUrl = youtubeUrl || mainVideoUrl || null;
30276
+ const fullVideoKind = youtubeUrl ? "youtube" : "auto";
30277
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
30278
+ hasVideo && (hasFullVideo && hasHighlight ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Tabs, { defaultValue: "full-video", className: "w-full", children: [
30279
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, TabsList, { className: "inline-flex justify-start rounded-none bg-transparent h-auto p-0 gap-0", children: [
30280
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30281
+ TabsTrigger,
30282
+ {
30283
+ value: "full-video",
30284
+ className: "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 md:px-6 py-3 text-ods-text-secondary data-[state=active]:text-ods-text-primary",
30285
+ children: "Full Video"
30286
+ }
30287
+ ),
30288
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30289
+ TabsTrigger,
30290
+ {
30291
+ value: "highlights",
30292
+ className: "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 md:px-6 py-3 text-ods-text-secondary data-[state=active]:text-ods-text-primary",
30293
+ children: "Highlights"
30294
+ }
30295
+ )
30296
+ ] }),
30297
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TabsContent, { value: "full-video", className: "mt-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30298
+ Video2,
30299
+ {
30300
+ kind: fullVideoKind,
30301
+ url: fullVideoUrl,
30302
+ poster: mainVideoPoster,
30303
+ title,
30304
+ srtContent,
30305
+ captionsUrl,
30306
+ layout: "centered",
30307
+ priority
30308
+ }
30309
+ ) }),
30310
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TabsContent, { value: "highlights", className: "mt-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30311
+ Video2,
30312
+ {
30313
+ url: highlightVideoUrl,
30314
+ poster: highlightVideoThumbnail,
30315
+ layout: "centered"
30316
+ }
30317
+ ) })
30318
+ ] }) : hasFullVideo ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30319
+ Video2,
30320
+ {
30321
+ kind: fullVideoKind,
30322
+ url: fullVideoUrl,
30323
+ poster: mainVideoPoster,
30324
+ title,
30325
+ srtContent,
30326
+ captionsUrl,
30327
+ layout: "centered",
30328
+ priority
30329
+ }
30330
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30331
+ Video2,
30332
+ {
30333
+ url: highlightVideoUrl,
30334
+ poster: highlightVideoThumbnail,
30335
+ layout: "centered",
30336
+ priority
30337
+ }
30338
+ )),
30339
+ videoSummary && MarkdownRenderer && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6 w-full min-w-0", children: [
30340
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "text-h1 tracking-[-1.12px] text-ods-text-primary break-words", children: "Summary" }),
30341
+ /* @__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 }) })
30342
+ ] }),
30343
+ videoBites && videoBites.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30344
+ VideoBitesDisplay,
30345
+ {
30346
+ bites: videoBites,
30347
+ title: bitesTitle,
30348
+ filterPublished: filterPublishedBites
30349
+ }
30350
+ )
30351
+ ] });
30352
+ }
30353
+
30832
30354
  // src/components/features/video-source-selector.tsx
30833
30355
  _chunkBJTOSUT4cjs.init_button2.call(void 0, );
30834
30356
 
@@ -30866,7 +30388,7 @@ function VideoSourceSelector({
30866
30388
  input.accept = "video/*";
30867
30389
  input.onchange = async (e) => {
30868
30390
  const target = e.target;
30869
- const file = _optionalChain([target, 'access', _773 => _773.files, 'optionalAccess', _774 => _774[0]]);
30391
+ const file = _optionalChain([target, 'access', _704 => _704.files, 'optionalAccess', _705 => _705[0]]);
30870
30392
  if (!file) return;
30871
30393
  setIsUploading(true);
30872
30394
  setUploadProgress(0);
@@ -31196,7 +30718,7 @@ function TranscriptSummaryEditor({
31196
30718
  {
31197
30719
  id: "subtitles",
31198
30720
  value: subtitles || "",
31199
- onChange: (e) => _optionalChain([onSubtitlesChange, 'optionalCall', _775 => _775(e.target.value)]),
30721
+ onChange: (e) => _optionalChain([onSubtitlesChange, 'optionalCall', _706 => _706(e.target.value)]),
31200
30722
  placeholder: subtitlesPlaceholder,
31201
30723
  disabled: disabled || !onSubtitlesChange,
31202
30724
  className: "h-full w-full resize-none border-0 bg-transparent text-ods-text-primary placeholder:text-ods-text-secondary/50 focus:ring-0 focus:outline-none p-4 font-mono text-sm",
@@ -31349,7 +30871,7 @@ var AIEnrichSection = ({
31349
30871
  }) => {
31350
30872
  const hasResults = status === "success" || status === "error";
31351
30873
  const shouldDisable = disabled || !canEnrich;
31352
- const unfilledFields = _optionalChain([requiredFields, 'optionalAccess', _776 => _776.filter, 'call', _777 => _777((f) => !f.isFilled)]) || [];
30874
+ const unfilledFields = _optionalChain([requiredFields, 'optionalAccess', _707 => _707.filter, 'call', _708 => _708((f) => !f.isFilled)]) || [];
31353
30875
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
31354
30876
  "div",
31355
30877
  {
@@ -31387,7 +30909,7 @@ var AIEnrichSection = ({
31387
30909
  {
31388
30910
  id: "ai-enrich-custom-instructions",
31389
30911
  value: _nullishCoalesce(customInstructions, () => ( "")),
31390
- onChange: (e) => _optionalChain([onCustomInstructionsChange, 'optionalCall', _778 => _778(e.target.value)]),
30912
+ onChange: (e) => _optionalChain([onCustomInstructionsChange, 'optionalCall', _709 => _709(e.target.value)]),
31391
30913
  placeholder: customInstructionsPlaceholder,
31392
30914
  disabled: loading,
31393
30915
  maxLength: customInstructionsMaxLength,
@@ -31516,7 +31038,7 @@ function HighlightVideoSection({
31516
31038
  input.accept = "video/*";
31517
31039
  input.onchange = async (e) => {
31518
31040
  const target = e.target;
31519
- const file = _optionalChain([target, 'access', _779 => _779.files, 'optionalAccess', _780 => _780[0]]);
31041
+ const file = _optionalChain([target, 'access', _710 => _710.files, 'optionalAccess', _711 => _711[0]]);
31520
31042
  if (!file) return;
31521
31043
  setUploadError(null);
31522
31044
  try {
@@ -32018,7 +31540,7 @@ function HighlightVideoPreview({
32018
31540
  input.accept = "video/*";
32019
31541
  input.onchange = async (e) => {
32020
31542
  const target = e.target;
32021
- const file = _optionalChain([target, 'access', _781 => _781.files, 'optionalAccess', _782 => _782[0]]);
31543
+ const file = _optionalChain([target, 'access', _712 => _712.files, 'optionalAccess', _713 => _713[0]]);
32022
31544
  if (!file) return;
32023
31545
  await onUpload(file);
32024
31546
  };
@@ -32205,7 +31727,7 @@ function HighlightVideoCombinedSection({
32205
31727
  input.accept = "video/*";
32206
31728
  input.onchange = async (e) => {
32207
31729
  const target = e.target;
32208
- const file = _optionalChain([target, 'access', _783 => _783.files, 'optionalAccess', _784 => _784[0]]);
31730
+ const file = _optionalChain([target, 'access', _714 => _714.files, 'optionalAccess', _715 => _715[0]]);
32209
31731
  if (!file) return;
32210
31732
  await onUpload(file);
32211
31733
  };
@@ -32502,7 +32024,7 @@ var getApprovalLevelLabel = (level, editMode = false) => {
32502
32024
  return editMode ? "Set Global Permission" : "";
32503
32025
  }
32504
32026
  const option = approvalLevelOptions.find((opt) => opt.value === level);
32505
- return _optionalChain([option, 'optionalAccess', _785 => _785.label]) || level;
32027
+ return _optionalChain([option, 'optionalAccess', _716 => _716.label]) || level;
32506
32028
  };
32507
32029
  var PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
32508
32030
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-ods-bg border-b border-ods-border flex gap-4 items-center px-4 py-3", children: [
@@ -32754,7 +32276,7 @@ function WaitlistForm({
32754
32276
  const finalPhone = phone ? formatPhoneE164(phone, countryCode) : void 0;
32755
32277
  try {
32756
32278
  await onRegister(email, finalPhone);
32757
- } catch (e26) {
32279
+ } catch (e24) {
32758
32280
  }
32759
32281
  };
32760
32282
  if (!isClient) {
@@ -33034,15 +32556,15 @@ function TicketCard({
33034
32556
  transform: _utilities.CSS.Transform.toString(sortable.transform),
33035
32557
  transition: sortable.transition
33036
32558
  };
33037
- const showDeviceRow = !!(_optionalChain([ticket, 'access', _786 => _786.deviceHostnames, 'optionalAccess', _787 => _787.length]) || ticket.organizationName);
32559
+ const showDeviceRow = !!(_optionalChain([ticket, 'access', _717 => _717.deviceHostnames, 'optionalAccess', _718 => _718.length]) || ticket.organizationName);
33038
32560
  const deviceText = [
33039
- _optionalChain([ticket, 'access', _788 => _788.deviceHostnames, 'optionalAccess', _789 => _789.join, 'call', _790 => _790(", ")]),
32561
+ _optionalChain([ticket, 'access', _719 => _719.deviceHostnames, 'optionalAccess', _720 => _720.join, 'call', _721 => _721(", ")]),
33040
32562
  ticket.organizationName
33041
32563
  ].filter(Boolean).join(", ");
33042
32564
  const handleClick = (e) => {
33043
32565
  if (sortable.isDragging) e.preventDefault();
33044
32566
  };
33045
- const hasRightSection = !!(ticket.priority || _optionalChain([ticket, 'access', _791 => _791.assignees, 'optionalAccess', _792 => _792.length]) || renderAssignSlot);
32567
+ const hasRightSection = !!(ticket.priority || _optionalChain([ticket, 'access', _722 => _722.assignees, 'optionalAccess', _723 => _723.length]) || renderAssignSlot);
33046
32568
  const rightSection = hasRightSection ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "pointer-events-auto flex shrink-0 items-center gap-[var(--spacing-system-xsf)]", children: [
33047
32569
  ticket.priority && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33048
32570
  _chunkTMD5LDX4cjs.Flag02Icon,
@@ -33051,7 +32573,7 @@ function TicketCard({
33051
32573
  "aria-label": `Priority: ${ticket.priority}`
33052
32574
  }
33053
32575
  ),
33054
- renderAssignSlot ? renderAssignSlot(ticket) : _optionalChain([ticket, 'access', _793 => _793.assignees, 'optionalAccess', _794 => _794.length]) ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex -space-x-2", children: [
32576
+ renderAssignSlot ? renderAssignSlot(ticket) : _optionalChain([ticket, 'access', _724 => _724.assignees, 'optionalAccess', _725 => _725.length]) ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex -space-x-2", children: [
33055
32577
  ticket.assignees.slice(0, MAX_VISIBLE_ASSIGNEES).map((a) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33056
32578
  SquareAvatar,
33057
32579
  {
@@ -33080,7 +32602,7 @@ function TicketCard({
33080
32602
  ] }),
33081
32603
  rightSection
33082
32604
  ] }),
33083
- _optionalChain([ticket, 'access', _795 => _795.tags, 'optionalAccess', _796 => _796.length]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketTagRow, { tags: ticket.tags }) : null
32605
+ _optionalChain([ticket, 'access', _726 => _726.tags, 'optionalAccess', _727 => _727.length]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketTagRow, { tags: ticket.tags }) : null
33084
32606
  ] });
33085
32607
  const cardClasses = _chunkOFAYLG6Dcjs.cn.call(void 0,
33086
32608
  "relative flex flex-col gap-[var(--spacing-system-sf)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-sf)] select-none text-left",
@@ -33240,7 +32762,7 @@ function ColumnBody({ column, getTicketHref, renderAssignSlot, onLoadMore, loadM
33240
32762
  const observer = new IntersectionObserver(
33241
32763
  (entries) => {
33242
32764
  if (entries.some((e) => e.isIntersecting)) {
33243
- _optionalChain([loadMoreRef, 'access', _797 => _797.current, 'optionalCall', _798 => _798(columnIdRef.current)]);
32765
+ _optionalChain([loadMoreRef, 'access', _728 => _728.current, 'optionalCall', _729 => _729(columnIdRef.current)]);
33244
32766
  }
33245
32767
  },
33246
32768
  { root, rootMargin: loadMoreRootMargin }
@@ -33269,7 +32791,7 @@ function ColumnBody({ column, getTicketHref, renderAssignSlot, onLoadMore, loadM
33269
32791
  {
33270
32792
  ticket: t,
33271
32793
  columnId: column.id,
33272
- href: _optionalChain([getTicketHref, 'optionalCall', _799 => _799(t.id)]),
32794
+ href: _optionalChain([getTicketHref, 'optionalCall', _730 => _730(t.id)]),
33273
32795
  renderAssignSlot,
33274
32796
  dragDisabled: column.dragDisabled
33275
32797
  },
@@ -33352,17 +32874,17 @@ function Board({
33352
32874
  const pointer = _core.pointerWithin.call(void 0, args);
33353
32875
  const intersections = pointer.length > 0 ? pointer : _core.rectIntersection.call(void 0, args);
33354
32876
  const ticketHit = intersections.find(
33355
- (c) => _optionalChain([c, 'access', _800 => _800.data, 'optionalAccess', _801 => _801.droppableContainer, 'optionalAccess', _802 => _802.data, 'optionalAccess', _803 => _803.current, 'optionalAccess', _804 => _804.type]) === "ticket"
32877
+ (c) => _optionalChain([c, 'access', _731 => _731.data, 'optionalAccess', _732 => _732.droppableContainer, 'optionalAccess', _733 => _733.data, 'optionalAccess', _734 => _734.current, 'optionalAccess', _735 => _735.type]) === "ticket"
33356
32878
  );
33357
32879
  if (ticketHit) return [ticketHit];
33358
32880
  const columnHit = intersections.find(
33359
- (c) => _optionalChain([c, 'access', _805 => _805.data, 'optionalAccess', _806 => _806.droppableContainer, 'optionalAccess', _807 => _807.data, 'optionalAccess', _808 => _808.current, 'optionalAccess', _809 => _809.type]) === "column"
32881
+ (c) => _optionalChain([c, 'access', _736 => _736.data, 'optionalAccess', _737 => _737.droppableContainer, 'optionalAccess', _738 => _738.data, 'optionalAccess', _739 => _739.current, 'optionalAccess', _740 => _740.type]) === "column"
33360
32882
  );
33361
32883
  if (columnHit) {
33362
- const columnId = _optionalChain([columnHit, 'access', _810 => _810.data, 'optionalAccess', _811 => _811.droppableContainer, 'optionalAccess', _812 => _812.data, 'optionalAccess', _813 => _813.current, 'optionalAccess', _814 => _814.columnId]);
32884
+ const columnId = _optionalChain([columnHit, 'access', _741 => _741.data, 'optionalAccess', _742 => _742.droppableContainer, 'optionalAccess', _743 => _743.data, 'optionalAccess', _744 => _744.current, 'optionalAccess', _745 => _745.columnId]);
33363
32885
  const ticketsInColumn = args.droppableContainers.filter((c) => {
33364
32886
  const d = c.data.current;
33365
- return _optionalChain([d, 'optionalAccess', _815 => _815.type]) === "ticket" && d.columnId === columnId;
32887
+ return _optionalChain([d, 'optionalAccess', _746 => _746.type]) === "ticket" && d.columnId === columnId;
33366
32888
  });
33367
32889
  if (ticketsInColumn.length > 0) {
33368
32890
  const closest = _core.closestCorners.call(void 0, { ...args, droppableContainers: ticketsInColumn });
@@ -33387,20 +32909,20 @@ function Board({
33387
32909
  const overId = String(over.id);
33388
32910
  if (activeId === overId) return;
33389
32911
  const overData = over.data.current;
33390
- const fromColumnId = _optionalChain([locate, 'call', _816 => _816(items, activeId), 'optionalAccess', _817 => _817.columnId]);
33391
- const toColumnId = _optionalChain([overData, 'optionalAccess', _818 => _818.columnId]);
32912
+ const fromColumnId = _optionalChain([locate, 'call', _747 => _747(items, activeId), 'optionalAccess', _748 => _748.columnId]);
32913
+ const toColumnId = _optionalChain([overData, 'optionalAccess', _749 => _749.columnId]);
33392
32914
  if (!fromColumnId || !toColumnId || fromColumnId === toColumnId) return;
33393
32915
  const origin = dragOriginRef.current;
33394
- const isReturnToOrigin = _optionalChain([origin, 'optionalAccess', _819 => _819.fromColumnId]) === toColumnId;
32916
+ const isReturnToOrigin = _optionalChain([origin, 'optionalAccess', _750 => _750.fromColumnId]) === toColumnId;
33395
32917
  const targetCol = items.find((c) => c.id === toColumnId);
33396
- const blockedBySource = !isReturnToOrigin && !!_optionalChain([targetCol, 'optionalAccess', _820 => _820.allowedFromColumns]) && !!origin && !targetCol.allowedFromColumns.includes(origin.fromColumnId);
33397
- if (_optionalChain([targetCol, 'optionalAccess', _821 => _821.dropDisabled]) && !isReturnToOrigin || blockedBySource) return;
32918
+ const blockedBySource = !isReturnToOrigin && !!_optionalChain([targetCol, 'optionalAccess', _751 => _751.allowedFromColumns]) && !!origin && !targetCol.allowedFromColumns.includes(origin.fromColumnId);
32919
+ if (_optionalChain([targetCol, 'optionalAccess', _752 => _752.dropDisabled]) && !isReturnToOrigin || blockedBySource) return;
33398
32920
  setItems((prev) => {
33399
32921
  const fromIndex = findIndexInColumn(prev, fromColumnId, activeId);
33400
32922
  const toCol = prev.find((c) => c.id === toColumnId);
33401
32923
  if (fromIndex < 0 || !toCol) return prev;
33402
32924
  let toIndex;
33403
- if (_optionalChain([overData, 'optionalAccess', _822 => _822.type]) === "column") {
32925
+ if (_optionalChain([overData, 'optionalAccess', _753 => _753.type]) === "column") {
33404
32926
  toIndex = toCol.tickets.length;
33405
32927
  } else {
33406
32928
  const overIndex = toCol.tickets.findIndex((t) => t.id === overId);
@@ -33442,14 +32964,14 @@ function Board({
33442
32964
  const toColumnId = located.columnId;
33443
32965
  const isCrossColumn = origin.fromColumnId !== toColumnId;
33444
32966
  const targetCol = items.find((c) => c.id === toColumnId);
33445
- if (isCrossColumn && (_optionalChain([targetCol, 'optionalAccess', _823 => _823.dropDisabled]) || _optionalChain([targetCol, 'optionalAccess', _824 => _824.allowedFromColumns]) && !targetCol.allowedFromColumns.includes(origin.fromColumnId))) {
32967
+ if (isCrossColumn && (_optionalChain([targetCol, 'optionalAccess', _754 => _754.dropDisabled]) || _optionalChain([targetCol, 'optionalAccess', _755 => _755.allowedFromColumns]) && !targetCol.allowedFromColumns.includes(origin.fromColumnId))) {
33446
32968
  setItems(columns);
33447
32969
  return;
33448
32970
  }
33449
32971
  let finalIndex = located.index;
33450
- let finalColumnTickets = _nullishCoalesce(_optionalChain([items, 'access', _825 => _825.find, 'call', _826 => _826((c) => c.id === toColumnId), 'optionalAccess', _827 => _827.tickets]), () => ( []));
32972
+ let finalColumnTickets = _nullishCoalesce(_optionalChain([items, 'access', _756 => _756.find, 'call', _757 => _757((c) => c.id === toColumnId), 'optionalAccess', _758 => _758.tickets]), () => ( []));
33451
32973
  const overData = over.data.current;
33452
- if (_optionalChain([overData, 'optionalAccess', _828 => _828.type]) === "ticket") {
32974
+ if (_optionalChain([overData, 'optionalAccess', _759 => _759.type]) === "ticket") {
33453
32975
  const overIndex = findIndexInColumn(items, toColumnId, String(over.id));
33454
32976
  if (overIndex >= 0 && overIndex !== located.index) {
33455
32977
  finalColumnTickets = _sortable.arrayMove.call(void 0, finalColumnTickets, located.index, overIndex);
@@ -33469,8 +32991,8 @@ function Board({
33469
32991
  ticketId: origin.ticketId,
33470
32992
  fromColumnId: origin.fromColumnId,
33471
32993
  toColumnId,
33472
- afterTicketId: _nullishCoalesce(_optionalChain([finalColumnTickets, 'access', _829 => _829[finalIndex - 1], 'optionalAccess', _830 => _830.id]), () => ( null)),
33473
- beforeTicketId: _nullishCoalesce(_optionalChain([finalColumnTickets, 'access', _831 => _831[finalIndex + 1], 'optionalAccess', _832 => _832.id]), () => ( null))
32994
+ afterTicketId: _nullishCoalesce(_optionalChain([finalColumnTickets, 'access', _760 => _760[finalIndex - 1], 'optionalAccess', _761 => _761.id]), () => ( null)),
32995
+ beforeTicketId: _nullishCoalesce(_optionalChain([finalColumnTickets, 'access', _762 => _762[finalIndex + 1], 'optionalAccess', _763 => _763.id]), () => ( null))
33474
32996
  });
33475
32997
  };
33476
32998
  const handleDragCancel = () => {
@@ -33492,8 +33014,8 @@ function Board({
33492
33014
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex h-full overflow-x-auto", className), children: items.map((column, i) => {
33493
33015
  const prev = items[i - 1];
33494
33016
  const next = items[i + 1];
33495
- const joinLeft = !!(column.system && _optionalChain([prev, 'optionalAccess', _833 => _833.system]));
33496
- const joinRight = !!(column.system && _optionalChain([next, 'optionalAccess', _834 => _834.system]));
33017
+ const joinLeft = !!(column.system && _optionalChain([prev, 'optionalAccess', _764 => _764.system]));
33018
+ const joinRight = !!(column.system && _optionalChain([next, 'optionalAccess', _765 => _765.system]));
33497
33019
  const showGap = i > 0 && !joinLeft;
33498
33020
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, React101.Fragment, { children: [
33499
33021
  showGap && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "aria-hidden": true, className: "w-[var(--spacing-system-mf)] shrink-0" }),
@@ -33527,7 +33049,7 @@ function locate(cols, ticketId) {
33527
33049
  return null;
33528
33050
  }
33529
33051
  function findIndexInColumn(cols, columnId, ticketId) {
33530
- return _nullishCoalesce(_optionalChain([cols, 'access', _835 => _835.find, 'call', _836 => _836((c) => c.id === columnId), 'optionalAccess', _837 => _837.tickets, 'access', _838 => _838.findIndex, 'call', _839 => _839((t) => t.id === ticketId)]), () => ( -1));
33052
+ return _nullishCoalesce(_optionalChain([cols, 'access', _766 => _766.find, 'call', _767 => _767((c) => c.id === columnId), 'optionalAccess', _768 => _768.tickets, 'access', _769 => _769.findIndex, 'call', _770 => _770((t) => t.id === ticketId)]), () => ( -1));
33531
33053
  }
33532
33054
 
33533
33055
  // src/components/features/board/types.ts
@@ -34185,5 +33707,13 @@ function canonicalize(status) {
34185
33707
 
34186
33708
 
34187
33709
 
34188
- exports.Label = Label; exports.AllowedDomainsInput = AllowedDomainsInput; exports.HiddenTagsPopup = HiddenTagsPopup; exports.tagVariants = tagVariants; exports.Tag = Tag; exports.Autocomplete = Autocomplete; exports.Card = Card; exports.CardHeader = CardHeader; exports.CardTitle = CardTitle; exports.CardDescription = CardDescription; exports.CardContent = CardContent; exports.CardFooter = CardFooter; exports.CardHorizontal = CardHorizontal; exports.CheckboxBlock = CheckboxBlock; exports.CheckboxWithDescription = CheckboxWithDescription; exports.Select = Select; exports.SelectGroup = SelectGroup; exports.SelectValue = SelectValue; exports.SelectTrigger = SelectTrigger; exports.SelectScrollUpButton = SelectScrollUpButton; exports.SelectScrollDownButton = SelectScrollDownButton; exports.SelectContent = SelectContent; exports.SelectLabel = SelectLabel; exports.SelectItem = SelectItem; exports.SelectSeparator = SelectSeparator; exports.DatePicker = DatePicker; exports.DatePickerInput = DatePickerInput; exports.DatePickerInputSimple = DatePickerInputSimple; exports.getPlatformAccentColor = getPlatformAccentColor; exports.getCurrentPlatform = getCurrentPlatform; exports.delay = delay; exports.generateRandomString = generateRandomString; exports.truncateString = truncateString; exports.deepClone = deepClone; exports.getSlackCommunityJoinUrl = getSlackCommunityJoinUrl; exports.OS_PLATFORMS = OS_PLATFORMS; exports.DEFAULT_OS_PLATFORM = DEFAULT_OS_PLATFORM; exports.validateAccessCode = validateAccessCode; exports.consumeAccessCode = consumeAccessCode; exports.validateAndConsumeAccessCode = validateAndConsumeAccessCode; exports.useAccessCodeIntegration = useAccessCodeIntegration; exports.isValidEmailDomain = isValidEmailDomain; exports.validateEmailDomain = validateEmailDomain; exports.validateEmailDomainList = validateEmailDomainList; exports.cleanEmailDomain = cleanEmailDomain; exports.getConfidenceColorClass = getConfidenceColorClass; exports.getConfidenceLevel = getConfidenceLevel; exports.getConfidenceBorderClass = getConfidenceBorderClass; exports.getConfidenceTextClass = getConfidenceTextClass; exports.getConfidenceBgClass = getConfidenceBgClass; exports.getConfidenceLabel = getConfidenceLabel; exports.formatReleaseDate = formatReleaseDate; exports.formatRelativeTime = formatRelativeTime; exports.getDynamicIcon = getDynamicIcon; exports.normalizeToolType = normalizeToolType; exports.normalizeToolTypeWithFallback = normalizeToolTypeWithFallback; exports.toToolLabel = toToolLabel; exports.isValidToolType = isValidToolType; exports.getToolTypeAliases = getToolTypeAliases; exports.getToolLabel = getToolLabel; exports.ShellTypeValues = ShellTypeValues; exports.SHELL_TYPES = SHELL_TYPES; exports.shellLabels = shellLabels; exports.getShellLabel = getShellLabel; exports.getShellIcon = getShellIcon; exports.OSTypeValues = OSTypeValues; exports.OS_TYPES = OS_TYPES; exports.osLabels = osLabels; exports.normalizeOSType = normalizeOSType; exports.getOSLabel = getOSLabel; exports.getOSIcon = getOSIcon; exports.getOSTypeDefinition = getOSTypeDefinition; exports.getOSPlatformId = getOSPlatformId; exports.isOSPlatform = isOSPlatform; exports.getCountryPhoneData = getCountryPhoneData; exports.getCountryByCode = getCountryByCode; exports.validatePhoneNumber = validatePhoneNumber; exports.formatPhoneE164 = formatPhoneE164; exports.GENERIC_EMAIL_DOMAINS = GENERIC_EMAIL_DOMAINS; exports.extractDomainFromEmail = extractDomainFromEmail; exports.normalizeDomain = normalizeDomain; exports.isGenericDomain = isGenericDomain; exports.hasGenericEmailDomain = hasGenericEmailDomain; exports.isGenericWebsiteDomain = isGenericWebsiteDomain; exports.ApprovalRequestMessage = ApprovalRequestMessage; exports.PulseDots = PulseDots; exports.ExpandChevron = ExpandChevron; exports.useCollapsible = useCollapsible; exports.getCommandText = getCommandText; exports.ArgRow = ArgRow; exports.ResultBlock = ResultBlock; exports.ApprovalBatchMessage = ApprovalBatchMessage; exports.ContextCompactionDisplay = ContextCompactionDisplay; exports.SimpleMarkdownRenderer = SimpleMarkdownRenderer; exports.ThinkingDisplay = ThinkingDisplay; exports.ErrorMessageDisplay = ErrorMessageDisplay; exports.SquareAvatar = SquareAvatar; exports.resolveTicketStatus = resolveTicketStatus; exports.getTicketStatusConfig = getTicketStatusConfig; exports.getTicketStatusTag = getTicketStatusTag; exports.TicketStatusTag = TicketStatusTag; exports.ChatContainer = ChatContainer; exports.ChatHeader = ChatHeader; exports.ChatContent = ChatContent; exports.ChatFooter = ChatFooter; exports.Textarea = Textarea; exports.ChatTypingIndicator = ChatTypingIndicator; exports.SlashCommandSuggestions = SlashCommandSuggestions; exports.ChatInput = ChatInput; exports.ToolExecutionDisplay = ToolExecutionDisplay; exports.remarkCardLinks = remarkCardLinks; exports.MemoizedChatMessageEnhanced = MemoizedChatMessageEnhanced; exports.ChatMessageListLoader = ChatMessageListLoader; exports.useDelayedFlag = useDelayedFlag; exports.ChatMessageList = ChatMessageList; exports.ChatQuickAction = ChatQuickAction; exports.ChatTicketItem = ChatTicketItem; exports.ChatTicketList = ChatTicketList; exports.HoverCard = HoverCard; exports.HoverCardTrigger = HoverCardTrigger; exports.HoverCardContent = HoverCardContent; exports.ModelDisplay = ModelDisplay; exports.DialogListItem = DialogListItem; exports.ChatSidebar = ChatSidebar; exports.CHAT_TYPE = CHAT_TYPE; exports.OWNER_TYPE = OWNER_TYPE; exports.MESSAGE_ROLE = MESSAGE_ROLE; exports.ASSISTANT_TYPE = ASSISTANT_TYPE; exports.AUTHOR_TYPE = AUTHOR_TYPE; exports.APPROVAL_STATUS = APPROVAL_STATUS; exports.CONNECTION_STATUS = CONNECTION_STATUS; exports.MESSAGE_TYPE = MESSAGE_TYPE; exports.NETWORK_CONFIG = NETWORK_CONFIG; exports.useChunkCatchup = useChunkCatchup; exports.useNatsDialogSubscription = useNatsDialogSubscription; exports.buildNatsWsUrl = buildNatsWsUrl; exports.parseChunkToAction = parseChunkToAction; exports.isControlChunk = isControlChunk; exports.isErrorChunk = isErrorChunk; exports.isMetadataChunk = isMetadataChunk; exports.extractTextFromChunk = extractTextFromChunk; exports.MessageSegmentAccumulator = MessageSegmentAccumulator; exports.createMessageSegmentAccumulator = createMessageSegmentAccumulator; exports.useRealtimeChunkProcessor = useRealtimeChunkProcessor; exports.processHistoricalMessages = processHistoricalMessages; exports.extractErrorMessages = extractErrorMessages; exports.processHistoricalMessagesWithErrors = processHistoricalMessagesWithErrors; exports.extractIncompleteMessageState = extractIncompleteMessageState; exports.DynamicThemeProvider = DynamicThemeProvider; exports.useDynamicTheme = useDynamicTheme; exports.ArrayEntryManager = ArrayEntryManager; exports.ProviderButton = ProviderButton; exports.AuthProvidersList = AuthProvidersList; exports.ChangelogManager = ChangelogManager; exports.ChangelogSectionsManager = ChangelogSectionsManager; exports.ClickUpTasksManager = ClickUpTasksManager; exports.CommandBox = CommandBox; exports.ErrorBoundary = ErrorBoundary; exports.badgeVariants = badgeVariants; exports.Badge = Badge; exports.statusBadgeVariants = statusBadgeVariants; exports.StatusBadge = StatusBadge; exports.SectionSelector = SectionSelector; exports.FigmaPrototypeViewer = FigmaPrototypeViewer; exports.FiltersDropdown = FiltersDropdown; exports.useFiltersDropdown = useFiltersDropdown; exports.GitHubReleasesManager = GitHubReleasesManager; exports.KnowledgeBaseLinksManager = KnowledgeBaseLinksManager; exports.Progress = Progress; exports.LoadingProvider = LoadingProvider; exports.useLoading = useLoading; exports.MediaGalleryManager = MediaGalleryManager; exports.MoreAboutButton = MoreAboutButton; exports.OrganizationIcon = OrganizationIcon; exports.OSTypeBadge = OSTypeBadge; exports.OSTypeIcon = OSTypeIcon; exports.OSTypeLabel = OSTypeLabel; exports.OSTypeBadgeGroup = OSTypeBadgeGroup; exports.ParallaxImageShowcase = ParallaxImageShowcase; exports.PathsDisplay = PathsDisplay; exports.OPENFRAME_PATHS = OPENFRAME_PATHS; exports.getOpenFramePaths = getOpenFramePaths; exports.PlatformBadge = PlatformBadge; exports.PlatformFilterComponent = PlatformFilterComponent; exports.PushButtonSelector = PushButtonSelector; exports.ReleaseMediaManager = ReleaseMediaManager; exports.SelectButton = SelectButton; exports.SEOEditorPreview = SEOEditorPreview; exports.SocialLinksManager = SocialLinksManager; exports.StartWithOpenFrameButton = StartWithOpenFrameButton; exports.StatusFilterComponent = StatusFilterComponent; exports.TagsSelector = TagsSelector; exports.VideoPlayer = VideoPlayer; exports.VideoSourceSelector = VideoSourceSelector; exports.ConfidenceBadge = ConfidenceBadge; exports.TranscriptSummaryEditor = TranscriptSummaryEditor; exports.AIEnrichButton = AIEnrichButton; exports.AIWarningsSection = AIWarningsSection; exports.AIEnrichSection = AIEnrichSection; exports.HighlightVideoSection = HighlightVideoSection; exports.HighlightConfigSection = HighlightConfigSection; exports.EntitySummaryEditor = EntitySummaryEditor; exports.AIStatusIndicator = AIStatusIndicator; exports.AIRequiredBadge = AIRequiredBadge; exports.TranscribeSummarizeSection = TranscribeSummarizeSection; exports.VideoClipsSection = VideoClipsSection; exports.HighlightGenerationSection = HighlightGenerationSection; exports.HighlightVideoPreview = HighlightVideoPreview; exports.TranscribeAndSummarizeCombinedSection = TranscribeAndSummarizeCombinedSection; exports.HighlightVideoCombinedSection = HighlightVideoCombinedSection; exports.ViewToggle = ViewToggle; exports.YouTubeEmbed = YouTubeEmbed; exports.extractYouTubeId = extractYouTubeId; exports.PolicyConfigurationPanel = PolicyConfigurationPanel; exports.PhoneInput = PhoneInput; exports.WaitlistForm = WaitlistForm; exports.NotificationsProvider = NotificationsProvider; exports.useNotifications = useNotifications; exports.useOptionalNotifications = useOptionalNotifications; exports.Drawer = Drawer; exports.DrawerTrigger = DrawerTrigger; exports.DrawerClose = DrawerClose; exports.DrawerPortal = DrawerPortal; exports.DrawerOverlay = DrawerOverlay; exports.DrawerContent = DrawerContent; exports.DrawerHeader = DrawerHeader; exports.DrawerTitle = DrawerTitle; exports.DrawerDescription = DrawerDescription; exports.DrawerBody = DrawerBody; exports.DrawerFooter = DrawerFooter; exports.Switch = Switch; exports.NotificationTile = NotificationTile; exports.NotificationDrawer = NotificationDrawer; exports.BoardColumnHeader = BoardColumnHeader; exports.tintOnDark = tintOnDark; exports.TicketCard = TicketCard; exports.TicketCardSkeleton = TicketCardSkeleton; exports.BoardColumn = BoardColumn; exports.useBoardCollapse = useBoardCollapse; exports.Board = Board; exports.columnFromTicketStatus = columnFromTicketStatus; exports.groupTicketsByStatus = groupTicketsByStatus; exports.Header = Header; exports.HeaderSkeleton = HeaderSkeleton; exports.ClientOnlyHeader = ClientOnlyHeader; exports.MobileNavPanel = MobileNavPanel; exports.SlidingSidebar = SlidingSidebar; exports.StickySectionNav = StickySectionNav; exports.useSectionNavigation = useSectionNavigation; exports.NavigationSidebar = NavigationSidebar; exports.HeaderButton = HeaderButton; exports.HeaderGlobalSearch = HeaderGlobalSearch; exports.HeaderOrganizationFilter = HeaderOrganizationFilter; exports.AppHeader = AppHeader; exports.MobileBurgerMenu = MobileBurgerMenu; exports.AppLayout = AppLayout; exports.SoftwareInfo = SoftwareInfo; exports.SoftwareSourceBadge = SoftwareSourceBadge; exports.CveLink = CveLink; exports.ToolBadge = ToolBadge; exports.ShellTypeBadge = ShellTypeBadge; exports.ScriptInfoSection = ScriptInfoSection; exports.ScriptArguments = ScriptArguments; exports.AnnouncementBar = AnnouncementBar; exports.VendorIcon = VendorIcon; exports.CategoriesCart = CategoriesCart; exports.CategoryCard = CategoryCard; exports.VendorDisplayButton = VendorDisplayButton; exports.setRealAuthHook = setRealAuthHook; exports.useAuth = useAuth; exports.AuthProvider = AuthProvider; exports.CommentCard = CommentCard; exports.ContentLoadingContainer = ContentLoadingContainer; exports.useContentLoading = useContentLoading; exports.DynamicSkeleton = DynamicSkeleton; exports.SkeletonPresets = SkeletonPresets; exports.PlatformSkeletonContainer = PlatformSkeletonContainer; exports.ProgressiveSkeleton = ProgressiveSkeleton; exports.EmptyState = EmptyState2; exports.ChevronButton = ChevronButton; exports.FaqAccordion = FaqAccordion; exports.FilterChip = FilterChip; exports.SocialIconRow = SocialIconRow; exports.Footer = Footer; exports.useUnifiedFiltering = useUnifiedFiltering; exports.vendorFilterConfig = vendorFilterConfig; exports.blogFilterConfig = blogFilterConfig; exports.Pagination = Pagination; exports.PaginationContent = PaginationContent; exports.PaginationItem = PaginationItem; exports.PaginationLink = PaginationLink; exports.PaginationEllipsis = PaginationEllipsis; exports.PaginationPrevious = PaginationPrevious; exports.PaginationNext = PaginationNext; exports.UnifiedPagination = UnifiedPagination; exports.FooterWaitlistButton = FooterWaitlistButton; exports.HeroImageUploader = HeroImageUploader; exports.ResponsiveIconsBlock = ResponsiveIconsBlock; exports.Slider = Slider; exports.ImageCropper = ImageCropper; exports.MediaCarousel = MediaCarousel; exports.MetricValue = MetricValue; exports.MSPDisplay = MSPDisplay; exports.PersistentFilterControls = PersistentFilterControls; exports.PersistentSearchContainer = PersistentSearchContainer; exports.PersistentSidebar = PersistentSidebar; exports.PersistentMobileDropdown = PersistentMobileDropdown; exports.PersistentPagination = PersistentPagination; exports.usePaginationLoading = usePaginationLoading; exports.PersistentPaginationWrapper = PersistentPaginationWrapper; exports.PRICING_STYLES = PRICING_STYLES; exports.PricingDisplay = PricingDisplay; exports.formatPricingForDisplay = formatPricingForDisplay; exports.ResultsCount = ResultsCount; exports.VendorTag = VendorTag; exports.SelectionSourceBadge = SelectionSourceBadge; exports.UserDisplay = UserDisplay; exports.UnifiedSkeleton = UnifiedSkeleton; exports.TextSkeleton = TextSkeleton; exports.InteractiveSkeleton = InteractiveSkeleton; exports.MediaSkeleton = MediaSkeleton; exports.CardSkeleton = CardSkeleton; exports.CardSkeletonGrid = CardSkeletonGrid; exports.AnnouncementBarSkeleton = AnnouncementBarSkeleton; exports.HeroSkeleton = HeroSkeleton; exports.SearchContainerSkeleton = SearchContainerSkeleton; exports.CategorySidebarSkeleton = CategorySidebarSkeleton; exports.BreadcrumbSkeleton = BreadcrumbSkeleton; exports.ResultsHeaderSkeleton = ResultsHeaderSkeleton; exports.TwoColumnLayoutSkeleton = TwoColumnLayoutSkeleton; exports.ArticleLayoutSkeleton = ArticleLayoutSkeleton; exports.VendorDetailLayoutSkeleton = VendorDetailLayoutSkeleton; exports.StatsSectionSkeleton = StatsSectionSkeleton; exports.BlogCardGridSkeleton = BlogCardGridSkeleton; exports.VendorGridSkeleton = VendorGridSkeleton; exports.SlackCommunitySkeleton = SlackCommunitySkeleton; exports.ParagraphSkeleton = ParagraphSkeleton; exports.ListSkeleton = ListSkeleton; exports.TableSkeleton = TableSkeleton; exports.FormSkeleton = FormSkeleton; exports.NavigationSkeleton = NavigationSkeleton; exports.ProfileSkeleton = ProfileSkeleton; exports.CommentSkeleton = CommentSkeleton; exports.FeatureListSkeleton = FeatureListSkeleton; exports.TimelineSkeleton = TimelineSkeleton; exports.PricingSkeleton = PricingSkeleton; exports.ProfileLoadingSkeleton = ProfileLoadingSkeleton; exports.MspProfileFormSkeleton = MspProfileFormSkeleton; exports.CategoryCardSkeleton = CategoryCardSkeleton; exports.CategoryVendorSelectorSkeleton = CategoryVendorSelectorSkeleton; exports.WizardLayoutSkeleton = WizardLayoutSkeleton; exports.MarginReportSkeleton = MarginReportSkeleton; exports.UsersGridSkeleton = UsersGridSkeleton; exports.OrganizationIconSkeleton = OrganizationIconSkeleton; exports.OrganizationCardSkeleton = OrganizationCardSkeleton; exports.OrganizationCardSkeletonGrid = OrganizationCardSkeletonGrid; exports.DeviceCardSkeleton = DeviceCardSkeleton; exports.DeviceCardSkeletonGrid = DeviceCardSkeletonGrid; exports.VendorPageSkeleton = VendorPageSkeleton; exports.CheckIcon = CheckIcon2; exports.XIcon = XIcon; exports.MinusIcon = MinusIcon; exports.CheckCircleIcon = CheckCircleIcon3; exports.XCircleIcon = XCircleIcon; exports.YesNoDisplay = YesNoDisplay; exports.evaluateFeatureValue = evaluateFeatureValue; exports.MadeWithLove = MadeWithLove; exports.DateTimePicker = DateTimePicker; exports.InteractiveCard = InteractiveCard; exports.OnboardingStepCard = OnboardingStepCard; exports.OnboardingWalkthrough = OnboardingWalkthrough; exports.ProductReleaseCard = ProductReleaseCard; exports.ProductReleaseCardSkeleton = ProductReleaseCardSkeleton; exports.PageShell = PageShell; exports.ArticleDetailLayout = ArticleDetailLayout; exports.ReleaseChangelogSection = ReleaseChangelogSection; exports.ImageGalleryModal = ImageGalleryModal; exports.ActionsMenu = ActionsMenu; exports.ActionsMenuDropdown = ActionsMenuDropdown; exports.PageActions = PageActions; exports.usePageActionsBottomPadding = usePageActionsBottomPadding; exports.PageContainer = PageContainer; exports.ListPageContainer = ListPageContainer; exports.DetailPageContainer = DetailPageContainer; exports.FormPageContainer = FormPageContainer; exports.ContentPageContainer = ContentPageContainer; exports.DetailPageSkeleton = DetailPageSkeleton; exports.ReleaseDetailPage = ReleaseDetailPage; exports.ReleaseDetailSkeleton = ReleaseDetailSkeleton; exports.InfoCard = InfoCard; exports.InfoRow = InfoRow; exports.InputTrigger = InputTrigger; exports.MediaTypeSelector = MediaTypeSelector; exports.PageLoader = PageLoader; exports.CompactPageLoader = CompactPageLoader; exports.ProgressBar = ProgressBar; exports.RadioGroup = RadioGroup; exports.RadioGroupItem = RadioGroupItem; exports.RadioGroupBlock = RadioGroupBlock; exports.TagsInput = TagsInput; exports.TagsManager = TagsManager; exports.AlertDialog = AlertDialog; exports.AlertDialogTrigger = AlertDialogTrigger; exports.AlertDialogPortal = AlertDialogPortal; exports.AlertDialogOverlay = AlertDialogOverlay; exports.AlertDialogContent = AlertDialogContent; exports.AlertDialogHeader = AlertDialogHeader; exports.AlertDialogFooter = AlertDialogFooter; exports.AlertDialogTitle = AlertDialogTitle; exports.AlertDialogDescription = AlertDialogDescription; exports.AlertDialogAction = AlertDialogAction; exports.AlertDialogCancel = AlertDialogCancel; exports.AspectRatio = AspectRatio; exports.Dialog = Dialog; exports.DialogTrigger = DialogTrigger; exports.DialogPortal = DialogPortal; exports.DialogClose = DialogClose; exports.DialogOverlay = DialogOverlay; exports.DialogContent = DialogContent; exports.DialogHeader = DialogHeader; exports.DialogFooter = DialogFooter; exports.DialogTitle = DialogTitle; exports.DialogDescription = DialogDescription; exports.Modal = Modal; exports.ModalContent = ModalContent; exports.ModalHeader = ModalHeader; exports.ModalTitle = ModalTitle; exports.ModalFooter = ModalFooter; exports.Modal2 = Modal2; exports.ModalContent2 = ModalContent2; exports.ModalHeader2 = ModalHeader2; exports.ModalTitle2 = ModalTitle2; exports.ModalFooter2 = ModalFooter2; exports.Separator = Separator2; exports.Sheet = Sheet; exports.SheetTrigger = SheetTrigger; exports.SheetClose = SheetClose; exports.SheetPortal = SheetPortal; exports.SheetOverlay = SheetOverlay; exports.SheetContent = SheetContent; exports.SheetHeader = SheetHeader; exports.SheetFooter = SheetFooter; exports.SheetTitle = SheetTitle; exports.SheetDescription = SheetDescription; exports.Tabs = Tabs; exports.TabsList = TabsList; exports.TabsTrigger = TabsTrigger; exports.TabsContent = TabsContent; exports.Accordion = Accordion; exports.AccordionItem = AccordionItem; exports.AccordionTrigger = AccordionTrigger; exports.AccordionContent = AccordionContent; exports.Breadcrumb = Breadcrumb; exports.BreadcrumbList = BreadcrumbList; exports.BreadcrumbItem = BreadcrumbItem; exports.BreadcrumbLink = BreadcrumbLink; exports.BreadcrumbPage = BreadcrumbPage; exports.BreadcrumbSeparator = BreadcrumbSeparator; exports.BreadcrumbEllipsis = BreadcrumbEllipsis; exports.MenubarMenu = MenubarMenu; exports.MenubarGroup = MenubarGroup; exports.MenubarPortal = MenubarPortal; exports.MenubarSub = MenubarSub; exports.MenubarRadioGroup = MenubarRadioGroup; exports.Menubar = Menubar; exports.MenubarTrigger = MenubarTrigger; exports.MenubarSubTrigger = MenubarSubTrigger; exports.MenubarSubContent = MenubarSubContent; exports.MenubarContent = MenubarContent; exports.MenubarItem = MenubarItem; exports.MenubarCheckboxItem = MenubarCheckboxItem; exports.MenubarRadioItem = MenubarRadioItem; exports.MenubarLabel = MenubarLabel; exports.MenubarSeparator = MenubarSeparator; exports.MenubarShortcut = MenubarShortcut; exports.NavigationMenu = NavigationMenu; exports.NavigationMenuList = NavigationMenuList; exports.NavigationMenuItem = NavigationMenuItem; exports.navigationMenuTriggerStyle = navigationMenuTriggerStyle; exports.NavigationMenuTrigger = NavigationMenuTrigger; exports.NavigationMenuContent = NavigationMenuContent; exports.NavigationMenuLink = NavigationMenuLink; exports.NavigationMenuViewport = NavigationMenuViewport; exports.NavigationMenuIndicator = NavigationMenuIndicator; exports.TabContent = TabContent; exports.TabNavigation = TabNavigation; exports.getTabById = getTabById; exports.getTabComponent = getTabComponent; exports.Alert = Alert; exports.AlertTitle = AlertTitle; exports.AlertDescription = AlertDescription; exports.StatusIndicator = StatusIndicator; exports.FilterCheckboxItem = FilterCheckboxItem; exports.TagKeyValueFilter = TagKeyValueFilter; exports.FilterModal = FilterModal; exports.ListPageLayout = ListPageLayout; exports.TitleBlock = TitleBlock; exports.PageLayout = PageLayout; exports.toggleVariants = toggleVariants; exports.Toggle = Toggle; exports.ToggleGroup = ToggleGroup; exports.ToggleGroupItem = ToggleGroupItem; exports.BenefitCard = BenefitCard; exports.BenefitCardGrid = BenefitCardGrid; exports.BrandAssociationCard = BrandAssociationCard; exports.BrandAssociationGrid = BrandAssociationGrid; exports.BulletList = BulletList; exports.CircularProgress = CircularProgress; exports.FloatingTooltip = FloatingTooltip; exports.DashboardInfoCard = DashboardInfoCard; exports.DeviceCard = DeviceCard; exports.DeviceCardCompact = DeviceCardCompact; exports.FeatureCardGrid = FeatureCardGrid; exports.FeatureList = FeatureList; exports.HighlightCard = HighlightCard; exports.HighlightCardGrid = HighlightCardGrid; exports.IconsBlock = IconsBlock; exports.MoreActionsMenu = MoreActionsMenu; exports.DropdownButton = DropdownButton; exports.OrganizationCard = OrganizationCard; exports.ServiceCard = ServiceCard; exports.TabSelector = TabSelector; exports.TitleContentBlock = TitleContentBlock; exports.TooltipProvider = TooltipProvider; exports.Tooltip = Tooltip; exports.TooltipTrigger = TooltipTrigger; exports.TooltipContent = TooltipContent; exports.ErrorState = ErrorState; exports.PageError = PageError; exports.LoadError = LoadError; exports.NotFoundError = NotFoundError; exports.ContentLoader = ContentLoader; exports.CardLoader = CardLoader; exports.FormLoader = FormLoader; exports.DetailLoader = DetailLoader; exports.ListLoader = ListLoader; exports.CursorPagination = CursorPagination; exports.CursorPaginationSimple = CursorPaginationSimple; exports.TableEmptyState = TableEmptyState; exports.TableHeader = TableHeader; exports.TableCell = TableCell; exports.TableCardSkeleton = TableCardSkeleton; exports.TableRow = TableRow; exports.Table = Table; exports.TableDescriptionCell = TableDescriptionCell; exports.TableTimestampCell = TableTimestampCell; exports.QueryReportTableHeader = QueryReportTableHeader; exports.QueryReportTableRow = QueryReportTableRow; exports.QueryReportTableSkeleton = QueryReportTableSkeleton; exports.deriveColumns = deriveColumns; exports.exportToCSV = exportToCSV; exports.QueryReportTable = QueryReportTable; exports.useDataTableContext = useDataTableContext; exports.DataTableRoot = DataTableRoot; exports.getHideClasses = getHideClasses2; exports.alignJustify = alignJustify; exports.multiSelectFilterFn = multiSelectFilterFn; exports.DataTableHeader = DataTableHeader; exports.DataTableEmpty = DataTableEmpty; exports.ROW_HEIGHT_DESKTOP = ROW_HEIGHT_DESKTOP2; exports.ROW_HEIGHT_MOBILE = ROW_HEIGHT_MOBILE2; exports.DataTableSkeleton = DataTableSkeleton; exports.DataTableRow = DataTableRow; exports.DataTableBody = DataTableBody; exports.DataTableInfiniteFooter = DataTableInfiniteFooter; exports.DataTableCursorFooter = DataTableCursorFooter; exports.DataTableRowCount = DataTableRowCount; exports.useDataTable = useDataTable; exports.DataTable = DataTable; exports.flexRender = _reacttable.flexRender; exports.createColumnHelper = _reacttable.createColumnHelper; exports.getCoreRowModel = _reacttable.getCoreRowModel; exports.getExpandedRowModel = _reacttable.getExpandedRowModel; exports.getFacetedRowModel = _reacttable.getFacetedRowModel; exports.getFacetedUniqueValues = _reacttable.getFacetedUniqueValues; exports.getFilteredRowModel = _reacttable.getFilteredRowModel; exports.getGroupedRowModel = _reacttable.getGroupedRowModel; exports.getPaginationRowModel = _reacttable.getPaginationRowModel; exports.getSortedRowModel = _reacttable.getSortedRowModel; exports.SearchInput = SearchInput; exports.FilterListItem = FilterListItem; exports.FilterList = FilterList; exports.TagSearchInput = TagSearchInput; exports.MarkdownEditor = MarkdownEditor; exports.FileUpload = FileUpload; exports.ImageUploader = ImageUploader; exports.AssigneeDropdown = AssigneeDropdown; exports.TicketDetailSection = TicketDetailSection; exports.TicketAttachmentsList = TicketAttachmentsList; exports.TicketKnowledgeBaseList = TicketKnowledgeBaseList; exports.TicketNoteCard = TicketNoteCard; exports.TicketNotesSection = TicketNotesSection; exports.TicketInfoSection = TicketInfoSection; exports.LOG_SEVERITY_COLORS = LOG_SEVERITY_COLORS; exports.LOG_SEVERITY_LABELS = LOG_SEVERITY_LABELS; exports.LogSeverityDot = LogSeverityDot; exports.LogsList = LogsList; exports.AVAILABLE_SVG_ICONS = AVAILABLE_SVG_ICONS; exports.releaseTypeOptions = releaseTypeOptions; exports.releaseStatusOptions = releaseStatusOptions; exports.changelogLabels = changelogLabels; exports.SEMVER_REGEX = SEMVER_REGEX; exports.TMCG_ROLES = TMCG_ROLES; exports.TMCG_ROLE_DISPLAY_NAMES = TMCG_ROLE_DISPLAY_NAMES; exports.TMCG_SOCIAL_PLATFORMS = TMCG_SOCIAL_PLATFORMS; exports.assets = assets;
34189
- //# sourceMappingURL=chunk-L4T24AN4.cjs.map
33710
+
33711
+
33712
+
33713
+
33714
+
33715
+
33716
+
33717
+
33718
+ exports.Label = Label; exports.AllowedDomainsInput = AllowedDomainsInput; exports.HiddenTagsPopup = HiddenTagsPopup; exports.tagVariants = tagVariants; exports.Tag = Tag; exports.Autocomplete = Autocomplete; exports.Card = Card; exports.CardHeader = CardHeader; exports.CardTitle = CardTitle; exports.CardDescription = CardDescription; exports.CardContent = CardContent; exports.CardFooter = CardFooter; exports.CardHorizontal = CardHorizontal; exports.CheckboxBlock = CheckboxBlock; exports.CheckboxWithDescription = CheckboxWithDescription; exports.Select = Select; exports.SelectGroup = SelectGroup; exports.SelectValue = SelectValue; exports.SelectTrigger = SelectTrigger; exports.SelectScrollUpButton = SelectScrollUpButton; exports.SelectScrollDownButton = SelectScrollDownButton; exports.SelectContent = SelectContent; exports.SelectLabel = SelectLabel; exports.SelectItem = SelectItem; exports.SelectSeparator = SelectSeparator; exports.DatePicker = DatePicker; exports.DatePickerInput = DatePickerInput; exports.DatePickerInputSimple = DatePickerInputSimple; exports.getPlatformAccentColor = getPlatformAccentColor; exports.getCurrentPlatform = getCurrentPlatform; exports.delay = delay; exports.generateRandomString = generateRandomString; exports.truncateString = truncateString; exports.deepClone = deepClone; exports.getSlackCommunityJoinUrl = getSlackCommunityJoinUrl; exports.OS_PLATFORMS = OS_PLATFORMS; exports.DEFAULT_OS_PLATFORM = DEFAULT_OS_PLATFORM; exports.validateAccessCode = validateAccessCode; exports.consumeAccessCode = consumeAccessCode; exports.validateAndConsumeAccessCode = validateAndConsumeAccessCode; exports.useAccessCodeIntegration = useAccessCodeIntegration; exports.isValidEmailDomain = isValidEmailDomain; exports.validateEmailDomain = validateEmailDomain; exports.validateEmailDomainList = validateEmailDomainList; exports.cleanEmailDomain = cleanEmailDomain; exports.getConfidenceColorClass = getConfidenceColorClass; exports.getConfidenceLevel = getConfidenceLevel; exports.getConfidenceBorderClass = getConfidenceBorderClass; exports.getConfidenceTextClass = getConfidenceTextClass; exports.getConfidenceBgClass = getConfidenceBgClass; exports.getConfidenceLabel = getConfidenceLabel; exports.formatReleaseDate = formatReleaseDate; exports.formatRelativeTime = formatRelativeTime; exports.getDynamicIcon = getDynamicIcon; exports.normalizeToolType = normalizeToolType; exports.normalizeToolTypeWithFallback = normalizeToolTypeWithFallback; exports.toToolLabel = toToolLabel; exports.isValidToolType = isValidToolType; exports.getToolTypeAliases = getToolTypeAliases; exports.getToolLabel = getToolLabel; exports.ShellTypeValues = ShellTypeValues; exports.SHELL_TYPES = SHELL_TYPES; exports.shellLabels = shellLabels; exports.getShellLabel = getShellLabel; exports.getShellIcon = getShellIcon; exports.OSTypeValues = OSTypeValues; exports.OS_TYPES = OS_TYPES; exports.osLabels = osLabels; exports.normalizeOSType = normalizeOSType; exports.getOSLabel = getOSLabel; exports.getOSIcon = getOSIcon; exports.getOSTypeDefinition = getOSTypeDefinition; exports.getOSPlatformId = getOSPlatformId; exports.isOSPlatform = isOSPlatform; exports.getCountryPhoneData = getCountryPhoneData; exports.getCountryByCode = getCountryByCode; exports.validatePhoneNumber = validatePhoneNumber; exports.formatPhoneE164 = formatPhoneE164; exports.GENERIC_EMAIL_DOMAINS = GENERIC_EMAIL_DOMAINS; exports.extractDomainFromEmail = extractDomainFromEmail; exports.normalizeDomain = normalizeDomain; exports.isGenericDomain = isGenericDomain; exports.hasGenericEmailDomain = hasGenericEmailDomain; exports.isGenericWebsiteDomain = isGenericWebsiteDomain; exports.ApprovalRequestMessage = ApprovalRequestMessage; exports.PulseDots = PulseDots; exports.ExpandChevron = ExpandChevron; exports.useCollapsible = useCollapsible; exports.getCommandText = getCommandText; exports.ArgRow = ArgRow; exports.ResultBlock = ResultBlock; exports.ApprovalBatchMessage = ApprovalBatchMessage; exports.ContextCompactionDisplay = ContextCompactionDisplay; exports.SimpleMarkdownRenderer = SimpleMarkdownRenderer; exports.ThinkingDisplay = ThinkingDisplay; exports.ErrorMessageDisplay = ErrorMessageDisplay; exports.SquareAvatar = SquareAvatar; exports.resolveTicketStatus = resolveTicketStatus; exports.getTicketStatusConfig = getTicketStatusConfig; exports.getTicketStatusTag = getTicketStatusTag; exports.TicketStatusTag = TicketStatusTag; exports.ChatContainer = ChatContainer; exports.ChatHeader = ChatHeader; exports.ChatContent = ChatContent; exports.ChatFooter = ChatFooter; exports.Textarea = Textarea; exports.ChatTypingIndicator = ChatTypingIndicator; exports.SlashCommandSuggestions = SlashCommandSuggestions; exports.ChatInput = ChatInput; exports.ToolExecutionDisplay = ToolExecutionDisplay; exports.remarkCardLinks = remarkCardLinks; exports.MemoizedChatMessageEnhanced = MemoizedChatMessageEnhanced; exports.ChatMessageListLoader = ChatMessageListLoader; exports.useDelayedFlag = useDelayedFlag; exports.ChatMessageList = ChatMessageList; exports.ChatQuickAction = ChatQuickAction; exports.ChatTicketItem = ChatTicketItem; exports.ChatTicketList = ChatTicketList; exports.HoverCard = HoverCard; exports.HoverCardTrigger = HoverCardTrigger; exports.HoverCardContent = HoverCardContent; exports.ModelDisplay = ModelDisplay; exports.DialogListItem = DialogListItem; exports.ChatSidebar = ChatSidebar; exports.CHAT_TYPE = CHAT_TYPE; exports.OWNER_TYPE = OWNER_TYPE; exports.MESSAGE_ROLE = MESSAGE_ROLE; exports.ASSISTANT_TYPE = ASSISTANT_TYPE; exports.AUTHOR_TYPE = AUTHOR_TYPE; exports.APPROVAL_STATUS = APPROVAL_STATUS; exports.CONNECTION_STATUS = CONNECTION_STATUS; exports.MESSAGE_TYPE = MESSAGE_TYPE; exports.NETWORK_CONFIG = NETWORK_CONFIG; exports.useChunkCatchup = useChunkCatchup; exports.useNatsDialogSubscription = useNatsDialogSubscription; exports.buildNatsWsUrl = buildNatsWsUrl; exports.parseChunkToAction = parseChunkToAction; exports.isControlChunk = isControlChunk; exports.isErrorChunk = isErrorChunk; exports.isMetadataChunk = isMetadataChunk; exports.extractTextFromChunk = extractTextFromChunk; exports.MessageSegmentAccumulator = MessageSegmentAccumulator; exports.createMessageSegmentAccumulator = createMessageSegmentAccumulator; exports.useRealtimeChunkProcessor = useRealtimeChunkProcessor; exports.processHistoricalMessages = processHistoricalMessages; exports.extractErrorMessages = extractErrorMessages; exports.processHistoricalMessagesWithErrors = processHistoricalMessagesWithErrors; exports.extractIncompleteMessageState = extractIncompleteMessageState; exports.DynamicThemeProvider = DynamicThemeProvider; exports.useDynamicTheme = useDynamicTheme; exports.ArrayEntryManager = ArrayEntryManager; exports.ProviderButton = ProviderButton; exports.AuthProvidersList = AuthProvidersList; exports.ChangelogManager = ChangelogManager; exports.ChangelogSectionsManager = ChangelogSectionsManager; exports.ClickUpTasksManager = ClickUpTasksManager; exports.CommandBox = CommandBox; exports.ErrorBoundary = ErrorBoundary; exports.badgeVariants = badgeVariants; exports.Badge = Badge; exports.statusBadgeVariants = statusBadgeVariants; exports.StatusBadge = StatusBadge; exports.SectionSelector = SectionSelector; exports.FigmaPrototypeViewer = FigmaPrototypeViewer; exports.FiltersDropdown = FiltersDropdown; exports.useFiltersDropdown = useFiltersDropdown; exports.GitHubReleasesManager = GitHubReleasesManager; exports.KnowledgeBaseLinksManager = KnowledgeBaseLinksManager; exports.Progress = Progress; exports.LoadingProvider = LoadingProvider; exports.useLoading = useLoading; exports.MediaGalleryManager = MediaGalleryManager; exports.MoreAboutButton = MoreAboutButton; exports.OrganizationIcon = OrganizationIcon; exports.OSTypeBadge = OSTypeBadge; exports.OSTypeIcon = OSTypeIcon; exports.OSTypeLabel = OSTypeLabel; exports.OSTypeBadgeGroup = OSTypeBadgeGroup; exports.ParallaxImageShowcase = ParallaxImageShowcase; exports.PathsDisplay = PathsDisplay; exports.OPENFRAME_PATHS = OPENFRAME_PATHS; exports.getOpenFramePaths = getOpenFramePaths; exports.PlatformBadge = PlatformBadge; exports.PlatformFilterComponent = PlatformFilterComponent; exports.PushButtonSelector = PushButtonSelector; exports.ReleaseMediaManager = ReleaseMediaManager; exports.SelectButton = SelectButton; exports.SEOEditorPreview = SEOEditorPreview; exports.SocialLinksManager = SocialLinksManager; exports.StartWithOpenFrameButton = StartWithOpenFrameButton; exports.StatusFilterComponent = StatusFilterComponent; exports.TagsSelector = TagsSelector; exports.extractYouTubeId = extractYouTubeId; exports.Video = Video2; exports.Tabs = Tabs; exports.TabsList = TabsList; exports.TabsTrigger = TabsTrigger; exports.TabsContent = TabsContent; 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.VideoSourceSelector = VideoSourceSelector; exports.ConfidenceBadge = ConfidenceBadge; exports.TranscriptSummaryEditor = TranscriptSummaryEditor; exports.AIEnrichButton = AIEnrichButton; exports.AIWarningsSection = AIWarningsSection; exports.AIEnrichSection = AIEnrichSection; exports.HighlightVideoSection = HighlightVideoSection; exports.HighlightConfigSection = HighlightConfigSection; exports.EntitySummaryEditor = EntitySummaryEditor; exports.AIStatusIndicator = AIStatusIndicator; exports.AIRequiredBadge = AIRequiredBadge; exports.TranscribeSummarizeSection = TranscribeSummarizeSection; exports.VideoClipsSection = VideoClipsSection; exports.HighlightGenerationSection = HighlightGenerationSection; exports.HighlightVideoPreview = HighlightVideoPreview; exports.TranscribeAndSummarizeCombinedSection = TranscribeAndSummarizeCombinedSection; exports.HighlightVideoCombinedSection = HighlightVideoCombinedSection; exports.ViewToggle = ViewToggle; exports.PolicyConfigurationPanel = PolicyConfigurationPanel; exports.PhoneInput = PhoneInput; exports.WaitlistForm = WaitlistForm; exports.NotificationsProvider = NotificationsProvider; exports.useNotifications = useNotifications; exports.useOptionalNotifications = useOptionalNotifications; exports.Drawer = Drawer; exports.DrawerTrigger = DrawerTrigger; exports.DrawerClose = DrawerClose; exports.DrawerPortal = DrawerPortal; exports.DrawerOverlay = DrawerOverlay; exports.DrawerContent = DrawerContent; exports.DrawerHeader = DrawerHeader; exports.DrawerTitle = DrawerTitle; exports.DrawerDescription = DrawerDescription; exports.DrawerBody = DrawerBody; exports.DrawerFooter = DrawerFooter; exports.Switch = Switch; exports.NotificationTile = NotificationTile; exports.NotificationDrawer = NotificationDrawer; exports.BoardColumnHeader = BoardColumnHeader; exports.tintOnDark = tintOnDark; exports.TicketCard = TicketCard; exports.TicketCardSkeleton = TicketCardSkeleton; exports.BoardColumn = BoardColumn; exports.useBoardCollapse = useBoardCollapse; exports.Board = Board; exports.columnFromTicketStatus = columnFromTicketStatus; exports.groupTicketsByStatus = groupTicketsByStatus; exports.Header = Header; exports.HeaderSkeleton = HeaderSkeleton; exports.ClientOnlyHeader = ClientOnlyHeader; exports.MobileNavPanel = MobileNavPanel; exports.SlidingSidebar = SlidingSidebar; exports.StickySectionNav = StickySectionNav; exports.useSectionNavigation = useSectionNavigation; exports.NavigationSidebar = NavigationSidebar; exports.HeaderButton = HeaderButton; exports.HeaderGlobalSearch = HeaderGlobalSearch; exports.HeaderOrganizationFilter = HeaderOrganizationFilter; exports.AppHeader = AppHeader; exports.MobileBurgerMenu = MobileBurgerMenu; exports.AppLayout = AppLayout; exports.SoftwareInfo = SoftwareInfo; exports.SoftwareSourceBadge = SoftwareSourceBadge; exports.CveLink = CveLink; exports.ToolBadge = ToolBadge; exports.ShellTypeBadge = ShellTypeBadge; exports.ScriptInfoSection = ScriptInfoSection; exports.ScriptArguments = ScriptArguments; exports.AnnouncementBar = AnnouncementBar; exports.VendorIcon = VendorIcon; exports.CategoriesCart = CategoriesCart; exports.CategoryCard = CategoryCard; exports.VendorDisplayButton = VendorDisplayButton; exports.setRealAuthHook = setRealAuthHook; exports.useAuth = useAuth; exports.AuthProvider = AuthProvider; exports.CommentCard = CommentCard; exports.ContentLoadingContainer = ContentLoadingContainer; exports.useContentLoading = useContentLoading; exports.DynamicSkeleton = DynamicSkeleton; exports.SkeletonPresets = SkeletonPresets; exports.PlatformSkeletonContainer = PlatformSkeletonContainer; exports.ProgressiveSkeleton = ProgressiveSkeleton; exports.EmptyState = EmptyState2; exports.ChevronButton = ChevronButton; exports.FaqAccordion = FaqAccordion; exports.FilterChip = FilterChip; exports.SocialIconRow = SocialIconRow; exports.Footer = Footer; exports.useUnifiedFiltering = useUnifiedFiltering; exports.vendorFilterConfig = vendorFilterConfig; exports.blogFilterConfig = blogFilterConfig; exports.Pagination = Pagination; exports.PaginationContent = PaginationContent; exports.PaginationItem = PaginationItem; exports.PaginationLink = PaginationLink; exports.PaginationEllipsis = PaginationEllipsis; exports.PaginationPrevious = PaginationPrevious; exports.PaginationNext = PaginationNext; exports.UnifiedPagination = UnifiedPagination; exports.FooterWaitlistButton = FooterWaitlistButton; exports.HeroImageUploader = HeroImageUploader; exports.ResponsiveIconsBlock = ResponsiveIconsBlock; exports.Slider = Slider; exports.ImageCropper = ImageCropper; exports.MediaCarousel = MediaCarousel; exports.MetricValue = MetricValue; exports.MSPDisplay = MSPDisplay; exports.PersistentFilterControls = PersistentFilterControls; exports.PersistentSearchContainer = PersistentSearchContainer; exports.PersistentSidebar = PersistentSidebar; exports.PersistentMobileDropdown = PersistentMobileDropdown; exports.PersistentPagination = PersistentPagination; exports.usePaginationLoading = usePaginationLoading; exports.PersistentPaginationWrapper = PersistentPaginationWrapper; exports.PRICING_STYLES = PRICING_STYLES; exports.PricingDisplay = PricingDisplay; exports.formatPricingForDisplay = formatPricingForDisplay; exports.ResultsCount = ResultsCount; exports.VendorTag = VendorTag; exports.SelectionSourceBadge = SelectionSourceBadge; exports.UserDisplay = UserDisplay; exports.UnifiedSkeleton = UnifiedSkeleton; exports.TextSkeleton = TextSkeleton; exports.InteractiveSkeleton = InteractiveSkeleton; exports.MediaSkeleton = MediaSkeleton; exports.CardSkeleton = CardSkeleton; exports.CardSkeletonGrid = CardSkeletonGrid; exports.AnnouncementBarSkeleton = AnnouncementBarSkeleton; exports.HeroSkeleton = HeroSkeleton; exports.SearchContainerSkeleton = SearchContainerSkeleton; exports.CategorySidebarSkeleton = CategorySidebarSkeleton; exports.BreadcrumbSkeleton = BreadcrumbSkeleton; exports.ResultsHeaderSkeleton = ResultsHeaderSkeleton; exports.TwoColumnLayoutSkeleton = TwoColumnLayoutSkeleton; exports.ArticleLayoutSkeleton = ArticleLayoutSkeleton; exports.VendorDetailLayoutSkeleton = VendorDetailLayoutSkeleton; exports.StatsSectionSkeleton = StatsSectionSkeleton; exports.BlogCardGridSkeleton = BlogCardGridSkeleton; exports.VendorGridSkeleton = VendorGridSkeleton; exports.SlackCommunitySkeleton = SlackCommunitySkeleton; exports.ParagraphSkeleton = ParagraphSkeleton; exports.ListSkeleton = ListSkeleton; exports.TableSkeleton = TableSkeleton; exports.FormSkeleton = FormSkeleton; exports.NavigationSkeleton = NavigationSkeleton; exports.ProfileSkeleton = ProfileSkeleton; exports.CommentSkeleton = CommentSkeleton; exports.FeatureListSkeleton = FeatureListSkeleton; exports.TimelineSkeleton = TimelineSkeleton; exports.PricingSkeleton = PricingSkeleton; exports.ProfileLoadingSkeleton = ProfileLoadingSkeleton; exports.MspProfileFormSkeleton = MspProfileFormSkeleton; exports.CategoryCardSkeleton = CategoryCardSkeleton; exports.CategoryVendorSelectorSkeleton = CategoryVendorSelectorSkeleton; exports.WizardLayoutSkeleton = WizardLayoutSkeleton; exports.MarginReportSkeleton = MarginReportSkeleton; exports.UsersGridSkeleton = UsersGridSkeleton; exports.OrganizationIconSkeleton = OrganizationIconSkeleton; exports.OrganizationCardSkeleton = OrganizationCardSkeleton; exports.OrganizationCardSkeletonGrid = OrganizationCardSkeletonGrid; exports.DeviceCardSkeleton = DeviceCardSkeleton; exports.DeviceCardSkeletonGrid = DeviceCardSkeletonGrid; exports.VendorPageSkeleton = VendorPageSkeleton; exports.CheckIcon = CheckIcon2; exports.XIcon = XIcon; exports.MinusIcon = MinusIcon; exports.CheckCircleIcon = CheckCircleIcon3; exports.XCircleIcon = XCircleIcon; exports.YesNoDisplay = YesNoDisplay; exports.evaluateFeatureValue = evaluateFeatureValue; exports.MadeWithLove = MadeWithLove; exports.DateTimePicker = DateTimePicker; exports.InteractiveCard = InteractiveCard; exports.OnboardingStepCard = OnboardingStepCard; exports.OnboardingWalkthrough = OnboardingWalkthrough; exports.ProductReleaseCard = ProductReleaseCard; exports.ProductReleaseCardSkeleton = ProductReleaseCardSkeleton; exports.PageShell = PageShell; exports.ArticleDetailLayout = ArticleDetailLayout; exports.ReleaseChangelogSection = ReleaseChangelogSection; exports.ImageGalleryModal = ImageGalleryModal; exports.ActionsMenu = ActionsMenu; exports.ActionsMenuDropdown = ActionsMenuDropdown; exports.PageActions = PageActions; exports.usePageActionsBottomPadding = usePageActionsBottomPadding; exports.PageContainer = PageContainer; exports.ListPageContainer = ListPageContainer; exports.DetailPageContainer = DetailPageContainer; exports.FormPageContainer = FormPageContainer; exports.ContentPageContainer = ContentPageContainer; exports.DetailPageSkeleton = DetailPageSkeleton; exports.ReleaseDetailPage = ReleaseDetailPage; exports.ReleaseDetailSkeleton = ReleaseDetailSkeleton; exports.InfoCard = InfoCard; exports.InfoRow = InfoRow; exports.InputTrigger = InputTrigger; exports.MediaTypeSelector = MediaTypeSelector; exports.PageLoader = PageLoader; exports.CompactPageLoader = CompactPageLoader; exports.ProgressBar = ProgressBar; exports.RadioGroup = RadioGroup; exports.RadioGroupItem = RadioGroupItem; exports.RadioGroupBlock = RadioGroupBlock; exports.TagsInput = TagsInput; exports.TagsManager = TagsManager; exports.AlertDialog = AlertDialog; exports.AlertDialogTrigger = AlertDialogTrigger; exports.AlertDialogPortal = AlertDialogPortal; exports.AlertDialogOverlay = AlertDialogOverlay; exports.AlertDialogContent = AlertDialogContent; exports.AlertDialogHeader = AlertDialogHeader; exports.AlertDialogFooter = AlertDialogFooter; exports.AlertDialogTitle = AlertDialogTitle; exports.AlertDialogDescription = AlertDialogDescription; exports.AlertDialogAction = AlertDialogAction; exports.AlertDialogCancel = AlertDialogCancel; exports.AspectRatio = AspectRatio; exports.Dialog = Dialog; exports.DialogTrigger = DialogTrigger; exports.DialogPortal = DialogPortal; exports.DialogClose = DialogClose; exports.DialogOverlay = DialogOverlay; exports.DialogContent = DialogContent; exports.DialogHeader = DialogHeader; exports.DialogFooter = DialogFooter; exports.DialogTitle = DialogTitle; exports.DialogDescription = DialogDescription; exports.Modal = Modal; exports.ModalContent = ModalContent; exports.ModalHeader = ModalHeader; exports.ModalTitle = ModalTitle; exports.ModalFooter = ModalFooter; exports.Modal2 = Modal2; exports.ModalContent2 = ModalContent2; exports.ModalHeader2 = ModalHeader2; exports.ModalTitle2 = ModalTitle2; exports.ModalFooter2 = ModalFooter2; exports.Separator = Separator2; exports.Sheet = Sheet; exports.SheetTrigger = SheetTrigger; exports.SheetClose = SheetClose; exports.SheetPortal = SheetPortal; exports.SheetOverlay = SheetOverlay; exports.SheetContent = SheetContent; exports.SheetHeader = SheetHeader; exports.SheetFooter = SheetFooter; exports.SheetTitle = SheetTitle; exports.SheetDescription = SheetDescription; exports.Accordion = Accordion; exports.AccordionItem = AccordionItem; exports.AccordionTrigger = AccordionTrigger; exports.AccordionContent = AccordionContent; exports.Breadcrumb = Breadcrumb; exports.BreadcrumbList = BreadcrumbList; exports.BreadcrumbItem = BreadcrumbItem; exports.BreadcrumbLink = BreadcrumbLink; exports.BreadcrumbPage = BreadcrumbPage; exports.BreadcrumbSeparator = BreadcrumbSeparator; exports.BreadcrumbEllipsis = BreadcrumbEllipsis; exports.MenubarMenu = MenubarMenu; exports.MenubarGroup = MenubarGroup; exports.MenubarPortal = MenubarPortal; exports.MenubarSub = MenubarSub; exports.MenubarRadioGroup = MenubarRadioGroup; exports.Menubar = Menubar; exports.MenubarTrigger = MenubarTrigger; exports.MenubarSubTrigger = MenubarSubTrigger; exports.MenubarSubContent = MenubarSubContent; exports.MenubarContent = MenubarContent; exports.MenubarItem = MenubarItem; exports.MenubarCheckboxItem = MenubarCheckboxItem; exports.MenubarRadioItem = MenubarRadioItem; exports.MenubarLabel = MenubarLabel; exports.MenubarSeparator = MenubarSeparator; exports.MenubarShortcut = MenubarShortcut; exports.NavigationMenu = NavigationMenu; exports.NavigationMenuList = NavigationMenuList; exports.NavigationMenuItem = NavigationMenuItem; exports.navigationMenuTriggerStyle = navigationMenuTriggerStyle; exports.NavigationMenuTrigger = NavigationMenuTrigger; exports.NavigationMenuContent = NavigationMenuContent; exports.NavigationMenuLink = NavigationMenuLink; exports.NavigationMenuViewport = NavigationMenuViewport; exports.NavigationMenuIndicator = NavigationMenuIndicator; exports.TabContent = TabContent; exports.TabNavigation = TabNavigation; exports.getTabById = getTabById; exports.getTabComponent = getTabComponent; exports.Alert = Alert; exports.AlertTitle = AlertTitle; exports.AlertDescription = AlertDescription; exports.StatusIndicator = StatusIndicator; exports.FilterCheckboxItem = FilterCheckboxItem; exports.TagKeyValueFilter = TagKeyValueFilter; exports.FilterModal = FilterModal; exports.ListPageLayout = ListPageLayout; exports.TitleBlock = TitleBlock; exports.PageLayout = PageLayout; exports.toggleVariants = toggleVariants; exports.Toggle = Toggle; exports.ToggleGroup = ToggleGroup; exports.ToggleGroupItem = ToggleGroupItem; exports.BenefitCard = BenefitCard; exports.BenefitCardGrid = BenefitCardGrid; exports.BrandAssociationCard = BrandAssociationCard; exports.BrandAssociationGrid = BrandAssociationGrid; exports.BulletList = BulletList; exports.CircularProgress = CircularProgress; exports.FloatingTooltip = FloatingTooltip; exports.DashboardInfoCard = DashboardInfoCard; exports.DeviceCard = DeviceCard; exports.DeviceCardCompact = DeviceCardCompact; exports.FeatureCardGrid = FeatureCardGrid; exports.FeatureList = FeatureList; exports.HighlightCard = HighlightCard; exports.HighlightCardGrid = HighlightCardGrid; exports.IconsBlock = IconsBlock; exports.MoreActionsMenu = MoreActionsMenu; exports.DropdownButton = DropdownButton; exports.OrganizationCard = OrganizationCard; exports.ServiceCard = ServiceCard; exports.TabSelector = TabSelector; exports.TitleContentBlock = TitleContentBlock; exports.TooltipProvider = TooltipProvider; exports.Tooltip = Tooltip; exports.TooltipTrigger = TooltipTrigger; exports.TooltipContent = TooltipContent; exports.ErrorState = ErrorState; exports.PageError = PageError; exports.LoadError = LoadError; exports.NotFoundError = NotFoundError; exports.ContentLoader = ContentLoader; exports.CardLoader = CardLoader; exports.FormLoader = FormLoader; exports.DetailLoader = DetailLoader; exports.ListLoader = ListLoader; exports.CursorPagination = CursorPagination; exports.CursorPaginationSimple = CursorPaginationSimple; exports.TableEmptyState = TableEmptyState; exports.TableHeader = TableHeader; exports.TableCell = TableCell; exports.TableCardSkeleton = TableCardSkeleton; exports.TableRow = TableRow; exports.Table = Table; exports.TableDescriptionCell = TableDescriptionCell; exports.TableTimestampCell = TableTimestampCell; exports.QueryReportTableHeader = QueryReportTableHeader; exports.QueryReportTableRow = QueryReportTableRow; exports.QueryReportTableSkeleton = QueryReportTableSkeleton; exports.deriveColumns = deriveColumns; exports.exportToCSV = exportToCSV; exports.QueryReportTable = QueryReportTable; exports.useDataTableContext = useDataTableContext; exports.DataTableRoot = DataTableRoot; exports.getHideClasses = getHideClasses2; exports.alignJustify = alignJustify; exports.multiSelectFilterFn = multiSelectFilterFn; exports.DataTableHeader = DataTableHeader; exports.DataTableEmpty = DataTableEmpty; exports.ROW_HEIGHT_DESKTOP = ROW_HEIGHT_DESKTOP2; exports.ROW_HEIGHT_MOBILE = ROW_HEIGHT_MOBILE2; exports.DataTableSkeleton = DataTableSkeleton; exports.DataTableRow = DataTableRow; exports.DataTableBody = DataTableBody; exports.DataTableInfiniteFooter = DataTableInfiniteFooter; exports.DataTableCursorFooter = DataTableCursorFooter; exports.DataTableRowCount = DataTableRowCount; exports.useDataTable = useDataTable; exports.DataTable = DataTable; exports.flexRender = _reacttable.flexRender; exports.createColumnHelper = _reacttable.createColumnHelper; exports.getCoreRowModel = _reacttable.getCoreRowModel; exports.getExpandedRowModel = _reacttable.getExpandedRowModel; exports.getFacetedRowModel = _reacttable.getFacetedRowModel; exports.getFacetedUniqueValues = _reacttable.getFacetedUniqueValues; exports.getFilteredRowModel = _reacttable.getFilteredRowModel; exports.getGroupedRowModel = _reacttable.getGroupedRowModel; exports.getPaginationRowModel = _reacttable.getPaginationRowModel; exports.getSortedRowModel = _reacttable.getSortedRowModel; exports.SearchInput = SearchInput; exports.FilterListItem = FilterListItem; exports.FilterList = FilterList; exports.TagSearchInput = TagSearchInput; exports.MarkdownEditor = MarkdownEditor; exports.FileUpload = FileUpload; exports.ImageUploader = ImageUploader; exports.AssigneeDropdown = AssigneeDropdown; exports.TicketDetailSection = TicketDetailSection; exports.TicketAttachmentsList = TicketAttachmentsList; exports.TicketKnowledgeBaseList = TicketKnowledgeBaseList; exports.TicketNoteCard = TicketNoteCard; exports.TicketNotesSection = TicketNotesSection; exports.TicketInfoSection = TicketInfoSection; exports.LOG_SEVERITY_COLORS = LOG_SEVERITY_COLORS; exports.LOG_SEVERITY_LABELS = LOG_SEVERITY_LABELS; exports.LogSeverityDot = LogSeverityDot; exports.LogsList = LogsList; exports.AVAILABLE_SVG_ICONS = AVAILABLE_SVG_ICONS; exports.releaseTypeOptions = releaseTypeOptions; exports.releaseStatusOptions = releaseStatusOptions; exports.changelogLabels = changelogLabels; exports.SEMVER_REGEX = SEMVER_REGEX; exports.TMCG_ROLES = TMCG_ROLES; exports.TMCG_ROLE_DISPLAY_NAMES = TMCG_ROLE_DISPLAY_NAMES; exports.TMCG_SOCIAL_PLATFORMS = TMCG_SOCIAL_PLATFORMS; exports.assets = assets;
33719
+ //# sourceMappingURL=chunk-4TM2SBMX.cjs.map