@pegakit/pk-component-notifications
v0.1.1
Published
Notifications are used to communicate news or announcement information to the user.
Downloads
2
Readme
Overview:
- Twig Template:
source/_patterns/02-molecules/notifications/notification.twig
- Template Dependencies:
- Icon atom
- D8 Attributes object (via the Pattern Lab Data Transform plugin OR via our create_attribute Twig extension)
- Template Dependencies:
- Sass Component:
source/styles/pegakit-ui/06-components/_components.notifications.scss
- JavaScript Module: none currently but that'll change w/ these updates)
PegaKit CSS Framework Dependencies:
- 01-settings
- Global settings (ex.
$global-border-radius
,$spacing-unit
) - Color swatches (ex.
green, light
)
- Global settings (ex.
- 02-tools
- Font weight mixin (ex.
@include font-weight(bold);
) - Spacing mixin (ex.
@include spacing(medium);
) - Color palette mixin (ex.
@include palette(green, light);
)
- Font weight mixin (ex.
- 03-generic
- All (default UI Component dependency)
- 04-elements
- All (default UI Component dependency)
- 05-objects
- Icon object
- 06-components
- None
- 07-themes
- All (default UI Component dependency)
- 08-utilities
- All (default UI Component dependency)
PegaKit Staging link(s)
- Master (aka pk-legacy): https://patterns.pega.com/?p=viewall-molecules-notifications
- Develop: https://patterns-dev.pega.com/?p=viewall-molecules-notifications
- Accounts: https://patterns-dev.pega.com/branches/accounts-safe/?p=viewall-molecules-notifications
- Blog: https://patterns-dev.pega.com/branches/feature/pega-blog--FED-updates-v2/?p=viewall-molecules-notifications
- Pega Academy: https://patterns-dev.pega.com/branches/feature/pega-academy/?p=viewall-molecules-notifications
- ChaCha (Broken): https://patterns-dev.pega.com/branches/feature/www-redesign-ch/?p=viewall-molecules-notifications
Things to keep in mind:
- Mobile first!
- Close button: reminder: keep minimum tappable target area in mind.
- Flexible in height (don't set anything relating to height or min/max height)
- Exact position of close button shouldn't need to get re-adjusted if the padding value inside the notification component changes.
- Sometimes needs to be full width, other times not.
- Need to account for the fact that we already have 6 completely separate, not centrally maintained / versioned versions of this already in PegaKit / out in the wild.
Front-end Breakout
General
- Move the existing Notification twig template + Sass partial into a single component-specific folder structure. Basically, all the front-end files relating to notifications should end up living in a single place, which should make versioning significantly easier.
- Update the PegaKit build process if necessary.
- Keep file types into separate folders for the time being
Before:
./source
├── _patterns
| └── 02-molecules
| └── notifications
| ├── notification.twig
| └── examples
├── styles/pegakit-ui
| └── 06-components
| └── _components.notifications.scss
└── scripts
└── components
└── notifications/index.js (doesn't currently exist)
After:
./source
├── _patterns
| └── 02-molecules
| └── notifications
| ├── twig
| ├── notification.twig
| └── examples
├── styles/pegakit-ui
| └── 06-components
| └── _components.notifications.scss
└── scripts
└── components
└── notifications/index.js (doesn't currently exist)
Templates updates
Version the existing component (v0.1.0, as is) via Lerna
Update the existing template parameters so everything is nested under the
notification
namespace (ex. the notification_button.text and parameter should instead be set via notification.button_text (< 15min)
{% include "@molecules/notifications/notification.twig" with {
notification: {
button_text: '...',
text: '...'
}
} %}
The Notification component's Twig template should be updated to use the D8 friendly Attributes object (~15min)
Update the template to abstractly handle the different template options / available parameters. (< 15min)**
For example. currently the caution
UI status gets applied via the c-notification--caution
class being passed in.
We need to update the template so that we can simply set the status via a status
parameter and internally the component will validate that the value is OK + decide which class(es) it needs to apply. As a reference, our semi-recently updated button component does something along the lines of:
{# button.twig #}
{% set button_styles = ['positive', 'flat', 'subtle', 'featured'] %}
{% set button_classes = [
'c-button',
button.style in button_styles ? 'c-button--' ~ button.style : '',
...
] %}
{# page.twig #}
{% include "@atoms/buttons/button.twig" with {
button: {
style: 'flat'
}
} %}
Rename the currently unused
notification_button.hide
parameter tocan_close
which can be set to T/F. (< 15min)**Example variations in Pattern Lab should be updated to use the same class convention as well. (< 15min)
The Icon twig include used in this component: a. should be using the updated icon 'size' parameter -- the current class version is deprecated. (< 15min) b. should be setting the c-notification--close class via the icon template's attributes class[] array (and it should be removed from the
classes
string parameter) (< 15min)Add a new
center
T/F layout option to the notification template. Should be set to false by default.**Update the existing link/button sub-component (the UI used for dismissing the notification, if enabled). a. Add in the appropriate
js-
prefixed JavaScript hook class for the JavaScript module we'll be adding b. Change from being a tag to being a c. add thetype="button"
andtabindex="0"
attributes d. Replace the<span>
with the visually hidden text inside to instead just be an aria-label on the button itself.Update the notification component's outer container itself to be accessible. a. Add in the following HTML attributes:
tabindex="0" aria-live="assertive" role="alertdialog"
** All of the above changes / parameter options should be documented in a component-specific markdown file. See Component options below:
Component options (placeholder example)
Any of these options can be set when the Notification template is included. Learn more
| Option | Value | Default | Description |
| --- | --- | --- | --- |
| close
| CSS selector | .js-notification__button
| The element to dismiss the notification. |
| close
| CSS selector | .js-notification__button
| The element to dismiss the notification. |
| animation
| Boolean, String | false
| ['none', 'fade-in', 'slide-in']. |
Style modifiers
There are several style modifiers available. Just add one of the following classes to apply a different look.
| Class | Description |
|---------------------|------------------------------------------------------------|
| .c-notification--error
| Indicates an important or error message. |
| .c-notification--success
| Indicates success or a positive message. |
| .c-notification--warning
| Indicates a message containing a warning. |
Sass updates
- Update the margin-bottom logic to handle situations where we may or may not want a margin-bottom value set. If NOT the last child in a container = margin-bottom: 16px?
- change default background color to white? Need to move the blue background variation to something else
- move padding from main .c-notification container to .c-notification__text
- Update the
c-notification__button
styling:
width: 44px;
height: 44px;
display: inline-block;
cursor: pointer;
float: right;
position: relative;
z-index: 10; // Any z-index so clicking / tapping hits the target vs getting interfered w/ by the `.c-notification__text` container.
- Add overflow hidden to the outer c-notification container
New JavaScript Module
Out in the wild examples:
- http://foundation.zurb.com/sites/docs/v/5.5.3/components/alert_boxes.html
- https://codepen.io/joe-watkins/pen/PNMGeZ
- https://tympanus.net/Development/NotificationStyles/bar-slidetop.html#
- https://getuikit.com/v2/docs/notify.html
- https://github.com/govau/uikit/tree/master/packages/page-alerts
- http://foundation.zurb.com/sites/docs/callout.html
- http://materializecss.com/dialogs.html
- https://v4-alpha.getbootstrap.com/components/alerts/#examples