UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

1,480 lines (1,479 loc) 45.9 kB
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 };