@storkspear/post-editor-react 0.1.0

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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/ColorPicker.d.ts +11 -0
  4. package/dist/ColorPicker.d.ts.map +1 -0
  5. package/dist/ColorPicker.js +30 -0
  6. package/dist/ColorPicker.js.map +1 -0
  7. package/dist/DrawioModal.d.ts +9 -0
  8. package/dist/DrawioModal.d.ts.map +1 -0
  9. package/dist/DrawioModal.js +97 -0
  10. package/dist/DrawioModal.js.map +1 -0
  11. package/dist/FontMenu.d.ts +14 -0
  12. package/dist/FontMenu.d.ts.map +1 -0
  13. package/dist/FontMenu.js +14 -0
  14. package/dist/FontMenu.js.map +1 -0
  15. package/dist/Icon.d.ts +69 -0
  16. package/dist/Icon.d.ts.map +1 -0
  17. package/dist/Icon.js +47 -0
  18. package/dist/Icon.js.map +1 -0
  19. package/dist/InsertHandle.d.ts +14 -0
  20. package/dist/InsertHandle.d.ts.map +1 -0
  21. package/dist/InsertHandle.js +60 -0
  22. package/dist/InsertHandle.js.map +1 -0
  23. package/dist/PickMenu.d.ts +61 -0
  24. package/dist/PickMenu.d.ts.map +1 -0
  25. package/dist/PickMenu.js +57 -0
  26. package/dist/PickMenu.js.map +1 -0
  27. package/dist/Popover.d.ts +20 -0
  28. package/dist/Popover.d.ts.map +1 -0
  29. package/dist/Popover.js +22 -0
  30. package/dist/Popover.js.map +1 -0
  31. package/dist/PostTitle.d.ts +33 -0
  32. package/dist/PostTitle.d.ts.map +1 -0
  33. package/dist/PostTitle.js +171 -0
  34. package/dist/PostTitle.js.map +1 -0
  35. package/dist/SelectionBubble.d.ts +6 -0
  36. package/dist/SelectionBubble.d.ts.map +1 -0
  37. package/dist/SelectionBubble.js +71 -0
  38. package/dist/SelectionBubble.js.map +1 -0
  39. package/dist/TableTools.d.ts +10 -0
  40. package/dist/TableTools.d.ts.map +1 -0
  41. package/dist/TableTools.js +200 -0
  42. package/dist/TableTools.js.map +1 -0
  43. package/dist/Toolbar.d.ts +17 -0
  44. package/dist/Toolbar.d.ts.map +1 -0
  45. package/dist/Toolbar.js +333 -0
  46. package/dist/Toolbar.js.map +1 -0
  47. package/dist/UrlPrompt.d.ts +24 -0
  48. package/dist/UrlPrompt.d.ts.map +1 -0
  49. package/dist/UrlPrompt.js +53 -0
  50. package/dist/UrlPrompt.js.map +1 -0
  51. package/dist/VariantMenu.d.ts +47 -0
  52. package/dist/VariantMenu.d.ts.map +1 -0
  53. package/dist/VariantMenu.js +21 -0
  54. package/dist/VariantMenu.js.map +1 -0
  55. package/dist/WidthToggle.d.ts +19 -0
  56. package/dist/WidthToggle.d.ts.map +1 -0
  57. package/dist/WidthToggle.js +17 -0
  58. package/dist/WidthToggle.js.map +1 -0
  59. package/dist/bubbleShows.d.ts +10 -0
  60. package/dist/bubbleShows.d.ts.map +1 -0
  61. package/dist/bubbleShows.js +29 -0
  62. package/dist/bubbleShows.js.map +1 -0
  63. package/dist/content-baked.d.ts +22 -0
  64. package/dist/content-baked.d.ts.map +1 -0
  65. package/dist/content-baked.js +21 -0
  66. package/dist/content-baked.js.map +1 -0
  67. package/dist/content.d.ts +29 -0
  68. package/dist/content.d.ts.map +1 -0
  69. package/dist/content.js +35 -0
  70. package/dist/content.js.map +1 -0
  71. package/dist/extensions/DiagramView.d.ts +26 -0
  72. package/dist/extensions/DiagramView.d.ts.map +1 -0
  73. package/dist/extensions/DiagramView.js +146 -0
  74. package/dist/extensions/DiagramView.js.map +1 -0
  75. package/dist/extensions/FigureView.d.ts +3 -0
  76. package/dist/extensions/FigureView.d.ts.map +1 -0
  77. package/dist/extensions/FigureView.js +108 -0
  78. package/dist/extensions/FigureView.js.map +1 -0
  79. package/dist/index.d.ts +100 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +166 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/objects/ObjectFloat.d.ts +11 -0
  84. package/dist/objects/ObjectFloat.d.ts.map +1 -0
  85. package/dist/objects/ObjectFloat.js +42 -0
  86. package/dist/objects/ObjectFloat.js.map +1 -0
  87. package/dist/objects/ObjectLayer.d.ts +10 -0
  88. package/dist/objects/ObjectLayer.d.ts.map +1 -0
  89. package/dist/objects/ObjectLayer.js +20 -0
  90. package/dist/objects/ObjectLayer.js.map +1 -0
  91. package/dist/objects/blockSize.d.ts +30 -0
  92. package/dist/objects/blockSize.d.ts.map +1 -0
  93. package/dist/objects/blockSize.js +56 -0
  94. package/dist/objects/blockSize.js.map +1 -0
  95. package/dist/objects/code.d.ts +3 -0
  96. package/dist/objects/code.d.ts.map +1 -0
  97. package/dist/objects/code.js +55 -0
  98. package/dist/objects/code.js.map +1 -0
  99. package/dist/objects/diagram.d.ts +21 -0
  100. package/dist/objects/diagram.d.ts.map +1 -0
  101. package/dist/objects/diagram.js +109 -0
  102. package/dist/objects/diagram.js.map +1 -0
  103. package/dist/objects/diagramGlyphs.d.ts +12 -0
  104. package/dist/objects/diagramGlyphs.d.ts.map +1 -0
  105. package/dist/objects/diagramGlyphs.js +49 -0
  106. package/dist/objects/diagramGlyphs.js.map +1 -0
  107. package/dist/objects/divider.d.ts +22 -0
  108. package/dist/objects/divider.d.ts.map +1 -0
  109. package/dist/objects/divider.js +60 -0
  110. package/dist/objects/divider.js.map +1 -0
  111. package/dist/objects/figure.d.ts +3 -0
  112. package/dist/objects/figure.d.ts.map +1 -0
  113. package/dist/objects/figure.js +62 -0
  114. package/dist/objects/figure.js.map +1 -0
  115. package/dist/objects/imageRow.d.ts +3 -0
  116. package/dist/objects/imageRow.d.ts.map +1 -0
  117. package/dist/objects/imageRow.js +29 -0
  118. package/dist/objects/imageRow.js.map +1 -0
  119. package/dist/objects/quote.d.ts +6 -0
  120. package/dist/objects/quote.d.ts.map +1 -0
  121. package/dist/objects/quote.js +13 -0
  122. package/dist/objects/quote.js.map +1 -0
  123. package/dist/objects/quoteGlyphs.d.ts +6 -0
  124. package/dist/objects/quoteGlyphs.d.ts.map +1 -0
  125. package/dist/objects/quoteGlyphs.js +28 -0
  126. package/dist/objects/quoteGlyphs.js.map +1 -0
  127. package/dist/objects/quoteRow.d.ts +3 -0
  128. package/dist/objects/quoteRow.d.ts.map +1 -0
  129. package/dist/objects/quoteRow.js +61 -0
  130. package/dist/objects/quoteRow.js.map +1 -0
  131. package/dist/objects/registry.d.ts +60 -0
  132. package/dist/objects/registry.d.ts.map +1 -0
  133. package/dist/objects/registry.js +45 -0
  134. package/dist/objects/registry.js.map +1 -0
  135. package/dist/objects/table.d.ts +11 -0
  136. package/dist/objects/table.d.ts.map +1 -0
  137. package/dist/objects/table.js +136 -0
  138. package/dist/objects/table.js.map +1 -0
  139. package/dist/objects/useDomRect.d.ts +14 -0
  140. package/dist/objects/useDomRect.d.ts.map +1 -0
  141. package/dist/objects/useDomRect.js +32 -0
  142. package/dist/objects/useDomRect.js.map +1 -0
  143. package/dist/objects/useEngaged.d.ts +14 -0
  144. package/dist/objects/useEngaged.d.ts.map +1 -0
  145. package/dist/objects/useEngaged.js +41 -0
  146. package/dist/objects/useEngaged.js.map +1 -0
  147. package/dist/pickItems.d.ts +36 -0
  148. package/dist/pickItems.d.ts.map +1 -0
  149. package/dist/pickItems.js +40 -0
  150. package/dist/pickItems.js.map +1 -0
  151. package/dist/recentColors.d.ts +7 -0
  152. package/dist/recentColors.d.ts.map +1 -0
  153. package/dist/recentColors.js +30 -0
  154. package/dist/recentColors.js.map +1 -0
  155. package/dist/seeds/drawio/aws.d.ts +15 -0
  156. package/dist/seeds/drawio/aws.d.ts.map +1 -0
  157. package/dist/seeds/drawio/aws.js +15 -0
  158. package/dist/seeds/drawio/aws.js.map +1 -0
  159. package/dist/seeds/drawio/azure.d.ts +14 -0
  160. package/dist/seeds/drawio/azure.d.ts.map +1 -0
  161. package/dist/seeds/drawio/azure.js +14 -0
  162. package/dist/seeds/drawio/azure.js.map +1 -0
  163. package/dist/seeds/drawio/ec2docker.d.ts +15 -0
  164. package/dist/seeds/drawio/ec2docker.d.ts.map +1 -0
  165. package/dist/seeds/drawio/ec2docker.js +15 -0
  166. package/dist/seeds/drawio/ec2docker.js.map +1 -0
  167. package/dist/seeds/drawio/userflow.d.ts +21 -0
  168. package/dist/seeds/drawio/userflow.d.ts.map +1 -0
  169. package/dist/seeds/drawio/userflow.js +21 -0
  170. package/dist/seeds/drawio/userflow.js.map +1 -0
  171. package/dist/seeds/mermaid.d.ts +19 -0
  172. package/dist/seeds/mermaid.d.ts.map +1 -0
  173. package/dist/seeds/mermaid.js +82 -0
  174. package/dist/seeds/mermaid.js.map +1 -0
  175. package/dist/useAnchoredPos.d.ts +22 -0
  176. package/dist/useAnchoredPos.d.ts.map +1 -0
  177. package/dist/useAnchoredPos.js +57 -0
  178. package/dist/useAnchoredPos.js.map +1 -0
  179. package/dist/useDismiss.d.ts +17 -0
  180. package/dist/useDismiss.d.ts.map +1 -0
  181. package/dist/useDismiss.js +36 -0
  182. package/dist/useDismiss.js.map +1 -0
  183. package/dist/useLastVariant.d.ts +9 -0
  184. package/dist/useLastVariant.d.ts.map +1 -0
  185. package/dist/useLastVariant.js +33 -0
  186. package/dist/useLastVariant.js.map +1 -0
  187. package/dist/useUploadCount.d.ts +3 -0
  188. package/dist/useUploadCount.d.ts.map +1 -0
  189. package/dist/useUploadCount.js +9 -0
  190. package/dist/useUploadCount.js.map +1 -0
  191. package/package.json +57 -0
  192. package/src/editor-ui.css +737 -0
@@ -0,0 +1,15 @@
1
+ /**
2
+ * EC2 인스턴스 한 대 안의 Docker — Draw.io 샘플.
3
+ *
4
+ * 바깥(VPC·서브넷)은 AWS 샘플이 그리고, 이건 **인스턴스 안쪽**만 본다.
5
+ * 컨테이너는 서로 이름으로 부르고 그 이름은 bridge 네트워크가 해석한다 — 그 사실이
6
+ * 이 그림의 요점이라 네트워크를 울타리로 그렸다.
7
+ *
8
+ * 울타리는 aws4 스텐실(코어에 있다), 컨테이너 아이콘(docker·nginx·redis)은
9
+ * Simple Icons 를 브랜드 색으로 칠해 data URI 로 실었다.
10
+ */
11
+ export const ec2docker = {
12
+ src: "<mxfile host=\"storkspear\">\n <diagram name=\"EC2 인스턴스 내부 Docker\">\n <mxGraphModel dx=\"1400\" dy=\"900\" grid=\"0\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\"\n arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"1040\" pageHeight=\"620\"\n math=\"0\" shadow=\"0\">\n <root><mxCell id=\"0\"/><mxCell id=\"1\" parent=\"0\"/>\n <mxCell id=\"inst\" value=\"EC2 인스턴스 t3.small · Amazon Linux 2023\" style=\"sketch=0;outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=11;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_ec2_instance_contents;strokeColor=#D05C17;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#D05C17;dashed=0;labelBackgroundColor=#FFFFFF;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"40\" y=\"40\" width=\"780\" height=\"420\" as=\"geometry\"/></mxCell>\n <mxCell id=\"ec2i\" value=\"\" style=\"sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=#F78E04;gradientDirection=north;fillColor=#D05C17;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ec2;\" vertex=\"1\" parent=\"inst\"><mxGeometry x=\"706\" y=\"8\" width=\"44\" height=\"44\" as=\"geometry\"/></mxCell>\n <mxCell id=\"eng\" value=\"Docker Engine\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#b4afa3;dashed=1;verticalAlign=top;align=left;spacingLeft=12;spacingTop=2;fontSize=11;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;container=1;collapsible=0;recursiveResize=0;pointerEvents=0;spacingLeft=34;\" vertex=\"1\" parent=\"inst\"><mxGeometry x=\"30\" y=\"62\" width=\"720\" height=\"320\" as=\"geometry\"/></mxCell>\n <mxCell id=\"engI\" value=\"\" style=\"shape=image;html=1;imageAspect=0;aspect=fixed;labelBackgroundColor=none;image=data:image/svg+xml,PHN2ZyBmaWxsPSIjMjQ5NkVEIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+RG9ja2VyPC90aXRsZT48cGF0aCBkPSJNMTMuOTgzIDExLjA3OGgyLjExOWEuMTg2LjE4NiAwIDAwLjE4Ni0uMTg1VjkuMDA2YS4xODYuMTg2IDAgMDAtLjE4Ni0uMTg2aC0yLjExOWEuMTg1LjE4NSAwIDAwLS4xODUuMTg1djEuODg4YzAgLjEwMi4wODMuMTg1LjE4NS4xODVtLTIuOTU0LTUuNDNoMi4xMThhLjE4Ni4xODYgMCAwMC4xODYtLjE4NlYzLjU3NGEuMTg2LjE4NiAwIDAwLS4xODYtLjE4NWgtMi4xMThhLjE4NS4xODUgMCAwMC0uMTg1LjE4NXYxLjg4OGMwIC4xMDIuMDgyLjE4NS4xODUuMTg1bTAgMi43MTZoMi4xMThhLjE4Ny4xODcgMCAwMC4xODYtLjE4NlY2LjI5YS4xODYuMTg2IDAgMDAtLjE4Ni0uMTg1aC0yLjExOGEuMTg1LjE4NSAwIDAwLS4xODUuMTg1djEuODg3YzAgLjEwMi4wODIuMTg1LjE4NS4xODZtLTIuOTMgMGgyLjEyYS4xODYuMTg2IDAgMDAuMTg0LS4xODZWNi4yOWEuMTg1LjE4NSAwIDAwLS4xODUtLjE4NUg4LjFhLjE4NS4xODUgMCAwMC0uMTg1LjE4NXYxLjg4N2MwIC4xMDIuMDgzLjE4NS4xODUuMTg2bS0yLjk2NCAwaDIuMTE5YS4xODYuMTg2IDAgMDAuMTg1LS4xODZWNi4yOWEuMTg1LjE4NSAwIDAwLS4xODUtLjE4NUg1LjEzNmEuMTg2LjE4NiAwIDAwLS4xODYuMTg1djEuODg3YzAgLjEwMi4wODQuMTg1LjE4Ni4xODZtNS44OTMgMi43MTVoMi4xMThhLjE4Ni4xODYgMCAwMC4xODYtLjE4NVY5LjAwNmEuMTg2LjE4NiAwIDAwLS4xODYtLjE4NmgtMi4xMThhLjE4NS4xODUgMCAwMC0uMTg1LjE4NXYxLjg4OGMwIC4xMDIuMDgyLjE4NS4xODUuMTg1bS0yLjkzIDBoMi4xMmEuMTg1LjE4NSAwIDAwLjE4NC0uMTg1VjkuMDA2YS4xODUuMTg1IDAgMDAtLjE4NC0uMTg2aC0yLjEyYS4xODUuMTg1IDAgMDAtLjE4NC4xODV2MS44ODhjMCAuMTAyLjA4My4xODUuMTg1LjE4NW0tMi45NjQgMGgyLjExOWEuMTg1LjE4NSAwIDAwLjE4NS0uMTg1VjkuMDA2YS4xODUuMTg1IDAgMDAtLjE4NC0uMTg2aC0yLjEyYS4xODYuMTg2IDAgMDAtLjE4Ni4xODZ2MS44ODdjMCAuMTAyLjA4NC4xODUuMTg2LjE4NW0tMi45MiAwaDIuMTJhLjE4NS4xODUgMCAwMC4xODQtLjE4NVY5LjAwNmEuMTg1LjE4NSAwIDAwLS4xODQtLjE4NmgtMi4xMmEuMTg1LjE4NSAwIDAwLS4xODQuMTg1djEuODg4YzAgLjEwMi4wODIuMTg1LjE4NS4xODVNMjMuNzYzIDkuODljLS4wNjUtLjA1MS0uNjcyLS41MS0xLjk1NC0uNTEtLjMzOC4wMDEtLjY3Ni4wMy0xLjAxLjA4Ny0uMjQ4LTEuNy0xLjY1My0yLjUzLTEuNzE2LTIuNTY2bC0uMzQ0LS4xOTktLjIyNi4zMjdjLS4yODQuNDM4LS40OS45MjItLjYxMiAxLjQzLS4yMy45Ny0uMDkgMS44ODIuNDAzIDIuNjYxLS41OTUuMzMyLTEuNTUuNDEzLTEuNzQ0LjQySC43NTFhLjc1MS43NTEgMCAwMC0uNzUuNzQ4IDExLjM3NiAxMS4zNzYgMCAwMC42OTIgNC4wNjJjLjU0NSAxLjQyOCAxLjM1NSAyLjQ4IDIuNDEgMy4xMjQgMS4xOC43MjMgMy4xIDEuMTM3IDUuMjc1IDEuMTM3Ljk4My4wMDMgMS45NjMtLjA4NiAyLjkzLS4yNjZhMTIuMjQ4IDEyLjI0OCAwIDAwMy44MjMtMS4zODljLjk4LS41NjcgMS44Ni0xLjI4OCAyLjYxLTIuMTM2IDEuMjUyLTEuNDE4IDEuOTk4LTIuOTk3IDIuNTUzLTQuNGguMjIxYzEuMzcyIDAgMi4yMTUtLjU0OSAyLjY4LTEuMDA5LjMwOS0uMjkzLjU1LS42NS43MDctMS4wNDZsLjA5OC0uMjg4WiIvPjwvc3ZnPg==;\" vertex=\"1\" parent=\"eng\"><mxGeometry x=\"8\" y=\"5\" width=\"20\" height=\"20\" as=\"geometry\"/></mxCell>\n <mxCell id=\"net\" value=\"bridge 네트워크 app-net\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#b4afa3;dashed=1;verticalAlign=top;align=left;spacingLeft=12;spacingTop=2;fontSize=11;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;container=1;collapsible=0;recursiveResize=0;pointerEvents=0;\" vertex=\"1\" parent=\"eng\"><mxGeometry x=\"20\" y=\"36\" width=\"680\" height=\"200\" as=\"geometry\"/></mxCell>\n <mxCell id=\"nginx\" value=\"nginx&lt;br&gt;:80 → :8080\" style=\"shape=image;html=1;imageAspect=0;aspect=fixed;labelBackgroundColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;fontSize=11;fontColor=#2a2a2a;image=data:image/svg+xml,PHN2ZyBmaWxsPSIjMDA5NjM5IiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TkdJTlg8L3RpdGxlPjxwYXRoIGQ9Ik0xMiAwTDEuNjA1IDZ2MTJMMTIgMjRsMTAuMzk1LTZWNkwxMiAwem02IDE2LjU5YzAgLjcwNS0uNjQ2IDEuMjktMS41MjkgMS4yOS0uNjMxIDAtMS4zNTEtLjI1NS0xLjgwMS0uODFsLTYtNy4xNDF2Ni42NmMwIC43MjEtLjU3IDEuMjktMS4yNzQgMS4yOUg3LjMyYy0uNzIxIDAtMS4yOS0uNi0xLjI5LTEuMjlWNy40MWMwLS43MDUuNjMtMS4yOSAxLjUtMS4yOS42NDYgMCAxLjM4LjI1NSAxLjgzLjgxbDUuOTcgNy4xNDFWNy40MWMwLS43MjEuNi0xLjI5IDEuMjktMS4yOWguMDc1Yy43MiAwIDEuMjkuNiAxLjI5IDEuMjl2OS4xOEgxOHoiLz48L3N2Zz4=;\" vertex=\"1\" parent=\"net\"><mxGeometry x=\"42\" y=\"30\" width=\"44\" height=\"44\" as=\"geometry\"/></mxCell>\n <mxCell id=\"app1\" value=\"app #1 · Spring Boot&lt;br&gt;:8080\" style=\"shape=image;html=1;imageAspect=0;aspect=fixed;labelBackgroundColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;fontSize=11;fontColor=#2a2a2a;image=data:image/svg+xml,PHN2ZyBmaWxsPSIjNkRCMzNGIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+U3ByaW5nIEJvb3Q8L3RpdGxlPjxwYXRoIGQ9Im0yMy42OTMgMTAuNzA1OC00LjczLTguMTg0NGMtLjQwOTQtLjcxMDYtMS40MTY2LTEuMjk0Mi0yLjI0MDItMS4yOTQySDcuMjcyNWMtLjgxOSAwLTEuODMwOC41ODM2LTIuMjQwMiAxLjI5NDJMLjMwNyAxMC43MDU4Yy0uNDA5NS43MTA2LS40MDk1IDEuODczIDAgMi41ODM3bDQuNzI1MiA4LjE4OWMuNDA5NC43MTA3IDEuNDE2NiAxLjI5NDMgMi4yNDAyIDEuMjk0M2g5LjQ1NWMuODE5IDAgMS44MjYtLjU4MzYgMi4yNDAyLTEuMjk0Mmw0LjcyNTItOC4xODljLjQwOTUtLjcxMDcuNDA5NS0xLjg3MzIgMC0yLjU4Mzh6TTEwLjk3NjMgNS43NTQ3YzAtLjUzNjUuNDM3Ny0uOTc0Mi45NzQyLS45NzQycy45NzQyLjQzNzcuOTc0Mi45NzQydjUuODIxN2MwIC41MzY2LS40Mzc3Ljk3NDItLjk3NDIuOTc0MnMtLjk3NDItLjQzNzYtLjk3NDItLjk3NDJ6bS45NzQyIDEyLjQyOTRjLTMuNjQyNyAwLTYuNjA3Ny0yLjk2NS02LjYwNzctNi42MDc3LjAwNDctMi4wODk2Ljk5My00LjA1MjEgMi42Njg1LTUuMzA0YS44NjU3Ljg2NTcgMCAwIDEgMS4yMTQyLjE3ODguODY1Ny44NjU3IDAgMCAxLS4xNzg4IDEuMjE0M2MtMi4xNjAyIDEuNjA0OC0yLjYxMiA0LjY1OTItMS4wMDcyIDYuODE5NCAxLjYwNDkgMi4xNjAzIDQuNjU5MyAyLjYxMiA2LjgxOTUgMS4wMDcyIDEuMjM3OC0uOTE3NyAxLjk2NzMtMi4zNzIgMS45NjczLTMuOTE1N2E0Ljg5NzIgNC44OTcyIDAgMCAwLTEuOTg2MS0zLjkyNWMtLjM4Ni0uMjgyNC0uNDY2LS44Mjg0LS4xODM2LTEuMjE0My4yODI0LS4zODYuODI4My0uNDY2IDEuMjE0My0uMTgzNSAxLjY4OTUgMS4yNDcxIDIuNjgyNiAzLjIyMzggMi42ODczIDUuMzIyOCAwIDMuNjQ3NC0yLjk2NSA2LjYwNzctNi42MDc3IDYuNjA3N3oiLz48L3N2Zz4=;\" vertex=\"1\" parent=\"net\"><mxGeometry x=\"216\" y=\"26\" width=\"44\" height=\"44\" as=\"geometry\"/></mxCell>\n <mxCell id=\"app2\" value=\"app #2 · Spring Boot&lt;br&gt;:8080\" style=\"shape=image;html=1;imageAspect=0;aspect=fixed;labelBackgroundColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;fontSize=11;fontColor=#2a2a2a;image=data:image/svg+xml,PHN2ZyBmaWxsPSIjNkRCMzNGIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+U3ByaW5nIEJvb3Q8L3RpdGxlPjxwYXRoIGQ9Im0yMy42OTMgMTAuNzA1OC00LjczLTguMTg0NGMtLjQwOTQtLjcxMDYtMS40MTY2LTEuMjk0Mi0yLjI0MDItMS4yOTQySDcuMjcyNWMtLjgxOSAwLTEuODMwOC41ODM2LTIuMjQwMiAxLjI5NDJMLjMwNyAxMC43MDU4Yy0uNDA5NS43MTA2LS40MDk1IDEuODczIDAgMi41ODM3bDQuNzI1MiA4LjE4OWMuNDA5NC43MTA3IDEuNDE2NiAxLjI5NDMgMi4yNDAyIDEuMjk0M2g5LjQ1NWMuODE5IDAgMS44MjYtLjU4MzYgMi4yNDAyLTEuMjk0Mmw0LjcyNTItOC4xODljLjQwOTUtLjcxMDcuNDA5NS0xLjg3MzIgMC0yLjU4Mzh6TTEwLjk3NjMgNS43NTQ3YzAtLjUzNjUuNDM3Ny0uOTc0Mi45NzQyLS45NzQycy45NzQyLjQzNzcuOTc0Mi45NzQydjUuODIxN2MwIC41MzY2LS40Mzc3Ljk3NDItLjk3NDIuOTc0MnMtLjk3NDItLjQzNzYtLjk3NDItLjk3NDJ6bS45NzQyIDEyLjQyOTRjLTMuNjQyNyAwLTYuNjA3Ny0yLjk2NS02LjYwNzctNi42MDc3LjAwNDctMi4wODk2Ljk5My00LjA1MjEgMi42Njg1LTUuMzA0YS44NjU3Ljg2NTcgMCAwIDEgMS4yMTQyLjE3ODguODY1Ny44NjU3IDAgMCAxLS4xNzg4IDEuMjE0M2MtMi4xNjAyIDEuNjA0OC0yLjYxMiA0LjY1OTItMS4wMDcyIDYuODE5NCAxLjYwNDkgMi4xNjAzIDQuNjU5MyAyLjYxMiA2LjgxOTUgMS4wMDcyIDEuMjM3OC0uOTE3NyAxLjk2NzMtMi4zNzIgMS45NjczLTMuOTE1N2E0Ljg5NzIgNC44OTcyIDAgMCAwLTEuOTg2MS0zLjkyNWMtLjM4Ni0uMjgyNC0uNDY2LS44Mjg0LS4xODM2LTEuMjE0My4yODI0LS4zODYuODI4My0uNDY2IDEuMjE0My0uMTgzNSAxLjY4OTUgMS4yNDcxIDIuNjgyNiAzLjIyMzggMi42ODczIDUuMzIyOCAwIDMuNjQ3NC0yLjk2NSA2LjYwNzctNi42MDc3IDYuNjA3N3oiLz48L3N2Zz4=;\" vertex=\"1\" parent=\"net\"><mxGeometry x=\"216\" y=\"112\" width=\"44\" height=\"44\" as=\"geometry\"/></mxCell>\n <mxCell id=\"redis\" value=\"redis&lt;br&gt;:6379\" style=\"shape=image;html=1;imageAspect=0;aspect=fixed;labelBackgroundColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;fontSize=11;fontColor=#2a2a2a;image=data:image/svg+xml,PHN2ZyBmaWxsPSIjRkY0NDM4IiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+UmVkaXM8L3RpdGxlPjxwYXRoIGQ9Ik0yMi43MSAxMy4xNDVjLTEuNjYgMi4wOTItMy40NTIgNC40ODMtNy4wMzggNC40ODMtMy4yMDMgMC00LjM5Ny0yLjgyNS00LjQ4LTUuMTIuNzAxIDEuNDg0IDIuMDczIDIuNjg1IDQuMjE0IDIuNjMgNC4xMTctLjEzMyA2Ljk0LTMuODUyIDYuOTQtNy4yMzkgMC00LjA1LTMuMDIyLTYuOTcyLTguMjY4LTYuOTcyLTMuNzUyIDAtOC40IDEuNDI4LTExLjQ1NSAzLjY4NUMyLjU5IDYuOTM3IDMuODg1IDkuOTU4IDQuMzUgOS42MjZjMi42NDgtMS45MDQgNC43NDgtMy4xMyA2Ljc4NC0zLjc0NEM4LjEyIDkuMjQ0Ljg4NiAxNy4wNSAwIDE4LjQyNWMuMSAxLjI2MSAxLjY2IDQuNjQ4IDIuNDI0IDQuNjQ4LjIzMiAwIC40MzEtLjEzMy42NjQtLjM2NWExMDAuNDkgMTAwLjQ5IDAgMCAwIDUuNTQtNi43NjVjLjIyMiAzLjEwNCAxLjc0OCA2Ljg5OCA2LjAxNCA2Ljg5OCAzLjgxOSAwIDcuNjA0LTIuNzU2IDkuMzMtOC45NjUuMi0uNzY0LS43My0xLjM2MS0xLjI2MS0uNzN6bS00LjM0OS01LjAxM2MwIDEuOTU5LTEuOTI2IDIuOTIyLTMuNjg1IDIuOTIyLS45NDEgMC0xLjY2NC0uMjQ3LTIuMjM1LS41NjggMS4wNTEtMS41OTIgMi4wOTItMy4yMjUgMy4yMS00Ljk3MyAxLjk3Mi4zMzQgMi43MSAxLjQzIDIuNzEgMi42MTl6Ii8+PC9zdmc+;\" vertex=\"1\" parent=\"net\"><mxGeometry x=\"400\" y=\"30\" width=\"44\" height=\"44\" as=\"geometry\"/></mxCell>\n <mxCell id=\"vol\" value=\"볼륨&lt;br&gt;/var/lib/app\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#c3bdb1;fontSize=11;fontColor=#2a2a2a;arcSize=14;\" vertex=\"1\" parent=\"net\"><mxGeometry x=\"530\" y=\"24\" width=\"120\" height=\"56\" as=\"geometry\"/></mxCell>\n <mxCell id=\"logs\" value=\"docker logs → CloudWatch Agent\" style=\"text;html=1;align=left;fontSize=10;fontColor=#8e8981;whiteSpace=wrap;labelBackgroundColor=#FFFFFF;\" vertex=\"1\" parent=\"eng\"><mxGeometry x=\"22\" y=\"268\" width=\"260\" height=\"18\" as=\"geometry\"/></mxCell>\n <mxCell id=\"n1\" value=\"컨테이너는 인스턴스 안에서만 서로 이름으로 부릅니다 — bridge 네트워크가 그 이름을 해석합니다\" style=\"text;html=1;align=left;fontSize=10;fontColor=#8e8981;whiteSpace=wrap;labelBackgroundColor=#FFFFFF;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"40\" y=\"490\" width=\"480\" height=\"32\" as=\"geometry\"/></mxCell>\n <mxCell id=\"out\" value=\"인터넷 사용자\" style=\"rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#c3bdb1;fontSize=11;fontColor=#2a2a2a;arcSize=12;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"870\" y=\"150\" width=\"130\" height=\"40\" as=\"geometry\"/></mxCell>\n <mxCell id=\"e0\" value=\":80\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;\" edge=\"1\" parent=\"1\" source=\"out\" target=\"nginx\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"><Array as=\"points\"><mxPoint x=\"845\" y=\"170\"/><mxPoint x=\"845\" y=\"88\"/><mxPoint x=\"154\" y=\"88\"/></Array></mxGeometry></mxCell>\n <mxCell id=\"e1\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" edge=\"1\" parent=\"1\" source=\"nginx\" target=\"app1\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e2\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" edge=\"1\" parent=\"1\" source=\"nginx\" target=\"app2\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e3\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" edge=\"1\" parent=\"1\" source=\"app1\" target=\"redis\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e4\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;\" edge=\"1\" parent=\"1\" source=\"app2\" target=\"vol\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n </root>\n </mxGraphModel>\n </diagram>\n</mxfile>",
13
+ svg: "<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"background: transparent; background-color: transparent; color-scheme: light dark;\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" width=\"962px\" height=\"483px\" viewBox=\"0 0 962 483\"><defs><linearGradient x1=\"0%\" y1=\"100%\" x2=\"0%\" y2=\"0%\" id=\"drawio-svg-DSFkt4KqB1gwF5jM7DE3-gradient-light-dark_f78e04_b85e00_-1-light-dark_d05c17_e07c41_-1-s-0\"><stop offset=\"0%\" stop-color=\"#D05C17\" stop-opacity=\"1\" style=\"stop-color: light-dark(rgb(208, 92, 23), rgb(224, 124, 65)); stop-opacity: 1;\"></stop><stop offset=\"100%\" stop-color=\"#F78E04\" stop-opacity=\"1\" style=\"stop-color: light-dark(rgb(247, 142, 4), rgb(184, 94, 0)); stop-opacity: 1;\"></stop></linearGradient><symbol id=\"mx-image-9o9u46\" viewBox=\"0 0 44 44\" preserveAspectRatio=\"none\"><image width=\"44\" height=\"44\" xlink:href=\"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNkRCMzNGIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+U3ByaW5nIEJvb3Q8L3RpdGxlPjxwYXRoIGQ9Im0yMy42OTMgMTAuNzA1OC00LjczLTguMTg0NGMtLjQwOTQtLjcxMDYtMS40MTY2LTEuMjk0Mi0yLjI0MDItMS4yOTQySDcuMjcyNWMtLjgxOSAwLTEuODMwOC41ODM2LTIuMjQwMiAxLjI5NDJMLjMwNyAxMC43MDU4Yy0uNDA5NS43MTA2LS40MDk1IDEuODczIDAgMi41ODM3bDQuNzI1MiA4LjE4OWMuNDA5NC43MTA3IDEuNDE2NiAxLjI5NDMgMi4yNDAyIDEuMjk0M2g5LjQ1NWMuODE5IDAgMS44MjYtLjU4MzYgMi4yNDAyLTEuMjk0Mmw0LjcyNTItOC4xODljLjQwOTUtLjcxMDcuNDA5NS0xLjg3MzIgMC0yLjU4Mzh6TTEwLjk3NjMgNS43NTQ3YzAtLjUzNjUuNDM3Ny0uOTc0Mi45NzQyLS45NzQycy45NzQyLjQzNzcuOTc0Mi45NzQydjUuODIxN2MwIC41MzY2LS40Mzc3Ljk3NDItLjk3NDIuOTc0MnMtLjk3NDItLjQzNzYtLjk3NDItLjk3NDJ6bS45NzQyIDEyLjQyOTRjLTMuNjQyNyAwLTYuNjA3Ny0yLjk2NS02LjYwNzctNi42MDc3LjAwNDctMi4wODk2Ljk5My00LjA1MjEgMi42Njg1LTUuMzA0YS44NjU3Ljg2NTcgMCAwIDEgMS4yMTQyLjE3ODguODY1Ny44NjU3IDAgMCAxLS4xNzg4IDEuMjE0M2MtMi4xNjAyIDEuNjA0OC0yLjYxMiA0LjY1OTItMS4wMDcyIDYuODE5NCAxLjYwNDkgMi4xNjAzIDQuNjU5MyAyLjYxMiA2LjgxOTUgMS4wMDcyIDEuMjM3OC0uOTE3NyAxLjk2NzMtMi4zNzIgMS45NjczLTMuOTE1N2E0Ljg5NzIgNC44OTcyIDAgMCAwLTEuOTg2MS0zLjkyNWMtLjM4Ni0uMjgyNC0uNDY2LS44Mjg0LS4xODM2LTEuMjE0My4yODI0LS4zODYuODI4My0uNDY2IDEuMjE0My0uMTgzNSAxLjY4OTUgMS4yNDcxIDIuNjgyNiAzLjIyMzggMi42ODczIDUuMzIyOCAwIDMuNjQ3NC0yLjk2NSA2LjYwNzctNi42MDc3IDYuNjA3N3oiLz48L3N2Zz4=\" preserveAspectRatio=\"none\"></image></symbol></defs><g><g data-cell-id=\"0\"><g data-cell-id=\"1\"><g data-cell-id=\"inst\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 0 0 L 780 0 L 780 420 L 0 420 Z\" fill=\"none\" stroke=\"#d05c17\" stroke-miterlimit=\"10\" pointer-events=\"none\" style=\"stroke: light-dark(rgb(208, 92, 23), rgb(224, 124, 65));\"></path><path d=\"M 0 0 L 25 0 L 25 25 L 0 25 Z M 21.07 8.37 L 21.07 7.66 L 19.39 7.66 L 19.39 5.61 L 17.25 5.61 L 17.25 3.93 L 16.54 3.93 L 16.54 5.61 L 15 5.61 L 15 3.93 L 14.29 3.93 L 14.29 5.61 L 12.77 5.61 L 12.77 3.93 L 12.06 3.93 L 12.06 5.61 L 10.53 5.61 L 10.53 3.93 L 9.81 3.93 L 9.81 5.61 L 8.29 5.61 L 8.29 3.93 L 7.57 3.93 L 7.57 5.61 L 5.61 5.61 L 5.61 7.66 L 3.93 7.66 L 3.93 8.37 L 5.61 8.37 L 5.61 9.9 L 3.93 9.9 L 3.93 10.61 L 5.61 10.61 L 5.61 12.14 L 3.93 12.14 L 3.93 12.86 L 5.61 12.86 L 5.61 14.39 L 3.93 14.39 L 3.93 15.1 L 5.61 15.1 L 5.61 16.63 L 3.93 16.63 L 3.93 17.34 L 5.61 17.34 L 5.61 19.39 L 7.57 19.39 L 7.57 21.07 L 8.29 21.07 L 8.29 19.39 L 9.81 19.39 L 9.81 21.07 L 10.53 21.07 L 10.53 19.39 L 12.06 19.39 L 12.06 21.07 L 12.77 21.07 L 12.77 19.39 L 14.29 19.39 L 14.29 21.07 L 15 21.07 L 15 19.39 L 16.53 19.39 L 16.53 21.07 L 17.24 21.07 L 17.24 19.39 L 19.39 19.39 L 19.39 17.34 L 21.07 17.34 L 21.07 16.63 L 19.39 16.63 L 19.39 15.1 L 21.07 15.1 L 21.07 14.39 L 19.39 14.39 L 19.39 12.86 L 21.07 12.86 L 21.07 12.14 L 19.39 12.14 L 19.39 10.61 L 21.07 10.61 L 21.07 9.9 L 19.39 9.9 L 19.39 8.37 Z M 18.68 18.68 L 6.32 18.68 L 6.32 6.32 L 18.68 6.32 Z\" fill=\"#d05c17\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(208, 92, 23), rgb(224, 124, 65));\"></path></g><g><g><switch><text x=\"32\" y=\"18\" fill=\"#D05C17\" font-family=\"Helvetica\" font-size=\"11px\" style=\"fill: light-dark(rgb(208, 92, 23), rgb(224, 124, 65));\">EC2 인스턴스 t3.small · Amazon Linux 2023</text></switch></g></g><g data-cell-id=\"ec2i\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 706 8 L 750 8 L 750 52 L 706 52 Z\" fill=\"url(#drawio-svg-DSFkt4KqB1gwF5jM7DE3-gradient-light-dark_f78e04_b85e00_-1-light-dark_d05c17_e07c41_-1-s-0)\" stroke=\"none\" pointer-events=\"all\" style=\"fill: url(&#x22;#drawio-svg-DSFkt4KqB1gwF5jM7DE3-gradient-light-dark_f78e04_b85e00_-1-light-dark_d05c17_e07c41_-1-s-0&#x22;);\"></path><path d=\"M 719.83 38.17 L 735.54 38.17 L 735.54 22.46 L 719.83 22.46 Z M 736.8 22.46 L 739.31 22.46 L 739.31 23.71 L 736.8 23.71 L 736.8 26.23 L 739.31 26.23 L 739.31 27.49 L 736.8 27.49 L 736.8 29.37 L 739.31 29.37 L 739.31 30.63 L 736.8 30.63 L 736.8 33.14 L 739.31 33.14 L 739.31 34.4 L 736.8 34.4 L 736.8 36.91 L 739.31 36.91 L 739.31 38.17 L 736.8 38.17 L 736.8 38.26 C 736.8 38.9 736.27 39.43 735.63 39.43 L 735.54 39.43 L 735.54 41.94 L 734.29 41.94 L 734.29 39.43 L 731.77 39.43 L 731.77 41.94 L 730.51 41.94 L 730.51 39.43 L 728.63 39.43 L 728.63 41.94 L 727.37 41.94 L 727.37 39.43 L 724.86 39.43 L 724.86 41.94 L 723.6 41.94 L 723.6 39.43 L 721.09 39.43 L 721.09 41.94 L 719.83 41.94 L 719.83 39.43 L 719.74 39.43 C 719.1 39.43 718.57 38.9 718.57 38.26 L 718.57 38.17 L 716.69 38.17 L 716.69 36.91 L 718.57 36.91 L 718.57 34.4 L 716.69 34.4 L 716.69 33.14 L 718.57 33.14 L 718.57 30.63 L 716.69 30.63 L 716.69 29.37 L 718.57 29.37 L 718.57 27.49 L 716.69 27.49 L 716.69 26.23 L 718.57 26.23 L 718.57 23.71 L 716.69 23.71 L 716.69 22.46 L 718.57 22.46 L 718.57 22.37 C 718.57 21.73 719.1 21.2 719.74 21.2 L 719.83 21.2 L 719.83 18.69 L 721.09 18.69 L 721.09 21.2 L 723.6 21.2 L 723.6 18.69 L 724.86 18.69 L 724.86 21.2 L 727.37 21.2 L 727.37 18.69 L 728.63 18.69 L 728.63 21.2 L 730.51 21.2 L 730.51 18.69 L 731.77 18.69 L 731.77 21.2 L 734.29 21.2 L 734.29 18.69 L 735.54 18.69 L 735.54 21.2 L 735.63 21.2 C 736.27 21.2 736.8 21.73 736.8 22.37 Z M 728.63 46.26 C 728.63 46.31 728.59 46.34 728.55 46.34 L 711.74 46.34 C 711.69 46.34 711.66 46.31 711.66 46.26 L 711.66 29.45 C 711.66 29.41 711.69 29.37 711.74 29.37 L 715.43 29.37 L 715.43 28.11 L 711.74 28.11 C 711 28.11 710.4 28.71 710.4 29.45 L 710.4 46.26 C 710.4 47 711 47.6 711.74 47.6 L 728.55 47.6 C 729.29 47.6 729.89 47 729.89 46.26 L 729.89 43.2 L 728.63 43.2 Z M 745.6 13.74 L 745.6 30.55 C 745.6 31.29 745 31.89 744.26 31.89 L 740.57 31.89 L 740.57 30.63 L 744.26 30.63 C 744.31 30.63 744.34 30.59 744.34 30.55 L 744.34 13.74 C 744.34 13.69 744.31 13.66 744.26 13.66 L 727.45 13.66 C 727.41 13.66 727.37 13.69 727.37 13.74 L 727.37 17.43 L 726.11 17.43 L 726.11 13.74 C 726.11 13 726.71 12.4 727.45 12.4 L 744.26 12.4 C 745 12.4 745.6 13 745.6 13.74 Z\" fill=\"#ffffff\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));\"></path></g></g><g data-cell-id=\"eng\"><g transform=\"translate(0.5,0.5)\"><rect x=\"30\" y=\"62\" width=\"720\" height=\"320\" rx=\"48\" ry=\"48\" fill=\"none\" stroke=\"#b4afa3\" stroke-dasharray=\"3 3\" pointer-events=\"none\" style=\"stroke: light-dark(rgb(180, 175, 163), rgb(91, 86, 76));\"></rect></g><g><g><switch><text x=\"66\" y=\"82\" fill=\"#6f6b63\" font-family=\"Helvetica\" font-size=\"11px\" style=\"fill: light-dark(rgb(111, 107, 99), rgb(148, 145, 138));\">Docker Engine</text></switch></g></g><g data-cell-id=\"engI\"><g><image width=\"20\" height=\"20\" xlink:href=\"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMjQ5NkVEIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+RG9ja2VyPC90aXRsZT48cGF0aCBkPSJNMTMuOTgzIDExLjA3OGgyLjExOWEuMTg2LjE4NiAwIDAwLjE4Ni0uMTg1VjkuMDA2YS4xODYuMTg2IDAgMDAtLjE4Ni0uMTg2aC0yLjExOWEuMTg1LjE4NSAwIDAwLS4xODUuMTg1djEuODg4YzAgLjEwMi4wODMuMTg1LjE4NS4xODVtLTIuOTU0LTUuNDNoMi4xMThhLjE4Ni4xODYgMCAwMC4xODYtLjE4NlYzLjU3NGEuMTg2LjE4NiAwIDAwLS4xODYtLjE4NWgtMi4xMThhLjE4NS4xODUgMCAwMC0uMTg1LjE4NXYxLjg4OGMwIC4xMDIuMDgyLjE4NS4xODUuMTg1bTAgMi43MTZoMi4xMThhLjE4Ny4xODcgMCAwMC4xODYtLjE4NlY2LjI5YS4xODYuMTg2IDAgMDAtLjE4Ni0uMTg1aC0yLjExOGEuMTg1LjE4NSAwIDAwLS4xODUuMTg1djEuODg3YzAgLjEwMi4wODIuMTg1LjE4NS4xODZtLTIuOTMgMGgyLjEyYS4xODYuMTg2IDAgMDAuMTg0LS4xODZWNi4yOWEuMTg1LjE4NSAwIDAwLS4xODUtLjE4NUg4LjFhLjE4NS4xODUgMCAwMC0uMTg1LjE4NXYxLjg4N2MwIC4xMDIuMDgzLjE4NS4xODUuMTg2bS0yLjk2NCAwaDIuMTE5YS4xODYuMTg2IDAgMDAuMTg1LS4xODZWNi4yOWEuMTg1LjE4NSAwIDAwLS4xODUtLjE4NUg1LjEzNmEuMTg2LjE4NiAwIDAwLS4xODYuMTg1djEuODg3YzAgLjEwMi4wODQuMTg1LjE4Ni4xODZtNS44OTMgMi43MTVoMi4xMThhLjE4Ni4xODYgMCAwMC4xODYtLjE4NVY5LjAwNmEuMTg2LjE4NiAwIDAwLS4xODYtLjE4NmgtMi4xMThhLjE4NS4xODUgMCAwMC0uMTg1LjE4NXYxLjg4OGMwIC4xMDIuMDgyLjE4NS4xODUuMTg1bS0yLjkzIDBoMi4xMmEuMTg1LjE4NSAwIDAwLjE4NC0uMTg1VjkuMDA2YS4xODUuMTg1IDAgMDAtLjE4NC0uMTg2aC0yLjEyYS4xODUuMTg1IDAgMDAtLjE4NC4xODV2MS44ODhjMCAuMTAyLjA4My4xODUuMTg1LjE4NW0tMi45NjQgMGgyLjExOWEuMTg1LjE4NSAwIDAwLjE4NS0uMTg1VjkuMDA2YS4xODUuMTg1IDAgMDAtLjE4NC0uMTg2aC0yLjEyYS4xODYuMTg2IDAgMDAtLjE4Ni4xODZ2MS44ODdjMCAuMTAyLjA4NC4xODUuMTg2LjE4NW0tMi45MiAwaDIuMTJhLjE4NS4xODUgMCAwMC4xODQtLjE4NVY5LjAwNmEuMTg1LjE4NSAwIDAwLS4xODQtLjE4NmgtMi4xMmEuMTg1LjE4NSAwIDAwLS4xODQuMTg1djEuODg4YzAgLjEwMi4wODIuMTg1LjE4NS4xODVNMjMuNzYzIDkuODljLS4wNjUtLjA1MS0uNjcyLS41MS0xLjk1NC0uNTEtLjMzOC4wMDEtLjY3Ni4wMy0xLjAxLjA4Ny0uMjQ4LTEuNy0xLjY1My0yLjUzLTEuNzE2LTIuNTY2bC0uMzQ0LS4xOTktLjIyNi4zMjdjLS4yODQuNDM4LS40OS45MjItLjYxMiAxLjQzLS4yMy45Ny0uMDkgMS44ODIuNDAzIDIuNjYxLS41OTUuMzMyLTEuNTUuNDEzLTEuNzQ0LjQySC43NTFhLjc1MS43NTEgMCAwMC0uNzUuNzQ4IDExLjM3NiAxMS4zNzYgMCAwMC42OTIgNC4wNjJjLjU0NSAxLjQyOCAxLjM1NSAyLjQ4IDIuNDEgMy4xMjQgMS4xOC43MjMgMy4xIDEuMTM3IDUuMjc1IDEuMTM3Ljk4My4wMDMgMS45NjMtLjA4NiAyLjkzLS4yNjZhMTIuMjQ4IDEyLjI0OCAwIDAwMy44MjMtMS4zODljLjk4LS41NjcgMS44Ni0xLjI4OCAyLjYxLTIuMTM2IDEuMjUyLTEuNDE4IDEuOTk4LTIuOTk3IDIuNTUzLTQuNGguMjIxYzEuMzcyIDAgMi4yMTUtLjU0OSAyLjY4LTEuMDA5LjMwOS0uMjkzLjU1LS42NS43MDctMS4wNDZsLjA5OC0uMjg4WiIvPjwvc3ZnPg==\" preserveAspectRatio=\"none\" x=\"38\" y=\"67\"></image></g></g><g data-cell-id=\"net\"><g transform=\"translate(0.5,0.5)\"><rect x=\"50\" y=\"98\" width=\"680\" height=\"200\" rx=\"30\" ry=\"30\" fill=\"none\" stroke=\"#b4afa3\" stroke-dasharray=\"3 3\" pointer-events=\"none\" style=\"stroke: light-dark(rgb(180, 175, 163), rgb(91, 86, 76));\"></rect></g><g><g><switch><text x=\"64\" y=\"118\" fill=\"#6f6b63\" font-family=\"Helvetica\" font-size=\"11px\" style=\"fill: light-dark(rgb(111, 107, 99), rgb(148, 145, 138));\">bridge 네트워크 app-net</text></switch></g></g><g data-cell-id=\"nginx\"><g><image width=\"44\" height=\"44\" xlink:href=\"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMDA5NjM5IiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TkdJTlg8L3RpdGxlPjxwYXRoIGQ9Ik0xMiAwTDEuNjA1IDZ2MTJMMTIgMjRsMTAuMzk1LTZWNkwxMiAwem02IDE2LjU5YzAgLjcwNS0uNjQ2IDEuMjktMS41MjkgMS4yOS0uNjMxIDAtMS4zNTEtLjI1NS0xLjgwMS0uODFsLTYtNy4xNDF2Ni42NmMwIC43MjEtLjU3IDEuMjktMS4yNzQgMS4yOUg3LjMyYy0uNzIxIDAtMS4yOS0uNi0xLjI5LTEuMjlWNy40MWMwLS43MDUuNjMtMS4yOSAxLjUtMS4yOS42NDYgMCAxLjM4LjI1NSAxLjgzLjgxbDUuOTcgNy4xNDFWNy40MWMwLS43MjEuNi0xLjI5IDEuMjktMS4yOWguMDc1Yy43MiAwIDEuMjkuNiAxLjI5IDEuMjl2OS4xOEgxOHoiLz48L3N2Zz4=\" preserveAspectRatio=\"none\" x=\"92\" y=\"128\"></image></g><g><g><switch><text x=\"114\" y=\"190\" fill=\"#2a2a2a\" font-family=\"Helvetica\" font-size=\"11px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(42, 42, 42), rgb(201, 201, 201));\"><tspan x=\"114\" y=\"190\">nginx</tspan><tspan x=\"114\" y=\"203\">:80 → :8080</tspan></text></switch></g></g></g><g data-cell-id=\"app1\"><g><use href=\"#mx-image-9o9u46\" xlink:href=\"#mx-image-9o9u46\" x=\"266\" y=\"124\" width=\"44\" height=\"44\"></use></g><g><g><switch><text x=\"288\" y=\"186\" fill=\"#2a2a2a\" font-family=\"Helvetica\" font-size=\"11px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(42, 42, 42), rgb(201, 201, 201));\"><tspan x=\"288\" y=\"186\">app #1 · Spring Boot</tspan><tspan x=\"288\" y=\"199\">:8080</tspan></text></switch></g></g></g><g data-cell-id=\"app2\"><g><use href=\"#mx-image-9o9u46\" xlink:href=\"#mx-image-9o9u46\" x=\"266\" y=\"210\" width=\"44\" height=\"44\"></use></g><g><g><switch><text x=\"288\" y=\"272\" fill=\"#2a2a2a\" font-family=\"Helvetica\" font-size=\"11px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(42, 42, 42), rgb(201, 201, 201));\"><tspan x=\"288\" y=\"272\">app #2 · Spring Boot</tspan><tspan x=\"288\" y=\"285\">:8080</tspan></text></switch></g></g></g><g data-cell-id=\"redis\"><g><image width=\"44\" height=\"44\" xlink:href=\"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkY0NDM4IiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+UmVkaXM8L3RpdGxlPjxwYXRoIGQ9Ik0yMi43MSAxMy4xNDVjLTEuNjYgMi4wOTItMy40NTIgNC40ODMtNy4wMzggNC40ODMtMy4yMDMgMC00LjM5Ny0yLjgyNS00LjQ4LTUuMTIuNzAxIDEuNDg0IDIuMDczIDIuNjg1IDQuMjE0IDIuNjMgNC4xMTctLjEzMyA2Ljk0LTMuODUyIDYuOTQtNy4yMzkgMC00LjA1LTMuMDIyLTYuOTcyLTguMjY4LTYuOTcyLTMuNzUyIDAtOC40IDEuNDI4LTExLjQ1NSAzLjY4NUMyLjU5IDYuOTM3IDMuODg1IDkuOTU4IDQuMzUgOS42MjZjMi42NDgtMS45MDQgNC43NDgtMy4xMyA2Ljc4NC0zLjc0NEM4LjEyIDkuMjQ0Ljg4NiAxNy4wNSAwIDE4LjQyNWMuMSAxLjI2MSAxLjY2IDQuNjQ4IDIuNDI0IDQuNjQ4LjIzMiAwIC40MzEtLjEzMy42NjQtLjM2NWExMDAuNDkgMTAwLjQ5IDAgMCAwIDUuNTQtNi43NjVjLjIyMiAzLjEwNCAxLjc0OCA2Ljg5OCA2LjAxNCA2Ljg5OCAzLjgxOSAwIDcuNjA0LTIuNzU2IDkuMzMtOC45NjUuMi0uNzY0LS43My0xLjM2MS0xLjI2MS0uNzN6bS00LjM0OS01LjAxM2MwIDEuOTU5LTEuOTI2IDIuOTIyLTMuNjg1IDIuOTIyLS45NDEgMC0xLjY2NC0uMjQ3LTIuMjM1LS41NjggMS4wNTEtMS41OTIgMi4wOTItMy4yMjUgMy4yMS00Ljk3MyAxLjk3Mi4zMzQgMi43MSAxLjQzIDIuNzEgMi42MTl6Ii8+PC9zdmc+\" preserveAspectRatio=\"none\" x=\"450\" y=\"128\"></image></g><g><g><switch><text x=\"472\" y=\"190\" fill=\"#2a2a2a\" font-family=\"Helvetica\" font-size=\"11px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(42, 42, 42), rgb(201, 201, 201));\"><tspan x=\"472\" y=\"190\">redis</tspan><tspan x=\"472\" y=\"203\">:6379</tspan></text></switch></g></g></g><g data-cell-id=\"vol\"><g transform=\"translate(0.5,0.5)\"><rect x=\"580\" y=\"122\" width=\"120\" height=\"56\" rx=\"7.84\" ry=\"7.84\" fill=\"#ffffff\" stroke=\"#c3bdb1\" pointer-events=\"all\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(195, 189, 177), rgb(80, 74, 64));\"></rect></g><g><g><switch><text x=\"640\" y=\"147\" fill=\"#2a2a2a\" font-family=\"Helvetica\" font-size=\"11px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(42, 42, 42), rgb(201, 201, 201));\"><tspan x=\"640\" y=\"147\">볼륨</tspan><tspan x=\"640\" y=\"160\">/var/lib/app</tspan></text></switch></g></g></g></g><g data-cell-id=\"logs\"><g><rect x=\"52\" y=\"330\" width=\"260\" height=\"18\" fill=\"none\" stroke=\"none\" pointer-events=\"all\"></rect></g><g><g><switch><text x=\"54\" y=\"347\" fill=\"#8e8981\" font-family=\"Helvetica\" font-size=\"10px\" style=\"fill: light-dark(rgb(142, 137, 129), rgb(122, 118, 111));\">docker logs → CloudWatch Agent</text></switch></g></g></g></g></g><g data-cell-id=\"n1\"><g><rect x=\"0\" y=\"450\" width=\"480\" height=\"32\" fill=\"none\" stroke=\"none\" pointer-events=\"all\"></rect></g><g><g><switch><text x=\"2\" y=\"467\" fill=\"#8e8981\" font-family=\"Helvetica\" font-size=\"10px\" style=\"fill: light-dark(rgb(142, 137, 129), rgb(122, 118, 111));\">컨테이너는 인스턴스 안에서만 서로 이름으로 부릅니다 — bridge 네트워크가 그 이름을 해석합니다</text></switch></g></g></g><g data-cell-id=\"out\"><g transform=\"translate(0.5,0.5)\"><rect x=\"830\" y=\"110\" width=\"130\" height=\"40\" rx=\"4.8\" ry=\"4.8\" fill=\"#ffffff\" stroke=\"#c3bdb1\" pointer-events=\"all\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(195, 189, 177), rgb(80, 74, 64));\"></rect></g><g><g><switch><text x=\"895\" y=\"133\" fill=\"#2a2a2a\" font-family=\"Helvetica\" font-size=\"11px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(42, 42, 42), rgb(201, 201, 201));\">인터넷 사용자</text></switch></g></g></g><g data-cell-id=\"e0\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 830 130 L 805 130 L 805 48 L 114 48 L 114 119.88\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 114 126.88 L 111.67 119.88 L 116.33 119.88 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g><g><g><switch><text x=\"473\" y=\"51\" fill=\"#6f6b63\" font-family=\"Helvetica\" font-size=\"10px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(111, 107, 99), rgb(148, 145, 138));\">:80</text></switch></g></g></g><g data-cell-id=\"e1\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 136 150 L 201 150 L 201 146 L 257.88 146\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 264.88 146 L 257.88 148.33 L 257.88 143.67 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g></g><g data-cell-id=\"e2\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 114 172 L 114 232 L 257.88 232\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 264.88 232 L 257.88 234.33 L 257.88 229.67 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g></g><g data-cell-id=\"e3\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 310 146 L 380 146 L 380 150 L 441.88 150\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 448.88 150 L 441.88 152.33 L 441.88 147.67 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g></g><g data-cell-id=\"e4\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 310 232 L 640 232 L 640 186.12\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" stroke-dasharray=\"3 3\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 640 179.12 L 642.33 186.12 L 637.67 186.12 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g></g></g></g></g><switch><g requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"></g><a transform=\"translate(0,-5)\" xlink:href=\"https://www.drawio.com/doc/faq/svg-export-text-problems\" target=\"_blank\"><text text-anchor=\"middle\" font-size=\"10px\" x=\"50%\" y=\"100%\">Text is not SVG - cannot display</text></a></switch></svg>",
14
+ };
15
+ //# sourceMappingURL=ec2docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ec2docker.js","sourceRoot":"","sources":["../../../src/seeds/drawio/ec2docker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,EAAE,o6bAAo6b;IACz6b,GAAG,EAAE,gzlBAAgzlB;CACtzlB,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 유저 플로우 (캐주얼) — Draw.io 샘플.
3
+ *
4
+ * ## 왜 이것만 색이 요란한가
5
+ *
6
+ * 나머지 셋은 **인프라 도면**이라 벤더 아이콘이 말을 한다. 이건 **화면 흐름**이라
7
+ * 말할 아이콘이 없다 — 대신 도형이 뜻을 갖는다:
8
+ * 알약=시작·끝, 마름모=판단, 평행사변형=입력, 둥근사각=처리, 원통=저장.
9
+ * 범례를 그림 안에 같이 그려 둔 것은 그래서다.
10
+ *
11
+ * ## 무드
12
+ *
13
+ * FigJam 같은 화이트보드 느낌을 물어보셔서, **도구를 바꾸지 않고** 팔레트와 도형만으로
14
+ * 낼 수 있다는 것을 보인 것이다. 테두리를 없애고 면을 밝게 칠하면 draw.io 도 그렇게 된다.
15
+ * 발행 계약은 그대로다 — 스크립트 0, 아이콘 0, 구운 크기 16KB.
16
+ */
17
+ export declare const userflow: {
18
+ src: string;
19
+ svg: string;
20
+ };
21
+ //# sourceMappingURL=userflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userflow.d.ts","sourceRoot":"","sources":["../../../src/seeds/drawio/userflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,QAAQ;;;CAGpB,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 유저 플로우 (캐주얼) — Draw.io 샘플.
3
+ *
4
+ * ## 왜 이것만 색이 요란한가
5
+ *
6
+ * 나머지 셋은 **인프라 도면**이라 벤더 아이콘이 말을 한다. 이건 **화면 흐름**이라
7
+ * 말할 아이콘이 없다 — 대신 도형이 뜻을 갖는다:
8
+ * 알약=시작·끝, 마름모=판단, 평행사변형=입력, 둥근사각=처리, 원통=저장.
9
+ * 범례를 그림 안에 같이 그려 둔 것은 그래서다.
10
+ *
11
+ * ## 무드
12
+ *
13
+ * FigJam 같은 화이트보드 느낌을 물어보셔서, **도구를 바꾸지 않고** 팔레트와 도형만으로
14
+ * 낼 수 있다는 것을 보인 것이다. 테두리를 없애고 면을 밝게 칠하면 draw.io 도 그렇게 된다.
15
+ * 발행 계약은 그대로다 — 스크립트 0, 아이콘 0, 구운 크기 16KB.
16
+ */
17
+ export const userflow = {
18
+ src: "<mxfile host=\"storkspear\">\n <diagram name=\"유저 플로우 (캐주얼)\">\n <mxGraphModel dx=\"1400\" dy=\"900\" grid=\"0\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\"\n arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"1140\" pageHeight=\"800\"\n math=\"0\" shadow=\"0\">\n <root><mxCell id=\"0\"/><mxCell id=\"1\" parent=\"0\"/>\n <mxCell id=\"start\" value=\"앱 열기\" style=\"rounded=1;arcSize=50;html=1;whiteSpace=wrap;fillColor=#A78BFA;strokeColor=none;fontColor=#ffffff;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"40\" y=\"300\" width=\"120\" height=\"44\" as=\"geometry\"/></mxCell>\n <mxCell id=\"dec1\" value=\"로그인&lt;br&gt;되어 있나\" style=\"rhombus;html=1;whiteSpace=wrap;fillColor=#FBBF24;strokeColor=none;fontColor=#4a3400;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"220\" y=\"274\" width=\"140\" height=\"96\" as=\"geometry\"/></mxCell>\n <mxCell id=\"login\" value=\"이메일 · 비밀번호\" style=\"shape=parallelogram;perimeter=parallelogramPerimeter;fixedSize=1;size=18;html=1;whiteSpace=wrap;fillColor=#22C55E;strokeColor=none;fontColor=#ffffff;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"200\" y=\"450\" width=\"180\" height=\"52\" as=\"geometry\"/></mxCell>\n <mxCell id=\"dec2\" value=\"계정이&lt;br&gt;있나\" style=\"rhombus;html=1;whiteSpace=wrap;fillColor=#FBBF24;strokeColor=none;fontColor=#4a3400;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"440\" y=\"434\" width=\"130\" height=\"84\" as=\"geometry\"/></mxCell>\n <mxCell id=\"create\" value=\"계정 만들기\" style=\"rounded=1;arcSize=14;html=1;whiteSpace=wrap;fillColor=#60A5FA;strokeColor=none;fontColor=#0b2f5e;fontSize=12;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"640\" y=\"440\" width=\"150\" height=\"72\" as=\"geometry\"/></mxCell>\n <mxCell id=\"verify\" value=\"이메일 인증\" style=\"rounded=1;arcSize=14;html=1;whiteSpace=wrap;fillColor=#60A5FA;strokeColor=none;fontColor=#0b2f5e;fontSize=12;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"640\" y=\"560\" width=\"150\" height=\"72\" as=\"geometry\"/></mxCell>\n <mxCell id=\"modal\" value=\"모달\" style=\"rounded=1;arcSize=8;html=1;whiteSpace=wrap;fillColor=#EFECF8;strokeColor=none;verticalAlign=top;align=left;spacingLeft=12;spacingTop=4;fontSize=11;fontColor=#6b6480;container=1;collapsible=0;recursiveResize=0;pointerEvents=0;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"420\" y=\"60\" width=\"380\" height=\"180\" as=\"geometry\"/></mxCell>\n <mxCell id=\"home\" value=\"홈 화면&lt;br&gt;• 피드&lt;br&gt;• 프로필&lt;br&gt;• 설정\" style=\"rounded=1;arcSize=14;html=1;whiteSpace=wrap;fillColor=#60A5FA;strokeColor=none;fontColor=#0b2f5e;fontSize=12;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;\" vertex=\"1\" parent=\"modal\"><mxGeometry x=\"30\" y=\"34\" width=\"150\" height=\"118\" as=\"geometry\"/></mxCell>\n <mxCell id=\"push\" value=\"푸시 동의\" style=\"rounded=1;arcSize=14;html=1;whiteSpace=wrap;fillColor=#60A5FA;strokeColor=none;fontColor=#0b2f5e;fontSize=12;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;\" vertex=\"1\" parent=\"modal\"><mxGeometry x=\"210\" y=\"34\" width=\"140\" height=\"72\" as=\"geometry\"/></mxCell>\n <mxCell id=\"db\" value=\"사용자 DB\" style=\"shape=cylinder3;boundedLbl=1;backgroundOutline=1;size=12;html=1;whiteSpace=wrap;fillColor=#C4B5FD;strokeColor=none;fontColor=#3b2d63;fontSize=12;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"880\" y=\"300\" width=\"140\" height=\"70\" as=\"geometry\"/></mxCell>\n <mxCell id=\"end\" value=\"완료\" style=\"rounded=1;arcSize=50;html=1;whiteSpace=wrap;fillColor=#FB923C;strokeColor=none;fontColor=#ffffff;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"880\" y=\"470\" width=\"120\" height=\"44\" as=\"geometry\"/></mxCell>\n <mxCell id=\"n1\" value=\"갈라지는 곳은 하나 — 로그인 되어 있나\" style=\"rounded=1;arcSize=10;html=1;whiteSpace=wrap;fillColor=#FDE68A;strokeColor=none;fontColor=#4a3400;fontSize=11;align=left;spacingLeft=8;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"40\" y=\"196\" width=\"250\" height=\"40\" as=\"geometry\"/></mxCell>\n <mxCell id=\"e1\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;endArrow=blockThin;\" edge=\"1\" parent=\"1\" source=\"start\" target=\"dec1\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e2\" value=\"예\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;strokeColor=#9aa0aa;strokeWidth=1.6;fontSize=10;labelBackgroundColor=none;fontColor=#166534;\" edge=\"1\" parent=\"1\" source=\"dec1\" target=\"home\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e3\" value=\"아니오\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;strokeColor=#9aa0aa;strokeWidth=1.6;fontSize=10;labelBackgroundColor=none;fontColor=#991b1b;\" edge=\"1\" parent=\"1\" source=\"dec1\" target=\"login\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e4\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" edge=\"1\" parent=\"1\" source=\"login\" target=\"dec2\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e5\" value=\"예\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;strokeColor=#9aa0aa;strokeWidth=1.6;fontSize=10;labelBackgroundColor=none;fontColor=#166534;\" edge=\"1\" parent=\"1\" source=\"dec2\" target=\"home\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"><Array as=\"points\"><mxPoint x=\"505\" y=\"300\"/></Array></mxGeometry></mxCell>\n <mxCell id=\"e6\" value=\"아니오\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;strokeColor=#9aa0aa;strokeWidth=1.6;fontSize=10;labelBackgroundColor=none;fontColor=#991b1b;\" edge=\"1\" parent=\"1\" source=\"dec2\" target=\"create\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e7\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;\" edge=\"1\" parent=\"1\" source=\"create\" target=\"verify\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"e8\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;strokeColor=#9aa0aa;strokeWidth=1.6;fontSize=10;\" edge=\"1\" parent=\"1\" source=\"verify\" target=\"db\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"><Array as=\"points\"><mxPoint x=\"1080\" y=\"596\"/><mxPoint x=\"1080\" y=\"335\"/></Array></mxGeometry></mxCell>\n <mxCell id=\"e9\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;strokeColor=#9aa0aa;strokeWidth=1.6;fontSize=10;dashed=1;\" edge=\"1\" parent=\"1\" source=\"home\" target=\"db\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"><Array as=\"points\"><mxPoint x=\"840\" y=\"243\"/></Array></mxGeometry></mxCell>\n <mxCell id=\"e10\" value=\"\" style=\"edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=blockThin;endFill=1;strokeColor=#918c83;fontSize=10;fontColor=#6f6b63;labelBackgroundColor=#FFFFFF;jumpStyle=arc;jumpSize=7;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;strokeColor=#9aa0aa;strokeWidth=1.6;fontSize=10;\" edge=\"1\" parent=\"1\" source=\"db\" target=\"end\"><mxGeometry x=\"0\" relative=\"1\" as=\"geometry\"></mxGeometry></mxCell>\n <mxCell id=\"leg\" value=\"범례\" style=\"rounded=1;arcSize=8;html=1;whiteSpace=wrap;fillColor=#EFECF8;strokeColor=none;verticalAlign=top;align=left;spacingLeft=12;spacingTop=4;fontSize=11;fontColor=#6b6480;container=1;collapsible=0;recursiveResize=0;pointerEvents=0;\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"40\" y=\"684\" width=\"780\" height=\"96\" as=\"geometry\"/></mxCell>\n <mxCell id=\"l1\" value=\"시작 · 끝\" style=\"rounded=1;arcSize=50;html=1;whiteSpace=wrap;fillColor=#A78BFA;strokeColor=none;fontColor=#ffffff;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"leg\"><mxGeometry x=\"24\" y=\"34\" width=\"100\" height=\"40\" as=\"geometry\"/></mxCell>\n <mxCell id=\"l2\" value=\"판단\" style=\"rhombus;html=1;whiteSpace=wrap;fillColor=#FBBF24;strokeColor=none;fontColor=#4a3400;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"leg\"><mxGeometry x=\"150\" y=\"26\" width=\"100\" height=\"56\" as=\"geometry\"/></mxCell>\n <mxCell id=\"l3\" value=\"입력\" style=\"shape=parallelogram;perimeter=parallelogramPerimeter;fixedSize=1;size=18;html=1;whiteSpace=wrap;fillColor=#22C55E;strokeColor=none;fontColor=#ffffff;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"leg\"><mxGeometry x=\"276\" y=\"34\" width=\"110\" height=\"40\" as=\"geometry\"/></mxCell>\n <mxCell id=\"l4\" value=\"처리\" style=\"rounded=1;arcSize=14;html=1;whiteSpace=wrap;fillColor=#60A5FA;strokeColor=none;fontColor=#0b2f5e;fontSize=12;verticalAlign=middle;align=center;\" vertex=\"1\" parent=\"leg\"><mxGeometry x=\"412\" y=\"34\" width=\"110\" height=\"40\" as=\"geometry\"/></mxCell>\n <mxCell id=\"l5\" value=\"저장\" style=\"shape=cylinder3;boundedLbl=1;backgroundOutline=1;size=12;html=1;whiteSpace=wrap;fillColor=#C4B5FD;strokeColor=none;fontColor=#3b2d63;fontSize=12;\" vertex=\"1\" parent=\"leg\"><mxGeometry x=\"548\" y=\"26\" width=\"110\" height=\"56\" as=\"geometry\"/></mxCell>\n <mxCell id=\"l6\" value=\"끝\" style=\"rounded=1;arcSize=50;html=1;whiteSpace=wrap;fillColor=#FB923C;strokeColor=none;fontColor=#ffffff;fontSize=12;fontStyle=1;\" vertex=\"1\" parent=\"leg\"><mxGeometry x=\"684\" y=\"34\" width=\"80\" height=\"40\" as=\"geometry\"/></mxCell>\n </root>\n </mxGraphModel>\n </diagram>\n</mxfile>",
19
+ svg: "<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"background: transparent; background-color: transparent; color-scheme: light dark;\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" width=\"1049px\" height=\"720px\" viewBox=\"0 0 1049 720\"><defs></defs><g><g data-cell-id=\"0\"><g data-cell-id=\"1\"><g data-cell-id=\"start\"><g><rect x=\"-0.8\" y=\"239.5\" width=\"120\" height=\"44\" rx=\"22\" ry=\"22\" fill=\"#a78bfa\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(167, 139, 250), rgb(118, 94, 190));\"></rect></g><g><g><switch><text x=\"59\" y=\"265\" fill=\"#ffffff\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));\">앱 열기</text></switch></g></g></g><g data-cell-id=\"dec1\"><g><path d=\"M 249.2 213.5 L 319.2 261.5 L 249.2 309.5 L 179.2 261.5 Z\" fill=\"#fbbf24\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(251, 191, 36), rgb(122, 70, 0));\"></path></g><g><g><switch><text x=\"249\" y=\"258\" fill=\"#4a3400\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(74, 52, 0), rgb(209, 191, 146));\"><tspan x=\"249\" y=\"258\">로그인</tspan><tspan x=\"249\" y=\"272\">되어 있나</tspan></text></switch></g></g></g><g data-cell-id=\"login\"><g><path d=\"M 159.2 441.5 L 177.2 389.5 L 339.2 389.5 L 321.2 441.5 Z\" fill=\"#22c55e\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(34, 197, 94), rgb(0, 140, 52));\"></path></g><g><g><switch><text x=\"249\" y=\"419\" fill=\"#ffffff\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));\">이메일 · 비밀번호</text></switch></g></g></g><g data-cell-id=\"dec2\"><g><path d=\"M 464.2 373.5 L 529.2 415.5 L 464.2 457.5 L 399.2 415.5 Z\" fill=\"#fbbf24\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(251, 191, 36), rgb(122, 70, 0));\"></path></g><g><g><switch><text x=\"464\" y=\"412\" fill=\"#4a3400\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(74, 52, 0), rgb(209, 191, 146));\"><tspan x=\"464\" y=\"412\">계정이</tspan><tspan x=\"464\" y=\"426\">있나</tspan></text></switch></g></g></g><g data-cell-id=\"create\"><g><rect x=\"599.2\" y=\"379.5\" width=\"150\" height=\"72\" rx=\"10.08\" ry=\"10.08\" fill=\"#60a5fa\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(96, 165, 250), rgb(50, 110, 183));\"></rect></g><g><g><switch><text x=\"611\" y=\"405\" fill=\"#0b2f5e\" font-family=\"Helvetica\" font-size=\"12px\" style=\"fill: light-dark(rgb(11, 47, 94), rgb(173, 204, 245));\">계정 만들기</text></switch></g></g></g><g data-cell-id=\"verify\"><g><rect x=\"599.2\" y=\"499.5\" width=\"150\" height=\"72\" rx=\"10.08\" ry=\"10.08\" fill=\"#60a5fa\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(96, 165, 250), rgb(50, 110, 183));\"></rect></g><g><g><switch><text x=\"611\" y=\"524\" fill=\"#0b2f5e\" font-family=\"Helvetica\" font-size=\"12px\" style=\"fill: light-dark(rgb(11, 47, 94), rgb(173, 204, 245));\">이메일 인증</text></switch></g></g></g><g data-cell-id=\"modal\"><g><rect x=\"379.2\" y=\"-0.5\" width=\"380\" height=\"180\" rx=\"14.4\" ry=\"14.4\" fill=\"#efecf8\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(239, 236, 248), rgb(34, 32, 42));\"></rect></g><g><g><switch><text x=\"393\" y=\"22\" fill=\"#6b6480\" font-family=\"Helvetica\" font-size=\"11px\" style=\"fill: light-dark(rgb(107, 100, 128), rgb(151, 145, 169));\">모달</text></switch></g></g><g data-cell-id=\"home\"><g><rect x=\"409.2\" y=\"33.5\" width=\"150\" height=\"118\" rx=\"16.52\" ry=\"16.52\" fill=\"#60a5fa\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(96, 165, 250), rgb(50, 110, 183));\"></rect></g><g><g><switch><text x=\"421\" y=\"58\" fill=\"#0b2f5e\" font-family=\"Helvetica\" font-size=\"12px\" style=\"fill: light-dark(rgb(11, 47, 94), rgb(173, 204, 245));\"><tspan x=\"421\" y=\"58\">홈 화면</tspan><tspan x=\"421\" y=\"72\">• 피드</tspan><tspan x=\"421\" y=\"86\">• 프로필</tspan><tspan x=\"421\" y=\"100\">• 설정</tspan></text></switch></g></g></g><g data-cell-id=\"push\"><g><rect x=\"589.2\" y=\"33.5\" width=\"140\" height=\"72\" rx=\"10.08\" ry=\"10.08\" fill=\"#60a5fa\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(96, 165, 250), rgb(50, 110, 183));\"></rect></g><g><g><switch><text x=\"601\" y=\"58\" fill=\"#0b2f5e\" font-family=\"Helvetica\" font-size=\"12px\" style=\"fill: light-dark(rgb(11, 47, 94), rgb(173, 204, 245));\">푸시 동의</text></switch></g></g></g></g><g data-cell-id=\"db\"><g><path d=\"M 839.2 251.5 C 839.2 244.87 870.54 239.5 909.2 239.5 C 927.77 239.5 945.57 240.76 958.7 243.01 C 971.83 245.27 979.2 248.32 979.2 251.5 L 979.2 297.5 C 979.2 304.13 947.86 309.5 909.2 309.5 C 870.54 309.5 839.2 304.13 839.2 297.5 Z\" fill=\"#c4b5fd\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(196, 181, 253), rgb(79, 67, 128));\"></path><path d=\"M 979.2 251.5 C 979.2 258.13 947.86 263.5 909.2 263.5 C 870.54 263.5 839.2 258.13 839.2 251.5\" fill=\"none\" stroke=\"none\" pointer-events=\"all\"></path></g><g><g><switch><text x=\"909\" y=\"288\" fill=\"#3b2d63\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(59, 45, 99), rgb(198, 186, 232));\">사용자 DB</text></switch></g></g></g><g data-cell-id=\"end\"><g><rect x=\"839.2\" y=\"409.5\" width=\"120\" height=\"44\" rx=\"22\" ry=\"22\" fill=\"#fb923c\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(251, 146, 60), rgb(175, 84, 10));\"></rect></g><g><g><switch><text x=\"899\" y=\"435\" fill=\"#ffffff\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));\">완료</text></switch></g></g></g><g data-cell-id=\"n1\"><g><rect x=\"-0.8\" y=\"135.5\" width=\"250\" height=\"40\" rx=\"4\" ry=\"4\" fill=\"#fde68a\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(253, 230, 138), rgb(61, 42, 0));\"></rect></g><g><g><switch><text x=\"9\" y=\"159\" fill=\"#4a3400\" font-family=\"Helvetica\" font-size=\"11px\" style=\"fill: light-dark(rgb(74, 52, 0), rgb(209, 191, 146));\">갈라지는 곳은 하나 — 로그인 되어 있나</text></switch></g></g></g><g data-cell-id=\"e1\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 119.2 261.5 L 171.08 261.5\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 178.08 261.5 L 171.08 263.83 L 171.08 259.17 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g></g><g data-cell-id=\"e2\"><g><path d=\"M 249.2 213.5 L 249.25 102.44 Q 249.26 92.44 259.26 92.44 L 399.81 92.5\" fill=\"none\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path><path d=\"M 407.41 92.5 L 399.81 95.03 L 399.81 89.96 Z\" fill=\"#9aa0aa\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(154, 160, 170), rgb(96, 101, 110)); stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path></g><g><g><switch><text x=\"268\" y=\"95\" fill=\"#166534\" font-family=\"Helvetica\" font-size=\"10px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(22, 101, 52), rgb(117, 185, 143));\">예</text></switch></g></g></g><g data-cell-id=\"e3\"><g><path d=\"M 249.2 309.5 L 249.2 380.11\" fill=\"none\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path><path d=\"M 249.2 387.71 L 246.67 380.11 L 251.73 380.11 Z\" fill=\"#9aa0aa\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(154, 160, 170), rgb(96, 101, 110)); stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path></g><g><g><switch><text x=\"249\" y=\"353\" fill=\"#991b1b\" font-family=\"Helvetica\" font-size=\"10px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(153, 27, 27), rgb(255, 168, 168));\">아니오</text></switch></g></g></g><g data-cell-id=\"e4\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 330.2 415.5 L 391.08 415.5\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 398.08 415.5 L 391.08 417.83 L 391.08 413.17 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g></g><g data-cell-id=\"e5\"><g><path d=\"M 464.2 373.5 L 464.2 249.5 Q 464.2 239.5 474.2 239.5 L 479.2 239.5 Q 484.2 239.5 484.2 229.5 L 484.2 160.89\" fill=\"none\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path><path d=\"M 484.2 153.29 L 486.73 160.89 L 481.67 160.89 Z\" fill=\"#9aa0aa\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(154, 160, 170), rgb(96, 101, 110)); stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path></g><g><g><switch><text x=\"464\" y=\"255\" fill=\"#166534\" font-family=\"Helvetica\" font-size=\"10px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(22, 101, 52), rgb(117, 185, 143));\">예</text></switch></g></g></g><g data-cell-id=\"e6\"><g><path d=\"M 529.2 415.5 L 589.81 415.5\" fill=\"none\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path><path d=\"M 597.41 415.5 L 589.81 418.03 L 589.81 412.97 Z\" fill=\"#9aa0aa\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(154, 160, 170), rgb(96, 101, 110)); stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path></g><g><g><switch><text x=\"564\" y=\"419\" fill=\"#991b1b\" font-family=\"Helvetica\" font-size=\"10px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(153, 27, 27), rgb(255, 168, 168));\">아니오</text></switch></g></g></g><g data-cell-id=\"e7\"><g transform=\"translate(0.5,0.5)\"><path d=\"M 674.2 451.5 L 674.2 491.38\" fill=\"none\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path><path d=\"M 674.2 498.38 L 671.87 491.38 L 676.53 491.38 Z\" fill=\"#918c83\" stroke=\"#918c83\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(145, 140, 131), rgb(121, 116, 109)); stroke: light-dark(rgb(145, 140, 131), rgb(121, 116, 109));\"></path></g></g><g data-cell-id=\"e8\"><g><path d=\"M 749.2 535.5 L 1029.26 535.5 Q 1039.26 535.5 1039.26 525.5 L 1039.26 284.56 Q 1039.26 274.56 1029.26 274.55 L 988.59 274.51\" fill=\"none\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path><path d=\"M 980.99 274.5 L 988.59 271.98 L 988.59 277.04 Z\" fill=\"#9aa0aa\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(154, 160, 170), rgb(96, 101, 110)); stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path></g></g><g data-cell-id=\"e9\"><g><path d=\"M 559.2 92.5 L 559.25 172.56 Q 559.26 182.56 569.26 182.56 L 789.26 182.56 Q 799.26 182.56 799.26 192.56 L 799.26 264.56 Q 799.26 274.56 809.26 274.54 L 829.81 274.51\" fill=\"none\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" stroke-dasharray=\"4.8 4.8\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path><path d=\"M 837.41 274.5 L 829.81 277.05 L 829.81 271.98 Z\" fill=\"#9aa0aa\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(154, 160, 170), rgb(96, 101, 110)); stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path></g></g><g data-cell-id=\"e10\"><g><path d=\"M 909.2 309.5 L 909.25 349.5 Q 909.26 359.5 904.26 359.5 L 901.76 359.5 Q 899.26 359.5 899.25 369.5 L 899.21 400.11\" fill=\"none\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"stroke\" style=\"stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path><path d=\"M 899.2 407.71 L 896.68 400.11 L 901.74 400.11 Z\" fill=\"#9aa0aa\" stroke=\"#9aa0aa\" stroke-width=\"1.6\" stroke-miterlimit=\"10\" pointer-events=\"all\" style=\"fill: light-dark(rgb(154, 160, 170), rgb(96, 101, 110)); stroke: light-dark(rgb(154, 160, 170), rgb(96, 101, 110));\"></path></g></g><g data-cell-id=\"leg\"><g><rect x=\"-0.8\" y=\"623.5\" width=\"780\" height=\"96\" rx=\"7.68\" ry=\"7.68\" fill=\"#efecf8\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(239, 236, 248), rgb(34, 32, 42));\"></rect></g><g><g><switch><text x=\"13\" y=\"645\" fill=\"#6b6480\" font-family=\"Helvetica\" font-size=\"11px\" style=\"fill: light-dark(rgb(107, 100, 128), rgb(151, 145, 169));\">범례</text></switch></g></g><g data-cell-id=\"l1\"><g><rect x=\"23.2\" y=\"657.5\" width=\"100\" height=\"40\" rx=\"20\" ry=\"20\" fill=\"#a78bfa\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(167, 139, 250), rgb(118, 94, 190));\"></rect></g><g><g><switch><text x=\"73\" y=\"681\" fill=\"#ffffff\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));\">시작 · 끝</text></switch></g></g></g><g data-cell-id=\"l2\"><g><path d=\"M 199.2 649.5 L 249.2 677.5 L 199.2 705.5 L 149.2 677.5 Z\" fill=\"#fbbf24\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(251, 191, 36), rgb(122, 70, 0));\"></path></g><g><g><switch><text x=\"199\" y=\"681\" fill=\"#4a3400\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(74, 52, 0), rgb(209, 191, 146));\">판단</text></switch></g></g></g><g data-cell-id=\"l3\"><g><path d=\"M 275.2 697.5 L 293.2 657.5 L 385.2 657.5 L 367.2 697.5 Z\" fill=\"#22c55e\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(34, 197, 94), rgb(0, 140, 52));\"></path></g><g><g><switch><text x=\"330\" y=\"681\" fill=\"#ffffff\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));\">입력</text></switch></g></g></g><g data-cell-id=\"l4\"><g><rect x=\"411.2\" y=\"657.5\" width=\"110\" height=\"40\" rx=\"5.6\" ry=\"5.6\" fill=\"#60a5fa\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(96, 165, 250), rgb(50, 110, 183));\"></rect></g><g><g><switch><text x=\"466\" y=\"681\" fill=\"#0b2f5e\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(11, 47, 94), rgb(173, 204, 245));\">처리</text></switch></g></g></g><g data-cell-id=\"l5\"><g><path d=\"M 547.2 661.5 C 547.2 654.87 571.82 649.5 602.2 649.5 C 616.79 649.5 630.78 650.76 641.09 653.01 C 651.41 655.27 657.2 658.32 657.2 661.5 L 657.2 693.5 C 657.2 700.13 632.58 705.5 602.2 705.5 C 571.82 705.5 547.2 700.13 547.2 693.5 Z\" fill=\"#c4b5fd\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(196, 181, 253), rgb(79, 67, 128));\"></path><path d=\"M 657.2 661.5 C 657.2 668.13 632.58 673.5 602.2 673.5 C 571.82 673.5 547.2 668.13 547.2 661.5\" fill=\"none\" stroke=\"none\" pointer-events=\"all\"></path></g><g><g><switch><text x=\"602\" y=\"691\" fill=\"#3b2d63\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" style=\"fill: light-dark(rgb(59, 45, 99), rgb(198, 186, 232));\">저장</text></switch></g></g></g><g data-cell-id=\"l6\"><g><rect x=\"683.2\" y=\"657.5\" width=\"80\" height=\"40\" rx=\"20\" ry=\"20\" fill=\"#fb923c\" stroke=\"none\" pointer-events=\"all\" style=\"fill: light-dark(rgb(251, 146, 60), rgb(175, 84, 10));\"></rect></g><g><g><switch><text x=\"723\" y=\"681\" fill=\"#ffffff\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\" font-weight=\"bold\" style=\"fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));\">끝</text></switch></g></g></g></g></g></g></g><switch><g requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"></g><a transform=\"translate(0,-5)\" xlink:href=\"https://www.drawio.com/doc/faq/svg-export-text-problems\" target=\"_blank\"><text text-anchor=\"middle\" font-size=\"10px\" x=\"50%\" y=\"100%\">Text is not SVG - cannot display</text></a></switch></svg>",
20
+ };
21
+ //# sourceMappingURL=userflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userflow.js","sourceRoot":"","sources":["../../../src/seeds/drawio/userflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,GAAG,EAAE,+1XAA+1X;IACp2X,GAAG,EAAE,k2hBAAk2hB;CACx2hB,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Mermaid 샘플 — **고치면 제 그림이 되는 것**을 넣는다.
3
+ *
4
+ * 빈 캔버스를 주면 사람은 문법부터 찾는다. 그래서 넣기 메뉴는 전부 「이미 돌아가는 그림」을
5
+ * 넣고, 사용자는 이름과 분기만 바꾼다. 소스코드 블록이 언어를 미리 고르게 두는 것과 같다.
6
+ *
7
+ * 고른 다섯은 사용자가 지목한 것이다 — 토큰 로그인 하나(시퀀스)와 업무 도메인 넷.
8
+ * **한글 라벨을 쓴다.** 이 블로그의 글이 한글이고, 그림만 영어면 읽는 눈이 두 번 바뀐다.
9
+ */
10
+ export type MermaidSeed = 'sequence' | 'order' | 'payment' | 'signup' | 'orderState';
11
+ /**
12
+ * ⚠ mermaid 는 **대괄호 안의 괄호**를 못 읽는다(`A[결제(승인)]` → `Parse error on line N`).
13
+ * 괄호가 필요하면 따옴표로 감싸거나 쓰지 않는다. 아래 원본은 그 규칙을 지킨다.
14
+ *
15
+ * ⚠ 실패 분기를 **공용 종료 노드 하나로 모으지 않는다.** 그렇게 했더니 실패 선들이 그림
16
+ * 끝까지 내려가 세로로 세 배 길어졌다. 분기는 제자리에서 끝낸다(`([…])`).
17
+ */
18
+ export declare const MERMAID_SEEDS: Record<MermaidSeed, string>;
19
+ //# sourceMappingURL=mermaid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/seeds/mermaid.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEpF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CA6ErD,CAAA"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * ⚠ mermaid 는 **대괄호 안의 괄호**를 못 읽는다(`A[결제(승인)]` → `Parse error on line N`).
3
+ * 괄호가 필요하면 따옴표로 감싸거나 쓰지 않는다. 아래 원본은 그 규칙을 지킨다.
4
+ *
5
+ * ⚠ 실패 분기를 **공용 종료 노드 하나로 모으지 않는다.** 그렇게 했더니 실패 선들이 그림
6
+ * 끝까지 내려가 세로로 세 배 길어졌다. 분기는 제자리에서 끝낸다(`([…])`).
7
+ */
8
+ export const MERMAID_SEEDS = {
9
+ /* 이 프로젝트가 실제로 쓰는 RTR 흐름이다 — 만들어 낸 예시가 아니다 */
10
+ sequence: [
11
+ 'sequenceDiagram',
12
+ ' autonumber',
13
+ ' participant 앱 as 브라우저',
14
+ ' participant API as 서버',
15
+ ' participant DB as DB',
16
+ '',
17
+ ' 앱->>API: 로그인 (아이디·비밀번호)',
18
+ ' API->>DB: 비밀번호 대조 (bcrypt)',
19
+ ' DB-->>API: 확인',
20
+ ' API-->>앱: 액세스 토큰 + 리프래시 쿠키',
21
+ '',
22
+ ' 앱->>API: 자료 요청 (액세스 만료)',
23
+ ' API-->>앱: 401',
24
+ ' 앱->>API: 리프래시 요청 (쿠키)',
25
+ ' API->>DB: 쓴 적 없는 토큰인가',
26
+ ' Note over API,DB: 회전은 한 문장으로 집는다',
27
+ ' API-->>앱: 새 액세스 + 새 쿠키 (회전)',
28
+ ' 앱->>API: 자료 요청 (재시도)',
29
+ ' API-->>앱: 200',
30
+ ].join('\n'),
31
+ order: [
32
+ 'flowchart TD',
33
+ ' A[장바구니 담기] --> B[주문서 작성]',
34
+ ' B --> C{재고 있나}',
35
+ ' C -- 없다 --> C1([품절 안내])',
36
+ ' C -- 있다 --> D[재고 선점] --> E{결제 승인}',
37
+ ' E -- 실패 --> E1([선점 해제 · 주문 취소])',
38
+ ' E -- 성공 --> F[주문 확정] --> G[재고 차감] --> H{출고 가능}',
39
+ ' H -- 아니다 --> H1([보상 거래 — 결제 취소 · 재고 복구])',
40
+ ' H -- 그렇다 --> I([배송 요청])',
41
+ ].join('\n'),
42
+ payment: [
43
+ 'flowchart TD',
44
+ ' A[결제 요청] --> B[PG 승인 요청] --> C{승인 응답}',
45
+ ' C -- 시간 초과 --> C2[승인 조회로 재확인] --> C',
46
+ ' C -- 실패 --> C1([실패 사유 저장])',
47
+ ' C -- 성공 --> D[결제 기록 저장] --> E{취소 요청}',
48
+ ' E -- 없다 --> F[정산 대기] --> G([정산 완료])',
49
+ ' E -- 전체 --> H([전액 환불])',
50
+ ' E -- 부분 --> I{잔액 남나}',
51
+ ' I -- 남는다 --> J[부분 환불] --> F',
52
+ ' I -- 0원 --> H',
53
+ ].join('\n'),
54
+ signup: [
55
+ 'flowchart TD',
56
+ ' A[가입 시작] --> B{가입 방식}',
57
+ ' B -- 이메일 --> E[계정 임시 생성] --> F[인증 메일 발송] --> G{기한 안에 인증}',
58
+ ' G -- 아니다 --> G1([임시 계정 폐기])',
59
+ ' G -- 그렇다 --> H[약관 동의] --> I([계정 활성화])',
60
+ ' B -- 소셜 --> C[제공자 토큰 검증] --> D{이미 있는 계정}',
61
+ ' D -- 있다 --> L[기존 계정에 연결] --> H',
62
+ ' D -- 없다 --> E',
63
+ ].join('\n'),
64
+ orderState: [
65
+ 'stateDiagram-v2',
66
+ ' [*] --> 결제대기',
67
+ ' 결제대기 --> 결제완료: 승인',
68
+ ' 결제대기 --> 취소: 기한 초과',
69
+ ' 결제완료 --> 준비중: 주문 확인',
70
+ ' 준비중 --> 출고: 송장 등록',
71
+ ' 출고 --> 배송중: 집화',
72
+ ' 배송중 --> 배송완료: 인수',
73
+ ' 배송완료 --> 구매확정: 자동 7일',
74
+ ' 준비중 --> 취소: 고객 요청',
75
+ ' 배송완료 --> 반품: 반품 접수',
76
+ ' 반품 --> 환불완료: 회수 확인',
77
+ ' 구매확정 --> [*]',
78
+ ' 취소 --> [*]',
79
+ ' 환불완료 --> [*]',
80
+ ].join('\n'),
81
+ };
82
+ //# sourceMappingURL=mermaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../src/seeds/mermaid.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,6CAA6C;IAC7C,QAAQ,EAAE;QACR,iBAAiB;QACjB,gBAAgB;QAChB,2BAA2B;QAC3B,2BAA2B;QAC3B,0BAA0B;QAC1B,EAAE;QACF,6BAA6B;QAC7B,gCAAgC;QAChC,mBAAmB;QACnB,gCAAgC;QAChC,EAAE;QACF,6BAA6B;QAC7B,mBAAmB;QACnB,2BAA2B;QAC3B,2BAA2B;QAC3B,sCAAsC;QACtC,iCAAiC;QACjC,0BAA0B;QAC1B,mBAAmB;KACpB,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,KAAK,EAAE;QACL,cAAc;QACd,8BAA8B;QAC9B,oBAAoB;QACpB,6BAA6B;QAC7B,uCAAuC;QACvC,qCAAqC;QACrC,oDAAoD;QACpD,8CAA8C;QAC9C,6BAA6B;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,OAAO,EAAE;QACP,cAAc;QACd,2CAA2C;QAC3C,yCAAyC;QACzC,gCAAgC;QAChC,0CAA0C;QAC1C,yCAAyC;QACzC,4BAA4B;QAC5B,0BAA0B;QAC1B,iCAAiC;QACjC,mBAAmB;KACpB,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,MAAM,EAAE;QACN,cAAc;QACd,2BAA2B;QAC3B,8DAA8D;QAC9D,iCAAiC;QACjC,2CAA2C;QAC3C,8CAA8C;QAC9C,oCAAoC;QACpC,mBAAmB;KACpB,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,UAAU,EAAE;QACV,iBAAiB;QACjB,kBAAkB;QAClB,uBAAuB;QACvB,wBAAwB;QACxB,yBAAyB;QACzB,uBAAuB;QACvB,oBAAoB;QACpB,sBAAsB;QACtB,0BAA0B;QAC1B,uBAAuB;QACvB,wBAAwB;QACxB,wBAAwB;QACxB,kBAAkB;QAClB,gBAAgB;QAChB,kBAAkB;KACnB,CAAC,IAAI,CAAC,IAAI,CAAC;CACb,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { type RefObject } from 'react';
2
+ export type AnchoredPos = {
3
+ left: number;
4
+ top: number;
5
+ maxHeight: number;
6
+ };
7
+ /**
8
+ * 여는 버튼 바로 아래에 `position: fixed` 로 띄울 좌표를 계산한다.
9
+ *
10
+ * absolute 로 두면 안 되는 이유: 툴바 줄이 가로 스크롤을 쓰려고 `overflow-x: auto` 를
11
+ * 갖는데, CSS 명세상 한 축이 visible 이 아니면 **나머지 축의 visible 도 auto 로 강제**된다.
12
+ * 그래서 줄 밖으로 나가는 드롭다운이 통째로 잘려 화면에 안 보였다.
13
+ * DOM 에는 있으므로 자동 검사로는 안 잡힌다 — 눈으로 봐야 하는 결함이다.
14
+ *
15
+ * **화면 아래에 걸리면 위로 뒤집는다.** 아래 여유만 보고 자리를 잡으면 화면 밑에서 연 메뉴가
16
+ * 그대로 잘린다.
17
+ * 뒤집어도 모자라면 **남은 만큼으로 높이를 깎고** 메뉴가 스스로 스크롤한다.
18
+ */
19
+ export declare function useAnchoredPos(anchorRef: RefObject<HTMLElement | null>, open: boolean, width?: number,
20
+ /** 뜨는 것 자신 — 높이를 알아야 위로 뒤집을 자리를 잡는다. 없으면 아래로만 연다. */
21
+ floatRef?: RefObject<HTMLElement | null>): AnchoredPos | null;
22
+ //# sourceMappingURL=useAnchoredPos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnchoredPos.d.ts","sourceRoot":"","sources":["../src/useAnchoredPos.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjE,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1E;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,KAAK,SAAI;AACT,qDAAqD;AACrD,QAAQ,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,sBAyCzC"}
@@ -0,0 +1,57 @@
1
+ import { useLayoutEffect, useState } from 'react';
2
+ /**
3
+ * 여는 버튼 바로 아래에 `position: fixed` 로 띄울 좌표를 계산한다.
4
+ *
5
+ * absolute 로 두면 안 되는 이유: 툴바 줄이 가로 스크롤을 쓰려고 `overflow-x: auto` 를
6
+ * 갖는데, CSS 명세상 한 축이 visible 이 아니면 **나머지 축의 visible 도 auto 로 강제**된다.
7
+ * 그래서 줄 밖으로 나가는 드롭다운이 통째로 잘려 화면에 안 보였다.
8
+ * DOM 에는 있으므로 자동 검사로는 안 잡힌다 — 눈으로 봐야 하는 결함이다.
9
+ *
10
+ * **화면 아래에 걸리면 위로 뒤집는다.** 아래 여유만 보고 자리를 잡으면 화면 밑에서 연 메뉴가
11
+ * 그대로 잘린다.
12
+ * 뒤집어도 모자라면 **남은 만큼으로 높이를 깎고** 메뉴가 스스로 스크롤한다.
13
+ */
14
+ export function useAnchoredPos(anchorRef, open, width = 0,
15
+ /** 뜨는 것 자신 — 높이를 알아야 위로 뒤집을 자리를 잡는다. 없으면 아래로만 연다. */
16
+ floatRef) {
17
+ const [pos, setPos] = useState(null);
18
+ useLayoutEffect(() => {
19
+ if (!open) {
20
+ setPos(null);
21
+ return;
22
+ }
23
+ const GAP = 6; // 버튼과 메뉴 사이
24
+ const EDGE = 10; // 화면 가장자리에서 떨어뜨릴 만큼
25
+ const MIN = 140; // 이보다 얇아지면 목록이라기보다 틈이다 — 차라리 스크롤시킨다
26
+ const place = () => {
27
+ const el = anchorRef.current;
28
+ if (!el)
29
+ return;
30
+ const r = el.getBoundingClientRect();
31
+ const w = width || 220;
32
+ const left = Math.max(EDGE, Math.min(window.innerWidth - w - EDGE, r.left));
33
+ const below = window.innerHeight - r.bottom - GAP - EDGE;
34
+ const above = r.top - GAP - EDGE;
35
+ const h = floatRef?.current?.offsetHeight ?? 0;
36
+ // 아래가 모자라고 위가 더 넓을 때만 뒤집는다 — 둘 다 좁으면 아래에 두고 깎는다
37
+ const up = h > 0 && h > below && above > below;
38
+ const maxHeight = Math.max(MIN, up ? above : below);
39
+ const top = up
40
+ ? Math.max(EDGE, r.top - GAP - Math.min(h, maxHeight))
41
+ : r.bottom + GAP;
42
+ setPos((prev) => prev && prev.left === left && prev.top === top && prev.maxHeight === maxHeight ? prev : { left, top, maxHeight });
43
+ };
44
+ place();
45
+ // 높이는 한 번 그려 봐야 안다 — 그린 뒤 다시 재서 필요하면 뒤집는다
46
+ const id = requestAnimationFrame(place);
47
+ window.addEventListener('scroll', place, true);
48
+ window.addEventListener('resize', place);
49
+ return () => {
50
+ cancelAnimationFrame(id);
51
+ window.removeEventListener('scroll', place, true);
52
+ window.removeEventListener('resize', place);
53
+ };
54
+ }, [anchorRef, open, width, floatRef]);
55
+ return pos;
56
+ }
57
+ //# sourceMappingURL=useAnchoredPos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnchoredPos.js","sourceRoot":"","sources":["../src/useAnchoredPos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAIjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAwC,EACxC,IAAa,EACb,KAAK,GAAG,CAAC;AACT,qDAAqD;AACrD,QAAwC;IAExC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IAExD,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,CAAA,CAAM,YAAY;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAA,CAAI,oBAAoB;QACvC,MAAM,GAAG,GAAG,GAAG,CAAA,CAAI,oCAAoC;QACvD,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAA;YAC5B,IAAI,CAAC,EAAE;gBAAE,OAAM;YACf,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;YACpC,MAAM,CAAC,GAAG,KAAK,IAAI,GAAG,CAAA;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAA;YACxD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAA;YAChC,MAAM,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC,CAAA;YAC9C,gDAAgD;YAChD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,CAAA;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACnD,MAAM,GAAG,GAAG,EAAE;gBACZ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;YAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACd,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CACjH,CAAA;QACH,CAAC,CAAA;QACD,KAAK,EAAE,CAAA;QACP,0CAA0C;QAC1C,MAAM,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAC9C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QACxC,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,EAAE,CAAC,CAAA;YACxB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;YACjD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC7C,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEtC,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type RefObject } from 'react';
2
+ /**
3
+ * 바깥을 누르거나 Esc 를 누르면 닫는다.
4
+ *
5
+ * 여는 것마다 따로 만들면 하나씩 빠뜨린다 — 실제로 `+` 넣기 메뉴만 이 처리가 없어서
6
+ * 메뉴가 열린 채 따라다니며 글자 툴바(버블)를 덮고 있었다.
7
+ * 뜨는 것은 전부 이 훅을 거친다.
8
+ */
9
+ export declare function useDismiss(open: boolean, ref: RefObject<HTMLElement | null>, onClose: () => void,
10
+ /**
11
+ * **여는 버튼**. 이것을 「바깥」으로 치면 열려 있는 메뉴를 다시 눌러도 닫히지 않는다 —
12
+ * mousedown 이 먼저 닫고, 이어지는 click 의 토글이 도로 여는 탓이다.
13
+ * (`preventDefault()` 는 전파를 막지 않으므로 그것으로는 못 막는다.)
14
+ * 인용구·구분선·강조박스의 ▾ 가 전부 이 경로를 탄다.
15
+ */
16
+ anchor?: RefObject<HTMLElement | null>): void;
17
+ //# sourceMappingURL=useDismiss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDismiss.d.ts","sourceRoot":"","sources":["../src/useDismiss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,OAAO,EAAE,MAAM,IAAI;AACnB;;;;;GAKG;AACH,MAAM,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,QAiBvC"}
@@ -0,0 +1,36 @@
1
+ import { useEffect } from 'react';
2
+ /**
3
+ * 바깥을 누르거나 Esc 를 누르면 닫는다.
4
+ *
5
+ * 여는 것마다 따로 만들면 하나씩 빠뜨린다 — 실제로 `+` 넣기 메뉴만 이 처리가 없어서
6
+ * 메뉴가 열린 채 따라다니며 글자 툴바(버블)를 덮고 있었다.
7
+ * 뜨는 것은 전부 이 훅을 거친다.
8
+ */
9
+ export function useDismiss(open, ref, onClose,
10
+ /**
11
+ * **여는 버튼**. 이것을 「바깥」으로 치면 열려 있는 메뉴를 다시 눌러도 닫히지 않는다 —
12
+ * mousedown 이 먼저 닫고, 이어지는 click 의 토글이 도로 여는 탓이다.
13
+ * (`preventDefault()` 는 전파를 막지 않으므로 그것으로는 못 막는다.)
14
+ * 인용구·구분선·강조박스의 ▾ 가 전부 이 경로를 탄다.
15
+ */
16
+ anchor) {
17
+ useEffect(() => {
18
+ if (!open)
19
+ return;
20
+ const away = (e) => {
21
+ const t = e.target;
22
+ if (ref.current?.contains(t) || anchor?.current?.contains(t))
23
+ return;
24
+ onClose();
25
+ };
26
+ const esc = (e) => { if (e.key === 'Escape')
27
+ onClose(); };
28
+ document.addEventListener('mousedown', away);
29
+ document.addEventListener('keydown', esc);
30
+ return () => {
31
+ document.removeEventListener('mousedown', away);
32
+ document.removeEventListener('keydown', esc);
33
+ };
34
+ }, [open, ref, onClose, anchor]);
35
+ }
36
+ //# sourceMappingURL=useDismiss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDismiss.js","sourceRoot":"","sources":["../src/useDismiss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,IAAa,EACb,GAAkC,EAClC,OAAmB;AACnB;;;;;GAKG;AACH,MAAsC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,IAAI,GAAG,CAAC,CAAa,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc,CAAA;YAC1B,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAM;YACpE,OAAO,EAAE,CAAA;QACX,CAAC,CAAA;QACD,MAAM,GAAG,GAAG,CAAC,CAAgB,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAA,CAAC,CAAC,CAAA;QACvE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC5C,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACzC,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YAC/C,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QAC9C,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAClC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 분할 타일이 "마지막에 고른 모양" 을 기억한다.
3
+ *
4
+ * 같은 모양을 연달아 쓸 때가 많아서, 한 번 고르면 그 뒤로는 본체만 눌러 넣을 수 있어야 한다.
5
+ * 매번 ▾ 를 열게 하면 두 번 클릭이 계속 반복된다.
6
+ * 브라우저에 남겨 두므로 다음에 열어도 이어진다.
7
+ */
8
+ export declare function useLastVariant<T extends string>(key: string, fallback: T, valid?: readonly string[]): readonly [T, (v: T) => void];
9
+ //# sourceMappingURL=useLastVariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLastVariant.d.ts","sourceRoot":"","sources":["../src/useLastVariant.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,oBAWjE,CAAC,WAKnC"}
@@ -0,0 +1,33 @@
1
+ import { useCallback, useState } from 'react';
2
+ /**
3
+ * 분할 타일이 "마지막에 고른 모양" 을 기억한다.
4
+ *
5
+ * 같은 모양을 연달아 쓸 때가 많아서, 한 번 고르면 그 뒤로는 본체만 눌러 넣을 수 있어야 한다.
6
+ * 매번 ▾ 를 열게 하면 두 번 클릭이 계속 반복된다.
7
+ * 브라우저에 남겨 두므로 다음에 열어도 이어진다.
8
+ */
9
+ export function useLastVariant(key, fallback, valid) {
10
+ const storageKey = `spike.lastVariant.${key}`;
11
+ const [value, setValue] = useState(() => {
12
+ try {
13
+ const v = localStorage.getItem(storageKey);
14
+ // **어휘가 바뀌면 남아 있던 값이 어휘 밖이 된다.**
15
+ // 그대로 쓰면 `DIVIDER_LABEL[v]` 가 undefined 라 툴팁·라벨이 빈칸으로 나온다.
16
+ if (!v)
17
+ return fallback;
18
+ return valid && !valid.includes(v) ? fallback : v;
19
+ }
20
+ catch {
21
+ return fallback;
22
+ }
23
+ });
24
+ const remember = useCallback((v) => {
25
+ setValue(v);
26
+ try {
27
+ localStorage.setItem(storageKey, v);
28
+ }
29
+ catch { /* 무시 */ }
30
+ }, [storageKey]);
31
+ return [value, remember];
32
+ }
33
+ //# sourceMappingURL=useLastVariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLastVariant.js","sourceRoot":"","sources":["../src/useLastVariant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE7C;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAmB,GAAW,EAAE,QAAW,EAAE,KAAyB;IAClG,MAAM,UAAU,GAAG,qBAAqB,GAAG,EAAE,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,GAAG,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAC1C,iCAAiC;YACjC,2DAA2D;YAC3D,IAAI,CAAC,CAAC;gBAAE,OAAO,QAAQ,CAAA;YACvB,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAO,CAAA;QAC1D,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,QAAQ,CAAA;QAAC,CAAC;IAC7B,CAAC,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAI,EAAE,EAAE;QACpC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,CAAC;YAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAChB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAU,CAAA;AACnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** 지금 올라가는 중인 사진 수 — "n장 올리는 중" 을 띄우려는 소비자용 */
2
+ export declare function useUploadCount(): number;
3
+ //# sourceMappingURL=useUploadCount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadCount.d.ts","sourceRoot":"","sources":["../src/useUploadCount.ts"],"names":[],"mappings":"AAGA,+CAA+C;AAC/C,wBAAgB,cAAc,IAAI,MAAM,CAIvC"}
@@ -0,0 +1,9 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { onUploads } from '@storkspear/post-editor-core';
3
+ /** 지금 올라가는 중인 사진 수 — "n장 올리는 중" 을 띄우려는 소비자용 */
4
+ export function useUploadCount() {
5
+ const [n, setN] = useState(0);
6
+ useEffect(() => onUploads(setN), []);
7
+ return n;
8
+ }
9
+ //# sourceMappingURL=useUploadCount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadCount.js","sourceRoot":"","sources":["../src/useUploadCount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,+CAA+C;AAC/C,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,OAAO,CAAC,CAAA;AACV,CAAC"}