From 6b7f7d69cc18e2890db01cc6bfc8063411735164 Mon Sep 17 00:00:00 2001 From: Justin Linn Date: Tue, 24 Feb 2026 23:06:35 -0500 Subject: [PATCH] fix(react): Remove inline styles and wrapper markup from components --- .../react/src/components/form/form-item.tsx | 10 --- .../react/src/components/form/form-label.tsx | 11 --- .../src/components/form/form-message.tsx | 2 +- .../components/molecules/address-field.tsx | 57 +++++++------ .../components/molecules/full-name-field.tsx | 9 +- .../src/components/review/review-item.tsx | 45 ++-------- .../src/components/review/review-list.tsx | 82 ++++--------------- .../src/components/review/review-section.tsx | 60 +++----------- .../src/components/review/review.test.tsx | 8 +- 9 files changed, 74 insertions(+), 210 deletions(-) diff --git a/packages/react/src/components/form/form-item.tsx b/packages/react/src/components/form/form-item.tsx index 69301bd..8a49416 100644 --- a/packages/react/src/components/form/form-item.tsx +++ b/packages/react/src/components/form/form-item.tsx @@ -37,16 +37,6 @@ export interface FormItemProps extends React.HTMLAttributes { * /> * ``` * - * @example With custom styling - * ```tsx - * - * Password - * - * - * - * - * - * ``` */ export const FormItem = React.forwardRef( ({ id, className, ...props }, ref) => { diff --git a/packages/react/src/components/form/form-label.tsx b/packages/react/src/components/form/form-label.tsx index 4a36717..591c054 100644 --- a/packages/react/src/components/form/form-label.tsx +++ b/packages/react/src/components/form/form-label.tsx @@ -40,17 +40,6 @@ export interface FormLabelProps extends React.LabelHTMLAttributes * ``` * - * @example With custom styling on error - * ```tsx - * - * - * Username - * - * - * - * - * - * ``` */ export const FormLabel = React.forwardRef( ({ required, children, ...props }, ref) => { diff --git a/packages/react/src/components/form/form-message.tsx b/packages/react/src/components/form/form-message.tsx index a0a4e1e..09e80f3 100644 --- a/packages/react/src/components/form/form-message.tsx +++ b/packages/react/src/components/form/form-message.tsx @@ -48,7 +48,7 @@ export interface FormMessageProps extends React.HTMLAttributes * * {fieldState.error && ( - * + * * )} * * ``` diff --git a/packages/react/src/components/molecules/address-field.tsx b/packages/react/src/components/molecules/address-field.tsx index 9118efd..e414899 100644 --- a/packages/react/src/components/molecules/address-field.tsx +++ b/packages/react/src/components/molecules/address-field.tsx @@ -152,6 +152,10 @@ export interface AddressFieldProps { * @default "Mailing address" */ legend?: string; + /** + * Additional CSS class names + */ + className?: string; /** * Street address field configuration */ @@ -278,6 +282,7 @@ export const AddressField = React.forwardRef - {legend} +
+ {legend} {/* Street address */} - {/* State and ZIP code row */} -
-
- -
+ {/* State and ZIP code */} + -
- -
-
+ {/* Country (optional) */} {showCountry && ( diff --git a/packages/react/src/components/molecules/full-name-field.tsx b/packages/react/src/components/molecules/full-name-field.tsx index b330e31..1a0ba36 100644 --- a/packages/react/src/components/molecules/full-name-field.tsx +++ b/packages/react/src/components/molecules/full-name-field.tsx @@ -76,6 +76,10 @@ export interface FullNameFieldProps { * @default 'Name' */ legend?: string; + /** + * Additional CSS class names + */ + className?: string; /** * First name field configuration */ @@ -187,6 +191,7 @@ const DEFAULT_SUFFIX_OPTIONS: SelectOption[] = [ */ export const FullNameField: React.FC = ({ legend = 'Name', + className, firstName, middleName, lastName, @@ -208,8 +213,8 @@ export const FullNameField: React.FC = ({ const showSuffix = suffix?.show === true; return ( -
- {legend} +
+ {legend} Active} + * value={Active} * /> * ``` */ export const ReviewItem = React.forwardRef( - ({ label, value, valueList = false, className = '', ...props }, ref) => { + ({ label, value, valueList = false, className, ...props }, ref) => { // Handle null/undefined values const displayValue = value ?? 'Not provided'; @@ -72,13 +72,7 @@ export const ReviewItem = React.forwardRef( const renderValue = () => { if (valueList && Array.isArray(value)) { return ( -
    +
      {value.map((item, index) => (
    • {item ?? 'Not provided'}
    • ))} @@ -95,36 +89,9 @@ export const ReviewItem = React.forwardRef( }; return ( -
      -
      - {label} -
      -
      - {renderValue()} -
      +
      +
      {label}
      +
      {renderValue()}
      ); } diff --git a/packages/react/src/components/review/review-list.tsx b/packages/react/src/components/review/review-list.tsx index f5e0952..b1efb7e 100644 --- a/packages/react/src/components/review/review-list.tsx +++ b/packages/react/src/components/review/review-list.tsx @@ -73,77 +73,25 @@ export interface ReviewListProps { * * ``` */ -export const ReviewList = React.forwardRef( - ({ items, listStyle = 'bullet', className = '', ...props }, ref) => { - const getListStyleType = () => { - switch (listStyle) { - case 'numbered': - return 'decimal'; - case 'none': - return 'none'; - case 'bullet': - default: - return 'disc'; - } - }; - - const ElementType = listStyle === 'numbered' ? 'ol' : 'ul'; +export const ReviewList = React.forwardRef( + ({ items, listStyle = 'bullet', className, ...props }, ref) => { + const ListElement = listStyle === 'numbered' ? 'ol' : 'ul'; return ( -
      } + className={className} + data-list-style={listStyle} + data-slot="review-list" {...props} > - - {items.map((item, index) => ( -
    • -
      - - {item.label} - - - {item.value ?? 'Not provided'} - -
      -
    • - ))} -
      -
      + {items.map((item, index) => ( +
    • + {item.label} + {item.value ?? 'Not provided'} +
    • + ))} + ); } ); diff --git a/packages/react/src/components/review/review-section.tsx b/packages/react/src/components/review/review-section.tsx index 232f6cb..0b39585 100644 --- a/packages/react/src/components/review/review-section.tsx +++ b/packages/react/src/components/review/review-section.tsx @@ -69,7 +69,7 @@ export interface ReviewSectionProps { * ``` */ export const ReviewSection = React.forwardRef( - ({ title, children, editHref, onEdit, editLabel = 'Edit', className = '', ...props }, ref) => { + ({ title, children, editHref, onEdit, editLabel = 'Edit', className, ...props }, ref) => { const handleEditClick = (e: React.MouseEvent) => { if (onEdit) { e.preventDefault(); @@ -78,53 +78,19 @@ export const ReviewSection = React.forwardRef( }; return ( -
      -
      -

      +

      {title}

      + {(editHref || onEdit) && ( + - {title} - - {(editHref || onEdit) && ( - - {editLabel} - - )} -
      -
      {children}
      + {editLabel} + + )} + {children}
      ); } diff --git a/packages/react/src/components/review/review.test.tsx b/packages/react/src/components/review/review.test.tsx index 1c999ef..a587d96 100644 --- a/packages/react/src/components/review/review.test.tsx +++ b/packages/react/src/components/review/review.test.tsx @@ -212,7 +212,7 @@ describe('ReviewList', () => { const list = container.querySelector('ul'); expect(list).toBeInTheDocument(); - expect(list).toHaveStyle({ listStyleType: 'disc' }); + expect(list).toHaveAttribute('data-list-style', 'bullet'); const listItems = container.querySelectorAll('li'); expect(listItems).toHaveLength(3); @@ -223,7 +223,7 @@ describe('ReviewList', () => { const list = container.querySelector('ol'); expect(list).toBeInTheDocument(); - expect(list).toHaveStyle({ listStyleType: 'decimal' }); + expect(list).toHaveAttribute('data-list-style', 'numbered'); }); it('renders without list markers when listStyle is none', () => { @@ -231,7 +231,7 @@ describe('ReviewList', () => { const list = container.querySelector('ul'); expect(list).toBeInTheDocument(); - expect(list).toHaveStyle({ listStyleType: 'none' }); + expect(list).toHaveAttribute('data-list-style', 'none'); }); it('handles empty items array', () => { @@ -315,7 +315,7 @@ describe('Review components integration', () => { // Check list rendering expect(screen.getByText('Languages')).toBeInTheDocument(); - const languagesList = container.querySelectorAll('.review-item ul li'); + const languagesList = container.querySelectorAll('[data-slot="review-item"] ul li'); expect(languagesList).toHaveLength(2); // Check review list