@yamada-ui/radio 1.0.30-dev-20240508155232 → 1.0.30-dev-20240509145447

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,6 @@ import {
10
10
  isObject,
11
11
  mergeRefs,
12
12
  useCallbackRef as useCallbackRef2,
13
- omitObject as omitObject2,
14
13
  getValidChildren
15
14
  } from "@yamada-ui/utils";
16
15
  import { useCallback as useCallback2, useId as useId2, useRef, forwardRef as forwardRef2 } from "react";
@@ -20,52 +19,63 @@ import { ui, useMultiComponentStyle, omitThemeProps } from "@yamada-ui/core";
20
19
  import {
21
20
  useFormControl,
22
21
  useFormControlProps,
23
- getFormControlProperties
22
+ formControlProperties
24
23
  } from "@yamada-ui/form-control";
25
24
  import { trackFocusVisible } from "@yamada-ui/use-focus-visible";
26
25
  import {
27
26
  cx,
28
27
  useCallbackRef,
29
- omitObject,
30
28
  funcAll,
31
29
  handlerAll,
32
30
  dataAttr,
33
- pickObject
31
+ splitObject
34
32
  } from "@yamada-ui/utils";
35
33
  import { forwardRef, useCallback, useEffect, useId, useState } from "react";
36
34
  import { jsx, jsxs } from "react/jsx-runtime";
37
- var useRadio = (props) => {
38
- const { name, value, required, disabled, readOnly, ...rest } = useFormControlProps(props);
39
- const id = props.id || useId();
40
- const formControlProps = pickObject(
41
- rest,
42
- getFormControlProperties({ omit: ["aria-readonly"] })
43
- );
35
+ var useRadio = ({
36
+ id,
37
+ ...props
38
+ }) => {
39
+ id != null ? id : id = useId();
40
+ const {
41
+ id: _id,
42
+ name,
43
+ value,
44
+ isChecked: isCheckedProp,
45
+ defaultIsChecked,
46
+ required,
47
+ disabled,
48
+ readOnly,
49
+ onChange: onChangeProp,
50
+ onFocus: onFocusProp,
51
+ onBlur: onBlurProp,
52
+ ...computedProps
53
+ } = useFormControlProps({ id, ...props });
54
+ const [{ "aria-readonly": _ariaReadonly, ...formControlProps }, rest] = splitObject(computedProps, formControlProperties);
44
55
  const [isFocusVisible, setIsFocusVisible] = useState(false);
45
56
  const [isFocused, setFocused] = useState(false);
46
57
  const [isHovered, setHovered] = useState(false);
47
58
  const [isActive, setActive] = useState(false);
48
- const [isChecked, setIsChecked] = useState(!!props.defaultIsChecked);
49
- const isControlled = props.isChecked !== void 0;
50
- const checked = isControlled ? props.isChecked : isChecked;
59
+ const [isChecked, setIsChecked] = useState(!!defaultIsChecked);
60
+ const isControlled = isCheckedProp !== void 0;
61
+ const checked = isControlled ? isCheckedProp : isChecked;
51
62
  useEffect(() => {
52
63
  return trackFocusVisible(setIsFocusVisible);
53
64
  }, []);
54
65
  const onChange = useCallbackRef(
55
66
  (ev) => {
56
- var _a;
57
67
  if (readOnly || disabled) {
58
68
  ev.preventDefault();
59
69
  return;
60
70
  }
61
71
  if (!isControlled)
62
72
  setIsChecked(ev.target.checked);
63
- (_a = rest.onChange) == null ? void 0 : _a.call(rest, ev);
73
+ onChangeProp == null ? void 0 : onChangeProp(ev);
64
74
  },
65
75
  [readOnly, disabled, isControlled]
66
76
  );
67
- const onBlur = useCallbackRef(rest.onBlur);
68
- const onFocus = useCallbackRef(rest.onFocus);
77
+ const onFocus = useCallbackRef(onFocusProp);
78
+ const onBlur = useCallbackRef(onBlurProp);
69
79
  const onKeyDown = useCallback(
70
80
  ({ key }) => {
71
81
  if (key === " ")
@@ -171,6 +181,7 @@ var useRadio = (props) => {
171
181
  [checked, formControlProps]
172
182
  );
173
183
  return {
184
+ props: rest,
174
185
  isFocusVisible,
175
186
  isFocused,
176
187
  isHovered,
@@ -186,49 +197,48 @@ var Radio = forwardRef(
186
197
  (props, ref) => {
187
198
  var _a, _b, _c, _d;
188
199
  const group = useRadioGroupContext();
200
+ const { value: groupValue, ...groupProps } = { ...group };
189
201
  const control = useFormControl(props);
190
202
  const [styles, mergedProps] = useMultiComponentStyle("Radio", {
191
- ...group,
203
+ ...groupProps,
192
204
  ...props
193
205
  });
194
206
  const {
195
207
  className,
196
208
  gap = "0.5rem",
197
- isRequired = (_a = group == null ? void 0 : group.isRequired) != null ? _a : control.isRequired,
198
- isReadOnly = (_b = group == null ? void 0 : group.isReadOnly) != null ? _b : control.isReadOnly,
199
- isDisabled = (_c = group == null ? void 0 : group.isDisabled) != null ? _c : control.isDisabled,
200
- isInvalid = (_d = group == null ? void 0 : group.isInvalid) != null ? _d : control.isInvalid,
209
+ isRequired = (_a = groupProps.isRequired) != null ? _a : control.isRequired,
210
+ isReadOnly = (_b = groupProps.isReadOnly) != null ? _b : control.isReadOnly,
211
+ isDisabled = (_c = groupProps.isDisabled) != null ? _c : control.isDisabled,
212
+ isInvalid = (_d = groupProps.isInvalid) != null ? _d : control.isInvalid,
201
213
  iconProps,
202
214
  inputProps,
203
215
  labelProps,
204
216
  children,
205
- ...rest
217
+ ...computedProps
206
218
  } = omitThemeProps(mergedProps);
207
- const { getContainerProps, getInputProps, getIconProps, getLabelProps } = useRadio({
208
- ...rest,
219
+ const isChecked = groupValue && computedProps.value ? groupValue === computedProps.value : computedProps.isChecked;
220
+ const onChange = groupProps.onChange && computedProps.value ? funcAll(groupProps.onChange, computedProps.onChange) : computedProps.onChange;
221
+ const {
222
+ getContainerProps,
223
+ getInputProps,
224
+ getIconProps,
225
+ getLabelProps,
226
+ props: rest
227
+ } = useRadio({
228
+ ...computedProps,
209
229
  isRequired,
210
230
  isReadOnly,
211
231
  isDisabled,
212
232
  isInvalid,
213
- isChecked: (group == null ? void 0 : group.value) && rest.value ? group.value === rest.value : rest.isChecked,
214
- onChange: (group == null ? void 0 : group.onChange) && rest.value ? funcAll(group.onChange, rest.onChange) : rest.onChange
233
+ isChecked,
234
+ onChange
215
235
  });
216
236
  return /* @__PURE__ */ jsxs(
217
237
  ui.label,
218
238
  {
219
239
  className: cx("ui-radio", className),
220
240
  ...getContainerProps(),
221
- ...omitObject(rest, [
222
- "id",
223
- "name",
224
- "value",
225
- "defaultValue",
226
- "defaultIsChecked",
227
- "isChecked",
228
- "onChange",
229
- "onBlur",
230
- "onFocus"
231
- ]),
241
+ ...rest,
232
242
  __css: {
233
243
  cursor: "pointer",
234
244
  position: "relative",
@@ -282,15 +292,18 @@ var useRadioGroup = ({
282
292
  id,
283
293
  name,
284
294
  isNative,
295
+ value: valueProp,
296
+ defaultValue,
297
+ onChange: onChangeProp,
285
298
  ...props
286
299
  }) => {
287
300
  id != null ? id : id = useId2();
288
301
  name != null ? name : name = `radio-${id}`;
289
- props.onChange = useCallbackRef2(props.onChange);
302
+ const onChangeRef = useCallbackRef2(onChangeProp);
290
303
  const [value, setValue] = useControllableState({
291
- value: props.value,
292
- defaultValue: props.defaultValue,
293
- onChange: props.onChange
304
+ value: valueProp,
305
+ defaultValue,
306
+ onChange: onChangeRef
294
307
  });
295
308
  const containerRef = useRef(null);
296
309
  const onFocus = useCallback2(() => {
@@ -333,6 +346,8 @@ var useRadioGroup = ({
333
346
  [name, value, onChange, isNative]
334
347
  );
335
348
  return {
349
+ props,
350
+ id,
336
351
  name,
337
352
  value,
338
353
  setValue,
@@ -358,8 +373,18 @@ var RadioGroup = forwardRef2(
358
373
  gap,
359
374
  ...props
360
375
  }, ref) => {
361
- const { name, value, onChange, getContainerProps } = useRadioGroup(props);
362
- const { isRequired, isReadOnly, isDisabled, isInvalid } = useFormControl2(props);
376
+ const {
377
+ id,
378
+ name,
379
+ value,
380
+ onChange,
381
+ getContainerProps,
382
+ props: computedProps
383
+ } = useRadioGroup(props);
384
+ const { isRequired, isReadOnly, isDisabled, isInvalid, ...rest } = useFormControl2({
385
+ id,
386
+ ...computedProps
387
+ });
363
388
  const validChildren = getValidChildren(children);
364
389
  let computedChildren = [];
365
390
  if (!validChildren.length && items.length) {
@@ -386,15 +411,11 @@ var RadioGroup = forwardRef2(
386
411
  ref,
387
412
  className: cx2("ui-radio-group", className),
388
413
  gap: gap != null ? gap : direction === "row" ? "1rem" : void 0,
389
- ...getContainerProps(
390
- omitObject2(props, [
391
- "onChange",
392
- "isInvalid",
393
- "isDisabled",
394
- "isRequired",
395
- "isReadOnly"
396
- ])
397
- ),
414
+ ...getContainerProps({
415
+ ...rest,
416
+ id,
417
+ name
418
+ }),
398
419
  direction,
399
420
  children: children != null ? children : computedChildren
400
421
  }
@@ -412,4 +433,4 @@ export {
412
433
  useRadio,
413
434
  Radio
414
435
  };
415
- //# sourceMappingURL=chunk-J2RMAG2B.mjs.map
436
+ //# sourceMappingURL=chunk-6SNWQQAY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/radio-group.tsx","../src/radio.tsx"],"sourcesContent":["import type { ComponentArgs, ThemeProps, UIPropGetter } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport { useFormControl } from \"@yamada-ui/form-control\"\nimport type { FlexProps } from \"@yamada-ui/layouts\"\nimport { Flex } from \"@yamada-ui/layouts\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport type { DOMAttributes, Dict, PropGetter } from \"@yamada-ui/utils\"\nimport {\n createContext,\n cx,\n isObject,\n mergeRefs,\n useCallbackRef,\n getValidChildren,\n} from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ForwardedRef, Ref, ReactElement } from \"react\"\nimport { useCallback, useId, useRef, forwardRef } from \"react\"\nimport type { RadioProps } from \"./radio\"\nimport { Radio } from \"./radio\"\n\nexport type RadioItem<Y extends string | number = string> = RadioProps<Y> & {\n label?: string\n}\n\nconst isEvent = (value: any): value is { target: HTMLInputElement } =>\n value && isObject(value) && isObject(value.target)\n\nexport type UseRadioGroupProps<Y extends string | number = string> = {\n /**\n * The top-level id string that will be applied to the radios.\n * The index of the radio will be appended to this top-level id.\n */\n id?: string\n /**\n * The HTML `name` attribute used for forms.\n */\n name?: string\n /**\n * The value of the radio group.\n */\n value?: Y\n /**\n * The initial value of the radio group.\n */\n defaultValue?: Y\n /**\n * The callback fired when any children radio is checked or unchecked.\n */\n onChange?: (value: Y) => void\n /**\n * If `true`, input elements will receive `checked` attribute instead of `isChecked`.\n *\n * This assumes, you're using native radio inputs.\n *\n * @default false\n */\n isNative?: boolean\n}\n\nexport const useRadioGroup = <\n Y extends string | number = string,\n M extends Dict = Dict,\n>({\n id,\n name,\n isNative,\n value: valueProp,\n defaultValue,\n onChange: onChangeProp,\n ...props\n}: UseRadioGroupProps<Y> & M) => {\n id ??= useId()\n name ??= `radio-${id}`\n\n const onChangeRef = useCallbackRef(onChangeProp)\n\n const [value, setValue] = useControllableState({\n value: valueProp,\n defaultValue,\n onChange: onChangeRef,\n })\n\n const containerRef = useRef<any>(null)\n\n const onFocus = useCallback(() => {\n const container = containerRef.current\n\n if (!container) return\n\n let query = `input:not(:disabled):checked`\n\n let firstInput = container.querySelector(query) as HTMLElement | undefined\n\n if (firstInput) {\n firstInput.focus()\n } else {\n query = `input:not(:disabled)`\n firstInput = container.querySelector(query) as HTMLElement | undefined\n\n firstInput?.focus()\n }\n }, [])\n\n const onChange = useCallback(\n (evOrValue: ChangeEvent<HTMLInputElement> | Y) => {\n const nextValue = (\n isEvent(evOrValue) ? evOrValue.target.value : evOrValue\n ) as Y\n\n setValue(nextValue)\n },\n [setValue],\n )\n\n const getContainerProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref: mergeRefs(ref, containerRef),\n role: \"group\",\n }),\n [],\n )\n\n const getRadioProps: UIPropGetter<\"input\", { value?: Y }, { value?: Y }> =\n useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref,\n name,\n [isNative ? \"checked\" : \"isChecked\"]:\n value != null ? props.value === value : undefined,\n onChange,\n }),\n [name, value, onChange, isNative],\n )\n\n return {\n props,\n id,\n name,\n value,\n setValue,\n onChange,\n onFocus,\n getContainerProps,\n getRadioProps,\n }\n}\n\nexport type UseRadioGroupReturn<Y extends string | number = string> =\n ReturnType<typeof useRadioGroup<Y>>\n\nexport type RadioGroupProps<Y extends string | number = string> =\n ThemeProps<\"Radio\"> &\n Omit<FlexProps, \"onChange\"> &\n UseRadioGroupProps<Y> &\n FormControlOptions & {\n /**\n * If provided, generate radios based on items.\n *\n * @default '[]'\n */\n items?: RadioItem<Y>[]\n }\n\ntype RadioGroupContext = ThemeProps<\"Radio\"> &\n FormControlOptions & {\n name: string\n value: string | number\n onChange: (\n evOrValue: ChangeEvent<HTMLInputElement> | string | number,\n ) => void\n }\n\nconst [RadioGroupProvider, useRadioGroupContext] = createContext<\n RadioGroupContext | undefined\n>({\n strict: false,\n name: \"RadioGroupContext\",\n})\n\nexport { useRadioGroupContext }\n\nexport const RadioGroup = forwardRef(\n <Y extends string | number = string>(\n {\n className,\n size,\n variant,\n colorScheme,\n children,\n items = [],\n direction = \"column\",\n gap,\n ...props\n }: RadioGroupProps<Y>,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const {\n id,\n name,\n value,\n onChange,\n getContainerProps,\n props: computedProps,\n } = useRadioGroup(props)\n const { isRequired, isReadOnly, isDisabled, isInvalid, ...rest } =\n useFormControl({\n id,\n ...computedProps,\n })\n\n const validChildren = getValidChildren(children)\n let computedChildren: ReactElement[] = []\n\n if (!validChildren.length && items.length) {\n computedChildren = items.map(({ label, value, ...props }, i) => (\n <Radio key={i} value={value} {...props}>\n {label}\n </Radio>\n ))\n }\n\n return (\n <RadioGroupProvider\n value={\n {\n size,\n variant,\n colorScheme,\n isRequired,\n isReadOnly,\n isDisabled,\n isInvalid,\n name,\n value,\n onChange,\n } as RadioGroupContext\n }\n >\n <Flex\n ref={ref}\n className={cx(\"ui-radio-group\", className)}\n gap={gap ?? (direction === \"row\" ? \"1rem\" : undefined)}\n {...getContainerProps({\n ...rest,\n id,\n name,\n } as DOMAttributes<HTMLElement>)}\n direction={direction}\n >\n {children ?? computedChildren}\n </Flex>\n </RadioGroupProvider>\n )\n },\n) as {\n <Y extends string | number = string>(\n props: RadioGroupProps<Y> & { ref?: Ref<HTMLDivElement> },\n ): JSX.Element\n} & ComponentArgs\n\nRadioGroup.displayName = \"RadioGroup\"\n","import type {\n HTMLUIProps,\n ThemeProps,\n ComponentArgs,\n UIPropGetter,\n} from \"@yamada-ui/core\"\nimport { ui, useMultiComponentStyle, omitThemeProps } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n useFormControl,\n useFormControlProps,\n formControlProperties,\n} from \"@yamada-ui/form-control\"\nimport { trackFocusVisible } from \"@yamada-ui/use-focus-visible\"\nimport type { Dict, PropGetter } from \"@yamada-ui/utils\"\nimport {\n cx,\n useCallbackRef,\n funcAll,\n handlerAll,\n dataAttr,\n splitObject,\n} from \"@yamada-ui/utils\"\nimport type {\n ForwardedRef,\n Ref,\n ChangeEvent,\n ChangeEventHandler,\n InputHTMLAttributes,\n KeyboardEvent,\n SyntheticEvent,\n DOMAttributes,\n} from \"react\"\nimport { forwardRef, useCallback, useEffect, useId, useState } from \"react\"\nimport { useRadioGroupContext } from \"./radio-group\"\n\nexport type UseRadioProps<Y extends string | number = string> =\n FormControlOptions & {\n /**\n * id assigned to input.\n */\n id?: string\n /**\n * The name of the input field in a radio.\n */\n name?: string\n /**\n * The value to be used in the radio button.\n */\n value?: Y\n /**\n * If `true`, the radio will be initially checked.\n *\n * @default false\n */\n defaultIsChecked?: boolean\n /**\n * If `true`, the radio will be checked.\n *\n * @default false\n */\n isChecked?: boolean\n /**\n * The callback invoked when the checked state changes.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>\n }\n\nexport const useRadio = <\n Y extends string | number = string,\n M extends Dict = Dict,\n>({\n id,\n ...props\n}: UseRadioProps<Y> & M) => {\n id ??= useId()\n const {\n id: _id,\n name,\n value,\n isChecked: isCheckedProp,\n defaultIsChecked,\n required,\n disabled,\n readOnly,\n onChange: onChangeProp,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n ...computedProps\n } = useFormControlProps({ id, ...props })\n const [{ \"aria-readonly\": _ariaReadonly, ...formControlProps }, rest] =\n splitObject(computedProps, formControlProperties)\n\n const [isFocusVisible, setIsFocusVisible] = useState<boolean>(false)\n const [isFocused, setFocused] = useState<boolean>(false)\n const [isHovered, setHovered] = useState<boolean>(false)\n const [isActive, setActive] = useState<boolean>(false)\n\n const [isChecked, setIsChecked] = useState<boolean>(!!defaultIsChecked)\n\n const isControlled = isCheckedProp !== undefined\n const checked = isControlled ? (isCheckedProp as boolean) : isChecked\n\n useEffect(() => {\n return trackFocusVisible(setIsFocusVisible)\n }, [])\n\n const onChange = useCallbackRef(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (readOnly || disabled) {\n ev.preventDefault()\n\n return\n }\n\n if (!isControlled) setIsChecked(ev.target.checked)\n\n onChangeProp?.(ev)\n },\n [readOnly, disabled, isControlled],\n )\n const onFocus = useCallbackRef(onFocusProp)\n const onBlur = useCallbackRef(onBlurProp)\n\n const onKeyDown = useCallback(\n ({ key }: KeyboardEvent<Element>) => {\n if (key === \" \") setActive(true)\n },\n [setActive],\n )\n\n const onKeyUp = useCallback(\n ({ key }: KeyboardEvent<Element>) => {\n if (key === \" \") setActive(false)\n },\n [setActive],\n )\n\n const getContainerProps: UIPropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref,\n \"data-checked\": dataAttr(checked),\n }),\n [checked, formControlProps],\n )\n\n const getIconProps: UIPropGetter<\"span\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref,\n \"data-active\": dataAttr(isActive),\n \"data-hover\": dataAttr(isHovered),\n \"data-checked\": dataAttr(checked),\n \"data-focus\": dataAttr(isFocused),\n \"data-focus-visible\": dataAttr(isFocused && isFocusVisible),\n \"aria-hidden\": true,\n onMouseDown: handlerAll(props.onMouseDown, () => setActive(true)),\n onMouseUp: handlerAll(props.onMouseUp, () => setActive(false)),\n onMouseEnter: handlerAll(props.onMouseEnter, () => setHovered(true)),\n onMouseLeave: handlerAll(props.onMouseLeave, () => setHovered(false)),\n }),\n [checked, isActive, isFocused, isFocusVisible, isHovered, formControlProps],\n )\n\n const getInputProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref,\n id,\n type: \"radio\",\n name,\n value,\n required,\n disabled,\n readOnly,\n checked,\n style: {\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n },\n onChange: handlerAll(props.onChange, onChange),\n onBlur: handlerAll(props.onBlur, onBlur, () => setFocused(false)),\n onFocus: handlerAll(props.onFocus, onFocus, () => setFocused(true)),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n onKeyUp: handlerAll(props.onKeyUp, onKeyUp),\n }),\n [\n formControlProps,\n id,\n name,\n value,\n required,\n disabled,\n readOnly,\n checked,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n ],\n )\n\n const getLabelProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n props,\n ref,\n onMouseDown: handlerAll(props.onMouseDown, (ev: SyntheticEvent) => {\n ev.preventDefault()\n ev.stopPropagation()\n }),\n onTouchStart: handlerAll(props.onTouchStart, (ev: SyntheticEvent) => {\n ev.preventDefault()\n ev.stopPropagation()\n }),\n \"data-checked\": dataAttr(checked),\n }),\n [checked, formControlProps],\n )\n\n return {\n props: rest,\n isFocusVisible,\n isFocused,\n isHovered,\n isActive,\n isChecked: checked,\n getContainerProps,\n getInputProps,\n getIconProps,\n getLabelProps,\n }\n}\n\nexport type UseRadioReturn = ReturnType<typeof useRadio>\n\ntype RadioOptions = {\n iconProps?: HTMLUIProps<\"span\">\n inputProps?: InputHTMLAttributes<HTMLInputElement>\n labelProps?: HTMLUIProps<\"span\">\n}\n\nexport type RadioProps<Y extends string | number = string> = Omit<\n HTMLUIProps<\"label\">,\n keyof UseRadioProps\n> &\n ThemeProps<\"Radio\"> &\n UseRadioProps<Y> &\n RadioOptions\n\n/**\n * `Radio` is a component used for allowing users to select one option from multiple choices.\n *\n * @see Docs https://yamada-ui.com/components/forms/radio\n */\nexport const Radio = forwardRef(\n <Y extends string | number = string>(\n props: RadioProps<Y>,\n ref: ForwardedRef<HTMLInputElement>,\n ) => {\n const group = useRadioGroupContext()\n const { value: groupValue, ...groupProps } = { ...group }\n const control = useFormControl(props)\n const [styles, mergedProps] = useMultiComponentStyle(\"Radio\", {\n ...groupProps,\n ...props,\n })\n const {\n className,\n gap = \"0.5rem\",\n isRequired = groupProps.isRequired ?? control.isRequired,\n isReadOnly = groupProps.isReadOnly ?? control.isReadOnly,\n isDisabled = groupProps.isDisabled ?? control.isDisabled,\n isInvalid = groupProps.isInvalid ?? control.isInvalid,\n iconProps,\n inputProps,\n labelProps,\n children,\n ...computedProps\n } = omitThemeProps(mergedProps)\n\n const isChecked =\n groupValue && computedProps.value\n ? groupValue === computedProps.value\n : computedProps.isChecked\n\n const onChange =\n groupProps.onChange && computedProps.value\n ? funcAll(groupProps.onChange, computedProps.onChange)\n : computedProps.onChange\n\n const {\n getContainerProps,\n getInputProps,\n getIconProps,\n getLabelProps,\n props: rest,\n } = useRadio({\n ...computedProps,\n isRequired,\n isReadOnly,\n isDisabled,\n isInvalid,\n isChecked,\n onChange,\n })\n\n return (\n <ui.label\n className={cx(\"ui-radio\", className)}\n {...getContainerProps()}\n {...rest}\n __css={{\n cursor: \"pointer\",\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n verticalAlign: \"top\",\n gap,\n ...styles.container,\n }}\n >\n <ui.input\n className=\"ui-radio__input\"\n {...getInputProps(inputProps, ref)}\n />\n\n <ui.span\n className=\"ui-radio__icon\"\n {...getIconProps(iconProps)}\n __css={{\n position: \"relative\",\n display: \"inline-block\",\n userSelect: \"none\",\n ...styles.icon,\n }}\n />\n\n <ui.span\n className=\"ui-radio__label\"\n {...getLabelProps(labelProps as DOMAttributes<HTMLElement>)}\n __css={{ ...styles.label }}\n >\n {children}\n </ui.span>\n </ui.label>\n )\n },\n) as {\n <Y extends string | number = string>(\n props: RadioProps<Y> & { ref?: Ref<HTMLInputElement> },\n ): JSX.Element\n} & ComponentArgs\n\nRadio.displayName = \"Radio\"\n"],"mappings":"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","names":["useFormControl","cx","useCallbackRef","useCallback","useId","forwardRef","props","jsx","useId","useCallbackRef","useCallback","props","forwardRef","useFormControl","value","props","jsx","cx"]}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { Radio, RadioProps, UseRadioProps, UseRadioReturn, useRadio } from './radio.mjs';
2
2
  export { RadioGroup, RadioGroupProps, RadioItem, UseRadioGroupProps, UseRadioGroupReturn, useRadioGroup } from './radio-group.mjs';
3
+ import 'react';
3
4
  import '@yamada-ui/core';
4
5
  import '@yamada-ui/form-control';
5
6
  import '@yamada-ui/utils';
6
- import 'react';
7
7
  import '@yamada-ui/layouts';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { Radio, RadioProps, UseRadioProps, UseRadioReturn, useRadio } from './radio.js';
2
2
  export { RadioGroup, RadioGroupProps, RadioItem, UseRadioGroupProps, UseRadioGroupReturn, useRadioGroup } from './radio-group.js';
3
+ import 'react';
3
4
  import '@yamada-ui/core';
4
5
  import '@yamada-ui/form-control';
5
6
  import '@yamada-ui/utils';
6
- import 'react';
7
7
  import '@yamada-ui/layouts';
package/dist/index.js CHANGED
@@ -47,15 +47,18 @@ var useRadioGroup = ({
47
47
  id,
48
48
  name,
49
49
  isNative,
50
+ value: valueProp,
51
+ defaultValue,
52
+ onChange: onChangeProp,
50
53
  ...props
51
54
  }) => {
52
55
  id != null ? id : id = (0, import_react.useId)();
53
56
  name != null ? name : name = `radio-${id}`;
54
- props.onChange = (0, import_utils.useCallbackRef)(props.onChange);
57
+ const onChangeRef = (0, import_utils.useCallbackRef)(onChangeProp);
55
58
  const [value, setValue] = (0, import_use_controllable_state.useControllableState)({
56
- value: props.value,
57
- defaultValue: props.defaultValue,
58
- onChange: props.onChange
59
+ value: valueProp,
60
+ defaultValue,
61
+ onChange: onChangeRef
59
62
  });
60
63
  const containerRef = (0, import_react.useRef)(null);
61
64
  const onFocus = (0, import_react.useCallback)(() => {
@@ -98,6 +101,8 @@ var useRadioGroup = ({
98
101
  [name, value, onChange, isNative]
99
102
  );
100
103
  return {
104
+ props,
105
+ id,
101
106
  name,
102
107
  value,
103
108
  setValue,
@@ -123,8 +128,18 @@ var RadioGroup = (0, import_react.forwardRef)(
123
128
  gap,
124
129
  ...props
125
130
  }, ref) => {
126
- const { name, value, onChange, getContainerProps } = useRadioGroup(props);
127
- const { isRequired, isReadOnly, isDisabled, isInvalid } = (0, import_form_control.useFormControl)(props);
131
+ const {
132
+ id,
133
+ name,
134
+ value,
135
+ onChange,
136
+ getContainerProps,
137
+ props: computedProps
138
+ } = useRadioGroup(props);
139
+ const { isRequired, isReadOnly, isDisabled, isInvalid, ...rest } = (0, import_form_control.useFormControl)({
140
+ id,
141
+ ...computedProps
142
+ });
128
143
  const validChildren = (0, import_utils.getValidChildren)(children);
129
144
  let computedChildren = [];
130
145
  if (!validChildren.length && items.length) {
@@ -151,15 +166,11 @@ var RadioGroup = (0, import_react.forwardRef)(
151
166
  ref,
152
167
  className: (0, import_utils.cx)("ui-radio-group", className),
153
168
  gap: gap != null ? gap : direction === "row" ? "1rem" : void 0,
154
- ...getContainerProps(
155
- (0, import_utils.omitObject)(props, [
156
- "onChange",
157
- "isInvalid",
158
- "isDisabled",
159
- "isRequired",
160
- "isReadOnly"
161
- ])
162
- ),
169
+ ...getContainerProps({
170
+ ...rest,
171
+ id,
172
+ name
173
+ }),
163
174
  direction,
164
175
  children: children != null ? children : computedChildren
165
176
  }
@@ -172,38 +183,50 @@ RadioGroup.displayName = "RadioGroup";
172
183
 
173
184
  // src/radio.tsx
174
185
  var import_jsx_runtime2 = require("react/jsx-runtime");
175
- var useRadio = (props) => {
176
- const { name, value, required, disabled, readOnly, ...rest } = (0, import_form_control2.useFormControlProps)(props);
177
- const id = props.id || (0, import_react2.useId)();
178
- const formControlProps = (0, import_utils2.pickObject)(
179
- rest,
180
- (0, import_form_control2.getFormControlProperties)({ omit: ["aria-readonly"] })
181
- );
186
+ var useRadio = ({
187
+ id,
188
+ ...props
189
+ }) => {
190
+ id != null ? id : id = (0, import_react2.useId)();
191
+ const {
192
+ id: _id,
193
+ name,
194
+ value,
195
+ isChecked: isCheckedProp,
196
+ defaultIsChecked,
197
+ required,
198
+ disabled,
199
+ readOnly,
200
+ onChange: onChangeProp,
201
+ onFocus: onFocusProp,
202
+ onBlur: onBlurProp,
203
+ ...computedProps
204
+ } = (0, import_form_control2.useFormControlProps)({ id, ...props });
205
+ const [{ "aria-readonly": _ariaReadonly, ...formControlProps }, rest] = (0, import_utils2.splitObject)(computedProps, import_form_control2.formControlProperties);
182
206
  const [isFocusVisible, setIsFocusVisible] = (0, import_react2.useState)(false);
183
207
  const [isFocused, setFocused] = (0, import_react2.useState)(false);
184
208
  const [isHovered, setHovered] = (0, import_react2.useState)(false);
185
209
  const [isActive, setActive] = (0, import_react2.useState)(false);
186
- const [isChecked, setIsChecked] = (0, import_react2.useState)(!!props.defaultIsChecked);
187
- const isControlled = props.isChecked !== void 0;
188
- const checked = isControlled ? props.isChecked : isChecked;
210
+ const [isChecked, setIsChecked] = (0, import_react2.useState)(!!defaultIsChecked);
211
+ const isControlled = isCheckedProp !== void 0;
212
+ const checked = isControlled ? isCheckedProp : isChecked;
189
213
  (0, import_react2.useEffect)(() => {
190
214
  return (0, import_use_focus_visible.trackFocusVisible)(setIsFocusVisible);
191
215
  }, []);
192
216
  const onChange = (0, import_utils2.useCallbackRef)(
193
217
  (ev) => {
194
- var _a;
195
218
  if (readOnly || disabled) {
196
219
  ev.preventDefault();
197
220
  return;
198
221
  }
199
222
  if (!isControlled)
200
223
  setIsChecked(ev.target.checked);
201
- (_a = rest.onChange) == null ? void 0 : _a.call(rest, ev);
224
+ onChangeProp == null ? void 0 : onChangeProp(ev);
202
225
  },
203
226
  [readOnly, disabled, isControlled]
204
227
  );
205
- const onBlur = (0, import_utils2.useCallbackRef)(rest.onBlur);
206
- const onFocus = (0, import_utils2.useCallbackRef)(rest.onFocus);
228
+ const onFocus = (0, import_utils2.useCallbackRef)(onFocusProp);
229
+ const onBlur = (0, import_utils2.useCallbackRef)(onBlurProp);
207
230
  const onKeyDown = (0, import_react2.useCallback)(
208
231
  ({ key }) => {
209
232
  if (key === " ")
@@ -309,6 +332,7 @@ var useRadio = (props) => {
309
332
  [checked, formControlProps]
310
333
  );
311
334
  return {
335
+ props: rest,
312
336
  isFocusVisible,
313
337
  isFocused,
314
338
  isHovered,
@@ -324,49 +348,48 @@ var Radio = (0, import_react2.forwardRef)(
324
348
  (props, ref) => {
325
349
  var _a, _b, _c, _d;
326
350
  const group = useRadioGroupContext();
351
+ const { value: groupValue, ...groupProps } = { ...group };
327
352
  const control = (0, import_form_control2.useFormControl)(props);
328
353
  const [styles, mergedProps] = (0, import_core.useMultiComponentStyle)("Radio", {
329
- ...group,
354
+ ...groupProps,
330
355
  ...props
331
356
  });
332
357
  const {
333
358
  className,
334
359
  gap = "0.5rem",
335
- isRequired = (_a = group == null ? void 0 : group.isRequired) != null ? _a : control.isRequired,
336
- isReadOnly = (_b = group == null ? void 0 : group.isReadOnly) != null ? _b : control.isReadOnly,
337
- isDisabled = (_c = group == null ? void 0 : group.isDisabled) != null ? _c : control.isDisabled,
338
- isInvalid = (_d = group == null ? void 0 : group.isInvalid) != null ? _d : control.isInvalid,
360
+ isRequired = (_a = groupProps.isRequired) != null ? _a : control.isRequired,
361
+ isReadOnly = (_b = groupProps.isReadOnly) != null ? _b : control.isReadOnly,
362
+ isDisabled = (_c = groupProps.isDisabled) != null ? _c : control.isDisabled,
363
+ isInvalid = (_d = groupProps.isInvalid) != null ? _d : control.isInvalid,
339
364
  iconProps,
340
365
  inputProps,
341
366
  labelProps,
342
367
  children,
343
- ...rest
368
+ ...computedProps
344
369
  } = (0, import_core.omitThemeProps)(mergedProps);
345
- const { getContainerProps, getInputProps, getIconProps, getLabelProps } = useRadio({
346
- ...rest,
370
+ const isChecked = groupValue && computedProps.value ? groupValue === computedProps.value : computedProps.isChecked;
371
+ const onChange = groupProps.onChange && computedProps.value ? (0, import_utils2.funcAll)(groupProps.onChange, computedProps.onChange) : computedProps.onChange;
372
+ const {
373
+ getContainerProps,
374
+ getInputProps,
375
+ getIconProps,
376
+ getLabelProps,
377
+ props: rest
378
+ } = useRadio({
379
+ ...computedProps,
347
380
  isRequired,
348
381
  isReadOnly,
349
382
  isDisabled,
350
383
  isInvalid,
351
- isChecked: (group == null ? void 0 : group.value) && rest.value ? group.value === rest.value : rest.isChecked,
352
- onChange: (group == null ? void 0 : group.onChange) && rest.value ? (0, import_utils2.funcAll)(group.onChange, rest.onChange) : rest.onChange
384
+ isChecked,
385
+ onChange
353
386
  });
354
387
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
355
388
  import_core.ui.label,
356
389
  {
357
390
  className: (0, import_utils2.cx)("ui-radio", className),
358
391
  ...getContainerProps(),
359
- ...(0, import_utils2.omitObject)(rest, [
360
- "id",
361
- "name",
362
- "value",
363
- "defaultValue",
364
- "defaultIsChecked",
365
- "isChecked",
366
- "onChange",
367
- "onBlur",
368
- "onFocus"
369
- ]),
392
+ ...rest,
370
393
  __css: {
371
394
  cursor: "pointer",
372
395
  position: "relative",