Skip to content

Commit a054e68

Browse files
committed
refactor: rename and restructure styling variables
1 parent e604de5 commit a054e68

File tree

4 files changed

+55
-40
lines changed

4 files changed

+55
-40
lines changed

src/components/Timeline.css

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22
--line-width: 0.2rem;
33
--line-color: black;
44
--line-overhang: 1rem;
5+
--item-gap: 1rem;
6+
--item-start-offset-left: 0;
7+
--item-start-offset-right: 5rem;
58
--marker-size: 1rem;
69
--marker-color: var(--line-color);
710
--marker-radius: 50%;
811
--pointer-height: 2rem;
912
--pointer-width: 1rem;
10-
--pointer-offset: 5rem;
13+
--pointer-min-offset: 5rem;
14+
--pointer-spacing: 1rem;
1115
--card-background: whitesmoke;
1216
--card-radius: 0.1rem;
13-
--card-offset: 1rem;
1417
--card-shadow: unset;
1518
--card-padding: 1rem;
16-
--offset-left: 0;
17-
--offset-right: 5rem;
18-
--gap: 1rem;
1919
}
2020

2121
.timeline {
@@ -46,32 +46,32 @@
4646
display: flex;
4747
padding-block: var(--line-overhang);
4848
flex-direction: column;
49-
gap: var(--gap);
49+
gap: var(--item-gap);
5050
flex: 1;
5151
}
5252

5353
.timeline__items-container--left {
54-
margin-top: var(--offset-left);
54+
margin-top: var(--item-start-offset-left);
5555
}
5656

5757
.timeline__items-container--right {
58-
margin-top: var(--offset-right);
58+
margin-top: var(--item-start-offset-right);
5959
}
6060

6161
.timeline-item {
6262
position: relative;
6363
display: flex;
6464
align-items: flex-start;
6565
transition: top 0.1s;
66-
gap: var(--card-offset);
66+
gap: var(--pointer-spacing);
6767
}
6868

6969
.timeline__items-container--left .timeline-item {
7070
flex-direction: row-reverse;
7171
}
7272

7373
.timeline-item__marker {
74-
margin-top: var(--pointer-offset);
74+
margin-top: var(--pointer-min-offset);
7575
}
7676

7777
.timeline-item__marker:not(.timeline-item__marker--custom) {

src/components/Timeline.stories.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,15 @@ export const SpacingOptions: StoryObj<typeof Timeline> = {
161161
items,
162162
...defaultTimelineConfig,
163163
styleConfig: {
164-
gap: '5rem',
165-
offset: {
166-
left: '10rem',
167-
right: '3rem',
164+
item: {
165+
gap: '5rem',
166+
startOffset: {
167+
left: '10rem',
168+
right: '3rem',
169+
},
168170
},
169171
pointer: {
170-
offset: '4rem',
172+
minOffset: '4rem',
171173
},
172174
line: {
173175
overhang: '4rem',
@@ -191,7 +193,6 @@ export const CustomStyle: StoryObj<typeof Timeline> = {
191193
background: 'white',
192194
radius: '.2rem',
193195
shadow: '.1rem .1rem .5rem rgb(0,0,0,0.1)',
194-
offset: '2rem',
195196
},
196197
line: {
197198
width: '.1rem',
@@ -205,6 +206,7 @@ export const CustomStyle: StoryObj<typeof Timeline> = {
205206
pointer: {
206207
width: '2rem',
207208
height: '2rem',
209+
spacing: '2rem',
208210
},
209211
},
210212
},

src/helper/object.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
1-
export const flattenObject = <O extends Record<string, T>, T extends O | string | undefined>(ob: Record<string, T>, delimiter?: string) => {
1+
export const flattenObject = <O extends Record<string, T>, T extends O | string | undefined>(
2+
ob: Record<string, T>,
3+
delimiter?: string,
4+
keyTransformer: (key: string) => string = (key) => key,
5+
) => {
26
const result: Record<string, string> = {};
37

48
Object.keys(ob).forEach((i) => {
59
const value = ob[i];
610
if (typeof value === 'object') {
711
const temp = flattenObject(value, delimiter);
812
Object.keys(temp).forEach((j) => {
9-
result[`${i}${delimiter ?? '.'}${j}`] = temp[j];
13+
result[`${keyTransformer(i)}${delimiter ?? '.'}${j}`] = temp[j];
1014
});
1115
} else if (value) {
12-
result[i] = value;
16+
result[keyTransformer(i)] = value;
1317
}
1418
});
1519

1620
return result;
1721
};
22+
23+
export const camelCaseToKebabCase = (value: string) =>
24+
value
25+
.split(/(?=[A-Z])/g)
26+
.join('-')
27+
.toLowerCase();

src/models/style.ts

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,40 @@
1-
import { flattenObject } from '../helper/object';
1+
import { CSSProperties } from 'react';
2+
import { camelCaseToKebabCase, flattenObject } from '../helper/object';
23

34
export type StyleConfig = {
45
line?: {
5-
width?: string;
6-
color?: string;
7-
overhang?: string;
6+
width?: CSSProperties['width'];
7+
color?: CSSProperties['backgroundColor'];
8+
overhang?: CSSProperties['paddingBlock'];
89
};
9-
gap?: string;
10-
offset?: {
11-
left?: string;
12-
right?: string;
10+
item?: {
11+
gap?: CSSProperties['gap'];
12+
startOffset?: {
13+
left?: CSSProperties['marginTop'];
14+
right?: CSSProperties['marginTop'];
15+
};
1316
};
1417
marker?: {
15-
size?: string;
16-
color?: string;
17-
radius?: string;
18+
size?: CSSProperties['width'];
19+
color?: CSSProperties['backgroundColor'];
20+
radius?: CSSProperties['borderRadius'];
1821
};
1922
pointer?: {
20-
height?: string;
21-
width?: string;
22-
offset?: string;
23+
height?: CSSProperties['height'];
24+
width?: CSSProperties['width'];
25+
minOffset?: CSSProperties['marginTop'];
26+
spacing?: CSSProperties['gap'];
2327
};
2428
card?: {
25-
background?: string;
26-
radius?: string;
27-
offset?: string;
28-
shadow?: string;
29-
padding?: string;
29+
background?: CSSProperties['backgroundColor'];
30+
radius?: CSSProperties['borderRadius'];
31+
shadow?: CSSProperties['boxShadow'];
32+
padding?: CSSProperties['padding'];
3033
};
3134
};
3235

3336
export const convertToCssVariable = (styleConfig: StyleConfig) =>
34-
Object.entries(flattenObject(styleConfig, '-')).reduce(
35-
(prev: Record<string, string>, [key, value]) => ({ ...prev, [`--${key}`]: value }),
37+
Object.entries(flattenObject(styleConfig, '-', camelCaseToKebabCase)).reduce(
38+
(prev: Record<string, string>, [key, value]) => ({ ...prev, [`--${key}`]: typeof value === 'number' ? `${value}px` : value }),
3639
{},
3740
);

0 commit comments

Comments
 (0)