gabriele-cusato_HandTranscr.../HandTranscriptMd/styles.css
gabriele-cusato f1dadea134 provato modifiche per far funzionare handwriting ma non c'è nulla da fare, anche handwriting notes non funziona, quindi non c'è nulla da fare per adesso. Per monitorare il problema:
il posto migliore è il repository Chromium, che è il motore WebView di Android:

  - Bug tracker Chromium: https://bugs.chromium.org — cerca "StylusWritingManager" o "stylus handwriting WebView"                                                                                                                       - Issue del plugin Ink (stessa identica situazione): https://github.com/daledesilva/obsidian_ink/issues/156 — se qualcuno trova un fix lì, vale anche per noi
                                                                                                                                                                                                                                        Il problema è a livello di Chromium/Android WebView, quindi un fix arriverebbe tramite un aggiornamento di Chrome/WebView sul dispositivo, non tramite Obsidian.
2026-03-22 18:23:41 +01:00

536 lines
14 KiB
CSS

/* ========================================
Handwriting to Markdown — Plugin Styles
Prefisso hwm_ per evitare conflitti
======================================== */
/* --- Container principale dell'embed --- */
.hwm_container {
position: relative;
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
overflow: hidden;
margin: 8px 0;
/* Sfondo SEMPRE bianco (anche in dark mode) */
background: #ffffff;
/* Riabilita pointer-events (i wrapper CM6 sopra hanno pointer-events: none
per non bloccare l'hit-test dell'handwriting Android) */
pointer-events: auto;
}
/* --- Modalità handwriting Android (switch nelle impostazioni) ---
Quando attiva (classe hwm-handwriting-mode su document.body), i riquadri
handwriting mostrano un box compatto con icona invece dell'SVG a piena
altezza. Questo riduce l'area CE=false che interferisce con la proximity
detection dello stylus handwriting di Android.
L'SVG viene nascosto; il pannello portale (position:fixed) rimane visibile
sopra il box per permettere apertura editor, conversione ed eliminazione. */
.hwm-handwriting-mode .hwm-badge-mode {
/* Larghezza piena: lo span .internal-embed di default può restare stretto
quanto l'immagine — forziamo 100% per contenere correttamente il pannello portale */
width: 100% !important;
box-sizing: border-box !important;
/* Altezza fissa: abbastanza alta da contenere il pannello portale (~34px)
senza occupare troppo spazio nel documento */
height: 72px !important;
max-height: 72px !important;
min-height: 72px !important;
overflow: hidden;
cursor: default;
/* Flex per centrare l'icona */
display: flex !important;
align-items: center;
justify-content: center;
background: var(--background-secondary, #f0f0f0);
border-radius: 6px;
}
/* Nasconde l'SVG: mostriamo solo il box con l'icona */
.hwm-handwriting-mode .hwm-badge-mode img {
display: none !important;
}
/* Icona matita centrata via pseudo-elemento */
.hwm-handwriting-mode .hwm-badge-mode::after {
content: "✏️";
font-size: 28px;
opacity: 0.5;
pointer-events: none;
}
/* SVG a piena larghezza in tutti i contesti (switch OFF).
Quando lo switch è ON, le regole .hwm-handwriting-mode sovrastano questo. */
.internal-embed[src*="_handwriting/"] {
display: block;
width: 100%;
}
.internal-embed[src*="_handwriting/"] img {
display: block;
width: 100%;
height: auto;
max-height: none;
}
/* Variante wiki ![[svg]]:
La classe hwm_container viene aggiunta DIRETTAMENTE allo span
.internal-embed di Obsidian (nessun wrapper esterno, per non
spostare i nodi CM6 e causare crash del virtual DOM).
L'immagine è già renderizzata da Obsidian; noi aggiungiamo solo
i bottoni come figli dello span. */
.hwm_container--wiki {
background: transparent; /* l'SVG ha già il suo sfondo */
width: 100%;
box-sizing: border-box;
}
.hwm_container--wiki img {
display: block;
width: 100%;
height: auto;
}
/* --- Toolbar in alto a destra --- */
.hwm_toolbar {
position: absolute;
top: 6px;
right: 6px;
z-index: 10;
display: flex;
align-items: center;
gap: 0; /* spacing gestito via margin-right sui bottoni, così i bottoni
nascosti (max-width:0, margin:0) non creano spazi vuoti */
padding: 3px 6px;
border-radius: 6px;
background: rgba(240, 240, 240, 0.95);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
opacity: 1;
transition: opacity 0.2s;
}
/* --- Bottoni toolbar --- */
.hwm_btn {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
padding: 0;
border: none;
border-radius: 4px;
background: transparent;
color: #666;
cursor: pointer;
line-height: 0;
/* Spacing via margin-right invece di gap, così i bottoni nascosti
(margin:0) non lasciano spazi vuoti nella toolbar compatta */
margin-right: 4px;
/* Animazione espansione/compressione toolbar */
overflow: hidden;
max-width: 40px;
flex-shrink: 0;
transition: max-width 0.2s ease, opacity 0.2s ease,
margin 0.2s ease, padding 0.2s ease;
}
/* Icone SVG inline dentro i bottoni */
.hwm_btn svg {
width: 16px;
height: 16px;
flex-shrink: 0;
}
.hwm_btn:hover {
background: #e0e0e0;
color: #333;
}
/* Bottone attivo (tool selezionato) */
.hwm_btn.hwm_active {
background: var(--interactive-accent);
color: #ffffff;
}
/* --- Bottone salva (evidenziato) --- */
.hwm_save-btn {
margin-left: 4px;
}
.hwm_save-btn:hover {
background: var(--interactive-accent);
color: #ffffff;
}
/* --- Bottone elimina (X rossa su hover) --- */
.hwm_delete-btn:hover {
background: #dc2626;
color: #ffffff;
}
/* --- Selettore colori --- */
.hwm_colors {
display: flex;
align-items: center;
gap: 3px;
margin: 0 4px;
}
/* I pallini colore sono <div> (non <button>) per evitare che Obsidian Mobile
sovrascriva width/height con i propri stili globali sui button.
Le dimensioni (22px) sono forzate anche via style.setProperty inline in embed.ts */
.hwm_color-btn {
display: inline-block;
width: 22px;
height: 22px;
border: 2px solid transparent;
border-radius: 50%;
cursor: pointer;
box-sizing: border-box;
}
.hwm_color-btn.hwm_active {
border-color: var(--interactive-accent);
}
.hwm_color-btn:hover {
border-color: #999;
}
/* --- Area canvas (editing) --- */
.hwm_canvas-wrap {
width: 100%;
overflow: hidden;
/* Centra il canvas orizzontalmente quando il modal/tab è più largo
della risoluzione nativa del canvas (canvasWidth dalle settings) */
display: flex;
justify-content: center;
}
.hwm_canvas {
display: block;
/* max-width invece di width:100% per evitare che il canvas venga stirato
oltre la sua risoluzione nativa (canvasWidth dai settings).
Stirarlo causerebbe tratti pixelati nel modal / tab full-screen. */
max-width: 100%;
cursor: crosshair;
/* Sfondo bianco fisso */
background: #ffffff;
}
/* --- Handle di resize in basso --- */
.hwm_resize-handle {
width: 100%;
height: 12px;
display: flex;
align-items: center;
justify-content: center;
cursor: ns-resize;
background: #f5f5f5;
border-top: 1px solid #e0e0e0;
color: #999;
font-size: 14px;
user-select: none;
touch-action: none;
}
.hwm_resize-handle:hover {
background: #ebebeb;
color: #666;
}
/* --- Placeholder per canvas vuoto --- */
.hwm_placeholder {
text-align: center;
color: #999;
padding: 40px 0;
font-style: italic;
}
/* --- Errore parsing --- */
.hwm_error {
color: var(--text-error);
padding: 8px;
font-style: italic;
}
/* --- Separatore visivo nella toolbar --- */
.hwm_separator {
width: 1px;
height: 20px;
background: #d0d0d0;
margin: 0 6px 0 2px; /* destra più ampia per bilanciare visivamente */
flex-shrink: 0;
overflow: hidden;
transition: max-width 0.2s ease, opacity 0.2s ease,
margin 0.2s ease, padding 0.2s ease;
}
/* --- Pallini colore: transizione per animazione toolbar --- */
.hwm_color-btn {
transition: max-width 0.2s ease, opacity 0.2s ease,
margin 0.2s ease, padding 0.2s ease;
}
/* --- Toolbar compatta (mobile) ---
Bottoni nascosti: collassati a larghezza 0 con fade-out.
La transizione su .hwm_btn e .hwm_separator produce l'animazione
quando la classe viene aggiunta/rimossa via JS. */
.hwm_toolbar--compact .hwm_pen-btn,
.hwm_toolbar--compact .hwm_eraser-btn,
.hwm_toolbar--compact .hwm_clear-btn,
.hwm_toolbar--compact .hwm_save-btn,
.hwm_toolbar--compact .hwm_color-btn:not(.hwm_active),
.hwm_toolbar--compact .hwm_separator {
max-width: 0 !important;
opacity: 0 !important;
padding: 0 !important;
margin: 0 !important;
pointer-events: none;
}
/* Riduce il margine attorno al pallino colore rimasto e azzera il gap
tra i pallini (gli inattivi sono collassati a width:0 ma il gap persiste) */
.hwm_toolbar--compact .hwm_colors {
margin: 0 2px;
gap: 0;
}
/* --- Tema scuro per la toolbar ---
Applicato via classe hwm_toolbar--dark quando bgMode === 'dark' */
.hwm_toolbar--dark {
background: rgba(40, 40, 40, 0.97) !important;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4) !important;
}
.hwm_toolbar--dark .hwm_btn {
color: #bbb !important;
}
.hwm_toolbar--dark .hwm_btn:hover {
background: rgba(255, 255, 255, 0.12) !important;
color: #fff !important;
}
.hwm_toolbar--dark .hwm_btn.hwm_active {
background: var(--interactive-accent) !important;
color: #fff !important;
}
.hwm_toolbar--dark .hwm_separator {
background: #555 !important;
}
/* --- Mobile: bottoni grandi e visibili ---
Forza sfondo chiaro + colore scuro per le icone SVG,
indipendentemente dal tema di Obsidian Mobile */
.hwm_mobile .hwm_toolbar {
gap: 0;
padding: 5px 8px;
}
.hwm_mobile .hwm_toolbar .hwm_btn {
width: 36px !important;
height: 36px !important;
margin-right: 6px !important; /* spacing via margin, non gap */
background: rgba(245, 245, 245, 0.98) !important;
border: 1px solid rgba(0, 0, 0, 0.18) !important;
border-radius: 7px !important;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18) !important;
color: #222 !important;
}
.hwm_mobile .hwm_toolbar .hwm_btn.hwm_active {
background: var(--interactive-accent) !important;
border-color: var(--interactive-accent) !important;
color: #ffffff !important;
}
/* --- Tema scuro su mobile: sovrascrive i bianchi !important del mobile --- */
.hwm_mobile .hwm_toolbar--dark .hwm_btn {
background: rgba(55, 55, 55, 0.98) !important;
border-color: rgba(255, 255, 255, 0.15) !important;
color: #ddd !important;
}
.hwm_mobile .hwm_toolbar--dark .hwm_btn.hwm_active {
background: var(--interactive-accent) !important;
border-color: var(--interactive-accent) !important;
color: #fff !important;
}
/* ========================================
INLINE PREVIEW — Vista nel documento
======================================== */
/* --- Bottoni inline (X, converti, comprimi) ---
Posizionati in alto a sinistra per non coprire il bottone </> di Obsidian */
.hwm_inline-buttons {
position: absolute;
top: 6px;
left: 6px;
z-index: 5;
display: flex;
gap: 4px;
padding: 3px;
border-radius: 6px;
background: rgba(240, 240, 240, 0.9);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
}
.hwm_inline-buttons--dark {
background: rgba(40, 40, 40, 0.95);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}
.hwm_inline-buttons--dark .hwm_btn {
color: #bbb;
}
.hwm_inline-buttons--dark .hwm_btn:hover {
background: rgba(255, 255, 255, 0.12);
color: #fff;
}
/* --- Bottone comprimi: rotazione 180° quando compresso --- */
.hwm_collapse-btn {
transition: transform 0.3s ease, max-width 0.2s ease,
opacity 0.2s ease, margin 0.2s ease, padding 0.2s ease;
}
.hwm_collapse-btn.hwm_rotated {
transform: rotate(180deg);
}
/* --- Preview SVG inline --- */
.hwm_inline-preview {
width: 100%;
overflow: hidden;
cursor: pointer;
/* Transizione per l'espansione/compressione */
transition: max-height 0.3s ease;
}
.hwm_inline-preview.hwm_collapsed {
/* max-height impostato via JS */
overflow: hidden;
}
/* Preview SVG via background-image (nessun <img> nel DOM per non
interferire con l'handwriting Android dentro cm-content) */
.hwm_preview-bg {
width: 100%;
height: 0; /* l'altezza è data da padding-bottom (aspect ratio) */
background-size: 100% auto;
background-repeat: no-repeat;
background-position: top left;
pointer-events: none; /* il click è gestito dal div padre */
}
/* ========================================
PANNELLO PORTALE — Fuori da cm-content
Contiene tutti i bottoni del formato wiki.
Vive in document.body → zero impatto su
cm-content → non rompe handwriting Android
======================================== */
/* Pannello floating con tutti i bottoni (nuovo formato ![[svg]]) */
.hwm_portal-panel {
position: fixed; /* coordinate viewport, aggiornate via RAF */
z-index: 100;
display: flex;
align-items: center;
gap: 0; /* spacing via margin-right sui .hwm_btn */
padding: 3px 6px;
border-radius: 6px;
background: rgba(240, 240, 240, 0.95);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
}
/* Bottone cerchio singolo (formato legacy) */
.hwm_portal-btn {
position: fixed; /* coordinate viewport, aggiornate via JS */
z-index: 100;
/* Cerchio perfetto: dimensioni fisse con !important per sovrascrivere
gli stili globali di Obsidian sui button che aggiungono padding */
width: 36px !important;
height: 36px !important;
min-width: 36px !important;
min-height: 36px !important;
padding: 0 !important;
border-radius: 50% !important;
border: none !important;
background: var(--interactive-accent) !important;
color: #ffffff !important;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden; /* evita che l'SVG allarghi il bottone */
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.hwm_portal-btn svg {
width: 18px !important;
height: 18px !important;
flex-shrink: 0;
stroke: #ffffff !important; /* forza icona bianca indipendentemente da currentColor */
}
.hwm_portal-btn:hover {
transform: scale(1.1);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}
/* ========================================
DRAWING MODAL — Editor come overlay
======================================== */
.hwm_modal {
width: 95vw !important;
max-width: 95vw !important;
height: 90vh;
display: flex;
flex-direction: column;
}
.hwm_modal .modal-content {
flex: 1;
padding: 0;
overflow: hidden;
display: flex;
flex-direction: column;
}
/* ========================================
EDITOR VIEW — Tab dedicata al disegno
======================================== */
/* Container principale dell'editor view */
.hwm_editor-view {
display: flex;
flex-direction: column;
height: 100%;
}
/* --- Top bar: ← a sinistra | toolbar a destra --- */
.hwm_editor-topbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 6px 8px;
background: rgba(240, 240, 240, 0.95);
border-bottom: 1px solid #ddd;
flex-shrink: 0;
gap: 8px;
}
.hwm_editor-topbar--dark {
background: rgba(40, 40, 40, 0.97);
border-bottom-color: #444;
}
/* Bottone ← (indietro, a sinistra) */
.hwm_back-btn {
flex-shrink: 0;
}
/* Toolbar dentro l'editor view: posizione statica, allineata a destra */
.hwm_editor-toolbar {
position: static !important;
top: auto !important;
right: auto !important;
box-shadow: none !important;
background: transparent !important;
padding: 0 !important;
}
/* Topbar del DrawingModal: centra la toolbar (non c'è backBtn come nell'EditorView) */
.hwm_editor-topbar--modal {
justify-content: center;
}
/* --- Scroll container per il canvas nell'editor --- */
.hwm_editor-scroll {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
}
/* --- Resize handle disabilitato (visibile ma non interattivo) --- */
.hwm_resize-handle--disabled {
pointer-events: none;
cursor: default;
}
.hwm_resize-handle--disabled:hover {
background: #f5f5f5; /* annulla l'effetto hover */
}