@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.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/ColorPicker.d.ts +11 -0
- package/dist/ColorPicker.d.ts.map +1 -0
- package/dist/ColorPicker.js +30 -0
- package/dist/ColorPicker.js.map +1 -0
- package/dist/DrawioModal.d.ts +9 -0
- package/dist/DrawioModal.d.ts.map +1 -0
- package/dist/DrawioModal.js +97 -0
- package/dist/DrawioModal.js.map +1 -0
- package/dist/FontMenu.d.ts +14 -0
- package/dist/FontMenu.d.ts.map +1 -0
- package/dist/FontMenu.js +14 -0
- package/dist/FontMenu.js.map +1 -0
- package/dist/Icon.d.ts +69 -0
- package/dist/Icon.d.ts.map +1 -0
- package/dist/Icon.js +47 -0
- package/dist/Icon.js.map +1 -0
- package/dist/InsertHandle.d.ts +14 -0
- package/dist/InsertHandle.d.ts.map +1 -0
- package/dist/InsertHandle.js +60 -0
- package/dist/InsertHandle.js.map +1 -0
- package/dist/PickMenu.d.ts +61 -0
- package/dist/PickMenu.d.ts.map +1 -0
- package/dist/PickMenu.js +57 -0
- package/dist/PickMenu.js.map +1 -0
- package/dist/Popover.d.ts +20 -0
- package/dist/Popover.d.ts.map +1 -0
- package/dist/Popover.js +22 -0
- package/dist/Popover.js.map +1 -0
- package/dist/PostTitle.d.ts +33 -0
- package/dist/PostTitle.d.ts.map +1 -0
- package/dist/PostTitle.js +171 -0
- package/dist/PostTitle.js.map +1 -0
- package/dist/SelectionBubble.d.ts +6 -0
- package/dist/SelectionBubble.d.ts.map +1 -0
- package/dist/SelectionBubble.js +71 -0
- package/dist/SelectionBubble.js.map +1 -0
- package/dist/TableTools.d.ts +10 -0
- package/dist/TableTools.d.ts.map +1 -0
- package/dist/TableTools.js +200 -0
- package/dist/TableTools.js.map +1 -0
- package/dist/Toolbar.d.ts +17 -0
- package/dist/Toolbar.d.ts.map +1 -0
- package/dist/Toolbar.js +333 -0
- package/dist/Toolbar.js.map +1 -0
- package/dist/UrlPrompt.d.ts +24 -0
- package/dist/UrlPrompt.d.ts.map +1 -0
- package/dist/UrlPrompt.js +53 -0
- package/dist/UrlPrompt.js.map +1 -0
- package/dist/VariantMenu.d.ts +47 -0
- package/dist/VariantMenu.d.ts.map +1 -0
- package/dist/VariantMenu.js +21 -0
- package/dist/VariantMenu.js.map +1 -0
- package/dist/WidthToggle.d.ts +19 -0
- package/dist/WidthToggle.d.ts.map +1 -0
- package/dist/WidthToggle.js +17 -0
- package/dist/WidthToggle.js.map +1 -0
- package/dist/bubbleShows.d.ts +10 -0
- package/dist/bubbleShows.d.ts.map +1 -0
- package/dist/bubbleShows.js +29 -0
- package/dist/bubbleShows.js.map +1 -0
- package/dist/content-baked.d.ts +22 -0
- package/dist/content-baked.d.ts.map +1 -0
- package/dist/content-baked.js +21 -0
- package/dist/content-baked.js.map +1 -0
- package/dist/content.d.ts +29 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +35 -0
- package/dist/content.js.map +1 -0
- package/dist/extensions/DiagramView.d.ts +26 -0
- package/dist/extensions/DiagramView.d.ts.map +1 -0
- package/dist/extensions/DiagramView.js +146 -0
- package/dist/extensions/DiagramView.js.map +1 -0
- package/dist/extensions/FigureView.d.ts +3 -0
- package/dist/extensions/FigureView.d.ts.map +1 -0
- package/dist/extensions/FigureView.js +108 -0
- package/dist/extensions/FigureView.js.map +1 -0
- package/dist/index.d.ts +100 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/objects/ObjectFloat.d.ts +11 -0
- package/dist/objects/ObjectFloat.d.ts.map +1 -0
- package/dist/objects/ObjectFloat.js +42 -0
- package/dist/objects/ObjectFloat.js.map +1 -0
- package/dist/objects/ObjectLayer.d.ts +10 -0
- package/dist/objects/ObjectLayer.d.ts.map +1 -0
- package/dist/objects/ObjectLayer.js +20 -0
- package/dist/objects/ObjectLayer.js.map +1 -0
- package/dist/objects/blockSize.d.ts +30 -0
- package/dist/objects/blockSize.d.ts.map +1 -0
- package/dist/objects/blockSize.js +56 -0
- package/dist/objects/blockSize.js.map +1 -0
- package/dist/objects/code.d.ts +3 -0
- package/dist/objects/code.d.ts.map +1 -0
- package/dist/objects/code.js +55 -0
- package/dist/objects/code.js.map +1 -0
- package/dist/objects/diagram.d.ts +21 -0
- package/dist/objects/diagram.d.ts.map +1 -0
- package/dist/objects/diagram.js +109 -0
- package/dist/objects/diagram.js.map +1 -0
- package/dist/objects/diagramGlyphs.d.ts +12 -0
- package/dist/objects/diagramGlyphs.d.ts.map +1 -0
- package/dist/objects/diagramGlyphs.js +49 -0
- package/dist/objects/diagramGlyphs.js.map +1 -0
- package/dist/objects/divider.d.ts +22 -0
- package/dist/objects/divider.d.ts.map +1 -0
- package/dist/objects/divider.js +60 -0
- package/dist/objects/divider.js.map +1 -0
- package/dist/objects/figure.d.ts +3 -0
- package/dist/objects/figure.d.ts.map +1 -0
- package/dist/objects/figure.js +62 -0
- package/dist/objects/figure.js.map +1 -0
- package/dist/objects/imageRow.d.ts +3 -0
- package/dist/objects/imageRow.d.ts.map +1 -0
- package/dist/objects/imageRow.js +29 -0
- package/dist/objects/imageRow.js.map +1 -0
- package/dist/objects/quote.d.ts +6 -0
- package/dist/objects/quote.d.ts.map +1 -0
- package/dist/objects/quote.js +13 -0
- package/dist/objects/quote.js.map +1 -0
- package/dist/objects/quoteGlyphs.d.ts +6 -0
- package/dist/objects/quoteGlyphs.d.ts.map +1 -0
- package/dist/objects/quoteGlyphs.js +28 -0
- package/dist/objects/quoteGlyphs.js.map +1 -0
- package/dist/objects/quoteRow.d.ts +3 -0
- package/dist/objects/quoteRow.d.ts.map +1 -0
- package/dist/objects/quoteRow.js +61 -0
- package/dist/objects/quoteRow.js.map +1 -0
- package/dist/objects/registry.d.ts +60 -0
- package/dist/objects/registry.d.ts.map +1 -0
- package/dist/objects/registry.js +45 -0
- package/dist/objects/registry.js.map +1 -0
- package/dist/objects/table.d.ts +11 -0
- package/dist/objects/table.d.ts.map +1 -0
- package/dist/objects/table.js +136 -0
- package/dist/objects/table.js.map +1 -0
- package/dist/objects/useDomRect.d.ts +14 -0
- package/dist/objects/useDomRect.d.ts.map +1 -0
- package/dist/objects/useDomRect.js +32 -0
- package/dist/objects/useDomRect.js.map +1 -0
- package/dist/objects/useEngaged.d.ts +14 -0
- package/dist/objects/useEngaged.d.ts.map +1 -0
- package/dist/objects/useEngaged.js +41 -0
- package/dist/objects/useEngaged.js.map +1 -0
- package/dist/pickItems.d.ts +36 -0
- package/dist/pickItems.d.ts.map +1 -0
- package/dist/pickItems.js +40 -0
- package/dist/pickItems.js.map +1 -0
- package/dist/recentColors.d.ts +7 -0
- package/dist/recentColors.d.ts.map +1 -0
- package/dist/recentColors.js +30 -0
- package/dist/recentColors.js.map +1 -0
- package/dist/seeds/drawio/aws.d.ts +15 -0
- package/dist/seeds/drawio/aws.d.ts.map +1 -0
- package/dist/seeds/drawio/aws.js +15 -0
- package/dist/seeds/drawio/aws.js.map +1 -0
- package/dist/seeds/drawio/azure.d.ts +14 -0
- package/dist/seeds/drawio/azure.d.ts.map +1 -0
- package/dist/seeds/drawio/azure.js +14 -0
- package/dist/seeds/drawio/azure.js.map +1 -0
- package/dist/seeds/drawio/ec2docker.d.ts +15 -0
- package/dist/seeds/drawio/ec2docker.d.ts.map +1 -0
- package/dist/seeds/drawio/ec2docker.js +15 -0
- package/dist/seeds/drawio/ec2docker.js.map +1 -0
- package/dist/seeds/drawio/userflow.d.ts +21 -0
- package/dist/seeds/drawio/userflow.d.ts.map +1 -0
- package/dist/seeds/drawio/userflow.js +21 -0
- package/dist/seeds/drawio/userflow.js.map +1 -0
- package/dist/seeds/mermaid.d.ts +19 -0
- package/dist/seeds/mermaid.d.ts.map +1 -0
- package/dist/seeds/mermaid.js +82 -0
- package/dist/seeds/mermaid.js.map +1 -0
- package/dist/useAnchoredPos.d.ts +22 -0
- package/dist/useAnchoredPos.d.ts.map +1 -0
- package/dist/useAnchoredPos.js +57 -0
- package/dist/useAnchoredPos.js.map +1 -0
- package/dist/useDismiss.d.ts +17 -0
- package/dist/useDismiss.d.ts.map +1 -0
- package/dist/useDismiss.js +36 -0
- package/dist/useDismiss.js.map +1 -0
- package/dist/useLastVariant.d.ts +9 -0
- package/dist/useLastVariant.d.ts.map +1 -0
- package/dist/useLastVariant.js +33 -0
- package/dist/useLastVariant.js.map +1 -0
- package/dist/useUploadCount.d.ts +3 -0
- package/dist/useUploadCount.d.ts.map +1 -0
- package/dist/useUploadCount.js +9 -0
- package/dist/useUploadCount.js.map +1 -0
- package/package.json +57 -0
- 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<br>: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<br>: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<br>: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<br>: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=\"볼륨<br>/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("#drawio-svg-DSFkt4KqB1gwF5jM7DE3-gradient-light-dark_f78e04_b85e00_-1-light-dark_d05c17_e07c41_-1-s-0");\"></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=\"로그인<br>되어 있나\" 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=\"계정이<br>있나\" 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=\"홈 화면<br>• 피드<br>• 프로필<br>• 설정\" 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 @@
|
|
|
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"}
|