ngx-ionic-zone 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-ionic-zone-components.mjs +2 -2
- package/fesm2022/ngx-ionic-zone-components.mjs.map +1 -1
- package/fesm2022/ngx-ionic-zone.mjs +195 -2
- package/fesm2022/ngx-ionic-zone.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/shared/haptics.service.d.ts +85 -0
- /package/shared/{uz-ionic.module.d.ts → uz-ionic.provider.d.ts} +0 -0
|
@@ -41,7 +41,7 @@ class HelpIconComponent {
|
|
|
41
41
|
</div>
|
|
42
42
|
</ion-accordion>
|
|
43
43
|
</ion-accordion-group>
|
|
44
|
-
`, isInline: true, styles: [":host{display:inline-block;width:100
|
|
44
|
+
`, isInline: true, styles: [":host{display:inline-block;width:100%;display:none;--help-icon-right: 10px;--help-icon-left: initial;--help-icon-caret-left: 35px;--help-icon-caret-right: initial;--help-icon-content-margin-left: 24px;--help-icon-content-margin-right: initial}.help-button{position:absolute;right:var(--help-icon-right);left:var(--help-icon-left);top:0;z-index:9999;height:36px}.help-content{position:relative;margin-top:10px;background:var(--ion-color-primary);color:#fff;padding:10px}.help-content:after{content:\"\";position:absolute;width:0;height:0;border-width:10px;border-style:solid;border-color:transparent transparent var(--ion-color-primary) transparent;top:-19px;left:var(--help-icon-caret-left);right:var(--help-icon-caret-right)}.help-content span{display:flex;align-items:center}.help-content span ion-icon{font-size:24px}.help-content p{margin-left:var(--help-icon-content-margin-left);margin-right:var(--help-icon-content-margin-right)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonAccordionGroup, selector: "ion-accordion-group", inputs: ["animated", "disabled", "expand", "mode", "multiple", "readonly", "value"] }, { kind: "component", type: IonAccordion, selector: "ion-accordion", inputs: ["disabled", "mode", "readonly", "toggleIcon", "toggleIconSlot", "value"] }] }); }
|
|
45
45
|
}
|
|
46
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: HelpIconComponent, decorators: [{
|
|
47
47
|
type: Component,
|
|
@@ -61,7 +61,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
61
61
|
</div>
|
|
62
62
|
</ion-accordion>
|
|
63
63
|
</ion-accordion-group>
|
|
64
|
-
`, standalone: true, imports: [CommonModule, IonButton, IonIcon, IonAccordionGroup, IonAccordion], styles: [":host{display:inline-block;width:100
|
|
64
|
+
`, standalone: true, imports: [CommonModule, IonButton, IonIcon, IonAccordionGroup, IonAccordion], styles: [":host{display:inline-block;width:100%;display:none;--help-icon-right: 10px;--help-icon-left: initial;--help-icon-caret-left: 35px;--help-icon-caret-right: initial;--help-icon-content-margin-left: 24px;--help-icon-content-margin-right: initial}.help-button{position:absolute;right:var(--help-icon-right);left:var(--help-icon-left);top:0;z-index:9999;height:36px}.help-content{position:relative;margin-top:10px;background:var(--ion-color-primary);color:#fff;padding:10px}.help-content:after{content:\"\";position:absolute;width:0;height:0;border-width:10px;border-style:solid;border-color:transparent transparent var(--ion-color-primary) transparent;top:-19px;left:var(--help-icon-caret-left);right:var(--help-icon-caret-right)}.help-content span{display:flex;align-items:center}.help-content span ion-icon{font-size:24px}.help-content p{margin-left:var(--help-icon-content-margin-left);margin-right:var(--help-icon-content-margin-right)}\n"] }]
|
|
65
65
|
}], ctorParameters: () => [], propDecorators: { text: [{
|
|
66
66
|
type: Input
|
|
67
67
|
}], accordionGroup: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-ionic-zone-components.mjs","sources":["../../../projects/ngx-ionic-zone/components/help-icon/help-icon.component.ts","../../../projects/ngx-ionic-zone/components/ngx-ionic-zone-components.ts"],"sourcesContent":["import { CommonModule } from \"@angular/common\";\nimport { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { IonButton, IonIcon, IonAccordionGroup, IonAccordion } from \"@ionic/angular/standalone\";\nimport { addIcons } from 'ionicons';\nimport { helpCircleOutline, closeCircleOutline, informationCircleOutline } from \"ionicons/icons\";\n\n@Component({\n selector: 'help-icon',\n template: `\n <ion-button class=\"help-button button-no-border\" fill=\"clear\" (click)=\"onHelpClicked()\">\n <ion-icon ios=\"help-circle-outline\" md=\"help-circle-outline\" *ngIf=\"!accordionGroup.value\"></ion-icon>\n <ion-icon ios=\"close-circle-outline\" md=\"close-circle-outline\" *ngIf=\"accordionGroup.value\"></ion-icon>\n </ion-button>\n <ion-accordion-group #accordionGroup>\n <ion-accordion value=\"first\">\n <div slot=\"content\" class=\"help-content\">\n <span>\n <ion-icon ios=\"information-circle-outline\" md=\"information-circle-outline\"></ion-icon>\n <!-- <strong>{{'admin.common.alert' | localizedResource | async}}:</strong> -->\n </span>\n <p [innerHTML]=\"text\"></p>\n </div>\n </ion-accordion>\n </ion-accordion-group>\n `,\n styles: [`\n :host {\n display: inline-block;\n width: 100%;\n\n --help-icon-right: 10px;\n --help-icon-left: initial;\n --help-icon-caret-left: 35px;\n --help-icon-caret-right: initial;\n --help-icon-content-margin-left: 24px;\n --help-icon-content-margin-right: initial;\n }\n\n .help-button {\n position: absolute;\n right: var(--help-icon-right);\n left: var(--help-icon-left);\n top: 0;\n z-index: 9999;\n height: 36px;\n }\n \n .help-content {\n position: relative;\n margin-top: 10px;\n background: var(--ion-color-primary);\n color: #fff;\n padding: 10px;\n }\n\n .help-content::after {\n content: \"\";\n position: absolute;\n width: 0;\n height: 0;\n border-width: 10px;\n border-style: solid;\n border-color: transparent transparent var(--ion-color-primary) transparent;\n top: -19px;\n left: var(--help-icon-caret-left);\n right: var(--help-icon-caret-right);\n }\n\n .help-content span {\n display: flex;\n align-items: center;\n }\n\n .help-content span ion-icon {\n font-size: 24px;\n }\n\n .help-content p {\n margin-left: var(--help-icon-content-margin-left);\n margin-right: var(--help-icon-content-margin-right);\n }\n `],\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonAccordionGroup, IonAccordion]\n})\nexport class HelpIconComponent implements OnInit {\n @Input() text!: string;\n @ViewChild('accordionGroup', { static: true }) accordionGroup!: IonAccordionGroup;\n\n constructor() {\n addIcons({ helpCircleOutline, closeCircleOutline, informationCircleOutline });\n }\n\n ngOnInit() {\n if (!this.text) {\n this.text = 'Please add some help text';\n }\n }\n\n onHelpClicked() {\n const nativeEl = this.accordionGroup;\n if (nativeEl.value === 'first') {\n nativeEl.value = undefined;\n } else {\n nativeEl.value = 'first';\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"ngx-ionic-zone-components.mjs","sources":["../../../projects/ngx-ionic-zone/components/help-icon/help-icon.component.ts","../../../projects/ngx-ionic-zone/components/ngx-ionic-zone-components.ts"],"sourcesContent":["import { CommonModule } from \"@angular/common\";\nimport { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { IonButton, IonIcon, IonAccordionGroup, IonAccordion } from \"@ionic/angular/standalone\";\nimport { addIcons } from 'ionicons';\nimport { helpCircleOutline, closeCircleOutline, informationCircleOutline } from \"ionicons/icons\";\n\n@Component({\n selector: 'help-icon',\n template: `\n <ion-button class=\"help-button button-no-border\" fill=\"clear\" (click)=\"onHelpClicked()\">\n <ion-icon ios=\"help-circle-outline\" md=\"help-circle-outline\" *ngIf=\"!accordionGroup.value\"></ion-icon>\n <ion-icon ios=\"close-circle-outline\" md=\"close-circle-outline\" *ngIf=\"accordionGroup.value\"></ion-icon>\n </ion-button>\n <ion-accordion-group #accordionGroup>\n <ion-accordion value=\"first\">\n <div slot=\"content\" class=\"help-content\">\n <span>\n <ion-icon ios=\"information-circle-outline\" md=\"information-circle-outline\"></ion-icon>\n <!-- <strong>{{'admin.common.alert' | localizedResource | async}}:</strong> -->\n </span>\n <p [innerHTML]=\"text\"></p>\n </div>\n </ion-accordion>\n </ion-accordion-group>\n `,\n styles: [`\n :host {\n display: inline-block;\n width: 100%;\n display:none; /* tmp: hide by default */\n\n --help-icon-right: 10px;\n --help-icon-left: initial;\n --help-icon-caret-left: 35px;\n --help-icon-caret-right: initial;\n --help-icon-content-margin-left: 24px;\n --help-icon-content-margin-right: initial;\n }\n\n .help-button {\n position: absolute;\n right: var(--help-icon-right);\n left: var(--help-icon-left);\n top: 0;\n z-index: 9999;\n height: 36px;\n }\n \n .help-content {\n position: relative;\n margin-top: 10px;\n background: var(--ion-color-primary);\n color: #fff;\n padding: 10px;\n }\n\n .help-content::after {\n content: \"\";\n position: absolute;\n width: 0;\n height: 0;\n border-width: 10px;\n border-style: solid;\n border-color: transparent transparent var(--ion-color-primary) transparent;\n top: -19px;\n left: var(--help-icon-caret-left);\n right: var(--help-icon-caret-right);\n }\n\n .help-content span {\n display: flex;\n align-items: center;\n }\n\n .help-content span ion-icon {\n font-size: 24px;\n }\n\n .help-content p {\n margin-left: var(--help-icon-content-margin-left);\n margin-right: var(--help-icon-content-margin-right);\n }\n `],\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonAccordionGroup, IonAccordion]\n})\nexport class HelpIconComponent implements OnInit {\n @Input() text!: string;\n @ViewChild('accordionGroup', { static: true }) accordionGroup!: IonAccordionGroup;\n\n constructor() {\n addIcons({ helpCircleOutline, closeCircleOutline, informationCircleOutline });\n }\n\n ngOnInit() {\n if (!this.text) {\n this.text = 'Please add some help text';\n }\n }\n\n onHelpClicked() {\n const nativeEl = this.accordionGroup;\n if (nativeEl.value === 'first') {\n nativeEl.value = undefined;\n } else {\n nativeEl.value = 'first';\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { InjectionToken, inject, Injectable, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { HttpClient, HttpHeaders, HttpContext, HttpContextToken } from '@angular/common/http';
|
|
4
4
|
import { BehaviorSubject, tap, catchError, throwError } from 'rxjs';
|
|
5
|
+
import { Haptics, ImpactStyle, NotificationType } from '@capacitor/haptics';
|
|
6
|
+
import * as i1 from '@ionic/angular';
|
|
5
7
|
|
|
6
8
|
const APP_CONFIG_TOKEN = new InjectionToken('APP_CONFIG');
|
|
7
9
|
|
|
@@ -130,8 +132,199 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
130
132
|
const RETRY_COUNT = new HttpContextToken(() => 3);
|
|
131
133
|
const RETRY_DELAY = new HttpContextToken(() => 5000);
|
|
132
134
|
|
|
135
|
+
var HapticPattern;
|
|
136
|
+
(function (HapticPattern) {
|
|
137
|
+
HapticPattern["Light"] = "light";
|
|
138
|
+
HapticPattern["Medium"] = "medium";
|
|
139
|
+
HapticPattern["Heavy"] = "heavy";
|
|
140
|
+
HapticPattern["Success"] = "success";
|
|
141
|
+
HapticPattern["Warning"] = "warning";
|
|
142
|
+
HapticPattern["Error"] = "error";
|
|
143
|
+
HapticPattern["Selection"] = "selection";
|
|
144
|
+
})(HapticPattern || (HapticPattern = {}));
|
|
145
|
+
class HapticsService {
|
|
146
|
+
constructor(platform) {
|
|
147
|
+
this.platform = platform;
|
|
148
|
+
this.options = {
|
|
149
|
+
enabled: true,
|
|
150
|
+
fallbackToVibration: true
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Configure haptic feedback options
|
|
155
|
+
*/
|
|
156
|
+
configure(options) {
|
|
157
|
+
this.options = { ...this.options, ...options };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Play haptic feedback based on pattern
|
|
161
|
+
*/
|
|
162
|
+
async play(pattern) {
|
|
163
|
+
if (!this.options.enabled) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
switch (pattern) {
|
|
168
|
+
case HapticPattern.Light:
|
|
169
|
+
await Haptics.impact({ style: ImpactStyle.Light });
|
|
170
|
+
break;
|
|
171
|
+
case HapticPattern.Medium:
|
|
172
|
+
await Haptics.impact({ style: ImpactStyle.Medium });
|
|
173
|
+
break;
|
|
174
|
+
case HapticPattern.Heavy:
|
|
175
|
+
await Haptics.impact({ style: ImpactStyle.Heavy });
|
|
176
|
+
break;
|
|
177
|
+
case HapticPattern.Success:
|
|
178
|
+
await Haptics.notification({ type: NotificationType.Success });
|
|
179
|
+
break;
|
|
180
|
+
case HapticPattern.Warning:
|
|
181
|
+
await Haptics.notification({ type: NotificationType.Warning });
|
|
182
|
+
break;
|
|
183
|
+
case HapticPattern.Error:
|
|
184
|
+
await Haptics.notification({ type: NotificationType.Error });
|
|
185
|
+
break;
|
|
186
|
+
case HapticPattern.Selection:
|
|
187
|
+
await Haptics.selectionStart();
|
|
188
|
+
break;
|
|
189
|
+
default:
|
|
190
|
+
await Haptics.impact({ style: ImpactStyle.Light });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
console.warn('Haptic feedback failed:', error);
|
|
195
|
+
// Fallback to vibration if haptics are not supported
|
|
196
|
+
if (this.options.fallbackToVibration && this.platform.is('mobile')) {
|
|
197
|
+
this.vibrate(pattern);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Play product selection haptic feedback
|
|
203
|
+
*/
|
|
204
|
+
async light() {
|
|
205
|
+
await this.play(HapticPattern.Light);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Play product add to cart haptic feedback
|
|
209
|
+
*/
|
|
210
|
+
async medium() {
|
|
211
|
+
await this.play(HapticPattern.Medium);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Play order submission haptic feedback
|
|
215
|
+
*/
|
|
216
|
+
async heavy() {
|
|
217
|
+
await this.play(HapticPattern.Heavy);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Play order success haptic feedback
|
|
221
|
+
*/
|
|
222
|
+
async success() {
|
|
223
|
+
await this.play(HapticPattern.Success);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Play order error haptic feedback
|
|
227
|
+
*/
|
|
228
|
+
async orderError() {
|
|
229
|
+
await this.play(HapticPattern.Error);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Play button interaction haptic feedback
|
|
233
|
+
*/
|
|
234
|
+
async buttonInteraction() {
|
|
235
|
+
await this.play(HapticPattern.Selection);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Play custom haptic pattern
|
|
239
|
+
*/
|
|
240
|
+
async customImpact(style) {
|
|
241
|
+
if (!this.options.enabled) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
await Haptics.impact({ style });
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.warn('Custom haptic impact failed:', error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Play custom notification haptic
|
|
253
|
+
*/
|
|
254
|
+
async customNotification(type) {
|
|
255
|
+
if (!this.options.enabled) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
await Haptics.notification({ type });
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
console.warn('Custom haptic notification failed:', error);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Check if haptics are available on the device
|
|
267
|
+
*/
|
|
268
|
+
async isAvailable() {
|
|
269
|
+
try {
|
|
270
|
+
// Try to perform a test haptic
|
|
271
|
+
await Haptics.impact({ style: ImpactStyle.Light });
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Disable haptic feedback
|
|
280
|
+
*/
|
|
281
|
+
disable() {
|
|
282
|
+
this.options.enabled = false;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Enable haptic feedback
|
|
286
|
+
*/
|
|
287
|
+
enable() {
|
|
288
|
+
this.options.enabled = true;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Fallback vibration for unsupported devices
|
|
292
|
+
*/
|
|
293
|
+
vibrate(pattern) {
|
|
294
|
+
if (!navigator.vibrate) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const vibrationPatterns = {
|
|
298
|
+
[HapticPattern.Light]: 50,
|
|
299
|
+
[HapticPattern.Medium]: 100,
|
|
300
|
+
[HapticPattern.Heavy]: 200,
|
|
301
|
+
[HapticPattern.Success]: [100, 50, 100],
|
|
302
|
+
[HapticPattern.Warning]: [150, 100, 150],
|
|
303
|
+
[HapticPattern.Error]: [200, 100, 200, 100, 200],
|
|
304
|
+
[HapticPattern.Selection]: 25
|
|
305
|
+
};
|
|
306
|
+
const vibrationPattern = vibrationPatterns[pattern];
|
|
307
|
+
if (Array.isArray(vibrationPattern)) {
|
|
308
|
+
navigator.vibrate(vibrationPattern);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
navigator.vibrate(vibrationPattern);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: HapticsService, deps: [{ token: i1.Platform }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
315
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: HapticsService, providedIn: 'root' }); }
|
|
316
|
+
}
|
|
317
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: HapticsService, decorators: [{
|
|
318
|
+
type: Injectable,
|
|
319
|
+
args: [{
|
|
320
|
+
providedIn: 'root'
|
|
321
|
+
}]
|
|
322
|
+
}], ctorParameters: () => [{ type: i1.Platform }] });
|
|
323
|
+
|
|
133
324
|
const provideUniversalZoneIonic = () => {
|
|
134
|
-
const providers = [
|
|
325
|
+
const providers = [
|
|
326
|
+
HapticsService
|
|
327
|
+
];
|
|
135
328
|
return makeEnvironmentProviders(providers);
|
|
136
329
|
};
|
|
137
330
|
|
|
@@ -143,5 +336,5 @@ const provideUniversalZoneIonic = () => {
|
|
|
143
336
|
* Generated bundle index. Do not edit.
|
|
144
337
|
*/
|
|
145
338
|
|
|
146
|
-
export { APP_CONFIG_TOKEN, BaseHttpService, RETRY_COUNT, RETRY_DELAY, provideUniversalZoneIonic };
|
|
339
|
+
export { APP_CONFIG_TOKEN, BaseHttpService, HapticPattern, HapticsService, RETRY_COUNT, RETRY_DELAY, provideUniversalZoneIonic };
|
|
147
340
|
//# sourceMappingURL=ngx-ionic-zone.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-ionic-zone.mjs","sources":["../../../projects/ngx-ionic-zone/shared/app-config.ts","../../../projects/ngx-ionic-zone/shared/base-http.service.ts","../../../projects/ngx-ionic-zone/shared/uz-ionic.module.ts","../../../projects/ngx-ionic-zone/public-api.ts","../../../projects/ngx-ionic-zone/ngx-ionic-zone.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const APP_CONFIG_TOKEN = new InjectionToken<IAppConfig>('APP_CONFIG');\r\n\r\nexport interface IAppConfig {\r\n baseUrl: string;\r\n baseApiUrl: string;\r\n ping?: IAppConfigPing;\r\n http?: IAppConfigHttp;\r\n}\r\n\r\nexport interface IAppConfigPing {\r\n url?: string;\r\n interval: number;\r\n}\r\n\r\nexport interface IAppConfigHttp {\r\n useNativeHttp: boolean;\r\n}","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpErrorResponse, HttpContext, HttpContextToken } from '@angular/common/http';\n\n// import { CapacitorHttp } from '@capacitor/core';\n\nimport { BehaviorSubject, catchError, tap, throwError } from 'rxjs';\nimport { APP_CONFIG_TOKEN, IAppConfig } from './app-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BaseHttpService {\n private _httpInProgressRequest = new BehaviorSubject<HttpParams>(null);\n\n protected http: HttpClient;\n protected config: IAppConfig;\n\n httpInProgressRequest$ = this._httpInProgressRequest.asObservable();\n\n constructor() {\n this.http = inject(HttpClient);\n this.config = inject(APP_CONFIG_TOKEN);\n }\n\n protected getDataRx<T>(args: HttpParams) {\n this._httpInProgressRequest.next(args);\n\n if (!args.overrideUrl) {\n args.url = `${this.config.baseApiUrl + args.url}`;\n }\n args.body = args.body || {};\n\n for (let prop in args.body) {\n if (args.body.hasOwnProperty(prop) && args.body[prop]) {\n if (args.url.includes('?')) {\n args.url += '&';\n } else {\n args.url += '?';\n }\n args.url += `${prop}=${args.body[prop]}`;\n }\n }\n\n // if(!this.config.http?.useNativeHttp) {\n let headers = new HttpHeaders();\n for (let prop in args.headers) {\n if (args.headers.hasOwnProperty(prop) && args.headers[prop]) {\n headers = headers.set(prop, args.headers[prop]);\n }\n }\n\n let context = new HttpContext();\n if(args.retryCount != null) {\n context.set(RETRY_COUNT, args.retryCount);\n }\n \n if(args.retryDelay != null) {\n context.set(RETRY_DELAY, args.retryCount);\n }\n \n return this.http.get<T>(args.url, { headers: headers, context: context })\n .pipe(\n tap(() => this._httpInProgressRequest.next(null)),\n catchError((error) => {\n this._httpInProgressRequest.next(null);\n \n //pass error to the caller\n return throwError(() => error);\n }));\n // }\n \n // return new Observable<T>((observer) => {\n // CapacitorHttp.get({\n // url: args.url,\n // headers: args.headers\n // }).then(response => {\n // observer.next(<T>response.data);\n // observer.complete();\n // }).catch(error => {\n // observer.error(error);\n // });\n // });\n }\n\n protected postDataRx<T>(args: HttpParams) {\n this._httpInProgressRequest.next(args);\n\n let newUrl;\n if (!args.overrideUrl) {\n newUrl = `${this.config.baseApiUrl + args.url}`;\n } else {\n newUrl = args.url;\n }\n\n args.url = newUrl;\n\n let context = new HttpContext();\n if(args.retryCount != null) {\n context.set(RETRY_COUNT, args.retryCount);\n }\n\n if(args.retryDelay != null) {\n context.set(RETRY_DELAY, args.retryCount);\n }\n\n console.log('postDataRx', args);\n let body = args.body;\n return this.http.post<T>(args.url, body, { headers: new HttpHeaders(args.headers), context: context })\n .pipe(\n tap(() => this._httpInProgressRequest.next(null)),\n catchError((error) => {\n this._httpInProgressRequest.next(null);\n\n //pass error to the caller\n return throwError(() => error);\n })\n );\n }\n\n protected async handleError(e: HttpErrorResponse, args: HttpParams) {\n switch (e.status) {\n // case 401:\n // const u = await this.userSettingSvc.getCurrentUser();\n // if(u) {\n // //TODO: check for token expiration...\n // //kickout...\n // this.pubsubSvc.publishEvent(UserConstant.EVENT_USER_LOGGEDOUT, { clearCache: true, displayLoginDialog: true });\n // }\n // break;\n default:\n if (!args.errorCallback) {\n let msg;\n //the error might be thrown by e.g a plugin wasn't install properly. In that case text() will not be available\n if (e.message) {\n msg = e.message;\n } else {\n msg = e.error.toString();\n }\n // setTimeout(async () => {\n // await this.helperSvc.alert(msg);\n // });\n } else {\n args.errorCallback(e, args);\n }\n break;\n }\n }\n}\n\nexport interface HttpParams {\n url: string;\n body?: any;\n errorCallback?;\n overrideUrl?: boolean;\n headers?: { [key: string]: string };\n retryCount?: number;\n retryDelay?: number;\n}\n\nexport interface ApiResponse<T> {\n statusCode: number;\n message: any;\n data: T;\n exception: any;\n}\n\n\nexport const RETRY_COUNT = new HttpContextToken(() => 3);\nexport const RETRY_DELAY = new HttpContextToken(() => 5000);","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from \"@angular/core\";\r\n\r\nexport const provideUniversalZoneIonic = (): EnvironmentProviders => {\r\n const providers: Provider[] = [\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n};\r\n","/*\r\n * Public API Surface of ngx-ionic-zone\r\n */\r\n\r\nexport * from './shared/base-http.service';\r\nexport * from './shared/uz-ionic.module';\r\nexport * from './shared/app-config';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-ionic-zone.mjs","sources":["../../../projects/ngx-ionic-zone/shared/app-config.ts","../../../projects/ngx-ionic-zone/shared/base-http.service.ts","../../../projects/ngx-ionic-zone/shared/haptics.service.ts","../../../projects/ngx-ionic-zone/shared/uz-ionic.provider.ts","../../../projects/ngx-ionic-zone/public-api.ts","../../../projects/ngx-ionic-zone/ngx-ionic-zone.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const APP_CONFIG_TOKEN = new InjectionToken<IAppConfig>('APP_CONFIG');\r\n\r\nexport interface IAppConfig {\r\n baseUrl: string;\r\n baseApiUrl: string;\r\n ping?: IAppConfigPing;\r\n http?: IAppConfigHttp;\r\n}\r\n\r\nexport interface IAppConfigPing {\r\n url?: string;\r\n interval: number;\r\n}\r\n\r\nexport interface IAppConfigHttp {\r\n useNativeHttp: boolean;\r\n}","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpErrorResponse, HttpContext, HttpContextToken } from '@angular/common/http';\n\n// import { CapacitorHttp } from '@capacitor/core';\n\nimport { BehaviorSubject, catchError, tap, throwError } from 'rxjs';\nimport { APP_CONFIG_TOKEN, IAppConfig } from './app-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BaseHttpService {\n private _httpInProgressRequest = new BehaviorSubject<HttpParams>(null);\n\n protected http: HttpClient;\n protected config: IAppConfig;\n\n httpInProgressRequest$ = this._httpInProgressRequest.asObservable();\n\n constructor() {\n this.http = inject(HttpClient);\n this.config = inject(APP_CONFIG_TOKEN);\n }\n\n protected getDataRx<T>(args: HttpParams) {\n this._httpInProgressRequest.next(args);\n\n if (!args.overrideUrl) {\n args.url = `${this.config.baseApiUrl + args.url}`;\n }\n args.body = args.body || {};\n\n for (let prop in args.body) {\n if (args.body.hasOwnProperty(prop) && args.body[prop]) {\n if (args.url.includes('?')) {\n args.url += '&';\n } else {\n args.url += '?';\n }\n args.url += `${prop}=${args.body[prop]}`;\n }\n }\n\n // if(!this.config.http?.useNativeHttp) {\n let headers = new HttpHeaders();\n for (let prop in args.headers) {\n if (args.headers.hasOwnProperty(prop) && args.headers[prop]) {\n headers = headers.set(prop, args.headers[prop]);\n }\n }\n\n let context = new HttpContext();\n if(args.retryCount != null) {\n context.set(RETRY_COUNT, args.retryCount);\n }\n \n if(args.retryDelay != null) {\n context.set(RETRY_DELAY, args.retryCount);\n }\n \n return this.http.get<T>(args.url, { headers: headers, context: context })\n .pipe(\n tap(() => this._httpInProgressRequest.next(null)),\n catchError((error) => {\n this._httpInProgressRequest.next(null);\n \n //pass error to the caller\n return throwError(() => error);\n }));\n // }\n \n // return new Observable<T>((observer) => {\n // CapacitorHttp.get({\n // url: args.url,\n // headers: args.headers\n // }).then(response => {\n // observer.next(<T>response.data);\n // observer.complete();\n // }).catch(error => {\n // observer.error(error);\n // });\n // });\n }\n\n protected postDataRx<T>(args: HttpParams) {\n this._httpInProgressRequest.next(args);\n\n let newUrl;\n if (!args.overrideUrl) {\n newUrl = `${this.config.baseApiUrl + args.url}`;\n } else {\n newUrl = args.url;\n }\n\n args.url = newUrl;\n\n let context = new HttpContext();\n if(args.retryCount != null) {\n context.set(RETRY_COUNT, args.retryCount);\n }\n\n if(args.retryDelay != null) {\n context.set(RETRY_DELAY, args.retryCount);\n }\n\n console.log('postDataRx', args);\n let body = args.body;\n return this.http.post<T>(args.url, body, { headers: new HttpHeaders(args.headers), context: context })\n .pipe(\n tap(() => this._httpInProgressRequest.next(null)),\n catchError((error) => {\n this._httpInProgressRequest.next(null);\n\n //pass error to the caller\n return throwError(() => error);\n })\n );\n }\n\n protected async handleError(e: HttpErrorResponse, args: HttpParams) {\n switch (e.status) {\n // case 401:\n // const u = await this.userSettingSvc.getCurrentUser();\n // if(u) {\n // //TODO: check for token expiration...\n // //kickout...\n // this.pubsubSvc.publishEvent(UserConstant.EVENT_USER_LOGGEDOUT, { clearCache: true, displayLoginDialog: true });\n // }\n // break;\n default:\n if (!args.errorCallback) {\n let msg;\n //the error might be thrown by e.g a plugin wasn't install properly. In that case text() will not be available\n if (e.message) {\n msg = e.message;\n } else {\n msg = e.error.toString();\n }\n // setTimeout(async () => {\n // await this.helperSvc.alert(msg);\n // });\n } else {\n args.errorCallback(e, args);\n }\n break;\n }\n }\n}\n\nexport interface HttpParams {\n url: string;\n body?: any;\n errorCallback?;\n overrideUrl?: boolean;\n headers?: { [key: string]: string };\n retryCount?: number;\n retryDelay?: number;\n}\n\nexport interface ApiResponse<T> {\n statusCode: number;\n message: any;\n data: T;\n exception: any;\n}\n\n\nexport const RETRY_COUNT = new HttpContextToken(() => 3);\nexport const RETRY_DELAY = new HttpContextToken(() => 5000);","import { Injectable } from '@angular/core';\nimport { Haptics, ImpactStyle, NotificationType } from '@capacitor/haptics';\nimport { Platform } from '@ionic/angular';\n\nexport interface HapticOptions {\n /**\n * Enable or disable haptic feedback\n */\n enabled?: boolean;\n /**\n * Fallback to vibration on unsupported devices\n */\n fallbackToVibration?: boolean;\n}\n\nexport enum HapticPattern {\n Light = 'light',\n Medium = 'medium',\n Heavy = 'heavy',\n Success = 'success',\n Warning = 'warning',\n Error = 'error',\n Selection = 'selection'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HapticsService {\n private options: HapticOptions = {\n enabled: true,\n fallbackToVibration: true\n };\n\n constructor(private platform: Platform) {}\n\n /**\n * Configure haptic feedback options\n */\n configure(options: Partial<HapticOptions>): void {\n this.options = { ...this.options, ...options };\n }\n\n /**\n * Play haptic feedback based on pattern\n */\n async play(pattern: HapticPattern): Promise<void> {\n if (!this.options.enabled) {\n return;\n }\n\n try {\n switch (pattern) {\n case HapticPattern.Light:\n await Haptics.impact({ style: ImpactStyle.Light });\n break;\n \n case HapticPattern.Medium:\n await Haptics.impact({ style: ImpactStyle.Medium });\n break;\n \n case HapticPattern.Heavy:\n await Haptics.impact({ style: ImpactStyle.Heavy });\n break;\n \n case HapticPattern.Success:\n await Haptics.notification({ type: NotificationType.Success });\n break;\n \n case HapticPattern.Warning:\n await Haptics.notification({ type: NotificationType.Warning });\n break;\n \n case HapticPattern.Error:\n await Haptics.notification({ type: NotificationType.Error });\n break;\n \n case HapticPattern.Selection:\n await Haptics.selectionStart();\n break;\n \n default:\n await Haptics.impact({ style: ImpactStyle.Light });\n }\n } catch (error) {\n console.warn('Haptic feedback failed:', error);\n \n // Fallback to vibration if haptics are not supported\n if (this.options.fallbackToVibration && this.platform.is('mobile')) {\n this.vibrate(pattern);\n }\n }\n }\n\n /**\n * Play product selection haptic feedback\n */\n async light(): Promise<void> {\n await this.play(HapticPattern.Light);\n }\n\n /**\n * Play product add to cart haptic feedback\n */\n async medium(): Promise<void> {\n await this.play(HapticPattern.Medium);\n }\n\n /**\n * Play order submission haptic feedback\n */\n async heavy(): Promise<void> {\n await this.play(HapticPattern.Heavy);\n }\n\n /**\n * Play order success haptic feedback\n */\n async success(): Promise<void> {\n await this.play(HapticPattern.Success);\n }\n\n /**\n * Play order error haptic feedback\n */\n async orderError(): Promise<void> {\n await this.play(HapticPattern.Error);\n }\n\n /**\n * Play button interaction haptic feedback\n */\n async buttonInteraction(): Promise<void> {\n await this.play(HapticPattern.Selection);\n }\n\n /**\n * Play custom haptic pattern\n */\n async customImpact(style: ImpactStyle): Promise<void> {\n if (!this.options.enabled) {\n return;\n }\n\n try {\n await Haptics.impact({ style });\n } catch (error) {\n console.warn('Custom haptic impact failed:', error);\n }\n }\n\n /**\n * Play custom notification haptic\n */\n async customNotification(type: NotificationType): Promise<void> {\n if (!this.options.enabled) {\n return;\n }\n\n try {\n await Haptics.notification({ type });\n } catch (error) {\n console.warn('Custom haptic notification failed:', error);\n }\n }\n\n /**\n * Check if haptics are available on the device\n */\n async isAvailable(): Promise<boolean> {\n try {\n // Try to perform a test haptic\n await Haptics.impact({ style: ImpactStyle.Light });\n return true;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Disable haptic feedback\n */\n disable(): void {\n this.options.enabled = false;\n }\n\n /**\n * Enable haptic feedback\n */\n enable(): void {\n this.options.enabled = true;\n }\n\n /**\n * Fallback vibration for unsupported devices\n */\n private vibrate(pattern: HapticPattern): void {\n if (!navigator.vibrate) {\n return;\n }\n\n const vibrationPatterns: Record<HapticPattern, number | number[]> = {\n [HapticPattern.Light]: 50,\n [HapticPattern.Medium]: 100,\n [HapticPattern.Heavy]: 200,\n [HapticPattern.Success]: [100, 50, 100],\n [HapticPattern.Warning]: [150, 100, 150],\n [HapticPattern.Error]: [200, 100, 200, 100, 200],\n [HapticPattern.Selection]: 25\n };\n\n const vibrationPattern = vibrationPatterns[pattern];\n if (Array.isArray(vibrationPattern)) {\n navigator.vibrate(vibrationPattern);\n } else {\n navigator.vibrate(vibrationPattern);\n }\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from \"@angular/core\";\n\nimport { HapticsService } from \"./haptics.service\";\n\nexport const provideUniversalZoneIonic = (): EnvironmentProviders => {\n const providers: Provider[] = [\n HapticsService\n ];\n\n return makeEnvironmentProviders(providers);\n};\n","/*\r\n * Public API Surface of ngx-ionic-zone\r\n */\r\n\r\nexport * from './shared/base-http.service';\r\nexport * from './shared/uz-ionic.provider';\r\nexport * from './shared/app-config';\r\nexport * from './shared/haptics.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ImpactStyle, NotificationType } from '@capacitor/haptics';
|
|
2
|
+
import { Platform } from '@ionic/angular';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface HapticOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Enable or disable haptic feedback
|
|
7
|
+
*/
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Fallback to vibration on unsupported devices
|
|
11
|
+
*/
|
|
12
|
+
fallbackToVibration?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare enum HapticPattern {
|
|
15
|
+
Light = "light",
|
|
16
|
+
Medium = "medium",
|
|
17
|
+
Heavy = "heavy",
|
|
18
|
+
Success = "success",
|
|
19
|
+
Warning = "warning",
|
|
20
|
+
Error = "error",
|
|
21
|
+
Selection = "selection"
|
|
22
|
+
}
|
|
23
|
+
export declare class HapticsService {
|
|
24
|
+
private platform;
|
|
25
|
+
private options;
|
|
26
|
+
constructor(platform: Platform);
|
|
27
|
+
/**
|
|
28
|
+
* Configure haptic feedback options
|
|
29
|
+
*/
|
|
30
|
+
configure(options: Partial<HapticOptions>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Play haptic feedback based on pattern
|
|
33
|
+
*/
|
|
34
|
+
play(pattern: HapticPattern): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Play product selection haptic feedback
|
|
37
|
+
*/
|
|
38
|
+
light(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Play product add to cart haptic feedback
|
|
41
|
+
*/
|
|
42
|
+
medium(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Play order submission haptic feedback
|
|
45
|
+
*/
|
|
46
|
+
heavy(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Play order success haptic feedback
|
|
49
|
+
*/
|
|
50
|
+
success(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Play order error haptic feedback
|
|
53
|
+
*/
|
|
54
|
+
orderError(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Play button interaction haptic feedback
|
|
57
|
+
*/
|
|
58
|
+
buttonInteraction(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Play custom haptic pattern
|
|
61
|
+
*/
|
|
62
|
+
customImpact(style: ImpactStyle): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Play custom notification haptic
|
|
65
|
+
*/
|
|
66
|
+
customNotification(type: NotificationType): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Check if haptics are available on the device
|
|
69
|
+
*/
|
|
70
|
+
isAvailable(): Promise<boolean>;
|
|
71
|
+
/**
|
|
72
|
+
* Disable haptic feedback
|
|
73
|
+
*/
|
|
74
|
+
disable(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Enable haptic feedback
|
|
77
|
+
*/
|
|
78
|
+
enable(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Fallback vibration for unsupported devices
|
|
81
|
+
*/
|
|
82
|
+
private vibrate;
|
|
83
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<HapticsService, never>;
|
|
84
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<HapticsService>;
|
|
85
|
+
}
|
|
File without changes
|