Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.
The four layers are not an app-wide setting. You pick CSS, wireframes, primitives, or headless per feature and per surface, then layer CSS on top of everything for theming. Most real apps mix two or more, and different features landing on different layers is normal and correct.Use it when different features need different layers, which is the usual case. Run the decision tree on each feature; its worked examples show what a given design intent usually lands on. If one surface genuinely needs a single layer, go straight to that layer’s page: CSS, Wireframes, Primitives, or Headless.
Mixing is also the UI Customization Plugin’s default: it picks the cheapest workable layer per surface, exactly like the decision tree.
Use one <VeltWireframe> registry in the whole app. It can hold as many feature wireframes as you like. Multiple registries merge first-with-content-wins, which is order-dependent and conflict-prone.
Beyond that, the layers compose freely:
CSS composes with everything.--velt-* variables apply globally, so theming sits on top of any other layer.
Different surfaces can use different layers. A wireframed dialog and a plain primitive sidebar don’t interfere.
The same surface can use more than one layer. You can render a VeltCommentDialog primitive and wireframe a single piece of that same dialog. Leaf pieces have no sub-components, so their wireframe is the only way to restructure them, which makes this combination necessary rather than exotic.
Mixing doesn’t suspend each layer’s own rules: wireframe interactivity limits and headless cost still apply. Picking a layer more expensive than the design needs is the one real mistake here, and the escalation signs tell you when you’ve done it.
Dialog = wireframe, sidebar = primitive, badge = headless, all themed with CSS, one <VeltWireframe>.
React / Next.js
Other Frameworks
// 1) Global theme (CSS): applies to everythingimport "./velt/ui-customization/styles.css";// 2) One wireframe registry (custom dialog layout)<VeltCustomization /> {/* the single <VeltWireframe> */}// 3) Live feature components<VeltComments shadowDom={false} /> {/* renders dialogs via the wireframe */}<VeltCommentsSidebar shadowDom={false} /> {/* default sidebar = primitive */}// 4) A headless extra in your own headerfunction HeaderBadge() { // returns an object ({ count } | null): read .count, don't render the object const unread = useUnreadCommentCountOnCurrentDocument(); return <span className="badge">{unread?.count ?? 0}</span>;}
<!-- 1) Global theme (CSS): applies to everything --><link rel="stylesheet" href="/velt/ui-customization/styles.css" /><!-- 2) One wireframe registry (custom dialog layout) --><velt-wireframe style="display:none;"> <!-- your feature wireframes --></velt-wireframe><!-- 3) Live feature components --><velt-comments shadow-dom="false"></velt-comments><velt-comments-sidebar shadow-dom="false"></velt-comments-sidebar><!-- 4) A headless extra in your own header --><span id="badge" class="badge">0</span><script>const commentElement = Velt.getCommentElement();// emits an object ({ count } | null): read .countconst subscription = commentElement.getUnreadCommentCountOnCurrentDocument().subscribe((unread) => { document.getElementById('badge').textContent = unread?.count ?? 0;});subscription?.unsubscribe();</script>
In React, VeltCustomization is your own wrapper component: the single file that holds your <VeltWireframe> registry and CSS import, per the recommended folder structure.
Cheapest viable layer chosen per feature and per piece (ran the decision tree on each).
Each piece’s layer chosen intentionally; same-surface mixing is fine.
One shared stylesheet for all --velt-* theming and !important overrides.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Velt","colors":{"primary":"#272728","light":"#D5D5D5","dark":"#000000"},"logo":{"light":"https://mintcdn.com/velt/gY7ilEx2g4g3-HVe/velt-logo-big-light.png?fit=max\u0026auto=format\u0026n=gY7ilEx2g4g3-HVe\u0026q=85\u0026s=c75fd62a074f53174a364509b4363fdc","dark":"https://mintcdn.com/velt/gY7ilEx2g4g3-HVe/velt-logo-big.png?fit=max\u0026auto=format\u0026n=gY7ilEx2g4g3-HVe\u0026q=85\u0026s=3b5f452918e68f127b7dcae71c396463","href":"https://docs.velt.dev"},"favicon":"https://mintcdn.com/velt/gY7ilEx2g4g3-HVe/velt-favi.png?fit=max\u0026auto=format\u0026n=gY7ilEx2g4g3-HVe\u0026q=85\u0026s=5ddfb042b3fd320882626c440411bd95","api":{"playground":{"display":"interactive"}},"appearance":{"default":"dark"},"background":{"color":{"dark":"#090014"}},"navbar":{"primary":{"type":"button","label":"Get API Key","href":"https://console.velt.dev/"}},"footer":{"socials":{"twitter":"https://twitter.com/veltjs","linkedin":"https://www.linkedin.com/company/veltjs"}},"search":{"prompt":"Search or ask..."},"seo":{"metatags":{"og:image":"https://firebasestorage.googleapis.com/v0/b/snippyly.appspot.com/o/external%2Fvelt_docs.png?alt=media\u0026token=9e4502da-66ef-4005-9124-dbc76f04b1fd","twitter:image":"https://firebasestorage.googleapis.com/v0/b/snippyly.appspot.com/o/external%2Fvelt_docs.png?alt=media\u0026token=9e4502da-66ef-4005-9124-dbc76f04b1fd","twitter:card":"summary_large_image"},"indexing":"all"},"integrations":{"intercom":{"appId":"fxx14qnk"},"mixpanel":{"projectToken":"6fe5c5cd3adeb341288776482e7bb147"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"velt","hasAudioNarration":false,"actualSubdomain":"velt","customDomains":["velt.dev"],"gitSource":{"type":"github","owner":"velt-js","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeaec9cd4a2465447e7dd9d","collectionId":"c55a8d84-f3bd-4e45-aa44-82e3d31c316c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeaec9cd4a2465447e7dd9d"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeaec9cd4a2465447e7dd9d","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":218},{"language":"default","tag":"REST APIs","count":215},{"language":"default","tag":"v2","count":170},{"language":"default","tag":"Documentation","count":168},{"language":"default","tag":"UI Customization","count":125},{"language":"default","tag":"Comments","count":94},{"language":"default","tag":"Release Notes","count":90},{"language":"default","tag":"Components: Async Collaboration","count":75},{"language":"default","tag":"Async Collaboration","count":62},{"language":"default","tag":"Realtime Collaboration","count":46}],"searchSettings":{"showContentSnippets":true,"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"rakesh@velt.dev","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":""},{"filePath":"style.css","content":"::-webkit-scrollbar{display:none}*{-ms-overflow-style:none;scrollbar-width:none}th{text-align:left}.update-container .relative{max-width:525px!important}#table-of-contents-content{overflow-x:clip;height:100%}"},{"filePath":"public/custom.css","content":""}],"page":{"pagePath":"ui-customization/combining-approaches","slug":"/ui-customization/combining-approaches","pageMetadata":{"title":"Combining approaches (mix-and-match)","sidebarTitle":"Combining approaches","description":"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.","href":"/ui-customization/combining-approaches"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,input:`input`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tab,Table,Tabs,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The four layers are `,_jsx(_components.strong,{children:`not`}),` an app-wide setting. You pick CSS, wireframes, primitives, or headless `,_jsx(_components.strong,{children:`per feature and per surface`}),`, then layer CSS on top of everything for theming. Most real apps mix two or more, and different features landing on different layers is normal and correct.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Use it when`}),` different features need different layers, which is the usual case. Run the `,_jsx(_components.a,{href:`/ui-customization/decision-tree`,children:`decision tree`}),` on each feature; its `,_jsx(_components.a,{href:`/ui-customization/decision-tree#worked-examples`,children:`worked examples`}),` show what a given design intent usually lands on. If one surface genuinely needs a single layer, go straight to that layer’s page: `,_jsx(_components.a,{href:`/ui-customization/styling`,children:`CSS`}),`, `,_jsx(_components.a,{href:`/ui-customization/layout`,children:`Wireframes`}),`, `,_jsx(_components.a,{href:`/ui-customization/primitives`,children:`Primitives`}),`, or `,_jsx(_components.a,{href:`/ui-customization/headless`,children:`Headless`}),`.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Mixing is also the `,_jsx(_components.a,{href:`/get-started/ui-customization-plugin`,children:`UI Customization Plugin`}),`’s default: it picks the cheapest workable layer per surface, exactly like the decision tree.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`the-rules`,children:`The rules`}),`\n`,_jsx(_components.p,{children:`One constraint governs mixing:`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Use one `,_jsx(_components.code,{children:`\u003cVeltWireframe>`}),` registry in the whole app.`]}),` It can hold as many feature wireframes as you like. Multiple registries merge first-with-content-wins, which is order-dependent and conflict-prone.`]})}),`\n`,_jsx(_components.p,{children:`Beyond that, the layers compose freely:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`CSS composes with everything.`}),` `,_jsx(_components.code,{children:`--velt-*`}),` variables apply globally, so theming sits on top of any other layer.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Different surfaces can use different layers.`}),` A wireframed dialog and a plain primitive sidebar don’t interfere.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The same surface can use more than one layer.`}),` You can render a `,_jsx(_components.code,{children:`VeltCommentDialog`}),` primitive `,_jsx(_components.em,{children:`and`}),` wireframe a single piece of that same dialog. Leaf pieces have no sub-components, so their wireframe is the only way to restructure them, which makes this combination necessary rather than exotic.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Mixing doesn’t suspend each layer’s own rules: wireframe interactivity limits and headless cost still apply. Picking a layer `,_jsx(_components.em,{children:`more expensive`}),` than the design needs is the one real mistake here, and the `,_jsx(_components.a,{href:`/ui-customization/decision-tree#when-a-layer-breaks-down--escalate`,children:`escalation signs`}),` tell you when you’ve done it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-combinations`,children:`Common combinations`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Combination`}),_jsx(_components.th,{children:`What it looks like`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`CSS + Primitives`})}),_jsxs(_components.td,{children:[`Drop in Velt components, toggle features with props, wrap in your UI library, theme with `,_jsx(_components.code,{children:`--velt-*`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`CSS + Wireframes`})}),_jsx(_components.td,{children:`Override the slots you need, theme the result with one stylesheet. The most common combination in practice.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Wireframes + Primitives`})}),_jsx(_components.td,{children:`Wireframe one surface and use another as a plain primitive. Or use a primitive on one surface and wireframe a leaf piece of it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Wireframes + Headless`})}),_jsxs(_components.td,{children:[`Wireframe the visible comment UI, and use a read hook to render something in `,_jsx(_components.em,{children:`your`}),` chrome (unread badge, counts, a custom filter control).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Headless only`})}),_jsx(_components.td,{children:`No Velt UI at all; you render everything from hooks.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`a-concrete-mixed-setup`,children:`A concrete mixed setup`}),`\n`,_jsxs(_components.p,{children:[`Dialog = `,_jsx(_components.strong,{children:`wireframe`}),`, sidebar = `,_jsx(_components.strong,{children:`primitive`}),`, badge = `,_jsx(_components.strong,{children:`headless`}),`, all themed with `,_jsx(_components.strong,{children:`CSS`}),`, one `,_jsx(_components.code,{children:`\u003cVeltWireframe>`}),`.`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`React / Next.js`,id:`react-%2F-next-js`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`tsx`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 1) Global theme (CSS): applies to everything`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"./velt/ui-customization/styles.css\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 2) One wireframe registry (custom dialog layout)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#4EC9B0`},children:`VeltCustomization`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`/* the single \u003cVeltWireframe> */`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 3) Live feature components`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#4EC9B0`},children:`VeltComments`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` shadowDom`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`/* renders dialogs via the wireframe */`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#4EC9B0`},children:`VeltCommentsSidebar`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` shadowDom`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`/* default sidebar = primitive */`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 4) A headless extra in your own header`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` HeaderBadge`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // returns an object ({ count } | null): read .count, don't render the object`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` unread`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useUnreadCommentCountOnCurrentDocument`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`span`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` className`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"badge\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unread`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`count`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`span`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),_jsx(Tab,{title:`Other Frameworks`,id:`other-frameworks`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`23`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`23`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`\u003c!-- 1) Global theme (CSS): applies to everything -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`link`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` rel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"stylesheet\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` href`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/velt/ui-customization/styles.css\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`\u003c!-- 2) One wireframe registry (custom dialog layout) -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`velt-wireframe`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` style`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"display:none;\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` \u003c!-- your feature wireframes -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`velt-wireframe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`\u003c!-- 3) Live feature components -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`velt-comments`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` shadow-dom`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"false\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`velt-comments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`velt-comments-sidebar`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` shadow-dom`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"false\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`velt-comments-sidebar`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`\u003c!-- 4) A headless extra in your own header -->`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`span`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"badge\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"badge\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`span`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` commentElement`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Velt`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getCommentElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// emits an object ({ count } | null): read .count`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` subscription`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` commentElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getUnreadCommentCountOnCurrentDocument`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`().`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`subscribe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`unread`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getElementById`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'badge'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`textContent`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` unread`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`count`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`subscription`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`unsubscribe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})})})]}),`\n`,_jsxs(_components.p,{children:[`In React, `,_jsx(_components.code,{children:`VeltCustomization`}),` is `,_jsx(_components.strong,{children:`your own`}),` wrapper component: the single file that holds your `,_jsx(_components.code,{children:`\u003cVeltWireframe>`}),` registry and CSS import, per the `,_jsx(_components.a,{href:`/ui-customization/setup#set-up-the-folder-structure`,children:`recommended folder structure`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-it-can-and-can’t-do`,children:`What it can and can’t do`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`✅ Combining can`}),_jsx(_components.th,{children:`❌ Combining can’t`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Mix CSS, wireframes, primitives, and headless `,_jsx(_components.strong,{children:`per feature/surface`}),` in one app`]}),_jsxs(_components.td,{children:[`Use more than one `,_jsx(_components.code,{children:`\u003cVeltWireframe>`}),` registry cleanly: keep it to exactly `,_jsx(_components.strong,{children:`one`}),` per app`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Layer CSS theming on top of `,_jsx(_components.em,{children:`any`}),` other layer (variables apply globally)`]}),_jsxs(_components.td,{children:[`Justify a layer `,_jsx(_components.strong,{children:`more expensive`}),` than the design needs`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Use multiple layers on the `,_jsx(_components.strong,{children:`same surface`}),` (e.g. primitive dialog + wireframe leaf)`]}),_jsx(_components.td,{children:`Escape each layer’s own rules: wireframe interactivity limits and headless cost still apply`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Pick the cheapest viable layer per piece via the `,_jsx(_components.a,{href:`/ui-customization/decision-tree`,children:`decision tree`})]}),_jsx(_components.td,{})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`checklist`,children:`Checklist`}),`\n`,_jsxs(_components.ul,{className:`contains-task-list`,children:[`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`One `,_jsx(_components.code,{children:`\u003cVeltWireframe>`}),` total.`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`Cheapest viable layer chosen per feature and per piece (ran the decision tree on each).`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`Each piece’s layer chosen intentionally; same-surface mixing is fine.`]}),`\n`,_jsxs(_components.li,{className:`task-list-item`,children:[_jsx(_components.input,{type:`checkbox`,disabled:true}),` `,`One shared stylesheet for all `,_jsx(_components.code,{children:`--velt-*`}),` theming and `,_jsx(_components.code,{children:`!important`}),` overrides.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Combining approaches (mix-and-match)","sidebarTitle":"Combining approaches","description":"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.","href":"/ui-customization/combining-approaches"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The rules","slug":"the-rules","depth":2,"children":[]},{"title":"Common combinations","slug":"common-combinations","depth":2,"children":[]},{"title":"A concrete mixed setup","slug":"a-concrete-mixed-setup","depth":2,"children":[]},{"title":"What it can and can’t do","slug":"what-it-can-and-can’t-do","depth":2,"children":[]},{"title":"Checklist","slug":"checklist","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/velt/752c38235fc975ab/reb2b-tracking.js","/docs/_mintlify/custom/velt/39475307ed77f9b2/signals-tracking.js"],"subdomain":"velt","siteName":"Velt","title":"Combining approaches (mix-and-match) - Velt","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-05T06:28:07.348Z","originalFileLocation":"ui-customization/combining-approaches.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Velt\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Combining approaches (mix-and-match) - Velt\">\u003cmeta data-mint-head property=\"og:description\" content=\"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Velt\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://velt.dev/docs/ui-customization/combining-approaches\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://firebasestorage.googleapis.com/v0/b/snippyly.appspot.com/o/external%2Fvelt_docs.png?alt=media\u0026amp;token=9e4502da-66ef-4005-9124-dbc76f04b1fd\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Combining approaches (mix-and-match) - Velt\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://firebasestorage.googleapis.com/v0/b/snippyly.appspot.com/o/external%2Fvelt_docs.png?alt=media\u0026amp;token=9e4502da-66ef-4005-9124-dbc76f04b1fd\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/velt/XJwux-wDtXKfbtc-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Velt\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#272728\">\u003clink data-mint-head rel=\"canonical\" href=\"https://velt.dev/docs/ui-customization/combining-approaches\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/ui-customization/combining-approaches.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://velt.dev/#organization\",\"name\":\"Velt\",\"url\":\"https://velt.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/velt/gY7ilEx2g4g3-HVe/velt-logo-big-light.png?fit=max\u0026auto=format\u0026n=gY7ilEx2g4g3-HVe\u0026q=85\u0026s=c75fd62a074f53174a364509b4363fdc\"}},{\"@type\":\"WebSite\",\"@id\":\"https://velt.dev/docs#website\",\"name\":\"Velt\",\"url\":\"https://velt.dev/docs\",\"publisher\":{\"@id\":\"https://velt.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://velt.dev/docs/ui-customization/combining-approaches#webpage\",\"url\":\"https://velt.dev/docs/ui-customization/combining-approaches\",\"name\":\"Combining approaches (mix-and-match)\",\"description\":\"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.\",\"dateModified\":\"2026-08-05T06:28:07.348Z\",\"isPartOf\":{\"@id\":\"https://velt.dev/docs#website\"},\"breadcrumb\":{\"@id\":\"https://velt.dev/docs/ui-customization/combining-approaches#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://velt.dev/docs/ui-customization/combining-approaches#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Approaches\",\"item\":\"https://velt.dev/docs/ui-customization/styling\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Combining approaches (mix-and-match)\",\"item\":\"https://velt.dev/docs/ui-customization/combining-approaches\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://velt.dev/docs/ui-customization/combining-approaches#article\",\"headline\":\"Combining approaches (mix-and-match)\",\"name\":\"Combining approaches (mix-and-match)\",\"description\":\"Mix CSS, wireframes, primitives, and headless hooks safely across Velt UI surfaces.\",\"url\":\"https://velt.dev/docs/ui-customization/combining-approaches\",\"mainEntityOfPage\":{\"@id\":\"https://velt.dev/docs/ui-customization/combining-approaches#webpage\"},\"image\":\"https://firebasestorage.googleapis.com/v0/b/snippyly.appspot.com/o/external%2Fvelt_docs.png?alt=media\u0026token=9e4502da-66ef-4005-9124-dbc76f04b1fd\",\"dateModified\":\"2026-08-05T06:28:07.348Z\",\"publisher\":{\"@id\":\"https://velt.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://velt.dev/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Velt\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Velt","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/get-started/overview"}]},{"tab":"UI Customization","groups":[{"group":"Concepts","pages":[{"title":"Velt UI Customization Guide","sidebarTitle":"Overview","href":"/ui-customization/overview"},{"title":"How Velt customization works","sidebarTitle":"How it works","href":"/ui-customization/how-it-works"},{"title":"Choosing an approach","sidebarTitle":"Decision tree","href":"/ui-customization/decision-tree"},{"title":"Setup","href":"/ui-customization/setup"}]},{"group":"Approaches","pages":[{"title":"CSS","sidebarTitle":"CSS","href":"/ui-customization/styling"},{"group":"Wireframes","pages":[{"title":"Wireframes Overview","sidebarTitle":"Overview","href":"/ui-customization/layout"},{"title":"Setup Wireframes","href":"/ui-customization/wireframes/setup-wireframes"},{"title":"Layout Customization","href":"/ui-customization/wireframes/layout-customization"},{"title":"Template Variables","href":"/ui-customization/template-variables"},{"title":"Conditional Templates","href":"/ui-customization/conditional-templates"},{"title":"Conditional Classes","href":"/ui-customization/conditional-classes"},{"title":"Context: show your app's data in comments","sidebarTitle":"Context","href":"/ui-customization/context"},{"title":"Action Components","href":"/ui-customization/wireframes/action-components"}]},{"title":"Primitives","sidebarTitle":"Primitives","href":"/ui-customization/primitives"},{"title":"Headless","sidebarTitle":"Headless","description":"Build fully custom Velt UI with headless hooks, data, and actions.","href":"/ui-customization/headless"},{"title":"Combining approaches (mix-and-match)","sidebarTitle":"Combining approaches","href":"/ui-customization/combining-approaches"},{"title":"Accessibility, localization, and responsive UI","sidebarTitle":"Accessibility \u0026 localization","description":"Keep Velt customizations accessible, translated, RTL-ready, and usable on mobile, whichever approach you use.","href":"/ui-customization/accessibility-and-localization"},{"title":"Debugging: when you're blocked","sidebarTitle":"Debugging","href":"/ui-customization/debugging"},{"title":"Customize by Feature","sidebarTitle":"Customize by Feature","href":"/ui-customization/customize-by-feature"}]},{"group":"Components: Async Collaboration","pages":[{"group":"Comments","pages":[{"group":"Comment Dialog","pages":[{"title":"Comment Dialog Customization","sidebarTitle":"Overview","href":"/ui-customization/features/async/comments/comment-dialog/overview"},{"title":"Comment Dialog Wireframes","sidebarTitle":"Wireframes","href":"/ui-customization/features/async/comments/comment-dialog/wireframes"},{"title":"Comment Dialog — Structure","sidebarTitle":"Structure","href":"/ui-customization/features/async/comments/comment-dialog-structure"},{"title":"Comment Dialog Wireframe Variables","sidebarTitle":"Template Variables","href":"/ui-customization/features/async/comments/comment-dialog/wireframe-variables"},{"title":"Comment Dialog Primitives","sidebarTitle":"Primitives","href":"/ui-customization/features/async/comments/comment-dialog/primitives"}]},{"group":"Comment Sidebar","pages":[{"title":"Comment Sidebar v1 Wireframes","href":"/ui-customization/features/async/comments/comment-sidebar/comment-sidebar-components"},{"title":"Comment Sidebar v2 Wireframes","href":"/ui-customization/features/async/comments/comment-sidebar/comment-sidebar-v2-wireframes"},{"title":"Comment Sidebar Wireframe Variables","href":"/ui-customization/features/async/comments/comment-sidebar/comment-sidebar-wireframe-variables"},{"title":"Comment Sidebar V2 Primitives","href":"/ui-customization/features/async/comments/comment-sidebar/comment-sidebar-v2-primitives"}]},{"group":"Comment Sidebar Button","pages":[{"title":"Comments Sidebar Button Wireframes","href":"/ui-customization/features/async/comments/comment-sidebar-button/wireframes"},{"title":"Comment Sidebar Button Wireframe Variables","href":"/ui-customization/features/async/comments/comment-sidebar-button/wireframe-variables"},{"title":"Comments Sidebar Button Primitives","href":"/ui-customization/features/async/comments/comment-sidebar-button/primitives"}]},{"group":"Standalone Components (DIY)","pages":[{"title":"Comment Composer","href":"/ui-customization/features/async/comments/standalone-components/comment-composer"},{"title":"Comment Thread","href":"/ui-customization/features/async/comments/standalone-components/comment-thread"},{"group":"Comment Pin","pages":[{"title":"Comment Pin Wireframes","href":"/ui-customization/features/async/comments/comment-pin/wireframes"},{"title":"Comment Pin Primitives","href":"/ui-customization/features/async/comments/comment-pin/primitives"}]}]},{"group":"Inline Comments Section","pages":[{"title":"Inline Comments Section Wireframes","href":"/ui-customization/features/async/comments/inline-comments-section/wireframes"},{"title":"Inline Comments Section Wireframe Variables","href":"/ui-customization/features/async/comments/inline-comments-section/wireframe-variables"},{"title":"Inline Comments Section Primitives","href":"/ui-customization/features/async/comments/inline-comments-section/primitives"}]},{"group":"Comment Tool","pages":[{"title":"Comment Tool","href":"/ui-customization/features/async/comments/comment-tool"},{"title":"Comment Tool Wireframe Variables","href":"/ui-customization/features/async/comments/comment-tool-wireframe-variables"}]},{"group":"Autocomplete","pages":[{"title":"@Mentions \u0026 Autocomplete","sidebarTitle":"Mentions \u0026 autocomplete","href":"/ui-customization/features/mentions-and-autocomplete"},{"title":"Autocomplete Wireframe Variables","href":"/ui-customization/features/async/comments/autocomplete-wireframe-variables"}]},{"group":"Comment Bubble","pages":[{"title":"Comment Bubble Wireframes","href":"/ui-customization/features/async/comments/comment-bubble/wireframes"},{"title":"Comment Bubble Wireframe Variables","href":"/ui-customization/features/async/comments/comment-bubble/wireframe-variables"},{"title":"Comment Bubble Primitives","href":"/ui-customization/features/async/comments/comment-bubble/primitives"}]},{"title":"Comment Player Timeline","href":"/ui-customization/features/async/comments/comment-player-timeline"},{"title":"Confirmation Dialog","href":"/ui-customization/features/async/comments/confirm-dialog"},{"group":"Multithread Comments","pages":[{"title":"MultiThread Comment Dialog Wireframes","href":"/ui-customization/features/async/comments/multithread-comments/wireframes"},{"title":"Multithread Comments Wireframe Variables","href":"/ui-customization/features/async/comments/multithread-comments/wireframe-variables"},{"title":"MultiThread Comment Dialog Primitives","href":"/ui-customization/features/async/comments/multithread-comments/primitives"}]},{"title":"Persistent Comment Mode Banner","href":"/ui-customization/features/async/comments/persistent-comment-mode-banner"},{"group":"Text Comment","pages":[{"title":"Text Comment Wireframe Variables","href":"/ui-customization/features/async/comments/text-comment-wireframe-variables"},{"title":"Text Comment Primitives","href":"/ui-customization/features/async/comments/text-comment-primitives"},{"group":"Text Comment Tool","pages":[{"title":"Text Comment Tool Wireframes","href":"/ui-customization/features/async/comments/text-comment/text-comment-tool/wireframes"},{"title":"Text Comment Tool Primitives","href":"/ui-customization/features/async/comments/text-comment/text-comment-tool/primitives"}]},{"group":"Text Comment Toolbar","pages":[{"title":"Text Comment Toolbar Wireframes","href":"/ui-customization/features/async/comments/text-comment/text-comment-toolbar/wireframes"},{"title":"Text Comment Toolbar Primitives","href":"/ui-customization/features/async/comments/text-comment/text-comment-toolbar/primitives"}]}]},{"title":"Velt Video Player","href":"/ui-customization/features/async/comments/comment-video-player"}]},{"group":"In-app Notifications","pages":[{"title":"Notifications","sidebarTitle":"Overview","href":"/ui-customization/features/notifications"},{"group":"Notifications Tool","pages":[{"title":"Notifications Tool Wireframes","href":"/ui-customization/features/async/notifications/notifications-tool/wireframes"},{"title":"Notifications Tool Wireframe Variables","href":"/ui-customization/features/async/notifications/notifications-tool/wireframe-variables"},{"title":"Notifications Tool Primitives","href":"/ui-customization/features/async/notifications/notifications-tool/primitives"}]},{"group":"Notifications Panel","pages":[{"title":"Notifications Panel Wireframes","href":"/ui-customization/features/async/notifications/notifications-panel/wireframes"},{"title":"Notifications Panel Wireframe Variables","href":"/ui-customization/features/async/notifications/notifications-panel/wireframe-variables"},{"title":"Notifications Panel Primitives","href":"/ui-customization/features/async/notifications/notifications-panel/primitives"}]}]},{"group":"Recorder","pages":[{"title":"Recorder \u0026 Transcription","sidebarTitle":"Overview","href":"/ui-customization/features/recorder-and-transcription"},{"title":"Recorder Wireframe Variables","href":"/ui-customization/features/async/recorder/wireframe-variables"},{"title":"Control Panel","href":"/ui-customization/features/async/recorder/control-panel"},{"title":"Media Source Settings","href":"/ui-customization/features/async/recorder/media-source-settings"},{"title":"Recorder Player Expanded","href":"/ui-customization/features/async/recorder/recorder-player-expanded"},{"title":"Recorder player","href":"/ui-customization/features/async/recorder/recorder-player"},{"title":"Recorder Tool","href":"/ui-customization/features/async/recorder/recorder-tool"},{"title":"Recording Preview Steps Dialog","href":"/ui-customization/features/async/recorder/recording-preview-steps-dialog"},{"title":"Subtitles","href":"/ui-customization/features/async/recorder/subtitles"},{"title":"Transcription","href":"/ui-customization/features/async/recorder/transcription"},{"title":"Transcription Wireframe Variables","href":"/ui-customization/features/async/recorder/transcription-wireframe-variables"},{"title":"Video Editor","href":"/ui-customization/features/async/recorder/video-editor"}]},{"group":"Reactions","pages":[{"title":"Reactions","sidebarTitle":"Overview","href":"/ui-customization/features/reactions"},{"title":"Inline Reactions Section","href":"/ui-customization/features/async/inline-reactions"},{"title":"Reactions Wireframe Variables","href":"/ui-customization/features/async/reactions-wireframe-variables"}]},{"group":"Rewriter","pages":[{"title":"Rewriter Wireframe Variables","href":"/ui-customization/features/async/rewriter/wireframe-variables"}]},{"title":"Page annotations (Tags, Arrows, Areas)","sidebarTitle":"Annotations \u0026 tags","href":"/ui-customization/features/annotations-tags-arrows-areas"},{"group":"Arrows","pages":[{"title":"Arrows Wireframe Variables","href":"/ui-customization/features/async/arrows/wireframe-variables"},{"title":null,"href":"/ui-customization/features/async/arrows/parts"},{"title":"Slots","href":"/ui-customization/features/async/arrows/slots"},{"title":null,"href":"/ui-customization/features/async/arrows/variables"},{"title":"Custom Button","href":"/ui-customization/features/async/arrows/custom-button"}]},{"group":"Area","pages":[{"title":"Area Wireframe Variables","href":"/ui-customization/features/async/area/wireframe-variables"}]},{"group":"Tag","pages":[{"title":"Tag Wireframe Variables","href":"/ui-customization/features/async/tag/wireframe-variables"}]},{"group":"View Analytics","pages":[{"title":"View Analytics Wireframe Variables","href":"/ui-customization/features/async/view-analytics/wireframe-variables"}]},{"group":"Activity Logs","pages":[{"title":"Activity Log","sidebarTitle":"Overview","href":"/ui-customization/features/activity-log"},{"title":"Activity Logs Wireframes","href":"/ui-customization/features/async/activity-logs/activity-logs-wireframes"},{"title":"Activity Logs Wireframe Variables","href":"/ui-customization/features/async/activity-logs/activity-logs-wireframe-variables"},{"title":"Activity Logs Primitives","href":"/ui-customization/features/async/activity-logs/activity-logs-primitives"}]}]},{"group":"Components: Realtime Collaboration","pages":[{"group":"Presence","pages":[{"title":"Presence","href":"/ui-customization/features/realtime/presence"},{"title":"Presence Wireframe Variables","href":"/ui-customization/features/realtime/presence-wireframe-variables"}]},{"group":"Cursors","pages":[{"title":"Cursors","href":"/ui-customization/features/realtime/cursors"},{"title":"Cursors Wireframe Variables","href":"/ui-customization/features/realtime/cursors-wireframe-variables"}]},{"title":"Single Editor Mode","href":"/ui-customization/features/realtime/single-editor-mode"},{"group":"Live Selection","pages":[{"title":"Live Selection","href":"/ui-customization/features/realtime/live-selection"},{"title":"Live Selection Wireframe Variables","href":"/ui-customization/features/realtime/live-selection-wireframe-variables"}]},{"group":"Huddle","pages":[{"title":"Huddle Wireframe Variables","href":"/ui-customization/features/realtime/huddle/wireframe-variables"},{"title":null,"href":"/ui-customization/features/realtime/huddle/parts"},{"title":"Slots","href":"/ui-customization/features/realtime/huddle/slots"},{"title":null,"href":"/ui-customization/features/realtime/huddle/variables"}]}]},{"group":"Reference","pages":[{"group":"Components","pages":[{"title":"Component catalog","sidebarTitle":"Component catalog","href":"/ui-customization/reference/component-catalog"},{"title":"Component definitions","sidebarTitle":"Component glossary","href":"/ui-customization/reference/component-definitions"},{"title":"Wireframe components \u0026 slot trees (complete)","sidebarTitle":"Wireframe components","href":"/ui-customization/reference/wireframe-components"},{"title":"Primitives (complete component list)","sidebarTitle":"Primitives catalog","href":"/ui-customization/reference/primitives"}]},{"group":"Props, APIs \u0026 Data","pages":[{"title":"Props (every Velt component)","sidebarTitle":"Props","href":"/ui-customization/reference/props"},{"title":"Public API Method Reference","sidebarTitle":"APIs","href":"/ui-customization/reference/apis"},{"title":"Headless hooks","sidebarTitle":"Hooks","href":"/ui-customization/reference/hooks"},{"title":"Events (all features)","sidebarTitle":"Events","href":"/ui-customization/reference/events"},{"title":"Data models","sidebarTitle":"Data models","href":"/ui-customization/reference/data-models"},{"title":"Feature flags: what's hidden by default \u0026 how to enable it","sidebarTitle":"Feature flags","href":"/ui-customization/reference/feature-flags"}]},{"group":"Styling","pages":[{"title":"CSS variables","sidebarTitle":"CSS variables","href":"/ui-customization/reference/css-variables"},{"title":"CSS classes (per component, with conditions)","sidebarTitle":"CSS classes","href":"/ui-customization/reference/css-classes"}]},{"group":"Behaviors","pages":[{"title":"Behaviors \u0026 composition","sidebarTitle":"Behaviors","href":"/ui-customization/reference/behaviors"},{"group":"Behavior Details","pages":[{"title":"\u003cVeltComments>","sidebarTitle":"Comments core","href":"/ui-customization/reference/behaviors/comments-core"},{"title":"Comment Dialog \u0026 Inline","sidebarTitle":"Comment dialog","href":"/ui-customization/reference/behaviors/dialog"},{"title":"Comments Sidebar","sidebarTitle":"Comments sidebar","href":"/ui-customization/reference/behaviors/sidebar"},{"title":"Notifications","sidebarTitle":"Notifications","href":"/ui-customization/reference/behaviors/notifications"},{"title":"Pins, Bubbles \u0026 Tools","sidebarTitle":"Pins \u0026 tools","href":"/ui-customization/reference/behaviors/pins-tools"},{"title":"Presence, Cursors \u0026 Reactions","sidebarTitle":"Presence \u0026 reactions","href":"/ui-customization/reference/behaviors/presence-reactions"},{"title":"Recorder, Video \u0026 Huddle","sidebarTitle":"Recorder \u0026 huddle","href":"/ui-customization/reference/behaviors/recorder-huddle"}]}]}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/rest-apis/v2/organizations/add-organizations"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/version-6/sdk-changelog"}]},{"tab":"Examples","href":"https://velt.dev/examples"},{"tab":"DevTools","href":"https://velt.dev/devtools"}]},"basePath":"","title":"Combining approaches (mix-and-match) - Velt","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":[],"chunks":[]}