@opengis/admin 0.1.98 → 0.1.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. package/dist/add-page-Dl_bGhPC.js +92 -0
  2. package/dist/admin-interface-Dma-D4A9.js +1351 -0
  3. package/dist/admin-view-TeTAUVK1.js +640 -0
  4. package/dist/admin.js +1 -1
  5. package/dist/admin.umd.cjs +83 -128
  6. package/dist/card-page-D-3aubBo.js +230 -0
  7. package/dist/{card-view-BpcpqR_U.js → card-view-CZjPaUKx.js} +1 -1
  8. package/dist/edit-page-RhKgRai9.js +103 -0
  9. package/dist/{import-file-eH-_Imyb.js → import-file-DgJqxKyF.js} +18308 -19458
  10. package/dist/style.css +1 -1
  11. package/module/settings/card/admin.accounts.table/index.yml +8 -0
  12. package/module/settings/card/admin.accounts.table/rules.hbs +19 -0
  13. package/module/settings/card/admin.accounts.table/users.hbs +14 -0
  14. package/module/settings/card/admin.roles.table/access.hbs +3 -24
  15. package/module/settings/card/admin.roles.table/general_info.hbs +1 -17
  16. package/module/settings/card/admin.roles.table/index.yml +4 -1
  17. package/module/settings/card/admin.roles.table/users.hbs +6 -27
  18. package/module/settings/card/admin.routes.table/general_info.hbs +14 -41
  19. package/module/settings/card/admin.routes.table/groups.hbs +12 -0
  20. package/module/settings/card/admin.routes.table/index.yml +3 -0
  21. package/module/settings/card/admin.routes.table/users.hbs +16 -33
  22. package/module/settings/card/admin.users.table/context.hbs +15 -0
  23. package/module/settings/card/admin.users.table/general_info.hbs +13 -26
  24. package/module/settings/card/admin.users.table/index.yml +17 -7
  25. package/module/settings/card/admin.users.table/last_login.hbs +10 -0
  26. package/module/settings/card/admin.users.table/logs.hbs +11 -31
  27. package/module/settings/card/admin.users.table/routes.hbs +8 -0
  28. package/module/settings/card/admin.users.table/user_roles.hbs +13 -25
  29. package/module/settings/form/admin.accounts.form.json +13 -0
  30. package/module/settings/form/admin.rules.form.json +31 -0
  31. package/module/settings/form/admin.user_roles.form.json +0 -8
  32. package/module/settings/form/admin.user_roles_card.form.json +14 -0
  33. package/module/settings/form/admin.users.form.json +2 -2
  34. package/module/settings/form/context.account_grants.form.json +24 -0
  35. package/module/settings/form/context.account_users.form.json +12 -0
  36. package/module/settings/menu.json +24 -0
  37. package/module/settings/select/core.accounts.sql +1 -0
  38. package/module/settings/select/core.roles.sql +1 -1
  39. package/module/settings/select/core.rules.sql +1 -0
  40. package/module/settings/select/core.user_uid.sql +0 -1
  41. package/module/settings/table/admin.accounts.table.json +42 -0
  42. package/module/settings/table/admin.roles.table.json +1 -1
  43. package/module/settings/table/admin.routes.table.json +9 -4
  44. package/module/settings/table/admin.rules.table.json +77 -0
  45. package/module/settings/table/admin.users.table.json +17 -6
  46. package/module/settings/table/context.account_grants.table.json +68 -0
  47. package/module/settings/table/context.account_users.table.json +38 -0
  48. package/package.json +3 -2
  49. package/server/helpers/core/select.js +4 -6
  50. package/server/helpers/list/tableList.js +9 -6
  51. package/server/routes/access/controllers/access.group.js +1 -1
  52. package/server/routes/access/controllers/access.group.post.js +4 -4
  53. package/server/routes/data/controllers/cardData.js +11 -0
  54. package/server/routes/data/controllers/tableData.js +13 -4
  55. package/server/routes/menu/controllers/getMenu.js +12 -25
  56. package/dist/IconChevronDown-irxwDmQp.js +0 -26
  57. package/dist/add-page-UtwEANeW.js +0 -105
  58. package/dist/admin-interface-PJfd31TQ.js +0 -1600
  59. package/dist/admin-view-BuVQ8ziq.js +0 -383
  60. package/dist/assets/favicon.svg +0 -1
  61. package/dist/assets/logo.svg +0 -42
  62. package/dist/edit-page-Bd6VW9hb.js +0 -120
  63. package/module/settings/select/core.roles.json +0 -3
@@ -0,0 +1,640 @@
1
+ import { _ as v, I as F, u as B, V as P, a as O } from "./import-file-DgJqxKyF.js";
2
+ import { openBlock as s, createElementBlock as r, createElementVNode as t, createStaticVNode as R, resolveComponent as b, normalizeClass as E, createTextVNode as M, toDisplayString as y, createVNode as u, Transition as T, withCtx as $, withDirectives as q, Fragment as N, renderList as S, vShow as G, ref as D, createCommentVNode as V, watch as J, onBeforeUnmount as K, createBlock as W, withModifiers as X } from "vue";
3
+ const Y = {}, ee = {
4
+ xmlns: "http://www.w3.org/2000/svg",
5
+ viewBox: "0 0 24 24",
6
+ fill: "none",
7
+ stroke: "currentColor",
8
+ "stroke-width": "2",
9
+ "stroke-linecap": "round",
10
+ "stroke-linejoin": "round",
11
+ class: "icon icon-tabler icons-tabler-outline icon-tabler-logout"
12
+ };
13
+ function te(o, e, n, a, l, i) {
14
+ return s(), r("svg", ee, e[0] || (e[0] = [
15
+ t("path", {
16
+ stroke: "none",
17
+ d: "M0 0h24v24H0z",
18
+ fill: "none"
19
+ }, null, -1),
20
+ t("path", { d: "M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2" }, null, -1),
21
+ t("path", { d: "M9 12h12l-3 -3" }, null, -1),
22
+ t("path", { d: "M18 15l3 -3" }, null, -1)
23
+ ]));
24
+ }
25
+ const oe = /* @__PURE__ */ v(Y, [["render", te]]), ne = {}, se = {
26
+ viewBox: "0 0 1823 249",
27
+ fill: "none",
28
+ xmlns: "http://www.w3.org/2000/svg"
29
+ };
30
+ function re(o, e, n, a, l, i) {
31
+ return s(), r("svg", se, e[0] || (e[0] = [
32
+ R('<path d="M218.88 96.05C223.55 99.19 228.69 101.56 234.09 103.07V145.42C212.05 151.54 195.83 171.79 195.83 195.75C195.83 200.22 196.41 204.65 197.53 208.94L160.92 230.08C156.82 226.06 152.08 222.73 146.91 220.24V171.62C164.83 163.13 176.59 145.06 176.59 124.48C176.59 123.17 176.54 121.86 176.44 120.56L218.88 96.05ZM220.32 79.09L160.97 113.36C162.04 116.88 162.61 120.61 162.61 124.48C162.61 142.66 149.93 157.87 132.93 161.76V230.05C143.4 232.46 152.23 239.16 157.46 248.21L215 214.99C211.7 209.34 209.81 202.77 209.81 195.75C209.81 174.62 226.94 157.49 248.07 157.49V91.02C237.14 91.02 227.29 86.43 220.32 79.09Z" fill="#CE3936"></path><path d="M161.39 19.13L197.44 39.94C196.39 44.11 195.84 48.42 195.84 52.75C195.84 54.21 195.9 55.65 196.02 57.1L153.9 81.42C145.27 75.5 134.95 72.24 124.36 72.24C113.83 72.24 103.57 75.47 94.96 81.32L52.71 56.93C52.82 55.55 52.88 54.16 52.88 52.76C52.88 48.43 52.34 44.12 51.28 39.95L87.3 19.16C96.98 28.89 110.26 34.58 124.34 34.58C138.42 34.57 151.7 28.87 161.39 19.13ZM157.77 0.919983C151.24 12.66 138.71 20.6 124.33 20.6C109.95 20.6 97.44 12.67 90.9 0.939983L33.9 33.85C37.08 39.43 38.91 45.88 38.91 52.76C38.91 56.71 38.31 60.52 37.2 64.11L96.46 98.32C103.44 90.87 113.36 86.22 124.37 86.22C135.44 86.22 145.41 90.93 152.39 98.44L211.59 64.27C210.45 60.64 209.83 56.78 209.83 52.77C209.83 45.89 211.65 39.44 214.84 33.86L157.77 0.919983Z" fill="#CE3936"></path><path d="M29.97 95.95L72.28 120.38C72.17 121.74 72.12 123.1 72.12 124.47C72.12 145.02 83.86 163.08 101.74 171.58V220.23C96.58 222.71 91.84 226.04 87.75 230.05L51.17 208.93C52.29 204.64 52.87 200.21 52.87 195.74C52.87 171.78 36.65 151.53 14.61 145.41V103.06C20.07 101.55 25.27 99.14 29.97 95.95ZM28.5 78.97C21.52 86.38 11.63 91.02 0.640015 91.02V157.49C21.77 157.49 38.9 174.62 38.9 195.75C38.9 202.77 37 209.33 33.71 214.99L91.2 248.18C96.43 239.14 105.25 232.45 115.71 230.04V161.73C98.74 157.81 86.09 142.62 86.09 124.46C86.09 120.54 86.68 116.75 87.78 113.18L28.5 78.97Z" fill="#CE3936"></path><path d="M498.39 177.5V144.88C498.39 128.55 485.11 115.27 468.78 115.27H343.22C342.69 115.27 342.18 115.32 341.67 115.4H337.19C332.35 115.4 328.42 111.46 328.42 106.63V74C328.42 69.16 332.36 65.23 337.19 65.23H486.33C492.08 65.23 496.75 60.57 496.75 54.81C496.75 49.06 492.08 44.39 486.33 44.39H337.19C320.86 44.39 307.58 57.67 307.58 74V106.62C307.58 122.95 320.86 136.23 337.19 136.23H462.75C463.28 136.23 463.79 136.18 464.3 136.1H468.78C473.62 136.1 477.55 140.04 477.55 144.87V177.49C477.55 182.33 473.61 186.26 468.78 186.26H319.64C313.89 186.26 309.22 190.92 309.22 196.68C309.22 202.43 313.89 207.1 319.64 207.1H468.78C485.11 207.11 498.39 193.83 498.39 177.5Z" fill="#CE3935"></path><path d="M710.7 177.32V75.24C710.7 58.91 697.42 45.63 681.09 45.63H550.05C533.72 45.63 520.44 58.91 520.44 75.24V177.32C520.44 193.65 533.72 206.93 550.05 206.93H681.1C697.42 206.93 710.7 193.65 710.7 177.32ZM541.27 75.24C541.27 70.4 545.21 66.47 550.04 66.47H681.09C685.93 66.47 689.86 70.41 689.86 75.24V177.32C689.86 182.16 685.92 186.09 681.09 186.09H550.05C545.21 186.09 541.28 182.15 541.28 177.32V75.24H541.27Z" fill="#CE3935"></path><path d="M1823 177.32V75.24C1823 58.91 1809.72 45.63 1793.39 45.63H1662.34C1646.01 45.63 1632.73 58.91 1632.73 75.24V177.32C1632.73 193.65 1646.01 206.93 1662.34 206.93H1793.39C1809.72 206.93 1823 193.65 1823 177.32ZM1653.57 75.24C1653.57 70.4 1657.51 66.47 1662.34 66.47H1793.39C1798.23 66.47 1802.16 70.41 1802.16 75.24V177.32C1802.16 182.16 1798.22 186.09 1793.39 186.09H1662.34C1657.5 186.09 1653.57 182.15 1653.57 177.32V75.24Z" fill="#CE3935"></path><path d="M756.76 196.51V152H849.42C855.17 152 859.84 147.34 859.84 141.58C859.84 135.83 855.17 131.16 849.42 131.16H756.76V75.23C756.76 70.39 760.7 66.46 765.53 66.46H893.29C899.04 66.46 903.71 61.8 903.71 56.04C903.71 50.29 899.04 45.62 893.29 45.62H765.53C749.2 45.62 735.92 58.9 735.92 75.23V196.5C735.92 202.25 740.59 206.92 746.34 206.92C752.09 206.93 756.76 202.27 756.76 196.51Z" fill="#CE3935"></path><path d="M933.86 66.47H1006.51V194.32C1006.51 200.07 1011.18 204.74 1016.93 204.74C1022.68 204.74 1027.35 200.07 1027.35 194.32V66.47H1100C1105.75 66.47 1110.42 61.81 1110.42 56.05C1110.42 50.3 1105.76 45.63 1100 45.63H933.86C928.11 45.63 923.44 50.29 923.44 56.05C923.45 61.81 928.11 66.47 933.86 66.47Z" fill="#CE3935"></path><path d="M1218.44 204.19C1224.19 204.19 1228.86 199.53 1228.86 193.77V152H1368.13C1384.46 152 1397.74 138.72 1397.74 122.39V75.24C1397.74 58.91 1384.46 45.63 1368.13 45.63H1237.63C1221.3 45.63 1208.02 58.91 1208.02 75.24V193.77C1208.02 199.53 1212.68 204.19 1218.44 204.19ZM1237.63 66.47H1368.13C1372.97 66.47 1376.9 70.41 1376.9 75.24V122.39C1376.9 127.23 1372.96 131.16 1368.13 131.16H1228.86V75.23C1228.86 70.41 1232.79 66.47 1237.63 66.47Z" fill="#CE3935"></path><path d="M1430.64 204.19C1436.39 204.19 1441.06 199.53 1441.06 193.77V152H1523.95C1524.57 153.18 1525.42 154.26 1526.51 155.17L1581.89 201.23C1583.83 202.85 1586.2 203.64 1588.55 203.64C1591.54 203.64 1594.5 202.36 1596.57 199.88C1600.25 195.46 1599.64 188.89 1595.22 185.21L1555.29 152H1580.33C1596.66 152 1609.94 138.72 1609.94 122.39V75.24C1609.94 58.91 1596.66 45.63 1580.33 45.63H1449.83C1433.5 45.63 1420.22 58.91 1420.22 75.24V193.77C1420.22 199.53 1424.88 204.19 1430.64 204.19ZM1449.83 66.47H1580.33C1585.17 66.47 1589.1 70.41 1589.1 75.24V122.39C1589.1 127.23 1585.17 131.16 1580.33 131.16H1441.06V75.23C1441.05 70.41 1444.99 66.47 1449.83 66.47Z" fill="#CE3935"></path>', 10)
33
+ ]));
34
+ }
35
+ const le = /* @__PURE__ */ v(ne, [["render", re]]), ae = {}, ie = {
36
+ xmlns: "http://www.w3.org/2000/svg",
37
+ viewBox: "0 0 24 24",
38
+ fill: "none",
39
+ stroke: "currentColor",
40
+ "stroke-width": "2",
41
+ "stroke-linecap": "round",
42
+ "stroke-linejoin": "round",
43
+ class: "icon icon-tabler icons-tabler-outline icon-tabler-chevron-down"
44
+ };
45
+ function ce(o, e, n, a, l, i) {
46
+ return s(), r("svg", ie, e[0] || (e[0] = [
47
+ t("path", {
48
+ stroke: "none",
49
+ d: "M0 0h24v24H0z",
50
+ fill: "none"
51
+ }, null, -1),
52
+ t("path", { d: "M6 9l6 6l6 -6" }, null, -1)
53
+ ]));
54
+ }
55
+ const ue = /* @__PURE__ */ v(ae, [["render", ce]]), de = {
56
+ components: { IconChevronDown: ue },
57
+ props: { route: Object },
58
+ mounted() {
59
+ var o, e, n;
60
+ (o = this.route) != null && o.menu && (n = (e = this.route) == null ? void 0 : e.menu) != null && n.some(
61
+ (a) => {
62
+ var l, i;
63
+ return (a == null ? void 0 : a.path) === this.$route.path.replace("/", "") || ((i = (l = this.$route) == null ? void 0 : l.params) == null ? void 0 : i.table) === (a == null ? void 0 : a.table) && (a == null ? void 0 : a.table);
64
+ }
65
+ ) && (this.isOpen = !0);
66
+ },
67
+ data() {
68
+ return {
69
+ isOpen: !1
70
+ };
71
+ }
72
+ }, pe = {
73
+ key: 0,
74
+ class: ""
75
+ }, he = { class: "ml-[30px] py-[6px] before:block before:absolute relative w-[196px] flex flex-col gap-[6px] inline-block before:w-[2px] before:h-[100%] before:bg-gray-100 before:left-[-14px] cursor-pointer" }, fe = { key: 1 };
76
+ function ge(o, e, n, a, l, i) {
77
+ var c, p, g, h, w, C, m, k, H, L, I, z, j;
78
+ const _ = b("IconChevronDown"), x = b("router-link");
79
+ return (c = n.route) != null && c.menu ? (s(), r("div", pe, [
80
+ t("button", {
81
+ onClick: e[0] || (e[0] = (f) => l.isOpen = !l.isOpen),
82
+ class: E(["flex cursor-pointer gap-x-3 py-2 px-3 text-sm text-gray-800 justify-start w-full border-none focus:outline-none text-gray-800 rounded-lg items-center hover:bg-gray-100 duration-300", [
83
+ ((g = (p = n.route) == null ? void 0 : p.menu) == null ? void 0 : g.some(
84
+ (f) => {
85
+ var d, Z;
86
+ return (f == null ? void 0 : f.path) === o.$route.path.replace("/", "") || (f == null ? void 0 : f.table) === ((Z = (d = o.$route) == null ? void 0 : d.params) == null ? void 0 : Z.table) && (f == null ? void 0 : f.table);
87
+ }
88
+ )) && "bg-gray-100"
89
+ ]])
90
+ }, [
91
+ M(y((h = n.route) == null ? void 0 : h.ua) + " ", 1),
92
+ u(_, {
93
+ class: E([[l.isOpen && "-rotate-180"], "ml-auto duration-300"]),
94
+ width: "14",
95
+ height: "14"
96
+ }, null, 8, ["class"])
97
+ ], 2),
98
+ u(T, { name: "fade" }, {
99
+ default: $(() => {
100
+ var f;
101
+ return [
102
+ q(t("ul", he, [
103
+ (s(!0), r(N, null, S((f = n.route) == null ? void 0 : f.menu, (d, Z) => {
104
+ var U, A;
105
+ return s(), r("li", {
106
+ key: Z,
107
+ class: "w-full"
108
+ }, [
109
+ u(x, {
110
+ to: "/" + (d == null ? void 0 : d.path),
111
+ class: E([[
112
+ ((d == null ? void 0 : d.path) === o.$route.path.replace("/", "") || ((A = (U = o.$route) == null ? void 0 : U.params) == null ? void 0 : A.table) === (d == null ? void 0 : d.table) && (d == null ? void 0 : d.table)) && "bg-gray-100"
113
+ ], "flex gap-x-4 py-2 px-3 text-sm text-gray-800 rounded-lg hover:bg-gray-100 focus:outline-none focus:bg-gray-100"])
114
+ }, {
115
+ default: $(() => [
116
+ M(y(d == null ? void 0 : d.ua), 1)
117
+ ]),
118
+ _: 2
119
+ }, 1032, ["to", "class"])
120
+ ]);
121
+ }), 128))
122
+ ], 512), [
123
+ [G, l.isOpen]
124
+ ])
125
+ ];
126
+ }),
127
+ _: 1
128
+ })
129
+ ])) : (s(), r("div", fe, [
130
+ u(x, {
131
+ to: ((C = (w = n.route) == null ? void 0 : w.path) == null ? void 0 : C[0]) === "/" ? (m = n.route) == null ? void 0 : m.path : "/" + ((k = n.route) == null ? void 0 : k.path),
132
+ class: E([[
133
+ (((H = n.route) == null ? void 0 : H.path.replace("/", "")) === o.$route.path.replace("/", "") || ((I = (L = o.$route) == null ? void 0 : L.params) == null ? void 0 : I.table) === ((z = n.route) == null ? void 0 : z.table) && ((j = n.route) == null ? void 0 : j.table)) && "bg-gray-100"
134
+ ], "flex gap-x-3 py-2 w-full font-[400] px-3 text-sm text-gray-800 rounded-lg items-center hover:bg-gray-100 duration-300 hover:text-gray-800"])
135
+ }, {
136
+ default: $(() => {
137
+ var f;
138
+ return [
139
+ M(y((f = n.route) == null ? void 0 : f.ua), 1)
140
+ ];
141
+ }),
142
+ _: 1
143
+ }, 8, ["to", "class"])
144
+ ]));
145
+ }
146
+ const xe = /* @__PURE__ */ v(de, [["render", ge]]), be = {
147
+ components: { IconLogout: oe, NavbarItem: xe, IconLogo: le, IconSearch: F },
148
+ data() {
149
+ return {
150
+ activeIndex: null,
151
+ data: null,
152
+ searchValue: ""
153
+ };
154
+ },
155
+ computed: {
156
+ data() {
157
+ var o, e;
158
+ return (o = this.searchValue) != null && o.trim() ? (e = this.flattenMenu(B.value)) == null ? void 0 : e.filter(
159
+ (n) => {
160
+ var a, l, i;
161
+ return (i = (a = n == null ? void 0 : n.ua) == null ? void 0 : a.toLowerCase()) == null ? void 0 : i.includes((l = this.searchValue) == null ? void 0 : l.toLowerCase());
162
+ }
163
+ ) : B.value;
164
+ }
165
+ },
166
+ methods: {
167
+ flattenMenu(o) {
168
+ const e = [];
169
+ return o.forEach((n) => {
170
+ n.menu ? e.push(...this.flattenMenu(n.menu)) : e.push(n);
171
+ }), e;
172
+ }
173
+ }
174
+ }, _e = { class: "flex flex-col h-[100vh] border-r w-[260px] shrink-0" }, ve = { class: "relative" }, we = { class: "p-[16px] overflow-y-auto [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500" }, Ce = { class: "pb-3 w-full flex flex-col flex-wrap" }, me = {
175
+ key: 0,
176
+ class: "flex flex-col gap-[6px]"
177
+ }, ke = {
178
+ key: 1,
179
+ class: "text-gray-800 text-lg mt-[20px]"
180
+ };
181
+ function ye(o, e, n, a, l, i) {
182
+ var g;
183
+ const _ = b("IconLogo"), x = b("IconSearch"), c = b("VsText"), p = b("NavbarItem");
184
+ return s(), r("div", _e, [
185
+ u(_, {
186
+ height: "40",
187
+ width: "200",
188
+ class: "my-[20px] ml-[20px]"
189
+ }),
190
+ t("div", ve, [
191
+ u(x, {
192
+ height: "16",
193
+ width: "16",
194
+ class: "absolute top-[12px] left-[30px] text-gray-500 z-[1]"
195
+ }),
196
+ u(c, {
197
+ type: "text",
198
+ modelValue: l.searchValue,
199
+ "onUpdate:modelValue": e[0] || (e[0] = (h) => l.searchValue = h),
200
+ clearable: !0,
201
+ placeholder: "Пошук по меню",
202
+ class: "[&>input]:h-[40px] [&>input]:block [&>input]:rounded-none [&>input]:border-x-0 [&>input]:pl-[60px] [&>input:focus]:outline-none [&>input:focus]:focus:ring-0 [&>input:focus]:border-y-gray-200 [&>input:focus]:border-y-1 [&>input:focus]:border-x-0"
203
+ }, null, 8, ["modelValue"])
204
+ ]),
205
+ t("div", we, [
206
+ t("nav", Ce, [
207
+ (g = i.data) != null && g.length ? (s(), r("ul", me, [
208
+ (s(!0), r(N, null, S(i.data, (h, w) => (s(), r("li", {
209
+ key: w,
210
+ class: "flex flex-col gap-[6px]"
211
+ }, [
212
+ u(p, { route: h }, null, 8, ["route"])
213
+ ]))), 128))
214
+ ])) : (s(), r("div", ke, "Не знайдено"))
215
+ ])
216
+ ])
217
+ ]);
218
+ }
219
+ const $e = /* @__PURE__ */ v(be, [["render", ye]]), Ve = {}, Me = {
220
+ class: "shrink-0",
221
+ xmlns: "http://www.w3.org/2000/svg",
222
+ width: "24",
223
+ height: "24",
224
+ viewBox: "0 0 24 24",
225
+ fill: "none",
226
+ stroke: "currentColor",
227
+ "stroke-width": "2",
228
+ "stroke-linecap": "round",
229
+ "stroke-linejoin": "round"
230
+ };
231
+ function He(o, e) {
232
+ return s(), r("svg", Me, e[0] || (e[0] = [
233
+ t("path", { d: "M18 6 7 17l-5-5" }, null, -1),
234
+ t("path", { d: "m22 10-7.5 7.5L13 16" }, null, -1)
235
+ ]));
236
+ }
237
+ const Le = /* @__PURE__ */ v(Ve, [["render", He]]), Ie = {}, ze = {
238
+ xmlns: "http://www.w3.org/2000/svg",
239
+ width: "24",
240
+ height: "24",
241
+ viewBox: "0 0 24 24",
242
+ fill: "currentColor",
243
+ class: "icon icon-tabler icons-tabler-filled icon-tabler-user"
244
+ };
245
+ function je(o, e, n, a, l, i) {
246
+ return s(), r("svg", ze, e[0] || (e[0] = [
247
+ t("path", {
248
+ stroke: "none",
249
+ d: "M0 0h24v24H0z",
250
+ fill: "none"
251
+ }, null, -1),
252
+ t("path", { d: "M12 2a5 5 0 1 1 -5 5l.005 -.217a5 5 0 0 1 4.995 -4.783z" }, null, -1),
253
+ t("path", { d: "M14 14a5 5 0 0 1 5 5v1a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-1a5 5 0 0 1 5 -5h4z" }, null, -1)
254
+ ]));
255
+ }
256
+ const Q = /* @__PURE__ */ v(Ie, [["render", je]]), Ee = {}, De = {
257
+ class: "shrink-0 size-4",
258
+ xmlns: "http://www.w3.org/2000/svg",
259
+ width: "24",
260
+ height: "24",
261
+ viewBox: "0 0 24 24",
262
+ fill: "none",
263
+ stroke: "currentColor",
264
+ "stroke-width": "2",
265
+ "stroke-linecap": "round",
266
+ "stroke-linejoin": "round"
267
+ };
268
+ function Oe(o, e) {
269
+ return s(), r("svg", De, e[0] || (e[0] = [
270
+ t("polyline", { points: "9 11 12 14 22 4" }, null, -1),
271
+ t("path", { d: "M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11" }, null, -1)
272
+ ]));
273
+ }
274
+ const Ze = /* @__PURE__ */ v(Ee, [["render", Oe]]), Ne = { class: "relative shrink-0" }, Be = ["src"], Se = {
275
+ key: 1,
276
+ class: "h-[38px] w-[38px] bg-gray-200 rounded-full flex items-center justify-center"
277
+ }, Ue = {
278
+ key: 2,
279
+ class: "absolute top-4 -start-3 size-2 bg-blue-600 rounded-full dark:bg-blue-500"
280
+ }, Ae = { class: "grow" }, Te = { class: "text-xs text-gray-500 dark:text-neutral-500" }, Qe = { class: "block text-sm font-medium text-gray-800 dark:text-neutral-300" }, Fe = { class: "text-sm text-gray-500 dark:text-neutral-500" }, Pe = {
281
+ key: 0,
282
+ class: "sm:group-hover:opacity-100 sm:opacity-0 sm:absolute sm:top-5 sm:end-5 inline-block p-0.5 bg-white border border-gray-200 rounded-lg shadow-sm transition ease-out"
283
+ }, Re = {
284
+ __name: "admin-notification-item",
285
+ props: { item: Object },
286
+ emits: ["update-notification"],
287
+ setup(o, { emit: e }) {
288
+ const n = e, a = D(!1), l = () => a.value = !0, i = () => a.value = !1, _ = async () => {
289
+ var x;
290
+ try {
291
+ await O.get(`/api/notification-read/${(x = o.item) == null ? void 0 : x.id}`), await n("update-notification");
292
+ } catch {
293
+ }
294
+ };
295
+ return (x, c) => {
296
+ var g, h, w, C, m, k;
297
+ const p = b("VsPopover");
298
+ return s(), r("li", {
299
+ class: E(["relative group w-full flex gap-x-5 text-start p-5 border-b", [(g = o.item) != null && g.read ? "bg-gray-100" : "bg-white"]]),
300
+ onMouseenter: l,
301
+ onMouseleave: i
302
+ }, [
303
+ t("div", Ne, [
304
+ (h = o.item) != null && h.avatar ? (s(), r("img", {
305
+ key: 0,
306
+ class: "shrink-0 size-[38px] rounded-full",
307
+ src: (w = o.item) == null ? void 0 : w.avatar,
308
+ alt: "Avatar"
309
+ }, null, 8, Be)) : (s(), r("div", Se, [
310
+ u(Q)
311
+ ])),
312
+ (C = o.item) != null && C.read ? (s(), r("span", Ue)) : V("", !0)
313
+ ]),
314
+ t("div", Ae, [
315
+ t("p", Te, [
316
+ u(P, {
317
+ name: "cdate",
318
+ data: o.item
319
+ }, null, 8, ["data"])
320
+ ]),
321
+ t("span", Qe, y((m = o.item) == null ? void 0 : m.author), 1),
322
+ t("p", Fe, y((k = o.item) == null ? void 0 : k.subject), 1)
323
+ ]),
324
+ a.value ? (s(), r("div", Pe, [
325
+ u(p, {
326
+ trigger: "hover",
327
+ placement: "left"
328
+ }, {
329
+ reference: $(() => [
330
+ t("button", {
331
+ onClick: _,
332
+ type: "button",
333
+ class: "hs-tooltip-toggle hs-tooltip relative inline-block size-7 flex shrink-0 justify-center items-center text-gray-500 hover:bg-gray-100 hover:text-gray-800 rounded"
334
+ }, [
335
+ u(Ze)
336
+ ])
337
+ ]),
338
+ default: $(() => [
339
+ c[0] || (c[0] = M(" Прочитати "))
340
+ ]),
341
+ _: 1
342
+ })
343
+ ])) : V("", !0)
344
+ ], 34);
345
+ };
346
+ }
347
+ }, qe = {}, Ge = {
348
+ class: "flex-shrink-0 size-4",
349
+ xmlns: "http://www.w3.org/2000/svg",
350
+ viewBox: "0 0 24 24",
351
+ fill: "none",
352
+ stroke: "currentColor",
353
+ "stroke-width": "2",
354
+ "stroke-linecap": "round",
355
+ "stroke-linejoin": "round"
356
+ };
357
+ function Je(o, e, n, a, l, i) {
358
+ return s(), r("svg", Ge, e[0] || (e[0] = [
359
+ t("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }, null, -1),
360
+ t("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" }, null, -1)
361
+ ]));
362
+ }
363
+ const Ke = /* @__PURE__ */ v(qe, [["render", Je]]), We = {}, Xe = {
364
+ class: "shrink-0 size-4",
365
+ xmlns: "http://www.w3.org/2000/svg",
366
+ width: "24",
367
+ height: "24",
368
+ viewBox: "0 0 24 24",
369
+ fill: "none",
370
+ stroke: "currentColor",
371
+ "stroke-width": "2",
372
+ "stroke-linecap": "round",
373
+ "stroke-linejoin": "round"
374
+ };
375
+ function Ye(o, e) {
376
+ return s(), r("svg", Xe, e[0] || (e[0] = [
377
+ t("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }, null, -1),
378
+ t("circle", {
379
+ cx: "12",
380
+ cy: "12",
381
+ r: "3"
382
+ }, null, -1)
383
+ ]));
384
+ }
385
+ const et = /* @__PURE__ */ v(We, [["render", Ye]]), tt = {
386
+ key: 0,
387
+ class: "flex absolute top-0 end-0 -mt-1.5 -me-1.5"
388
+ }, ot = { class: "relative min-w-[18px] min-h-[18px] inline-flex justify-center items-center text-[10px] bg-red-500 text-white rounded-full px-1" }, nt = {
389
+ key: 0,
390
+ class: "w-96 h-[100px] z-[11] absolute top-[40px] right-0"
391
+ }, st = { class: "h-[50px] px-[20px] border-b w-full flex items-center justify-between rounded-t-lg bg-white shadow-[0_10px_40px_10px_rgba(0,0,0,0.08)]" }, rt = { class: "h-[30px] w-[30px] inline-flex justify-center items-center gap-x-2 rounded-full border border-transparent text-gray-500 hover:bg-gray-100 focus:outline-none focus:bg-gray-100" }, lt = { class: "max-h-[400px] bg-white overflow-auto [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300" }, at = { key: 0 }, it = {
392
+ __name: "admin-notification",
393
+ setup(o) {
394
+ const e = D(0), n = D([]), a = D(!1), l = D(null), i = (c) => {
395
+ l.value && !l.value.contains(c.target) && (a.value = !1);
396
+ };
397
+ J(a, (c) => {
398
+ c ? window.addEventListener("click", i) : window.removeEventListener("click", i);
399
+ }), K(() => {
400
+ window.removeEventListener("click", i);
401
+ });
402
+ const _ = async () => {
403
+ try {
404
+ const { data: c } = await O.get("/api/notification");
405
+ n.value = (c == null ? void 0 : c.rows) || [];
406
+ } catch {
407
+ }
408
+ };
409
+ _();
410
+ const x = async () => {
411
+ try {
412
+ await O.get("/api/notification-read"), await _();
413
+ } catch {
414
+ }
415
+ };
416
+ return (c, p) => (s(), r("div", {
417
+ ref_key: "notificationRef",
418
+ ref: l,
419
+ class: "hs-tooltip [--placement:bottom] inline-block show relative"
420
+ }, [
421
+ t("button", {
422
+ onClick: p[0] || (p[0] = (g) => a.value = !a.value),
423
+ class: "hs-tooltip-toggle relative size-[38px] inline-flex justify-center items-center gap-x-2 rounded-full border border-transparent text-gray-500 hover:bg-gray-100 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-100"
424
+ }, [
425
+ u(Ke, {
426
+ height: "24",
427
+ width: "24"
428
+ }),
429
+ e.value ? (s(), r("span", tt, [
430
+ p[1] || (p[1] = t("span", { class: "absolute inline-flex bg-red-400 rounded-full opacity-75 animate-ping size-full dark:bg-red-600" }, null, -1)),
431
+ t("span", ot, y(e.value), 1)
432
+ ])) : V("", !0)
433
+ ]),
434
+ u(T, null, {
435
+ default: $(() => {
436
+ var g;
437
+ return [
438
+ a.value ? (s(), r("div", nt, [
439
+ t("div", st, [
440
+ p[2] || (p[2] = t("nav", { class: "flex" }, [
441
+ t("button", {
442
+ type: "button",
443
+ class: "px-2 py-1.5 relative inline-flex justify-center items-center gap-x-2 text-nowrap hover:bg-gray-100 text-gray-500 hover:text-gray-800 text-sm rounded-lg focus:outline-none focus:bg-gray-100 after:absolute after:bottom-[-9px] after:left-2.5 after:right-2.5 after:z-10 after:h-0.5 after:bg-gray-800"
444
+ }, " Всі ")
445
+ ], -1)),
446
+ t("button", rt, [
447
+ u(et)
448
+ ])
449
+ ]),
450
+ t("div", lt, [
451
+ (g = n.value) != null && g.length ? (s(), r("ul", at, [
452
+ (s(!0), r(N, null, S(n.value, (h) => (s(), W(Re, {
453
+ key: h == null ? void 0 : h.id,
454
+ item: h,
455
+ onUpdateNotification: _
456
+ }, null, 8, ["item"]))), 128))
457
+ ])) : V("", !0)
458
+ ]),
459
+ t("button", {
460
+ onClick: x,
461
+ class: "h-[50px] border-t w-full rounded-b-lg bg-white shadow p-4 flex justify-center items-center gap-x-2 text-sm text-gray-500 font-medium sm:rounded-b-lg hover:text-blue-600 focus:outline-none"
462
+ }, [
463
+ u(Le, {
464
+ height: "16",
465
+ width: "16"
466
+ }),
467
+ p[3] || (p[3] = M(" Прочитати усі "))
468
+ ])
469
+ ])) : V("", !0)
470
+ ];
471
+ }),
472
+ _: 1
473
+ })
474
+ ], 512));
475
+ }
476
+ }, ct = {}, ut = {
477
+ class: "flex-shrink-0 size-4",
478
+ xmlns: "http://www.w3.org/2000/svg",
479
+ viewBox: "0 0 24 24",
480
+ fill: "none",
481
+ stroke: "currentColor",
482
+ "stroke-width": "2",
483
+ "stroke-linecap": "round",
484
+ "stroke-linejoin": "round"
485
+ };
486
+ function dt(o, e, n, a, l, i) {
487
+ return s(), r("svg", ut, e[0] || (e[0] = [
488
+ t("circle", {
489
+ cx: "12",
490
+ cy: "12",
491
+ r: "10"
492
+ }, null, -1),
493
+ t("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }, null, -1),
494
+ t("path", { d: "M12 17h.01" }, null, -1)
495
+ ]));
496
+ }
497
+ const pt = /* @__PURE__ */ v(ct, [["render", dt]]), ht = {
498
+ components: { IconQuestion: pt, IconUser: Q, AdminNotification: it },
499
+ mounted() {
500
+ this.getUserData();
501
+ },
502
+ data() {
503
+ return {
504
+ userData: null,
505
+ isVisible: !1
506
+ };
507
+ },
508
+ watch: {
509
+ isVisible(o) {
510
+ o ? setTimeout(
511
+ () => window.addEventListener("click", this.closeOnOutsideClick),
512
+ 0
513
+ ) : window.removeEventListener("click", this.closeOnOutsideClick);
514
+ }
515
+ },
516
+ methods: {
517
+ async getUserData() {
518
+ try {
519
+ const { data: o } = await O.get("/user");
520
+ this.userData = o;
521
+ } catch {
522
+ }
523
+ },
524
+ async logout() {
525
+ try {
526
+ await O.get("/logout"), await window.history.pushState({}, "", "/login"), await location.reload(), localStorage.removeItem("user");
527
+ } catch {
528
+ }
529
+ },
530
+ closeOnOutsideClick() {
531
+ this.isVisible = !1;
532
+ }
533
+ },
534
+ beforeUnmount() {
535
+ window.removeEventListener("click", this.closeOnOutsideClick);
536
+ }
537
+ }, ft = {
538
+ class: "h-[60px] border-b flex justify-end px-[20px]",
539
+ style: { width: "calc(100vw - 260px)" }
540
+ }, gt = { class: "flex items-center gap-[6px]" }, xt = {
541
+ href: "docs-softpro.com",
542
+ class: "size-[38px] inline-flex justify-center items-center gap-x-2 rounded-full border border-transparent text-gray-500 hover:bg-gray-100 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-100 dark:text-neutral-400 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700"
543
+ }, bt = { class: "relative" }, _t = ["src"], vt = {
544
+ key: 1,
545
+ class: "size-[40px] rounded-full bg-gray-200 flex items-center justify-center"
546
+ }, wt = { class: "p-[10px] gap-[6px] items-center border-b flex justify-between" }, Ct = ["src"], mt = {
547
+ key: 1,
548
+ class: "size-[40px] rounded-full bg-gray-200 flex items-center justify-center"
549
+ }, kt = { class: "text-[14px] mr-[10px] text-gray-500" }, yt = { class: "flex flex-col p-[4px]" };
550
+ function $t(o, e, n, a, l, i) {
551
+ var g, h, w, C, m, k, H, L, I, z;
552
+ const _ = b("IconQuestion"), x = b("AdminNotification"), c = b("IconUser"), p = b("router-link");
553
+ return s(), r("div", ft, [
554
+ t("div", gt, [
555
+ t("a", xt, [
556
+ u(_, {
557
+ height: "24",
558
+ width: "24"
559
+ })
560
+ ]),
561
+ u(x),
562
+ e[4] || (e[4] = t("div", { class: "h-[30px] w-[1px] bg-gray-200 ml-[10px] mr-[10px]" }, null, -1)),
563
+ t("div", bt, [
564
+ t("div", {
565
+ onClick: e[0] || (e[0] = (j) => l.isVisible = !0),
566
+ class: "cursor-pointer"
567
+ }, [
568
+ (h = (g = l.userData) == null ? void 0 : g.user) != null && h.avatar ? (s(), r("img", {
569
+ key: 0,
570
+ class: "flex-shrink-0 size-[30px] rounded-full",
571
+ src: (C = (w = l.userData) == null ? void 0 : w.user) == null ? void 0 : C.avatar,
572
+ alt: "Image Description"
573
+ }, null, 8, _t)) : (s(), r("div", vt, [
574
+ u(c)
575
+ ]))
576
+ ]),
577
+ l.isVisible ? (s(), r("div", {
578
+ key: 0,
579
+ onClick: e[2] || (e[2] = X(() => {
580
+ }, ["stop"])),
581
+ class: "fixed bg-white w-[180px] top-[55px] right-[20px] shadow-xl rounded-xl z-[1]"
582
+ }, [
583
+ t("div", wt, [
584
+ (k = (m = l.userData) == null ? void 0 : m.user) != null && k.avatar ? (s(), r("img", {
585
+ key: 0,
586
+ class: "flex-shrink-0 size-[30px] rounded-full",
587
+ src: (L = (H = l.userData) == null ? void 0 : H.user) == null ? void 0 : L.avatar,
588
+ alt: "Image Description"
589
+ }, null, 8, Ct)) : (s(), r("div", mt, [
590
+ u(c)
591
+ ])),
592
+ t("div", null, [
593
+ t("p", kt, y((z = (I = l.userData) == null ? void 0 : I.user) == null ? void 0 : z.username), 1)
594
+ ])
595
+ ]),
596
+ t("div", yt, [
597
+ u(p, {
598
+ to: "profile",
599
+ disabled: !0,
600
+ class: "p-[8px] block rounded-lg w-full mb-[4px] text-start hover:bg-gray-100 !duration-300"
601
+ }, {
602
+ default: $(() => e[3] || (e[3] = [
603
+ M("Профіль")
604
+ ])),
605
+ _: 1
606
+ }),
607
+ t("button", {
608
+ onClick: e[1] || (e[1] = (...j) => i.logout && i.logout(...j)),
609
+ class: "p-[8px] block rounded-lg w-full text-start hover:bg-gray-100 !duration-300"
610
+ }, " Вийти ")
611
+ ])
612
+ ])) : V("", !0)
613
+ ])
614
+ ])
615
+ ]);
616
+ }
617
+ const Vt = /* @__PURE__ */ v(ht, [["render", $t]]), Mt = {
618
+ components: { navbar: $e, AdminHeader: Vt },
619
+ computed: {
620
+ isMenu() {
621
+ return B.value;
622
+ }
623
+ }
624
+ }, Ht = { class: "admin-wrapper" }, Lt = { class: "flex flex-col" };
625
+ function It(o, e, n, a, l, i) {
626
+ const _ = b("navbar"), x = b("admin-header"), c = b("router-view");
627
+ return s(), r("div", Ht, [
628
+ u(_),
629
+ t("div", Lt, [
630
+ i.isMenu ? (s(), r(N, { key: 0 }, [
631
+ u(x),
632
+ u(c)
633
+ ], 64)) : V("", !0)
634
+ ])
635
+ ]);
636
+ }
637
+ const Et = /* @__PURE__ */ v(Mt, [["render", It], ["__scopeId", "data-v-2f422765"]]);
638
+ export {
639
+ Et as default
640
+ };
package/dist/admin.js CHANGED
@@ -1,4 +1,4 @@
1
- import { h as f } from "./import-file-eH-_Imyb.js";
1
+ import { i as f } from "./import-file-DgJqxKyF.js";
2
2
  export {
3
3
  f as default
4
4
  };