diff --git a/README.md b/README.md index 695a8a05..52749a21 100644 --- a/README.md +++ b/README.md @@ -5,40 +5,9 @@ yarn install ``` -## Font variables setup -Required!: Add scss font variables to your project - -``` -$s-font-family-default-path: '~@soramitsu/soramitsu-js-ui/lib/assets/fonts/Sora-VariableFont_wght.ttf' !default; -$s-font-family-mono-path: '~@soramitsu/soramitsu-js-ui/lib/assets/fonts/JetBrainsMono-Regular.woff' !default; -$s-font-family-icons-path: '~@soramitsu/soramitsu-js-ui/lib/assets/fonts/soramitsu-icons-1.0.0.ttf' !default; -``` - ## Usage library in project -### 1.Install all of library components: -``` -import Vue from 'vue -import SoramitsuElements from '@soramitsu/soramitsu-js-ui' -const options = { - store // if u want to merge ui lib modules -} - -Vue.use(SoramitsuElements, options) -``` -### 2.Install only necessary components (to reduce vendors bundle size) -``` -import Vue from 'vue -import ElementUIPlugin from '@soramitsu/soramitsu-js-ui/src/plugins/elementUI' -import SoramitsuUIStorePlugin from '@soramitsu/soramitsu-js-ui/src/plugins/soramitsuUIStore' -import SButton from '@soramitsu/soramitsu-js-ui/src/components/Button/SButton' -import SButton from '@soramitsu/soramitsu-js-ui/src/components/Input/SInput' - -Vue.use(ElementUIPlugin) // required -Vue.use(SoramitsuUIStorePlugin, store) // optional -Vue.use(SButton) -Vue.use(SInput) -``` +The full guide about usage can be found [here](./src/stories/Intro/Intro.stories.mdx) ### Compiles and hot-reloads storybook with components for development ``` diff --git a/build/rollup.config.js b/build/rollup.config.js index 4a1ec3c2..78630ecb 100644 --- a/build/rollup.config.js +++ b/build/rollup.config.js @@ -21,12 +21,17 @@ export default { 'src/types/DesignSystem.ts', 'src/types/Locale.ts', 'src/types/Theme.ts', + 'src/types/components.ts', + 'src/types/index.ts', 'src/locale/index.ts', 'src/plugins/*.ts', 'src/store/index.ts', 'src/utils/*.ts', 'src/directives/index.ts', - 'src/components/*/**/index.ts' + 'src/components/*/**/index.ts', + 'src/components/*/**/consts.ts', + 'src/components/DesignSystem/DesignSystemInject.ts', + 'src/mixins/*.ts' ], output: { format: 'esm', @@ -74,20 +79,13 @@ export default { }), scss(), resolve(), - terser(), + /* eslint-disable @typescript-eslint/camelcase */ + terser({ keep_classnames: true }), del({ targets: [ - 'lib/styles/index.d.ts', - 'bundle.css' - // TODO: find a way how to remove this dependencies - // 'lib/BorderRadiusMixin-**.js', - // 'lib/SizeMixin-**.js', - // 'lib/DesignSystem-**.js', - // 'lib/DesignSystemInject-**.js', + // TODO: find a way how to remove this dependency below // 'lib/normalize-component-**.js', - // 'lib/components-**.js', - // 'lib/consts-**.js', - // 'lib/index-**.js' + 'bundle.css' ], hook: 'writeBundle' }) diff --git a/config/storybook/index.scss b/config/storybook/index.scss new file mode 100644 index 00000000..5f7b3b62 --- /dev/null +++ b/config/storybook/index.scss @@ -0,0 +1,3 @@ +.sbdocs.sbdocs-preview div[id^='story--'] > * { + height: auto !important; +} diff --git a/config/storybook/preview.js b/config/storybook/preview.js index 14c5f9bc..1d12b586 100644 --- a/config/storybook/preview.js +++ b/config/storybook/preview.js @@ -5,6 +5,7 @@ import { DocsPage } from '@storybook/addon-docs/blocks' import ElColorPicker from 'element-ui/lib/color-picker' import '../../src/styles/index.scss' +import './index.scss' import mainStore from '../../src/store' import { ElementUIPlugin } from '../../src/plugins' diff --git a/package.json b/package.json index 5d4254a9..03bf50d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@soramitsu/soramitsu-js-ui", - "version": "1.0.3", + "version": "1.0.4", "private": false, "publishConfig": { "registry": "https://nexus.iroha.tech/repository/npm-soramitsu/" diff --git a/src/components/Breadcrumb/SBreadcrumb/index.ts b/src/components/Breadcrumb/SBreadcrumb/index.ts index 25093ad7..a4ae62ef 100644 --- a/src/components/Breadcrumb/SBreadcrumb/index.ts +++ b/src/components/Breadcrumb/SBreadcrumb/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SBreadcrumb from './SBreadcrumb.vue' const SBreadcrumb = _SBreadcrumb as SFCWithInstall -SBreadcrumb.install = function (vue: VueConstructor) { - vue.component(Components.SBreadcrumb, SBreadcrumb) -} +SBreadcrumb.install = install(Components.SBreadcrumb, SBreadcrumb) export { SBreadcrumb } export default SBreadcrumb diff --git a/src/components/Breadcrumb/SBreadcrumbItem/index.ts b/src/components/Breadcrumb/SBreadcrumbItem/index.ts index 4b553cb2..1f03cd39 100644 --- a/src/components/Breadcrumb/SBreadcrumbItem/index.ts +++ b/src/components/Breadcrumb/SBreadcrumbItem/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SBreadcrumbItem from './SBreadcrumbItem.vue' const SBreadcrumbItem = _SBreadcrumbItem as SFCWithInstall -SBreadcrumbItem.install = function (vue: VueConstructor) { - vue.component(Components.SBreadcrumbItem, SBreadcrumbItem) -} +SBreadcrumbItem.install = install(Components.SBreadcrumbItem, SBreadcrumbItem) export { SBreadcrumbItem } export default SBreadcrumbItem diff --git a/src/components/Button/SButton/SButton.vue b/src/components/Button/SButton/SButton.vue index 710173c8..771c8b69 100644 --- a/src/components/Button/SButton/SButton.vue +++ b/src/components/Button/SButton/SButton.vue @@ -52,6 +52,12 @@ export default class SButton extends Mixins(SizeMixin, BorderRadiusMixin, Design * By default it's set to `false` */ @Prop({ default: false, type: Boolean }) readonly rounded!: boolean + /** + * Primary property for `type="action"` buttons. + * + * By default it's set to `false` + */ + @Prop({ default: false, type: Boolean }) readonly primary!: boolean /** * Icon name from icon collection of this library */ @@ -144,6 +150,9 @@ export default class SButton extends Mixins(SizeMixin, BorderRadiusMixin, Design if (this.alternative) { cssClasses.push('s-alternative') } + if (this.primary) { + cssClasses.push('s-primary') + } if (this.pressed) { cssClasses.push('s-pressed') } @@ -171,15 +180,14 @@ export default class SButton extends Mixins(SizeMixin, BorderRadiusMixin, Design } get isRounded (): boolean { - if (([ButtonTypes.LINK, ButtonTypes.ACTION] as Array).includes(this.type)) return false + if (([ButtonTypes.ACTION] as Array).includes(this.type)) return this.rounded - return this.rounded + return false } get isLoading (): boolean { - if (([ButtonTypes.LINK, ButtonTypes.ACTION] as Array).includes(this.type) || this.isRounded) { - return false - } + if (([ButtonTypes.LINK, ButtonTypes.ACTION] as Array).includes(this.type)) return false + return this.loading } diff --git a/src/components/Button/SButton/index.ts b/src/components/Button/SButton/index.ts index 6e4b31ab..63000572 100644 --- a/src/components/Button/SButton/index.ts +++ b/src/components/Button/SButton/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SButton from './SButton.vue' const SButton = _SButton as SFCWithInstall -SButton.install = function (vue: VueConstructor) { - vue.component(Components.SButton, SButton) -} +SButton.install = install(Components.SButton, SButton) export { SButton } export default SButton diff --git a/src/components/Button/SButtonGroup/index.ts b/src/components/Button/SButtonGroup/index.ts index 1d5863b0..34750a1c 100644 --- a/src/components/Button/SButtonGroup/index.ts +++ b/src/components/Button/SButtonGroup/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SButtonGroup from './SButtonGroup.vue' const SButtonGroup = _SButtonGroup as SFCWithInstall -SButtonGroup.install = function (vue: VueConstructor) { - vue.component(Components.SButtonGroup, SButtonGroup) -} +SButtonGroup.install = install(Components.SButtonGroup, SButtonGroup) export { SButtonGroup } export default SButtonGroup diff --git a/src/components/Card/SCard/index.ts b/src/components/Card/SCard/index.ts index c301ebde..dd9f56b1 100644 --- a/src/components/Card/SCard/index.ts +++ b/src/components/Card/SCard/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SCard from './SCard.vue' const SCard = _SCard as SFCWithInstall -SCard.install = function (vue: VueConstructor) { - vue.component(Components.SCard, SCard) -} +SCard.install = install(Components.SCard, SCard) export { SCard } export default SCard diff --git a/src/components/Checkbox/index.ts b/src/components/Checkbox/index.ts index 8781ed78..7736b71b 100644 --- a/src/components/Checkbox/index.ts +++ b/src/components/Checkbox/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../types/components' +import install from '../../utils/install' import _SCheckbox from './SCheckbox.vue' const SCheckbox = _SCheckbox as SFCWithInstall -SCheckbox.install = function (vue: VueConstructor) { - vue.component(Components.SCheckbox, SCheckbox) -} +SCheckbox.install = install(Components.SCheckbox, SCheckbox) export { SCheckbox } export default SCheckbox diff --git a/src/components/Collapse/SCollapse/index.ts b/src/components/Collapse/SCollapse/index.ts index 9c09acc7..19e60223 100644 --- a/src/components/Collapse/SCollapse/index.ts +++ b/src/components/Collapse/SCollapse/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SCollapse from './SCollapse.vue' const SCollapse = _SCollapse as SFCWithInstall -SCollapse.install = function (vue: VueConstructor) { - vue.component(Components.SCollapse, SCollapse) -} +SCollapse.install = install(Components.SCollapse, SCollapse) export { SCollapse } export default SCollapse diff --git a/src/components/Collapse/SCollapseItem/index.ts b/src/components/Collapse/SCollapseItem/index.ts index e2b40340..7df6110a 100644 --- a/src/components/Collapse/SCollapseItem/index.ts +++ b/src/components/Collapse/SCollapseItem/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SCollapseItem from './SCollapseItem.vue' const SCollapseItem = _SCollapseItem as SFCWithInstall -SCollapseItem.install = function (vue: VueConstructor) { - vue.component(Components.SCollapseItem, SCollapseItem) -} +SCollapseItem.install = install(Components.SCollapseItem, SCollapseItem) export { SCollapseItem } export default SCollapseItem diff --git a/src/components/DatePicker/SDatePicker/index.ts b/src/components/DatePicker/SDatePicker/index.ts index 88736cc4..ebc9c6b6 100644 --- a/src/components/DatePicker/SDatePicker/index.ts +++ b/src/components/DatePicker/SDatePicker/index.ts @@ -1,13 +1,11 @@ -import { VueConstructor } from 'vue' import { Components, SFCWithInstall } from '../../../types/components' +import install from '../../../utils/install' import _SDatePicker from './SDatePicker.vue' const SDatePicker = _SDatePicker as SFCWithInstall -SDatePicker.install = function (vue: VueConstructor) { - vue.component(Components.SDatePicker, SDatePicker) -} +SDatePicker.install = install(Components.SDatePicker, SDatePicker) export { SDatePicker } export default SDatePicker diff --git a/src/components/DesignSystem/DesignSystemInject.ts b/src/components/DesignSystem/DesignSystemInject.ts index 24ca84cd..f86df398 100644 --- a/src/components/DesignSystem/DesignSystemInject.ts +++ b/src/components/DesignSystem/DesignSystemInject.ts @@ -1,13 +1,19 @@ import { Component, Vue, Inject, Prop } from 'vue-property-decorator' + import { DesignSystemProvideKey } from './consts' import DesignSystem from '../../types/DesignSystem' @Component export default class DesignSystemInject extends Vue { @Prop({ default: true, type: Boolean }) readonly useDesignSystem!: boolean + @Inject({ from: DesignSystemProvideKey, default: DesignSystem.DEFAULT }) readonly designSystem!: any get designSystemClass (): string { return this.useDesignSystem ? this.designSystem.value : '' } + + get isNeumorphic (): boolean { + return this.designSystem.value === DesignSystem.NEUMORPHIC + } } diff --git a/src/components/DesignSystem/SDesignSystemProvider/SDesignSystemProvider.vue b/src/components/DesignSystem/SDesignSystemProvider/SDesignSystemProvider.vue index 57e40ce8..15df436c 100644 --- a/src/components/DesignSystem/SDesignSystemProvider/SDesignSystemProvider.vue +++ b/src/components/DesignSystem/SDesignSystemProvider/SDesignSystemProvider.vue @@ -6,12 +6,14 @@