diff --git a/packages/core/src/Lib/UseColor/Internal/Lib/UseTextColor.ts b/packages/core/src/Lib/UseColor/Internal/Lib/UseTextColor.ts index c2c444ff..5099fdee 100644 --- a/packages/core/src/Lib/UseColor/Internal/Lib/UseTextColor.ts +++ b/packages/core/src/Lib/UseColor/Internal/Lib/UseTextColor.ts @@ -1,16 +1,20 @@ -import type { Color, ColorableTextComponentName, FlyonUIVueAppDefaultConfig } from '@/Lib'; -import type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'; -import { useColor } from '@/Lib/UseColor/Internal'; -import { isDefined } from '@/Lib/Utils/Internal'; -import { computed, toValue } from 'vue'; +import type { FlyonUIVueAppDefaultConfig, TextColor, TextColorableComponentName } from '@/Lib'; +import type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'; +import { useColor } from '@/Lib/UseColor/Internal'; +import { computed, toValue } from 'vue'; export function useTextColor( config: Ref, - componentName: MaybeRefOrGetter, - color: MaybeRefOrGetter, - defaultColorClass: MaybeRefOrGetter = '', + componentName: MaybeRefOrGetter, + color: MaybeRefOrGetter, ): ComputedRef { return computed((): string => { - return isDefined(color) ? useColor(config, componentName, color).value : toValue(defaultColorClass); + const c = toValue(color); + + if (c === 'base') { + return 'text-base-content'; + } + + return useColor(config, componentName, c).value; }); } diff --git a/packages/core/src/Lib/UseColor/Types/Color.ts b/packages/core/src/Lib/UseColor/Types/Color.ts index 8a456722..277cce3b 100644 --- a/packages/core/src/Lib/UseColor/Types/Color.ts +++ b/packages/core/src/Lib/UseColor/Types/Color.ts @@ -14,10 +14,10 @@ export type ColorableComponentName = Extract< | 'FoStatus' | 'FoSwitch' | 'FoTooltip' - | ColorableTextComponentName + | TextColorableComponentName >; -export type ColorableTextComponentName = Extract; +export type TextColorableComponentName = Extract; export type Color = 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'; @@ -25,3 +25,10 @@ export interface Colorable { /** The component's color */ color?: Color; } + +export type TextColor = 'base' | Color; + +export interface TextColorable { + /** The component's text color */ + color?: TextColor; +} diff --git a/packages/core/src/UI/Components/Loading/Types/Loading.ts b/packages/core/src/UI/Components/Loading/Types/Loading.ts index 571ec9c1..e0a5bbb4 100644 --- a/packages/core/src/UI/Components/Loading/Types/Loading.ts +++ b/packages/core/src/UI/Components/Loading/Types/Loading.ts @@ -1,8 +1,8 @@ -import type { Colorable, Sizable } from '@/Lib'; +import type { Sizable, TextColorable } from '@/Lib'; export type LoadingAnimation = 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'; -export interface LoadingProps extends Colorable, Sizable { +export interface LoadingProps extends TextColorable, Sizable { /** The component's loading animation */ animation?: LoadingAnimation; } diff --git a/packages/core/src/UI/Content/Divider/Types/Divider.ts b/packages/core/src/UI/Content/Divider/Types/Divider.ts index 779df8aa..e217c25f 100644 --- a/packages/core/src/UI/Content/Divider/Types/Divider.ts +++ b/packages/core/src/UI/Content/Divider/Types/Divider.ts @@ -1,6 +1,6 @@ -import type { Colorable, Orientable, Preset, Presettable } from '@/Lib'; -import type { Alignable } from '@/Lib/UseAlignment'; +import type { Orientable, Preset, Presettable, TextColorable } from '@/Lib'; +import type { Alignable } from '@/Lib/UseAlignment'; export type DividerPreset = Extract; -export type DividerProps = Colorable & Presettable & Alignable & Orientable; +export type DividerProps = TextColorable & Presettable & Alignable & Orientable; diff --git a/packages/core/src/UI/Content/Heading/Types/Heading.ts b/packages/core/src/UI/Content/Heading/Types/Heading.ts index f2ad9e98..4622e86a 100644 --- a/packages/core/src/UI/Content/Heading/Types/Heading.ts +++ b/packages/core/src/UI/Content/Heading/Types/Heading.ts @@ -1,8 +1,8 @@ -import type { Colorable } from '@/Lib'; +import type { TextColorable } from '@/Lib'; export type HeadingLevel = '1' | '2' | '3' | '4' | '5' | '6'; -export interface HeadingProps extends Colorable { +export interface HeadingProps extends TextColorable { /** The heading's rank */ level: HeadingLevel; } diff --git a/packages/core/src/UI/Content/Heading/UI/FoHeading.vue b/packages/core/src/UI/Content/Heading/UI/FoHeading.vue index 62045d0c..79e8096a 100644 --- a/packages/core/src/UI/Content/Heading/UI/FoHeading.vue +++ b/packages/core/src/UI/Content/Heading/UI/FoHeading.vue @@ -30,7 +30,7 @@ const [ colorClass, sizeClass, ] = [ - useTextColor(config, 'FoHeading', () => props.color, 'text-base-content'), + useTextColor(config, 'FoHeading', () => props.color), computed(() => { const classes: Record = { 1: 'text-4xl', diff --git a/packages/core/src/UI/Content/Link/Types/Link.ts b/packages/core/src/UI/Content/Link/Types/Link.ts index ebd21ae9..79812945 100644 --- a/packages/core/src/UI/Content/Link/Types/Link.ts +++ b/packages/core/src/UI/Content/Link/Types/Link.ts @@ -1,4 +1,4 @@ -import type { Colorable } from '@/Lib'; +import type { TextColorable } from '@/Lib'; import type { FoRouterLinkProps } from '@/UI/Content/Link/Internal'; import type { RouteLocationRaw } from 'vue-router'; @@ -8,7 +8,7 @@ export type To = Link | RouteLocationRaw; export type UnderlineLinkEffect = 'hover' | 'hover-animated' | 'no-underline'; -export interface LinkProps extends FoRouterLinkProps, Colorable { +export interface LinkProps extends FoRouterLinkProps, TextColorable { /** * If "hover", the link will be underlined when hovered * If "hover-animated", the link will be underlined with an underline animation when hovered diff --git a/packages/core/tests/Lib/UseColor/Internal/Lib/UseTextColor.spec.ts b/packages/core/tests/Lib/UseColor/Internal/Lib/UseTextColor.spec.ts index 07d0bb7e..1cab5cbe 100644 --- a/packages/core/tests/Lib/UseColor/Internal/Lib/UseTextColor.spec.ts +++ b/packages/core/tests/Lib/UseColor/Internal/Lib/UseTextColor.spec.ts @@ -11,17 +11,9 @@ describe('useTextColor', () => { expect(useTextColor(config, 'FoLink', 'neutral').value).toBe('link-neutral'); }); - it('returns no default class if the color is not defined', () => { + it('returns the base color class if the color is the base one', () => { const config = ref({ ...flyonUIVueAppDefaultConfig }); - expect(useTextColor(config, 'FoLink', () => undefined).value).toBe(''); - }); - - it('returns a specific default class if the color is not defined and the default class is specified', () => { - const config = ref({ ...flyonUIVueAppDefaultConfig }); - - const defaultColorClass = 'default-class'; - - expect(useTextColor(config, 'FoLink', () => undefined, defaultColorClass).value).toBe(defaultColorClass); + expect(useTextColor(config, 'FoLink', () => 'base').value).toBe('text-base-content'); }); }); diff --git a/packages/docs/Components/Loading/LoadingAnimation.vue b/packages/docs/Components/Loading/LoadingAnimation.vue index 8af2a7e8..3b0f4f0e 100644 --- a/packages/docs/Components/Loading/LoadingAnimation.vue +++ b/packages/docs/Components/Loading/LoadingAnimation.vue @@ -1,101 +1,139 @@ diff --git a/packages/docs/Components/Loading/LoadingColor.vue b/packages/docs/Components/Loading/LoadingColor.vue index 3ae992a1..079e75b0 100644 --- a/packages/docs/Components/Loading/LoadingColor.vue +++ b/packages/docs/Components/Loading/LoadingColor.vue @@ -1,14 +1,16 @@