` と1枚挟むので、最初の `p` の margin-top 16 が内側の div に相殺されて残る — index.tsx:61-65)",
+ "width": "fill_container",
+ "height": 260,
+ "fill": "$lib:gray-0",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb364",
+ "name": "Placeholder Label",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "README の画像",
+ "lineHeight": 1.5,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb369",
+ "name": "h2(article.css: 1.53em=26px / lh1.4 / margin 56-0-16 / padding-bottom 4 / border-bottom 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb367",
+ "name": "h2 Inner",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 0,
+ 0,
+ 4,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb366",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI、Qiita Preview へようこそ!",
+ "lineHeight": 1.4,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 26,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "Mb368",
+ "name": "Border Bottom",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ],
+ "padding": [
+ 56,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb372",
+ "name": "p(article.css: margin 16-0)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb370",
+ "name": "Line",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI とは、手元の環境で記事の執筆・プレビュー・投稿ができるツールです。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Mb371",
+ "name": "Line",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI を使うことで、普段お使いのエディタなどを使って記事の執筆・投稿がしやすくなります。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb385",
+ "name": "ul(article.css: padding-left 1.5em / margin 16-0 / list-style disc)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb376",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb374",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb373",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Mb375",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事を Markdown で書いてそのままプレビューできる",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb380",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb378",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb377",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Mb379",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライド(Marp)にも対応している",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb384",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb382",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb381",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Mb383",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "投稿・更新も CLI から行える",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb389",
+ "name": "h2(article.css: 1.53em=26px / lh1.4 / margin 56-0-16 / padding-bottom 4 / border-bottom 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb387",
+ "name": "h2 Inner",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 0,
+ 0,
+ 4,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb386",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ご利用の前に",
+ "lineHeight": 1.4,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 26,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "Mb388",
+ "name": "Border Bottom",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ],
+ "padding": [
+ 56,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb408",
+ "name": "p(article.css: margin 16-0。pen に折り返しの指定が無いので、run 混在の行は幅の見積もりで割っている)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb391",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb390",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI、Qiita Preview を利用さ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb400",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb392",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "れたら、",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Mb395",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb393",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "利用規約",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Mb394",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Mb396",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "、",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Mb399",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb397",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "プライバシーポ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Mb398",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb405",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb403",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb401",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "リシー",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Mb402",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Mb404",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "に同意したものとみなします",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb407",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb406",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb410",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb409",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "こちらの記事もご覧ください",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb418",
+ "name": "p(article.css: margin 16-0。pen に折り返しの指定が無いので、run 混在の行は幅の見積もりで割っている)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb415",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Mb413",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb411",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "Qiita CLI の使い方",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Mb412",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Mb414",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": " に基本的な流れ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Mb417",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Mb416",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "をまとめています。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "imports": {
+ "lib": "../../shared-library.lib.pen"
+ },
+ "fileToken": "0063e59a-bd40-4ae8-a056-160179d4755a"
+}
diff --git a/design/pages/items/items.pen b/design/pages/items/items.pen
new file mode 100644
index 0000000..e16f170
--- /dev/null
+++ b/design/pages/items/items.pen
@@ -0,0 +1,5092 @@
+{
+ "version": "2.17",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It029",
+ "name": "/items/[id] - ideal state(1920px)",
+ "x": 0,
+ "y": 0,
+ "clip": true,
+ "width": 1920,
+ "height": 1080,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "It027",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1080
+ },
+ {
+ "type": "frame",
+ "id": "It028",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It010",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It008",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It004",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It001",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "articles/my-article.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "It003",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "It002",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It007",
+ "name": "Publish Button(実装 headerButtonStyle は padding 4/16 + border 2px が padding の外。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It005",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "記事を投稿する",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "It006",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "It009",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It026",
+ "name": "Contents Wrapper (実装 contentsWrapperStyle: margin 16/16/0)",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It025",
+ "name": "Card (実装 contentsContainerStyle: maxWidth 820 / radius 8 / padding 24)",
+ "width": 820,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It014",
+ "name": "ArticleInfo (collapsed)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It013",
+ "name": "Summary (実装 infoSummaryStyle は gap も justify も無く ::after のシェブロンがラベル直後)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It011",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "It012",
+ "name": "Toggle Icon (実装は expand_more / expand_less。pen に字形が無く keyboard_arrow_* で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_up",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It024",
+ "name": "Article",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "It015",
+ "name": "Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI で記事を書く",
+ "lineHeight": "$lib:text-headline1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-headline1",
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "frame",
+ "id": "It020",
+ "name": "Tag List (実装 tagListWrapStyle: marginTop 8 / gap 8。最後以外のタグは chip の中に \",\" が入る — Article.tsx:31)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(1)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It017",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It016",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita,",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It019",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It018",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It023",
+ "name": "Body (実装 bodyStyle: marginTop 48。中身は Qiita 側 article.css の .it-MdContent)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(6)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma066",
+ "name": "MdContent(実装 .it-MdContent = Qiita の article.css。デスクトップの実値をそのまま写している。フォントサイズと行送りは em ベースで デザイントークンに受け口が無いため article.css の値(トークン外)をリテラルで置いている。CSS の margin は隣接で相殺されるので、ブロック間は max(前の margin-bottom, 次の margin-top) を上 padding にしてある)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma004",
+ "name": "h2(article.css: 1.53em=26px / lh1.4 / margin 56-0-16 / padding-bottom 4 / border-bottom 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma002",
+ "name": "h2 Inner",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 0,
+ 0,
+ 4,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma001",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "はじめに",
+ "lineHeight": 1.4,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 26,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma003",
+ "name": "Border Bottom",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma016",
+ "name": "p(article.css: margin 16-0。pen に折り返しの指定が無いので、run 混在の行は幅の見積もりで割っている)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma009",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma005",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI を使うと、手元のエディタで記事を書いて ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Ma007",
+ "name": "Inline Code(article.css: bg rgba(0,0,0,.08) / radius4 / 等幅。合成は #ebebeb で、最も近い $lib:gray-20 = #edeeee)",
+ "fill": "$lib:gray-20",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ 4
+ ],
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma006",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma008",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": " でそのまま確認できます。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma015",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma010",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "詳しくは ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Ma013",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma011",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "公式ガイド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma012",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma014",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "をご覧ください。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma029",
+ "name": "ul(article.css: padding-left 1.5em / margin 16-0 / list-style disc)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma020",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma018",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma017",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma019",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown をそのままプレビューできる",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma024",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma022",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma021",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma023",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事の投稿・更新まで CLI で完結する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma028",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma026",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma025",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma027",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドモードにも対応している",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma031",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma030",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "インストール",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma035",
+ "name": "code-frame(article.css: radius8 / margin-block 24 / padding 8-16 / bg gray110 / 文字 gray0。pre code は .82em=14 / lh1.5)",
+ "width": "fill_container",
+ "fill": "$lib:gray-110",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma032",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npm install @qiita/qiita-cli --save-dev",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma033",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita init",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma034",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita preview",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma040",
+ "name": "blockquote(article.css: margin 24-0 / padding 8-16 / 左に 4px の bar(gray30・radius4)/ 文字 mediumEmphasis)",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "rectangle",
+ "id": "Ma036",
+ "name": "Bar",
+ "fill": "$lib:gray-30",
+ "width": 4,
+ "height": "fill_container",
+ "cornerRadius": 4
+ },
+ {
+ "type": "frame",
+ "id": "Ma039",
+ "name": "Body",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 8,
+ 16
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma037",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "Node.js 22.22.1 以上が必要です。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma038",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "古い環境では qiita preview が起動しません。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma042",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma041",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "よく使うオプション",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma063",
+ "name": "table(article.css: margin 16-0 / th は bold・bg surface / td は padding 4-12 / 罫線 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma047",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma044",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma043",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "コマンド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma046",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma045",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "説明",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma052",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma049",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma048",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma051",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma050",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ブラウザでプレビューを開く",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma057",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma054",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma053",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita publish",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma056",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma055",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事を Qiita に投稿する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma062",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma059",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma058",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita pull",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma061",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma060",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita から記事を取得する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma065",
+ "name": "p(article.css: margin 16-0)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma064",
+ "name": "Line",
+ "fill": "$lib:high-emphasis-text",
+ "content": "投稿すると記事の状態が「投稿済み」に変わり、差分の表示も消えます。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It084",
+ "name": "/items/[id] - article info open state(1920px)",
+ "x": 0,
+ "y": 1180,
+ "clip": true,
+ "width": 1920,
+ "height": 1296,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "It082",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1296
+ },
+ {
+ "type": "frame",
+ "id": "It083",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It039",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It037",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It033",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It030",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "articles/my-article.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "It032",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "It031",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It036",
+ "name": "Publish Button(実装 headerButtonStyle は padding 4/16 + border 2px が padding の外。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It034",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "記事を投稿する",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "It035",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "It038",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It081",
+ "name": "Contents Wrapper (実装 contentsWrapperStyle: margin 16/16/0)",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It080",
+ "name": "Card (実装 contentsContainerStyle: maxWidth 820 / radius 8 / padding 24)",
+ "width": 820,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It069",
+ "name": "ArticleInfo (open)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It042",
+ "name": "Summary (実装 infoSummaryStyle は gap も justify も無く ::after のシェブロンがラベル直後)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It040",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "It041",
+ "name": "Toggle Icon (実装は expand_more / expand_less。pen に字形が無く keyboard_arrow_* で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_down",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It048",
+ "name": "Info Row (実装 infoListStyle: grid 100px + 1fr / gap 12。2行目以降は marginTop 4)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It046",
+ "name": "Label Col",
+ "width": 100,
+ "children": [
+ {
+ "type": "text",
+ "id": "It045",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "公開範囲",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-bold"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It047",
+ "name": "Value Col",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "It044",
+ "name": "Icon",
+ "width": 14,
+ "height": 14,
+ "icon": "public",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ },
+ {
+ "type": "text",
+ "id": "It043",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "content": "全体",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It053",
+ "name": "Info Row (実装 infoListStyle: grid 100px + 1fr / gap 12。2行目以降は marginTop 4)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It051",
+ "name": "Label Col",
+ "width": 100,
+ "children": [
+ {
+ "type": "text",
+ "id": "It050",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事の状態",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-bold"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It052",
+ "name": "Value Col",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It049",
+ "name": "Value",
+ "fill": "$lib:blue-text",
+ "content": "投稿済み",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It058",
+ "name": "Info Row (実装 infoListStyle: grid 100px + 1fr / gap 12。2行目以降は marginTop 4)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It056",
+ "name": "Label Col",
+ "width": 100,
+ "children": [
+ {
+ "type": "text",
+ "id": "It055",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "差分",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-bold"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It057",
+ "name": "Value Col",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It054",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "content": "あり",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It063",
+ "name": "Info Row (実装 infoListStyle: grid 100px + 1fr / gap 12。2行目以降は marginTop 4)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It061",
+ "name": "Label Col",
+ "width": 100,
+ "children": [
+ {
+ "type": "text",
+ "id": "It060",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Organization",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-bold"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It062",
+ "name": "Value Col",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It059",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "content": "紐付けなし",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It068",
+ "name": "Info Row (実装 infoListStyle: grid 100px + 1fr / gap 12。2行目以降は marginTop 4)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It066",
+ "name": "Label Col",
+ "width": 100,
+ "children": [
+ {
+ "type": "text",
+ "id": "It065",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドモード",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-bold"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It067",
+ "name": "Value Col",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It064",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "content": "OFF",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ic006",
+ "name": "Info Row (実装 infoListStyle: grid 100px / minmax(0,1fr)、gap 12、行間は marginTop 4。postingCampaign があるときだけ出る2行 — ArticleInfo.tsx:97-113)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ic001",
+ "name": "Label Col",
+ "width": 100,
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ic002",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事投稿キャン",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "Ic003",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ペーン",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ic004",
+ "name": "Value Col",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ic005",
+ "name": "Value",
+ "fill": "$lib:blue-text",
+ "content": "お題は不問!Qiita Tech Festa 2026で記事投稿!",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ic011",
+ "name": "Info Row (実装 infoListStyle: grid 100px / minmax(0,1fr)、gap 12、行間は marginTop 4。postingCampaign があるときだけ出る2行 — ArticleInfo.tsx:97-113)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ic007",
+ "name": "Label Col",
+ "width": 100,
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ic008",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "規約同意",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ic009",
+ "name": "Value Col",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ic010",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "content": "同意済み",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It079",
+ "name": "Article",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "It070",
+ "name": "Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI で記事を書く",
+ "lineHeight": "$lib:text-headline1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-headline1",
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "frame",
+ "id": "It075",
+ "name": "Tag List (実装 tagListWrapStyle: marginTop 8 / gap 8。最後以外のタグは chip の中に \",\" が入る — Article.tsx:31)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(1)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It072",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It071",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita,",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It074",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It073",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It078",
+ "name": "Body (実装 bodyStyle: marginTop 48。中身は Qiita 側 article.css の .it-MdContent)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(6)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma132",
+ "name": "MdContent(実装 .it-MdContent = Qiita の article.css。デスクトップの実値をそのまま写している。フォントサイズと行送りは em ベースで デザイントークンに受け口が無いため article.css の値(トークン外)をリテラルで置いている。CSS の margin は隣接で相殺されるので、ブロック間は max(前の margin-bottom, 次の margin-top) を上 padding にしてある)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma070",
+ "name": "h2(article.css: 1.53em=26px / lh1.4 / margin 56-0-16 / padding-bottom 4 / border-bottom 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma068",
+ "name": "h2 Inner",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 0,
+ 0,
+ 4,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma067",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "はじめに",
+ "lineHeight": 1.4,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 26,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma069",
+ "name": "Border Bottom",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma082",
+ "name": "p(article.css: margin 16-0。pen に折り返しの指定が無いので、run 混在の行は幅の見積もりで割っている)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma075",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma071",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI を使うと、手元のエディタで記事を書いて ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Ma073",
+ "name": "Inline Code(article.css: bg rgba(0,0,0,.08) / radius4 / 等幅。合成は #ebebeb で、最も近い $lib:gray-20 = #edeeee)",
+ "fill": "$lib:gray-20",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ 4
+ ],
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma072",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma074",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": " でそのまま確認できます。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma081",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma076",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "詳しくは ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Ma079",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma077",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "公式ガイド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma078",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma080",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "をご覧ください。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma095",
+ "name": "ul(article.css: padding-left 1.5em / margin 16-0 / list-style disc)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma086",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma084",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma083",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma085",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown をそのままプレビューできる",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma090",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma088",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma087",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma089",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事の投稿・更新まで CLI で完結する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma094",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma092",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma091",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma093",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドモードにも対応している",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma097",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma096",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "インストール",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma101",
+ "name": "code-frame(article.css: radius8 / margin-block 24 / padding 8-16 / bg gray110 / 文字 gray0。pre code は .82em=14 / lh1.5)",
+ "width": "fill_container",
+ "fill": "$lib:gray-110",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma098",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npm install @qiita/qiita-cli --save-dev",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma099",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita init",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma100",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita preview",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma106",
+ "name": "blockquote(article.css: margin 24-0 / padding 8-16 / 左に 4px の bar(gray30・radius4)/ 文字 mediumEmphasis)",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "rectangle",
+ "id": "Ma102",
+ "name": "Bar",
+ "fill": "$lib:gray-30",
+ "width": 4,
+ "height": "fill_container",
+ "cornerRadius": 4
+ },
+ {
+ "type": "frame",
+ "id": "Ma105",
+ "name": "Body",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 8,
+ 16
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma103",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "Node.js 22.22.1 以上が必要です。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma104",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "古い環境では qiita preview が起動しません。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma108",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma107",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "よく使うオプション",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma129",
+ "name": "table(article.css: margin 16-0 / th は bold・bg surface / td は padding 4-12 / 罫線 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma113",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma110",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma109",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "コマンド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma112",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma111",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "説明",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma118",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma115",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma114",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma117",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma116",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ブラウザでプレビューを開く",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma123",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma120",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma119",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita publish",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma122",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma121",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事を Qiita に投稿する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma128",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma125",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma124",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita pull",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma127",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma126",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita から記事を取得する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma131",
+ "name": "p(article.css: margin 16-0)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma130",
+ "name": "Line",
+ "fill": "$lib:high-emphasis-text",
+ "content": "投稿すると記事の状態が「投稿済み」に変わり、差分の表示も消えます。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It089",
+ "name": "/items/[id] - not found state(1920px)",
+ "x": 0,
+ "y": 2576,
+ "clip": true,
+ "width": 1920,
+ "height": 1080,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "It087",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1080
+ },
+ {
+ "type": "frame",
+ "id": "It088",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It086",
+ "name": "Error Message Wrapper (実装 show.tsx の
。ツールバーも白カードも出ない)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": "$lib:getSpace(2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "It085",
+ "name": "Message",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ファイルが見つかりません",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-subhead2",
+ "fontWeight": "$lib:fontWeight-normal",
+ "textAlign": "center",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It101",
+ "name": "/items/[id] - frontmatter error state(1920px)",
+ "x": 0,
+ "y": 3756,
+ "clip": true,
+ "width": 1920,
+ "height": 1080,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "It099",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1080
+ },
+ {
+ "type": "frame",
+ "id": "It100",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It098",
+ "name": "Frontmatter Error Wrapper (実装 errorContentsStyle: red10 / radius 8 / margin 24 auto 0 / width fit-content / padding 16 24)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It097",
+ "name": "Error Box",
+ "fill": "$lib:red-10",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(3)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It096",
+ "name": "Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事の設定の入力内容に誤りがあるため、プレビューが表示できません",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "frame",
+ "id": "It092",
+ "name": "Error Row (実装 errorStyle: 2行目以降は marginTop 12)",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "It090",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "error",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:red-60"
+ },
+ {
+ "type": "text",
+ "id": "It091",
+ "name": "Message",
+ "fill": "$lib:high-emphasis-text",
+ "content": "titleは必須です",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It095",
+ "name": "Error Row (実装 errorStyle: 2行目以降は marginTop 12)",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "It093",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "error",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:red-60"
+ },
+ {
+ "type": "text",
+ "id": "It094",
+ "name": "Message",
+ "fill": "$lib:high-emphasis-text",
+ "content": "tagsは1つ以上必要です",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "alignItems": "center"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It130",
+ "name": "/items/[id] - ideal state(1199px)",
+ "x": 2220,
+ "y": 0,
+ "clip": true,
+ "width": 1199,
+ "height": 1080,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "It128",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1080
+ },
+ {
+ "type": "frame",
+ "id": "It129",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It111",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It109",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It105",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It102",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "articles/my-article.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "It104",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "It103",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It108",
+ "name": "Publish Button(実装 headerButtonStyle は padding 4/16 + border 2px が padding の外。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It106",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "記事を投稿する",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "It107",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "It110",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It127",
+ "name": "Contents Wrapper (実装 contentsWrapperStyle: margin 16/16/0)",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It126",
+ "name": "Card (実装 contentsContainerStyle: maxWidth 820(この幅では効かず fill) / radius 8 / padding 24)",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It115",
+ "name": "ArticleInfo (collapsed)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It114",
+ "name": "Summary (実装 infoSummaryStyle は gap も justify も無く ::after のシェブロンがラベル直後)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It112",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "It113",
+ "name": "Toggle Icon (実装は expand_more / expand_less。pen に字形が無く keyboard_arrow_* で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_up",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It125",
+ "name": "Article",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "It116",
+ "name": "Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI で記事を書く",
+ "lineHeight": "$lib:text-headline1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-headline1",
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "frame",
+ "id": "It121",
+ "name": "Tag List (実装 tagListWrapStyle: marginTop 8 / gap 8。最後以外のタグは chip の中に \",\" が入る — Article.tsx:31)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(1)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It118",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It117",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita,",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It120",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It119",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It124",
+ "name": "Body (実装 bodyStyle: marginTop 48。中身は Qiita 側 article.css の .it-MdContent)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(6)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma198",
+ "name": "MdContent(実装 .it-MdContent = Qiita の article.css。デスクトップの実値をそのまま写している。フォントサイズと行送りは em ベースで デザイントークンに受け口が無いため article.css の値(トークン外)をリテラルで置いている。CSS の margin は隣接で相殺されるので、ブロック間は max(前の margin-bottom, 次の margin-top) を上 padding にしてある)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma136",
+ "name": "h2(article.css: 1.53em=26px / lh1.4 / margin 56-0-16 / padding-bottom 4 / border-bottom 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma134",
+ "name": "h2 Inner",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 0,
+ 0,
+ 4,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma133",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "はじめに",
+ "lineHeight": 1.4,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 26,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma135",
+ "name": "Border Bottom",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma148",
+ "name": "p(article.css: margin 16-0。pen に折り返しの指定が無いので、run 混在の行は幅の見積もりで割っている)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma141",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma137",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI を使うと、手元のエディタで記事を書いて ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Ma139",
+ "name": "Inline Code(article.css: bg rgba(0,0,0,.08) / radius4 / 等幅。合成は #ebebeb で、最も近い $lib:gray-20 = #edeeee)",
+ "fill": "$lib:gray-20",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ 4
+ ],
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma138",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma140",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": " でそのまま確認できます",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma147",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma142",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "。詳しくは ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Ma145",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma143",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "公式ガイド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma144",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma146",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "をご覧ください。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma161",
+ "name": "ul(article.css: padding-left 1.5em / margin 16-0 / list-style disc)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma152",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma150",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma149",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma151",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown をそのままプレビューできる",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma156",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma154",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma153",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma155",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事の投稿・更新まで CLI で完結する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma160",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma158",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma157",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma159",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドモードにも対応している",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma163",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma162",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "インストール",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma167",
+ "name": "code-frame(article.css: radius8 / margin-block 24 / padding 8-16 / bg gray110 / 文字 gray0。pre code は .82em=14 / lh1.5)",
+ "width": "fill_container",
+ "fill": "$lib:gray-110",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma164",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npm install @qiita/qiita-cli --save-dev",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma165",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita init",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma166",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita preview",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma172",
+ "name": "blockquote(article.css: margin 24-0 / padding 8-16 / 左に 4px の bar(gray30・radius4)/ 文字 mediumEmphasis)",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "rectangle",
+ "id": "Ma168",
+ "name": "Bar",
+ "fill": "$lib:gray-30",
+ "width": 4,
+ "height": "fill_container",
+ "cornerRadius": 4
+ },
+ {
+ "type": "frame",
+ "id": "Ma171",
+ "name": "Body",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 8,
+ 16
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma169",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "Node.js 22.22.1 以上が必要です。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma170",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "古い環境では qiita preview が起動しません。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma174",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma173",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "よく使うオプション",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma195",
+ "name": "table(article.css: margin 16-0 / th は bold・bg surface / td は padding 4-12 / 罫線 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma179",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma176",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma175",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "コマンド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma178",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma177",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "説明",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma184",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma181",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma180",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma183",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma182",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ブラウザでプレビューを開く",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma189",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma186",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma185",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita publish",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma188",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma187",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事を Qiita に投稿する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma194",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma191",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma190",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita pull",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma193",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma192",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita から記事を取得する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma197",
+ "name": "p(article.css: margin 16-0)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma196",
+ "name": "Line",
+ "fill": "$lib:high-emphasis-text",
+ "content": "投稿すると記事の状態が「投稿済み」に変わり、差分の表示も消えます。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It160",
+ "name": "/items/[id] - ideal state(375px)",
+ "x": 3719,
+ "y": 0,
+ "clip": true,
+ "width": 375,
+ "height": 1414,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It159",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It142",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It140",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It136",
+ "name": "Header Item",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It132",
+ "name": "Menu Button",
+ "width": 40,
+ "height": 40,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "It131",
+ "name": "Icon",
+ "width": 24,
+ "height": 24,
+ "icon": "menu",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It135",
+ "name": "Copy Row (実装 mobileHeaderCopyButtonStyle: grid 1fr/16px + gap 4)",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It133",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ファイルパスをコピー",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "It134",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It139",
+ "name": "Publish Button(実装 headerButtonStyle は padding 4/16 + border 2px が padding の外。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It137",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "投稿する",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "It138",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "It141",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It158",
+ "name": "Contents Wrapper (実装 contentsWrapperStyle: margin 16/16/0)",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It157",
+ "name": "Card (実装 contentsContainerStyle: maxWidth 820(この幅では効かず fill) / radius 8 / padding 24)",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "It146",
+ "name": "ArticleInfo (collapsed)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It145",
+ "name": "Summary (実装 infoSummaryStyle は gap も justify も無く ::after のシェブロンがラベル直後)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "It143",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "It144",
+ "name": "Toggle Icon (実装は expand_more / expand_less。pen に字形が無く keyboard_arrow_* で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_up",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It156",
+ "name": "Article",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "It147",
+ "name": "Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI で記事を書く",
+ "lineHeight": "$lib:text-headline1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-headline1",
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "frame",
+ "id": "It152",
+ "name": "Tag List (実装 tagListWrapStyle: marginTop 8 / gap 8。最後以外のタグは chip の中に \",\" が入る — Article.tsx:31)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(1)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "It149",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It148",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita,",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It151",
+ "name": "Tag",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ "$lib:getSpace(3/4)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "It150",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "It155",
+ "name": "Body (実装 bodyStyle: marginTop 48。中身は Qiita 側 article.css の .it-MdContent)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(6)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma267",
+ "name": "MdContent(実装 .it-MdContent = Qiita の article.css。デスクトップの実値をそのまま写している。フォントサイズと行送りは em ベースで デザイントークンに受け口が無いため article.css の値(トークン外)をリテラルで置いている。CSS の margin は隣接で相殺されるので、ブロック間は max(前の margin-bottom, 次の margin-top) を上 padding にしてある)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma202",
+ "name": "h2(article.css: 1.53em=26px / lh1.4 / margin 56-0-16 / padding-bottom 4 / border-bottom 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma200",
+ "name": "h2 Inner",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 0,
+ 0,
+ 4,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma199",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "はじめに",
+ "lineHeight": 1.4,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 26,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma201",
+ "name": "Border Bottom",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma217",
+ "name": "p(article.css: margin 16-0。pen に折り返しの指定が無いので、run 混在の行は幅の見積もりで割っている)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma204",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma203",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita CLI を使うと、手元のエディ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma209",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma205",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "タで記事を書いて ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Ma207",
+ "name": "Inline Code(article.css: bg rgba(0,0,0,.08) / radius4 / 等幅。合成は #ebebeb で、最も近い $lib:gray-20 = #edeeee)",
+ "fill": "$lib:gray-20",
+ "cornerRadius": 4,
+ "padding": [
+ 0,
+ 4
+ ],
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma206",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma208",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": " で",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma211",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma210",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "そのまま確認できます。詳しくは ",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma216",
+ "name": "Line",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma214",
+ "name": "Link",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma212",
+ "name": "Text",
+ "fill": "$lib:green-text",
+ "content": "公式ガイド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "rectangle",
+ "id": "Ma213",
+ "name": "Underline(article.css: text-decoration underline)",
+ "fill": "$lib:green-text",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma215",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "をご覧ください。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma230",
+ "name": "ul(article.css: padding-left 1.5em / margin 16-0 / list-style disc)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma221",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma219",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma218",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma220",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown をそのままプレビューできる",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma225",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma223",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma222",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma224",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事の投稿・更新まで CLI で完結する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma229",
+ "name": "li",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma227",
+ "name": "Marker(article.css: ul の padding-left 1.5em = 25.5px の中に disc が入る)",
+ "width": 26,
+ "justifyContent": "center",
+ "alignItems": "start",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma226",
+ "name": "Bullet",
+ "fill": "$lib:high-emphasis-text",
+ "content": "•",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "text",
+ "id": "Ma228",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドモードにも対応している",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma232",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma231",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "インストール",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma236",
+ "name": "code-frame(article.css: radius8 / margin-block 24 / padding 8-16 / bg gray110 / 文字 gray0。pre code は .82em=14 / lh1.5)",
+ "width": "fill_container",
+ "fill": "$lib:gray-110",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma233",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npm install @qiita/qiita-cli --save-dev",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma234",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita init",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma235",
+ "name": "Line",
+ "fill": "$lib:gray-0",
+ "content": "$ npx qiita preview",
+ "lineHeight": 1.5,
+ "fontFamily": "Noto Sans Mono",
+ "fontSize": 14,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma241",
+ "name": "blockquote(article.css: margin 24-0 / padding 8-16 / 左に 4px の bar(gray30・radius4)/ 文字 mediumEmphasis)",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "rectangle",
+ "id": "Ma237",
+ "name": "Bar",
+ "fill": "$lib:gray-30",
+ "width": 4,
+ "height": "fill_container",
+ "cornerRadius": 4
+ },
+ {
+ "type": "frame",
+ "id": "Ma240",
+ "name": "Body",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ 8,
+ 16
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma238",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "Node.js 22.22.1 以上が必要です。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ },
+ {
+ "type": "text",
+ "id": "Ma239",
+ "name": "Line",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "古い環境では qiita preview が起動しません。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 24,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma243",
+ "name": "h3(article.css: 1.29em=22px / lh1.6 / margin 40-0-16。罫線なし)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma242",
+ "name": "Heading Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "よく使うオプション",
+ "lineHeight": 1.6,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 22,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 40,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma264",
+ "name": "table(article.css: margin 16-0 / th は bold・bg surface / td は padding 4-12 / 罫線 1px divider)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma248",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma245",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma244",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "コマンド",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma247",
+ "name": "th",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma246",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "説明",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-bold",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma253",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma250",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma249",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita preview",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma252",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma251",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ブラウザでプレビューを開く",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma258",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma255",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma254",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita publish",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma257",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma256",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "記事を Qiita に投稿する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma263",
+ "name": "tr",
+ "width": "fill_container",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ma260",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma259",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "qiita pull",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma262",
+ "name": "td",
+ "width": "fill_container",
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "padding": [
+ 4,
+ 12
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma261",
+ "name": "Text",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita から記事を取得する",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Ma266",
+ "name": "p(article.css: margin 16-0)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "text",
+ "id": "Ma265",
+ "name": "Line",
+ "fill": "$lib:high-emphasis-text",
+ "content": "投稿すると記事の状態が「投稿済み」に変わり、差分の表示も消えます。",
+ "lineHeight": 1.7,
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 17,
+ "fontWeight": "$lib:fontWeight-normal",
+ "textGrowth": "fixed-width",
+ "width": "fill_container"
+ }
+ ],
+ "padding": [
+ 16,
+ 0,
+ 0,
+ 0
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "imports": {
+ "lib": "../../shared-library.lib.pen"
+ },
+ "fileToken": "48d68feb-5b1d-4838-9982-f095268d9e69"
+}
diff --git a/design/pages/slides/slides.pen b/design/pages/slides/slides.pen
new file mode 100644
index 0000000..bcd20d9
--- /dev/null
+++ b/design/pages/slides/slides.pen
@@ -0,0 +1,3928 @@
+{
+ "version": "2.17",
+ "children": [
+ {
+ "type": "frame",
+ "id": "C5fAd",
+ "x": 0,
+ "y": 0,
+ "name": "MarpSlideFrame",
+ "fill": "$lib:surface",
+ "cornerRadius": 12,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "text",
+ "id": "S709zu",
+ "name": "Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "MarpSlideFrame",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "frame",
+ "id": "MsQiL",
+ "name": "Size",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1/2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "exeuG",
+ "name": "Group Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Size",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "frame",
+ "id": "YnRSP",
+ "name": "Size Row",
+ "gap": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "EnCOw",
+ "name": "Item / 480",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1/2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "QxFKL",
+ "name": "Item Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "480x270 (16:9)",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": 10,
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "N3tg9B",
+ "name": "MarpSlideFrame",
+ "context": "qiita-cli の Preview では src/client/components/MarpSlideViewer/index.tsx が aspect-ratio 16/9 の Shadow DOM に Marp の CSS と SVG をそのまま流し込む。中身は SVG ごと等比スケールされるので、375px では文字も比例して小さくなる。ここに置いてあるのは寸法と代表的な中身で、フォントサイズはトークンの下限に丸めてある スライドの中身(タイトル・本文)のフォントサイズと太さは代表値。Marp のテーマ CSS は Shadow DOM に流し込まれるので qiita-cli のトークン(`Weight.bold` = 600)とは無関係で、リポジトリに `*.css` が無いため実際の値は確認できない。 行送り(lineHeight)も同じく代表値で、実装側は `LineHeight.subhead` を1箇所も使っていないので不一致ではないが、Marp のテーマ CSS が読めないので裏付けは取れない。 プレビュー側のスライドは各 Page の ref に 1px の枠($lib:divider)を付けている。実装 MarpSlideViewer/index.tsx の pageStyle は boxShadow だが、影を止めて枠にしたいという指摘を受けて差し替えた提案。プレゼンモード(?present=1)は全画面なので枠を付けていない。",
+ "reusable": true,
+ "clip": true,
+ "width": 480,
+ "height": 270,
+ "fill": "$lib:gray-0",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "padding": [
+ "$lib:getSpace(4)",
+ "$lib:getSpace(5)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "ZZdKa",
+ "name": "Slide Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Qiita のスライド機能",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-headline1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "D6HOm",
+ "name": "Slide Body",
+ "fill": "$lib:high-emphasis-text",
+ "content": "Markdown で書いて、そのまま発表する",
+ "lineHeight": "$lib:text-subhead1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-subhead1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "XECFK",
+ "x": 1028,
+ "y": 0,
+ "name": "/slides/[id] - ideal state(1920px)",
+ "clip": true,
+ "width": 1920,
+ "height": 1867,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "BpwuB",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1867
+ },
+ {
+ "type": "frame",
+ "id": "nU3yX",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "W416dg",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "TGzjQ",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "AFSPz",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "G5kkq",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "slides/my-slide.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Q78F7n",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "YnsjL",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "TVgZDC",
+ "name": "Actions",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "UyQWJI",
+ "name": "スライドショーを開始 Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:gray-border",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "aFX8ch",
+ "name": "Label",
+ "fill": "$lib:gray-text",
+ "content": "スライドショーを開始",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "hXV5P1",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "slideshow",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:gray-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "4Pm7xE",
+ "name": "スライドを投稿する Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "iu4k3T",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "スライドを投稿する",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "2zcaWY",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "xsRky",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "sIsXi",
+ "name": "Contents Wrapper",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "e3HFWB",
+ "name": "Card",
+ "width": 820,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "NCe61",
+ "name": "SlideInfo (collapsed)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "a0zKq",
+ "name": "Summary (実装 SlideInfo.tsx:83-91 は justify-content も gap も無く、::after のシェブロンがラベル直後に付く)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "gVtlP",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライド情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "YzMtw",
+ "name": "Toggle Icon (実装は expand_less / pen に字形が無く keyboard_arrow_up で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_up",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "R9FOhu",
+ "name": "Viewer",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "npOX3",
+ "name": "Page 1",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "l2nYS3",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 1",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner"
+ },
+ {
+ "type": "frame",
+ "id": "SwY1by",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "3rWuWi",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "NTtt38",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Marp のスライドを Qiita CLI からそのまま投稿できることを話す",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "bhbiC",
+ "name": "Page 2",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "ucgDx",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 2",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "スライドの作り方"
+ },
+ "D6HOm": {
+ "content": "--- で区切るだけ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "qSFzXg",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "QRck6H",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "mvgA4d",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "--- の区切りだけでページが増えることをデモする",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "AVNDQw",
+ "name": "Page 3",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "KV1aVw",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 3",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "投稿する"
+ },
+ "D6HOm": {
+ "content": "qiita publish で Qiita へ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "Chgrwj",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "v0cqTy",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "tWScSe",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "qiita publish の実演。投稿後の URL を見せる",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "v1QXI",
+ "x": 5622,
+ "y": 0,
+ "name": "/slides/[id]?present=1 - ideal state(1920px)",
+ "clip": true,
+ "width": 1920,
+ "height": 1080,
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Ne879",
+ "name": "Stage",
+ "width": "fill_container",
+ "height": "fill_container",
+ "children": [
+ {
+ "id": "QLe2m",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide(実装は 1920×1080 を左上基準で描き、下端 42px がフッターの外へはみ出して隠れる)",
+ "width": 1920,
+ "height": 1080
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "MEmND",
+ "x": 1028,
+ "y": 7238,
+ "name": "/slides/[id] - frontmatter error state(1920px)",
+ "clip": true,
+ "width": 1920,
+ "height": 1080,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "ltb0n",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1080
+ },
+ {
+ "type": "frame",
+ "id": "zqO65",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "v2Ct5",
+ "name": "Contents Wrapper",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(3)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "K6HKJn",
+ "name": "Frontmatter Error Panel (実装は show.tsx:126-139 / ツールバーも白カードも出ない)",
+ "fill": "$lib:red-10",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(3)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "BIXcE",
+ "name": "Error Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドの設定の入力内容に誤りがあるため、プレビューが表示できません",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "frame",
+ "id": "O2tek",
+ "name": "Error Row 1",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "KbIfp",
+ "name": "Error Icon (実装は MaterialSymbol fill=true / pen は Outlined のみ)",
+ "width": 16,
+ "height": 16,
+ "icon": "error",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:red-60"
+ },
+ {
+ "type": "text",
+ "id": "DBime",
+ "name": "Error Message 1",
+ "fill": "$lib:high-emphasis-text",
+ "content": "theme に指定できない値が入っています",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "rcga9",
+ "name": "Error Row 2",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "RaDDV",
+ "name": "Error Icon (実装は MaterialSymbol fill=true / pen は Outlined のみ)",
+ "width": 16,
+ "height": 16,
+ "icon": "error",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:red-60"
+ },
+ {
+ "type": "text",
+ "id": "pWSyO",
+ "name": "Error Message 2",
+ "fill": "$lib:high-emphasis-text",
+ "content": "title は必須です",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "ZE6Nn",
+ "x": 1028,
+ "y": 1967,
+ "name": "/slides/[id] - slide info open state(1920px)",
+ "clip": true,
+ "width": 1920,
+ "height": 1979,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "rdiqm",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1979
+ },
+ {
+ "type": "frame",
+ "id": "T5FjG",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "mNpfe",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "kkzak",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "MMUjD",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "qkuH7",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "slides/my-slide.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "Xivmd",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "DSYSF",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "PwWh1j",
+ "name": "Actions",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "KGAhU9",
+ "name": "スライドショーを開始 Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:gray-border",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "qjzgfQ",
+ "name": "Label",
+ "fill": "$lib:gray-text",
+ "content": "スライドショーを開始",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "DO2cIV",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "slideshow",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:gray-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "KTx3UZ",
+ "name": "スライドを投稿する Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "s6QbfX",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "スライドを投稿する",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "Xy80uO",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "nV23B",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "GsxNH",
+ "name": "Contents Wrapper",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "KW1HN",
+ "name": "Card",
+ "width": 820,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "FK8Rw",
+ "name": "SlideInfo (open)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "WfPys",
+ "name": "Summary (実装 SlideInfo.tsx:83-91 は justify-content も gap も無く、::after のシェブロンがラベル直後に付く)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "D4n6L",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライド情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "LU7Y8",
+ "name": "Toggle Icon (実装は expand_more / pen に字形が無く keyboard_arrow_down で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_down",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "EhmFo",
+ "name": "Info Row / タイトル",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "K57JIE",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "タイトル",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "c3Zrrm",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Qiita のスライド機能",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "T5raEP",
+ "name": "Info Row / テーマ",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "eH86T",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "テーマ",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "Mhorh",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "未設定",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "GqE4g",
+ "name": "Info Row / スライドの状態",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "uTxct",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "スライドの状態",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "lnilS",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "未投稿",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "UNCLW",
+ "name": "Info Row / ページ数",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Y7PwcZ",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "ページ数",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "lTlv8",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "3",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "KL73q",
+ "name": "Viewer",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "MPydS",
+ "name": "Page 1",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "ILu2B",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 1",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner"
+ },
+ {
+ "type": "frame",
+ "id": "S1uW3K",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "o0BM55",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "rE2ysS",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Marp のスライドを Qiita CLI からそのまま投稿できることを話す",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "ZIggFv",
+ "name": "Page 2",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "6C82sw",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 2",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "スライドの作り方"
+ },
+ "D6HOm": {
+ "content": "--- で区切るだけ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "bOOds1",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "GMJDLY",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "noLzNY",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "--- の区切りだけでページが増えることをデモする",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "RNXIaS",
+ "name": "Page 3",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "7rYErx",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 3",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "投稿する"
+ },
+ "D6HOm": {
+ "content": "qiita publish で Qiita へ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "ylXsmh",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "6fxWmG",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "2UjXp7",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "qiita publish の実演。投稿後の URL を見せる",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "FxcUM",
+ "x": 4747,
+ "y": 0,
+ "name": "/slides/[id] - ideal state(375px)",
+ "clip": true,
+ "width": 375,
+ "height": 1157,
+ "fill": "$lib:background",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "cAmuC",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "khsXg",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "RUaYR",
+ "name": "Mobile Left",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "O2SBxM",
+ "name": "Menu Button",
+ "width": 40,
+ "height": 40,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "EWPZr",
+ "name": "Icon",
+ "width": 24,
+ "height": 24,
+ "icon": "menu",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "mhInX",
+ "name": "Copy Label + Button (実装は grid 1fr 16px)",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "JX2yh",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "ファイルパスをコピー",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "s3aW6I",
+ "name": "Copy Button(実装は grid の 16px 列。デスクトップの CopyButton は padding 4 + icon 16 = 24 だが、モバイルは 16px 列に入る)",
+ "width": 16,
+ "height": 16,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "fn0im",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "MinK7h",
+ "name": "Actions",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "7M9BEE",
+ "name": "スライドショーを開始 Icon Button",
+ "context": "375px(breakpoint.S = 769 以下)ではラベルを畳んでアイコンだけにする提案。実装は現状ラベルを短く差し替えるだけ(Header.tsx:157)で、アイコンボタンは無い。タップ領域を 44×44 以上にするため padding を getSpace(2) にして 48×48 にしてある。",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:gray-border",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "padding": "$lib:getSpace(2)",
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "rWSFUl",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "slideshow",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:gray-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "iYL04L",
+ "name": "スライドを投稿する Icon Button",
+ "context": "375px(breakpoint.S = 769 以下)ではラベルを畳んでアイコンだけにする提案。実装は現状ラベルを短く差し替えるだけ(Header.tsx:157)で、アイコンボタンは無い。タップ領域を 44×44 以上にするため padding を getSpace(2) にして 48×48 にしてある。",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "padding": "$lib:getSpace(2)",
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "zrbNaN",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "WtZfc",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "lMmKR",
+ "name": "Contents Wrapper",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "XiBQt",
+ "name": "Card",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "b3PEAl",
+ "name": "SlideInfo (collapsed)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "IIhqq",
+ "name": "Summary (実装 SlideInfo.tsx:83-91 は justify-content も gap も無く、::after のシェブロンがラベル直後に付く)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "aytcM",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライド情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "QG9Hr",
+ "name": "Toggle Icon (実装は expand_less / pen に字形が無く keyboard_arrow_up で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_up",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "DXSYi",
+ "name": "Viewer",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "t69Ev",
+ "name": "Page 1",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "UINzS",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 1 (実装は Marp の SVG ごと等比縮小されるので中身の余白も縮むが、pen の ref は padding をスケールしないため 375px 用に上書きしている)",
+ "width": 295,
+ "height": 166,
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(3/2)"
+ ],
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "Qiita のスライド機能",
+ "fontSize": "$lib:text-body1",
+ "lineHeight": "$lib:text-body1-dense-line-height"
+ },
+ "D6HOm": {
+ "content": "Markdown で書いて、そのまま発表する",
+ "fontSize": "$lib:text-body3",
+ "lineHeight": "$lib:text-body3-line-height"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "Yz4zUi",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "PS4fis",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "a8qaTc",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Marp のスライドを Qiita CLI からそのまま投稿できることを話す",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "ZNzcO",
+ "name": "Page 2",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "aTLdJ",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 2 (実装は Marp の SVG ごと等比縮小されるので中身の余白も縮むが、pen の ref は padding をスケールしないため 375px 用に上書きしている)",
+ "width": 295,
+ "height": 166,
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(3/2)"
+ ],
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "スライドの作り方",
+ "fontSize": "$lib:text-body1",
+ "lineHeight": "$lib:text-body1-dense-line-height"
+ },
+ "D6HOm": {
+ "content": "--- で区切るだけ",
+ "fontSize": "$lib:text-body3",
+ "lineHeight": "$lib:text-body3-line-height"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "KmKlAj",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "cXGrUN",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "rSCpxz",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "--- の区切りだけでページが増えることをデモする",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Nu4JX",
+ "name": "Page 3",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "EAt5w",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 3 (実装は Marp の SVG ごと等比縮小されるので中身の余白も縮むが、pen の ref は padding をスケールしないため 375px 用に上書きしている)",
+ "width": 295,
+ "height": 166,
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(3/2)"
+ ],
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "投稿する",
+ "fontSize": "$lib:text-body1",
+ "lineHeight": "$lib:text-body1-dense-line-height"
+ },
+ "D6HOm": {
+ "content": "qiita publish で Qiita へ",
+ "fontSize": "$lib:text-body3",
+ "lineHeight": "$lib:text-body3-line-height"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "RJln34",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "ICnuo5",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "EEWnyT",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "qiita publish の実演。投稿後の URL を見せる",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "NYISF",
+ "x": 1028,
+ "y": 4046,
+ "name": "/slides/[id] - validation warning state(1920px)",
+ "clip": true,
+ "width": 1920,
+ "height": 1912,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "cWhks",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1912
+ },
+ {
+ "type": "frame",
+ "id": "phjyh",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "c2WjhT",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "CuGJZ",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "RMBbD",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "vmtj0",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "slides/my-slide.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "U53xW",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "sTzqx",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "6NNCJF",
+ "name": "Actions",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "10Lo38",
+ "name": "スライドショーを開始 Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:gray-border",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "SoKWG1",
+ "name": "Label",
+ "fill": "$lib:gray-text",
+ "content": "スライドショーを開始",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "vV3Uw1",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "slideshow",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:gray-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "QY3CcM",
+ "name": "スライドを投稿する Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "7uDBpw",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "スライドを投稿する",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "AE9NSe",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "HIeQp",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "cfMlc",
+ "name": "Contents Wrapper",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "HSNY1",
+ "name": "Card",
+ "width": 820,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "gjvjY",
+ "name": "SlideInfo (collapsed)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "vklHV",
+ "name": "Summary (実装 SlideInfo.tsx:83-91 は justify-content も gap も無く、::after のシェブロンがラベル直後に付く)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "L0vGm",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライド情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "fnYJk",
+ "name": "Toggle Icon (実装は expand_less / pen に字形が無く keyboard_arrow_up で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_up",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "pgvUz",
+ "name": "Validation Warning (実装は SlideInfo.tsx:137-155 / details の外・背景も枠も無い)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "KbVRV",
+ "name": "Warning Row 1",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "uZiDs",
+ "name": "Warning Icon (実装は MaterialSymbol fill=true / pen は Outlined のみ)",
+ "width": 16,
+ "height": 16,
+ "icon": "error",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:yellow-60"
+ },
+ {
+ "type": "text",
+ "id": "U9fgTE",
+ "name": "Warning Message 1",
+ "fill": "$lib:high-emphasis-text",
+ "content": "theme が未設定のため既定のテーマで表示しています",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "BRmGn",
+ "name": "Viewer",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "Q5O1yv",
+ "name": "Page 1",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "COqR4",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 1",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner"
+ },
+ {
+ "type": "frame",
+ "id": "zVV4H8",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "0tdH48",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "B5FOSp",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Marp のスライドを Qiita CLI からそのまま投稿できることを話す",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "o1GVh",
+ "name": "Page 2",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "JtEOo",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 2",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "スライドの作り方"
+ },
+ "D6HOm": {
+ "content": "--- で区切るだけ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "d1FVkf",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "xFkMdj",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "4Olan0",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "--- の区切りだけでページが増えることをデモする",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "dxUYkv",
+ "name": "Page 3",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "ogYXgG",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 3",
+ "width": 772,
+ "height": 434,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "投稿する"
+ },
+ "D6HOm": {
+ "content": "qiita publish で Qiita へ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "ZJi0Ss",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "ESBwwo",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "OKgVE8",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "qiita publish の実演。投稿後の URL を見せる",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "FJc81",
+ "x": 1028,
+ "y": 6058,
+ "name": "/slides/[id] - not found state(1920px)",
+ "clip": true,
+ "width": 1920,
+ "height": 1080,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "h0U6j",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1080
+ },
+ {
+ "type": "frame",
+ "id": "veBRQ",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "DK9QP",
+ "name": "Error Message Wrapper (実装 show.tsx:117 は
だけ。ツールバーも白カードも出ない)",
+ "width": "fill_container",
+ "layout": "vertical",
+ "padding": "$lib:getSpace(2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "NBzsW",
+ "name": "Message(実装の errorMessageStyle は lineHeight 未指定で、継承値 1.8 が効く。subhead2 のトークン 1.6 ではなく body の 1.8 を当てている)",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "ファイルが見つかりません",
+ "lineHeight": "$lib:text-body1-line-height",
+ "textAlign": "center",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-subhead2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "REGq9",
+ "x": 3248,
+ "y": 0,
+ "name": "/slides/[id] - ideal state(1199px)",
+ "clip": true,
+ "width": 1199,
+ "height": 1846,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "NB8cE",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1846
+ },
+ {
+ "type": "frame",
+ "id": "afT7Q",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "p9XcA",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "gqrxQ",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "ILPVJ",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "UUQdh",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "slides/my-slide.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "J3N3M",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "ReWFR",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "fDMK6I",
+ "name": "Actions",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "yu9km6",
+ "name": "スライドショーを開始 Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:gray-border",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "pWClup",
+ "name": "Label",
+ "fill": "$lib:gray-text",
+ "content": "スライドショーを開始",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "vxHBxT",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "slideshow",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:gray-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "wFMOCx",
+ "name": "スライドを投稿する Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "gaqLkK",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "スライドを投稿する",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "jwGz4U",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "lPhNI",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "t9JoC",
+ "name": "Contents Wrapper",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "suFBI",
+ "name": "Card",
+ "width": 807,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "I1z3q",
+ "name": "SlideInfo (collapsed)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "l6GmH5",
+ "name": "Summary (実装 SlideInfo.tsx:83-91 は justify-content も gap も無く、::after のシェブロンがラベル直後に付く)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "G8sltP",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライド情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "r28nt",
+ "name": "Toggle Icon (実装は expand_less / pen に字形が無く keyboard_arrow_up で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_up",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "J9lW8X",
+ "name": "Viewer",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "iW14L",
+ "name": "Page 1",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "OOFLF",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 1",
+ "width": 759,
+ "height": 427,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner"
+ },
+ {
+ "type": "frame",
+ "id": "o6so6J",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "2uioto",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "Tz3M3f",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Marp のスライドを Qiita CLI からそのまま投稿できることを話す",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "b6tH2",
+ "name": "Page 2",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "z0s3D",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 2",
+ "width": 759,
+ "height": 427,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "スライドの作り方"
+ },
+ "D6HOm": {
+ "content": "--- で区切るだけ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "lrHVc8",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "94IKt2",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "FkJqhs",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "--- の区切りだけでページが増えることをデモする",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "fmG4up",
+ "name": "Page 3",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "Iz5l37",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 3",
+ "width": 759,
+ "height": 427,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "投稿する"
+ },
+ "D6HOm": {
+ "content": "qiita publish で Qiita へ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "8pRfGl",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "F5otgX",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "oVPExq",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "qiita publish の実演。投稿後の URL を見せる",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "z9MwTG",
+ "x": 3248,
+ "y": 1946,
+ "name": "/slides/[id] - slide info open state(1199px)",
+ "clip": true,
+ "width": 1199,
+ "height": 1958,
+ "fill": "$lib:background",
+ "children": [
+ {
+ "id": "WGMOL",
+ "type": "ref",
+ "ref": "lib:Z36Vk8",
+ "name": "Sidebar",
+ "height": 1958
+ },
+ {
+ "type": "frame",
+ "id": "oaQvZ",
+ "name": "Contents",
+ "width": "fill_container",
+ "height": "fill_container",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "TY6bo",
+ "name": "Toolbar",
+ "width": "fill_container",
+ "fill": "$lib:surface",
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "H9kByQ",
+ "name": "Toolbar Bar",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(1)",
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "uMzqu",
+ "name": "File Path",
+ "gap": "$lib:getSpace(1/2)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "MsPUP",
+ "name": "Path",
+ "fill": "$lib:high-emphasis-text",
+ "content": "slides/my-slide.md",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "hqw4m",
+ "name": "Copy Button",
+ "width": 24,
+ "height": 24,
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "lgwOM",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "content_copy",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "NdDPwD",
+ "name": "Actions",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "iR2nhE",
+ "name": "スライドショーを開始 Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:gray-border",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "7JKciS",
+ "name": "Label",
+ "fill": "$lib:gray-text",
+ "content": "スライドショーを開始",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "2OqKcd",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "slideshow",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:gray-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "D9Ivvq",
+ "name": "スライドを投稿する Button(実装 Header.tsx:146-156 は padding 4/16 + border 2px が padding の外に付いて高さ 41px になる。pen の stroke は strokeAlignment inner でレイアウトに寄与しないため padding を 6/18 にして寸法を合わせた)",
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "stroke": "$lib:green-60",
+ "strokeWidth": 2,
+ "strokeAlignment": "inner",
+ "gap": "$lib:getSpace(1/2)",
+ "padding": [
+ 6,
+ 18
+ ],
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "XDsjPW",
+ "name": "Label",
+ "fill": "$lib:green-text",
+ "content": "スライドを投稿する",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "icon",
+ "id": "vWAfHo",
+ "name": "Icon",
+ "width": 16,
+ "height": 16,
+ "icon": "publish",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:green-text"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "rectangle",
+ "id": "ktj0v",
+ "name": "Toolbar Rule",
+ "fill": "$lib:divider",
+ "width": "fill_container",
+ "height": 1
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "UHXqI",
+ "name": "Contents Wrapper",
+ "width": "fill_container",
+ "padding": [
+ "$lib:getSpace(2)",
+ "$lib:getSpace(2)",
+ 0,
+ "$lib:getSpace(2)"
+ ],
+ "justifyContent": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "CA9Fr",
+ "name": "Card",
+ "width": 807,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "padding": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "jvS24",
+ "name": "SlideInfo (open)",
+ "width": "fill_container",
+ "fill": "$lib:background",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "frame",
+ "id": "Zjxcp",
+ "name": "Summary (実装 SlideInfo.tsx:83-91 は justify-content も gap も無く、::after のシェブロンがラベル直後に付く)",
+ "width": "fill_container",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "fqP5h",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライド情報",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "icon",
+ "id": "hlLow",
+ "name": "Toggle Icon (実装は expand_more / pen に字形が無く keyboard_arrow_down で代用)",
+ "width": 16,
+ "height": 16,
+ "icon": "keyboard_arrow_down",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:high-emphasis-text"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "pkkdp",
+ "name": "Info Row / タイトル",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "children": [
+ {
+ "type": "text",
+ "id": "RQR8c",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "タイトル",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "aIBdx",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Qiita のスライド機能",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "xFWfM",
+ "name": "Info Row / テーマ",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "OZczz",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "テーマ",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "E5cCeD",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "未設定",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "gC9VO",
+ "name": "Info Row / スライドの状態",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "ECkg6",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "スライドの状態",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "Oc4YN",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "未投稿",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "lYdgr",
+ "name": "Info Row / ページ数",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(3/2)",
+ "padding": [
+ "$lib:getSpace(1/2)",
+ 0,
+ 0,
+ 0
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "Lm3lZ",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": 100,
+ "content": "ページ数",
+ "lineHeight": "$lib:text-body2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-semibold"
+ },
+ {
+ "type": "text",
+ "id": "SBWB6",
+ "name": "Value",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "3",
+ "lineHeight": "$lib:text-body2-dense-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body2",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "G8qytK",
+ "name": "Viewer",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(3)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "AcXf2",
+ "name": "Page 1",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "T135y",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 1",
+ "width": 759,
+ "height": 427,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner"
+ },
+ {
+ "type": "frame",
+ "id": "7WQLIj",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "RB6R7J",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "Am7Ugw",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "Marp のスライドを Qiita CLI からそのまま投稿できることを話す",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "jOcx3p",
+ "name": "Page 2",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "qBAVPY",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 2",
+ "width": 759,
+ "height": 427,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "スライドの作り方"
+ },
+ "D6HOm": {
+ "content": "--- で区切るだけ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "TxS5v6",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "71b54H",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "cSkdm8",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "--- の区切りだけでページが増えることをデモする",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "ziihD9",
+ "name": "Page 3",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "id": "J6vhIQ",
+ "type": "ref",
+ "ref": "N3tg9B",
+ "name": "Slide 3",
+ "width": 759,
+ "height": 427,
+ "stroke": "$lib:divider",
+ "strokeWidth": 1,
+ "strokeAlignment": "inner",
+ "descendants": {
+ "ZZdKa": {
+ "content": "投稿する"
+ },
+ "D6HOm": {
+ "content": "qiita publish で Qiita へ"
+ }
+ }
+ },
+ {
+ "type": "frame",
+ "id": "pU90d9",
+ "name": "Speaker Note",
+ "context": "speaker_note は src/lib/view-models/slides.ts:3 でページごとの string[] として API から渡っているが、MarpSlideViewer/index.tsx は現状これを描画していない。ここは「追加したい」という指摘を受けて描いた提案で、本文はリポジトリから読めないため代表値。",
+ "width": "fill_container",
+ "fill": "$lib:surface-variant",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "padding": [
+ "$lib:getSpace(3/2)",
+ "$lib:getSpace(2)"
+ ],
+ "children": [
+ {
+ "type": "text",
+ "id": "GAF2Qi",
+ "name": "Label",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スピーカーノート",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "P1okEA",
+ "name": "Body",
+ "fill": "$lib:high-emphasis-text",
+ "textGrowth": "fixed-width",
+ "width": "fill_container",
+ "content": "qiita publish の実演。投稿後の URL を見せる",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "h3hn1",
+ "x": 5622,
+ "y": 1180,
+ "name": "/slides/[id]?present=1 - start slideshow modal state(1920px)",
+ "width": 1920,
+ "height": 1080,
+ "fill": "$lib:scrim",
+ "layout": "vertical",
+ "justifyContent": "center",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "frame",
+ "id": "d6S8j",
+ "name": "Modal",
+ "width": 760,
+ "fill": "$lib:surface",
+ "cornerRadius": 8,
+ "layout": "vertical",
+ "children": [
+ {
+ "type": "frame",
+ "id": "iQfv7",
+ "name": "Container",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "padding": "$lib:getSpace(4)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "M0q9bT",
+ "name": "Header",
+ "width": "fill_container",
+ "justifyContent": "space_between",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "text",
+ "id": "An3pS",
+ "name": "Title",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドショーを開始する",
+ "lineHeight": "$lib:text-subhead2-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-subhead2",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "frame",
+ "id": "bU134",
+ "name": "Help Link",
+ "gap": "$lib:getSpace(1/4)",
+ "alignItems": "center",
+ "children": [
+ {
+ "type": "icon",
+ "id": "w1HlmT",
+ "width": 16,
+ "height": 16,
+ "icon": "help",
+ "library": "Material Symbols Outlined",
+ "weight": 500,
+ "fill": "$lib:blue-text"
+ },
+ {
+ "type": "text",
+ "id": "bJexB",
+ "name": "Label",
+ "fill": "$lib:blue-text",
+ "content": "ヘルプ",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "h3C2A",
+ "name": "Body",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(2)",
+ "children": [
+ {
+ "type": "frame",
+ "id": "O7UtQ",
+ "name": "Fieldset / Presentation Options",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "children": [
+ {
+ "type": "text",
+ "id": "cSx8V",
+ "name": "Legend",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドショーの表示オプション",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "frame",
+ "id": "x3vWB",
+ "name": "Checkbox Row",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "id": "IEkx6",
+ "type": "ref",
+ "ref": "lib:E9u4G",
+ "name": "Checkbox / Checked",
+ "descendants": {
+ "lib:HRbeQ": {
+ "geometry": "M7.775 13.55l7.15-7.15-1.575-1.55-5.575 5.575-2.775-2.775-1.55 1.55 4.325 4.35z m-5.5 4.85c-0.63333 0-1.17067-0.22067-1.612-0.662-0.442-0.442-0.663-0.97967-0.663-1.613l0-13.85c0-0.63333 0.221-1.171 0.663-1.613 0.44133-0.44133 0.97867-0.662 1.612-0.662l13.85 0c0.63333 0 1.171 0.22067 1.613 0.662 0.44133 0.442 0.662 0.97967 0.662 1.613l0 13.85c0 0.63333-0.22067 1.171-0.662 1.613-0.442 0.44133-0.97967 0.662-1.613 0.662l-13.85 0z m0-2.275l13.85 0 0-13.85-13.85 0 0 13.85z",
+ "fill": "$lib:blue-text-dim"
+ },
+ "lib:gh1Nh": {
+ "content": "スライドショーを全画面に表示する"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "NaAwt",
+ "name": "Fieldset / Slideshow Display",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "children": [
+ {
+ "type": "text",
+ "id": "voquT",
+ "name": "Legend",
+ "fill": "$lib:high-emphasis-text",
+ "content": "スライドショー",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "frame",
+ "id": "E3ComZ",
+ "name": "Radio Row / Current",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "id": "bpahL",
+ "type": "ref",
+ "ref": "lib:lKaRH",
+ "name": "Radio / Checked",
+ "descendants": {
+ "lib:HpumF": {
+ "geometry": "M10.2 15.2c1.38333 0 2.56267-0.48767 3.538-1.463 0.97467-0.97467 1.462-2.15367 1.462-3.537 0-1.38333-0.48733-2.56267-1.462-3.538-0.97533-0.97467-2.15467-1.462-3.538-1.462-1.38333 0-2.56233 0.48733-3.537 1.462-0.97533 0.97533-1.463 2.15467-1.463 3.538 0 1.38333 0.48767 2.56233 1.463 3.537 0.97467 0.97533 2.15367 1.463 3.537 1.463z m0 5.2c-1.41667 0-2.746-0.26667-3.988-0.8-1.24133-0.53333-2.32033-1.25833-3.237-2.175-0.91667-0.91667-1.64167-1.99567-2.175-3.237-0.53333-1.242-0.8-2.57133-0.8-3.988 0-1.41667 0.26667-2.746 0.8-3.988 0.53333-1.24133 1.25833-2.32033 2.175-3.237 0.91667-0.91667 1.99567-1.64167 3.237-2.175 1.242-0.53333 2.57133-0.8 3.988-0.8 1.41667 0 2.746 0.26667 3.988 0.8 1.24133 0.53333 2.32033 1.25833 3.237 2.175 0.91667 0.91667 1.64167 1.99567 2.175 3.237 0.53333 1.242 0.8 2.57133 0.8 3.988 0 1.41667-0.26667 2.746-0.8 3.988-0.53333 1.24133-1.25833 2.32033-2.175 3.237-0.91667 0.91667-1.99567 1.64167-3.237 2.175-1.242 0.53333-2.57133 0.8-3.988 0.8z m0-2.275c2.21667 0 4.09167-0.76667 5.625-2.3 1.53333-1.53333 2.3-3.40833 2.3-5.625 0-2.21667-0.76667-4.09167-2.3-5.625-1.53333-1.53333-3.40833-2.3-5.625-2.3-2.21667 0-4.09167 0.76667-5.625 2.3-1.53333 1.53333-2.3 3.40833-2.3 5.625 0 2.21667 0.76667 4.09167 2.3 5.625 1.53333 1.53333 3.40833 2.3 5.625 2.3z",
+ "fill": "$lib:blue-text-dim"
+ },
+ "lib:k5IwD": {
+ "content": "DELL P2417H(現在)"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "X5X516",
+ "name": "Radio Row / External",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "id": "i8Njd2",
+ "type": "ref",
+ "ref": "lib:lKaRH",
+ "name": "Radio / Default",
+ "descendants": {
+ "lib:k5IwD": {
+ "content": "内蔵Retinaディスプレイ"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "aGnYE",
+ "name": "Fieldset / Presenter View Display",
+ "width": "fill_container",
+ "layout": "vertical",
+ "gap": "$lib:getSpace(1)",
+ "children": [
+ {
+ "type": "text",
+ "id": "JcWWy",
+ "name": "Legend",
+ "fill": "$lib:high-emphasis-text",
+ "content": "プレゼンタービュー",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-bold"
+ },
+ {
+ "type": "text",
+ "id": "EYYQh",
+ "name": "Note",
+ "fill": "$lib:medium-emphasis-text",
+ "content": "スライドショーを全画面表示する場合、プレゼンタービューは別のディスプレイが必要です。",
+ "lineHeight": "$lib:text-body1-line-height",
+ "fontFamily": "$lib:font-sans",
+ "fontSize": "$lib:text-body1",
+ "fontWeight": "$lib:fontWeight-normal"
+ },
+ {
+ "type": "frame",
+ "id": "tvYFH",
+ "name": "Radio Row / None",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "id": "VUDAn",
+ "type": "ref",
+ "ref": "lib:lKaRH",
+ "name": "Radio / Checked",
+ "descendants": {
+ "lib:HpumF": {
+ "geometry": "M10.2 15.2c1.38333 0 2.56267-0.48767 3.538-1.463 0.97467-0.97467 1.462-2.15367 1.462-3.537 0-1.38333-0.48733-2.56267-1.462-3.538-0.97533-0.97467-2.15467-1.462-3.538-1.462-1.38333 0-2.56233 0.48733-3.537 1.462-0.97533 0.97533-1.463 2.15467-1.463 3.538 0 1.38333 0.48767 2.56233 1.463 3.537 0.97467 0.97533 2.15367 1.463 3.537 1.463z m0 5.2c-1.41667 0-2.746-0.26667-3.988-0.8-1.24133-0.53333-2.32033-1.25833-3.237-2.175-0.91667-0.91667-1.64167-1.99567-2.175-3.237-0.53333-1.242-0.8-2.57133-0.8-3.988 0-1.41667 0.26667-2.746 0.8-3.988 0.53333-1.24133 1.25833-2.32033 2.175-3.237 0.91667-0.91667 1.99567-1.64167 3.237-2.175 1.242-0.53333 2.57133-0.8 3.988-0.8 1.41667 0 2.746 0.26667 3.988 0.8 1.24133 0.53333 2.32033 1.25833 3.237 2.175 0.91667 0.91667 1.64167 1.99567 2.175 3.237 0.53333 1.242 0.8 2.57133 0.8 3.988 0 1.41667-0.26667 2.746-0.8 3.988-0.53333 1.24133-1.25833 2.32033-2.175 3.237-0.91667 0.91667-1.99567 1.64167-3.237 2.175-1.242 0.53333-2.57133 0.8-3.988 0.8z m0-2.275c2.21667 0 4.09167-0.76667 5.625-2.3 1.53333-1.53333 2.3-3.40833 2.3-5.625 0-2.21667-0.76667-4.09167-2.3-5.625-1.53333-1.53333-3.40833-2.3-5.625-2.3-2.21667 0-4.09167 0.76667-5.625 2.3-1.53333 1.53333-2.3 3.40833-2.3 5.625 0 2.21667 0.76667 4.09167 2.3 5.625 1.53333 1.53333 3.40833 2.3 5.625 2.3z",
+ "fill": "$lib:blue-text-dim"
+ },
+ "lib:k5IwD": {
+ "content": "表示しない"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "Xf7tN",
+ "name": "Radio Row / Current (disabled)",
+ "gap": "$lib:getSpace(1)",
+ "alignItems": "center",
+ "children": [
+ {
+ "id": "fnTlL",
+ "type": "ref",
+ "ref": "lib:lKaRH",
+ "name": "Radio / Disabled",
+ "descendants": {
+ "lib:HpumF": {
+ "fill": "$lib:disabled-text"
+ },
+ "lib:k5IwD": {
+ "content": "DELL P2417H(現在)",
+ "fill": "$lib:disabled-text"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "frame",
+ "id": "e9Xv7B",
+ "name": "Footer",
+ "width": "fill_container",
+ "gap": "$lib:getSpace(2)",
+ "justifyContent": "end",
+ "children": [
+ {
+ "id": "MZBWe",
+ "type": "ref",
+ "ref": "lib:rRXOh",
+ "name": "Cancel Button",
+ "padding": [
+ "$lib:getSpace(1/2)",
+ "$lib:getSpace(2)"
+ ],
+ "height": 34,
+ "descendants": {
+ "lib:N87bo": {
+ "content": "キャンセル"
+ }
+ }
+ },
+ {
+ "id": "s5LTY",
+ "type": "ref",
+ "ref": "lib:aAXqR",
+ "name": "Start Button",
+ "height": 34,
+ "descendants": {
+ "lib:J2Bdc": {
+ "content": "スライドショーを開始"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "imports": {
+ "lib": "../../shared-library.lib.pen"
+ },
+ "fileToken": "be3519eb-0383-428c-a582-2c0f7135ba15"
+}
\ No newline at end of file
diff --git a/design/shared-library.lib.pen b/design/shared-library.lib.pen
new file mode 100644
index 0000000..25b824f
--- /dev/null
+++ b/design/shared-library.lib.pen
@@ -0,0 +1,8629 @@
+{
+ "version": "2.17",
+ "children": [
+ {
+ "type": "frame",
+ "id": "ueDtR",
+ "x": 0,
+ "y": 0,
+ "name": "Button",
+ "fill": "$surface",
+ "cornerRadius": 12,
+ "layout": "vertical",
+ "gap": "$getSpace(2)",
+ "padding": "$getSpace(3)",
+ "children": [
+ {
+ "type": "text",
+ "id": "jEQUP",
+ "name": "Title",
+ "fill": "$high-emphasis-text",
+ "content": "Button",
+ "fontFamily": "$font-sans",
+ "fontSize": "$text-body1",
+ "fontWeight": "$fontWeight-bold"
+ },
+ {
+ "type": "frame",
+ "id": "omQtk",
+ "name": "Button",
+ "context": "qiita-cli の実装に共通の Button コンポーネントは無く、`