Skip to content

Commit dd85699

Browse files
feat: add border-top-color, border-right-color, border-bottom-color, border-left-color CSS property support
1 parent e54d2b8 commit dd85699

3 files changed

Lines changed: 95 additions & 0 deletions

File tree

packages/spark_css/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- **Feat**: Added `CssAnimation` sealed class for the `animation` shorthand property with `.none`, single animation (name, duration, timingFunction, delay, iterationCount, direction, fillMode, playState), `.multiple()`, plus `.variable()`, `.raw()`, and `.global()` escape hatches.
1212
- **Feat**: Added `CssAnimationDirection`, `CssAnimationFillMode`, `CssAnimationPlayState`, and `CssAnimationIterationCount` sealed classes for animation sub-properties. Reuses existing `CssDuration` and `CssTimingFunction` from `CssTransition`.
1313
- **Feat**: Added `CssBorderCollapse` sealed class for `border-collapse` property with `.separate`, `.collapse` keywords, plus `.variable()`, `.raw()`, and `.global()` escape hatches.
14+
- **Feat**: Added `border-top-color`, `border-right-color`, `border-bottom-color`, and `border-left-color` CSS property support via `CssColor?` parameters in `Style.typed()`.
1415

1516
### Changed
1617

packages/spark_css/lib/src/style.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ class Style implements CssStyle {
290290
CssBorder? borderRight,
291291
CssBorder? borderBottom,
292292
CssBorder? borderLeft,
293+
CssColor? borderTopColor,
294+
CssColor? borderRightColor,
295+
CssColor? borderBottomColor,
296+
CssColor? borderLeftColor,
293297
CssBorderRadius? borderRadius,
294298
CssBorderCollapse? borderCollapse,
295299
CssOutline? outline,
@@ -413,6 +417,18 @@ class Style implements CssStyle {
413417
_properties['border-bottom'] = borderBottom.toCss();
414418
}
415419
if (borderLeft != null) _properties['border-left'] = borderLeft.toCss();
420+
if (borderTopColor != null) {
421+
_properties['border-top-color'] = borderTopColor.toCss();
422+
}
423+
if (borderRightColor != null) {
424+
_properties['border-right-color'] = borderRightColor.toCss();
425+
}
426+
if (borderBottomColor != null) {
427+
_properties['border-bottom-color'] = borderBottomColor.toCss();
428+
}
429+
if (borderLeftColor != null) {
430+
_properties['border-left-color'] = borderLeftColor.toCss();
431+
}
416432
if (borderRadius != null) {
417433
_properties['border-radius'] = borderRadius.toCss();
418434
}

packages/spark_css/test/style_test.dart

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ void main() {
100100
CssBorderStyle.solid,
101101
),
102102
borderLeft: CssBorder.widthStyle(CssLength.px(1), CssBorderStyle.solid),
103+
borderTopColor: CssColor.red,
104+
borderRightColor: CssColor.green,
105+
borderBottomColor: CssColor.blue,
106+
borderLeftColor: CssColor.black,
103107
borderRadius: CssBorderRadius.all(CssLength.px(5)),
104108
outline: CssOutline(
105109
width: CssLength.px(1),
@@ -144,6 +148,80 @@ void main() {
144148
expect(css, contains('margin: 10px;'));
145149
expect(css, contains('background: red;'));
146150
expect(css, contains('grid-template-columns: 1fr 1fr;'));
151+
expect(css, contains('border-top-color: red;'));
152+
expect(css, contains('border-right-color: green;'));
153+
expect(css, contains('border-bottom-color: blue;'));
154+
expect(css, contains('border-left-color: black;'));
155+
});
156+
157+
test('renders border-top-color property', () {
158+
expect(
159+
Style.typed(borderTopColor: CssColor.hex('ff0000')).toCss(),
160+
contains('border-top-color: #ff0000;'),
161+
);
162+
expect(
163+
Style.typed(borderTopColor: CssColor.variable('border-top')).toCss(),
164+
contains('border-top-color: var(--border-top);'),
165+
);
166+
expect(
167+
Style.typed(borderTopColor: CssColor.global(CssGlobal.inherit)).toCss(),
168+
contains('border-top-color: inherit;'),
169+
);
170+
});
171+
172+
test('renders border-right-color property', () {
173+
expect(
174+
Style.typed(borderRightColor: CssColor.hex('00ff00')).toCss(),
175+
contains('border-right-color: #00ff00;'),
176+
);
177+
expect(
178+
Style.typed(
179+
borderRightColor: CssColor.variable('border-right'),
180+
).toCss(),
181+
contains('border-right-color: var(--border-right);'),
182+
);
183+
expect(
184+
Style.typed(
185+
borderRightColor: CssColor.global(CssGlobal.inherit),
186+
).toCss(),
187+
contains('border-right-color: inherit;'),
188+
);
189+
});
190+
191+
test('renders border-bottom-color property', () {
192+
expect(
193+
Style.typed(borderBottomColor: CssColor.hex('0000ff')).toCss(),
194+
contains('border-bottom-color: #0000ff;'),
195+
);
196+
expect(
197+
Style.typed(
198+
borderBottomColor: CssColor.variable('border-bottom'),
199+
).toCss(),
200+
contains('border-bottom-color: var(--border-bottom);'),
201+
);
202+
expect(
203+
Style.typed(
204+
borderBottomColor: CssColor.global(CssGlobal.inherit),
205+
).toCss(),
206+
contains('border-bottom-color: inherit;'),
207+
);
208+
});
209+
210+
test('renders border-left-color property', () {
211+
expect(
212+
Style.typed(borderLeftColor: CssColor.hex('000000')).toCss(),
213+
contains('border-left-color: #000000;'),
214+
);
215+
expect(
216+
Style.typed(borderLeftColor: CssColor.variable('border-left')).toCss(),
217+
contains('border-left-color: var(--border-left);'),
218+
);
219+
expect(
220+
Style.typed(
221+
borderLeftColor: CssColor.global(CssGlobal.inherit),
222+
).toCss(),
223+
contains('border-left-color: inherit;'),
224+
);
147225
});
148226

149227
test('renders accent-color property', () {

0 commit comments

Comments
 (0)