跳转到内容

pivotick v3.0.0


Pivotick ​

Pivotick是一个可破解的TypeScript图形可视化库,构建在D3力模拟之上。它通过交互式控件、力模拟、树布局支持以及侧边栏、数据表、上下文菜单和工具提示等可选 UI 元素来渲染有向或无向图形。

它还执行其命名的操作:pivot从数据所在的任何位置获取更多图表,将结果作为您分类的候选结果而不是将它们放在画布上,并且可以写回您保留的内容 - 具有画布上所有内容的撤消历史记录。

Pivotick完整UI

核心功能 ​

  • 有向图和无向图渲染
  • 拓展 — 针对画布上的内容运行丰富操作,在停靠窗格中对结果进行分类,并仅提取您保留的内容
  • 将拓展表的结果保存回其来源系统,并记录已交叉和未交叉的分类帐
  • 作为一条时间线撤消和重做画布上的内容(摄取、删除、隐藏和手绘元素)
  • 来源:每个节点和边缘都知道哪些来源为其提供担保,并且可以删除一个来源的贡献
  • 基于力的模拟,具有可选的工人支持
  • 树/层次结构布局支持,层次结构由数据推断或声明
  • 自调整力布局,或从“物理”弹出按钮手动调整
  • 停靠在画布下方的数据表,与画布和侧边栏共享一个选择
  • 小地图、多键过滤图例和声明性过滤面板
  • 边缘层 - 按种类键入边缘,按种类设置样式,并在不移动图形的情况下打开和关闭
  • 不同的 UI 模式(full、light、viewer、static)
  • 可配置的节点/边缘样式、标签、边缘徽章和回调
  • 交互式编辑 - 使用验证和丰富挂钩进行节点编辑和边缘创建(拖动或单击)
  • 可扩展插件 API,用于添加自定义 UI,包括左侧栏上您自己的模式

使用 Pivotick 的项目 ​

Pivotick 帮助社区在威胁情报、漏洞研究和安全调查中探索关联数据。 请查看社区展示中列出的项目:

项目它的作用
Rulezet浏览、分享和管理网络安全检测规则。
CTI Transmute在 MISP 与 STIX 格式之间转换网络威胁情报。
CPE Editor · 源代码搜索和编辑通用平台枚举(CPE)条目。
Vulnerability-Lookup · CIRCL 实例收集、关联和分享漏洞信息。
AIL Project为威胁情报收集、爬取和分析非结构化数据。
Threat Actor Explorer在浏览器中探索 MISP galaxy 数据集中的威胁行为者。
FlowIntel组织安全调查、案件和分析师任务。
CIRCL了解 CIRCL 维护的开源网络安全项目。
MISP使用开放标准分享、存储和关联威胁情报。

正在用 Pivotick 构建项目? 我们很乐意在这里展示它!请在 issue #34 中分享项目名称、链接以及你如何使用 Pivotick 的简短说明。欢迎任何规模的项目。

浏览文档中的项目展示。

快速入门 ​

基本用法 ​

Pivotick 可以用作现代 JavaScript 模块,也可以通过脚本标签直接在浏览器中使用。

js
import { Pivotick } from 'pivotick'
import 'pivotick/dist/pivotick.css'

new Pivotick({
  container: document.getElementById('app'),
  data: {
    nodes: [
      { id: 1, data: { label: 'A' } },
      { id: 2, data: { label: 'B' } }
    ],
    edges: [
      { from: 1, to: 2 }
    ]
  }
})

安装 ​

bash
npm install pivotick

1. 使用 GitHub 版本(无需构建) ​

如果您不想自己构建项目,请从 GitHub 下载最新版本。

步骤:

  1. 转到存储库的发布页面
  2. 下载最新的 dist 包
  3. 将其提取到您的项目中

您应该获得如下文件:

pivotick.es.js
pivotick.umd.js
pivotick.iife.js
pivotick.css

然后根据您的环境使用它们:

ES模块(推荐)

js
import { Pivotick } from 'pivotick'
import 'pivotick/dist/pivotick.css'

const app = new Pivotick({
    container: document.getElementById('app'),
    data: {
        nodes: [
            { id: 1, data: { label: 'A' } },
            { id: 2, data: { label: 'B' } }
        ],
        edges: [
            { from: 1, to: 2 }
        ]
    }
})

浏览器(IIFE / UMD)

html
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="/assets/pivotick.css" />
    <script src="/assets/pivotick.iife.js"></script>
  </head>
  <body>
    <div id="app"></div>

    <script>
      const app = new Pivotick({
        container: document.getElementById('app'),
        data: {
          nodes: [
            { id: 1, data: { label: 'A' } },
            { id: 2, data: { label: 'B' } }
          ],
          edges: [
            { from: 1, to: 2 }
          ]
        }
      })
    </script>
  </body>
</html>

如果您想要完全控制库或需要修改它,请使用此选项。

bash
git clone https://github.com/pivotick/pivotick.git
cd pivotick
npm install
npm run build

构建后,编译后的文件将在以下位置可用:

dist/

然后您可以根据您的环境直接导入它们:

ES模块

js
import { Pivotick } from './dist/pivotick.es.js'
import './dist/pivotick.css'

浏览器构建

html
<script src="./dist/pivotick.iife.js"></script>

样式 ​

Pivotick 带有pivotick.css 中包含的默认样式:

您可以通过两种方式自定义外观:

css
:root {
  --pvt-node-color: #FDDA24;
  --pvt-node-stroke: #000000;
  --pvt-edge-stroke: #EF3340;
}

.pvt-node circle {
  fill: cyan;
}

文档与 API 参考 ​

项目脚本 ​

bash
npm run dev               # Start Vite dev server
npm run build             # Build full project (types + all bundles)
npm run build:es          # Build ES module bundle
npm run build:browser     # Build browser (UMD + IIFE) bundle
npm run build:worker      # Build worker bundle
npm run preview           # Preview production build

npm run lint              # Run ESLint
npm run lint_fix          # Fix lint issues

npm run vitepress:dev     # Run documentation site locally
npm run vitepress:build   # Build documentation site
npm run vitepress:preview # Preview documentation build

npm run typedoc:dev       # Watch TypeDoc output
npm run typedoc:build     # Generate API docs

npm run docs:build        # Build full documentation (typedoc + vitepress)

参与贡献 ​

  1. 创建分支
  2. 运行npm run build和npm run lint
  3. 打开一个拉取请求,其中包含行为和 API 更改的简明摘要
  4. 保持 PR 的重点和小规模