UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

1,598 lines 57.2 kB
import { resolveAppearance as re, createPropsResolver as J } from "../../components/dynamic-resolver/index.esm.js"; import { getCustomStyle as Pe, getMaxZIndex as xe, EVENT_PROPERTY_TAB_IDS as Fe, withInstall as Re } from "../../components/common/index.esm.js"; import { ref as O, computed as D, defineComponent as oe, watch as V, onMounted as ne, watchEffect as $e, createVNode as m, Teleport as De, Transition as Y, withModifiers as G, Fragment as ie, nextTick as Oe, inject as Z } from "vue"; import Ee, { responseToolbarProps as Me } from "../../components/response-toolbar/index.esm.js"; import { isPlainObject as K, cloneDeep as ee } from "lodash-es"; import { LocaleService as te } from "../../components/locale/index.esm.js"; import { UseTemplateDragAndDropRules as je, DgControl as Ie, useDragulaCommonRule as Be, setPositionOfButtonGroup as Ne, useDesignerComponent as He, FDesignerInnerItem as Le, canvasChanged as ze } from "../../components/designer-canvas/index.esm.js"; import { commonToolbarItemDesignProps as Ae, FResponseToolbarDesign as ae, FResponseToolbarItemDesign as qe } from "../response-toolbar/index.esm.js"; import { BaseControlProperty as _e } from "../../components/property-panel/index.esm.js"; const se = /* @__PURE__ */ new Map([ ["appearance", re] ]), We = /* @__PURE__ */ new Map([ ["buttons", "items"], ["appearance", re] ]), Ve = "https://json-schema.org/draft/2020-12/schema", Ge = "https://farris-design.gitee.io/drawer.schema.json", Ue = "drawer", Ze = "A Farris Component", Ye = "object", Je = { id: { description: "The unique identifier for drawer", type: "string" }, type: { description: "The type string of drawer", type: "string", default: "drawer" }, appearance: { description: "", type: "object", properties: { class: { type: "string" }, style: { type: "string" } }, default: {} }, visible: { description: "", type: "boolean", default: !0 }, title: { description: "", type: "string", default: "详情" }, position: { description: "", type: "string", default: "right" }, width: { description: "", type: "number", default: 500 }, showMask: { description: "", type: "boolean", default: !0 }, showHeader: { description: "", type: "boolean", default: !0 }, showClose: { description: "", type: "boolean", default: !0 }, customHeader: { description: "", type: "boolean", default: !1 }, headerTemplate: { description: "", type: "object" }, headerToolbar: { description: "", type: "object", properties: { appearance: { description: "", type: "object", properties: { class: { type: "string", default: "" } } }, id: { description: "", type: "string" }, type: { description: "", type: "string", default: "drawer-toolbar" }, alignment: { description: "The alignment of Response Toolbar Button.", type: "string", default: "right" }, buttons: { description: "The items of Response Toolbar.", type: "array", default: [] } } }, showFooter: { description: "", type: "boolean", default: !0 }, showEntry: { description: "", type: "boolean", default: !1 }, footerToolbar: { description: "", type: "object", properties: { appearance: { description: "", type: "object", properties: { class: { type: "string", default: "" } } }, id: { description: "", type: "string" }, type: { description: "", type: "string", default: "drawer-toolbar" }, alignment: { description: "The alignment of Response Toolbar Button.", type: "string", default: "right" }, buttons: { description: "The items of Response Toolbar.", type: "array", default: [] } } }, contents: { description: "", type: "array", default: [] }, footerTemplate: { description: "", type: "object" }, footerContentType: { description: "", type: "string", default: "toolbar" }, footerHeight: { description: "", type: "number", default: 60 }, allowClickMaskToClose: { description: "", type: "boolean", default: !0 }, transparent: { description: "遮罩层是否透明", type: "boolean", default: !1 }, host: { description: "", type: "string" } }, Qe = [ "id", "type", "contents" ], Xe = { beforeClose: "关闭前事件" }, le = { $schema: Ve, $id: Ge, title: Ue, description: Ze, type: Ye, properties: Je, required: Qe, events: Xe }; function ce(e, t, r) { return Object.assign(t, { title: "标题", headerToolbar: { id: t.id + "_header_toolbar", type: "drawer-toolbar", buttons: [] }, footerToolbar: { id: t.id + "_footer_toolbar", type: "drawer-toolbar", buttons: [] } }), t; } function ue(e, t, r) { return t; } function de(e, t) { let r; function o(a) { const { properties: u, title: g, ignore: i } = a, n = i && Array.isArray(i), s = Object.keys(u).reduce((d, w) => ((!n || !i.find((P) => P === w)) && (d[w] = u[w].type === "object" && u[w].properties ? o(u[w]) : ee(u[w].default)), d), {}); if (g && (!n || !i.find((d) => d === "id"))) { const d = g.toLowerCase().replace(/-/g, "_"); s.id = `${d}_${Math.random().toString().slice(2, 6)}`; } return s; } function f(a) { const { properties: u, title: g, required: i } = a; if (i && Array.isArray(i)) { const n = i.reduce((s, d) => (s[d] = u[d].type === "object" && u[d].properties ? o(u[d]) : ee(u[d].default), s), {}); if (g && i.find((s) => s === "id")) { const s = g.toLowerCase().replace(/-/g, "_"); n.id = `${s}_${Math.random().toString().slice(2, 6)}`; } return n; } return { type: g }; } function h(a, u = {}, g) { const i = e[a]; if (i) { let n = f(i); const s = t[a]; return n = s ? s({ getSchemaByType: h }, n, u, g) : n, r != null && r.appendIdentifyForNewControl && r.appendIdentifyForNewControl(n), n; } return null; } function T(a, u) { const g = o(u); return Object.keys(g).reduce((i, n) => (Object.prototype.hasOwnProperty.call(a, n) && (i[n] && K(i[n]) && K(a[n] || !a[n]) ? Object.assign(i[n], a[n] || {}) : i[n] = a[n]), i), g), g; } function v(a, u) { return Object.keys(a).filter((i) => a[i] != null).reduce((i, n) => { if (u.has(n)) { const s = u.get(n); if (typeof s == "string") i[s] = a[n]; else { const d = s(n, a[n], a); Object.assign(i, d); } } else i[n] = a[n]; return i; }, {}); } function S(a, u, g = /* @__PURE__ */ new Map()) { const i = T(a, u); return v(i, g); } function p(a) { var g; const u = a.type; if (u) { const i = e[u]; if (!i) return a; const n = T(a, i), s = ((g = a.editor) == null ? void 0 : g.type) || ""; if (s) { const d = e[s], w = T(a.editor, d); n.editor = w; } return n; } return a; } function y(a) { r = a; } return { getSchemaByType: h, resolveSchemaWithDefaultValue: p, resolveSchemaToProps: S, mappingSchemaToProps: v, setDesignerContext: y }; } const fe = {}, me = {}, { resolveSchemaWithDefaultValue: Ke, resolveSchemaToProps: et, mappingSchemaToProps: tt } = de(fe, me); function rt(e = {}) { function t(p, y, a, u) { if (typeof a == "number") return u[p].length === a; if (typeof a == "object") { const g = Object.keys(a)[0], i = a[g]; if (g === "not") return Number(u[p].length) !== Number(i); if (g === "moreThan") return Number(u[p].length) >= Number(i); if (g === "lessThan") return Number(u[p].length) <= Number(i); } return !1; } function r(p, y, a, u) { return u[p] && u[p].propertyValue && String(u[p].propertyValue.value) === String(a); } const o = /* @__PURE__ */ new Map([ ["length", t], ["getProperty", r] ]); Object.keys(e).reduce((p, y) => (p.set(y, e[y]), p), o); function f(p, y) { const a = p; return typeof y == "number" ? [{ target: a, operator: "length", param: null, value: Number(y) }] : typeof y == "boolean" ? [{ target: a, operator: "getProperty", param: p, value: !!y }] : typeof y == "object" ? Object.keys(y).map((u) => { if (u === "length") return { target: a, operator: "length", param: null, value: y[u] }; const g = u, i = y[u]; return { target: a, operator: "getProperty", param: g, value: i }; }) : []; } function h(p) { return Object.keys(p).reduce((a, u) => { const g = f(u, p[u]); return a.push(...g), a; }, []); } function T(p, y) { if (o.has(p.operator)) { const a = o.get(p.operator); return a && a(p.target, p.param, p.value, y) || !1; } return !1; } function v(p, y) { return h(p).reduce((g, i) => g && T(i, y), !0); } function S(p, y) { const a = Object.keys(p), u = a.includes("allOf"), g = a.includes("anyOf"), i = u || g, d = (i ? p[i ? u ? "allOf" : "anyOf" : "allOf"] : [p]).map((P) => v(P, y)); return u ? !d.includes(!1) : d.includes(!0); } return { parseValueSchema: S }; } const ot = { convertTo: (e, t, r, o) => { e.appearance || (e.appearance = {}), e.appearance[t] = r; }, convertFrom: (e, t, r) => e.appearance ? e.appearance[t] : e[t] }, nt = { convertFrom: (e, t, r) => e.buttons && e.buttons.length ? `共 ${e.buttons.length} 项` : "无" }, it = { convertTo: (e, t, r, o) => { e.editor && (e.editor[t] = r); }, convertFrom: (e, t, r) => e.editor && Object.prototype.hasOwnProperty.call(e.editor, t) ? e.editor[t] : e[t] }, at = { button: { type: "button", name: "按钮" }, "response-toolbar": { type: "response-toolbar", name: "工具栏" }, "response-toolbar-item": { type: "response-toolbar-item", name: "按钮" }, "content-container": { type: "content-container", name: "容器" }, table: { type: "table", name: "表格布局" }, "table-td": { type: "table-td", name: "单元格" }, "input-group": { type: "input-group", name: "文本" }, textarea: { type: "textarea", name: "多行文本" }, lookup: { type: "lookup", name: "帮助" }, "number-spinner": { type: "number-spinner", name: "数值" }, "date-picker": { type: "date-picker", name: "日期" }, switch: { type: "switch", name: "开关" }, "radio-group": { type: "radio-group", name: "单选组" }, "check-box": { type: "check-box", name: "复选框" }, "check-group": { type: "check-group", name: "复选框组" }, "combo-list": { type: "combo-list", name: "下拉列表" }, "response-form": { type: "response-form", name: "卡片面板" }, "response-layout": { type: "response-layout", name: "布局容器", icon: "response-layout-3" }, "response-layout-item": { type: "response-layout-item", name: "布局", icon: "response-layout-1" }, "tree-grid": { type: "tree-grid", name: "树表格" }, "tree-grid-column": { type: "tree-grid-column", name: "树表格列" }, "data-grid": { type: "data-grid", name: "表格" }, "data-grid-column": { type: "data-grid-column", name: "表格列" }, module: { type: "Module", name: "模块" }, component: { type: "component", name: "组件" }, tabs: { type: "tabs", name: "标签页" }, "tab-page": { type: "tab-page", name: "标签页项", dependentParentControl: "Tab" }, "tab-toolbar-item": { type: "tab-toolbar-item", name: "标签页工具栏按钮" }, "drawer-toolbar-item": { type: "drawer-toolbar-item", name: "抽屉工具栏按钮" }, "html-template": { type: "html-template", name: "模板容器" }, "time-picker": { type: "time-picker", name: "时间选择" }, section: { type: "section", name: "分组面板" }, "section-toolbar": { type: "section-toolbar", name: "分组面板工具栏" }, "section-toolbar-item": { type: "section-toolbar-item", name: "分组面板按钮" }, splitter: { type: "splitter", name: "分栏面板" }, "splitter-pane": { type: "splitter-pane", name: "分栏面板项", dependentParentControl: "Splitter" }, "component-ref": { type: "component-ref", name: "组件引用节点" }, uploader: { type: "uploader", name: "附件上传" }, "page-header": { type: "page-header", name: "页头" }, "page-footer": { type: "page-footer", name: "页脚" }, "tab-toolbar": { type: "tab-toolbar", name: "标签页工具栏" }, "drawer-toolbar": { type: "drawer-toolbar", name: "抽屉工具栏" }, fieldset: { type: "fieldset", name: "分组" }, "query-solution": { type: "query-solution", name: "筛选方案" }, drawer: { type: "drawer", name: "抽屉" }, "external-container": { type: "external-container", name: "外部容器", icon: "content-container" }, "list-nav": { type: "list-nav", name: "列表导航" }, nav: { type: "nav", name: "标签类导航" }, "list-view": { type: "list-view", name: "列表" }, "filter-bar": { type: "filter-bar", name: "筛选条" }, "language-textbox": { type: "language-textbox", name: "多语输入框" }, image: { type: "image", name: "图像" }, avatar: { type: "avatar", name: "头像" }, "discussion-editor": { type: "discussion-editor", name: "评论编辑区" }, "discussion-list": { type: "discussion-list", name: "评论列表" }, comment: { type: "comment", name: "评论区" }, "approval-logs": { type: "approval-logs", name: "审批记录" }, "rich-text-editor": { type: "rich-text-editor", name: "富文本", icon: "rich-text-box" }, calendar: { type: "calendar", name: "日历", icon: "date-picker" }, wizard: { type: "wizard", name: "向导", icon: "wizard" }, "wizard-page": { type: "wizard-page", name: "向导页", icon: "wizard" }, "wizard-page-detail": { type: "wizard-page-detail", name: "向导详情", icon: "wizard" }, step: { type: "step", name: "步骤条", icon: "step" }, "dynamic-form": { type: "dynamic-form", name: "动态表单" } }, st = { convertFrom: (e, t, r) => { var f; const o = e.editor && e.editor[t] ? e.editor[t] : e[t]; return ((f = at[o]) == null ? void 0 : f.name) || o; } }, lt = { convertTo: (e, t, r, o) => { e[t] = e[t]; }, convertFrom: (e, t, r) => e.editor ? r.getRealEditorType(e.editor.type) : "" }, ct = { convertTo: (e, t, r, o) => { (e.type === "data-grid-column" || e.type === "tree-grid-column") && (e.formatter ? e.formatter[t] = r : e.formatter = { [t]: r }); }, convertFrom: (e, t, r) => { if (e.formatter) { if (t === "trueText") return e.formatter.trueText; if (t === "falseText") return e.formatter.falseText; if (t === "prefix") return e.formatter.prefix; if (t === "suffix") return e.formatter.suffix; if (t === "precision") return e.formatter.precision; if (t === "decimal") return e.formatter.decimal; if (t === "thousand") return e.formatter.thousand; if (t === "dateFormat") return e.formatter.dateFormat || "yyyy-MM-dd"; if (t === "customFormat") return e.formatter.customFormat; if (t === "type") return e.formatter.type || "none"; } return "none"; } }, ut = { convertTo: (e, t, r, o) => { e.command ? e.command[t] = r : e.command = { [t]: r }, t === "enableType" && r === "default" && (e.command.enable = !0, e.command.formatter = "", e.command.commands = [ { text: "编辑", type: "primary", command: "edit" }, { text: "删除", type: "danger", command: "remove" } ]), t === "enableType" && r === "custom" && (e.command.enable = !0, e.command.commands = [ { value: "add", text: "增加", type: "link" }, { value: "edit", text: "编辑", type: "link" }, { value: "remove", text: "删除", type: "link" } ]), t === "enableType" && r === "unable" && (e.command.enable = !1, e.command.formatter = ""); }, convertFrom: (e, t, r) => { var o, f; if (e.command) { if (t === "enableType") { if (e.command.enableType) return e.command.enableType; const h = (f = (o = e.command) == null ? void 0 : o.commands) == null ? void 0 : f.find((T) => T.command === "edit" && T.type === "primary"); return e.command.enable ? h ? "default" : "custom" : "unable"; } if (t === "commands") return e.command.enableType === "custom" ? e.command.commands : []; if (t === "formatter") return e.command.formatter; if (t === "count") return e.command.count; if (t === "columnWidth") return e.command.columnWidth || 200; } return ""; } }, dt = { convertTo: (e, t, r, o) => { if (e.column || (e.column = {}), t === "fitMode") { r && r !== "none" ? (e.column.fitColumns = !0, e.column.fitMode = r) : (e.column.fitColumns = !1, e.column.fitMode = "average"); return; } if (t === "fitColumns") { e.column.fitColumns = r, r && !e.column.fitMode && (e.column.fitMode = "average"); return; } e.column[t] = r; }, convertFrom: (e, t, r) => { if (e.column) { if (t === "fitMode") return e.column.fitColumns ? e.column.fitMode || "average" : "none"; if (t === "fitColumns") return e.column.fitColumns; } return t === "fitMode" ? "none" : ""; } }, ft = { convertTo: (e, t, r, o) => { e.summary ? e.summary[t] = r : e.summary = { [t]: r }, t === "enable" && r && (e.summary ? e.summary.groupFields || (e.summary.groupFields = []) : e.summary = { enable: r, groupFields: [] }); }, convertFrom: (e, t, r) => { var o, f; return t === "customSummaryStyle" ? e.summary.customSummaryStyle : t === "position" ? ((o = e.summary) == null ? void 0 : o[t]) || "bottom" : t === "customRender" ? ((f = e.summary) == null ? void 0 : f[t]) || "" : e.summary && t === "enable" ? e.summary.enable : e.type === "data-grid-column" ? e.enableSummary === void 0 ? !1 : e.enableSummary : ""; } }, mt = { convertTo: (e, t, r, o) => { e.group ? e.group[t] = r : e.group = { [t]: r }, t === "enable" && r && (e.group ? e.group.groupFields || (e.group.groupFields = []) : e.group = { enable: r, groupFields: [], showSummary: !1, customRender: "" }); }, convertFrom: (e, t, r) => { if (e.group) { if (t === "enable") return e.group.enable; if (t === "showSummary") return e.group.showSummary; if (t === "customRender") return e.group.customRender; if (t === "groupFields") return e.group.groupFields; } } }, pt = { convertFrom: (e, t) => e.binding ? e.binding.path : "", convertTo: (e, t, r) => { if (r && r.length > 0) { const o = r[0]; e.binding || (e.binding = {}), e.binding.type = "Form", e.binding.path = o.bindingField, e.binding.field = o.id, e.binding.fullPath = o.path, e.path = o.bindingPath; } } }, bt = { convertTo: (e, t, r, o) => { if (e.pagination || (e.pagination = {}), t === "sizeLimits") if (r == null) delete e.pagination.sizeLimits; else { const f = [...new Set( String(r).split(",").map((h) => h.trim()).filter((h) => h !== "").map((h) => parseInt(h, 10)).filter((h) => !Number.isNaN(h) && h > 0) )]; f.length > 0 ? e.pagination.sizeLimits = f : delete e.pagination.sizeLimits; } else e.pagination[t] = r; }, convertFrom: (e, t, r) => { var o; return e.pagination ? t === "sizeLimits" ? ((o = e.pagination.sizeLimits) == null ? void 0 : o.join(",")) ?? "" : e.pagination[t] : e[t]; } }, gt = { convertTo: (e, t, r, o) => { e.rowNumber || (e.rowNumber = {}), e.rowNumber[t] = r; }, convertFrom: (e, t, r) => e.rowNumber ? e.rowNumber[t] : e[t] }, vt = { convertTo: (e, t, r, o) => { e.selection || (e.selection = {}), e.selection[t] = r; }, convertFrom: (e, t, r) => { if (!e.selection) return !!e[t]; const o = !!e.selection[t]; return t === "showCheckbox" && o == null && e.selection.multiSelect === !0 ? !0 : o; } }, yt = { convertFrom: (e, t, r) => e[t] && e[t].length ? `共 ${e[t].length} 项` : "" }, ht = { convertFrom: (e, t) => e[t] || "", convertTo: (e, t, r) => { e[t] = r; } }, wt = { convertTo: (e, t, r, o) => { e.size || (e.size = {}), e.size[t] = r; }, convertFrom: (e, t, r) => e.size ? e.size[t] : e[t] }, Tt = { convertFrom: (e, t, r) => { var o, f; return (o = e.formatter) != null && o.data && t === "formatterEnumData" && !e.formatterEnumData ? (f = e.formatter) == null ? void 0 : f.data : e.formatterEnumData; } }, Ct = { convertTo: (e, t, r, o) => { e.sort || (e.sort = {}), e.sort[t] = r; }, convertFrom: (e, t, r) => { var o, f; if (t === "mode") return ((o = e.sort) == null ? void 0 : o.mode) || "client"; if (t === "multiSort") return !!((f = e.sort) != null && f.multiSort); } }, kt = { convertTo: (e, t, r, o) => { e.filter || (e.filter = {}), e.filter[t] = r, t === "enable" && (e.enableFilter = !1); }, convertFrom: (e, t, r) => { var o, f, h, T; return t === "mode" ? ((o = e.filter) == null ? void 0 : o.mode) || "server" : t === "filterStyle" ? ((f = e.filter) == null ? void 0 : f.filterStyle) || "filter-column" : t === "enable" ? ((h = e.filter) == null ? void 0 : h.enable) !== void 0 ? !!e.filter.enable : !!e.enableFilter : ((T = e.filter) == null ? void 0 : T[t]) || void 0; } }, St = { convertTo: (e, t, r, o) => { e.rowOption ? e.rowOption[t] = r : e.rowOption = { [t]: r }; }, convertFrom: (e, t, r) => { if (e.rowOption) { if (t === "customRowStyle") return e.rowOption.customRowStyle; if (t === "customCellStyle") return e.rowOption.customCellStyle; if (t === "height") return e.rowOption.height; } return ""; } }, Pt = { convertTo: (e, t, r, o) => { (e.type === "data-grid-column" || e.type === "tree-grid-column") && (e[t] = r, t === "columnTemplateType" && r === "hyperlink" && (e.onClickLinkCommand ? e.columnTemplate = ` <span class="f-pretend-link f-cursor-pointer" @click="(ctx)=>viewModel.current.${e.onClickLinkCommand || ""}({id: rowData.id,context: ctx})"> {{rowData.${e.field}}} </span>` : e.columnTemplate = ` <span class="f-pretend-link f-cursor-pointer"> {{rowData.${e.field}}} </span>`), t === "columnTemplateType" && r === "default" && (e.columnTemplate = ""), t === "columnTemplateType" && r === "custom" && (e.columnTemplate = "")); }, convertFrom: (e, t, r) => t === "columnTemplate" ? e.columnTemplate : t === "columnTemplateType" ? e.columnTemplateType ? e.columnTemplateType || "default" : e.columnTemplate && !e.onClickLinkCommand ? "custom" : e.columnTemplate && e.onClickLinkCommand ? "hyperlink" : "default" : "" }, xt = { convertTo: (e, t, r, o) => { e.hierarchy || (e.hierarchy = { cascadeOption: {} }), e.hierarchy.cascadeOption || (e.hierarchy.cascadeOption = {}), e.hierarchy.cascadeOption[t] = r; }, convertFrom: (e, t, r) => { var o, f; return !!((f = (o = e.hierarchy) == null ? void 0 : o.cascadeOption) != null && f[t]); } }; function pe(e, t, r) { const o = /* @__PURE__ */ new Map([ ["/converter/appearance.converter", ot], ["/converter/buttons.converter", nt], ["/converter/property-editor.converter", it], ["/converter/items-count.converter", yt], ["/converter/type.converter", st], ["/converter/change-editor.converter", lt], ["/converter/change-formatter.converter", ct], ["/converter/column-command.converter", ut], ["/converter/column-option.converter", dt], ["/converter/summary.converter", ft], ["/converter/group.converter", mt], ["/converter/form-group-label.converter", ht], ["/converter/field-selector.converter", pt], ["/converter/pagination.converter", bt], ["/converter/row-number.converter", gt], ["/converter/grid-selection.converter", vt], ["/converter/size.converter", wt], ["/converter/change-formatter-enum.converter", Tt], ["/converter/grid-sort.converter", Ct], ["/converter/grid-filter.converter", kt], ["/converter/row-option.converter", St], ["/converter/change-formatter-type.converter", Pt], ["/converter/tree-auto-check.converter", xt] ]), f = /* @__PURE__ */ new Map([ ["string", { type: "input-group", enableClear: !1 }], ["boolean", { type: "combo-list", textField: "name", valueField: "value", idField: "value", enableClear: !1, editable: !1, data: [ { value: !0, name: "是" }, { value: !1, name: "否" } ] }], ["enum", { type: "combo-list", maxHeight: 128, enableClear: !1, editable: !1 }], ["array", { type: "button-edit" }], ["number", { type: "number-spinner", placeholder: "" }], ["events-editor", { type: "events-editor", hide: !0 }], ["multiLanguage", { type: "language-textbox" }] ]), h = rt(); function T(i, n) { return () => h.parseValueSchema(i, n); } function v(i, n, s) { return i.includes("visible") && n.visible !== void 0 ? typeof n.visible == "boolean" ? () => !!n.visible : n.visible === void 0 ? !0 : T(n.visible, s) : () => !0; } function S(i, n, s) { return i.includes("readonly") && n.readonly !== void 0 ? typeof n.readonly == "boolean" ? () => !!n.readonly : T(n.readonly, s) : () => !1; } function p(i, n) { const s = i.$converter || n; return typeof s == "string" && s && o.has(s) ? o.get(s) || null : s || null; } function y(i, n, s, d, w, P = "", $ = "") { return Object.keys(i).map((k) => { const E = O(1), c = k, l = i[k], b = Object.keys(l), j = l.title, x = l.type, B = f.get(x) || { type: "input-group", enableClear: !1 }, M = l.editor ? Object.assign({}, B, l.editor) : Object.assign({}, B), z = v(b, l, n), L = S(b, l, n); M.readonly = M.readonly === void 0 ? L() : M.readonly; const A = l.type === "cascade" ? y(l.properties, n, s, d, w, P, $) : [], q = !0; let C = p(l, $); const R = D({ get() { if (E.value) { if (["class", "style"].find((W) => W === c) && !C && (C = o.get("/converter/appearance.converter") || null), C && C.convertFrom) { const W = C.convertFrom(s, k, w, P); return W === void 0 && Object.prototype.hasOwnProperty.call(l, "defaultValue") ? l.type === "boolean" ? l.defaultValue : l.defaultValue || "" : W; } const H = s[k]; return Object.prototype.hasOwnProperty.call(l, "defaultValue") && (H === void 0 || typeof H == "string" && H === "") ? l.type === "boolean" ? l.defaultValue : l.defaultValue || "" : H; } return null; }, set(H) { E.value += 1, C && C.convertTo ? (C.convertTo(d, k, H, w, P), C.convertTo(s, k, H, w, P)) : (d[k] = H, s[k] = H); } }), { refreshPanelAfterChanged: N, description: I, isExpand: ke, parentPropertyID: Se } = l, X = { propertyID: c, propertyName: j, propertyType: x, propertyValue: R, editor: M, visible: z, readonly: L, cascadeConfig: A, hideCascadeTitle: q, refreshPanelAfterChanged: N, description: I, isExpand: ke, parentPropertyID: Se }; return n[c] = X, X; }); } function a(i, n, s = {}) { const d = {}, w = e[i]; return w && w.categories ? Object.keys(w.categories).map(($) => { const F = w.categories[$], k = F == null ? void 0 : F.title, E = y(F.properties || {}, d, {}, s, n); return { categoryId: $, categoryName: k, properties: E }; }) : []; } function u(i, n, s, d, w = "") { const P = n.$ref.schema, $ = n.$ref.converter, F = s[P], k = F.type, E = r(F), c = {}, l = e[k]; if (l && l.categories) { const b = l.categories[i], j = b == null ? void 0 : b.title; $ && Object.keys(b.properties).forEach((M) => { b.properties[M].$converter = $; }); const x = (b == null ? void 0 : b.properties) || {}, B = y(x, c, E, F, d, w); return { categoryId: i, categoryName: j, properties: B }; } return { categoryId: i, categoryName: "", properties: [] }; } function g(i, n, s, d, w) { const P = i.type, $ = r(i), F = {}; let k = w || e[P]; if (!(k && Object.keys(k).length > 0) && s && s.getPropConfig && (k = s.getPropConfig(d)), k && k.categories) { const c = []; return Object.keys(k.categories).map((l) => { const b = k.categories[l]; if (b.$ref) { c.push(u(l, b, i, n, d)); return; } const j = b == null ? void 0 : b.title, x = b == null ? void 0 : b.tabId, B = b == null ? void 0 : b.tabName, M = b == null ? void 0 : b.hide, z = b == null ? void 0 : b.hideTitle, L = y(b.properties || {}, F, $, i, n, d, b.$converter), { setPropertyRelates: A } = b, q = b == null ? void 0 : b.parentPropertyID; c.push({ categoryId: l, categoryName: j, tabId: x, tabName: B, hide: M, properties: L, hideTitle: z, setPropertyRelates: A, parentPropertyID: q }); }), c; } return []; } return { getPropertyConfigBySchema: g, getPropertyConfigByType: a, propertyConverterMap: o }; } const be = {}, ge = {}; pe(be, ge, Ke); const ve = {}, ye = {}, { resolveSchemaWithDefaultValue: Ft } = de(ve, ye), he = {}, we = {}; pe(he, we, Ft); function Rt(e, t, r = /* @__PURE__ */ new Map(), o = (T, v, S, p) => v, f = {}, h = (T) => T) { return fe[t.title] = t, me[t.title] = o, be[t.title] = f, ge[t.title] = h, ve[t.title] = t, ye[t.title] = o, he[t.title] = f, we[t.title] = h, (T = {}, v = !0) => { if (!v) return tt(T, r); const S = et(T, t, r), p = Object.keys(e).reduce((y, a) => (y[a] = e[a].default, y), {}); return Object.assign(p, S); }; } function $t(e, t) { if (!e || e.length < 1) return null; for (const r of e) { if (r.id === t) return r; if (r.children) { const o = r.children.find((f) => f.id === t); if (o) return o; } } return null; } function Dt() { function e(t, r) { const { footerToolbar: o, headerToolbar: f } = t, h = ((o == null ? void 0 : o.buttons) || []).concat((f == null ? void 0 : f.buttons) || []); if (!h || h.length < 1) return null; const [T, v] = r.payloads, S = $t(h, v); return S ? S.onClick || S.click : null; } return { resolve: e }; } const Q = { id: { type: String, required: !0 }, /** * 背景色 */ backgroundColor: { type: String, default: "#fff" }, /** * 关闭对话框前事件, 是个函数,返回true或者false */ beforeClose: { type: Function, default: () => !0 }, /** * 自定义抽屉样式 * @deprecated 请使用 customClass */ class: { type: String, default: "" }, /** * 自定义抽屉蒙层样式 */ modalClass: { type: String, default: "" }, /** * 高度 */ height: { type: String, default: 300 }, /** * 打开关闭抽屉 */ modelValue: { type: Boolean, default: !1 }, /** * 从哪个位置呼出 */ position: { type: String, default: "right" }, /** * 抽屉插入位置 */ appendTo: { type: String, default: "body" }, /** * 是否展示打开抽屉入口 */ showEntry: { type: Boolean, default: !1 }, /** * 是否展示关闭按钮 */ showClose: { type: Boolean, default: !0 }, /** * 是否展示遮罩层 */ showMask: { type: Boolean, default: !0 }, /** * 点击遮罩是否关闭抽屉 */ allowClickMaskToClose: { type: Boolean, default: !0 }, /** * 抽屉是否透明 */ transparent: { type: Boolean, default: !1 }, /** * 标题 */ title: { type: String, default: "" }, /** * 宽度 */ width: { type: String, default: 300 }, /** * 渲染的DOM容器 */ host: { type: [Object, String], default: "body" }, showHeader: { type: Boolean, default: !0 }, headerToolbar: { type: Object, default: {} }, headerTemplate: { type: Object, default: null }, showFooter: { type: Boolean, default: !0 }, footerTemplate: { type: Object, default: null }, footerToolbar: { type: Object, default: {} }, footerHeight: { type: Number, default: 60 }, buttons: { type: Array, default: [] }, customClass: { type: String, default: "" }, customStyle: { type: String, default: "" } }; Rt(Q, le, se, ce); const Ot = Dt(); function Et() { return { drawerLocale: { cancel: te.getLocaleValue("drawer.cancel") || "取消", confirm: te.getLocaleValue("drawer.confirm") || "确定" } }; } const Mt = /* @__PURE__ */ oe({ name: "FDrawer", props: Q, emits: ["afterClose", "update:modelValue", "click"], setup(e, t) { Et(); const r = O(e.modelValue), o = O(e.buttons), f = O(!1), h = D(() => ({ "f-utils-absolute-all f-drawer": !0, // 在某个DOM内部打开抽屉 "f-drawer-inline": typeof e.host == "string" ? e.host !== "body" : document.querySelector(e.host) !== document.body })), T = D(() => ({ opacity: e.transparent ? 0 : 1 })), v = D(() => { const c = {}; return e.maskClass && e.maskClass.split(" ").forEach((l) => { c[l] = !0; }), { "f-drawer-mask f-utils-absolute-all": !0, ...c }; }), S = D(() => { const c = {}; return e.customClass && e.customClass.split(" ").forEach((l) => { c[l] = !0; }), { "f-drawer-wrapper": !0, [`f-drawer-wrapper-${e.position}`]: !0, ...c }; }), p = D(() => { const c = e.width; return typeof c == "string" ? c : typeof c == "number" ? `${c}px` : "20%"; }), y = D(() => { const c = e.height; return typeof c == "string" ? c : typeof c == "number" ? `${c}px` : "20%"; }), a = D(() => { let c = "-6px 0"; switch (e.position) { case "left": c = "6px 0"; break; case "right": c = "-6px 0"; break; case "top": c = "0 6px"; break; case "bottom": c = "0 -6px"; break; } const l = { width: p.value, height: y.value, backgroundColor: e.backgroundColor, maxWidth: "100%" }; return e.transparent && (l.boxShadow = `${c} 8px 0 rgba(31, 35, 41, .1)`), Pe(l, e == null ? void 0 : e.customStyle); }), u = D(() => `f-drawer-${e.position}`), g = (c) => { Promise.resolve().then(() => { var l; return (l = e.beforeClose) == null ? void 0 : l.call(e); }).then((l) => { l && (r.value = !1, t.emit("update:modelValue", r.value), t.emit("afterClose")); }); }; V(() => e.modelValue, (c, l) => { c !== l && (r.value = c); }); const i = (c, l) => { t.emit("click", c, l); }, n = { close: () => { r.value = !1; } }; async function s(c, l) { c.handle && await c.handle(l, n) && t.emit("closed", l); } const d = (c, l) => m(Ee, { class: l, alignment: "right", items: c, onClick: i }, null); function w() { var c, l, b, j; if ((l = (c = e.footerToolbar) == null ? void 0 : c.buttons) != null && l.length && (e.footerToolbar.visible === void 0 || e.footerToolbar.visible)) { const x = { "f-utils-fill": !0 }; return (j = (b = e.footerToolbar) == null ? void 0 : b.appearance) != null && j.class && (x[e.footerToolbar.appearance.class] = !0), d(e.footerToolbar.buttons, x); } return o.value && !!o.value.length && o.value.map((x) => { const B = O(x.disabled); return m("button", { id: x.id, type: "button", disabled: B.value, class: x.class + (x.iconClass ? " btn-icontext" : ""), onClick: (M) => { s(x, M); } }, [!!x.iconClass && m("i", { class: x.iconClass }, null), x.text]); }); } function P() { return e.footerTemplate && typeof e.footerTemplate == "function" ? e.footerTemplate() : t.slots.footerTemplate ? t.slots.footerTemplate() : w(); } function $() { var l, b; const c = { "f-utils-fill": !0 }; return (b = (l = e.headerToolbar) == null ? void 0 : l.appearance) != null && b.class && (c[e.headerToolbar.appearance.class] = !0), e.headerTemplate && typeof e.headerTemplate == "function" ? e.headerTemplate() : t.slots.headerTemplate ? t.slots.headerTemplate() : m(ie, null, [m("div", { class: "f-drawer-title", title: e.title }, [e.title]), e.headerToolbar && (e.headerToolbar.visible === void 0 || e.headerToolbar.visible) && m("div", { class: "f-utils-fill-flex-row mx-2 col-7" }, [d(e.headerToolbar.buttons || [], c)]), e.showClose && m("div", { class: "f-drawer-close" }, [m("span", { class: "f-icon f-icon-close", onClick: G((j) => { g(); }, ["stop"]) }, null)])]); } const F = O({}); function k() { const c = xe(); F.value = { zIndex: c < 1e3 ? 1e3 : c }; } function E() { return f.value ? !0 : typeof e.host == "string" ? e.host === "body" ? !0 : !!document.querySelector(e.host) : !!e.host; } return f.value = E(), ne(() => { f.value = E(); }), $e(() => { r.value && k(); }), t.expose({ open: () => { r.value = !0; }, close: () => { g(); } }), () => f.value ? m(De, { to: e.host }, { default: () => [m("div", { class: h.value, id: e.id, style: F.value }, [m(Y, { name: "f-drawer-mask", appear: !0 }, { default: () => [r.value && e.showMask && m("div", { class: v.value, style: T.value, onClick: G((c) => { e.allowClickMaskToClose && g(); }, ["stop"]) }, null)] }), m(Y, { name: u.value }, { default: () => { var c, l; return [r.value && m("div", { class: S.value, style: a.value }, [m("div", { class: "f-drawer-container" }, [e.showHeader && m("div", { class: "f-drawer-header align-items-center" }, [$()]), m("div", { class: "f-drawer-body f-utils-fill", style: "overflow: auto;" }, [(l = (c = t.slots).default) == null ? void 0 : l.call(c)]), e.showFooter && m("div", { class: "f-drawer-footer px-2", style: { height: e.footerHeight + "px" } }, [P()])])])]; } })])] }) : null; } }); class jt extends _e { constructor(t, r) { super(t, r); } getPropertyConfig(t) { return this.propertyConfig.categories.basic = this.getBasicPropConfig(t), this.propertyConfig.categories.appearance = this.getAppearanceConfig(t), this.getBehaviorConfig(t), this.propertyConfig.categories.header = this.headerPropertyConfig(t), this.propertyConfig.categories.footer = this.footerPropertyConfig(t), this.propertyConfig.categories.eventsEditor = this.eventPropertyConfig(t), this.propertyConfig; } headerPropertyConfig(t) { return { title: "页头", description: "Behavior", properties: { showHeader: { title: "显示页头", description: "是否显示页头", type: "boolean", refreshPanelAfterChanged: !0 }, customHeader: { title: "自定义页头", description: "是否自定义页头", type: "boolean", refreshPanelAfterChanged: !0, visible: t.showHeader !== !1 }, showClose: { title: "显示关闭按钮", description: "是否显示关闭按钮", type: "boolean", visible: t.showHeader !== !1 && !t.customHeader }, title: { title: "标题", description: "标题", type: "string", visible: t.showHeader !== !1 && !t.customHeader }, headerTemplate: { title: "页头模板", type: "string", description: "设置标题HTML模板,替代整个页头区域", editor: { type: "code-editor", language: "html" }, visible: t.showHeader !== !1 && t.customHeader === !0 } }, setPropertyRelates: (r, o) => { if (r) switch (r && r.propertyID) { case "title": { r.needRefreshControlTree = !0; break; } } } }; } footerPropertyConfig(t) { return { title: "页脚", description: "Behavior", properties: { showFooter: { title: "显示页脚", description: "是否显示页脚", type: "boolean", default: !0, refreshPanelAfterChanged: !0 }, footerHeight: { title: "页脚高度(px)", description: "页脚高度, 单位px; 最小30px, 最大1999px", type: "number", editor: { type: "number-spinner", useThousands: !1, min: 30, max: 1999, needValid: !0 }, visible: t.showFooter !== !1 }, footerContentType: { title: "页脚内容类型", description: "页脚内容类型", type: "select", refreshPanelAfterChanged: !0, editor: { type: "combo-list", textField: "name", valueField: "value", idField: "value", editable: !1, data: [{ value: "toolbar", name: "工具栏" }, { value: "html", name: "自定义模板" }] }, visible: t.showFooter !== !1 }, footerTemplate: { title: "页脚模板", type: "string", description: "设置页脚HTML模板,替换页脚工具栏", editor: { type: "code-editor", language: "html" }, visible: t.footerContentType === "html" && t.showFooter !== !1 } }, setPropertyRelates: (r, o) => { if (r) switch (r && r.propertyID) { case "showFooter": { o.footerToolbar = { id: o.id + "_footer-toolbar", type: "drawer-toolbar", buttons: [] }, o.footerTemplate = "", o.footerContentType = "toolbar"; break; } case "footerContentType": { this.resetFooterContent(o, r.propertyValue); break; } } } }; } getBehaviorConfig(t) { this.propertyConfig.categories.behavior = { title: "行为", description: "Behavior", properties: { position: { title: "显示位置", description: "抽屉显示位置", type: "select", default: "right", editor: { type: "combo-list", textField: "name", valueField: "value", editable: !1, data: [ { value: "left", name: "左侧" }, { value: "right", name: "右侧" } ] } }, width: { title: "宽度(px)", description: "抽屉宽度, 单位px; 最小200px, 最大1999px", type: "number", editor: { type: "number-spinner", useThousands: !1, min: 200, max: 1999, needValid: !0 } }, showMask: { title: "显示遮罩层", description: "显示遮罩层", refreshPanelAfterChanged: !0, type: "boolean" }, transparent: { title: "透明遮罩层", description: "透明遮罩层", type: "boolean", visible: t.showMask !== !1 }, allowClickMaskToClose: { title: "点击遮罩是否关闭", description: "点击抽屉以外区域是否关闭抽屉", type: "boolean", visible: t.showMask !== !1 } } }; } resetFooterContent(t, r = "toolbar") { switch (r) { case "toolbar": { t.footerTemplate = ""; break; } case "html": { t.footerToolbar = { id: t.id + "_footer-toolbar", type: "drawer-toolbar", buttons: [] }; break; } } } eventPropertyConfig(t) { const r = this, o = [ { label: "beforeClose", name: "关闭前事件" } ], f = r.eventsEditorUtils.formProperties(t, r.viewModelId, o); return { title: "事件", hideTitle: !0, properties: r.createBaseEventProperty(f), // 这个属性,标记当属性变更得时候触发重新更新属性 refreshPanelAfterChanged: !0, tabId: Fe, tabName: "交互", setPropertyRelates(T, v) { const S = T.propertyValue; delete t[r.viewModelId], S && (S.setPropertyRelates = this.setPropertyRelates, r.eventsEditorUtils.saveRelatedParameters(t, r.viewModelId, S.events, S)); } }; } } function It(e, t, r) { const o = new je(); function f(n) { if (!Be().basalDragulaRuleForContainer(n, r)) return !1; const { canAccept: d } = o.getTemplateRule(e, r); return d; } function h() { return !1; } function T() { return !1; } function v() { return !0; } function S() { return "position: initial !important;border: none !important;left: 0;right: 0;padding: 0;"; } function p(n) { const s = new jt(n, r), { schema: d } = e; return s.getPropertyConfig(d); } function y(n) { return t; } function a() { e.designerItemElementRef.value && Oe(() => { Ne(t.value); }); } function u(n) { if (!n) return; const { changeObject: s } = n; s && ["width", "position"].includes(s.propertyID) && a(); } function g(n, s, d) { var w; (w = n == null ? void 0 : n.buttons) != null && w.length && n.buttons.map((P) => { var $; d.set(P.id, { componentTitle: P.text, parentPathName: `${s} > ${P.text}` }), ($ = P.children) != null && $.length && P.children.map((F) => { d.set(F.id, { componentTitle: F.text, parentPathName: `${s} > ${F.text}` }); }); }); } function i() { if (e && r) { const { formSchemaUtils: n } = r, s = n.getControlBasicInfoMap(), { schema: d } = e, w = d.title || Ie.drawer.name; s.set(d.id, { componentTitle: w, parentPathName: w }), g(d.headerToolbar, w, s), g(d.footerToolbar, w, s); } } return { canAccepts: f, checkCanDeleteComponent: h, checkCanMoveComponent: T, hideNestedPaddingInDesginerView: v, getStyles: S, getPropsConfig: p, getDraggableDesignItemElement: y, onPropertyChanged: u, setComponentBasicInfoMap: i }; } const Te = Object.assign({}, Q, { componentId: { type: String, default: "" }, footerContentType: { type: String, default: "toolbar" }, customHeader: { type: Boolean, default: !1 }, showWrapperInCanvas: { type: Boolean, default: !1 } }), Bt = "https://json-schema.org/draft/2020-12/schema", Nt = "https://farris-design.gitee.io/section-toolbar-item.schema.json", Ht = "drawer-toolbar-item", Lt = "A Farris Toolbar Item Component", zt = "object", At = { id: { description: "The unique identifier for a Response Toolbar", type: "string" }, type: { description: "The type string of Response Toolbar", type: "string", default: "drawer-toolbar-item" }, appearance: { description: "", type: "object", properties: { class: { type: "string" }, style: { type: "string" } }, default: {} }, text: { description: "按钮", type: "string", default: "按钮" }, icon: { description: "图标", type: "string", default: "" }, disabled: { description: "禁用", type: "boolean", default: !1 }, visible: { description: "是否可见", type: "boolean", default: !0 }, onClick: { description: "点击事件", type: "string", default: "" }, tipsEnable: { description: "", type: "boolean", default: !1 }, tipsText: { description: "", type: "string", default: "" }, dropdownClass: { description: "处于下拉菜单时的样式", type: "string", default: "" }, split: { description: "", type: "boolean", default: !1 } }, qt = [ "id", "type", "text" ], _t = { onClick: "点击事件" }, Wt = { $schema: Bt, $id: Nt, title: Ht, description: Lt, type: zt, properties: At, required: qt, events: _t }, Vt = "https://json-schema.org/draft/2020-12/schema", Gt = "https://farris-design.gitee.io/section-toolbar.schema.json", Ut = "drawer-toolbar", Zt = "A Farris Toolbar Component", Yt = "object", Jt = { id: { description: "The unique identifier for a Section Toolbar", type: "string" }, type: { description: "The type string of Section Toolbar", type: "string", default: "drawer-toolbar" }, appearance: { description: "", type: "object", properties: { class: { type: "string", default: "" } } }, alignment: { description: "The alignment of Section Toolbar Button.", type: "string", default: "right" }, buttons: { description: "The items of Section Toolbar.", type: "array", default: [] }, buttonSize: { type: "string", default: "" }, visible: { description: "", type: "boolean", default: !0 } }, Qt = [ "id", "type", "buttons" ], Xt = { onClick: "点击事件" }, Kt = { $schema: Vt, $id: Gt, title: Ut, description: Zt, type: Yt, properties: Jt, required: Qt, events: Xt }, er = Object.assign({}, Ae), tr = J(er, Wt, void 0, ue), rr = Object.assign({}, Me, { componentId: { type: String, default: "" } }), _ = J( rr, Kt, We, ue ), U = /* @__PURE__ */ oe({ name: "FDrawerDesign", props: Te, setup(e, t) { const r = O(), o = O(), f = e.id + "_footer-toolbar", h = e.id + "_header-toolbar", T = Z("designer-host-service"), v = Z("design-item-context"), S = It(v, o, T), p = He(r, v, S); v.schema