diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 657f261..b1c0800 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -68,6 +68,7 @@ function getFormComponents() { { text: 'Checkbox', link: 'components/checkbox' }, { text: 'Select', link: 'components/select' }, { text: 'Toggle', link: 'components/toggle' }, + { text: 'Range', link: 'components/range' }, ] } diff --git a/docs/components/range.md b/docs/components/range.md new file mode 100644 index 0000000..d1d4fdf --- /dev/null +++ b/docs/components/range.md @@ -0,0 +1,79 @@ + + +# Vue Toggle Range - Flowbite +#### Get started with the range component to receive a number from the user anywhere from 1 to 100 by sliding form control horizontally based on multiple options + +--- + +:::tip +Original reference: [https://flowbite.com/docs/forms/range/](https://flowbite.com/docs/forms/range/) +::: + +## Default + +```vue + + + + +``` + + + +## Disabled state + +```vue + + +``` + + + +## Min and Max + +```vue + +``` + + + +## Steps + +```vue + +``` + + + +## Sizes + +```vue + +``` + + diff --git a/docs/components/range/examples/DefaultRange.vue b/docs/components/range/examples/DefaultRange.vue new file mode 100644 index 0000000..f7baf2b --- /dev/null +++ b/docs/components/range/examples/DefaultRange.vue @@ -0,0 +1,12 @@ + + + diff --git a/docs/components/range/examples/DisabledRange.vue b/docs/components/range/examples/DisabledRange.vue new file mode 100644 index 0000000..5f6fff4 --- /dev/null +++ b/docs/components/range/examples/DisabledRange.vue @@ -0,0 +1,12 @@ + + + diff --git a/docs/components/range/examples/MinMaxRange.vue b/docs/components/range/examples/MinMaxRange.vue new file mode 100644 index 0000000..c01eda4 --- /dev/null +++ b/docs/components/range/examples/MinMaxRange.vue @@ -0,0 +1,12 @@ + + + diff --git a/docs/components/range/examples/SizeRange.vue b/docs/components/range/examples/SizeRange.vue new file mode 100644 index 0000000..5174030 --- /dev/null +++ b/docs/components/range/examples/SizeRange.vue @@ -0,0 +1,16 @@ + + + diff --git a/docs/components/range/examples/StepsRange.vue b/docs/components/range/examples/StepsRange.vue new file mode 100644 index 0000000..9d85db6 --- /dev/null +++ b/docs/components/range/examples/StepsRange.vue @@ -0,0 +1,12 @@ + + + diff --git a/src/components/Range/Range.vue b/src/components/Range/Range.vue new file mode 100644 index 0000000..4c0caf4 --- /dev/null +++ b/src/components/Range/Range.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/components/Range/composables/useRangeClasses.ts b/src/components/Range/composables/useRangeClasses.ts new file mode 100644 index 0000000..c797e94 --- /dev/null +++ b/src/components/Range/composables/useRangeClasses.ts @@ -0,0 +1,34 @@ +import { simplifyTailwindClasses } from '@/utils/simplifyTailwindClasses' +import { computed } from 'vue' +import type { Ref } from 'vue' +import type { InputSize } from '@/components/Input/types' + +// Range +const rangeDefaultClasses = 'w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700' +const rangeLabelClasses = 'block mb-2 text-sm font-medium text-gray-900 dark:text-white' + +const rangeSizeClasses: Record = { + lg: 'h-3 range-lg', + md: 'h-2 range-md', + sm: 'h-1 range-sm', +} + +export type UseRangeClassesProps = { + size: Ref + disabled: Ref +} + +export function useRangeClasses(props: UseRangeClassesProps) { + const rangeClasses = computed(() => { + return simplifyTailwindClasses(rangeDefaultClasses, rangeSizeClasses[props.size.value]) + }) + + const labelClasses = computed(() => { + return rangeLabelClasses + }) + + return { + rangeClasses, + labelClasses, + } +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 0ccb236..2d38517 100644 --- a/src/index.ts +++ b/src/index.ts @@ -58,4 +58,6 @@ export { default as Select } from './components/Select/Select.vue' export { default as Toggle } from './components/Toggle/Toggle.vue' +export { default as Range } from './components/Range/Range.vue' + export * from './composables'