admins-components 9.0.50 → 9.0.51

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 (237) hide show
  1. package/dist/admins-components.js +35 -33
  2. package/dist/admins-components100.js +245 -3
  3. package/dist/admins-components100.js.map +1 -1
  4. package/dist/admins-components102.js +6 -52
  5. package/dist/admins-components102.js.map +1 -1
  6. package/dist/admins-components103.js +3 -82
  7. package/dist/admins-components103.js.map +1 -1
  8. package/dist/admins-components104.js +3 -113
  9. package/dist/admins-components104.js.map +1 -1
  10. package/dist/admins-components105.js +49 -44
  11. package/dist/admins-components105.js.map +1 -1
  12. package/dist/admins-components106.js +80 -104
  13. package/dist/admins-components106.js.map +1 -1
  14. package/dist/admins-components107.js +109 -16
  15. package/dist/admins-components107.js.map +1 -1
  16. package/dist/admins-components108.js +46 -6
  17. package/dist/admins-components108.js.map +1 -1
  18. package/dist/admins-components109.js +100 -246
  19. package/dist/admins-components109.js.map +1 -1
  20. package/dist/admins-components110.js +19 -26
  21. package/dist/admins-components110.js.map +1 -1
  22. package/dist/admins-components111.js +6 -27
  23. package/dist/admins-components111.js.map +1 -1
  24. package/dist/admins-components112.js +239 -159
  25. package/dist/admins-components112.js.map +1 -1
  26. package/dist/admins-components113.js +26 -67
  27. package/dist/admins-components113.js.map +1 -1
  28. package/dist/admins-components114.js +25 -64
  29. package/dist/admins-components114.js.map +1 -1
  30. package/dist/admins-components115.js +169 -27
  31. package/dist/admins-components115.js.map +1 -1
  32. package/dist/admins-components116.js +65 -13
  33. package/dist/admins-components116.js.map +1 -1
  34. package/dist/admins-components117.js +64 -24
  35. package/dist/admins-components117.js.map +1 -1
  36. package/dist/admins-components118.js +29 -8
  37. package/dist/admins-components118.js.map +1 -1
  38. package/dist/admins-components119.js +16 -4
  39. package/dist/admins-components119.js.map +1 -1
  40. package/dist/admins-components120.js +27 -3
  41. package/dist/admins-components120.js.map +1 -1
  42. package/dist/admins-components121.js +8 -2
  43. package/dist/admins-components121.js.map +1 -1
  44. package/dist/admins-components122.js +4 -21
  45. package/dist/admins-components122.js.map +1 -1
  46. package/dist/admins-components123.js +3 -14
  47. package/dist/admins-components123.js.map +1 -1
  48. package/dist/admins-components124.js +3 -8
  49. package/dist/admins-components124.js.map +1 -1
  50. package/dist/admins-components125.js +19 -11
  51. package/dist/admins-components125.js.map +1 -1
  52. package/dist/admins-components126.js +14 -26
  53. package/dist/admins-components126.js.map +1 -1
  54. package/dist/admins-components127.js +7 -82
  55. package/dist/admins-components127.js.map +1 -1
  56. package/dist/admins-components128.js +9 -7
  57. package/dist/admins-components128.js.map +1 -1
  58. package/dist/admins-components129.js +25 -4
  59. package/dist/admins-components129.js.map +1 -1
  60. package/dist/admins-components130.js +81 -6
  61. package/dist/admins-components130.js.map +1 -1
  62. package/dist/admins-components131.js +10 -6
  63. package/dist/admins-components131.js.map +1 -1
  64. package/dist/admins-components132.js +2 -3
  65. package/dist/admins-components132.js.map +1 -1
  66. package/dist/admins-components133.js +8 -15
  67. package/dist/admins-components133.js.map +1 -1
  68. package/dist/admins-components134.js +6 -12
  69. package/dist/admins-components134.js.map +1 -1
  70. package/dist/admins-components135.js +6 -30
  71. package/dist/admins-components135.js.map +1 -1
  72. package/dist/admins-components136.js +15 -4
  73. package/dist/admins-components136.js.map +1 -1
  74. package/dist/admins-components137.js +13 -29
  75. package/dist/admins-components137.js.map +1 -1
  76. package/dist/admins-components138.js +30 -5
  77. package/dist/admins-components138.js.map +1 -1
  78. package/dist/admins-components139.js +4 -5
  79. package/dist/admins-components139.js.map +1 -1
  80. package/dist/admins-components140.js +28 -7
  81. package/dist/admins-components140.js.map +1 -1
  82. package/dist/admins-components141.js +4 -73
  83. package/dist/admins-components141.js.map +1 -1
  84. package/dist/admins-components142.js +4 -28
  85. package/dist/admins-components142.js.map +1 -1
  86. package/dist/admins-components143.js +8 -59
  87. package/dist/admins-components143.js.map +1 -1
  88. package/dist/admins-components144.js +72 -22
  89. package/dist/admins-components144.js.map +1 -1
  90. package/dist/admins-components145.js +26 -47
  91. package/dist/admins-components145.js.map +1 -1
  92. package/dist/admins-components146.js +58 -30
  93. package/dist/admins-components146.js.map +1 -1
  94. package/dist/admins-components147.js +24 -3
  95. package/dist/admins-components147.js.map +1 -1
  96. package/dist/admins-components148.js +44 -173
  97. package/dist/admins-components148.js.map +1 -1
  98. package/dist/admins-components149.js +28 -43
  99. package/dist/admins-components149.js.map +1 -1
  100. package/dist/admins-components150.js +3 -37
  101. package/dist/admins-components150.js.map +1 -1
  102. package/dist/admins-components151.js +176 -43
  103. package/dist/admins-components151.js.map +1 -1
  104. package/dist/admins-components152.js +41 -136
  105. package/dist/admins-components152.js.map +1 -1
  106. package/dist/admins-components153.js +36 -57
  107. package/dist/admins-components153.js.map +1 -1
  108. package/dist/admins-components154.js +44 -5
  109. package/dist/admins-components154.js.map +1 -1
  110. package/dist/admins-components155.js +141 -6
  111. package/dist/admins-components155.js.map +1 -1
  112. package/dist/admins-components156.js +57 -75
  113. package/dist/admins-components156.js.map +1 -1
  114. package/dist/admins-components157.js +6 -28
  115. package/dist/admins-components157.js.map +1 -1
  116. package/dist/admins-components158.js +5 -1930
  117. package/dist/admins-components158.js.map +1 -1
  118. package/dist/admins-components159.js +75 -24810
  119. package/dist/admins-components159.js.map +1 -1
  120. package/dist/admins-components16.js +4 -3
  121. package/dist/admins-components16.js.map +1 -1
  122. package/dist/admins-components160.js +28 -8
  123. package/dist/admins-components160.js.map +1 -1
  124. package/dist/admins-components161.js +1929 -5
  125. package/dist/admins-components161.js.map +1 -0
  126. package/dist/admins-components162.js +24809 -140
  127. package/dist/admins-components162.js.map +1 -1
  128. package/dist/admins-components163.js +3 -3
  129. package/dist/admins-components163.js.map +1 -1
  130. package/dist/admins-components164.js +7 -9
  131. package/dist/admins-components165.js +143 -0
  132. package/dist/admins-components165.js.map +1 -0
  133. package/dist/admins-components166.js +8 -167
  134. package/dist/admins-components166.js.map +1 -1
  135. package/dist/admins-components167.js +8 -50
  136. package/dist/admins-components167.js.map +1 -1
  137. package/dist/admins-components169.js +161 -43
  138. package/dist/admins-components169.js.map +1 -1
  139. package/dist/admins-components17.js.map +1 -1
  140. package/dist/admins-components170.js +51 -6
  141. package/dist/admins-components170.js.map +1 -1
  142. package/dist/admins-components171.js +8 -79
  143. package/dist/admins-components171.js.map +1 -1
  144. package/dist/admins-components172.js +35 -43
  145. package/dist/admins-components172.js.map +1 -1
  146. package/dist/admins-components173.js +6 -59
  147. package/dist/admins-components173.js.map +1 -1
  148. package/dist/admins-components174.js +79 -8
  149. package/dist/admins-components174.js.map +1 -1
  150. package/dist/admins-components175.js +43 -37
  151. package/dist/admins-components175.js.map +1 -1
  152. package/dist/admins-components176.js +58 -8
  153. package/dist/admins-components176.js.map +1 -1
  154. package/dist/admins-components177.js +10 -0
  155. package/dist/admins-components177.js.map +1 -0
  156. package/dist/admins-components178.js +44 -50
  157. package/dist/admins-components178.js.map +1 -1
  158. package/dist/admins-components179.js +10 -0
  159. package/dist/admins-components179.js.map +1 -0
  160. package/dist/admins-components181.js +59 -0
  161. package/dist/admins-components181.js.map +1 -0
  162. package/dist/admins-components5.js +30 -28
  163. package/dist/admins-components5.js.map +1 -1
  164. package/dist/admins-components58.js.map +1 -1
  165. package/dist/admins-components6.js.map +1 -1
  166. package/dist/admins-components65.js +66 -42
  167. package/dist/admins-components65.js.map +1 -1
  168. package/dist/admins-components67.js.map +1 -1
  169. package/dist/admins-components68.js +102 -95
  170. package/dist/admins-components68.js.map +1 -1
  171. package/dist/admins-components70.js.map +1 -1
  172. package/dist/admins-components72.js +135 -126
  173. package/dist/admins-components72.js.map +1 -1
  174. package/dist/admins-components74.js.map +1 -1
  175. package/dist/admins-components76.js +32 -122
  176. package/dist/admins-components76.js.map +1 -1
  177. package/dist/admins-components77.js +146 -0
  178. package/dist/admins-components77.js.map +1 -0
  179. package/dist/admins-components79.js +6 -59
  180. package/dist/admins-components79.js.map +1 -1
  181. package/dist/admins-components80.js +140 -67
  182. package/dist/admins-components80.js.map +1 -1
  183. package/dist/admins-components82.js +7 -0
  184. package/dist/admins-components82.js.map +1 -0
  185. package/dist/admins-components83.js +59 -6
  186. package/dist/admins-components83.js.map +1 -1
  187. package/dist/admins-components84.js +66 -229
  188. package/dist/admins-components84.js.map +1 -1
  189. package/dist/{admins-components81.js → admins-components85.js} +2 -2
  190. package/dist/{admins-components81.js.map → admins-components85.js.map} +1 -1
  191. package/dist/admins-components87.js +6 -37
  192. package/dist/admins-components87.js.map +1 -1
  193. package/dist/admins-components88.js +231 -0
  194. package/dist/admins-components88.js.map +1 -0
  195. package/dist/admins-components90.js +6 -199
  196. package/dist/admins-components90.js.map +1 -1
  197. package/dist/admins-components91.js +38 -0
  198. package/dist/{admins-components89.js.map → admins-components91.js.map} +1 -1
  199. package/dist/admins-components93.js +6 -16
  200. package/dist/admins-components93.js.map +1 -1
  201. package/dist/admins-components94.js +188 -64
  202. package/dist/admins-components94.js.map +1 -1
  203. package/dist/admins-components96.js +2 -2
  204. package/dist/admins-components96.js.map +1 -1
  205. package/dist/admins-components97.js +76 -198
  206. package/dist/admins-components97.js.map +1 -1
  207. package/dist/admins-components99.js +2 -2
  208. package/dist/admins-components99.js.map +1 -1
  209. package/dist/main.css +1 -1
  210. package/dist/main.css.map +1 -1
  211. package/dist/src/components/TextInput.vue.d.ts +2 -0
  212. package/dist/src/components/data-table/DataList.vue.d.ts +12 -3
  213. package/dist/src/components/data-table/DataPaginator.vue.d.ts +5 -1
  214. package/dist/src/components/data-table/DataSearch.vue.d.ts +9 -0
  215. package/dist/src/components/data-table/DataSort.vue.d.ts +51 -0
  216. package/dist/src/components/data-table/DataTable.vue.d.ts +12 -0
  217. package/dist/src/index.d.ts +4 -0
  218. package/dist/src/styles/components/data-table/data-cards.scss_vue_type_style_index_0_src_true_lang.css +1 -1
  219. package/dist/src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css +1 -1
  220. package/dist/src/styles/components/data-table/data-search.scss_vue_type_style_index_0_src_true_lang.css +1 -1
  221. package/dist/src/styles/components/data-table/data-sort.scss_vue_type_style_index_0_src_true_lang.css +1 -0
  222. package/dist/src/styles/components/dropdown-select.scss_vue_type_style_index_0_src_true_lang.css +1 -1
  223. package/dist/src/types/data-list.d.ts +1 -0
  224. package/dist/src/utils/url.d.ts +21 -0
  225. package/package.json +1 -1
  226. package/dist/admins-components101.js +0 -4
  227. package/dist/admins-components101.js.map +0 -1
  228. package/dist/admins-components164.js.map +0 -1
  229. package/dist/admins-components168.js +0 -10
  230. package/dist/admins-components168.js.map +0 -1
  231. package/dist/admins-components78.js +0 -7
  232. package/dist/admins-components78.js.map +0 -1
  233. package/dist/admins-components86.js +0 -7
  234. package/dist/admins-components86.js.map +0 -1
  235. package/dist/admins-components89.js +0 -7
  236. package/dist/admins-components92.js +0 -7
  237. package/dist/admins-components92.js.map +0 -1
@@ -1,114 +1,4 @@
1
- import { toast as e } from "./admins-components53.js";
2
- import { isIpInUrl as t } from "./admins-components100.js";
3
- import { createNativeFetch as n } from "./admins-components103.js";
4
- import { ref as r, watch as i } from "vue";
5
- //#region src/services/services.ts
6
- var a = class {
7
- title;
8
- message;
9
- errorCode;
10
- constructor(e, t, n) {
11
- this.title = e, this.message = t, this.errorCode = n;
12
- }
13
- }, o = /* @__PURE__ */ function(e) {
14
- return e[e.GET = 0] = "GET", e[e.GET_TEXT = 1] = "GET_TEXT", e[e.POST = 2] = "POST", e[e.POST_TEXT = 3] = "POST_TEXT", e[e.PUT = 4] = "PUT", e[e.PUT_TEXT = 5] = "PUT_TEXT", e[e.PATCH = 6] = "PATCH", e[e.DELETE = 7] = "DELETE", e;
15
- }({}), s = class {
16
- relativeUrl;
17
- method;
18
- fetchMethod;
19
- constructor(r, i, a, s, c = "application/json", l) {
20
- this.relativeUrl = i, this.method = a, this.fetchMethod = n({
21
- baseUrl: r,
22
- fetchOptions: { credentials: r.indexOf("localhost") != -1 || t(r) ? "omit" : "include" },
23
- options: {
24
- immediate: !1,
25
- beforeFetch: (e) => {
26
- e.options.headers = {
27
- ...c ? { "Content-Type": c } : {},
28
- ...l ?? {}
29
- };
30
- },
31
- onFetchError: (t) => {
32
- if (t.error?.name === "AbortError") return t;
33
- let n = "Ismeretlen eredetű hiba!", r = !t.response;
34
- return t.response && !t.response.ok && (r = !0, n = s.get(t.response.status), n || (n = `${o[a]} for Call: ${i} with Status: ${t.response.status} has no registered errorMessages!`, console.error(n))), r && e.error("Hiba a szerver elérése közben...", n), t;
35
- },
36
- afterFetch: (e) => e
37
- }
38
- });
39
- }
40
- };
41
- function c(e, t, n, o) {
42
- let s = {};
43
- s.payload = r(t), s.routeParams = r(n), s.queryParams = r(o), s.isFetching = r(!1), s.data = r();
44
- let c = null, l = null;
45
- return s.execute = () => {
46
- c &&= (c(), null), l &&= (l(), null), s.fetch && s.fetch.canAbort.value && s.fetch.abort();
47
- let t = `${u(e.relativeUrl, s.routeParams.value, s.queryParams.value)}`, n = e.fetchMethod(t), r, o = n.isFetching;
48
- async function d() {
49
- if (f() && s.successCallback) s.successCallback(s.data.value);
50
- else if (!f() && s.errorCallback) {
51
- console.log(s.fetch.error.value);
52
- let e;
53
- if (s.fetch.response.value && s.fetch.response.value.body) {
54
- let { value: t, done: n } = await s.fetch.response.value.body.getReader().read();
55
- !n && t && (e = new TextDecoder().decode(t), console.log("Response Body:", e));
56
- }
57
- s.errorCallback(new a(s.fetch.error.value, e, s.fetch.statusCode.value ? s.fetch.statusCode.value : void 0));
58
- }
59
- s.finallyCallback && s.finallyCallback();
60
- }
61
- function f() {
62
- return s.fetch.statusCode && s.fetch.statusCode.value >= 200 && s.fetch.statusCode.value <= 299;
63
- }
64
- switch (e.method) {
65
- case 0:
66
- r = n.get().json().data;
67
- break;
68
- case 1:
69
- r = n.get().text().data;
70
- break;
71
- case 4:
72
- r = n.put(s.payload).json().data;
73
- break;
74
- case 5:
75
- r = n.put(s.payload).text().data;
76
- break;
77
- case 3:
78
- r = n.post(s.payload).text().data;
79
- break;
80
- case 2:
81
- r = n.post(s.payload).json().data;
82
- break;
83
- case 6:
84
- r = n.patch(s.payload).json().data;
85
- break;
86
- case 7:
87
- r = n.delete(s.payload).json().data;
88
- break;
89
- default: throw Error(`Method: ${e.method} is not implemented!`);
90
- }
91
- c = i(r, (e) => {
92
- s.data.value = e;
93
- }), l = i(o, (e) => {
94
- s.isFetching.value = e, e || d();
95
- }), s.fetch = n, n.execute();
96
- }, s;
97
- }
98
- function l(e) {
99
- return e ? Object.keys(e).filter((t) => e[t] !== void 0 && e[t] !== null).map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(String(e[t]))}`).join("&") : "";
100
- }
101
- function u(e, t, n) {
102
- let r = e;
103
- if (r ||= "", r.slice(-1) === "/" && (r = r.substring(0, r.length - 1)), t && Object.keys(t).forEach((e) => {
104
- if (r.indexOf(`{${e}}`) === -1) throw window.dispatchEvent(new CustomEvent("fetch-error", { detail: new a("Hiba!", `RouteParams: ${e} not found in url: ${r}! Contact the developers!`) })), Error(`RouteParams: ${e} not found in url: ${r}! Contact the developers!`);
105
- let n = t[e];
106
- r = r.replace(`{${e}}`, n);
107
- }), n) {
108
- let e = l(n);
109
- e.length > 0 && (r.indexOf("?") === -1 ? r += "?" : !r.endsWith("?") && !r.endsWith("&") && (r += "&"), r += e);
110
- }
111
- return r;
112
- }
1
+ //#region src/utils/cmsContext.ts
2
+ var e = () => window.cmsContext?.currentSite;
113
3
  //#endregion
114
- export { s as FetchDetails, a as FetchError, o as Methods, c as initRequest };
4
+ export { e as getCurrentSite };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components104.js","names":[],"sources":["../src/services/services.ts"],"sourcesContent":["import { createNativeFetch, type NativeUseFetchReturn } from '@/services/createNativeFetch'\nimport { ref, watch, type Ref } from 'vue'\nimport { isIpInUrl } from '@/utils/ipUtils'\nimport { toast } from '@/services/toast'\n\nexport class FetchError {\n title?: string\n message?: string\n errorCode?: number\n constructor(title?: string, message?: string, errorCode?: number) {\n this.title = title\n this.message = message\n this.errorCode = errorCode\n }\n}\n\nexport interface HttpRequest<TPayload, TRouteParams, TQueryParams, TResponse> {\n data: Ref<TResponse>\n execute: () => any\n isFetching: Ref<boolean>\n fetch: NativeUseFetchReturn\n successCallback?: (response: TResponse) => void\n errorCallback?: (error: FetchError) => void\n finallyCallback?: () => void\n queryParams: Ref<TQueryParams>\n routeParams: Ref<TRouteParams>\n payload: Ref<TPayload>\n}\n\nexport enum Methods {\n GET,\n GET_TEXT,\n POST,\n POST_TEXT,\n PUT,\n PUT_TEXT,\n PATCH,\n DELETE,\n}\n\nexport class FetchDetails {\n public fetchMethod: ReturnType<typeof createNativeFetch>\n\n constructor(\n baseUrl: string,\n public relativeUrl: string,\n public method: Methods,\n errorMessages: Map<number, string>,\n contentType: string | null = 'application/json',\n defaultRequestHeaders?: Record<string, string>,\n ) {\n this.fetchMethod = createNativeFetch({\n baseUrl,\n fetchOptions: {\n credentials: baseUrl.indexOf('localhost') != -1 || isIpInUrl(baseUrl) ? 'omit' : 'include',\n },\n options: {\n immediate: false,\n\n beforeFetch: (ctx) => {\n ctx.options.headers = {\n ...(contentType ? { 'Content-Type': contentType } : {}),\n ...(defaultRequestHeaders ?? {}),\n }\n },\n\n onFetchError: (ctx) => {\n if (ctx.error?.name === 'AbortError') {\n return ctx\n }\n\n let errorMsg: string | undefined = 'Ismeretlen eredetű hiba!'\n let showError = !ctx.response\n\n if (ctx.response && !ctx.response.ok) {\n showError = true\n errorMsg = errorMessages.get(ctx.response.status)\n\n if (!errorMsg) {\n errorMsg = `${Methods[method]} for Call: ${relativeUrl} with Status: ${ctx.response.status} has no registered errorMessages!`\n console.error(errorMsg)\n }\n }\n\n if (showError) {\n toast.error('Hiba a szerver elérése közben...', errorMsg)\n }\n\n return ctx\n },\n\n afterFetch: (ctx) => ctx,\n },\n })\n }\n}\n\nexport function initRequest<TPayload, TRouteParams, TQueryParams, TResponse>(\n fetchDetails: FetchDetails,\n payload: TPayload,\n routeParams: TRouteParams,\n queryParams: TQueryParams,\n) {\n const detail = {} as HttpRequest<TPayload, TRouteParams, TQueryParams, TResponse>\n\n detail.payload = ref(payload) as Ref<TPayload>\n detail.routeParams = ref(routeParams) as Ref<TRouteParams>\n detail.queryParams = ref(queryParams) as Ref<TQueryParams>\n detail.isFetching = ref(false)\n detail.data = ref<TResponse>() as Ref<TResponse>\n\n let stopDataWatch: (() => void) | null = null\n let stopFetchingWatch: (() => void) | null = null\n\n detail.execute = () => {\n if (stopDataWatch) {\n stopDataWatch()\n stopDataWatch = null\n }\n if (stopFetchingWatch) {\n stopFetchingWatch()\n stopFetchingWatch = null\n }\n\n if (detail.fetch && detail.fetch.canAbort.value) {\n detail.fetch.abort()\n }\n\n const fullurl = `${generateUrl(fetchDetails.relativeUrl, detail.routeParams.value, detail.queryParams.value)}`\n\n const fetch = fetchDetails.fetchMethod(fullurl)\n\n let data: Ref<TResponse>\n const isFetching = fetch.isFetching\n\n async function onFetchFinished() {\n if (isSuccessStatusCode() && detail.successCallback) {\n detail.successCallback(detail.data.value)\n } else if (!isSuccessStatusCode() && detail.errorCallback) {\n console.log(detail.fetch.error.value)\n let responseBody: string | undefined = undefined\n if (detail.fetch.response.value && detail.fetch.response.value.body) {\n const reader = detail.fetch.response.value.body.getReader()\n const { value, done } = await reader.read()\n if (!done && value) {\n responseBody = new TextDecoder().decode(value)\n console.log('Response Body:', responseBody)\n }\n }\n detail.errorCallback(\n new FetchError(\n detail.fetch.error.value,\n responseBody,\n detail.fetch.statusCode.value ? detail.fetch.statusCode.value : undefined,\n ),\n )\n }\n\n if (detail.finallyCallback) {\n detail.finallyCallback()\n }\n }\n\n function isSuccessStatusCode() {\n return (\n detail.fetch.statusCode &&\n detail.fetch.statusCode.value! >= 200 &&\n detail.fetch.statusCode.value! <= 299\n )\n }\n\n switch (fetchDetails.method) {\n case Methods.GET:\n data = fetch.get().json().data as Ref<TResponse>\n break\n case Methods.GET_TEXT:\n data = fetch.get().text().data as Ref<TResponse>\n break\n case Methods.PUT:\n data = fetch.put(detail.payload).json().data as Ref<TResponse>\n break\n case Methods.PUT_TEXT:\n data = fetch.put(detail.payload).text().data as Ref<TResponse>\n break\n case Methods.POST_TEXT:\n data = fetch.post(detail.payload).text().data as Ref<TResponse>\n break\n case Methods.POST:\n data = fetch.post(detail.payload).json().data as Ref<TResponse>\n break\n case Methods.PATCH:\n data = fetch.patch(detail.payload).json().data as Ref<TResponse>\n break\n case Methods.DELETE:\n data = fetch.delete(detail.payload).json().data as Ref<TResponse>\n break\n\n default:\n throw new Error(`Method: ${fetchDetails.method} is not implemented!`)\n }\n\n stopDataWatch = watch(data, (v) => {\n detail.data.value = v\n })\n\n stopFetchingWatch = watch(isFetching, (i) => {\n detail.isFetching.value = i\n if (!i) {\n onFetchFinished()\n }\n })\n\n detail.fetch = fetch\n fetch.execute()\n }\n\n return detail\n}\n\nexport function serializeQueryParams(\n queryParams: Record<string, unknown> | null | undefined,\n): string {\n if (!queryParams) {\n return ''\n }\n\n return Object.keys(queryParams)\n .filter((k) => queryParams[k] !== undefined && queryParams[k] !== null)\n .map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(String(queryParams[k]))}`)\n .join('&')\n}\n\nfunction generateUrl(relativeUrl: string, routeParams: any, queryParams: any) {\n let res = relativeUrl\n\n if (!res) res = ''\n\n if (res.slice(-1) === '/') {\n res = res.substring(0, res.length - 1)\n }\n\n if (routeParams) {\n Object.keys(routeParams).forEach((k) => {\n if (res.indexOf(`{${k}}`) === -1) {\n window.dispatchEvent(\n new CustomEvent('fetch-error', {\n detail: new FetchError(\n 'Hiba!',\n `RouteParams: ${k} not found in url: ${res}! Contact the developers!`,\n ),\n }),\n )\n\n throw new Error(`RouteParams: ${k} not found in url: ${res}! Contact the developers!`)\n }\n\n const val = routeParams[k]\n\n res = res.replace(`{${k}}`, val)\n })\n }\n\n if (queryParams) {\n const parts = serializeQueryParams(queryParams)\n\n if (parts.length > 0) {\n if (res.indexOf('?') === -1) {\n res += '?'\n } else if (!res.endsWith('?') && !res.endsWith('&')) {\n res += '&'\n }\n\n res += parts\n }\n }\n\n return res\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components104.js","names":[],"sources":["../src/utils/cmsContext.ts"],"sourcesContent":["export const getCurrentSite = (): string | undefined => {\n return (window as any).cmsContext?.currentSite\n}\n"],"mappings":";AAAA,IAAa,UACD,OAAe,YAAY"}
@@ -1,48 +1,53 @@
1
- import { FetchDetails as e, Methods as t, initRequest as n } from "./admins-components104.js";
2
- //#region src/services/articleEditorService.ts
3
- function r(e) {
4
- return new i(e);
1
+ //#region src/directives/tooltip.ts
2
+ function e() {
3
+ let e = document.createElement("div");
4
+ return e.className = "v-tooltip ac-component", e.style.position = "fixed", e.style.zIndex = "9999999", e.style.opacity = "0", e.style.pointerEvents = "none", e.style.transition = "opacity 0.15s", e;
5
5
  }
6
- var i = class {
7
- articleEditorBackendUrl;
8
- baseUrl;
9
- searchPosts;
10
- whoAmI;
11
- getPostsConfig;
12
- getImagesConfig;
13
- getPresenceConfig;
14
- sites;
15
- authorsSearch;
16
- authorsDetailsByIds;
17
- articleSeriesSearch;
18
- articleSeriesDetailsByIds;
19
- columnsSearch;
20
- columnsDetailsByIds;
21
- digitalSupplementsSearch;
22
- digitalSupplementsDetailsByIds;
23
- partnersSearch;
24
- partnersDetailsByIds;
25
- tagsSearch;
26
- tagsDetailsByIds;
27
- getRelationsCount;
28
- errorMap(e) {
29
- return new Map([[400, `${e} lekérdezése ismeretlen 400 hiba!`], [500, `${e} lekérdezése ismeretlen 500 hiba!`]]);
30
- }
31
- postRequest(r, i, a) {
32
- return n(new e(this.baseUrl, r, t.POST, this.errorMap(a)), i, void 0, void 0);
33
- }
34
- searchRequest(e, t) {
35
- return this.postRequest(`admin/${e}/search`, {}, t);
36
- }
37
- detailsByIdsRequest(e, t) {
38
- return this.postRequest(`admin/${e}/detailsByIds`, { ids: [] }, t);
39
- }
40
- constructor(r) {
41
- this.articleEditorBackendUrl = r, this.baseUrl = this.articleEditorBackendUrl, this.searchPosts = n(new e(this.baseUrl, "admin/Posts/searchPosts", t.POST, this.errorMap("Cikk lekérdezés")), {}, void 0, void 0), this.whoAmI = n(new e(this.baseUrl, "whoami", t.GET, this.errorMap("Felhasználói adatok lekérdezése")), void 0, void 0, void 0), this.getPostsConfig = n(new e(this.baseUrl, "/admin/Widgets/{name}", t.GET, this.errorMap("Search Posts Widget konfiguráció lekérése")), void 0, { name: "" }, void 0), this.getImagesConfig = n(new e(this.baseUrl, "/admin/Widgets/{name}", t.GET, this.errorMap("Widget konfiguráció lekérése")), void 0, { name: "" }, void 0), this.getPresenceConfig = n(new e(this.baseUrl, "/admin/Widgets/{name}", t.GET, this.errorMap("Widget konfiguráció lekérése")), void 0, { name: "" }, void 0), this.sites = n(new e(this.baseUrl, "/admin/sites", t.GET, this.errorMap("Site lekérése")), void 0, void 0, void 0), this.authorsSearch = this.searchRequest("Authors", "Szerzők"), this.authorsDetailsByIds = this.detailsByIdsRequest("Authors", "Szerzők"), this.articleSeriesSearch = this.searchRequest("ArticleSeries", "Cikk sorozatok"), this.articleSeriesDetailsByIds = this.detailsByIdsRequest("ArticleSeries", "Cikk sorozatok"), this.partnersSearch = this.searchRequest("Partners", "Partnerek"), this.partnersDetailsByIds = this.detailsByIdsRequest("Partners", "Partnerek"), this.columnsSearch = this.searchRequest("Columns", "Rovatok"), this.columnsDetailsByIds = this.detailsByIdsRequest("Columns", "Rovatok"), this.digitalSupplementsSearch = this.searchRequest("DigitalSupplements", "Digitális kiegészítők"), this.digitalSupplementsDetailsByIds = this.detailsByIdsRequest("DigitalSupplements", "Digitális kiegészítők"), this.tagsSearch = this.searchRequest("Tags", "Címkék"), this.tagsDetailsByIds = this.detailsByIdsRequest("Tags", "Címkék"), this.getRelationsCount = this.postRequest("admin/Relations/byIds", {
42
- ids: [],
43
- outputEntityType: ""
44
- }, "Kapcsolatok számlálása");
6
+ function t(e, t) {
7
+ let n = window.innerWidth, r = window.innerHeight;
8
+ e.style.maxWidth = `min(${n - 16}px, 300px)`;
9
+ let i = e.getBoundingClientRect(), a = i.width, o = i.height, s = t.clientX + 12, c = t.clientY + 18;
10
+ s + a > n - 8 && (s = t.clientX - a - 12), c + o > r - 8 && (c = t.clientY - o - 12), s = Math.max(8, Math.min(s, n - a - 8)), c = Math.max(8, Math.min(c, r - o - 8)), e.style.left = `${s}px`, e.style.top = `${c}px`;
11
+ }
12
+ function n(e, t, n) {
13
+ n ? e.innerHTML = t : e.textContent = t;
14
+ }
15
+ var r = {
16
+ mounted(r, i) {
17
+ let a = e();
18
+ n(a, i.value, !!i.modifiers.html), document.body.appendChild(a);
19
+ let o = null, s = null, c = null, l = (e) => {
20
+ c = e;
21
+ }, u = (e) => {
22
+ c = e, s &&= (clearTimeout(s), null), o = setTimeout(() => {
23
+ t(a, c ?? e), a.style.opacity = "1";
24
+ }, 400);
25
+ }, d = () => {
26
+ c = null, o &&= (clearTimeout(o), null), s = setTimeout(() => {
27
+ a.style.opacity = "0";
28
+ }, 50);
29
+ }, f = (e) => {
30
+ o &&= (clearTimeout(o), null), s &&= (clearTimeout(s), null), a.style.opacity === "1" ? a.style.opacity = "0" : (t(a, e), a.style.opacity = "1");
31
+ }, p = () => {
32
+ o &&= (clearTimeout(o), null), a.style.opacity = "0";
33
+ };
34
+ r.addEventListener("mouseenter", u), r.addEventListener("mousemove", l), r.addEventListener("mouseleave", d), r.addEventListener("click", f), window.addEventListener("scroll", p, !0), r._tooltip = {
35
+ el: a,
36
+ showTimeout: o,
37
+ hideTimeout: s,
38
+ onEnter: u,
39
+ onMove: l,
40
+ onLeave: d,
41
+ onClick: f,
42
+ onScroll: p
43
+ };
44
+ },
45
+ updated(e, t) {
46
+ e._tooltip && n(e._tooltip.el, t.value, !!t.modifiers.html);
47
+ },
48
+ unmounted(e) {
49
+ e._tooltip &&= (e.removeEventListener("mouseenter", e._tooltip.onEnter), e.removeEventListener("mousemove", e._tooltip.onMove), e.removeEventListener("mouseleave", e._tooltip.onLeave), e.removeEventListener("click", e._tooltip.onClick), window.removeEventListener("scroll", e._tooltip.onScroll, !0), e._tooltip.el.remove(), void 0);
45
50
  }
46
51
  };
47
52
  //#endregion
48
- export { r as useArticleEditorService };
53
+ export { r as vTooltip };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components105.js","names":[],"sources":["../src/services/articleEditorService.ts"],"sourcesContent":["import type { SearchPostsPayload, SearchPostsResponse } from '@/models/SearchPosts'\nimport { FetchDetails, type HttpRequest, initRequest, Methods } from '@/services/services'\n\nimport type {\n ArticleSeriesDetails,\n AuthorDetails,\n ColumnDetails,\n DigitalSupplementDetails,\n GetRelationsCountPayload,\n IdsPayload,\n PartnerDetails,\n PresenceWidgetConfig,\n RelationCount,\n SearchArticleSeriesResult,\n SearchAuthorsPayload,\n SearchAuthorsResult,\n SearchColumnsPayload,\n SearchColumnsResult,\n SearchDigitalSupplementsPayload,\n SearchDigitalSupplementsResult,\n SearchEntityPayload,\n SearchImagesWidgetConfig,\n SearchPartnersResult,\n SearchPostWidgetConfig,\n SearchTagsPayload,\n SearchTagsResult,\n Site,\n TagDetails,\n UserInfoModel,\n WidgetDetailsResponse,\n} from '@/services/models'\n\nexport function useArticleEditorService(url: string): ArticleEditorService {\n return new ArticleEditorService(url)\n}\n\nexport class ArticleEditorService {\n baseUrl: string\n searchPosts: HttpRequest<SearchPostsPayload, undefined, undefined, SearchPostsResponse>\n whoAmI: HttpRequest<void, undefined, undefined, UserInfoModel>\n getPostsConfig: HttpRequest<\n undefined,\n { name: string },\n undefined,\n WidgetDetailsResponse<SearchPostWidgetConfig>\n >\n getImagesConfig: HttpRequest<\n undefined,\n { name: string },\n undefined,\n WidgetDetailsResponse<SearchImagesWidgetConfig>\n >\n getPresenceConfig: HttpRequest<\n undefined,\n { name: string },\n undefined,\n WidgetDetailsResponse<PresenceWidgetConfig>\n >\n sites: HttpRequest<undefined, undefined, undefined, Site[]>\n\n /* getMeta: HttpRequest<\n { url: string },\n undefined,\n undefined,\n { url: string; title: string; lead: string; imageUrl: string }\n > */\n\n authorsSearch: HttpRequest<SearchAuthorsPayload, undefined, undefined, SearchAuthorsResult>\n\n authorsDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, AuthorDetails[]>\n\n articleSeriesSearch: HttpRequest<\n SearchEntityPayload,\n undefined,\n undefined,\n SearchArticleSeriesResult\n >\n\n articleSeriesDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, ArticleSeriesDetails[]>\n\n columnsSearch: HttpRequest<SearchColumnsPayload, undefined, undefined, SearchColumnsResult>\n\n columnsDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, ColumnDetails[]>\n\n digitalSupplementsSearch: HttpRequest<\n SearchDigitalSupplementsPayload,\n undefined,\n undefined,\n SearchDigitalSupplementsResult\n >\n\n digitalSupplementsDetailsByIds: HttpRequest<\n IdsPayload,\n undefined,\n undefined,\n DigitalSupplementDetails[]\n >\n\n partnersSearch: HttpRequest<SearchEntityPayload, undefined, undefined, SearchPartnersResult>\n\n partnersDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, PartnerDetails[]>\n\n tagsSearch: HttpRequest<SearchTagsPayload, undefined, undefined, SearchTagsResult>\n\n tagsDetailsByIds: HttpRequest<IdsPayload, undefined, undefined, TagDetails[]>\n\n getRelationsCount: HttpRequest<GetRelationsCountPayload, undefined, undefined, RelationCount[]>\n\n private errorMap(entityName: string) {\n return new Map<number, string>([\n [400, `${entityName} lekérdezése ismeretlen 400 hiba!`],\n [500, `${entityName} lekérdezése ismeretlen 500 hiba!`],\n ])\n }\n\n private postRequest<Payload, Result>(path: string, defaultPayload: Payload, entityName: string) {\n return initRequest<Payload, undefined, undefined, Result>(\n new FetchDetails(this.baseUrl, path, Methods.POST, this.errorMap(entityName)),\n defaultPayload,\n undefined,\n undefined,\n )\n }\n\n private searchRequest<Payload, Result>(resource: string, entityName: string) {\n return this.postRequest<Payload, Result>(`admin/${resource}/search`, {} as Payload, entityName)\n }\n\n private detailsByIdsRequest<Result>(resource: string, entityName: string) {\n return this.postRequest<IdsPayload, Result>(\n `admin/${resource}/detailsByIds`,\n { ids: [] },\n entityName,\n )\n }\n\n constructor(public articleEditorBackendUrl: string) {\n this.baseUrl = this.articleEditorBackendUrl\n\n /* this.getMeta = initRequest<\n { url: string },\n undefined,\n undefined,\n { url: string; title: string; lead: string; imageUrl: string }\n >(\n new FetchDetails(\n this.baseUrl,\n 'admin/Embeds/meta',\n Methods.POST,\n this.errorMap('Meta adatok'),\n ),\n { url: '' },\n undefined,\n undefined,\n ) */\n\n this.searchPosts = initRequest<SearchPostsPayload, undefined, undefined, SearchPostsResponse>(\n new FetchDetails(\n this.baseUrl,\n 'admin/Posts/searchPosts',\n Methods.POST,\n this.errorMap('Cikk lekérdezés'),\n ),\n {} as SearchPostsPayload,\n undefined,\n undefined,\n )\n\n this.whoAmI = initRequest<void, undefined, undefined, UserInfoModel>(\n new FetchDetails(\n this.baseUrl,\n 'whoami',\n Methods.GET,\n this.errorMap('Felhasználói adatok lekérdezése'),\n ),\n undefined,\n undefined,\n undefined,\n )\n\n this.getPostsConfig = initRequest<\n undefined,\n { name: string },\n undefined,\n WidgetDetailsResponse<SearchPostWidgetConfig>\n >(\n new FetchDetails(\n this.baseUrl,\n '/admin/Widgets/{name}',\n Methods.GET,\n this.errorMap('Search Posts Widget konfiguráció lekérése'),\n ),\n undefined,\n { name: '' } as { name: string },\n undefined,\n )\n\n this.getImagesConfig = initRequest<\n undefined,\n { name: string },\n undefined,\n WidgetDetailsResponse<SearchImagesWidgetConfig>\n >(\n new FetchDetails(\n this.baseUrl,\n '/admin/Widgets/{name}',\n Methods.GET,\n this.errorMap('Widget konfiguráció lekérése'),\n ),\n undefined,\n { name: '' } as { name: string },\n undefined,\n )\n\n this.getPresenceConfig = initRequest<\n undefined,\n { name: string },\n undefined,\n WidgetDetailsResponse<PresenceWidgetConfig>\n >(\n new FetchDetails(\n this.baseUrl,\n '/admin/Widgets/{name}',\n Methods.GET,\n this.errorMap('Widget konfiguráció lekérése'),\n ),\n undefined,\n { name: '' } as { name: string },\n undefined,\n )\n\n this.sites = initRequest<undefined, undefined, undefined, Site[]>(\n new FetchDetails(this.baseUrl, '/admin/sites', Methods.GET, this.errorMap('Site lekérése')),\n undefined,\n undefined,\n undefined,\n )\n\n this.authorsSearch = this.searchRequest<SearchAuthorsPayload, SearchAuthorsResult>(\n 'Authors',\n 'Szerzők',\n )\n this.authorsDetailsByIds = this.detailsByIdsRequest<AuthorDetails[]>('Authors', 'Szerzők')\n\n this.articleSeriesSearch = this.searchRequest<SearchEntityPayload, SearchArticleSeriesResult>(\n 'ArticleSeries',\n 'Cikk sorozatok',\n )\n this.articleSeriesDetailsByIds = this.detailsByIdsRequest<ArticleSeriesDetails[]>(\n 'ArticleSeries',\n 'Cikk sorozatok',\n )\n\n this.partnersSearch = this.searchRequest<SearchEntityPayload, SearchPartnersResult>(\n 'Partners',\n 'Partnerek',\n )\n this.partnersDetailsByIds = this.detailsByIdsRequest<PartnerDetails[]>('Partners', 'Partnerek')\n\n this.columnsSearch = this.searchRequest<SearchColumnsPayload, SearchColumnsResult>(\n 'Columns',\n 'Rovatok',\n )\n this.columnsDetailsByIds = this.detailsByIdsRequest<ColumnDetails[]>('Columns', 'Rovatok')\n\n this.digitalSupplementsSearch = this.searchRequest<\n SearchDigitalSupplementsPayload,\n SearchDigitalSupplementsResult\n >('DigitalSupplements', 'Digitális kiegészítők')\n this.digitalSupplementsDetailsByIds = this.detailsByIdsRequest<DigitalSupplementDetails[]>(\n 'DigitalSupplements',\n 'Digitális kiegészítők',\n )\n\n this.tagsSearch = this.searchRequest<SearchTagsPayload, SearchTagsResult>('Tags', 'Címkék')\n this.tagsDetailsByIds = this.detailsByIdsRequest<TagDetails[]>('Tags', 'Címkék')\n\n this.getRelationsCount = this.postRequest<GetRelationsCountPayload, RelationCount[]>(\n 'admin/Relations/byIds',\n { ids: [], outputEntityType: '' },\n 'Kapcsolatok számlálása',\n )\n }\n}\n"],"mappings":";;AAgCA,SAAgB,EAAwB,GAAmC;CACzE,OAAO,IAAI,EAAqB,CAAG;AACrC;AAEA,IAAa,IAAb,MAAkC;CAoGb;CAnGnB;CACA;CACA;CACA;CAMA;CAMA;CAMA;CASA;CAEA;CAEA;CAOA;CAEA;CAEA;CAEA;CAOA;CAOA;CAEA;CAEA;CAEA;CAEA;CAEA,SAAiB,GAAoB;EACnC,OAAO,IAAI,IAAoB,CAC7B,CAAC,KAAK,GAAG,EAAW,kCAAkC,GACtD,CAAC,KAAK,GAAG,EAAW,kCAAkC,CACxD,CAAC;CACH;CAEA,YAAqC,GAAc,GAAyB,GAAoB;EAC9F,OAAO,EACL,IAAI,EAAa,KAAK,SAAS,GAAM,EAAQ,MAAM,KAAK,SAAS,CAAU,CAAC,GAC5E,GACA,KAAA,GACA,KAAA,CACF;CACF;CAEA,cAAuC,GAAkB,GAAoB;EAC3E,OAAO,KAAK,YAA6B,SAAS,EAAS,UAAU,CAAC,GAAc,CAAU;CAChG;CAEA,oBAAoC,GAAkB,GAAoB;EACxE,OAAO,KAAK,YACV,SAAS,EAAS,gBAClB,EAAE,KAAK,CAAC,EAAE,GACV,CACF;CACF;CAEA,YAAY,GAAwC;EA6IlD,AA7IiB,KAAA,0BAAA,GACjB,KAAK,UAAU,KAAK,yBAmBpB,KAAK,cAAc,EACjB,IAAI,EACF,KAAK,SACL,2BACA,EAAQ,MACR,KAAK,SAAS,iBAAiB,CACjC,GACA,CAAC,GACD,KAAA,GACA,KAAA,CACF,GAEA,KAAK,SAAS,EACZ,IAAI,EACF,KAAK,SACL,UACA,EAAQ,KACR,KAAK,SAAS,iCAAiC,CACjD,GACA,KAAA,GACA,KAAA,GACA,KAAA,CACF,GAEA,KAAK,iBAAiB,EAMpB,IAAI,EACF,KAAK,SACL,yBACA,EAAQ,KACR,KAAK,SAAS,2CAA2C,CAC3D,GACA,KAAA,GACA,EAAE,MAAM,GAAG,GACX,KAAA,CACF,GAEA,KAAK,kBAAkB,EAMrB,IAAI,EACF,KAAK,SACL,yBACA,EAAQ,KACR,KAAK,SAAS,8BAA8B,CAC9C,GACA,KAAA,GACA,EAAE,MAAM,GAAG,GACX,KAAA,CACF,GAEA,KAAK,oBAAoB,EAMvB,IAAI,EACF,KAAK,SACL,yBACA,EAAQ,KACR,KAAK,SAAS,8BAA8B,CAC9C,GACA,KAAA,GACA,EAAE,MAAM,GAAG,GACX,KAAA,CACF,GAEA,KAAK,QAAQ,EACX,IAAI,EAAa,KAAK,SAAS,gBAAgB,EAAQ,KAAK,KAAK,SAAS,eAAe,CAAC,GAC1F,KAAA,GACA,KAAA,GACA,KAAA,CACF,GAEA,KAAK,gBAAgB,KAAK,cACxB,WACA,SACF,GACA,KAAK,sBAAsB,KAAK,oBAAqC,WAAW,SAAS,GAEzF,KAAK,sBAAsB,KAAK,cAC9B,iBACA,gBACF,GACA,KAAK,4BAA4B,KAAK,oBACpC,iBACA,gBACF,GAEA,KAAK,iBAAiB,KAAK,cACzB,YACA,WACF,GACA,KAAK,uBAAuB,KAAK,oBAAsC,YAAY,WAAW,GAE9F,KAAK,gBAAgB,KAAK,cACxB,WACA,SACF,GACA,KAAK,sBAAsB,KAAK,oBAAqC,WAAW,SAAS,GAEzF,KAAK,2BAA2B,KAAK,cAGnC,sBAAsB,uBAAuB,GAC/C,KAAK,iCAAiC,KAAK,oBACzC,sBACA,uBACF,GAEA,KAAK,aAAa,KAAK,cAAmD,QAAQ,QAAQ,GAC1F,KAAK,mBAAmB,KAAK,oBAAkC,QAAQ,QAAQ,GAE/E,KAAK,oBAAoB,KAAK,YAC5B,yBACA;GAAE,KAAK,CAAC;GAAG,kBAAkB;EAAG,GAChC,wBACF;CACF;AACF"}
1
+ {"version":3,"file":"admins-components105.js","names":[],"sources":["../src/directives/tooltip.ts"],"sourcesContent":["import type { Directive, DirectiveBinding } from 'vue'\n\ninterface TooltipEl extends HTMLElement {\n _tooltip?: {\n el: HTMLElement\n showTimeout: ReturnType<typeof setTimeout> | null\n hideTimeout: ReturnType<typeof setTimeout> | null\n onEnter: (e: MouseEvent) => void\n onMove: (e: MouseEvent) => void\n onLeave: () => void\n onClick: (e: MouseEvent) => void\n onScroll: () => void\n }\n}\n\nfunction createTooltipEl(): HTMLElement {\n const el = document.createElement('div')\n el.className = 'v-tooltip ac-component'\n el.style.position = 'fixed'\n el.style.zIndex = '9999999'\n el.style.opacity = '0'\n el.style.pointerEvents = 'none'\n el.style.transition = 'opacity 0.15s'\n return el\n}\n\nfunction position(tooltip: HTMLElement, e: MouseEvent) {\n const offsetX = 12\n const offsetY = 18\n const edge = 8\n const vw = window.innerWidth\n const vh = window.innerHeight\n\n tooltip.style.maxWidth = `min(${vw - 2 * edge}px, 300px)`\n\n const rect = tooltip.getBoundingClientRect()\n const w = rect.width\n const h = rect.height\n\n let x = e.clientX + offsetX\n let y = e.clientY + offsetY\n\n if (x + w > vw - edge) {\n x = e.clientX - w - offsetX\n }\n if (y + h > vh - edge) {\n y = e.clientY - h - offsetX\n }\n\n x = Math.max(edge, Math.min(x, vw - w - edge))\n y = Math.max(edge, Math.min(y, vh - h - edge))\n\n tooltip.style.left = `${x}px`\n tooltip.style.top = `${y}px`\n}\n\nfunction setContent(tooltip: HTMLElement, value: string, html: boolean) {\n if (html) {\n tooltip.innerHTML = value\n } else {\n tooltip.textContent = value\n }\n}\n\nexport const vTooltip: Directive = {\n mounted(el: TooltipEl, binding: DirectiveBinding<string>) {\n const tooltip = createTooltipEl()\n setContent(tooltip, binding.value, !!binding.modifiers.html)\n document.body.appendChild(tooltip)\n\n let showTimeout: ReturnType<typeof setTimeout> | null = null\n let hideTimeout: ReturnType<typeof setTimeout> | null = null\n let lastEvent: MouseEvent | null = null\n\n const onMove = (e: MouseEvent) => {\n lastEvent = e\n }\n\n const onEnter = (e: MouseEvent) => {\n lastEvent = e\n if (hideTimeout) {\n clearTimeout(hideTimeout)\n hideTimeout = null\n }\n showTimeout = setTimeout(() => {\n position(tooltip, lastEvent ?? e)\n tooltip.style.opacity = '1'\n }, 400)\n }\n\n const onLeave = () => {\n lastEvent = null\n if (showTimeout) {\n clearTimeout(showTimeout)\n showTimeout = null\n }\n hideTimeout = setTimeout(() => {\n tooltip.style.opacity = '0'\n }, 50)\n }\n\n const onClick = (e: MouseEvent) => {\n if (showTimeout) {\n clearTimeout(showTimeout)\n showTimeout = null\n }\n if (hideTimeout) {\n clearTimeout(hideTimeout)\n hideTimeout = null\n }\n if (tooltip.style.opacity === '1') {\n tooltip.style.opacity = '0'\n } else {\n position(tooltip, e)\n tooltip.style.opacity = '1'\n }\n }\n\n const onScroll = () => {\n if (showTimeout) {\n clearTimeout(showTimeout)\n showTimeout = null\n }\n tooltip.style.opacity = '0'\n }\n\n el.addEventListener('mouseenter', onEnter)\n el.addEventListener('mousemove', onMove)\n el.addEventListener('mouseleave', onLeave)\n el.addEventListener('click', onClick)\n window.addEventListener('scroll', onScroll, true)\n\n el._tooltip = {\n el: tooltip,\n showTimeout,\n hideTimeout,\n onEnter,\n onMove,\n onLeave,\n onClick,\n onScroll,\n }\n },\n\n updated(el: TooltipEl, binding: DirectiveBinding<string>) {\n if (el._tooltip) {\n setContent(el._tooltip.el, binding.value, !!binding.modifiers.html)\n }\n },\n\n unmounted(el: TooltipEl) {\n if (el._tooltip) {\n el.removeEventListener('mouseenter', el._tooltip.onEnter)\n el.removeEventListener('mousemove', el._tooltip.onMove)\n el.removeEventListener('mouseleave', el._tooltip.onLeave)\n el.removeEventListener('click', el._tooltip.onClick)\n window.removeEventListener('scroll', el._tooltip.onScroll, true)\n el._tooltip.el.remove()\n el._tooltip = undefined\n }\n },\n}\n"],"mappings":"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"}
@@ -1,107 +1,83 @@
1
- import { isIpInUrl as e } from "./admins-components100.js";
2
- import { useArticleEditorService as t } from "./admins-components105.js";
3
- import { computed as n, ref as r } from "vue";
4
- //#region src/services/currentUserInfo.ts
5
- var i = null, a = [], o = !1;
6
- function s() {
7
- if (i) return o && console.debug("[currentUserInfo] Returning existing store instance"), i;
8
- o && console.debug("[currentUserInfo] Creating new store instance");
9
- let s = r(null), c = r("loading"), l = r(null), u = r(null), d = n(() => c.value === "loading"), f = n(() => c.value === "authenticated" && s.value !== null), p = n(() => s.value?.displayName ?? ""), m = n(() => s.value?.email ?? ""), h = n(() => s.value?.roles ?? []);
10
- async function g(n, r) {
11
- o = r ?? !1, o && console.debug("[currentUserInfo] initialize() called", { backendUrl: n }), o && console.debug("[currentUserInfo] Starting initialization"), u.value = n, c.value = "loading", l.value = null;
12
- try {
13
- let r = t(n);
14
- await new Promise((t, n) => {
15
- if (r.baseUrl.indexOf("localhost") != -1 || e(r.baseUrl)) return o && console.debug("[currentUserInfo] Localhost/IP detected, using dev credentials"), s.value = {
16
- displayName: "developer",
17
- email: "developer@hvg.hu",
18
- roles: ["devadmin"],
19
- id: "00000000-0000-0000-0000-000000000000"
20
- }, c.value = "authenticated", t();
21
- r.whoAmI.successCallback = (e) => {
22
- o && console.debug("[currentUserInfo] whoAmI success", {
23
- displayName: e.displayName,
24
- email: e.email,
25
- rolesCount: e.roles?.length ?? 0
26
- }), s.value = e, c.value = "authenticated", t();
27
- }, r.whoAmI.errorCallback = (e) => {
28
- o && console.error("[currentUserInfo] whoAmI failed:", e), l.value = e.message ?? "Ismeretlen hiba történt", c.value = "error", n(Error(l.value));
29
- }, o && console.debug("[currentUserInfo] Executing whoAmI request"), r.whoAmI.execute();
30
- }), await new Promise((e, t) => {
31
- r.sites.successCallback = (t) => {
32
- o && console.debug("[currentUserInfo] sites fetch success", { sitesCount: t.length }), a = t, e();
33
- }, r.sites.errorCallback = (e) => {
34
- o && console.error("[currentUserInfo] sites fetch failed:", e), t(Error(e.message ?? "Ismeretlen hiba történt"));
35
- }, o && console.debug("[currentUserInfo] Executing sites request"), r.sites.execute();
36
- }), o && console.debug("[currentUserInfo] Initialization completed successfully");
37
- } catch (e) {
38
- throw o && console.error("[currentUserInfo] initialize failed:", e), c.value = "error", l.value ||= "Felhasználói adatok vagy site-ok lekérése sikertelen", e;
39
- }
40
- }
41
- function _() {
42
- o && console.debug("[currentUserInfo] clear() called, resetting all state"), s.value = null, c.value = "loading", l.value = null, u.value = null, a = [];
43
- }
44
- function v(e, t, n) {
45
- if (o && console.debug("[currentUserInfo] hasPermission() check", {
46
- siteId: e,
47
- entityName: t,
48
- accessLevel: n
49
- }), !s.value?.roles || s.value.roles.length === 0) return o && console.debug("[currentUserInfo] hasPermission() denied: no roles"), !1;
50
- if (s.value.roles.includes("devadmin")) return o && console.debug("[currentUserInfo] hasPermission() granted: devadmin role"), !0;
51
- let r = n === "admin" ? ["admin"] : ["reader", "admin"];
52
- for (let n of r) {
53
- let r = `cms-${e}-${t}-${n}`;
54
- if (s.value.roles.includes(r)) return o && console.debug("[currentUserInfo] hasPermission() granted: specific role", r), !0;
55
- let i = `cms-${e}-all-${n}`;
56
- if (s.value.roles.includes(i)) return o && console.debug("[currentUserInfo] hasPermission() granted: all-entity role", i), !0;
57
- }
58
- return o && console.debug("[currentUserInfo] hasPermission() denied: no matching roles"), !1;
59
- }
60
- function y(e, t) {
61
- if (o && console.debug("[currentUserInfo] getMixableSitesForResource() called", {
62
- entityName: e,
63
- currentSiteId: t
64
- }), !u.value) throw o && console.error("[currentUserInfo] getMixableSitesForResource called before initialize"), Error("Store nincs inicializálva. Hívd meg előbb az initialize() metódust!");
65
- let n = a.find((e) => e.id === t);
66
- o && console.debug("[currentUserInfo] Current site lookup", {
67
- found: !!n,
68
- totalSites: a.length
69
- });
70
- let r = [];
71
- return a.forEach((t) => {
72
- if (n === void 0) {
73
- if (!v(t.id, e, "reader")) return;
74
- r.push(t);
75
- } else {
76
- if (n.entities.find((n) => n.type === e && n.allowedSiteIds.includes(t.id)) === void 0 || !v(t.id, e, "reader")) return;
77
- r.push(t);
1
+ import { joinUrl as e } from "./admins-components76.js";
2
+ import { ref as t } from "vue";
3
+ //#region src/services/createNativeFetch.ts
4
+ function n(n) {
5
+ return function(i) {
6
+ let a = t(null), o = t(null), s = t(null), c = t(null), l = t(!1), u = t(!1), d = "GET", f, p = "json", m = null, h = {
7
+ data: a,
8
+ error: o,
9
+ response: s,
10
+ statusCode: c,
11
+ isFetching: l,
12
+ canAbort: u,
13
+ get() {
14
+ return d = "GET", h;
15
+ },
16
+ post(e) {
17
+ return d = "POST", f = e, h;
18
+ },
19
+ put(e) {
20
+ return d = "PUT", f = e, h;
21
+ },
22
+ patch(e) {
23
+ return d = "PATCH", f = e, h;
24
+ },
25
+ delete(e) {
26
+ return d = "DELETE", f = e, h;
27
+ },
28
+ json() {
29
+ return p = "json", h;
30
+ },
31
+ text() {
32
+ return p = "text", h;
33
+ },
34
+ abort() {
35
+ m?.abort();
36
+ },
37
+ async execute() {
38
+ m = new AbortController(), l.value = !0, u.value = !0, o.value = null, s.value = null, c.value = null;
39
+ let t = {
40
+ ...n.fetchOptions,
41
+ method: d,
42
+ signal: m.signal
43
+ };
44
+ f != null && d !== "GET" && (t.body = r(f) ? JSON.stringify(f.value) : JSON.stringify(f));
45
+ let g = {
46
+ url: e(n.baseUrl, i),
47
+ options: t
48
+ };
49
+ try {
50
+ n.options?.beforeFetch?.(g);
51
+ let e = await fetch(g.url, g.options);
52
+ s.value = e, c.value = e.status;
53
+ let t = null;
54
+ if (p === "text") t = await e.text();
55
+ else {
56
+ let n = await e.text();
57
+ t = n ? JSON.parse(n) : null;
58
+ }
59
+ if (a.value = t, !e.ok) throw Error(e.statusText || `HTTP ${e.status}`);
60
+ n.options?.afterFetch?.({
61
+ data: t,
62
+ response: e
63
+ });
64
+ } catch (e) {
65
+ o.value = e, n.options?.onFetchError?.({
66
+ error: e,
67
+ response: s.value,
68
+ data: a.value
69
+ });
70
+ } finally {
71
+ l.value = !1, u.value = !1, m = null;
72
+ }
73
+ return h;
78
74
  }
79
- }), o && console.debug("[currentUserInfo] getMixableSitesForResource() result", {
80
- mixableCount: r.length,
81
- mixableSiteIds: r.map((e) => e.id)
82
- }), r;
83
- }
84
- function b(e, t) {
85
- return o && console.debug("[currentUserInfo] getMixableSiteIdsForResource() called", {
86
- entityName: e,
87
- currentSiteId: t
88
- }), y(e, t).map((e) => e.id);
89
- }
90
- return i = {
91
- user: s,
92
- state: c,
93
- error: l,
94
- isLoading: d,
95
- isAuthenticated: f,
96
- displayName: p,
97
- email: m,
98
- roles: h,
99
- initialize: g,
100
- clear: _,
101
- hasPermission: v,
102
- getMixableSitesForResource: y,
103
- getMixableSiteIdsForResource: b
104
- }, i;
75
+ };
76
+ return n.options?.immediate !== !1 && h.execute(), h;
77
+ };
78
+ }
79
+ function r(e) {
80
+ return !!e && typeof e == "object" && "value" in e;
105
81
  }
106
82
  //#endregion
107
- export { s as useCurrentUser };
83
+ export { n as createNativeFetch };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components106.js","names":[],"sources":["../src/services/currentUserInfo.ts"],"sourcesContent":["import { ref, computed, type Ref, type ComputedRef } from 'vue'\nimport { useArticleEditorService } from '@/services/articleEditorService'\nimport type { UserInfoModel, Site } from '@/services/models'\nimport { isIpInUrl } from '@/utils/ipUtils'\n\nexport type UserState = 'loading' | 'authenticated' | 'error'\n\nexport interface CurrentUserStore {\n user: Ref<UserInfoModel | null>\n state: Ref<UserState>\n error: Ref<string | null>\n isLoading: ComputedRef<boolean>\n isAuthenticated: ComputedRef<boolean>\n displayName: ComputedRef<string>\n email: ComputedRef<string>\n roles: ComputedRef<readonly string[]>\n initialize(backendUrl: string, enableLogging?: boolean): Promise<void>\n clear(): void\n hasPermission(\n siteId: string,\n entityName: string | 'all',\n accessLevel: 'reader' | 'admin',\n ): boolean\n getMixableSitesForResource(entityName: string | 'all', currentSiteId: string | undefined): Site[]\n getMixableSiteIdsForResource(\n entityName: string | 'all',\n currentSiteId: string | undefined,\n ): string[]\n}\n\nlet storeInstance: CurrentUserStore | null = null\nlet sites = [] as Site[]\nlet loggingEnabled = false\n\nexport function useCurrentUser(): CurrentUserStore {\n if (storeInstance) {\n if (loggingEnabled) console.debug('[currentUserInfo] Returning existing store instance')\n return storeInstance\n }\n\n if (loggingEnabled) console.debug('[currentUserInfo] Creating new store instance')\n const user = ref<UserInfoModel | null>(null)\n const state = ref<UserState>('loading')\n const error = ref<string | null>(null)\n const _backendUrl = ref<string | null>(null)\n const isLoading = computed(() => state.value === 'loading')\n const isAuthenticated = computed(() => state.value === 'authenticated' && user.value !== null)\n const displayName = computed(() => user.value?.displayName ?? '')\n const email = computed(() => user.value?.email ?? '')\n const roles = computed(() => user.value?.roles ?? [])\n\n async function initialize(backendUrl: string, enableLogging?: boolean): Promise<void> {\n loggingEnabled = enableLogging ?? false\n\n if (loggingEnabled) console.debug('[currentUserInfo] initialize() called', { backendUrl })\n\n if (loggingEnabled) console.debug('[currentUserInfo] Starting initialization')\n _backendUrl.value = backendUrl\n state.value = 'loading'\n error.value = null\n\n try {\n const service = useArticleEditorService(backendUrl)\n\n await new Promise<void>((resolve, reject) => {\n if (service.baseUrl.indexOf('localhost') != -1 || isIpInUrl(service.baseUrl)) {\n if (loggingEnabled)\n console.debug('[currentUserInfo] Localhost/IP detected, using dev credentials')\n user.value = {\n displayName: 'developer',\n email: 'developer@hvg.hu',\n roles: ['devadmin'],\n id: '00000000-0000-0000-0000-000000000000',\n }\n state.value = 'authenticated'\n return resolve()\n }\n\n service.whoAmI.successCallback = (userInfo: UserInfoModel) => {\n if (loggingEnabled) {\n console.debug('[currentUserInfo] whoAmI success', {\n displayName: userInfo.displayName,\n email: userInfo.email,\n rolesCount: userInfo.roles?.length ?? 0,\n })\n }\n user.value = userInfo\n state.value = 'authenticated'\n resolve()\n }\n\n service.whoAmI.errorCallback = (err) => {\n if (loggingEnabled) console.error('[currentUserInfo] whoAmI failed:', err)\n error.value = err.message ?? 'Ismeretlen hiba történt'\n state.value = 'error'\n reject(new Error(error.value))\n }\n\n if (loggingEnabled) console.debug('[currentUserInfo] Executing whoAmI request')\n service.whoAmI.execute()\n })\n\n await new Promise<void>((resolve, reject) => {\n service.sites.successCallback = (fetchedSites) => {\n if (loggingEnabled)\n console.debug('[currentUserInfo] sites fetch success', {\n sitesCount: fetchedSites.length,\n })\n sites = fetchedSites\n resolve()\n }\n\n service.sites.errorCallback = (err) => {\n if (loggingEnabled) console.error('[currentUserInfo] sites fetch failed:', err)\n reject(new Error(err.message ?? 'Ismeretlen hiba történt'))\n }\n\n if (loggingEnabled) console.debug('[currentUserInfo] Executing sites request')\n service.sites.execute()\n })\n\n if (loggingEnabled) console.debug('[currentUserInfo] Initialization completed successfully')\n } catch (err) {\n if (loggingEnabled) console.error('[currentUserInfo] initialize failed:', err)\n state.value = 'error'\n if (!error.value) {\n error.value = 'Felhasználói adatok vagy site-ok lekérése sikertelen'\n }\n throw err\n }\n }\n\n function clear(): void {\n if (loggingEnabled) console.debug('[currentUserInfo] clear() called, resetting all state')\n user.value = null\n state.value = 'loading'\n error.value = null\n _backendUrl.value = null\n sites = []\n }\n\n function hasPermission(\n siteId: string,\n entityName: string | 'all',\n accessLevel: 'reader' | 'admin',\n ): boolean {\n if (loggingEnabled)\n console.debug('[currentUserInfo] hasPermission() check', { siteId, entityName, accessLevel })\n\n if (!user.value?.roles || user.value.roles.length === 0) {\n if (loggingEnabled) console.debug('[currentUserInfo] hasPermission() denied: no roles')\n return false\n }\n\n if (user.value.roles.includes('devadmin')) {\n if (loggingEnabled) console.debug('[currentUserInfo] hasPermission() granted: devadmin role')\n return true\n }\n\n const requiredLevels = accessLevel === 'admin' ? ['admin'] : ['reader', 'admin']\n\n for (const level of requiredLevels) {\n const specificRole = `cms-${siteId}-${entityName}-${level}`\n if (user.value.roles.includes(specificRole)) {\n if (loggingEnabled)\n console.debug('[currentUserInfo] hasPermission() granted: specific role', specificRole)\n return true\n }\n\n const allentityRole = `cms-${siteId}-all-${level}`\n if (user.value.roles.includes(allentityRole)) {\n if (loggingEnabled)\n console.debug('[currentUserInfo] hasPermission() granted: all-entity role', allentityRole)\n return true\n }\n }\n\n if (loggingEnabled) console.debug('[currentUserInfo] hasPermission() denied: no matching roles')\n return false\n }\n\n function getMixableSitesForResource(\n entityName: string | 'all',\n currentSiteId: string | undefined,\n ): Site[] {\n if (loggingEnabled)\n console.debug('[currentUserInfo] getMixableSitesForResource() called', {\n entityName,\n currentSiteId,\n })\n\n if (!_backendUrl.value) {\n if (loggingEnabled)\n console.error('[currentUserInfo] getMixableSitesForResource called before initialize')\n throw new Error('Store nincs inicializálva. Hívd meg előbb az initialize() metódust!')\n }\n\n const currentSite = sites.find((site) => site.id === currentSiteId)\n if (loggingEnabled)\n console.debug('[currentUserInfo] Current site lookup', {\n found: !!currentSite,\n totalSites: sites.length,\n })\n\n const mixableSites = [] as Site[]\n sites.forEach((site) => {\n if (currentSite === undefined) {\n // Case 1: No current site specified - only check permissions\n if (!hasPermission(site.id, entityName, 'reader')) {\n return\n }\n mixableSites.push(site)\n } else {\n // Case 2: Current site specified - check entity allowance AND permissions\n if (\n currentSite.entities.find(\n (e) => e.type === entityName && e.allowedSiteIds.includes(site.id),\n ) === undefined\n ) {\n return\n }\n\n if (!hasPermission(site.id, entityName, 'reader')) {\n return\n }\n\n mixableSites.push(site)\n }\n })\n\n if (loggingEnabled) {\n console.debug('[currentUserInfo] getMixableSitesForResource() result', {\n mixableCount: mixableSites.length,\n mixableSiteIds: mixableSites.map((s) => s.id),\n })\n }\n return mixableSites\n }\n\n function getMixableSiteIdsForResource(\n entityName: string | 'all',\n currentSiteId: string | undefined,\n ): string[] {\n if (loggingEnabled)\n console.debug('[currentUserInfo] getMixableSiteIdsForResource() called', {\n entityName,\n currentSiteId,\n })\n const mixableSites = getMixableSitesForResource(entityName, currentSiteId)\n return mixableSites.map((site) => site.id)\n }\n\n storeInstance = {\n user,\n state,\n error,\n isLoading,\n isAuthenticated,\n displayName,\n email,\n roles,\n initialize,\n clear,\n hasPermission,\n getMixableSitesForResource,\n getMixableSiteIdsForResource,\n }\n\n return storeInstance\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components106.js","names":[],"sources":["../src/services/createNativeFetch.ts"],"sourcesContent":["/* VueUse helyett */\nimport { ref, type Ref } from 'vue'\nimport { joinUrl } from '@/utils/url'\n\nexport type NativeUseFetchReturn<T = unknown> = {\n data: Ref<T | null>\n error: Ref<any>\n response: Ref<Response | null>\n statusCode: Ref<number | null>\n isFetching: Ref<boolean>\n canAbort: Ref<boolean>\n\n get: () => NativeUseFetchReturn<T>\n post: (payload?: unknown) => NativeUseFetchReturn<T>\n put: (payload?: unknown) => NativeUseFetchReturn<T>\n patch: (payload?: unknown) => NativeUseFetchReturn<T>\n delete: (payload?: unknown) => NativeUseFetchReturn<T>\n\n json: <R = T>() => NativeUseFetchReturn<R>\n text: () => NativeUseFetchReturn<string>\n\n execute: () => Promise<NativeUseFetchReturn<T>>\n abort: () => void\n}\n\nexport type CreateFetchOptions = {\n baseUrl: string\n fetchOptions?: RequestInit\n options?: {\n immediate?: boolean\n beforeFetch?: (ctx: { url: string; options: RequestInit }) => any\n afterFetch?: (ctx: { data: unknown; response: Response }) => any\n onFetchError?: (ctx: { error: any; response: Response | null; data: unknown }) => any\n }\n}\n\nexport function createNativeFetch(config: CreateFetchOptions) {\n return function useNativeFetch<T = unknown>(url: string): NativeUseFetchReturn<T> {\n const data = ref<T | null>(null) as Ref<T | null>\n const error = ref<any>(null)\n const response = ref<Response | null>(null)\n const statusCode = ref<number | null>(null)\n const isFetching = ref(false)\n const canAbort = ref(false)\n\n let method = 'GET'\n let payload: unknown = undefined\n let parser: 'json' | 'text' = 'json'\n let controller: AbortController | null = null\n\n const instance: NativeUseFetchReturn<T> = {\n data,\n error,\n response,\n statusCode,\n isFetching,\n canAbort,\n\n get() {\n method = 'GET'\n return instance\n },\n\n post(p?: unknown) {\n method = 'POST'\n payload = p\n return instance\n },\n\n put(p?: unknown) {\n method = 'PUT'\n payload = p\n return instance\n },\n\n patch(p?: unknown) {\n method = 'PATCH'\n payload = p\n return instance\n },\n\n delete(p?: unknown) {\n method = 'DELETE'\n payload = p\n return instance\n },\n\n json<R = T>() {\n parser = 'json'\n return instance as unknown as NativeUseFetchReturn<R>\n },\n\n text() {\n parser = 'text'\n return instance as unknown as NativeUseFetchReturn<string>\n },\n\n abort() {\n controller?.abort()\n },\n\n async execute() {\n controller = new AbortController()\n\n isFetching.value = true\n canAbort.value = true\n error.value = null\n response.value = null\n statusCode.value = null\n\n const requestOptions: RequestInit = {\n ...config.fetchOptions,\n method,\n signal: controller.signal,\n }\n\n if (payload !== undefined && payload !== null && method !== 'GET') {\n requestOptions.body = isRefLike(payload)\n ? JSON.stringify(payload.value)\n : JSON.stringify(payload)\n }\n\n const ctx = {\n url: joinUrl(config.baseUrl, url),\n options: requestOptions,\n }\n\n try {\n config.options?.beforeFetch?.(ctx)\n\n const res = await fetch(ctx.url, ctx.options)\n\n response.value = res\n statusCode.value = res.status\n\n let parsedData: unknown = null\n\n if (parser === 'text') {\n parsedData = await res.text()\n } else {\n const text = await res.text()\n parsedData = text ? JSON.parse(text) : null\n }\n\n data.value = parsedData as T\n\n if (!res.ok) {\n throw new Error(res.statusText || `HTTP ${res.status}`)\n }\n\n config.options?.afterFetch?.({\n data: parsedData,\n response: res,\n })\n } catch (e: any) {\n error.value = e\n\n config.options?.onFetchError?.({\n error: e,\n response: response.value,\n data: data.value,\n })\n } finally {\n isFetching.value = false\n canAbort.value = false\n controller = null\n }\n\n return instance\n },\n } satisfies NativeUseFetchReturn<T>\n\n if (config.options?.immediate !== false) {\n instance.execute()\n }\n\n return instance\n }\n}\n\nfunction isRefLike(value: unknown): value is Ref<unknown> {\n return !!value && typeof value === 'object' && 'value' in value\n}\n"],"mappings":";;;AAoCA,SAAgB,EAAkB,GAA4B;CAC5D,OAAO,SAAqC,GAAsC;EAChF,IAAM,IAAO,EAAc,IAAI,GACzB,IAAQ,EAAS,IAAI,GACrB,IAAW,EAAqB,IAAI,GACpC,IAAa,EAAmB,IAAI,GACpC,IAAa,EAAI,EAAK,GACtB,IAAW,EAAI,EAAK,GAEtB,IAAS,OACT,GACA,IAA0B,QAC1B,IAAqC,MAEnC,IAAoC;GACxC;GACA;GACA;GACA;GACA;GACA;GAEA,MAAM;IAEJ,OADA,IAAS,OACF;GACT;GAEA,KAAK,GAAa;IAGhB,OAFA,IAAS,QACT,IAAU,GACH;GACT;GAEA,IAAI,GAAa;IAGf,OAFA,IAAS,OACT,IAAU,GACH;GACT;GAEA,MAAM,GAAa;IAGjB,OAFA,IAAS,SACT,IAAU,GACH;GACT;GAEA,OAAO,GAAa;IAGlB,OAFA,IAAS,UACT,IAAU,GACH;GACT;GAEA,OAAc;IAEZ,OADA,IAAS,QACF;GACT;GAEA,OAAO;IAEL,OADA,IAAS,QACF;GACT;GAEA,QAAQ;IACN,GAAY,MAAM;GACpB;GAEA,MAAM,UAAU;IAOd,AANA,IAAa,IAAI,gBAAgB,GAEjC,EAAW,QAAQ,IACnB,EAAS,QAAQ,IACjB,EAAM,QAAQ,MACd,EAAS,QAAQ,MACjB,EAAW,QAAQ;IAEnB,IAAM,IAA8B;KAClC,GAAG,EAAO;KACV;KACA,QAAQ,EAAW;IACrB;IAEA,AAAI,KAAqC,QAAQ,MAAW,UAC1D,EAAe,OAAO,EAAU,CAAO,IACnC,KAAK,UAAU,EAAQ,KAAK,IAC5B,KAAK,UAAU,CAAO;IAG5B,IAAM,IAAM;KACV,KAAK,EAAQ,EAAO,SAAS,CAAG;KAChC,SAAS;IACX;IAEA,IAAI;KACF,EAAO,SAAS,cAAc,CAAG;KAEjC,IAAM,IAAM,MAAM,MAAM,EAAI,KAAK,EAAI,OAAO;KAG5C,AADA,EAAS,QAAQ,GACjB,EAAW,QAAQ,EAAI;KAEvB,IAAI,IAAsB;KAE1B,IAAI,MAAW,QACb,IAAa,MAAM,EAAI,KAAK;UACvB;MACL,IAAM,IAAO,MAAM,EAAI,KAAK;MAC5B,IAAa,IAAO,KAAK,MAAM,CAAI,IAAI;KACzC;KAIA,IAFA,EAAK,QAAQ,GAET,CAAC,EAAI,IACP,MAAU,MAAM,EAAI,cAAc,QAAQ,EAAI,QAAQ;KAGxD,EAAO,SAAS,aAAa;MAC3B,MAAM;MACN,UAAU;KACZ,CAAC;IACH,SAAS,GAAQ;KAGf,AAFA,EAAM,QAAQ,GAEd,EAAO,SAAS,eAAe;MAC7B,OAAO;MACP,UAAU,EAAS;MACnB,MAAM,EAAK;KACb,CAAC;IACH,UAAU;KAGR,AAFA,EAAW,QAAQ,IACnB,EAAS,QAAQ,IACjB,IAAa;IACf;IAEA,OAAO;GACT;EACF;EAMA,OAJI,EAAO,SAAS,cAAc,MAChC,EAAS,QAAQ,GAGZ;CACT;AACF;AAEA,SAAS,EAAU,GAAuC;CACxD,OAAO,CAAC,CAAC,KAAS,OAAO,KAAU,YAAY,WAAW;AAC5D"}