@gemboss/ui 0.12.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +395 -1
- package/README.md +321 -6
- package/catalog/editor.html +611 -0
- package/catalog/index.html +3114 -13
- package/gemboss-ui.css +3 -4682
- package/package.json +16 -4
- package/src/app-shell.css +1 -256
- package/src/assistant.css +1 -558
- package/src/auth.css +1 -606
- package/src/board-move.ts +194 -0
- package/src/chat-composer.css +1 -110
- package/src/chat.css +1 -432
- package/src/collections.css +1 -0
- package/src/collections.tsx +543 -0
- package/src/editor/controls.tsx +206 -0
- package/src/editor/css-url.ts +11 -0
- package/src/editor/frame.tsx +242 -0
- package/src/editor/index.ts +43 -0
- package/src/editor/panel.tsx +188 -0
- package/src/editor/panes.tsx +44 -0
- package/src/editor/swatch.ts +45 -0
- package/src/editor-plain.js +1 -0
- package/src/editor.css +1 -1099
- package/src/gemboss-field.css +1 -112
- package/src/gemboss-tokens.css +1 -164
- package/src/icons.tsx +2 -0
- package/src/index-table.tsx +179 -0
- package/src/index.ts +19 -0
- package/src/kit-plain.css +1 -483
- package/src/kit-plain.js +1 -440
- package/src/menu-layer.ts +87 -0
- package/src/menu.tsx +28 -2
- package/src/portal.css +1 -139
- package/src/reactions-data.ts +59 -0
- package/src/reactions.css +1 -0
- package/src/reactions.tsx +139 -0
- package/src/resource-list-select.tsx +72 -0
- package/src/segmented-click.ts +20 -0
- package/src/segmented.tsx +98 -0
- package/src/selection.tsx +78 -0
- package/src/shell.css +1 -1079
- package/src/theme-dark.css +1 -66
- package/src/ui.css +1 -610
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
<!doctype html><html lang="vi"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
2
|
+
<title>@gemboss/ui editor</title><link rel="stylesheet" href="../gemboss-ui.css"><style>body{margin:0;background:var(--gemboss-app-bg,#f1f1f1);color:var(--gemboss-text);font-family:var(--gemboss-font-sans)}
|
|
3
|
+
.cat{max-width:1340px;margin:0 auto;padding:32px 24px}.cat h1{margin:0 0 4px;font-size:28px}.cat>p{margin:0 0 16px;color:var(--gemboss-text-muted);max-width:820px}
|
|
4
|
+
.cat h2{margin:32px 0 8px;font-size:20px;font-weight:650}
|
|
5
|
+
.cat-demo{margin:0 0 16px;background:var(--gemboss-surface);border:1px solid var(--gemboss-divider);border-radius:12px;overflow:hidden}
|
|
6
|
+
.cat-demo figcaption{padding:10px 16px;font-size:13px;font-weight:600;border-bottom:1px solid var(--gemboss-divider)}
|
|
7
|
+
.cat-wide{overflow-x:auto}.cat-wide iframe{display:block;border:0}
|
|
8
|
+
.cat-code summary{padding:10px 16px;font-size:13px;cursor:pointer;color:var(--gemboss-text-muted);border-top:1px solid var(--gemboss-divider);min-height:24px}
|
|
9
|
+
.cat-code pre,.cat-api{margin:0;padding:12px 16px;overflow:auto;background:#0f1012;color:#e8e8e6;font-size:12px;line-height:1.5;border-radius:0}
|
|
10
|
+
.cat-api{border-radius:12px;margin:0 0 16px}</style></head><body><div class="cat">
|
|
11
|
+
<h1>@gemboss/ui 0.21.0 · Editor</h1>
|
|
12
|
+
<p>Khung của mọi editor: <code>EditorFrame</code> (cột trái · khe kéo · preview · cột phải dock trên mép phải preview) và <code>EditorTopbar</code> (← · tiêu đề · cụm giữa · cụm phải · dòng trạng thái). Là đúng khung của theme / page / section editor trong admin. Gói chỉ vẽ KHUNG; chat, Configure, canvas, page picker, menu, Publish là của editor, đi vào bằng slot. Trang HTML thuần nạp <code>editor.css</code> + <code>editor-plain.js</code> rồi gọi <code>gembossUI.initEditorFrame()</code>: kéo khe (chuột, chạm, phím mũi tên / Home / End), đổi thiết bị, mở ⋯ và Publish ▾, ẩn cột trái, Chat | Preview trên điện thoại. <a href="index.html">← Catalog</a></p>
|
|
13
|
+
<h2>React</h2><pre class="cat-api"><code>import "@gemboss/ui/editor.css";
|
|
14
|
+
import { EditorFrame, EditorTopbar, EditorBack, EditorChatToggle, EditorPaneTabs, EditorSaveState, DeviceToggle } from "@gemboss/ui/editor";
|
|
15
|
+
|
|
16
|
+
<EditorFrame
|
|
17
|
+
top={<EditorTopbar variant="theme" back={<EditorBack as={Link} href="/" />} title="Builder"
|
|
18
|
+
chatToggle={<EditorChatToggle collapsed={collapsed} onToggle={toggle} />} left={<EditorSaveState state="saved" />}
|
|
19
|
+
center={<DeviceToggle device={device} onChange={setDevice} />} right={<>…⋯ · Publish</>} />}
|
|
20
|
+
split={{ width, min: 300, max, collapsed, onPointerDown, onKeyDown }}
|
|
21
|
+
left={<div className="gemboss-ec">…</div>} preview={<Canvas />} right={presetsOpen ? <Presets /> : null}
|
|
22
|
+
mobilePane={pane}
|
|
23
|
+
>
|
|
24
|
+
<EditorPaneTabs value={pane} onChange={setPane} labels={{ chat: "Layers" }} />
|
|
25
|
+
{drawers}
|
|
26
|
+
</EditorFrame></code></pre>
|
|
27
|
+
<h2>HTML thuần</h2><pre class="cat-api"><code><link rel="stylesheet" href="…/@gemboss/ui/gemboss-ui.css">
|
|
28
|
+
<link rel="stylesheet" href="…/@gemboss/ui/src/editor.css">
|
|
29
|
+
…the markup below…
|
|
30
|
+
<script src="…/@gemboss/ui/src/kit-plain.js"></script>
|
|
31
|
+
<script src="…/@gemboss/ui/src/editor-plain.js"></script>
|
|
32
|
+
<script>
|
|
33
|
+
gembossUI.initEditorFrame();
|
|
34
|
+
gembossUI.initEditorPanel(); // 0.17.0: tabs, groups, Seg, colour, range, edges, image
|
|
35
|
+
addEventListener("gemboss:editor-device", (e) => setCanvasWidth(e.detail.device));
|
|
36
|
+
addEventListener("gemboss:editor-split", (e) => save(e.detail.width));
|
|
37
|
+
addEventListener("gemboss:editor-edges", (e) => save(e.target.dataset.name, e.detail)); // {t, r, b, l}
|
|
38
|
+
</script></code></pre>
|
|
39
|
+
<h2>Builder: lớp trái, canvas, preset phải</h2>
|
|
40
|
+
<figure class="cat-demo"><figcaption>1280: kéo khe giữa, bấm ⋯ / ▾ / thiết bị / biểu tượng cột trái</figcaption><div class="cat-wide"><iframe title="1280: kéo khe giữa, bấm ⋯ / ▾ / thiết bị / biểu tượng cột trái" style="width:1280px;height:560px" srcdoc="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="../gemboss-ui.css"><link rel="stylesheet" href="../src/editor.css"></head><body><div class="gemboss-editor"><header class="gemboss-editor-topbar gemboss-editor-topbar--theme"><div class="gemboss-editor-tb-left"><a href="#" class="gemboss-editor-back" aria-label="Back">←</a><button class="gemboss-editor-chat-toggle" aria-pressed="false" title="Hide chat — full-width preview" aria-label="Hide chat panel"><svg viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round" aria-hidden="true"><rect x="1.75" y="2.75" width="12.5" height="10.5" rx="2"></rect><line x1="6.25" y1="2.75" x2="6.25" y2="13.25"></line><rect x="1.75" y="2.75" width="4.5" height="10.5" fill="currentColor" stroke="none"></rect></svg></button><span class="gemboss-editor-tb-name">Builder</span><span class="gemboss-editor-savestate is-saved" role="status" aria-live="polite" title="Every change is saved to the draft automatically">✓ Draft saved · 10:42</span></div><div class="gemboss-editor-tb-center"><div class="ui-seg gemboss-pv-devices" role="group" aria-label="Device"><button type="button" class="gemboss-pv-device active" aria-label="Desktop" title="Desktop" aria-pressed="true"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="4" width="19" height="12" rx="2"></rect><line x1="9" y1="20.5" x2="15" y2="20.5"></line><line x1="12" y1="16" x2="12" y2="20.5"></line></svg></button><button type="button" class="gemboss-pv-device" aria-label="Tablet" title="Tablet" aria-pressed="false"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="3" width="16" height="18" rx="2"></rect><line x1="10.5" y1="18" x2="13.5" y2="18"></line></svg></button><button type="button" class="gemboss-pv-device" aria-label="Mobile" title="Mobile" aria-pressed="false"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="6.5" y="2.5" width="11" height="19" rx="2.5"></rect><line x1="10.5" y1="18.5" x2="13.5" y2="18.5"></line></svg></button></div></div><div class="gemboss-editor-tb-right"><button type="button" class="gemboss-editor-tb-ghost">+ Add section</button><div class="gemboss-editor-overflow"><button type="button" class="gemboss-pv-device gemboss-editor-overflow-trigger" aria-haspopup="menu" aria-expanded="false" aria-label="More actions" title="More actions">⋯</button><div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Duplicate</span></button><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Export HTML</span></button><div class="gemboss-editor-menu-sep" role="separator"></div><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Delete</span></button></div></div><div class="gemboss-editor-publish"><button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-main">Publish</button><button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-caret" aria-haspopup="menu" aria-expanded="false" aria-label="Choose deploy target">▾</button><div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden><div class="gemboss-editor-menu-label" aria-hidden="true">Target</div><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Deploy preview</span></button><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Publish live</span></button></div></div></div></header><div class="gemboss-editor-body" data-mobile-pane="chat" style="--gemboss-chat-w:320px"><div class="gemboss-ec"><div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels"><button type="button" role="tab" class="gemboss-ec-tab" aria-selected="true">Layers</button><button type="button" role="tab" class="gemboss-ec-tab" aria-selected="false">Chat</button></div><div class="gemboss-ec-dock-body">Hero · Logos · Benefits · Reviews · FAQ</div></div><div class="gemboss-editor-resizer ui-resizer" role="separator" aria-orientation="vertical" aria-label="Resize layers panel" aria-valuenow="320" aria-valuemin="300" aria-valuemax="680" tabindex="0"></div><div class="gemboss-editor-preview-pane"><div class="gemboss-editor-dock"><div style="padding:16px"><b>Presets</b><p style="color:var(--gemboss-text-muted);margin:8px 0 0">The right column: docked over the preview, 320px.</p></div></div><div class="gemboss-pv-frame gemboss-pv-fit desktop" style="display:grid;place-items:center;color:var(--gemboss-text-muted)">Canvas</div></div></div><div class="gemboss-editor-mobile-tabs" role="tablist" aria-label="Editor panes"><button type="button" role="tab" aria-selected="true" class="gemboss-editor-mobile-tab active">Layers</button><button type="button" role="tab" aria-selected="false" class="gemboss-editor-mobile-tab">Preview</button></div></div><script src="../src/kit-plain.js"></script><script src="../src/editor-plain.js"></script><script>gembossUI.initEditorFrame()</script><script>gembossUI.initEditorPanel()</script></body></html>"></iframe></div><details class="cat-code"><summary>Markup</summary><pre><code><div class="gemboss-editor">
|
|
41
|
+
<header class="gemboss-editor-topbar gemboss-editor-topbar--theme">
|
|
42
|
+
<div class="gemboss-editor-tb-left">
|
|
43
|
+
<a href="#" class="gemboss-editor-back" aria-label="Back">←</a>
|
|
44
|
+
<button class="gemboss-editor-chat-toggle" aria-pressed="false" title="Hide chat — full-width preview" aria-label="Hide chat panel">
|
|
45
|
+
<svg viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round" aria-hidden="true">
|
|
46
|
+
<rect x="1.75" y="2.75" width="12.5" height="10.5" rx="2">
|
|
47
|
+
</rect>
|
|
48
|
+
<line x1="6.25" y1="2.75" x2="6.25" y2="13.25">
|
|
49
|
+
</line>
|
|
50
|
+
<rect x="1.75" y="2.75" width="4.5" height="10.5" fill="currentColor" stroke="none">
|
|
51
|
+
</rect>
|
|
52
|
+
</svg>
|
|
53
|
+
</button>
|
|
54
|
+
<span class="gemboss-editor-tb-name">Builder</span>
|
|
55
|
+
<span class="gemboss-editor-savestate is-saved" role="status" aria-live="polite" title="Every change is saved to the draft automatically">✓ Draft saved · 10:42</span>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="gemboss-editor-tb-center">
|
|
58
|
+
<div class="ui-seg gemboss-pv-devices" role="group" aria-label="Device">
|
|
59
|
+
<button type="button" class="gemboss-pv-device active" aria-label="Desktop" title="Desktop" aria-pressed="true">
|
|
60
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
61
|
+
<rect x="2.5" y="4" width="19" height="12" rx="2">
|
|
62
|
+
</rect>
|
|
63
|
+
<line x1="9" y1="20.5" x2="15" y2="20.5">
|
|
64
|
+
</line>
|
|
65
|
+
<line x1="12" y1="16" x2="12" y2="20.5">
|
|
66
|
+
</line>
|
|
67
|
+
</svg>
|
|
68
|
+
</button>
|
|
69
|
+
<button type="button" class="gemboss-pv-device" aria-label="Tablet" title="Tablet" aria-pressed="false">
|
|
70
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
71
|
+
<rect x="4" y="3" width="16" height="18" rx="2">
|
|
72
|
+
</rect>
|
|
73
|
+
<line x1="10.5" y1="18" x2="13.5" y2="18">
|
|
74
|
+
</line>
|
|
75
|
+
</svg>
|
|
76
|
+
</button>
|
|
77
|
+
<button type="button" class="gemboss-pv-device" aria-label="Mobile" title="Mobile" aria-pressed="false">
|
|
78
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
79
|
+
<rect x="6.5" y="2.5" width="11" height="19" rx="2.5">
|
|
80
|
+
</rect>
|
|
81
|
+
<line x1="10.5" y1="18.5" x2="13.5" y2="18.5">
|
|
82
|
+
</line>
|
|
83
|
+
</svg>
|
|
84
|
+
</button>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="gemboss-editor-tb-right">
|
|
88
|
+
<button type="button" class="gemboss-editor-tb-ghost">+ Add section</button>
|
|
89
|
+
<div class="gemboss-editor-overflow">
|
|
90
|
+
<button type="button" class="gemboss-pv-device gemboss-editor-overflow-trigger" aria-haspopup="menu" aria-expanded="false" aria-label="More actions" title="More actions">⋯</button>
|
|
91
|
+
<div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden>
|
|
92
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
93
|
+
<span>Duplicate</span>
|
|
94
|
+
</button>
|
|
95
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
96
|
+
<span>Export HTML</span>
|
|
97
|
+
</button>
|
|
98
|
+
<div class="gemboss-editor-menu-sep" role="separator">
|
|
99
|
+
</div>
|
|
100
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
101
|
+
<span>Delete</span>
|
|
102
|
+
</button>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
<div class="gemboss-editor-publish">
|
|
106
|
+
<button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-main">Publish</button>
|
|
107
|
+
<button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-caret" aria-haspopup="menu" aria-expanded="false" aria-label="Choose deploy target">▾</button>
|
|
108
|
+
<div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden>
|
|
109
|
+
<div class="gemboss-editor-menu-label" aria-hidden="true">Target</div>
|
|
110
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
111
|
+
<span>Deploy preview</span>
|
|
112
|
+
</button>
|
|
113
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
114
|
+
<span>Publish live</span>
|
|
115
|
+
</button>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</header>
|
|
120
|
+
<div class="gemboss-editor-body" data-mobile-pane="chat" style="--gemboss-chat-w:320px">
|
|
121
|
+
<div class="gemboss-ec">
|
|
122
|
+
<div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels">
|
|
123
|
+
<button type="button" role="tab" class="gemboss-ec-tab" aria-selected="true">Layers</button>
|
|
124
|
+
<button type="button" role="tab" class="gemboss-ec-tab" aria-selected="false">Chat</button>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="gemboss-ec-dock-body">Hero · Logos · Benefits · Reviews · FAQ</div>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="gemboss-editor-resizer ui-resizer" role="separator" aria-orientation="vertical" aria-label="Resize layers panel" aria-valuenow="320" aria-valuemin="300" aria-valuemax="680" tabindex="0">
|
|
129
|
+
</div>
|
|
130
|
+
<div class="gemboss-editor-preview-pane">
|
|
131
|
+
<div class="gemboss-editor-dock">
|
|
132
|
+
<div style="padding:16px">
|
|
133
|
+
<b>Presets</b>
|
|
134
|
+
<p style="color:var(--gemboss-text-muted);margin:8px 0 0">The right column: docked over the preview, 320px.</p>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="gemboss-pv-frame gemboss-pv-fit desktop" style="display:grid;place-items:center;color:var(--gemboss-text-muted)">Canvas</div>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
<div class="gemboss-editor-mobile-tabs" role="tablist" aria-label="Editor panes">
|
|
141
|
+
<button type="button" role="tab" aria-selected="true" class="gemboss-editor-mobile-tab active">Layers</button>
|
|
142
|
+
<button type="button" role="tab" aria-selected="false" class="gemboss-editor-mobile-tab">Preview</button>
|
|
143
|
+
</div>
|
|
144
|
+
</div></code></pre></details></figure>
|
|
145
|
+
<figure class="cat-demo"><figcaption>390: hai hàng trên topbar, Layers | Preview ở đáy</figcaption><div class="cat-wide"><iframe title="390: hai hàng trên topbar, Layers | Preview ở đáy" style="width:390px;height:700px" srcdoc="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="../gemboss-ui.css"><link rel="stylesheet" href="../src/editor.css"></head><body><div class="gemboss-editor"><header class="gemboss-editor-topbar gemboss-editor-topbar--theme"><div class="gemboss-editor-tb-left"><a href="#" class="gemboss-editor-back" aria-label="Back">←</a><button class="gemboss-editor-chat-toggle" aria-pressed="false" title="Hide chat — full-width preview" aria-label="Hide chat panel"><svg viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round" aria-hidden="true"><rect x="1.75" y="2.75" width="12.5" height="10.5" rx="2"></rect><line x1="6.25" y1="2.75" x2="6.25" y2="13.25"></line><rect x="1.75" y="2.75" width="4.5" height="10.5" fill="currentColor" stroke="none"></rect></svg></button><span class="gemboss-editor-tb-name">Builder</span><span class="gemboss-editor-savestate is-saved" role="status" aria-live="polite" title="Every change is saved to the draft automatically">✓ Draft saved · 10:42</span></div><div class="gemboss-editor-tb-center"><div class="ui-seg gemboss-pv-devices" role="group" aria-label="Device"><button type="button" class="gemboss-pv-device active" aria-label="Desktop" title="Desktop" aria-pressed="true"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="4" width="19" height="12" rx="2"></rect><line x1="9" y1="20.5" x2="15" y2="20.5"></line><line x1="12" y1="16" x2="12" y2="20.5"></line></svg></button><button type="button" class="gemboss-pv-device" aria-label="Tablet" title="Tablet" aria-pressed="false"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="3" width="16" height="18" rx="2"></rect><line x1="10.5" y1="18" x2="13.5" y2="18"></line></svg></button><button type="button" class="gemboss-pv-device" aria-label="Mobile" title="Mobile" aria-pressed="false"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="6.5" y="2.5" width="11" height="19" rx="2.5"></rect><line x1="10.5" y1="18.5" x2="13.5" y2="18.5"></line></svg></button></div></div><div class="gemboss-editor-tb-right"><button type="button" class="gemboss-editor-tb-ghost">+ Add section</button><div class="gemboss-editor-overflow"><button type="button" class="gemboss-pv-device gemboss-editor-overflow-trigger" aria-haspopup="menu" aria-expanded="false" aria-label="More actions" title="More actions">⋯</button><div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Duplicate</span></button><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Export HTML</span></button><div class="gemboss-editor-menu-sep" role="separator"></div><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Delete</span></button></div></div><div class="gemboss-editor-publish"><button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-main">Publish</button><button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-caret" aria-haspopup="menu" aria-expanded="false" aria-label="Choose deploy target">▾</button><div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden><div class="gemboss-editor-menu-label" aria-hidden="true">Target</div><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Deploy preview</span></button><button type="button" class="gemboss-editor-menu-item" role="menuitem"><span>Publish live</span></button></div></div></div></header><div class="gemboss-editor-body" data-mobile-pane="chat" style="--gemboss-chat-w:320px"><div class="gemboss-ec"><div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels"><button type="button" role="tab" class="gemboss-ec-tab" aria-selected="true">Layers</button><button type="button" role="tab" class="gemboss-ec-tab" aria-selected="false">Chat</button></div><div class="gemboss-ec-dock-body">Hero · Logos · Benefits · Reviews · FAQ</div></div><div class="gemboss-editor-resizer ui-resizer" role="separator" aria-orientation="vertical" aria-label="Resize layers panel" aria-valuenow="320" aria-valuemin="300" aria-valuemax="680" tabindex="0"></div><div class="gemboss-editor-preview-pane"><div class="gemboss-editor-dock"><div style="padding:16px"><b>Presets</b><p style="color:var(--gemboss-text-muted);margin:8px 0 0">The right column: docked over the preview, 320px.</p></div></div><div class="gemboss-pv-frame gemboss-pv-fit desktop" style="display:grid;place-items:center;color:var(--gemboss-text-muted)">Canvas</div></div></div><div class="gemboss-editor-mobile-tabs" role="tablist" aria-label="Editor panes"><button type="button" role="tab" aria-selected="true" class="gemboss-editor-mobile-tab active">Layers</button><button type="button" role="tab" aria-selected="false" class="gemboss-editor-mobile-tab">Preview</button></div></div><script src="../src/kit-plain.js"></script><script src="../src/editor-plain.js"></script><script>gembossUI.initEditorFrame()</script><script>gembossUI.initEditorPanel()</script></body></html>"></iframe></div><details class="cat-code"><summary>Markup</summary><pre><code><div class="gemboss-editor">
|
|
146
|
+
<header class="gemboss-editor-topbar gemboss-editor-topbar--theme">
|
|
147
|
+
<div class="gemboss-editor-tb-left">
|
|
148
|
+
<a href="#" class="gemboss-editor-back" aria-label="Back">←</a>
|
|
149
|
+
<button class="gemboss-editor-chat-toggle" aria-pressed="false" title="Hide chat — full-width preview" aria-label="Hide chat panel">
|
|
150
|
+
<svg viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round" aria-hidden="true">
|
|
151
|
+
<rect x="1.75" y="2.75" width="12.5" height="10.5" rx="2">
|
|
152
|
+
</rect>
|
|
153
|
+
<line x1="6.25" y1="2.75" x2="6.25" y2="13.25">
|
|
154
|
+
</line>
|
|
155
|
+
<rect x="1.75" y="2.75" width="4.5" height="10.5" fill="currentColor" stroke="none">
|
|
156
|
+
</rect>
|
|
157
|
+
</svg>
|
|
158
|
+
</button>
|
|
159
|
+
<span class="gemboss-editor-tb-name">Builder</span>
|
|
160
|
+
<span class="gemboss-editor-savestate is-saved" role="status" aria-live="polite" title="Every change is saved to the draft automatically">✓ Draft saved · 10:42</span>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="gemboss-editor-tb-center">
|
|
163
|
+
<div class="ui-seg gemboss-pv-devices" role="group" aria-label="Device">
|
|
164
|
+
<button type="button" class="gemboss-pv-device active" aria-label="Desktop" title="Desktop" aria-pressed="true">
|
|
165
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
166
|
+
<rect x="2.5" y="4" width="19" height="12" rx="2">
|
|
167
|
+
</rect>
|
|
168
|
+
<line x1="9" y1="20.5" x2="15" y2="20.5">
|
|
169
|
+
</line>
|
|
170
|
+
<line x1="12" y1="16" x2="12" y2="20.5">
|
|
171
|
+
</line>
|
|
172
|
+
</svg>
|
|
173
|
+
</button>
|
|
174
|
+
<button type="button" class="gemboss-pv-device" aria-label="Tablet" title="Tablet" aria-pressed="false">
|
|
175
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
176
|
+
<rect x="4" y="3" width="16" height="18" rx="2">
|
|
177
|
+
</rect>
|
|
178
|
+
<line x1="10.5" y1="18" x2="13.5" y2="18">
|
|
179
|
+
</line>
|
|
180
|
+
</svg>
|
|
181
|
+
</button>
|
|
182
|
+
<button type="button" class="gemboss-pv-device" aria-label="Mobile" title="Mobile" aria-pressed="false">
|
|
183
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
184
|
+
<rect x="6.5" y="2.5" width="11" height="19" rx="2.5">
|
|
185
|
+
</rect>
|
|
186
|
+
<line x1="10.5" y1="18.5" x2="13.5" y2="18.5">
|
|
187
|
+
</line>
|
|
188
|
+
</svg>
|
|
189
|
+
</button>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="gemboss-editor-tb-right">
|
|
193
|
+
<button type="button" class="gemboss-editor-tb-ghost">+ Add section</button>
|
|
194
|
+
<div class="gemboss-editor-overflow">
|
|
195
|
+
<button type="button" class="gemboss-pv-device gemboss-editor-overflow-trigger" aria-haspopup="menu" aria-expanded="false" aria-label="More actions" title="More actions">⋯</button>
|
|
196
|
+
<div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden>
|
|
197
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
198
|
+
<span>Duplicate</span>
|
|
199
|
+
</button>
|
|
200
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
201
|
+
<span>Export HTML</span>
|
|
202
|
+
</button>
|
|
203
|
+
<div class="gemboss-editor-menu-sep" role="separator">
|
|
204
|
+
</div>
|
|
205
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
206
|
+
<span>Delete</span>
|
|
207
|
+
</button>
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
<div class="gemboss-editor-publish">
|
|
211
|
+
<button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-main">Publish</button>
|
|
212
|
+
<button type="button" class="gemboss-editor-tb-publish gemboss-editor-publish-caret" aria-haspopup="menu" aria-expanded="false" aria-label="Choose deploy target">▾</button>
|
|
213
|
+
<div class="gemboss-popover-surface gemboss-editor-menu" role="menu" hidden>
|
|
214
|
+
<div class="gemboss-editor-menu-label" aria-hidden="true">Target</div>
|
|
215
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
216
|
+
<span>Deploy preview</span>
|
|
217
|
+
</button>
|
|
218
|
+
<button type="button" class="gemboss-editor-menu-item" role="menuitem">
|
|
219
|
+
<span>Publish live</span>
|
|
220
|
+
</button>
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
</div>
|
|
224
|
+
</header>
|
|
225
|
+
<div class="gemboss-editor-body" data-mobile-pane="chat" style="--gemboss-chat-w:320px">
|
|
226
|
+
<div class="gemboss-ec">
|
|
227
|
+
<div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels">
|
|
228
|
+
<button type="button" role="tab" class="gemboss-ec-tab" aria-selected="true">Layers</button>
|
|
229
|
+
<button type="button" role="tab" class="gemboss-ec-tab" aria-selected="false">Chat</button>
|
|
230
|
+
</div>
|
|
231
|
+
<div class="gemboss-ec-dock-body">Hero · Logos · Benefits · Reviews · FAQ</div>
|
|
232
|
+
</div>
|
|
233
|
+
<div class="gemboss-editor-resizer ui-resizer" role="separator" aria-orientation="vertical" aria-label="Resize layers panel" aria-valuenow="320" aria-valuemin="300" aria-valuemax="680" tabindex="0">
|
|
234
|
+
</div>
|
|
235
|
+
<div class="gemboss-editor-preview-pane">
|
|
236
|
+
<div class="gemboss-editor-dock">
|
|
237
|
+
<div style="padding:16px">
|
|
238
|
+
<b>Presets</b>
|
|
239
|
+
<p style="color:var(--gemboss-text-muted);margin:8px 0 0">The right column: docked over the preview, 320px.</p>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
<div class="gemboss-pv-frame gemboss-pv-fit desktop" style="display:grid;place-items:center;color:var(--gemboss-text-muted)">Canvas</div>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
<div class="gemboss-editor-mobile-tabs" role="tablist" aria-label="Editor panes">
|
|
246
|
+
<button type="button" role="tab" aria-selected="true" class="gemboss-editor-mobile-tab active">Layers</button>
|
|
247
|
+
<button type="button" role="tab" aria-selected="false" class="gemboss-editor-mobile-tab">Preview</button>
|
|
248
|
+
</div>
|
|
249
|
+
</div></code></pre></details></figure>
|
|
250
|
+
<h2>Thanh của page / section editor</h2>
|
|
251
|
+
<figure class="cat-demo"><figcaption>variant="page", 1280</figcaption><div class="cat-wide"><iframe title="variant="page", 1280" style="width:1280px;height:420px" srcdoc="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="../gemboss-ui.css"><link rel="stylesheet" href="../src/editor.css"></head><body><div class="gemboss-editor"><header class="gemboss-editor-topbar gemboss-pageedit-top"><div class="gemboss-editor-tb-left"><a href="#" class="gemboss-editor-back" aria-label="Back">←</a><span class="gemboss-editor-tb-name">Page editor</span><span class="gemboss-pageedit-title">Spring sale</span><span class="gemboss-pageedit-kind">Landing page</span><span class="gemboss-pageedit-status">Draft</span></div><div class="gemboss-editor-tb-center"><div class="ui-seg gemboss-pv-devices" role="group" aria-label="Device"><button type="button" class="gemboss-pv-device" aria-label="Desktop" title="Desktop" aria-pressed="false"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="4" width="19" height="12" rx="2"></rect><line x1="9" y1="20.5" x2="15" y2="20.5"></line><line x1="12" y1="16" x2="12" y2="20.5"></line></svg></button><button type="button" class="gemboss-pv-device" aria-label="Tablet" title="Tablet" aria-pressed="false"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="3" width="16" height="18" rx="2"></rect><line x1="10.5" y1="18" x2="13.5" y2="18"></line></svg></button><button type="button" class="gemboss-pv-device active" aria-label="Mobile" title="Mobile" aria-pressed="true"><svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="6.5" y="2.5" width="11" height="19" rx="2.5"></rect><line x1="10.5" y1="18.5" x2="13.5" y2="18.5"></line></svg></button></div></div><div class="gemboss-editor-tb-right"><button type="button" class="gemboss-editor-tb-ghost">+ Add section</button><button type="button" class="gemboss-editor-tb-publish">Publish</button></div></header><div class="gemboss-editor-body" style="--gemboss-chat-w:384px"><div class="gemboss-ec"><div class="gemboss-ec-dock-body">Chat</div></div><div class="gemboss-editor-resizer ui-resizer" role="separator" aria-orientation="vertical" aria-label="Resize chat panel" aria-valuenow="384" aria-valuemin="300" aria-valuemax="680" tabindex="0"></div><div class="gemboss-editor-preview-pane"><div class="gemboss-pv-frame gemboss-pv-fit mobile" style="display:grid;place-items:center;color:var(--gemboss-text-muted)">Canvas</div></div></div></div><script src="../src/kit-plain.js"></script><script src="../src/editor-plain.js"></script><script>gembossUI.initEditorFrame()</script><script>gembossUI.initEditorPanel()</script></body></html>"></iframe></div><details class="cat-code"><summary>Markup</summary><pre><code><div class="gemboss-editor">
|
|
252
|
+
<header class="gemboss-editor-topbar gemboss-pageedit-top">
|
|
253
|
+
<div class="gemboss-editor-tb-left">
|
|
254
|
+
<a href="#" class="gemboss-editor-back" aria-label="Back">←</a>
|
|
255
|
+
<span class="gemboss-editor-tb-name">Page editor</span>
|
|
256
|
+
<span class="gemboss-pageedit-title">Spring sale</span>
|
|
257
|
+
<span class="gemboss-pageedit-kind">Landing page</span>
|
|
258
|
+
<span class="gemboss-pageedit-status">Draft</span>
|
|
259
|
+
</div>
|
|
260
|
+
<div class="gemboss-editor-tb-center">
|
|
261
|
+
<div class="ui-seg gemboss-pv-devices" role="group" aria-label="Device">
|
|
262
|
+
<button type="button" class="gemboss-pv-device" aria-label="Desktop" title="Desktop" aria-pressed="false">
|
|
263
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
264
|
+
<rect x="2.5" y="4" width="19" height="12" rx="2">
|
|
265
|
+
</rect>
|
|
266
|
+
<line x1="9" y1="20.5" x2="15" y2="20.5">
|
|
267
|
+
</line>
|
|
268
|
+
<line x1="12" y1="16" x2="12" y2="20.5">
|
|
269
|
+
</line>
|
|
270
|
+
</svg>
|
|
271
|
+
</button>
|
|
272
|
+
<button type="button" class="gemboss-pv-device" aria-label="Tablet" title="Tablet" aria-pressed="false">
|
|
273
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
274
|
+
<rect x="4" y="3" width="16" height="18" rx="2">
|
|
275
|
+
</rect>
|
|
276
|
+
<line x1="10.5" y1="18" x2="13.5" y2="18">
|
|
277
|
+
</line>
|
|
278
|
+
</svg>
|
|
279
|
+
</button>
|
|
280
|
+
<button type="button" class="gemboss-pv-device active" aria-label="Mobile" title="Mobile" aria-pressed="true">
|
|
281
|
+
<svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
282
|
+
<rect x="6.5" y="2.5" width="11" height="19" rx="2.5">
|
|
283
|
+
</rect>
|
|
284
|
+
<line x1="10.5" y1="18.5" x2="13.5" y2="18.5">
|
|
285
|
+
</line>
|
|
286
|
+
</svg>
|
|
287
|
+
</button>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
<div class="gemboss-editor-tb-right">
|
|
291
|
+
<button type="button" class="gemboss-editor-tb-ghost">+ Add section</button>
|
|
292
|
+
<button type="button" class="gemboss-editor-tb-publish">Publish</button>
|
|
293
|
+
</div>
|
|
294
|
+
</header>
|
|
295
|
+
<div class="gemboss-editor-body" style="--gemboss-chat-w:384px">
|
|
296
|
+
<div class="gemboss-ec">
|
|
297
|
+
<div class="gemboss-ec-dock-body">Chat</div>
|
|
298
|
+
</div>
|
|
299
|
+
<div class="gemboss-editor-resizer ui-resizer" role="separator" aria-orientation="vertical" aria-label="Resize chat panel" aria-valuenow="384" aria-valuemin="300" aria-valuemax="680" tabindex="0">
|
|
300
|
+
</div>
|
|
301
|
+
<div class="gemboss-editor-preview-pane">
|
|
302
|
+
<div class="gemboss-pv-frame gemboss-pv-fit mobile" style="display:grid;place-items:center;color:var(--gemboss-text-muted)">Canvas</div>
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
</div></code></pre></details></figure>
|
|
306
|
+
<h2>Bảng cài đặt (0.17.0): PanelTabs, PanelHeader, InspectorGroup, Field, Seg, ColorControl, RangeControl, EdgeBox, ImageControl</h2>
|
|
307
|
+
<p>Đúng bảng Configure của editor trong admin (inspector neo trong cột trái). Bấm tiêu đề nhóm để gập, ←/→ trên hàng tab Content · Design · Advanced, bấm Seg, sửa màu (ô màu ghi vào ô chữ; gradient tắt ô màu), kéo thanh trượt, gõ lề rồi Enter, dán URL ảnh rồi rời ô. Mỗi việc bắn một event <code>gemboss:editor-*</code>.</p>
|
|
308
|
+
<h3>React</h3><pre class="cat-api"><code>import { ColorControl, EdgeBox, Field, ImageControl, InspectorGroup, PanelAction, PanelHeader, PanelTabs, RangeControl, Seg } from "@gemboss/ui/editor";
|
|
309
|
+
|
|
310
|
+
<PanelHeader title="Hero" subtitle="hero-banner" actions={<PanelAction label="Duplicate section" onClick={dup}>⧉</PanelAction>} />
|
|
311
|
+
<PanelTabs variant="inspector" value={tab} onChange={setTab} tabs={[{ id: "content", label: "Content" }, { id: "design", label: "Design" }]} />
|
|
312
|
+
<InspectorGroup title="Layout" note="all screens" open={open.layout} onOpenChange={(v) => setOpen({ ...open, layout: v })}>
|
|
313
|
+
<Field label="Width"><Seg label="Width" value={width} onChange={setWidth} options={[{ value: "full", label: "Full" }, …]} /></Field>
|
|
314
|
+
<Field label="Background" htmlFor="bg"><ColorControl id="bg" label="Background" value={bg} onChange={setBg} /></Field>
|
|
315
|
+
<Field label="Opacity" htmlFor="op" labelValue={`${op}%`}><RangeControl id="op" min={0} max={100} value={op} onChange={setOp} /></Field>
|
|
316
|
+
<Field label="Padding"><EdgeBox label="Padding" values={pad} onChange={(side, raw) => …} onCommit={save} /></Field>
|
|
317
|
+
<Field label="Image" htmlFor="img"><ImageControl id="img" value={url} onChange={setUrl} /></Field>
|
|
318
|
+
</InspectorGroup></code></pre>
|
|
319
|
+
<figure class="cat-demo"><figcaption>1280 (chuột): cột Configure 360px, đủ control, nhóm Motion đang gập</figcaption><div class="cat-wide"><iframe title="1280 (chuột): cột Configure 360px, đủ control, nhóm Motion đang gập" style="width:1280px;height:1120px" srcdoc="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="../gemboss-ui.css"><link rel="stylesheet" href="../src/editor.css"></head><body><div class="gemboss-ec" style="width:360px;height:1040px"><div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels"><button type="button" role="tab" data-value="configure" class="gemboss-ec-tab" aria-selected="true">Configure</button><button type="button" role="tab" data-value="chat" class="gemboss-ec-tab" aria-selected="false">Chat</button></div><div class="gemboss-ec-dock-body" style="padding:0"><aside class="gemboss-ei gemboss-ei--docked" role="region" aria-label="Settings — Hero"><header class="gemboss-ei-head"><span class="gemboss-ei-title">Hero<small>hero-banner.default.v1</small></span><button type="button" class="gemboss-ei-act" title="Duplicate section" aria-label="Duplicate section">⧉</button><button type="button" class="gemboss-ei-act" title="Restore this section to its previous version" aria-label="Restore this section">↺</button></header><div class="gemboss-ei-tabs" role="tablist"><button type="button" role="tab" data-value="content" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Content</button><button type="button" role="tab" data-value="design" class="gemboss-ei-tab on" aria-selected="true" tabindex="0">Design</button><button type="button" role="tab" data-value="advanced" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Advanced</button></div><div class="gemboss-ei-body"><div class="gemboss-ei-pane"><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Layout<small class="gemboss-ei-gh-note">· all screens</small></button><div class="gemboss-ei-fld"><label>Content width</label><div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Content width"><button type="button" data-value="full" aria-pressed="false" class="is-text">Full</button><button type="button" data-value="contained" aria-pressed="true" class="is-text active">Contained</button><button type="button" data-value="narrow" aria-pressed="false" class="is-text">Narrow</button></div></div><div class="gemboss-ei-fld"><label>Columns</label><div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Columns"><button type="button" data-value="2" disabled="" aria-pressed="false" class="is-text">2</button><button type="button" data-value="3" disabled="" aria-pressed="true" class="is-text active">3</button><button type="button" data-value="4" disabled="" aria-pressed="false" class="is-text">4</button></div><p class="gemboss-ei-hint">Disabled while a change is applied.</p></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Spacing</button><div class="gemboss-ei-fld"><label>Padding</label><div class="gemboss-ei-edgebox"><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding top" value="24"/><span>T</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding right" value=""/><span>R</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding bottom" value="24"/><span>B</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding left" value=""/><span>L</span></div></div></div><div class="gemboss-ei-fld"><label>Margin</label><div class="gemboss-ei-edgebox"><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin top" value=""/><span>T</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin right" value=""/><span>R</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin bottom" value=""/><span>B</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin left" value=""/><span>L</span></div></div><p class="gemboss-ei-hint">Empty edges follow desktop.</p></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Color</button><div class="gemboss-ei-fld"><label for="cat-bg">Background</label><div class="gemboss-ei-color"><input type="color" class="gemboss-ei-swatch" aria-label="Background swatch" value="#f4efe6"/><input id="cat-bg" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="#f4efe6"/></div></div><div class="gemboss-ei-fld"><label for="cat-ov">Overlay</label><div class="gemboss-ei-color"><input type="color" class="gemboss-ei-swatch" aria-label="Overlay swatch" disabled="" title="linear-gradient(90deg,#000,#0000) — not a plain 6-digit hex; edit it in the box below" value="#000000"/><input id="cat-ov" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="linear-gradient(90deg,#000,#0000)"/></div><p class="gemboss-ei-hint">A gradient: the swatch cannot show it, so it is off.</p></div><div class="gemboss-ei-fld"><label for="cat-op">Opacity<span class="gemboss-ei-rangeval" data-suffix="%">80%</span></label><input id="cat-op" type="range" class="gemboss-ei-range" min="0" max="100" step="1" value="80"/></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Media</button><div class="gemboss-ei-fld"><label for="cat-img">Image</label><div class="gemboss-ei-img"><div class="gemboss-ei-img-thumb" aria-hidden="true">—</div><div class="gemboss-ei-img-ctl"><input id="cat-img" class="gemboss-field gemboss-ei-inp" placeholder="Paste image URL…" value=""/><div class="gemboss-ei-img-actions"><button type="button" class="gemboss-ei-addchip" aria-expanded="false">Library</button><button type="button" class="gemboss-ei-addchip" data-gb-image-clear>Clear</button></div></div></div></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="closed" aria-expanded="false"><span class="gemboss-ei-chev" aria-hidden="true">▸</span>Motion</button><div class="gemboss-ei-fld"><label>Reveal</label><div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Reveal"><button type="button" data-value="none" aria-pressed="true" class="is-text active">None</button><button type="button" data-value="fade" aria-pressed="false" class="is-text">Fade</button></div></div></div></div></div></aside></div></div><script src="../src/kit-plain.js"></script><script src="../src/editor-plain.js"></script><script>gembossUI.initEditorFrame()</script><script>gembossUI.initEditorPanel()</script></body></html>"></iframe></div><details class="cat-code"><summary>Markup</summary><pre><code><div class="gemboss-ec" style="width:360px;height:1040px">
|
|
320
|
+
<div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels">
|
|
321
|
+
<button type="button" role="tab" data-value="configure" class="gemboss-ec-tab" aria-selected="true">Configure</button>
|
|
322
|
+
<button type="button" role="tab" data-value="chat" class="gemboss-ec-tab" aria-selected="false">Chat</button>
|
|
323
|
+
</div>
|
|
324
|
+
<div class="gemboss-ec-dock-body" style="padding:0">
|
|
325
|
+
<aside class="gemboss-ei gemboss-ei--docked" role="region" aria-label="Settings — Hero">
|
|
326
|
+
<header class="gemboss-ei-head">
|
|
327
|
+
<span class="gemboss-ei-title">Hero<small>hero-banner.default.v1</small>
|
|
328
|
+
</span>
|
|
329
|
+
<button type="button" class="gemboss-ei-act" title="Duplicate section" aria-label="Duplicate section">⧉</button>
|
|
330
|
+
<button type="button" class="gemboss-ei-act" title="Restore this section to its previous version" aria-label="Restore this section">↺</button>
|
|
331
|
+
</header>
|
|
332
|
+
<div class="gemboss-ei-tabs" role="tablist">
|
|
333
|
+
<button type="button" role="tab" data-value="content" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Content</button>
|
|
334
|
+
<button type="button" role="tab" data-value="design" class="gemboss-ei-tab on" aria-selected="true" tabindex="0">Design</button>
|
|
335
|
+
<button type="button" role="tab" data-value="advanced" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Advanced</button>
|
|
336
|
+
</div>
|
|
337
|
+
<div class="gemboss-ei-body">
|
|
338
|
+
<div class="gemboss-ei-pane">
|
|
339
|
+
<div class="gemboss-ei-grp">
|
|
340
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
341
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Layout<small class="gemboss-ei-gh-note">· all screens</small>
|
|
342
|
+
</button>
|
|
343
|
+
<div class="gemboss-ei-fld">
|
|
344
|
+
<label>Content width</label>
|
|
345
|
+
<div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Content width">
|
|
346
|
+
<button type="button" data-value="full" aria-pressed="false" class="is-text">Full</button>
|
|
347
|
+
<button type="button" data-value="contained" aria-pressed="true" class="is-text active">Contained</button>
|
|
348
|
+
<button type="button" data-value="narrow" aria-pressed="false" class="is-text">Narrow</button>
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
351
|
+
<div class="gemboss-ei-fld">
|
|
352
|
+
<label>Columns</label>
|
|
353
|
+
<div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Columns">
|
|
354
|
+
<button type="button" data-value="2" disabled="" aria-pressed="false" class="is-text">2</button>
|
|
355
|
+
<button type="button" data-value="3" disabled="" aria-pressed="true" class="is-text active">3</button>
|
|
356
|
+
<button type="button" data-value="4" disabled="" aria-pressed="false" class="is-text">4</button>
|
|
357
|
+
</div>
|
|
358
|
+
<p class="gemboss-ei-hint">Disabled while a change is applied.</p>
|
|
359
|
+
</div>
|
|
360
|
+
</div>
|
|
361
|
+
<div class="gemboss-ei-grp">
|
|
362
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
363
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Spacing</button>
|
|
364
|
+
<div class="gemboss-ei-fld">
|
|
365
|
+
<label>Padding</label>
|
|
366
|
+
<div class="gemboss-ei-edgebox">
|
|
367
|
+
<div class="gemboss-ei-edge">
|
|
368
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding top" value="24"/>
|
|
369
|
+
<span>T</span>
|
|
370
|
+
</div>
|
|
371
|
+
<div class="gemboss-ei-edge">
|
|
372
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding right" value=""/>
|
|
373
|
+
<span>R</span>
|
|
374
|
+
</div>
|
|
375
|
+
<div class="gemboss-ei-edge">
|
|
376
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding bottom" value="24"/>
|
|
377
|
+
<span>B</span>
|
|
378
|
+
</div>
|
|
379
|
+
<div class="gemboss-ei-edge">
|
|
380
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding left" value=""/>
|
|
381
|
+
<span>L</span>
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
</div>
|
|
385
|
+
<div class="gemboss-ei-fld">
|
|
386
|
+
<label>Margin</label>
|
|
387
|
+
<div class="gemboss-ei-edgebox">
|
|
388
|
+
<div class="gemboss-ei-edge">
|
|
389
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin top" value=""/>
|
|
390
|
+
<span>T</span>
|
|
391
|
+
</div>
|
|
392
|
+
<div class="gemboss-ei-edge">
|
|
393
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin right" value=""/>
|
|
394
|
+
<span>R</span>
|
|
395
|
+
</div>
|
|
396
|
+
<div class="gemboss-ei-edge">
|
|
397
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin bottom" value=""/>
|
|
398
|
+
<span>B</span>
|
|
399
|
+
</div>
|
|
400
|
+
<div class="gemboss-ei-edge">
|
|
401
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin left" value=""/>
|
|
402
|
+
<span>L</span>
|
|
403
|
+
</div>
|
|
404
|
+
</div>
|
|
405
|
+
<p class="gemboss-ei-hint">Empty edges follow desktop.</p>
|
|
406
|
+
</div>
|
|
407
|
+
</div>
|
|
408
|
+
<div class="gemboss-ei-grp">
|
|
409
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
410
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Color</button>
|
|
411
|
+
<div class="gemboss-ei-fld">
|
|
412
|
+
<label for="cat-bg">Background</label>
|
|
413
|
+
<div class="gemboss-ei-color">
|
|
414
|
+
<input type="color" class="gemboss-ei-swatch" aria-label="Background swatch" value="#f4efe6"/>
|
|
415
|
+
<input id="cat-bg" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="#f4efe6"/>
|
|
416
|
+
</div>
|
|
417
|
+
</div>
|
|
418
|
+
<div class="gemboss-ei-fld">
|
|
419
|
+
<label for="cat-ov">Overlay</label>
|
|
420
|
+
<div class="gemboss-ei-color">
|
|
421
|
+
<input type="color" class="gemboss-ei-swatch" aria-label="Overlay swatch" disabled="" title="linear-gradient(90deg,#000,#0000) — not a plain 6-digit hex; edit it in the box below" value="#000000"/>
|
|
422
|
+
<input id="cat-ov" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="linear-gradient(90deg,#000,#0000)"/>
|
|
423
|
+
</div>
|
|
424
|
+
<p class="gemboss-ei-hint">A gradient: the swatch cannot show it, so it is off.</p>
|
|
425
|
+
</div>
|
|
426
|
+
<div class="gemboss-ei-fld">
|
|
427
|
+
<label for="cat-op">Opacity<span class="gemboss-ei-rangeval" data-suffix="%">80%</span>
|
|
428
|
+
</label>
|
|
429
|
+
<input id="cat-op" type="range" class="gemboss-ei-range" min="0" max="100" step="1" value="80"/>
|
|
430
|
+
</div>
|
|
431
|
+
</div>
|
|
432
|
+
<div class="gemboss-ei-grp">
|
|
433
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
434
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Media</button>
|
|
435
|
+
<div class="gemboss-ei-fld">
|
|
436
|
+
<label for="cat-img">Image</label>
|
|
437
|
+
<div class="gemboss-ei-img">
|
|
438
|
+
<div class="gemboss-ei-img-thumb" aria-hidden="true">—</div>
|
|
439
|
+
<div class="gemboss-ei-img-ctl">
|
|
440
|
+
<input id="cat-img" class="gemboss-field gemboss-ei-inp" placeholder="Paste image URL…" value=""/>
|
|
441
|
+
<div class="gemboss-ei-img-actions">
|
|
442
|
+
<button type="button" class="gemboss-ei-addchip" aria-expanded="false">Library</button>
|
|
443
|
+
<button type="button" class="gemboss-ei-addchip" data-gb-image-clear>Clear</button>
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
</div>
|
|
447
|
+
</div>
|
|
448
|
+
</div>
|
|
449
|
+
<div class="gemboss-ei-grp">
|
|
450
|
+
<button type="button" class="gemboss-ei-gh" data-open="closed" aria-expanded="false">
|
|
451
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▸</span>Motion</button>
|
|
452
|
+
<div class="gemboss-ei-fld">
|
|
453
|
+
<label>Reveal</label>
|
|
454
|
+
<div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Reveal">
|
|
455
|
+
<button type="button" data-value="none" aria-pressed="true" class="is-text active">None</button>
|
|
456
|
+
<button type="button" data-value="fade" aria-pressed="false" class="is-text">Fade</button>
|
|
457
|
+
</div>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
</div>
|
|
462
|
+
</aside>
|
|
463
|
+
</div>
|
|
464
|
+
</div></code></pre></details></figure>
|
|
465
|
+
<figure class="cat-demo"><figcaption>390 (điện thoại): ô nhập 16px, control 44px</figcaption><div class="cat-wide"><iframe title="390 (điện thoại): ô nhập 16px, control 44px" style="width:390px;height:1240px" srcdoc="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="../gemboss-ui.css"><link rel="stylesheet" href="../src/editor.css"></head><body><div class="gemboss-ec" style="width:360px;height:1040px"><div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels"><button type="button" role="tab" data-value="configure" class="gemboss-ec-tab" aria-selected="true">Configure</button><button type="button" role="tab" data-value="chat" class="gemboss-ec-tab" aria-selected="false">Chat</button></div><div class="gemboss-ec-dock-body" style="padding:0"><aside class="gemboss-ei gemboss-ei--docked" role="region" aria-label="Settings — Hero"><header class="gemboss-ei-head"><span class="gemboss-ei-title">Hero<small>hero-banner.default.v1</small></span><button type="button" class="gemboss-ei-act" title="Duplicate section" aria-label="Duplicate section">⧉</button><button type="button" class="gemboss-ei-act" title="Restore this section to its previous version" aria-label="Restore this section">↺</button></header><div class="gemboss-ei-tabs" role="tablist"><button type="button" role="tab" data-value="content" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Content</button><button type="button" role="tab" data-value="design" class="gemboss-ei-tab on" aria-selected="true" tabindex="0">Design</button><button type="button" role="tab" data-value="advanced" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Advanced</button></div><div class="gemboss-ei-body"><div class="gemboss-ei-pane"><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Layout<small class="gemboss-ei-gh-note">· all screens</small></button><div class="gemboss-ei-fld"><label>Content width</label><div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Content width"><button type="button" data-value="full" aria-pressed="false" class="is-text">Full</button><button type="button" data-value="contained" aria-pressed="true" class="is-text active">Contained</button><button type="button" data-value="narrow" aria-pressed="false" class="is-text">Narrow</button></div></div><div class="gemboss-ei-fld"><label>Columns</label><div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Columns"><button type="button" data-value="2" disabled="" aria-pressed="false" class="is-text">2</button><button type="button" data-value="3" disabled="" aria-pressed="true" class="is-text active">3</button><button type="button" data-value="4" disabled="" aria-pressed="false" class="is-text">4</button></div><p class="gemboss-ei-hint">Disabled while a change is applied.</p></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Spacing</button><div class="gemboss-ei-fld"><label>Padding</label><div class="gemboss-ei-edgebox"><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding top" value="24"/><span>T</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding right" value=""/><span>R</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding bottom" value="24"/><span>B</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding left" value=""/><span>L</span></div></div></div><div class="gemboss-ei-fld"><label>Margin</label><div class="gemboss-ei-edgebox"><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin top" value=""/><span>T</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin right" value=""/><span>R</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin bottom" value=""/><span>B</span></div><div class="gemboss-ei-edge"><input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin left" value=""/><span>L</span></div></div><p class="gemboss-ei-hint">Empty edges follow desktop.</p></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Color</button><div class="gemboss-ei-fld"><label for="cat-bg">Background</label><div class="gemboss-ei-color"><input type="color" class="gemboss-ei-swatch" aria-label="Background swatch" value="#f4efe6"/><input id="cat-bg" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="#f4efe6"/></div></div><div class="gemboss-ei-fld"><label for="cat-ov">Overlay</label><div class="gemboss-ei-color"><input type="color" class="gemboss-ei-swatch" aria-label="Overlay swatch" disabled="" title="linear-gradient(90deg,#000,#0000) — not a plain 6-digit hex; edit it in the box below" value="#000000"/><input id="cat-ov" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="linear-gradient(90deg,#000,#0000)"/></div><p class="gemboss-ei-hint">A gradient: the swatch cannot show it, so it is off.</p></div><div class="gemboss-ei-fld"><label for="cat-op">Opacity<span class="gemboss-ei-rangeval" data-suffix="%">80%</span></label><input id="cat-op" type="range" class="gemboss-ei-range" min="0" max="100" step="1" value="80"/></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true"><span class="gemboss-ei-chev" aria-hidden="true">▾</span>Media</button><div class="gemboss-ei-fld"><label for="cat-img">Image</label><div class="gemboss-ei-img"><div class="gemboss-ei-img-thumb" aria-hidden="true">—</div><div class="gemboss-ei-img-ctl"><input id="cat-img" class="gemboss-field gemboss-ei-inp" placeholder="Paste image URL…" value=""/><div class="gemboss-ei-img-actions"><button type="button" class="gemboss-ei-addchip" aria-expanded="false">Library</button><button type="button" class="gemboss-ei-addchip" data-gb-image-clear>Clear</button></div></div></div></div></div><div class="gemboss-ei-grp"><button type="button" class="gemboss-ei-gh" data-open="closed" aria-expanded="false"><span class="gemboss-ei-chev" aria-hidden="true">▸</span>Motion</button><div class="gemboss-ei-fld"><label>Reveal</label><div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Reveal"><button type="button" data-value="none" aria-pressed="true" class="is-text active">None</button><button type="button" data-value="fade" aria-pressed="false" class="is-text">Fade</button></div></div></div></div></div></aside></div></div><script src="../src/kit-plain.js"></script><script src="../src/editor-plain.js"></script><script>gembossUI.initEditorFrame()</script><script>gembossUI.initEditorPanel()</script></body></html>"></iframe></div><details class="cat-code"><summary>Markup</summary><pre><code><div class="gemboss-ec" style="width:360px;height:1040px">
|
|
466
|
+
<div class="gemboss-ec-tabs" role="tablist" aria-label="Editor panels">
|
|
467
|
+
<button type="button" role="tab" data-value="configure" class="gemboss-ec-tab" aria-selected="true">Configure</button>
|
|
468
|
+
<button type="button" role="tab" data-value="chat" class="gemboss-ec-tab" aria-selected="false">Chat</button>
|
|
469
|
+
</div>
|
|
470
|
+
<div class="gemboss-ec-dock-body" style="padding:0">
|
|
471
|
+
<aside class="gemboss-ei gemboss-ei--docked" role="region" aria-label="Settings — Hero">
|
|
472
|
+
<header class="gemboss-ei-head">
|
|
473
|
+
<span class="gemboss-ei-title">Hero<small>hero-banner.default.v1</small>
|
|
474
|
+
</span>
|
|
475
|
+
<button type="button" class="gemboss-ei-act" title="Duplicate section" aria-label="Duplicate section">⧉</button>
|
|
476
|
+
<button type="button" class="gemboss-ei-act" title="Restore this section to its previous version" aria-label="Restore this section">↺</button>
|
|
477
|
+
</header>
|
|
478
|
+
<div class="gemboss-ei-tabs" role="tablist">
|
|
479
|
+
<button type="button" role="tab" data-value="content" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Content</button>
|
|
480
|
+
<button type="button" role="tab" data-value="design" class="gemboss-ei-tab on" aria-selected="true" tabindex="0">Design</button>
|
|
481
|
+
<button type="button" role="tab" data-value="advanced" class="gemboss-ei-tab" aria-selected="false" tabindex="-1">Advanced</button>
|
|
482
|
+
</div>
|
|
483
|
+
<div class="gemboss-ei-body">
|
|
484
|
+
<div class="gemboss-ei-pane">
|
|
485
|
+
<div class="gemboss-ei-grp">
|
|
486
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
487
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Layout<small class="gemboss-ei-gh-note">· all screens</small>
|
|
488
|
+
</button>
|
|
489
|
+
<div class="gemboss-ei-fld">
|
|
490
|
+
<label>Content width</label>
|
|
491
|
+
<div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Content width">
|
|
492
|
+
<button type="button" data-value="full" aria-pressed="false" class="is-text">Full</button>
|
|
493
|
+
<button type="button" data-value="contained" aria-pressed="true" class="is-text active">Contained</button>
|
|
494
|
+
<button type="button" data-value="narrow" aria-pressed="false" class="is-text">Narrow</button>
|
|
495
|
+
</div>
|
|
496
|
+
</div>
|
|
497
|
+
<div class="gemboss-ei-fld">
|
|
498
|
+
<label>Columns</label>
|
|
499
|
+
<div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Columns">
|
|
500
|
+
<button type="button" data-value="2" disabled="" aria-pressed="false" class="is-text">2</button>
|
|
501
|
+
<button type="button" data-value="3" disabled="" aria-pressed="true" class="is-text active">3</button>
|
|
502
|
+
<button type="button" data-value="4" disabled="" aria-pressed="false" class="is-text">4</button>
|
|
503
|
+
</div>
|
|
504
|
+
<p class="gemboss-ei-hint">Disabled while a change is applied.</p>
|
|
505
|
+
</div>
|
|
506
|
+
</div>
|
|
507
|
+
<div class="gemboss-ei-grp">
|
|
508
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
509
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Spacing</button>
|
|
510
|
+
<div class="gemboss-ei-fld">
|
|
511
|
+
<label>Padding</label>
|
|
512
|
+
<div class="gemboss-ei-edgebox">
|
|
513
|
+
<div class="gemboss-ei-edge">
|
|
514
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding top" value="24"/>
|
|
515
|
+
<span>T</span>
|
|
516
|
+
</div>
|
|
517
|
+
<div class="gemboss-ei-edge">
|
|
518
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding right" value=""/>
|
|
519
|
+
<span>R</span>
|
|
520
|
+
</div>
|
|
521
|
+
<div class="gemboss-ei-edge">
|
|
522
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding bottom" value="24"/>
|
|
523
|
+
<span>B</span>
|
|
524
|
+
</div>
|
|
525
|
+
<div class="gemboss-ei-edge">
|
|
526
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Padding left" value=""/>
|
|
527
|
+
<span>L</span>
|
|
528
|
+
</div>
|
|
529
|
+
</div>
|
|
530
|
+
</div>
|
|
531
|
+
<div class="gemboss-ei-fld">
|
|
532
|
+
<label>Margin</label>
|
|
533
|
+
<div class="gemboss-ei-edgebox">
|
|
534
|
+
<div class="gemboss-ei-edge">
|
|
535
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin top" value=""/>
|
|
536
|
+
<span>T</span>
|
|
537
|
+
</div>
|
|
538
|
+
<div class="gemboss-ei-edge">
|
|
539
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin right" value=""/>
|
|
540
|
+
<span>R</span>
|
|
541
|
+
</div>
|
|
542
|
+
<div class="gemboss-ei-edge">
|
|
543
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="16" aria-label="Margin bottom" value=""/>
|
|
544
|
+
<span>B</span>
|
|
545
|
+
</div>
|
|
546
|
+
<div class="gemboss-ei-edge">
|
|
547
|
+
<input class="gemboss-field gemboss-field--narrow gemboss-ei-inp" inputMode="numeric" placeholder="0" aria-label="Margin left" value=""/>
|
|
548
|
+
<span>L</span>
|
|
549
|
+
</div>
|
|
550
|
+
</div>
|
|
551
|
+
<p class="gemboss-ei-hint">Empty edges follow desktop.</p>
|
|
552
|
+
</div>
|
|
553
|
+
</div>
|
|
554
|
+
<div class="gemboss-ei-grp">
|
|
555
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
556
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Color</button>
|
|
557
|
+
<div class="gemboss-ei-fld">
|
|
558
|
+
<label for="cat-bg">Background</label>
|
|
559
|
+
<div class="gemboss-ei-color">
|
|
560
|
+
<input type="color" class="gemboss-ei-swatch" aria-label="Background swatch" value="#f4efe6"/>
|
|
561
|
+
<input id="cat-bg" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="#f4efe6"/>
|
|
562
|
+
</div>
|
|
563
|
+
</div>
|
|
564
|
+
<div class="gemboss-ei-fld">
|
|
565
|
+
<label for="cat-ov">Overlay</label>
|
|
566
|
+
<div class="gemboss-ei-color">
|
|
567
|
+
<input type="color" class="gemboss-ei-swatch" aria-label="Overlay swatch" disabled="" title="linear-gradient(90deg,#000,#0000) — not a plain 6-digit hex; edit it in the box below" value="#000000"/>
|
|
568
|
+
<input id="cat-ov" class="gemboss-field gemboss-ei-inp" placeholder="#000000 / var(--…)" value="linear-gradient(90deg,#000,#0000)"/>
|
|
569
|
+
</div>
|
|
570
|
+
<p class="gemboss-ei-hint">A gradient: the swatch cannot show it, so it is off.</p>
|
|
571
|
+
</div>
|
|
572
|
+
<div class="gemboss-ei-fld">
|
|
573
|
+
<label for="cat-op">Opacity<span class="gemboss-ei-rangeval" data-suffix="%">80%</span>
|
|
574
|
+
</label>
|
|
575
|
+
<input id="cat-op" type="range" class="gemboss-ei-range" min="0" max="100" step="1" value="80"/>
|
|
576
|
+
</div>
|
|
577
|
+
</div>
|
|
578
|
+
<div class="gemboss-ei-grp">
|
|
579
|
+
<button type="button" class="gemboss-ei-gh" data-open="open" aria-expanded="true">
|
|
580
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▾</span>Media</button>
|
|
581
|
+
<div class="gemboss-ei-fld">
|
|
582
|
+
<label for="cat-img">Image</label>
|
|
583
|
+
<div class="gemboss-ei-img">
|
|
584
|
+
<div class="gemboss-ei-img-thumb" aria-hidden="true">—</div>
|
|
585
|
+
<div class="gemboss-ei-img-ctl">
|
|
586
|
+
<input id="cat-img" class="gemboss-field gemboss-ei-inp" placeholder="Paste image URL…" value=""/>
|
|
587
|
+
<div class="gemboss-ei-img-actions">
|
|
588
|
+
<button type="button" class="gemboss-ei-addchip" aria-expanded="false">Library</button>
|
|
589
|
+
<button type="button" class="gemboss-ei-addchip" data-gb-image-clear>Clear</button>
|
|
590
|
+
</div>
|
|
591
|
+
</div>
|
|
592
|
+
</div>
|
|
593
|
+
</div>
|
|
594
|
+
</div>
|
|
595
|
+
<div class="gemboss-ei-grp">
|
|
596
|
+
<button type="button" class="gemboss-ei-gh" data-open="closed" aria-expanded="false">
|
|
597
|
+
<span class="gemboss-ei-chev" aria-hidden="true">▸</span>Motion</button>
|
|
598
|
+
<div class="gemboss-ei-fld">
|
|
599
|
+
<label>Reveal</label>
|
|
600
|
+
<div class="ui-seg ui-seg--fill gemboss-ei-seg" role="group" aria-label="Reveal">
|
|
601
|
+
<button type="button" data-value="none" aria-pressed="true" class="is-text active">None</button>
|
|
602
|
+
<button type="button" data-value="fade" aria-pressed="false" class="is-text">Fade</button>
|
|
603
|
+
</div>
|
|
604
|
+
</div>
|
|
605
|
+
</div>
|
|
606
|
+
</div>
|
|
607
|
+
</div>
|
|
608
|
+
</aside>
|
|
609
|
+
</div>
|
|
610
|
+
</div></code></pre></details></figure>
|
|
611
|
+
</div></body></html>
|