From b2bf1e2943cd157ecc5fbc6fa61f1c675784d05f Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Thu, 23 Jul 2020 15:45:58 -0400 Subject: [PATCH] =?UTF-8?q?chore:=20=F0=9F=A4=96=20Add=20badge=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/rose/addon/components/rose/badge.js | 7 ++ .../addon/components/rose/badge.stories.mdx | 77 ++++++++++++++++ .../addon/styles/rose/components/_badge.scss | 89 +++++++++++++++++++ .../addon/styles/rose/components/_index.scss | 1 + .../addon/templates/components/rose/badge.hbs | 14 +++ addons/rose/app/components/rose/badge.js | 1 + .../rose/tests/dummy/app/templates/index.hbs | 28 ++++-- .../integration/components/rose/badge-test.js | 50 +++++++++++ 8 files changed, 259 insertions(+), 8 deletions(-) create mode 100644 addons/rose/addon/components/rose/badge.js create mode 100644 addons/rose/addon/components/rose/badge.stories.mdx create mode 100644 addons/rose/addon/styles/rose/components/_badge.scss create mode 100644 addons/rose/addon/templates/components/rose/badge.hbs create mode 100644 addons/rose/app/components/rose/badge.js create mode 100644 addons/rose/tests/integration/components/rose/badge-test.js diff --git a/addons/rose/addon/components/rose/badge.js b/addons/rose/addon/components/rose/badge.js new file mode 100644 index 000000000..8a5cbcec5 --- /dev/null +++ b/addons/rose/addon/components/rose/badge.js @@ -0,0 +1,7 @@ +import Component from '@ember/component'; +import layout from '../../templates/components/rose/badge'; + +export default Component.extend({ + layout, + tagName: '', +}); diff --git a/addons/rose/addon/components/rose/badge.stories.mdx b/addons/rose/addon/components/rose/badge.stories.mdx new file mode 100644 index 000000000..5e7bc89f9 --- /dev/null +++ b/addons/rose/addon/components/rose/badge.stories.mdx @@ -0,0 +1,77 @@ +import { Meta, Story, Preview } from '@storybook/addon-docs/blocks'; +import { hbs } from 'ember-cli-htmlbars'; +import { action } from '@storybook/addon-actions'; +import { text, select } from '@storybook/addon-knobs'; + + + +# Badge + +A badge component that supports icons and predefined styles. +When style definition isn't supplied, a default style will be supplied. + +Styles: outline, light, dark, informational, informational-outline, success, success-outline, error, error-outline, warning, warning-outline, alert, alert-outline + +```html + +``` + + + {{ + template: hbs` + {{text}} + `, + context: { + text: text('text', 'Badge'), + style: select('style', { + 'none': 'none', + 'outline': 'outline', + 'light': 'light', + 'dark': 'dark', + 'informational': 'informational', + 'informational-outline': 'informational-outline', + 'success': 'success', + 'success-outline': 'success-outline', + 'alert': 'alert', + 'alert-outline': 'alert-outline', + 'error': 'error', + 'error-outline': 'error-outline', + 'warning': 'warning', + 'warning-outline': 'warning-outline', + }, + 'none' + ), + icon: select('icon', { + 'user-organization': 'user-organization', + 'partner': 'partner', + 'gift-fill': 'gift-fill', + }, + 'user-organization' + ), + } + }} + + + + {{ + template: hbs` + default style + outline + default style with icon + light + dark + informational + informational-outline + alert + alert-outline + error + error-outline + success + success-outline + warning + warning-outline + `, + }} + diff --git a/addons/rose/addon/styles/rose/components/_badge.scss b/addons/rose/addon/styles/rose/components/_badge.scss new file mode 100644 index 000000000..2ff4b16b7 --- /dev/null +++ b/addons/rose/addon/styles/rose/components/_badge.scss @@ -0,0 +1,89 @@ +@use '../utilities/type'; +@use '../variables/sizing'; + +.rose-badge { + @include type.type(s); + padding: sizing.rems(xxs); + border-radius: sizing.rems(xxxs); + border-width: thin; + border-style: solid; + display: inline-block; + + --color: var(--ui-gray-starker-1); + --border-color: var(--ui-gray-subtler-5); + --background-color: none; + + color: var(--color); + border-color: var(--border-color); + background-color: var(--background-color); + + &.rose-badge-outline { + --border-color: var(--ui-gray-starker-1); + } + + &.rose-badge-light { + --border-color: var(--ui-gray-subtler-5); + --background-color: var(--ui-gray-starker-5); + } + + &.rose-badge-dark { + --color: var(--ui-gray-subtler-6); + --border-color: var(--ui-gray-starker-1); + --background-color: var(--ui-gray-starker-1); + } + + &.rose-badge-active { + --color: var(--info); + } + + &.rose-badge-informational { + --color: var(--info-starker-1); + --border-color: var(--info-subtler-2); + --background-color: var(--info-subtler-2); + } + + &.rose-badge-informational-outline { + --color: var(--info-starker-1); + --border-color: var(--info-starker-1); + } + + &.rose-badge-alert { + --color: var(--alert-starker-1); + --background-color: var(--alert-subtler-1); + } + + &.rose-badge-alert-outline { + --color: var(--alert-starker-1); + --border-color: var(--alert-starker-1); + } + + &.rose-badge-error { + --color: var(--failure-starker-1); + --background-color: var(--failure-subtler-1); + } + + &.rose-badge-error-outline { + --color: var(--failure-starker-1); + --border-color: var(--failure-starker-1); + } + + &.rose-badge-success { + --color: var(--success-starker-1); + --background-color: var(--success-subtler-1); + } + + &.rose-badge-success-outline { + --color: var(--success-starker-1); + --border-color: var(--success-starker-1); + } + + &.rose-badge-warning { + --color: var(--warning-starker-1); + --background-color: var(--warning-subtler-1); + } + + &.rose-badge-warning-outline { + --color: var(--warning-starker-1); + --border-color: var(--warning-starker-1); + } +} diff --git a/addons/rose/addon/styles/rose/components/_index.scss b/addons/rose/addon/styles/rose/components/_index.scss index 6c0e6f1df..dd35e9d22 100644 --- a/addons/rose/addon/styles/rose/components/_index.scss +++ b/addons/rose/addon/styles/rose/components/_index.scss @@ -13,3 +13,4 @@ @import 'table'; @import 'message'; @import 'link-button'; +@import 'badge'; diff --git a/addons/rose/addon/templates/components/rose/badge.hbs b/addons/rose/addon/templates/components/rose/badge.hbs new file mode 100644 index 000000000..6ef77906f --- /dev/null +++ b/addons/rose/addon/templates/components/rose/badge.hbs @@ -0,0 +1,14 @@ + + {{#if @icon}} + + {{/if}} + + + {{yield}} + + diff --git a/addons/rose/app/components/rose/badge.js b/addons/rose/app/components/rose/badge.js new file mode 100644 index 000000000..a9f224c09 --- /dev/null +++ b/addons/rose/app/components/rose/badge.js @@ -0,0 +1 @@ +export { default } from 'rose/components/rose/badge'; \ No newline at end of file diff --git a/addons/rose/tests/dummy/app/templates/index.hbs b/addons/rose/tests/dummy/app/templates/index.hbs index 2422caa03..95220225a 100644 --- a/addons/rose/tests/dummy/app/templates/index.hbs +++ b/addons/rose/tests/dummy/app/templates/index.hbs @@ -1,9 +1,21 @@ -Primary -Secondary -Warning -Ghost -
+Default +Default Outline +Default with Icon -Left Icon -Right Icon - +Light +Dark + +Informational +Informational Outline + +Alert +Alert Outline + +Error +Error Outline + +Success +Success Outline + +Warning +Warning Outline diff --git a/addons/rose/tests/integration/components/rose/badge-test.js b/addons/rose/tests/integration/components/rose/badge-test.js new file mode 100644 index 000000000..91f906f26 --- /dev/null +++ b/addons/rose/tests/integration/components/rose/badge-test.js @@ -0,0 +1,50 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render, find } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +module('Integration | Component | rose/badge', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + await render(hbs``); + assert.ok(find('.rose-badge')); + }); + + test('it renders with content', async function(assert) { + await render(hbs`host-catalog-1`); + assert.equal(find('.rose-badge').textContent.trim(), 'host-catalog-1'); + }); + + test('it renders an icon using @icon', async function(assert) { + await render(hbs``); + assert.ok(find('.rose-icon')); + }); + + test('it styles content using @style', async function(assert) { + let styles = [ + 'outline', + 'light', + 'dark', + 'informational', + 'informational-outline', + 'alert', + 'alert-outline', + 'warning', + 'warning-outline', + 'error', + 'error-outline', + 'success', + 'success-outline', + 'warning', + 'warning-outline' + ]; + + await render(hbs``); + + styles.forEach((style) => { + this.set('style', style); + assert.ok(find(`.rose-badge-${style}`), `defines style: ${style}`); + }); + }); +});