@simplysm/sd-claude 14.0.46 → 14.0.48

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.
Files changed (127) hide show
  1. package/{claude/references/sd-simplysm14/sd-claude/usage.md → README.md} +2 -2
  2. package/claude/rules/sd-claude-rules.md +27 -9
  3. package/claude/rules/sd-options.md +11 -6
  4. package/claude/sd-subagent-start.sh +6 -0
  5. package/claude/settings.json +1 -12
  6. package/claude/skills/sd-check/SKILL.md +18 -9
  7. package/claude/skills/sd-claude-docs/SKILL.md +29 -58
  8. package/claude/skills/sd-claude-docs/references/package-claudemd.md +12 -0
  9. package/claude/skills/sd-claude-docs/references/package-doc-gen.md +22 -12
  10. package/claude/skills/sd-debug/SKILL.md +5 -3
  11. package/claude/skills/sd-deliverable/SKILL.md +0 -1
  12. package/claude/skills/sd-dev/SKILL.md +14 -9
  13. package/claude/skills/sd-doc-extract/SKILL.md +7 -9
  14. package/claude/skills/sd-doc-extract/_common.py +8 -1
  15. package/claude/skills/sd-doc-extract/_extract_docx.py +74 -34
  16. package/claude/skills/sd-doc-extract/_extract_pdf.py +12 -1
  17. package/claude/skills/sd-doc-extract/_extract_pptx.py +103 -23
  18. package/claude/skills/sd-doc-extract/_extract_xlsb.py +93 -4
  19. package/claude/skills/sd-doc-extract/_extract_xlsx.py +98 -36
  20. package/claude/skills/sd-doc-extract/extract.py +22 -3
  21. package/claude/skills/sd-inner-clarify/SKILL.md +78 -0
  22. package/claude/skills/sd-inner-debug/SKILL.md +1 -1
  23. package/claude/skills/sd-inner-review/SKILL.md +13 -0
  24. package/claude/skills/sd-plan/SKILL.md +50 -17
  25. package/claude/skills/sd-prompt/SKILL.md +180 -178
  26. package/claude/skills/sd-prompt/references/eval-runner.md +5 -31
  27. package/claude/skills/sd-prompt/references/sd-eval-env-template.md +23 -0
  28. package/claude/skills/sd-refactor/SKILL.md +2 -2
  29. package/claude/skills/sd-tdd/SKILL.md +46 -10
  30. package/claude/skills/sd-use/SKILL.md +84 -80
  31. package/claude/skills/sd-wbs/SKILL.md +85 -27
  32. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/assets.md +2 -3
  33. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/hooks.md +7 -6
  34. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/scripts.md +1 -9
  35. package/package.json +3 -2
  36. package/scripts/sync.mjs +4 -2
  37. package/claude/references/sd-simplysm14/angular/docs/bootstrap.md +0 -48
  38. package/claude/references/sd-simplysm14/angular/docs/directives.md +0 -236
  39. package/claude/references/sd-simplysm14/angular/docs/features.md +0 -379
  40. package/claude/references/sd-simplysm14/angular/docs/pipes.md +0 -32
  41. package/claude/references/sd-simplysm14/angular/docs/plugins.md +0 -37
  42. package/claude/references/sd-simplysm14/angular/docs/provider-types.md +0 -283
  43. package/claude/references/sd-simplysm14/angular/docs/providers.md +0 -370
  44. package/claude/references/sd-simplysm14/angular/docs/styling.md +0 -222
  45. package/claude/references/sd-simplysm14/angular/docs/type-utilities.md +0 -250
  46. package/claude/references/sd-simplysm14/angular/docs/ui-data.md +0 -275
  47. package/claude/references/sd-simplysm14/angular/docs/ui-form.md +0 -490
  48. package/claude/references/sd-simplysm14/angular/docs/ui-layout.md +0 -140
  49. package/claude/references/sd-simplysm14/angular/docs/ui-navigation.md +0 -241
  50. package/claude/references/sd-simplysm14/angular/docs/ui-overlay.md +0 -157
  51. package/claude/references/sd-simplysm14/angular/docs/ui-visual.md +0 -127
  52. package/claude/references/sd-simplysm14/angular/docs/utils.md +0 -295
  53. package/claude/references/sd-simplysm14/angular/usage.md +0 -489
  54. package/claude/references/sd-simplysm14/capacitor-plugin-auto-update/usage.md +0 -182
  55. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/file-operations.md +0 -154
  56. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/permissions.md +0 -84
  57. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/storage-paths.md +0 -107
  58. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/types.md +0 -83
  59. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/usage.md +0 -133
  60. package/claude/references/sd-simplysm14/capacitor-plugin-intent/usage.md +0 -203
  61. package/claude/references/sd-simplysm14/capacitor-plugin-usb-storage/usage.md +0 -258
  62. package/claude/references/sd-simplysm14/core-browser/usage.md +0 -306
  63. package/claude/references/sd-simplysm14/core-common/docs/errors.md +0 -82
  64. package/claude/references/sd-simplysm14/core-common/docs/extensions.md +0 -167
  65. package/claude/references/sd-simplysm14/core-common/docs/features.md +0 -136
  66. package/claude/references/sd-simplysm14/core-common/docs/types.md +0 -245
  67. package/claude/references/sd-simplysm14/core-common/docs/utils.md +0 -591
  68. package/claude/references/sd-simplysm14/core-common/usage.md +0 -255
  69. package/claude/references/sd-simplysm14/core-node/docs/child-process.md +0 -182
  70. package/claude/references/sd-simplysm14/core-node/docs/features.md +0 -214
  71. package/claude/references/sd-simplysm14/core-node/docs/file-system.md +0 -509
  72. package/claude/references/sd-simplysm14/core-node/docs/file-watching.md +0 -139
  73. package/claude/references/sd-simplysm14/core-node/docs/logging.md +0 -180
  74. package/claude/references/sd-simplysm14/core-node/docs/path.md +0 -176
  75. package/claude/references/sd-simplysm14/core-node/docs/utilities-cpx.md +0 -194
  76. package/claude/references/sd-simplysm14/core-node/docs/utilities-fsx.md +0 -469
  77. package/claude/references/sd-simplysm14/core-node/docs/utilities-pathx.md +0 -151
  78. package/claude/references/sd-simplysm14/core-node/docs/worker-threads.md +0 -334
  79. package/claude/references/sd-simplysm14/core-node/docs/worker.md +0 -205
  80. package/claude/references/sd-simplysm14/core-node/usage.md +0 -259
  81. package/claude/references/sd-simplysm14/excel/docs/core-classes.md +0 -443
  82. package/claude/references/sd-simplysm14/excel/docs/types.md +0 -455
  83. package/claude/references/sd-simplysm14/excel/docs/utilities.md +0 -194
  84. package/claude/references/sd-simplysm14/excel/docs/wrapper.md +0 -73
  85. package/claude/references/sd-simplysm14/excel/usage.md +0 -134
  86. package/claude/references/sd-simplysm14/lint/usage.md +0 -130
  87. package/claude/references/sd-simplysm14/orm-common/docs/core.md +0 -188
  88. package/claude/references/sd-simplysm14/orm-common/docs/expression.md +0 -190
  89. package/claude/references/sd-simplysm14/orm-common/docs/models.md +0 -17
  90. package/claude/references/sd-simplysm14/orm-common/docs/query-builder.md +0 -97
  91. package/claude/references/sd-simplysm14/orm-common/docs/queryable-executable.md +0 -250
  92. package/claude/references/sd-simplysm14/orm-common/docs/schema-builders.md +0 -364
  93. package/claude/references/sd-simplysm14/orm-common/docs/types.md +0 -522
  94. package/claude/references/sd-simplysm14/orm-common/usage.md +0 -229
  95. package/claude/references/sd-simplysm14/orm-node/docs/connections.md +0 -137
  96. package/claude/references/sd-simplysm14/orm-node/docs/core.md +0 -131
  97. package/claude/references/sd-simplysm14/orm-node/docs/types.md +0 -173
  98. package/claude/references/sd-simplysm14/orm-node/usage.md +0 -143
  99. package/claude/references/sd-simplysm14/sd-cli/usage.md +0 -782
  100. package/claude/references/sd-simplysm14/service-client/docs/features.md +0 -217
  101. package/claude/references/sd-simplysm14/service-client/docs/main.md +0 -148
  102. package/claude/references/sd-simplysm14/service-client/docs/protocol.md +0 -53
  103. package/claude/references/sd-simplysm14/service-client/docs/transport.md +0 -131
  104. package/claude/references/sd-simplysm14/service-client/docs/types.md +0 -129
  105. package/claude/references/sd-simplysm14/service-client/usage.md +0 -202
  106. package/claude/references/sd-simplysm14/service-common/docs/app-structure.md +0 -175
  107. package/claude/references/sd-simplysm14/service-common/docs/events.md +0 -64
  108. package/claude/references/sd-simplysm14/service-common/docs/protocol.md +0 -331
  109. package/claude/references/sd-simplysm14/service-common/docs/service-types.md +0 -90
  110. package/claude/references/sd-simplysm14/service-common/docs/types.md +0 -19
  111. package/claude/references/sd-simplysm14/service-common/usage.md +0 -154
  112. package/claude/references/sd-simplysm14/service-server/docs/auth.md +0 -64
  113. package/claude/references/sd-simplysm14/service-server/docs/core.md +0 -174
  114. package/claude/references/sd-simplysm14/service-server/docs/legacy.md +0 -25
  115. package/claude/references/sd-simplysm14/service-server/docs/main.md +0 -88
  116. package/claude/references/sd-simplysm14/service-server/docs/protocol.md +0 -33
  117. package/claude/references/sd-simplysm14/service-server/docs/services.md +0 -94
  118. package/claude/references/sd-simplysm14/service-server/docs/transport-http.md +0 -93
  119. package/claude/references/sd-simplysm14/service-server/docs/transport-socket.md +0 -119
  120. package/claude/references/sd-simplysm14/service-server/docs/types.md +0 -36
  121. package/claude/references/sd-simplysm14/service-server/docs/utils.md +0 -22
  122. package/claude/references/sd-simplysm14/service-server/usage.md +0 -171
  123. package/claude/references/sd-simplysm14/storage/usage.md +0 -301
  124. package/claude/references/sd-simplysm14.md +0 -35
  125. package/claude/rules/sd-clarify.md +0 -23
  126. package/claude/sd-session-start.sh +0 -10
  127. /package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/cli.md +0 -0
@@ -65,14 +65,6 @@ function copySdEntries(sourceDir, targetDir, entries) → void
65
65
  | `targetDir` | `string` | 대상 디렉토리 (`.claude/`) |
66
66
  | `entries` | `string[]` | 복사할 항목의 상대 경로 배열 |
67
67
 
68
- #### `setupSettings(targetDir)`
69
-
70
- ```javascript
71
- function setupSettings(targetDir) → void
72
- ```
73
-
74
- `.claude/settings.json`에 훅 항목을 멱등적으로 등록한다.
75
-
76
68
  ---
77
69
 
78
70
  ## `sync.mjs`
@@ -104,7 +96,7 @@ export function forEachSdEntry(dir, callback) → void
104
96
  | `callback` | `(relativePath: string) => void` | 각 `sd-*` 항목의 상대 경로로 호출되는 콜백 |
105
97
 
106
98
  탐색 깊이는 2단계 고정:
107
- - 루트 레벨의 `sd-*` 항목 (예: `sd-session-start.sh`)
99
+ - 루트 레벨의 `sd-*` 항목 (예: `sd-subagent-start.sh`)
108
100
  - 하위 디렉토리 내 `sd-*` 항목 (예: `skills/sd-commit`)
109
101
 
110
102
  ### `collectSdEntries(dir)`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-claude",
3
- "version": "14.0.46",
3
+ "version": "14.0.48",
4
4
  "description": "심플리즘 패키지 - Claude Code 셋업",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -15,7 +15,8 @@
15
15
  },
16
16
  "files": [
17
17
  "scripts",
18
- "claude"
18
+ "claude",
19
+ "docs"
19
20
  ],
20
21
  "scripts": {
21
22
  "postinstall": "node scripts/postinstall.mjs"
package/scripts/sync.mjs CHANGED
@@ -16,8 +16,10 @@ if (fs.existsSync(targetDir)) {
16
16
  fs.rmSync(targetDir, { recursive: true });
17
17
  }
18
18
 
19
- // sd-* 항목 탐색 및 settings.json 포함
20
- const allEntries = collectSdEntries(claudeDir);
19
+ // sd-* 항목 탐색 및 settings.json 포함 (evals/ 제외)
20
+ const allEntries = collectSdEntries(claudeDir).filter(
21
+ (rel) => !rel.replace(/\\/g, "/").startsWith("evals/"),
22
+ );
21
23
  if (fs.existsSync(path.join(claudeDir, "settings.json"))) {
22
24
  allEntries.push("settings.json");
23
25
  }
@@ -1,48 +0,0 @@
1
- # Bootstrap
2
-
3
- ## `provideSdAngular`
4
-
5
- 모든 기반 설정을 제공하는 환경 프로바이더 팩토리. `bootstrapApplication`의 providers에 추가한다.
6
-
7
- ```typescript
8
- function provideSdAngular(opt: { clientName: string }): EnvironmentProviders
9
- ```
10
-
11
- 제공하는 기능:
12
- - `provideZonelessChangeDetection()` - Zone 없는 변경 감지
13
- - `IMAGE_CONFIG` - 이미지 크기/지연 로딩 경고 비활성화
14
- - `provideNgIconsConfig({ strokeWidth: 1.5, size: "1.33em" })`
15
- - 6개 커스텀 이벤트 플러그인 등록 (sdSaveCommand, sdRefreshCommand, sdInsertCommand, sdResize, sdIntersection, option)
16
- - `SdGlobalErrorHandlerPlugin` - 글로벌 에러 핸들러
17
- - 테마 초기화 (localStorage 동기화, body 클래스 토글)
18
- - Service Worker 업데이트 폴링 (5분 간격, 실패 시 exponential backoff, 최대 1시간)
19
- - 라우터 네비게이션 busy 상태 추적
20
-
21
- | Parameter | Type | Description |
22
- |-----------|------|-------------|
23
- | `opt.clientName` | `string` | 클라이언트 이름 (localStorage 키 접두사 등에 사용) |
24
-
25
- ## `SdAngularConfigProvider`
26
-
27
- `clientName` 설정을 보유하는 프로바이더. `provideSdAngular`에서 자동 설정된다.
28
-
29
- ```typescript
30
- @Injectable({ providedIn: "root" })
31
- class SdAngularConfigProvider {
32
- clientName!: string;
33
- }
34
- ```
35
-
36
- | Field | Type | Description |
37
- |-------|------|-------------|
38
- | `clientName` | `string` | 클라이언트 이름 |
39
-
40
- ## `TXT_CHANGE_IGNORE_CONFIRM`
41
-
42
- 변경사항 무시 확인 메시지 문자열 상수.
43
-
44
- ```typescript
45
- const TXT_CHANGE_IGNORE_CONFIRM: string
46
- ```
47
-
48
- 내용: `"변경사항이 있습니다. 모든 변경사항을 무시하시겠습니까?\n- 확인: 변경사항을 무시하고, 현재 요청한 작업을 수행\n- 취소: 현재 요청한 작업을 취소하고, 변경사항 재검토"`
@@ -1,236 +0,0 @@
1
- # Directives
2
-
3
- ## `SdEvents`
4
-
5
- `.capture`, `.passive`, `.once` 수식어 및 커스텀 이벤트 바인딩을 지원하는 디렉티브. Angular 템플릿에서 해당 이벤트를 사용할 때 자동 매칭된다.
6
-
7
- ```typescript
8
- @Directive({
9
- selector: `[click.capture], [scroll.passive], ...`,
10
- })
11
- class SdEvents {
12
- // 클릭: click.capture, click.once, click.capture.once
13
- // 마우스: mousedown.capture, mouseup.capture, mouseover.capture, mouseout.capture
14
- // 키보드: keydown.capture, keyup.capture
15
- // 포커스: focus.capture, blur.capture
16
- // 폼: invalid.capture
17
- // 스크롤: scroll.capture, scroll.passive, scroll.capture.passive
18
- // 휠: wheel.passive, wheel.capture.passive
19
- // 터치: touchstart.passive, touchstart.capture.passive, touchmove.passive, touchmove.capture.passive, touchend.passive
20
- // 드래그: dragover.capture, dragenter.capture, dragleave.capture, drop.capture
21
- // 애니메이션: transitionend.once, animationend.once
22
- }
23
- ```
24
-
25
- > **NOTE:** `sdResize`, `sdSaveCommand`, `sdRefreshCommand`, `sdInsertCommand`는 `SdEvents`에서 분리되어 각각 `SdResizeDirective`, `SdIntersectionDirective`, `SdCommandDirective`로 독립 디렉티브로 제공된다.
26
-
27
- ## `SdRipple`
28
-
29
- 호스트 요소에 리플 효과를 추가하는 디렉티브.
30
-
31
- ```typescript
32
- @Directive({ selector: "[sdRipple]" })
33
- class SdRipple {
34
- enabled = input.required({ alias: "sdRipple", transform: booleanAttribute });
35
- }
36
- ```
37
-
38
- 사용법: `<div [sdRipple]="true">` 또는 `<div sdRipple>`
39
-
40
- ## `SdShowEffect`
41
-
42
- 뷰포트에 진입할 때 reveal 애니메이션을 적용하는 디렉티브. IntersectionObserver 사용.
43
-
44
- ```typescript
45
- @Directive({ selector: "[sdShowEffect]" })
46
- class SdShowEffect {
47
- enabled = input.required({ alias: "sdShowEffect", transform: booleanAttribute });
48
- sdShowEffectType = input<"l2r" | "t2b">("t2b");
49
- }
50
- ```
51
-
52
- | Input | Type | Default | Description |
53
- |-------|------|---------|-------------|
54
- | `sdShowEffect` | `boolean` | required | 효과 활성화 여부 |
55
- | `sdShowEffectType` | `"l2r" \| "t2b"` | `"t2b"` | 애니메이션 방향 (좌->우 / 위->아래) |
56
-
57
- ## `SdInvalid`
58
-
59
- 호스트 요소에 유효성 검증 표시기를 추가하는 디렉티브. 빨간 점 표시기와 숨겨진 input으로 구성.
60
-
61
- ```typescript
62
- @Directive({ selector: "[sdInvalid]" })
63
- class SdInvalid {
64
- invalidMessage = input.required<string>({ alias: "sdInvalid" });
65
- }
66
- ```
67
-
68
- 사용법: `<div [sdInvalid]="name이 비어있습니다">`. 메시지가 빈 문자열이면 유효, 비어있지 않으면 무효.
69
-
70
- ## `SdTypedTemplate`
71
-
72
- `ng-template`의 컨텍스트 타입을 지정하는 디렉티브. 타입 가드를 통해 템플릿 내부에서 정확한 타입을 사용할 수 있다.
73
-
74
- ```typescript
75
- @Directive({ selector: "ng-template[typed]" })
76
- class SdTypedTemplate<T> {
77
- typed = input.required<T>();
78
-
79
- static ngTemplateContextGuard<TypeToken>(
80
- _dir: SdTypedTemplate<TypeToken>,
81
- _ctx: unknown,
82
- ): _ctx is TypeToken;
83
- }
84
- ```
85
-
86
- 사용법:
87
- ```html
88
- <ng-template [typed]="typedVar" let-item>
89
- <!-- item의 타입이 typeof typedVar -->
90
- </ng-template>
91
- ```
92
-
93
- ## `SdItemOfTemplate`
94
-
95
- 항목 반복 템플릿의 컨텍스트 타입을 지정하는 디렉티브.
96
-
97
- ```typescript
98
- @Directive({ selector: "ng-template[itemOf]" })
99
- class SdItemOfTemplate<TItem> {
100
- itemOf = input.required<TItem[]>();
101
-
102
- static ngTemplateContextGuard<TContextItem>(
103
- _dir: SdItemOfTemplate<TContextItem>,
104
- _ctx: unknown,
105
- ): _ctx is SdItemOfTemplateContext<TContextItem>;
106
- }
107
- ```
108
-
109
- ## `SdItemOfTemplateContext`
110
-
111
- itemOf 템플릿 컨텍스트.
112
-
113
- ```typescript
114
- interface SdItemOfTemplateContext<TItem> {
115
- $implicit: TItem;
116
- item: TItem;
117
- index: number;
118
- depth: number;
119
- }
120
- ```
121
-
122
- | Field | Type | Description |
123
- |-------|------|-------------|
124
- | `$implicit` | `TItem` | 현재 항목 (let-item으로 접근) |
125
- | `item` | `TItem` | 현재 항목 (명시적 접근) |
126
- | `index` | `number` | 인덱스 |
127
- | `depth` | `number` | 깊이 (트리 구조에서 사용) |
128
-
129
- 사용법:
130
- ```html
131
- <ng-template [itemOf]="items()" let-item let-index="index">
132
- {{ item.name }}
133
- </ng-template>
134
- ```
135
-
136
- ## `SdCommandDirective`
137
-
138
- 키보드 단축키를 output 이벤트로 제공하는 디렉티브. `document` keydown을 감지하며, `shouldProcessCommandEvent()`로 최상위 모달만 이벤트 처리.
139
-
140
- ```typescript
141
- @Directive({ selector: "[sdRefreshCommand],[sdSaveCommand],[sdInsertCommand]" })
142
- class SdCommandDirective {
143
- sdRefreshCommand = output<KeyboardEvent>(); // Ctrl+Alt+L
144
- sdSaveCommand = output<KeyboardEvent>(); // Ctrl+S
145
- sdInsertCommand = output<KeyboardEvent>(); // Ctrl+Insert
146
- }
147
- ```
148
-
149
- 사용법: `<div (sdSaveCommand)="onSave($event)" (sdRefreshCommand)="onRefresh($event)">`
150
-
151
- ## `SdResizeDirective`
152
-
153
- ResizeObserver 기반 resize output 이벤트 디렉티브. `requestAnimationFrame`으로 디바운스.
154
-
155
- ```typescript
156
- @Directive({ selector: "[sdResize]" })
157
- class SdResizeDirective {
158
- sdResize = output<SdResizeEvent>();
159
- }
160
- ```
161
-
162
- 사용법: `<div (sdResize)="onResize($event)">`
163
-
164
- ## `SdResizeEvent`
165
-
166
- ```typescript
167
- interface SdResizeEvent {
168
- heightChanged: boolean;
169
- widthChanged: boolean;
170
- target: HTMLElement;
171
- contentRect: DOMRectReadOnly;
172
- }
173
- ```
174
-
175
- | Field | Type | Description |
176
- |-------|------|-------------|
177
- | `heightChanged` | `boolean` | 높이 변경 여부 |
178
- | `widthChanged` | `boolean` | 너비 변경 여부 |
179
- | `target` | `HTMLElement` | 대상 요소 |
180
- | `contentRect` | `DOMRectReadOnly` | 컨텐츠 영역 크기 |
181
-
182
- ## `SdIntersectionDirective`
183
-
184
- IntersectionObserver 기반 intersection output 이벤트 디렉티브.
185
-
186
- ```typescript
187
- @Directive({ selector: "[sdIntersection]" })
188
- class SdIntersectionDirective {
189
- sdIntersection = output<SdIntersectionEvent>();
190
- }
191
- ```
192
-
193
- 사용법: `<div (sdIntersection)="onIntersect($event)">`
194
-
195
- ## `SdIntersectionEvent`
196
-
197
- ```typescript
198
- interface SdIntersectionEvent {
199
- entry: IntersectionObserverEntry;
200
- }
201
- ```
202
-
203
- | Field | Type | Description |
204
- |-------|------|-------------|
205
- | `entry` | `IntersectionObserverEntry` | 마지막 IntersectionObserver 엔트리 |
206
-
207
- ## `SdRouterLink`
208
-
209
- 라우터 네비게이션 디렉티브. 일반 클릭은 라우터 네비게이션, Ctrl/Shift+클릭은 새 창, 팝업 윈도우에서는 팝업 형태로 열린다.
210
-
211
- ```typescript
212
- @Directive({
213
- selector: "[sdRouterLink]",
214
- host: {
215
- "[style.cursor]": "option() ? 'pointer' : ''",
216
- "(click)": "onClick($event)",
217
- },
218
- })
219
- class SdRouterLink {
220
- option = input<{
221
- link: string;
222
- params?: Record<string, string>;
223
- window?: { width?: number; height?: number };
224
- outletName?: string;
225
- queryParams?: Record<string, string>;
226
- } | undefined>(undefined, { alias: "sdRouterLink" });
227
- }
228
- ```
229
-
230
- | Input Field | Type | Description |
231
- |-------------|------|-------------|
232
- | `link` | `string` | 네비게이션 경로 |
233
- | `params` | `Record<string, string> \| undefined` | 라우터 파라미터 |
234
- | `window` | `{ width?, height? } \| undefined` | 팝업 윈도우 크기 (설정 시 팝업으로 열림) |
235
- | `outletName` | `string \| undefined` | named outlet |
236
- | `queryParams` | `Record<string, string> \| undefined` | 쿼리 파라미터 |