Merge pull request #18 from Chank1e/chank1e/dropdown
feat: gap dropdown
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,6 +2,7 @@
|
|||||||
node_modules
|
node_modules
|
||||||
.DS_Store
|
.DS_Store
|
||||||
dist
|
dist
|
||||||
|
dist_types
|
||||||
dist-ssr
|
dist-ssr
|
||||||
*.local
|
*.local
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,19 @@
|
|||||||
</template>
|
</template>
|
||||||
</Button>
|
</Button>
|
||||||
</template>
|
</template>
|
||||||
<div class="p-2">
|
<div class="w-48 text-sm font-medium text-gray-900 bg-white border border-gray-200 rounded-lg dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||||
Padding content
|
<a href="#" aria-current="true" class="block w-full px-4 py-2 text-white bg-blue-700 border-b border-gray-200 rounded-t-lg cursor-pointer dark:bg-gray-800 dark:border-gray-600">
|
||||||
|
Profile
|
||||||
|
</a>
|
||||||
|
<a href="#" class="block w-full px-4 py-2 border-b border-gray-200 cursor-pointer hover:bg-gray-100 hover:text-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:border-gray-600 dark:hover:bg-gray-600 dark:hover:text-white dark:focus:ring-gray-500 dark:focus:text-white">
|
||||||
|
Settings
|
||||||
|
</a>
|
||||||
|
<a href="#" class="block w-full px-4 py-2 border-b border-gray-200 cursor-pointer hover:bg-gray-100 hover:text-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:border-gray-600 dark:hover:bg-gray-600 dark:hover:text-white dark:focus:ring-gray-500 dark:focus:text-white">
|
||||||
|
Messages
|
||||||
|
</a>
|
||||||
|
<a href="#" class="block w-full px-4 py-2 rounded-b-lg cursor-pointer hover:bg-gray-100 hover:text-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:border-gray-600 dark:hover:bg-gray-600 dark:hover:text-white dark:focus:ring-gray-500 dark:focus:text-white">
|
||||||
|
Download
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</dropdown>
|
</dropdown>
|
||||||
<dropdown placement="right" text="Right">
|
<dropdown placement="right" text="Right">
|
||||||
|
|||||||
1298
package-lock.json
generated
1298
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@@ -5,10 +5,12 @@
|
|||||||
"author": "Ralph Schuler <ralph@inhaus.ai>",
|
"author": "Ralph Schuler <ralph@inhaus.ai>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist",
|
||||||
|
"dist_types"
|
||||||
],
|
],
|
||||||
"main": "./dist/flowbite-vue.umd.js",
|
"main": "./dist/flowbite-vue.umd.js",
|
||||||
"module": "./dist/flowbite-vue.es.js",
|
"module": "./dist/flowbite-vue.es.js",
|
||||||
|
"typings": "./dist_types/index.d.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": {
|
".": {
|
||||||
"import": "./dist/flowbite-vue.es.js",
|
"import": "./dist/flowbite-vue.es.js",
|
||||||
@@ -19,15 +21,18 @@
|
|||||||
"dev": "vitepress dev docs",
|
"dev": "vitepress dev docs",
|
||||||
"serve": "vitepress serve docs",
|
"serve": "vitepress serve docs",
|
||||||
"build:docs": "vitepress build docs",
|
"build:docs": "vitepress build docs",
|
||||||
|
"build:package": "npm run build-types && npm run build",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"build-types": "vue-tsc --declaration --emitDeclarationOnly",
|
"build-types": "vue-tsc --declaration --emitDeclarationOnly",
|
||||||
"lint": "eslint --ext .ts,.vue --ignore-path .gitignore --fix src",
|
"lint": "eslint --ext .ts,.vue --ignore-path .gitignore --fix src",
|
||||||
"format": "prettier . --write",
|
"format": "prettier . --write",
|
||||||
"test": "vitest",
|
"test": "vitest",
|
||||||
"coverage": "vitest run --coverage"
|
"coverage": "vitest run --coverage",
|
||||||
|
"typecheck": "vue-tsc --noEmit"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vue": "^3.2.37"
|
"vue": "^3",
|
||||||
|
"tailwindcss": "^3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^18.0.0",
|
"@types/node": "^18.0.0",
|
||||||
@@ -47,13 +52,12 @@
|
|||||||
"postcss": "^8.4.14",
|
"postcss": "^8.4.14",
|
||||||
"postcss-prefix-selector": "^1.16.0",
|
"postcss-prefix-selector": "^1.16.0",
|
||||||
"prettier": "^2.3.2",
|
"prettier": "^2.3.2",
|
||||||
"tailwindcss": "^3.1.4",
|
|
||||||
"typescript": "^4.7.3",
|
"typescript": "^4.7.3",
|
||||||
"vite": "^2.4.3",
|
"vite": "^2.4.3",
|
||||||
"vitepress": "^1.0.0-alpha.4",
|
"vitepress": "^1.0.0-alpha.4",
|
||||||
"vitest": "^0.16.0",
|
"vitest": "^0.16.0",
|
||||||
"vue-eslint-parser": "^9.0.3",
|
"vue-eslint-parser": "^9.0.3",
|
||||||
"vue-tsc": "^0.38.2"
|
"vue-tsc": "^0.30.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vueuse/core": "^8.9.1"
|
"@vueuse/core": "^8.9.1"
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import type { DropdownPlacement } from '../types'
|
|||||||
|
|
||||||
const defaultDropdownClasses = 'absolute z-10 bg-white divide-y divide-gray-100 rounded shadow dark:bg-gray-700'
|
const defaultDropdownClasses = 'absolute z-10 bg-white divide-y divide-gray-100 rounded shadow dark:bg-gray-700'
|
||||||
|
|
||||||
|
const defaultGapInPx = 8
|
||||||
|
|
||||||
const placementDropdownClasses: Record<DropdownPlacement, string> = {
|
const placementDropdownClasses: Record<DropdownPlacement, string> = {
|
||||||
bottom: '',
|
bottom: '',
|
||||||
left: 'top-0',
|
left: 'top-0',
|
||||||
@@ -20,16 +22,16 @@ export type UseDropdownClassesProps = {
|
|||||||
|
|
||||||
const placementCalculators: Record<DropdownPlacement, (rect: DOMRect) => string> = {
|
const placementCalculators: Record<DropdownPlacement, (rect: DOMRect) => string> = {
|
||||||
bottom(rect: DOMRect): string {
|
bottom(rect: DOMRect): string {
|
||||||
return `bottom: -${rect.height}px;`
|
return `bottom: -${rect.height + defaultGapInPx}px;`
|
||||||
},
|
},
|
||||||
left(rect: DOMRect): string {
|
left(rect: DOMRect): string {
|
||||||
return `left: -${rect.width}px;`
|
return `left: -${rect.width + defaultGapInPx}px;`
|
||||||
},
|
},
|
||||||
right(rect: DOMRect): string {
|
right(rect: DOMRect): string {
|
||||||
return `right: -${rect.width}px;`
|
return `right: -${rect.width + defaultGapInPx}px;`
|
||||||
},
|
},
|
||||||
top(rect: DOMRect): string {
|
top(rect: DOMRect): string {
|
||||||
return `top: -${rect.height}px;`
|
return `top: -${rect.height + defaultGapInPx}px;`
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
<tab-pane
|
<tab-pane
|
||||||
v-for="(item, id) in tabsChildren"
|
v-for="(item, id) in tabsChildren"
|
||||||
:key="id"
|
:key="id"
|
||||||
:active="modelValueRef === item.props.name"
|
:active="modelValueRef === item.props?.name"
|
||||||
:name="item.props.name"
|
:name="item.props?.name"
|
||||||
:disabled="item.props.disabled"
|
:disabled="item.props?.disabled"
|
||||||
:title="item.props.title"
|
:title="item.props?.title"
|
||||||
/>
|
/>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
10
src/env.d.ts
vendored
10
src/env.d.ts
vendored
@@ -1,8 +1,4 @@
|
|||||||
/// <reference types="vite/client" />
|
|
||||||
|
|
||||||
declare module '*.vue' {
|
declare module '*.vue' {
|
||||||
import { DefineComponent } from 'vue'
|
import Vue from 'vue'
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
|
export default Vue
|
||||||
const component: DefineComponent<{}, {}, any>
|
}
|
||||||
export default component
|
|
||||||
}
|
|
||||||
26
src/index.ts
26
src/index.ts
@@ -1,8 +1,18 @@
|
|||||||
export { default as Button } from './components/Button/Button.vue'
|
import Button from './components/Button/Button.vue'
|
||||||
export { default as Spinner } from './components/Spinner/Spinner.vue'
|
import Spinner from './components/Spinner/Spinner.vue'
|
||||||
export { default as ButtonGroup } from './components/ButtonGroup/ButtonGroup.vue'
|
import ButtonGroup from './components/ButtonGroup/ButtonGroup.vue'
|
||||||
export { default as Alert } from './components/Alert/Alert.vue'
|
import Alert from './components/Alert/Alert.vue'
|
||||||
export { default as Tabs } from './components/Tabs/Tabs.vue'
|
import Tabs from './components/Tabs/Tabs.vue'
|
||||||
export { default as Tab } from './components/Tabs/components/Tab/Tab.vue'
|
import Tab from './components/Tabs/components/Tab/Tab.vue'
|
||||||
export { default as Dropdown } from './components/Dropdown/Dropdown.vue'
|
import Dropdown from './components/Dropdown/Dropdown.vue'
|
||||||
export { default as FlowbiteThemable } from './components/utils/FlowbiteThemable/FlowbiteThemable.vue'
|
import FlowbiteThemable from './components/utils/FlowbiteThemable/FlowbiteThemable.vue'
|
||||||
|
export {
|
||||||
|
Button,
|
||||||
|
Spinner,
|
||||||
|
ButtonGroup,
|
||||||
|
Alert,
|
||||||
|
Tabs,
|
||||||
|
Tab,
|
||||||
|
Dropdown,
|
||||||
|
FlowbiteThemable,
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
{
|
{
|
||||||
"extends": "@vue/tsconfig/tsconfig.web.json",
|
"extends": "@vue/tsconfig/tsconfig.web.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "dist_types",
|
||||||
|
"paths": {
|
||||||
|
"@/*": [
|
||||||
|
"./src/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"src/**/*.ts",
|
"src/**/*.ts",
|
||||||
"src/**/*.d.ts",
|
"src/**/*.d.ts",
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
lib: {
|
lib: {
|
||||||
entry: resolve(__dirname, 'src/index.ts'),
|
entry: resolve(__dirname, './src/index.ts'),
|
||||||
name: 'flowbite-vue',
|
name: 'flowbite-vue',
|
||||||
},
|
},
|
||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
|
|||||||
Reference in New Issue
Block a user