返回 presentation-ai
IconListMediaSizeSlider.tsx
根目录 / src / components / presentation / floating-toolbar / IconListMediaSizeSlider.tsx
1 "use client";
2
3 import { ImageIcon } from "lucide-react";
4
5 import { ICON_LIST } from "@/components/notebook/presentation/editor/lib";
6 import {
7 getIconListMediaSize,
8 ICON_LIST_MEDIA_SIZE_BOUNDS,
9 } from "@/components/notebook/presentation/editor/utils";
10 import { ToolbarGroup } from "@/components/plate/ui/toolbar";
11 import { Slider } from "@/components/ui/slider";
12 import {
13 Tooltip,
14 TooltipContent,
15 TooltipTrigger,
16 } from "@/components/ui/tooltip";
17 import { useToolbarContext } from "./ToolbarContext";
18
19 export function IconListMediaSizeSlider() {
20 const { element, elementType, handleNodePropertyUpdate } =
21 useToolbarContext();
22
23 if (elementType !== ICON_LIST) {
24 return null;
25 }
26
27 const currentSize = getIconListMediaSize(element?.mediaSize);
28
29 return (
30 <ToolbarGroup className="flex">
31 <Tooltip>
32 <TooltipTrigger asChild>
33 <div className="flex items-center gap-2 px-2">
34 <ImageIcon className="size-4 text-muted-foreground" />
35 <Slider
36 value={[currentSize]}
37 onValueChange={(values) => {
38 const value = values[0];
39 if (typeof value === "number") {
40 handleNodePropertyUpdate("mediaSize", value);
41 }
42 }}
43 min={ICON_LIST_MEDIA_SIZE_BOUNDS.min}
44 max={ICON_LIST_MEDIA_SIZE_BOUNDS.max}
45 step={4}
46 className="w-24 [data-slider-thumb]:size-3!"
47 />
48 </div>
49 </TooltipTrigger>
50
51 <TooltipContent>
52 <p>Icon/Image Size ({Math.round(currentSize)}px)</p>
53 </TooltipContent>
54 </Tooltip>
55 </ToolbarGroup>
56 );
57 }
58
58 lines Plain Text