From b03b31ff1add2ebec3ef79c131329397400aa415 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Thu, 4 Jun 2020 15:33:24 -0400 Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20simplify=20tabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/rose/nav/sidebar.stories.mdx | 2 +- .../addon/components/rose/nav/tab.stories.mdx | 43 --------------- .../components/rose/nav/{tab.js => tabs.js} | 3 +- .../components/rose/nav/tabs.stories.mdx | 31 +++++++++++ .../addon/components/rose/notification.js | 3 +- .../styles/rose/components/nav/_index.scss | 4 +- .../styles/rose/components/nav/_tab.scss | 53 ------------------- .../styles/rose/components/nav/_tabs.scss | 33 ++++++++++++ .../templates/components/rose/nav/tab.hbs | 22 -------- .../templates/components/rose/nav/tabs.hbs | 9 ++++ addons/rose/app/components/rose/nav/tab.js | 1 - addons/rose/app/components/rose/nav/tabs.js | 1 + .../rose/tests/dummy/app/templates/index.hbs | 2 - .../components/rose/nav/sidebar-test.js | 8 +-- .../components/rose/nav/tab-test.js | 50 ----------------- .../components/rose/nav/tabs-test.js | 19 +++++++ ui/core/app/styles/app.scss | 10 +--- .../templates/orgs/org/projects/project.hbs | 11 ++-- 18 files changed, 111 insertions(+), 194 deletions(-) delete mode 100644 addons/rose/addon/components/rose/nav/tab.stories.mdx rename addons/rose/addon/components/rose/nav/{tab.js => tabs.js} (53%) create mode 100644 addons/rose/addon/components/rose/nav/tabs.stories.mdx delete mode 100644 addons/rose/addon/styles/rose/components/nav/_tab.scss create mode 100644 addons/rose/addon/styles/rose/components/nav/_tabs.scss delete mode 100644 addons/rose/addon/templates/components/rose/nav/tab.hbs create mode 100644 addons/rose/addon/templates/components/rose/nav/tabs.hbs delete mode 100644 addons/rose/app/components/rose/nav/tab.js create mode 100644 addons/rose/app/components/rose/nav/tabs.js delete mode 100644 addons/rose/tests/integration/components/rose/nav/tab-test.js create mode 100644 addons/rose/tests/integration/components/rose/nav/tabs-test.js diff --git a/addons/rose/addon/components/rose/nav/sidebar.stories.mdx b/addons/rose/addon/components/rose/nav/sidebar.stories.mdx index 353cf0e86..6fb344b7f 100644 --- a/addons/rose/addon/components/rose/nav/sidebar.stories.mdx +++ b/addons/rose/addon/components/rose/nav/sidebar.stories.mdx @@ -3,7 +3,7 @@ import { hbs } from 'ember-cli-htmlbars'; import { action } from '@storybook/addon-actions'; import { text, boolean, select } from '@storybook/addon-knobs'; - + # Sidebar Navigation diff --git a/addons/rose/addon/components/rose/nav/tab.stories.mdx b/addons/rose/addon/components/rose/nav/tab.stories.mdx deleted file mode 100644 index 6a9b6889e..000000000 --- a/addons/rose/addon/components/rose/nav/tab.stories.mdx +++ /dev/null @@ -1,43 +0,0 @@ -import { Meta, Story, Preview } from '@storybook/addon-docs/blocks'; -import { hbs } from 'ember-cli-htmlbars'; -import { action } from '@storybook/addon-actions'; -import { text, boolean, select } from '@storybook/addon-knobs'; - - - -# Tab - -A tab item component with ability to configure icon, title, and badge sections. - -```html - -``` - - - {{ - template: hbs` - `, - context: { - title: text('title', 'Tab item'), - badge: text('badge', '3'), - icon: select( - 'icon', - { - 'info-circle-outline': 'info-circle-outline', - 'user-square-fill': 'user-square-fill', - 'check-circle-outline': 'check-circle-outline', - 'copy-action': 'copy-action', - 'unfold-more': 'unfold-more', - 'unfold-less': 'unfold-less', - }, - 'info-circle-outline' - ), - disabled: boolean('disabled', false) - }, - }} - diff --git a/addons/rose/addon/components/rose/nav/tab.js b/addons/rose/addon/components/rose/nav/tabs.js similarity index 53% rename from addons/rose/addon/components/rose/nav/tab.js rename to addons/rose/addon/components/rose/nav/tabs.js index c4c84358c..5ee542903 100644 --- a/addons/rose/addon/components/rose/nav/tab.js +++ b/addons/rose/addon/components/rose/nav/tabs.js @@ -1,7 +1,6 @@ import Component from '@ember/component'; -import layout from '../../../templates/components/rose/nav/tab'; +import layout from '../../../templates/components/rose/nav/tabs'; export default Component.extend({ layout, - tagName: '', }); diff --git a/addons/rose/addon/components/rose/nav/tabs.stories.mdx b/addons/rose/addon/components/rose/nav/tabs.stories.mdx new file mode 100644 index 000000000..fd429ce62 --- /dev/null +++ b/addons/rose/addon/components/rose/nav/tabs.stories.mdx @@ -0,0 +1,31 @@ +import { Meta, Story, Preview } from '@storybook/addon-docs/blocks'; +import { hbs } from 'ember-cli-htmlbars'; +import { action } from '@storybook/addon-actions'; +import { text, boolean, select } from '@storybook/addon-knobs'; + + + +# Tabs Navigation + +A simple tabbed navigation component. + +```html + + Text + Text + Text + +``` + + + {{ + template: hbs` + + Text + Text + Text + + `, + context: {}, + }} + diff --git a/addons/rose/addon/components/rose/notification.js b/addons/rose/addon/components/rose/notification.js index f1df73616..1b1677a67 100644 --- a/addons/rose/addon/components/rose/notification.js +++ b/addons/rose/addon/components/rose/notification.js @@ -20,8 +20,7 @@ export default Component.extend({ get icon() { let icon = 'info-circle-fill'; - - switch(this.style) { + switch (this.style) { case 'error': icon = 'cancel-square-fill'; break; diff --git a/addons/rose/addon/styles/rose/components/nav/_index.scss b/addons/rose/addon/styles/rose/components/nav/_index.scss index b56832ff9..4a208cbee 100644 --- a/addons/rose/addon/styles/rose/components/nav/_index.scss +++ b/addons/rose/addon/styles/rose/components/nav/_index.scss @@ -1,2 +1,2 @@ -@import "sidebar"; -@import 'tab'; +@import 'sidebar'; +@import 'tabs'; diff --git a/addons/rose/addon/styles/rose/components/nav/_tab.scss b/addons/rose/addon/styles/rose/components/nav/_tab.scss deleted file mode 100644 index 8bbad4116..000000000 --- a/addons/rose/addon/styles/rose/components/nav/_tab.scss +++ /dev/null @@ -1,53 +0,0 @@ -@use '../../variables/sizing'; -@use '../../utilities/type'; - -.rose-nav-tab { - @include type.type(s); - display: inline-block; - background-color: var(--subtle); - - .rose-nav-tab-link { - text-decoration: none; - color: var(--ui-gray); - display: inline-block; - padding: sizing.rems(s) sizing.rems(m); - border-bottom: sizing.rems(xxxs) solid var(--subtle); - - &.rose-nav-tab-link-disabled { - cursor: not-allowed; - pointer-events: none; - color: var(--ui-gray-subtler-2); - } - - &:active, &.active { - color: var(--action); - border-color: var(--action); - background-color: var(--subtle); - } - - &:hover { - color: var(--ui-gray); - border-color: var(--ui-gray-subtler-2); - background-color: var(--ui-gray-subtler-4); - } - - &:hover:active { - color: var(--action); - border-color: var(--action); - background-color: var(--ui-gray-subtler-4); - } - } - - .rose-nav-tab-icon { - svg { - width: sizing.rems(m); - height: sizing.rems(m); - vertical-align: sub; - } - } - - .rose-nav-tab-badge { - @include type.type(xs); - margin-left: sizing.rems(xxs); - } -} diff --git a/addons/rose/addon/styles/rose/components/nav/_tabs.scss b/addons/rose/addon/styles/rose/components/nav/_tabs.scss new file mode 100644 index 000000000..73c2f78b2 --- /dev/null +++ b/addons/rose/addon/styles/rose/components/nav/_tabs.scss @@ -0,0 +1,33 @@ +@use '../../variables/sizing'; +@use '../../utilities/type'; + +.rose-nav-tabs { + display: flex; + margin-bottom: sizing.rems(m); + box-shadow: inset 0 -#{sizing.rems(xxxxs)} 0 var(--ui-gray-subtler-2); + + .rose-nav-link { + --color: var(--ui-gray); + --background: transparent; + --box-shadow-color: transparent; + + @include type.type(s, semibold); + display: inline-block; + color: var(--color); + background-color: var(--background); + box-shadow: inset 0 -#{sizing.rems(xxxxs) * 3} 0 var(--box-shadow-color); + text-decoration: none; + padding: sizing.rems(m); + + &:hover { + --box-shadow-color: var(--ui-gray-subtler-2); + --background: var(--ui-gray-subtler-4); + } + + &:active, + &.active { + --color: var(--action); + --box-shadow-color: currentColor; + } + } +} diff --git a/addons/rose/addon/templates/components/rose/nav/tab.hbs b/addons/rose/addon/templates/components/rose/nav/tab.hbs deleted file mode 100644 index 3d1c5e4cd..000000000 --- a/addons/rose/addon/templates/components/rose/nav/tab.hbs +++ /dev/null @@ -1,22 +0,0 @@ -
- - {{#if @icon}} - {{inline-svg @icon}} - {{/if}} - - {{#if @title}} - {{@title}} - {{/if}} - - {{#if @badge}} - {{@badge}} - {{/if}} - - - {{yield}} -
diff --git a/addons/rose/addon/templates/components/rose/nav/tabs.hbs b/addons/rose/addon/templates/components/rose/nav/tabs.hbs new file mode 100644 index 000000000..18470f7d5 --- /dev/null +++ b/addons/rose/addon/templates/components/rose/nav/tabs.hbs @@ -0,0 +1,9 @@ + diff --git a/addons/rose/app/components/rose/nav/tab.js b/addons/rose/app/components/rose/nav/tab.js deleted file mode 100644 index 92c7185e3..000000000 --- a/addons/rose/app/components/rose/nav/tab.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'rose/components/rose/nav/tab'; diff --git a/addons/rose/app/components/rose/nav/tabs.js b/addons/rose/app/components/rose/nav/tabs.js new file mode 100644 index 000000000..91a0d8fe8 --- /dev/null +++ b/addons/rose/app/components/rose/nav/tabs.js @@ -0,0 +1 @@ +export { default } from 'rose/components/rose/nav/tabs'; diff --git a/addons/rose/tests/dummy/app/templates/index.hbs b/addons/rose/tests/dummy/app/templates/index.hbs index 08352c8df..ec3965039 100644 --- a/addons/rose/tests/dummy/app/templates/index.hbs +++ b/addons/rose/tests/dummy/app/templates/index.hbs @@ -198,7 +198,5 @@ - - diff --git a/addons/rose/tests/integration/components/rose/nav/sidebar-test.js b/addons/rose/tests/integration/components/rose/nav/sidebar-test.js index dfda90191..293079caa 100644 --- a/addons/rose/tests/integration/components/rose/nav/sidebar-test.js +++ b/addons/rose/tests/integration/components/rose/nav/sidebar-test.js @@ -3,11 +3,11 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('Integration | Component | rose/nav/sidebar', function(hooks) { +module('Integration | Component | rose/nav/sidebar', function (hooks) { setupRenderingTest(hooks); - test('it renders', async function(assert) { - assert.expect(2) + test('it renders', async function (assert) { + assert.expect(2); await render(hbs` Item Name @@ -18,7 +18,7 @@ module('Integration | Component | rose/nav/sidebar', function(hooks) { }); test('it associates title with nav via aria-labelledby', async function (assert) { - assert.expect(2) + assert.expect(2); await render(hbs` Item Name diff --git a/addons/rose/tests/integration/components/rose/nav/tab-test.js b/addons/rose/tests/integration/components/rose/nav/tab-test.js deleted file mode 100644 index 963b31b17..000000000 --- a/addons/rose/tests/integration/components/rose/nav/tab-test.js +++ /dev/null @@ -1,50 +0,0 @@ -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/nav/tab', function (hooks) { - setupRenderingTest(hooks); - - test('it renders', async function (assert) { - await render(hbs``); - assert.ok(find('a')); - assert.ok(find('.rose-nav-tab')); - assert.ok(find('.rose-nav-tab-link')); - assert.notOk(find('.rose-nav-tab-icon')); - assert.notOk(find('.rose-nav-tab-badge')); - assert.notOk(find('.rose-nav-tab-link-disabled')); - }); - - test('it renders with title', async function (assert) { - await render(hbs``); - assert.equal(find('a').title, 'Tab title'); - assert.equal(find('.rose-nav-tab-link').textContent.trim(), 'Tab title'); - }); - - test('it renders with icon', async function (assert) { - await render(hbs``); - assert.ok(find('svg')); - assert.ok(find('.rose-nav-tab-icon')); - }); - - test('it renders with badge', async function (assert) { - await render(hbs``); - assert.ok(find('.rose-nav-tab-badge')); - assert.equal(find('.rose-nav-tab-badge').textContent.trim(), '3'); - }); - - test('it render with attributes', async function (assert) { - await render(hbs``); - assert.ok(find('#tab')); - }); - - test('it renders disabled', async function (assert) { - this.set('disabled', true); - await render(hbs``); - assert.ok(find('.rose-nav-tab-link-disabled')); - - this.set('disabled', false); - assert.notOk(find('.rose-nav-tab-link-disabled')); - }); -}); diff --git a/addons/rose/tests/integration/components/rose/nav/tabs-test.js b/addons/rose/tests/integration/components/rose/nav/tabs-test.js new file mode 100644 index 000000000..733f9e997 --- /dev/null +++ b/addons/rose/tests/integration/components/rose/nav/tabs-test.js @@ -0,0 +1,19 @@ +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/nav/tabs', function (hooks) { + setupRenderingTest(hooks); + + test('it renders', async function (assert) { + assert.expect(2); + await render(hbs` + + Item Name + + `); + assert.ok(find('.rose-nav-tabs')); + assert.equal(find('.rose-nav-link').textContent.trim(), 'Item Name'); + }); +}); diff --git a/ui/core/app/styles/app.scss b/ui/core/app/styles/app.scss index 56c8e3df1..7cf4f25cd 100644 --- a/ui/core/app/styles/app.scss +++ b/ui/core/app/styles/app.scss @@ -9,7 +9,7 @@ .rose-form { width: 66%; - + .rose-form-input { width: 100%; @@ -64,12 +64,4 @@ width: 100%; } } - - .tabs { - border-bottom: 2px solid #bac1cc; - display: flex; - flex-wrap: wrap; - flex-direction: row; - margin-bottom: 10px; - } } diff --git a/ui/core/app/templates/orgs/org/projects/project.hbs b/ui/core/app/templates/orgs/org/projects/project.hbs index 3b20217e0..26770d11b 100644 --- a/ui/core/app/templates/orgs/org/projects/project.hbs +++ b/ui/core/app/templates/orgs/org/projects/project.hbs @@ -9,9 +9,14 @@

{{t "resources.project.settings"}}

-
- -
+ + + {{t 'dev.item-name'}} + + + {{t 'dev.item-name'}} + +