@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.
- package/dist/chat-protocol/decode.d.ts.map +1 -1
- package/dist/chat-protocol/events.d.ts +1 -47
- package/dist/chat-protocol/events.d.ts.map +1 -1
- package/dist/chat-protocol/index.cjs +0 -51
- package/dist/chat-protocol/index.cjs.map +1 -1
- package/dist/chat-protocol/index.js +1 -48
- package/dist/chat-protocol/index.js.map +1 -1
- package/dist/chat-protocol/leading-frames.d.ts +3 -9
- package/dist/chat-protocol/leading-frames.d.ts.map +1 -1
- package/dist/chat-protocol/nats-decoder.d.ts +0 -41
- package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
- package/dist/{chunk-OGZAFM6M.cjs → chunk-26NL6WZU.cjs} +5 -5
- package/dist/{chunk-OGZAFM6M.cjs.map → chunk-26NL6WZU.cjs.map} +1 -1
- package/dist/{chunk-QCP2KV7P.js → chunk-4SYELUXP.js} +3 -3
- package/dist/{chunk-4HGRXFQP.cjs → chunk-6PLACYFA.cjs} +3 -3
- package/dist/{chunk-4HGRXFQP.cjs.map → chunk-6PLACYFA.cjs.map} +1 -1
- package/dist/{chunk-FEVLXRTC.cjs → chunk-7LGVUXWE.cjs} +344 -282
- package/dist/chunk-7LGVUXWE.cjs.map +1 -0
- package/dist/{chunk-AKPLEWMH.js → chunk-A4BZ2CP4.js} +2 -2
- package/dist/{chunk-HHJVIHVR.cjs → chunk-COSV5FC2.cjs} +69 -69
- package/dist/{chunk-HHJVIHVR.cjs.map → chunk-COSV5FC2.cjs.map} +1 -1
- package/dist/{chunk-4WSKSNXL.js → chunk-CX62MVCV.js} +6 -6
- package/dist/{chunk-O2FTVZOD.js → chunk-DZAPMQ6U.js} +3 -3
- package/dist/{chunk-YW4WBNYV.cjs → chunk-EXUKW6GT.cjs} +24 -24
- package/dist/{chunk-YW4WBNYV.cjs.map → chunk-EXUKW6GT.cjs.map} +1 -1
- package/dist/{chunk-PWOYEUIQ.js → chunk-FN4PUTHZ.js} +5 -5
- package/dist/{chunk-L2CF2QZW.js → chunk-JDP5BGVO.js} +5 -5
- package/dist/{chunk-5Y6TPFW7.js → chunk-JFVT6XRN.js} +5 -5
- package/dist/{chunk-BCJQ7CJE.cjs → chunk-JHLZTU7R.cjs} +9 -9
- package/dist/{chunk-BCJQ7CJE.cjs.map → chunk-JHLZTU7R.cjs.map} +1 -1
- package/dist/{chunk-D44S2QLI.js → chunk-OSIIXSYG.js} +3 -3
- package/dist/{chunk-DB3TV4CW.js → chunk-PGWXVNYS.js} +3 -3
- package/dist/{chunk-H54EPP3P.cjs → chunk-PP3LCLWI.cjs} +4 -4
- package/dist/{chunk-H54EPP3P.cjs.map → chunk-PP3LCLWI.cjs.map} +1 -1
- package/dist/{chunk-M5GWCMYE.cjs → chunk-QIDD3LTS.cjs} +32 -32
- package/dist/{chunk-M5GWCMYE.cjs.map → chunk-QIDD3LTS.cjs.map} +1 -1
- package/dist/{chunk-3AX3ZEY3.js → chunk-QZSNH7XU.js} +1317 -1480
- package/dist/chunk-QZSNH7XU.js.map +1 -0
- package/dist/{chunk-37XJYOAY.cjs → chunk-RF65N4QA.cjs} +10 -10
- package/dist/{chunk-37XJYOAY.cjs.map → chunk-RF65N4QA.cjs.map} +1 -1
- package/dist/{chunk-36TJYCF3.cjs → chunk-S5BS2CZA.cjs} +21 -21
- package/dist/{chunk-36TJYCF3.cjs.map → chunk-S5BS2CZA.cjs.map} +1 -1
- package/dist/{chunk-QGJYWLF4.js → chunk-SN6SL4HR.js} +2 -2
- package/dist/{chunk-4FJSN2XW.cjs → chunk-TDM5FQZG.cjs} +10 -10
- package/dist/{chunk-4FJSN2XW.cjs.map → chunk-TDM5FQZG.cjs.map} +1 -1
- package/dist/{chunk-HGA74X35.js → chunk-TXNAZKWW.js} +3 -3
- package/dist/{chunk-IFYQ7DHV.cjs → chunk-UNVW4BVF.cjs} +43 -43
- package/dist/{chunk-IFYQ7DHV.cjs.map → chunk-UNVW4BVF.cjs.map} +1 -1
- package/dist/{chunk-CP5EYMNL.js → chunk-V5RWTIRS.js} +202 -140
- package/dist/{chunk-CP5EYMNL.js.map → chunk-V5RWTIRS.js.map} +1 -1
- package/dist/{chunk-RKGOVTXZ.cjs → chunk-VYQNM75R.cjs} +167 -330
- package/dist/chunk-VYQNM75R.cjs.map +1 -0
- package/dist/{chunk-PMENIZXI.js → chunk-WEUWTEQL.js} +4 -4
- package/dist/{chunk-H4BPHGU5.js → chunk-WW435OOF.js} +2 -2
- package/dist/{chunk-4LZ7B5H5.cjs → chunk-YB75SLEH.cjs} +3 -3
- package/dist/{chunk-4LZ7B5H5.cjs.map → chunk-YB75SLEH.cjs.map} +1 -1
- package/dist/{chunk-A6C5HOD7.cjs → chunk-YLYU6DDT.cjs} +15 -15
- package/dist/{chunk-A6C5HOD7.cjs.map → chunk-YLYU6DDT.cjs.map} +1 -1
- package/dist/{chunk-BW4WDUSI.js → chunk-ZNCYSM6R.js} +2 -2
- package/dist/{chunk-NPVDKOGD.cjs → chunk-ZQ2RBAXO.cjs} +22 -22
- package/dist/{chunk-NPVDKOGD.cjs.map → chunk-ZQ2RBAXO.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +2 -10
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.d.ts +0 -1
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +1 -9
- package/dist/components/chat/stream/chat-stream-reducer.d.ts +0 -9
- package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -1
- package/dist/components/chat/stream/delta-batcher.d.ts +3 -3
- package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -1
- package/dist/components/chat/stream/message-mutations.d.ts.map +1 -1
- package/dist/components/chat/types/component.types.d.ts +0 -6
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/chat/types/message.types.d.ts +2 -30
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/types/network.types.d.ts +1 -3
- package/dist/components/chat/types/network.types.d.ts.map +1 -1
- package/dist/components/chat/types/processing.types.d.ts +1 -4
- package/dist/components/chat/types/processing.types.d.ts.map +1 -1
- package/dist/components/chat/utils/approval-display.d.ts +8 -36
- package/dist/components/chat/utils/approval-display.d.ts.map +1 -1
- package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
- package/dist/components/chat/utils/index.d.ts +1 -1
- package/dist/components/chat/utils/index.d.ts.map +1 -1
- package/dist/components/chat/utils/message-segment-accumulator.d.ts +4 -16
- package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/chat/utils/resolve-fetched-card-href.d.ts +1 -1
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/features/push-button-selector.d.ts +29 -1
- package/dist/components/features/push-button-selector.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +23 -23
- package/dist/components/help-center-pages/index.js +14 -14
- package/dist/components/index.cjs +121 -129
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +13 -21
- package/dist/components/index.js.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +21 -21
- package/dist/components/meeting-scheduler/index.js +2 -2
- package/dist/components/navigation/index.cjs +6 -6
- package/dist/components/navigation/index.js +5 -5
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/index.cjs +3 -11
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +2 -10
- package/dist/index.cjs +7 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -14
- package/dist/index.js.map +1 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +0 -80
- package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +1 -118
- package/src/chat-protocol/decode.ts +3 -4
- package/src/chat-protocol/events.ts +0 -51
- package/src/chat-protocol/leading-frames.ts +3 -9
- package/src/chat-protocol/nats-decoder.ts +1 -110
- package/src/components/chat/__tests__/chat-pending-turn.test.tsx +0 -19
- package/src/components/chat/chat-message-enhanced.tsx +1 -13
- package/src/components/chat/index.ts +0 -1
- package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +0 -90
- package/src/components/chat/stream/chat-dialog-store.ts +1 -1
- package/src/components/chat/stream/chat-stream-reducer.ts +11 -49
- package/src/components/chat/stream/delta-batcher.ts +4 -9
- package/src/components/chat/stream/message-mutations.ts +0 -2
- package/src/components/chat/types/component.types.ts +0 -9
- package/src/components/chat/types/message.types.ts +0 -32
- package/src/components/chat/types/network.types.ts +1 -3
- package/src/components/chat/types/processing.types.ts +1 -4
- package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +0 -93
- package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +1 -78
- package/src/components/chat/utils/approval-display.ts +8 -53
- package/src/components/chat/utils/extract-incomplete-message-state.ts +0 -1
- package/src/components/chat/utils/index.ts +1 -6
- package/src/components/chat/utils/message-segment-accumulator.ts +3 -37
- package/src/components/chat/utils/process-historical-messages.ts +7 -44
- package/src/components/chat/utils/resolve-fetched-card-href.ts +1 -1
- package/src/components/features/.push-button-selector.md +1 -1
- package/src/components/features/push-button-selector.tsx +130 -6
- package/src/stories/ChatMessageEnhanced.stories.tsx +3 -7
- package/dist/chunk-3AX3ZEY3.js.map +0 -1
- package/dist/chunk-FEVLXRTC.cjs.map +0 -1
- package/dist/chunk-RKGOVTXZ.cjs.map +0 -1
- package/dist/components/chat/guide-display.d.ts +0 -14
- package/dist/components/chat/guide-display.d.ts.map +0 -1
- package/src/components/chat/guide-display.tsx +0 -42
- /package/dist/{chunk-QCP2KV7P.js.map → chunk-4SYELUXP.js.map} +0 -0
- /package/dist/{chunk-AKPLEWMH.js.map → chunk-A4BZ2CP4.js.map} +0 -0
- /package/dist/{chunk-4WSKSNXL.js.map → chunk-CX62MVCV.js.map} +0 -0
- /package/dist/{chunk-O2FTVZOD.js.map → chunk-DZAPMQ6U.js.map} +0 -0
- /package/dist/{chunk-PWOYEUIQ.js.map → chunk-FN4PUTHZ.js.map} +0 -0
- /package/dist/{chunk-L2CF2QZW.js.map → chunk-JDP5BGVO.js.map} +0 -0
- /package/dist/{chunk-5Y6TPFW7.js.map → chunk-JFVT6XRN.js.map} +0 -0
- /package/dist/{chunk-D44S2QLI.js.map → chunk-OSIIXSYG.js.map} +0 -0
- /package/dist/{chunk-DB3TV4CW.js.map → chunk-PGWXVNYS.js.map} +0 -0
- /package/dist/{chunk-QGJYWLF4.js.map → chunk-SN6SL4HR.js.map} +0 -0
- /package/dist/{chunk-HGA74X35.js.map → chunk-TXNAZKWW.js.map} +0 -0
- /package/dist/{chunk-PMENIZXI.js.map → chunk-WEUWTEQL.js.map} +0 -0
- /package/dist/{chunk-H4BPHGU5.js.map → chunk-WW435OOF.js.map} +0 -0
- /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-
|
|
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 {
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
21819
|
-
import { Fragment as
|
|
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
|
-
|
|
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 =
|
|
21906
|
-
const theaterHandleRef =
|
|
21907
|
-
const theaterForcedMuteRef =
|
|
21908
|
-
const resumeHandleRef =
|
|
21909
|
-
const closeButtonRef =
|
|
21910
|
-
const userMutedRef =
|
|
21911
|
-
const endedLatchRef =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
22024
|
+
const cardModeRef = useRef33("poster");
|
|
21963
22025
|
const [selfDrivenFor, setSelfDrivenFor] = useState58(null);
|
|
21964
|
-
const justClosedRef =
|
|
21965
|
-
const justClosedTimerRef =
|
|
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 =
|
|
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 =
|
|
22109
|
-
|
|
22170
|
+
const handoffRef = useRef33(handoff);
|
|
22171
|
+
useEffect30(() => {
|
|
22110
22172
|
handoffRef.current = handoff;
|
|
22111
22173
|
});
|
|
22112
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
24069
|
-
import { Fragment as
|
|
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
|
-
|
|
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(
|
|
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
|
|
24345
|
+
useEffect as useEffect32,
|
|
24284
24346
|
useMemo as useMemo20,
|
|
24285
24347
|
useReducer,
|
|
24286
|
-
useRef as
|
|
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 =
|
|
24375
|
-
|
|
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
|
|
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
|
|
24535
|
-
useRef as
|
|
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 =
|
|
24560
|
-
const handleOpenChangeRef =
|
|
24561
|
-
|
|
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
|
-
|
|
24632
|
+
useEffect33(() => {
|
|
24571
24633
|
if (open) coordination?.notifyDrawerDidOpen(selfHandle);
|
|
24572
24634
|
}, [open, coordination, selfHandle]);
|
|
24573
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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(
|
|
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 =
|
|
25248
|
-
const sentinelRef =
|
|
25249
|
-
const loadMoreRef =
|
|
25250
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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 =
|
|
26072
|
-
const closeRef =
|
|
26073
|
-
|
|
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
|
-
|
|
26144
|
+
useEffect38(() => {
|
|
26083
26145
|
if (isOpen) coordination?.notifyDrawerDidOpen(selfHandle);
|
|
26084
26146
|
}, [isOpen, coordination, selfHandle]);
|
|
26085
|
-
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
26506
|
+
useEffect as useEffect39,
|
|
26445
26507
|
useMemo as useMemo22,
|
|
26446
|
-
useRef as
|
|
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
|
|
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(
|
|
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 =
|
|
26677
|
-
const ticketRef =
|
|
26678
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
26976
|
+
const laneRef = useRef40(null);
|
|
26915
26977
|
const [isOver, setIsOver] = useState74(false);
|
|
26916
|
-
|
|
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(
|
|
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 =
|
|
27002
|
-
const sentinelRef =
|
|
27063
|
+
const scrollRef = useRef40(null);
|
|
27064
|
+
const sentinelRef = useRef40(null);
|
|
27003
27065
|
useLaneScrollAnchor(scrollRef, column.tickets);
|
|
27004
|
-
|
|
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 =
|
|
27010
|
-
const columnIdRef =
|
|
27011
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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 =
|
|
27098
|
-
|
|
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 =
|
|
27145
|
-
const onChangeRef =
|
|
27146
|
-
const boardRef =
|
|
27147
|
-
const scrollerRef =
|
|
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 =
|
|
27220
|
+
const dragGeometry = useRef42(null);
|
|
27159
27221
|
const [landingPreview, setLandingPreview] = useState76(null);
|
|
27160
|
-
const previewRef =
|
|
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
|
-
|
|
27231
|
+
useEffect42(() => {
|
|
27170
27232
|
columnsRef.current = view;
|
|
27171
27233
|
onChangeRef.current = onChange;
|
|
27172
27234
|
});
|
|
27173
27235
|
const [landing, setLanding] = useState76(null);
|
|
27174
|
-
const landingTimer =
|
|
27175
|
-
const pointRef =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
27621
|
+
useEffect as useEffect43,
|
|
27560
27622
|
useId as useId6,
|
|
27561
27623
|
useMemo as useMemo24,
|
|
27562
|
-
useRef as
|
|
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 =
|
|
27639
|
+
const listRef = useRef43(null);
|
|
27578
27640
|
const dragAndDropEnabled = useDragAndDropEnabled();
|
|
27579
27641
|
const dragType = useId6();
|
|
27580
27642
|
const [announcement, setAnnouncement] = useState77("");
|
|
27581
|
-
const onReorderRef =
|
|
27582
|
-
const getItemLabelRef =
|
|
27583
|
-
|
|
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 =
|
|
27649
|
+
const flipFrom = useRef43(null);
|
|
27588
27650
|
const [flipTick, setFlipTick] = useState77(0);
|
|
27589
|
-
const flipTimer =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
27716
|
-
const downRef =
|
|
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
|
|
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
|
-
|
|
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-
|
|
28475
|
+
//# sourceMappingURL=chunk-V5RWTIRS.js.map
|