@omnitron-dev/prism 0.1.3 → 0.2.0
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/blocks/index.js +49 -9
- package/dist/blocks/index.js.map +1 -1
- package/dist/chunk-2FYNRDXR.js +192 -0
- package/dist/chunk-2FYNRDXR.js.map +1 -0
- package/dist/chunk-A2Z7NVGL.js +11496 -0
- package/dist/chunk-A2Z7NVGL.js.map +1 -0
- package/dist/{chunk-E3XANPTO.js → chunk-IZOIO7PA.js} +5 -191
- package/dist/{chunk-E3XANPTO.js.map → chunk-IZOIO7PA.js.map} +1 -1
- package/dist/{chunk-LAEY5USO.js → chunk-KTCWPGON.js} +55 -25
- package/dist/chunk-KTCWPGON.js.map +1 -0
- package/dist/{chunk-DXXZ3ITR.js → chunk-MEFT6XPH.js} +721 -455
- package/dist/chunk-MEFT6XPH.js.map +1 -0
- package/dist/{chunk-BTIT7WYH.js → chunk-SNKGGHBT.js} +2 -2
- package/dist/chunk-SNKGGHBT.js.map +1 -0
- package/dist/{chunk-UR6X3W5I.js → chunk-VAAIHNWQ.js} +3 -3
- package/dist/{chunk-UR6X3W5I.js.map → chunk-VAAIHNWQ.js.map} +1 -1
- package/dist/{chunk-GYDT5EKX.js → chunk-XQXGE2PW.js} +760 -472
- package/dist/chunk-XQXGE2PW.js.map +1 -0
- package/dist/{chunk-WC2WM2JD.js → chunk-XXP3ZGU6.js} +18 -8
- package/dist/chunk-XXP3ZGU6.js.map +1 -0
- package/dist/chunk-YJMAQL3S.js +1887 -0
- package/dist/chunk-YJMAQL3S.js.map +1 -0
- package/dist/cli/index.js +4 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/components/editor/index.d.ts +107 -0
- package/dist/components/editor/index.js +4 -0
- package/dist/components/editor/index.js.map +1 -0
- package/dist/components/index.css +131 -0
- package/dist/components/index.css.map +1 -0
- package/dist/components/index.d.ts +7073 -0
- package/dist/components/index.js +13 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components-BCGZ-Rwt.d.ts +142 -0
- package/dist/{config-BA6IeTq9.d.ts → config-Pct0n_Kq.d.ts} +2 -2
- package/dist/core/index.d.ts +20 -5
- package/dist/core/index.js +2 -2
- package/dist/hooks/index.d.ts +3 -2
- package/dist/hooks/index.js +4 -3
- package/dist/{index-odhPSv9I.d.ts → index-nmJ8Muwg.d.ts} +4 -127
- package/dist/index.d.ts +265 -6615
- package/dist/index.js +119 -11662
- package/dist/index.js.map +1 -1
- package/dist/layouts/index.js +1 -1
- package/dist/popover-Dmw7SJLR.d.ts +127 -0
- package/dist/registry/index.d.ts +2 -2
- package/dist/{registry-BrDNftd5.d.ts → registry-DQcIzW2s.d.ts} +2 -2
- package/dist/{settings-plpR26Xk.d.ts → settings-CAC0qFjS.d.ts} +2 -2
- package/dist/state/index.d.ts +2 -2
- package/dist/state/index.js +1 -1
- package/dist/text-transform-D6MzzF7V.d.ts +165 -0
- package/dist/theme/index.d.ts +2 -2
- package/dist/theme/index.js +2 -2
- package/dist/{theme-CrXLfP1c.d.ts → theme-B4Q3Bg5o.d.ts} +1 -1
- package/dist/types/index.d.ts +6 -145
- package/package.json +46 -40
- package/dist/chunk-BTIT7WYH.js.map +0 -1
- package/dist/chunk-DXXZ3ITR.js.map +0 -1
- package/dist/chunk-GYDT5EKX.js.map +0 -1
- package/dist/chunk-LAEY5USO.js.map +0 -1
- package/dist/chunk-WC2WM2JD.js.map +0 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
2
|
+
import Popover from '@mui/material/Popover';
|
|
3
|
+
import { styled, alpha } from '@mui/material/styles';
|
|
4
|
+
import { listClasses } from '@mui/material/List';
|
|
5
|
+
import { menuItemClasses } from '@mui/material/MenuItem';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var POPOVER_DISTANCE = 0.75;
|
|
9
|
+
function calculateAnchorOrigin(arrow = "top-right") {
|
|
10
|
+
const configs = {
|
|
11
|
+
"top-left": {
|
|
12
|
+
paperStyles: { ml: -POPOVER_DISTANCE },
|
|
13
|
+
anchorOrigin: { vertical: "bottom", horizontal: "left" },
|
|
14
|
+
transformOrigin: { vertical: "top", horizontal: "left" }
|
|
15
|
+
},
|
|
16
|
+
"top-center": {
|
|
17
|
+
paperStyles: void 0,
|
|
18
|
+
anchorOrigin: { vertical: "bottom", horizontal: "center" },
|
|
19
|
+
transformOrigin: { vertical: "top", horizontal: "center" }
|
|
20
|
+
},
|
|
21
|
+
"top-right": {
|
|
22
|
+
paperStyles: { ml: POPOVER_DISTANCE },
|
|
23
|
+
anchorOrigin: { vertical: "bottom", horizontal: "right" },
|
|
24
|
+
transformOrigin: { vertical: "top", horizontal: "right" }
|
|
25
|
+
},
|
|
26
|
+
"bottom-left": {
|
|
27
|
+
paperStyles: { ml: -POPOVER_DISTANCE },
|
|
28
|
+
anchorOrigin: { vertical: "top", horizontal: "left" },
|
|
29
|
+
transformOrigin: { vertical: "bottom", horizontal: "left" }
|
|
30
|
+
},
|
|
31
|
+
"bottom-center": {
|
|
32
|
+
paperStyles: void 0,
|
|
33
|
+
anchorOrigin: { vertical: "top", horizontal: "center" },
|
|
34
|
+
transformOrigin: { vertical: "bottom", horizontal: "center" }
|
|
35
|
+
},
|
|
36
|
+
"bottom-right": {
|
|
37
|
+
paperStyles: { ml: POPOVER_DISTANCE },
|
|
38
|
+
anchorOrigin: { vertical: "top", horizontal: "right" },
|
|
39
|
+
transformOrigin: { vertical: "bottom", horizontal: "right" }
|
|
40
|
+
},
|
|
41
|
+
"left-top": {
|
|
42
|
+
paperStyles: { mt: -POPOVER_DISTANCE },
|
|
43
|
+
anchorOrigin: { vertical: "top", horizontal: "right" },
|
|
44
|
+
transformOrigin: { vertical: "top", horizontal: "left" }
|
|
45
|
+
},
|
|
46
|
+
"left-center": {
|
|
47
|
+
paperStyles: void 0,
|
|
48
|
+
anchorOrigin: { vertical: "center", horizontal: "right" },
|
|
49
|
+
transformOrigin: { vertical: "center", horizontal: "left" }
|
|
50
|
+
},
|
|
51
|
+
"left-bottom": {
|
|
52
|
+
paperStyles: { mt: POPOVER_DISTANCE },
|
|
53
|
+
anchorOrigin: { vertical: "bottom", horizontal: "right" },
|
|
54
|
+
transformOrigin: { vertical: "bottom", horizontal: "left" }
|
|
55
|
+
},
|
|
56
|
+
"right-top": {
|
|
57
|
+
paperStyles: { mt: -POPOVER_DISTANCE },
|
|
58
|
+
anchorOrigin: { vertical: "top", horizontal: "left" },
|
|
59
|
+
transformOrigin: { vertical: "top", horizontal: "right" }
|
|
60
|
+
},
|
|
61
|
+
"right-center": {
|
|
62
|
+
paperStyles: void 0,
|
|
63
|
+
anchorOrigin: { vertical: "center", horizontal: "left" },
|
|
64
|
+
transformOrigin: { vertical: "center", horizontal: "right" }
|
|
65
|
+
},
|
|
66
|
+
"right-bottom": {
|
|
67
|
+
paperStyles: { mt: POPOVER_DISTANCE },
|
|
68
|
+
anchorOrigin: { vertical: "bottom", horizontal: "left" },
|
|
69
|
+
transformOrigin: { vertical: "bottom", horizontal: "right" }
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
return configs[arrow] || configs["top-right"];
|
|
73
|
+
}
|
|
74
|
+
var Arrow = styled("span", {
|
|
75
|
+
shouldForwardProp: (prop) => prop !== "ownerState"
|
|
76
|
+
})(({ theme, ownerState }) => {
|
|
77
|
+
const { size, offset, placement } = ownerState;
|
|
78
|
+
const directions = {
|
|
79
|
+
top: { top: 0, rotate: "135deg", translate: "0 -50%" },
|
|
80
|
+
bottom: { bottom: 0, rotate: "-45deg", translate: "0 50%" },
|
|
81
|
+
left: { left: 0, rotate: "45deg", translate: "-50% 0" },
|
|
82
|
+
right: { right: 0, rotate: "-135deg", translate: "50% 0" }
|
|
83
|
+
};
|
|
84
|
+
const getDirection = () => {
|
|
85
|
+
if (placement.startsWith("top-")) return directions.top;
|
|
86
|
+
if (placement.startsWith("bottom-")) return directions.bottom;
|
|
87
|
+
if (placement.startsWith("left-")) return directions.left;
|
|
88
|
+
if (placement.startsWith("right-")) return directions.right;
|
|
89
|
+
return {};
|
|
90
|
+
};
|
|
91
|
+
const getPosition = () => {
|
|
92
|
+
if (placement.endsWith("-left")) return { left: offset };
|
|
93
|
+
if (placement.endsWith("-right")) return { right: offset };
|
|
94
|
+
if (placement.endsWith("-top")) return { top: offset };
|
|
95
|
+
if (placement.endsWith("-bottom")) return { bottom: offset };
|
|
96
|
+
if (placement.endsWith("-center")) {
|
|
97
|
+
if (placement.startsWith("top-") || placement.startsWith("bottom-")) {
|
|
98
|
+
return { left: 0, right: 0, margin: "auto" };
|
|
99
|
+
}
|
|
100
|
+
return { top: 0, bottom: 0, margin: "auto" };
|
|
101
|
+
}
|
|
102
|
+
return {};
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
width: size,
|
|
106
|
+
height: size,
|
|
107
|
+
position: "absolute",
|
|
108
|
+
borderBottomLeftRadius: size / 4,
|
|
109
|
+
clipPath: "polygon(0% 0%, 100% 100%, 0% 100%)",
|
|
110
|
+
backgroundColor: theme.palette.background.paper,
|
|
111
|
+
border: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`,
|
|
112
|
+
...getDirection(),
|
|
113
|
+
...getPosition()
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
function CustomPopover({
|
|
117
|
+
open,
|
|
118
|
+
onClose,
|
|
119
|
+
children,
|
|
120
|
+
anchorEl,
|
|
121
|
+
arrow,
|
|
122
|
+
minWidth = 140,
|
|
123
|
+
slotProps,
|
|
124
|
+
...other
|
|
125
|
+
}) {
|
|
126
|
+
const arrowSize = arrow?.size ?? 14;
|
|
127
|
+
const arrowOffset = arrow?.offset ?? 17;
|
|
128
|
+
const arrowPlacement = arrow?.placement ?? "top-right";
|
|
129
|
+
const hideArrow = arrow?.hide ?? false;
|
|
130
|
+
const { paperStyles, anchorOrigin, transformOrigin } = calculateAnchorOrigin(arrowPlacement);
|
|
131
|
+
const isOpen = Boolean(open);
|
|
132
|
+
return /* @__PURE__ */ jsxs(
|
|
133
|
+
Popover,
|
|
134
|
+
{
|
|
135
|
+
open: isOpen,
|
|
136
|
+
anchorEl,
|
|
137
|
+
onClose,
|
|
138
|
+
anchorOrigin,
|
|
139
|
+
transformOrigin,
|
|
140
|
+
slotProps: {
|
|
141
|
+
...slotProps,
|
|
142
|
+
paper: {
|
|
143
|
+
...typeof slotProps?.paper === "object" ? slotProps.paper : {},
|
|
144
|
+
sx: [
|
|
145
|
+
paperStyles,
|
|
146
|
+
{
|
|
147
|
+
overflow: "inherit",
|
|
148
|
+
[`& .${listClasses.root}`]: { minWidth },
|
|
149
|
+
[`& .${menuItemClasses.root}`]: { gap: 2 }
|
|
150
|
+
},
|
|
151
|
+
...typeof slotProps?.paper === "object" && slotProps.paper && "sx" in slotProps.paper ? Array.isArray(slotProps.paper.sx) ? slotProps.paper.sx : [slotProps.paper.sx] : []
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
...other,
|
|
156
|
+
children: [
|
|
157
|
+
!hideArrow && /* @__PURE__ */ jsx(
|
|
158
|
+
Arrow,
|
|
159
|
+
{
|
|
160
|
+
ownerState: {
|
|
161
|
+
size: arrowSize,
|
|
162
|
+
offset: arrowOffset,
|
|
163
|
+
placement: arrowPlacement
|
|
164
|
+
},
|
|
165
|
+
sx: arrow?.sx
|
|
166
|
+
}
|
|
167
|
+
),
|
|
168
|
+
children
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
function usePopover() {
|
|
174
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
175
|
+
const onOpen = useCallback((event) => {
|
|
176
|
+
setAnchorEl(event.currentTarget);
|
|
177
|
+
}, []);
|
|
178
|
+
const onClose = useCallback(() => {
|
|
179
|
+
setAnchorEl(null);
|
|
180
|
+
}, []);
|
|
181
|
+
return {
|
|
182
|
+
open: Boolean(anchorEl),
|
|
183
|
+
anchorEl,
|
|
184
|
+
onOpen,
|
|
185
|
+
onClose,
|
|
186
|
+
setAnchorEl
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export { CustomPopover, usePopover };
|
|
191
|
+
//# sourceMappingURL=chunk-2FYNRDXR.js.map
|
|
192
|
+
//# sourceMappingURL=chunk-2FYNRDXR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/popover/popover.tsx"],"names":[],"mappings":"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","file":"chunk-2FYNRDXR.js","sourcesContent":["'use client';\n\n/**\n * Popover Component\n *\n * Enhanced popover component with arrow support and useful hook.\n *\n * @module @omnitron-dev/prism/components/popover\n */\n\nimport type { ReactNode, MouseEvent, Dispatch, SetStateAction } from 'react';\nimport { useState, useCallback } from 'react';\nimport Popover from '@mui/material/Popover';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { PopoverProps, PopoverOrigin } from '@mui/material/Popover';\nimport type { SxProps, Theme, CSSObject } from '@mui/material/styles';\nimport { listClasses } from '@mui/material/List';\nimport { menuItemClasses } from '@mui/material/MenuItem';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ArrowPlacement =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right'\n | 'left-top'\n | 'left-center'\n | 'left-bottom'\n | 'right-top'\n | 'right-center'\n | 'right-bottom';\n\nexport interface PopoverArrowProps {\n /** Hide the arrow */\n hide?: boolean;\n /** Arrow size in pixels */\n size?: number;\n /** Offset from edge */\n offset?: number;\n /** Arrow placement */\n placement?: ArrowPlacement;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\nexport interface CustomPopoverProps extends Omit<PopoverProps, 'open'> {\n /** Whether the popover is open */\n open: boolean | Element | null;\n /** Close handler */\n onClose: () => void;\n /** Arrow configuration */\n arrow?: PopoverArrowProps;\n /** Minimum width of the popover */\n minWidth?: number | string;\n}\n\n// =============================================================================\n// UTILS\n// =============================================================================\n\nconst POPOVER_DISTANCE = 0.75;\n\ninterface AnchorOriginConfig {\n paperStyles?: CSSObject;\n anchorOrigin: PopoverOrigin;\n transformOrigin: PopoverOrigin;\n}\n\nfunction calculateAnchorOrigin(arrow: ArrowPlacement = 'top-right'): AnchorOriginConfig {\n const configs: Record<ArrowPlacement, AnchorOriginConfig> = {\n 'top-left': {\n paperStyles: { ml: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'left' },\n transformOrigin: { vertical: 'top', horizontal: 'left' },\n },\n 'top-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'bottom', horizontal: 'center' },\n transformOrigin: { vertical: 'top', horizontal: 'center' },\n },\n 'top-right': {\n paperStyles: { ml: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'right' },\n },\n 'bottom-left': {\n paperStyles: { ml: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'left' },\n transformOrigin: { vertical: 'bottom', horizontal: 'left' },\n },\n 'bottom-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n transformOrigin: { vertical: 'bottom', horizontal: 'center' },\n },\n 'bottom-right': {\n paperStyles: { ml: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'right' },\n transformOrigin: { vertical: 'bottom', horizontal: 'right' },\n },\n 'left-top': {\n paperStyles: { mt: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'left' },\n },\n 'left-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'center', horizontal: 'right' },\n transformOrigin: { vertical: 'center', horizontal: 'left' },\n },\n 'left-bottom': {\n paperStyles: { mt: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'bottom', horizontal: 'left' },\n },\n 'right-top': {\n paperStyles: { mt: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'left' },\n transformOrigin: { vertical: 'top', horizontal: 'right' },\n },\n 'right-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'center', horizontal: 'left' },\n transformOrigin: { vertical: 'center', horizontal: 'right' },\n },\n 'right-bottom': {\n paperStyles: { mt: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'left' },\n transformOrigin: { vertical: 'bottom', horizontal: 'right' },\n },\n };\n\n return configs[arrow] || configs['top-right'];\n}\n\n// =============================================================================\n// ARROW COMPONENT\n// =============================================================================\n\ninterface ArrowStyledProps {\n ownerState: {\n size: number;\n offset: number;\n placement: ArrowPlacement;\n };\n}\n\nconst Arrow = styled('span', {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<ArrowStyledProps>(({ theme, ownerState }) => {\n const { size, offset, placement } = ownerState;\n\n const directions: Record<string, CSSObject> = {\n top: { top: 0, rotate: '135deg', translate: '0 -50%' },\n bottom: { bottom: 0, rotate: '-45deg', translate: '0 50%' },\n left: { left: 0, rotate: '45deg', translate: '-50% 0' },\n right: { right: 0, rotate: '-135deg', translate: '50% 0' },\n };\n\n const getDirection = () => {\n if (placement.startsWith('top-')) return directions.top;\n if (placement.startsWith('bottom-')) return directions.bottom;\n if (placement.startsWith('left-')) return directions.left;\n if (placement.startsWith('right-')) return directions.right;\n return {};\n };\n\n const getPosition = () => {\n if (placement.endsWith('-left')) return { left: offset };\n if (placement.endsWith('-right')) return { right: offset };\n if (placement.endsWith('-top')) return { top: offset };\n if (placement.endsWith('-bottom')) return { bottom: offset };\n if (placement.endsWith('-center')) {\n if (placement.startsWith('top-') || placement.startsWith('bottom-')) {\n return { left: 0, right: 0, margin: 'auto' };\n }\n return { top: 0, bottom: 0, margin: 'auto' };\n }\n return {};\n };\n\n return {\n width: size,\n height: size,\n position: 'absolute',\n borderBottomLeftRadius: size / 4,\n clipPath: 'polygon(0% 0%, 100% 100%, 0% 100%)',\n backgroundColor: theme.palette.background.paper,\n border: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`,\n ...getDirection(),\n ...getPosition(),\n };\n});\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * CustomPopover - Enhanced popover with arrow support.\n *\n * @example\n * ```tsx\n * const popover = usePopover();\n *\n * <Button onClick={popover.onOpen}>Open Menu</Button>\n *\n * <CustomPopover\n * open={popover.open}\n * onClose={popover.onClose}\n * anchorEl={popover.anchorEl}\n * arrow={{ placement: 'top-right' }}\n * >\n * <MenuItem>Option 1</MenuItem>\n * <MenuItem>Option 2</MenuItem>\n * </CustomPopover>\n * ```\n */\nexport function CustomPopover({\n open,\n onClose,\n children,\n anchorEl,\n arrow,\n minWidth = 140,\n slotProps,\n ...other\n}: CustomPopoverProps): ReactNode {\n const arrowSize = arrow?.size ?? 14;\n const arrowOffset = arrow?.offset ?? 17;\n const arrowPlacement = arrow?.placement ?? 'top-right';\n const hideArrow = arrow?.hide ?? false;\n\n const { paperStyles, anchorOrigin, transformOrigin } = calculateAnchorOrigin(arrowPlacement);\n\n const isOpen = Boolean(open);\n\n return (\n <Popover\n open={isOpen}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n ...(typeof slotProps?.paper === 'object' ? slotProps.paper : {}),\n sx: [\n paperStyles as SxProps<Theme>,\n {\n overflow: 'inherit',\n [`& .${listClasses.root}`]: { minWidth },\n [`& .${menuItemClasses.root}`]: { gap: 2 },\n },\n ...(typeof slotProps?.paper === 'object' && slotProps.paper && 'sx' in slotProps.paper\n ? Array.isArray(slotProps.paper.sx)\n ? slotProps.paper.sx\n : [slotProps.paper.sx]\n : []),\n ],\n },\n }}\n {...other}\n >\n {!hideArrow && (\n <Arrow\n ownerState={{\n size: arrowSize,\n offset: arrowOffset,\n placement: arrowPlacement,\n }}\n sx={arrow?.sx}\n />\n )}\n {children}\n </Popover>\n );\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\n/**\n * Return type for usePopover hook with generic element type.\n *\n * @typeParam T - The HTML element type (default: HTMLElement)\n */\nexport interface UsePopoverReturn<T extends HTMLElement = HTMLElement> {\n /** Whether the popover is open */\n open: boolean;\n /** The anchor element (typed to T) */\n anchorEl: T | null;\n /** Open the popover - accepts MouseEvent with typed currentTarget */\n onOpen: (event: MouseEvent<T>) => void;\n /** Close the popover */\n onClose: () => void;\n /** Set the anchor element directly (typed to T | null) */\n setAnchorEl: Dispatch<SetStateAction<T | null>>;\n}\n\n/**\n * usePopover - Generic hook for managing popover state.\n *\n * Type-safe hook that accepts a generic type parameter for the anchor element.\n * This ensures type safety when accessing `event.currentTarget` and `anchorEl`.\n *\n * @typeParam T - The HTML element type (default: HTMLElement)\n * @returns Popover state and controls with typed elements\n *\n * @example\n * ```tsx\n * // Basic usage with default HTMLElement\n * function MenuButton() {\n * const popover = usePopover();\n *\n * return (\n * <>\n * <IconButton onClick={popover.onOpen}>\n * <MoreVertIcon />\n * </IconButton>\n *\n * <CustomPopover\n * open={popover.open}\n * onClose={popover.onClose}\n * anchorEl={popover.anchorEl}\n * >\n * <MenuItem onClick={popover.onClose}>Edit</MenuItem>\n * <MenuItem onClick={popover.onClose}>Delete</MenuItem>\n * </CustomPopover>\n * </>\n * );\n * }\n *\n * // Type-safe usage with specific element type\n * function TypedButton() {\n * const popover = usePopover<HTMLButtonElement>();\n *\n * // TypeScript knows anchorEl is HTMLButtonElement | null\n * // and onOpen accepts MouseEvent<HTMLButtonElement>\n *\n * return (\n * <>\n * <button onClick={popover.onOpen}>Click me</button>\n * <Popover open={popover.open} anchorEl={popover.anchorEl} onClose={popover.onClose}>\n * Content here\n * </Popover>\n * </>\n * );\n * }\n * ```\n */\nexport function usePopover<T extends HTMLElement = HTMLElement>(): UsePopoverReturn<T> {\n const [anchorEl, setAnchorEl] = useState<T | null>(null);\n\n const onOpen = useCallback((event: MouseEvent<T>) => {\n setAnchorEl(event.currentTarget as T);\n }, []);\n\n const onClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n return {\n open: Boolean(anchorEl),\n anchorEl,\n onOpen,\n onClose,\n setAnchorEl,\n };\n}\n"]}
|