vlite3 1.3.11 → 1.4.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 (75) hide show
  1. package/components/Accordion/Accordion.vue.d.ts +2 -2
  2. package/components/Accordion/AccordionItem.vue.d.ts +1 -1
  3. package/components/Accordion/AccordionItem.vue.js +11 -7
  4. package/components/Accordion/AccordionTrigger.vue.d.ts +1 -1
  5. package/components/AppShell/AppShell.vue.d.ts +1 -0
  6. package/components/AppShell/AppShell.vue.js +33 -26
  7. package/components/AppShell/AppShellLayoutStorefront.vue.d.ts +54 -0
  8. package/components/AppShell/AppShellLayoutStorefront.vue.js +222 -0
  9. package/components/AppShell/AppShellLayoutStorefront.vue2.js +4 -0
  10. package/components/AsyncSelect/createAsyncSelect.js +3 -2
  11. package/components/CategoryManager/CategoryManager.vue2.js +36 -31
  12. package/components/CategoryMenu/CategoryMenu.vue.d.ts +22 -0
  13. package/components/CategoryMenu/CategoryMenu.vue.js +106 -0
  14. package/components/CategoryMenu/CategoryMenu.vue2.js +4 -0
  15. package/components/CategoryMenu/CategoryMenuVariant1.vue.d.ts +17 -0
  16. package/components/CategoryMenu/CategoryMenuVariant1.vue.js +146 -0
  17. package/components/CategoryMenu/CategoryMenuVariant1.vue2.js +4 -0
  18. package/components/CategoryMenu/CategoryMenuVariant2.vue.d.ts +18 -0
  19. package/components/CategoryMenu/CategoryMenuVariant2.vue.js +162 -0
  20. package/components/CategoryMenu/CategoryMenuVariant2.vue2.js +4 -0
  21. package/components/CategoryMenu/index.d.ts +2 -0
  22. package/components/CategoryMenu/types.d.ts +32 -0
  23. package/components/CategoryMenu/utils.d.ts +16 -0
  24. package/components/CategoryMenu/utils.js +45 -0
  25. package/components/ColorPicker/ColorPicker.vue.d.ts +7 -3
  26. package/components/ColorPicker/ColorPicker.vue.js +59 -45
  27. package/components/DatePicker.vue.js +5 -4
  28. package/components/DateRangePicker.vue.js +3 -2
  29. package/components/Dropdown/Dropdown.vue.d.ts +4 -1
  30. package/components/Dropdown/Dropdown.vue.js +8 -7
  31. package/components/Dropdown/DropdownGroupedLayout.vue2.js +5 -2
  32. package/components/Dropdown/DropdownGroupedLayout.vue3.js +111 -0
  33. package/components/Dropdown/DropdownItem.vue.d.ts +2 -2
  34. package/components/Dropdown/DropdownItem.vue.js +66 -49
  35. package/components/Dropdown/DropdownMenu.vue.js +1 -1
  36. package/components/Dropdown/{DropdownMenu.vue2.js → DropdownMenu.vue3.js} +40 -40
  37. package/components/Dropdown/composables/useDropdownHydration.d.ts +4 -0
  38. package/components/Dropdown/composables/useDropdownNavigation.js +30 -18
  39. package/components/Form/Form.vue.d.ts +13 -1
  40. package/components/Form/Form.vue.js +2 -2
  41. package/components/Form/Form.vue2.js +313 -275
  42. package/components/Form/FormField.vue.js +103 -74
  43. package/components/Form/FormFields.vue.js +2 -2
  44. package/components/Form/FormFields.vue2.js +7 -6
  45. package/components/Form/composables/useForm.js +71 -67
  46. package/components/Form/types.d.ts +21 -1
  47. package/components/IconPicker.vue.js +3 -2
  48. package/components/ImportData/ImportStep2.vue.js +3 -2
  49. package/components/MultiSelect/composables/useMultiSelectHydration.d.ts +4 -0
  50. package/components/NavbarCommandPalette.vue.d.ts +1 -1
  51. package/components/PermissionMatrix/PermissionTopBar.vue.js +3 -2
  52. package/components/RichTextEditor/RichTextEditor.vue.js +43 -48
  53. package/components/RichTextEditor/RichTextLinkPopover.vue3.js +2 -2
  54. package/components/RichTextEditor/RichTextToolbar.vue.d.ts +12 -3
  55. package/components/RichTextEditor/{RichTextToolbar.vue.js → RichTextToolbar.vue2.js} +157 -121
  56. package/components/RichTextEditor/RichTextToolbar.vue3.js +2 -2
  57. package/components/RichTextEditor/index.d.ts +2 -0
  58. package/components/RichTextEditor/types.d.ts +38 -0
  59. package/components/RichTextEditor/types.js +52 -0
  60. package/components/Screen/ScreenFilter.vue.js +26 -21
  61. package/components/SidebarMenu/SidebarMenu.vue.d.ts +2 -2
  62. package/components/SidebarMenu/SidebarMenuItem.vue.js +3 -2
  63. package/components/Switch.vue.js +8 -8
  64. package/components/Tooltip.vue.js +1 -0
  65. package/components/Workbook/Sheet.vue.d.ts +1 -1
  66. package/components/Workbook/Sheet.vue.js +14 -13
  67. package/components/index.d.ts +1 -0
  68. package/index.d.ts +1 -0
  69. package/index.js +306 -301
  70. package/package.json +2 -2
  71. package/style.css +2 -2
  72. package/types/appshell.type.d.ts +2 -1
  73. package/types/styles.d.ts +2 -0
  74. package/components/Dropdown/DropdownGroupedLayout.vue.js +0 -75
  75. /package/components/RichTextEditor/{RichTextLinkPopover.vue.js → RichTextLinkPopover.vue2.js} +0 -0
@@ -1,10 +1,11 @@
1
- import { defineComponent as B, ref as M, computed as d, openBlock as r, createBlock as n, withCtx as o, createElementVNode as l, createVNode as a, unref as w, toDisplayString as v, withModifiers as F, setBlockTracking as C, createElementBlock as S } from "vue";
1
+ import { defineComponent as B, ref as M, computed as d, openBlock as s, createBlock as n, withCtx as o, createElementVNode as l, createVNode as a, unref as w, toDisplayString as v, withModifiers as F, setBlockTracking as C, createElementBlock as S } from "vue";
2
2
  import f from "../Button.vue.js";
3
3
  import j from "../Modal.vue.js";
4
4
  import z from "../Dropdown/Dropdown.vue.js";
5
5
  import h from "../Icon.vue.js";
6
6
  import { $t as y } from "../../utils/i18n.js";
7
7
  /* empty css */
8
+ /* empty css */
8
9
  /* empty css */
9
10
  import O from "../Form/Form.vue.js";
10
11
  /* empty css */
@@ -18,12 +19,16 @@ import "@vueuse/core";
18
19
  import "iconify-icon-picker";
19
20
  import "iconify-icon-picker/style.css";
20
21
  /* empty css */
21
- /* empty css */
22
+ /* empty css */
23
+ /* empty css */
24
+ /* empty css */
22
25
  import "../../core/config.js";
26
+ /* empty css */
27
+ /* empty css */
23
28
  const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }, A = { style: { "will-change": "transform", contain: "layout style" } }, E = {
24
29
  class: "pt-2 px-2 min-w-[295px]",
25
30
  style: { "will-change": "transform", contain: "layout style" }
26
- }, re = /* @__PURE__ */ B({
31
+ }, me = /* @__PURE__ */ B({
27
32
  __name: "ScreenFilter",
28
33
  props: {
29
34
  schema: {},
@@ -32,12 +37,12 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
32
37
  },
33
38
  emits: ["update:modelValue", "change"],
34
39
  setup(i, { emit: $ }) {
35
- const u = i, m = $, s = M(!1), p = d(() => u.modelValue ? Object.keys(u.modelValue).filter(
36
- (e) => u.modelValue[e] !== "" && u.modelValue[e] !== null && u.modelValue[e] !== void 0
40
+ const m = i, c = $, r = M(!1), p = d(() => m.modelValue ? Object.keys(m.modelValue).filter(
41
+ (e) => m.modelValue[e] !== "" && m.modelValue[e] !== null && m.modelValue[e] !== void 0
37
42
  ).length : 0), x = (e) => {
38
- m("update:modelValue", e.values), m("change", e.values), s.value = !1;
43
+ c("update:modelValue", e.values), c("change", e.values), r.value = !1;
39
44
  }, k = () => {
40
- m("update:modelValue", {}), m("change", {});
45
+ c("update:modelValue", {}), c("change", {});
41
46
  }, g = d(() => {
42
47
  const e = y("vlite.screen.filters");
43
48
  return e !== "vlite.screen.filters" ? e : "Filters";
@@ -48,19 +53,19 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
48
53
  const e = y("vlite.screen.filter");
49
54
  return e !== "vlite.screen.filter" ? e : "Filter";
50
55
  });
51
- return (e, t) => i.type === "modal" ? (r(), n(j, {
56
+ return (e, t) => i.type === "modal" ? (s(), n(j, {
52
57
  key: 0,
53
58
  title: g.value,
54
- show: s.value,
55
- "onUpdate:show": t[3] || (t[3] = (c) => s.value = c),
59
+ show: r.value,
60
+ "onUpdate:show": t[3] || (t[3] = (u) => r.value = u),
56
61
  "max-width": "sm:max-w-md"
57
62
  }, {
58
63
  trigger: o(() => [
59
- p.value > 0 ? (r(), n(f, {
64
+ p.value > 0 ? (s(), n(f, {
60
65
  key: 0,
61
66
  variant: "secondary",
62
67
  class: "flex items-center gap-1.5 pl-3 pr-1.5 shrink-0",
63
- onClick: t[0] || (t[0] = (c) => s.value = !0)
68
+ onClick: t[0] || (t[0] = (u) => r.value = !0)
64
69
  }, {
65
70
  default: o(() => [
66
71
  a(h, {
@@ -79,10 +84,10 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
79
84
  ])
80
85
  ]),
81
86
  _: 1
82
- })) : (r(), n(f, {
87
+ })) : (s(), n(f, {
83
88
  key: 1,
84
89
  variant: "outline",
85
- onClick: t[2] || (t[2] = (c) => s.value = !0),
90
+ onClick: t[2] || (t[2] = (u) => r.value = !0),
86
91
  title: V.value,
87
92
  size: "lg",
88
93
  asIcon: "",
@@ -90,7 +95,7 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
90
95
  }, {
91
96
  default: o(() => [
92
97
  l("div", N, [
93
- t[1] || (C(-1, !0), (t[1] = (r(), S("svg", {
98
+ t[1] || (C(-1, !0), (t[1] = (s(), S("svg", {
94
99
  xmlns: "http://www.w3.org/2000/svg",
95
100
  width: "1.132em",
96
101
  height: "1.132em",
@@ -121,10 +126,10 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
121
126
  ])
122
127
  ]),
123
128
  _: 1
124
- }, 8, ["title", "show"])) : (r(), n(w(z), {
129
+ }, 8, ["title", "show"])) : (s(), n(w(z), {
125
130
  key: 1,
126
- isOpen: s.value,
127
- "onUpdate:isOpen": t[4] || (t[4] = (c) => s.value = c),
131
+ isOpen: r.value,
132
+ "onUpdate:isOpen": t[4] || (t[4] = (u) => r.value = u),
128
133
  "close-on-select": !1,
129
134
  position: "bottom-end",
130
135
  maxHeight: "430px",
@@ -132,7 +137,7 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
132
137
  class: "w-auto"
133
138
  }, {
134
139
  trigger: o(() => [
135
- p.value > 0 ? (r(), n(f, {
140
+ p.value > 0 ? (s(), n(f, {
136
141
  key: 0,
137
142
  variant: "secondary",
138
143
  class: "flex items-center gap-1.5 pl-3 pr-1.5 shrink-0 bg-gray-150! hover:bg-gray-100!",
@@ -155,7 +160,7 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
155
160
  ])
156
161
  ]),
157
162
  _: 1
158
- })) : (r(), n(f, {
163
+ })) : (s(), n(f, {
159
164
  key: 1,
160
165
  variant: "outline",
161
166
  icon: "hugeicons:filter-add",
@@ -186,5 +191,5 @@ const N = { class: "text-gray-800! h-4! w-4! flex items-center justify-center" }
186
191
  }
187
192
  });
188
193
  export {
189
- re as default
194
+ me as default
190
195
  };
@@ -3,10 +3,10 @@ declare const _default: import('vue').DefineComponent<SidebarMenuProps, {}, {},
3
3
  variant: "default" | "ghost";
4
4
  compact: boolean;
5
5
  orientation: "vertical" | "horizontal";
6
- iconSize: string;
7
6
  items: SidebarMenuItemSchema[];
8
- mobileBreakpoint: "sm" | "md" | "lg" | "xl" | "none";
9
7
  allowMultiple: boolean;
8
+ iconSize: string;
9
+ mobileBreakpoint: "sm" | "md" | "lg" | "xl" | "none";
10
10
  menuOffset: [number, number];
11
11
  indentSize: number;
12
12
  defaultExpanded: string[];
@@ -5,6 +5,7 @@ import G from "../Tooltip.vue.js";
5
5
  import xe from "../Dropdown/Dropdown.vue.js";
6
6
  import { $t as J } from "../../utils/i18n.js";
7
7
  /* empty css */
8
+ /* empty css */
8
9
  /* empty css */
9
10
  const we = {
10
11
  key: 0,
@@ -12,7 +13,7 @@ const we = {
12
13
  }, ke = { class: "w-full" }, Ce = { class: "flex items-center w-full gap-2 text-sm" }, Ie = { class: "truncate flex-1 font-medium" }, Se = ["onKeydown"], ze = {
13
14
  key: 0,
14
15
  class: "sidebar-children-container overflow-hidden transition-all duration-300 ease-in-out relative"
15
- }, $e = { class: "pt-1 space-y-0.5" }, Ae = /* @__PURE__ */ le({
16
+ }, $e = { class: "pt-1 space-y-0.5" }, De = /* @__PURE__ */ le({
16
17
  __name: "SidebarMenuItem",
17
18
  props: {
18
19
  item: {},
@@ -378,5 +379,5 @@ const we = {
378
379
  }
379
380
  });
380
381
  export {
381
- Ae as default
382
+ De as default
382
383
  };
@@ -1,12 +1,12 @@
1
1
  import { defineComponent as h, computed as b, openBlock as n, createElementBlock as s, normalizeClass as i, createElementVNode as o, toDisplayString as d, createCommentVNode as u, withModifiers as v } from "vue";
2
2
  import { $t as m } from "../utils/i18n.js";
3
- const w = { class: "flex flex-col gap-0.5 min-w-0" }, k = {
3
+ const w = { class: "flex flex-col gap-0.5 min-w-0" }, p = {
4
4
  key: 0,
5
5
  class: "text-sm font-medium text-foreground leading-snug select-none"
6
- }, p = {
6
+ }, y = {
7
7
  key: 1,
8
8
  class: "text-xs text-muted-foreground leading-snug select-none"
9
- }, x = ["id", "aria-checked", "aria-label", "disabled", "data-testid"], y = ["id", "aria-checked", "aria-label", "disabled", "data-testid"], z = /* @__PURE__ */ h({
9
+ }, k = ["id", "aria-checked", "aria-label", "disabled", "data-testid"], x = ["id", "aria-checked", "aria-label", "disabled", "data-testid"], z = /* @__PURE__ */ h({
10
10
  __name: "Switch",
11
11
  props: {
12
12
  modelValue: { type: Boolean, default: !1 },
@@ -36,8 +36,8 @@ const w = { class: "flex flex-col gap-0.5 min-w-0" }, k = {
36
36
  onClick: r
37
37
  }, [
38
38
  o("div", w, [
39
- t.value ? (n(), s("span", k, d(t.value), 1)) : u("", !0),
40
- c.value ? (n(), s("span", p, d(c.value), 1)) : u("", !0)
39
+ t.value ? (n(), s("span", p, d(t.value), 1)) : u("", !0),
40
+ c.value ? (n(), s("span", y, d(c.value), 1)) : u("", !0)
41
41
  ]),
42
42
  o("button", {
43
43
  id: e.id,
@@ -57,7 +57,7 @@ const w = { class: "flex flex-col gap-0.5 min-w-0" }, k = {
57
57
  e.modelValue ? "translate-x-5 rtl:translate-x-0" : "translate-x-0 rtl:-translate-x-5"
58
58
  ])
59
59
  }, null, 2)
60
- ], 10, x)
60
+ ], 10, k)
61
61
  ], 2)) : (n(), s("div", {
62
62
  key: 1,
63
63
  class: i(["inline-flex items-center gap-2", a.class])
@@ -76,11 +76,11 @@ const w = { class: "flex flex-col gap-0.5 min-w-0" }, k = {
76
76
  o("span", {
77
77
  "aria-hidden": "true",
78
78
  class: i([
79
- "pointer-events-none inline-block h-4.5 w-4.5 transform rounded-full bg-background shadow-lg ring-0 transition duration-200 ease-in-out",
79
+ "pointer-events-none inline-block h-4.5 w-4.5 transform rounded-full bg-primary-fg shadow-lg ring-0 transition duration-200 ease-in-out",
80
80
  e.modelValue ? "translate-x-5 rtl:translate-x-0" : "translate-x-0 rtl:-translate-x-5"
81
81
  ])
82
82
  }, null, 2)
83
- ], 10, y),
83
+ ], 10, x),
84
84
  t.value ? (n(), s("label", {
85
85
  key: 0,
86
86
  class: i([e.disabled ? "opacity-50" : "", "text-sm font-medium text-foreground cursor-pointer"]),
@@ -14,6 +14,7 @@ const y = {
14
14
  placement: { default: "top" },
15
15
  offset: {},
16
16
  trigger: {},
17
+ reference: {},
17
18
  arrow: { type: Boolean, default: !0 },
18
19
  triggerClass: { default: "" },
19
20
  className: { default: "" },
@@ -34,8 +34,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
34
34
  onDuplicate?: (id: string) => any;
35
35
  }>, {
36
36
  itemClass: string;
37
- confirmDelete: boolean;
38
37
  isEditing: boolean;
38
+ confirmDelete: boolean;
39
39
  canDelete: boolean;
40
40
  allowIconChange: boolean;
41
41
  activeItemClass: string;
@@ -1,8 +1,9 @@
1
- import { defineComponent as I, ref as b, computed as v, openBlock as a, createElementBlock as d, normalizeClass as $, createElementVNode as u, withModifiers as r, createBlock as S, withCtx as x, createVNode as m, createCommentVNode as V, withDirectives as j, withKeys as g, vModelText as z, toDisplayString as K, unref as M, nextTick as N } from "vue";
1
+ import { defineComponent as I, ref as b, computed as v, openBlock as r, createElementBlock as d, normalizeClass as $, createElementVNode as u, withModifiers as a, createBlock as S, withCtx as x, createVNode as m, createCommentVNode as V, withDirectives as j, withKeys as g, vModelText as z, toDisplayString as K, unref as M, nextTick as N } from "vue";
2
2
  import y from "../Icon.vue.js";
3
3
  import O from "../Dropdown/Dropdown.vue.js";
4
4
  import { $t as l } from "../../utils/i18n.js";
5
5
  /* empty css */
6
+ /* empty css */
6
7
  /* empty css */
7
8
  import R from "../Button.vue.js";
8
9
  import A from "../IconPicker.vue.js";
@@ -15,7 +16,7 @@ const U = {
15
16
  }, F = { class: "flex-1 min-w-0 pr-1" }, G = ["onKeydown"], H = {
16
17
  key: 1,
17
18
  class: "block truncate text-sm font-medium leading-normal"
18
- }, _ = /* @__PURE__ */ I({
19
+ }, ee = /* @__PURE__ */ I({
19
20
  __name: "Sheet",
20
21
  props: {
21
22
  sheet: {},
@@ -86,17 +87,17 @@ const U = {
86
87
  e.isActive ? `bg-secondary text-foreground ring-1 ring-border ring-b-0 z-10 ${e.activeItemClass}` : `text-muted-foreground hover:bg-accent/50 ${e.inactiveItemClass}`,
87
88
  e.isEditing ? "cursor-text" : ""
88
89
  ].filter(Boolean).join(" "));
89
- return (n, t) => (a(), d("div", {
90
+ return (n, t) => (r(), d("div", {
90
91
  class: $(E.value),
91
92
  onClick: t[5] || (t[5] = (c) => o("select", i.sheet.id)),
92
93
  onDblclick: h
93
94
  }, [
94
95
  u("div", {
95
- onClick: t[1] || (t[1] = r(() => {
96
+ onClick: t[1] || (t[1] = a(() => {
96
97
  }, ["stop"])),
97
98
  class: "mr-2 flex items-center shrink-0"
98
99
  }, [
99
- (i.sheet.icon || i.isEditing) && i.allowIconChange ? (a(), S(A, {
100
+ (i.sheet.icon || i.isEditing) && i.allowIconChange ? (r(), S(A, {
100
101
  key: 0,
101
102
  value: i.sheet.icon || "lucide:file",
102
103
  position: "bottom-start",
@@ -111,7 +112,7 @@ const U = {
111
112
  ])
112
113
  ]),
113
114
  _: 1
114
- }, 8, ["value"])) : i.sheet.icon ? (a(), d("div", q, [
115
+ }, 8, ["value"])) : i.sheet.icon ? (r(), d("div", q, [
115
116
  m(y, {
116
117
  icon: i.sheet.icon,
117
118
  class: "w-4 h-4 opacity-70"
@@ -119,7 +120,7 @@ const U = {
119
120
  ])) : V("", !0)
120
121
  ]),
121
122
  u("div", F, [
122
- i.isEditing ? j((a(), d("input", {
123
+ i.isEditing ? j((r(), d("input", {
123
124
  key: 0,
124
125
  ref_key: "inputRef",
125
126
  ref: f,
@@ -128,18 +129,18 @@ const U = {
128
129
  class: "w-full bg-transparent border-none outline-none p-0 text-sm font-medium text-foreground placeholder-muted-foreground focus:ring-0",
129
130
  onBlur: k,
130
131
  onKeydown: [
131
- g(r(k, ["prevent"]), ["enter"]),
132
- g(r(D, ["prevent"]), ["esc"])
132
+ g(a(k, ["prevent"]), ["enter"]),
133
+ g(a(D, ["prevent"]), ["esc"])
133
134
  ],
134
- onClick: t[3] || (t[3] = r(() => {
135
+ onClick: t[3] || (t[3] = a(() => {
135
136
  }, ["stop"]))
136
137
  }, null, 40, G)), [
137
138
  [z, s.value]
138
- ]) : (a(), d("span", H, K(C.value), 1))
139
+ ]) : (r(), d("span", H, K(C.value), 1))
139
140
  ]),
140
141
  u("div", {
141
142
  class: "opacity-0 group-hover:opacity-100 transition-opacity ml-auto pl-1 -mr-2 flex items-center",
142
- onClick: t[4] || (t[4] = r(() => {
143
+ onClick: t[4] || (t[4] = a(() => {
143
144
  }, ["stop"]))
144
145
  }, [
145
146
  m(M(O), {
@@ -165,5 +166,5 @@ const U = {
165
166
  }
166
167
  });
167
168
  export {
168
- _ as default
169
+ ee as default
169
170
  };
@@ -6,6 +6,7 @@ export { default as Badge } from './Badge.vue';
6
6
  export { Barcode } from './Barcode';
7
7
  export { default as Beacon } from './Beacon.vue';
8
8
  export { Breadcrumb, BreadcrumbItem } from './Breadcrumb';
9
+ export { CategoryMenu } from './CategoryMenu';
9
10
  export { default as Button } from './Button.vue';
10
11
  export { default as BackButton } from './BackButton.vue';
11
12
  export { default as ButtonGroup } from './ButtonGroup.vue';
package/index.d.ts CHANGED
@@ -50,6 +50,7 @@ export * from './components/AttachmentsList';
50
50
  export * from './components/CustomFieldsDisplay';
51
51
  export * from './components/Invoice';
52
52
  export * from './components/CategoryManager';
53
+ export * from './components/CategoryMenu';
53
54
  export * from './components/ThumbnailSelector';
54
55
  export * from './components/TagInput';
55
56
  export * from './components/Calendar';