New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@bagaking/dayboxing

Package Overview
Dependencies
Maintainers
0
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bagaking/dayboxing

A React component library for DayBoxing time management visualization

latest
npmnpm
Version
0.1.22
Version published
Maintainers
0
Created
Source

DayBoxing

DayBoxing 是一个基于 React 的时间管理可视化组件库,它实现了 QH 分析法则,帮助你直观地展示和分析每日时间分配。

功能特性

  • 🎯 基于 QH 分析法则
    • 支持 A/B/C/F 四段时间分析
    • 自动识别 Full/Mix/Balance/Chaos 四种时间段模式
    • 智能计算时间分布比例
  • 🛠 灵活的配置选项
    • 支持多种时间模式定义方式
    • 可自定义主题和样式
    • 支持快捷键操作
  • 📱 响应式设计
    • 支持水平/垂直布局
    • 自适应容器尺寸

安装

npm install @bagaking/dayboxing 
# or yarn install @bagaking/dayboxing
# or pnpm install @bagaking/dayboxing

基础使用

快速开始

最简单的使用方式是通过时间类型数组定义模式:

import { DayBoxing } from '@bagaking/dayboxing';

function App() {
  return (
    <DayBoxing 
      patterns={[
        // 每个字符串代表一个小时的时间类型
        ["sleep", "sleep", "sleep", "work", "work", "life", "relax"]
      ]}
      dates={["2024-03-15"]}
    />
  );
}

详细配置

使用对象方式可以定义更详细的时间块信息:

const pattern = {
  startHour: -3,  // 从前一天 21:00 开始
  blocks: [
    { type: "sleep", duration: 8, comment: "Night sleep" }, 
    { type: "work", duration: 4, comment: "Morning focus" },
    { type: "life", duration: 1, comment: "Lunch break" },
    { type: "work", duration: 4, comment: "Afternoon work" },
    { type: "relax", duration: 4, comment: "Evening activities" }
  ]
};

function App() {
  return (
    <DayBoxing 
      patterns={[pattern]}
      dates={["2024-03-15"]}
      editable={true}
    />
  );
}

也可以使用混合的写法

const pattern = {
  startHour: -3,  // 从前一天 21:00 开始
  blocks: [
    "sleep", "sleep", "sleep", "sleep", "sleep", "sleep",
    { type: "sleep", duration: 2, comment: "Dream" }, 
    { type: "work", duration: 4, comment: "Morning focus" },
    { type: "life", duration: 1, comment: "Lunch break" },
    { type: "work", duration: 4, comment: "Afternoon work" },
    { type: "relax", duration: 4, comment: "Evening activities" }
  ]
};

## 高级特性

### 主题定制

```tsx
const theme = {
  colors: {
    sleep: "#A78BFA",
    work: "#60A5FA",
    life: "#34D399",
    relax: "#FBBF24",
    background: "#ffffff",
    text: "#1f2937",
  },
  cellSize: 40,
  gap: 2,
  borderRadius: 4,
};

<DayBoxing theme={theme} {...props} />

快捷键配置

const shortcuts = {
  s: "sleep",
  w: "work",
  l: "life",
  r: "relax"
};

<DayBoxing 
  shortcuts={shortcuts}
  editable={true}
  {...props} 
/>

自定义渲染

const CustomHour = ({ hour, date }) => (
  <div className="hour-cell">
    <div className="time">{hour.hour}:00</div>
    {hour.comment && (
      <div className="comment">{hour.comment}</div>
    )}
  </div>
);

const CustomDateLabel = ({ date }) => (
  <div className="date-label">
    {new Date(date).toLocaleDateString()}
  </div>
);

<DayBoxing 
  renderHour={CustomHour}
  renderDateLabel={CustomDateLabel}
  {...props} 
/>

事件处理

function App() {
  const handleHourChange = (event) => {
    const { hour, date, oldType, newType } = event;
    console.log(`Hour ${hour} changed: ${oldType} -> ${newType}`);
  };

  const handlePatternEdit = (event) => {
    const { date, type, payload } = event;
    console.log(`Pattern edited: ${type}`, payload);
  };

  return (
    <DayBoxing 
      onHourChange={handleHourChange}
      onPatternEdit={handlePatternEdit}
      {...props} 
    />
  );
}

API 参考

DayBoxing Props

属性类型必填默认值描述
patterns(DayPattern | string[])[]-时间模式数组
datesstring[]-日期数组
direction'horizontal' | 'vertical''horizontal'布局方向
themeThemeConfigdefaultTheme主题配置
editablebooleanfalse是否可编辑
shortcutsRecord<string, HourType>{}快捷映射
showDateLabelbooleantrue是否显示日期标签
onHourChange(event: HourChangeEvent) => void-时间类型变更回调
onPatternEdit(event: PatternEditEvent) => void-模式编辑回调
renderHour(hour: HourData, date: string) => ReactNode-自定义小时渲染
renderDateLabel(date: string) => ReactNode-自定义日期标签渲染

类型定义

interface DayPattern {
  startHour?: number;
  blocks: Array<{
    type: HourType;
    duration: number;
    comment?: string;
  }>;
}

type HourType = "sleep" | "work" | "life" | "relax";

interface HourChangeEvent {
  hour: number;
  date: string;
  oldType: HourType;
  newType: HourType;
  comment?: string;
}

interface PatternEditEvent {
  date: string;
  type: "moveStart" | "addBlock" | "removeBlock" | "updateBlock";
  payload: any;
}

Qh 分析策略

DayBoxing 基于 QH 分析法则,将一天划分为四个时间段(A/B/C/F),用于分析时间分配的合理性。

时间段划分

  • A 段(7小时):通常是完整的睡眠时间
  • B 段(7小时):通常是核心工作时间
  • C 段(7小时):混合时间段
  • F 段(0-7小时):灵活时间段,长度可变

时间段模式

每个时间段都会被自动分析并归类为以下模式之一:

  • Full Part (FP)

    • 单一类型时间占比 ≥ 80%
    • 例如:S(fp) 表示整段都是睡眠时间
  • Mix Part (MP)

    • 主导类型占比 60-80%
    • 次要类型至少 2 小时
    • 例如:W-B(mp) 表示以工作为主,基础活动为辅
  • Balance Part (BP)

    • 两种类型各占比 ≥ 35%
    • 例如:W-R(bp) 表示工作和休息时间大致相当
  • Chaos Part (CP)

    • 三种及以上类型各占比 ≥ 20%
    • 通常表示时间管理效率较低

分析规则

  • A 段理想状态应为 S(fp),否则表示睡眠时间不足
  • B 段建议为 Mix Part,避免出现 Chaos Part
  • C 段可以是任意类型,但不建议是 Chaos Part
  • F 段长度可变(0-7小时),用于调节作息灵活性
// 一个良好的时间分配示例
const pattern = {
  startHour: -3,  // 21:00 开始
  blocks: [
    { type: "sleep", duration: 8 },  // A段: S(fp)
    { type: "work", duration: 6 },   // B段: W-B(mp)
    { type: "life", duration: 1 },
    { type: "work", duration: 4 },   // C段: W-R(bp)
    { type: "relax", duration: 3, comment: "Evening activities" },
    { type: "relax", duration: 2 }   // F段: R(fp)
  ]
};

License

MIT © bagaking

Keywords

react

FAQs

Package last updated on 24 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts