@particle-academy/react-fancy 2.3.1 → 2.3.3
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/index.cjs +105 -83
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +105 -83
- package/dist/index.js.map +1 -1
- package/docs/ContextMenu.md +66 -1
- package/docs/Emoji.md +9 -0
- package/docs/EmojiSelect.md +13 -1
- package/docs/Icon.md +18 -11
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -6943,84 +6943,15 @@ function ContextMenuTrigger({
|
|
|
6943
6943
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-react-fancy-context-menu-trigger": "", onContextMenu: handleContextMenu, className: cn(className), children });
|
|
6944
6944
|
}
|
|
6945
6945
|
ContextMenuTrigger.displayName = "ContextMenuTrigger";
|
|
6946
|
-
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
}
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
const
|
|
6953
|
-
|
|
6954
|
-
useEscapeKey(close, open);
|
|
6955
|
-
const { mounted, className: animClass, ref: animRef } = useAnimation({
|
|
6956
|
-
open,
|
|
6957
|
-
enterClass: "fancy-scale-in",
|
|
6958
|
-
exitClass: "fancy-fade-out"
|
|
6959
|
-
});
|
|
6960
|
-
if (!mounted) return null;
|
|
6961
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6962
|
-
"div",
|
|
6963
|
-
{
|
|
6964
|
-
ref: (node) => {
|
|
6965
|
-
menuRef.current = node;
|
|
6966
|
-
animRef.current = node;
|
|
6967
|
-
},
|
|
6968
|
-
"data-react-fancy-context-menu": "",
|
|
6969
|
-
role: "menu",
|
|
6970
|
-
className: cn(
|
|
6971
|
-
"fixed z-50 min-w-[8rem] rounded-xl border border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-700 dark:bg-zinc-900",
|
|
6972
|
-
animClass,
|
|
6973
|
-
className
|
|
6974
|
-
),
|
|
6975
|
-
style: { left: position.x, top: position.y },
|
|
6976
|
-
children
|
|
6977
|
-
}
|
|
6978
|
-
) });
|
|
6979
|
-
}
|
|
6980
|
-
ContextMenuContent.displayName = "ContextMenuContent";
|
|
6981
|
-
function ContextMenuItem({
|
|
6982
|
-
children,
|
|
6983
|
-
onClick,
|
|
6984
|
-
disabled = false,
|
|
6985
|
-
danger = false,
|
|
6986
|
-
className
|
|
6987
|
-
}) {
|
|
6988
|
-
const { setOpen } = useContextMenu();
|
|
6989
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6990
|
-
"button",
|
|
6991
|
-
{
|
|
6992
|
-
type: "button",
|
|
6993
|
-
"data-react-fancy-context-menu-item": "",
|
|
6994
|
-
role: "menuitem",
|
|
6995
|
-
disabled,
|
|
6996
|
-
"aria-disabled": disabled,
|
|
6997
|
-
className: cn(
|
|
6998
|
-
"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm transition-colors",
|
|
6999
|
-
danger ? "text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950" : "text-zinc-700 hover:bg-zinc-100 dark:text-zinc-300 dark:hover:bg-zinc-800",
|
|
7000
|
-
disabled && "cursor-not-allowed opacity-50",
|
|
7001
|
-
className
|
|
7002
|
-
),
|
|
7003
|
-
onClick: () => {
|
|
7004
|
-
if (disabled) return;
|
|
7005
|
-
onClick?.();
|
|
7006
|
-
setOpen(false);
|
|
7007
|
-
},
|
|
7008
|
-
children
|
|
7009
|
-
}
|
|
7010
|
-
);
|
|
7011
|
-
}
|
|
7012
|
-
ContextMenuItem.displayName = "ContextMenuItem";
|
|
7013
|
-
function ContextMenuSeparator({ className }) {
|
|
7014
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7015
|
-
"div",
|
|
7016
|
-
{
|
|
7017
|
-
"data-react-fancy-context-menu-separator": "",
|
|
7018
|
-
role: "separator",
|
|
7019
|
-
className: cn("my-1 h-px bg-zinc-200 dark:bg-zinc-700", className)
|
|
7020
|
-
}
|
|
7021
|
-
);
|
|
6946
|
+
var MenuGroupContext = react.createContext({
|
|
6947
|
+
activeSubId: null,
|
|
6948
|
+
setActiveSub: () => {
|
|
6949
|
+
}
|
|
6950
|
+
});
|
|
6951
|
+
function MenuGroupProvider({ children }) {
|
|
6952
|
+
const [activeSubId, setActiveSub] = react.useState(null);
|
|
6953
|
+
return /* @__PURE__ */ jsxRuntime.jsx(MenuGroupContext.Provider, { value: { activeSubId, setActiveSub }, children });
|
|
7022
6954
|
}
|
|
7023
|
-
ContextMenuSeparator.displayName = "ContextMenuSeparator";
|
|
7024
6955
|
var ContextMenuSubContext = react.createContext({
|
|
7025
6956
|
open: false,
|
|
7026
6957
|
setOpen: () => {
|
|
@@ -7029,12 +6960,25 @@ var ContextMenuSubContext = react.createContext({
|
|
|
7029
6960
|
}
|
|
7030
6961
|
});
|
|
7031
6962
|
function ContextMenuSub({ children }) {
|
|
7032
|
-
const
|
|
6963
|
+
const id = react.useId();
|
|
6964
|
+
const { activeSubId, setActiveSub } = react.useContext(MenuGroupContext);
|
|
6965
|
+
const open = activeSubId === id;
|
|
7033
6966
|
const closeTimer = react.useRef(null);
|
|
6967
|
+
const activeRef = react.useRef(activeSubId);
|
|
6968
|
+
activeRef.current = activeSubId;
|
|
6969
|
+
const setOpen = react.useCallback((v) => {
|
|
6970
|
+
if (closeTimer.current) {
|
|
6971
|
+
clearTimeout(closeTimer.current);
|
|
6972
|
+
closeTimer.current = null;
|
|
6973
|
+
}
|
|
6974
|
+
setActiveSub(v ? id : null);
|
|
6975
|
+
}, [id, setActiveSub]);
|
|
7034
6976
|
const scheduleClose = react.useCallback(() => {
|
|
7035
6977
|
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
7036
|
-
closeTimer.current = setTimeout(() =>
|
|
7037
|
-
|
|
6978
|
+
closeTimer.current = setTimeout(() => {
|
|
6979
|
+
if (activeRef.current === id) setActiveSub(null);
|
|
6980
|
+
}, 150);
|
|
6981
|
+
}, [id, setActiveSub]);
|
|
7038
6982
|
const cancelClose = react.useCallback(() => {
|
|
7039
6983
|
if (closeTimer.current) {
|
|
7040
6984
|
clearTimeout(closeTimer.current);
|
|
@@ -7106,11 +7050,89 @@ function ContextMenuSubContent({ children, className }) {
|
|
|
7106
7050
|
flipLeft ? "right-full mr-1" : "left-full ml-1",
|
|
7107
7051
|
className
|
|
7108
7052
|
),
|
|
7109
|
-
children
|
|
7053
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(MenuGroupProvider, { children })
|
|
7110
7054
|
}
|
|
7111
7055
|
);
|
|
7112
7056
|
}
|
|
7113
7057
|
ContextMenuSubContent.displayName = "ContextMenuSubContent";
|
|
7058
|
+
function ContextMenuContent({
|
|
7059
|
+
children,
|
|
7060
|
+
className
|
|
7061
|
+
}) {
|
|
7062
|
+
const { open, setOpen, position } = useContextMenu();
|
|
7063
|
+
const menuRef = react.useRef(null);
|
|
7064
|
+
const close = react.useCallback(() => setOpen(false), [setOpen]);
|
|
7065
|
+
useOutsideClick(menuRef, close, open);
|
|
7066
|
+
useEscapeKey(close, open);
|
|
7067
|
+
const { mounted, className: animClass, ref: animRef } = useAnimation({
|
|
7068
|
+
open,
|
|
7069
|
+
enterClass: "fancy-scale-in",
|
|
7070
|
+
exitClass: "fancy-fade-out"
|
|
7071
|
+
});
|
|
7072
|
+
if (!mounted) return null;
|
|
7073
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7074
|
+
"div",
|
|
7075
|
+
{
|
|
7076
|
+
ref: (node) => {
|
|
7077
|
+
menuRef.current = node;
|
|
7078
|
+
animRef.current = node;
|
|
7079
|
+
},
|
|
7080
|
+
"data-react-fancy-context-menu": "",
|
|
7081
|
+
role: "menu",
|
|
7082
|
+
className: cn(
|
|
7083
|
+
"fixed z-50 min-w-[8rem] rounded-xl border border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-700 dark:bg-zinc-900",
|
|
7084
|
+
animClass,
|
|
7085
|
+
className
|
|
7086
|
+
),
|
|
7087
|
+
style: { left: position.x, top: position.y },
|
|
7088
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(MenuGroupProvider, { children })
|
|
7089
|
+
}
|
|
7090
|
+
) });
|
|
7091
|
+
}
|
|
7092
|
+
ContextMenuContent.displayName = "ContextMenuContent";
|
|
7093
|
+
function ContextMenuItem({
|
|
7094
|
+
children,
|
|
7095
|
+
onClick,
|
|
7096
|
+
disabled = false,
|
|
7097
|
+
danger = false,
|
|
7098
|
+
className
|
|
7099
|
+
}) {
|
|
7100
|
+
const { setOpen } = useContextMenu();
|
|
7101
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7102
|
+
"button",
|
|
7103
|
+
{
|
|
7104
|
+
type: "button",
|
|
7105
|
+
"data-react-fancy-context-menu-item": "",
|
|
7106
|
+
role: "menuitem",
|
|
7107
|
+
disabled,
|
|
7108
|
+
"aria-disabled": disabled,
|
|
7109
|
+
className: cn(
|
|
7110
|
+
"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm transition-colors",
|
|
7111
|
+
danger ? "text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950" : "text-zinc-700 hover:bg-zinc-100 dark:text-zinc-300 dark:hover:bg-zinc-800",
|
|
7112
|
+
disabled && "cursor-not-allowed opacity-50",
|
|
7113
|
+
className
|
|
7114
|
+
),
|
|
7115
|
+
onClick: () => {
|
|
7116
|
+
if (disabled) return;
|
|
7117
|
+
onClick?.();
|
|
7118
|
+
setOpen(false);
|
|
7119
|
+
},
|
|
7120
|
+
children
|
|
7121
|
+
}
|
|
7122
|
+
);
|
|
7123
|
+
}
|
|
7124
|
+
ContextMenuItem.displayName = "ContextMenuItem";
|
|
7125
|
+
function ContextMenuSeparator({ className }) {
|
|
7126
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7127
|
+
"div",
|
|
7128
|
+
{
|
|
7129
|
+
"data-react-fancy-context-menu-separator": "",
|
|
7130
|
+
role: "separator",
|
|
7131
|
+
className: cn("my-1 h-px bg-zinc-200 dark:bg-zinc-700", className)
|
|
7132
|
+
}
|
|
7133
|
+
);
|
|
7134
|
+
}
|
|
7135
|
+
ContextMenuSeparator.displayName = "ContextMenuSeparator";
|
|
7114
7136
|
function ContextMenuRoot({ children }) {
|
|
7115
7137
|
const [open, setOpen] = react.useState(false);
|
|
7116
7138
|
const positionRef = react.useRef({ x: 0, y: 0 });
|
|
@@ -9801,7 +9823,7 @@ var Chart = {
|
|
|
9801
9823
|
HorizontalBar: ChartHorizontalBar,
|
|
9802
9824
|
StackedBar: ChartStackedBar
|
|
9803
9825
|
};
|
|
9804
|
-
function
|
|
9826
|
+
function useId12(prefix) {
|
|
9805
9827
|
const id = react.useId();
|
|
9806
9828
|
return prefix ? `${prefix}-${id}` : id;
|
|
9807
9829
|
}
|
|
@@ -12466,7 +12488,7 @@ exports.useEscapeKey = useEscapeKey;
|
|
|
12466
12488
|
exports.useFileUpload = useFileUpload;
|
|
12467
12489
|
exports.useFloatingPosition = useFloatingPosition;
|
|
12468
12490
|
exports.useFocusTrap = useFocusTrap;
|
|
12469
|
-
exports.useId =
|
|
12491
|
+
exports.useId = useId12;
|
|
12470
12492
|
exports.useKanban = useKanban;
|
|
12471
12493
|
exports.useMenu = useMenu;
|
|
12472
12494
|
exports.useMobileMenu = useMobileMenu;
|