@flamingo-stack/openframe-frontend-core 0.0.534 → 0.0.535-1763.4621.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/{chunk-NCUKKJRG.cjs → chunk-2P4J2YLI.cjs} +98 -98
- package/dist/{chunk-NCUKKJRG.cjs.map → chunk-2P4J2YLI.cjs.map} +1 -1
- package/dist/{chunk-GS4HJA2G.js → chunk-4A736Z6S.js} +74 -20
- package/dist/chunk-4A736Z6S.js.map +1 -0
- package/dist/{chunk-O6VJZX2N.js → chunk-4DTUUM5V.js} +95 -58
- package/dist/chunk-4DTUUM5V.js.map +1 -0
- package/dist/{chunk-UWB33C6R.cjs → chunk-4HQFV4PK.cjs} +14 -14
- package/dist/{chunk-UWB33C6R.cjs.map → chunk-4HQFV4PK.cjs.map} +1 -1
- package/dist/{chunk-GYONSC3U.cjs → chunk-4QYUNDS3.cjs} +3 -3
- package/dist/{chunk-GYONSC3U.cjs.map → chunk-4QYUNDS3.cjs.map} +1 -1
- package/dist/{chunk-M5ODB6RQ.cjs → chunk-5OLF6WXF.cjs} +40 -40
- package/dist/{chunk-M5ODB6RQ.cjs.map → chunk-5OLF6WXF.cjs.map} +1 -1
- package/dist/{chunk-SXLEPNY2.cjs → chunk-5RJUHUCI.cjs} +106 -52
- package/dist/chunk-5RJUHUCI.cjs.map +1 -0
- package/dist/{chunk-RHKH4YUY.cjs → chunk-7MHYRBBQ.cjs} +5 -5
- package/dist/{chunk-RHKH4YUY.cjs.map → chunk-7MHYRBBQ.cjs.map} +1 -1
- package/dist/{chunk-LYRGM25P.cjs → chunk-E3YB55RR.cjs} +223 -186
- package/dist/chunk-E3YB55RR.cjs.map +1 -0
- package/dist/{chunk-W4MXOBEW.js → chunk-EHPQKXXW.js} +3 -3
- package/dist/{chunk-LBZEPB4Y.cjs → chunk-GV4FDDFV.cjs} +18 -18
- package/dist/{chunk-LBZEPB4Y.cjs.map → chunk-GV4FDDFV.cjs.map} +1 -1
- package/dist/{chunk-D62VYSTL.js → chunk-JVO5CYMK.js} +8 -8
- package/dist/{chunk-BSE2UT6L.js → chunk-K6566PEB.js} +3 -3
- package/dist/{chunk-WBYRBTAS.js → chunk-KLFGP6PR.js} +2 -2
- package/dist/{chunk-KZ6PWFHK.js → chunk-LIQJAC6Z.js} +2 -2
- package/dist/{chunk-MTCU5MQN.js → chunk-LIX5OUHH.js} +2 -2
- package/dist/{chunk-RCBRCZUF.js → chunk-LQPHB2YF.js} +2 -2
- package/dist/{chunk-BUVD2OAI.js → chunk-MZVFZMQ6.js} +6 -6
- package/dist/{chunk-ZLLXYE2G.js → chunk-N3AEJTCK.js} +5 -5
- package/dist/{chunk-ONIYUMTO.js → chunk-NB6BP6JB.js} +3 -3
- package/dist/{chunk-ZKQXE2P4.cjs → chunk-P65EZEBW.cjs} +12 -12
- package/dist/{chunk-ZKQXE2P4.cjs.map → chunk-P65EZEBW.cjs.map} +1 -1
- package/dist/{chunk-VYOGAQLM.js → chunk-PLGITXT7.js} +2 -2
- package/dist/{chunk-YW2ZU7LC.cjs → chunk-PSBL3S2B.cjs} +7 -7
- package/dist/{chunk-YW2ZU7LC.cjs.map → chunk-PSBL3S2B.cjs.map} +1 -1
- package/dist/{chunk-H4W4LENJ.js → chunk-QUVIT4JP.js} +6 -6
- package/dist/{chunk-2YJ2CVRC.cjs → chunk-RO67OOKJ.cjs} +40 -40
- package/dist/{chunk-2YJ2CVRC.cjs.map → chunk-RO67OOKJ.cjs.map} +1 -1
- package/dist/{chunk-67MWXMNT.cjs → chunk-TS2EHMEX.cjs} +29 -29
- package/dist/{chunk-67MWXMNT.cjs.map → chunk-TS2EHMEX.cjs.map} +1 -1
- package/dist/{chunk-UMDGRL6A.cjs → chunk-U2Q7GEX2.cjs} +32 -32
- package/dist/{chunk-UMDGRL6A.cjs.map → chunk-U2Q7GEX2.cjs.map} +1 -1
- package/dist/{chunk-2ALT6CTY.js → chunk-VPDTDKO5.js} +2 -2
- package/dist/{chunk-MLILEBJU.cjs → chunk-Y55XQFJK.cjs} +75 -75
- package/dist/{chunk-MLILEBJU.cjs.map → chunk-Y55XQFJK.cjs.map} +1 -1
- package/dist/{chunk-POFCTXNH.js → chunk-Y72MXG5N.js} +4 -4
- package/dist/{chunk-JELZAWSM.cjs → chunk-ZKKEKG73.cjs} +3 -3
- package/dist/{chunk-JELZAWSM.cjs.map → chunk-ZKKEKG73.cjs.map} +1 -1
- package/dist/{chunk-EBSZWSC5.cjs → chunk-ZR5CJTNR.cjs} +4 -4
- package/dist/{chunk-EBSZWSC5.cjs.map → chunk-ZR5CJTNR.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-input.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/docs/index.js +5 -5
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +5 -5
- package/dist/components/faq/index.js +4 -4
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/help-center-pages/index.cjs +24 -24
- package/dist/components/help-center-pages/index.js +15 -15
- package/dist/components/index.cjs +138 -138
- package/dist/components/index.js +13 -13
- package/dist/components/meeting-scheduler/index.cjs +40 -40
- package/dist/components/meeting-scheduler/index.js +4 -4
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/onboarding-guides/index.cjs +7 -7
- package/dist/components/onboarding-guides/index.js +6 -6
- package/dist/components/popover.d.ts.map +1 -1
- package/dist/components/related-content/index.cjs +5 -5
- package/dist/components/related-content/index.js +4 -4
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/autocomplete.d.ts.map +1 -1
- package/dist/components/ui/file-upload.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/components/ui/search-input.d.ts.map +1 -1
- package/dist/components/ui/searchable-select.d.ts.map +1 -1
- package/dist/components/ui/tag-select-dropdown.d.ts.map +1 -1
- package/dist/components/ui/tags-manager.d.ts.map +1 -1
- package/dist/hooks/index.cjs +4 -2
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/ui/index.d.ts +1 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-keyboard-collision-padding.d.ts +2 -0
- package/dist/hooks/ui/use-keyboard-collision-padding.d.ts.map +1 -0
- package/dist/index.cjs +5 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -2
- package/package.json +1 -1
- package/src/components/chat/chat-input.tsx +84 -32
- package/src/components/popover.tsx +22 -14
- package/src/components/ui/autocomplete.tsx +9 -2
- package/src/components/ui/file-upload.tsx +5 -1
- package/src/components/ui/search-input.tsx +9 -2
- package/src/components/ui/searchable-select.tsx +9 -2
- package/src/components/ui/tag-select-dropdown.tsx +8 -2
- package/src/components/ui/tags-manager.tsx +9 -2
- package/src/hooks/ui/index.ts +1 -0
- package/src/hooks/ui/use-keyboard-collision-padding.ts +101 -0
- package/dist/chunk-GS4HJA2G.js.map +0 -1
- package/dist/chunk-LYRGM25P.cjs.map +0 -1
- package/dist/chunk-O6VJZX2N.js.map +0 -1
- package/dist/chunk-SXLEPNY2.cjs.map +0 -1
- /package/dist/{chunk-W4MXOBEW.js.map → chunk-EHPQKXXW.js.map} +0 -0
- /package/dist/{chunk-D62VYSTL.js.map → chunk-JVO5CYMK.js.map} +0 -0
- /package/dist/{chunk-BSE2UT6L.js.map → chunk-K6566PEB.js.map} +0 -0
- /package/dist/{chunk-WBYRBTAS.js.map → chunk-KLFGP6PR.js.map} +0 -0
- /package/dist/{chunk-KZ6PWFHK.js.map → chunk-LIQJAC6Z.js.map} +0 -0
- /package/dist/{chunk-MTCU5MQN.js.map → chunk-LIX5OUHH.js.map} +0 -0
- /package/dist/{chunk-RCBRCZUF.js.map → chunk-LQPHB2YF.js.map} +0 -0
- /package/dist/{chunk-BUVD2OAI.js.map → chunk-MZVFZMQ6.js.map} +0 -0
- /package/dist/{chunk-ZLLXYE2G.js.map → chunk-N3AEJTCK.js.map} +0 -0
- /package/dist/{chunk-ONIYUMTO.js.map → chunk-NB6BP6JB.js.map} +0 -0
- /package/dist/{chunk-VYOGAQLM.js.map → chunk-PLGITXT7.js.map} +0 -0
- /package/dist/{chunk-H4W4LENJ.js.map → chunk-QUVIT4JP.js.map} +0 -0
- /package/dist/{chunk-2ALT6CTY.js.map → chunk-VPDTDKO5.js.map} +0 -0
- /package/dist/{chunk-POFCTXNH.js.map → chunk-Y72MXG5N.js.map} +0 -0
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
useImageEdgeColor,
|
|
40
40
|
useIsTruncated,
|
|
41
41
|
useIsomorphicLayoutEffect,
|
|
42
|
+
useKeyboardCollisionPadding,
|
|
42
43
|
useLgUp,
|
|
43
44
|
useLocalStorage,
|
|
44
45
|
useMarqueeEngine,
|
|
@@ -51,7 +52,7 @@ import {
|
|
|
51
52
|
useResetOnPageHidden,
|
|
52
53
|
useSuppressCloneFocus,
|
|
53
54
|
useToast
|
|
54
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-4A736Z6S.js";
|
|
55
56
|
import {
|
|
56
57
|
init_next_navigation,
|
|
57
58
|
usePathname,
|
|
@@ -6530,6 +6531,7 @@ var ChatInput = forwardRef13((allProps, ref) => {
|
|
|
6530
6531
|
// contenteditable div, not a <textarea>, so spreading them would warn.
|
|
6531
6532
|
} = rest;
|
|
6532
6533
|
const [value, setValue] = useState10("");
|
|
6534
|
+
const [hasChips, setHasChips] = useState10(false);
|
|
6533
6535
|
const [focused, setFocused] = useState10(false);
|
|
6534
6536
|
const [isStopping, setIsStopping] = useState10(false);
|
|
6535
6537
|
const [previewDismissed, setPreviewDismissed] = useState10(false);
|
|
@@ -6565,26 +6567,32 @@ var ChatInput = forwardRef13((allProps, ref) => {
|
|
|
6565
6567
|
if (typeof caret === "number") placeCaretAtOffset(el, caret);
|
|
6566
6568
|
else placeCaretAtEnd(el);
|
|
6567
6569
|
}
|
|
6570
|
+
setHasChips(el.querySelector("[data-token]") !== null);
|
|
6568
6571
|
}
|
|
6572
|
+
valueRef.current = next;
|
|
6569
6573
|
setValue(next);
|
|
6570
6574
|
}, []);
|
|
6571
6575
|
const fire = useCallback3(
|
|
6572
6576
|
(message2) => {
|
|
6573
6577
|
const can = (message2.length > 0 || allowEmptySend) && !sending && !disabled;
|
|
6574
6578
|
if (!can || !onSend) return;
|
|
6575
|
-
const
|
|
6576
|
-
|
|
6577
|
-
|
|
6578
|
-
|
|
6579
|
-
|
|
6580
|
-
|
|
6579
|
+
const sentMeta = metaRef.current;
|
|
6580
|
+
metaRef.current = /* @__PURE__ */ new Map();
|
|
6581
|
+
applyValue("");
|
|
6582
|
+
shouldRefocusRef.current = true;
|
|
6583
|
+
focusEditor();
|
|
6584
|
+
const restore = () => {
|
|
6585
|
+
if (valueRef.current.length > 0) return;
|
|
6586
|
+
metaRef.current = sentMeta;
|
|
6587
|
+
applyValue(message2);
|
|
6581
6588
|
};
|
|
6589
|
+
const result = onSend(message2);
|
|
6582
6590
|
if (result instanceof Promise) {
|
|
6583
6591
|
void result.then((ok) => {
|
|
6584
|
-
if (ok
|
|
6592
|
+
if (ok === false) restore();
|
|
6585
6593
|
});
|
|
6586
|
-
} else if (result
|
|
6587
|
-
|
|
6594
|
+
} else if (result === false) {
|
|
6595
|
+
restore();
|
|
6588
6596
|
}
|
|
6589
6597
|
},
|
|
6590
6598
|
[allowEmptySend, sending, disabled, onSend, focusEditor, applyValue]
|
|
@@ -6673,6 +6681,7 @@ var ChatInput = forwardRef13((allProps, ref) => {
|
|
|
6673
6681
|
const syncFromDom = useCallback3(() => {
|
|
6674
6682
|
const el = editorRef.current;
|
|
6675
6683
|
if (!el) return;
|
|
6684
|
+
setHasChips(el.querySelector("[data-token]") !== null);
|
|
6676
6685
|
setValue(serialize(el));
|
|
6677
6686
|
}, []);
|
|
6678
6687
|
const handleInput = useCallback3(() => {
|
|
@@ -6778,8 +6787,7 @@ var ChatInput = forwardRef13((allProps, ref) => {
|
|
|
6778
6787
|
const hasContent2 = value.trim().length > 0 || allowEmptySend;
|
|
6779
6788
|
const sendDisabled = sending || disabled || !hasContent2;
|
|
6780
6789
|
const isEmpty = value.length === 0;
|
|
6781
|
-
const
|
|
6782
|
-
const showPreview = !isDisabled && !!previewText && !previewDismissed;
|
|
6790
|
+
const showPreview = !sending && !disabled && !!previewText && !previewDismissed;
|
|
6783
6791
|
return /* @__PURE__ */ jsx30(
|
|
6784
6792
|
"div",
|
|
6785
6793
|
{
|
|
@@ -6813,23 +6821,24 @@ var ChatInput = forwardRef13((allProps, ref) => {
|
|
|
6813
6821
|
},
|
|
6814
6822
|
className: cn(
|
|
6815
6823
|
// `items-center` keeps the empty single-line text AND a mention chip
|
|
6816
|
-
// vertically centered the same way. `py-1.5`
|
|
6817
|
-
// editor's `leading-9` (36px) →
|
|
6818
|
-
//
|
|
6819
|
-
// (incl. its ~3.5px vertical-align overhead), so there's almost
|
|
6820
|
-
// slack for the chip to drift in → it reads as centered
|
|
6821
|
-
//
|
|
6824
|
+
// vertically centered the same way. With a chip in the box, `py-1.5`
|
|
6825
|
+
// (6px) pairs with the editor's `leading-9` (36px) → that row is
|
|
6826
|
+
// 36 + 2*6 = 48px. The 36px line box is just barely above the 32px
|
|
6827
|
+
// chip (incl. its ~3.5px vertical-align overhead), so there's almost
|
|
6828
|
+
// no slack for the chip to drift in → it reads as centered.
|
|
6829
|
+
// A chipless row is shorter than its content box and the `min-h-*`
|
|
6830
|
+
// here is what sets its height: 48px from `md` up, 44px below.
|
|
6822
6831
|
"flex w-full items-center gap-2 px-3 py-1.5 min-h-11 md:min-h-12 cursor-text group transition-colors duration-200",
|
|
6823
6832
|
!hideBorder && "rounded-[6px] border bg-ods-card border-ods-border",
|
|
6824
|
-
!hideBorder && (focused ? "border-ods-accent" : !
|
|
6825
|
-
!hideBorder &&
|
|
6833
|
+
!hideBorder && (focused ? "border-ods-accent" : !disabled && "hover:bg-ods-bg-hover hover:border-ods-border-hover"),
|
|
6834
|
+
!hideBorder && disabled && "!cursor-not-allowed bg-ods-bg",
|
|
6826
6835
|
hideBorder && "bg-transparent"
|
|
6827
6836
|
),
|
|
6828
6837
|
children: [
|
|
6829
6838
|
startIcon && /* @__PURE__ */ jsx30("span", { className: "flex h-6 shrink-0 items-center", children: startIcon }),
|
|
6830
6839
|
/* @__PURE__ */ jsxs23("div", { className: "relative flex-1 min-w-0", children: [
|
|
6831
|
-
isEmpty && !showPreview && /* @__PURE__ */ jsx30("span", { className: "pointer-events-none absolute left-0 top-0 select-none text-h4
|
|
6832
|
-
showPreview && /* @__PURE__ */ jsx30("p", { className: "pointer-events-none absolute inset-x-0 top-0 m-0 select-none truncate text-h4
|
|
6840
|
+
isEmpty && !showPreview && /* @__PURE__ */ jsx30("span", { className: "pointer-events-none absolute left-0 top-0 select-none text-h4 text-ods-text-secondary", children: disabled ? "Connection lost. Waiting to reconnect..." : placeholder }),
|
|
6841
|
+
showPreview && /* @__PURE__ */ jsx30("p", { className: cn("pointer-events-none absolute inset-x-0 top-0 m-0 select-none truncate text-h4 text-ods-text-secondary", hasChips && "!leading-9"), children: previewText }),
|
|
6833
6842
|
/* @__PURE__ */ jsx30(
|
|
6834
6843
|
"div",
|
|
6835
6844
|
{
|
|
@@ -6838,7 +6847,7 @@ var ChatInput = forwardRef13((allProps, ref) => {
|
|
|
6838
6847
|
role: "textbox",
|
|
6839
6848
|
"aria-multiline": "true",
|
|
6840
6849
|
"aria-label": typeof placeholder === "string" ? placeholder : "Message",
|
|
6841
|
-
contentEditable: !
|
|
6850
|
+
contentEditable: !disabled,
|
|
6842
6851
|
suppressContentEditableWarning: true,
|
|
6843
6852
|
spellCheck: true,
|
|
6844
6853
|
onInput: handleInput,
|
|
@@ -6861,17 +6870,25 @@ var ChatInput = forwardRef13((allProps, ref) => {
|
|
|
6861
6870
|
// see the preview comment above) and is only made transparent;
|
|
6862
6871
|
// the absolutely-positioned single-line preview paints over it.
|
|
6863
6872
|
showPreview && "opacity-0",
|
|
6864
|
-
// `leading-9` (36px) sits just above the 32px chip's
|
|
6865
|
-
// (~35.5px incl. vertical-align overhead): the LINE
|
|
6866
|
-
// height (deterministic 48px, no overflow) AND the
|
|
6867
|
-
// keeps the chip centered
|
|
6868
|
-
// `
|
|
6869
|
-
//
|
|
6870
|
-
//
|
|
6871
|
-
//
|
|
6872
|
-
|
|
6873
|
+
// WITH chips, `leading-9` (36px) sits just above the 32px chip's
|
|
6874
|
+
// line-box need (~35.5px incl. vertical-align overhead): the LINE
|
|
6875
|
+
// drives row height (deterministic 48px, no overflow) AND the
|
|
6876
|
+
// near-zero slack keeps the chip centered against the `align-top`
|
|
6877
|
+
// `h-9` wrapper `buildChipEl` gives it. ~4px gap between wrapped
|
|
6878
|
+
// chip rows.
|
|
6879
|
+
// WITHOUT chips there is nothing tall to center, and forcing the
|
|
6880
|
+
// same 36px box on 14px phone text (`text-h4`) put a blank line's
|
|
6881
|
+
// worth of air between every wrapped row — so plain drafts keep
|
|
6882
|
+
// `text-h4`'s own responsive line-height (20px / 24px at md).
|
|
6883
|
+
// `min-h-*` pins the single-line box even when EMPTY: a
|
|
6884
|
+
// non-editable (`contentEditable=false`, i.e. `disabled`) empty div
|
|
6885
|
+
// would otherwise collapse to 0px, and `items-center` would
|
|
6886
|
+
// re-center the shorter wrapper in the row — dropping the `top-0`
|
|
6887
|
+
// placeholder down.
|
|
6888
|
+
"text-h4 text-ods-text-primary",
|
|
6889
|
+
hasChips ? "min-h-9 !leading-9" : "min-h-[var(--font-line-space-h4-body)]",
|
|
6873
6890
|
"scrollbar-thin scrollbar-track-transparent scrollbar-thumb-ods-border/30 hover:scrollbar-thumb-ods-text-secondary/30",
|
|
6874
|
-
|
|
6891
|
+
disabled && "cursor-not-allowed"
|
|
6875
6892
|
)
|
|
6876
6893
|
}
|
|
6877
6894
|
)
|
|
@@ -17422,6 +17439,7 @@ function AutocompleteInner(props, ref) {
|
|
|
17422
17439
|
};
|
|
17423
17440
|
const [isOpen, setIsOpen] = useState34(false);
|
|
17424
17441
|
const [highlightedIndex, setHighlightedIndex] = useState34(-1);
|
|
17442
|
+
const keyboardPadding = useKeyboardCollisionPadding();
|
|
17425
17443
|
const containerRef = useRef24(null);
|
|
17426
17444
|
const hiddenTagsPopupRef = useRef24(null);
|
|
17427
17445
|
const isInvalid = invalid || !!error;
|
|
@@ -17728,12 +17746,14 @@ function AutocompleteInner(props, ref) {
|
|
|
17728
17746
|
className: cn(
|
|
17729
17747
|
"z-50 w-[var(--radix-popover-trigger-width)] mt-1",
|
|
17730
17748
|
"bg-ods-card border border-ods-border rounded-[4px]",
|
|
17749
|
+
"flex flex-col overflow-hidden max-h-[var(--radix-popper-available-height)]",
|
|
17731
17750
|
"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
17732
17751
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
|
|
17733
17752
|
dropdownClassName
|
|
17734
17753
|
),
|
|
17735
17754
|
sideOffset: 4,
|
|
17736
17755
|
align: "start",
|
|
17756
|
+
collisionPadding: { bottom: keyboardPadding },
|
|
17737
17757
|
onOpenAutoFocus: (e) => {
|
|
17738
17758
|
e.preventDefault();
|
|
17739
17759
|
autoLimitTags.inputRef.current?.focus();
|
|
@@ -17743,8 +17763,8 @@ function AutocompleteInner(props, ref) {
|
|
|
17743
17763
|
e.preventDefault();
|
|
17744
17764
|
}
|
|
17745
17765
|
},
|
|
17746
|
-
children: /* @__PURE__ */ jsxs84(ScrollAreaPrimitive.Root, { className: "overflow-hidden", children: [
|
|
17747
|
-
/* @__PURE__ */ jsx110(ScrollAreaPrimitive.Viewport, { className: "max-h-[240px] w-full [&>div]:!block", children: /* @__PURE__ */ jsx110("div", { role: "listbox", children: loading ? /* @__PURE__ */ jsx110("div", { className: "px-3 py-2 text-ods-text-secondary text-h6", children: loadingText }) : filteredOptions.length === 0 ? showCreateOption ? isCreateTooLong ? /* @__PURE__ */ jsxs84("div", { className: "flex items-center h-11 md:h-12 px-[var(--spacing-system-mf)] text-h5 text-ods-error min-w-0", children: [
|
|
17766
|
+
children: /* @__PURE__ */ jsxs84(ScrollAreaPrimitive.Root, { className: "flex min-h-0 flex-col overflow-hidden", children: [
|
|
17767
|
+
/* @__PURE__ */ jsx110(ScrollAreaPrimitive.Viewport, { className: "min-h-0 max-h-[240px] w-full [&>div]:!block", children: /* @__PURE__ */ jsx110("div", { role: "listbox", children: loading ? /* @__PURE__ */ jsx110("div", { className: "px-3 py-2 text-ods-text-secondary text-h6", children: loadingText }) : filteredOptions.length === 0 ? showCreateOption ? isCreateTooLong ? /* @__PURE__ */ jsxs84("div", { className: "flex items-center h-11 md:h-12 px-[var(--spacing-system-mf)] text-h5 text-ods-error min-w-0", children: [
|
|
17748
17768
|
"Maximum ",
|
|
17749
17769
|
maxCreateLength,
|
|
17750
17770
|
" characters"
|
|
@@ -19632,6 +19652,7 @@ function SearchableSelect({
|
|
|
19632
19652
|
}) {
|
|
19633
19653
|
const [isOpen, setIsOpen] = React54.useState(false);
|
|
19634
19654
|
const [search, setSearch] = React54.useState("");
|
|
19655
|
+
const keyboardPadding = useKeyboardCollisionPadding();
|
|
19635
19656
|
React54.useEffect(() => {
|
|
19636
19657
|
if (!isOpen) setSearch("");
|
|
19637
19658
|
}, [isOpen]);
|
|
@@ -19683,8 +19704,10 @@ function SearchableSelect({
|
|
|
19683
19704
|
{
|
|
19684
19705
|
align,
|
|
19685
19706
|
sideOffset: 6,
|
|
19707
|
+
collisionPadding: { bottom: keyboardPadding },
|
|
19686
19708
|
className: cn(
|
|
19687
19709
|
"z-50 min-w-[var(--radix-popover-trigger-width)] bg-ods-card border border-ods-border rounded-md shadow-lg overflow-hidden",
|
|
19710
|
+
"flex flex-col max-h-[var(--radix-popper-available-height)]",
|
|
19688
19711
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
19689
19712
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
19690
19713
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -19692,7 +19715,7 @@ function SearchableSelect({
|
|
|
19692
19715
|
contentClassName
|
|
19693
19716
|
),
|
|
19694
19717
|
children: [
|
|
19695
|
-
/* @__PURE__ */ jsx124("div", { className: "border-b border-ods-border", children: /* @__PURE__ */ jsx124(
|
|
19718
|
+
/* @__PURE__ */ jsx124("div", { className: "shrink-0 border-b border-ods-border", children: /* @__PURE__ */ jsx124(
|
|
19696
19719
|
Input,
|
|
19697
19720
|
{
|
|
19698
19721
|
autoFocus: true,
|
|
@@ -19703,7 +19726,7 @@ function SearchableSelect({
|
|
|
19703
19726
|
className: "rounded-none border-0"
|
|
19704
19727
|
}
|
|
19705
19728
|
) }),
|
|
19706
|
-
/* @__PURE__ */ jsx124("div", { className: "max-h-80 overflow-y-auto py-[var(--spacing-system-xs)]", role: "listbox", children: isLoading ? /* @__PURE__ */ jsx124("div", { className: "px-[var(--spacing-system-sf)] py-[var(--spacing-system-s)] text-h5 text-ods-text-secondary", children: loadingText }) : filtered.length === 0 ? /* @__PURE__ */ jsx124("div", { className: "px-[var(--spacing-system-sf)] py-[var(--spacing-system-s)] text-h5 text-ods-text-secondary", children: emptyText }) : filtered.map((opt) => {
|
|
19729
|
+
/* @__PURE__ */ jsx124("div", { className: "min-h-0 max-h-80 overflow-y-auto py-[var(--spacing-system-xs)]", role: "listbox", children: isLoading ? /* @__PURE__ */ jsx124("div", { className: "px-[var(--spacing-system-sf)] py-[var(--spacing-system-s)] text-h5 text-ods-text-secondary", children: loadingText }) : filtered.length === 0 ? /* @__PURE__ */ jsx124("div", { className: "px-[var(--spacing-system-sf)] py-[var(--spacing-system-s)] text-h5 text-ods-text-secondary", children: emptyText }) : filtered.map((opt) => {
|
|
19707
19730
|
const isSelected = value === opt.value;
|
|
19708
19731
|
return /* @__PURE__ */ jsx124(
|
|
19709
19732
|
"button",
|
|
@@ -20530,6 +20553,7 @@ function TagSelectDropdown({
|
|
|
20530
20553
|
}) {
|
|
20531
20554
|
const [isOpen, setIsOpen] = React63.useState(false);
|
|
20532
20555
|
const [search, setSearch] = React63.useState("");
|
|
20556
|
+
const keyboardPadding = useKeyboardCollisionPadding();
|
|
20533
20557
|
React63.useEffect(() => {
|
|
20534
20558
|
if (!isOpen) setSearch("");
|
|
20535
20559
|
}, [isOpen]);
|
|
@@ -20573,15 +20597,17 @@ function TagSelectDropdown({
|
|
|
20573
20597
|
{
|
|
20574
20598
|
align,
|
|
20575
20599
|
sideOffset: 6,
|
|
20600
|
+
collisionPadding: { bottom: keyboardPadding },
|
|
20576
20601
|
className: cn(
|
|
20577
20602
|
"z-50 w-72 bg-ods-card border border-ods-border rounded-[6px] shadow-lg overflow-hidden",
|
|
20603
|
+
"flex flex-col max-h-[var(--radix-popper-available-height)]",
|
|
20578
20604
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
20579
20605
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
20580
20606
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
20581
20607
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2"
|
|
20582
20608
|
),
|
|
20583
20609
|
children: [
|
|
20584
|
-
/* @__PURE__ */ jsx135("div", { className: "border-b border-ods-border", children: /* @__PURE__ */ jsx135(
|
|
20610
|
+
/* @__PURE__ */ jsx135("div", { className: "shrink-0 border-b border-ods-border", children: /* @__PURE__ */ jsx135(
|
|
20585
20611
|
Input,
|
|
20586
20612
|
{
|
|
20587
20613
|
autoFocus: true,
|
|
@@ -20598,7 +20624,7 @@ function TagSelectDropdown({
|
|
|
20598
20624
|
className: "rounded-none border-0"
|
|
20599
20625
|
}
|
|
20600
20626
|
) }),
|
|
20601
|
-
/* @__PURE__ */ jsxs105("div", { className: "max-h-72 overflow-y-auto py-[var(--spacing-system-xs)]", role: "listbox", children: [
|
|
20627
|
+
/* @__PURE__ */ jsxs105("div", { className: "min-h-0 max-h-72 overflow-y-auto py-[var(--spacing-system-xs)]", role: "listbox", children: [
|
|
20602
20628
|
ordered.map((opt) => {
|
|
20603
20629
|
const isSelected = selectedIds.includes(opt.id);
|
|
20604
20630
|
return /* @__PURE__ */ jsxs105(
|
|
@@ -20839,6 +20865,7 @@ function TagsManager({
|
|
|
20839
20865
|
}) {
|
|
20840
20866
|
const [open, setOpen] = React65.useState(false);
|
|
20841
20867
|
const [search, setSearch] = React65.useState("");
|
|
20868
|
+
const keyboardPadding = useKeyboardCollisionPadding();
|
|
20842
20869
|
const [editingId, setEditingId] = React65.useState(null);
|
|
20843
20870
|
const [editingName, setEditingName] = React65.useState("");
|
|
20844
20871
|
const editInputRef = React65.useRef(null);
|
|
@@ -20989,6 +21016,7 @@ function TagsManager({
|
|
|
20989
21016
|
className: cn(
|
|
20990
21017
|
"z-50 w-[var(--radix-popover-trigger-width)] mt-1",
|
|
20991
21018
|
"bg-ods-card border border-ods-border rounded",
|
|
21019
|
+
"flex flex-col overflow-hidden max-h-[var(--radix-popper-available-height)]",
|
|
20992
21020
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
20993
21021
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
20994
21022
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -20996,6 +21024,7 @@ function TagsManager({
|
|
|
20996
21024
|
),
|
|
20997
21025
|
sideOffset: 4,
|
|
20998
21026
|
align: "start",
|
|
21027
|
+
collisionPadding: { bottom: keyboardPadding },
|
|
20999
21028
|
onOpenAutoFocus: (e) => {
|
|
21000
21029
|
e.preventDefault();
|
|
21001
21030
|
inputRef.current?.focus();
|
|
@@ -21005,8 +21034,8 @@ function TagsManager({
|
|
|
21005
21034
|
e.preventDefault();
|
|
21006
21035
|
}
|
|
21007
21036
|
},
|
|
21008
|
-
children: /* @__PURE__ */ jsxs107(ScrollAreaPrimitive2.Root, { className: "overflow-hidden", children: [
|
|
21009
|
-
/* @__PURE__ */ jsx138(ScrollAreaPrimitive2.Viewport, { className: "max-h-60 w-full", children: /* @__PURE__ */ jsxs107("div", { role: "listbox", children: [
|
|
21037
|
+
children: /* @__PURE__ */ jsxs107(ScrollAreaPrimitive2.Root, { className: "flex min-h-0 flex-col overflow-hidden", children: [
|
|
21038
|
+
/* @__PURE__ */ jsx138(ScrollAreaPrimitive2.Viewport, { className: "min-h-0 max-h-60 w-full", children: /* @__PURE__ */ jsxs107("div", { role: "listbox", children: [
|
|
21010
21039
|
filtered.map((tag) => {
|
|
21011
21040
|
const isSelected = selectedIds.includes(tag.id);
|
|
21012
21041
|
const isEditing = editingId === tag.id;
|
|
@@ -45992,6 +46021,7 @@ function SearchInput({
|
|
|
45992
46021
|
const debouncedValue = useDebounce(currentValue, debounceMs);
|
|
45993
46022
|
const [isOpen, setIsOpen] = React132.useState(false);
|
|
45994
46023
|
const [highlightedIndex, setHighlightedIndex] = React132.useState(-1);
|
|
46024
|
+
const keyboardPadding = useKeyboardCollisionPadding();
|
|
45995
46025
|
const containerRef = React132.useRef(null);
|
|
45996
46026
|
const currentPlaceholder = filterChips.length > 0 ? "Add filter..." : placeholder;
|
|
45997
46027
|
const {
|
|
@@ -46251,6 +46281,7 @@ function SearchInput({
|
|
|
46251
46281
|
className: cn(
|
|
46252
46282
|
"z-50 w-[var(--radix-popover-trigger-width)] mt-1",
|
|
46253
46283
|
"bg-ods-card border border-ods-border rounded-[6px] overflow-hidden shadow-lg",
|
|
46284
|
+
"flex flex-col max-h-[var(--radix-popper-available-height)]",
|
|
46254
46285
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
46255
46286
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
46256
46287
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -46259,6 +46290,7 @@ function SearchInput({
|
|
|
46259
46290
|
),
|
|
46260
46291
|
sideOffset: 4,
|
|
46261
46292
|
align: "start",
|
|
46293
|
+
collisionPadding: { bottom: keyboardPadding },
|
|
46262
46294
|
onOpenAutoFocus: (e) => {
|
|
46263
46295
|
e.preventDefault();
|
|
46264
46296
|
inputRef.current?.focus();
|
|
@@ -46268,8 +46300,8 @@ function SearchInput({
|
|
|
46268
46300
|
e.preventDefault();
|
|
46269
46301
|
}
|
|
46270
46302
|
},
|
|
46271
|
-
children: /* @__PURE__ */ jsxs281(ScrollAreaPrimitive3.Root, { className: "overflow-hidden", children: [
|
|
46272
|
-
/* @__PURE__ */ jsx357(ScrollAreaPrimitive3.Viewport, { className: "max-h-[320px] w-full", children: /* @__PURE__ */ jsx357("div", { role: "listbox", children: renderDropdownContent() }) }),
|
|
46303
|
+
children: /* @__PURE__ */ jsxs281(ScrollAreaPrimitive3.Root, { className: "flex min-h-0 flex-col overflow-hidden", children: [
|
|
46304
|
+
/* @__PURE__ */ jsx357(ScrollAreaPrimitive3.Viewport, { className: "min-h-0 max-h-[320px] w-full", children: /* @__PURE__ */ jsx357("div", { role: "listbox", children: renderDropdownContent() }) }),
|
|
46273
46305
|
/* @__PURE__ */ jsx357(ScrollAreaPrimitive3.Scrollbar, { className: "hidden", orientation: "vertical", children: /* @__PURE__ */ jsx357(ScrollAreaPrimitive3.Thumb, {}) })
|
|
46274
46306
|
] })
|
|
46275
46307
|
}
|
|
@@ -47107,7 +47139,8 @@ function FileUpload({
|
|
|
47107
47139
|
return;
|
|
47108
47140
|
}
|
|
47109
47141
|
try {
|
|
47110
|
-
|
|
47142
|
+
const picked = await pickFiles();
|
|
47143
|
+
if (picked.length > 0) handleFiles(picked);
|
|
47111
47144
|
} catch (err) {
|
|
47112
47145
|
setValidationError(err instanceof Error ? err.message : "Could not open the file picker");
|
|
47113
47146
|
}
|
|
@@ -47461,19 +47494,23 @@ import * as PopoverPrimitive7 from "@radix-ui/react-popover";
|
|
|
47461
47494
|
import { jsx as jsx363 } from "react/jsx-runtime";
|
|
47462
47495
|
var Popover2 = PopoverPrimitive7.Root;
|
|
47463
47496
|
var PopoverTrigger = PopoverPrimitive7.Trigger;
|
|
47464
|
-
var PopoverContent = React137.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) =>
|
|
47465
|
-
|
|
47466
|
-
{
|
|
47467
|
-
|
|
47468
|
-
|
|
47469
|
-
|
|
47470
|
-
|
|
47471
|
-
|
|
47472
|
-
|
|
47473
|
-
|
|
47474
|
-
|
|
47475
|
-
|
|
47476
|
-
)
|
|
47497
|
+
var PopoverContent = React137.forwardRef(({ className, align = "center", sideOffset = 4, collisionPadding, ...props }, ref) => {
|
|
47498
|
+
const keyboardPadding = useKeyboardCollisionPadding();
|
|
47499
|
+
return /* @__PURE__ */ jsx363(PopoverPrimitive7.Portal, { children: /* @__PURE__ */ jsx363(
|
|
47500
|
+
PopoverPrimitive7.Content,
|
|
47501
|
+
{
|
|
47502
|
+
ref,
|
|
47503
|
+
align,
|
|
47504
|
+
sideOffset,
|
|
47505
|
+
collisionPadding: collisionPadding ?? { bottom: keyboardPadding },
|
|
47506
|
+
className: cn(
|
|
47507
|
+
"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
47508
|
+
className
|
|
47509
|
+
),
|
|
47510
|
+
...props
|
|
47511
|
+
}
|
|
47512
|
+
) });
|
|
47513
|
+
});
|
|
47477
47514
|
PopoverContent.displayName = PopoverPrimitive7.Content.displayName;
|
|
47478
47515
|
|
|
47479
47516
|
// src/components/ui/color-preset-select.tsx
|
|
@@ -62071,4 +62108,4 @@ export {
|
|
|
62071
62108
|
LogsList,
|
|
62072
62109
|
assets
|
|
62073
62110
|
};
|
|
62074
|
-
//# sourceMappingURL=chunk-
|
|
62111
|
+
//# sourceMappingURL=chunk-4DTUUM5V.js.map
|