@flamingo-stack/openframe-frontend-core 0.0.579 → 0.0.580-1958.5358.1

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 (176) hide show
  1. package/dist/chat-protocol/decode.d.ts.map +1 -1
  2. package/dist/chat-protocol/events.d.ts +1 -47
  3. package/dist/chat-protocol/events.d.ts.map +1 -1
  4. package/dist/chat-protocol/index.cjs +0 -51
  5. package/dist/chat-protocol/index.cjs.map +1 -1
  6. package/dist/chat-protocol/index.js +1 -48
  7. package/dist/chat-protocol/index.js.map +1 -1
  8. package/dist/chat-protocol/leading-frames.d.ts +3 -9
  9. package/dist/chat-protocol/leading-frames.d.ts.map +1 -1
  10. package/dist/chat-protocol/nats-decoder.d.ts +0 -41
  11. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  12. package/dist/{chunk-OGZAFM6M.cjs → chunk-26NL6WZU.cjs} +5 -5
  13. package/dist/{chunk-OGZAFM6M.cjs.map → chunk-26NL6WZU.cjs.map} +1 -1
  14. package/dist/{chunk-QCP2KV7P.js → chunk-4SYELUXP.js} +3 -3
  15. package/dist/{chunk-4HGRXFQP.cjs → chunk-6PLACYFA.cjs} +3 -3
  16. package/dist/{chunk-4HGRXFQP.cjs.map → chunk-6PLACYFA.cjs.map} +1 -1
  17. package/dist/{chunk-FEVLXRTC.cjs → chunk-7LGVUXWE.cjs} +344 -282
  18. package/dist/chunk-7LGVUXWE.cjs.map +1 -0
  19. package/dist/{chunk-AKPLEWMH.js → chunk-A4BZ2CP4.js} +2 -2
  20. package/dist/{chunk-HHJVIHVR.cjs → chunk-COSV5FC2.cjs} +69 -69
  21. package/dist/{chunk-HHJVIHVR.cjs.map → chunk-COSV5FC2.cjs.map} +1 -1
  22. package/dist/{chunk-4WSKSNXL.js → chunk-CX62MVCV.js} +6 -6
  23. package/dist/{chunk-O2FTVZOD.js → chunk-DZAPMQ6U.js} +3 -3
  24. package/dist/{chunk-YW4WBNYV.cjs → chunk-EXUKW6GT.cjs} +24 -24
  25. package/dist/{chunk-YW4WBNYV.cjs.map → chunk-EXUKW6GT.cjs.map} +1 -1
  26. package/dist/{chunk-PWOYEUIQ.js → chunk-FN4PUTHZ.js} +5 -5
  27. package/dist/{chunk-L2CF2QZW.js → chunk-JDP5BGVO.js} +5 -5
  28. package/dist/{chunk-5Y6TPFW7.js → chunk-JFVT6XRN.js} +5 -5
  29. package/dist/{chunk-BCJQ7CJE.cjs → chunk-JHLZTU7R.cjs} +9 -9
  30. package/dist/{chunk-BCJQ7CJE.cjs.map → chunk-JHLZTU7R.cjs.map} +1 -1
  31. package/dist/{chunk-D44S2QLI.js → chunk-OSIIXSYG.js} +3 -3
  32. package/dist/{chunk-DB3TV4CW.js → chunk-PGWXVNYS.js} +3 -3
  33. package/dist/{chunk-H54EPP3P.cjs → chunk-PP3LCLWI.cjs} +4 -4
  34. package/dist/{chunk-H54EPP3P.cjs.map → chunk-PP3LCLWI.cjs.map} +1 -1
  35. package/dist/{chunk-M5GWCMYE.cjs → chunk-QIDD3LTS.cjs} +32 -32
  36. package/dist/{chunk-M5GWCMYE.cjs.map → chunk-QIDD3LTS.cjs.map} +1 -1
  37. package/dist/{chunk-3AX3ZEY3.js → chunk-QZSNH7XU.js} +1317 -1480
  38. package/dist/chunk-QZSNH7XU.js.map +1 -0
  39. package/dist/{chunk-37XJYOAY.cjs → chunk-RF65N4QA.cjs} +10 -10
  40. package/dist/{chunk-37XJYOAY.cjs.map → chunk-RF65N4QA.cjs.map} +1 -1
  41. package/dist/{chunk-36TJYCF3.cjs → chunk-S5BS2CZA.cjs} +21 -21
  42. package/dist/{chunk-36TJYCF3.cjs.map → chunk-S5BS2CZA.cjs.map} +1 -1
  43. package/dist/{chunk-QGJYWLF4.js → chunk-SN6SL4HR.js} +2 -2
  44. package/dist/{chunk-4FJSN2XW.cjs → chunk-TDM5FQZG.cjs} +10 -10
  45. package/dist/{chunk-4FJSN2XW.cjs.map → chunk-TDM5FQZG.cjs.map} +1 -1
  46. package/dist/{chunk-HGA74X35.js → chunk-TXNAZKWW.js} +3 -3
  47. package/dist/{chunk-IFYQ7DHV.cjs → chunk-UNVW4BVF.cjs} +43 -43
  48. package/dist/{chunk-IFYQ7DHV.cjs.map → chunk-UNVW4BVF.cjs.map} +1 -1
  49. package/dist/{chunk-CP5EYMNL.js → chunk-V5RWTIRS.js} +202 -140
  50. package/dist/{chunk-CP5EYMNL.js.map → chunk-V5RWTIRS.js.map} +1 -1
  51. package/dist/{chunk-RKGOVTXZ.cjs → chunk-VYQNM75R.cjs} +167 -330
  52. package/dist/chunk-VYQNM75R.cjs.map +1 -0
  53. package/dist/{chunk-PMENIZXI.js → chunk-WEUWTEQL.js} +4 -4
  54. package/dist/{chunk-H4BPHGU5.js → chunk-WW435OOF.js} +2 -2
  55. package/dist/{chunk-4LZ7B5H5.cjs → chunk-YB75SLEH.cjs} +3 -3
  56. package/dist/{chunk-4LZ7B5H5.cjs.map → chunk-YB75SLEH.cjs.map} +1 -1
  57. package/dist/{chunk-A6C5HOD7.cjs → chunk-YLYU6DDT.cjs} +15 -15
  58. package/dist/{chunk-A6C5HOD7.cjs.map → chunk-YLYU6DDT.cjs.map} +1 -1
  59. package/dist/{chunk-BW4WDUSI.js → chunk-ZNCYSM6R.js} +2 -2
  60. package/dist/{chunk-NPVDKOGD.cjs → chunk-ZQ2RBAXO.cjs} +22 -22
  61. package/dist/{chunk-NPVDKOGD.cjs.map → chunk-ZQ2RBAXO.cjs.map} +1 -1
  62. package/dist/components/case-studies/index.cjs +9 -9
  63. package/dist/components/case-studies/index.js +3 -3
  64. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  65. package/dist/components/chat/index.cjs +2 -10
  66. package/dist/components/chat/index.cjs.map +1 -1
  67. package/dist/components/chat/index.d.ts +0 -1
  68. package/dist/components/chat/index.d.ts.map +1 -1
  69. package/dist/components/chat/index.js +1 -9
  70. package/dist/components/chat/stream/chat-stream-reducer.d.ts +0 -9
  71. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -1
  72. package/dist/components/chat/stream/delta-batcher.d.ts +3 -3
  73. package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -1
  74. package/dist/components/chat/stream/message-mutations.d.ts.map +1 -1
  75. package/dist/components/chat/types/component.types.d.ts +0 -6
  76. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  77. package/dist/components/chat/types/message.types.d.ts +2 -30
  78. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  79. package/dist/components/chat/types/network.types.d.ts +1 -3
  80. package/dist/components/chat/types/network.types.d.ts.map +1 -1
  81. package/dist/components/chat/types/processing.types.d.ts +1 -4
  82. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  83. package/dist/components/chat/utils/approval-display.d.ts +8 -36
  84. package/dist/components/chat/utils/approval-display.d.ts.map +1 -1
  85. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  86. package/dist/components/chat/utils/index.d.ts +1 -1
  87. package/dist/components/chat/utils/index.d.ts.map +1 -1
  88. package/dist/components/chat/utils/message-segment-accumulator.d.ts +4 -16
  89. package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
  90. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  91. package/dist/components/chat/utils/resolve-fetched-card-href.d.ts +1 -1
  92. package/dist/components/contact/index.cjs +4 -4
  93. package/dist/components/contact/index.js +3 -3
  94. package/dist/components/docs/index.cjs +7 -7
  95. package/dist/components/docs/index.js +6 -6
  96. package/dist/components/embeds/index.cjs +4 -4
  97. package/dist/components/embeds/index.js +3 -3
  98. package/dist/components/faq/index.cjs +4 -4
  99. package/dist/components/faq/index.js +3 -3
  100. package/dist/components/features/index.cjs +3 -3
  101. package/dist/components/features/index.js +2 -2
  102. package/dist/components/features/push-button-selector.d.ts +29 -1
  103. package/dist/components/features/push-button-selector.d.ts.map +1 -1
  104. package/dist/components/help-center-pages/index.cjs +23 -23
  105. package/dist/components/help-center-pages/index.js +14 -14
  106. package/dist/components/index.cjs +121 -129
  107. package/dist/components/index.cjs.map +1 -1
  108. package/dist/components/index.js +13 -21
  109. package/dist/components/index.js.map +1 -1
  110. package/dist/components/meeting-scheduler/index.cjs +21 -21
  111. package/dist/components/meeting-scheduler/index.js +2 -2
  112. package/dist/components/navigation/index.cjs +6 -6
  113. package/dist/components/navigation/index.js +5 -5
  114. package/dist/components/onboarding-guides/index.cjs +6 -6
  115. package/dist/components/onboarding-guides/index.js +5 -5
  116. package/dist/components/tickets/index.cjs +7 -7
  117. package/dist/components/tickets/index.js +6 -6
  118. package/dist/components/ui/index.cjs +3 -11
  119. package/dist/components/ui/index.cjs.map +1 -1
  120. package/dist/components/ui/index.js +2 -10
  121. package/dist/index.cjs +7 -15
  122. package/dist/index.cjs.map +1 -1
  123. package/dist/index.js +6 -14
  124. package/dist/index.js.map +1 -1
  125. package/dist/utils/index.cjs.map +1 -1
  126. package/dist/utils/index.js.map +1 -1
  127. package/package.json +1 -1
  128. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +0 -80
  129. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +1 -118
  130. package/src/chat-protocol/decode.ts +3 -4
  131. package/src/chat-protocol/events.ts +0 -51
  132. package/src/chat-protocol/leading-frames.ts +3 -9
  133. package/src/chat-protocol/nats-decoder.ts +1 -110
  134. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +0 -19
  135. package/src/components/chat/chat-message-enhanced.tsx +1 -13
  136. package/src/components/chat/index.ts +0 -1
  137. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +0 -90
  138. package/src/components/chat/stream/chat-dialog-store.ts +1 -1
  139. package/src/components/chat/stream/chat-stream-reducer.ts +11 -49
  140. package/src/components/chat/stream/delta-batcher.ts +4 -9
  141. package/src/components/chat/stream/message-mutations.ts +0 -2
  142. package/src/components/chat/types/component.types.ts +0 -9
  143. package/src/components/chat/types/message.types.ts +0 -32
  144. package/src/components/chat/types/network.types.ts +1 -3
  145. package/src/components/chat/types/processing.types.ts +1 -4
  146. package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +0 -93
  147. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +1 -78
  148. package/src/components/chat/utils/approval-display.ts +8 -53
  149. package/src/components/chat/utils/extract-incomplete-message-state.ts +0 -1
  150. package/src/components/chat/utils/index.ts +1 -6
  151. package/src/components/chat/utils/message-segment-accumulator.ts +3 -37
  152. package/src/components/chat/utils/process-historical-messages.ts +7 -44
  153. package/src/components/chat/utils/resolve-fetched-card-href.ts +1 -1
  154. package/src/components/features/.push-button-selector.md +1 -1
  155. package/src/components/features/push-button-selector.tsx +130 -6
  156. package/src/stories/ChatMessageEnhanced.stories.tsx +3 -7
  157. package/dist/chunk-3AX3ZEY3.js.map +0 -1
  158. package/dist/chunk-FEVLXRTC.cjs.map +0 -1
  159. package/dist/chunk-RKGOVTXZ.cjs.map +0 -1
  160. package/dist/components/chat/guide-display.d.ts +0 -14
  161. package/dist/components/chat/guide-display.d.ts.map +0 -1
  162. package/src/components/chat/guide-display.tsx +0 -42
  163. /package/dist/{chunk-QCP2KV7P.js.map → chunk-4SYELUXP.js.map} +0 -0
  164. /package/dist/{chunk-AKPLEWMH.js.map → chunk-A4BZ2CP4.js.map} +0 -0
  165. /package/dist/{chunk-4WSKSNXL.js.map → chunk-CX62MVCV.js.map} +0 -0
  166. /package/dist/{chunk-O2FTVZOD.js.map → chunk-DZAPMQ6U.js.map} +0 -0
  167. /package/dist/{chunk-PWOYEUIQ.js.map → chunk-FN4PUTHZ.js.map} +0 -0
  168. /package/dist/{chunk-L2CF2QZW.js.map → chunk-JDP5BGVO.js.map} +0 -0
  169. /package/dist/{chunk-5Y6TPFW7.js.map → chunk-JFVT6XRN.js.map} +0 -0
  170. /package/dist/{chunk-D44S2QLI.js.map → chunk-OSIIXSYG.js.map} +0 -0
  171. /package/dist/{chunk-DB3TV4CW.js.map → chunk-PGWXVNYS.js.map} +0 -0
  172. /package/dist/{chunk-QGJYWLF4.js.map → chunk-SN6SL4HR.js.map} +0 -0
  173. /package/dist/{chunk-HGA74X35.js.map → chunk-TXNAZKWW.js.map} +0 -0
  174. /package/dist/{chunk-PMENIZXI.js.map → chunk-WEUWTEQL.js.map} +0 -0
  175. /package/dist/{chunk-H4BPHGU5.js.map → chunk-WW435OOF.js.map} +0 -0
  176. /package/dist/{chunk-BW4WDUSI.js.map → chunk-ZNCYSM6R.js.map} +0 -0
@@ -89,7 +89,7 @@ import {
89
89
  useCollapsible,
90
90
  useIsHydrated,
91
91
  useScrollFade
92
- } from "./chunk-3AX3ZEY3.js";
92
+ } from "./chunk-QZSNH7XU.js";
93
93
  import {
94
94
  ToolIcon,
95
95
  createHeadingIdDeduper,
@@ -20592,7 +20592,8 @@ function PlatformFilterComponent({
20592
20592
 
20593
20593
  // src/components/features/push-button-selector.tsx
20594
20594
  import { Check as Check2 } from "lucide-react";
20595
- import { jsx as jsx190, jsxs as jsxs151 } from "react/jsx-runtime";
20595
+ import { useEffect as useEffect29, useRef as useRef31 } from "react";
20596
+ import { Fragment as Fragment30, jsx as jsx190, jsxs as jsxs151 } from "react/jsx-runtime";
20596
20597
  function PushButtonSelectorSkeleton({ count = 3, hasTitle }) {
20597
20598
  return /* @__PURE__ */ jsxs151("div", { className: "space-y-3", children: [
20598
20599
  hasTitle && /* @__PURE__ */ jsx190("div", { className: "h-5 w-20 animate-pulse rounded bg-ods-skeleton" }),
@@ -20630,13 +20631,57 @@ function PushButtonSelector({
20630
20631
  isLoading = false,
20631
20632
  error = null,
20632
20633
  skeletonCount = 3,
20633
- sections
20634
+ sections,
20635
+ search,
20636
+ lazyLoad,
20637
+ emptyMessage,
20638
+ footer
20634
20639
  }) {
20640
+ const scrollRef = useRef31(null);
20641
+ const sentinelRef = useRef31(null);
20642
+ const lazyHasMore = lazyLoad?.hasMore ?? false;
20643
+ const lazyFetching = lazyLoad?.isFetchingMore ?? false;
20644
+ const onLoadMore = lazyLoad?.onLoadMore;
20645
+ const optionCount = options.length;
20646
+ useEffect29(() => {
20647
+ const sentinel = sentinelRef.current;
20648
+ const root = scrollRef.current;
20649
+ if (!sentinel || !root || !onLoadMore || !lazyHasMore) return void 0;
20650
+ const observer = new IntersectionObserver(
20651
+ (entries) => {
20652
+ if (entries.some((e) => e.isIntersecting) && !lazyFetching) {
20653
+ onLoadMore();
20654
+ }
20655
+ },
20656
+ { root, rootMargin: "80px" }
20657
+ );
20658
+ observer.observe(sentinel);
20659
+ return () => {
20660
+ observer.disconnect();
20661
+ };
20662
+ }, [lazyHasMore, lazyFetching, onLoadMore, optionCount]);
20663
+ const searchInput = search ? /* @__PURE__ */ jsx190(
20664
+ Input,
20665
+ {
20666
+ value: search.value,
20667
+ onChange: (e) => search.onChange(e.target.value),
20668
+ placeholder: search.placeholder,
20669
+ "aria-label": search.ariaLabel ?? search.placeholder ?? "Search"
20670
+ }
20671
+ ) : null;
20635
20672
  if (isLoading) {
20636
- return /* @__PURE__ */ jsx190("div", { className, children: /* @__PURE__ */ jsx190(PushButtonSelectorSkeleton, { count: skeletonCount, hasTitle: !!title }) });
20673
+ return /* @__PURE__ */ jsx190("div", { className, children: search ? /* @__PURE__ */ jsxs151("div", { className: "space-y-4", children: [
20674
+ title && /* @__PURE__ */ jsx190("h3", { className: "text-ods-text-primary text-h5", children: title }),
20675
+ searchInput,
20676
+ /* @__PURE__ */ jsx190(PushButtonSelectorSkeleton, { count: skeletonCount })
20677
+ ] }) : /* @__PURE__ */ jsx190(PushButtonSelectorSkeleton, { count: skeletonCount, hasTitle: !!title }) });
20637
20678
  }
20638
20679
  if (error) {
20639
- return /* @__PURE__ */ jsx190("div", { className, children: /* @__PURE__ */ jsx190(PushButtonSelectorError, { message: error, title }) });
20680
+ return /* @__PURE__ */ jsx190("div", { className, children: search ? /* @__PURE__ */ jsxs151("div", { className: "space-y-4", children: [
20681
+ title && /* @__PURE__ */ jsx190("h3", { className: "text-ods-text-primary text-h5", children: title }),
20682
+ searchInput,
20683
+ /* @__PURE__ */ jsx190(PushButtonSelectorError, { message: error })
20684
+ ] }) : /* @__PURE__ */ jsx190(PushButtonSelectorError, { message: error, title }) });
20640
20685
  }
20641
20686
  const validSelectedIds = options.length > 0 ? selectedIds.filter((id) => options.some((option) => option.id === id)) : selectedIds;
20642
20687
  if (process.env.NODE_ENV === "development" && options.length > 0 && validSelectedIds.length !== selectedIds.length) {
@@ -20728,9 +20773,26 @@ function PushButtonSelector({
20728
20773
  ungroupedOptions.length > 0 && /* @__PURE__ */ jsx190("div", { className: "space-y-2", children: ungroupedOptions.map(renderOption) })
20729
20774
  ] });
20730
20775
  };
20776
+ const listContent = /* @__PURE__ */ jsxs151(Fragment30, { children: [
20777
+ options.length === 0 && emptyMessage !== void 0 ? /* @__PURE__ */ jsx190("div", { className: "text-ods-text-secondary text-h6", children: emptyMessage }) : renderOptionsContent(),
20778
+ lazyLoad ? /* @__PURE__ */ jsxs151(Fragment30, { children: [
20779
+ /* @__PURE__ */ jsx190("div", { ref: sentinelRef }),
20780
+ lazyLoad.isFetchingMore ? /* @__PURE__ */ jsx190("div", { className: "py-2 text-center text-ods-text-secondary text-h6", children: "Loading more\u2026" }) : null
20781
+ ] }) : null
20782
+ ] });
20731
20783
  return /* @__PURE__ */ jsx190(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ jsxs151("div", { className: `space-y-4 ${className}`, children: [
20732
20784
  title && /* @__PURE__ */ jsx190("h3", { className: "text-ods-text-primary text-h5", children: title }),
20733
- renderOptionsContent(),
20785
+ searchInput,
20786
+ lazyLoad ? /* @__PURE__ */ jsx190(
20787
+ "div",
20788
+ {
20789
+ ref: scrollRef,
20790
+ className: "space-y-4 overflow-y-auto rounded-lg border border-ods-border p-2",
20791
+ style: { height: lazyLoad.maxHeight ?? "336px" },
20792
+ children: listContent
20793
+ }
20794
+ ) : listContent,
20795
+ footer,
20734
20796
  selectionSummary && validSelectedIds.length > 0 && /* @__PURE__ */ jsxs151("div", { className: "rounded-lg border border-ods-success bg-ods-success-secondary p-4", children: [
20735
20797
  /* @__PURE__ */ jsxs151("div", { className: "mb-2 flex items-center gap-2", children: [
20736
20798
  /* @__PURE__ */ jsx190("div", { className: "h-2 w-2 rounded-full bg-ods-success" }),
@@ -20750,10 +20812,10 @@ function PushButtonSelector({
20750
20812
 
20751
20813
  // src/components/features/release-media-manager.tsx
20752
20814
  import { Trash2 as Trash24, Plus as Plus5, Image as ImageIcon3, Video as VideoIcon2, Upload as Upload3, Loader2 as Loader27, GripVertical as GripVertical2 } from "lucide-react";
20753
- import { useState as useState55, useRef as useRef31 } from "react";
20815
+ import { useState as useState55, useRef as useRef32 } from "react";
20754
20816
  import { jsx as jsx191, jsxs as jsxs152 } from "react/jsx-runtime";
20755
20817
  function ReleaseMediaManager({ media, onChange, onUpload, className = "" }) {
20756
- const fileInputRef = useRef31(null);
20818
+ const fileInputRef = useRef32(null);
20757
20819
  const [uploadingIndex, setUploadingIndex] = useState55(null);
20758
20820
  const handleFileSelect = async (event) => {
20759
20821
  const file = event.target.files?.[0];
@@ -21083,7 +21145,7 @@ var ConfidenceBadge = ({
21083
21145
  };
21084
21146
 
21085
21147
  // src/components/features/seo-editor-preview.tsx
21086
- import { Fragment as Fragment30, jsx as jsx194, jsxs as jsxs155 } from "react/jsx-runtime";
21148
+ import { Fragment as Fragment31, jsx as jsx194, jsxs as jsxs155 } from "react/jsx-runtime";
21087
21149
  var SEO_MEDIA_BOX_HEIGHT = "h-[280px]";
21088
21150
  function SEOEditorPreview({
21089
21151
  seoTitle,
@@ -21140,7 +21202,7 @@ function SEOEditorPreview({
21140
21202
  {
21141
21203
  label: "SEO Title",
21142
21204
  error: seoTitleTooLong ? `Too long: search engines may truncate this title (keep it under ${SEO_TITLE_MAX_LENGTH})` : null,
21143
- labelExtras: aiConfidenceSeoTitle !== void 0 ? /* @__PURE__ */ jsxs155(Fragment30, { children: [
21205
+ labelExtras: aiConfidenceSeoTitle !== void 0 ? /* @__PURE__ */ jsxs155(Fragment31, { children: [
21144
21206
  /* @__PURE__ */ jsx194(AIGeneratedBadge, {}),
21145
21207
  /* @__PURE__ */ jsx194(ConfidenceBadge, { confidence: aiConfidenceSeoTitle, showLabel: true, showPercentage: true, size: "sm" })
21146
21208
  ] }) : void 0,
@@ -21179,7 +21241,7 @@ function SEOEditorPreview({
21179
21241
  Field,
21180
21242
  {
21181
21243
  label: "SEO Keywords",
21182
- labelExtras: aiConfidenceSeoKeywords !== void 0 ? /* @__PURE__ */ jsxs155(Fragment30, { children: [
21244
+ labelExtras: aiConfidenceSeoKeywords !== void 0 ? /* @__PURE__ */ jsxs155(Fragment31, { children: [
21183
21245
  /* @__PURE__ */ jsx194(AIGeneratedBadge, {}),
21184
21246
  /* @__PURE__ */ jsx194(
21185
21247
  ConfidenceBadge,
@@ -21212,7 +21274,7 @@ function SEOEditorPreview({
21212
21274
  {
21213
21275
  label: "SEO Description",
21214
21276
  error: seoDescriptionTooLong ? `Too long: search engines may truncate this description (keep it under ${SEO_DESCRIPTION_MAX_LENGTH})` : null,
21215
- labelExtras: aiConfidenceSeoDescription !== void 0 ? /* @__PURE__ */ jsxs155(Fragment30, { children: [
21277
+ labelExtras: aiConfidenceSeoDescription !== void 0 ? /* @__PURE__ */ jsxs155(Fragment31, { children: [
21216
21278
  /* @__PURE__ */ jsx194(AIGeneratedBadge, {}),
21217
21279
  /* @__PURE__ */ jsx194(
21218
21280
  ConfidenceBadge,
@@ -21303,7 +21365,7 @@ function SEOEditorPreview({
21303
21365
  "flex cursor-pointer flex-col items-center justify-center rounded-lg border-2 border-dashed border-ods-border bg-ods-bg-hover transition-colors hover:border-ods-accent"
21304
21366
  ),
21305
21367
  onClick: () => onOgImageUpload && fileInputRef?.click(),
21306
- children: isUploading ? /* @__PURE__ */ jsx194(Loader28, { className: "h-8 w-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs155(Fragment30, { children: [
21368
+ children: isUploading ? /* @__PURE__ */ jsx194(Loader28, { className: "h-8 w-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs155(Fragment31, { children: [
21307
21369
  /* @__PURE__ */ jsx194(Upload4, { className: "mb-2 h-8 w-8 text-ods-text-secondary" }),
21308
21370
  /* @__PURE__ */ jsx194("span", { className: "text-ods-text-secondary text-h6", children: onOgImageUpload ? "Click to upload OG image" : "No image" })
21309
21371
  ] })
@@ -21815,8 +21877,8 @@ function VideoBitesDisplay({
21815
21877
 
21816
21878
  // src/components/features/walkthrough-video.tsx
21817
21879
  import * as DialogPrimitive2 from "@radix-ui/react-dialog";
21818
- import { useCallback as useCallback20, useEffect as useEffect29, useLayoutEffect as useLayoutEffect2, useMemo as useMemo19, useRef as useRef32, useState as useState58 } from "react";
21819
- import { Fragment as Fragment31, jsx as jsx201, jsxs as jsxs160 } from "react/jsx-runtime";
21880
+ import { useCallback as useCallback20, useEffect as useEffect30, useLayoutEffect as useLayoutEffect2, useMemo as useMemo19, useRef as useRef33, useState as useState58 } from "react";
21881
+ import { Fragment as Fragment32, jsx as jsx201, jsxs as jsxs160 } from "react/jsx-runtime";
21820
21882
  var isAtEnd = (duration, time) => duration > 0 && duration - time < 1;
21821
21883
  function theaterSeedFromLive(live, fallbackTime, fallbackMuted) {
21822
21884
  const time = live?.getCurrentTime() ?? 0;
@@ -21857,7 +21919,7 @@ function WalkthroughVideo({
21857
21919
  const [dismissed, setDismissed] = useState58(false);
21858
21920
  const hasVideo = video != null;
21859
21921
  const videoId = video?.id;
21860
- useEffect29(() => {
21922
+ useEffect30(() => {
21861
21923
  let idleHandle = null;
21862
21924
  if (!hasVideo) return void 0;
21863
21925
  const timer = setTimeout(() => {
@@ -21902,13 +21964,13 @@ function WalkthroughVideo({
21902
21964
  const [openState, setOpenState] = useState58(Boolean(defaultOpen) || deepLinkHit);
21903
21965
  const open = openProp !== void 0 ? openProp : openState;
21904
21966
  const [pausedOpenSession, setPausedOpenSession] = useState58(Boolean(defaultOpen && defaultOpenPaused) || deepLinkHit);
21905
- const previewHandleRef = useRef32(null);
21906
- const theaterHandleRef = useRef32(null);
21907
- const theaterForcedMuteRef = useRef32(false);
21908
- const resumeHandleRef = useRef32(null);
21909
- const closeButtonRef = useRef32(null);
21910
- const userMutedRef = useRef32(false);
21911
- const endedLatchRef = useRef32(false);
21967
+ const previewHandleRef = useRef33(null);
21968
+ const theaterHandleRef = useRef33(null);
21969
+ const theaterForcedMuteRef = useRef33(false);
21970
+ const resumeHandleRef = useRef33(null);
21971
+ const closeButtonRef = useRef33(null);
21972
+ const userMutedRef = useRef33(false);
21973
+ const endedLatchRef = useRef33(false);
21912
21974
  const [hovered, setHovered] = useState58(false);
21913
21975
  const [handoff, setHandoff] = useState58(null);
21914
21976
  const [suspended, setSuspended] = useState58(false);
@@ -21923,7 +21985,7 @@ function WalkthroughVideo({
21923
21985
  const previewAllowed = !previewSuppressed && !isYouTube;
21924
21986
  const footerFadeKey = `${mounted ? 1 : 0}|${inline ? 1 : 0}|${hideNearSelector}|${pathname}`;
21925
21987
  const footerHidden = footerObservation?.key === footerFadeKey && footerObservation.hidden;
21926
- useEffect29(() => {
21988
+ useEffect30(() => {
21927
21989
  if (!mounted) return void 0;
21928
21990
  if (inline) return void 0;
21929
21991
  const el = typeof document !== "undefined" ? document.querySelector(hideNearSelector) : null;
@@ -21935,7 +21997,7 @@ function WalkthroughVideo({
21935
21997
  io.observe(el);
21936
21998
  return () => io.disconnect();
21937
21999
  }, [mounted, inline, hideNearSelector, pathname, footerFadeKey]);
21938
- useEffect29(() => {
22000
+ useEffect30(() => {
21939
22001
  if (!resumeMode) return void 0;
21940
22002
  const onVis = () => {
21941
22003
  if (document.visibilityState === "hidden") {
@@ -21951,7 +22013,7 @@ function WalkthroughVideo({
21951
22013
  }, [resumeMode]);
21952
22014
  if (footerHidden && !cardPaused) setCardPaused(true);
21953
22015
  if (footerHidden && hovered) setHovered(false);
21954
- useEffect29(() => {
22016
+ useEffect30(() => {
21955
22017
  if (!footerHidden) return;
21956
22018
  const h = resumeHandleRef.current ?? previewHandleRef.current;
21957
22019
  try {
@@ -21959,10 +22021,10 @@ function WalkthroughVideo({
21959
22021
  } catch {
21960
22022
  }
21961
22023
  }, [footerHidden, resumeMode, hovered]);
21962
- const cardModeRef = useRef32("poster");
22024
+ const cardModeRef = useRef33("poster");
21963
22025
  const [selfDrivenFor, setSelfDrivenFor] = useState58(null);
21964
- const justClosedRef = useRef32(false);
21965
- const justClosedTimerRef = useRef32(null);
22026
+ const justClosedRef = useRef33(false);
22027
+ const justClosedTimerRef = useRef33(null);
21966
22028
  const commitOpen = useCallback20(
21967
22029
  (next) => {
21968
22030
  if (!next) {
@@ -22034,7 +22096,7 @@ function WalkthroughVideo({
22034
22096
  }
22035
22097
  }
22036
22098
  }
22037
- const prevOpenCommittedRef = useRef32(open);
22099
+ const prevOpenCommittedRef = useRef33(open);
22038
22100
  useLayoutEffect2(() => {
22039
22101
  if (prevOpenCommittedRef.current === open) return;
22040
22102
  prevOpenCommittedRef.current = open;
@@ -22105,11 +22167,11 @@ function WalkthroughVideo({
22105
22167
  },
22106
22168
  [setCardFallback, setCardMuted]
22107
22169
  );
22108
- const handoffRef = useRef32(handoff);
22109
- useEffect29(() => {
22170
+ const handoffRef = useRef33(handoff);
22171
+ useEffect30(() => {
22110
22172
  handoffRef.current = handoff;
22111
22173
  });
22112
- useEffect29(() => {
22174
+ useEffect30(() => {
22113
22175
  if (resumeMode) {
22114
22176
  setCardMuted(handoffRef.current?.muted ?? false);
22115
22177
  setCardPaused(handoffRef.current?.playing === false);
@@ -22202,7 +22264,7 @@ function WalkthroughVideo({
22202
22264
  );
22203
22265
  const cardActive = !open && previewAllowed && hovered && !resumeMode;
22204
22266
  const cardMode = resumeMode ? "resume" : cardActive ? "preview" : "poster";
22205
- useEffect29(() => {
22267
+ useEffect30(() => {
22206
22268
  cardModeRef.current = cardMode;
22207
22269
  });
22208
22270
  if (!video || !video.mainVideoUrl && !video.youtubeUrl) return null;
@@ -22366,7 +22428,7 @@ function WalkthroughVideo({
22366
22428
  ]
22367
22429
  }
22368
22430
  );
22369
- return /* @__PURE__ */ jsxs160(Fragment31, { children: [
22431
+ return /* @__PURE__ */ jsxs160(Fragment32, { children: [
22370
22432
  showCard && (inline ? (
22371
22433
  // No wrapper: a positioning / z-index / safe-area shell around an
22372
22434
  // in-flow block is exactly what stops it sizing to its container.
@@ -23859,7 +23921,7 @@ function ViewToggle({
23859
23921
  // src/components/features/policy-configuration-panel.tsx
23860
23922
  import { ChevronDown as ChevronDown8, Shield } from "lucide-react";
23861
23923
  import { useState as useState61 } from "react";
23862
- import { Fragment as Fragment32, jsx as jsx220, jsxs as jsxs175 } from "react/jsx-runtime";
23924
+ import { Fragment as Fragment33, jsx as jsx220, jsxs as jsxs175 } from "react/jsx-runtime";
23863
23925
  var approvalLevelLabels = {
23864
23926
  ALLOW: "Allow",
23865
23927
  ASK_USER: "Ask User",
@@ -23925,7 +23987,7 @@ var PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
23925
23987
  var CategorySection = ({ category, editMode, isExpanded, bulkLevel, onToggle, onBulkLevelChange, onPolicyPermissionChange }) => {
23926
23988
  const { innerRef, containerStyle } = useCollapsible({ expanded: isExpanded, durationMs: 300 });
23927
23989
  const handleBulkChange = (level) => onBulkLevelChange(category.id, level);
23928
- return /* @__PURE__ */ jsxs175(Fragment32, { children: [
23990
+ return /* @__PURE__ */ jsxs175(Fragment33, { children: [
23929
23991
  /* @__PURE__ */ jsxs175(
23930
23992
  "div",
23931
23993
  {
@@ -24065,8 +24127,8 @@ PolicyConfigurationPanel.displayName = "PolicyConfigurationPanel";
24065
24127
 
24066
24128
  // src/components/features/waitlist-form.tsx
24067
24129
  import { getCountries as getCountries2 } from "libphonenumber-js";
24068
- import { useEffect as useEffect30, useState as useState62 } from "react";
24069
- import { Fragment as Fragment33, jsx as jsx221, jsxs as jsxs176 } from "react/jsx-runtime";
24130
+ import { useEffect as useEffect31, useState as useState62 } from "react";
24131
+ import { Fragment as Fragment34, jsx as jsx221, jsxs as jsxs176 } from "react/jsx-runtime";
24070
24132
  function WaitlistForm({
24071
24133
  id = "waitlist-form",
24072
24134
  className,
@@ -24102,7 +24164,7 @@ function WaitlistForm({
24102
24164
  setEmail(defaultEmail);
24103
24165
  }
24104
24166
  }
24105
- useEffect30(() => {
24167
+ useEffect31(() => {
24106
24168
  if (!geoApiUrl) return;
24107
24169
  const supportedCountries = new Set(getCountries2());
24108
24170
  const isSupportedCountry = (value) => supportedCountries.has(value);
@@ -24227,7 +24289,7 @@ function WaitlistForm({
24227
24289
  error: showConsentError ? "Please agree to SMS notifications to continue." : void 0,
24228
24290
  disabled: isSubmitting,
24229
24291
  label: smsCheckboxLabel,
24230
- description: /* @__PURE__ */ jsxs176(Fragment33, { children: [
24292
+ description: /* @__PURE__ */ jsxs176(Fragment34, { children: [
24231
24293
  consentText,
24232
24294
  " View our ",
24233
24295
  /* @__PURE__ */ jsx221(
@@ -24280,10 +24342,10 @@ import {
24280
24342
  createContext as createContext6,
24281
24343
  useCallback as useCallback22,
24282
24344
  useContext as useContext6,
24283
- useEffect as useEffect31,
24345
+ useEffect as useEffect32,
24284
24346
  useMemo as useMemo20,
24285
24347
  useReducer,
24286
- useRef as useRef33,
24348
+ useRef as useRef34,
24287
24349
  useState as useState63
24288
24350
  } from "react";
24289
24351
  import { jsx as jsx222 } from "react/jsx-runtime";
@@ -24371,8 +24433,8 @@ function NotificationsProvider({
24371
24433
  const [showPopups, setShowPopupsState] = useState63(defaultShowPopups);
24372
24434
  const [showDesktopPopups, setShowDesktopPopupsState] = useState63(defaultShowDesktopPopups);
24373
24435
  const desktopPopupsConfigured = onShowDesktopPopupsChange !== void 0;
24374
- const actionsRef = useRef33(actions);
24375
- useEffect31(() => {
24436
+ const actionsRef = useRef34(actions);
24437
+ useEffect32(() => {
24376
24438
  actionsRef.current = actions;
24377
24439
  }, [actions]);
24378
24440
  const addNotification = useCallback22(
@@ -24510,7 +24572,7 @@ function useOptionalNotifications() {
24510
24572
  }
24511
24573
 
24512
24574
  // src/components/features/notifications/notification-drawer.tsx
24513
- import { useEffect as useEffect34, useRef as useRef35 } from "react";
24575
+ import { useEffect as useEffect35, useRef as useRef36 } from "react";
24514
24576
 
24515
24577
  // src/components/navigation/app-layout-context.ts
24516
24578
  import { createContext as createContext7, useContext as useContext7 } from "react";
@@ -24531,8 +24593,8 @@ import {
24531
24593
  forwardRef as forwardRef30,
24532
24594
  useCallback as useCallback23,
24533
24595
  useContext as useContext8,
24534
- useEffect as useEffect32,
24535
- useRef as useRef34,
24596
+ useEffect as useEffect33,
24597
+ useRef as useRef35,
24536
24598
  useState as useState64
24537
24599
  } from "react";
24538
24600
  import { jsx as jsx223, jsxs as jsxs177 } from "react/jsx-runtime";
@@ -24556,9 +24618,9 @@ var AppLayoutDrawerRoot = ({
24556
24618
  [isControlled, onOpenChange]
24557
24619
  );
24558
24620
  const coordination = useAppLayoutDrawerCoordination();
24559
- const openRef = useRef34(open);
24560
- const handleOpenChangeRef = useRef34(handleOpenChange);
24561
- useEffect32(() => {
24621
+ const openRef = useRef35(open);
24622
+ const handleOpenChangeRef = useRef35(handleOpenChange);
24623
+ useEffect33(() => {
24562
24624
  openRef.current = open;
24563
24625
  handleOpenChangeRef.current = handleOpenChange;
24564
24626
  });
@@ -24567,10 +24629,10 @@ var AppLayoutDrawerRoot = ({
24567
24629
  if (openRef.current) handleOpenChangeRef.current(false);
24568
24630
  }
24569
24631
  }));
24570
- useEffect32(() => {
24632
+ useEffect33(() => {
24571
24633
  if (open) coordination?.notifyDrawerDidOpen(selfHandle);
24572
24634
  }, [open, coordination, selfHandle]);
24573
- useEffect32(() => coordination?.registerDrawer(selfHandle), [coordination, selfHandle]);
24635
+ useEffect33(() => coordination?.registerDrawer(selfHandle), [coordination, selfHandle]);
24574
24636
  return /* @__PURE__ */ jsx223(DrawerOpenContext.Provider, { value: open, children: /* @__PURE__ */ jsx223(DialogPrimitive3.Root, { ...rest, open, onOpenChange: handleOpenChange, modal, children }) });
24575
24637
  };
24576
24638
  AppLayoutDrawerRoot.displayName = "AppLayoutDrawer";
@@ -24650,7 +24712,7 @@ function useContainedResizableSize({
24650
24712
  container
24651
24713
  }) {
24652
24714
  const [available, setAvailable] = useState64(0);
24653
- useEffect32(() => {
24715
+ useEffect33(() => {
24654
24716
  if (!enabled || !container) return void 0;
24655
24717
  const update = () => {
24656
24718
  setAvailable(isHorizontal ? container.clientWidth : container.clientHeight);
@@ -24684,7 +24746,7 @@ function useContainedResizableSize({
24684
24746
  const [rawSize, setSizeRaw] = useState64(readInitial);
24685
24747
  const size = enabled ? clampToContainer(rawSize) : rawSize;
24686
24748
  const setSize = useCallback23((next) => setSizeRaw(clampToContainer(next)), [clampToContainer]);
24687
- useEffect32(() => {
24749
+ useEffect33(() => {
24688
24750
  if (!enabled || !storageKey || typeof window === "undefined") return;
24689
24751
  try {
24690
24752
  window.localStorage.setItem(storageKey, String(Math.round(size)));
@@ -24702,7 +24764,7 @@ function AppLayoutDrawerResizeHandle({
24702
24764
  ariaLabel
24703
24765
  }) {
24704
24766
  const isHorizontal = HORIZONTAL_SIDES.has(side);
24705
- const startRef = useRef34(null);
24767
+ const startRef = useRef35(null);
24706
24768
  const direction = side === "right" || side === "bottom" ? -1 : 1;
24707
24769
  const handlePointerDown = (e) => {
24708
24770
  if (e.button !== 0 && e.pointerType === "mouse") return;
@@ -24815,7 +24877,7 @@ var AppLayoutDrawerContent = forwardRef30(
24815
24877
  const [hasOpened, setHasOpened] = useState64(Boolean(open));
24816
24878
  if (open && !hasOpened) setHasOpened(true);
24817
24879
  const persist = keepMounted && hasOpened;
24818
- useEffect32(() => {
24880
+ useEffect33(() => {
24819
24881
  if (!debugLayoutShift) return void 0;
24820
24882
  if (!open) return void 0;
24821
24883
  if (typeof window === "undefined") return void 0;
@@ -24867,7 +24929,7 @@ var AppLayoutDrawerContent = forwardRef30(
24867
24929
  const isHorizontal = HORIZONTAL_SIDES.has(resolvedSide);
24868
24930
  const initialSize = defaultSize ?? (isHorizontal ? 560 : 480);
24869
24931
  const [isMobile, setIsMobile] = useState64(false);
24870
- useEffect32(() => {
24932
+ useEffect33(() => {
24871
24933
  if (typeof window === "undefined") return void 0;
24872
24934
  const mq = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`);
24873
24935
  const update = () => setIsMobile(mq.matches);
@@ -24978,7 +25040,7 @@ var AppLayoutDrawerBody = DrawerBody;
24978
25040
  var AppLayoutDrawerFooter = DrawerFooter;
24979
25041
 
24980
25042
  // src/components/features/notifications/notification-tile.tsx
24981
- import { useEffect as useEffect33, useState as useState65 } from "react";
25043
+ import { useEffect as useEffect34, useState as useState65 } from "react";
24982
25044
  import { jsx as jsx224, jsxs as jsxs178 } from "react/jsx-runtime";
24983
25045
  var variantBySeverity = {
24984
25046
  INFO: "info",
@@ -25025,7 +25087,7 @@ function NotificationTile({
25025
25087
  const [initialElapsed] = useState65(() => Date.now() - createdAt);
25026
25088
  const isLive = !read && !settled && initialElapsed < liveDurationMs;
25027
25089
  const counting = isLive && !paused;
25028
- useEffect33(() => {
25090
+ useEffect34(() => {
25029
25091
  if (!counting) return void 0;
25030
25092
  const remaining = Math.max(0, liveDurationMs - initialElapsed);
25031
25093
  const timer = window.setTimeout(() => {
@@ -25125,7 +25187,7 @@ function NotificationTile({
25125
25187
  }
25126
25188
 
25127
25189
  // src/components/features/notifications/notification-drawer.tsx
25128
- import { Fragment as Fragment34, jsx as jsx225, jsxs as jsxs179 } from "react/jsx-runtime";
25190
+ import { Fragment as Fragment35, jsx as jsx225, jsxs as jsxs179 } from "react/jsx-runtime";
25129
25191
  function NotificationDrawer({
25130
25192
  className,
25131
25193
  liveDurationMs,
@@ -25158,7 +25220,7 @@ function NotificationDrawer({
25158
25220
  } = ctx;
25159
25221
  const renderTile = renderTileProp ?? ctxRenderTile;
25160
25222
  const unreadNotifications = notifications.filter((n) => !n.read);
25161
- const content = /* @__PURE__ */ jsxs179(Fragment34, { children: [
25223
+ const content = /* @__PURE__ */ jsxs179(Fragment35, { children: [
25162
25224
  /* @__PURE__ */ jsx225("div", { className: "px-[var(--spacing-system-m)] pt-[var(--spacing-system-m)]", children: /* @__PURE__ */ jsx225(
25163
25225
  DrawerTitle,
25164
25226
  {
@@ -25244,13 +25306,13 @@ function DrawerScrollList({
25244
25306
  loadMoreRootMargin,
25245
25307
  renderTile
25246
25308
  }) {
25247
- const scrollRef = useRef35(null);
25248
- const sentinelRef = useRef35(null);
25249
- const loadMoreRef = useRef35(loadMore);
25250
- useEffect34(() => {
25309
+ const scrollRef = useRef36(null);
25310
+ const sentinelRef = useRef36(null);
25311
+ const loadMoreRef = useRef36(loadMore);
25312
+ useEffect35(() => {
25251
25313
  loadMoreRef.current = loadMore;
25252
25314
  });
25253
- useEffect34(() => {
25315
+ useEffect35(() => {
25254
25316
  if (!loadMore || !hasMore || isLoadingMore) return void 0;
25255
25317
  const sentinel = sentinelRef.current;
25256
25318
  const root = scrollRef.current;
@@ -25270,7 +25332,7 @@ function DrawerScrollList({
25270
25332
  {
25271
25333
  ref: scrollRef,
25272
25334
  className: "flex flex-1 flex-col gap-[var(--spacing-system-xs)] overflow-y-auto px-[var(--spacing-system-m)]",
25273
- children: isEmpty && !isLoadingMore ? /* @__PURE__ */ jsx225(EmptyState, {}) : /* @__PURE__ */ jsxs179(Fragment34, { children: [
25335
+ children: isEmpty && !isLoadingMore ? /* @__PURE__ */ jsx225(EmptyState, {}) : /* @__PURE__ */ jsxs179(Fragment35, { children: [
25274
25336
  unreadNotifications.map((n) => {
25275
25337
  const custom = renderTile?.(n, { onComplete, onSettle, liveDurationMs });
25276
25338
  if (custom) return /* @__PURE__ */ jsx225("div", { children: custom }, n.id);
@@ -25292,7 +25354,7 @@ function DrawerScrollList({
25292
25354
  );
25293
25355
  }
25294
25356
  function DrawerLoadingTiles() {
25295
- return /* @__PURE__ */ jsxs179(Fragment34, { children: [
25357
+ return /* @__PURE__ */ jsxs179(Fragment35, { children: [
25296
25358
  /* @__PURE__ */ jsx225(
25297
25359
  "div",
25298
25360
  {
@@ -25374,7 +25436,7 @@ function NotificationsHistoryButton({ onClick, historyHref }) {
25374
25436
  }
25375
25437
 
25376
25438
  // src/components/features/notifications/notification-popups.tsx
25377
- import { useEffect as useEffect35, useState as useState66 } from "react";
25439
+ import { useEffect as useEffect36, useState as useState66 } from "react";
25378
25440
  import { jsx as jsx226 } from "react/jsx-runtime";
25379
25441
  var positionClasses = {
25380
25442
  "top-right": "top-4 right-4",
@@ -25393,7 +25455,7 @@ function NotificationPopups({
25393
25455
  const ctx = useOptionalNotifications();
25394
25456
  const [now, setNow] = useState66(() => Date.now());
25395
25457
  const hasAgeingNotifications = Boolean(ctx?.notifications.some((n) => !n.read && !n.settled));
25396
- useEffect35(() => {
25458
+ useEffect36(() => {
25397
25459
  if (!hasAgeingNotifications) return void 0;
25398
25460
  const id = setInterval(() => setNow(Date.now()), 500);
25399
25461
  return () => clearInterval(id);
@@ -25522,7 +25584,7 @@ function approvalMetaToBatchData(approval) {
25522
25584
  }
25523
25585
 
25524
25586
  // src/components/features/notifications/approval-request-notification-tile.tsx
25525
- import { Fragment as Fragment35, jsx as jsx227, jsxs as jsxs180 } from "react/jsx-runtime";
25587
+ import { Fragment as Fragment36, jsx as jsx227, jsxs as jsxs180 } from "react/jsx-runtime";
25526
25588
  function ApprovalRequestNotificationTile({
25527
25589
  notification,
25528
25590
  onApprove,
@@ -25572,7 +25634,7 @@ function ApprovalRequestNotificationTile({
25572
25634
  className,
25573
25635
  paused: pinned || processing,
25574
25636
  actions: /* @__PURE__ */ jsxs180("div", { className: "flex w-full items-center gap-[var(--spacing-system-xs)]", children: [
25575
- status === "pending" ? /* @__PURE__ */ jsxs180(Fragment35, { children: [
25637
+ status === "pending" ? /* @__PURE__ */ jsxs180(Fragment36, { children: [
25576
25638
  /* @__PURE__ */ jsx227(
25577
25639
  Button,
25578
25640
  {
@@ -25657,7 +25719,7 @@ function useOptionalTimeTracker() {
25657
25719
  import { useState as useState70 } from "react";
25658
25720
 
25659
25721
  // src/components/features/time-tracker/use-tracker-clock.ts
25660
- import { useEffect as useEffect36, useState as useState69 } from "react";
25722
+ import { useEffect as useEffect37, useState as useState69 } from "react";
25661
25723
  function formatElapsed(totalMs) {
25662
25724
  const totalSeconds = Math.max(0, Math.floor(totalMs / 1e3));
25663
25725
  const hours = Math.floor(totalSeconds / 3600);
@@ -25668,7 +25730,7 @@ function formatElapsed(totalMs) {
25668
25730
  }
25669
25731
  function useTrackerClock({ status, runningSince, accumulatedMs = 0 }) {
25670
25732
  const [now, setNow] = useState69(() => Date.now());
25671
- useEffect36(() => {
25733
+ useEffect37(() => {
25672
25734
  if (status !== "tracking") return void 0;
25673
25735
  const tick = () => setNow(Date.now());
25674
25736
  tick();
@@ -25989,7 +26051,7 @@ function LastEntryRow({ entry, onClick }) {
25989
26051
 
25990
26052
  // src/components/features/time-tracker/time-tracker-header-button.tsx
25991
26053
  import * as PopoverPrimitive7 from "@radix-ui/react-popover";
25992
- import { useEffect as useEffect37, useRef as useRef36, useState as useState71 } from "react";
26054
+ import { useEffect as useEffect38, useRef as useRef37, useState as useState71 } from "react";
25993
26055
 
25994
26056
  // src/components/navigation/unread-dot.tsx
25995
26057
  import { jsx as jsx230 } from "react/jsx-runtime";
@@ -26057,7 +26119,7 @@ function HeaderButton({
26057
26119
  }
26058
26120
 
26059
26121
  // src/components/features/time-tracker/time-tracker-header-button.tsx
26060
- import { Fragment as Fragment36, jsx as jsx232, jsxs as jsxs183 } from "react/jsx-runtime";
26122
+ import { Fragment as Fragment37, jsx as jsx232, jsxs as jsxs183 } from "react/jsx-runtime";
26061
26123
  function TimeTrackerHeaderButton({ className, disabled }) {
26062
26124
  const ctx = useOptionalTimeTracker();
26063
26125
  const elapsedLabel = useTrackerClock({
@@ -26068,9 +26130,9 @@ function TimeTrackerHeaderButton({ className, disabled }) {
26068
26130
  const layoutContainer = useAppLayoutDrawerContainer();
26069
26131
  const coordination = useAppLayoutDrawerCoordination();
26070
26132
  const isOpen = ctx?.isOpen ?? false;
26071
- const isOpenRef = useRef36(isOpen);
26072
- const closeRef = useRef36(ctx?.close);
26073
- useEffect37(() => {
26133
+ const isOpenRef = useRef37(isOpen);
26134
+ const closeRef = useRef37(ctx?.close);
26135
+ useEffect38(() => {
26074
26136
  isOpenRef.current = isOpen;
26075
26137
  closeRef.current = ctx?.close;
26076
26138
  });
@@ -26079,10 +26141,10 @@ function TimeTrackerHeaderButton({ className, disabled }) {
26079
26141
  if (isOpenRef.current) closeRef.current?.();
26080
26142
  }
26081
26143
  }));
26082
- useEffect37(() => {
26144
+ useEffect38(() => {
26083
26145
  if (isOpen) coordination?.notifyDrawerDidOpen(selfHandle);
26084
26146
  }, [isOpen, coordination, selfHandle]);
26085
- useEffect37(() => coordination?.registerDrawer(selfHandle), [coordination, selfHandle]);
26147
+ useEffect38(() => coordination?.registerDrawer(selfHandle), [coordination, selfHandle]);
26086
26148
  if (!ctx) return null;
26087
26149
  const { open, close, status } = ctx;
26088
26150
  const isPaused = status === "paused";
@@ -26102,7 +26164,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
26102
26164
  isActive && "md:w-auto md:min-w-[144px] md:justify-center md:gap-[var(--spacing-system-xsf)] md:px-[var(--spacing-system-sf)]",
26103
26165
  className
26104
26166
  ),
26105
- icon: /* @__PURE__ */ jsxs183(Fragment36, { children: [
26167
+ icon: /* @__PURE__ */ jsxs183(Fragment37, { children: [
26106
26168
  /* @__PURE__ */ jsx232(
26107
26169
  ClockHistoryIcon,
26108
26170
  {
@@ -26157,7 +26219,7 @@ function TimeTrackerHeaderButton({ className, disabled }) {
26157
26219
  import { combine as combine3 } from "@atlaskit/pragmatic-drag-and-drop/combine";
26158
26220
  import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
26159
26221
  import { preventUnhandled } from "@atlaskit/pragmatic-drag-and-drop/utils/prevent-unhandled";
26160
- import { Fragment as Fragment39, useCallback as useCallback27, useEffect as useEffect41, useMemo as useMemo23, useRef as useRef41, useState as useState76 } from "react";
26222
+ import { Fragment as Fragment40, useCallback as useCallback27, useEffect as useEffect42, useMemo as useMemo23, useRef as useRef42, useState as useState76 } from "react";
26161
26223
  import { createPortal } from "react-dom";
26162
26224
 
26163
26225
  // src/utils/auto-scroll-ancestors.ts
@@ -26270,7 +26332,7 @@ function aimToChange(columns, ticketId, aim) {
26270
26332
  // src/components/features/board/board-column.tsx
26271
26333
  import { attachClosestEdge as attachClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
26272
26334
  import { dropTargetForElements as dropTargetForElements2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
26273
- import { memo as memo6, useCallback as useCallback25, useEffect as useEffect39, useRef as useRef39, useState as useState74 } from "react";
26335
+ import { memo as memo6, useCallback as useCallback25, useEffect as useEffect40, useRef as useRef40, useState as useState74 } from "react";
26274
26336
 
26275
26337
  // src/components/features/board/board-column-header.tsx
26276
26338
  import { jsx as jsx233, jsxs as jsxs184 } from "react/jsx-runtime";
@@ -26381,7 +26443,7 @@ function isSameAim(a, b) {
26381
26443
  }
26382
26444
 
26383
26445
  // src/components/features/board/use-lane-scroll-anchor.ts
26384
- import { useRef as useRef37 } from "react";
26446
+ import { useRef as useRef38 } from "react";
26385
26447
  var TICKET_ID_ATTRIBUTE = "data-ticket-id";
26386
26448
  function cardPositions(root) {
26387
26449
  return Array.from(root.querySelectorAll(`[${TICKET_ID_ATTRIBUTE}]`)).map((element) => ({
@@ -26390,7 +26452,7 @@ function cardPositions(root) {
26390
26452
  }));
26391
26453
  }
26392
26454
  function useLaneScrollAnchor(scrollRef, tickets) {
26393
- const positionsRef = useRef37([]);
26455
+ const positionsRef = useRef38([]);
26394
26456
  useIsomorphicLayoutEffect(() => {
26395
26457
  const root = scrollRef.current;
26396
26458
  if (!root) return;
@@ -26441,9 +26503,9 @@ import { preserveOffsetOnSource } from "@atlaskit/pragmatic-drag-and-drop/elemen
26441
26503
  import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview";
26442
26504
  import {
26443
26505
  memo as memo5,
26444
- useEffect as useEffect38,
26506
+ useEffect as useEffect39,
26445
26507
  useMemo as useMemo22,
26446
- useRef as useRef38,
26508
+ useRef as useRef39,
26447
26509
  useState as useState73
26448
26510
  } from "react";
26449
26511
 
@@ -26543,7 +26605,7 @@ function hasMoveSettled(columns, move) {
26543
26605
  }
26544
26606
 
26545
26607
  // src/components/features/board/ticket-card.tsx
26546
- import { Fragment as Fragment37, jsx as jsx235, jsxs as jsxs186 } from "react/jsx-runtime";
26608
+ import { Fragment as Fragment38, jsx as jsx235, jsxs as jsxs186 } from "react/jsx-runtime";
26547
26609
  var PRIORITY_COLOR_CLASS = {
26548
26610
  low: "text-ods-text-secondary",
26549
26611
  medium: "text-ods-info",
@@ -26604,7 +26666,7 @@ function TicketCardBody({ ticket, columnColor, renderAssignSlot, onApprove, onRe
26604
26666
  ] }) : null;
26605
26667
  const timestampLabel = ticket.createdAt ? formatTicketRelativeTime(ticket.createdAt) : null;
26606
26668
  const tooltipLabel = ticket.createdAt ? formatTicketFullTimestamp(ticket.createdAt) : null;
26607
- return /* @__PURE__ */ jsxs186(Fragment37, { children: [
26669
+ return /* @__PURE__ */ jsxs186(Fragment38, { children: [
26608
26670
  /* @__PURE__ */ jsxs186("div", { className: "flex items-start gap-[var(--spacing-system-sf)]", children: [
26609
26671
  /* @__PURE__ */ jsxs186("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-zero)]", title: ticket.title, children: [
26610
26672
  /* @__PURE__ */ jsx235("p", { className: "truncate text-ods-text-primary text-h3", children: ticket.title }),
@@ -26673,9 +26735,9 @@ var TicketCard = memo5(function TicketCardImpl({
26673
26735
  onApprove,
26674
26736
  onReject
26675
26737
  }) {
26676
- const ref = useRef38(null);
26677
- const ticketRef = useRef38(ticket);
26678
- useEffect38(() => {
26738
+ const ref = useRef39(null);
26739
+ const ticketRef = useRef39(ticket);
26740
+ useEffect39(() => {
26679
26741
  ticketRef.current = ticket;
26680
26742
  });
26681
26743
  const [isDragging, setIsDragging] = useState73(false);
@@ -26689,7 +26751,7 @@ var TicketCard = memo5(function TicketCardImpl({
26689
26751
  e.preventDefault();
26690
26752
  lift(ticket.id);
26691
26753
  };
26692
- useEffect38(() => {
26754
+ useEffect39(() => {
26693
26755
  const element = ref.current;
26694
26756
  if (!element || dragDisabled) return void 0;
26695
26757
  const identity = { type: "ticket", ticketId: ticket.id, columnId };
@@ -26895,7 +26957,7 @@ var TicketCardSkeleton = forwardRef31(
26895
26957
  TicketCardSkeleton.displayName = "TicketCardSkeleton";
26896
26958
 
26897
26959
  // src/components/features/board/board-column.tsx
26898
- import { Fragment as Fragment38, jsx as jsx237, jsxs as jsxs188 } from "react/jsx-runtime";
26960
+ import { Fragment as Fragment39, jsx as jsx237, jsxs as jsxs188 } from "react/jsx-runtime";
26899
26961
  var BoardColumn = memo6(function BoardColumnImpl({
26900
26962
  column,
26901
26963
  collapsed = false,
@@ -26911,9 +26973,9 @@ var BoardColumn = memo6(function BoardColumnImpl({
26911
26973
  joinLeft = false,
26912
26974
  joinRight = false
26913
26975
  }) {
26914
- const laneRef = useRef39(null);
26976
+ const laneRef = useRef40(null);
26915
26977
  const [isOver, setIsOver] = useState74(false);
26916
- useEffect39(() => {
26978
+ useEffect40(() => {
26917
26979
  const element = laneRef.current;
26918
26980
  if (!element || collapsed || column.dropDisabled) return void 0;
26919
26981
  return dropTargetForElements2({
@@ -26970,7 +27032,7 @@ var BoardColumn = memo6(function BoardColumnImpl({
26970
27032
  onArchive: !collapsed && column.archivable && onArchive ? () => onArchive(column.id) : void 0
26971
27033
  }
26972
27034
  ),
26973
- !collapsed && /* @__PURE__ */ jsxs188(Fragment38, { children: [
27035
+ !collapsed && /* @__PURE__ */ jsxs188(Fragment39, { children: [
26974
27036
  /* @__PURE__ */ jsx237("div", { "aria-hidden": true, className: "-mx-[var(--spacing-system-sf)] h-px shrink-0 bg-ods-border" }),
26975
27037
  /* @__PURE__ */ jsx237(
26976
27038
  ColumnBody,
@@ -26998,21 +27060,21 @@ function ColumnBody({
26998
27060
  onLoadMore,
26999
27061
  loadMoreRootMargin
27000
27062
  }) {
27001
- const scrollRef = useRef39(null);
27002
- const sentinelRef = useRef39(null);
27063
+ const scrollRef = useRef40(null);
27064
+ const sentinelRef = useRef40(null);
27003
27065
  useLaneScrollAnchor(scrollRef, column.tickets);
27004
- useEffect39(() => {
27066
+ useEffect40(() => {
27005
27067
  const element = scrollRef.current;
27006
27068
  if (!element) return void 0;
27007
27069
  return autoScrollColumn(element);
27008
27070
  }, []);
27009
- const loadMoreRef = useRef39(onLoadMore);
27010
- const columnIdRef = useRef39(column.id);
27011
- useEffect39(() => {
27071
+ const loadMoreRef = useRef40(onLoadMore);
27072
+ const columnIdRef = useRef40(column.id);
27073
+ useEffect40(() => {
27012
27074
  loadMoreRef.current = onLoadMore;
27013
27075
  columnIdRef.current = column.id;
27014
27076
  });
27015
- useEffect39(() => {
27077
+ useEffect40(() => {
27016
27078
  if (!column.hasMore || column.isLoadingMore) return void 0;
27017
27079
  const sentinel = sentinelRef.current;
27018
27080
  const root = scrollRef.current;
@@ -27063,7 +27125,7 @@ function ColumnBody({
27063
27125
  );
27064
27126
  }
27065
27127
  function SkeletonStack({ count = 4 }) {
27066
- return /* @__PURE__ */ jsx237(Fragment38, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx237(TicketCardSkeleton, {}, `skeleton-${i}`)) });
27128
+ return /* @__PURE__ */ jsx237(Fragment39, { children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx237(TicketCardSkeleton, {}, `skeleton-${i}`)) });
27067
27129
  }
27068
27130
  function EmptyState2({ columnId }) {
27069
27131
  const aim = useDropAim();
@@ -27088,14 +27150,14 @@ function resolveBoardDrop(columns, { source, target }) {
27088
27150
  }
27089
27151
 
27090
27152
  // src/components/features/board/use-board-collapse.ts
27091
- import { useCallback as useCallback26, useEffect as useEffect40, useRef as useRef40, useState as useState75 } from "react";
27153
+ import { useCallback as useCallback26, useEffect as useEffect41, useRef as useRef41, useState as useState75 } from "react";
27092
27154
  function useBoardCollapse(storageKey) {
27093
27155
  const [persisted, setPersisted] = useLocalStorage(storageKey ?? "__board_collapse_unused__", {});
27094
27156
  const [memory, setMemory] = useState75({});
27095
27157
  const collapsed = storageKey ? persisted : memory;
27096
27158
  const setMap = storageKey ? setPersisted : setMemory;
27097
- const setMapRef = useRef40(setMap);
27098
- useEffect40(() => {
27159
+ const setMapRef = useRef41(setMap);
27160
+ useEffect41(() => {
27099
27161
  setMapRef.current = setMap;
27100
27162
  });
27101
27163
  const toggle = useCallback26((columnId) => {
@@ -27141,10 +27203,10 @@ function Board({
27141
27203
  onThumbPointerMove,
27142
27204
  onThumbPointerUp
27143
27205
  } = useHorizontalScrollbar();
27144
- const columnsRef = useRef41(columns);
27145
- const onChangeRef = useRef41(onChange);
27146
- const boardRef = useRef41(null);
27147
- const scrollerRef = useRef41(null);
27206
+ const columnsRef = useRef42(columns);
27207
+ const onChangeRef = useRef42(onChange);
27208
+ const boardRef = useRef42(null);
27209
+ const scrollerRef = useRef42(null);
27148
27210
  const setScroller = useCallback27(
27149
27211
  (node) => {
27150
27212
  scrollerRef.current = node;
@@ -27155,9 +27217,9 @@ function Board({
27155
27217
  const [aim, setAim] = useState76(null);
27156
27218
  const [lifted, setLifted] = useState76(null);
27157
27219
  const [announcement, setAnnouncement] = useState76("");
27158
- const dragGeometry = useRef41(null);
27220
+ const dragGeometry = useRef42(null);
27159
27221
  const [landingPreview, setLandingPreview] = useState76(null);
27160
- const previewRef = useRef41(null);
27222
+ const previewRef = useRef42(null);
27161
27223
  const [reportedMove, setPendingMove] = useState76(null);
27162
27224
  const pendingMove = reportedMove && !hasMoveSettled(columns, reportedMove) ? reportedMove : null;
27163
27225
  const dragAndDropEnabled = useDragAndDropEnabled();
@@ -27166,13 +27228,13 @@ function Board({
27166
27228
  if (dragAndDropEnabled) return base;
27167
27229
  return base.map((column) => ({ ...column, dragDisabled: true, dropDisabled: true }));
27168
27230
  }, [columns, pendingMove, dragAndDropEnabled]);
27169
- useEffect41(() => {
27231
+ useEffect42(() => {
27170
27232
  columnsRef.current = view;
27171
27233
  onChangeRef.current = onChange;
27172
27234
  });
27173
27235
  const [landing, setLanding] = useState76(null);
27174
- const landingTimer = useRef41(null);
27175
- const pointRef = useRef41({ x: 0, y: 0 });
27236
+ const landingTimer = useRef42(null);
27237
+ const pointRef = useRef42({ x: 0, y: 0 });
27176
27238
  const laneLabel = useCallback27((columnId) => view.find((c) => c.id === columnId)?.label ?? columnId, [view]);
27177
27239
  const acceptsLifted = useCallback27(
27178
27240
  (fromColumnId) => (column) => {
@@ -27223,7 +27285,7 @@ function Board({
27223
27285
  },
27224
27286
  [lifted, view, acceptsLifted, laneLabel]
27225
27287
  );
27226
- useEffect41(() => {
27288
+ useEffect42(() => {
27227
27289
  if (!lifted) return void 0;
27228
27290
  const onKeyDown = (event) => {
27229
27291
  if (event.key === "Escape") {
@@ -27241,7 +27303,7 @@ function Board({
27241
27303
  window.addEventListener("keydown", onKeyDown);
27242
27304
  return () => window.removeEventListener("keydown", onKeyDown);
27243
27305
  }, [lifted, drop, walk]);
27244
- useEffect41(() => {
27306
+ useEffect42(() => {
27245
27307
  if (!lifted) return;
27246
27308
  boardRef.current?.querySelector(`[${DROP_LINE_ATTRIBUTE}]`)?.scrollIntoView({ block: "nearest", inline: "nearest" });
27247
27309
  }, [lifted]);
@@ -27252,12 +27314,12 @@ function Board({
27252
27314
  const anchor = aimToChange(view, lifted.ticketId, lifted.aim) ? aimAnchor(view, lifted.ticketId, lifted.aim) : { ticketId: null, edge: null };
27253
27315
  return { columnId: lifted.aim.columnId, ...anchor, ticket };
27254
27316
  }, [lifted, view]);
27255
- useEffect41(() => {
27317
+ useEffect42(() => {
27256
27318
  if (!pendingMove) return void 0;
27257
27319
  const timer = setTimeout(() => setPendingMove(null), PENDING_MOVE_TIMEOUT_MS);
27258
27320
  return () => clearTimeout(timer);
27259
27321
  }, [pendingMove]);
27260
- useEffect41(() => {
27322
+ useEffect42(() => {
27261
27323
  const scroller = scrollerRef.current;
27262
27324
  const readAim = (source, target) => {
27263
27325
  const ticket = source.data.ticket;
@@ -27410,7 +27472,7 @@ function Board({
27410
27472
  const joinLeft = !!(column.system && prev?.system);
27411
27473
  const joinRight = !!(column.system && next?.system);
27412
27474
  const showGap = i > 0 && !joinLeft;
27413
- return /* @__PURE__ */ jsxs189(Fragment39, { children: [
27475
+ return /* @__PURE__ */ jsxs189(Fragment40, { children: [
27414
27476
  showGap && /* @__PURE__ */ jsx238("div", { "aria-hidden": true, className: "w-[var(--spacing-system-mf)] shrink-0" }),
27415
27477
  /* @__PURE__ */ jsx238(
27416
27478
  BoardColumn,
@@ -27556,10 +27618,10 @@ import {
27556
27618
  createContext as createContext12,
27557
27619
  useCallback as useCallback28,
27558
27620
  useContext as useContext12,
27559
- useEffect as useEffect42,
27621
+ useEffect as useEffect43,
27560
27622
  useId as useId6,
27561
27623
  useMemo as useMemo24,
27562
- useRef as useRef42,
27624
+ useRef as useRef43,
27563
27625
  useState as useState77
27564
27626
  } from "react";
27565
27627
  import { jsx as jsx239, jsxs as jsxs190 } from "react/jsx-runtime";
@@ -27574,19 +27636,19 @@ function useSortableListContext() {
27574
27636
  return context;
27575
27637
  }
27576
27638
  function SortableList({ onReorder, getItemLabel, disabled = false, className, children }) {
27577
- const listRef = useRef42(null);
27639
+ const listRef = useRef43(null);
27578
27640
  const dragAndDropEnabled = useDragAndDropEnabled();
27579
27641
  const dragType = useId6();
27580
27642
  const [announcement, setAnnouncement] = useState77("");
27581
- const onReorderRef = useRef42(onReorder);
27582
- const getItemLabelRef = useRef42(getItemLabel);
27583
- useEffect42(() => {
27643
+ const onReorderRef = useRef43(onReorder);
27644
+ const getItemLabelRef = useRef43(getItemLabel);
27645
+ useEffect43(() => {
27584
27646
  onReorderRef.current = onReorder;
27585
27647
  getItemLabelRef.current = getItemLabel;
27586
27648
  });
27587
- const flipFrom = useRef42(null);
27649
+ const flipFrom = useRef43(null);
27588
27650
  const [flipTick, setFlipTick] = useState77(0);
27589
- const flipTimer = useRef42(null);
27651
+ const flipTimer = useRef43(null);
27590
27652
  const readItems = useCallback28(
27591
27653
  () => [...listRef.current?.querySelectorAll(`[${SORTABLE_ITEM_ATTRIBUTE}]`) ?? []],
27592
27654
  []
@@ -27600,7 +27662,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
27600
27662
  },
27601
27663
  [readItems]
27602
27664
  );
27603
- useEffect42(() => {
27665
+ useEffect43(() => {
27604
27666
  const list = listRef.current;
27605
27667
  if (!list || disabled || !dragAndDropEnabled) return void 0;
27606
27668
  let drag = null;
@@ -27691,7 +27753,7 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
27691
27753
  for (const item of moving) item.style.transition = "";
27692
27754
  }, DROP_MS2);
27693
27755
  }, [flipTick, readItems]);
27694
- useEffect42(
27756
+ useEffect43(
27695
27757
  () => () => {
27696
27758
  if (flipTimer.current) clearTimeout(flipTimer.current);
27697
27759
  },
@@ -27708,12 +27770,12 @@ function SortableList({ onReorder, getItemLabel, disabled = false, className, ch
27708
27770
  }
27709
27771
 
27710
27772
  // src/components/features/sortable-list/sortable-move-buttons.tsx
27711
- import { useRef as useRef43 } from "react";
27773
+ import { useRef as useRef44 } from "react";
27712
27774
  import { jsx as jsx240, jsxs as jsxs191 } from "react/jsx-runtime";
27713
27775
  function SortableMoveButtons({ index, count, label, className }) {
27714
27776
  const { disabled, reorder } = useSortableListContext();
27715
- const upRef = useRef43(null);
27716
- const downRef = useRef43(null);
27777
+ const upRef = useRef44(null);
27778
+ const downRef = useRef44(null);
27717
27779
  const move = (step) => {
27718
27780
  const to = index + step;
27719
27781
  if (to < 0 || to >= count) return;
@@ -27760,7 +27822,7 @@ function SortableMoveButtons({ index, count, label, className }) {
27760
27822
  import { combine as combine5 } from "@atlaskit/pragmatic-drag-and-drop/combine";
27761
27823
  import { draggable as draggable2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
27762
27824
  import { disableNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview";
27763
- import { useCallback as useCallback29, useEffect as useEffect43, useState as useState78 } from "react";
27825
+ import { useCallback as useCallback29, useEffect as useEffect44, useState as useState78 } from "react";
27764
27826
  function useSortableItem() {
27765
27827
  const { dragType, disabled, dragAndDropEnabled, reorder, readItems } = useSortableListContext();
27766
27828
  const inert = disabled || !dragAndDropEnabled;
@@ -27771,7 +27833,7 @@ function useSortableItem() {
27771
27833
  node?.setAttribute(SORTABLE_ITEM_ATTRIBUTE, "");
27772
27834
  setItem(node);
27773
27835
  }, []);
27774
- useEffect43(() => {
27836
+ useEffect44(() => {
27775
27837
  if (!item || !handle || inert) return void 0;
27776
27838
  return combine5(
27777
27839
  // The drag has to start as a "move", or its first frame is drawn with the
@@ -28410,4 +28472,4 @@ export {
28410
28472
  ReopenTicketRequestModal,
28411
28473
  FilterPillRow
28412
28474
  };
28413
- //# sourceMappingURL=chunk-CP5EYMNL.js.map
28475
+ //# sourceMappingURL=chunk-V5RWTIRS.js.map