@echothink-ui/todo 0.1.0

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
+ {"version":3,"sources":["../src/index.tsx","../src/components/TodoList.tsx","../src/components/TodoItem.tsx","../src/utils.ts","../src/components/KanbanBoard.tsx","../src/components/KanbanColumn.tsx","../src/components/TaskCard.tsx","../src/components/TaskTable.tsx","../src/components/TaskDependencyList.tsx","../src/components/TaskTimeline.tsx"],"sourcesContent":["import \"./styles.css\";\n\nexport * from \"./types\";\nexport { TodoList, type TodoListProps } from \"./components/TodoList\";\nexport { TodoItem, type TodoItemProps } from \"./components/TodoItem\";\nexport { KanbanBoard, type KanbanBoardProps } from \"./components/KanbanBoard\";\nexport { KanbanColumn, type KanbanColumnProps } from \"./components/KanbanColumn\";\nexport { TaskCard, type TaskCardProps } from \"./components/TaskCard\";\nexport { TaskTable, type TaskTableProps } from \"./components/TaskTable\";\nexport {\n TaskDependencyList,\n type TaskDependencyListProps\n} from \"./components/TaskDependencyList\";\nexport { TaskTimeline, type TaskTimelineProps } from \"./components/TaskTimeline\";\n\nexport const TodoComponentNames = [\n \"TodoList\",\n \"TodoItem\",\n \"KanbanBoard\",\n \"KanbanColumn\",\n \"TaskCard\",\n \"TaskTable\",\n \"TaskDependencyList\",\n \"TaskTimeline\"\n] as const;\nexport type TodoComponentName = (typeof TodoComponentNames)[number];\n","import * as React from \"react\";\nimport { Button, Panel, TextInput } from \"@echothink-ui/core\";\nimport { PlusIcon } from \"@echothink-ui/icons\";\nimport type { TodoTaskItem } from \"../types\";\nimport { TodoItem } from \"./TodoItem\";\n\nexport interface TodoListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onToggle\"> {\n items?: TodoTaskItem[];\n onToggle?: (id: string) => void;\n onAdd?: (label: string) => void;\n}\n\nexport function TodoList({ items = [], onToggle, onAdd, className, ...props }: TodoListProps) {\n const [label, setLabel] = React.useState(\"\");\n const completedCount = items.filter((item) => item.done).length;\n const openCount = items.length - completedCount;\n const summary = items.length\n ? `${openCount} open / ${completedCount} done`\n : \"No tasks yet\";\n\n const submit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!label.trim() || !onAdd) return;\n onAdd(label.trim());\n setLabel(\"\");\n };\n\n return (\n <Panel\n {...props}\n className={`eth-todo-list ${className ?? \"\"}`}\n title=\"To-do\"\n subtitle={summary}\n data-eth-component=\"TodoList\"\n >\n {items.length ? (\n <div\n className=\"eth-todo-list__items\"\n role=\"list\"\n aria-label=\"Tasks\"\n >\n {items.map((item) => (\n <TodoItem key={item.id} item={item} onToggle={onToggle} role=\"listitem\" />\n ))}\n </div>\n ) : (\n <p className=\"eth-todo-list__empty\">No tasks have been added.</p>\n )}\n {onAdd ? (\n <form className=\"eth-todo-list__add\" aria-label=\"Add task\" onSubmit={submit}>\n <TextInput\n value={label}\n labelText=\"New task\"\n hideLabel\n placeholder=\"Add a task\"\n onChange={(event) => setLabel(event.currentTarget.value)}\n />\n <Button type=\"submit\" icon={<PlusIcon />} disabled={!label.trim()}>\n Add\n </Button>\n </form>\n ) : null}\n </Panel>\n );\n}\n","import * as React from \"react\";\nimport { Badge, Checkbox, Tag } from \"@echothink-ui/core\";\nimport type { TodoTaskItem } from \"../types\";\nimport { formatDateTime, priorityLabel, prioritySeverity } from \"../utils\";\n\nexport interface TodoItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onToggle\"> {\n item: TodoTaskItem;\n onToggle?: (id: string) => void;\n}\n\nfunction validDateTimeAttribute(value: string | undefined) {\n if (!value) return undefined;\n return Number.isNaN(new Date(value).getTime()) ? undefined : value;\n}\n\nexport function TodoItem({ item, onToggle, className, ...props }: TodoItemProps) {\n const hasMeta = Boolean(item.assignee || item.priority || item.dueAt);\n const dueDateTime = validDateTimeAttribute(item.dueAt);\n const itemClassName = [\n \"eth-todo-item\",\n hasMeta ? \"eth-todo-item--has-meta\" : \"\",\n item.done ? \"eth-todo-item--done\" : \"\",\n className ?? \"\"\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n {...props}\n className={itemClassName}\n data-priority={item.priority}\n data-state={item.done ? \"done\" : \"open\"}\n data-eth-component=\"TodoItem\"\n >\n <div className=\"eth-todo-item__content eth-todo-item__primary\">\n <Checkbox\n checked={item.done}\n className=\"eth-todo-item__checkbox\"\n label={<span className=\"eth-todo-item__label\">{item.label}</span>}\n onChange={() => onToggle?.(item.id)}\n />\n </div>\n {hasMeta ? (\n <div className=\"eth-todo-item__meta\" role=\"group\" aria-label=\"Task details\">\n {item.priority ? (\n <Badge className=\"eth-todo-item__tag\" severity={prioritySeverity(item.priority)}>\n {priorityLabel(item.priority)}\n </Badge>\n ) : null}\n {item.assignee ? <Tag className=\"eth-todo-item__tag\">{item.assignee}</Tag> : null}\n {item.dueAt ? (\n <span className=\"eth-todo-item__due\">\n <span className=\"eth-todo-item__due-label\">Due</span>\n <time dateTime={dueDateTime}>{formatDateTime(item.dueAt)}</time>\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n","export function formatDateTime(value: string | undefined) {\n if (!value) return \"\";\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return new Intl.DateTimeFormat(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\"\n }).format(date);\n}\n\nexport function priorityLabel(priority: string | undefined) {\n return priority ?? \"normal\";\n}\n\nexport function prioritySeverity(\n priority: string | undefined\n): \"danger\" | \"warning\" | \"info\" | \"neutral\" {\n const normalized = priority?.toLowerCase();\n if (normalized === \"urgent\" || normalized === \"critical\" || normalized === \"high\")\n return \"danger\";\n if (normalized === \"medium\") return \"warning\";\n if (normalized === \"low\") return \"info\";\n return \"neutral\";\n}\n","import * as React from \"react\";\nimport type { KanbanCard, KanbanColumnModel } from \"../types\";\nimport { KanbanColumn } from \"./KanbanColumn\";\nimport { TaskCard } from \"./TaskCard\";\n\nexport interface KanbanBoardProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: KanbanColumnModel[];\n onCardMove?: (cardId: string, fromColumn: string, toColumn: string, index: number) => void;\n onAddCard?: (columnId: string) => void;\n}\n\ninterface LiftedCard {\n cardId: string;\n fromColumn: string;\n toColumn: string;\n index: number;\n}\n\nexport function KanbanBoard({\n columns = [],\n onCardMove,\n onAddCard,\n className,\n ...props\n}: KanbanBoardProps) {\n const [announcement, setAnnouncement] = React.useState(\"\");\n const [lifted, setLifted] = React.useState<LiftedCard | null>(null);\n\n const findCard = (cardId: string) => {\n for (const column of columns) {\n const index = column.items.findIndex((item) => item.id === cardId);\n if (index >= 0) return { column, index, card: column.items[index] };\n }\n return undefined;\n };\n\n const announce = (message: string) => setAnnouncement(message);\n\n const moveLifted = (direction: \"left\" | \"right\" | \"up\" | \"down\") => {\n if (!lifted) return;\n const currentColumnIndex = columns.findIndex((column) => column.id === lifted.toColumn);\n if (currentColumnIndex < 0) return;\n if (direction === \"left\" || direction === \"right\") {\n const offset = direction === \"left\" ? -1 : 1;\n const nextColumn = columns[currentColumnIndex + offset];\n if (!nextColumn) return;\n const nextIndex = Math.min(lifted.index, Math.max(0, nextColumn.items.length));\n setLifted({ ...lifted, toColumn: nextColumn.id, index: nextIndex });\n announce(`Moved ${lifted.cardId} to ${nextColumn.title}, position ${nextIndex + 1}`);\n return;\n }\n const currentColumn = columns[currentColumnIndex];\n const maxIndex = Math.max(0, currentColumn.items.length - 1);\n const nextIndex =\n direction === \"up\" ? Math.max(0, lifted.index - 1) : Math.min(maxIndex, lifted.index + 1);\n setLifted({ ...lifted, index: nextIndex });\n announce(`Moved ${lifted.cardId} to position ${nextIndex + 1}`);\n };\n\n const handleCardKeyDown = (\n event: React.KeyboardEvent<HTMLDivElement>,\n card: KanbanCard,\n column: KanbanColumnModel,\n index: number\n ) => {\n if (event.key === \" \") {\n event.preventDefault();\n setLifted({ cardId: card.id, fromColumn: column.id, toColumn: column.id, index });\n announce(`Lifted ${card.title}`);\n return;\n }\n if (!lifted) return;\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n moveLifted(\"left\");\n }\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n moveLifted(\"right\");\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveLifted(\"up\");\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveLifted(\"down\");\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n onCardMove?.(lifted.cardId, lifted.fromColumn, lifted.toColumn, lifted.index);\n announce(`Dropped ${lifted.cardId}`);\n setLifted(null);\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n announce(`Cancelled move for ${lifted.cardId}`);\n setLifted(null);\n }\n };\n\n const handleDrop = (event: React.DragEvent, toColumn: KanbanColumnModel, index: number) => {\n event.preventDefault();\n const cardId = event.dataTransfer.getData(\"text/plain\");\n const source = findCard(cardId);\n if (!source) return;\n onCardMove?.(cardId, source.column.id, toColumn.id, index);\n announce(`Moved ${source.card.title} to ${toColumn.title}`);\n };\n\n return (\n <div\n {...props}\n className={`eth-kanban-board ${className ?? \"\"}`}\n data-eth-component=\"KanbanBoard\"\n >\n <div className=\"eth-kanban-board__columns\" role=\"list\" aria-label=\"Kanban columns\">\n {columns.map((column) => (\n <KanbanColumn\n key={column.id}\n column={column}\n role=\"listitem\"\n onAddCard={onAddCard}\n onDragOver={(event) => event.preventDefault()}\n onDrop={(event) => handleDrop(event, column, column.items.length)}\n >\n {column.items.map((card, index) => (\n <div\n key={card.id}\n className={`eth-kanban-card-shell ${\n lifted?.cardId === card.id ? \"eth-kanban-card-shell--lifted\" : \"\"\n }`}\n draggable\n tabIndex={0}\n role=\"listitem\"\n aria-label={`${card.title}, ${column.title}, position ${index + 1} of ${\n column.items.length\n }`}\n aria-grabbed={lifted?.cardId === card.id}\n aria-roledescription=\"Draggable task card\"\n aria-keyshortcuts=\"Space ArrowLeft ArrowRight ArrowUp ArrowDown Enter Escape\"\n onDragStart={(event) => {\n event.dataTransfer.setData(\"text/plain\", card.id);\n event.dataTransfer.effectAllowed = \"move\";\n }}\n onDragOver={(event) => event.preventDefault()}\n onDrop={(event) => handleDrop(event, column, index)}\n onKeyDown={(event) => handleCardKeyDown(event, card, column, index)}\n >\n <TaskCard card={card} />\n </div>\n ))}\n </KanbanColumn>\n ))}\n </div>\n <div className=\"eth-kanban-board__live\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Badge, IconButton } from \"@echothink-ui/core\";\nimport type { KanbanColumnModel } from \"../types\";\n\nexport interface KanbanColumnProps extends React.HTMLAttributes<HTMLDivElement> {\n column: KanbanColumnModel;\n children?: React.ReactNode;\n onAddCard?: (columnId: string) => void;\n}\n\nexport function KanbanColumn({\n column,\n children,\n onAddCard,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: KanbanColumnProps) {\n const itemCount = column.items.length;\n const taskLabel = `${itemCount} ${itemCount === 1 ? \"task\" : \"tasks\"}`;\n const wipLimit = column.wipLimit;\n const hasWipLimit = typeof wipLimit === \"number\";\n const overLimit = hasWipLimit ? itemCount > wipLimit : false;\n const atLimit = hasWipLimit ? itemCount === wipLimit : false;\n const hasRenderedChildren = React.Children.count(children) > 0;\n const titleId = React.useId();\n const { \"aria-labelledby\": ariaLabelledBy, ...sectionProps } = props;\n\n let wipPercent = 0;\n let wipStatusLabel = \"\";\n let wipSeverity: \"danger\" | \"warning\" | \"neutral\" = \"neutral\";\n\n if (hasWipLimit) {\n wipPercent =\n wipLimit > 0 ? Math.min(100, (itemCount / wipLimit) * 100) : itemCount > 0 ? 100 : 0;\n const remaining = wipLimit - itemCount;\n wipStatusLabel = overLimit\n ? `${Math.abs(remaining)} over limit`\n : remaining === 0\n ? \"At limit\"\n : `${remaining} ${remaining === 1 ? \"slot\" : \"slots\"} open`;\n if (overLimit) wipSeverity = \"danger\";\n else if (atLimit) wipSeverity = \"warning\";\n }\n\n return (\n <section\n {...sectionProps}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : (ariaLabelledBy ?? titleId)}\n className={`eth-kanban-column ${overLimit ? \"eth-kanban-column--over-limit\" : \"\"} ${\n className ?? \"\"\n }`}\n data-eth-component=\"KanbanColumn\"\n >\n <header className=\"eth-kanban-column__header\">\n <div className=\"eth-kanban-column__header-main\">\n <div className=\"eth-kanban-column__heading\">\n <h3 id={titleId}>{column.title}</h3>\n <span className=\"eth-kanban-column__count\">{taskLabel}</span>\n </div>\n {onAddCard ? (\n <div className=\"eth-kanban-column__actions\">\n <IconButton\n className=\"eth-kanban-column__add\"\n intent=\"ghost\"\n density=\"compact\"\n label={`Add task to ${column.title}`}\n icon={\n <span className=\"eth-kanban-column__add-glyph\" aria-hidden=\"true\">\n +\n </span>\n }\n onClick={() => onAddCard(column.id)}\n />\n </div>\n ) : null}\n </div>\n {hasWipLimit ? (\n <div className=\"eth-kanban-column__metrics\">\n <div\n className=\"eth-kanban-column__limit\"\n aria-label={`Work in progress ${itemCount} of ${wipLimit}`}\n >\n <div className=\"eth-kanban-column__limit-row\">\n <Badge severity={wipSeverity}>WIP {itemCount}/{wipLimit}</Badge>\n <span className=\"eth-kanban-column__limit-note\">{wipStatusLabel}</span>\n </div>\n <span className=\"eth-kanban-column__meter\" aria-hidden=\"true\">\n <span style={{ inlineSize: `${wipPercent}%` }} />\n </span>\n </div>\n </div>\n ) : null}\n </header>\n <div className=\"eth-kanban-column__body\" role=\"list\" aria-label={`${column.title} tasks`}>\n {hasRenderedChildren ? (\n children\n ) : itemCount === 0 ? (\n <div className=\"eth-kanban-column__empty\">No tasks in this column</div>\n ) : null}\n </div>\n </section>\n );\n}\n","import * as React from \"react\";\nimport { Badge, Surface, StatusDot, Tag, type EthOperationalStatus } from \"@echothink-ui/core\";\nimport type { KanbanCard } from \"../types\";\nimport { formatDateTime, priorityLabel, prioritySeverity } from \"../utils\";\n\nexport interface TaskCardProps extends React.HTMLAttributes<HTMLElement> {\n card: KanbanCard;\n}\n\nconst operationalStatuses = new Set<string>([\n \"queued\",\n \"running\",\n \"paused\",\n \"blocked\",\n \"failed\",\n \"succeeded\",\n \"warning\",\n \"stale\",\n \"synced\",\n \"pending-approval\",\n \"approval-required\",\n \"in-progress\",\n \"not-started\",\n \"completed\",\n \"active\",\n \"inactive\"\n]);\n\nfunction isOperationalStatus(status: string | undefined): status is EthOperationalStatus {\n return Boolean(status && operationalStatuses.has(status));\n}\n\nfunction statusLabel(status: string) {\n return status.replace(/-/g, \" \");\n}\n\nexport function TaskCard({ card, className, ...props }: TaskCardProps) {\n return (\n <Surface\n {...props}\n className={`eth-todo-task-card ${className ?? \"\"}`}\n data-priority={card.priority}\n data-status={card.status}\n data-eth-component=\"TaskCard\"\n >\n <div className=\"eth-todo-task-card__header\">\n <strong>{card.title}</strong>\n {card.priority ? (\n <Badge severity={prioritySeverity(card.priority)}>{priorityLabel(card.priority)}</Badge>\n ) : null}\n </div>\n <div className=\"eth-todo-task-card__meta\">\n {card.assignee ? <Tag>{card.assignee}</Tag> : null}\n {isOperationalStatus(card.status) ? (\n <StatusDot status={card.status} label={statusLabel(card.status)} />\n ) : card.status ? (\n <Tag>{card.status}</Tag>\n ) : null}\n {card.dueAt ? (\n <time className=\"eth-todo-task-card__due\" dateTime={card.dueAt}>\n {formatDateTime(card.dueAt)}\n </time>\n ) : null}\n </div>\n {card.labels?.length ? (\n <div className=\"eth-todo-task-card__labels\">\n {card.labels.map((label) => (\n <Tag key={label}>{label}</Tag>\n ))}\n </div>\n ) : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport { Badge, StatusDot, Tag } from \"@echothink-ui/core\";\nimport { DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { TaskRowActions, TaskTableTask } from \"../types\";\nimport { formatDateTime } from \"../utils\";\n\nexport interface TaskTableProps extends React.HTMLAttributes<HTMLDivElement> {\n tasks?: TaskTableTask[];\n density?: \"compact\" | \"default\" | \"comfortable\";\n selectable?: boolean;\n rowActions?: TaskRowActions;\n}\n\nconst columns: DataColumn<TaskTableTask>[] = [\n {\n key: \"title\",\n header: \"Task\",\n render: (task) => (\n <div className=\"eth-todo-task-table__title\">\n <strong>{task.title}</strong>\n {task.labels?.map((label) => (\n <Tag key={label}>{label}</Tag>\n ))}\n </div>\n )\n },\n {\n key: \"status\",\n header: \"Status\",\n render: (task) => (task.status ? <StatusDot status={task.status} label={task.status} /> : null)\n },\n { key: \"assignee\", header: \"Assignee\" },\n {\n key: \"priority\",\n header: \"Priority\",\n render: (task) => (task.priority ? <Badge>{task.priority}</Badge> : null)\n },\n {\n key: \"dueAt\",\n header: \"Due\",\n render: (task) => (task.dueAt ? <time dateTime={task.dueAt}>{formatDateTime(task.dueAt)}</time> : null)\n }\n];\n\nexport function TaskTable({\n tasks = [],\n density = \"default\",\n selectable,\n rowActions,\n className,\n ...props\n}: TaskTableProps) {\n return (\n <div\n {...props}\n className={`eth-todo-task-table ${className ?? \"\"}`}\n data-eth-component=\"TaskTable\"\n >\n <DataTable\n rows={tasks}\n columns={columns}\n rowKey=\"id\"\n density={density}\n selectable={selectable}\n rowActions={rowActions}\n />\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Badge, Panel } from \"@echothink-ui/core\";\nimport type { TaskDependency } from \"../types\";\n\nexport interface TaskDependencyListProps extends React.HTMLAttributes<HTMLDivElement> {\n dependencies?: TaskDependency[];\n}\n\nexport function TaskDependencyList({\n dependencies = [],\n className,\n ...props\n}: TaskDependencyListProps) {\n const groups = {\n \"blocked-by\": dependencies.filter((dependency) => dependency.relation === \"blocked-by\"),\n blocks: dependencies.filter((dependency) => dependency.relation === \"blocks\")\n };\n\n return (\n <Panel\n {...props}\n className={`eth-todo-dependencies ${className ?? \"\"}`}\n title=\"Dependencies\"\n data-eth-component=\"TaskDependencyList\"\n >\n <DependencyGroup title=\"Blocked by\" dependencies={groups[\"blocked-by\"]} />\n <DependencyGroup title=\"Blocks\" dependencies={groups.blocks} />\n </Panel>\n );\n}\n\nfunction DependencyGroup({\n title,\n dependencies\n}: {\n title: string;\n dependencies: TaskDependency[];\n}) {\n return (\n <section className=\"eth-todo-dependencies__group\">\n <h3>{title}</h3>\n {dependencies.length ? (\n <ul>\n {dependencies.map((dependency) => (\n <li key={dependency.id}>\n <span>{dependency.title}</span>\n <Badge>{dependency.status}</Badge>\n </li>\n ))}\n </ul>\n ) : (\n <p>None</p>\n )}\n </section>\n );\n}\n","import * as React from \"react\";\nimport { Panel, Tag } from \"@echothink-ui/core\";\nimport type { TaskTimelineEvent } from \"../types\";\nimport { formatDateTime } from \"../utils\";\n\nexport interface TaskTimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n events?: TaskTimelineEvent[];\n}\n\nexport function TaskTimeline({ events = [], className, ...props }: TaskTimelineProps) {\n const sortedEvents = React.useMemo(\n () =>\n [...events].sort(\n (a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()\n ),\n [events]\n );\n\n return (\n <Panel\n {...props}\n className={`eth-todo-timeline ${className ?? \"\"}`}\n title=\"Task timeline\"\n data-eth-component=\"TaskTimeline\"\n >\n <ol className=\"eth-todo-timeline__events\">\n {sortedEvents.map((event) => (\n <li key={event.id} className=\"eth-todo-timeline__event\">\n <time dateTime={event.timestamp}>{formatDateTime(event.timestamp)}</time>\n <div>\n <Tag>{event.kind}</Tag>\n {event.actor ? <span>{event.actor}</span> : null}\n <p>{event.summary}</p>\n </div>\n </li>\n ))}\n </ol>\n </Panel>\n );\n}\n"],"mappings":"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","names":["import_core","import_jsx_runtime","React","React","import_core","import_jsx_runtime","import_core","import_jsx_runtime","import_jsx_runtime","columns","nextIndex","import_core","import_jsx_runtime","import_core","import_jsx_runtime","React","import_core","import_jsx_runtime"]}
package/dist/index.css ADDED
@@ -0,0 +1,500 @@
1
+ @import "@echothink-ui/core/styles.css";
2
+
3
+ /* src/styles.css */
4
+ .eth-todo-kanban,
5
+ .eth-kanban-board {
6
+ background: var(--eth-color-background);
7
+ color: var(--eth-color-text-primary);
8
+ inline-size: 100%;
9
+ overflow-x: auto;
10
+ padding: var(--eth-space-xl);
11
+ }
12
+ .eth-todo-kanban__columns,
13
+ .eth-kanban-board__columns {
14
+ align-items: stretch;
15
+ display: flex;
16
+ gap: var(--eth-space-md);
17
+ min-block-size: 100%;
18
+ }
19
+ .eth-todo-kanban__column,
20
+ .eth-kanban-column {
21
+ background: var(--eth-color-layer-01);
22
+ border: 1px solid var(--eth-color-border-subtle);
23
+ border-radius: 0;
24
+ display: grid;
25
+ flex: 1 0 18rem;
26
+ grid-template-rows: auto 1fr;
27
+ inline-size: 18rem;
28
+ min-block-size: 22rem;
29
+ min-inline-size: 18rem;
30
+ overflow: hidden;
31
+ }
32
+ .eth-kanban-column--over-limit {
33
+ border-color: var(--eth-color-danger);
34
+ box-shadow: inset 0 0.25rem 0 var(--eth-color-danger);
35
+ }
36
+ .eth-todo-kanban__column-header,
37
+ .eth-kanban-column__header {
38
+ align-items: center;
39
+ background: var(--eth-color-layer-02);
40
+ border-bottom: 1px solid var(--eth-color-border-subtle);
41
+ display: flex;
42
+ gap: var(--eth-space-md);
43
+ inset-block-start: 0;
44
+ justify-content: space-between;
45
+ padding: var(--eth-space-md) var(--eth-space-lg);
46
+ position: sticky;
47
+ z-index: 1;
48
+ }
49
+ .eth-kanban-column__header {
50
+ align-items: stretch;
51
+ display: grid;
52
+ gap: var(--eth-space-md);
53
+ justify-content: initial;
54
+ margin: 0;
55
+ padding: var(--eth-space-lg);
56
+ }
57
+ .eth-kanban-column__header-main {
58
+ align-items: flex-start;
59
+ display: grid;
60
+ gap: var(--eth-space-md);
61
+ grid-template-columns: minmax(0, 1fr) auto;
62
+ }
63
+ .eth-kanban-column__heading {
64
+ min-inline-size: 0;
65
+ }
66
+ .eth-kanban-column__actions {
67
+ align-items: center;
68
+ display: flex;
69
+ flex: 0 0 auto;
70
+ gap: var(--eth-space-xs);
71
+ justify-content: flex-end;
72
+ }
73
+ .eth-kanban-column__add-glyph {
74
+ font-size: calc(1rem * var(--eth-text-scale, 1));
75
+ font-weight: 600;
76
+ line-height: 1;
77
+ }
78
+ .eth-todo-kanban__column-header h3,
79
+ .eth-kanban-column__header h3 {
80
+ font-size: calc(0.875rem * var(--eth-text-scale, 1));
81
+ font-weight: 600;
82
+ line-height: 1.2857;
83
+ margin: 0;
84
+ overflow-wrap: anywhere;
85
+ }
86
+ .eth-todo-kanban__column-header span,
87
+ .eth-kanban-column__count {
88
+ color: var(--eth-color-text-secondary);
89
+ display: block;
90
+ font-size: calc(0.75rem * var(--eth-text-scale, 1));
91
+ line-height: 1.3333;
92
+ margin-block-start: var(--eth-space-2xs);
93
+ }
94
+ .eth-kanban-column__metrics,
95
+ .eth-kanban-column__limit {
96
+ display: grid;
97
+ gap: var(--eth-space-sm);
98
+ }
99
+ .eth-kanban-column__limit-row {
100
+ align-items: center;
101
+ display: flex;
102
+ gap: var(--eth-space-sm);
103
+ justify-content: space-between;
104
+ min-inline-size: 0;
105
+ }
106
+ .eth-kanban-column__limit-note {
107
+ color: var(--eth-color-text-helper);
108
+ flex: 0 0 auto;
109
+ font-size: calc(0.75rem * var(--eth-text-scale, 1));
110
+ line-height: 1.3333;
111
+ text-align: end;
112
+ }
113
+ .eth-kanban-column--over-limit .eth-kanban-column__limit-note {
114
+ color: var(--eth-color-danger);
115
+ font-weight: 600;
116
+ }
117
+ .eth-kanban-column__meter {
118
+ background: var(--eth-color-border-subtle);
119
+ block-size: 0.25rem;
120
+ display: block;
121
+ inline-size: 100%;
122
+ overflow: hidden;
123
+ }
124
+ .eth-kanban-column__meter span {
125
+ background: var(--eth-color-interactive-primary);
126
+ block-size: 100%;
127
+ display: block;
128
+ min-inline-size: 0;
129
+ transition: inline-size 110ms cubic-bezier(0.2, 0, 0.38, 0.9);
130
+ }
131
+ .eth-kanban-column--over-limit .eth-kanban-column__meter span {
132
+ background: var(--eth-color-danger);
133
+ }
134
+ .eth-todo-kanban__cards,
135
+ .eth-kanban-column__body {
136
+ align-content: start;
137
+ background: var(--eth-color-layer-01);
138
+ display: grid;
139
+ gap: var(--eth-space-sm);
140
+ }
141
+ .eth-todo-kanban__cards {
142
+ min-block-size: 13rem;
143
+ padding: var(--eth-space-md);
144
+ }
145
+ .eth-kanban-column__body {
146
+ min-block-size: 12rem;
147
+ padding: var(--eth-space-lg);
148
+ }
149
+ .eth-kanban-column__empty {
150
+ align-items: center;
151
+ background: var(--eth-color-layer-02);
152
+ border: 1px dashed var(--eth-color-border-subtle);
153
+ color: var(--eth-color-text-helper);
154
+ display: flex;
155
+ font-size: calc(0.875rem * var(--eth-text-scale, 1));
156
+ justify-content: center;
157
+ line-height: 1.2857;
158
+ min-block-size: 6rem;
159
+ padding: var(--eth-space-md);
160
+ text-align: center;
161
+ }
162
+ .eth-kanban-column .eth-todo-task-card {
163
+ background: var(--eth-color-layer-02);
164
+ }
165
+ .eth-kanban-column .eth-todo-task-card:hover {
166
+ background: var(--eth-color-layer-hover);
167
+ }
168
+ .eth-kanban-card-shell {
169
+ cursor: grab;
170
+ border-radius: 0;
171
+ outline: 0;
172
+ }
173
+ .eth-kanban-card-shell:active {
174
+ cursor: grabbing;
175
+ }
176
+ .eth-kanban-card-shell:focus-visible {
177
+ outline: 2px solid var(--eth-color-focus);
178
+ outline-offset: 2px;
179
+ }
180
+ .eth-kanban-card-shell--lifted {
181
+ background: var(--eth-color-layer-selected);
182
+ }
183
+ .eth-todo-task-card {
184
+ background: var(--eth-color-layer-01);
185
+ border: 1px solid var(--eth-color-border-subtle);
186
+ border-inline-start: 3px solid transparent;
187
+ border-radius: 0;
188
+ color: var(--eth-color-text-primary);
189
+ display: grid;
190
+ gap: var(--eth-space-sm);
191
+ min-block-size: 7rem;
192
+ padding: var(--eth-space-md);
193
+ transition: background-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9), border-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9);
194
+ }
195
+ .eth-todo-task-card:hover {
196
+ background: var(--eth-color-layer-hover);
197
+ }
198
+ .eth-todo-task-card[data-priority=critical],
199
+ .eth-todo-task-card[data-priority=urgent],
200
+ .eth-todo-task-card[data-priority=high] {
201
+ border-inline-start-color: var(--eth-color-danger);
202
+ }
203
+ .eth-todo-task-card[data-priority=medium] {
204
+ border-inline-start-color: var(--eth-color-warning);
205
+ }
206
+ .eth-todo-task-card[data-priority=low] {
207
+ border-inline-start-color: var(--eth-color-info);
208
+ }
209
+ .eth-todo-task-card__header,
210
+ .eth-todo-task-card__meta,
211
+ .eth-todo-task-card__labels,
212
+ .eth-todo-task-table__title {
213
+ align-items: center;
214
+ display: flex;
215
+ flex-wrap: wrap;
216
+ gap: var(--eth-space-sm);
217
+ }
218
+ .eth-todo-task-card__header {
219
+ align-items: flex-start;
220
+ justify-content: space-between;
221
+ }
222
+ .eth-todo-task-card__header strong {
223
+ flex: 1 1 auto;
224
+ font-size: calc(0.875rem * var(--eth-text-scale, 1));
225
+ line-height: 1.2857;
226
+ min-inline-size: 0;
227
+ overflow-wrap: anywhere;
228
+ }
229
+ .eth-todo-task-card__meta,
230
+ .eth-todo-task-card__labels {
231
+ color: var(--eth-color-text-secondary);
232
+ font-size: calc(0.75rem * var(--eth-text-scale, 1));
233
+ line-height: 1.3333;
234
+ }
235
+ .eth-todo-task-card__due {
236
+ color: var(--eth-color-text-helper);
237
+ }
238
+ .eth-todo-task-table {
239
+ inline-size: 100%;
240
+ }
241
+ .eth-todo-task-dependency-list,
242
+ .eth-todo-dependencies,
243
+ .eth-todo-task-timeline,
244
+ .eth-todo-timeline,
245
+ .eth-todo-list {
246
+ background: var(--eth-color-layer-01);
247
+ border: 1px solid var(--eth-color-border-subtle);
248
+ border-radius: 0;
249
+ display: grid;
250
+ gap: 0;
251
+ }
252
+ .eth-todo-list.eth-panel {
253
+ gap: 0;
254
+ inline-size: 100%;
255
+ max-inline-size: 48rem;
256
+ overflow: hidden;
257
+ padding: 0;
258
+ }
259
+ .eth-todo-list .eth-panel__header {
260
+ background: var(--eth-color-layer-02);
261
+ border-bottom: 1px solid var(--eth-color-border-subtle);
262
+ padding: var(--eth-space-lg);
263
+ }
264
+ .eth-todo-list .eth-panel__header h3 {
265
+ font-size: calc(1rem * var(--eth-text-scale, 1));
266
+ font-weight: 600;
267
+ line-height: 1.375;
268
+ }
269
+ .eth-todo-list .eth-panel__header p {
270
+ font-size: calc(0.75rem * var(--eth-text-scale, 1));
271
+ line-height: 1rem;
272
+ }
273
+ .eth-todo-list .eth-panel__body {
274
+ display: grid;
275
+ gap: 0;
276
+ min-inline-size: 0;
277
+ }
278
+ .eth-todo-list__items,
279
+ .eth-todo-dependencies__group,
280
+ .eth-todo-timeline__events {
281
+ display: grid;
282
+ gap: 0;
283
+ margin: 0;
284
+ padding: 0;
285
+ }
286
+ .eth-todo-dependencies__group {
287
+ border-bottom: 1px solid var(--eth-color-border-subtle);
288
+ padding: var(--eth-space-md);
289
+ }
290
+ .eth-todo-dependencies__group:last-child {
291
+ border-bottom: 0;
292
+ }
293
+ .eth-todo-dependencies__group h3 {
294
+ font-size: calc(0.875rem * var(--eth-text-scale, 1));
295
+ font-weight: 600;
296
+ line-height: 1.2857;
297
+ margin: 0 0 var(--eth-space-sm);
298
+ }
299
+ .eth-todo-dependencies__group ul {
300
+ display: grid;
301
+ gap: 0;
302
+ list-style: none;
303
+ margin: 0;
304
+ padding: 0;
305
+ }
306
+ .eth-todo-dependencies__group li {
307
+ align-items: center;
308
+ border-top: 1px solid var(--eth-color-border-subtle);
309
+ display: flex;
310
+ gap: var(--eth-space-md);
311
+ justify-content: space-between;
312
+ padding: var(--eth-space-sm) 0;
313
+ }
314
+ .eth-todo-item {
315
+ align-items: center;
316
+ background: var(--eth-color-layer-01);
317
+ border-block-end: 1px solid var(--eth-color-border-subtle);
318
+ border-inline-start: 3px solid transparent;
319
+ color: var(--eth-color-text-primary);
320
+ display: grid;
321
+ gap: var(--eth-space-md);
322
+ grid-template-columns: minmax(0, 1fr);
323
+ min-block-size: 3.5rem;
324
+ padding: 0 var(--eth-space-lg) 0 var(--eth-space-md);
325
+ transition: background-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9), border-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9);
326
+ }
327
+ .eth-todo-item--has-meta {
328
+ grid-template-columns: minmax(0, 1fr) auto;
329
+ }
330
+ .eth-todo-item[data-priority=critical],
331
+ .eth-todo-item[data-priority=urgent],
332
+ .eth-todo-item[data-priority=high] {
333
+ border-inline-start-color: var(--eth-color-danger);
334
+ }
335
+ .eth-todo-item[data-priority=medium] {
336
+ border-inline-start-color: var(--eth-color-warning);
337
+ }
338
+ .eth-todo-item[data-priority=low] {
339
+ border-inline-start-color: var(--eth-color-info);
340
+ }
341
+ .eth-todo-item:focus-within {
342
+ outline: 2px solid var(--eth-color-focus);
343
+ outline-offset: -2px;
344
+ }
345
+ .eth-todo-item:last-child,
346
+ .eth-todo-list__items .eth-todo-item:last-child {
347
+ border-block-end: 0;
348
+ }
349
+ .eth-todo-item:hover {
350
+ background: var(--eth-color-layer-hover);
351
+ }
352
+ .eth-todo-item--done {
353
+ color: var(--eth-color-text-primary);
354
+ }
355
+ .eth-todo-item__content {
356
+ min-inline-size: 0;
357
+ padding-block: var(--eth-space-md);
358
+ }
359
+ .eth-todo-item__checkbox {
360
+ min-inline-size: 0;
361
+ }
362
+ .eth-todo-item__checkbox .cds--checkbox-label {
363
+ align-items: flex-start;
364
+ min-inline-size: 0;
365
+ }
366
+ .eth-todo-item__checkbox .cds--checkbox-label-text {
367
+ font-size: calc(0.875rem * var(--eth-text-scale, 1));
368
+ line-height: 1.2857;
369
+ min-inline-size: 0;
370
+ overflow-wrap: anywhere;
371
+ }
372
+ .eth-todo-item--done .cds--checkbox-label-text {
373
+ color: var(--eth-color-text-secondary);
374
+ }
375
+ .eth-todo-item__primary {
376
+ min-inline-size: 0;
377
+ }
378
+ .eth-todo-item .eth-checkbox {
379
+ min-inline-size: 0;
380
+ }
381
+ .eth-todo-item__label {
382
+ color: var(--eth-color-text-primary);
383
+ display: block;
384
+ font-size: calc(0.875rem * var(--eth-text-scale, 1));
385
+ line-height: 1.2857;
386
+ overflow-wrap: anywhere;
387
+ }
388
+ .eth-todo-item--done .eth-todo-item__label {
389
+ color: var(--eth-color-text-secondary);
390
+ text-decoration: line-through;
391
+ text-decoration-thickness: 1px;
392
+ }
393
+ .eth-todo-item__meta {
394
+ align-items: center;
395
+ color: var(--eth-color-text-secondary);
396
+ display: flex;
397
+ flex-wrap: wrap;
398
+ gap: var(--eth-space-sm);
399
+ justify-content: flex-end;
400
+ max-inline-size: min(24rem, 45vw);
401
+ min-inline-size: 0;
402
+ padding-block: var(--eth-space-sm);
403
+ }
404
+ .eth-todo-item--done .eth-todo-item__meta {
405
+ opacity: 0.78;
406
+ }
407
+ .eth-todo-item__tag {
408
+ flex: 0 1 auto;
409
+ }
410
+ .eth-todo-item__due {
411
+ color: var(--eth-color-text-helper);
412
+ display: inline-flex;
413
+ flex: 0 0 auto;
414
+ font-size: calc(0.75rem * var(--eth-text-scale, 1));
415
+ gap: var(--eth-space-xs);
416
+ line-height: 1rem;
417
+ white-space: nowrap;
418
+ }
419
+ .eth-todo-item__due-label {
420
+ color: var(--eth-color-text-helper);
421
+ }
422
+ .eth-todo-list__empty {
423
+ color: var(--eth-color-text-secondary);
424
+ font-size: calc(0.875rem * var(--eth-text-scale, 1));
425
+ line-height: 1.2857;
426
+ margin: 0;
427
+ padding: var(--eth-space-xl) var(--eth-space-lg);
428
+ }
429
+ .eth-todo-list__add {
430
+ align-items: end;
431
+ background: var(--eth-color-layer-02);
432
+ border-top: 1px solid var(--eth-color-border-subtle);
433
+ display: grid;
434
+ gap: var(--eth-space-sm);
435
+ grid-template-columns: minmax(0, 1fr) auto;
436
+ min-inline-size: 0;
437
+ padding: var(--eth-space-lg);
438
+ }
439
+ .eth-todo-list__add .cds--form-item,
440
+ .eth-todo-list__add .cds--text-input-wrapper {
441
+ min-inline-size: 0;
442
+ }
443
+ .eth-todo-list__add .eth-button {
444
+ min-inline-size: 5.5rem;
445
+ }
446
+ .eth-todo-timeline__events {
447
+ list-style: none;
448
+ }
449
+ .eth-todo-timeline__event {
450
+ border-bottom: 1px solid var(--eth-color-border-subtle);
451
+ display: grid;
452
+ gap: var(--eth-space-md);
453
+ grid-template-columns: minmax(8rem, 12rem) minmax(0, 1fr);
454
+ padding: var(--eth-space-md);
455
+ }
456
+ .eth-todo-timeline__event:last-child {
457
+ border-bottom: 0;
458
+ }
459
+ .eth-todo-timeline__event time {
460
+ color: var(--eth-color-text-helper);
461
+ font-size: calc(0.75rem * var(--eth-text-scale, 1));
462
+ line-height: 1.3333;
463
+ }
464
+ .eth-todo-timeline__event p {
465
+ margin: var(--eth-space-xs) 0 0;
466
+ }
467
+ .eth-kanban-board__live {
468
+ block-size: 1px;
469
+ clip-path: inset(50%);
470
+ inline-size: 1px;
471
+ overflow: hidden;
472
+ position: absolute;
473
+ white-space: nowrap;
474
+ }
475
+ @media (width <= 42rem) {
476
+ .eth-todo-kanban,
477
+ .eth-kanban-board {
478
+ padding: var(--eth-space-md);
479
+ }
480
+ .eth-todo-list__add,
481
+ .eth-todo-timeline__event {
482
+ grid-template-columns: 1fr;
483
+ }
484
+ .eth-todo-item {
485
+ align-items: stretch;
486
+ grid-template-columns: 1fr;
487
+ gap: var(--eth-space-xs);
488
+ padding-block: var(--eth-space-sm);
489
+ }
490
+ .eth-todo-item__content {
491
+ padding-block: 0;
492
+ }
493
+ .eth-todo-item__meta {
494
+ justify-content: flex-start;
495
+ max-inline-size: 100%;
496
+ padding-block: 0;
497
+ padding-inline-start: var(--eth-space-2xl);
498
+ }
499
+ }
500
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/styles.css"],"sourcesContent":["@import \"@echothink-ui/core/styles.css\";\n\n.eth-todo-kanban,\n.eth-kanban-board {\n background: var(--eth-color-background);\n color: var(--eth-color-text-primary);\n inline-size: 100%;\n overflow-x: auto;\n padding: var(--eth-space-xl);\n}\n\n.eth-todo-kanban__columns,\n.eth-kanban-board__columns {\n align-items: stretch;\n display: flex;\n gap: var(--eth-space-md);\n min-block-size: 100%;\n}\n\n.eth-todo-kanban__column,\n.eth-kanban-column {\n background: var(--eth-color-layer-01);\n border: 1px solid var(--eth-color-border-subtle);\n border-radius: 0;\n display: grid;\n flex: 1 0 18rem;\n grid-template-rows: auto 1fr;\n inline-size: 18rem;\n min-block-size: 22rem;\n min-inline-size: 18rem;\n overflow: hidden;\n}\n\n.eth-kanban-column--over-limit {\n border-color: var(--eth-color-danger);\n box-shadow: inset 0 0.25rem 0 var(--eth-color-danger);\n}\n\n.eth-todo-kanban__column-header,\n.eth-kanban-column__header {\n align-items: center;\n background: var(--eth-color-layer-02);\n border-bottom: 1px solid var(--eth-color-border-subtle);\n display: flex;\n gap: var(--eth-space-md);\n inset-block-start: 0;\n justify-content: space-between;\n padding: var(--eth-space-md) var(--eth-space-lg);\n position: sticky;\n z-index: 1;\n}\n\n.eth-kanban-column__header {\n align-items: stretch;\n display: grid;\n gap: var(--eth-space-md);\n justify-content: initial;\n margin: 0;\n padding: var(--eth-space-lg);\n}\n\n.eth-kanban-column__header-main {\n align-items: flex-start;\n display: grid;\n gap: var(--eth-space-md);\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.eth-kanban-column__heading {\n min-inline-size: 0;\n}\n\n.eth-kanban-column__actions {\n align-items: center;\n display: flex;\n flex: 0 0 auto;\n gap: var(--eth-space-xs);\n justify-content: flex-end;\n}\n\n.eth-kanban-column__add-glyph {\n font-size: calc(1rem * var(--eth-text-scale, 1));\n font-weight: 600;\n line-height: 1;\n}\n\n.eth-todo-kanban__column-header h3,\n.eth-kanban-column__header h3 {\n font-size: calc(0.875rem * var(--eth-text-scale, 1));\n font-weight: 600;\n line-height: 1.2857;\n margin: 0;\n overflow-wrap: anywhere;\n}\n\n.eth-todo-kanban__column-header span,\n.eth-kanban-column__count {\n color: var(--eth-color-text-secondary);\n display: block;\n font-size: calc(0.75rem * var(--eth-text-scale, 1));\n line-height: 1.3333;\n margin-block-start: var(--eth-space-2xs);\n}\n\n.eth-kanban-column__metrics,\n.eth-kanban-column__limit {\n display: grid;\n gap: var(--eth-space-sm);\n}\n\n.eth-kanban-column__limit-row {\n align-items: center;\n display: flex;\n gap: var(--eth-space-sm);\n justify-content: space-between;\n min-inline-size: 0;\n}\n\n.eth-kanban-column__limit-note {\n color: var(--eth-color-text-helper);\n flex: 0 0 auto;\n font-size: calc(0.75rem * var(--eth-text-scale, 1));\n line-height: 1.3333;\n text-align: end;\n}\n\n.eth-kanban-column--over-limit .eth-kanban-column__limit-note {\n color: var(--eth-color-danger);\n font-weight: 600;\n}\n\n.eth-kanban-column__meter {\n background: var(--eth-color-border-subtle);\n block-size: 0.25rem;\n display: block;\n inline-size: 100%;\n overflow: hidden;\n}\n\n.eth-kanban-column__meter span {\n background: var(--eth-color-interactive-primary);\n block-size: 100%;\n display: block;\n min-inline-size: 0;\n transition: inline-size 110ms cubic-bezier(0.2, 0, 0.38, 0.9);\n}\n\n.eth-kanban-column--over-limit .eth-kanban-column__meter span {\n background: var(--eth-color-danger);\n}\n\n.eth-todo-kanban__cards,\n.eth-kanban-column__body {\n align-content: start;\n background: var(--eth-color-layer-01);\n display: grid;\n gap: var(--eth-space-sm);\n}\n\n.eth-todo-kanban__cards {\n min-block-size: 13rem;\n padding: var(--eth-space-md);\n}\n\n.eth-kanban-column__body {\n min-block-size: 12rem;\n padding: var(--eth-space-lg);\n}\n\n.eth-kanban-column__empty {\n align-items: center;\n background: var(--eth-color-layer-02);\n border: 1px dashed var(--eth-color-border-subtle);\n color: var(--eth-color-text-helper);\n display: flex;\n font-size: calc(0.875rem * var(--eth-text-scale, 1));\n justify-content: center;\n line-height: 1.2857;\n min-block-size: 6rem;\n padding: var(--eth-space-md);\n text-align: center;\n}\n\n.eth-kanban-column .eth-todo-task-card {\n background: var(--eth-color-layer-02);\n}\n\n.eth-kanban-column .eth-todo-task-card:hover {\n background: var(--eth-color-layer-hover);\n}\n\n.eth-kanban-card-shell {\n cursor: grab;\n border-radius: 0;\n outline: 0;\n}\n\n.eth-kanban-card-shell:active {\n cursor: grabbing;\n}\n\n.eth-kanban-card-shell:focus-visible {\n outline: 2px solid var(--eth-color-focus);\n outline-offset: 2px;\n}\n\n.eth-kanban-card-shell--lifted {\n background: var(--eth-color-layer-selected);\n}\n\n.eth-todo-task-card {\n background: var(--eth-color-layer-01);\n border: 1px solid var(--eth-color-border-subtle);\n border-inline-start: 3px solid transparent;\n border-radius: 0;\n color: var(--eth-color-text-primary);\n display: grid;\n gap: var(--eth-space-sm);\n min-block-size: 7rem;\n padding: var(--eth-space-md);\n transition:\n background-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9),\n border-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9);\n}\n\n.eth-todo-task-card:hover {\n background: var(--eth-color-layer-hover);\n}\n\n.eth-todo-task-card[data-priority=\"critical\"],\n.eth-todo-task-card[data-priority=\"urgent\"],\n.eth-todo-task-card[data-priority=\"high\"] {\n border-inline-start-color: var(--eth-color-danger);\n}\n\n.eth-todo-task-card[data-priority=\"medium\"] {\n border-inline-start-color: var(--eth-color-warning);\n}\n\n.eth-todo-task-card[data-priority=\"low\"] {\n border-inline-start-color: var(--eth-color-info);\n}\n\n.eth-todo-task-card__header,\n.eth-todo-task-card__meta,\n.eth-todo-task-card__labels,\n.eth-todo-task-table__title {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: var(--eth-space-sm);\n}\n\n.eth-todo-task-card__header {\n align-items: flex-start;\n justify-content: space-between;\n}\n\n.eth-todo-task-card__header strong {\n flex: 1 1 auto;\n font-size: calc(0.875rem * var(--eth-text-scale, 1));\n line-height: 1.2857;\n min-inline-size: 0;\n overflow-wrap: anywhere;\n}\n\n.eth-todo-task-card__meta,\n.eth-todo-task-card__labels {\n color: var(--eth-color-text-secondary);\n font-size: calc(0.75rem * var(--eth-text-scale, 1));\n line-height: 1.3333;\n}\n\n.eth-todo-task-card__due {\n color: var(--eth-color-text-helper);\n}\n\n.eth-todo-task-table {\n inline-size: 100%;\n}\n\n.eth-todo-task-dependency-list,\n.eth-todo-dependencies,\n.eth-todo-task-timeline,\n.eth-todo-timeline,\n.eth-todo-list {\n background: var(--eth-color-layer-01);\n border: 1px solid var(--eth-color-border-subtle);\n border-radius: 0;\n display: grid;\n gap: 0;\n}\n\n.eth-todo-list.eth-panel {\n gap: 0;\n inline-size: 100%;\n max-inline-size: 48rem;\n overflow: hidden;\n padding: 0;\n}\n\n.eth-todo-list .eth-panel__header {\n background: var(--eth-color-layer-02);\n border-bottom: 1px solid var(--eth-color-border-subtle);\n padding: var(--eth-space-lg);\n}\n\n.eth-todo-list .eth-panel__header h3 {\n font-size: calc(1rem * var(--eth-text-scale, 1));\n font-weight: 600;\n line-height: 1.375;\n}\n\n.eth-todo-list .eth-panel__header p {\n font-size: calc(0.75rem * var(--eth-text-scale, 1));\n line-height: 1rem;\n}\n\n.eth-todo-list .eth-panel__body {\n display: grid;\n gap: 0;\n min-inline-size: 0;\n}\n\n.eth-todo-list__items,\n.eth-todo-dependencies__group,\n.eth-todo-timeline__events {\n display: grid;\n gap: 0;\n margin: 0;\n padding: 0;\n}\n\n.eth-todo-dependencies__group {\n border-bottom: 1px solid var(--eth-color-border-subtle);\n padding: var(--eth-space-md);\n}\n\n.eth-todo-dependencies__group:last-child {\n border-bottom: 0;\n}\n\n.eth-todo-dependencies__group h3 {\n font-size: calc(0.875rem * var(--eth-text-scale, 1));\n font-weight: 600;\n line-height: 1.2857;\n margin: 0 0 var(--eth-space-sm);\n}\n\n.eth-todo-dependencies__group ul {\n display: grid;\n gap: 0;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.eth-todo-dependencies__group li {\n align-items: center;\n border-top: 1px solid var(--eth-color-border-subtle);\n display: flex;\n gap: var(--eth-space-md);\n justify-content: space-between;\n padding: var(--eth-space-sm) 0;\n}\n\n.eth-todo-item {\n align-items: center;\n background: var(--eth-color-layer-01);\n border-block-end: 1px solid var(--eth-color-border-subtle);\n border-inline-start: 3px solid transparent;\n color: var(--eth-color-text-primary);\n display: grid;\n gap: var(--eth-space-md);\n grid-template-columns: minmax(0, 1fr);\n min-block-size: 3.5rem;\n padding: 0 var(--eth-space-lg) 0 var(--eth-space-md);\n transition:\n background-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9),\n border-color 110ms cubic-bezier(0.2, 0, 0.38, 0.9);\n}\n\n.eth-todo-item--has-meta {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.eth-todo-item[data-priority=\"critical\"],\n.eth-todo-item[data-priority=\"urgent\"],\n.eth-todo-item[data-priority=\"high\"] {\n border-inline-start-color: var(--eth-color-danger);\n}\n\n.eth-todo-item[data-priority=\"medium\"] {\n border-inline-start-color: var(--eth-color-warning);\n}\n\n.eth-todo-item[data-priority=\"low\"] {\n border-inline-start-color: var(--eth-color-info);\n}\n\n.eth-todo-item:focus-within {\n outline: 2px solid var(--eth-color-focus);\n outline-offset: -2px;\n}\n\n.eth-todo-item:last-child,\n.eth-todo-list__items .eth-todo-item:last-child {\n border-block-end: 0;\n}\n\n.eth-todo-item:hover {\n background: var(--eth-color-layer-hover);\n}\n\n.eth-todo-item--done {\n color: var(--eth-color-text-primary);\n}\n\n.eth-todo-item__content {\n min-inline-size: 0;\n padding-block: var(--eth-space-md);\n}\n\n.eth-todo-item__checkbox {\n min-inline-size: 0;\n}\n\n.eth-todo-item__checkbox .cds--checkbox-label {\n align-items: flex-start;\n min-inline-size: 0;\n}\n\n.eth-todo-item__checkbox .cds--checkbox-label-text {\n font-size: calc(0.875rem * var(--eth-text-scale, 1));\n line-height: 1.2857;\n min-inline-size: 0;\n overflow-wrap: anywhere;\n}\n\n.eth-todo-item--done .cds--checkbox-label-text {\n color: var(--eth-color-text-secondary);\n}\n\n.eth-todo-item__primary {\n min-inline-size: 0;\n}\n\n.eth-todo-item .eth-checkbox {\n min-inline-size: 0;\n}\n\n.eth-todo-item__label {\n color: var(--eth-color-text-primary);\n display: block;\n font-size: calc(0.875rem * var(--eth-text-scale, 1));\n line-height: 1.2857;\n overflow-wrap: anywhere;\n}\n\n.eth-todo-item--done .eth-todo-item__label {\n color: var(--eth-color-text-secondary);\n text-decoration: line-through;\n text-decoration-thickness: 1px;\n}\n\n.eth-todo-item__meta {\n align-items: center;\n color: var(--eth-color-text-secondary);\n display: flex;\n flex-wrap: wrap;\n gap: var(--eth-space-sm);\n justify-content: flex-end;\n max-inline-size: min(24rem, 45vw);\n min-inline-size: 0;\n padding-block: var(--eth-space-sm);\n}\n\n.eth-todo-item--done .eth-todo-item__meta {\n opacity: 0.78;\n}\n\n.eth-todo-item__tag {\n flex: 0 1 auto;\n}\n\n.eth-todo-item__due {\n color: var(--eth-color-text-helper);\n display: inline-flex;\n flex: 0 0 auto;\n font-size: calc(0.75rem * var(--eth-text-scale, 1));\n gap: var(--eth-space-xs);\n line-height: 1rem;\n white-space: nowrap;\n}\n\n.eth-todo-item__due-label {\n color: var(--eth-color-text-helper);\n}\n\n.eth-todo-list__empty {\n color: var(--eth-color-text-secondary);\n font-size: calc(0.875rem * var(--eth-text-scale, 1));\n line-height: 1.2857;\n margin: 0;\n padding: var(--eth-space-xl) var(--eth-space-lg);\n}\n\n.eth-todo-list__add {\n align-items: end;\n background: var(--eth-color-layer-02);\n border-top: 1px solid var(--eth-color-border-subtle);\n display: grid;\n gap: var(--eth-space-sm);\n grid-template-columns: minmax(0, 1fr) auto;\n min-inline-size: 0;\n padding: var(--eth-space-lg);\n}\n\n.eth-todo-list__add .cds--form-item,\n.eth-todo-list__add .cds--text-input-wrapper {\n min-inline-size: 0;\n}\n\n.eth-todo-list__add .eth-button {\n min-inline-size: 5.5rem;\n}\n\n.eth-todo-timeline__events {\n list-style: none;\n}\n\n.eth-todo-timeline__event {\n border-bottom: 1px solid var(--eth-color-border-subtle);\n display: grid;\n gap: var(--eth-space-md);\n grid-template-columns: minmax(8rem, 12rem) minmax(0, 1fr);\n padding: var(--eth-space-md);\n}\n\n.eth-todo-timeline__event:last-child {\n border-bottom: 0;\n}\n\n.eth-todo-timeline__event time {\n color: var(--eth-color-text-helper);\n font-size: calc(0.75rem * var(--eth-text-scale, 1));\n line-height: 1.3333;\n}\n\n.eth-todo-timeline__event p {\n margin: var(--eth-space-xs) 0 0;\n}\n\n.eth-kanban-board__live {\n block-size: 1px;\n clip-path: inset(50%);\n inline-size: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n}\n\n@media (width <= 42rem) {\n .eth-todo-kanban,\n .eth-kanban-board {\n padding: var(--eth-space-md);\n }\n\n .eth-todo-list__add,\n .eth-todo-timeline__event {\n grid-template-columns: 1fr;\n }\n\n .eth-todo-item {\n align-items: stretch;\n grid-template-columns: 1fr;\n gap: var(--eth-space-xs);\n padding-block: var(--eth-space-sm);\n }\n\n .eth-todo-item__content {\n padding-block: 0;\n }\n\n .eth-todo-item__meta {\n justify-content: flex-start;\n max-inline-size: 100%;\n padding-block: 0;\n padding-inline-start: var(--eth-space-2xl);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,12 @@
1
+ import "./styles.css";
2
+ export * from "./types";
3
+ export { TodoList, type TodoListProps } from "./components/TodoList";
4
+ export { TodoItem, type TodoItemProps } from "./components/TodoItem";
5
+ export { KanbanBoard, type KanbanBoardProps } from "./components/KanbanBoard";
6
+ export { KanbanColumn, type KanbanColumnProps } from "./components/KanbanColumn";
7
+ export { TaskCard, type TaskCardProps } from "./components/TaskCard";
8
+ export { TaskTable, type TaskTableProps } from "./components/TaskTable";
9
+ export { TaskDependencyList, type TaskDependencyListProps } from "./components/TaskDependencyList";
10
+ export { TaskTimeline, type TaskTimelineProps } from "./components/TaskTimeline";
11
+ export declare const TodoComponentNames: readonly ["TodoList", "TodoItem", "KanbanBoard", "KanbanColumn", "TaskCard", "TaskTable", "TaskDependencyList", "TaskTimeline"];
12
+ export type TodoComponentName = (typeof TodoComponentNames)[number];