From 8548135c0259b0e64441303bac0bd7a8967aa6f0 Mon Sep 17 00:00:00 2001 From: "[IKcoding-jp]" <[kensaku.ikeda04@gmail.com]> Date: Mon, 3 Aug 2026 11:44:40 +0900 Subject: [PATCH 1/2] =?UTF-8?q?style:=20Tailwind=20v4=20=E3=81=AE=E6=AD=A3?= =?UTF-8?q?=E8=A6=8F=E8=A8=98=E6=B3=95=E3=81=B8=E3=82=AF=E3=83=A9=E3=82=B9?= =?UTF-8?q?=E5=90=8D=E3=82=92=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IDE の tailwindcss 拡張が示す suggestCanonicalClasses を全ファイルへ適用した。 生成される CSS は等価で、動作・見た目は変わらない。 - important の位置を v4 形式へ(!px-3 → px-3!) - 任意値を標準スケールへ(min-h-[44px] → min-h-11・h-[2px] → h-0.5 など) - v4 でのリネームに追従(flex-shrink-0 → shrink-0・bg-gradient-to-br → bg-linear-to-br) 検証: 変換前後でビルドし、生成 CSS の宣言集合が一致することを確認した。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WWxo2ZpLgqp8pd54g9qF1f --- .../components/AssignmentSettingsModal.tsx | 6 ++--- .../assignment-table/DesktopTableBody.tsx | 6 ++--- .../assignment-table/DesktopTableFooter.tsx | 8 +++--- .../assignment-table/DesktopTableHeader.tsx | 6 ++--- .../assignment-table/MobileListView.tsx | 16 ++++++------ .../modals/ContextMenuModal.tsx | 2 +- .../modals/HeightSettingsModal.tsx | 2 +- .../modals/MemberSelectionModal.tsx | 4 +-- .../modals/TeamActionModal.tsx | 2 +- app/assignment/page.tsx | 6 ++--- app/clock/page.tsx | 2 +- app/contact/page.tsx | 2 +- app/defect-beans/page.tsx | 6 ++--- app/drip-guide/page.tsx | 2 +- app/error.tsx | 2 +- app/inventory/page.tsx | 2 +- app/page.tsx | 4 +-- app/schedule/page.tsx | 24 ++++++++--------- app/tasting/page.tsx | 2 +- components/DefectBeanCard.tsx | 26 +++++++++---------- components/DefectBeanDetail.tsx | 6 ++--- components/Loading.tsx | 2 +- components/OCRRoastScheduleEditor.tsx | 12 ++++----- components/RoastScheduleMemoDialog.tsx | 2 +- components/RoastSchedulerTab.tsx | 4 +-- components/TastingSessionCardDesktop.tsx | 14 +++++----- components/TastingSessionCardMobile.tsx | 14 +++++----- components/TastingSessionCarousel.tsx | 6 ++--- components/TastingSessionFilterModal.test.tsx | 10 +++---- components/TastingSessionFilterModal.tsx | 10 +++---- components/TastingSessionList.tsx | 6 ++--- components/Toast.tsx | 4 +-- components/TodaySchedule.tsx | 6 ++--- components/camera-capture/CameraCapture.tsx | 2 +- components/camera-capture/CameraPreview.tsx | 2 +- components/clock/ClockHeaderNav.tsx | 2 +- components/clock/ClockSettingsModal.tsx | 26 +++++++++---------- components/clock/NextChimeStrip.tsx | 2 +- components/clock/WorkChimeAlert.tsx | 2 +- components/clock/WorkChimeScheduleModal.tsx | 12 ++++----- components/date-picker/Calendar.tsx | 2 +- components/date-picker/DatePickerModal.tsx | 2 +- .../defect-bean-form/DefectBeanFormFields.tsx | 4 +-- components/defect-beans/FilterMenu.tsx | 2 +- components/drip-guide/RecipeList.tsx | 4 +-- components/drip-guide/Start46Dialog.tsx | 4 +-- components/drip-guide/StartHintDialog.tsx | 4 +-- components/drip-guide/StepEditor.tsx | 2 +- .../dialogs/46/Dialog46DescriptionModal.tsx | 2 +- .../drip-guide/dialogs/46/Dialog46Form.tsx | 6 ++--- .../dialogs/shared/RecipeStepTable.tsx | 2 +- .../drip-guide/runner/CompletionScreen.tsx | 4 +-- .../drip-guide/runner/FooterControls.tsx | 10 +++---- components/home/ActionCard.tsx | 2 +- components/inventory/InventoryItemModal.tsx | 2 +- components/inventory/InventoryItemRow.tsx | 4 +-- components/ocr-confirm/OCRConfirmModal.tsx | 20 +++++++------- .../OCRTimeLabelEditor.tsx | 7 +---- .../ocr-time-label-editor/TimeLabelRow.tsx | 16 ++++++------ .../production-record/MonthMenuModal.tsx | 2 +- .../production-record/MonthSettingsModal.tsx | 4 +-- .../ProductionRecordHeader.tsx | 4 +-- components/roast-scheduler/ScheduleCard.tsx | 14 +++++----- components/schedule/EmptyScheduleState.tsx | 2 +- components/settings/ThemeSelector.tsx | 8 +++--- components/today-schedule/TimeEditDialog.tsx | 4 +-- components/today-schedule/TimeInputRow.tsx | 6 ++--- components/ui/Button.tsx | 3 +-- components/ui/FilterModal.tsx | 10 +++---- components/ui/Input.tsx | 2 +- components/ui/NumberInput.tsx | 2 +- components/ui/Select.tsx | 2 +- 72 files changed, 215 insertions(+), 221 deletions(-) diff --git a/app/assignment/components/AssignmentSettingsModal.tsx b/app/assignment/components/AssignmentSettingsModal.tsx index b5a5e440..03a9a014 100644 --- a/app/assignment/components/AssignmentSettingsModal.tsx +++ b/app/assignment/components/AssignmentSettingsModal.tsx @@ -196,7 +196,7 @@ export function AssignmentSettingsModal({ options={memberOptions} placeholder="選択..." disabled={isLoading} - className="!text-sm !py-2" + className="text-sm! py-2!" /> setEditRightLabel(e.target.value)} placeholder={headerLabels.right} - className="flex-1 !p-2 !text-sm !min-h-0" + className="flex-1 !p-2 text-sm! min-h-0!" /> @@ -89,7 +89,7 @@ export const MobileListView: React.FC = ({ variant="danger" size="sm" onClick={() => handleDeleteTaskLabel(label.id)} - className="!p-2 !min-h-0 shrink-0" + className="!p-2 min-h-0! shrink-0" > @@ -144,15 +144,15 @@ export const MobileListView: React.FC = ({ onTouchEnd={handleCellTouchEnd} onTouchMove={handleCellTouchMove} onClick={() => handleCellClick(team.id, label.id)} - className={`!min-h-0 !rounded-md !px-2 !py-3 !shadow-none truncate select-none ${ + className={`min-h-0! rounded-md! !px-2 py-3! !shadow-none truncate select-none ${ member && isSelected ? '!border-spot !bg-spot !text-on-spot ring-2 ring-spot/20' : member - ? '!border-edge !bg-surface hover:!bg-spot-surface' + ? 'border-edge! bg-surface! hover:!bg-spot-surface' : '' } ${ - !member && isSelected ? '!bg-surface !border-spot' : '' - } ${!member && !isSelected ? '!border-dashed !border-edge-strong !bg-surface !text-ink-muted' : ''}`} + !member && isSelected ? 'bg-surface! !border-spot' : '' + } ${!member && !isSelected ? '!border-dashed border-edge-strong! bg-surface! !text-ink-muted' : ''}`} > {member ? member.name : '未割当'} diff --git a/app/assignment/components/assignment-table/modals/ContextMenuModal.tsx b/app/assignment/components/assignment-table/modals/ContextMenuModal.tsx index fc78f351..af69fae9 100644 --- a/app/assignment/components/assignment-table/modals/ContextMenuModal.tsx +++ b/app/assignment/components/assignment-table/modals/ContextMenuModal.tsx @@ -67,7 +67,7 @@ export function ContextMenuModal({ data, state, setMemberMenu, callbacks }: Cont setCurrent(null); } }} - className="!py-2" + className="py-2!" /> 削除 diff --git a/app/assignment/components/assignment-table/modals/MemberSelectionModal.tsx b/app/assignment/components/assignment-table/modals/MemberSelectionModal.tsx index e5527155..dc01bd84 100644 --- a/app/assignment/components/assignment-table/modals/MemberSelectionModal.tsx +++ b/app/assignment/components/assignment-table/modals/MemberSelectionModal.tsx @@ -45,7 +45,7 @@ export function MemberSelectionModal({ data, state, callbacks }: MemberSelection handleAddMember(current.taskLabelId, current.teamId); } }} - className="!py-2 !text-sm" + className="py-2! text-sm!" autoFocus /> @@ -71,7 +71,7 @@ export function MemberSelectionModal({ data, state, callbacks }: MemberSelection callbacks.onUpdateMember(createEmptyAssignment(current.teamId, current.taskLabelId), member.id); setCurrent(null); }} - className="flex-1 !justify-start !text-left !text-ink hover:!bg-ground" + className="flex-1 !justify-start text-left! !text-ink hover:bg-ground!" > {member.name} diff --git a/app/assignment/components/assignment-table/modals/TeamActionModal.tsx b/app/assignment/components/assignment-table/modals/TeamActionModal.tsx index a4f22783..e93ae669 100644 --- a/app/assignment/components/assignment-table/modals/TeamActionModal.tsx +++ b/app/assignment/components/assignment-table/modals/TeamActionModal.tsx @@ -151,7 +151,7 @@ function TeamActionModalContent({ size="sm" fullWidth onClick={handleDeleteTeamFromModal} - className="!flex !items-center !justify-center !gap-1" + className="flex! items-center! !justify-center gap-1!" > 削除 diff --git a/app/assignment/page.tsx b/app/assignment/page.tsx index 8785e1a8..8650938b 100644 --- a/app/assignment/page.tsx +++ b/app/assignment/page.tsx @@ -73,7 +73,7 @@ export default function AssignmentPage() { variant="outline" size="sm" onClick={() => setIsSettingsModalOpen(true)} - className="!rounded-full !px-3 !py-2 shadow-md !bg-surface !text-ink-sub hover:!bg-ground !border !border-edge-strong" + className="rounded-full! px-3! py-2! shadow-md bg-surface! text-ink-sub! hover:bg-ground! border! border-edge-strong!" title="詳細設定" > @@ -114,8 +114,8 @@ export default function AssignmentPage() { variant={data.manager ? 'outline' : 'primary'} size="md" onClick={() => setIsManagerDialogOpen(true)} - className={`!flex !items-center !gap-2 !px-4 !py-3 !rounded-lg shadow-lg ${ - data.manager ? '!bg-surface hover:!bg-ground !border-edge' : '' + className={`flex! items-center! gap-2! px-4! py-3! rounded-lg! shadow-lg ${ + data.manager ? 'bg-surface! hover:bg-ground! border-edge!' : '' }`} > {data.manager ? ( diff --git a/app/clock/page.tsx b/app/clock/page.tsx index a2dfba73..54ee8278 100644 --- a/app/clock/page.tsx +++ b/app/clock/page.tsx @@ -258,7 +258,7 @@ export default function ClockPage() { variant="primary" size="sm" onClick={enableAudio} - className="col-span-2 mt-1 w-full !min-h-11 !px-4 sm:col-span-1 sm:mt-0 sm:w-auto" + className="col-span-2 mt-1 w-full !min-h-11 px-4! sm:col-span-1 sm:mt-0 sm:w-auto" style={{ backgroundColor: colors.accent, color: '#FFFFFF', diff --git a/app/contact/page.tsx b/app/contact/page.tsx index e5496045..65d95ca7 100644 --- a/app/contact/page.tsx +++ b/app/contact/page.tsx @@ -121,7 +121,7 @@ export default function ContactPage() { {/* エラーメッセージ */} {status === 'error' && errorMessage && (
- +

エラーが発生しました

{errorMessage}

diff --git a/app/defect-beans/page.tsx b/app/defect-beans/page.tsx index 01ce03f6..cc30a79a 100644 --- a/app/defect-beans/page.tsx +++ b/app/defect-beans/page.tsx @@ -190,7 +190,7 @@ export default function DefectBeansPage() { size="sm" onClick={toggleCompareMode} title={compareMode ? '選択モード' : '比較モード'} - className="!px-3 !py-2 gap-1.5" + className="px-3! py-2! gap-1.5" > {compareMode ? '選択モード' : '比較'} @@ -201,7 +201,7 @@ export default function DefectBeansPage() { size="sm" onClick={handleShowCompare} title="比較を表示" - className="!px-3 !py-2 gap-1.5" + className="px-3! py-2! gap-1.5" > 比較 ({selectedIds.size}) @@ -212,7 +212,7 @@ export default function DefectBeansPage() { size="sm" onClick={() => setShowAddForm(true)} title="欠点豆を追加" - className="!px-3 !py-2 gap-1.5" + className="px-3! py-2! gap-1.5" > 追加 diff --git a/app/drip-guide/page.tsx b/app/drip-guide/page.tsx index 1bbedcfc..a8426407 100644 --- a/app/drip-guide/page.tsx +++ b/app/drip-guide/page.tsx @@ -21,7 +21,7 @@ export default function DripGuidePage() { right={ 新規レシピ diff --git a/app/error.tsx b/app/error.tsx index c5ee7928..478c1ff0 100644 --- a/app/error.tsx +++ b/app/error.tsx @@ -16,7 +16,7 @@ export default function Error({ reset }: { error: Error & { digest?: string }; r ホームへ diff --git a/app/inventory/page.tsx b/app/inventory/page.tsx index 7075fccb..b789dfe3 100644 --- a/app/inventory/page.tsx +++ b/app/inventory/page.tsx @@ -131,7 +131,7 @@ export default function InventoryPage() { setEditing(null); setModalOpen(true); }} - className="!min-h-0 shrink-0 gap-1.5 !rounded-[10px] !px-4 !py-2 !text-sm" + className="min-h-0! shrink-0 gap-1.5 !rounded-[10px] px-4! py-2! text-sm!" >