UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

1,611 lines 51.9 kB
var Ne = Object.defineProperty; var Ae = (e, t, n) => t in e ? Ne(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n; var J = (e, t, n) => Ae(e, typeof t != "symbol" ? t + "" : t, n); import { defineComponent as se, ref as o, computed as E, createVNode as y, Teleport as he, createApp as me, onUnmounted as re, Fragment as ne, watch as U, nextTick as Z, onBeforeMount as Xe, onMounted as le, watchEffect as Ue, Transition as Ke, shallowRef as Ye, render as ie, h as $e, cloneVNode as Ge, mergeProps as ge, inject as qe, withDirectives as _e, vShow as Je, onUpdated as Ze, onBeforeUnmount as Qe, createTextVNode as et } from "vue"; import { LocaleService as te } from "../locale/index.esm.js"; import { isMobilePhone as tt, getMaxZIndex as ve, useGuid as nt, withInstall as lt } from "../common/index.esm.js"; import "../property-panel/index.esm.js"; import at from "../tags/index.esm.js"; import { debounce as ot } from "lodash-es"; import ut from "../popover/index.esm.js"; const it = { /** * 组件标识 */ id: { type: String, default: "" }, /** * 扩展按钮显示内容,这是一段现在扩展按钮中的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: { type: 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" }, /** * 根据空间大小重新调整,原下拉面板内容指定的高度 */ limitContentBySpace: { type: Boolean, default: !1 }, beforeClosePopup: { type: Function, default: null } }, st = { popupContentPosition: { type: Object, default: { left: 0, top: 0 } }, host: { type: Object }, backgroundColor: { type: String, default: "" } }, rt = /* @__PURE__ */ se({ name: "FOverlay", props: st, emits: ["click"], setup(e, t) { const n = o(e.popupContentPosition), l = o(e.host), i = E(() => ({ backgroundColor: e.backgroundColor || "", pointerEvents: "auto" })); function s(u) { t.emit("click"), u.preventDefault(), u.stopPropagation(); } E(() => { const u = l.value; if (u) { const f = u.getBoundingClientRect(), { left: g, top: w, height: p } = f; return { left: g, top: w + p }; } return n.value; }); const c = E(() => ({ // position: 'relative', // left: `${position.value.left}px`, // top: `${position.value.top}px` })); return () => y(he, { to: "body" }, { default: () => { var u, f; return [y("div", { class: "overlay-container", onClick: (g) => s(g), style: i.value }, [y("div", { style: c.value }, [(f = (u = t.slots).default) == null ? void 0 : f.call(u)])])]; } }); } }); function ct(e) { if (e.content && e.content.render) return e.content.render; if (e.render && typeof e.render == "function") return e.render; } function dt(e) { const t = document.createElement("div"); t.style.display = "contents"; let n; const l = e.onClickCallback || (() => { }), i = () => { l(), n && n.unmount(); }; return n = me({ setup() { re(() => { document.body.removeChild(t); }); const s = ct(e); return () => y(rt, { "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 ft { static show(t) { return dt(t); } } const vt = { /** * 允许点击遮罩关闭对话框 */ 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 }, openedCallback: { 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 }, host: { type: Object, default: "body" }, isMessager: { type: Boolean, default: !1 }, maximized: { type: Boolean, default: !1 } }; 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 q { constructor(t, n) { this.width = t, this.height = n; } static getCurrent(t) { const n = new q(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 q(0, 0).set(t); } set(t) { return this.width = t.width, this.height = t.height, this; } } function ht(e, t) { const n = o(), l = o(), i = o(), s = o(), c = o(), u = o(), f = o(), g = o(), w = o(), p = o(), M = o(), x = o(e.resizeable), b = o(), k = o(e.draggable), z = o(!1); function R() { const r = l.value || document.body, h = window.getComputedStyle(r); if (!h || !n.value) return; const S = F.getTransformInfo(n.value), T = {}; f.value && (T.deltaL = n.value.offsetLeft - f.value.x, T.deltaT = n.value.offsetTop - f.value.y); const D = h.getPropertyValue("position"); T.width = r.clientWidth, T.height = r.clientHeight, T.pr = parseInt(h.getPropertyValue("padding-right"), 10), T.pb = parseInt(h.getPropertyValue("padding-bottom"), 10), T.position = h.getPropertyValue("position"), D === "static" && (r.style.position = "relative"), T.translateX = S.x, T.translateY = S.y, p.value = T; } function I(r) { if (n.value) { s.value = q.getCurrent(n.value), c.value = F.getCurrent(n.value), u.value = s.value ? q.copy(s.value) : null, f.value = c.value ? F.copy(c.value) : null, R(); const h = r.target.getAttribute("type") || ""; g.value = { n: !!h.match(/n/), s: !!h.match(/s/), w: !!h.match(/w/), e: !!h.match(/e/) }; } } function O() { var r, h, S, T; if (n.value) { const D = n.value; g.value && ((g.value.n || g.value.s) && ((r = u.value) != null && r.height) && (D.style.height = u.value.height + "px"), (g.value.w || g.value.e) && ((h = u.value) != null && h.width) && (D.style.width = u.value.width + "px"), f.value && ((S = f.value) != null && S.x && (D.style.left = f.value.x + "px"), (T = f.value) != null && T.y && (D.style.top = f.value.y + "px"))); } } function V() { const r = e.minHeight ? e.minHeight : 1, h = e.minWidth ? e.minWidth : 1; u.value && f.value && g.value && s.value && (u.value.height < r && (u.value.height = r, g.value.n && c.value && (f.value.y = c.value.y + (s.value.height - r))), u.value.width < h && (u.value.width = h, g.value.w && c.value && (f.value.x = c.value.x + (s.value.width - h))), e.maxHeight && u.value.height > e.maxHeight && (u.value.height = e.maxHeight, c.value && g.value.n && (f.value.y = c.value.y + (s.value.height - e.maxHeight))), e.maxWidth && u.value.width > e.maxWidth && (u.value.width = e.maxWidth, g.value.w && c.value && (f.value.x = c.value.x + (s.value.width - e.maxWidth)))); } function N() { if (l.value) { const r = p.value; if (f.value && u.value && g.value && s.value) { const h = r.width - r.pr - r.deltaL - r.translateX - f.value.x, S = r.height - r.pb - r.deltaT - r.translateY - f.value.y; g.value.n && f.value.y + r.translateY < 0 && c.value && (f.value.y = -r.translateY, u.value.height = s.value.height + c.value.y + r.translateY), g.value.w && f.value.x + r.translateX < 0 && c.value && (f.value.x = -r.translateX, u.value.width = s.value.width + c.value.x + r.translateX), u.value.width > h && (u.value.width = h), u.value.height > S && (u.value.height = S); } } } function W(r) { if (!i.value || !s.value || !c.value || !g.value) return; r.subtract(i.value); const h = r.x, S = r.y; g.value.n ? (f.value.y = c.value.y + S, u.value.height = s.value.height - S) : g.value.s && (u.value.height = s.value.height + S), g.value.e ? u.value.width = s.value.width + h : g.value.w && (u.value.width = s.value.width - h, f.value.x = c.value.x + h), N(), V(), O(); } function d(r) { if (!w.value) return; const h = F.fromEvent(r); h && W(h); } function v() { if (n.value) { const { width: r, height: h, x: S, y: T } = n.value.getBoundingClientRect(), D = F.getTransformInfo(n.value); return { size: { width: r, height: h }, position: { x: S - D.x, y: T - D.y } }; } return null; } function B(r) { if (n.value) { const h = v(); M.value = h; } i.value = void 0, s.value = null, c.value = null, u.value = null, f.value = null, g.value = null, w.value = null, document.removeEventListener("mousemove", d), document.removeEventListener("mouseup", B); } function L() { document.addEventListener("mousemove", d), document.addEventListener("mouseup", B); } function m(r) { r instanceof MouseEvent && r.button === 2 || k.value && (document.body.click(), r.stopPropagation(), r.preventDefault(), i.value = F.fromEvent(r), w.value = r.target, I(r), L()); } function H(r) { return n.value = r, x.value && y(ne, null, [y("div", { class: "fv-resizable-handle fv-resizable-n", type: "n", onMousedown: (h) => m(h) }, null), y("div", { class: "fv-resizable-handle fv-resizable-e", type: "e", onMousedown: (h) => m(h) }, null), y("div", { class: "fv-resizable-handle fv-resizable-s", type: "s", onMousedown: (h) => m(h) }, null), y("div", { class: "fv-resizable-handle fv-resizable-w", type: "w", onMousedown: (h) => m(h) }, null), y("div", { class: "fv-resizable-handle fv-resizable-ne", type: "ne", onMousedown: (h) => m(h) }, null), y("div", { class: "fv-resizable-handle fv-resizable-se fv-resizable-diagonal", type: "se", onMousedown: (h) => m(h) }, null), y("div", { class: "fv-resizable-handle fv-resizable-sw", type: "sw", onMousedown: (h) => m(h) }, null), y("div", { class: "fv-resizable-handle fv-resizable-nw", type: "nw", onMousedown: (h) => m(h) }, null)]); } function _(r = !0) { document.body.click(); const h = l.value || document.body, S = q.getCurrent(h), T = n.value; r && T && (b.value = v(), b.value.transform = T.style.transform), S && T && (u.value = S, u.value.height -= 14, u.value.width -= 14, T.style.height = u.value.height + "px", T.style.width = u.value.width + "px", T.style.left = "7px", T.style.top = "7px", T.style.transform = "", M.value = { size: u.value, position: { x: 0, y: 0 } }, k.value = !1, z.value = !0); } function K() { var r, h; if (document.body.click(), b.value) { const S = { width: b.value.size.width || 0, height: b.value.size.height || 0 }, T = { x: (window.innerWidth - S.width) / 2, y: (window.innerHeight - S.height) / 2 }; (r = u.value) == null || r.set(S), (h = f.value) == null || h.set(T); const D = n.value; D.style.height = S.height + "px", D.style.width = S.width + "px", D.style.left = `${T.x}px`, D.style.top = `${T.y}px`, D.style.transform = "", M.value = { size: S, position: T }, k.value = e.draggable, z.value = !1; } } function $() { if (n.value) { const r = q.getCurrent(n.value); if (r) { const { width: h, height: S } = r; n.value.style.left = `${(window.innerWidth - h) / 2}px`, n.value.style.top = `${(window.innerHeight - S) / 2}px`, n.value.style.transform = ""; } } } function P() { const r = () => { z.value ? _(!1) : $(), document.body.click(); }; return window.addEventListener("resize", r), () => { window.removeEventListener("resize", r); }; } const A = P(); return { renderResizeBar: H, boundingElement: l, resizedEventParam: M, maximize: _, restore: K, allowDrag: k, isMaximized: z, unWindowResizeHandle: A, moveToCenter: $ }; } function mt(e, t, n) { const l = o(), i = o(e.draggable), s = o(e.lockAxis), c = o(), u = o(), f = o(!1), g = o(new F(0, 0)), w = o(new F(0, 0)), p = o(new F(0, 0)), M = o(new F(0, 0)); U(() => n.value, (d) => { c.value.style.cursor = d ? "move" : "default"; }); function x(d, v) { if (v.tagName === "BUTTON") return !1; if (v === d) return !0; for (const B in v.children) if (Object.prototype.hasOwnProperty.call(v.children, B) && x(d, v.children[B])) return !0; return !1; } function b() { var L, m; let d = p.value.x + w.value.x, v = p.value.y + w.value.y; s.value === "x" ? (d = ((L = g.value) == null ? void 0 : L.x) || 0, p.value.x = 0) : s.value === "y" && (v = ((m = g.value) == null ? void 0 : m.y) || 0, p.value.y = 0); const B = `translate3d(${Math.round(d)}px, ${Math.round(v)}px, 0px)`; l.value && (l.value.style.transform = B), M.value.x = d, M.value.y = v; } function k() { if (!u.value || !l.value) return null; const d = u.value.getBoundingClientRect(), v = l.value.getBoundingClientRect(), B = { top: d.top < v.top, right: d.right > v.right, bottom: d.bottom > v.bottom, left: d.left < v.left }; return B.top || (p.value.y -= v.top - d.top), B.bottom || (p.value.y -= v.bottom - d.bottom), B.right || (p.value.x -= v.right - d.right), B.left || (p.value.x -= v.left - d.left), b(), B; } function z(d) { d && (g.value && d.subtract(g.value), p.value.set(d), b(), k()); } function R(d) { f.value && i.value && (d.stopPropagation(), d.preventDefault(), z(F.fromEvent(d, c.value))); } function I() { var d; f.value && (f.value = !1, w.value.add(p.value), p.value.reset(), (d = l.value) == null || d.classList.remove("ng-dragging"), t.emit("stopMove"), document.removeEventListener("mousemove", R), document.removeEventListener("mouseup", I)); } function O() { !f.value && c.value && (f.value = !0, c.value.classList.add("ng-dragging"), document.addEventListener("mousemove", R), document.addEventListener("mouseup", I)); } function V() { if (l.value) { const d = F.getTransformInfo(l.value); w.value.set(d); return; } w.value.reset(); } function N(d) { if (!n.value || d instanceof MouseEvent && d.button === 2) return; const v = d.target || d.srcElement; c.value !== void 0 && v && !x(v, c.value) || i.value !== !1 && (document.body.click(), d.stopPropagation(), d.preventDefault(), g.value = F.fromEvent(d, l.value), V(), O()); } function W(d, v, B) { if (i.value && v) { if (d) c.value = d; else if (e.dragHandle) { if (e.dragHandle instanceof HTMLElement) c.value = e.dragHandle; else if (typeof e.dragHandle == "string") { const L = v.querySelector(e.dragHandle); L && (c.value = L); } } l.value = v, u.value = B, c.value ? (c.value.classList.add("ng-draggable"), c.value.addEventListener("mousedown", N)) : i.value = !1; } } return { registerDraggle: W, resetTranslate: V }; } function ye(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 gt(e, t) { const n = o(e.enableEsc); let l = null; return n.value ? (l = ye("Escape", (i) => { t.emit("esc", { event: i.event, type: "esc" }); }), { remove: l }) : null; } function yt(e, t) { const n = o(e.enableEnter); let l = null; return n.value ? (l = ye("Enter", (i) => { t.emit("enter", { event: i.event, type: "enter" }); }), { remove: l }) : null; } const Q = /* @__PURE__ */ se({ name: "FModal", props: vt, 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(""), c = o(e.class), u = o(e.fitContent), f = o(e.showHeader), g = o(""), w = o(e.showCloseButton), p = o(e.showMaxButton), M = o(!1), x = o(e.dialogType), b = o(e.src), k = o(""), z = o(e.showButtons), R = o(e.title), I = o(e.containment || null), O = o(); R.value === "错误提示" && (R.value = te.getLocaleValue("messageBox.errorTitle")); const V = o(!1); function N(a, C) { const j = C ? "accept" : "cancel"; Promise.resolve().then(() => { var X; return (X = e.beforeClose) == null ? void 0 : X.call(e, { closeType: j }); }).then((X) => { X && (i.value = !1, t.emit("update:modelValue", !1), C != null && t.emit(C ? "accept" : "cancel"), t.emit("closed", a)); }); } const W = [{ name: "cancel", text: te.getLocaleValue("messageBox.cancel") || "取消", class: "btn btn-secondary", handle: (a) => { N(a, !1); } }, { name: "accept", text: te.getLocaleValue("messageBox.ok") || "确定", class: "btn btn-primary", handle: (a) => { N(a, !0); } }], d = o(e.buttons && e.buttons.length ? e.buttons : W), v = E(() => !!g.value), B = E(() => !!z.value && !!d.value), L = o(), m = o(), H = o(e.maximized || !1), { renderResizeBar: _, maximize: K, restore: $, boundingElement: P, resizedEventParam: A, allowDrag: r, unWindowResizeHandle: h, moveToCenter: S } = ht(e), { registerDraggle: T } = mt(e, t, r); function D() { return !!document.querySelectorAll(".farris-modal").length && document.body.classList.contains("modal-open"); } function Ce() { const a = document.querySelectorAll(".farris-modal").length; (!a || a - 1 <= 0) && document.body.classList.remove("modal-open"), O.value && O.value.classList.remove("show"); } U(() => e.title, (a, C) => { a !== C && (R.value = a); }), U(() => e.modelValue, (a, C) => { a !== C && (i.value = a, i.value && e.draggable && Z(() => { m.value && !I.value && (I.value = m.value.parentElement, P.value = I.value, T(L.value, m.value, P.value), S()); }), a || (I.value && (I.value = null), Ce())), i.value ? V.value = D() : (H.value = !1, r.value = e.draggable); }), U(() => e.showHeader, (a, C) => { a !== C && (f.value = a); }), U(() => e.showButtons, (a, C) => { a !== C && (z.value = a); }), U(() => A.value, (a, C) => { const j = a || {}, X = C || {}; JSON.stringify(j) !== JSON.stringify(X) && t.emit("resize", { newSize: a, oldSize: C, isMaximized: H.value }); }), U([() => e.width, () => e.height], (a, C) => { (a[0] !== C[0] || a[1] !== C[1]) && (n.value = a[0] || 500, l.value = a[1] || 600); }), U(() => e.class, (a, C) => { c.value = a; }); const ee = E(() => (i.value && document.body.classList.add("modal-open"), i.value)), xe = E(() => { var j; const a = { modal: !0, "farris-modal": !0, fade: !0 }; a["f-modal-fitContent"] = !!u.value, a.show = !!ee.value; const C = (j = e.maskClass) == null ? void 0 : j.split(" "); return C == null || C.reduce((X, Y) => (X[Y] = !0, X), a), a; }), Be = E(() => { var j; const a = { "modal-dialog": !0 }, C = (j = c.value) == null ? void 0 : j.split(" "); return C == null || C.reduce((X, Y) => (X[Y] = !0, X), a), a; }), ce = () => tt() && !e.isMessager, Me = E(() => { const a = document.documentElement.clientWidth, C = document.documentElement.clientHeight; if (H.value) return { position: "fixed", top: "0px", left: "0px", width: "100vw", height: "100vh", margin: "0" }; const j = Math.min(n.value, a), X = u.value ? "auto" : `${Math.min(l.value, C - 10)}px`, Y = { position: "absolute", top: `${(window.innerHeight - parseInt(X === "auto" ? "0" : X)) / 2}px`, left: `${(window.innerWidth - j) / 2}px`, width: `${j}px`, height: X }; return ce() && (Y.top = "0px", Y.left = "0px", Y.width = `${window.innerWidth}px`, Y.height = `${window.innerHeight}px`), e.mask || (Y.pointerEvents = "auto"), Y; }), de = o(ve() || 1050), ke = E(() => { const a = { display: "block", overflow: "hidden" }; return e.mask || (a.pointerEvents = "none", a.backgroundColor = "transparent"), V.value && (a.backgroundColor = "transparent"), a.zIndex = de.value, a; }), Te = E(() => ({ "modal-content": !0, "modal-content-has-header": f.value, "is-mobile": ce() })), Ee = E(() => { const a = { display: f.value ? "" : "none" }; return a["pointer-events"] = r.value ? "auto" : "none", a; }), Oe = E(() => ({ "f-icon": !0, modal_maximize: !0, modalrevert: H.value })), ze = E(() => ({ "modal-body": !0, "f-utils-flex-column": x.value === "iframe", "f-utils-fill": !0 })); function Pe() { return { height: `${e.footerHeight || 60}px` }; } const Se = E(() => { const a = { textAlgin: k.value }, C = Pe(); return Object.assign(a, C); }); function ae(a) { if (a == null || a.stopPropagation(), H.value) { H.value = !1, $(); return; } K(), H.value = !0; } async function Re(a, C) { a.handle && await a.handle(C, a) && t.emit("closed", C); } function Ie(a) { a.width && (n.value = a.width), a.height && (l.value = a.height), a.buttons && (d.value = a.buttons), a.title && (R.value = a.title); } let oe = null, ue = null; Xe(() => { V.value = D(); }), le(() => { m.value && !I.value && (I.value = m.value.parentElement, P.value = I.value, T(L.value, m.value, P.value)), ee.value && document.body.classList.add("modal-open"), oe = gt(e, t), ue = yt(e, t); }), re(() => { h && h(), oe && oe.remove(), ue && ue.remove(); }), t.expose({ modalElementRef: m, updateModalOptions: Ie, close: N, maxDialog: ae, isMaximized: H, disableButtons: (a, C = !0) => { d.value.forEach((j) => { j.name && a.includes(j.name) && (j.disabled = C); }); } }); function He() { return y("ul", null, [M.value && y("li", { class: "f-btn-icon f-bare" }, [y("span", { class: "f-icon modal_minimize" }, null)]), p.value && y("li", { onClick: ae, class: "f-btn-icon f-bare", style: "pointer-events: auto;" }, [y("span", { class: Oe.value }, null)]), w.value && y("li", { class: "f-btn-icon f-bare", onClick: (a) => N(a, !1), style: "pointer-events: auto;" }, [y("span", { class: "f-icon modal_close" }, null)])]); } function Le() { return y("div", { class: "modal-footer", style: Se.value }, [d.value && d.value.map((a) => { const C = o(a.disabled); return y("button", { name: a.name, style: a.styles, type: "button", disabled: C.value, class: a.class + (a.iconClass ? " btn-icontext" : ""), onClick: (j) => { Re(a, j); } }, [!!a.iconClass && y("i", { class: a.iconClass }, null), a.text]); })]); } function fe(a) { p.value && ae(); } function je() { return y(ne, null, [H.value && y("div", { class: "modal-header", style: "position: absolute;background: transparent;height: 45px;width: 100%;", onDblclick: (a) => fe() }, null), y("div", { ref: L, class: "modal-header", style: Ee.value, onDblclick: (a) => fe() }, [t.slots.headerTemplate ? t.slots.headerTemplate() : y("div", { class: "modal-title" }, [v.value && y("span", { class: g.value, style: "margin-right: 8px" }, null), y("span", { class: "modal-title-label" }, [R.value])]), y("div", { class: "actions" }, [He()])])]); } function Fe() { return t.slots.footerTemplate ? t.slots.footerTemplate() : B.value && Le(); } function We(a) { if (a.stopPropagation(), e.allowClickMaskToClose) { if (a.target !== O.value) return; N(a, !1); } } function De() { var a, C; return y("div", { id: s.value, class: Be.value, style: Me.value, ref: m }, [y("div", { class: Te.value }, [f.value && je(), y("div", { class: ze.value }, [(C = (a = t.slots).default) == null ? void 0 : C.call(a), x.value === "iframe" && y("iframe", { title: s.value, class: "f-utils-fill", width: "100%", frameborder: "0", src: b.value }, null)]), Fe()]), !u.value && m.value && !H.value && _(m.value)]); } function Ve(a) { return a || "body"; } return Ue(() => { ee.value && (de.value = ve() || 1050); }), () => y(he, { to: Ve(e.host) }, { default: () => [ee.value && y(Ke, { name: "fade", appear: !0 }, { default: () => [y("div", { ref: O, class: xe.value, style: ke.value, onClick: We }, [De()])] })] }); } }); function be(e) { if (e.content && e.content.render) return e.content.render; if (e.render && typeof e.render == "function") return e.render; } function bt(e) { const t = document.createElement("div"); t.style.display = "contents"; const n = me({ setup(l, i) { re(() => { document.body.removeChild(t); }); const s = o(), c = o(e.class || ""), u = o(!!e.showButtons), f = o(!!e.showHeader), g = o(e.showCloseButton == null ? !0 : e.showCloseButton), w = o(!0), p = o(e.title || ""), M = e.acceptCallback || (() => { }), x = e.rejectCallback || (() => { }), b = e.closedCallback || ((O) => { }), k = e.resizeHandle || ((O) => { }), z = e.stopMoveHandle || ((O) => { }), R = be(e), I = (O) => { w.value = !1, n.unmount(), b(O); }; return le(() => { }), i.expose({ modalRef: s }), () => y(Q, { ref: s, class: c.value, modelValue: w.value, "onUpdate:modelValue": (O) => w.value = O, title: p.value, width: e.width, height: e.height, buttons: e.buttons, "show-header": f.value, "show-buttons": u.value, "show-close-button": g.value, "show-max-button": !1, onAccept: M, onCancel: x, fitContent: e.fitContent == null ? !0 : e.fitContent, onClosed: I, onResize: k, onStopMove: z }, { default: () => [R && R(n)] }); } }); return document.body.appendChild(t), n.use(te.i18n), n.mount(t), n; } class pt { // private activeModalInstance = computed(() => { // return this.modalRefs[this.activeModalIndex.value]; // }); constructor(t) { J(this, "appContext", null); J(this, "modalRef", o()); J(this, "activeModalIndex", o(0)); J(this, "modalRefs", {}); J(this, "isUseEscCloseModal", o(!1)); this.app = t, this.appContext = t ? t._context : null; } getCurrentModal() { return this.modalRefs[this.activeModalIndex.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 bt(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 = Ye(Object.assign({ title: "", showButtons: !0, showHeader: !0, maximized: !1 }, t)), i = o(!0), s = l.value.acceptCallback || (() => { }), c = l.value.rejectCallback || (() => { }), u = l.value.closedCallback || ((v, B) => { }), f = l.value.openedCallback || ((v) => { }), g = l.value.resizeHandle || ((v) => { }), w = t.stopMoveHandle || ((v) => { }); let p; const M = be(l.value), x = (v) => { var L; i.value = !1; const B = (L = v == null ? void 0 : v.target) == null ? void 0 : L.classList.contains("modal_close"); u(v, this.isUseEscCloseModal.value ? "esc" : B ? "icon" : "button"); }, b = (v) => { x(v), p && Z(() => { if (this.modalRefs[this.activeModalIndex.value] && delete this.modalRefs[this.activeModalIndex.value], ie(null, n), p = null, this.modalRef.value = null, this.modalRefs) { const B = Object.keys(this.modalRefs).map((L) => Number(L)); B.length > 0 ? this.activeModalIndex.value = Math.max(...B) : this.activeModalIndex.value = 0; } this.isUseEscCloseModal.value = !1; }); }, k = (v) => { var B; this.isUseEscCloseModal.value = !0, (B = this.getCurrentModal()) == null || B.close(v == null ? void 0 : v.event); }, { width: z, height: R } = l.value, I = this.adaptToWindow(z || 500, R || 320); Object.assign(l.value, I); const O = o(), V = () => y(Q, ge({ ref: O, modelValue: i.value, "onUpdate:modelValue": (v) => i.value = v }, l.value, { isMessager: l.value.class && l.value.class.indexOf("modal-message") > -1, onAccept: s, onCancel: c, onClosed: b, onResize: g, onEsc: k, onStopMove: w, maximized: l.value.maximized }), { default: () => [M && M(this.app)] }); p = ((v) => { const B = $e(V, v); return B.appContext = this.appContext, ie(B, n), B; })({ ...l.value // 'onUpdate:modelValue': onUpdateModelValue, }), this.activeModalIndex.value++; const W = this.activeModalIndex.value; this.modalRefs[W] = O.value; const d = (v) => { l.value = { ...l.value, ...v }, p && ie(Ge(p, { ...l }), n); }; return Z(() => { this.modalRefs[W] = O.value, this.modalRef.value = O.value, f(new Event("opened")); }), { update: d, destroy: b, modalRef: this.modalRef, close: () => { this.modalRefs[W] && this.modalRefs[W].close(); }, disableButtons: (v, B = !0) => { this.modalRefs[W] && this.modalRefs[W].disableButtons(v, B); } }; } } const pe = Symbol("FModalService"); Q.install = (e) => { e.component(Q.name, Q); const t = new pt(e); e.provide(pe, t), e.provide("FModalService", t); }; function we(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 wt(e, t, n, l, i) { const s = o(e.buttonBehavior), c = o(e.popupOnInput), u = E(() => ({ "input-group-append": !0, "append-force-show": e.showButtonWhenDisabled && (e.readonly || e.disable) })), { judgeCanOpen: f } = we(e, i), g = E(() => e.showButtonWhenDisabled || (!e.editable || !e.readonly) && !e.disable), w = qe(pe, null), p = o(); async function M(k) { if (await f() && g.value) { const z = !!t.slots.default; if (s.value === "Modal") { const R = e.modalOptions, I = w == null ? void 0 : w.open({ ...R, render: () => t.slots.default && t.slots.default() }); p.value = I == null ? void 0 : I.modalRef; } s.value === "Overlay" && ft.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 && c.value && l.hidePopup(), t.emit("clickButton", { origin: k, value: e.modelValue }); } } function x(k) { t.emit("mouseEnterIcon", k); } function b(k) { t.emit("mouseLeaveIcon", k); } return { buttonGroupClass: u, onClickButton: M, onMouseEnterButton: x, onMouseLeaveButton: b, modalRef: p }; } function Ct(e, t, n, l, i, s) { const c = o(!1), u = E(() => e.enableClear && !e.readonly && !e.disable), { changeTextBoxValue: f, hasClearClass: g } = s; function w(b) { c.value = b, g.value = b; } U(i, () => { w(!!i.value); }); function p(b) { const k = !e.readonly && !e.disable && e.editable, z = !e.editable; b.stopPropagation(), (k || z) && (f(""), i.value = "", w(!c.value), t.emit("clear")); } function M(b) { if (u.value) { if (!n.value) { w(!1); return; } !e.disable && !e.readonly && w(!0); } } function x(b) { u.value && w(!1); } return { enableClearButton: u, showClearButton: c, onClearValue: p, onMouseEnterTextBox: M, onMouseLeaveTextBox: x }; } function xt(e, t, n, l, i) { const s = E(() => e.popupOnInput), c = E(() => e.popupOnFocus), { shouldPopupContent: u, closeAllPopover: f } = i, g = o(!1), w = E(() => e.enableTitle ? n.value : ""), p = E(() => (e.disable || e.readonly) && !e.forcePlaceholder ? "" : e.placeholder), M = E(() => e.readonly || !e.editable), x = o(!1), b = E(() => !e.disable && x.value), k = E(() => ({ "text-left": e.textAlign === "left", "text-center": e.textAlign === "center", "text-right": e.textAlign === "right", "form-control": !0, "f-utils-fill": !0 })), z = E(() => ({ "input-group": !0, "f-state-disabled": e.disable, "f-state-editable": e.editable && !e.disable && !e.readonly, "f-state-readonly": e.readonly, "f-state-focus": b.value, "input-group--has-clear": e.enableClear && g.value })); function R(m, H = !0) { n.value = m, H && (t.emit("change", m), t.emit("update:modelValue", m)); } function I(m) { u.value = !1, R(m, !0); } U( () => e.modelValue, (m) => { n.value = m; } ); function O(m) { x.value = !1, t.emit("blur", m), m.stopPropagation(); } function V(m) { t.emit("click", m), f(), t.slots.default && !e.disable && !e.readonly && e.popupOnClick && i.togglePopup(); } function N(m) { !e.disable && !e.readonly && (x.value = !0, M.value || (t.emit("focus", m), c.value && !u.value && i.popup())); } function W(m) { t.emit("input", m); const H = m.target.value; l.value = H, n.value !== H && R(H, e.updateOn === "change"), s.value && !u.value && i.popup(); } function d(m) { m.target.tagName !== "INPUT" && m.preventDefault(), m.stopPropagation(); } function v(m) { t.emit("keydown", m); } function B(m) { m.key === "Enter" && (s.value || c.value) && i.hidePopup(), t.emit("keyup", m); } function L(m) { const H = m.target.value; m.stopPropagation(), R(H); } return { hasFocusedTextBox: b, isTextBoxReadonly: M, textBoxClass: k, textBoxPlaceholder: p, textBoxTitle: w, inputGroupClass: z, hasClearClass: g, changeTextBoxValue: R, commitValue: I, onBlurTextBox: O, onClickTextBox: V, onFocusTextBox: N, onInput: W, onKeyDownTextBox: v, onKeyUpTextBox: B, onMouseDownTextBox: d, onTextBoxValueChange: L }; } const G = "FarrisVue_PopoverInstancesKey"; function Bt(e, t, n, l) { const i = o(), s = o(!1), { judgeCanOpen: c } = we(e, l); U(() => i.value, (x, b) => { window[G] = window[G] || /* @__PURE__ */ new WeakMap(), x ? window[G].set(n.value, x) : window[G].delete(n.value); }); function u() { if (window[G]) { const x = window[G]; document.querySelectorAll(".f-button-edit,.v-popover").forEach((b) => { const k = x.get(b); k && b !== n.value && !n.value.closest(".popover-fitcontent") && k.hide(); }); } } function f() { const x = i.value; x && x.show(n.value); } async function g(x = !1) { if (!!t.slots.default) { if (!x && !s.value && !await c()) return; s.value = !s.value, s.value && (await Z(), f()); } } async function w(x = !1) { if (!!t.slots.default) { if (!x && !await c()) return; s.value = !0, await Z(), f(); } } function p() { s.value = !1; } function M() { s.value = !0, Z(() => { f(); }); } return { hidePopup: p, showPopup: M, popup: w, shouldPopupContent: s, togglePopup: g, popoverRef: i, closeAllPopover: u }; } function Mt(e, t, n) { const l = o(), { isTextBoxReadonly: i, textBoxClass: s, textBoxPlaceholder: c, textBoxTitle: u, onBlurTextBox: f, onClickTextBox: g, onFocusTextBox: w, onInput: p, onKeyDownTextBox: M, onKeyUpTextBox: x, onMouseDownTextBox: b, onTextBoxValueChange: k } = n, z = o(e.id), { uuid: R } = nt(), I = E(() => ({ // 'border-top-right-radius': '6px', // 'border-bottom-right-radius': '6px' })); le(() => { var d, v; e.selectOnCreated && ((d = l.value) == null || d.select()), e.focusOnCreated && ((v = l.value) == null || v.focus({ preventScroll: !0 })), z.value || (z.value = "button-edit_" + R(8)), z.value = z.value + "-textbox"; }); const O = o(!1), V = (d) => { d.preventDefault(), O.value = !0; }, N = (d) => { d.preventDefault(), O.value = !1, p(d); }; function W(d) { O.value || p(d); } return () => y("input", { id: e.id ? e.id + "-textbox" : void 0, ref: l, name: "input-group-value", autocomplete: e.autoComplete ? "on" : "off", class: s.value, style: I.value, disabled: e.disable, maxlength: e.maxLength, minlength: e.minLength, placeholder: c.value, readonly: i.value, tabindex: e.tabIndex, title: u.value, type: e.inputType, value: t.value, onBlur: f, onChange: k, onClick: g, onFocus: w, onInput: W, onKeydown: M, onKeyup: x, onMousedown: b, onCompositionend: N, onCompositionstart: V }, null); } function kt(e, t, n) { const l = o(e.separator), i = E(() => e.readonly || e.disable), { changeTextBoxValue: s, onFocusTextBox: c, onBlurTextBox: u, onClickTextBox: f, textBoxPlaceholder: g } = n, w = E(() => t.value ? t.value.split(l.value).map((b) => ({ name: b, selectable: !0 })) : []); function p(b) { s(b.map((k) => k.name).join(l.value), !0); } U(() => e.separator, (b) => { l.value = b; }); const M = o(!e.disable && !e.readonly); U([() => e.disable, () => e.readonly], ([b, k], [z, R]) => { M.value = !b && !k; }); function x(b) { f(b); } return () => y(at, { tabindex: e.tabIndex, onFocus: c, onBlur: u, id: `${e.id}-tag-editor`, class: "form-control", placeholder: g.value, data: w.value, showClose: !i.value, showInput: !0, disable: i.value, onChange: p, onClick: x }, null); } function Tt(e, t, n, l) { const { buttonGroupClass: i, onClickButton: s, onMouseEnterButton: c, onMouseLeaveButton: u } = n, { enableClearButton: f, showClearButton: g, onClearValue: w } = l, p = o(), M = ot((b) => { s(b); }, e.buttonBehavior === "Modal" ? 0 : 200), x = () => { t.emit("beforeClearValue"); }; return { renderButtonGroup: () => y("div", { id: e.id ? `${e.id}-button-group` : void 0, class: i.value }, [f.value && _e(y("span", { class: "input-group-text input-group-clear", onClick: w, onMousedown: x }, [y("i", { class: "f-icon modal_close" }, null)]), [[Je, g.value]]), t.slots.buttonContent ? y("span", { class: "input-group-text input-group-append-button", onClick: M, onMouseenter: c, onMouseleave: u }, [t.slots.buttonContent()]) : e.buttonContent ? y("span", { class: "input-group-text input-group-append-button", innerHTML: e.buttonContent, ref: p, onClick: (b) => M(b), onMouseenter: c, onMouseleave: u }, null) : null]), buttonHandleElement: p }; } function Et(e, t, n) { const l = o(e.popupMinWidth), { hidePopup: i, popoverRef: s } = n, c = () => { t.emit("shown"); }; return () => y(ut, { 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, onShown: c, beforeClose: e.beforeClosePopup, limitContentBySpace: e.limitContentBySpace }, { default: () => { var u, f; return [(f = (u = t.slots).default) == null ? void 0 : f.call(u)]; } }); } const Ot = /* @__PURE__ */ se({ name: "FButtonEdit", props: it, emits: ["updateExtendInfo", "clear", "change", "click", "clickButton", "blur", "focus", "mouseEnterIcon", "mouseLeaveIcon", "keyup", "keydown", "inputClick", "input", "update:modelValue", "beforeClearValue", "shown"], setup(e, t) { const n = o(), l = o(e.customClass), i = o(e.modelValue), s = Bt(e, t, n, i), { shouldPopupContent: c, hidePopup: u, showPopup: f, togglePopup: g } = s, w = wt(e, t, n, s, i), p = o(""), M = xt(e, t, i, p, s), { hasFocusedTextBox: x, commitValue: b, inputGroupClass: k } = M, z = Ct(e, t, i, x, p, M), { onMouseEnterTextBox: R, onMouseLeaveTextBox: I } = z, O = o(!1), V = E(() => { const P = { "f-button-edit": !0, "f-cmp-inputgroup": !0, "f-button-edit-nowrap": !e.wrapText }; return l.value && l.value.split(" ").reduce((A, r) => (A[r] = !0, A), P), P; }), N = E(() => ({ overflow: e.wrapText ? "hidden" : "" })), W = E(() => ({ // paddingLeft: '3px', // backgroundColor: '#fff' })); function d() { if (!e.multiSelect || e.inputType !== "tag" || !n.value) return 0; let P = 0; const A = Array.from(n.value.querySelectorAll(".farris-tag-item")); return A && A.length && (P = A.map((r) => r.offsetTop).filter((r) => r > 20).length), P; } const v = o(d()); Ze(() => { v.value = d(); }); function B() { return e.multiSelect && e.inputType === "tag" ? () => y(ne, null, [kt(e, i, M)(), !!v.value && y("div", { class: "d-flex flex-row mr-2 more-tags", "more-tags": !0 }, [y("span", { class: "multi--more-text" }, [et("+"), v.value])])]) : Mt(e, i, M); } let L = B(); U([() => e.multiSelect, () => e.inputType], () => { L = B(); }); const { renderButtonGroup: m, buttonHandleElement: H } = Tt(e, t, w, z), _ = Et(e, t, s), K = o(c.value), $ = { displayText: p, commitValue: b, elementRef: n, hidePopup: u, showPopup: f, popoverRef: s.popoverRef, shouldPopupContent: c, togglePopup: g, openDialog: () => { H.value && e.buttonBehavior === "Modal" && H.value.click(); }, getModal: () => { var P; return e.buttonBehavior === "Modal" ? (P = w.modalRef.value) == null ? void 0 : P.value : null; }, getTextbox: () => { var P; return (P = n.value) == null ? void 0 : P.querySelector("input"); }, forceClosePopup: () => { K.value = !1, O.value = !0, c.value = !1; } }; return le(() => { n.value.componentInstance = $, window.onresize = () => { document.body.click(); }; }), Qe(() => { var P; window.onresize = null, (P = window[G]) == null || P.delet