@ablogcms/media 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 (69) hide show
  1. package/README.md +28 -0
  2. package/dist/acms.d.ts +10 -0
  3. package/dist/acms.mjs +1 -0
  4. package/dist/acms.mjs.map +1 -0
  5. package/dist/chunk-32U7ADG2.mjs +456 -0
  6. package/dist/chunk-32U7ADG2.mjs.map +1 -0
  7. package/dist/chunk-3SYVRD3N.mjs +37 -0
  8. package/dist/chunk-3SYVRD3N.mjs.map +1 -0
  9. package/dist/chunk-5P6HFS6L.mjs +90 -0
  10. package/dist/chunk-5P6HFS6L.mjs.map +1 -0
  11. package/dist/chunk-J5LGTIGS.mjs +10 -0
  12. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  13. package/dist/chunk-JJTHI4QP.mjs +1783 -0
  14. package/dist/chunk-JJTHI4QP.mjs.map +1 -0
  15. package/dist/chunk-KQNVYJOK.mjs +1814 -0
  16. package/dist/chunk-KQNVYJOK.mjs.map +1 -0
  17. package/dist/chunk-LAZAMWG6.mjs +231 -0
  18. package/dist/chunk-LAZAMWG6.mjs.map +1 -0
  19. package/dist/components/media-admin/media-admin-view.d.ts +22 -0
  20. package/dist/components/media-admin/media-admin.d.ts +6 -0
  21. package/dist/components/media-admin/media-admin.mjs +148 -0
  22. package/dist/components/media-admin/media-admin.mjs.map +1 -0
  23. package/dist/components/media-droparea/media-droparea.d.ts +63 -0
  24. package/dist/components/media-droparea/media-droparea.mjs +152 -0
  25. package/dist/components/media-droparea/media-droparea.mjs.map +1 -0
  26. package/dist/components/media-edit-modal/media-edit-modal.d.ts +58 -0
  27. package/dist/components/media-insert/media-insert-modal.d.ts +30 -0
  28. package/dist/components/media-insert/media-insert.d.ts +5 -0
  29. package/dist/components/media-insert/media-insert.mjs +11 -0
  30. package/dist/components/media-insert/media-insert.mjs.map +1 -0
  31. package/dist/components/media-list/media-list.d.ts +125 -0
  32. package/dist/components/media-modal/media-modal.d.ts +94 -0
  33. package/dist/components/media-modal/pdf-previewer.d.ts +8 -0
  34. package/dist/components/media-unit/media-unit.d.ts +65 -0
  35. package/dist/components/media-unit/media-unit.mjs +13 -0
  36. package/dist/components/media-unit/media-unit.mjs.map +1 -0
  37. package/dist/components/media-update/media-update-modal.d.ts +12 -0
  38. package/dist/components/media-update/media-update.d.ts +5 -0
  39. package/dist/components/media-update/media-update.mjs +10 -0
  40. package/dist/components/media-update/media-update.mjs.map +1 -0
  41. package/dist/components/media-uploader/media-uploader.d.ts +69 -0
  42. package/dist/constants/index.d.ts +19 -0
  43. package/dist/containers/media-admin.d.ts +10 -0
  44. package/dist/containers/media-insert.d.ts +17 -0
  45. package/dist/containers/media-update.d.ts +13 -0
  46. package/dist/dataview/column-type.d.ts +10 -0
  47. package/dist/dataview/column-type.mjs +75 -0
  48. package/dist/dataview/column-type.mjs.map +1 -0
  49. package/dist/events.d.ts +70 -0
  50. package/dist/media-crop-focal-OQHAYXEP.svg +1 -0
  51. package/dist/media-crop-icon-LD2QEJHL.svg +12 -0
  52. package/dist/media-focal-point-OQQ3MQM2.svg +3 -0
  53. package/dist/media-rotate-icon-HBMXAPD4.svg +7 -0
  54. package/dist/runtime.d.ts +20 -0
  55. package/dist/runtime.mjs +16 -0
  56. package/dist/runtime.mjs.map +1 -0
  57. package/dist/setup-media-unit.d.ts +2 -0
  58. package/dist/setup-media-unit.mjs +118 -0
  59. package/dist/setup-media-unit.mjs.map +1 -0
  60. package/dist/stores/actions.d.ts +64 -0
  61. package/dist/stores/reducer.d.ts +5 -0
  62. package/dist/stores/saga.d.ts +35 -0
  63. package/dist/types/config.d.ts +29 -0
  64. package/dist/types/index.d.ts +83 -0
  65. package/dist/types/index.mjs +1 -0
  66. package/dist/types/index.mjs.map +1 -0
  67. package/dist/types/transport.d.ts +76 -0
  68. package/dist/utils/index.d.ts +5 -0
  69. package/package.json +112 -0
package/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # @ablogcms/media
2
+
3
+ メディアライブラリ(アップロード・一覧・タグ・トリミング・差し替え・ユニット埋め込み)の
4
+ React 実装一式を提供するパッケージ。
5
+
6
+ ## 使い方
7
+
8
+ このパッケージ自体は HTTP 通信を行わない。データの取得方法(`MediaTransport`)を呼び出し側が
9
+ 実装し、アプリ起動時に一度登録する。
10
+
11
+ ```ts
12
+ import { configureMediaRuntime } from '@ablogcms/media/runtime';
13
+
14
+ configureMediaRuntime(myMediaTransport, myMediaConfig);
15
+ ```
16
+
17
+ 登録後は次のコンポーネントがこの transport を通じてデータを取得する。
18
+
19
+ | コンポーネント | import パス |
20
+ |---|---|
21
+ | `MediaAdmin`(メディア一覧画面) | `@ablogcms/media/components/media-admin/media-admin` |
22
+ | `MediaInsert`(挿入用ピッカー) | `@ablogcms/media/components/media-insert/media-insert` |
23
+ | `MediaUpdate`(詳細・編集) | `@ablogcms/media/components/media-update/media-update` |
24
+ | `MediaDroparea`(ドラッグ&ドロップ領域) | `@ablogcms/media/components/media-droparea/media-droparea` |
25
+ | `MediaUnit`(ユニット埋め込み用) | `@ablogcms/media/components/media-unit/media-unit` |
26
+
27
+ テストでは `configureMediaRuntime(mockTransport)` でモックに差し替え、
28
+ `resetMediaRuntimeForTesting()`(同じく `./runtime`)でリセットできる。
package/dist/acms.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export {};
2
+ declare module '@ablogcms/types/acms' {
3
+ interface AcmsConfig {
4
+ mediaClientResize: 'on' | 'off';
5
+ mediaUploadLimit?: number | string;
6
+ mediaUploadConcurrency?: number | string;
7
+ mediaLibrary?: 'on' | 'off';
8
+ lgImg?: string;
9
+ }
10
+ }
package/dist/acms.mjs ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=acms.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,456 @@
1
+ import {
2
+ media_update_default
3
+ } from "./chunk-5P6HFS6L.mjs";
4
+ import {
5
+ media_insert_default
6
+ } from "./chunk-LAZAMWG6.mjs";
7
+
8
+ // src/components/media-unit/media-unit.tsx
9
+ import { Component, createRef } from "react";
10
+ import { DropZone, DropZoneFileSelector, DropZoneText } from "@ablogcms/components/drop-zone";
11
+ import { AutoResizeTextarea } from "@ablogcms/components/textarea";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ var MediaUnit = class extends Component {
14
+ static defaultProps = {
15
+ items: [],
16
+ mediaSizes: [],
17
+ lang: "ja"
18
+ };
19
+ rootRef = createRef();
20
+ handleMediaUpdated;
21
+ constructor(props) {
22
+ super(props);
23
+ let newMedia = false;
24
+ if (props.items.length === 0) {
25
+ newMedia = true;
26
+ }
27
+ this.state = {
28
+ insertModalOpened: false,
29
+ updateModalOpened: false,
30
+ modalType: "upload",
31
+ targetId: null,
32
+ items: props.items,
33
+ files: [],
34
+ landscape: true,
35
+ newMedia,
36
+ noLarge: props.enlarged === "true" ? "no" : "yes",
37
+ noLink: props.hasLink === "true" ? "no" : "yes",
38
+ useIcon: props.usePdfIcon === "yes" ? "yes" : "no",
39
+ link: props.overrideLink,
40
+ alt: props.overrideAlt,
41
+ caption: props.overrideCaption
42
+ };
43
+ }
44
+ componentDidMount() {
45
+ const { items, newMedia } = this.state;
46
+ if (items.length > 0 && !newMedia) {
47
+ const [item] = items;
48
+ const img = new Image();
49
+ img.onload = () => {
50
+ if (img.width < img.height) {
51
+ this.setState({
52
+ landscape: false
53
+ });
54
+ }
55
+ };
56
+ img.src = item.media_thumbnail;
57
+ }
58
+ if (this.props.onMount) {
59
+ this.props.onMount();
60
+ }
61
+ this.handleMediaUpdated = (event) => {
62
+ if (!(event instanceof CustomEvent)) {
63
+ return;
64
+ }
65
+ const updatedMedia = event.detail.data;
66
+ const { items: currentItems } = this.state;
67
+ const findIndex = currentItems.findIndex((item) => item.media_id === updatedMedia.media_id);
68
+ if (findIndex !== -1) {
69
+ const newItems = [...currentItems.slice(0, findIndex), updatedMedia, ...currentItems.slice(findIndex + 1)];
70
+ this.setState({
71
+ items: newItems
72
+ });
73
+ }
74
+ };
75
+ document.addEventListener("acms.media-updated", this.handleMediaUpdated);
76
+ }
77
+ componentWillUnmount() {
78
+ if (this.handleMediaUpdated) {
79
+ document.removeEventListener("acms.media-updated", this.handleMediaUpdated);
80
+ }
81
+ }
82
+ componentDidUpdate(_, prevState) {
83
+ if (prevState.items !== this.state.items && this.props.onChange) {
84
+ this.props.onChange(this.state.items);
85
+ }
86
+ }
87
+ openInsertModal = () => {
88
+ this.setState({
89
+ modalType: "select",
90
+ insertModalOpened: true
91
+ });
92
+ };
93
+ onInsert = (items) => {
94
+ this.setState({
95
+ items,
96
+ insertModalOpened: false
97
+ });
98
+ };
99
+ onClose = () => {
100
+ this.setState({
101
+ insertModalOpened: false
102
+ });
103
+ };
104
+ onUpdateModalClose = () => {
105
+ this.setState({
106
+ updateModalOpened: false
107
+ });
108
+ };
109
+ onUpdateModalUpdate = (item) => {
110
+ const { items, targetId } = this.state;
111
+ const findIndex = items.findIndex((currentItem) => {
112
+ if (currentItem.media_id === targetId) {
113
+ return true;
114
+ }
115
+ return false;
116
+ });
117
+ const updated = [...items.slice(0, findIndex), item, ...items.slice(findIndex + 1)];
118
+ this.setState({
119
+ updateModalOpened: false,
120
+ items: updated
121
+ });
122
+ };
123
+ removeMediaAt = (index) => {
124
+ const { items } = this.state;
125
+ const filtered = items.filter((item, i) => i !== index);
126
+ this.setState({
127
+ items: filtered
128
+ });
129
+ };
130
+ openEditModal = (targetId) => {
131
+ this.setState({
132
+ targetId,
133
+ updateModalOpened: true
134
+ });
135
+ };
136
+ onComplete = (files) => {
137
+ this.setState({
138
+ files: files.map((item) => item.file),
139
+ insertModalOpened: true,
140
+ modalType: "upload"
141
+ });
142
+ };
143
+ uploadFile = (e) => {
144
+ if (!(e.target.files instanceof FileList)) {
145
+ return;
146
+ }
147
+ this.setState({
148
+ files: Array.from(e.target.files),
149
+ insertModalOpened: true,
150
+ modalType: "upload"
151
+ });
152
+ };
153
+ render() {
154
+ const {
155
+ insertModalOpened,
156
+ updateModalOpened,
157
+ modalType,
158
+ targetId,
159
+ items,
160
+ files,
161
+ newMedia,
162
+ noLarge,
163
+ useIcon,
164
+ link,
165
+ alt,
166
+ caption
167
+ } = this.state;
168
+ const { mediaSizes, primaryImageId, id, active, enlarged, usePdfIcon, primary, lang, multiUpload } = this.props;
169
+ const item = items.at(0);
170
+ return /* @__PURE__ */ jsx("div", { ref: this.rootRef, children: /* @__PURE__ */ jsxs(
171
+ DropZone,
172
+ {
173
+ onComplete: (files2) => {
174
+ this.onComplete(files2);
175
+ },
176
+ children: [
177
+ /* @__PURE__ */ jsx("table", { className: "entryFormColumnSettingTable entryFormColumnTable", children: /* @__PURE__ */ jsxs("tbody", { children: [
178
+ /* @__PURE__ */ jsxs("tr", { className: "entryFormFileControl", children: [
179
+ /* @__PURE__ */ jsxs("td", { className: "acms-admin-media-unit-preview-area", children: [
180
+ items.length === 0 && /* @__PURE__ */ jsxs("div", { children: [
181
+ /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-droparea", children: [
182
+ /* @__PURE__ */ jsx(DropZoneText, { children: ACMS.i18n("media.add_new_media") }),
183
+ /* @__PURE__ */ jsx(DropZoneFileSelector, { onChange: this.uploadFile, disabled: insertModalOpened }),
184
+ /* @__PURE__ */ jsx(DropZoneText, { children: ACMS.i18n("media.drop_file") })
185
+ ] }),
186
+ /* @__PURE__ */ jsx("input", { type: "hidden", name: `media_id_${id}[]`, value: "" })
187
+ ] }),
188
+ items.length > 0 && items.length < 2 && item !== void 0 && /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-preview-wrap", children: [
189
+ /* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-overlay" }),
190
+ /* @__PURE__ */ jsx(
191
+ "button",
192
+ {
193
+ type: "button",
194
+ className: "acms-admin-media-unit-preview-remove-btn",
195
+ onClick: () => this.removeMediaAt(0),
196
+ "aria-label": ACMS.i18n("media.clear_button_label")
197
+ }
198
+ ),
199
+ /* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-edit-overlay" }),
200
+ (item.media_type === "image" || item.media_type === "svg") && /* @__PURE__ */ jsx("img", { className: "acms-admin-media-unit-preview", src: `${item.media_thumbnail}`, alt: "" }),
201
+ item.media_type === "file" && /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-file-icon-wrap", children: [
202
+ /* @__PURE__ */ jsx("img", { className: "acms-admin-media-unit-file-icon", src: `${item.media_thumbnail}`, alt: "" }),
203
+ /* @__PURE__ */ jsx("p", { className: "acms-admin-media-unit-file-caption", children: item.media_title })
204
+ ] }),
205
+ /* @__PURE__ */ jsx(
206
+ "button",
207
+ {
208
+ type: "button",
209
+ className: "acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn",
210
+ onClick: () => this.openEditModal(item.media_id),
211
+ children: ACMS.i18n("media.edit")
212
+ }
213
+ ),
214
+ /* @__PURE__ */ jsx("input", { type: "hidden", name: `media_id_${id}[]`, value: item.media_id.toString() })
215
+ ] })
216
+ ] }),
217
+ /* @__PURE__ */ jsxs("td", { className: "entryFormFileControl", children: [
218
+ /* @__PURE__ */ jsx("table", { className: "acms-admin-margin-bottom-mini", style: { width: "100%" }, children: /* @__PURE__ */ jsxs("tbody", { children: [
219
+ /* @__PURE__ */ jsxs("tr", { children: [
220
+ /* @__PURE__ */ jsx("th", { children: "ID" }),
221
+ /* @__PURE__ */ jsxs("td", { children: [
222
+ /* @__PURE__ */ jsx("div", { style: { display: "inline-block" }, children: item && item.media_id && /* @__PURE__ */ jsx("span", { className: "acms-admin-label acms-admin-label-default acms-admin-margin-right-mini", children: item.media_id }) }),
223
+ /* @__PURE__ */ jsx("button", { type: "button", className: "acms-admin-btn-admin", onClick: this.openInsertModal, children: ACMS.i18n("media.select_from_media") }),
224
+ active !== "on" && /* @__PURE__ */ jsx("span", { style: { color: "red" }, children: ACMS.i18n("media.media_unit_use") })
225
+ ] })
226
+ ] }),
227
+ mediaSizes && mediaSizes.length !== 0 && /* @__PURE__ */ jsxs("tr", { children: [
228
+ /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { htmlFor: `unit-media-size-${id}`, children: ACMS.i18n("media.size") }) }),
229
+ /* @__PURE__ */ jsxs("td", { children: [
230
+ /* @__PURE__ */ jsx(
231
+ "select",
232
+ {
233
+ defaultValue: mediaSizes.find((size) => size.selected)?.value,
234
+ name: `media_size_${id}[]`,
235
+ id: `unit-media-size-${id}`,
236
+ children: mediaSizes.map((mediaSize) => /* @__PURE__ */ jsx("option", { value: mediaSize.value, children: mediaSize.label }, mediaSize.label))
237
+ },
238
+ mediaSizes.find((size) => size.selected)?.value
239
+ ),
240
+ item && item.media_type === "file" && (item.media_pdf === "yes" || item.media_ext && item.media_ext.toUpperCase() === "PDF") && /* @__PURE__ */ jsxs("div", { className: "acms-admin-form-checkbox", style: { marginLeft: "10px" }, children: [
241
+ /* @__PURE__ */ jsx("input", { type: "hidden", name: `media_use_icon_${id}[]`, value: useIcon }),
242
+ /* @__PURE__ */ jsx(
243
+ "input",
244
+ {
245
+ type: "checkbox",
246
+ value: "yes",
247
+ id: `input-checkbox-media_use_icon_${id}_${lang}`,
248
+ defaultChecked: usePdfIcon === "yes",
249
+ onChange: (e) => {
250
+ if (e.target.checked) {
251
+ this.setState({
252
+ useIcon: "yes"
253
+ });
254
+ } else {
255
+ this.setState({
256
+ useIcon: "no"
257
+ });
258
+ }
259
+ }
260
+ }
261
+ ),
262
+ /* @__PURE__ */ jsxs("label", { htmlFor: `input-checkbox-media_use_icon_${id}_${lang}`, children: [
263
+ /* @__PURE__ */ jsx("i", { className: "acms-admin-ico-checkbox" }),
264
+ ACMS.i18n("media.use_icon")
265
+ ] })
266
+ ] })
267
+ ] })
268
+ ] }),
269
+ items.length < 2 && /* @__PURE__ */ jsxs("tr", { children: [
270
+ /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { id: `unit-media-caption-label-${id}`, htmlFor: `unit-media-caption-${id}`, children: ACMS.i18n("media.caption") }) }),
271
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(
272
+ "input",
273
+ {
274
+ type: "text",
275
+ name: `media_caption_${id}[]`,
276
+ id: `unit-media-caption-${id}`,
277
+ "aria-labelledby": `unit-media-caption-label-${id}`,
278
+ className: "acms-admin-form-width-full",
279
+ defaultValue: caption,
280
+ placeholder: item && item.media_caption ? `${item.media_caption}` : ""
281
+ }
282
+ ) })
283
+ ] }),
284
+ items.length < 2 && /* @__PURE__ */ jsxs("tr", { children: [
285
+ /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { id: `unit-media-alt-text-label-${id}`, htmlFor: `unit-media-alt-text-${id}`, children: ACMS.i18n("media.alt") }) }),
286
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(
287
+ AutoResizeTextarea,
288
+ {
289
+ name: `media_alt_${id}[]`,
290
+ defaultValue: alt,
291
+ id: `unit-media-alt-text-${id}`,
292
+ "aria-labelledby": `unit-media-alt-text-label-${id}`,
293
+ className: "acms-admin-form-width-full",
294
+ placeholder: item && item.media_alt ? `${item.media_alt}` : "",
295
+ maxRows: 4
296
+ }
297
+ ) })
298
+ ] }),
299
+ items.length < 2 && item !== void 0 && (item.media_type === "image" || item.media_type === "svg") && /* @__PURE__ */ jsxs("tr", { children: [
300
+ /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx(
301
+ "label",
302
+ {
303
+ id: `input-text-media_link-label-${id}-${lang}`,
304
+ htmlFor: `input-text-media_link_${id}_${lang}`,
305
+ children: ACMS.i18n("media.url_link_to")
306
+ }
307
+ ) }),
308
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(
309
+ "input",
310
+ {
311
+ type: "text",
312
+ id: `input-text-media_link_${id}_${lang}`,
313
+ "aria-labelledby": `input-text-media_link-label-${id}-${lang}`,
314
+ name: `media_link_${id}[]`,
315
+ className: "acms-admin-form-width-full",
316
+ placeholder: item.media_link || "",
317
+ defaultValue: link
318
+ }
319
+ ) })
320
+ ] }),
321
+ items.length < 2 && item !== void 0 && (item.media_type === "image" || item.media_type === "svg") && /* @__PURE__ */ jsxs("tr", { children: [
322
+ /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { htmlFor: `input-checkbox-media_enlarged_${id}_${lang}`, children: ACMS.i18n("media.image_link") }) }),
323
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("div", { className: "acms-admin-form-checkbox", children: [
324
+ /* @__PURE__ */ jsx("input", { type: "hidden", name: `media_enlarged_${id}[]`, value: noLarge }),
325
+ /* @__PURE__ */ jsx(
326
+ "input",
327
+ {
328
+ type: "checkbox",
329
+ value: "no",
330
+ id: `input-checkbox-media_enlarged_${id}_${lang}`,
331
+ defaultChecked: enlarged === "true",
332
+ onChange: (e) => {
333
+ if (e.target.checked) {
334
+ this.setState({
335
+ noLarge: "no"
336
+ });
337
+ } else {
338
+ this.setState({
339
+ noLarge: "yes"
340
+ });
341
+ }
342
+ }
343
+ }
344
+ ),
345
+ /* @__PURE__ */ jsxs("label", { htmlFor: `input-checkbox-media_enlarged_${id}_${lang}`, children: [
346
+ /* @__PURE__ */ jsx("i", { className: "acms-admin-ico-checkbox" }),
347
+ ACMS.i18n("media.no_image_link")
348
+ ] })
349
+ ] }) })
350
+ ] }),
351
+ items.length < 2 && primaryImageId !== "no" && item && item.media_type === "image" && !newMedia && /* @__PURE__ */ jsxs("tr", { children: [
352
+ /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("label", { htmlFor: `input-radio-image_primary_image_${id}_${lang}`, children: ACMS.i18n("media.main_image") }) }),
353
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("div", { className: "acms-admin-form-radio", children: [
354
+ /* @__PURE__ */ jsx(
355
+ "input",
356
+ {
357
+ type: "radio",
358
+ name: "primary_image",
359
+ value: primaryImageId,
360
+ id: `input-radio-image_primary_image_${id}_${lang}`,
361
+ defaultChecked: primary === "true"
362
+ }
363
+ ),
364
+ /* @__PURE__ */ jsxs("label", { htmlFor: `input-radio-image_primary_image_${id}_${lang}`, children: [
365
+ /* @__PURE__ */ jsx("i", { className: "acms-admin-ico-radio" }),
366
+ ACMS.i18n("media.set_as_main_image")
367
+ ] })
368
+ ] }) })
369
+ ] })
370
+ ] }) }),
371
+ !(items.length < 2 && item && (item.media_type === "image" || item.media_type === "svg")) && /* @__PURE__ */ jsx("input", { type: "hidden", name: `media_enlarged_${id}[]`, value: "no" })
372
+ ] })
373
+ ] }),
374
+ items.length >= 2 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: 2, children: /* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-group", children: items.map((item2, index) => /* @__PURE__ */ jsxs(
375
+ "div",
376
+ {
377
+ className: "acms-admin-media-unit-preview-wrap acms-admin-media-unit-preview-group-item",
378
+ children: [
379
+ /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-preview-group-item-inner", children: [
380
+ /* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-edit-overlay" }),
381
+ (item2.media_type === "image" || item2.media_type === "svg") && /* @__PURE__ */ jsx(
382
+ "img",
383
+ {
384
+ className: "acms-admin-media-unit-preview-group-img",
385
+ src: `${item2.media_thumbnail}`,
386
+ alt: ""
387
+ }
388
+ ),
389
+ item2.media_type === "file" && /* @__PURE__ */ jsxs("div", { className: "acms-admin-media-unit-file-icon-wrap", children: [
390
+ /* @__PURE__ */ jsx(
391
+ "img",
392
+ {
393
+ className: "acms-admin-media-unit-file-icon",
394
+ src: `${item2.media_thumbnail}`,
395
+ alt: ""
396
+ }
397
+ ),
398
+ /* @__PURE__ */ jsx("p", { className: "acms-admin-media-unit-file-caption", children: item2.media_title })
399
+ ] }),
400
+ /* @__PURE__ */ jsx("input", { type: "hidden", name: `media_id_${id}[]`, value: item2.media_id.toString() })
401
+ ] }),
402
+ /* @__PURE__ */ jsx("div", { className: "acms-admin-media-unit-preview-overlay" }),
403
+ /* @__PURE__ */ jsx(
404
+ "button",
405
+ {
406
+ type: "button",
407
+ className: "acms-admin-media-unit-preview-remove-btn",
408
+ onClick: () => this.removeMediaAt(index),
409
+ "aria-label": ACMS.i18n("media.clear_button_label")
410
+ }
411
+ ),
412
+ /* @__PURE__ */ jsx(
413
+ "button",
414
+ {
415
+ type: "button",
416
+ className: "acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn",
417
+ onClick: () => this.openEditModal(item2.media_id),
418
+ children: ACMS.i18n("media.edit")
419
+ }
420
+ )
421
+ ]
422
+ },
423
+ item2.media_id
424
+ )) }) }) })
425
+ ] }) }),
426
+ /* @__PURE__ */ jsx(
427
+ media_insert_default,
428
+ {
429
+ isOpen: insertModalOpened,
430
+ onInsert: this.onInsert,
431
+ radioMode: multiUpload === "false",
432
+ files,
433
+ onClose: this.onClose,
434
+ tab: modalType,
435
+ filetype: "all"
436
+ }
437
+ ),
438
+ targetId != null && targetId > 0 && /* @__PURE__ */ jsx(
439
+ media_update_default,
440
+ {
441
+ isOpen: updateModalOpened,
442
+ mid: targetId,
443
+ onClose: this.onUpdateModalClose,
444
+ onUpdate: this.onUpdateModalUpdate
445
+ }
446
+ )
447
+ ]
448
+ }
449
+ ) });
450
+ }
451
+ };
452
+
453
+ export {
454
+ MediaUnit
455
+ };
456
+ //# sourceMappingURL=chunk-32U7ADG2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/media-unit/media-unit.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { ExtendedFile } from '@ablogcms/lib/read-files';\nimport { DropZone, DropZoneFileSelector, DropZoneText } from '@ablogcms/components/drop-zone';\nimport { AutoResizeTextarea } from '@ablogcms/components/textarea';\nimport MediaInsert from '../media-insert/media-insert';\nimport MediaUpdate from '../media-update/media-update';\nimport { MediaItem } from '../../types';\n\ntype MediaUnitProps = {\n items: MediaItem[];\n mediaSizes?: { value: string; label: string; selected: boolean }[];\n primaryImageId: string;\n id: string;\n active: 'on' | 'off';\n lang?: string;\n usePdfIcon: 'yes' | 'no';\n primary: 'true' | 'false';\n hasLink: 'true' | 'false';\n multiUpload: 'true' | 'false';\n enlarged: 'true' | 'false';\n overrideLink: string;\n overrideAlt: string;\n overrideCaption: string;\n onMount?: () => void;\n onChange?: (mediaItems: MediaItem[]) => void;\n};\n\ntype MediaUnitState = {\n insertModalOpened: boolean;\n updateModalOpened: boolean;\n newMedia: boolean;\n noLink: 'yes' | 'no';\n noLarge: 'yes' | 'no';\n useIcon: 'yes' | 'no';\n modalType: 'upload' | 'select';\n link: string;\n targetId: number | null;\n items: MediaItem[];\n files: File[];\n landscape: boolean;\n alt: string;\n caption: string;\n};\n\nexport default class MediaUnit extends Component<MediaUnitProps, MediaUnitState> {\n static defaultProps = {\n items: [],\n mediaSizes: [],\n lang: 'ja',\n };\n\n rootRef = createRef<HTMLDivElement>();\n\n handleMediaUpdated?: (event: Event) => void;\n\n constructor(props: MediaUnitProps) {\n super(props);\n\n let newMedia = false;\n if (props.items.length === 0) {\n newMedia = true;\n }\n this.state = {\n insertModalOpened: false,\n updateModalOpened: false,\n modalType: 'upload',\n targetId: null,\n items: props.items,\n files: [],\n landscape: true,\n newMedia,\n noLarge: props.enlarged === 'true' ? 'no' : 'yes',\n noLink: props.hasLink === 'true' ? 'no' : 'yes',\n useIcon: props.usePdfIcon === 'yes' ? 'yes' : 'no',\n link: props.overrideLink,\n alt: props.overrideAlt,\n caption: props.overrideCaption,\n };\n }\n\n componentDidMount() {\n const { items, newMedia } = this.state;\n if (items.length > 0 && !newMedia) {\n const [item] = items;\n const img = new Image();\n img.onload = () => {\n if (img.width < img.height) {\n this.setState({\n landscape: false,\n });\n }\n };\n img.src = item.media_thumbnail;\n }\n\n if (this.props.onMount) {\n this.props.onMount();\n }\n\n // メディア更新イベントを購読\n this.handleMediaUpdated = (event: Event) => {\n if (!(event instanceof CustomEvent)) {\n return;\n }\n const updatedMedia = event.detail.data as MediaItem;\n const { items: currentItems } = this.state;\n // 現在のitems内に該当するメディアIDがあるか確認\n const findIndex = currentItems.findIndex((item) => item.media_id === updatedMedia.media_id);\n if (findIndex !== -1) {\n // 該当するメディアを更新\n const newItems = [...currentItems.slice(0, findIndex), updatedMedia, ...currentItems.slice(findIndex + 1)];\n this.setState({\n items: newItems,\n });\n }\n };\n document.addEventListener('acms.media-updated', this.handleMediaUpdated);\n }\n\n componentWillUnmount() {\n if (this.handleMediaUpdated) {\n document.removeEventListener('acms.media-updated', this.handleMediaUpdated);\n }\n }\n\n componentDidUpdate(_: MediaUnitProps, prevState: MediaUnitState) {\n if (prevState.items !== this.state.items && this.props.onChange) {\n this.props.onChange(this.state.items);\n }\n }\n\n openInsertModal = () => {\n this.setState({\n modalType: 'select',\n insertModalOpened: true,\n });\n };\n\n onInsert = (items: MediaItem[]) => {\n this.setState({\n items,\n insertModalOpened: false,\n });\n };\n\n onClose = () => {\n this.setState({\n insertModalOpened: false,\n });\n };\n\n onUpdateModalClose = () => {\n this.setState({\n updateModalOpened: false,\n });\n };\n\n onUpdateModalUpdate = (item: MediaItem) => {\n const { items, targetId } = this.state;\n const findIndex = items.findIndex((currentItem) => {\n if (currentItem.media_id === targetId) {\n return true;\n }\n return false;\n });\n const updated = [...items.slice(0, findIndex), item, ...items.slice(findIndex + 1)];\n this.setState({\n updateModalOpened: false,\n items: updated,\n });\n };\n\n removeMediaAt = (index: number) => {\n const { items } = this.state;\n const filtered = items.filter((item, i) => i !== index);\n this.setState({\n items: filtered,\n });\n };\n\n openEditModal = (targetId: number) => {\n this.setState({\n targetId,\n updateModalOpened: true,\n });\n };\n\n onComplete = (files: ExtendedFile[]) => {\n this.setState({\n files: files.map((item) => item.file),\n insertModalOpened: true,\n modalType: 'upload',\n });\n };\n\n uploadFile = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!(e.target.files instanceof FileList)) {\n return;\n }\n this.setState({\n files: Array.from(e.target.files),\n insertModalOpened: true,\n modalType: 'upload',\n });\n };\n\n render() {\n const {\n insertModalOpened,\n updateModalOpened,\n modalType,\n targetId,\n items,\n files,\n newMedia,\n noLarge,\n useIcon,\n link,\n alt,\n caption,\n } = this.state;\n const { mediaSizes, primaryImageId, id, active, enlarged, usePdfIcon, primary, lang, multiUpload } = this.props;\n const item = items.at(0);\n\n return (\n <div ref={this.rootRef}>\n <DropZone\n onComplete={(files) => {\n this.onComplete(files);\n }}\n >\n <table className=\"entryFormColumnSettingTable entryFormColumnTable\">\n <tbody>\n <tr className=\"entryFormFileControl\">\n <td className=\"acms-admin-media-unit-preview-area\">\n {items.length === 0 && (\n <div>\n <div className=\"acms-admin-media-unit-droparea\">\n <DropZoneText>{ACMS.i18n('media.add_new_media')}</DropZoneText>\n <DropZoneFileSelector onChange={this.uploadFile} disabled={insertModalOpened} />\n <DropZoneText>{ACMS.i18n('media.drop_file')}</DropZoneText>\n </div>\n <input type=\"hidden\" name={`media_id_${id}[]`} value=\"\" />\n </div>\n )}\n {items.length > 0 && items.length < 2 && item !== undefined && (\n <div className=\"acms-admin-media-unit-preview-wrap\">\n <div className=\"acms-admin-media-unit-preview-overlay\" />\n <button\n type=\"button\"\n className=\"acms-admin-media-unit-preview-remove-btn\"\n onClick={() => this.removeMediaAt(0)}\n aria-label={ACMS.i18n('media.clear_button_label')}\n />\n <div className=\"acms-admin-media-unit-preview-edit-overlay\" />\n {(item.media_type === 'image' || item.media_type === 'svg') && (\n <img className=\"acms-admin-media-unit-preview\" src={`${item.media_thumbnail}`} alt=\"\" />\n )}\n {item.media_type === 'file' && (\n <div className=\"acms-admin-media-unit-file-icon-wrap\">\n <img className=\"acms-admin-media-unit-file-icon\" src={`${item.media_thumbnail}`} alt=\"\" />\n <p className=\"acms-admin-media-unit-file-caption\">{item.media_title}</p>\n </div>\n )}\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn\"\n onClick={() => this.openEditModal(item.media_id)}\n >\n {ACMS.i18n('media.edit')}\n </button>\n <input type=\"hidden\" name={`media_id_${id}[]`} value={item.media_id.toString()} />\n </div>\n )}\n </td>\n <td className=\"entryFormFileControl\">\n <table className=\"acms-admin-margin-bottom-mini\" style={{ width: '100%' }}>\n <tbody>\n <tr>\n <th>ID</th>\n <td>\n <div style={{ display: 'inline-block' }}>\n {item && item.media_id && (\n <span className=\"acms-admin-label acms-admin-label-default acms-admin-margin-right-mini\">\n {item.media_id}\n </span>\n )}\n </div>\n <button type=\"button\" className=\"acms-admin-btn-admin\" onClick={this.openInsertModal}>\n {ACMS.i18n('media.select_from_media')}\n </button>\n {active !== 'on' && <span style={{ color: 'red' }}>{ACMS.i18n('media.media_unit_use')}</span>}\n </td>\n </tr>\n {mediaSizes && mediaSizes.length !== 0 && (\n <tr>\n <th>\n <label htmlFor={`unit-media-size-${id}`}>{ACMS.i18n('media.size')}</label>\n </th>\n <td>\n <select\n defaultValue={mediaSizes.find((size) => size.selected)?.value}\n key={mediaSizes.find((size) => size.selected)?.value}\n name={`media_size_${id}[]`}\n id={`unit-media-size-${id}`}\n >\n {mediaSizes.map((mediaSize) => (\n <option value={mediaSize.value} key={mediaSize.label}>\n {mediaSize.label}\n </option>\n ))}\n </select>\n {item &&\n item.media_type === 'file' &&\n (item.media_pdf === 'yes' ||\n (item.media_ext && item.media_ext.toUpperCase() === 'PDF')) && (\n <div className=\"acms-admin-form-checkbox\" style={{ marginLeft: '10px' }}>\n <input type=\"hidden\" name={`media_use_icon_${id}[]`} value={useIcon} />\n <input\n type=\"checkbox\"\n value=\"yes\"\n id={`input-checkbox-media_use_icon_${id}_${lang}`}\n defaultChecked={usePdfIcon === 'yes'}\n onChange={(e) => {\n if (e.target.checked) {\n this.setState({\n useIcon: 'yes',\n });\n } else {\n this.setState({\n useIcon: 'no',\n });\n }\n }}\n />\n <label htmlFor={`input-checkbox-media_use_icon_${id}_${lang}`}>\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.use_icon')}\n </label>\n </div>\n )}\n </td>\n </tr>\n )}\n {items.length < 2 && (\n <tr>\n <th>\n <label id={`unit-media-caption-label-${id}`} htmlFor={`unit-media-caption-${id}`}>\n {ACMS.i18n('media.caption')}\n </label>\n </th>\n <td>\n <input\n type=\"text\"\n name={`media_caption_${id}[]`}\n id={`unit-media-caption-${id}`}\n aria-labelledby={`unit-media-caption-label-${id}`}\n className=\"acms-admin-form-width-full\"\n defaultValue={caption}\n placeholder={item && item.media_caption ? `${item.media_caption}` : ''}\n />\n </td>\n </tr>\n )}\n {items.length < 2 && (\n <tr>\n <th>\n <label id={`unit-media-alt-text-label-${id}`} htmlFor={`unit-media-alt-text-${id}`}>\n {ACMS.i18n('media.alt')}\n </label>\n </th>\n <td>\n <AutoResizeTextarea\n name={`media_alt_${id}[]`}\n defaultValue={alt}\n id={`unit-media-alt-text-${id}`}\n aria-labelledby={`unit-media-alt-text-label-${id}`}\n className=\"acms-admin-form-width-full\"\n placeholder={item && item.media_alt ? `${item.media_alt}` : ''}\n maxRows={4}\n />\n </td>\n </tr>\n )}\n {items.length < 2 &&\n item !== undefined &&\n (item.media_type === 'image' || item.media_type === 'svg') && (\n <tr>\n <th>\n <label\n id={`input-text-media_link-label-${id}-${lang}`}\n htmlFor={`input-text-media_link_${id}_${lang}`}\n >\n {ACMS.i18n('media.url_link_to')}\n </label>\n </th>\n <td>\n <input\n type=\"text\"\n id={`input-text-media_link_${id}_${lang}`}\n aria-labelledby={`input-text-media_link-label-${id}-${lang}`}\n name={`media_link_${id}[]`}\n className=\"acms-admin-form-width-full\"\n placeholder={item.media_link || ''}\n defaultValue={link}\n />\n </td>\n </tr>\n )}\n {items.length < 2 &&\n item !== undefined &&\n (item.media_type === 'image' || item.media_type === 'svg') && (\n <tr>\n <th>\n <label htmlFor={`input-checkbox-media_enlarged_${id}_${lang}`}>\n {ACMS.i18n('media.image_link')}\n </label>\n </th>\n <td>\n <div className=\"acms-admin-form-checkbox\">\n <input type=\"hidden\" name={`media_enlarged_${id}[]`} value={noLarge} />\n <input\n type=\"checkbox\"\n value=\"no\"\n id={`input-checkbox-media_enlarged_${id}_${lang}`}\n defaultChecked={enlarged === 'true'}\n onChange={(e) => {\n if (e.target.checked) {\n this.setState({\n noLarge: 'no',\n });\n } else {\n this.setState({\n noLarge: 'yes',\n });\n }\n }}\n />\n <label htmlFor={`input-checkbox-media_enlarged_${id}_${lang}`}>\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.no_image_link')}\n </label>\n </div>\n </td>\n </tr>\n )}\n {items.length < 2 &&\n primaryImageId !== 'no' &&\n item &&\n item.media_type === 'image' &&\n !newMedia && (\n <tr>\n <th>\n <label htmlFor={`input-radio-image_primary_image_${id}_${lang}`}>\n {ACMS.i18n('media.main_image')}\n </label>\n </th>\n <td>\n <div className=\"acms-admin-form-radio\">\n <input\n type=\"radio\"\n name=\"primary_image\"\n value={primaryImageId}\n id={`input-radio-image_primary_image_${id}_${lang}`}\n defaultChecked={primary === 'true'}\n />\n <label htmlFor={`input-radio-image_primary_image_${id}_${lang}`}>\n <i className=\"acms-admin-ico-radio\" />\n {ACMS.i18n('media.set_as_main_image')}\n </label>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n {!(items.length < 2 && item && (item.media_type === 'image' || item.media_type === 'svg')) && (\n <input type=\"hidden\" name={`media_enlarged_${id}[]`} value=\"no\" />\n )}\n </td>\n </tr>\n {items.length >= 2 && (\n <tr>\n <td colSpan={2}>\n <div className=\"acms-admin-media-unit-preview-group\">\n {items.map((item, index) => (\n <div\n className=\"acms-admin-media-unit-preview-wrap acms-admin-media-unit-preview-group-item\"\n key={item.media_id}\n >\n <div className=\"acms-admin-media-unit-preview-group-item-inner\">\n <div className=\"acms-admin-media-unit-preview-edit-overlay\" />\n {(item.media_type === 'image' || item.media_type === 'svg') && (\n <img\n className=\"acms-admin-media-unit-preview-group-img\"\n src={`${item.media_thumbnail}`}\n alt=\"\"\n />\n )}\n {item.media_type === 'file' && (\n <div className=\"acms-admin-media-unit-file-icon-wrap\">\n <img\n className=\"acms-admin-media-unit-file-icon\"\n src={`${item.media_thumbnail}`}\n alt=\"\"\n />\n <p className=\"acms-admin-media-unit-file-caption\">{item.media_title}</p>\n </div>\n )}\n <input type=\"hidden\" name={`media_id_${id}[]`} value={item.media_id.toString()} />\n </div>\n <div className=\"acms-admin-media-unit-preview-overlay\" />\n <button\n type=\"button\"\n className=\"acms-admin-media-unit-preview-remove-btn\"\n onClick={() => this.removeMediaAt(index)}\n aria-label={ACMS.i18n('media.clear_button_label')}\n />\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-unit-preview-edit-btn\"\n onClick={() => this.openEditModal(item.media_id)}\n >\n {ACMS.i18n('media.edit')}\n </button>\n </div>\n ))}\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n <MediaInsert\n isOpen={insertModalOpened}\n onInsert={this.onInsert}\n radioMode={multiUpload === 'false'}\n files={files}\n onClose={this.onClose}\n tab={modalType}\n filetype=\"all\"\n />\n {targetId != null && targetId > 0 && (\n <MediaUpdate\n isOpen={updateModalOpened}\n mid={targetId}\n onClose={this.onUpdateModalClose}\n onUpdate={this.onUpdateModalUpdate}\n />\n )}\n </DropZone>\n </div>\n );\n }\n}\n"],"mappings":"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","names":["files","item"]}
@@ -0,0 +1,37 @@
1
+ // src/runtime.ts
2
+ var currentTransport = null;
3
+ var currentConfig = {};
4
+ var currentFillStore;
5
+ function configureMediaRuntime(transport, config = {}, fillStore) {
6
+ currentTransport = transport;
7
+ currentConfig = config;
8
+ currentFillStore = fillStore;
9
+ }
10
+ function getMediaTransport() {
11
+ if (!currentTransport) {
12
+ throw new Error(
13
+ "[@ablogcms/media] MediaTransport \u304C\u672A\u8A2D\u5B9A\u3067\u3059\u3002configureMediaRuntime() \u3092\u547C\u3073\u51FA\u3057\u3066\u304B\u3089\u5229\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002"
14
+ );
15
+ }
16
+ return currentTransport;
17
+ }
18
+ function getMediaConfig() {
19
+ return currentConfig;
20
+ }
21
+ function getMediaFillStore() {
22
+ return currentFillStore;
23
+ }
24
+ function resetMediaRuntimeForTesting() {
25
+ currentTransport = null;
26
+ currentConfig = {};
27
+ currentFillStore = void 0;
28
+ }
29
+
30
+ export {
31
+ configureMediaRuntime,
32
+ getMediaTransport,
33
+ getMediaConfig,
34
+ getMediaFillStore,
35
+ resetMediaRuntimeForTesting
36
+ };
37
+ //# sourceMappingURL=chunk-3SYVRD3N.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime.ts"],"sourcesContent":["import type { SlotFillStore } from '@ablogcms/components/slot-fill';\nimport type { MediaTransport } from './types/transport';\nimport type { MediaConfig } from './types/config';\n\n/**\n * `@ablogcms/media` の実行時依存(データ取得・設定値)を保持するレジストリ。\n *\n * このパッケージは webpack の単一バンドル内で複数箇所(管理画面のメディアライブラリ、\n * リッチエディタ/ブロックエディタのメディア挿入、バナーエディタ、ナビゲーションエディタ等)\n * から静的 import されるため、モジュールはバンドル内で単一インスタンスとして共有される\n * (webpack のモジュールキャッシュにより、動的 import で分かれる非同期チャンクからも\n * 同一インスタンスを参照する)。\n *\n * a-block cms コア側(`ablogcms/js/src/features/media/bootstrap.ts`)が\n * アプリ起動時に一度だけ `configureMediaRuntime()` を呼び、以降すべての呼び出し箇所は\n * `getMediaTransport()` / `getMediaConfig()` で読み出す。これは `ACMS.i18n` と同種の\n * 「起動時に一度だけ設定するアンビエントな実行契約」であり、React コンポーネントツリーや\n * redux-saga の外側(複数の独立した Provider/ストアにまたがる箇所)からも一様に参照できる\n * ようにするため、React Context ではなくこの形を採る。\n *\n * テストではモジュールをモックするか、テストごとに `configureMediaRuntime()` で\n * モック実装を差し替える。\n */\n\nlet currentTransport: MediaTransport | null = null;\nlet currentConfig: MediaConfig = {};\nlet currentFillStore: SlotFillStore | undefined;\n\n/**\n * `fillStore` は MediaModal を開く 8 経路(メディア管理 / カスタムフィールド / ブロックエディター\n * 画像・ファイル / リッチエディター / バナー / ナビゲーション / ユニット)を横断する `Slot` 差し込み口を\n * 提供するための注入。`@ablogcms/media` は `@ablogcms/plugins/core`(`getGlobalFillBridge()`)に\n * 直接依存しない設計のため、コア(`ablogcms/js/src/features/media/bootstrap.ts`)がここへ注入する。\n * 省略時は `SlotFillProvider` がローカルストアにフォールバックし、`Slot` が throw しない状態を保つ\n * (その場合 Fill はページ横断で共有されない)。\n */\nexport function configureMediaRuntime(\n transport: MediaTransport,\n config: MediaConfig = {},\n fillStore?: SlotFillStore\n): void {\n currentTransport = transport;\n currentConfig = config;\n currentFillStore = fillStore;\n}\n\nexport function getMediaTransport(): MediaTransport {\n if (!currentTransport) {\n throw new Error(\n '[@ablogcms/media] MediaTransport が未設定です。configureMediaRuntime() を呼び出してから利用してください。'\n );\n }\n return currentTransport;\n}\n\nexport function getMediaConfig(): MediaConfig {\n return currentConfig;\n}\n\n/** 未注入時は `undefined` を返す。`SlotFillProvider` の `store` prop はこれをそのまま受け取れる(省略時ローカルストアへフォールバック) */\nexport function getMediaFillStore(): SlotFillStore | undefined {\n return currentFillStore;\n}\n\n/**\n * テスト専用のリセットヘルパー。`configureMediaRuntime` した内容を次のテストへ持ち越さないために使う。\n */\nexport function resetMediaRuntimeForTesting(): void {\n currentTransport = null;\n currentConfig = {};\n currentFillStore = undefined;\n}\n"],"mappings":";AAwBA,IAAI,mBAA0C;AAC9C,IAAI,gBAA6B,CAAC;AAClC,IAAI;AAUG,SAAS,sBACd,WACA,SAAsB,CAAC,GACvB,WACM;AACN,qBAAmB;AACnB,kBAAgB;AAChB,qBAAmB;AACrB;AAEO,SAAS,oBAAoC;AAClD,MAAI,CAAC,kBAAkB;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,iBAA8B;AAC5C,SAAO;AACT;AAGO,SAAS,oBAA+C;AAC7D,SAAO;AACT;AAKO,SAAS,8BAAoC;AAClD,qBAAmB;AACnB,kBAAgB,CAAC;AACjB,qBAAmB;AACrB;","names":[]}