PageSourceSearch

https://cross2map.com/chunk-7DCNZT2O.js

js cross2map.com collected 2026-09-24 14:41:35 UTC 76,564 bytes, 1,373 lines download raw bytes

1import {
2  FormsModule
3} from "./chunk-O6KR7N3B.js";
4import {
5  TranslatePipe
6} from "./chunk-7BJ5A7YX.js";
7import {
8  AuthService
9} from "./chunk-RONQE5UT.js";
10import {
11  ToastService
12} from "./chunk-IKJIVOCQ.js";
13import {
14  ApiService
15} from "./chunk-J3VFWUMD.js";
16import "./chunk-ASZL34XZ.js";
17import {
18  CommonModule,
19  TranslationService
20} from "./chunk-VQ4JJ6J4.js";
21import "./chunk-JIRI2W7L.js";
22import {
23  Component,
24  Injectable,
25  computed,
26  inject,
27  map,
28  setClassMetadata,
29  signal,
30  ɵsetClassDebugInfo,
31  ɵɵadvance,
32  ɵɵclassProp,
33  ɵɵconditional,
34  ɵɵconditionalCreate,
35  ɵɵdefineComponent,
36  ɵɵdefineInjectable,
37  ɵɵdomElement,
38  ɵɵdomElementEnd,
39  ɵɵdomElementStart,
40  ɵɵdomListener,
41  ɵɵdomProperty,
42  ɵɵgetCurrentView,
43  ɵɵnextContext,
44  ɵɵpipe,
45  ɵɵpipeBind1,
46  ɵɵrepeater,
47  ɵɵrepeaterCreate,
48  ɵɵrepeaterTrackByIdentity,
49  ɵɵresetView,
50  ɵɵrestoreView,
51  ɵɵtext,
52  ɵɵtextInterpolate,
53  ɵɵtextInterpolate1
54} from "./chunk-SD5VU54W.js";
55import {
56  __spreadProps,
57  __spreadValues
58} from "./chunk-CX3I3NQG.js";
59
60// src/app/features/dashboard/services/settings.service.ts
61var SettingsService = class _SettingsService {
62  api = inject(ApiService);
63  // Helper to extract array from API response { data: { items: [...] } }
64  extractArray(response) {
65    if (Array.isArray(response)) {
66      return response;
67    }
68    if (response.data?.items) {
69      return response.data.items;
70    }
71    if (response.items) {
72      return response.items;
73    }
74    return [];
75  }
76  // ============================================
77  // TAGS
78  // ============================================
79  getTags() {
80    return this.api.get("/tag").pipe(map((response) => this.extractArray(response)));
81  }
82  getActiveTags() {
83    return this.api.get("/tag/active").pipe(map((response) => this.extractArray(response)));
84  }
85  getTag(id) {
86    return this.api.get(`/tag/${id}`);
87  }
88  createTag(data) {
89    return this.api.post("/tag", data);
90  }
91  updateTag(id, data) {
92    return this.api.patch(`/tag/${id}`, data);
93  }
94  deleteTag(id) {
95    return this.api.delete(`/tag/${id}`);
96  }
97  // ============================================
98  // CUISINES
99  // ============================================
100  getCuisines() {
101    return this.api.get("/cuisine").pipe(map((response) => this.extractArray(response)));
102  }
103  getActiveCuisines() {
104    return this.api.get("/cuisine/active").pipe(map((response) => this.extractArray(response)));
105  }
106  getCuisine(id) {
107    return this.api.get(`/cuisine/${id}`);
108  }
109  createCuisine(data) {
110    return this.api.post("/cuisine", data);
111  }
112  updateCuisine(id, data) {
113    return this.api.patch(`/cuisine/${id}`, data);
114  }
115  deleteCuisine(id) {
116    return this.api.delete(`/cuisine/${id}`);
117  }
118  static \u0275fac = function SettingsService_Factory(__ngFactoryType__) {
119    return new (__ngFactoryType__ || _SettingsService)();
120  };
121  static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({ token: _SettingsService, factory: _SettingsService.\u0275fac, providedIn: "root" });
122};
123(() => {
124  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SettingsService, [{
125    type: Injectable,
126    args: [{
127      providedIn: "root"
128    }]
129  }], null, null);
130})();
131
132// src/app/models/settings.model.ts
133function getSettingsName(item, lang) {
134  if (!item)
135    return "";
136  if (item.name)
137    return item.name;
138  if (item.translations?.length) {
139    const translation = item.translations.find((t) => t.lang === lang);
140    return translation?.name || item.translations[0]?.name || "";
141  }
142  return "";
143}
144
145// src/app/features/dashboard/pages/settings/settings.component.ts
146var _forTrack0 = ($index, $item) => $item._id;
147function SettingsComponent_Conditional_30_Template(rf, ctx) {
148  if (rf & 1) {
149    \u0275\u0275domElementStart(0, "div", 10);
150    \u0275\u0275domElement(1, "div", 14);
151    \u0275\u0275domElementStart(2, "p");
152    \u0275\u0275text(3);
153    \u0275\u0275pipe(4, "translate");
154    \u0275\u0275domElementEnd()();
155  }
156  if (rf & 2) {
157    \u0275\u0275advance(3);
158    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(4, 1, "common.loading"));
159  }
160}
161function SettingsComponent_Conditional_31_Conditional_1_Conditional_0_Template(rf, ctx) {
162  if (rf & 1) {
163    \u0275\u0275domElementStart(0, "div", 15)(1, "span", 6);
164    \u0275\u0275text(2, "label_off");
165    \u0275\u0275domElementEnd();
166    \u0275\u0275domElementStart(3, "p");
167    \u0275\u0275text(4);
168    \u0275\u0275pipe(5, "translate");
169    \u0275\u0275domElementEnd()();
170  }
171  if (rf & 2) {
172    \u0275\u0275advance(4);
173    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 1, "settings.tags.empty"));
174  }
175}
176function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_4_Template(rf, ctx) {
177  if (rf & 1) {
178    \u0275\u0275domElementStart(0, "span", 21);
179    \u0275\u0275pipe(1, "translate");
180    \u0275\u0275text(2);
181    \u0275\u0275pipe(3, "translate");
182    \u0275\u0275domElementEnd();
183  }
184  if (rf & 2) {
185    const tag_r1 = \u0275\u0275nextContext().$implicit;
186    const ctx_r1 = \u0275\u0275nextContext(4);
187    \u0275\u0275domProperty("title", \u0275\u0275pipeBind1(1, 2, "settings.deletedAt") + ": " + ctx_r1.formatDeletedDate(tag_r1.deletedAt));
188    \u0275\u0275advance(2);
189    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(3, 4, "common.deleted"), " ");
190  }
191}
192function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_5_Template(rf, ctx) {
193  if (rf & 1) {
194    \u0275\u0275domElementStart(0, "span", 22);
195    \u0275\u0275text(1);
196    \u0275\u0275pipe(2, "translate");
197    \u0275\u0275domElementEnd();
198  }
199  if (rf & 2) {
200    \u0275\u0275advance();
201    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(2, 1, "common.inactive"));
202  }
203}
204function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_7_Template(rf, ctx) {
205  if (rf & 1) {
206    const _r3 = \u0275\u0275getCurrentView();
207    \u0275\u0275domElementStart(0, "div", 24)(1, "span", 25);
208    \u0275\u0275text(2);
209    \u0275\u0275pipe(3, "translate");
210    \u0275\u0275domElementEnd();
211    \u0275\u0275domElementStart(4, "button", 26);
212    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_7_Template_button_click_4_listener() {
213      \u0275\u0275restoreView(_r3);
214      const tag_r1 = \u0275\u0275nextContext().$implicit;
215      const ctx_r1 = \u0275\u0275nextContext(4);
216      return \u0275\u0275resetView(ctx_r1.deleteItem(tag_r1._id));
217    });
218    \u0275\u0275text(5);
219    \u0275\u0275pipe(6, "translate");
220    \u0275\u0275domElementEnd();
221    \u0275\u0275domElementStart(7, "button", 27);
222    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_7_Template_button_click_7_listener() {
223      \u0275\u0275restoreView(_r3);
224      const ctx_r1 = \u0275\u0275nextContext(5);
225      return \u0275\u0275resetView(ctx_r1.cancelDelete());
226    });
227    \u0275\u0275text(8);
228    \u0275\u0275pipe(9, "translate");
229    \u0275\u0275domElementEnd()();
230  }
231  if (rf & 2) {
232    const ctx_r1 = \u0275\u0275nextContext(5);
233    \u0275\u0275advance(2);
234    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 5, "common.deleteConfirm"));
235    \u0275\u0275advance(2);
236    \u0275\u0275domProperty("disabled", ctx_r1.isSubmitting());
237    \u0275\u0275advance();
238    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(6, 7, "common.yes"), " ");
239    \u0275\u0275advance(2);
240    \u0275\u0275domProperty("disabled", ctx_r1.isSubmitting());
241    \u0275\u0275advance();
242    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(9, 9, "common.no"), " ");
243  }
244}
245function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_8_Template(rf, ctx) {
246  if (rf & 1) {
247    const _r4 = \u0275\u0275getCurrentView();
248    \u0275\u0275domElementStart(0, "button", 28);
249    \u0275\u0275pipe(1, "translate");
250    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_8_Template_button_click_0_listener() {
251      \u0275\u0275restoreView(_r4);
252      const tag_r1 = \u0275\u0275nextContext().$implicit;
253      const ctx_r1 = \u0275\u0275nextContext(4);
254      return \u0275\u0275resetView(ctx_r1.openEditDialog(tag_r1));
255    });
256    \u0275\u0275domElementStart(2, "span", 6);
257    \u0275\u0275text(3, "edit");
258    \u0275\u0275domElementEnd()();
259    \u0275\u0275domElementStart(4, "button", 29);
260    \u0275\u0275pipe(5, "translate");
261    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_8_Template_button_click_4_listener() {
262      \u0275\u0275restoreView(_r4);
263      const tag_r1 = \u0275\u0275nextContext().$implicit;
264      const ctx_r1 = \u0275\u0275nextContext(4);
265      return \u0275\u0275resetView(ctx_r1.confirmDelete(tag_r1._id));
266    });
267    \u0275\u0275domElementStart(6, "span", 6);
268    \u0275\u0275text(7, "delete");
269    \u0275\u0275domElementEnd()();
270  }
271  if (rf & 2) {
272    \u0275\u0275domProperty("title", \u0275\u0275pipeBind1(1, 2, "common.edit"));
273    \u0275\u0275advance(4);
274    \u0275\u0275domProperty("title", \u0275\u0275pipeBind1(5, 4, "common.delete"));
275  }
276}
277function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Template(rf, ctx) {
278  if (rf & 1) {
279    \u0275\u0275domElementStart(0, "div", 18)(1, "div", 19)(2, "span", 20);
280    \u0275\u0275text(3);
281    \u0275\u0275domElementEnd();
282    \u0275\u0275conditionalCreate(4, SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_4_Template, 4, 6, "span", 21)(5, SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_5_Template, 3, 3, "span", 22);
283    \u0275\u0275domElementEnd();
284    \u0275\u0275domElementStart(6, "div", 23);
285    \u0275\u0275conditionalCreate(7, SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_7_Template, 10, 11, "div", 24)(8, SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Conditional_8_Template, 8, 6);
286    \u0275\u0275domElementEnd()();
287  }
288  if (rf & 2) {
289    const tag_r1 = ctx.$implicit;
290    const ctx_r1 = \u0275\u0275nextContext(4);
291    \u0275\u0275classProp("inactive", !tag_r1.active)("deleted", ctx_r1.isDeleted(tag_r1));
292    \u0275\u0275advance(3);
293    \u0275\u0275textInterpolate(ctx_r1.getName(tag_r1));
294    \u0275\u0275advance();
295    \u0275\u0275conditional(ctx_r1.isDeleted(tag_r1) ? 4 : !tag_r1.active ? 5 : -1);
296    \u0275\u0275advance(3);
297    \u0275\u0275conditional(ctx_r1.deletingId() === tag_r1._id ? 7 : 8);
298  }
299}
300function SettingsComponent_Conditional_31_Conditional_1_Conditional_1_Template(rf, ctx) {
301  if (rf & 1) {
302    \u0275\u0275domElementStart(0, "div", 16);
303    \u0275\u0275repeaterCreate(1, SettingsComponent_Conditional_31_Conditional_1_Conditional_1_For_2_Template, 9, 7, "div", 17, _forTrack0);
304    \u0275\u0275domElementEnd();
305  }
306  if (rf & 2) {
307    const ctx_r1 = \u0275\u0275nextContext(3);
308    \u0275\u0275advance();
309    \u0275\u0275repeater(ctx_r1.tags());
310  }
311}
312function SettingsComponent_Conditional_31_Conditional_1_Template(rf, ctx) {
313  if (rf & 1) {
314    \u0275\u0275conditionalCreate(0, SettingsComponent_Conditional_31_Conditional_1_Conditional_0_Template, 6, 3, "div", 15)(1, SettingsComponent_Conditional_31_Conditional_1_Conditional_1_Template, 3, 0, "div", 16);
315  }
316  if (rf & 2) {
317    const ctx_r1 = \u0275\u0275nextContext(2);
318    \u0275\u0275conditional(ctx_r1.tags().length === 0 ? 0 : 1);
319  }
320}
321function SettingsComponent_Conditional_31_Conditional_2_Conditional_0_Template(rf, ctx) {
322  if (rf & 1) {
323    \u0275\u0275domElementStart(0, "div", 15)(1, "span", 6);
324    \u0275\u0275text(2, "no_meals");
325    \u0275\u0275domElementEnd();
326    \u0275\u0275domElementStart(3, "p");
327    \u0275\u0275text(4);
328    \u0275\u0275pipe(5, "translate");
329    \u0275\u0275domElementEnd()();
330  }
331  if (rf & 2) {
332    \u0275\u0275advance(4);
333    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 1, "settings.cuisines.empty"));
334  }
335}
336function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_7_Template(rf, ctx) {
337  if (rf & 1) {
338    \u0275\u0275domElementStart(0, "span", 21);
339    \u0275\u0275pipe(1, "translate");
340    \u0275\u0275text(2);
341    \u0275\u0275pipe(3, "translate");
342    \u0275\u0275domElementEnd();
343  }
344  if (rf & 2) {
345    const cuisine_r5 = \u0275\u0275nextContext().$implicit;
346    const ctx_r1 = \u0275\u0275nextContext(4);
347    \u0275\u0275domProperty("title", \u0275\u0275pipeBind1(1, 2, "settings.deletedAt") + ": " + ctx_r1.formatDeletedDate(cuisine_r5.deletedAt));
348    \u0275\u0275advance(2);
349    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(3, 4, "common.deleted"), " ");
350  }
351}
352function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_8_Template(rf, ctx) {
353  if (rf & 1) {
354    \u0275\u0275domElementStart(0, "span", 22);
355    \u0275\u0275text(1);
356    \u0275\u0275pipe(2, "translate");
357    \u0275\u0275domElementEnd();
358  }
359  if (rf & 2) {
360    \u0275\u0275advance();
361    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(2, 1, "common.inactive"));
362  }
363}
364function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_10_Template(rf, ctx) {
365  if (rf & 1) {
366    const _r6 = \u0275\u0275getCurrentView();
367    \u0275\u0275domElementStart(0, "div", 24)(1, "span", 25);
368    \u0275\u0275text(2);
369    \u0275\u0275pipe(3, "translate");
370    \u0275\u0275domElementEnd();
371    \u0275\u0275domElementStart(4, "button", 26);
372    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_10_Template_button_click_4_listener() {
373      \u0275\u0275restoreView(_r6);
374      const cuisine_r5 = \u0275\u0275nextContext().$implicit;
375      const ctx_r1 = \u0275\u0275nextContext(4);
376      return \u0275\u0275resetView(ctx_r1.deleteItem(cuisine_r5._id));
377    });
378    \u0275\u0275text(5);
379    \u0275\u0275pipe(6, "translate");
380    \u0275\u0275domElementEnd();
381    \u0275\u0275domElementStart(7, "button", 27);
382    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_10_Template_button_click_7_listener() {
383      \u0275\u0275restoreView(_r6);
384      const ctx_r1 = \u0275\u0275nextContext(5);
385      return \u0275\u0275resetView(ctx_r1.cancelDelete());
386    });
387    \u0275\u0275text(8);
388    \u0275\u0275pipe(9, "translate");
389    \u0275\u0275domElementEnd()();
390  }
391  if (rf & 2) {
392    const ctx_r1 = \u0275\u0275nextContext(5);
393    \u0275\u0275advance(2);
394    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 5, "common.deleteConfirm"));
395    \u0275\u0275advance(2);
396    \u0275\u0275domProperty("disabled", ctx_r1.isSubmitting());
397    \u0275\u0275advance();
398    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(6, 7, "common.yes"), " ");
399    \u0275\u0275advance(2);
400    \u0275\u0275domProperty("disabled", ctx_r1.isSubmitting());
401    \u0275\u0275advance();
402    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(9, 9, "common.no"), " ");
403  }
404}
405function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_11_Template(rf, ctx) {
406  if (rf & 1) {
407    const _r7 = \u0275\u0275getCurrentView();
408    \u0275\u0275domElementStart(0, "button", 28);
409    \u0275\u0275pipe(1, "translate");
410    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_11_Template_button_click_0_listener() {
411      \u0275\u0275restoreView(_r7);
412      const cuisine_r5 = \u0275\u0275nextContext().$implicit;
413      const ctx_r1 = \u0275\u0275nextContext(4);
414      return \u0275\u0275resetView(ctx_r1.openEditDialog(cuisine_r5));
415    });
416    \u0275\u0275domElementStart(2, "span", 6);
417    \u0275\u0275text(3, "edit");
418    \u0275\u0275domElementEnd()();
419    \u0275\u0275domElementStart(4, "button", 29);
420    \u0275\u0275pipe(5, "translate");
421    \u0275\u0275domListener("click", function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_11_Template_button_click_4_listener() {
422      \u0275\u0275restoreView(_r7);
423      const cuisine_r5 = \u0275\u0275nextContext().$implicit;
424      const ctx_r1 = \u0275\u0275nextContext(4);
425      return \u0275\u0275resetView(ctx_r1.confirmDelete(cuisine_r5._id));
426    });
427    \u0275\u0275domElementStart(6, "span", 6);
428    \u0275\u0275text(7, "delete");
429    \u0275\u0275domElementEnd()();
430  }
431  if (rf & 2) {
432    \u0275\u0275domProperty("title", \u0275\u0275pipeBind1(1, 2, "common.edit"));
433    \u0275\u0275advance(4);
434    \u0275\u0275domProperty("title", \u0275\u0275pipeBind1(5, 4, "common.delete"));
435  }
436}
437function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Template(rf, ctx) {
438  if (rf & 1) {
439    \u0275\u0275domElementStart(0, "div", 18)(1, "div", 19)(2, "span", 20);
440    \u0275\u0275text(3);
441    \u0275\u0275domElementEnd();
442    \u0275\u0275domElementStart(4, "span", 30);
443    \u0275\u0275text(5);
444    \u0275\u0275pipe(6, "translate");
445    \u0275\u0275domElementEnd();
446    \u0275\u0275conditionalCreate(7, SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_7_Template, 4, 6, "span", 21)(8, SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_8_Template, 3, 3, "span", 22);
447    \u0275\u0275domElementEnd();
448    \u0275\u0275domElementStart(9, "div", 23);
449    \u0275\u0275conditionalCreate(10, SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_10_Template, 10, 11, "div", 24)(11, SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Conditional_11_Template, 8, 6);
450    \u0275\u0275domElementEnd()();
451  }
452  if (rf & 2) {
453    const cuisine_r5 = ctx.$implicit;
454    const ctx_r1 = \u0275\u0275nextContext(4);
455    \u0275\u0275classProp("inactive", !cuisine_r5.active)("deleted", ctx_r1.isDeleted(cuisine_r5));
456    \u0275\u0275advance(3);
457    \u0275\u0275textInterpolate(ctx_r1.getName(cuisine_r5));
458    \u0275\u0275advance(2);
459    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(6, 8, "settings.cuisines.types." + cuisine_r5.type));
460    \u0275\u0275advance(2);
461    \u0275\u0275conditional(ctx_r1.isDeleted(cuisine_r5) ? 7 : !cuisine_r5.active ? 8 : -1);
462    \u0275\u0275advance(3);
463    \u0275\u0275conditional(ctx_r1.deletingId() === cuisine_r5._id ? 10 : 11);
464  }
465}
466function SettingsComponent_Conditional_31_Conditional_2_Conditional_1_Template(rf, ctx) {
467  if (rf & 1) {
468    \u0275\u0275domElementStart(0, "div", 16);
469    \u0275\u0275repeaterCreate(1, SettingsComponent_Conditional_31_Conditional_2_Conditional_1_For_2_Template, 12, 10, "div", 17, _forTrack0);
470    \u0275\u0275domElementEnd();
471  }
472  if (rf & 2) {
473    const ctx_r1 = \u0275\u0275nextContext(3);
474    \u0275\u0275advance();
475    \u0275\u0275repeater(ctx_r1.cuisines());
476  }
477}
478function SettingsComponent_Conditional_31_Conditional_2_Template(rf, ctx) {
479  if (rf & 1) {
480    \u0275\u0275conditionalCreate(0, SettingsComponent_Conditional_31_Conditional_2_Conditional_0_Template, 6, 3, "div", 15)(1, SettingsComponent_Conditional_31_Conditional_2_Conditional_1_Template, 3, 0, "div", 16);
481  }
482  if (rf & 2) {
483    const ctx_r1 = \u0275\u0275nextContext(2);
484    \u0275\u0275conditional(ctx_r1.cuisines().length === 0 ? 0 : 1);
485  }
486}
487function SettingsComponent_Conditional_31_Template(rf, ctx) {
488  if (rf & 1) {
489    \u0275\u0275domElementStart(0, "div", 11);
490    \u0275\u0275conditionalCreate(1, SettingsComponent_Conditional_31_Conditional_1_Template, 2, 1);
491    \u0275\u0275conditionalCreate(2, SettingsComponent_Conditional_31_Conditional_2_Template, 2, 1);
492    \u0275\u0275domElementEnd();
493  }
494  if (rf & 2) {
495    const ctx_r1 = \u0275\u0275nextContext();
496    \u0275\u0275advance();
497    \u0275\u0275conditional(ctx_r1.activeTab() === "tags" ? 1 : -1);
498    \u0275\u0275advance();
499    \u0275\u0275conditional(ctx_r1.activeTab() === "cuisines" ? 2 : -1);
500  }
501}
502function SettingsComponent_Conditional_32_Template(rf, ctx) {
503  if (rf & 1) {
504    const _r8 = \u0275\u0275getCurrentView();
505    \u0275\u0275domElementStart(0, "div", 31);
506    \u0275\u0275domListener("click", function SettingsComponent_Conditional_32_Template_div_click_0_listener() {
507      \u0275\u0275restoreView(_r8);
508      const ctx_r1 = \u0275\u0275nextContext();
509      return \u0275\u0275resetView(ctx_r1.closeDialog());
510    });
511    \u0275\u0275domElementEnd();
512  }
513}
514function SettingsComponent_Conditional_33_Conditional_3_Template(rf, ctx) {
515  if (rf & 1) {
516    \u0275\u0275text(0);
517    \u0275\u0275pipe(1, "translate");
518    \u0275\u0275pipe(2, "translate");
519  }
520  if (rf & 2) {
521    const ctx_r1 = \u0275\u0275nextContext(2);
522    \u0275\u0275textInterpolate1(" ", ctx_r1.activeTab() === "tags" ? \u0275\u0275pipeBind1(1, 1, "settings.tags.add") : \u0275\u0275pipeBind1(2, 3, "settings.cuisines.add"), " ");
523  }
524}
525function SettingsComponent_Conditional_33_Conditional_4_Template(rf, ctx) {
526  if (rf & 1) {
527    \u0275\u0275text(0);
528    \u0275\u0275pipe(1, "translate");
529    \u0275\u0275pipe(2, "translate");
530  }
531  if (rf & 2) {
532    const ctx_r1 = \u0275\u0275nextContext(2);
533    \u0275\u0275textInterpolate1(" ", ctx_r1.activeTab() === "tags" ? \u0275\u0275pipeBind1(1, 1, "settings.tags.edit") : \u0275\u0275pipeBind1(2, 3, "settings.cuisines.edit"), " ");
534  }
535}
536function SettingsComponent_Conditional_33_Conditional_29_For_6_Template(rf, ctx) {
537  if (rf & 1) {
538    const _r10 = \u0275\u0275getCurrentView();
539    \u0275\u0275domElementStart(0, "button", 52);
540    \u0275\u0275domListener("click", function SettingsComponent_Conditional_33_Conditional_29_For_6_Template_button_click_0_listener() {
541      const type_r11 = \u0275\u0275restoreView(_r10).$implicit;
542      const ctx_r1 = \u0275\u0275nextContext(3);
543      return \u0275\u0275resetView(ctx_r1.setCuisineType(type_r11));
544    });
545    \u0275\u0275text(1);
546    \u0275\u0275pipe(2, "translate");
547    \u0275\u0275domElementEnd();
548  }
549  if (rf & 2) {
550    const type_r11 = ctx.$implicit;
551    const ctx_r1 = \u0275\u0275nextContext(3);
552    \u0275\u0275classProp("active", ctx_r1.formCuisineType() === type_r11);
553    \u0275\u0275advance();
554    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(2, 3, "settings.cuisines.types." + type_r11), " ");
555  }
556}
557function SettingsComponent_Conditional_33_Conditional_29_Template(rf, ctx) {
558  if (rf & 1) {
559    \u0275\u0275domElementStart(0, "div", 36)(1, "label", 37);
560    \u0275\u0275text(2);
561    \u0275\u0275pipe(3, "translate");
562    \u0275\u0275domElementEnd();
563    \u0275\u0275domElementStart(4, "div", 50);
564    \u0275\u0275repeaterCreate(5, SettingsComponent_Conditional_33_Conditional_29_For_6_Template, 3, 5, "button", 51, \u0275\u0275repeaterTrackByIdentity);
565    \u0275\u0275domElementEnd()();
566  }
567  if (rf & 2) {
568    const ctx_r1 = \u0275\u0275nextContext(2);
569    \u0275\u0275advance(2);
570    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 1, "settings.form.type"));
571    \u0275\u0275advance(3);
572    \u0275\u0275repeater(ctx_r1.cuisineTypes);
573  }
574}
575function SettingsComponent_Conditional_33_Conditional_42_Template(rf, ctx) {
576  if (rf & 1) {
577    \u0275\u0275domElement(0, "span", 49);
578  }
579}
580function SettingsComponent_Conditional_33_Template(rf, ctx) {
581  if (rf & 1) {
582    const _r9 = \u0275\u0275getCurrentView();
583    \u0275\u0275domElementStart(0, "div", 13)(1, "div", 32)(2, "h2", 33);
584    \u0275\u0275conditionalCreate(3, SettingsComponent_Conditional_33_Conditional_3_Template, 3, 5)(4, SettingsComponent_Conditional_33_Conditional_4_Template, 3, 5);
585    \u0275\u0275domElementEnd();
586    \u0275\u0275domElementStart(5, "button", 34);
587    \u0275\u0275domListener("click", function SettingsComponent_Conditional_33_Template_button_click_5_listener() {
588      \u0275\u0275restoreView(_r9);
589      const ctx_r1 = \u0275\u0275nextContext();
590      return \u0275\u0275resetView(ctx_r1.closeDialog());
591    });
592    \u0275\u0275domElementStart(6, "span", 6);
593    \u0275\u0275text(7, "close");
594    \u0275\u0275domElementEnd()()();
595    \u0275\u0275domElementStart(8, "div", 35)(9, "div", 36)(10, "label", 37);
596    \u0275\u0275text(11);
597    \u0275\u0275pipe(12, "translate");
598    \u0275\u0275domElementEnd();
599    \u0275\u0275domElementStart(13, "div", 38)(14, "div", 39)(15, "span", 40);
600    \u0275\u0275text(16, "RO");
601    \u0275\u0275domElementEnd();
602    \u0275\u0275domElementStart(17, "input", 41);
603    \u0275\u0275pipe(18, "translate");
604    \u0275\u0275domListener("input", function SettingsComponent_Conditional_33_Template_input_input_17_listener($event) {
605      \u0275\u0275restoreView(_r9);
606      const ctx_r1 = \u0275\u0275nextContext();
607      return \u0275\u0275resetView(ctx_r1.updateTranslation("ro", $event));
608    });
609    \u0275\u0275domElementEnd()();
610    \u0275\u0275domElementStart(19, "div", 39)(20, "span", 40);
611    \u0275\u0275text(21, "EN");
612    \u0275\u0275domElementEnd();
613    \u0275\u0275domElementStart(22, "input", 41);
614    \u0275\u0275pipe(23, "translate");
615    \u0275\u0275domListener("input", function SettingsComponent_Conditional_33_Template_input_input_22_listener($event) {
616      \u0275\u0275restoreView(_r9);
617      const ctx_r1 = \u0275\u0275nextContext();
618      return \u0275\u0275resetView(ctx_r1.updateTranslation("en", $event));
619    });
620    \u0275\u0275domElementEnd()();
621    \u0275\u0275domElementStart(24, "div", 39)(25, "span", 40);
622    \u0275\u0275text(26, "RU");
623    \u0275\u0275domElementEnd();
624    \u0275\u0275domElementStart(27, "input", 41);
625    \u0275\u0275pipe(28, "translate");
626    \u0275\u0275domListener("input", function SettingsComponent_Conditional_33_Template_input_input_27_listener($event) {
627      \u0275\u0275restoreView(_r9);
628      const ctx_r1 = \u0275\u0275nextContext();
629      return \u0275\u0275resetView(ctx_r1.updateTranslation("ru", $event));
630    });
631    \u0275\u0275domElementEnd()()()();
632    \u0275\u0275conditionalCreate(29, SettingsComponent_Conditional_33_Conditional_29_Template, 7, 3, "div", 36);
633    \u0275\u0275domElementStart(30, "div", 36)(31, "label", 42);
634    \u0275\u0275domListener("click", function SettingsComponent_Conditional_33_Template_label_click_31_listener() {
635      \u0275\u0275restoreView(_r9);
636      const ctx_r1 = \u0275\u0275nextContext();
637      return \u0275\u0275resetView(ctx_r1.toggleActive());
638    });
639    \u0275\u0275domElementStart(32, "span", 43);
640    \u0275\u0275text(33);
641    \u0275\u0275pipe(34, "translate");
642    \u0275\u0275domElementEnd();
643    \u0275\u0275domElementStart(35, "span", 44);
644    \u0275\u0275domElement(36, "span", 45);
645    \u0275\u0275domElementEnd()()()();
646    \u0275\u0275domElementStart(37, "div", 46)(38, "button", 47);
647    \u0275\u0275domListener("click", function SettingsComponent_Conditional_33_Template_button_click_38_listener() {
648      \u0275\u0275restoreView(_r9);
649      const ctx_r1 = \u0275\u0275nextContext();
650      return \u0275\u0275resetView(ctx_r1.closeDialog());
651    });
652    \u0275\u0275text(39);
653    \u0275\u0275pipe(40, "translate");
654    \u0275\u0275domElementEnd();
655    \u0275\u0275domElementStart(41, "button", 48);
656    \u0275\u0275domListener("click", function SettingsComponent_Conditional_33_Template_button_click_41_listener() {
657      \u0275\u0275restoreView(_r9);
658      const ctx_r1 = \u0275\u0275nextContext();
659      return \u0275\u0275resetView(ctx_r1.saveItem());
660    });
661    \u0275\u0275conditionalCreate(42, SettingsComponent_Conditional_33_Conditional_42_Template, 1, 0, "span", 49);
662    \u0275\u0275text(43);
663    \u0275\u0275pipe(44, "translate");
664    \u0275\u0275domElementEnd()()();
665  }
666  if (rf & 2) {
667    const ctx_r1 = \u0275\u0275nextContext();
668    \u0275\u0275advance(3);
669    \u0275\u0275conditional(ctx_r1.isNewItem() ? 3 : 4);
670    \u0275\u0275advance(8);
671    \u0275\u0275textInterpolate1("", \u0275\u0275pipeBind1(12, 17, "settings.form.name"), " *");
672    \u0275\u0275advance(6);
673    \u0275\u0275domProperty("value", ctx_r1.formTranslations().ro)("placeholder", \u0275\u0275pipeBind1(18, 19, "settings.form.namePlaceholder"));
674    \u0275\u0275advance(5);
675    \u0275\u0275domProperty("value", ctx_r1.formTranslations().en)("placeholder", \u0275\u0275pipeBind1(23, 21, "settings.form.namePlaceholder"));
676    \u0275\u0275advance(5);
677    \u0275\u0275domProperty("value", ctx_r1.formTranslations().ru)("placeholder", \u0275\u0275pipeBind1(28, 23, "settings.form.namePlaceholder"));
678    \u0275\u0275advance(2);
679    \u0275\u0275conditional(ctx_r1.activeTab() === "cuisines" ? 29 : -1);
680    \u0275\u0275advance(4);
681    \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(34, 25, "settings.form.active"));
682    \u0275\u0275advance(2);
683    \u0275\u0275classProp("active", ctx_r1.formActive());
684    \u0275\u0275advance(3);
685    \u0275\u0275domProperty("disabled", ctx_r1.isSubmitting());
686    \u0275\u0275advance();
687    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(40, 27, "common.cancel"), " ");
688    \u0275\u0275advance(2);
689    \u0275\u0275domProperty("disabled", ctx_r1.isSubmitting());
690    \u0275\u0275advance();
691    \u0275\u0275conditional(ctx_r1.isSubmitting() ? 42 : -1);
692    \u0275\u0275advance();
693    \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(44, 29, "common.save"), " ");
694  }
695}
696var SettingsComponent = class _SettingsComponent {
697  settingsService = inject(SettingsService);
698  translationService = inject(TranslationService);
699  toastService = inject(ToastService);
700  authService = inject(AuthService);
701  // Check if user is admin
702  isAdmin = this.authService.isAdmin;
703  // Current tab
704  activeTab = signal("tags", ...ngDevMode ? [{ debugName: "activeTab" }] : []);
705  // Data
706  tags = signal([], ...ngDevMode ? [{ debugName: "tags" }] : []);
707  cuisines = signal([], ...ngDevMode ? [{ debugName: "cuisines" }] : []);
708  // Loading states
709  isLoading = signal(false, ...ngDevMode ? [{ debugName: "isLoading" }] : []);
710  isSubmitting = signal(false, ...ngDevMode ? [{ debugName: "isSubmitting" }] : []);
711  // Dialog state
712  isDialogOpen = signal(false, ...ngDevMode ? [{ debugName: "isDialogOpen" }] : []);
713  editingItem = signal(null, ...ngDevMode ? [{ debugName: "editingItem" }] : []);
714  isNewItem = signal(false, ...ngDevMode ? [{ debugName: "isNewItem" }] : []);
715  // Form data
716  formTranslations = signal({ ro: "", en: "", ru: "" }, ...ngDevMode ? [{ debugName: "formTranslations" }] : []);
717  formActive = signal(true, ...ngDevMode ? [{ debugName: "formActive" }] : []);
718  formCuisineType = signal("regional", ...ngDevMode ? [{ debugName: "formCuisineType" }] : []);
719  // Delete confirmation
720  deletingId = signal(null, ...ngDevMode ? [{ debugName: "deletingId" }] : []);
721  // Computed
722  currentLang = computed(() => this.translationService.currentLanguage(), ...ngDevMode ? [{ debugName: "currentLang" }] : []);
723  cuisineTypes = ["regional", "international"];
724  ngOnInit() {
725    this.loadData();
726  }
727  loadData() {
728    this.isLoading.set(true);
729    const tagsRequest = this.isAdmin() ? this.settingsService.getTags() : this.settingsService.getActiveTags();
730    tagsRequest.subscribe({
731      next: (tags) => {
732        this.tags.set(this.sortDeletedLast(tags));
733        this.loadCuisines();
734      },
735      error: (err) => {
736        this.toastService.error(err.message || this.translationService.translate("errors.generic"));
737        this.isLoading.set(false);
738      }
739    });
740  }
741  loadCuisines() {
742    const cuisinesRequest = this.isAdmin() ? this.settingsService.getCuisines() : this.settingsService.getActiveCuisines();
743    cuisinesRequest.subscribe({
744      next: (cuisines) => {
745        this.cuisines.set(this.sortDeletedLast(cuisines));
746        this.isLoading.set(false);
747      },
748      error: (err) => {
749        this.toastService.error(err.message || this.translationService.translate("errors.generic"));
750        this.isLoading.set(false);
751      }
752    });
753  }
754  // Sort items: non-deleted first, deleted at the end
755  sortDeletedLast(items) {
756    return [...items].sort((a, b) => {
757      if (a.deletedAt && !b.deletedAt)
758        return 1;
759      if (!a.deletedAt && b.deletedAt)
760        return -1;
761      return 0;
762    });
763  }
764  // Helper to check if item is deleted
765  isDeleted(item) {
766    return !!item.deletedAt;
767  }
768  // Format deleted date for tooltip
769  formatDeletedDate(dateStr) {
770    const date = new Date(dateStr);
771    return date.toLocaleDateString(this.translationService.currentLanguage(), {
772      day: "2-digit",
773      month: "2-digit",
774      year: "numeric",
775      hour: "2-digit",
776      minute: "2-digit"
777    });
778  }
779  setActiveTab(tab) {
780    this.activeTab.set(tab);
781  }
782  getName(item) {
783    return getSettingsName(item, this.currentLang());
784  }
785  // ============================================
786  // DIALOG METHODS
787  // ============================================
788  openAddDialog() {
789    this.editingItem.set(null);
790    this.isNewItem.set(true);
791    this.formTranslations.set({ ro: "", en: "", ru: "" });
792    this.formActive.set(true);
793    this.formCuisineType.set("regional");
794    this.isDialogOpen.set(true);
795  }
796  openEditDialog(item) {
797    this.editingItem.set(item);
798    this.isNewItem.set(false);
799    const trans = { ro: "", en: "", ru: "" };
800    if (item.name) {
801      trans.ro = item.name;
802      trans.en = item.name;
803      trans.ru = item.name;
804    } else if (item.translations) {
805      item.translations.forEach((t) => {
806        if (t.lang === "ro")
807          trans.ro = t.name;
808        if (t.lang === "en")
809          trans.en = t.name;
810        if (t.lang === "ru")
811          trans.ru = t.name;
812      });
813    }
814    this.formTranslations.set(trans);
815    this.formActive.set(item.active);
816    if ("type" in item) {
817      this.formCuisineType.set(item.type);
818    }
819    this.isDialogOpen.set(true);
820  }
821  closeDialog() {
822    this.isDialogOpen.set(false);
823    this.editingItem.set(null);
824    this.isNewItem.set(false);
825  }
826  updateTranslation(lang, event) {
827    const value = event.target.value;
828    const current = this.formTranslations();
829    this.formTranslations.set(__spreadProps(__spreadValues({}, current), { [lang]: value }));
830  }
831  toggleActive() {
832    this.formActive.update((v) => !v);
833  }
834  setCuisineType(type) {
835    this.formCuisineType.set(type);
836  }
837  // ============================================
838  // SAVE METHODS
839  // ============================================
840  saveItem() {
841    const trans = this.formTranslations();
842    if (!trans.ro.trim() && !trans.en.trim() && !trans.ru.trim()) {
843      this.toastService.error(this.translationService.translate("settings.val
843idation.nameRequired"));
844      return;
845    }
846    const translations = [];
847    if (trans.ro.trim())
848      translations.push({ lang: "ro", name: trans.ro.trim() });
849    if (trans.en.trim())
850      translations.push({ lang: "en", name: trans.en.trim() });
851    if (trans.ru.trim())
852      translations.push({ lang: "ru", name: trans.ru.trim() });
853    this.isSubmitting.set(true);
854    if (this.activeTab() === "tags") {
855      this.saveTag(translations);
856    } else {
857      this.saveCuisine(translations);
858    }
859  }
860  saveTag(translations) {
861    const editing = this.editingItem();
862    if (editing && !this.isNewItem()) {
863      this.settingsService.updateTag(editing._id, {
864        active: this.formActive(),
865        translations
866      }).subscribe({
867        next: () => {
868          this.toastService.success(this.translationService.translate("settings.tags.updateSuccess"));
869          this.closeDialog();
870          this.loadData();
871          this.isSubmitting.set(false);
872        },
873        error: (err) => {
874          this.toastService.error(err.message || this.translationService.translate("errors.generic"));
875          this.isSubmitting.set(false);
876        }
877      });
878    } else {
879      this.settingsService.createTag({
880        active: this.formActive(),
881        translations
882      }).subscribe({
883        next: () => {
884          this.toastService.success(this.translationService.translate("settings.tags.createSuccess"));
885          this.closeDialog();
886          this.loadData();
887          this.isSubmitting.set(false);
888        },
889        error: (err) => {
890          this.toastService.error(err.message || this.translationService.translate("errors.generic"));
891          this.isSubmitting.set(false);
892        }
893      });
894    }
895  }
896  saveCuisine(translations) {
897    const editing = this.editingItem();
898    if (editing && !this.isNewItem()) {
899      this.settingsService.updateCuisine(editing._id, {
900        active: this.formActive(),
901        type: this.formCuisineType(),
902        translations
903      }).subscribe({
904        next: () => {
905          this.toastService.success(this.translationService.translate("settings.cuisines.updateSuccess"));
906          this.closeDialog();
907          this.loadData();
908          this.isSubmitting.set(false);
909        },
910        error: (err) => {
911          this.toastService.error(err.message || this.translationService.translate("errors.generic"));
912          this.isSubmitting.set(false);
913        }
914      });
915    } else {
916      this.settingsService.createCuisine({
917        active: this.formActive(),
918        type: this.formCuisineType(),
919        translations
920      }).subscribe({
921        next: () => {
922          this.toastService.success(this.translationService.translate("settings.cuisines.createSuccess"));
923          this.closeDialog();
924          this.loadData();
925          this.isSubmitting.set(false);
926        },
927        error: (err) => {
928          this.toastService.error(err.message || this.translationService.translate("errors.generic"));
929          this.isSubmitting.set(false);
930        }
931      });
932    }
933  }
934  // ============================================
935  // DELETE METHODS
936  // ============================================
937  confirmDelete(id) {
938    this.deletingId.set(id);
939  }
940  cancelDelete() {
941    this.deletingId.set(null);
942  }
943  deleteItem(id) {
944    this.isSubmitting.set(true);
945    if (this.activeTab() === "tags") {
946      this.settingsService.deleteTag(id).subscribe({
947        next: () => {
948          this.toastService.success(this.translationService.translate("settings.tags.deleteSuccess"));
949          this.deletingId.set(null);
950          this.loadData();
951          this.isSubmitting.set(false);
952        },
953        error: (err) => {
954          this.toastService.error(err.message || this.translationService.translate("errors.generic"));
955          this.isSubmitting.set(false);
956        }
957      });
958    } else {
959      this.settingsService.deleteCuisine(id).subscribe({
960        next: () => {
961          this.toastService.success(this.translationService.translate("settings.cuisines.deleteSuccess"));
962          this.deletingId.set(null);
963          this.loadData();
964          this.isSubmitting.set(false);
965        },
966        error: (err) => {
967          this.toastService.error(err.message || this.translationService.translate("errors.generic"));
968          this.isSubmitting.set(false);
969        }
970      });
971    }
972  }
973  static \u0275fac = function SettingsComponent_Factory(__ngFactoryType__) {
974    return new (__ngFactoryType__ || _SettingsComponent)();
975  };
976  static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _SettingsComponent, selectors: [["app-settings"]], decls: 34, vars: 27, consts: [[1, "settings-page"], [1, "page-header"], [1, "header-content"], [1, "page-title"], [1, "page-subtitle"], ["type", "button", 1, "btn", "btn-primary", 3, "click"], [1, "material-symbols-rounded"], [1, "tabs"], ["type", "button", 1, "tab", 3, "click"], [1, "tab-count"], [1, "loading-state"], [1, "content-card"], [1, "dialog-backdrop"], [1, "dialog"], [1, "spinner"], [1, "empty-state"], [1, "items-list"], [1, "item-row", 3, "inactive", "deleted"], [1, "item-row"], [1, "item-info"], [1, "item-name"], [1, "status-badge", "deleted", 3, "title"], [1, "status-badge", "inactive"], [1, "item-actions"], [1, "delete-confirm"], [1, "confirm-text"], ["type", "button", 1, "btn", "btn-sm", "btn-danger", 3, "click", "disabled"], ["type", "button", 1, "btn", "btn-sm", "btn-outline", 3, "click", "disabled"], ["type", "button", 1, "btn-icon", 3, "click", "title"], ["type", "button", 1, "btn-icon", "btn-icon-danger", 3, "click", "title"], [1, "type-badge"], [1, "dialog-backdrop", 3, "click"], [1, "dialog-header"], [1, "dialog-title"], ["type", "button", 1, "dialog-close", 3, "click"], [1, "dialog-body"], [1, "form-section"], [1, "form-label"], [1, "translation-inputs"], [1, "translation-row"], [1, "lang-label"], ["type", "text", 1, "form-input", 3, "input", "value", "placeholder"], [1, "toggle-row", 3, "click"], [1, "toggle-label"], [1, "toggle"], [1, "toggle-thumb"], [1, "dialog-footer"], ["type", "button", 1, "btn", "btn-outline", 3, "click", "disabled"], ["type", "button", 1, "btn", "btn-primary", 3, "click", "disabled"], [1, "spinner-small"], [1, "type-options"], ["type", "button", 1, "type-option", 3, "active"], ["type", "button", 1, "type-option", 3, "click"]], template: function SettingsComponent_Template(rf, ctx) {
977    if (rf & 1) {
978      \u0275\u0275domElementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h1", 3);
979      \u0275\u0275text(4);
980      \u0275\u0275pipe(5, "translate");
981      \u0275\u0275domElementEnd();
982      \u0275\u0275domElementStart(6, "p", 4);
983      \u0275\u0275text(7);
984      \u0275\u0275pipe(8, "translate");
985      \u0275\u0275domElementEnd()();
986      \u0275\u0275domElementStart(9, "button", 5);
987      \u0275\u0275domListener("click", function SettingsComponent_Template_button_click_9_listener() {
988        return ctx.openAddDialog();
989      });
990      \u0275\u0275domElementStart(10, "span", 6);
991      \u0275\u0275text(11, "add");
992      \u0275\u0275domElementEnd();
993      \u0275\u0275text(12);
994      \u0275\u0275pipe(13, "translate");
995      \u0275\u0275pipe(14, "translate");
996      \u0275\u0275domElementEnd()();
997      \u0275\u0275domElementStart(15, "div", 7)(16, "button", 8);
998      \u0275\u0275domListener("click", function SettingsComponent_Template_button_click_16_listener() {
999        return ctx.setActiveTab("tags");
1000      });
1001      \u0275\u0275domElementStart(17, "span", 6);
1002      \u0275\u0275text(18, "label");
1003      \u0275\u0275domElementEnd();
1004      \u0275\u0275text(19);
1005      \u0275\u0275pipe(20, "translate");
1006      \u0275\u0275domElementStart(21, "span", 9);
1007      \u0275\u0275text(22);
1008      \u0275\u0275domElementEnd()();
1009      \u0275\u0275domElementStart(23, "button", 8);
1010      \u0275\u0275domListener("click", function SettingsComponent_Template_button_click_23_listener() {
1011        return ctx.setActiveTab("cuisines");
1012      });
1013      \u0275\u0275domElementStart(24, "span", 6);
1014      \u0275\u0275text(25, "restaurant_menu");
1015      \u0275\u0275domElementEnd();
1016      \u0275\u0275text(26);
1017      \u0275\u0275pipe(27, "translate");
1018      \u0275\u0275domElementStart(28, "span", 9);
1019      \u0275\u0275text(29);
1020      \u0275\u0275domElementEnd()()();
1021      \u0275\u0275conditionalCreate(30, SettingsComponent_Conditional_30_Template, 5, 3, "div", 10);
1022      \u0275\u0275conditionalCreate(31, SettingsComponent_Conditional_31_Template, 3, 2, "div", 11);
1023      \u0275\u0275domElementEnd();
1024      \u0275\u0275conditionalCreate(32, SettingsComponent_Conditional_32_Template, 1, 0, "div", 12);
1025      \u0275\u0275conditionalCreate(33, SettingsComponent_Conditional_33_Template, 45, 31, "div", 13);
1026    }
1027    if (rf & 2) {
1028      \u0275\u0275advance(4);
1029      \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 15, "settings.title"));
1030      \u0275\u0275advance(3);
1031      \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(8, 17, "settings.subtitle"));
1032      \u0275\u0275advance(5);
1033      \u0275\u0275textInterpolate1(" ", ctx.activeTab() === "tags" ? \u0275\u0275pipeBind1(13, 19, "settings.tags.add") : \u0275\u0275pipeBind1(14, 21, "settings.cuisines.add"), " ");
1034      \u0275\u0275advance(4);
1035      \u0275\u0275classProp("active", ctx.activeTab() === "tags");
1036      \u0275\u0275advance(3);
1037      \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(20, 23, "settings.tabs.tags"), " ");
1038      \u0275\u0275advance(3);
1039      \u0275\u0275textInterpolate(ctx.tags().length);
1040      \u0275\u0275advance();
1041      \u0275\u0275classProp("active", ctx.activeTab() === "cuisines");
1042      \u0275\u0275advance(3);
1043      \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(27, 25, "settings.tabs.cuisines"), " ");
1044      \u0275\u0275advance(3);
1045      \u0275\u0275textInterpolate(ctx.cuisines().length);
1046      \u0275\u0275advance();
1047      \u0275\u0275conditional(ctx.isLoading() ? 30 : -1);
1048      \u0275\u0275advance();
1049      \u0275\u0275conditional(!ctx.isLoading() ? 31 : -1);
1050      \u0275\u0275advance();
1051      \u0275\u0275conditional(ctx.isDialogOpen() ? 32 : -1);
1052      \u0275\u0275advance();
1053      \u0275\u0275conditional(ctx.isDialogOpen() ? 33 : -1);
1054    }
1055  }, dependencies: [CommonModule, FormsModule, TranslatePipe], styles: ["\n\n.settings-page[_ngcontent-%COMP%] {\n  max-width: 900px;\n  margin: 0 auto;\n}\n.page-header[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 1rem;\n  margin-bottom: 1.25rem;\n}\n@media (max-width: 576px) {\n  .page-header[_ngcontent-%COMP%] {\n    flex-direction: column;
1055\n    align-items: stretch;\n  }\n}\n.header-content[_ngcontent-%COMP%] {\n  flex: 1;\n}\n.page-title[_ngcontent-%COMP%] {\n  font-size: 1.875rem;\n  font-weight: 700;\n  color: #25130E;\n  margin: 0 0 0.25rem 0;\n}\n.page-subtitle[_ngcontent-%COMP%] {\n  font-size: 1rem;\n  color: #868686;\n  margin: 0;\n}\n.tabs[_ngcontent-%COMP%] {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n  background-color: #FFFFFF;\n  padding: 0.5rem;\n  border-radius: 0.75rem;\n  box-shadow: 0 2px 12px rgba(246, 241, 233, 0.8), 0 4px 20px rgba(37, 19, 14, 0.06);\n}\n.tab[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 0.5rem 1rem;\n  border: none;\n  background: transparent;\n  border-radius: 0.5rem;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.tab[_ngcontent-%COMP%]:hover {\n  background-color: #F6F1E9;\n  color: #25130E;\n}\n.tab.active[_ngcontent-%COMP%] {\n  background-color: #0F6E86;\n  color: #FFFFFF;\n}\n.tab.active[_ngcontent-%COMP%]   .material-symbols-rounded[_ngcontent-%COMP%] {\n  color: #FFFFFF;\n}\n.tab.active[_ngcontent-%COMP%]   .tab-count[_ngcontent-%COMP%] {\n  background-color: rgba(255, 255, 255, 0.2);\n  color: #FFFFFF;\n}\n.tab[_ngcontent-%COMP%]   .material-symbols-rounded[_ngcontent-%COMP%] {\n  font-size: 20px;\n}\n.tab-count[_ngcontent-%COMP%] {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 22px;\n  height: 22px;\n  padding: 0 0.25rem;\n  background-color: #F6F1E9;\n  font-size: 0.75rem;\n  font-weight: 600;\n  border-radius: 9999px;\n}\n.loading-state[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 4rem;\n  background-color: #FFFFFF;\n  border-radius: 0.75rem;\n  box-shadow: 0 2px 12px rgba(246, 241, 233, 0.8), 0 4px 20px rgba(37, 19, 14, 0.06);\n}\n.loading-state[_ngcontent-%COMP%]   .spinner[_ngcontent-%COMP%] {\n  width: 40px;\n  height: 40px;\n  border: 3px solid #E0E0E0;\n  border-top-color: #0F6E86;\n  border-radius: 50%;\n  animation: _ngcontent-%COMP%_spin 0.8s linear infinite;\n  margin-bottom: 1rem;\n}\n.loading-state[_ngcontent-%COMP%]   p[_ngcontent-%COMP%] {\n  color: #868686;\n  margin: 0;\n}\n@keyframes _ngcontent-%COMP%_spin {\n  to {\n    transform: rotate(360deg);\n  }\n}\n.content-card[_ngcontent-%COMP%] {\n  background-color: #FFFFFF;\n  border-radius: 0.75rem;\n  box-shadow: 0 2px 12px rgba(246, 241, 233, 0.8), 0 4px 20px rgba(37, 19, 14, 0.06);\n  overflow: hidden;\n}\n.empty-state[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 3rem;\n  text-align: center;\n}\n.empty-state[_ngcontent-%COMP%]   .material-symbols-rounded[_ngcontent-%COMP%] {\n  font-size: 48px;\n  color: #868686;\n  opacity: 0.5;\n  margin-bottom: 0.75rem;\n}\n.empty-state[_ngcontent-%COMP%]   p[_ngcontent-%COMP%] {\n  color: #868686;\n  margin: 0;\n}\n.items-list[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n}\n.item-row[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 0.75rem;\n  padding: 0.75rem 1rem;\n  border-bottom: 1px solid #F0F0F0;\n  transition: background-color 150ms ease;\n}\n.item-row[_ngcontent-%COMP%]:last-child {\n  border-bottom: none;\n}\n.item-row[_ngcontent-%COMP%]:hover {\n  background-color: #F6F1E9;\n}\n.item-row.inactive[_ngcontent-%COMP%] {\n  opacity: 0.6;\n}\n.item-row.deleted[_ngcontent-%COMP%] {\n  opacity: 0.5;\n  background-color: rgba(232, 90, 79, 0.03);\n}\n.item-info[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  flex: 1;\n  min-width: 0;\n}\n.item-name[_ngcontent-%COMP%] {\n  font-size: 1rem;\n  font-weight: 500;\n  color: #25130E;\n}\n.type-badge[_ngcontent-%COMP%] {\n  font-size: 0.75rem;\n  padding: 0.25rem 0.5rem;\n  background-color: rgba(15, 110, 134, 0.1);\n  color: #0F6E86;\n  border-radius: 0.5rem;\n  font-weight: 500;\n}\n.status-badge[_ngcontent-%COMP%] {\n  font-size: 0.75rem;\n  padding: 0.25rem 0.5rem;\n  border-radius: 0.5rem;\n  font-weight: 500;\n  cursor: default;\n}\n.status-badge.inactive[_ngcontent-%COMP%] {\n  background-color: rgba(134, 134, 134, 0.1);\n  color: #868686;\n}\n.status-badge.deleted[_ngcontent-%COMP%] {\n  background-color: rgba(232, 90, 79, 0.1);\n  color: #E85A4F;\n}\n.item-actions[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 0.25rem;\n}\n.btn-icon[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  border: none;\n  background: transparent;\n  border-radius: 0.5rem;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.btn-icon[_ngcontent-%COMP%]:hover {\n  background-color: rgba(15, 110, 134, 0.1);\n  color: #0F6E86;\n}\n.btn-icon.btn-icon-danger[_ngcontent-%COMP%]:hover {\n  background-color: rgba(232, 90, 79, 0.1);\n  color: #E85A4F;\n}\n.btn-icon[_ngcontent-%COMP%]   .material-symbols-rounded[_ngcontent-%COMP%] {\n  font-size: 20px;\n}\n.delete-confirm[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.confirm-text[_ngcontent-%COMP%] {\n  font-size: 0.875rem;\n  color: #868686;\n}\n.dialog-backdrop[_ngcontent-%COMP%] {\n  position: fixed;\n  inset: 0;\n  background-color: rgba(0, 0, 0, 0.5);\n  z-index: 400;\n}\n.dialog[_ngcontent-%COMP%] {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  width: calc(100% - 2rem);\n  max-width: 480px;\n  max-height: calc(100vh - 2rem);\n  background-color: #FFFFFF;\n  border-radius: 1rem;\n  box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);\n  z-index: 500;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n.dialog-header[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1.25rem;\n  border-bottom: 1px solid #F0F0F0;\n}\n.dialog-title[_ngcontent-%COMP%] {\n  font-size: 1.25rem;\n  font-weight: 600;\n  color: #25130E;\n  margin: 0;\n}\n.dialog-close[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  border: none;\n  background: transparent;\n  border-radius: 9999px;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.dialog-close[_ngcontent-%COMP%]:hover {\n  background-color: #F6F1E9;\n  color: #25130E;\n}\n.dialog-body[_ngcontent-%COMP%] {\n  padding: 1.25rem;\n  overflow-y: auto;\n}\n.dialog-footer[_ngcontent-%COMP%] {\n  display: flex;\n  justify-content: flex-end;\n  gap: 0.75rem;\n  padding: 1rem 1.25rem;\n  border-top: 1px solid #F0F0F0;\n  background-color: #F6F1E9;\n}\n.form-section[_ngcontent-%COMP%] {\n  margin-bottom: 1rem;\n}\n.form-section[_ngcontent-%COMP%]:last-child {\n  margin-bottom: 0;\n}\n.form-label[_ngcontent-%COMP%] {\n  display: block;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #25130E;\n  margin-bottom: 0.5rem;\n}\n.translation-inputs[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n}\n.translation-row[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.lang-label[_ngcontent-%COMP%] {\n  width: 32px;\n  font-size: 0.75rem;\n  font-weight: 600;\n  color: #868686;\n  text-align: center;\n}\n.form-input[_ngcontent-%COMP%] {\n  flex: 1;\n  padding: 0.5rem 0.75rem;\n  border: 1px solid #E0E0E0;\n  border-radius: 0.5rem;\n  font-size: 1rem;\n  color: #25130E;\n  transition: border-color 150ms ease;\n}\n.form-input[_ngcontent-%COMP%]:focus {\n  outline: none;\n  border-color: #0F6E86;\n}\n.form-input[_ngcontent-%COMP%]::placeholder {\n  color: #868686;\n  opacity: 0.6;\n}\n.type-options[_ngcontent-%COMP%] {\n  display: flex;\n  gap: 0.5rem;\n}\n.type-option[_ngcontent-%COMP%] {\n  flex: 1;\n  padding: 0.5rem 0.75rem;\n  border: 1px solid #E0E0E0;\n  background: transparent;\n  border-radius: 0.5rem;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.type-option[_ngcontent-%COMP%]:hover {\n  border-color: #0F6E86;\n  color: #0F6E86;\n}\n.type-option.active[_ngcontent-%COMP%] {\n  background-color: #0F6E86;\n  border-color: #0F6E86;\n  color: #FFFFFF;\n}\n.toggle-row[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  cursor: pointer;\n}\n.toggle-label[_ngcontent-%COMP%] {\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #25130E;\n}\n.toggle[_ngcontent-%COMP%] {\n  position: relative;\n  width: 44px;\n  height: 24px;\n  background-color: #E0E0E0;\n  border-radius: 12px;\n  transition: background-color 150ms ease;\n}\n.toggle.active[_ngcontent-%COMP%] {\n  background-color: #0F6E86;\n}\n.toggle.active[_ngcontent-%COMP%]   .toggle-thumb[_ngcontent-%COMP%] {\n  transform: translateX(20px);\n}\n.toggle-thumb[_ngcontent-%COMP%] {\n  position: absolute;\n  top: 2px;\n  left: 2px;
1055\n  width: 20px;\n  height: 20px;\n  background-color: #FFFFFF;\n  border-radius: 50%;\n  transition: transform 150ms ease;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n.btn[_ngcontent-%COMP%] {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n  padding: 0.5rem 1rem;\n  border: none;\n  border-radius: 0.5rem;\n  font-size: 0.875rem;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.btn[_ngcontent-%COMP%]:disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n.btn[_ngcontent-%COMP%]   .material-symbols-rounded[_ngcontent-%COMP%] {\n  font-size: 18px;\n}\n.btn-primary[_ngcontent-%COMP%] {\n  background-color: #0F6E86;\n  color: #FFFFFF;\n}\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n  background-color: #0a5066;\n}\n.btn-outline[_ngcontent-%COMP%] {\n  background: transparent;\n  border: 1px solid #E0E0E0;\n  color: #25130E;\n}\n.btn-outline[_ngcontent-%COMP%]:hover:not(:disabled) {\n  border-color: #0F6E86;\n  color: #0F6E86;\n}\n.btn-sm[_ngcontent-%COMP%] {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.75rem;\n}\n.btn-danger[_ngcontent-%COMP%] {\n  background-color: #E85A4F;\n  color: #FFFFFF;\n}\n.btn-danger[_ngcontent-%COMP%]:hover:not(:disabled) {\n  background-color: #C62828;\n}\n.spinner-small[_ngcontent-%COMP%] {\n  width: 16px;\n  height: 16px;\n  border: 2px solid rgba(255, 255, 255, 0.3);\n  border-top-color: #FFFFFF;\n  border-radius: 50%;\n  animation: _ngcontent-%COMP%_spin 0.8s linear infinite;\n}\n/*# sourceMappingURL=settings.component-3JI7VWGV.css.map */"] });
1056};
1057(() => {
1058  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SettingsComponent, [{
1059    type: Component,
1060    args: [{ selector: "app-settings", standalone: true, imports: [CommonModule, FormsModule, TranslatePipe], template: `<div class="settings-page">
1061  <!-- Page Header -->
1062  <div class="page-header">
1063    <div class="header-content">
1064      <h1 class="page-title">{{ 'settings.title' | translate }}</h1>
1065      <p class="page-subtitle">{{ 'settings.subtitle' | translate }}</p>
1066    </div>
1067    <button type="button" class="btn btn-primary" (click)="openAddDialog()">
1068      <span class="material-symbols-rounded">add</span>
1069      {{ activeTab() === 'tags' ? ('settings.tags.add' | translate) : ('settings.cuisines.add' | translate) }}
1070    </button>
1071  </div>
1072
1073  <!-- Tabs -->
1074  <div class="tabs">
1075    <button
1076      type="button"
1077      class="tab"
1078      [class.active]="activeTab() === 'tags'"
1079      (click)="setActiveTab('tags')"
1080    >
1081      <span class="material-symbols-rounded">label</span>
1082      {{ 'settings.tabs.tags' | translate }}
1083      <span class="tab-count">{{ tags().length }}</span>
1084    </button>
1085    <button
1086      type="button"
1087      class="tab"
1088      [class.active]="activeTab() === 'cuisines'"
1089      (click)="setActiveTab('cuisines')"
1090    >
1091      <span class="material-symbols-rounded">restaurant_menu</span>
1092      {{ 'settings.tabs.cuisines' | translate }}
1093      <span class="tab-count">{{ cuisines().length }}</span>
1094    </button>
1095  </div>
1096
1097  <!-- Loading State -->
1098  @if (isLoading()) {
1099    <div class="loading-state">
1100      <div class="spinner"></div>
1101      <p>{{ 'common.loading' | translate }}</p>
1102    </div>
1103  }
1104
1105  <!-- Content -->
1106  @if (!isLoading()) {
1107    <div class="content-card">
1108      <!-- Tags List -->
1109      @if (activeTab() === 'tags') {
1110        @if (tags().length === 0) {
1111          <div class="empty-state">
1112            <span class="material-symbols-rounded">label_off</span>
1113            <p>{{ 'settings.tags.empty' | translate }}</p>
1114          </div>
1115        } @else {
1116          <div class="items-list">
1117            @for (tag of tags(); track tag._id) {
1118              <div class="item-row" [class.inactive]="!tag.active" [class.deleted]="isDeleted(tag)">
1119                <div class="item-info">
1120                  <span class="item-name">{{ getName(tag) }}</span>
1121                  @if (isDeleted(tag)) {
1122                    <span
1123                      class="status-badge deleted"
1124                      [title]="('settings.deletedAt' | translate) + ': ' + formatDeletedDate(tag.deletedAt!)"
1125                    >
1126                      {{ 'common.deleted' | translate }}
1127                    </span>
1128                  } @else if (!tag.active) {
1129                    <span class="status-badge inactive">{{ 'common.inactive' | translate }}</span>
1130                  }
1131                </div>
1132                <div class="item-actions">
1133                  @if (deletingId() === tag._id) {
1134                    <div class="delete-confirm">
1135                      <span class="confirm-text">{{ 'common.deleteConfirm' | translate }}</span>
1136                      <button
1137                        type="button"
1138                        class="btn btn-sm btn-danger"
1139                        (click)="deleteItem(tag._id)"
1140                        [disabled]="isSubmitting()"
1141                      >
1142                        {{ 'common.yes' | translate }}
1143                      </button>
1144                      <button
1145                        type="button"
1146                        class="btn btn-sm btn-outline"
1147                        (click)="cancelDelete()"
1148                        [disabled]="isSubmitting()"
1149                      >
1150                        {{ 'common.no' | translate }}
1151                      </button>
1152                    </div>
1153                  } @else {
1154                    <button
1155                      type="button"
1156                      class="btn-icon"
1157                      (click)="openEditDialog(tag)"
1158                      [title]="'common.edit' | translate"
1159                    >
1160                      <span class="material-symbols-rounded">edit</span>
1161                    </button>
1162                    <button
1163                      type="button"
1164                      class="btn-icon btn-icon-danger"
1165                      (click)="confirmDelete(tag._id)"
1166                      [title]="'common.delete' | translate"
1167                    >
1168                      <span class="material-symbols-rounded">delete</span>
1169                    </button>
1170                  }
1171                </div>
1172              </div>
1173            }
1174          </div>
1175        }
1176      }
1177
1178      <!-- Cuisines List -->
1179      @if (activeTab() === 'cuisines') {
1180        @if (cuisines().length === 0) {
1181          <div class="empty-state">
1182            <span class="material-symbols-rounded">no_meals</span>
1183            <p>{{ 'settings.cuisines.empty' | translate }}</p>
1184          </div>
1185        } @else {
1186          <div class="items-list">
1187            @for (cuisine of cuisines(); track cuisine._id) {
1188              <div class="item-row" [class.inactive]="!cuisine.active" [class.deleted]="isDeleted(cuisine)">
1189                <div class="item-info">
1190                  <span class="item-name">{{ getName(cuisine) }}</span>
1191                  <span class="type-badge">{{ 'settings.cuisines.types.' + cuisine.type | translate }}</span>
1192                  @if (isDeleted(cuisine)) {
1193                    <span
1194                      class="status-badge deleted"
1195                      [title]="('settings.deletedAt' | translate) + ': ' + formatDeletedDate(cuisine.deletedAt!)"
1196                    >
1197                      {{ 'common.deleted' | translate }}
1198                    </span>
1199                  } @else if (!cuisine.active) {
1200                    <span class="status-badge inactive">{{ 'common.inactive' | translate }}</span>
1201                  }
1202                </div>
1203                <div class="item-actions">
1204                  @if (deletingId() === cuisine._id) {
1205                    <div class="delete-confirm">
1206                      <span class="confirm-text">{{ 'common.deleteConfirm' | translate }}</span>
1207                      <button
1208                        type="button"
1209                        class="btn btn-sm btn-danger"
1210                        (click)="deleteItem(cuisine._id)"
1211                        [disabled]="isSubmitting()"
1212                      >
1213                        {{ 'common.yes' | translate }}
1214                      </button>
1215                      <button
1216                        type="button"
1217                        class="btn btn-sm btn-outline"
1218                        (click)="cancelDelete()"
1219                        [disabled]="isSubmitting()"
1220                      >
1221                        {{ 'common.no' | translate }}
1222                      </button>
1223                    </div>
1224                  } @else {
1225                    <button
1226                      type="button"
1227                      class="btn-icon"
1228                      (click)="openEditDialog(cuisine)"
1229                      [title]="'common.edit' | translate"
1230                    >
1231                      <span class="material-symbols-rounded">edit</span>
1232                    </button>
1233                    <button
1234                      type="button"
1235                      class="btn-icon btn-icon-danger"
1236                      (click)="confirmDelete(cuisine._id)"
1237                      [title]="'common.delete' | translate"
1238                    >
1239                      <span class="material-symbols-rounded">delete</span>
1240                    </button>
1241                  }
1242                </div>
1243              </div>
1244            }
1245          </div>
1246        }
1247      }
1248    </div>
1249  }
1250</div>
1251
1252<!-- Dialog Backdrop -->
1253@if (isDialogOpen()) {
1254  <div class="dialog-backdrop" (click)="closeDialog()"></div>
1255}
1256
1257<!-- Add/Edit Dialog -->
1258@if (isDialogOpen()) {
1259  <div class="dialog">
1260    <div class="dialog-header">
1261      <h2 class="dialog-title">
1262        @if (isNewItem()) {
1263          {{ activeTab() === 'tags' ? ('settings.tags.add' | translate) : ('settings.cuisines.add' | translate) }}
1264        } @else {
1265          {{ activeTab() === 'tags' ? ('settings.tags.edit' | translate) : ('settings.cuisines.edit' | translate) }}
1266        }
1267      </h2>
1268      <button type="button" class="dialog-close" (click)="closeDialog()">
1269        <span class="material-symbols-rounded">close</span>
1270      </button>
1271    </div>
1272
1273    <div class="dialog-body">
1274      <!-- Translations -->
1275      <div class="form-section">
1276        <label class="form-label">{{ 'settings.form.name' | translate }} *</label>
1277        <div class="translation-inputs">
1278          <div class="translation-row">
1279            <span class="lang-label">RO</span>
1280            <input
1281              type="text"
1282              class="form-input"
1283              [value]="formTranslations().ro"
1284              (input)="updateTranslation('ro', $event)"
1285              [placeholder]="'settings.form.namePlaceholder' | translate"
1286            />
1287          </div>
1288          <div class="translation-row">
1289            <span class="lang-label">EN</span>
1290            <input
1291              type="text"
1292              class="form-input"
1293              [value]="formTranslations().en"
1294              (input)="updateTranslation('en', $event)"
1295              [placeholder]="'settings.form.namePlaceholder' | translate"
1296            />
1297          </div>
1298          <div class="translation-row">
1299            <span class="lang-label">RU</span>
1300            <input
1301              type="text"
1302              class="form-input"
1303              [value]="formTranslations().ru"
1304              (input)="updateTranslation('ru', $event)"
1305              [placeholder]="'settings.form.namePlaceholder' | translate"
1306            />
1307          </div>
1308        </div>
1309      </div>
1310
1311      <!-- Cuisine Type (only for cuisines) -->
1312      @if (activeTab() === 'cuisines') {
1313        <div class="form-section">
1314          <label class="form-label">{{ 'settings.form.type' | translate }}</label>
1315          <div class="type-options">
1316            @for (type of cuisineTypes; track type) {
1317              <button
1318                type="button"
1319                class="type-option"
1320                [class.active]="formCuisineType() === type"
1321                (click)="setCuisineType(type)"
1322              >
1323                {{ 'settings.cuisines.types.' + type | translate }}
1324              </button>
1325            }
1326          </div>
1327        </div>
1328      }
1329
1330      <!-- Active Toggle -->
1331      <div class="form-section">
1332        <label class="toggle-row" (click)="toggleActive()">
1333          <span class="toggle-label">{{ 'settings.form.active' | translate }}</span>
1334          <span class="toggle" [class.active]="formActive()">
1335            <span class="toggle-thumb"></span>
1336          </span>
1337        </label>
1338      </div>
1339    </div>
1340
1341    <div class="dialog-footer">
1342      <button
1343        type="button"
1344        class="btn btn-outline"
1345        (click)="closeDialog()"
1346        [disabled]="isSubmitting()"
1347      >
1348        {{ 'common.cancel' | translate }}
1349      </button>
1350      <button
1351        type="button"
1352        class="btn btn-primary"
1353        (click)="saveItem()"
1354        [disabled]="isSubmitting()"
1355      >
1356        @if (isSubmitting()) {
1357          <span class="spinner-small"></span>
1358        }
1359        {{ 'common.save' | translate }}
1360      </button>
1361    </div>
1362  </div>
1363}
1364`, styles: ["/* src/app/features/dashboard/pages/settings/settings.component.scss */\n.settings-page {\n  max-width: 900px;\n  margin: 0 auto;\n}\n.page-header {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 1rem;\n  margin-bottom: 1.25rem;\n}\n@media (max-width: 576px) {\n  .page-header {\n    flex-direction: column;\n    align-items: stretch;\n  }\n}\n.header-content {\n  flex: 1;\n}\n.page-title {\n  font-size: 1.875rem;\n  font-weight: 700;\n  color: #25130E;\n  margin: 0 0 0.25rem 0;\n}\n.page-subtitle {\n  font-size: 1rem;\n  color: #868686;\n  margin: 0;\n}\n.tabs {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n  background-color: #FFFFFF;\n  padding: 0.5rem;\n  border-radius: 0.75rem;\n  box-shadow: 0 2px 12px rgba(246, 241, 233, 0.8), 0 4px 20px rgba(37, 19, 14, 0.06);\n}\n.tab {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 0.5rem 1rem;\n  border: none;\n  background: transparent;\n  border-radius: 0.5rem;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.tab:hover {\n  background-color: #F6F1E9;\n  color: #25130E;\n}\n.tab.active {\n  background-color: #0F6E86;\n  color: #FFFFFF;\n}\n.tab.active .material-symbols-rounded {\n  color: #FFFFFF;\n}\n.tab.active .tab-count {\n  background-color: rgba(255, 255, 255, 0.2);\n  color: #FFFFFF;\n}\n.tab .material-symbols-rounded {\n  font-size: 20px;\n}\n.tab-count {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 22px;\n  height: 22px;\n  padding: 0 0.25rem;\n  background-color: #F6F1E9;\n  font-size: 0.75rem;\n  font-weight: 600;\n  border-radius: 9999px;\n}\n.loading-state {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 4rem;\n  background-color: #FFFFFF;\n  border-radius: 0.75rem;\n  box-shadow: 0 2px 12px rgba(246, 241, 233, 0.8), 0 4px 20px rgba(37, 19, 14, 0.06);\n}\n.loading-state .spinner {\n  width: 40px;\n  height: 40px;\n  border: 3px solid #E0E0E0;\n  border-top-color: #0F6E86;\n  border-radius: 50%;\n  animation: spin 0.8s linear infinite;\n  margin-bottom: 1rem;\n}\n.loading-state p {\n  color: #868686;\n  margin: 0;\n}\n@keyframes spin {\n  to {\n    transform: rotate(360deg);\n  }\n}\n.content-card {\n  background-color: #FFFFFF;\n  border-radius: 0.75rem;\n  box-shadow: 0 2px 12px rgba(246, 241, 233, 0.8), 0 4px 20px rgba(37, 19, 14, 0.06);\n  overflow: hidden;\n}\n.empty-state {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 3rem;\n  text-align: center;\n}\n.empty-state .material-symbols-rounded {\n  font-size: 48px;\n  color: #868686;\n  opacity: 0.5;\n  margin-bottom: 0.75rem;\n}\n.empty-state p {\n  color: #868686;\n  margin: 0;\n}\n.items-list {\n  display: flex;\n  flex-direction: column;\n}\n.item-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 0.75rem;\n  padding: 0.75rem 1rem;\n  border-bottom: 1px solid #F0F0F0;\n  transition: background-color 150ms ease;\n}\n.item-row:last-child {\n  border-bottom: none;\n}\n.item-row:hover {\n  background-color: #F6F1E9;\n}\n.item-row.inactive {\n  opacity: 0.6;\n}\n.item-row.deleted {\n  opacity: 0.5;\n  background-color: rgba(232, 90, 79, 0.03);\n}\n.item-info {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  flex: 1;\n  min-width: 0;\n}\n.item-name {\n  font-size: 1rem;\n  font-weight: 500;\n  color: #25130E;\n}\n.type-badge {\n  font-size: 0.75rem;\n  padding: 0.25rem 0.5rem;\n  background-color: rgba(15, 110, 134, 0.1);\n  color: #0F6E86;\n  border-radius: 0.5rem;\n  font-weight: 500;\n}\n.status-badge {\n  font-size: 0.75rem;\n  padding: 0.25rem 0.5rem;\n  border-radius: 0.5rem;\n  font-weight: 500;\n  cursor: default;\n}\n.status-badge.inactive {\n  background-color: rgba(134, 134, 134, 0.1);\n  color: #868686;\n}\n.status-badge.deleted {\n  background-color: rgba(232, 90, 79, 0.1);\n  color: #E85A4F;\n}\n.item-actions {\n  display: flex;\n  align-items: center;\n  gap: 0.25rem;\n}\n.btn-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  border: none;\n  background: transparent;\n  border-radius: 0.5rem;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.btn-icon:hover {\n  background-color: rgba(15, 110, 134, 0.1);\n  color: #0F6E86;\n}\n.btn-icon.btn-icon-danger:hover {\n  background-color: rgba(232, 90, 79, 0.1);\n  color: #E85A4F;\n}\n.btn-icon .material-symbols-rounded {\n  font-size: 20px;\n}\n.delete-confirm {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.confirm-text {\n  font-size: 0.875rem;\n  color: #868686;\n}\n.dialog-backdrop {\n  position: fixed;\n  inset: 0;\n  background-color: rgba(0, 0, 0, 0.5);\n  z-index: 400;\n}\n.dialog {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  width: calc(100% - 2rem);\n  max-width: 480px;\n  max-height: calc(100vh - 2rem);\n  background-color: #FFFFFF;\n  border-radius: 1rem;\n  box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);\n  z-index: 500;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n.dialog-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1.25rem;\n  border-bottom: 1px solid #F0F0F0;\n}\n.dialog-title {\n  font-size: 1.25rem;\n  font-weight: 600;\n  color: #25130E;\n  margin: 0;\n}\n.dialog-close {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  border: none;\n  background: transparent;\n  border-radius: 9999px;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.dialog-close:hover {\n  background-color: #F6F1E9;\n  color: #25130E;\n}\n.dialog-body {\n  padding: 1.25rem;\n  overflow-y: auto;\n}\n.dialog-footer {\n  display: flex;\n  justify-content: flex-end;\n  gap: 0.75rem;\n  padding: 1rem 1.25rem;\n  border-top: 1px solid #F0F0F0;\n  background-color: #F6F1E9;\n}\n.form-section {\n  margin-bottom: 1rem;\n}\n.form-section:last-child {\n  margin-bottom: 0;\n}\n.form-label {\n  display: block;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #25130E;\n  margin-bottom: 0.5rem;\n}\n.translation-inputs {\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n}\n.translation-row {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.lang-label {\n  width: 32px;\n  font-size: 0.75rem;\n  font-weight: 600;\n  color: #868686;\n  text-align: center;\n}\n.form-input {\n  flex: 1;\n  padding: 0.5rem 0.75rem;\n  border: 1px solid #E0E0E0;\n  border-radius: 0.5rem;\n  font-size: 1rem;\n  color: #25130E;\n  transition: border-color 150ms ease;\n}\n.form-input:focus {\n  outline: none;\n  border-color: #0F6E86;\n}\n.form-input::placeholder {\n  color: #868686;\n  opacity: 0.6;\n}\n.type-options {\n  display: flex;\n  gap: 0.5rem;\n}\n.type-option {\n  flex: 1;\n  padding: 0.5rem 0.75rem;\n  border: 1px solid #E0E0E0;\n  background: transparent;\n  border-radius: 0.5rem;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #868686;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.type-option:hover {\n  border-color: #0F6E86;\n  color: #0F6E86;\n}\n.type-option.active {\n  background-color: #0F6E86;\n  border-color: #0F6E86;\n  color: #FFFFFF;\n}\n.toggle-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  cursor: pointer;\n}\n.toggle-label {\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #25130E;\n}\n.toggle {\n  position: relative;\n  width: 44px;\n  height: 24px;\n  background-color: #E0E0E0;\n  border-radius: 12px;\n  transition: background-color 150ms ease;\n}\n.toggle.active {\n  background-color: #0F6E86;\n}\n.toggle.active .toggle-thumb {\n  transform: translateX(20px);\n}\n.toggle-thumb {\n  position: absolute;\n  top: 2px;\n  left: 2px;
1364\n  width: 20px;\n  height: 20px;\n  background-color: #FFFFFF;\n  border-radius: 50%;\n  transition: transform 150ms ease;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n.btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n  padding: 0.5rem 1rem;\n  border: none;\n  border-radius: 0.5rem;\n  font-size: 0.875rem;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 150ms ease;\n}\n.btn:disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n.btn .material-symbols-rounded {\n  font-size: 18px;\n}\n.btn-primary {\n  background-color: #0F6E86;\n  color: #FFFFFF;\n}\n.btn-primary:hover:not(:disabled) {\n  background-color: #0a5066;\n}\n.btn-outline {\n  background: transparent;\n  border: 1px solid #E0E0E0;\n  color: #25130E;\n}\n.btn-outline:hover:not(:disabled) {\n  border-color: #0F6E86;\n  color: #0F6E86;\n}\n.btn-sm {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.75rem;\n}\n.btn-danger {\n  background-color: #E85A4F;\n  color: #FFFFFF;\n}\n.btn-danger:hover:not(:disabled) {\n  background-color: #C62828;\n}\n.spinner-small {\n  width: 16px;\n  height: 16px;\n  border: 2px solid rgba(255, 255, 255, 0.3);\n  border-top-color: #FFFFFF;\n  border-radius: 50%;\n  animation: spin 0.8s linear infinite;\n}\n/*# sourceMappingURL=settings.component-3JI7VWGV.css.map */\n"] }]
1365  }], null, null);
1366})();
1367(() => {
1368  (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(SettingsComponent, { className: "SettingsComponent", filePath: "src/app/features/dashboard/pages/settings/settings.component.ts", lineNumber: 32 });
1369})();
1370export {
1371  SettingsComponent
1372};
1373//# sourceMappingURL=chunk-7DCNZT2O.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.