@hozu/devtools 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +18 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/overlay/api.d.ts +30 -0
- package/dist/overlay/api.d.ts.map +1 -0
- package/dist/overlay/api.js +83 -0
- package/dist/overlay/api.js.map +1 -0
- package/dist/overlay/app.d.ts +2 -0
- package/dist/overlay/app.d.ts.map +1 -0
- package/dist/overlay/app.js +1430 -0
- package/dist/overlay/app.js.map +1 -0
- package/dist/overlay/dom.d.ts +7 -0
- package/dist/overlay/dom.d.ts.map +1 -0
- package/dist/overlay/dom.js +33 -0
- package/dist/overlay/dom.js.map +1 -0
- package/dist/overlay/index.d.ts +2 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/index.js +4 -0
- package/dist/overlay/index.js.map +1 -0
- package/dist/overlay/layers.d.ts +12 -0
- package/dist/overlay/layers.d.ts.map +1 -0
- package/dist/overlay/layers.js +131 -0
- package/dist/overlay/layers.js.map +1 -0
- package/dist/overlay/logo.d.ts +2 -0
- package/dist/overlay/logo.d.ts.map +1 -0
- package/dist/overlay/logo.js +2 -0
- package/dist/overlay/logo.js.map +1 -0
- package/dist/overlay/look.d.ts +6 -0
- package/dist/overlay/look.d.ts.map +1 -0
- package/dist/overlay/look.js +119 -0
- package/dist/overlay/look.js.map +1 -0
- package/dist/overlay/style.d.ts +3 -0
- package/dist/overlay/style.d.ts.map +1 -0
- package/dist/overlay/style.js +334 -0
- package/dist/overlay/style.js.map +1 -0
- package/dist/overlay/text.d.ts +9 -0
- package/dist/overlay/text.d.ts.map +1 -0
- package/dist/overlay/text.js +51 -0
- package/dist/overlay/text.js.map +1 -0
- package/dist/plain.d.ts +10 -0
- package/dist/plain.d.ts.map +1 -0
- package/dist/plain.js +103 -0
- package/dist/plain.js.map +1 -0
- package/dist/prompt.d.ts +51 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +178 -0
- package/dist/prompt.js.map +1 -0
- package/dist/requests.d.ts +20 -0
- package/dist/requests.d.ts.map +1 -0
- package/dist/requests.js +88 -0
- package/dist/requests.js.map +1 -0
- package/dist/theme.d.ts +20 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +179 -0
- package/dist/theme.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const css = "\n:host { all: initial; }\n* { box-sizing: border-box; }\n.root {\n --red: #fb3a0e; --green: #2fa36b; --paper: #f1ede4;\n --bg: #111010; --bg-2: #1a1918; --bg-3: #0b0a0a; --bench: #0b0a0a; --tint: 241, 237, 228;\n --text: #ece8df; --mute: #9a948a; --faint: #6f695f; --accent: #ff8a66; --ok: #5fc995;\n --code: #cfc9be; --code-num: #5f5a53; --line: rgba(241, 237, 228, 0.1); --line-2: rgba(241, 237, 228, 0.16);\n color-scheme: dark;\n --sans: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --mono: ui-monospace, SFMono-Regular, Menlo, monospace;\n font: 13px/1.45 var(--sans); color: var(--text); -webkit-font-smoothing: antialiased;\n position: fixed; inset: 0; pointer-events: none; z-index: 2147483647;\n}\n.root[data-theme=\"light\"] {\n --bg: #fbfaf7; --bg-2: #f1ede4; --bg-3: #ffffff; --bench: #e6e1d7; --tint: 17, 16, 16;\n --text: #111010; --mute: #6b655c; --faint: #9a948a; --accent: #c42d06; --ok: #1f7a4f;\n --code: #2b2724; --code-num: #a8a196; --line: rgba(17, 16, 16, 0.1); --line-2: rgba(17, 16, 16, 0.16);\n color-scheme: light;\n}\n.root[data-theme=\"light\"] .dock { box-shadow: 0 8px 24px rgba(17, 16, 16, 0.14), 0 1px 2px rgba(17, 16, 16, 0.1); }\n.root[data-theme=\"light\"] .panel { box-shadow: 0 16px 48px rgba(17, 16, 16, 0.14), 0 2px 6px rgba(17, 16, 16, 0.08); }\n.root[data-theme=\"light\"] .sizer { box-shadow: 0 0 0 1px var(--line-2), 0 20px 60px rgba(17, 16, 16, 0.18); }\n.root[data-theme=\"light\"] .grip { box-shadow: inset 0 0 0 1px rgba(17, 16, 16, 0.12); }\nbutton { font: inherit; color: inherit; cursor: pointer; }\nbutton:focus-visible, textarea:focus-visible, input:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }\n\n.panel[hidden], .dock[hidden], .bench[hidden] { display: none; }\n.bench {\n position: fixed; inset: 0; pointer-events: auto; display: grid; grid-template-columns: 280px 1fr 400px;\n background: var(--bench); color: var(--text);\n}\n.bench-left { grid-column: 1; overflow: auto; border-right: 1px solid var(--line); background: var(--bg); }\n.bench-left .head { position: static; }\n.bench-left .close { display: none; }\n.bench-center { grid-column: 2; display: grid; grid-template-rows: auto 1fr; min-width: 0; }\n.bench-bar {\n display: flex; align-items: center; gap: 6px; padding: 8px 12px; border-bottom: 1px solid var(--line); background: var(--bg);\n white-space: nowrap; min-width: 0; overflow: hidden;\n}\n.bench-bar > * { flex: none; }\n.bench-bar .seg { display: flex; background: rgba(var(--tint), 0.06); border-radius: 999px; padding: 2px; }\n.bench-bar button.mode, .bench-bar button.act {\n background: none; border: 0; border-radius: 999px; padding: 5px 11px; font: 500 12.5px/1.2 var(--sans); color: var(--mute);\n}\n.bench-bar button.mode[aria-pressed=\"true\"] { background: rgba(var(--tint), 0.14); color: var(--text); }\n.bench-bar button.act:hover, .bench-bar button.mode:hover { color: var(--text); }\n.bench-bar select {\n height: 28px; border: 1px solid var(--line-2); border-radius: 999px; background: var(--bg-3); color: var(--text);\n font: 500 12px/1 var(--sans); padding: 0 10px;\n}\n.bench-bar .size { font: 12px/1 var(--mono); color: var(--mute); flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.bench-bar .spacer { flex: 1 1 0; min-width: 0; }\n.bench-bar .count:not(:empty) {\n display: inline-grid; place-items: center; min-width: 16px; height: 16px; padding: 0 4px; margin-left: 6px;\n border-radius: 999px; background: var(--red); color: #fff; font: 600 10.5px/1 var(--sans);\n}\n.bench-bar .exit { border: 1px solid var(--line-2) !important; }\n.bench-bar .previewing { border: 0; border-radius: 999px; background: var(--red); color: #fff; padding: 5px 12px; font: 500 12.5px/1.2 var(--sans); }\n.stage { display: grid; place-items: center; overflow: hidden; min-height: 0;\n background-image: radial-gradient(rgba(var(--tint), 0.07) 1px, transparent 1px); background-size: 16px 16px; }\n.sizer { position: relative; box-shadow: 0 0 0 1px var(--line-2), 0 20px 60px rgba(0, 0, 0, 0.45); border-radius: 6px; background: #fff; }\n.sizer iframe { position: absolute; left: 0; top: 0; border: 0; transform-origin: 0 0; background: #fff; border-radius: 6px; }\n.sizer.dragging iframe { pointer-events: none; }\n.sizer.dragging { user-select: none; }\n.resize {\n position: absolute; right: -10px; bottom: -10px; width: 20px; height: 20px; border-radius: 999px; cursor: nwse-resize;\n background: var(--red); box-shadow: 0 0 0 3px var(--bench); touch-action: none;\n}\n.root.benching .panel {\n top: 0; right: 0; bottom: 0; width: 400px; max-height: none; border-radius: 0; border-width: 0 0 0 1px;\n box-shadow: none;\n}\n\n.dock {\n position: fixed; pointer-events: auto; display: flex; align-items: center; gap: 2px; padding: 4px;\n background: var(--bg); color: var(--text); border: 1px solid var(--line-2); border-radius: 999px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.22), 0 1px 2px rgba(0, 0, 0, 0.2);\n user-select: none; touch-action: none;\n}\n.grip {\n display: grid; place-items: center; width: 28px; height: 28px; border-radius: 999px; cursor: grab; flex: none;\n background: #fff; box-shadow: inset 0 0 0 1px rgba(17, 16, 16, 0.08); margin-right: 4px;\n}\n.grip img { width: 18px; height: 18px; display: block; pointer-events: none; }\n.dock.folded { padding: 4px; }\n.dock.folded .grip { margin-right: 0; }\n.grip:active { cursor: grabbing; }\n.dock .seg { display: flex; background: rgba(var(--tint), 0.06); border-radius: 999px; padding: 2px; }\n.dock button.mode, .dock button.act {\n background: none; border: 0; border-radius: 999px; padding: 5px 11px; font: 500 12.5px/1.2 var(--sans); color: var(--mute);\n}\n.dock button.mode[aria-pressed=\"true\"] { background: rgba(var(--tint), 0.14); color: var(--text); }\n.dock button.mode:hover, .dock button.act:hover { color: var(--text); }\n.dock button.act:hover { background: rgba(var(--tint), 0.06); }\n.dock .count:not(:empty) {\n display: inline-grid; place-items: center; min-width: 16px; height: 16px; padding: 0 4px; margin-left: 6px;\n border-radius: 999px; background: var(--red); color: #fff; font: 600 10.5px/1 var(--sans); vertical-align: 1px;\n}\n.dock .hint { padding: 0 10px 0 6px; font: 12px/1 var(--sans); color: var(--mute); white-space: nowrap; }\n\n.panel {\n position: fixed; pointer-events: auto; top: 16px; right: 16px; width: min(400px, calc(100vw - 32px));\n max-height: calc(100vh - 96px); overflow: auto; overscroll-behavior: contain;\n background: var(--bg); border: 1px solid var(--line-2); border-radius: 12px;\n box-shadow: 0 16px 48px rgba(0, 0, 0, 0.28), 0 2px 6px rgba(0, 0, 0, 0.18);\n scrollbar-width: thin; scrollbar-color: rgba(var(--tint), 0.2) transparent;\n}\n.root:not(.benching) .head { cursor: move; touch-action: none; }\n.head { position: sticky; top: 0; background: var(--bg); padding: 14px 16px 12px; border-bottom: 1px solid var(--line); z-index: 1; }\n.kicker { font: 500 12px/1.2 var(--sans); color: var(--mute); padding-right: 32px; }\n.title { margin: 4px 0 0; font: 600 16px/1.3 var(--sans); color: var(--text); word-break: break-word; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n.title code { font: 500 11.5px/1 var(--mono); background: rgba(251, 58, 14, 0.14); color: var(--accent); padding: 4px 7px; border-radius: 6px; }\n.close {\n position: absolute; top: 10px; right: 10px; width: 28px; height: 28px; border: 0; border-radius: 8px;\n background: none; color: var(--mute); font: 400 18px/1 var(--sans);\n}\n.close:hover { background: rgba(var(--tint), 0.08); color: var(--text); }\n.picks { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }\n.picks button { border: 1px solid var(--line-2); background: none; border-radius: 6px; padding: 3px 8px; font: 500 11.5px/1.3 var(--mono); color: var(--mute); }\n.picks button[aria-current=\"true\"] { border-color: var(--red); color: var(--text); background: rgba(251, 58, 14, 0.1); }\n\n.sec { padding: 12px 16px; border-bottom: 1px solid var(--line); }\n.sec:last-child { border-bottom: 0; }\n.label { font: 500 12px/1 var(--sans); color: var(--mute); margin-bottom: 8px; }\n.loc { display: flex; gap: 8px; align-items: center; font: 12px/1.4 var(--mono); color: var(--text); }\n.loc > span:nth-child(2) { flex: 1; min-width: 0; overflow-wrap: anywhere; }\n.loc button {\n flex: none; border: 1px solid var(--line-2); background: none; border-radius: 6px; padding: 2px 7px;\n font: 500 11px/1.3 var(--sans); color: var(--mute);\n}\n.loc button:hover { color: var(--text); background: rgba(var(--tint), 0.06); }\n.loc + .loc { margin-top: 6px; }\n.loc .what { color: var(--mute); flex: none; width: 66px; font-family: var(--sans); }\n.warn { color: var(--accent); }\npre {\n margin: 10px 0 0; padding: 8px 0; overflow: auto; background: var(--bg-3); color: var(--code);\n border: 1px solid var(--line); border-radius: 8px; font: 11.5px/1.6 var(--mono); tab-size: 2;\n scrollbar-width: thin; scrollbar-color: rgba(var(--tint), 0.2) transparent;\n}\npre span { display: block; padding: 0 10px; white-space: pre; }\npre span.on { background: rgba(251, 58, 14, 0.14); color: var(--text); box-shadow: inset 2px 0 0 var(--red); }\npre i { font-style: normal; color: var(--code-num); margin-right: 12px; }\n.row { font: 12px/1.5 var(--mono); color: var(--text); }\n.row b { font-weight: 500; color: var(--mute); font-family: var(--sans); }\n.chip {\n display: inline-block; border-radius: 6px; padding: 2px 7px; margin: 0 4px 4px 0;\n background: rgba(var(--tint), 0.08); font: 500 11.5px/1.4 var(--mono); color: var(--text);\n}\n.chip.red { background: rgba(251, 58, 14, 0.14); color: var(--accent); }\n.kids { display: grid; gap: 2px; margin-bottom: 8px; }\n.kids button {\n text-align: left; border: 0; border-radius: 6px; background: none; padding: 4px 8px;\n font: 12px/1.4 var(--mono); color: var(--text);\n}\n.kids button:hover { background: rgba(var(--tint), 0.06); }\n.nav { display: flex; gap: 6px; }\n.nav button {\n border: 1px solid var(--line-2); background: none; border-radius: 6px; padding: 4px 10px;\n font: 500 12px/1.2 var(--sans); color: var(--mute);\n}\n.nav button:hover { color: var(--text); background: rgba(var(--tint), 0.06); }\n\nfieldset { border: 0; margin: 0 0 10px; padding: 0; display: grid; gap: 6px; }\nfieldset label { display: flex; gap: 8px; align-items: center; font: 13px/1.3 var(--sans); color: var(--text); cursor: pointer; }\nfieldset input { accent-color: var(--red); width: 14px; height: 14px; margin: 0; }\ntextarea {\n width: 100%; min-height: 80px; resize: vertical; border: 1px solid var(--line-2); border-radius: 8px;\n background: var(--bg-3); padding: 8px 10px; font: 13px/1.45 var(--sans); color: var(--text);\n}\ntextarea:focus { border-color: var(--red); outline: none; box-shadow: 0 0 0 3px rgba(251, 58, 14, 0.2); }\ntextarea::placeholder { color: var(--faint); }\n.actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 10px; }\n.actions button {\n border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 8px; padding: 8px;\n font: 500 13px/1.2 var(--sans); color: var(--text); transition: background 120ms, border-color 120ms;\n}\n.actions button:hover { background: rgba(var(--tint), 0.1); }\n.actions button.primary { grid-column: 1 / -1; background: var(--red); border-color: var(--red); color: #fff; padding: 9px 8px; }\n.actions button.primary:hover { background: #ff5126; border-color: #ff5126; }\n.status { margin-top: 10px; font: 12.5px/1.45 var(--sans); }\n.status.ok { color: var(--ok); }\n.status.err { color: var(--accent); }\n.status code { font: 12px/1.4 var(--mono); color: var(--text); }\n.empty { padding: 16px; font: 13px/1.5 var(--sans); color: var(--mute); }\n.empty b { color: var(--text); font-weight: 600; }\n.req {\n display: grid; grid-template-columns: auto 1fr auto; gap: 2px 10px; padding: 10px 16px; border: 0;\n border-bottom: 1px solid var(--line); align-items: baseline; width: 100%; text-align: left; background: none;\n}\n.req:hover { background: rgba(var(--tint), 0.04); }\n.req .open-req { border: 0; background: none; padding: 0; text-align: left; cursor: pointer; }\n.req .open-req:hover { text-decoration: underline; text-underline-offset: 2px; }\n.req .done { font-size: 12px; }\n.req .done:hover { color: var(--ok); }\n.req .n { font: 11.5px/1 var(--mono); color: var(--mute); }\n.req .t { font: 500 13px/1.35 var(--sans); color: var(--text); }\n.req .s { font: 500 11px/1 var(--sans); border-radius: 999px; padding: 3px 8px; }\n.req .s.open { background: rgba(251, 58, 14, 0.14); color: var(--accent); }\n.req .s.done { background: rgba(47, 163, 107, 0.16); color: var(--ok); }\n.req .l { grid-column: 2 / -1; font: 11.5px/1.4 var(--mono); color: var(--mute); word-break: break-all; }\n.tip { padding: 12px 16px; background: var(--bg-2); color: var(--mute); font: 12.5px/1.5 var(--sans); }\n.tip q { color: var(--text); font-weight: 500; }\n\n.quote { font-weight: 400; color: var(--mute); font-size: 14px; }\n.plain { font: 13px/1.5 var(--sans); color: var(--text); padding: 2px 0; }\n.plain + .plain { border-top: 1px solid var(--line); padding-top: 6px; margin-top: 4px; }\n.file { margin-top: 10px; font: 11.5px/1.4 var(--mono); color: var(--mute); display: flex; gap: 8px; align-items: center; }\nbutton.link { border: 0; background: none; padding: 0; color: var(--mute); font: 500 12px/1.3 var(--sans); text-decoration: underline; text-underline-offset: 2px; }\nbutton.link:hover { color: var(--text); }\n.row-end { display: flex; justify-content: flex-end; margin-top: 6px; }\ntextarea.draft { margin-top: 8px; min-height: 200px; font: 11.5px/1.5 var(--mono); }\ntextarea[hidden], .draft[hidden] { display: none; }\nlegend { font: 500 13px/1.3 var(--sans); color: var(--text); padding: 0; margin-bottom: 6px; }\n.meta { font: 11px/1.4 var(--mono); color: var(--faint); word-break: break-all; }\n.back { border: 0; background: none; padding: 0 0 6px; color: var(--mute); font: 500 12px/1 var(--sans); }\n.back:hover { color: var(--text); }\npre.md { margin: 0; padding: 10px 12px; white-space: pre-wrap; word-break: break-word; max-height: 46vh; color: var(--code); }\n.finish { display: flex; gap: 8px; margin-top: 10px; }\n.finish button { border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 8px; padding: 0 12px; font: 500 13px/1 var(--sans); color: var(--text); }\n.finish button:hover { background: rgba(47, 163, 107, 0.2); border-color: rgba(47, 163, 107, 0.5); }\ninput.outcome { flex: 1; min-width: 0; height: 34px; border: 1px solid var(--line-2); border-radius: 8px; background: var(--bg-3); color: var(--text); padding: 0 10px; font: 13px/1 var(--sans); }\ninput.outcome:focus { border-color: var(--red); outline: none; box-shadow: 0 0 0 3px rgba(251, 58, 14, 0.2); }\n.actions button.danger:hover { background: rgba(251, 58, 14, 0.16); border-color: rgba(251, 58, 14, 0.5); color: var(--accent); }\n.option { display: flex; gap: 10px; align-items: flex-start; padding: 6px 0; cursor: pointer; }\n.option input { margin-top: 3px; accent-color: var(--red); }\n.option > span { display: grid; gap: 2px; }\n.option b { font: 500 13px/1.3 var(--sans); color: var(--text); }\n.option > span > span { font: 12px/1.4 var(--sans); color: var(--mute); }\n.keyrow { display: flex; gap: 10px; align-items: center; font: 12.5px/1.8 var(--sans); color: var(--mute); }\nkbd { font: 500 11px/1 var(--mono); color: var(--text); background: rgba(var(--tint), 0.08); border: 1px solid var(--line-2); border-radius: 5px; padding: 3px 6px; min-width: 92px; text-align: center; }\n.dock button.gear { font-size: 14px; padding: 5px 9px; }\n\n.look { display: flex; align-items: center; gap: 8px; min-height: 32px; }\n.look + .look { margin-top: 4px; }\n.look .what { flex: none; width: 128px; color: var(--mute); font: 12.5px/1.3 var(--sans); }\n.look select {\n flex: 1; min-width: 0; height: 28px; border: 1px solid var(--line-2); border-radius: 6px; background: var(--bg-3);\n color: var(--text); font: 12px/1 var(--mono); padding: 0 6px;\n}\n.look select:focus { border-color: var(--red); outline: none; }\n.look .pick { flex: 1; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }\n.look input[type=\"color\"] { width: 28px; height: 28px; padding: 0; border: 1px solid var(--line-2); border-radius: 6px; background: none; cursor: pointer; }\n.look code { font: 11.5px/1 var(--mono); color: var(--mute); }\n.swatch { width: 18px; height: 18px; border-radius: 999px; border: 1px solid var(--line-2); padding: 0; }\n.swatch:hover { transform: scale(1.12); }\n.chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }\n.chip-button { border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 999px; padding: 3px 10px; font: 500 12px/1.3 var(--sans); color: var(--text); }\n.chip-button:hover { background: rgba(var(--tint), 0.1); }\n.hint-text { flex: 1; font: 12px/1.4 var(--sans); color: var(--faint); }\n\n.find { margin-top: 10px; }\n.jump {\n margin-top: 8px; border: 1px solid var(--line-2); background: rgba(251, 58, 14, 0.12); color: var(--accent);\n border-radius: 999px; padding: 4px 10px; font: 500 12px/1.2 var(--sans);\n}\n.jump:hover { background: rgba(251, 58, 14, 0.2); }\n.find input { width: 100%; }\n.layers { padding: 6px 8px 10px; border-bottom: 1px solid var(--line); }\n.layer { display: flex; align-items: center; min-height: 26px; }\n.layer .indent { flex: none; }\n.layer .fold { flex: none; width: 18px; height: 22px; border: 0; background: none; color: var(--mute); padding: 0; font: 11px/1 var(--sans); }\n.layer .name {\n flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px; text-align: left; border: 0; border-radius: 6px;\n background: none; padding: 3px 6px; font: 12.5px/1.35 var(--mono); color: var(--text); overflow: hidden; white-space: nowrap;\n}\n.layer .name:hover:not(:disabled) { background: rgba(var(--tint), 0.07); }\n.layer .name:disabled { cursor: default; }\n.layer.off .name { color: var(--faint); }\n.layer.group .name { color: var(--mute); font-family: var(--sans); font-size: 12px; }\n.badge-ref { font: 11px/1 var(--mono); color: var(--accent); }\n.badge-off { font: 11px/1 var(--sans); color: var(--faint); }\n.state { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 0; font: 13px/1.35 var(--sans); }\n.state > span { flex: 1; min-width: 0; overflow-wrap: anywhere; }\n.state > button { flex: none; white-space: nowrap; }\n.state + .state { border-top: 1px solid var(--line); }\n.state.on span { color: var(--accent); }\n.dock .previewing {\n border: 0; border-radius: 999px; background: var(--red); color: #fff; padding: 5px 12px; margin-left: 4px;\n font: 500 12.5px/1.2 var(--sans); white-space: nowrap;\n}\n.dock .previewing:hover { background: #ff5126; }\n\n.tabs { display: flex; gap: 4px; margin-top: 10px; }\n.tab { border: 1px solid var(--line-2); background: none; border-radius: 999px; padding: 4px 10px; font: 500 12px/1.2 var(--sans); color: var(--mute); }\n.tab[aria-pressed=\"true\"] { background: rgba(var(--tint), 0.12); color: var(--text); border-color: transparent; }\n.item { display: grid; grid-template-columns: auto 1fr auto auto; gap: 10px; align-items: baseline; padding: 8px 0; }\n.item + .item { border-top: 1px solid var(--line); }\n.item .n { font: 11.5px/1 var(--mono); color: var(--mute); }\n.item .what { display: grid; gap: 2px; min-width: 0; }\n.item .what b { font: 500 13px/1.3 var(--sans); color: var(--text); }\n.item .what span { font: 12.5px/1.4 var(--sans); color: var(--mute); overflow-wrap: anywhere; }\n.notice { margin: 12px 16px 0; padding: 10px 12px; border-radius: 8px; background: rgba(47, 163, 107, 0.14); color: var(--ok); font: 12.5px/1.45 var(--sans); }\n.notice code { font: 12px/1.4 var(--mono); color: var(--text); }\n.more { margin-top: 8px; color: var(--mute); font-size: 12.5px; }\n.export { margin-top: 4px; }\n.choice { display: grid; gap: 4px; }\n.choice button { border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 8px; padding: 9px 8px; font: 500 13px/1.2 var(--sans); color: var(--text); }\n.choice button:hover { background: rgba(var(--tint), 0.1); }\n.choice button.primary { background: var(--red); border-color: var(--red); color: #fff; }\n.choice button.primary:hover { background: #ff5126; }\n.choice .why { font: 12px/1.4 var(--sans); color: var(--mute); margin-bottom: 8px; }\n\n@media (max-width: 720px) { .dock .hint { display: none; } }\n@media (max-width: 420px) {\n .dock button.mode, .dock button.act { padding: 5px 8px; }\n .panel { top: 8px; right: 8px; width: calc(100vw - 16px); max-height: calc(100vh - 80px); }\n}\n@media (prefers-reduced-motion: reduce) { .actions button { transition: none; } }\n";
|
|
2
|
+
export declare const outlineCss = "\n:host { all: initial; }\n.frame {\n position: fixed; box-sizing: border-box; pointer-events: none; border: 1.5px solid #fb3a0e; border-radius: 3px;\n box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85);\n}\n.frame.selected { border-width: 2px; background: rgba(251, 58, 14, 0.06); }\n.frame[hidden], .box[hidden] { display: none; }\n.box { position: fixed; box-sizing: border-box; pointer-events: none; }\n.tag {\n position: absolute; left: -1px; bottom: 100%; margin-bottom: 6px; white-space: nowrap;\n background: #111010; color: #ece8df; font: 500 11.5px/1 ui-monospace, SFMono-Regular, Menlo, monospace;\n padding: 6px 8px; border-radius: 6px; border: 1px solid rgba(241, 237, 228, 0.16);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);\n}\n.tag b { color: #fb3a0e; font-weight: 600; }\n.box.below .tag { bottom: auto; top: 100%; margin: 6px 0 0; }\n.badge {\n position: absolute; right: 0; top: 0; transform: translate(50%, -50%);\n min-width: 18px; height: 18px; display: grid; place-items: center; padding: 0 5px; border-radius: 999px;\n background: #fb3a0e; color: #fff; font: 600 11px/1 system-ui, -apple-system, sans-serif;\n}\n";
|
|
3
|
+
//# sourceMappingURL=style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/overlay/style.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,k7oBAqTf,CAAA;AAED,eAAO,MAAM,UAAU,4nCAsBtB,CAAA"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
export const css = `
|
|
2
|
+
:host { all: initial; }
|
|
3
|
+
* { box-sizing: border-box; }
|
|
4
|
+
.root {
|
|
5
|
+
--red: #fb3a0e; --green: #2fa36b; --paper: #f1ede4;
|
|
6
|
+
--bg: #111010; --bg-2: #1a1918; --bg-3: #0b0a0a; --bench: #0b0a0a; --tint: 241, 237, 228;
|
|
7
|
+
--text: #ece8df; --mute: #9a948a; --faint: #6f695f; --accent: #ff8a66; --ok: #5fc995;
|
|
8
|
+
--code: #cfc9be; --code-num: #5f5a53; --line: rgba(241, 237, 228, 0.1); --line-2: rgba(241, 237, 228, 0.16);
|
|
9
|
+
color-scheme: dark;
|
|
10
|
+
--sans: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
11
|
+
--mono: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
12
|
+
font: 13px/1.45 var(--sans); color: var(--text); -webkit-font-smoothing: antialiased;
|
|
13
|
+
position: fixed; inset: 0; pointer-events: none; z-index: 2147483647;
|
|
14
|
+
}
|
|
15
|
+
.root[data-theme="light"] {
|
|
16
|
+
--bg: #fbfaf7; --bg-2: #f1ede4; --bg-3: #ffffff; --bench: #e6e1d7; --tint: 17, 16, 16;
|
|
17
|
+
--text: #111010; --mute: #6b655c; --faint: #9a948a; --accent: #c42d06; --ok: #1f7a4f;
|
|
18
|
+
--code: #2b2724; --code-num: #a8a196; --line: rgba(17, 16, 16, 0.1); --line-2: rgba(17, 16, 16, 0.16);
|
|
19
|
+
color-scheme: light;
|
|
20
|
+
}
|
|
21
|
+
.root[data-theme="light"] .dock { box-shadow: 0 8px 24px rgba(17, 16, 16, 0.14), 0 1px 2px rgba(17, 16, 16, 0.1); }
|
|
22
|
+
.root[data-theme="light"] .panel { box-shadow: 0 16px 48px rgba(17, 16, 16, 0.14), 0 2px 6px rgba(17, 16, 16, 0.08); }
|
|
23
|
+
.root[data-theme="light"] .sizer { box-shadow: 0 0 0 1px var(--line-2), 0 20px 60px rgba(17, 16, 16, 0.18); }
|
|
24
|
+
.root[data-theme="light"] .grip { box-shadow: inset 0 0 0 1px rgba(17, 16, 16, 0.12); }
|
|
25
|
+
button { font: inherit; color: inherit; cursor: pointer; }
|
|
26
|
+
button:focus-visible, textarea:focus-visible, input:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }
|
|
27
|
+
|
|
28
|
+
.panel[hidden], .dock[hidden], .bench[hidden] { display: none; }
|
|
29
|
+
.bench {
|
|
30
|
+
position: fixed; inset: 0; pointer-events: auto; display: grid; grid-template-columns: 280px 1fr 400px;
|
|
31
|
+
background: var(--bench); color: var(--text);
|
|
32
|
+
}
|
|
33
|
+
.bench-left { grid-column: 1; overflow: auto; border-right: 1px solid var(--line); background: var(--bg); }
|
|
34
|
+
.bench-left .head { position: static; }
|
|
35
|
+
.bench-left .close { display: none; }
|
|
36
|
+
.bench-center { grid-column: 2; display: grid; grid-template-rows: auto 1fr; min-width: 0; }
|
|
37
|
+
.bench-bar {
|
|
38
|
+
display: flex; align-items: center; gap: 6px; padding: 8px 12px; border-bottom: 1px solid var(--line); background: var(--bg);
|
|
39
|
+
white-space: nowrap; min-width: 0; overflow: hidden;
|
|
40
|
+
}
|
|
41
|
+
.bench-bar > * { flex: none; }
|
|
42
|
+
.bench-bar .seg { display: flex; background: rgba(var(--tint), 0.06); border-radius: 999px; padding: 2px; }
|
|
43
|
+
.bench-bar button.mode, .bench-bar button.act {
|
|
44
|
+
background: none; border: 0; border-radius: 999px; padding: 5px 11px; font: 500 12.5px/1.2 var(--sans); color: var(--mute);
|
|
45
|
+
}
|
|
46
|
+
.bench-bar button.mode[aria-pressed="true"] { background: rgba(var(--tint), 0.14); color: var(--text); }
|
|
47
|
+
.bench-bar button.act:hover, .bench-bar button.mode:hover { color: var(--text); }
|
|
48
|
+
.bench-bar select {
|
|
49
|
+
height: 28px; border: 1px solid var(--line-2); border-radius: 999px; background: var(--bg-3); color: var(--text);
|
|
50
|
+
font: 500 12px/1 var(--sans); padding: 0 10px;
|
|
51
|
+
}
|
|
52
|
+
.bench-bar .size { font: 12px/1 var(--mono); color: var(--mute); flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
53
|
+
.bench-bar .spacer { flex: 1 1 0; min-width: 0; }
|
|
54
|
+
.bench-bar .count:not(:empty) {
|
|
55
|
+
display: inline-grid; place-items: center; min-width: 16px; height: 16px; padding: 0 4px; margin-left: 6px;
|
|
56
|
+
border-radius: 999px; background: var(--red); color: #fff; font: 600 10.5px/1 var(--sans);
|
|
57
|
+
}
|
|
58
|
+
.bench-bar .exit { border: 1px solid var(--line-2) !important; }
|
|
59
|
+
.bench-bar .previewing { border: 0; border-radius: 999px; background: var(--red); color: #fff; padding: 5px 12px; font: 500 12.5px/1.2 var(--sans); }
|
|
60
|
+
.stage { display: grid; place-items: center; overflow: hidden; min-height: 0;
|
|
61
|
+
background-image: radial-gradient(rgba(var(--tint), 0.07) 1px, transparent 1px); background-size: 16px 16px; }
|
|
62
|
+
.sizer { position: relative; box-shadow: 0 0 0 1px var(--line-2), 0 20px 60px rgba(0, 0, 0, 0.45); border-radius: 6px; background: #fff; }
|
|
63
|
+
.sizer iframe { position: absolute; left: 0; top: 0; border: 0; transform-origin: 0 0; background: #fff; border-radius: 6px; }
|
|
64
|
+
.sizer.dragging iframe { pointer-events: none; }
|
|
65
|
+
.sizer.dragging { user-select: none; }
|
|
66
|
+
.resize {
|
|
67
|
+
position: absolute; right: -10px; bottom: -10px; width: 20px; height: 20px; border-radius: 999px; cursor: nwse-resize;
|
|
68
|
+
background: var(--red); box-shadow: 0 0 0 3px var(--bench); touch-action: none;
|
|
69
|
+
}
|
|
70
|
+
.root.benching .panel {
|
|
71
|
+
top: 0; right: 0; bottom: 0; width: 400px; max-height: none; border-radius: 0; border-width: 0 0 0 1px;
|
|
72
|
+
box-shadow: none;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.dock {
|
|
76
|
+
position: fixed; pointer-events: auto; display: flex; align-items: center; gap: 2px; padding: 4px;
|
|
77
|
+
background: var(--bg); color: var(--text); border: 1px solid var(--line-2); border-radius: 999px;
|
|
78
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.22), 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
79
|
+
user-select: none; touch-action: none;
|
|
80
|
+
}
|
|
81
|
+
.grip {
|
|
82
|
+
display: grid; place-items: center; width: 28px; height: 28px; border-radius: 999px; cursor: grab; flex: none;
|
|
83
|
+
background: #fff; box-shadow: inset 0 0 0 1px rgba(17, 16, 16, 0.08); margin-right: 4px;
|
|
84
|
+
}
|
|
85
|
+
.grip img { width: 18px; height: 18px; display: block; pointer-events: none; }
|
|
86
|
+
.dock.folded { padding: 4px; }
|
|
87
|
+
.dock.folded .grip { margin-right: 0; }
|
|
88
|
+
.grip:active { cursor: grabbing; }
|
|
89
|
+
.dock .seg { display: flex; background: rgba(var(--tint), 0.06); border-radius: 999px; padding: 2px; }
|
|
90
|
+
.dock button.mode, .dock button.act {
|
|
91
|
+
background: none; border: 0; border-radius: 999px; padding: 5px 11px; font: 500 12.5px/1.2 var(--sans); color: var(--mute);
|
|
92
|
+
}
|
|
93
|
+
.dock button.mode[aria-pressed="true"] { background: rgba(var(--tint), 0.14); color: var(--text); }
|
|
94
|
+
.dock button.mode:hover, .dock button.act:hover { color: var(--text); }
|
|
95
|
+
.dock button.act:hover { background: rgba(var(--tint), 0.06); }
|
|
96
|
+
.dock .count:not(:empty) {
|
|
97
|
+
display: inline-grid; place-items: center; min-width: 16px; height: 16px; padding: 0 4px; margin-left: 6px;
|
|
98
|
+
border-radius: 999px; background: var(--red); color: #fff; font: 600 10.5px/1 var(--sans); vertical-align: 1px;
|
|
99
|
+
}
|
|
100
|
+
.dock .hint { padding: 0 10px 0 6px; font: 12px/1 var(--sans); color: var(--mute); white-space: nowrap; }
|
|
101
|
+
|
|
102
|
+
.panel {
|
|
103
|
+
position: fixed; pointer-events: auto; top: 16px; right: 16px; width: min(400px, calc(100vw - 32px));
|
|
104
|
+
max-height: calc(100vh - 96px); overflow: auto; overscroll-behavior: contain;
|
|
105
|
+
background: var(--bg); border: 1px solid var(--line-2); border-radius: 12px;
|
|
106
|
+
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.28), 0 2px 6px rgba(0, 0, 0, 0.18);
|
|
107
|
+
scrollbar-width: thin; scrollbar-color: rgba(var(--tint), 0.2) transparent;
|
|
108
|
+
}
|
|
109
|
+
.root:not(.benching) .head { cursor: move; touch-action: none; }
|
|
110
|
+
.head { position: sticky; top: 0; background: var(--bg); padding: 14px 16px 12px; border-bottom: 1px solid var(--line); z-index: 1; }
|
|
111
|
+
.kicker { font: 500 12px/1.2 var(--sans); color: var(--mute); padding-right: 32px; }
|
|
112
|
+
.title { margin: 4px 0 0; font: 600 16px/1.3 var(--sans); color: var(--text); word-break: break-word; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
|
113
|
+
.title code { font: 500 11.5px/1 var(--mono); background: rgba(251, 58, 14, 0.14); color: var(--accent); padding: 4px 7px; border-radius: 6px; }
|
|
114
|
+
.close {
|
|
115
|
+
position: absolute; top: 10px; right: 10px; width: 28px; height: 28px; border: 0; border-radius: 8px;
|
|
116
|
+
background: none; color: var(--mute); font: 400 18px/1 var(--sans);
|
|
117
|
+
}
|
|
118
|
+
.close:hover { background: rgba(var(--tint), 0.08); color: var(--text); }
|
|
119
|
+
.picks { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
|
|
120
|
+
.picks button { border: 1px solid var(--line-2); background: none; border-radius: 6px; padding: 3px 8px; font: 500 11.5px/1.3 var(--mono); color: var(--mute); }
|
|
121
|
+
.picks button[aria-current="true"] { border-color: var(--red); color: var(--text); background: rgba(251, 58, 14, 0.1); }
|
|
122
|
+
|
|
123
|
+
.sec { padding: 12px 16px; border-bottom: 1px solid var(--line); }
|
|
124
|
+
.sec:last-child { border-bottom: 0; }
|
|
125
|
+
.label { font: 500 12px/1 var(--sans); color: var(--mute); margin-bottom: 8px; }
|
|
126
|
+
.loc { display: flex; gap: 8px; align-items: center; font: 12px/1.4 var(--mono); color: var(--text); }
|
|
127
|
+
.loc > span:nth-child(2) { flex: 1; min-width: 0; overflow-wrap: anywhere; }
|
|
128
|
+
.loc button {
|
|
129
|
+
flex: none; border: 1px solid var(--line-2); background: none; border-radius: 6px; padding: 2px 7px;
|
|
130
|
+
font: 500 11px/1.3 var(--sans); color: var(--mute);
|
|
131
|
+
}
|
|
132
|
+
.loc button:hover { color: var(--text); background: rgba(var(--tint), 0.06); }
|
|
133
|
+
.loc + .loc { margin-top: 6px; }
|
|
134
|
+
.loc .what { color: var(--mute); flex: none; width: 66px; font-family: var(--sans); }
|
|
135
|
+
.warn { color: var(--accent); }
|
|
136
|
+
pre {
|
|
137
|
+
margin: 10px 0 0; padding: 8px 0; overflow: auto; background: var(--bg-3); color: var(--code);
|
|
138
|
+
border: 1px solid var(--line); border-radius: 8px; font: 11.5px/1.6 var(--mono); tab-size: 2;
|
|
139
|
+
scrollbar-width: thin; scrollbar-color: rgba(var(--tint), 0.2) transparent;
|
|
140
|
+
}
|
|
141
|
+
pre span { display: block; padding: 0 10px; white-space: pre; }
|
|
142
|
+
pre span.on { background: rgba(251, 58, 14, 0.14); color: var(--text); box-shadow: inset 2px 0 0 var(--red); }
|
|
143
|
+
pre i { font-style: normal; color: var(--code-num); margin-right: 12px; }
|
|
144
|
+
.row { font: 12px/1.5 var(--mono); color: var(--text); }
|
|
145
|
+
.row b { font-weight: 500; color: var(--mute); font-family: var(--sans); }
|
|
146
|
+
.chip {
|
|
147
|
+
display: inline-block; border-radius: 6px; padding: 2px 7px; margin: 0 4px 4px 0;
|
|
148
|
+
background: rgba(var(--tint), 0.08); font: 500 11.5px/1.4 var(--mono); color: var(--text);
|
|
149
|
+
}
|
|
150
|
+
.chip.red { background: rgba(251, 58, 14, 0.14); color: var(--accent); }
|
|
151
|
+
.kids { display: grid; gap: 2px; margin-bottom: 8px; }
|
|
152
|
+
.kids button {
|
|
153
|
+
text-align: left; border: 0; border-radius: 6px; background: none; padding: 4px 8px;
|
|
154
|
+
font: 12px/1.4 var(--mono); color: var(--text);
|
|
155
|
+
}
|
|
156
|
+
.kids button:hover { background: rgba(var(--tint), 0.06); }
|
|
157
|
+
.nav { display: flex; gap: 6px; }
|
|
158
|
+
.nav button {
|
|
159
|
+
border: 1px solid var(--line-2); background: none; border-radius: 6px; padding: 4px 10px;
|
|
160
|
+
font: 500 12px/1.2 var(--sans); color: var(--mute);
|
|
161
|
+
}
|
|
162
|
+
.nav button:hover { color: var(--text); background: rgba(var(--tint), 0.06); }
|
|
163
|
+
|
|
164
|
+
fieldset { border: 0; margin: 0 0 10px; padding: 0; display: grid; gap: 6px; }
|
|
165
|
+
fieldset label { display: flex; gap: 8px; align-items: center; font: 13px/1.3 var(--sans); color: var(--text); cursor: pointer; }
|
|
166
|
+
fieldset input { accent-color: var(--red); width: 14px; height: 14px; margin: 0; }
|
|
167
|
+
textarea {
|
|
168
|
+
width: 100%; min-height: 80px; resize: vertical; border: 1px solid var(--line-2); border-radius: 8px;
|
|
169
|
+
background: var(--bg-3); padding: 8px 10px; font: 13px/1.45 var(--sans); color: var(--text);
|
|
170
|
+
}
|
|
171
|
+
textarea:focus { border-color: var(--red); outline: none; box-shadow: 0 0 0 3px rgba(251, 58, 14, 0.2); }
|
|
172
|
+
textarea::placeholder { color: var(--faint); }
|
|
173
|
+
.actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 10px; }
|
|
174
|
+
.actions button {
|
|
175
|
+
border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 8px; padding: 8px;
|
|
176
|
+
font: 500 13px/1.2 var(--sans); color: var(--text); transition: background 120ms, border-color 120ms;
|
|
177
|
+
}
|
|
178
|
+
.actions button:hover { background: rgba(var(--tint), 0.1); }
|
|
179
|
+
.actions button.primary { grid-column: 1 / -1; background: var(--red); border-color: var(--red); color: #fff; padding: 9px 8px; }
|
|
180
|
+
.actions button.primary:hover { background: #ff5126; border-color: #ff5126; }
|
|
181
|
+
.status { margin-top: 10px; font: 12.5px/1.45 var(--sans); }
|
|
182
|
+
.status.ok { color: var(--ok); }
|
|
183
|
+
.status.err { color: var(--accent); }
|
|
184
|
+
.status code { font: 12px/1.4 var(--mono); color: var(--text); }
|
|
185
|
+
.empty { padding: 16px; font: 13px/1.5 var(--sans); color: var(--mute); }
|
|
186
|
+
.empty b { color: var(--text); font-weight: 600; }
|
|
187
|
+
.req {
|
|
188
|
+
display: grid; grid-template-columns: auto 1fr auto; gap: 2px 10px; padding: 10px 16px; border: 0;
|
|
189
|
+
border-bottom: 1px solid var(--line); align-items: baseline; width: 100%; text-align: left; background: none;
|
|
190
|
+
}
|
|
191
|
+
.req:hover { background: rgba(var(--tint), 0.04); }
|
|
192
|
+
.req .open-req { border: 0; background: none; padding: 0; text-align: left; cursor: pointer; }
|
|
193
|
+
.req .open-req:hover { text-decoration: underline; text-underline-offset: 2px; }
|
|
194
|
+
.req .done { font-size: 12px; }
|
|
195
|
+
.req .done:hover { color: var(--ok); }
|
|
196
|
+
.req .n { font: 11.5px/1 var(--mono); color: var(--mute); }
|
|
197
|
+
.req .t { font: 500 13px/1.35 var(--sans); color: var(--text); }
|
|
198
|
+
.req .s { font: 500 11px/1 var(--sans); border-radius: 999px; padding: 3px 8px; }
|
|
199
|
+
.req .s.open { background: rgba(251, 58, 14, 0.14); color: var(--accent); }
|
|
200
|
+
.req .s.done { background: rgba(47, 163, 107, 0.16); color: var(--ok); }
|
|
201
|
+
.req .l { grid-column: 2 / -1; font: 11.5px/1.4 var(--mono); color: var(--mute); word-break: break-all; }
|
|
202
|
+
.tip { padding: 12px 16px; background: var(--bg-2); color: var(--mute); font: 12.5px/1.5 var(--sans); }
|
|
203
|
+
.tip q { color: var(--text); font-weight: 500; }
|
|
204
|
+
|
|
205
|
+
.quote { font-weight: 400; color: var(--mute); font-size: 14px; }
|
|
206
|
+
.plain { font: 13px/1.5 var(--sans); color: var(--text); padding: 2px 0; }
|
|
207
|
+
.plain + .plain { border-top: 1px solid var(--line); padding-top: 6px; margin-top: 4px; }
|
|
208
|
+
.file { margin-top: 10px; font: 11.5px/1.4 var(--mono); color: var(--mute); display: flex; gap: 8px; align-items: center; }
|
|
209
|
+
button.link { border: 0; background: none; padding: 0; color: var(--mute); font: 500 12px/1.3 var(--sans); text-decoration: underline; text-underline-offset: 2px; }
|
|
210
|
+
button.link:hover { color: var(--text); }
|
|
211
|
+
.row-end { display: flex; justify-content: flex-end; margin-top: 6px; }
|
|
212
|
+
textarea.draft { margin-top: 8px; min-height: 200px; font: 11.5px/1.5 var(--mono); }
|
|
213
|
+
textarea[hidden], .draft[hidden] { display: none; }
|
|
214
|
+
legend { font: 500 13px/1.3 var(--sans); color: var(--text); padding: 0; margin-bottom: 6px; }
|
|
215
|
+
.meta { font: 11px/1.4 var(--mono); color: var(--faint); word-break: break-all; }
|
|
216
|
+
.back { border: 0; background: none; padding: 0 0 6px; color: var(--mute); font: 500 12px/1 var(--sans); }
|
|
217
|
+
.back:hover { color: var(--text); }
|
|
218
|
+
pre.md { margin: 0; padding: 10px 12px; white-space: pre-wrap; word-break: break-word; max-height: 46vh; color: var(--code); }
|
|
219
|
+
.finish { display: flex; gap: 8px; margin-top: 10px; }
|
|
220
|
+
.finish button { border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 8px; padding: 0 12px; font: 500 13px/1 var(--sans); color: var(--text); }
|
|
221
|
+
.finish button:hover { background: rgba(47, 163, 107, 0.2); border-color: rgba(47, 163, 107, 0.5); }
|
|
222
|
+
input.outcome { flex: 1; min-width: 0; height: 34px; border: 1px solid var(--line-2); border-radius: 8px; background: var(--bg-3); color: var(--text); padding: 0 10px; font: 13px/1 var(--sans); }
|
|
223
|
+
input.outcome:focus { border-color: var(--red); outline: none; box-shadow: 0 0 0 3px rgba(251, 58, 14, 0.2); }
|
|
224
|
+
.actions button.danger:hover { background: rgba(251, 58, 14, 0.16); border-color: rgba(251, 58, 14, 0.5); color: var(--accent); }
|
|
225
|
+
.option { display: flex; gap: 10px; align-items: flex-start; padding: 6px 0; cursor: pointer; }
|
|
226
|
+
.option input { margin-top: 3px; accent-color: var(--red); }
|
|
227
|
+
.option > span { display: grid; gap: 2px; }
|
|
228
|
+
.option b { font: 500 13px/1.3 var(--sans); color: var(--text); }
|
|
229
|
+
.option > span > span { font: 12px/1.4 var(--sans); color: var(--mute); }
|
|
230
|
+
.keyrow { display: flex; gap: 10px; align-items: center; font: 12.5px/1.8 var(--sans); color: var(--mute); }
|
|
231
|
+
kbd { font: 500 11px/1 var(--mono); color: var(--text); background: rgba(var(--tint), 0.08); border: 1px solid var(--line-2); border-radius: 5px; padding: 3px 6px; min-width: 92px; text-align: center; }
|
|
232
|
+
.dock button.gear { font-size: 14px; padding: 5px 9px; }
|
|
233
|
+
|
|
234
|
+
.look { display: flex; align-items: center; gap: 8px; min-height: 32px; }
|
|
235
|
+
.look + .look { margin-top: 4px; }
|
|
236
|
+
.look .what { flex: none; width: 128px; color: var(--mute); font: 12.5px/1.3 var(--sans); }
|
|
237
|
+
.look select {
|
|
238
|
+
flex: 1; min-width: 0; height: 28px; border: 1px solid var(--line-2); border-radius: 6px; background: var(--bg-3);
|
|
239
|
+
color: var(--text); font: 12px/1 var(--mono); padding: 0 6px;
|
|
240
|
+
}
|
|
241
|
+
.look select:focus { border-color: var(--red); outline: none; }
|
|
242
|
+
.look .pick { flex: 1; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
|
|
243
|
+
.look input[type="color"] { width: 28px; height: 28px; padding: 0; border: 1px solid var(--line-2); border-radius: 6px; background: none; cursor: pointer; }
|
|
244
|
+
.look code { font: 11.5px/1 var(--mono); color: var(--mute); }
|
|
245
|
+
.swatch { width: 18px; height: 18px; border-radius: 999px; border: 1px solid var(--line-2); padding: 0; }
|
|
246
|
+
.swatch:hover { transform: scale(1.12); }
|
|
247
|
+
.chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
|
|
248
|
+
.chip-button { border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 999px; padding: 3px 10px; font: 500 12px/1.3 var(--sans); color: var(--text); }
|
|
249
|
+
.chip-button:hover { background: rgba(var(--tint), 0.1); }
|
|
250
|
+
.hint-text { flex: 1; font: 12px/1.4 var(--sans); color: var(--faint); }
|
|
251
|
+
|
|
252
|
+
.find { margin-top: 10px; }
|
|
253
|
+
.jump {
|
|
254
|
+
margin-top: 8px; border: 1px solid var(--line-2); background: rgba(251, 58, 14, 0.12); color: var(--accent);
|
|
255
|
+
border-radius: 999px; padding: 4px 10px; font: 500 12px/1.2 var(--sans);
|
|
256
|
+
}
|
|
257
|
+
.jump:hover { background: rgba(251, 58, 14, 0.2); }
|
|
258
|
+
.find input { width: 100%; }
|
|
259
|
+
.layers { padding: 6px 8px 10px; border-bottom: 1px solid var(--line); }
|
|
260
|
+
.layer { display: flex; align-items: center; min-height: 26px; }
|
|
261
|
+
.layer .indent { flex: none; }
|
|
262
|
+
.layer .fold { flex: none; width: 18px; height: 22px; border: 0; background: none; color: var(--mute); padding: 0; font: 11px/1 var(--sans); }
|
|
263
|
+
.layer .name {
|
|
264
|
+
flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px; text-align: left; border: 0; border-radius: 6px;
|
|
265
|
+
background: none; padding: 3px 6px; font: 12.5px/1.35 var(--mono); color: var(--text); overflow: hidden; white-space: nowrap;
|
|
266
|
+
}
|
|
267
|
+
.layer .name:hover:not(:disabled) { background: rgba(var(--tint), 0.07); }
|
|
268
|
+
.layer .name:disabled { cursor: default; }
|
|
269
|
+
.layer.off .name { color: var(--faint); }
|
|
270
|
+
.layer.group .name { color: var(--mute); font-family: var(--sans); font-size: 12px; }
|
|
271
|
+
.badge-ref { font: 11px/1 var(--mono); color: var(--accent); }
|
|
272
|
+
.badge-off { font: 11px/1 var(--sans); color: var(--faint); }
|
|
273
|
+
.state { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 0; font: 13px/1.35 var(--sans); }
|
|
274
|
+
.state > span { flex: 1; min-width: 0; overflow-wrap: anywhere; }
|
|
275
|
+
.state > button { flex: none; white-space: nowrap; }
|
|
276
|
+
.state + .state { border-top: 1px solid var(--line); }
|
|
277
|
+
.state.on span { color: var(--accent); }
|
|
278
|
+
.dock .previewing {
|
|
279
|
+
border: 0; border-radius: 999px; background: var(--red); color: #fff; padding: 5px 12px; margin-left: 4px;
|
|
280
|
+
font: 500 12.5px/1.2 var(--sans); white-space: nowrap;
|
|
281
|
+
}
|
|
282
|
+
.dock .previewing:hover { background: #ff5126; }
|
|
283
|
+
|
|
284
|
+
.tabs { display: flex; gap: 4px; margin-top: 10px; }
|
|
285
|
+
.tab { border: 1px solid var(--line-2); background: none; border-radius: 999px; padding: 4px 10px; font: 500 12px/1.2 var(--sans); color: var(--mute); }
|
|
286
|
+
.tab[aria-pressed="true"] { background: rgba(var(--tint), 0.12); color: var(--text); border-color: transparent; }
|
|
287
|
+
.item { display: grid; grid-template-columns: auto 1fr auto auto; gap: 10px; align-items: baseline; padding: 8px 0; }
|
|
288
|
+
.item + .item { border-top: 1px solid var(--line); }
|
|
289
|
+
.item .n { font: 11.5px/1 var(--mono); color: var(--mute); }
|
|
290
|
+
.item .what { display: grid; gap: 2px; min-width: 0; }
|
|
291
|
+
.item .what b { font: 500 13px/1.3 var(--sans); color: var(--text); }
|
|
292
|
+
.item .what span { font: 12.5px/1.4 var(--sans); color: var(--mute); overflow-wrap: anywhere; }
|
|
293
|
+
.notice { margin: 12px 16px 0; padding: 10px 12px; border-radius: 8px; background: rgba(47, 163, 107, 0.14); color: var(--ok); font: 12.5px/1.45 var(--sans); }
|
|
294
|
+
.notice code { font: 12px/1.4 var(--mono); color: var(--text); }
|
|
295
|
+
.more { margin-top: 8px; color: var(--mute); font-size: 12.5px; }
|
|
296
|
+
.export { margin-top: 4px; }
|
|
297
|
+
.choice { display: grid; gap: 4px; }
|
|
298
|
+
.choice button { border: 1px solid var(--line-2); background: rgba(var(--tint), 0.04); border-radius: 8px; padding: 9px 8px; font: 500 13px/1.2 var(--sans); color: var(--text); }
|
|
299
|
+
.choice button:hover { background: rgba(var(--tint), 0.1); }
|
|
300
|
+
.choice button.primary { background: var(--red); border-color: var(--red); color: #fff; }
|
|
301
|
+
.choice button.primary:hover { background: #ff5126; }
|
|
302
|
+
.choice .why { font: 12px/1.4 var(--sans); color: var(--mute); margin-bottom: 8px; }
|
|
303
|
+
|
|
304
|
+
@media (max-width: 720px) { .dock .hint { display: none; } }
|
|
305
|
+
@media (max-width: 420px) {
|
|
306
|
+
.dock button.mode, .dock button.act { padding: 5px 8px; }
|
|
307
|
+
.panel { top: 8px; right: 8px; width: calc(100vw - 16px); max-height: calc(100vh - 80px); }
|
|
308
|
+
}
|
|
309
|
+
@media (prefers-reduced-motion: reduce) { .actions button { transition: none; } }
|
|
310
|
+
`;
|
|
311
|
+
export const outlineCss = `
|
|
312
|
+
:host { all: initial; }
|
|
313
|
+
.frame {
|
|
314
|
+
position: fixed; box-sizing: border-box; pointer-events: none; border: 1.5px solid #fb3a0e; border-radius: 3px;
|
|
315
|
+
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85);
|
|
316
|
+
}
|
|
317
|
+
.frame.selected { border-width: 2px; background: rgba(251, 58, 14, 0.06); }
|
|
318
|
+
.frame[hidden], .box[hidden] { display: none; }
|
|
319
|
+
.box { position: fixed; box-sizing: border-box; pointer-events: none; }
|
|
320
|
+
.tag {
|
|
321
|
+
position: absolute; left: -1px; bottom: 100%; margin-bottom: 6px; white-space: nowrap;
|
|
322
|
+
background: #111010; color: #ece8df; font: 500 11.5px/1 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
323
|
+
padding: 6px 8px; border-radius: 6px; border: 1px solid rgba(241, 237, 228, 0.16);
|
|
324
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
|
|
325
|
+
}
|
|
326
|
+
.tag b { color: #fb3a0e; font-weight: 600; }
|
|
327
|
+
.box.below .tag { bottom: auto; top: 100%; margin: 6px 0 0; }
|
|
328
|
+
.badge {
|
|
329
|
+
position: absolute; right: 0; top: 0; transform: translate(50%, -50%);
|
|
330
|
+
min-width: 18px; height: 18px; display: grid; place-items: center; padding: 0 5px; border-radius: 999px;
|
|
331
|
+
background: #fb3a0e; color: #fff; font: 600 11px/1 system-ui, -apple-system, sans-serif;
|
|
332
|
+
}
|
|
333
|
+
`;
|
|
334
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/overlay/style.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqTlB,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBzB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface TextChange {
|
|
2
|
+
from: string;
|
|
3
|
+
to: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function firstText(el: Element | null): string | null;
|
|
6
|
+
export declare function previewText(el: Element | null, change: TextChange | undefined): void;
|
|
7
|
+
export declare function restoreText(el: Element | null, change: TextChange | undefined): void;
|
|
8
|
+
export declare function textSection(from: string, change: TextChange | undefined, plain: boolean, onChange: (change: TextChange | undefined) => void): HTMLElement;
|
|
9
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/overlay/text.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AASD,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAE3D;AAYD,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,QAE7E;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,QAE7E;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI,GACjD,WAAW,CAsBb"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { h } from './dom.js';
|
|
2
|
+
const ZH = '這是一段比較長的中文測試文字,用來檢查換行、截斷與對齊';
|
|
3
|
+
const EN = 'A much longer English label to check how the layout wraps and truncates';
|
|
4
|
+
function textNodes(el) {
|
|
5
|
+
return [...el.childNodes].filter((n) => n.nodeType === 3 && !!n.textContent?.trim());
|
|
6
|
+
}
|
|
7
|
+
export function firstText(el) {
|
|
8
|
+
return el ? (textNodes(el)[0]?.data.trim() ?? null) : null;
|
|
9
|
+
}
|
|
10
|
+
function put(el, find, value) {
|
|
11
|
+
if (!el)
|
|
12
|
+
return;
|
|
13
|
+
const nodes = textNodes(el);
|
|
14
|
+
const node = nodes.find((n) => find.includes(n.data.trim())) ?? (nodes.length === 1 ? nodes[0] : undefined);
|
|
15
|
+
if (!node)
|
|
16
|
+
return;
|
|
17
|
+
const lead = /^\s*/.exec(node.data)?.[0] ?? '';
|
|
18
|
+
const tail = /\s*$/.exec(node.data)?.[0] ?? '';
|
|
19
|
+
node.data = `${lead}${value}${tail}`;
|
|
20
|
+
}
|
|
21
|
+
export function previewText(el, change) {
|
|
22
|
+
if (change)
|
|
23
|
+
put(el, [change.from, change.to], change.to);
|
|
24
|
+
}
|
|
25
|
+
export function restoreText(el, change) {
|
|
26
|
+
if (change)
|
|
27
|
+
put(el, [change.to, change.from], change.from);
|
|
28
|
+
}
|
|
29
|
+
export function textSection(from, change, plain, onChange) {
|
|
30
|
+
const set = (to) => onChange(to === from ? undefined : { from, to });
|
|
31
|
+
const input = h('input', {
|
|
32
|
+
type: 'text',
|
|
33
|
+
class: 'outcome',
|
|
34
|
+
'aria-label': 'Text on the page',
|
|
35
|
+
onchange: (e) => set(e.target.value),
|
|
36
|
+
});
|
|
37
|
+
input.value = change?.to ?? from;
|
|
38
|
+
const chip = (label, to) => h('button', { class: 'chip-button', type: 'button', onclick: () => set(to) }, [label]);
|
|
39
|
+
return h('div', { class: 'sec' }, [
|
|
40
|
+
h('div', { class: 'label' }, [plain ? 'Text' : 'Text (preview)']),
|
|
41
|
+
input,
|
|
42
|
+
h('div', { class: 'chips' }, [
|
|
43
|
+
chip('Longer', Array.from({ length: 4 }, () => from).join(' ')),
|
|
44
|
+
chip('中文', ZH),
|
|
45
|
+
chip('English', EN),
|
|
46
|
+
change ? chip('Reset', from) : null,
|
|
47
|
+
]),
|
|
48
|
+
h('div', { class: 'hint-text' }, ['Try other words to see how the layout copes. Kept in the request.']),
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/overlay/text.ts"],"names":[],"mappings":"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"}
|
package/dist/plain.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DevNode } from '@hozu/core/ir';
|
|
2
|
+
import type { Scope } from './prompt.ts';
|
|
3
|
+
export declare function tagName(tag: string): string;
|
|
4
|
+
export declare function friendlyName(node: DevNode): string;
|
|
5
|
+
export declare function describeFor(node: DevNode): string[];
|
|
6
|
+
export declare function questionFor(node: DevNode): {
|
|
7
|
+
question: string;
|
|
8
|
+
options: Partial<Record<Scope, string>>;
|
|
9
|
+
} | null;
|
|
10
|
+
//# sourceMappingURL=plain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain.d.ts","sourceRoot":"","sources":["../src/plain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AA2BxC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQlD;AAgBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAuBnD;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,GACZ;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GAAG,IAAI,CAiBtE"}
|
package/dist/plain.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
const tags = {
|
|
2
|
+
a: 'Link',
|
|
3
|
+
button: 'Button',
|
|
4
|
+
form: 'Form',
|
|
5
|
+
img: 'Image',
|
|
6
|
+
input: 'Input',
|
|
7
|
+
textarea: 'Text box',
|
|
8
|
+
select: 'Dropdown',
|
|
9
|
+
label: 'Label',
|
|
10
|
+
p: 'Paragraph',
|
|
11
|
+
ul: 'List',
|
|
12
|
+
ol: 'List',
|
|
13
|
+
li: 'List item',
|
|
14
|
+
nav: 'Menu',
|
|
15
|
+
table: 'Table',
|
|
16
|
+
span: 'Text',
|
|
17
|
+
strong: 'Text',
|
|
18
|
+
em: 'Text',
|
|
19
|
+
};
|
|
20
|
+
const words = (name) => {
|
|
21
|
+
const spaced = name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase();
|
|
22
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
23
|
+
};
|
|
24
|
+
export function tagName(tag) {
|
|
25
|
+
if (/^h[1-6]$/.test(tag))
|
|
26
|
+
return 'Heading';
|
|
27
|
+
return tags[tag] ?? 'Area';
|
|
28
|
+
}
|
|
29
|
+
export function friendlyName(node) {
|
|
30
|
+
if (node.page)
|
|
31
|
+
return 'This page';
|
|
32
|
+
if (node.kind === 'text')
|
|
33
|
+
return node.source?.kind === 'data' ? 'Text from your data' : 'Text';
|
|
34
|
+
if (node.component)
|
|
35
|
+
return node.component.ref.split('.').pop() ?? 'Component';
|
|
36
|
+
if (node.tag && /^h[1-6]$/.test(node.tag))
|
|
37
|
+
return 'Heading';
|
|
38
|
+
if (node.tag && tags[node.tag])
|
|
39
|
+
return tags[node.tag];
|
|
40
|
+
if (node.kind === 'list')
|
|
41
|
+
return 'List';
|
|
42
|
+
return 'Area';
|
|
43
|
+
}
|
|
44
|
+
function shown(c) {
|
|
45
|
+
if (c.kind === 'when') {
|
|
46
|
+
const states = c.detail.replace(/^state in /, '').split(' | ');
|
|
47
|
+
return `Shown only while ${states.map((s) => words(s).toLowerCase()).join(' or ')}.`;
|
|
48
|
+
}
|
|
49
|
+
if (c.kind === 'if')
|
|
50
|
+
return 'Shown only when a condition holds.';
|
|
51
|
+
if (c.kind === 'query') {
|
|
52
|
+
if (c.detail.endsWith(' ready'))
|
|
53
|
+
return 'Shown once its data has loaded.';
|
|
54
|
+
if (c.detail.endsWith(' pending'))
|
|
55
|
+
return 'Shown while its data is loading.';
|
|
56
|
+
return `Shown when loading its data fails (${c.detail.split('failed.').pop()}).`;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
export function describeFor(node) {
|
|
61
|
+
const out = [];
|
|
62
|
+
const c = node.component;
|
|
63
|
+
if (c && c.uses > 1)
|
|
64
|
+
out.push(`A shared ${friendlyName(node)}: the same design is used in ${c.uses} places.`);
|
|
65
|
+
const sources = node.source ? [node.source] : node.children.flatMap((x) => (x.source ? [x.source] : []));
|
|
66
|
+
for (const s of sources) {
|
|
67
|
+
if (s.kind === 'message' && (s.uses ?? 1) > 1)
|
|
68
|
+
out.push(`Its text is shared with ${s.uses - 1} other ${s.uses - 1 === 1 ? 'place' : 'places'}.`);
|
|
69
|
+
if (s.kind === 'data')
|
|
70
|
+
out.push('Its text comes from your data, not from the page design.');
|
|
71
|
+
}
|
|
72
|
+
if (node.conditions.some((x) => x.kind === 'each'))
|
|
73
|
+
out.push('One item of a list: changes apply to every item unless you say which.');
|
|
74
|
+
for (const x of node.conditions) {
|
|
75
|
+
const line = shown(x);
|
|
76
|
+
if (line)
|
|
77
|
+
out.push(line);
|
|
78
|
+
}
|
|
79
|
+
for (const e of node.events)
|
|
80
|
+
out.push(`When ${e.dom === 'submit' ? 'submitted' : `${e.dom}ed`}, it does “${words(e.event.split('.').pop() ?? e.event)}”.`);
|
|
81
|
+
if (node.page)
|
|
82
|
+
out.push('Its title and description are what search engines and shared links show.');
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
export function questionFor(node) {
|
|
86
|
+
const c = node.component;
|
|
87
|
+
const name = friendlyName(node);
|
|
88
|
+
const every = c ? { component: `Every ${name} (${c.uses} places)` } : {};
|
|
89
|
+
if (node.conditions.some((x) => x.kind === 'each'))
|
|
90
|
+
return {
|
|
91
|
+
question: c
|
|
92
|
+
? `Change every item, only this one, or every ${name}?`
|
|
93
|
+
: 'Change every item in the list, or only this one?',
|
|
94
|
+
options: { items: 'Every item', this: 'Only this one', ...every },
|
|
95
|
+
};
|
|
96
|
+
if (c)
|
|
97
|
+
return {
|
|
98
|
+
question: `Change only this one, or every ${name} like it?`,
|
|
99
|
+
options: { this: 'Only this one', ...every },
|
|
100
|
+
};
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=plain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain.js","sourceRoot":"","sources":["../src/plain.ts"],"names":[],"mappings":"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"}
|