@simplysm/sd-claude 14.0.53 → 14.0.55

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 (328) hide show
  1. package/claude/references/sd-simplysm-v14/angular/README.md +164 -291
  2. package/claude/references/sd-simplysm-v14/angular/_api-index.md +250 -0
  3. package/claude/references/sd-simplysm-v14/angular/bootstrap/provide-sd-angular.md +2 -0
  4. package/claude/references/sd-simplysm-v14/angular/bootstrap/sd-angular-config-provider.md +2 -0
  5. package/claude/references/sd-simplysm-v14/angular/directives/sd-command-directive.md +2 -0
  6. package/claude/references/sd-simplysm-v14/angular/directives/sd-events.md +2 -0
  7. package/claude/references/sd-simplysm-v14/angular/directives/sd-intersection-directive.md +2 -0
  8. package/claude/references/sd-simplysm-v14/angular/directives/sd-invalid.md +2 -0
  9. package/claude/references/sd-simplysm-v14/angular/directives/sd-resize-directive.md +2 -0
  10. package/claude/references/sd-simplysm-v14/angular/directives/sd-ripple.md +2 -0
  11. package/claude/references/sd-simplysm-v14/angular/directives/sd-router-link.md +2 -0
  12. package/claude/references/sd-simplysm-v14/angular/directives/sd-show-effect.md +2 -0
  13. package/claude/references/sd-simplysm-v14/angular/directives/sd-typed-template.md +2 -0
  14. package/claude/references/sd-simplysm-v14/angular/features/sd-address-search-modal.md +2 -0
  15. package/claude/references/sd-simplysm-v14/angular/features/sd-permission-table.md +2 -0
  16. package/claude/references/sd-simplysm-v14/angular/features/sd-shared-data-components.md +2 -0
  17. package/claude/references/sd-simplysm-v14/angular/features/sd-tiptap-editor.md +2 -0
  18. package/claude/references/sd-simplysm-v14/angular/pipes/format-pipe.md +2 -0
  19. package/claude/references/sd-simplysm-v14/angular/plugins/sd-global-error-handler.md +2 -0
  20. package/claude/references/sd-simplysm-v14/angular/plugins/sd-option-event-plugin.md +2 -0
  21. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-menu.md +2 -0
  22. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-modal-content-def.md +9 -9
  23. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-toast-content-def.md +2 -0
  24. package/claude/references/sd-simplysm-v14/angular/provider-types/shared-data-base.md +2 -0
  25. package/claude/references/sd-simplysm-v14/angular/providers/sd-activated-modal-provider.md +2 -0
  26. package/claude/references/sd-simplysm-v14/angular/providers/sd-app-structure-provider.md +2 -0
  27. package/claude/references/sd-simplysm-v14/angular/providers/sd-busy-provider.md +2 -0
  28. package/claude/references/sd-simplysm-v14/angular/providers/sd-file-dialog-provider.md +2 -0
  29. package/claude/references/sd-simplysm-v14/angular/providers/sd-local-storage-provider.md +2 -0
  30. package/claude/references/sd-simplysm-v14/angular/providers/sd-modal-provider.md +2 -0
  31. package/claude/references/sd-simplysm-v14/angular/providers/sd-navigate-window-provider.md +2 -0
  32. package/claude/references/sd-simplysm-v14/angular/providers/sd-print-provider.md +2 -0
  33. package/claude/references/sd-simplysm-v14/angular/providers/sd-service-client-factory-provider.md +2 -0
  34. package/claude/references/sd-simplysm-v14/angular/providers/sd-shared-data-provider.md +2 -0
  35. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-config-provider.md +2 -0
  36. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-log-provider.md +2 -0
  37. package/claude/references/sd-simplysm-v14/angular/providers/sd-theme-provider.md +2 -0
  38. package/claude/references/sd-simplysm-v14/angular/providers/sd-toast-provider.md +2 -0
  39. package/claude/references/sd-simplysm-v14/angular/styling/classes.md +2 -0
  40. package/claude/references/sd-simplysm-v14/angular/styling/mixins.md +2 -0
  41. package/claude/references/sd-simplysm-v14/angular/styling/themes.md +2 -0
  42. package/claude/references/sd-simplysm-v14/angular/styling/variables.md +2 -0
  43. package/claude/references/sd-simplysm-v14/angular/type-utilities/directive-input-signals.md +2 -0
  44. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-base-container.md +141 -0
  45. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-crud-detail.md +273 -0
  46. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-crud-list.md +623 -0
  47. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-list.md +2 -0
  48. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-sheet.md +34 -39
  49. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-additional-button.md +2 -0
  50. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-anchor.md +2 -7
  51. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-button.md +2 -11
  52. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox-group.md +2 -0
  53. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox.md +2 -4
  54. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-date-range-picker.md +2 -0
  55. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-form.md +2 -7
  56. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-modal-select-button.md +7 -7
  57. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-numpad.md +2 -0
  58. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-range.md +2 -0
  59. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-select.md +2 -0
  60. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-shared-data-select.md +2 -4
  61. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-state-preset.md +2 -0
  62. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-switch.md +2 -0
  63. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textarea.md +2 -0
  64. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textfield.md +2 -8
  65. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock-container.md +2 -7
  66. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock.md +2 -6
  67. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-gap.md +2 -0
  68. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-board.md +2 -0
  69. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-lane.md +2 -0
  70. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban.md +2 -0
  71. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-collapse.md +2 -0
  72. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-pagination.md +2 -0
  73. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-container.md +2 -0
  74. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-menu.md +2 -0
  75. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-user.md +2 -0
  76. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-tab.md +2 -0
  77. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-container.md +2 -9
  78. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-menu.md +2 -0
  79. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-user.md +2 -0
  80. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar.md +2 -7
  81. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-busy-container.md +2 -5
  82. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-confirm-modal.md +2 -0
  83. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-dropdown.md +2 -0
  84. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-modal.md +2 -0
  85. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-prompt-modal.md +2 -0
  86. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-toast.md +2 -0
  87. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-barcode.md +2 -0
  88. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-calendar.md +2 -0
  89. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-echarts.md +2 -0
  90. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-label.md +2 -0
  91. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-note.md +2 -0
  92. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-progress.md +2 -0
  93. package/claude/references/sd-simplysm-v14/angular/utils/inject-routing-signals.md +3 -16
  94. package/claude/references/sd-simplysm-v14/angular/utils/inject-sd-system-config-resource.md +2 -0
  95. package/claude/references/sd-simplysm-v14/angular/utils/mark.md +2 -5
  96. package/claude/references/sd-simplysm-v14/angular/utils/selection-managers.md +3 -1
  97. package/claude/references/sd-simplysm-v14/angular/utils/set-safe-style.md +2 -0
  98. package/claude/references/sd-simplysm-v14/angular/utils/setup-functions.md +2 -4
  99. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/README.md +16 -18
  100. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/_api-index.md +18 -0
  101. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/apk-installer/apk-installer.md +1 -1
  102. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/auto-update/auto-update.md +1 -1
  103. package/claude/references/sd-simplysm-v14/capacitor-plugin-file-system/README.md +24 -45
  104. package/claude/references/sd-simplysm-v14/core-browser/README.md +22 -29
  105. package/claude/references/sd-simplysm-v14/core-browser/_api-index.md +37 -0
  106. package/claude/references/sd-simplysm-v14/core-browser/extensions/copy-paste.md +1 -1
  107. package/claude/references/sd-simplysm-v14/core-browser/extensions/element-prototype-extensions.md +2 -0
  108. package/claude/references/sd-simplysm-v14/core-browser/extensions/get-bounds.md +1 -1
  109. package/claude/references/sd-simplysm-v14/core-browser/utils/download-blob.md +1 -1
  110. package/claude/references/sd-simplysm-v14/core-browser/utils/fetch-url-bytes.md +1 -1
  111. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-store.md +1 -1
  112. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-virtual-fs.md +1 -1
  113. package/claude/references/sd-simplysm-v14/core-browser/utils/open-file-dialog.md +1 -1
  114. package/claude/references/sd-simplysm-v14/core-common/README.md +71 -153
  115. package/claude/references/sd-simplysm-v14/core-common/_api-index.md +70 -0
  116. package/claude/references/sd-simplysm-v14/core-common/errors/argument-error.md +3 -1
  117. package/claude/references/sd-simplysm-v14/core-common/errors/not-implemented-error.md +3 -1
  118. package/claude/references/sd-simplysm-v14/core-common/errors/sd-error.md +3 -1
  119. package/claude/references/sd-simplysm-v14/core-common/errors/timeout-error.md +3 -1
  120. package/claude/references/sd-simplysm-v14/core-common/extensions/array.md +2 -0
  121. package/claude/references/sd-simplysm-v14/core-common/extensions/map.md +2 -0
  122. package/claude/references/sd-simplysm-v14/core-common/extensions/set.md +2 -0
  123. package/claude/references/sd-simplysm-v14/core-common/features/debounce-queue.md +3 -1
  124. package/claude/references/sd-simplysm-v14/core-common/features/event-emitter.md +3 -1
  125. package/claude/references/sd-simplysm-v14/core-common/features/serial-queue.md +3 -1
  126. package/claude/references/sd-simplysm-v14/core-common/type-utils/common-types.md +2 -0
  127. package/claude/references/sd-simplysm-v14/core-common/type-utils/env.md +3 -1
  128. package/claude/references/sd-simplysm-v14/core-common/types/date-only.md +3 -1
  129. package/claude/references/sd-simplysm-v14/core-common/types/date-time.md +9 -1
  130. package/claude/references/sd-simplysm-v14/core-common/types/lazy-gc-map.md +3 -1
  131. package/claude/references/sd-simplysm-v14/core-common/types/time.md +3 -1
  132. package/claude/references/sd-simplysm-v14/core-common/types/uuid.md +3 -1
  133. package/claude/references/sd-simplysm-v14/core-common/utils/bytes.md +3 -1
  134. package/claude/references/sd-simplysm-v14/core-common/utils/dt.md +3 -1
  135. package/claude/references/sd-simplysm-v14/core-common/utils/err.md +3 -1
  136. package/claude/references/sd-simplysm-v14/core-common/utils/json.md +3 -1
  137. package/claude/references/sd-simplysm-v14/core-common/utils/num.md +3 -1
  138. package/claude/references/sd-simplysm-v14/core-common/utils/obj.md +3 -1
  139. package/claude/references/sd-simplysm-v14/core-common/utils/path.md +3 -1
  140. package/claude/references/sd-simplysm-v14/core-common/utils/primitive.md +3 -1
  141. package/claude/references/sd-simplysm-v14/core-common/utils/str.md +3 -1
  142. package/claude/references/sd-simplysm-v14/core-common/utils/template-strings.md +2 -0
  143. package/claude/references/sd-simplysm-v14/core-common/utils/transfer.md +3 -1
  144. package/claude/references/sd-simplysm-v14/core-common/utils/wait.md +3 -1
  145. package/claude/references/sd-simplysm-v14/core-common/utils/xml.md +3 -1
  146. package/claude/references/sd-simplysm-v14/core-common/utils/zip-archive.md +3 -1
  147. package/claude/references/sd-simplysm-v14/core-node/README.md +25 -35
  148. package/claude/references/sd-simplysm-v14/core-node/_api-index.md +34 -0
  149. package/claude/references/sd-simplysm-v14/core-node/features/fs-watcher.md +3 -1
  150. package/claude/references/sd-simplysm-v14/core-node/logging/create-file-reporter.md +3 -1
  151. package/claude/references/sd-simplysm-v14/core-node/logging/pretty-reporter.md +3 -1
  152. package/claude/references/sd-simplysm-v14/core-node/logging/setup-consola.md +3 -1
  153. package/claude/references/sd-simplysm-v14/core-node/utils/cpx.md +3 -1
  154. package/claude/references/sd-simplysm-v14/core-node/utils/fsx.md +3 -1
  155. package/claude/references/sd-simplysm-v14/core-node/utils/pathx.md +3 -1
  156. package/claude/references/sd-simplysm-v14/core-node/worker/create-worker.md +3 -1
  157. package/claude/references/sd-simplysm-v14/core-node/worker/worker.md +3 -1
  158. package/claude/references/sd-simplysm-v14/excel/README.md +35 -49
  159. package/claude/references/sd-simplysm-v14/excel/_api-index.md +40 -0
  160. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-cell.md +3 -1
  161. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-col.md +3 -1
  162. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-row.md +3 -1
  163. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-workbook.md +6 -3
  164. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-worksheet.md +3 -1
  165. package/claude/references/sd-simplysm-v14/excel/types/excel-address-point.md +3 -1
  166. package/claude/references/sd-simplysm-v14/excel/types/excel-style-options.md +3 -1
  167. package/claude/references/sd-simplysm-v14/excel/types/excel-value-type.md +3 -1
  168. package/claude/references/sd-simplysm-v14/excel/utilities/excel-utils.md +3 -1
  169. package/claude/references/sd-simplysm-v14/excel/wrapper/excel-wrapper.md +3 -1
  170. package/claude/references/sd-simplysm-v14/orm-common/README.md +66 -71
  171. package/claude/references/sd-simplysm-v14/orm-common/_api-index.md +59 -0
  172. package/claude/references/sd-simplysm-v14/orm-common/core/db-context.md +3 -1
  173. package/claude/references/sd-simplysm-v14/orm-common/core/db-transaction-error.md +3 -1
  174. package/claude/references/sd-simplysm-v14/orm-common/expression/expr-unit.md +3 -1
  175. package/claude/references/sd-simplysm-v14/orm-common/expression/expr.md +3 -1
  176. package/claude/references/sd-simplysm-v14/orm-common/models/migration.md +3 -1
  177. package/claude/references/sd-simplysm-v14/orm-common/query-builder/create-query-builder.md +3 -1
  178. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/executable.md +3 -1
  179. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/parse-search-query.md +3 -1
  180. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/queryable.md +3 -1
  181. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/column-builder.md +3 -1
  182. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/foreign-key-builder.md +3 -1
  183. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/index-builder.md +3 -1
  184. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/procedure.md +3 -1
  185. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/table.md +3 -1
  186. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/view.md +3 -1
  187. package/claude/references/sd-simplysm-v14/orm-common/types/data-type.md +3 -1
  188. package/claude/references/sd-simplysm-v14/orm-common/types/dialect.md +3 -1
  189. package/claude/references/sd-simplysm-v14/orm-common/types/expr.md +3 -1
  190. package/claude/references/sd-simplysm-v14/orm-common/types/parse-query-result.md +3 -1
  191. package/claude/references/sd-simplysm-v14/orm-common/types/query-def.md +3 -1
  192. package/claude/references/sd-simplysm-v14/orm-node/README.md +27 -28
  193. package/claude/references/sd-simplysm-v14/orm-node/_api-index.md +29 -0
  194. package/claude/references/sd-simplysm-v14/orm-node/connections/mssql-db-conn.md +2 -0
  195. package/claude/references/sd-simplysm-v14/orm-node/connections/mysql-db-conn.md +2 -0
  196. package/claude/references/sd-simplysm-v14/orm-node/connections/postgresql-db-conn.md +2 -0
  197. package/claude/references/sd-simplysm-v14/orm-node/core/create-db-conn.md +2 -0
  198. package/claude/references/sd-simplysm-v14/orm-node/core/create-orm.md +2 -0
  199. package/claude/references/sd-simplysm-v14/orm-node/core/node-db-context-executor.md +2 -0
  200. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-config.md +2 -0
  201. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-constants.md +2 -0
  202. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn.md +2 -0
  203. package/claude/references/sd-simplysm-v14/orm-node/types/get-dialect-from-config.md +2 -0
  204. package/claude/references/sd-simplysm-v14/sd-claude/README.md +26 -65
  205. package/claude/references/sd-simplysm-v14/sd-claude/_api-index.md +39 -0
  206. package/claude/references/sd-simplysm-v14/sd-claude/assets.md +2 -0
  207. package/claude/references/sd-simplysm-v14/sd-claude/cli.md +3 -1
  208. package/claude/references/sd-simplysm-v14/sd-claude/hooks.md +11 -7
  209. package/claude/references/sd-simplysm-v14/sd-claude/scripts.md +2 -0
  210. package/claude/references/sd-simplysm-v14/sd-cli/README.md +48 -119
  211. package/claude/references/sd-simplysm-v14/sd-cli/_api-index.md +49 -0
  212. package/claude/references/sd-simplysm-v14/sd-cli/angular-vite-plugin/sd-angular-plugin.md +3 -1
  213. package/claude/references/sd-simplysm-v14/sd-cli/config/build-target.md +3 -1
  214. package/claude/references/sd-simplysm-v14/sd-cli/config/npm-config.md +3 -1
  215. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-browser-support-config.md +3 -1
  216. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-build-package-config.md +4 -2
  217. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-capacitor-config.md +3 -1
  218. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-client-package-config.md +4 -2
  219. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-config.md +4 -2
  220. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-electron-config.md +3 -1
  221. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-package-config.md +3 -1
  222. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-post-publish-script-config.md +3 -1
  223. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-publish-config.md +3 -1
  224. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-pwa-config.md +3 -1
  225. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-scripts-package-config.md +4 -2
  226. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-server-package-config.md +4 -2
  227. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-watch-hook-config.md +3 -1
  228. package/claude/references/sd-simplysm-v14/sd-cli/ts-compiler/sd-ts-compiler.md +3 -1
  229. package/claude/references/sd-simplysm-v14/service-client/README.md +33 -42
  230. package/claude/references/sd-simplysm-v14/service-client/_api-index.md +58 -0
  231. package/claude/references/sd-simplysm-v14/service-client/features/event-client.md +1 -1
  232. package/claude/references/sd-simplysm-v14/service-client/features/file-client.md +1 -1
  233. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-connector.md +1 -1
  234. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-db-context-executor.md +1 -1
  235. package/claude/references/sd-simplysm-v14/service-client/main/service-client.md +1 -1
  236. package/claude/references/sd-simplysm-v14/service-client/protocol/client-protocol-wrapper.md +1 -1
  237. package/claude/references/sd-simplysm-v14/service-client/transport/service-transport.md +1 -1
  238. package/claude/references/sd-simplysm-v14/service-client/transport/socket-provider.md +1 -1
  239. package/claude/references/sd-simplysm-v14/service-client/types/blob-input.md +2 -2
  240. package/claude/references/sd-simplysm-v14/service-client/types/browser-worker.md +2 -2
  241. package/claude/references/sd-simplysm-v14/service-client/types/file-collection.md +2 -2
  242. package/claude/references/sd-simplysm-v14/service-client/types/service-connection-options.md +2 -2
  243. package/claude/references/sd-simplysm-v14/service-client/types/service-progress.md +2 -2
  244. package/claude/references/sd-simplysm-v14/service-common/README.md +34 -127
  245. package/claude/references/sd-simplysm-v14/service-common/_api-index.md +51 -0
  246. package/claude/references/sd-simplysm-v14/service-common/app-structure/app-structure-item.md +3 -1
  247. package/claude/references/sd-simplysm-v14/service-common/app-structure/get-flat-permissions.md +7 -1
  248. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules-chain.md +3 -1
  249. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules.md +3 -1
  250. package/claude/references/sd-simplysm-v14/service-common/events/define-event.md +7 -1
  251. package/claude/references/sd-simplysm-v14/service-common/protocol/create-service-protocol.md +8 -1
  252. package/claude/references/sd-simplysm-v14/service-common/protocol/protocol-config.md +3 -1
  253. package/claude/references/sd-simplysm-v14/service-common/protocol/service-add-event-listener-message.md +3 -1
  254. package/claude/references/sd-simplysm-v14/service-common/protocol/service-auth-message.md +3 -1
  255. package/claude/references/sd-simplysm-v14/service-common/protocol/service-emit-event-message.md +3 -1
  256. package/claude/references/sd-simplysm-v14/service-common/protocol/service-error-message.md +3 -1
  257. package/claude/references/sd-simplysm-v14/service-common/protocol/service-event-message.md +3 -1
  258. package/claude/references/sd-simplysm-v14/service-common/protocol/service-get-event-listener-infos-message.md +3 -1
  259. package/claude/references/sd-simplysm-v14/service-common/protocol/service-message.md +3 -1
  260. package/claude/references/sd-simplysm-v14/service-common/protocol/service-progress-message.md +3 -1
  261. package/claude/references/sd-simplysm-v14/service-common/protocol/service-remove-event-listener-message.md +3 -1
  262. package/claude/references/sd-simplysm-v14/service-common/protocol/service-request-message.md +3 -1
  263. package/claude/references/sd-simplysm-v14/service-common/protocol/service-response-message.md +3 -1
  264. package/claude/references/sd-simplysm-v14/service-common/service-types/app-structure-service.md +3 -1
  265. package/claude/references/sd-simplysm-v14/service-common/service-types/auto-update-service.md +3 -1
  266. package/claude/references/sd-simplysm-v14/service-common/service-types/orm-service.md +3 -1
  267. package/claude/references/sd-simplysm-v14/service-common/types/service-upload-result.md +3 -1
  268. package/claude/references/sd-simplysm-v14/service-server/README.md +50 -135
  269. package/claude/references/sd-simplysm-v14/service-server/_api-index.md +87 -0
  270. package/claude/references/sd-simplysm-v14/service-server/auth/auth-token-payload.md +3 -1
  271. package/claude/references/sd-simplysm-v14/service-server/auth/sign-jwt.md +3 -1
  272. package/claude/references/sd-simplysm-v14/service-server/auth/verify-jwt.md +3 -1
  273. package/claude/references/sd-simplysm-v14/service-server/core/auth.md +3 -1
  274. package/claude/references/sd-simplysm-v14/service-server/core/define-service.md +3 -1
  275. package/claude/references/sd-simplysm-v14/service-server/core/execute-service-method.md +3 -1
  276. package/claude/references/sd-simplysm-v14/service-server/core/service-context.md +3 -1
  277. package/claude/references/sd-simplysm-v14/service-server/legacy/handle-v1-connection.md +3 -1
  278. package/claude/references/sd-simplysm-v14/service-server/main/create-service-server.md +3 -1
  279. package/claude/references/sd-simplysm-v14/service-server/main/service-server.md +3 -1
  280. package/claude/references/sd-simplysm-v14/service-server/protocol/server-protocol-wrapper.md +3 -1
  281. package/claude/references/sd-simplysm-v14/service-server/services/app-structure-service.md +3 -1
  282. package/claude/references/sd-simplysm-v14/service-server/services/auto-update-service.md +3 -1
  283. package/claude/references/sd-simplysm-v14/service-server/services/orm-service.md +3 -1
  284. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-http-request.md +3 -1
  285. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-static-file.md +3 -1
  286. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-upload.md +3 -1
  287. package/claude/references/sd-simplysm-v14/service-server/transport-socket/service-socket.md +3 -1
  288. package/claude/references/sd-simplysm-v14/service-server/transport-socket/websocket-handler.md +3 -1
  289. package/claude/references/sd-simplysm-v14/service-server/types/service-server-options.md +3 -1
  290. package/claude/references/sd-simplysm-v14/service-server/utils/get-config.md +3 -1
  291. package/claude/references/sd-simplysm-v14/storage/README.md +17 -80
  292. package/claude/references/sd-simplysm-v14/storage/_api-index.md +26 -0
  293. package/claude/references/sd-simplysm-v14/storage/clients/ftp-storage-client.md +3 -1
  294. package/claude/references/sd-simplysm-v14/storage/clients/sftp-storage-client.md +3 -1
  295. package/claude/references/sd-simplysm-v14/storage/factory/storage-factory.md +1 -1
  296. package/claude/references/sd-simplysm-v14/storage/types/file-info.md +3 -1
  297. package/claude/references/sd-simplysm-v14/storage/types/storage-client.md +2 -0
  298. package/claude/references/sd-simplysm-v14/storage/types/storage-conn-config.md +3 -1
  299. package/claude/rules/sd-claude-rules.md +1 -1
  300. package/claude/skills/sd-dev/SKILL.md +62 -8
  301. package/claude/skills/sd-dev/subagent-preamble.md +22 -0
  302. package/package.json +1 -1
  303. package/claude/references/sd-simplysm-v14/angular/recipes/_common-rules.md +0 -336
  304. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-a-edit-save.md +0 -191
  305. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-b-delete-restore.md +0 -103
  306. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-c-modal-view.md +0 -198
  307. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-d-control-view.md +0 -109
  308. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-e-auxiliary.md +0 -87
  309. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-f-complex-detail.md +0 -202
  310. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail.md +0 -280
  311. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-a-inline-edit.md +0 -386
  312. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-b-selection.md +0 -215
  313. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-c-inline-delete.md +0 -64
  314. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-d-select-modal.md +0 -193
  315. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-e-readonly-modal.md +0 -140
  316. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-f-modal-edit.md +0 -123
  317. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-g-excel.md +0 -145
  318. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list.md +0 -377
  319. package/claude/references/sd-simplysm-v14/angular/recipes/data-select-button.md +0 -368
  320. package/claude/references/sd-simplysm-v14/angular/recipes/page-modal-container.md +0 -238
  321. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-content-type-data.md +0 -23
  322. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-drawing-data.md +0 -29
  323. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-relationship-data.md +0 -39
  324. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-shared-string-data.md +0 -42
  325. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-style-data.md +0 -97
  326. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-workbook-data.md +0 -22
  327. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-worksheet-data.md +0 -68
  328. package/claude/references/sd-simplysm-v14/excel/types/excel-xml.md +0 -15
@@ -1,5 +1,7 @@
1
1
  # CSS Classes
2
2
 
3
+ > **읽어야 하는 상황**: 레이아웃/유틸리티 클래스로 스타일링할 때. 커스텀 프로퍼티 오버라이드는 [variables.md](./variables.md), 테마 전환은 [themes.md](./themes.md) 참조.
4
+
3
5
  전역 유틸리티 CSS 클래스. `@layer base, theme-variant, utilities` 순서로 구성되며, 유틸리티 클래스는 `@layer utilities`에 정의된다.
4
6
 
5
7
  ## Layout
@@ -1,5 +1,7 @@
1
1
  # Mixins / Functions
2
2
 
3
+ > **읽어야 하는 상황**: SCSS에서 직접 mixin이나 function을 사용할 때.
4
+
3
5
  공개 SCSS mixin과 function. `scss/commons/_mixins.scss`에 정의된다.
4
6
 
5
7
  ## Mixins
@@ -1,5 +1,7 @@
1
1
  # Themes
2
2
 
3
+ > **읽어야 하는 상황**: 다크 모드 등 테마를 전환하거나 커스텀 테마를 추가할 때.
4
+
3
5
  ## `.sd-theme-dark`
4
6
 
5
7
  다크 모드 테마 클래스. `<body>`에 `SdThemeProvider`가 자동으로 토글한다.
@@ -1,5 +1,7 @@
1
1
  # CSS Custom Properties
2
2
 
3
+ > **읽어야 하는 상황**: 디자인 토큰(색상, 간격, 폰트 등)을 오버라이드할 때.
4
+
3
5
  `:root`에 선언되는 CSS 커스텀 프로퍼티. SCSS `$vars` 맵에서 `mixins.writeVars()`로 생성된다.
4
6
 
5
7
  ## Theme Colors
@@ -1,5 +1,7 @@
1
1
  # Type Utilities
2
2
 
3
+ > **읽어야 하는 상황**: InputSignal에서 값 타입을 추출하거나, undefined 포함 프로퍼티를 optional로 변환하는 타입 유틸리티가 필요할 때.
4
+
3
5
  컴포넌트/디렉티브 입력 시그널 타입 추출 유틸리티 모음.
4
6
 
5
7
  ## `DirectiveInputSignals`
@@ -0,0 +1,141 @@
1
+ # `SdBaseContainer`
2
+
3
+ > **읽어야 하는 상황**: CRUD 페이지/모달/컨트롤의 기본 컨테이너가 필요할 때 (busy 관리, 권한 검사, viewType별 레이아웃 분기).
4
+
5
+ CRUD 페이지/모달/컨트롤의 기본 컨테이너. busy 상태 관리, 공유 데이터 초기화 대기, 접근 권한 검사, viewType별 레이아웃 분기를 제공한다.
6
+ 보통 직접 사용하기보다 `SdCrudList`나 `SdCrudDetail`이 내부에서 사용한다. 목록-상세 분할 레이아웃(master-detail)처럼 커스텀 레이아웃이 필요할 때 직접 사용한다.
7
+
8
+ ## Import
9
+
10
+ ```typescript
11
+ import { SdBaseContainer } from "@simplysm/angular";
12
+ ```
13
+
14
+ ## Selector
15
+
16
+ `sd-base-container`
17
+
18
+ ## Inputs
19
+
20
+ | Input | Type | Default | Description |
21
+ |-------|------|---------|-------------|
22
+ | `initialized` | `boolean` | `false` | 외부 초기화 완료 여부. `true`일 때만 내부 콘텐츠가 렌더링된다. 데이터 로딩이 끝난 뒤 `true`로 설정해야 한다. |
23
+ | `restricted` | `boolean` | `false` | `true`이면 "사용권한이 없습니다" 메시지를 표시하고 콘텐츠를 렌더링하지 않는다. |
24
+ | `viewType` | `SdViewType` | **required** | `"page"` \| `"modal"` \| `"control"`. 레이아웃 구조를 결정한다. |
25
+
26
+ ## Two-way Bindings (model)
27
+
28
+ | Model | Type | Default | Description |
29
+ |-------|------|---------|-------------|
30
+ | `ready` | `boolean` | `false` | 공유 데이터(`SdSharedDataProvider.wait()`) 로딩 완료 시 컴포넌트 내부에서 `true`로 설정된다. 소비 컴포넌트는 이 값이 `true`가 된 후에 데이터 로딩을 시작해야 한다. |
31
+ | `busyCount` | `number` | `0` | 로딩 카운터. 0보다 크면 `SdBusyContainer`의 busy overlay가 표시된다. 비동기 작업 시작 시 `+1`, 완료 시 `-1`한다. |
32
+
33
+ ## Content Children (ng-template)
34
+
35
+ | Template Ref | 렌더링 위치 | Description |
36
+ |---|---|---|
37
+ | `#topbarTpl` | `viewType="page"`일 때 `<sd-topbar>` 내부 | 탑바 우측에 버튼(저장, 커스텀 명령 등)을 배치한다. `viewType`이 `"page"`가 아니면 무시된다. |
38
+ | `#commandTpl` | 콘텐츠 영역 상단 | `p-default` 패딩, `flex-row gap-default` 레이아웃의 명령 영역. 하단에 `bdb bdb-theme-gray-lightest` 테두리가 그려진다. |
39
+ | `#bottomCommandTpl` | 콘텐츠 영역 하단 | `p-sm-default` 패딩, `flex-row main-align-end gap-sm` 레이아웃의 명령 영역. 상단에 `bdt bdt-theme-gray-lightest` 테두리가 그려진다. 모달의 "확인" 버튼 등에 사용된다. |
40
+
41
+ **`ng-content`**: 위 템플릿 외의 일반 콘텐츠는 `<ng-content>`로 투영되어 상단 명령 영역과 하단 명령 영역 사이의 `flex-fill` 영역에 렌더링된다.
42
+
43
+ ## 내부 레이아웃 구조
44
+
45
+ ```
46
+ <sd-busy-container [busy]="initialized && busyCount > 0">
47
+ ┌─ restricted=true ─────────────────────────────────────┐
48
+ │ "'{viewTitle}'에 대한 사용권한이 없습니다" 메시지 │
49
+ └───────────────────────────────────────────────────────┘
50
+
51
+ ┌─ viewType="page" ─────────────────────────────────────┐
52
+ │ <sd-topbar-container> │
53
+ │ <sd-topbar> │
54
+ │ <h4>{viewTitle}</h4> │
55
+ │ [#topbarTpl 렌더링] │
56
+ │ </sd-topbar> │
57
+ │ [#content 렌더링] │
58
+ │ </sd-topbar-container> │
59
+ └───────────────────────────────────────────────────────┘
60
+
61
+ ┌─ viewType="modal" | "control" ────────────────────────┐
62
+ │ [#content 렌더링] │
63
+ └───────────────────────────────────────────────────────┘
64
+
65
+ ┌─ #content ────────────────────────────────────────────┐
66
+ │ <div class="flex-column fill"> │
67
+ │ [#commandTpl 영역] (있을 때만) │
68
+ │ <div class="flex-fill"> │
69
+ │ <ng-content /> ← 메인 콘텐츠 │
70
+ │ </div> │
71
+ │ [#bottomCommandTpl 영역] (있을 때만) │
72
+ │ </div> │
73
+ └───────────────────────────────────────────────────────┘
74
+ </sd-busy-container>
75
+ ```
76
+
77
+ ## 초기화 순서 (lifecycle)
78
+
79
+ 1. 컴포넌트 생성 시 `effect` 등록
80
+ 2. `restricted=true`이면 → 즉시 `ready=true` (공유 데이터 로딩 불필요)
81
+ 3. `restricted=false`이면 → `busyCount+1` → `SdSharedDataProvider.wait()` → `busyCount-1` → `ready=true`
82
+ 4. 소비 컴포넌트의 `effect`에서 `ready()`가 `true`임을 감지 → 데이터 로딩 → `initialized=true`
83
+ 5. `initialized=true`가 되면 콘텐츠 렌더링 시작
84
+
85
+ ## 의존성
86
+
87
+ - `SdSharedDataProvider` (abstract, 소비 프로젝트에서 구현체 provide 필요)
88
+ - `SdToastProvider` (에러 래핑용)
89
+ - `injectViewTitleSignal()` — 현재 뷰 타이틀을 가져와 탑바 `<h4>`와 권한 없음 메시지에 표시
90
+
91
+ ## Usage: master-detail 분할 레이아웃
92
+
93
+ 목록-상세 분할 뷰에서 `SdBaseContainer`를 직접 사용하는 패턴:
94
+
95
+ ```html
96
+ <sd-base-container
97
+ [(ready)]="ready"
98
+ [initialized]="initialized()"
99
+ [(busyCount)]="busyCount"
100
+ [restricted]="!perms().includes('use')"
101
+ [viewType]="viewType()"
102
+ >
103
+ <div class="flex-row fill">
104
+ <!-- 좌측: 목록 (control viewType) -->
105
+ <app-my-list
106
+ #headerSheet
107
+ selectMode="single"
108
+ class="flex-min bdr bdr-color-lighter"
109
+ />
110
+
111
+ <!-- 우측: 상세 (control viewType) -->
112
+ @let _selectedId = headerSheet.selectedKeys().first();
113
+ @if (_selectedId == null) {
114
+ <div class="flex-fill tx-theme-gray-default p-xxl" style="font-size: 48px">
115
+ <ng-icon [svg]="tablerArrowLeft" />
116
+ 선택하세요.
117
+ </div>
118
+ } @else {
119
+ <app-my-detail
120
+ class="flex-fill"
121
+ [itemId]="_selectedId"
122
+ (submitted)="headerSheet.doRefresh()"
123
+ />
124
+ }
125
+ </div>
126
+ </sd-base-container>
127
+ ```
128
+
129
+ ### 소비 컴포넌트 클래스 패턴
130
+
131
+ ```typescript
132
+ @Component({ /* ... */ })
133
+ export class MyView {
134
+ perms = injectPermsSignal(["my-module"], ["use"]);
135
+ viewType = injectViewTypeSignal();
136
+
137
+ ready = signal(false);
138
+ initialized = signal(true); // 직접 데이터를 로딩하지 않으므로 즉시 true
139
+ busyCount = signal(0);
140
+ }
141
+ ```
@@ -0,0 +1,273 @@
1
+ # `SdCrudDetail`
2
+
3
+ > **읽어야 하는 상황**: CRUD 상세 화면(폼 + 저장)을 만들 때. 목록 화면은 [`SdCrudList`](./sd-crud-list.md) 참조.
4
+
5
+ CRUD 상세 화면 스캐폴드. `SdBaseContainer`를 내부에 사용하며, 폼 제출(`Ctrl+S` 저장), readonly 모드, viewType별 저장 버튼 배치를 제공한다.
6
+
7
+ ## Import
8
+
9
+ ```typescript
10
+ import { SdCrudDetail } from "@simplysm/angular";
11
+ ```
12
+
13
+ ## Selector
14
+
15
+ `sd-crud-detail`
16
+
17
+ ## Inputs
18
+
19
+ | Input | Type | Default | Description |
20
+ |-------|------|---------|-------------|
21
+ | `initialized` | `boolean` | `false` | 외부 초기화 완료 여부. `true`일 때만 콘텐츠 렌더링. |
22
+ | `restricted` | `boolean` | `false` | `true`이면 "사용권한이 없습니다" 메시지 표시 (SdBaseContainer에 전달). |
23
+ | `readonly` | `boolean` | `false` | 읽기 전용 모드. `true`이면 저장 버튼이 숨겨지고 `<sd-form>` 대신 일반 `<div>`로 콘텐츠를 감싼다. |
24
+ | `viewType` | `SdViewType` | **required** | `"page"` \| `"modal"` \| `"control"`. 저장 버튼 위치와 레이아웃을 결정한다. |
25
+
26
+ ## Two-way Bindings (model)
27
+
28
+ | Model | Type | Default | Description |
29
+ |-------|------|---------|-------------|
30
+ | `ready` | `boolean` | `false` | SdBaseContainer의 공유 데이터 로딩 완료 시 `true`. |
31
+ | `busyCount` | `number` | `0` | 로딩 카운터. SdBaseContainer에 전달. |
32
+
33
+ ## Outputs
34
+
35
+ | Output | Type | Description |
36
+ |--------|------|-------------|
37
+ | `submit` | `void` | 폼 제출 시 발생. 저장 버튼 클릭, `Ctrl+S` 단축키, 또는 폼 내부 `Enter` 키 모두 이 이벤트를 트리거한다. |
38
+
39
+ ## Content Children (ng-template)
40
+
41
+ ### `#commandTpl` — 추가 명령 버튼 영역
42
+
43
+ viewType에 따라 렌더링 위치가 달라진다:
44
+
45
+ | viewType | 렌더링 위치 | 저장 버튼과의 관계 |
46
+ |----------|------------|-------------------|
47
+ | `page` | `<sd-topbar>` 내부 (저장 버튼 우측) | 저장 버튼 뒤에 이어서 렌더링 |
48
+ | `control` | 상단 명령 영역 (저장 버튼 우측) | 저장 버튼 뒤에 이어서 렌더링 |
49
+ | `modal` | 상단 명령 영역 | 저장 버튼은 하단에 별도 배치되므로 독립적 |
50
+
51
+ ```html
52
+ <ng-template #commandTpl>
53
+ @if (canEdit()) {
54
+ <sd-button [theme]="'danger'" (click)="onDeleteButtonClick()">
55
+ <ng-icon [svg]="tablerEraser" />
56
+ 삭제
57
+ </sd-button>
58
+ }
59
+ <sd-button [theme]="'link-info'" (click)="onSomeAction()">
60
+ <ng-icon [svg]="tablerSend" />
61
+ 추가동작
62
+ </sd-button>
63
+ </ng-template>
64
+ ```
65
+
66
+ ### `#bottomCommandTpl` — 하단 명령 버튼 영역
67
+
68
+ 하단 영역은 `viewType() === "modal" || bottomCommandTplRef()` 조건으로 표시된다. 즉, modal viewType이면 항상 표시되고, 다른 viewType에서는 사용자가 `#bottomCommandTpl`을 제공할 때만 표시된다. 하단 영역이 표시되면 "확인" 버튼이 **항상** 함께 추가된다 (viewType 무관). `#bottomCommandTpl`의 내용은 "확인" 버튼 **좌측**에 `flex-fill flex-row main-align-start gap-sm` 레이아웃으로 배치된다.
69
+
70
+ ```html
71
+ <ng-template #bottomCommandTpl>
72
+ <sd-button [size]="'sm'" (click)="onSomeBottomAction()">
73
+ 추가 하단 버튼
74
+ </sd-button>
75
+ </ng-template>
76
+ ```
77
+
78
+ ## Host Directives
79
+
80
+ - `SdCommandDirective` — `Ctrl+S` 키보드 단축키를 `sdSaveCommand` 이벤트로 변환. 이 이벤트가 발생하면 내부 `<sd-form>`의 `requestSubmit()`을 호출하여 폼 유효성 검사 후 `submit` 이벤트를 발생시킨다.
81
+
82
+ ## viewType별 저장 버튼 배치 상세
83
+
84
+ ### `viewType="page"`
85
+
86
+ ```
87
+ ┌─ sd-topbar ─────────────────────────────────────────┐
88
+ │ <h4>{viewTitle}</h4> │
89
+ │ [저장 버튼: link-primary] [#commandTpl 내용] │
90
+ └─────────────────────────────────────────────────────┘
91
+ ┌─ 콘텐츠 ────────────────────────────────────────────┐
92
+ │ <sd-form> │
93
+ │ <ng-content /> ← 폼 필드들 │
94
+ │ </sd-form> │
95
+ └─────────────────────────────────────────────────────┘
96
+ ```
97
+
98
+ - 저장 버튼: `<sd-button [theme]="'link-primary'">` + floppy 아이콘 + "저장 (CTRL+S)"
99
+ - `readonly=true`이면 저장 버튼 숨김, `<sd-form>` 대신 `<div class="fill">`
100
+
101
+ ### `viewType="control"`
102
+
103
+ ```
104
+ ┌─ 상단 명령 영역 ────────────────────────────────────┐
105
+ │ [저장 버튼: primary] [#commandTpl 내용] │
106
+ └─────────────────────────────────────────────────────┘
107
+ ┌─ 콘텐츠 ────────────────────────────────────────────┐
108
+ │ <sd-form> │
109
+ │ <ng-content /> ← 폼 필드들 │
110
+ │ </sd-form> │
111
+ └─────────────────────────────────────────────────────┘
112
+ ┌─ 하단 명령 영역 (bottomCommandTpl이 있을 때만) ─────┐
113
+ │ [#bottomCommandTpl 내용 (좌측)] [확인 버튼 (우측)]│
114
+ └─────────────────────────────────────────────────────┘
115
+ ```
116
+
117
+ - 저장 버튼: `<sd-button [theme]="'primary'">` + floppy 아이콘 + "저장 (CTRL+S)"
118
+ - bottomCommandTpl을 제공하면 하단에 확인 버튼도 함께 표시됨 (저장 버튼과 동일 동작: `formCtrl.requestSubmit()`)
119
+
120
+ ### `viewType="modal"`
121
+
122
+ ```
123
+ ┌─ 상단 명령 영역 (commandTpl이 있을 때만) ───────────┐
124
+ │ [#commandTpl 내용] │
125
+ └─────────────────────────────────────────────────────┘
126
+ ┌─ 콘텐츠 ────────────────────────────────────────────┐
127
+ │ <sd-form> │
128
+ │ <ng-content /> ← 폼 필드들 │
129
+ │ </sd-form> │
130
+ └─────────────────────────────────────────────────────┘
131
+ ┌─ 하단 명령 영역 (항상 표시) ────────────────────────┐
132
+ │ [#bottomCommandTpl 내용 (좌측)] [확인 버튼 (우측)]│
133
+ └─────────────────────────────────────────────────────┘
134
+ ```
135
+
136
+ - 확인 버튼: `<sd-button [size]="'sm'" [theme]="'primary'">확인</sd-button>` (클릭 시 `formCtrl.requestSubmit()` → `submit` 이벤트)
137
+ - `readonly=true`여도 확인 버튼은 항상 표시됨 (modal viewType 조건으로 하단 영역이 렌더링되므로)
138
+
139
+ ## readonly 모드 상세
140
+
141
+ `readonly=true`일 때:
142
+ - 모든 viewType에서 저장 버튼이 숨겨진다
143
+ - `<sd-form>` 대신 `<div class="fill">`로 콘텐츠를 감싼다 (폼 유효성 검사 비활성)
144
+ - `Ctrl+S` 단축키는 여전히 동작하지만 `formCtrl`이 없으므로 아무 효과 없음
145
+ - `#commandTpl`이 있으면 해당 영역은 여전히 표시된다 (삭제 버튼 등 readonly에서도 필요한 명령)
146
+
147
+ ## Usage: control viewType (master-detail 패턴)
148
+
149
+ ```typescript
150
+ @Component({
151
+ template: `
152
+ <sd-crud-detail
153
+ [viewType]="'control'"
154
+ [initialized]="initialized()"
155
+ [(busyCount)]="busyCount"
156
+ [readonly]="!canEdit()"
157
+ (submit)="onSubmit()"
158
+ >
159
+ <ng-template #commandTpl>
160
+ @if (canEdit()) {
161
+ <sd-button [theme]="'danger'" (click)="onDeleteButtonClick()">
162
+ <ng-icon [svg]="tablerEraser" />
163
+ 삭제
164
+ </sd-button>
165
+ }
166
+ <sd-button [theme]="'link-info'" (click)="onSpecialAction()">
167
+ <ng-icon [svg]="tablerSend" />
168
+ 특별동작
169
+ </sd-button>
170
+ </ng-template>
171
+
172
+ <div class="fill p-default">
173
+ <sd-dock-container>
174
+ <sd-dock class="pb-sm">
175
+ <div class="form-box-inline p-sm-default bd-radius-default bd bd-trans-light fill">
176
+ <div>
177
+ <label>문서번호</label>
178
+ <div>{{ data().code }}</div>
179
+ </div>
180
+ <div>
181
+ <label>날짜</label>
182
+ <sd-textfield
183
+ [type]="'date'"
184
+ [disabled]="!canEdit()"
185
+ [(value)]="data().dueDate"
186
+ (valueChange)="mark(data)"
187
+ />
188
+ </div>
189
+ </div>
190
+ </sd-dock>
191
+
192
+ <!-- 탭이나 서브 리스트 등 -->
193
+ <div class="fill">
194
+ <app-sub-list [(items)]="data().items" (itemsChange)="mark(data)" />
195
+ </div>
196
+ </sd-dock-container>
197
+ </div>
198
+ </sd-crud-detail>
199
+ `,
200
+ })
201
+ export class MyDetail {
202
+ instructionId = input.required<number>();
203
+ submitted = output<boolean>();
204
+
205
+ initialized = signal(false);
206
+ busyCount = signal(0);
207
+ data = signal<IData>({ code: "", items: [] });
208
+
209
+ private _orgData: IData | undefined;
210
+
211
+ canEdit = computed(() => this.perms().includes("edit") && this.data().state === "작성");
212
+
213
+ constructor() {
214
+ effect(() => {
215
+ this.instructionId(); // 변경 감지 트리거
216
+
217
+ void untracked(async () => {
218
+ this.busyCount.update((v) => v + 1);
219
+ await this._sdToast.try(async () => {
220
+ await this._refresh();
221
+ });
222
+ this.busyCount.update((v) => v - 1);
223
+ this.initialized.set(true);
224
+ });
225
+ });
226
+
227
+ setupCanDeactivate(() => this._checkIgnoreChanges());
228
+ }
229
+
230
+ async onSubmit(): Promise<void> {
231
+ if (this.busyCount() > 0) return;
232
+ // ... 저장 로직
233
+ await this._refresh();
234
+ this.submitted.emit(true);
235
+ }
236
+ }
237
+ ```
238
+
239
+ ## Usage: modal viewType
240
+
241
+ ```html
242
+ <sd-crud-detail
243
+ [(ready)]="ready"
244
+ [initialized]="initialized()"
245
+ [(busyCount)]="busyCount"
246
+ [viewType]="'modal'"
247
+ (submit)="onSubmit()"
248
+ >
249
+ <div class="p-default">
250
+ <div class="form-box-inline">
251
+ <div>
252
+ <label>이름</label>
253
+ <sd-textfield [(value)]="data().name" [required]="true" />
254
+ </div>
255
+ </div>
256
+ </div>
257
+ </sd-crud-detail>
258
+ ```
259
+
260
+ ## Anti-patterns
261
+
262
+ ```html
263
+ <!-- ❌ readonly일 때 commandTpl 안에 저장 버튼을 별도로 넣지 않는다 -->
264
+ <!-- SdCrudDetail이 viewType에 맞는 저장 버튼을 자동 배치한다 -->
265
+ <ng-template #commandTpl>
266
+ <sd-button (click)="onSave()">저장</sd-button> <!-- ❌ -->
267
+ </ng-template>
268
+
269
+ <!-- ✅ commandTpl에는 저장 외의 추가 명령만 넣는다 -->
270
+ <ng-template #commandTpl>
271
+ <sd-button [theme]="'danger'" (click)="onDelete()">삭제</sd-button> <!-- ✅ -->
272
+ </ng-template>
273
+ ```