# @limetech/mdc-p2-shape

> Shape utilities for Material Components for the web

Latest version **4.0.0** (published 2019-12-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install @limetech/mdc-p2-shape
pnpm add @limetech/mdc-p2-shape
yarn add @limetech/mdc-p2-shape
bun add @limetech/mdc-p2-shape
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.0.0 |
| Published | 2019-12-09 |
| First published | 2019-12-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 14.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Maintainers | specularrain, cybercap, flippare, calleboketoft, thomaslundstrom |
| Keywords | material components, material design, shape |

## Links

- npm: https://www.npmjs.com/package/@limetech/mdc-p2-shape
- Repository: https://github.com/Lundalogik/material-components-web
- Homepage: https://github.com/Lundalogik/material-components-web#readme
- Issues: https://github.com/Lundalogik/material-components-web/issues
- npm.io page: https://npm.io/package/@limetech/mdc-p2-shape

## Dependencies (1)

- [@limetech/mdc-p2-feature-targeting](https://npm.io/package/@limetech/mdc-p2-feature-targeting.md) ^4.0.0

## Recent versions

- 4.0.0 (latest) — 2019-12-09

## README

<!--docs:
title: "Shape"
layout: detail
section: components
excerpt: "Shapes direct attention, identify components, communicate state, and express brand."
path: /catalog/shape/
-->

# Shape

Shapes direct attention, identify components, communicate state, and express brand.

> Currently shape system for web only supports rounded corners.

## Design & API Documentation

<ul class="icon-list">
  <li class="icon-list-item icon-list-item--spec">
    <a href="https://material.io/go/design-shape">Material Design guidelines: Shape</a>
  </li>
</ul>

## Installation

```
npm install @limetech/mdc-p2-shape
```

## Basic Usage

### Styles

```scss
@import "@limetech/mdc-p2-shape/mixins";
@import "@limetech/mdc-p2-shape/functions";
```

## Style Customization

### Sass Variables

Components are categorized as small, medium and large in shape system. Overriding below sass variables applies shape (rounded) to respective categories. For example, overriding `$mdc-shape-medium-radius` variable would apply shape to all components that belong to medium category.

Variable | Description
--- | ---
`$mdc-shape-small-component-radius` | Rounded shape radius size for small components. Default value `0.25rem`.
`$mdc-shape-medium-component-radius` | Rounded shape radius size for medium components. Default value `0.25rem`.
`$mdc-shape-large-component-radius` | Rounded shape radius size for large components. Default value `0`.

Please refer [Material Design guidelines: Shape](https://material.io/go/design-shape) to learn about how components are categorized.

### Sass Mixins

Mixin | Description
--- | ---
`mdc-shape-radius($radius, $rtl-reflexive)` | Shape API used by all other components to apply radius to appropriate corners. `$radius` can be single value or list of up to 4 radius corner values. Set `$rtl-reflexive` to true to flip the radius in RTL case, `false` by default.

> Use `mdc-shape-resolve-percentage-radius` sass function to resolve percentage unit value to absolute radius value.

### Sass Functions

Function | Description
--- | ---
`mdc-shape-flip-radius($radius)` | Flips the radius values in RTL context. `$radius` is list of 2-4 corner values.
`mdc-shape-resolve-percentage-radius($component-height, $radius)` | Calculates the absolute radius value based on its component height. Use this for fixed height components only.
`mdc-shape-mask-radius($radius, $masked-corners)` | Accepts radius number or list of 2-4 radius values and returns 4 value list with masked corners as mentioned in `$masked-corners`.
`mdc-shape-prop-value($radius)` | Returns `$radius` value of shape category - `large`, `medium` or `small`. Otherwise, it returns the `$radius` itself if valid. `$radius` can be a single value or list of up to 4.

### Additional Information

#### Shapes for fixed height components

Styles for applying shape to a fixed height component such as button looks like this:

```scss
@include mdc-shape-radius(mdc-shape-resolve-percentage-radius($mdc-button-height, $radius));
```

Where, `$mdc-button-height` is the height of standard button and `$radius` is the size of shape. `mdc-shape-resolve-percentage-radius` function is used to resolve percentage unit value to absolute `$radius` value based on component height.

#### Shapes for dynamic height components

Styles for applying shapes to dynamic height component such as card looks like this:

```scss
@include mdc-shape-radius($radius);
```

Where, `$radius` is absolute value only.

#### Shapes for components on specific corners

Styles for applying shapes for specific corners such as drawer looks like this:

```scss
@include mdc-shape-radius(0 $radius $radius 0, $rtl-reflexive: true);
```

Where, only top-right & bottom-right corners are customizable and it automatically flips radius values based on RTL context when `$rtl-reflexive` is set to true.

#### Component theming

The styles for applying custom shape to button component instance looks like this:

```scss
@import "@limetech/mdc-p2-button/mixins";

.my-custom-button {
  @include mdc-button-shape-radius(50%);
}
```

In this example, the above styles applies 50% (pill) shape to button. It can also be absolute value (e.g., `0.5rem`);

> You would indirectly use the Shape API through respective component's mixin which takes care of applying radius to applicable corners for all its variants.

---
_Source: https://npm.io/package/@limetech/mdc-p2-shape · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
