(null);
const menuId = useId();
@@ -118,30 +152,34 @@ export function DropdownMenu({
useLayoutEffect(() => {
if (!open || inFlow) {
setResolvedPlacement("bottom");
+ setHorizontalAlign("right");
return;
}
+ const el = ref.current;
+ if (!el) return;
+
if (placement === "bottom") {
setResolvedPlacement("bottom");
- return;
- }
-
- if (placement === "top") {
+ } else if (placement === "top") {
setResolvedPlacement("top");
- return;
+ } else {
+ setResolvedPlacement(resolveAutoPlacement(el, items.length));
}
- const el = ref.current;
- if (!el) return;
-
- setResolvedPlacement(resolveAutoPlacement(el, items.length));
- }, [open, placement, items.length, inFlow]);
+ if (!fullWidth) {
+ setHorizontalAlign(resolveHorizontalAlign(el));
+ } else {
+ setHorizontalAlign("right");
+ }
+ }, [open, placement, items.length, inFlow, fullWidth]);
useEffect(() => {
onOpenChange?.(open);
}, [open, onOpenChange]);
const isTopPlacement = !inFlow && resolvedPlacement === "top";
+ const isLeftAlign = !inFlow && !fullWidth && horizontalAlign === "left";
return (
({
aria-controls={listboxId}
aria-haspopup="listbox"
aria-autocomplete="list"
- className="h-13 w-full rounded-2xl border border-info-blue px-4 pl-5 font-body1 outline-none transition-colors placeholder:text-text-placeholder focus:border-info-blue"
+ containerClassName="h-13 w-full rounded-2xl border border-info-blue font-body1 outline-none transition-colors placeholder:text-text-placeholder focus:border-info-blue"
+ inputClassName="truncate"
+ rightElement={
+
+ }
/>
-
{isOpen && (
diff --git a/src/components/dashboard/ai-report/print/downloadAiSummaryPdf.ts b/src/components/dashboard/ai-report/print/downloadAiSummaryPdf.ts
index 25277c54..bef5867c 100644
--- a/src/components/dashboard/ai-report/print/downloadAiSummaryPdf.ts
+++ b/src/components/dashboard/ai-report/print/downloadAiSummaryPdf.ts
@@ -1,5 +1,6 @@
import { createElement } from "react";
import { renderToStaticMarkup } from "react-dom/server";
+import DOMPurify from "dompurify";
import AiSummaryPrintReport from "./AiSummaryPrintReport";
import { buildPrintThemeStyleBlock } from "./printAssets";
@@ -47,7 +48,7 @@ export function downloadAiSummaryPdf(document: TAiReportPrintDocument) {
-${reportMarkup}
+${DOMPurify.sanitize(reportMarkup)}