Pastanaga Angular is an Angular implementation of Pastanaga design system offering a set of re-usable UI components which are covering typical needs of any web application. It is maintained by Plone and Guillotina communities. It aims to remain simple, and pays particular attention to:
- Accessibility: semantic is respected, and aria attributes are implemented where needed;
- Internationalisation: the translation service allows to manage several languages in a single Angular build, and support granular overriding;
- Maintenance: releases are frequent, and upgrade to latest Angular version is performed very quickly after each Angular release.
See https://plone.github.io/pastanaga-angular for usage examples and developer guide.
You can install Pastanaga-angular using its npm package:
- using npm:
npm install @guillotinaweb/pastanaga-angular
- using yarn:
yarn add @guillotinaweb/pastanaga-angular
But if you want to build your own demo application using pastanaga demo components, you need to install it using mrs-developer:
- first install
mrs-developer
if you don't already have it:
yarn add mrs-developer
- then add pastanaga-angular to your
mrs.developer.json
configuration (you can choose a specific tag as below, or a branch):
{
"pastanaga-angular": {
"url": "[email protected]:plone/pastanaga-angular.git",
"https": "https://github.com/plone/pastanaga-angular.git",
"path": "/projects/pastanaga-angular/src",
"package": "@guillotinaweb/pastanaga-angular",
"tag": "2.52.1"
}
}
- and launch the installation by running
missdev
:
missdev
Note:
By default, missdev
will install the dependencies in src/dev
folder.
If you're in a workspace with a mono-repository structure (using nx for instance), then you probably want to install pastanaga-angular in your libs
folder.
You can do so by using missdev --output
option:
missdev --output=../libs
Pastanaga-angular requires two files (pastanaga-core-overrides.scss
and pastanaga-component-overrides.scss
) to be in the src
folder of any project using it.
In order for those files to be found during the compilation, you have to add src
folder in style preprocessing options of angular.json
:
"stylePreprocessorOptions": {
"includePaths": [
"src"
]
}
Pastanaga-angular is using Poppins fonts and Quanta glyphs.
If you want to use the same fonts and glyphs sprite, declare Pastanaga assets in angular.json
:
- when using npm package:
{
"assets": [
"src/favicon.ico",
"src/assets",
{
"glob": "**/*",
"input": "./node_modules/@guillotinaweb/pastanaga-angular/assets",
"output": "assets"
}
]
}
- when using mrs-developer:
{
"assets": [
"src/favicon.ico",
"src/assets",
{
"glob": "**/*",
"input": "./src/develop/pastanaga-angular/projects/pastanaga-angular/assets",
"output": "assets"
}
]
}
Import Pastanaga core style in your application style (usually src/styles.scss
):
- when using npm package:
@import "~@guillotinaweb/pastanaga-angular/lib/styles/core";
- when using mrs-developer
@import "./develop/pastanaga-angular/projects/pastanaga-angular/lib/styles/core";
If you want to use Pastanaga fonts in your application, you need to
- declare the
$font-path
in your application style:
$font-path: '../../../assets/fonts';
Warning: since angular 10, scss variable is now relative to the place it is called.
- and import Pastanaga fonts in your application style as well:
- when using npm package
@import "~@guillotinaweb/pastanaga-angular/lib/styles/fonts";
- when using
mrs-developer
@import "./develop/pastanaga-angular/projects/pastanaga-angular/lib/styles/fonts";
Any project using pastanaga-angular must have two files (pastanaga-core-overrides.scss
and pastanaga-component-overrides.scss
) in their src
folder.
Keep those file empty if you want to use Pastanaga theme.
If you have your own theme, you can override pastanaga theme by overriding the tokens in these two files:
pastanaga-core-overrides.scss
allows to override variables from:- theme/palette
- theme/layout
- theme/scrollbar
- theme/shadows
- theme/spacing
- theme/transitions
- theme/typography
- theme/z-index
pastanaga-component-overrides.scss
allows to override variables from all other theming files like:- theme/avatar
- theme/body
- theme/button
- theme/chips
- theme/icon
- theme/menu
- theme/modal
- theme/tables
- theme/tabs
- theme/textfield
- theme/toast
- theme/toggle
- theme/tooltip
Pastanaga theme is defined in src/lib/styles/theme
folder. Any variable with !default
suffix can be overwritten.
Pastanaga theme is built around token. For example, _palette.token.scss
contains all the colors used in Pastanaga with general token names (e.g. $color-neutral-regular
, $color-primary-stronger
).
See the full list in https://plone.github.io/pastanaga-angular/palette.
Then, some components have a second layer of tokens. For example buttons have a list of tokens for each aspect and kind (e.g. $color-text-button-primary-solid
, $color-background-button-primary-solid
,…).
So you can have your own theme by overwriting the whole color palette or just by changing some aspects of some components.
In Pastanaga 2+, we prefix all modules with Pa
: ButtonModule
becomes PaButtonModule
.
Pastanaga now contains some useful types for properties configuring several components:
Kind
: primary | secondary | destructive | invertedSize
: tee-shirt size going fromsmall
toxxlarge
. Not all sizes are available for all components
We changed the way to configure buttons:
color
is now managed bykind
propertysize
is now expecting to be one of the values ofSize
typeborder
property is replaced byaspect
which can besolid
orbasic
See https://plone.github.io/pastanaga-angular/button for full documentation.
pa-icon
is now using a svg sprites to display icons by name. You can still provide a full path to display any other image though.
See https://plone.github.io/pastanaga-angular/icon for full documentation.
We changed form elements hierarchy: now they are all in the same place under controls
folder.
They still belong to two distinct modules (PaTextFieldModule
and PaTogglesModule
).
All controls are sharing some properties:
PaFormControlDirective
is the base class containing common properties (likeid
,name
,disabled
…) for all form elements componentsNativeTextFieldDirective
is extendingPaFormControlDirective
and contains common properties for all text field elements (likeplaceholder
,value
,readonly
,…)