Replace Jest with Vitest across the workspace. The brain and helm Angular suites
now run in a real browser (Playwright/Chromium via Vitest browser mode) so they
exercise real layout, focus, pointer events and computed styles that jsdom could
not. The cli, tools, mcp, registry and cli-smoke suites run on Vitest's node
environment.
- Add per-project vite configs and switch test targets to @nx/vitest:test
- Convert jest APIs to vi.* and jest module mocks to vi.mock with importOriginal
- Replace jest-axe with a browser-native axe-core helper and toHaveNoViolations
- Regenerate snapshots in vitest format (content unchanged, format-only)
- Remove all jest packages, configs, the preset and the @nx/jest target default
- Install Playwright Chromium in the CI unit job for the browser suites
Also fixes a brain avatar test that asserted inside a fire-and-forget setTimeout,
which passed vacuously under jsdom and only surfaced once a real browser loaded
the image.
Scaffolds real nx (monorepo + standalone) and angular-cli workspaces from the
locally published CLI, runs the generators, runs healthcheck, consumes a
generated component, and builds - covering library/entrypoint x
buildable/non-buildable plus an all-components cell. Runs each cell on its own
runner via a dedicated workflow with a required result check, and stays cheap on
unrelated PRs via a git-diff gate and an in-runner affected check. Adds a
`pnpm smoke` convenience script.
* feat(mcp): release and version mcp server alongside cli and brain
Wire the MCP server package into the release pipeline so it is published
and version-synced with the cli and brain packages. Add a
replace-mcp-version generator (invoked by auto-increment-version for
nightly and prepare-manual-release for manual), a release-mcp script,
and sync the package to the current alpha version.
Also drop the orphan scope:core tag from release-ui and list mcp in the
PR template's affected-packages section.
* refactor: document release schemas and harden version error handling
Fill in the empty titles and descriptions on the release generator and
executor schemas, and declare the newVersion option so the version
generators are self-documenting and CLI-invocable.
Make the version generators throw with actionable messages instead of
silently logging and returning, validate the brain version format in
auto-increment-version, and fix the misleading source-of-truth message
in replace-ui-version.
* fix: prevent shell injection in npm publish and correct version flag hints
Validate the TAG dist-tag and publish via execFileSync with an argument
array instead of interpolating it into a shell string, removing a
shell-injection vector in the npm-publish executor.
Correct the version generators' error messages to reference the actual
--newVersion / --new-version flag rather than the reserved --version.
Add a scheduled workflow that runs the update-contributors generator daily and
commits newly detected contributors, mirroring the nightly release setup. Also
add the five contributors the generator surfaced that were missing from the
README and the home page list.
* docs: add CLAUDE.md with repo conventions for agents
Documents the local CI checks to run before pushing, Conventional Commit
rules (including the commitlint scope enum), and populating the PR template.
* ci: cache Nx, run only affected, and parallelize to cut CI time
Without relying on Nx Cloud:
- shared composite setup action (pnpm + Node + install + Nx cache restore),
removing the duplicated install boilerplate across jobs
- persist the Nx computation cache via actions/cache so unchanged projects are
restored as cache hits instead of rebuilt/retested/relinted
- run nx affected (with nrwl/nx-set-shas) for lint/test/build/e2e instead of
run-many --all, so PRs only touch the projects they change
- unit no longer needs the build job, so it runs in parallel instead of waiting
~13 min for the build
- cancel superseded runs on the same ref via concurrency
- blobless full-history clone on the light jobs (keeps affected working)
* ci: run e2e in parallel instead of gating it on the docs build
The e2e suite runs cypress against storybook (its devServerTarget is
ui-storybook:static-storybook), so it is independent of the docs-app build and
no longer needs to wait ~13 min for it.
* perf: trim the docs-app vite build config
- reportCompressedSize: false (skip per-chunk gzip sizing)
- gate rollup-plugin-visualizer behind ANALYZE (was every build)
- drop the deprecated splitVendorChunkPlugin
- make prerender concurrency configurable (default 1; parallel prerender was a
net slowdown - the renders are CPU-bound single-thread SSR)
* ci: cache the cypress binary in the e2e job
* ci: exclude trpc-app-e2e from affected e2e (not a CI e2e suite)
* ci: restore cypress cache before install; harden prerender concurrency parse
* chore: drop prerender-concurrency experiment scaffolding and restore splitVendorChunkPlugin
Reverts two leftovers from the (rejected) parallel-prerender and Vite 8
experiments: prerender concurrency goes back to a hardcoded 1, and
splitVendorChunkPlugin is restored since it still works on Vite 6 and removing
it only changed chunking with no speed benefit.
* feat: better form control integration
- general a11y described by service
- hint and error stories
- datepicker value type
- mock resizeObserver causing select failure
- form desciption test failures
* feat: autocomplete and combobox
- re-implemented form integration based on latest implementation
* fix: error state
* fix: formatting
* chore: update snapshot
* fix: format
* fix: update snapshot
* fix: autocomplete stories
* fix: test
* fix: remove not needed effects
* fix: call onTouched when autocomplete focus out
* fix: evaluate only error state in field
* fix: fix slider classes and field integration
* fix: set correct error styles to input group
* feat: add native select field control support
* fix: implement field control
* fix: emit touched when blurred for combobox
* fix: add invalid support for combobox multiple
* fix: fix autcomplete search and input styles
* feat: improve control state data attributes and hlm-error
- render hlm-error if error presetn
- add touched, dirty and matches-spartan-invalid attributes
* feat: apply field control as host directive
* test: fix some control error stories WIP
* fix: lint issues w/ type imports and sort order
* chore: remove form-field package as it is replaced by field
* chore: update snapshot
* fix: fix autocomplete providers array and error story
* fix: fix select, field error and input group
* docs: fix reactive forms examples WIP
* feat: add healthcheck and migration for hlm-form-field to hlm-field
* fix: add value accessor to date-picker multi
* docs: update field for/id
* fix: fix checkbox and rename CVA providers
* fix: add and fix tests
* docs(field): update headings
* feat(autocomplete): add inputId
* feat(combobox): add input/button id
* chore: update snapshot
* docs(date-picker): use hlm field
* docs(field): add native-select example, simplify selectId
* docs: use hlm-field for date-picker blocks
* feat: update form field usage in autocomplete story
* fix(input): unit test and remove unused ngControl
* fix: comment out missing errorState in select
* feat: remove ng-* classes
* feat: remove unused code
* fix: comment out error in unit tests
* feat: set label for attribute automatically
* refactor: rename variable
* docs: add brain input and textarea docs
* fix: apply button styles in storybook
* fix: fix select test and add missing attributes
* feat: add attributes to switch
* fix: fix field e2e tests and lint errors
* chore: fix format
* fix: add optional chain
* feat(select): add controls and aria labels to brn-select-trigger
* fix: update default value for select demo
* docs(select): add form example
* chore: update snapshot
* fix(select): add optional chain for aria-invalid
* feat(select): update e2e test form attributes
* fix(input): form unit test
* fix(select): update unit test template, add HlmFieldControlDescribedBy to select trigger button
* fix(combobox): use new combobox template for unit test
* add hlmFieldControlDescribedBy to combobox trigger button
* chore: remove console log from unit test
* fix(checkbox): use buttonName instead of id
* fix: lint issue w/ import
* test: fix unit tests
* docs: add field date picker preview
* docs: fix blocks and reactive forms
* docs: improve control, field and forms docs
* feat: add provider for error matcher
* chore: rename var
* fix: replace aria-invalid in registry styles
* feat: move state to brn, add to combo tigger
* chore: format
* feat(combobox): apply form attributes on brnComboboxTrigger
* remove need for applyControlState
* chore: update snapshot
* docs: update container width for the responsive select demo
* fix: remove aria invalid and fix chips focus styles
* feat(field): move HlmFieldControlDescribedBy and HlmFieldA11yService into brain package
* chore: update snapshot
* feat(field): update id input handling, update styles
* docs: update form examples to required
* feat: add forceInvalid to brn-field and brn-checkbox
* allow overrides to data-invalid and data-matches-spartan-invalid
* fix: add error if ngControl.control is not defined
---------
Co-authored-by: Merlin <merlin.moos@oldendorff.com>
Co-authored-by: Toni Škobić <toni.skobic@gmail.com>
Co-authored-by: Marc Stammerjohann <8985933+marcjulian@users.noreply.github.com>
* feat(native-select): add native-select
* feat(native-select): add form control to native select
* fix(native-select): lint issues
* feat(native-select): remove conflicting select styles
* feat(native-select): update select icon class size and input, add primtive deps
* feat(native-select): update snapshot
* docs(native-select): update meta
* feat(native-select): split model into input, linkedSignal and output to avoid model change events
* feat(native-select): update access modifier
* feat(native-select): use model for value, but keep valueChange as separate output
* feat(autocomplete): add autocomplete component
* add example for async filter w/ new resource
* add example for form
* feat(autocomplete): update snapshot
* docs(autocomplete): rename page selector
* feat(autocomplete): change model to input, linkedSignal and output
* feat(autocomplete): add primitive dependencies for autocomplete
# Conflicts:
# libs/cli/src/generators/ui/primitive-deps.ts
* feat(autocomplete): copy hlm to cli
* docs(autocomplete): fix type
Co-authored-by: Ashley Hunter <ashley.hunter@hotmail.co.uk>
* feat(autocomplete): update inputs
Co-authored-by: Ashley Hunter <ashley.hunter@hotmail.co.uk>
* feat(autocomplete): adjust to input styles, add arrowDown to trigger options
* focus input on toggle button click
* fix(autocomplete): lint error
* feat(autocomplete): override hlm-command-search-input height
* feat(autocomplete): add loading state option to differentiate empty state
* feat(autocomplete): generate snapshot
* feat(autocomplete): use BrnPopover to trigger open/close
* remove syncing of the popover state
* docs(autocomplete): add api docs for helm
* feat(autocomplete): simplify styles by creating autocomplete specific command components
* feat(autocomplete): remove unused HlmCommand
* feat(autocomplete): add filter input for command, rename previous filter to search
* docs(autocomplete): remove unused form from async example
* feat(autocomplete): remove addition * from comments
* feat(autocomplete): generate snapshot
* feat(autocomplete): update searchChange comment
* feat(autocomplete): add inputs for loading and empty text
* feat(autocomplete): allow search input to be optional
* feat(autocomplete): add background to autocomplete
* feat(autocomplete): override command filter to always true
* feat(command): set command item to active on mouseenter, use host click listener
* feat(autocomplete): allow focus active on enter only when popover is open
* feat(autocomplete): update imports and dialog attachTo
* feat(autocomplete): add @spartan-ng/brain/autocomplete supporting value as T
* feat(autocomplete): update snapshot and remove focusActiveOnEnter from command
* feat(autocomplete): allow generic for HlmAutocomplete, add objects example with countries
* feat(autocomplete): focus first item when items change
* if ther eis not active item
* if active item is not in items
* if first item is not active item
* feat(autocomplete): use brnAutocomplete in hlm-autocomplete
* feat(autocomplete): cleanup BrnAutocomplete unused config and platform
* feat(autocomplete): move options and filter out, use only filteredOptions
* update examples
* fix(autocomplete): lint issue
* feat(autocomplete): update hlm/brain exports
* feat(autocomplete): use autocomplete list styles to set max height, update id in HlmAutocomplete
* feat(autocomplete): open popover keydown/toggle if there is a search term/options to show
* hide autocomplete list when filtered options are empty
* add aria-label input for the toggle button
* add class input for empty state
---------
Co-authored-by: Ashley Hunter <ashley.hunter@hotmail.co.uk>
* fix(cli): update dependencoes for input-otp from cli
Closes Fixes#858
* fix(cli): add slider to cli
No dependencies, just adding for consistency.
* docs: include carousel & cli in github issue templates
* docs(repo): update folder structure info and other missing information in contributing guide
* docs(repo): fix urls, add cli scope, clean up readme (#747)
---------
Co-authored-by: Robin Goetz <35136007+goetzrobin@users.noreply.github.com>
* chore: lint and cleanup of touched files
* build: add executor to replace version for ui libs
this executor finds all package.json in the libs/ui directory
and replaces the current version
of @spartan-ng with the one defined in UI_VERSION
* build: update cli files to reflect new versions and add scripts to make publishing easier
* chore: fix linting errors
* build: update semantic release config
* build: use same VERSION env var for ui and cli
* fix: remove confusing comment
* fix: add regex only updating spartan specific versions
and a unit test to make sure we don't accidentally mess with other packages
* fix: remove .DS_Store files and filter helm packages to not add them to package.json
* chore: remove unused script
* chore: add generator that auto-increments current version of released assets
* chore: add scripts for nightly release
* chore: add nightly release workflow
* fix: add missing dash
* chore: try on push for testing
* build: auto fix version number in tools
* ci: set up automatic release and committing of changed files
* ci: give release step write permissions
* ci: check out branch correctly so we can commit it back
* ci: try to push to right place
* chore: reorder package.json
* fix: use newVersion to allow for auto increment script to work
* chore: update branch name
* fix: rename release scripts and interface and add missing generators
* chore: release cli & ui 0.0.1-alpha.379
* chore: fix name for trigger
* chore: try to push to origin nightly-release
* chore: nightly release 2024-12-10 ⚡
* chore: update tools version number
* chore: nightly release 2024-12-10 ⚡
* chore: update github flow to work on main and a schedule
* fix: add back lost test and start commands to package.json
* fix: fix tests and commit message to follow guidelines
* feat: adjust version replacement for new single brain package
* fix: use correct alpha version 381
* fix: add back storybook command to package.json
* fix: typo in @spartan-ng/brain version for pagination helm
* fix: remove tests that don't do anything and add formatting of files
---------
Co-authored-by: Leonidas <leonidas@spartan.ng>
* fix(repo): require pnpm v9 with engineStrict set
* fix: bump node version to v20 LTS
* fix(repo): apply formatting and importing sorting required for CI to pass
* feat(repo): oxlint lightning-fast linter with more code quality, correctness and performance checks
---------
Co-authored-by: Robin Goetz <35136007+goetzrobin@users.noreply.github.com>
* fix(repo): require pnpm v9 with engineStrict set
* fix: bump node version to v20 LTS
* fix(repo): apply formatting and importing sorting required for CI to pass
* docs(spinner): change meta/selector/page to spinner
* docs(pagination): clean up example page
* docs(spinner): add to feature request and pr template
* docs: update roadmap