@simplysm/sd-claude 14.0.91 → 14.0.92
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 +7 -6
- package/claude/references/sd-simplysm14/apis/angular/README.md +59 -39
- package/claude/references/sd-simplysm14/apis/angular/controls.md +119 -186
- package/claude/references/sd-simplysm14/apis/angular/crud.md +70 -31
- package/claude/references/sd-simplysm14/apis/angular/directives.md +55 -57
- package/claude/references/sd-simplysm14/apis/angular/features.md +86 -105
- package/claude/references/sd-simplysm14/apis/angular/infra.md +48 -57
- package/claude/references/sd-simplysm14/apis/angular/layout.md +37 -47
- package/claude/references/sd-simplysm14/apis/angular/overlay.md +82 -74
- package/claude/references/sd-simplysm14/apis/angular/routing-appstructure.md +61 -50
- package/claude/references/sd-simplysm14/apis/angular/shared-data.md +74 -57
- package/claude/references/sd-simplysm14/apis/angular/sheet.md +63 -72
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-auto-update/README.md +23 -18
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-file-system/README.md +21 -19
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-intent/README.md +23 -18
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-usb-storage/README.md +72 -32
- package/claude/references/sd-simplysm14/apis/core-browser/README.md +18 -18
- package/claude/references/sd-simplysm14/apis/core-browser/dom-element.md +29 -29
- package/claude/references/sd-simplysm14/apis/core-browser/indexed-db.md +41 -41
- package/claude/references/sd-simplysm14/apis/core-common/README.md +97 -90
- package/claude/references/sd-simplysm14/apis/core-common/async-runtime.md +75 -51
- package/claude/references/sd-simplysm14/apis/core-common/collection-ext.md +81 -0
- package/claude/references/sd-simplysm14/apis/core-common/errors.md +27 -29
- package/claude/references/sd-simplysm14/apis/core-common/obj.md +44 -45
- package/claude/references/sd-simplysm14/apis/core-common/serialization.md +34 -33
- package/claude/references/sd-simplysm14/apis/core-common/value-types.md +86 -0
- package/claude/references/sd-simplysm14/apis/core-node/README.md +6 -6
- package/claude/references/sd-simplysm14/apis/core-node/consola.md +3 -0
- package/claude/references/sd-simplysm14/apis/core-node/cpx.md +2 -2
- package/claude/references/sd-simplysm14/apis/core-node/fs-watcher.md +1 -1
- package/claude/references/sd-simplysm14/apis/core-node/fsx.md +2 -2
- package/claude/references/sd-simplysm14/apis/core-node/worker.md +6 -3
- package/claude/references/sd-simplysm14/apis/excel/README.md +10 -10
- package/claude/references/sd-simplysm14/apis/excel/conditional-format.md +4 -2
- package/claude/references/sd-simplysm14/apis/excel/utils.md +1 -1
- package/claude/references/sd-simplysm14/apis/excel/workbook-worksheet.md +6 -6
- package/claude/references/sd-simplysm14/apis/lint/README.md +6 -32
- package/claude/references/sd-simplysm14/apis/lint/recommended.md +60 -0
- package/claude/references/sd-simplysm14/apis/lint/rules.md +17 -17
- package/claude/references/sd-simplysm14/apis/orm-common/README.md +15 -6
- package/claude/references/sd-simplysm14/apis/orm-common/db-context.md +68 -102
- package/claude/references/sd-simplysm14/apis/orm-common/expr.md +75 -89
- package/claude/references/sd-simplysm14/apis/orm-common/queryable.md +87 -99
- package/claude/references/sd-simplysm14/apis/orm-common/schema.md +110 -147
- package/claude/references/sd-simplysm14/apis/orm-common/types.md +48 -51
- package/claude/references/sd-simplysm14/apis/orm-node/README.md +8 -13
- package/claude/references/sd-simplysm14/apis/orm-node/db-conn.md +5 -5
- package/claude/references/sd-simplysm14/apis/sd-cli/README.md +9 -6
- package/claude/references/sd-simplysm14/apis/sd-cli/SdTsCompiler.md +9 -8
- package/claude/references/sd-simplysm14/apis/sd-cli/sd-config-types.md +23 -19
- package/claude/references/sd-simplysm14/apis/service-client/README.md +20 -12
- package/claude/references/sd-simplysm14/apis/service-client/orm.md +6 -6
- package/claude/references/sd-simplysm14/apis/service-client/transport.md +1 -1
- package/claude/references/sd-simplysm14/apis/service-common/README.md +35 -32
- package/claude/references/sd-simplysm14/apis/service-common/app-structure.md +23 -22
- package/claude/references/sd-simplysm14/apis/service-common/protocol.md +23 -23
- package/claude/references/sd-simplysm14/apis/service-server/README.md +51 -43
- package/claude/references/sd-simplysm14/apis/service-server/service-authoring.md +6 -6
- package/claude/references/sd-simplysm14/apis/service-server/transport-internals.md +31 -21
- package/claude/references/sd-simplysm14/apis/service-server/v1-legacy.md +8 -8
- package/claude/references/sd-simplysm14/apis/storage/README.md +55 -49
- package/claude/references/sd-simplysm14/manuals/client-component.md +843 -740
- package/claude/references/sd-simplysm14/manuals/client-crud.md +8 -0
- package/claude/references/sd-simplysm14/manuals/client-demo.md +6 -16
- package/claude/references/sd-simplysm14/manuals/client-shared-data.md +26 -0
- package/claude/references/sd-simplysm14/manuals/logging.md +1 -1
- package/claude/references/sd-simplysm14/manuals/orm.md +15 -1
- package/claude/rules/sd-design-rules.md +7 -0
- package/claude/sd-system-prompt.md +5 -8
- package/claude/skills/sd-debug/SKILL.md +43 -0
- package/claude/skills/sd-debug/workflow.js +390 -0
- package/claude/skills/sd-demo/SKILL.md +18 -20
- package/claude/skills/sd-dev/SKILL.md +127 -24
- package/claude/skills/sd-docs/SKILL.md +5 -3
- package/claude/skills/sd-docs/references/subagent-prompt.md +2 -3
- package/claude/skills/sd-impl/SKILL.md +18 -18
- package/claude/skills/sd-manual/SKILL.md +1 -0
- package/claude/skills/sd-review/SKILL.md +24 -18
- package/claude/skills/sd-review/workflow.js +324 -0
- package/claude/skills/sd-spec/SKILL.md +96 -679
- package/claude/skills/sd-spec/references/example-spec.md +28 -50
- package/claude/skills/sd-spec/references/format-analyze.md +232 -0
- package/claude/skills/sd-spec/references/format-design.md +248 -0
- package/claude/skills/sd-spec/workflow-analyze.js +615 -0
- package/claude/skills/sd-spec/workflow-design.js +667 -0
- package/claude/skills/sd-unpack/scripts/handlers/office_com.py +5 -1
- package/package.json +1 -1
- package/scripts/postinstall.mjs +157 -18
- package/claude/references/sd-simplysm14/apis/angular/selection-managers.md +0 -68
- package/claude/references/sd-simplysm14/apis/core-common/array-ext.md +0 -77
- package/claude/references/sd-simplysm14/apis/core-common/datetime.md +0 -86
- package/claude/skills/sd-skill/SKILL.md +0 -245
- package/claude/skills/sd-skill/scripts/run_eval.py +0 -380
|
@@ -25,17 +25,17 @@ ORM 호출, 파일 변환, 비즈니스 로직 등은 위 두 경우에 해당
|
|
|
25
25
|
|
|
26
26
|
| 트리거 | 매뉴얼 |
|
|
27
27
|
| ------------------------------------------------------- | ------------------------------------------------------ |
|
|
28
|
-
| 클라이언트
|
|
28
|
+
| 클라이언트 공통 lint/template 규칙 (예: `$any` 금지) | [client-rules.md](./manuals/client-rules.md) |
|
|
29
29
|
| 화면 컴포넌트(`<domain>.<역할>.ts`) 작성/수정 | [client-component.md](./manuals/client-component.md) |
|
|
30
30
|
| `sd-crud-list` / `sd-crud-detail` 채택한 목록·단건 화면 | [client-crud.md](./manuals/client-crud.md) |
|
|
31
31
|
| 클라이언트 데모 컴포넌트 작성 | [client-demo.md](./manuals/client-demo.md) |
|
|
32
32
|
| `<sd-tab>` 사용 | [client-tab.md](./manuals/client-tab.md) |
|
|
33
33
|
| 앱에서 서버 서비스·이벤트 호출 (provider 정의·항목 추가) | [client-service.md](./manuals/client-service.md) |
|
|
34
34
|
| 앱에서 ORM(DB) 사용 (AppOrmProvider 정의) | [client-orm.md](./manuals/client-orm.md) |
|
|
35
|
-
| 앱에서 공유 마스터 데이터 사용 (provider 정의·항목
|
|
35
|
+
| 앱에서 공유 마스터 데이터 사용 (provider 정의·항목 추가, 선택 컨트롤의 관리·선택 모달) | [client-shared-data.md](./manuals/client-shared-data.md) |
|
|
36
36
|
| 클라이언트·서버 간 실시간 이벤트 정의·발생·구독 | [event.md](./manuals/event.md) |
|
|
37
37
|
| 앱 메뉴 구조·권한 정의 추가/수정 | [client-app-structure.md](./manuals/client-app-structure.md) |
|
|
38
|
-
|
|
|
38
|
+
| ORM 쿼리 작성(조회 흐름·안티패턴), 컬럼 nullable/default 정책, 삭제 전략 | [orm.md](./manuals/orm.md) |
|
|
39
39
|
| 이종 엔티티를 한 목록으로 합쳐 표시 (UNION) | [orm-union.md](./manuals/orm-union.md) |
|
|
40
40
|
| CRUD 처리에 데이터 변경 이력 적재·조회 (누가·언제·무엇을 변경) | [data-log.md](./manuals/data-log.md) |
|
|
41
41
|
| 콘솔 로깅 코드 작성/수정 (모든 패키지) | [logging.md](./manuals/logging.md) |
|
|
@@ -45,15 +45,16 @@ ORM 호출, 파일 변환, 비즈니스 로직 등은 위 두 경우에 해당
|
|
|
45
45
|
## 패키지 인덱스
|
|
46
46
|
|
|
47
47
|
- **angular** — Angular(zoneless) 기반 SI/업무 클라이언트용 UI 컴포넌트·디렉티브·전역 프로바이더·signal 헬퍼 — 부트스트랩(provideSdAngular)·모달/토스트/busy/인쇄·라우팅/메뉴/권한·폼 입력 컨트롤·시트(sd-sheet)·공유 마스터 데이터·CRUD 화면 골격·사이드바/탑바 레이아웃·칸반/권한표/에디터/시각화를 쓸 때. 자세히: [apis/angular/README.md](./apis/angular/README.md)
|
|
48
|
-
- **capacitor-plugin-auto-update** — Android APK 자동 업데이트 Capacitor 플러그인 — 부팅 시 서버/외부저장소의 최신 APK 를 받아 설치하는 오케스트레이터(AutoUpdate)와 저수준 설치·권한·버전 조회 정적 클래스(ApkInstaller)
|
|
48
|
+
- **capacitor-plugin-auto-update** — Android APK 자동 업데이트 Capacitor 플러그인 — 부팅 시 서버/외부저장소의 최신 APK 를 받아 설치하는 오케스트레이터(AutoUpdate.run/runByExternalStorage)와 저수준 설치·권한·버전 조회 정적 클래스(ApkInstaller) 및 브리지 타입(ApkInstallerPlugin/VersionInfo)을 쓸 때. 자세히: [apis/capacitor-plugin-auto-update/README.md](./apis/capacitor-plugin-auto-update/README.md)
|
|
49
49
|
- **capacitor-plugin-file-system** — Capacitor 네이티브 파일 시스템 접근(Android OS 파일 시스템 / 웹 IndexedDB 에뮬레이션). FileSystem 정적 메서드로 권한 확인·요청, 디렉토리 읽기/생성, 파일 읽기/쓰기/삭제, 저장소 경로·파일 URI 조회 시. 자세히: [apis/capacitor-plugin-file-system/README.md](./apis/capacitor-plugin-file-system/README.md)
|
|
50
50
|
- **capacitor-plugin-intent** — Android 인텐트 송수신 Capacitor 플러그인(Intent 정적 클래스) — 브로드캐스트 구독/전송, 실행 인텐트 조회, newIntent 리스닝, startActivityForResult 외부 Activity 실행·결과 수신. 바코드 스캐너·PDA 등 산업용 디바이스 연동 시 사용. 자세히: [apis/capacitor-plugin-intent/README.md](./apis/capacitor-plugin-intent/README.md)
|
|
51
51
|
- **capacitor-plugin-usb-storage** — 연결된 USB Mass Storage 장치를 열거·권한확인 후 디렉토리/파일을 읽는 Capacitor 플러그인. 정적 클래스 UsbStorage 와 입출력 타입(UsbDeviceInfo/UsbDeviceFilter/UsbFileInfo/UsbStoragePlugin) 제공. 자세히: [apis/capacitor-plugin-usb-storage/README.md](./apis/capacitor-plugin-usb-storage/README.md)
|
|
52
52
|
- **core-browser** — 브라우저 전용 유틸리티 — DOM 요소 탐색·위치 계산·가시성 확장, IndexedDB 영속화 및 가상 파일시스템, Blob 다운로드·URL 바이너리 수신·파일 선택 대화상자가 필요할 때. 자세히: [apis/core-browser/README.md](./apis/core-browser/README.md)
|
|
53
|
-
- **core-common** — 브라우저·Node 공용 기반 유틸 — 날짜/시간 값 타입(DateTime/DateOnly/Time), 에러 클래스(SdError 등),
|
|
53
|
+
- **core-common** — 브라우저·Node 공용 기반 유틸 — 날짜/시간 값 타입(DateTime/DateOnly/Time/Uuid), 에러 클래스(SdError 등), 배열/Set/Map 프로토타입 확장, 객체 깊은 복사·비교·병합(obj), 직렬화(json/xml/bytes/transfer), 비동기 큐·이벤트·대기·자동만료 Map, 문자열/숫자/경로/날짜포맷 유틸, 로거·환경변수·원시타입 매핑이 필요할 때. 자세히: [apis/core-common/README.md](./apis/core-common/README.md)
|
|
54
54
|
- **core-node** — Node 전용 유틸: 파일시스템 IO(fsx)·경로 가공(pathx)·자식 프로세스 실행(cpx)·glob 감시(FsWatcher)·consola 로깅 셋업(setupConsola)·worker_threads 타입 안전 래퍼(Worker/createWorker)가 필요할 때. 자세히: [apis/core-node/README.md](./apis/core-node/README.md)
|
|
55
55
|
- **excel** — OOXML(.xlsx) 워크북을 ZIP 단위 lazy-load 로 읽고 쓰는 라이브러리. ExcelWorkbook/ExcelWorksheet 로 시트·셀 값/수식·스타일·조건부 서식·이미지·행 복사·뷰를, ExcelWrapper 로 Zod 스키마 기반 레코드 ↔ 엑셀 변환을, ExcelUtils 로 주소·날짜 시리얼·숫자형식 변환을 다룰 때. 자세히: [apis/excel/README.md](./apis/excel/README.md)
|
|
56
|
-
- **
|
|
56
|
+
- **lint** — 심플리즘 ESLint 자산. 커스텀 규칙 9종 플러그인(`@simplysm/lint/eslint-plugin`)과 그 규칙 + typescript-eslint/angular-eslint/import/unused-imports 를 묶은 flat config 프리셋(`@simplysm/lint/eslint-recommended`)을 프로젝트 eslint.config 에 적용하거나 개별 규칙의 검사 대상·메시지·autofix·옵션을 파악할 때. 자세히: [apis/lint/README.md](./apis/lint/README.md)
|
|
57
|
+
- **orm-common** — Dialect(MySQL/MSSQL/PostgreSQL) 독립 ORM 코어 — Table/View/Procedure 스키마 빌더, DbContext 상속(연결·트랜잭션·DDL·마이그레이션), Queryable 체이닝(SELECT/CUD·join/include/union/recursive·검색), expr 표현식 빌더(비교·집계·조건·윈도우·서브쿼리), QueryDef/Expr AST·dialect QueryBuilder·결과 파싱을 다룰 때. 자세히: [apis/orm-common/README.md](./apis/orm-common/README.md)
|
|
57
58
|
- **orm-node** — Node.js 환경에서 DbContext 를 MySQL/MSSQL/PostgreSQL 에 연결·실행하는 ORM 런타임 — 고수준 createOrm(트랜잭션 경계) 과 저수준 createDbConn/DbConn(raw SQL·파라미터 쿼리·bulk insert·수동 트랜잭션) 제공. 자세히: [apis/orm-node/README.md](./apis/orm-node/README.md)
|
|
58
59
|
- **sd-cli** — sd.config.ts 설정 타입(SdConfigFn·타겟별 패키지 설정·배포/Capacitor/Electron/PWA), 패키지 단위 TS/Angular AOT 증분 컴파일러 SdTsCompiler, Vitest용 Angular Vite 플러그인 sdAngularPlugin 을 다룰 때. 자세히: [apis/sd-cli/README.md](./apis/sd-cli/README.md)
|
|
59
60
|
- **service-client** — WebSocket 으로 서비스 서버에 접속해 서비스 RPC 호출·서버 푸시 이벤트 구독/발행·파일 업다운로드·서버측 ORM 원격 실행을 수행하는 클라이언트(브라우저/Node 양용)가 필요할 때. 자세히: [apis/service-client/README.md](./apis/service-client/README.md)
|
|
@@ -1,57 +1,77 @@
|
|
|
1
1
|
# @simplysm/angular
|
|
2
2
|
|
|
3
|
-
Angular(zoneless) 기반 SI/업무 클라이언트용 UI
|
|
4
|
-
|
|
5
|
-
> 사용 예 패턴 근거: `manuals/client-component.md`, `client-shared-data.md`, `client-system-log.md`, `client-demo.md`, `client-rules.md`. 화면 작성 시 provider 경유 호출·표준 시그널(ready/initialized/busyCount/viewType)·`mark` 사용·`$any` 금지 등은 매뉴얼을 따름.
|
|
3
|
+
Angular(zoneless) 기반 SI/업무 클라이언트용 UI 컴포넌트·디렉티브·전역 프로바이더·signal 헬퍼 모음. `provideSdAngular` 부트스트랩 위에서 모달/토스트/busy/인쇄, 라우팅/메뉴/권한, 폼 입력 컨트롤, 시트(sd-sheet), 공유 마스터 데이터, CRUD 화면 골격, 사이드바/탑바 레이아웃, 칸반/권한표/에디터/시각화를 제공. `import "@simplysm/core-browser"` 를 side-effect 로 로드하며, 컴포넌트는 standalone + OnPush + `ViewEncapsulation.None`, selector 는 `sd-` prefix.
|
|
6
4
|
|
|
7
5
|
## 사용 트리거 인덱스
|
|
8
6
|
|
|
9
|
-
- **앱 부트스트랩·전역
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- **
|
|
19
|
-
|
|
7
|
+
- **앱 부트스트랩·전역 설정** — `provideSdAngular` 로 zoneless 앱을 띄우고, 클라이언트명·테마·로컬스토리지·시스템설정·시스템로그·서비스클라이언트 프로바이더를 설정할 때. 자세히: [infra.md](./infra.md)
|
|
8
|
+
- **오버레이(모달·토스트·busy·인쇄)** — 코드로 모달/토스트를 띄우거나, 화면 busy 표시·인쇄/PDF 출력을 할 때. 자세히: [overlay.md](./overlay.md)
|
|
9
|
+
- **라우팅·메뉴·권한(app-structure)** — 페이지 코드·뷰 타입·제목 시그널, 라우터 링크/창 열기, 이탈 가드, 메뉴/권한 트리 계산을 할 때. 자세히: [routing-appstructure.md](./routing-appstructure.md)
|
|
10
|
+
- **공유 마스터 데이터** — `SdSharedDataProvider` 로 고객사·품목 등 마스터를 한 번 등록해 화면에서 공유 시그널로 쓰고, 선택 컨트롤로 관리·선택 모달을 띄울 때. 자세히: [shared-data.md](./shared-data.md)
|
|
11
|
+
- **시트(sd-sheet)** — 컬럼·셀 템플릿·정렬·페이징·선택·트리·요약 행을 가진 데이터 그리드를 그릴 때. 자세히: [sheet.md](./sheet.md)
|
|
12
|
+
- **CRUD 화면 골격** — 목록(`sd-crud-list`)·단건(`sd-crud-detail`)·공통 컨테이너(`sd-base-container`) 표준 화면 골격을 채택할 때. 자세히: [crud.md](./crud.md)
|
|
13
|
+
- **폼·입력 컨트롤** — 버튼·텍스트필드·체크박스·셀렉트·드롭다운·폼·페이지네이션 등 입력 컨트롤을 쓸 때. 자세히: [controls.md](./controls.md)
|
|
14
|
+
- **레이아웃(사이드바·탑바)** — 앱 셸의 사이드바/탑바/메뉴/유저 메뉴를 배치할 때. 자세히: [layout.md](./layout.md)
|
|
15
|
+
- **호스트 디렉티브·signal 헬퍼·선택 매니저** — 리사이즈/교차/리플/등장효과/유효성 디렉티브, 명령 단축키, 옵션 이벤트 플러그인, 템플릿 타입 가드, 선택/정렬/펼침 매니저를 쓸 때. 자세히: [directives.md](./directives.md)
|
|
16
|
+
- **부가 기능(칸반·권한표·상태프리셋·테마·주소·에디터·시각화)** — 칸반 보드, 권한 트리 표, 상태 프리셋, 테마 토글, 주소 검색 모달, Tiptap 에디터, 라벨/노트/진행바/달력/바코드/ECharts 를 쓸 때. 자세히: [features.md](./features.md)
|
|
17
|
+
|
|
18
|
+
## 공통 인라인 (소형 심볼)
|
|
19
|
+
|
|
20
|
+
### FormatPipe
|
|
21
|
+
|
|
22
|
+
문자열·날짜를 표시 포맷으로 변환하는 standalone pipe. name `format`.
|
|
23
|
+
|
|
24
|
+
- `transform(value: string | DateTime | DateOnly | undefined, format: string): string` — `value` 가 null 이면 `""`. `DateTime`/`DateOnly` 면 `value.toFormatString(format)`. 문자열이면 `format` 을 `|` 로 분리해 `X` 개수가 문자열 길이와 같은 패턴을 골라 `X` 자리에 글자를 끼워 넣음(전화번호·사업자번호 등 자릿수 마스킹). 매칭 패턴 없으면 원문 반환.
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
{{ phone | format: "XXX-XXXX-XXXX|XX-XXXX-XXXX" }}
|
|
28
|
+
{{ regDate | format: "yyyy-MM-dd" }}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### mark
|
|
32
|
+
|
|
33
|
+
시그널 값을 in-place 변경한 뒤 소비자에게 변경 알림만 발행.
|
|
34
|
+
|
|
35
|
+
- `mark(sig: WritableSignal<any>): void` — `sig` 가 배열이면 `[...v]`, 객체면 `{...v}` 로 shallow copy 해 set. 객체·배열 시그널 내부 필드만 바꾼 뒤(`data().name = ...; mark(data)`) 양방향 바인딩의 `(valueChange)` 에 묶어 호출하거나, 값이 같아도 effect 를 강제 재발화시킬 때 사용.
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<sd-textfield [(value)]="data().name" (valueChange)="mark(data)" />
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### setSafeStyle
|
|
42
|
+
|
|
43
|
+
`Renderer2` 로 여러 스타일 속성을 한 번에 설정.
|
|
44
|
+
|
|
45
|
+
- `setSafeStyle(renderer: Renderer2, el: HTMLElement, style: Partial<CSSStyleDeclaration>): void` — `style` 의 각 키를 `renderer.setStyle` 로 적용. 디렉티브·setup 헬퍼에서 호스트 엘리먼트에 스타일을 줄 때 사용.
|
|
20
46
|
|
|
21
|
-
|
|
47
|
+
### setupBgTheme
|
|
22
48
|
|
|
23
|
-
|
|
49
|
+
현재 컴포넌트가 살아있는 동안 `document.body` 배경색 CSS 변수를 테마색으로 설정(파괴 시 해제). injection 컨텍스트(생성자)에서 호출.
|
|
24
50
|
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
51
|
+
- `options.theme: "primary"|"secondary"|"info"|"success"|"warning"|"danger"|"gray"|"blue-gray"` — 배경 테마 계열. 미지정 시 배경색 변수를 빈 값으로 둠(기본 배경 유지).
|
|
52
|
+
- `options.lightness: "lightest"|"lighter"` — 테마색 밝기. 미지정 시 `"lightest"`. 페이지 전체 배경을 옅게 깔 때 사용.
|
|
27
53
|
|
|
28
|
-
|
|
54
|
+
```ts
|
|
55
|
+
constructor() { setupBgTheme({ theme: "gray", lightness: "lightest" }); }
|
|
56
|
+
```
|
|
29
57
|
|
|
30
|
-
|
|
31
|
-
- `value` 가 `null`/`undefined` → `""` 반환(결측 보존).
|
|
32
|
-
- `DateTime`/`DateOnly` → `value.toFormatString(format)`.
|
|
33
|
-
- `string` → `format` 을 `|` 로 끊어 각 후보에서 `X` 개수가 문자열 길이와 같은 것을 찾아 `X` 자리에 한 글자씩 끼워 마스킹(예: 전화번호 `"XXX-XXXX-XXXX"`). 매칭 후보가 없으면 원문 그대로.
|
|
34
|
-
- 사용: `{{ phone | format: 'XXX-XXXX-XXXX' }}`, `{{ date | format: 'yyyy-MM-dd' }}`.
|
|
58
|
+
### setupModelHook
|
|
35
59
|
|
|
36
|
-
|
|
60
|
+
`WritableSignal` 의 `set`/`update` 를 가로채 변경 허용 여부를 콜백으로 검사(비동기 허용). injection 컨텍스트에서 호출.
|
|
37
61
|
|
|
38
|
-
|
|
62
|
+
- `model: WritableSignal<T>` — 가드를 걸 대상 모델 시그널.
|
|
63
|
+
- `canFn: Signal<(item: T) => boolean | Promise<boolean>>` — 새 값을 받기 전 호출. `false` 면 반영 차단, `true` 면 즉시 반영, `Promise` 면 resolve 가 `false` 가 아닐 때만 반영(reject 는 `ErrorHandler` 로). 체크박스·스위치의 변경 확인 후에만 모델을 바꿔야 할 때.
|
|
39
64
|
|
|
40
|
-
|
|
41
|
-
- `UndefToOptional<T>` — `undefined` 를 포함하는 프로퍼티를 optional(`?`)로 바꾸는 매핑 타입. `DirectiveInputSignals` 내부에서 사용.
|
|
42
|
-
- `WithOptional<T, K extends keyof T>` — 특정 키 `K` 만 optional 로 만든 타입(`Omit<T,K> & Partial<Pick<T,K>>`). provider 의 `inputs` 에서 "기본값 있는 입력은 생략 가능" 을 표현.
|
|
65
|
+
### SelectModalOutputResult
|
|
43
66
|
|
|
44
|
-
|
|
67
|
+
선택 모달이 close 페이로드로 돌려주는 결과 타입.
|
|
45
68
|
|
|
46
|
-
- `
|
|
69
|
+
- `selectedKeys: TKey[]` — 모달에서 선택된 키 배열. 단건 선택도 배열로 반환(첫 키만 사용). `sd-modal-select-button`·`sd-shared-data-select` 가 이 페이로드로 선택을 갱신.
|
|
47
70
|
|
|
48
|
-
|
|
71
|
+
### 타입 유틸 (directive-input-signals)
|
|
49
72
|
|
|
50
|
-
|
|
73
|
+
컴포넌트 input 시그널에서 값 타입을 뽑는 매핑 타입. 모달/토스트/인쇄 `inputs` 의 정적 타입 검증에 쓰임.
|
|
51
74
|
|
|
52
|
-
- `
|
|
53
|
-
- `
|
|
54
|
-
- `
|
|
55
|
-
- `widthPx: number` — 가로 간격 px. `0` 이면 display=none.
|
|
56
|
-
- `widthEm: number` — 가로 간격 em. `0` 이면 display=none.
|
|
57
|
-
- 사용: `<sd-gap [width]="'sm'" />`.
|
|
75
|
+
- `DirectiveInputSignals<T>` — `T` 의 `InputSignal` 프로퍼티만 골라 값 타입으로 변환한 객체 타입. `undefined` 포함 필드는 optional 로.
|
|
76
|
+
- `UndefToOptional<T>` — `undefined` 를 포함하는 프로퍼티를 optional(`?`) 로 변환.
|
|
77
|
+
- `WithOptional<T, K>` — `T` 에서 키 `K` 들만 optional 로 변환.
|
|
@@ -1,213 +1,146 @@
|
|
|
1
|
-
# @simplysm/angular —
|
|
1
|
+
# @simplysm/angular — 폼·입력 컨트롤
|
|
2
2
|
|
|
3
|
-
버튼·앵커, 텍스트/숫자/날짜 입력, 체크박스/스위치, 셀렉트/드롭다운, 폼/접기/탭/리스트/페이지네이션 등 폼·UI 기본 컨트롤 군. 화면 폼·필터·시트 셀에서 함께 쓰임. 공통:
|
|
3
|
+
버튼·앵커, 텍스트/숫자/날짜 입력, 체크박스/스위치, 셀렉트/드롭다운, 폼/접기/탭/리스트/페이지네이션 등 폼·UI 기본 컨트롤 군. 화면 폼·필터·시트 셀에서 함께 쓰임. 공통: 대부분 컨트롤이 `size: "sm"|"lg"`(미지정=기본), `inline`, `inset`(테두리 제거·셀 내장용), `disabled`, `theme` 을 가짐. 매뉴얼(client-component.md "표준 입력 컨트롤"·"버튼 스타일")의 역할별 theme/size 규약을 따름.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
### SdButton (`sd-button`)
|
|
8
|
-
|
|
9
|
-
- `type: "button"|"submit"` — 버튼 타입. `"submit"` 이면 부모 `sd-form` submit 트리거. 기본 `"button"`.
|
|
10
|
-
- `theme` — 색 테마. 일반 시리즈 `"primary"|"secondary"|"info"|"success"|"warning"|"danger"|"gray"|"blue-gray"`(채움 버튼), link 시리즈 `"link"|"link-primary"|...|"link-blue-gray"|"link-rev"`(테두리·배경 없는 텍스트 버튼). 저장/삭제 등 데이터 변경 최상위 액션은 일반 시리즈, 유틸/시트 위 버튼은 link 시리즈(client-component.md).
|
|
11
|
-
- `size: "sm"|"lg"` — 패딩 크기. 시트 위/셀 버튼은 `"sm"`.
|
|
12
|
-
- `inline: boolean` — true 면 width auto(인라인 배치). 기본은 width 100%.
|
|
13
|
-
- `inset: boolean` — true 면 테두리·radius 제거(컨테이너 내장 버튼).
|
|
14
|
-
- `disabled: boolean` — 비활성.
|
|
15
|
-
- `buttonStyle: string` / `buttonClass: string` — 내부 `<button>` 에 직접 줄 스타일/클래스.
|
|
16
|
-
- 사용: `<sd-button [theme]="'primary'" (click)="onSave()">저장</sd-button>`.
|
|
17
|
-
|
|
18
|
-
### SdAnchor (`sd-anchor`)
|
|
19
|
-
|
|
20
|
-
인라인 텍스트 링크/아이콘 버튼.
|
|
21
|
-
|
|
22
|
-
- `theme: "primary"|...|"blue-gray"` — 텍스트 색(기본 `"primary"`). hover 시 underline.
|
|
23
|
-
- `disabled: boolean` — true 면 흐려지고 포인터·tabindex 제거.
|
|
24
|
-
- 사용: 시트 셀 안 액션 아이콘 `<sd-anchor [theme]="'danger'" (click)="onDelete()"><ng-icon [svg]="tablerEraser" /></sd-anchor>`.
|
|
25
|
-
|
|
26
|
-
### SdAdditionalButton (`sd-additional-button`)
|
|
27
|
-
|
|
28
|
-
콘텐츠 + 우측 버튼을 한 테두리로 묶는 컨테이너. `<ng-content>` 본문 + 투영된 `sd-anchor`/`sd-button`.
|
|
29
|
-
|
|
30
|
-
- `size: "sm"|"lg"` — 패딩.
|
|
31
|
-
- `inset: boolean` — 테두리·radius 제거.
|
|
32
|
-
|
|
33
|
-
### SdModalSelectButton (`sd-modal-select-button`)
|
|
5
|
+
테마 계열(여러 컨트롤 공통): `"primary"|"secondary"|"info"|"success"|"warning"|"danger"|"gray"|"blue-gray"`. 버튼은 추가로 link 계열(`"link"`·`"link-primary"`…`"link-rev"`)을 가짐.
|
|
34
6
|
|
|
35
|
-
|
|
7
|
+
## 버튼·앵커
|
|
36
8
|
|
|
37
|
-
|
|
38
|
-
- `
|
|
39
|
-
- `
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- `
|
|
46
|
-
- `
|
|
9
|
+
### SdButton — `sd-button`
|
|
10
|
+
- `type: "button"|"submit"` — 폼 제출 버튼이면 `"submit"`.
|
|
11
|
+
- `theme` — 위 테마 계열 + link 계열. 데이터 변경 액션은 일반 계열, 유틸/시트 버튼은 link 계열.
|
|
12
|
+
- `size: "sm"|"lg"` — 크기. 시트 위 버튼은 `"sm"`.
|
|
13
|
+
- `inline`/`inset`/`disabled: boolean` — 인라인 배치/테두리 제거/비활성.
|
|
14
|
+
- `buttonStyle`/`buttonClass: string` — 내부 `<button>` 에 스타일/클래스 주입.
|
|
15
|
+
|
|
16
|
+
### SdAnchor — `sd-anchor`
|
|
17
|
+
- `disabled: boolean` — 비활성(클릭/포커스 차단).
|
|
18
|
+
- `theme` — 테마 계열(기본 `"primary"`). 텍스트 링크형 액션.
|
|
19
|
+
|
|
20
|
+
### SdAdditionalButton — `sd-additional-button`
|
|
21
|
+
입력 옆에 버튼을 붙이는 컨테이너.
|
|
22
|
+
- `size: "sm"|"lg"` — 크기.
|
|
23
|
+
- `inset: boolean` — 테두리 제거.
|
|
24
|
+
|
|
25
|
+
### SdModalSelectButton<K> — `sd-modal-select-button`
|
|
26
|
+
모달로 항목을 골라 값으로 받는 버튼(필수 검증 내장).
|
|
27
|
+
- `modal: input.required<SdSelectModalInfo<...>>` — 선택 모달. `selectMode`/현재 선택키 주입.
|
|
28
|
+
- `value: model<단일|배열>` — 선택 결과.
|
|
29
|
+
- `selectMode: "single"|"multi"` — 선택 모드(기본 single).
|
|
30
|
+
- `required`/`disabled`/`inset: boolean`, `size: "sm"|"lg"` — 상태/크기.
|
|
31
|
+
- `modalOptions: SdModalOptions` — 모달 옵션.
|
|
32
|
+
- `searchIcon` — 검색 버튼 아이콘.
|
|
47
33
|
|
|
48
34
|
## 텍스트·숫자·날짜 입력
|
|
49
35
|
|
|
50
|
-
### SdTextfield<K>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- `
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- `
|
|
62
|
-
- `
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- `
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- `
|
|
89
|
-
- `
|
|
90
|
-
- `required: boolean
|
|
91
|
-
- `inputDisabled: boolean` — true 면 상단 텍스트 직접 입력 막고 패드만.
|
|
92
|
-
- `useEnterButton: boolean` — true 면 ENT 버튼 표시.
|
|
93
|
-
- `useMinusButton: boolean` — true 면 부호(-) 버튼 표시.
|
|
94
|
-
- `enterButtonClick: output()` — ENT 클릭 시 발화(확정 처리 트리거).
|
|
95
|
-
|
|
96
|
-
### SdRange<K> (`sd-range`)
|
|
97
|
-
|
|
98
|
-
`from ~ to` 두 입력. `to` 의 min 을 `from` 으로 자동 제한.
|
|
99
|
-
|
|
100
|
-
- `type: input.required<K>` — `sd-textfield` 와 동일 타입 키.
|
|
101
|
-
- `from: model<SdTextfieldTypes[K]>` / `to: model<SdTextfieldTypes[K]>` — 범위 양끝.
|
|
102
|
-
- `required` / `disabled` / `inputStyle` — 공통.
|
|
103
|
-
|
|
104
|
-
### SdDateRangePicker (`sd-date-range-picker`)
|
|
105
|
-
|
|
106
|
-
기간 종류(일/월/범위) 선택 + 그에 맞는 날짜 입력. 종류·시작일 변경 시 `to` 자동 동기화(일=from과 동일, 월=그 달 1일~말일, 범위=from>to면 보정).
|
|
107
|
-
|
|
108
|
-
- `periodType: model<"일"|"월"|"범위">` — 기간 종류(기본 `"범위"`).
|
|
109
|
-
- `from: model<DateOnly>` / `to: model<DateOnly>` — 기간 양끝.
|
|
110
|
-
- `required: boolean` — 필수 여부.
|
|
111
|
-
- 사용: `<sd-date-range-picker [(from)]="filter().from" [(to)]="filter().to" (fromChange)="mark(filter)" />`.
|
|
36
|
+
### SdTextfield<K> — `sd-textfield`
|
|
37
|
+
타입별(`type` 으로 결정) 단일 입력. `SdTextfieldTypes` 키로 값 타입 결정.
|
|
38
|
+
- `type: input.required<K>` — `SdTextfieldTypes` 의 키. 값 타입을 결정.
|
|
39
|
+
- `value: model<SdTextfieldTypes[K]>` — 값(타입에 따라 string/number/`DateOnly`/`DateTime`/`Time`).
|
|
40
|
+
- `placeholder`/`title: string` — 안내/타이틀.
|
|
41
|
+
- `disabled`/`readonly`/`required: boolean` — 상태.
|
|
42
|
+
- `min`/`max: SdTextfieldTypes[K]`, `minlength`/`maxlength`/`pattern`/`step` — 검증 제약.
|
|
43
|
+
- `validatorFn: (value) => string | undefined` — 커스텀 검증(반환 문자열이 오류 메시지).
|
|
44
|
+
- `format: string` — `format` 타입의 마스킹 패턴.
|
|
45
|
+
- `useNumberComma: boolean` — 숫자 천단위 콤마(기본 true).
|
|
46
|
+
- `minDigits: number` — 숫자 표시 최소 자릿수.
|
|
47
|
+
- `inline`/`inset: boolean`, `size: "sm"|"lg"`, `theme` — 배치/크기/테마.
|
|
48
|
+
- `inputStyle`/`inputClass`/`autocomplete` — 내부 input 속성.
|
|
49
|
+
|
|
50
|
+
`SdTextfieldTypes` 키: `number`(number), `text`/`password`/`color`/`email`/`format`(string), `date`/`month`/`year`(`DateOnly`), `datetime`/`datetime-sec`(`DateTime`), `time`/`time-sec`(`Time`). 런타임 키 배열 `sdTextfieldTypes`.
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<sd-textfield [type]="'number'" [(value)]="data().qty" (valueChange)="mark(data)" [required]="true" />
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### SdTextarea — `sd-textarea`
|
|
57
|
+
여러 줄 텍스트. `value: model<string>`, `minRows: number`(기본 1), 외에 textfield 와 유사한 `placeholder`/`disabled`/`readonly`/`required`/`validatorFn`/`size`/`theme`/`inline`/`inset`/`inputStyle`/`inputClass`.
|
|
58
|
+
|
|
59
|
+
### SdNumpad — `sd-numpad`
|
|
60
|
+
화면 숫자 키패드 입력.
|
|
61
|
+
- `value: model<number>` — 값.
|
|
62
|
+
- `placeholder: string`, `required`/`inputDisabled: boolean` — 안내/필수/직접입력 비활성.
|
|
63
|
+
- `useEnterButton`/`useMinusButton: boolean` — 엔터/마이너스 버튼 노출.
|
|
64
|
+
- `enterButtonClick: output` — 엔터 버튼 클릭.
|
|
65
|
+
|
|
66
|
+
### SdRange<K> — `sd-range`
|
|
67
|
+
같은 타입 두 값(from/to) 범위 입력.
|
|
68
|
+
- `type: input.required<K>` — `SdTextfieldTypes` 키.
|
|
69
|
+
- `from`/`to: model<SdTextfieldTypes[K]>` — 범위 양끝.
|
|
70
|
+
- `required`/`disabled: boolean`, `inputStyle: string`.
|
|
71
|
+
|
|
72
|
+
### SdDateRangePicker — `sd-date-range-picker`
|
|
73
|
+
기간 유형 + 날짜 범위 입력.
|
|
74
|
+
- `periodType: model<"일"|"월"|"범위">` — 기간 단위(기본 `"범위"`). `"일"`/`"월"` 은 단일 날짜를 from/to 로 환산.
|
|
75
|
+
- `from`/`to: model<DateOnly>` — 시작/끝 날짜.
|
|
76
|
+
- `required: boolean`.
|
|
112
77
|
|
|
113
78
|
## 체크박스·스위치
|
|
114
79
|
|
|
115
|
-
### SdCheckbox
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
- `
|
|
120
|
-
- `
|
|
121
|
-
- `
|
|
122
|
-
- `icon: input` — 체크 아이콘(기본 `tablerCheck`).
|
|
123
|
-
- `disabled` / `size` / `inline` / `inset` / `theme`(+`"white"`) / `contentStyle` — 공통/스타일.
|
|
124
|
-
- 사용: 라디오 그룹은 같은 모델을 `[radio]="true"` 체크박스 여러 개로.
|
|
125
|
-
|
|
126
|
-
### SdSwitch (`sd-switch`)
|
|
127
|
-
|
|
128
|
-
on/off 토글 스위치.
|
|
129
|
-
|
|
130
|
-
- `value: model<boolean>` / `canChangeFn` — `sd-checkbox` 와 동일.
|
|
131
|
-
- `disabled` / `inline` / `inset` / `size` / `theme` — 공통.
|
|
80
|
+
### SdCheckbox — `sd-checkbox`
|
|
81
|
+
- `value: model<boolean>` — 체크 여부.
|
|
82
|
+
- `radio: boolean` — 라디오 모양(그룹 내 단일 선택).
|
|
83
|
+
- `canChangeFn: (item) => boolean | Promise<boolean>` — 변경 허용 가드(`setupModelHook` 경유).
|
|
84
|
+
- `icon` — 체크 아이콘(기본 `tablerCheck`).
|
|
85
|
+
- `disabled`/`inline`/`inset: boolean`, `size: "sm"|"lg"` — 상태/크기.
|
|
86
|
+
- `theme` — 테마 계열 + `"white"`. `contentStyle: string`.
|
|
132
87
|
|
|
133
|
-
###
|
|
88
|
+
### SdSwitch — `sd-switch`
|
|
89
|
+
- `value: model<boolean>` — on/off.
|
|
90
|
+
- `canChangeFn` — 변경 가드.
|
|
91
|
+
- `disabled`/`inline`/`inset: boolean`, `size`, `theme` — 상태/크기/테마.
|
|
134
92
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
- `SdCheckboxGroup
|
|
138
|
-
- `
|
|
139
|
-
- `SdCheckboxGroupItem.value: input.required<T>` — 이 항목의 값. 체크 시 그룹 배열에 추가/제거.
|
|
140
|
-
- `SdCheckboxGroupItem.inline: boolean` — 인라인 표시.
|
|
141
|
-
- 사용: `<sd-checkbox-group [(value)]="selected"><sd-checkbox-group-item [value]="'a'">A</sd-checkbox-group-item>...</sd-checkbox-group>`.
|
|
93
|
+
### SdCheckboxGroup<T> / SdCheckboxGroupItem<T>
|
|
94
|
+
여러 항목 다중 선택 그룹.
|
|
95
|
+
- `SdCheckboxGroup`: `value: model<T[]>`(선택된 값 배열), `disabled: boolean`.
|
|
96
|
+
- `SdCheckboxGroupItem`: `value: input.required<T>`(이 항목 값), `inline: boolean`.
|
|
142
97
|
|
|
143
98
|
## 셀렉트·드롭다운
|
|
144
99
|
|
|
145
|
-
### SdSelect<M
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- `
|
|
150
|
-
- `
|
|
151
|
-
- `
|
|
152
|
-
- `
|
|
153
|
-
- `items: T[]` + `getChildrenFn: (item) => T[]|undefined` — 데이터 기반 항목(트리 가능). `trackByFn: (item, index) => unknown`.
|
|
154
|
-
- `hideSelectAll: boolean` — multi 의 전체선택/해제 바 숨김.
|
|
155
|
-
- `multiSelectionDisplayDirection: "vertical"` — multi 선택 표시를 세로 나열.
|
|
156
|
-
- `disabled` / `inline` / `inset` / `size` / `contentClass` / `contentStyle` — 공통/스타일.
|
|
100
|
+
### SdSelect<T, M> — `sd-select`
|
|
101
|
+
드롭다운 선택. 직속 `<sd-select-item>` 들 또는 `[items]`+`[itemOf]` 템플릿으로 옵션 구성.
|
|
102
|
+
- `selectMode: M`("single"|"multi", 기본 single) — 선택 모드.
|
|
103
|
+
- `value: model<단일|배열>` — 선택 값(들).
|
|
104
|
+
- `items: input<T[]>` + `trackByFn`/`getChildrenFn` — 데이터 기반 옵션(트리 지원).
|
|
105
|
+
- `placeholder: string`, `required`/`disabled`/`inline`/`inset: boolean`, `size`.
|
|
106
|
+
- `hideSelectAll: boolean` — multi 모드 전체선택 숨김.
|
|
107
|
+
- `multiSelectionDisplayDirection: "vertical"` — 다중 선택 표시를 세로로.
|
|
157
108
|
- `dropdownOpen: model<boolean>` — 드롭다운 열림 상태.
|
|
158
|
-
-
|
|
159
|
-
- `SdSelectItem.value: input<T>` — 항목 값. `disabled` / `hidden` 으로 개별 제어. 클릭 시 부모 select 토글(single 은 닫힘).
|
|
160
|
-
- `SdSelectButton` (`sd-select-button`) — 드롭다운 우측에 끼우는 액션 버튼(검색/편집 등). `<sd-select-button>` 으로 투영.
|
|
161
|
-
- 사용: `<sd-select [(value)]="data().state" [required]="true"><sd-select-item [value]="'작성'">작성</sd-select-item></sd-select>`.
|
|
162
|
-
|
|
163
|
-
### SdDropdown / SdDropdownPopup (`sd-dropdown` / `sd-dropdown-popup`)
|
|
164
|
-
|
|
165
|
-
범용 드롭다운 토글 + 팝업. 위치 자동 배치, 모바일에선 하단 시트, 외부 클릭/blur/ESC 로 닫힘.
|
|
166
|
-
|
|
167
|
-
- `SdDropdown.open: model<boolean>` — 열림 상태.
|
|
168
|
-
- `SdDropdown.disabled: boolean` — true 면 토글 막음.
|
|
169
|
-
- 본문 콘텐츠와 `<sd-dropdown-popup>` 을 자식으로 둠. `sd-select`·`sd-topbar-menu`·`sd-theme-selector` 등이 내부에서 사용.
|
|
170
|
-
|
|
171
|
-
## 폼·접기·탭·리스트·페이지네이션
|
|
172
|
-
|
|
173
|
-
### SdForm (`sd-form`)
|
|
174
|
-
|
|
175
|
-
native form 래퍼. Enter/submit 버튼으로 submit, 검증 실패 시 네이티브 메시지·포커싱.
|
|
109
|
+
- `contentClass`/`contentStyle: string`.
|
|
176
110
|
|
|
177
|
-
|
|
178
|
-
- `formInvalid: output()` — 검증 실패 시.
|
|
179
|
-
- `requestSubmit(): void` — 코드에서 submit 트리거. `formEl` getter 로 native form 접근.
|
|
180
|
-
- `sd-crud-list`/`sd-crud-detail` 는 내부에 form 을 보유하므로 별도 래핑 불필요.
|
|
111
|
+
`SelectModeValue<T>` — `{ multi: T[]; single: T }`(선택 모드별 값 타입).
|
|
181
112
|
|
|
182
|
-
###
|
|
113
|
+
### SdSelectItem<T> — `sd-select-item`
|
|
114
|
+
- `value: input<T>` — 항목 값.
|
|
115
|
+
- `disabled`/`hidden: boolean` — 비활성/숨김.
|
|
183
116
|
|
|
184
|
-
|
|
185
|
-
|
|
117
|
+
### SdSelectButton — `sd-select-button`
|
|
118
|
+
셀렉트 드롭다운 안에 끼우는 액션 버튼(리플 내장). 입력 없음.
|
|
186
119
|
|
|
187
|
-
###
|
|
120
|
+
### SdDropdown / SdDropdownPopup — `sd-dropdown` / `sd-dropdown-popup`
|
|
121
|
+
범용 드롭다운. `SdDropdown`: `open: model<boolean>`, `disabled: boolean`. 자식으로 트리거 컨텐츠 + `<sd-dropdown-popup>`(팝업 본문) 배치.
|
|
188
122
|
|
|
189
|
-
|
|
190
|
-
- `SdTabItem.value: input<any>` — 이 탭의 값. 클릭 시 부모 `value` 로 set, 일치하면 선택 표시.
|
|
191
|
-
- 사용: `<sd-tab [(value)]="tab"><sd-tab-item [value]="'a'">A</sd-tab-item></sd-tab>`.
|
|
123
|
+
## 폼·레이아웃 컨트롤
|
|
192
124
|
|
|
193
|
-
###
|
|
125
|
+
### SdForm — `sd-form`
|
|
126
|
+
Enter 로 submit 처리. `formSubmit: output<SubmitEvent>`, `formInvalid: output`. (`sd-crud-*` 는 내부에 폼 보유, 별도 래핑 불필요.)
|
|
194
127
|
|
|
195
|
-
|
|
128
|
+
### SdCollapse / SdCollapseIcon
|
|
129
|
+
- `SdCollapse`(`sd-collapse`): `open: boolean` — 펼침. 자식을 높이 애니메이션으로 접기/펼치기.
|
|
130
|
+
- `SdCollapseIcon`(`sd-collapse-icon`): `icon`(기본 chevron), `open: boolean`, `openRotate: number`(열림 시 회전각, 기본 90).
|
|
196
131
|
|
|
197
|
-
|
|
198
|
-
- `
|
|
199
|
-
- `
|
|
200
|
-
- `SdListItem.selected: boolean` — 선택 강조.
|
|
201
|
-
- `SdListItem.selectedIcon: string` — leaf 항목에 선택 아이콘 표시.
|
|
202
|
-
- `SdListItem.readonly: boolean` — 클릭 토글 비활성.
|
|
203
|
-
- `SdListItem.contentStyle` / `contentClass` — 콘텐츠 행 스타일.
|
|
204
|
-
- `#toolTpl` 템플릿으로 행 우측 도구 배치. 사이드바/탑바 메뉴가 이 위에 구성됨.
|
|
132
|
+
### SdTab / SdTabItem
|
|
133
|
+
- `SdTab`(`sd-tab`): `value: model<any>` — 선택된 탭 값.
|
|
134
|
+
- `SdTabItem`(`sd-tab-item`): `value: input<any>` — 이 탭 값. 클릭 시 부모 `value` 갱신.
|
|
205
135
|
|
|
206
|
-
###
|
|
136
|
+
### SdList / SdListItem
|
|
137
|
+
- `SdList`(`sd-list`): `inset: boolean` — 테두리 제거(중첩 리스트).
|
|
138
|
+
- `SdListItem`(`sd-list-item`): `layout: "accordion"|"flat"`(기본 accordion, 자식 펼침 방식), `open: model<boolean>`, `selected: boolean`, `selectedIcon: string`, `readonly: boolean`, `contentStyle`/`contentClass: string`.
|
|
207
139
|
|
|
208
|
-
|
|
140
|
+
### SdGap — `sd-gap`
|
|
141
|
+
빈 간격. `height`/`width: "xxs"|"xs"|"sm"|"default"|"lg"|"xl"|"xxl"`(토큰 간격), `heightPx`/`widthPx`/`widthEm: number`(절대 간격).
|
|
209
142
|
|
|
210
|
-
|
|
211
|
-
- `
|
|
212
|
-
- `
|
|
213
|
-
-
|
|
143
|
+
### SdPagination — `sd-pagination`
|
|
144
|
+
- `currentPage: model<number>` — 현재 페이지(0 기반).
|
|
145
|
+
- `totalPageCount: number` — 총 페이지 수.
|
|
146
|
+
- `visiblePageCount: number` — 한 번에 보이는 페이지 번호 수(기본 10).
|