diff --git a/locales/index.d.ts b/locales/index.d.ts index 83159337ae..a0540fd228 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -10588,7 +10588,7 @@ export interface Locale extends ILocale { */ "deleteSelectionRows": string; /** - * 選択範囲の行を削除 + * 選択範囲の値をクリア */ "deleteSelectionRanges": string; /** @@ -10599,6 +10599,10 @@ export interface Locale extends ILocale { * 検索条件を詳細に設定します。 */ "searchSettingCaption": string; + /** + * 表示件数 + */ + "searchLimit": string; /** * 並び順 */ @@ -10611,10 +10615,6 @@ export interface Locale extends ILocale { * 絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。 */ "registrationLogsCaption": string; - /** - * エラー - */ - "alertEmojisRegisterFailedTitle": string; /** * 絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。 */ @@ -10691,21 +10691,30 @@ export interface Locale extends ILocale { */ "alertDeleteEmojisNothingDescription": string; /** - * 確認 + * ページを移動しますか? */ - "confirmUpdateEmojisTitle": string; + "confirmMovePage": string; + /** + * 表示を変更しますか? + */ + "confirmChangeView": string; /** * {count}個の絵文字を更新します。実行しますか? */ "confirmUpdateEmojisDescription": ParameterizedString<"count">; - /** - * 確認 - */ - "confirmDeleteEmojisTitle": string; /** * チェックがつけられた{count}個の絵文字を削除します。実行しますか? */ "confirmDeleteEmojisDescription": ParameterizedString<"count">; + /** + * 今までに加えた変更がすべてリセットされます。 + */ + "confirmResetDescription": string; + /** + * このページの絵文字に変更が加えられています。 + * 保存せずにこのままページを移動すると、このページで加えた変更はすべて破棄されます。 + */ + "confirmMovePageDesciption": string; /** * 絵文字に設定されたロールで検索 */ @@ -10744,26 +10753,14 @@ export interface Locale extends ILocale { * このリンクをクリックしてドライブから選択する */ "emojiInputAreaList3": string; - /** - * 確認 - */ - "confirmRegisterEmojisTitle": string; /** * リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです) */ "confirmRegisterEmojisDescription": ParameterizedString<"count">; - /** - * 確認 - */ - "confirmClearEmojisTitle": string; /** * 編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか? */ "confirmClearEmojisDescription": string; - /** - * 確認 - */ - "confirmUploadEmojisTitle": string; /** * ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか? */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 42c25a58a6..a578704434 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2824,13 +2824,13 @@ _customEmojisManager: copySelectionRows: "選択行をコピー" copySelectionRanges: "選択範囲をコピー" deleteSelectionRows: "選択行を削除" - deleteSelectionRanges: "選択範囲の行を削除" + deleteSelectionRanges: "選択範囲の値をクリア" searchSettings: "検索設定" searchSettingCaption: "検索条件を詳細に設定します。" + searchLimit: "表示件数" sortOrder: "並び順" registrationLogs: "登録ログ" registrationLogsCaption: "絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。" - alertEmojisRegisterFailedTitle: "エラー" alertEmojisRegisterFailedDescription: "絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。" _logs: showSuccessLogSwitch: "成功ログを表示" @@ -2852,10 +2852,12 @@ _customEmojisManager: markAsDeleteTargetRanges: "選択範囲の行を削除対象にする" alertUpdateEmojisNothingDescription: "変更された絵文字はありません。" alertDeleteEmojisNothingDescription: "削除対象の絵文字はありません。" - confirmUpdateEmojisTitle: "確認" + confirmMovePage: "ページを移動しますか?" + confirmChangeView: "表示を変更しますか?" confirmUpdateEmojisDescription: "{count}個の絵文字を更新します。実行しますか?" - confirmDeleteEmojisTitle: "確認" confirmDeleteEmojisDescription: "チェックがつけられた{count}個の絵文字を削除します。実行しますか?" + confirmResetDescription: "今までに加えた変更がすべてリセットされます。" + confirmMovePageDesciption: "このページの絵文字に変更が加えられています。\n保存せずにこのままページを移動すると、このページで加えた変更はすべて破棄されます。" dialogSelectRoleTitle: "絵文字に設定されたロールで検索" _register: uploadSettingTitle: "アップロード設定" @@ -2866,11 +2868,8 @@ _customEmojisManager: emojiInputAreaList1: "この枠に画像ファイルまたはディレクトリをドラッグ&ドロップ" emojiInputAreaList2: "このリンクをクリックしてPCから選択する" emojiInputAreaList3: "このリンクをクリックしてドライブから選択する" - confirmRegisterEmojisTitle: "確認" confirmRegisterEmojisDescription: "リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)" - confirmClearEmojisTitle: "確認" confirmClearEmojisDescription: "編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?" - confirmUploadEmojisTitle: "確認" confirmUploadEmojisDescription: "ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?" _embedCodeGen: diff --git a/packages/frontend/src/components/MkSortOrderEditor.vue b/packages/frontend/src/components/MkSortOrderEditor.vue index da08f12297..9decacc5f5 100644 --- a/packages/frontend/src/components/MkSortOrderEditor.vue +++ b/packages/frontend/src/components/MkSortOrderEditor.vue @@ -12,12 +12,13 @@ SPDX-License-Identifier: AGPL-3.0-only :iconClass="order.direction === '+' ? 'ti ti-arrow-up' : 'ti ti-arrow-down'" :exButtonIconClass="'ti ti-x'" :content="order.key" + :class="$style.sortOrderTag" @click="onToggleSortOrderButtonClicked(order)" @exButtonClick="onRemoveSortOrderButtonClicked(order)" /> - + @@ -109,4 +110,9 @@ function emitOrder(sortOrders: SortOrder[]) { border-radius: 9999px; background-color: var(--MI_THEME-buttonBg); } + +.sortOrderTag { + user-select: none; + cursor: pointer; +} diff --git a/packages/frontend/src/components/MkSuperMenu.vue b/packages/frontend/src/components/MkSuperMenu.vue index 0caaed6f39..fa0e40d8f9 100644 --- a/packages/frontend/src/components/MkSuperMenu.vue +++ b/packages/frontend/src/components/MkSuperMenu.vue @@ -47,7 +47,7 @@ export type SuperMenuDef = { active?: boolean; action: (ev: MouseEvent) => void; } | { - type: 'link'; + type?: 'link'; to: string; icon?: string; text: string; diff --git a/packages/frontend/src/components/MkTagItem.vue b/packages/frontend/src/components/MkTagItem.vue index 98f2411392..8b7460f3a3 100644 --- a/packages/frontend/src/components/MkTagItem.vue +++ b/packages/frontend/src/components/MkTagItem.vue @@ -5,10 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue index aa4be69b2c..a2e70a5cad 100644 --- a/packages/frontend/src/components/global/MkPageHeader.vue +++ b/packages/frontend/src/components/global/MkPageHeader.vue @@ -48,13 +48,16 @@ import { scrollToTop } from '@@/js/scroll.js'; import { globalEvents } from '@/events.js'; import { injectReactiveMetadata } from '@/scripts/page-metadata.js'; import { $i, openAccountMenu as openAccountMenu_ } from '@/account.js'; -import { PageHeaderItem } from '@/types/page-header.js'; +import type { PageHeaderItem } from '@/types/page-header.js'; +import type { PageMetadata } from '@/scripts/page-metadata.js'; const props = withDefaults(defineProps<{ + overridePageMetadata?: PageMetadata; tabs?: Tab[]; tab?: string; actions?: PageHeaderItem[] | null; thin?: boolean; + hideTitle?: boolean; displayMyAvatar?: boolean; }>(), { tabs: () => ([] as Tab[]), @@ -64,9 +67,10 @@ const emit = defineEmits<{ (ev: 'update:tab', key: string); }>(); -const pageMetadata = injectReactiveMetadata(); +const injectedPageMetadata = injectReactiveMetadata(); +const pageMetadata = computed(() => props.overridePageMetadata ?? injectedPageMetadata.value); -const hideTitle = inject('shouldOmitHeaderTitle', false); +const hideTitle = computed(() => inject('shouldOmitHeaderTitle', false) || props.hideTitle); const thin_ = props.thin || inject('shouldHeaderThin', false); const el = shallowRef(undefined); @@ -75,7 +79,7 @@ const narrow = ref(false); const hasTabs = computed(() => props.tabs.length > 0); const hasActions = computed(() => props.actions && props.actions.length > 0); const show = computed(() => { - return !hideTitle || hasTabs.value || hasActions.value; + return !hideTitle.value || hasTabs.value || hasActions.value; }); const preventDrag = (ev: TouchEvent) => { diff --git a/packages/frontend/src/components/grid/MkDataCell.vue b/packages/frontend/src/components/grid/MkDataCell.vue index 0ffd42abda..e473b7c1af 100644 --- a/packages/frontend/src/components/grid/MkDataCell.vue +++ b/packages/frontend/src/components/grid/MkDataCell.vue @@ -39,13 +39,15 @@ SPDX-License-Identifier: AGPL-3.0-only {{ cell.value }}
- - +
@@ -375,6 +377,31 @@ $cellHeight: 28px; object-fit: cover; } +.bool { + position: relative; + width: 18px; + height: 18px; + background: var(--MI_THEME-panel); + border: solid 2px var(--MI_THEME-divider); + border-radius: 4px; + box-sizing: border-box; + + &.boolTrue { + border-color: var(--MI_THEME-accent); + background: var(--MI_THEME-accent); + + &::before { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: var(--MI_THEME-fgOnAccent); + font-size: 12px; + line-height: 18px; + } + } +} + .editingInput { padding: 0 8px; width: 100%; diff --git a/packages/frontend/src/components/grid/MkGrid.vue b/packages/frontend/src/components/grid/MkGrid.vue index 60738365fb..4dbd4ebcae 100644 --- a/packages/frontend/src/components/grid/MkGrid.vue +++ b/packages/frontend/src/components/grid/MkGrid.vue @@ -7,7 +7,11 @@ SPDX-License-Identifier: AGPL-3.0-only
(); const props = defineProps<{ - settings: GridSetting, - data: DataSource[] + settings: GridSetting; + data: DataSource[]; }>(); +const rootSetting: Required = { + noOverflowStyle: false, + rounded: true, + outerBorder: true, + ...props.settings.root, +}; + // non-reactive // eslint-disable-next-line vue/no-setup-props-reactivity-loss const rowSetting: Required = { @@ -1277,32 +1288,48 @@ onMounted(() => { overflow-x: scroll; // firefoxだとスクロールバーがセルに重なって見づらくなってしまうのでスペースを空けておく padding-bottom: 8px; + + &.noOverflowHandling { + overflow-x: revert; + padding-bottom: 0; + } } diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue index 55f9632ce4..c4ea3b93e3 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue @@ -5,137 +5,11 @@ SPDX-License-Identifier: AGPL-3.0-only + + +const headerTabs = computed(() => [{ + key: 'list', + title: i18n.ts._customEmojisManager._local.tabTitleList, +}, { + key: 'register', + title: i18n.ts._customEmojisManager._local.tabTitleRegister, +}]); + diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.logs-folder.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.logs.vue similarity index 62% rename from packages/frontend/src/pages/admin/custom-emojis-manager.logs-folder.vue rename to packages/frontend/src/pages/admin/custom-emojis-manager.logs.vue index f75f6c0da5..eef55a9f7e 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.logs-folder.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.logs.vue @@ -4,47 +4,38 @@ SPDX-License-Identifier: AGPL-3.0-only --> - - diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue index 14a3b71e53..eecf8d7390 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue @@ -64,6 +64,8 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+ @@ -74,6 +76,14 @@ SPDX-License-Identifier: AGPL-3.0-only /> + + + +
{{ i18n.ts.search }} @@ -85,7 +95,14 @@ SPDX-License-Identifier: AGPL-3.0-only
- + + + + + +