Skip to content

Commit

Permalink
feat(chips): Add 'mdc-chip-set' and 'mdc-chip'
Browse files Browse the repository at this point in the history
  • Loading branch information
pgbross committed Feb 19, 2018
1 parent bf987e7 commit adbfa3d
Show file tree
Hide file tree
Showing 14 changed files with 284 additions and 126 deletions.
66 changes: 33 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@

`vue-mdc-adapter` is an integration of
[Material Components](https://material.io/components/web/)
for [Vue.js](https://vuejs.org) which follows the best practices
for [Vue.js](https://vuejs.org) which follows the best practices
recommended by Google:
[Using Foundations and Adapters](https://github.com/material-components/material-components-web/blob/master/docs/integrating-into-frameworks.md#the-advanced-approach-using-foundations-and-adapters)

Expand All @@ -47,11 +47,11 @@ customization while sticking to the _Vue Spirit_ (approachable, versatile, and p

## Quick Links

- [Documentation & Demo](https://stasson.github.io/vue-mdc-adapter)
- [CodePen](https://codepen.io/collection/XBpwxq/) & [CodeSandbox](https://codesandbox.io/s/r5o35xnn3q?module=%2Fsrc%2Fcomponents%2FHello.vue)
- [Webpack Boilerplate](https://github.com/stasson/vue-mdc-adapter-template)
- [Changelog](https://github.com/stasson/vue-mdc-adapter/blob/master/CHANGELOG.md)
- [Contributing](https://github.com/stasson/vue-mdc-adapter/blob/master/CONTRIBUTING.md)
* [Documentation & Demo](https://stasson.github.io/vue-mdc-adapter)
* [CodePen](https://codepen.io/collection/XBpwxq/) & [CodeSandbox](https://codesandbox.io/s/r5o35xnn3q?module=%2Fsrc%2Fcomponents%2FHello.vue)
* [Webpack Boilerplate](https://github.com/stasson/vue-mdc-adapter-template)
* [Changelog](https://github.com/stasson/vue-mdc-adapter/blob/master/CHANGELOG.md)
* [Contributing](https://github.com/stasson/vue-mdc-adapter/blob/master/CONTRIBUTING.md)

## Project Status

Expand All @@ -61,42 +61,42 @@ Do not hesitate to open an issue on [GitHub](https://github.com/stasson/vue-mdc-
contact us on [Gitter](https://gitter.im/vue-mdc-adapter/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge),
or follow us on Twitter [@vuemdc](https://twitter.com/vuemdc)

> Each MDCWeb component is mapped to a single vue plugin
- [x] [button](https://stasson.github.io/vue-mdc-adapter/#/component/button)
- [x] [card](https://stasson.github.io/vue-mdc-adapter/#/component/card)
- [x] [checkbox](https://stasson.github.io/vue-mdc-adapter/#/component/checkbox)
- [x] [dialog](https://stasson.github.io/vue-mdc-adapter/#/component/dialog)
- [x] [drawer](https://stasson.github.io/vue-mdc-adapter/#/component/drawer)
- [x] [fab](https://stasson.github.io/vue-mdc-adapter/#/component/fab)
- [x] [grid-list](https://stasson.github.io/vue-mdc-adapter/#/component/grid-list)
- [x] [icon-toggle](https://stasson.github.io/vue-mdc-adapter/#/component/icon-toggle)
- [x] [layout-grid](https://stasson.github.io/vue-mdc-adapter/#/component/layout-grid)
- [x] [linear-progress](https://stasson.github.io/vue-mdc-adapter/#/component/linear-progress)
- [x] [list](https://stasson.github.io/vue-mdc-adapter/#/component/list)
- [x] [menu](https://stasson.github.io/vue-mdc-adapter/#/component/menu)
- [x] [radio](https://stasson.github.io/vue-mdc-adapter/#/component/radio)
- [x] [select](https://stasson.github.io/vue-mdc-adapter/#/component/select)
- [x] [slider](https://stasson.github.io/vue-mdc-adapter/#/component/slider)
- [x] [snackbar](https://stasson.github.io/vue-mdc-adapter/#/component/snackbar)
- [x] [switch](https://stasson.github.io/vue-mdc-adapter/#/component/switch)
- [x] [tabs](https://stasson.github.io/vue-mdc-adapter/#/component/tabs)
- [x] [textfield](https://stasson.github.io/vue-mdc-adapter/#/component/textfield)
- [x] [toolbar](https://stasson.github.io/vue-mdc-adapter/#/component/toolbar)
- [x] [typography](https://stasson.github.io/vue-mdc-adapter/#/component/typography)
> Each MDCWeb component is mapped to a single vue plugin
* [x] [button](https://stasson.github.io/vue-mdc-adapter/#/component/button)
* [x] [card](https://stasson.github.io/vue-mdc-adapter/#/component/card)
* [x] [checkbox](https://stasson.github.io/vue-mdc-adapter/#/component/checkbox)
* [x] [chips](https://stasson.github.io/vue-mdc-adapter/#/component/chips)
* [x] [dialog](https://stasson.github.io/vue-mdc-adapter/#/component/dialog)
* [x] [drawer](https://stasson.github.io/vue-mdc-adapter/#/component/drawer)
* [x] [fab](https://stasson.github.io/vue-mdc-adapter/#/component/fab)
* [x] [grid-list](https://stasson.github.io/vue-mdc-adapter/#/component/grid-list)
* [x] [icon-toggle](https://stasson.github.io/vue-mdc-adapter/#/component/icon-toggle)
* [x] [layout-grid](https://stasson.github.io/vue-mdc-adapter/#/component/layout-grid)
* [x] [linear-progress](https://stasson.github.io/vue-mdc-adapter/#/component/linear-progress)
* [x] [list](https://stasson.github.io/vue-mdc-adapter/#/component/list)
* [x] [menu](https://stasson.github.io/vue-mdc-adapter/#/component/menu)
* [x] [radio](https://stasson.github.io/vue-mdc-adapter/#/component/radio)
* [x] [select](https://stasson.github.io/vue-mdc-adapter/#/component/select)
* [x] [slider](https://stasson.github.io/vue-mdc-adapter/#/component/slider)
* [x] [snackbar](https://stasson.github.io/vue-mdc-adapter/#/component/snackbar)
* [x] [switch](https://stasson.github.io/vue-mdc-adapter/#/component/switch)
* [x] [tabs](https://stasson.github.io/vue-mdc-adapter/#/component/tabs)
* [x] [textfield](https://stasson.github.io/vue-mdc-adapter/#/component/textfield)
* [x] [toolbar](https://stasson.github.io/vue-mdc-adapter/#/component/toolbar)
* [x] [typography](https://stasson.github.io/vue-mdc-adapter/#/component/typography)

> Extra plugins
- [x] [layout-app](https://stasson.github.io/vue-mdc-adapter/#/component/layout-app): provides a flexible layout to simplify toolbar vs drawer positioning
- [x] [icon](https://stasson.github.io/vue-mdc-adapter/#/component/icon): provides a material icon wrapper with support for font-awesome, svg, etc.

* [x] [layout-app](https://stasson.github.io/vue-mdc-adapter/#/component/layout-app): provides a flexible layout to simplify toolbar vs drawer positioning
* [x] [icon](https://stasson.github.io/vue-mdc-adapter/#/component/icon): provides a material icon wrapper with support for font-awesome, svg, etc.

## Quick Start

#### Playground

Fork the [reference codepen template](https://codepen.io/stasson/pen/XzmMKp)
or one of the [vue-mdc-adapter codepen collection](https://codepen.io/collection/XBpwxq/)
or one of the [vue-mdc-adapter codepen collection](https://codepen.io/collection/XBpwxq/)
or the [CodeSandbox](https://codesandbox.io/s/r5o35xnn3q?module=%2Fsrc%2Fcomponents%2FHello.vue)

#### CDN
Expand Down
40 changes: 40 additions & 0 deletions components/chips/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
## Usage

```html
<mdc-chip-set>
<mdc-chip>Chip content 1</mdc-chip>
<mdc-chip>Chip content 2</mdc-chip>
<mdc-chip>Chip content 3</mdc-chip>
</mdc-chip-set>
```

### props

#### mdc-chip

mdc-chip is a compact element that allows a user to enter information or select a choice. mdc-chip dispatches
`@MDCChip:interaction` event.

| prop | Type | Default | Description |
| -------------- | ------- | -------- | ------------------------------------------- |
| `event` | String | optional | optional event to emit on click |
| `event-target` | Object | vm.$root | optional event target, defaults to root bus |
| `event-args` | Array | [] | optional event args |
| `icon` | String | optional | optional leading or trailing icon |
| `trailing` | Boolean | false | if true icon is a trailing icon |

> emits `@MDCChip:interaction` event with the chip as parameter
### Chips with icons

```html
<mdc-chip-set>
<mdc-chip icon="save">Chip content 1</mdc-chip>
<mdc-chip icon="delete" trailing>Chip content 2</mdc-chip>
<mdc-chip>Chip content 3</mdc-chip>
</mdc-chip-set>
```

### reference

* <https://material.io/components/web/catalog/chips>
9 changes: 9 additions & 0 deletions components/chips/demo.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<template>
<div class="mdc-demo mdc-demo--container">
<mdc-chip-set>
<mdc-chip>Chip content 1</mdc-chip>
<mdc-chip>Chip content 2</mdc-chip>
<mdc-chip>Chip content 3</mdc-chip>
</mdc-chip-set>
</div>
</template>
6 changes: 6 additions & 0 deletions components/chips/entry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import './styles.scss'
import {autoInit} from '../base'
import plugin from './index.js'
export default plugin

autoInit(plugin)
13 changes: 13 additions & 0 deletions components/chips/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import {BasePlugin} from '../base'
import mdcChip from './mdc-chip.vue'
import mdcChipSet from './mdc-chip-set.vue'

export {
mdcChip,
mdcChipSet
}

export default BasePlugin({
mdcChip,
mdcChipSet
})
30 changes: 30 additions & 0 deletions components/chips/mdc-chip-set.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<template>
<div ref="root" class="mdc-chip-set" :class="classes">
<slot></slot>
</div>
</template>

<script>
import MDCChipSetFoundation from '@material/chips/chip-set/foundation';
export default {
name: 'mdc-chip-set',
props: {},
data() {
return {
classes: {},
};
},
methods: {},
mounted() {
this.foundation = new MDCChipSetFoundation({
hasClass: className => this.$refs.root.classList.contains(className),
});
this.foundation.init();
},
beforeDestroy() {
this.foundation.destroy();
},
};
</script>
48 changes: 48 additions & 0 deletions components/chips/mdc-chip.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<template>
<div class="mdc-chip" :class="classes" :style="styles" tabindex="0" @click="dispatchEvent">
<div classes="mdc-chip__text">
<i class="material-icons mdc-chip__icon mdc-chip__icon--leading" v-if="icon && !trailing">{{icon}}</i>
<slot></slot>
<i class="material-icons mdc-chip__icon mdc-chip__icon--trailing" tabindex="0" role="button" v-if="icon && trailing">{{icon}}</i>
</div>
</div>
</template>

<script>
import MDCChipFoundation from '@material/chips/chip/foundation';
import { CustomLinkMixin, DispatchEventMixin, emitCustomEvent } from '../base';
import { RippleBase } from '../ripple';
export default {
name: 'mdc-chip',
mixins: [CustomLinkMixin, DispatchEventMixin],
props: {
icon: [String],
trailing: Boolean,
},
data() {
return {
classes: {},
styles: {},
};
},
methods: {},
mounted() {
this.foundation = new MDCChipFoundation({
registerInteractionHandler: (type, handler) => this.$el.addEventListener(type, handler),
deregisterInteractionHandler: (type, handler) => this.$el.removeEventListener(type, handler),
notifyInteraction: () =>
emitCustomEvent(this.$el, MDCChipFoundation.strings.INTERACTION_EVENT, { chip: this }, true),
});
this.foundation.init();
this.ripple = new RippleBase(this);
this.ripple.init();
},
beforeDestroy() {
this.ripple.destroy();
this.foundation.destroy();
},
};
</script>
1 change: 1 addition & 0 deletions components/chips/styles.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@import '@material/chips/mdc-chips';
4 changes: 4 additions & 0 deletions components/chips/test.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { pluginSanityCheck } from '../unit-test'
import plugin from './index.js';

pluginSanityCheck(__dirname, plugin)
2 changes: 2 additions & 0 deletions components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import VueMDCButton from './button'
import VueMDCCard from './card'
import VueMDCCheckbox from './checkbox'
import VueMDCChipSet from './chips'
import VueMDCDialog from './dialog'
import VueMDCDrawer from './drawer'
import VueMDCElevation from './elevation'
Expand Down Expand Up @@ -34,6 +35,7 @@ export default {
vm.use(VueMDCButton)
vm.use(VueMDCCard)
vm.use(VueMDCCheckbox)
vm.use(VueMDCChipSet)
vm.use(VueMDCDialog)
vm.use(VueMDCDrawer)
vm.use(VueMDCElevation)
Expand Down
53 changes: 27 additions & 26 deletions components/styles.scss
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
@import "./button/styles";
@import "./card/styles";
@import "./checkbox/styles";
@import "./dialog/styles";
@import "./drawer/styles";
@import "./elevation/styles";
@import "./fab/styles";
@import "./grid-list/styles";
@import "./icon/styles";
@import "./icon-toggle/styles";
@import "./layout-app/styles";
@import "./layout-grid/styles";
@import "./linear-progress/styles";
@import "./list/styles";
@import "./menu/styles";
@import "./radio/styles";
@import "./ripple/styles";
@import "./select/styles";
@import "./slider/styles";
@import "./snackbar/styles";
@import "./switch/styles";
@import "./tabs/styles";
@import "./textfield/styles";
@import "./toolbar/styles";
@import "./theme/styles";
@import "./typography/styles";
@import './button/styles';
@import './card/styles';
@import './checkbox/styles';
@import './chips/styles';
@import './dialog/styles';
@import './drawer/styles';
@import './elevation/styles';
@import './fab/styles';
@import './grid-list/styles';
@import './icon/styles';
@import './icon-toggle/styles';
@import './layout-app/styles';
@import './layout-grid/styles';
@import './linear-progress/styles';
@import './list/styles';
@import './menu/styles';
@import './radio/styles';
@import './ripple/styles';
@import './select/styles';
@import './slider/styles';
@import './snackbar/styles';
@import './switch/styles';
@import './tabs/styles';
@import './textfield/styles';
@import './toolbar/styles';
@import './theme/styles';
@import './typography/styles';
Loading

0 comments on commit adbfa3d

Please sign in to comment.