@flamingo-stack/openframe-frontend-core 0.0.177 → 0.0.178-snapshot.20260514174355

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 (69) hide show
  1. package/dist/{chunk-C6ZMI4UB.cjs → chunk-4TM2SBMX.cjs} +884 -1513
  2. package/dist/chunk-4TM2SBMX.cjs.map +1 -0
  3. package/dist/{chunk-WX7PT5C7.cjs → chunk-ALW3D72O.cjs} +61 -2
  4. package/dist/chunk-ALW3D72O.cjs.map +1 -0
  5. package/dist/{chunk-KB2N44BY.js → chunk-FMWHOUFE.js} +61 -2
  6. package/dist/chunk-FMWHOUFE.js.map +1 -0
  7. package/dist/{chunk-6LDN3CIY.js → chunk-ZMQP3UZJ.js} +3701 -4330
  8. package/dist/chunk-ZMQP3UZJ.js.map +1 -0
  9. package/dist/components/features/entity-video-section.d.ts +54 -0
  10. package/dist/components/features/entity-video-section.d.ts.map +1 -0
  11. package/dist/components/features/index.cjs +17 -3
  12. package/dist/components/features/index.cjs.map +1 -1
  13. package/dist/components/features/index.d.ts +4 -2
  14. package/dist/components/features/index.d.ts.map +1 -1
  15. package/dist/components/features/index.js +22 -8
  16. package/dist/components/features/video-bites-display.d.ts +38 -0
  17. package/dist/components/features/video-bites-display.d.ts.map +1 -0
  18. package/dist/components/features/video-ratio-tabs.d.ts +62 -0
  19. package/dist/components/features/video-ratio-tabs.d.ts.map +1 -0
  20. package/dist/components/features/video.d.ts +94 -0
  21. package/dist/components/features/video.d.ts.map +1 -0
  22. package/dist/components/index.cjs +17 -3
  23. package/dist/components/index.cjs.map +1 -1
  24. package/dist/components/index.js +22 -8
  25. package/dist/components/media-carousel.d.ts.map +1 -1
  26. package/dist/components/navigation/index.cjs +3 -3
  27. package/dist/components/navigation/index.js +2 -2
  28. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  29. package/dist/components/ui/index.cjs +3 -3
  30. package/dist/components/ui/index.js +2 -2
  31. package/dist/hooks/index.cjs +4 -2
  32. package/dist/hooks/index.cjs.map +1 -1
  33. package/dist/hooks/index.d.ts +1 -0
  34. package/dist/hooks/index.d.ts.map +1 -1
  35. package/dist/hooks/index.js +3 -1
  36. package/dist/hooks/use-near-viewport.d.ts +42 -0
  37. package/dist/hooks/use-near-viewport.d.ts.map +1 -0
  38. package/dist/index.cjs +19 -3
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.js +24 -8
  41. package/package.json +2 -2
  42. package/src/components/features/entity-video-section.tsx +175 -0
  43. package/src/components/features/index.ts +9 -2
  44. package/src/components/features/video-bites-display.tsx +216 -0
  45. package/src/components/features/video-ratio-tabs.tsx +174 -0
  46. package/src/components/features/video.tsx +474 -0
  47. package/src/components/media-carousel.tsx +43 -236
  48. package/src/components/shared/product-release/release-detail-page.tsx +26 -19
  49. package/src/hooks/index.ts +3 -0
  50. package/src/hooks/use-near-viewport.ts +118 -0
  51. package/dist/chunk-6LDN3CIY.js.map +0 -1
  52. package/dist/chunk-C6ZMI4UB.cjs.map +0 -1
  53. package/dist/chunk-KB2N44BY.js.map +0 -1
  54. package/dist/chunk-WX7PT5C7.cjs.map +0 -1
  55. package/dist/components/features/video-player.d.ts +0 -47
  56. package/dist/components/features/video-player.d.ts.map +0 -1
  57. package/dist/components/features/youtube-embed.d.ts +0 -17
  58. package/dist/components/features/youtube-embed.d.ts.map +0 -1
  59. package/dist/utils/lite-youtube-embed-stub.d.ts +0 -8
  60. package/dist/utils/lite-youtube-embed-stub.d.ts.map +0 -1
  61. package/dist/utils/lite-youtube-embed.d.ts +0 -9
  62. package/dist/utils/lite-youtube-embed.d.ts.map +0 -1
  63. package/src/components/features/.video-player.md +0 -44
  64. package/src/components/features/.youtube-embed.md +0 -40
  65. package/src/components/features/__tests__/video-player.test.tsx +0 -142
  66. package/src/components/features/video-player.tsx +0 -1030
  67. package/src/components/features/youtube-embed.tsx +0 -275
  68. package/src/utils/lite-youtube-embed-stub.tsx +0 -21
  69. package/src/utils/lite-youtube-embed.tsx +0 -46
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- var _chunkWX7PT5C7cjs = require('./chunk-WX7PT5C7.cjs');
19
+ var _chunkALW3D72Ocjs = require('./chunk-ALW3D72O.cjs');
20
20
 
21
21
 
22
22
 
@@ -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, {
@@ -790,7 +783,7 @@ function AutocompleteInner(props, ref) {
790
783
  }, [valueArray, options]);
791
784
  const selectedOption = !multiple && selectedOptions.length > 0 ? selectedOptions[0] : null;
792
785
  const inputPlaceholder = multiple ? valueArray.length === 0 ? placeholder : "Add More..." : placeholder;
793
- const autoLimitTags = _chunkWX7PT5C7cjs.useAutoLimitTags.call(void 0, {
786
+ const autoLimitTags = _chunkALW3D72Ocjs.useAutoLimitTags.call(void 0, {
794
787
  count: multiple ? selectedOptions.length : 0,
795
788
  limitTags: multiple ? limitTagsProp : 0,
796
789
  placeholder: inputPlaceholder
@@ -2737,7 +2730,7 @@ function toToolLabel(input) {
2737
2730
  if (!input) return "";
2738
2731
  const toolType = normalizeToolType(input);
2739
2732
  if (toolType) {
2740
- return _chunkWX7PT5C7cjs.toolLabels[toolType];
2733
+ return _chunkALW3D72Ocjs.toolLabels[toolType];
2741
2734
  }
2742
2735
  return input;
2743
2736
  }
@@ -2748,7 +2741,7 @@ function getToolTypeAliases(toolType) {
2748
2741
  return Object.entries(toolAliasMap).filter(([_, value]) => value === toolType).map(([key]) => key);
2749
2742
  }
2750
2743
  function getToolLabel(toolType) {
2751
- return _chunkWX7PT5C7cjs.toolLabels[toolType] || toolType;
2744
+ return _chunkALW3D72Ocjs.toolLabels[toolType] || toolType;
2752
2745
  }
2753
2746
 
2754
2747
  // src/types/shell.types.ts
@@ -3338,7 +3331,7 @@ function ToolCallRow({ call, expanded, onToggle, batchStatus, execution }) {
3338
3331
  onClick: onToggle,
3339
3332
  className: "flex gap-2 items-start w-full p-3 cursor-pointer text-left",
3340
3333
  children: [
3341
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWX7PT5C7cjs.ToolIcon, { toolType, size: 16 }) }),
3334
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkALW3D72Ocjs.ToolIcon, { toolType, size: 16 }) }),
3342
3335
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
3343
3336
  "div",
3344
3337
  {
@@ -5047,7 +5040,7 @@ var ToolExecutionDisplay = _react.forwardRef.call(void 0,
5047
5040
  className: "flex gap-[var(--spacing-system-xs)] items-start p-[var(--spacing-system-s)] cursor-pointer text-left w-full",
5048
5041
  onClick: () => setExpanded((prev) => !prev),
5049
5042
  children: [
5050
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWX7PT5C7cjs.ToolIcon, { toolType: integratedToolType, size: 16 }) }),
5043
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center justify-center shrink-0 w-5 h-5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkALW3D72Ocjs.ToolIcon, { toolType: integratedToolType, size: 16 }) }),
5051
5044
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
5052
5045
  "div",
5053
5046
  {
@@ -6494,7 +6487,7 @@ function useNatsDialogSubscription({
6494
6487
  });
6495
6488
  }
6496
6489
  const { name = "openframe-frontend", user = "machine", pass = "" } = clientConfig;
6497
- const client = _chunkWX7PT5C7cjs.createNatsClient.call(void 0, {
6490
+ const client = _chunkALW3D72Ocjs.createNatsClient.call(void 0, {
6498
6491
  servers: url,
6499
6492
  name,
6500
6493
  user,
@@ -9037,8 +9030,8 @@ var MINIMIZED_WIDTH = 56;
9037
9030
  var EXPANDED_WIDTH = 224;
9038
9031
  var STORAGE_KEY = "of.navigationSidebar.minimized";
9039
9032
  function NavigationSidebar({ config, disabled = false }) {
9040
- const isLgUp = _nullishCoalesce(_chunkWX7PT5C7cjs.useLgUp.call(void 0, ), () => ( false));
9041
- const [minimized, setMinimized] = _chunkWX7PT5C7cjs.useLocalStorage.call(void 0,
9033
+ const isLgUp = _nullishCoalesce(_chunkALW3D72Ocjs.useLgUp.call(void 0, ), () => ( false));
9034
+ const [minimized, setMinimized] = _chunkALW3D72Ocjs.useLocalStorage.call(void 0,
9042
9035
  STORAGE_KEY,
9043
9036
  !isLgUp || (_nullishCoalesce(config.minimized, () => ( false)))
9044
9037
  );
@@ -9410,7 +9403,7 @@ var AppHeader = React33.default.memo(function AppHeader2({
9410
9403
  onToggleMobileMenu,
9411
9404
  disabled = false
9412
9405
  }) {
9413
- const isMdUp = _nullishCoalesce(_chunkWX7PT5C7cjs.useMdUp.call(void 0, ), () => ( false));
9406
+ const isMdUp = _nullishCoalesce(_chunkALW3D72Ocjs.useMdUp.call(void 0, ), () => ( false));
9414
9407
  const dimmedClass = disabled ? "pointer-events-none opacity-50" : "";
9415
9408
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
9416
9409
  "header",
@@ -9793,7 +9786,7 @@ function NotificationTile({
9793
9786
  ),
9794
9787
  children: [
9795
9788
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-xs)] p-[var(--spacing-system-s)]", children: [
9796
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex size-6 shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "size-1.5 rounded-full", _chunkWX7PT5C7cjs.dotColorByVariant[variant]) }) }),
9789
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex size-6 shrink-0 items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "size-1.5 rounded-full", _chunkALW3D72Ocjs.dotColorByVariant[variant]) }) }),
9797
9790
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
9798
9791
  title ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-h4 text-ods-text-primary", children: title }) : null,
9799
9792
  description ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h6 line-clamp-2 text-ods-text-secondary", children: description }) : null
@@ -9834,7 +9827,7 @@ function NotificationTile({
9834
9827
  "aria-hidden": true,
9835
9828
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
9836
9829
  "absolute inset-x-0 -bottom-px h-1 origin-left",
9837
- _chunkWX7PT5C7cjs.progressColorByVariant[variant]
9830
+ _chunkALW3D72Ocjs.progressColorByVariant[variant]
9838
9831
  ),
9839
9832
  style: {
9840
9833
  animation: `toast-progress ${liveDurationMs}ms linear forwards`,
@@ -10286,7 +10279,7 @@ var ToolBadge = ({
10286
10279
  }) => {
10287
10280
  const label = getToolLabel(toolType);
10288
10281
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex items-center gap-1 text-ods-text-secondary", className), children: [
10289
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWX7PT5C7cjs.ToolIcon, { toolType, className: iconClassName, size: 16 }),
10282
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkALW3D72Ocjs.ToolIcon, { toolType, className: iconClassName, size: 16 }),
10290
10283
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-text-primary text-h4", children: label })
10291
10284
  ] });
10292
10285
  };
@@ -12547,7 +12540,7 @@ _chunkBJTOSUT4cjs.init_button2.call(void 0, );
12547
12540
 
12548
12541
  function HeroImageUploader({ imageUrl, onChange, uploadEndpoint, height = 300, objectFit = "cover", showReplaceButton = true, deferUpload = false, onUpload, onDelete }) {
12549
12542
  const inputRef = _react.useRef.call(void 0, null);
12550
- const { toast } = _chunkWX7PT5C7cjs.useToast.call(void 0, );
12543
+ const { toast } = _chunkALW3D72Ocjs.useToast.call(void 0, );
12551
12544
  const [uploading, setUploading] = _react.useState.call(void 0, false);
12552
12545
  const ALLOWED_TYPES = ["image/jpeg", "image/jpg", "image/png", "image/webp", "image/gif"];
12553
12546
  const MAX_SIZE = 5 * 1024 * 1024;
@@ -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
  },
@@ -16128,7 +16182,7 @@ function OnboardingWalkthrough({
16128
16182
  isStepSkipped,
16129
16183
  allStepsComplete,
16130
16184
  markMultipleComplete
16131
- } = _chunkWX7PT5C7cjs.useOnboardingState.call(void 0, storageKey);
16185
+ } = _chunkALW3D72Ocjs.useOnboardingState.call(void 0, storageKey);
16132
16186
  const hasAutoMarkedRef = _react.useRef.call(void 0, false);
16133
16187
  const autoMarkingInProgressRef = _react.useRef.call(void 0, false);
16134
16188
  const lastCompletionStatusRef = _react.useRef.call(void 0, null);
@@ -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,968 +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
- var _youtube = require('react-player/youtube'); var _youtube2 = _interopRequireDefault(_youtube);
16621
-
16622
- var Play = ({ size = 16, className }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: size, height: size, fill: "currentColor", viewBox: "0 0 24 24", className, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "polygon", { points: "5,3 19,12 5,21" }) });
16623
- var Loader = ({ size = 16, className }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "svg", { width: size, height: size, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", className, children: [
16624
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "12", y1: "2", x2: "12", y2: "6" }),
16625
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "12", y1: "18", x2: "12", y2: "22" }),
16626
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "4.93", y1: "4.93", x2: "7.76", y2: "7.76" }),
16627
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "16.24", y1: "16.24", x2: "19.07", y2: "19.07" }),
16628
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "2", y1: "12", x2: "6", y2: "12" }),
16629
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "18", y1: "12", x2: "22", y2: "12" }),
16630
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "4.93", y1: "19.07", x2: "7.76", y2: "16.24" }),
16631
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "line", { x1: "16.24", y1: "7.76", x2: "19.07", y2: "4.93" })
16632
- ] });
16633
- var YouTubeEmbed = ({
16634
- videoId,
16635
- title = "YouTube Video",
16636
- className = "",
16637
- showTitle = true,
16638
- showMeta = true,
16639
- minimalControls = false
16640
- }) => {
16641
- const [isLoading, setIsLoading] = _react.useState.call(void 0, true);
16642
- const [hasError, setHasError] = _react.useState.call(void 0, false);
16643
- const [isPlaying, setIsPlaying] = _react.useState.call(void 0, false);
16644
- const [useIframe, setUseIframe] = _react.useState.call(void 0, false);
16645
- const [mounted, setMounted] = _react.useState.call(void 0, false);
16646
- _react.useEffect.call(void 0, () => {
16647
- setMounted(true);
16648
- setUseIframe(true);
16649
- setIsLoading(false);
16650
- }, []);
16651
- const handleReady = () => {
16652
- setIsLoading(false);
16653
- };
16654
- const handleError = () => {
16655
- setIsLoading(false);
16656
- setHasError(true);
16657
- setUseIframe(true);
16658
- };
16659
- const handlePlay = () => {
16660
- setIsPlaying(true);
16661
- };
16662
- const handlePause = () => {
16663
- setIsPlaying(false);
16664
- };
16665
- const videoUrl = `https://www.youtube.com/watch?v=${videoId}`;
16666
- const embedParams = new URLSearchParams({
16667
- rel: "0",
16668
- modestbranding: "1",
16669
- playsinline: "1"
16670
- });
16671
- if (minimalControls) {
16672
- embedParams.set("controls", "0");
16673
- embedParams.set("showinfo", "0");
16674
- embedParams.set("fs", "0");
16675
- embedParams.set("iv_load_policy", "3");
16676
- embedParams.set("cc_load_policy", "0");
16677
- embedParams.set("disablekb", "1");
16678
- embedParams.set("rel", "0");
16679
- }
16680
- const embedUrl = `https://www.youtube.com/embed/${videoId}?${embedParams.toString()}`;
16681
- if (!mounted) {
16682
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `youtube-embed-container my-6 ${className}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "video-wrapper relative w-full", style: { paddingBottom: "56.25%" }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "loading-overlay absolute inset-0 bg-ods-card border border-ods-border rounded-lg flex items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "loading-content flex flex-col items-center gap-3", children: [
16683
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Loader, { className: "animate-spin text-ods-accent", size: 32 }),
16684
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "font-sans text-sm text-ods-text-secondary", children: "Loading video..." })
16685
- ] }) }) }) });
16686
- }
16687
- if (hasError) {
16688
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `youtube-embed-error ${className}`, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "error-state bg-ods-card border border-ods-error rounded-lg p-6 text-center my-6", children: [
16689
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "error-icon flex justify-center mb-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { width: "48", height: "48", fill: "currentColor", viewBox: "0 0 24 24", className: "text-ods-error", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" }) }) }),
16690
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "error-title font-sans font-semibold text-lg text-ods-error mb-2", children: "Video Unavailable" }),
16691
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "error-description font-sans text-sm text-ods-text-secondary mb-4", children: "Unable to load YouTube video. The video may be private or deleted." }),
16692
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16693
- "a",
16694
- {
16695
- href: videoUrl,
16696
- target: "_blank",
16697
- rel: "noopener noreferrer",
16698
- className: "error-retry-button bg-ods-error hover:bg-ods-error-hover text-ods-text-on-error border-none rounded px-4 py-2 font-sans font-medium text-sm cursor-pointer transition-colors duration-200",
16699
- children: "Watch on YouTube"
16700
- }
16701
- )
16702
- ] }) });
16703
- }
16704
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `youtube-embed-container my-6 ${className}`, children: [
16705
- 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 }),
16706
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "video-wrapper relative w-full", style: { paddingBottom: "56.25%" }, children: [
16707
- isLoading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "loading-overlay absolute inset-0 bg-ods-card border border-ods-border rounded-lg flex items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "loading-content flex flex-col items-center gap-3", children: [
16708
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Loader, { className: "animate-spin text-ods-accent", size: 32 }),
16709
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "font-sans text-sm text-ods-text-secondary", children: "Loading video..." })
16710
- ] }) }),
16711
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "video-player absolute inset-0 rounded-lg overflow-hidden border border-ods-border bg-ods-bg-inverse", children: useIframe ? (
16712
- // Iframe fallback for mobile and error cases
16713
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16714
- "iframe",
16715
- {
16716
- src: embedUrl,
16717
- title,
16718
- className: "w-full h-full border-0",
16719
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
16720
- allowFullScreen: true,
16721
- style: { border: "none" }
16722
- }
16723
- )
16724
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16725
- _youtube2.default,
16726
- {
16727
- url: videoUrl,
16728
- width: "100%",
16729
- height: "100%",
16730
- onReady: handleReady,
16731
- onError: handleError,
16732
- onPlay: handlePlay,
16733
- onPause: handlePause,
16734
- config: {
16735
- youtube: {
16736
- playerVars: {
16737
- autoplay: 0,
16738
- controls: 1,
16739
- rel: 0,
16740
- showinfo: 0,
16741
- modestbranding: 1,
16742
- iv_load_policy: 3,
16743
- cc_load_policy: 0,
16744
- playsinline: 1
16745
- }
16746
- }
16747
- },
16748
- light: false,
16749
- playing: false
16750
- }
16751
- ) }),
16752
- !useIframe && !isPlaying && !isLoading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "play-overlay absolute inset-0 flex items-center justify-center bg-ods-bg-inverse bg-opacity-20 rounded-lg transition-opacity duration-300 hover:bg-opacity-30", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16753
- "button",
16754
- {
16755
- onClick: () => setIsPlaying(true),
16756
- className: "play-button bg-ods-accent hover:bg-ods-accent-hover text-ods-text-on-accent w-16 h-16 rounded-full flex items-center justify-center transition-all duration-200 transform hover:scale-110 shadow-lg",
16757
- "aria-label": "Play video",
16758
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Play, { size: 24, className: "ml-1" })
16759
- }
16760
- ) })
16761
- ] }),
16762
- 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: [
16763
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "video-platform font-sans", children: "YouTube" }),
16764
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16765
- "a",
16766
- {
16767
- href: videoUrl,
16768
- target: "_blank",
16769
- rel: "noopener noreferrer",
16770
- className: "video-link font-sans text-ods-accent hover:text-ods-accent-hover transition-colors duration-200",
16771
- children: "Watch on YouTube \u2192"
16772
- }
16773
- )
16774
- ] })
16775
- ] });
16776
- };
16777
- var extractYouTubeId = (url) => {
16778
- const patterns = [
16779
- /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([^&\n?#]+)/,
16780
- /youtube\.com\/v\/([^&\n?#]+)/,
16781
- /youtube\.com\/watch\?.*v=([^&\n?#]+)/
16782
- ];
16783
- for (const pattern of patterns) {
16784
- const match = url.match(pattern);
16785
- if (match) {
16786
- return match[1];
16787
- }
16788
- }
16789
- return null;
16790
- };
16791
- var YouTubeLinkParser = ({ href, children }) => {
16792
- const videoId = extractYouTubeId(href);
16793
- if (videoId) {
16794
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, YouTubeEmbed, { videoId, title: typeof children === "string" ? children : void 0 });
16795
- }
16796
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16797
- "a",
16798
- {
16799
- href,
16800
- target: "_blank",
16801
- rel: "noopener noreferrer",
16802
- className: "text-ods-accent hover:text-ods-accent-hover transition-colors duration-200",
16803
- children
16804
- }
16805
- );
16806
- };
16807
-
16808
- // src/components/features/video-player.tsx
16809
-
16810
- var _reactplayer = require('react-player'); var _reactplayer2 = _interopRequireDefault(_reactplayer);
16811
- _chunkBJTOSUT4cjs.init_button2.call(void 0, );
16812
-
16813
- function useVideoFirstFramePoster(url, enabled) {
16814
- const [poster, setPoster] = _react.useState.call(void 0, null);
16815
- _react.useEffect.call(void 0, () => {
16816
- if (!enabled || !url) {
16817
- setPoster(null);
16818
- return;
16819
- }
16820
- const isDirectFile = /\.(mp4|webm|mov|m4v)(\?|#|$)/i.test(url);
16821
- if (!isDirectFile) {
16822
- setPoster(null);
16823
- return;
16824
- }
16825
- let cancelled = false;
16826
- const video = document.createElement("video");
16827
- video.crossOrigin = "anonymous";
16828
- video.preload = "metadata";
16829
- video.muted = true;
16830
- video.playsInline = true;
16831
- video.setAttribute("data-poster-extractor", "true");
16832
- const cleanup = () => {
16833
- video.removeAttribute("src");
16834
- try {
16835
- video.load();
16836
- } catch (e22) {
16837
- }
16838
- };
16839
- const onLoadedMetadata = () => {
16840
- if (cancelled) return;
16841
- const dur = video.duration || 10;
16842
- const target = Math.max(2, Math.min(dur * 0.1, 30));
16843
- video.currentTime = target;
16844
- };
16845
- const onSeeked = () => {
16846
- if (cancelled) return;
16847
- try {
16848
- const canvas = document.createElement("canvas");
16849
- canvas.width = video.videoWidth;
16850
- canvas.height = video.videoHeight;
16851
- const ctx = canvas.getContext("2d");
16852
- if (!ctx || !canvas.width || !canvas.height) {
16853
- cleanup();
16854
- return;
16855
- }
16856
- ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
16857
- const dataUrl = canvas.toDataURL("image/jpeg", 0.82);
16858
- if (!cancelled) setPoster(dataUrl);
16859
- } catch (err) {
16860
- console.warn("[VideoPlayer] first-frame extraction failed", err);
16861
- } finally {
16862
- cleanup();
16863
- }
16864
- };
16865
- const onError = () => {
16866
- cleanup();
16867
- };
16868
- video.addEventListener("loadedmetadata", onLoadedMetadata);
16869
- video.addEventListener("seeked", onSeeked);
16870
- video.addEventListener("error", onError);
16871
- video.src = url;
16872
- return () => {
16873
- cancelled = true;
16874
- video.removeEventListener("loadedmetadata", onLoadedMetadata);
16875
- video.removeEventListener("seeked", onSeeked);
16876
- video.removeEventListener("error", onError);
16877
- cleanup();
16878
- };
16879
- }, [url, enabled]);
16880
- return poster;
16881
- }
16882
- var webkitCaptionCSSInjected = false;
16883
- function ensureWebkitCaptionCSS() {
16884
- if (webkitCaptionCSSInjected || typeof document === "undefined") return;
16885
- const style = document.createElement("style");
16886
- style.textContent = `
16887
- video::-webkit-media-text-track-container {
16888
- display: block !important;
16889
- visibility: visible !important;
16890
- overflow: visible !important;
16891
- }
16892
- video::-webkit-media-text-track-display {
16893
- white-space: pre-line;
16894
- }
16895
- `;
16896
- document.head.appendChild(style);
16897
- webkitCaptionCSSInjected = true;
16898
- }
16899
- function parseSrt(srt) {
16900
- const cues = [];
16901
- const blocks = srt.replace(/\r\n/g, "\n").trim().split(/\n\n+/);
16902
- for (const block of blocks) {
16903
- const lines = block.split("\n");
16904
- const tsIndex = lines.findIndex((l) => l.includes(" --> "));
16905
- if (tsIndex === -1) continue;
16906
- const [startStr, endStr] = lines[tsIndex].split(" --> ");
16907
- const from = parseSrtTimestamp(_optionalChain([startStr, 'optionalAccess', _433 => _433.trim, 'call', _434 => _434()]));
16908
- const to = parseSrtTimestamp(_optionalChain([endStr, 'optionalAccess', _435 => _435.trim, 'call', _436 => _436()]));
16909
- if (from === null || to === null) continue;
16910
- const text = lines.slice(tsIndex + 1).join("\n").trim();
16911
- if (text) cues.push({ from, to, text });
16912
- }
16913
- return cues;
16914
- }
16915
- function parseSrtTimestamp(ts) {
16916
- if (!ts) return null;
16917
- const match = ts.match(/(\d{2}):(\d{2}):(\d{2})[,.](\d{3})/);
16918
- if (!match) return null;
16919
- return parseInt(match[1]) * 36e5 + parseInt(match[2]) * 6e4 + parseInt(match[3]) * 1e3 + parseInt(match[4]);
16920
- }
16921
- function useSubtitleOverlay(srtContent) {
16922
- const cues = _react.useMemo.call(void 0, () => srtContent ? parseSrt(srtContent) : [], [srtContent]);
16923
- const [activeText, setActiveText] = _react.useState.call(void 0, null);
16924
- const updateTime = _react.useCallback.call(void 0, (playedSeconds) => {
16925
- const timeMs = playedSeconds * 1e3;
16926
- const active = cues.find((c) => timeMs >= c.from && timeMs <= c.to);
16927
- setActiveText(_nullishCoalesce(_optionalChain([active, 'optionalAccess', _437 => _437.text]), () => ( null)));
16928
- }, [cues]);
16929
- return { activeText, updateTime, hasCues: cues.length > 0 };
16930
- }
16931
- var SPEED_OPTIONS = [0.5, 0.75, 1, 1.25, 1.5, 2];
16932
- var LAZY_MOUNT_PLAY_FAILURE_GRACE_MS = 2e3;
16933
- function formatTime(secs) {
16934
- if (!secs || !isFinite(secs)) return "0:00";
16935
- const h = Math.floor(secs / 3600);
16936
- const m = Math.floor(secs % 3600 / 60);
16937
- const s = Math.floor(secs % 60);
16938
- if (h > 0) return `${h}:${m.toString().padStart(2, "0")}:${s.toString().padStart(2, "0")}`;
16939
- return `${m}:${s.toString().padStart(2, "0")}`;
16940
- }
16941
- var VideoPlayer = ({
16942
- url,
16943
- title,
16944
- poster,
16945
- className = "",
16946
- showTitle = false,
16947
- autoPlay = false,
16948
- loop = false,
16949
- muted = false,
16950
- useNativeAspectRatio = false,
16951
- srtContent,
16952
- captionsUrl,
16953
- subtitleLabel,
16954
- lazyMount = false
16955
- }) => {
16956
- const [hasError, setHasError] = _react.useState.call(void 0, false);
16957
- const [isPlaying, setIsPlaying] = _react.useState.call(void 0, autoPlay);
16958
- const [mounted, setMounted] = _react.useState.call(void 0, false);
16959
- const [hasStarted, setHasStarted] = _react.useState.call(void 0, autoPlay);
16960
- const playerRef = _react.useRef.call(void 0, null);
16961
- const containerRef = _react.useRef.call(void 0, null);
16962
- const [played, setPlayed] = _react.useState.call(void 0, 0);
16963
- const [loaded, setLoaded] = _react.useState.call(void 0, 0);
16964
- const [duration, setDuration] = _react.useState.call(void 0, 0);
16965
- const [volume, setVolume] = _react.useState.call(void 0, 0.8);
16966
- const [prevVolume, setPrevVolume] = _react.useState.call(void 0, 0.8);
16967
- const [isMuted, setIsMuted] = _react.useState.call(void 0, muted);
16968
- const [isBuffering, setIsBuffering] = _react.useState.call(void 0, false);
16969
- const [showControls, setShowControls] = _react.useState.call(void 0, true);
16970
- const hideTimeoutRef = _react.useRef.call(void 0, void 0);
16971
- const clickTimerRef = _react.useRef.call(void 0, void 0);
16972
- const iosFullscreenTimerRef = _react.useRef.call(void 0, void 0);
16973
- const lazyMountFailureTimerRef = _react.useRef.call(void 0, void 0);
16974
- const [captionsEnabled, setCaptionsEnabled] = _react.useState.call(void 0, true);
16975
- const [isFullscreen, setIsFullscreen] = _react.useState.call(void 0, false);
16976
- const { activeText, updateTime, hasCues } = useSubtitleOverlay(srtContent);
16977
- _react.useEffect.call(void 0, () => {
16978
- const onChange = () => {
16979
- const fsEl = document.fullscreenElement || document.webkitFullscreenElement;
16980
- setIsFullscreen(!!fsEl);
16981
- };
16982
- document.addEventListener("fullscreenchange", onChange);
16983
- document.addEventListener("webkitfullscreenchange", onChange);
16984
- return () => {
16985
- document.removeEventListener("fullscreenchange", onChange);
16986
- document.removeEventListener("webkitfullscreenchange", onChange);
16987
- };
16988
- }, []);
16989
- const activateCaptionTracks = _react.useCallback.call(void 0, (video) => {
16990
- for (let i = 0; i < video.textTracks.length; i++) {
16991
- if (video.textTracks[i].kind === "captions" || video.textTracks[i].kind === "subtitles") {
16992
- video.textTracks[i].mode = "showing";
16993
- }
16994
- }
16995
- }, []);
16996
- const enterNativeVideoFullscreen = _react.useCallback.call(void 0, () => {
16997
- const video = _optionalChain([playerRef, 'access', _438 => _438.current, 'optionalAccess', _439 => _439.getInternalPlayer, 'call', _440 => _440()]);
16998
- if (!video || !video.webkitEnterFullscreen) return;
16999
- ensureWebkitCaptionCSS();
17000
- const trackSrc = captionsUrl || null;
17001
- if (!trackSrc) {
17002
- try {
17003
- video.webkitEnterFullscreen();
17004
- } catch (e23) {
17005
- }
17006
- return;
17007
- }
17008
- const old = video.querySelector("track[data-native-cc]");
17009
- if (old) old.remove();
17010
- clearTimeout(iosFullscreenTimerRef.current);
17011
- const track = document.createElement("track");
17012
- track.kind = "captions";
17013
- track.label = subtitleLabel || "English";
17014
- track.srclang = "en";
17015
- track.default = true;
17016
- track.setAttribute("data-native-cc", "true");
17017
- video.appendChild(track);
17018
- track.src = trackSrc;
17019
- let entered = false;
17020
- const doFullscreen = () => {
17021
- if (entered) return;
17022
- entered = true;
17023
- activateCaptionTracks(video);
17024
- try {
17025
- video.webkitEnterFullscreen();
17026
- } catch (e24) {
17027
- }
17028
- };
17029
- track.addEventListener("load", doFullscreen, { once: true });
17030
- iosFullscreenTimerRef.current = setTimeout(() => {
17031
- track.removeEventListener("load", doFullscreen);
17032
- doFullscreen();
17033
- }, 500);
17034
- }, [captionsUrl, subtitleLabel, activateCaptionTracks]);
17035
- const toggleFullscreen = _react.useCallback.call(void 0, () => {
17036
- const container = containerRef.current;
17037
- if (!container) return;
17038
- if (isFullscreen) {
17039
- try {
17040
- if (document.exitFullscreen) document.exitFullscreen();
17041
- else if (document.webkitExitFullscreen) document.webkitExitFullscreen();
17042
- } catch (e25) {
17043
- }
17044
- return;
17045
- }
17046
- if (container.requestFullscreen) {
17047
- container.requestFullscreen().catch(() => enterNativeVideoFullscreen());
17048
- } else if (container.webkitRequestFullscreen) {
17049
- container.webkitRequestFullscreen();
17050
- } else {
17051
- enterNativeVideoFullscreen();
17052
- }
17053
- }, [isFullscreen, enterNativeVideoFullscreen]);
17054
- const toggleMute = _react.useCallback.call(void 0, () => {
17055
- if (isMuted) {
17056
- setIsMuted(false);
17057
- setVolume(prevVolume || 0.5);
17058
- } else {
17059
- setPrevVolume(volume);
17060
- setIsMuted(true);
17061
- setVolume(0);
17062
- }
17063
- }, [isMuted, volume, prevVolume]);
17064
- const handleVolumeChange = _react.useCallback.call(void 0, (e) => {
17065
- const val = parseFloat(e.target.value);
17066
- setVolume(val);
17067
- setIsMuted(val === 0);
17068
- if (val > 0) setPrevVolume(val);
17069
- }, []);
17070
- const startHideTimer = _react.useCallback.call(void 0, () => {
17071
- clearTimeout(hideTimeoutRef.current);
17072
- if (isPlaying) {
17073
- hideTimeoutRef.current = setTimeout(() => setShowControls(false), 3e3);
17074
- }
17075
- }, [isPlaying]);
17076
- const handleMouseMove = _react.useCallback.call(void 0, () => {
17077
- setShowControls(true);
17078
- startHideTimer();
17079
- }, [startHideTimer]);
17080
- const handleTouchToggle = _react.useCallback.call(void 0, () => {
17081
- if (!hasStarted) return;
17082
- setShowControls((prev) => {
17083
- const next = !prev;
17084
- clearTimeout(hideTimeoutRef.current);
17085
- if (next && isPlaying) {
17086
- hideTimeoutRef.current = setTimeout(() => setShowControls(false), 3e3);
17087
- }
17088
- return next;
17089
- });
17090
- }, [hasStarted, isPlaying]);
17091
- _react.useEffect.call(void 0, () => {
17092
- if (!hasStarted) return;
17093
- const el = containerRef.current;
17094
- if (!el) return;
17095
- const onKey = (e) => {
17096
- if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) return;
17097
- switch (e.key) {
17098
- case " ":
17099
- case "k":
17100
- e.preventDefault();
17101
- setIsPlaying((prev) => !prev);
17102
- break;
17103
- case "ArrowLeft":
17104
- e.preventDefault();
17105
- _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")]);
17106
- break;
17107
- case "ArrowRight":
17108
- e.preventDefault();
17109
- _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")]);
17110
- break;
17111
- case "ArrowUp":
17112
- e.preventDefault();
17113
- setVolume((v) => {
17114
- const nv = Math.min(1, v + 0.1);
17115
- setIsMuted(false);
17116
- return nv;
17117
- });
17118
- break;
17119
- case "ArrowDown":
17120
- e.preventDefault();
17121
- setVolume((v) => {
17122
- const nv = Math.max(0, v - 0.1);
17123
- if (nv === 0) setIsMuted(true);
17124
- return nv;
17125
- });
17126
- break;
17127
- case "m":
17128
- case "M":
17129
- e.preventDefault();
17130
- toggleMute();
17131
- break;
17132
- case "f":
17133
- case "F":
17134
- e.preventDefault();
17135
- toggleFullscreen();
17136
- break;
17137
- case "c":
17138
- case "C":
17139
- e.preventDefault();
17140
- setCaptionsEnabled((prev) => !prev);
17141
- break;
17142
- }
17143
- };
17144
- el.addEventListener("keydown", onKey);
17145
- return () => el.removeEventListener("keydown", onKey);
17146
- }, [hasStarted, duration, toggleMute, toggleFullscreen]);
17147
- const [seekPreview, setSeekPreview] = _react.useState.call(void 0, null);
17148
- const [playbackRate, setPlaybackRate] = _react.useState.call(void 0, 1);
17149
- const cycleSpeed = _react.useCallback.call(void 0, () => {
17150
- setPlaybackRate((prev) => {
17151
- const idx = SPEED_OPTIONS.indexOf(prev);
17152
- return SPEED_OPTIONS[(idx + 1) % SPEED_OPTIONS.length];
17153
- });
17154
- }, []);
17155
- const progressBarRef = _react.useRef.call(void 0, null);
17156
- const isDraggingRef = _react.useRef.call(void 0, false);
17157
- const dragListenersRef = _react.useRef.call(void 0, null);
17158
- const seekToClientX = _react.useCallback.call(void 0, (clientX) => {
17159
- const rect = _optionalChain([progressBarRef, 'access', _453 => _453.current, 'optionalAccess', _454 => _454.getBoundingClientRect, 'call', _455 => _455()]);
17160
- if (!rect) return;
17161
- const fraction = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));
17162
- setPlayed(fraction);
17163
- _optionalChain([playerRef, 'access', _456 => _456.current, 'optionalAccess', _457 => _457.seekTo, 'call', _458 => _458(fraction, "fraction")]);
17164
- }, []);
17165
- const handleProgressMouseDown = _react.useCallback.call(void 0, (e) => {
17166
- e.stopPropagation();
17167
- e.preventDefault();
17168
- isDraggingRef.current = true;
17169
- seekToClientX(e.clientX);
17170
- if (dragListenersRef.current) {
17171
- document.removeEventListener("mousemove", dragListenersRef.current.move);
17172
- document.removeEventListener("mouseup", dragListenersRef.current.up);
17173
- }
17174
- const onMouseMove = (ev) => {
17175
- if (!isDraggingRef.current) return;
17176
- seekToClientX(ev.clientX);
17177
- };
17178
- const onMouseUp = () => {
17179
- isDraggingRef.current = false;
17180
- document.removeEventListener("mousemove", onMouseMove);
17181
- document.removeEventListener("mouseup", onMouseUp);
17182
- dragListenersRef.current = null;
17183
- };
17184
- dragListenersRef.current = { move: onMouseMove, up: onMouseUp };
17185
- document.addEventListener("mousemove", onMouseMove);
17186
- document.addEventListener("mouseup", onMouseUp);
17187
- }, [seekToClientX]);
17188
- const handleProgressTouchStart = _react.useCallback.call(void 0, (e) => {
17189
- e.stopPropagation();
17190
- const touch = e.touches[0];
17191
- if (touch) seekToClientX(touch.clientX);
17192
- }, [seekToClientX]);
17193
- const handleProgressTouchMove = _react.useCallback.call(void 0, (e) => {
17194
- e.stopPropagation();
17195
- const touch = e.touches[0];
17196
- if (touch) seekToClientX(touch.clientX);
17197
- }, [seekToClientX]);
17198
- const handleProgressKeyDown = _react.useCallback.call(void 0, (e) => {
17199
- if (e.key === "ArrowRight") {
17200
- e.preventDefault();
17201
- e.stopPropagation();
17202
- _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")]);
17203
- }
17204
- if (e.key === "ArrowLeft") {
17205
- e.preventDefault();
17206
- e.stopPropagation();
17207
- _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")]);
17208
- }
17209
- if (e.key === "Home") {
17210
- e.preventDefault();
17211
- e.stopPropagation();
17212
- _optionalChain([playerRef, 'access', _471 => _471.current, 'optionalAccess', _472 => _472.seekTo, 'call', _473 => _473(0, "seconds")]);
17213
- }
17214
- if (e.key === "End") {
17215
- e.preventDefault();
17216
- e.stopPropagation();
17217
- _optionalChain([playerRef, 'access', _474 => _474.current, 'optionalAccess', _475 => _475.seekTo, 'call', _476 => _476(duration, "seconds")]);
17218
- }
17219
- }, [duration]);
17220
- const handleProgressHover = _react.useCallback.call(void 0, (e) => {
17221
- if (isDraggingRef.current) return;
17222
- const rect = e.currentTarget.getBoundingClientRect();
17223
- const fraction = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
17224
- const x = Math.max(30, Math.min(rect.width - 30, e.clientX - rect.left));
17225
- setSeekPreview({ fraction, x });
17226
- }, []);
17227
- const isTouchRef = _react.useRef.call(void 0, false);
17228
- const handleContainerClick = _react.useCallback.call(void 0, (e) => {
17229
- if (isTouchRef.current) {
17230
- isTouchRef.current = false;
17231
- return;
17232
- }
17233
- if (e.target.closest(".video-controls-bar")) return;
17234
- if (!hasStarted) return;
17235
- if (clickTimerRef.current) {
17236
- clearTimeout(clickTimerRef.current);
17237
- clickTimerRef.current = void 0;
17238
- toggleFullscreen();
17239
- } else {
17240
- clickTimerRef.current = setTimeout(() => {
17241
- clickTimerRef.current = void 0;
17242
- setIsPlaying((prev) => !prev);
17243
- }, 250);
17244
- }
17245
- }, [hasStarted, toggleFullscreen]);
17246
- const handleContainerTouchEnd = _react.useCallback.call(void 0, (e) => {
17247
- if (e.target.closest(".video-controls-bar")) return;
17248
- isTouchRef.current = true;
17249
- if (!hasStarted) return;
17250
- handleTouchToggle();
17251
- }, [hasStarted, handleTouchToggle]);
17252
- const extractedPoster = useVideoFirstFramePoster(url, !lazyMount && !hasStarted && !poster);
17253
- const effectivePoster = poster || extractedPoster || void 0;
17254
- const posterBgColor = _chunkWX7PT5C7cjs.useImageEdgeColor.call(void 0, effectivePoster);
17255
- _react.useEffect.call(void 0, () => {
17256
- setMounted(true);
17257
- return () => {
17258
- clearTimeout(clickTimerRef.current);
17259
- clearTimeout(hideTimeoutRef.current);
17260
- clearTimeout(iosFullscreenTimerRef.current);
17261
- clearTimeout(lazyMountFailureTimerRef.current);
17262
- isDraggingRef.current = false;
17263
- if (dragListenersRef.current) {
17264
- document.removeEventListener("mousemove", dragListenersRef.current.move);
17265
- document.removeEventListener("mouseup", dragListenersRef.current.up);
17266
- dragListenersRef.current = null;
17267
- }
17268
- };
17269
- }, []);
17270
- _react.useEffect.call(void 0, () => {
17271
- if (!hasStarted) return;
17272
- const video = _optionalChain([playerRef, 'access', _477 => _477.current, 'optionalAccess', _478 => _478.getInternalPlayer, 'call', _479 => _479()]);
17273
- if (!video) return;
17274
- const onBeginFS = () => activateCaptionTracks(video);
17275
- video.addEventListener("webkitbeginfullscreen", onBeginFS);
17276
- return () => video.removeEventListener("webkitbeginfullscreen", onBeginFS);
17277
- }, [hasStarted, activateCaptionTracks]);
17278
- const handleError = _react.useCallback.call(void 0, () => setHasError(true), []);
17279
- const handlePlay = _react.useCallback.call(void 0, () => {
17280
- setIsPlaying(true);
17281
- setHasStarted(true);
17282
- }, []);
17283
- const handlePause = _react.useCallback.call(void 0, () => setIsPlaying(false), []);
17284
- const handleEnded = _react.useCallback.call(void 0, () => setIsPlaying(false), []);
17285
- const handlePlayClick = _react.useCallback.call(void 0, () => {
17286
- if (lazyMount) {
17287
- const native = _optionalChain([playerRef, 'access', _480 => _480.current, 'optionalAccess', _481 => _481.getInternalPlayer, 'call', _482 => _482()]);
17288
- if (native instanceof HTMLVideoElement) {
17289
- native.play().catch(() => {
17290
- clearTimeout(lazyMountFailureTimerRef.current);
17291
- lazyMountFailureTimerRef.current = setTimeout(() => {
17292
- if (native.paused && native.error) setHasError(true);
17293
- }, LAZY_MOUNT_PLAY_FAILURE_GRACE_MS);
17294
- });
17295
- } else if (process.env.NODE_ENV !== "production") {
17296
- console.warn("[VideoPlayer] lazyMount sync play(): no native HTMLVideoElement yet");
17297
- }
17298
- }
17299
- setHasStarted(true);
17300
- setIsPlaying(true);
17301
- }, [lazyMount]);
17302
- const handleProgress = _react.useCallback.call(void 0, ({ played: p, loaded: l, playedSeconds }) => {
17303
- setPlayed(p);
17304
- setLoaded(l);
17305
- updateTime(playedSeconds);
17306
- }, [updateTime]);
17307
- const handleBuffer = _react.useCallback.call(void 0, () => setIsBuffering(true), []);
17308
- const handleBufferEnd = _react.useCallback.call(void 0, () => setIsBuffering(false), []);
17309
- if (!mounted) {
17310
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `video-player-container ${className}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17311
- "div",
17312
- {
17313
- className: "video-wrapper relative w-full",
17314
- style: useNativeAspectRatio ? {} : { paddingBottom: "56.25%" },
17315
- 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" }) }) })
17316
- }
17317
- ) });
17318
- }
17319
- if (hasError) {
17320
- 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: [
17321
- /* @__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" }) }),
17322
- /* @__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" }),
17323
- /* @__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." })
17324
- ] }) });
17325
- }
17326
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `video-player-container ${className}`, children: [
17327
- 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 }),
17328
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
17329
- "div",
17330
- {
17331
- ref: containerRef,
17332
- tabIndex: 0,
17333
- role: "region",
17334
- "aria-label": title || "Video player",
17335
- 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" : ""}`,
17336
- style: isFullscreen ? { width: "100%", height: "100%" } : useNativeAspectRatio ? {} : { paddingBottom: "56.25%" },
17337
- onMouseMove: handleMouseMove,
17338
- onMouseLeave: startHideTimer,
17339
- onTouchEnd: handleContainerTouchEnd,
17340
- onClick: handleContainerClick,
17341
- children: [
17342
- !hasStarted && !hasError && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute inset-0 cursor-pointer group z-20", onClick: handlePlayClick, children: [
17343
- effectivePoster && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17344
- "img",
17345
- {
17346
- src: effectivePoster,
17347
- alt: title || "Video thumbnail",
17348
- className: "w-full h-full object-contain rounded-md",
17349
- style: { backgroundColor: posterBgColor }
17350
- }
17351
- ),
17352
- /* @__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" }) }) })
17353
- ] }),
17354
- /* @__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,
17355
- _reactplayer2.default,
17356
- {
17357
- ref: playerRef,
17358
- url,
17359
- width: "100%",
17360
- height: "100%",
17361
- controls: false,
17362
- playing: isPlaying,
17363
- playbackRate,
17364
- loop,
17365
- muted: isMuted,
17366
- volume: isMuted ? 0 : volume,
17367
- onError: handleError,
17368
- onPlay: handlePlay,
17369
- onPause: handlePause,
17370
- onEnded: handleEnded,
17371
- onDuration: setDuration,
17372
- onBuffer: handleBuffer,
17373
- onBufferEnd: handleBufferEnd,
17374
- onProgress: handleProgress,
17375
- progressInterval: 200,
17376
- config: { file: { attributes: { controlsList: "nodownload", playsInline: true, preload: lazyMount && !hasStarted ? "none" : hasStarted ? "auto" : "metadata" } } },
17377
- light: false,
17378
- playsinline: true
17379
- }
17380
- ) }),
17381
- 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" }) }),
17382
- captionsEnabled && activeText && hasStarted && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17383
- "div",
17384
- {
17385
- className: "absolute left-[5%] right-[5%] text-center pointer-events-none z-10 transition-[bottom] duration-300 ease-in-out",
17386
- style: { bottom: showControls || !isPlaying ? 52 : 12 },
17387
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17388
- "span",
17389
- {
17390
- className: "inline-block bg-black/80 text-white leading-relaxed px-4 py-1.5 rounded font-sans font-medium whitespace-pre-line",
17391
- style: {
17392
- fontSize: isFullscreen ? "clamp(20px, 3.3vh, 42px)" : "clamp(15px, 3.3cqw, 26px)",
17393
- maxWidth: "90%",
17394
- textShadow: "0 1px 4px rgba(0,0,0,0.6)",
17395
- WebkitTextStroke: "0.3px rgba(0,0,0,0.3)"
17396
- },
17397
- children: activeText
17398
- }
17399
- )
17400
- }
17401
- ),
17402
- hasStarted && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17403
- "div",
17404
- {
17405
- 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"}`,
17406
- onTouchEnd: (e) => {
17407
- e.stopPropagation();
17408
- startHideTimer();
17409
- },
17410
- 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: [
17411
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
17412
- "div",
17413
- {
17414
- className: "group/seek relative w-full h-6 cursor-pointer mb-0.5 flex items-center",
17415
- ref: progressBarRef,
17416
- role: "slider",
17417
- "aria-label": "Video progress",
17418
- "aria-valuenow": Math.round(played * 100),
17419
- "aria-valuetext": `${formatTime(played * duration)} of ${formatTime(duration)}`,
17420
- "aria-valuemin": 0,
17421
- "aria-valuemax": 100,
17422
- tabIndex: 0,
17423
- onMouseDown: handleProgressMouseDown,
17424
- onTouchStart: handleProgressTouchStart,
17425
- onTouchMove: handleProgressTouchMove,
17426
- onTouchEnd: (e) => e.stopPropagation(),
17427
- onMouseMove: handleProgressHover,
17428
- onMouseLeave: () => setSeekPreview(null),
17429
- onKeyDown: handleProgressKeyDown,
17430
- children: [
17431
- seekPreview && duration > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17432
- "div",
17433
- {
17434
- 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",
17435
- style: { left: seekPreview.x },
17436
- children: formatTime(seekPreview.fraction * duration)
17437
- }
17438
- ),
17439
- /* @__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: [
17440
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-white/20 rounded-full" }),
17441
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17442
- "div",
17443
- {
17444
- className: "absolute inset-y-0 left-0 bg-white/40 rounded-full transition-all",
17445
- style: { width: `${loaded * 100}%` }
17446
- }
17447
- ),
17448
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17449
- "div",
17450
- {
17451
- className: "absolute inset-y-0 left-0 bg-white rounded-full",
17452
- style: { width: `${played * 100}%` }
17453
- }
17454
- )
17455
- ] }),
17456
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17457
- "div",
17458
- {
17459
- 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",
17460
- style: { left: `calc(${played * 100}% - 6px)` }
17461
- }
17462
- )
17463
- ]
17464
- }
17465
- ),
17466
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-between h-9", children: [
17467
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center", children: [
17468
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17469
- _chunkBJTOSUT4cjs.Button,
17470
- {
17471
- variant: "transparent",
17472
- size: "icon",
17473
- onClick: (e) => {
17474
- e.stopPropagation();
17475
- setIsPlaying((prev) => !prev);
17476
- },
17477
- className: "h-9 w-9 text-white hover:text-white/80 hover:bg-white/10",
17478
- "aria-label": isPlaying ? "Pause (Space)" : "Play (Space)",
17479
- 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" })
17480
- }
17481
- ),
17482
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "group/vol flex items-center", children: [
17483
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17484
- _chunkBJTOSUT4cjs.Button,
17485
- {
17486
- variant: "transparent",
17487
- size: "icon",
17488
- onClick: (e) => {
17489
- e.stopPropagation();
17490
- toggleMute();
17491
- },
17492
- className: "h-9 w-9 text-white hover:text-white/80 hover:bg-white/10",
17493
- "aria-label": isMuted ? "Unmute (M)" : "Mute (M)",
17494
- 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" })
17495
- }
17496
- ),
17497
- /* @__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,
17498
- _chunkBJTOSUT4cjs.Input,
17499
- {
17500
- type: "range",
17501
- min: 0,
17502
- max: 1,
17503
- step: 0.01,
17504
- value: isMuted ? 0 : volume,
17505
- onChange: handleVolumeChange,
17506
- onClick: (e) => e.stopPropagation(),
17507
- "aria-label": "Volume",
17508
- className: "w-14 ml-1",
17509
- style: { background: `linear-gradient(to right, white ${(isMuted ? 0 : volume) * 100}%, rgba(255,255,255,0.3) ${(isMuted ? 0 : volume) * 100}%)` }
17510
- }
17511
- ) })
17512
- ] }),
17513
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-white/70 text-[12px] font-mono tabular-nums select-none ml-1.5", children: [
17514
- formatTime(played * duration),
17515
- " / ",
17516
- formatTime(duration)
17517
- ] })
17518
- ] }),
17519
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center", children: [
17520
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
17521
- _chunkBJTOSUT4cjs.Button,
17522
- {
17523
- variant: "transparent",
17524
- size: "small-legacy",
17525
- onClick: (e) => {
17526
- e.stopPropagation();
17527
- cycleSpeed();
17528
- },
17529
- 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"}`,
17530
- title: "Playback speed",
17531
- "aria-label": `Playback speed ${playbackRate}x`,
17532
- children: [
17533
- playbackRate,
17534
- "x"
17535
- ]
17536
- }
17537
- ),
17538
- hasCues && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17539
- _chunkBJTOSUT4cjs.Button,
17540
- {
17541
- variant: "transparent",
17542
- size: "small-legacy",
17543
- onClick: (e) => {
17544
- e.stopPropagation();
17545
- setCaptionsEnabled((prev) => !prev);
17546
- },
17547
- 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"}`,
17548
- style: { borderBottom: captionsEnabled ? "2px solid white" : "2px solid transparent" },
17549
- title: captionsEnabled ? "Hide captions (C)" : "Show captions (C)",
17550
- "aria-label": captionsEnabled ? "Hide captions" : "Show captions",
17551
- children: "CC"
17552
- }
17553
- ),
17554
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17555
- _chunkBJTOSUT4cjs.Button,
17556
- {
17557
- variant: "transparent",
17558
- size: "icon",
17559
- onClick: (e) => {
17560
- e.stopPropagation();
17561
- toggleFullscreen();
17562
- },
17563
- className: "h-9 w-9 text-white/80 hover:text-white hover:bg-white/10",
17564
- title: isFullscreen ? "Exit fullscreen (F)" : "Fullscreen (F)",
17565
- "aria-label": isFullscreen ? "Exit fullscreen" : "Fullscreen",
17566
- 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" })
17567
- }
17568
- )
17569
- ] })
17570
- ] })
17571
- ] })
17572
- }
17573
- )
17574
- ]
17575
- }
17576
- )
17577
- ] });
17578
- };
17579
-
17580
16672
  // src/components/layout/page-container.tsx
17581
16673
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
17582
16674
 
@@ -17603,7 +16695,7 @@ var SecondaryAction = ({ action }) => {
17603
16695
  e.preventDefault();
17604
16696
  return;
17605
16697
  }
17606
- _optionalChain([action, 'access', _483 => _483.onClick, 'optionalCall', _484 => _484()]);
16698
+ _optionalChain([action, 'access', _414 => _414.onClick, 'optionalCall', _415 => _415()]);
17607
16699
  },
17608
16700
  [action]
17609
16701
  );
@@ -17644,13 +16736,13 @@ var MenuItem = ({ item, onItemClick }) => {
17644
16736
  const activate = _react.useCallback.call(void 0, () => {
17645
16737
  if (item.disabled) return;
17646
16738
  if (item.type === "checkbox") {
17647
- _optionalChain([item, 'access', _485 => _485.onClick, 'optionalCall', _486 => _486()]);
17648
- _optionalChain([onItemClick, 'optionalCall', _487 => _487(item)]);
16739
+ _optionalChain([item, 'access', _416 => _416.onClick, 'optionalCall', _417 => _417()]);
16740
+ _optionalChain([onItemClick, 'optionalCall', _418 => _418(item)]);
17649
16741
  return;
17650
16742
  }
17651
16743
  if (item.type === "submenu") return;
17652
- _optionalChain([item, 'access', _488 => _488.onClick, 'optionalCall', _489 => _489()]);
17653
- _optionalChain([onItemClick, 'optionalCall', _490 => _490(item)]);
16744
+ _optionalChain([item, 'access', _419 => _419.onClick, 'optionalCall', _420 => _420()]);
16745
+ _optionalChain([onItemClick, 'optionalCall', _421 => _421(item)]);
17654
16746
  }, [item, onItemClick]);
17655
16747
  const handleClick = _react.useCallback.call(void 0,
17656
16748
  (e) => {
@@ -17676,8 +16768,8 @@ var MenuItem = ({ item, onItemClick }) => {
17676
16768
  e.stopPropagation();
17677
16769
  return;
17678
16770
  }
17679
- _optionalChain([item, 'access', _491 => _491.onClick, 'optionalCall', _492 => _492()]);
17680
- _optionalChain([onItemClick, 'optionalCall', _493 => _493(item)]);
16771
+ _optionalChain([item, 'access', _422 => _422.onClick, 'optionalCall', _423 => _423()]);
16772
+ _optionalChain([onItemClick, 'optionalCall', _424 => _424(item)]);
17681
16773
  },
17682
16774
  [item, onItemClick]
17683
16775
  );
@@ -17832,7 +16924,7 @@ var ActionsMenuDropdown = ({
17832
16924
  const [open, setOpen] = _react.useState.call(void 0, false);
17833
16925
  const handleItemClick = _react.useCallback.call(void 0,
17834
16926
  (item) => {
17835
- _optionalChain([onItemClick, 'optionalCall', _494 => _494(item)]);
16927
+ _optionalChain([onItemClick, 'optionalCall', _425 => _425(item)]);
17836
16928
  if (item.type !== "checkbox" && item.type !== "submenu") {
17837
16929
  setOpen(false);
17838
16930
  }
@@ -18003,7 +17095,7 @@ function IconButtonsVariant({
18003
17095
  }) {
18004
17096
  const desktopActions = actions.filter((a) => !a.showOnlyMobile);
18005
17097
  const hasMenuActions = !!menuActions && menuActions.some((g) => g.items.length > 0);
18006
- 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]);
18007
17099
  const singleAction = isSingleAction ? actions[0] : null;
18008
17100
  const useSingleActionMobile = isSingleAction && !hasMenuActions;
18009
17101
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
@@ -18433,14 +17525,14 @@ function ReleaseDetailPage({
18433
17525
  releaseVersion
18434
17526
  ] })
18435
17527
  ] }) }),
18436
- /* @__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,
18437
17529
  StatusBadge,
18438
17530
  {
18439
- 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(),
18440
17532
  variant: "card",
18441
17533
  className: "bg-ods-card border border-ods-border"
18442
17534
  },
18443
- 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])
18444
17536
  ))]) }),
18445
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: [
18446
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: [
@@ -18459,15 +17551,15 @@ function ReleaseDetailPage({
18459
17551
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18460
17552
  SquareAvatar,
18461
17553
  {
18462
- src: _optionalChain([author, 'optionalAccess', _504 => _504.avatar_url]) || "",
18463
- alt: _optionalChain([author, 'optionalAccess', _505 => _505.full_name]) || "Author",
18464
- 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"),
18465
17557
  size: "md",
18466
17558
  variant: "round"
18467
17559
  }
18468
17560
  ),
18469
17561
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-0 flex-1 min-w-0", children: [
18470
- /* @__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" }),
18471
17563
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Author" })
18472
17564
  ] })
18473
17565
  ] })
@@ -18482,7 +17574,7 @@ function ReleaseDetailPage({
18482
17574
  setGalleryOpen(true);
18483
17575
  }
18484
17576
  },
18485
- 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" })
18486
17578
  },
18487
17579
  mediaItem.id || index
18488
17580
  )) }),
@@ -18498,16 +17590,36 @@ function ReleaseDetailPage({
18498
17590
  videoBites,
18499
17591
  bitesTitle: "Video Clips",
18500
17592
  filterPublishedBites: true,
18501
- srtContent: _optionalChain([release, 'optionalAccess', _508 => _508.srt_content]),
18502
- captionsUrl: _optionalChain([release, 'optionalAccess', _509 => _509.captionsUrl])
17593
+ srtContent: _optionalChain([release, 'optionalAccess', _439 => _439.srt_content]),
17594
+ captionsUrl: _optionalChain([release, 'optionalAccess', _440 => _440.captionsUrl])
18503
17595
  }
18504
17596
  ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
18505
- youtubeUrl && (() => {
18506
- const videoId = extractYouTubeId(youtubeUrl);
18507
- return videoId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, YouTubeEmbed, { videoId, title: `${releaseTitle} - Video`, showTitle: false, showMeta: true }) : null;
18508
- })(),
18509
- !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]) }) }) }),
18510
- 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
+ )
18511
17623
  ] }),
18512
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 }) }),
18513
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: [
@@ -18586,7 +17698,7 @@ function ReleaseDetailPage({
18586
17698
  }
18587
17699
  )
18588
17700
  ] }),
18589
- (_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: [
18590
17702
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h5 tracking-[-0.28px] text-ods-text-secondary", children: "Related Links" }),
18591
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: [
18592
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: [
@@ -18615,7 +17727,7 @@ function ReleaseDetailPage({
18615
17727
  {
18616
17728
  href: path.startsWith("http") ? path : `/knowledge-base${path.startsWith("/") ? "" : "/"}${path}`,
18617
17729
  className: "text-h4 text-[#ffc008] hover:underline",
18618
- 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"
18619
17731
  }
18620
17732
  ),
18621
17733
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { className: "h-6 w-6 text-[#ffc008] shrink-0" })
@@ -18714,7 +17826,7 @@ function InfoCard({ data, className = "" }) {
18714
17826
  );
18715
17827
  }
18716
17828
  function InfoCardValueRow({ label, value, showLabel, copyable, copyAriaLabel }) {
18717
- const { copy, copied } = _chunkWX7PT5C7cjs.useCopyToClipboard.call(void 0, );
17829
+ const { copy, copied } = _chunkALW3D72Ocjs.useCopyToClipboard.call(void 0, );
18718
17830
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-6 items-center gap-[var(--spacing-system-xs)] self-stretch w-full", children: [
18719
17831
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-h4 text-ods-text-primary whitespace-nowrap", children: showLabel ? label : "" }),
18720
17832
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1 h-px bg-ods-divider" }),
@@ -18761,7 +17873,7 @@ function InfoRow({ label, value, icon }) {
18761
17873
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
18762
17874
 
18763
17875
 
18764
- var InputTrigger = React48.forwardRef(
17876
+ var InputTrigger = React47.forwardRef(
18765
17877
  ({ selectedLabel, placeholder, startIcon, endIcon, invalid, className, disabled, ...props }, ref) => {
18766
17878
  const isPlaceholder = selectedLabel === void 0 || selectedLabel === null || selectedLabel === "";
18767
17879
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -18825,8 +17937,8 @@ function MediaTypeSelector({
18825
17937
  className,
18826
17938
  disabled
18827
17939
  }) {
18828
- const [key, setKey] = React49.useState(0);
18829
- React49.useEffect(() => {
17940
+ const [key, setKey] = React48.useState(0);
17941
+ React48.useEffect(() => {
18830
17942
  setKey((prev) => prev + 1);
18831
17943
  }, [value]);
18832
17944
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -18926,7 +18038,7 @@ var ProgressBar = ({
18926
18038
  mobileHeight = 8,
18927
18039
  inverted = false
18928
18040
  }) => {
18929
- const isMdUp = _nullishCoalesce(_chunkWX7PT5C7cjs.useMdUp.call(void 0, ), () => ( true));
18041
+ const isMdUp = _nullishCoalesce(_chunkALW3D72Ocjs.useMdUp.call(void 0, ), () => ( true));
18930
18042
  const effectiveSegmentWidth = isMdUp ? segmentWidth : mobileSegmentWidth;
18931
18043
  const effectiveHeight = isMdUp ? height : mobileHeight;
18932
18044
  const containerRef = _react.useRef.call(void 0, null);
@@ -18982,7 +18094,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
18982
18094
 
18983
18095
  var _reactradiogroup = require('@radix-ui/react-radio-group'); var RadioGroupPrimitive = _interopRequireWildcard(_reactradiogroup);
18984
18096
 
18985
- var RadioGroup = React51.forwardRef(({ className, ...props }, ref) => {
18097
+ var RadioGroup = React50.forwardRef(({ className, ...props }, ref) => {
18986
18098
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18987
18099
  RadioGroupPrimitive.Root,
18988
18100
  {
@@ -18993,7 +18105,7 @@ var RadioGroup = React51.forwardRef(({ className, ...props }, ref) => {
18993
18105
  );
18994
18106
  });
18995
18107
  RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
18996
- var RadioGroupItem = React51.forwardRef(({ className, ...props }, ref) => {
18108
+ var RadioGroupItem = React50.forwardRef(({ className, ...props }, ref) => {
18997
18109
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18998
18110
  RadioGroupPrimitive.Item,
18999
18111
  {
@@ -19014,7 +18126,7 @@ var RadioGroupItem = React51.forwardRef(({ className, ...props }, ref) => {
19014
18126
  );
19015
18127
  });
19016
18128
  RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
19017
- var RadioGroupBlock = React51.forwardRef(
18129
+ var RadioGroupBlock = React50.forwardRef(
19018
18130
  ({ className, options, variant = "separated", error, itemClassName, disabled, ...props }, ref) => {
19019
18131
  const isGrouped = variant === "grouped";
19020
18132
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "relative flex w-full flex-col", className), children: [
@@ -19128,7 +18240,7 @@ function TagsInput({
19128
18240
  badgeClassName,
19129
18241
  label
19130
18242
  }) {
19131
- const [inputValue, setInputValue] = React52.useState("");
18243
+ const [inputValue, setInputValue] = React51.useState("");
19132
18244
  const handleAddTag = () => {
19133
18245
  const trimmedValue = inputValue.trim();
19134
18246
  if (!trimmedValue) return;
@@ -19234,19 +18346,19 @@ function TagsManager({
19234
18346
  disabled = false,
19235
18347
  className
19236
18348
  }) {
19237
- const [open, setOpen] = React53.useState(false);
19238
- const [search, setSearch] = React53.useState("");
19239
- const [editingId, setEditingId] = React53.useState(null);
19240
- const [editingName, setEditingName] = React53.useState("");
19241
- const editInputRef = React53.useRef(null);
19242
- const inputRef = React53.useRef(null);
19243
- 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);
19244
18356
  const selectedTags = tags.filter((t) => selectedIds.includes(t.id));
19245
18357
  const filtered = tags.filter(
19246
18358
  (t) => t.name.toLowerCase().includes(search.toLowerCase())
19247
18359
  );
19248
18360
  const showCreateOption = onCreateTag && search.trim() && !tags.some((t) => t.name.toLowerCase() === search.trim().toLowerCase());
19249
- const toggleTag = React53.useCallback(
18361
+ const toggleTag = React52.useCallback(
19250
18362
  (id) => {
19251
18363
  if (selectedIds.includes(id)) {
19252
18364
  onChange(selectedIds.filter((i) => i !== id));
@@ -19256,32 +18368,32 @@ function TagsManager({
19256
18368
  },
19257
18369
  [selectedIds, onChange]
19258
18370
  );
19259
- const handleCreate = React53.useCallback(async () => {
18371
+ const handleCreate = React52.useCallback(async () => {
19260
18372
  if (!onCreateTag) return;
19261
18373
  const name = search.trim();
19262
18374
  if (!name) return;
19263
18375
  const result = await onCreateTag(name);
19264
- if (_optionalChain([result, 'optionalAccess', _522 => _522.id])) {
18376
+ if (_optionalChain([result, 'optionalAccess', _453 => _453.id])) {
19265
18377
  onChange([...selectedIds, result.id]);
19266
18378
  setSearch("");
19267
18379
  }
19268
18380
  }, [search, onCreateTag, selectedIds, onChange]);
19269
- const startEdit = React53.useCallback((id, name) => {
18381
+ const startEdit = React52.useCallback((id, name) => {
19270
18382
  setEditingId(id);
19271
18383
  setEditingName(name);
19272
- 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);
19273
18385
  }, []);
19274
- const confirmEdit = React53.useCallback(async () => {
18386
+ const confirmEdit = React52.useCallback(async () => {
19275
18387
  if (!onUpdateTag || !editingId || !editingName.trim()) return;
19276
18388
  await onUpdateTag(editingId, editingName.trim());
19277
18389
  setEditingId(null);
19278
18390
  setEditingName("");
19279
18391
  }, [editingId, editingName, onUpdateTag]);
19280
- const cancelEdit = React53.useCallback(() => {
18392
+ const cancelEdit = React52.useCallback(() => {
19281
18393
  setEditingId(null);
19282
18394
  setEditingName("");
19283
18395
  }, []);
19284
- const handleDelete = React53.useCallback(
18396
+ const handleDelete = React52.useCallback(
19285
18397
  async (id) => {
19286
18398
  if (!onDeleteTag) return;
19287
18399
  await onDeleteTag(id);
@@ -19291,12 +18403,12 @@ function TagsManager({
19291
18403
  },
19292
18404
  [onDeleteTag, selectedIds, onChange]
19293
18405
  );
19294
- const handleClearAll = React53.useCallback(
18406
+ const handleClearAll = React52.useCallback(
19295
18407
  (e) => {
19296
18408
  e.stopPropagation();
19297
18409
  onChange([]);
19298
18410
  setSearch("");
19299
- _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()]);
19300
18412
  },
19301
18413
  [onChange]
19302
18414
  );
@@ -19395,10 +18507,10 @@ function TagsManager({
19395
18507
  align: "start",
19396
18508
  onOpenAutoFocus: (e) => {
19397
18509
  e.preventDefault();
19398
- _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()]);
19399
18511
  },
19400
18512
  onInteractOutside: (e) => {
19401
- 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)])) {
19402
18514
  e.preventDefault();
19403
18515
  }
19404
18516
  },
@@ -19592,7 +18704,7 @@ var _reactalertdialog = require('@radix-ui/react-alert-dialog'); var AlertDialog
19592
18704
  var AlertDialog = AlertDialogPrimitive.Root;
19593
18705
  var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
19594
18706
  var AlertDialogPortal = AlertDialogPrimitive.Portal;
19595
- 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,
19596
18708
  AlertDialogPrimitive.Overlay,
19597
18709
  {
19598
18710
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
@@ -19604,7 +18716,7 @@ var AlertDialogOverlay = React54.forwardRef(({ className, ...props }, ref) => /*
19604
18716
  }
19605
18717
  ));
19606
18718
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
19607
- 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: [
19608
18720
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AlertDialogOverlay, {}),
19609
18721
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19610
18722
  AlertDialogPrimitive.Content,
@@ -19647,7 +18759,7 @@ var AlertDialogFooter = ({
19647
18759
  }
19648
18760
  );
19649
18761
  AlertDialogFooter.displayName = "AlertDialogFooter";
19650
- 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,
19651
18763
  AlertDialogPrimitive.Title,
19652
18764
  {
19653
18765
  ref,
@@ -19656,7 +18768,7 @@ var AlertDialogTitle = React54.forwardRef(({ className, ...props }, ref) => /* @
19656
18768
  }
19657
18769
  ));
19658
18770
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
19659
- 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,
19660
18772
  AlertDialogPrimitive.Description,
19661
18773
  {
19662
18774
  ref,
@@ -19665,7 +18777,7 @@ var AlertDialogDescription = React54.forwardRef(({ className, ...props }, ref) =
19665
18777
  }
19666
18778
  ));
19667
18779
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
19668
- 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,
19669
18781
  AlertDialogPrimitive.Action,
19670
18782
  {
19671
18783
  ref,
@@ -19674,7 +18786,7 @@ var AlertDialogAction = React54.forwardRef(({ className, ...props }, ref) => /*
19674
18786
  }
19675
18787
  ));
19676
18788
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
19677
- 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,
19678
18790
  AlertDialogPrimitive.Cancel,
19679
18791
  {
19680
18792
  ref,
@@ -19702,7 +18814,7 @@ var Dialog = DialogPrimitive3.Root;
19702
18814
  var DialogTrigger = DialogPrimitive3.Trigger;
19703
18815
  var DialogPortal = DialogPrimitive3.Portal;
19704
18816
  var DialogClose = DialogPrimitive3.Close;
19705
- 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,
19706
18818
  DialogPrimitive3.Overlay,
19707
18819
  {
19708
18820
  ref,
@@ -19714,7 +18826,7 @@ var DialogOverlay = React55.forwardRef(({ className, ...props }, ref) => /* @__P
19714
18826
  }
19715
18827
  ));
19716
18828
  DialogOverlay.displayName = DialogPrimitive3.Overlay.displayName;
19717
- 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: [
19718
18830
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DialogOverlay, {}),
19719
18831
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19720
18832
  DialogPrimitive3.Content,
@@ -19740,7 +18852,7 @@ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ _jsxruntime.jsx.
19740
18852
  DialogHeader.displayName = "DialogHeader";
19741
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 });
19742
18854
  DialogFooter.displayName = "DialogFooter";
19743
- 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,
19744
18856
  DialogPrimitive3.Title,
19745
18857
  {
19746
18858
  ref,
@@ -19749,7 +18861,7 @@ var DialogTitle = React55.forwardRef(({ className, ...props }, ref) => /* @__PUR
19749
18861
  }
19750
18862
  ));
19751
18863
  DialogTitle.displayName = DialogPrimitive3.Title.displayName;
19752
- 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 }));
19753
18865
  DialogDescription.displayName = DialogPrimitive3.Description.displayName;
19754
18866
 
19755
18867
  // src/components/ui/modal.tsx
@@ -19757,7 +18869,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19757
18869
 
19758
18870
 
19759
18871
 
19760
- var Modal = React56.forwardRef(
18872
+ var Modal = React55.forwardRef(
19761
18873
  ({ isOpen, onClose, children, className }, ref) => {
19762
18874
  _react.useEffect.call(void 0, () => {
19763
18875
  const handleKeyDown = (event) => {
@@ -19801,11 +18913,11 @@ var Modal = React56.forwardRef(
19801
18913
  }
19802
18914
  );
19803
18915
  Modal.displayName = "Modal";
19804
- var ModalContent = React56.forwardRef(
18916
+ var ModalContent = React55.forwardRef(
19805
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 })
19806
18918
  );
19807
18919
  ModalContent.displayName = "ModalContent";
19808
- var ModalHeader = React56.forwardRef(
18920
+ var ModalHeader = React55.forwardRef(
19809
18921
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19810
18922
  "div",
19811
18923
  {
@@ -19816,7 +18928,7 @@ var ModalHeader = React56.forwardRef(
19816
18928
  )
19817
18929
  );
19818
18930
  ModalHeader.displayName = "ModalHeader";
19819
- var ModalTitle = React56.forwardRef(
18931
+ var ModalTitle = React55.forwardRef(
19820
18932
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19821
18933
  "h2",
19822
18934
  {
@@ -19827,7 +18939,7 @@ var ModalTitle = React56.forwardRef(
19827
18939
  )
19828
18940
  );
19829
18941
  ModalTitle.displayName = "ModalTitle";
19830
- var ModalFooter = React56.forwardRef(
18942
+ var ModalFooter = React55.forwardRef(
19831
18943
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19832
18944
  "div",
19833
18945
  {
@@ -19844,8 +18956,8 @@ ModalFooter.displayName = "ModalFooter";
19844
18956
 
19845
18957
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19846
18958
 
19847
- var ModalContext = React57.createContext({});
19848
- var Modal2 = React57.forwardRef(
18959
+ var ModalContext = React56.createContext({});
18960
+ var Modal2 = React56.forwardRef(
19849
18961
  ({ isOpen, onClose, children, className }, ref) => {
19850
18962
  _react.useEffect.call(void 0, () => {
19851
18963
  const handleKeyDown = (event) => {
@@ -19894,13 +19006,13 @@ var Modal2 = React57.forwardRef(
19894
19006
  }
19895
19007
  );
19896
19008
  Modal2.displayName = "ModalV2";
19897
- var ModalContent2 = React57.forwardRef(
19009
+ var ModalContent2 = React56.forwardRef(
19898
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 })
19899
19011
  );
19900
19012
  ModalContent2.displayName = "ModalV2Content";
19901
- var ModalHeader2 = React57.forwardRef(
19013
+ var ModalHeader2 = React56.forwardRef(
19902
19014
  ({ children, className }, ref) => {
19903
- const { onClose } = React57.useContext(ModalContext);
19015
+ const { onClose } = React56.useContext(ModalContext);
19904
19016
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
19905
19017
  "div",
19906
19018
  {
@@ -19923,7 +19035,7 @@ var ModalHeader2 = React57.forwardRef(
19923
19035
  }
19924
19036
  );
19925
19037
  ModalHeader2.displayName = "ModalV2Header";
19926
- var ModalTitle2 = React57.forwardRef(
19038
+ var ModalTitle2 = React56.forwardRef(
19927
19039
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19928
19040
  "h2",
19929
19041
  {
@@ -19934,7 +19046,7 @@ var ModalTitle2 = React57.forwardRef(
19934
19046
  )
19935
19047
  );
19936
19048
  ModalTitle2.displayName = "ModalV2Title";
19937
- var ModalFooter2 = React57.forwardRef(
19049
+ var ModalFooter2 = React56.forwardRef(
19938
19050
  ({ children, className }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
19939
19051
  "div",
19940
19052
  {
@@ -19951,7 +19063,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
19951
19063
 
19952
19064
  var _reactseparator = require('@radix-ui/react-separator'); var SeparatorPrimitive = _interopRequireWildcard(_reactseparator);
19953
19065
 
19954
- 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,
19955
19067
  SeparatorPrimitive.Root,
19956
19068
  {
19957
19069
  ref,
@@ -19974,7 +19086,7 @@ var Sheet = SheetPrimitive.Root;
19974
19086
  var SheetTrigger = SheetPrimitive.Trigger;
19975
19087
  var SheetClose = SheetPrimitive.Close;
19976
19088
  var SheetPortal = SheetPrimitive.Portal;
19977
- 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,
19978
19090
  SheetPrimitive.Overlay,
19979
19091
  {
19980
19092
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
@@ -20002,7 +19114,7 @@ var sheetVariants = _classvarianceauthority.cva.call(void 0,
20002
19114
  }
20003
19115
  }
20004
19116
  );
20005
- 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: [
20006
19118
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetOverlay, {}),
20007
19119
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
20008
19120
  SheetPrimitive.Content,
@@ -20049,7 +19161,7 @@ var SheetFooter = ({
20049
19161
  }
20050
19162
  );
20051
19163
  SheetFooter.displayName = "SheetFooter";
20052
- 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,
20053
19165
  SheetPrimitive.Title,
20054
19166
  {
20055
19167
  ref,
@@ -20058,7 +19170,7 @@ var SheetTitle = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE
20058
19170
  }
20059
19171
  ));
20060
19172
  SheetTitle.displayName = SheetPrimitive.Title.displayName;
20061
- 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,
20062
19174
  SheetPrimitive.Description,
20063
19175
  {
20064
19176
  ref,
@@ -20074,7 +19186,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
20074
19186
  var _reacttabs = require('@radix-ui/react-tabs'); var TabsPrimitive = _interopRequireWildcard(_reacttabs);
20075
19187
 
20076
19188
  var Tabs = TabsPrimitive.Root;
20077
- 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,
20078
19190
  TabsPrimitive.List,
20079
19191
  {
20080
19192
  ref,
@@ -20086,7 +19198,7 @@ var TabsList = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__
20086
19198
  }
20087
19199
  ));
20088
19200
  TabsList.displayName = TabsPrimitive.List.displayName;
20089
- 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,
20090
19202
  TabsPrimitive.Trigger,
20091
19203
  {
20092
19204
  ref,
@@ -20098,7 +19210,7 @@ var TabsTrigger = React60.forwardRef(({ className, ...props }, ref) => /* @__PUR
20098
19210
  }
20099
19211
  ));
20100
19212
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
20101
- 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,
20102
19214
  TabsPrimitive.Content,
20103
19215
  {
20104
19216
  ref,
@@ -20118,9 +19230,9 @@ var _reactaccordion = require('@radix-ui/react-accordion'); var AccordionPrimiti
20118
19230
 
20119
19231
 
20120
19232
  var Accordion = AccordionPrimitive.Root;
20121
- 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 }));
20122
19234
  AccordionItem.displayName = "AccordionItem";
20123
- 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,
20124
19236
  AccordionPrimitive.Trigger,
20125
19237
  {
20126
19238
  ref,
@@ -20136,7 +19248,7 @@ var AccordionTrigger = React61.forwardRef(({ className, children, ...props }, re
20136
19248
  }
20137
19249
  ) }));
20138
19250
  AccordionTrigger.displayName = "AccordionTrigger";
20139
- 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,
20140
19252
  AccordionPrimitive.Content,
20141
19253
  {
20142
19254
  ref,
@@ -20156,9 +19268,9 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
20156
19268
  var _reactslot = require('@radix-ui/react-slot');
20157
19269
 
20158
19270
 
20159
- 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 }));
20160
19272
  Breadcrumb.displayName = "Breadcrumb";
20161
- 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,
20162
19274
  "ol",
20163
19275
  {
20164
19276
  ref,
@@ -20170,7 +19282,7 @@ var BreadcrumbList = React62.forwardRef(({ className, ...props }, ref) => /* @__
20170
19282
  }
20171
19283
  ));
20172
19284
  BreadcrumbList.displayName = "BreadcrumbList";
20173
- 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,
20174
19286
  "li",
20175
19287
  {
20176
19288
  ref,
@@ -20179,7 +19291,7 @@ var BreadcrumbItem = React62.forwardRef(({ className, ...props }, ref) => /* @__
20179
19291
  }
20180
19292
  ));
20181
19293
  BreadcrumbItem.displayName = "BreadcrumbItem";
20182
- var BreadcrumbLink = React62.forwardRef(({ asChild, className, ...props }, ref) => {
19294
+ var BreadcrumbLink = React61.forwardRef(({ asChild, className, ...props }, ref) => {
20183
19295
  const Comp = asChild ? _reactslot.Slot : "a";
20184
19296
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20185
19297
  Comp,
@@ -20191,7 +19303,7 @@ var BreadcrumbLink = React62.forwardRef(({ asChild, className, ...props }, ref)
20191
19303
  );
20192
19304
  });
20193
19305
  BreadcrumbLink.displayName = "BreadcrumbLink";
20194
- 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,
20195
19307
  "span",
20196
19308
  {
20197
19309
  ref,
@@ -20247,7 +19359,7 @@ var MenubarGroup = MenubarPrimitive.Group;
20247
19359
  var MenubarPortal = MenubarPrimitive.Portal;
20248
19360
  var MenubarSub = MenubarPrimitive.Sub;
20249
19361
  var MenubarRadioGroup = MenubarPrimitive.RadioGroup;
20250
- 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,
20251
19363
  MenubarPrimitive.Root,
20252
19364
  {
20253
19365
  ref,
@@ -20259,7 +19371,7 @@ var Menubar = React63.forwardRef(({ className, ...props }, ref) => /* @__PURE__
20259
19371
  }
20260
19372
  ));
20261
19373
  Menubar.displayName = MenubarPrimitive.Root.displayName;
20262
- 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,
20263
19375
  MenubarPrimitive.Trigger,
20264
19376
  {
20265
19377
  ref,
@@ -20271,7 +19383,7 @@ var MenubarTrigger = React63.forwardRef(({ className, ...props }, ref) => /* @__
20271
19383
  }
20272
19384
  ));
20273
19385
  MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
20274
- 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,
20275
19387
  MenubarPrimitive.SubTrigger,
20276
19388
  {
20277
19389
  ref,
@@ -20288,7 +19400,7 @@ var MenubarSubTrigger = React63.forwardRef(({ className, inset, children, ...pro
20288
19400
  }
20289
19401
  ));
20290
19402
  MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
20291
- 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,
20292
19404
  MenubarPrimitive.SubContent,
20293
19405
  {
20294
19406
  ref,
@@ -20300,7 +19412,7 @@ var MenubarSubContent = React63.forwardRef(({ className, ...props }, ref) => /*
20300
19412
  }
20301
19413
  ));
20302
19414
  MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
20303
- var MenubarContent = React63.forwardRef(
19415
+ var MenubarContent = React62.forwardRef(
20304
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,
20305
19417
  MenubarPrimitive.Content,
20306
19418
  {
@@ -20317,7 +19429,7 @@ var MenubarContent = React63.forwardRef(
20317
19429
  ) })
20318
19430
  );
20319
19431
  MenubarContent.displayName = MenubarPrimitive.Content.displayName;
20320
- 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,
20321
19433
  MenubarPrimitive.Item,
20322
19434
  {
20323
19435
  ref,
@@ -20330,7 +19442,7 @@ var MenubarItem = React63.forwardRef(({ className, inset, ...props }, ref) => /*
20330
19442
  }
20331
19443
  ));
20332
19444
  MenubarItem.displayName = MenubarPrimitive.Item.displayName;
20333
- 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,
20334
19446
  MenubarPrimitive.CheckboxItem,
20335
19447
  {
20336
19448
  ref,
@@ -20347,7 +19459,7 @@ var MenubarCheckboxItem = React63.forwardRef(({ className, children, checked, ..
20347
19459
  }
20348
19460
  ));
20349
19461
  MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
20350
- 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,
20351
19463
  MenubarPrimitive.RadioItem,
20352
19464
  {
20353
19465
  ref,
@@ -20363,7 +19475,7 @@ var MenubarRadioItem = React63.forwardRef(({ className, children, ...props }, re
20363
19475
  }
20364
19476
  ));
20365
19477
  MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
20366
- 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,
20367
19479
  MenubarPrimitive.Label,
20368
19480
  {
20369
19481
  ref,
@@ -20376,7 +19488,7 @@ var MenubarLabel = React63.forwardRef(({ className, inset, ...props }, ref) => /
20376
19488
  }
20377
19489
  ));
20378
19490
  MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
20379
- 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,
20380
19492
  MenubarPrimitive.Separator,
20381
19493
  {
20382
19494
  ref,
@@ -20409,7 +19521,7 @@ var _reactnavigationmenu = require('@radix-ui/react-navigation-menu'); var Navig
20409
19521
 
20410
19522
 
20411
19523
 
20412
- 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,
20413
19525
  NavigationMenuPrimitive.Root,
20414
19526
  {
20415
19527
  ref,
@@ -20425,7 +19537,7 @@ var NavigationMenu = React64.forwardRef(({ className, children, ...props }, ref)
20425
19537
  }
20426
19538
  ));
20427
19539
  NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
20428
- 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,
20429
19541
  NavigationMenuPrimitive.List,
20430
19542
  {
20431
19543
  ref,
@@ -20441,7 +19553,7 @@ var NavigationMenuItem = NavigationMenuPrimitive.Item;
20441
19553
  var navigationMenuTriggerStyle = _classvarianceauthority.cva.call(void 0,
20442
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"
20443
19555
  );
20444
- 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,
20445
19557
  NavigationMenuPrimitive.Trigger,
20446
19558
  {
20447
19559
  ref,
@@ -20461,7 +19573,7 @@ var NavigationMenuTrigger = React64.forwardRef(({ className, children, ...props
20461
19573
  }
20462
19574
  ));
20463
19575
  NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
20464
- 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,
20465
19577
  NavigationMenuPrimitive.Content,
20466
19578
  {
20467
19579
  ref,
@@ -20474,7 +19586,7 @@ var NavigationMenuContent = React64.forwardRef(({ className, ...props }, ref) =>
20474
19586
  ));
20475
19587
  NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
20476
19588
  var NavigationMenuLink = NavigationMenuPrimitive.Link;
20477
- 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,
20478
19590
  NavigationMenuPrimitive.Viewport,
20479
19591
  {
20480
19592
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
@@ -20486,7 +19598,7 @@ var NavigationMenuViewport = React64.forwardRef(({ className, ...props }, ref) =
20486
19598
  }
20487
19599
  ) }));
20488
19600
  NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
20489
- 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,
20490
19602
  NavigationMenuPrimitive.Indicator,
20491
19603
  {
20492
19604
  ref,
@@ -20545,19 +19657,19 @@ function TabNavigation({
20545
19657
  const validTabIds = _react.useMemo.call(void 0, () => new Set(tabs.map((t) => t.id)), [tabs]);
20546
19658
  const getInitialTab = () => {
20547
19659
  if (isUrlSyncEnabled) {
20548
- 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)]) || "";
20549
19661
  if (validTabIds.has(fromUrl)) {
20550
19662
  return fromUrl;
20551
19663
  }
20552
19664
  }
20553
- 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]) || "";
20554
19666
  };
20555
19667
  const [internalActiveTab, setInternalActiveTab] = _react.useState.call(void 0, getInitialTab);
20556
19668
  const activeTab = isUrlSyncEnabled ? internalActiveTab : controlledActiveTab || "";
20557
19669
  _react.useEffect.call(void 0, () => {
20558
19670
  if (!isUrlSyncEnabled) return;
20559
- const fromUrl = _optionalChain([searchParams, 'optionalAccess', _539 => _539.get, 'call', _540 => _540(paramName)]) || "";
20560
- 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]) || "";
20561
19673
  if (nextTab !== internalActiveTab) {
20562
19674
  setInternalActiveTab(nextTab);
20563
19675
  }
@@ -20565,13 +19677,13 @@ function TabNavigation({
20565
19677
  const handleTabChange = (tabId) => {
20566
19678
  if (isUrlSyncEnabled) {
20567
19679
  setInternalActiveTab(tabId);
20568
- 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()]));
20569
19681
  params.set(paramName, tabId);
20570
19682
  const method = replaceState ? "replace" : "push";
20571
19683
  router[method](`${pathname}?${params.toString()}`);
20572
- _optionalChain([controlledOnTabChange, 'optionalCall', _545 => _545(tabId)]);
19684
+ _optionalChain([controlledOnTabChange, 'optionalCall', _476 => _476(tabId)]);
20573
19685
  } else {
20574
- _optionalChain([controlledOnTabChange, 'optionalCall', _546 => _546(tabId)]);
19686
+ _optionalChain([controlledOnTabChange, 'optionalCall', _477 => _477(tabId)]);
20575
19687
  }
20576
19688
  };
20577
19689
  const scrollRef = _react.useRef.call(void 0, null);
@@ -20659,7 +19771,7 @@ function TabNavigation({
20659
19771
  var getTabById = (tabs, tabId) => tabs.find((tab) => tab.id === tabId);
20660
19772
  var getTabComponent = (tabs, tabId) => {
20661
19773
  const tab = getTabById(tabs, tabId);
20662
- return _optionalChain([tab, 'optionalAccess', _547 => _547.component]) || null;
19774
+ return _optionalChain([tab, 'optionalAccess', _478 => _478.component]) || null;
20663
19775
  };
20664
19776
 
20665
19777
  // src/components/ui/alert.tsx
@@ -20681,7 +19793,7 @@ var alertVariants = _classvarianceauthority.cva.call(void 0,
20681
19793
  }
20682
19794
  }
20683
19795
  );
20684
- 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,
20685
19797
  "div",
20686
19798
  {
20687
19799
  ref,
@@ -20691,7 +19803,7 @@ var Alert = React66.forwardRef(({ className, variant, ...props }, ref) => /* @__
20691
19803
  }
20692
19804
  ));
20693
19805
  Alert.displayName = "Alert";
20694
- 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,
20695
19807
  "h5",
20696
19808
  {
20697
19809
  ref,
@@ -20700,7 +19812,7 @@ var AlertTitle = React66.forwardRef(({ className, ...props }, ref) => /* @__PURE
20700
19812
  }
20701
19813
  ));
20702
19814
  AlertTitle.displayName = "AlertTitle";
20703
- 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,
20704
19816
  "div",
20705
19817
  {
20706
19818
  ref,
@@ -20715,7 +19827,7 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
20715
19827
 
20716
19828
  var _reactprogress = require('@radix-ui/react-progress'); var ProgressPrimitive = _interopRequireWildcard(_reactprogress);
20717
19829
 
20718
- 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,
20719
19831
  ProgressPrimitive.Root,
20720
19832
  {
20721
19833
  ref,
@@ -20996,16 +20108,16 @@ function FilterModal({
20996
20108
  };
20997
20109
  const handleReset = () => {
20998
20110
  onFilterChange({});
20999
- _optionalChain([onTagsChange, 'optionalCall', _548 => _548([])]);
20111
+ _optionalChain([onTagsChange, 'optionalCall', _479 => _479([])]);
21000
20112
  onClose();
21001
20113
  };
21002
20114
  const handleApply = () => {
21003
20115
  onFilterChange(selectedFilters);
21004
- _optionalChain([onTagsChange, 'optionalCall', _549 => _549(pendingTags)]);
20116
+ _optionalChain([onTagsChange, 'optionalCall', _480 => _480(pendingTags)]);
21005
20117
  onClose();
21006
20118
  };
21007
20119
  const getColumnDirection = (columnKey) => {
21008
- 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;
21009
20121
  };
21010
20122
  const hasSort = !!sortConfig && sortConfig.columns.length > 0;
21011
20123
  const hasFilterGroups = filterGroups.length > 0;
@@ -21054,7 +20166,7 @@ function FilterModal({
21054
20166
  {
21055
20167
  column,
21056
20168
  currentDirection: getColumnDirection(column.key),
21057
- onSort: (direction) => _optionalChain([onSort, 'optionalCall', _551 => _551(column.key, direction)]),
20169
+ onSort: (direction) => _optionalChain([onSort, 'optionalCall', _482 => _482(column.key, direction)]),
21058
20170
  onClear: onSortClear ? () => onSortClear(column.key) : void 0
21059
20171
  },
21060
20172
  column.key
@@ -21121,7 +20233,7 @@ function ListPageLayout({
21121
20233
  }) {
21122
20234
  const [mobileFilterOpen, setMobileFilterOpen] = _react.useState.call(void 0, false);
21123
20235
  const [localSearchValue, setLocalSearchValue] = _react.useState.call(void 0, searchValue);
21124
- const debouncedSearchValue = _chunkWX7PT5C7cjs.useDebounce.call(void 0, localSearchValue, 500);
20236
+ const debouncedSearchValue = _chunkALW3D72Ocjs.useDebounce.call(void 0, localSearchValue, 500);
21125
20237
  _react.useEffect.call(void 0, () => {
21126
20238
  setLocalSearchValue(searchValue);
21127
20239
  }, [searchValue]);
@@ -21220,9 +20332,9 @@ function TitleBlock({
21220
20332
  const [imageFailed, setImageFailed] = React33.default.useState(false);
21221
20333
  React33.default.useEffect(() => {
21222
20334
  setImageFailed(false);
21223
- }, [_optionalChain([image, 'optionalAccess', _552 => _552.src])]);
20335
+ }, [_optionalChain([image, 'optionalAccess', _483 => _483.src])]);
21224
20336
  const showImageFallback = !!image && (imageFailed || !image.src);
21225
- const initials = getInitials3(_optionalChain([image, 'optionalAccess', _553 => _553.alt]) || title);
20337
+ const initials = getInitials3(_optionalChain([image, 'optionalAccess', _484 => _484.alt]) || title);
21226
20338
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
21227
20339
  "div",
21228
20340
  {
@@ -21356,7 +20468,7 @@ var toggleVariants = _classvarianceauthority.cva.call(void 0,
21356
20468
  }
21357
20469
  }
21358
20470
  );
21359
- 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,
21360
20472
  TogglePrimitive.Root,
21361
20473
  {
21362
20474
  ref,
@@ -21368,11 +20480,11 @@ Toggle.displayName = TogglePrimitive.Root.displayName;
21368
20480
 
21369
20481
  // src/components/toggle-group.tsx
21370
20482
 
21371
- var ToggleGroupContext = React71.createContext({
20483
+ var ToggleGroupContext = React70.createContext({
21372
20484
  size: "default",
21373
20485
  variant: "default"
21374
20486
  });
21375
- 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,
21376
20488
  ToggleGroupPrimitive.Root,
21377
20489
  {
21378
20490
  ref,
@@ -21382,8 +20494,8 @@ var ToggleGroup = React71.forwardRef(({ className, variant, size, children, ...p
21382
20494
  }
21383
20495
  ));
21384
20496
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
21385
- var ToggleGroupItem = React71.forwardRef(({ className, children, variant, size, value, ...props }, ref) => {
21386
- const context = React71.useContext(ToggleGroupContext);
20497
+ var ToggleGroupItem = React70.forwardRef(({ className, children, variant, size, value, ...props }, ref) => {
20498
+ const context = React70.useContext(ToggleGroupContext);
21387
20499
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
21388
20500
  ToggleGroupPrimitive.Item,
21389
20501
  {
@@ -21742,8 +20854,8 @@ function FloatingTooltip({
21742
20854
  className,
21743
20855
  delayDuration = 0
21744
20856
  }) {
21745
- const [isOpen, setIsOpen] = React74.useState(false);
21746
- const arrowRef = React74.useRef(null);
20857
+ const [isOpen, setIsOpen] = React73.useState(false);
20858
+ const arrowRef = React73.useRef(null);
21747
20859
  const { refs, floatingStyles, context, placement, middlewareData } = _react2.useFloating.call(void 0, {
21748
20860
  open: isOpen,
21749
20861
  onOpenChange: setIsOpen,
@@ -21772,7 +20884,7 @@ function FloatingTooltip({
21772
20884
  dismiss,
21773
20885
  role
21774
20886
  ]);
21775
- const parsedContent = React74.useMemo(() => {
20887
+ const parsedContent = React73.useMemo(() => {
21776
20888
  if (typeof content === "string") {
21777
20889
  return parseColoredText(content);
21778
20890
  }
@@ -22018,26 +21130,26 @@ function DeviceCard({
22018
21130
  ] }),
22019
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 })
22020
21132
  ] }),
22021
- _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,
22022
21134
  "div",
22023
21135
  {
22024
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",
22025
21137
  onClick: (e) => {
22026
21138
  e.stopPropagation();
22027
- _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()]);
22028
21140
  },
22029
21141
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.Ellipsis01Icon, { className: "text-ods-text-primary" })
22030
21142
  }
22031
21143
  ),
22032
- _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 }),
22033
- _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(
22034
21146
  (action, index) => action.visible !== false && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
22035
21147
  "div",
22036
21148
  {
22037
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",
22038
21150
  onClick: (e) => {
22039
21151
  e.stopPropagation();
22040
- _optionalChain([action, 'access', _566 => _566.onClick, 'optionalCall', _567 => _567()]);
21152
+ _optionalChain([action, 'access', _497 => _497.onClick, 'optionalCall', _498 => _498()]);
22041
21153
  },
22042
21154
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-h3 text-ods-text-primary text-nowrap tracking-[-0.36px]", children: action.label })
22043
21155
  },
@@ -22317,7 +21429,7 @@ function HighlightCardGrid({
22317
21429
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
22318
21430
 
22319
21431
 
22320
- var IconsBlock = React75.forwardRef(
21432
+ var IconsBlock = React74.forwardRef(
22321
21433
  ({ className, icons = [], size = "md", ...props }, ref) => {
22322
21434
  const sizeClasses5 = {
22323
21435
  sm: "h-4 w-4",
@@ -22396,7 +21508,7 @@ function MoreActionsMenu({
22396
21508
  ] });
22397
21509
  const handleActivate = (e) => {
22398
21510
  e.stopPropagation();
22399
- 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()]);
22400
21512
  };
22401
21513
  if (item.href) {
22402
21514
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -22546,7 +21658,7 @@ function OrganizationIcon({
22546
21658
  backgroundStyle = "dark"
22547
21659
  }) {
22548
21660
  const { width, height } = imageSizeMap2[size];
22549
- 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)]) || "??";
22550
21662
  const containerClasses = _chunkOFAYLG6Dcjs.cn.call(void 0,
22551
21663
  sizeClasses3[size],
22552
21664
  "rounded-lg flex items-center justify-center flex-shrink-0 relative",
@@ -22597,7 +21709,7 @@ function OrganizationCard({
22597
21709
  const handleActionClick = (e) => {
22598
21710
  e.preventDefault();
22599
21711
  e.stopPropagation();
22600
- _optionalChain([actionButton, 'optionalAccess', _572 => _572.onClick, 'call', _573 => _573(organization, e)]);
21712
+ _optionalChain([actionButton, 'optionalAccess', _503 => _503.onClick, 'call', _504 => _504(organization, e)]);
22601
21713
  };
22602
21714
  const card = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
22603
21715
  "div",
@@ -22692,7 +21804,7 @@ var LOG_SEVERITY_LABELS = {
22692
21804
 
22693
21805
  // src/components/log-severity-dot.tsx
22694
21806
 
22695
- var LogSeverityDot = React77.forwardRef(({ severity, size = "md", className }, ref) => {
21807
+ var LogSeverityDot = React76.forwardRef(({ severity, size = "md", className }, ref) => {
22696
21808
  const sizeClasses5 = {
22697
21809
  sm: "w-4 h-4",
22698
21810
  md: "w-6 h-6",
@@ -22754,7 +21866,7 @@ var LogCard = ({ log, isLast, showConnector, onClick }) => {
22754
21866
  onKeyDown: (e) => {
22755
21867
  if (e.key === "Enter" || e.key === " ") {
22756
21868
  e.preventDefault();
22757
- _optionalChain([onClick, 'optionalCall', _574 => _574()]);
21869
+ _optionalChain([onClick, 'optionalCall', _505 => _505()]);
22758
21870
  }
22759
21871
  },
22760
21872
  children: [
@@ -22763,7 +21875,7 @@ var LogCard = ({ log, isLast, showConnector, onClick }) => {
22763
21875
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-5 text-white", children: log.title }),
22764
21876
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
22765
21877
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "font-['Azeret_Mono'] font-normal text-[13px] leading-4 text-[#888888] uppercase tracking-wider", children: formatTimestamp(log.timestamp) }),
22766
- log.toolType && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWX7PT5C7cjs.ToolIcon, { toolType: log.toolType, size: 16 })
21878
+ log.toolType && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkALW3D72Ocjs.ToolIcon, { toolType: log.toolType, size: 16 })
22767
21879
  ] })
22768
21880
  ] })
22769
21881
  ]
@@ -22782,7 +21894,7 @@ var LogCard = ({ log, isLast, showConnector, onClick }) => {
22782
21894
  )
22783
21895
  ] });
22784
21896
  };
22785
- var LogsList = React78.forwardRef(({
21897
+ var LogsList = React77.forwardRef(({
22786
21898
  logs,
22787
21899
  maxHeight = "400px",
22788
21900
  showConnector = true,
@@ -22791,7 +21903,7 @@ var LogsList = React78.forwardRef(({
22791
21903
  emptyMessage = "No logs to display",
22792
21904
  className
22793
21905
  }, ref) => {
22794
- const containerRef = React78.useRef(null);
21906
+ const containerRef = React77.useRef(null);
22795
21907
  const isFullHeight = maxHeight === "100%";
22796
21908
  const getContainerStyles = () => {
22797
21909
  if (isFullHeight) return void 0;
@@ -22855,7 +21967,7 @@ var LogsList = React78.forwardRef(({
22855
21967
  log,
22856
21968
  isLast: index === logs.length - 1,
22857
21969
  showConnector,
22858
- onClick: () => _optionalChain([onLogClick, 'optionalCall', _575 => _575(log)])
21970
+ onClick: () => _optionalChain([onLogClick, 'optionalCall', _506 => _506(log)])
22859
21971
  },
22860
21972
  log.id
22861
21973
  ))
@@ -22968,7 +22080,7 @@ function ServiceCard({ title, subtitle, icon, tag, rows, className }) {
22968
22080
  }
22969
22081
  function ServiceCardRowItem({ row }) {
22970
22082
  const [revealed, setRevealed] = _react.useState.call(void 0, false);
22971
- const { copy, copied } = _chunkWX7PT5C7cjs.useCopyToClipboard.call(void 0, );
22083
+ const { copy, copied } = _chunkALW3D72Ocjs.useCopyToClipboard.call(void 0, );
22972
22084
  const actions = _react.useMemo.call(void 0, () => ({ copy: true, open: !!row.href, reveal: !!row.isSecret, ...row.actions }), [row]);
22973
22085
  const displayValue = row.isSecret ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MaskedValue, { value: row.value, isRevealed: revealed }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: row.value });
22974
22086
  const handleCopy = () => copy(_nullishCoalesce(row.copyValue, () => ( row.value)));
@@ -23096,7 +22208,7 @@ var _reacttooltip = require('@radix-ui/react-tooltip'); var TooltipPrimitive = _
23096
22208
  var TooltipProvider = TooltipPrimitive.Provider;
23097
22209
  var Tooltip = TooltipPrimitive.Root;
23098
22210
  var TooltipTrigger = TooltipPrimitive.Trigger;
23099
- 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,
23100
22212
  TooltipPrimitive.Content,
23101
22213
  {
23102
22214
  ref,
@@ -23444,7 +22556,7 @@ function CursorPaginationSimple({
23444
22556
  {
23445
22557
  variant: "transparent",
23446
22558
  size: "icon",
23447
- onClick: () => _optionalChain([onPrevious, 'optionalCall', _576 => _576("")]),
22559
+ onClick: () => _optionalChain([onPrevious, 'optionalCall', _507 => _507("")]),
23448
22560
  disabled: !hasPreviousPage || loading,
23449
22561
  className: "h-8 w-8",
23450
22562
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft, { className: "h-4 w-4" }),
@@ -23456,7 +22568,7 @@ function CursorPaginationSimple({
23456
22568
  {
23457
22569
  variant: "transparent",
23458
22570
  size: "icon",
23459
- onClick: () => _optionalChain([onNext, 'optionalCall', _577 => _577("")]),
22571
+ onClick: () => _optionalChain([onNext, 'optionalCall', _508 => _508("")]),
23460
22572
  disabled: !hasNextPage || loading,
23461
22573
  className: "h-8 w-8",
23462
22574
  rightIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, { className: "h-4 w-4" }),
@@ -23516,7 +22628,7 @@ function TableColumnFilterDropdown({
23516
22628
  placement = "bottom-start",
23517
22629
  dropdownClassName = "min-w-[240px]"
23518
22630
  }) {
23519
- 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;
23520
22632
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23521
22633
  FiltersDropdown,
23522
22634
  {
@@ -23559,7 +22671,7 @@ function TableColumnFilterDropdown({
23559
22671
  delete newFilters[columnKey];
23560
22672
  onFilterChange(newFilters);
23561
22673
  },
23562
- currentFilters: { [columnKey]: _optionalChain([filters, 'optionalAccess', _580 => _580[columnKey]]) || [] },
22674
+ currentFilters: { [columnKey]: _optionalChain([filters, 'optionalAccess', _511 => _511[columnKey]]) || [] },
23563
22675
  placement,
23564
22676
  dropdownClassName
23565
22677
  }
@@ -23634,7 +22746,7 @@ function TableHeader({
23634
22746
  }
23635
22747
  return sortDirection === "asc" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.Arrow01UpIcon, { className: "w-4 h-4 text-ods-accent" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTMD5LDX4cjs.Arrow01DownIcon, { className: "w-4 h-4 text-ods-accent" });
23636
22748
  };
23637
- const isLgUp = _nullishCoalesce(_chunkWX7PT5C7cjs.useLgUp.call(void 0, ), () => ( false));
22749
+ const isLgUp = _nullishCoalesce(_chunkALW3D72Ocjs.useLgUp.call(void 0, ), () => ( false));
23638
22750
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
23639
22751
  "div",
23640
22752
  {
@@ -23856,7 +22968,7 @@ function TableRow({
23856
22968
  const keys = column.key.split(".");
23857
22969
  let value = item;
23858
22970
  for (const key of keys) {
23859
- value = _optionalChain([value, 'optionalAccess', _581 => _581[key]]);
22971
+ value = _optionalChain([value, 'optionalAccess', _512 => _512[key]]);
23860
22972
  }
23861
22973
  if (value === null || value === void 0) {
23862
22974
  return "-";
@@ -23926,7 +23038,7 @@ function TableRow({
23926
23038
  // src/components/ui/table/table.tsx
23927
23039
 
23928
23040
  function injectSyntheticColumns(columns, rowActions, renderRowActions, rowHref) {
23929
- const hasActions = Boolean(_optionalChain([rowActions, 'optionalAccess', _582 => _582.length])) || Boolean(renderRowActions);
23041
+ const hasActions = Boolean(_optionalChain([rowActions, 'optionalAccess', _513 => _513.length])) || Boolean(renderRowActions);
23930
23042
  const result = [...columns];
23931
23043
  if (hasActions) {
23932
23044
  const actionsColumn = {
@@ -24020,7 +23132,7 @@ function Table({
24020
23132
  return rowKey(item);
24021
23133
  }
24022
23134
  const key = item[rowKey];
24023
- 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();
24024
23136
  };
24025
23137
  const getRowClassName = (item, index) => {
24026
23138
  if (typeof rowClassName === "function") {
@@ -24054,23 +23166,23 @@ function Table({
24054
23166
  const allSelected = selectedRows.length > 0 && selectedRows.length === data.length;
24055
23167
  const someSelected = selectedRows.length > 0 && selectedRows.length < data.length;
24056
23168
  const sentinelRef = _react.useRef.call(void 0, null);
24057
- const onLoadMoreRef = _react.useRef.call(void 0, _optionalChain([infiniteScroll, 'optionalAccess', _585 => _585.onLoadMore]));
24058
- 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]);
24059
23171
  _react.useEffect.call(void 0, () => {
24060
- if (!_optionalChain([infiniteScroll, 'optionalAccess', _587 => _587.hasNextPage]) || infiniteScroll.isFetchingNextPage) return;
23172
+ if (!_optionalChain([infiniteScroll, 'optionalAccess', _518 => _518.hasNextPage]) || infiniteScroll.isFetchingNextPage) return;
24061
23173
  const sentinel = sentinelRef.current;
24062
23174
  if (!sentinel) return;
24063
23175
  const observer = new IntersectionObserver(
24064
23176
  (entries) => {
24065
- if (_optionalChain([entries, 'access', _588 => _588[0], 'optionalAccess', _589 => _589.isIntersecting])) {
24066
- _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()]);
24067
23179
  }
24068
23180
  },
24069
23181
  { rootMargin: "200px" }
24070
23182
  );
24071
23183
  observer.observe(sentinel);
24072
23184
  return () => observer.disconnect();
24073
- }, [_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])]);
24074
23186
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex flex-col gap-1 w-full", containerClassName), children: [
24075
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: [
24076
23188
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-ods-text-secondary text-sm", children: [
@@ -24141,7 +23253,7 @@ function Table({
24141
23253
  },
24142
23254
  getRowKey(item, index)
24143
23255
  )),
24144
- _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,
24145
23257
  TableCardSkeleton,
24146
23258
  {
24147
23259
  columns,
@@ -24150,7 +23262,7 @@ function Table({
24150
23262
  hasChevron: Boolean(rowHref)
24151
23263
  }
24152
23264
  ),
24153
- _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" }),
24154
23266
  !infiniteScroll && Array.from({ length: Math.max(0, skeletonRows - data.length) }).map((_, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
24155
23267
  "div",
24156
23268
  {
@@ -24508,7 +23620,7 @@ function QueryReportTable({
24508
23620
  );
24509
23621
  const handleExport = () => {
24510
23622
  exportToCSV(data, columns, exportFilename);
24511
- _optionalChain([onExport, 'optionalCall', _596 => _596()]);
23623
+ _optionalChain([onExport, 'optionalCall', _527 => _527()]);
24512
23624
  };
24513
23625
  const tableMinWidth = columns.length * (columnWidth + 16);
24514
23626
  const {
@@ -24524,7 +23636,7 @@ function QueryReportTable({
24524
23636
  onThumbPointerDown,
24525
23637
  onThumbPointerMove,
24526
23638
  onThumbPointerUp
24527
- } = _chunkWX7PT5C7cjs.useHorizontalScrollbar.call(void 0, );
23639
+ } = _chunkALW3D72Ocjs.useHorizontalScrollbar.call(void 0, );
24528
23640
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkOFAYLG6Dcjs.cn.call(void 0, "flex flex-col w-full", isCompact ? "gap-0" : "gap-6", className), children: [
24529
23641
  !isCompact && (title || headerActions || showExport && data.length > 0) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-end justify-between pt-6", children: [
24530
23642
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "font-mono font-semibold text-[32px] leading-[40px] text-ods-text-primary", children: title }),
@@ -24681,7 +23793,7 @@ function DataTableColumnFilter({
24681
23793
  align = "left"
24682
23794
  }) {
24683
23795
  const currentValue = column.getFilterValue();
24684
- const activeCount = _nullishCoalesce(_optionalChain([currentValue, 'optionalAccess', _597 => _597.length]), () => ( 0));
23796
+ const activeCount = _nullishCoalesce(_optionalChain([currentValue, 'optionalAccess', _528 => _528.length]), () => ( 0));
24685
23797
  const sections = _react.useMemo.call(void 0,
24686
23798
  () => [
24687
23799
  {
@@ -24755,13 +23867,13 @@ function DataTableHeader({
24755
23867
  onSortChange
24756
23868
  }) {
24757
23869
  const table = useDataTableContext();
24758
- const isLgUp = _nullishCoalesce(_chunkWX7PT5C7cjs.useLgUp.call(void 0, ), () => ( false));
23870
+ const isLgUp = _nullishCoalesce(_chunkALW3D72Ocjs.useLgUp.call(void 0, ), () => ( false));
24759
23871
  const headerGroup = table.getHeaderGroups()[0];
24760
23872
  if (!headerGroup) return null;
24761
23873
  const hasVisibleHeaderCell = headerGroup.headers.some((header) => {
24762
23874
  if (header.isPlaceholder) return false;
24763
23875
  if (isLgUp) return true;
24764
- 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]));
24765
23877
  });
24766
23878
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24767
23879
  "div",
@@ -24791,20 +23903,20 @@ function HeaderCell({ header, isLgUp, sort, onSortChange }) {
24791
23903
  if (header.isPlaceholder) return null;
24792
23904
  const column = header.column;
24793
23905
  const meta = column.columnDef.meta;
24794
- const hasFilter = Boolean(_optionalChain([meta, 'optionalAccess', _602 => _602.filter]));
24795
- const align = _nullishCoalesce(_optionalChain([meta, 'optionalAccess', _603 => _603.align]), () => ( "left"));
24796
- const canSort = _optionalChain([meta, 'optionalAccess', _604 => _604.sortable]) === true;
24797
- 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;
24798
23910
  if (!isLgUp && !hasFilter) return null;
24799
23911
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24800
23912
  "div",
24801
23913
  {
24802
23914
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
24803
23915
  "flex items-stretch",
24804
- isLgUp && (_optionalChain([meta, 'optionalAccess', _606 => _606.width]) || "flex-1 min-w-0"),
24805
- _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]),
24806
23918
  // Don't apply hide classes if column is filterable on tablet (keep filter accessible)
24807
- !(hasFilter && !isLgUp) && getHideClasses2(_optionalChain([meta, 'optionalAccess', _608 => _608.hideAt]))
23919
+ !(hasFilter && !isLgUp) && getHideClasses2(_optionalChain([meta, 'optionalAccess', _539 => _539.hideAt]))
24808
23920
  ),
24809
23921
  children: hasFilter ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24810
23922
  DataTableColumnFilter,
@@ -24823,7 +23935,7 @@ function HeaderCell({ header, isLgUp, sort, onSortChange }) {
24823
23935
  isLgUp && alignJustify(align),
24824
23936
  canSort && "group cursor-pointer"
24825
23937
  ),
24826
- onClick: canSort ? () => _optionalChain([onSortChange, 'optionalCall', _609 => _609(column.id)]) : void 0,
23938
+ onClick: canSort ? () => _optionalChain([onSortChange, 'optionalCall', _540 => _540(column.id)]) : void 0,
24827
23939
  children: [
24828
23940
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderLabel, { header }),
24829
23941
  canSort && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortIcon, { sorted: sortDir })
@@ -24907,7 +24019,7 @@ function DataTableSkeleton({
24907
24019
  }) {
24908
24020
  const table = useDataTableContext();
24909
24021
  const columns = table.getVisibleFlatColumns();
24910
- 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]);
24911
24023
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
24912
24024
  "div",
24913
24025
  {
@@ -24931,7 +24043,7 @@ function DataTableSkeleton({
24931
24043
  {
24932
24044
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
24933
24045
  "flex flex-col justify-center shrink-0",
24934
- _optionalChain([meta, 'optionalAccess', _612 => _612.width]) || "flex-1"
24046
+ _optionalChain([meta, 'optionalAccess', _543 => _543.width]) || "flex-1"
24935
24047
  ),
24936
24048
  children: [
24937
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)]" }),
@@ -24977,7 +24089,7 @@ function DataTableRowImpl({
24977
24089
  (e) => {
24978
24090
  const target = e.target;
24979
24091
  if (target.closest("[data-no-row-click]")) return;
24980
- _optionalChain([onClick, 'optionalCall', _613 => _613(row.original)]);
24092
+ _optionalChain([onClick, 'optionalCall', _544 => _544(row.original)]);
24981
24093
  },
24982
24094
  [onClick, row.original]
24983
24095
  );
@@ -25015,10 +24127,10 @@ function DataTableRowImpl({
25015
24127
  {
25016
24128
  className: _chunkOFAYLG6Dcjs.cn.call(void 0,
25017
24129
  "flex flex-col overflow-hidden",
25018
- alignJustify(_optionalChain([meta, 'optionalAccess', _614 => _614.align])),
25019
- _optionalChain([meta, 'optionalAccess', _615 => _615.width]) || "flex-1 min-w-0",
25020
- _optionalChain([meta, 'optionalAccess', _616 => _616.cellClassName]),
25021
- 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]))
25022
24134
  ),
25023
24135
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CellContent, { children: _reacttable.flexRender.call(void 0, cell.column.columnDef.cell, cell.getContext()) })
25024
24136
  },
@@ -25064,7 +24176,7 @@ function DataTableBody({
25064
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: [
25065
24177
  rows.map((row, index) => {
25066
24178
  const item = row.original;
25067
- const href = _nullishCoalesce(_optionalChain([rowHref, 'optionalCall', _618 => _618(item)]), () => ( void 0));
24179
+ const href = _nullishCoalesce(_optionalChain([rowHref, 'optionalCall', _549 => _549(item)]), () => ( void 0));
25068
24180
  const cls = typeof rowClassName === "function" ? rowClassName(item, index) : rowClassName;
25069
24181
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
25070
24182
  DataTableRow,
@@ -25128,7 +24240,7 @@ function DataTableInfiniteFooter({
25128
24240
  if (!sentinel) return;
25129
24241
  const observer = new IntersectionObserver(
25130
24242
  (entries) => {
25131
- 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();
25132
24244
  },
25133
24245
  { rootMargin }
25134
24246
  );
@@ -25176,7 +24288,7 @@ function DataTableRowCount({
25176
24288
  const table = useDataTableContext();
25177
24289
  const count = _nullishCoalesce(totalCount, () => ( table.getRowModel().rows.length));
25178
24290
  if (hideWhenEmpty && count === 0) return null;
25179
- 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`)));
25180
24292
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25181
24293
  "span",
25182
24294
  {
@@ -25270,12 +24382,12 @@ function PhoneInput({
25270
24382
  const runValidation = _react.useCallback.call(void 0, (phone) => {
25271
24383
  if (!phone || digitCount(phone) === 0) {
25272
24384
  setIsInvalid(false);
25273
- _optionalChain([onValidationChange, 'optionalCall', _622 => _622(false)]);
24385
+ _optionalChain([onValidationChange, 'optionalCall', _553 => _553(false)]);
25274
24386
  return;
25275
24387
  }
25276
24388
  const invalid = !validatePhoneNumber(phone, countryCode);
25277
24389
  setIsInvalid(invalid);
25278
- _optionalChain([onValidationChange, 'optionalCall', _623 => _623(invalid)]);
24390
+ _optionalChain([onValidationChange, 'optionalCall', _554 => _554(invalid)]);
25279
24391
  }, [countryCode, digitCount, onValidationChange]);
25280
24392
  const debouncedValidation = _react.useCallback.call(void 0, (phone) => {
25281
24393
  if (debounceRef.current) clearTimeout(debounceRef.current);
@@ -25324,7 +24436,7 @@ function PhoneInput({
25324
24436
  debouncedValidation(val);
25325
24437
  } else if (digitCount(val) === 0) {
25326
24438
  setIsInvalid(false);
25327
- _optionalChain([onValidationChange, 'optionalCall', _624 => _624(false)]);
24439
+ _optionalChain([onValidationChange, 'optionalCall', _555 => _555(false)]);
25328
24440
  }
25329
24441
  }
25330
24442
  },
@@ -25402,12 +24514,12 @@ function SearchInput({
25402
24514
  limitTags = "auto",
25403
24515
  getLimitTagsText = (more) => `+${more}`
25404
24516
  }) {
25405
- const [internalValue, setInternalValue] = React82.useState(defaultValue);
24517
+ const [internalValue, setInternalValue] = React81.useState(defaultValue);
25406
24518
  const currentValue = onChange ? _nullishCoalesce(value, () => ( "")) : internalValue;
25407
- const debouncedValue = _chunkWX7PT5C7cjs.useDebounce.call(void 0, currentValue, debounceMs);
25408
- const [isOpen, setIsOpen] = React82.useState(false);
25409
- const [highlightedIndex, setHighlightedIndex] = React82.useState(-1);
25410
- const containerRef = React82.useRef(null);
24519
+ const debouncedValue = _chunkALW3D72Ocjs.useDebounce.call(void 0, currentValue, debounceMs);
24520
+ const [isOpen, setIsOpen] = React81.useState(false);
24521
+ const [highlightedIndex, setHighlightedIndex] = React81.useState(-1);
24522
+ const containerRef = React81.useRef(null);
25411
24523
  const currentPlaceholder = filterChips.length > 0 ? "Add filter..." : placeholder;
25412
24524
  const {
25413
24525
  visibleCount: rawVisibleCount,
@@ -25416,7 +24528,7 @@ function SearchInput({
25416
24528
  textMeasureRef,
25417
24529
  badgeRef,
25418
24530
  inputRef
25419
- } = _chunkWX7PT5C7cjs.useAutoLimitTags.call(void 0, {
24531
+ } = _chunkALW3D72Ocjs.useAutoLimitTags.call(void 0, {
25420
24532
  count: filterChips.length,
25421
24533
  limitTags,
25422
24534
  // When chips exist, pass empty placeholder so the hook only reserves input minWidth,
@@ -25424,14 +24536,14 @@ function SearchInput({
25424
24536
  placeholder: filterChips.length > 0 ? "" : placeholder
25425
24537
  });
25426
24538
  const visibleCount = filterChips.length > 0 ? Math.max(1, rawVisibleCount) : rawVisibleCount;
25427
- const hiddenTagsRef = React82.useRef(null);
25428
- const hiddenTagsPopupRef = React82.useRef(null);
25429
- const [showHiddenTags, setShowHiddenTags] = React82.useState(false);
25430
- React82.useEffect(() => {
24539
+ const hiddenTagsRef = React81.useRef(null);
24540
+ const hiddenTagsPopupRef = React81.useRef(null);
24541
+ const [showHiddenTags, setShowHiddenTags] = React81.useState(false);
24542
+ React81.useEffect(() => {
25431
24543
  if (!showHiddenTags) return;
25432
24544
  const handleClick = (e) => {
25433
24545
  const target = e.target;
25434
- 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)])) {
25435
24547
  setShowHiddenTags(false);
25436
24548
  }
25437
24549
  };
@@ -25441,7 +24553,7 @@ function SearchInput({
25441
24553
  const hiddenCount = filterChips.length - visibleCount;
25442
24554
  const visibleChips = filterChips.slice(0, visibleCount);
25443
24555
  const hiddenChips = filterChips.slice(visibleCount);
25444
- const { flatResults, groups } = React82.useMemo(() => {
24556
+ const { flatResults, groups } = React81.useMemo(() => {
25445
24557
  if (!groupBy) return { flatResults: results, groups: null };
25446
24558
  const grouped = /* @__PURE__ */ new Map();
25447
24559
  for (const r of results) {
@@ -25458,7 +24570,7 @@ function SearchInput({
25458
24570
  const meetsMinQuery = debouncedValue.length >= minQueryLength;
25459
24571
  const autoShow = meetsMinQuery;
25460
24572
  const dropdownVisible = _nullishCoalesce(showDropdownProp, () => ( (isOpen && autoShow)));
25461
- React82.useEffect(() => {
24573
+ React81.useEffect(() => {
25462
24574
  setHighlightedIndex(-1);
25463
24575
  }, [flatResults.length]);
25464
24576
  const handleChange = (e) => {
@@ -25479,10 +24591,10 @@ function SearchInput({
25479
24591
  } else {
25480
24592
  setInternalValue("");
25481
24593
  }
25482
- _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()]);
25483
24595
  };
25484
24596
  const handleResultClick = (result) => {
25485
- _optionalChain([onResultSelect, 'optionalCall', _634 => _634(result)]);
24597
+ _optionalChain([onResultSelect, 'optionalCall', _565 => _565(result)]);
25486
24598
  setIsOpen(false);
25487
24599
  };
25488
24600
  const handleKeyDown = (e) => {
@@ -25505,7 +24617,7 @@ function SearchInput({
25505
24617
  if (highlightedIndex >= 0 && flatResults[highlightedIndex]) {
25506
24618
  handleResultClick(flatResults[highlightedIndex]);
25507
24619
  } else {
25508
- _optionalChain([onSubmit, 'optionalCall', _635 => _635(currentValue)]);
24620
+ _optionalChain([onSubmit, 'optionalCall', _566 => _566(currentValue)]);
25509
24621
  }
25510
24622
  break;
25511
24623
  case "Escape":
@@ -25583,7 +24695,7 @@ function SearchInput({
25583
24695
  dropdownVisible && "!border-ods-accent"
25584
24696
  ),
25585
24697
  onClick: () => {
25586
- _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()]);
25587
24699
  setIsOpen(true);
25588
24700
  },
25589
24701
  children: [
@@ -25667,10 +24779,10 @@ function SearchInput({
25667
24779
  align: "start",
25668
24780
  onOpenAutoFocus: (e) => {
25669
24781
  e.preventDefault();
25670
- _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()]);
25671
24783
  },
25672
24784
  onInteractOutside: (e) => {
25673
- 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)])) {
25674
24786
  e.preventDefault();
25675
24787
  }
25676
24788
  },
@@ -25687,10 +24799,10 @@ function SearchInput({
25687
24799
  ref: hiddenTagsPopupRef,
25688
24800
  items: hiddenChips.map((chip) => ({ label: chip.label, value: chip.id })),
25689
24801
  style: {
25690
- 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
25691
24803
  },
25692
24804
  onRemove: (value2) => {
25693
- _optionalChain([onFilterRemove, 'optionalCall', _649 => _649(value2)]);
24805
+ _optionalChain([onFilterRemove, 'optionalCall', _580 => _580(value2)]);
25694
24806
  if (hiddenCount <= 1) setShowHiddenTags(false);
25695
24807
  }
25696
24808
  }
@@ -25741,7 +24853,7 @@ function FilterListItem({
25741
24853
  }) {
25742
24854
  const handleToggle = () => {
25743
24855
  if (disabled) return;
25744
- _optionalChain([onToggle, 'optionalCall', _650 => _650(!selected)]);
24856
+ _optionalChain([onToggle, 'optionalCall', _581 => _581(!selected)]);
25745
24857
  };
25746
24858
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25747
24859
  "div",
@@ -25777,7 +24889,7 @@ function FilterListItem({
25777
24889
  "flex items-start gap-[var(--spacing-system-xxs)] text-h6",
25778
24890
  selected ? "text-ods-accent" : "text-ods-text-secondary"
25779
24891
  ),
25780
- 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: [
25781
24893
  index > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": "true", children: "\u2022" }),
25782
24894
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: item })
25783
24895
  ] }, index))
@@ -25788,7 +24900,7 @@ function FilterListItem({
25788
24900
  CheckboxPrimitive4.Root,
25789
24901
  {
25790
24902
  checked: selected,
25791
- onCheckedChange: (c) => _optionalChain([onToggle, 'optionalCall', _651 => _651(c === true)]),
24903
+ onCheckedChange: (c) => _optionalChain([onToggle, 'optionalCall', _582 => _582(c === true)]),
25792
24904
  onClick: (e) => e.stopPropagation(),
25793
24905
  disabled,
25794
24906
  "aria-label": title,
@@ -25874,7 +24986,7 @@ function TagSearchInput({
25874
24986
  textMeasureRef,
25875
24987
  badgeRef,
25876
24988
  inputRef
25877
- } = _chunkWX7PT5C7cjs.useAutoLimitTags.call(void 0, {
24989
+ } = _chunkALW3D72Ocjs.useAutoLimitTags.call(void 0, {
25878
24990
  count: tags.length,
25879
24991
  limitTags,
25880
24992
  placeholder: currentPlaceholder
@@ -25887,7 +24999,7 @@ function TagSearchInput({
25887
24999
  if (!showHiddenTags) return;
25888
25000
  const handleClick = (e) => {
25889
25001
  const target = e.target;
25890
- 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)])) {
25891
25003
  setShowHiddenTags(false);
25892
25004
  }
25893
25005
  };
@@ -25903,13 +25015,13 @@ function TagSearchInput({
25903
25015
  e.preventDefault();
25904
25016
  onSubmit(searchValue);
25905
25017
  }
25906
- _optionalChain([onKeyDown, 'optionalCall', _658 => _658(e)]);
25018
+ _optionalChain([onKeyDown, 'optionalCall', _589 => _589(e)]);
25907
25019
  };
25908
25020
  const handleClearAll = (e) => {
25909
25021
  e.stopPropagation();
25910
25022
  e.preventDefault();
25911
- _optionalChain([onClearAll, 'optionalCall', _659 => _659()]);
25912
- _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()]);
25913
25025
  };
25914
25026
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref: wrapperRef, className: "relative", children: [
25915
25027
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -25926,7 +25038,7 @@ function TagSearchInput({
25926
25038
  className
25927
25039
  ),
25928
25040
  onClick: () => {
25929
- 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()]);
25930
25042
  },
25931
25043
  children: [
25932
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" }) }),
@@ -25998,7 +25110,7 @@ function TagSearchInput({
25998
25110
  items: hiddenTags,
25999
25111
  disabled,
26000
25112
  style: {
26001
- 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
26002
25114
  },
26003
25115
  onRemove: (value) => {
26004
25116
  onTagRemove(value);
@@ -26100,7 +25212,7 @@ function MarkdownEditor({
26100
25212
  const [defaultExtraCommands, setDefaultExtraCommands] = _react.useState.call(void 0, []);
26101
25213
  _react.useEffect.call(void 0, () => {
26102
25214
  Promise.resolve().then(() => _interopRequireWildcard(require("@uiw/react-md-editor"))).then((mod) => {
26103
- if (_optionalChain([mod, 'access', _670 => _670.commands, 'optionalAccess', _671 => _671.getExtraCommands])) {
25215
+ if (_optionalChain([mod, 'access', _601 => _601.commands, 'optionalAccess', _602 => _602.getExtraCommands])) {
26104
25216
  setDefaultExtraCommands(mod.commands.getExtraCommands());
26105
25217
  }
26106
25218
  });
@@ -26134,7 +25246,7 @@ function MarkdownEditor({
26134
25246
  const isImage = file.type.startsWith("image/");
26135
25247
  const markdown = isImage ? `![${file.name}](${url})` : `[${file.name}](${url})`;
26136
25248
  insertTextAtCursor(markdown);
26137
- _optionalChain([onFileUploaded, 'optionalCall', _672 => _672(url, file.name)]);
25249
+ _optionalChain([onFileUploaded, 'optionalCall', _603 => _603(url, file.name)]);
26138
25250
  } catch (error) {
26139
25251
  console.error("File upload failed:", error);
26140
25252
  setUploadProgress("Upload failed. Please try again.");
@@ -26147,7 +25259,7 @@ function MarkdownEditor({
26147
25259
  );
26148
25260
  const handleFileInputChange = _react.useCallback.call(void 0,
26149
25261
  (e) => {
26150
- 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]]);
26151
25263
  if (file) {
26152
25264
  handleFileUpload(file);
26153
25265
  e.target.value = "";
@@ -26158,7 +25270,7 @@ function MarkdownEditor({
26158
25270
  const handlePaste = _react.useCallback.call(void 0,
26159
25271
  (e) => {
26160
25272
  if (!onUploadFile) return;
26161
- 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]);
26162
25274
  if (!items) return;
26163
25275
  for (const item of items) {
26164
25276
  if (item.type.startsWith("image/")) {
@@ -26183,7 +25295,7 @@ function MarkdownEditor({
26183
25295
  buttonProps: { "aria-label": "Upload file", title: "Upload file" },
26184
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" }),
26185
25297
  execute: () => {
26186
- _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()]);
26187
25299
  }
26188
25300
  } : null;
26189
25301
  const extraCommands = uploadCommand ? [...defaultExtraCommands, uploadCommand] : defaultExtraCommands;
@@ -26195,7 +25307,7 @@ function MarkdownEditor({
26195
25307
  const EDGE_ZONE = 60;
26196
25308
  const MAX_SCROLL_SPEED = 15;
26197
25309
  const findScrollParent = _react.useCallback.call(void 0, (el) => {
26198
- let node = _optionalChain([el, 'optionalAccess', _681 => _681.parentElement]);
25310
+ let node = _optionalChain([el, 'optionalAccess', _612 => _612.parentElement]);
26199
25311
  while (node && node !== document.documentElement) {
26200
25312
  const { overflowY } = window.getComputedStyle(node);
26201
25313
  if ((overflowY === "auto" || overflowY === "scroll") && node.scrollHeight > node.clientHeight) {
@@ -26338,7 +25450,7 @@ function matchesAccept(file, accept) {
26338
25450
  });
26339
25451
  }
26340
25452
  function dragHasFiles(e) {
26341
- 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]);
26342
25454
  if (!types) return false;
26343
25455
  for (let i = 0; i < types.length; i++) {
26344
25456
  if (types[i] === "Files") return true;
@@ -26364,11 +25476,11 @@ function FileUpload({
26364
25476
  maxListHeight,
26365
25477
  acceptWindowDrops = false
26366
25478
  }) {
26367
- const [dragActive, setDragActive] = React85.useState(false);
26368
- const [validationError, setValidationError] = React85.useState(null);
26369
- 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);
26370
25482
  const isManaged = managedFiles !== void 0;
26371
- const files = React85.useMemo(() => {
25483
+ const files = React84.useMemo(() => {
26372
25484
  if (!value) return [];
26373
25485
  return Array.isArray(value) ? value : [value];
26374
25486
  }, [value]);
@@ -26416,7 +25528,7 @@ function FileUpload({
26416
25528
  fileInputRef.current.value = "";
26417
25529
  }
26418
25530
  };
26419
- const handleFilesRef = React85.useRef(handleFiles);
25531
+ const handleFilesRef = React84.useRef(handleFiles);
26420
25532
  handleFilesRef.current = handleFiles;
26421
25533
  const handleDrag = (e) => {
26422
25534
  e.preventDefault();
@@ -26433,11 +25545,11 @@ function FileUpload({
26433
25545
  e.stopPropagation();
26434
25546
  setDragActive(false);
26435
25547
  if (disabled) return;
26436
- 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])) {
26437
25549
  handleFiles(e.dataTransfer.files);
26438
25550
  }
26439
25551
  };
26440
- React85.useEffect(() => {
25552
+ React84.useEffect(() => {
26441
25553
  if (!acceptWindowDrops || disabled) return;
26442
25554
  let dragCounter = 0;
26443
25555
  const onWindowDragEnter = (e) => {
@@ -26461,7 +25573,7 @@ function FileUpload({
26461
25573
  e.preventDefault();
26462
25574
  dragCounter = 0;
26463
25575
  setDragActive(false);
26464
- 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])) {
26465
25577
  handleFilesRef.current(e.dataTransfer.files);
26466
25578
  }
26467
25579
  };
@@ -26483,7 +25595,7 @@ function FileUpload({
26483
25595
  };
26484
25596
  }, [acceptWindowDrops, disabled]);
26485
25597
  const handleFileSelect = (e) => {
26486
- 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])) {
26487
25599
  handleFiles(e.target.files);
26488
25600
  }
26489
25601
  };
@@ -26500,7 +25612,7 @@ function FileUpload({
26500
25612
  };
26501
25613
  const openDialog = async () => {
26502
25614
  if (disabled) return;
26503
- _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()]);
26504
25616
  };
26505
25617
  const displayError = error || validationError || void 0;
26506
25618
  const hasFiles = isManaged ? managedFiles.length > 0 : files.length > 0;
@@ -26578,7 +25690,7 @@ function FileUpload({
26578
25690
  "button",
26579
25691
  {
26580
25692
  type: "button",
26581
- onClick: () => _optionalChain([onRemoveManagedFile, 'optionalCall', _696 => _696(entry.id)]),
25693
+ onClick: () => _optionalChain([onRemoveManagedFile, 'optionalCall', _627 => _627(entry.id)]),
26582
25694
  className: "shrink-0 p-1 rounded hover:bg-ods-bg transition-colors",
26583
25695
  "aria-label": `Remove ${entry.fileName}`,
26584
25696
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "size-4 text-ods-text-secondary" })
@@ -26679,10 +25791,10 @@ function ImageUploader({
26679
25791
  alt = "Uploaded image",
26680
25792
  className
26681
25793
  }) {
26682
- const inputRef = React86.useRef(null);
26683
- const [dragActive, setDragActive] = React86.useState(false);
26684
- const [pressed, setPressed] = React86.useState(false);
26685
- 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);
26686
25798
  const interactive = !disabled && !loading;
26687
25799
  const hasImage = Boolean(value);
26688
25800
  const displayError = error || validationError || void 0;
@@ -26701,7 +25813,7 @@ function ImageUploader({
26701
25813
  onChange(file);
26702
25814
  };
26703
25815
  const handleFileSelect = (e) => {
26704
- 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]]));
26705
25817
  if (inputRef.current) inputRef.current.value = "";
26706
25818
  };
26707
25819
  const handleDrag = (e) => {
@@ -26716,11 +25828,11 @@ function ImageUploader({
26716
25828
  e.stopPropagation();
26717
25829
  setDragActive(false);
26718
25830
  if (!interactive) return;
26719
- 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]]));
26720
25832
  };
26721
25833
  const openDialog = () => {
26722
25834
  if (!interactive) return;
26723
- _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()]);
26724
25836
  };
26725
25837
  const handleRootKeyDown = (e) => {
26726
25838
  if (hasImage || !interactive) return;
@@ -26859,25 +25971,25 @@ function CompactAssigneeDropdown({
26859
25971
  onAssign,
26860
25972
  className
26861
25973
  }) {
26862
- const [isOpen, setIsOpen] = React87.useState(false);
26863
- const [search, setSearch] = React87.useState("");
25974
+ const [isOpen, setIsOpen] = React86.useState(false);
25975
+ const [search, setSearch] = React86.useState("");
26864
25976
  const hasAssignee = !!currentAssignee;
26865
- React87.useEffect(() => {
25977
+ React86.useEffect(() => {
26866
25978
  if (!isOpen) setSearch("");
26867
25979
  }, [isOpen]);
26868
- const filtered = React87.useMemo(() => {
25980
+ const filtered = React86.useMemo(() => {
26869
25981
  const q = search.trim().toLowerCase();
26870
25982
  if (!q) return options;
26871
25983
  return options.filter((o) => o.label.toLowerCase().includes(q));
26872
25984
  }, [options, search]);
26873
- const orderedOptions = React87.useMemo(() => {
25985
+ const orderedOptions = React86.useMemo(() => {
26874
25986
  if (!currentAssignee) return filtered;
26875
25987
  const current = filtered.find((o) => o.value === currentAssignee.id);
26876
25988
  if (!current) return filtered;
26877
25989
  return [current, ...filtered.filter((o) => o.value !== currentAssignee.id)];
26878
25990
  }, [filtered, currentAssignee]);
26879
25991
  const handleSelect = (userId) => {
26880
- const next = _optionalChain([currentAssignee, 'optionalAccess', _706 => _706.id]) === userId ? null : userId;
25992
+ const next = _optionalChain([currentAssignee, 'optionalAccess', _637 => _637.id]) === userId ? null : userId;
26881
25993
  onAssign(next);
26882
25994
  setIsOpen(false);
26883
25995
  };
@@ -26942,7 +26054,7 @@ function CompactAssigneeDropdown({
26942
26054
  }
26943
26055
  ) }),
26944
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) => {
26945
- const isCurrent = _optionalChain([currentAssignee, 'optionalAccess', _707 => _707.id]) === opt.value;
26057
+ const isCurrent = _optionalChain([currentAssignee, 'optionalAccess', _638 => _638.id]) === opt.value;
26946
26058
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
26947
26059
  "button",
26948
26060
  {
@@ -26986,9 +26098,9 @@ function DefaultAssigneeDropdown({
26986
26098
  onAssign,
26987
26099
  className
26988
26100
  }) {
26989
- const [isEditing, setIsEditing] = React87.useState(false);
26101
+ const [isEditing, setIsEditing] = React86.useState(false);
26990
26102
  const hasAssignee = !!currentAssignee;
26991
- const renderOption = React87.useCallback((option) => {
26103
+ const renderOption = React86.useCallback((option) => {
26992
26104
  const opt = option;
26993
26105
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-sf)] w-full min-w-0", children: [
26994
26106
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -27011,7 +26123,7 @@ function DefaultAssigneeDropdown({
27011
26123
  Autocomplete,
27012
26124
  {
27013
26125
  options,
27014
- value: _nullishCoalesce(_optionalChain([currentAssignee, 'optionalAccess', _708 => _708.id]), () => ( null)),
26126
+ value: _nullishCoalesce(_optionalChain([currentAssignee, 'optionalAccess', _639 => _639.id]), () => ( null)),
27015
26127
  onChange: (val) => {
27016
26128
  onAssign(val);
27017
26129
  setIsEditing(false);
@@ -27176,8 +26288,8 @@ _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
27176
26288
  _chunkOFAYLG6Dcjs.init_cn.call(void 0, );
27177
26289
 
27178
26290
  function TicketNoteCard({ note, onEdit, onDelete, className }) {
27179
- const [isEditing, setIsEditing] = React88.useState(false);
27180
- const [editText, setEditText] = React88.useState(note.text);
26291
+ const [isEditing, setIsEditing] = React87.useState(false);
26292
+ const [editText, setEditText] = React87.useState(note.text);
27181
26293
  const handleSave = () => {
27182
26294
  const trimmed = editText.trim();
27183
26295
  if (!trimmed || !onEdit) return;
@@ -27293,7 +26405,7 @@ function TicketNotesSection({
27293
26405
  isAddingNote,
27294
26406
  className
27295
26407
  }) {
27296
- const [noteText, setNoteText] = React89.useState("");
26408
+ const [noteText, setNoteText] = React88.useState("");
27297
26409
  const handleSend = () => {
27298
26410
  const trimmed = noteText.trim();
27299
26411
  if (!trimmed || !onAddNote || isAddingNote) return;
@@ -27398,14 +26510,14 @@ function TicketInfoSection({
27398
26510
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27399
26511
  SquareAvatar,
27400
26512
  {
27401
- src: _optionalChain([organization, 'optionalAccess', _709 => _709.imageSrc]),
27402
- alt: _optionalChain([organization, 'optionalAccess', _710 => _710.name]),
27403
- 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",
27404
26516
  size: "md",
27405
26517
  className: "shrink-0"
27406
26518
  }
27407
26519
  ),
27408
- /* @__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" })
27409
26521
  ] }),
27410
26522
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0", children: assigned ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27411
26523
  AssigneeDropdown,
@@ -27426,10 +26538,10 @@ function TicketInfoSection({
27426
26538
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27427
26539
  InfoCell2,
27428
26540
  {
27429
- value: _optionalChain([device, 'optionalAccess', _713 => _713.name]) || "Unassigned",
26541
+ value: _optionalChain([device, 'optionalAccess', _644 => _644.name]) || "Unassigned",
27430
26542
  label: "Device",
27431
- icon: _optionalChain([device, 'optionalAccess', _714 => _714.icon]),
27432
- onClick: _optionalChain([device, 'optionalAccess', _715 => _715.onClick])
26543
+ icon: _optionalChain([device, 'optionalAccess', _645 => _645.icon]),
26544
+ onClick: _optionalChain([device, 'optionalAccess', _646 => _646.onClick])
27433
26545
  }
27434
26546
  ),
27435
26547
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4 min-w-0", children: [
@@ -28189,10 +27301,10 @@ var getContentDimensions = (config) => {
28189
27301
  const envMobileHeight = process.env.NEXT_PUBLIC_FIGMA_MOBILE_HEIGHT ? parseInt(process.env.NEXT_PUBLIC_FIGMA_MOBILE_HEIGHT) : null;
28190
27302
  const envDesktopWidth = process.env.NEXT_PUBLIC_FIGMA_DESKTOP_WIDTH ? parseInt(process.env.NEXT_PUBLIC_FIGMA_DESKTOP_WIDTH) : null;
28191
27303
  const envDesktopHeight = process.env.NEXT_PUBLIC_FIGMA_DESKTOP_HEIGHT ? parseInt(process.env.NEXT_PUBLIC_FIGMA_DESKTOP_HEIGHT) : null;
28192
- const mobileWidth = _nullishCoalesce(_nullishCoalesce(envMobileWidth, () => ( _optionalChain([config, 'optionalAccess', _716 => _716.mobileContentDimensions, 'optionalAccess', _717 => _717.width]))), () => ( defaultMobile.width));
28193
- const mobileHeight = _nullishCoalesce(_nullishCoalesce(envMobileHeight, () => ( _optionalChain([config, 'optionalAccess', _718 => _718.mobileContentDimensions, 'optionalAccess', _719 => _719.height]))), () => ( defaultMobile.height));
28194
- const desktopWidth = _nullishCoalesce(_nullishCoalesce(envDesktopWidth, () => ( _optionalChain([config, 'optionalAccess', _720 => _720.desktopContentDimensions, 'optionalAccess', _721 => _721.width]))), () => ( defaultDesktop.width));
28195
- 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));
28196
27308
  return {
28197
27309
  mobile: { width: mobileWidth, height: mobileHeight },
28198
27310
  desktop: { width: desktopWidth, height: desktopHeight }
@@ -28326,7 +27438,7 @@ function renderUnifiedUI(state, handlers, config, iframeRef) {
28326
27438
  const contentDimensions = getContentDimensions(config);
28327
27439
  const mobileHeight = contentDimensions.mobile.height;
28328
27440
  const calculatedHeight = Math.max(mobileHeight + 100, 400);
28329
- 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`;
28330
27442
  })(),
28331
27443
  minHeight: viewMode === "DESKTOP" ? "auto" : (() => {
28332
27444
  const contentDimensions = getContentDimensions(config);
@@ -28431,7 +27543,7 @@ var FigmaPrototypeViewer = ({
28431
27543
  const [isInitialized, setIsInitialized] = _react.useState.call(void 0, false);
28432
27544
  const [currentNodeId, setCurrentNodeId] = _react.useState.call(void 0, null);
28433
27545
  const [internalActiveSection, setInternalActiveSection] = _react.useState.call(void 0,
28434
- 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]) || ""
28435
27547
  );
28436
27548
  const activeSection = externalActiveSection || internalActiveSection;
28437
27549
  const [isNavigating, setIsNavigating] = _react.useState.call(void 0, false);
@@ -28521,7 +27633,7 @@ var FigmaPrototypeViewer = ({
28521
27633
  const handleMessage = (event) => {
28522
27634
  if (event.origin !== "https://www.figma.com") return;
28523
27635
  const validEvents = ["INITIAL_LOAD", "NEW_STATE", "PRESENTED_NODE_CHANGED"];
28524
- 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)) {
28525
27637
  const figmaEvent = event.data;
28526
27638
  console.log("[Figma Event]", figmaEvent.type, viewMode);
28527
27639
  switch (figmaEvent.type) {
@@ -28531,19 +27643,19 @@ var FigmaPrototypeViewer = ({
28531
27643
  setIframeState("READY");
28532
27644
  break;
28533
27645
  case "PRESENTED_NODE_CHANGED":
28534
- if (_optionalChain([figmaEvent, 'access', _730 => _730.data, 'optionalAccess', _731 => _731.presentedNodeId])) {
27646
+ if (_optionalChain([figmaEvent, 'access', _661 => _661.data, 'optionalAccess', _662 => _662.presentedNodeId])) {
28535
27647
  setCurrentNodeId(figmaEvent.data.presentedNodeId);
28536
27648
  if (!isNavigating) {
28537
27649
  const matchingSection = config.sections.find((s) => {
28538
- 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]);
28539
- 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]);
28540
27652
  return desktopMatch || mobileMatch;
28541
27653
  });
28542
27654
  if (matchingSection && matchingSection.id !== activeSection) {
28543
27655
  if (!externalActiveSection) {
28544
27656
  setInternalActiveSection(matchingSection.id);
28545
27657
  }
28546
- _optionalChain([config, 'access', _743 => _743.onSectionChange, 'optionalCall', _744 => _744(matchingSection.id)]);
27658
+ _optionalChain([config, 'access', _674 => _674.onSectionChange, 'optionalCall', _675 => _675(matchingSection.id)]);
28547
27659
  }
28548
27660
  }
28549
27661
  }
@@ -28556,7 +27668,7 @@ var FigmaPrototypeViewer = ({
28556
27668
  }, [config.sections, activeSection, isNavigating, externalActiveSection, config.onSectionChange, viewMode]);
28557
27669
  const navigateToSection = _react.useCallback.call(void 0, (sectionId) => {
28558
27670
  const section = config.sections.find((s) => s.id === sectionId);
28559
- 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) {
28560
27672
  return;
28561
27673
  }
28562
27674
  setIsNavigating(true);
@@ -28564,7 +27676,7 @@ var FigmaPrototypeViewer = ({
28564
27676
  if (!externalActiveSection) {
28565
27677
  setInternalActiveSection(sectionId);
28566
27678
  }
28567
- _optionalChain([config, 'access', _747 => _747.onSectionChange, 'optionalCall', _748 => _748(sectionId)]);
27679
+ _optionalChain([config, 'access', _678 => _678.onSectionChange, 'optionalCall', _679 => _679(sectionId)]);
28568
27680
  const command = {
28569
27681
  type: "NAVIGATE_TO_FRAME_AND_CLOSE_OVERLAYS",
28570
27682
  data: { nodeId }
@@ -28884,7 +27996,7 @@ var FiltersDropdown = ({
28884
27996
  defaults[section.id] = section.defaultSelected || [];
28885
27997
  });
28886
27998
  setSelectedFilters(defaults);
28887
- _optionalChain([onReset, 'optionalCall', _749 => _749()]);
27999
+ _optionalChain([onReset, 'optionalCall', _680 => _680()]);
28888
28000
  setIsOpen(false);
28889
28001
  };
28890
28002
  const handleApply = () => {
@@ -29178,7 +28290,7 @@ function MediaGalleryManager({
29178
28290
  const [deletingIndex, setDeletingIndex] = _react.useState.call(void 0, null);
29179
28291
  const [draggedIndex, setDraggedIndex] = _react.useState.call(void 0, null);
29180
28292
  const handleFileSelect = _react.useCallback.call(void 0, async (event) => {
29181
- 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]]);
29182
28294
  if (!file) return;
29183
28295
  let mediaType;
29184
28296
  if (file.type.startsWith("image/")) {
@@ -29293,7 +28405,7 @@ function MediaGalleryManager({
29293
28405
  {
29294
28406
  type: "button",
29295
28407
  variant: "outline",
29296
- 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()]),
29297
28409
  disabled: isUploading,
29298
28410
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Plus, { className: "h-4 w-4" }),
29299
28411
  className: "font-['DM_Sans'] text-[16px] font-bold",
@@ -29903,7 +29015,7 @@ function PlatformFilterComponent({
29903
29015
  variant: selectedPlatform === platform.value ? "accent" : "outline",
29904
29016
  size,
29905
29017
  onClick: () => onPlatformChange(platform.value),
29906
- leftIcon: showIcons ? _chunkWX7PT5C7cjs.getSmallPlatformIcon.call(void 0, platform.value) : void 0,
29018
+ leftIcon: showIcons ? _chunkALW3D72Ocjs.getSmallPlatformIcon.call(void 0, platform.value) : void 0,
29907
29019
  className: "text-h3",
29908
29020
  children: platform.label
29909
29021
  },
@@ -30078,7 +29190,7 @@ function ReleaseMediaManager({
30078
29190
  const fileInputRef = _react.useRef.call(void 0, null);
30079
29191
  const [uploadingIndex, setUploadingIndex] = _react.useState.call(void 0, null);
30080
29192
  const handleFileSelect = async (event) => {
30081
- 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]]);
30082
29194
  if (!file) return;
30083
29195
  let mediaType;
30084
29196
  if (file.type.startsWith("image/")) {
@@ -30158,7 +29270,7 @@ function ReleaseMediaManager({
30158
29270
  {
30159
29271
  type: "button",
30160
29272
  variant: "outline",
30161
- 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()]),
30162
29274
  disabled: uploadingIndex !== null,
30163
29275
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Plus, { className: "h-4 w-4" }),
30164
29276
  className: "font-['DM_Sans'] text-[16px] font-bold",
@@ -30371,7 +29483,7 @@ function SEOEditorPreview({
30371
29483
  const displayImage = hasOgImage || hasFeaturedImage;
30372
29484
  const handleImageUpload = async (event) => {
30373
29485
  if (!onOgImageUpload) return;
30374
- 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]]);
30375
29487
  if (!file) return;
30376
29488
  setIsUploading(true);
30377
29489
  try {
@@ -30502,7 +29614,7 @@ function SEOEditorPreview({
30502
29614
  type: "button",
30503
29615
  variant: "outline",
30504
29616
  size: "icon",
30505
- onClick: () => _optionalChain([fileInputRef, 'optionalAccess', _765 => _765.click, 'call', _766 => _766()]),
29617
+ onClick: () => _optionalChain([fileInputRef, 'optionalAccess', _696 => _696.click, 'call', _697 => _697()]),
30506
29618
  disabled: disabled || isUploading,
30507
29619
  className: "bg-white text-black hover:bg-gray-100 rounded-full opacity-0 group-hover:opacity-100",
30508
29620
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Upload, { className: "h-4 w-4" })
@@ -30525,7 +29637,7 @@ function SEOEditorPreview({
30525
29637
  "div",
30526
29638
  {
30527
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",
30528
- onClick: () => onOgImageUpload && _optionalChain([fileInputRef, 'optionalAccess', _767 => _767.click, 'call', _768 => _768()]),
29640
+ onClick: () => onOgImageUpload && _optionalChain([fileInputRef, 'optionalAccess', _698 => _698.click, 'call', _699 => _699()]),
30529
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: [
30530
29642
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Upload, { className: "h-8 w-8 text-ods-text-secondary mb-2" }),
30531
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" })
@@ -30610,7 +29722,7 @@ function SocialLinksManager({
30610
29722
  className = ""
30611
29723
  }) {
30612
29724
  const addLink = () => {
30613
- 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";
30614
29726
  onChange([...links, { platform: firstPlatform, url: "" }]);
30615
29727
  };
30616
29728
  const removeLink = (index) => {
@@ -30622,7 +29734,7 @@ function SocialLinksManager({
30622
29734
  onChange(updated);
30623
29735
  };
30624
29736
  const getIcon = (link, platform) => {
30625
- const iconKey = _optionalChain([platform, 'optionalAccess', _771 => _771.icon_name]) || link.platform;
29737
+ const iconKey = _optionalChain([platform, 'optionalAccess', _702 => _702.icon_name]) || link.platform;
30626
29738
  const IconComponent = iconMap[iconKey];
30627
29739
  return IconComponent ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, IconComponent, { className: "w-5 h-5 text-ods-text-secondary" }) : null;
30628
29740
  };
@@ -30647,7 +29759,7 @@ function SocialLinksManager({
30647
29759
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30648
29760
  _chunkBJTOSUT4cjs.Input,
30649
29761
  {
30650
- placeholder: _optionalChain([platform, 'optionalAccess', _772 => _772.placeholder]) || "Profile URL",
29762
+ placeholder: _optionalChain([platform, 'optionalAccess', _703 => _703.placeholder]) || "Profile URL",
30651
29763
  value: link.url,
30652
29764
  onChange: (e) => updateLink(index, "url", e.target.value),
30653
29765
  onKeyDown: (e) => {
@@ -30691,7 +29803,7 @@ function SocialLinksManager({
30691
29803
  _chunkBJTOSUT4cjs.init_button2.call(void 0, );
30692
29804
 
30693
29805
 
30694
- 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) => {
30695
29807
  const isYellow = mode === "yellow";
30696
29808
  const isPink = mode === "pink" || mode === "purple";
30697
29809
  const isCyan = mode === "cyan";
@@ -30987,6 +30099,258 @@ function TagsSelector({
30987
30099
  ] });
30988
30100
  }
30989
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
+
30990
30354
  // src/components/features/video-source-selector.tsx
30991
30355
  _chunkBJTOSUT4cjs.init_button2.call(void 0, );
30992
30356
 
@@ -31024,7 +30388,7 @@ function VideoSourceSelector({
31024
30388
  input.accept = "video/*";
31025
30389
  input.onchange = async (e) => {
31026
30390
  const target = e.target;
31027
- 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]]);
31028
30392
  if (!file) return;
31029
30393
  setIsUploading(true);
31030
30394
  setUploadProgress(0);
@@ -31354,7 +30718,7 @@ function TranscriptSummaryEditor({
31354
30718
  {
31355
30719
  id: "subtitles",
31356
30720
  value: subtitles || "",
31357
- onChange: (e) => _optionalChain([onSubtitlesChange, 'optionalCall', _775 => _775(e.target.value)]),
30721
+ onChange: (e) => _optionalChain([onSubtitlesChange, 'optionalCall', _706 => _706(e.target.value)]),
31358
30722
  placeholder: subtitlesPlaceholder,
31359
30723
  disabled: disabled || !onSubtitlesChange,
31360
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",
@@ -31507,7 +30871,7 @@ var AIEnrichSection = ({
31507
30871
  }) => {
31508
30872
  const hasResults = status === "success" || status === "error";
31509
30873
  const shouldDisable = disabled || !canEnrich;
31510
- 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)]) || [];
31511
30875
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
31512
30876
  "div",
31513
30877
  {
@@ -31545,7 +30909,7 @@ var AIEnrichSection = ({
31545
30909
  {
31546
30910
  id: "ai-enrich-custom-instructions",
31547
30911
  value: _nullishCoalesce(customInstructions, () => ( "")),
31548
- onChange: (e) => _optionalChain([onCustomInstructionsChange, 'optionalCall', _778 => _778(e.target.value)]),
30912
+ onChange: (e) => _optionalChain([onCustomInstructionsChange, 'optionalCall', _709 => _709(e.target.value)]),
31549
30913
  placeholder: customInstructionsPlaceholder,
31550
30914
  disabled: loading,
31551
30915
  maxLength: customInstructionsMaxLength,
@@ -31674,7 +31038,7 @@ function HighlightVideoSection({
31674
31038
  input.accept = "video/*";
31675
31039
  input.onchange = async (e) => {
31676
31040
  const target = e.target;
31677
- 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]]);
31678
31042
  if (!file) return;
31679
31043
  setUploadError(null);
31680
31044
  try {
@@ -32176,7 +31540,7 @@ function HighlightVideoPreview({
32176
31540
  input.accept = "video/*";
32177
31541
  input.onchange = async (e) => {
32178
31542
  const target = e.target;
32179
- 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]]);
32180
31544
  if (!file) return;
32181
31545
  await onUpload(file);
32182
31546
  };
@@ -32363,7 +31727,7 @@ function HighlightVideoCombinedSection({
32363
31727
  input.accept = "video/*";
32364
31728
  input.onchange = async (e) => {
32365
31729
  const target = e.target;
32366
- 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]]);
32367
31731
  if (!file) return;
32368
31732
  await onUpload(file);
32369
31733
  };
@@ -32660,11 +32024,11 @@ var getApprovalLevelLabel = (level, editMode = false) => {
32660
32024
  return editMode ? "Set Global Permission" : "";
32661
32025
  }
32662
32026
  const option = approvalLevelOptions.find((opt) => opt.value === level);
32663
- return _optionalChain([option, 'optionalAccess', _785 => _785.label]) || level;
32027
+ return _optionalChain([option, 'optionalAccess', _716 => _716.label]) || level;
32664
32028
  };
32665
32029
  var PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
32666
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: [
32667
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-bg border border-ods-border rounded-md flex items-center justify-center w-8 h-8", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWX7PT5C7cjs.ToolIcon, { toolType: policy.toolName, size: 16 }) }),
32031
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "bg-ods-bg border border-ods-border rounded-md flex items-center justify-center w-8 h-8", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkALW3D72Ocjs.ToolIcon, { toolType: policy.toolName, size: 16 }) }),
32668
32032
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 flex flex-col min-w-0", children: [
32669
32033
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-[16px] font-medium text-ods-text-primary truncate", children: policy.name }),
32670
32034
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-[12px] text-ods-text-secondary break-all font-mono", children: policy.commandPattern })
@@ -32873,7 +32237,7 @@ function WaitlistForm({
32873
32237
  const [email, setEmail] = _react.useState.call(void 0, defaultEmail);
32874
32238
  const [phone, setPhone] = _react.useState.call(void 0, defaultPhone);
32875
32239
  const [countryCode, setCountryCode] = _react.useState.call(void 0, "US");
32876
- const { toast } = _chunkWX7PT5C7cjs.useToast.call(void 0, );
32240
+ const { toast } = _chunkALW3D72Ocjs.useToast.call(void 0, );
32877
32241
  const [smsConsent, setSmsConsent] = _react.useState.call(void 0, false);
32878
32242
  const [isClient, setIsClient] = _react.useState.call(void 0, false);
32879
32243
  const [isPhoneInvalid, setIsPhoneInvalid] = _react.useState.call(void 0, false);
@@ -32912,7 +32276,7 @@ function WaitlistForm({
32912
32276
  const finalPhone = phone ? formatPhoneE164(phone, countryCode) : void 0;
32913
32277
  try {
32914
32278
  await onRegister(email, finalPhone);
32915
- } catch (e26) {
32279
+ } catch (e24) {
32916
32280
  }
32917
32281
  };
32918
32282
  if (!isClient) {
@@ -33192,15 +32556,15 @@ function TicketCard({
33192
32556
  transform: _utilities.CSS.Transform.toString(sortable.transform),
33193
32557
  transition: sortable.transition
33194
32558
  };
33195
- 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);
33196
32560
  const deviceText = [
33197
- _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(", ")]),
33198
32562
  ticket.organizationName
33199
32563
  ].filter(Boolean).join(", ");
33200
32564
  const handleClick = (e) => {
33201
32565
  if (sortable.isDragging) e.preventDefault();
33202
32566
  };
33203
- 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);
33204
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: [
33205
32569
  ticket.priority && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33206
32570
  _chunkTMD5LDX4cjs.Flag02Icon,
@@ -33209,7 +32573,7 @@ function TicketCard({
33209
32573
  "aria-label": `Priority: ${ticket.priority}`
33210
32574
  }
33211
32575
  ),
33212
- 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: [
33213
32577
  ticket.assignees.slice(0, MAX_VISIBLE_ASSIGNEES).map((a) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33214
32578
  SquareAvatar,
33215
32579
  {
@@ -33238,7 +32602,7 @@ function TicketCard({
33238
32602
  ] }),
33239
32603
  rightSection
33240
32604
  ] }),
33241
- _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
33242
32606
  ] });
33243
32607
  const cardClasses = _chunkOFAYLG6Dcjs.cn.call(void 0,
33244
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",
@@ -33398,7 +32762,7 @@ function ColumnBody({ column, getTicketHref, renderAssignSlot, onLoadMore, loadM
33398
32762
  const observer = new IntersectionObserver(
33399
32763
  (entries) => {
33400
32764
  if (entries.some((e) => e.isIntersecting)) {
33401
- _optionalChain([loadMoreRef, 'access', _797 => _797.current, 'optionalCall', _798 => _798(columnIdRef.current)]);
32765
+ _optionalChain([loadMoreRef, 'access', _728 => _728.current, 'optionalCall', _729 => _729(columnIdRef.current)]);
33402
32766
  }
33403
32767
  },
33404
32768
  { root, rootMargin: loadMoreRootMargin }
@@ -33427,7 +32791,7 @@ function ColumnBody({ column, getTicketHref, renderAssignSlot, onLoadMore, loadM
33427
32791
  {
33428
32792
  ticket: t,
33429
32793
  columnId: column.id,
33430
- href: _optionalChain([getTicketHref, 'optionalCall', _799 => _799(t.id)]),
32794
+ href: _optionalChain([getTicketHref, 'optionalCall', _730 => _730(t.id)]),
33431
32795
  renderAssignSlot,
33432
32796
  dragDisabled: column.dragDisabled
33433
32797
  },
@@ -33459,7 +32823,7 @@ function EmptyState3() {
33459
32823
  // src/components/features/board/use-board-collapse.ts
33460
32824
 
33461
32825
  function useBoardCollapse(storageKey) {
33462
- const [persisted, setPersisted] = _chunkWX7PT5C7cjs.useLocalStorage.call(void 0,
32826
+ const [persisted, setPersisted] = _chunkALW3D72Ocjs.useLocalStorage.call(void 0,
33463
32827
  _nullishCoalesce(storageKey, () => ( "__board_collapse_unused__")),
33464
32828
  {}
33465
32829
  );
@@ -33510,17 +32874,17 @@ function Board({
33510
32874
  const pointer = _core.pointerWithin.call(void 0, args);
33511
32875
  const intersections = pointer.length > 0 ? pointer : _core.rectIntersection.call(void 0, args);
33512
32876
  const ticketHit = intersections.find(
33513
- (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"
33514
32878
  );
33515
32879
  if (ticketHit) return [ticketHit];
33516
32880
  const columnHit = intersections.find(
33517
- (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"
33518
32882
  );
33519
32883
  if (columnHit) {
33520
- 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]);
33521
32885
  const ticketsInColumn = args.droppableContainers.filter((c) => {
33522
32886
  const d = c.data.current;
33523
- return _optionalChain([d, 'optionalAccess', _815 => _815.type]) === "ticket" && d.columnId === columnId;
32887
+ return _optionalChain([d, 'optionalAccess', _746 => _746.type]) === "ticket" && d.columnId === columnId;
33524
32888
  });
33525
32889
  if (ticketsInColumn.length > 0) {
33526
32890
  const closest = _core.closestCorners.call(void 0, { ...args, droppableContainers: ticketsInColumn });
@@ -33545,20 +32909,20 @@ function Board({
33545
32909
  const overId = String(over.id);
33546
32910
  if (activeId === overId) return;
33547
32911
  const overData = over.data.current;
33548
- const fromColumnId = _optionalChain([locate, 'call', _816 => _816(items, activeId), 'optionalAccess', _817 => _817.columnId]);
33549
- 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]);
33550
32914
  if (!fromColumnId || !toColumnId || fromColumnId === toColumnId) return;
33551
32915
  const origin = dragOriginRef.current;
33552
- const isReturnToOrigin = _optionalChain([origin, 'optionalAccess', _819 => _819.fromColumnId]) === toColumnId;
32916
+ const isReturnToOrigin = _optionalChain([origin, 'optionalAccess', _750 => _750.fromColumnId]) === toColumnId;
33553
32917
  const targetCol = items.find((c) => c.id === toColumnId);
33554
- const blockedBySource = !isReturnToOrigin && !!_optionalChain([targetCol, 'optionalAccess', _820 => _820.allowedFromColumns]) && !!origin && !targetCol.allowedFromColumns.includes(origin.fromColumnId);
33555
- 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;
33556
32920
  setItems((prev) => {
33557
32921
  const fromIndex = findIndexInColumn(prev, fromColumnId, activeId);
33558
32922
  const toCol = prev.find((c) => c.id === toColumnId);
33559
32923
  if (fromIndex < 0 || !toCol) return prev;
33560
32924
  let toIndex;
33561
- if (_optionalChain([overData, 'optionalAccess', _822 => _822.type]) === "column") {
32925
+ if (_optionalChain([overData, 'optionalAccess', _753 => _753.type]) === "column") {
33562
32926
  toIndex = toCol.tickets.length;
33563
32927
  } else {
33564
32928
  const overIndex = toCol.tickets.findIndex((t) => t.id === overId);
@@ -33600,14 +32964,14 @@ function Board({
33600
32964
  const toColumnId = located.columnId;
33601
32965
  const isCrossColumn = origin.fromColumnId !== toColumnId;
33602
32966
  const targetCol = items.find((c) => c.id === toColumnId);
33603
- 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))) {
33604
32968
  setItems(columns);
33605
32969
  return;
33606
32970
  }
33607
32971
  let finalIndex = located.index;
33608
- 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]), () => ( []));
33609
32973
  const overData = over.data.current;
33610
- if (_optionalChain([overData, 'optionalAccess', _828 => _828.type]) === "ticket") {
32974
+ if (_optionalChain([overData, 'optionalAccess', _759 => _759.type]) === "ticket") {
33611
32975
  const overIndex = findIndexInColumn(items, toColumnId, String(over.id));
33612
32976
  if (overIndex >= 0 && overIndex !== located.index) {
33613
32977
  finalColumnTickets = _sortable.arrayMove.call(void 0, finalColumnTickets, located.index, overIndex);
@@ -33627,8 +32991,8 @@ function Board({
33627
32991
  ticketId: origin.ticketId,
33628
32992
  fromColumnId: origin.fromColumnId,
33629
32993
  toColumnId,
33630
- afterTicketId: _nullishCoalesce(_optionalChain([finalColumnTickets, 'access', _829 => _829[finalIndex - 1], 'optionalAccess', _830 => _830.id]), () => ( null)),
33631
- 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))
33632
32996
  });
33633
32997
  };
33634
32998
  const handleDragCancel = () => {
@@ -33650,8 +33014,8 @@ function Board({
33650
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) => {
33651
33015
  const prev = items[i - 1];
33652
33016
  const next = items[i + 1];
33653
- const joinLeft = !!(column.system && _optionalChain([prev, 'optionalAccess', _833 => _833.system]));
33654
- 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]));
33655
33019
  const showGap = i > 0 && !joinLeft;
33656
33020
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, React101.Fragment, { children: [
33657
33021
  showGap && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "aria-hidden": true, className: "w-[var(--spacing-system-mf)] shrink-0" }),
@@ -33685,7 +33049,7 @@ function locate(cols, ticketId) {
33685
33049
  return null;
33686
33050
  }
33687
33051
  function findIndexInColumn(cols, columnId, ticketId) {
33688
- 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));
33689
33053
  }
33690
33054
 
33691
33055
  // src/components/features/board/types.ts
@@ -34344,5 +33708,12 @@ function canonicalize(status) {
34344
33708
 
34345
33709
 
34346
33710
 
34347
- 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.YouTubeLinkParser = YouTubeLinkParser; 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;
34348
- //# sourceMappingURL=chunk-C6ZMI4UB.cjs.map
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