diff --git a/IWantToHeal-Thor-v1.0.30.apk b/IWantToHeal-Thor-v1.0.30.apk new file mode 100644 index 0000000..6800a10 Binary files /dev/null and b/IWantToHeal-Thor-v1.0.30.apk differ diff --git a/android/app/build.gradle b/android/app/build.gradle index 3fbc1d6..641fbc5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.warren.iwanttoheal" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 47 - versionName "1.0.29" + versionCode 48 + versionName "1.0.30" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/src/App.css b/src/App.css index e3c08fe..a0fd585 100644 --- a/src/App.css +++ b/src/App.css @@ -4395,6 +4395,10 @@ h2 { outline-color: var(--gold); } +.customize-tab-back { + display: none; +} + .embedded-screen .gear-summary, .embedded-screen .talent-toolbar { margin-top: 16px; @@ -6974,6 +6978,10 @@ h2 { padding: 6px; } + .workshop-shell .customize-heading { + display: none; + } + .workshop-shell .screen-heading { padding-bottom: 3px; } @@ -6995,6 +7003,10 @@ h2 { padding: 5px 8px; } + .workshop-shell .customize-tab-back { + display: block; + } + .workshop-shell .customize-tabs, .workshop-shell .equipment-tabs, .workshop-shell .talent-page-tabs { @@ -7011,7 +7023,8 @@ h2 { } .workshop-shell .customize-tabs { - grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-template-columns: 70px repeat(4, minmax(0, 1fr)); + margin-top: 0; } .workshop-shell .equipment-screen, @@ -7256,20 +7269,20 @@ h2 { } .workshop-shell .crafting-filter-grid { - grid-template-columns: repeat(11, minmax(0, 1fr)); + grid-template-columns: repeat(10, minmax(0, 1fr)); } .workshop-shell .crafting-filter-grid button { - min-height: 28px; - padding: 3px 1px; + min-height: 32px; + padding: 4px 2px; } .workshop-shell .crafting-filter-grid strong { - font-size: 4px; + font-size: 5px; } .workshop-shell .crafting-filter-grid span { - font-size: 8px; + font-size: 10px; } .workshop-shell .crafting-level-row button { @@ -7444,7 +7457,7 @@ h2 { } .workshop-shell .crafting-list > button { - min-height: 52px; + min-height: 68px; } .workshop-shell .crafting-action-row { @@ -7639,20 +7652,20 @@ h2 { } .workshop-shell .crafting-filter-grid { - grid-template-columns: repeat(11, minmax(0, 1fr)); + grid-template-columns: repeat(10, minmax(0, 1fr)); } .workshop-shell .crafting-filter-grid button { - min-height: 30px; - padding: 3px 1px; + min-height: 34px; + padding: 4px 2px; } .workshop-shell .crafting-filter-grid strong { - font-size: 4px; + font-size: 5px; } .workshop-shell .crafting-filter-grid span { - font-size: 8px; + font-size: 10px; } .workshop-shell .crafting-level-row { @@ -7661,11 +7674,7 @@ h2 { .workshop-shell .crafting-list > button { display: grid; - min-height: 43px; - } - - .workshop-shell .crafting-list > button:nth-child(n+4) { - display: grid; + min-height: 68px; } .workshop-shell .customize-layout { diff --git a/src/components/CustomizeScreen.tsx b/src/components/CustomizeScreen.tsx index a80df03..3b82472 100644 --- a/src/components/CustomizeScreen.tsx +++ b/src/components/CustomizeScreen.tsx @@ -105,7 +105,7 @@ export function CustomizeScreen({ profile, onBack, onSaved }: Props) { return (
-
+

Character Workshop

Customize Character

@@ -114,6 +114,7 @@ export function CustomizeScreen({ profile, onBack, onSaved }: Props) {
+ {([ { key: 'equipment', label: 'Equipment' }, { key: 'crafting', label: 'Crafting' }, diff --git a/src/components/EquipmentScreen.tsx b/src/components/EquipmentScreen.tsx index 3b3312e..d91790e 100644 --- a/src/components/EquipmentScreen.tsx +++ b/src/components/EquipmentScreen.tsx @@ -25,7 +25,9 @@ const SLOT_LABELS: Record = { } const EQUIPMENT_LIST_PAGE_SIZE = 3 -const CRAFTING_LIST_PAGE_SIZE = 4 +const CRAFTING_LIST_PAGE_SIZE = 3 +const CRAFTING_FILTER_SLOTS = (Object.keys(SLOT_LABELS) as EquipmentSlot[]) + .filter((slot) => slot !== 'component') type Props = { profile: CharacterProfile @@ -377,9 +379,25 @@ export function EquipmentScreen({ title: selectedItem.equipped ? 'Already Equipped' : 'Empty Slot', status: 'Comparison', }]), + ...(upgradeRecipe + ? [ + { + glyph: upgradeRecipe.item.glyph, + title: `Upgrade to ${upgradeRecipe.item.name}`, + meta: `Item Level ${upgradeRecipe.item.itemLevel}`, + status: upgradeRecipe.canCraft ? 'Ready' : 'Missing materials', + }, + ...upgradeRecipe.components.map((component) => ({ + glyph: component.item.glyph, + title: component.item.name, + meta: `Required for upgrade`, + status: `${component.owned}/${component.quantity}`, + })), + ] + : []), ], } - }, [comparisonItem, equipmentTab, selectedItem, selectedRecipe]) + }, [comparisonItem, equipmentTab, selectedItem, selectedRecipe, upgradeRecipe]) useDualScreenWorkshopPublisher(workshopState, dualScreenEnabled) @@ -573,7 +591,7 @@ export function EquipmentScreen({ All {profile.craftingRecipes.length} - {(Object.entries(SLOT_LABELS) as [EquipmentSlot, string][]).map(([slot, label]) => ( + {CRAFTING_FILTER_SLOTS.map((slot) => ( ))}