v0.1.28 - Version bump and editor/throughput updates

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 22:51:29 +12:00
co-authored by Claude Opus 4.8
parent 3f8279af10
commit 1dd48bc771
10 changed files with 395 additions and 72 deletions
@@ -292,15 +292,14 @@ export const baseSearchItems: SearchItem[] = [
* Callers pass only the modules the current session may see; empty families
* collapse away so a role with one costing tool never gets an empty group.
*
* Workflow-family layout: Dashboard, then an "Operations" group (the calculator,
* costing, editor, master tools, and throughput), then Ordering and Insights
* modules. Costing tools live inside Operations for the time being until they
* grow into a family of their own.
* Workflow-family layout: Dashboard, then an "Operations" group (the mix
* calculator and throughput) and a "Costing" group (product costing, mix and
* ingredient editors, and master tools), then Ordering and Insights modules.
*/
export function buildClientNavEntries(visible: {
dashboard?: NavItem | null;
operations: NavItem[];
costing: NavItem[];
throughput?: NavItem | null;
ordering?: NavEntry | null;
reporting?: NavItem | null;
}): NavEntry[] {
@@ -310,14 +309,17 @@ export function buildClientNavEntries(visible: {
entries.push({ kind: 'item', item: visible.dashboard });
}
const operationsChildren = [
...visible.costing,
...(visible.throughput ? [visible.throughput] : [])
];
if (operationsChildren.length) {
if (visible.operations.length) {
entries.push({
kind: 'group',
group: { id: 'operations', label: 'Operations', icon: Layers, children: operationsChildren }
group: { id: 'operations', label: 'Operations', icon: Layers, children: visible.operations }
});
}
if (visible.costing.length) {
entries.push({
kind: 'group',
group: { id: 'costing', label: 'Costing', icon: BadgeDollarSign, children: visible.costing }
});
}
@@ -408,15 +410,15 @@ export function pageMeta(pathname: string): PageMeta {
}
if (pathname.startsWith('/product-costing')) {
return { title: productCostingItem.label, category: 'Operations', icon: productCostingItem.icon };
return { title: productCostingItem.label, category: 'Costing', icon: productCostingItem.icon };
}
if (pathname.startsWith('/editor')) {
return { title: editorItem.label, category: 'Operations', icon: editorItem.icon };
return { title: editorItem.label, category: 'Costing', icon: editorItem.icon };
}
if (pathname.startsWith('/ingredients')) {
return { title: ingredientsEditorItem.label, category: 'Operations', icon: ingredientsEditorItem.icon };
return { title: ingredientsEditorItem.label, category: 'Costing', icon: ingredientsEditorItem.icon };
}
if (pathname.startsWith('/raw-materials')) {