@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.
- package/README.md +28 -0
- package/dist/acms.d.ts +10 -0
- package/dist/acms.mjs +1 -0
- package/dist/acms.mjs.map +1 -0
- package/dist/chunk-32U7ADG2.mjs +456 -0
- package/dist/chunk-32U7ADG2.mjs.map +1 -0
- package/dist/chunk-3SYVRD3N.mjs +37 -0
- package/dist/chunk-3SYVRD3N.mjs.map +1 -0
- package/dist/chunk-5P6HFS6L.mjs +90 -0
- package/dist/chunk-5P6HFS6L.mjs.map +1 -0
- package/dist/chunk-J5LGTIGS.mjs +10 -0
- package/dist/chunk-J5LGTIGS.mjs.map +1 -0
- package/dist/chunk-JJTHI4QP.mjs +1783 -0
- package/dist/chunk-JJTHI4QP.mjs.map +1 -0
- package/dist/chunk-KQNVYJOK.mjs +1814 -0
- package/dist/chunk-KQNVYJOK.mjs.map +1 -0
- package/dist/chunk-LAZAMWG6.mjs +231 -0
- package/dist/chunk-LAZAMWG6.mjs.map +1 -0
- package/dist/components/media-admin/media-admin-view.d.ts +22 -0
- package/dist/components/media-admin/media-admin.d.ts +6 -0
- package/dist/components/media-admin/media-admin.mjs +148 -0
- package/dist/components/media-admin/media-admin.mjs.map +1 -0
- package/dist/components/media-droparea/media-droparea.d.ts +63 -0
- package/dist/components/media-droparea/media-droparea.mjs +152 -0
- package/dist/components/media-droparea/media-droparea.mjs.map +1 -0
- package/dist/components/media-edit-modal/media-edit-modal.d.ts +58 -0
- package/dist/components/media-insert/media-insert-modal.d.ts +30 -0
- package/dist/components/media-insert/media-insert.d.ts +5 -0
- package/dist/components/media-insert/media-insert.mjs +11 -0
- package/dist/components/media-insert/media-insert.mjs.map +1 -0
- package/dist/components/media-list/media-list.d.ts +125 -0
- package/dist/components/media-modal/media-modal.d.ts +94 -0
- package/dist/components/media-modal/pdf-previewer.d.ts +8 -0
- package/dist/components/media-unit/media-unit.d.ts +65 -0
- package/dist/components/media-unit/media-unit.mjs +13 -0
- package/dist/components/media-unit/media-unit.mjs.map +1 -0
- package/dist/components/media-update/media-update-modal.d.ts +12 -0
- package/dist/components/media-update/media-update.d.ts +5 -0
- package/dist/components/media-update/media-update.mjs +10 -0
- package/dist/components/media-update/media-update.mjs.map +1 -0
- package/dist/components/media-uploader/media-uploader.d.ts +69 -0
- package/dist/constants/index.d.ts +19 -0
- package/dist/containers/media-admin.d.ts +10 -0
- package/dist/containers/media-insert.d.ts +17 -0
- package/dist/containers/media-update.d.ts +13 -0
- package/dist/dataview/column-type.d.ts +10 -0
- package/dist/dataview/column-type.mjs +75 -0
- package/dist/dataview/column-type.mjs.map +1 -0
- package/dist/events.d.ts +70 -0
- package/dist/media-crop-focal-OQHAYXEP.svg +1 -0
- package/dist/media-crop-icon-LD2QEJHL.svg +12 -0
- package/dist/media-focal-point-OQQ3MQM2.svg +3 -0
- package/dist/media-rotate-icon-HBMXAPD4.svg +7 -0
- package/dist/runtime.d.ts +20 -0
- package/dist/runtime.mjs +16 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/setup-media-unit.d.ts +2 -0
- package/dist/setup-media-unit.mjs +118 -0
- package/dist/setup-media-unit.mjs.map +1 -0
- package/dist/stores/actions.d.ts +64 -0
- package/dist/stores/reducer.d.ts +5 -0
- package/dist/stores/saga.d.ts +35 -0
- package/dist/types/config.d.ts +29 -0
- package/dist/types/index.d.ts +83 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types/transport.d.ts +76 -0
- package/dist/utils/index.d.ts +5 -0
- package/package.json +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stores/actions.ts","../src/constants/index.ts","../src/stores/reducer.ts","../src/stores/saga.ts","../src/components/media-modal/media-modal.tsx","../src/components/media-edit-modal/media-edit-modal.tsx","../src/utils/index.ts","../src/components/media-modal/pdf-previewer.ts"],"sourcesContent":["import * as types from '../constants';\nimport { MediaAjaxConfig, MediaItem } from '../types';\n\nexport const fetchTagList = () => ({ type: types.FETCHTAGLIST });\nexport const fetchMediaList = (config?: MediaAjaxConfig) => ({ type: types.FETCHMEDIALIST, config });\nexport const setMediaList = (items: MediaItem[]) => ({ type: types.SETMEDIALIST, items });\nexport const setMediaConfig = (config: Partial<MediaAjaxConfig>) => ({ type: types.SETMEDIACONFIG, config });\nexport const setMediaLastPage = (page: number) => ({ type: types.SETMEDIALASTPAGE, page });\nexport const setMediaLargeSize = (largeSize: number) => ({ type: types.SETMEDIALARGESIZE, largeSize });\nexport const setFormToken = (formToken: string) => ({ type: types.SETFORMTOKEN, formToken });\nexport const setItem = (item: MediaItem | null) => ({ type: types.SETITEM, item });\nexport const updateMediaList = (item: MediaItem) => ({ type: types.UPDATEMEDIALIST, item });\nexport const setLabel = (label: string) => ({ type: types.SETLABEL, label });\nexport const setMediaArchives = (archives: string[]) => ({ type: types.SETMEDIAARCHIVES, archives });\nexport const setMediaTags = (tags: string[]) => ({ type: types.SETMEDIATAGS, tags });\nexport const setMediaTotal = (total: number) => ({ type: types.SETMEDIATOTAL, total });\nexport const setLoading = (loading: boolean) => ({ type: types.SETLOADING, loading });\nexport const setSelectedTags = (tags: string[]) => ({ type: types.SETSELECTEDTAGS, tags });\nexport const setMediaExtensions = (extensions: string[]) => ({ type: types.SETMEDIAEXTENSIONS, extensions });\n","export const FETCHMEDIALIST = 'FETCHMEDIALIST' as const;\nexport const FETCHTAGLIST = 'FETCHTAGLIST' as const;\nexport const SETMEDIALIST = 'SETMEDIALIST' as const;\nexport const SETMEDIALASTPAGE = 'SETMEDIALASTPAGE' as const;\nexport const SETMEDIACONFIG = 'SETMEDIACONFIG' as const;\nexport const SETMEDIAPAGE = 'SETMEDIAPAGE' as const;\nexport const SETMEDIALIMIT = 'SETMEDIALIMIT' as const;\nexport const SETITEM = 'SETITEM' as const;\nexport const UPDATEMEDIALIST = 'UPDATEMEDIALIST' as const;\nexport const SETMEDIALARGESIZE = 'SETMEDIALARGESIZE' as const;\nexport const SETFORMTOKEN = 'SETFORMTOKEN' as const;\nexport const SETLABEL = 'SETLABEL' as const;\nexport const SETMEDIAKEYWORD = 'SETMEDIAKEYWORD' as const;\nexport const SETMEDIAARCHIVES = 'SETMEDIAARCHIVES' as const;\nexport const SETMEDIATAGS = 'SETMEDIATAGS' as const;\nexport const SETMEDIATOTAL = 'SETMEDIATOTAL' as const;\nexport const SETLOADING = 'SETLOADING' as const;\nexport const SETSELECTEDTAGS = 'SETSELECTEDTAGS' as const;\nexport const SETMEDIAEXTENSIONS = 'SETMEDIAEXTENSIONS' as const;\n","import * as actions from './actions';\nimport * as types from '../constants';\nimport { MediaItem, MediaStateProps } from '../types';\n\nconst initialState: MediaStateProps = {\n items: [],\n archives: [],\n tags: [],\n extensions: [],\n selectedTags: [],\n item: null,\n lastPage: 1,\n largeSize: 0,\n total: 0,\n config: {\n limit: 20,\n page: 1,\n order: 'upload_date-desc',\n keyword: '',\n tag: '',\n date: '',\n filetype: 'all',\n fileext: 'all',\n year: '',\n month: '',\n owner: false,\n blogAxis: false,\n },\n formToken: '',\n label: '',\n loading: false,\n actions,\n // upload: false,\n // mode: 'edit',\n // tab: 'select',\n};\n\ntype Action = ReturnType<(typeof actions)[keyof typeof actions]>;\n\nexport default (state = initialState, action: Action) => {\n switch (action.type) {\n case types.SETMEDIALIST:\n const { items } = action;\n return { ...state, items };\n case types.SETMEDIALASTPAGE:\n return { ...state, lastPage: action.page };\n case types.SETMEDIACONFIG:\n return { ...state, config: { ...state.config, ...action.config } };\n case types.SETMEDIATAGS:\n return { ...state, tags: action.tags };\n case types.SETMEDIAARCHIVES:\n return { ...state, archives: action.archives };\n case types.SETITEM:\n return { ...state, item: action.item };\n case types.UPDATEMEDIALIST:\n const index = state.items.findIndex((item: MediaItem) => {\n if (item.media_id === action.item.media_id) {\n return true;\n }\n return false;\n });\n return {\n ...state,\n items: [...state.items.slice(0, index), action.item, ...state.items.slice(index + 1)],\n };\n case types.SETMEDIALARGESIZE:\n return { ...state, largeSize: action.largeSize };\n case types.SETFORMTOKEN:\n return { ...state, formToken: action.formToken };\n case types.SETLABEL:\n return { ...state, label: action.label };\n case types.SETMEDIATOTAL:\n return { ...state, total: action.total };\n case types.SETLOADING:\n return { ...state, loading: action.loading };\n case types.SETSELECTEDTAGS:\n return { ...state, selectedTags: action.tags };\n case types.SETMEDIAEXTENSIONS:\n return { ...state, extensions: action.extensions };\n default:\n return state;\n }\n};\n","import { call, put, takeEvery, select } from 'redux-saga/effects';\n\nimport * as types from '../constants';\nimport {\n fetchMediaList as fetchMediaListAction,\n setMediaList,\n setMediaLargeSize,\n setMediaLastPage,\n setMediaConfig,\n setMediaArchives,\n setMediaTags,\n setMediaTotal,\n setLoading,\n setMediaExtensions,\n} from './actions';\nimport { MediaListApiResponse, MediaStateProps } from '../types';\nimport { getMediaTransport } from '../runtime';\n\nexport function* fetchTagList() {\n const transport = getMediaTransport();\n const data: string[] = yield call([transport, transport.fetchTagList]);\n yield put(setMediaTags(data));\n}\n\nexport function* fetchMediaList({ config = {} }: ReturnType<typeof fetchMediaListAction>) {\n const transport = getMediaTransport();\n const state: MediaStateProps = yield select();\n const setting = { ...state.config, ...config };\n yield put(setLoading(true));\n yield put(setLoading(false));\n const data: MediaListApiResponse = yield call([transport, transport.fetchMediaList], setting);\n const { items } = data;\n const newItems = items.map((item) => {\n const find = state.items.find((stateItem) => {\n if (item.media_id === stateItem.media_id) {\n return true;\n }\n return false;\n });\n if (find) {\n return { ...item, checked: find.checked };\n }\n return item;\n });\n yield put(setMediaList(newItems));\n yield put(setMediaLastPage(data.pageAmount));\n yield put(setMediaTotal(data.total));\n yield put(setMediaLargeSize(data.largeSize));\n yield put(setMediaArchives(data.archives));\n yield put(setMediaTags(data.tags));\n yield put(setMediaExtensions(data.extensions));\n if (config) {\n yield put(setMediaConfig(config));\n }\n}\n\nexport default function* rootSaga() {\n yield takeEvery(types.FETCHMEDIALIST, fetchMediaList);\n yield takeEvery(types.FETCHTAGLIST, fetchTagList);\n}\n","import { Component, createRef } from 'react';\nimport DOMPurify from 'dompurify';\nimport { emit } from '@ablogcms/events';\nimport { pending } from '@ablogcms/pending';\nimport ResizeImage from '@ablogcms/lib/resize-image-util';\nimport { formatBytes, dataURItoBlob, triggerEvent } from '@ablogcms/utils';\nimport CopyToClipboard from '@ablogcms/components/copy-to-clipboard';\nimport { Tabs, TabPanel } from '@ablogcms/components/tabs';\nimport Modal, { ModalBody, ModalFooter, ModalHeader } from '@ablogcms/components/modal';\nimport { Table, TableBody, TableRow, TableHead, TableCell } from '@ablogcms/components/table';\nimport { CreatableSelect } from '@ablogcms/components/rich-select';\nimport { HStack } from '@ablogcms/components/stack';\nimport VisuallyHidden from '@ablogcms/components/visually-hidden';\nimport { AutoResizeTextarea, type AutoResizeTextareaRef } from '@ablogcms/components/textarea';\nimport { Slot } from '@ablogcms/components/slot-fill';\nimport MediaEditModal from '../media-edit-modal/media-edit-modal';\nimport type { FocalPoint, MediaItem, MediaTag } from '../../types';\nimport { getFocalPoint } from '../../utils';\nimport { getMediaTransport } from '../../runtime';\nimport { fetchPdfPage } from './pdf-previewer';\n\nconst delimiter = ',';\nconst resizeImage = new ResizeImage();\n\n/**\n * Slot `media.edit-modal.field.alt`(HOOKS.md 参照)の fillProps。\n * `ACMS.Config.mediaShowAltAndCaptionOnModal` が off のとき alt 行ごと非表示になり、この Slot も\n * 一緒に消える仕様(alt 生成という文脈から離れる置き場所を避けるため、行外には置かない)。\n */\nexport interface MediaEditModalAltFillProps {\n item: MediaItem;\n /** 差し替え中の画像も反映済みのプレビュー URL */\n previewSrc: string;\n /** textarea の現在値 */\n getAlt: () => string;\n /** `AutoResizeTextarea` の `setValue`(内部 state・DOM 値の両方を更新する imperative handle)経由で書き戻す。高さの自動リサイズも追随する */\n setAlt: (value: string) => void;\n}\n\n/** Slot `media.edit-modal.fields` の fillProps。独自メタパネルの受け皿(config 非依存で常時表示) */\nexport interface MediaEditModalFieldsFillProps {\n item: MediaItem;\n}\n\n/** Slot `media.edit-modal.footer` の fillProps */\nexport interface MediaEditModalFooterFillProps {\n item: MediaItem;\n /** 保存直前の FormData(`buildFormData('ACMS_POST_Media_Update')` と同じ内容)を組み立てて返す */\n getFormData: () => FormData;\n}\n\ntype MediaModalState = {\n isEditDialogOpen: boolean;\n blob: Blob | null;\n file: File | null;\n preview: string;\n pdfPreviewSrc: string;\n pdfHasPrevPage: boolean;\n pdfHasNextPage: boolean;\n pdfPage: number;\n focalPoint: FocalPoint;\n replaced: boolean; // check if the image is updated via input type=\"file\"\n activeTab: string;\n};\n\ninterface MediaModalProps\n extends Pick<\n React.ComponentPropsWithoutRef<typeof Modal>,\n 'isOpen' | 'onClose' | 'onAfterClose' | 'onAfterOpen' | 'container'\n > {\n formToken: string;\n item: MediaItem | null;\n tags?: string[];\n onUpdate?: (media: MediaItem) => void;\n actions: typeof import('../../stores/actions');\n}\n\nexport default class MediaModal extends Component<MediaModalProps, MediaModalState> {\n form: HTMLFormElement | null;\n\n filenameInputRef: React.RefObject<HTMLInputElement | null>;\n\n tagsInputRef: React.RefObject<HTMLInputElement | null>;\n\n altTextareaRef: React.RefObject<AutoResizeTextareaRef | null>;\n\n modalRef: React.RefObject<HTMLDivElement | null>;\n\n root: HTMLElement;\n\n static defaultProps = {\n tags: [],\n };\n\n constructor(props: MediaModalProps | Readonly<MediaModalProps>) {\n super(props);\n this.state = {\n isEditDialogOpen: false,\n file: null,\n blob: null,\n preview: props.item ? this.getDefaultPreview(props.item) : '',\n replaced: false,\n pdfPreviewSrc: '',\n pdfHasPrevPage: false,\n pdfHasNextPage: false,\n pdfPage: props.item?.media_pdf_page ? parseInt(props.item.media_pdf_page, 10) : 1,\n focalPoint: props.item ? getFocalPoint(props.item) : [50, 50],\n activeTab: 'edit',\n };\n this.root = document.createElement('div');\n\n this.form = null;\n this.modalRef = createRef();\n this.filenameInputRef = createRef();\n this.tagsInputRef = createRef();\n this.altTextareaRef = createRef();\n }\n\n componentDidMount(): void {\n (this.props.container || document.body).appendChild(this.root);\n }\n\n getDefaultPreview(item: MediaItem) {\n if (item.media_type === 'file') {\n return item.media_thumbnail;\n }\n return `${item.media_edited}?date=${item.media_last_modified}`;\n }\n\n handleAfterClose() {\n this.props.actions.setItem(null);\n\n const { onAfterClose } = this.props;\n if (onAfterClose) {\n onAfterClose();\n }\n }\n\n handleAfterOpen() {\n const { onAfterOpen, item } = this.props;\n if (item !== null) {\n this.setState({\n focalPoint: getFocalPoint(item),\n pdfPage: parseInt(item.media_pdf_page, 10) || 1,\n });\n }\n if (onAfterOpen) {\n onAfterOpen();\n }\n }\n\n componentDidUpdate(prevProps: Readonly<MediaModalProps>) {\n const { item } = this.props;\n\n if (prevProps.item !== item && item !== null) {\n if (item.media_ext.toLowerCase() === 'pdf') {\n this.pdfPreview(item.media_permalink, parseInt(item.media_pdf_page, 10) || 1);\n } else {\n this.setState({\n preview: this.getDefaultPreview(item),\n });\n }\n this.setState({\n focalPoint: getFocalPoint(item),\n pdfPage: parseInt(item.media_pdf_page, 10) || 1,\n });\n }\n }\n\n setFormRef(node: HTMLFormElement) {\n this.form = node;\n }\n\n componentWillUnmount() {\n this.root.parentElement?.removeChild(this.root);\n }\n\n async pdfPreview(url: string, page: number) {\n const res = await fetchPdfPage(url, page);\n if (res.image !== false) {\n this.setState({\n pdfPreviewSrc: res.image,\n pdfHasPrevPage: res.hasPrev,\n pdfHasNextPage: res.hasNext,\n pdfPage: res.currentPage,\n });\n }\n }\n\n async pdfPrevPage(e: React.MouseEvent<HTMLButtonElement>) {\n e.preventDefault();\n\n const { item } = this.props;\n if (!item) return;\n const url = item.media_permalink;\n const prevPage = Math.max(1, (this.state.pdfPage || 1) - 1);\n await this.pdfPreview(url, prevPage);\n }\n\n async pdfNextPage(e: React.MouseEvent<HTMLButtonElement>) {\n e.preventDefault();\n\n const { item } = this.props;\n if (!item) return;\n const url = item.media_permalink;\n const nextPage = (this.state.pdfPage || 1) + 1;\n await this.pdfPreview(url, nextPage);\n }\n\n hideModal() {\n // 再度開いたときにメディアが開かないようにモーダルのURLを削除\n if ('history' in window) {\n history.replaceState(null, '', '#');\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n\n handleClose() {\n this.hideModal();\n }\n\n isImageMedia(state: MediaModalState, props: MediaModalProps) {\n if (state.blob && state.blob.type.match(/image/)) {\n return true;\n }\n if (!state.replaced && props.item?.media_type === 'image') {\n return true;\n }\n\n return false;\n }\n\n isSvgMedia(state: MediaModalState, props: MediaModalProps) {\n if (state.file && state.file.type === 'image/svg+xml') {\n return true;\n }\n if (!state.replaced && props.item?.media_type === 'svg') {\n return true;\n }\n\n return false;\n }\n\n isFileMedia(state: MediaModalState, props: MediaModalProps) {\n if (state.file && state.file.type !== 'image/svg+xml') {\n return true;\n }\n if (!state.replaced && props.item?.media_type === 'file') {\n return true;\n }\n\n return false;\n }\n\n isPdfFile(state: MediaModalState, props: MediaModalProps) {\n if (state.file && state.file.type === 'application/pdf') {\n return true;\n }\n if (!state.replaced && props.item?.media_type === 'file' && props.item.media_ext.toLowerCase() === 'pdf') {\n return true;\n }\n\n return false;\n }\n\n buildFormData(postName: string) {\n const { blob, file, focalPoint, replaced, pdfPreviewSrc } = this.state;\n const formData = new FormData(this.form as HTMLFormElement);\n if (blob) {\n formData.append('media_file', blob);\n } else if (file) {\n formData.append('media_file', file);\n }\n if (Array.isArray(focalPoint) && focalPoint.length > 0) {\n formData.append('media[]', 'focal_x');\n formData.append('media[]', 'focal_y');\n formData.append('focal_x', `${focalPoint[0]}`);\n formData.append('focal_y', `${focalPoint[1]}`);\n }\n if (replaced) {\n formData.append('media[]', 'replaced');\n formData.append('replaced', 'true');\n }\n if (this.isFileMedia(this.state, this.props) && this.isPdfFile(this.state, this.props) && pdfPreviewSrc) {\n formData.append('media_pdf_thumbnail', dataURItoBlob(pdfPreviewSrc));\n formData.append('media[]', 'pdf_page');\n formData.append('pdf_page', String(this.state.pdfPage || 1));\n }\n formData.append(postName, 'true');\n formData.append('formToken', window.csrfToken);\n return formData;\n }\n\n updateStateOnAfterSave(mediaItem: MediaItem) {\n this.setState({\n file: null, // メディアを更新した場合はファイルをリセット。リセットしないと再度保存時にメディアを変更していない場合でもファイルが変更されるというアラートが出てしまう。\n blob: null, // メディアを更新した場合はファイルをリセット。リセットしないと再度保存時にメディアを変更していない場合でもファイルが変更されるというアラートが出てしまう。\n replaced: false,\n focalPoint: getFocalPoint(mediaItem), // ローカルで保持している焦点座標の状態を更新(再度モーダルを開いたときに更新を反映するため)\n pdfPage: parseInt(mediaItem.media_pdf_page, 10) || 1, // ローカルで保持しているPDFページの状態を更新(再度モーダルを開いたときに更新を反映するため)\n });\n }\n\n async update(item: MediaItem) {\n const { actions } = this.props;\n\n const { file, blob } = this.state;\n const formData = this.buildFormData('ACMS_POST_Media_Update');\n if (file || blob) {\n const msg = file ? ACMS.i18n('media.file_changed') : ACMS.i18n('media.img_changed');\n if (!confirm(msg)) {\n return;\n }\n }\n\n // ゲート: 保存前に案件固有の検査(alt 必須化・NG ワード検査等)を挟める拡張ポイント。\n // ハンドラ0件・プラグイン未読み込みでも emit は { canceled: false, event: 元の payload } で解決するため、\n // 既存の必須バリデーション(サーバ側)を置き換えない上乗せ。\n const gateResult = await emit('media.update.before', { item, formData });\n if (gateResult.canceled) {\n if (gateResult.reason) {\n alert(gateResult.reason);\n }\n return;\n }\n\n const end = pending.splash(ACMS.i18n('media.saving'));\n getMediaTransport()\n .updateMedia(item.media_id, gateResult.event.formData)\n .then((res) => {\n end();\n if ('status' in res && res.status === 'failure') {\n if (res.message) {\n alert(res.message);\n } else {\n alert(ACMS.i18n('media.cannot_edit'));\n }\n return;\n }\n actions.updateMediaList(res as MediaItem);\n if (this.props.onUpdate) {\n this.props.onUpdate(res as MediaItem);\n }\n // 通知: 新バス → レガシー DOM イベントの順で二重発火する(決定事項: レガシーとの併走方針)。\n // 通知イベントの emit は待たない。\n void emit('media.update.success', { item: res as MediaItem });\n triggerEvent(document, 'acms.media-updated', {\n detail: { data: res as MediaItem },\n bubbles: true,\n });\n this.hideModal();\n this.updateStateOnAfterSave(res as MediaItem);\n });\n }\n\n async uploadAsNew(item: MediaItem) {\n const { actions } = this.props;\n const formData = this.buildFormData('ACMS_POST_Media_UpdateAsNew');\n\n // ゲート: 別名保存はレガシー DOM イベント(acms.media-updated)すら飛ばない非対称があり、\n // 通知の価値が高い(HOOKS.md 参照)。\n const gateResult = await emit('media.update-as-new.before', { item, formData });\n if (gateResult.canceled) {\n if (gateResult.reason) {\n alert(gateResult.reason);\n }\n return;\n }\n\n const end = pending.splash(ACMS.i18n('media.saving'));\n getMediaTransport()\n .updateMediaAsNew(item.media_id, gateResult.event.formData)\n .then((res) => {\n end();\n if ('status' in res && res.status === 'failure') {\n if (res.message) {\n alert(res.message);\n } else {\n alert(ACMS.i18n('media.cannot_edit'));\n }\n return;\n }\n actions.fetchMediaList();\n if (this.props.onUpdate) {\n this.props.onUpdate(res as MediaItem);\n }\n void emit('media.update-as-new.success', { item: res as MediaItem });\n this.hideModal();\n this.updateStateOnAfterSave(res as MediaItem);\n });\n }\n\n makeTags(label: string) {\n if (!label) {\n return null;\n }\n const labels = label.split(delimiter);\n return labels.map((label) => ({\n value: label,\n label,\n }));\n }\n\n handleTagsChange(tags: readonly MediaTag[]) {\n const value = tags.reduce((val, tag, idx) => {\n if (idx === 0) {\n return tag.value;\n }\n return `${val}${delimiter}${tag.value}`;\n }, '');\n\n if (this.tagsInputRef.current) {\n this.tagsInputRef.current.value = value;\n }\n }\n\n openEditDialog() {\n this.setState({\n isEditDialogOpen: true,\n });\n }\n\n blobToDataURL(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e: ProgressEvent<FileReader>) => {\n if (!(e.target instanceof FileReader)) {\n reject(new Error('Failed to load blob'));\n return;\n }\n resolve(e.target.result as string);\n };\n fr.readAsDataURL(blob);\n });\n }\n\n handleEditDialogClose() {\n this.setState({\n isEditDialogOpen: false,\n });\n }\n\n handleCrop(blob: Blob | null, focalPoint: FocalPoint) {\n if (blob) {\n this.blobToDataURL(blob).then((preview: string) => {\n if (focalPoint) {\n this.setState({\n preview,\n blob,\n focalPoint,\n });\n } else {\n this.setState({\n preview,\n blob,\n });\n }\n });\n }\n this.setState({\n isEditDialogOpen: false,\n });\n }\n\n async changeImage(e: React.ChangeEvent<HTMLInputElement>) {\n if (!(e.target instanceof HTMLInputElement)) {\n return;\n }\n if (!e.target.files) {\n return;\n }\n const { item } = this.props;\n if (item === null) {\n return;\n }\n const file: File = e.target.files[0];\n\n const type = file.type.match(/svg/) ? 'svg' : file.type.match(/image/) ? 'image' : 'file';\n const isHeic = /(heic|heif)/i.test(file.type);\n\n if (item.media_type !== type) {\n alert(ACMS.i18n('media.cannnot_change_type'));\n return false;\n }\n const nextState: Partial<Pick<MediaModalState, keyof MediaModalState>> = {\n replaced: true,\n };\n if (type === 'image') {\n if (isHeic) {\n const { heicTo } = await import(/* webpackChunkName: \"heic-to\" */ 'heic-to');\n const result = await heicTo({\n blob: file,\n type: 'image/jpeg',\n });\n const blob = Array.isArray(result) ? result[0] : result;\n if (!(blob instanceof Blob)) {\n throw new Error('Invalid blob result from heicTo');\n }\n const preview = await this.blobToDataURL(blob);\n nextState.preview = preview;\n nextState.blob = blob;\n } else {\n // lgImg はログイン時のみ出力されるが、メディアモーダルはログイン必須の管理画面でのみ使用される\n const [resizeType, largeSize] = ACMS.Config.lgImg!.split(':');\n const { blob, resize } = await resizeImage.getBlobFromFile(file, resizeType, parseInt(largeSize, 10));\n const preview = await this.blobToDataURL(blob);\n nextState.preview = preview;\n if (resize === false || ACMS.Config.mediaClientResize !== 'on') {\n nextState.blob = file;\n } else {\n nextState.blob = blob;\n }\n }\n } else if (type === 'svg') {\n const textData = await file.text();\n const clean = DOMPurify.sanitize(textData, { USE_PROFILES: { svg: true, svgFilters: true } });\n const reBlob = new Blob([clean], { type: 'image/svg+xml' });\n nextState.file = new File([reBlob], file.name, { type: reBlob.type });\n nextState.preview = await this.blobToDataURL(nextState.file);\n } else if (type === 'file') {\n nextState.file = file;\n if (file.type === 'application/pdf') {\n const url = URL.createObjectURL(file);\n this.pdfPreview(url, 1);\n } else {\n // Todo: ファイルタイプによってプレビュー画像を変更する(設定によって変わるのでphp/ACMS/function.php の pathIcon 関数を参照)\n nextState.preview = `${ACMS.Config.root}themes/system/images/fileicon/document.svg`;\n }\n }\n // ファイル名を更新\n if (this.filenameInputRef.current) {\n this.filenameInputRef.current.value = file.name;\n }\n this.setState(nextState as MediaModalState);\n }\n\n imageWidth(size: string) {\n const [width] = size.split(' x ');\n return parseInt(width, 10);\n }\n\n imageHeight(size: string) {\n const [, height] = size.split(' x ');\n return parseInt(height, 10);\n }\n\n render() {\n const { item, formToken, tags, isOpen } = this.props;\n const { isEditDialogOpen, preview, pdfHasPrevPage, pdfHasNextPage, pdfPreviewSrc, focalPoint } = this.state;\n\n return (\n <>\n <Modal\n ref={this.modalRef}\n isOpen={isOpen}\n onClose={this.handleClose.bind(this)}\n size=\"large\"\n container={this.root}\n onAfterClose={this.handleAfterClose.bind(this)}\n onAfterOpen={this.handleAfterOpen.bind(this)}\n aria-labelledby=\"acms-media-modal-title\"\n >\n <ModalHeader>{ACMS.i18n('media.media_edit')}</ModalHeader>\n <ModalBody>\n {item && (\n <form className=\"acms-admin-form\" ref={this.setFormRef.bind(this)}>\n <div className=\"acms-admin-media-modal-layout\">\n <div className=\"acms-admin-media-modal-preview\">\n {this.isImageMedia(this.state, this.props) && (\n <div className=\"acms-admin-media-thumb-container acms-admin-margin-bottom-small\">\n {item.media_ext !== 'svg' && (\n <button\n className=\"acms-admin-media-edit-btn acms-admin-media-edit-thumb-btn\"\n type=\"button\"\n onClick={this.openEditDialog.bind(this)}\n >\n {ACMS.i18n('media.edit')}\n </button>\n )}\n <div style={{ backgroundImage: `url(\"${preview}\")` }} className=\"acms-admin-media-thumb\" />\n </div>\n )}\n {this.isSvgMedia(this.state, this.props) && (\n <div className=\"acms-admin-media-thumb-container acms-admin-margin-bottom-small acms-admin-media-thumb-container-assets\">\n <div className=\"acms-admin-media-thumb-assets\" style={{ width: '80%' }}>\n <img\n src={preview}\n style={{\n margin: 'auto',\n display: 'block',\n width: 'auto',\n maxWidth: '100%',\n objectFit: 'contain',\n }}\n alt=\"\"\n />\n </div>\n </div>\n )}\n {this.isFileMedia(this.state, this.props) &&\n (this.isPdfFile(this.state, this.props) ? (\n <div className=\"acms-admin-media-thumb-container acms-admin-margin-bottom-small acms-admin-media-thumb-container-assets\">\n <div className=\"acms-admin-media-thumb-assets\" style={{ width: '70%' }}>\n <img\n src={pdfPreviewSrc}\n className=\"acms-admin-media-thumb-box\"\n style={{\n margin: 'auto',\n display: 'block',\n width: 'auto',\n maxWidth: '100%',\n objectFit: 'contain',\n }}\n alt=\"\"\n />\n </div>\n <div style={{ marginTop: '5px' }} className=\"acms-admin-media-thumb-pager\">\n {pdfHasPrevPage && (\n <button\n type=\"button\"\n className=\"acms-admin-media-thumb-pager-arrow acms-admin-media-thumb-pager-arrow-left\"\n onClick={this.pdfPrevPage.bind(this)}\n >\n <span className=\"acms-admin-icon-arrow-small-left\" />\n <VisuallyHidden>前ページ</VisuallyHidden>\n </button>\n )}\n {pdfHasNextPage && (\n <button\n type=\"button\"\n className=\"acms-admin-media-thumb-pager-arrow acms-admin-media-thumb-pager-arrow-right\"\n onClick={this.pdfNextPage.bind(this)}\n >\n <span className=\"acms-admin-icon-arrow-small-right\" />\n <VisuallyHidden>次ページ</VisuallyHidden>\n </button>\n )}\n </div>\n </div>\n ) : (\n <div className=\"acms-admin-media-thumb-container acms-admin-margin-bottom-small acms-admin-media-thumb-container-assets\">\n <div className=\"acms-admin-media-thumb-assets\" style={{ width: '70%' }}>\n <img\n className=\"acms-admin-media-thumb-box\"\n src={preview}\n style={{ margin: 'auto', display: 'block', width: '70px' }}\n alt=\"\"\n />\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"acms-admin-media-modal-info\">\n <Tabs>\n <TabPanel label={ACMS.i18n('media.edit')} id=\"media-edit\">\n <Table variant=\"unstyled\" className=\"acms-admin-media-table-edit\">\n <TableBody>\n <TableRow>\n <TableHead>\n {ACMS.i18n('media.media_change')}\n <i\n className=\"acms-admin-icon-tooltip acms-admin-margin-left-mini js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.managed_media_change')}\n />\n </TableHead>\n <TableCell>\n <label aria-label={ACMS.i18n('media.managed_media_change')}>\n <input type=\"file\" onChange={this.changeImage.bind(this)} />\n </label>\n </TableCell>\n </TableRow>\n {item.media_type === 'file' && (\n <TableRow>\n <TableHead nowrap>\n {ACMS.i18n('media.status')}\n <i\n className=\"acms-admin-icon-tooltip js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.status_settings')}\n />\n </TableHead>\n <TableCell>\n <select\n name=\"status\"\n defaultValue={item.media_status}\n style={{\n maxWidth: 'max-content',\n width: '100%',\n }}\n >\n <option value=\"entry\">{ACMS.i18n('media.follow_media_status')}</option>\n <option value=\"open\">{ACMS.i18n('media.open')}</option>\n <option value=\"close\">{ACMS.i18n('media.close')}</option>\n <option value=\"secret\">{ACMS.i18n('media.secret')}</option>\n </select>\n <input type=\"hidden\" name=\"media[]\" value=\"status\" />\n </TableCell>\n </TableRow>\n )}\n <TableRow\n style={{\n display:\n typeof ACMS !== 'undefined' &&\n ACMS.Config &&\n ACMS.Config.mediaShowAltAndCaptionOnModal\n ? 'table-row'\n : 'none',\n }}\n >\n <TableHead nowrap>\n <label\n id={`media-modal-filename-label-${item.media_id}`}\n htmlFor={`media-modal-filename-${item.media_id}`}\n >\n {ACMS.i18n('media.filename')}\n </label>\n <i\n className=\"acms-admin-icon-tooltip acms-admin-margin-left-mini js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.filename_settings')}\n />\n </TableHead>\n <TableCell>\n <input\n ref={this.filenameInputRef}\n type=\"text\"\n id={`media-modal-filename-${item.media_id}`}\n aria-labelledby={`media-modal-filename-label-${item.media_id}`}\n defaultValue={item.media_title}\n name=\"file_name\"\n className=\"acms-admin-form-width-full\"\n />\n <input type=\"hidden\" name=\"media[]\" value=\"file_name\" />\n </TableCell>\n </TableRow>\n <TableRow>\n <TableHead nowrap>\n {ACMS.i18n('media.tag')}\n <i\n className=\"acms-admin-icon-tooltip acms-admin-margin-left-mini js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.managed_tag')}\n />\n </TableHead>\n <TableCell>\n <CreatableSelect<MediaTag, true>\n isMulti\n defaultValue={this.makeTags(item.media_label)}\n className=\"acms-admin-form-width-full\"\n onChange={this.handleTagsChange.bind(this)}\n options={\n tags &&\n tags.map((tag) => ({\n label: tag,\n value: tag,\n }))\n }\n placeholder={ACMS.i18n('media.tag_select_placeholder')}\n noOptionsMessage={() => ACMS.i18n('media.tag_select_no_options_message')}\n formatCreateLabel={(inputValue) => ACMS.i18n('media.add_tag', { name: inputValue })}\n isValidNewOption={(inputValue) => inputValue.trim().length > 0}\n closeMenuOnSelect={false}\n hideSelectedOptions\n />\n <input\n ref={this.tagsInputRef}\n type=\"hidden\"\n defaultValue={item.media_label}\n name=\"media_label\"\n />\n <input type=\"hidden\" name=\"media[]\" value=\"media_label\" />\n </TableCell>\n </TableRow>\n <TableRow\n style={{\n display:\n typeof ACMS !== 'undefined' &&\n ACMS.Config &&\n ACMS.Config.mediaShowAltAndCaptionOnModal\n ? 'table-row'\n : 'none',\n }}\n >\n <TableHead nowrap>\n <label\n id={`media-modal-caption-label-${item.media_id}`}\n htmlFor={`media-modal-caption-${item.media_id}`}\n >\n {ACMS.i18n('media.caption')}\n </label>\n <i\n className=\"acms-admin-icon-tooltip acms-admin-margin-left-mini js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.caption_settings')}\n />\n </TableHead>\n <TableCell>\n <input\n type=\"text\"\n id={`media-modal-caption-${item.media_id}`}\n aria-labelledby={`media-modal-caption-label-${item.media_id}`}\n defaultValue={item.media_caption}\n name=\"field_1\"\n className=\"acms-admin-form-width-full\"\n />\n <input type=\"hidden\" name=\"media[]\" value=\"field_1\" />\n </TableCell>\n </TableRow>\n <TableRow\n style={{\n display:\n typeof ACMS !== 'undefined' &&\n ACMS.Config &&\n ACMS.Config.mediaShowAltAndCaptionOnModal\n ? 'table-row'\n : 'none',\n }}\n >\n <TableHead nowrap>\n <label\n id={`media-modal-alt-label-${item.media_id}`}\n htmlFor={`media-modal-alt-${item.media_id}`}\n >\n {ACMS.i18n('media.alt')}\n </label>\n <i\n className=\"acms-admin-icon-tooltip acms-admin-margin-left-mini js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.alt_settings')}\n />\n </TableHead>\n <TableCell>\n <AutoResizeTextarea\n ref={this.altTextareaRef}\n id={`media-modal-alt-${item.media_id}`}\n aria-labelledby={`media-modal-alt-label-${item.media_id}`}\n defaultValue={item.media_alt}\n name=\"field_3\"\n className=\"acms-admin-form-width-full\"\n />\n <Slot<MediaEditModalAltFillProps>\n name=\"media.edit-modal.field.alt\"\n fillProps={{\n item,\n previewSrc: preview,\n getAlt: () => this.altTextareaRef.current?.value ?? '',\n setAlt: (value) => this.altTextareaRef.current?.setValue(value),\n }}\n />\n <input type=\"hidden\" name=\"media[]\" value=\"field_3\" />\n </TableCell>\n </TableRow>\n {item.media_type !== 'file' && (\n <TableRow>\n <TableHead nowrap>\n <label\n id={`media-modal-link-label-${item.media_id}`}\n htmlFor={`media-modal-link-${item.media_id}`}\n >\n {ACMS.i18n('media.link')}\n </label>\n <i\n className=\"acms-admin-icon-tooltip acms-admin-margin-left-mini js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.link_settings')}\n />\n </TableHead>\n <TableCell>\n <input\n type=\"text\"\n id={`media-modal-link-${item.media_id}`}\n aria-labelledby={`media-modal-link-label-${item.media_id}`}\n defaultValue={item.media_link}\n name=\"field_2\"\n className=\"acms-admin-form-width-full\"\n />\n <input type=\"hidden\" name=\"media[]\" value=\"field_2\" />\n </TableCell>\n </TableRow>\n )}\n <TableRow>\n <TableHead nowrap>\n <label\n id={`media-modal-memo-label-${item.media_id}`}\n htmlFor={`media-modal-memo-${item.media_id}`}\n >\n {ACMS.i18n('media.memo')}\n </label>\n <i\n className=\"acms-admin-icon-tooltip acms-admin-margin-left-mini js-acms-tooltip-hover\"\n data-acms-position=\"top\"\n data-acms-tooltip={ACMS.i18n('media.memo_settings')}\n />\n </TableHead>\n <TableCell>\n <textarea\n id={`media-modal-memo-${item.media_id}`}\n aria-labelledby={`media-modal-memo-label-${item.media_id}`}\n defaultValue={item.media_text}\n name=\"field_4\"\n className=\"acms-admin-form-width-full\"\n />\n <input type=\"hidden\" name=\"media[]\" value=\"field_4\" />\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n <Slot<MediaEditModalFieldsFillProps> name=\"media.edit-modal.fields\" fillProps={{ item }} />\n </TabPanel>\n <TabPanel label={ACMS.i18n('media.info')} id=\"media-info\">\n <Table variant=\"unstyled\" className=\"acms-admin-media-table-edit\">\n <TableBody>\n <TableRow>\n <TableHead>{ACMS.i18n('media.media_id')}</TableHead>\n <TableCell>\n <span className=\"acms-admin-label\">{item.media_id}</span>\n </TableCell>\n </TableRow>\n <TableRow>\n <TableHead>{ACMS.i18n('media.upload_date')}</TableHead>\n <TableCell>\n {item.media_datetime}\n <input type=\"hidden\" name=\"upload_date\" value={item.media_datetime} />\n <input type=\"hidden\" name=\"media[]\" value=\"upload_date\" />\n </TableCell>\n </TableRow>\n <TableRow>\n <TableHead>{ACMS.i18n('media.user_name')}</TableHead>\n <TableCell>\n {item.media_user_name}\n <input type=\"hidden\" name=\"user_id\" value={item.media_user_id} />\n <input type=\"hidden\" name=\"media[]\" value=\"user_id\" />\n </TableCell>\n </TableRow>\n <TableRow>\n <TableHead>{ACMS.i18n('media.last_modified')}</TableHead>\n <TableCell>{item.media_last_modified}</TableCell>\n </TableRow>\n {item.media_last_update_user_name !== '' && (\n <TableRow>\n <TableHead>{ACMS.i18n('media.last_update_user_name')}</TableHead>\n <TableCell>\n {item.media_last_update_user_name}\n <input\n type=\"hidden\"\n name=\"last_update_user_id\"\n value={item.media_last_update_user_id}\n />\n <input type=\"hidden\" name=\"media[]\" value=\"last_update_user_id\" />\n </TableCell>\n </TableRow>\n )}\n {item.media_type === 'image' && (\n <TableRow>\n <TableHead>{ACMS.i18n('media.image_size')}</TableHead>\n <TableCell>{item.media_size} px</TableCell>\n </TableRow>\n )}\n <TableRow>\n <TableHead>{ACMS.i18n('media.file_size')}</TableHead>\n <TableCell>{formatBytes(item.media_filesize)}</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TabPanel>\n </Tabs>\n <div className=\"acms-admin-media-clipboard\">\n <Table variant=\"unstyled\" className=\"acms-admin-table-admin-media-edit\">\n <TableBody>\n {this.isFileMedia(this.state, this.props) && (\n <TableRow>\n <TableHead nowrap>{ACMS.i18n('media.entity_path')}</TableHead>\n <TableCell>\n <div className=\"acms-admin-form-input-group\">\n <input\n type=\"text\"\n value={decodeURI(item.media_path)}\n readOnly\n className=\"acms-admin-form-width-full\"\n disabled\n style={{\n cursor: 'auto',\n }}\n />\n <CopyToClipboard\n text={item.media_path}\n tooltipMessage={ACMS.i18n('media.intrinsic_link_copied')}\n >\n <span className=\"acms-admin-form-side-btn\">\n <button type=\"button\" className=\"acms-admin-btn\">\n {ACMS.i18n('media.copy')}\n </button>\n </span>\n </CopyToClipboard>\n </div>\n <p style={{ fontSize: '12px', marginTop: '5px' }} className=\"acms-admin-text-primary\">\n {ACMS.i18n('media.entity_path_attention')}\n </p>\n </TableCell>\n </TableRow>\n )}\n <TableRow>\n <TableHead nowrap>{ACMS.i18n('media.permalink')}</TableHead>\n <TableCell>\n <div className=\"acms-admin-form-input-group\">\n <input\n type=\"text\"\n value={item.media_permalink}\n readOnly\n className=\"acms-admin-form-width-full\"\n disabled\n style={{\n cursor: 'auto',\n }}\n />\n <CopyToClipboard\n text={item.media_permalink}\n tooltipMessage={ACMS.i18n('media.permalink_copied')}\n >\n <span className=\"acms-admin-form-side-btn\">\n <button type=\"button\" className=\"acms-admin-btn\">\n {ACMS.i18n('media.copy')}\n </button>\n </span>\n </CopyToClipboard>\n </div>\n <p\n style={{ fontSize: '12px', marginTop: '5px', marginBottom: 0 }}\n className=\"acms-admin-text-danger\"\n >\n {ACMS.i18n('media.permalink_attention')}\n </p>\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n </div>\n </div>\n <input type=\"hidden\" name=\"formToken\" value={formToken} />\n {item.media_ext && <input type=\"hidden\" name=\"extension\" value={item.media_ext.toUpperCase()} />}\n <input type=\"hidden\" name=\"type\" value={item.media_type} />\n <input type=\"hidden\" name=\"media[]\" value=\"extension\" />\n <input type=\"hidden\" name=\"media[]\" value=\"type\" />\n <input type=\"hidden\" name=\"file_size\" value={item.media_size} />\n <input type=\"hidden\" name=\"media[]\" value=\"file_size\" />\n <input type=\"hidden\" name=\"path\" value={item.media_path} />\n <input type=\"hidden\" name=\"media[]\" value=\"path\" />\n </form>\n )}\n </ModalBody>\n <ModalFooter className=\"acms-admin-media-modal-footer\">\n <HStack>\n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-media-cancel-btn\"\n onClick={this.hideModal.bind(this)}\n >\n {ACMS.i18n('media.cancel')}\n </button>\n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-btn-primary\"\n onClick={() => {\n if (item) {\n this.uploadAsNew(item);\n }\n }}\n >\n {ACMS.i18n('media.save_as_new')}\n </button>\n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-btn-primary\"\n onClick={() => {\n if (item) {\n this.update(item);\n }\n }}\n >\n {ACMS.i18n('media.save')}\n </button>\n {item && (\n <Slot<MediaEditModalFooterFillProps>\n name=\"media.edit-modal.footer\"\n fillProps={{ item, getFormData: () => this.buildFormData('ACMS_POST_Media_Update') }}\n />\n )}\n </HStack>\n </ModalFooter>\n </Modal>\n {item && (\n <MediaEditModal\n isOpen={isEditDialogOpen}\n onClose={this.handleEditDialogClose.bind(this)}\n onCrop={this.handleCrop.bind(this)}\n src={preview || item.media_edited}\n original={item.media_original}\n focalPoint={focalPoint}\n width={this.imageWidth(item.media_size)}\n height={this.imageHeight(item.media_size)}\n mediaCropSizes={ACMS.Config.mediaCropSizes}\n container={this.root}\n />\n )}\n </>\n );\n }\n}\n","import { Component } from 'react';\nimport { ClientRect, DndContext, DragEndEvent, Modifier, getClientRect, useDraggable } from '@dnd-kit/core';\nimport { CSS, Transform } from '@dnd-kit/utilities';\nimport Cropper from 'cropperjs';\nimport classnames from 'classnames';\n\nimport { calcHeightFromRatio, calcVhToPx, calcWidthFromRatio } from '@ablogcms/utils';\nimport { ExtendedFile } from '@ablogcms/lib/read-files';\nimport { DropZone } from '@ablogcms/components/drop-zone';\nimport Modal, { ModalBody, ModalFooter, ModalHeader } from '@ablogcms/components/modal';\nimport 'cropperjs/dist/cropper.css';\nimport { HStack } from '@ablogcms/components/stack';\nimport rotateIcon from '../../assets/images/media-rotate-icon.svg';\nimport focalPointIcon from '../../assets/images/media-focal-point.svg';\nimport cropIcon from '../../assets/images/media-crop-icon.svg';\nimport focalUI from '../../assets/images/media-crop-focal.svg';\nimport { FocalPoint } from '../../types';\nimport { coordinatesToTransform, focalPointToCoordinates } from '../../utils';\n\n/**\n * 画像の最大高を指定\n * admin/_media.scss の .acms-cropper-wrap / .acms-cropper-img-container img の\n * height/max-height (55vh) と値を合わせること(SCSS からこの定数は参照できないため)\n */\nconst MAX_HEIGHT_VH = 55;\n\ninterface MediaEditModalProps {\n onClose: () => void;\n onCrop: (blob: Blob | null, focalPoint: FocalPoint) => void;\n isOpen: boolean;\n src: string;\n focalPoint: FocalPoint;\n mediaCropSizes: [number, number][];\n title?: string;\n width: number;\n height: number;\n original?: string;\n container?: HTMLElement;\n}\n\ninterface MediaEditModalState {\n upload: boolean;\n blob?: Blob | null;\n cropWidth: number;\n cropHeight: number;\n useFocalPoint: boolean;\n focalPoint: FocalPoint;\n zoom: number;\n ratio: number;\n src: string;\n timeout: ReturnType<typeof setTimeout> | null;\n isCropListOpen: boolean;\n}\n\n/**\n * ドラッグ可能な要素の可動域を指定された範囲内に制限する\n * @see https://github.com/clauderic/dnd-kit/blob/master/packages/modifiers/src/utilities/restrictToBoundingRect.ts\n */\nfunction restrictToBoundingRect(transform: Transform, rect: ClientRect, boundingRect: ClientRect): Transform {\n const value = {\n ...transform,\n };\n if (rect.top + transform.y <= boundingRect.top) {\n value.y = boundingRect.top - rect.top;\n } else if (rect.bottom + transform.y >= boundingRect.top + boundingRect.height) {\n value.y = boundingRect.top + boundingRect.height - rect.bottom;\n }\n if (rect.left + transform.x <= boundingRect.left) {\n value.x = boundingRect.left - rect.left;\n } else if (rect.right + transform.x >= boundingRect.left + boundingRect.width) {\n value.x = boundingRect.left + boundingRect.width - rect.right;\n }\n return value;\n}\n\ninterface DraggableFocalPointProps {\n children: React.ReactNode;\n focalPointTransform: Transform;\n}\n\nfunction DraggableFocalPoint({ children, focalPointTransform }: DraggableFocalPointProps) {\n const { attributes, listeners, setNodeRef, transform } = useDraggable({\n id: 'focal-point',\n });\n\n const style = {\n transform: CSS.Translate.toString(transform),\n position: 'absolute' as const,\n left: `calc(50% + ${focalPointTransform.x}px)`,\n top: `calc(50% + ${focalPointTransform.y}px)`,\n };\n\n return (\n <button\n type=\"button\"\n ref={setNodeRef}\n className=\"acms-admin-focal-point-btn\"\n style={style}\n {...listeners}\n {...attributes}\n aria-label={ACMS.i18n('media.focal_point_button_label')}\n >\n {children}\n </button>\n );\n}\n\nexport default class MediaEditModal extends Component<MediaEditModalProps, MediaEditModalState> {\n image: HTMLImageElement | null;\n\n cropper: Cropper | null;\n\n constructor(props: MediaEditModalProps) {\n super(props);\n this.state = {\n blob: null,\n upload: false,\n cropWidth: 0,\n cropHeight: 0,\n zoom: 1,\n ratio: 0,\n src: '',\n useFocalPoint: false,\n focalPoint: props.focalPoint,\n timeout: null,\n isCropListOpen: false,\n };\n this.cropper = null;\n this.image = null;\n }\n\n componentWillUnmount(): void {\n if (this.cropper) {\n this.cropper.destroy();\n }\n }\n\n setImageRef(node: HTMLImageElement | null) {\n this.image = node;\n if (node !== null && this.cropper === null) {\n this.cropper = new Cropper(node, {\n autoCrop: false,\n zoomable: false,\n responsive: true,\n viewMode: 2,\n crop: (e) => {\n const data = e.detail;\n if (data.width || data.height) {\n this.setState({\n cropWidth: data.width,\n cropHeight: data.height,\n });\n } else {\n this.setState({\n cropWidth: 0,\n cropHeight: 0,\n });\n }\n },\n autoCropArea: 1,\n dragMode: 'none' as Cropper.DragMode,\n });\n }\n }\n\n handleAfterOpen() {\n const { focalPoint } = this.props;\n this.setState({\n focalPoint, // モーダルが開いた時に、親コンポーネントから渡された focalPoint を state にセット\n });\n }\n\n handleAfterClose() {\n if (this.cropper) {\n this.cropper.destroy();\n this.cropper = null;\n }\n this.setState({\n cropWidth: 0,\n cropHeight: 0,\n ratio: 0,\n useFocalPoint: false,\n });\n }\n\n onCancel() {\n this.setState({\n cropWidth: 0,\n cropHeight: 0,\n ratio: 0,\n useFocalPoint: false,\n focalPoint: this.props.focalPoint,\n });\n this.props.onClose();\n }\n\n onCrop() {\n if (!this.image) {\n return;\n }\n if (!this.cropper) {\n return;\n }\n let mimeType = 'image/png';\n if (this.image.src) {\n const lastIndex = this.image.src.lastIndexOf('?');\n const src = lastIndex === -1 ? this.image.src : this.image.src.substring(0, lastIndex);\n if (src.slice(-3) !== 'png') {\n mimeType = 'image/jpeg';\n }\n }\n this.cropper.getCroppedCanvas().toBlob((blob) => {\n const { focalPoint } = this.state;\n this.props.onCrop(blob, focalPoint);\n }, mimeType);\n }\n\n onUploadImg(files: ExtendedFile[]) {\n if (!files.length) {\n return;\n }\n if (files[0].filetype === 'image') {\n this.cropper?.replace(files[0].preview);\n }\n }\n\n useOriginalImg() {\n if (this.props.original) {\n this.cropper?.replace(this.props.original);\n }\n }\n\n changeAspectRatio(ratioProp: number) {\n if (!this.cropper) {\n return;\n }\n const { ratio } = this.state;\n this.cropper.clear();\n\n if (ratioProp === ratio || (isNaN(ratioProp) && isNaN(ratio))) {\n this.setState({\n ratio: 0,\n });\n return;\n }\n this.cropper.setAspectRatio(ratioProp);\n this.cropper.crop();\n this.setState({\n ratio: ratioProp,\n });\n }\n\n rotate(rotate: number) {\n if (!this.cropper) {\n return;\n }\n const data = this.cropper.getCropBoxData();\n const contData = this.cropper.getContainerData();\n data.width = 2;\n data.height = 2;\n data.top = 0;\n const leftNew = contData.width / 2 - 1;\n data.left = leftNew;\n this.cropper.setCropBoxData(data);\n this.cropper.rotate(rotate);\n const canvData = this.cropper.getCanvasData();\n const heightOld = canvData.height;\n const heightNew = heightOld > contData.height ? contData.height : heightOld;\n const koef = heightNew / heightOld;\n const widthNew = canvData.width * koef;\n canvData.height = heightNew;\n canvData.width = widthNew;\n canvData.top = 0;\n if (canvData.width >= contData.width) {\n canvData.left = 0;\n } else {\n canvData.left = (contData.width - canvData.width) / 2;\n }\n if (canvData.height >= contData.height) {\n canvData.top = 0;\n } else {\n canvData.top = (contData.height - canvData.height) / 2;\n }\n this.cropper.setCanvasData(canvData);\n data.left = 0;\n data.top = 0;\n data.width = canvData.width;\n data.height = canvData.height;\n this.cropper.setCropBoxData(data);\n }\n\n toggleFocalPoint() {\n const { useFocalPoint } = this.state;\n this.setState({\n useFocalPoint: !useFocalPoint,\n });\n }\n\n handleFocalDragEnd = (event: DragEndEvent) => {\n if (!this.cropper) {\n return;\n }\n const { delta } = event;\n\n const canvas = this.cropper.getCanvasData();\n const { width, height } = canvas;\n const { focalPoint } = this.state;\n const focalPointCoordinates = focalPointToCoordinates(focalPoint, canvas);\n\n const x = ((focalPointCoordinates.x + delta.x) / width) * 100;\n const y = ((focalPointCoordinates.y + delta.y) / height) * 100;\n\n // Clamp values between 0 and 100 to keep within bounds\n const percentX = Math.max(0, Math.min(100, x));\n const percentY = Math.max(0, Math.min(100, y));\n\n this.setState({\n focalPoint: [percentX, percentY],\n });\n };\n\n focalPointToTransform = (focalPoint: FocalPoint): Transform => {\n if (!this.cropper) {\n return { x: 0, y: 0, scaleX: 1, scaleY: 1 };\n }\n const canvas = this.cropper.getCanvasData();\n const coordinates = focalPointToCoordinates(focalPoint, canvas);\n const transform = coordinatesToTransform(coordinates, canvas);\n return transform;\n };\n\n hoverOnCropList = () => {\n if (this.state.timeout) {\n clearTimeout(this.state.timeout);\n }\n this.setState({\n isCropListOpen: true,\n });\n };\n\n leaveFromCropList = () => {\n const timeout = setTimeout(() => {\n this.setState({\n isCropListOpen: false,\n });\n }, 500);\n this.setState({\n timeout,\n });\n };\n\n toggleCropList = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n const { isCropListOpen } = this.state;\n this.setState({\n isCropListOpen: !isCropListOpen,\n });\n };\n\n restrictToCanvas: Modifier = ({ draggingNodeRect, transform }) => {\n if (!this.cropper) {\n return transform;\n }\n if (!draggingNodeRect) {\n return transform;\n }\n\n // @ts-expect-error Cropper の型定義には canvas が存在しないが、実際には存在する\n const canvasRect = getClientRect(this.cropper.canvas);\n\n // canvasRect をカスタマイズして、ボタンが動ける範囲を制限\n const width = canvasRect.width + draggingNodeRect.width;\n const height = canvasRect.height + draggingNodeRect.height;\n const left = canvasRect.left - draggingNodeRect.width / 2;\n const right = canvasRect.right + draggingNodeRect.width / 2;\n const top = canvasRect.top - draggingNodeRect.height / 2;\n const bottom = canvasRect.bottom + draggingNodeRect.height / 2;\n\n const restrictedCanvasRect: ClientRect = {\n width,\n height,\n left,\n right,\n top,\n bottom,\n };\n\n return restrictToBoundingRect(transform, draggingNodeRect, restrictedCanvasRect);\n };\n\n getImgWidth(width: number, height: number) {\n const ratio = width / height;\n const heightVh = calcVhToPx(MAX_HEIGHT_VH);\n\n // 画像の高さが指定した高さを超える場合は、高さを指定した高さに合わせて幅を計算\n const imageWidth = calcWidthFromRatio(ratio, Math.min(heightVh, height));\n const imageHeight = calcHeightFromRatio(ratio, imageWidth);\n\n return `${Math.max(imageWidth, imageHeight)}px`;\n }\n\n render() {\n const { cropWidth, cropHeight, ratio, useFocalPoint, isCropListOpen, focalPoint } = this.state;\n const { src, original, mediaCropSizes, title, width, height, isOpen, container } = this.props;\n\n return (\n <Modal\n className=\"acms-admin-media-edit-modal\"\n isOpen={isOpen}\n onClose={this.onCancel.bind(this)}\n size=\"large\"\n container={container}\n onAfterOpen={this.handleAfterOpen.bind(this)}\n onAfterClose={this.handleAfterClose.bind(this)}\n aria-labelledby=\"acms-media-edit-modal-title\"\n >\n <ModalHeader>{`${ACMS.i18n('media.edit_image')}${title ? ` - ${title}` : ''}`}</ModalHeader>\n <ModalBody>\n <div>\n <DropZone onComplete={this.onUploadImg.bind(this)}>\n <div>\n <div className=\"acms-admin-cropper-container\">\n {cropWidth > 0 && cropHeight > 0 && (\n <div className=\"acms-admin-cropper-crop-info\">\n <img src={cropIcon} className=\"acms-admin-cropper-crop-info-img\" alt=\"\" />\n <input type=\"text\" className=\"acms-admin-cropper-crop-info-input\" value={cropWidth} readOnly />\n <span className=\"acms-admin-cropper-crop-info-text\">×</span>\n <input type=\"text\" className=\"acms-admin-cropper-crop-info-input\" value={cropHeight} readOnly />\n </div>\n )}\n <div className=\"acms-admin-cropper-wrap\">\n <div\n className=\"acms-admin-cropper-img-container\"\n // windowリサイズ時に画像が必要以上に大きくならないようにするため、maxWidth を指定\n style={{ maxWidth: this.getImgWidth(width, height) }}\n >\n <img src={src} ref={this.setImageRef.bind(this)} className=\"acms-admin-img-responsive\" alt=\"\" />\n {useFocalPoint && (\n <DndContext onDragEnd={this.handleFocalDragEnd.bind(this)} modifiers={[this.restrictToCanvas]}>\n <DraggableFocalPoint focalPointTransform={this.focalPointToTransform(focalPoint)}>\n <span\n className=\"acms-admin-cropper-focal-point\"\n style={{ backgroundImage: `url(${focalUI})` }}\n aria-hidden\n />\n </DraggableFocalPoint>\n </DndContext>\n )}\n </div>\n </div>\n </div>\n </div>\n </DropZone>\n <div className=\"acms-admin-form acms-admin-cropper-bottom\">\n <div className=\"acms-admin-cropper-group-wrap\">\n <div className=\"acms-admin-cropper-group\">\n <div className=\"acms-admin-cropper-crop-list-wrap\">\n <button\n type=\"button\"\n className=\"acms-admin-cropper-btn\"\n onMouseOver={this.hoverOnCropList}\n onMouseLeave={this.leaveFromCropList}\n onFocus={this.hoverOnCropList}\n onBlur={this.leaveFromCropList}\n onClick={this.toggleCropList}\n >\n <img src={cropIcon} className=\"acms-admin-cropper-icon\" alt=\"\" />\n <span className=\"acms-admin-cropper-btn-txt\">{ACMS.i18n('media.crop')}</span>\n </button>\n {isCropListOpen && (\n <div\n className=\"acms-admin-cropper-crop-list\"\n onMouseOver={this.hoverOnCropList}\n onMouseLeave={this.leaveFromCropList}\n onFocus={this.hoverOnCropList}\n onBlur={this.leaveFromCropList}\n >\n <button\n type=\"button\"\n className={classnames('acms-admin-cropper-list-btn', {\n active: isNaN(ratio),\n })}\n onClick={(e) => {\n e.preventDefault();\n this.changeAspectRatio(NaN);\n this.setState({\n isCropListOpen: false,\n });\n }}\n >\n {ACMS.i18n('media.custom')}\n </button>\n {mediaCropSizes.map((size) => (\n <button\n key={size.join('x')}\n type=\"button\"\n className={classnames('acms-admin-cropper-list-btn', {\n active: ratio === size[0] / size[1],\n })}\n onClick={(e) => {\n e.preventDefault();\n this.changeAspectRatio(size[0] / size[1]);\n this.setState({\n isCropListOpen: false,\n });\n }}\n >\n {`${size[0]} / ${size[1]}`}\n </button>\n ))}\n </div>\n )}\n </div>\n <button\n type=\"button\"\n className=\"acms-admin-cropper-btn\"\n onClick={(e) => {\n e.preventDefault();\n this.rotate(90);\n }}\n >\n <img src={rotateIcon} className=\"acms-admin-cropper-icon\" alt=\"\" />\n <span className=\"acms-admin-cropper-btn-txt\">{ACMS.i18n('media.rotate')}</span>\n </button>\n <button\n type=\"button\"\n className={classnames('acms-admin-cropper-btn', {\n active: useFocalPoint,\n })}\n onClick={(e) => {\n e.preventDefault();\n this.toggleFocalPoint();\n }}\n >\n <img src={focalPointIcon} className=\"acms-admin-cropper-icon\" alt=\"\" />\n <span className=\"acms-admin-cropper-btn-txt\">{ACMS.i18n('media.focal_point')}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n </ModalBody>\n <ModalFooter>\n <HStack display=\"inline-flex\">\n {original && (\n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-btn-text\"\n onClick={this.useOriginalImg.bind(this)}\n >\n {ACMS.i18n('media.initialize')}\n </button>\n )}\n <button type=\"button\" className=\"acms-admin-btn\" onClick={this.onCancel.bind(this)}>\n {ACMS.i18n('media.cancel')}\n </button>\n <button type=\"button\" className=\"acms-admin-btn acms-admin-btn-info\" onClick={this.onCrop.bind(this)}>\n {ACMS.i18n('media.apply')}\n </button>\n </HStack>\n </ModalFooter>\n </Modal>\n );\n }\n}\n","import { Transform } from '@dnd-kit/utilities';\nimport { FocalPoint, FocalPointCoordinates, MediaItem } from '../types';\n\nexport function getFocalPoint(media: MediaItem): FocalPoint {\n return media.media_focal_point\n ? (media.media_focal_point.split(',').map((str) => parseFloat(str)) as FocalPoint)\n : [50, 50];\n}\n\nexport function coordinatesToTransform(\n focalPointCoordinates: FocalPointCoordinates,\n canvas: Cropper.CanvasData\n): Transform {\n // focalPoint を使用して座標を計算\n const { x, y } = focalPointCoordinates;\n\n // transform の値として返す\n return {\n x: x - canvas.width / 2,\n y: y - canvas.height / 2,\n scaleX: 1,\n scaleY: 1,\n };\n}\n\nexport function focalPointToCoordinates(\n focalPoint: [number, number],\n canvas: Cropper.CanvasData\n): FocalPointCoordinates {\n const [x, y] = focalPoint;\n const percentX = x / 100;\n const percentY = y / 100;\n return {\n x: canvas.width * percentX,\n y: canvas.height * percentY,\n };\n}\n","export type PdfPageResult = {\n image: string | false; // dataURL (失敗時 false)\n hasPrev: boolean;\n hasNext: boolean;\n currentPage: number;\n};\n\ntype Pdf2Image = typeof import('@ablogcms/lib/pdf2image').default;\n\nlet Pdf2ImageClass: Pdf2Image | undefined;\n\n// URLごとのインスタンスと、pageごとの in-flight 合流・結果キャッシュ\nconst instanceByUrl = new Map<string, InstanceType<Pdf2Image>>();\nconst inflightByKey = new Map<string, Promise<PdfPageResult>>();\nconst resultCacheByKey = new Map<string, PdfPageResult>();\n\nconst keyOf = (url: string, page: number) => `${url}|${page}`;\n\nasync function getInstance(url: string) {\n if (!Pdf2ImageClass) {\n const { default: pdf2image } = await import(/* webpackChunkName: \"pdf2image\" */ '@ablogcms/lib/pdf2image');\n Pdf2ImageClass = pdf2image;\n }\n let inst = instanceByUrl.get(url);\n if (!inst) {\n inst = new Pdf2ImageClass(url);\n instanceByUrl.set(url, inst);\n }\n return inst;\n}\n\n/** 同じ url|page は1本に合流し、完了後はキャッシュから返す */\nexport async function fetchPdfPage(url: string, page: number): Promise<PdfPageResult> {\n const key = keyOf(url, page);\n\n // 完全キャッシュ\n const cached = resultCacheByKey.get(key);\n if (cached) return cached;\n\n // 進行中に合流\n const running = inflightByKey.get(key);\n if (running) return running;\n\n const p = (async () => {\n const inst = await getInstance(url);\n const image = await inst.getPageImage(page);\n const [hasPrev, hasNext] = await Promise.all([inst.hasPrevPage(), inst.hasNextPage()]);\n const res: PdfPageResult = {\n image,\n hasPrev,\n hasNext,\n currentPage: inst.currentPage,\n };\n if (image !== false) {\n resultCacheByKey.set(key, res);\n }\n return res;\n })();\n\n inflightByKey.set(key, p);\n try {\n return await p;\n } finally {\n inflightByKey.delete(key);\n }\n}\n"],"mappings":"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","names":["fetchTagList","fetchMediaList","Component","Modal","ModalBody","ModalFooter","ModalHeader","HStack","jsx","jsxs","Component","label","Modal","ModalHeader","ModalBody","ModalFooter","HStack"]}
|