PHPackages                             combat-ui/core-opendxp-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. combat-ui/core-opendxp-bundle

ActiveOpendxp-bundle[Framework](/categories/framework)

combat-ui/core-opendxp-bundle
=============================

OpenDXP wrapper bundle for Combat UI: curated, configurable areabricks built on the Combat UI Core Symfony bundle

0.3.1(2d ago)013↓50%GPL-3.0-or-laterPHP ~8.4.0 || ~8.5.0

Since Jul 7Compare

[ Source](https://github.com/Combat-Marketing/combat-ui-opendxp-bundle)[ Packagist](https://packagist.org/packages/combat-ui/core-opendxp-bundle)[ RSS](/packages/combat-ui-core-opendxp-bundle/feed)WikiDiscussions Synced today

READMEChangelog (4)Dependencies (9)Versions (5)Used By (0)

Combat UI — OpenDXP Bundle
==========================

[](#combat-ui--opendxp-bundle)

OpenDXP wrapper bundle for [Combat UI](https://www.combat.nl). It ships a curated set of configurable **areabricks** built on top of the `combat-ui/core-bundle` Symfony bundle, so editors can compose pages from Combat UI sections and components directly in the OpenDXP document editor.

Requirements
------------

[](#requirements)

- PHP 8.4 or 8.5
- OpenDXP ^1.0
- `combat-ui/core-bundle` (installed automatically as a dependency)

Installation
------------

[](#installation)

```
composer require combat-ui/core-opendxp-bundle
```

The bundle is discovered through its composer type (`opendxp-bundle`) and registers its dependencies (`CombatUICoreBundle`, `WebpackEncoreBundle`) itself. Enable and install it from the OpenDXP bundle manager, or via CLI:

```
bin/console opendxp:bundle:enable CombatUIOpenDxpBundle
bin/console opendxp:bundle:install CombatUIOpenDxpBundle
bin/console assets:install
```

`assets:install` publishes the prebuilt Combat UI Encore build to `public/bundles/combatuicore/build`; the core bundle wires the `combat_ui` Encore build there automatically.

Layout integration
------------------

[](#layout-integration)

Load the Combat UI assets once in your document layout and expose an areablock for the bricks:

```

        {{ cui_assets() }}
        {{ cui_theme_tokens() }}

            {{ opendxp_areablock('content', {
                allowed: [
                    'cui-hero', 'cui-page-intro', 'cui-cta', 'cui-content', 'cui-card-grid',
                    'cui-feature-grid', 'cui-stats', 'cui-logo-strip', 'cui-team', 'cui-events',
                    'cui-contact', 'cui-accordion', 'cui-tabs', 'cui-carousel', 'cui-media', 'cui-map',
                ]
            }) }}

```

The bricks are full-width bands that bring their own `.cui-container` wrappers, so place the areablock in a full-bleed region of the layout rather than inside another container.

Theme editor
------------

[](#theme-editor)

The bundle adds a **Combat UI Theme** entry to the admin **Extras** menu (users need the `combat_ui_theme` permission, registered on install). The panel lists every Combat UI design token, grouped as in the framework's `tokens.css` — typography, colors, spacing, surfaces, and so on — with the framework default shown as placeholder. Color tokens take a separate **light** and **dark** value; the dark value feeds both the `prefers-color-scheme: dark` media query and the explicit `[data-theme="dark"]` pin, exactly mirroring the framework's selector structure.

Saved overrides are stored in the OpenDXP settings store (scope `combat_ui`) and served as a generated stylesheet from `/cui/theme.css`. Add `{{ cui_theme_tokens() }}` to your layout **after**`{{ cui_assets() }}` — it renders a `` with a content hash (long-lived immutable caching) and renders nothing while no token is overridden. Because tokens are CSS custom properties, no rebuild of the framework CSS is involved; the override stylesheet simply wins by cascade order.

The token schema (groups, descriptions, defaults) is read from the `blocks.json` manifest shipped with the core bundle's prebuilt assets, so the editor stays in sync with the framework version you have installed.

Bricks
------

[](#bricks)

All bricks live in the `Combat UI` namespace (`src/Document/Areabrick`) with templates under `templates/areas//view.html.twig`. Structural options (variant, tone, spacing, width, …) are configured through the brick dialog (pencil icon); content is edited inline where possible.

BrickIDDialog optionsInline editablesHero`cui-hero`variant (split/background/overlay/text), title tag, alignment, width, media position, eyebrow, title, lead, background imageWYSIWYG body, media image, primary/secondary linksPage intro`cui-page-intro`variant (landing/case/vacancy/campaign/full-bleed), tone, alignment, title tag, eyebrow, title, lead, meta linesWYSIWYG body, primary/secondary linksCall to action`cui-cta`variant (simple/split/full-bleed/sticky), tone, title tag, section spacing, eyebrow, title, leadWYSIWYG body, primary/secondary linksRich text`cui-content`section spacing, tone, container widthWYSIWYG proseCard grid`cui-card-grid`columns, gap, card style (featured/compact/flat/borderless), category filter chips + label, section spacing, tone, container widthper card: image, category, title, excerpt, linkFeature grid`cui-feature-grid`columns, gap, alignment, section optionsper feature: icon, title, copyStatistics`cui-stats`columns, gap, alignment, section optionsper stat: value, labelLogo strip`cui-logo-strip`section optionsper logo: image, name fallbackTeam`cui-team`card style (flat/borderless/leadership), photo shape, alignment, columns, gap, section optionsper member: photo, name, role, department, bio, emailEvents`cui-events`columns, card style (featured/compact), section optionsper event: date, title, category, time, location, status, excerpt, linkContact cards`cui-contact`columns, card style (flat/borderless/inverse), alignment, section optionsper card: eyebrow, title, copy, email, phone, linkAccordion`cui-accordion`variant (ghost), open first itemper item: summary, WYSIWYG bodyTabs`cui-tabs`—per tab: label, WYSIWYG contentCarousel`cui-carousel`autoplay, interval, transition, looping, arrows/pagination, widthper slide: image, captionMedia`cui-media`style (figure / full-width / banner / media card / overlay card), aspect ratio, optional video, media link (banner: whole image, card: media region), eyebrow, title, container width, alignment, row orientation, reversed order (content before media), card chrome (flat/borderless), scrim, corner radiusimage; caption (figure); WYSIWYG body + links (card/overlay)Map`cui-map`center, zoom, clustering, fit bounds, scroll-wheel zoomper marker: label, latitude, longitude### Notes

[](#notes)

- The card/section bricks (card grid, feature grid, statistics, logo strip, team, events, contact, media) render through the curated `@CombatUICore` component templates and therefore need a `combat-ui/core-bundle` release that ships them (newer than 0.6.1.2). Until that release, the local test suite runs against a sibling `combat-ui-bundle` checkout.
- Brick auto-registration relies on OpenDXP's default `documents.areas.autoload: true`; if you disabled it, tag the brick classes with `opendxp.area.brick` yourself.
- Image editables render the original asset by default. Override a brick template in your app (`templates/bundles/CombatUIOpenDxpBundle/areas//view.html.twig`) to apply thumbnail configurations.
- Brand-wide component defaults (e.g. default button variant) can be set via the core bundle's `combat_ui_core.component_defaults` configuration.

Development
-----------

[](#development)

Run the Codeception unit suite:

```
composer install
composer test          # codecept run Unit
```

The suite covers the bundle contract (nice name, dependent bundles, container extension), every brick's `AsAreabrick` id, template location and dialog-box editables, and renders each brick view template through the real Combat UI core templates — with the `opendxp_*` editables stubbed — in both frontend and editmode.

License
-------

[](#license)

GPL-3.0-or-later — see [LICENSE](LICENSE).

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance99

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

4

Last Release

2d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/682256?v=4)[Christiaan van Dam](/maintainers/h4rdc0m)[@h4rdc0m](https://github.com/h4rdc0m)

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/combat-ui-core-opendxp-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/combat-ui-core-opendxp-bundle/health.svg)](https://phpackages.com/packages/combat-ui-core-opendxp-bundle)
```

###  Alternatives

[nineinchnick/edatatables

Grid widget for the Yii Framework, wrapper for the DataTables jQuery plugin

173.2k](/packages/nineinchnick-edatatables)[link-cloud/fast-hyperf

LinkCloud Fast Hyperf

241.2k1](/packages/link-cloud-fast-hyperf)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
