@thangph2146/lexical-editor 0.0.11 → 0.0.13
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/README.md +2 -1
- package/dist/editor-x/editor.cjs +280 -20
- package/dist/editor-x/editor.cjs.map +1 -1
- package/dist/editor-x/editor.css +27 -4
- package/dist/editor-x/editor.css.map +1 -1
- package/dist/editor-x/editor.js +281 -21
- package/dist/editor-x/editor.js.map +1 -1
- package/dist/index.cjs +292 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +27 -4
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +26 -1
- package/dist/index.d.ts +26 -1
- package/dist/index.js +293 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/lexical-editor.tsx +19 -6
- package/src/context/uploads-context.tsx +1 -0
- package/src/editor-ui/content-editable.tsx +18 -2
- package/src/editor-x/nodes.ts +2 -0
- package/src/nodes/download-link-node.tsx +118 -0
- package/src/plugins/floating-link-editor-plugin.tsx +338 -91
- package/src/themes/core/_tables.scss +0 -1
- package/src/themes/plugins/_floating-link-editor.scss +28 -2
- package/src/themes/ui-components/_button.scss +1 -1
- package/src/themes/ui-components/_flex.scss +1 -0
- package/src/ui/button-group.tsx +10 -10
- package/src/ui/button.tsx +38 -38
- package/src/ui/collapsible.tsx +67 -67
- package/src/ui/command.tsx +48 -48
- package/src/ui/dialog.tsx +146 -146
- package/src/ui/flex.tsx +45 -45
- package/src/ui/input.tsx +20 -20
- package/src/ui/label.tsx +20 -20
- package/src/ui/number-input.tsx +104 -104
- package/src/ui/popover.tsx +128 -128
- package/src/ui/scroll-area.tsx +17 -17
- package/src/ui/select.tsx +171 -171
- package/src/ui/separator.tsx +20 -20
- package/src/ui/slider.tsx +14 -14
- package/src/ui/slot.tsx +3 -3
- package/src/ui/tabs.tsx +87 -87
- package/src/ui/toggle-group.tsx +109 -109
- package/src/ui/toggle.tsx +28 -28
- package/src/ui/tooltip.tsx +28 -28
- package/src/ui/typography.tsx +44 -44
package/src/ui/toggle-group.tsx
CHANGED
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { cn } from "../lib/utils"
|
|
3
|
-
|
|
4
|
-
type ToggleGroupContextValue = {
|
|
5
|
-
type: "single" | "multiple"
|
|
6
|
-
value: string | string[]
|
|
7
|
-
onValueChange: (value: string | string[]) => void
|
|
8
|
-
size?: "default" | "sm" | "lg"
|
|
9
|
-
variant?: "default" | "outline"
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null)
|
|
13
|
-
|
|
14
|
-
type ToggleGroupProps = (
|
|
15
|
-
| { type: "single"; value?: string; onValueChange?: (value: string) => void }
|
|
16
|
-
| { type: "multiple"; value?: string[]; onValueChange?: (value: string[]) => void }
|
|
17
|
-
) & Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue"> & {
|
|
18
|
-
size?: "default" | "sm" | "lg"
|
|
19
|
-
variant?: "default" | "outline"
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export const ToggleGroup = React.forwardRef<HTMLDivElement, ToggleGroupProps>(
|
|
23
|
-
({ className, type = "single", value, onValueChange, children, size, variant, ...props }, ref) => {
|
|
24
|
-
const contextValue: ToggleGroupContextValue = React.useMemo(() => ({
|
|
25
|
-
type: type as "single" | "multiple",
|
|
26
|
-
value: value || (type === "multiple" ? [] : ""),
|
|
27
|
-
onValueChange: (val: string | string[]) => {
|
|
28
|
-
if (type === "single" && typeof val === "string") {
|
|
29
|
-
(onValueChange as ((v: string) => void))?.(val)
|
|
30
|
-
} else if (type === "multiple" && Array.isArray(val)) {
|
|
31
|
-
(onValueChange as ((v: string[]) => void))?.(val)
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
size,
|
|
35
|
-
variant
|
|
36
|
-
}), [type, value, onValueChange, size, variant])
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<ToggleGroupContext.Provider value={contextValue}>
|
|
40
|
-
<div ref={ref} className={cn("editor-toggle-group", className)} {...props}>
|
|
41
|
-
{children}
|
|
42
|
-
</div>
|
|
43
|
-
</ToggleGroupContext.Provider>
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
)
|
|
47
|
-
ToggleGroup.displayName = "ToggleGroup"
|
|
48
|
-
|
|
49
|
-
export const ToggleGroupItem = React.forwardRef<
|
|
50
|
-
HTMLButtonElement,
|
|
51
|
-
React.ButtonHTMLAttributes<HTMLButtonElement> & { value: string, size?: "default" | "sm" | "lg", variant?: "default" | "outline" }
|
|
52
|
-
>(({ className, value, onClick, size: itemSize, variant: itemVariant, ...props }, ref) => {
|
|
53
|
-
const context = React.useContext(ToggleGroupContext)
|
|
54
|
-
|
|
55
|
-
const size = itemSize || context?.size || "default"
|
|
56
|
-
// variant is not used in styles yet but good to have in props
|
|
57
|
-
|
|
58
|
-
if (!context) {
|
|
59
|
-
// Fallback if used outside group
|
|
60
|
-
return (
|
|
61
|
-
<button
|
|
62
|
-
ref={ref}
|
|
63
|
-
type="button"
|
|
64
|
-
className={cn(
|
|
65
|
-
"editor-toggle-group-item",
|
|
66
|
-
size !== "default" && `editor-toggle-group-item--size-${size}`,
|
|
67
|
-
className
|
|
68
|
-
)}
|
|
69
|
-
onClick={onClick}
|
|
70
|
-
{...props}
|
|
71
|
-
/>
|
|
72
|
-
)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const isSelected = context.type === "single"
|
|
76
|
-
? context.value === value
|
|
77
|
-
: Array.isArray(context.value) && context.value.includes(value)
|
|
78
|
-
|
|
79
|
-
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {
|
|
80
|
-
if (context.type === "single") {
|
|
81
|
-
context.onValueChange(isSelected ? "" : value)
|
|
82
|
-
} else {
|
|
83
|
-
const currentValues = Array.isArray(context.value) ? context.value : []
|
|
84
|
-
const newValues = isSelected
|
|
85
|
-
? currentValues.filter((v) => v !== value)
|
|
86
|
-
: [...currentValues, value]
|
|
87
|
-
context.onValueChange(newValues)
|
|
88
|
-
}
|
|
89
|
-
onClick?.(e)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return (
|
|
93
|
-
<button
|
|
94
|
-
ref={ref}
|
|
95
|
-
type="button"
|
|
96
|
-
aria-pressed={isSelected}
|
|
97
|
-
data-state={isSelected ? "on" : "off"}
|
|
98
|
-
className={cn(
|
|
99
|
-
"editor-toggle-group-item",
|
|
100
|
-
size !== "default" && `editor-toggle-group-item--size-${size}`,
|
|
101
|
-
(itemVariant === "outline" || (!itemVariant && context?.variant === "outline")) && "editor-toggle-group-item--outline",
|
|
102
|
-
className
|
|
103
|
-
)}
|
|
104
|
-
onClick={handleClick}
|
|
105
|
-
{...props}
|
|
106
|
-
/>
|
|
107
|
-
)
|
|
108
|
-
})
|
|
109
|
-
ToggleGroupItem.displayName = "ToggleGroupItem"
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { cn } from "../lib/utils"
|
|
3
|
+
|
|
4
|
+
type ToggleGroupContextValue = {
|
|
5
|
+
type: "single" | "multiple"
|
|
6
|
+
value: string | string[]
|
|
7
|
+
onValueChange: (value: string | string[]) => void
|
|
8
|
+
size?: "default" | "sm" | "lg"
|
|
9
|
+
variant?: "default" | "outline"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null)
|
|
13
|
+
|
|
14
|
+
type ToggleGroupProps = (
|
|
15
|
+
| { type: "single"; value?: string; onValueChange?: (value: string) => void }
|
|
16
|
+
| { type: "multiple"; value?: string[]; onValueChange?: (value: string[]) => void }
|
|
17
|
+
) & Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue"> & {
|
|
18
|
+
size?: "default" | "sm" | "lg"
|
|
19
|
+
variant?: "default" | "outline"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const ToggleGroup = React.forwardRef<HTMLDivElement, ToggleGroupProps>(
|
|
23
|
+
({ className, type = "single", value, onValueChange, children, size, variant, ...props }, ref) => {
|
|
24
|
+
const contextValue: ToggleGroupContextValue = React.useMemo(() => ({
|
|
25
|
+
type: type as "single" | "multiple",
|
|
26
|
+
value: value || (type === "multiple" ? [] : ""),
|
|
27
|
+
onValueChange: (val: string | string[]) => {
|
|
28
|
+
if (type === "single" && typeof val === "string") {
|
|
29
|
+
(onValueChange as ((v: string) => void))?.(val)
|
|
30
|
+
} else if (type === "multiple" && Array.isArray(val)) {
|
|
31
|
+
(onValueChange as ((v: string[]) => void))?.(val)
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
size,
|
|
35
|
+
variant
|
|
36
|
+
}), [type, value, onValueChange, size, variant])
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<ToggleGroupContext.Provider value={contextValue}>
|
|
40
|
+
<div ref={ref} className={cn("editor-toggle-group", className)} {...props}>
|
|
41
|
+
{children}
|
|
42
|
+
</div>
|
|
43
|
+
</ToggleGroupContext.Provider>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
ToggleGroup.displayName = "ToggleGroup"
|
|
48
|
+
|
|
49
|
+
export const ToggleGroupItem = React.forwardRef<
|
|
50
|
+
HTMLButtonElement,
|
|
51
|
+
React.ButtonHTMLAttributes<HTMLButtonElement> & { value: string, size?: "default" | "sm" | "lg", variant?: "default" | "outline" }
|
|
52
|
+
>(({ className, value, onClick, size: itemSize, variant: itemVariant, ...props }, ref) => {
|
|
53
|
+
const context = React.useContext(ToggleGroupContext)
|
|
54
|
+
|
|
55
|
+
const size = itemSize || context?.size || "default"
|
|
56
|
+
// variant is not used in styles yet but good to have in props
|
|
57
|
+
|
|
58
|
+
if (!context) {
|
|
59
|
+
// Fallback if used outside group
|
|
60
|
+
return (
|
|
61
|
+
<button
|
|
62
|
+
ref={ref}
|
|
63
|
+
type="button"
|
|
64
|
+
className={cn(
|
|
65
|
+
"editor-toggle-group-item",
|
|
66
|
+
size !== "default" && `editor-toggle-group-item--size-${size}`,
|
|
67
|
+
className
|
|
68
|
+
)}
|
|
69
|
+
onClick={onClick}
|
|
70
|
+
{...props}
|
|
71
|
+
/>
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const isSelected = context.type === "single"
|
|
76
|
+
? context.value === value
|
|
77
|
+
: Array.isArray(context.value) && context.value.includes(value)
|
|
78
|
+
|
|
79
|
+
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {
|
|
80
|
+
if (context.type === "single") {
|
|
81
|
+
context.onValueChange(isSelected ? "" : value)
|
|
82
|
+
} else {
|
|
83
|
+
const currentValues = Array.isArray(context.value) ? context.value : []
|
|
84
|
+
const newValues = isSelected
|
|
85
|
+
? currentValues.filter((v) => v !== value)
|
|
86
|
+
: [...currentValues, value]
|
|
87
|
+
context.onValueChange(newValues)
|
|
88
|
+
}
|
|
89
|
+
onClick?.(e)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<button
|
|
94
|
+
ref={ref}
|
|
95
|
+
type="button"
|
|
96
|
+
aria-pressed={isSelected}
|
|
97
|
+
data-state={isSelected ? "on" : "off"}
|
|
98
|
+
className={cn(
|
|
99
|
+
"editor-toggle-group-item",
|
|
100
|
+
size !== "default" && `editor-toggle-group-item--size-${size}`,
|
|
101
|
+
(itemVariant === "outline" || (!itemVariant && context?.variant === "outline")) && "editor-toggle-group-item--outline",
|
|
102
|
+
className
|
|
103
|
+
)}
|
|
104
|
+
onClick={handleClick}
|
|
105
|
+
{...props}
|
|
106
|
+
/>
|
|
107
|
+
)
|
|
108
|
+
})
|
|
109
|
+
ToggleGroupItem.displayName = "ToggleGroupItem"
|
package/src/ui/toggle.tsx
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { cn } from "../lib/utils"
|
|
3
|
-
|
|
4
|
-
export const Toggle = React.forwardRef<
|
|
5
|
-
HTMLButtonElement,
|
|
6
|
-
React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
7
|
-
pressed?: boolean
|
|
8
|
-
onPressedChange?: (pressed: boolean) => void
|
|
9
|
-
variant?: "default" | "outline" | "ghost"
|
|
10
|
-
size?: "default" | "sm" | "lg"
|
|
11
|
-
}
|
|
12
|
-
>(({ className, pressed, onPressedChange, variant = "default", size = "default", ...props }, ref) => (
|
|
13
|
-
<button
|
|
14
|
-
ref={ref}
|
|
15
|
-
type="button"
|
|
16
|
-
aria-pressed={pressed}
|
|
17
|
-
data-state={pressed ? "on" : "off"}
|
|
18
|
-
className={cn(
|
|
19
|
-
"editor-toggle",
|
|
20
|
-
variant !== "default" && `editor-toggle--${variant}`,
|
|
21
|
-
size !== "default" && `editor-toggle--size-${size}`,
|
|
22
|
-
className
|
|
23
|
-
)}
|
|
24
|
-
onClick={() => onPressedChange?.(!pressed)}
|
|
25
|
-
{...props}
|
|
26
|
-
/>
|
|
27
|
-
))
|
|
28
|
-
Toggle.displayName = "Toggle"
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { cn } from "../lib/utils"
|
|
3
|
+
|
|
4
|
+
export const Toggle = React.forwardRef<
|
|
5
|
+
HTMLButtonElement,
|
|
6
|
+
React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
7
|
+
pressed?: boolean
|
|
8
|
+
onPressedChange?: (pressed: boolean) => void
|
|
9
|
+
variant?: "default" | "outline" | "ghost"
|
|
10
|
+
size?: "default" | "sm" | "lg"
|
|
11
|
+
}
|
|
12
|
+
>(({ className, pressed, onPressedChange, variant = "default", size = "default", ...props }, ref) => (
|
|
13
|
+
<button
|
|
14
|
+
ref={ref}
|
|
15
|
+
type="button"
|
|
16
|
+
aria-pressed={pressed}
|
|
17
|
+
data-state={pressed ? "on" : "off"}
|
|
18
|
+
className={cn(
|
|
19
|
+
"editor-toggle",
|
|
20
|
+
variant !== "default" && `editor-toggle--${variant}`,
|
|
21
|
+
size !== "default" && `editor-toggle--size-${size}`,
|
|
22
|
+
className
|
|
23
|
+
)}
|
|
24
|
+
onClick={() => onPressedChange?.(!pressed)}
|
|
25
|
+
{...props}
|
|
26
|
+
/>
|
|
27
|
+
))
|
|
28
|
+
Toggle.displayName = "Toggle"
|
package/src/ui/tooltip.tsx
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { cn } from "../lib/utils"
|
|
3
|
-
|
|
4
|
-
export const TooltipProvider = ({ children }: { children: React.ReactNode }) => <>{children}</>
|
|
5
|
-
|
|
6
|
-
export const Tooltip = ({ children }: { children: React.ReactNode, disableHoverableContent?: boolean }) => <div className="editor-tooltip-group">{children}</div>
|
|
7
|
-
|
|
8
|
-
export const TooltipTrigger = ({ asChild, children, ...props }: React.HTMLAttributes<HTMLElement> & { asChild?: boolean, children: React.ReactNode }) => {
|
|
9
|
-
const child = asChild ? React.Children.only(children) : children
|
|
10
|
-
if (!React.isValidElement(child)) return null
|
|
11
|
-
return React.cloneElement(child as React.ReactElement<React.HTMLAttributes<HTMLElement>>, {
|
|
12
|
-
...props,
|
|
13
|
-
className: cn((child as React.ReactElement<React.HTMLAttributes<HTMLElement>>).props.className, "editor-tooltip-trigger")
|
|
14
|
-
})
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const TooltipContent = ({ children, className, side = "top", ...props }: React.HTMLAttributes<HTMLDivElement> & { side?: "top" | "bottom" | "left" | "right" }) => (
|
|
18
|
-
<div
|
|
19
|
-
className={cn(
|
|
20
|
-
"editor-tooltip-content",
|
|
21
|
-
`editor-tooltip-content--${side}`,
|
|
22
|
-
className
|
|
23
|
-
)}
|
|
24
|
-
{...props}
|
|
25
|
-
>
|
|
26
|
-
{children}
|
|
27
|
-
</div>
|
|
28
|
-
)
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { cn } from "../lib/utils"
|
|
3
|
+
|
|
4
|
+
export const TooltipProvider = ({ children }: { children: React.ReactNode }) => <>{children}</>
|
|
5
|
+
|
|
6
|
+
export const Tooltip = ({ children }: { children: React.ReactNode, disableHoverableContent?: boolean }) => <div className="editor-tooltip-group">{children}</div>
|
|
7
|
+
|
|
8
|
+
export const TooltipTrigger = ({ asChild, children, ...props }: React.HTMLAttributes<HTMLElement> & { asChild?: boolean, children: React.ReactNode }) => {
|
|
9
|
+
const child = asChild ? React.Children.only(children) : children
|
|
10
|
+
if (!React.isValidElement(child)) return null
|
|
11
|
+
return React.cloneElement(child as React.ReactElement<React.HTMLAttributes<HTMLElement>>, {
|
|
12
|
+
...props,
|
|
13
|
+
className: cn((child as React.ReactElement<React.HTMLAttributes<HTMLElement>>).props.className, "editor-tooltip-trigger")
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const TooltipContent = ({ children, className, side = "top", ...props }: React.HTMLAttributes<HTMLDivElement> & { side?: "top" | "bottom" | "left" | "right" }) => (
|
|
18
|
+
<div
|
|
19
|
+
className={cn(
|
|
20
|
+
"editor-tooltip-content",
|
|
21
|
+
`editor-tooltip-content--${side}`,
|
|
22
|
+
className
|
|
23
|
+
)}
|
|
24
|
+
{...props}
|
|
25
|
+
>
|
|
26
|
+
{children}
|
|
27
|
+
</div>
|
|
28
|
+
)
|
package/src/ui/typography.tsx
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { cn } from "../lib/utils"
|
|
3
|
-
|
|
4
|
-
export const IconSize = ({ size = "medium", children, className }: { size?: "small" | "medium" | "large" | "sm" | "md" | "lg" | "xs" | "xl", children: React.ReactNode, className?: string }) => {
|
|
5
|
-
const sizeMap: Record<string, string> = {
|
|
6
|
-
xs: "editor-icon-xs",
|
|
7
|
-
small: "editor-icon-sm",
|
|
8
|
-
medium: "editor-icon-md",
|
|
9
|
-
large: "editor-icon-lg",
|
|
10
|
-
xl: "editor-icon-xl",
|
|
11
|
-
sm: "editor-icon-sm",
|
|
12
|
-
md: "editor-icon-md",
|
|
13
|
-
lg: "editor-icon-lg",
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
if (React.isValidElement(children)) {
|
|
17
|
-
return React.cloneElement(children as React.ReactElement<React.HTMLAttributes<HTMLElement>>, {
|
|
18
|
-
className: cn(sizeMap[size] || sizeMap.medium, (children as React.ReactElement<React.HTMLAttributes<HTMLElement>>).props.className, className)
|
|
19
|
-
})
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return <>{children}</>
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const TypographyP = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(
|
|
26
|
-
({ className, ...props }, ref) => (
|
|
27
|
-
<p ref={ref} className={cn("editor-typography-p", className)} {...props} />
|
|
28
|
-
)
|
|
29
|
-
)
|
|
30
|
-
TypographyP.displayName = "TypographyP"
|
|
31
|
-
|
|
32
|
-
export const TypographyPSmall = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(
|
|
33
|
-
({ className, ...props }, ref) => (
|
|
34
|
-
<p ref={ref} className={cn("editor-typography-p-small", className)} {...props} />
|
|
35
|
-
)
|
|
36
|
-
)
|
|
37
|
-
TypographyPSmall.displayName = "TypographyPSmall"
|
|
38
|
-
|
|
39
|
-
export const TypographySpanSmallMuted = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(
|
|
40
|
-
({ className, ...props }, ref) => (
|
|
41
|
-
<span ref={ref} className={cn("editor-typography-span-small-muted", className)} {...props} />
|
|
42
|
-
)
|
|
43
|
-
)
|
|
44
|
-
TypographySpanSmallMuted.displayName = "TypographySpanSmallMuted"
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { cn } from "../lib/utils"
|
|
3
|
+
|
|
4
|
+
export const IconSize = ({ size = "medium", children, className }: { size?: "small" | "medium" | "large" | "sm" | "md" | "lg" | "xs" | "xl", children: React.ReactNode, className?: string }) => {
|
|
5
|
+
const sizeMap: Record<string, string> = {
|
|
6
|
+
xs: "editor-icon-xs",
|
|
7
|
+
small: "editor-icon-sm",
|
|
8
|
+
medium: "editor-icon-md",
|
|
9
|
+
large: "editor-icon-lg",
|
|
10
|
+
xl: "editor-icon-xl",
|
|
11
|
+
sm: "editor-icon-sm",
|
|
12
|
+
md: "editor-icon-md",
|
|
13
|
+
lg: "editor-icon-lg",
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (React.isValidElement(children)) {
|
|
17
|
+
return React.cloneElement(children as React.ReactElement<React.HTMLAttributes<HTMLElement>>, {
|
|
18
|
+
className: cn(sizeMap[size] || sizeMap.medium, (children as React.ReactElement<React.HTMLAttributes<HTMLElement>>).props.className, className)
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return <>{children}</>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const TypographyP = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(
|
|
26
|
+
({ className, ...props }, ref) => (
|
|
27
|
+
<p ref={ref} className={cn("editor-typography-p", className)} {...props} />
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
TypographyP.displayName = "TypographyP"
|
|
31
|
+
|
|
32
|
+
export const TypographyPSmall = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(
|
|
33
|
+
({ className, ...props }, ref) => (
|
|
34
|
+
<p ref={ref} className={cn("editor-typography-p-small", className)} {...props} />
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
TypographyPSmall.displayName = "TypographyPSmall"
|
|
38
|
+
|
|
39
|
+
export const TypographySpanSmallMuted = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(
|
|
40
|
+
({ className, ...props }, ref) => (
|
|
41
|
+
<span ref={ref} className={cn("editor-typography-span-small-muted", className)} {...props} />
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
TypographySpanSmallMuted.displayName = "TypographySpanSmallMuted"
|