diff --git a/src/app.css b/src/app.css index b62b068..cd2bd6a 100644 --- a/src/app.css +++ b/src/app.css @@ -340,6 +340,23 @@ pre.c{margin:0;padding:6px 18px 16px;font:calc(var(--fs) * .84)/1.7 var(--f-mono .kghost .kmore,.kghost .kh-btn{display:none} body.board-dragging,body.board-dragging *{cursor:grabbing!important;user-select:none!important} .pop.kmenu{width:220px;transform-origin:top left;z-index:75} +/* new page / templates */ +.panel.tpl-panel{width:min(700px,100%);max-height:calc(100vh - 12vh - 32px);display:flex;flex-direction:column} +.tpl-lead{margin:0;padding:12px 18px 0;color:var(--ink-3);font-size:13px} +.tpl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));gap:10px;padding:12px 18px 18px;overflow:auto} +.tpl-card{display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-height:132px;padding:14px;border-radius:10px;text-align:left;background:var(--island-2);box-shadow:0 0 0 1px var(--line);transition:box-shadow .15s,background .15s,transform .2s var(--spring)} +.tpl-card:hover{background:var(--hover);box-shadow:0 0 0 1px var(--line-2)} +.tpl-card:focus-visible{outline:none;background:var(--blush-soft);box-shadow:0 0 0 1.5px var(--blush-line);transform:translateY(-1px)} +.tpl-card:active{transform:scale(.98)} +.tpl-ico{width:32px;height:32px;margin-bottom:2px;display:grid;place-items:center;border-radius:8px;background:var(--hover);color:var(--blush)} +.tpl-ico .i{width:17px;height:17px} +.tpl-ico .i.emo{font-size:18px} +.tpl-card.blank .tpl-ico{background:var(--blush-soft)} +.tpl-name{font-weight:600;font-size:14px;color:var(--ink)} +.tpl-prev{color:var(--ink-3);font-size:12.5px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word} +.tpl-foot{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 14px 10px 18px;border-top:1px solid var(--line);color:var(--ink-3);font-size:12px;line-height:1.5} +.tpl-foot code{font:11.5px var(--f-mono);color:var(--ink-2)} +.tpl-foot .btn{height:30px;padding:0 12px;flex:none} /* right-click menu for text */ .pop.tmenu{width:248px;transform-origin:top left;z-index:78;-webkit-app-region:no-drag} .tmenu .mi{height:32px} @@ -758,3 +775,14 @@ body.page-dragging,body.page-dragging *{cursor:grabbing!important;user-select:no .prop .chip-x { opacity: 0; pointer-events: none; } .prop:hover .chip-x { opacity: 0.6; pointer-events: auto; } .prop:hover .chip-x:hover { opacity: 1; } + +.si b { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.si small { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/src/lib/editor.js b/src/lib/editor.js index b6ed9bc..75d7216 100644 --- a/src/lib/editor.js +++ b/src/lib/editor.js @@ -401,7 +401,11 @@ export function createEditor(host, { blocks: initial, animate = true, onChange = const label = k.label.toLowerCase(); if (!ql || label.startsWith(ql)) return 0; if (label.split(/\s+/).some((w) => w.startsWith(ql))) return 1; - return (label + ' ' + k.k).toLowerCase().includes(ql) ? 2 : -1; + + const keywords = (label + ' ' + k.k).toLowerCase().split(/\s+/); + if (keywords.some((w) => w.includes(ql))) return 2; + + return -1; }; const items = KINDS.map((k, i) => ({ k, i, s: score(k) })).filter((x) => x.s >= 0).sort((a, z) => a.s - z.s || a.i - z.i).map((x) => x.k); if (!items.length) return closeSlash();