@simplysm/sd-claude 14.0.98 → 14.0.100
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/claude/references/sd-simplysm14/README.md +16 -16
- package/claude/references/sd-simplysm14/apis/angular/README.md +81 -153
- package/claude/references/sd-simplysm14/apis/angular/controls.md +179 -205
- package/claude/references/sd-simplysm14/apis/angular/crud.md +71 -57
- package/claude/references/sd-simplysm14/apis/angular/directives.md +49 -109
- package/claude/references/sd-simplysm14/apis/angular/features.md +58 -86
- package/claude/references/sd-simplysm14/apis/angular/kanban.md +32 -40
- package/claude/references/sd-simplysm14/apis/angular/layout.md +38 -52
- package/claude/references/sd-simplysm14/apis/angular/overlay.md +86 -110
- package/claude/references/sd-simplysm14/apis/angular/routing-appstructure.md +54 -86
- package/claude/references/sd-simplysm14/apis/angular/shared-data.md +82 -74
- package/claude/references/sd-simplysm14/apis/angular/sheet.md +56 -80
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-auto-update/README.md +15 -15
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-file-system/README.md +21 -21
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-intent/README.md +79 -53
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-usb-storage/README.md +9 -11
- package/claude/references/sd-simplysm14/apis/core-browser/README.md +15 -15
- package/claude/references/sd-simplysm14/apis/core-browser/dom-element.md +20 -20
- package/claude/references/sd-simplysm14/apis/core-browser/indexed-db.md +18 -18
- package/claude/references/sd-simplysm14/apis/core-common/README.md +20 -49
- package/claude/references/sd-simplysm14/apis/core-common/async-runtime.md +66 -55
- package/claude/references/sd-simplysm14/apis/core-common/collection-ext.md +83 -56
- package/claude/references/sd-simplysm14/apis/core-common/errors.md +32 -21
- package/claude/references/sd-simplysm14/apis/core-common/obj.md +57 -39
- package/claude/references/sd-simplysm14/apis/core-common/serialization.md +36 -30
- package/claude/references/sd-simplysm14/apis/core-common/value-types.md +69 -41
- package/claude/references/sd-simplysm14/apis/core-node/README.md +4 -4
- package/claude/references/sd-simplysm14/apis/core-node/consola.md +15 -13
- package/claude/references/sd-simplysm14/apis/core-node/cpx.md +11 -7
- package/claude/references/sd-simplysm14/apis/core-node/fs-watcher.md +8 -8
- package/claude/references/sd-simplysm14/apis/core-node/fsx.md +29 -20
- package/claude/references/sd-simplysm14/apis/core-node/pathx.md +14 -6
- package/claude/references/sd-simplysm14/apis/core-node/worker.md +3 -3
- package/claude/references/sd-simplysm14/apis/excel/README.md +3 -3
- package/claude/references/sd-simplysm14/apis/excel/cell.md +32 -32
- package/claude/references/sd-simplysm14/apis/excel/conditional-format.md +23 -24
- package/claude/references/sd-simplysm14/apis/excel/style.md +24 -30
- package/claude/references/sd-simplysm14/apis/excel/utils.md +20 -23
- package/claude/references/sd-simplysm14/apis/excel/workbook-worksheet.md +60 -71
- package/claude/references/sd-simplysm14/apis/excel/wrapper.md +36 -36
- package/claude/references/sd-simplysm14/apis/lint/README.md +7 -9
- package/claude/references/sd-simplysm14/apis/lint/recommended.md +59 -37
- package/claude/references/sd-simplysm14/apis/lint/rules.md +81 -74
- package/claude/references/sd-simplysm14/apis/orm-common/README.md +6 -6
- package/claude/references/sd-simplysm14/apis/orm-common/db-context.md +112 -78
- package/claude/references/sd-simplysm14/apis/orm-common/expr.md +131 -75
- package/claude/references/sd-simplysm14/apis/orm-common/queryable.md +126 -82
- package/claude/references/sd-simplysm14/apis/orm-common/schema.md +170 -113
- package/claude/references/sd-simplysm14/apis/orm-common/types.md +102 -48
- package/claude/references/sd-simplysm14/apis/orm-node/README.md +12 -13
- package/claude/references/sd-simplysm14/apis/orm-node/db-conn.md +3 -3
- package/claude/references/sd-simplysm14/apis/sd-cli/README.md +5 -5
- package/claude/references/sd-simplysm14/apis/sd-cli/SdTsCompiler.md +67 -65
- package/claude/references/sd-simplysm14/apis/sd-cli/sd-config-types.md +130 -123
- package/claude/references/sd-simplysm14/apis/service-client/README.md +63 -63
- package/claude/references/sd-simplysm14/apis/service-client/orm.md +22 -22
- package/claude/references/sd-simplysm14/apis/service-client/transport.md +30 -26
- package/claude/references/sd-simplysm14/apis/service-common/README.md +8 -8
- package/claude/references/sd-simplysm14/apis/service-common/app-structure.md +13 -6
- package/claude/references/sd-simplysm14/apis/service-common/protocol.md +1 -1
- package/claude/references/sd-simplysm14/apis/service-server/README.md +43 -47
- package/claude/references/sd-simplysm14/apis/service-server/built-in-services.md +35 -0
- package/claude/references/sd-simplysm14/apis/service-server/service-authoring.md +20 -19
- package/claude/references/sd-simplysm14/apis/service-server/transport-internals.md +23 -25
- package/claude/references/sd-simplysm14/apis/service-server/v1-legacy.md +9 -9
- package/claude/references/sd-simplysm14/apis/storage/README.md +26 -26
- package/claude/references/sd-simplysm14/manuals/client-component.md +9 -1
- package/claude/references/sd-simplysm14/manuals/client-crud.md +1 -1
- package/claude/references/sd-simplysm14/manuals/client-orm.md +1 -0
- package/claude/references/sd-simplysm14/manuals/client-service.md +1 -0
- package/claude/references/sd-simplysm14/manuals/client-shared-data.md +1 -0
- package/claude/references/sd-simplysm14/manuals/client-ssg.md +1 -0
- package/claude/sd-system-prompt.md +11 -26
- package/claude/skills/sd-docs/references/subagent-prompt.md +4 -3
- package/claude/skills/sd-spec/SKILL.md +87 -18
- package/claude/skills/sd-spec/references/format.md +2 -2
- package/package.json +1 -1
|
@@ -1,258 +1,239 @@
|
|
|
1
1
|
# @simplysm/angular — 폼·입력 컨트롤
|
|
2
2
|
|
|
3
|
-
버튼·앵커, 텍스트/숫자/날짜 입력,
|
|
3
|
+
버튼·앵커, 텍스트/숫자/날짜 입력, 체크박스/스위치/그룹, 셀렉트/드롭다운, 폼/접기/탭/리스트/갭/페이지네이션 등 폼·UI 기본 컨트롤 군. 화면 폼·필터·시트 셀에서 함께 쓰임. 화면 폼·버튼 스타일 규약은 [client-component.md](../manuals/client-component.md) 의 '폼·입력 컨트롤' / '버튼 스타일' 참조.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
공통 약속: 대부분 컨트롤이 `size: "sm"|"lg"`(미지정=기본 중간), `inline`(인라인 배치·폭 auto), `inset`(테두리·라운드 제거, 셀/다른 컨트롤 내장용), `disabled`, `theme` 을 가짐. 모든 boolean input 은 `booleanAttribute` 변환이라 `<sd-x inline>` 처럼 빈 속성=`true`. **표준 테마 셋** = `primary | secondary | info | success | warning | danger | gray | blue-gray`. 검증 컨트롤은 `required`/`validatorFn` 으로 `sd-form` 의 native validity 에 연동.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 버튼
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
type = input<"button" | "submit">("button");
|
|
11
|
-
theme = input<"primary"|"secondary"|"info"|"success"|"warning"|"danger"|"gray"|"blue-gray"
|
|
12
|
-
| "link"|"link-primary"|...|"link-blue-gray"|"link-rev">();
|
|
13
|
-
inline; inset; disabled; size = input<"xs"|"sm"|"lg">();
|
|
14
|
-
buttonStyle = input<string>(); buttonClass = input<string>();
|
|
15
|
-
```
|
|
9
|
+
### `SdButton` — `<sd-button>`
|
|
16
10
|
|
|
17
|
-
- `type` — `"submit"`
|
|
18
|
-
- `theme` —
|
|
19
|
-
- `
|
|
20
|
-
- `
|
|
11
|
+
- `type: "button"|"submit"` (기본 `"button"`) — native 버튼 타입. `"submit"` 은 감싼 `<form>` 제출 트리거, `"button"` 은 안 함.
|
|
12
|
+
- `theme` — 표준 테마 셋(채워진 버튼) + `link`(투명·primary 텍스트) + `link-primary`…`link-blue-gray`(투명·해당 테마 색 텍스트) + `link-rev`(투명·다크 배경용 밝은 텍스트). 미지정 시 기본 컨트롤색 버튼. 화면 액션 역할별 사용은 매뉴얼 '버튼 스타일' 표.
|
|
13
|
+
- `inline: boolean` — true 면 `inline-block`·width auto (내용 크기로 축소). 시트 위/폼 인라인 버튼에.
|
|
14
|
+
- `inset: boolean` — true 면 테두리·라운드 제거, primary 텍스트색(다른 컨트롤에 flush 내장).
|
|
15
|
+
- `size: "xs"|"sm"|"lg"` — 패딩 스케일. `xs` 최소·`sm` 작음·미지정 중간·`lg` 큼. 시트 위 버튼은 `sm`.
|
|
16
|
+
- `disabled: boolean` — true 면 native 버튼 비활성 + ripple 억제.
|
|
17
|
+
- `buttonStyle: string` / `buttonClass: string` — 내부 `<button>` 에 적용할 인라인 스타일/클래스.
|
|
21
18
|
|
|
22
19
|
```html
|
|
23
|
-
<sd-button [
|
|
20
|
+
<sd-button [theme]="'primary'" (click)="onSubmit()">저장</sd-button>
|
|
21
|
+
<sd-button [size]="'sm'" [theme]="'link-success'" (click)="onDownload()">엑셀 다운로드</sd-button>
|
|
24
22
|
```
|
|
25
23
|
|
|
26
|
-
### SdAnchor — `<sd-anchor>`
|
|
27
|
-
|
|
28
|
-
```ts
|
|
29
|
-
disabled = input(false);
|
|
30
|
-
theme = input<"primary"|"secondary"|"info"|"success"|"warning"|"danger"|"gray"|"blue-gray">("primary");
|
|
31
|
-
```
|
|
24
|
+
### `SdAnchor` — `<sd-anchor>`
|
|
32
25
|
|
|
33
|
-
-
|
|
26
|
+
- `theme` — 표준 테마 셋(기본 `"primary"`). 텍스트 색; hover 시 밑줄·진해짐.
|
|
27
|
+
- `disabled: boolean` — true 면 opacity 0.3·`pointer-events:none`·tabindex 제거.
|
|
34
28
|
|
|
35
|
-
|
|
29
|
+
시트 셀 안 진입점 앵커 등에 사용([client-crud.md](../manuals/client-crud.md) 의 '#' 컬럼 편집 진입 패턴).
|
|
36
30
|
|
|
37
|
-
|
|
38
|
-
size = input<"sm" | "lg">();
|
|
39
|
-
inset = input(false);
|
|
40
|
-
```
|
|
31
|
+
### `SdAdditionalButton` — `<sd-additional-button>`
|
|
41
32
|
|
|
42
|
-
|
|
33
|
+
좌측에 자유 콘텐츠(`._content` flex-fill), 우측에 투영된 `sd-anchor`/`sd-button` 을 배치하는 테두리 컨테이너.
|
|
43
34
|
|
|
44
|
-
|
|
35
|
+
- `size: "sm"|"lg"` — 콘텐츠/버튼 패딩 스케일.
|
|
36
|
+
- `inset: boolean` — true 면 테두리·라운드 제거.
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
modal = input.required<SdSelectModalInfo<SdSelectModal<K>>>();
|
|
48
|
-
value = model<SelectModeValue<K>[M]>();
|
|
49
|
-
disabled; required; inset; size = input<"sm"|"lg">();
|
|
50
|
-
selectMode = input<M>("single"); // "single" | "multi"
|
|
51
|
-
modalOptions = input<SdModalOptions>();
|
|
52
|
-
searchIcon = input(tablerSearch);
|
|
53
|
-
// SdSelectModal<TKey> = SdModalContentDef<SelectModalOutputResult<TKey>> + selectMode/selectedKeys inputs
|
|
54
|
-
// SdSelectModalInfo<T> = SdModalInfo<T, "selectMode" | "selectedKeys">
|
|
55
|
-
```
|
|
38
|
+
### `SdModalSelectButton<K, M>` — `<sd-modal-select-button>`
|
|
56
39
|
|
|
57
|
-
|
|
58
|
-
- `selectMode` — `"single"`=`value` 가 단일 키, `"multi"`=키 배열. 지우기(eraser) 버튼은 `required=false` 이고 값이 있을 때만 노출.
|
|
59
|
-
- `required` 면 빈 선택 시 native invalid(`setupInvalid`). `modal` 은 `SdSelectModal` 계약(selectMode input + selectedKeys model)을 구현한 모달.
|
|
60
|
-
|
|
61
|
-
## 텍스트·숫자·날짜 입력
|
|
62
|
-
|
|
63
|
-
### SdTextfield — `<sd-textfield>`
|
|
64
|
-
|
|
65
|
-
```ts
|
|
66
|
-
value = model<SdTextfieldTypes[K]>();
|
|
67
|
-
type = input.required<K>(); // K extends keyof SdTextfieldTypes
|
|
68
|
-
placeholder; title; inputStyle; inputClass;
|
|
69
|
-
disabled; readonly; required;
|
|
70
|
-
min/max = input<SdTextfieldTypes[K]>(); minlength; maxlength; pattern = input<string>();
|
|
71
|
-
validatorFn = input<(value) => string | undefined>(); format = input<string>();
|
|
72
|
-
step; autocomplete; useNumberComma = input(true); minDigits = input<number>();
|
|
73
|
-
inline; inset; size = input<"sm"|"lg">(); theme;
|
|
74
|
-
// SdTextfieldTypes: number, text, password, color, email, format,
|
|
75
|
-
// date/month/year(DateOnly), datetime/datetime-sec(DateTime), time/time-sec(Time)
|
|
76
|
-
```
|
|
40
|
+
값을 모달로 선택하는 버튼(검색 버튼 클릭 → 모달 → 선택 키 반영). `M extends "single"|"multi"`.
|
|
77
41
|
|
|
78
|
-
- `
|
|
79
|
-
- `
|
|
80
|
-
- `
|
|
81
|
-
- `
|
|
42
|
+
- `modal: SdSelectModalInfo<SdSelectModal<K>>` (required) — 검색 시 열 모달 정의. `SdSelectModal<K>` = `SdModalContentDef<SelectModalOutputResult<K>>` + `selectMode`/`selectedKeys` input 을 가진 컴포넌트(버튼이 그 둘을 주입하므로 `inputs` 에서 제외됨).
|
|
43
|
+
- `value: model<SelectModeValue<K>[M]>` — single 이면 `K`, multi 면 `K[]`.
|
|
44
|
+
- `selectMode: M` (기본 `"single"`) — `"single"` = 단일 키, eraser 가 `undefined` 로 초기화; `"multi"` = `K[]`, eraser 가 `[]` 로 초기화.
|
|
45
|
+
- `required: boolean` — true 면 빈 값일 때 "선택된 항목이 없습니다." 검증 + eraser 숨김.
|
|
46
|
+
- `disabled: boolean` — true 면 검색·eraser 버튼 숨김.
|
|
47
|
+
- `inset: boolean` / `size: "sm"|"lg"` — 스타일.
|
|
48
|
+
- `modalOptions: SdModalOptions` — 모달 provider 로 전달할 옵션.
|
|
49
|
+
- `searchIcon` (기본 `tablerSearch`) — 검색 버튼 아이콘.
|
|
50
|
+
- 메서드: `onSearchClick(event)` — 모달을 `selectMode`·현재 `selectedKeys` 로 열고, 확정 시 value 갱신. `onEraseClick()` — 값 클리어.
|
|
82
51
|
|
|
83
52
|
```html
|
|
84
|
-
<sd-
|
|
85
|
-
<sd-textfield [type]="'date'" [(value)]="orderDate" />
|
|
53
|
+
<sd-modal-select-button [(value)]="data().customerId" [modal]="{ type: CustomerList, title: '고객사', inputs: {} }" />
|
|
86
54
|
```
|
|
87
55
|
|
|
88
|
-
|
|
56
|
+
## 입력
|
|
57
|
+
|
|
58
|
+
### `SdTextfield<K>` — `<sd-textfield>`
|
|
59
|
+
|
|
60
|
+
값 타입은 `type` input 으로 결정(`SdTextfieldTypes[K]`).
|
|
61
|
+
|
|
62
|
+
- `type: K` (required) — `SdTextfieldTypes` 키 중 하나(아래). parse/format/validate 핸들러와 native 컨트롤 타입을 결정.
|
|
63
|
+
- `value: model<SdTextfieldTypes[K]>` — 타입드 값(`number`/`string`/`DateOnly`/`DateTime`/`Time`).
|
|
64
|
+
- `placeholder` / `title` — placeholder 텍스트; `title` 미지정 시 placeholder 사용.
|
|
65
|
+
- `disabled: boolean` — true 면 `<input>` 미렌더, 읽기전용 display 박스(회색).
|
|
66
|
+
- `readonly: boolean` — true 면 display 텍스트만 표시.
|
|
67
|
+
- `required: boolean` — true 면 빈 값일 때 "값을 입력하세요.".
|
|
68
|
+
- `min`/`max: SdTextfieldTypes[K]` — 타입드 경계. 위반 시 "…보다 크거나/작거나 같아야 합니다.".
|
|
69
|
+
- `minlength`/`maxlength: number` — 문자열 길이 경계(text/email/password).
|
|
70
|
+
- `pattern: string` — 정규식(문자열 타입); 불일치 시 "입력 값이 형식에 맞지 않습니다.".
|
|
71
|
+
- `validatorFn: (value) => string | undefined` — 커스텀 검증; 반환 문자열이 에러에 추가.
|
|
72
|
+
- `format: string` — `type="format"` 용 `X` 마스크(예 `XXX-XXXX|XXX-XXX-XXXX`, `|` 로 대안). 비-`X` 리터럴을 파싱 시 제거·표시 시 재삽입.
|
|
73
|
+
- `step: number` — native step 재정의.
|
|
74
|
+
- `autocomplete: string` — native autocomplete.
|
|
75
|
+
- `useNumberComma: boolean` (기본 `true`) — number 일 때 천단위 콤마 표시. `false` 면 plain `toString`.
|
|
76
|
+
- `minDigits: number` — number 표시 시 최소 소수 자릿수.
|
|
77
|
+
- `inline`/`inset`/`size: "sm"|"lg"`/`theme`(표준 테마 셋, 배경 틴트) — 스타일.
|
|
78
|
+
|
|
79
|
+
`SdTextfieldTypes` 키별 값 타입(`type` 으로 지정):
|
|
80
|
+
|
|
81
|
+
- `number → number` — 숫자 입력(`useNumberComma`·`min`/`max`).
|
|
82
|
+
- `text → string` / `email → string` / `password → string` — 문자열(길이·패턴 적용).
|
|
83
|
+
- `color → string` — native `type=color`(길이·패턴 미적용).
|
|
84
|
+
- `format → string` — `format` 마스크.
|
|
85
|
+
- `date → DateOnly`(`yyyy-MM-dd`) / `month → DateOnly`(`yyyy-MM`) / `year → DateOnly`(text, `yyyy`).
|
|
86
|
+
- `datetime → DateTime`(`datetime-local`) / `datetime-sec → DateTime`(초 포함, default step 1).
|
|
87
|
+
- `time → Time`(`HH:mm`) / `time-sec → Time`(초 포함, default step 1).
|
|
88
|
+
|
|
89
|
+
`sdTextfieldTypes: (keyof SdTextfieldTypes)[]` — 위 키 전체의 순서 배열(셀렉트 옵션 등에 사용).
|
|
89
90
|
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
disabled; readonly; required; inline; inset; size = input<"sm"|"lg">();
|
|
94
|
-
validatorFn = input<(value: string | undefined) => string | undefined>();
|
|
95
|
-
theme; inputStyle; inputClass;
|
|
91
|
+
```html
|
|
92
|
+
<sd-textfield [type]="'text'" [(value)]="filter().searchText" (valueChange)="mark(filter)" />
|
|
93
|
+
<sd-textfield [type]="'number'" [(value)]="data().qty" (valueChange)="mark(data)" />
|
|
96
94
|
```
|
|
97
95
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
### SdNumpad — `<sd-numpad>`
|
|
96
|
+
### `SdTextarea` — `<sd-textarea>`
|
|
101
97
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
- `value: model<string>` — 빈 값이면 `undefined`.
|
|
99
|
+
- `minRows: number` (기본 1) — 실제 행 수 = `max(minRows, 줄 수)`.
|
|
100
|
+
- `disabled`/`readonly: boolean` — 정적 display 박스.
|
|
101
|
+
- `required: boolean` — 빈 값일 때 "값을 입력하세요.".
|
|
102
|
+
- `inline`/`inset`/`size: "sm"|"lg"`/`theme`/`validatorFn`/`inputStyle`/`inputClass`.
|
|
107
103
|
|
|
108
|
-
|
|
104
|
+
### `SdNumpad` — `<sd-numpad>`
|
|
109
105
|
|
|
110
|
-
|
|
106
|
+
화면 숫자 키패드 + textfield 표시.
|
|
111
107
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
108
|
+
- `value: model<number>` — 파싱된 값(내부 `text` 와 동기).
|
|
109
|
+
- `placeholder` / `required: boolean`(빈 값이면 ENT 비활성) / `inputDisabled: boolean`(상단 textfield 비활성, 키패드는 사용 가능).
|
|
110
|
+
- `useEnterButton: boolean` — true 면 ENT 버튼 표시 → `enterButtonClick` emit.
|
|
111
|
+
- `useMinusButton: boolean` — true 면 `-` 부호 토글 버튼 표시.
|
|
112
|
+
- `enterButtonClick: output()` — ENT 클릭 시.
|
|
117
113
|
|
|
118
|
-
|
|
114
|
+
### `SdRange<K>` — `<sd-range>`
|
|
119
115
|
|
|
120
|
-
|
|
116
|
+
`~` 로 묶인 두 `sd-textfield`(`to.min` 은 `from` 에 바인딩).
|
|
121
117
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
```
|
|
118
|
+
- `type: K` (required) — 양끝 textfield 타입.
|
|
119
|
+
- `from`/`to: model<SdTextfieldTypes[K]>` — 범위 양끝.
|
|
120
|
+
- `required: boolean`(양끝 적용) / `disabled: boolean`(양끝 비활성) / `inputStyle`.
|
|
126
121
|
|
|
127
|
-
|
|
122
|
+
### `SdDateRangePicker` — `<sd-date-range-picker>`
|
|
128
123
|
|
|
129
|
-
|
|
124
|
+
기간 타입 셀렉트 + 날짜/월/범위 입력.
|
|
130
125
|
|
|
131
|
-
|
|
126
|
+
- `periodType: model<"일"|"월"|"범위">` (기본 `"범위"`) — `"일"` = 단일 날짜(to=from); `"월"` = 월 필드(범위를 그달 1일~말일로); `"범위"` = 두 날짜 필드 range.
|
|
127
|
+
- `from`/`to: model<DateOnly>` — 결과 범위(`"범위"` 에서 `to ≥ from` 클램프).
|
|
128
|
+
- `required: boolean` — 내부 필드 적용.
|
|
132
129
|
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
canChangeFn = input<(item: boolean) => boolean | Promise<boolean>>(() => true);
|
|
136
|
-
icon = input(tablerCheck); radio = input(false); disabled;
|
|
137
|
-
size = input<"sm"|"lg">(); inline; inset;
|
|
138
|
-
theme = input<...|"white">(); contentStyle = input<string>();
|
|
130
|
+
```html
|
|
131
|
+
<sd-date-range-picker [(from)]="filter().fromDate" [(to)]="filter().toDate" (fromChange)="mark(filter)" (toChange)="mark(filter)" />
|
|
139
132
|
```
|
|
140
133
|
|
|
141
|
-
|
|
142
|
-
- `radio` — true 면 라디오 외형(클릭 시 항상 true 로만 set, 해제 불가). `icon` 으로 체크 아이콘 교체, `theme="white"` 는 어두운 배경용.
|
|
134
|
+
## 체크박스·스위치
|
|
143
135
|
|
|
144
|
-
###
|
|
136
|
+
### `SdCheckbox` — `<sd-checkbox>`
|
|
145
137
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
canChangeFn
|
|
149
|
-
|
|
138
|
+
- `value: model(false)` — 체크 상태.
|
|
139
|
+
- `radio: boolean` — true 면 라디오 외형(원형·채운 점)이며 클릭은 항상 `true` 로(해제 불가); false 면 토글 체크박스.
|
|
140
|
+
- `canChangeFn: (item: boolean) => boolean | Promise<boolean>` (기본 `() => true`) — 변경 가드(`setupModelHook`). `false`/reject 면 변경 거부.
|
|
141
|
+
- `icon` (기본 `tablerCheck`) — 체크 아이콘(라디오 모드에선 무시).
|
|
142
|
+
- `disabled`/`size: "sm"|"lg"`/`inline`/`inset`/`contentStyle`.
|
|
143
|
+
- `theme` — 표준 테마 셋 + `white`(흰 배경·연한 테두리·체크 시 primary).
|
|
144
|
+
|
|
145
|
+
```html
|
|
146
|
+
<sd-checkbox [(value)]="data().isActive" (valueChange)="mark(data)">활성</sd-checkbox>
|
|
147
|
+
<sd-checkbox [radio]="true" [value]="mode() === 'a'" (valueChange)="mode.set('a')">A</sd-checkbox>
|
|
150
148
|
```
|
|
151
149
|
|
|
152
|
-
|
|
150
|
+
### `SdSwitch` — `<sd-switch>`
|
|
153
151
|
|
|
154
|
-
|
|
152
|
+
- `value: model(false)` — on/off.
|
|
153
|
+
- `canChangeFn` — 변경 가드(기본 `() => true`).
|
|
154
|
+
- `theme`(표준 테마 셋, on 트랙 색·기본 success) / `disabled`/`inline`/`inset`/`size: "sm"|"lg"`.
|
|
155
155
|
|
|
156
|
-
|
|
157
|
-
// group
|
|
158
|
-
value = model<T[]>([]); disabled = input(false);
|
|
159
|
-
// item
|
|
160
|
-
value = input.required<T>(); inline = input(false);
|
|
161
|
-
```
|
|
156
|
+
### `SdCheckboxGroup<T>` / `SdCheckboxGroupItem<T>` — `<sd-checkbox-group>` / `<sd-checkbox-group-item>`
|
|
162
157
|
|
|
163
|
-
-
|
|
158
|
+
- 그룹: `value: model<T[]>([])` — 선택 항목 배열. `disabled: boolean` — 자식에 전파.
|
|
159
|
+
- 아이템: `value: input.required<T>()` — 이 항목 값. `inline: boolean`. 클릭 시 부모 배열에 추가/제거.
|
|
164
160
|
|
|
165
|
-
##
|
|
161
|
+
## 셀렉트·드롭다운
|
|
166
162
|
|
|
167
|
-
### SdSelect — `<sd-select>`
|
|
163
|
+
### `SdSelect<M, T>` — `<sd-select>`
|
|
168
164
|
|
|
169
|
-
|
|
170
|
-
selectMode = input("single"); // "single" | "multi"
|
|
171
|
-
value = model<SelectModeValue<any>[M]>(); // single=T, multi=T[]
|
|
172
|
-
placeholder; disabled; inline; inset; size = input<"sm"|"lg">(); required;
|
|
173
|
-
hideSelectAll = input(false); multiSelectionDisplayDirection = input<"vertical">();
|
|
174
|
-
items = input<T[]>(); trackByFn = input<(item, index) => unknown>((item)=>item);
|
|
175
|
-
getChildrenFn = input<(item: T) => T[] | undefined>();
|
|
176
|
-
contentClass; contentStyle; dropdownOpen = model(false);
|
|
177
|
-
// SelectModeValue<T> = { multi: T[]; single: T }
|
|
178
|
-
selectItem(v); toggleItem(v); onSelectAll(); onDeselectAll(); openDropdown(); closeDropdown();
|
|
179
|
-
```
|
|
165
|
+
`SelectModeValue<T> = { multi: T[]; single: T }`.
|
|
180
166
|
|
|
181
|
-
- `selectMode` — `"single"
|
|
182
|
-
-
|
|
183
|
-
-
|
|
167
|
+
- `selectMode: M` (기본 `"single"`) — `"single"`(단일 값, 선택 시 닫힘) / `"multi"`(배열 값, 체크박스·전체선택 바, 열린 채 유지).
|
|
168
|
+
- `value: model<SelectModeValue<any>[M]>` — 선택 값(들).
|
|
169
|
+
- `placeholder: string` — 미선택 시 회색 표시.
|
|
170
|
+
- `required: boolean` — 빈 값(null/빈 배열)일 때 "선택된 항목이 없습니다.".
|
|
171
|
+
- `hideSelectAll: boolean` — true 면 multi 모드 "전체선택/전체해제" 바 숨김.
|
|
172
|
+
- `multiSelectionDisplayDirection: "vertical"` — multi 선택 라벨을 세로 스택(기본 인라인 콤마).
|
|
173
|
+
- `items: T[]` — 템플릿 구동 렌더용 데이터(`SdItemOfTemplate` 와 함께). `trackByFn`/`getChildrenFn`(계층 평탄화) 동반.
|
|
174
|
+
- `disabled`/`inline`/`inset`/`size: "sm"|"lg"`/`contentClass`/`contentStyle`.
|
|
175
|
+
- `dropdownOpen: model(false)` — 열림 상태.
|
|
176
|
+
|
|
177
|
+
정적 선택지는 `<sd-select-item>` 자식으로 구성:
|
|
184
178
|
|
|
185
179
|
```html
|
|
186
|
-
<sd-select [(value)]="
|
|
187
|
-
<sd-select-item [value]="'
|
|
188
|
-
<sd-select-item [value]="'
|
|
180
|
+
<sd-select [(value)]="data().state" (valueChange)="mark(data)">
|
|
181
|
+
<sd-select-item [value]="'작성'">작성</sd-select-item>
|
|
182
|
+
<sd-select-item [value]="'승인'">승인</sd-select-item>
|
|
189
183
|
</sd-select>
|
|
190
184
|
```
|
|
191
185
|
|
|
192
|
-
### SdSelectItem — `<sd-select-item>`
|
|
186
|
+
### `SdSelectItem<T>` — `<sd-select-item>`
|
|
193
187
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
188
|
+
- `value: T | undefined` — 이 항목 값.
|
|
189
|
+
- `disabled: boolean` — 회색·비클릭, 전체선택 제외.
|
|
190
|
+
- `hidden: boolean` — `display:none`, 전체선택 제외.
|
|
197
191
|
|
|
198
|
-
|
|
192
|
+
### `SdSelectButton` — `<sd-select-button>`
|
|
199
193
|
|
|
200
|
-
|
|
194
|
+
`sd-select` 우측에 슬롯되는 액션 버튼. input/output 없음(ripple 만 설정).
|
|
201
195
|
|
|
202
|
-
|
|
203
|
-
// 입력 없음. 콘텐츠 투영용.
|
|
204
|
-
```
|
|
196
|
+
### `SdDropdown` / `SdDropdownPopup` — `<sd-dropdown>` / `<sd-dropdown-popup>`
|
|
205
197
|
|
|
206
|
-
|
|
198
|
+
트리거 + body-append 팝업. 모바일(≤520px)은 backdrop 바텀시트, 데스크탑은 인접 배치.
|
|
207
199
|
|
|
208
|
-
|
|
200
|
+
- 드롭다운: `open: model(false)` — 열림 상태. `disabled: boolean` — true 면 tabindex 제거·열기 차단.
|
|
201
|
+
- 팝업: 콘텐츠 300px 초과 시 자체 높이 캡. input 없음.
|
|
209
202
|
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
203
|
+
```html
|
|
204
|
+
<sd-dropdown [(open)]="open">
|
|
205
|
+
<div>트리거</div>
|
|
206
|
+
<sd-dropdown-popup>...</sd-dropdown-popup>
|
|
207
|
+
</sd-dropdown>
|
|
214
208
|
```
|
|
215
209
|
|
|
216
|
-
|
|
210
|
+
## 폼
|
|
217
211
|
|
|
218
|
-
|
|
212
|
+
### `SdForm` — `<sd-form>`
|
|
219
213
|
|
|
220
|
-
|
|
214
|
+
native `<form novalidate>` + 숨김 submit 버튼 래퍼. 폼 안 Enter 자동 제출에. (`sd-crud-list`/`sd-crud-detail` 은 이미 내장하므로 별도 래핑 불필요)
|
|
221
215
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
get formEl: HTMLFormElement
|
|
225
|
-
formSubmit = output<SubmitEvent>(); formInvalid = output();
|
|
226
|
-
requestSubmit(): void;
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
- native form 래퍼. 제출 시 `checkValidity()` 통과하면 `formSubmit`, 실패하면 `reportValidity()` 후 `formInvalid`. `requestSubmit()` 으로 외부에서 제출 트리거(CTRL+S 등).
|
|
216
|
+
- `formSubmit: output<SubmitEvent>` — `checkValidity()` 통과 시 emit.
|
|
217
|
+
- `formInvalid: output()` — 검증 실패 시(`reportValidity()` 로 메시지·포커스 후).
|
|
218
|
+
- 메서드: `requestSubmit()` — 프로그래밍 제출. `get formEl(): HTMLFormElement`.
|
|
230
219
|
|
|
231
220
|
```html
|
|
232
|
-
<sd-form (formSubmit)="
|
|
221
|
+
<sd-form (formSubmit)="onSearch()">...<sd-button [type]="'submit'">조회</sd-button></sd-form>
|
|
233
222
|
```
|
|
234
223
|
|
|
235
|
-
|
|
224
|
+
## 접기·탭·리스트
|
|
236
225
|
|
|
237
|
-
|
|
238
|
-
// collapse
|
|
239
|
-
open = input(false);
|
|
240
|
-
// collapse-icon
|
|
241
|
-
icon = input(tablerChevronDown); open = input(false); openRotate = input(90);
|
|
242
|
-
```
|
|
226
|
+
### `SdCollapse` / `SdCollapseIcon` — `<sd-collapse>` / `<sd-collapse-icon>`
|
|
243
227
|
|
|
244
|
-
-
|
|
228
|
+
- collapse: `open: boolean` — true 면 펼침(margin-top 0), false 면 접힘(`-{높이}px`). 애니메이션 0.1s.
|
|
229
|
+
- icon: `open: boolean` — true 면 `openRotate` 도 회전. `openRotate: number`(기본 90) — 펼침 시 회전 각도. `icon`(기본 `tablerChevronDown`).
|
|
245
230
|
|
|
246
|
-
### SdTab / SdTabItem — `<sd-tab>` / `<sd-tab-item>`
|
|
231
|
+
### `SdTab` / `SdTabItem` — `<sd-tab>` / `<sd-tab-item>`
|
|
247
232
|
|
|
248
|
-
|
|
249
|
-
// tab
|
|
250
|
-
value = model<any>();
|
|
251
|
-
// tab-item
|
|
252
|
-
value = input<any>();
|
|
253
|
-
```
|
|
233
|
+
현재 탭 값을 고르는 **선택 컨트롤**(콘텐츠 컨테이너 아님). 콘텐츠는 바깥 `@if`/`@switch` 로 분기. 표준 패턴은 [client-tab.md](../manuals/client-tab.md).
|
|
254
234
|
|
|
255
|
-
- `
|
|
235
|
+
- 탭: `value: model<any>` — 현재 선택값(양방향 필수).
|
|
236
|
+
- 탭아이템: `value: any` — 이 항목 식별값. 클릭 시 부모 `value` 로 set, 부모 값과 비교해 선택 자동 결정.
|
|
256
237
|
|
|
257
238
|
```html
|
|
258
239
|
<sd-tab [(value)]="activeTab">
|
|
@@ -261,36 +242,29 @@ value = input<any>();
|
|
|
261
242
|
</sd-tab>
|
|
262
243
|
```
|
|
263
244
|
|
|
264
|
-
### SdList / SdListItem — `<sd-list>` / `<sd-list-item>`
|
|
245
|
+
### `SdList` / `SdListItem` — `<sd-list>` / `<sd-list-item>`
|
|
265
246
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
readonly = input(false); contentStyle; contentClass;
|
|
273
|
-
// #toolTpl 슬롯, 중첩 <sd-list> 로 트리
|
|
274
|
-
```
|
|
247
|
+
- list: `inset: boolean` — true 면 투명 배경·테두리 제거(카드 chrome 제거). 중첩 리스트는 항상 chrome 없음.
|
|
248
|
+
- item: `layout: "accordion"|"flat"` (기본 `"accordion"`) — `"accordion"` = 자식 클릭 접기/펼치기·chevron·들여쓰기; `"flat"` = 자식 항상 표시, 자식 가진 항목은 작은 섹션 헤더로(비클릭).
|
|
249
|
+
- `open: model(false)` — accordion 펼침 상태.
|
|
250
|
+
- `selected: boolean` — 강조/볼드. `selectedIcon: string` — leaf 선두 아이콘(선택 시 primary).
|
|
251
|
+
- `readonly: boolean` — 비대화(기본 커서·ripple 없음·클릭 무시).
|
|
252
|
+
- `contentStyle`/`contentClass`, `#toolTpl` — 우측 도구 템플릿.
|
|
275
253
|
|
|
276
|
-
|
|
277
|
-
- `selected`=선택 강조, `selectedIcon`=리프 항목 좌측 선택 아이콘, `readonly`=클릭 펼침 비활성. 자식 `<sd-list>` 중첩으로 다단 트리. 사이드바 메뉴가 이를 사용.
|
|
254
|
+
## 갭·페이지네이션
|
|
278
255
|
|
|
279
|
-
### SdGap — `<sd-gap>`
|
|
256
|
+
### `SdGap` — `<sd-gap>`
|
|
280
257
|
|
|
281
|
-
|
|
282
|
-
height/width = input<"xxs"|"xs"|"sm"|"default"|"lg"|"xl"|"xxl">();
|
|
283
|
-
heightPx; widthPx; widthEm = input<number>();
|
|
284
|
-
```
|
|
258
|
+
스페이서. width 입력이 height 보다 우선.
|
|
285
259
|
|
|
286
|
-
-
|
|
260
|
+
- `height` / `width: "xxs"|"xs"|"sm"|"default"|"lg"|"xl"|"xxl"` — 명명 갭 토큰(`--gap-{key}`). height 는 `display:block`, width 는 `inline-block`.
|
|
261
|
+
- `heightPx`/`widthPx`/`widthEm: number` — 명시 px/em. `0` 이면 `display:none`.
|
|
287
262
|
|
|
288
|
-
### SdPagination — `<sd-pagination>`
|
|
263
|
+
### `SdPagination` — `<sd-pagination>`
|
|
289
264
|
|
|
290
|
-
|
|
291
|
-
currentPage = model(0); // 0-based
|
|
292
|
-
totalPageCount = input(0); visiblePageCount = input(10);
|
|
293
|
-
goToPage(p); goToFirst(); goToLast(); goToNextGroup(); goToPrevGroup();
|
|
294
|
-
```
|
|
265
|
+
처음/이전그룹/페이지번호/다음그룹/마지막. 내부 0-base, 표시 1-base. (`sd-sheet`/`sd-crud-list` 가 내장하므로 단독 사용은 드묾)
|
|
295
266
|
|
|
296
|
-
-
|
|
267
|
+
- `currentPage: model(0)` — 0-base 현재 페이지.
|
|
268
|
+
- `totalPageCount: number` (기본 0) — 총 페이지. `0` 이면 페이지 없음·내비 비활성.
|
|
269
|
+
- `visiblePageCount: number` (기본 10) — 그룹당 페이지 번호 개수.
|
|
270
|
+
- 메서드: `goToPage(page)`/`goToNextGroup()`/`goToPrevGroup()`/`goToFirst()`/`goToLast()`.
|