lkt-menu 1.0.5 → 1.0.7

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.
package/dist/build.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- declare class T {
2
- constructor(t: any, s: any, v: any);
1
+ declare class D {
2
+ constructor(t: any, s: any, d: any);
3
3
  key: any;
4
4
  href: any;
5
5
  label: any;
@@ -25,18 +25,18 @@ declare function he(n: any, t: any, s: any): {
25
25
  isOpened: boolean;
26
26
  isActive: boolean;
27
27
  children: any[];
28
- setChildren: (t: any) => T;
29
- setOnClick: (t: any) => T;
28
+ setChildren: (t: any) => D;
29
+ setOnClick: (t: any) => D;
30
30
  onClick: any;
31
- setIsActiveChecker: (t: any) => T;
31
+ setIsActiveChecker: (t: any) => D;
32
32
  isActiveChecker: any;
33
- setIsActive: (t?: boolean) => T;
34
- setLabel: (t: any) => T;
35
- setIcon: (t: any) => T;
33
+ setIsActive: (t?: boolean) => D;
34
+ setLabel: (t: any) => D;
35
+ setIcon: (t: any) => D;
36
36
  doClose: () => void;
37
37
  };
38
38
  declare namespace ve {
39
39
  function install(n: any): void;
40
40
  }
41
41
  declare function me(n: any): boolean;
42
- export { T as MenuEntry, he as createMenuEntry, ve as default, me as setMenuToggleSlot };
42
+ export { D as MenuEntry, he as createMenuEntry, ve as default, me as setMenuToggleSlot };
package/dist/build.js CHANGED
@@ -1,9 +1,9 @@
1
- import { defineComponent as R, ref as U, useSlots as B, computed as i, watch as g, onMounted as q, resolveComponent as w, openBlock as u, createElementBlock as a, normalizeClass as _, createElementVNode as C, createVNode as G, withCtx as E, unref as H, renderSlot as I, createCommentVNode as m, toDisplayString as J, createBlock as M, resolveDynamicComponent as P, Fragment as K, renderList as V, createSlots as N, reactive as Q } from "vue";
2
- import { __ as X } from "lkt-i18n";
3
- import { useRouter as Y } from "vue-router";
4
- class T {
5
- constructor(t, s, v) {
6
- this.key = "", this.href = "", this.label = "", this.icon = "", this.onClick = void 0, this.isActiveChecker = void 0, this.isOpened = !1, this.isActive = !1, this.parent = void 0, this.children = [], this.key = t, this.href = s, this.label = v;
1
+ import { defineComponent as K, ref as I, useSlots as N, computed as r, watch as C, onMounted as G, resolveComponent as B, openBlock as u, createElementBlock as a, normalizeClass as _, createElementVNode as V, createVNode as H, withCtx as $, unref as J, renderSlot as M, createCommentVNode as m, toDisplayString as P, createBlock as L, resolveDynamicComponent as Q, Fragment as T, renderList as b, createSlots as W, reactive as X } from "vue";
2
+ import { __ as Y } from "lkt-i18n";
3
+ import { useRouter as Z } from "vue-router";
4
+ class D {
5
+ constructor(t, s, d) {
6
+ this.key = "", this.href = "", this.label = "", this.icon = "", this.onClick = void 0, this.isActiveChecker = void 0, this.isOpened = !1, this.isActive = !1, this.parent = void 0, this.children = [], this.key = t, this.href = s, this.label = d;
7
7
  }
8
8
  setChildren(t) {
9
9
  return t.forEach((s) => s.parent = this), this.children = t, this;
@@ -27,72 +27,73 @@ class T {
27
27
  this.isOpened = !1;
28
28
  }
29
29
  }
30
- const $ = (n, t) => (t.forEach((s) => {
31
- n.includes(s.key) || n.push(s.key), s.children.length > 0 && $(n, s.children);
32
- }), n), b = class b {
30
+ const w = (n, t) => (t.forEach((s) => {
31
+ n.includes(s.key) || n.push(s.key), s.children.length > 0 && w(n, s.children);
32
+ }), n), A = class A {
33
33
  };
34
- b.toggleSlot = "", b.debugEnabled = !1;
35
- let k = b;
36
- const Z = { class: "lkt-menu-entry-main" }, ee = { class: "lkt-entry-content" }, te = {
34
+ A.toggleSlot = "", A.debugEnabled = !1;
35
+ let k = A;
36
+ const ee = { class: "lkt-menu-entry-main" }, te = { class: "lkt-entry-content" }, le = {
37
37
  key: 0,
38
38
  class: "lkt-menu-entry-icon"
39
- }, le = {
39
+ }, ne = {
40
40
  key: 1,
41
41
  class: "lkt-menu-entry-text"
42
- }, ne = {
42
+ }, se = {
43
43
  key: 0,
44
44
  class: "lkt-menu-entry-children"
45
- }, se = /* @__PURE__ */ R({
45
+ }, ue = /* @__PURE__ */ K({
46
46
  __name: "MenuItem",
47
47
  props: {
48
- modelValue: { default: () => new T("", "", "") }
48
+ modelValue: { default: () => new D("", "", "") }
49
49
  },
50
50
  emits: ["update:modelValue"],
51
51
  setup(n, { emit: t }) {
52
- const s = t, v = n, e = U(v.modelValue), r = B(), A = Y(), p = () => {
52
+ const s = t, d = n, e = I(d.modelValue), o = N(), O = Z(), p = I(!1), f = () => {
53
53
  e.value.isOpened = !e.value.isOpened;
54
- }, o = () => (e.value.children.length > 0 && p(), typeof e.value.onClick == "function" && e.value.onClick({
54
+ }, i = () => (e.value.children.length > 0 && f(), typeof e.value.onClick == "function" && e.value.onClick({
55
55
  entry: e.value
56
- }), 1), c = i(() => r["icon-" + e.value.key] || e.value.icon !== ""), O = i(() => {
56
+ }), 1), v = r(() => o["icon-" + e.value.key] || e.value.icon !== ""), S = r(() => {
57
57
  let l = [];
58
- return c.value && l.push("has-icon"), l.join(" ");
59
- }), f = i(() => $([], e.value.children)), h = i(() => {
58
+ return v.value && l.push("has-icon"), p.value && l.push("is-active"), l.join(" ");
59
+ }), y = r(() => w([], e.value.children)), h = r(() => {
60
60
  let l = [];
61
- for (let d in r)
62
- d.startsWith("icon-") && f.value.includes(d.substring(5)) && l.push(d);
61
+ for (let c in o)
62
+ c.startsWith("icon-") && y.value.includes(c.substring(5)) && l.push(c);
63
63
  return l;
64
- }), W = i(() => e.value.label.startsWith("__:") ? X(e.value.label.substring(3)) : e.value.label), x = i(() => e.value.isActive ? !0 : typeof e.value.isActiveChecker == "function" ? !!e.value.isActiveChecker({
64
+ }), j = r(() => e.value.label.startsWith("__:") ? Y(e.value.label.substring(3)) : e.value.label), x = r(() => e.value.isActive ? !0 : typeof e.value.isActiveChecker == "function" ? !!e.value.isActiveChecker({
65
65
  entry: e.value
66
- }) : !1), D = i(() => !!k.toggleSlot), j = i(() => k.toggleSlot);
67
- return g(() => v.modelValue, (l) => {
66
+ }) : !1), z = r(() => !!k.toggleSlot), F = r(() => k.toggleSlot);
67
+ return C(() => d.modelValue, (l) => {
68
68
  e.value = l;
69
- }, { deep: !0 }), g(e, (l) => {
69
+ }, { deep: !0 }), C(e, (l) => {
70
70
  s("update:modelValue", l);
71
- }, { deep: !0 }), q(() => {
72
- let l = A.currentRoute;
71
+ }, { deep: !0 }), G(() => {
72
+ let l = O.currentRoute;
73
73
  if (l.value.path === e.value.href)
74
74
  e.value.isOpened = !0;
75
75
  else if (e.value.children.length > 0) {
76
- let d = !1;
77
- e.value.children.forEach((S) => {
78
- l.value.path === S.href && (d = !0);
79
- }), d && (e.value.isOpened = !0);
76
+ let c = !1;
77
+ e.value.children.forEach((E) => {
78
+ l.value.path === E.href && (c = !0);
79
+ }), c && (e.value.isOpened = !0);
80
80
  }
81
- }), (l, d) => {
82
- const S = w("lkt-anchor"), z = w("menu-item", !0);
81
+ }), (l, c) => {
82
+ const E = B("lkt-anchor"), q = B("menu-item", !0);
83
83
  return u(), a("div", {
84
- class: _(["lkt-menu-entry", O.value])
84
+ class: _(["lkt-menu-entry", S.value])
85
85
  }, [
86
- C("div", Z, [
87
- G(S, {
86
+ V("div", ee, [
87
+ H(E, {
88
88
  to: e.value.href,
89
- "on-click": o,
90
- "is-active": x.value
89
+ "on-click": i,
90
+ "is-active": x.value,
91
+ onActive: c[0] || (c[0] = (R) => p.value = l.$e)
91
92
  }, {
92
- default: E(() => [
93
- C("div", ee, [
94
- c.value ? (u(), a("div", te, [
95
- H(r)["icon-" + e.value.key] ? I(l.$slots, "icon-" + e.value.key, {
93
+ default: $(() => [
94
+ V("div", te, [
95
+ v.value ? (u(), a("div", le, [
96
+ J(o)["icon-" + e.value.key] ? M(l.$slots, "icon-" + e.value.key, {
96
97
  key: e.value.key,
97
98
  entry: e.value
98
99
  }) : e.value.icon !== "" ? (u(), a("i", {
@@ -100,7 +101,7 @@ const Z = { class: "lkt-menu-entry-main" }, ee = { class: "lkt-entry-content" },
100
101
  class: _(e.value.icon)
101
102
  }, null, 2)) : m("", !0)
102
103
  ])) : m("", !0),
103
- e.value.label !== "" ? (u(), a("div", le, J(W.value), 1)) : m("", !0)
104
+ e.value.label !== "" ? (u(), a("div", ne, P(j.value), 1)) : m("", !0)
104
105
  ])
105
106
  ]),
106
107
  _: 3
@@ -108,9 +109,9 @@ const Z = { class: "lkt-menu-entry-main" }, ee = { class: "lkt-entry-content" },
108
109
  e.value.children.length > 0 ? (u(), a("div", {
109
110
  key: 0,
110
111
  class: "lkt-menu-entry-toggle",
111
- onClick: p
112
+ onClick: f
112
113
  }, [
113
- D.value ? (u(), M(P(j.value), {
114
+ z.value ? (u(), L(Q(F.value), {
114
115
  key: 0,
115
116
  class: _(["lkt-menu-entry-toggle-inner", e.value.isOpened ? "is-opened" : ""])
116
117
  }, null, 8, ["class"])) : (u(), a("div", {
@@ -119,16 +120,16 @@ const Z = { class: "lkt-menu-entry-main" }, ee = { class: "lkt-entry-content" },
119
120
  }, null, 2))
120
121
  ])) : m("", !0)
121
122
  ]),
122
- e.value.isOpened ? (u(), a("div", ne, [
123
- (u(!0), a(K, null, V(e.value.children, (F, L) => (u(), M(z, {
124
- modelValue: e.value.children[L],
125
- "onUpdate:modelValue": (y) => e.value.children[L] = y,
126
- key: F.key
127
- }, N({ _: 2 }, [
128
- V(h.value, (y) => ({
129
- name: y,
130
- fn: E(() => [
131
- I(l.$slots, y)
123
+ e.value.isOpened ? (u(), a("div", se, [
124
+ (u(!0), a(T, null, b(e.value.children, (R, U) => (u(), L(q, {
125
+ modelValue: e.value.children[U],
126
+ "onUpdate:modelValue": (g) => e.value.children[U] = g,
127
+ key: R.key
128
+ }, W({ _: 2 }, [
129
+ b(h.value, (g) => ({
130
+ name: g,
131
+ fn: $(() => [
132
+ M(l.$slots, g)
132
133
  ])
133
134
  }))
134
135
  ]), 1032, ["modelValue", "onUpdate:modelValue"]))), 128))
@@ -136,48 +137,53 @@ const Z = { class: "lkt-menu-entry-main" }, ee = { class: "lkt-entry-content" },
136
137
  ], 2);
137
138
  };
138
139
  }
139
- }), ue = { class: "lkt-menu-container" }, oe = { class: "lkt-menu" }, re = /* @__PURE__ */ C("div", { class: "lkt-menu-outside" }, null, -1), ie = /* @__PURE__ */ R({
140
+ }), ie = { class: "lkt-menu-container" }, oe = { class: "lkt-menu" }, re = /* @__PURE__ */ K({
140
141
  __name: "LktMenu",
141
142
  props: {
142
143
  modelValue: { default: () => [] }
143
144
  },
144
- emits: ["update:modelValue"],
145
+ emits: ["update:modelValue", "click-outside"],
145
146
  setup(n, { emit: t }) {
146
- const s = n, v = t, e = B(), r = U(s.modelValue), A = i(() => $([], r.value)), p = i(() => {
147
- let o = [];
148
- for (let c in e)
149
- c.startsWith("icon-") && A.value.includes(c.substring(5)) && o.push(c);
150
- return o;
151
- });
152
- return g(() => s.modelValue, (o) => {
153
- r.value = o;
154
- }, { deep: !0 }), g(r, (o) => {
155
- v("update:modelValue", o);
156
- }, { deep: !0 }), (o, c) => (u(), a("div", ue, [
157
- C("div", oe, [
158
- (u(!0), a(K, null, V(r.value, (O, f) => (u(), M(se, {
159
- modelValue: r.value[f],
160
- "onUpdate:modelValue": (h) => r.value[f] = h,
161
- key: O.key
162
- }, N({ _: 2 }, [
163
- V(p.value, (h) => ({
147
+ const s = n, d = t, e = N(), o = I(s.modelValue), O = r(() => w([], o.value)), p = r(() => {
148
+ let i = [];
149
+ for (let v in e)
150
+ v.startsWith("icon-") && O.value.includes(v.substring(5)) && i.push(v);
151
+ return i;
152
+ }), f = () => {
153
+ d("click-outside");
154
+ };
155
+ return C(() => s.modelValue, (i) => {
156
+ o.value = i;
157
+ }, { deep: !0 }), C(o, (i) => {
158
+ d("update:modelValue", i);
159
+ }, { deep: !0 }), (i, v) => (u(), a("div", ie, [
160
+ V("div", oe, [
161
+ (u(!0), a(T, null, b(o.value, (S, y) => (u(), L(ue, {
162
+ modelValue: o.value[y],
163
+ "onUpdate:modelValue": (h) => o.value[y] = h,
164
+ key: S.key
165
+ }, W({ _: 2 }, [
166
+ b(p.value, (h) => ({
164
167
  name: h,
165
- fn: E(() => [
166
- I(o.$slots, h)
168
+ fn: $(() => [
169
+ M(i.$slots, h)
167
170
  ])
168
171
  }))
169
172
  ]), 1032, ["modelValue", "onUpdate:modelValue"]))), 128))
170
173
  ]),
171
- re
174
+ V("div", {
175
+ class: "lkt-menu-outside",
176
+ onClick: f
177
+ })
172
178
  ]));
173
179
  }
174
180
  }), ve = {
175
181
  install: (n) => {
176
- n.component("lkt-menu") === void 0 && n.component("lkt-menu", ie);
182
+ n.component("lkt-menu") === void 0 && n.component("lkt-menu", re);
177
183
  }
178
- }, he = (n, t, s) => Q(new T(n, t, s)), me = (n) => (k.toggleSlot = n, !0);
184
+ }, he = (n, t, s) => X(new D(n, t, s)), me = (n) => (k.toggleSlot = n, !0);
179
185
  export {
180
- T as MenuEntry,
186
+ D as MenuEntry,
181
187
  he as createMenuEntry,
182
188
  ve as default,
183
189
  me as setMenuToggleSlot
@@ -5,12 +5,14 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
5
5
  modelValue: () => never[];
6
6
  }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
7
  "update:modelValue": (...args: any[]) => void;
8
+ "click-outside": (...args: any[]) => void;
8
9
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
9
10
  modelValue?: MenuEntry[] | undefined;
10
11
  }>, {
11
12
  modelValue: () => never[];
12
13
  }>>> & {
13
14
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
15
+ "onClick-outside"?: ((...args: any[]) => any) | undefined;
14
16
  }, {
15
17
  modelValue: MenuEntry[];
16
18
  }, {}>, Partial<Record<any, (_: {}) => any>>>;
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .lkt-menu{background:var(--lkt-menu-bg);padding:var(--lkt-menu-padding);max-width:var(--lkt-menu-max-width);width:var(--lkt-menu-width);height:100%}.lkt-menu-entry-toggle-inner{transition:all linear .2s}.lkt-menu-entry-toggle-inner.is-opened{transform:rotate(180deg)}.lkt-menu-entry-toggle-triangle{width:0;height:0;border-style:solid;border-width:10px 10px 0 10px;border-color:var(--lkt-menu-color-toggle) transparent transparent transparent;transform:rotate(0);transition:all linear .2s}.lkt-entry-content{display:inline-flex;flex-direction:row;gap:var(--lkt-menu-gap)}.lkt-menu-entry-toggle{display:inline-flex;flex-direction:row;align-items:center;justify-content:center}.lkt-menu-entry{padding:var(--lkt-menu-padding-entry)}.lkt-menu-entry .lkt-anchor{width:100%}.lkt-menu-entry-main{display:flex;justify-content:space-between}.lkt-entry-content{font-size:var(--lkt-menu-font-size);width:100%}.lkt-menu-outside{position:fixed;top:64px;right:0;left:0;bottom:0;background:var(--lkt-menu-bg-outside);z-index:-1}.lkt-menu-entry-children{padding:var(--lkt-menu-padding-children)}.lkt-menu-entry-text{padding:var(--lkt-menu-padding-text-without-icon)}.lkt-menu.has-icon .lkt-menu-entry-text{padding:var(--lkt-menu-padding-text)}.lkt-menu.has-icon .lkt-menu-entry-icon+.lkt-menu-entry-text{padding:var(--lkt-menu-padding-text-with-icon)}
1
+ .lkt-menu{background:var(--lkt-menu-bg);padding:var(--lkt-menu-padding);max-width:var(--lkt-menu-max-width);width:var(--lkt-menu-width);height:100%;display:flex;flex-direction:column;align-items:stretch;gap:var(--lkt-menu-gap-entries)}.lkt-menu-entry-toggle-inner{transition:all linear .2s}.lkt-menu-entry-toggle-inner.is-opened{transform:rotate(180deg)}.lkt-menu-entry-toggle-triangle{width:0;height:0;border-style:solid;border-width:10px 10px 0 10px;border-color:var(--lkt-menu-color-toggle) transparent transparent transparent;transform:rotate(0);transition:all linear .2s}.lkt-entry-content{display:inline-flex;flex-direction:row;gap:var(--lkt-menu-gap)}.lkt-menu-entry-toggle{display:inline-flex;flex-direction:row;align-items:center;justify-content:center}.lkt-menu-entry{padding:var(--lkt-menu-padding-entry)}.lkt-menu-entry .lkt-anchor{width:100%}.lkt-menu-entry-main{display:flex;justify-content:space-between;position:relative}.lkt-entry-content{font-size:var(--lkt-menu-font-size);width:100%}.lkt-menu-outside{position:fixed;top:64px;right:0;left:0;bottom:0;background:var(--lkt-menu-bg-outside);z-index:-1}.lkt-menu-entry-children{padding:var(--lkt-menu-padding-children)}.lkt-menu-entry-text{padding:var(--lkt-menu-padding-text-without-icon)}.lkt-menu.has-icon .lkt-menu-entry-text{padding:var(--lkt-menu-padding-text)}.lkt-menu.has-icon .lkt-menu-entry-icon+.lkt-menu-entry-text{padding:var(--lkt-menu-padding-text-with-icon)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lkt-menu",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "lkt",
@@ -21,6 +21,8 @@ const slots = useSlots();
21
21
 
22
22
  const router = useRouter();
23
23
 
24
+ const isActive = ref(false);
25
+
24
26
  const onClickToggle = () => {
25
27
  entry.value.isOpened = !entry.value.isOpened;
26
28
  },
@@ -41,6 +43,7 @@ const canRenderIcon = computed(() => {
41
43
  classes = computed(() => {
42
44
  let r = [];
43
45
  if (canRenderIcon.value) r.push('has-icon');
46
+ if (isActive.value) r.push('is-active');
44
47
  return r.join(' ');
45
48
  });
46
49
 
@@ -113,6 +116,7 @@ onMounted(() => {
113
116
  :to="entry.href"
114
117
  :on-click="onClick"
115
118
  :is-active="computedIsActive"
119
+ @active="isActive = $e"
116
120
  >
117
121
  <div class="lkt-entry-content">
118
122
  <div class="lkt-menu-entry-icon" v-if="canRenderIcon">
@@ -6,12 +6,12 @@ import {LktObject} from "lkt-ts-interfaces";
6
6
  import {fetchKeys} from "../functions/helpers";
7
7
 
8
8
  const props = withDefaults(defineProps<{
9
- modelValue?: MenuEntry[]
9
+ modelValue?: MenuEntry[],
10
10
  }>(), {
11
- modelValue: () => []
11
+ modelValue: () => [],
12
12
  });
13
13
 
14
- const emit = defineEmits(['update:modelValue']);
14
+ const emit = defineEmits(['update:modelValue', 'click-outside']);
15
15
 
16
16
  const slots = useSlots();
17
17
 
@@ -33,6 +33,10 @@ const availableKeys = computed(() => {
33
33
  return r;
34
34
  });
35
35
 
36
+ const onClickOutside = () => {
37
+ emit('click-outside');
38
+ }
39
+
36
40
  watch(() => props.modelValue, (v) => {
37
41
  entries.value = v;
38
42
  }, {deep: true})
@@ -51,7 +55,7 @@ watch(entries, (v) => {
51
55
  </template>
52
56
  </menu-item>
53
57
  </div>
54
- <div class="lkt-menu-outside"/>
58
+ <div class="lkt-menu-outside" v-on:click="onClickOutside"/>
55
59
  </div>
56
60
  </template>
57
61
 
package/theme/default.css CHANGED
@@ -15,6 +15,7 @@
15
15
  --lkt-menu-min-height: 0;
16
16
  --lkt-menu-padding: 15px;
17
17
  --lkt-menu-gap: 15px;
18
+ --lkt-menu-gap-entries: 0;
18
19
 
19
20
  /** Colors */
20
21
  --lkt-menu-bg: #ffffff;