vlite3 0.8.11 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/components/AttachmentsList/AttachmentsList.vue.d.ts +6 -0
  2. package/components/AttachmentsList/AttachmentsList.vue.js +82 -0
  3. package/components/AttachmentsList/AttachmentsList.vue2.js +4 -0
  4. package/components/AttachmentsList/index.d.ts +2 -0
  5. package/components/AttachmentsList/types.d.ts +11 -0
  6. package/components/Button.vue.js +6 -6
  7. package/components/Chat/ChatBubble.vue.d.ts +18 -0
  8. package/components/Chat/ChatInterface.vue.d.ts +45 -0
  9. package/components/Chat/index.d.ts +2 -0
  10. package/components/DataList/DataList.vue.d.ts +1 -1
  11. package/components/DataTable/DataTable.vue.d.ts +3 -3
  12. package/components/DataTable/DataTable.vue.js +22 -22
  13. package/components/DataTable/types.d.ts +1 -1
  14. package/components/DatePicker.vue.d.ts +3 -2
  15. package/components/DatePicker.vue.js +1 -1
  16. package/components/Dropdown/Dropdown.vue.d.ts +2 -0
  17. package/components/Dropdown/Dropdown.vue.js +106 -90
  18. package/components/Dropdown/DropdownItem.vue.js +8 -8
  19. package/components/Dropdown/DropdownMenu.vue.js +2 -2
  20. package/components/Dropdown/DropdownMenu.vue2.js +1 -1
  21. package/components/ExportData/ExportData.vue.d.ts +1 -1
  22. package/components/FilePicker/FilePicker.vue.d.ts +4 -1
  23. package/components/FilePicker/FilePicker.vue.js +189 -139
  24. package/components/FilePreview/FilePreview.vue.d.ts +5 -0
  25. package/components/FilePreview/FilePreview.vue.js +27 -0
  26. package/components/FilePreview/FilePreview.vue2.js +4 -0
  27. package/components/FilePreview/index.d.ts +2 -0
  28. package/components/FilePreview/types.d.ts +5 -0
  29. package/components/Form/FormField.vue.js +3 -1
  30. package/components/Form/composables/useForm.js +50 -47
  31. package/components/Input.vue.d.ts +1 -0
  32. package/components/Input.vue.js +18 -15
  33. package/components/Modal.vue.js +2 -2
  34. package/components/Modal.vue2.js +31 -31
  35. package/components/MultiSelect/MultiSelect.vue.js +92 -84
  36. package/components/Navbar/Navbar.vue.js +61 -60
  37. package/components/Screen/Screen.vue.d.ts +200 -7
  38. package/components/Screen/Screen.vue.js +306 -502
  39. package/components/Screen/ScreenFilter.vue.js +45 -42
  40. package/components/Screen/components/ScreenAddAction.vue.d.ts +15 -0
  41. package/components/Screen/components/ScreenAddAction.vue.js +107 -0
  42. package/components/Screen/components/ScreenAddAction.vue2.js +4 -0
  43. package/components/Screen/components/ScreenEmptyState.vue.d.ts +14 -0
  44. package/components/Screen/components/ScreenEmptyState.vue.js +105 -0
  45. package/components/Screen/components/ScreenEmptyState.vue2.js +4 -0
  46. package/components/Screen/components/ScreenExportModal.vue.d.ts +49 -0
  47. package/components/Screen/components/ScreenExportModal.vue.js +83 -0
  48. package/components/Screen/components/ScreenExportModal.vue2.js +4 -0
  49. package/components/Screen/components/ScreenHeaderTitle.vue.d.ts +28 -0
  50. package/components/Screen/components/ScreenHeaderTitle.vue.js +57 -0
  51. package/components/Screen/components/ScreenHeaderTitle.vue2.js +4 -0
  52. package/components/Screen/components/ScreenOptionsDropdown.vue.d.ts +10 -0
  53. package/components/Screen/components/ScreenOptionsDropdown.vue.js +43 -0
  54. package/components/Screen/components/ScreenOptionsDropdown.vue2.js +4 -0
  55. package/components/Screen/components/ScreenQuickFilters.vue.d.ts +15 -0
  56. package/components/Screen/components/ScreenQuickFilters.vue.js +36 -0
  57. package/components/Screen/components/ScreenQuickFilters.vue2.js +4 -0
  58. package/components/Screen/components/ScreenViewToggle.vue.d.ts +9 -0
  59. package/components/Screen/components/ScreenViewToggle.vue.js +48 -0
  60. package/components/Screen/components/ScreenViewToggle.vue2.js +4 -0
  61. package/components/Screen/index.d.ts +1 -0
  62. package/components/Screen/types.d.ts +41 -2
  63. package/components/SidePanel.vue.js +1 -1
  64. package/components/SidePanel.vue2.js +7 -7
  65. package/components/SidebarMenu/SidebarMenu.vue.js +1 -1
  66. package/components/Stats/Stats.vue.js +50 -49
  67. package/components/StatusChip/StatusChip.vue.d.ts +2 -2
  68. package/components/StatusChip/StatusChip.vue.js +15 -14
  69. package/components/StatusChip/status-map.d.ts +2 -1
  70. package/components/StatusChip/status-map.js +16 -6
  71. package/components/Tabes/Tabes.vue.d.ts +1 -1
  72. package/components/Tabes/Tabes.vue.js +5 -143
  73. package/components/Tabes/Tabes.vue2.js +144 -2
  74. package/components/Timeline/TimelineIndicator.vue.js +6 -6
  75. package/components/Workbook/Sheet.vue.d.ts +1 -1
  76. package/core/config.d.ts +8 -0
  77. package/core/config.js +10 -6
  78. package/core/index.js +28 -20
  79. package/index.d.ts +2 -0
  80. package/index.js +209 -203
  81. package/package.json +3 -2
  82. package/style.css +80 -6
  83. package/types/config.type.d.ts +10 -0
  84. package/types/form.type.d.ts +1 -0
@@ -0,0 +1,57 @@
1
+ import { defineComponent as p, computed as c, openBlock as n, createElementBlock as o, renderSlot as a, createElementVNode as u, normalizeClass as d, toDisplayString as m, createBlock as x, withCtx as h, createVNode as I, createCommentVNode as i } from "vue";
2
+ import C from "../../Icon.vue.js";
3
+ import g from "../../Tooltip.vue.js";
4
+ import { $t as f } from "../../../utils/i18n.js";
5
+ const k = { class: "flex flex-col shrink-0" }, v = {
6
+ key: 0,
7
+ class: "flex items-center! gap-2"
8
+ }, S = /* @__PURE__ */ p({
9
+ __name: "ScreenHeaderTitle",
10
+ props: {
11
+ title: {},
12
+ titleI18n: {},
13
+ description: {},
14
+ descriptionI18n: {},
15
+ info: {},
16
+ infoI18n: {},
17
+ titleClass: {},
18
+ descriptionClass: {}
19
+ },
20
+ setup(t) {
21
+ const e = t, s = c(() => e.titleI18n ? f(e.titleI18n) : e.title), r = c(
22
+ () => e.descriptionI18n ? f(e.descriptionI18n) : e.description
23
+ );
24
+ return (l, y) => (n(), o("div", k, [
25
+ a(l.$slots, "title", {}, () => [
26
+ s.value ? (n(), o("div", v, [
27
+ u("h1", {
28
+ class: d(["text-fs-7.5 font-bold text-foreground", t.titleClass])
29
+ }, m(s.value), 3),
30
+ t.info || t.infoI18n ? (n(), x(g, {
31
+ key: 0,
32
+ content: t.info,
33
+ "content-i18n": t.infoI18n,
34
+ placement: "right"
35
+ }, {
36
+ default: h(() => [
37
+ I(C, {
38
+ icon: "lucide:info",
39
+ class: "w-[18px] h-[18px] mt-3! text-muted-foreground hover:text-foreground cursor-pointer transition-colors outline-none"
40
+ })
41
+ ]),
42
+ _: 1
43
+ }, 8, ["content", "content-i18n"])) : i("", !0)
44
+ ])) : i("", !0)
45
+ ]),
46
+ a(l.$slots, "description", {}, () => [
47
+ r.value ? (n(), o("p", {
48
+ key: 0,
49
+ class: d(["text-sm text-gray-700 mt-1 md:max-w-[450px]", t.descriptionClass])
50
+ }, m(r.value), 3)) : i("", !0)
51
+ ])
52
+ ]));
53
+ }
54
+ });
55
+ export {
56
+ S as default
57
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./ScreenHeaderTitle.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,10 @@
1
+ type __VLS_Props = {
2
+ exportProps?: Record<string, any> | boolean;
3
+ importProps?: Record<string, any> | boolean;
4
+ };
5
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
6
+ select: (payload: any) => any;
7
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
8
+ onSelect?: (payload: any) => any;
9
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
10
+ export default _default;
@@ -0,0 +1,43 @@
1
+ import { defineComponent as d, computed as o, openBlock as f, createBlock as v, withCtx as x, createVNode as O, unref as p } from "vue";
2
+ import D from "../../Button.vue.js";
3
+ import _ from "../../Dropdown/Dropdown.vue.js";
4
+ import { $t as e } from "../../../utils/i18n.js";
5
+ const S = /* @__PURE__ */ d({
6
+ __name: "ScreenOptionsDropdown",
7
+ props: {
8
+ exportProps: { type: [Object, Boolean] },
9
+ importProps: { type: [Object, Boolean] }
10
+ },
11
+ emits: ["select"],
12
+ setup(i, { emit: s }) {
13
+ const r = i, a = s, l = o(() => {
14
+ const t = e("vlite.screen.exportData");
15
+ return t !== "vlite.screen.exportData" ? t : "Export Data";
16
+ }), c = o(() => {
17
+ const t = e("vlite.screen.importData");
18
+ return t !== "vlite.screen.importData" ? t : "Import Data";
19
+ }), m = o(() => {
20
+ const t = [];
21
+ return r.exportProps !== !1 && t.push({ value: "export", label: l.value, icon: "lucide:download" }), r.importProps !== !1 && t.push({ value: "import", label: c.value, icon: "lucide:upload" }), t;
22
+ });
23
+ return (t, n) => (f(), v(_, {
24
+ closeOnSelect: "",
25
+ position: "bottom-end",
26
+ options: m.value,
27
+ onOnSelect: n[0] || (n[0] = (u) => a("select", u))
28
+ }, {
29
+ trigger: x(() => [
30
+ O(D, {
31
+ variant: "outline",
32
+ icon: "lucide:more-vertical",
33
+ class: "px-2!",
34
+ title: p(e)("vlite.screen.moreOptions") !== "vlite.screen.moreOptions" ? p(e)("vlite.screen.moreOptions") : "More Options"
35
+ }, null, 8, ["title"])
36
+ ]),
37
+ _: 1
38
+ }, 8, ["options"]));
39
+ }
40
+ });
41
+ export {
42
+ S as default
43
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./ScreenOptionsDropdown.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,15 @@
1
+ import { ScreenQuickFilter } from '../types';
2
+ import { TabesVariant } from '../../Tabes/types';
3
+ type __VLS_Props = {
4
+ modelValue: string | number;
5
+ options: ScreenQuickFilter[];
6
+ variant?: TabesVariant;
7
+ };
8
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
9
+ change: (val: string | number) => any;
10
+ "update:modelValue": (val: string | number) => any;
11
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
12
+ onChange?: (val: string | number) => any;
13
+ "onUpdate:modelValue"?: (val: string | number) => any;
14
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
15
+ export default _default;
@@ -0,0 +1,36 @@
1
+ import { defineComponent as i, computed as s, openBlock as r, createElementBlock as u, createVNode as m, unref as d } from "vue";
2
+ import b from "../../Tabes/Tabes.vue.js";
3
+ const p = { class: "w-max" }, V = /* @__PURE__ */ i({
4
+ __name: "ScreenQuickFilters",
5
+ props: {
6
+ modelValue: {},
7
+ options: {},
8
+ variant: {}
9
+ },
10
+ emits: ["update:modelValue", "change"],
11
+ setup(a, { emit: o }) {
12
+ const l = a, n = o, t = s(
13
+ () => l.options.map((e) => ({
14
+ value: e.value,
15
+ icon: e.icon,
16
+ labelI18n: e.labelI18n,
17
+ // Append count badge inline in the label string when provided
18
+ label: e.count !== void 0 ? `${e.label} (${e.count})` : e.label
19
+ }))
20
+ ), c = (e) => {
21
+ n("update:modelValue", e), n("change", e);
22
+ };
23
+ return (e, v) => (r(), u("div", p, [
24
+ m(d(b), {
25
+ class: "border-b-0! border-0! pb-0",
26
+ "model-value": a.modelValue,
27
+ options: t.value,
28
+ variant: a.variant || "line",
29
+ onChange: c
30
+ }, null, 8, ["model-value", "options", "variant"])
31
+ ]));
32
+ }
33
+ });
34
+ export {
35
+ V as default
36
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./ScreenQuickFilters.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,9 @@
1
+ type __VLS_Props = {
2
+ modelValue: 'table' | 'list';
3
+ };
4
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
5
+ "update:modelValue": (val: "table" | "list") => any;
6
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
7
+ "onUpdate:modelValue"?: (val: "table" | "list") => any;
8
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
9
+ export default _default;
@@ -0,0 +1,48 @@
1
+ import { defineComponent as b, computed as l, openBlock as f, createElementBlock as p, createElementVNode as n, normalizeClass as s, createVNode as d } from "vue";
2
+ import i from "../../Icon.vue.js";
3
+ import { $t as a } from "../../../utils/i18n.js";
4
+ const g = { class: "flex items-center p-1 rounded-md border border-border shrink-0" }, w = ["title"], v = ["title"], k = /* @__PURE__ */ b({
5
+ __name: "ScreenViewToggle",
6
+ props: {
7
+ modelValue: {}
8
+ },
9
+ emits: ["update:modelValue"],
10
+ setup(o, { emit: u }) {
11
+ const r = u, c = l(() => {
12
+ const e = a("vlite.screen.listView");
13
+ return e !== "vlite.screen.listView" ? e : "List View";
14
+ }), m = l(() => {
15
+ const e = a("vlite.screen.tableView");
16
+ return e !== "vlite.screen.tableView" ? e : "Table View";
17
+ });
18
+ return (e, t) => (f(), p("div", g, [
19
+ n("button", {
20
+ onClick: t[0] || (t[0] = (V) => r("update:modelValue", "table")),
21
+ class: s(["p-1.5 rounded", [
22
+ o.modelValue === "table" ? "bg-secondary/85 dark:bg-secondary shadow-sm text-foreground" : "text-muted-foreground hover:text-foreground"
23
+ ]]),
24
+ title: m.value
25
+ }, [
26
+ d(i, {
27
+ icon: "lucide:list",
28
+ class: "w-4 h-4"
29
+ })
30
+ ], 10, w),
31
+ n("button", {
32
+ onClick: t[1] || (t[1] = (V) => r("update:modelValue", "list")),
33
+ class: s(["p-1.5 rounded", [
34
+ o.modelValue === "list" ? "bg-secondary/85 dark:bg-secondary shadow-sm text-foreground" : "text-muted-foreground hover:text-foreground"
35
+ ]]),
36
+ title: c.value
37
+ }, [
38
+ d(i, {
39
+ icon: "lucide:layout-grid",
40
+ class: "w-4 h-4"
41
+ })
42
+ ], 10, v)
43
+ ]));
44
+ }
45
+ });
46
+ export {
47
+ k as default
48
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./ScreenViewToggle.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -1,3 +1,4 @@
1
1
  export { default as Screen } from './Screen.vue';
2
2
  export { default as ScreenFilter } from './ScreenFilter.vue';
3
+ export { default as ScreenQuickFilters } from './components/ScreenQuickFilters.vue';
3
4
  export * from './types';
@@ -4,6 +4,7 @@ import { ButtonVariant } from '../../types';
4
4
  import { IForm } from '../Form';
5
5
  import { ExportField } from '../ExportData/types';
6
6
  import { ImportField } from '../ImportData/types';
7
+ import { TabesVariant } from '../Tabes';
7
8
  export interface ScreenPaginationProps extends Omit<PaginationProps, 'currentPage' | 'totalPages'> {
8
9
  }
9
10
  export interface AddBtnConfig {
@@ -19,6 +20,19 @@ export interface AddBtnConfig {
19
20
  modalProps?: Record<string, any>;
20
21
  buttonProps?: Record<string, any>;
21
22
  }
23
+ /**
24
+ * A single quick-filter tab option.
25
+ * `value` is what gets emitted in the refetch payload.
26
+ * Use `value: ''` (or `value: 'all'`) for the "All" tab — it resets the quick filter.
27
+ */
28
+ export interface ScreenQuickFilter {
29
+ label: string;
30
+ labelI18n?: string;
31
+ value: string | number;
32
+ icon?: string;
33
+ /** Optional badge/count displayed next to the label */
34
+ count?: number;
35
+ }
22
36
  export interface ScreenProps {
23
37
  name?: string;
24
38
  title?: string;
@@ -31,7 +45,7 @@ export interface ScreenProps {
31
45
  data?: any[];
32
46
  loading?: boolean;
33
47
  /**
34
- * Called on every search, filter, pagination, or sort change.
48
+ * Called on every search, filter, pagination, sort, or quick-filter change.
35
49
  * Standard payload shape: { pagination, search, sort, filter }
36
50
  */
37
51
  refetch?: (payload: {
@@ -70,6 +84,31 @@ export interface ScreenProps {
70
84
  showRefresh?: boolean;
71
85
  containerClass?: string;
72
86
  headerClass?: string;
87
+ titleClass?: string;
88
+ descriptionClass?: string;
73
89
  viewProps?: Record<string, any>;
74
- canSelectRows?: boolean;
90
+ hideSelectable?: boolean;
91
+ hideDeleteBtn?: boolean;
92
+ /**
93
+ * Quick-filter tabs rendered below the header (above the content).
94
+ * Inspired by modern dashboards (Shopify, Linear, Vercel).
95
+ * Example:
96
+ * [
97
+ * { label: 'All', value: '' },
98
+ * { label: 'Active', value: 'active' },
99
+ * { label: 'Draft', value: 'draft' },
100
+ * { label: 'Archived', value: 'archived' },
101
+ * ]
102
+ */
103
+ quickFilters?: ScreenQuickFilter[];
104
+ /**
105
+ * The key used to inject the active quick filter into the refetch filter payload.
106
+ * Defaults to 'status'.
107
+ */
108
+ quickFilterKey?: string;
109
+ /**
110
+ * Default selected quick-filter value. Defaults to the first tab's value.
111
+ */
112
+ defaultQuickFilter?: string | number;
113
+ quickFilterVariant?: TabesVariant;
75
114
  }
@@ -1,7 +1,7 @@
1
1
  import o from "./SidePanel.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../_virtual/_plugin-vue_export-helper.js";
4
- const a = /* @__PURE__ */ t(o, [["__scopeId", "data-v-d572f4ef"]]);
4
+ const a = /* @__PURE__ */ t(o, [["__scopeId", "data-v-ff2923de"]]);
5
5
  export {
6
6
  a as default
7
7
  };
@@ -32,7 +32,7 @@ const J = { class: "text-lg font-bold text-foreground" }, Q = {
32
32
  setup(o, { emit: z }) {
33
33
  const t = o, p = z, s = V(t.show);
34
34
  let d = null;
35
- const n = j("dropdown-context", null), C = u(() => t.body ? K(t.body) : void 0);
35
+ const n = j("dropdown-context", null), b = u(() => t.body ? K(t.body) : void 0);
36
36
  h(
37
37
  () => t.show,
38
38
  (e) => {
@@ -61,7 +61,7 @@ const J = { class: "text-lg font-bold text-foreground" }, Q = {
61
61
  lg: "max-w-lg",
62
62
  xl: "max-w-xl",
63
63
  full: "max-w-full"
64
- }, E = u(() => t.position === "left" ? "left-0" : "right-0"), N = u(() => t.position === "left" ? "slide-left" : "slide-right"), g = u(() => t.titleI18n ? T(t.titleI18n) : t.title), b = u(
64
+ }, E = u(() => t.position === "left" ? "left-0" : "right-0"), N = u(() => t.position === "left" ? "slide-left" : "slide-right"), C = u(() => t.titleI18n ? T(t.titleI18n) : t.title), g = u(
65
65
  () => t.descriptionI18n ? T(t.descriptionI18n) : t.description
66
66
  );
67
67
  return (e, m) => (l(), r(L, null, [
@@ -101,14 +101,14 @@ const J = { class: "text-lg font-bold text-foreground" }, Q = {
101
101
  key: 0,
102
102
  class: c(["sidepanel-body fixed inset-y-0 z-50 flex flex-col bg-body shadow-sm border transition-transform duration-300 ease-in-out w-full", [S[o.size], E.value, t.class]])
103
103
  }, [
104
- g.value || e.$slots.header ? (l(), r("div", {
104
+ C.value || e.$slots.header ? (l(), r("div", {
105
105
  key: 0,
106
106
  class: c([o.headerClass, "flex-none flex items-center justify-between px-6 py-2 border-b border-border"])
107
107
  }, [
108
108
  f(e.$slots, "header", {}, () => [
109
109
  y("div", null, [
110
- y("h3", J, B(g.value), 1),
111
- b.value ? (l(), r("p", Q, B(b.value), 1)) : a("", !0)
110
+ y("h3", J, B(C.value), 1),
111
+ g.value ? (l(), r("p", Q, B(g.value), 1)) : a("", !0)
112
112
  ])
113
113
  ], !0),
114
114
  o.hideCloseButton ? a("", !0) : (l(), v(G, {
@@ -122,9 +122,9 @@ const J = { class: "text-lg font-bold text-foreground" }, Q = {
122
122
  }))
123
123
  ], 2)) : a("", !0),
124
124
  y("div", {
125
- class: c(["flex-1 overflow-y-auto px-6 py-4", o.bodyClass])
125
+ class: c(["flex-1 overflow-y-auto px-6 py-4 scrollbar-thin scrollbar-stable", o.bodyClass])
126
126
  }, [
127
- C.value ? (l(), v(q(C.value), w({ key: 0 }, { ...o.bodyProps, ...e.$attrs }, { close: i }), null, 16)) : f(e.$slots, "default", {
127
+ b.value ? (l(), v(q(b.value), w({ key: 0 }, { ...o.bodyProps, ...e.$attrs }, { close: i }), null, 16)) : f(e.$slots, "default", {
128
128
  key: 1,
129
129
  close: i
130
130
  }, void 0, !0)
@@ -26,7 +26,7 @@ const U = /* @__PURE__ */ P({
26
26
  menuOffset: { default: () => [0, 10] },
27
27
  orientation: { default: "vertical" },
28
28
  mobileBreakpoint: { default: "none" },
29
- showTooltip: { type: Boolean, default: !0 },
29
+ showTooltip: { type: Boolean, default: !1 },
30
30
  forceTreeView: { type: Boolean, default: !1 }
31
31
  },
32
32
  setup(m) {