@ehfuse/mui-form-controls 3.1.62 → 3.2.0
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.
- package/LICENSE +21 -21
- package/README.md +32 -0
- package/dist/TextArea.d.ts +2 -1
- package/dist/TextField.d.ts +5 -0
- package/dist/address.js +37 -1
- package/dist/address.js.map +4 -4
- package/dist/address.mjs +37 -1
- package/dist/address.mjs.map +4 -4
- package/dist/components/ReadonlyDisplay.d.ts +22 -8
- package/dist/components/ReadonlyField.d.ts +77 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +49 -13
- package/dist/index.js.map +4 -4
- package/dist/index.mjs +49 -13
- package/dist/index.mjs.map +4 -4
- package/dist/types.d.ts +15 -4
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/readonly.d.ts +34 -0
- package/package.json +1 -1
- package/dist/SwitchField.d.ts +0 -10
- package/dist/ToggleButtonGroupField.d.ts +0 -10
- package/dist/devDebug.d.ts +0 -35
- package/dist/utils/outlinedFieldStyles.d.ts +0 -5
package/dist/types.d.ts
CHANGED
|
@@ -40,14 +40,25 @@ export type FormLike = {
|
|
|
40
40
|
setFormValue?: (name: string, value: unknown) => void;
|
|
41
41
|
};
|
|
42
42
|
export type BaseTextFieldProps = {
|
|
43
|
+
/**
|
|
44
|
+
* 읽기 전용 모드 (기본값: false).
|
|
45
|
+
* 값 변경/포커스 등 상호작용만 막고 **외관은 편집 가능한 상태 그대로** 둔다(글자·라벨이 흐려지지 않는다).
|
|
46
|
+
* 값을 "보여주는 것"이 목적일 때 쓴다.
|
|
47
|
+
* 반대로 `disabled` 는 readonly 와 동일하게 상호작용을 막으면서 **글자까지 흐리게** 표시한다
|
|
48
|
+
* ("지금은 쓸 수 없는 칸"을 알릴 때). 두 prop 을 동시에 주면 disabled 가 이긴다.
|
|
49
|
+
*/
|
|
43
50
|
readonly?: boolean;
|
|
44
51
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* 외관은 outlined 입력칸과 동일하되 입력 요소/포커스/IME 처리가 없어 가볍다.
|
|
48
|
-
* readonly 가 false 면 무시된다.
|
|
52
|
+
* @deprecated v3.2.0 부터 readonly/disabled 는 **항상** 경량 박스(ReadonlyDisplay)로 렌더되므로 이 prop 은 무시된다.
|
|
53
|
+
* 예전처럼 진짜 <input> 이 필요하면 `readonlyInput` 을 쓴다.
|
|
49
54
|
*/
|
|
50
55
|
readonlyLight?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* readonly/disabled 여도 경량 박스 대신 **진짜 입력 컴포넌트**로 렌더할지 여부 (기본값: false).
|
|
58
|
+
* 박스 렌더는 입력 요소가 없어 포커스/텍스트 커서/커스텀 slotProps 가 동작하지 않으므로,
|
|
59
|
+
* 그런 게 꼭 필요한 칸(외부에서 inputRef 로 focus/select 하거나, MuiInputBase 셀렉터로 스타일링하는 칸)의 탈출구다.
|
|
60
|
+
*/
|
|
61
|
+
readonlyInput?: boolean;
|
|
51
62
|
debounce?: number;
|
|
52
63
|
form?: FormLike | null;
|
|
53
64
|
disableInternalState?: boolean;
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -17,3 +17,4 @@ export { validateBusinessNumber, validateCorpNumber } from "./biznum";
|
|
|
17
17
|
export { validateCardNumber, detectCardBrand } from "./card";
|
|
18
18
|
export type { CardBrand } from "./card";
|
|
19
19
|
export { REGION_MAP, extractJuminInfo, validateJuminChecksum, validateJuminBirthDate, isJuminValueValid, isJuminValueInvalidState, sanitizeJuminFrontBirthDigits, canAppendJuminBirthDigit, maxDayForJuminFrontYyMm, } from "./jumin";
|
|
20
|
+
export { isInteractionLocked, interactionLockSx, withInteractionLockSx, interactionLockInputProps, } from "./readonly";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* utils/readonly.ts
|
|
3
|
+
*
|
|
4
|
+
* readonly 와 disabled 의 동작을 분리하기 위한 공통 헬퍼.
|
|
5
|
+
*
|
|
6
|
+
* - `readonly`: 상호작용(클릭/키보드/값 변경)만 차단하고 **외관은 그대로** 둔다. 글자가 흐려지지 않는다.
|
|
7
|
+
* - `disabled`: MUI 기본 동작(상호작용 차단 + 글자 흐림)을 그대로 쓴다. readonly 를 포함하는 상위 상태다.
|
|
8
|
+
*
|
|
9
|
+
* MUI 의 Checkbox/Switch/Radio/Slider/ToggleButton 처럼 `readOnly` 개념이 없는 컨트롤은
|
|
10
|
+
* 예전엔 readonly 를 `disabled` 로 매핑해 흐려졌다. 이제는 아래 헬퍼로
|
|
11
|
+
* "포인터/키보드 차단 + onChange 무시" 만 적용하고 색은 건드리지 않는다.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
15
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
16
|
+
*/
|
|
17
|
+
import type React from "react";
|
|
18
|
+
import type { SxProps, Theme } from "@mui/material/styles";
|
|
19
|
+
/** readonly 이면서 disabled 는 아닌, "흐리지 않게 차단만" 해야 하는 상태인지. */
|
|
20
|
+
export declare function isInteractionLocked(readonly?: boolean, disabled?: boolean): boolean;
|
|
21
|
+
/** 상호작용 차단용 sx (외관에는 영향 없음). */
|
|
22
|
+
export declare const interactionLockSx: {
|
|
23
|
+
readonly pointerEvents: "none";
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* 호출부 sx 앞에 상호작용 차단 sx 를 끼워 배열 형태로 합친다.
|
|
27
|
+
* (MUI sx 배열은 뒤 항목이 이기므로 호출부 지정이 항상 우선한다.)
|
|
28
|
+
*/
|
|
29
|
+
export declare function withInteractionLockSx(locked: boolean, sx?: SxProps<Theme>): SxProps<Theme>;
|
|
30
|
+
/**
|
|
31
|
+
* 상호작용 차단 시 포커스 링/탭 이동까지 막기 위한 input 속성.
|
|
32
|
+
* pointerEvents 만으로는 Tab + Space 키 조작이 남는다.
|
|
33
|
+
*/
|
|
34
|
+
export declare function interactionLockInputProps<T extends React.InputHTMLAttributes<HTMLInputElement>>(locked: boolean, inputProps?: T): T | undefined;
|
package/package.json
CHANGED
package/dist/SwitchField.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SwitchField.tsx
|
|
3
|
-
*
|
|
4
|
-
* @license MIT
|
|
5
|
-
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
-
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
-
*/
|
|
8
|
-
import React from "react";
|
|
9
|
-
import type { SwitchFieldProps } from "./types";
|
|
10
|
-
export declare const SwitchField: React.ForwardRefExoticComponent<Omit<SwitchFieldProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ToggleButtonGroupField.tsx
|
|
3
|
-
*
|
|
4
|
-
* @license MIT
|
|
5
|
-
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
-
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
-
*/
|
|
8
|
-
import React from "react";
|
|
9
|
-
import type { ToggleButtonGroupFieldProps } from "./types";
|
|
10
|
-
export declare const ToggleButtonGroupField: React.ForwardRefExoticComponent<Omit<ToggleButtonGroupFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
package/dist/devDebug.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 패키지 전역 개발용 콘솔 로그 스위치.
|
|
3
|
-
* 앱 진입 시 `setMuiFormControlsDebug(true)` 한 번이면
|
|
4
|
-
* DateTextField / TimeTextField / DateTimeTextField 등에서 value 동기화 로그가 출력된다.
|
|
5
|
-
* 필드가 많으면 `nameIncludes` / `nameMatch`, 컴포넌트만 골라서는 `scopes`로 범위를 줄일 수 있다.
|
|
6
|
-
*
|
|
7
|
-
* @license MIT
|
|
8
|
-
*/
|
|
9
|
-
/** value 동기화 로그를 낼 수 있는 컴포넌트 scope (muiFormControlsDevLog 첫 인자와 동일) */
|
|
10
|
-
export type MuiFormControlsDebugScope = "DateTextField" | "TimeTextField" | "DateTimeTextField";
|
|
11
|
-
export type MuiFormControlsDebugOptions = {
|
|
12
|
-
/** `name` prop에 이 부분 문자열이 있을 때만 로그 (여러 필드일 때 노이즈 감소) */
|
|
13
|
-
nameIncludes?: string;
|
|
14
|
-
/** `name` prop이 이 정규식과 맞을 때만 로그 */
|
|
15
|
-
nameMatch?: RegExp;
|
|
16
|
-
/**
|
|
17
|
-
* 한 개 이상이면 **이 컴포넌트(scope)에서만** 로그.
|
|
18
|
-
* 생략 또는 빈 배열이면 scope 제한 없음(이름 필터만 적용).
|
|
19
|
-
*/
|
|
20
|
-
scopes?: MuiFormControlsDebugScope[];
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* @param enabled 로그 출력 여부
|
|
24
|
-
* @param options `scopes` / `nameIncludes` / `nameMatch`로 범위 축소 (조건은 AND)
|
|
25
|
-
*/
|
|
26
|
-
export declare function setMuiFormControlsDebug(enabled: boolean, options?: MuiFormControlsDebugOptions): void;
|
|
27
|
-
export declare function getMuiFormControlsDebug(): boolean;
|
|
28
|
-
export declare function getMuiFormControlsDebugOptions(): Readonly<MuiFormControlsDebugOptions & {
|
|
29
|
-
enabled: boolean;
|
|
30
|
-
}>;
|
|
31
|
-
/**
|
|
32
|
-
* 컴포넌트 내부 전용.
|
|
33
|
-
* @param scope 예: "DateTextField"
|
|
34
|
-
*/
|
|
35
|
-
export declare function muiFormControlsDevLog(scope: string, payload: Record<string, unknown>): void;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { SxProps, Theme } from "@mui/material/styles";
|
|
2
|
-
export declare const CLOSED_OUTLINED_BORDER_COLOR = "rgba(0, 0, 0, 0.23)";
|
|
3
|
-
export declare const CLOSED_OUTLINED_LABEL_COLOR = "rgba(0, 0, 0, 0.6)";
|
|
4
|
-
export declare const outlinedFieldFocusToneSx: SxProps<Theme>;
|
|
5
|
-
export declare const outlinedFieldReadonlyToneSx: SxProps<Theme>;
|