spryker / zed-ui
ZedUi module
Requires
- php: >=8.3
- spryker/application-extension: ^1.0.0
- spryker/kernel: ^3.83.0
- spryker/symfony: ^3.0.0
- spryker/transfer: ^3.27.0
- spryker/translator: ^1.1.0
- spryker/twig: ^3.30.0
- spryker/twig-extension: ^1.0.0
- spryker/util-encoding: ^2.1.0
Requires (Dev)
Suggests
- spryker/container: If you want to use Twig plugins
- spryker/ui-components: If you want to use Spryker web components in HTML.
- spryker/zed-navigation: If you want to use the navigation.
Provides
None
Conflicts
None
Replaces
None
- 4.3.0
- 4.2.0
- 4.1.1
- 4.1.0
- 4.0.0
- 3.4.1
- 3.4.0
- 3.3.1
- 3.3.0
- 3.2.0
- 3.1.0
- dev-master / 3.0.x-dev
- 3.0.0
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.0
- 1.8.0
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.1
- 1.0.0
- 0.7.5
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.1
- 0.6.0
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.16
- 0.3.15
- 0.3.14
- 0.3.13
- 0.3.12
- 0.3.11
- 0.3.10
- 0.3.9
- 0.3.8
- 0.3.7
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.1
- 0.1.0
- dev-beta/frw-8430/master-enable-sniffers-for-3rd-party-modules
- dev-hotfix/testing-propel
- dev-beta/poc-contract-tests
- dev-beta/lazy_table_map_instantiation
- dev-beta/spryker-mini-api-framework
- dev-beta/glue-backend-prototype-v4
- dev-beta/te-9873-backend-glue-application-plagin-context
- dev-beta/te-9901-extend-glue-application-module
- dev-beta/mp-5445-merchant-products-are-no-buyable
- dev-tag-0.4.3
- dev-beta/security-to-spryker-symfony-3.3
- dev-beta/te-7948/dev-session
This package is auto-updated.
Last update: 2026-09-14 12:16:11 UTC
README
This module provides base UI components for Zed application.
Installation
composer require spryker/zed-ui
npm install
npm run build
Merchant Portal frontend builder
Since ZedUi 4.2.0 this module ships the Merchant Portal frontend build tooling at
src/Spryker/Zed/ZedUi/FrontendBuilder/. Projects no longer carry their own
frontend/merchant-portal/ directory, and ZedUi declares the whole @spryker/* dependency set for
every Merchant Portal module.
The generated configuration files
tsconfig.mp.json, tsconfig.mp.spec.json, tsconfig.mp.lint.json and angular.json live at your
project root, because the Angular CLI, ESLint and Jest all locate them by walking up from the working
directory. Their contents cannot ship in this module: the paths in them depend on where the core
modules are installed (src/Spryker/ZedUi in the Spryker monorepo, vendor/spryker/zed-ui in a
project). So the files stay at the root, and this module generates the values that depend on that.
In the three tsconfig.mp*.json files:
| Value | Owner |
|---|---|
compilerOptions.paths (@mp/*) |
generated — added, repointed and removed as core modules come and go |
include, files |
generated — the core and project globs, and the test setup file |
everything else (compilerOptions, angularCompilerOptions, exclude, extends) |
yours |
In angular.json, inside the merchant-portal project:
| Value | Owner |
|---|---|
build.options.customWebpackConfig.path, build.options.indexTransform |
generated — the builder entry points |
build.options.outputPath, build.options.baseHref |
generated from the builder settings, which are the single source for both |
build.options.tsConfig, test.options.tsConfig, test.options.config |
generated — the files above, and the packaged jest config |
build.options.assets entries rooted at the core directory, and the core entry of build.options.styles |
generated — your own entries are kept |
test.options.zoneless |
generated as false; @angular-builders/jest 22 defaults it to true, which would run your suite without zone.js change detection |
everything else — index, main, polyfills, fileReplacements, budgets, optimization flags, your assets and styles |
yours |
npm run mp:update:config performs the reconciliation, and postinstall runs it for you. A file
that does not exist yet is written in full; a file that exists keeps every value you set, along with
any @mp/* alias, include entry, asset root or stylesheet that this module does not generate. A
value it does generate belongs to it, so a hand edit is corrected on the next run.
Because the reconciliation is in place rather than a rewrite, what ng update or ng add writes
into angular.json survives it.
Commit all four files. The builder test suite fails when a committed file no longer matches what the generator would write, which is what catches a hand edit or a core module added without a regeneration.
Migrating a project
-
Node 24.15.0 or newer. Angular 22 requires
^22.22.3 || ^24.15.0 || >=26.0.0. Note that Node 25 is not supported by Angular 22 even though it satisfies a>=24.15.0range. -
Delete
frontend/merchant-portal/. Every file in it now lives in this module'sFrontendBuilder/. There is no shim. -
Run
npm run mp:update:config. It repointsangular.jsonat the vendor path for you — the builder entry points, the jest config,outputPath/baseHref, the core asset roots and core stylesheet, andtest.options.zoneless: false. Keep the file itself at your project root; the Angular CLI locates it only by walking up from the working directory. Yourindex,main,polyfills, budgets and optimization settings are left alone. See the section above for the full ownership split. Your Merchant Portal project has to be namedmerchant-portal, unless it is the only project in the file. -
Repoint the
mp:stylelintandmp:update:configscripts in your projectpackage.jsonat the same directory. -
Delete the per-module
package.jsonfiles under your own Merchant Portal modules. ZedUi owns the dependency set and npm workspace hoisting resolves it. -
TypeScript 6 configuration. In your project's
tsconfig.base.json:moduleResolution: "bundler", removebaseUrl, prefix everypathsvalue with./(including"*": ["./*"]), and set"strict": falseexplicitly — TypeScript 6 defaults it totrue. Without the./prefixes the compiler fails withTS5090: Non-relative paths are not allowed when 'baseUrl' is not set. The threetsconfig.mp*.jsonfiles are generated — see below — so you do not edit theirpathsby hand. -
Remove any
provideNzDateFnsAdapter()from your project'sAppModule. ng-zorro 22 no longer ships an implicit date adapter, so an unconfigured date picker throwsNullInjectorErrorat runtime.DefaultMerchantPortalConfigModulenow registers the adapter for you throughDefaultDateAdapterConfigModule, and a project that keeps its own provider only shadows it.The module resolves
provideNzDateFnsAdapteroff theng-zorro-antd/core/timenamespace instead of importing it by name, because ng-zorro 20 — still supported here — does not export it and keeps its implicit adapter. On ng-zorro 20 the module therefore provides nothing, which is what that version needs. Note this is a different abstraction from@spryker/utils.date.adapter.date-fns, which ZedUi also imports: that one implements Spryker's ownDateAdapter, not ng-zorro'sNzDateAdapter. -
Update
spryker/zed-uifirst, or together with the other Merchant Portal modules. Modules that no longer declare npm dependencies requirespryker/zed-ui: ^4.2.0, because an older ZedUi does not declare the consolidated set.
Staying on Angular 20
@spryker/* ranges are declared as ^old || ^new so Angular-20 projects keep working. npm does not
backtrack on peer conflicts — it selects the highest version satisfying the range and then fails if
the peers do not line up — so an unpinned install on Angular 20 can resolve the new major and abort
with ERESOLVE. Pin each @spryker/* package to its old major explicitly. A blanket ^3 is
wrong: actions.confirmation, datasource.dependable, datasource.trigger,
datasource.trigger.change, datasource.trigger.input and table.column.button-action are on the
^2.x line. The full per-package pin list is published in the Spryker documentation.
What the lint and test commands cover
mp:lint, mp:stylelint and mp:test report on the modules the running repository owns. In the
Spryker monorepo, where the core modules live in src/Spryker, that is the core modules together
with the project ones; in a project, where the core arrives in vendor/, it is the project modules
alone — installed code is not the project's to report on. Nothing has to be passed to select this:
the source layout the builder already detects decides it.
mp:stylelint takes -f to fix what is fixable and -p <path> to run over a single file.
Live reload
npm run mp:build:watch writes a build manifest alongside the bundles and injects a small polling
client, so an edited .ts or .less reloads the open Back Office page. Production and plain
development builds contain neither the client nor the manifest. Twig templates are not watched:
Zed caches them server-side, so a browser reload alone would not show the change.