Skip to main content

Icons Customization in Mimeeq

Introduction

Mimeeq's embed configurator UI offers extensive customization capabilities, allowing you to tailor the interface to match your brand identity. One of the most powerful customization options is the ability to replace any icon used throughout the application with your own custom SVG icons or icon components.

While Mimeeq organizes icons into technical categories in its configuration system (basket, configurator, form, etc.), understanding how these icons are used in real-world contexts is more important for creating a cohesive user experience. This guide organizes icons by their functional usage to help you identify which icons to customize for specific areas of the UI.

Setting Up Icon Customization

Initial Configuration

You can set the initial values by configuring the window.mimeeqAppConfig object before loading the Mimeeq embed:

window.mimeeqAppConfig = {
icons: {
misc: {
close: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em" fill="currentColor"><path d="M481-442 272-232q-9 9-19.5 9T232-233q-9-10-8.5-19t9.5-19l208-209-209-211q-8-9-8.5-18.5T232-729q10-10 20-10.5t20 9.5l209 210 207-210q9-9 19.5-9t20.5 10q9 10 8.5 19t-9.5 19L519-480l208 209q8 8 9 18t-8 20q-10 10-20 10.5t-20-9.5L481-442Z"/></svg>',
},
},
};

Runtime Configuration Changes

You can adjust the icon configuration after the Mimeeq embed has loaded:

document.addEventListener('mimeeq-app-loaded', () => {
window.mimeeqApp.config.icons = {
misc: {
close: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em" fill="currentColor"><path d="M481-442 272-232q-9 9-19.5 9T232-233q-9-10-8.5-19t9.5-19l208-209-209-211q-8-9-8.5-18.5T232-729q10-10 20-10.5t20 9.5l209 210 207-210q9-9 19.5-9t20.5 10q9 10 8.5 19t-9.5 19L519-480l208 209q8 8 9 18t-8 20q-10 10-20 10.5t-20-9.5L481-442Z"/></svg>',
},
};
});

Icons by Application Component

To make customization more intuitive, let's explore icons based on the actual application components and areas where they appear. This approach will help you identify which icons to customize for specific parts of the Mimeeq interface.

1. Side Panel & Options Menu

The side panel is a central component of the product configurator interface, containing options, controls, and summary information.

Icon NameTechnical PathComponentDescription
closemisc.closemmq-side-panel-headerClose panel button
arrowLeftShortmisc.arrowLeftShortmmq-side-panel-headerBack navigation in panel
expandoptionPanel.expandmmq-side-panel-headerExpand panel button
collapseoptionPanel.collapsemmq-side-panel-headerCollapse panel button
plusoptionPanel.plusmmq-new-quantity-boxIncrease quantity button
minusoptionPanel.minusmmq-new-quantity-boxDecrease quantity button
caretDownmisc.caretDownmmq-item-buttonExpand/collapse options in menu
searchform.searchmmq-save-config-formSearch collections field
heartquickIcons.heartmmq-save-buttonSave to favorites button
pdfSquarequickIcons.pdfSquaremmq-side-panel-footerGenerate PDF button
sharequickIcons.sharemmq-side-panel-footer, mmq-share-componentShare product button

Example Customization:

window.mimeeqApp.config.icons = {
misc: {
close: '<svg><!-- Your custom close icon --></svg>',
arrowLeftShort: '<svg><!-- Your custom back arrow --></svg>'
},
optionPanel: {
plus: '<svg><!-- Your custom plus icon --></svg>',
minus: '<svg><!-- Your custom minus icon --></svg>'
}
};

2. Quick Icons Toolbar

The Quick Icons toolbar provides easy access to frequently used tools and actions in the configurator.

Icon NameTechnical PathComponentDescription
zoomAllquickIcons.zoomAllmmq-zoom-allFit all content to view
enterFullscreenquickIcons.enterFullscreenmmq-full-screen-buttonEnter fullscreen mode
leaveFullscreenquickIcons.leaveFullscreenmmq-full-screen-buttonExit fullscreen mode
resetquickIcons.resetmmq-quick-iconsReset configuration button
undoquickIcons.undommq-quick-iconsUndo last action
redoquickIcons.redommq-quick-iconsRedo last action
imageSquarequickIcons.imageSquaremmq-quick-iconsExport image button
pdfSquarequickIcons.pdfSquaremmq-quick-iconsGenerate PDF button
exportModelquickIcons.exportModelmmq-quick-iconsExport 3D model button
arquickIcons.armmq-quick-iconsAugmented reality button
savequickIcons.savemmq-save-scene-buttonSave configuration or scene
dimensionsquickIcons.dimensionsmmq-quick-iconsShow/hide dimensions
gridOnquickIcons.gridOnmmq-quick-iconsEnable grid on scene
gridOffquickIcons.gridOffmmq-quick-iconsDisable grid on scene
threeDotsquickIcons.threeDotsmmq-dot-menuMobile menu button
priceSettingsquickIcons.priceSettingsmmq-price-settings-buttonPrice settings button

Example Customization:

window.mimeeqApp.config.icons = {
quickIcons: {
zoomAll: '<svg><!-- Your custom zoom-all icon --></svg>',
reset: '<svg><!-- Your custom reset icon --></svg>',
undo: '<svg><!-- Your custom undo icon --></svg>',
redo: '<svg><!-- Your custom redo icon --></svg>'
}
};

3. Image Panel & Media Controls

These icons appear in image galleries, media previews, and view controls.

Icon NameTechnical PathComponentDescription
3dconfigurator.3dmmq-image-panel-footer3D view thumbnail indicator
arrowDropDownconfigurator.arrowDropDownmmq-image-panel-footerGallery navigation arrow
arquickIcons.armmq-image-panel-footer, mmq-quote-preview-uiAR view button
imageSquarequickIcons.imageSquaremmq-quote-preview-uiSave image button
plusmisc.plusmmq-zoom-buttonsZoom in button
minusoptionPanel.minusmmq-zoom-buttonsZoom out button
downloadmisc.downloadmmq-img-download-buttonDownload image button
enterFullscreenHotspotconfigurator.enterFullscreenHotspotmmq-hotspot-modalEnter fullscreen in hotspot
leaveFullscreenHotspotconfigurator.leaveFullscreenHotspotmmq-hotspot-modalExit fullscreen in hotspot

Example Customization:

window.mimeeqApp.config.icons = {
configurator: {
'3d': '<svg><!-- Your custom 3D view icon --></svg>',
arrowDropDown: '<svg><!-- Your custom dropdown arrow --></svg>'
},
misc: {
download: '<i class="fa fa-download"></i>'
}
};

4. AR Experience

Icons used in Augmented Reality features and components.

Icon NameTechnical PathComponentDescription
arquickIcons.armmq-mobile-header, mmq-image-panel-footerAR mode button
arIncompatibleconfigurator.arIncompatiblemmq-ar-incompatibleDevice incompatibility indicator
arFailedconfigurator.arFailedmmq-ar-modalAR generation failure
closemisc.closemmq-ar-modalClose AR dialog
clonemodular.clonemmq-ar-modalCopy URL button

Example Customization:

window.mimeeqApp.config.icons = {
quickIcons: {
ar: '<svg><!-- Your custom AR icon --></svg>'
},
configurator: {
arIncompatible: '<svg><!-- Your custom incompatibility icon --></svg>'
}
};

5. Modular Product Editor

Icons used in the modular product interface for manipulating multiple objects in a scene.

Icon NameTechnical PathComponentDescription
clonemodular.clonemmq-modular-toolbarDuplicate selected element
movemodular.movemmq-modular-toolbarMove selected element
replacemodular.replacemmq-modular-toolbarReplace selected element
configuremodular.configuremmq-modular-toolbarConfigure selected element
copyStylemodular.copyStylemmq-modular-toolbarCopy style from element
dragmodular.dragmmq-modular-toolbar-positionerHandle for dragging toolbar
flipmodular.flipmmq-modular-toolbarFlip selected element
chevronRightmodular.chevronRightmmq-modular-toolbarNavigation indicator
noItemsmodular.noItemsmmq-element-list-modal, mmq-tab-elementsEmpty state indicator
threeLinesmodular.threeLinesmmq-element-list-modalCategory filters
sortAzmodular.sortAzmmq-element-list-modalSort alphabetically
plusmisc.plusmmq-modular-element-list, mmq-tab-elementsAdd new element button
collisionmodular.collisionmmq-collision-modalCollision warning icon
productReplacementmodular.productReplacementmmq-product-replacement-modalReplacement warning icon
sceneErrormodular.sceneErrormmq-scene-error-modalScene error indicator
noOptionsmodular.noOptionsmmq-tab-configurator-contentNo options available indicator
noCustomizableOptionsmodular.noCustomizableOptionsmmq-tab-configurator-contentNo customization available indicator

Example Customization:

window.mimeeqApp.config.icons = {
modular: {
clone: '<svg><!-- Your custom clone icon --></svg>',
move: '<svg><!-- Your custom move icon --></svg>',
flip: '<svg><!-- Your custom flip icon --></svg>',
noItems: '<svg><!-- Your custom empty state icon --></svg>'
}
};

6. Basket & Shopping Cart

Icons used in the shopping cart, checkout process, and order management.

Icon NameTechnical PathComponentDescription
cartbasket.cartmmq-basket-buttonShopping cart button
emptyCartbasket.emptyCartmmq-empty-basketEmpty cart state icon
envelopebasket.envelopemmq-order-sentOrder submission confirmation
trashmisc.trashmmq-cart-itemRemove item button
caretDownmisc.caretDownmmq-cart-itemSpecification dropdown
arrowLeftmisc.arrowLeftmmq-basket-panelBack button in contact form
closemisc.closemmq-basket-panelClose panel button
checkmisc.checkmmq-basket-contact-detailsCheckbox states

Example Customization:

window.mimeeqApp.config.icons = {
basket: {
cart: '<svg><!-- Your custom cart icon --></svg>',
emptyCart: '<svg><!-- Your custom empty cart icon --></svg>'
},
misc: {
trash: '<i class="fa fa-trash"></i>'
}
};

7. Form & Input Controls

Icons used in form inputs, search fields, selects, and other interactive controls.

Icon NameTechnical PathComponentDescription
checkedCheckboxform.checkedCheckboxmmq-checkboxSelected checkbox state
uncheckedCheckboxform.uncheckedCheckboxmmq-checkboxUnselected checkbox state
indeterminateCheckboxform.indeterminateCheckboxmmq-checkboxPartial checkbox state
checkedRadioform.checkedRadiommq-radioSelected radio button state
emptyRadioform.emptyRadiommq-radioUnselected radio button state
searchform.searchmmq-mobile-search, mmq-element-list-modalSearch icon
increaseform.increasemmq-number-inputIncrement value button
decreaseform.decreasemmq-number-inputDecrement value button
errorInfoform.errorInfommq-text-field, mmq-selectError indicator
closemisc.closemmq-mobile-search, mmq-collection-itemClear search or remove item
caretDownmisc.caretDownmmq-base-selectDropdown indicator
pencilmisc.pencilmmq-filter-buttonEdit filter button

Example Customization:

window.mimeeqApp.config.icons = {
form: {
checkedCheckbox: '<svg><!-- Your custom checkbox icon --></svg>',
uncheckedCheckbox: '<svg><!-- Your custom empty checkbox icon --></svg>',
search: '<i class="fa fa-search"></i>'
}
};

8. Image Manipulation & Widgets

Icons used in image upload, texture editing, and Print-On-Demand (POD) functionality.

Icon NameTechnical PathComponentDescription
flipHorizontallywidgets.flipHorizontallymmq-image-configuratorFlip image horizontally
flipVerticallywidgets.flipVerticallymmq-image-configuratorFlip image vertically
resetwidgets.resetmmq-image-configuratorReset image settings
trashmisc.trashmmq-image-configuratorRemove image
lockmisc.lockmmq-texture-widgetLocked widget indicator
plusmisc.plusmmq-texture-widgetAdd new image
replaceCirclewidgets.replaceCirclemmq-texture-widget, mmq-drag-tooltipReplace image button
closeFilledwidgets.closeFilledmmq-logo-libraryRemove image button
eyewidgets.eyemmq-print-on-demand-layersShow layer button
eyeCrosswidgets.eyeCrossmmq-print-on-demand-layersHide layer button
mousePointerconfigurator.mousePointermmq-see-changes-overlayClick-to-apply changes indicator
imageSquarequickIcons.imageSquaremmq-print-on-demand-preview-canvasNo layers state

Example Customization:

window.mimeeqApp.config.icons = {
widgets: {
flipHorizontally: '<svg><!-- Your custom flip icon --></svg>',
flipVertically: '<svg><!-- Your custom flip icon --></svg>',
eye: '<i class="fa fa-eye"></i>',
eyeCross: '<i class="fa fa-eye-slash"></i>'
}
};

9. Export & Document Operations

Icons used for saving, exporting, and file operations.

Icon NameTechnical PathComponentDescription
pdfSquarequickIcons.pdfSquaremmq-save-pdf-button, mmq-quick-iconsGenerate PDF button
savequickIcons.savemmq-save-favs-modal-button, mmq-save-scene-buttonSave configuration
fileGlbconfigurator.fileGlbmmq-export-model-modalGLB file format option
fileObjconfigurator.fileObjmmq-export-model-modalOBJ file format option
fileStlconfigurator.fileStlmmq-export-model-modalSTL file format option
fileJpegconfigurator.fileJpegmmq-export-image-modalJPEG format option
filePngconfigurator.filePngmmq-export-image-modalPNG format option
pdfLoadermisc.pdfLoadermmq-pdf-loaderPDF generation animation
documentmisc.documentmmq-documentDocument file icon
downloadmisc.downloadmmq-img-download-buttonDownload file button

Example Customization:

window.mimeeqApp.config.icons = {
quickIcons: {
pdfSquare: '<svg><!-- Your custom PDF icon --></svg>',
save: '<svg><!-- Your custom save icon --></svg>'
},
configurator: {
fileGlb: '<svg><!-- Your custom GLB icon --></svg>',
filePng: '<svg><!-- Your custom PNG icon --></svg>'
}
};

10. Notifications & Messaging

Icons used in notifications, alerts, tooltips, and message components.

Icon NameTechnical PathComponentDescription
infomessageWidget.infommq-message-widget, mmq-side-panel-contentInformation message
warningmessageWidget.warningmmq-message-widget, mmq-inline-notificationWarning message
generalmessageWidget.generalmmq-message-widgetGeneral message
ideamessageWidget.ideammq-message-widgetSuggestion message
tipsmessageWidget.tipsmmq-message-widgetTips/hints message
errorInfoform.errorInfommq-warning-3d, mmq-logo-libraryError indicator
limitHitmisc.limitHitmmq-error-modalLimit reached warning
sceneErrormodular.sceneErrormmq-error-modalScene error warning
checkCirclemisc.checkCirclemmq-inline-notificationSuccess message

Example Customization:

window.mimeeqApp.config.icons = {
messageWidget: {
info: '<svg><!-- Your custom info icon --></svg>',
warning: '<svg><!-- Your custom warning icon --></svg>'
},
form: {
errorInfo: '<i class="fa fa-exclamation-circle"></i>'
}
};

11. Social & Sharing

Icons used for sharing and social media functionality.

Icon NameTechnical PathComponentDescription
sharequickIcons.sharemmq-side-panel-footer, mmq-share-componentShare button
linkshare.linkmmq-share-modal, mmq-share-componentCopy link icon
mailshare.mailmmq-share-modal, mmq-share-componentEmail sharing icon

Example Customization:

window.mimeeqApp.config.icons = {
share: {
link: '<svg><!-- Your custom link icon --></svg>',
mail: '<i class="fa fa-envelope"></i>'
}
};

Important Note on Icons with the Same Name

It's important to understand that when the same icon name appears in different technical paths (like misc.plus vs optionPanel.plus), they are typically visually different icons, not just the same icon appearing in different contexts. For example:

  • misc.plus might be a simple plus sign (+)
  • optionPanel.plus might be a plus sign in a circle (⊕)

When customizing, you need to replace each instance separately to maintain visual consistency across the application.

Common Icons with Different Visual Styles

Icon NameTechnical PathsVisual DifferencesUsed In Components
plusmisc.plus vs optionPanel.plusSimple plus (+) vs Plus in circle (⊕)mmq-zoom-buttons vs mmq-new-quantity-box
minusmisc.minus vs optionPanel.minusSimple minus (-) vs Minus in circle (⊖)mmq-zoom-buttons vs mmq-new-quantity-box
closemisc.close vs widgets.closeFilledOutline X vs Filled Xmmq-side-panel-header vs mmq-logo-library
checkmisc.check vs misc.checkCircleSimple checkmark vs Checkmark in circlemmq-basket-contact-details vs mmq-inline-notification
resetwidgets.reset vs quickIcons.resetSimple arrow vs Circular arrowmmq-image-configurator vs mmq-quick-icons

When customizing these icons, you should decide whether to:

  1. Keep the visual distinction - Replace each icon with a custom version that maintains the intended visual difference
  2. Create visual consistency - Use similar styles for related icons to create a more unified look

Either approach can work, but you should make the decision intentionally rather than accidentally overlooking these differences.

Icon Customization Methods

Using SVG Icons

SVG icons provide the best flexibility and scaling capabilities:

window.mimeeqApp.config.icons = {
misc: {
close: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em" fill="currentColor"><path d="M481-442 272-232q-9 9-19.5 9T232-233q-9-10-8.5-19t9.5-19l208-209-209-211q-8-9-8.5-18.5T232-729q10-10 20-10.5t20 9.5l209 210 207-210q9-9 19.5-9t20.5 10q9 10 8.5 19t-9.5 19L519-480l208 209q8 8 9 18t-8 20q-10 10-20 10.5t-20-9.5L481-442Z"/></svg>',
},
};

Using Icon Fonts

You can also use icon fonts like Font Awesome:

window.mimeeqApp.config.icons = {
misc: {
close: '<i class="fas fa-times"></i>',
},
form: {
search: '<i class="fas fa-search"></i>',
}
};

Using Custom Components

For more advanced scenarios, you can use custom components:

window.mimeeqApp.config.icons = {
quickIcons: {
zoomAll: '<custom-zoom-icon></custom-zoom-icon>',
},
};

Important Disclaimer About Icon Libraries

While the examples below show integration with icon libraries like Font Awesome, please note that not all icons can be directly used with external icon libraries. This is due to how the Mimeeq application processes and renders certain icons within its components.

Limitations and Solutions:

  • Some icons may not render correctly when using libraries like Font Awesome directly in the icon configuration
  • SVG is the most reliable format for custom icons and should be your first choice
  • If you prefer using icon libraries, consider these alternatives:
    • Use direct SVG exports from the icon library
    • Use web components that encapsulate the icon library, such as @riovir/wc-fontawesome
    • Test each icon thoroughly in all contexts where it appears

The examples below have been carefully selected to work with the demonstrated approaches, but your specific implementation may require adjustments based on these limitations.

Examples

This guide provides practical, real-world examples of customizing icons in the Mimeeq configurator to create cohesive branded experiences.

Creating a Consistent Brand Experience with Material Design Icons

This example shows how to replace multiple icons across the configurator with Material Design icons to create a cohesive branded experience:

// Initialize Mimeeq with custom Material Design icons
window.mimeeqAppConfig = {
icons: {
// Quick icon toolbar icons
quickIcons: {
zoomAll: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z"/></svg>',
undo: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M280-440q0 83 58.5 141.5T480-240q83 0 141.5-58.5T680-440q0-83-58.5-141.5T480-640h-80v-80h80q100 0 170 70t70 170q0 100-70 170t-170 70q-100 0-170-70t-70-170h80Z"/></svg>',
redo: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M680-440q0 83-58.5 141.5T480-240q-83 0-141.5-58.5T280-440q0-83 58.5-141.5T480-640h80v-80h-80q-100 0-170 70t-70 170q0 100 70 170t170 70q100 0 170-70t70-170h-80Z"/></svg>',
reset: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M480-160q-133 0-226.5-93.5T160-480q0-133 93.5-226.5T480-800q85 0 149 34.5T740-671v-129h80v280H540v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z"/></svg>',
pdfSquare: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M320-600q17 0 28.5-11.5T360-640q0-17-11.5-28.5T320-680q-17 0-28.5 11.5T280-640q0 17 11.5 28.5T320-600Zm0 200v-160h-40v80h-40v80h80Zm120 0v-80h40v-40h-40v-40h80v160h-80Zm120 0v-160h80q17 0 28.5 11.5T680-520v40q0 17-11.5 28.5T640-440h-40v40h-40Zm40-80h40v-40h-40v40ZM280-240q-33 0-56.5-23.5T200-320v-320q0-33 23.5-56.5T280-720h400q33 0 56.5 23.5T760-640v320q0 33-23.5 56.5T680-240H280Zm0-80h400v-320H280v320Zm0 0v-320 320Z"/></svg>',
imageSquare: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40-480v560-560Z"/></svg>',
exportModel: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="m240-400 240-360 240 360H240ZM480-80 240-480h480L480-80Z"/></svg>',
ar: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="m40-120 320-760h80l320 760h-82l-79-200H201l-79 200H40Zm189-280h342L400-720h-2l-169 320Zm511 280v-320h-80v-80h80v-80h80v80h80v80h-80v320h-80Z"/></svg>',
enterFullscreen: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm720 0v-120H720v-80h200v200h-80Z"/></svg>',
leaveFullscreen: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M240-240v-120H120v-80h200v200h-80Zm400 0v-200h200v80H720v120h-80ZM120-520v-80h120v-120h80v200H120Zm520-200v120h120v80H560v-200h80Z"/></svg>',
},

// Side panel icons
misc: {
close: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z"/></svg>',
caretDown: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M480-360 280-560h400L480-360Z"/></svg>',
plus: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z"/></svg>',
minus: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M200-440v-80h560v80H200Z"/></svg>',
},

// Quantity controls
optionPanel: {
plus: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z"/></svg>',
minus: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M200-440v-80h560v80H200Z"/></svg>',
},

// Basket icons
basket: {
cart: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em"><path d="M280-80q-33 0-56.5-23.5T200-160q0-33 23.5-56.5T280-240q33 0 56.5 23.5T360-160q0 33-23.5 56.5T280-80Zm400 0q-33 0-56.5-23.5T600-160q0-33 23.5-56.5T680-240q33 0 56.5 23.5T760-160q0 33-23.5 56.5T680-80ZM246-720l96 200h280l110-200H246Zm-38-80h590q23 0 35 20.5t1 41.5L692-482q-11 20-29.5 31T622-440H324l-44 80h480v80H280q-45 0-68-39.5t-2-78.5l54-98-144-304H40v-80h130l38 80Zm134 280h280-280Z" fill="currentColor"/></svg>',
}
}
};

Interactive Example

Before and After:

  • Before: Default Mimeeq icons with inconsistent styling
  • After: A consistent Material Design icon set that aligns with Google's design language, creating a familiar experience for users

Custom Branded Icon Set with Corporate Colors

This example demonstrates creating a branded experience by customizing SVG icons with corporate colors:

// Define corporate colors for use in icons
const BRAND_PRIMARY = '#0056b3';
const BRAND_SECONDARY = '#6c757d';
const BRAND_SUCCESS = '#28a745';
const BRAND_WARNING = '#ffc107';

// Apply custom branded icons
window.mimeeqAppConfig = {
icons: {
// Quick icon toolbar - commonly used icons with brand colors
quickIcons: {
// Zoom controls
zoomAll: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_SUCCESS }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>`,

// Fullscreen controls
enterFullscreen: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" y1="3" x2="14" y2="10"></line><line x1="3" y1="21" x2="10" y2="14"></line></svg>`,
leaveFullscreen: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 14 10 14 10 20"></polyline><polyline points="20 10 14 10 14 4"></polyline><line x1="14" y1="10" x2="21" y2="3"></line><line x1="3" y1="21" x2="10" y2="14"></line></svg>`,

// History controls
undo: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 14 4 9 9 4"></polyline><path d="M20 20v-7a4 4 0 0 0-4-4H4"></path></svg>`,
redo: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 14 20 9 15 4"></polyline><path d="M4 20v-7a4 4 0 0 1 4-4h12"></path></svg>`,
reset: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 2v6h6"></path><path d="M21 12A9 9 0 0 0 6 5.3L3 8"></path><path d="M21 22v-6h-6"></path><path d="M3 12a9 9 0 0 0 15 6.7l3-2.7"></path></svg>`,

// Export functions
pdfSquare: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><path d="M9 15v-2h6v2"></path><path d="M9 18v-2h6v2"></path><path d="M9 12v-2h2v2"></path></svg>`,
imageSquare: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg>`,
exportModel: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>`,

// AR experience
ar: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_PRIMARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 6v12h10l2-2 2 2h8V6H1z"></path><path d="M1 18l5-4-5-4"></path></svg>`,
},

// Zoom controls
misc: {
plus: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_SECONDARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>`,
caretDown: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_SECONDARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>`,
},
optionPanel: {
minus: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_SECONDARY }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg>`,
},

// Basket icon with brand color
basket: {
cart: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ BRAND_WARNING }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg>`,
}
}
};

Interactive Example

Key Benefits:

  1. Creates a cohesive brand experience with consistent colors across all icons
  2. Makes the configurator feel like a natural extension of your website
  3. Improves brand recognition by reinforcing brand colors throughout the interface

Animation and Interactivity with CSS

This example demonstrates adding animation to icons using CSS combined with SVG icons:

<style>
/* Define animations for icons */
@keyframes pulse{
0%{ transform:scale(1); opacity:1; }
50%{ transform:scale(1.2); opacity:0.8; }
100%{ transform:scale(1); opacity:1; }
}

/* Target specific icons for animation */
.mmq-basket::part(icon){
animation:pulse 2s infinite;
transform-origin:center;
}
</style>

<script>
document.addEventListener('mimeeq-app-loaded', () => {
window.mimeeqApp.config.icons = {
// Cart icon with pulse animation
basket: {
cart: '<svg class="cart-icon" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg>',
},
};

// Add data attributes to help target specific icons with CSS
const observer = new MutationObserver(() => {
document.querySelectorAll('.mmq-quick-icon-button').forEach(btn => {
// Find which icon this button represents by checking its content
if (btn.innerHTML.includes('reset-icon')) {
btn.setAttribute('data-icon', 'reset');
}
});
});

// Start observing the document for added nodes
observer.observe(document.body, { childList: true, subtree: true });
});
</script>

Interactive Example

Animation Effects:

  1. The cart icon in the basket button gently pulses to draw attention
  2. The reset icon spins when hovered, providing visual feedback before action

Integrated example with Contextual Icon Styling

This example shows a comprehensive approach that changes icons based on context - using different styles for different functional areas:

document.addEventListener('mimeeq-app-loaded', () => {
// Define a function to create SVG icons with specific colors
function createSvgIcon(path, color = 'currentColor', viewBox = '0 0 24 24') {
return `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="${viewBox}" fill="none" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${path}</svg>`;
}

window.mimeeqApp.config.icons = {
// Primary toolbar icons - most commonly accessed
quickIcons: {
// Zoom controls
zoomAll: createSvgIcon('<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line>', '#0066cc'),

// Fullscreen controls
enterFullscreen: createSvgIcon('<polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" y1="3" x2="14" y2="10"></line><line x1="3" y1="21" x2="10" y2="14"></line>', '#0066cc'),
leaveFullscreen: createSvgIcon('<polyline points="4 14 10 14 10 20"></polyline><polyline points="20 10 14 10 14 4"></polyline><line x1="14" y1="10" x2="21" y2="3"></line><line x1="3" y1="21" x2="10" y2="14"></line>', '#0066cc'),

// History controls
reset: createSvgIcon('<path d="M3 2v6h6"></path><path d="M21 12A9 9 0 0 0 6 5.3L3 8"></path><path d="M21 22v-6h-6"></path><path d="M3 12a9 9 0 0 0 15 6.7l3-2.7"></path>', '#0066cc'),
undo: createSvgIcon('<polyline points="9 14 4 9 9 4"></polyline><path d="M20 20v-7a4 4 0 0 0-4-4H4"></path>', '#0066cc'),
redo: createSvgIcon('<polyline points="15 14 20 9 15 4"></polyline><path d="M4 20v-7a4 4 0 0 1 4-4h12"></path>', '#0066cc'),

// Export functions
pdfSquare: createSvgIcon('<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><path d="M9 15v-2h6v2"></path><path d="M9 18v-2h6v2"></path><path d="M9 12v-2h2v2"></path>', '#0066cc'),
imageSquare: createSvgIcon('<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline>', '#0066cc'),
exportModel: createSvgIcon('<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line>', '#0066cc'),

// AR experience
ar: createSvgIcon('<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line>', '#9933cc'),
},

// Navigation and zoom controls - neutral styling
misc: {
caretDown: createSvgIcon('<polyline points="6 9 12 15 18 9"></polyline>', '#555555'),
plus: createSvgIcon('<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line>', '#555555'),
},
optionPanel: {
minus: createSvgIcon('<circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line>', '#555555'),
},

// E-commerce icon with cart styling
basket: {
cart: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none">
<circle cx="9" cy="21" r="1" fill="#0066cc" stroke="#0066cc"></circle>
<circle cx="20" cy="21" r="1" fill="#0066cc" stroke="#0066cc"></circle>
<path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6" stroke="#0066cc" stroke-width="2"></path>
</svg>`,
}
};
});

Interactive Example

Contextual Design Approach:

  1. Primary Actions: Bold, brand-colored icons for the most important actions
  2. Navigation Elements: Neutral, consistent icons for navigational controls
  3. Form Controls: More playful, Font Awesome icons for interactive elements
  4. Status Indicators: Semantic colors to indicate different message types
  5. E-commerce Elements: Special styling for cart icons to emphasize purchasing

This approach creates a visual hierarchy that guides users through the interface while maintaining brand consistency.

Adapting to Light/Dark Mode

This example demonstrates how to automatically adapt icons to light and dark mode based on user preferences:

document.addEventListener('mimeeq-app-loaded', () => {
// Function to detect current color scheme preference
function isDarkMode() {
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
}

// Function to update icons based on color scheme
function updateIconsForColorScheme() {
const darkMode = isDarkMode();
const iconColor = darkMode ? '#ffffff' : '#333333';
const accentColor = darkMode ? '#5e9eff' : '#0066cc';

window.mimeeqApp.config.icons = {
// Quick icons toolbar - most commonly accessed icons
quickIcons: {
zoomAll: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>`,
enterFullscreen: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" y1="3" x2="14" y2="10"></line><line x1="3" y1="21" x2="10" y2="14"></line></svg>`,
leaveFullscreen: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 14 10 14 10 20"></polyline><polyline points="20 10 14 10 14 4"></polyline><line x1="14" y1="10" x2="21" y2="3"></line><line x1="3" y1="21" x2="10" y2="14"></line></svg>`,
reset: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 2v6h6"></path><path d="M21 12A9 9 0 0 0 6 5.3L3 8"></path><path d="M21 22v-6h-6"></path><path d="M3 12a9 9 0 0 0 15 6.7l3-2.7"></path></svg>`,
undo: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 14 4 9 9 4"></polyline><path d="M20 20v-7a4 4 0 0 0-4-4H4"></path></svg>`,
redo: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 14 20 9 15 4"></polyline><path d="M4 20v-7a4 4 0 0 1 4-4h12"></path></svg>`,
pdfSquare: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><path d="M9 15v-2h6v2"></path><path d="M9 18v-2h6v2"></path><path d="M9 12v-2h2v2"></path></svg>`,
imageSquare: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg>`,
ar: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>`,
exportModel: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${accentColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>`,
},

// Navigation controls
misc: {
plus: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${iconColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg>`,
caretDown: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${iconColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>`,
},
optionPanel: {
minus: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${ iconColor }" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line></svg>`,
},
// Basket icon
basket: {
cart: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="${iconColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg>`,
}
};
}

// Initial update based on current preference
updateIconsForColorScheme();

// Listen for changes in color scheme preference
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', updateIconsForColorScheme);
});

Interactive Example

Key Features:

  1. Automatically detects user's color scheme preference
  2. Adapts icon colors to provide appropriate contrast in both light and dark modes
  3. Updates dynamically if the user changes their system preference

This approach creates a more accessible interface that respects user preferences while maintaining brand consistency.

Industry-Specific Icon Sets

For furniture retailers, this example shows how to implement furniture-specific icons:

document.addEventListener('mimeeq-app-loaded', () => {
window.mimeeqApp.config.icons = {
// Common toolbar icons with furniture-specific design
quickIcons: {
// Zoom control for product viewing
zoomAll: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
<line x1="11" y1="8" x2="11" y2="14"></line>
<line x1="8" y1="11" x2="14" y2="11"></line>
</svg>`,

// Fullscreen viewing for furniture details
enterFullscreen: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="15 3 21 3 21 9"></polyline>
<polyline points="9 21 3 21 3 15"></polyline>
<line x1="21" y1="3" x2="14" y2="10"></line>
<line x1="3" y1="21" x2="10" y2="14"></line>
</svg>`,
leaveFullscreen: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="4 14 10 14 10 20"></polyline>
<polyline points="20 10 14 10 14 4"></polyline>
<line x1="14" y1="10" x2="21" y2="3"></line>
<line x1="3" y1="21" x2="10" y2="14"></line>
</svg>`,

// History controls for configuration changes
reset: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M3 2v6h6"></path>
<path d="M21 12A9 9 0 0 0 6 5.3L3 8"></path>
<path d="M21 22v-6h-6"></path>
<path d="M3 12a9 9 0 0 0 15 6.7l3-2.7"></path>
</svg>`,
undo: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 14 4 9 9 4"></polyline>
<path d="M20 20v-7a4 4 0 0 0-4-4H4"></path>
</svg>`,
redo: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="15 14 20 9 15 4"></polyline>
<path d="M4 20v-7a4 4 0 0 1 4-4h12"></path>
</svg>`,

// Export functions for furniture catalogs
pdfSquare: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
<path d="M9 15v-2h6v2"></path>
<path d="M9 18v-2h6v2"></path>
<path d="M9 12v-2h2v2"></path>
</svg>`,

// AR for viewing furniture in home
ar: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path>
<line x1="3" y1="16" x2="21" y2="16"></line>
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="8" x2="21" y2="8"></line>
<line x1="3" y1="4" x2="21" y2="4"></line>
</svg>`,
},

// Zoom controls
misc: {
plus: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="16"></line>
<line x1="8" y1="12" x2="16" y2="12"></line>
</svg>`,
caretDown: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="6 9 12 15 18 9"></polyline>
</svg>`,
},
optionPanel: {
minus: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="12" cy="12" r="10"></circle>
<line x1="8" y1="12" x2="16" y2="12"></line>
</svg>`,
},
// Shopping cart for furniture items
basket: {
cart: `<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="9" cy="21" r="1"></circle>
<circle cx="20" cy="21" r="1"></circle>
<path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path>
</svg>`,
}
};
});

Interactive Example

Industry Application:

  1. Using furniture-specific iconography that matches the product domain
  2. Material pattern icons for fabric and finish selection
  3. Specialized layout icons for furniture arrangement and placement

This approach enhances usability by using domain-specific metaphors that furniture customers and professionals will intuitively understand.

Best Practices for Icon Customization

  1. Maintain Visual Consistency: Use a consistent style across all icons for a cohesive look.

  2. Size Appropriately: Ensure your icons are properly sized - most Mimeeq icons are designed for 24px or smaller.

  3. Use currentColor: For SVG icons, use fill="currentColor" to inherit color from CSS.

  4. Test Across Contexts: Some icons appear in multiple places - test your customizations in all contexts.

  5. Consider State Changes: Icons may need to change appearance based on state (active, hover, disabled).

  6. Focus on High-Impact Icons: Prioritize customizing the most visible icons first (close, plus/minus, controls).

  7. Maintain Accessibility: Ensure icons are recognizable and maintain their semantic meaning.

Troubleshooting

Common Issues

  1. Icons Not Appearing: Ensure your configuration is loaded before the Mimeeq embed and check for syntax errors.

  2. Icons Too Large/Small: Check your SVG viewBox and dimensions match the space available.

  3. SVG Syntax Problems: Validate your SVG syntax and ensure special characters are properly escaped.

  4. Icons Not Updating: Some UI components may need to be refreshed to show updated icons.

Solutions

  • For syntax issues, validate your SVG code with an online validator.
  • To see runtime changes, navigate to a different section and back.
  • If using icon fonts, ensure the font is loaded before configuring icons.
  • Use the browser inspector to check if the icon is rendered but has styling issues.

Conclusion

Customizing icons in the Mimeeq configurator allows you to create a seamless brand experience. By understanding the functional contexts where icons appear, you can maintain a consistent visual language across your product configurator.

For the most comprehensive customization, consider replacing all icons in related functional groups, rather than individual icons, to maintain a cohesive appearance throughout the application.

Remember that icon customization is one part of the broader theming capabilities of Mimeeq, which also include colors, typography, and component styling to create a fully branded configuration experience.