Skip to content

Commit

Permalink
feat(ui): add dVerticalCenter to checkbox and radio
Browse files Browse the repository at this point in the history
  • Loading branch information
xiejay97 committed Mar 17, 2023
1 parent 032bca1 commit cfe1fe7
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 4 deletions.
3 changes: 3 additions & 0 deletions packages/ui/src/components/checkbox/Checkbox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export interface DCheckboxProps extends React.HTMLAttributes<HTMLElement> {
};
dFormControl?: DFormControl;
dModel?: boolean;
dVerticalCenter?: boolean;
dDisabled?: boolean;
dIndeterminate?: boolean;
dInputRender?: DCloneHTMLElement<React.InputHTMLAttributes<HTMLInputElement>>;
Expand All @@ -36,6 +37,7 @@ export const DCheckbox: {
dRef,
dFormControl,
dModel,
dVerticalCenter = false,
dDisabled = false,
dIndeterminate = false,
dInputRender,
Expand Down Expand Up @@ -64,6 +66,7 @@ export const DCheckbox: {
<label
{...restProps}
className={getClassName(restProps.className, `${dPrefix}checkbox`, {
[`${dPrefix}checkbox--vertical-center`]: dVerticalCenter,
'is-indeterminate': dIndeterminate,
'is-checked': checked,
'is-disabled': disabled,
Expand Down
3 changes: 3 additions & 0 deletions packages/ui/src/components/checkbox/CheckboxGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export interface DCheckboxGroupProps<V extends DId> extends Omit<React.HTMLAttri
dFormControl?: DFormControl;
dModel?: V[];
dList: DCheckboxItem<V>[];
dVerticalCenter?: boolean;
dDisabled?: boolean;
dVertical?: boolean;
onModelChange?: (values: V[]) => void;
Expand All @@ -23,6 +24,7 @@ export function DCheckboxGroup<V extends DId>(props: DCheckboxGroupProps<V>): JS
dFormControl,
dList,
dModel,
dVerticalCenter = false,
dDisabled = false,
dVertical = false,
onModelChange,
Expand All @@ -39,6 +41,7 @@ export function DCheckboxGroup<V extends DId>(props: DCheckboxGroupProps<V>): JS
dFormControl={dFormControl}
dList={dList}
dModel={dModel}
dVerticalCenter={dVerticalCenter}
dDisabled={dDisabled}
dRender={(nodes) => (
<div
Expand Down
12 changes: 11 additions & 1 deletion packages/ui/src/components/checkbox/CheckboxGroupRenderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,23 @@ export interface DCheckboxGroupRendererProps<V extends DId> {
dFormControl?: DFormControl;
dModel?: V[];
dList: DCheckboxItem<V>[];
dVerticalCenter?: boolean;
dDisabled?: boolean;
dRender: (nodes: React.ReactElement[]) => JSX.Element | null;
onModelChange?: (values: V[]) => void;
}

const { COMPONENT_NAME } = registerComponentMate({ COMPONENT_NAME: 'DCheckbox.GroupRenderer' as const });
export function DCheckboxGroupRenderer<V extends DId>(props: DCheckboxGroupRendererProps<V>): JSX.Element | null {
const { dFormControl, dList, dModel, dDisabled = false, dRender, onModelChange } = useComponentConfig(COMPONENT_NAME, props);
const {
dFormControl,
dList,
dModel,
dVerticalCenter = false,
dDisabled = false,
dRender,
onModelChange,
} = useComponentConfig(COMPONENT_NAME, props);

//#region Context
const { gDisabled } = useGeneralContext();
Expand All @@ -38,6 +47,7 @@ export function DCheckboxGroupRenderer<V extends DId>(props: DCheckboxGroupRende
dList.map((item, index) => (
<DCheckbox
key={item.value}
dVerticalCenter={dVerticalCenter}
dDisabled={item.disabled || disabled}
dInputRender={(el) =>
cloneHTMLElement(el, {
Expand Down
3 changes: 3 additions & 0 deletions packages/ui/src/components/radio/Radio.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export interface DRadioProps extends React.HTMLAttributes<HTMLElement> {
};
dFormControl?: DFormControl;
dModel?: boolean;
dVerticalCenter?: boolean;
dDisabled?: boolean;
dInputRender?: DCloneHTMLElement<React.InputHTMLAttributes<HTMLInputElement>>;
onModelChange?: (checked: boolean) => void;
Expand All @@ -42,6 +43,7 @@ export const DRadio: {
dRef,
dFormControl,
dModel,
dVerticalCenter = false,
dDisabled = false,
dInputRender,
onModelChange,
Expand Down Expand Up @@ -81,6 +83,7 @@ export const DRadio: {
<label
{...restProps}
className={getClassName(restProps.className, `${dPrefix}radio`, {
[`${dPrefix}radio--vertical-center`]: dVerticalCenter,
[`${dPrefix}radio--button`]: __type,
[`${dPrefix}radio--button-${__type}`]: __type,
[`${dPrefix}radio--${gSize}`]: gSize,
Expand Down
3 changes: 3 additions & 0 deletions packages/ui/src/components/radio/RadioGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export interface DRadioGroupProps<V extends DId> extends Omit<React.HTMLAttribut
dList: DRadioItem<V>[];
dModel?: V | null;
dName?: string;
dVerticalCenter?: boolean;
dDisabled?: boolean;
dType?: 'outline' | 'fill';
dSize?: DSize;
Expand All @@ -33,6 +34,7 @@ export function DRadioGroup<V extends DId>(props: DRadioGroupProps<V>): JSX.Elem
dList,
dModel,
dName,
dVerticalCenter = false,
dDisabled = false,
dType,
dSize,
Expand Down Expand Up @@ -63,6 +65,7 @@ export function DRadioGroup<V extends DId>(props: DRadioGroupProps<V>): JSX.Elem
dList={dList}
dModel={dModel}
dName={dName}
dVerticalCenter={dVerticalCenter}
dDisabled={dDisabled}
dRender={(nodes) => (
<DCompose
Expand Down
13 changes: 12 additions & 1 deletion packages/ui/src/components/radio/RadioGroupRenderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,24 @@ export interface DRadioGroupRendererProps<V extends DId> {
dList: DRadioItem<V>[];
dModel?: V | null;
dName?: string;
dVerticalCenter?: boolean;
dDisabled?: boolean;
dRender: (nodes: React.ReactElement[]) => JSX.Element | null;
onModelChange?: (value: V) => void;
}

const { COMPONENT_NAME } = registerComponentMate({ COMPONENT_NAME: 'DRadio.GroupRenderer' as const });
export function DRadioGroupRenderer<V extends DId>(props: DRadioGroupRendererProps<V>): JSX.Element | null {
const { dFormControl, dList, dModel, dName, dDisabled = false, dRender, onModelChange } = useComponentConfig(COMPONENT_NAME, props);
const {
dFormControl,
dList,
dModel,
dName,
dVerticalCenter = false,
dDisabled = false,
dRender,
onModelChange,
} = useComponentConfig(COMPONENT_NAME, props);

//#region Context
const { gDisabled } = useGeneralContext();
Expand All @@ -57,6 +67,7 @@ export function DRadioGroupRenderer<V extends DId>(props: DRadioGroupRendererPro
<DRadio
key={item.value}
dModel={item.value === value}
dVerticalCenter={dVerticalCenter}
dDisabled={item.disabled || disabled}
dInputRender={(el) =>
cloneHTMLElement(el, {
Expand Down
11 changes: 10 additions & 1 deletion packages/ui/src/styles/components/checkbox.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

position: relative;
display: inline-flex;
align-items: center;
line-height: 1.25;

&:hover {
@include e(input) {
Expand Down Expand Up @@ -96,8 +96,17 @@
}
}

@include m(vertical-center) {
align-items: center;

@include e(state-container) {
top: unset;
}
}

@include e(state-container) {
position: relative;
top: calc((1.25em - 16px) / 2);
flex-shrink: 0;
width: 16px;
height: 16px;
Expand Down
12 changes: 11 additions & 1 deletion packages/ui/src/styles/components/radio.scss
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
@include b(radio) {
position: relative;
display: inline-flex;
align-items: center;
line-height: 1.25;

&:hover {
@include e(input) {
Expand Down Expand Up @@ -50,6 +50,7 @@
}

@include m(button) {
align-items: center;
height: var(--#{$rd-prefix}size);
white-space: nowrap;
cursor: pointer;
Expand Down Expand Up @@ -114,8 +115,17 @@
}
}

@include m(vertical-center) {
align-items: center;

@include e(state-container) {
top: unset;
}
}

@include e(input-wrapper) {
position: relative;
top: calc((1.25em - 16px) / 2);
flex-shrink: 0;
width: 16px;
height: 16px;
Expand Down

0 comments on commit cfe1fe7

Please sign in to comment.