@simplysm/sd-claude 14.0.50 → 14.0.52

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 (318) hide show
  1. package/claude/references/sd-frontend-design.md +10 -9
  2. package/claude/references/sd-simplysm-v14/angular/README.md +497 -0
  3. package/claude/references/sd-simplysm-v14/angular/bootstrap/provide-sd-angular.md +37 -0
  4. package/claude/references/sd-simplysm-v14/angular/bootstrap/sd-angular-config-provider.md +16 -0
  5. package/claude/references/sd-simplysm-v14/angular/directives/sd-command-directive.md +27 -0
  6. package/claude/references/sd-simplysm-v14/angular/directives/sd-events.md +25 -0
  7. package/claude/references/sd-simplysm-v14/angular/directives/sd-intersection-directive.md +36 -0
  8. package/claude/references/sd-simplysm-v14/angular/directives/sd-invalid.md +24 -0
  9. package/claude/references/sd-simplysm-v14/angular/directives/sd-resize-directive.md +42 -0
  10. package/claude/references/sd-simplysm-v14/angular/directives/sd-ripple.md +23 -0
  11. package/claude/references/sd-simplysm-v14/angular/directives/sd-router-link.md +38 -0
  12. package/claude/references/sd-simplysm-v14/angular/directives/sd-show-effect.md +18 -0
  13. package/claude/references/sd-simplysm-v14/angular/directives/sd-typed-template.md +69 -0
  14. package/claude/references/sd-simplysm-v14/angular/features/sd-address-search-modal.md +50 -0
  15. package/claude/references/sd-simplysm-v14/angular/features/sd-permission-table.md +20 -0
  16. package/claude/references/sd-simplysm-v14/angular/features/sd-shared-data-components.md +158 -0
  17. package/claude/references/sd-simplysm-v14/angular/features/sd-tiptap-editor.md +26 -0
  18. package/claude/references/sd-simplysm-v14/angular/pipes/format-pipe.md +41 -0
  19. package/claude/references/sd-simplysm-v14/angular/plugins/sd-global-error-handler.md +23 -0
  20. package/claude/references/sd-simplysm-v14/angular/plugins/sd-option-event-plugin.md +34 -0
  21. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-menu.md +65 -0
  22. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-modal-content-def.md +148 -0
  23. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-toast-content-def.md +73 -0
  24. package/claude/references/sd-simplysm-v14/angular/provider-types/shared-data-base.md +59 -0
  25. package/claude/references/sd-simplysm-v14/angular/providers/sd-activated-modal-provider.md +34 -0
  26. package/claude/references/sd-simplysm-v14/angular/providers/sd-app-structure-provider.md +81 -0
  27. package/claude/references/sd-simplysm-v14/angular/providers/sd-busy-provider.md +18 -0
  28. package/claude/references/sd-simplysm-v14/angular/providers/sd-file-dialog-provider.md +40 -0
  29. package/claude/references/sd-simplysm-v14/angular/providers/sd-local-storage-provider.md +20 -0
  30. package/claude/references/sd-simplysm-v14/angular/providers/sd-modal-provider.md +67 -0
  31. package/claude/references/sd-simplysm-v14/angular/providers/sd-navigate-window-provider.md +18 -0
  32. package/claude/references/sd-simplysm-v14/angular/providers/sd-print-provider.md +25 -0
  33. package/claude/references/sd-simplysm-v14/angular/providers/sd-service-client-factory-provider.md +43 -0
  34. package/claude/references/sd-simplysm-v14/angular/providers/sd-shared-data-provider.md +64 -0
  35. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-config-provider.md +46 -0
  36. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-log-provider.md +18 -0
  37. package/claude/references/sd-simplysm-v14/angular/providers/sd-theme-provider.md +38 -0
  38. package/claude/references/sd-simplysm-v14/angular/providers/sd-toast-provider.md +65 -0
  39. package/claude/references/sd-simplysm-v14/angular/recipes/_common-rules.md +336 -0
  40. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-a-edit-save.md +191 -0
  41. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-b-delete-restore.md +103 -0
  42. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-c-modal-view.md +198 -0
  43. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-d-control-view.md +109 -0
  44. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-e-auxiliary.md +87 -0
  45. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-f-complex-detail.md +202 -0
  46. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail.md +280 -0
  47. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-a-inline-edit.md +386 -0
  48. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-b-selection.md +215 -0
  49. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-c-inline-delete.md +64 -0
  50. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-d-select-modal.md +193 -0
  51. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-e-readonly-modal.md +140 -0
  52. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-f-modal-edit.md +123 -0
  53. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-g-excel.md +145 -0
  54. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list.md +377 -0
  55. package/claude/references/sd-simplysm-v14/angular/recipes/data-select-button.md +368 -0
  56. package/claude/references/sd-simplysm-v14/angular/recipes/page-modal-container.md +238 -0
  57. package/claude/references/sd-simplysm-v14/angular/styling/classes.md +149 -0
  58. package/claude/references/sd-simplysm-v14/angular/styling/mixins.md +100 -0
  59. package/claude/references/sd-simplysm-v14/angular/styling/themes.md +35 -0
  60. package/claude/references/sd-simplysm-v14/angular/styling/variables.md +147 -0
  61. package/claude/references/sd-simplysm-v14/angular/type-utilities/directive-input-signals.md +232 -0
  62. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-list.md +37 -0
  63. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-sheet.md +212 -0
  64. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-additional-button.md +26 -0
  65. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-anchor.md +31 -0
  66. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-button.md +103 -0
  67. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox-group.md +39 -0
  68. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox.md +81 -0
  69. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-date-range-picker.md +27 -0
  70. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-form.md +89 -0
  71. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-modal-select-button.md +54 -0
  72. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-numpad.md +26 -0
  73. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-range.md +26 -0
  74. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-select.md +68 -0
  75. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-shared-data-select.md +52 -0
  76. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-state-preset.md +37 -0
  77. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-switch.md +27 -0
  78. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textarea.md +33 -0
  79. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textfield.md +145 -0
  80. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock-container.md +64 -0
  81. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock.md +37 -0
  82. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-gap.md +26 -0
  83. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-board.md +96 -0
  84. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-lane.md +34 -0
  85. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban.md +29 -0
  86. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-collapse.md +35 -0
  87. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-pagination.md +26 -0
  88. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-container.md +49 -0
  89. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-menu.md +22 -0
  90. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-user.md +43 -0
  91. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-tab.md +51 -0
  92. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-container.md +97 -0
  93. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-menu.md +23 -0
  94. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-user.md +38 -0
  95. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar.md +30 -0
  96. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-busy-container.md +69 -0
  97. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-confirm-modal.md +30 -0
  98. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-dropdown.md +40 -0
  99. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-modal.md +34 -0
  100. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-prompt-modal.md +30 -0
  101. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-toast.md +35 -0
  102. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-barcode.md +36 -0
  103. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-calendar.md +34 -0
  104. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-echarts.md +32 -0
  105. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-label.md +24 -0
  106. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-note.md +23 -0
  107. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-progress.md +23 -0
  108. package/claude/references/sd-simplysm-v14/angular/utils/inject-routing-signals.md +161 -0
  109. package/claude/references/sd-simplysm-v14/angular/utils/inject-sd-system-config-resource.md +35 -0
  110. package/claude/references/sd-simplysm-v14/angular/utils/mark.md +43 -0
  111. package/claude/references/sd-simplysm-v14/angular/utils/selection-managers.md +96 -0
  112. package/claude/references/sd-simplysm-v14/angular/utils/set-safe-style.md +19 -0
  113. package/claude/references/sd-simplysm-v14/angular/utils/setup-functions.md +93 -0
  114. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/README.md +38 -0
  115. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/apk-installer/apk-installer.md +115 -0
  116. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/auto-update/auto-update.md +113 -0
  117. package/claude/references/sd-simplysm-v14/capacitor-plugin-file-system/README.md +197 -0
  118. package/claude/references/sd-simplysm-v14/capacitor-plugin-intent/README.md +235 -0
  119. package/claude/references/sd-simplysm-v14/capacitor-plugin-usb-storage/README.md +251 -0
  120. package/claude/references/sd-simplysm-v14/core-browser/README.md +52 -0
  121. package/claude/references/sd-simplysm-v14/core-browser/extensions/copy-paste.md +59 -0
  122. package/claude/references/sd-simplysm-v14/core-browser/extensions/element-prototype-extensions.md +137 -0
  123. package/claude/references/sd-simplysm-v14/core-browser/extensions/get-bounds.md +84 -0
  124. package/claude/references/sd-simplysm-v14/core-browser/utils/download-blob.md +59 -0
  125. package/claude/references/sd-simplysm-v14/core-browser/utils/fetch-url-bytes.md +91 -0
  126. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-store.md +131 -0
  127. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-virtual-fs.md +121 -0
  128. package/claude/references/sd-simplysm-v14/core-browser/utils/open-file-dialog.md +60 -0
  129. package/claude/references/sd-simplysm-v14/core-common/README.md +179 -0
  130. package/claude/references/sd-simplysm-v14/core-common/errors/argument-error.md +26 -0
  131. package/claude/references/sd-simplysm-v14/core-common/errors/not-implemented-error.md +33 -0
  132. package/claude/references/sd-simplysm-v14/core-common/errors/sd-error.md +38 -0
  133. package/claude/references/sd-simplysm-v14/core-common/errors/timeout-error.md +36 -0
  134. package/claude/references/sd-simplysm-v14/core-common/extensions/array.md +125 -0
  135. package/claude/references/sd-simplysm-v14/core-common/extensions/map.md +43 -0
  136. package/claude/references/sd-simplysm-v14/core-common/extensions/set.md +35 -0
  137. package/claude/references/sd-simplysm-v14/core-common/features/debounce-queue.md +48 -0
  138. package/claude/references/sd-simplysm-v14/core-common/features/event-emitter.md +52 -0
  139. package/claude/references/sd-simplysm-v14/core-common/features/serial-queue.md +44 -0
  140. package/claude/references/sd-simplysm-v14/core-common/type-utils/common-types.md +100 -0
  141. package/claude/references/sd-simplysm-v14/core-common/type-utils/env.md +42 -0
  142. package/claude/references/sd-simplysm-v14/core-common/types/date-only.md +86 -0
  143. package/claude/references/sd-simplysm-v14/core-common/types/date-time.md +106 -0
  144. package/claude/references/sd-simplysm-v14/core-common/types/lazy-gc-map.md +59 -0
  145. package/claude/references/sd-simplysm-v14/core-common/types/time.md +62 -0
  146. package/claude/references/sd-simplysm-v14/core-common/types/uuid.md +41 -0
  147. package/claude/references/sd-simplysm-v14/core-common/utils/bytes.md +36 -0
  148. package/claude/references/sd-simplysm-v14/core-common/utils/dt.md +60 -0
  149. package/claude/references/sd-simplysm-v14/core-common/utils/err.md +26 -0
  150. package/claude/references/sd-simplysm-v14/core-common/utils/json.md +58 -0
  151. package/claude/references/sd-simplysm-v14/core-common/utils/num.md +56 -0
  152. package/claude/references/sd-simplysm-v14/core-common/utils/obj.md +107 -0
  153. package/claude/references/sd-simplysm-v14/core-common/utils/path.md +30 -0
  154. package/claude/references/sd-simplysm-v14/core-common/utils/primitive.md +28 -0
  155. package/claude/references/sd-simplysm-v14/core-common/utils/str.md +63 -0
  156. package/claude/references/sd-simplysm-v14/core-common/utils/template-strings.md +49 -0
  157. package/claude/references/sd-simplysm-v14/core-common/utils/transfer.md +35 -0
  158. package/claude/references/sd-simplysm-v14/core-common/utils/wait.md +35 -0
  159. package/claude/references/sd-simplysm-v14/core-common/utils/xml.md +49 -0
  160. package/claude/references/sd-simplysm-v14/core-common/utils/zip-archive.md +77 -0
  161. package/claude/references/sd-simplysm-v14/core-node/README.md +59 -0
  162. package/claude/references/sd-simplysm-v14/core-node/features/fs-watcher.md +110 -0
  163. package/claude/references/sd-simplysm-v14/core-node/logging/create-file-reporter.md +78 -0
  164. package/claude/references/sd-simplysm-v14/core-node/logging/pretty-reporter.md +38 -0
  165. package/claude/references/sd-simplysm-v14/core-node/logging/setup-consola.md +77 -0
  166. package/claude/references/sd-simplysm-v14/core-node/utils/cpx.md +128 -0
  167. package/claude/references/sd-simplysm-v14/core-node/utils/fsx.md +168 -0
  168. package/claude/references/sd-simplysm-v14/core-node/utils/pathx.md +73 -0
  169. package/claude/references/sd-simplysm-v14/core-node/worker/create-worker.md +85 -0
  170. package/claude/references/sd-simplysm-v14/core-node/worker/worker.md +160 -0
  171. package/claude/references/sd-simplysm-v14/excel/README.md +66 -0
  172. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-cell.md +79 -0
  173. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-col.md +36 -0
  174. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-row.md +34 -0
  175. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-workbook.md +93 -0
  176. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-worksheet.md +147 -0
  177. package/claude/references/sd-simplysm-v14/excel/types/excel-address-point.md +33 -0
  178. package/claude/references/sd-simplysm-v14/excel/types/excel-style-options.md +57 -0
  179. package/claude/references/sd-simplysm-v14/excel/types/excel-value-type.md +28 -0
  180. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-content-type-data.md +23 -0
  181. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-drawing-data.md +29 -0
  182. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-relationship-data.md +39 -0
  183. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-shared-string-data.md +42 -0
  184. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-style-data.md +97 -0
  185. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-workbook-data.md +22 -0
  186. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-worksheet-data.md +68 -0
  187. package/claude/references/sd-simplysm-v14/excel/types/excel-xml.md +15 -0
  188. package/claude/references/sd-simplysm-v14/excel/utilities/excel-utils.md +101 -0
  189. package/claude/references/sd-simplysm-v14/excel/wrapper/excel-wrapper.md +108 -0
  190. package/claude/references/sd-simplysm-v14/lint/README.md +183 -0
  191. package/claude/references/sd-simplysm-v14/orm-common/README.md +156 -0
  192. package/claude/references/sd-simplysm-v14/orm-common/core/db-context.md +208 -0
  193. package/claude/references/sd-simplysm-v14/orm-common/core/db-transaction-error.md +64 -0
  194. package/claude/references/sd-simplysm-v14/orm-common/expression/expr-unit.md +62 -0
  195. package/claude/references/sd-simplysm-v14/orm-common/expression/expr.md +198 -0
  196. package/claude/references/sd-simplysm-v14/orm-common/models/migration.md +37 -0
  197. package/claude/references/sd-simplysm-v14/orm-common/query-builder/create-query-builder.md +80 -0
  198. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/executable.md +54 -0
  199. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/parse-search-query.md +75 -0
  200. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/queryable.md +238 -0
  201. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/column-builder.md +63 -0
  202. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/foreign-key-builder.md +137 -0
  203. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/index-builder.md +54 -0
  204. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/procedure.md +67 -0
  205. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/table.md +95 -0
  206. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/view.md +71 -0
  207. package/claude/references/sd-simplysm-v14/orm-common/types/data-type.md +146 -0
  208. package/claude/references/sd-simplysm-v14/orm-common/types/dialect.md +151 -0
  209. package/claude/references/sd-simplysm-v14/orm-common/types/expr.md +175 -0
  210. package/claude/references/sd-simplysm-v14/orm-common/types/parse-query-result.md +58 -0
  211. package/claude/references/sd-simplysm-v14/orm-common/types/query-def.md +224 -0
  212. package/claude/references/sd-simplysm-v14/orm-node/README.md +65 -0
  213. package/claude/references/sd-simplysm-v14/orm-node/connections/mssql-db-conn.md +85 -0
  214. package/claude/references/sd-simplysm-v14/orm-node/connections/mysql-db-conn.md +83 -0
  215. package/claude/references/sd-simplysm-v14/orm-node/connections/postgresql-db-conn.md +86 -0
  216. package/claude/references/sd-simplysm-v14/orm-node/core/create-db-conn.md +62 -0
  217. package/claude/references/sd-simplysm-v14/orm-node/core/create-orm.md +107 -0
  218. package/claude/references/sd-simplysm-v14/orm-node/core/node-db-context-executor.md +50 -0
  219. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-config.md +91 -0
  220. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-constants.md +33 -0
  221. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn.md +60 -0
  222. package/claude/references/sd-simplysm-v14/orm-node/types/get-dialect-from-config.md +17 -0
  223. package/{README.md → claude/references/sd-simplysm-v14/sd-claude/README.md} +85 -84
  224. package/{docs → claude/references/sd-simplysm-v14/sd-claude}/assets.md +2 -2
  225. package/{docs → claude/references/sd-simplysm-v14/sd-claude}/hooks.md +15 -1
  226. package/claude/references/sd-simplysm-v14/sd-cli/README.md +138 -0
  227. package/claude/references/sd-simplysm-v14/sd-cli/angular-vite-plugin/sd-angular-plugin.md +60 -0
  228. package/claude/references/sd-simplysm-v14/sd-cli/config/build-target.md +31 -0
  229. package/claude/references/sd-simplysm-v14/sd-cli/config/npm-config.md +27 -0
  230. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-browser-support-config.md +19 -0
  231. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-build-package-config.md +21 -0
  232. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-capacitor-config.md +109 -0
  233. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-client-package-config.md +33 -0
  234. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-config.md +78 -0
  235. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-electron-config.md +27 -0
  236. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-package-config.md +18 -0
  237. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-post-publish-script-config.md +19 -0
  238. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-publish-config.md +72 -0
  239. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-pwa-config.md +41 -0
  240. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-scripts-package-config.md +19 -0
  241. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-server-package-config.md +32 -0
  242. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-watch-hook-config.md +19 -0
  243. package/claude/references/sd-simplysm-v14/sd-cli/ts-compiler/sd-ts-compiler.md +158 -0
  244. package/claude/references/sd-simplysm-v14/service-client/README.md +74 -0
  245. package/claude/references/sd-simplysm-v14/service-client/features/event-client.md +93 -0
  246. package/claude/references/sd-simplysm-v14/service-client/features/file-client.md +63 -0
  247. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-connector.md +89 -0
  248. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-db-context-executor.md +31 -0
  249. package/claude/references/sd-simplysm-v14/service-client/main/service-client.md +206 -0
  250. package/claude/references/sd-simplysm-v14/service-client/protocol/client-protocol-wrapper.md +64 -0
  251. package/claude/references/sd-simplysm-v14/service-client/transport/service-transport.md +68 -0
  252. package/claude/references/sd-simplysm-v14/service-client/transport/socket-provider.md +100 -0
  253. package/claude/references/sd-simplysm-v14/service-client/types/blob-input.md +7 -0
  254. package/claude/references/sd-simplysm-v14/service-client/types/browser-worker.md +47 -0
  255. package/claude/references/sd-simplysm-v14/service-client/types/file-collection.md +21 -0
  256. package/claude/references/sd-simplysm-v14/service-client/types/service-connection-options.md +22 -0
  257. package/claude/references/sd-simplysm-v14/service-client/types/service-progress.md +39 -0
  258. package/claude/references/sd-simplysm-v14/service-common/README.md +161 -0
  259. package/claude/references/sd-simplysm-v14/service-common/app-structure/app-structure-item.md +107 -0
  260. package/claude/references/sd-simplysm-v14/service-common/app-structure/get-flat-permissions.md +57 -0
  261. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules-chain.md +23 -0
  262. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules.md +42 -0
  263. package/claude/references/sd-simplysm-v14/service-common/events/define-event.md +68 -0
  264. package/claude/references/sd-simplysm-v14/service-common/protocol/create-service-protocol.md +93 -0
  265. package/claude/references/sd-simplysm-v14/service-common/protocol/protocol-config.md +21 -0
  266. package/claude/references/sd-simplysm-v14/service-common/protocol/service-add-event-listener-message.md +23 -0
  267. package/claude/references/sd-simplysm-v14/service-common/protocol/service-auth-message.md +17 -0
  268. package/claude/references/sd-simplysm-v14/service-common/protocol/service-emit-event-message.md +21 -0
  269. package/claude/references/sd-simplysm-v14/service-common/protocol/service-error-message.md +29 -0
  270. package/claude/references/sd-simplysm-v14/service-common/protocol/service-event-message.md +21 -0
  271. package/claude/references/sd-simplysm-v14/service-common/protocol/service-get-event-listener-infos-message.md +19 -0
  272. package/claude/references/sd-simplysm-v14/service-common/protocol/service-message.md +52 -0
  273. package/claude/references/sd-simplysm-v14/service-common/protocol/service-progress-message.md +21 -0
  274. package/claude/references/sd-simplysm-v14/service-common/protocol/service-remove-event-listener-message.md +19 -0
  275. package/claude/references/sd-simplysm-v14/service-common/protocol/service-request-message.md +17 -0
  276. package/claude/references/sd-simplysm-v14/service-common/protocol/service-response-message.md +17 -0
  277. package/claude/references/sd-simplysm-v14/service-common/service-types/app-structure-service.md +15 -0
  278. package/claude/references/sd-simplysm-v14/service-common/service-types/auto-update-service.md +20 -0
  279. package/claude/references/sd-simplysm-v14/service-common/service-types/orm-service.md +61 -0
  280. package/claude/references/sd-simplysm-v14/service-common/types/service-upload-result.md +19 -0
  281. package/claude/references/sd-simplysm-v14/service-server/README.md +162 -0
  282. package/claude/references/sd-simplysm-v14/service-server/auth/auth-token-payload.md +18 -0
  283. package/claude/references/sd-simplysm-v14/service-server/auth/sign-jwt.md +30 -0
  284. package/claude/references/sd-simplysm-v14/service-server/auth/verify-jwt.md +35 -0
  285. package/claude/references/sd-simplysm-v14/service-server/core/auth.md +64 -0
  286. package/claude/references/sd-simplysm-v14/service-server/core/define-service.md +81 -0
  287. package/claude/references/sd-simplysm-v14/service-server/core/execute-service-method.md +43 -0
  288. package/claude/references/sd-simplysm-v14/service-server/core/service-context.md +79 -0
  289. package/claude/references/sd-simplysm-v14/service-server/legacy/handle-v1-connection.md +25 -0
  290. package/claude/references/sd-simplysm-v14/service-server/main/create-service-server.md +32 -0
  291. package/claude/references/sd-simplysm-v14/service-server/main/service-server.md +113 -0
  292. package/claude/references/sd-simplysm-v14/service-server/protocol/server-protocol-wrapper.md +35 -0
  293. package/claude/references/sd-simplysm-v14/service-server/services/app-structure-service.md +59 -0
  294. package/claude/references/sd-simplysm-v14/service-server/services/auto-update-service.md +34 -0
  295. package/claude/references/sd-simplysm-v14/service-server/services/orm-service.md +43 -0
  296. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-http-request.md +33 -0
  297. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-static-file.md +29 -0
  298. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-upload.md +33 -0
  299. package/claude/references/sd-simplysm-v14/service-server/transport-socket/service-socket.md +64 -0
  300. package/claude/references/sd-simplysm-v14/service-server/transport-socket/websocket-handler.md +57 -0
  301. package/claude/references/sd-simplysm-v14/service-server/types/service-server-options.md +36 -0
  302. package/claude/references/sd-simplysm-v14/service-server/utils/get-config.md +29 -0
  303. package/claude/references/sd-simplysm-v14/storage/README.md +99 -0
  304. package/claude/references/sd-simplysm-v14/storage/clients/ftp-storage-client.md +99 -0
  305. package/claude/references/sd-simplysm-v14/storage/clients/sftp-storage-client.md +108 -0
  306. package/claude/references/sd-simplysm-v14/storage/factory/storage-factory.md +114 -0
  307. package/claude/references/sd-simplysm-v14/storage/types/file-info.md +32 -0
  308. package/claude/references/sd-simplysm-v14/storage/types/storage-client.md +55 -0
  309. package/claude/references/sd-simplysm-v14/storage/types/storage-conn-config.md +34 -0
  310. package/claude/rules/sd-claude-rules.md +8 -8
  311. package/claude/rules/sd-simplysm-v14.md +33 -0
  312. package/claude/skills/sd-claude-docs/SKILL.md +41 -24
  313. package/claude/skills/sd-claude-docs/references/package-docs.md +240 -116
  314. package/claude/skills/sd-inner-debug/SKILL.md +1 -1
  315. package/claude/skills/sd-inner-review/SKILL.md +4 -2
  316. package/package.json +2 -3
  317. /package/{docs → claude/references/sd-simplysm-v14/sd-claude}/cli.md +0 -0
  318. /package/{docs → claude/references/sd-simplysm-v14/sd-claude}/scripts.md +0 -0
@@ -0,0 +1,235 @@
1
+ # @simplysm/capacitor-plugin-intent
2
+
3
+ > Android 인텐트 플러그인. 브로드캐스트 송수신, 실행 인텐트 조회, 새 인텐트 이벤트 수신, `startActivityForResult`를 제공한다. 산업용 디바이스 연동(바코드 스캐너, PDA 등)을 위해 설계되었다. `@capacitor/core ^7` peerDependency. 외부 런타임 의존성 없음.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @simplysm/capacitor-plugin-intent
9
+ ```
10
+
11
+ ## 하려는 작업 → 먼저 읽을 파일
12
+
13
+ | 작업 | 먼저 읽을 파일 |
14
+ |------|----------------|
15
+ | 바코드 스캐너 등 브로드캐스트 수신 | 이 문서의 `Intent.subscribe` |
16
+ | 브로드캐스트 전송 (스캔 트리거 등) | 이 문서의 `Intent.send` |
17
+ | 외부 Activity 실행 후 결과 수신 | 이 문서의 `Intent.startActivityForResult` |
18
+ | 앱 실행 인텐트 데이터 조회 | 이 문서의 `Intent.getLaunchIntent` |
19
+
20
+ ## API Overview
21
+
22
+ ### `Intent`
23
+
24
+ Android 인텐트 플러그인 정적 파사드 클래스.
25
+
26
+ #### When to use
27
+
28
+ - ✅ 산업용 디바이스(바코드 스캐너, PDA)에서 브로드캐스트 수신/전송이 필요할 때
29
+ - ✅ 외부 앱(결제 등)을 `startActivityForResult`로 호출하고 결과를 받을 때
30
+ - ✅ 딥링크 또는 실행 인텐트 데이터를 조회할 때
31
+ - ❌ 브라우저 환경에서 실제 동작 기대 → 웹 폴백은 경고 로그만 표시하고 스텁 값을 반환한다
32
+
33
+ #### Signature
34
+
35
+ ```typescript
36
+ export abstract class Intent {
37
+ static async subscribe(
38
+ filters: string[],
39
+ callback: (result: IntentResult) => void,
40
+ ): Promise<() => Promise<void>>;
41
+ static async unsubscribeAll(): Promise<void>;
42
+ static async send(options: { action: string; extras?: Record<string, unknown> }): Promise<void>;
43
+ static async getLaunchIntent(): Promise<IntentResult>;
44
+ static async addListener(
45
+ eventName: "newIntent",
46
+ callback: (result: IntentResult) => void,
47
+ ): Promise<PluginListenerHandle>;
48
+ static async removeAllListeners(): Promise<void>;
49
+ static async startActivityForResult(
50
+ options: StartActivityForResultOptions,
51
+ ): Promise<StartActivityForResultResult>;
52
+ }
53
+ ```
54
+
55
+ #### Members
56
+
57
+ | Member | Kind | Return | Description |
58
+ |--------|------|--------|-------------|
59
+ | `subscribe` | static method | `Promise<() => Promise<void>>` | 브로드캐스트 수신기 등록. 구독 해제 함수를 반환한다. 초기 resolve 콜백(`action == null`)은 자동 필터링된다. |
60
+ | `unsubscribeAll` | static method | `Promise<void>` | 모든 브로드캐스트 수신기 구독 해제 |
61
+ | `send` | static method | `Promise<void>` | 브로드캐스트 전송 |
62
+ | `getLaunchIntent` | static method | `Promise<IntentResult>` | 앱 실행 인텐트 조회 |
63
+ | `addListener` | static method | `Promise<PluginListenerHandle>` | 앱 실행 중 수신되는 새 인텐트 이벤트 리스너 등록. `handle.remove()`로 해제한다. |
64
+ | `removeAllListeners` | static method | `Promise<void>` | 모든 이벤트 리스너 제거 |
65
+ | `startActivityForResult` | static method | `Promise<StartActivityForResultResult>` | 외부 Activity를 실행하고 결과를 수신한다 |
66
+
67
+ #### Usage
68
+
69
+ ##### 최소 예제 — 브로드캐스트 수신
70
+
71
+ ```typescript
72
+ import { Intent } from "@simplysm/capacitor-plugin-intent";
73
+
74
+ const unsub = await Intent.subscribe(
75
+ ["com.symbol.datawedge.api.RESULT_ACTION"],
76
+ (result) => {
77
+ // result.extras에서 스캔 데이터 처리
78
+ },
79
+ );
80
+
81
+ // 구독 해제
82
+ await unsub();
83
+ ```
84
+
85
+ ##### 전형 예제 — 브로드캐스트 전송
86
+
87
+ ```typescript
88
+ import { Intent } from "@simplysm/capacitor-plugin-intent";
89
+
90
+ await Intent.send({
91
+ action: "com.symbol.datawedge.api.ACTION",
92
+ extras: {
93
+ "com.symbol.datawedge.api.SOFT_SCAN_TRIGGER": "TOGGLE_SCANNING",
94
+ },
95
+ });
96
+ ```
97
+
98
+ ##### 전형 예제 — startActivityForResult
99
+
100
+ ```typescript
101
+ import { Intent } from "@simplysm/capacitor-plugin-intent";
102
+
103
+ const result = await Intent.startActivityForResult({
104
+ action: "com.example.PAY",
105
+ extras: { amount: 1000 },
106
+ });
107
+ if (result.resultCode === -1) {
108
+ // RESULT_OK — result.data?.extras에서 결과 데이터 추출
109
+ }
110
+ ```
111
+
112
+ #### 🚫 Anti-patterns
113
+
114
+ ##### `subscribe()` 콜백에서 초기 resolve를 처리
115
+
116
+ ```typescript
117
+ // ❌ subscribe가 반환하는 초기 콜백을 처리하려 함
118
+ const unsub = await Intent.subscribe(["action"], (result) => {
119
+ processData(result.extras!); // 초기 호출 시 extras가 undefined
120
+ });
121
+
122
+ // ✅ Intent 파사드가 action == null인 초기 resolve를 이미 필터링한다.
123
+ // 콜백은 실제 브로드캐스트만 수신하므로 안전하게 처리 가능.
124
+ const unsub = await Intent.subscribe(["action"], (result) => {
125
+ if (result.extras != null) {
126
+ processData(result.extras);
127
+ }
128
+ });
129
+ ```
130
+
131
+ **근거**: Capacitor 플러그인 레벨에서 `subscribe()`는 `{ id }`만 포함된 초기 resolve 콜백을 한 번 호출한다. `Intent` 파사드가 `result.action != null` 조건으로 이를 필터링하지만, extras 접근 시에는 방어적으로 null 체크하는 것이 안전하다.
132
+
133
+ ---
134
+
135
+ ### `IntentResult`
136
+
137
+ 브로드캐스트 또는 인텐트 결과 데이터 인터페이스.
138
+
139
+ ```typescript
140
+ export interface IntentResult {
141
+ action?: string;
142
+ extras?: Record<string, unknown>;
143
+ }
144
+ ```
145
+
146
+ | Field | Type | Description |
147
+ |-------|------|-------------|
148
+ | `action` | `string \| undefined` | 브로드캐스트 액션 |
149
+ | `extras` | `Record<string, unknown> \| undefined` | 추가 데이터 |
150
+
151
+ ---
152
+
153
+ ### `StartActivityForResultOptions`
154
+
155
+ `startActivityForResult` 호출 시 전달하는 옵션 인터페이스. 모든 필드가 optional이다.
156
+
157
+ ```typescript
158
+ export interface StartActivityForResultOptions {
159
+ action?: string;
160
+ uri?: string;
161
+ extras?: Record<string, unknown>;
162
+ type?: string;
163
+ packageName?: string;
164
+ className?: string;
165
+ flags?: number;
166
+ }
167
+ ```
168
+
169
+ | Field | Type | Description |
170
+ |-------|------|-------------|
171
+ | `action` | `string \| undefined` | Intent 액션 |
172
+ | `uri` | `string \| undefined` | Intent 데이터 URI |
173
+ | `extras` | `Record<string, unknown> \| undefined` | 추가 데이터 |
174
+ | `type` | `string \| undefined` | MIME type |
175
+ | `packageName` | `string \| undefined` | 특정 앱 지정 |
176
+ | `className` | `string \| undefined` | 특정 Activity 지정 |
177
+ | `flags` | `number \| undefined` | Intent flags |
178
+
179
+ ---
180
+
181
+ ### `StartActivityForResultResult`
182
+
183
+ `startActivityForResult` 호출의 반환 결과 인터페이스.
184
+
185
+ ```typescript
186
+ export interface StartActivityForResultResult {
187
+ resultCode: number;
188
+ data?: {
189
+ action?: string;
190
+ uri?: string;
191
+ extras?: Record<string, unknown>;
192
+ };
193
+ }
194
+ ```
195
+
196
+ | Field | Type | Description |
197
+ |-------|------|-------------|
198
+ | `resultCode` | `number` | 결과 코드. `-1`: RESULT_OK, `0`: RESULT_CANCELED |
199
+ | `data` | `object \| undefined` | 결과 데이터 |
200
+ | `data.action` | `string \| undefined` | 결과 인텐트 액션 |
201
+ | `data.uri` | `string \| undefined` | 결과 인텐트 데이터 URI |
202
+ | `data.extras` | `Record<string, unknown> \| undefined` | 결과 인텐트 추가 데이터 |
203
+
204
+ ---
205
+
206
+ ### `IntentPlugin`
207
+
208
+ Capacitor 네이티브 플러그인 인터페이스. 직접 사용하지 않고 `Intent` 파사드를 통해 접근한다. 타입 참조 목적으로만 export된다.
209
+
210
+ ```typescript
211
+ export interface IntentPlugin {
212
+ subscribe(
213
+ options: { filters: string[] },
214
+ callback: (result: IntentResult) => void,
215
+ ): Promise<{ id: string }>;
216
+ unsubscribe(options: { id: string }): Promise<void>;
217
+ unsubscribeAll(): Promise<void>;
218
+ send(options: { action: string; extras?: Record<string, unknown> }): Promise<void>;
219
+ getLaunchIntent(): Promise<IntentResult>;
220
+ addListener(
221
+ eventName: "newIntent",
222
+ listenerFunc: (data: IntentResult) => void,
223
+ ): Promise<PluginListenerHandle>;
224
+ removeAllListeners(): Promise<void>;
225
+ startActivityForResult(
226
+ options: StartActivityForResultOptions,
227
+ ): Promise<StartActivityForResultResult>;
228
+ }
229
+ ```
230
+
231
+ ## 이 패키지를 쓰지 말아야 할 때
232
+
233
+ - 파일 시스템 접근 → [`@simplysm/capacitor-plugin-file-system`](../capacitor-plugin-file-system/README.md)
234
+ - APK 설치 → [`@simplysm/capacitor-plugin-auto-update`](../capacitor-plugin-auto-update/README.md)
235
+ - USB 저장 장치 접근 → [`@simplysm/capacitor-plugin-usb-storage`](../capacitor-plugin-usb-storage/README.md)
@@ -0,0 +1,251 @@
1
+ # @simplysm/capacitor-plugin-usb-storage
2
+
3
+ > Capacitor USB 저장소 플러그인. Android에서 libaums 라이브러리를 통해 USB Mass Storage 장치를 열거하고 파일을 읽는다. 브라우저에서는 IndexedDB 기반 가상 USB 저장소로 에뮬레이션한다. `@capacitor/core ^7` peerDependency.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @simplysm/capacitor-plugin-usb-storage
9
+ ```
10
+
11
+ ## 하려는 작업 → 먼저 읽을 파일
12
+
13
+ | 작업 | 먼저 읽을 파일 |
14
+ |------|----------------|
15
+ | USB 장치 열거 및 권한 요청 | 이 문서의 `UsbStorage` 섹션 |
16
+ | USB 장치에서 파일 읽기 | 이 문서의 `UsbStorage.readFile` |
17
+ | 브라우저에서 가상 USB 테스트 | 이 문서의 `Browser-Only Testing API` 섹션 |
18
+
19
+ ## API Overview
20
+
21
+ ### `UsbStorage`
22
+
23
+ USB 저장 장치 접근 정적 파사드 클래스. 모든 장치 접근 메서드는 `UsbDeviceFilter`(`vendorId` + `productId`)로 대상 장치를 식별한다.
24
+
25
+ #### When to use
26
+
27
+ - ✅ Android에서 USB Mass Storage 장치의 파일을 읽을 때
28
+ - ✅ 연결된 USB 장치를 열거하고 권한을 관리할 때
29
+ - ❌ 일반 파일 시스템 접근 → [`@simplysm/capacitor-plugin-file-system`](../capacitor-plugin-file-system/README.md)
30
+ - ❌ USB 장치에 파일 쓰기 → 현재 지원하지 않는다 (읽기 전용)
31
+
32
+ #### Signature
33
+
34
+ ```typescript
35
+ export abstract class UsbStorage {
36
+ static async getDevices(): Promise<UsbDeviceInfo[]>;
37
+ static async requestPermissions(filter: UsbDeviceFilter): Promise<boolean>;
38
+ static async checkPermissions(filter: UsbDeviceFilter): Promise<boolean>;
39
+ static async readdir(filter: UsbDeviceFilter, dirPath: string): Promise<UsbFileInfo[]>;
40
+ static async readFile(filter: UsbDeviceFilter, filePath: string): Promise<Bytes | undefined>;
41
+ }
42
+ ```
43
+
44
+ #### Members
45
+
46
+ | Member | Kind | Return | Description |
47
+ |--------|------|--------|-------------|
48
+ | `getDevices` | static method | `Promise<UsbDeviceInfo[]>` | 연결된 USB Mass Storage 장치 목록 조회 |
49
+ | `requestPermissions` | static method | `Promise<boolean>` | USB 장치 접근 권한 요청. 승인 여부 반환 |
50
+ | `checkPermissions` | static method | `Promise<boolean>` | USB 장치 접근 권한 보유 여부 확인 |
51
+ | `readdir` | static method | `Promise<UsbFileInfo[]>` | USB 저장 장치의 디렉토리 내용 읽기 |
52
+ | `readFile` | static method | `Promise<Bytes \| undefined>` | USB 저장 장치에서 파일 읽기. 파일이 없으면 `undefined`. 최대 100MB |
53
+
54
+ `Bytes`는 `@simplysm/core-common`의 타입이다 (`Uint8Array` 별칭).
55
+
56
+ #### Usage
57
+
58
+ ##### 최소 예제
59
+
60
+ ```typescript
61
+ import { UsbStorage } from "@simplysm/capacitor-plugin-usb-storage";
62
+
63
+ const devices = await UsbStorage.getDevices();
64
+ if (devices.length > 0) {
65
+ const { vendorId, productId } = devices[0];
66
+ const files = await UsbStorage.readdir({ vendorId, productId }, "/");
67
+ }
68
+ ```
69
+
70
+ ##### 전형 예제 — 권한 확인 후 파일 읽기
71
+
72
+ ```typescript
73
+ import { UsbStorage } from "@simplysm/capacitor-plugin-usb-storage";
74
+ import type { UsbDeviceFilter } from "@simplysm/capacitor-plugin-usb-storage";
75
+
76
+ const devices = await UsbStorage.getDevices();
77
+ if (devices.length === 0) {
78
+ throw new Error("USB 장치가 연결되어 있지 않습니다.");
79
+ }
80
+
81
+ const filter: UsbDeviceFilter = {
82
+ vendorId: devices[0].vendorId,
83
+ productId: devices[0].productId,
84
+ };
85
+
86
+ const granted = await UsbStorage.checkPermissions(filter);
87
+ if (!granted) {
88
+ const accepted = await UsbStorage.requestPermissions(filter);
89
+ if (!accepted) {
90
+ throw new Error("USB 장치 접근 권한이 거부되었습니다.");
91
+ }
92
+ }
93
+
94
+ const data = await UsbStorage.readFile(filter, "/updates/config.json");
95
+ if (data != null) {
96
+ const text = new TextDecoder().decode(data);
97
+ }
98
+ ```
99
+
100
+ #### 🚫 Anti-patterns
101
+
102
+ ##### `readFile()` 반환값을 null 체크 없이 사용
103
+
104
+ ```typescript
105
+ // ❌ 파일이 없으면 undefined이므로 decode 실패
106
+ const data = await UsbStorage.readFile(filter, "/file.txt");
107
+ const text = new TextDecoder().decode(data); // TypeError if undefined
108
+
109
+ // ✅ null 체크 후 사용
110
+ const data = await UsbStorage.readFile(filter, "/file.txt");
111
+ if (data != null) {
112
+ const text = new TextDecoder().decode(data);
113
+ }
114
+ ```
115
+
116
+ **근거**: USB 장치에서 파일이 없거나 읽기 실패 시 `undefined`를 반환한다. throw하지 않으므로 반드시 null 체크가 필요하다.
117
+
118
+ ---
119
+
120
+ ### `UsbDeviceInfo`
121
+
122
+ 연결된 USB 장치 정보 인터페이스.
123
+
124
+ ```typescript
125
+ export interface UsbDeviceInfo {
126
+ deviceName: string;
127
+ manufacturerName: string;
128
+ productName: string;
129
+ vendorId: number;
130
+ productId: number;
131
+ }
132
+ ```
133
+
134
+ | Field | Type | Description |
135
+ |-------|------|-------------|
136
+ | `deviceName` | `string` | 장치 이름 |
137
+ | `manufacturerName` | `string` | 제조사 이름 |
138
+ | `productName` | `string` | 제품 이름 |
139
+ | `vendorId` | `number` | USB Vendor ID |
140
+ | `productId` | `number` | USB Product ID |
141
+
142
+ ---
143
+
144
+ ### `UsbDeviceFilter`
145
+
146
+ USB 장치를 식별하기 위한 필터 인터페이스. 모든 장치 접근 메서드의 첫 번째 파라미터로 사용된다.
147
+
148
+ ```typescript
149
+ export interface UsbDeviceFilter {
150
+ vendorId: number;
151
+ productId: number;
152
+ }
153
+ ```
154
+
155
+ | Field | Type | Description |
156
+ |-------|------|-------------|
157
+ | `vendorId` | `number` | USB Vendor ID |
158
+ | `productId` | `number` | USB Product ID |
159
+
160
+ ---
161
+
162
+ ### `UsbFileInfo`
163
+
164
+ USB 저장소 내 파일 또는 디렉토리 정보 인터페이스.
165
+
166
+ ```typescript
167
+ export interface UsbFileInfo {
168
+ name: string;
169
+ isDirectory: boolean;
170
+ }
171
+ ```
172
+
173
+ | Field | Type | Description |
174
+ |-------|------|-------------|
175
+ | `name` | `string` | 파일 또는 디렉토리 이름 |
176
+ | `isDirectory` | `boolean` | 디렉토리 여부 |
177
+
178
+ ---
179
+
180
+ ### `UsbStoragePlugin`
181
+
182
+ Capacitor 네이티브 플러그인 인터페이스. 직접 사용하지 않고 `UsbStorage` 파사드를 통해 접근한다. 타입 참조 목적으로만 export된다.
183
+
184
+ ```typescript
185
+ export interface UsbStoragePlugin {
186
+ getDevices(): Promise<{ devices: UsbDeviceInfo[] }>;
187
+ requestPermissions(options: UsbDeviceFilter): Promise<{ granted: boolean }>;
188
+ checkPermissions(options: UsbDeviceFilter): Promise<{ granted: boolean }>;
189
+ readdir(options: UsbDeviceFilter & { path: string }): Promise<{ files: UsbFileInfo[] }>;
190
+ readFile(options: UsbDeviceFilter & { path: string }): Promise<{ data: string | null }>;
191
+ }
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Browser-Only Testing API (`UsbStorageWeb`)
197
+
198
+ 브라우저 환경에서 테스트 및 개발 목적으로 사용하는 API. `UsbStorage` 정적 파사드로는 접근할 수 없으며, `UsbStorageWeb` 인스턴스를 직접 사용할 때만 호출 가능하다. `UsbStorageWeb`은 패키지 공개 API(`index.ts`)에서 export되지 않으므로 소스 경로를 직접 참조해야 한다.
199
+
200
+ ### `addVirtualDevice(device)`
201
+
202
+ 가상 USB 장치를 IndexedDB에 등록한다.
203
+
204
+ ```typescript
205
+ async addVirtualDevice(device: {
206
+ vendorId: number;
207
+ productId: number;
208
+ deviceName: string;
209
+ manufacturerName: string;
210
+ productName: string;
211
+ }): Promise<void>
212
+ ```
213
+
214
+ ### `addVirtualFile(filter, filePath, data)`
215
+
216
+ 가상 USB 장치에 파일을 추가한다. 부모 디렉토리가 없으면 자동 생성된다.
217
+
218
+ ```typescript
219
+ async addVirtualFile(filter: UsbDeviceFilter, filePath: string, data: Uint8Array): Promise<void>
220
+ ```
221
+
222
+ ### `addVirtualDirectory(filter, dirPath)`
223
+
224
+ 가상 USB 장치에 디렉토리를 추가한다.
225
+
226
+ ```typescript
227
+ async addVirtualDirectory(filter: UsbDeviceFilter, dirPath: string): Promise<void>
228
+ ```
229
+
230
+ ### 테스트 설정 예시
231
+
232
+ ```typescript
233
+ import { UsbStorageWeb } from "@simplysm/capacitor-plugin-usb-storage/src/web/UsbStorageWeb";
234
+
235
+ const web = new UsbStorageWeb();
236
+ await web.addVirtualDevice({
237
+ vendorId: 1234,
238
+ productId: 5678,
239
+ deviceName: "Test Device",
240
+ manufacturerName: "Test Manufacturer",
241
+ productName: "Test Product",
242
+ });
243
+
244
+ const fileData = new TextEncoder().encode("Hello, USB!");
245
+ await web.addVirtualFile({ vendorId: 1234, productId: 5678 }, "/data/config.json", fileData);
246
+ ```
247
+
248
+ ## 이 패키지를 쓰지 말아야 할 때
249
+
250
+ - 일반 파일 시스템 접근 → [`@simplysm/capacitor-plugin-file-system`](../capacitor-plugin-file-system/README.md)
251
+ - USB 장치에 파일 쓰기 → 현재 미지원. 읽기 전용 접근만 제공한다.
@@ -0,0 +1,52 @@
1
+ # @simplysm/core-browser
2
+
3
+ > 브라우저 전용 유틸리티 패키지. DOM 프로토타입 확장(Element/HTMLElement), 파일 다운로드/업로드, HTTP 바이너리 fetch, IndexedDB 추상화를 제공한다.
4
+ > 런타임: 브라우저 전용 (DOM API 필수). `@simplysm/core-common`에 의존한다.
5
+
6
+ ## Installation
7
+
8
+ ```bash
9
+ npm install @simplysm/core-browser
10
+ ```
11
+
12
+ ## 하려는 작업 → 먼저 읽을 파일
13
+
14
+ | 작업 | 먼저 읽을 파일 |
15
+ |------|----------------|
16
+ | DOM 요소 검색/탐색 (findAll, findFirst 등) | [element-prototype-extensions.md](./extensions/element-prototype-extensions.md) |
17
+ | 요소 위치 계산, 스크롤 조정, 리페인트 | [element-prototype-extensions.md](./extensions/element-prototype-extensions.md) |
18
+ | 여러 요소의 경계(bounds) 비동기 조회 | [get-bounds.md](./extensions/get-bounds.md) |
19
+ | copy/paste 이벤트 핸들러 구현 | [copy-paste.md](./extensions/copy-paste.md) |
20
+ | Blob을 파일로 다운로드 | [download-blob.md](./utils/download-blob.md) |
21
+ | URL에서 바이너리 데이터 다운로드 | [fetch-url-bytes.md](./utils/fetch-url-bytes.md) |
22
+ | 프로그래밍 방식으로 파일 선택 대화상자 열기 | [open-file-dialog.md](./utils/open-file-dialog.md) |
23
+ | IndexedDB CRUD 작업 | [indexed-db-store.md](./utils/indexed-db-store.md) |
24
+ | IndexedDB 기반 가상 파일시스템 | [indexed-db-virtual-fs.md](./utils/indexed-db-virtual-fs.md) |
25
+
26
+ ## API Overview
27
+
28
+ ### Extensions
29
+
30
+ 사이드 이펙트 모듈로, `@simplysm/core-browser`를 임포트하면 자동으로 `Element`와 `HTMLElement` 프로토타입에 메서드가 추가된다.
31
+
32
+ | Entry | Kind | 언제 쓰나 |
33
+ |-------|------|-----------|
34
+ | [`Element/HTMLElement Prototype Extensions`](./extensions/element-prototype-extensions.md) | prototype extension | DOM 요소 검색, 탭 이동, 가시성 확인, 위치 계산, 스크롤 조정이 필요할 때 |
35
+ | [`getBounds`](./extensions/get-bounds.md) | function | IntersectionObserver로 여러 요소의 경계 정보를 비동기 조회할 때 |
36
+ | [`copyElement` / `pasteToElement`](./extensions/copy-paste.md) | function | copy/paste 이벤트 핸들러에서 input/textarea 값을 클립보드와 동기화할 때 |
37
+
38
+ ### Utils
39
+
40
+ | Entry | Kind | 언제 쓰나 |
41
+ |-------|------|-----------|
42
+ | [`downloadBlob`](./utils/download-blob.md) | function | 메모리의 Blob을 사용자 파일로 다운로드할 때 |
43
+ | [`fetchUrlBytes`](./utils/fetch-url-bytes.md) | function | URL에서 바이너리 데이터를 Uint8Array로 가져올 때 (진행 콜백 필요) |
44
+ | [`openFileDialog`](./utils/open-file-dialog.md) | function | `<input type="file">`없이 프로그래밍 방식으로 파일 선택할 때 |
45
+ | [`IndexedDbStore`](./utils/indexed-db-store.md) | class | IndexedDB에 Promise 기반 CRUD가 필요할 때 |
46
+ | [`IndexedDbVirtualFs`](./utils/indexed-db-virtual-fs.md) | class | IndexedDB 위에 경로 기반 파일시스템 추상화가 필요할 때 |
47
+
48
+ ## 이 패키지를 쓰지 말아야 할 때
49
+
50
+ - Node.js 환경 → `@simplysm/core-node`
51
+ - 플랫폼 중립 유틸리티 (DateTime, UUID 등) → `@simplysm/core-common`
52
+ - Angular 컴포넌트/디렉티브 → `@simplysm/angular`
@@ -0,0 +1,59 @@
1
+ # `copyElement` / `pasteToElement`
2
+
3
+ 클립보드 이벤트 핸들러에서 input/textarea 값을 클립보드와 동기화하는 함수 쌍.
4
+
5
+ ## When to use
6
+
7
+ - ✅ `copy`/`paste` 이벤트 핸들러에서 커스텀 클립보드 동작이 필요할 때
8
+ - ❌ 임의 시점에 클립보드에 접근 → `navigator.clipboard` API 직접 사용
9
+
10
+ ## Signature
11
+
12
+ ```typescript
13
+ export function copyElement(event: ClipboardEvent): void
14
+ export function pasteToElement(event: ClipboardEvent): void
15
+ ```
16
+
17
+ ## Parameters
18
+
19
+ | Param | Type | Description |
20
+ |-------|------|-------------|
21
+ | `event` | `ClipboardEvent` | copy 또는 paste 이벤트 객체 |
22
+
23
+ ## Usage
24
+
25
+ ### 최소 예제
26
+
27
+ ```typescript
28
+ import { copyElement, pasteToElement } from "@simplysm/core-browser";
29
+
30
+ document.addEventListener("copy", copyElement);
31
+ document.addEventListener("paste", pasteToElement);
32
+ ```
33
+
34
+ ## 동작 상세
35
+
36
+ ### `copyElement`
37
+
38
+ 이벤트 타겟 요소 내의 첫 번째 `input` 또는 `textarea`를 찾아 그 `value`를 `clipboardData.setData("text/plain", ...)`로 설정하고 `event.preventDefault()`를 호출한다. 해당 요소가 없으면 아무 동작도 하지 않는다.
39
+
40
+ ### `pasteToElement`
41
+
42
+ 이벤트 타겟 요소 내의 첫 번째 `input` 또는 `textarea`를 찾아 값 전체를 클립보드 텍스트(`text/plain`)로 교체한다. 교체 후 `input` 이벤트를 dispatch한다. 커서 위치나 선택 영역은 고려하지 않으며, 값 전체가 대체된다.
43
+
44
+ ## 🚫 Anti-patterns
45
+
46
+ ### 커서 위치를 유지하면서 붙여넣기
47
+
48
+ ```typescript
49
+ // ❌ pasteToElement는 전체 값을 대체함 — 커서 위치 보존 불가
50
+ document.addEventListener("paste", pasteToElement);
51
+
52
+ // ✅ 커서 위치 기반 삽입이 필요하면 직접 구현
53
+ document.addEventListener("paste", (e) => {
54
+ const text = e.clipboardData?.getData("text/plain");
55
+ // selectionStart/selectionEnd를 사용한 직접 삽입 로직
56
+ });
57
+ ```
58
+
59
+ **근거**: `pasteToElement`는 `firstInputEl.value = contentText`로 전체 교체한다. 부분 삽입이 필요한 경우에는 적합하지 않다.