From 9c985fedfa08e7746028a16ec33f462561936df5 Mon Sep 17 00:00:00 2001 From: Freddie Date: Thu, 12 Mar 2026 16:57:39 -0700 Subject: [PATCH 1/8] Use short numbers for chore values --- .../components/home/table/row/HomeTableRowTaskChore.svelte | 6 +++++- apps/frontend/utils/formatting/to-nice-number.ts | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/frontend/components/home/table/row/HomeTableRowTaskChore.svelte b/apps/frontend/components/home/table/row/HomeTableRowTaskChore.svelte index 5d082cc5f..d665d2222 100644 --- a/apps/frontend/components/home/table/row/HomeTableRowTaskChore.svelte +++ b/apps/frontend/components/home/table/row/HomeTableRowTaskChore.svelte @@ -2,6 +2,7 @@ import { QuestStatus } from '@/enums/quest-status'; import { uiIcons } from '@/shared/icons'; import { userState } from '@/user-home/state/user'; + import { toNiceNumber } from '@/utils/formatting/to-nice-number'; import type { CharacterProps } from '@/types/props'; import IconifyIcon from '@/shared/components/images/IconifyIcon.svelte'; @@ -42,7 +43,10 @@ --> {:else if charChore?.status === QuestStatus.InProgress} - {charChore.progressCurrent} / {charChore.progressTotal} + {toNiceNumber(charChore.progressCurrent, 0)} / {toNiceNumber( + charChore.progressTotal, + 0 + )} {:else if charChore?.status === QuestStatus.NotStarted} diff --git a/apps/frontend/utils/formatting/to-nice-number.ts b/apps/frontend/utils/formatting/to-nice-number.ts index 52700cc3a..796a638e9 100644 --- a/apps/frontend/utils/formatting/to-nice-number.ts +++ b/apps/frontend/utils/formatting/to-nice-number.ts @@ -1,12 +1,12 @@ -export function toNiceNumber(n: number): string { +export function toNiceNumber(n: number, decimals: number = 1): string { if (n >= 1000000 || n <= -100000) { // 2597600 -> 25.976 (divide by 100000) -> 25 (floor) -> 2.5 (divide by 10) -> 2.5m - return `${(Math.floor(n / 100000) / 10).toFixed(1).toLocaleString()}m`; + return `${(Math.floor(n / 100000) / 10).toFixed(decimals).toLocaleString()}m`; } else if (n >= 100000 || n <= -100000) { return `${Math.floor(n / 1000).toLocaleString()}k`; } else if (n >= 1000 || n <= -1000) { // 25976 -> 259.76 (divide by 100) -> 259 (floor) -> 25.9 (divide by 10) -> 25.9k - return `${(Math.floor(n / 100) / 10).toFixed(1).toLocaleString()}k`; + return `${(Math.floor(n / 100) / 10).toFixed(decimals).toLocaleString()}k`; } else { return n.toString(); } From e17be6967f4a17ba7b41596d315d71e13b47b357 Mon Sep 17 00:00:00 2001 From: Freddie Date: Thu, 12 Mar 2026 16:57:51 -0700 Subject: [PATCH 2/8] Ignore a bunch of unimplemented Midnight crafting spells --- apps/tool/Data/IgnoredSkillLineAbilities.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/apps/tool/Data/IgnoredSkillLineAbilities.cs b/apps/tool/Data/IgnoredSkillLineAbilities.cs index 9f994cf3c..9ac256b5b 100644 --- a/apps/tool/Data/IgnoredSkillLineAbilities.cs +++ b/apps/tool/Data/IgnoredSkillLineAbilities.cs @@ -40,6 +40,15 @@ public static partial class Hardcoded 433607, // TWW ?? 433608, // TWW ?? 430610, // TWW ?? + 1230772, // Mid ?? + 1230871, // Mid ?? + 1230879, // Mid ?? + 1230880, // Mid ?? + 1230881, // Mid ?? + 1230882, // Mid ?? + 1230884, // Mid ?? + 1233131, // Mid ?? + 1233139, // Mid ?? // Blacksmithing 2671, // Rough Bronze Bracers @@ -197,6 +206,10 @@ public static partial class Hardcoded 178242, // Gearspring Parts (dupe for max results?) 407170, // Inspired Order Recalibrator (temporary legendary craft) 473408, // Housing Crafting Test Recipe + 1229918, // Mid ?? + 1229925, // Mid ?? + 1229929, // Mid ?? + 1261938, // Mid ?? // Inscription 130407, // MoP Mystery of the Mists @@ -204,6 +217,7 @@ public static partial class Hardcoded 178550, // WoD Borrow Draenic Mortar 343687, // Shadowlands ?? 422337, // Lydaria's Binding Rune (temporary legendary craft) + 1230063, // Mid ?? // Jewelcrafting 25614, // Silver Rose Pendant @@ -246,6 +260,11 @@ public static partial class Hardcoded 176314, // [A] Fearsome Battle Standard (garrison building craft) 176315, // [H] Inspiring Battle Standard (garrison building craft) 176316, // [H] Fearsome Battle Standard (garrison building craft) + 1228435, // Mid ?? + 1228998, // Mid ?? + 1228999, // Mid ?? + 1230770, // Mid ?? + 1279126, // Mid ?? // Tailoring ranks? 3908, From da87cb92753afa20ed6f56f0582caa90fedc3eef Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 13 Mar 2026 17:58:20 -0700 Subject: [PATCH 3/8] Move gathering professions to the end of crafting catchup currencies --- apps/frontend/data/currencies.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/frontend/data/currencies.ts b/apps/frontend/data/currencies.ts index 6991272ae..6a1ab7e4a 100644 --- a/apps/frontend/data/currencies.ts +++ b/apps/frontend/data/currencies.ts @@ -181,13 +181,13 @@ export const currencyExtra: Record = { 3199, // Blacksmithing 3198, // Enchanting 3197, // Engineering - 3196, // Herbalism 3195, // Inscription 3194, // Jewelcrafting 3193, // Leatherworking + 3190, // Tailoring + 3196, // Herbalism 3192, // Mining 3191, // Skinning - 3190, // Tailoring ], // Midnight - Season 1 126411: [ From 1aec0728040e41c9a3d2d927095ec9132d1cdaf7 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 13 Mar 2026 17:58:33 -0700 Subject: [PATCH 4/8] Add fused vitality to midnight currencies --- apps/frontend/data/currencies.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/frontend/data/currencies.ts b/apps/frontend/data/currencies.ts index 6a1ab7e4a..f009ab80b 100644 --- a/apps/frontend/data/currencies.ts +++ b/apps/frontend/data/currencies.ts @@ -455,8 +455,11 @@ export const currencyItems: Record = { 264: [ 264882, // Finery Funds 255826, // Mysterious Skyshards + 245345, // Fused Vitality + null, 242241, // Latent Arcana 246951, // Stormarion Core + null, 262636, // Anguish-Scribed Rune [hunts, uncommon] 262637, // Anguish-Infused Rune [hunts, rare] 262638, // Anguish-Permeated Rune [hunts, epic] From c295d98a77a43b49282b5c95cdc9688a4cab17e5 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 13 Mar 2026 17:59:14 -0700 Subject: [PATCH 5/8] Add "Unknown recipes" filter to patron orders --- .../professions/patron-orders/Order.svelte | 2 +- .../professions/patron-orders/Sidebar.svelte | 13 +++++- .../professions/patron-orders/Table.svelte | 40 +++++++++---------- .../patron-orders/TableCell.svelte | 13 +++++- apps/frontend/shared/state/browser.svelte.ts | 6 +++ 5 files changed, 50 insertions(+), 24 deletions(-) diff --git a/apps/frontend/components/professions/patron-orders/Order.svelte b/apps/frontend/components/professions/patron-orders/Order.svelte index 6b61e74eb..0bb65b93d 100644 --- a/apps/frontend/components/professions/patron-orders/Order.svelte +++ b/apps/frontend/components/professions/patron-orders/Order.svelte @@ -73,7 +73,7 @@ .flex-wrapper { --image-margin-top: -4px; - align-items: stretch; + align-items: center; justify-content: start; &:not(:last-child) { diff --git a/apps/frontend/components/professions/patron-orders/Sidebar.svelte b/apps/frontend/components/professions/patron-orders/Sidebar.svelte index ee7b509da..44fd20797 100644 --- a/apps/frontend/components/professions/patron-orders/Sidebar.svelte +++ b/apps/frontend/components/professions/patron-orders/Sidebar.svelte @@ -3,6 +3,8 @@ import type { StaticDataProfession } from '@/shared/stores/static/types'; import Sidebar from '@/shared/components/sub-sidebar/SubSidebar.svelte'; + import CheckboxInput from '@/shared/components/forms/CheckboxInput.svelte'; + import { browserState } from '@/shared/state/browser.svelte'; let { sortedProfessions }: { sortedProfessions: StaticDataProfession[] } = $props(); @@ -23,4 +25,13 @@ ] as SidebarItem[]); - + + + + Unknown recipes + + + diff --git a/apps/frontend/components/professions/patron-orders/Table.svelte b/apps/frontend/components/professions/patron-orders/Table.svelte index 0b85eb4a8..5a4125a57 100644 --- a/apps/frontend/components/professions/patron-orders/Table.svelte +++ b/apps/frontend/components/professions/patron-orders/Table.svelte @@ -10,25 +10,25 @@ import TableCell from './TableCell.svelte'; import WowthingImage from '@/shared/components/images/sources/WowthingImage.svelte'; - export let commodities: CommodityData; - export let profession: StaticDataProfession; - export let slug: string = undefined; + type Props = { + commodities: CommodityData; + profession?: StaticDataProfession; + slug?: string; + }; + let { commodities, profession, slug }: Props = $props(); - let filterFunc: (char: Character) => boolean; - $: { - if (profession) { - filterFunc = (char) => - profession && - !!char.professions?.[profession.id] && - char.patronOrders?.[profession.id] !== undefined && - (slug !== 'collectors' || - settingsState.value.professions.collectingCharactersV2[profession.id]?.includes( - char.id - )); - } else { - filterFunc = () => false; - } - } + let filterFunc: (char: Character) => boolean = $derived.by(() => + profession + ? (char) => + profession && + !!char.professions?.[profession.id] && + char.patronOrders?.[profession.id] !== undefined && + (slug !== 'collectors' || + settingsState.value.professions.collectingCharactersV2[ + profession.id + ]?.includes(char.id)) + : () => false + ); diff --git a/apps/frontend/shared/state/browser.svelte.ts b/apps/frontend/shared/state/browser.svelte.ts index 6c1be03d0..d39ccf57c 100644 --- a/apps/frontend/shared/state/browser.svelte.ts +++ b/apps/frontend/shared/state/browser.svelte.ts @@ -110,6 +110,9 @@ interface BrowserStateIdk { xAxis: string[]; yAxis: string[]; }; + professions: { + patronOrdersUnknown: boolean; + }; reputations: { sortOrder: Record; }; @@ -263,6 +266,9 @@ const initialState: BrowserStateIdk = { xAxis: [], yAxis: [], }, + professions: { + patronOrdersUnknown: true, + }, reputations: { sortOrder: {}, }, From d18ce91b660a1622f19d70a97f36c3b4b3d0488a Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 13 Mar 2026 18:00:44 -0700 Subject: [PATCH 6/8] Reduce brightness of world quest rings --- .../user-home/components/world-quests/WorldQuest.svelte | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/frontend/user-home/components/world-quests/WorldQuest.svelte b/apps/frontend/user-home/components/world-quests/WorldQuest.svelte index 9bd694861..bfb9bb2d9 100644 --- a/apps/frontend/user-home/components/world-quests/WorldQuest.svelte +++ b/apps/frontend/user-home/components/world-quests/WorldQuest.svelte @@ -89,6 +89,9 @@ position: relative; width: 50px; + svg { + filter: brightness(0.75); + } :global(img) { border-radius: 50%; position: absolute; From 63bc4b9624c01b6d88515398d9abaeb523bba9d0 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 13 Mar 2026 18:14:45 -0700 Subject: [PATCH 7/8] Show fishing if useful in professions>recipes --- .../professions/recipes/Sidebar.svelte | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/apps/frontend/components/professions/recipes/Sidebar.svelte b/apps/frontend/components/professions/recipes/Sidebar.svelte index 66f424ba1..9ec5546e6 100644 --- a/apps/frontend/components/professions/recipes/Sidebar.svelte +++ b/apps/frontend/components/professions/recipes/Sidebar.svelte @@ -1,56 +1,63 @@ Date: Fri, 13 Mar 2026 18:16:29 -0700 Subject: [PATCH 8/8] Don't show hidden/ignored chars in progress --- .../components/progress/ProgressTable.svelte | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps/frontend/components/progress/ProgressTable.svelte b/apps/frontend/components/progress/ProgressTable.svelte index ccbc873b1..19bc14801 100644 --- a/apps/frontend/components/progress/ProgressTable.svelte +++ b/apps/frontend/components/progress/ProgressTable.svelte @@ -45,6 +45,10 @@ ); let filterFunc = $derived((char: Character) => { + if (char.hidden || char.ignored) { + return false; + } + if (minimumLevel > 0 && char.level < minimumLevel) { return false; } @@ -86,6 +90,17 @@ ); } + if (categories[0]?.groups[0]?.lookup === 'class') { + const charClass = wowthingData.static.characterClassById.get(char.classId); + return categories + .filter((cat) => !!cat) + .some((cat) => + cat.groups + .filter((group) => !!group) + .some((group) => Object.keys(group.data).includes(charClass.slug)) + ); + } + return true; });