@yamada-ui/editable 1.0.45-dev-20241005224505 → 1.0.45-dev-20241006032009

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,10 +2,10 @@
2
2
 
3
3
  // src/editable.tsx
4
4
  import {
5
- ui,
6
5
  forwardRef,
7
- useComponentMultiStyle,
8
- omitThemeProps
6
+ omitThemeProps,
7
+ ui,
8
+ useComponentMultiStyle
9
9
  } from "@yamada-ui/core";
10
10
  import {
11
11
  formControlProperties,
@@ -16,35 +16,35 @@ import { useFocusOnPointerDown } from "@yamada-ui/use-focus";
16
16
  import {
17
17
  createContext,
18
18
  cx,
19
+ handlerAll,
20
+ isContains,
21
+ mergeRefs,
22
+ pickObject,
19
23
  runIfFunc,
20
24
  useCallbackRef,
21
25
  useSafeLayoutEffect,
22
- useUpdateEffect,
23
- isContains,
24
- handlerAll,
25
- mergeRefs,
26
- pickObject
26
+ useUpdateEffect
27
27
  } from "@yamada-ui/utils";
28
28
  import { useCallback, useEffect, useRef, useState } from "react";
29
29
  import { jsx } from "react/jsx-runtime";
30
30
  var useEditable = (props) => {
31
31
  const {
32
32
  id,
33
+ defaultValue,
34
+ isPreviewFocusable = true,
33
35
  placeholder,
36
+ selectAllOnFocus = true,
37
+ startWithEditView,
38
+ submitOnBlur = true,
34
39
  value: valueProp,
35
- onChange: onChangeProp,
36
40
  onCancel: onCancelProp,
37
- onSubmit: onSubmitProp,
41
+ onChange: onChangeProp,
38
42
  onEdit: onEditProp,
39
- defaultValue,
40
- startWithEditView,
41
- isPreviewFocusable = true,
42
- submitOnBlur = true,
43
- selectAllOnFocus = true,
43
+ onSubmit: onSubmitProp,
44
44
  ...rest
45
45
  } = useFormControlProps(props);
46
46
  const onEditRef = useCallbackRef(onEditProp);
47
- const { required, disabled, readOnly, ...formControlProps } = pickObject(
47
+ const { disabled, readOnly, required, ...formControlProps } = pickObject(
48
48
  rest,
49
49
  formControlProperties
50
50
  );
@@ -66,8 +66,8 @@ var useEditable = (props) => {
66
66
  const submitRef = useRef(null);
67
67
  useFocusOnPointerDown({
68
68
  ref: inputRef,
69
- enabled: isEditing,
70
- elements: [cancelRef, submitRef]
69
+ elements: [cancelRef, submitRef],
70
+ enabled: isEditing
71
71
  });
72
72
  useSafeLayoutEffect(() => {
73
73
  var _a, _b;
@@ -116,7 +116,7 @@ var useEditable = (props) => {
116
116
  if (ev.key === "Escape") {
117
117
  onCancel();
118
118
  } else {
119
- const { shiftKey, metaKey } = ev;
119
+ const { metaKey, shiftKey } = ev;
120
120
  if (!shiftKey && !metaKey) onSubmit();
121
121
  }
122
122
  },
@@ -152,9 +152,9 @@ var useEditable = (props) => {
152
152
  (props2 = {}, ref = null) => ({
153
153
  ...props2,
154
154
  ref: mergeRefs(ref, previewRef),
155
+ children: isValueEmpty ? placeholder : value,
155
156
  hidden: isEditing,
156
157
  tabIndex: isInteractive && isPreviewFocusable ? 0 : void 0,
157
- children: isValueEmpty ? placeholder : value,
158
158
  onFocus: handlerAll(props2.onFocus, onEdit, onUpdatePrevValue)
159
159
  }),
160
160
  [
@@ -172,18 +172,18 @@ var useEditable = (props) => {
172
172
  (props2 = {}, ref = null) => ({
173
173
  ...formControlProps,
174
174
  ...props2,
175
- ref: mergeRefs(ref, inputRef),
176
175
  id,
177
- placeholder,
178
- hidden: !isEditing,
179
- value,
180
- required,
176
+ ref: mergeRefs(ref, inputRef),
181
177
  disabled,
178
+ hidden: !isEditing,
179
+ placeholder,
182
180
  readOnly,
181
+ required,
182
+ value,
183
183
  onBlur: handlerAll(props2.onBlur, onBlur),
184
184
  onChange: handlerAll(props2.onChange, onChange),
185
- onKeyDown: handlerAll(props2.onKeyDown, onKeyDown),
186
- onFocus: handlerAll(props2.onFocus, onUpdatePrevValue)
185
+ onFocus: handlerAll(props2.onFocus, onUpdatePrevValue),
186
+ onKeyDown: handlerAll(props2.onKeyDown, onKeyDown)
187
187
  }),
188
188
  [
189
189
  disabled,
@@ -204,18 +204,18 @@ var useEditable = (props) => {
204
204
  (props2 = {}, ref = null) => ({
205
205
  ...formControlProps,
206
206
  ...props2,
207
- ref: mergeRefs(ref, inputRef),
208
207
  id,
209
- placeholder,
210
- hidden: !isEditing,
211
- value,
212
- required,
208
+ ref: mergeRefs(ref, inputRef),
213
209
  disabled,
210
+ hidden: !isEditing,
211
+ placeholder,
214
212
  readOnly,
213
+ required,
214
+ value,
215
215
  onBlur: handlerAll(props2.onBlur, onBlur),
216
216
  onChange: handlerAll(props2.onChange, onChange),
217
- onKeyDown: handlerAll(props2.onKeyDown, onKeyDownWithoutSubmit),
218
- onFocus: handlerAll(props2.onFocus, onUpdatePrevValue)
217
+ onFocus: handlerAll(props2.onFocus, onUpdatePrevValue),
218
+ onKeyDown: handlerAll(props2.onKeyDown, onKeyDownWithoutSubmit)
219
219
  }),
220
220
  [
221
221
  disabled,
@@ -271,85 +271,85 @@ var useEditable = (props) => {
271
271
  return {
272
272
  isEditing,
273
273
  value,
274
- onEdit,
275
- onCancel,
276
- onSubmit,
277
- getPreviewProps,
278
- getInputProps,
279
- getTextareaProps,
274
+ getCancelProps,
280
275
  getEditProps,
276
+ getInputProps,
277
+ getPreviewProps,
281
278
  getSubmitProps,
282
- getCancelProps
279
+ getTextareaProps,
280
+ onCancel,
281
+ onEdit,
282
+ onSubmit
283
283
  };
284
284
  };
285
285
  var useEditableControl = () => {
286
- const { isEditing, getEditProps, getCancelProps, getSubmitProps } = useEditableContext();
287
- return { isEditing, getEditProps, getCancelProps, getSubmitProps };
286
+ const { isEditing, getCancelProps, getEditProps, getSubmitProps } = useEditableContext();
287
+ return { isEditing, getCancelProps, getEditProps, getSubmitProps };
288
288
  };
289
289
  var [EditableProvider, useEditableContext] = createContext({
290
290
  name: "EditableContext",
291
291
  errorMessage: "useEditableContext: context is undefined. Seems you forgot to wrap the editable components in `<Editable />`"
292
292
  });
293
293
  var Editable = forwardRef(
294
- ({ focusBorderColor, errorBorderColor, ...props }, ref) => {
294
+ ({ errorBorderColor, focusBorderColor, ...props }, ref) => {
295
295
  const [styles, mergedProps] = useComponentMultiStyle("Editable", {
296
- focusBorderColor,
297
296
  errorBorderColor,
297
+ focusBorderColor,
298
298
  ...props
299
299
  });
300
300
  const {
301
301
  className,
302
302
  children,
303
+ defaultValue,
304
+ isDisabled,
303
305
  isInvalid,
306
+ isPreviewFocusable,
304
307
  isReadOnly,
305
308
  isRequired,
306
- isDisabled,
307
309
  placeholder,
308
- value,
309
- defaultValue,
310
+ selectAllOnFocus,
310
311
  startWithEditView,
311
- isPreviewFocusable,
312
312
  submitOnBlur,
313
- selectAllOnFocus,
314
- onChange,
313
+ value,
315
314
  onCancel: onCancelProp,
316
- onSubmit: onSubmitProp,
315
+ onChange,
317
316
  onEdit: onEditProp,
317
+ onSubmit: onSubmitProp,
318
318
  ...rest
319
319
  } = omitThemeProps(mergedProps);
320
320
  const {
321
321
  isEditing,
322
- getPreviewProps,
323
- getInputProps,
324
- getTextareaProps,
325
- getEditProps,
326
322
  getCancelProps,
323
+ getEditProps,
324
+ getInputProps,
325
+ getPreviewProps,
327
326
  getSubmitProps,
328
- onSubmit,
327
+ getTextareaProps,
329
328
  onCancel,
330
- onEdit
329
+ onEdit,
330
+ onSubmit
331
331
  } = useEditable({
332
+ defaultValue,
333
+ isDisabled,
332
334
  isInvalid,
335
+ isPreviewFocusable,
333
336
  isReadOnly,
334
337
  isRequired,
335
- isDisabled,
336
338
  placeholder,
337
- value,
338
- defaultValue,
339
+ selectAllOnFocus,
339
340
  startWithEditView,
340
- isPreviewFocusable,
341
341
  submitOnBlur,
342
- selectAllOnFocus,
343
- onChange,
342
+ value,
344
343
  onCancel: onCancelProp,
345
- onSubmit: onSubmitProp,
346
- onEdit: onEditProp
344
+ onChange,
345
+ onEdit: onEditProp,
346
+ onSubmit: onSubmitProp
347
347
  });
348
348
  const cloneChildren = runIfFunc(children, {
349
349
  isEditing,
350
- onSubmit,
351
350
  onCancel,
352
- onEdit
351
+ onEdit,
352
+ onSubmit
353
353
  });
354
354
  const css = { ...styles.container };
355
355
  return /* @__PURE__ */ jsx(
@@ -357,13 +357,13 @@ var Editable = forwardRef(
357
357
  {
358
358
  value: {
359
359
  isEditing,
360
- getPreviewProps,
361
- getInputProps,
362
- getTextareaProps,
363
- getEditProps,
360
+ styles,
364
361
  getCancelProps,
362
+ getEditProps,
363
+ getInputProps,
364
+ getPreviewProps,
365
365
  getSubmitProps,
366
- styles
366
+ getTextareaProps
367
367
  },
368
368
  children: /* @__PURE__ */ jsx(
369
369
  ui.div,
@@ -385,12 +385,12 @@ var EditablePreview = forwardRef(
385
385
  ({ className, ...rest }, ref) => {
386
386
  const { styles, getPreviewProps } = useEditableContext();
387
387
  const css = {
388
+ bg: "transparent",
388
389
  cursor: "text",
389
390
  display: "inline-block",
390
391
  fontSize: "inherit",
391
392
  fontWeight: "inherit",
392
393
  textAlign: "inherit",
393
- bg: "transparent",
394
394
  ...styles.preview
395
395
  };
396
396
  return /* @__PURE__ */ jsx(
@@ -409,11 +409,11 @@ var EditableInput = forwardRef(
409
409
  ({ className, ...rest }, ref) => {
410
410
  const { styles, getInputProps } = useEditableContext();
411
411
  const css = {
412
- outline: 0,
412
+ bg: "transparent",
413
413
  fontSize: "inherit",
414
414
  fontWeight: "inherit",
415
+ outline: 0,
415
416
  textAlign: "inherit",
416
- bg: "transparent",
417
417
  ...styles.input
418
418
  };
419
419
  return /* @__PURE__ */ jsx(
@@ -432,11 +432,11 @@ var EditableTextarea = forwardRef(
432
432
  ({ className, ...rest }, ref) => {
433
433
  const { styles, getTextareaProps } = useEditableContext();
434
434
  const css = {
435
- outline: 0,
435
+ bg: "transparent",
436
436
  fontSize: "inherit",
437
437
  fontWeight: "inherit",
438
+ outline: 0,
438
439
  textAlign: "inherit",
439
- bg: "transparent",
440
440
  ...styles.textarea
441
441
  };
442
442
  return /* @__PURE__ */ jsx(
@@ -460,4 +460,4 @@ export {
460
460
  EditableInput,
461
461
  EditableTextarea
462
462
  };
463
- //# sourceMappingURL=chunk-IZRLAY3V.mjs.map
463
+ //# sourceMappingURL=chunk-PCLA7CWV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editable.tsx"],"sourcesContent":["import type {\n ColorModeToken,\n CSS,\n CSSUIObject,\n HTMLUIProps,\n PropGetter,\n ThemeProps,\n} from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport type { ChangeEvent, FocusEvent, KeyboardEvent, ReactNode } from \"react\"\nimport {\n forwardRef,\n omitThemeProps,\n ui,\n useComponentMultiStyle,\n} from \"@yamada-ui/core\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { useFocusOnPointerDown } from \"@yamada-ui/use-focus\"\nimport {\n createContext,\n cx,\n handlerAll,\n isContains,\n mergeRefs,\n pickObject,\n runIfFunc,\n useCallbackRef,\n useSafeLayoutEffect,\n useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\n\nexport interface UseEditableProps extends FormControlOptions {\n /**\n * The initial value of the Editable in both edit & preview mode.\n */\n defaultValue?: string\n /**\n * If `true`, the read only view, has a `tabIndex` set to `0`\n * so it can receive focus via the keyboard or click.\n *\n * @default true\n */\n isPreviewFocusable?: boolean\n /**\n * The placeholder text when the value is empty.\n */\n placeholder?: string\n /**\n * If `true`, the input's text will be highlighted on focus.\n *\n * @default true\n */\n selectAllOnFocus?: boolean\n /**\n * If `true`, the Editable will start with edit mode by default.\n */\n startWithEditView?: boolean\n /**\n * If `true`, it'll update the value onBlur and turn off the edit mode.\n *\n * @default true\n */\n submitOnBlur?: boolean\n /**\n * The value of the Editable in both edit & preview mode.\n */\n value?: string\n /**\n * Callback invoked when user cancels input with the `Esc` key.\n * It provides the last confirmed value as argument.\n */\n onCancel?: (preValue: string) => void\n /**\n * A callback invoked when user changes input.\n */\n onChange?: (value: string) => void\n /**\n * A callback invoked once the user enters edit mode.\n */\n onEdit?: () => void\n /**\n * A callback invoked when user confirms value with `enter` key or by blurring input.\n */\n onSubmit?: (value: string) => void\n}\n\nexport const useEditable = (props: UseEditableProps) => {\n const {\n id,\n defaultValue,\n isPreviewFocusable = true,\n placeholder,\n selectAllOnFocus = true,\n startWithEditView,\n submitOnBlur = true,\n value: valueProp,\n onCancel: onCancelProp,\n onChange: onChangeProp,\n onEdit: onEditProp,\n onSubmit: onSubmitProp,\n ...rest\n } = useFormControlProps(props)\n const onEditRef = useCallbackRef(onEditProp)\n const { disabled, readOnly, required, ...formControlProps } = pickObject(\n rest,\n formControlProperties,\n )\n\n const [isEditing, setIsEditing] = useState<boolean>(\n !!startWithEditView && !disabled,\n )\n\n const [value, setValue] = useControllableState({\n defaultValue: defaultValue || \"\",\n value: valueProp,\n onChange: onChangeProp,\n })\n\n const isInteractive = !isEditing && !disabled\n const isValueEmpty = value.length === 0\n\n const [prevValue, setPrevValue] = useState(value)\n\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null)\n const previewRef = useRef<HTMLElement>(null)\n const editRef = useRef<HTMLButtonElement>(null)\n const cancelRef = useRef<HTMLButtonElement>(null)\n const submitRef = useRef<HTMLButtonElement>(null)\n\n useFocusOnPointerDown({\n ref: inputRef,\n elements: [cancelRef, submitRef],\n enabled: isEditing,\n })\n\n useSafeLayoutEffect(() => {\n if (!isEditing) return\n\n inputRef.current?.focus()\n\n if (selectAllOnFocus) inputRef.current?.select()\n }, [])\n\n useUpdateEffect(() => {\n if (!isEditing) {\n editRef.current?.focus()\n\n return\n }\n\n inputRef.current?.focus()\n\n if (selectAllOnFocus) inputRef.current?.select()\n\n onEditRef()\n }, [isEditing, onEditRef, selectAllOnFocus])\n\n useEffect(() => {\n if (isEditing) return\n\n const el = inputRef.current\n const activeEl = el?.ownerDocument.activeElement\n\n if (activeEl === el) el?.blur()\n }, [isEditing])\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n setValue(ev.currentTarget.value),\n [setValue],\n )\n\n const onUpdatePrevValue = useCallback(() => setPrevValue(value), [value])\n\n const onEdit = useCallback(() => {\n if (isInteractive) setIsEditing(true)\n }, [isInteractive])\n\n const onCancel = useCallback(() => {\n setIsEditing(false)\n setValue(prevValue)\n onCancelProp?.(prevValue)\n }, [prevValue, onCancelProp, setValue])\n\n const onSubmit = useCallback(() => {\n setIsEditing(false)\n setPrevValue(value)\n onSubmitProp?.(value)\n }, [onSubmitProp, value])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent) => {\n if (ev.key !== \"Escape\" && ev.key !== \"Enter\") return\n\n ev.preventDefault()\n\n if (ev.key === \"Escape\") {\n onCancel()\n } else {\n const { metaKey, shiftKey } = ev\n\n if (!shiftKey && !metaKey) onSubmit()\n }\n },\n [onCancel, onSubmit],\n )\n\n const onKeyDownWithoutSubmit = useCallback(\n (ev: KeyboardEvent) => {\n if (ev.key !== \"Escape\") return\n\n ev.preventDefault()\n onCancel()\n },\n [onCancel],\n )\n\n const onBlur = useCallback(\n (ev: FocusEvent) => {\n if (!isEditing) return\n\n const ownerDocument = ev.currentTarget.ownerDocument\n const relatedTarget = (ev.relatedTarget ??\n ownerDocument.activeElement) as HTMLElement\n const targetIsCancel = isContains(cancelRef.current, relatedTarget)\n const targetIsSubmit = isContains(submitRef.current, relatedTarget)\n const isValidBlur = !targetIsCancel && !targetIsSubmit\n\n if (!isValidBlur) return\n\n if (submitOnBlur) {\n onSubmit()\n } else {\n onCancel()\n }\n },\n [isEditing, submitOnBlur, onSubmit, onCancel],\n )\n\n const getPreviewProps: PropGetter<\"span\"> = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref: mergeRefs(ref, previewRef),\n children: isValueEmpty ? placeholder : value,\n hidden: isEditing,\n tabIndex: isInteractive && isPreviewFocusable ? 0 : undefined,\n onFocus: handlerAll(props.onFocus, onEdit, onUpdatePrevValue),\n }),\n [\n isEditing,\n isInteractive,\n isPreviewFocusable,\n isValueEmpty,\n onEdit,\n onUpdatePrevValue,\n placeholder,\n value,\n ],\n )\n\n const getInputProps: PropGetter<\"input\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n id,\n ref: mergeRefs(ref, inputRef),\n disabled,\n hidden: !isEditing,\n placeholder,\n readOnly,\n required,\n value,\n onBlur: handlerAll(props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange),\n onFocus: handlerAll(props.onFocus, onUpdatePrevValue),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }),\n [\n disabled,\n id,\n isEditing,\n onBlur,\n onChange,\n onKeyDown,\n onUpdatePrevValue,\n placeholder,\n readOnly,\n required,\n formControlProps,\n value,\n ],\n )\n\n const getTextareaProps: PropGetter<\"textarea\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n id,\n ref: mergeRefs(ref, inputRef),\n disabled,\n hidden: !isEditing,\n placeholder,\n readOnly,\n required,\n value,\n onBlur: handlerAll(props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange),\n onFocus: handlerAll(props.onFocus, onUpdatePrevValue),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDownWithoutSubmit),\n }),\n [\n disabled,\n id,\n isEditing,\n onBlur,\n onChange,\n onKeyDownWithoutSubmit,\n onUpdatePrevValue,\n placeholder,\n readOnly,\n required,\n formControlProps,\n value,\n ],\n )\n\n const getEditProps: PropGetter<\"button\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref: mergeRefs(ref, editRef),\n type: \"button\",\n disabled,\n readOnly,\n onClick: handlerAll(props.onClick, onEdit),\n }),\n [disabled, onEdit, readOnly, formControlProps],\n )\n\n const getSubmitProps: PropGetter<\"button\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref: mergeRefs(submitRef, ref),\n type: \"button\",\n disabled,\n readOnly,\n onClick: handlerAll(props.onClick, onSubmit),\n }),\n [disabled, onSubmit, readOnly, formControlProps],\n )\n\n const getCancelProps: PropGetter<\"button\"> = useCallback(\n (props = {}, ref = null) => ({\n ...formControlProps,\n ...props,\n ref: mergeRefs(cancelRef, ref),\n type: \"button\",\n disabled,\n readOnly,\n onClick: handlerAll(props.onClick, onCancel),\n }),\n [disabled, onCancel, readOnly, formControlProps],\n )\n\n return {\n isEditing,\n value,\n getCancelProps,\n getEditProps,\n getInputProps,\n getPreviewProps,\n getSubmitProps,\n getTextareaProps,\n onCancel,\n onEdit,\n onSubmit,\n }\n}\n\nexport type UseEditableReturn = ReturnType<typeof useEditable>\n\nexport const useEditableControl = () => {\n const { isEditing, getCancelProps, getEditProps, getSubmitProps } =\n useEditableContext()\n\n return { isEditing, getCancelProps, getEditProps, getSubmitProps }\n}\n\ninterface EditableContext {\n isEditing: boolean\n styles: { [key: string]: CSSUIObject | undefined }\n getCancelProps: PropGetter<\"button\">\n getEditProps: PropGetter<\"button\">\n getInputProps: PropGetter<\"input\">\n getPreviewProps: PropGetter<\"span\">\n getSubmitProps: PropGetter<\"button\">\n getTextareaProps: PropGetter<\"textarea\">\n}\n\nconst [EditableProvider, useEditableContext] = createContext<EditableContext>({\n name: \"EditableContext\",\n errorMessage:\n \"useEditableContext: context is undefined. Seems you forgot to wrap the editable components in `<Editable />`\",\n})\n\ninterface EditableElementProps\n extends Pick<\n UseEditableReturn,\n \"isEditing\" | \"onCancel\" | \"onEdit\" | \"onSubmit\"\n > {}\n\ntype EditableElement = (props: EditableElementProps) => ReactNode\n\ninterface EditableOptions {\n children?: EditableElement | ReactNode\n /**\n * The border color when the input is invalid.\n */\n errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n /**\n * The border color when the input is focused.\n */\n focusBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n}\n\nexport interface EditableProps\n extends Omit<\n HTMLUIProps,\n \"children\" | \"defaultValue\" | \"onChange\" | \"onSubmit\" | \"value\"\n >,\n ThemeProps<\"Editable\">,\n UseEditableProps,\n EditableOptions {}\n\n/**\n * `Editable` is a component used to obtain inline editable text input.\n *\n * @see Docs https://yamada-ui.com/components/forms/editable\n */\nexport const Editable = forwardRef<EditableProps, \"div\">(\n ({ errorBorderColor, focusBorderColor, ...props }, ref) => {\n const [styles, mergedProps] = useComponentMultiStyle(\"Editable\", {\n errorBorderColor,\n focusBorderColor,\n ...props,\n })\n const {\n className,\n children,\n defaultValue,\n isDisabled,\n isInvalid,\n isPreviewFocusable,\n isReadOnly,\n isRequired,\n placeholder,\n selectAllOnFocus,\n startWithEditView,\n submitOnBlur,\n value,\n onCancel: onCancelProp,\n onChange,\n onEdit: onEditProp,\n onSubmit: onSubmitProp,\n ...rest\n } = omitThemeProps(mergedProps)\n const {\n isEditing,\n getCancelProps,\n getEditProps,\n getInputProps,\n getPreviewProps,\n getSubmitProps,\n getTextareaProps,\n onCancel,\n onEdit,\n onSubmit,\n } = useEditable({\n defaultValue,\n isDisabled,\n isInvalid,\n isPreviewFocusable,\n isReadOnly,\n isRequired,\n placeholder,\n selectAllOnFocus,\n startWithEditView,\n submitOnBlur,\n value,\n onCancel: onCancelProp,\n onChange,\n onEdit: onEditProp,\n onSubmit: onSubmitProp,\n })\n\n const cloneChildren = runIfFunc(children, {\n isEditing,\n onCancel,\n onEdit,\n onSubmit,\n })\n\n const css: CSSUIObject = { ...styles.container }\n\n return (\n <EditableProvider\n value={{\n isEditing,\n styles,\n getCancelProps,\n getEditProps,\n getInputProps,\n getPreviewProps,\n getSubmitProps,\n getTextareaProps,\n }}\n >\n <ui.div\n ref={ref}\n className={cx(\"ui-editable\", className)}\n {...rest}\n __css={css}\n >\n {cloneChildren}\n </ui.div>\n </EditableProvider>\n )\n },\n)\n\nEditable.displayName = \"Editable\"\nEditable.__ui__ = \"Editable\"\n\nexport interface EditablePreviewProps extends HTMLUIProps<\"span\"> {}\n\nexport const EditablePreview = forwardRef<EditablePreviewProps, \"span\">(\n ({ className, ...rest }, ref) => {\n const { styles, getPreviewProps } = useEditableContext()\n\n const css: CSSUIObject = {\n bg: \"transparent\",\n cursor: \"text\",\n display: \"inline-block\",\n fontSize: \"inherit\",\n fontWeight: \"inherit\",\n textAlign: \"inherit\",\n ...styles.preview,\n }\n\n return (\n <ui.span\n className={cx(\"ui-editable__preview\", className)}\n {...getPreviewProps(rest, ref)}\n __css={css}\n />\n )\n },\n)\n\nEditablePreview.displayName = \"EditablePreview\"\nEditablePreview.__ui__ = \"EditablePreview\"\n\nexport interface EditableInputProps extends HTMLUIProps<\"input\"> {}\n\nexport const EditableInput = forwardRef<EditableInputProps, \"input\">(\n ({ className, ...rest }, ref) => {\n const { styles, getInputProps } = useEditableContext()\n\n const css: CSSUIObject = {\n bg: \"transparent\",\n fontSize: \"inherit\",\n fontWeight: \"inherit\",\n outline: 0,\n textAlign: \"inherit\",\n ...styles.input,\n }\n\n return (\n <ui.input\n className={cx(\"ui-editable__input\", className)}\n {...getInputProps(rest, ref)}\n __css={css}\n />\n )\n },\n)\n\nEditableInput.displayName = \"EditableInput\"\nEditableInput.__ui__ = \"EditableInput\"\n\nexport interface EditableTextareaProps extends HTMLUIProps<\"textarea\"> {}\n\nexport const EditableTextarea = forwardRef<EditableTextareaProps, \"textarea\">(\n ({ className, ...rest }, ref) => {\n const { styles, getTextareaProps } = useEditableContext()\n\n const css: CSSUIObject = {\n bg: \"transparent\",\n fontSize: \"inherit\",\n fontWeight: \"inherit\",\n outline: 0,\n textAlign: \"inherit\",\n ...styles.textarea,\n }\n\n return (\n <ui.textarea\n className={cx(\"ui-editable__textarea\", className)}\n {...getTextareaProps(rest, ref)}\n __css={css}\n />\n )\n },\n)\n\nEditableTextarea.displayName = \"EditableTextarea\"\nEditableTextarea.__ui__ = \"EditableTextarea\"\n"],"mappings":"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","names":["props"]}
@@ -4,22 +4,10 @@ import { FormControlOptions } from '@yamada-ui/form-control';
4
4
  import { ReactNode } from 'react';
5
5
 
6
6
  interface UseEditableProps extends FormControlOptions {
7
- /**
8
- * The placeholder text when the value is empty.
9
- */
10
- placeholder?: string;
11
- /**
12
- * The value of the Editable in both edit & preview mode.
13
- */
14
- value?: string;
15
7
  /**
16
8
  * The initial value of the Editable in both edit & preview mode.
17
9
  */
18
10
  defaultValue?: string;
19
- /**
20
- * If `true`, the Editable will start with edit mode by default.
21
- */
22
- startWithEditView?: boolean;
23
11
  /**
24
12
  * If `true`, the read only view, has a `tabIndex` set to `0`
25
13
  * so it can receive focus via the keyboard or click.
@@ -28,11 +16,9 @@ interface UseEditableProps extends FormControlOptions {
28
16
  */
29
17
  isPreviewFocusable?: boolean;
30
18
  /**
31
- * If `true`, it'll update the value onBlur and turn off the edit mode.
32
- *
33
- * @default true
19
+ * The placeholder text when the value is empty.
34
20
  */
35
- submitOnBlur?: boolean;
21
+ placeholder?: string;
36
22
  /**
37
23
  * If `true`, the input's text will be highlighted on focus.
38
24
  *
@@ -40,58 +26,72 @@ interface UseEditableProps extends FormControlOptions {
40
26
  */
41
27
  selectAllOnFocus?: boolean;
42
28
  /**
43
- * A callback invoked when user changes input.
29
+ * If `true`, the Editable will start with edit mode by default.
44
30
  */
45
- onChange?: (value: string) => void;
31
+ startWithEditView?: boolean;
32
+ /**
33
+ * If `true`, it'll update the value onBlur and turn off the edit mode.
34
+ *
35
+ * @default true
36
+ */
37
+ submitOnBlur?: boolean;
38
+ /**
39
+ * The value of the Editable in both edit & preview mode.
40
+ */
41
+ value?: string;
46
42
  /**
47
43
  * Callback invoked when user cancels input with the `Esc` key.
48
44
  * It provides the last confirmed value as argument.
49
45
  */
50
46
  onCancel?: (preValue: string) => void;
51
47
  /**
52
- * A callback invoked when user confirms value with `enter` key or by blurring input.
48
+ * A callback invoked when user changes input.
53
49
  */
54
- onSubmit?: (value: string) => void;
50
+ onChange?: (value: string) => void;
55
51
  /**
56
52
  * A callback invoked once the user enters edit mode.
57
53
  */
58
54
  onEdit?: () => void;
55
+ /**
56
+ * A callback invoked when user confirms value with `enter` key or by blurring input.
57
+ */
58
+ onSubmit?: (value: string) => void;
59
59
  }
60
60
  declare const useEditable: (props: UseEditableProps) => {
61
61
  isEditing: boolean;
62
62
  value: string;
63
- onEdit: () => void;
64
- onCancel: () => void;
65
- onSubmit: () => void;
66
- getPreviewProps: PropGetter<"span", undefined>;
67
- getInputProps: PropGetter<"input", undefined>;
68
- getTextareaProps: PropGetter<"textarea", undefined>;
63
+ getCancelProps: PropGetter<"button", undefined>;
69
64
  getEditProps: PropGetter<"button", undefined>;
65
+ getInputProps: PropGetter<"input", undefined>;
66
+ getPreviewProps: PropGetter<"span", undefined>;
70
67
  getSubmitProps: PropGetter<"button", undefined>;
71
- getCancelProps: PropGetter<"button", undefined>;
68
+ getTextareaProps: PropGetter<"textarea", undefined>;
69
+ onCancel: () => void;
70
+ onEdit: () => void;
71
+ onSubmit: () => void;
72
72
  };
73
73
  type UseEditableReturn = ReturnType<typeof useEditable>;
74
74
  declare const useEditableControl: () => {
75
75
  isEditing: boolean;
76
- getEditProps: PropGetter<"button", undefined>;
77
76
  getCancelProps: PropGetter<"button", undefined>;
77
+ getEditProps: PropGetter<"button", undefined>;
78
78
  getSubmitProps: PropGetter<"button", undefined>;
79
79
  };
80
- interface EditableElementProps extends Pick<UseEditableReturn, "isEditing" | "onSubmit" | "onCancel" | "onEdit"> {
80
+ interface EditableElementProps extends Pick<UseEditableReturn, "isEditing" | "onCancel" | "onEdit" | "onSubmit"> {
81
81
  }
82
82
  type EditableElement = (props: EditableElementProps) => ReactNode;
83
83
  interface EditableOptions {
84
- /**
85
- * The border color when the input is focused.
86
- */
87
- focusBorderColor?: ColorModeToken<CSS.Property.BorderColor, "colors">;
84
+ children?: EditableElement | ReactNode;
88
85
  /**
89
86
  * The border color when the input is invalid.
90
87
  */
91
88
  errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, "colors">;
92
- children?: ReactNode | EditableElement;
89
+ /**
90
+ * The border color when the input is focused.
91
+ */
92
+ focusBorderColor?: ColorModeToken<CSS.Property.BorderColor, "colors">;
93
93
  }
94
- interface EditableProps extends Omit<HTMLUIProps, "onChange" | "value" | "defaultValue" | "onSubmit" | "children">, ThemeProps<"Editable">, UseEditableProps, EditableOptions {
94
+ interface EditableProps extends Omit<HTMLUIProps, "children" | "defaultValue" | "onChange" | "onSubmit" | "value">, ThemeProps<"Editable">, UseEditableProps, EditableOptions {
95
95
  }
96
96
  /**
97
97
  * `Editable` is a component used to obtain inline editable text input.
@@ -4,22 +4,10 @@ import { FormControlOptions } from '@yamada-ui/form-control';
4
4
  import { ReactNode } from 'react';
5
5
 
6
6
  interface UseEditableProps extends FormControlOptions {
7
- /**
8
- * The placeholder text when the value is empty.
9
- */
10
- placeholder?: string;
11
- /**
12
- * The value of the Editable in both edit & preview mode.
13
- */
14
- value?: string;
15
7
  /**
16
8
  * The initial value of the Editable in both edit & preview mode.
17
9
  */
18
10
  defaultValue?: string;
19
- /**
20
- * If `true`, the Editable will start with edit mode by default.
21
- */
22
- startWithEditView?: boolean;
23
11
  /**
24
12
  * If `true`, the read only view, has a `tabIndex` set to `0`
25
13
  * so it can receive focus via the keyboard or click.
@@ -28,11 +16,9 @@ interface UseEditableProps extends FormControlOptions {
28
16
  */
29
17
  isPreviewFocusable?: boolean;
30
18
  /**
31
- * If `true`, it'll update the value onBlur and turn off the edit mode.
32
- *
33
- * @default true
19
+ * The placeholder text when the value is empty.
34
20
  */
35
- submitOnBlur?: boolean;
21
+ placeholder?: string;
36
22
  /**
37
23
  * If `true`, the input's text will be highlighted on focus.
38
24
  *
@@ -40,58 +26,72 @@ interface UseEditableProps extends FormControlOptions {
40
26
  */
41
27
  selectAllOnFocus?: boolean;
42
28
  /**
43
- * A callback invoked when user changes input.
29
+ * If `true`, the Editable will start with edit mode by default.
44
30
  */
45
- onChange?: (value: string) => void;
31
+ startWithEditView?: boolean;
32
+ /**
33
+ * If `true`, it'll update the value onBlur and turn off the edit mode.
34
+ *
35
+ * @default true
36
+ */
37
+ submitOnBlur?: boolean;
38
+ /**
39
+ * The value of the Editable in both edit & preview mode.
40
+ */
41
+ value?: string;
46
42
  /**
47
43
  * Callback invoked when user cancels input with the `Esc` key.
48
44
  * It provides the last confirmed value as argument.
49
45
  */
50
46
  onCancel?: (preValue: string) => void;
51
47
  /**
52
- * A callback invoked when user confirms value with `enter` key or by blurring input.
48
+ * A callback invoked when user changes input.
53
49
  */
54
- onSubmit?: (value: string) => void;
50
+ onChange?: (value: string) => void;
55
51
  /**
56
52
  * A callback invoked once the user enters edit mode.
57
53
  */
58
54
  onEdit?: () => void;
55
+ /**
56
+ * A callback invoked when user confirms value with `enter` key or by blurring input.
57
+ */
58
+ onSubmit?: (value: string) => void;
59
59
  }
60
60
  declare const useEditable: (props: UseEditableProps) => {
61
61
  isEditing: boolean;
62
62
  value: string;
63
- onEdit: () => void;
64
- onCancel: () => void;
65
- onSubmit: () => void;
66
- getPreviewProps: PropGetter<"span", undefined>;
67
- getInputProps: PropGetter<"input", undefined>;
68
- getTextareaProps: PropGetter<"textarea", undefined>;
63
+ getCancelProps: PropGetter<"button", undefined>;
69
64
  getEditProps: PropGetter<"button", undefined>;
65
+ getInputProps: PropGetter<"input", undefined>;
66
+ getPreviewProps: PropGetter<"span", undefined>;
70
67
  getSubmitProps: PropGetter<"button", undefined>;
71
- getCancelProps: PropGetter<"button", undefined>;
68
+ getTextareaProps: PropGetter<"textarea", undefined>;
69
+ onCancel: () => void;
70
+ onEdit: () => void;
71
+ onSubmit: () => void;
72
72
  };
73
73
  type UseEditableReturn = ReturnType<typeof useEditable>;
74
74
  declare const useEditableControl: () => {
75
75
  isEditing: boolean;
76
- getEditProps: PropGetter<"button", undefined>;
77
76
  getCancelProps: PropGetter<"button", undefined>;
77
+ getEditProps: PropGetter<"button", undefined>;
78
78
  getSubmitProps: PropGetter<"button", undefined>;
79
79
  };
80
- interface EditableElementProps extends Pick<UseEditableReturn, "isEditing" | "onSubmit" | "onCancel" | "onEdit"> {
80
+ interface EditableElementProps extends Pick<UseEditableReturn, "isEditing" | "onCancel" | "onEdit" | "onSubmit"> {
81
81
  }
82
82
  type EditableElement = (props: EditableElementProps) => ReactNode;
83
83
  interface EditableOptions {
84
- /**
85
- * The border color when the input is focused.
86
- */
87
- focusBorderColor?: ColorModeToken<CSS.Property.BorderColor, "colors">;
84
+ children?: EditableElement | ReactNode;
88
85
  /**
89
86
  * The border color when the input is invalid.
90
87
  */
91
88
  errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, "colors">;
92
- children?: ReactNode | EditableElement;
89
+ /**
90
+ * The border color when the input is focused.
91
+ */
92
+ focusBorderColor?: ColorModeToken<CSS.Property.BorderColor, "colors">;
93
93
  }
94
- interface EditableProps extends Omit<HTMLUIProps, "onChange" | "value" | "defaultValue" | "onSubmit" | "children">, ThemeProps<"Editable">, UseEditableProps, EditableOptions {
94
+ interface EditableProps extends Omit<HTMLUIProps, "children" | "defaultValue" | "onChange" | "onSubmit" | "value">, ThemeProps<"Editable">, UseEditableProps, EditableOptions {
95
95
  }
96
96
  /**
97
97
  * `Editable` is a component used to obtain inline editable text input.