Commit Graph

18 Commits

Author SHA1 Message Date
Sergio 97bea4c99f gioser-web: fix controls delegation (doc-wide), fix graph click (use dyn_into)
- Changed install_deck_delegation → install_controls_delegation:
  listener on document, not just #deck (controls are outside deck now)
- Graph node click: use dyn_into::<HtmlElement>() then click() instead
  of dyn_ref which may fail on <a> elements
2026-05-23 16:57:48 +00:00
Sergio 786a22debe gioser-web: fix controls CSS selector, use HTMLElement.click() for graph nav
- .page-controls visibility: changed from  (wrong) to

- Graph node callback: use HTMLElement.click() instead of
  dispatch_event(MouseEvent), which wasn't working (untrusted event)
2026-05-23 16:53:12 +00:00
Sergio 5f4d260301 gioser-web: move page-controls to static HTML, simplify sync
- Moved the minimize/close buttons from dynamic JS creation to
  static HTML in index.html (always present, hidden by default)
- sync_page_controls() now just toggles opacity/pointer-events
  instead of creating DOM elements
2026-05-23 16:52:03 +00:00
Sergio 0381585745 gioser-web: fix graph node click callback, dispatch MouseEvent on tip
- Graph callback now creates a web_sys::MouseEvent('click') and
  dispatches it on the corresponding .tip element.
- The existing install_tip_clicks listener captures it and calls
  open_or_switch with proper coordinates.
2026-05-23 16:46:04 +00:00
Sergio 05f2e54ed1 gioser-web: draggable graph nodes, fixed controls, history.pushState routing
- Graph: nodes are draggable via pointer events. Snap back with
  spring transition on release (cubic-bezier 0.34,1.56,0.64,1)
- Removed hover bounce animation (was distracting)
- Page controls (minimize/close): now fixed position in viewport
  (top-right, z-index 100), not inside the deck-page scroll area.
  Created once in sync_page_controls() on show/hide deck.
  Controls detect active page when data-minimize/close-page is empty.
- Hash routing → history.pushState: URLs are /estudio/aire etc.
  popstate listener handles back/forward. Initial path read on boot.
- Added PointerEvent feature to gioser-graph-web Cargo.toml
- Added History feature to gioser-web Cargo.toml
2026-05-23 16:21:01 +00:00
Sergio 4c7d716c0c gioser-web: hash routing, clickable graph nodes, hover bounce, line normalization
- Hash routing: each page sets location.hash to #/element (aire/fuego/etc)
  - Hash read on boot to open direct URL
  - hashchange listener for browser back/forward
  - minimize clears hash
- Graph node click: dispatches click on the corresponding .tip element,
  triggering page open animation (expand from center)
- Graph hover: CSS bounce animation (scale 1→1.08→0.96→1, 0.4s)
- Edge normalization: min-max scale (w-0.80)/0.15 then squared curve
  for visible weight differentiation in tight cluster (0.83-0.93)
- web-sys features: +Location
2026-05-23 16:12:26 +00:00
Sergio 1fdbd358c8 gioser-graph: min-max normalize weights, subtle transparency
- All edge weights are 0.83-0.93 (tight cluster). Now:
  min-max scale: (w - 0.80) / 0.15 → 0.0-1.0
  then quadratic curve: norm² to exaggerate differences
- Stroke width: 0.8 + expanded*3.0 (subtle, not chunky)
- Opacity: 12-42% (transparent and subtle)
- Brightness: moderate, maps to expanded value
2026-05-23 16:03:57 +00:00
Sergio ac894390f9 gioser-graph: exaggerated thickness & brightness, edges behind with pointer-events:none
- Stroke width: 1.5 + w*8.0 (range 3-10px) for dramatic variation
- Brightness: w*0.7 factor, low weight = pure blended color, high weight ≈ white
- Opacity: 0.40 + w*0.55 (40-95%)
- Edges group gets .gb-edge-group { pointer-events: none } so clicks pass to nodes
- Visual layer: edges_group (behind) → nodes_group (front) in SVG
2026-05-23 16:00:28 +00:00
Sergio 906e5f639c gioser-graph: edges behind nodes, variable thickness by raw weight
- Edges and nodes now in separate SVG <g> groups (edges first = behind)
- Stroke width: 0.6 + w*4.0 instead of normalized range (more visible variation)
- Brightness: uses raw weight directly, not normalized against max
- Edges group has no breathing animation (only nodes breathe)
2026-05-23 15:53:00 +00:00
Sergio ef3d698c4b gioser-graph: edge colors blend from connected node caminos
- Each edge color is a 50/50 blend of its two nodes' camino colors
- Extra brightness proportional to weight (higher weight = closer to white)
- Edge opacity/width also varies by weight
- Edges drawn before nodes in SVG (already behind them)
2026-05-23 15:51:21 +00:00
Sergio 2588673caf gioser-graph: fix panic slicing multi-byte chars (á, ñ, etc)
- Use .chars().take(18) instead of byte slicing &node.name[..18]
  which panics on accented characters
2026-05-23 15:42:32 +00:00
Sergio fa2bedf851 gioser-graph: fix edge UUID mapping, index 4 docs, unify page bg
- Fix: map positions by node.id (UUID) not doc_id — edges now draw
- Index the 4 docs/ files into Qdrant (15 fragments via index-gioser-docs.py)
- Page background: single smooth radial-gradient per element (no color
  divisions), animated 'page-breathe' — opacity pulses 0.35↔0.80
- Graph CSS: 'graph-breathe' 5s opacity animation (feels alive)
2026-05-23 15:40:42 +00:00
Sergio b5032de1e3 gioser-graph: grid layout 3 cols, line brightness by weight, breathing animation
- Replaced force-directed layout with explicit grid: 3 columns wide,
  rows based on node count (minimum 3 visual rows)
- Nodes are larger: 170x44px with 8px radius
- Lines: color brightness + stroke opacity based on normalized weight
  (weight 1.0 → white #ffff, 0.5 → dimmer rgb)
- CSS animation 'graph-breathe': opacity pulses slowly (4.2s ease-in-out)
- Hover: drop-shadow glow + fill-opacity increase
- Glow circle behind each node (subtle)
2026-05-23 15:34:54 +00:00
Sergio 7f7ba1fef9 gioser-web: revert Cytoscape, back to SVG gioser-graph-web
- Remove cytoscape-graph.js (wasn't working with hidden deck)
- Restore gioser-graph-web Rust SVG widget with gioser-web dep
- Rebuild WASM (514K)
2026-05-23 15:28:41 +00:00
Sergio a908d8420c gioser-web: fix graph not appearing — use MutationObserver
- cytoscape-graph.js now uses MutationObserver, not DOMContentLoaded
  (the <gioser-graph> element is created dynamically by WASM)
- Remove unused dispatchEvent from lib.rs
- Rebuild WASM
2026-05-23 15:22:13 +00:00
Sergio d4c31d70b7 gioser-web: replace Rust SVG graph with Cytoscape.js
- Add cytoscape-graph.js: fetches /graph, renders with Cytoscape.js
- Style: round-rect nodes, cose layout, edge width proportional to weight
- Click: center node + fade rest (wineandcheesemap effect)
- Double-click: trigger navigation callback
- Hover: tooltip with preview text
- Click background: restore all
- Remove gioser-graph-web crate dependency (no longer needed)
- Add CDN cytoscape@3.30.4 + defer script to index.html
- gioser-graph custom element auto-initialized on mount
2026-05-23 15:17:28 +00:00
Sergio 529287f01d gioser-web: fix graph widget — rect nodes, edge weight, CSS anim, layout
- Switch from circles to horizontal rounded rectangles with text inside
- Text size 12px body + 8px sublabel (camino), no overlaps
- Edge stroke-width proportional to semantic weight
- Fix 'Layout was forced' warning
- Reduce CSS page-ambience animations: only opacity (no transform)
  to fix 'breathing background' visual glitch
- Layout: more separation (k*1.6), 80 iterations
2026-05-23 15:12:48 +00:00
Sergio 8235391add gioser-web: rebuild WASM with graph widget integration
- Fix missing reader declaration in spawn_local
- Rebuild pkg/ with wasm-bindgen 0.2.121
- Graph widget now appears below page content (SVG force-directed)
2026-05-23 14:57:13 +00:00