- {schema.items?.map((item, idx) => (
-
-
- {idx === (schema.items?.length || 0) - 1 ? (
- {resolveKeyedI18nLabel(item.label) ?? ''}
- ) : (
- {resolveKeyedI18nLabel(item.label) ?? ''}
- )}
-
- {idx < (schema.items?.length || 0) - 1 && }
-
- ))}
+ {schema.items?.map((item, idx) => {
+ const isLast = idx === (schema.items?.length || 0) - 1;
+ // Resolved ONCE per item and rendered ABOVE the page/link split, so
+ // BOTH arms carry it by construction. Repairing only the leaf arm
+ // would be "a narrower version of the same bug" (objectui#5930) —
+ // here the last crumb is a `BreadcrumbPage` and every earlier one a
+ // `BreadcrumbLink`, and the fixture exercises both.
+ const Icon = resolveIcon(item.icon);
+ return (
+
+
+ {Icon && }
+ {isLast ? (
+ {resolveKeyedI18nLabel(item.label) ?? ''}
+ ) : (
+ {resolveKeyedI18nLabel(item.label) ?? ''}
+ )}
+
+ {!isLast && }
+
+ );
+ })}
);
diff --git a/packages/components/src/renderers/form/command.tsx b/packages/components/src/renderers/form/command.tsx
index 82e8e5f3e3..6f5cbb8126 100644
--- a/packages/components/src/renderers/form/command.tsx
+++ b/packages/components/src/renderers/form/command.tsx
@@ -9,6 +9,18 @@
import { ComponentRegistry } from '@object-ui/core';
import type { CommandSchema } from '@object-ui/types';
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../../ui/command';
+// `CommandItem.icon` is an authored lucide NAME that this renderer never read —
+// `command-menu.json` and `command-palette-with-shortcuts.json` declare nine of
+// them between them and drew none (objectui#5931).
+//
+// Routed through the RECORD surface (`icons` from 'lucide-react', reached via
+// the shared `resolveIcon`), which is what `ui:button`, `action:*`,
+// `ui:dropdown-menu` and `ui:context-menu` resolve against, so an unknown or
+// RETIRED spelling renders NOTHING. The dynamic surface (`LazyIcon`) is
+// deliberately NOT used: it degrades an unknown name to the `Database` glyph,
+// trading a no-icon failure for a WRONG-icon one, recorded as ruled out for
+// authored icon fields by objectui#5622 and #5633.
+import { resolveIcon } from '../action/resolve-icon';
ComponentRegistry.register('command',
({ schema, ...props }: { schema: CommandSchema; [key: string]: any }) => {
@@ -29,12 +41,20 @@ ComponentRegistry.register('command',