Skip to content

Commit 7245323

Browse files
committed
♻️ Use classNames utility fn for conditional classes
1 parent bab1ad0 commit 7245323

16 files changed

+67
-42
lines changed

scripts/buildTypes.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ const buildTypes = type => {
2222
if (type === 'svelte') {
2323
const getTypeName = component => {
2424
const componentsWithSvelteSpecificTypes = [
25-
'Badge'
25+
'Badge',
26+
'Button'
2627
]
2728

2829
return componentsWithSvelteSpecificTypes.includes(component)

src/components/Avatar/Avatar.svelte

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
22
import type { AvatarProps } from './avatar'
3+
34
import styles from './avatar.module.scss'
5+
import { classNames } from '../../utils/classNames'
46
57
export let img: AvatarProps['img'] = ''
68
export let alt: AvatarProps['alt'] = 'Avatar'
@@ -11,16 +13,16 @@
1113
export let reverse: AvatarProps['reverse'] = false
1214
export let className: AvatarProps['className'] = ''
1315
14-
const classes = [
16+
const classes = classNames([
1517
styles.avatar,
1618
borderless && styles.borderless,
1719
className
18-
].filter(Boolean).join(' ')
20+
])
1921
20-
const groupStyles = [
22+
const groupStyles = classNames([
2123
styles.group,
2224
reverse && styles.reverse
23-
].filter(Boolean).join(' ')
25+
])
2426
</script>
2527

2628
{#if Array.isArray(img)}

src/components/Avatar/Avatar.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import React from 'react'
22
import type { AvatarProps } from './avatar'
3+
34
import styles from './avatar.module.scss'
5+
import { classNames } from '../../utils/classNames'
46

57
const Avatar = ({
68
img,
@@ -12,16 +14,16 @@ const Avatar = ({
1214
reverse,
1315
className,
1416
}: AvatarProps) => {
15-
const classes = [
17+
const classes = classNames([
1618
styles.avatar,
1719
borderless && styles.borderless,
1820
className
19-
].filter(Boolean).join(' ')
21+
])
2022

21-
const groupStyles = [
23+
const groupStyles = classNames([
2224
styles.group,
2325
reverse && styles.reverse
24-
].filter(Boolean).join(' ')
26+
])
2527

2628
const borderColorStyle = borderColor
2729
? { '--w-avatar-border': borderColor } as React.CSSProperties

src/components/Button/Button.astro

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
---
22
import type { ButtonProps } from './button'
3+
34
import styles from './button.module.scss'
5+
import { classNames } from '../../utils/classNames'
46
57
interface Props extends ButtonProps {}
68
@@ -11,11 +13,11 @@ const {
1113
...rest
1214
} = Astro.props
1315
14-
const classes = [
16+
const classes = classNames([
1517
styles.button,
1618
bold && styles.bold,
1719
theme && styles[theme]
18-
].filter(Boolean).join(' ')
20+
])
1921
---
2022

2123
{href ? (

src/components/Button/Button.svelte

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
<script lang="ts">
2-
import type { ButtonProps } from './button'
2+
import type { SvelteButtonProps } from './button'
3+
34
import styles from './button.module.scss'
5+
import { classNames } from '../../utils/classNames'
46
5-
export let theme: ButtonProps['theme'] = null
6-
export let bold: ButtonProps['bold'] = false
7-
export let href: ButtonProps['href'] = ''
8-
export let onClick: ButtonProps['onClick'] = () => {}
7+
export let theme: SvelteButtonProps['theme'] = null
8+
export let bold: SvelteButtonProps['bold'] = false
9+
export let href: SvelteButtonProps['href'] = ''
10+
export let onClick: SvelteButtonProps['onClick'] = () => {}
911
10-
const classes = [
12+
const classes = classNames([
1113
styles.button,
1214
bold && styles.bold,
1315
theme && styles[theme]
14-
].filter(Boolean).join(' ')
16+
])
1517
</script>
1618

1719

src/components/Button/Button.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import React from 'react'
22
import type { ReactButtonProps } from './button'
3+
34
import styles from './button.module.scss'
5+
import { classNames } from '../../utils/classNames'
46

57
const Button = ({
68
theme,
@@ -10,11 +12,11 @@ const Button = ({
1012
onClick,
1113
...rest
1214
}: ReactButtonProps) => {
13-
const classes = [
15+
const classes = classNames([
1416
styles.button,
1517
bold && styles.bold,
1618
theme && styles[theme]
17-
].filter(Boolean).join(' ')
19+
])
1820

1921
if (href) {
2022
return (

src/components/Button/button.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ export type ButtonProps = {
99
| null
1010
bold?: boolean
1111
href?: string
12-
onClick?: () => any
1312
[key: string]: any
1413
}
1514

15+
export type SvelteButtonProps = {
16+
onClick?: () => any
17+
} & ButtonProps
18+
1619
export type ReactButtonProps = {
20+
onClick?: () => any
1721
children: React.ReactNode
1822
} & ButtonProps

src/components/Card/Card.svelte

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<script lang="ts">
22
import type { CardProps } from './card'
3+
34
import styles from './card.module.scss'
5+
import { classNames } from '../../utils/classNames'
46
57
export let element: CardProps['element'] = 'section'
68
export let title: CardProps['title'] = ''
@@ -9,16 +11,16 @@
911
export let className: CardProps['className'] = ''
1012
export let secondary: CardProps['secondary'] = false
1113
12-
const classes = [
14+
const classes = classNames([
1315
styles.card,
1416
secondary && styles.secondary,
1517
className
16-
].filter(Boolean).join(' ')
18+
])
1719
18-
const bodyClasses = [
20+
const bodyClasses = classNames([
1921
styles.body,
2022
compact && styles.compact
21-
].filter(Boolean).join(' ')
23+
])
2224
</script>
2325

2426
<svelte:element this={element} class={classes} {...$$restProps}>

src/components/Card/Card.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import React from 'react'
22
import type { ReactCardProps } from './card'
3+
34
import styles from './card.module.scss'
5+
import { classNames } from '../../utils/classNames'
46

57
const Card = ({
68
Element = 'section',
@@ -12,16 +14,16 @@ const Card = ({
1214
children,
1315
...rest
1416
}: ReactCardProps) => {
15-
const classes = [
17+
const classes = classNames([
1618
styles.card,
1719
className,
1820
secondary && styles.secondary
19-
].filter(Boolean).join(' ')
21+
])
2022

21-
const bodyClasses = [
23+
const bodyClasses = classNames([
2224
styles.body,
2325
compact && styles.compact
24-
].filter(Boolean).join(' ')
26+
])
2527

2628
return (
2729
<Element className={classes} {...rest}>

src/components/Checkbox/Checkbox.svelte

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import check from '../../icons/check.svg?raw'
66
77
import styles from './checkbox.module.scss'
8+
import { classNames } from '../../utils/classNames'
89
910
export let checked: CheckboxProps['checked'] = false
1011
export let label: CheckboxProps['label'] = ''
@@ -14,11 +15,11 @@
1415
export let color: CheckboxProps['color'] = ''
1516
export let onClick: () => any = () => {}
1617
17-
const classes = [
18+
const classes = classNames([
1819
styles.checkbox,
1920
boxed && styles.boxed,
2021
label && subText && styles.col
21-
].filter(Boolean).join(' ')
22+
])
2223
2324
const style = color
2425
? `--w-checkbox-color: ${color};`

src/components/Checkbox/Checkbox.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import ConditionalWrapper from '../ConditionalWrapper/ConditionalWrapper.tsx'
55
import check from '../../icons/check.svg?raw'
66

77
import styles from './checkbox.module.scss'
8+
import { classNames } from '../../utils/classNames'
89

910
const Checkbox = ({
1011
checked,
@@ -15,11 +16,11 @@ const Checkbox = ({
1516
color,
1617
onClick
1718
}: ReactCheckboxProps) => {
18-
const classes = [
19+
const classes = classNames([
1920
styles.checkbox,
2021
boxed && styles.boxed,
2122
label && subText && styles.col
22-
].filter(Boolean).join(' ')
23+
])
2324

2425
const style = color
2526
? { '--w-checkbox-color': color } as React.CSSProperties

src/components/Input/Input.svelte

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ConditionalWrapper from '../ConditionalWrapper/ConditionalWrapper.svelte'
44
55
import styles from './input.module.scss'
6+
import { classNames } from '../../utils/classNames'
67
78
export let type: InputProps['type'] = 'text'
89
export let theme: InputProps['theme'] = null
@@ -13,12 +14,12 @@
1314
export let onChange: (e: any) => any = () => {}
1415
export let onKeyUp: (e: any) => any = () => {}
1516
16-
const classes = [
17+
const classes = classNames([
1718
styles.input,
1819
theme && styles[theme],
1920
fill && styles.fill,
2021
className
21-
].filter(Boolean).join(' ')
22+
])
2223
2324
const useLabel = !!(label || subText || $$slots.icon)
2425
</script>

src/components/Input/Input.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { ReactInputProps } from './input'
33
import ConditionalWrapper from '../ConditionalWrapper/ConditionalWrapper.tsx'
44

55
import styles from './input.module.scss'
6+
import { classNames } from '../../utils/classNames'
67

78
const Input = ({
89
type = 'text',
@@ -15,12 +16,12 @@ const Input = ({
1516
className,
1617
...rest
1718
}: ReactInputProps) => {
18-
const classes = [
19+
const classes = classNames([
1920
styles.input,
2021
theme && styles[theme],
2122
fill && styles.fill,
2223
className
23-
].filter(Boolean).join(' ')
24+
])
2425

2526
const useLabel = !!(label || subText || icon)
2627

src/components/Radio/Radio.svelte

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ConditionalWrapper from '../ConditionalWrapper/ConditionalWrapper.svelte'
44
55
import styles from './radio.module.scss'
6+
import { classNames } from '../../utils/classNames'
67
78
export let name: RadioProps['name'] = ''
89
export let items: RadioProps['items'] = []
@@ -11,11 +12,11 @@
1112
export let className: RadioProps['className'] = ''
1213
export let onChange: () => any = () => {}
1314
14-
const classes = [
15+
const classes = classNames([
1516
styles.radio,
1617
inline && styles.inline,
1718
className
18-
].filter(Boolean).join(' ')
19+
])
1920
2021
const style = color
2122
? `--w-radio-color: ${color};`

src/components/Radio/Radio.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { ReactRadioProps } from './radio'
44
import ConditionalWrapper from '../ConditionalWrapper/ConditionalWrapper.tsx'
55

66
import styles from './radio.module.scss'
7+
import { classNames } from '../../utils/classNames'
78

89
const Radio = ({
910
name,
@@ -13,11 +14,11 @@ const Radio = ({
1314
className,
1415
onChange
1516
}: ReactRadioProps) => {
16-
const classes = [
17+
const classes = classNames([
1718
styles.radio,
1819
inline && styles.inline,
1920
className
20-
].filter(Boolean).join(' ')
21+
])
2122

2223
const style = color
2324
? { '--w-radio-color': color } as React.CSSProperties

src/components/Timeline/timeline.module.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ $rightOffset: calc((((25px + 4px) / 2) - 1px) * -1);
1717
&::before {
1818
position: absolute;
1919
content: '';
20-
width: 1px;
20+
width: 2px;
2121
background: var(--w-timeline-color);
2222
height: 100%;
2323
left: $leftOffset

0 commit comments

Comments
 (0)