@almatar/smart-booking-dashboard 0.0.1 → 0.0.2-alpha.3

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 (128) hide show
  1. package/esm2022/lib/components/action-card/action-card.component.mjs +3 -3
  2. package/esm2022/lib/components/add-note-dialog/add-note-dialog.component.mjs +3 -3
  3. package/esm2022/lib/components/almatar-aside/aside-back-button.service.mjs +24 -0
  4. package/esm2022/lib/components/almatar-aside/aside.component.mjs +122 -0
  5. package/esm2022/lib/components/booking-input/booking-input.component.mjs +4 -3
  6. package/esm2022/lib/components/cancel-dialog/cancel-dialog.component.mjs +53 -4
  7. package/esm2022/lib/components/data-search/data-search.component.mjs +3 -3
  8. package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +544 -0
  9. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.mjs +43 -0
  10. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +296 -0
  11. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +88 -0
  12. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +242 -0
  13. package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.mjs +48 -0
  14. package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +129 -0
  15. package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +321 -0
  16. package/esm2022/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.mjs +52 -0
  17. package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.mjs +9 -0
  18. package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.mjs +7 -0
  19. package/esm2022/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.mjs +2 -0
  20. package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +457 -0
  21. package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.mjs +55 -0
  22. package/esm2022/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.mjs +48 -0
  23. package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +135 -0
  24. package/esm2022/lib/components/reissue-dialog/reissue-upgrade.store.mjs +305 -0
  25. package/esm2022/lib/components/reissue-dialog/reissue.store.mjs +349 -0
  26. package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +45 -0
  27. package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +140 -0
  28. package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +16 -0
  29. package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +104 -0
  30. package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +44 -0
  31. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +193 -0
  32. package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +88 -0
  33. package/esm2022/lib/components/result-panel/result-panel.component.mjs +3 -3
  34. package/esm2022/lib/components/shared/components/confirm-modal/confirm-modal.component.mjs +75 -0
  35. package/esm2022/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.mjs +46 -0
  36. package/esm2022/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.mjs +9 -0
  37. package/esm2022/lib/components/shared/interfaces/i-flight-refund-details.mjs +86 -0
  38. package/esm2022/lib/components/shared/models/cancel-hotel-booking.model.mjs +7 -0
  39. package/esm2022/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.mjs +27 -0
  40. package/esm2022/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.mjs +17 -0
  41. package/esm2022/lib/components/workflow-actions/workflow-actions.component.mjs +5 -3
  42. package/esm2022/lib/config/dashboard.config.mjs +3 -1
  43. package/esm2022/lib/config/hotel-actions.config.mjs +21 -1
  44. package/esm2022/lib/models/booking.types.mjs +73 -2
  45. package/esm2022/lib/models/reissue.types.mjs +2 -0
  46. package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +31 -7
  47. package/esm2022/lib/services/booking.service.mjs +6 -2
  48. package/esm2022/lib/services/reissue.service.mjs +142 -0
  49. package/esm2022/lib/services/toast.service.mjs +15 -7
  50. package/esm2022/lib/shared/components/currency-code-icon/currency-code-icon.component.mjs +35 -0
  51. package/esm2022/lib/shared/enums/brand-enums.enum.mjs +7 -0
  52. package/esm2022/lib/shared/environments/environment.mjs +10 -0
  53. package/esm2022/lib/shared/models/index.mjs +6 -0
  54. package/esm2022/lib/shared/modules/almatar-icon/almatar-icon.module.mjs +36 -0
  55. package/esm2022/lib/shared/modules/loader/loader.module.mjs +43 -0
  56. package/esm2022/lib/shared/pipes/exchange.pipe.mjs +49 -0
  57. package/esm2022/lib/shared/services/api.service.mjs +42 -0
  58. package/esm2022/lib/shared/services/shared.service.mjs +34 -0
  59. package/esm2022/lib/shared/services/translation.service.mjs +61 -0
  60. package/esm2022/lib/shared/services/webengage-tracking.service.mjs +28 -0
  61. package/esm2022/lib/shared/store/selectors/currency.selectors.mjs +9 -0
  62. package/esm2022/lib/utils/reissue-format.mjs +64 -0
  63. package/esm2022/lib/utils/reissue-url.builder.mjs +314 -0
  64. package/esm2022/public-api.mjs +3 -1
  65. package/fesm2022/almatar-smart-booking-dashboard.mjs +5387 -395
  66. package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
  67. package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
  68. package/lib/components/almatar-aside/aside-back-button.service.d.ts +11 -0
  69. package/lib/components/almatar-aside/aside.component.d.ts +46 -0
  70. package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +7 -0
  71. package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +97 -0
  72. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.d.ts +25 -0
  73. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +91 -0
  74. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.d.ts +39 -0
  75. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.d.ts +44 -0
  76. package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.d.ts +19 -0
  77. package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +38 -0
  78. package/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.d.ts +142 -0
  79. package/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.d.ts +23 -0
  80. package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.d.ts +7 -0
  81. package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.d.ts +5 -0
  82. package/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.d.ts +252 -0
  83. package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +88 -0
  84. package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.d.ts +21 -0
  85. package/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.d.ts +16 -0
  86. package/lib/components/reissue-dialog/reissue-dialog.component.d.ts +34 -0
  87. package/lib/components/reissue-dialog/reissue-upgrade.store.d.ts +96 -0
  88. package/lib/components/reissue-dialog/reissue.store.d.ts +124 -0
  89. package/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.d.ts +11 -0
  90. package/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.d.ts +16 -0
  91. package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +8 -0
  92. package/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.d.ts +21 -0
  93. package/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.d.ts +17 -0
  94. package/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.d.ts +28 -0
  95. package/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.d.ts +13 -0
  96. package/lib/components/result-panel/result-panel.component.d.ts +1 -1
  97. package/lib/components/shared/components/confirm-modal/confirm-modal.component.d.ts +17 -0
  98. package/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.d.ts +10 -0
  99. package/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.d.ts +7 -0
  100. package/lib/components/shared/interfaces/i-flight-refund-details.d.ts +73 -0
  101. package/lib/components/shared/models/cancel-hotel-booking.model.d.ts +6 -0
  102. package/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.d.ts +11 -0
  103. package/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.d.ts +7 -0
  104. package/lib/components/workflow-actions/workflow-actions.component.d.ts +3 -1
  105. package/lib/config/dashboard.config.d.ts +29 -0
  106. package/lib/models/booking.types.d.ts +28 -0
  107. package/lib/models/reissue.types.d.ts +147 -0
  108. package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +5 -1
  109. package/lib/services/reissue.service.d.ts +45 -0
  110. package/lib/services/toast.service.d.ts +14 -1
  111. package/lib/shared/components/currency-code-icon/currency-code-icon.component.d.ts +13 -0
  112. package/lib/shared/enums/brand-enums.enum.d.ts +5 -0
  113. package/lib/shared/environments/environment.d.ts +7 -0
  114. package/lib/shared/models/index.d.ts +11 -0
  115. package/lib/shared/modules/almatar-icon/almatar-icon.module.d.ts +13 -0
  116. package/lib/shared/modules/loader/loader.module.d.ts +13 -0
  117. package/lib/shared/pipes/exchange.pipe.d.ts +17 -0
  118. package/lib/shared/services/api.service.d.ts +43 -0
  119. package/lib/shared/services/shared.service.d.ts +12 -0
  120. package/lib/shared/services/translation.service.d.ts +17 -0
  121. package/lib/shared/services/webengage-tracking.service.d.ts +8 -0
  122. package/lib/shared/store/selectors/currency.selectors.d.ts +2 -0
  123. package/lib/utils/reissue-format.d.ts +28 -0
  124. package/lib/utils/reissue-url.builder.d.ts +24 -0
  125. package/package.json +9 -24
  126. package/public-api.d.ts +5 -1
  127. package/LICENSE +0 -21
  128. package/README.md +0 -132
@@ -0,0 +1,142 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { of } from 'rxjs';
4
+ import { catchError, map } from 'rxjs/operators';
5
+ import { SBD_CONFIG } from '../config/dashboard.config';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Query params the web always sends on `create-post-booking` (`getEntrySourceDeviceBrand()`): where the flow started
9
+ * and on which device. Same defaults as the web; ask the backend which values BO should send.
10
+ */
11
+ const POST_BOOKING_PARAMS = { entrySource: 'navigation bar', device: 'web' };
12
+ /**
13
+ * Reissue APIs — the same endpoints the consumer web uses (the backend opens them for BO).
14
+ */
15
+ export class SbdReissueService {
16
+ constructor() {
17
+ this.http = inject(HttpClient);
18
+ this.config = inject(SBD_CONFIG);
19
+ this.base = this.config.apiBase;
20
+ }
21
+ get headers() {
22
+ return { platform: this.config.platform };
23
+ }
24
+ /** `POST /v2/manage-booking/flight/create-post-booking/{bookingId}` -> `postBookingId`. */
25
+ createPostBooking(bookingId) {
26
+ return this.http
27
+ .post(`${this.base}/v2/manage-booking/flight/create-post-booking/${bookingId}`, null, // the web sends no body on this call
28
+ { headers: this.headers, params: POST_BOOKING_PARAMS })
29
+ .pipe(map(res => res?.data?.postBookingId ?? ''));
30
+ }
31
+ /** `GET /v3/manage-booking/flight/reissue/availability/{bookingId}/{postBookingId}` -> `data.legs[]`. */
32
+ getAvailability(bookingId, postBookingId, ctx) {
33
+ return this.http.get(`${this.base}/v3/manage-booking/flight/reissue/availability/${bookingId}/${postBookingId}`, { headers: this.headers });
34
+ }
35
+ /**
36
+ * `POST /v3/manage-booking/flight/reissue/upgrade-class/{bookingId}/{postBookingId}` — same call (and body) the
37
+ * web makes to decide whether the "Upgrade Class" option is shown. Returns the unwrapped `data`.
38
+ */
39
+ getUpgradeClassOptions(bookingId, postBookingId, ctx) {
40
+ const body = {
41
+ serviceName: 'change-flight-class',
42
+ legs: ctx.legs.map(l => ({
43
+ legId: l.legId,
44
+ legDepartureAirportCode: l.originCode,
45
+ legArrivalAirportCode: l.destinationCode,
46
+ legDepartureDate: l.departure,
47
+ })),
48
+ };
49
+ return this.http
50
+ .post(`${this.base}/v3/manage-booking/flight/reissue/upgrade-class/${bookingId}/${postBookingId}`, body, { headers: this.headers })
51
+ .pipe(map(res => (res?.data ?? res) ?? null));
52
+ }
53
+ /** Same rule as the web's `hasUpgradeOptions()`: at least one option in any section. */
54
+ hasUpgradeOptions(data) {
55
+ if (!data)
56
+ return false;
57
+ if (data.fareOptionScope === 'leg')
58
+ return (data.legs ?? []).some(l => (l.options?.length ?? 0) > 0);
59
+ return (data.options?.length ?? 0) > 0;
60
+ }
61
+ /**
62
+ * Airport picker for Change Route. Same typeahead endpoint the web and the backoffice already use
63
+ * (`StaticDataService.getAirports`) — no extra backend work needed. Response: `data[].items[].items[]`.
64
+ * An empty term makes no request (the dialog lists the booking's own airports meanwhile).
65
+ */
66
+ searchAirports(term) {
67
+ const q = term.trim();
68
+ if (!q)
69
+ return of([]);
70
+ return this.http
71
+ .get(`${this.base}/v1/typeahead-search-service/suggestion/suggest/flights`, { params: { q }, headers: this.headers })
72
+ .pipe(map(res => {
73
+ const out = [];
74
+ for (const group of res?.data ?? []) {
75
+ for (const item of group.items ?? []) {
76
+ if (item.items)
77
+ out.push(...item.items);
78
+ }
79
+ }
80
+ return out.map(a => ({
81
+ id: a.id,
82
+ name: a.name,
83
+ city_name: a.city_name,
84
+ country_name: a.country_name,
85
+ type: a.type === 'airport' ? 'airport' : 'city',
86
+ }));
87
+ }), catchError(() => of([])));
88
+ }
89
+ // ── Upgrade Class ──────────────────────────────────────────────────────────
90
+ /**
91
+ * `POST /v3/manage-booking/flight/reissue/choose-flight/{bookingId}/{postBookingId}` — prices the chosen upgrade
92
+ * option. Same endpoint/body the web uses; response `data` carries `itineraryAvailable`, `priceChanged`, `price`, `currency`.
93
+ */
94
+ chooseFlight(bookingId, postBookingId, body) {
95
+ return this.http
96
+ .post(`${this.base}/v3/manage-booking/flight/reissue/choose-flight/${bookingId}/${postBookingId}`, body, { headers: this.headers })
97
+ .pipe(map(res => res?.data ?? {}));
98
+ }
99
+ /** `POST /v2/manage-booking/flight/book-now` — places a zero-total reissue (no payment needed). */
100
+ bookNow(postBookingId) {
101
+ return this.http.post(`${this.base}/v2/manage-booking/flight/book-now`, { postBookingId }, { headers: this.headers });
102
+ }
103
+ /**
104
+ * Payment link of a reissue with an amount to pay. There is no separate API: the backend puts the link in the
105
+ * cart of the post-booking (`GET /v2/manage-booking/flight/cart/{postBookingId}`, the call the web checkout reads).
106
+ * The name of the field is not final yet: the first of the names below that exists is used, and the call fails
107
+ * with a clear message when the cart has none.
108
+ */
109
+ getPaymentLink(postBookingId, amount = 0, currency = '') {
110
+ return this.http
111
+ .get(`${this.base}/v2/manage-booking/flight/cart/${postBookingId}`, {
112
+ headers: this.headers,
113
+ })
114
+ .pipe(map(res => {
115
+ const cart = res?.data ?? {};
116
+ let url = cart['paymentLink'] ?? cart['link'] ?? cart['payment']?.link ?? cart['payment']?.paymentLink ?? cart['payment']?.url;
117
+ if (!url)
118
+ throw new Error('The cart has no payment link yet.');
119
+ // The cart returns only a path ("/<paymentId>"): the customer page base comes from the host config.
120
+ if (!/^https?:\/\//i.test(url)) {
121
+ const linkBase = this.config.paymentLinkBase?.replace(/\/+$/, '');
122
+ if (!linkBase) {
123
+ throw new Error(`The cart returned a relative link (${url}) and no paymentLinkBase is configured.`);
124
+ }
125
+ url = `${linkBase}${url.startsWith('/') ? '' : '/'}${url}`;
126
+ }
127
+ return {
128
+ url,
129
+ amount: cart['payment']?.amount ?? amount,
130
+ currency: cart['payment']?.currency ?? currency,
131
+ expiresAt: cart['payment']?.expiryDate ?? cart['expiryDate'],
132
+ };
133
+ }));
134
+ }
135
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
136
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueService, providedIn: 'root' }); }
137
+ }
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdReissueService, decorators: [{
139
+ type: Injectable,
140
+ args: [{ providedIn: 'root' }]
141
+ }] });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVpc3N1ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9zZXJ2aWNlcy9yZWlzc3VlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBV3hEOzs7R0FHRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBRTdFOztHQUVHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVVLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixTQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0E0SnBDO0lBMUpDLElBQVksT0FBTztRQUNqQixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELDJGQUEyRjtJQUMzRixpQkFBaUIsQ0FBQyxTQUFpQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUNILEdBQUcsSUFBSSxDQUFDLElBQUksaURBQWlELFNBQVMsRUFBRSxFQUN4RSxJQUFJLEVBQUUscUNBQXFDO1FBQzND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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsT0FBTztnQkFDTCxHQUFHO2dCQUNILE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU07Z0JBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxJQUFJLFFBQVE7Z0JBQy9DLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDN0QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDOytHQTlKVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQURKLE1BQU07OzRGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNCRF9DT05GSUcgfSBmcm9tICcuLi9jb25maWcvZGFzaGJvYXJkLmNvbmZpZyc7XG5pbXBvcnQge1xuICBSZWlzc3VlQWlycG9ydCxcbiAgUmVpc3N1ZUF2YWlsYWJpbGl0eVJlc3BvbnNlLFxuICBSZWlzc3VlQm9va2luZ0NvbnRleHQsXG4gIFJlaXNzdWVDaG9vc2VGbGlnaHRSZXF1ZXN0LFxuICBSZWlzc3VlQ2hvb3NlRmxpZ2h0UmVzcG9uc2UsXG4gIFJlaXNzdWVQYXltZW50TGluayxcbiAgUmVpc3N1ZVVwZ3JhZGVPcHRpb25zUmVzcG9uc2UsXG59IGZyb20gJy4uL21vZGVscy9yZWlzc3VlLnR5cGVzJztcblxuLyoqXG4gKiBRdWVyeSBwYXJhbXMgdGhlIHdlYiBhbHdheXMgc2VuZHMgb24gYGNyZWF0ZS1wb3N0LWJvb2tpbmdgIChgZ2V0RW50cnlTb3VyY2VEZXZpY2VCcmFuZCgpYCk6IHdoZXJlIHRoZSBmbG93IHN0YXJ0ZWRcbiAqIGFuZCBvbiB3aGljaCBkZXZpY2UuIFNhbWUgZGVmYXVsdHMgYXMgdGhlIHdlYjsgYXNrIHRoZSBiYWNrZW5kIHdoaWNoIHZhbHVlcyBCTyBzaG91bGQgc2VuZC5cbiAqL1xuY29uc3QgUE9TVF9CT09LSU5HX1BBUkFNUyA9IHsgZW50cnlTb3VyY2U6ICduYXZpZ2F0aW9uIGJhcicsIGRldmljZTogJ3dlYicgfTtcblxuLyoqXG4gKiBSZWlzc3VlIEFQSXMg4oCUIHRoZSBzYW1lIGVuZHBvaW50cyB0aGUgY29uc3VtZXIgd2ViIHVzZXMgKHRoZSBiYWNrZW5kIG9wZW5zIHRoZW0gZm9yIEJPKS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTYmRSZWlzc3VlU2VydmljZSB7XG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoU0JEX0NPTkZJRyk7XG4gIHByaXZhdGUgYmFzZSA9IHRoaXMuY29uZmlnLmFwaUJhc2U7XG5cbiAgcHJpdmF0ZSBnZXQgaGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4geyBwbGF0Zm9ybTogdGhpcy5jb25maWcucGxhdGZvcm0gfTtcbiAgfVxuXG4gIC8qKiBgUE9TVCAvdjIvbWFuYWdlLWJvb2tpbmcvZmxpZ2h0L2NyZWF0ZS1wb3N0LWJvb2tpbmcve2Jvb2tpbmdJZH1gIC0+IGBwb3N0Qm9va2luZ0lkYC4gKi9cbiAgY3JlYXRlUG9zdEJvb2tpbmcoYm9va2luZ0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgZGF0YT86IHsgcG9zdEJvb2tpbmdJZD86IHN0cmluZyB9IH0+KFxuICAgICAgICBgJHt0aGlzLmJhc2V9L3YyL21hbmFnZS1ib29raW5nL2ZsaWdodC9jcmVhdGUtcG9zdC1ib29raW5nLyR7Ym9va2luZ0lkfWAsXG4gICAgICAgIG51bGwsIC8vIHRoZSB3ZWIgc2VuZHMgbm8gYm9keSBvbiB0aGlzIGNhbGxcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsIHBhcmFtczogUE9TVF9CT09LSU5HX1BBUkFNUyB9LFxuICAgICAgKVxuICAgICAgLnBpcGUobWFwKHJlcyA9PiByZXM/LmRhdGE/LnBvc3RCb29raW5nSWQgPz8gJycpKTtcbiAgfVxuXG4gIC8qKiBgR0VUIC92My9tYW5hZ2UtYm9va2luZy9mbGlnaHQvcmVpc3N1ZS9hdmFpbGFiaWxpdHkve2Jvb2tpbmdJZH0ve3Bvc3RCb29raW5nSWR9YCAtPiBgZGF0YS5sZWdzW11gLiAqL1xuICBnZXRBdmFpbGFiaWxpdHkoXG4gICAgYm9va2luZ0lkOiBzdHJpbmcsXG4gICAgcG9zdEJvb2tpbmdJZDogc3RyaW5nLFxuICAgIGN0eD86IFJlaXNzdWVCb29raW5nQ29udGV4dCxcbiAgKTogT2JzZXJ2YWJsZTxSZWlzc3VlQXZhaWxhYmlsaXR5UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxSZWlzc3VlQXZhaWxhYmlsaXR5UmVzcG9uc2U+KFxuICAgICAgYCR7dGhpcy5iYXNlfS92My9tYW5hZ2UtYm9va2luZy9mbGlnaHQvcmVpc3N1ZS9hdmFpbGFiaWxpdHkvJHtib29raW5nSWR9LyR7cG9zdEJvb2tpbmdJZH1gLFxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGBQT1NUIC92My9tYW5hZ2UtYm9va2luZy9mbGlnaHQvcmVpc3N1ZS91cGdyYWRlLWNsYXNzL3tib29raW5nSWR9L3twb3N0Qm9va2luZ0lkfWAg4oCUIHNhbWUgY2FsbCAoYW5kIGJvZHkpIHRoZVxuICAgKiB3ZWIgbWFrZXMgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIFwiVXBncmFkZSBDbGFzc1wiIG9wdGlvbiBpcyBzaG93bi4gUmV0dXJucyB0aGUgdW53cmFwcGVkIGBkYXRhYC5cbiAgICovXG4gIGdldFVwZ3JhZGVDbGFzc09wdGlvbnMoXG4gICAgYm9va2luZ0lkOiBzdHJpbmcsXG4gICAgcG9zdEJvb2tpbmdJZDogc3RyaW5nLFxuICAgIGN0eDogUmVpc3N1ZUJvb2tpbmdDb250ZXh0LFxuICApOiBPYnNlcnZhYmxlPFJlaXNzdWVVcGdyYWRlT3B0aW9uc1Jlc3BvbnNlIHwgbnVsbD4ge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICBzZXJ2aWNlTmFtZTogJ2NoYW5nZS1mbGlnaHQtY2xhc3MnLFxuICAgICAgbGVnczogY3R4LmxlZ3MubWFwKGwgPT4gKHtcbiAgICAgICAgbGVnSWQ6IGwubGVnSWQsXG4gICAgICAgIGxlZ0RlcGFydHVyZUFpcnBvcnRDb2RlOiBsLm9yaWdpbkNvZGUsXG4gICAgICAgIGxlZ0Fycml2YWxBaXJwb3J0Q29kZTogbC5kZXN0aW5hdGlvbkNvZGUsXG4gICAgICAgIGxlZ0RlcGFydHVyZURhdGU6IGwuZGVwYXJ0dXJlLFxuICAgICAgfSkpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBkYXRhPzogUmVpc3N1ZVVwZ3JhZGVPcHRpb25zUmVzcG9uc2UgfT4oXG4gICAgICAgIGAke3RoaXMuYmFzZX0vdjMvbWFuYWdlLWJvb2tpbmcvZmxpZ2h0L3JlaXNzdWUvdXBncmFkZS1jbGFzcy8ke2Jvb2tpbmdJZH0vJHtwb3N0Qm9va2luZ0lkfWAsXG4gICAgICAgIGJvZHksXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0sXG4gICAgICApXG4gICAgICAucGlwZShtYXAocmVzID0+IChyZXM/LmRhdGEgPz8gKHJlcyBhcyBSZWlzc3VlVXBncmFkZU9wdGlvbnNSZXNwb25zZSkpID8/IG51bGwpKTtcbiAgfVxuXG4gIC8qKiBTYW1lIHJ1bGUgYXMgdGhlIHdlYidzIGBoYXNVcGdyYWRlT3B0aW9ucygpYDogYXQgbGVhc3Qgb25lIG9wdGlvbiBpbiBhbnkgc2VjdGlvbi4gKi9cbiAgaGFzVXBncmFkZU9wdGlvbnMoZGF0YTogUmVpc3N1ZVVwZ3JhZGVPcHRpb25zUmVzcG9uc2UgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRhdGEuZmFyZU9wdGlvblNjb3BlID09PSAnbGVnJykgcmV0dXJuIChkYXRhLmxlZ3MgPz8gW10pLnNvbWUobCA9PiAobC5vcHRpb25zPy5sZW5ndGggPz8gMCkgPiAwKTtcbiAgICByZXR1cm4gKGRhdGEub3B0aW9ucz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBaXJwb3J0IHBpY2tlciBmb3IgQ2hhbmdlIFJvdXRlLiBTYW1lIHR5cGVhaGVhZCBlbmRwb2ludCB0aGUgd2ViIGFuZCB0aGUgYmFja29mZmljZSBhbHJlYWR5IHVzZVxuICAgKiAoYFN0YXRpY0RhdGFTZXJ2aWNlLmdldEFpcnBvcnRzYCkg4oCUIG5vIGV4dHJhIGJhY2tlbmQgd29yayBuZWVkZWQuIFJlc3BvbnNlOiBgZGF0YVtdLml0ZW1zW10uaXRlbXNbXWAuXG4gICAqIEFuIGVtcHR5IHRlcm0gbWFrZXMgbm8gcmVxdWVzdCAodGhlIGRpYWxvZyBsaXN0cyB0aGUgYm9va2luZydzIG93biBhaXJwb3J0cyBtZWFud2hpbGUpLlxuICAgKi9cbiAgc2VhcmNoQWlycG9ydHModGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZWlzc3VlQWlycG9ydFtdPiB7XG4gICAgY29uc3QgcSA9IHRlcm0udHJpbSgpO1xuICAgIGlmICghcSkgcmV0dXJuIG9mKFtdKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8eyBkYXRhPzogeyBpdGVtcz86IHsgaXRlbXM/OiBSZWlzc3VlQWlycG9ydFtdIH1bXSB9W10gfT4oXG4gICAgICAgIGAke3RoaXMuYmFzZX0vdjEvdHlwZWFoZWFkLXNlYXJjaC1zZXJ2aWNlL3N1Z2dlc3Rpb24vc3VnZ2VzdC9mbGlnaHRzYCxcbiAgICAgICAgeyBwYXJhbXM6IHsgcSB9LCBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSxcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICBjb25zdCBvdXQ6IFJlaXNzdWVBaXJwb3J0W10gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHJlcz8uZGF0YSA/PyBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwLml0ZW1zID8/IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLml0ZW1zKSBvdXQucHVzaCguLi5pdGVtLml0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dC5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGEuaWQsXG4gICAgICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgICAgICBjaXR5X25hbWU6IGEuY2l0eV9uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9uYW1lOiBhLmNvdW50cnlfbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGEudHlwZSA9PT0gJ2FpcnBvcnQnID8gKCdhaXJwb3J0JyBhcyBjb25zdCkgOiAoJ2NpdHknIGFzIGNvbnN0KSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKFtdIGFzIFJlaXNzdWVBaXJwb3J0W10pKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyDilIDilIAgVXBncmFkZSBDbGFzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogYFBPU1QgL3YzL21hbmFnZS1ib29raW5nL2ZsaWdodC9yZWlzc3VlL2Nob29zZS1mbGlnaHQve2Jvb2tpbmdJZH0ve3Bvc3RCb29raW5nSWR9YCDigJQgcHJpY2VzIHRoZSBjaG9zZW4gdXBncmFkZVxuICAgKiBvcHRpb24uIFNhbWUgZW5kcG9pbnQvYm9keSB0aGUgd2ViIHVzZXM7IHJlc3BvbnNlIGBkYXRhYCBjYXJyaWVzIGBpdGluZXJhcnlBdmFpbGFibGVgLCBgcHJpY2VDaGFuZ2VkYCwgYHByaWNlYCwgYGN1cnJlbmN5YC5cbiAgICovXG4gIGNob29zZUZsaWdodChcbiAgICBib29raW5nSWQ6IHN0cmluZyxcbiAgICBwb3N0Qm9va2luZ0lkOiBzdHJpbmcsXG4gICAgYm9keTogUmVpc3N1ZUNob29zZUZsaWdodFJlcXVlc3QsXG4gICk6IE9ic2VydmFibGU8UmVpc3N1ZUNob29zZUZsaWdodFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBkYXRhPzogUmVpc3N1ZUNob29zZUZsaWdodFJlc3BvbnNlIH0+KFxuICAgICAgICBgJHt0aGlzLmJhc2V9L3YzL21hbmFnZS1ib29raW5nL2ZsaWdodC9yZWlzc3VlL2Nob29zZS1mbGlnaHQvJHtib29raW5nSWR9LyR7cG9zdEJvb2tpbmdJZH1gLFxuICAgICAgICBib2R5LFxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuaGVhZGVycyB9LFxuICAgICAgKVxuICAgICAgLnBpcGUobWFwKHJlcyA9PiByZXM/LmRhdGEgPz8ge30pKTtcbiAgfVxuXG4gIC8qKiBgUE9TVCAvdjIvbWFuYWdlLWJvb2tpbmcvZmxpZ2h0L2Jvb2stbm93YCDigJQgcGxhY2VzIGEgemVyby10b3RhbCByZWlzc3VlIChubyBwYXltZW50IG5lZWRlZCkuICovXG4gIGJvb2tOb3cocG9zdEJvb2tpbmdJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmFzZX0vdjIvbWFuYWdlLWJvb2tpbmcvZmxpZ2h0L2Jvb2stbm93YCwgeyBwb3N0Qm9va2luZ0lkIH0sIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBheW1lbnQgbGluayBvZiBhIHJlaXNzdWUgd2l0aCBhbiBhbW91bnQgdG8gcGF5LiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBBUEk6IHRoZSBiYWNrZW5kIHB1dHMgdGhlIGxpbmsgaW4gdGhlXG4gICAqIGNhcnQgb2YgdGhlIHBvc3QtYm9va2luZyAoYEdFVCAvdjIvbWFuYWdlLWJvb2tpbmcvZmxpZ2h0L2NhcnQve3Bvc3RCb29raW5nSWR9YCwgdGhlIGNhbGwgdGhlIHdlYiBjaGVja291dCByZWFkcykuXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBpcyBub3QgZmluYWwgeWV0OiB0aGUgZmlyc3Qgb2YgdGhlIG5hbWVzIGJlbG93IHRoYXQgZXhpc3RzIGlzIHVzZWQsIGFuZCB0aGUgY2FsbCBmYWlsc1xuICAgKiB3aXRoIGEgY2xlYXIgbWVzc2FnZSB3aGVuIHRoZSBjYXJ0IGhhcyBub25lLlxuICAgKi9cbiAgZ2V0UGF5bWVudExpbmsocG9zdEJvb2tpbmdJZDogc3RyaW5nLCBhbW91bnQgPSAwLCBjdXJyZW5jeSA9ICcnKTogT2JzZXJ2YWJsZTxSZWlzc3VlUGF5bWVudExpbms+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfT4oYCR7dGhpcy5iYXNlfS92Mi9tYW5hZ2UtYm9va2luZy9mbGlnaHQvY2FydC8ke3Bvc3RCb29raW5nSWR9YCwge1xuICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhcnQgPSByZXM/LmRhdGEgPz8ge307XG4gICAgICAgICAgbGV0IHVybDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgIGNhcnRbJ3BheW1lbnRMaW5rJ10gPz8gY2FydFsnbGluayddID8/IGNhcnRbJ3BheW1lbnQnXT8ubGluayA/PyBjYXJ0WydwYXltZW50J10/LnBheW1lbnRMaW5rID8/IGNhcnRbJ3BheW1lbnQnXT8udXJsO1xuICAgICAgICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjYXJ0IGhhcyBubyBwYXltZW50IGxpbmsgeWV0LicpO1xuICAgICAgICAgIC8vIFRoZSBjYXJ0IHJldHVybnMgb25seSBhIHBhdGggKFwiLzxwYXltZW50SWQ+XCIpOiB0aGUgY3VzdG9tZXIgcGFnZSBiYXNlIGNvbWVzIGZyb20gdGhlIGhvc3QgY29uZmlnLlxuICAgICAgICAgIGlmICghL15odHRwcz86XFwvXFwvL2kudGVzdCh1cmwpKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rQmFzZSA9IHRoaXMuY29uZmlnLnBheW1lbnRMaW5rQmFzZT8ucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgICAgICAgICBpZiAoIWxpbmtCYXNlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNhcnQgcmV0dXJuZWQgYSByZWxhdGl2ZSBsaW5rICgke3VybH0pIGFuZCBubyBwYXltZW50TGlua0Jhc2UgaXMgY29uZmlndXJlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVybCA9IGAke2xpbmtCYXNlfSR7dXJsLnN0YXJ0c1dpdGgoJy8nKSA/ICcnIDogJy8nfSR7dXJsfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBhbW91bnQ6IGNhcnRbJ3BheW1lbnQnXT8uYW1vdW50ID8/IGFtb3VudCxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBjYXJ0WydwYXltZW50J10/LmN1cnJlbmN5ID8/IGN1cnJlbmN5LFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBjYXJ0WydwYXltZW50J10/LmV4cGlyeURhdGUgPz8gY2FydFsnZXhwaXJ5RGF0ZSddLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxufVxuIl19
@@ -1,14 +1,22 @@
1
- import { Injectable, inject } from '@angular/core';
1
+ import { Injectable, InjectionToken, inject } from '@angular/core';
2
2
  import { ToastrService } from 'ngx-toastr';
3
3
  import * as i0 from "@angular/core";
4
+ export const SBD_TOAST_HANDLER = new InjectionToken('SBD_TOAST_HANDLER');
4
5
  export class SbdToastService {
5
6
  constructor() {
6
- this.toastr = inject(ToastrService);
7
+ // The host's handler wins; ngx-toastr is the fallback and is optional, so a host that never configured it still works.
8
+ this.handler = inject(SBD_TOAST_HANDLER, { optional: true }) ?? inject(ToastrService, { optional: true });
9
+ }
10
+ success(msg) { this.show('success', msg); }
11
+ error(msg) { this.show('error', msg); }
12
+ info(msg) { this.show('info', msg); }
13
+ warning(msg) { this.show('warning', msg); }
14
+ show(kind, msg) {
15
+ if (this.handler)
16
+ this.handler[kind](msg);
17
+ else
18
+ console.warn(`[smart-booking-dashboard] ${kind}: ${msg}`);
7
19
  }
8
- success(msg) { this.toastr.success(msg); }
9
- error(msg) { this.toastr.error(msg); }
10
- info(msg) { this.toastr.info(msg); }
11
- warning(msg) { this.toastr.warning(msg); }
12
20
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13
21
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdToastService, providedIn: 'root' }); }
14
22
  }
@@ -16,4 +24,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
16
24
  type: Injectable,
17
25
  args: [{ providedIn: 'root' }]
18
26
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2VydmljZXMvdG9hc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQUczQyxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVVLFdBQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7S0FNeEM7SUFKQyxPQUFPLENBQUMsR0FBVyxJQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxLQUFLLENBQUMsR0FBVyxJQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxJQUFJLENBQUMsR0FBVyxJQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxPQUFPLENBQUMsR0FBVyxJQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzsrR0FON0MsZUFBZTttSEFBZixlQUFlLGNBREYsTUFBTTs7NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU2JkVG9hc3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB0b2FzdHIgPSBpbmplY3QoVG9hc3RyU2VydmljZSk7XG5cbiAgc3VjY2Vzcyhtc2c6IHN0cmluZyk6IHZvaWQgeyB0aGlzLnRvYXN0ci5zdWNjZXNzKG1zZyk7IH1cbiAgZXJyb3IobXNnOiBzdHJpbmcpOiB2b2lkICAgeyB0aGlzLnRvYXN0ci5lcnJvcihtc2cpOyB9XG4gIGluZm8obXNnOiBzdHJpbmcpOiB2b2lkICAgIHsgdGhpcy50b2FzdHIuaW5mbyhtc2cpOyB9XG4gIHdhcm5pbmcobXNnOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy50b2FzdHIud2FybmluZyhtc2cpOyB9XG59XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2VydmljZXMvdG9hc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFhM0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWtCLG1CQUFtQixDQUFDLENBQUM7QUFHMUYsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFFRSx1SEFBdUg7UUFDL0csWUFBTyxHQUNiLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQVc5RjtJQVRDLE9BQU8sQ0FBQyxHQUFXLElBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxHQUFXLElBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxHQUFXLElBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxHQUFXLElBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpELElBQUksQ0FBQyxJQUEyQixFQUFFLEdBQVc7UUFDbkQsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7K0dBYlUsZUFBZTttSEFBZixlQUFlLGNBREYsTUFBTTs7NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuXG4vKipcbiAqIEhvdyB0aGUgZGFzaGJvYXJkIHNob3dzIG1lc3NhZ2VzLiBUaGUgYmFja29mZmljZSB1c2VzIG5neC10b2FzdHIgKHRoZSBkZWZhdWx0KTsgYSBob3N0IHRoYXQgaGFzIGl0cyBvd24gdG9hc3RcbiAqIHN5c3RlbSAoZS5nLiBIZWxpeCB3aXRoIFByaW1lTkcncyBgTWVzc2FnZVNlcnZpY2VgKSBwcm92aWRlcyB0aGlzIHRva2VuIGFuZCB0aGUgZGFzaGJvYXJkIHVzZXMgaXQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYmRUb2FzdEhhbmRsZXIge1xuICBzdWNjZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XG4gIGluZm8obWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgd2FybmluZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgU0JEX1RPQVNUX0hBTkRMRVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2JkVG9hc3RIYW5kbGVyPignU0JEX1RPQVNUX0hBTkRMRVInKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTYmRUb2FzdFNlcnZpY2Uge1xuICAvLyBUaGUgaG9zdCdzIGhhbmRsZXIgd2luczsgbmd4LXRvYXN0ciBpcyB0aGUgZmFsbGJhY2sgYW5kIGlzIG9wdGlvbmFsLCBzbyBhIGhvc3QgdGhhdCBuZXZlciBjb25maWd1cmVkIGl0IHN0aWxsIHdvcmtzLlxuICBwcml2YXRlIGhhbmRsZXI6IFNiZFRvYXN0SGFuZGxlciB8IG51bGwgPVxuICAgIGluamVjdChTQkRfVE9BU1RfSEFORExFUiwgeyBvcHRpb25hbDogdHJ1ZSB9KSA/PyBpbmplY3QoVG9hc3RyU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBzdWNjZXNzKG1zZzogc3RyaW5nKTogdm9pZCB7IHRoaXMuc2hvdygnc3VjY2VzcycsIG1zZyk7IH1cbiAgZXJyb3IobXNnOiBzdHJpbmcpOiB2b2lkICAgeyB0aGlzLnNob3coJ2Vycm9yJywgbXNnKTsgfVxuICBpbmZvKG1zZzogc3RyaW5nKTogdm9pZCAgICB7IHRoaXMuc2hvdygnaW5mbycsIG1zZyk7IH1cbiAgd2FybmluZyhtc2c6IHN0cmluZyk6IHZvaWQgeyB0aGlzLnNob3coJ3dhcm5pbmcnLCBtc2cpOyB9XG5cbiAgcHJpdmF0ZSBzaG93KGtpbmQ6IGtleW9mIFNiZFRvYXN0SGFuZGxlciwgbXNnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyKSB0aGlzLmhhbmRsZXJba2luZF0obXNnKTtcbiAgICBlbHNlIGNvbnNvbGUud2FybihgW3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkXSAke2tpbmR9OiAke21zZ31gKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,35 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ export var CurrencySizeEnum;
5
+ (function (CurrencySizeEnum) {
6
+ CurrencySizeEnum["SMALL"] = "small";
7
+ CurrencySizeEnum["MEDIUM"] = "medium";
8
+ CurrencySizeEnum["LARGE"] = "large";
9
+ CurrencySizeEnum["LG"] = "large";
10
+ })(CurrencySizeEnum || (CurrencySizeEnum = {}));
11
+ export class CurrencyCodeIconComponent {
12
+ constructor() {
13
+ this.currencyCode = 'SAR';
14
+ this.size = CurrencySizeEnum.MEDIUM;
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CurrencyCodeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CurrencyCodeIconComponent, isStandalone: true, selector: "currency-code-icon", inputs: { currencyCode: "currencyCode", size: "size" }, ngImport: i0, template: `
18
+ <span class="currency-icon" [class]="'currency-icon--' + size">
19
+ {{ currencyCode }}
20
+ </span>
21
+ `, isInline: true, styles: [".currency-icon{display:inline-block;font-weight:600}.currency-icon--small{font-size:.75rem}.currency-icon--medium{font-size:1rem}.currency-icon--large{font-size:1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CurrencyCodeIconComponent, decorators: [{
24
+ type: Component,
25
+ args: [{ selector: 'currency-code-icon', standalone: true, imports: [CommonModule], template: `
26
+ <span class="currency-icon" [class]="'currency-icon--' + size">
27
+ {{ currencyCode }}
28
+ </span>
29
+ `, styles: [".currency-icon{display:inline-block;font-weight:600}.currency-icon--small{font-size:.75rem}.currency-icon--medium{font-size:1rem}.currency-icon--large{font-size:1.25rem}\n"] }]
30
+ }], propDecorators: { currencyCode: [{
31
+ type: Input
32
+ }], size: [{
33
+ type: Input
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3ktY29kZS1pY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY3VycmVuY3ktY29kZS1pY29uL2N1cnJlbmN5LWNvZGUtaWNvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUUvQyxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLG1DQUFlLENBQUE7SUFDZixxQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBZSxDQUFBO0lBQ2YsZ0NBQVksQ0FBQTtBQUNkLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBOEJELE1BQU0sT0FBTyx5QkFBeUI7SUE1QnRDO1FBNkJXLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFNBQUksR0FBcUIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0tBQzNEOytHQUhZLHlCQUF5QjttR0FBekIseUJBQXlCLHNJQXhCMUI7Ozs7R0FJVCxvUEFMUyxZQUFZOzs0RkF5QlgseUJBQXlCO2tCQTVCckMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7Ozs7R0FJVDs4QkFxQlEsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgZW51bSBDdXJyZW5jeVNpemVFbnVtIHtcbiAgU01BTEwgPSAnc21hbGwnLFxuICBNRURJVU0gPSAnbWVkaXVtJyxcbiAgTEFSR0UgPSAnbGFyZ2UnLFxuICBMRyA9ICdsYXJnZSdcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3VycmVuY3ktY29kZS1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNwYW4gY2xhc3M9XCJjdXJyZW5jeS1pY29uXCIgW2NsYXNzXT1cIidjdXJyZW5jeS1pY29uLS0nICsgc2l6ZVwiPlxuICAgICAge3sgY3VycmVuY3lDb2RlIH19XG4gICAgPC9zcGFuPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLmN1cnJlbmN5LWljb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAuY3VycmVuY3ktaWNvbi0tc21hbGwge1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIH1cblxuICAgIC5jdXJyZW5jeS1pY29uLS1tZWRpdW0ge1xuICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgIH1cblxuICAgIC5jdXJyZW5jeS1pY29uLS1sYXJnZSB7XG4gICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBDdXJyZW5jeUNvZGVJY29uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgY3VycmVuY3lDb2RlID0gJ1NBUic7XG4gIEBJbnB1dCgpIHNpemU6IEN1cnJlbmN5U2l6ZUVudW0gPSBDdXJyZW5jeVNpemVFbnVtLk1FRElVTTtcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export var brandEnum;
2
+ (function (brandEnum) {
3
+ brandEnum["almatar"] = "almatar";
4
+ brandEnum["rehlat"] = "rehlat";
5
+ brandEnum["tajawal"] = "tajawal";
6
+ })(brandEnum || (brandEnum = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtZW51bXMuZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2hhcmVkL2VudW1zL2JyYW5kLWVudW1zLmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQixnQ0FBbUIsQ0FBQTtJQUNuQiw4QkFBaUIsQ0FBQTtJQUNqQixnQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsU0FBUyxLQUFULFNBQVMsUUFJcEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBicmFuZEVudW0ge1xuICBhbG1hdGFyID0gJ2FsbWF0YXInLFxuICByZWhsYXQgPSAncmVobGF0JyxcbiAgdGFqYXdhbCA9ICd0YWphd2FsJ1xufVxuIl19
@@ -0,0 +1,10 @@
1
+ // Environment configuration stub
2
+ export const environments = {
3
+ production: false,
4
+ apiUrl: '',
5
+ baseUrl: '',
6
+ isTenant: false,
7
+ brandName: 'almatar',
8
+ // Add other environment properties as needed
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUMxQixVQUFVLEVBQUUsS0FBSztJQUNqQixNQUFNLEVBQUUsRUFBRTtJQUNWLE9BQU8sRUFBRSxFQUFFO0lBQ1gsUUFBUSxFQUFFLEtBQUs7SUFDZixTQUFTLEVBQUUsU0FBUztJQUNwQiw2Q0FBNkM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gc3R1YlxuXG5leHBvcnQgY29uc3QgZW52aXJvbm1lbnRzID0ge1xuICBwcm9kdWN0aW9uOiBmYWxzZSxcbiAgYXBpVXJsOiAnJyxcbiAgYmFzZVVybDogJycsXG4gIGlzVGVuYW50OiBmYWxzZSxcbiAgYnJhbmROYW1lOiAnYWxtYXRhcicsXG4gIC8vIEFkZCBvdGhlciBlbnZpcm9ubWVudCBwcm9wZXJ0aWVzIGFzIG5lZWRlZFxufTtcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ // Shared models and types
2
+ export const loyaltyPointsMethods = {
3
+ ALMATAR_POINTS: 'ALMATAR_POINTS',
4
+ ALFURSAN: 'ALFURSAN',
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL3NoYXJlZC9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBUzFCLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsUUFBUSxFQUFFLFVBQVU7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hhcmVkIG1vZGVscyBhbmQgdHlwZXNcblxuZXhwb3J0IGludGVyZmFjZSBJQ3VycmVuY3kge1xuICBjb2RlOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN5bWJvbD86IHN0cmluZztcbiAgcmF0ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGxveWFsdHlQb2ludHNNZXRob2RzID0ge1xuICBBTE1BVEFSX1BPSU5UUzogJ0FMTUFUQVJfUE9JTlRTJyxcbiAgQUxGVVJTQU46ICdBTEZVUlNBTicsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb3lhbHR5UG9pbnRzTWV0aG9kID0gdHlwZW9mIGxveWFsdHlQb2ludHNNZXRob2RzW2tleW9mIHR5cGVvZiBsb3lhbHR5UG9pbnRzTWV0aG9kc107XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { NgModule, Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ export class AlmatarIconComponent {
5
+ constructor() {
6
+ this.name = '';
7
+ this.size = 16;
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AlmatarIconComponent, isStandalone: true, selector: "almatar-icon", inputs: { name: "name", size: "size" }, ngImport: i0, template: `
11
+ <i [class]="'pi pi-' + name" [style.font-size.px]="size"></i>
12
+ `, isInline: true, styles: [":host{display:inline-flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarIconComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'almatar-icon', standalone: true, imports: [CommonModule], template: `
17
+ <i [class]="'pi pi-' + name" [style.font-size.px]="size"></i>
18
+ `, styles: [":host{display:inline-flex;align-items:center;justify-content:center}\n"] }]
19
+ }], propDecorators: { name: [{
20
+ type: Input
21
+ }], size: [{
22
+ type: Input
23
+ }] } });
24
+ export class AlmatarIconModule {
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
26
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AlmatarIconModule, imports: [CommonModule, AlmatarIconComponent], exports: [AlmatarIconComponent] }); }
27
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarIconModule, imports: [CommonModule, AlmatarIconComponent] }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarIconModule, decorators: [{
30
+ type: NgModule,
31
+ args: [{
32
+ imports: [CommonModule, AlmatarIconComponent],
33
+ exports: [AlmatarIconComponent]
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1pY29uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2hhcmVkL21vZHVsZXMvYWxtYXRhci1pY29uL2FsbWF0YXItaWNvbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFpQi9DLE1BQU0sT0FBTyxvQkFBb0I7SUFmakM7UUFnQlcsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFNBQUksR0FBRyxFQUFFLENBQUM7S0FDcEI7K0dBSFksb0JBQW9CO21HQUFwQixvQkFBb0IsZ0hBWHJCOztHQUVULCtJQUhTLFlBQVk7OzRGQVlYLG9CQUFvQjtrQkFmaEMsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7O0dBRVQ7OEJBVVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSzs7QUFPUixNQUFNLE9BQU8saUJBQWlCOytHQUFqQixpQkFBaUI7Z0hBQWpCLGlCQUFpQixZQUhsQixZQUFZLEVBTlgsb0JBQW9CLGFBQXBCLG9CQUFvQjtnSEFTcEIsaUJBQWlCLFlBSGxCLFlBQVksRUFBRSxvQkFBb0I7OzRGQUdqQyxpQkFBaUI7a0JBSjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDO29CQUM3QyxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWxtYXRhci1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGkgW2NsYXNzXT1cIidwaSBwaS0nICsgbmFtZVwiIFtzdHlsZS5mb250LXNpemUucHhdPVwic2l6ZVwiPjwvaT5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckljb25Db21wb25lbnQge1xuICBASW5wdXQoKSBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIHNpemUgPSAxNjtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQWxtYXRhckljb25Db21wb25lbnRdLFxuICBleHBvcnRzOiBbQWxtYXRhckljb25Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEFsbWF0YXJJY29uTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,43 @@
1
+ import { NgModule, Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class LoaderComponent {
6
+ constructor() {
7
+ this.loading = false;
8
+ this.message = '';
9
+ }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LoaderComponent, isStandalone: true, selector: "app-loader", inputs: { loading: "loading", message: "message" }, ngImport: i0, template: `
12
+ <div class="loader-container" *ngIf="loading">
13
+ <div class="spinner"></div>
14
+ <p *ngIf="message">{{ message }}</p>
15
+ </div>
16
+ `, isInline: true, styles: [".loader-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem}.spinner{border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}p{margin-top:1rem;color:#666}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoaderComponent, decorators: [{
19
+ type: Component,
20
+ args: [{ selector: 'app-loader', standalone: true, imports: [CommonModule], template: `
21
+ <div class="loader-container" *ngIf="loading">
22
+ <div class="spinner"></div>
23
+ <p *ngIf="message">{{ message }}</p>
24
+ </div>
25
+ `, styles: [".loader-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem}.spinner{border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}p{margin-top:1rem;color:#666}\n"] }]
26
+ }], propDecorators: { loading: [{
27
+ type: Input
28
+ }], message: [{
29
+ type: Input
30
+ }] } });
31
+ export class LoaderModule {
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
33
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: LoaderModule, imports: [CommonModule, LoaderComponent], exports: [LoaderComponent] }); }
34
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoaderModule, imports: [CommonModule, LoaderComponent] }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoaderModule, decorators: [{
37
+ type: NgModule,
38
+ args: [{
39
+ imports: [CommonModule, LoaderComponent],
40
+ exports: [LoaderComponent]
41
+ }]
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2hhcmVkL21vZHVsZXMvbG9hZGVyL2xvYWRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBeUMvQyxNQUFNLE9BQU8sZUFBZTtJQXZDNUI7UUF3Q1csWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsRUFBRSxDQUFDO0tBQ3ZCOytHQUhZLGVBQWU7bUdBQWYsZUFBZSwwSEFuQ2hCOzs7OztHQUtULGthQU5TLFlBQVk7OzRGQW9DWCxlQUFlO2tCQXZDM0IsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7Ozs7O0dBS1Q7OEJBK0JRLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7O0FBT1IsTUFBTSxPQUFPLFlBQVk7K0dBQVosWUFBWTtnSEFBWixZQUFZLFlBSGIsWUFBWSxFQU5YLGVBQWUsYUFBZixlQUFlO2dIQVNmLFlBQVksWUFIYixZQUFZLEVBQUUsZUFBZTs7NEZBRzVCLFlBQVk7a0JBSnhCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbG9hZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImxvYWRlci1jb250YWluZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICA8cCAqbmdJZj1cIm1lc3NhZ2VcIj57eyBtZXNzYWdlIH19PC9wPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLmxvYWRlci1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiAycmVtO1xuICAgIH1cblxuICAgIC5zcGlubmVyIHtcbiAgICAgIGJvcmRlcjogNHB4IHNvbGlkICNmM2YzZjM7XG4gICAgICBib3JkZXItdG9wOiA0cHggc29saWQgIzM0OThkYjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHNwaW4ge1xuICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbi10b3A6IDFyZW07XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIExvYWRlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgbWVzc2FnZSA9ICcnO1xufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMb2FkZXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbTG9hZGVyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBMb2FkZXJNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import { Pipe, NgModule } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ExchangePipe {
4
+ transform(value, currency, rate) {
5
+ if (!rate || rate === 1) {
6
+ return value;
7
+ }
8
+ return value * rate;
9
+ }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExchangePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
11
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ExchangePipe, isStandalone: true, name: "exchange" }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExchangePipe, decorators: [{
14
+ type: Pipe,
15
+ args: [{
16
+ name: 'exchange',
17
+ standalone: true
18
+ }]
19
+ }] });
20
+ export class ExchangeRoundPipe {
21
+ transform(value, currency, rate) {
22
+ if (!rate || rate === 1) {
23
+ return Math.round(value);
24
+ }
25
+ return Math.round(value * rate);
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExchangeRoundPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
28
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ExchangeRoundPipe, isStandalone: true, name: "exchange_round" }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExchangeRoundPipe, decorators: [{
31
+ type: Pipe,
32
+ args: [{
33
+ name: 'exchange_round',
34
+ standalone: true
35
+ }]
36
+ }] });
37
+ export class ExchangePipeModule {
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExchangePipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
39
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ExchangePipeModule, imports: [ExchangePipe, ExchangeRoundPipe], exports: [ExchangePipe, ExchangeRoundPipe] }); }
40
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExchangePipeModule }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExchangePipeModule, decorators: [{
43
+ type: NgModule,
44
+ args: [{
45
+ imports: [ExchangePipe, ExchangeRoundPipe],
46
+ exports: [ExchangePipe, ExchangeRoundPipe]
47
+ }]
48
+ }] });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjaGFuZ2UucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2hhcmVkL3BpcGVzL2V4Y2hhbmdlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU05RCxNQUFNLE9BQU8sWUFBWTtJQUN2QixTQUFTLENBQUMsS0FBYSxFQUFFLFFBQWlCLEVBQUUsSUFBYTtRQUN2RCxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQzsrR0FOVSxZQUFZOzZHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFjRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBaUIsRUFBRSxJQUFhO1FBQ3ZELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDOytHQU5VLGlCQUFpQjs2R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUo3QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFjRCxNQUFNLE9BQU8sa0JBQWtCOytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixZQTFCbEIsWUFBWSxFQWFaLGlCQUFpQixhQWJqQixZQUFZLEVBYVosaUJBQWlCO2dIQWFqQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSjlCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDO29CQUMxQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUM7aUJBQzNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnZXhjaGFuZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEV4Y2hhbmdlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlciwgY3VycmVuY3k/OiBzdHJpbmcsIHJhdGU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghcmF0ZSB8fCByYXRlID09PSAxKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSAqIHJhdGU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZXhjaGFuZ2Vfcm91bmQnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEV4Y2hhbmdlUm91bmRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyLCBjdXJyZW5jeT86IHN0cmluZywgcmF0ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFyYXRlIHx8IHJhdGUgPT09IDEpIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiByYXRlKTtcbiAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbRXhjaGFuZ2VQaXBlLCBFeGNoYW5nZVJvdW5kUGlwZV0sXG4gIGV4cG9ydHM6IFtFeGNoYW5nZVBpcGUsIEV4Y2hhbmdlUm91bmRQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBFeGNoYW5nZVBpcGVNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,42 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import * as i0 from "@angular/core";
4
+ export class ApiService {
5
+ constructor() {
6
+ this.http = inject(HttpClient);
7
+ }
8
+ get(url, options) {
9
+ const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);
10
+ return this.http.get(requestUrl, options);
11
+ }
12
+ post(url, body, options) {
13
+ if (typeof url === 'object') {
14
+ // Handle object-style API calls
15
+ const { url: urlProp, endpoint, ...requestBody } = url;
16
+ const requestUrl = urlProp || endpoint;
17
+ return this.http.post(requestUrl, requestBody, body);
18
+ }
19
+ return this.http.post(url, body, options);
20
+ }
21
+ put(url, body, options) {
22
+ const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);
23
+ return this.http.put(requestUrl, body, options);
24
+ }
25
+ delete(url, options) {
26
+ const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);
27
+ return this.http.delete(requestUrl, options);
28
+ }
29
+ patch(url, body, options) {
30
+ const requestUrl = typeof url === 'string' ? url : (url.url || url.endpoint);
31
+ return this.http.patch(requestUrl, body, options);
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiService, providedIn: 'root' }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiService, decorators: [{
37
+ type: Injectable,
38
+ args: [{
39
+ providedIn: 'root'
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sc0JBQXNCLENBQUM7O0FBZ0IvRCxNQUFNLE9BQU8sVUFBVTtJQUh2QjtRQUlVLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0ErQm5DO0lBN0JDLEdBQUcsQ0FBSSxHQUFxRSxFQUFFLE9BQXFCO1FBQ2pHLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksVUFBVyxFQUFFLE9BQU8sQ0FBa0IsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBSSxDQUFJLEdBQXFFLEVBQUUsSUFBVSxFQUFFLE9BQXFCO1FBQzlHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUIsZ0NBQWdDO1lBQ2hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUN2RCxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksUUFBUSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksVUFBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQWtCLENBQUM7UUFDNUUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQWtCLENBQUM7SUFDaEUsQ0FBQztJQUVELEdBQUcsQ0FBSSxHQUFxRSxFQUFFLElBQVUsRUFBRSxPQUFxQjtRQUM3RyxNQUFNLFVBQVUsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLFVBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFrQixDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUksR0FBcUUsRUFBRSxPQUFxQjtRQUNwRyxNQUFNLFVBQVUsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFJLFVBQVcsRUFBRSxPQUFPLENBQWtCLENBQUM7SUFDcEUsQ0FBQztJQUVELEtBQUssQ0FBSSxHQUFxRSxFQUFFLElBQVUsRUFBRSxPQUFxQjtRQUMvRyxNQUFNLFVBQVUsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFJLFVBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFrQixDQUFDO0lBQ3pFLENBQUM7K0dBL0JVLFVBQVU7bUhBQVYsVUFBVSxjQUZULE1BQU07OzRGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxudHlwZSBIdHRwT3B0aW9ucyA9IHtcbiAgaGVhZGVycz86IGFueTtcbiAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICBvYnNlcnZlPzogJ2JvZHknO1xuICBwYXJhbXM/OiBhbnk7XG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xufTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBpU2VydmljZSB7XG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICBnZXQ8VD4odXJsOiBzdHJpbmcgfCB7IHVybD86IHN0cmluZzsgZW5kcG9pbnQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9LCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCByZXF1ZXN0VXJsID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiAodXJsLnVybCB8fCB1cmwuZW5kcG9pbnQpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHJlcXVlc3RVcmwhLCBvcHRpb25zKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgcG9zdDxUPih1cmw6IHN0cmluZyB8IHsgdXJsPzogc3RyaW5nOyBlbmRwb2ludD86IHN0cmluZzsgW2tleTogc3RyaW5nXTogYW55IH0sIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGlmICh0eXBlb2YgdXJsID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gSGFuZGxlIG9iamVjdC1zdHlsZSBBUEkgY2FsbHNcbiAgICAgIGNvbnN0IHsgdXJsOiB1cmxQcm9wLCBlbmRwb2ludCwgLi4ucmVxdWVzdEJvZHkgfSA9IHVybDtcbiAgICAgIGNvbnN0IHJlcXVlc3RVcmwgPSB1cmxQcm9wIHx8IGVuZHBvaW50O1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQ+KHJlcXVlc3RVcmwhLCByZXF1ZXN0Qm9keSwgYm9keSkgYXMgT2JzZXJ2YWJsZTxUPjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQ+KHVybCwgYm9keSwgb3B0aW9ucykgYXMgT2JzZXJ2YWJsZTxUPjtcbiAgfVxuXG4gIHB1dDxUPih1cmw6IHN0cmluZyB8IHsgdXJsPzogc3RyaW5nOyBlbmRwb2ludD86IHN0cmluZzsgW2tleTogc3RyaW5nXTogYW55IH0sIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHJlcXVlc3RVcmwgPSB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHVybCA6ICh1cmwudXJsIHx8IHVybC5lbmRwb2ludCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4ocmVxdWVzdFVybCEsIGJvZHksIG9wdGlvbnMpIGFzIE9ic2VydmFibGU8VD47XG4gIH1cblxuICBkZWxldGU8VD4odXJsOiBzdHJpbmcgfCB7IHVybD86IHN0cmluZzsgZW5kcG9pbnQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9LCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCByZXF1ZXN0VXJsID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiAodXJsLnVybCB8fCB1cmwuZW5kcG9pbnQpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFQ+KHJlcXVlc3RVcmwhLCBvcHRpb25zKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgcGF0Y2g8VD4odXJsOiBzdHJpbmcgfCB7IHVybD86IHN0cmluZzsgZW5kcG9pbnQ/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9LCBib2R5PzogYW55LCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCByZXF1ZXN0VXJsID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiAodXJsLnVybCB8fCB1cmwuZW5kcG9pbnQpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8VD4ocmVxdWVzdFVybCEsIGJvZHksIG9wdGlvbnMpIGFzIE9ic2VydmFibGU8VD47XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class SharedService {
5
+ getAppLanguage() {
6
+ return 'en';
7
+ }
8
+ getCurrentLanguage() {
9
+ return 'en';
10
+ }
11
+ getDirection() {
12
+ return 'ltr';
13
+ }
14
+ getBaseCurrency() {
15
+ return of({
16
+ code: 'SAR',
17
+ name: 'Saudi Riyal',
18
+ symbol: 'SAR',
19
+ rate: 1
20
+ });
21
+ }
22
+ getInAppView() {
23
+ return false;
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
26
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedService, providedIn: 'root' }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SharedService, decorators: [{
29
+ type: Injectable,
30
+ args: [{
31
+ providedIn: 'root'
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTXRDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxLQUFLO1lBQ1gsSUFBSSxFQUFFLGFBQWE7WUFDbkIsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsQ0FBQztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQXhCVSxhQUFhO21IQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQ3VycmVuY3kgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRTZXJ2aWNlIHtcbiAgZ2V0QXBwTGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2VuJztcbiAgfVxuXG4gIGdldEN1cnJlbnRMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW4nO1xuICB9XG5cbiAgZ2V0RGlyZWN0aW9uKCk6ICdsdHInIHwgJ3J0bCcge1xuICAgIHJldHVybiAnbHRyJztcbiAgfVxuXG4gIGdldEJhc2VDdXJyZW5jeSgpOiBPYnNlcnZhYmxlPElDdXJyZW5jeT4ge1xuICAgIHJldHVybiBvZih7XG4gICAgICBjb2RlOiAnU0FSJyxcbiAgICAgIG5hbWU6ICdTYXVkaSBSaXlhbCcsXG4gICAgICBzeW1ib2w6ICdTQVInLFxuICAgICAgcmF0ZTogMVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0SW5BcHBWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,61 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Simple translation service that provides English translations
5
+ * without requiring ngx-translate
6
+ */
7
+ export class TranslationService {
8
+ constructor() {
9
+ this.currentLanguage = 'en';
10
+ this.translations = {
11
+ // Wallet and refund
12
+ 'manage-booking.smart-cancel.result.wallet-points-label': 'Wallet Points',
13
+ 'manage-booking.smart-cancel.result.your-wallet': 'Your Wallet',
14
+ 'manage-booking.smart-cancel.result.ready-now': 'Ready Now',
15
+ 'manage-booking.smart-cancel.refund-method.original': 'Original Payment Method',
16
+ 'manage-booking.smart-cancel.refund-method.days-badge': '5-7 business days',
17
+ 'manage-booking.smart-cancel.refund-method.installment-badge-tabby': '3-5 business days',
18
+ 'manage-booking.smart-cancel.refund-method.installment-badge-tamara': '7-10 business days',
19
+ 'manage-booking.smart-cancel.refund-method.loyalty-badge': 'Instant',
20
+ 'manage-booking.smart-cancel.result.mada-card': 'Mada Card',
21
+ 'manage-booking.smart-cancel.refund-method.wallet': 'Almatar Wallet',
22
+ 'manage-booking.smart-cancel.refunds.loyalty': 'Loyalty Points',
23
+ // Refund method descriptions
24
+ 'manage-booking.smart-cancel.refund-method.installment-desc': 'Refund to {{method}}',
25
+ 'manage-booking.smart-cancel.refund-method.loyalty-desc': 'Refund to {{method}}',
26
+ 'manage-booking.smart-cancel.refund-method.original-desc': 'Refund to {{method}}',
27
+ // Hotel cancellation policy
28
+ 'HOTEL.cancellation-policy': 'Cancellation Policy',
29
+ // Refund method selector
30
+ 'manage-booking.smart-cancel.refund-method.title': 'Select Refund Method',
31
+ };
32
+ }
33
+ getCurrentLanguage() {
34
+ return this.currentLanguage;
35
+ }
36
+ setLanguage(lang) {
37
+ this.currentLanguage = lang;
38
+ }
39
+ instant(key, params) {
40
+ let translation = this.translations[key] || key;
41
+ // Replace {{param}} placeholders
42
+ if (params) {
43
+ Object.keys(params).forEach(param => {
44
+ translation = translation.replace(`{{${param}}}`, params[param]);
45
+ });
46
+ }
47
+ return translation;
48
+ }
49
+ get currentLang() {
50
+ return this.currentLanguage;
51
+ }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
53
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TranslationService, providedIn: 'root' }); }
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TranslationService, decorators: [{
56
+ type: Injectable,
57
+ args: [{
58
+ providedIn: 'root'
59
+ }]
60
+ }] });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUlVLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGlCQUFZLEdBQThCO1lBQ2hELG9CQUFvQjtZQUNwQix3REFBd0QsRUFBRSxlQUFlO1lBQ3pFLGdEQUFnRCxFQUFFLGFBQWE7WUFDL0QsOENBQThDLEVBQUUsV0FBVztZQUMzRCxvREFBb0QsRUFBRSx5QkFBeUI7WUFDL0Usc0RBQXNELEVBQUUsbUJBQW1CO1lBQzNFLG1FQUFtRSxFQUFFLG1CQUFtQjtZQUN4RixvRUFBb0UsRUFBRSxvQkFBb0I7WUFDMUYseURBQXlELEVBQUUsU0FBUztZQUNwRSw4Q0FBOEMsRUFBRSxXQUFXO1lBQzNELGtEQUFrRCxFQUFFLGdCQUFnQjtZQUNwRSw2Q0FBNkMsRUFBRSxnQkFBZ0I7WUFFL0QsNkJBQTZCO1lBQzdCLDREQUE0RCxFQUFFLHNCQUFzQjtZQUNwRix3REFBd0QsRUFBRSxzQkFBc0I7WUFDaEYseURBQXlELEVBQUUsc0JBQXNCO1lBRWpGLDRCQUE0QjtZQUM1QiwyQkFBMkIsRUFBRSxxQkFBcUI7WUFFbEQseUJBQXlCO1lBQ3pCLGlEQUFpRCxFQUFFLHNCQUFzQjtTQUMxRSxDQUFDO0tBMEJIO0lBeEJDLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVyxFQUFFLE1BQWtDO1FBQ3JELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1FBRWhELGlDQUFpQztRQUNqQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xDLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDOytHQXBEVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFNpbXBsZSB0cmFuc2xhdGlvbiBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgRW5nbGlzaCB0cmFuc2xhdGlvbnNcbiAqIHdpdGhvdXQgcmVxdWlyaW5nIG5neC10cmFuc2xhdGVcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2UgPSAnZW4nO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFdhbGxldCBhbmQgcmVmdW5kXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZXN1bHQud2FsbGV0LXBvaW50cy1sYWJlbCc6ICdXYWxsZXQgUG9pbnRzJyxcbiAgICAnbWFuYWdlLWJvb2tpbmcuc21hcnQtY2FuY2VsLnJlc3VsdC55b3VyLXdhbGxldCc6ICdZb3VyIFdhbGxldCcsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZXN1bHQucmVhZHktbm93JzogJ1JlYWR5IE5vdycsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLm9yaWdpbmFsJzogJ09yaWdpbmFsIFBheW1lbnQgTWV0aG9kJyxcbiAgICAnbWFuYWdlLWJvb2tpbmcuc21hcnQtY2FuY2VsLnJlZnVuZC1tZXRob2QuZGF5cy1iYWRnZSc6ICc1LTcgYnVzaW5lc3MgZGF5cycsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLmluc3RhbGxtZW50LWJhZGdlLXRhYmJ5JzogJzMtNSBidXNpbmVzcyBkYXlzJyxcbiAgICAnbWFuYWdlLWJvb2tpbmcuc21hcnQtY2FuY2VsLnJlZnVuZC1tZXRob2QuaW5zdGFsbG1lbnQtYmFkZ2UtdGFtYXJhJzogJzctMTAgYnVzaW5lc3MgZGF5cycsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLmxveWFsdHktYmFkZ2UnOiAnSW5zdGFudCcsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZXN1bHQubWFkYS1jYXJkJzogJ01hZGEgQ2FyZCcsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLndhbGxldCc6ICdBbG1hdGFyIFdhbGxldCcsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmRzLmxveWFsdHknOiAnTG95YWx0eSBQb2ludHMnLFxuXG4gICAgLy8gUmVmdW5kIG1ldGhvZCBkZXNjcmlwdGlvbnNcbiAgICAnbWFuYWdlLWJvb2tpbmcuc21hcnQtY2FuY2VsLnJlZnVuZC1tZXRob2QuaW5zdGFsbG1lbnQtZGVzYyc6ICdSZWZ1bmQgdG8ge3ttZXRob2R9fScsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLmxveWFsdHktZGVzYyc6ICdSZWZ1bmQgdG8ge3ttZXRob2R9fScsXG4gICAgJ21hbmFnZS1ib29raW5nLnNtYXJ0LWNhbmNlbC5yZWZ1bmQtbWV0aG9kLm9yaWdpbmFsLWRlc2MnOiAnUmVmdW5kIHRvIHt7bWV0aG9kfX0nLFxuXG4gICAgLy8gSG90ZWwgY2FuY2VsbGF0aW9uIHBvbGljeVxuICAgICdIT1RFTC5jYW5jZWxsYXRpb24tcG9saWN5JzogJ0NhbmNlbGxhdGlvbiBQb2xpY3knLFxuXG4gICAgLy8gUmVmdW5kIG1ldGhvZCBzZWxlY3RvclxuICAgICdtYW5hZ2UtYm9va2luZy5zbWFydC1jYW5jZWwucmVmdW5kLW1ldGhvZC50aXRsZSc6ICdTZWxlY3QgUmVmdW5kIE1ldGhvZCcsXG4gIH07XG5cbiAgZ2V0Q3VycmVudExhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlO1xuICB9XG5cbiAgc2V0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICB9XG5cbiAgaW5zdGFudChrZXk6IHN0cmluZywgcGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgbGV0IHRyYW5zbGF0aW9uID0gdGhpcy50cmFuc2xhdGlvbnNba2V5XSB8fCBrZXk7XG5cbiAgICAvLyBSZXBsYWNlIHt7cGFyYW19fSBwbGFjZWhvbGRlcnNcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgICB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uLnJlcGxhY2UoYHt7JHtwYXJhbX19fWAsIHBhcmFtc1twYXJhbV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMYW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlO1xuICB9XG59XG4iXX0=