@acorex/components 19.15.0-next.21 → 19.15.0-next.24

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.
@@ -140,7 +140,13 @@ class AXTimeDurationComponent extends classes((MXInputBaseValueComponent), MXLoo
140
140
  const maskParts = selectedUnits.map((unit) => {
141
141
  return unitPatterns[unit];
142
142
  });
143
- const result = maskParts.join(' : ');
143
+ let result;
144
+ if (this.translationService.getActiveLang() === 'fa-IR') {
145
+ result = maskParts.reverse().join(' : ');
146
+ }
147
+ else {
148
+ result = maskParts.join(' : ');
149
+ }
144
150
  this.maskOptions.set({ mask: result, eager: true });
145
151
  }
146
152
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: AXTimeDurationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-time-duration.mjs","sources":["../../../../packages/components/time-duration/src/lib/time-duration.component.ts","../../../../packages/components/time-duration/src/lib/time-duration.component.html","../../../../packages/components/time-duration/src/lib/time-duration.module.ts","../../../../packages/components/time-duration/src/acorex-components-time-duration.ts"],"sourcesContent":["import {\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXMaskOptions, AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTimeDurationFormatter } from '@acorex/core/date-time';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IMask } from 'angular-imask';\nimport { classes } from 'polytype';\nimport { AXTimeDurationUnit } from './time-duration.type';\n\n@Component({\n selector: 'ax-time-duration',\n templateUrl: './time-duration.component.html',\n styleUrls: ['./time-duration.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXTextBoxModule, FormsModule, AXSelectBoxModule],\n inputs: ['disabled', 'tabIndex', 'readonly', 'look'],\n outputs: ['onValueChanged'],\n providers: [\n { provide: AXComponent, useExisting: AXTimeDurationComponent },\n { provide: AXFocusableComponent, useExisting: AXTimeDurationComponent },\n { provide: AXValuableComponent, useExisting: AXTimeDurationComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXTimeDurationComponent),\n multi: true,\n },\n ],\n})\nexport class AXTimeDurationComponent extends classes(MXInputBaseValueComponent<number>, MXLookComponent) {\n protected inputValue: string;\n readonly valueStart = input<AXTimeDurationUnit>('YEAR');\n readonly valueEnd = input<AXTimeDurationUnit>('MILLISECOND');\n protected maskOptions = signal<AXMaskOptions>({\n mask: 'HH:MM:SS',\n blocks: {\n HH: { mask: IMask.MaskedRange, from: 0, to: 23 },\n MM: { mask: IMask.MaskedRange, from: 0, to: 59 },\n SS: { mask: IMask.MaskedRange, from: 0, to: 59 },\n },\n });\n\n private translationService: AXTranslationService = inject(AXTranslationService);\n private timeDurationFormatter: AXTimeDurationFormatter = inject(AXTimeDurationFormatter);\n\n private onInputFire = false;\n private onInternalValueChangedFire = false;\n\n private YEAR = signal(null);\n private MONTH = signal(null);\n private WEEK = signal(null);\n private DAY = signal(null);\n private HOUR = signal(null);\n private MINUTE = signal(null);\n private SECOND = signal(null);\n private MILLISECOND = signal(null);\n private isTranslationInit = signal(false);\n\n #init = afterNextRender(async () => {\n await this.initTranslation();\n });\n\n #effect = effect(() => {\n if (this.valueStart() && this.valueEnd() && this.isTranslationInit()) {\n this.updateMask();\n }\n });\n\n async initTranslation() {\n this.YEAR.set((await this.translationService.translateAsync('dateTime.year')).toLocaleUpperCase());\n this.MONTH.set((await this.translationService.translateAsync('dateTime.month')).toLocaleUpperCase());\n this.WEEK.set((await this.translationService.translateAsync('dateTime.week')).toLocaleUpperCase());\n this.DAY.set((await this.translationService.translateAsync('dateTime.day')).toLocaleUpperCase());\n this.HOUR.set((await this.translationService.translateAsync('dateTime.hour')).toLocaleUpperCase());\n this.MINUTE.set((await this.translationService.translateAsync('dateTime.minute')).toLocaleUpperCase());\n this.SECOND.set((await this.translationService.translateAsync('dateTime.second')).toLocaleUpperCase());\n this.MILLISECOND.set((await this.translationService.translateAsync('dateTime.millisecond')).toLocaleUpperCase());\n this.isTranslationInit.set(true);\n }\n\n protected onInput(event: any) {\n if (this.onInternalValueChangedFire) return;\n this.onInputFire = true;\n const milliseconds = this.maskToMilliseconds(event);\n if (!milliseconds) return;\n this.commitValue(milliseconds, true);\n this.onInputFire = false;\n }\n\n protected override async internalValueChanged(value: number): Promise<void> {\n if (this.onInputFire) return;\n this.onInternalValueChangedFire = true;\n\n const normalizedMask = await this.timeDurationFormatter.millisecondsToMask(\n value,\n this.valueStart(),\n this.valueEnd(),\n );\n\n this.inputValue = normalizedMask;\n\n setTimeout(() => {\n this.onInternalValueChangedFire = false;\n });\n }\n\n private replacePersianLabels(input: string) {\n const replacements = {\n [this.YEAR()]: 'YEAR',\n [this.MONTH()]: 'MONTH',\n [this.WEEK()]: 'WEEK',\n [this.DAY()]: 'DAY',\n [this.HOUR()]: 'HOUR',\n [this.MINUTE()]: 'MINUTE',\n [this.SECOND()]: 'SECOND',\n [this.MILLISECOND()]: 'MILLISECOND',\n };\n\n return Object.entries(replacements).reduce((str, [fa, en]) => {\n return str.replace(`(${fa})`, `(${en})`);\n }, input);\n }\n\n private maskToMilliseconds(maskValue: string): number {\n const transformedMaskValue = this.replacePersianLabels(maskValue);\n\n const timeUnits = {\n YEAR: 365 * 24 * 60 * 60 * 1000,\n MONTH: 30 * 24 * 60 * 60 * 1000,\n WEEK: 7 * 24 * 60 * 60 * 1000,\n DAY: 24 * 60 * 60 * 1000,\n HOUR: 60 * 60 * 1000,\n MINUTE: 60 * 1000,\n SECOND: 1000,\n MILLISECOND: 1,\n };\n\n const regex = /(\\d+)\\s*\\((YEAR|MONTH|WEEK|DAY|HOUR|MINUTE|SECOND|MILLISECOND)\\)/g;\n let match;\n let totalMs = 0;\n\n while ((match = regex.exec(transformedMaskValue)) !== null) {\n const value = parseInt(match[1], 10);\n const unit = match[2];\n if (timeUnits[unit] !== undefined) {\n totalMs += value * timeUnits[unit];\n }\n }\n\n return totalMs;\n }\n\n private updateMask() {\n const allUnits = ['YEAR', 'MONTH', 'WEEK', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'MILLISECOND'];\n const startIndex = allUnits.indexOf(this.valueStart());\n const endIndex = allUnits.indexOf(this.valueEnd());\n\n if (startIndex === -1 || endIndex === -1 || endIndex < startIndex) {\n this.maskOptions.set({ mask: '', eager: true });\n return null;\n }\n\n const selectedUnits = allUnits.slice(startIndex, endIndex + 1);\n\n const unitPatterns: Record<string, string> = {\n YEAR: `00 (${this.YEAR()})`,\n MONTH: `00 (${this.MONTH()})`,\n WEEK: `00 (${this.WEEK()})`,\n DAY: `00 (${this.DAY()})`,\n HOUR: `00 (${this.HOUR()})`,\n MINUTE: `00 (${this.MINUTE()})`,\n SECOND: `00 (${this.SECOND()})`,\n MILLISECOND: `000 (${this.MILLISECOND()})`,\n };\n\n const maskParts = selectedUnits.map((unit) => {\n return unitPatterns[unit];\n });\n\n const result = maskParts.join(' : ');\n\n this.maskOptions.set({ mask: result, eager: true });\n }\n}\n","<div class=\"ax-editor-container\">\n <ax-text-box\n [look]=\"look\"\n [placeholder]=\"maskOptions().mask\"\n [mask-options]=\"maskOptions()\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"onInput($event)\"\n class=\"ax-time-duration-text\"\n [disabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [readonly]=\"readonly\"\n >\n </ax-text-box>\n <ng-content select=\"ax-validation-rule\"> </ng-content>\n</div>\n<div class=\"ax-error-container\"></div>\n","import { NgModule } from '@angular/core';\nimport { AXTimeDurationComponent } from './time-duration.component';\n\nconst COMPONENT = [AXTimeDurationComponent];\n\nconst MODULES = [];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXTimeDurationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AA+CM,MAAO,uBAAwB,SAAQ,OAAO,EAAC,yBAAiC,GAAE,eAAe,CAAC,CAAA;AApBxG,IAAA,WAAA,GAAA;;AAsBW,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAqB,MAAM,CAAC;AAC9C,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAqB,aAAa,CAAC;QAClD,IAAW,CAAA,WAAA,GAAG,MAAM,CAAgB;AAC5C,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AAChD,gBAAA,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AAChD,gBAAA,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AACjD,aAAA;AACF,SAAA,CAAC;AAEM,QAAA,IAAA,CAAA,kBAAkB,GAAyB,MAAM,CAAC,oBAAoB,CAAC;AACvE,QAAA,IAAA,CAAA,qBAAqB,GAA4B,MAAM,CAAC,uBAAuB,CAAC;QAEhF,IAAW,CAAA,WAAA,GAAG,KAAK;QACnB,IAA0B,CAAA,0BAAA,GAAG,KAAK;AAElC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACnB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AACpB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACnB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;AAClB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACnB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;AACrB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;AACrB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;AAEzC,QAAA,IAAA,CAAA,KAAK,GAAG,eAAe,CAAC,YAAW;AACjC,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE;AAC9B,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAK;AACpB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBACpE,IAAI,CAAC,UAAU,EAAE;;AAErB,SAAC,CAAC;AAqHH;AA7HC,IAAA,KAAK;AAIL,IAAA,OAAO;AAMP,IAAA,MAAM,eAAe,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAClG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACpG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAClG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAChG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACtG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,sBAAsB,CAAC,EAAE,iBAAiB,EAAE,CAAC;AAChH,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGxB,IAAA,OAAO,CAAC,KAAU,EAAA;QAC1B,IAAI,IAAI,CAAC,0BAA0B;YAAE;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,YAAY;YAAE;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;IAGP,MAAM,oBAAoB,CAAC,KAAa,EAAA;QACzD,IAAI,IAAI,CAAC,WAAW;YAAE;AACtB,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;QAEtC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CACxE,KAAK,EACL,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,QAAQ,EAAE,CAChB;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,cAAc;QAEhC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACzC,SAAC,CAAC;;AAGI,IAAA,oBAAoB,CAAC,KAAa,EAAA;AACxC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM;AACrB,YAAA,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO;AACvB,YAAA,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM;AACrB,YAAA,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;AACnB,YAAA,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM;AACrB,YAAA,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ;AACzB,YAAA,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ;AACzB,YAAA,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,aAAa;SACpC;AAED,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAI;AAC3D,YAAA,OAAO,GAAG,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,EAAE,CAAG,CAAA,CAAA,EAAE,CAAI,CAAA,EAAA,EAAE,CAAG,CAAA,CAAA,CAAC;SACzC,EAAE,KAAK,CAAC;;AAGH,IAAA,kBAAkB,CAAC,SAAiB,EAAA;QAC1C,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;AAEjE,QAAA,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;YAC/B,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;YAC/B,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC7B,YAAA,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AACxB,YAAA,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;YACpB,MAAM,EAAE,EAAE,GAAG,IAAI;AACjB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,WAAW,EAAE,CAAC;SACf;QAED,MAAM,KAAK,GAAG,mEAAmE;AACjF,QAAA,IAAI,KAAK;QACT,IAAI,OAAO,GAAG,CAAC;AAEf,QAAA,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,EAAE;YAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACpC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;AACjC,gBAAA,OAAO,IAAI,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;;;AAItC,QAAA,OAAO,OAAO;;IAGR,UAAU,GAAA;AAChB,QAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC;QAC5F,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAElD,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,UAAU,EAAE;AACjE,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/C,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC;AAE9D,QAAA,MAAM,YAAY,GAA2B;AAC3C,YAAA,IAAI,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,IAAI,EAAE,CAAG,CAAA,CAAA;AAC3B,YAAA,KAAK,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,KAAK,EAAE,CAAG,CAAA,CAAA;AAC7B,YAAA,IAAI,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,IAAI,EAAE,CAAG,CAAA,CAAA;AAC3B,YAAA,GAAG,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,GAAG,EAAE,CAAG,CAAA,CAAA;AACzB,YAAA,IAAI,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,IAAI,EAAE,CAAG,CAAA,CAAA;AAC3B,YAAA,MAAM,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAG,CAAA,CAAA;AAC/B,YAAA,MAAM,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAG,CAAA,CAAA;AAC/B,YAAA,WAAW,EAAE,CAAQ,KAAA,EAAA,IAAI,CAAC,WAAW,EAAE,CAAG,CAAA,CAAA;SAC3C;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC3C,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,SAAC,CAAC;QAEF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAEpC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;+GAxJ1C,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAXvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB,EAAE;AAC9D,YAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,uBAAuB,EAAE;AACvE,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,uBAAuB,EAAE;AACtE,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7CH,seAgBA,EDiBY,MAAA,EAAA,CAAA,kEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,cAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,8VAAE,iBAAiB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAc9C,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBApBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAGX,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,eAAe,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAA,MAAA,EAClD,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAA,OAAA,EAC3C,CAAC,gBAAgB,CAAC,EAChB,SAAA,EAAA;AACT,wBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,yBAAyB,EAAE;AAC9D,wBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,yBAAyB,EAAE;AACvE,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,yBAAyB,EAAE;AACtE,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,seAAA,EAAA,MAAA,EAAA,CAAA,kEAAA,CAAA,EAAA;;;AE1CH,MAAM,SAAS,GAAG,CAAC,uBAAuB,CAAC;AAE3C,MAAM,OAAO,GAAG,EAAE;MAOL,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAApB,oBAAoB,EAAA,OAAA,EAAA,CATd,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAAvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;gHAS7B,oBAAoB,EAAA,OAAA,EAAA,CAJlB,OAAO,EAAK,SAAS,CAAA,EAAA,CAAA,CAAA;;4FAIvB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC;AACnC,oBAAA,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;AACvB,oBAAA,SAAS,EAAE,EAAE;AACd,iBAAA;;;ACXD;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-components-time-duration.mjs","sources":["../../../../packages/components/time-duration/src/lib/time-duration.component.ts","../../../../packages/components/time-duration/src/lib/time-duration.component.html","../../../../packages/components/time-duration/src/lib/time-duration.module.ts","../../../../packages/components/time-duration/src/acorex-components-time-duration.ts"],"sourcesContent":["import {\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXMaskOptions, AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTimeDurationFormatter } from '@acorex/core/date-time';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IMask } from 'angular-imask';\nimport { classes } from 'polytype';\nimport { AXTimeDurationUnit } from './time-duration.type';\n\n@Component({\n selector: 'ax-time-duration',\n templateUrl: './time-duration.component.html',\n styleUrls: ['./time-duration.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXTextBoxModule, FormsModule, AXSelectBoxModule],\n inputs: ['disabled', 'tabIndex', 'readonly', 'look'],\n outputs: ['onValueChanged'],\n providers: [\n { provide: AXComponent, useExisting: AXTimeDurationComponent },\n { provide: AXFocusableComponent, useExisting: AXTimeDurationComponent },\n { provide: AXValuableComponent, useExisting: AXTimeDurationComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXTimeDurationComponent),\n multi: true,\n },\n ],\n})\nexport class AXTimeDurationComponent extends classes(MXInputBaseValueComponent<number>, MXLookComponent) {\n protected inputValue: string;\n readonly valueStart = input<AXTimeDurationUnit>('YEAR');\n readonly valueEnd = input<AXTimeDurationUnit>('MILLISECOND');\n protected maskOptions = signal<AXMaskOptions>({\n mask: 'HH:MM:SS',\n blocks: {\n HH: { mask: IMask.MaskedRange, from: 0, to: 23 },\n MM: { mask: IMask.MaskedRange, from: 0, to: 59 },\n SS: { mask: IMask.MaskedRange, from: 0, to: 59 },\n },\n });\n\n private translationService: AXTranslationService = inject(AXTranslationService);\n private timeDurationFormatter: AXTimeDurationFormatter = inject(AXTimeDurationFormatter);\n\n private onInputFire = false;\n private onInternalValueChangedFire = false;\n\n private YEAR = signal(null);\n private MONTH = signal(null);\n private WEEK = signal(null);\n private DAY = signal(null);\n private HOUR = signal(null);\n private MINUTE = signal(null);\n private SECOND = signal(null);\n private MILLISECOND = signal(null);\n private isTranslationInit = signal(false);\n\n #init = afterNextRender(async () => {\n await this.initTranslation();\n });\n\n #effect = effect(() => {\n if (this.valueStart() && this.valueEnd() && this.isTranslationInit()) {\n this.updateMask();\n }\n });\n\n async initTranslation() {\n this.YEAR.set((await this.translationService.translateAsync('dateTime.year')).toLocaleUpperCase());\n this.MONTH.set((await this.translationService.translateAsync('dateTime.month')).toLocaleUpperCase());\n this.WEEK.set((await this.translationService.translateAsync('dateTime.week')).toLocaleUpperCase());\n this.DAY.set((await this.translationService.translateAsync('dateTime.day')).toLocaleUpperCase());\n this.HOUR.set((await this.translationService.translateAsync('dateTime.hour')).toLocaleUpperCase());\n this.MINUTE.set((await this.translationService.translateAsync('dateTime.minute')).toLocaleUpperCase());\n this.SECOND.set((await this.translationService.translateAsync('dateTime.second')).toLocaleUpperCase());\n this.MILLISECOND.set((await this.translationService.translateAsync('dateTime.millisecond')).toLocaleUpperCase());\n this.isTranslationInit.set(true);\n }\n\n protected onInput(event: any) {\n if (this.onInternalValueChangedFire) return;\n this.onInputFire = true;\n const milliseconds = this.maskToMilliseconds(event);\n if (!milliseconds) return;\n this.commitValue(milliseconds, true);\n this.onInputFire = false;\n }\n\n protected override async internalValueChanged(value: number): Promise<void> {\n if (this.onInputFire) return;\n this.onInternalValueChangedFire = true;\n\n const normalizedMask = await this.timeDurationFormatter.millisecondsToMask(\n value,\n this.valueStart(),\n this.valueEnd(),\n );\n\n this.inputValue = normalizedMask;\n\n setTimeout(() => {\n this.onInternalValueChangedFire = false;\n });\n }\n\n private replacePersianLabels(input: string) {\n const replacements = {\n [this.YEAR()]: 'YEAR',\n [this.MONTH()]: 'MONTH',\n [this.WEEK()]: 'WEEK',\n [this.DAY()]: 'DAY',\n [this.HOUR()]: 'HOUR',\n [this.MINUTE()]: 'MINUTE',\n [this.SECOND()]: 'SECOND',\n [this.MILLISECOND()]: 'MILLISECOND',\n };\n\n return Object.entries(replacements).reduce((str, [fa, en]) => {\n return str.replace(`(${fa})`, `(${en})`);\n }, input);\n }\n\n private maskToMilliseconds(maskValue: string): number {\n const transformedMaskValue = this.replacePersianLabels(maskValue);\n\n const timeUnits = {\n YEAR: 365 * 24 * 60 * 60 * 1000,\n MONTH: 30 * 24 * 60 * 60 * 1000,\n WEEK: 7 * 24 * 60 * 60 * 1000,\n DAY: 24 * 60 * 60 * 1000,\n HOUR: 60 * 60 * 1000,\n MINUTE: 60 * 1000,\n SECOND: 1000,\n MILLISECOND: 1,\n };\n\n const regex = /(\\d+)\\s*\\((YEAR|MONTH|WEEK|DAY|HOUR|MINUTE|SECOND|MILLISECOND)\\)/g;\n let match;\n let totalMs = 0;\n\n while ((match = regex.exec(transformedMaskValue)) !== null) {\n const value = parseInt(match[1], 10);\n const unit = match[2];\n if (timeUnits[unit] !== undefined) {\n totalMs += value * timeUnits[unit];\n }\n }\n\n return totalMs;\n }\n\n private updateMask() {\n const allUnits = ['YEAR', 'MONTH', 'WEEK', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'MILLISECOND'];\n const startIndex = allUnits.indexOf(this.valueStart());\n const endIndex = allUnits.indexOf(this.valueEnd());\n\n if (startIndex === -1 || endIndex === -1 || endIndex < startIndex) {\n this.maskOptions.set({ mask: '', eager: true });\n return null;\n }\n\n const selectedUnits = allUnits.slice(startIndex, endIndex + 1);\n\n const unitPatterns: Record<string, string> = {\n YEAR: `00 (${this.YEAR()})`,\n MONTH: `00 (${this.MONTH()})`,\n WEEK: `00 (${this.WEEK()})`,\n DAY: `00 (${this.DAY()})`,\n HOUR: `00 (${this.HOUR()})`,\n MINUTE: `00 (${this.MINUTE()})`,\n SECOND: `00 (${this.SECOND()})`,\n MILLISECOND: `000 (${this.MILLISECOND()})`,\n };\n\n const maskParts = selectedUnits.map((unit) => {\n return unitPatterns[unit];\n });\n\n let result: string;\n\n if (this.translationService.getActiveLang() === 'fa-IR') {\n result = maskParts.reverse().join(' : ');\n } else {\n result = maskParts.join(' : ');\n }\n\n this.maskOptions.set({ mask: result, eager: true });\n }\n}\n","<div class=\"ax-editor-container\">\n <ax-text-box\n [look]=\"look\"\n [placeholder]=\"maskOptions().mask\"\n [mask-options]=\"maskOptions()\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"onInput($event)\"\n class=\"ax-time-duration-text\"\n [disabled]=\"disabled\"\n [tabIndex]=\"tabIndex\"\n [readonly]=\"readonly\"\n >\n </ax-text-box>\n <ng-content select=\"ax-validation-rule\"> </ng-content>\n</div>\n<div class=\"ax-error-container\"></div>\n","import { NgModule } from '@angular/core';\nimport { AXTimeDurationComponent } from './time-duration.component';\n\nconst COMPONENT = [AXTimeDurationComponent];\n\nconst MODULES = [];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXTimeDurationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/map/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from './lib/map.service';
5
5
  export * from './lib/map.type';
6
6
  export * from './lib/map.utility';
7
7
  export * from './lib/map.world-map';
8
+ export * from './lib/poi.provider';
@@ -1,5 +1,5 @@
1
1
  import { OnDestroy } from '@angular/core';
2
- import { AXMapControlPlace, AXMapData, AXMapMarker, AXMapPolygon } from './map.type';
2
+ import { AXMapControlPlace, AXMapData, AXMapMarker, AXMapPolygon, AXPoiMarker } from './map.type';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  * @description
@@ -75,6 +75,12 @@ export declare class AXMapComponent implements OnDestroy {
75
75
  * @default 'bottomright'
76
76
  */
77
77
  locatePlace: import("@angular/core").InputSignal<AXMapControlPlace>;
78
+ /**
79
+ * @description
80
+ * Minimum zoom level at which POI markers become visible.
81
+ * @default 10
82
+ */
83
+ poiMinZoom: import("@angular/core").InputSignal<number>;
78
84
  /**
79
85
  * @description
80
86
  * Array or single marker location(s) to be placed on the map.
@@ -87,6 +93,12 @@ export declare class AXMapComponent implements OnDestroy {
87
93
  * @default undefined
88
94
  */
89
95
  polygons: import("@angular/core").InputSignal<AXMapPolygon | AXMapPolygon[]>;
96
+ /**
97
+ * @description
98
+ * Array or single POI marker(s) to be placed on the map.
99
+ * @default undefined
100
+ */
101
+ pois: import("@angular/core").InputSignal<AXPoiMarker | AXPoiMarker[]>;
90
102
  /**
91
103
  * @description
92
104
  * Event triggered when a new marker is added to the map.
@@ -112,6 +124,16 @@ export declare class AXMapComponent implements OnDestroy {
112
124
  * Event triggered when a location is found via the location control.
113
125
  */
114
126
  onLocationFound: import("@angular/core").OutputEmitterRef<AXMapMarker>;
127
+ /**
128
+ * @description
129
+ * Event triggered when POI positions are changed on the map.
130
+ */
131
+ onPoiChanged: import("@angular/core").OutputEmitterRef<AXPoiMarker[]>;
132
+ /**
133
+ * @description
134
+ * Event triggered when a new POI is added to the map.
135
+ */
136
+ onPoiAdded: import("@angular/core").OutputEmitterRef<AXPoiMarker>;
115
137
  /**
116
138
  * @description
117
139
  * Event triggered map is loaded.
@@ -128,12 +150,14 @@ export declare class AXMapComponent implements OnDestroy {
128
150
  private onMarkerAddedSubscription?;
129
151
  private onPolygonChangedSubscription?;
130
152
  private onPolygonAddedSubscription?;
153
+ private onPoiChangedSubscription?;
154
+ private onPoiAddedSubscription?;
131
155
  /**
132
156
  * @description
133
157
  * Adds a marker to the specified location on the map.
134
158
  * @param location - The location where the marker should be placed.
135
159
  */
136
- addMarker(location: AXMapMarker | AXMapMarker[]): void;
160
+ addMarker(location: AXMapMarker | AXMapMarker[]): Promise<void>;
137
161
  /**
138
162
  * @description
139
163
  * Adds a polygon to the specified location on the map.
@@ -153,6 +177,12 @@ export declare class AXMapComponent implements OnDestroy {
153
177
  * @returns An array of `AXMapPolygon` representing all polygons.
154
178
  */
155
179
  getPolygons(): AXMapPolygon[];
180
+ /**
181
+ * @description
182
+ * Retrieves all POI markers currently placed on the map.
183
+ * @returns An array of `AXPoiMarker` representing all POI markers.
184
+ */
185
+ getPois(): AXPoiMarker[];
156
186
  /**
157
187
  * @description
158
188
  * Clear all markers and polygons
@@ -167,7 +197,7 @@ export declare class AXMapComponent implements OnDestroy {
167
197
  * @description
168
198
  * set markers and polygons
169
199
  */
170
- setDrawItem(data: AXMapData): void;
200
+ setDrawItem(data: AXMapData): Promise<void>;
171
201
  /**
172
202
  * Adjusts the map view to fit all markers and polygons currently on the map.
173
203
  */
@@ -205,10 +235,37 @@ export declare class AXMapComponent implements OnDestroy {
205
235
  * Unsubscribe from draw events
206
236
  */
207
237
  private unsubscribeFromDrawEvents;
238
+ /**
239
+ * @description
240
+ * Update popup for a specific marker
241
+ * @param marker - The marker to update
242
+ * @param popup - The new popup text
243
+ * @param open - Whether the popup should be opened after update
244
+ * @param closeButton - Whether the popup should have a close button
245
+ * @returns True if the update was successful, false otherwise
246
+ */
247
+ updateMarkerPopup(marker: AXMapMarker, popup: string, open?: boolean, closeButton?: boolean): boolean;
248
+ /**
249
+ * @description
250
+ * Update popup for multiple markers
251
+ * @param updates - Array of marker popup updates
252
+ * @returns Number of markers successfully updated
253
+ */
254
+ updateMarkersPopups(updates: {
255
+ marker: AXMapMarker;
256
+ popup: string;
257
+ open?: boolean;
258
+ closeButton?: boolean;
259
+ }[]): number;
260
+ /**
261
+ * @description
262
+ * Refreshes POIs from providers, clearing existing POIs first
263
+ */
264
+ refreshPois(): Promise<void>;
208
265
  /**
209
266
  * Cleanup function that destroys the map and unsubscribes from all subscriptions.
210
267
  */
211
268
  ngOnDestroy(): void;
212
269
  static ɵfac: i0.ɵɵFactoryDeclaration<AXMapComponent, never>;
213
- static ɵcmp: i0.ɵɵComponentDeclaration<AXMapComponent, "ax-map", never, { "zoomLevel": { "alias": "zoomLevel"; "required": false; "isSignal": true; }; "latitude": { "alias": "latitude"; "required": false; "isSignal": true; }; "longitude": { "alias": "longitude"; "required": false; "isSignal": true; }; "maxMarker": { "alias": "maxMarker"; "required": false; "isSignal": true; }; "maxPolygon": { "alias": "maxPolygon"; "required": false; "isSignal": true; }; "hasDraw": { "alias": "hasDraw"; "required": false; "isSignal": true; }; "hasLocator": { "alias": "hasLocator"; "required": false; "isSignal": true; }; "fitToDraw": { "alias": "fitToDraw"; "required": false; "isSignal": true; }; "limitDraw": { "alias": "limitDraw"; "required": false; "isSignal": true; }; "markerPlace": { "alias": "markerPlace"; "required": false; "isSignal": true; }; "locatePlace": { "alias": "locatePlace"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "polygons": { "alias": "polygons"; "required": false; "isSignal": true; }; }, { "zoomLevel": "zoomLevelChange"; "latitude": "latitudeChange"; "longitude": "longitudeChange"; "onMarkerAdded": "onMarkerAdded"; "onMarkerChanged": "onMarkerChanged"; "onPolygonAdded": "onPolygonAdded"; "onPolygonChanged": "onPolygonChanged"; "onLocationFound": "onLocationFound"; "onMapReady": "onMapReady"; }, never, never, true, never>;
270
+ static ɵcmp: i0.ɵɵComponentDeclaration<AXMapComponent, "ax-map", never, { "zoomLevel": { "alias": "zoomLevel"; "required": false; "isSignal": true; }; "latitude": { "alias": "latitude"; "required": false; "isSignal": true; }; "longitude": { "alias": "longitude"; "required": false; "isSignal": true; }; "maxMarker": { "alias": "maxMarker"; "required": false; "isSignal": true; }; "maxPolygon": { "alias": "maxPolygon"; "required": false; "isSignal": true; }; "hasDraw": { "alias": "hasDraw"; "required": false; "isSignal": true; }; "hasLocator": { "alias": "hasLocator"; "required": false; "isSignal": true; }; "fitToDraw": { "alias": "fitToDraw"; "required": false; "isSignal": true; }; "limitDraw": { "alias": "limitDraw"; "required": false; "isSignal": true; }; "markerPlace": { "alias": "markerPlace"; "required": false; "isSignal": true; }; "locatePlace": { "alias": "locatePlace"; "required": false; "isSignal": true; }; "poiMinZoom": { "alias": "poiMinZoom"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "polygons": { "alias": "polygons"; "required": false; "isSignal": true; }; "pois": { "alias": "pois"; "required": false; "isSignal": true; }; }, { "zoomLevel": "zoomLevelChange"; "latitude": "latitudeChange"; "longitude": "longitudeChange"; "onMarkerAdded": "onMarkerAdded"; "onMarkerChanged": "onMarkerChanged"; "onPolygonAdded": "onPolygonAdded"; "onPolygonChanged": "onPolygonChanged"; "onLocationFound": "onLocationFound"; "onPoiChanged": "onPoiChanged"; "onPoiAdded": "onPoiAdded"; "onMapReady": "onMapReady"; }, never, never, true, never>;
214
271
  }
@@ -1,21 +1,26 @@
1
1
  import { EventEmitter } from '@angular/core';
2
- import { AXMapControlPlace, AXMapData, AXMapLatLng, AXMapLocation, AXMapMarker, AXMapPolygon } from './map.type';
2
+ import { AXMapControlPlace, AXMapData, AXMapLatLng, AXMapLocation, AXMapMarker, AXMapPolygon, AXPoiMarker } from './map.type';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  * Service for managing Leaflet maps and related functionalities.
6
6
  */
7
7
  export declare class AXLeafletService {
8
8
  private mapConfig;
9
- private icon;
9
+ private iconResolver;
10
+ private poiProviderService;
11
+ private defaultIcon;
10
12
  private position;
11
13
  private maxMarkers;
12
14
  private maxPolygons;
13
15
  private polygonColor;
16
+ private poiMinZoom;
17
+ private poiMarkers;
14
18
  protected L: typeof import('leaflet');
15
19
  private map?;
16
20
  private drawControl?;
17
21
  private locateControl?;
18
22
  private drawnItems;
23
+ private poiLayer?;
19
24
  private boundary;
20
25
  private boundaryLayer;
21
26
  /**
@@ -34,6 +39,14 @@ export declare class AXLeafletService {
34
39
  * Emits when marker data changes.
35
40
  */
36
41
  onMarkerChanged: EventEmitter<AXMapMarker[]>;
42
+ /**
43
+ * Emits when a poi is added.
44
+ */
45
+ onPoiAdded: EventEmitter<AXPoiMarker>;
46
+ /**
47
+ * Emits when a poi is changed.
48
+ */
49
+ onPoiChanged: EventEmitter<AXPoiMarker[]>;
37
50
  /**
38
51
  * Emits when a marker is added.
39
52
  */
@@ -63,6 +76,18 @@ export declare class AXLeafletService {
63
76
  initMap(mapElement: HTMLElement, location: AXMapLatLng, zoom?: number): Promise<void>;
64
77
  private handleZoomChange;
65
78
  private handleCenterChange;
79
+ /**
80
+ * Creates a custom icon from SVG string or URL using the icon resolver if possible
81
+ * @param iconSrc Path to the icon, SVG string, or icon key
82
+ * @returns Leaflet icon
83
+ */
84
+ setCustomIcon(iconSrc: string): Promise<any>;
85
+ /**
86
+ * Creates a Leaflet icon from SVG or URL
87
+ * @param iconSrc The icon source (SVG string or URL)
88
+ * @returns Leaflet icon
89
+ */
90
+ private createLeafletIcon;
66
91
  /**
67
92
  * Gets the Leaflet map instance.
68
93
  * @returns The Leaflet map instance, or undefined if not initialized.
@@ -91,17 +116,6 @@ export declare class AXLeafletService {
91
116
  * @param duration The duration of the fly animation in seconds.
92
117
  */
93
118
  flyTo(location: AXMapLatLng, zoom?: number, setMarker?: boolean, duration?: number): void;
94
- /**
95
- * Adds a marker or markers to the map.
96
- * @param locations The marker or markers to add.
97
- */
98
- addMarker(locations: AXMapMarker | AXMapMarker[]): void;
99
- /**
100
- * Adds a polygon or polygons to the map, respecting the boundary if set.
101
- * @param polygons The polygon or polygons to add.
102
- * @param clickCallback Optional callback function to be executed on polygon click.
103
- */
104
- addPolygon(polygons: AXMapPolygon | AXMapPolygon[], clickCallback?: (event: L.LeafletMouseEvent) => void): void;
105
119
  /**
106
120
  * Gets all markers currently on the map.
107
121
  * @returns An array of AXMapMarker objects.
@@ -112,6 +126,11 @@ export declare class AXLeafletService {
112
126
  * @returns An array of AXMapPolygon objects.
113
127
  */
114
128
  getPolygons(): AXMapPolygon[];
129
+ /**
130
+ * Gets POI markers from the POI layer.
131
+ * @returns Array of POI markers.
132
+ */
133
+ getPois(): AXPoiMarker[];
115
134
  /**
116
135
  * Adds a draw control to the map for creating markers and polygons.
117
136
  * @param position The position of the control on the map. Defaults to 'topleft'.
@@ -136,9 +155,10 @@ export declare class AXLeafletService {
136
155
  */
137
156
  removeLocateControl(): void;
138
157
  /**
139
- * Clears all drawn items (markers and polygons) from the map.
158
+ * Clears all drawn items, including markers, polygons, and POIs.
159
+ * @param clearPois Whether to clear POI markers as well. Defaults to false.
140
160
  */
141
- clearDrawItems(): void;
161
+ clearDrawItems(clearPois?: boolean): void;
142
162
  /**
143
163
  * Gets the current drawn items (markers and polygons).
144
164
  * @returns An object containing arrays of markers and polygons.
@@ -148,7 +168,7 @@ export declare class AXLeafletService {
148
168
  * Sets the drawn items (markers and polygons) on the map.
149
169
  * @param data An object containing arrays of markers and polygons.
150
170
  */
151
- setDrawItem(data: AXMapData): void;
171
+ setDrawItem(data: AXMapData): Promise<void>;
152
172
  /**
153
173
  * Adjusts the map view to fit all markers, polygons, and boundaries currently on the map.
154
174
  */
@@ -167,6 +187,76 @@ export declare class AXLeafletService {
167
187
  * Destroys the map instance and removes all event listeners.
168
188
  */
169
189
  destroyMap(): void;
190
+ /**
191
+ * Updates a marker's popup text and options
192
+ * @param marker The marker to update
193
+ * @param popup The new popup text
194
+ * @param open Whether the popup should be opened after update
195
+ * @param closeButton Whether the popup should have a close button
196
+ * @returns True if the update was successful, false otherwise
197
+ */
198
+ updateMarkerPopup(marker: AXMapMarker, popup: string, open?: boolean, closeButton?: boolean): boolean;
199
+ /**
200
+ * Finds a marker layer by its latitude and longitude
201
+ * @param marker The marker to find
202
+ * @returns The Leaflet marker layer or undefined if not found
203
+ */
204
+ private findMarkerLayer;
205
+ /**
206
+ * Updates popups for multiple markers in a single operation
207
+ * @param updates Array of marker popup updates
208
+ * @returns Number of markers successfully updated
209
+ */
210
+ updateMarkerPopups(updates: {
211
+ marker: AXMapMarker;
212
+ popup: string;
213
+ open?: boolean;
214
+ closeButton?: boolean;
215
+ }[]): number;
216
+ /**
217
+ * Adds a marker or markers to the map.
218
+ * @param locations The marker or markers to add.
219
+ */
220
+ addMarker(locations: AXMapMarker | AXMapMarker[]): Promise<void>;
221
+ /**
222
+ * Adds a polygon or polygons to the map, respecting the boundary if set.
223
+ * @param polygons The polygon or polygons to add.
224
+ * @param clickCallback Optional callback function to be executed on polygon click.
225
+ */
226
+ addPolygon(polygons: AXMapPolygon | AXMapPolygon[], clickCallback?: (event: L.LeafletMouseEvent) => void): void;
227
+ /**
228
+ * Adds a POI marker to the map.
229
+ * @param locations One or more POI markers to add.
230
+ */
231
+ addPoi(locations: AXPoiMarker | AXPoiMarker[]): Promise<void>;
232
+ /**
233
+ * Updates the visibility of POI markers based on the current zoom level
234
+ * @param currentZoom The current zoom level of the map
235
+ */
236
+ private updatePoiVisibility;
237
+ /**
238
+ * Sets the minimum zoom level at which POI markers become visible
239
+ * @param minZoom The minimum zoom level (default is 10)
240
+ */
241
+ setPoiMinZoom(minZoom: number): void;
242
+ /**
243
+ * Gets the current minimum zoom level for POI visibility
244
+ * @returns The minimum zoom level
245
+ */
246
+ getPoiMinZoom(): number;
247
+ /**
248
+ * Loads POIs from all registered providers
249
+ */
250
+ loadPoisFromProviders(): Promise<void>;
251
+ /**
252
+ * Refreshes POIs from providers, clearing existing POIs first
253
+ */
254
+ refreshPois(): Promise<void>;
255
+ /**
256
+ * Refreshes POIs from a specific provider by key
257
+ * @param providerKey The key of the provider to refresh
258
+ */
259
+ refreshPoiByProvider(providerKey: string): Promise<void>;
170
260
  static ɵfac: i0.ɵɵFactoryDeclaration<AXLeafletService, never>;
171
261
  static ɵprov: i0.ɵɵInjectableDeclaration<AXLeafletService>;
172
262
  }
@@ -2,8 +2,41 @@ export interface AXMapLatLng {
2
2
  latitude: number;
3
3
  longitude: number;
4
4
  }
5
+ /**
6
+ * Represents a marker on the map with position and optional display properties.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const marker: AXMapMarker = {
11
+ * latitude: 51.505,
12
+ * longitude: -0.09,
13
+ * title: "London",
14
+ * popup: "Capital of UK",
15
+ * popupOpen: false,
16
+ * popupCloseButton: true,
17
+ * iconKey: "map-marker" // Icon key to be resolved by icon resolver service
18
+ * // OR
19
+ * icon: "<svg>...</svg>" // Direct SVG content or image URL
20
+ * };
21
+ * ```
22
+ */
5
23
  export interface AXMapMarker extends AXMapLatLng {
6
24
  title?: string;
25
+ iconKey?: string;
26
+ popup?: string;
27
+ popupOpen?: boolean;
28
+ popupCloseButton?: boolean;
29
+ }
30
+ /**
31
+ * Represents a Point of Interest marker on the map with the same properties as AXMapMarker.
32
+ */
33
+ export interface AXPoiMarker extends AXMapLatLng {
34
+ title?: string;
35
+ iconKey?: string;
36
+ popup?: string;
37
+ popupOpen?: boolean;
38
+ popupCloseButton?: boolean;
39
+ minZoom?: number;
7
40
  }
8
41
  export interface AXMapLocation extends AXMapMarker {
9
42
  precision?: number;
@@ -16,5 +49,6 @@ export interface AXMapPolygon {
16
49
  export interface AXMapData {
17
50
  markers: AXMapMarker[];
18
51
  polygons: AXMapPolygon[];
52
+ pois: AXPoiMarker[];
19
53
  }
20
54
  export type AXMapControlPlace = 'topleft' | 'topright' | 'bottomleft' | 'bottomright';
@@ -0,0 +1,15 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AXPoiMarker } from './map.type';
3
+ import * as i0 from "@angular/core";
4
+ export interface AXPoiProvider {
5
+ get key(): string;
6
+ provide(): Promise<AXPoiMarker[]>;
7
+ }
8
+ export declare const AX_MAP_POI_PROVIDER: InjectionToken<AXPoiProvider[]>;
9
+ export declare class AXPoiProviderService {
10
+ private providers;
11
+ private cache;
12
+ getList(): Promise<AXPoiMarker[]>;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPoiProviderService, never>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPoiProviderService>;
15
+ }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "19.15.0-next.21",
3
+ "version": "19.15.0-next.24",
4
4
  "peerDependencies": {
5
- "@angular/common": ">=19.0.0",
6
- "@angular/core": ">=19.0.0",
7
- "@angular/cdk": ">=19.0.0",
5
+ "@angular/common": "^19.0.0",
6
+ "@angular/core": "^19.0.0",
7
+ "@angular/cdk": "^19.0.0",
8
8
  "polytype": ">=0.17.0",
9
9
  "imask": ">=7.6.1",
10
10
  "angular-imask": ">=7.6.1",
@@ -29,6 +29,14 @@
29
29
  "types": "./action-sheet/index.d.ts",
30
30
  "default": "./fesm2022/acorex-components-action-sheet.mjs"
31
31
  },
32
+ "./alert": {
33
+ "types": "./alert/index.d.ts",
34
+ "default": "./fesm2022/acorex-components-alert.mjs"
35
+ },
36
+ "./audio-wave": {
37
+ "types": "./audio-wave/index.d.ts",
38
+ "default": "./fesm2022/acorex-components-audio-wave.mjs"
39
+ },
32
40
  "./autocomplete": {
33
41
  "types": "./autocomplete/index.d.ts",
34
42
  "default": "./fesm2022/acorex-components-autocomplete.mjs"
@@ -41,18 +49,10 @@
41
49
  "types": "./badge/index.d.ts",
42
50
  "default": "./fesm2022/acorex-components-badge.mjs"
43
51
  },
44
- "./alert": {
45
- "types": "./alert/index.d.ts",
46
- "default": "./fesm2022/acorex-components-alert.mjs"
47
- },
48
52
  "./bottom-navigation": {
49
53
  "types": "./bottom-navigation/index.d.ts",
50
54
  "default": "./fesm2022/acorex-components-bottom-navigation.mjs"
51
55
  },
52
- "./audio-wave": {
53
- "types": "./audio-wave/index.d.ts",
54
- "default": "./fesm2022/acorex-components-audio-wave.mjs"
55
- },
56
56
  "./breadcrumbs": {
57
57
  "types": "./breadcrumbs/index.d.ts",
58
58
  "default": "./fesm2022/acorex-components-breadcrumbs.mjs"
@@ -85,6 +85,10 @@
85
85
  "types": "./collapse/index.d.ts",
86
86
  "default": "./fesm2022/acorex-components-collapse.mjs"
87
87
  },
88
+ "./collapse2": {
89
+ "types": "./collapse2/index.d.ts",
90
+ "default": "./fesm2022/acorex-components-collapse2.mjs"
91
+ },
88
92
  "./color-box": {
89
93
  "types": "./color-box/index.d.ts",
90
94
  "default": "./fesm2022/acorex-components-color-box.mjs"
@@ -137,14 +141,14 @@
137
141
  "types": "./drawer/index.d.ts",
138
142
  "default": "./fesm2022/acorex-components-drawer.mjs"
139
143
  },
140
- "./dropdown": {
141
- "types": "./dropdown/index.d.ts",
142
- "default": "./fesm2022/acorex-components-dropdown.mjs"
143
- },
144
144
  "./drawer-2": {
145
145
  "types": "./drawer-2/index.d.ts",
146
146
  "default": "./fesm2022/acorex-components-drawer-2.mjs"
147
147
  },
148
+ "./dropdown": {
149
+ "types": "./dropdown/index.d.ts",
150
+ "default": "./fesm2022/acorex-components-dropdown.mjs"
151
+ },
148
152
  "./dropdown-button": {
149
153
  "types": "./dropdown-button/index.d.ts",
150
154
  "default": "./fesm2022/acorex-components-dropdown-button.mjs"
@@ -157,14 +161,14 @@
157
161
  "types": "./flow-chart/index.d.ts",
158
162
  "default": "./fesm2022/acorex-components-flow-chart.mjs"
159
163
  },
160
- "./grid-layout-builder": {
161
- "types": "./grid-layout-builder/index.d.ts",
162
- "default": "./fesm2022/acorex-components-grid-layout-builder.mjs"
163
- },
164
164
  "./form": {
165
165
  "types": "./form/index.d.ts",
166
166
  "default": "./fesm2022/acorex-components-form.mjs"
167
167
  },
168
+ "./grid-layout-builder": {
169
+ "types": "./grid-layout-builder/index.d.ts",
170
+ "default": "./fesm2022/acorex-components-grid-layout-builder.mjs"
171
+ },
168
172
  "./image": {
169
173
  "types": "./image/index.d.ts",
170
174
  "default": "./fesm2022/acorex-components-image.mjs"