@tft/crispr-forms 18.0.0 → 18.0.1

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.
@@ -1,22 +1,53 @@
1
- import { Component } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { Component, inject, signal } from '@angular/core';
3
2
  import { CrisprFieldComponent, crisprControlMixin } from '../../utils';
3
+ import { GoogleMapsModule, MapGeocoder, } from '@angular/google-maps';
4
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
5
+ import { map, switchMap } from 'rxjs';
6
+ import { AsyncPipe } from '@angular/common';
4
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/google-maps";
9
+ import * as i2 from "@angular/forms";
5
10
  const defaultConfig = {};
6
11
  const MapFieldMixin = crisprControlMixin(CrisprFieldComponent);
7
12
  export class MapFieldComponent extends MapFieldMixin {
8
13
  constructor() {
9
14
  super(...arguments);
15
+ this.geoCoder = inject(MapGeocoder);
16
+ this.locationInput = new FormControl();
10
17
  this.defaultConfig = defaultConfig;
18
+ this.markers = signal([]);
19
+ this.inputCenter = this.locationInput.valueChanges.pipe(switchMap((value) => {
20
+ const request = {
21
+ address: value,
22
+ };
23
+ return this.geoCoder.geocode(request);
24
+ }), map((res) => {
25
+ const { geometry, postcode_localities } = res.results?.[0] || {};
26
+ const { location, bounds } = geometry || {};
27
+ const center = location?.toJSON();
28
+ console.log({ center, bounds, postcode_localities });
29
+ return center;
30
+ }));
11
31
  }
32
+ // center = new input
12
33
  ngOnInit() {
13
34
  super.ngOnInit();
14
35
  }
36
+ onMarkerClick(marker) {
37
+ this.config?.onMarkerClick(marker);
38
+ }
39
+ onMove(map, group) {
40
+ console.log({ map });
41
+ this.config?.onMove?.(map, group);
42
+ }
43
+ getMarkers(map, group) {
44
+ this.config.markers(map, group).pipe();
45
+ }
15
46
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MapFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
16
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: MapFieldComponent, isStandalone: true, selector: "crispr-map", usesInheritance: true, ngImport: i0, template: "<p>google-map works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], preserveWhitespaces: true }); }
47
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.3", type: MapFieldComponent, isStandalone: true, selector: "crispr-map", usesInheritance: true, ngImport: i0, template: "\n<input type=\"text\" [formControl]=\"locationInput\" />\nvalue: {{_value}}\n<google-map \n [center]=\"inputCenter | async\" \n [zoom]=\"11\"\n [options]=\"config.options\" \n (mapDragend)=\"onMove(map, group)\"\n #map>\n\n @for (marker of config.markers(map, group) | async; track $index) {\n <map-advanced-marker\n #markerElem=\"mapAdvancedMarker\"\n [position]=\"marker.position\"\n [content]=\"marker.content\"\n [title]=\"marker.title\"\n (mapClick)=\"onMarkerClick(markerElem)\"\n />\n }\n <map-info-window #infoWindow></map-info-window>\n</google-map>", styles: [""], dependencies: [{ kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i1.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i1.MapInfoWindow, selector: "map-info-window", inputs: ["options", "position"], outputs: ["closeclick", "contentChanged", "domready", "positionChanged", "zindexChanged", "infoWindowInitialized"], exportAs: ["mapInfoWindow"] }, { kind: "directive", type: i1.MapAdvancedMarker, selector: "map-advanced-marker", inputs: ["title", "position", "content", "gmpDraggable", "options", "zIndex"], outputs: ["mapClick", "mapDrag", "mapDragend", "mapDragstart", "markerInitialized"], exportAs: ["mapAdvancedMarker"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], preserveWhitespaces: true }); }
17
48
  }
18
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MapFieldComponent, decorators: [{
19
50
  type: Component,
20
- args: [{ selector: 'crispr-map', standalone: true, imports: [CommonModule], template: "<p>google-map works!</p>\n" }]
51
+ args: [{ selector: 'crispr-map', standalone: true, imports: [GoogleMapsModule, ReactiveFormsModule, AsyncPipe], template: "\n<input type=\"text\" [formControl]=\"locationInput\" />\nvalue: {{_value}}\n<google-map \n [center]=\"inputCenter | async\" \n [zoom]=\"11\"\n [options]=\"config.options\" \n (mapDragend)=\"onMove(map, group)\"\n #map>\n\n @for (marker of config.markers(map, group) | async; track $index) {\n <map-advanced-marker\n #markerElem=\"mapAdvancedMarker\"\n [position]=\"marker.position\"\n [content]=\"marker.content\"\n [title]=\"marker.title\"\n (mapClick)=\"onMarkerClick(markerElem)\"\n />\n }\n <map-info-window #infoWindow></map-info-window>\n</google-map>" }]
21
52
  }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvdWkvbWFwL21hcC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL3VpL21hcC9tYXAtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFrQixrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFdkYsTUFBTSxhQUFhLEdBQTRCLEVBRTlDLENBQUM7QUFDRixNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBaUIsb0JBQW9CLENBQUMsQ0FBQztBQVMvRSxNQUFNLE9BQU8saUJBQ1gsU0FBUSxhQUFhO0lBUnZCOztRQVdFLGtCQUFhLEdBQUcsYUFBYSxDQUFDO0tBSS9CO0lBSEMsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDOzhHQVBVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDZGQ2hCOUIsNEJBQ0EseUREV1ksWUFBWTs7MkZBSVgsaUJBQWlCO2tCQVA3QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENyaXNwckZpZWxkQ29tcG9uZW50LCBNYXBGaWVsZENvbmZpZywgY3Jpc3ByQ29udHJvbE1peGluIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5jb25zdCBkZWZhdWx0Q29uZmlnOiBQYXJ0aWFsPE1hcEZpZWxkQ29uZmlnPiA9IHtcbiAgXG59O1xuY29uc3QgTWFwRmllbGRNaXhpbiA9IGNyaXNwckNvbnRyb2xNaXhpbjxNYXBGaWVsZENvbmZpZz4oQ3Jpc3ByRmllbGRDb21wb25lbnQpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcmlzcHItbWFwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXAtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbWFwLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgTWFwRmllbGRDb21wb25lbnRcbiAgZXh0ZW5kcyBNYXBGaWVsZE1peGluXG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIGRlZmF1bHRDb25maWcgPSBkZWZhdWx0Q29uZmlnO1xuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG59IiwiPHA+Z29vZ2xlLW1hcCB3b3JrcyE8L3A+XG4iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvdWkvbWFwL21hcC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL3VpL21hcC9tYXAtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFhLGdCQUFnQixFQUFxQixXQUFXLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBRTVDLE1BQU0sYUFBYSxHQUE0QixFQUU5QyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQWlCLG9CQUFvQixDQUFDLENBQUM7QUFTL0UsTUFBTSxPQUFPLGlCQUNYLFNBQVEsYUFBYTtJQVJ2Qjs7UUFXRSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUVsQyxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QixZQUFPLEdBQUcsTUFBTSxDQUFvRCxFQUFFLENBQUMsQ0FBQTtRQUN2RSxnQkFBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDaEQsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxPQUFPLEdBQWdDO2dCQUMzQyxPQUFPLEVBQUUsS0FBSzthQUNmLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1YsTUFBTSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFDckQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtLQW9CRjtJQWxCQyxxQkFBcUI7SUFDckIsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVuQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQXlCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBYyxFQUFFLEtBQWdCO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBYyxFQUFFLEtBQWdCO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUN4QyxDQUFDOzhHQTFDVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw2RkNwQjlCLDRsQkFvQmEseURESkQsZ0JBQWdCLG1pQ0FBRSxtQkFBbUIscWtCQUFFLFNBQVM7OzJGQUkvQyxpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFNBQVMsQ0FBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3Jpc3ByRmllbGRDb21wb25lbnQsIE1hcEZpZWxkQ29uZmlnLCBjcmlzcHJDb250cm9sTWl4aW4gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBHb29nbGVNYXAsIEdvb2dsZU1hcHNNb2R1bGUsIE1hcEFkdmFuY2VkTWFya2VyLCBNYXBHZW9jb2RlciwgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IGRlZmF1bHRDb25maWc6IFBhcnRpYWw8TWFwRmllbGRDb25maWc+ID0ge1xuICBcbn07XG5cbmNvbnN0IE1hcEZpZWxkTWl4aW4gPSBjcmlzcHJDb250cm9sTWl4aW48TWFwRmllbGRDb25maWc+KENyaXNwckZpZWxkQ29tcG9uZW50KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3Jpc3ByLW1hcCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtHb29nbGVNYXBzTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBBc3luY1BpcGUgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tYXAtZmllbGQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNYXBGaWVsZENvbXBvbmVudFxuICBleHRlbmRzIE1hcEZpZWxkTWl4aW5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgZ2VvQ29kZXIgPSBpbmplY3QoTWFwR2VvY29kZXIpO1xuICBsb2NhdGlvbklucHV0ID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgZGVmYXVsdENvbmZpZyA9IGRlZmF1bHRDb25maWc7XG4gIG1hcmtlcnMgPSBzaWduYWw8Z29vZ2xlLm1hcHMubWFya2VyLkFkdmFuY2VkTWFya2VyRWxlbWVudE9wdGlvbnNbXT4oW10pXG4gIGlucHV0Q2VudGVyID0gdGhpcy5sb2NhdGlvbklucHV0LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgIHN3aXRjaE1hcCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdDogZ29vZ2xlLm1hcHMuR2VvY29kZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhZGRyZXNzOiB2YWx1ZSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5nZW9Db2Rlci5nZW9jb2RlKHJlcXVlc3QpO1xuICAgIH0pLFxuICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICBjb25zdCB7IGdlb21ldHJ5LCBwb3N0Y29kZV9sb2NhbGl0aWVzIH0gPSByZXMucmVzdWx0cz8uWzBdIHx8IHt9O1xuICAgICAgY29uc3QgeyBsb2NhdGlvbiwgYm91bmRzIH0gPSBnZW9tZXRyeSB8fCB7fTtcbiAgICAgIGNvbnN0IGNlbnRlciA9IGxvY2F0aW9uPy50b0pTT04oKTtcbiAgICAgIGNvbnNvbGUubG9nKHsgY2VudGVyLCBib3VuZHMsIHBvc3Rjb2RlX2xvY2FsaXRpZXMgfSk7XG4gICAgICByZXR1cm4gY2VudGVyO1xuICAgIH0pXG4gIClcblxuICAvLyBjZW50ZXIgPSBuZXcgaW5wdXRcbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBcbiAgfVxuXG4gIG9uTWFya2VyQ2xpY2sobWFya2VyOiBNYXBBZHZhbmNlZE1hcmtlcikge1xuICAgIHRoaXMuY29uZmlnPy5vbk1hcmtlckNsaWNrKG1hcmtlcik7XG4gIH1cblxuICBvbk1vdmUobWFwOiBHb29nbGVNYXAsIGdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICBjb25zb2xlLmxvZyh7bWFwfSlcbiAgICB0aGlzLmNvbmZpZz8ub25Nb3ZlPy4obWFwLCBncm91cCk7XG4gIH1cblxuICBnZXRNYXJrZXJzKG1hcDogR29vZ2xlTWFwLCBncm91cDogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy5jb25maWcubWFya2VycyhtYXAsIGdyb3VwKS5waXBlKClcbiAgfVxufSIsIlxuPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2Zvcm1Db250cm9sXT1cImxvY2F0aW9uSW5wdXRcIiAvPlxudmFsdWU6IHt7X3ZhbHVlfX1cbjxnb29nbGUtbWFwIFxuICBbY2VudGVyXT1cImlucHV0Q2VudGVyIHwgYXN5bmNcIiBcbiAgW3pvb21dPVwiMTFcIlxuICBbb3B0aW9uc109XCJjb25maWcub3B0aW9uc1wiIFxuICAobWFwRHJhZ2VuZCk9XCJvbk1vdmUobWFwLCBncm91cClcIlxuICAjbWFwPlxuXG4gIEBmb3IgKG1hcmtlciBvZiBjb25maWcubWFya2VycyhtYXAsIGdyb3VwKSB8IGFzeW5jOyB0cmFjayAkaW5kZXgpIHtcbiAgICA8bWFwLWFkdmFuY2VkLW1hcmtlclxuICAgICAgI21hcmtlckVsZW09XCJtYXBBZHZhbmNlZE1hcmtlclwiXG4gICAgICBbcG9zaXRpb25dPVwibWFya2VyLnBvc2l0aW9uXCJcbiAgICAgIFtjb250ZW50XT1cIm1hcmtlci5jb250ZW50XCJcbiAgICAgIFt0aXRsZV09XCJtYXJrZXIudGl0bGVcIlxuICAgICAgKG1hcENsaWNrKT1cIm9uTWFya2VyQ2xpY2sobWFya2VyRWxlbSlcIlxuICAgIC8+XG4gICAgfVxuICAgIDxtYXAtaW5mby13aW5kb3cgI2luZm9XaW5kb3c+PC9tYXAtaW5mby13aW5kb3c+XG48L2dvb2dsZS1tYXA+Il19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWZpZWxkLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvdXRpbHMvbW9kZWxzL21hcC1maWVsZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xUeXBlLCBDcmlzcHJDb250cm9sQ29uZmlnIH0gZnJvbSBcIi4vY3Jpc3ByLWZpZWxkLmNvbmZpZ1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgTWFwRmllbGRDb25maWcgPSBDcmlzcHJDb250cm9sQ29uZmlnICYge1xyXG4gIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5NQVA7XHJcbiAgbGFiZWw6IHN0cmluZztcclxufSJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWZpZWxkLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvdXRpbHMvbW9kZWxzL21hcC1maWVsZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDb250cm9sVHlwZSwgQ3Jpc3ByQ29udHJvbENvbmZpZyB9IGZyb20gXCIuL2NyaXNwci1maWVsZC5jb25maWdcIjtcclxuaW1wb3J0IHsgR29vZ2xlTWFwIH0gZnJvbSBcIkBhbmd1bGFyL2dvb2dsZS1tYXBzXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgTWFwRmllbGRDb25maWcgPSBDcmlzcHJDb250cm9sQ29uZmlnICYge1xyXG4gIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5NQVA7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBjZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWw7XHJcbiAgb3B0aW9ucz86Z29vZ2xlLm1hcHMuTWFwT3B0aW9ucztcclxuICBtYXJrZXJzPzogKG1hcDogR29vZ2xlTWFwLCBncm91cDogRm9ybUdyb3VwKSA9PiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLm1hcmtlci5BZHZhbmNlZE1hcmtlckVsZW1lbnRPcHRpb25zW10+O1xyXG4gIG9uTW92ZT86IChtYXA6IEdvb2dsZU1hcCwgZ3JvdXA6IEZvcm1Hcm91cCkgPT4gdW5rbm93bjtcclxuICBvbk1hcmtlckNsaWNrPzogKG1hcmtlcjogZ29vZ2xlLm1hcHMubWFya2VyLkFkdmFuY2VkTWFya2VyRWxlbWVudE9wdGlvbnMpID0+IHVua25vd247XHJcbn0iXX0=
@@ -0,0 +1,63 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, signal, Component } from '@angular/core';
3
+ import { crisprControlMixin, CrisprFieldComponent } from './tft-crispr-forms.mjs';
4
+ import * as i1 from '@angular/google-maps';
5
+ import { MapGeocoder, GoogleMapsModule } from '@angular/google-maps';
6
+ import * as i2 from '@angular/forms';
7
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
8
+ import { switchMap, map } from 'rxjs';
9
+ import { AsyncPipe } from '@angular/common';
10
+ import '@tft/form-validation-handler';
11
+ import 'rxjs/operators';
12
+ import '@angular/material/button';
13
+ import '@angular/material/icon';
14
+ import '@angular/material/progress-bar';
15
+ import '@angular/material/form-field';
16
+ import '@angular/material/tooltip';
17
+
18
+ const defaultConfig = {};
19
+ const MapFieldMixin = crisprControlMixin(CrisprFieldComponent);
20
+ class MapFieldComponent extends MapFieldMixin {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.geoCoder = inject(MapGeocoder);
24
+ this.locationInput = new FormControl();
25
+ this.defaultConfig = defaultConfig;
26
+ this.markers = signal([]);
27
+ this.inputCenter = this.locationInput.valueChanges.pipe(switchMap((value) => {
28
+ const request = {
29
+ address: value,
30
+ };
31
+ return this.geoCoder.geocode(request);
32
+ }), map((res) => {
33
+ const { geometry, postcode_localities } = res.results?.[0] || {};
34
+ const { location, bounds } = geometry || {};
35
+ const center = location?.toJSON();
36
+ console.log({ center, bounds, postcode_localities });
37
+ return center;
38
+ }));
39
+ }
40
+ // center = new input
41
+ ngOnInit() {
42
+ super.ngOnInit();
43
+ }
44
+ onMarkerClick(marker) {
45
+ this.config?.onMarkerClick(marker);
46
+ }
47
+ onMove(map, group) {
48
+ console.log({ map });
49
+ this.config?.onMove?.(map, group);
50
+ }
51
+ getMarkers(map, group) {
52
+ this.config.markers(map, group).pipe();
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MapFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.3", type: MapFieldComponent, isStandalone: true, selector: "crispr-map", usesInheritance: true, ngImport: i0, template: "\n<input type=\"text\" [formControl]=\"locationInput\" />\nvalue: {{_value}}\n<google-map \n [center]=\"inputCenter | async\" \n [zoom]=\"11\"\n [options]=\"config.options\" \n (mapDragend)=\"onMove(map, group)\"\n #map>\n\n @for (marker of config.markers(map, group) | async; track $index) {\n <map-advanced-marker\n #markerElem=\"mapAdvancedMarker\"\n [position]=\"marker.position\"\n [content]=\"marker.content\"\n [title]=\"marker.title\"\n (mapClick)=\"onMarkerClick(markerElem)\"\n />\n }\n <map-info-window #infoWindow></map-info-window>\n</google-map>", styles: [""], dependencies: [{ kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i1.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i1.MapInfoWindow, selector: "map-info-window", inputs: ["options", "position"], outputs: ["closeclick", "contentChanged", "domready", "positionChanged", "zindexChanged", "infoWindowInitialized"], exportAs: ["mapInfoWindow"] }, { kind: "directive", type: i1.MapAdvancedMarker, selector: "map-advanced-marker", inputs: ["title", "position", "content", "gmpDraggable", "options", "zIndex"], outputs: ["mapClick", "mapDrag", "mapDragend", "mapDragstart", "markerInitialized"], exportAs: ["mapAdvancedMarker"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], preserveWhitespaces: true }); }
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MapFieldComponent, decorators: [{
58
+ type: Component,
59
+ args: [{ selector: 'crispr-map', standalone: true, imports: [GoogleMapsModule, ReactiveFormsModule, AsyncPipe], template: "\n<input type=\"text\" [formControl]=\"locationInput\" />\nvalue: {{_value}}\n<google-map \n [center]=\"inputCenter | async\" \n [zoom]=\"11\"\n [options]=\"config.options\" \n (mapDragend)=\"onMove(map, group)\"\n #map>\n\n @for (marker of config.markers(map, group) | async; track $index) {\n <map-advanced-marker\n #markerElem=\"mapAdvancedMarker\"\n [position]=\"marker.position\"\n [content]=\"marker.content\"\n [title]=\"marker.title\"\n (mapClick)=\"onMarkerClick(markerElem)\"\n />\n }\n <map-info-window #infoWindow></map-info-window>\n</google-map>" }]
60
+ }] });
61
+
62
+ export { MapFieldComponent };
63
+ //# sourceMappingURL=tft-crispr-forms-index-CP5Jn6EK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tft-crispr-forms-index-CP5Jn6EK.mjs","sources":["../../../../libs/crispr-forms/src/lib/ui/map/map-field.component.ts","../../../../libs/crispr-forms/src/lib/ui/map/map-field.component.html"],"sourcesContent":["import { Component, OnInit, inject, signal } from '@angular/core';\nimport { CrisprFieldComponent, MapFieldConfig, crisprControlMixin } from '../../utils';\nimport { GoogleMap, GoogleMapsModule, MapAdvancedMarker, MapGeocoder, } from '@angular/google-maps';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { map, switchMap } from 'rxjs';\nimport { AsyncPipe } from '@angular/common';\n\nconst defaultConfig: Partial<MapFieldConfig> = {\n \n};\n\nconst MapFieldMixin = crisprControlMixin<MapFieldConfig>(CrisprFieldComponent);\n\n@Component({\n selector: 'crispr-map',\n standalone: true,\n imports: [GoogleMapsModule, ReactiveFormsModule, AsyncPipe ],\n templateUrl: './map-field.component.html',\n styleUrl: './map-field.component.scss',\n})\nexport class MapFieldComponent\n extends MapFieldMixin\n implements OnInit\n{\n geoCoder = inject(MapGeocoder);\n locationInput = new FormControl();\n\n defaultConfig = defaultConfig;\n markers = signal<google.maps.marker.AdvancedMarkerElementOptions[]>([])\n inputCenter = this.locationInput.valueChanges.pipe(\n switchMap((value: string) => {\n const request: google.maps.GeocoderRequest = {\n address: value,\n };\n return this.geoCoder.geocode(request);\n }),\n map((res) => {\n const { geometry, postcode_localities } = res.results?.[0] || {};\n const { location, bounds } = geometry || {};\n const center = location?.toJSON();\n console.log({ center, bounds, postcode_localities });\n return center;\n })\n )\n\n // center = new input\n ngOnInit() {\n super.ngOnInit();\n \n }\n\n onMarkerClick(marker: MapAdvancedMarker) {\n this.config?.onMarkerClick(marker);\n }\n\n onMove(map: GoogleMap, group: FormGroup) {\n console.log({map})\n this.config?.onMove?.(map, group);\n }\n\n getMarkers(map: GoogleMap, group: FormGroup) {\n this.config.markers(map, group).pipe()\n }\n}","\n<input type=\"text\" [formControl]=\"locationInput\" />\nvalue: {{_value}}\n<google-map \n [center]=\"inputCenter | async\" \n [zoom]=\"11\"\n [options]=\"config.options\" \n (mapDragend)=\"onMove(map, group)\"\n #map>\n\n @for (marker of config.markers(map, group) | async; track $index) {\n <map-advanced-marker\n #markerElem=\"mapAdvancedMarker\"\n [position]=\"marker.position\"\n [content]=\"marker.content\"\n [title]=\"marker.title\"\n (mapClick)=\"onMarkerClick(markerElem)\"\n />\n }\n <map-info-window #infoWindow></map-info-window>\n</google-map>"],"names":[],"mappings":"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"}
@@ -295,7 +295,7 @@ const FIELD_COMPONENTS = {
295
295
  radio: () => import('./tft-crispr-forms-index-Bbcv75sh.mjs').then(({ RadioFieldComponent }) => RadioFieldComponent),
296
296
  autocomplete: () => import('./tft-crispr-forms-index-C_YTy6il.mjs').then(({ AutocompleteFieldComponent }) => AutocompleteFieldComponent),
297
297
  autocompleteChiplist: () => import('./tft-crispr-forms-index-BDJfgpKH.mjs').then(({ AutocompleteChiplistFieldComponent }) => AutocompleteChiplistFieldComponent),
298
- map: () => import('./tft-crispr-forms-index-D8oUGVGX.mjs').then(({ MapFieldComponent }) => MapFieldComponent),
298
+ map: () => import('./tft-crispr-forms-index-CP5Jn6EK.mjs').then(({ MapFieldComponent }) => MapFieldComponent),
299
299
  textarea: () => import('./tft-crispr-forms-index-BVwoi2lw.mjs').then(({ TextareaFieldComponent }) => TextareaFieldComponent),
300
300
  checkbox: () => import('./tft-crispr-forms-index-CN4M4eEo.mjs').then(({ CheckboxFieldComponent }) => CheckboxFieldComponent),
301
301
  slider: () => import('./tft-crispr-forms-index-CYzZB0sA.mjs').then(({ SliderFieldComponent }) => SliderFieldComponent),
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@tft/crispr-forms",
3
- "version": "18.0.0",
3
+ "version": "18.0.1",
4
4
  "peerDependencies": {
5
- "@angular/common": "^17.0.0",
6
- "@angular/forms": "^17.0.0",
7
- "@angular/core": "^17.0.0",
8
- "@angular/material": "^17.0.0",
9
- "@angular/cdk": "^17.0.0",
10
- "@tft/form-validation-handler": "^17.0.0"
5
+ "@angular/common": "^18.0.0",
6
+ "@angular/forms": "^18.0.0",
7
+ "@angular/core": "^18.0.0",
8
+ "@angular/material": "^18.0.0",
9
+ "@angular/cdk": "^18.0.0",
10
+ "@tft/form-validation-handler": "^18.0.0"
11
11
  },
12
12
  "dependencies": {
13
13
  "tslib": "^2.0.0"
@@ -1,10 +1,12 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { MapFieldConfig } from '../../utils';
3
+ import { GoogleMap, MapAdvancedMarker, MapGeocoder } from '@angular/google-maps';
4
+ import { FormControl, FormGroup } from '@angular/forms';
3
5
  import * as i0 from "@angular/core";
4
6
  declare const MapFieldMixin: {
5
7
  new (): {
6
8
  config: MapFieldConfig;
7
- group: import("@angular/forms").FormGroup;
9
+ group: FormGroup;
8
10
  control: import("@angular/forms").AbstractControl;
9
11
  _value: import("../../utils").ControlValue;
10
12
  value: any;
@@ -15,8 +17,15 @@ declare const MapFieldMixin: {
15
17
  };
16
18
  };
17
19
  export declare class MapFieldComponent extends MapFieldMixin implements OnInit {
20
+ geoCoder: MapGeocoder;
21
+ locationInput: FormControl<any>;
18
22
  defaultConfig: Partial<MapFieldConfig>;
23
+ markers: import("@angular/core").WritableSignal<google.maps.marker.AdvancedMarkerElementOptions[]>;
24
+ inputCenter: import("rxjs").Observable<google.maps.LatLngLiteral>;
19
25
  ngOnInit(): void;
26
+ onMarkerClick(marker: MapAdvancedMarker): void;
27
+ onMove(map: GoogleMap, group: FormGroup): void;
28
+ getMarkers(map: GoogleMap, group: FormGroup): void;
20
29
  static ɵfac: i0.ɵɵFactoryDeclaration<MapFieldComponent, never>;
21
30
  static ɵcmp: i0.ɵɵComponentDeclaration<MapFieldComponent, "crispr-map", never, {}, {}, never, never, true, never>;
22
31
  }
@@ -1,5 +1,13 @@
1
+ import { FormGroup } from "@angular/forms";
1
2
  import { ControlType, CrisprControlConfig } from "./crispr-field.config";
3
+ import { GoogleMap } from "@angular/google-maps";
4
+ import { Observable } from "rxjs";
2
5
  export type MapFieldConfig = CrisprControlConfig & {
3
6
  controlType: ControlType.MAP;
4
7
  label: string;
8
+ center: google.maps.LatLngLiteral;
9
+ options?: google.maps.MapOptions;
10
+ markers?: (map: GoogleMap, group: FormGroup) => Observable<google.maps.marker.AdvancedMarkerElementOptions[]>;
11
+ onMove?: (map: GoogleMap, group: FormGroup) => unknown;
12
+ onMarkerClick?: (marker: google.maps.marker.AdvancedMarkerElementOptions) => unknown;
5
13
  };
Binary file
@@ -1,34 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { Component } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { crisprControlMixin, CrisprFieldComponent } from './tft-crispr-forms.mjs';
5
- import '@angular/forms';
6
- import '@tft/form-validation-handler';
7
- import 'rxjs';
8
- import 'rxjs/operators';
9
- import '@angular/material/button';
10
- import '@angular/material/icon';
11
- import '@angular/material/progress-bar';
12
- import '@angular/material/form-field';
13
- import '@angular/material/tooltip';
14
-
15
- const defaultConfig = {};
16
- const MapFieldMixin = crisprControlMixin(CrisprFieldComponent);
17
- class MapFieldComponent extends MapFieldMixin {
18
- constructor() {
19
- super(...arguments);
20
- this.defaultConfig = defaultConfig;
21
- }
22
- ngOnInit() {
23
- super.ngOnInit();
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MapFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: MapFieldComponent, isStandalone: true, selector: "crispr-map", usesInheritance: true, ngImport: i0, template: "<p>google-map works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], preserveWhitespaces: true }); }
27
- }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: MapFieldComponent, decorators: [{
29
- type: Component,
30
- args: [{ selector: 'crispr-map', standalone: true, imports: [CommonModule], template: "<p>google-map works!</p>\n" }]
31
- }] });
32
-
33
- export { MapFieldComponent };
34
- //# sourceMappingURL=tft-crispr-forms-index-D8oUGVGX.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tft-crispr-forms-index-D8oUGVGX.mjs","sources":["../../../../libs/crispr-forms/src/lib/ui/map/map-field.component.ts","../../../../libs/crispr-forms/src/lib/ui/map/map-field.component.html"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CrisprFieldComponent, MapFieldConfig, crisprControlMixin } from '../../utils';\n\nconst defaultConfig: Partial<MapFieldConfig> = {\n \n};\nconst MapFieldMixin = crisprControlMixin<MapFieldConfig>(CrisprFieldComponent);\n\n@Component({\n selector: 'crispr-map',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './map-field.component.html',\n styleUrl: './map-field.component.scss',\n})\nexport class MapFieldComponent\n extends MapFieldMixin\n implements OnInit\n{\n defaultConfig = defaultConfig;\n ngOnInit() {\n super.ngOnInit();\n }\n}","<p>google-map works!</p>\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,MAAM,aAAa,GAA4B,EAE9C,CAAC;AACF,MAAM,aAAa,GAAG,kBAAkB,CAAiB,oBAAoB,CAAC,CAAC;AASzE,MAAO,iBACX,SAAQ,aAAa,CAAA;AARvB,IAAA,WAAA,GAAA;;QAWE,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;AAI/B,KAAA;IAHC,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;8GAPU,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB9B,4BACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDWY,YAAY,EAAA,CAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAIX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EACV,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,4BAAA,EAAA,CAAA;;;;;"}
Binary file