From 6d043fd53d0d6e48bf20781aded4df32d3034abe Mon Sep 17 00:00:00 2001 From: Alexandr Date: Thu, 30 Jun 2022 19:56:08 +0300 Subject: [PATCH] feat: add gradient(monochrome, duotone), outline colored button. prefix and suffix slots button --- docs/.vitepress/theme/clear.css | 7 + docs/.vitepress/theme/index.js | 2 + docs/guide/button/button.md | 135 +++++++++++++++++- .../{ => examples}/ButtonColorExample.vue | 2 +- .../examples/ButtonGradientDuotoneExample.vue | 14 ++ .../ButtonGradientMonochromeExample.vue | 15 ++ .../examples/ButtonOutlineColorExample.vue | 13 ++ .../{ => examples}/ButtonPillExample.vue | 2 +- .../button/examples/ButtonPrefixExample.vue | 13 ++ .../{ => examples}/ButtonSizeExample.vue | 2 +- .../button/examples/ButtonSuffixExample.vue | 13 ++ package-lock.json | 50 +++++++ package.json | 6 +- src/components/Button/Button.vue | 65 ++++++++- tailwind.config.js | 11 +- 15 files changed, 327 insertions(+), 23 deletions(-) create mode 100644 docs/.vitepress/theme/clear.css rename docs/guide/button/{ => examples}/ButtonColorExample.vue (90%) create mode 100644 docs/guide/button/examples/ButtonGradientDuotoneExample.vue create mode 100644 docs/guide/button/examples/ButtonGradientMonochromeExample.vue create mode 100644 docs/guide/button/examples/ButtonOutlineColorExample.vue rename docs/guide/button/{ => examples}/ButtonPillExample.vue (91%) create mode 100644 docs/guide/button/examples/ButtonPrefixExample.vue rename docs/guide/button/{ => examples}/ButtonSizeExample.vue (87%) create mode 100644 docs/guide/button/examples/ButtonSuffixExample.vue diff --git a/docs/.vitepress/theme/clear.css b/docs/.vitepress/theme/clear.css new file mode 100644 index 0000000..0653c2f --- /dev/null +++ b/docs/.vitepress/theme/clear.css @@ -0,0 +1,7 @@ +button, +input, +optgroup, +select, +textarea { + border: inherit; /* border: 0 by default in vitepress removes all border for border class */ +} \ No newline at end of file diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js index cee7c4a..881b43c 100644 --- a/docs/.vitepress/theme/index.js +++ b/docs/.vitepress/theme/index.js @@ -2,4 +2,6 @@ import './tailwind.css' import DefaultTheme from 'vitepress/theme' +import './clear.css' + export default DefaultTheme diff --git a/docs/guide/button/button.md b/docs/guide/button/button.md index e0525c3..a90a67b 100644 --- a/docs/guide/button/button.md +++ b/docs/guide/button/button.md @@ -1,14 +1,19 @@ # Button reference: [https://flowbite.com/docs/components/buttons/](https://flowbite.com/docs/components/buttons/) -## Props -> Color +## Prop - color ```typescript type ButtonVariant = 'default' | 'alternative' | 'dark' | 'light' | 'green' | 'red' | 'yellow' | 'purple' @@ -40,7 +45,7 @@ import { Button } from 'flowbite-vue' ``` -## Props -> Size +## Prop - size ```typescript type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' @@ -68,7 +73,7 @@ import { Button } from 'flowbite-vue' ``` -## Props -> Pill +## Prop - pill ```typescript defineProps({ @@ -98,4 +103,122 @@ import { Button } from 'flowbite-vue' ``` +## Prop - gradient (monochrome) +```typescript +type ButtonMonochromeGradient = 'blue' | 'green' | 'cyan' | 'teal' | 'lime' | 'red' | 'pink' | 'purple' +type ButtonDuotoneGradient = 'purple-blue' | 'cyan-blue' | 'green-blue' | 'purple-pink' | 'pink-orange' | 'teal-lime' | 'red-yellow' +type ButtonGradient = ButtonDuotoneGradient | ButtonMonochromeGradient + +defineProps({ + gradient: { + type: [String, null] as PropType, + default: null, + }, +}) +``` + + + + +```vue + + +``` + + +## Prop - gradient (duotone) + + + +```vue + + +``` + +## Prop - outline (color) + +```typescript +defineProps({ + outline: { + type: Boolean, + default: false, + }, +}) +``` + + + + +```vue + + +``` + + +## Slot - prefix + + + +```vue + + +``` + +## Slot - suffix + + + +```vue + + +``` diff --git a/docs/guide/button/ButtonColorExample.vue b/docs/guide/button/examples/ButtonColorExample.vue similarity index 90% rename from docs/guide/button/ButtonColorExample.vue rename to docs/guide/button/examples/ButtonColorExample.vue index 5306c76..779be8e 100644 --- a/docs/guide/button/ButtonColorExample.vue +++ b/docs/guide/button/examples/ButtonColorExample.vue @@ -11,5 +11,5 @@ diff --git a/docs/guide/button/examples/ButtonGradientDuotoneExample.vue b/docs/guide/button/examples/ButtonGradientDuotoneExample.vue new file mode 100644 index 0000000..8892e36 --- /dev/null +++ b/docs/guide/button/examples/ButtonGradientDuotoneExample.vue @@ -0,0 +1,14 @@ + + diff --git a/docs/guide/button/examples/ButtonGradientMonochromeExample.vue b/docs/guide/button/examples/ButtonGradientMonochromeExample.vue new file mode 100644 index 0000000..fccba4b --- /dev/null +++ b/docs/guide/button/examples/ButtonGradientMonochromeExample.vue @@ -0,0 +1,15 @@ + + diff --git a/docs/guide/button/examples/ButtonOutlineColorExample.vue b/docs/guide/button/examples/ButtonOutlineColorExample.vue new file mode 100644 index 0000000..3a0e9b2 --- /dev/null +++ b/docs/guide/button/examples/ButtonOutlineColorExample.vue @@ -0,0 +1,13 @@ + + diff --git a/docs/guide/button/ButtonPillExample.vue b/docs/guide/button/examples/ButtonPillExample.vue similarity index 91% rename from docs/guide/button/ButtonPillExample.vue rename to docs/guide/button/examples/ButtonPillExample.vue index 2b8eaff..c7184ad 100644 --- a/docs/guide/button/ButtonPillExample.vue +++ b/docs/guide/button/examples/ButtonPillExample.vue @@ -11,5 +11,5 @@ diff --git a/docs/guide/button/examples/ButtonPrefixExample.vue b/docs/guide/button/examples/ButtonPrefixExample.vue new file mode 100644 index 0000000..13a6e83 --- /dev/null +++ b/docs/guide/button/examples/ButtonPrefixExample.vue @@ -0,0 +1,13 @@ + + diff --git a/docs/guide/button/ButtonSizeExample.vue b/docs/guide/button/examples/ButtonSizeExample.vue similarity index 87% rename from docs/guide/button/ButtonSizeExample.vue rename to docs/guide/button/examples/ButtonSizeExample.vue index 6468c9b..36ee40b 100644 --- a/docs/guide/button/ButtonSizeExample.vue +++ b/docs/guide/button/examples/ButtonSizeExample.vue @@ -8,5 +8,5 @@ diff --git a/docs/guide/button/examples/ButtonSuffixExample.vue b/docs/guide/button/examples/ButtonSuffixExample.vue new file mode 100644 index 0000000..f536ca2 --- /dev/null +++ b/docs/guide/button/examples/ButtonSuffixExample.vue @@ -0,0 +1,13 @@ + + diff --git a/package-lock.json b/package-lock.json index 81146d6..852ac5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -366,6 +366,47 @@ "integrity": "sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==", "dev": true }, + "@volar/code-gen": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.2.tgz", + "integrity": "sha512-H81I6d7rZB7teqL+zhK/Xz1v0/kKkUwkB0Aq6b4+BTCqcJeiZkoWxd0gFhrhWTnUoqiM83lhoTGo2vkvx5YagQ==", + "dev": true, + "requires": { + "@volar/source-map": "0.38.2" + } + }, + "@volar/source-map": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.2.tgz", + "integrity": "sha512-DWcYbYt9SPwk0r4VmXk1F0v4X5+hCqH1JRkAWSeJymQyXCQ2OQDEbY2PF12a7y2qn4FUBD2gOba2TynAqI8ZFQ==", + "dev": true + }, + "@volar/vue-code-gen": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.2.tgz", + "integrity": "sha512-whLunD6phSGWBUHZKdTxeglrpzQu26ii8CRVapFdjfyMaVhQ7ESNeIAhkTVyg2ovOPc0PiDYPQEPzfWAADIWog==", + "dev": true, + "requires": { + "@volar/code-gen": "0.38.2", + "@volar/source-map": "0.38.2", + "@vue/compiler-core": "^3.2.37", + "@vue/compiler-dom": "^3.2.37", + "@vue/shared": "^3.2.37" + } + }, + "@volar/vue-typescript": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.2.tgz", + "integrity": "sha512-5IKvSK2m5yUmH6iu/tNScVlvJGuiHawTfSmjxaMs+/tod25WeK37LEdf+pdKtlJ30bYTQmmkAuEfG01QvvBRGQ==", + "dev": true, + "requires": { + "@volar/code-gen": "0.38.2", + "@volar/source-map": "0.38.2", + "@volar/vue-code-gen": "0.38.2", + "@vue/compiler-sfc": "^3.2.37", + "@vue/reactivity": "^3.2.37" + } + }, "@vue/compiler-core": { "version": "3.2.37", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", @@ -2139,6 +2180,15 @@ } } }, + "vue-tsc": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.2.tgz", + "integrity": "sha512-+OMmpw9BZC9khul3I1HGtWchv7BCiaM7NvfdilVAiOFkjnivIoaW6jJm6YPQJaEPouePtpkDUWovyzgNxWdDsw==", + "dev": true, + "requires": { + "@volar/vue-typescript": "0.38.2" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 6534fb4..1312e50 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "serve": "vitepress serve docs", "build:docs": "vitepress build docs", "build": "vite build", + "build-types": "vue-tsc --declaration --emitDeclarationOnly", "lint": "eslint --ext .ts,.vue --ignore-path .gitignore --fix src", "format": "prettier . --write" }, @@ -40,11 +41,12 @@ "flowbite": "^1.4.2", "postcss": "^8.4.6", "prettier": "^2.3.2", - "tailwindcss": "^3.0.24", + "tailwindcss": "^3.1.4", "typescript": "^4.7.3", "vite": "^2.4.3", "vitepress": "^1.0.0-alpha.4", - "vue-eslint-parser": "^9.0.3" + "vue-eslint-parser": "^9.0.3", + "vue-tsc": "^0.38.2" }, "postcss": { "plugins": { diff --git a/src/components/Button/Button.vue b/src/components/Button/Button.vue index 39899c1..74c97cb 100644 --- a/src/components/Button/Button.vue +++ b/src/components/Button/Button.vue @@ -1,14 +1,20 @@