-
Click "Add Module" on any column
- Opens module selector
- Remembers which column you selected
-
Click "3rd Party" tab
- Tab appears between "Modules" and "Presets"
- Shows all installed custom cards (e.g., 22 cards in your screenshot)
- No drag handles - just click to add!
-
Click any card (e.g., "Bubble Card", "Mushroom Entity Card")
- Card instantly added to your selected column
- Module selector closes
- Card appears in builder with proper name
-
In the Builder:
- Card displays as: "Bubble Card" (not "External_card Module")
- Info shows: "Card: bubble-card"
- Has all standard controls:
- ⠿ Drag handle (to reorder)
- ✏️ Edit button
- 📋 Duplicate button
- 🗑️ Delete button
-
Click Edit (Pencil Icon):
- Ultra Card module settings popup opens
- Tabs shown:
- ✅ General - Shows the 3rd party card's native editor
- ❌ Actions - Hidden (card handles its own)
- ✅ Logic - Show/hide conditions for the container
- ✅ Design - Style the container around the card
-
In General Tab:
- Header shows: "Using {Card Name}'s native editor"
- Below that: The card's actual configuration UI
- Configure exactly like you would in a dashboard
- Changes save automatically
-
Live Preview:
- Shows the actual card rendering
- Updates as you configure
- Exact representation of final output
- Shows "Bubble Card", "Mushroom Entity Card", etc.
- Not generic "External_card Module"
- Config stores:
type: "custom:bubble-card" - Element creates:
bubble-card(without custom: prefix) - No more "Unknown type" errors
- Detects if card has editor (e.g.,
bubble-card-editor) - Creates and embeds it properly
- Listens for config changes
- Auto-saves to Ultra Card
✅ Actions Tab Hidden
- External cards don't show Actions tab
- They handle their own tap/hold/double-tap actions
- Logic and Design tabs still available
- Creates actual card element
- Sets hass and config properly
- Renders in Live Preview
- Shows exact output
1. src/editor/tabs/layout-tab.ts
Line 5840-5844: Hide Actions tab for external cards
const hasActionsTab =
module.type !== 'external_card' &&
moduleHandler &&
typeof (moduleHandler as any).renderActionsTab === 'function';Lines 10701-10720: Create card with proper type and name
// Ensure card type has custom: prefix for config
let fullCardType = cardType;
if (!cardType.startsWith('custom:') && !cardType.startsWith('hui-')) {
fullCardType = `custom:${cardType}`;
}
// Get card display name
const cardInfo = ucExternalCardsService.getCardInfo(cardType);
const cardName = cardInfo ? cardInfo.name : cardType;
const newModule = {
type: 'external_card',
name: cardName, // "Bubble Card"
card_type: cardType, // "bubble-card"
card_config: {
type: fullCardType, // "custom:bubble-card"
},
};2. src/modules/external-card-module.ts
Lines 35-57: Detect and render native editor
renderGeneralTab(...) {
if (!module.card_type || !module.card_config || !module.card_config.type) {
return this.renderEditor(module, hass, updateModule);
}
const editorName = `${module.card_type}-editor`;
const hasNativeEditor = customElements.get(editorName) !== undefined;
if (hasNativeEditor) {
return this.renderNativeEditor(module, hass, updateModule);
}
return this.renderEditor(module, hass, updateModule);
}Lines 59-123: Create native editor element
private renderNativeEditor(...) {
const nativeEditor = document.createElement(`${module.card_type}-editor`);
nativeEditor.hass = hass;
nativeEditor.setConfig(module.card_config);
nativeEditor.addEventListener('config-changed', (e) => {
updateModule({ card_config: e.detail.config });
});
return html`
<div class="native-editor-wrapper">
<div class="native-editor-header">
<ha-icon icon="mdi:pencil-box"></ha-icon>
<span>Using ${cardName}'s native editor</span>
</div>
<div class="native-editor-container">
${nativeEditor}
</div>
</div>
`;
}3. src/services/uc-external-cards-service.ts
Lines 119-157: Proper element creation
createCardElement(cardType, config, hass) {
// Strip custom: prefix for element creation
let elementName = cardType.startsWith('custom:')
? cardType.substring(7)
: cardType;
const element = document.createElement(elementName);
element.hass = hass;
if (typeof element.setConfig === 'function') {
element.setConfig(config);
}
return element;
}General Tab (always shown):
- Shows native editor if available
- Falls back to YAML editor if not
- Header indicates which editor is being used
Actions Tab (hidden):
- Not shown for external_card type
- External cards handle their own tap/hold/double-tap actions internally
Logic Tab (always shown):
- Configure show/hide conditions
- Control when the container appears
- Same as other modules
Design Tab (always shown):
- Style the container around the card
- Background, borders, padding, margins, etc.
- Card's internal styling unaffected
- Click "Add Module" on Column 1
- Click "3rd Party" tab
- Click "Bubble Card"
- Result:
- Bubble Card module appears in Column 1
- Shows "Bubble Card" as name
- Shows "Card: bubble-card" as info
- Click pencil (edit button)
- Result:
- Module Settings popup opens
- Title: "Module Settings - External_card"
- Tabs: General | Logic | Design (no Actions)
- General tab shows: "Using Bubble Card's native editor"
- Below: Bubble Card's actual config UI
- Live Preview shows: Actual bubble card rendering
- In General tab: Use Bubble Card's UI to set button type, entity, etc.
- In Logic tab: Add conditions to show/hide
- In Design tab: Style the container
- Live Preview updates in real-time
- Changes auto-save
✅ Build Time: Oct 11, 2025 11:44 AM
✅ File Size: 3.7MB
✅ TypeScript: No errors
✅ Status: Production ready
- ✅ 3rd Party tab appears between Modules and Presets
- ✅ Shows all installed cards
- ✅ Click card adds to selected column
- ✅ Card shows proper name in builder
- ✅ Drag handle works for reordering
- ✅ Edit button opens module settings popup
- ✅ General tab shows native editor
- ✅ Actions tab is hidden
- ✅ Logic tab available
- ✅ Design tab available
- ✅ Live Preview shows actual card
- ✅ Config changes save automatically
- ✅ YAML fallback for cards without editors
Hard refresh your browser (Ctrl+Shift+R or Cmd+Shift+R)
Then test:
- Delete the old bubble card from builder
- Click "Add Module" on a column
- Click "3rd Party" tab
- Click "Bubble Card"
- Click edit (pencil)
- Should see:
- Tabs: General | Logic | Design (NO Actions tab)
- General tab: Bubble Card's native visual editor
- Live Preview: Actual bubble card
- Ultra Card: 2.0-beta11
- Feature: 3rd Party Cards with Native Editors
- Status: ✅ Complete
- Build: Oct 11, 2025 11:44 AM