Main logic

This commit is contained in:
Микаэл Оганесян
2026-04-08 02:10:17 +03:00
parent 55742c1bbc
commit 68c3029835
58 changed files with 4807 additions and 418 deletions

398
public/KB_USA-standard.svg Normal file
View File

@@ -0,0 +1,398 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- Reorganised with TEXT EDITOR (gedit under Ubuntu).
This file is the general file for the USA alphanumerical keyboard :
- it uses style sheet (css) [see details at section "style"]
- it displays the standard pad
- and optionnaly
* for some keys : the draw and/or the text (↹ and/or TAB …)
- keys and inscriptions are geographically referenced : "kb" + line(number) + range(letter) -->
<svg id="svg2"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.48.0 r9654"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
sodipodi:docname="KB_USA 800px.svg" width="800" height="247" viewBox="0 0 801 248" style="display:inline">
<metadata
id="metadata316">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:description>Meta (⌘) and Menu: Lucide icons (https://lucide.dev), ISC License, © Lucide Contributors.</dc:description>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview id="base"
inkscape:window-width="1679"
inkscape:window-height="1019"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="0.6"
inkscape:cx="400"
inkscape:cy="123.5"
inkscape:current-layer="layer3"
inkscape:window-x="0"
inkscape:window-y="0"
showgrid="true"
inkscape:window-maximized="1"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-nodes="true"
inkscape:snap-grids="true"
inkscape:bbox-paths="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
units="px"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:snap-bbox-midpoints="false"
inkscape:snap-global="true"
inkscape:snap-page="true"
inkscape:snap-smooth-nodes="true">
</sodipodi:namedview>
<defs id="defs4">
<style id="style6" type="text/css">
<!-- General : «#» style for «id» ; «.» class style (for particular style in group)
DRAW styles : K_ : particular key style
TEXT styles : «text» : common style for all text | T_ : text style | _L : large ; _s : very small -->
<![CDATA[
text {
writing-mode: lr-tb;
font-weight: var(--sg-keyboard-font-weight);
font-family: var(--sg-keyboard-font-family);
letter-spacing: var(--sg-keyboard-letter-spacing);
}
#T_others text {
font-size: 15px;
font-weight: var(--sg-keyboard-font-weight);
text-align: start;
text-anchor: start;
fill: var(--sg-keyboard-ink);
}
#T_alterninsc text {
font-size: 13px;
font-weight: var(--sg-keyboard-font-weight);
letter-spacing: 0.04em;
fill: var(--sg-keyboard-ink-soft);
stroke: none;
}
#T_alterninsc text.T_alt-left {
text-align: start;
text-anchor: start;
}
#T_alterninsc text.T_alt-right {
text-align: end;
text-anchor: end;
}
#T_stdletters text {
font-size: 20px;
font-weight: var(--sg-keyboard-font-weight);
letter-spacing: 0.04em;
fill: var(--sg-keyboard-ink);
stroke: none;
text-align: center;
text-anchor: middle;
}
#T_stdspecial text {
font-size: 17px;
font-weight: var(--sg-keyboard-font-weight);
letter-spacing: 0.03em;
fill: var(--sg-keyboard-ink);
stroke: none;
text-align: center;
text-anchor: middle;
}
.T_size_s {
font-size: 11px;
font-weight: var(--sg-keyboard-font-weight);
letter-spacing: 0.02em;
fill: var(--sg-keyboard-ink);
stroke: none;
text-align: start;
text-anchor: start;
}
.T_size_L {
font-size: 20px;
font-weight: var(--sg-keyboard-font-weight);
letter-spacing: 0.03em;
}
#GlyphKey rect,
#GlyphKey use {
fill: var(--sg-keyboard-key-main);
stroke: var(--sg-keyboard-key-stroke);
stroke-width: 0.85;
}
#ModifKey rect {
fill: var(--sg-keyboard-key-mod);
stroke: var(--sg-keyboard-key-stroke);
stroke-width: 0.85;
}
#OtherKey rect {
fill: var(--sg-keyboard-key-other);
stroke: var(--sg-keyboard-key-stroke);
stroke-width: 0.85;
}
/* Встроенные значки Lucide (обводка); Meta — иконка command (⌘) */
.sg-lucide path,
.sg-lucide line,
.sg-lucide polyline,
.sg-lucide rect {
fill: none;
stroke: var(--sg-keyboard-ink);
stroke-width: 1.55;
stroke-linecap: round;
stroke-linejoin: round;
}
#S_kb6b.sg-lucide path {
stroke: var(--sg-keyboard-ink-soft) !important;
}
#S_kb6m.sg-lucide line {
stroke: var(--sg-keyboard-ink) !important;
}
]]>
</style>
</defs>
<!-- ======== Keys ======== -->
<g inkscape:groupmode="layer" id="layer2" inkscape:label="Keys" style="display:inline" sodipodi:insensitive="true">
<g id="GlyphKey">
<!-- Num keys - Standard letters keys - Specials glyphs keys - Ponctuation keys -->
<rect id="K_kb2a" x="2" y="2" width="48" height="44" rx="6" ry="6" />
<use id="K_kb2b" xlink:href="#K_kb2a" transform="translate(54,0)"/>
<use id="K_kb2c" xlink:href="#K_kb2a" transform="translate(108,0)"/>
<use id="K_kb2d" xlink:href="#K_kb2a" transform="translate(162,0)"/>
<use id="K_kb2e" xlink:href="#K_kb2a" transform="translate(216,0)"/>
<use id="K_kb2f" xlink:href="#K_kb2a" transform="translate(270,0)"/>
<use id="K_kb2g" xlink:href="#K_kb2a" transform="translate(324,0)"/>
<use id="K_kb2h" xlink:href="#K_kb2a" transform="translate(378,0)"/>
<use id="K_kb2i" xlink:href="#K_kb2a" transform="translate(432,0)"/>
<use id="K_kb2j" xlink:href="#K_kb2a" transform="translate(486,0)"/>
<use id="K_kb2k" xlink:href="#K_kb2a" transform="translate(540,0)"/>
<use id="K_kb2l" xlink:href="#K_kb2a" transform="translate(594,0)"/>
<use id="K_kb2m" xlink:href="#K_kb2a" transform="translate(648,0)"/>
<use id="K_kb3b" xlink:href="#K_kb2a" transform="translate(80,50)"/>
<use id="K_kb3c" xlink:href="#K_kb2a" transform="translate(134,50)"/>
<use id="K_kb3d" xlink:href="#K_kb2a" transform="translate(188,50)"/>
<use id="K_kb3e" xlink:href="#K_kb2a" transform="translate(242,50)"/>
<use id="K_kb3f" xlink:href="#K_kb2a" transform="translate(296,50)"/>
<use id="K_kb3g" xlink:href="#K_kb2a" transform="translate(350,50)"/>
<use id="K_kb3h" xlink:href="#K_kb2a" transform="translate(404,50)"/>
<use id="K_kb3i" xlink:href="#K_kb2a" transform="translate(458,50)"/>
<use id="K_kb3j" xlink:href="#K_kb2a" transform="translate(512,50)"/>
<use id="K_kb3k" xlink:href="#K_kb2a" transform="translate(566,50)"/>
<use id="K_kb3l" xlink:href="#K_kb2a" transform="translate(620,50)"/>
<use id="K_kb3m" xlink:href="#K_kb2a" transform="translate(674,50)"/>
<rect id="K_kb3n" x="730" y="52" width="70" height="44" rx="6" ry="6" />
<use id="K_kb4b" xlink:href="#K_kb2a" transform="translate(96,100)"/>
<use id="K_kb4c" xlink:href="#K_kb2a" transform="translate(150,100)"/>
<use id="K_kb4d" xlink:href="#K_kb2a" transform="translate(204,100)"/>
<use id="K_kb4e" xlink:href="#K_kb2a" transform="translate(258,100)"/>
<use id="K_kb4f" xlink:href="#K_kb2a" transform="translate(312,100)"/>
<use id="K_kb4g" xlink:href="#K_kb2a" transform="translate(366,100)"/>
<use id="K_kb4h" xlink:href="#K_kb2a" transform="translate(420,100)"/>
<use id="K_kb4i" xlink:href="#K_kb2a" transform="translate(474,100)"/>
<use id="K_kb4j" xlink:href="#K_kb2a" transform="translate(528,100)"/>
<use id="K_kb4k" xlink:href="#K_kb2a" transform="translate(582,100)"/>
<use id="K_kb4l" xlink:href="#K_kb2a" transform="translate(636,100)"/>
<use id="K_kb4m" xlink:href="#K_kb2a" transform="translate(690,100)"/>
<use id="K_kb5c" xlink:href="#K_kb2a" transform="translate(116,150)"/>
<use id="K_kb5d" xlink:href="#K_kb2a" transform="translate(170,150)"/>
<use id="K_kb5e" xlink:href="#K_kb2a" transform="translate(224,150)"/>
<use id="K_kb5f" xlink:href="#K_kb2a" transform="translate(278,150)"/>
<use id="K_kb5g" xlink:href="#K_kb2a" transform="translate(332,150)"/>
<use id="K_kb5h" xlink:href="#K_kb2a" transform="translate(386,150)"/>
<use id="K_kb5i" xlink:href="#K_kb2a" transform="translate(440,150)"/>
<use id="K_kb5j" xlink:href="#K_kb2a" transform="translate(494,150)"/>
<use id="K_kb5k" xlink:href="#K_kb2a" transform="translate(548,150)"/>
<use id="K_kb5l" xlink:href="#K_kb2a" transform="translate(602,150)"/>
<rect id="K_kb6d" x="188" y="202" width="364" height="44" rx="6" ry="6" />
</g>
<!-- Modification keys -->
<g id="ModifKey">
<rect id="K_kb4a" x="2" y="102" width="90" height="44" rx="6" ry="6" />
<rect id="K_kb5a" x="2" y="152" width="110" height="44" rx="6" ry="6" />
<rect id="K_kb5m" x="658" y="152" width="142" height="44" rx="6" ry="6" />
</g>
<!-- Other keys -->
<g id="OtherKey">
<!-- Backspace --> <rect id="K_kb2n" x="704" y="2" width="96" height="44" rx="6" ry="6" />
<!-- Tabulation --> <rect id="K_kb3a" x="2" y="52" width="74" height="44" rx="6" ry="6" />
<!-- Enter key -->
<rect id="K_kb4n" x="692" y="102" width="107" height="44" rx="6" ry="6" />
<!-- Ctrl 1 --> <rect id="K_kb6a" x="2" y="202" width="56" height="44" rx="6" ry="6" />
<!-- Win 1 --> <rect id="K_kb6b" x="64" y="202" width="56" height="44" rx="6" ry="6" />
<!-- Alt 1 --> <rect id="K_kb6c" x="126" y="202" width="56" height="44" rx="6" ry="6" />
<!-- Alt 2 --> <rect id="K_kb6k" x="558" y="202" width="56" height="44" rx="6" ry="6" />
<!-- Win 2 --> <rect id="K_kb6l" x="620" y="202" width="56" height="44" rx="6" ry="6" />
<!-- Menu --> <rect id="K_kb6m" x="682" y="202" width="56" height="44" rx="6" ry="6" />
<!-- Ctrl 2 --> <rect id="K_kb6n" x="744" y="202" width="56" height="44" rx="6" ry="6" />
</g>
</g>
<!-- ======== Key signs ======== -->
<g inkscape:groupmode="layer" id="DrawedInscr" inkscape:label="DrawedInscr" style="display:inline">
<!-- Meta / ⌘ — Lucide «command» -->
<g id="S_kb6b" class="sg-lucide" transform="translate(82,214) scale(0.8333333333)">
<path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3" />
</g>
<use id="S_kb6l" xlink:href="#S_kb6b" transform="translate(556,0)" x="0" y="0" width="1" height="1" />
<!-- Menu — Lucide «menu» -->
<g id="S_kb6m" class="sg-lucide" transform="translate(700,214) scale(0.8333333333)">
<line x1="4" x2="20" y1="12" y2="12" />
<line x1="4" x2="20" y1="6" y2="6" />
<line x1="4" x2="20" y1="18" y2="18" />
</g>
</g>
<!-- ======== Inscriptions layer ======== -->
<g inkscape:groupmode="layer" id="en-us" inkscape:label="incriptions" sodipodi:insensitive="true" style="display:inline">
<g id="T_stdletters">
<text id="T_kb3b2" x="96" y="72" >Q</text>
<text id="T_kb3c2" x="150" y="72" >W</text>
<text id="T_kb3d2" x="204" y="72" >E</text>
<text id="T_kb3e2" x="258" y="72" >R</text>
<text id="T_kb3f2" x="312" y="72" >T</text>
<text id="T_kb3g2" x="366" y="72" >Y</text>
<text id="T_kb3h2" x="420" y="72" >U</text>
<text id="T_kb3i2" x="474" y="72" >I</text>
<text id="T_kb3j2" x="528" y="72" >O</text>
<text id="T_kb3k2" x="582" y="72" >P</text>
<text id="T_kb4c2" x="112" y="122" >A</text>
<text id="T_kb4d2" x="166" y="122" >S</text>
<text id="T_kb4e2" x="220" y="122" >D</text>
<text id="T_kb4f2" x="274" y="122" >F</text>
<text id="T_kb4g2" x="328" y="122" >G</text>
<text id="T_kb4h2" x="382" y="122" >H</text>
<text id="T_kb4i2" x="436" y="122" >J</text>
<text id="T_kb4j2" x="490" y="122" >K</text>
<text id="T_kb4k2" x="544" y="122" >L</text>
<text id="T_kb5c2" x="132" y="172" >Z</text>
<text id="T_kb5d2" x="186" y="172" >X</text>
<text id="T_kb5e2" x="240" y="172" >C</text>
<text id="T_kb5f2" x="294" y="172" >V</text>
<text id="T_kb5g2" x="348" y="172" >B</text>
<text id="T_kb5h2" x="402" y="172" >N</text>
<text id="T_kb5i2" x="454" y="172" >M</text>
</g>
<g id="T_stdspecial">
<text id="T_kb2a1" x="14" y="42" class="T_size_L">`</text>
<text id="T_kb2b1" x="68" y="42" >1</text>
<text id="T_kb2c1" x="122" y="42" >2</text>
<text id="T_kb2d1" x="176" y="42" >3</text>
<text id="T_kb2e1" x="230" y="42" >4</text>
<text id="T_kb2f1" x="284" y="42" >5</text>
<text id="T_kb2g1" x="338" y="42" >6</text>
<text id="T_kb2h1" x="392" y="42" >7</text>
<text id="T_kb2i1" x="446" y="42" >8</text>
<text id="T_kb2j1" x="500" y="42" >9</text>
<text id="T_kb2k1" x="554" y="42" >0</text>
<text id="T_kb2l1" x="610" y="42" >-</text>
<text id="T_kb2m1" x="662" y="42" >=</text>
<text id="T_kb3l1" x="636" y="90" >[</text>
<text id="T_kb3m1" x="690" y="90" >]</text>
<text id="T_kb3n1" x="744" y="90" >\</text>
<text id="T_kb4l1" x="598" y="142" >;</text>
<text id="T_kb4m1" x="652" y="142" class="T_size_L">'</text>
<text id="T_kb5j1" x="508" y="190" >,</text>
<text id="T_kb5k1" x="562" y="192" >.</text>
<text id="T_kb5l1" x="616" y="192" >/</text>
<!-- Shift level -->
<text id="T_kb2a2" x="14" y="18" class="T_size_L">~</text>
<text id="T_kb2b2" x="68" y="20" >!</text>
<text id="T_kb2c2" x="122" y="20" >@</text>
<text id="T_kb2d2" x="176" y="20" >#</text>
<text id="T_kb2e2" x="230" y="20" >$</text>
<text id="T_kb2f2" x="284" y="20" >%</text>
<text id="T_kb2g2" x="338" y="22" class="T_size_L">^</text>
<text id="T_kb2h2" x="392" y="20" >&amp;</text>
<text id="T_kb2i2" x="446" y="20" ></text>
<text id="T_kb2j2" x="500" y="20" >(</text>
<text id="T_kb2k2" x="554" y="20" >)</text>
<text id="T_kb2l2" x="608" y="20" >_</text>
<text id="T_kb2m2" x="662" y="20" >+</text>
<text id="T_kb3l2" x="636" y="68" >{</text>
<text id="T_kb3m2" x="690" y="68" >}</text>
<text id="T_kb3n2" x="744" y="68" >|</text>
<text id="T_kb4l2" x="598" y="122" >:</text>
<text id="T_kb4m2" x="652" y="122" class="T_size_L">"</text>
<text id="T_kb5j2" x="508" y="170" >&lt;</text>
<text id="T_kb5k2" x="562" y="170" >&gt;</text>
<text id="T_kb5l2" x="616" y="170" >?</text>
</g>
<g id="T_others">
<text id="T_kb6a" x="10" y="230" >Ctrl</text>
<text id="T_kb6c" x="134" y="230" >Alt</text>
<text id="T_kb6k" x="564" y="230" >Alt</text>
<text id="T_kb6n" x="750" y="230" >Ctrl</text>
</g>
<!-- ======== alternates inscriptions ======== -->
<g inkscape:groupmode="layer" id="sublayer4a" inkscape:label="alternative inscriptions" style="display:inline">
<g id="T_alterninsc" >
<!-- K_kb2n x=704 w=96 → правый край подписи ~790 -->
<text id="T_kb2n" class="T_alt-right" x="790" y="40" >delete</text>
<!-- K_kb3a x=2 w=74 -->
<text id="T_kb3a" class="T_alt-left" x="10" y="80" >tab</text>
<!-- K_kb4n x=692 w=107 -->
<text id="T_kb4n" class="T_alt-right" x="789" y="130">return</text>
<!-- K_kb4a x=2 w=90 -->
<text id="T_kb4a1" class="T_alt-left" x="10" y="128">caps lock</text>
<!-- K_kb5a x=2 w=110 -->
<text id="T_kb5a" class="T_alt-left" x="10" y="180">shift</text>
<!-- K_kb5m x=658 w=142 -->
<text id="T_kb5m" class="T_alt-right" x="790" y="180">shift</text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.