diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..91dfed8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +node_modules \ No newline at end of file diff --git a/components/amount/index.scss b/components/amount/index.scss new file mode 100644 index 0000000..bb6069e --- /dev/null +++ b/components/amount/index.scss @@ -0,0 +1,3 @@ +.zui-amount.numerical { + font-family: DINPro-Medium, DIN Alternate, "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; +} \ No newline at end of file diff --git a/components/amount/index.vue b/components/amount/index.vue new file mode 100644 index 0000000..3bb2cae --- /dev/null +++ b/components/amount/index.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/components/button/index.scss b/components/button/index.scss new file mode 100644 index 0000000..dd5a2e7 --- /dev/null +++ b/components/button/index.scss @@ -0,0 +1,69 @@ +.zui-button { + color: #323233; + background-color: #fff; + border: 1upx solid $color-border; + padding: $h-gap-md $v-gap-md; + font-size: $font-md; + cursor: pointer; + transition: all 150ms; + display: flex; + align-items: center; + justify-content: center; + border-radius: 10upx; + &.sm { + padding: $h-gap-sm $v-gap-sm; + font-size: $font-sm; + } + &.lg { + padding: $h-gap-lg $v-gap-lg; + font-size: $font-lg; + } + &.active { + background-color: $bg-active; + border-color: $bg-active; + } + &.primary { + background-color: $color-primary; + border-color: $color-primary; + color: #FFF; + &.active { + background-color: darken($color-primary, 3%); + border-color: darken($color-primary, 3%); + } + } + &.secondary { + background-color: lighten($color-primary, 40%); + border-color: lighten($color-primary, 40%); + color: $color-primary; + &.active { + background-color: lighten($color-primary, 30%); + border-color: lighten($color-primary, 30%); + color: darken($color-primary, 3%); + } + } + &.link { + padding: $h-gap-sm $v-gap-sm; + background: inherit; + border: inherit; + color: $color-primary; + &.active { + color: darken($color-primary, 5%); + } + } + &.disabled { + border-color: $bg-disabled; + background-color: $bg-disabled; + color: $color-disabled; + cursor: not-allowed; + &.active { + border-color: $bg-disabled; + background-color: $bg-disabled; + } + } + &.round { + border-radius: 48upx; + } + &.square { + border-radius: 0upx; + } +} \ No newline at end of file diff --git a/components/button/index.vue b/components/button/index.vue new file mode 100644 index 0000000..5e77b61 --- /dev/null +++ b/components/button/index.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/components/cell/index.scss b/components/cell/index.scss new file mode 100644 index 0000000..1a799d2 --- /dev/null +++ b/components/cell/index.scss @@ -0,0 +1,52 @@ +.zui-cell { + position: relative; + display: flex; + box-sizing: border-box; + width: 100%; + padding: $h-gap-lg $v-gap-md; + border-bottom: 1upx solid $color-border; + overflow: hidden; + background-color: #fff; + &--clickable { + cursor: pointer; + transition: background-color 150ms; + &.active { + background-color: $bg-active; + } + } + &__left-icon, &__right-icon { + display: flex; + align-items: center; + font-size: 42upx; + } + &__left-icon { + margin-left: $v-gap-sm; + } + &__right-icon { + margin-left: $v-gap-sm; + color: $color-disabled; + } + &__title, &__value { + flex: 1; + display: flex; + } + &__title { + flex-direction: column; + justify-content: center; + } + &__value { + align-items: center; + justify-content: flex-end; + position: relative; + overflow: hidden; + color: $color-minor; + text-align: right; + vertical-align: middle; + word-wrap: break-word; + } + &__label { + padding-top: $h-gap-sm; + color: $color-minor; + font-size: $font-sm; + } +} diff --git a/components/cell/index.vue b/components/cell/index.vue new file mode 100644 index 0000000..317b3cd --- /dev/null +++ b/components/cell/index.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/components/icon/index.scss b/components/icon/index.scss new file mode 100644 index 0000000..c3d33a0 --- /dev/null +++ b/components/icon/index.scss @@ -0,0 +1,31 @@ +.zui-icon { + position: relative; + display: inline-block; + text-rendering: auto; + -webkit-font-smoothing: antialiased; +} + +.zui-info { + position: absolute; + top: 0; + right: 0; + box-sizing: border-box; + min-width: 32upx; + padding: 0 4upx; + color: #fff; + font-weight: 500; + font-size: 20upx; + font-family: PingFang SC, Helvetica Neue, Arial, sans-serif; + line-height: 1.5; + text-align: center; + background-color: $color-error; + border: 1upx solid #fff; + border-radius: 1rem; + transform: translate(50%, -50%); + transform-origin: 100%; + &.dot { + height: 24upx; + width: 24upx; + min-width: 24upx !important; + } +} diff --git a/components/icon/index.vue b/components/icon/index.vue new file mode 100644 index 0000000..6c6d165 --- /dev/null +++ b/components/icon/index.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/components/loading/index.scss b/components/loading/index.scss new file mode 100644 index 0000000..0b37b44 --- /dev/null +++ b/components/loading/index.scss @@ -0,0 +1,126 @@ +.zui-loading { + color: $color-minor; + display: inline-flex; + align-items: center; + justify-content: center; + &__spinner { + position: relative; + display: inline-block; + width: 50upx; + max-width: 100%; + height: 50upx; + max-height: 100%; + vertical-align: middle; + animation: zui-rotate 0.8s linear infinite; + &--spinner { + animation-timing-function: steps(12); + .zui-loading__dot { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + &::before { + display: block; + width: 2upx; + height: 25%; + margin: 0 auto; + background-color: currentColor; + border-radius: 40%; + content: ' '; + } + &:nth-of-type(1) { + transform: rotate(30deg); + opacity: 1; + } + &:nth-of-type(2) { + transform: rotate(60deg); + opacity: 0.9375; + } + &:nth-of-type(3) { + transform: rotate(90deg); + opacity: 0.875; + } + &:nth-of-type(4) { + transform: rotate(120deg); + opacity: 0.8125; + } + &:nth-of-type(5) { + transform: rotate(150deg); + opacity: 0.75; + } + &:nth-of-type(6) { + transform: rotate(180deg); + opacity: 0.6875; + } + &:nth-of-type(7) { + transform: rotate(210deg); + opacity: 0.625; + } + &:nth-of-type(8) { + transform: rotate(240deg); + opacity: 0.5625; + } + &:nth-of-type(9) { + transform: rotate(270deg); + opacity: 0.5; + } + &:nth-of-type(10) { + transform: rotate(300deg); + opacity: 0.4375; + } + &:nth-of-type(11) { + transform: rotate(330deg); + opacity: 0.375; + } + &:nth-of-type(12) { + transform: rotate(360deg); + opacity: 0.3125; + } + } + } + &--circular { + border: 1upx solid transparent; + border-top-color: currentColor; + border-radius: 100%; + } + } + &__text { + margin-left: $v-gap-sm; + color: $color-minor; + font-size: $font-md; + } + &--vertical { + flex-direction: column; + .zui-loading__text { + margin: $h-gap-sm 0 0; + } + } +} + +@keyframes zui-circular { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40; + } + + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120; + } +} + +@keyframes zui-rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} diff --git a/components/loading/index.vue b/components/loading/index.vue new file mode 100644 index 0000000..190c9d9 --- /dev/null +++ b/components/loading/index.vue @@ -0,0 +1,57 @@ + + + + + \ No newline at end of file diff --git a/components/tag/index.scss b/components/tag/index.scss new file mode 100644 index 0000000..e464e29 --- /dev/null +++ b/components/tag/index.scss @@ -0,0 +1,68 @@ +.zui-tag { + font-size: $font-sm; + text-align: center; + display: inline-block; + -webkit-user-select: none; + .default { + background: rgba(0,0,0,0); + color: $color-error; + border-color: $color-error; + } + .shape-dot { + border-radius: 50%; + height: 32upx; + width: 32upx; + &.size-tiny { + height: 16upx; + width: 16upx; + } + } + .shape-square { + padding: 0 $v-gap-sm; + border-radius: 0; + } + .shape-fillet { + padding: $h-gap-sm $v-gap-sm; + } + .shape-bubble { + width: 50upx; + padding: 7upx 0; + border-radius: 50%; + border-bottom-left-radius: 0; + box-sizing: border-box; + &.size-small { + width: 40upx; + padding: 5upx 0; + } + &.size-tiny { + width: 30upx; + padding: 2upx 0; + } + } + .type-fill { + color: #fff; + } + .type-ghost { + border: 1px solid $color-error; + background: rgba(0,0,0,0); + } + .font-weight-normal { + font-weight: normal; + } + .font-weight-bold { + font-weight: bold; + } + .font-weight-bolder { + font-weight: bolder; + } + .size-large { + font-size: $font-md; + } + .size-small { + font-size: $font-sm; + } + .size-tiny { + font-size: $font-sm * 0.9; + } +} + diff --git a/components/tag/index.vue b/components/tag/index.vue new file mode 100644 index 0000000..5b92bf7 --- /dev/null +++ b/components/tag/index.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..c1db183 --- /dev/null +++ b/index.js @@ -0,0 +1,15 @@ +import Amount from './components/amount'; +import Button from './components/button'; +import Cell from './components/cell'; +import Icon from './components/icon'; +import Loading from './components/loading'; +import Tag from './components/tag'; + +export default { + Amount, + Button, + Cell, + Icon, + Loading, + Tag +}; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..21e3c4d --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "name": "zui-uniapp", + "version": "1.0.0", + "main": "index.js", + "repository": "git@114.55.84.72:frontend/zui-uniapp.git", + "author": "刘汉宸 ", + "license": "MIT", + "private": true +} -- libgit2 0.21.0