@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.
- package/dist/{chunk-5P6HFS6L.mjs → chunk-2FTUIE3I.mjs} +2 -2
- package/dist/{chunk-JJTHI4QP.mjs → chunk-J26FETK2.mjs} +13 -54
- package/dist/chunk-J26FETK2.mjs.map +1 -0
- package/dist/{chunk-32U7ADG2.mjs → chunk-MZAVCJIC.mjs} +3 -3
- package/dist/chunk-MZAVCJIC.mjs.map +1 -0
- package/dist/{chunk-KQNVYJOK.mjs → chunk-XLN3FIK4.mjs} +8 -5
- package/dist/{chunk-KQNVYJOK.mjs.map → chunk-XLN3FIK4.mjs.map} +1 -1
- package/dist/{chunk-LAZAMWG6.mjs → chunk-ZFNOFCCD.mjs} +3 -3
- package/dist/components/media-admin/media-admin.mjs +2 -2
- package/dist/components/media-droparea/media-droparea.d.ts +1 -1
- package/dist/components/media-droparea/media-droparea.mjs +4 -4
- package/dist/components/media-droparea/media-droparea.mjs.map +1 -1
- package/dist/components/media-edit-modal/media-edit-modal.d.ts +1 -1
- package/dist/components/media-insert/media-insert.mjs +3 -3
- package/dist/components/media-unit/media-unit.d.ts +1 -1
- package/dist/components/media-unit/media-unit.mjs +5 -5
- package/dist/components/media-update/media-update.mjs +2 -2
- package/dist/components/media-uploader/media-uploader.d.ts +1 -1
- package/dist/containers/media-admin.d.ts +1 -1
- package/dist/containers/media-insert.d.ts +2 -2
- package/dist/setup-media-unit.mjs +16 -9
- package/dist/setup-media-unit.mjs.map +1 -1
- package/dist/utils/index.d.ts +6 -0
- package/package.json +22 -19
- package/dist/chunk-32U7ADG2.mjs.map +0 -1
- package/dist/chunk-JJTHI4QP.mjs.map +0 -1
- package/dist/components/media-modal/pdf-previewer.d.ts +0 -8
- /package/dist/{chunk-5P6HFS6L.mjs.map → chunk-2FTUIE3I.mjs.map} +0 -0
- /package/dist/{chunk-LAZAMWG6.mjs.map → chunk-ZFNOFCCD.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/media-list/media-list.tsx","../src/components/media-uploader/media-uploader.tsx"],"sourcesContent":["import classnames from 'classnames';\nimport RangeSlider from 'rc-slider';\nimport dayjs from 'dayjs';\nimport 'rc-slider/assets/index.css';\n\nimport { Component, createRef } from 'react';\nimport { emit } from '@ablogcms/events';\nimport { Grid, GridItem } from '@ablogcms/components/grid';\nimport { formatBytes, parseQuery } from '@ablogcms/utils';\nimport { notify } from '@ablogcms/notify';\nimport { pending } from '@ablogcms/pending';\nimport {\n Menu,\n MenuList,\n MenuTrigger,\n MenuDivider,\n MenuItemCheckbox,\n MenuItemRadioGroup,\n MenuItemRadio,\n MenuPopover,\n} from '@ablogcms/components/dropdown-menu';\nimport { Pagination, PaginationRoot, PaginationSummary } from '@ablogcms/components/pagination';\nimport {\n Filter,\n FilterBody,\n FilterContent,\n FilterDetailButton,\n FilterFooter,\n FilterGroup,\n FilterGroupTitle,\n FilterInner,\n FilterItem,\n FilterItemLabel,\n} from '@ablogcms/components/filter';\nimport ConditionalWrap from '@ablogcms/components/conditional-wrap';\nimport { RichSelect, CreatableSelect } from '@ablogcms/components/rich-select';\nimport VisuallyHidden from '@ablogcms/components/visually-hidden';\nimport { Slot } from '@ablogcms/components/slot-fill';\nimport {\n Table,\n TableScrollable,\n TableHeader,\n TableBody,\n TableRow,\n TableHead,\n TableCell,\n} from '@ablogcms/components/table';\nimport * as actions from '../../stores/actions';\nimport { MediaItem, MediaAjaxConfig, MediaViewFileType, MediaTag } from '../../types';\nimport { getMediaTransport } from '../../runtime';\n\n/* eslint react/default-props-match-prop-types: 0 */\n/* eslint camelcase: 0 */\n\n/** Slot `media.list.bulk-actions`(HOOKS.md 参照)の fillProps */\nexport interface MediaListBulkActionsFillProps {\n selectedItems: MediaItem[];\n}\n\ninterface MediaListProps {\n actions: typeof actions;\n items: MediaItem[];\n archives: string[];\n tags: string[];\n extensions?: string[];\n selectedTags: string[];\n config: Required<MediaAjaxConfig>;\n\n lastPage: number;\n mode: string;\n total: number;\n filetype?: 'all' | 'image' | 'file';\n radioMode?: boolean;\n}\n\ninterface Menu {\n image: boolean;\n id: boolean;\n filename: boolean;\n tag: boolean;\n last_modified: boolean;\n upload_datetime: boolean;\n imagesize: boolean;\n filesize: boolean;\n blogname: boolean;\n}\n\ntype SortDirection = 'asc' | 'desc';\n\ninterface OrderActive {\n media_title: SortDirection;\n media_last_modified: SortDirection;\n media_datetime?: SortDirection;\n media_path: SortDirection;\n media_size: SortDirection;\n media_filesize: SortDirection;\n}\n\ntype DisplayStyle = 'table' | 'list';\n\ninterface MediaListState {\n order: OrderActive;\n menu: Menu;\n scale: number;\n filterMenuOpened: boolean;\n editMode: string;\n year: string;\n month: string;\n toggleAll: boolean;\n orderActive: keyof OrderActive;\n search: string;\n labels: MediaTag[];\n selectedLabels: MediaTag[];\n style: DisplayStyle;\n oldItemId: MediaItem['media_id'] | null;\n items: MediaItem[];\n limit: number;\n displayPage: number;\n filteredOptions: MediaTag[];\n fileext: string;\n owner: boolean;\n blogAxis: boolean;\n filetype: MediaViewFileType;\n}\n\nconst delimiter = ',';\n\nexport default class MediaList extends Component<MediaListProps, MediaListState> {\n listRef: React.RefObject<HTMLFormElement | null>;\n\n static defaultProps = {\n radioMode: false,\n filetype: 'all',\n extensions: [],\n };\n\n constructor(props: MediaListProps) {\n super(props);\n this.state = {\n order: {\n media_title: 'asc',\n media_last_modified: 'desc',\n media_path: 'asc',\n media_size: 'asc',\n media_filesize: 'asc',\n },\n menu: {\n image: true,\n id: true,\n filename: true,\n tag: true,\n last_modified: true,\n upload_datetime: false,\n imagesize: true,\n filesize: true,\n blogname: false,\n },\n limit: 20,\n displayPage: 6,\n scale: 1,\n selectedLabels: [],\n year: '',\n month: '',\n filterMenuOpened: false,\n toggleAll: false,\n orderActive: 'media_last_modified',\n search: '',\n labels: [],\n items: props.items,\n filteredOptions: [],\n style: 'table',\n editMode: '',\n filetype: props.filetype ? props.filetype : 'all',\n fileext: 'all',\n owner: false,\n blogAxis: false,\n oldItemId: null,\n };\n this.listRef = createRef<HTMLFormElement>();\n }\n\n getOrderSelectBtnLabel() {\n const { orderActive, order } = this.state;\n const active = order[orderActive] === 'asc' ? ACMS.i18n('media.asc') : ACMS.i18n('media.desc');\n if (orderActive === 'media_title') {\n return `${ACMS.i18n('media.title')}(${active})`;\n }\n if (orderActive === 'media_last_modified') {\n return `${ACMS.i18n('media.update_date')}(${active})`;\n }\n if (orderActive === 'media_datetime') {\n return `${ACMS.i18n('media.created_date')}(${active})`;\n }\n if (orderActive === 'media_path') {\n return `${ACMS.i18n('media.file_name')}(${active})`;\n }\n if (orderActive === 'media_filesize') {\n return `${ACMS.i18n('media.file_size')}(${active})`;\n }\n return ACMS.i18n('media.select');\n }\n\n setItem(item: MediaItem) {\n const { media_id } = item;\n if ('history' in window) {\n history.replaceState(null, '', `#mid=${media_id}`);\n }\n getMediaTransport()\n .fetchMediaDetail(media_id)\n .then((res) => {\n if (res.status === 'failure') {\n notify.danger(ACMS.i18n('media.get_media_error'));\n return;\n }\n if (res.item && res.item.media_id) {\n this.props.actions.setItem(res.item as MediaItem);\n }\n })\n .catch(() => {\n notify.danger(ACMS.i18n('media.get_media_error'));\n });\n return false;\n }\n\n toggleCheck(item: MediaItem) {\n const { items, radioMode } = this.props;\n if (radioMode) {\n const findItem = items.find((item) => item.checked);\n if (findItem) {\n this.props.actions.updateMediaList({ ...findItem, checked: !findItem.checked });\n }\n }\n this.props.actions.updateMediaList({ ...item, checked: !item.checked });\n }\n\n toggleCheckFrom(fromItemId: MediaItem['media_id'], toItem: MediaItem) {\n const { items, radioMode } = this.props;\n const { updateMediaList } = this.props.actions;\n if (radioMode) {\n return;\n }\n const fromIndex = items.findIndex((item) => {\n if (item.media_id === fromItemId) {\n return true;\n }\n return false;\n });\n const toIndex = items.findIndex((item) => {\n if (item.media_id === toItem.media_id) {\n return true;\n }\n return false;\n });\n const { checked } = toItem;\n const nextChecked = !checked;\n const minIndex = fromIndex > toIndex ? toIndex : fromIndex;\n const maxIndex = fromIndex > toIndex ? fromIndex : toIndex;\n items.forEach((item, index) => {\n if (index >= minIndex && index <= maxIndex) {\n updateMediaList({ ...item, checked: nextChecked });\n }\n });\n }\n\n toggleAllCheck() {\n const { items, actions, radioMode } = this.props;\n const { toggleAll } = this.state;\n const all = !toggleAll;\n this.setState({\n toggleAll: all,\n });\n if (radioMode) {\n return;\n }\n if (all) {\n actions.setMediaList(items.map((item) => ({ ...item, checked: true })));\n } else {\n actions.setMediaList(items.map((item) => ({ ...item, checked: false })));\n }\n }\n\n async removeImgs() {\n if (!confirm(ACMS.i18n('media.remove_media_confirm'))) {\n return;\n }\n if (this.listRef.current === null) {\n return;\n }\n\n // ゲート: 参照チェック・外部ストレージ連動削除等を挟める拡張ポイント。実際の削除対象は\n // チェック状態(フォーム)から構築される FormData に基づくため、waterfall で差し替えた\n // mediaIds は後続ハンドラ・.success 通知には伝わるが、実削除対象そのものの絞り込みには\n // ならない(除外したい場合は cancel で一括拒否すること)。\n const mediaIds = this.getSelectedItems().map((item) => String(item.media_id));\n const gateResult = await emit('media.delete.before', { mediaIds });\n if (gateResult.canceled) {\n if (gateResult.reason) {\n notify.danger(gateResult.reason);\n }\n return;\n }\n\n const fd = new FormData(this.listRef.current);\n fd.append('ACMS_POST_Media_Index_Delete', 'true');\n fd.append('formToken', window.csrfToken);\n const end = pending.splash(ACMS.i18n('media.deleting_media'));\n try {\n await getMediaTransport().deleteMedia(fd);\n notify.info(ACMS.i18n('media.remove_media_success'));\n void emit('media.delete.success', gateResult.event);\n this.fetchMediaList();\n } catch {\n notify.danger(ACMS.i18n('media.remove_media_error'));\n } finally {\n end();\n }\n }\n\n setOrder(target: keyof OrderActive) {\n const { state } = this;\n const { order } = state;\n const sortDirection = this.getNextSortDirection(target);\n this.setState(\n {\n ...state,\n orderActive: target,\n order: {\n ...order,\n [target]: sortDirection,\n },\n },\n () => {\n this.fetchMediaList();\n }\n );\n // upload_date-desc\n }\n\n checkOrder(orderActive: keyof OrderActive) {\n this.setState(\n {\n orderActive,\n },\n () => {\n this.fetchMediaList();\n }\n );\n }\n\n checkAscDesc(ascdesc: 'asc' | 'desc') {\n const { order, orderActive } = this.state;\n order[orderActive] = ascdesc;\n this.setState(\n {\n order,\n },\n () => {\n this.fetchMediaList();\n }\n );\n }\n\n getOrder() {\n const { orderActive, order } = this.state;\n if (orderActive === 'media_title') {\n return `file_name-${order[orderActive]}`;\n }\n if (orderActive === 'media_last_modified') {\n return `last_modified-${order[orderActive]}`;\n }\n if (orderActive === 'media_datetime') {\n return `upload_date-${order[orderActive]}`;\n }\n if (orderActive === 'media_filesize') {\n return `file_size-${order[orderActive]}`;\n }\n return '';\n }\n\n fetchMediaList(config: MediaAjaxConfig = {}) {\n const { year, month, limit, filetype, fileext, owner, blogAxis } = this.state;\n const { actions, selectedTags: labels } = this.props;\n const order = this.getOrder();\n const tag = labels.reduce((accumulator, current) => {\n if (!accumulator) {\n return current;\n }\n return `${accumulator}/${current}`;\n }, '');\n const override: MediaAjaxConfig = {\n order,\n tag,\n limit,\n filetype,\n fileext,\n owner,\n blogAxis,\n };\n if (year && month) {\n override.date = `${year}/${month}`;\n } else {\n override.date = '';\n override.year = year;\n override.month = month;\n }\n if (!config.page) {\n config.page = 1;\n }\n const settings = { ...config, ...override } as MediaAjaxConfig;\n if (actions && actions.fetchMediaList) {\n actions.fetchMediaList(settings);\n }\n }\n\n getIsSorted(th: keyof OrderActive): false | SortDirection {\n const { order, orderActive } = this.state;\n if (orderActive === th) {\n if (order[orderActive] === 'asc') {\n return 'asc';\n }\n return 'desc';\n }\n return false;\n }\n\n getNextSortDirection(th: keyof OrderActive): SortDirection {\n const { order } = this.state;\n return order[th] === 'asc' ? 'desc' : 'asc';\n }\n\n changeStyle(style: DisplayStyle) {\n this.setState({\n style,\n });\n }\n\n getCheckedItemsLength() {\n const { items } = this.props;\n const checks = items.filter((item) => item.checked);\n if (checks && checks.length) {\n return checks.length;\n }\n return 0;\n }\n\n /**\n * チェック済みかつ「実際にチェックボックスが描画される」アイテムのみを返す。\n * `mode === 'edit'` のとき `!media_editable` の行はチェックボックス自体が描画されない\n * (テーブル行の描画条件 `mode !== 'edit' || item.media_editable` と同じ判定)が、\n * `toggleAllCheck()`(全選択)は編集可否を見ずに `checked` を立てるため、`props.items` の\n * `checked` だけを見ると実際にフォーム送信される対象より多く数えてしまう。\n * `media.delete.before`/`.success` の `mediaIds` と Slot `media.list.bulk-actions` の\n * `selectedItems` は、実削除対象(フォームのチェックボックス)と一致させるためこちらを使う。\n */\n getSelectedItems(): MediaItem[] {\n const { items, mode } = this.props;\n return items.filter((item) => item.checked && (mode !== 'edit' || item.media_editable));\n }\n\n onLabelChange(labels: readonly MediaTag[]) {\n const tags = labels.map((label) => label.value);\n this.props.actions.setSelectedTags(tags);\n this.getFilteredOptions(tags);\n }\n\n getFilteredOptions(tags: string[]) {\n getMediaTransport()\n .fetchMediaTags(tags)\n .then((data) => {\n const filteredOptions = data.map((item) => ({\n value: item,\n label: item,\n }));\n this.setState({\n filteredOptions,\n });\n });\n }\n\n onChangeDisplayNumber(e: React.ChangeEvent<HTMLSelectElement>) {\n const { actions } = this.props;\n const limit = parseInt(e.target.value, 10);\n actions.setMediaConfig({\n limit,\n page: 1,\n });\n this.setState({ limit });\n }\n\n onKeywordInput(e: React.FormEvent<HTMLInputElement>) {\n if (!(e.target instanceof HTMLInputElement)) {\n return;\n }\n const { actions } = this.props;\n actions.setMediaConfig({\n keyword: e.target.value,\n });\n }\n\n getArchives(archives: string[]) {\n let years: string[] = [];\n let months: string[] = [];\n archives.forEach((archive) => {\n const [year, month] = archive.split('-');\n years.push(year);\n months.push(month);\n });\n years = [...new Set(years)].sort();\n months = [...new Set(months)].sort();\n return { years, months };\n }\n\n onDateChange(value: string, type: 'year' | 'month') {\n if (type === 'month') {\n this.setState({\n month: value,\n });\n } else {\n this.setState({\n year: value,\n });\n }\n }\n\n onAddedLabelsChange(labels: readonly MediaTag[]) {\n this.setState({\n selectedLabels: labels.map((label) => label),\n });\n }\n\n async addLabelToItems() {\n if (this.listRef.current === null) {\n return;\n }\n const { selectedLabels } = this.state;\n const tags = selectedLabels.map((selectedLabel) => selectedLabel.value).join(',');\n const fd = new FormData(this.listRef.current);\n fd.append('tags', tags);\n fd.append('ACMS_POST_Media_Index_Tags', 'true');\n fd.append('formToken', window.csrfToken);\n try {\n await getMediaTransport().addTagsToMedia(fd);\n notify.info(ACMS.i18n('media.add_tags_to_media_success'));\n this.fetchMediaList();\n } catch {\n notify.danger(ACMS.i18n('media.add_tags_to_media_error'));\n }\n }\n\n getFileStyle = (item: MediaItem): React.CSSProperties => {\n if (!item) {\n return {};\n }\n if (item.media_ext.toLowerCase() === 'pdf') {\n return {\n height: '70%',\n width: 'auto',\n opacity: 1,\n };\n }\n return {\n verticalAlign: 'middle',\n width: '70px',\n opacity: 1,\n };\n };\n\n getImageStyle = (item: MediaItem): React.CSSProperties => {\n if (!item || !item.width || !item.height) {\n return {};\n }\n if (item.width > item.height) {\n return {\n width: '100%',\n height: 'auto',\n opacity: 1,\n transform: `translate(-50%,-50%) scale(${item.width / item.height})`,\n };\n }\n return {\n width: 'auto',\n height: '100%',\n opacity: 1,\n transform: `translate(-50%,-50%) scale(${item.height / item.width})`,\n };\n };\n\n rowClick(e: React.MouseEvent<HTMLTableRowElement>, item: MediaItem) {\n const { oldItemId } = this.state;\n const element = e.target as HTMLElement;\n if (element.tagName === 'INPUT' || element.tagName === 'I' || element.tagName === 'LABEL') {\n e.preventDefault();\n }\n if (element.tagName !== 'BUTTON') {\n if (e.shiftKey && oldItemId !== null) {\n this.toggleCheckFrom(oldItemId, item);\n } else {\n this.toggleCheck(item);\n this.setState({\n oldItemId: item.media_id,\n });\n }\n }\n }\n\n componentDidUpdate(prevProps: MediaListProps) {\n const { style, scale, order, orderActive, limit, filterMenuOpened, owner, blogAxis } = this.state;\n localStorage.setItem(\n 'acms-media-list',\n JSON.stringify({\n style,\n scale,\n order,\n orderActive,\n limit,\n filterMenuOpened,\n owner,\n blogAxis,\n })\n );\n\n if (prevProps.items !== this.props.items) {\n this.setItems(this.props.items);\n }\n }\n\n componentDidMount() {\n const storage = localStorage.getItem('acms-media-list');\n const { selectedTags } = this.props;\n if (!storage) {\n this.fetchMediaList();\n return;\n }\n if (location.hash) {\n const { mid } = parseQuery(location.hash.slice(1));\n if (mid) {\n // @ts-expect-error 対応難易度が高いため、後で対応する\n this.setItem({ media_id: mid });\n }\n }\n const { style, scale, order, orderActive, limit, filterMenuOpened, owner, blogAxis } = JSON.parse(storage);\n this.setState(\n {\n style,\n scale,\n order,\n orderActive,\n limit,\n filterMenuOpened,\n owner,\n blogAxis,\n },\n () => {\n this.fetchMediaList();\n }\n );\n if (selectedTags) {\n this.getFilteredOptions(selectedTags);\n }\n }\n\n loadImg(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n resolve(img);\n };\n setTimeout(() => {\n resolve(img);\n }, 500);\n img.src = url;\n });\n }\n\n setItems(items: MediaItem[]) {\n const newItems = items.map(async (item) => {\n if ((item.media_type === 'image' || item.media_type === 'svg') && !item.width) {\n const img = await this.loadImg(item.media_thumbnail);\n if (img.naturalWidth && img.naturalHeight) {\n return { ...item, width: img.naturalWidth, height: img.naturalHeight };\n }\n return { ...item, width: img.width, height: img.height };\n }\n return item;\n });\n Promise.all(newItems).then((items) => {\n this.setState({ items });\n });\n }\n\n scaleChanged = (scale: number | number[]) => {\n const newScale = Array.isArray(scale) ? scale[0] : scale;\n this.setState({ scale: newScale });\n };\n\n getOptions = () => {\n const { filteredOptions } = this.state;\n const { tags, selectedTags } = this.props;\n if (selectedTags.length) {\n return filteredOptions;\n }\n return tags.map((tag) => ({\n value: tag,\n label: tag,\n }));\n };\n\n toggleMenu(menuItem: keyof Menu) {\n const { menu } = this.state;\n const newMenu = { ...menu, [menuItem]: !menu[menuItem] };\n this.setState({\n menu: newMenu,\n });\n }\n\n render() {\n const { mode, config, archives, tags, total, items, selectedTags, extensions } = this.props;\n\n const { years, months } = this.getArchives(archives);\n\n const { page, keyword } = config;\n const {\n style,\n editMode,\n scale,\n selectedLabels,\n items: stateItems,\n limit,\n menu,\n owner,\n blogAxis,\n order,\n orderActive,\n oldItemId,\n toggleAll,\n filterMenuOpened,\n filetype,\n } = this.state;\n\n const checkedLength = this.getCheckedItemsLength();\n const selectedItems = this.getSelectedItems();\n\n return (\n <div>\n <div id=\"media-filter-form\" role=\"search\" className=\"acms-admin-form\">\n <Filter>\n <FilterBody>\n <FilterGroup>\n <FilterGroupTitle>{ACMS.i18n('media.filter_search')}</FilterGroupTitle>\n <FilterContent fit>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-date\">{ACMS.i18n('media.created_date')}</FilterItemLabel>\n\n <div style={{ display: 'flex' }}>\n <div className=\"acms-admin-inline-block acms-admin-margin-right-mini\">\n <select\n id=\"filter-date\"\n className=\"acms-admin-margin-right-mini\"\n onChange={(e) => {\n this.onDateChange(e.target.value, 'year');\n }}\n >\n <option value=\"\">{ACMS.i18n('media.year')}</option>\n {years.map((year) => (\n <option value={year} key={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <VisuallyHidden asChild>\n <label htmlFor=\"filter-date-month\">{ACMS.i18n('media.month')}</label>\n </VisuallyHidden>\n <div className=\"acms-admin-inline-block\">\n <select\n id=\"filter-date-month\"\n onChange={(e) => {\n this.onDateChange(e.target.value, 'month');\n }}\n >\n <option value=\"\">{ACMS.i18n('media.month')}</option>\n {months.map((month) => (\n <option value={month} key={month}>\n {month}\n </option>\n ))}\n </select>\n </div>\n </div>\n </FilterItem>\n\n <FilterItem full>\n <FilterItemLabel htmlFor=\"filter-tag\">{ACMS.i18n('media.tag')}</FilterItemLabel>\n <div className=\"acms-admin-form-width-medium\">\n <RichSelect<MediaTag, true>\n isMulti\n value={selectedTags.map((selectedTag) => ({\n label: selectedTag,\n value: selectedTag,\n }))}\n options={this.getOptions()}\n onChange={this.onLabelChange.bind(this)}\n closeMenuOnSelect={false}\n placeholder={ACMS.i18n('media.tag_search_select_placeholder')}\n noOptionsMessage={() => ACMS.i18n('media.tag_select_no_options_message')}\n inputId=\"filter-tag\"\n />\n </div>\n </FilterItem>\n </FilterContent>\n </FilterGroup>\n\n {filterMenuOpened && (\n <div id=\"search-detail\">\n <FilterInner>\n <FilterGroup>\n <FilterGroupTitle>{ACMS.i18n('media.detailed_condition')}</FilterGroupTitle>\n <FilterContent>\n <FilterItem full>\n <FilterItemLabel htmlFor=\"filter-keyword\">{ACMS.i18n('media.keyword')}</FilterItemLabel>\n <input\n type=\"text\"\n placeholder={ACMS.i18n('media.search_by_keyword')}\n id=\"filter-keyword\"\n className=\"acms-admin-form-width-full\"\n value={keyword}\n onInput={this.onKeywordInput.bind(this)}\n />\n </FilterItem>\n </FilterContent>\n </FilterGroup>\n <FilterGroup>\n <FilterGroupTitle>{ACMS.i18n('media.narrow_down')}</FilterGroupTitle>\n <FilterContent>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-sort\">{ACMS.i18n('media.number_of_items')}</FilterItemLabel>\n <select id=\"filter-sort\" value={limit} onChange={this.onChangeDisplayNumber.bind(this)}>\n <option value=\"5\">5</option>\n <option value=\"10\">10</option>\n <option value=\"20\">20</option>\n <option value=\"50\">50</option>\n <option value=\"75\">75</option>\n <option value=\"100\">100</option>\n <option value=\"200\">200</option>\n <option value=\"300\">300</option>\n </select>\n </FilterItem>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-type\">{ACMS.i18n('media.type')}</FilterItemLabel>\n <select\n id=\"filter-type\"\n disabled={this.props.filetype !== 'all'}\n defaultValue={filetype}\n onChange={(e) => {\n this.setState({\n filetype: e.target.value as MediaViewFileType,\n });\n }}\n >\n <option value=\"all\">{ACMS.i18n('media.all')}</option>\n <option value=\"image\">{ACMS.i18n('media.image')}</option>\n <option value=\"file\">{ACMS.i18n('media.file')}</option>\n </select>\n </FilterItem>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-ext\">{ACMS.i18n('media.extension')}</FilterItemLabel>\n <select\n id=\"filter-ext\"\n onChange={(e) => {\n this.setState({\n fileext: e.target.value,\n });\n }}\n >\n <option value=\"all\">{ACMS.i18n('media.all')}</option>\n {extensions &&\n extensions.map((extension) => (\n <option value={extension} key={extension.toLowerCase()}>\n {extension.toLowerCase()}\n </option>\n ))}\n </select>\n </FilterItem>\n <FilterItem>\n <label htmlFor=\"filter-owner\" className=\"acms-admin-form-checkbox acms-admin-m-0\">\n <input\n id=\"filter-owner\"\n type=\"checkbox\"\n checked={owner}\n onChange={(e) => {\n this.setState({\n owner: e.target.checked,\n });\n }}\n />\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.owner')}\n </label>\n </FilterItem>\n {ACMS.Config.sbid !== ACMS.Config.bid && (\n <FilterItem>\n <label htmlFor=\"filter-blog-axis\" className=\"acms-admin-form-checkbox acms-admin-m-0\">\n <input\n id=\"filter-blog-axis\"\n type=\"checkbox\"\n checked={blogAxis}\n onChange={(e) => {\n this.setState({\n blogAxis: e.target.checked,\n });\n }}\n />\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.blog_axis')}\n </label>\n </FilterItem>\n )}\n </FilterContent>\n </FilterGroup>\n </FilterInner>\n </div>\n )}\n </FilterBody>\n <FilterFooter>\n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-btn-info acms-admin-btn-search\"\n onClick={() => {\n this.fetchMediaList();\n }}\n >\n {ACMS.i18n('media.search')}\n </button>\n\n <FilterDetailButton\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n this.setState({\n filterMenuOpened: !filterMenuOpened,\n });\n }}\n aria-expanded={filterMenuOpened}\n aria-controls=\"search-detail\"\n >\n {ACMS.i18n('media.detailed_search')}\n </FilterDetailButton>\n </FilterFooter>\n </Filter>\n </div>\n\n <div className=\"acms-admin-media-action-group\">\n <div className=\"acms-admin-media-action-item acms-admin-media-action-item-fix\">\n <div className=\"acms-admin-btn-group acms-admin-media-action-display-switch\" role=\"group\">\n <button\n type=\"button\"\n className={classnames('acms-admin-btn', {\n 'acms-admin-btn-active': style === 'table',\n })}\n onClick={this.changeStyle.bind(this, 'table')}\n aria-pressed={style === 'table'}\n aria-label={ACMS.i18n('media.display_switch_list')}\n >\n <i className=\"acms-admin-icon-list\" />\n </button>\n <button\n type=\"button\"\n className={classnames('acms-admin-btn', {\n 'acms-admin-btn-active': style === 'list',\n })}\n onClick={this.changeStyle.bind(this, 'list')}\n aria-pressed={style === 'list'}\n aria-label={ACMS.i18n('media.display_switch_grid')}\n >\n <i className=\"acms-admin-icon-grid\" />\n </button>\n </div>\n\n <div className=\"acms-admin-media-action-sort-select-wrap\">\n <div className=\"acms-admin-media-action-sort-select\">\n {style === 'table' && (\n <Menu closeOnSelect={false}>\n <MenuTrigger className=\"acms-admin-btn\" aria-label={ACMS.i18n('media.open_config_menu')}>\n <i className=\"acms-admin-icon-config\" aria-hidden=\"true\" />\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n <MenuItemCheckbox\n value=\"image\"\n checked={menu.image}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.image2')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"id\"\n checked={menu.id}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n ID\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"filename\"\n checked={menu.filename}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.file_name')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"tag\"\n checked={menu.tag}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.tag')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"last_modified\"\n checked={menu.last_modified}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.updated_date')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"upload_datetime\"\n checked={menu.upload_datetime}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.created_date')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"filesize\"\n checked={menu.filesize}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.file_size')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"blogname\"\n checked={menu.blogname}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.blog_name')}\n </MenuItemCheckbox>\n </MenuList>\n </MenuPopover>\n </Menu>\n )}\n </div>\n\n <div className=\"acms-admin-media-action-sort-select\" style={{ position: 'relative' }}>\n <Menu closeOnSelect={false}>\n <MenuTrigger type=\"button\" className=\"acms-admin-select-btn\">\n {this.getOrderSelectBtnLabel()}\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n <MenuItemRadioGroup\n value={orderActive}\n onValueChange={(value) => {\n this.checkOrder(value as keyof OrderActive);\n }}\n >\n <MenuItemRadio value=\"media_title\">{ACMS.i18n('media.title')}</MenuItemRadio>\n <MenuItemRadio value=\"media_last_modified\">{ACMS.i18n('media.updated_date')}</MenuItemRadio>\n <MenuItemRadio value=\"media_datetime\">{ACMS.i18n('media.created_date')}</MenuItemRadio>\n <MenuItemRadio value=\"media_filesize\">{ACMS.i18n('media.file_size')}</MenuItemRadio>\n </MenuItemRadioGroup>\n <MenuDivider />\n <MenuItemRadioGroup\n value={order[orderActive]}\n onValueChange={(value) => {\n this.checkAscDesc(value as SortDirection);\n }}\n >\n <MenuItemRadio value=\"asc\">{ACMS.i18n('media.asc')}</MenuItemRadio>\n <MenuItemRadio value=\"desc\">{ACMS.i18n('media.desc')}</MenuItemRadio>\n </MenuItemRadioGroup>\n </MenuList>\n </MenuPopover>\n </Menu>\n </div>\n </div>\n </div>\n\n <div className=\"acms-admin-media-action-item acms-admin-media-action-item-middle\">\n {style === 'list' && (\n <div className=\"acms-admin-media-action-range\">\n <span style={{ display: 'inline-flex', width: '100%', alignItems: 'center' }}>\n <VisuallyHidden>{ACMS.i18n('media.display_size')}</VisuallyHidden>\n <i\n className=\"acms-admin-icon-unit-image\"\n style={{ fontSize: '12px', color: '#777777', marginRight: '10px' }}\n />\n <RangeSlider\n className=\"acms-admin-range-slider\"\n min={1}\n max={2}\n step={0.1}\n value={scale}\n onChange={this.scaleChanged}\n />\n <i\n className=\"acms-admin-icon-unit-image\"\n style={{ fontSize: '18px', color: '#777777', marginLeft: '10px' }}\n />\n </span>\n </div>\n )}\n\n {style === 'list' && (\n <div className=\"acms-admin-media-action-select-all\">\n <button\n type=\"button\"\n onClick={this.toggleAllCheck.bind(this)}\n className=\"acms-admin-media-grid-checkbox-wrap\"\n >\n <span\n className={classnames('acms-admin-media-grid-checkbox', {\n selected: toggleAll,\n })}\n aria-hidden=\"true\"\n />\n {ACMS.i18n('media.select_all')}\n </button>\n </div>\n )}\n </div>\n\n <div className=\"acms-admin-form-group acms-admin-media-action-item acms-admin-media-action-item-left\">\n <div className=\"acms-admin-form\">\n <VisuallyHidden asChild>\n <label htmlFor=\"media-action-select\">{ACMS.i18n('media.select')}</label>\n </VisuallyHidden>\n <select\n id=\"media-action-select\"\n className=\"acms-admin-margin-right-mini\"\n value={editMode}\n onChange={(e) => {\n const { value } = e.target;\n this.setState({\n editMode: value,\n });\n }}\n >\n <option>{ACMS.i18n('media.select')}</option>\n <option value=\"remove\">{ACMS.i18n('media.remove')}</option>\n <option value=\"tag\">{ACMS.i18n('media.add_tags')}</option>\n </select>\n {editMode === 'remove' && (\n <>\n {ACMS.i18n('media.checked_items').replace('$1', checkedLength.toString())}\n \n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-btn-danger\"\n onClick={this.removeImgs.bind(this)}\n >\n {ACMS.i18n('media.remove')}\n </button>\n </>\n )}\n {editMode === 'tag' && (\n <>\n <div\n style={{ display: 'inline-block', verticalAlign: 'middle' }}\n className=\"acms-admin-margin-right-mini\"\n >\n {ACMS.i18n('media.add_tags_to_checked_items').replace('$1', checkedLength.toString())}\n </div>\n <div\n style={{\n display: 'inline-block',\n width: '200px',\n verticalAlign: 'middle',\n marginRight: '5px',\n }}\n >\n <CreatableSelect<MediaTag, true>\n isMulti\n onChange={this.onAddedLabelsChange.bind(this)}\n value={selectedLabels}\n options={tags.map((tag) => ({\n label: tag,\n value: tag,\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 </div>\n <button type=\"button\" className=\"acms-admin-btn\" onClick={this.addLabelToItems.bind(this)}>\n 追加\n </button>\n </>\n )}\n <Slot<MediaListBulkActionsFillProps> name=\"media.list.bulk-actions\" fillProps={{ selectedItems }} />\n </div>\n </div>\n\n <form\n ref={this.listRef}\n className=\"acms-admin-media-list\"\n style={{ display: style === 'table' ? 'block' : 'none' }}\n >\n <TableScrollable breakpoints={['xs', 'sm', 'md']}>\n <Table variant=\"list\" hover className=\"adminTable acms-admin-media-table\">\n <TableHeader heading>\n <TableRow>\n <TableHead nowrap className=\"acms-admin-media-row-check\">\n {mode === 'edit' && (\n <label\n htmlFor=\"checkAll\"\n aria-label=\"すべて選択\"\n className=\"acms-admin-form-checkbox acms-admin-m-0\"\n onChange={this.toggleAllCheck.bind(this)}\n >\n <input id=\"checkAll\" type=\"checkbox\" />\n <i className=\"acms-admin-ico-checkbox\" />\n </label>\n )}\n </TableHead>\n {menu.image && (\n <TableHead nowrap className=\"acms-admin-media-row-image\">\n {ACMS.i18n('media.image2')}\n </TableHead>\n )}\n {menu.id && (\n <TableHead nowrap className=\"acms-admin-media-row-id\">\n ID\n </TableHead>\n )}\n {menu.filename && (\n <TableHead\n className=\"acms-admin-media-row-title\"\n aria-sort={\n this.getIsSorted('media_title')\n ? `${this.getIsSorted('media_title') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_title')}\n data-next-sort={`${this.getNextSortDirection('media_title')}ending`}\n >\n {ACMS.i18n('media.file_name')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_title') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.tag && <TableHead className=\"acms-admin-media-row-tag\">{ACMS.i18n('media.tag')}</TableHead>}\n {menu.last_modified && (\n <TableHead\n nowrap\n className=\"acms-admin-media-row-date\"\n aria-sort={\n this.getIsSorted('media_last_modified')\n ? `${this.getIsSorted('media_last_modified') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_last_modified')}\n data-next-sort={`${this.getNextSortDirection('media_last_modified')}ending`}\n >\n {ACMS.i18n('media.updated_date')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_last_modified') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.upload_datetime && (\n <TableHead\n nowrap\n className=\"acms-admin-media-row-date\"\n aria-sort={\n this.getIsSorted('media_datetime')\n ? `${this.getIsSorted('media_datetime') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_datetime')}\n data-next-sort={`${this.getNextSortDirection('media_datetime')}ending`}\n >\n {ACMS.i18n('media.created_date')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_datetime') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.filesize && (\n <TableHead\n nowrap\n className=\"acms-admin-media-row-size\"\n aria-sort={\n this.getIsSorted('media_filesize')\n ? `${this.getIsSorted('media_filesize') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_filesize')}\n data-next-sort={`${this.getNextSortDirection('media_filesize')}ending`}\n >\n {ACMS.i18n('media.file_size')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_filesize') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.blogname && (\n <TableHead className=\"acms-admin-media-row-blogname\">{ACMS.i18n('media.blog_name')}</TableHead>\n )}\n {mode === 'edit' && (\n <TableHead nowrap className=\"acms-admin-media-row-action\" style={{ whiteSpace: 'nowrap' }}>\n {ACMS.i18n('media.action')}\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n <TableBody>\n {items.map((item) => (\n <TableRow\n key={item.media_id}\n onClick={(e) => {\n this.rowClick(e, item);\n }}\n >\n <TableCell nowrap className=\"acms-admin-media-row-check\">\n {item.media_editable}\n {(mode !== 'edit' || item.media_editable) && (\n <label aria-label=\"選択\" className=\"acms-admin-form-checkbox acms-admin-m-0\">\n <input\n type=\"checkbox\"\n name=\"checks[]\"\n value={`${item.media_bid}:${item.media_id}`}\n checked={item.checked}\n onChange={this.toggleCheck.bind(this, item)}\n aria-label={item.media_title || `${item.media_id}`}\n />\n <i className=\"acms-admin-ico-checkbox\" />\n </label>\n )}\n </TableCell>\n {menu.image && (\n <>\n {}\n <TableCell nowrap className=\"acms-admin-media-row-image\">\n <ConditionalWrap\n wrap={(chidren) => (\n <a href={item.media_permalink} target=\"_blank\" rel=\"noopener noreferrer\">\n {chidren}\n </a>\n )}\n condition={item.media_type === 'file'}\n >\n <div className=\"acms-admin-media-list-thumbnail-wrap\">\n <img\n src={`${item.media_thumbnail}?date=${item.media_last_modified}`}\n className=\"acms-admin-media-list-thumbnail\"\n alt=\"\"\n />\n </div>\n </ConditionalWrap>\n </TableCell>\n </>\n )}\n {menu.id && (\n <TableCell nowrap className=\"acms-admin-media-row-id\">\n <span className=\"acms-admin-label\">{item.media_id}</span>\n </TableCell>\n )}\n {menu.filename && (\n <TableCell className=\"acms-admin-media-row-title\">{item.media_title}</TableCell>\n )}\n {menu.tag && (\n <TableCell className=\"acms-admin-media-row-tag\">\n {item.media_label &&\n item.media_label.split(delimiter).map((label) => (\n <span\n className=\"acms-admin-label acms-admin-label-info\"\n style={{\n display: 'inline-block',\n marginRight: '5px',\n marginTop: '5px',\n }}\n key={label}\n >\n {label}\n </span>\n ))}\n </TableCell>\n )}\n {menu.last_modified && (\n <TableCell nowrap className=\"acms-admin-media-row-date\">\n {dayjs(item.media_last_modified).format('YYYY/MM/DD')}\n <br />\n {dayjs(item.media_last_modified).format('HH:mm')}\n </TableCell>\n )}\n {menu.upload_datetime && (\n <TableCell nowrap className=\"acms-admin-media-row-date\">\n {dayjs(item.media_datetime).format('YYYY/MM/DD')}\n <br />\n {dayjs(item.media_datetime).format('HH:mm')}\n </TableCell>\n )}\n {menu.filesize && (\n <TableCell nowrap className=\"acms-admin-media-row-action\">\n {item.media_filesize && <>{formatBytes(item.media_filesize)}</>}\n {item.media_size && item.media_type === 'image' && (\n <span style={{ display: 'block', marginTop: '5px' }}>\n {item.media_size}\n px\n </span>\n )}\n </TableCell>\n )}\n {menu.blogname && (\n <TableCell className=\"acms-admin-media-row-blogname\">{item.media_blog_name}</TableCell>\n )}\n {mode === 'edit' && (\n <TableCell nowrap>\n {item.media_editable && (\n <button type=\"button\" onClick={this.setItem.bind(this, item)} className=\"acms-admin-btn\">\n {ACMS.i18n('media.edit')}\n </button>\n )}\n </TableCell>\n )}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableScrollable>\n </form>\n\n <div className=\"acms-admin-media-grid\" style={{ display: style === 'table' ? 'none' : 'flex' }}>\n {items.map((item, index) => (\n <div\n className=\"acms-admin-media-grid-item\"\n key={item.media_id}\n style={{ width: `${150 * scale}px`, height: `${150 * scale}px` }}\n >\n <div\n className={classnames('acms-admin-media-grid-figure', { selected: item.checked })}\n title={item.media_title}\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n if (e.shiftKey && oldItemId !== null) {\n this.toggleCheckFrom(oldItemId, item);\n } else {\n this.toggleCheck(item);\n this.setState({\n oldItemId: item.media_id,\n });\n }\n }}\n onKeyDown={(e) => {\n // フォーカス中の要素が自分自身だけの場合のみ処理\n if (e.currentTarget !== document.activeElement) {\n return; // 子要素にフォーカスがあれば無視\n }\n if (e.key === 'Enter' || e.key === ' ') {\n if (e.shiftKey && oldItemId !== null) {\n this.toggleCheckFrom(oldItemId, item);\n } else {\n this.toggleCheck(item);\n this.setState({\n oldItemId: item.media_id,\n });\n }\n // デフォルトのスペースバーの動作を防止\n e.preventDefault();\n }\n }}\n >\n <div className=\"acms-admin-media-grid-shadow\" />\n {item.media_type === 'file' && (\n <div className=\"acms-admin-media-grid-img-wrap\">\n <img\n className=\"acms-admin-media-grid-file-img\"\n src={item.media_thumbnail}\n style={this.getFileStyle(stateItems[index])}\n alt=\"\"\n />\n <span className=\"acms-admin-media-grid-filename\">{item.media_title}</span>\n </div>\n )}\n {(item.media_type === 'image' || item.media_type === 'svg') && (\n <img\n src={`${item.media_thumbnail}?date=${item.media_last_modified}`}\n style={this.getImageStyle(stateItems[index])}\n id={`media-image-${index}`}\n alt=\"\"\n />\n )}\n <div className={classnames('acms-admin-media-grid-flame', { selected: item.checked })}>\n <div className=\"acms-admin-media-grid-checkbox\" />\n {mode === 'edit' && item.media_editable && (\n <div className=\"acms-admin-media-edit-list-btn-wrap\">\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-edit-list-btn\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n this.setItem(item);\n }}\n >\n {ACMS.i18n('media.edit')}\n </button>\n </div>\n )}\n </div>\n </div>\n <input type=\"hidden\" name=\"checks[]\" value={`${item.media_bid}:${item.media_id}`} />\n </div>\n ))}\n </div>\n <Grid className=\"acms-admin-margin-top-medium\">\n <PaginationRoot\n page={page}\n pageSize={limit}\n total={Math.ceil(total / limit)}\n totalItems={total}\n onChange={(page) =>\n this.fetchMediaList({\n page,\n })\n }\n >\n <GridItem col={{ md: 6, xs: 12 }}>\n <Pagination />\n </GridItem>\n <GridItem col={{ md: 6, xs: 12 }}>\n <PaginationSummary />\n </GridItem>\n </PaginationRoot>\n </Grid>\n </div>\n </div>\n );\n }\n}\n","import { Component } from 'react';\nimport classNames from 'classnames';\nimport DOMPurify from 'dompurify';\nimport { emit } from '@ablogcms/events';\nimport { random, getExt, dataURItoBlob } from '@ablogcms/utils';\nimport createPdf from '@ablogcms/lib/create-pdf';\nimport runWithConcurrency from '@ablogcms/utils/run-with-concurrency';\nimport ResizeImage from '@ablogcms/lib/resize-image-util';\nimport readFiles, { type ExtendedFile } from '@ablogcms/lib/read-files';\nimport { CreatableSelect } from '@ablogcms/components/rich-select';\nimport { DropZone } from '@ablogcms/components/drop-zone';\nimport ProgressBar from '@ablogcms/components/progress-bar';\nimport { MediaAjaxConfig, MediaItem, MediaTag } from '../../types';\nimport * as actions from '../../stores/actions';\nimport { getMediaTransport } from '../../runtime';\n\nconst delimiter = ',';\nconst DEFAULT_UPLOAD_LIMIT = 100;\nconst DEFAULT_UPLOAD_CONCURRENCY = 4;\n\ninterface MediaUploadItem {\n file: File;\n filetype: string;\n preview: string;\n blob?: Blob | null; // for heic\n id: string;\n idx: number;\n progress: number;\n progressError: boolean;\n name: string;\n size: number;\n uploadedItem?: MediaItem;\n}\n\ninterface MediaUploaderProps {\n showUploadButton?: boolean;\n largeSize: number;\n\n config: MediaAjaxConfig;\n actions: typeof actions;\n files?: File[];\n tags?: string[];\n label?: string;\n}\n\ninterface MediaUploaderState {\n items: MediaUploadItem[];\n label: string;\n loading: boolean;\n imgsOnStage: boolean;\n hasUploadedItems: boolean;\n}\n\nexport default class MediaUploader extends Component<MediaUploaderProps, MediaUploaderState> {\n static defaultProps = {\n showUploadButton: true,\n tags: [],\n files: [],\n };\n\n constructor(props: MediaUploaderProps) {\n super(props);\n this.state = {\n items: [],\n label: props.label || '',\n loading: false,\n imgsOnStage: false,\n hasUploadedItems: false, // has already uploaded images\n };\n }\n\n // 一度にアップロードできる件数の上限(config 由来。未設定・不正値はデフォルトにフォールバック)\n get uploadLimit(): number {\n const value = parseInt(String(ACMS.Config.mediaUploadLimit ?? ''), 10);\n return Number.isFinite(value) && value > 0 ? value : DEFAULT_UPLOAD_LIMIT;\n }\n\n // 同時にアップロードする本数(並列度。config 由来。未設定・不正値はデフォルトにフォールバック)\n get uploadConcurrency(): number {\n const value = parseInt(String(ACMS.Config.mediaUploadConcurrency ?? ''), 10);\n return Number.isFinite(value) && value > 0 ? value : DEFAULT_UPLOAD_CONCURRENCY;\n }\n\n // 全体のアップロード進捗(完了件数・失敗件数・総件数・全体パーセント)\n get uploadProgress(): { done: number; total: number; percent: number; errorCount: number } {\n const { items } = this.state;\n const total = items.length;\n if (total === 0) {\n return { done: 0, total: 0, percent: 0, errorCount: 0 };\n }\n const isDone = (item: MediaUploadItem) => Boolean(item.uploadedItem) || item.progress < 0;\n const done = items.filter(isDone).length;\n const errorCount = items.filter((item) => item.progressError).length;\n const sum = items.reduce((acc, item) => acc + (isDone(item) ? 100 : Math.max(0, Math.min(100, item.progress))), 0);\n return { done, total, percent: Math.round(sum / total), errorCount };\n }\n\n // アップロード中のページ離脱・リロードに確認ダイアログを出す(途中中断の防止)\n handleBeforeUnload = (event: BeforeUnloadEvent) => {\n if (this.state.loading) {\n event.preventDefault();\n event.returnValue = '';\n }\n };\n\n componentDidMount() {\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n if (this.props.files) {\n readFiles(this.props.files).then((extededFiles) => {\n this.onComplete(extededFiles);\n });\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n }\n\n async createPdfThumbnail(file: Blob | File) {\n const pdf = await createPdf(file, 1);\n return pdf;\n }\n\n upload(blob: Blob | File, label: string, name: string, item: MediaUploadItem): Promise<MediaItem> {\n const { largeSize } = this.props;\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n const fd = new FormData();\n fd.append('ACMS_POST_Media_Upload', 'true');\n if (label) {\n fd.append('tags', label);\n }\n const ext = getExt(name);\n if (ext.toLowerCase() === 'pdf') {\n const image = await this.createPdfThumbnail(blob);\n if (image) {\n fd.append('media_pdf_thumbnail', dataURItoBlob(image));\n fd.append('pdf_page', '1');\n }\n }\n fd.append('size', `${largeSize}`);\n fd.append('file', blob, name);\n fd.append('formToken', window.csrfToken);\n this.setProgressBar(item, 0);\n getMediaTransport()\n .uploadMedia(fd, {\n onUploadProgress: (e) => {\n if (typeof e.total === 'number') {\n this.setProgressBar(item, 70 * (e.loaded / e.total));\n }\n },\n })\n .then((res) => {\n if (res && res.data) {\n if ('status' in res.data && res.data.status === 'failure') {\n throw new Error(res.data.message);\n }\n const mediaItem = res.data as MediaItem;\n this.setProgressBar(item, 100);\n setTimeout(() => {\n resolve(mediaItem);\n }, 300);\n return;\n }\n throw new Error(ACMS.i18n('media.error.unknown'));\n })\n .catch((err) => {\n console.error(err);\n this.setProgressBar(item, 100, true);\n if (err instanceof Error) {\n alert(err.message);\n }\n // 失敗時も必ず settle させ、並列キューの worker スロットを解放する(ハング防止)\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n }\n\n setProgressBar(item: MediaUploadItem, progress: number, progressError = false) {\n // 並列アップロード中の状態更新競合(lost update)を避けるため、最新の state を土台に更新する\n this.setState((prev) => {\n const index = prev.items.findIndex((file) => file.id === item.id);\n if (index === -1) {\n return null;\n }\n const copyItems = prev.items.slice();\n copyItems[index] = { ...copyItems[index], progress, progressError };\n return { items: copyItems };\n });\n }\n\n removeFile(file: MediaUploadItem) {\n this.setState((prev) => ({\n items: prev.items.filter((item) => item.idx !== file.idx),\n }));\n }\n\n setUploadedItem(file: MediaUploadItem, uploadedItem: MediaItem) {\n // 並列アップロード中の状態更新競合(lost update)を避けるため、最新の state を土台に更新する\n this.setState((prev) => {\n const index = prev.items.findIndex((item) => item.idx === file.idx);\n if (index === -1) {\n return null;\n }\n const copyItems = prev.items.slice();\n copyItems[index] = { ...copyItems[index], uploadedItem, progress: -1 };\n return { items: copyItems };\n });\n }\n\n editItem(item: MediaUploadItem) {\n if (item.uploadedItem) {\n this.props.actions.setItem(item.uploadedItem);\n }\n }\n\n async uploadItems(): Promise<MediaItem[]> {\n const { items, label } = this.state;\n const { actions } = this.props;\n\n // ゲート: アップロード前に案件固有の追加確認(コンプラ同意等)を挟める拡張ポイント。\n // プラグイン未読み込み・ハンドラ0件でも emit は { canceled: false, event: 元の payload } で解決するため、\n // 既存の必須バリデーション(mime/サイズ等。upload() 内・呼び出し元 onComplete 内)を置き換えない上乗せ。\n const gateResult = await emit('media.upload.before', { files: items.map((item) => item.file) });\n if (gateResult.canceled) {\n if (gateResult.reason) {\n alert(gateResult.reason);\n }\n return [];\n }\n // パイプライン通過後の files を使う。ハンドラが除外したファイルはアップロード対象から外す\n const allowedFiles = new Set(gateResult.event.files);\n const targetItems = items.filter((item) => allowedFiles.has(item.file));\n\n const resizeImage = new ResizeImage();\n this.setState({\n loading: true,\n hasUploadedItems: true,\n });\n // lgImg はログイン時のみ出力されるが、メディアアップローダーはログイン必須の管理画面でのみ使用される\n const [resizeType, largeSize] = ACMS.Config.lgImg!.split(':');\n\n // 各ファイルを「呼び出すとアップロードを開始するタスク」に変換し、同時実行数を絞って順次\n // アップロードする。1件が失敗しても null を返して settle し、後続のキューを止めない(ハング防止)。\n const tasks: Array<() => Promise<MediaItem | null>> = targetItems.map((item: MediaUploadItem) => async () => {\n const { name, filetype, file } = item;\n const isHeic = filetype === 'image' && /(heic|heif)/i.test(file.type);\n const isSvg = filetype === 'image' && file.type.includes('svg');\n const isGif = filetype === 'image' && file.type.includes('gif');\n\n try {\n let uploadData: Blob | File;\n if (filetype === 'image') {\n if (isHeic) {\n // heic は blob があるのでそれをアップロード(無ければスキップ)\n if (!(item.blob instanceof Blob)) {\n return null;\n }\n uploadData = item.blob;\n } else if (isSvg) {\n // svg は text を取得して DOMPurify でクリーンアップしてからアップロード\n const text = await file.text();\n const clean = DOMPurify.sanitize(text, { USE_PROFILES: { svg: true, svgFilters: true } });\n uploadData = new Blob([clean], { type: 'image/svg+xml' });\n } else if (isGif) {\n // gif はリサイズせずそのままアップロード\n uploadData = file;\n } else {\n // それ以外はリサイズしてアップロード\n const { blob, resize } = await resizeImage.getBlobFromFile(file, resizeType, parseInt(largeSize, 10));\n uploadData = resize && ACMS.Config.mediaClientResize !== 'off' ? blob : file;\n }\n } else {\n // ファイルはそのままアップロード\n uploadData = file;\n }\n const uploadedItem = await this.upload(uploadData, label, name, item);\n this.setUploadedItem(item, uploadedItem);\n return uploadedItem;\n } catch {\n // upload 側で alert 済み。タスクは settle させ、残りのファイルの処理を継続する\n return null;\n }\n });\n\n const results = await runWithConcurrency(tasks, this.uploadConcurrency);\n this.setState({\n loading: false,\n });\n actions.fetchMediaList();\n const uploadedItems = results.filter((result): result is MediaItem => result !== null);\n // 通知: アップロード完了後の処理。既存の acms.media-updated はメディア編集の保存時のみ発火するため、\n // 新規アップロード完了に対になるイベントとしてここで発火する\n await emit('media.upload.success', { items: uploadedItems });\n return uploadedItems;\n }\n\n onComplete(files: ExtendedFile[]) {\n let items: MediaUploadItem[] = [\n ...this.state.items,\n ...files.map(\n (file) =>\n ({\n file: file.file,\n filetype: file.filetype,\n preview: file.filetype === 'image' ? file.preview : '',\n blob: file.filetype === 'image' ? file.blob : null, // for heic\n name: file.file.name,\n size: file.file.size,\n idx: -1,\n id: '',\n progress: 0,\n progressError: false,\n }) as MediaUploadItem\n ),\n ]\n .filter((item) => {\n if (item.uploadedItem) {\n return false;\n }\n return true;\n })\n .map((item, index) => ({\n ...item,\n idx: index,\n id: random(10),\n }));\n // 同一ファイルの多重追加を除去する。name だけでなく size・lastModified も一致した場合のみ重複とみなし、\n // ファイル名が偶然一致するだけの別ファイルは区別する(サーバー側の uniqueFilePath による連番採番に委ねる)\n items = Array.from(\n new Map(items.map((item) => [`${item.file.name}:${item.file.size}:${item.file.lastModified}`, item])).values()\n );\n\n const limit = this.uploadLimit;\n if (items.length > limit) {\n alert(ACMS.i18n('media.more_than_limit_not_allowed', { limit }));\n items = items.slice(0, limit);\n }\n if (items.length > 0) {\n this.setState({ items, hasUploadedItems: false, imgsOnStage: true });\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 addTags(tags: readonly MediaTag[]) {\n const label = tags.reduce((val, tag, idx) => {\n if (idx === 0) {\n return tag.value;\n }\n return `${val}${delimiter}${tag.value}`;\n }, '');\n\n this.setState({\n label,\n });\n }\n\n removeUploadedItems() {\n this.setState((prev) => ({\n items: prev.items.filter((item) => !item.uploadedItem),\n }));\n }\n\n // 全体進捗テキストの出し分け(進行中 / 完了 / 一部失敗)\n renderOverallText() {\n const overall = this.uploadProgress;\n const processed = overall.total > 0 && overall.done + overall.errorCount === overall.total;\n if (!processed) {\n return ACMS.i18n('media.upload_overall_progress', { done: overall.done, total: overall.total });\n }\n if (overall.errorCount > 0) {\n // 完了は完了(バーは info のまま)。失敗件数だけ danger で添える\n return (\n <>\n {ACMS.i18n('media.upload_done_count', { done: overall.done })}\n <span className=\"acms-admin-text-danger\">\n {ACMS.i18n('media.upload_failed_count', { failed: overall.errorCount })}\n </span>\n </>\n );\n }\n return ACMS.i18n('media.upload_all_complete', { total: overall.total });\n }\n\n render() {\n const { items, label, hasUploadedItems, imgsOnStage } = this.state;\n const { showUploadButton, tags } = this.props;\n const overall = this.uploadProgress;\n return (\n <>\n <div className=\"clearfix\" style={{ marginBottom: '10px' }}>\n <div style={{ padding: '0 10px' }}>\n <CreatableSelect<MediaTag, true>\n isMulti\n options={(tags || []).map((tag) => ({\n label: tag,\n value: tag,\n }))}\n value={this.makeTags(label)}\n onChange={this.addTags.bind(this)}\n placeholder={ACMS.i18n('media.tag_select_placeholder')}\n formatCreateLabel={(inputValue) => ACMS.i18n('media.add_tag', { name: inputValue })}\n isValidNewOption={(inputValue) => inputValue.trim().length > 0}\n noOptionsMessage={() => ACMS.i18n('media.tag_select_no_options_message')}\n closeMenuOnSelect={false}\n hideSelectedOptions\n menuPortalTarget={document.body}\n />\n </div>\n </div>\n {hasUploadedItems && items.length > 0 && (\n <div className=\"acms-admin-media-upload-overall\" style={{ padding: '0 10px', marginBottom: '10px' }}>\n {/* 完了(100%)すると ProgressBar 側でアニメーションが自動停止する(ストライプは残る)。完了はテキストで示す */}\n <ProgressBar value={overall.percent} variant=\"info\" striped animated />\n <p className=\"acms-admin-media-upload-overall-text\">{this.renderOverallText()}</p>\n </div>\n )}\n <div className=\"acms-admin-media-upload-container-wrap\">\n <div className=\"acms-admin-media-upload-container\">\n <div className=\"acms-admin-media-upload-item\">\n <div className=\"acms-admin-media-upload-item-inner\">\n <DropZone onComplete={this.onComplete.bind(this)} />\n </div>\n </div>\n {items.map((item) => (\n <div className=\"acms-admin-media-upload-item\" key={item.id}>\n <div\n className={classNames('acms-admin-media-upload-item-inner', {\n '-progress': item.progress > 0,\n })}\n style={{ position: 'relative' }}\n >\n {item.progress > 0 && (\n <div\n style={{\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n boxSizing: 'border-box',\n zIndex: 2,\n }}\n >\n {/* 個別画像の進捗は画像に重ねる薄いバー(loading-bar)を用いる。メディア専用のためインライン */}\n <div className=\"acms-admin-loading-bar acms-admin-active\">\n <div\n className={classNames('acms-admin-loading-bar-inner', {\n '-alert': item.progressError,\n })}\n style={{ width: `${item.progress}%` }}\n />\n </div>\n </div>\n )}\n {!item.uploadedItem && (\n <button\n type=\"button\"\n className=\"acms-admin-media-upload-cancel\"\n onClick={this.removeFile.bind(this, item)}\n aria-label={ACMS.i18n('media.remove_file')}\n />\n )}\n {item.uploadedItem && (\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-edit-upload-btn\"\n onClick={this.editItem.bind(this, item)}\n >\n {ACMS.i18n('media.edit')}\n </button>\n )}\n {item.filetype === 'image' && (\n <div className=\"acms-admin-media-upload-bg\" style={{ backgroundImage: `url(${item.preview})` }} />\n )}\n {item.filetype !== 'image' && (\n <div className=\"acms-admin-media-upload-bg\">\n <img\n src={`${ACMS.Config.root}themes/system/images/fileicon/file.png`}\n className=\"acms-admin-media-upload-file\"\n alt=\"\"\n />\n </div>\n )}\n <div className=\"acms-admin-media-overlay\" />\n <div className=\"acms-admin-media-upload-caption\">\n <p className=\"acms-admin-media-upload-caption-text\">{item.name}</p>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n {items.length === 0 && <p style={{ textAlign: 'center' }}>{ACMS.i18n('media.no_staged_media')}</p>}\n {showUploadButton && imgsOnStage && (\n <div className=\"acms-admin-media-upload-footer clearfix\">\n <button\n type=\"button\"\n className=\"acms-admin-btn-admin acms-admin-btn-admin-primary acms-admin-float-right\"\n onClick={this.uploadItems.bind(this)}\n disabled={hasUploadedItems}\n >\n {ACMS.i18n('media.upload')}\n </button>\n </div>\n )}\n </>\n );\n }\n}\n"],"mappings":";;;;;AAAA,OAAO,gBAAgB;AACvB,OAAO,iBAAiB;AACxB,OAAO,WAAW;AAClB,OAAO;AAEP,SAAS,WAAW,iBAAiB;AACrC,SAAS,YAAY;AACrB,SAAS,MAAM,gBAAgB;AAC/B,SAAS,aAAa,kBAAkB;AACxC,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAY,gBAAgB,yBAAyB;AAC9D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO,qBAAqB;AAC5B,SAAS,YAAY,uBAAuB;AAC5C,OAAO,oBAAoB;AAC3B,SAAS,YAAY;AACrB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA8rBS,SAiaA,UAjaA,KAOQ,YAPR;AA/mBhB,IAAM,YAAY;AAElB,IAAqB,YAArB,cAAuC,UAA0C;AAAA,EAC/E;AAAA,EAEA,OAAO,eAAe;AAAA,IACpB,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY,CAAC;AAAA,EACf;AAAA,EAEA,YAAY,OAAuB;AACjC,UAAM,KAAK;AACX,SAAK,QAAQ;AAAA,MACX,OAAO;AAAA,QACL,aAAa;AAAA,QACb,qBAAqB;AAAA,QACrB,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,KAAK;AAAA,QACL,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO;AAAA,MACP,gBAAgB,CAAC;AAAA,MACjB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,WAAW;AAAA,MACX,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,QAAQ,CAAC;AAAA,MACT,OAAO,MAAM;AAAA,MACb,iBAAiB,CAAC;AAAA,MAClB,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU,MAAM,WAAW,MAAM,WAAW;AAAA,MAC5C,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AACA,SAAK,UAAU,UAA2B;AAAA,EAC5C;AAAA,EAEA,yBAAyB;AACvB,UAAM,EAAE,aAAa,MAAM,IAAI,KAAK;AACpC,UAAM,SAAS,MAAM,WAAW,MAAM,QAAQ,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,YAAY;AAC7F,QAAI,gBAAgB,eAAe;AACjC,aAAO,GAAG,KAAK,KAAK,aAAa,CAAC,SAAI,MAAM;AAAA,IAC9C;AACA,QAAI,gBAAgB,uBAAuB;AACzC,aAAO,GAAG,KAAK,KAAK,mBAAmB,CAAC,SAAI,MAAM;AAAA,IACpD;AACA,QAAI,gBAAgB,kBAAkB;AACpC,aAAO,GAAG,KAAK,KAAK,oBAAoB,CAAC,SAAI,MAAM;AAAA,IACrD;AACA,QAAI,gBAAgB,cAAc;AAChC,aAAO,GAAG,KAAK,KAAK,iBAAiB,CAAC,SAAI,MAAM;AAAA,IAClD;AACA,QAAI,gBAAgB,kBAAkB;AACpC,aAAO,GAAG,KAAK,KAAK,iBAAiB,CAAC,SAAI,MAAM;AAAA,IAClD;AACA,WAAO,KAAK,KAAK,cAAc;AAAA,EACjC;AAAA,EAEA,QAAQ,MAAiB;AACvB,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI,aAAa,QAAQ;AACvB,cAAQ,aAAa,MAAM,IAAI,QAAQ,QAAQ,EAAE;AAAA,IACnD;AACA,sBAAkB,EACf,iBAAiB,QAAQ,EACzB,KAAK,CAAC,QAAQ;AACb,UAAI,IAAI,WAAW,WAAW;AAC5B,eAAO,OAAO,KAAK,KAAK,uBAAuB,CAAC;AAChD;AAAA,MACF;AACA,UAAI,IAAI,QAAQ,IAAI,KAAK,UAAU;AACjC,aAAK,MAAM,QAAQ,QAAQ,IAAI,IAAiB;AAAA,MAClD;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AACX,aAAO,OAAO,KAAK,KAAK,uBAAuB,CAAC;AAAA,IAClD,CAAC;AACH,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,MAAiB;AAC3B,UAAM,EAAE,OAAO,UAAU,IAAI,KAAK;AAClC,QAAI,WAAW;AACb,YAAM,WAAW,MAAM,KAAK,CAACA,UAASA,MAAK,OAAO;AAClD,UAAI,UAAU;AACZ,aAAK,MAAM,QAAQ,gBAAgB,EAAE,GAAG,UAAU,SAAS,CAAC,SAAS,QAAQ,CAAC;AAAA,MAChF;AAAA,IACF;AACA,SAAK,MAAM,QAAQ,gBAAgB,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,QAAQ,CAAC;AAAA,EACxE;AAAA,EAEA,gBAAgB,YAAmC,QAAmB;AACpE,UAAM,EAAE,OAAO,UAAU,IAAI,KAAK;AAClC,UAAM,EAAE,gBAAgB,IAAI,KAAK,MAAM;AACvC,QAAI,WAAW;AACb;AAAA,IACF;AACA,UAAM,YAAY,MAAM,UAAU,CAAC,SAAS;AAC1C,UAAI,KAAK,aAAa,YAAY;AAChC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AACD,UAAM,UAAU,MAAM,UAAU,CAAC,SAAS;AACxC,UAAI,KAAK,aAAa,OAAO,UAAU;AACrC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AACD,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,cAAc,CAAC;AACrB,UAAM,WAAW,YAAY,UAAU,UAAU;AACjD,UAAM,WAAW,YAAY,UAAU,YAAY;AACnD,UAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,UAAI,SAAS,YAAY,SAAS,UAAU;AAC1C,wBAAgB,EAAE,GAAG,MAAM,SAAS,YAAY,CAAC;AAAA,MACnD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,iBAAiB;AACf,UAAM,EAAE,OAAO,SAAS,UAAU,IAAI,KAAK;AAC3C,UAAM,EAAE,UAAU,IAAI,KAAK;AAC3B,UAAM,MAAM,CAAC;AACb,SAAK,SAAS;AAAA,MACZ,WAAW;AAAA,IACb,CAAC;AACD,QAAI,WAAW;AACb;AAAA,IACF;AACA,QAAI,KAAK;AACP,cAAQ,aAAa,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,SAAS,KAAK,EAAE,CAAC;AAAA,IACxE,OAAO;AACL,cAAQ,aAAa,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,SAAS,MAAM,EAAE,CAAC;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,MAAM,aAAa;AACjB,QAAI,CAAC,QAAQ,KAAK,KAAK,4BAA4B,CAAC,GAAG;AACrD;AAAA,IACF;AACA,QAAI,KAAK,QAAQ,YAAY,MAAM;AACjC;AAAA,IACF;AAMA,UAAM,WAAW,KAAK,iBAAiB,EAAE,IAAI,CAAC,SAAS,OAAO,KAAK,QAAQ,CAAC;AAC5E,UAAM,aAAa,MAAM,KAAK,uBAAuB,EAAE,SAAS,CAAC;AACjE,QAAI,WAAW,UAAU;AACvB,UAAI,WAAW,QAAQ;AACrB,eAAO,OAAO,WAAW,MAAM;AAAA,MACjC;AACA;AAAA,IACF;AAEA,UAAM,KAAK,IAAI,SAAS,KAAK,QAAQ,OAAO;AAC5C,OAAG,OAAO,gCAAgC,MAAM;AAChD,OAAG,OAAO,aAAa,OAAO,SAAS;AACvC,UAAM,MAAM,QAAQ,OAAO,KAAK,KAAK,sBAAsB,CAAC;AAC5D,QAAI;AACF,YAAM,kBAAkB,EAAE,YAAY,EAAE;AACxC,aAAO,KAAK,KAAK,KAAK,4BAA4B,CAAC;AACnD,WAAK,KAAK,wBAAwB,WAAW,KAAK;AAClD,WAAK,eAAe;AAAA,IACtB,QAAQ;AACN,aAAO,OAAO,KAAK,KAAK,0BAA0B,CAAC;AAAA,IACrD,UAAE;AACA,UAAI;AAAA,IACN;AAAA,EACF;AAAA,EAEA,SAAS,QAA2B;AAClC,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,gBAAgB,KAAK,qBAAqB,MAAM;AACtD,SAAK;AAAA,MACH;AAAA,QACE,GAAG;AAAA,QACH,aAAa;AAAA,QACb,OAAO;AAAA,UACL,GAAG;AAAA,UACH,CAAC,MAAM,GAAG;AAAA,QACZ;AAAA,MACF;AAAA,MACA,MAAM;AACJ,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA,EAEF;AAAA,EAEA,WAAW,aAAgC;AACzC,SAAK;AAAA,MACH;AAAA,QACE;AAAA,MACF;AAAA,MACA,MAAM;AACJ,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa,SAAyB;AACpC,UAAM,EAAE,OAAO,YAAY,IAAI,KAAK;AACpC,UAAM,WAAW,IAAI;AACrB,SAAK;AAAA,MACH;AAAA,QACE;AAAA,MACF;AAAA,MACA,MAAM;AACJ,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW;AACT,UAAM,EAAE,aAAa,MAAM,IAAI,KAAK;AACpC,QAAI,gBAAgB,eAAe;AACjC,aAAO,aAAa,MAAM,WAAW,CAAC;AAAA,IACxC;AACA,QAAI,gBAAgB,uBAAuB;AACzC,aAAO,iBAAiB,MAAM,WAAW,CAAC;AAAA,IAC5C;AACA,QAAI,gBAAgB,kBAAkB;AACpC,aAAO,eAAe,MAAM,WAAW,CAAC;AAAA,IAC1C;AACA,QAAI,gBAAgB,kBAAkB;AACpC,aAAO,aAAa,MAAM,WAAW,CAAC;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,SAA0B,CAAC,GAAG;AAC3C,UAAM,EAAE,MAAM,OAAO,OAAO,UAAU,SAAS,OAAO,SAAS,IAAI,KAAK;AACxE,UAAM,EAAE,SAAS,cAAc,OAAO,IAAI,KAAK;AAC/C,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,MAAM,OAAO,OAAO,CAAC,aAAa,YAAY;AAClD,UAAI,CAAC,aAAa;AAChB,eAAO;AAAA,MACT;AACA,aAAO,GAAG,WAAW,IAAI,OAAO;AAAA,IAClC,GAAG,EAAE;AACL,UAAM,WAA4B;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,QAAQ,OAAO;AACjB,eAAS,OAAO,GAAG,IAAI,IAAI,KAAK;AAAA,IAClC,OAAO;AACL,eAAS,OAAO;AAChB,eAAS,OAAO;AAChB,eAAS,QAAQ;AAAA,IACnB;AACA,QAAI,CAAC,OAAO,MAAM;AAChB,aAAO,OAAO;AAAA,IAChB;AACA,UAAM,WAAW,EAAE,GAAG,QAAQ,GAAG,SAAS;AAC1C,QAAI,WAAW,QAAQ,gBAAgB;AACrC,cAAQ,eAAe,QAAQ;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,YAAY,IAA8C;AACxD,UAAM,EAAE,OAAO,YAAY,IAAI,KAAK;AACpC,QAAI,gBAAgB,IAAI;AACtB,UAAI,MAAM,WAAW,MAAM,OAAO;AAChC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,qBAAqB,IAAsC;AACzD,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,WAAO,MAAM,EAAE,MAAM,QAAQ,SAAS;AAAA,EACxC;AAAA,EAEA,YAAY,OAAqB;AAC/B,SAAK,SAAS;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,wBAAwB;AACtB,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,UAAM,SAAS,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO;AAClD,QAAI,UAAU,OAAO,QAAQ;AAC3B,aAAO,OAAO;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,mBAAgC;AAC9B,UAAM,EAAE,OAAO,KAAK,IAAI,KAAK;AAC7B,WAAO,MAAM,OAAO,CAAC,SAAS,KAAK,YAAY,SAAS,UAAU,KAAK,eAAe;AAAA,EACxF;AAAA,EAEA,cAAc,QAA6B;AACzC,UAAM,OAAO,OAAO,IAAI,CAAC,UAAU,MAAM,KAAK;AAC9C,SAAK,MAAM,QAAQ,gBAAgB,IAAI;AACvC,SAAK,mBAAmB,IAAI;AAAA,EAC9B;AAAA,EAEA,mBAAmB,MAAgB;AACjC,sBAAkB,EACf,eAAe,IAAI,EACnB,KAAK,CAAC,SAAS;AACd,YAAM,kBAAkB,KAAK,IAAI,CAAC,UAAU;AAAA,QAC1C,OAAO;AAAA,QACP,OAAO;AAAA,MACT,EAAE;AACF,WAAK,SAAS;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AAAA,EAEA,sBAAsB,GAAyC;AAC7D,UAAM,EAAE,QAAQ,IAAI,KAAK;AACzB,UAAM,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE;AACzC,YAAQ,eAAe;AAAA,MACrB;AAAA,MACA,MAAM;AAAA,IACR,CAAC;AACD,SAAK,SAAS,EAAE,MAAM,CAAC;AAAA,EACzB;AAAA,EAEA,eAAe,GAAsC;AACnD,QAAI,EAAE,EAAE,kBAAkB,mBAAmB;AAC3C;AAAA,IACF;AACA,UAAM,EAAE,QAAQ,IAAI,KAAK;AACzB,YAAQ,eAAe;AAAA,MACrB,SAAS,EAAE,OAAO;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,UAAoB;AAC9B,QAAI,QAAkB,CAAC;AACvB,QAAI,SAAmB,CAAC;AACxB,aAAS,QAAQ,CAAC,YAAY;AAC5B,YAAM,CAAC,MAAM,KAAK,IAAI,QAAQ,MAAM,GAAG;AACvC,YAAM,KAAK,IAAI;AACf,aAAO,KAAK,KAAK;AAAA,IACnB,CAAC;AACD,YAAQ,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK;AACjC,aAAS,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK;AACnC,WAAO,EAAE,OAAO,OAAO;AAAA,EACzB;AAAA,EAEA,aAAa,OAAe,MAAwB;AAClD,QAAI,SAAS,SAAS;AACpB,WAAK,SAAS;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AAAA,IACH,OAAO;AACL,WAAK,SAAS;AAAA,QACZ,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,oBAAoB,QAA6B;AAC/C,SAAK,SAAS;AAAA,MACZ,gBAAgB,OAAO,IAAI,CAAC,UAAU,KAAK;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,kBAAkB;AACtB,QAAI,KAAK,QAAQ,YAAY,MAAM;AACjC;AAAA,IACF;AACA,UAAM,EAAE,eAAe,IAAI,KAAK;AAChC,UAAM,OAAO,eAAe,IAAI,CAAC,kBAAkB,cAAc,KAAK,EAAE,KAAK,GAAG;AAChF,UAAM,KAAK,IAAI,SAAS,KAAK,QAAQ,OAAO;AAC5C,OAAG,OAAO,QAAQ,IAAI;AACtB,OAAG,OAAO,8BAA8B,MAAM;AAC9C,OAAG,OAAO,aAAa,OAAO,SAAS;AACvC,QAAI;AACF,YAAM,kBAAkB,EAAE,eAAe,EAAE;AAC3C,aAAO,KAAK,KAAK,KAAK,iCAAiC,CAAC;AACxD,WAAK,eAAe;AAAA,IACtB,QAAQ;AACN,aAAO,OAAO,KAAK,KAAK,+BAA+B,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,eAAe,CAAC,SAAyC;AACvD,QAAI,CAAC,MAAM;AACT,aAAO,CAAC;AAAA,IACV;AACA,QAAI,KAAK,UAAU,YAAY,MAAM,OAAO;AAC1C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AACA,WAAO;AAAA,MACL,eAAe;AAAA,MACf,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,gBAAgB,CAAC,SAAyC;AACxD,QAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,KAAK,QAAQ;AACxC,aAAO,CAAC;AAAA,IACV;AACA,QAAI,KAAK,QAAQ,KAAK,QAAQ;AAC5B,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,WAAW,8BAA8B,KAAK,QAAQ,KAAK,MAAM;AAAA,MACnE;AAAA,IACF;AACA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW,8BAA8B,KAAK,SAAS,KAAK,KAAK;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,SAAS,GAA0C,MAAiB;AAClE,UAAM,EAAE,UAAU,IAAI,KAAK;AAC3B,UAAM,UAAU,EAAE;AAClB,QAAI,QAAQ,YAAY,WAAW,QAAQ,YAAY,OAAO,QAAQ,YAAY,SAAS;AACzF,QAAE,eAAe;AAAA,IACnB;AACA,QAAI,QAAQ,YAAY,UAAU;AAChC,UAAI,EAAE,YAAY,cAAc,MAAM;AACpC,aAAK,gBAAgB,WAAW,IAAI;AAAA,MACtC,OAAO;AACL,aAAK,YAAY,IAAI;AACrB,aAAK,SAAS;AAAA,UACZ,WAAW,KAAK;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBAAmB,WAA2B;AAC5C,UAAM,EAAE,OAAO,OAAO,OAAO,aAAa,OAAO,kBAAkB,OAAO,SAAS,IAAI,KAAK;AAC5F,iBAAa;AAAA,MACX;AAAA,MACA,KAAK,UAAU;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,UAAU,UAAU,KAAK,MAAM,OAAO;AACxC,WAAK,SAAS,KAAK,MAAM,KAAK;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,oBAAoB;AAClB,UAAM,UAAU,aAAa,QAAQ,iBAAiB;AACtD,UAAM,EAAE,aAAa,IAAI,KAAK;AAC9B,QAAI,CAAC,SAAS;AACZ,WAAK,eAAe;AACpB;AAAA,IACF;AACA,QAAI,SAAS,MAAM;AACjB,YAAM,EAAE,IAAI,IAAI,WAAW,SAAS,KAAK,MAAM,CAAC,CAAC;AACjD,UAAI,KAAK;AAEP,aAAK,QAAQ,EAAE,UAAU,IAAI,CAAC;AAAA,MAChC;AAAA,IACF;AACA,UAAM,EAAE,OAAO,OAAO,OAAO,aAAa,OAAO,kBAAkB,OAAO,SAAS,IAAI,KAAK,MAAM,OAAO;AACzG,SAAK;AAAA,MACH;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,MAAM;AACJ,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AACA,QAAI,cAAc;AAChB,WAAK,mBAAmB,YAAY;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,QAAQ,KAAwC;AAC9C,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,YAAM,MAAM,IAAI,MAAM;AACtB,UAAI,SAAS,MAAM;AACjB,gBAAQ,GAAG;AAAA,MACb;AACA,iBAAW,MAAM;AACf,gBAAQ,GAAG;AAAA,MACb,GAAG,GAAG;AACN,UAAI,MAAM;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,OAAoB;AAC3B,UAAM,WAAW,MAAM,IAAI,OAAO,SAAS;AACzC,WAAK,KAAK,eAAe,WAAW,KAAK,eAAe,UAAU,CAAC,KAAK,OAAO;AAC7E,cAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,eAAe;AACnD,YAAI,IAAI,gBAAgB,IAAI,eAAe;AACzC,iBAAO,EAAE,GAAG,MAAM,OAAO,IAAI,cAAc,QAAQ,IAAI,cAAc;AAAA,QACvE;AACA,eAAO,EAAE,GAAG,MAAM,OAAO,IAAI,OAAO,QAAQ,IAAI,OAAO;AAAA,MACzD;AACA,aAAO;AAAA,IACT,CAAC;AACD,YAAQ,IAAI,QAAQ,EAAE,KAAK,CAACC,WAAU;AACpC,WAAK,SAAS,EAAE,OAAAA,OAAM,CAAC;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,eAAe,CAAC,UAA6B;AAC3C,UAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,CAAC,IAAI;AACnD,SAAK,SAAS,EAAE,OAAO,SAAS,CAAC;AAAA,EACnC;AAAA,EAEA,aAAa,MAAM;AACjB,UAAM,EAAE,gBAAgB,IAAI,KAAK;AACjC,UAAM,EAAE,MAAM,aAAa,IAAI,KAAK;AACpC,QAAI,aAAa,QAAQ;AACvB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,IAAI,CAAC,SAAS;AAAA,MACxB,OAAO;AAAA,MACP,OAAO;AAAA,IACT,EAAE;AAAA,EACJ;AAAA,EAEA,WAAW,UAAsB;AAC/B,UAAM,EAAE,KAAK,IAAI,KAAK;AACtB,UAAM,UAAU,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;AACvD,SAAK,SAAS;AAAA,MACZ,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,MAAM,QAAQ,UAAU,MAAM,OAAO,OAAO,cAAc,WAAW,IAAI,KAAK;AAEtF,UAAM,EAAE,OAAO,OAAO,IAAI,KAAK,YAAY,QAAQ;AAEnD,UAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,KAAK;AAET,UAAM,gBAAgB,KAAK,sBAAsB;AACjD,UAAM,gBAAgB,KAAK,iBAAiB;AAE5C,WACE,qBAAC,SACC;AAAA,0BAAC,SAAI,IAAG,qBAAoB,MAAK,UAAS,WAAU,mBAClD,+BAAC,UACC;AAAA,6BAAC,cACC;AAAA,+BAAC,eACC;AAAA,gCAAC,oBAAkB,eAAK,KAAK,qBAAqB,GAAE;AAAA,YACpD,qBAAC,iBAAc,KAAG,MAChB;AAAA,mCAAC,cACC;AAAA,oCAAC,mBAAgB,SAAQ,eAAe,eAAK,KAAK,oBAAoB,GAAE;AAAA,gBAExE,qBAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC5B;AAAA,sCAAC,SAAI,WAAU,wDACb;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAG;AAAA,sBACH,WAAU;AAAA,sBACV,UAAU,CAAC,MAAM;AACf,6BAAK,aAAa,EAAE,OAAO,OAAO,MAAM;AAAA,sBAC1C;AAAA,sBAEA;AAAA,4CAAC,YAAO,OAAM,IAAI,eAAK,KAAK,YAAY,GAAE;AAAA,wBACzC,MAAM,IAAI,CAAC,SACV,oBAAC,YAAO,OAAO,MACZ,kBADuB,IAE1B,CACD;AAAA;AAAA;AAAA,kBACH,GACF;AAAA,kBACA,oBAAC,kBAAe,SAAO,MACrB,8BAAC,WAAM,SAAQ,qBAAqB,eAAK,KAAK,aAAa,GAAE,GAC/D;AAAA,kBACA,oBAAC,SAAI,WAAU,2BACb;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAG;AAAA,sBACH,UAAU,CAAC,MAAM;AACf,6BAAK,aAAa,EAAE,OAAO,OAAO,OAAO;AAAA,sBAC3C;AAAA,sBAEA;AAAA,4CAAC,YAAO,OAAM,IAAI,eAAK,KAAK,aAAa,GAAE;AAAA,wBAC1C,OAAO,IAAI,CAAC,UACX,oBAAC,YAAO,OAAO,OACZ,mBADwB,KAE3B,CACD;AAAA;AAAA;AAAA,kBACH,GACF;AAAA,mBACF;AAAA,iBACF;AAAA,cAEA,qBAAC,cAAW,MAAI,MACd;AAAA,oCAAC,mBAAgB,SAAQ,cAAc,eAAK,KAAK,WAAW,GAAE;AAAA,gBAC9D,oBAAC,SAAI,WAAU,gCACb;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAO;AAAA,oBACP,OAAO,aAAa,IAAI,CAAC,iBAAiB;AAAA,sBACxC,OAAO;AAAA,sBACP,OAAO;AAAA,oBACT,EAAE;AAAA,oBACF,SAAS,KAAK,WAAW;AAAA,oBACzB,UAAU,KAAK,cAAc,KAAK,IAAI;AAAA,oBACtC,mBAAmB;AAAA,oBACnB,aAAa,KAAK,KAAK,qCAAqC;AAAA,oBAC5D,kBAAkB,MAAM,KAAK,KAAK,qCAAqC;AAAA,oBACvE,SAAQ;AAAA;AAAA,gBACV,GACF;AAAA,iBACF;AAAA,eACF;AAAA,aACF;AAAA,UAEC,oBACC,oBAAC,SAAI,IAAG,iBACN,+BAAC,eACC;AAAA,iCAAC,eACC;AAAA,kCAAC,oBAAkB,eAAK,KAAK,0BAA0B,GAAE;AAAA,cACzD,oBAAC,iBACC,+BAAC,cAAW,MAAI,MACd;AAAA,oCAAC,mBAAgB,SAAQ,kBAAkB,eAAK,KAAK,eAAe,GAAE;AAAA,gBACtE;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,aAAa,KAAK,KAAK,yBAAyB;AAAA,oBAChD,IAAG;AAAA,oBACH,WAAU;AAAA,oBACV,OAAO;AAAA,oBACP,SAAS,KAAK,eAAe,KAAK,IAAI;AAAA;AAAA,gBACxC;AAAA,iBACF,GACF;AAAA,eACF;AAAA,YACA,qBAAC,eACC;AAAA,kCAAC,oBAAkB,eAAK,KAAK,mBAAmB,GAAE;AAAA,cAClD,qBAAC,iBACC;AAAA,qCAAC,cACC;AAAA,sCAAC,mBAAgB,SAAQ,eAAe,eAAK,KAAK,uBAAuB,GAAE;AAAA,kBAC3E,qBAAC,YAAO,IAAG,eAAc,OAAO,OAAO,UAAU,KAAK,sBAAsB,KAAK,IAAI,GACnF;AAAA,wCAAC,YAAO,OAAM,KAAI,eAAC;AAAA,oBACnB,oBAAC,YAAO,OAAM,MAAK,gBAAE;AAAA,oBACrB,oBAAC,YAAO,OAAM,MAAK,gBAAE;AAAA,oBACrB,oBAAC,YAAO,OAAM,MAAK,gBAAE;AAAA,oBACrB,oBAAC,YAAO,OAAM,MAAK,gBAAE;AAAA,oBACrB,oBAAC,YAAO,OAAM,OAAM,iBAAG;AAAA,oBACvB,oBAAC,YAAO,OAAM,OAAM,iBAAG;AAAA,oBACvB,oBAAC,YAAO,OAAM,OAAM,iBAAG;AAAA,qBACzB;AAAA,mBACF;AAAA,gBACA,qBAAC,cACC;AAAA,sCAAC,mBAAgB,SAAQ,eAAe,eAAK,KAAK,YAAY,GAAE;AAAA,kBAChE;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAG;AAAA,sBACH,UAAU,KAAK,MAAM,aAAa;AAAA,sBAClC,cAAc;AAAA,sBACd,UAAU,CAAC,MAAM;AACf,6BAAK,SAAS;AAAA,0BACZ,UAAU,EAAE,OAAO;AAAA,wBACrB,CAAC;AAAA,sBACH;AAAA,sBAEA;AAAA,4CAAC,YAAO,OAAM,OAAO,eAAK,KAAK,WAAW,GAAE;AAAA,wBAC5C,oBAAC,YAAO,OAAM,SAAS,eAAK,KAAK,aAAa,GAAE;AAAA,wBAChD,oBAAC,YAAO,OAAM,QAAQ,eAAK,KAAK,YAAY,GAAE;AAAA;AAAA;AAAA,kBAChD;AAAA,mBACF;AAAA,gBACA,qBAAC,cACC;AAAA,sCAAC,mBAAgB,SAAQ,cAAc,eAAK,KAAK,iBAAiB,GAAE;AAAA,kBACpE;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAG;AAAA,sBACH,UAAU,CAAC,MAAM;AACf,6BAAK,SAAS;AAAA,0BACZ,SAAS,EAAE,OAAO;AAAA,wBACpB,CAAC;AAAA,sBACH;AAAA,sBAEA;AAAA,4CAAC,YAAO,OAAM,OAAO,eAAK,KAAK,WAAW,GAAE;AAAA,wBAC3C,cACC,WAAW,IAAI,CAAC,cACd,oBAAC,YAAO,OAAO,WACZ,oBAAU,YAAY,KADM,UAAU,YAAY,CAErD,CACD;AAAA;AAAA;AAAA,kBACL;AAAA,mBACF;AAAA,gBACA,oBAAC,cACC,+BAAC,WAAM,SAAQ,gBAAe,WAAU,2CACtC;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAG;AAAA,sBACH,MAAK;AAAA,sBACL,SAAS;AAAA,sBACT,UAAU,CAAC,MAAM;AACf,6BAAK,SAAS;AAAA,0BACZ,OAAO,EAAE,OAAO;AAAA,wBAClB,CAAC;AAAA,sBACH;AAAA;AAAA,kBACF;AAAA,kBACA,oBAAC,OAAE,WAAU,2BAA0B;AAAA,kBACtC,KAAK,KAAK,aAAa;AAAA,mBAC1B,GACF;AAAA,gBACC,KAAK,OAAO,SAAS,KAAK,OAAO,OAChC,oBAAC,cACC,+BAAC,WAAM,SAAQ,oBAAmB,WAAU,2CAC1C;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAG;AAAA,sBACH,MAAK;AAAA,sBACL,SAAS;AAAA,sBACT,UAAU,CAAC,MAAM;AACf,6BAAK,SAAS;AAAA,0BACZ,UAAU,EAAE,OAAO;AAAA,wBACrB,CAAC;AAAA,sBACH;AAAA;AAAA,kBACF;AAAA,kBACA,oBAAC,OAAE,WAAU,2BAA0B;AAAA,kBACtC,KAAK,KAAK,iBAAiB;AAAA,mBAC9B,GACF;AAAA,iBAEJ;AAAA,eACF;AAAA,aACF,GACF;AAAA,WAEJ;AAAA,QACA,qBAAC,gBACC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAM;AACb,qBAAK,eAAe;AAAA,cACtB;AAAA,cAEC,eAAK,KAAK,cAAc;AAAA;AAAA,UAC3B;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,CAAC,MAAM;AACd,kBAAE,eAAe;AACjB,qBAAK,SAAS;AAAA,kBACZ,kBAAkB,CAAC;AAAA,gBACrB,CAAC;AAAA,cACH;AAAA,cACA,iBAAe;AAAA,cACf,iBAAc;AAAA,cAEb,eAAK,KAAK,uBAAuB;AAAA;AAAA,UACpC;AAAA,WACF;AAAA,SACF,GACF;AAAA,MAEA,qBAAC,SAAI,WAAU,iCACb;AAAA,6BAAC,SAAI,WAAU,iEACb;AAAA,+BAAC,SAAI,WAAU,+DAA8D,MAAK,SAChF;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAW,WAAW,kBAAkB;AAAA,kBACtC,yBAAyB,UAAU;AAAA,gBACrC,CAAC;AAAA,gBACD,SAAS,KAAK,YAAY,KAAK,MAAM,OAAO;AAAA,gBAC5C,gBAAc,UAAU;AAAA,gBACxB,cAAY,KAAK,KAAK,2BAA2B;AAAA,gBAEjD,8BAAC,OAAE,WAAU,wBAAuB;AAAA;AAAA,YACtC;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAW,WAAW,kBAAkB;AAAA,kBACtC,yBAAyB,UAAU;AAAA,gBACrC,CAAC;AAAA,gBACD,SAAS,KAAK,YAAY,KAAK,MAAM,MAAM;AAAA,gBAC3C,gBAAc,UAAU;AAAA,gBACxB,cAAY,KAAK,KAAK,2BAA2B;AAAA,gBAEjD,8BAAC,OAAE,WAAU,wBAAuB;AAAA;AAAA,YACtC;AAAA,aACF;AAAA,UAEA,qBAAC,SAAI,WAAU,4CACb;AAAA,gCAAC,SAAI,WAAU,uCACZ,oBAAU,WACT,qBAAC,QAAK,eAAe,OACnB;AAAA,kCAAC,eAAY,WAAU,kBAAiB,cAAY,KAAK,KAAK,wBAAwB,GACpF,8BAAC,OAAE,WAAU,0BAAyB,eAAY,QAAO,GAC3D;AAAA,cACA,oBAAC,eACC,+BAAC,YACC;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBAEC,eAAK,KAAK,cAAc;AAAA;AAAA,gBAC3B;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBACD;AAAA;AAAA,gBAED;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBAEC,eAAK,KAAK,iBAAiB;AAAA;AAAA,gBAC9B;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBAEC,eAAK,KAAK,WAAW;AAAA;AAAA,gBACxB;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBAEC,eAAK,KAAK,oBAAoB;AAAA;AAAA,gBACjC;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBAEC,eAAK,KAAK,oBAAoB;AAAA;AAAA,gBACjC;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBAEC,eAAK,KAAK,iBAAiB;AAAA;AAAA,gBAC9B;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS,KAAK;AAAA,oBACd,iBAAiB,CAAC,UAAU,UAAU;AACpC,2BAAK,WAAW,KAAmB;AAAA,oBACrC;AAAA,oBAEC,eAAK,KAAK,iBAAiB;AAAA;AAAA,gBAC9B;AAAA,iBACF,GACF;AAAA,eACF,GAEJ;AAAA,YAEA,oBAAC,SAAI,WAAU,uCAAsC,OAAO,EAAE,UAAU,WAAW,GACjF,+BAAC,QAAK,eAAe,OACnB;AAAA,kCAAC,eAAY,MAAK,UAAS,WAAU,yBAClC,eAAK,uBAAuB,GAC/B;AAAA,cACA,oBAAC,eACC,+BAAC,YACC;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,oBACP,eAAe,CAAC,UAAU;AACxB,2BAAK,WAAW,KAA0B;AAAA,oBAC5C;AAAA,oBAEA;AAAA,0CAAC,iBAAc,OAAM,eAAe,eAAK,KAAK,aAAa,GAAE;AAAA,sBAC7D,oBAAC,iBAAc,OAAM,uBAAuB,eAAK,KAAK,oBAAoB,GAAE;AAAA,sBAC5E,oBAAC,iBAAc,OAAM,kBAAkB,eAAK,KAAK,oBAAoB,GAAE;AAAA,sBACvE,oBAAC,iBAAc,OAAM,kBAAkB,eAAK,KAAK,iBAAiB,GAAE;AAAA;AAAA;AAAA,gBACtE;AAAA,gBACA,oBAAC,eAAY;AAAA,gBACb;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,MAAM,WAAW;AAAA,oBACxB,eAAe,CAAC,UAAU;AACxB,2BAAK,aAAa,KAAsB;AAAA,oBAC1C;AAAA,oBAEA;AAAA,0CAAC,iBAAc,OAAM,OAAO,eAAK,KAAK,WAAW,GAAE;AAAA,sBACnD,oBAAC,iBAAc,OAAM,QAAQ,eAAK,KAAK,YAAY,GAAE;AAAA;AAAA;AAAA,gBACvD;AAAA,iBACF,GACF;AAAA,eACF,GACF;AAAA,aACF;AAAA,WACF;AAAA,QAEA,qBAAC,SAAI,WAAU,oEACZ;AAAA,oBAAU,UACT,oBAAC,SAAI,WAAU,iCACb,+BAAC,UAAK,OAAO,EAAE,SAAS,eAAe,OAAO,QAAQ,YAAY,SAAS,GACzE;AAAA,gCAAC,kBAAgB,eAAK,KAAK,oBAAoB,GAAE;AAAA,YACjD;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,UAAU,QAAQ,OAAO,WAAW,aAAa,OAAO;AAAA;AAAA,YACnE;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU,KAAK;AAAA;AAAA,YACjB;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,UAAU,QAAQ,OAAO,WAAW,YAAY,OAAO;AAAA;AAAA,YAClE;AAAA,aACF,GACF;AAAA,UAGD,UAAU,UACT,oBAAC,SAAI,WAAU,sCACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,KAAK,eAAe,KAAK,IAAI;AAAA,cACtC,WAAU;AAAA,cAEV;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW,WAAW,kCAAkC;AAAA,sBACtD,UAAU;AAAA,oBACZ,CAAC;AAAA,oBACD,eAAY;AAAA;AAAA,gBACd;AAAA,gBACC,KAAK,KAAK,kBAAkB;AAAA;AAAA;AAAA,UAC/B,GACF;AAAA,WAEJ;AAAA,QAEA,oBAAC,SAAI,WAAU,wFACb,+BAAC,SAAI,WAAU,mBACb;AAAA,8BAAC,kBAAe,SAAO,MACrB,8BAAC,WAAM,SAAQ,uBAAuB,eAAK,KAAK,cAAc,GAAE,GAClE;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACH,WAAU;AAAA,cACV,OAAO;AAAA,cACP,UAAU,CAAC,MAAM;AACf,sBAAM,EAAE,MAAM,IAAI,EAAE;AACpB,qBAAK,SAAS;AAAA,kBACZ,UAAU;AAAA,gBACZ,CAAC;AAAA,cACH;AAAA,cAEA;AAAA,oCAAC,YAAQ,eAAK,KAAK,cAAc,GAAE;AAAA,gBACnC,oBAAC,YAAO,OAAM,UAAU,eAAK,KAAK,cAAc,GAAE;AAAA,gBAClD,oBAAC,YAAO,OAAM,OAAO,eAAK,KAAK,gBAAgB,GAAE;AAAA;AAAA;AAAA,UACnD;AAAA,UACC,aAAa,YACZ,iCACG;AAAA,iBAAK,KAAK,qBAAqB,EAAE,QAAQ,MAAM,cAAc,SAAS,CAAC;AAAA,YAAE;AAAA,YAE1E;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,KAAK,WAAW,KAAK,IAAI;AAAA,gBAEjC,eAAK,KAAK,cAAc;AAAA;AAAA,YAC3B;AAAA,aACF;AAAA,UAED,aAAa,SACZ,iCACE;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,EAAE,SAAS,gBAAgB,eAAe,SAAS;AAAA,gBAC1D,WAAU;AAAA,gBAET,eAAK,KAAK,iCAAiC,EAAE,QAAQ,MAAM,cAAc,SAAS,CAAC;AAAA;AAAA,YACtF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,OAAO;AAAA,kBACP,eAAe;AAAA,kBACf,aAAa;AAAA,gBACf;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAO;AAAA,oBACP,UAAU,KAAK,oBAAoB,KAAK,IAAI;AAAA,oBAC5C,OAAO;AAAA,oBACP,SAAS,KAAK,IAAI,CAAC,SAAS;AAAA,sBAC1B,OAAO;AAAA,sBACP,OAAO;AAAA,oBACT,EAAE;AAAA,oBACF,aAAa,KAAK,KAAK,8BAA8B;AAAA,oBACrD,kBAAkB,MAAM,KAAK,KAAK,qCAAqC;AAAA,oBACvE,mBAAmB,CAAC,eAAe,KAAK,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAAA,oBAClF,kBAAkB,CAAC,eAAe,WAAW,KAAK,EAAE,SAAS;AAAA,oBAC7D,mBAAmB;AAAA,oBACnB,qBAAmB;AAAA;AAAA,gBACrB;AAAA;AAAA,YACF;AAAA,YACA,oBAAC,YAAO,MAAK,UAAS,WAAU,kBAAiB,SAAS,KAAK,gBAAgB,KAAK,IAAI,GAAG,0BAE3F;AAAA,aACF;AAAA,UAEF,oBAAC,QAAoC,MAAK,2BAA0B,WAAW,EAAE,cAAc,GAAG;AAAA,WACpG,GACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,KAAK;AAAA,YACV,WAAU;AAAA,YACV,OAAO,EAAE,SAAS,UAAU,UAAU,UAAU,OAAO;AAAA,YAEvD,8BAAC,mBAAgB,aAAa,CAAC,MAAM,MAAM,IAAI,GAC7C,+BAAC,SAAM,SAAQ,QAAO,OAAK,MAAC,WAAU,qCACpC;AAAA,kCAAC,eAAY,SAAO,MAClB,+BAAC,YACC;AAAA,oCAAC,aAAU,QAAM,MAAC,WAAU,8BACzB,mBAAS,UACR;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,cAAW;AAAA,oBACX,WAAU;AAAA,oBACV,UAAU,KAAK,eAAe,KAAK,IAAI;AAAA,oBAEvC;AAAA,0CAAC,WAAM,IAAG,YAAW,MAAK,YAAW;AAAA,sBACrC,oBAAC,OAAE,WAAU,2BAA0B;AAAA;AAAA;AAAA,gBACzC,GAEJ;AAAA,gBACC,KAAK,SACJ,oBAAC,aAAU,QAAM,MAAC,WAAU,8BACzB,eAAK,KAAK,cAAc,GAC3B;AAAA,gBAED,KAAK,MACJ,oBAAC,aAAU,QAAM,MAAC,WAAU,2BAA0B,gBAEtD;AAAA,gBAED,KAAK,YACJ;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,aACE,KAAK,YAAY,aAAa,IAC1B,GAAG,KAAK,YAAY,aAAa,CAAkB,WACnD;AAAA,oBAGN;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,SAAS,KAAK,SAAS,KAAK,MAAM,aAAa;AAAA,wBAC/C,kBAAgB,GAAG,KAAK,qBAAqB,aAAa,CAAC;AAAA,wBAE1D;AAAA,+BAAK,KAAK,iBAAiB;AAAA,0BAC5B,oBAAC,UAAK,WAAU,+BAA8B;AAAA,0BAC9C,oBAAC,kBACE,eAAK,KAAK,oBAAoB,KAAK,YAAY,aAAa,KAAK,MAAM,EAAE,GAC5E;AAAA;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA,gBAED,KAAK,OAAO,oBAAC,aAAU,WAAU,4BAA4B,eAAK,KAAK,WAAW,GAAE;AAAA,gBACpF,KAAK,iBACJ;AAAA,kBAAC;AAAA;AAAA,oBACC,QAAM;AAAA,oBACN,WAAU;AAAA,oBACV,aACE,KAAK,YAAY,qBAAqB,IAClC,GAAG,KAAK,YAAY,qBAAqB,CAAkB,WAC3D;AAAA,oBAGN;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,SAAS,KAAK,SAAS,KAAK,MAAM,qBAAqB;AAAA,wBACvD,kBAAgB,GAAG,KAAK,qBAAqB,qBAAqB,CAAC;AAAA,wBAElE;AAAA,+BAAK,KAAK,oBAAoB;AAAA,0BAC/B,oBAAC,UAAK,WAAU,+BAA8B;AAAA,0BAC9C,oBAAC,kBACE,eAAK,KAAK,oBAAoB,KAAK,YAAY,qBAAqB,KAAK,MAAM,EAAE,GACpF;AAAA;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA,gBAED,KAAK,mBACJ;AAAA,kBAAC;AAAA;AAAA,oBACC,QAAM;AAAA,oBACN,WAAU;AAAA,oBACV,aACE,KAAK,YAAY,gBAAgB,IAC7B,GAAG,KAAK,YAAY,gBAAgB,CAAkB,WACtD;AAAA,oBAGN;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,SAAS,KAAK,SAAS,KAAK,MAAM,gBAAgB;AAAA,wBAClD,kBAAgB,GAAG,KAAK,qBAAqB,gBAAgB,CAAC;AAAA,wBAE7D;AAAA,+BAAK,KAAK,oBAAoB;AAAA,0BAC/B,oBAAC,UAAK,WAAU,+BAA8B;AAAA,0BAC9C,oBAAC,kBACE,eAAK,KAAK,oBAAoB,KAAK,YAAY,gBAAgB,KAAK,MAAM,EAAE,GAC/E;AAAA;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA,gBAED,KAAK,YACJ;AAAA,kBAAC;AAAA;AAAA,oBACC,QAAM;AAAA,oBACN,WAAU;AAAA,oBACV,aACE,KAAK,YAAY,gBAAgB,IAC7B,GAAG,KAAK,YAAY,gBAAgB,CAAkB,WACtD;AAAA,oBAGN;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,SAAS,KAAK,SAAS,KAAK,MAAM,gBAAgB;AAAA,wBAClD,kBAAgB,GAAG,KAAK,qBAAqB,gBAAgB,CAAC;AAAA,wBAE7D;AAAA,+BAAK,KAAK,iBAAiB;AAAA,0BAC5B,oBAAC,UAAK,WAAU,+BAA8B;AAAA,0BAC9C,oBAAC,kBACE,eAAK,KAAK,oBAAoB,KAAK,YAAY,gBAAgB,KAAK,MAAM,EAAE,GAC/E;AAAA;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA,gBAED,KAAK,YACJ,oBAAC,aAAU,WAAU,iCAAiC,eAAK,KAAK,iBAAiB,GAAE;AAAA,gBAEpF,SAAS,UACR,oBAAC,aAAU,QAAM,MAAC,WAAU,+BAA8B,OAAO,EAAE,YAAY,SAAS,GACrF,eAAK,KAAK,cAAc,GAC3B;AAAA,iBAEJ,GACF;AAAA,cACA,oBAAC,aACE,gBAAM,IAAI,CAAC,SACV;AAAA,gBAAC;AAAA;AAAA,kBAEC,SAAS,CAAC,MAAM;AACd,yBAAK,SAAS,GAAG,IAAI;AAAA,kBACvB;AAAA,kBAEA;AAAA,yCAAC,aAAU,QAAM,MAAC,WAAU,8BACzB;AAAA,2BAAK;AAAA,uBACJ,SAAS,UAAU,KAAK,mBACxB,qBAAC,WAAM,cAAW,gBAAK,WAAU,2CAC/B;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,MAAK;AAAA,4BACL,MAAK;AAAA,4BACL,OAAO,GAAG,KAAK,SAAS,IAAI,KAAK,QAAQ;AAAA,4BACzC,SAAS,KAAK;AAAA,4BACd,UAAU,KAAK,YAAY,KAAK,MAAM,IAAI;AAAA,4BAC1C,cAAY,KAAK,eAAe,GAAG,KAAK,QAAQ;AAAA;AAAA,wBAClD;AAAA,wBACA,oBAAC,OAAE,WAAU,2BAA0B;AAAA,yBACzC;AAAA,uBAEJ;AAAA,oBACC,KAAK,SACJ,gCAEE,8BAAC,aAAU,QAAM,MAAC,WAAU,8BAC1B;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAM,CAAC,YACL,oBAAC,OAAE,MAAM,KAAK,iBAAiB,QAAO,UAAS,KAAI,uBAChD,mBACH;AAAA,wBAEF,WAAW,KAAK,eAAe;AAAA,wBAE/B,8BAAC,SAAI,WAAU,wCACb;AAAA,0BAAC;AAAA;AAAA,4BACC,KAAK,GAAG,KAAK,eAAe,SAAS,KAAK,mBAAmB;AAAA,4BAC7D,WAAU;AAAA,4BACV,KAAI;AAAA;AAAA,wBACN,GACF;AAAA;AAAA,oBACF,GACF,GACF;AAAA,oBAED,KAAK,MACJ,oBAAC,aAAU,QAAM,MAAC,WAAU,2BAC1B,8BAAC,UAAK,WAAU,oBAAoB,eAAK,UAAS,GACpD;AAAA,oBAED,KAAK,YACJ,oBAAC,aAAU,WAAU,8BAA8B,eAAK,aAAY;AAAA,oBAErE,KAAK,OACJ,oBAAC,aAAU,WAAU,4BAClB,eAAK,eACJ,KAAK,YAAY,MAAM,SAAS,EAAE,IAAI,CAAC,UACrC;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,SAAS;AAAA,0BACT,aAAa;AAAA,0BACb,WAAW;AAAA,wBACb;AAAA,wBAGC;AAAA;AAAA,sBAFI;AAAA,oBAGP,CACD,GACL;AAAA,oBAED,KAAK,iBACJ,qBAAC,aAAU,QAAM,MAAC,WAAU,6BACzB;AAAA,4BAAM,KAAK,mBAAmB,EAAE,OAAO,YAAY;AAAA,sBACpD,oBAAC,QAAG;AAAA,sBACH,MAAM,KAAK,mBAAmB,EAAE,OAAO,OAAO;AAAA,uBACjD;AAAA,oBAED,KAAK,mBACJ,qBAAC,aAAU,QAAM,MAAC,WAAU,6BACzB;AAAA,4BAAM,KAAK,cAAc,EAAE,OAAO,YAAY;AAAA,sBAC/C,oBAAC,QAAG;AAAA,sBACH,MAAM,KAAK,cAAc,EAAE,OAAO,OAAO;AAAA,uBAC5C;AAAA,oBAED,KAAK,YACJ,qBAAC,aAAU,QAAM,MAAC,WAAU,+BACzB;AAAA,2BAAK,kBAAkB,gCAAG,sBAAY,KAAK,cAAc,GAAE;AAAA,sBAC3D,KAAK,cAAc,KAAK,eAAe,WACtC,qBAAC,UAAK,OAAO,EAAE,SAAS,SAAS,WAAW,MAAM,GAC/C;AAAA,6BAAK;AAAA,wBAAW;AAAA,yBAEnB;AAAA,uBAEJ;AAAA,oBAED,KAAK,YACJ,oBAAC,aAAU,WAAU,iCAAiC,eAAK,iBAAgB;AAAA,oBAE5E,SAAS,UACR,oBAAC,aAAU,QAAM,MACd,eAAK,kBACJ,oBAAC,YAAO,MAAK,UAAS,SAAS,KAAK,QAAQ,KAAK,MAAM,IAAI,GAAG,WAAU,kBACrE,eAAK,KAAK,YAAY,GACzB,GAEJ;AAAA;AAAA;AAAA,gBAzGG,KAAK;AAAA,cA2GZ,CACD,GACH;AAAA,eACF,GACF;AAAA;AAAA,QACF;AAAA,QAEA,oBAAC,SAAI,WAAU,yBAAwB,OAAO,EAAE,SAAS,UAAU,UAAU,SAAS,OAAO,GAC1F,gBAAM,IAAI,CAAC,MAAM,UAChB;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YAEV,OAAO,EAAE,OAAO,GAAG,MAAM,KAAK,MAAM,QAAQ,GAAG,MAAM,KAAK,KAAK;AAAA,YAE/D;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,WAAW,gCAAgC,EAAE,UAAU,KAAK,QAAQ,CAAC;AAAA,kBAChF,OAAO,KAAK;AAAA,kBACZ,MAAK;AAAA,kBACL,UAAU;AAAA,kBACV,SAAS,CAAC,MAAM;AACd,wBAAI,EAAE,YAAY,cAAc,MAAM;AACpC,2BAAK,gBAAgB,WAAW,IAAI;AAAA,oBACtC,OAAO;AACL,2BAAK,YAAY,IAAI;AACrB,2BAAK,SAAS;AAAA,wBACZ,WAAW,KAAK;AAAA,sBAClB,CAAC;AAAA,oBACH;AAAA,kBACF;AAAA,kBACA,WAAW,CAAC,MAAM;AAEhB,wBAAI,EAAE,kBAAkB,SAAS,eAAe;AAC9C;AAAA,oBACF;AACA,wBAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,0BAAI,EAAE,YAAY,cAAc,MAAM;AACpC,6BAAK,gBAAgB,WAAW,IAAI;AAAA,sBACtC,OAAO;AACL,6BAAK,YAAY,IAAI;AACrB,6BAAK,SAAS;AAAA,0BACZ,WAAW,KAAK;AAAA,wBAClB,CAAC;AAAA,sBACH;AAEA,wBAAE,eAAe;AAAA,oBACnB;AAAA,kBACF;AAAA,kBAEA;AAAA,wCAAC,SAAI,WAAU,gCAA+B;AAAA,oBAC7C,KAAK,eAAe,UACnB,qBAAC,SAAI,WAAU,kCACb;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,KAAK,KAAK;AAAA,0BACV,OAAO,KAAK,aAAa,WAAW,KAAK,CAAC;AAAA,0BAC1C,KAAI;AAAA;AAAA,sBACN;AAAA,sBACA,oBAAC,UAAK,WAAU,kCAAkC,eAAK,aAAY;AAAA,uBACrE;AAAA,qBAEA,KAAK,eAAe,WAAW,KAAK,eAAe,UACnD;AAAA,sBAAC;AAAA;AAAA,wBACC,KAAK,GAAG,KAAK,eAAe,SAAS,KAAK,mBAAmB;AAAA,wBAC7D,OAAO,KAAK,cAAc,WAAW,KAAK,CAAC;AAAA,wBAC3C,IAAI,eAAe,KAAK;AAAA,wBACxB,KAAI;AAAA;AAAA,oBACN;AAAA,oBAEF,qBAAC,SAAI,WAAW,WAAW,+BAA+B,EAAE,UAAU,KAAK,QAAQ,CAAC,GAClF;AAAA,0CAAC,SAAI,WAAU,kCAAiC;AAAA,sBAC/C,SAAS,UAAU,KAAK,kBACvB,oBAAC,SAAI,WAAU,uCACb;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,SAAS,CAAC,MAAM;AACd,8BAAE,eAAe;AACjB,8BAAE,gBAAgB;AAClB,iCAAK,QAAQ,IAAI;AAAA,0BACnB;AAAA,0BAEC,eAAK,KAAK,YAAY;AAAA;AAAA,sBACzB,GACF;AAAA,uBAEJ;AAAA;AAAA;AAAA,cACF;AAAA,cACA,oBAAC,WAAM,MAAK,UAAS,MAAK,YAAW,OAAO,GAAG,KAAK,SAAS,IAAI,KAAK,QAAQ,IAAI;AAAA;AAAA;AAAA,UA5E7E,KAAK;AAAA,QA6EZ,CACD,GACH;AAAA,QACA,oBAAC,QAAK,WAAU,gCACd;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,OAAO,KAAK,KAAK,QAAQ,KAAK;AAAA,YAC9B,YAAY;AAAA,YACZ,UAAU,CAACC,UACT,KAAK,eAAe;AAAA,cAClB,MAAAA;AAAA,YACF,CAAC;AAAA,YAGH;AAAA,kCAAC,YAAS,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,GAC7B,8BAAC,cAAW,GACd;AAAA,cACA,oBAAC,YAAS,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,GAC7B,8BAAC,qBAAkB,GACrB;AAAA;AAAA;AAAA,QACF,GACF;AAAA,SACF;AAAA,OACF;AAAA,EAEJ;AACF;;;AC7iDA,SAAS,aAAAC,kBAAiB;AAC1B,OAAO,gBAAgB;AACvB,OAAO,eAAe;AACtB,SAAS,QAAAC,aAAY;AACrB,SAAS,QAAQ,QAAQ,qBAAqB;AAC9C,OAAO,eAAe;AACtB,OAAO,wBAAwB;AAC/B,OAAO,iBAAiB;AACxB,OAAO,eAAsC;AAC7C,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,gBAAgB;AACzB,OAAO,iBAAiB;AAoXhB,qBAAAC,WAEE,OAAAC,MAFF,QAAAC,aAAA;AA/WR,IAAMC,aAAY;AAClB,IAAM,uBAAuB;AAC7B,IAAM,6BAA6B;AAmCnC,IAAqB,gBAArB,cAA2CC,WAAkD;AAAA,EAC3F,OAAO,eAAe;AAAA,IACpB,kBAAkB;AAAA,IAClB,MAAM,CAAC;AAAA,IACP,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,YAAY,OAA2B;AACrC,UAAM,KAAK;AACX,SAAK,QAAQ;AAAA,MACX,OAAO,CAAC;AAAA,MACR,OAAO,MAAM,SAAS;AAAA,MACtB,SAAS;AAAA,MACT,aAAa;AAAA,MACb,kBAAkB;AAAA;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,cAAsB;AACxB,UAAM,QAAQ,SAAS,OAAO,KAAK,OAAO,oBAAoB,EAAE,GAAG,EAAE;AACrE,WAAO,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AAAA,EACvD;AAAA;AAAA,EAGA,IAAI,oBAA4B;AAC9B,UAAM,QAAQ,SAAS,OAAO,KAAK,OAAO,0BAA0B,EAAE,GAAG,EAAE;AAC3E,WAAO,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AAAA,EACvD;AAAA;AAAA,EAGA,IAAI,iBAAuF;AACzF,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,UAAM,QAAQ,MAAM;AACpB,QAAI,UAAU,GAAG;AACf,aAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,EAAE;AAAA,IACxD;AACA,UAAM,SAAS,CAAC,SAA0B,QAAQ,KAAK,YAAY,KAAK,KAAK,WAAW;AACxF,UAAM,OAAO,MAAM,OAAO,MAAM,EAAE;AAClC,UAAM,aAAa,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,EAAE;AAC9D,UAAM,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,OAAO,OAAO,IAAI,IAAI,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC;AACjH,WAAO,EAAE,MAAM,OAAO,SAAS,KAAK,MAAM,MAAM,KAAK,GAAG,WAAW;AAAA,EACrE;AAAA;AAAA,EAGA,qBAAqB,CAAC,UAA6B;AACjD,QAAI,KAAK,MAAM,SAAS;AACtB,YAAM,eAAe;AACrB,YAAM,cAAc;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,oBAAoB;AAClB,WAAO,iBAAiB,gBAAgB,KAAK,kBAAkB;AAC/D,QAAI,KAAK,MAAM,OAAO;AACpB,gBAAU,KAAK,MAAM,KAAK,EAAE,KAAK,CAAC,iBAAiB;AACjD,aAAK,WAAW,YAAY;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,uBAAuB;AACrB,WAAO,oBAAoB,gBAAgB,KAAK,kBAAkB;AAAA,EACpE;AAAA,EAEA,MAAM,mBAAmB,MAAmB;AAC1C,UAAM,MAAM,MAAM,UAAU,MAAM,CAAC;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAmB,OAAe,MAAc,MAA2C;AAChG,UAAM,EAAE,UAAU,IAAI,KAAK;AAE3B,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,YAAM,KAAK,IAAI,SAAS;AACxB,SAAG,OAAO,0BAA0B,MAAM;AAC1C,UAAI,OAAO;AACT,WAAG,OAAO,QAAQ,KAAK;AAAA,MACzB;AACA,YAAM,MAAM,OAAO,IAAI;AACvB,UAAI,IAAI,YAAY,MAAM,OAAO;AAC/B,cAAM,QAAQ,MAAM,KAAK,mBAAmB,IAAI;AAChD,YAAI,OAAO;AACT,aAAG,OAAO,uBAAuB,cAAc,KAAK,CAAC;AACrD,aAAG,OAAO,YAAY,GAAG;AAAA,QAC3B;AAAA,MACF;AACA,SAAG,OAAO,QAAQ,GAAG,SAAS,EAAE;AAChC,SAAG,OAAO,QAAQ,MAAM,IAAI;AAC5B,SAAG,OAAO,aAAa,OAAO,SAAS;AACvC,WAAK,eAAe,MAAM,CAAC;AAC3B,wBAAkB,EACf,YAAY,IAAI;AAAA,QACf,kBAAkB,CAAC,MAAM;AACvB,cAAI,OAAO,EAAE,UAAU,UAAU;AAC/B,iBAAK,eAAe,MAAM,MAAM,EAAE,SAAS,EAAE,MAAM;AAAA,UACrD;AAAA,QACF;AAAA,MACF,CAAC,EACA,KAAK,CAAC,QAAQ;AACb,YAAI,OAAO,IAAI,MAAM;AACnB,cAAI,YAAY,IAAI,QAAQ,IAAI,KAAK,WAAW,WAAW;AACzD,kBAAM,IAAI,MAAM,IAAI,KAAK,OAAO;AAAA,UAClC;AACA,gBAAM,YAAY,IAAI;AACtB,eAAK,eAAe,MAAM,GAAG;AAC7B,qBAAW,MAAM;AACf,oBAAQ,SAAS;AAAA,UACnB,GAAG,GAAG;AACN;AAAA,QACF;AACA,cAAM,IAAI,MAAM,KAAK,KAAK,qBAAqB,CAAC;AAAA,MAClD,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,gBAAQ,MAAM,GAAG;AACjB,aAAK,eAAe,MAAM,KAAK,IAAI;AACnC,YAAI,eAAe,OAAO;AACxB,gBAAM,IAAI,OAAO;AAAA,QACnB;AAEA,eAAO,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAAA,MAC5D,CAAC;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,eAAe,MAAuB,UAAkB,gBAAgB,OAAO;AAE7E,SAAK,SAAS,CAAC,SAAS;AACtB,YAAM,QAAQ,KAAK,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,KAAK,EAAE;AAChE,UAAI,UAAU,IAAI;AAChB,eAAO;AAAA,MACT;AACA,YAAM,YAAY,KAAK,MAAM,MAAM;AACnC,gBAAU,KAAK,IAAI,EAAE,GAAG,UAAU,KAAK,GAAG,UAAU,cAAc;AAClE,aAAO,EAAE,OAAO,UAAU;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,MAAuB;AAChC,SAAK,SAAS,CAAC,UAAU;AAAA,MACvB,OAAO,KAAK,MAAM,OAAO,CAAC,SAAS,KAAK,QAAQ,KAAK,GAAG;AAAA,IAC1D,EAAE;AAAA,EACJ;AAAA,EAEA,gBAAgB,MAAuB,cAAyB;AAE9D,SAAK,SAAS,CAAC,SAAS;AACtB,YAAM,QAAQ,KAAK,MAAM,UAAU,CAAC,SAAS,KAAK,QAAQ,KAAK,GAAG;AAClE,UAAI,UAAU,IAAI;AAChB,eAAO;AAAA,MACT;AACA,YAAM,YAAY,KAAK,MAAM,MAAM;AACnC,gBAAU,KAAK,IAAI,EAAE,GAAG,UAAU,KAAK,GAAG,cAAc,UAAU,GAAG;AACrE,aAAO,EAAE,OAAO,UAAU;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,MAAuB;AAC9B,QAAI,KAAK,cAAc;AACrB,WAAK,MAAM,QAAQ,QAAQ,KAAK,YAAY;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,cAAoC;AACxC,UAAM,EAAE,OAAO,MAAM,IAAI,KAAK;AAC9B,UAAM,EAAE,QAAQ,IAAI,KAAK;AAKzB,UAAM,aAAa,MAAMC,MAAK,uBAAuB,EAAE,OAAO,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;AAC9F,QAAI,WAAW,UAAU;AACvB,UAAI,WAAW,QAAQ;AACrB,cAAM,WAAW,MAAM;AAAA,MACzB;AACA,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,eAAe,IAAI,IAAI,WAAW,MAAM,KAAK;AACnD,UAAM,cAAc,MAAM,OAAO,CAAC,SAAS,aAAa,IAAI,KAAK,IAAI,CAAC;AAEtE,UAAM,cAAc,IAAI,YAAY;AACpC,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,kBAAkB;AAAA,IACpB,CAAC;AAED,UAAM,CAAC,YAAY,SAAS,IAAI,KAAK,OAAO,MAAO,MAAM,GAAG;AAI5D,UAAM,QAAgD,YAAY,IAAI,CAAC,SAA0B,YAAY;AAC3G,YAAM,EAAE,MAAM,UAAU,KAAK,IAAI;AACjC,YAAM,SAAS,aAAa,WAAW,eAAe,KAAK,KAAK,IAAI;AACpE,YAAM,QAAQ,aAAa,WAAW,KAAK,KAAK,SAAS,KAAK;AAC9D,YAAM,QAAQ,aAAa,WAAW,KAAK,KAAK,SAAS,KAAK;AAE9D,UAAI;AACF,YAAI;AACJ,YAAI,aAAa,SAAS;AACxB,cAAI,QAAQ;AAEV,gBAAI,EAAE,KAAK,gBAAgB,OAAO;AAChC,qBAAO;AAAA,YACT;AACA,yBAAa,KAAK;AAAA,UACpB,WAAW,OAAO;AAEhB,kBAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,kBAAM,QAAQ,UAAU,SAAS,MAAM,EAAE,cAAc,EAAE,KAAK,MAAM,YAAY,KAAK,EAAE,CAAC;AACxF,yBAAa,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAAA,UAC1D,WAAW,OAAO;AAEhB,yBAAa;AAAA,UACf,OAAO;AAEL,kBAAM,EAAE,MAAM,OAAO,IAAI,MAAM,YAAY,gBAAgB,MAAM,YAAY,SAAS,WAAW,EAAE,CAAC;AACpG,yBAAa,UAAU,KAAK,OAAO,sBAAsB,QAAQ,OAAO;AAAA,UAC1E;AAAA,QACF,OAAO;AAEL,uBAAa;AAAA,QACf;AACA,cAAM,eAAe,MAAM,KAAK,OAAO,YAAY,OAAO,MAAM,IAAI;AACpE,aAAK,gBAAgB,MAAM,YAAY;AACvC,eAAO;AAAA,MACT,QAAQ;AAEN,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,UAAU,MAAM,mBAAmB,OAAO,KAAK,iBAAiB;AACtE,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,IACX,CAAC;AACD,YAAQ,eAAe;AACvB,UAAM,gBAAgB,QAAQ,OAAO,CAAC,WAAgC,WAAW,IAAI;AAGrF,UAAMA,MAAK,wBAAwB,EAAE,OAAO,cAAc,CAAC;AAC3D,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAAuB;AAChC,QAAI,QAA2B;AAAA,MAC7B,GAAG,KAAK,MAAM;AAAA,MACd,GAAG,MAAM;AAAA,QACP,CAAC,UACE;AAAA,UACC,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,UACf,SAAS,KAAK,aAAa,UAAU,KAAK,UAAU;AAAA,UACpD,MAAM,KAAK,aAAa,UAAU,KAAK,OAAO;AAAA;AAAA,UAC9C,MAAM,KAAK,KAAK;AAAA,UAChB,MAAM,KAAK,KAAK;AAAA,UAChB,KAAK;AAAA,UACL,IAAI;AAAA,UACJ,UAAU;AAAA,UACV,eAAe;AAAA,QACjB;AAAA,MACJ;AAAA,IACF,EACG,OAAO,CAAC,SAAS;AAChB,UAAI,KAAK,cAAc;AACrB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC,EACA,IAAI,CAAC,MAAM,WAAW;AAAA,MACrB,GAAG;AAAA,MACH,KAAK;AAAA,MACL,IAAI,OAAO,EAAE;AAAA,IACf,EAAE;AAGJ,YAAQ,MAAM;AAAA,MACZ,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO;AAAA,IAC/G;AAEA,UAAM,QAAQ,KAAK;AACnB,QAAI,MAAM,SAAS,OAAO;AACxB,YAAM,KAAK,KAAK,qCAAqC,EAAE,MAAM,CAAC,CAAC;AAC/D,cAAQ,MAAM,MAAM,GAAG,KAAK;AAAA,IAC9B;AACA,QAAI,MAAM,SAAS,GAAG;AACpB,WAAK,SAAS,EAAE,OAAO,kBAAkB,OAAO,aAAa,KAAK,CAAC;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,SAAS,OAAe;AACtB,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AACA,UAAM,SAAS,MAAM,MAAMF,UAAS;AACpC,WAAO,OAAO,IAAI,CAACG,YAAW;AAAA,MAC5B,OAAOA;AAAA,MACP,OAAAA;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEA,QAAQ,MAA2B;AACjC,UAAM,QAAQ,KAAK,OAAO,CAAC,KAAK,KAAK,QAAQ;AAC3C,UAAI,QAAQ,GAAG;AACb,eAAO,IAAI;AAAA,MACb;AACA,aAAO,GAAG,GAAG,GAAGH,UAAS,GAAG,IAAI,KAAK;AAAA,IACvC,GAAG,EAAE;AAEL,SAAK,SAAS;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,sBAAsB;AACpB,SAAK,SAAS,CAAC,UAAU;AAAA,MACvB,OAAO,KAAK,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,YAAY;AAAA,IACvD,EAAE;AAAA,EACJ;AAAA;AAAA,EAGA,oBAAoB;AAClB,UAAM,UAAU,KAAK;AACrB,UAAM,YAAY,QAAQ,QAAQ,KAAK,QAAQ,OAAO,QAAQ,eAAe,QAAQ;AACrF,QAAI,CAAC,WAAW;AACd,aAAO,KAAK,KAAK,iCAAiC,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,CAAC;AAAA,IAChG;AACA,QAAI,QAAQ,aAAa,GAAG;AAE1B,aACE,gBAAAD,MAAAF,WAAA,EACG;AAAA,aAAK,KAAK,2BAA2B,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,QAC5D,gBAAAC,KAAC,UAAK,WAAU,0BACb,eAAK,KAAK,6BAA6B,EAAE,QAAQ,QAAQ,WAAW,CAAC,GACxE;AAAA,SACF;AAAA,IAEJ;AACA,WAAO,KAAK,KAAK,6BAA6B,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,EACxE;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,OAAO,OAAO,kBAAkB,YAAY,IAAI,KAAK;AAC7D,UAAM,EAAE,kBAAkB,KAAK,IAAI,KAAK;AACxC,UAAM,UAAU,KAAK;AACrB,WACE,gBAAAC,MAAAF,WAAA,EACE;AAAA,sBAAAC,KAAC,SAAI,WAAU,YAAW,OAAO,EAAE,cAAc,OAAO,GACtD,0BAAAA,KAAC,SAAI,OAAO,EAAE,SAAS,SAAS,GAC9B,0BAAAA;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,SAAO;AAAA,UACP,UAAU,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS;AAAA,YAClC,OAAO;AAAA,YACP,OAAO;AAAA,UACT,EAAE;AAAA,UACF,OAAO,KAAK,SAAS,KAAK;AAAA,UAC1B,UAAU,KAAK,QAAQ,KAAK,IAAI;AAAA,UAChC,aAAa,KAAK,KAAK,8BAA8B;AAAA,UACrD,mBAAmB,CAAC,eAAe,KAAK,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAAA,UAClF,kBAAkB,CAAC,eAAe,WAAW,KAAK,EAAE,SAAS;AAAA,UAC7D,kBAAkB,MAAM,KAAK,KAAK,qCAAqC;AAAA,UACvE,mBAAmB;AAAA,UACnB,qBAAmB;AAAA,UACnB,kBAAkB,SAAS;AAAA;AAAA,MAC7B,GACF,GACF;AAAA,MACC,oBAAoB,MAAM,SAAS,KAClC,gBAAAL,MAAC,SAAI,WAAU,mCAAkC,OAAO,EAAE,SAAS,UAAU,cAAc,OAAO,GAEhG;AAAA,wBAAAD,KAAC,eAAY,OAAO,QAAQ,SAAS,SAAQ,QAAO,SAAO,MAAC,UAAQ,MAAC;AAAA,QACrE,gBAAAA,KAAC,OAAE,WAAU,wCAAwC,eAAK,kBAAkB,GAAE;AAAA,SAChF;AAAA,MAEF,gBAAAA,KAAC,SAAI,WAAU,0CACb,0BAAAC,MAAC,SAAI,WAAU,qCACb;AAAA,wBAAAD,KAAC,SAAI,WAAU,gCACb,0BAAAA,KAAC,SAAI,WAAU,sCACb,0BAAAA,KAAC,YAAS,YAAY,KAAK,WAAW,KAAK,IAAI,GAAG,GACpD,GACF;AAAA,QACC,MAAM,IAAI,CAAC,SACV,gBAAAA,KAAC,SAAI,WAAU,gCACb,0BAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,WAAW,sCAAsC;AAAA,cAC1D,aAAa,KAAK,WAAW;AAAA,YAC/B,CAAC;AAAA,YACD,OAAO,EAAE,UAAU,WAAW;AAAA,YAE7B;AAAA,mBAAK,WAAW,KACf,gBAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,oBACL,UAAU;AAAA,oBACV,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO;AAAA,oBACP,WAAW;AAAA,oBACX,QAAQ;AAAA,kBACV;AAAA,kBAGA,0BAAAA,KAAC,SAAI,WAAU,4CACb,0BAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW,WAAW,gCAAgC;AAAA,wBACpD,UAAU,KAAK;AAAA,sBACjB,CAAC;AAAA,sBACD,OAAO,EAAE,OAAO,GAAG,KAAK,QAAQ,IAAI;AAAA;AAAA,kBACtC,GACF;AAAA;AAAA,cACF;AAAA,cAED,CAAC,KAAK,gBACL,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,KAAK,WAAW,KAAK,MAAM,IAAI;AAAA,kBACxC,cAAY,KAAK,KAAK,mBAAmB;AAAA;AAAA,cAC3C;AAAA,cAED,KAAK,gBACJ,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,KAAK,SAAS,KAAK,MAAM,IAAI;AAAA,kBAErC,eAAK,KAAK,YAAY;AAAA;AAAA,cACzB;AAAA,cAED,KAAK,aAAa,WACjB,gBAAAA,KAAC,SAAI,WAAU,8BAA6B,OAAO,EAAE,iBAAiB,OAAO,KAAK,OAAO,IAAI,GAAG;AAAA,cAEjG,KAAK,aAAa,WACjB,gBAAAA,KAAC,SAAI,WAAU,8BACb,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,KAAK,GAAG,KAAK,OAAO,IAAI;AAAA,kBACxB,WAAU;AAAA,kBACV,KAAI;AAAA;AAAA,cACN,GACF;AAAA,cAEF,gBAAAA,KAAC,SAAI,WAAU,4BAA2B;AAAA,cAC1C,gBAAAA,KAAC,SAAI,WAAU,mCACb,0BAAAA,KAAC,OAAE,WAAU,wCAAwC,eAAK,MAAK,GACjE;AAAA;AAAA;AAAA,QACF,KA9DiD,KAAK,EA+DxD,CACD;AAAA,SACH,GACF;AAAA,MACC,MAAM,WAAW,KAAK,gBAAAA,KAAC,OAAE,OAAO,EAAE,WAAW,SAAS,GAAI,eAAK,KAAK,uBAAuB,GAAE;AAAA,MAC7F,oBAAoB,eACnB,gBAAAA,KAAC,SAAI,WAAU,2CACb,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,KAAK,YAAY,KAAK,IAAI;AAAA,UACnC,UAAU;AAAA,UAET,eAAK,KAAK,cAAc;AAAA;AAAA,MAC3B,GACF;AAAA,OAEJ;AAAA,EAEJ;AACF;","names":["item","items","page","Component","emit","CreatableSelect","Fragment","jsx","jsxs","delimiter","Component","emit","label","CreatableSelect"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/media-list/media-list.tsx","../src/components/media-uploader/media-uploader.tsx"],"sourcesContent":["import classnames from 'classnames';\nimport RangeSlider from 'rc-slider';\nimport dayjs from 'dayjs';\nimport 'rc-slider/assets/index.css';\n\nimport { Component, createRef } from 'react';\nimport { emit } from '@ablogcms/events';\nimport { Grid, GridItem } from '@ablogcms/components/grid';\nimport { formatBytes, parseQuery } from '@ablogcms/utils';\nimport { notify } from '@ablogcms/notify';\nimport { pending } from '@ablogcms/pending';\nimport {\n Menu,\n MenuList,\n MenuTrigger,\n MenuDivider,\n MenuItemCheckbox,\n MenuItemRadioGroup,\n MenuItemRadio,\n MenuPopover,\n} from '@ablogcms/components/dropdown-menu';\nimport { Pagination, PaginationRoot, PaginationSummary } from '@ablogcms/components/pagination';\nimport {\n Filter,\n FilterBody,\n FilterContent,\n FilterDetailButton,\n FilterFooter,\n FilterGroup,\n FilterGroupTitle,\n FilterInner,\n FilterItem,\n FilterItemLabel,\n} from '@ablogcms/components/filter';\nimport ConditionalWrap from '@ablogcms/components/conditional-wrap';\nimport { RichSelect, CreatableSelect } from '@ablogcms/components/rich-select';\nimport VisuallyHidden from '@ablogcms/components/visually-hidden';\nimport { Slot } from '@ablogcms/components/slot-fill';\nimport {\n Table,\n TableScrollable,\n TableHeader,\n TableBody,\n TableRow,\n TableHead,\n TableCell,\n} from '@ablogcms/components/table';\nimport * as actions from '../../stores/actions';\nimport { MediaItem, MediaAjaxConfig, MediaViewFileType, MediaTag } from '../../types';\nimport { getMediaTransport } from '../../runtime';\n\n/* eslint react/default-props-match-prop-types: 0 */\n/* eslint camelcase: 0 */\n\n/** Slot `media.list.bulk-actions`(HOOKS.md 参照)の fillProps */\nexport interface MediaListBulkActionsFillProps {\n selectedItems: MediaItem[];\n}\n\ninterface MediaListProps {\n actions: typeof actions;\n items: MediaItem[];\n archives: string[];\n tags: string[];\n extensions?: string[];\n selectedTags: string[];\n config: Required<MediaAjaxConfig>;\n\n lastPage: number;\n mode: string;\n total: number;\n filetype?: 'all' | 'image' | 'file';\n radioMode?: boolean;\n}\n\ninterface Menu {\n image: boolean;\n id: boolean;\n filename: boolean;\n tag: boolean;\n last_modified: boolean;\n upload_datetime: boolean;\n imagesize: boolean;\n filesize: boolean;\n blogname: boolean;\n}\n\ntype SortDirection = 'asc' | 'desc';\n\ninterface OrderActive {\n media_title: SortDirection;\n media_last_modified: SortDirection;\n media_datetime?: SortDirection;\n media_path: SortDirection;\n media_size: SortDirection;\n media_filesize: SortDirection;\n}\n\ntype DisplayStyle = 'table' | 'list';\n\ninterface MediaListState {\n order: OrderActive;\n menu: Menu;\n scale: number;\n filterMenuOpened: boolean;\n editMode: string;\n year: string;\n month: string;\n toggleAll: boolean;\n orderActive: keyof OrderActive;\n search: string;\n labels: MediaTag[];\n selectedLabels: MediaTag[];\n style: DisplayStyle;\n oldItemId: MediaItem['media_id'] | null;\n items: MediaItem[];\n limit: number;\n displayPage: number;\n filteredOptions: MediaTag[];\n fileext: string;\n owner: boolean;\n blogAxis: boolean;\n filetype: MediaViewFileType;\n}\n\nconst delimiter = ',';\n\nexport default class MediaList extends Component<MediaListProps, MediaListState> {\n listRef: React.RefObject<HTMLFormElement | null>;\n\n static defaultProps = {\n radioMode: false,\n filetype: 'all',\n extensions: [],\n };\n\n constructor(props: MediaListProps) {\n super(props);\n this.state = {\n order: {\n media_title: 'asc',\n media_last_modified: 'desc',\n media_path: 'asc',\n media_size: 'asc',\n media_filesize: 'asc',\n },\n menu: {\n image: true,\n id: true,\n filename: true,\n tag: true,\n last_modified: true,\n upload_datetime: false,\n imagesize: true,\n filesize: true,\n blogname: false,\n },\n limit: 20,\n displayPage: 6,\n scale: 1,\n selectedLabels: [],\n year: '',\n month: '',\n filterMenuOpened: false,\n toggleAll: false,\n orderActive: 'media_last_modified',\n search: '',\n labels: [],\n items: props.items,\n filteredOptions: [],\n style: 'table',\n editMode: '',\n filetype: props.filetype ? props.filetype : 'all',\n fileext: 'all',\n owner: false,\n blogAxis: false,\n oldItemId: null,\n };\n this.listRef = createRef<HTMLFormElement>();\n }\n\n getOrderSelectBtnLabel() {\n const { orderActive, order } = this.state;\n const active = order[orderActive] === 'asc' ? ACMS.i18n('media.asc') : ACMS.i18n('media.desc');\n if (orderActive === 'media_title') {\n return `${ACMS.i18n('media.title')}(${active})`;\n }\n if (orderActive === 'media_last_modified') {\n return `${ACMS.i18n('media.update_date')}(${active})`;\n }\n if (orderActive === 'media_datetime') {\n return `${ACMS.i18n('media.created_date')}(${active})`;\n }\n if (orderActive === 'media_path') {\n return `${ACMS.i18n('media.file_name')}(${active})`;\n }\n if (orderActive === 'media_filesize') {\n return `${ACMS.i18n('media.file_size')}(${active})`;\n }\n return ACMS.i18n('media.select');\n }\n\n setItem(item: MediaItem) {\n const { media_id } = item;\n if ('history' in window) {\n history.replaceState(null, '', `#mid=${media_id}`);\n }\n getMediaTransport()\n .fetchMediaDetail(media_id)\n .then((res) => {\n if (res.status === 'failure') {\n notify.danger(ACMS.i18n('media.get_media_error'));\n return;\n }\n if (res.item && res.item.media_id) {\n this.props.actions.setItem(res.item as MediaItem);\n }\n })\n .catch(() => {\n notify.danger(ACMS.i18n('media.get_media_error'));\n });\n return false;\n }\n\n toggleCheck(item: MediaItem) {\n const { items, radioMode } = this.props;\n if (radioMode) {\n const findItem = items.find((item) => item.checked);\n if (findItem) {\n this.props.actions.updateMediaList({ ...findItem, checked: !findItem.checked });\n }\n }\n this.props.actions.updateMediaList({ ...item, checked: !item.checked });\n }\n\n toggleCheckFrom(fromItemId: MediaItem['media_id'], toItem: MediaItem) {\n const { items, radioMode } = this.props;\n const { updateMediaList } = this.props.actions;\n if (radioMode) {\n return;\n }\n const fromIndex = items.findIndex((item) => {\n if (item.media_id === fromItemId) {\n return true;\n }\n return false;\n });\n const toIndex = items.findIndex((item) => {\n if (item.media_id === toItem.media_id) {\n return true;\n }\n return false;\n });\n const { checked } = toItem;\n const nextChecked = !checked;\n const minIndex = fromIndex > toIndex ? toIndex : fromIndex;\n const maxIndex = fromIndex > toIndex ? fromIndex : toIndex;\n items.forEach((item, index) => {\n if (index >= minIndex && index <= maxIndex) {\n updateMediaList({ ...item, checked: nextChecked });\n }\n });\n }\n\n toggleAllCheck() {\n const { items, actions, radioMode } = this.props;\n const { toggleAll } = this.state;\n const all = !toggleAll;\n this.setState({\n toggleAll: all,\n });\n if (radioMode) {\n return;\n }\n if (all) {\n actions.setMediaList(items.map((item) => ({ ...item, checked: true })));\n } else {\n actions.setMediaList(items.map((item) => ({ ...item, checked: false })));\n }\n }\n\n async removeImgs() {\n if (!confirm(ACMS.i18n('media.remove_media_confirm'))) {\n return;\n }\n if (this.listRef.current === null) {\n return;\n }\n\n // ゲート: 参照チェック・外部ストレージ連動削除等を挟める拡張ポイント。実際の削除対象は\n // チェック状態(フォーム)から構築される FormData に基づくため、waterfall で差し替えた\n // mediaIds は後続ハンドラ・.success 通知には伝わるが、実削除対象そのものの絞り込みには\n // ならない(除外したい場合は cancel で一括拒否すること)。\n const mediaIds = this.getSelectedItems().map((item) => String(item.media_id));\n const gateResult = await emit('media.delete.before', { mediaIds });\n if (gateResult.canceled) {\n if (gateResult.reason) {\n notify.danger(gateResult.reason);\n }\n return;\n }\n\n const fd = new FormData(this.listRef.current);\n fd.append('ACMS_POST_Media_Index_Delete', 'true');\n fd.append('formToken', window.csrfToken);\n const end = pending.splash(ACMS.i18n('media.deleting_media'));\n try {\n await getMediaTransport().deleteMedia(fd);\n notify.info(ACMS.i18n('media.remove_media_success'));\n void emit('media.delete.success', gateResult.event);\n this.fetchMediaList();\n } catch {\n notify.danger(ACMS.i18n('media.remove_media_error'));\n } finally {\n end();\n }\n }\n\n setOrder(target: keyof OrderActive) {\n const { state } = this;\n const { order } = state;\n const sortDirection = this.getNextSortDirection(target);\n this.setState(\n {\n ...state,\n orderActive: target,\n order: {\n ...order,\n [target]: sortDirection,\n },\n },\n () => {\n this.fetchMediaList();\n }\n );\n // upload_date-desc\n }\n\n checkOrder(orderActive: keyof OrderActive) {\n this.setState(\n {\n orderActive,\n },\n () => {\n this.fetchMediaList();\n }\n );\n }\n\n checkAscDesc(ascdesc: 'asc' | 'desc') {\n const { order, orderActive } = this.state;\n order[orderActive] = ascdesc;\n this.setState(\n {\n order,\n },\n () => {\n this.fetchMediaList();\n }\n );\n }\n\n getOrder() {\n const { orderActive, order } = this.state;\n if (orderActive === 'media_title') {\n return `file_name-${order[orderActive]}`;\n }\n if (orderActive === 'media_last_modified') {\n return `last_modified-${order[orderActive]}`;\n }\n if (orderActive === 'media_datetime') {\n return `upload_date-${order[orderActive]}`;\n }\n if (orderActive === 'media_filesize') {\n return `file_size-${order[orderActive]}`;\n }\n return '';\n }\n\n fetchMediaList(config: MediaAjaxConfig = {}) {\n const { year, month, limit, filetype, fileext, owner, blogAxis } = this.state;\n const { actions, selectedTags: labels } = this.props;\n const order = this.getOrder();\n const tag = labels.reduce((accumulator, current) => {\n if (!accumulator) {\n return current;\n }\n return `${accumulator}/${current}`;\n }, '');\n const override: MediaAjaxConfig = {\n order,\n tag,\n limit,\n filetype,\n fileext,\n owner,\n blogAxis,\n };\n if (year && month) {\n override.date = `${year}/${month}`;\n } else {\n override.date = '';\n override.year = year;\n override.month = month;\n }\n if (!config.page) {\n config.page = 1;\n }\n const settings = { ...config, ...override } as MediaAjaxConfig;\n if (actions && actions.fetchMediaList) {\n actions.fetchMediaList(settings);\n }\n }\n\n getIsSorted(th: keyof OrderActive): false | SortDirection {\n const { order, orderActive } = this.state;\n if (orderActive === th) {\n if (order[orderActive] === 'asc') {\n return 'asc';\n }\n return 'desc';\n }\n return false;\n }\n\n getNextSortDirection(th: keyof OrderActive): SortDirection {\n const { order } = this.state;\n return order[th] === 'asc' ? 'desc' : 'asc';\n }\n\n changeStyle(style: DisplayStyle) {\n this.setState({\n style,\n });\n }\n\n getCheckedItemsLength() {\n const { items } = this.props;\n const checks = items.filter((item) => item.checked);\n if (checks && checks.length) {\n return checks.length;\n }\n return 0;\n }\n\n /**\n * チェック済みかつ「実際にチェックボックスが描画される」アイテムのみを返す。\n * `mode === 'edit'` のとき `!media_editable` の行はチェックボックス自体が描画されない\n * (テーブル行の描画条件 `mode !== 'edit' || item.media_editable` と同じ判定)が、\n * `toggleAllCheck()`(全選択)は編集可否を見ずに `checked` を立てるため、`props.items` の\n * `checked` だけを見ると実際にフォーム送信される対象より多く数えてしまう。\n * `media.delete.before`/`.success` の `mediaIds` と Slot `media.list.bulk-actions` の\n * `selectedItems` は、実削除対象(フォームのチェックボックス)と一致させるためこちらを使う。\n */\n getSelectedItems(): MediaItem[] {\n const { items, mode } = this.props;\n return items.filter((item) => item.checked && (mode !== 'edit' || item.media_editable));\n }\n\n onLabelChange(labels: readonly MediaTag[]) {\n const tags = labels.map((label) => label.value);\n this.props.actions.setSelectedTags(tags);\n this.getFilteredOptions(tags);\n }\n\n getFilteredOptions(tags: string[]) {\n getMediaTransport()\n .fetchMediaTags(tags)\n .then((data) => {\n const filteredOptions = data.map((item) => ({\n value: item,\n label: item,\n }));\n this.setState({\n filteredOptions,\n });\n });\n }\n\n onChangeDisplayNumber(e: React.ChangeEvent<HTMLSelectElement>) {\n const { actions } = this.props;\n const limit = parseInt(e.target.value, 10);\n actions.setMediaConfig({\n limit,\n page: 1,\n });\n this.setState({ limit });\n }\n\n onKeywordInput(e: React.FormEvent<HTMLInputElement>) {\n if (!(e.target instanceof HTMLInputElement)) {\n return;\n }\n const { actions } = this.props;\n actions.setMediaConfig({\n keyword: e.target.value,\n });\n }\n\n getArchives(archives: string[]) {\n let years: string[] = [];\n let months: string[] = [];\n archives.forEach((archive) => {\n const [year, month] = archive.split('-');\n years.push(year);\n months.push(month);\n });\n years = [...new Set(years)].sort();\n months = [...new Set(months)].sort();\n return { years, months };\n }\n\n onDateChange(value: string, type: 'year' | 'month') {\n if (type === 'month') {\n this.setState({\n month: value,\n });\n } else {\n this.setState({\n year: value,\n });\n }\n }\n\n onAddedLabelsChange(labels: readonly MediaTag[]) {\n this.setState({\n selectedLabels: labels.map((label) => label),\n });\n }\n\n async addLabelToItems() {\n if (this.listRef.current === null) {\n return;\n }\n const { selectedLabels } = this.state;\n const tags = selectedLabels.map((selectedLabel) => selectedLabel.value).join(',');\n const fd = new FormData(this.listRef.current);\n fd.append('tags', tags);\n fd.append('ACMS_POST_Media_Index_Tags', 'true');\n fd.append('formToken', window.csrfToken);\n try {\n await getMediaTransport().addTagsToMedia(fd);\n notify.info(ACMS.i18n('media.add_tags_to_media_success'));\n this.fetchMediaList();\n } catch {\n notify.danger(ACMS.i18n('media.add_tags_to_media_error'));\n }\n }\n\n getFileStyle = (item: MediaItem): React.CSSProperties => {\n if (!item) {\n return {};\n }\n if (item.media_ext.toLowerCase() === 'pdf') {\n return {\n height: '70%',\n width: 'auto',\n opacity: 1,\n };\n }\n return {\n verticalAlign: 'middle',\n width: '70px',\n opacity: 1,\n };\n };\n\n getImageStyle = (item: MediaItem): React.CSSProperties => {\n if (!item || !item.width || !item.height) {\n return {};\n }\n if (item.width > item.height) {\n return {\n width: '100%',\n height: 'auto',\n opacity: 1,\n transform: `translate(-50%,-50%) scale(${item.width / item.height})`,\n };\n }\n return {\n width: 'auto',\n height: '100%',\n opacity: 1,\n transform: `translate(-50%,-50%) scale(${item.height / item.width})`,\n };\n };\n\n rowClick(e: React.MouseEvent<HTMLTableRowElement>, item: MediaItem) {\n const { oldItemId } = this.state;\n const element = e.target as HTMLElement;\n if (element.tagName === 'INPUT' || element.tagName === 'I' || element.tagName === 'LABEL') {\n e.preventDefault();\n }\n if (element.tagName !== 'BUTTON') {\n if (e.shiftKey && oldItemId !== null) {\n this.toggleCheckFrom(oldItemId, item);\n } else {\n this.toggleCheck(item);\n this.setState({\n oldItemId: item.media_id,\n });\n }\n }\n }\n\n componentDidUpdate(prevProps: MediaListProps) {\n const { style, scale, order, orderActive, limit, filterMenuOpened, owner, blogAxis } = this.state;\n localStorage.setItem(\n 'acms-media-list',\n JSON.stringify({\n style,\n scale,\n order,\n orderActive,\n limit,\n filterMenuOpened,\n owner,\n blogAxis,\n })\n );\n\n if (prevProps.items !== this.props.items) {\n this.setItems(this.props.items);\n }\n }\n\n componentDidMount() {\n const storage = localStorage.getItem('acms-media-list');\n const { selectedTags } = this.props;\n if (!storage) {\n this.fetchMediaList();\n return;\n }\n if (location.hash) {\n const { mid } = parseQuery(location.hash.slice(1));\n if (mid) {\n // @ts-expect-error 対応難易度が高いため、後で対応する\n this.setItem({ media_id: mid });\n }\n }\n const { style, scale, order, orderActive, limit, filterMenuOpened, owner, blogAxis } = JSON.parse(storage);\n this.setState(\n {\n style,\n scale,\n order,\n orderActive,\n limit,\n filterMenuOpened,\n owner,\n blogAxis,\n },\n () => {\n this.fetchMediaList();\n }\n );\n if (selectedTags) {\n this.getFilteredOptions(selectedTags);\n }\n }\n\n loadImg(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n resolve(img);\n };\n setTimeout(() => {\n resolve(img);\n }, 500);\n img.src = url;\n });\n }\n\n setItems(items: MediaItem[]) {\n const newItems = items.map(async (item) => {\n if ((item.media_type === 'image' || item.media_type === 'svg') && !item.width) {\n const img = await this.loadImg(item.media_thumbnail);\n if (img.naturalWidth && img.naturalHeight) {\n return { ...item, width: img.naturalWidth, height: img.naturalHeight };\n }\n return { ...item, width: img.width, height: img.height };\n }\n return item;\n });\n Promise.all(newItems).then((items) => {\n this.setState({ items });\n });\n }\n\n scaleChanged = (scale: number | number[]) => {\n const newScale = Array.isArray(scale) ? scale[0] : scale;\n this.setState({ scale: newScale });\n };\n\n getOptions = () => {\n const { filteredOptions } = this.state;\n const { tags, selectedTags } = this.props;\n if (selectedTags.length) {\n return filteredOptions;\n }\n return tags.map((tag) => ({\n value: tag,\n label: tag,\n }));\n };\n\n toggleMenu(menuItem: keyof Menu) {\n const { menu } = this.state;\n const newMenu = { ...menu, [menuItem]: !menu[menuItem] };\n this.setState({\n menu: newMenu,\n });\n }\n\n render() {\n const { mode, config, archives, tags, total, items, selectedTags, extensions } = this.props;\n\n const { years, months } = this.getArchives(archives);\n\n const { page, keyword } = config;\n const {\n style,\n editMode,\n scale,\n selectedLabels,\n items: stateItems,\n limit,\n menu,\n owner,\n blogAxis,\n order,\n orderActive,\n oldItemId,\n toggleAll,\n filterMenuOpened,\n filetype,\n } = this.state;\n\n const checkedLength = this.getCheckedItemsLength();\n const selectedItems = this.getSelectedItems();\n\n return (\n <div>\n <div id=\"media-filter-form\" role=\"search\" className=\"acms-admin-form\">\n <Filter>\n <FilterBody>\n <FilterGroup>\n <FilterGroupTitle>{ACMS.i18n('media.filter_search')}</FilterGroupTitle>\n <FilterContent fit>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-date\">{ACMS.i18n('media.created_date')}</FilterItemLabel>\n\n <div style={{ display: 'flex' }}>\n <div className=\"acms-admin-inline-block acms-admin-margin-right-mini\">\n <select\n id=\"filter-date\"\n className=\"acms-admin-margin-right-mini\"\n onChange={(e) => {\n this.onDateChange(e.target.value, 'year');\n }}\n >\n <option value=\"\">{ACMS.i18n('media.year')}</option>\n {years.map((year) => (\n <option value={year} key={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <VisuallyHidden asChild>\n <label htmlFor=\"filter-date-month\">{ACMS.i18n('media.month')}</label>\n </VisuallyHidden>\n <div className=\"acms-admin-inline-block\">\n <select\n id=\"filter-date-month\"\n onChange={(e) => {\n this.onDateChange(e.target.value, 'month');\n }}\n >\n <option value=\"\">{ACMS.i18n('media.month')}</option>\n {months.map((month) => (\n <option value={month} key={month}>\n {month}\n </option>\n ))}\n </select>\n </div>\n </div>\n </FilterItem>\n\n <FilterItem full>\n <FilterItemLabel htmlFor=\"filter-tag\">{ACMS.i18n('media.tag')}</FilterItemLabel>\n <div className=\"acms-admin-form-width-medium\">\n <RichSelect<MediaTag, true>\n isMulti\n value={selectedTags.map((selectedTag) => ({\n label: selectedTag,\n value: selectedTag,\n }))}\n options={this.getOptions()}\n onChange={this.onLabelChange.bind(this)}\n closeMenuOnSelect={false}\n placeholder={ACMS.i18n('media.tag_search_select_placeholder')}\n noOptionsMessage={() => ACMS.i18n('media.tag_select_no_options_message')}\n inputId=\"filter-tag\"\n />\n </div>\n </FilterItem>\n </FilterContent>\n </FilterGroup>\n\n {filterMenuOpened && (\n <div id=\"search-detail\">\n <FilterInner>\n <FilterGroup>\n <FilterGroupTitle>{ACMS.i18n('media.detailed_condition')}</FilterGroupTitle>\n <FilterContent>\n <FilterItem full>\n <FilterItemLabel htmlFor=\"filter-keyword\">{ACMS.i18n('media.keyword')}</FilterItemLabel>\n <input\n type=\"text\"\n placeholder={ACMS.i18n('media.search_by_keyword')}\n id=\"filter-keyword\"\n className=\"acms-admin-form-width-full\"\n value={keyword}\n onInput={this.onKeywordInput.bind(this)}\n />\n </FilterItem>\n </FilterContent>\n </FilterGroup>\n <FilterGroup>\n <FilterGroupTitle>{ACMS.i18n('media.narrow_down')}</FilterGroupTitle>\n <FilterContent>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-sort\">{ACMS.i18n('media.number_of_items')}</FilterItemLabel>\n <select id=\"filter-sort\" value={limit} onChange={this.onChangeDisplayNumber.bind(this)}>\n <option value=\"5\">5</option>\n <option value=\"10\">10</option>\n <option value=\"20\">20</option>\n <option value=\"50\">50</option>\n <option value=\"75\">75</option>\n <option value=\"100\">100</option>\n <option value=\"200\">200</option>\n <option value=\"300\">300</option>\n </select>\n </FilterItem>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-type\">{ACMS.i18n('media.type')}</FilterItemLabel>\n <select\n id=\"filter-type\"\n disabled={this.props.filetype !== 'all'}\n defaultValue={filetype}\n onChange={(e) => {\n this.setState({\n filetype: e.target.value as MediaViewFileType,\n });\n }}\n >\n <option value=\"all\">{ACMS.i18n('media.all')}</option>\n <option value=\"image\">{ACMS.i18n('media.image')}</option>\n <option value=\"file\">{ACMS.i18n('media.file')}</option>\n </select>\n </FilterItem>\n <FilterItem>\n <FilterItemLabel htmlFor=\"filter-ext\">{ACMS.i18n('media.extension')}</FilterItemLabel>\n <select\n id=\"filter-ext\"\n onChange={(e) => {\n this.setState({\n fileext: e.target.value,\n });\n }}\n >\n <option value=\"all\">{ACMS.i18n('media.all')}</option>\n {extensions &&\n extensions.map((extension) => (\n <option value={extension} key={extension.toLowerCase()}>\n {extension.toLowerCase()}\n </option>\n ))}\n </select>\n </FilterItem>\n <FilterItem>\n <label htmlFor=\"filter-owner\" className=\"acms-admin-form-checkbox acms-admin-m-0\">\n <input\n id=\"filter-owner\"\n type=\"checkbox\"\n checked={owner}\n onChange={(e) => {\n this.setState({\n owner: e.target.checked,\n });\n }}\n />\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.owner')}\n </label>\n </FilterItem>\n {ACMS.Config.sbid !== ACMS.Config.bid && (\n <FilterItem>\n <label htmlFor=\"filter-blog-axis\" className=\"acms-admin-form-checkbox acms-admin-m-0\">\n <input\n id=\"filter-blog-axis\"\n type=\"checkbox\"\n checked={blogAxis}\n onChange={(e) => {\n this.setState({\n blogAxis: e.target.checked,\n });\n }}\n />\n <i className=\"acms-admin-ico-checkbox\" />\n {ACMS.i18n('media.blog_axis')}\n </label>\n </FilterItem>\n )}\n </FilterContent>\n </FilterGroup>\n </FilterInner>\n </div>\n )}\n </FilterBody>\n <FilterFooter>\n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-btn-info acms-admin-btn-search\"\n onClick={() => {\n this.fetchMediaList();\n }}\n >\n {ACMS.i18n('media.search')}\n </button>\n\n <FilterDetailButton\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n this.setState({\n filterMenuOpened: !filterMenuOpened,\n });\n }}\n aria-expanded={filterMenuOpened}\n aria-controls=\"search-detail\"\n >\n {ACMS.i18n('media.detailed_search')}\n </FilterDetailButton>\n </FilterFooter>\n </Filter>\n </div>\n\n <div className=\"acms-admin-media-action-group\">\n <div className=\"acms-admin-media-action-item acms-admin-media-action-item-fix\">\n <div className=\"acms-admin-btn-group acms-admin-media-action-display-switch\" role=\"group\">\n <button\n type=\"button\"\n className={classnames('acms-admin-btn', {\n 'acms-admin-btn-active': style === 'table',\n })}\n onClick={this.changeStyle.bind(this, 'table')}\n aria-pressed={style === 'table'}\n aria-label={ACMS.i18n('media.display_switch_list')}\n >\n <i className=\"acms-admin-icon-list\" />\n </button>\n <button\n type=\"button\"\n className={classnames('acms-admin-btn', {\n 'acms-admin-btn-active': style === 'list',\n })}\n onClick={this.changeStyle.bind(this, 'list')}\n aria-pressed={style === 'list'}\n aria-label={ACMS.i18n('media.display_switch_grid')}\n >\n <i className=\"acms-admin-icon-grid\" />\n </button>\n </div>\n\n <div className=\"acms-admin-media-action-sort-select-wrap\">\n <div className=\"acms-admin-media-action-sort-select\">\n {style === 'table' && (\n <Menu closeOnSelect={false}>\n <MenuTrigger className=\"acms-admin-btn\" aria-label={ACMS.i18n('media.open_config_menu')}>\n <i className=\"acms-admin-icon-config\" aria-hidden=\"true\" />\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n <MenuItemCheckbox\n value=\"image\"\n checked={menu.image}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.image2')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"id\"\n checked={menu.id}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n ID\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"filename\"\n checked={menu.filename}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.file_name')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"tag\"\n checked={menu.tag}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.tag')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"last_modified\"\n checked={menu.last_modified}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.updated_date')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"upload_datetime\"\n checked={menu.upload_datetime}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.created_date')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"filesize\"\n checked={menu.filesize}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.file_size')}\n </MenuItemCheckbox>\n <MenuItemCheckbox\n value=\"blogname\"\n checked={menu.blogname}\n onCheckedChange={(_checked, value) => {\n this.toggleMenu(value as keyof Menu);\n }}\n >\n {ACMS.i18n('media.blog_name')}\n </MenuItemCheckbox>\n </MenuList>\n </MenuPopover>\n </Menu>\n )}\n </div>\n\n <div className=\"acms-admin-media-action-sort-select\" style={{ position: 'relative' }}>\n <Menu closeOnSelect={false}>\n <MenuTrigger type=\"button\" className=\"acms-admin-select-btn\">\n {this.getOrderSelectBtnLabel()}\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n <MenuItemRadioGroup\n value={orderActive}\n onValueChange={(value) => {\n this.checkOrder(value as keyof OrderActive);\n }}\n >\n <MenuItemRadio value=\"media_title\">{ACMS.i18n('media.title')}</MenuItemRadio>\n <MenuItemRadio value=\"media_last_modified\">{ACMS.i18n('media.updated_date')}</MenuItemRadio>\n <MenuItemRadio value=\"media_datetime\">{ACMS.i18n('media.created_date')}</MenuItemRadio>\n <MenuItemRadio value=\"media_filesize\">{ACMS.i18n('media.file_size')}</MenuItemRadio>\n </MenuItemRadioGroup>\n <MenuDivider />\n <MenuItemRadioGroup\n value={order[orderActive]}\n onValueChange={(value) => {\n this.checkAscDesc(value as SortDirection);\n }}\n >\n <MenuItemRadio value=\"asc\">{ACMS.i18n('media.asc')}</MenuItemRadio>\n <MenuItemRadio value=\"desc\">{ACMS.i18n('media.desc')}</MenuItemRadio>\n </MenuItemRadioGroup>\n </MenuList>\n </MenuPopover>\n </Menu>\n </div>\n </div>\n </div>\n\n <div className=\"acms-admin-media-action-item acms-admin-media-action-item-middle\">\n {style === 'list' && (\n <div className=\"acms-admin-media-action-range\">\n <span style={{ display: 'inline-flex', width: '100%', alignItems: 'center' }}>\n <VisuallyHidden>{ACMS.i18n('media.display_size')}</VisuallyHidden>\n <i\n className=\"acms-admin-icon-unit-image\"\n style={{ fontSize: '12px', color: '#777777', marginRight: '10px' }}\n />\n <RangeSlider\n className=\"acms-admin-range-slider\"\n min={1}\n max={2}\n step={0.1}\n value={scale}\n onChange={this.scaleChanged}\n />\n <i\n className=\"acms-admin-icon-unit-image\"\n style={{ fontSize: '18px', color: '#777777', marginLeft: '10px' }}\n />\n </span>\n </div>\n )}\n\n {style === 'list' && (\n <div className=\"acms-admin-media-action-select-all\">\n <button\n type=\"button\"\n onClick={this.toggleAllCheck.bind(this)}\n className=\"acms-admin-media-grid-checkbox-wrap\"\n >\n <span\n className={classnames('acms-admin-media-grid-checkbox', {\n selected: toggleAll,\n })}\n aria-hidden=\"true\"\n />\n {ACMS.i18n('media.select_all')}\n </button>\n </div>\n )}\n </div>\n\n <div className=\"acms-admin-form-group acms-admin-media-action-item acms-admin-media-action-item-left\">\n <div className=\"acms-admin-form\">\n <VisuallyHidden asChild>\n <label htmlFor=\"media-action-select\">{ACMS.i18n('media.select')}</label>\n </VisuallyHidden>\n <select\n id=\"media-action-select\"\n className=\"acms-admin-margin-right-mini\"\n value={editMode}\n onChange={(e) => {\n const { value } = e.target;\n this.setState({\n editMode: value,\n });\n }}\n >\n <option>{ACMS.i18n('media.select')}</option>\n <option value=\"remove\">{ACMS.i18n('media.remove')}</option>\n <option value=\"tag\">{ACMS.i18n('media.add_tags')}</option>\n </select>\n {editMode === 'remove' && (\n <>\n {ACMS.i18n('media.checked_items').replace('$1', checkedLength.toString())}\n \n <button\n type=\"button\"\n className=\"acms-admin-btn acms-admin-btn-danger\"\n onClick={this.removeImgs.bind(this)}\n >\n {ACMS.i18n('media.remove')}\n </button>\n </>\n )}\n {editMode === 'tag' && (\n <>\n <div\n style={{ display: 'inline-block', verticalAlign: 'middle' }}\n className=\"acms-admin-margin-right-mini\"\n >\n {ACMS.i18n('media.add_tags_to_checked_items').replace('$1', checkedLength.toString())}\n </div>\n <div\n style={{\n display: 'inline-block',\n width: '200px',\n verticalAlign: 'middle',\n marginRight: '5px',\n }}\n >\n <CreatableSelect<MediaTag, true>\n isMulti\n onChange={this.onAddedLabelsChange.bind(this)}\n value={selectedLabels}\n options={tags.map((tag) => ({\n label: tag,\n value: tag,\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 </div>\n <button type=\"button\" className=\"acms-admin-btn\" onClick={this.addLabelToItems.bind(this)}>\n 追加\n </button>\n </>\n )}\n <Slot<MediaListBulkActionsFillProps> name=\"media.list.bulk-actions\" fillProps={{ selectedItems }} />\n </div>\n </div>\n\n <form\n ref={this.listRef}\n className=\"acms-admin-media-list\"\n style={{ display: style === 'table' ? 'block' : 'none' }}\n >\n <TableScrollable breakpoints={['xs', 'sm', 'md']}>\n <Table variant=\"list\" hover className=\"adminTable acms-admin-media-table\">\n <TableHeader heading>\n <TableRow>\n <TableHead nowrap className=\"acms-admin-media-row-check\">\n {mode === 'edit' && (\n <label\n htmlFor=\"checkAll\"\n aria-label=\"すべて選択\"\n className=\"acms-admin-form-checkbox acms-admin-m-0\"\n onChange={this.toggleAllCheck.bind(this)}\n >\n <input id=\"checkAll\" type=\"checkbox\" />\n <i className=\"acms-admin-ico-checkbox\" />\n </label>\n )}\n </TableHead>\n {menu.image && (\n <TableHead nowrap className=\"acms-admin-media-row-image\">\n {ACMS.i18n('media.image2')}\n </TableHead>\n )}\n {menu.id && (\n <TableHead nowrap className=\"acms-admin-media-row-id\">\n ID\n </TableHead>\n )}\n {menu.filename && (\n <TableHead\n className=\"acms-admin-media-row-title\"\n aria-sort={\n this.getIsSorted('media_title')\n ? `${this.getIsSorted('media_title') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_title')}\n data-next-sort={`${this.getNextSortDirection('media_title')}ending`}\n >\n {ACMS.i18n('media.file_name')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_title') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.tag && <TableHead className=\"acms-admin-media-row-tag\">{ACMS.i18n('media.tag')}</TableHead>}\n {menu.last_modified && (\n <TableHead\n nowrap\n className=\"acms-admin-media-row-date\"\n aria-sort={\n this.getIsSorted('media_last_modified')\n ? `${this.getIsSorted('media_last_modified') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_last_modified')}\n data-next-sort={`${this.getNextSortDirection('media_last_modified')}ending`}\n >\n {ACMS.i18n('media.updated_date')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_last_modified') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.upload_datetime && (\n <TableHead\n nowrap\n className=\"acms-admin-media-row-date\"\n aria-sort={\n this.getIsSorted('media_datetime')\n ? `${this.getIsSorted('media_datetime') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_datetime')}\n data-next-sort={`${this.getNextSortDirection('media_datetime')}ending`}\n >\n {ACMS.i18n('media.created_date')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_datetime') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.filesize && (\n <TableHead\n nowrap\n className=\"acms-admin-media-row-size\"\n aria-sort={\n this.getIsSorted('media_filesize')\n ? `${this.getIsSorted('media_filesize') as SortDirection}ending`\n : undefined\n }\n >\n <button\n type=\"button\"\n className=\"acms-admin-th-sort-btn\"\n onClick={this.setOrder.bind(this, 'media_filesize')}\n data-next-sort={`${this.getNextSortDirection('media_filesize')}ending`}\n >\n {ACMS.i18n('media.file_size')}\n <span className=\"acms-admin-th-sort-btn-icon\" />\n <VisuallyHidden>\n {ACMS.i18n(`table.label.sort.${this.getIsSorted('media_filesize') || 'none'}`)}\n </VisuallyHidden>\n </button>\n </TableHead>\n )}\n {menu.blogname && (\n <TableHead className=\"acms-admin-media-row-blogname\">{ACMS.i18n('media.blog_name')}</TableHead>\n )}\n {mode === 'edit' && (\n <TableHead nowrap className=\"acms-admin-media-row-action\" style={{ whiteSpace: 'nowrap' }}>\n {ACMS.i18n('media.action')}\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n <TableBody>\n {items.map((item) => (\n <TableRow\n key={item.media_id}\n onClick={(e) => {\n this.rowClick(e, item);\n }}\n >\n <TableCell nowrap className=\"acms-admin-media-row-check\">\n {item.media_editable}\n {(mode !== 'edit' || item.media_editable) && (\n <label aria-label=\"選択\" className=\"acms-admin-form-checkbox acms-admin-m-0\">\n <input\n type=\"checkbox\"\n name=\"checks[]\"\n value={`${item.media_bid}:${item.media_id}`}\n checked={item.checked}\n onChange={this.toggleCheck.bind(this, item)}\n aria-label={item.media_title || `${item.media_id}`}\n />\n <i className=\"acms-admin-ico-checkbox\" />\n </label>\n )}\n </TableCell>\n {menu.image && (\n <>\n {}\n <TableCell nowrap className=\"acms-admin-media-row-image\">\n <ConditionalWrap\n wrap={(chidren) => (\n <a href={item.media_permalink} target=\"_blank\" rel=\"noopener noreferrer\">\n {chidren}\n </a>\n )}\n condition={item.media_type === 'file'}\n >\n <div className=\"acms-admin-media-list-thumbnail-wrap\">\n <img\n src={`${item.media_thumbnail}?date=${item.media_last_modified}`}\n className=\"acms-admin-media-list-thumbnail\"\n alt=\"\"\n />\n </div>\n </ConditionalWrap>\n </TableCell>\n </>\n )}\n {menu.id && (\n <TableCell nowrap className=\"acms-admin-media-row-id\">\n <span className=\"acms-admin-label\">{item.media_id}</span>\n </TableCell>\n )}\n {menu.filename && (\n <TableCell className=\"acms-admin-media-row-title\">{item.media_title}</TableCell>\n )}\n {menu.tag && (\n <TableCell className=\"acms-admin-media-row-tag\">\n {item.media_label &&\n item.media_label.split(delimiter).map((label) => (\n <span\n className=\"acms-admin-label acms-admin-label-info\"\n style={{\n display: 'inline-block',\n marginRight: '5px',\n marginTop: '5px',\n }}\n key={label}\n >\n {label}\n </span>\n ))}\n </TableCell>\n )}\n {menu.last_modified && (\n <TableCell nowrap className=\"acms-admin-media-row-date\">\n {dayjs(item.media_last_modified).format('YYYY/MM/DD')}\n <br />\n {dayjs(item.media_last_modified).format('HH:mm')}\n </TableCell>\n )}\n {menu.upload_datetime && (\n <TableCell nowrap className=\"acms-admin-media-row-date\">\n {dayjs(item.media_datetime).format('YYYY/MM/DD')}\n <br />\n {dayjs(item.media_datetime).format('HH:mm')}\n </TableCell>\n )}\n {menu.filesize && (\n <TableCell nowrap className=\"acms-admin-media-row-action\">\n {item.media_filesize && <>{formatBytes(item.media_filesize)}</>}\n {item.media_size && item.media_type === 'image' && (\n <span style={{ display: 'block', marginTop: '5px' }}>\n {item.media_size}\n px\n </span>\n )}\n </TableCell>\n )}\n {menu.blogname && (\n <TableCell className=\"acms-admin-media-row-blogname\">{item.media_blog_name}</TableCell>\n )}\n {mode === 'edit' && (\n <TableCell nowrap>\n {item.media_editable && (\n <button type=\"button\" onClick={this.setItem.bind(this, item)} className=\"acms-admin-btn\">\n {ACMS.i18n('media.edit')}\n </button>\n )}\n </TableCell>\n )}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableScrollable>\n </form>\n\n <div className=\"acms-admin-media-grid\" style={{ display: style === 'table' ? 'none' : 'flex' }}>\n {items.map((item, index) => (\n <div\n className=\"acms-admin-media-grid-item\"\n key={item.media_id}\n style={{ width: `${150 * scale}px`, height: `${150 * scale}px` }}\n >\n <div\n className={classnames('acms-admin-media-grid-figure', { selected: item.checked })}\n title={item.media_title}\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n if (e.shiftKey && oldItemId !== null) {\n this.toggleCheckFrom(oldItemId, item);\n } else {\n this.toggleCheck(item);\n this.setState({\n oldItemId: item.media_id,\n });\n }\n }}\n onKeyDown={(e) => {\n // フォーカス中の要素が自分自身だけの場合のみ処理\n if (e.currentTarget !== document.activeElement) {\n return; // 子要素にフォーカスがあれば無視\n }\n if (e.key === 'Enter' || e.key === ' ') {\n if (e.shiftKey && oldItemId !== null) {\n this.toggleCheckFrom(oldItemId, item);\n } else {\n this.toggleCheck(item);\n this.setState({\n oldItemId: item.media_id,\n });\n }\n // デフォルトのスペースバーの動作を防止\n e.preventDefault();\n }\n }}\n >\n <div className=\"acms-admin-media-grid-shadow\" />\n {item.media_type === 'file' && (\n <div className=\"acms-admin-media-grid-img-wrap\">\n <img\n className=\"acms-admin-media-grid-file-img\"\n src={item.media_thumbnail}\n style={this.getFileStyle(stateItems[index])}\n alt=\"\"\n />\n <span className=\"acms-admin-media-grid-filename\">{item.media_title}</span>\n </div>\n )}\n {(item.media_type === 'image' || item.media_type === 'svg') && (\n <img\n src={`${item.media_thumbnail}?date=${item.media_last_modified}`}\n style={this.getImageStyle(stateItems[index])}\n id={`media-image-${index}`}\n alt=\"\"\n />\n )}\n <div className={classnames('acms-admin-media-grid-flame', { selected: item.checked })}>\n <div className=\"acms-admin-media-grid-checkbox\" />\n {mode === 'edit' && item.media_editable && (\n <div className=\"acms-admin-media-edit-list-btn-wrap\">\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-edit-list-btn\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n this.setItem(item);\n }}\n >\n {ACMS.i18n('media.edit')}\n </button>\n </div>\n )}\n </div>\n </div>\n <input type=\"hidden\" name=\"checks[]\" value={`${item.media_bid}:${item.media_id}`} />\n </div>\n ))}\n </div>\n <Grid className=\"acms-admin-margin-top-medium\">\n <PaginationRoot\n page={page}\n pageSize={limit}\n total={Math.ceil(total / limit)}\n totalItems={total}\n onChange={(page) =>\n this.fetchMediaList({\n page,\n })\n }\n >\n <GridItem col={{ md: 6, xs: 12 }}>\n <Pagination />\n </GridItem>\n <GridItem col={{ md: 6, xs: 12 }}>\n <PaginationSummary />\n </GridItem>\n </PaginationRoot>\n </Grid>\n </div>\n </div>\n );\n }\n}\n","import { Component } from 'react';\nimport classNames from 'classnames';\nimport DOMPurify from 'dompurify';\nimport { emit } from '@ablogcms/events';\nimport { random, getExt, dataURItoBlob } from '@ablogcms/utils';\nimport createPdf from '@ablogcms/pdf/create-pdf';\nimport runWithConcurrency from '@ablogcms/utils/run-with-concurrency';\nimport ResizeImage from '@ablogcms/resize-image';\nimport readFiles, { type ExtendedFile } from '@ablogcms/read-files';\nimport { CreatableSelect } from '@ablogcms/components/rich-select';\nimport { DropZone } from '@ablogcms/components/drop-zone';\nimport ProgressBar from '@ablogcms/components/progress-bar';\nimport { MediaAjaxConfig, MediaItem, MediaTag } from '../../types';\nimport * as actions from '../../stores/actions';\nimport { getMediaTransport } from '../../runtime';\nimport { createPdfWorkerSource } from '../../utils';\n\nconst delimiter = ',';\nconst DEFAULT_UPLOAD_LIMIT = 100;\nconst DEFAULT_UPLOAD_CONCURRENCY = 4;\n\ninterface MediaUploadItem {\n file: File;\n filetype: string;\n preview: string;\n blob?: Blob | null; // for heic\n id: string;\n idx: number;\n progress: number;\n progressError: boolean;\n name: string;\n size: number;\n uploadedItem?: MediaItem;\n}\n\ninterface MediaUploaderProps {\n showUploadButton?: boolean;\n largeSize: number;\n\n config: MediaAjaxConfig;\n actions: typeof actions;\n files?: File[];\n tags?: string[];\n label?: string;\n}\n\ninterface MediaUploaderState {\n items: MediaUploadItem[];\n label: string;\n loading: boolean;\n imgsOnStage: boolean;\n hasUploadedItems: boolean;\n}\n\nexport default class MediaUploader extends Component<MediaUploaderProps, MediaUploaderState> {\n static defaultProps = {\n showUploadButton: true,\n tags: [],\n files: [],\n };\n\n constructor(props: MediaUploaderProps) {\n super(props);\n this.state = {\n items: [],\n label: props.label || '',\n loading: false,\n imgsOnStage: false,\n hasUploadedItems: false, // has already uploaded images\n };\n }\n\n // 一度にアップロードできる件数の上限(config 由来。未設定・不正値はデフォルトにフォールバック)\n get uploadLimit(): number {\n const value = parseInt(String(ACMS.Config.mediaUploadLimit ?? ''), 10);\n return Number.isFinite(value) && value > 0 ? value : DEFAULT_UPLOAD_LIMIT;\n }\n\n // 同時にアップロードする本数(並列度。config 由来。未設定・不正値はデフォルトにフォールバック)\n get uploadConcurrency(): number {\n const value = parseInt(String(ACMS.Config.mediaUploadConcurrency ?? ''), 10);\n return Number.isFinite(value) && value > 0 ? value : DEFAULT_UPLOAD_CONCURRENCY;\n }\n\n // 全体のアップロード進捗(完了件数・失敗件数・総件数・全体パーセント)\n get uploadProgress(): { done: number; total: number; percent: number; errorCount: number } {\n const { items } = this.state;\n const total = items.length;\n if (total === 0) {\n return { done: 0, total: 0, percent: 0, errorCount: 0 };\n }\n const isDone = (item: MediaUploadItem) => Boolean(item.uploadedItem) || item.progress < 0;\n const done = items.filter(isDone).length;\n const errorCount = items.filter((item) => item.progressError).length;\n const sum = items.reduce((acc, item) => acc + (isDone(item) ? 100 : Math.max(0, Math.min(100, item.progress))), 0);\n return { done, total, percent: Math.round(sum / total), errorCount };\n }\n\n // アップロード中のページ離脱・リロードに確認ダイアログを出す(途中中断の防止)\n handleBeforeUnload = (event: BeforeUnloadEvent) => {\n if (this.state.loading) {\n event.preventDefault();\n event.returnValue = '';\n }\n };\n\n componentDidMount() {\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n if (this.props.files) {\n readFiles(this.props.files).then((extededFiles) => {\n this.onComplete(extededFiles);\n });\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n }\n\n async createPdfThumbnail(file: Blob | File) {\n const pdf = await createPdf(file, 1, createPdfWorkerSource());\n return pdf;\n }\n\n upload(blob: Blob | File, label: string, name: string, item: MediaUploadItem): Promise<MediaItem> {\n const { largeSize } = this.props;\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n const fd = new FormData();\n fd.append('ACMS_POST_Media_Upload', 'true');\n if (label) {\n fd.append('tags', label);\n }\n const ext = getExt(name);\n if (ext.toLowerCase() === 'pdf') {\n const image = await this.createPdfThumbnail(blob);\n if (image) {\n fd.append('media_pdf_thumbnail', dataURItoBlob(image));\n fd.append('pdf_page', '1');\n }\n }\n fd.append('size', `${largeSize}`);\n fd.append('file', blob, name);\n fd.append('formToken', window.csrfToken);\n this.setProgressBar(item, 0);\n getMediaTransport()\n .uploadMedia(fd, {\n onUploadProgress: (e) => {\n if (typeof e.total === 'number') {\n this.setProgressBar(item, 70 * (e.loaded / e.total));\n }\n },\n })\n .then((res) => {\n if (res && res.data) {\n if ('status' in res.data && res.data.status === 'failure') {\n throw new Error(res.data.message);\n }\n const mediaItem = res.data as MediaItem;\n this.setProgressBar(item, 100);\n setTimeout(() => {\n resolve(mediaItem);\n }, 300);\n return;\n }\n throw new Error(ACMS.i18n('media.error.unknown'));\n })\n .catch((err) => {\n console.error(err);\n this.setProgressBar(item, 100, true);\n if (err instanceof Error) {\n alert(err.message);\n }\n // 失敗時も必ず settle させ、並列キューの worker スロットを解放する(ハング防止)\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n }\n\n setProgressBar(item: MediaUploadItem, progress: number, progressError = false) {\n // 並列アップロード中の状態更新競合(lost update)を避けるため、最新の state を土台に更新する\n this.setState((prev) => {\n const index = prev.items.findIndex((file) => file.id === item.id);\n if (index === -1) {\n return null;\n }\n const copyItems = prev.items.slice();\n copyItems[index] = { ...copyItems[index], progress, progressError };\n return { items: copyItems };\n });\n }\n\n removeFile(file: MediaUploadItem) {\n this.setState((prev) => ({\n items: prev.items.filter((item) => item.idx !== file.idx),\n }));\n }\n\n setUploadedItem(file: MediaUploadItem, uploadedItem: MediaItem) {\n // 並列アップロード中の状態更新競合(lost update)を避けるため、最新の state を土台に更新する\n this.setState((prev) => {\n const index = prev.items.findIndex((item) => item.idx === file.idx);\n if (index === -1) {\n return null;\n }\n const copyItems = prev.items.slice();\n copyItems[index] = { ...copyItems[index], uploadedItem, progress: -1 };\n return { items: copyItems };\n });\n }\n\n editItem(item: MediaUploadItem) {\n if (item.uploadedItem) {\n this.props.actions.setItem(item.uploadedItem);\n }\n }\n\n async uploadItems(): Promise<MediaItem[]> {\n const { items, label } = this.state;\n const { actions } = this.props;\n\n // ゲート: アップロード前に案件固有の追加確認(コンプラ同意等)を挟める拡張ポイント。\n // プラグイン未読み込み・ハンドラ0件でも emit は { canceled: false, event: 元の payload } で解決するため、\n // 既存の必須バリデーション(mime/サイズ等。upload() 内・呼び出し元 onComplete 内)を置き換えない上乗せ。\n const gateResult = await emit('media.upload.before', { files: items.map((item) => item.file) });\n if (gateResult.canceled) {\n if (gateResult.reason) {\n alert(gateResult.reason);\n }\n return [];\n }\n // パイプライン通過後の files を使う。ハンドラが除外したファイルはアップロード対象から外す\n const allowedFiles = new Set(gateResult.event.files);\n const targetItems = items.filter((item) => allowedFiles.has(item.file));\n\n const resizeImage = new ResizeImage();\n this.setState({\n loading: true,\n hasUploadedItems: true,\n });\n // lgImg はログイン時のみ出力されるが、メディアアップローダーはログイン必須の管理画面でのみ使用される\n const [resizeType, largeSize] = ACMS.Config.lgImg!.split(':');\n\n // 各ファイルを「呼び出すとアップロードを開始するタスク」に変換し、同時実行数を絞って順次\n // アップロードする。1件が失敗しても null を返して settle し、後続のキューを止めない(ハング防止)。\n const tasks: Array<() => Promise<MediaItem | null>> = targetItems.map((item: MediaUploadItem) => async () => {\n const { name, filetype, file } = item;\n const isHeic = filetype === 'image' && /(heic|heif)/i.test(file.type);\n const isSvg = filetype === 'image' && file.type.includes('svg');\n const isGif = filetype === 'image' && file.type.includes('gif');\n\n try {\n let uploadData: Blob | File;\n if (filetype === 'image') {\n if (isHeic) {\n // heic は blob があるのでそれをアップロード(無ければスキップ)\n if (!(item.blob instanceof Blob)) {\n return null;\n }\n uploadData = item.blob;\n } else if (isSvg) {\n // svg は text を取得して DOMPurify でクリーンアップしてからアップロード\n const text = await file.text();\n const clean = DOMPurify.sanitize(text, { USE_PROFILES: { svg: true, svgFilters: true } });\n uploadData = new Blob([clean], { type: 'image/svg+xml' });\n } else if (isGif) {\n // gif はリサイズせずそのままアップロード\n uploadData = file;\n } else {\n // それ以外はリサイズしてアップロード\n const { blob, resize } = await resizeImage.getBlobFromFile(file, resizeType, parseInt(largeSize, 10));\n uploadData = resize && ACMS.Config.mediaClientResize !== 'off' ? blob : file;\n }\n } else {\n // ファイルはそのままアップロード\n uploadData = file;\n }\n const uploadedItem = await this.upload(uploadData, label, name, item);\n this.setUploadedItem(item, uploadedItem);\n return uploadedItem;\n } catch {\n // upload 側で alert 済み。タスクは settle させ、残りのファイルの処理を継続する\n return null;\n }\n });\n\n const results = await runWithConcurrency(tasks, this.uploadConcurrency);\n this.setState({\n loading: false,\n });\n actions.fetchMediaList();\n const uploadedItems = results.filter((result): result is MediaItem => result !== null);\n // 通知: アップロード完了後の処理。既存の acms.media-updated はメディア編集の保存時のみ発火するため、\n // 新規アップロード完了に対になるイベントとしてここで発火する\n await emit('media.upload.success', { items: uploadedItems });\n return uploadedItems;\n }\n\n onComplete(files: ExtendedFile[]) {\n let items: MediaUploadItem[] = [\n ...this.state.items,\n ...files.map(\n (file) =>\n ({\n file: file.file,\n filetype: file.filetype,\n preview: file.filetype === 'image' ? file.preview : '',\n blob: file.filetype === 'image' ? file.blob : null, // for heic\n name: file.file.name,\n size: file.file.size,\n idx: -1,\n id: '',\n progress: 0,\n progressError: false,\n }) as MediaUploadItem\n ),\n ]\n .filter((item) => {\n if (item.uploadedItem) {\n return false;\n }\n return true;\n })\n .map((item, index) => ({\n ...item,\n idx: index,\n id: random(10),\n }));\n // 同一ファイルの多重追加を除去する。name だけでなく size・lastModified も一致した場合のみ重複とみなし、\n // ファイル名が偶然一致するだけの別ファイルは区別する(サーバー側の uniqueFilePath による連番採番に委ねる)\n items = Array.from(\n new Map(items.map((item) => [`${item.file.name}:${item.file.size}:${item.file.lastModified}`, item])).values()\n );\n\n const limit = this.uploadLimit;\n if (items.length > limit) {\n alert(ACMS.i18n('media.more_than_limit_not_allowed', { limit }));\n items = items.slice(0, limit);\n }\n if (items.length > 0) {\n this.setState({ items, hasUploadedItems: false, imgsOnStage: true });\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 addTags(tags: readonly MediaTag[]) {\n const label = tags.reduce((val, tag, idx) => {\n if (idx === 0) {\n return tag.value;\n }\n return `${val}${delimiter}${tag.value}`;\n }, '');\n\n this.setState({\n label,\n });\n }\n\n removeUploadedItems() {\n this.setState((prev) => ({\n items: prev.items.filter((item) => !item.uploadedItem),\n }));\n }\n\n // 全体進捗テキストの出し分け(進行中 / 完了 / 一部失敗)\n renderOverallText() {\n const overall = this.uploadProgress;\n const processed = overall.total > 0 && overall.done + overall.errorCount === overall.total;\n if (!processed) {\n return ACMS.i18n('media.upload_overall_progress', { done: overall.done, total: overall.total });\n }\n if (overall.errorCount > 0) {\n // 完了は完了(バーは info のまま)。失敗件数だけ danger で添える\n return (\n <>\n {ACMS.i18n('media.upload_done_count', { done: overall.done })}\n <span className=\"acms-admin-text-danger\">\n {ACMS.i18n('media.upload_failed_count', { failed: overall.errorCount })}\n </span>\n </>\n );\n }\n return ACMS.i18n('media.upload_all_complete', { total: overall.total });\n }\n\n render() {\n const { items, label, hasUploadedItems, imgsOnStage } = this.state;\n const { showUploadButton, tags } = this.props;\n const overall = this.uploadProgress;\n return (\n <>\n <div className=\"clearfix\" style={{ marginBottom: '10px' }}>\n <div style={{ padding: '0 10px' }}>\n <CreatableSelect<MediaTag, true>\n isMulti\n options={(tags || []).map((tag) => ({\n label: tag,\n value: tag,\n }))}\n value={this.makeTags(label)}\n onChange={this.addTags.bind(this)}\n placeholder={ACMS.i18n('media.tag_select_placeholder')}\n formatCreateLabel={(inputValue) => ACMS.i18n('media.add_tag', { name: inputValue })}\n isValidNewOption={(inputValue) => inputValue.trim().length > 0}\n noOptionsMessage={() => ACMS.i18n('media.tag_select_no_options_message')}\n closeMenuOnSelect={false}\n hideSelectedOptions\n menuPortalTarget={document.body}\n />\n </div>\n </div>\n {hasUploadedItems && items.length > 0 && (\n <div className=\"acms-admin-media-upload-overall\" style={{ padding: '0 10px', marginBottom: '10px' }}>\n {/* 完了(100%)すると ProgressBar 側でアニメーションが自動停止する(ストライプは残る)。完了はテキストで示す */}\n <ProgressBar value={overall.percent} variant=\"info\" striped animated />\n <p className=\"acms-admin-media-upload-overall-text\">{this.renderOverallText()}</p>\n </div>\n )}\n <div className=\"acms-admin-media-upload-container-wrap\">\n <div className=\"acms-admin-media-upload-container\">\n <div className=\"acms-admin-media-upload-item\">\n <div className=\"acms-admin-media-upload-item-inner\">\n <DropZone onComplete={this.onComplete.bind(this)} />\n </div>\n </div>\n {items.map((item) => (\n <div className=\"acms-admin-media-upload-item\" key={item.id}>\n <div\n className={classNames('acms-admin-media-upload-item-inner', {\n '-progress': item.progress > 0,\n })}\n style={{ position: 'relative' }}\n >\n {item.progress > 0 && (\n <div\n style={{\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n boxSizing: 'border-box',\n zIndex: 2,\n }}\n >\n {/* 個別画像の進捗は画像に重ねる薄いバー(loading-bar)を用いる。メディア専用のためインライン */}\n <div className=\"acms-admin-loading-bar acms-admin-active\">\n <div\n className={classNames('acms-admin-loading-bar-inner', {\n '-alert': item.progressError,\n })}\n style={{ width: `${item.progress}%` }}\n />\n </div>\n </div>\n )}\n {!item.uploadedItem && (\n <button\n type=\"button\"\n className=\"acms-admin-media-upload-cancel\"\n onClick={this.removeFile.bind(this, item)}\n aria-label={ACMS.i18n('media.remove_file')}\n />\n )}\n {item.uploadedItem && (\n <button\n type=\"button\"\n className=\"acms-admin-media-edit-btn acms-admin-media-edit-upload-btn\"\n onClick={this.editItem.bind(this, item)}\n >\n {ACMS.i18n('media.edit')}\n </button>\n )}\n {item.filetype === 'image' && (\n <div className=\"acms-admin-media-upload-bg\" style={{ backgroundImage: `url(${item.preview})` }} />\n )}\n {item.filetype !== 'image' && (\n <div className=\"acms-admin-media-upload-bg\">\n <img\n src={`${ACMS.Config.root}themes/system/images/fileicon/file.png`}\n className=\"acms-admin-media-upload-file\"\n alt=\"\"\n />\n </div>\n )}\n <div className=\"acms-admin-media-overlay\" />\n <div className=\"acms-admin-media-upload-caption\">\n <p className=\"acms-admin-media-upload-caption-text\">{item.name}</p>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n {items.length === 0 && <p style={{ textAlign: 'center' }}>{ACMS.i18n('media.no_staged_media')}</p>}\n {showUploadButton && imgsOnStage && (\n <div className=\"acms-admin-media-upload-footer clearfix\">\n <button\n type=\"button\"\n className=\"acms-admin-btn-admin acms-admin-btn-admin-primary acms-admin-float-right\"\n onClick={this.uploadItems.bind(this)}\n disabled={hasUploadedItems}\n >\n {ACMS.i18n('media.upload')}\n </button>\n </div>\n )}\n </>\n );\n }\n}\n"],"mappings":"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","names":["item","items","page","Component","emit","CreatableSelect","Fragment","jsx","jsxs","delimiter","Component","emit","label","CreatableSelect"]}
|