@simplysm/sd-claude 14.0.97 → 14.0.99
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
|
@@ -49,20 +49,20 @@ ORM 호출, 파일 변환, 비즈니스 로직 등은 위 두 경우에 해당
|
|
|
49
49
|
|
|
50
50
|
## 패키지 인덱스
|
|
51
51
|
|
|
52
|
-
- **angular** — Angular
|
|
53
|
-
- **capacitor-plugin-auto-update** — Android APK 자동 업데이트
|
|
54
|
-
- **capacitor-plugin-file-system** —
|
|
55
|
-
- **capacitor-plugin-intent** — Android 인텐트
|
|
56
|
-
- **capacitor-plugin-usb-storage** —
|
|
57
|
-
- **core-browser** — 브라우저 전용
|
|
58
|
-
- **core-common** — 브라우저·Node 공용 기반 유틸 — 날짜/시간 값 타입(DateTime/DateOnly/Time/Uuid), 에러
|
|
59
|
-
- **core-node** — Node 전용
|
|
60
|
-
- **excel** — xlsx
|
|
61
|
-
- **lint** — 심플리즘 ESLint
|
|
62
|
-
- **orm-common** — Dialect(MySQL/MSSQL/PostgreSQL) 독립 ORM 코어 — Table/View/Procedure
|
|
52
|
+
- **angular** — Angular 클라이언트 앱 프레임워크 — provideSdAngular 부트스트랩, UI 컨트롤·사이드바/탑바 레이아웃, CRUD·시트·공유데이터·칸반·시각화 컴포넌트, 모달·토스트·busy·인쇄 오버레이, 라우팅·권한·설정 인프라를 다룰 때. 자세히: [apis/angular/README.md](./apis/angular/README.md)
|
|
53
|
+
- **capacitor-plugin-auto-update** — Android APK 자동 업데이트 — 앱 부팅 시 서버(ServiceClient) 또는 외부 저장소 폴더에서 최신 APK 를 받아 설치(AutoUpdate.run/runByExternalStorage)하거나, 설치 권한·APK 설치·앱 버전 조회를 저수준(ApkInstaller)으로 다룰 때. 자세히: [apis/capacitor-plugin-auto-update/README.md](./apis/capacitor-plugin-auto-update/README.md)
|
|
54
|
+
- **capacitor-plugin-file-system** — 앱/웹에서 파일·디렉토리 읽기·쓰기·삭제, 표준 저장소 경로·파일 URI 조회, 파일 접근 권한 확인·요청이 필요할 때 (FileSystem 정적 클래스 진입점, Android 네이티브 ↔ 웹 IndexedDB 에뮬레이션 동일 API). 자세히: [apis/capacitor-plugin-file-system/README.md](./apis/capacitor-plugin-file-system/README.md)
|
|
55
|
+
- **capacitor-plugin-intent** — Android 인텐트 연동(브로드캐스트 송수신·실행 인텐트 조회·newIntent 리스닝·startActivityForResult)을 정적 클래스 Intent 로 수행하는 Capacitor 플러그인. 산업용 디바이스(바코드 스캐너·PDA) 연동용, 웹은 무동작 스텁. 자세히: [apis/capacitor-plugin-intent/README.md](./apis/capacitor-plugin-intent/README.md)
|
|
56
|
+
- **capacitor-plugin-usb-storage** — USB Mass Storage 장치 열거·권한 확인/요청·디렉토리 나열·파일 읽기를 다루는 Capacitor 플러그인(UsbStorage 정적 진입점, UsbDeviceFilter 로 장치 지정). 자세히: [apis/capacitor-plugin-usb-storage/README.md](./apis/capacitor-plugin-usb-storage/README.md)
|
|
57
|
+
- **core-browser** — 브라우저 전용 유틸 — DOM 요소 확장(조회·순회·위치·가시성·클립보드·경계 측정), IndexedDB 키-값 영속화 및 가상 파일트리, Blob 다운로드·URL 바이너리 수신·파일 선택 대화상자가 필요할 때. 자세히: [apis/core-browser/README.md](./apis/core-browser/README.md)
|
|
58
|
+
- **core-common** — 브라우저·Node 공용 기반 유틸 — 날짜/시간 값 타입(DateTime/DateOnly/Time/Uuid), 에러 클래스, 배열/Set/Map 프로토타입 확장, 객체 깊은 복사·비교·병합(obj), 직렬화(json/xml/bytes/transfer), 비동기 큐·이벤트·대기·자동만료 Map, 문자열/숫자/경로 유틸, 로거·환경변수·원시타입 매핑이 필요할 때. 자세히: [apis/core-common/README.md](./apis/core-common/README.md)
|
|
59
|
+
- **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)
|
|
60
|
+
- **excel** — 엑셀(.xlsx) 워크북 읽기/쓰기·셀 값/수식·스타일·조건부 서식·이미지·뷰(ExcelWorkbook/ExcelWorksheet/ExcelCell), Zod 스키마 기반 레코드 ↔ 엑셀 다운로드/업로드(ExcelWrapper), 주소·날짜·숫자형식 변환(ExcelUtils)을 다룰 때. 자세히: [apis/excel/README.md](./apis/excel/README.md)
|
|
61
|
+
- **lint** — 심플리즘 ESLint 자산 — 커스텀 규칙 9종 플러그인(`@simplysm/lint/eslint-plugin`)과 flat config 프리셋(`@simplysm/lint/eslint-recommended`)을 프로젝트 eslint.config 에 적용하거나, 개별 규칙의 검사 대상·메시지·autofix·옵션을 파악할 때. 자세히: [apis/lint/README.md](./apis/lint/README.md)
|
|
62
|
+
- **orm-common** — Dialect(MySQL/MSSQL/PostgreSQL) 독립 ORM 코어 — 스키마 빌더(Table/View/Procedure/Column/Index/Relation), DbContext(연결·트랜잭션·DDL·마이그레이션), Queryable 체이닝/Executable/검색, expr 표현식 빌더, QueryDef·Expr AST·dialect QueryBuilder·결과 파싱 타입을 다룰 때. 자세히: [apis/orm-common/README.md](./apis/orm-common/README.md)
|
|
63
63
|
- **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)
|
|
64
|
-
- **sd-cli** — sd.config.ts 설정 타입(SdConfigFn·타겟별
|
|
65
|
-
- **service-client** — WebSocket 으로 서비스 서버에 접속해 서비스 RPC 호출·서버 푸시 이벤트 구독/발행·파일 업다운로드·서버측 ORM 원격 실행을 수행하는 클라이언트(브라우저/Node 양용)가 필요할 때. 자세히: [apis/service-client/README.md](./apis/service-client/README.md)
|
|
66
|
-
- **service-common** — 서버·클라이언트 공유 서비스 통신 계약 —
|
|
67
|
-
- **service-server** — Fastify 기반 RPC 서비스
|
|
68
|
-
- **storage** — FTP/FTPS/SFTP
|
|
64
|
+
- **sd-cli** — sd.config.ts 설정 타입(SdConfigFn·타겟별 빌드/배포/Capacitor/Electron/PWA/SSG), 패키지 단위 TS/Angular AOT 증분 컴파일러 SdTsCompiler, Vitest 전용 Angular Vite 플러그인 sdAngularPlugin 을 다룰 때. 자세히: [apis/sd-cli/README.md](./apis/sd-cli/README.md)
|
|
65
|
+
- **service-client** — WebSocket 으로 서비스 서버에 접속해 서비스 RPC 호출·서버 푸시 이벤트 구독/발행·파일 업다운로드·서버측 ORM 원격 트랜잭션 실행을 수행하는 클라이언트(브라우저/Node 양용)가 필요할 때. 자세히: [apis/service-client/README.md](./apis/service-client/README.md)
|
|
66
|
+
- **service-common** — 서버·클라이언트 공유 서비스 통신 계약 — 실시간 이벤트 정의(defineEvent), 내장 RPC 서비스 시그니처(OrmService·AutoUpdateService), 앱 메뉴·권한·모듈 구조(AppStructure), WebSocket 바이너리 프로토콜·메시지 타입. 자세히: [apis/service-common/README.md](./apis/service-common/README.md)
|
|
67
|
+
- **service-server** — Fastify 기반 RPC 서비스 서버를 띄우거나(부팅·옵션 구성, JWT 인증, 서버측 이벤트 브로드캐스트, 내장 ORM/자동업데이트 서비스, 저수준 전송 핸들러·V1 레거시) defineService/auth 로 서비스 메서드를 작성할 때. 자세히: [apis/service-server/README.md](./apis/service-server/README.md)
|
|
68
|
+
- **storage** — Node 전용 FTP/FTPS/SFTP 스토리지 클라이언트 — StorageFactory.connect 콜백 패턴으로 연결을 자동 관리하며 파일·디렉토리 업로드·다운로드·조회·삭제할 때. 자세히: [apis/storage/README.md](./apis/storage/README.md)
|
|
@@ -1,216 +1,144 @@
|
|
|
1
1
|
# @simplysm/angular
|
|
2
2
|
|
|
3
|
-
Angular
|
|
3
|
+
Angular 기반 클라이언트 앱 프레임워크 — 부트스트랩 프로바이더, UI 컨트롤·레이아웃, CRUD·시트·공유데이터·칸반·시각화 컴포넌트, 모달·토스트·busy 오버레이, 라우팅·권한·설정 인프라를 제공. `import "@simplysm/core-browser"` 를 side-effect 로 로드하며, 모든 컴포넌트는 `standalone: true` + `OnPush` + `ViewEncapsulation.None`, selector 는 `sd-` prefix.
|
|
4
4
|
|
|
5
5
|
## 사용 트리거 인덱스
|
|
6
6
|
|
|
7
|
-
- **provideSdAngular
|
|
8
|
-
- **
|
|
9
|
-
-
|
|
10
|
-
- **
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
- **SdPermissionTable / SdStatePreset** — 권한 트리 편집표, 화면 상태 프리셋 저장 컨트롤. `자세히: [features.md](./features.md)`.
|
|
21
|
-
- **테마 셀렉터·주소검색·tiptap 에디터·label·note·progress·calendar·barcode·echarts** — 부가 기능 컴포넌트. `자세히: [features.md](./features.md)`.
|
|
22
|
-
- **kanban 보드** — 드래그 가능 칸반. `자세히: [kanban.md](./kanban.md)`.
|
|
23
|
-
|
|
24
|
-
## 부트스트랩
|
|
25
|
-
|
|
26
|
-
### provideSdAngular
|
|
7
|
+
- **provideSdAngular** — 앱 부트스트랩 시 1회. 테마 영속화·전역 에러 핸들러·zoneless·SW 업데이트 폴링·라우팅 busy 추적을 일괄 설정. (이 README 의 `앱 부트스트랩` 참조)
|
|
8
|
+
- **UI 컨트롤** (`sd-button`·`sd-textfield`·`sd-select`·`sd-checkbox`·`sd-tab`·`sd-list`·`sd-form`·`sd-dropdown` 등) — 폼·입력·버튼·선택 화면을 구성할 때. 자세히: [controls.md](./controls.md)
|
|
9
|
+
- **시트** (`sd-sheet`·`sd-sheet-column`·시트 설정 모달·시트 타입) — 다건 목록·편집 그리드. 자세히: [sheet.md](./sheet.md)
|
|
10
|
+
- **CRUD 골격** (`sd-crud-list`·`sd-crud-detail`·`sd-base-container`·`SdStatePreset`·`SdPermissionTable`) — 목록·단건 편집 화면 표준 셸, 상태 프리셋, 권한 테이블. 자세히: [crud.md](./crud.md)
|
|
11
|
+
- **오버레이** (`SdModalProvider`·`SdToastProvider`·`SdBusyProvider`·`SdPrintProvider`·`SdFileDialogProvider`·`SdModal`·`SdPromptModal`·`SdConfirmModal`) — 모달 띄우기·토스트·busy·프린트·파일 다이얼로그. 자세히: [overlay.md](./overlay.md)
|
|
12
|
+
- **공유 마스터 데이터** (`SdSharedDataProvider`·`sd-shared-data-select*`·`use*Manager`·`matchesSearchText`) — 마스터 데이터 공유·선택 컨트롤·선택/정렬/펼침 매니저. 자세히: [shared-data.md](./shared-data.md)
|
|
13
|
+
- **라우팅·앱구조·권한** (`SdRouterLink`·`injectViewTypeSignal`·`injectPermsSignal`·`SdAppStructureProvider`·`injectViewTitleSignal`·`setupCanDeactivate`·`getMenuRouterLinkOption`) — 메뉴·권한·라우팅 좌표·이탈 가드. 자세히: [routing-appstructure.md](./routing-appstructure.md)
|
|
14
|
+
- **디렉티브·이펙트** (`SdEvents`·`SdCommandDirective`·`SdResizeDirective`·`SdIntersectionDirective`·`SdRipple`·`SdShowEffect`·`SdInvalid`·`SdTypedTemplate`·`SdItemOfTemplate`) — DOM 이벤트 옵션·단축키·리사이즈·리플·검증·타입 템플릿. 자세히: [directives.md](./directives.md)
|
|
15
|
+
- **레이아웃** (`sd-sidebar*`·`sd-topbar*`) — 사이드바·탑바 셸. 자세히: [layout.md](./layout.md)
|
|
16
|
+
- **칸반** (`sd-kanban-board`·`sd-kanban-lane`·`sd-kanban`) — 드래그앤드롭 칸반 보드. 자세히: [kanban.md](./kanban.md)
|
|
17
|
+
- **features** (`SdThemeProvider`·`SdThemeSelector`·`SdTiptapEditor`·`SdAddressSearchModal`·`sd-label`·`sd-note`·`sd-progress`·`sd-calendar`·`sd-barcode`·`sd-echarts`) — 테마·에디터·주소검색·시각요소. 자세히: [features.md](./features.md)
|
|
18
|
+
- **설정·로그·서비스 인프라** (`SdLocalStorageProvider`·`SdSystemConfigProvider`·`SdSystemLogProvider`·`SdServiceClientFactoryProvider`·`injectSdSystemConfigResource`·`SdAngularConfigProvider`) — 이 README 의 `설정·로그·서비스 인프라` 인라인 섹션.
|
|
19
|
+
- **코어 유틸** (`mark`·`FormatPipe`·`setSafeStyle`·`setupBgTheme`·`setupModelHook`·타입 헬퍼) — 이 README 의 `코어 유틸` 인라인 섹션.
|
|
27
20
|
|
|
28
|
-
|
|
29
|
-
provideSdAngular(opt: { clientName: string }): EnvironmentProviders
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
- `opt.clientName` — 클라이언트 식별자. `SdAngularConfigProvider.clientName` 으로 보관되며 localStorage 키 접두사·서비스 클라이언트 이름으로 쓰임. 앱마다 고유 문자열.
|
|
21
|
+
## 앱 부트스트랩
|
|
33
22
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
SSR(프리렌더) 안전: 부트스트랩 경로의 브라우저 의존 동작(테마 localStorage 복원, window 에러 리스너, SW 업데이트 점검, busy 오버레이, 에러 오버레이, `setupBgTheme`/`setupRipple`, core-browser prototype 확장)은 서버 플랫폼에서 무동작 — `prerender`(SSG) 클라이언트에서 그대로 사용 가능. 그 외 컴포넌트의 SSR-safe 여부는 개별 확인 필요.
|
|
23
|
+
### `provideSdAngular`
|
|
37
24
|
|
|
38
25
|
```ts
|
|
39
|
-
|
|
40
|
-
providers: [provideRouter(routes), provideSdAngular({ clientName: "my-app" })],
|
|
41
|
-
};
|
|
26
|
+
function provideSdAngular(opt: { clientName: string }): EnvironmentProviders
|
|
42
27
|
```
|
|
43
28
|
|
|
44
|
-
|
|
29
|
+
- 부트스트랩 `providers` 에 1회 추가. `opt.clientName` — `SdAngularConfigProvider.clientName` 으로 설정되며 `SdLocalStorageProvider` 가 키 네임스페이스(`${clientName}.${key}`)로 사용.
|
|
30
|
+
- 설정하는 것: 테마 dark/fontSize 의 `SdLocalStorageProvider` 영속화(브라우저 전용), 전역 `window` error/unhandledrejection → `ErrorHandler` 라우팅, `SdAngularConfigProvider`, `SdOptionEventPlugin`(`EVENT_MANAGER_PLUGINS` multi), `SdGlobalErrorHandlerPlugin`(`ErrorHandler`), `provideZonelessChangeDetection()`, 서비스워커 업데이트 폴러(지수 백오프 5분→60분, 갱신 시 새로고침 확인), 라우팅 navigation busy 추적(`SdBusyProvider.globalBusyCount`).
|
|
45
31
|
|
|
46
32
|
```ts
|
|
47
|
-
|
|
33
|
+
bootstrapApplication(AppRoot, {
|
|
34
|
+
providers: [provideSdAngular({ clientName: "admin" }), /* ... */],
|
|
35
|
+
});
|
|
48
36
|
```
|
|
49
37
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
## 테마·배경
|
|
38
|
+
## 코어 유틸
|
|
53
39
|
|
|
54
|
-
###
|
|
40
|
+
### `mark`
|
|
55
41
|
|
|
56
42
|
```ts
|
|
57
|
-
|
|
58
|
-
dark: WritableSignal<boolean>;
|
|
59
|
-
fontSizePresets: readonly number[]; // [12,14,16,20,24,28]
|
|
60
|
-
fontSize: WritableSignal<number>; // 기본 12
|
|
61
|
-
increaseFontSize(): void;
|
|
62
|
-
decreaseFontSize(): void;
|
|
63
|
-
}
|
|
43
|
+
function mark(sig: WritableSignal<any>): void
|
|
64
44
|
```
|
|
65
45
|
|
|
66
|
-
-
|
|
67
|
-
- `fontSize` — html 루트 `font-size(px)` 에 반영(rem 스케일 전체 변동). presets 안에서만 단계 이동 권장.
|
|
68
|
-
- `increaseFontSize`/`decreaseFontSize` — presets 기준 다음/이전 단계로 이동. 경계면 무동작.
|
|
46
|
+
- 시그널 값을 얕은 복사(배열이면 `[...v]`, 객체면 `{ ...v }`)로 교체해 **새 참조**로 만들어 변경 알림만 발행. 값 자체는 동일. effect 강제 재발화·객체 시그널 내부 필드 변경 통지에 사용.
|
|
69
47
|
|
|
70
48
|
```ts
|
|
71
|
-
|
|
49
|
+
<sd-textfield [(value)]="filter().name" (valueChange)="mark(filter)" />
|
|
50
|
+
doRefresh(): void { mark(this.lastFilter); }
|
|
72
51
|
```
|
|
73
52
|
|
|
74
|
-
###
|
|
53
|
+
### `FormatPipe`
|
|
75
54
|
|
|
76
|
-
|
|
77
|
-
setupBgTheme(options?: {
|
|
78
|
-
theme?: "primary"|"secondary"|"info"|"success"|"warning"|"danger"|"gray"|"blue-gray";
|
|
79
|
-
lightness?: "lightest" | "lighter";
|
|
80
|
-
}): void
|
|
81
|
-
```
|
|
55
|
+
standalone pipe, `name: "format"`. `transform(value: string | DateTime | DateOnly | undefined, format: string): string`.
|
|
82
56
|
|
|
83
|
-
- `
|
|
84
|
-
- `
|
|
57
|
+
- `value == null` → `""`.
|
|
58
|
+
- `DateTime`/`DateOnly` → `value.toFormatString(format)`.
|
|
59
|
+
- `string` → `format` 을 `|` 로 분리한 마스크 중 `X` 개수가 `value.length` 와 같은 첫 마스크 사용. `X` 는 좌→우로 값 문자로 치환, 비-`X` 문자는 리터럴 삽입. 일치 마스크 없으면 원본 반환. (예: `"XXX-XXXX"` 가 7자 문자열을 포맷)
|
|
85
60
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
## 설정·로그·인프라
|
|
89
|
-
|
|
90
|
-
### SdSystemLogProvider
|
|
61
|
+
### `setSafeStyle`
|
|
91
62
|
|
|
92
63
|
```ts
|
|
93
|
-
|
|
94
|
-
writeFn?: (severity: "error" | "warn" | "log", ...data: any[]) => Promise<void> | void;
|
|
95
|
-
writeAsync(severity: "error" | "warn" | "log", ...data: any[]): Promise<void>;
|
|
96
|
-
}
|
|
64
|
+
function setSafeStyle(renderer: Renderer2, el: HTMLElement, style: Partial<CSSStyleDeclaration>): void
|
|
97
65
|
```
|
|
98
66
|
|
|
99
|
-
- `
|
|
100
|
-
- `writeAsync(severity, ...data)` — 콘솔(`logger[severity]`) 출력 후 `writeFn` 호출. `writeFn` 이 throw 해도 로깅으로 흡수. 전역 에러 핸들러가 내부적으로 사용.
|
|
67
|
+
- `style` 의 각 키를 `renderer.setStyle` 로 적용. 동적 스타일을 Renderer2 경유로 적용할 때.
|
|
101
68
|
|
|
102
|
-
###
|
|
69
|
+
### `setupBgTheme`
|
|
103
70
|
|
|
104
71
|
```ts
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
72
|
+
function setupBgTheme(options?: {
|
|
73
|
+
theme?: "primary" | "secondary" | "info" | "success" | "warning" | "danger" | "gray" | "blue-gray";
|
|
74
|
+
lightness?: "lightest" | "lighter"; // 기본 "lightest"
|
|
75
|
+
}): void
|
|
110
76
|
```
|
|
111
77
|
|
|
112
|
-
-
|
|
113
|
-
- 제네릭 `T` 로 키별 값 타입을 지정해 타입 안전하게 사용.
|
|
78
|
+
- 주입 컨텍스트에서 호출. `effect` 안에서 body `--background-color` 를 `var(--theme-{theme}-{lightness})` 로 설정, 정리 시 복원. SSR no-op. 화면별 배경 테마 색 지정에.
|
|
114
79
|
|
|
115
|
-
###
|
|
80
|
+
### `setupModelHook`
|
|
116
81
|
|
|
117
82
|
```ts
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
getAsync(key: keyof T & string): Promise<unknown>;
|
|
122
|
-
}
|
|
83
|
+
function setupModelHook<T, S extends WritableSignal<T>>(
|
|
84
|
+
model: S, canFn: Signal<(item: T) => boolean | Promise<boolean>>,
|
|
85
|
+
): void
|
|
123
86
|
```
|
|
124
87
|
|
|
125
|
-
- `
|
|
126
|
-
- 시트/상태프리셋/모달 위치 등 영속 UI 설정 저장의 백엔드. 보통 `injectSdSystemConfigResource` 를 통해 사용.
|
|
88
|
+
- model 시그널의 `set`/`update` 를 래핑해 쓰기 전에 `canFn()(value)` 가드 통과를 강제. `false` 면 쓰기 스킵, `true` 면 진행, Promise 면 resolve 값이 명시적 `false` 일 때만 차단. reject 는 `ErrorHandler` 로 라우팅. 주입 컨텍스트 필요. `SdCheckbox`/`SdSwitch`/`SdSharedDataSelectList` 의 `canChangeFn` 내부 기반.
|
|
127
89
|
|
|
128
|
-
###
|
|
90
|
+
### 타입 헬퍼 (`directive-input-signals.ts`)
|
|
129
91
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
- `options.key` — 설정 키 시그널. key 가 null 이면 로드/저장 안 함. 저장 키는 `<호스트엘리먼트태그>.<key>` 로 구성(컴포넌트 종류별 분리).
|
|
138
|
-
- `value`/`isLoading`/`status` — Angular `resource` 위임. `set`/`update` 는 즉시 value 갱신 후 microtask 로 `SdSystemConfigProvider.setAsync` 영속화(에러는 `ErrorHandler`).
|
|
139
|
-
- 주입 컨텍스트에서 호출(`ElementRef`/`SdSystemConfigProvider`/`ErrorHandler` inject). 시트·상태프리셋이 내부 사용.
|
|
92
|
+
- `DirectiveInputSignals<T>` — 컴포넌트/디렉티브 `T` 의 모든 `InputSignal<V>` 프로퍼티를 `{ prop: V }` 평면 객체로 추출(비-input 프로퍼티 제거), `undefined` 포함 필드는 optional 화. 모달/프린트 `inputs` 타입의 기반.
|
|
93
|
+
- `UndefToOptional<T>` — 값 타입에 `undefined` 가 포함된 프로퍼티를 optional(`?`)로 바꾸고 값에서 `undefined` 제거.
|
|
94
|
+
- `WithOptional<T, K extends keyof T>` = `Omit<T, K> & Partial<Pick<T, K>>` — 키 `K` 들을 optional 로.
|
|
95
|
+
- `SelectModalOutputResult<TKey = any>` — `{ selectedKeys: TKey[] }`. 선택 모달의 close 페이로드 표준 형태.
|
|
140
96
|
|
|
141
|
-
|
|
97
|
+
## 설정·로그·서비스 인프라
|
|
142
98
|
|
|
143
|
-
|
|
144
|
-
@Injectable({ providedIn: "root" }) class SdServiceClientFactoryProvider {
|
|
145
|
-
connectAsync(key: string, options?: Partial<ServiceConnectionOptions>): Promise<void>;
|
|
146
|
-
closeAsync(key: string): Promise<void>;
|
|
147
|
-
get(key: string): ServiceClient;
|
|
148
|
-
}
|
|
149
|
-
```
|
|
99
|
+
### `SdAngularConfigProvider`
|
|
150
100
|
|
|
151
|
-
|
|
152
|
-
- `closeAsync(key)` — 연결 종료 후 해당 key 를 종료 상태로 표시(이후 재연결 불가). 미연결 key 면 throw.
|
|
153
|
-
- `get(key)` — 연결된 클라이언트 반환. 미연결·종료 key 면 throw(silent 반환 안 함). 앱 서비스/이벤트 호출의 기반(공유데이터·서버 함수 provider 가 내부 사용).
|
|
101
|
+
`@Injectable({ providedIn: "root" })`. 필드 `clientName: string` — `provideSdAngular` 가 주입한 클라이언트 이름.
|
|
154
102
|
|
|
155
|
-
###
|
|
103
|
+
### `SdLocalStorageProvider<T>`
|
|
156
104
|
|
|
157
|
-
|
|
158
|
-
@Injectable({ providedIn: "root" }) class SdFileDialogProvider {
|
|
159
|
-
showAsync(multiple?: false, accept?: string): Promise<File | undefined>;
|
|
160
|
-
showAsync(multiple: true, accept?: string): Promise<File[] | undefined>;
|
|
161
|
-
}
|
|
162
|
-
```
|
|
105
|
+
`@Injectable({ providedIn: "root" })`. 키는 `${clientName}.${key}` 로 네임스페이스. SSR 가드(`set`/`remove` no-op, `get` → `undefined`).
|
|
163
106
|
|
|
164
|
-
- `
|
|
165
|
-
- `
|
|
107
|
+
- `set<K extends keyof T & string>(key: K, value: T[K]): void` — JSON 직렬화 저장.
|
|
108
|
+
- `get<K extends keyof T & string>(key: K): T[K] | undefined` — JSON 파싱; 없거나 파싱 실패 시 `undefined`.
|
|
109
|
+
- `remove(key: keyof T & string): void`.
|
|
166
110
|
|
|
167
|
-
|
|
168
|
-
const file = await inject(SdFileDialogProvider).showAsync(false, ".xlsx");
|
|
169
|
-
```
|
|
111
|
+
### `SdSystemConfigProvider<T>`
|
|
170
112
|
|
|
171
|
-
|
|
113
|
+
`@Injectable({ providedIn: "root" })`. 원격 `fn` 미지정 시 `SdLocalStorageProvider` 위임.
|
|
172
114
|
|
|
173
|
-
|
|
115
|
+
- `fn?: { set(key, data): Promise<void>|void; get(key): PromiseLike<unknown> }` — 원격 저장소 연동 함수. 설정 시 로컬 대신 사용.
|
|
116
|
+
- `setAsync<K extends keyof T & string>(key: K, data: T[K] | undefined): Promise<void>` — `fn.set` 있으면 사용; 없으면 `data == null` 이면 로컬 remove, 아니면 저장.
|
|
117
|
+
- `getAsync(key: keyof T & string): Promise<...>` — `fn.get` 있으면 사용; 없으면 로컬 read.
|
|
174
118
|
|
|
175
|
-
###
|
|
119
|
+
### `injectSdSystemConfigResource<T>`
|
|
176
120
|
|
|
177
121
|
```ts
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}): { hasSelectable; isAllSelected; getSelectable(item); getCanChangeFn(item); select(item); deselect(item); toggle(item); toggleAll(); isSelected(item); }
|
|
122
|
+
function injectSdSystemConfigResource<T>(options: { key: Signal<string | undefined> }): {
|
|
123
|
+
value: Signal<T | undefined>; isLoading: Signal<boolean>; status: Signal<ResourceStatus>;
|
|
124
|
+
hasValue: () => boolean; reload: () => boolean;
|
|
125
|
+
set: (value: T | undefined) => void; update: (fn: (prev: T | undefined) => T | undefined) => void;
|
|
126
|
+
}
|
|
184
127
|
```
|
|
185
128
|
|
|
186
|
-
-
|
|
187
|
-
- `getItemSelectableFn` — 행별 선택 가능 여부. `true`=가능, `false`/undefined=불가, `string`=불가+사유(툴팁). `getSelectable` 이 이를 그대로 반환.
|
|
188
|
-
- 키 비교는 참조 동일 또는 `obj.equal` 로 깊은 비교. `toggleAll` 은 선택 가능 항목 기준 전체 토글.
|
|
129
|
+
- 주입 컨텍스트에서 호출. 호스트 엘리먼트 태그 + `key()` 를 합친 키(`${elTag}.${key}`)로 `SdSystemConfigProvider.getAsync` 를 로드하는 `resource` 반환. `set` 은 값을 동기 갱신 후 microtask 로 `setAsync` 영속화(키 `undefined` 면 스킵). 시트가 사용자별 컬럼 설정을 저장하는 데 사용.
|
|
189
130
|
|
|
190
|
-
###
|
|
131
|
+
### `SdSystemLogProvider`
|
|
191
132
|
|
|
192
|
-
|
|
193
|
-
useSortingManager(options: { sorts: WritableSignal<SortingDef[]> }): {
|
|
194
|
-
defMap: Signal<Map<string, { indexText?: string; desc: boolean }>>;
|
|
195
|
-
toggle(key: string, multiple: boolean): void;
|
|
196
|
-
sort<T>(items: T[]): T[];
|
|
197
|
-
}
|
|
198
|
-
// SortingDef = { key: string; desc: boolean }
|
|
199
|
-
```
|
|
133
|
+
`@Injectable({ providedIn: "root" })`.
|
|
200
134
|
|
|
201
|
-
- `
|
|
202
|
-
- `
|
|
135
|
+
- `writeFn?: (severity: "error" | "warn" | "log", ...data: any[]) => Promise<void> | void` — 외부 싱크(DB 등). 설정 시 `writeAsync` 가 추가로 호출. (클라이언트 시스템 로그 적재 컨벤션은 client-system-log.md)
|
|
136
|
+
- `writeAsync(severity: "error" | "warn" | "log", ...data: any[]): Promise<void>` — 내부 로거에 기록 후, `writeFn` 있으면 await(에러는 삼키고 로깅). `SdToastProvider.try` / `SdGlobalErrorHandlerPlugin` 가 에러를 여기에 적재.
|
|
203
137
|
|
|
204
|
-
###
|
|
138
|
+
### `SdServiceClientFactoryProvider`
|
|
205
139
|
|
|
206
|
-
|
|
207
|
-
useExpandingManager<T>(binding: {
|
|
208
|
-
items: Signal<T[]>; expandedItems: WritableSignal<T[]>;
|
|
209
|
-
getChildrenFn: Signal<((item: T, index: number) => T[] | undefined) | undefined>;
|
|
210
|
-
sort: (items: T[]) => T[];
|
|
211
|
-
}): { displayItems; hasExpandable; isAllExpanded; toggle(item); toggleAll(); isVisible(item); def(item); }
|
|
212
|
-
// ExpandItemDef<T> = { item: T; parentDef: ExpandItemDef<T> | undefined; hasChildren: boolean; depth: number }
|
|
213
|
-
```
|
|
140
|
+
`@Injectable({ providedIn: "root" })`. 키 기반 `ServiceClient` 풀 관리. (Provider 정의·서비스 호출 컨벤션은 client-service.md)
|
|
214
141
|
|
|
215
|
-
- `
|
|
216
|
-
- `
|
|
142
|
+
- `connectAsync(key: string, options?: Partial<ServiceConnectionOptions>): Promise<void>` — `location` 기반 기본 옵션(host/port/ssl)에 `options` 머지해 클라이언트 생성·연결, `key` 로 저장. 이미 닫혔거나 연결된 키면 throw. request/response-progress 이벤트를 progress 토스트로 자동 배선.
|
|
143
|
+
- `closeAsync(key: string): Promise<void>` — 닫고 맵에서 제거, 키를 닫힘으로 표시. 연결 안 된 키면 throw.
|
|
144
|
+
- `get(key: string): ServiceClient` — 연결된 클라이언트 반환. 닫힌 키/미연결 키면 throw.
|