@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.
- package/README.md +29 -0
- package/dist/a-table/index.d.ts +10 -0
- package/dist/a-table/index.mjs +48 -0
- package/dist/a-table/index.mjs.map +1 -0
- package/dist/acms.d.ts +8 -0
- package/dist/acms.mjs +1 -0
- package/dist/acms.mjs.map +1 -0
- package/dist/chunk-AMZYQ4DG.mjs +344 -0
- package/dist/chunk-AMZYQ4DG.mjs.map +1 -0
- package/dist/chunk-W7TT2YZB.mjs +271 -0
- package/dist/chunk-W7TT2YZB.mjs.map +1 -0
- package/dist/chunk-ZPZHEKTI.mjs +20 -0
- package/dist/chunk-ZPZHEKTI.mjs.map +1 -0
- package/dist/command.d.ts +5 -0
- package/dist/command.mjs +63 -0
- package/dist/command.mjs.map +1 -0
- package/dist/create-pdf.d.ts +1 -0
- package/dist/create-pdf.mjs +27 -0
- package/dist/create-pdf.mjs.map +1 -0
- package/dist/events.d.ts +210 -0
- package/dist/flatpicker/date-picker.d.ts +6 -0
- package/dist/flatpicker/date-picker.mjs +28 -0
- package/dist/flatpicker/date-picker.mjs.map +1 -0
- package/dist/flatpicker/time-picker.d.ts +6 -0
- package/dist/flatpicker/time-picker.mjs +28 -0
- package/dist/flatpicker/time-picker.mjs.map +1 -0
- package/dist/geolocation.d.ts +1 -0
- package/dist/geolocation.mjs +30 -0
- package/dist/geolocation.mjs.map +1 -0
- package/dist/google-maps/google-maps.d.ts +6 -0
- package/dist/google-maps/google-maps.mjs +105 -0
- package/dist/google-maps/google-maps.mjs.map +1 -0
- package/dist/google-maps/loader.d.ts +9 -0
- package/dist/google-maps/loader.mjs +7 -0
- package/dist/google-maps/loader.mjs.map +1 -0
- package/dist/google-maps/picker/google-maps-picker.d.ts +72 -0
- package/dist/google-maps/picker/index.d.ts +5 -0
- package/dist/google-maps/picker/index.mjs +483 -0
- package/dist/google-maps/picker/index.mjs.map +1 -0
- package/dist/google-maps/street-view.d.ts +2 -0
- package/dist/google-maps/street-view.mjs +25 -0
- package/dist/google-maps/street-view.mjs.map +1 -0
- package/dist/htmx/geolocation.d.ts +1 -0
- package/dist/htmx/geolocation.mjs +40 -0
- package/dist/htmx/geolocation.mjs.map +1 -0
- package/dist/icons.d.ts +2 -0
- package/dist/icons.mjs +181 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/lazy-load/index.d.ts +2 -0
- package/dist/lazy-load/index.mjs +21 -0
- package/dist/lazy-load/index.mjs.map +1 -0
- package/dist/lite-editor/index.d.ts +87 -0
- package/dist/lite-editor/index.mjs +274 -0
- package/dist/lite-editor/index.mjs.map +1 -0
- package/dist/lite-editor-field/index.d.ts +8 -0
- package/dist/lite-editor-field/index.mjs +18 -0
- package/dist/lite-editor-field/index.mjs.map +1 -0
- package/dist/loader/index.d.ts +2 -0
- package/dist/loader/index.mjs +262 -0
- package/dist/loader/index.mjs.map +1 -0
- package/dist/loader/loader.d.ts +29 -0
- package/dist/loader/sync-loader.d.ts +104 -0
- package/dist/open-street-map/open-street-map.d.ts +2 -0
- package/dist/open-street-map/open-street-map.mjs +60 -0
- package/dist/open-street-map/open-street-map.mjs.map +1 -0
- package/dist/open-street-map/picker/index.d.ts +6 -0
- package/dist/open-street-map/picker/index.mjs +50 -0
- package/dist/open-street-map/picker/index.mjs.map +1 -0
- package/dist/open-street-map/picker/open-street-map-picker.d.ts +55 -0
- package/dist/open-street-map/picker/open-street-map-picker.mjs +7 -0
- package/dist/open-street-map/picker/open-street-map-picker.mjs.map +1 -0
- package/dist/pdf2image.d.ts +21 -0
- package/dist/pdf2image.mjs +115 -0
- package/dist/pdf2image.mjs.map +1 -0
- package/dist/polyfill/index.d.ts +1 -0
- package/dist/polyfill/index.mjs +40 -0
- package/dist/polyfill/index.mjs.map +1 -0
- package/dist/read-files.d.ts +14 -0
- package/dist/read-files.mjs +62 -0
- package/dist/read-files.mjs.map +1 -0
- package/dist/resize-image/resize-image.d.ts +71 -0
- package/dist/resize-image/resize-image.mjs +308 -0
- package/dist/resize-image/resize-image.mjs.map +1 -0
- package/dist/resize-image/util.d.ts +134 -0
- package/dist/resize-image/util.mjs +7 -0
- package/dist/resize-image/util.mjs.map +1 -0
- package/dist/select2/index.d.ts +1 -0
- package/dist/select2/index.mjs +33 -0
- package/dist/select2/index.mjs.map +1 -0
- package/dist/trumbowyg.d.ts +12 -0
- package/dist/wysiwyg.d.ts +2 -0
- package/dist/wysiwyg.mjs +21 -0
- package/dist/wysiwyg.mjs.map +1 -0
- package/dist/zxcvbn/index.d.ts +2 -0
- package/dist/zxcvbn/index.mjs +35 -0
- package/dist/zxcvbn/index.mjs.map +1 -0
- package/package.json +203 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
// src/open-street-map/picker/open-street-map-picker.ts
|
|
2
|
+
import Leaflet from "leaflet";
|
|
3
|
+
import { OpenStreetMapProvider } from "leaflet-geosearch";
|
|
4
|
+
var provider = new OpenStreetMapProvider();
|
|
5
|
+
var defaultOptions = {
|
|
6
|
+
searchInput: ".js-search",
|
|
7
|
+
searchBtn: ".js-search-btn",
|
|
8
|
+
lngInput: ".js-lng",
|
|
9
|
+
latInput: ".js-lat",
|
|
10
|
+
zoomInput: ".js-zoom",
|
|
11
|
+
msgInput: ".js-msg",
|
|
12
|
+
map: ".js-map",
|
|
13
|
+
tile: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
|
|
14
|
+
};
|
|
15
|
+
var OpenStreetMapPicker = class {
|
|
16
|
+
options;
|
|
17
|
+
map;
|
|
18
|
+
marker;
|
|
19
|
+
lat = 0;
|
|
20
|
+
lng = 0;
|
|
21
|
+
zoom = 0;
|
|
22
|
+
msg = "";
|
|
23
|
+
msgEle = null;
|
|
24
|
+
latEle = null;
|
|
25
|
+
lngEle = null;
|
|
26
|
+
zoomEle = null;
|
|
27
|
+
searchInputEle = null;
|
|
28
|
+
searchBtn = null;
|
|
29
|
+
parentForm = null;
|
|
30
|
+
bindPopupFlag = false;
|
|
31
|
+
latinputListener;
|
|
32
|
+
latchangeListener;
|
|
33
|
+
lnginputListener;
|
|
34
|
+
lngchangeListener;
|
|
35
|
+
zoominputListener;
|
|
36
|
+
zoomchangeListener;
|
|
37
|
+
msginputListener;
|
|
38
|
+
formListener;
|
|
39
|
+
searchBtnListener;
|
|
40
|
+
constructor(elementOrSelector, options) {
|
|
41
|
+
const opt = { ...defaultOptions, ...options };
|
|
42
|
+
const element = typeof elementOrSelector === "string" ? document.querySelector(elementOrSelector) : elementOrSelector;
|
|
43
|
+
if (!element) {
|
|
44
|
+
throw new Error("Element not found");
|
|
45
|
+
}
|
|
46
|
+
const mapEle = element.querySelector(opt.map);
|
|
47
|
+
if (!mapEle) {
|
|
48
|
+
throw new Error("Map element not found");
|
|
49
|
+
}
|
|
50
|
+
const lngEle = element.querySelector(opt.lngInput);
|
|
51
|
+
const latEle = element.querySelector(opt.latInput);
|
|
52
|
+
const zoomEle = element.querySelector(opt.zoomInput);
|
|
53
|
+
const searchInputEle = element.querySelector(opt.searchInput);
|
|
54
|
+
const searchBtn = element.querySelector(opt.searchBtn);
|
|
55
|
+
const msgEle = element.querySelector(opt.msgInput);
|
|
56
|
+
const lat = latEle ? Number(latEle.value) || 0 : 0;
|
|
57
|
+
const lng = lngEle ? Number(lngEle.value) || 0 : 0;
|
|
58
|
+
const zoom = zoomEle ? Number(zoomEle.value) || 0 : 0;
|
|
59
|
+
const msg = msgEle ? msgEle.value : "";
|
|
60
|
+
const map = Leaflet.map(mapEle).setView([lat, lng], zoom);
|
|
61
|
+
const marker = Leaflet.marker(map.getCenter(), {
|
|
62
|
+
draggable: true
|
|
63
|
+
});
|
|
64
|
+
if (searchInputEle) {
|
|
65
|
+
this.parentForm = searchInputEle.closest("form");
|
|
66
|
+
}
|
|
67
|
+
this.options = opt;
|
|
68
|
+
this.map = map;
|
|
69
|
+
this.marker = marker;
|
|
70
|
+
this.lat = lat;
|
|
71
|
+
this.lng = lng;
|
|
72
|
+
this.zoom = zoom;
|
|
73
|
+
this.msg = msg;
|
|
74
|
+
this.msgEle = msgEle;
|
|
75
|
+
this.latEle = latEle;
|
|
76
|
+
this.lngEle = lngEle;
|
|
77
|
+
this.zoomEle = zoomEle;
|
|
78
|
+
this.searchInputEle = searchInputEle;
|
|
79
|
+
this.searchBtn = searchBtn;
|
|
80
|
+
this.bindPopupFlag = false;
|
|
81
|
+
}
|
|
82
|
+
getMap() {
|
|
83
|
+
return this.map;
|
|
84
|
+
}
|
|
85
|
+
setValues() {
|
|
86
|
+
const { latEle, lngEle, zoomEle, msgEle } = this;
|
|
87
|
+
this.lat = latEle ? Number(latEle.value) || 0 : 0;
|
|
88
|
+
this.lng = lngEle ? Number(lngEle.value) || 0 : 0;
|
|
89
|
+
this.zoom = zoomEle ? Number(zoomEle.value) || 0 : 0;
|
|
90
|
+
this.msg = msgEle ? msgEle.value : "";
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
invalidateSize() {
|
|
94
|
+
this.map.invalidateSize();
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
run() {
|
|
98
|
+
const { map, msg, marker } = this;
|
|
99
|
+
Leaflet.tileLayer(this.options.tile, {
|
|
100
|
+
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
|
101
|
+
}).addTo(map);
|
|
102
|
+
const view = marker.addTo(map);
|
|
103
|
+
if (msg) {
|
|
104
|
+
view.bindPopup(msg);
|
|
105
|
+
}
|
|
106
|
+
this.setEvent();
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
setEvent() {
|
|
110
|
+
const { map, msgEle, marker, latEle, lngEle, zoomEle, searchBtn, searchInputEle, parentForm } = this;
|
|
111
|
+
if (lngEle) {
|
|
112
|
+
["input", "change"].forEach((eventName) => {
|
|
113
|
+
const listenerName = `lng${eventName}Listener`;
|
|
114
|
+
const listener = (e) => {
|
|
115
|
+
const lng = Number(e.target.value) || 0;
|
|
116
|
+
this.updatePin({ lng });
|
|
117
|
+
};
|
|
118
|
+
this[listenerName] = listener;
|
|
119
|
+
lngEle.addEventListener(eventName, listener);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (latEle) {
|
|
123
|
+
["input", "change"].forEach((eventName) => {
|
|
124
|
+
const listenerName = `lat${eventName}Listener`;
|
|
125
|
+
const listener = (e) => {
|
|
126
|
+
const lat = Number(e.target.value) || 0;
|
|
127
|
+
this.updatePin({ lat });
|
|
128
|
+
};
|
|
129
|
+
this[listenerName] = listener;
|
|
130
|
+
latEle.addEventListener(eventName, listener);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
if (zoomEle) {
|
|
134
|
+
["input", "change"].forEach((eventName) => {
|
|
135
|
+
const listenerName = `zoom${eventName}Listener`;
|
|
136
|
+
const listener = (e) => {
|
|
137
|
+
const zoom = Number(e.target.value) || 0;
|
|
138
|
+
this.updatePin({ zoom });
|
|
139
|
+
};
|
|
140
|
+
this[listenerName] = listener;
|
|
141
|
+
zoomEle.addEventListener(eventName, listener);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (msgEle) {
|
|
145
|
+
["input", "change"].forEach((eventName) => {
|
|
146
|
+
const listenerName = `msg${eventName}Listener`;
|
|
147
|
+
const listener = (e) => {
|
|
148
|
+
const msg = e.target.value;
|
|
149
|
+
this.updatePin({ msg });
|
|
150
|
+
};
|
|
151
|
+
this[listenerName] = listener;
|
|
152
|
+
msgEle.addEventListener("input", listener);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (parentForm) {
|
|
156
|
+
parentForm.addEventListener(
|
|
157
|
+
"keypress",
|
|
158
|
+
this.formListener = (e) => {
|
|
159
|
+
if (e.target === searchInputEle && e.keyCode === 13) {
|
|
160
|
+
if (searchBtn) {
|
|
161
|
+
searchBtn.click();
|
|
162
|
+
}
|
|
163
|
+
e.preventDefault();
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
if (searchBtn && searchInputEle) {
|
|
170
|
+
searchBtn.addEventListener(
|
|
171
|
+
"click",
|
|
172
|
+
this.searchBtnListener = () => {
|
|
173
|
+
const query = searchInputEle.value;
|
|
174
|
+
provider.search({ query }).then((results) => {
|
|
175
|
+
if (results.length) {
|
|
176
|
+
const result = results[0];
|
|
177
|
+
if (latEle && lngEle) {
|
|
178
|
+
latEle.value = result.x.toString();
|
|
179
|
+
lngEle.value = result.y.toString();
|
|
180
|
+
}
|
|
181
|
+
this.updatePin({
|
|
182
|
+
lng: result.x,
|
|
183
|
+
lat: result.y
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
map.on("zoomend", () => {
|
|
191
|
+
this.updatePin({ zoom: map.getZoom() }, { disableViewUpdate: true });
|
|
192
|
+
});
|
|
193
|
+
marker.on("drag", () => {
|
|
194
|
+
const position = marker.getLatLng();
|
|
195
|
+
this.updatePin({ lat: position.lat, lng: position.lng }, { disableViewUpdate: true });
|
|
196
|
+
});
|
|
197
|
+
marker.on("dragend", () => {
|
|
198
|
+
const position = marker.getLatLng();
|
|
199
|
+
map.panTo(new Leaflet.LatLng(position.lat, position.lng));
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
updatePin(values, options = {}) {
|
|
203
|
+
const { disableViewUpdate = false } = options;
|
|
204
|
+
const { lat = this.lat, lng = this.lng, zoom = this.zoom, msg = this.msg } = values;
|
|
205
|
+
if (!disableViewUpdate) {
|
|
206
|
+
if (lat !== this.lat || lng !== this.lng || zoom !== this.zoom) {
|
|
207
|
+
this.map.setView([lat, lng], zoom);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
this.marker.setLatLng([lat, lng]);
|
|
211
|
+
this.lat = lat;
|
|
212
|
+
this.lng = lng;
|
|
213
|
+
this.zoom = zoom;
|
|
214
|
+
this.msg = msg;
|
|
215
|
+
if (this.latEle) this.latEle.value = lat.toString();
|
|
216
|
+
if (this.lngEle) this.lngEle.value = lng.toString();
|
|
217
|
+
if (this.zoomEle) this.zoomEle.value = zoom.toString();
|
|
218
|
+
if (msg) {
|
|
219
|
+
if (this.bindPopupFlag) {
|
|
220
|
+
this.marker.bindPopup(msg);
|
|
221
|
+
this.bindPopupFlag = false;
|
|
222
|
+
}
|
|
223
|
+
this.marker.setPopupContent(msg);
|
|
224
|
+
} else {
|
|
225
|
+
this.marker.closePopup();
|
|
226
|
+
this.marker.unbindPopup();
|
|
227
|
+
this.bindPopupFlag = true;
|
|
228
|
+
}
|
|
229
|
+
if (this.options.onChange) {
|
|
230
|
+
this.options.onChange({
|
|
231
|
+
lat: this.lat,
|
|
232
|
+
lng: this.lng,
|
|
233
|
+
zoom: this.zoom,
|
|
234
|
+
msg: this.msg
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
return this;
|
|
238
|
+
}
|
|
239
|
+
destroy() {
|
|
240
|
+
const { latEle, lngEle, zoomEle, msgEle, searchBtn, parentForm } = this;
|
|
241
|
+
if (latEle) {
|
|
242
|
+
latEle.removeEventListener("input", this.latinputListener);
|
|
243
|
+
latEle.removeEventListener("change", this.latchangeListener);
|
|
244
|
+
}
|
|
245
|
+
if (lngEle) {
|
|
246
|
+
lngEle.removeEventListener("input", this.lnginputListener);
|
|
247
|
+
lngEle.removeEventListener("change", this.lngchangeListener);
|
|
248
|
+
}
|
|
249
|
+
if (zoomEle) {
|
|
250
|
+
zoomEle.removeEventListener("input", this.zoominputListener);
|
|
251
|
+
zoomEle.removeEventListener("change", this.zoomchangeListener);
|
|
252
|
+
}
|
|
253
|
+
if (msgEle) {
|
|
254
|
+
msgEle.removeEventListener("input", this.msginputListener);
|
|
255
|
+
msgEle.removeEventListener("change", this.msginputListener);
|
|
256
|
+
}
|
|
257
|
+
if (searchBtn) {
|
|
258
|
+
searchBtn.removeEventListener("click", this.searchBtnListener);
|
|
259
|
+
}
|
|
260
|
+
if (parentForm) {
|
|
261
|
+
parentForm.removeEventListener("keypress", this.formListener);
|
|
262
|
+
}
|
|
263
|
+
this.map.remove();
|
|
264
|
+
this.map.off();
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
export {
|
|
269
|
+
OpenStreetMapPicker
|
|
270
|
+
};
|
|
271
|
+
//# sourceMappingURL=chunk-W7TT2YZB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/open-street-map/picker/open-street-map-picker.ts"],"sourcesContent":["import Leaflet from 'leaflet';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\nexport interface OpenStreetMapPickerOptions {\n searchInput: string;\n searchBtn: string;\n lngInput: string;\n latInput: string;\n zoomInput: string;\n msgInput: string;\n map: string;\n tile: string;\n onChange?: (values: UpdatePinValues) => void;\n}\n\nexport interface UpdatePinOptions {\n disableViewUpdate?: boolean;\n}\n\nexport interface UpdatePinValues {\n lat: number;\n lng: number;\n zoom: number;\n msg: string;\n}\n\n// setup\nconst provider = new OpenStreetMapProvider();\n\nconst defaultOptions: OpenStreetMapPickerOptions = {\n searchInput: '.js-search',\n searchBtn: '.js-search-btn',\n lngInput: '.js-lng',\n latInput: '.js-lat',\n zoomInput: '.js-zoom',\n msgInput: '.js-msg',\n map: '.js-map',\n tile: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n};\n\nexport default class OpenStreetMapPicker {\n private options!: OpenStreetMapPickerOptions;\n\n private map!: Leaflet.Map;\n\n private marker!: Leaflet.Marker;\n\n private lat: number = 0;\n\n private lng: number = 0;\n\n private zoom: number = 0;\n\n private msg: string = '';\n\n private msgEle: HTMLInputElement | null = null;\n\n private latEle: HTMLInputElement | null = null;\n\n private lngEle: HTMLInputElement | null = null;\n\n private zoomEle: HTMLInputElement | null = null;\n\n private searchInputEle: HTMLInputElement | null = null;\n\n private searchBtn: HTMLButtonElement | null = null;\n\n private parentForm: HTMLFormElement | null = null;\n\n private bindPopupFlag: boolean = false;\n\n private latinputListener!: (e: Event) => void;\n\n private latchangeListener!: (e: Event) => void;\n\n private lnginputListener!: (e: Event) => void;\n\n private lngchangeListener!: (e: Event) => void;\n\n private zoominputListener!: (e: Event) => void;\n\n private zoomchangeListener!: (e: Event) => void;\n\n private msginputListener!: (e: Event) => void;\n\n private formListener!: (e: KeyboardEvent) => void;\n\n private searchBtnListener!: () => void;\n\n constructor(elementOrSelector: string | HTMLElement, options?: Partial<OpenStreetMapPickerOptions>) {\n const opt = { ...defaultOptions, ...options };\n const element =\n typeof elementOrSelector === 'string'\n ? (document.querySelector(elementOrSelector) as HTMLElement | null)\n : elementOrSelector;\n if (!element) {\n throw new Error('Element not found');\n }\n const mapEle = element.querySelector<HTMLElement>(opt.map);\n if (!mapEle) {\n throw new Error('Map element not found');\n }\n const lngEle = element.querySelector<HTMLInputElement>(opt.lngInput);\n const latEle = element.querySelector<HTMLInputElement>(opt.latInput);\n const zoomEle = element.querySelector<HTMLInputElement>(opt.zoomInput);\n const searchInputEle = element.querySelector<HTMLInputElement>(opt.searchInput);\n const searchBtn = element.querySelector<HTMLButtonElement>(opt.searchBtn);\n const msgEle = element.querySelector<HTMLInputElement>(opt.msgInput);\n const lat = latEle ? Number(latEle.value) || 0 : 0;\n const lng = lngEle ? Number(lngEle.value) || 0 : 0;\n const zoom = zoomEle ? Number(zoomEle.value) || 0 : 0;\n const msg = msgEle ? msgEle.value : '';\n const map = Leaflet.map(mapEle).setView([lat, lng], zoom);\n const marker = Leaflet.marker(map.getCenter(), {\n draggable: true,\n });\n if (searchInputEle) {\n this.parentForm = searchInputEle.closest('form');\n }\n this.options = opt;\n this.map = map;\n this.marker = marker;\n this.lat = lat;\n this.lng = lng;\n this.zoom = zoom;\n this.msg = msg;\n this.msgEle = msgEle;\n this.latEle = latEle;\n this.lngEle = lngEle;\n this.zoomEle = zoomEle;\n this.searchInputEle = searchInputEle;\n this.searchBtn = searchBtn;\n this.bindPopupFlag = false;\n }\n\n getMap(): Leaflet.Map {\n return this.map;\n }\n\n setValues(): OpenStreetMapPicker {\n const { latEle, lngEle, zoomEle, msgEle } = this;\n this.lat = latEle ? Number(latEle.value) || 0 : 0;\n this.lng = lngEle ? Number(lngEle.value) || 0 : 0;\n this.zoom = zoomEle ? Number(zoomEle.value) || 0 : 0;\n this.msg = msgEle ? msgEle.value : '';\n return this;\n }\n\n invalidateSize(): OpenStreetMapPicker {\n this.map.invalidateSize();\n return this;\n }\n\n run(): OpenStreetMapPicker {\n const { map, msg, marker } = this;\n Leaflet.tileLayer(this.options.tile, {\n attribution: '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n }).addTo(map);\n\n const view = marker.addTo(map);\n if (msg) {\n view.bindPopup(msg);\n }\n this.setEvent();\n return this;\n }\n\n setEvent(): void {\n const { map, msgEle, marker, latEle, lngEle, zoomEle, searchBtn, searchInputEle, parentForm } = this;\n\n if (lngEle) {\n ['input', 'change'].forEach((eventName) => {\n const listenerName = `lng${eventName}Listener` as keyof OpenStreetMapPicker;\n const listener = (e: Event) => {\n const lng = Number((e.target as HTMLInputElement).value) || 0;\n this.updatePin({ lng });\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this[listenerName] as any) = listener;\n lngEle.addEventListener(eventName, listener);\n });\n }\n\n if (latEle) {\n ['input', 'change'].forEach((eventName) => {\n const listenerName = `lat${eventName}Listener` as keyof OpenStreetMapPicker;\n const listener = (e: Event) => {\n const lat = Number((e.target as HTMLInputElement).value) || 0;\n this.updatePin({ lat });\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this[listenerName] as any) = listener;\n latEle.addEventListener(eventName, listener);\n });\n }\n\n if (zoomEle) {\n ['input', 'change'].forEach((eventName) => {\n const listenerName = `zoom${eventName}Listener` as keyof OpenStreetMapPicker;\n const listener = (e: Event) => {\n const zoom = Number((e.target as HTMLInputElement).value) || 0;\n this.updatePin({ zoom });\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this[listenerName] as any) = listener;\n zoomEle.addEventListener(eventName, listener);\n });\n }\n\n if (msgEle) {\n ['input', 'change'].forEach((eventName) => {\n const listenerName = `msg${eventName}Listener` as keyof OpenStreetMapPicker;\n const listener = (e: Event) => {\n const msg = (e.target as HTMLInputElement).value;\n this.updatePin({ msg });\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this[listenerName] as any) = listener;\n msgEle.addEventListener('input', listener);\n });\n }\n\n if (parentForm) {\n parentForm.addEventListener(\n 'keypress',\n (this.formListener = (e: KeyboardEvent) => {\n if (e.target === searchInputEle && e.keyCode === 13) {\n if (searchBtn) {\n searchBtn.click();\n }\n e.preventDefault();\n return false;\n }\n })\n );\n }\n\n if (searchBtn && searchInputEle) {\n searchBtn.addEventListener(\n 'click',\n (this.searchBtnListener = () => {\n const query = searchInputEle.value;\n provider.search({ query }).then((results) => {\n if (results.length) {\n const result = results[0];\n if (latEle && lngEle) {\n latEle.value = result.x.toString();\n lngEle.value = result.y.toString();\n }\n this.updatePin({\n lng: result.x,\n lat: result.y,\n });\n }\n });\n })\n );\n }\n\n map.on('zoomend', () => {\n this.updatePin({ zoom: map.getZoom() }, { disableViewUpdate: true });\n });\n\n marker.on('drag', () => {\n const position = marker.getLatLng();\n this.updatePin({ lat: position.lat, lng: position.lng }, { disableViewUpdate: true });\n });\n\n marker.on('dragend', () => {\n const position = marker.getLatLng();\n map.panTo(new Leaflet.LatLng(position.lat, position.lng));\n });\n }\n\n updatePin(values: Partial<UpdatePinValues>, options: UpdatePinOptions = {}): OpenStreetMapPicker {\n const { disableViewUpdate = false } = options;\n const { lat = this.lat, lng = this.lng, zoom = this.zoom, msg = this.msg } = values;\n\n if (!disableViewUpdate) {\n if (lat !== this.lat || lng !== this.lng || zoom !== this.zoom) {\n this.map.setView([lat, lng], zoom);\n }\n }\n this.marker.setLatLng([lat, lng]);\n this.lat = lat;\n this.lng = lng;\n this.zoom = zoom;\n this.msg = msg;\n if (this.latEle) this.latEle.value = lat.toString();\n if (this.lngEle) this.lngEle.value = lng.toString();\n if (this.zoomEle) this.zoomEle.value = zoom.toString();\n if (msg) {\n if (this.bindPopupFlag) {\n this.marker.bindPopup(msg);\n this.bindPopupFlag = false;\n }\n this.marker.setPopupContent(msg);\n } else {\n this.marker.closePopup();\n this.marker.unbindPopup();\n this.bindPopupFlag = true;\n }\n\n if (this.options.onChange) {\n this.options.onChange({\n lat: this.lat,\n lng: this.lng,\n zoom: this.zoom,\n msg: this.msg,\n });\n }\n\n return this;\n }\n\n destroy(): void {\n const { latEle, lngEle, zoomEle, msgEle, searchBtn, parentForm } = this;\n if (latEle) {\n latEle.removeEventListener('input', this.latinputListener);\n latEle.removeEventListener('change', this.latchangeListener);\n }\n\n if (lngEle) {\n lngEle.removeEventListener('input', this.lnginputListener);\n lngEle.removeEventListener('change', this.lngchangeListener);\n }\n\n if (zoomEle) {\n zoomEle.removeEventListener('input', this.zoominputListener);\n zoomEle.removeEventListener('change', this.zoomchangeListener);\n }\n\n if (msgEle) {\n msgEle.removeEventListener('input', this.msginputListener);\n msgEle.removeEventListener('change', this.msginputListener);\n }\n\n if (searchBtn) {\n searchBtn.removeEventListener('click', this.searchBtnListener);\n }\n\n if (parentForm) {\n parentForm.removeEventListener('keypress', this.formListener);\n }\n\n this.map.remove();\n this.map.off();\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// src/google-maps/loader.ts
|
|
2
|
+
import { Loader } from "google-maps";
|
|
3
|
+
var googlePromise;
|
|
4
|
+
var getDefaultOptions = () => ({
|
|
5
|
+
region: ACMS.Config.s2dRegion || "JP"
|
|
6
|
+
});
|
|
7
|
+
var loadGoogleMap = (apiKey, options = {}) => {
|
|
8
|
+
if (googlePromise) {
|
|
9
|
+
return googlePromise;
|
|
10
|
+
}
|
|
11
|
+
const loader = new Loader(apiKey, { ...getDefaultOptions(), ...options });
|
|
12
|
+
googlePromise = loader.load();
|
|
13
|
+
return googlePromise;
|
|
14
|
+
};
|
|
15
|
+
var loader_default = loadGoogleMap;
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
loader_default
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=chunk-ZPZHEKTI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/google-maps/loader.ts"],"sourcesContent":["import { type google, Loader, type LoaderOptions } from 'google-maps';\n\nlet googlePromise: Promise<google> | undefined;\n\n// モジュール読み込み時ではなく loadGoogleMap 呼び出し時に評価する。\n// トップレベルで ACMS.Config を読むと、window.ACMS.Config が用意される前にこのモジュールが\n// import された環境(Storybook 等)で `Cannot read properties of undefined` になる。\nconst getDefaultOptions = (): LoaderOptions => ({\n region: ACMS.Config.s2dRegion || 'JP',\n});\n\n/**\n * Google Maps APIを読み込む\n * @param {string} apiKey\n * @param {LoaderOptions} options\n * @return {Promise<google>}\n */\nconst loadGoogleMap = (apiKey: string, options: LoaderOptions = {}) => {\n if (googlePromise) {\n return googlePromise;\n }\n\n const loader = new Loader(apiKey, { ...getDefaultOptions(), ...options });\n googlePromise = loader.load();\n return googlePromise;\n};\n\nexport default loadGoogleMap;\n"],"mappings":";AAAA,SAAsB,cAAkC;AAExD,IAAI;AAKJ,IAAM,oBAAoB,OAAsB;AAAA,EAC9C,QAAQ,KAAK,OAAO,aAAa;AACnC;AAQA,IAAM,gBAAgB,CAAC,QAAgB,UAAyB,CAAC,MAAM;AACrE,MAAI,eAAe;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,IAAI,OAAO,QAAQ,EAAE,GAAG,kBAAkB,GAAG,GAAG,QAAQ,CAAC;AACxE,kBAAgB,OAAO,KAAK;AAC5B,SAAO;AACT;AAEA,IAAO,iBAAQ;","names":[]}
|
package/dist/command.mjs
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/command.ts
|
|
2
|
+
var isMac = typeof window !== "undefined" ? navigator.platform.toUpperCase().indexOf("MAC") >= 0 : false;
|
|
3
|
+
var commandList = [
|
|
4
|
+
{
|
|
5
|
+
id: "Mod",
|
|
6
|
+
command: isMac ? "\u2318" : "Ctrl",
|
|
7
|
+
label: isMac ? "Command" : "Ctrl"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "Shift",
|
|
11
|
+
command: "\u21E7",
|
|
12
|
+
label: "Shift"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: "Alt",
|
|
16
|
+
command: isMac ? "\u2325" : "Alt",
|
|
17
|
+
label: isMac ? "Option" : "Alt"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: "Backspace",
|
|
21
|
+
command: "\u232B",
|
|
22
|
+
label: "Backspace"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "Enter",
|
|
26
|
+
command: "\u21B5",
|
|
27
|
+
label: "Enter"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "Tab",
|
|
31
|
+
command: "\u21E5",
|
|
32
|
+
label: "Tab"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "Space",
|
|
36
|
+
command: "\u2423",
|
|
37
|
+
label: "Space"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "ArrowUp",
|
|
41
|
+
command: "\u2191",
|
|
42
|
+
label: "Up"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: "ArrowDown",
|
|
46
|
+
command: "\u2193",
|
|
47
|
+
label: "Down"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "ArrowLeft",
|
|
51
|
+
command: "\u2190",
|
|
52
|
+
label: "Left"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "ArrowRight",
|
|
56
|
+
command: "\u2192",
|
|
57
|
+
label: "Right"
|
|
58
|
+
}
|
|
59
|
+
];
|
|
60
|
+
export {
|
|
61
|
+
commandList
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/command.ts"],"sourcesContent":["const isMac = typeof window !== 'undefined' ? navigator.platform.toUpperCase().indexOf('MAC') >= 0 : false;\n\nexport const commandList = [\n {\n id: 'Mod',\n command: isMac ? '⌘' : 'Ctrl',\n label: isMac ? 'Command' : 'Ctrl',\n },\n {\n id: 'Shift',\n command: '⇧',\n label: 'Shift',\n },\n {\n id: 'Alt',\n command: isMac ? '⌥' : 'Alt',\n label: isMac ? 'Option' : 'Alt',\n },\n {\n id: 'Backspace',\n command: '⌫',\n label: 'Backspace',\n },\n {\n id: 'Enter',\n command: '↵',\n label: 'Enter',\n },\n {\n id: 'Tab',\n command: '⇥',\n label: 'Tab',\n },\n {\n id: 'Space',\n command: '␣',\n label: 'Space',\n },\n {\n id: 'ArrowUp',\n command: '↑',\n label: 'Up',\n },\n {\n id: 'ArrowDown',\n command: '↓',\n label: 'Down',\n },\n {\n id: 'ArrowLeft',\n command: '←',\n label: 'Left',\n },\n {\n id: 'ArrowRight',\n command: '→',\n label: 'Right',\n },\n];\n"],"mappings":";AAAA,IAAM,QAAQ,OAAO,WAAW,cAAc,UAAU,SAAS,YAAY,EAAE,QAAQ,KAAK,KAAK,IAAI;AAE9F,IAAM,cAAc;AAAA,EACzB;AAAA,IACE,IAAI;AAAA,IACJ,SAAS,QAAQ,WAAM;AAAA,IACvB,OAAO,QAAQ,YAAY;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS,QAAQ,WAAM;AAAA,IACvB,OAAO,QAAQ,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function createPdf(file: File | Blob, page?: number): Promise<string>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/create-pdf.ts
|
|
2
|
+
function createPdf(file, page = 1) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const reader = new FileReader();
|
|
5
|
+
reader.onload = (event) => {
|
|
6
|
+
import(
|
|
7
|
+
/* webpackChunkName: "pdf2image" */
|
|
8
|
+
"@ablogcms/lib/pdf2image"
|
|
9
|
+
).then(async ({ default: Pdf2Image }) => {
|
|
10
|
+
if (!(event.target?.result instanceof ArrayBuffer)) {
|
|
11
|
+
resolve("");
|
|
12
|
+
}
|
|
13
|
+
const pdf2Image = new Pdf2Image(new Uint8Array(event.target?.result));
|
|
14
|
+
pdf2Image.getPageImage(page).then((image) => {
|
|
15
|
+
resolve(image);
|
|
16
|
+
}).catch((reason) => {
|
|
17
|
+
reject(new Error(reason));
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
reader.readAsArrayBuffer(file);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
createPdf as default
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=create-pdf.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/create-pdf.ts"],"sourcesContent":["export default function createPdf(file: File | Blob, page = 1): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n import(/* webpackChunkName: \"pdf2image\" */ '@ablogcms/lib/pdf2image').then(async ({ default: Pdf2Image }) => {\n if (!(event.target?.result instanceof ArrayBuffer)) {\n resolve('');\n }\n const pdf2Image = new Pdf2Image(new Uint8Array(event.target?.result as ArrayBuffer));\n pdf2Image\n .getPageImage(page)\n .then((image) => {\n resolve(image as string);\n })\n .catch((reason) => {\n reject(new Error(reason));\n });\n });\n };\n reader.readAsArrayBuffer(file);\n });\n}\n"],"mappings":";AAAe,SAAR,UAA2B,MAAmB,OAAO,GAAoB;AAC9E,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,IAAI,WAAW;AAC9B,WAAO,SAAS,CAAC,UAAU;AACzB;AAAA;AAAA,QAA2C;AAAA,MAAyB,EAAE,KAAK,OAAO,EAAE,SAAS,UAAU,MAAM;AAC3G,YAAI,EAAE,MAAM,QAAQ,kBAAkB,cAAc;AAClD,kBAAQ,EAAE;AAAA,QACZ;AACA,cAAM,YAAY,IAAI,UAAU,IAAI,WAAW,MAAM,QAAQ,MAAqB,CAAC;AACnF,kBACG,aAAa,IAAI,EACjB,KAAK,CAAC,UAAU;AACf,kBAAQ,KAAe;AAAA,QACzB,CAAC,EACA,MAAM,CAAC,WAAW;AACjB,iBAAO,IAAI,MAAM,MAAM,CAAC;AAAA,QAC1B,CAAC;AAAA,MACL,CAAC;AAAA,IACH;AACA,WAAO,kBAAkB,IAAI;AAAA,EAC/B,CAAC;AACH;","names":[]}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 管理画面コア(レガシー `ACMS.dispatchEvent` 経由で発火される既存イベント)の型付き版を
|
|
3
|
+
* `AcmsEventMap`(`@ablogcms/events`)へ登録する module augmentation。
|
|
4
|
+
*
|
|
5
|
+
* レガシーイベントとの併走(二重発火)方針(`docs/steering/20260731-js-extension-points/plan.html`
|
|
6
|
+
* 「設計判断: レガシーイベントとの併走方針」参照)に基づき、発火箇所には新バス発火とレガシー発火を
|
|
7
|
+
* 並記する。ここは型のみを供給し、ランタイムの副作用は持たない。
|
|
8
|
+
*
|
|
9
|
+
* Why not(アプリ側の ablogcms 配下に置かない理由): 実測で、アプリ側(ablogcms 配下)のファイルから
|
|
10
|
+
* `declare module '@ablogcms/events'` で `AcmsEventMap` を拡張すると、packages/frontend 配下の
|
|
11
|
+
* media パッケージ等、他パッケージ側の `AcmsEventOf<K>` 解決が `AcmsLooseEvent` に落ちる
|
|
12
|
+
* (`gateResult.event.formData` が `unknown` になる等)ビルド不整合が発生した。コメント記法や型の
|
|
13
|
+
* 複雑さとは無関係に、単一の空エントリでも再現することを確認済み(entry/module のライフサイクル
|
|
14
|
+
* イベント追加時に再確認。詳細は `packages/frontend/plugins/src/events.ts` のコメント参照)。
|
|
15
|
+
* packages/frontend 配下の各パッケージ(例: unit-editor パッケージの `events.ts`)からの同種の拡張では
|
|
16
|
+
* この問題が起きないため、原因は tsconfig の include(アプリ側ディレクトリと packages/frontend 配下を
|
|
17
|
+
* 別枠で列挙している点)に起因するある種の型解決の非対称と推測されるが、根本原因の特定には至っていない。
|
|
18
|
+
* 実務上の回避策として、この種の宣言は既存の各パッケージの events.ts と同じ「パッケージ配下」に
|
|
19
|
+
* 統一して置く。
|
|
20
|
+
*/
|
|
21
|
+
import type { AcmsGateEvent, AcmsNotifyEvent } from '@ablogcms/events';
|
|
22
|
+
import type { ValidationResult } from '@ablogcms/validator/types';
|
|
23
|
+
declare module '@ablogcms/events' {
|
|
24
|
+
interface AcmsEventMap {
|
|
25
|
+
/**
|
|
26
|
+
* レガシー `acmsReady`(`ACMS.Ready(listener)`)の型付き版。`ablogcms/js/src/index.js` の
|
|
27
|
+
* 初期化完了時に発火する、アプリ全体の起動完了通知。
|
|
28
|
+
*
|
|
29
|
+
* 対応する `.before` ゲートを持たない一度きりの起動通知のため `.ready` フェーズを使う。
|
|
30
|
+
* 通常の `on()` は「発火後の購読には過去の発火を再生しない」設計だが、この種のイベントは
|
|
31
|
+
* 逆に「後から購読しても取りこぼさない」契約が必須(`ACMS.Ready` は発火タイミングに関わらず
|
|
32
|
+
* プラグイン・テーマから呼ばれる公開 API のため)。そのため直接この名前を `on()` で購読
|
|
33
|
+
* するのではなく、必ず `ACMS.Ready(listener)` 経由で使うこと。`ACMS.Ready` 自身
|
|
34
|
+
* (`ablogcms/acms.js`)は `ACMS.readyState`(`document.readyState` と同じ発想の
|
|
35
|
+
* プレーンなプロパティ)を先に見て、`'complete'` なら即時実行、そうでなければこのイベントを
|
|
36
|
+
* 購読する形で「取りこぼさない」を実現している。
|
|
37
|
+
*/
|
|
38
|
+
'acms.state.ready': AcmsNotifyEvent<Record<string, never>>;
|
|
39
|
+
/**
|
|
40
|
+
* レガシー `acmsAdminReady`(`ablogcms/js/src/admin.js`)の型付き版。管理画面(`ACMS.Ready`
|
|
41
|
+
* コールバック内の一連の初期化)の完了通知。`ACMS.adminReadyState` が `'complete'` かどうかを先に見てから
|
|
42
|
+
* 購読すること(直接 `on()` しない)。
|
|
43
|
+
*/
|
|
44
|
+
'acms.state.admin-ready': AcmsNotifyEvent<Record<string, never>>;
|
|
45
|
+
/**
|
|
46
|
+
* レガシー `${name}Ready`(動的名。`packages/frontend/lib/src/loader/loader.js` の
|
|
47
|
+
* `loadClosureFactory`)の型付き版。`name` はロードした遅延スクリプトの名前
|
|
48
|
+
* (例: `edit` / `dialog`。URL からファイル名部分を抽出したもの)。動的名は
|
|
49
|
+
* `AcmsEventMap` に型登録できないため、固定名+`name` payload に寄せている
|
|
50
|
+
* (HOOKS.md「起動系イベント」参照)。`name` ごとに一度きりの起動通知だが、`acms.state.ready`
|
|
51
|
+
* のような単一の `readyState` プロパティでは複数の `name` を表現できないため再生機構は持たない。
|
|
52
|
+
* 後から購読する場合は取りこぼしうる点に注意すること。
|
|
53
|
+
*/
|
|
54
|
+
'loader.script.ready': AcmsNotifyEvent<{
|
|
55
|
+
name: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* レガシー `acmsDispatch`(`ablogcms/js/dispatch.js` 末尾)の型付き版。`ACMS.Dispatch(context)`
|
|
59
|
+
* の処理完了通知。管理画面・公開側どちらのページでも `ACMS.Dispatch()` が呼ばれるたびに
|
|
60
|
+
* (モーダル/ダイアログ/インライン編集/postinclude 等で動的コンテンツが追加される都度)
|
|
61
|
+
* 繰り返し発火する通常の通知のため `.after` フェーズを使う(起動系の `.ready` とは異なり
|
|
62
|
+
* 再生されない)。`admin/preview/share.html` 等、後から購読する側は購読タイミングに注意すること。
|
|
63
|
+
*/
|
|
64
|
+
'acms.dispatch.after': AcmsNotifyEvent<Record<string, never>>;
|
|
65
|
+
/**
|
|
66
|
+
* レガシー `acmsAdminDelayedContents` の型付き版。タブ表示・ダイアログ開・カスタムフィールド
|
|
67
|
+
* グループ追加時に、遅延コンテンツの初期化をやり直すための中継通知。
|
|
68
|
+
* 発火元は `ablogcms/js/src/admin.js` の中継ブロック(4 箇所)。
|
|
69
|
+
*/
|
|
70
|
+
'admin.delayed-contents.change': AcmsNotifyEvent<{
|
|
71
|
+
target: EventTarget;
|
|
72
|
+
detail: unknown;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* レガシー `acmsCustomFieldMakerPreview` の型付き版。custom-field-maker(npm 依存)側の
|
|
76
|
+
* プレビュー再描画通知。発火元は `ablogcms/js/src/admin.js` の中継ブロック(1 箇所)。
|
|
77
|
+
* custom-field-maker 自体が将来 `window.ACMS.events.emit('custom-field-maker.preview.after', ...)`
|
|
78
|
+
* を直接呼ぶようになれば中継ブロックは不要になる。
|
|
79
|
+
*/
|
|
80
|
+
'custom-field-maker.preview.after': AcmsNotifyEvent<{
|
|
81
|
+
element: HTMLElement;
|
|
82
|
+
}>;
|
|
83
|
+
/** レガシー `acmsDialogOpened` の型付き版。ダイアログ(モーダル/ドロワー含む)が開いた通知 */
|
|
84
|
+
'dialog.open.after': AcmsNotifyEvent<{
|
|
85
|
+
element: HTMLElement;
|
|
86
|
+
}>;
|
|
87
|
+
/** レガシー `acmsAddCustomFieldGroup` の型付き版。カスタムフィールドグループの行が追加された通知 */
|
|
88
|
+
'field-group.add.after': AcmsNotifyEvent<{
|
|
89
|
+
element: HTMLElement;
|
|
90
|
+
}>;
|
|
91
|
+
/** レガシー `acmsAdminSelectTab` の型付き版。タブ選択セレクトでタブが選択された通知 */
|
|
92
|
+
'tab.select.change': AcmsNotifyEvent<{
|
|
93
|
+
tab: HTMLElement;
|
|
94
|
+
}>;
|
|
95
|
+
/** レガシー `acmsAdminShowTabPanel` の型付き版。タブパネルが表示された通知(対応する panel が無いタブの場合 `panel` は null) */
|
|
96
|
+
'tab.show.after': AcmsNotifyEvent<{
|
|
97
|
+
tab: HTMLElement;
|
|
98
|
+
panel: HTMLElement | null;
|
|
99
|
+
}>;
|
|
100
|
+
/** レガシー `acmsAdminHideTabPanel` の型付き版。タブパネルが非表示になった通知(対応する panel が無いタブの場合 `panel` は null) */
|
|
101
|
+
'tab.hide.after': AcmsNotifyEvent<{
|
|
102
|
+
tab: HTMLElement;
|
|
103
|
+
panel: HTMLElement | null;
|
|
104
|
+
}>;
|
|
105
|
+
/** レガシー `onGeoInfoAdded` の型付き版。地図ピッカーで位置情報が追加された通知 */
|
|
106
|
+
'geo.info-add.after': AcmsNotifyEvent<{
|
|
107
|
+
element: HTMLElement;
|
|
108
|
+
}>;
|
|
109
|
+
/**
|
|
110
|
+
* レガシー `acmsLazyLoaded` の型付き版。遅延読み込み対象要素の読み込み完了通知。
|
|
111
|
+
* 発火元は `ablogcms/js/config.js` の `lazyLoadConfig.loaded`。
|
|
112
|
+
*/
|
|
113
|
+
'lazy-load.load.after': AcmsNotifyEvent<{
|
|
114
|
+
element: HTMLElement;
|
|
115
|
+
}>;
|
|
116
|
+
/**
|
|
117
|
+
* レガシー `acmsFormInvalid` の型付き版。標準バリデーション(`ACMS.Config.validatorOptions`)で
|
|
118
|
+
* 入力要素が不正と判定された通知。発火元は `ablogcms/js/config.js` の `onInvalid`。
|
|
119
|
+
*/
|
|
120
|
+
'validator.invalid.after': AcmsNotifyEvent<{
|
|
121
|
+
results: ValidationResult[];
|
|
122
|
+
element: HTMLElement;
|
|
123
|
+
}>;
|
|
124
|
+
/** レガシー `acmsFormValid` の型付き版。同上の `onValid`(入力要素が有効と判定された通知) */
|
|
125
|
+
'validator.valid.after': AcmsNotifyEvent<{
|
|
126
|
+
results: ValidationResult[];
|
|
127
|
+
element: HTMLElement;
|
|
128
|
+
}>;
|
|
129
|
+
/** レガシー `acmsFormValidated` の型付き版。同上の `onValidated`(入力要素の検証が完了した通知) */
|
|
130
|
+
'validator.validated.after': AcmsNotifyEvent<{
|
|
131
|
+
results: ValidationResult[];
|
|
132
|
+
element: HTMLElement;
|
|
133
|
+
}>;
|
|
134
|
+
/**
|
|
135
|
+
* レガシー `acmsValidateFailed` の型付き版。フォーム submit 時のバリデーション失敗通知。
|
|
136
|
+
* 発火元は `ablogcms/js/config.js` の `onSubmitFailed`。
|
|
137
|
+
*/
|
|
138
|
+
'validator.submit-fail.after': AcmsNotifyEvent<{
|
|
139
|
+
results: ValidationResult[];
|
|
140
|
+
form: HTMLFormElement;
|
|
141
|
+
}>;
|
|
142
|
+
/**
|
|
143
|
+
* レガシー `acmsInplaceDialogOpen` の型付き版。インライン編集ダイアログが開いた通知。
|
|
144
|
+
* 発火元は `ablogcms/js/dispatch/edit/_inplace.js`(レガシー jQuery 領域)。
|
|
145
|
+
*/
|
|
146
|
+
'unit-editor.inplace-dialog-open.after': AcmsNotifyEvent<{
|
|
147
|
+
element: HTMLElement;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* DOM CustomEvent `acms.category.change` の型付き版。カテゴリー選択変更の通知。
|
|
151
|
+
* レガシー側は DOM バブリングで「同じフォーム内の」購読側だけが反応する設計だが、
|
|
152
|
+
* バス化すると全インスタンスに届くため、購読側は `target`(発火元要素)でフィルタすること。
|
|
153
|
+
*/
|
|
154
|
+
'category.select.change': AcmsNotifyEvent<{
|
|
155
|
+
target: HTMLElement;
|
|
156
|
+
}>;
|
|
157
|
+
/** DOM CustomEvent `acms.sub-category.change` の型付き版。同上の target フィルタ注意 */
|
|
158
|
+
'sub-category.select.change': AcmsNotifyEvent<{
|
|
159
|
+
target: HTMLElement;
|
|
160
|
+
}>;
|
|
161
|
+
/** DOM CustomEvent `acms.tag.change` の型付き版。同上の target フィルタ注意 */
|
|
162
|
+
'tag.select.change': AcmsNotifyEvent<{
|
|
163
|
+
target: HTMLElement;
|
|
164
|
+
}>;
|
|
165
|
+
/**
|
|
166
|
+
* DOM CustomEvent `acms.related-entry.change` の型付き版。同上の target フィルタ注意。
|
|
167
|
+
* `entries` の実体は `related-entry` feature(アプリ側)の `RelatedEntryType[]`。パッケージ間の
|
|
168
|
+
* 型参照制約のため、ここでは緩い型(`unknown[]`)で宣言する。
|
|
169
|
+
*/
|
|
170
|
+
'related-entry.select.change': AcmsNotifyEvent<{
|
|
171
|
+
target: HTMLElement;
|
|
172
|
+
entries: unknown[];
|
|
173
|
+
type: string;
|
|
174
|
+
title: string;
|
|
175
|
+
moduleId: string;
|
|
176
|
+
ctx: string;
|
|
177
|
+
maxItem: number;
|
|
178
|
+
}>;
|
|
179
|
+
/**
|
|
180
|
+
* DOM CustomEvent `acms.set-main-image` の型付き版。メイン画像設定の連携。
|
|
181
|
+
* レガシー側は bubbles なしで特定 input 要素に発火するため、`target` を含める。
|
|
182
|
+
* `mediaId` は ProseMirror ノード属性(`data-mid`)由来で、文字列として保存されている
|
|
183
|
+
* 場合があるため `number | string | null` として扱う(`ImageBlock.ts` のコメント参照)。
|
|
184
|
+
*/
|
|
185
|
+
'entry.main-image.change': AcmsNotifyEvent<{
|
|
186
|
+
target: HTMLElement;
|
|
187
|
+
mediaId: number | string | null;
|
|
188
|
+
thumbnail: string;
|
|
189
|
+
}>;
|
|
190
|
+
/**
|
|
191
|
+
* プレビュー共有 URL 発行実行直前のゲート。`use-share-preview.ts`。
|
|
192
|
+
* `formData` を差し替えて return すると実際に送信される内容を変えられる
|
|
193
|
+
*/
|
|
194
|
+
'preview.share.before': AcmsGateEvent<{
|
|
195
|
+
formData: FormData;
|
|
196
|
+
}>;
|
|
197
|
+
/** 上記の実行成功後の通知 */
|
|
198
|
+
'preview.share.success': AcmsNotifyEvent<{
|
|
199
|
+
shareUrl: string;
|
|
200
|
+
}>;
|
|
201
|
+
/** プレビューモードの有効/無効切替の通知。`use-preview-mode.ts` */
|
|
202
|
+
'preview.mode.change': AcmsNotifyEvent<{
|
|
203
|
+
enabled: boolean;
|
|
204
|
+
}>;
|
|
205
|
+
/** タイムマシンモードの有効/無効切替の通知。`timemachine-modal.tsx`。preview 側と同型の横展開 */
|
|
206
|
+
'timemachine.mode.change': AcmsNotifyEvent<{
|
|
207
|
+
enabled: boolean;
|
|
208
|
+
}>;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import flatPicker from 'flatpickr';
|
|
2
|
+
import 'flatpickr/dist/l10n/ja';
|
|
3
|
+
|
|
4
|
+
export default function setupDatePicker(element: HTMLInputElement & {
|
|
5
|
+
flatPicker?: flatPicker.Instance;
|
|
6
|
+
}, options?: flatPicker.Options.Options): import("flatpickr/dist/types/instance").Instance;
|