Skip to content

样式与扩展

Vue 插槽

组件开放表头、任务信息、负责人、进度、任务条、纹理层、动效层、依赖线、空状态、工具条和行级边缘按钮插槽。

vue
<YgGantt :tasks="tasks">
  <template #bar="{ task, progress }">
    <MyTaskBar :task="task" :progress="progress" />
  </template>

  <template #edge-indicator="{ task, side, jump }">
    <button type="button" @click="jump">
      {{ side === 'left' ? '←' : '→' }} {{ task.title }}
    </button>
  </template>
</YgGantt>

barLayoutResolver 可以按任务、维度与几何结果修改任务条高度、最小宽度和圆角。dependencyPathResolverdependencyStyleResolver 可接管依赖线路径与样式。

React Render Props

tsx
<YgGantt
  tasks={tasks}
  renderBar={({ task, progress, selected }) => (
    <TaskBar task={task} progress={progress} selected={selected} />
  )}
  renderEdgeIndicator={({ task, side, jump }) => (
    <button type="button" onClick={jump}>{side} · {task.title}</button>
  )}
/>

renderDependency 可替换完整 SVG 路径;renderTaskrenderOwnerrenderProgress 可接入宿主任务表组件。

Flutter Builder

dart
YotsubaGantt(
  tasks: tasks,
  taskBarBuilder: (context, details) {
    return ColoredBox(
      color: details.task.color ?? Colors.green,
      child: Text(details.task.title),
    );
  },
  rowHeaderBuilder: (context, task, rowIndex) {
    return ListTile(dense: true, title: Text(task.title));
  },
  entryTransitionBuilder: (context, child, animation) {
    return FadeTransition(opacity: animation, child: child);
  },
  edgeIndicatorBuilder: (context, details) {
    return IconButton(
      onPressed: details.jump,
      icon: Icon(details.side == YgEdgeSide.left
        ? Icons.chevron_left
        : Icons.chevron_right),
    );
  },
)

默认动效只使用 transformopacity 或描边偏移,并受视口预算控制。宿主可以关闭内置过渡,或通过插槽、Builder 和 CSS 自行实现效果。

以 MIT License 开源