@jmbarzee/force-graph 0.0.1

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.
@@ -0,0 +1 @@
1
+ :root,[data-theme=light]{--gv-accent: #8B7EC8;--gv-accent-tint-weak: 5%;--gv-accent-tint-hover: 8%;--gv-accent-tint-active: 12%;--gv-accent-tint-ring: 32%;--gv-inset-bg: rgba(0, 0, 0, .02);--gv-key-bg: rgba(0, 0, 0, .05);--gv-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, .12);--gv-tension-stretch: #d97706;--gv-tension-compress: #7CB9E8;--gv-tension-rest: #7EC8B8;--gv-diagnostic-error: #b91c1c;--gv-diagnostic-warning: #b45309;--gv-color-bg: #f8fafc;--gv-color-bg-gradient: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);--gv-color-text: #1e293b;--gv-color-text-muted: #64748b;--gv-color-graph-label: #334155;--gv-color-surface: #ffffff;--gv-color-border: #e2e8f0;--gv-font-mono: "SF Mono", "Fira Code", "Consolas", monospace;--gv-font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--gv-focus-ring-color: #4A90D9}[data-theme=dark]{--gv-accent: #A89BD8;--gv-accent-tint-weak: 6%;--gv-accent-tint-hover: 12%;--gv-accent-tint-active: 18%;--gv-accent-tint-ring: 40%;--gv-inset-bg: rgba(255, 255, 255, .04);--gv-key-bg: rgba(255, 255, 255, .06);--gv-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, .4);--gv-tension-stretch: #fbbf24;--gv-tension-compress: #7CB9E8;--gv-tension-rest: #7EC8B8;--gv-diagnostic-error: #f87171;--gv-diagnostic-warning: #fbbf24;--gv-color-bg: #1e1e1e;--gv-color-bg-gradient: linear-gradient(135deg, #1e1e1e 0%, #252526 100%);--gv-color-text: #d4d4d4;--gv-color-text-muted: #9ca3af;--gv-color-graph-label: #cbd5e1;--gv-color-surface: #252526;--gv-color-border: #3c3c3c;--gv-focus-ring-color: #6CB0F0}.gv-canvas-header{background:var(--gv-color-surface);border:1px solid var(--gv-color-border);border-radius:10px;margin-bottom:20px;box-shadow:0 1px 4px #0000000f}.gv-canvas-header.refresh-flash{animation:refreshFlash .6s ease}@keyframes refreshFlash{0%{box-shadow:0 1px 4px #0000000f}30%{box-shadow:0 0 0 2px color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-ring),transparent),0 1px 4px #0000000f}to{box-shadow:0 1px 4px #0000000f}}.gv-tag-section{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;transition:background .2s ease,box-shadow .2s ease}.gv-tag-section.section-locked{background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-weak),transparent);box-shadow:inset 2px 0 0 var(--gv-accent)}.gv-tag-row{flex:1 1 auto;display:flex;flex-wrap:wrap;gap:6px;min-width:0}.gv-tag{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;background:transparent;border:1px solid var(--gv-color-border);border-radius:6px;font-family:var(--gv-font-mono);font-size:13px;color:var(--gv-color-text-muted);cursor:pointer;transition:all .15s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.gv-tag:hover{border-color:var(--gv-accent);color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent)}.gv-tag.selected{border-color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-active),transparent);color:var(--gv-accent);font-weight:500}.gv-tag.all-included{border-color:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-ring),transparent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-weak),transparent);color:var(--gv-color-text-muted)}.gv-tag.all-included:hover{border-color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-active),transparent);color:var(--gv-accent)}.gv-tag-icon{font-size:12px;line-height:1}.gv-tag-label{line-height:1}.gv-header-divider{height:1px;background:var(--gv-color-border);margin:0}.gv-header-controls-section{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;gap:12px}.gv-header-search{display:flex;align-items:center;gap:0;border-radius:6px;transition:all .2s ease;overflow:hidden;border:1px solid transparent}.gv-header-search.active{border-color:var(--gv-color-border);background:var(--gv-inset-bg)}.gv-header-search-toggle{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;background:transparent;color:var(--gv-color-text-muted);cursor:pointer;border-radius:6px;transition:all .15s ease;flex-shrink:0}.gv-header-search:not(.active) .gv-header-search-toggle{border:1px solid var(--gv-color-border)}.gv-header-search-toggle:hover{color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent)}.gv-header-search-input{width:200px;height:32px;padding:0 10px 0 2px;border:none;background:transparent;font-family:var(--gv-font-mono);font-size:13px;color:var(--gv-color-text);outline:none;animation:searchExpand .2s ease}.gv-header-search-input::placeholder{color:var(--gv-color-text-muted);opacity:.6}@keyframes searchExpand{0%{width:0;opacity:0}to{width:200px;opacity:1}}.gv-chip-section{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 14px;transition:background .2s ease,box-shadow .2s ease}.gv-chip-section.section-locked{background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-weak),transparent);box-shadow:inset 2px 0 0 var(--gv-accent)}.gv-chip-row{flex:1 1 auto;display:flex;flex-wrap:wrap;gap:6px;min-width:0}.gv-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;background:transparent;border:1px solid var(--gv-color-border);border-radius:6px;font-family:var(--gv-font-sans);font-size:13px;color:var(--gv-color-text-muted);cursor:pointer;transition:all .15s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.gv-chip-icon{font-size:12px;line-height:1}.gv-chip-label{line-height:1}.gv-header-chip-count{font-family:var(--gv-font-mono);font-size:11px;line-height:1;opacity:.6;font-variant-numeric:tabular-nums}.gv-chip:hover{border-color:var(--gv-chip-tint, var(--gv-color-border));color:var(--gv-chip-tint, var(--gv-color-text-muted));background:var(--gv-chip-tint-bg-hover, transparent)}.gv-chip.active{border-color:var(--gv-chip-tint, var(--gv-color-border));color:var(--gv-chip-tint, var(--gv-color-text-muted));background:var(--gv-chip-tint-bg-active, transparent);font-weight:500}.gv-chip{--gv-chip-tint-bg-hover: color-mix(in srgb, var(--gv-chip-tint, var(--gv-color-text-muted)) var(--gv-accent-tint-hover), transparent);--gv-chip-tint-bg-active: color-mix(in srgb, var(--gv-chip-tint, var(--gv-color-text-muted)) var(--gv-accent-tint-active), transparent)}.gv-header-hidden-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;margin-left:4px;padding:0 4px;font-family:var(--gv-font-mono);font-size:10px;font-weight:600;color:#f59e0b;background:#f59e0b29;border-radius:8px;line-height:1}.gv-tag.recently-changed,.gv-chip.recently-changed{animation:filterChipFlash .45s ease}@keyframes filterChipFlash{0%{box-shadow:0 0 color-mix(in srgb,var(--gv-accent) 50%,transparent)}40%{box-shadow:0 0 0 4px color-mix(in srgb,var(--gv-accent) 0%,transparent)}to{box-shadow:0 0 color-mix(in srgb,var(--gv-accent) 0%,transparent)}}.gv-header-remove{border:none;background:transparent;color:var(--gv-color-text-muted);cursor:pointer;font-size:13px;line-height:1;padding:2px 4px;border-radius:3px;opacity:0;transition:opacity .12s ease,background .12s ease}.gv-tag-section:hover .gv-header-remove,.gv-chip-section:hover .gv-header-remove,.gv-header-remove:focus-visible{opacity:1}.gv-header-remove:hover{background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent);color:var(--gv-color-text)}.gv-header-add{display:flex;align-items:center;padding:0 6px;position:relative}.gv-header-add-menu{position:absolute;top:100%;left:6px;z-index:10;display:flex;flex-direction:column;min-width:120px;padding:4px;background:var(--gv-color-surface);border:1px solid var(--gv-color-border);border-radius:6px;box-shadow:var(--gv-tooltip-shadow)}.gv-header-add-menu-item{border:0;background:transparent;color:var(--gv-color-text);text-align:left;font-size:12px;padding:4px 8px;border-radius:4px;cursor:pointer}.gv-header-add-menu-item:hover{background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent)}.gv-header-add-button{border:1px dashed var(--gv-color-border);background:transparent;color:var(--gv-color-text-muted);cursor:pointer;font-size:13px;line-height:1;padding:3px 9px;border-radius:4px}.gv-header-add-button:hover{background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent);color:var(--gv-color-text);border-style:solid}.gv-header-axis-empty{color:var(--gv-color-text-muted);font-size:11px;font-style:italic;padding:3px 6px}.gv-header-axis-label{color:var(--gv-color-text-muted);font-size:11px;letter-spacing:.04em;text-transform:uppercase;padding:3px 4px 3px 2px;align-self:center;-webkit-user-select:none;user-select:none}.gv-chip.all-included{border-color:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-ring),transparent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-weak),transparent);color:var(--gv-color-text-muted)}.gv-chip.all-included:hover{border-color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-active),transparent);color:var(--gv-accent)}.gv-lock-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;border:1px solid transparent;border-radius:5px;color:var(--gv-color-text-muted);cursor:pointer;opacity:.55;transition:opacity .15s ease,color .15s ease,background .15s ease}.gv-lock-toggle:hover{opacity:1;color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent)}.gv-lock-toggle.locked{opacity:1;color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-active),transparent);border-color:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-ring),transparent)}.gv-lock-toggle.flashing{animation:lockFlash .6s ease}@keyframes lockFlash{0%{box-shadow:0 0 #f59e0b8c;transform:scale(1)}40%{box-shadow:0 0 0 6px #f59e0b00;transform:scale(1.12)}to{box-shadow:0 0 #f59e0b00;transform:scale(1)}}.gv-graph-view{flex:1;min-height:0;height:100%;position:relative;background:var(--gv-color-bg-gradient);overflow:hidden}.gv-graph-view:focus-visible{outline:2px solid var(--gv-focus-ring-color);outline-offset:-2px}.gv-graph-diagnostics{background:color-mix(in srgb,var(--gv-color-surface) 92%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--gv-color-border);border-left:3px solid var(--gv-diagnostic-warning);font-family:var(--gv-font-sans);font-size:12px;color:var(--gv-color-text)}.gv-graph-diagnostics.has-errors{border-left-color:var(--gv-diagnostic-error)}.gv-graph-diagnostics>summary{cursor:pointer;padding:4px 12px;color:var(--gv-diagnostic-warning);font-weight:500}.gv-graph-diagnostics.has-errors>summary{color:var(--gv-diagnostic-error)}.gv-graph-diagnostics>ul{margin:0;padding:2px 12px 8px 28px;max-height:160px;overflow-y:auto}.gv-graph-diagnostic{margin:2px 0}.gv-graph-diagnostic code{font-family:var(--gv-font-mono);font-size:11px;margin-right:6px}.gv-graph-diagnostic.error code{color:var(--gv-diagnostic-error)}.gv-graph-diagnostic.warning code{color:var(--gv-diagnostic-warning)}.gv-graph-overlay{position:absolute;top:0;left:0;right:0;z-index:10;max-height:80vh;display:flex;flex-direction:column;pointer-events:none}.gv-graph-overlay>*{pointer-events:auto}.gv-graph-view .gv-canvas-header{border-radius:0;border:none;border-bottom:1px solid var(--gv-color-border);box-shadow:none;margin-bottom:0;background:color-mix(in srgb,var(--gv-color-surface) 88%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.gv-graph-bottom-left,.gv-graph-bottom-center{position:absolute;bottom:12px;z-index:10;display:flex;align-items:center;gap:8px;pointer-events:auto}.gv-graph-bottom-left{left:12px;transition:left .2s ease}.gv-graph-bottom-left.shifted{left:224px}.gv-graph-bottom-center{left:50%;transform:translate(-50%)}.gv-graph-count{font-size:12px;color:var(--gv-color-text-muted);font-family:var(--gv-font-mono);padding:3px 8px;border-radius:4px;background:color-mix(in srgb,var(--gv-color-surface) 80%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.gv-graph-count-fps{font-size:12px;color:var(--gv-color-text-muted);font-family:var(--gv-font-mono);opacity:.7;padding:3px 8px;border-radius:4px;background:color-mix(in srgb,var(--gv-color-surface) 80%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);min-width:52px;text-align:center;font-variant-numeric:tabular-nums}.gv-graph-count-fps.hidden{visibility:hidden}.gv-graph-toolbar-btn{padding:3px 10px;font-size:12px;font-weight:500;color:var(--gv-color-text-muted);background:color-mix(in srgb,var(--gv-color-surface) 85%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--gv-color-border);border-radius:4px;cursor:pointer;transition:all .15s;font-family:var(--gv-font-sans)}.gv-graph-toolbar-btn:hover{color:var(--gv-color-text);border-color:var(--gv-accent)}.gv-graph-toolbar-btn.active{color:var(--gv-accent);border-color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent)}.gv-graph-canvas-area{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;display:flex;flex-direction:column}.gv-graph-canvas-container{flex:1;position:relative;overflow:hidden}.gv-graph-canvas-container canvas{display:block;cursor:grab}.gv-graph-canvas-container canvas:active{cursor:grabbing}.gv-graph-hover-tooltip{position:absolute;transform:translate(14px,-50%);background:var(--gv-color-surface);border:1px solid var(--gv-color-border);border-radius:6px;padding:8px 10px;pointer-events:auto;z-index:20;min-width:140px;max-width:220px;box-shadow:var(--gv-tooltip-shadow)}.gv-tooltip-cross-view{margin-top:8px;width:100%;padding:4px 8px;font-size:11px;font-weight:500;font-family:var(--gv-font-sans);color:var(--gv-color-text-muted);background:transparent;border:1px solid var(--gv-color-border);border-radius:4px;cursor:pointer;transition:all .15s}.gv-tooltip-cross-view:hover{color:var(--gv-accent);border-color:var(--gv-accent);background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent)}.gv-tooltip-identity{display:flex;align-items:center;gap:5px;margin-bottom:4px}.gv-tooltip-type-icon{font-size:11px;line-height:1;flex-shrink:0}.gv-tooltip-name{font-family:var(--gv-font-mono);font-size:12px;font-weight:600;color:var(--gv-color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gv-tooltip-parent{font-size:11px;color:var(--gv-color-text-muted);font-family:var(--gv-font-mono);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gv-tooltip-summary{font-size:11px;color:var(--gv-color-text);font-family:var(--gv-font-mono);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gv-tooltip-file{font-size:10px;color:var(--gv-color-text-muted);opacity:.7;font-family:var(--gv-font-mono);margin-bottom:6px;white-space:nowrap}.gv-tooltip-duplicates{font-size:10px;font-family:var(--gv-font-mono);color:#8b7ec8;opacity:.85;margin-bottom:6px;white-space:nowrap}.gv-tooltip-connections{display:flex;gap:8px;margin-bottom:4px}.gv-tooltip-conn-out,.gv-tooltip-conn-in{font-size:11px;font-family:var(--gv-font-mono);color:var(--gv-color-text)}.gv-tooltip-direction{font-size:9px;color:var(--gv-color-text-muted);opacity:.6;text-transform:uppercase;letter-spacing:.4px;margin-top:2px}.gv-header-search-badge{padding:1px 6px;font-size:10px;font-weight:600;color:#f59e0b;background:#f59e0b1f;border-radius:8px;margin-right:4px}.gv-graph-search-results{background:var(--gv-color-surface);border:1px solid var(--gv-color-border);border-top:none;max-height:200px;overflow-y:auto;flex-shrink:0}.gv-graph-search-result{display:flex;align-items:center;gap:8px;padding:6px 16px;width:100%;border:none;background:transparent;cursor:pointer;text-align:left;font-family:var(--gv-font-sans);font-size:12px;color:var(--gv-color-text);transition:background .1s}.gv-graph-search-result:hover{background:color-mix(in srgb,var(--gv-accent) var(--gv-accent-tint-hover),transparent)}.gv-graph-search-result-type{font-size:10px;color:var(--gv-color-text-muted);text-transform:uppercase;min-width:60px}.gv-graph-search-result-name{font-family:var(--gv-font-mono);font-weight:500}.gv-graph-shortcuts-panel{position:absolute;bottom:12px;left:12px;background:var(--gv-color-surface);border:1px solid var(--gv-color-border);border-radius:8px;box-shadow:0 2px 8px #0000001a;z-index:10;padding:10px 14px;min-width:200px}.gv-graph-shortcuts-title{display:flex;align-items:center;justify-content:space-between;font-size:12px;font-weight:600;color:var(--gv-color-text);margin-bottom:8px}.gv-graph-shortcuts-close{border:none;background:transparent;color:var(--gv-color-text-muted);font-size:16px;cursor:pointer;padding:0 2px;line-height:1}.gv-graph-shortcuts-list{display:flex;flex-direction:column;gap:4px}.gv-graph-shortcut-row{display:flex;align-items:center;gap:10px}.gv-graph-shortcut-key{font-family:var(--gv-font-mono);font-size:10px;background:var(--gv-key-bg);border:1px solid var(--gv-color-border);border-radius:3px;padding:1px 5px;min-width:80px;color:var(--gv-color-text)}.gv-graph-shortcut-desc{font-size:11px;color:var(--gv-color-text-muted)}.gv-graph-control-panel{position:absolute;bottom:12px;right:12px;background:var(--gv-color-surface);border:1px solid var(--gv-color-border);border-radius:8px;box-shadow:0 2px 8px #0000001a;z-index:10;max-width:calc(100vw - 24px);max-height:calc(100% - 70px);display:flex;flex-direction:column}.gv-graph-control-panel.open{width:330px}.gv-graph-control-panel-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:6px 12px;border:none;background:transparent;color:var(--gv-color-text-muted);font-size:11px;font-weight:500;cursor:pointer;text-align:left;font-family:var(--gv-font-sans);flex-shrink:0}.gv-graph-control-panel-toggle:hover{color:var(--gv-color-text)}.gv-graph-control-panel-body{padding:0 12px 10px;overflow-y:auto;flex:1;min-height:0;font-size:12px;font-family:var(--gv-font-sans)}.gv-graph-control-group{margin-top:8px}.gv-graph-control-group-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--gv-color-text-muted);margin-bottom:4px}.gv-graph-control-tabs{display:flex;gap:2px;margin-top:8px;border-bottom:1px solid var(--gv-color-border)}.gv-graph-control-tab{flex:1;padding:5px 4px;border:none;background:transparent;color:var(--gv-color-text-muted);font-weight:600;cursor:pointer;font-family:var(--gv-font-sans);border-bottom:2px solid transparent;margin-bottom:-1px}.gv-graph-control-tab:hover{color:var(--gv-color-text)}.gv-graph-control-tab.active{color:var(--gv-color-text);border-bottom-color:var(--gv-color-text)}.gv-graph-control-sections{display:grid}.gv-graph-control-section-slot{grid-area:1 / 1;visibility:hidden;pointer-events:none;min-width:0}.gv-graph-control-section-slot.active{visibility:visible;pointer-events:auto}.gv-graph-control-subsection+.gv-graph-control-subsection{margin-top:8px;padding-top:8px;border-top:1px solid var(--gv-color-border)}.gv-graph-control-subsection-title{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--gv-color-text-muted)}.gv-graph-control-equation-section{margin-top:10px;padding-bottom:6px}.gv-graph-control-equation-header{display:flex;align-items:baseline;gap:6px;margin-bottom:2px}.gv-graph-control-equation-subtitle{font-size:9px;color:var(--gv-color-text-muted)}.gv-graph-control-equation-formula{font-family:var(--gv-font-mono);line-height:1.4;color:var(--gv-color-text-muted);margin:0 0 6px;padding:5px 8px;white-space:pre-wrap;text-align:center;background:color-mix(in srgb,var(--gv-color-text-muted) 7%,transparent);border:1px solid var(--gv-color-border);border-radius:6px}.gv-graph-control-equation-body{padding-left:2px}.gv-graph-control-sub-header{display:flex;gap:6px;margin-top:6px;margin-bottom:2px}.gv-graph-control-sub-label{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.3px;color:var(--gv-color-text-muted);opacity:.6}.gv-switch{position:relative;display:inline-flex;align-items:center;cursor:pointer}.gv-switch input{position:absolute;width:1px;height:1px;opacity:0;margin:0}.gv-switch-track{width:26px;height:14px;border-radius:7px;background:var(--gv-color-border);transition:background .15s ease;position:relative;display:inline-block}.gv-switch.on .gv-switch-track{background:var(--gv-accent)}.gv-switch-knob{position:absolute;top:2px;left:2px;width:10px;height:10px;border-radius:50%;background:#fff;transition:left .15s ease}.gv-switch.on .gv-switch-knob{left:14px}.gv-switch input:focus-visible+.gv-switch-track{box-shadow:0 0 0 2px var(--gv-focus-ring-color)}.gv-graph-control-panel-toggle,.gv-graph-control-tab,.gv-graph-control-equation-formula,.gv-graph-control-equation-subtitle,.gv-graph-control-sub-label,.gv-graph-control-slider-label,.gv-graph-control-slider-value,.gv-graph-control-band-label,.gv-graph-control-band-value,.gv-graph-control-checkbox{font-size:12px}.gv-eq-line{display:inline-flex;align-items:center;gap:4px;flex-wrap:wrap}.gv-eq-frac{display:inline-flex;flex-direction:column;align-items:center;text-align:center;vertical-align:middle}.gv-eq-num{border-bottom:1px solid currentColor;padding:0 4px;line-height:1.3;align-self:stretch;text-align:center}.gv-eq-den{padding:0 4px;line-height:1.3;text-align:center}.gv-graph-control-typed-row{padding-left:6px;border-left:2px solid var(--gv-type-color, transparent)}.gv-graph-control-typed-row input[type=range]{accent-color:var(--gv-type-color)}.gv-graph-control-typed-row .gv-graph-control-slider-label,.gv-graph-control-typed-row .gv-graph-control-band-label{color:var(--gv-type-color);opacity:.95;font-weight:500}.gv-graph-control-band-row{display:flex;align-items:center;gap:6px;margin-bottom:4px}.gv-graph-control-band-label{font-size:9px;color:var(--gv-color-text-muted);min-width:40px;white-space:nowrap;font-family:var(--gv-font-mono)}.gv-graph-control-band-value{font-size:9px;font-family:var(--gv-font-mono);color:var(--gv-color-text-muted);min-width:28px;text-align:right}.gv-graph-control-checkbox{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:10px;color:var(--gv-color-text-muted);cursor:pointer;-webkit-user-select:none;user-select:none}.gv-graph-control-checkbox input[type=checkbox]{accent-color:var(--gv-accent);cursor:pointer}.gv-graph-control-slider{display:flex;align-items:center;gap:6px;margin-bottom:2px}.gv-graph-control-slider-label{font-size:10px;color:var(--gv-color-text-muted);min-width:70px;white-space:nowrap}.gv-graph-control-slider-value{font-size:10px;font-family:var(--gv-font-mono);color:var(--gv-color-text-muted);min-width:30px;text-align:right}.gv-graph-control-sim-buttons{display:flex;gap:6px;margin-top:4px}.gv-force-subtabs{display:flex;gap:2px;border-bottom:1px solid var(--gv-color-border)}.gv-force-subtab{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:5px 4px;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;background:transparent;color:var(--gv-color-text-muted);font-size:12px;font-family:var(--gv-font-sans);cursor:pointer;-webkit-user-select:none;user-select:none}.gv-force-subtab:hover{color:var(--gv-color-text)}.gv-force-subtab.active{color:var(--gv-color-text);border-bottom-color:var(--gv-accent)}.gv-force-subtab-label{font-weight:600}.gv-force-bodies{display:grid}.gv-force-body{grid-area:1 / 1;min-width:0}.gv-force-body:not(.active){visibility:hidden;pointer-events:none}.gv-pushpull-controls{display:flex;flex-direction:column;gap:6px}.gv-axis-row{display:flex;justify-content:center;align-items:center;gap:6px}.gv-axis-label{font-size:12px;color:var(--gv-color-text-muted);font-family:var(--gv-font-sans)}.gv-axis-select{font-size:12px;font-family:var(--gv-font-sans);color:var(--gv-color-text);background:transparent;border:1px solid var(--gv-color-border);border-radius:6px;padding:3px 8px}.gv-spring-map-svg{grid-area:plot;display:block;width:100%;height:auto;overflow:visible;touch-action:none}.gv-spring-axis-label{color:var(--gv-color-text-muted);align-self:center;justify-self:center}.gv-spring-curves-axis-x{grid-area:axisX}.gv-spring-curves-axis-y{grid-area:axisY;writing-mode:vertical-rl;transform:rotate(180deg)}.gv-spring-plot-bg{fill:var(--gv-color-bg);opacity:.5}.gv-spring-grid{stroke:var(--gv-color-border);stroke-width:1;opacity:.6}.gv-spring-token{cursor:grab}.gv-spring-token:active{cursor:grabbing}.gv-spring-token.dim{opacity:.3}.gv-spring-token-outline{stroke:var(--gv-color-text);stroke-opacity:.55;stroke-width:1.2}.gv-spring-token.active .gv-spring-token-outline{stroke-opacity:.95;stroke-width:1.8}.gv-spring-token-label{font-size:11px;fill:var(--gv-color-text-muted);pointer-events:none;-webkit-user-select:none;user-select:none}.gv-spring-token.active .gv-spring-token-label{fill:var(--gv-color-text);font-weight:600}.gv-spring-curves{display:grid;grid-template-columns:16px 1fr;grid-template-rows:1fr 18px auto;grid-template-areas:"axisY plot" ". axisX" ". exp";row-gap:4px;margin-top:10px}.gv-spring-curves-svg{grid-area:plot;display:block;width:100%;height:auto;overflow:visible}.gv-ctl-grid-line{stroke:var(--gv-color-border);stroke-width:1;opacity:.35;pointer-events:none}.gv-spring-curve-frame{fill:none;stroke:var(--gv-color-border);stroke-width:1}.gv-spring-curve-baseline{stroke:var(--gv-color-border);stroke-width:1}.gv-spring-curve-restmark{stroke:var(--gv-color-text-muted);stroke-width:1;stroke-dasharray:2 2;opacity:.6}.gv-spring-curve-label{font-family:var(--gv-font-mono);font-size:10px;font-weight:600;pointer-events:none;-webkit-user-select:none;user-select:none}.gv-spring-curve-line{fill:none;stroke-width:1.25;opacity:.3}.gv-spring-curve-hit{fill:none;stroke:transparent;stroke-width:8;cursor:pointer}.gv-spring-curve.active .gv-spring-curve-line{opacity:1;stroke-width:2}.gv-spring-curve.dim .gv-spring-curve-line{opacity:.15}.gv-spring-curves-exp{grid-area:exp;display:flex;flex-direction:column;align-items:stretch;gap:2px;margin-top:8px}.gv-spring-exp-label{color:var(--gv-color-text-muted)}.gv-ctl-slider{margin:0;cursor:pointer;accent-color:var(--gv-accent)}.gv-ctl-slider-h{width:100%;height:4px}.gv-ctl-slider-v{writing-mode:vertical-lr;direction:rtl;width:4px;height:100%}.gv-ctl-slider-popped{border-radius:5px;box-shadow:0 0 0 3px color-mix(in srgb,var(--gv-accent) 38%,transparent)}.gv-ctl-formula-value{cursor:pointer;border-radius:3px;padding:0 2px;transition:background .1s ease,color .1s ease}.gv-ctl-formula-value:hover,.gv-ctl-formula-value.active{background:color-mix(in srgb,var(--gv-accent) 22%,transparent);color:var(--gv-color-text)}.gv-ctl-plot{display:grid;grid-template-columns:16px 14px 1fr;grid-template-rows:1fr auto;grid-template-areas:"ylabel yslider plot" ". . bottom";align-items:stretch;row-gap:2px;margin-top:10px}.gv-ctl-plot-ylabel{grid-area:ylabel;align-self:center;justify-self:center;color:var(--gv-color-text-muted);writing-mode:vertical-rl;transform:rotate(180deg)}.gv-ctl-plot-yslider{grid-area:yslider;position:relative}.gv-ctl-plot-yslider .gv-ctl-slider-v{position:absolute;top:0;bottom:0;left:50%;height:auto;transform:translate(-50%)}.gv-ctl-plot-main{grid-area:plot;min-width:0}.gv-ctl-plot-bottom{grid-area:bottom;display:flex;flex-direction:column;row-gap:2px}.gv-ctl-plot-xlabel{color:var(--gv-color-text-muted);text-align:center}.gv-gravity-controls{margin-top:8px;display:flex;flex-direction:column;gap:8px}.gv-gravity-section-tools{display:flex;flex-direction:column;gap:4px}.gv-gravity-section-tools.inactive{opacity:.5}.gv-gravity-band-svg{display:block;width:100%;height:auto;overflow:visible;touch-action:none}.gv-gravity-band-bg{fill:var(--gv-color-bg);opacity:.5}.gv-gravity-band-stripes{pointer-events:none}.gv-gravity-band-stripe{opacity:.16}.gv-gravity-band-stripe.dim{opacity:.05}.gv-gravity-band-stripe.active{opacity:.3}.gv-gravity-band-track{stroke:var(--gv-color-border);stroke-width:1;opacity:.5}.gv-gravity-band-stem{stroke-width:2;opacity:.7}.gv-gravity-band-dot{cursor:ns-resize;stroke:var(--gv-color-surface);stroke-width:1}.gv-gravity-band-label{font-family:var(--gv-font-sans);font-size:11px}.gv-gravity-band-col.dim{opacity:.35}.gv-gravity-topo{display:flex;flex-direction:column;gap:4px}.gv-gravity-slider-row{display:flex;align-items:center;gap:6px}.gv-gravity-topo-curve{display:block;width:100%;height:auto;margin-top:2px}.gv-gravity-topo-curve-line{fill:none;stroke:var(--gv-accent);stroke-width:1.5}.gv-gravity-topo-curve-axis{font-family:var(--gv-font-sans);font-size:10px;fill:var(--gv-color-text-muted)}.gv-axis-note{font-size:11px;color:var(--gv-color-text-muted);font-family:var(--gv-font-sans)}.gv-gravity-scalar-gradient{pointer-events:none}.gv-gravity-scalar-dot{fill:var(--gv-color-text)}.gv-group-legend{color:var(--gv-color-text);position:absolute;top:calc(var(--gv-toolbar-height, 0px) + 12px);left:12px;z-index:9;padding:8px 10px;font-family:var(--gv-font-sans);font-size:12px;background:var(--gv-color-surface);border:1px solid var(--gv-color-border);border-radius:8px;box-shadow:var(--gv-tooltip-shadow)}.gv-group-legend-title{font-weight:600;margin-bottom:4px}.gv-group-legend-row{display:flex;align-items:center;gap:6px;padding:2px 0}label.gv-group-legend-row{cursor:pointer}.gv-group-legend-row.off .gv-group-legend-label{color:var(--gv-color-text-muted)}.gv-group-legend-swatch{width:10px;height:10px;border-radius:50%;border:1px solid var(--gv-color-border);flex:none}.gv-group-legend-note{color:var(--gv-color-text-muted);font-size:11px}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@jmbarzee/force-graph",
3
+ "version": "0.0.1",
4
+ "description": "A force-directed graph view with composable axes: a host declares the axes, values, colours and physics of its nodes and edges, and the view lays out, filters, highlights and tunes the graph without knowing what any of it means.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/jmbarzee/force-graph",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/jmbarzee/force-graph.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/jmbarzee/force-graph/issues"
14
+ },
15
+ "keywords": [
16
+ "graph",
17
+ "force-directed",
18
+ "visualization",
19
+ "react"
20
+ ],
21
+ "main": "./dist-lib/index.js",
22
+ "module": "./dist-lib/index.js",
23
+ "types": "./dist-lib/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist-lib/index.d.ts",
27
+ "import": "./dist-lib/index.js"
28
+ },
29
+ "./styles.css": "./dist-lib/styles.css"
30
+ },
31
+ "files": [
32
+ "dist-lib",
33
+ "README.md",
34
+ "LICENSE"
35
+ ],
36
+ "sideEffects": [
37
+ "**/*.css"
38
+ ],
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "scripts": {
43
+ "typecheck": "tsc --noEmit -p tsconfig.json",
44
+ "test": "vitest run",
45
+ "build:lib": "vite build --config vite.lib.config.ts && node verify/prune-dts.mjs",
46
+ "prepublishOnly": "npm run build:lib"
47
+ },
48
+ "peerDependencies": {
49
+ "react": "^18 || ^19",
50
+ "react-dom": "^18 || ^19"
51
+ },
52
+ "devDependencies": {
53
+ "@types/react": "^18.3.12",
54
+ "@types/react-dom": "^18.3.1",
55
+ "@vitejs/plugin-react": "^4.3.4",
56
+ "react": "^18.3.1",
57
+ "react-dom": "^18.3.1",
58
+ "typescript": "^5.6.3",
59
+ "vite": "^6.0.5",
60
+ "vite-plugin-dts": "^5.0.0",
61
+ "vitest": "4.1.12"
62
+ }
63
+ }