@ablogcms/media 3.2.28-beta.0 → 3.2.29

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 (29) hide show
  1. package/dist/{chunk-5P6HFS6L.mjs → chunk-2FTUIE3I.mjs} +2 -2
  2. package/dist/{chunk-JJTHI4QP.mjs → chunk-J26FETK2.mjs} +13 -54
  3. package/dist/chunk-J26FETK2.mjs.map +1 -0
  4. package/dist/{chunk-32U7ADG2.mjs → chunk-MZAVCJIC.mjs} +3 -3
  5. package/dist/chunk-MZAVCJIC.mjs.map +1 -0
  6. package/dist/{chunk-KQNVYJOK.mjs → chunk-XLN3FIK4.mjs} +8 -5
  7. package/dist/{chunk-KQNVYJOK.mjs.map → chunk-XLN3FIK4.mjs.map} +1 -1
  8. package/dist/{chunk-LAZAMWG6.mjs → chunk-ZFNOFCCD.mjs} +3 -3
  9. package/dist/components/media-admin/media-admin.mjs +2 -2
  10. package/dist/components/media-droparea/media-droparea.d.ts +1 -1
  11. package/dist/components/media-droparea/media-droparea.mjs +4 -4
  12. package/dist/components/media-droparea/media-droparea.mjs.map +1 -1
  13. package/dist/components/media-edit-modal/media-edit-modal.d.ts +1 -1
  14. package/dist/components/media-insert/media-insert.mjs +3 -3
  15. package/dist/components/media-unit/media-unit.d.ts +1 -1
  16. package/dist/components/media-unit/media-unit.mjs +5 -5
  17. package/dist/components/media-update/media-update.mjs +2 -2
  18. package/dist/components/media-uploader/media-uploader.d.ts +1 -1
  19. package/dist/containers/media-admin.d.ts +1 -1
  20. package/dist/containers/media-insert.d.ts +2 -2
  21. package/dist/setup-media-unit.mjs +16 -9
  22. package/dist/setup-media-unit.mjs.map +1 -1
  23. package/dist/utils/index.d.ts +6 -0
  24. package/package.json +22 -19
  25. package/dist/chunk-32U7ADG2.mjs.map +0 -1
  26. package/dist/chunk-JJTHI4QP.mjs.map +0 -1
  27. package/dist/components/media-modal/pdf-previewer.d.ts +0 -8
  28. /package/dist/{chunk-5P6HFS6L.mjs.map → chunk-2FTUIE3I.mjs.map} +0 -0
  29. /package/dist/{chunk-LAZAMWG6.mjs.map → chunk-ZFNOFCCD.mjs.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  actions_exports,
4
4
  reducer_default,
5
5
  rootSaga
6
- } from "./chunk-JJTHI4QP.mjs";
6
+ } from "./chunk-J26FETK2.mjs";
7
7
  import {
8
8
  getMediaFillStore,
9
9
  getMediaTransport
@@ -87,4 +87,4 @@ var media_update_default2 = MediaUpdate;
87
87
  export {
88
88
  media_update_default2 as media_update_default
89
89
  };
90
- //# sourceMappingURL=chunk-5P6HFS6L.mjs.map
90
+ //# sourceMappingURL=chunk-2FTUIE3I.mjs.map
@@ -188,7 +188,8 @@ import { Component as Component2, createRef } from "react";
188
188
  import DOMPurify from "dompurify";
189
189
  import { emit } from "@ablogcms/events";
190
190
  import { pending } from "@ablogcms/pending";
191
- import ResizeImage from "@ablogcms/lib/resize-image-util";
191
+ import ResizeImage from "@ablogcms/resize-image";
192
+ import { fetchPdfPage } from "@ablogcms/pdf/fetch-pdf-page";
192
193
  import { formatBytes, dataURItoBlob, triggerEvent } from "@ablogcms/utils";
193
194
  import CopyToClipboard from "@ablogcms/components/copy-to-clipboard";
194
195
  import { Tabs, TabPanel } from "@ablogcms/components/tabs";
@@ -225,6 +226,13 @@ var media_crop_icon_default = "./media-crop-icon-LD2QEJHL.svg";
225
226
  var media_crop_focal_default = "./media-crop-focal-OQHAYXEP.svg";
226
227
 
227
228
  // src/utils/index.ts
229
+ function createPdfWorkerSource() {
230
+ return {
231
+ workerSrc: `${ACMS.Config.root}js/dest/pdf.worker.js`,
232
+ cMapUrl: `${ACMS.Config.root}js/dest/cmaps/`,
233
+ wasmUrl: `${ACMS.Config.root}js/dest/wasm/`
234
+ };
235
+ }
228
236
  function getFocalPoint(media) {
229
237
  return media.media_focal_point ? media.media_focal_point.split(",").map((str) => parseFloat(str)) : [50, 50];
230
238
  }
@@ -711,56 +719,6 @@ var MediaEditModal = class extends Component {
711
719
  }
712
720
  };
713
721
 
714
- // src/components/media-modal/pdf-previewer.ts
715
- var Pdf2ImageClass;
716
- var instanceByUrl = /* @__PURE__ */ new Map();
717
- var inflightByKey = /* @__PURE__ */ new Map();
718
- var resultCacheByKey = /* @__PURE__ */ new Map();
719
- var keyOf = (url, page) => `${url}|${page}`;
720
- async function getInstance(url) {
721
- if (!Pdf2ImageClass) {
722
- const { default: pdf2image } = await import(
723
- /* webpackChunkName: "pdf2image" */
724
- "@ablogcms/lib/pdf2image"
725
- );
726
- Pdf2ImageClass = pdf2image;
727
- }
728
- let inst = instanceByUrl.get(url);
729
- if (!inst) {
730
- inst = new Pdf2ImageClass(url);
731
- instanceByUrl.set(url, inst);
732
- }
733
- return inst;
734
- }
735
- async function fetchPdfPage(url, page) {
736
- const key = keyOf(url, page);
737
- const cached = resultCacheByKey.get(key);
738
- if (cached) return cached;
739
- const running = inflightByKey.get(key);
740
- if (running) return running;
741
- const p = (async () => {
742
- const inst = await getInstance(url);
743
- const image = await inst.getPageImage(page);
744
- const [hasPrev, hasNext] = await Promise.all([inst.hasPrevPage(), inst.hasNextPage()]);
745
- const res = {
746
- image,
747
- hasPrev,
748
- hasNext,
749
- currentPage: inst.currentPage
750
- };
751
- if (image !== false) {
752
- resultCacheByKey.set(key, res);
753
- }
754
- return res;
755
- })();
756
- inflightByKey.set(key, p);
757
- try {
758
- return await p;
759
- } finally {
760
- inflightByKey.delete(key);
761
- }
762
- }
763
-
764
722
  // src/components/media-modal/media-modal.tsx
765
723
  import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
766
724
  var delimiter = ",";
@@ -848,7 +806,7 @@ var MediaModal = class extends Component2 {
848
806
  this.root.parentElement?.removeChild(this.root);
849
807
  }
850
808
  async pdfPreview(url, page) {
851
- const res = await fetchPdfPage(url, page);
809
+ const res = await fetchPdfPage(url, page, createPdfWorkerSource());
852
810
  if (res.image !== false) {
853
811
  this.setState({
854
812
  pdfPreviewSrc: res.image,
@@ -1221,7 +1179,7 @@ var MediaModal = class extends Component2 {
1221
1179
  }
1222
1180
  ) }) }),
1223
1181
  this.isFileMedia(this.state, this.props) && (this.isPdfFile(this.state, this.props) ? /* @__PURE__ */ jsxs2("div", { className: "acms-admin-media-thumb-container acms-admin-margin-bottom-small acms-admin-media-thumb-container-assets", children: [
1224
- /* @__PURE__ */ jsx2("div", { className: "acms-admin-media-thumb-assets", style: { width: "70%" }, children: /* @__PURE__ */ jsx2(
1182
+ /* @__PURE__ */ jsx2("div", { className: "acms-admin-media-thumb-assets", style: { width: "70%" }, children: pdfPreviewSrc && /* @__PURE__ */ jsx2(
1225
1183
  "img",
1226
1184
  {
1227
1185
  src: pdfPreviewSrc,
@@ -1776,8 +1734,9 @@ var MediaModal = class extends Component2 {
1776
1734
 
1777
1735
  export {
1778
1736
  actions_exports,
1737
+ createPdfWorkerSource,
1779
1738
  MediaModal,
1780
1739
  reducer_default,
1781
1740
  rootSaga
1782
1741
  };
1783
- //# sourceMappingURL=chunk-JJTHI4QP.mjs.map
1742
+ //# sourceMappingURL=chunk-J26FETK2.mjs.map
@@ -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"],"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/resize-image';\nimport { fetchPdfPage } from '@ablogcms/pdf/fetch-pdf-page';\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, createPdfWorkerSource } from '../../utils';\nimport { getMediaTransport } from '../../runtime';\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 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, createPdfWorkerSource());\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 {pdfPreviewSrc && (\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 )}\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/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 type { PdfWorkerSource } from '@ablogcms/pdf';\nimport { FocalPoint, FocalPointCoordinates, MediaItem } from '../types';\n\n/**\n * @ablogcms/pdf のグローバル依存除去(ACMS.Config を options 引数に注入する設計)に伴い、\n * 呼び出し側であるこのファイルに ACMS.Config.root 参照を閉じ込める。\n */\nexport function createPdfWorkerSource(): PdfWorkerSource {\n return {\n workerSrc: `${ACMS.Config.root}js/dest/pdf.worker.js`,\n cMapUrl: `${ACMS.Config.root}js/dest/cmaps/`,\n wasmUrl: `${ACMS.Config.root}js/dest/wasm/`,\n };\n}\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"],"mappings":";;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,iBAAiB;AACvB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AAGvB,IAAM,UAAU;AAChB,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAC1B,IAAM,eAAe;AACrB,IAAM,WAAW;AAEjB,IAAM,mBAAmB;AACzB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AACtB,IAAM,aAAa;AACnB,IAAM,kBAAkB;AACxB,IAAM,qBAAqB;;;ADf3B,IAAM,eAAe,OAAO,EAAE,MAAY,aAAa;AACvD,IAAM,iBAAiB,CAAC,YAA8B,EAAE,MAAY,gBAAgB,OAAO;AAC3F,IAAM,eAAe,CAAC,WAAwB,EAAE,MAAY,cAAc,MAAM;AAChF,IAAM,iBAAiB,CAAC,YAAsC,EAAE,MAAY,gBAAgB,OAAO;AACnG,IAAM,mBAAmB,CAAC,UAAkB,EAAE,MAAY,kBAAkB,KAAK;AACjF,IAAM,oBAAoB,CAAC,eAAuB,EAAE,MAAY,mBAAmB,UAAU;AAC7F,IAAM,eAAe,CAAC,eAAuB,EAAE,MAAY,cAAc,UAAU;AACnF,IAAM,UAAU,CAAC,UAA4B,EAAE,MAAY,SAAS,KAAK;AACzE,IAAM,kBAAkB,CAAC,UAAqB,EAAE,MAAY,iBAAiB,KAAK;AAClF,IAAM,WAAW,CAAC,WAAmB,EAAE,MAAY,UAAU,MAAM;AACnE,IAAM,mBAAmB,CAAC,cAAwB,EAAE,MAAY,kBAAkB,SAAS;AAC3F,IAAM,eAAe,CAAC,UAAoB,EAAE,MAAY,cAAc,KAAK;AAC3E,IAAM,gBAAgB,CAAC,WAAmB,EAAE,MAAY,eAAe,MAAM;AAC7E,IAAM,aAAa,CAAC,aAAsB,EAAE,MAAY,YAAY,QAAQ;AAC5E,IAAM,kBAAkB,CAAC,UAAoB,EAAE,MAAY,iBAAiB,KAAK;AACjF,IAAM,qBAAqB,CAAC,gBAA0B,EAAE,MAAY,oBAAoB,WAAW;;;AEd1G,IAAM,eAAgC;AAAA,EACpC,OAAO,CAAC;AAAA,EACR,UAAU,CAAC;AAAA,EACX,MAAM,CAAC;AAAA,EACP,YAAY,CAAC;AAAA,EACb,cAAc,CAAC;AAAA,EACf,MAAM;AAAA,EACN,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT;AAAA;AAAA;AAAA;AAIF;AAIA,IAAO,kBAAQ,CAAC,QAAQ,cAAc,WAAmB;AACvD,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAW;AACT,YAAM,EAAE,MAAM,IAAI;AAClB,aAAO,EAAE,GAAG,OAAO,MAAM;AAAA,IAC3B,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,UAAU,OAAO,KAAK;AAAA,IAC3C,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,QAAQ,EAAE,GAAG,MAAM,QAAQ,GAAG,OAAO,OAAO,EAAE;AAAA,IACnE,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,MAAM,OAAO,KAAK;AAAA,IACvC,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,UAAU,OAAO,SAAS;AAAA,IAC/C,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,MAAM,OAAO,KAAK;AAAA,IACvC,KAAW;AACT,YAAM,QAAQ,MAAM,MAAM,UAAU,CAAC,SAAoB;AACvD,YAAI,KAAK,aAAa,OAAO,KAAK,UAAU;AAC1C,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,CAAC;AACD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,CAAC,GAAG,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,MAAM,GAAG,MAAM,MAAM,MAAM,QAAQ,CAAC,CAAC;AAAA,MACtF;AAAA,IACF,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,WAAW,OAAO,UAAU;AAAA,IACjD,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,WAAW,OAAO,UAAU;AAAA,IACjD,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,OAAO,OAAO,MAAM;AAAA,IACzC,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,OAAO,OAAO,MAAM;AAAA,IACzC,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,SAAS,OAAO,QAAQ;AAAA,IAC7C,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,cAAc,OAAO,KAAK;AAAA,IAC/C,KAAW;AACT,aAAO,EAAE,GAAG,OAAO,YAAY,OAAO,WAAW;AAAA,IACnD;AACE,aAAO;AAAA,EACX;AACF;;;AClFA,SAAS,MAAM,KAAK,WAAW,cAAc;AAkBtC,UAAUA,gBAAe;AAC9B,QAAM,YAAY,kBAAkB;AACpC,QAAM,OAAiB,MAAM,KAAK,CAAC,WAAW,UAAU,YAAY,CAAC;AACrE,QAAM,IAAI,aAAa,IAAI,CAAC;AAC9B;AAEO,UAAUC,gBAAe,EAAE,SAAS,CAAC,EAAE,GAA4C;AACxF,QAAM,YAAY,kBAAkB;AACpC,QAAM,QAAyB,MAAM,OAAO;AAC5C,QAAM,UAAU,EAAE,GAAG,MAAM,QAAQ,GAAG,OAAO;AAC7C,QAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,QAAM,IAAI,WAAW,KAAK,CAAC;AAC3B,QAAM,OAA6B,MAAM,KAAK,CAAC,WAAW,UAAU,cAAc,GAAG,OAAO;AAC5F,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,WAAW,MAAM,IAAI,CAAC,SAAS;AACnC,UAAM,OAAO,MAAM,MAAM,KAAK,CAAC,cAAc;AAC3C,UAAI,KAAK,aAAa,UAAU,UAAU;AACxC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AACD,QAAI,MAAM;AACR,aAAO,EAAE,GAAG,MAAM,SAAS,KAAK,QAAQ;AAAA,IAC1C;AACA,WAAO;AAAA,EACT,CAAC;AACD,QAAM,IAAI,aAAa,QAAQ,CAAC;AAChC,QAAM,IAAI,iBAAiB,KAAK,UAAU,CAAC;AAC3C,QAAM,IAAI,cAAc,KAAK,KAAK,CAAC;AACnC,QAAM,IAAI,kBAAkB,KAAK,SAAS,CAAC;AAC3C,QAAM,IAAI,iBAAiB,KAAK,QAAQ,CAAC;AACzC,QAAM,IAAI,aAAa,KAAK,IAAI,CAAC;AACjC,QAAM,IAAI,mBAAmB,KAAK,UAAU,CAAC;AAC7C,MAAI,QAAQ;AACV,UAAM,IAAI,eAAe,MAAM,CAAC;AAAA,EAClC;AACF;AAEe,UAAR,WAA6B;AAClC,QAAM,UAAgB,gBAAgBA,eAAc;AACpD,QAAM,UAAgB,cAAcD,aAAY;AAClD;;;AC3DA,SAAS,aAAAE,YAAW,iBAAiB;AACrC,OAAO,eAAe;AACtB,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,OAAO,iBAAiB;AACxB,SAAS,oBAAoB;AAC7B,SAAS,aAAa,eAAe,oBAAoB;AACzD,OAAO,qBAAqB;AAC5B,SAAS,MAAM,gBAAgB;AAC/B,OAAOC,UAAS,aAAAC,YAAW,eAAAC,cAAa,eAAAC,oBAAmB;AAC3D,SAAS,OAAO,WAAW,UAAU,WAAW,iBAAiB;AACjE,SAAS,uBAAuB;AAChC,SAAS,UAAAC,eAAc;AACvB,OAAO,oBAAoB;AAC3B,SAAS,0BAAsD;AAC/D,SAAS,YAAY;;;ACfrB,SAAS,iBAAiB;AAC1B,SAAqB,YAAoC,eAAe,oBAAoB;AAC5F,SAAS,WAAsB;AAC/B,OAAO,aAAa;AACpB,OAAO,gBAAgB;AAEvB,SAAS,qBAAqB,YAAY,0BAA0B;AAEpE,SAAS,gBAAgB;AACzB,OAAO,SAAS,WAAW,aAAa,mBAAmB;AAC3D,OAAO;AACP,SAAS,cAAc;A;;;;;;;;;;;;;;ACHhB,SAAS,wBAAyC;AACvD,SAAO;AAAA,IACL,WAAW,GAAG,KAAK,OAAO,IAAI;AAAA,IAC9B,SAAS,GAAG,KAAK,OAAO,IAAI;AAAA,IAC5B,SAAS,GAAG,KAAK,OAAO,IAAI;AAAA,EAC9B;AACF;AAEO,SAAS,cAAc,OAA8B;AAC1D,SAAO,MAAM,oBACR,MAAM,kBAAkB,MAAM,GAAG,EAAE,IAAI,CAAC,QAAQ,WAAW,GAAG,CAAC,IAChE,CAAC,IAAI,EAAE;AACb;AAEO,SAAS,uBACd,uBACA,QACW;AAEX,QAAM,EAAE,GAAG,EAAE,IAAI;AAGjB,SAAO;AAAA,IACL,GAAG,IAAI,OAAO,QAAQ;AAAA,IACtB,GAAG,IAAI,OAAO,SAAS;AAAA,IACvB,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,wBACd,YACA,QACuB;AACvB,QAAM,CAAC,GAAG,CAAC,IAAI;AACf,QAAM,WAAW,IAAI;AACrB,QAAM,WAAW,IAAI;AACrB,SAAO;AAAA,IACL,GAAG,OAAO,QAAQ;AAAA,IAClB,GAAG,OAAO,SAAS;AAAA,EACrB;AACF;;;AD4CI,cA0UgB,YA1UhB;AArEJ,IAAM,gBAAgB;AAkCtB,SAAS,uBAAuB,WAAsB,MAAkB,cAAqC;AAC3G,QAAM,QAAQ;AAAA,IACZ,GAAG;AAAA,EACL;AACA,MAAI,KAAK,MAAM,UAAU,KAAK,aAAa,KAAK;AAC9C,UAAM,IAAI,aAAa,MAAM,KAAK;AAAA,EACpC,WAAW,KAAK,SAAS,UAAU,KAAK,aAAa,MAAM,aAAa,QAAQ;AAC9E,UAAM,IAAI,aAAa,MAAM,aAAa,SAAS,KAAK;AAAA,EAC1D;AACA,MAAI,KAAK,OAAO,UAAU,KAAK,aAAa,MAAM;AAChD,UAAM,IAAI,aAAa,OAAO,KAAK;AAAA,EACrC,WAAW,KAAK,QAAQ,UAAU,KAAK,aAAa,OAAO,aAAa,OAAO;AAC7E,UAAM,IAAI,aAAa,OAAO,aAAa,QAAQ,KAAK;AAAA,EAC1D;AACA,SAAO;AACT;AAOA,SAAS,oBAAoB,EAAE,UAAU,oBAAoB,GAA6B;AACxF,QAAM,EAAE,YAAY,WAAW,YAAY,UAAU,IAAI,aAAa;AAAA,IACpE,IAAI;AAAA,EACN,CAAC;AAED,QAAM,QAAQ;AAAA,IACZ,WAAW,IAAI,UAAU,SAAS,SAAS;AAAA,IAC3C,UAAU;AAAA,IACV,MAAM,cAAc,oBAAoB,CAAC;AAAA,IACzC,KAAK,cAAc,oBAAoB,CAAC;AAAA,EAC1C;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,KAAK;AAAA,MACL,WAAU;AAAA,MACV;AAAA,MACC,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,cAAY,KAAK,KAAK,gCAAgC;AAAA,MAErD;AAAA;AAAA,EACH;AAEJ;AAEA,IAAqB,iBAArB,cAA4C,UAAoD;AAAA,EAC9F;AAAA,EAEA;AAAA,EAEA,YAAY,OAA4B;AACtC,UAAM,KAAK;AACX,SAAK,QAAQ;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,eAAe;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB;AACA,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,uBAA6B;AAC3B,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,QAAQ;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,YAAY,MAA+B;AACzC,SAAK,QAAQ;AACb,QAAI,SAAS,QAAQ,KAAK,YAAY,MAAM;AAC1C,WAAK,UAAU,IAAI,QAAQ,MAAM;AAAA,QAC/B,UAAU;AAAA,QACV,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,MAAM,CAAC,MAAM;AACX,gBAAM,OAAO,EAAE;AACf,cAAI,KAAK,SAAS,KAAK,QAAQ;AAC7B,iBAAK,SAAS;AAAA,cACZ,WAAW,KAAK;AAAA,cAChB,YAAY,KAAK;AAAA,YACnB,CAAC;AAAA,UACH,OAAO;AACL,iBAAK,SAAS;AAAA,cACZ,WAAW;AAAA,cACX,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,kBAAkB;AAChB,UAAM,EAAE,WAAW,IAAI,KAAK;AAC5B,SAAK,SAAS;AAAA,MACZ;AAAA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,mBAAmB;AACjB,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,QAAQ;AACrB,WAAK,UAAU;AAAA,IACjB;AACA,SAAK,SAAS;AAAA,MACZ,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,eAAe;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,WAAW;AACT,SAAK,SAAS;AAAA,MACZ,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,eAAe;AAAA,MACf,YAAY,KAAK,MAAM;AAAA,IACzB,CAAC;AACD,SAAK,MAAM,QAAQ;AAAA,EACrB;AAAA,EAEA,SAAS;AACP,QAAI,CAAC,KAAK,OAAO;AACf;AAAA,IACF;AACA,QAAI,CAAC,KAAK,SAAS;AACjB;AAAA,IACF;AACA,QAAI,WAAW;AACf,QAAI,KAAK,MAAM,KAAK;AAClB,YAAM,YAAY,KAAK,MAAM,IAAI,YAAY,GAAG;AAChD,YAAM,MAAM,cAAc,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM,IAAI,UAAU,GAAG,SAAS;AACrF,UAAI,IAAI,MAAM,EAAE,MAAM,OAAO;AAC3B,mBAAW;AAAA,MACb;AAAA,IACF;AACA,SAAK,QAAQ,iBAAiB,EAAE,OAAO,CAAC,SAAS;AAC/C,YAAM,EAAE,WAAW,IAAI,KAAK;AAC5B,WAAK,MAAM,OAAO,MAAM,UAAU;AAAA,IACpC,GAAG,QAAQ;AAAA,EACb;AAAA,EAEA,YAAY,OAAuB;AACjC,QAAI,CAAC,MAAM,QAAQ;AACjB;AAAA,IACF;AACA,QAAI,MAAM,CAAC,EAAE,aAAa,SAAS;AACjC,WAAK,SAAS,QAAQ,MAAM,CAAC,EAAE,OAAO;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,iBAAiB;AACf,QAAI,KAAK,MAAM,UAAU;AACvB,WAAK,SAAS,QAAQ,KAAK,MAAM,QAAQ;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,kBAAkB,WAAmB;AACnC,QAAI,CAAC,KAAK,SAAS;AACjB;AAAA,IACF;AACA,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,SAAK,QAAQ,MAAM;AAEnB,QAAI,cAAc,SAAU,MAAM,SAAS,KAAK,MAAM,KAAK,GAAI;AAC7D,WAAK,SAAS;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AACA,SAAK,QAAQ,eAAe,SAAS;AACrC,SAAK,QAAQ,KAAK;AAClB,SAAK,SAAS;AAAA,MACZ,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAgB;AACrB,QAAI,CAAC,KAAK,SAAS;AACjB;AAAA,IACF;AACA,UAAM,OAAO,KAAK,QAAQ,eAAe;AACzC,UAAM,WAAW,KAAK,QAAQ,iBAAiB;AAC/C,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,MAAM;AACX,UAAM,UAAU,SAAS,QAAQ,IAAI;AACrC,SAAK,OAAO;AACZ,SAAK,QAAQ,eAAe,IAAI;AAChC,SAAK,QAAQ,OAAO,MAAM;AAC1B,UAAM,WAAW,KAAK,QAAQ,cAAc;AAC5C,UAAM,YAAY,SAAS;AAC3B,UAAM,YAAY,YAAY,SAAS,SAAS,SAAS,SAAS;AAClE,UAAM,OAAO,YAAY;AACzB,UAAM,WAAW,SAAS,QAAQ;AAClC,aAAS,SAAS;AAClB,aAAS,QAAQ;AACjB,aAAS,MAAM;AACf,QAAI,SAAS,SAAS,SAAS,OAAO;AACpC,eAAS,OAAO;AAAA,IAClB,OAAO;AACL,eAAS,QAAQ,SAAS,QAAQ,SAAS,SAAS;AAAA,IACtD;AACA,QAAI,SAAS,UAAU,SAAS,QAAQ;AACtC,eAAS,MAAM;AAAA,IACjB,OAAO;AACL,eAAS,OAAO,SAAS,SAAS,SAAS,UAAU;AAAA,IACvD;AACA,SAAK,QAAQ,cAAc,QAAQ;AACnC,SAAK,OAAO;AACZ,SAAK,MAAM;AACX,SAAK,QAAQ,SAAS;AACtB,SAAK,SAAS,SAAS;AACvB,SAAK,QAAQ,eAAe,IAAI;AAAA,EAClC;AAAA,EAEA,mBAAmB;AACjB,UAAM,EAAE,cAAc,IAAI,KAAK;AAC/B,SAAK,SAAS;AAAA,MACZ,eAAe,CAAC;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,qBAAqB,CAAC,UAAwB;AAC5C,QAAI,CAAC,KAAK,SAAS;AACjB;AAAA,IACF;AACA,UAAM,EAAE,MAAM,IAAI;AAElB,UAAM,SAAS,KAAK,QAAQ,cAAc;AAC1C,UAAM,EAAE,OAAO,OAAO,IAAI;AAC1B,UAAM,EAAE,WAAW,IAAI,KAAK;AAC5B,UAAM,wBAAwB,wBAAwB,YAAY,MAAM;AAExE,UAAM,KAAM,sBAAsB,IAAI,MAAM,KAAK,QAAS;AAC1D,UAAM,KAAM,sBAAsB,IAAI,MAAM,KAAK,SAAU;AAG3D,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC;AAC7C,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC;AAE7C,SAAK,SAAS;AAAA,MACZ,YAAY,CAAC,UAAU,QAAQ;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAEA,wBAAwB,CAAC,eAAsC;AAC7D,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,EAAE;AAAA,IAC5C;AACA,UAAM,SAAS,KAAK,QAAQ,cAAc;AAC1C,UAAM,cAAc,wBAAwB,YAAY,MAAM;AAC9D,UAAM,YAAY,uBAAuB,aAAa,MAAM;AAC5D,WAAO;AAAA,EACT;AAAA,EAEA,kBAAkB,MAAM;AACtB,QAAI,KAAK,MAAM,SAAS;AACtB,mBAAa,KAAK,MAAM,OAAO;AAAA,IACjC;AACA,SAAK,SAAS;AAAA,MACZ,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,oBAAoB,MAAM;AACxB,UAAM,UAAU,WAAW,MAAM;AAC/B,WAAK,SAAS;AAAA,QACZ,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,GAAG,GAAG;AACN,SAAK,SAAS;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,iBAAiB,CAAC,MAA2C;AAC3D,MAAE,eAAe;AACjB,UAAM,EAAE,eAAe,IAAI,KAAK;AAChC,SAAK,SAAS;AAAA,MACZ,gBAAgB,CAAC;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,mBAA6B,CAAC,EAAE,kBAAkB,UAAU,MAAM;AAChE,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,kBAAkB;AACrB,aAAO;AAAA,IACT;AAGA,UAAM,aAAa,cAAc,KAAK,QAAQ,MAAM;AAGpD,UAAM,QAAQ,WAAW,QAAQ,iBAAiB;AAClD,UAAM,SAAS,WAAW,SAAS,iBAAiB;AACpD,UAAM,OAAO,WAAW,OAAO,iBAAiB,QAAQ;AACxD,UAAM,QAAQ,WAAW,QAAQ,iBAAiB,QAAQ;AAC1D,UAAM,MAAM,WAAW,MAAM,iBAAiB,SAAS;AACvD,UAAM,SAAS,WAAW,SAAS,iBAAiB,SAAS;AAE7D,UAAM,uBAAmC;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,uBAAuB,WAAW,kBAAkB,oBAAoB;AAAA,EACjF;AAAA,EAEA,YAAY,OAAe,QAAgB;AACzC,UAAM,QAAQ,QAAQ;AACtB,UAAM,WAAW,WAAW,aAAa;AAGzC,UAAM,aAAa,mBAAmB,OAAO,KAAK,IAAI,UAAU,MAAM,CAAC;AACvE,UAAM,cAAc,oBAAoB,OAAO,UAAU;AAEzD,WAAO,GAAG,KAAK,IAAI,YAAY,WAAW,CAAC;AAAA,EAC7C;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,WAAW,YAAY,OAAO,eAAe,gBAAgB,WAAW,IAAI,KAAK;AACzF,UAAM,EAAE,KAAK,UAAU,gBAAgB,OAAO,OAAO,QAAQ,QAAQ,UAAU,IAAI,KAAK;AAExF,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV;AAAA,QACA,SAAS,KAAK,SAAS,KAAK,IAAI;AAAA,QAChC,MAAK;AAAA,QACL;AAAA,QACA,aAAa,KAAK,gBAAgB,KAAK,IAAI;AAAA,QAC3C,cAAc,KAAK,iBAAiB,KAAK,IAAI;AAAA,QAC7C,mBAAgB;AAAA,QAEhB;AAAA,8BAAC,eAAa,aAAG,KAAK,KAAK,kBAAkB,CAAC,GAAG,QAAQ,MAAM,KAAK,KAAK,EAAE,IAAG;AAAA,UAC9E,oBAAC,aACC,+BAAC,SACC;AAAA,gCAAC,YAAS,YAAY,KAAK,YAAY,KAAK,IAAI,GAC9C,8BAAC,SACC,+BAAC,SAAI,WAAU,gCACZ;AAAA,0BAAY,KAAK,aAAa,KAC7B,qBAAC,SAAI,WAAU,gCACb;AAAA,oCAAC,SAAI,KAAK,yBAAU,WAAU,oCAAmC,KAAI,IAAG;AAAA,gBACxE,oBAAC,WAAM,MAAK,QAAO,WAAU,sCAAqC,OAAO,WAAW,UAAQ,MAAC;AAAA,gBAC7F,oBAAC,UAAK,WAAU,qCAAoC,kBAAC;AAAA,gBACrD,oBAAC,WAAM,MAAK,QAAO,WAAU,sCAAqC,OAAO,YAAY,UAAQ,MAAC;AAAA,iBAChG;AAAA,cAEF,oBAAC,SAAI,WAAU,2BACb;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBAEV,OAAO,EAAE,UAAU,KAAK,YAAY,OAAO,MAAM,EAAE;AAAA,kBAEnD;AAAA,wCAAC,SAAI,KAAU,KAAK,KAAK,YAAY,KAAK,IAAI,GAAG,WAAU,6BAA4B,KAAI,IAAG;AAAA,oBAC7F,iBACC,oBAAC,cAAW,WAAW,KAAK,mBAAmB,KAAK,IAAI,GAAG,WAAW,CAAC,KAAK,gBAAgB,GAC1F,8BAAC,uBAAoB,qBAAqB,KAAK,sBAAsB,UAAU,GAC7E;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,iBAAiB,OAAO,wBAAO,IAAI;AAAA,wBAC5C,eAAW;AAAA;AAAA,oBACb,GACF,GACF;AAAA;AAAA;AAAA,cAEJ,GACF;AAAA,eACF,GACF,GACF;AAAA,YACA,oBAAC,SAAI,WAAU,6CACb,8BAAC,SAAI,WAAU,iCACb,+BAAC,SAAI,WAAU,4BACb;AAAA,mCAAC,SAAI,WAAU,qCACb;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,aAAa,KAAK;AAAA,oBAClB,cAAc,KAAK;AAAA,oBACnB,SAAS,KAAK;AAAA,oBACd,QAAQ,KAAK;AAAA,oBACb,SAAS,KAAK;AAAA,oBAEd;AAAA,0CAAC,SAAI,KAAK,yBAAU,WAAU,2BAA0B,KAAI,IAAG;AAAA,sBAC/D,oBAAC,UAAK,WAAU,8BAA8B,eAAK,KAAK,YAAY,GAAE;AAAA;AAAA;AAAA,gBACxE;AAAA,gBACC,kBACC;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,aAAa,KAAK;AAAA,oBAClB,cAAc,KAAK;AAAA,oBACnB,SAAS,KAAK;AAAA,oBACd,QAAQ,KAAK;AAAA,oBAEb;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAW,WAAW,+BAA+B;AAAA,4BACnD,QAAQ,MAAM,KAAK;AAAA,0BACrB,CAAC;AAAA,0BACD,SAAS,CAAC,MAAM;AACd,8BAAE,eAAe;AACjB,iCAAK,kBAAkB,GAAG;AAC1B,iCAAK,SAAS;AAAA,8BACZ,gBAAgB;AAAA,4BAClB,CAAC;AAAA,0BACH;AAAA,0BAEC,eAAK,KAAK,cAAc;AAAA;AAAA,sBAC3B;AAAA,sBACC,eAAe,IAAI,CAAC,SACnB;AAAA,wBAAC;AAAA;AAAA,0BAEC,MAAK;AAAA,0BACL,WAAW,WAAW,+BAA+B;AAAA,4BACnD,QAAQ,UAAU,KAAK,CAAC,IAAI,KAAK,CAAC;AAAA,0BACpC,CAAC;AAAA,0BACD,SAAS,CAAC,MAAM;AACd,8BAAE,eAAe;AACjB,iCAAK,kBAAkB,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;AACxC,iCAAK,SAAS;AAAA,8BACZ,gBAAgB;AAAA,4BAClB,CAAC;AAAA,0BACH;AAAA,0BAEC,aAAG,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAAA;AAAA,wBAbnB,KAAK,KAAK,GAAG;AAAA,sBAcpB,CACD;AAAA;AAAA;AAAA,gBACH;AAAA,iBAEJ;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,CAAC,MAAM;AACd,sBAAE,eAAe;AACjB,yBAAK,OAAO,EAAE;AAAA,kBAChB;AAAA,kBAEA;AAAA,wCAAC,SAAI,KAAK,2BAAY,WAAU,2BAA0B,KAAI,IAAG;AAAA,oBACjE,oBAAC,UAAK,WAAU,8BAA8B,eAAK,KAAK,cAAc,GAAE;AAAA;AAAA;AAAA,cAC1E;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAW,WAAW,0BAA0B;AAAA,oBAC9C,QAAQ;AAAA,kBACV,CAAC;AAAA,kBACD,SAAS,CAAC,MAAM;AACd,sBAAE,eAAe;AACjB,yBAAK,iBAAiB;AAAA,kBACxB;AAAA,kBAEA;AAAA,wCAAC,SAAI,KAAK,2BAAgB,WAAU,2BAA0B,KAAI,IAAG;AAAA,oBACrE,oBAAC,UAAK,WAAU,8BAA8B,eAAK,KAAK,mBAAmB,GAAE;AAAA;AAAA;AAAA,cAC/E;AAAA,eACF,GACF,GACF;AAAA,aACF,GACF;AAAA,UACA,oBAAC,eACC,+BAAC,UAAO,SAAQ,eACb;AAAA,wBACC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,KAAK,eAAe,KAAK,IAAI;AAAA,gBAErC,eAAK,KAAK,kBAAkB;AAAA;AAAA,YAC/B;AAAA,YAEF,oBAAC,YAAO,MAAK,UAAS,WAAU,kBAAiB,SAAS,KAAK,SAAS,KAAK,IAAI,GAC9E,eAAK,KAAK,cAAc,GAC3B;AAAA,YACA,oBAAC,YAAO,MAAK,UAAS,WAAU,sCAAqC,SAAS,KAAK,OAAO,KAAK,IAAI,GAChG,eAAK,KAAK,aAAa,GAC1B;AAAA,aACF,GACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;;;ADZM,mBAWI,OAAAC,MAOY,QAAAC,aAlBhB;AAnhBN,IAAM,YAAY;AAClB,IAAM,cAAc,IAAI,YAAY;AAsDpC,IAAqB,aAArB,cAAwCC,WAA4C;AAAA,EAClF;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA,OAAO,eAAe;AAAA,IACpB,MAAM,CAAC;AAAA,EACT;AAAA,EAEA,YAAY,OAAoD;AAC9D,UAAM,KAAK;AACX,SAAK,QAAQ;AAAA,MACX,kBAAkB;AAAA,MAClB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,MAAM,OAAO,KAAK,kBAAkB,MAAM,IAAI,IAAI;AAAA,MAC3D,UAAU;AAAA,MACV,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,SAAS,MAAM,MAAM,iBAAiB,SAAS,MAAM,KAAK,gBAAgB,EAAE,IAAI;AAAA,MAChF,YAAY,MAAM,OAAO,cAAc,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AAAA,MAC5D,WAAW;AAAA,IACb;AACA,SAAK,OAAO,SAAS,cAAc,KAAK;AAExC,SAAK,OAAO;AACZ,SAAK,WAAW,UAAU;AAC1B,SAAK,mBAAmB,UAAU;AAClC,SAAK,eAAe,UAAU;AAC9B,SAAK,iBAAiB,UAAU;AAAA,EAClC;AAAA,EAEA,oBAA0B;AACxB,KAAC,KAAK,MAAM,aAAa,SAAS,MAAM,YAAY,KAAK,IAAI;AAAA,EAC/D;AAAA,EAEA,kBAAkB,MAAiB;AACjC,QAAI,KAAK,eAAe,QAAQ;AAC9B,aAAO,KAAK;AAAA,IACd;AACA,WAAO,GAAG,KAAK,YAAY,SAAS,KAAK,mBAAmB;AAAA,EAC9D;AAAA,EAEA,mBAAmB;AACjB,SAAK,MAAM,QAAQ,QAAQ,IAAI;AAE/B,UAAM,EAAE,aAAa,IAAI,KAAK;AAC9B,QAAI,cAAc;AAChB,mBAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,kBAAkB;AAChB,UAAM,EAAE,aAAa,KAAK,IAAI,KAAK;AACnC,QAAI,SAAS,MAAM;AACjB,WAAK,SAAS;AAAA,QACZ,YAAY,cAAc,IAAI;AAAA,QAC9B,SAAS,SAAS,KAAK,gBAAgB,EAAE,KAAK;AAAA,MAChD,CAAC;AAAA,IACH;AACA,QAAI,aAAa;AACf,kBAAY;AAAA,IACd;AAAA,EACF;AAAA,EAEA,mBAAmB,WAAsC;AACvD,UAAM,EAAE,KAAK,IAAI,KAAK;AAEtB,QAAI,UAAU,SAAS,QAAQ,SAAS,MAAM;AAC5C,UAAI,KAAK,UAAU,YAAY,MAAM,OAAO;AAC1C,aAAK,WAAW,KAAK,iBAAiB,SAAS,KAAK,gBAAgB,EAAE,KAAK,CAAC;AAAA,MAC9E,OAAO;AACL,aAAK,SAAS;AAAA,UACZ,SAAS,KAAK,kBAAkB,IAAI;AAAA,QACtC,CAAC;AAAA,MACH;AACA,WAAK,SAAS;AAAA,QACZ,YAAY,cAAc,IAAI;AAAA,QAC9B,SAAS,SAAS,KAAK,gBAAgB,EAAE,KAAK;AAAA,MAChD,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,WAAW,MAAuB;AAChC,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,uBAAuB;AACrB,SAAK,KAAK,eAAe,YAAY,KAAK,IAAI;AAAA,EAChD;AAAA,EAEA,MAAM,WAAW,KAAa,MAAc;AAC1C,UAAM,MAAM,MAAM,aAAa,KAAK,MAAM,sBAAsB,CAAC;AACjE,QAAI,IAAI,UAAU,OAAO;AACvB,WAAK,SAAS;AAAA,QACZ,eAAe,IAAI;AAAA,QACnB,gBAAgB,IAAI;AAAA,QACpB,gBAAgB,IAAI;AAAA,QACpB,SAAS,IAAI;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,GAAwC;AACxD,MAAE,eAAe;AAEjB,UAAM,EAAE,KAAK,IAAI,KAAK;AACtB,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,KAAK;AACjB,UAAM,WAAW,KAAK,IAAI,IAAI,KAAK,MAAM,WAAW,KAAK,CAAC;AAC1D,UAAM,KAAK,WAAW,KAAK,QAAQ;AAAA,EACrC;AAAA,EAEA,MAAM,YAAY,GAAwC;AACxD,MAAE,eAAe;AAEjB,UAAM,EAAE,KAAK,IAAI,KAAK;AACtB,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,KAAK;AACjB,UAAM,YAAY,KAAK,MAAM,WAAW,KAAK;AAC7C,UAAM,KAAK,WAAW,KAAK,QAAQ;AAAA,EACrC;AAAA,EAEA,YAAY;AAEV,QAAI,aAAa,QAAQ;AACvB,cAAQ,aAAa,MAAM,IAAI,GAAG;AAAA,IACpC;AACA,QAAI,KAAK,MAAM,SAAS;AACtB,WAAK,MAAM,QAAQ;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,cAAc;AACZ,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,aAAa,OAAwB,OAAwB;AAC3D,QAAI,MAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,OAAO,GAAG;AAChD,aAAO;AAAA,IACT;AACA,QAAI,CAAC,MAAM,YAAY,MAAM,MAAM,eAAe,SAAS;AACzD,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAAwB,OAAwB;AACzD,QAAI,MAAM,QAAQ,MAAM,KAAK,SAAS,iBAAiB;AACrD,aAAO;AAAA,IACT;AACA,QAAI,CAAC,MAAM,YAAY,MAAM,MAAM,eAAe,OAAO;AACvD,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,OAAwB,OAAwB;AAC1D,QAAI,MAAM,QAAQ,MAAM,KAAK,SAAS,iBAAiB;AACrD,aAAO;AAAA,IACT;AACA,QAAI,CAAC,MAAM,YAAY,MAAM,MAAM,eAAe,QAAQ;AACxD,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,OAAwB,OAAwB;AACxD,QAAI,MAAM,QAAQ,MAAM,KAAK,SAAS,mBAAmB;AACvD,aAAO;AAAA,IACT;AACA,QAAI,CAAC,MAAM,YAAY,MAAM,MAAM,eAAe,UAAU,MAAM,KAAK,UAAU,YAAY,MAAM,OAAO;AACxG,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,UAAkB;AAC9B,UAAM,EAAE,MAAM,MAAM,YAAY,UAAU,cAAc,IAAI,KAAK;AACjE,UAAM,WAAW,IAAI,SAAS,KAAK,IAAuB;AAC1D,QAAI,MAAM;AACR,eAAS,OAAO,cAAc,IAAI;AAAA,IACpC,WAAW,MAAM;AACf,eAAS,OAAO,cAAc,IAAI;AAAA,IACpC;AACA,QAAI,MAAM,QAAQ,UAAU,KAAK,WAAW,SAAS,GAAG;AACtD,eAAS,OAAO,WAAW,SAAS;AACpC,eAAS,OAAO,WAAW,SAAS;AACpC,eAAS,OAAO,WAAW,GAAG,WAAW,CAAC,CAAC,EAAE;AAC7C,eAAS,OAAO,WAAW,GAAG,WAAW,CAAC,CAAC,EAAE;AAAA,IAC/C;AACA,QAAI,UAAU;AACZ,eAAS,OAAO,WAAW,UAAU;AACrC,eAAS,OAAO,YAAY,MAAM;AAAA,IACpC;AACA,QAAI,KAAK,YAAY,KAAK,OAAO,KAAK,KAAK,KAAK,KAAK,UAAU,KAAK,OAAO,KAAK,KAAK,KAAK,eAAe;AACvG,eAAS,OAAO,uBAAuB,cAAc,aAAa,CAAC;AACnE,eAAS,OAAO,WAAW,UAAU;AACrC,eAAS,OAAO,YAAY,OAAO,KAAK,MAAM,WAAW,CAAC,CAAC;AAAA,IAC7D;AACA,aAAS,OAAO,UAAU,MAAM;AAChC,aAAS,OAAO,aAAa,OAAO,SAAS;AAC7C,WAAO;AAAA,EACT;AAAA,EAEA,uBAAuB,WAAsB;AAC3C,SAAK,SAAS;AAAA,MACZ,MAAM;AAAA;AAAA,MACN,MAAM;AAAA;AAAA,MACN,UAAU;AAAA,MACV,YAAY,cAAc,SAAS;AAAA;AAAA,MACnC,SAAS,SAAS,UAAU,gBAAgB,EAAE,KAAK;AAAA;AAAA,IACrD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,MAAiB;AAC5B,UAAM,EAAE,QAAQ,IAAI,KAAK;AAEzB,UAAM,EAAE,MAAM,KAAK,IAAI,KAAK;AAC5B,UAAM,WAAW,KAAK,cAAc,wBAAwB;AAC5D,QAAI,QAAQ,MAAM;AAChB,YAAM,MAAM,OAAO,KAAK,KAAK,oBAAoB,IAAI,KAAK,KAAK,mBAAmB;AAClF,UAAI,CAAC,QAAQ,GAAG,GAAG;AACjB;AAAA,MACF;AAAA,IACF;AAKA,UAAM,aAAa,MAAM,KAAK,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACvE,QAAI,WAAW,UAAU;AACvB,UAAI,WAAW,QAAQ;AACrB,cAAM,WAAW,MAAM;AAAA,MACzB;AACA;AAAA,IACF;AAEA,UAAM,MAAM,QAAQ,OAAO,KAAK,KAAK,cAAc,CAAC;AACpD,sBAAkB,EACf,YAAY,KAAK,UAAU,WAAW,MAAM,QAAQ,EACpD,KAAK,CAAC,QAAQ;AACb,UAAI;AACJ,UAAI,YAAY,OAAO,IAAI,WAAW,WAAW;AAC/C,YAAI,IAAI,SAAS;AACf,gBAAM,IAAI,OAAO;AAAA,QACnB,OAAO;AACL,gBAAM,KAAK,KAAK,mBAAmB,CAAC;AAAA,QACtC;AACA;AAAA,MACF;AACA,cAAQ,gBAAgB,GAAgB;AACxC,UAAI,KAAK,MAAM,UAAU;AACvB,aAAK,MAAM,SAAS,GAAgB;AAAA,MACtC;AAGA,WAAK,KAAK,wBAAwB,EAAE,MAAM,IAAiB,CAAC;AAC5D,mBAAa,UAAU,sBAAsB;AAAA,QAC3C,QAAQ,EAAE,MAAM,IAAiB;AAAA,QACjC,SAAS;AAAA,MACX,CAAC;AACD,WAAK,UAAU;AACf,WAAK,uBAAuB,GAAgB;AAAA,IAC9C,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,YAAY,MAAiB;AACjC,UAAM,EAAE,QAAQ,IAAI,KAAK;AACzB,UAAM,WAAW,KAAK,cAAc,6BAA6B;AAIjE,UAAM,aAAa,MAAM,KAAK,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAC9E,QAAI,WAAW,UAAU;AACvB,UAAI,WAAW,QAAQ;AACrB,cAAM,WAAW,MAAM;AAAA,MACzB;AACA;AAAA,IACF;AAEA,UAAM,MAAM,QAAQ,OAAO,KAAK,KAAK,cAAc,CAAC;AACpD,sBAAkB,EACf,iBAAiB,KAAK,UAAU,WAAW,MAAM,QAAQ,EACzD,KAAK,CAAC,QAAQ;AACb,UAAI;AACJ,UAAI,YAAY,OAAO,IAAI,WAAW,WAAW;AAC/C,YAAI,IAAI,SAAS;AACf,gBAAM,IAAI,OAAO;AAAA,QACnB,OAAO;AACL,gBAAM,KAAK,KAAK,mBAAmB,CAAC;AAAA,QACtC;AACA;AAAA,MACF;AACA,cAAQ,eAAe;AACvB,UAAI,KAAK,MAAM,UAAU;AACvB,aAAK,MAAM,SAAS,GAAgB;AAAA,MACtC;AACA,WAAK,KAAK,+BAA+B,EAAE,MAAM,IAAiB,CAAC;AACnE,WAAK,UAAU;AACf,WAAK,uBAAuB,GAAgB;AAAA,IAC9C,CAAC;AAAA,EACL;AAAA,EAEA,SAAS,OAAe;AACtB,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AACA,UAAM,SAAS,MAAM,MAAM,SAAS;AACpC,WAAO,OAAO,IAAI,CAACC,YAAW;AAAA,MAC5B,OAAOA;AAAA,MACP,OAAAA;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEA,iBAAiB,MAA2B;AAC1C,UAAM,QAAQ,KAAK,OAAO,CAAC,KAAK,KAAK,QAAQ;AAC3C,UAAI,QAAQ,GAAG;AACb,eAAO,IAAI;AAAA,MACb;AACA,aAAO,GAAG,GAAG,GAAG,SAAS,GAAG,IAAI,KAAK;AAAA,IACvC,GAAG,EAAE;AAEL,QAAI,KAAK,aAAa,SAAS;AAC7B,WAAK,aAAa,QAAQ,QAAQ;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,iBAAiB;AACf,SAAK,SAAS;AAAA,MACZ,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,MAA6B;AACzC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,KAAK,IAAI,WAAW;AAC1B,SAAG,SAAS,CAAC,MAAiC;AAC5C,YAAI,EAAE,EAAE,kBAAkB,aAAa;AACrC,iBAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC;AAAA,QACF;AACA,gBAAQ,EAAE,OAAO,MAAgB;AAAA,MACnC;AACA,SAAG,cAAc,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEA,wBAAwB;AACtB,SAAK,SAAS;AAAA,MACZ,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,MAAmB,YAAwB;AACpD,QAAI,MAAM;AACR,WAAK,cAAc,IAAI,EAAE,KAAK,CAAC,YAAoB;AACjD,YAAI,YAAY;AACd,eAAK,SAAS;AAAA,YACZ;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,eAAK,SAAS;AAAA,YACZ;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AACA,SAAK,SAAS;AAAA,MACZ,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,GAAwC;AACxD,QAAI,EAAE,EAAE,kBAAkB,mBAAmB;AAC3C;AAAA,IACF;AACA,QAAI,CAAC,EAAE,OAAO,OAAO;AACnB;AAAA,IACF;AACA,UAAM,EAAE,KAAK,IAAI,KAAK;AACtB,QAAI,SAAS,MAAM;AACjB;AAAA,IACF;AACA,UAAM,OAAa,EAAE,OAAO,MAAM,CAAC;AAEnC,UAAM,OAAO,KAAK,KAAK,MAAM,KAAK,IAAI,QAAQ,KAAK,KAAK,MAAM,OAAO,IAAI,UAAU;AACnF,UAAM,SAAS,eAAe,KAAK,KAAK,IAAI;AAE5C,QAAI,KAAK,eAAe,MAAM;AAC5B,YAAM,KAAK,KAAK,2BAA2B,CAAC;AAC5C,aAAO;AAAA,IACT;AACA,UAAM,YAAmE;AAAA,MACvE,UAAU;AAAA,IACZ;AACA,QAAI,SAAS,SAAS;AACpB,UAAI,QAAQ;AACV,cAAM,EAAE,OAAO,IAAI,MAAM;AAAA;AAAA,UAAyC;AAAA,QAAS;AAC3E,cAAM,SAAS,MAAM,OAAO;AAAA,UAC1B,MAAM;AAAA,UACN,MAAM;AAAA,QACR,CAAC;AACD,cAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AACjD,YAAI,EAAE,gBAAgB,OAAO;AAC3B,gBAAM,IAAI,MAAM,iCAAiC;AAAA,QACnD;AACA,cAAM,UAAU,MAAM,KAAK,cAAc,IAAI;AAC7C,kBAAU,UAAU;AACpB,kBAAU,OAAO;AAAA,MACnB,OAAO;AAEL,cAAM,CAAC,YAAY,SAAS,IAAI,KAAK,OAAO,MAAO,MAAM,GAAG;AAC5D,cAAM,EAAE,MAAM,OAAO,IAAI,MAAM,YAAY,gBAAgB,MAAM,YAAY,SAAS,WAAW,EAAE,CAAC;AACpG,cAAM,UAAU,MAAM,KAAK,cAAc,IAAI;AAC7C,kBAAU,UAAU;AACpB,YAAI,WAAW,SAAS,KAAK,OAAO,sBAAsB,MAAM;AAC9D,oBAAU,OAAO;AAAA,QACnB,OAAO;AACL,oBAAU,OAAO;AAAA,QACnB;AAAA,MACF;AAAA,IACF,WAAW,SAAS,OAAO;AACzB,YAAM,WAAW,MAAM,KAAK,KAAK;AACjC,YAAM,QAAQ,UAAU,SAAS,UAAU,EAAE,cAAc,EAAE,KAAK,MAAM,YAAY,KAAK,EAAE,CAAC;AAC5F,YAAM,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1D,gBAAU,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,MAAM,EAAE,MAAM,OAAO,KAAK,CAAC;AACpE,gBAAU,UAAU,MAAM,KAAK,cAAc,UAAU,IAAI;AAAA,IAC7D,WAAW,SAAS,QAAQ;AAC1B,gBAAU,OAAO;AACjB,UAAI,KAAK,SAAS,mBAAmB;AACnC,cAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,aAAK,WAAW,KAAK,CAAC;AAAA,MACxB,OAAO;AAEL,kBAAU,UAAU,GAAG,KAAK,OAAO,IAAI;AAAA,MACzC;AAAA,IACF;AAEA,QAAI,KAAK,iBAAiB,SAAS;AACjC,WAAK,iBAAiB,QAAQ,QAAQ,KAAK;AAAA,IAC7C;AACA,SAAK,SAAS,SAA4B;AAAA,EAC5C;AAAA,EAEA,WAAW,MAAc;AACvB,UAAM,CAAC,KAAK,IAAI,KAAK,MAAM,KAAK;AAChC,WAAO,SAAS,OAAO,EAAE;AAAA,EAC3B;AAAA,EAEA,YAAY,MAAc;AACxB,UAAM,CAAC,EAAE,MAAM,IAAI,KAAK,MAAM,KAAK;AACnC,WAAO,SAAS,QAAQ,EAAE;AAAA,EAC5B;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,MAAM,WAAW,MAAM,OAAO,IAAI,KAAK;AAC/C,UAAM,EAAE,kBAAkB,SAAS,gBAAgB,gBAAgB,eAAe,WAAW,IAAI,KAAK;AAEtG,WACE,gBAAAF,MAAA,YACE;AAAA,sBAAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,KAAK,KAAK;AAAA,UACV;AAAA,UACA,SAAS,KAAK,YAAY,KAAK,IAAI;AAAA,UACnC,MAAK;AAAA,UACL,WAAW,KAAK;AAAA,UAChB,cAAc,KAAK,iBAAiB,KAAK,IAAI;AAAA,UAC7C,aAAa,KAAK,gBAAgB,KAAK,IAAI;AAAA,UAC3C,mBAAgB;AAAA,UAEhB;AAAA,4BAAAJ,KAACK,cAAA,EAAa,eAAK,KAAK,kBAAkB,GAAE;AAAA,YAC5C,gBAAAL,KAACM,YAAA,EACE,kBACC,gBAAAL,MAAC,UAAK,WAAU,mBAAkB,KAAK,KAAK,WAAW,KAAK,IAAI,GAC9D;AAAA,8BAAAA,MAAC,SAAI,WAAU,iCACb;AAAA,gCAAAA,MAAC,SAAI,WAAU,kCACZ;AAAA,uBAAK,aAAa,KAAK,OAAO,KAAK,KAAK,KACvC,gBAAAA,MAAC,SAAI,WAAU,mEACZ;AAAA,yBAAK,cAAc,SAClB,gBAAAD;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,MAAK;AAAA,wBACL,SAAS,KAAK,eAAe,KAAK,IAAI;AAAA,wBAErC,eAAK,KAAK,YAAY;AAAA;AAAA,oBACzB;AAAA,oBAEF,gBAAAA,KAAC,SAAI,OAAO,EAAE,iBAAiB,QAAQ,OAAO,KAAK,GAAG,WAAU,0BAAyB;AAAA,qBAC3F;AAAA,kBAED,KAAK,WAAW,KAAK,OAAO,KAAK,KAAK,KACrC,gBAAAA,KAAC,SAAI,WAAU,2GACb,0BAAAA,KAAC,SAAI,WAAU,iCAAgC,OAAO,EAAE,OAAO,MAAM,GACnE,0BAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,KAAK;AAAA,sBACL,OAAO;AAAA,wBACL,QAAQ;AAAA,wBACR,SAAS;AAAA,wBACT,OAAO;AAAA,wBACP,UAAU;AAAA,wBACV,WAAW;AAAA,sBACb;AAAA,sBACA,KAAI;AAAA;AAAA,kBACN,GACF,GACF;AAAA,kBAED,KAAK,YAAY,KAAK,OAAO,KAAK,KAAK,MACrC,KAAK,UAAU,KAAK,OAAO,KAAK,KAAK,IACpC,gBAAAC,MAAC,SAAI,WAAU,2GACb;AAAA,oCAAAD,KAAC,SAAI,WAAU,iCAAgC,OAAO,EAAE,OAAO,MAAM,GAClE,2BACC,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,KAAK;AAAA,wBACL,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,OAAO;AAAA,0BACP,UAAU;AAAA,0BACV,WAAW;AAAA,wBACb;AAAA,wBACA,KAAI;AAAA;AAAA,oBACN,GAEJ;AAAA,oBACA,gBAAAC,MAAC,SAAI,OAAO,EAAE,WAAW,MAAM,GAAG,WAAU,gCACzC;AAAA,wCACC,gBAAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,SAAS,KAAK,YAAY,KAAK,IAAI;AAAA,0BAEnC;AAAA,4CAAAD,KAAC,UAAK,WAAU,oCAAmC;AAAA,4BACnD,gBAAAA,KAAC,kBAAe,sCAAI;AAAA;AAAA;AAAA,sBACtB;AAAA,sBAED,kBACC,gBAAAC;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,SAAS,KAAK,YAAY,KAAK,IAAI;AAAA,0BAEnC;AAAA,4CAAAD,KAAC,UAAK,WAAU,qCAAoC;AAAA,4BACpD,gBAAAA,KAAC,kBAAe,sCAAI;AAAA;AAAA;AAAA,sBACtB;AAAA,uBAEJ;AAAA,qBACF,IAEA,gBAAAA,KAAC,SAAI,WAAU,2GACb,0BAAAA,KAAC,SAAI,WAAU,iCAAgC,OAAO,EAAE,OAAO,MAAM,GACnE,0BAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,KAAK;AAAA,sBACL,OAAO,EAAE,QAAQ,QAAQ,SAAS,SAAS,OAAO,OAAO;AAAA,sBACzD,KAAI;AAAA;AAAA,kBACN,GACF,GACF;AAAA,mBAEN;AAAA,gBAEA,gBAAAC,MAAC,SAAI,WAAU,+BACb;AAAA,kCAAAA,MAAC,QACC;AAAA,oCAAAA,MAAC,YAAS,OAAO,KAAK,KAAK,YAAY,GAAG,IAAG,cAC3C;AAAA,sCAAAD,KAAC,SAAM,SAAQ,YAAW,WAAU,+BAClC,0BAAAC,MAAC,aACC;AAAA,wCAAAA,MAAC,YACC;AAAA,0CAAAA,MAAC,aACE;AAAA,iCAAK,KAAK,oBAAoB;AAAA,4BAC/B,gBAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,WAAU;AAAA,gCACV,sBAAmB;AAAA,gCACnB,qBAAmB,KAAK,KAAK,4BAA4B;AAAA;AAAA,4BAC3D;AAAA,6BACF;AAAA,0BACA,gBAAAA,KAAC,aACC,0BAAAA,KAAC,WAAM,cAAY,KAAK,KAAK,4BAA4B,GACvD,0BAAAA,KAAC,WAAM,MAAK,QAAO,UAAU,KAAK,YAAY,KAAK,IAAI,GAAG,GAC5D,GACF;AAAA,2BACF;AAAA,wBACC,KAAK,eAAe,UACnB,gBAAAC,MAAC,YACC;AAAA,0CAAAA,MAAC,aAAU,QAAM,MACd;AAAA,iCAAK,KAAK,cAAc;AAAA,4BACzB,gBAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,WAAU;AAAA,gCACV,sBAAmB;AAAA,gCACnB,qBAAmB,KAAK,KAAK,uBAAuB;AAAA;AAAA,4BACtD;AAAA,6BACF;AAAA,0BACA,gBAAAC,MAAC,aACC;AAAA,4CAAAA;AAAA,8BAAC;AAAA;AAAA,gCACC,MAAK;AAAA,gCACL,cAAc,KAAK;AAAA,gCACnB,OAAO;AAAA,kCACL,UAAU;AAAA,kCACV,OAAO;AAAA,gCACT;AAAA,gCAEA;AAAA,kDAAAD,KAAC,YAAO,OAAM,SAAS,eAAK,KAAK,2BAA2B,GAAE;AAAA,kCAC9D,gBAAAA,KAAC,YAAO,OAAM,QAAQ,eAAK,KAAK,YAAY,GAAE;AAAA,kCAC9C,gBAAAA,KAAC,YAAO,OAAM,SAAS,eAAK,KAAK,aAAa,GAAE;AAAA,kCAChD,gBAAAA,KAAC,YAAO,OAAM,UAAU,eAAK,KAAK,cAAc,GAAE;AAAA;AAAA;AAAA,4BACpD;AAAA,4BACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,UAAS;AAAA,6BACrD;AAAA,2BACF;AAAA,wBAEF,gBAAAC;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO;AAAA,8BACL,SACE,OAAO,SAAS,eAChB,KAAK,UACL,KAAK,OAAO,gCACR,cACA;AAAA,4BACR;AAAA,4BAEA;AAAA,8CAAAA,MAAC,aAAU,QAAM,MACf;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,IAAI,8BAA8B,KAAK,QAAQ;AAAA,oCAC/C,SAAS,wBAAwB,KAAK,QAAQ;AAAA,oCAE7C,eAAK,KAAK,gBAAgB;AAAA;AAAA,gCAC7B;AAAA,gCACA,gBAAAA;AAAA,kCAAC;AAAA;AAAA,oCACC,WAAU;AAAA,oCACV,sBAAmB;AAAA,oCACnB,qBAAmB,KAAK,KAAK,yBAAyB;AAAA;AAAA,gCACxD;AAAA,iCACF;AAAA,8BACA,gBAAAC,MAAC,aACC;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,KAAK,KAAK;AAAA,oCACV,MAAK;AAAA,oCACL,IAAI,wBAAwB,KAAK,QAAQ;AAAA,oCACzC,mBAAiB,8BAA8B,KAAK,QAAQ;AAAA,oCAC5D,cAAc,KAAK;AAAA,oCACnB,MAAK;AAAA,oCACL,WAAU;AAAA;AAAA,gCACZ;AAAA,gCACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,aAAY;AAAA,iCACxD;AAAA;AAAA;AAAA,wBACF;AAAA,wBACA,gBAAAC,MAAC,YACC;AAAA,0CAAAA,MAAC,aAAU,QAAM,MACd;AAAA,iCAAK,KAAK,WAAW;AAAA,4BACtB,gBAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,WAAU;AAAA,gCACV,sBAAmB;AAAA,gCACnB,qBAAmB,KAAK,KAAK,mBAAmB;AAAA;AAAA,4BAClD;AAAA,6BACF;AAAA,0BACA,gBAAAC,MAAC,aACC;AAAA,4CAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,SAAO;AAAA,gCACP,cAAc,KAAK,SAAS,KAAK,WAAW;AAAA,gCAC5C,WAAU;AAAA,gCACV,UAAU,KAAK,iBAAiB,KAAK,IAAI;AAAA,gCACzC,SACE,QACA,KAAK,IAAI,CAAC,SAAS;AAAA,kCACjB,OAAO;AAAA,kCACP,OAAO;AAAA,gCACT,EAAE;AAAA,gCAEJ,aAAa,KAAK,KAAK,8BAA8B;AAAA,gCACrD,kBAAkB,MAAM,KAAK,KAAK,qCAAqC;AAAA,gCACvE,mBAAmB,CAAC,eAAe,KAAK,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAAA,gCAClF,kBAAkB,CAAC,eAAe,WAAW,KAAK,EAAE,SAAS;AAAA,gCAC7D,mBAAmB;AAAA,gCACnB,qBAAmB;AAAA;AAAA,4BACrB;AAAA,4BACA,gBAAAA;AAAA,8BAAC;AAAA;AAAA,gCACC,KAAK,KAAK;AAAA,gCACV,MAAK;AAAA,gCACL,cAAc,KAAK;AAAA,gCACnB,MAAK;AAAA;AAAA,4BACP;AAAA,4BACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,eAAc;AAAA,6BAC1D;AAAA,2BACF;AAAA,wBACA,gBAAAC;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO;AAAA,8BACL,SACE,OAAO,SAAS,eAChB,KAAK,UACL,KAAK,OAAO,gCACR,cACA;AAAA,4BACR;AAAA,4BAEA;AAAA,8CAAAA,MAAC,aAAU,QAAM,MACf;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,IAAI,6BAA6B,KAAK,QAAQ;AAAA,oCAC9C,SAAS,uBAAuB,KAAK,QAAQ;AAAA,oCAE5C,eAAK,KAAK,eAAe;AAAA;AAAA,gCAC5B;AAAA,gCACA,gBAAAA;AAAA,kCAAC;AAAA;AAAA,oCACC,WAAU;AAAA,oCACV,sBAAmB;AAAA,oCACnB,qBAAmB,KAAK,KAAK,wBAAwB;AAAA;AAAA,gCACvD;AAAA,iCACF;AAAA,8BACA,gBAAAC,MAAC,aACC;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,MAAK;AAAA,oCACL,IAAI,uBAAuB,KAAK,QAAQ;AAAA,oCACxC,mBAAiB,6BAA6B,KAAK,QAAQ;AAAA,oCAC3D,cAAc,KAAK;AAAA,oCACnB,MAAK;AAAA,oCACL,WAAU;AAAA;AAAA,gCACZ;AAAA,gCACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,WAAU;AAAA,iCACtD;AAAA;AAAA;AAAA,wBACF;AAAA,wBACA,gBAAAC;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO;AAAA,8BACL,SACE,OAAO,SAAS,eAChB,KAAK,UACL,KAAK,OAAO,gCACR,cACA;AAAA,4BACR;AAAA,4BAEA;AAAA,8CAAAA,MAAC,aAAU,QAAM,MACf;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,IAAI,yBAAyB,KAAK,QAAQ;AAAA,oCAC1C,SAAS,mBAAmB,KAAK,QAAQ;AAAA,oCAExC,eAAK,KAAK,WAAW;AAAA;AAAA,gCACxB;AAAA,gCACA,gBAAAA;AAAA,kCAAC;AAAA;AAAA,oCACC,WAAU;AAAA,oCACV,sBAAmB;AAAA,oCACnB,qBAAmB,KAAK,KAAK,oBAAoB;AAAA;AAAA,gCACnD;AAAA,iCACF;AAAA,8BACA,gBAAAC,MAAC,aACC;AAAA,gDAAAD;AAAA,kCAAC;AAAA;AAAA,oCACC,KAAK,KAAK;AAAA,oCACV,IAAI,mBAAmB,KAAK,QAAQ;AAAA,oCACpC,mBAAiB,yBAAyB,KAAK,QAAQ;AAAA,oCACvD,cAAc,KAAK;AAAA,oCACnB,MAAK;AAAA,oCACL,WAAU;AAAA;AAAA,gCACZ;AAAA,gCACA,gBAAAA;AAAA,kCAAC;AAAA;AAAA,oCACC,MAAK;AAAA,oCACL,WAAW;AAAA,sCACT;AAAA,sCACA,YAAY;AAAA,sCACZ,QAAQ,MAAM,KAAK,eAAe,SAAS,SAAS;AAAA,sCACpD,QAAQ,CAAC,UAAU,KAAK,eAAe,SAAS,SAAS,KAAK;AAAA,oCAChE;AAAA;AAAA,gCACF;AAAA,gCACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,WAAU;AAAA,iCACtD;AAAA;AAAA;AAAA,wBACF;AAAA,wBACC,KAAK,eAAe,UACnB,gBAAAC,MAAC,YACC;AAAA,0CAAAA,MAAC,aAAU,QAAM,MACf;AAAA,4CAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,IAAI,0BAA0B,KAAK,QAAQ;AAAA,gCAC3C,SAAS,oBAAoB,KAAK,QAAQ;AAAA,gCAEzC,eAAK,KAAK,YAAY;AAAA;AAAA,4BACzB;AAAA,4BACA,gBAAAA;AAAA,8BAAC;AAAA;AAAA,gCACC,WAAU;AAAA,gCACV,sBAAmB;AAAA,gCACnB,qBAAmB,KAAK,KAAK,qBAAqB;AAAA;AAAA,4BACpD;AAAA,6BACF;AAAA,0BACA,gBAAAC,MAAC,aACC;AAAA,4CAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,MAAK;AAAA,gCACL,IAAI,oBAAoB,KAAK,QAAQ;AAAA,gCACrC,mBAAiB,0BAA0B,KAAK,QAAQ;AAAA,gCACxD,cAAc,KAAK;AAAA,gCACnB,MAAK;AAAA,gCACL,WAAU;AAAA;AAAA,4BACZ;AAAA,4BACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,WAAU;AAAA,6BACtD;AAAA,2BACF;AAAA,wBAEF,gBAAAC,MAAC,YACC;AAAA,0CAAAA,MAAC,aAAU,QAAM,MACf;AAAA,4CAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,IAAI,0BAA0B,KAAK,QAAQ;AAAA,gCAC3C,SAAS,oBAAoB,KAAK,QAAQ;AAAA,gCAEzC,eAAK,KAAK,YAAY;AAAA;AAAA,4BACzB;AAAA,4BACA,gBAAAA;AAAA,8BAAC;AAAA;AAAA,gCACC,WAAU;AAAA,gCACV,sBAAmB;AAAA,gCACnB,qBAAmB,KAAK,KAAK,qBAAqB;AAAA;AAAA,4BACpD;AAAA,6BACF;AAAA,0BACA,gBAAAC,MAAC,aACC;AAAA,4CAAAD;AAAA,8BAAC;AAAA;AAAA,gCACC,IAAI,oBAAoB,KAAK,QAAQ;AAAA,gCACrC,mBAAiB,0BAA0B,KAAK,QAAQ;AAAA,gCACxD,cAAc,KAAK;AAAA,gCACnB,MAAK;AAAA,gCACL,WAAU;AAAA;AAAA,4BACZ;AAAA,4BACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,WAAU;AAAA,6BACtD;AAAA,2BACF;AAAA,yBACF,GACF;AAAA,sBACA,gBAAAA,KAAC,QAAoC,MAAK,2BAA0B,WAAW,EAAE,KAAK,GAAG;AAAA,uBAC3F;AAAA,oBACA,gBAAAA,KAAC,YAAS,OAAO,KAAK,KAAK,YAAY,GAAG,IAAG,cAC3C,0BAAAA,KAAC,SAAM,SAAQ,YAAW,WAAU,+BAClC,0BAAAC,MAAC,aACC;AAAA,sCAAAA,MAAC,YACC;AAAA,wCAAAD,KAAC,aAAW,eAAK,KAAK,gBAAgB,GAAE;AAAA,wBACxC,gBAAAA,KAAC,aACC,0BAAAA,KAAC,UAAK,WAAU,oBAAoB,eAAK,UAAS,GACpD;AAAA,yBACF;AAAA,sBACA,gBAAAC,MAAC,YACC;AAAA,wCAAAD,KAAC,aAAW,eAAK,KAAK,mBAAmB,GAAE;AAAA,wBAC3C,gBAAAC,MAAC,aACE;AAAA,+BAAK;AAAA,0BACN,gBAAAD,KAAC,WAAM,MAAK,UAAS,MAAK,eAAc,OAAO,KAAK,gBAAgB;AAAA,0BACpE,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,eAAc;AAAA,2BAC1D;AAAA,yBACF;AAAA,sBACA,gBAAAC,MAAC,YACC;AAAA,wCAAAD,KAAC,aAAW,eAAK,KAAK,iBAAiB,GAAE;AAAA,wBACzC,gBAAAC,MAAC,aACE;AAAA,+BAAK;AAAA,0BACN,gBAAAD,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAO,KAAK,eAAe;AAAA,0BAC/D,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,WAAU;AAAA,2BACtD;AAAA,yBACF;AAAA,sBACA,gBAAAC,MAAC,YACC;AAAA,wCAAAD,KAAC,aAAW,eAAK,KAAK,qBAAqB,GAAE;AAAA,wBAC7C,gBAAAA,KAAC,aAAW,eAAK,qBAAoB;AAAA,yBACvC;AAAA,sBACC,KAAK,gCAAgC,MACpC,gBAAAC,MAAC,YACC;AAAA,wCAAAD,KAAC,aAAW,eAAK,KAAK,6BAA6B,GAAE;AAAA,wBACrD,gBAAAC,MAAC,aACE;AAAA,+BAAK;AAAA,0BACN,gBAAAD;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,MAAK;AAAA,8BACL,OAAO,KAAK;AAAA;AAAA,0BACd;AAAA,0BACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,uBAAsB;AAAA,2BAClE;AAAA,yBACF;AAAA,sBAED,KAAK,eAAe,WACnB,gBAAAC,MAAC,YACC;AAAA,wCAAAD,KAAC,aAAW,eAAK,KAAK,kBAAkB,GAAE;AAAA,wBAC1C,gBAAAC,MAAC,aAAW;AAAA,+BAAK;AAAA,0BAAW;AAAA,2BAAG;AAAA,yBACjC;AAAA,sBAEF,gBAAAA,MAAC,YACC;AAAA,wCAAAD,KAAC,aAAW,eAAK,KAAK,iBAAiB,GAAE;AAAA,wBACzC,gBAAAA,KAAC,aAAW,sBAAY,KAAK,cAAc,GAAE;AAAA,yBAC/C;AAAA,uBACF,GACF,GACF;AAAA,qBACF;AAAA,kBACA,gBAAAA,KAAC,SAAI,WAAU,8BACb,0BAAAA,KAAC,SAAM,SAAQ,YAAW,WAAU,qCAClC,0BAAAC,MAAC,aACE;AAAA,yBAAK,YAAY,KAAK,OAAO,KAAK,KAAK,KACtC,gBAAAA,MAAC,YACC;AAAA,sCAAAD,KAAC,aAAU,QAAM,MAAE,eAAK,KAAK,mBAAmB,GAAE;AAAA,sBAClD,gBAAAC,MAAC,aACC;AAAA,wCAAAA,MAAC,SAAI,WAAU,+BACb;AAAA,0CAAAD;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,OAAO,UAAU,KAAK,UAAU;AAAA,8BAChC,UAAQ;AAAA,8BACR,WAAU;AAAA,8BACV,UAAQ;AAAA,8BACR,OAAO;AAAA,gCACL,QAAQ;AAAA,8BACV;AAAA;AAAA,0BACF;AAAA,0BACA,gBAAAA;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAM,KAAK;AAAA,8BACX,gBAAgB,KAAK,KAAK,6BAA6B;AAAA,8BAEvD,0BAAAA,KAAC,UAAK,WAAU,4BACd,0BAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,kBAC7B,eAAK,KAAK,YAAY,GACzB,GACF;AAAA;AAAA,0BACF;AAAA,2BACF;AAAA,wBACA,gBAAAA,KAAC,OAAE,OAAO,EAAE,UAAU,QAAQ,WAAW,MAAM,GAAG,WAAU,2BACzD,eAAK,KAAK,6BAA6B,GAC1C;AAAA,yBACF;AAAA,uBACF;AAAA,oBAEF,gBAAAC,MAAC,YACC;AAAA,sCAAAD,KAAC,aAAU,QAAM,MAAE,eAAK,KAAK,iBAAiB,GAAE;AAAA,sBAChD,gBAAAC,MAAC,aACC;AAAA,wCAAAA,MAAC,SAAI,WAAU,+BACb;AAAA,0CAAAD;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,OAAO,KAAK;AAAA,8BACZ,UAAQ;AAAA,8BACR,WAAU;AAAA,8BACV,UAAQ;AAAA,8BACR,OAAO;AAAA,gCACL,QAAQ;AAAA,8BACV;AAAA;AAAA,0BACF;AAAA,0BACA,gBAAAA;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAM,KAAK;AAAA,8BACX,gBAAgB,KAAK,KAAK,wBAAwB;AAAA,8BAElD,0BAAAA,KAAC,UAAK,WAAU,4BACd,0BAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,kBAC7B,eAAK,KAAK,YAAY,GACzB,GACF;AAAA;AAAA,0BACF;AAAA,2BACF;AAAA,wBACA,gBAAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO,EAAE,UAAU,QAAQ,WAAW,OAAO,cAAc,EAAE;AAAA,4BAC7D,WAAU;AAAA,4BAET,eAAK,KAAK,2BAA2B;AAAA;AAAA,wBACxC;AAAA,yBACF;AAAA,uBACF;AAAA,qBACF,GACF,GACF;AAAA,mBACF;AAAA,iBACF;AAAA,cACA,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,aAAY,OAAO,WAAW;AAAA,cACvD,KAAK,aAAa,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,aAAY,OAAO,KAAK,UAAU,YAAY,GAAG;AAAA,cAC9F,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,QAAO,OAAO,KAAK,YAAY;AAAA,cACzD,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,aAAY;AAAA,cACtD,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,QAAO;AAAA,cACjD,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,aAAY,OAAO,KAAK,YAAY;AAAA,cAC9D,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,aAAY;AAAA,cACtD,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,QAAO,OAAO,KAAK,YAAY;AAAA,cACzD,gBAAAA,KAAC,WAAM,MAAK,UAAS,MAAK,WAAU,OAAM,QAAO;AAAA,eACnD,GAEJ;AAAA,YACA,gBAAAA,KAACO,cAAA,EAAY,WAAU,iCACrB,0BAAAN,MAACO,SAAA,EACC;AAAA,8BAAAR;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,KAAK,UAAU,KAAK,IAAI;AAAA,kBAEhC,eAAK,KAAK,cAAc;AAAA;AAAA,cAC3B;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,MAAM;AACb,wBAAI,MAAM;AACR,2BAAK,YAAY,IAAI;AAAA,oBACvB;AAAA,kBACF;AAAA,kBAEC,eAAK,KAAK,mBAAmB;AAAA;AAAA,cAChC;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,MAAM;AACb,wBAAI,MAAM;AACR,2BAAK,OAAO,IAAI;AAAA,oBAClB;AAAA,kBACF;AAAA,kBAEC,eAAK,KAAK,YAAY;AAAA;AAAA,cACzB;AAAA,cACC,QACC,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAW,EAAE,MAAM,aAAa,MAAM,KAAK,cAAc,wBAAwB,EAAE;AAAA;AAAA,cACrF;AAAA,eAEJ,GACF;AAAA;AAAA;AAAA,MACF;AAAA,MACC,QACC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,QAAQ;AAAA,UACR,SAAS,KAAK,sBAAsB,KAAK,IAAI;AAAA,UAC7C,QAAQ,KAAK,WAAW,KAAK,IAAI;AAAA,UACjC,KAAK,WAAW,KAAK;AAAA,UACrB,UAAU,KAAK;AAAA,UACf;AAAA,UACA,OAAO,KAAK,WAAW,KAAK,UAAU;AAAA,UACtC,QAAQ,KAAK,YAAY,KAAK,UAAU;AAAA,UACxC,gBAAgB,KAAK,OAAO;AAAA,UAC5B,WAAW,KAAK;AAAA;AAAA,MAClB;AAAA,OAEJ;AAAA,EAEJ;AACF;","names":["fetchTagList","fetchMediaList","Component","Modal","ModalBody","ModalFooter","ModalHeader","HStack","jsx","jsxs","Component","label","Modal","ModalHeader","ModalBody","ModalFooter","HStack"]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  media_update_default
3
- } from "./chunk-5P6HFS6L.mjs";
3
+ } from "./chunk-2FTUIE3I.mjs";
4
4
  import {
5
5
  media_insert_default
6
- } from "./chunk-LAZAMWG6.mjs";
6
+ } from "./chunk-ZFNOFCCD.mjs";
7
7
 
8
8
  // src/components/media-unit/media-unit.tsx
9
9
  import { Component, createRef } from "react";
@@ -453,4 +453,4 @@ var MediaUnit = class extends Component {
453
453
  export {
454
454
  MediaUnit
455
455
  };
456
- //# sourceMappingURL=chunk-32U7ADG2.mjs.map
456
+ //# sourceMappingURL=chunk-MZAVCJIC.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/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"]}
@@ -1,3 +1,6 @@
1
+ import {
2
+ createPdfWorkerSource
3
+ } from "./chunk-J26FETK2.mjs";
1
4
  import {
2
5
  getMediaTransport
3
6
  } from "./chunk-3SYVRD3N.mjs";
@@ -1404,10 +1407,10 @@ import classNames from "classnames";
1404
1407
  import DOMPurify from "dompurify";
1405
1408
  import { emit as emit2 } from "@ablogcms/events";
1406
1409
  import { random, getExt, dataURItoBlob } from "@ablogcms/utils";
1407
- import createPdf from "@ablogcms/lib/create-pdf";
1410
+ import createPdf from "@ablogcms/pdf/create-pdf";
1408
1411
  import runWithConcurrency from "@ablogcms/utils/run-with-concurrency";
1409
- import ResizeImage from "@ablogcms/lib/resize-image-util";
1410
- import readFiles from "@ablogcms/lib/read-files";
1412
+ import ResizeImage from "@ablogcms/resize-image";
1413
+ import readFiles from "@ablogcms/read-files";
1411
1414
  import { CreatableSelect as CreatableSelect2 } from "@ablogcms/components/rich-select";
1412
1415
  import { DropZone } from "@ablogcms/components/drop-zone";
1413
1416
  import ProgressBar from "@ablogcms/components/progress-bar";
@@ -1474,7 +1477,7 @@ var MediaUploader = class extends Component2 {
1474
1477
  window.removeEventListener("beforeunload", this.handleBeforeUnload);
1475
1478
  }
1476
1479
  async createPdfThumbnail(file) {
1477
- const pdf = await createPdf(file, 1);
1480
+ const pdf = await createPdf(file, 1, createPdfWorkerSource());
1478
1481
  return pdf;
1479
1482
  }
1480
1483
  upload(blob, label, name, item) {
@@ -1811,4 +1814,4 @@ export {
1811
1814
  MediaList,
1812
1815
  MediaUploader
1813
1816
  };
1814
- //# sourceMappingURL=chunk-KQNVYJOK.mjs.map
1817
+ //# sourceMappingURL=chunk-XLN3FIK4.mjs.map