@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
1,480 lines (1,479 loc) • 45.9 kB
JavaScript
var He = Object.defineProperty;
var Le = (e, t, n) => t in e ? He(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
var X = (e, t, n) => Le(e, typeof t != "symbol" ? t + "" : t, n);
import { defineComponent as oe, ref as o, computed as k, createVNode as g, Teleport as ie, createApp as re, onUnmounted as ue, Fragment as ce, watch as N, nextTick as $, onBeforeMount as je, onMounted as _, Transition as Fe, shallowRef as We, render as ae, h as Ve, cloneVNode as De, mergeProps as de, inject as Ne, withDirectives as Ae, vShow as Xe, onBeforeUnmount as Ue } from "vue";
import Ke from "../tags/index.esm.js";
import Ye from "../popover/index.esm.js";
import { withInstall as $e } from "../common/index.esm.js";
const Ge = {
/**
* 组件标识
*/
id: String,
/**
* 扩展按钮显示内容,这是一段现在扩展按钮中的html标签
*/
buttonContent: { type: String, default: '<i class="f-icon f-icon-lookup"></i>' },
buttonBehavior: { type: String, default: "Popup" },
/**
* 启用输入框自动完成功能
*/
autoComplete: { type: Boolean, default: !1 },
/**
* 组件自定义样式
*/
customClass: { type: String, default: "" },
/**
* 禁用组件,既不允许在输入框中录入,也不允许点击扩展按钮。
*/
disable: { type: Boolean, default: !1 },
/**
* 允许在输入框中录入文本。
*/
editable: { type: Boolean, default: !0 },
/**
* 显示清空文本按钮
*/
enableClear: { type: Boolean, default: !1 },
/**
* 组件值
*/
modelValue: { type: String, default: "" },
/**
* 将组件设置为只读,既不允许在输入框中录入,也不允许点击扩展按钮,但是允许复制输入框中的内容。
*/
readonly: { type: Boolean, default: !1 },
/**
* 禁用组件时,是否显示扩展按钮
*/
showButtonWhenDisabled: { type: Boolean, default: !1 },
/**
* 鼠标悬停在组件上时显示文本框内容。
*/
enableTitle: { type: Boolean, default: !1 },
/**
* 输入框类型
*/
inputType: { type: String, default: "text" },
/**
* 显示输入框提示信息
*/
forcePlaceholder: { type: Boolean, default: !1 },
/**
* 输入框提示文本
*/
placeholder: { type: String, default: "" },
/**
* 输入框最小长度
*/
minLength: Number,
/**
* 输入框最大长度
*/
maxLength: Number,
/**
* 输入框Tab键索引
*/
tabIndex: Number,
popupHost: { type: Object },
popupRightBoundary: { type: Object },
popupOffsetX: { type: Object },
popupOnInput: { type: Boolean, default: !1 },
popupOnFocus: { type: Boolean, default: !1 },
popupOnClick: { type: Boolean, default: !1 },
/**
* 样式追加到弹出窗口
*/
popupClass: { type: String, default: "" },
popupMinWidth: { type: Number, default: 160 },
modalOptions: { type: Object, default: {} },
wrapText: { type: Boolean, default: !1 },
/**
* 可选,是否支持多选
* 默认`false`
*/
multiSelect: { type: Boolean, default: !1 },
/**
* 可选,分隔符
* 默认`,`
*/
separator: { type: String, default: "," },
/** 对齐方式 */
textAlign: { type: String, default: "left" },
/**
* 废弃
*/
beforeClickButton: { type: Function, default: null },
/**
* 作为内嵌编辑器被创建后默认获得焦点
*/
focusOnCreated: { type: Boolean, default: !1 },
/**
* 作为内嵌编辑器被创建后默认选中文本
*/
selectOnCreated: { type: Boolean, default: !1 },
/**
* 打开前
*/
beforeOpen: { type: Function, default: null },
/** 更新方式 blur | change */
updateOn: { type: String, default: "change" },
keepWidthWithReference: { type: Boolean, default: !0 },
placement: { type: String, default: "bottom-left" }
}, qe = {
popupContentPosition: { type: Object, default: { left: 0, top: 0 } },
host: { type: Object },
backgroundColor: { type: String, default: "" }
}, _e = /* @__PURE__ */ oe({
name: "FOverlay",
props: qe,
emits: ["click"],
setup(e, t) {
const n = o(e.popupContentPosition), l = o(e.host), i = k(() => ({
backgroundColor: e.backgroundColor || "",
pointerEvents: "auto"
}));
function s(u) {
t.emit("click"), u.preventDefault(), u.stopPropagation();
}
k(() => {
const u = l.value;
if (u) {
const c = u.getBoundingClientRect(), {
left: m,
top: y,
height: p
} = c;
return {
left: m,
top: y + p
};
}
return n.value;
});
const r = k(() => ({
// position: 'relative',
// left: `${position.value.left}px`,
// top: `${position.value.top}px`
}));
return () => g(ie, {
to: "body"
}, {
default: () => {
var u, c;
return [g("div", {
class: "overlay-container",
onClick: (m) => s(m),
style: i.value
}, [g("div", {
style: r.value
}, [(c = (u = t.slots).default) == null ? void 0 : c.call(u)])])];
}
});
}
});
function Je(e) {
if (e.content && e.content.render)
return e.content.render;
if (e.render && typeof e.render == "function")
return e.render;
}
function Qe(e) {
const t = document.createElement("div");
t.style.display = "contents";
let n;
const l = e.onClickCallback || (() => {
}), i = () => {
l(), n && n.unmount();
};
return n = re({
setup() {
ue(() => {
document.body.removeChild(t);
});
const s = Je(e);
return () => g(_e, {
"popup-content-position": e.popupPosition,
host: e.host,
onClick: i,
backgroundColor: e.backgroundColor
}, {
default: () => [s && s()]
});
}
}), document.body.appendChild(t), n.mount(t), n;
}
class Ze {
static show(t) {
return Qe(t);
}
}
const et = {
/**
* 允许点击遮罩关闭对话框
*/
allowClickMaskToClose: { type: Boolean, default: !1 },
/**
* 关闭对话框前事件, 是个函数,返回true或者false
*/
beforeClose: { type: Function, default: () => !0 },
/**
* 自定义类
*/
class: { type: String, default: "" },
/**
* 自定义遮罩类
*/
maskClass: { type: String, default: "" },
/**
* 模态框标题
*/
title: { type: String, default: "" },
/**
* 模态框宽度
*/
width: { type: Number, default: 500 },
/**
* 模态框高度
*/
height: { type: Number, default: 320 },
/**
* 自定义按钮列表
*/
buttons: {
type: Array,
default: []
},
/**
* 是否展示模态框
*/
modelValue: { type: Boolean, default: !1 },
/**
* 是否模态
*/
mask: { type: Boolean, default: !0 },
/**
* 是否展示头部
*/
showHeader: { type: Boolean, default: !0 },
/**
* 是否展示默认按钮
*/
showButtons: { type: Boolean, default: !0 },
/**
* 是否启用自适应样式
*/
fitContent: { type: Boolean, default: !0 },
/**
* 是否展示右上角按钮
*/
showCloseButton: { type: Boolean, default: !0 },
showMaxButton: { type: Boolean, default: !1 },
minHeight: { type: Number },
maxHeight: { type: Number },
minWidth: { type: Number },
maxWidth: { type: Number },
containment: { type: Object, default: null },
resizeable: { type: Boolean, default: !1 },
draggable: { type: Boolean, default: !1 },
dragHandle: { type: Object, default: null },
closedCallback: { type: Function, default: null },
resizeHandle: { type: Function, default: null },
render: { type: Function, default: null },
acceptCallback: { type: Function, default: null },
rejectCallback: { type: Function, default: null },
enableEsc: { type: Boolean, default: !0 },
enableEnter: { type: Boolean, default: !1 },
dialogType: { type: String, default: "" },
src: { type: String, default: "" },
footerHeight: { type: Number, default: 60 }
};
class F {
constructor(t, n) {
this.x = t, this.y = n;
}
static getTransformInfo(t) {
const l = window.getComputedStyle(t).getPropertyValue("transform").replace(/[^-\d,]/g, "").split(",");
if (l.length >= 6) {
const i = parseInt(l[4], 10), s = parseInt(l[5], 10);
return { x: i, y: s };
}
return { x: 0, y: 0 };
}
static fromEvent(t, n = null) {
if (this.isMouseEvent(t))
return new F(t.clientX, t.clientY);
if (n === null || t.changedTouches.length === 1)
return new F(t.changedTouches[0].clientX, t.changedTouches[0].clientY);
for (let l = 0; l < t.changedTouches.length; l++)
if (t.changedTouches[l].target === n)
return new F(t.changedTouches[l].clientX, t.changedTouches[l].clientY);
}
static isMouseEvent(t) {
return Object.prototype.toString.apply(t).indexOf("MouseEvent") === 8;
}
static isIPosition(t) {
return !!t && "x" in t && "y" in t;
}
static getCurrent(t) {
const n = new F(0, 0);
if (window) {
const l = window.getComputedStyle(t);
if (l) {
const i = parseInt(l.getPropertyValue("left"), 10), s = parseInt(l.getPropertyValue("top"), 10);
n.x = isNaN(i) ? 0 : i, n.y = isNaN(s) ? 0 : s;
}
return n;
}
return null;
}
static copy(t) {
return new F(0, 0).set(t);
}
get value() {
return { x: this.x, y: this.y };
}
add(t) {
return this.x += t.x, this.y += t.y, this;
}
subtract(t) {
return this.x -= t.x, this.y -= t.y, this;
}
multiply(t) {
this.x *= t, this.y *= t;
}
divide(t) {
this.x /= t, this.y /= t;
}
reset() {
return this.x = 0, this.y = 0, this;
}
set(t) {
return this.x = t.x, this.y = t.y, this;
}
}
class K {
constructor(t, n) {
this.width = t, this.height = n;
}
static getCurrent(t) {
const n = new K(0, 0);
if (window) {
const l = window.getComputedStyle(t);
return l && (n.width = parseInt(l.getPropertyValue("width"), 10), n.height = parseInt(l.getPropertyValue("height"), 10)), n;
}
return null;
}
static copy(t) {
return new K(0, 0).set(t);
}
set(t) {
return this.width = t.width, this.height = t.height, this;
}
}
function tt(e, t) {
const n = o(), l = o(), i = o(), s = o(), r = o(), u = o(), c = o(), m = o(), y = o(), p = o(), T = o(), b = o(e.resizeable), w = o(), O = o(e.draggable), z = o(!1);
function P() {
const d = l.value || document.body, v = window.getComputedStyle(d);
if (!v || !n.value)
return;
const E = F.getTransformInfo(n.value), B = {};
c.value && (B.deltaL = n.value.offsetLeft - c.value.x, B.deltaT = n.value.offsetTop - c.value.y);
const W = v.getPropertyValue("position");
B.width = d.clientWidth, B.height = d.clientHeight, B.pr = parseInt(v.getPropertyValue("padding-right"), 10), B.pb = parseInt(v.getPropertyValue("padding-bottom"), 10), B.position = v.getPropertyValue("position"), W === "static" && (d.style.position = "relative"), B.translateX = E.x, B.translateY = E.y, p.value = B;
}
function I(d) {
if (n.value) {
s.value = K.getCurrent(n.value), r.value = F.getCurrent(n.value), u.value = s.value ? K.copy(s.value) : null, c.value = r.value ? F.copy(r.value) : null, P();
const v = d.target.getAttribute("type") || "";
m.value = {
n: !!v.match(/n/),
s: !!v.match(/s/),
w: !!v.match(/w/),
e: !!v.match(/e/)
};
}
}
function L() {
var d, v, E, B;
if (n.value) {
const W = n.value;
m.value && ((m.value.n || m.value.s) && ((d = u.value) != null && d.height) && (W.style.height = u.value.height + "px"), (m.value.w || m.value.e) && ((v = u.value) != null && v.width) && (W.style.width = u.value.width + "px"), c.value && ((E = c.value) != null && E.x && (W.style.left = c.value.x + "px"), (B = c.value) != null && B.y && (W.style.top = c.value.y + "px")));
}
}
function D() {
const d = e.minHeight ? e.minHeight : 1, v = e.minWidth ? e.minWidth : 1;
u.value && c.value && m.value && s.value && (u.value.height < d && (u.value.height = d, m.value.n && r.value && (c.value.y = r.value.y + (s.value.height - d))), u.value.width < v && (u.value.width = v, m.value.w && r.value && (c.value.x = r.value.x + (s.value.width - v))), e.maxHeight && u.value.height > e.maxHeight && (u.value.height = e.maxHeight, r.value && m.value.n && (c.value.y = r.value.y + (s.value.height - e.maxHeight))), e.maxWidth && u.value.width > e.maxWidth && (u.value.width = e.maxWidth, m.value.w && r.value && (c.value.x = r.value.x + (s.value.width - e.maxWidth))));
}
function C() {
if (l.value) {
const d = p.value;
if (c.value && u.value && m.value && s.value) {
const v = d.width - d.pr - d.deltaL - d.translateX - c.value.x, E = d.height - d.pb - d.deltaT - d.translateY - c.value.y;
m.value.n && c.value.y + d.translateY < 0 && r.value && (c.value.y = -d.translateY, u.value.height = s.value.height + r.value.y + d.translateY), m.value.w && c.value.x + d.translateX < 0 && r.value && (c.value.x = -d.translateX, u.value.width = s.value.width + r.value.x + d.translateX), u.value.width > v && (u.value.width = v), u.value.height > E && (u.value.height = E);
}
}
}
function R(d) {
if (!i.value || !s.value || !r.value || !m.value)
return;
d.subtract(i.value);
const v = d.x, E = d.y;
m.value.n ? (c.value.y = r.value.y + E, u.value.height = s.value.height - E) : m.value.s && (u.value.height = s.value.height + E), m.value.e ? u.value.width = s.value.width + v : m.value.w && (u.value.width = s.value.width - v, c.value.x = r.value.x + v), C(), D(), L();
}
function f(d) {
if (!y.value)
return;
const v = F.fromEvent(d);
v && R(v);
}
function x() {
if (n.value) {
const {
width: d,
height: v,
x: E,
y: B
} = n.value.getBoundingClientRect(), W = F.getTransformInfo(n.value);
return {
size: {
width: d,
height: v
},
position: {
x: E - W.x,
y: B - W.y
}
};
}
return null;
}
function S(d) {
if (n.value) {
const v = x();
T.value = v;
}
i.value = void 0, s.value = null, r.value = null, u.value = null, c.value = null, m.value = null, y.value = null, document.removeEventListener("mousemove", f), document.removeEventListener("mouseup", S);
}
function H() {
document.addEventListener("mousemove", f), document.addEventListener("mouseup", S);
}
function h(d) {
d instanceof MouseEvent && d.button === 2 || O.value && (document.body.click(), d.stopPropagation(), d.preventDefault(), i.value = F.fromEvent(d), y.value = d.target, I(d), H());
}
function j(d) {
return n.value = d, b.value && g(ce, null, [g("div", {
class: "fv-resizable-handle fv-resizable-n",
type: "n",
onMousedown: (v) => h(v)
}, null), g("div", {
class: "fv-resizable-handle fv-resizable-e",
type: "e",
onMousedown: (v) => h(v)
}, null), g("div", {
class: "fv-resizable-handle fv-resizable-s",
type: "s",
onMousedown: (v) => h(v)
}, null), g("div", {
class: "fv-resizable-handle fv-resizable-w",
type: "w",
onMousedown: (v) => h(v)
}, null), g("div", {
class: "fv-resizable-handle fv-resizable-ne",
type: "ne",
onMousedown: (v) => h(v)
}, null), g("div", {
class: "fv-resizable-handle fv-resizable-se fv-resizable-diagonal",
type: "se",
onMousedown: (v) => h(v)
}, null), g("div", {
class: "fv-resizable-handle fv-resizable-sw",
type: "sw",
onMousedown: (v) => h(v)
}, null), g("div", {
class: "fv-resizable-handle fv-resizable-nw",
type: "nw",
onMousedown: (v) => h(v)
}, null)]);
}
function q(d = !0) {
document.body.click();
const v = l.value || document.body, E = K.getCurrent(v), B = n.value;
d && B && (w.value = x(), w.value.transform = B.style.transform), E && B && (u.value = E, u.value.height -= 14, u.value.width -= 14, B.style.height = u.value.height + "px", B.style.width = u.value.width + "px", B.style.left = "7px", B.style.top = "7px", B.style.transform = "", T.value = {
size: u.value,
position: {
x: 0,
y: 0
}
}, O.value = !1, z.value = !0);
}
function J() {
var d, v;
if (document.body.click(), w.value) {
const E = {
width: w.value.size.width || 0,
height: w.value.size.height || 0
}, B = {
x: (window.innerWidth - E.width) / 2,
y: (window.innerHeight - E.height) / 2
};
(d = u.value) == null || d.set(E), (v = c.value) == null || v.set(B);
const W = n.value;
W.style.height = E.height + "px", W.style.width = E.width + "px", W.style.left = `${B.x}px`, W.style.top = `${B.y}px`, W.style.transform = "", T.value = {
size: E,
position: B
}, O.value = e.draggable, z.value = !1;
}
}
function Q() {
if (n.value) {
const d = K.getCurrent(n.value);
if (d) {
const {
width: v,
height: E
} = d;
n.value.style.left = `${(window.innerWidth - v) / 2}px`, n.value.style.top = `${(window.innerHeight - E) / 2}px`, n.value.style.transform = "";
}
}
}
function Y() {
const d = () => {
z.value ? q(!1) : Q(), document.body.click();
};
return window.addEventListener("resize", d), () => {
window.removeEventListener("resize", d);
};
}
const Z = Y();
return {
renderResizeBar: j,
boundingElement: l,
resizedEventParam: T,
maximize: q,
restore: J,
allowDrag: O,
isMaximized: z,
unWindowResizeHandle: Z
};
}
function nt(e, t, n) {
const l = o(), i = o(e.draggable), s = o(e.lockAxis), r = o(), u = o(), c = o(!1), m = o(new F(0, 0)), y = o(new F(0, 0)), p = o(new F(0, 0)), T = o(new F(0, 0));
N(() => n.value, (f) => {
r.value.style.cursor = f ? "move" : "default";
});
function b(f, x) {
if (x.tagName === "BUTTON")
return !1;
if (x === f)
return !0;
for (const S in x.children)
if (Object.prototype.hasOwnProperty.call(x.children, S) && b(f, x.children[S]))
return !0;
return !1;
}
function w() {
var H, h;
let f = p.value.x + y.value.x, x = p.value.y + y.value.y;
s.value === "x" ? (f = ((H = m.value) == null ? void 0 : H.x) || 0, p.value.x = 0) : s.value === "y" && (x = ((h = m.value) == null ? void 0 : h.y) || 0, p.value.y = 0);
const S = `translate3d(${Math.round(f)}px, ${Math.round(x)}px, 0px)`;
l.value && (l.value.style.transform = S), T.value.x = f, T.value.y = x;
}
function O() {
if (!u.value || !l.value)
return null;
const f = u.value.getBoundingClientRect(), x = l.value.getBoundingClientRect(), S = {
top: f.top < x.top,
right: f.right > x.right,
bottom: f.bottom > x.bottom,
left: f.left < x.left
};
return S.top || (p.value.y -= x.top - f.top), S.bottom || (p.value.y -= x.bottom - f.bottom), S.right || (p.value.x -= x.right - f.right), S.left || (p.value.x -= x.left - f.left), w(), S;
}
function z(f) {
f && (m.value && f.subtract(m.value), p.value.set(f), w(), O());
}
function P(f) {
c.value && i.value && (f.stopPropagation(), f.preventDefault(), z(F.fromEvent(f, r.value)));
}
function I() {
var f;
c.value && (c.value = !1, y.value.add(p.value), p.value.reset(), (f = l.value) == null || f.classList.remove("ng-dragging"), t.emit("stopMove"), document.removeEventListener("mousemove", P), document.removeEventListener("mouseup", I));
}
function L() {
!c.value && r.value && (c.value = !0, r.value.classList.add("ng-dragging"), document.addEventListener("mousemove", P), document.addEventListener("mouseup", I));
}
function D() {
if (l.value) {
const f = F.getTransformInfo(l.value);
y.value.set(f);
return;
}
y.value.reset();
}
function C(f) {
if (!n.value || f instanceof MouseEvent && f.button === 2)
return;
const x = f.target || f.srcElement;
r.value !== void 0 && x && !b(x, r.value) || i.value !== !1 && (document.body.click(), f.stopPropagation(), f.preventDefault(), m.value = F.fromEvent(f, l.value), D(), L());
}
function R(f, x, S) {
if (i.value && x) {
if (f)
r.value = f;
else if (e.dragHandle) {
if (e.dragHandle instanceof HTMLElement)
r.value = e.dragHandle;
else if (typeof e.dragHandle == "string") {
const H = x.querySelector(e.dragHandle);
H && (r.value = H);
}
}
l.value = x, u.value = S, r.value ? (r.value.classList.add("ng-draggable"), r.value.addEventListener("mousedown", C)) : i.value = !1;
}
}
return {
registerDraggle: R,
resetTranslate: D
};
}
function fe(e, t) {
if (e) {
const n = (l) => {
l.key.toLowerCase() === e.toLowerCase() && t({ event: l, key: e });
};
return document.addEventListener("keydown", n), () => {
document.removeEventListener("keydown", n);
};
}
}
function lt(e, t) {
const n = o(e.enableEsc);
let l = null;
return n.value ? (l = fe("Escape", (i) => {
t.emit("esc", { event: i.event, type: "esc" });
}), {
remove: l
}) : null;
}
function at(e, t) {
const n = o(e.enableEnter);
let l = null;
return n.value ? (l = fe("Enter", (i) => {
t.emit("enter", { event: i.event, type: "enter" });
}), {
remove: l
}) : null;
}
const G = /* @__PURE__ */ oe({
name: "FModal",
props: et,
emits: ["update:modelValue", "accept", "cancel", "closed", "resize", "esc", "enter", "stopMove"],
setup(e, t) {
const n = o(e.width || 300), l = o(e.height || 200), i = o(e.modelValue), s = o(""), r = o(e.class), u = o(e.fitContent), c = o(e.showHeader), m = o(""), y = o(e.showCloseButton), p = o(e.showMaxButton), T = o(!1), b = o(e.dialogType), w = o(e.src), O = o(""), z = o(e.showButtons), P = o(e.title), I = o(e.containment || null), L = o(), D = o(!1);
function C(a, M) {
Promise.resolve().then(() => {
var V;
return (V = e.beforeClose) == null ? void 0 : V.call(e);
}).then((V) => {
V && (i.value = !1, t.emit("update:modelValue", !1), M != null && t.emit(M ? "accept" : "cancel"), t.emit("closed", a));
});
}
const R = [{
name: "cancel",
text: "取消",
class: "btn btn-secondary",
handle: (a) => {
C(a, !1);
}
}, {
name: "accept",
text: "确定",
class: "btn btn-primary",
handle: (a) => {
C(a, !0);
}
}], f = o(e.buttons && e.buttons.length ? e.buttons : R), x = k(() => !!m.value), S = k(() => !!z.value && !!f.value), H = o(), h = o(), j = o(!1), {
renderResizeBar: q,
maximize: J,
restore: Q,
boundingElement: Y,
resizedEventParam: Z,
allowDrag: d,
unWindowResizeHandle: v
} = tt(e), {
registerDraggle: E
} = nt(e, t, d);
function B() {
return !!document.querySelectorAll(".farris-modal").length && document.body.classList.contains("modal-open");
}
function W() {
const a = document.querySelectorAll(".farris-modal").length;
(!a || a - 1 <= 0) && document.body.classList.remove("modal-open"), L.value && L.value.classList.remove("show");
}
N(() => e.title, (a, M) => {
a !== M && (P.value = a);
}), N(() => e.modelValue, (a, M) => {
a !== M && (i.value = a, i.value && e.draggable && $(() => {
h.value && !I.value && (I.value = h.value.parentElement, Y.value = I.value, E(H.value, h.value, Y.value));
}), a || (I.value && (I.value = null), W())), i.value && (D.value = B());
}), N(() => e.showHeader, (a, M) => {
a !== M && (c.value = a);
}), N(() => e.showButtons, (a, M) => {
a !== M && (z.value = a);
}), N(() => Z.value, (a, M) => {
const V = a || {}, A = M || {};
JSON.stringify(V) !== JSON.stringify(A) && t.emit("resize", {
newSize: a,
oldSize: M,
isMaximized: j.value
});
});
const ee = k(() => (i.value && document.body.classList.add("modal-open"), i.value)), ge = k(() => {
var V;
const a = {
modal: !0,
"farris-modal": !0,
fade: !0
};
a["f-modal-fitContent"] = !!u.value, a.show = !!ee.value;
const M = (V = e.maskClass) == null ? void 0 : V.split(" ");
return M == null || M.reduce((A, le) => (A[le] = !0, A), a), a;
}), ye = k(() => {
var V;
const a = {
"modal-dialog": !0
}, M = (V = r.value) == null ? void 0 : V.split(" ");
return M == null || M.reduce((A, le) => (A[le] = !0, A), a), a;
}), pe = k(() => {
const a = {
position: "absolute",
top: `${(window.innerHeight - l.value) / 2}px`,
left: `${(window.innerWidth - n.value) / 2}px`,
width: `${n.value}px`,
height: u.value ? "auto" : `${l.value}px`
};
return e.mask || (a.pointerEvents = "auto"), a;
}), be = k(() => {
const a = {
display: "block"
};
return e.mask || (a.pointerEvents = "none", a.backgroundColor = "transparent"), D.value && (a.backgroundColor = "transparent"), a;
}), we = k(() => ({
"modal-content": !0,
"modal-content-has-header": c.value
})), Ce = k(() => {
const a = {
display: c.value ? "" : "none"
};
return a["pointer-events"] = d.value ? "auto" : "none", a;
}), xe = k(() => ({
"f-icon": !0,
modal_maximize: !0,
modalrevert: j.value
})), Be = k(() => ({
"modal-body": !0,
"f-utils-flex-column": b.value === "iframe",
"f-utils-fill": !0
}));
function Me() {
return {
height: `${e.footerHeight || 60}px`
};
}
const ke = k(() => {
const a = {
textAlgin: O.value
}, M = Me();
return Object.assign(a, M);
});
function se(a) {
if (a.stopPropagation(), j.value) {
j.value = !1, Q();
return;
}
J(), j.value = !0;
}
async function Te(a, M) {
a.handle && await a.handle(M, a) && t.emit("closed", M);
}
function Ee(a) {
a.width && (n.value = a.width), a.height && (l.value = a.height), a.buttons && (f.value = a.buttons), a.title && (P.value = a.title);
}
let te = null, ne = null;
je(() => {
D.value = B();
}), _(() => {
h.value && !I.value && (I.value = h.value.parentElement, Y.value = I.value, E(H.value, h.value, Y.value)), ee.value && document.body.classList.add("modal-open"), te = lt(e, t), ne = at(e, t);
}), ue(() => {
v && v(), te && te.remove(), ne && ne.remove();
}), t.expose({
modalElementRef: h,
updateModalOptions: Ee,
close: C,
maxDialog: se,
isMaximized: j
});
function Oe() {
return g("ul", null, [T.value && g("li", {
class: "f-btn-icon f-bare"
}, [g("span", {
class: "f-icon modal_minimize"
}, null)]), p.value && g("li", {
onClick: se,
class: "f-btn-icon f-bare",
style: "pointer-events: auto;"
}, [g("span", {
class: xe.value
}, null)]), y.value && g("li", {
class: "f-btn-icon f-bare",
onClick: (a) => C(a, !1),
style: "pointer-events: auto;"
}, [g("span", {
class: "f-icon modal_close"
}, null)])]);
}
function ze() {
return g("div", {
class: "modal-footer",
style: ke.value
}, [f.value && f.value.map((a) => {
const M = o(a.disabled);
return g("button", {
name: a.name,
type: "button",
disabled: M.value,
class: a.class + (a.iconClass ? " btn-icontext" : ""),
onClick: (V) => {
Te(a, V);
}
}, [!!a.iconClass && g("i", {
class: a.iconClass
}, null), a.text]);
})]);
}
function Pe() {
return g("div", {
ref: H,
class: "modal-header",
style: Ce.value
}, [t.slots.headerTemplate ? t.slots.headerTemplate() : g("div", {
class: "modal-title"
}, [x.value && g("span", {
class: m.value,
style: "margin-right: 8px"
}, null), g("span", {
class: "modal-title-label"
}, [P.value])]), g("div", {
class: "actions"
}, [Oe()])]);
}
function Ie() {
return t.slots.footerTemplate ? t.slots.footerTemplate() : S.value && ze();
}
function Re(a) {
if (a.stopPropagation(), e.allowClickMaskToClose) {
if (a.target !== L.value)
return;
C(a, !1);
}
}
function Se() {
var a, M;
return g("div", {
id: s.value,
class: ye.value,
style: pe.value,
ref: h
}, [g("div", {
class: we.value
}, [c.value && Pe(), g("div", {
class: Be.value
}, [(M = (a = t.slots).default) == null ? void 0 : M.call(a), b.value === "iframe" && g("iframe", {
title: s.value,
class: "f-utils-fill",
width: "100%",
frameborder: "0",
src: w.value
}, null)]), Ie()]), !u.value && h.value && !j.value && q(h.value)]);
}
return () => g(ie, {
to: "body"
}, {
default: () => [ee.value && g(Fe, {
name: "fade",
appear: !0
}, {
default: () => [g("div", {
ref: L,
class: ge.value,
style: be.value,
onClick: Re
}, [Se()])]
})]
});
}
});
function ve(e) {
if (e.content && e.content.render)
return e.content.render;
if (e.render && typeof e.render == "function")
return e.render;
}
function ot(e) {
const t = document.createElement("div");
t.style.display = "contents";
const n = re({
setup(l, i) {
ue(() => {
document.body.removeChild(t);
});
const s = o(), r = o(e.class || ""), u = o(!!e.showButtons), c = o(!!e.showHeader), m = o(e.showCloseButton == null ? !0 : e.showCloseButton), y = o(!0), p = o(e.title || ""), T = e.acceptCallback || (() => {
}), b = e.rejectCallback || (() => {
}), w = e.closedCallback || ((L) => {
}), O = e.resizeHandle || ((L) => {
}), z = e.stopMoveHandle || ((L) => {
}), P = ve(e), I = (L) => {
y.value = !1, n.unmount(), w(L);
};
return _(() => {
}), i.expose({
modalRef: s
}), () => g(G, {
ref: s,
class: r.value,
modelValue: y.value,
"onUpdate:modelValue": (L) => y.value = L,
title: p.value,
width: e.width,
height: e.height,
buttons: e.buttons,
"show-header": c.value,
"show-buttons": u.value,
"show-close-button": m.value,
"show-max-button": !1,
onAccept: T,
onCancel: b,
fitContent: e.fitContent == null ? !0 : e.fitContent,
onClosed: I,
onResize: O,
onStopMove: z
}, {
default: () => [P && P(n)]
});
}
});
return document.body.appendChild(t), n.mount(t), n;
}
class ut {
constructor(t) {
X(this, "appContext", null);
X(this, "modalRef", o());
X(this, "activeModalIndex", o(0));
X(this, "modalRefs", {});
X(this, "isUseEscCloseModal", o(!1));
X(this, "activeModalInstance", k(() => this.modalRefs[this.activeModalIndex.value]));
this.app = t, this.appContext = t ? t._context : null;
}
getCurrentModal() {
return this.activeModalInstance.value;
}
adaptToWindow(t, n) {
const {
width: l,
height: i
} = {
width: window.innerWidth,
height: window.innerHeight
};
return l < t && (t = l - 14), i < n && (n = i - 14), {
width: t,
height: n
};
}
static show(t) {
const n = Object.assign({
title: "",
showButtons: !0,
showHeader: !0
}, t);
return ot(n);
}
close(t) {
var n, l;
t ? (l = t.value) == null || l.close() : (n = this.getCurrentModal()) == null || n.close();
}
open(t) {
const n = document.createDocumentFragment();
t.showMaxButton && t.fitContent && (t.showMaxButton = !1);
const l = We(Object.assign({
title: "",
showButtons: !0,
showHeader: !0
}, t)), i = o(!0), s = l.value.acceptCallback || (() => {
}), r = l.value.rejectCallback || (() => {
}), u = l.value.closedCallback || ((C, R) => {
}), c = l.value.resizeHandle || ((C) => {
}), m = t.stopMoveHandle || ((C) => {
});
let y;
const p = ve(l.value), T = (C) => {
var f;
i.value = !1;
const R = (f = C == null ? void 0 : C.target) == null ? void 0 : f.classList.contains("modal_close");
u(C, this.isUseEscCloseModal.value ? "esc" : R ? "icon" : "button");
}, b = (C) => {
T(C), y && $(() => {
if (this.modalRefs[this.activeModalIndex.value] && delete this.modalRefs[this.activeModalIndex.value], ae(null, n), y = null, this.modalRef.value = null, this.modalRefs) {
const R = Object.keys(this.modalRefs).map((f) => Number(f));
R.length > 0 ? this.activeModalIndex.value = Math.max(...R) : this.activeModalIndex.value = 0;
}
this.isUseEscCloseModal.value = !1;
});
}, w = (C) => {
var R;
this.isUseEscCloseModal.value = !0, this.activeModalInstance && ((R = this.activeModalInstance.value) == null || R.close(C == null ? void 0 : C.event));
}, {
width: O,
height: z
} = l.value, P = this.adaptToWindow(O || 500, z || 320);
Object.assign(l.value, P);
const I = () => g(G, de({
ref: this.modalRef,
modelValue: i.value,
"onUpdate:modelValue": (C) => i.value = C
}, l.value, {
onAccept: s,
onCancel: r,
onClosed: b,
onResize: c,
onEsc: w,
onStopMove: m
}), {
default: () => [p && p(this.app)]
});
return y = ((C) => {
const R = Ve(I, C);
return R.appContext = this.appContext, ae(R, n), R;
})({
...l.value
// 'onUpdate:modelValue': onUpdateModelValue,
}), this.activeModalIndex.value++, this.modalRefs[this.activeModalIndex.value] = this.modalRef.value, {
update: (C) => {
l.value = {
...l.value,
...C
}, y && ae(De(y, {
...l
}), n);
},
destroy: b,
modalRef: this.activeModalInstance,
close: this.close
};
}
}
const he = Symbol("FModalService");
G.install = (e) => {
e.component(G.name, G);
const t = new ut(e);
e.provide(he, t), e.provide("FModalService", t);
};
function me(e, t) {
function n() {
const l = e.beforeOpen || e.beforeClickButton || null;
let i = Promise.resolve(!0);
if (l) {
const s = l(t.value);
if (typeof s > "u")
return i;
typeof s == "boolean" ? i = Promise.resolve(s) : i = s;
}
return i;
}
return { judgeCanOpen: n };
}
function st(e, t, n, l, i) {
const s = o(e.buttonBehavior), r = o(e.popupOnInput), u = k(() => ({
"input-group-append": !0,
"append-force-show": e.showButtonWhenDisabled && (e.readonly || e.disable)
})), { judgeCanOpen: c } = me(e, i), m = k(() => e.showButtonWhenDisabled || (!e.editable || !e.readonly) && !e.disable), y = Ne(he, null), p = o();
async function T(O) {
if (await c() && m.value) {
const z = !!t.slots.default;
if (s.value === "Modal") {
const P = e.modalOptions, I = y == null ? void 0 : y.open({
...P,
render: () => t.slots.default && t.slots.default()
});
p.value = I == null ? void 0 : I.modalRef;
}
s.value === "Overlay" && Ze.show({
// host: buttonEditRef.value,
host: document.body,
backgroundColor: "rgba(0,0,0,.15)",
render: () => t.slots.default && t.slots.default()
}), z && s.value === "Popup" && l.togglePopup(!0), z && r.value && l.hidePopup(), t.emit("clickButton", { origin: O, value: e.modelValue });
}
}
function b(O) {
t.emit("mouseEnterIcon", O);
}
function w(O) {
t.emit("mouseLeaveIcon", O);
}
return {
buttonGroupClass: u,
onClickButton: T,
onMouseEnterButton: b,
onMouseLeaveButton: w,
modalRef: p
};
}
function it(e, t, n, l, i, s) {
const r = o(!1), u = k(() => e.enableClear && !e.readonly && !e.disable), { changeTextBoxValue: c, hasClearClass: m } = s;
function y(w) {
r.value = w, m.value = w;
}
N(i, () => {
y(!!i.value);
});
function p(w) {
const O = !e.readonly && !e.disable && e.editable, z = !e.editable;
w.stopPropagation(), (O || z) && (c(""), y(!r.value), t.emit("clear"));
}
function T(w) {
if (u.value) {
if (!n.value) {
y(!1);
return;
}
!e.disable && !e.readonly && y(!0);
}
}
function b(w) {
u.value && y(!1);
}
return {
enableClearButton: u,
showClearButton: r,
onClearValue: p,
onMouseEnterTextBox: T,
onMouseLeaveTextBox: b
};
}
function rt(e, t, n, l, i) {
const s = k(() => e.popupOnInput), r = k(() => e.popupOnFocus), { shouldPopupContent: u, closeAllPopover: c } = i, m = o(!1), y = k(() => e.enableTitle ? n.value : ""), p = k(() => (e.disable || e.readonly) && !e.forcePlaceholder ? "" : e.placeholder), T = k(() => e.readonly || !e.editable), b = o(!1), w = k(() => !e.disable && b.value), O = k(() => ({
"text-left": e.textAlign === "left",
"text-center": e.textAlign === "center",
"text-right": e.textAlign === "right",
"form-control": !0,
"f-utils-fill": !0
})), z = k(() => ({
"input-group": !0,
"f-state-disabled": e.disable,
"f-state-editable": e.editable && !e.disable && !e.readonly,
"f-state-readonly": e.readonly && !e.disable,
"f-state-focus": w.value,
"input-group--has-clear": e.enableClear && m.value
}));
function P(h, j = !0) {
n.value = h, j && (t.emit("change", h), t.emit("update:modelValue", h));
}
function I(h) {
u.value = !1, P(h, !0);
}
N(
() => e.modelValue,
(h) => {
n.value = h;
}
);
function L(h) {
b.value = !1, t.emit("blur", h), h.stopPropagation();
}
function D(h) {
t.emit("click", h), c(), t.slots.default && !e.disable && !e.readonly && e.popupOnClick && i.togglePopup();
}
function C(h) {
e.disable || (b.value = !0, T.value || (t.emit("focus", h), r.value && !u.value && i.popup()));
}
function R(h) {
t.emit("input", h.target.value);
const j = h.target.value;
l.value = j, n.value !== j && P(j, e.updateOn === "change"), s.value && !u.value && i.popup();
}
function f(h) {
h.target.tagName !== "INPUT" && h.preventDefault(), h.stopPropagation();
}
function x(h) {
t.emit("keydown", h);
}
function S(h) {
h.key === "Enter" && (s.value || r.value) && i.hidePopup(), t.emit("keyup", h);
}
function H(h) {
const j = h.target.value;
h.stopPropagation(), P(j);
}
return {
hasFocusedTextBox: w,
isTextBoxReadonly: T,
textBoxClass: O,
textBoxPlaceholder: p,
textBoxTitle: y,
inputGroupClass: z,
hasClearClass: m,
changeTextBoxValue: P,
commitValue: I,
onBlurTextBox: L,
onClickTextBox: D,
onFocusTextBox: C,
onInput: R,
onKeyDownTextBox: x,
onKeyUpTextBox: S,
onMouseDownTextBox: f,
onTextBoxValueChange: H
};
}
const U = "FarrisVue_PopoverInstancesKey";
function ct(e, t, n, l) {
const i = o(), s = o(!1), { judgeCanOpen: r } = me(e, l);
N(() => i.value, (b, w) => {
window[U] = window[U] || /* @__PURE__ */ new WeakMap(), b ? window[U].set(n.value, b) : window[U].delete(n.value);
});
function u() {
if (window[U]) {
const b = window[U];
document.querySelectorAll(".f-button-edit,.v-popover").forEach((w) => {
b.get(w) && w !== n.value && b.get(w).hide();
});
}
}
function c() {
const b = i.value;
b && b.show(n.value);
}
async function m(b = !1) {
if (!!t.slots.default) {
if (!b && !s.value && !await r())
return;
s.value = !s.value, await $(), c();
}
}
async function y(b = !1) {
if (!!t.slots.default) {
if (!b && !await r())
return;
s.value = !0, await $(), c();
}
}
function p() {
s.value = !1;
}
function T() {
s.value = !0, $(() => {
c();
});
}
return { hidePopup: p, showPopup: T, popup: y, shouldPopupContent: s, togglePopup: m, popoverRef: i, closeAllPopover: u };
}
function dt(e, t, n) {
const l = o(), {
isTextBoxReadonly: i,
textBoxClass: s,
textBoxPlaceholder: r,
textBoxTitle: u,
onBlurTextBox: c,
onClickTextBox: m,
onFocusTextBox: y,
onInput: p,
onKeyDownTextBox: T,
onKeyUpTextBox: b,
onMouseDownTextBox: w,
onTextBoxValueChange: O
} = n;
return _(() => {
var z, P;
e.selectOnCreated && ((z = l.value) == null || z.select()), e.focusOnCreated && ((P = l.value) == null || P.focus({
preventScroll: !0
}));
}), () => g("input", {
ref: l,
name: "input-group-value",
autocomplete: e.autoComplete ? "on" : "off",
class: s.value,
disabled: e.disable,
maxlength: e.maxLength,
minlength: e.minLength,
placeholder: r.value,
readonly: i.value,
tabindex: e.tabIndex,
title: u.value,
type: e.inputType,
value: t.value,
onBlur: c,
onChange: O,
onClick: m,
onFocus: y,
onInput: p,
onKeydown: T,
onKeyup: b,
onMousedown: w
}, null);
}
function ft(e, t, n) {
const l = o(e.separator), {
changeTextBoxValue: i
} = n, s = k(() => e.readonly || e.disable), r = k(() => t.value ? t.value.split(l.value).map((c) => ({
name: c,
selectable: !0
})) : []);
function u(c) {
i(c.map((m) => m.name).join(l.value), !0);
}
return () => g(Ke, {
id: `${e.id}-tag-editor`,
class: "form-control",
data: r.value,
showClose: !s.value,
disable: s.value,
showInput: !0,
onChange: u
}, null);
}
function vt(e, t, n, l) {
const {
buttonGroupClass: i,
onClickButton: s,
onMouseEnterButton: r,
onMouseLeaveButton: u
} = n, {
enableClearButton: c,
showClearButton: m,
onClearValue: y
} = l, p = o();
return {
renderButtonGroup: () => g("div", {
id: `${e.id}-button-group`,
class: i.value
}, [c.value && Ae(g("span", {
class: "input-group-text input-group-clear",
onClick: y
}, [g("i", {
class: "f-icon modal_close"
}, null)]), [[Xe, m.value]]), t.slots.buttonContent ? g("span", {
class: "input-group-text input-group-append-button",
onClick: s,
onMouseenter: r,
onMouseleave: u
}, [t.slots.buttonContent()]) : e.buttonContent ? g("span", {
class: "input-group-text input-group-append-button",
innerHTML: e.buttonContent,
ref: p,
onClick: s,
onMouseenter: r,
onMouseleave: u
}, null) : null]),
buttonHandleElement: p
};
}
function ht(e, t, n) {
const l = o(e.popupMinWidth), {
hidePopup: i,
popoverRef: s
} = n;
return () => g(Ye, {
id: `${e.id}-popover`,
ref: s,
placement: e.placement,
host: e.popupHost,
"keep-width-with-reference": e.keepWidthWithReference,
fitContent: !0,
"right-boundary": e.popupRightBoundary,
minWidth: l.value,
class: e.popupClass,
offsetX: e.popupOffsetX,
onHidden: i
}, {
default: () => {
var r, u;
return [(u = (r = t.slots).default) == null ? void 0 : u.call(r)];
}
});
}
const mt = /* @__PURE__ */ oe({
name: "FButtonEdit",
props: Ge,
emits: ["updateExtendInfo", "clear", "change", "click", "clickButton", "blur", "focus", "mouseEnterIcon", "mouseLeaveIcon", "keyup", "keydown", "inputClick", "input", "update:modelValue"],
setup(e, t) {
const n = o(), l = o(e.customClass), i = o(e.modelValue), s = ct(e, t, n, i), {
shouldPopupContent: r,
hidePopup: u,
showPopup: c,
togglePopup: m
} = s, y = st(e, t, n, s, i), p = o(""), T = rt(e, t, i, p, s), {
hasFocusedTextBox: b,
commitValue: w,
inputGroupClass: O
} = T, z = it(e, t, i, b, p, T), {
onMouseEnterTextBox: P,
onMouseLeaveTextBox: I
} = z, L = k(() => {
const H = {
"f-button-edit": !0,
"f-cmp-inputgroup": !0,
"f-button-edit-nowrap": !e.wrapText
};
return l.value && l.value.split(" ").reduce((h, j) => (h[j] = !0, h), H), H;
});
function D() {
return e.multiSelect && e.inputType === "tag" ? ft(e, i, T) : dt(e, i, T);
}
let C = D();
N([() => e.multiSelect, () => e.inputType], () => {
C = D();
});
const {
renderButtonGroup: R,
buttonHandleElement: f
} = vt(e, t, y, z), x = ht(e, t, s), S = {
commitValue: w,
elementRef: n,
hidePopup: u,
showPopup: c,
popoverRef: s.popoverRef,
shouldPopupContent: r,
togglePopup: m,
openDialog: () => {
f.value && e.buttonBehavior === "Modal" && f.value.click();
},
getModal: () => {
var H;
return e.buttonBehavior === "Modal" ? (H = y.modalRef.value) == null ? void 0 : H.value : null;
}
};
return _(() => {
n.value.componentInstance = S, window.onresize = () => {
document.body.click();
};
}), Ue(() => {
var H;
window.onresize = null, (H = window[U]) == null || H.delete(n.value);
}), t.expose(S), () => g(ce, null, [g("div", de(t.attrs, {
ref: n,
class: L.value,
id: e.id
}), [g("div", {
id: `${e.id}-input-group`,
class: O.value,
onMouseenter: P,
onMouseleave: I
}, [C(), R()])]), r.value && x()]);
}
}), Ct = $e(mt);
export {
mt as FButtonEdit,
Ge as buttonEditProps,
Ct as default
};