@tannerbroberts/about-time-core
v0.2.0
Published
Core template operations and validation for about-time
Maintainers
Readme
@tannerbroberts/about-time-core
Core template operations and validation for about-time.
Installation
npm install @tannerbroberts/about-time-coreCore Concepts
Templates represent scheduled activities. There are two types:
- BusyTemplate: An atomic task with a duration (e.g., "Boil water for 5 minutes")
- LaneTemplate: A container that holds other templates at specific time offsets
Visual Representation
⚠️ Note: The
visualizeLanefunction is a debugging/development utility only. It's useful for understanding lane structures during development, but production applications should use a proper frontend UI for visualization.
Templates can be visualized using ASCII art where each character represents 1 second:
█░██ ← grandchild busy templates
░______░░░░ ← child lane segment
____________ ← root lane (12 seconds)Legend:
█= busy template (active work)_= lane template (container)░= empty space (gap within a lane)= outside the lane's span
Usage
import {
createBusyTemplate,
createLaneTemplate,
visualizeLane,
TemplateMap,
} from '@tannerbroberts/about-time-core';
const templates: TemplateMap = {};
// Create busy templates
const prep = createBusyTemplate({
intent: 'Prep ingredients',
estimatedDuration: 2000, // 2 seconds
}, templates, crypto.randomUUID);
const cook = createBusyTemplate({
intent: 'Cook',
estimatedDuration: 3000, // 3 seconds
}, templates, crypto.randomUUID);
// Create a lane to organize the tasks
const recipe = createLaneTemplate({
intent: 'Make dinner',
estimatedDuration: 8000, // 8 seconds
segments: [
{ templateId: prep.id, relationshipId: 'r1', offset: 0 },
{ templateId: cook.id, relationshipId: 'r2', offset: 3000 },
],
}, templates, crypto.randomUUID);
// Visualize the lane
console.log(visualizeLane(recipe.id, templates));
// Output:
// ██░███░░
// ________Nested Lanes
Lanes can contain other lanes, enabling complex scheduling hierarchies:
const task = createBusyTemplate({
intent: 'Task',
estimatedDuration: 1000,
}, templates, crypto.randomUUID);
const innerLane = createLaneTemplate({
intent: 'Inner',
estimatedDuration: 2000,
segments: [{ templateId: task.id, relationshipId: 'r1', offset: 0 }],
}, templates, crypto.randomUUID);
const middleLane = createLaneTemplate({
intent: 'Middle',
estimatedDuration: 4000,
segments: [{ templateId: innerLane.id, relationshipId: 'r2', offset: 1000 }],
}, templates, crypto.randomUUID);
const rootLane = createLaneTemplate({
intent: 'Root',
estimatedDuration: 6000,
segments: [{ templateId: middleLane.id, relationshipId: 'r3', offset: 1000 }],
}, templates, crypto.randomUUID);
console.log(visualizeLane(rootLane.id, templates));
// Output:
// █░ ← task (deepest)
// ░__░ ← inner lane
// ░____░ ← middle lane
// ______ ← root laneResource Management
Templates can track resource consumption and production:
const boilWater = createBusyTemplate({
intent: 'Boil water',
estimatedDuration: 5000,
willConsume: { water_cups: 2, clean_pot: 1 },
willProduce: { boiling_water_cups: 2 },
}, templates, crypto.randomUUID);Exports
| Path | Description |
|------|-------------|
| @tannerbroberts/about-time-core | Everything |
| @tannerbroberts/about-time-core/types | Type definitions only |
| @tannerbroberts/about-time-core/templates | Template CRUD + layout operations |
| @tannerbroberts/about-time-core/layout | Layout utilities only (visualizeLane, packSegments, etc.) |
| @tannerbroberts/about-time-core/validation | Validation functions |
Documentation
See spec.md for complete API documentation.
License
MIT
