Blame view

泰额版/Food Labeling Management Platform/src/components/ui/toggle-group.tsx 1.89 KB
884054fb   “wangming”   项目初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  "use client";
  
  import * as React from "react";
  import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group@1.1.2";
  import { type VariantProps } from "class-variance-authority@0.7.1";
  
  import { cn } from "./utils";
  import { toggleVariants } from "./toggle";
  
  const ToggleGroupContext = React.createContext<
    VariantProps<typeof toggleVariants>
  >({
    size: "default",
    variant: "default",
  });
  
  function ToggleGroup({
    className,
    variant,
    size,
    children,
    ...props
  }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &
    VariantProps<typeof toggleVariants>) {
    return (
      <ToggleGroupPrimitive.Root
        data-slot="toggle-group"
        data-variant={variant}
        data-size={size}
        className={cn(
          "group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs",
          className,
        )}
        {...props}
      >
        <ToggleGroupContext.Provider value={{ variant, size }}>
          {children}
        </ToggleGroupContext.Provider>
      </ToggleGroupPrimitive.Root>
    );
  }
  
  function ToggleGroupItem({
    className,
    children,
    variant,
    size,
    ...props
  }: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &
    VariantProps<typeof toggleVariants>) {
    const context = React.useContext(ToggleGroupContext);
  
    return (
      <ToggleGroupPrimitive.Item
        data-slot="toggle-group-item"
        data-variant={context.variant || variant}
        data-size={context.size || size}
        className={cn(
          toggleVariants({
            variant: context.variant || variant,
            size: context.size || size,
          }),
          "min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",
          className,
        )}
        {...props}
      >
        {children}
      </ToggleGroupPrimitive.Item>
    );
  }
  
  export { ToggleGroup, ToggleGroupItem };