@ablogcms/lib 3.2.28-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +29 -0
  2. package/dist/a-table/index.d.ts +10 -0
  3. package/dist/a-table/index.mjs +48 -0
  4. package/dist/a-table/index.mjs.map +1 -0
  5. package/dist/acms.d.ts +8 -0
  6. package/dist/acms.mjs +1 -0
  7. package/dist/acms.mjs.map +1 -0
  8. package/dist/chunk-AMZYQ4DG.mjs +344 -0
  9. package/dist/chunk-AMZYQ4DG.mjs.map +1 -0
  10. package/dist/chunk-W7TT2YZB.mjs +271 -0
  11. package/dist/chunk-W7TT2YZB.mjs.map +1 -0
  12. package/dist/chunk-ZPZHEKTI.mjs +20 -0
  13. package/dist/chunk-ZPZHEKTI.mjs.map +1 -0
  14. package/dist/command.d.ts +5 -0
  15. package/dist/command.mjs +63 -0
  16. package/dist/command.mjs.map +1 -0
  17. package/dist/create-pdf.d.ts +1 -0
  18. package/dist/create-pdf.mjs +27 -0
  19. package/dist/create-pdf.mjs.map +1 -0
  20. package/dist/events.d.ts +210 -0
  21. package/dist/flatpicker/date-picker.d.ts +6 -0
  22. package/dist/flatpicker/date-picker.mjs +28 -0
  23. package/dist/flatpicker/date-picker.mjs.map +1 -0
  24. package/dist/flatpicker/time-picker.d.ts +6 -0
  25. package/dist/flatpicker/time-picker.mjs +28 -0
  26. package/dist/flatpicker/time-picker.mjs.map +1 -0
  27. package/dist/geolocation.d.ts +1 -0
  28. package/dist/geolocation.mjs +30 -0
  29. package/dist/geolocation.mjs.map +1 -0
  30. package/dist/google-maps/google-maps.d.ts +6 -0
  31. package/dist/google-maps/google-maps.mjs +105 -0
  32. package/dist/google-maps/google-maps.mjs.map +1 -0
  33. package/dist/google-maps/loader.d.ts +9 -0
  34. package/dist/google-maps/loader.mjs +7 -0
  35. package/dist/google-maps/loader.mjs.map +1 -0
  36. package/dist/google-maps/picker/google-maps-picker.d.ts +72 -0
  37. package/dist/google-maps/picker/index.d.ts +5 -0
  38. package/dist/google-maps/picker/index.mjs +483 -0
  39. package/dist/google-maps/picker/index.mjs.map +1 -0
  40. package/dist/google-maps/street-view.d.ts +2 -0
  41. package/dist/google-maps/street-view.mjs +25 -0
  42. package/dist/google-maps/street-view.mjs.map +1 -0
  43. package/dist/htmx/geolocation.d.ts +1 -0
  44. package/dist/htmx/geolocation.mjs +40 -0
  45. package/dist/htmx/geolocation.mjs.map +1 -0
  46. package/dist/icons.d.ts +2 -0
  47. package/dist/icons.mjs +181 -0
  48. package/dist/icons.mjs.map +1 -0
  49. package/dist/lazy-load/index.d.ts +2 -0
  50. package/dist/lazy-load/index.mjs +21 -0
  51. package/dist/lazy-load/index.mjs.map +1 -0
  52. package/dist/lite-editor/index.d.ts +87 -0
  53. package/dist/lite-editor/index.mjs +274 -0
  54. package/dist/lite-editor/index.mjs.map +1 -0
  55. package/dist/lite-editor-field/index.d.ts +8 -0
  56. package/dist/lite-editor-field/index.mjs +18 -0
  57. package/dist/lite-editor-field/index.mjs.map +1 -0
  58. package/dist/loader/index.d.ts +2 -0
  59. package/dist/loader/index.mjs +262 -0
  60. package/dist/loader/index.mjs.map +1 -0
  61. package/dist/loader/loader.d.ts +29 -0
  62. package/dist/loader/sync-loader.d.ts +104 -0
  63. package/dist/open-street-map/open-street-map.d.ts +2 -0
  64. package/dist/open-street-map/open-street-map.mjs +60 -0
  65. package/dist/open-street-map/open-street-map.mjs.map +1 -0
  66. package/dist/open-street-map/picker/index.d.ts +6 -0
  67. package/dist/open-street-map/picker/index.mjs +50 -0
  68. package/dist/open-street-map/picker/index.mjs.map +1 -0
  69. package/dist/open-street-map/picker/open-street-map-picker.d.ts +55 -0
  70. package/dist/open-street-map/picker/open-street-map-picker.mjs +7 -0
  71. package/dist/open-street-map/picker/open-street-map-picker.mjs.map +1 -0
  72. package/dist/pdf2image.d.ts +21 -0
  73. package/dist/pdf2image.mjs +115 -0
  74. package/dist/pdf2image.mjs.map +1 -0
  75. package/dist/polyfill/index.d.ts +1 -0
  76. package/dist/polyfill/index.mjs +40 -0
  77. package/dist/polyfill/index.mjs.map +1 -0
  78. package/dist/read-files.d.ts +14 -0
  79. package/dist/read-files.mjs +62 -0
  80. package/dist/read-files.mjs.map +1 -0
  81. package/dist/resize-image/resize-image.d.ts +71 -0
  82. package/dist/resize-image/resize-image.mjs +308 -0
  83. package/dist/resize-image/resize-image.mjs.map +1 -0
  84. package/dist/resize-image/util.d.ts +134 -0
  85. package/dist/resize-image/util.mjs +7 -0
  86. package/dist/resize-image/util.mjs.map +1 -0
  87. package/dist/select2/index.d.ts +1 -0
  88. package/dist/select2/index.mjs +33 -0
  89. package/dist/select2/index.mjs.map +1 -0
  90. package/dist/trumbowyg.d.ts +12 -0
  91. package/dist/wysiwyg.d.ts +2 -0
  92. package/dist/wysiwyg.mjs +21 -0
  93. package/dist/wysiwyg.mjs.map +1 -0
  94. package/dist/zxcvbn/index.d.ts +2 -0
  95. package/dist/zxcvbn/index.mjs +35 -0
  96. package/dist/zxcvbn/index.mjs.map +1 -0
  97. package/package.json +203 -0
@@ -0,0 +1,483 @@
1
+ import {
2
+ loader_default
3
+ } from "../../chunk-ZPZHEKTI.mjs";
4
+
5
+ // src/google-maps/picker/google-maps-picker.ts
6
+ var defaultOptions = {
7
+ latInput: '.js-map_editable-lat, input[name^="map_lat_"]',
8
+ lngInput: '.js-map_editable-lng, input[name^="map_lng_"]',
9
+ zoomInput: '.js-map_editable-zoom, input[name^="map_zoom_"]',
10
+ pitchInput: '.js-map_editable-pitch, input[name^="map_view_pitch_"]',
11
+ zoomViewInput: '.js-map_editable-zoom-view, input[name^="map_view_zoom_"]',
12
+ headingInput: '.js-map_editable-heading, input[name^="map_view_heading_"]',
13
+ modeSwitcher: '.js-map_editable-activate, input[type="checkbox"][name^="map_view_activate_"]',
14
+ searchInput: ".js-editable_map-search_text",
15
+ searchButton: ".js-editable_map-search_button",
16
+ mapRoot: ".js-map_editable-container",
17
+ apiKey: ACMS.Config.googleApiKey
18
+ };
19
+ var GoogleMapsPicker = class {
20
+ options;
21
+ google = null;
22
+ googleMap = null;
23
+ googleMapMarker = null;
24
+ // 状態管理
25
+ value;
26
+ // DOM要素
27
+ container;
28
+ mapRoot;
29
+ latInput;
30
+ lngInput;
31
+ zoomInput;
32
+ pitchInput = null;
33
+ zoomViewInput = null;
34
+ headingInput = null;
35
+ modeSwitcher = null;
36
+ searchInput = null;
37
+ searchButton = null;
38
+ // イベントリスナー管理
39
+ eventRegistry = /* @__PURE__ */ new Map();
40
+ constructor(elementOrSelector, options) {
41
+ const container = typeof elementOrSelector === "string" ? document.querySelector(elementOrSelector) : elementOrSelector;
42
+ if (!container) {
43
+ throw new Error("Container element not found");
44
+ }
45
+ this.container = container;
46
+ this.options = {
47
+ ...defaultOptions,
48
+ ...options
49
+ };
50
+ const latInput = this.getInputElement(this.options.latInput, this.container);
51
+ const lngInput = this.getInputElement(this.options.lngInput, this.container);
52
+ const zoomInput = this.getInputElement(this.options.zoomInput, this.container);
53
+ const pitchInput = this.getInputElement(this.options.pitchInput, this.container);
54
+ const zoomViewInput = this.getInputElement(this.options.zoomViewInput, this.container);
55
+ const headingInput = this.getInputElement(this.options.headingInput, this.container);
56
+ const modeSwitcher = this.getInputElement(this.options.modeSwitcher, this.container);
57
+ const searchInput = this.getInputElement(this.options.searchInput, this.container);
58
+ const searchButton = this.getButtonElement(this.options.searchButton, this.container);
59
+ const mapRoot = this.getElement(this.options.mapRoot, this.container);
60
+ if (!latInput) {
61
+ throw new Error("Latitude input element is required");
62
+ }
63
+ if (!lngInput) {
64
+ throw new Error("Longitude input element is required");
65
+ }
66
+ if (!zoomInput) {
67
+ throw new Error("Zoom input element is required");
68
+ }
69
+ if (!mapRoot) {
70
+ throw new Error("Map root element is required");
71
+ }
72
+ this.latInput = latInput;
73
+ this.lngInput = lngInput;
74
+ this.zoomInput = zoomInput;
75
+ this.pitchInput = pitchInput;
76
+ this.zoomViewInput = zoomViewInput;
77
+ this.headingInput = headingInput;
78
+ this.modeSwitcher = modeSwitcher;
79
+ this.searchInput = searchInput;
80
+ this.searchButton = searchButton;
81
+ this.mapRoot = mapRoot;
82
+ this.value = {
83
+ type: "ROADMAP",
84
+ lat: 0,
85
+ lng: 0,
86
+ zoom: 0,
87
+ streetView: {
88
+ heading: 0,
89
+ pitch: 0,
90
+ zoomView: 0
91
+ },
92
+ ...this.options.defaultValue
93
+ };
94
+ if (mapRoot instanceof HTMLImageElement) {
95
+ const div = document.createElement("div");
96
+ div.className = mapRoot.className;
97
+ div.style.cssText = getComputedStyle(mapRoot).cssText;
98
+ div.style.width = `${mapRoot.width}px`;
99
+ div.style.height = `${mapRoot.height}px`;
100
+ mapRoot.parentNode?.replaceChild(div, mapRoot);
101
+ this.mapRoot = div;
102
+ }
103
+ }
104
+ async init() {
105
+ if (this.google) {
106
+ return this;
107
+ }
108
+ try {
109
+ this.google = await loader_default(this.options.apiKey);
110
+ this.setValue();
111
+ this.setupEventListeners();
112
+ this.createMap(this.options.mapOptions);
113
+ this.toggleStreetView();
114
+ return this;
115
+ } catch (error) {
116
+ throw new Error(`Failed to initialize Google Maps: ${error}`, { cause: error });
117
+ }
118
+ }
119
+ // DOM要素取得のヘルパーメソッド
120
+ getElement(elementOrSelector, context = document.body) {
121
+ if (!elementOrSelector) return null;
122
+ if (typeof elementOrSelector === "string") {
123
+ if (context.matches && context.matches(elementOrSelector)) {
124
+ return context;
125
+ }
126
+ return context.querySelector(elementOrSelector);
127
+ }
128
+ return elementOrSelector;
129
+ }
130
+ getInputElement(elementOrSelector, context = document.body) {
131
+ const element = this.getElement(elementOrSelector, context);
132
+ return element instanceof HTMLInputElement ? element : null;
133
+ }
134
+ getButtonElement(elementOrSelector, context = document.body) {
135
+ const element = this.getElement(elementOrSelector, context);
136
+ return element instanceof HTMLButtonElement ? element : null;
137
+ }
138
+ setupEventListeners() {
139
+ const handleLatLngChange = () => {
140
+ if (!this.google) {
141
+ return;
142
+ }
143
+ this.setValue();
144
+ const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);
145
+ if (this.googleMap) {
146
+ this.googleMap.panTo(center);
147
+ }
148
+ if (this.googleMapMarker) {
149
+ this.googleMapMarker.setPosition(center);
150
+ }
151
+ this.emitChange();
152
+ };
153
+ this.latInput.addEventListener("change", handleLatLngChange);
154
+ this.lngInput.addEventListener("change", handleLatLngChange);
155
+ this.eventRegistry.set(this.latInput, [{ type: "change", listener: handleLatLngChange }]);
156
+ this.eventRegistry.set(this.lngInput, [{ type: "change", listener: handleLatLngChange }]);
157
+ if (this.zoomInput) {
158
+ const handleZoomChange = () => {
159
+ if (this.googleMap) {
160
+ this.setValue();
161
+ this.googleMap.setZoom(this.value.zoom);
162
+ this.emitChange();
163
+ }
164
+ };
165
+ this.zoomInput.addEventListener("change", handleZoomChange);
166
+ this.eventRegistry.set(this.zoomInput, [{ type: "change", listener: handleZoomChange }]);
167
+ }
168
+ if (this.modeSwitcher) {
169
+ const handleModeChange = () => {
170
+ this.toggleStreetView();
171
+ this.emitChange();
172
+ };
173
+ this.modeSwitcher.addEventListener("change", handleModeChange);
174
+ this.eventRegistry.set(this.modeSwitcher, [{ type: "change", listener: handleModeChange }]);
175
+ }
176
+ this.setupSearch();
177
+ }
178
+ createMap(options = {}) {
179
+ if (!this.google) {
180
+ return;
181
+ }
182
+ const div = document.createElement("div");
183
+ div.style.height = "100%";
184
+ this.mapRoot.replaceChildren(div);
185
+ const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);
186
+ this.googleMap = new this.google.maps.Map(div, {
187
+ zoom: this.value.zoom,
188
+ center,
189
+ mapTypeId: this.google.maps.MapTypeId.ROADMAP,
190
+ gestureHandling: "cooperative",
191
+ ...options
192
+ });
193
+ this.registerMapEvents();
194
+ this.createMarker();
195
+ }
196
+ registerMapEvents() {
197
+ if (!this.google || !this.googleMap) {
198
+ return;
199
+ }
200
+ if (this.zoomInput) {
201
+ this.google.maps.event.addListener(this.googleMap, "zoom_changed", () => {
202
+ if (this.googleMap && this.zoomInput) {
203
+ this.zoomInput.value = this.googleMap.getZoom().toString();
204
+ this.setValue();
205
+ this.emitChange();
206
+ }
207
+ });
208
+ }
209
+ }
210
+ unregisterMapEvents() {
211
+ if (!this.google || !this.googleMap) {
212
+ return;
213
+ }
214
+ this.google.maps.event.clearInstanceListeners(this.googleMap);
215
+ }
216
+ createMarker() {
217
+ if (!this.google || !this.googleMap) {
218
+ return;
219
+ }
220
+ const center = this.googleMap.getCenter();
221
+ this.googleMapMarker = new this.google.maps.Marker({
222
+ position: center,
223
+ map: this.googleMap,
224
+ draggable: true
225
+ });
226
+ this.google.maps.event.addListener(this.googleMapMarker, "dragend", (event) => {
227
+ this.setPosition(event.latLng);
228
+ this.emitChange();
229
+ });
230
+ }
231
+ createPanorama() {
232
+ if (!this.google || !this.googleMap) {
233
+ return null;
234
+ }
235
+ const center = this.googleMap.getCenter();
236
+ const config = {
237
+ position: {
238
+ lat: center.lat(),
239
+ lng: center.lng()
240
+ },
241
+ pov: {
242
+ heading: this.value.streetView.heading,
243
+ pitch: this.value.streetView.pitch
244
+ },
245
+ zoom: this.value.streetView.zoomView
246
+ };
247
+ const mapDiv = this.googleMap.getDiv();
248
+ const panorama = new this.google.maps.StreetViewPanorama(mapDiv, config);
249
+ return panorama;
250
+ }
251
+ registerStreetViewEvents() {
252
+ if (!this.google || !this.googleMap) {
253
+ return;
254
+ }
255
+ const panorama = this.googleMap.getStreetView();
256
+ this.google.maps.event.addListener(panorama, "pov_changed", () => {
257
+ this.updateStreetViewInputs();
258
+ this.emitChange();
259
+ });
260
+ this.google.maps.event.addListener(panorama, "position_changed", () => {
261
+ const pos = panorama.getPosition();
262
+ this.setPosition(pos);
263
+ this.emitChange();
264
+ });
265
+ }
266
+ unregisterStreetViewEvents() {
267
+ if (!this.google || !this.googleMap) {
268
+ return;
269
+ }
270
+ const panorama = this.googleMap.getStreetView();
271
+ this.google.maps.event.clearInstanceListeners(panorama);
272
+ }
273
+ updateStreetViewInputs() {
274
+ if (!this.googleMap) {
275
+ return;
276
+ }
277
+ const streetView = this.googleMap.getStreetView();
278
+ const pov = streetView.getPov();
279
+ if (pov.pitch !== void 0 && this.pitchInput) {
280
+ this.pitchInput.value = pov.pitch.toString();
281
+ }
282
+ if (pov.heading !== void 0 && this.headingInput) {
283
+ this.headingInput.value = pov.heading.toString();
284
+ }
285
+ if (this.zoomViewInput) {
286
+ this.zoomViewInput.value = streetView.getZoom().toString();
287
+ }
288
+ this.setValue();
289
+ }
290
+ toggleStreetView() {
291
+ const isStreetViewMode = this.modeSwitcher?.checked || false;
292
+ if (isStreetViewMode) {
293
+ this.activateStreetView();
294
+ } else {
295
+ this.deactivateStreetView();
296
+ }
297
+ this.setValue();
298
+ }
299
+ activateStreetView() {
300
+ if (!this.googleMap) {
301
+ return;
302
+ }
303
+ const panorama = this.createPanorama();
304
+ if (panorama) {
305
+ this.googleMap.setStreetView(panorama);
306
+ this.googleMap.setOptions({
307
+ streetViewControl: true
308
+ });
309
+ this.registerStreetViewEvents();
310
+ this.updateStreetViewInputs();
311
+ this.toggleUIElements();
312
+ setTimeout(() => {
313
+ if (panorama.getStatus() !== this.google.maps.StreetViewStatus.OK) {
314
+ alert("\u6307\u5B9A\u306E\u4F4D\u7F6E\u306B\u30B9\u30C8\u30EA\u30FC\u30C8\u30D3\u30E5\u30FC\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30B9\u30C8\u30EA\u30FC\u30C8\u30D3\u30E5\u30FC\u306E\u7BC4\u56F2\u306B\u30DA\u30B0\u30DE\u30F3\u3092\u30C9\u30ED\u30C3\u30D7\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
315
+ }
316
+ }, 1e3);
317
+ }
318
+ }
319
+ deactivateStreetView() {
320
+ if (this.googleMap) {
321
+ this.googleMap.setStreetView(null);
322
+ this.googleMap.setOptions({
323
+ streetViewControl: false
324
+ });
325
+ }
326
+ this.resetStreetViewInputs();
327
+ this.unregisterStreetViewEvents();
328
+ this.toggleUIElements();
329
+ }
330
+ resetStreetViewInputs() {
331
+ if (this.headingInput) {
332
+ this.headingInput.value = "";
333
+ }
334
+ if (this.pitchInput) {
335
+ this.pitchInput.value = "";
336
+ }
337
+ if (this.zoomViewInput) {
338
+ this.zoomViewInput.value = "";
339
+ }
340
+ this.setValue();
341
+ }
342
+ toggleUIElements() {
343
+ const isStreetViewMode = this.modeSwitcher?.checked || false;
344
+ const streetviewTable = this.container.querySelector(".js-streetview-table");
345
+ const mapTable = this.container.querySelector(".js-map-table");
346
+ if (streetviewTable) {
347
+ streetviewTable.style.display = isStreetViewMode ? "block" : "none";
348
+ }
349
+ if (mapTable) {
350
+ mapTable.style.display = isStreetViewMode ? "none" : "block";
351
+ }
352
+ }
353
+ setupSearch() {
354
+ if (!this.searchInput || !this.searchButton) {
355
+ return;
356
+ }
357
+ this.searchInput.disabled = false;
358
+ this.searchButton.disabled = false;
359
+ const handleClick = (event) => {
360
+ event.preventDefault();
361
+ this.performSearch();
362
+ };
363
+ const handleKeydown = (event) => {
364
+ if (event.keyCode === 13) {
365
+ event.preventDefault();
366
+ this.searchButton?.click();
367
+ }
368
+ };
369
+ this.searchButton.addEventListener("click", handleClick);
370
+ this.searchInput.addEventListener("keydown", handleKeydown);
371
+ this.eventRegistry.set(this.searchButton, [{ type: "click", listener: handleClick }]);
372
+ this.eventRegistry.set(this.searchInput, [{ type: "keydown", listener: handleKeydown }]);
373
+ }
374
+ async performSearch() {
375
+ if (!this.google || !this.searchInput || !this.searchButton) {
376
+ return;
377
+ }
378
+ const address = this.searchInput.value;
379
+ if (!address) {
380
+ return;
381
+ }
382
+ this.searchInput.disabled = true;
383
+ this.searchButton.disabled = true;
384
+ const geocoder = new this.google.maps.Geocoder();
385
+ try {
386
+ const results = await new Promise((resolve, reject) => {
387
+ geocoder.geocode({ address }, (results2, status) => {
388
+ if (status === this.google.maps.GeocoderStatus.OK && results2) {
389
+ resolve(results2);
390
+ } else {
391
+ reject(new Error(`Geocoding failed: ${status}`));
392
+ }
393
+ });
394
+ });
395
+ if (results.length > 0) {
396
+ this.setPosition(results[0].geometry.location);
397
+ this.emitChange();
398
+ }
399
+ } catch (error) {
400
+ console.error("Search failed:", error);
401
+ } finally {
402
+ this.searchInput.disabled = false;
403
+ this.searchButton.disabled = false;
404
+ }
405
+ }
406
+ setPosition(latLng) {
407
+ if (this.googleMap) {
408
+ this.googleMap.panTo(latLng);
409
+ }
410
+ if (this.googleMapMarker) {
411
+ this.googleMapMarker.setPosition(latLng);
412
+ }
413
+ const lat = Math.round(latLng.lat() * 1e6);
414
+ const lng = Math.round(latLng.lng() * 1e6);
415
+ this.latInput.value = (lat / 1e6).toString();
416
+ this.lngInput.value = (lng / 1e6).toString();
417
+ this.setValue();
418
+ }
419
+ setValue() {
420
+ const lat = parseFloat(this.latInput.value) || this.options.defaultValue?.lat || 0;
421
+ const lng = parseFloat(this.lngInput.value) || this.options.defaultValue?.lng || 0;
422
+ const zoom = parseInt(this.zoomInput.value, 10) || this.options.defaultValue?.zoom || 14;
423
+ const heading = this.headingInput ? parseFloat(this.headingInput.value) || this.options.defaultValue?.streetView?.heading || 0 : 0;
424
+ const pitch = this.pitchInput ? parseFloat(this.pitchInput.value) || this.options.defaultValue?.streetView?.pitch || 0 : 0;
425
+ const zoomView = this.zoomViewInput ? parseFloat(this.zoomViewInput.value) || this.options.defaultValue?.streetView?.zoomView || 0 : 0;
426
+ const type = this.modeSwitcher && this.modeSwitcher.checked ? "STREETVIEW" : "ROADMAP";
427
+ const newValue = {
428
+ type,
429
+ lat,
430
+ lng,
431
+ zoom,
432
+ streetView: { heading, pitch, zoomView }
433
+ };
434
+ this.value = {
435
+ ...this.value,
436
+ ...newValue
437
+ };
438
+ return this;
439
+ }
440
+ emitChange() {
441
+ if (this.options.onChange) {
442
+ this.options.onChange(this.value);
443
+ }
444
+ }
445
+ getMap() {
446
+ return this.googleMap;
447
+ }
448
+ destroy() {
449
+ this.unregisterMapEvents();
450
+ this.unregisterStreetViewEvents();
451
+ if (this.googleMapMarker) {
452
+ this.googleMapMarker.setMap(null);
453
+ }
454
+ for (const [element, listeners] of this.eventRegistry) {
455
+ listeners.forEach(({ type, listener, options }) => {
456
+ element.removeEventListener(type, listener, options);
457
+ });
458
+ }
459
+ this.eventRegistry.clear();
460
+ const mapDiv = this.googleMap?.getDiv();
461
+ if (mapDiv) {
462
+ this.mapRoot.removeChild(mapDiv);
463
+ }
464
+ this.googleMap = null;
465
+ this.googleMapMarker = null;
466
+ this.google = null;
467
+ }
468
+ };
469
+
470
+ // src/google-maps/picker/index.ts
471
+ function setupGoogleMapsPicker(element, options = {}) {
472
+ if (element.googleMapsPicker) {
473
+ return element.googleMapsPicker;
474
+ }
475
+ const picker = new GoogleMapsPicker(element, options);
476
+ picker.init();
477
+ element.googleMapsPicker = picker;
478
+ return picker;
479
+ }
480
+ export {
481
+ setupGoogleMapsPicker as default
482
+ };
483
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/google-maps/picker/google-maps-picker.ts","../../../src/google-maps/picker/index.ts"],"sourcesContent":["import loadGoogleMap from '../loader';\n\nexport interface GoogleMapsValue {\n type: 'ROADMAP' | 'STREETVIEW';\n lat: number;\n lng: number;\n zoom: number;\n streetView: {\n heading: number;\n pitch: number;\n zoomView: number;\n };\n}\n\nexport interface GoogleMapsPickerOptions {\n // DOM要素セレクターまたは要素自体\n latInput: string | HTMLInputElement;\n lngInput: string | HTMLInputElement;\n zoomInput: string | HTMLInputElement;\n pitchInput?: string | HTMLInputElement;\n zoomViewInput?: string | HTMLInputElement;\n headingInput?: string | HTMLInputElement;\n modeSwitcher?: string | HTMLInputElement;\n searchInput?: string | HTMLInputElement;\n searchButton?: string | HTMLButtonElement;\n mapRoot?: string | HTMLElement;\n\n // コールバック\n onChange?: (value: GoogleMapsValue | null) => void;\n\n // 設定\n apiKey: string;\n defaultValue?: Partial<GoogleMapsValue>;\n mapOptions?: google.maps.MapOptions;\n}\n\nconst defaultOptions: GoogleMapsPickerOptions = {\n latInput: '.js-map_editable-lat, input[name^=\"map_lat_\"]',\n lngInput: '.js-map_editable-lng, input[name^=\"map_lng_\"]',\n zoomInput: '.js-map_editable-zoom, input[name^=\"map_zoom_\"]',\n pitchInput: '.js-map_editable-pitch, input[name^=\"map_view_pitch_\"]',\n zoomViewInput: '.js-map_editable-zoom-view, input[name^=\"map_view_zoom_\"]',\n headingInput: '.js-map_editable-heading, input[name^=\"map_view_heading_\"]',\n modeSwitcher: '.js-map_editable-activate, input[type=\"checkbox\"][name^=\"map_view_activate_\"]',\n searchInput: '.js-editable_map-search_text',\n searchButton: '.js-editable_map-search_button',\n mapRoot: '.js-map_editable-container',\n apiKey: ACMS.Config.googleApiKey,\n};\n\nexport default class GoogleMapsPicker {\n private options: GoogleMapsPickerOptions;\n\n private google: typeof google | null = null;\n\n private googleMap: google.maps.Map | null = null;\n\n private googleMapMarker: google.maps.Marker | null = null;\n\n // 状態管理\n private value: GoogleMapsValue;\n\n // DOM要素\n private container: HTMLElement;\n\n private mapRoot: HTMLElement;\n\n private latInput!: HTMLInputElement;\n\n private lngInput!: HTMLInputElement;\n\n private zoomInput!: HTMLInputElement;\n\n private pitchInput: HTMLInputElement | null = null;\n\n private zoomViewInput: HTMLInputElement | null = null;\n\n private headingInput: HTMLInputElement | null = null;\n\n private modeSwitcher: HTMLInputElement | null = null;\n\n private searchInput: HTMLInputElement | null = null;\n\n private searchButton: HTMLButtonElement | null = null;\n\n // イベントリスナー管理\n private eventRegistry: Map<\n Element | Document,\n Array<{\n type: string;\n listener: EventListener;\n options?: AddEventListenerOptions;\n }>\n > = new Map();\n\n constructor(elementOrSelector: string | HTMLElement, options: Partial<GoogleMapsPickerOptions>) {\n const container =\n typeof elementOrSelector === 'string'\n ? document.querySelector<HTMLElement>(elementOrSelector)\n : elementOrSelector;\n\n if (!container) {\n throw new Error('Container element not found');\n }\n\n this.container = container;\n this.options = {\n ...defaultOptions,\n ...options,\n };\n\n const latInput = this.getInputElement(this.options.latInput, this.container);\n const lngInput = this.getInputElement(this.options.lngInput, this.container);\n const zoomInput = this.getInputElement(this.options.zoomInput, this.container);\n const pitchInput = this.getInputElement(this.options.pitchInput, this.container);\n const zoomViewInput = this.getInputElement(this.options.zoomViewInput, this.container);\n const headingInput = this.getInputElement(this.options.headingInput, this.container);\n const modeSwitcher = this.getInputElement(this.options.modeSwitcher, this.container);\n const searchInput = this.getInputElement(this.options.searchInput, this.container);\n const searchButton = this.getButtonElement(this.options.searchButton, this.container);\n const mapRoot = this.getElement(this.options.mapRoot, this.container);\n // 必須要素のバリデーション\n if (!latInput) {\n throw new Error('Latitude input element is required');\n }\n\n if (!lngInput) {\n throw new Error('Longitude input element is required');\n }\n\n if (!zoomInput) {\n throw new Error('Zoom input element is required');\n }\n\n if (!mapRoot) {\n throw new Error('Map root element is required');\n }\n\n this.latInput = latInput;\n this.lngInput = lngInput;\n this.zoomInput = zoomInput;\n this.pitchInput = pitchInput;\n this.zoomViewInput = zoomViewInput;\n this.headingInput = headingInput;\n this.modeSwitcher = modeSwitcher;\n this.searchInput = searchInput;\n this.searchButton = searchButton;\n this.mapRoot = mapRoot;\n\n this.value = {\n type: 'ROADMAP',\n lat: 0,\n lng: 0,\n zoom: 0,\n streetView: {\n heading: 0,\n pitch: 0,\n zoomView: 0,\n },\n ...this.options.defaultValue,\n };\n\n if (mapRoot instanceof HTMLImageElement) {\n // compatibility\n const div = document.createElement('div');\n div.className = mapRoot.className;\n\n // style をコピー\n div.style.cssText = getComputedStyle(mapRoot).cssText;\n\n // サイズを固定\n div.style.width = `${mapRoot.width}px`;\n div.style.height = `${mapRoot.height}px`;\n mapRoot.parentNode?.replaceChild(div, mapRoot);\n this.mapRoot = div;\n }\n }\n\n async init(): Promise<GoogleMapsPicker> {\n if (this.google) {\n return this;\n }\n\n try {\n // Google Maps API読み込み\n this.google = await loadGoogleMap(this.options.apiKey);\n\n this.setValue();\n // イベントリスナー設定\n this.setupEventListeners();\n\n // マップ作成\n this.createMap(this.options.mapOptions);\n this.toggleStreetView();\n\n return this;\n } catch (error) {\n throw new Error(`Failed to initialize Google Maps: ${error}`, { cause: error });\n }\n }\n\n // DOM要素取得のヘルパーメソッド\n private getElement<T extends HTMLElement = HTMLElement>(\n elementOrSelector: string | T | undefined,\n context: HTMLElement = document.body\n ): T | null {\n if (!elementOrSelector) return null;\n\n if (typeof elementOrSelector === 'string') {\n // コンテナ自身がセレクタに一致するかチェック\n if (context.matches && context.matches(elementOrSelector)) {\n return context as T;\n }\n return context.querySelector<T>(elementOrSelector);\n }\n\n return elementOrSelector;\n }\n\n private getInputElement(\n elementOrSelector: string | HTMLInputElement | undefined,\n context: HTMLElement = document.body\n ): HTMLInputElement | null {\n const element = this.getElement(elementOrSelector, context);\n return element instanceof HTMLInputElement ? element : null;\n }\n\n private getButtonElement(\n elementOrSelector: string | HTMLButtonElement | undefined,\n context: HTMLElement = document.body\n ): HTMLButtonElement | null {\n const element = this.getElement(elementOrSelector, context);\n return element instanceof HTMLButtonElement ? element : null;\n }\n\n private setupEventListeners(): void {\n const handleLatLngChange = () => {\n if (!this.google) {\n return;\n }\n\n this.setValue();\n\n const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);\n if (this.googleMap) {\n this.googleMap.panTo(center);\n }\n if (this.googleMapMarker) {\n this.googleMapMarker.setPosition(center);\n }\n this.emitChange();\n };\n this.latInput.addEventListener('change', handleLatLngChange);\n this.lngInput.addEventListener('change', handleLatLngChange);\n this.eventRegistry.set(this.latInput, [{ type: 'change', listener: handleLatLngChange }]);\n this.eventRegistry.set(this.lngInput, [{ type: 'change', listener: handleLatLngChange }]);\n\n // ズーム変更イベント\n if (this.zoomInput) {\n const handleZoomChange = () => {\n if (this.googleMap) {\n // 入力値を取り込んでから setZoom する。逆順だと古い zoom がマップに適用され、\n // zoom_changed イベント経由で入力欄が元の値に巻き戻る\n this.setValue();\n this.googleMap.setZoom(this.value.zoom);\n this.emitChange();\n }\n };\n this.zoomInput.addEventListener('change', handleZoomChange);\n this.eventRegistry.set(this.zoomInput, [{ type: 'change', listener: handleZoomChange }]);\n }\n\n // ストリートビュー有効化チェックボックス\n if (this.modeSwitcher) {\n const handleModeChange = () => {\n this.toggleStreetView();\n this.emitChange();\n };\n this.modeSwitcher.addEventListener('change', handleModeChange);\n this.eventRegistry.set(this.modeSwitcher, [{ type: 'change', listener: handleModeChange }]);\n }\n\n // 検索機能\n this.setupSearch();\n }\n\n private createMap(options: google.maps.MapOptions = {}): void {\n if (!this.google) {\n return;\n }\n\n const div = document.createElement('div');\n div.style.height = '100%';\n\n this.mapRoot.replaceChildren(div);\n\n const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);\n\n this.googleMap = new this.google.maps.Map(div, {\n zoom: this.value.zoom,\n center,\n mapTypeId: this.google.maps.MapTypeId.ROADMAP,\n gestureHandling: 'cooperative',\n ...options,\n });\n\n this.registerMapEvents();\n this.createMarker();\n }\n\n private registerMapEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n\n // ズームイベント\n if (this.zoomInput) {\n this.google.maps.event.addListener(this.googleMap, 'zoom_changed', () => {\n if (this.googleMap && this.zoomInput) {\n this.zoomInput.value = this.googleMap.getZoom().toString();\n this.setValue();\n this.emitChange();\n }\n });\n }\n }\n\n private unregisterMapEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n this.google.maps.event.clearInstanceListeners(this.googleMap);\n }\n\n private createMarker(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n\n const center = this.googleMap.getCenter();\n this.googleMapMarker = new this.google.maps.Marker({\n position: center,\n map: this.googleMap,\n draggable: true,\n });\n\n this.google.maps.event.addListener(this.googleMapMarker, 'dragend', (event) => {\n this.setPosition(event.latLng);\n this.emitChange();\n });\n }\n\n private createPanorama(): google.maps.StreetViewPanorama | null {\n if (!this.google || !this.googleMap) {\n return null;\n }\n\n const center = this.googleMap.getCenter();\n const config: google.maps.StreetViewPanoramaOptions = {\n position: {\n lat: center.lat(),\n lng: center.lng(),\n },\n pov: {\n heading: this.value.streetView.heading,\n pitch: this.value.streetView.pitch,\n },\n zoom: this.value.streetView.zoomView,\n };\n\n // マップのdiv要素を取得\n const mapDiv = this.googleMap.getDiv();\n const panorama = new this.google!.maps.StreetViewPanorama(mapDiv, config);\n return panorama;\n }\n\n private registerStreetViewEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n\n const panorama = this.googleMap.getStreetView();\n\n // POV変更イベント\n this.google.maps.event.addListener(panorama, 'pov_changed', () => {\n this.updateStreetViewInputs();\n this.emitChange();\n });\n\n // 位置変更イベント\n this.google.maps.event.addListener(panorama, 'position_changed', () => {\n const pos = panorama.getPosition();\n this.setPosition(pos);\n this.emitChange();\n });\n }\n\n private unregisterStreetViewEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n const panorama = this.googleMap.getStreetView();\n this.google.maps.event.clearInstanceListeners(panorama);\n }\n\n private updateStreetViewInputs(): void {\n if (!this.googleMap) {\n return;\n }\n\n const streetView = this.googleMap.getStreetView();\n\n const pov = streetView.getPov();\n if (pov.pitch !== undefined && this.pitchInput) {\n this.pitchInput.value = pov.pitch.toString();\n }\n if (pov.heading !== undefined && this.headingInput) {\n this.headingInput.value = pov.heading.toString();\n }\n if (this.zoomViewInput) {\n this.zoomViewInput.value = streetView.getZoom().toString();\n }\n this.setValue();\n }\n\n private toggleStreetView(): void {\n const isStreetViewMode = this.modeSwitcher?.checked || false;\n\n if (isStreetViewMode) {\n this.activateStreetView();\n } else {\n this.deactivateStreetView();\n }\n\n this.setValue();\n }\n\n private activateStreetView(): void {\n if (!this.googleMap) {\n return;\n }\n\n const panorama = this.createPanorama();\n if (panorama) {\n this.googleMap.setStreetView(panorama);\n this.googleMap.setOptions({\n streetViewControl: true,\n });\n this.registerStreetViewEvents();\n this.updateStreetViewInputs();\n this.toggleUIElements();\n\n setTimeout(() => {\n if (panorama.getStatus() !== this.google!.maps.StreetViewStatus.OK) {\n alert('指定の位置にストリートビューがありません。ストリートビューの範囲にペグマンをドロップしてください。');\n }\n }, 1000);\n }\n }\n\n private deactivateStreetView(): void {\n // ストリートビューをクリア\n if (this.googleMap) {\n this.googleMap.setStreetView(null);\n this.googleMap.setOptions({\n streetViewControl: false,\n });\n }\n\n this.resetStreetViewInputs();\n this.unregisterStreetViewEvents();\n this.toggleUIElements();\n }\n\n private resetStreetViewInputs(): void {\n if (this.headingInput) {\n this.headingInput.value = '';\n }\n if (this.pitchInput) {\n this.pitchInput.value = '';\n }\n if (this.zoomViewInput) {\n this.zoomViewInput.value = '';\n }\n this.setValue();\n }\n\n private toggleUIElements(): void {\n const isStreetViewMode = this.modeSwitcher?.checked || false;\n\n const streetviewTable = this.container.querySelector<HTMLElement>('.js-streetview-table');\n const mapTable = this.container.querySelector<HTMLElement>('.js-map-table');\n\n if (streetviewTable) {\n streetviewTable.style.display = isStreetViewMode ? 'block' : 'none';\n }\n if (mapTable) {\n mapTable.style.display = isStreetViewMode ? 'none' : 'block';\n }\n }\n\n private setupSearch(): void {\n if (!this.searchInput || !this.searchButton) {\n return;\n }\n\n this.searchInput.disabled = false;\n this.searchButton.disabled = false;\n\n const handleClick = (event: Event) => {\n event.preventDefault();\n this.performSearch();\n };\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.keyCode === 13) {\n event.preventDefault();\n this.searchButton?.click();\n }\n };\n\n this.searchButton.addEventListener('click', handleClick);\n this.searchInput.addEventListener('keydown', handleKeydown);\n this.eventRegistry.set(this.searchButton, [{ type: 'click', listener: handleClick }]);\n this.eventRegistry.set(this.searchInput, [{ type: 'keydown', listener: handleKeydown as EventListener }]);\n }\n\n private async performSearch(): Promise<void> {\n if (!this.google || !this.searchInput || !this.searchButton) {\n return;\n }\n\n const address = this.searchInput.value;\n if (!address) {\n return;\n }\n\n this.searchInput.disabled = true;\n this.searchButton.disabled = true;\n\n const geocoder = new this.google.maps.Geocoder();\n\n try {\n const results = await new Promise<google.maps.GeocoderResult[]>((resolve, reject) => {\n geocoder.geocode({ address }, (results, status) => {\n if (status === this.google!.maps.GeocoderStatus.OK && results) {\n resolve(results);\n } else {\n reject(new Error(`Geocoding failed: ${status}`));\n }\n });\n });\n\n if (results.length > 0) {\n this.setPosition(results[0].geometry.location);\n this.emitChange();\n }\n } catch (error) {\n console.error('Search failed:', error);\n } finally {\n this.searchInput.disabled = false;\n this.searchButton.disabled = false;\n }\n }\n\n private setPosition(latLng: google.maps.LatLng): void {\n if (this.googleMap) {\n this.googleMap.panTo(latLng);\n }\n if (this.googleMapMarker) {\n this.googleMapMarker.setPosition(latLng);\n }\n\n const lat = Math.round(latLng.lat() * 1000000);\n const lng = Math.round(latLng.lng() * 1000000);\n\n this.latInput.value = (lat / 1000000).toString();\n this.lngInput.value = (lng / 1000000).toString();\n\n this.setValue();\n }\n\n private setValue(): GoogleMapsPicker {\n const lat = parseFloat(this.latInput.value) || this.options.defaultValue?.lat || 0;\n const lng = parseFloat(this.lngInput.value) || this.options.defaultValue?.lng || 0;\n const zoom = parseInt(this.zoomInput.value, 10) || this.options.defaultValue?.zoom || 14;\n const heading = this.headingInput\n ? parseFloat(this.headingInput.value) || this.options.defaultValue?.streetView?.heading || 0\n : 0;\n const pitch = this.pitchInput\n ? parseFloat(this.pitchInput.value) || this.options.defaultValue?.streetView?.pitch || 0\n : 0;\n const zoomView = this.zoomViewInput\n ? parseFloat(this.zoomViewInput.value) || this.options.defaultValue?.streetView?.zoomView || 0\n : 0;\n const type = this.modeSwitcher && this.modeSwitcher.checked ? 'STREETVIEW' : 'ROADMAP';\n\n const newValue: GoogleMapsValue = {\n type,\n lat,\n lng,\n zoom,\n streetView: { heading, pitch, zoomView },\n };\n\n this.value = {\n ...this.value,\n ...newValue,\n };\n\n return this;\n }\n\n private emitChange(): void {\n if (this.options.onChange) {\n this.options.onChange(this.value);\n }\n }\n\n getMap(): google.maps.Map | null {\n return this.googleMap;\n }\n\n destroy(): void {\n // Google Maps APIのイベントリスナーを削除\n this.unregisterMapEvents();\n this.unregisterStreetViewEvents();\n if (this.googleMapMarker) {\n this.googleMapMarker.setMap(null);\n }\n\n // Vanilla JSイベントリスナーを削除\n for (const [element, listeners] of this.eventRegistry) {\n listeners.forEach(({ type, listener, options }) => {\n element.removeEventListener(type, listener, options);\n });\n }\n this.eventRegistry.clear();\n\n // プレビューを元に戻す\n const mapDiv = this.googleMap?.getDiv() as HTMLElement | null;\n if (mapDiv) {\n this.mapRoot.removeChild(mapDiv);\n }\n\n // インスタンス変数をクリア\n this.googleMap = null;\n this.googleMapMarker = null;\n this.google = null;\n }\n}\n","import type { GoogleMapsPickerOptions } from './google-maps-picker';\nimport GoogleMapsPicker from './google-maps-picker';\n\nexport default function setupGoogleMapsPicker(\n element: HTMLElement & { googleMapsPicker?: GoogleMapsPicker },\n options: Partial<GoogleMapsPickerOptions> = {}\n): GoogleMapsPicker {\n if (element.googleMapsPicker) {\n return element.googleMapsPicker;\n }\n\n const picker = new GoogleMapsPicker(element, options);\n\n picker.init();\n\n element.googleMapsPicker = picker;\n\n return picker;\n}\n"],"mappings":"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","names":["results"]}
@@ -0,0 +1,2 @@
1
+ declare const _default: (element: HTMLElement) => Promise<void>;
2
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import {
2
+ loader_default
3
+ } from "../chunk-ZPZHEKTI.mjs";
4
+
5
+ // src/google-maps/street-view.ts
6
+ var street_view_default = async (element) => {
7
+ const lat = parseFloat(element.getAttribute("data-lat") ?? "0");
8
+ const lng = parseFloat(element.getAttribute("data-lng") ?? "0");
9
+ let pitch = parseFloat(element.getAttribute("data-pitch") ?? "0");
10
+ let heading = parseFloat(element.getAttribute("data-heading") ?? "0");
11
+ let zoom = parseFloat(element.getAttribute("data-zoom") ?? "0");
12
+ pitch = Number.isNaN(pitch) ? 0 : pitch;
13
+ heading = Number.isNaN(heading) ? 0 : heading;
14
+ zoom = Number.isNaN(zoom) ? 0 : zoom;
15
+ const google = await loader_default(ACMS.Config.googleApiKey);
16
+ new google.maps.StreetViewPanorama(element, {
17
+ position: { lat, lng },
18
+ pov: { heading, pitch },
19
+ zoom
20
+ });
21
+ };
22
+ export {
23
+ street_view_default as default
24
+ };
25
+ //# sourceMappingURL=street-view.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/google-maps/street-view.ts"],"sourcesContent":["import loadGoogleMap from './loader';\n\nexport default async (element: HTMLElement) => {\n const lat = parseFloat(element.getAttribute('data-lat') ?? '0');\n const lng = parseFloat(element.getAttribute('data-lng') ?? '0');\n let pitch = parseFloat(element.getAttribute('data-pitch') ?? '0');\n let heading = parseFloat(element.getAttribute('data-heading') ?? '0');\n let zoom = parseFloat(element.getAttribute('data-zoom') ?? '0');\n pitch = Number.isNaN(pitch) ? 0 : pitch;\n heading = Number.isNaN(heading) ? 0 : heading;\n zoom = Number.isNaN(zoom) ? 0 : zoom;\n\n const google = await loadGoogleMap(ACMS.Config.googleApiKey);\n\n new google.maps.StreetViewPanorama(element, {\n position: { lat, lng },\n pov: { heading, pitch },\n zoom,\n });\n};\n"],"mappings":";;;;;AAEA,IAAO,sBAAQ,OAAO,YAAyB;AAC7C,QAAM,MAAM,WAAW,QAAQ,aAAa,UAAU,KAAK,GAAG;AAC9D,QAAM,MAAM,WAAW,QAAQ,aAAa,UAAU,KAAK,GAAG;AAC9D,MAAI,QAAQ,WAAW,QAAQ,aAAa,YAAY,KAAK,GAAG;AAChE,MAAI,UAAU,WAAW,QAAQ,aAAa,cAAc,KAAK,GAAG;AACpE,MAAI,OAAO,WAAW,QAAQ,aAAa,WAAW,KAAK,GAAG;AAC9D,UAAQ,OAAO,MAAM,KAAK,IAAI,IAAI;AAClC,YAAU,OAAO,MAAM,OAAO,IAAI,IAAI;AACtC,SAAO,OAAO,MAAM,IAAI,IAAI,IAAI;AAEhC,QAAM,SAAS,MAAM,eAAc,KAAK,OAAO,YAAY;AAE3D,MAAI,OAAO,KAAK,mBAAmB,SAAS;AAAA,IAC1C,UAAU,EAAE,KAAK,IAAI;AAAA,IACrB,KAAK,EAAE,SAAS,MAAM;AAAA,IACtB;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ // src/htmx/geolocation.ts
2
+ import htmx from "htmx.org";
3
+ (function() {
4
+ let isRequesting = false;
5
+ htmx.defineExtension("acms-geolocation", {
6
+ onEvent(name, event) {
7
+ if (name === "htmx:beforeRequest") {
8
+ if (isRequesting) {
9
+ return true;
10
+ }
11
+ const { requestConfig } = event.detail;
12
+ event.preventDefault();
13
+ ACMS.Library.geolocation(
14
+ (latitude, longitude) => {
15
+ const { formData } = requestConfig;
16
+ formData.append("lat", latitude.toString());
17
+ formData.append("lng", longitude.toString());
18
+ formData.append("query[]", "lat");
19
+ formData.append("query[]", "lng");
20
+ isRequesting = true;
21
+ htmx.ajax(requestConfig.verb, requestConfig.path, {
22
+ source: requestConfig.elt,
23
+ event: requestConfig.triggeringEvent,
24
+ target: requestConfig.target,
25
+ values: requestConfig.parameters,
26
+ headers: requestConfig.headers
27
+ }).finally(() => {
28
+ isRequesting = false;
29
+ });
30
+ },
31
+ (message) => {
32
+ window.alert(message);
33
+ }
34
+ );
35
+ }
36
+ return true;
37
+ }
38
+ });
39
+ })();
40
+ //# sourceMappingURL=geolocation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/htmx/geolocation.ts"],"sourcesContent":["import htmx from 'htmx.org';\n\n(function () {\n /**\n * リクエスト中かどうかを管理するフラグ\n */\n let isRequesting = false;\n htmx.defineExtension('acms-geolocation', {\n onEvent(name, event) {\n if (name === 'htmx:beforeRequest') {\n if (isRequesting) {\n // リクエスト中の場合は処理をスキップ\n return true;\n }\n const { requestConfig } = event.detail;\n\n event.preventDefault(); // 一旦リクエストをキャンセル\n\n ACMS.Library.geolocation(\n (latitude: number, longitude: number) => {\n const { formData } = requestConfig;\n // 緯度・経度の hidden フィールドを追加\n formData.append('lat', latitude.toString());\n formData.append('lng', longitude.toString());\n formData.append('query[]', 'lat');\n formData.append('query[]', 'lng');\n\n // 改めてリクエストを送信\n isRequesting = true;\n htmx\n .ajax(requestConfig.verb, requestConfig.path, {\n source: requestConfig.elt,\n event: requestConfig.triggeringEvent,\n target: requestConfig.target,\n values: requestConfig.parameters,\n headers: requestConfig.headers,\n })\n .finally(() => {\n // リクエストが完了したらフラグをリセット\n isRequesting = false;\n });\n },\n (message: string) => {\n window.alert(message);\n }\n );\n }\n return true;\n },\n });\n})();\n"],"mappings":";AAAA,OAAO,UAAU;AAAA,CAEhB,WAAY;AAIX,MAAI,eAAe;AACnB,OAAK,gBAAgB,oBAAoB;AAAA,IACvC,QAAQ,MAAM,OAAO;AACnB,UAAI,SAAS,sBAAsB;AACjC,YAAI,cAAc;AAEhB,iBAAO;AAAA,QACT;AACA,cAAM,EAAE,cAAc,IAAI,MAAM;AAEhC,cAAM,eAAe;AAErB,aAAK,QAAQ;AAAA,UACX,CAAC,UAAkB,cAAsB;AACvC,kBAAM,EAAE,SAAS,IAAI;AAErB,qBAAS,OAAO,OAAO,SAAS,SAAS,CAAC;AAC1C,qBAAS,OAAO,OAAO,UAAU,SAAS,CAAC;AAC3C,qBAAS,OAAO,WAAW,KAAK;AAChC,qBAAS,OAAO,WAAW,KAAK;AAGhC,2BAAe;AACf,iBACG,KAAK,cAAc,MAAM,cAAc,MAAM;AAAA,cAC5C,QAAQ,cAAc;AAAA,cACtB,OAAO,cAAc;AAAA,cACrB,QAAQ,cAAc;AAAA,cACtB,QAAQ,cAAc;AAAA,cACtB,SAAS,cAAc;AAAA,YACzB,CAAC,EACA,QAAQ,MAAM;AAEb,6BAAe;AAAA,YACjB,CAAC;AAAA,UACL;AAAA,UACA,CAAC,YAAoB;AACnB,mBAAO,MAAM,OAAO;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH,GAAG;","names":[]}
@@ -0,0 +1,2 @@
1
+ declare const _default: string[];
2
+ export default _default;