@wener/console
Version:
Base console UI toolkit
128 lines (127 loc) • 5.57 kB
JavaScript
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
}
else {
obj[key] = value;
}
return obj;
}
function _object_spread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_define_property(target, key, source[key]);
});
}
return target;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _object_spread_props(target, source) {
source = source != null ? source : {};
if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
}
else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
import React, { memo, useMemo } from "react";
import { HiMiniArrowsPointingIn } from "react-icons/hi2";
import { PiBrowsersLight } from "react-icons/pi";
import { VscClose, VscCloseAll, VscPrimitiveSquare } from "react-icons/vsc";
import { FloatingFocusManager, useTransitionStyles } from "@floating-ui/react";
import { usePopover } from "../../floating/index.js";
import { getRootWindow } from "../ReactWindow.js";
import { Window } from "../Window.js";
var WindowControlPopoverContent = function (props) {
var root = getRootWindow();
// 避免单次操作内 layout 发生变化
var top = useMemo(function () {
return root.top;
}, []);
var count = root.windows.length;
return /*#__PURE__*/ React.createElement("ul", _object_spread({
className: "border-color menu menu-sm rounded-box bg-base-100 w-44 border"
}, props), top && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("li", {
className: "menu-title"
}, "\u5F53\u524D\u7A97\u53E3"), /*#__PURE__*/ React.createElement("li", null, /*#__PURE__*/ React.createElement("a", {
onClick: function () {
top.close();
}
}, /*#__PURE__*/ React.createElement(VscClose, null), "\u5173\u95ED")), /*#__PURE__*/ React.createElement("li", null, /*#__PURE__*/ React.createElement("a", {
onClick: function () {
top.center();
}
}, /*#__PURE__*/ React.createElement(VscPrimitiveSquare, null), "\u5C45\u4E2D"))), /*#__PURE__*/ React.createElement("li", {
className: "menu-title"
}, "\u7A97\u53E3\u7BA1\u7406 (", count, ")"), /*#__PURE__*/ React.createElement("li", null, /*#__PURE__*/ React.createElement("a", {
onClick: function () {
Window.closeAll();
}
}, /*#__PURE__*/ React.createElement(VscCloseAll, null), "\u5173\u95ED\u6240\u6709\u7A97\u53E3")), /*#__PURE__*/ React.createElement("li", null, /*#__PURE__*/ React.createElement("a", {
onClick: function () {
Window.minimizeAll();
}
}, /*#__PURE__*/ React.createElement(HiMiniArrowsPointingIn, null), "\u6700\u5C0F\u5316\u6240\u6709\u7A97\u53E3")));
};
export var WindowControlButton = /*#__PURE__*/ memo(function () {
var _usePopover = usePopover({
placement: "left-start"
}), refs = _usePopover.refs, getFloatingProps = _usePopover.getFloatingProps, getReferenceProps = _usePopover.getReferenceProps, open = _usePopover.open, setOpen = _usePopover.setOpen, floatingStyles = _usePopover.floatingStyles, context = _usePopover.context, nodeId = _usePopover.nodeId;
var _useTransitionStyles = useTransitionStyles(context, {
initial: {
opacity: 0,
transform: "translateY(-10px)"
},
close: {
opacity: 0,
transform: "translateY(10px)"
}
}), isMounted = _useTransitionStyles.isMounted, styles = _useTransitionStyles.styles;
return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("button", _object_spread({
type: "button",
className: "btn btn-square btn-ghost btn-sm self-center",
ref: refs.setReference
}, getReferenceProps()), /*#__PURE__*/ React.createElement(PiBrowsersLight, {
className: "h-5 w-5 opacity-75"
})), isMounted && /*#__PURE__*/ React.createElement(FloatingFocusManager, {
context: context
}, /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({
ref: refs.setFloating
}, getFloatingProps()), {
style: floatingStyles,
className: "z-50"
}), /*#__PURE__*/ React.createElement(WindowControlPopoverContent, {
style: styles,
onClick: function () {
setOpen(false);
}
}))));
});