From cef7f3cd452df3db1ca4ed9e92503dfe1ea67219 Mon Sep 17 00:00:00 2001 From: Sqrcz Date: Thu, 17 Apr 2025 02:14:40 +0200 Subject: [PATCH 1/6] FwbCheckbox component refactored to enchance its flexibility --- docs/components/checkbox.md | 101 +++++++++++++++--- .../checkbox/examples/FwbCheckboxExample.vue | 7 +- .../examples/FwbCheckboxExampleDisabled.vue | 8 +- .../examples/FwbCheckboxExampleGroup.vue | 54 ++++++++++ .../examples/FwbCheckboxExampleHelper.vue | 20 ++++ .../examples/FwbCheckboxExampleLink.vue | 16 ++- src/components/FwbCheckbox/FwbCheckbox.vue | 71 +++++++----- .../composables/useCheckboxClasses.ts | 52 +++++++-- 8 files changed, 270 insertions(+), 59 deletions(-) create mode 100644 docs/components/checkbox/examples/FwbCheckboxExampleGroup.vue create mode 100644 docs/components/checkbox/examples/FwbCheckboxExampleHelper.vue diff --git a/docs/components/checkbox.md b/docs/components/checkbox.md index 1e639c15..97fc4bf8 100644 --- a/docs/components/checkbox.md +++ b/docs/components/checkbox.md @@ -1,17 +1,20 @@ + # Vue Checkbox - Flowbite -## Default checkbox +## Checkbox example ```vue ``` -## Disabled checkbox +## Disabled state ```vue @@ -38,38 +42,105 @@ const check = ref(false) ``` -## Checked checkbox +## Checkbox with link - + ```vue ``` -## Link with checkbox +## Checkbox with helper text - + ```vue ``` + + +## Checkbox group + +When using the checkbox with `arrays` or `objects`, the selected values will be stored in the array referenced by v-model + + + +```vue + + + + +``` diff --git a/docs/components/checkbox/examples/FwbCheckboxExample.vue b/docs/components/checkbox/examples/FwbCheckboxExample.vue index 7ba50370..321d689f 100644 --- a/docs/components/checkbox/examples/FwbCheckboxExample.vue +++ b/docs/components/checkbox/examples/FwbCheckboxExample.vue @@ -1,9 +1,13 @@ @@ -13,4 +17,5 @@ import { ref } from 'vue' import { FwbCheckbox } from '../../../../src/index' const check = ref(false) +const checked = ref(true) diff --git a/docs/components/checkbox/examples/FwbCheckboxExampleDisabled.vue b/docs/components/checkbox/examples/FwbCheckboxExampleDisabled.vue index 4cb686a4..e3db4f6c 100644 --- a/docs/components/checkbox/examples/FwbCheckboxExampleDisabled.vue +++ b/docs/components/checkbox/examples/FwbCheckboxExampleDisabled.vue @@ -1,10 +1,15 @@ @@ -14,4 +19,5 @@ import { ref } from 'vue' import { FwbCheckbox } from '../../../../src/index' const check = ref(false) +const checked = ref(true) diff --git a/docs/components/checkbox/examples/FwbCheckboxExampleGroup.vue b/docs/components/checkbox/examples/FwbCheckboxExampleGroup.vue new file mode 100644 index 00000000..0b7dd4dc --- /dev/null +++ b/docs/components/checkbox/examples/FwbCheckboxExampleGroup.vue @@ -0,0 +1,54 @@ + + + diff --git a/docs/components/checkbox/examples/FwbCheckboxExampleHelper.vue b/docs/components/checkbox/examples/FwbCheckboxExampleHelper.vue new file mode 100644 index 00000000..cbfc04e4 --- /dev/null +++ b/docs/components/checkbox/examples/FwbCheckboxExampleHelper.vue @@ -0,0 +1,20 @@ + + + diff --git a/docs/components/checkbox/examples/FwbCheckboxExampleLink.vue b/docs/components/checkbox/examples/FwbCheckboxExampleLink.vue index 5766633f..1846d2d4 100644 --- a/docs/components/checkbox/examples/FwbCheckboxExampleLink.vue +++ b/docs/components/checkbox/examples/FwbCheckboxExampleLink.vue @@ -1,9 +1,15 @@ diff --git a/src/components/FwbCheckbox/composables/useCheckboxClasses.ts b/src/components/FwbCheckbox/composables/useCheckboxClasses.ts index 71f8140f..27468527 100644 --- a/src/components/FwbCheckbox/composables/useCheckboxClasses.ts +++ b/src/components/FwbCheckbox/composables/useCheckboxClasses.ts @@ -1,19 +1,49 @@ -import { computed } from 'vue' +import { computed, type Ref } from 'vue' -import { simplifyTailwindClasses } from '@/utils/simplifyTailwindClasses' +import { useMergeClasses } from '@/composables/useMergeClasses' -// LABEL -const defaultLabelClasses = 'block text-sm font-medium text-gray-900 dark:text-gray-300' +const defaultLabelClasses = 'text-sm font-medium text-gray-900 dark:text-gray-300 mr-1' +const defaultCheckboxClasses = 'mr-2 w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded-sm focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600' +const defaultHelperClasses = 'ml-6 text-xs font-normal text-gray-500 dark:text-gray-300' -// CHECKBOX -const defaultCheckboxClasses = 'w-4 h-4 rounded bg-gray-100 border-gray-300 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-600 dark:border-gray-500' +const disabledLabelClasses = 'text-gray-400 dark:text-gray-500' -export function useCheckboxClasses () { - const checkboxClasses = computed(() => simplifyTailwindClasses(defaultCheckboxClasses)) - const labelClasses = computed(() => defaultLabelClasses) +export type UseCheckboxClassesProps = { + class: Ref> + disabled: Ref + labelClass: Ref> + wrapperClass: Ref> +} + +export function useCheckboxClasses (props: UseCheckboxClassesProps): { + checkboxClass: Ref + labelClass: Ref + helperMessageClass: Ref + wrapperClass: Ref +} { + const labelClass = computed(() => useMergeClasses([ + defaultLabelClasses, + props.disabled.value ? disabledLabelClasses : '', + props.labelClass.value, + ])) + + const checkboxClass = computed(() => useMergeClasses([ + defaultCheckboxClasses, + props.class.value, + ])) + + const helperMessageClass = computed(() => useMergeClasses([ + defaultHelperClasses, + ])) + + const wrapperClass = computed(() => useMergeClasses([ + props.wrapperClass.value, + ])) return { - checkboxClasses, - labelClasses, + checkboxClass, + helperMessageClass, + labelClass, + wrapperClass, } } From 780092bfd60e8ef649fb824f9caeb3bddc423947 Mon Sep 17 00:00:00 2001 From: Sqrcz Date: Thu, 17 Apr 2025 12:47:25 +0200 Subject: [PATCH 2/6] checkbox documentation updated --- docs/components/checkbox.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/components/checkbox.md b/docs/components/checkbox.md index 97fc4bf8..11ca726a 100644 --- a/docs/components/checkbox.md +++ b/docs/components/checkbox.md @@ -144,3 +144,13 @@ const planets = { ``` + +## Checkbox component API + +### FwbInput Props +| Name | Type | Default | Description | +| ------------ | ---------------- | ------- | ------------------------------- | +| wrapperClass | String \| Object | `''` | Added to main component wrapper | +| labelClass | String \| Object | `''` | Added to `