@simplysm/angular 14.0.48 → 14.0.51

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 (144) hide show
  1. package/README.md +234 -226
  2. package/dist/controls/select/sd-select.js +3 -3
  3. package/dist/index.d.ts +0 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +0 -2
  6. package/dist/layout/dock/sd-dock-container.js +1 -1
  7. package/dist/styles.css +9 -0
  8. package/docs/bootstrap/provide-sd-angular.md +37 -0
  9. package/docs/bootstrap/sd-angular-config-provider.md +16 -0
  10. package/docs/directives/sd-command-directive.md +30 -0
  11. package/docs/directives/sd-events.md +25 -0
  12. package/docs/directives/sd-intersection-directive.md +36 -0
  13. package/docs/directives/sd-invalid.md +24 -0
  14. package/docs/directives/sd-resize-directive.md +42 -0
  15. package/docs/directives/sd-ripple.md +23 -0
  16. package/docs/directives/sd-router-link.md +38 -0
  17. package/docs/directives/sd-show-effect.md +18 -0
  18. package/docs/directives/sd-typed-template.md +69 -0
  19. package/docs/features/sd-address-search-modal.md +50 -0
  20. package/docs/features/sd-permission-table.md +20 -0
  21. package/docs/features/sd-shared-data-components.md +158 -0
  22. package/docs/features/sd-tiptap-editor.md +26 -0
  23. package/docs/{pipes.md → pipes/format-pipe.md} +14 -5
  24. package/docs/plugins/sd-global-error-handler.md +23 -0
  25. package/docs/{plugins.md → plugins/sd-option-event-plugin.md} +9 -12
  26. package/docs/provider-types/sd-menu.md +65 -0
  27. package/docs/provider-types/sd-modal-content-def.md +148 -0
  28. package/docs/provider-types/sd-toast-content-def.md +73 -0
  29. package/docs/provider-types/shared-data-base.md +59 -0
  30. package/docs/providers/sd-activated-modal-provider.md +34 -0
  31. package/docs/providers/sd-app-structure-provider.md +81 -0
  32. package/docs/providers/sd-busy-provider.md +18 -0
  33. package/docs/providers/sd-file-dialog-provider.md +40 -0
  34. package/docs/providers/sd-local-storage-provider.md +20 -0
  35. package/docs/providers/sd-modal-provider.md +67 -0
  36. package/docs/providers/sd-navigate-window-provider.md +18 -0
  37. package/docs/providers/sd-print-provider.md +25 -0
  38. package/docs/providers/sd-service-client-factory-provider.md +43 -0
  39. package/docs/providers/sd-shared-data-provider.md +64 -0
  40. package/docs/providers/sd-system-config-provider.md +46 -0
  41. package/docs/providers/sd-system-log-provider.md +18 -0
  42. package/docs/providers/sd-theme-provider.md +38 -0
  43. package/docs/providers/sd-toast-provider.md +65 -0
  44. package/docs/recipes/_common-rules.md +244 -0
  45. package/docs/recipes/crud-detail/extension-a-edit-save.md +230 -0
  46. package/docs/recipes/crud-detail/extension-b-delete-restore.md +142 -0
  47. package/docs/recipes/crud-detail/extension-c-modal-view.md +214 -0
  48. package/docs/recipes/crud-detail/extension-d-control-view.md +103 -0
  49. package/docs/recipes/crud-detail/extension-e-auxiliary.md +87 -0
  50. package/docs/recipes/crud-detail/extension-f-complex-detail.md +234 -0
  51. package/docs/recipes/crud-detail.md +215 -722
  52. package/docs/recipes/crud-list/extension-a-inline-edit.md +410 -0
  53. package/docs/recipes/crud-list/extension-b-selection.md +226 -0
  54. package/docs/recipes/crud-list/extension-c-inline-delete.md +87 -0
  55. package/docs/recipes/crud-list/extension-d-select-modal.md +207 -0
  56. package/docs/recipes/crud-list/extension-e-readonly-modal.md +165 -0
  57. package/docs/recipes/crud-list/extension-f-modal-edit.md +177 -0
  58. package/docs/recipes/crud-list/extension-g-excel.md +157 -0
  59. package/docs/recipes/crud-list.md +293 -626
  60. package/docs/recipes/data-select-button.md +194 -101
  61. package/docs/recipes/page-modal-container.md +168 -86
  62. package/docs/styling/classes.md +149 -0
  63. package/docs/styling/mixins.md +100 -0
  64. package/docs/styling/themes.md +35 -0
  65. package/docs/styling/variables.md +147 -0
  66. package/docs/{type-utilities.md → type-utilities/directive-input-signals.md} +17 -35
  67. package/docs/ui-data/sd-list.md +37 -0
  68. package/docs/ui-data/sd-sheet.md +227 -0
  69. package/docs/ui-form/sd-additional-button.md +26 -0
  70. package/docs/ui-form/sd-anchor.md +31 -0
  71. package/docs/ui-form/sd-button.md +105 -0
  72. package/docs/ui-form/sd-checkbox-group.md +39 -0
  73. package/docs/ui-form/sd-checkbox.md +81 -0
  74. package/docs/ui-form/sd-date-range-picker.md +27 -0
  75. package/docs/ui-form/sd-form.md +89 -0
  76. package/docs/ui-form/sd-modal-select-button.md +54 -0
  77. package/docs/ui-form/sd-numpad.md +26 -0
  78. package/docs/ui-form/sd-range.md +26 -0
  79. package/docs/ui-form/sd-select.md +68 -0
  80. package/docs/ui-form/sd-shared-data-select.md +52 -0
  81. package/docs/ui-form/sd-state-preset.md +37 -0
  82. package/docs/ui-form/sd-switch.md +27 -0
  83. package/docs/ui-form/sd-textarea.md +33 -0
  84. package/docs/ui-form/sd-textfield.md +145 -0
  85. package/docs/ui-layout/sd-dock-container.md +64 -0
  86. package/docs/ui-layout/sd-dock.md +37 -0
  87. package/docs/ui-layout/sd-gap.md +26 -0
  88. package/docs/{ui-layout.md → ui-layout/sd-kanban-board.md} +41 -85
  89. package/docs/ui-layout/sd-kanban-lane.md +34 -0
  90. package/docs/ui-layout/sd-kanban.md +29 -0
  91. package/docs/ui-navigation/sd-collapse.md +35 -0
  92. package/docs/ui-navigation/sd-pagination.md +26 -0
  93. package/docs/ui-navigation/sd-sidebar-container.md +49 -0
  94. package/docs/ui-navigation/sd-sidebar-menu.md +22 -0
  95. package/docs/ui-navigation/sd-sidebar-user.md +43 -0
  96. package/docs/ui-navigation/sd-tab.md +51 -0
  97. package/docs/ui-navigation/sd-topbar-container.md +97 -0
  98. package/docs/ui-navigation/sd-topbar-menu.md +23 -0
  99. package/docs/ui-navigation/sd-topbar-user.md +38 -0
  100. package/docs/ui-navigation/sd-topbar.md +30 -0
  101. package/docs/ui-overlay/sd-busy-container.md +69 -0
  102. package/docs/ui-overlay/sd-confirm-modal.md +30 -0
  103. package/docs/ui-overlay/sd-dropdown.md +40 -0
  104. package/docs/ui-overlay/sd-modal.md +34 -0
  105. package/docs/ui-overlay/sd-prompt-modal.md +30 -0
  106. package/docs/ui-overlay/sd-toast.md +35 -0
  107. package/docs/ui-visual/sd-barcode.md +36 -0
  108. package/docs/ui-visual/sd-calendar.md +34 -0
  109. package/docs/ui-visual/sd-echarts.md +32 -0
  110. package/docs/ui-visual/sd-label.md +24 -0
  111. package/docs/ui-visual/sd-note.md +23 -0
  112. package/docs/ui-visual/sd-progress.md +23 -0
  113. package/docs/utils/inject-routing-signals.md +161 -0
  114. package/docs/utils/inject-sd-system-config-resource.md +35 -0
  115. package/docs/utils/mark.md +43 -0
  116. package/docs/utils/selection-managers.md +96 -0
  117. package/docs/utils/set-safe-style.md +19 -0
  118. package/docs/utils/setup-functions.md +93 -0
  119. package/package.json +7 -7
  120. package/scss/commons/_styles.scss +12 -0
  121. package/src/controls/select/sd-select.ts +3 -3
  122. package/src/core/modal/sd-modal.provider.ts +1 -1
  123. package/src/core/modal/sd-modal.ts +1 -1
  124. package/src/core/routing/menu-utils.ts +1 -1
  125. package/src/core/shared-data/sd-shared-data.provider.ts +7 -7
  126. package/src/data/shared-data/sd-shared-data-select.ts +2 -2
  127. package/src/index.ts +0 -3
  128. package/src/layout/dock/sd-dock-container.ts +1 -1
  129. package/dist/data/getOrmDataEditToastErrorMessage.d.ts +0 -2
  130. package/dist/data/getOrmDataEditToastErrorMessage.d.ts.map +0 -1
  131. package/dist/data/getOrmDataEditToastErrorMessage.js +0 -8
  132. package/docs/bootstrap.md +0 -38
  133. package/docs/directives.md +0 -236
  134. package/docs/features.md +0 -169
  135. package/docs/provider-types.md +0 -283
  136. package/docs/providers.md +0 -379
  137. package/docs/styling.md +0 -222
  138. package/docs/ui-data.md +0 -333
  139. package/docs/ui-form.md +0 -502
  140. package/docs/ui-navigation.md +0 -273
  141. package/docs/ui-overlay.md +0 -157
  142. package/docs/ui-visual.md +0 -127
  143. package/docs/utils.md +0 -244
  144. package/src/data/getOrmDataEditToastErrorMessage.ts +0 -10
package/docs/utils.md DELETED
@@ -1,244 +0,0 @@
1
- # Utils & Setups
2
-
3
- ## Utility Functions
4
-
5
- ### `mark`
6
-
7
- WritableSignal의 변경 알림을 수동으로 트리거한다. 배열/객체의 내부 변경(mutation) 후 consumer에게 변경을 알릴 때 사용. shallow copy로 새 참조를 생성하여 signal을 업데이트한다.
8
-
9
- ```typescript
10
- function mark(sig: WritableSignal<any>): void
11
- ```
12
-
13
- | Parameter | Type | Description |
14
- |-----------|------|-------------|
15
- | `sig` | `WritableSignal<any>` | 대상 signal. 배열이면 `[...v]`, 객체이면 `{...v}`로 shallow copy하여 update |
16
-
17
- ### `setSafeStyle`
18
-
19
- Renderer2를 사용하여 여러 CSS 스타일을 일괄 적용한다.
20
-
21
- ```typescript
22
- function setSafeStyle(
23
- renderer: Renderer2,
24
- el: HTMLElement,
25
- style: Partial<CSSStyleDeclaration>,
26
- ): void
27
- ```
28
-
29
- ## Resource Functions
30
-
31
- ### `injectSdSystemConfigResource`
32
-
33
- 컴포넌트 태그명 기반 키로 시스템 설정을 읽고 쓰는 resource 래퍼. 생성자에서 호출.
34
-
35
- ```typescript
36
- function injectSdSystemConfigResource<T>(options: {
37
- key: Signal<string | undefined>;
38
- }): {
39
- value: Signal<T | undefined>;
40
- isLoading: Signal<boolean>;
41
- status: Signal<ResourceStatus>;
42
- hasValue: () => boolean;
43
- reload: () => void;
44
- set(value: T | undefined): void;
45
- update(fn: (prev: T | undefined) => T | undefined): void;
46
- }
47
- ```
48
-
49
- `set()`/`update()` 호출 시 signal을 즉시 업데이트하고, 비동기로 `SdSystemConfigProvider.setAsync()`를 호출하여 영속화한다.
50
-
51
- ## Page Code / View Signals
52
-
53
- ### `injectCurrentPageCodeSignal`
54
-
55
- 현재 활성 라우트의 경로 세그먼트를 `.`으로 연결한 코드 signal. `ActivatedRoute`가 없으면 undefined 반환.
56
-
57
- ```typescript
58
- function injectCurrentPageCodeSignal(): Signal<string> | undefined
59
- ```
60
-
61
- ### `injectFullPageCodeSignal`
62
-
63
- 전체 URL 기반 페이지 코드 signal. `NavigationEnd` 이벤트를 구독하여 URL에서 코드를 추출한다.
64
-
65
- ```typescript
66
- function injectFullPageCodeSignal(): Signal<string>
67
- ```
68
-
69
- ### `injectViewTitleSignal`
70
-
71
- 현재 뷰의 타이틀 signal. 모달이면 모달 타이틀, 페이지이면 `SdAppStructureProvider`에서 조회.
72
-
73
- ```typescript
74
- function injectViewTitleSignal(): Signal<string>
75
- ```
76
-
77
- ### `injectViewTypeSignal`
78
-
79
- 현재 뷰의 타입 signal. 모달/페이지/컨트롤 중 하나를 반환한다.
80
-
81
- ```typescript
82
- function injectViewTypeSignal(): Signal<SdViewType>
83
- ```
84
-
85
- 내부 판정 로직:
86
- - `SdActivatedModalProvider`가 inject되면 `"modal"`
87
- - `ActivatedRoute.component`의 `reflectComponentType().selector`가 호스트 `ElementRef.nativeElement.tagName.toLowerCase()`와 일치하고 `fullPageCode() === currPageCode?.()`이면 `"page"`
88
- - 그 외 `"control"`
89
-
90
- ## Manager Functions
91
-
92
- ### `useSelectionManager`
93
-
94
- 선택 관리 composable. single/multi 모드를 지원한다. `trackByFn`이 반환하는 key를 기준으로 `obj.equal`(deep equal) 비교를 수행하므로, 같은 key의 다른 reference item도 `isSelected` true로 복원된다.
95
-
96
- ```typescript
97
- function useSelectionManager<T>(options: {
98
- displayItems: Signal<T[]>;
99
- selectedItems: WritableSignal<T[]>;
100
- selectMode: Signal<"single" | "multi" | undefined>;
101
- getItemSelectableFn: Signal<((item: T) => boolean | string) | undefined>;
102
- trackByFn: Signal<(item: T, index: number) => unknown>;
103
- }): {
104
- hasSelectable: Signal<boolean>;
105
- isAllSelected: Signal<boolean>;
106
- getSelectable(item: T): true | string | undefined;
107
- getCanChangeFn(item: T): () => boolean;
108
- select(item: T): void;
109
- deselect(item: T): void;
110
- toggle(item: T): void;
111
- toggleAll(): void;
112
- isSelected(item: T): boolean;
113
- }
114
- ```
115
-
116
- | Return | Type | Description |
117
- |--------|------|-------------|
118
- | `hasSelectable` | `Signal<boolean>` | selectMode가 설정되어 있는지 여부 |
119
- | `isAllSelected` | `Signal<boolean>` | 모든 선택 가능 항목이 선택되었는지 |
120
- | `getSelectable(item)` | `true \| string \| undefined` | 선택 가능 여부. string은 불가 사유 |
121
- | `getCanChangeFn(item)` | `() => boolean` | 선택 변경 가능 여부 함수 |
122
- | `select(item)` | `void` | 항목 선택 (single이면 교체) |
123
- | `deselect(item)` | `void` | 항목 선택 해제 |
124
- | `toggle(item)` | `void` | 항목 토글 |
125
- | `toggleAll()` | `void` | 전체 선택/해제 토글 |
126
- | `isSelected(item)` | `boolean` | 선택 여부 |
127
-
128
- ### `useSortingManager`
129
-
130
- 정렬 관리 composable.
131
-
132
- ```typescript
133
- function useSortingManager(options: {
134
- sorts: WritableSignal<SortingDef[]>;
135
- }): {
136
- defMap: Signal<Map<string, { indexText?: string; desc: boolean }>>;
137
- toggle(key: string, multiple: boolean): void;
138
- sort<T>(items: T[]): T[];
139
- }
140
- ```
141
-
142
- | Return | Type | Description |
143
- |--------|------|-------------|
144
- | `defMap` | `Signal<Map<string, ...>>` | 키별 정렬 정의 (인덱스 텍스트, 방향) |
145
- | `toggle(key, multiple)` | `void` | 정렬 토글. `multiple=true`면 멀티 소트, `false`면 단일 소트. 3단계: asc -> desc -> 없음 |
146
- | `sort(items)` | `T[]` | 정렬 적용. 원본 배열은 변경하지 않음 |
147
-
148
- ### `useExpandingManager`
149
-
150
- 트리 확장/축소 관리 composable.
151
-
152
- ```typescript
153
- function useExpandingManager<T>(binding: {
154
- items: Signal<T[]>;
155
- expandedItems: WritableSignal<T[]>;
156
- getChildrenFn: Signal<((item: T, index: number) => T[] | undefined) | undefined>;
157
- sort: (items: T[]) => T[];
158
- }): {
159
- displayItems: Signal<T[]>;
160
- hasExpandable: Signal<boolean>;
161
- isAllExpanded: Signal<boolean>;
162
- toggle(item: T): void;
163
- toggleAll(): void;
164
- isVisible(item: T): boolean;
165
- def(item: T): ExpandItemDef<T>;
166
- }
167
- ```
168
-
169
- | Return | Type | Description |
170
- |--------|------|-------------|
171
- | `displayItems` | `Signal<T[]>` | 트리를 평탄화한 전체 항목 (숨김 포함) |
172
- | `hasExpandable` | `Signal<boolean>` | 확장 가능한 항목 존재 여부 |
173
- | `isAllExpanded` | `Signal<boolean>` | 모든 확장 가능 항목이 펼쳐졌는지 |
174
- | `toggle(item)` | `void` | 항목 확장/축소 토글 |
175
- | `toggleAll()` | `void` | 전체 확장/축소 토글 |
176
- | `isVisible(item)` | `boolean` | 부모 체인이 모두 펼쳐져 항목이 보이는지 |
177
- | `def(item)` | `ExpandItemDef<T>` | 항목의 트리 정의 (depth, parentDef 등) |
178
-
179
- ## Setup Functions
180
-
181
- 생성자에서 호출하는 설정 함수들. `inject()`, `effect()`, `DestroyRef.onDestroy()`를 사용하여 수명주기를 관리한다.
182
-
183
- ### `setupBgTheme`
184
-
185
- body 배경 테마 색상을 설정한다. 파괴 시 자동 복원.
186
-
187
- ```typescript
188
- function setupBgTheme(options?: {
189
- theme?: "primary" | "secondary" | "info" | "success" | "warning" | "danger" | "gray" | "blue-gray";
190
- lightness?: "lightest" | "lighter";
191
- }): void
192
- ```
193
-
194
- ### `setupRipple`
195
-
196
- 호스트 요소에 리플 효과를 설정한다. pointer 이벤트 기반.
197
-
198
- ```typescript
199
- function setupRipple(enableFn?: () => boolean): void
200
- ```
201
-
202
- ### `setupRevealOnShow`
203
-
204
- 뷰포트 진입 시 reveal 애니메이션을 설정한다. IntersectionObserver 사용.
205
-
206
- ```typescript
207
- function setupRevealOnShow(optFn?: () => {
208
- type?: "l2r" | "t2b";
209
- enabled?: boolean;
210
- }): void
211
- ```
212
-
213
- ### `setupInvalid`
214
-
215
- 유효성 검증 표시기를 설정한다. 빨간 점 indicator + hidden input으로 구현.
216
-
217
- ```typescript
218
- function setupInvalid(getInvalidMessage: () => string): void
219
- ```
220
-
221
- 빈 문자열이면 유효, 비어있지 않으면 무효.
222
-
223
- ### `setupModelHook`
224
-
225
- model signal의 `set`/`update`를 가드 함수로 래핑한다. 가드 함수가 `false`를 반환하면 값 변경을 차단.
226
-
227
- ```typescript
228
- function setupModelHook<T, S extends WritableSignal<T>>(
229
- model: S,
230
- canFn: Signal<(item: T) => boolean | Promise<boolean>>,
231
- ): void
232
- ```
233
-
234
- ### `setupCanDeactivate`
235
-
236
- 모달 또는 라우트에 canDeactivate 가드를 설정한다.
237
-
238
- ```typescript
239
- function setupCanDeactivate(fn: () => boolean): void
240
- ```
241
-
242
- 모달 내부이면 `SdActivatedModalProvider.canDeactivateFn`에 설정, 라우트 내부이면 `routeConfig.canDeactivate`에 추가.
243
-
244
-
@@ -1,10 +0,0 @@
1
- export function getOrmDataEditToastErrorMessage(err: unknown): string {
2
- const message = err instanceof Error ? err.message : String(err);
3
- if (
4
- message.includes("a parent row: a foreign key constraint") ||
5
- message.includes("conflicted with the REFERENCE")
6
- ) {
7
- return "경고! 연결된 작업에 의한 처리 거부. 후속작업 확인 요망";
8
- }
9
- return message;
10
- }