@devalok/shilp-sutra-karm 0.18.1 → 0.20.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.
- package/dist/_chunks/render-adjustment-type.js +50 -48
- package/dist/_chunks/sidebar-scratchpad.js +714 -326
- package/dist/_chunks/task-detail-panel.js +1638 -1175
- package/dist/_chunks/vendor.js +1154 -1123
- package/dist/dashboard/index.d.ts +20 -0
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +451 -5
- package/dist/dashboard/project-health-card.d.ts +22 -0
- package/dist/dashboard/project-health-card.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/index.d.ts +13 -0
- package/dist/dashboard/scratchpad/index.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-add-input.d.ts +11 -0
- package/dist/dashboard/scratchpad/scratchpad-add-input.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-collapse.d.ts +15 -0
- package/dist/dashboard/scratchpad/scratchpad-collapse.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-context.d.ts +44 -0
- package/dist/dashboard/scratchpad/scratchpad-context.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-empty-state.d.ts +13 -0
- package/dist/dashboard/scratchpad/scratchpad-empty-state.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-filter-toggle.d.ts +7 -0
- package/dist/dashboard/scratchpad/scratchpad-filter-toggle.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-header.d.ts +9 -0
- package/dist/dashboard/scratchpad/scratchpad-header.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-item.d.ts +13 -0
- package/dist/dashboard/scratchpad/scratchpad-item.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-list.d.ts +9 -0
- package/dist/dashboard/scratchpad/scratchpad-list.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-progress-ring.d.ts +11 -0
- package/dist/dashboard/scratchpad/scratchpad-progress-ring.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-root.d.ts +8 -0
- package/dist/dashboard/scratchpad/scratchpad-root.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad.d.ts +29 -0
- package/dist/dashboard/scratchpad/scratchpad.d.ts.map +1 -0
- package/dist/dashboard/scratchpad-widget.d.ts +5 -5
- package/dist/dashboard/scratchpad-widget.d.ts.map +1 -1
- package/dist/dashboard/sidebar-scratchpad.d.ts +8 -1
- package/dist/dashboard/sidebar-scratchpad.d.ts.map +1 -1
- package/dist/dashboard/week-heatmap/index.d.ts +10 -0
- package/dist/dashboard/week-heatmap/index.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-context.d.ts +31 -0
- package/dist/dashboard/week-heatmap/week-heatmap-context.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day-strip.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day-strip.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day.d.ts +15 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-progress-bar.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-progress-bar.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-root.d.ts +8 -0
- package/dist/dashboard/week-heatmap/week-heatmap-root.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-streak.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-streak.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-summary.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-summary.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap.d.ts +33 -0
- package/dist/dashboard/week-heatmap/week-heatmap.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -56
- package/dist/tasks/activity-tab.d.ts +2 -11
- package/dist/tasks/activity-tab.d.ts.map +1 -1
- package/dist/tasks/conversation-tab.d.ts +2 -21
- package/dist/tasks/conversation-tab.d.ts.map +1 -1
- package/dist/tasks/files-tab.d.ts +2 -18
- package/dist/tasks/files-tab.d.ts.map +1 -1
- package/dist/tasks/index.d.ts +13 -6
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +766 -8
- package/dist/tasks/pickers/index.d.ts +16 -0
- package/dist/tasks/pickers/index.d.ts.map +1 -0
- package/dist/tasks/pickers/task-assignee-picker.d.ts +14 -0
- package/dist/tasks/pickers/task-assignee-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-column-picker.d.ts +13 -0
- package/dist/tasks/pickers/task-column-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-date-picker.d.ts +12 -0
- package/dist/tasks/pickers/task-date-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-label-editor.d.ts +13 -0
- package/dist/tasks/pickers/task-label-editor.d.ts.map +1 -0
- package/dist/tasks/pickers/task-member-picker.d.ts +14 -0
- package/dist/tasks/pickers/task-member-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-priority-picker.d.ts +12 -0
- package/dist/tasks/pickers/task-priority-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-visibility-picker.d.ts +13 -0
- package/dist/tasks/pickers/task-visibility-picker.d.ts.map +1 -0
- package/dist/tasks/review-tab.d.ts +4 -20
- package/dist/tasks/review-tab.d.ts.map +1 -1
- package/dist/tasks/subtasks-tab.d.ts +2 -18
- package/dist/tasks/subtasks-tab.d.ts.map +1 -1
- package/dist/tasks/tabs/activity-entry.d.ts +9 -0
- package/dist/tasks/tabs/activity-entry.d.ts.map +1 -0
- package/dist/tasks/tabs/activity-timeline.d.ts +8 -0
- package/dist/tasks/tabs/activity-timeline.d.ts.map +1 -0
- package/dist/tasks/tabs/file-drop-zone.d.ts +10 -0
- package/dist/tasks/tabs/file-drop-zone.d.ts.map +1 -0
- package/dist/tasks/tabs/file-item.d.ts +11 -0
- package/dist/tasks/tabs/file-item.d.ts.map +1 -0
- package/dist/tasks/tabs/file-list.d.ts +8 -0
- package/dist/tasks/tabs/file-list.d.ts.map +1 -0
- package/dist/tasks/tabs/index.d.ts +34 -0
- package/dist/tasks/tabs/index.d.ts.map +1 -0
- package/dist/tasks/tabs/message-bubble.d.ts +14 -0
- package/dist/tasks/tabs/message-bubble.d.ts.map +1 -0
- package/dist/tasks/tabs/message-input.d.ts +16 -0
- package/dist/tasks/tabs/message-input.d.ts.map +1 -0
- package/dist/tasks/tabs/message-list.d.ts +9 -0
- package/dist/tasks/tabs/message-list.d.ts.map +1 -0
- package/dist/tasks/tabs/review-card.d.ts +10 -0
- package/dist/tasks/tabs/review-card.d.ts.map +1 -0
- package/dist/tasks/tabs/review-request-button.d.ts +10 -0
- package/dist/tasks/tabs/review-request-button.d.ts.map +1 -0
- package/dist/tasks/tabs/review-response-form.d.ts +11 -0
- package/dist/tasks/tabs/review-response-form.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-add-form.d.ts +9 -0
- package/dist/tasks/tabs/subtask-add-form.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-item.d.ts +12 -0
- package/dist/tasks/tabs/subtask-item.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-list.d.ts +8 -0
- package/dist/tasks/tabs/subtask-list.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-progress.d.ts +9 -0
- package/dist/tasks/tabs/subtask-progress.d.ts.map +1 -0
- package/dist/tasks/tabs/visibility-warning.d.ts +7 -0
- package/dist/tasks/tabs/visibility-warning.d.ts.map +1 -0
- package/dist/tasks/task-action-row/index.d.ts +3 -0
- package/dist/tasks/task-action-row/index.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-checkbox.d.ts +8 -0
- package/dist/tasks/task-action-row/task-action-row-checkbox.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-context.d.ts +21 -0
- package/dist/tasks/task-action-row/task-action-row-context.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-due-date.d.ts +5 -0
- package/dist/tasks/task-action-row/task-action-row-due-date.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-labels.d.ts +8 -0
- package/dist/tasks/task-action-row/task-action-row-labels.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-navigate.d.ts +9 -0
- package/dist/tasks/task-action-row/task-action-row-navigate.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-priority.d.ts +5 -0
- package/dist/tasks/task-action-row/task-action-row-priority.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-project-badge.d.ts +8 -0
- package/dist/tasks/task-action-row/task-action-row-project-badge.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-root.d.ts +14 -0
- package/dist/tasks/task-action-row/task-action-row-root.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-status-badge.d.ts +5 -0
- package/dist/tasks/task-action-row/task-action-row-status-badge.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-title.d.ts +9 -0
- package/dist/tasks/task-action-row/task-action-row-title.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row.d.ts +48 -0
- package/dist/tasks/task-action-row/task-action-row.d.ts.map +1 -0
- package/dist/tasks/task-detail-panel.d.ts.map +1 -1
- package/dist/tasks/task-panel.d.ts +104 -0
- package/dist/tasks/task-panel.d.ts.map +1 -0
- package/dist/tasks/task-properties.d.ts +2 -12
- package/dist/tasks/task-properties.d.ts.map +1 -1
- package/dist/tasks/task-types.d.ts +104 -0
- package/dist/tasks/task-types.d.ts.map +1 -0
- package/docs/components/admin/admin-dashboard.md +6 -6
- package/docs/components/admin/admin-utils.md +2 -2
- package/docs/components/admin/break-admin.md +14 -14
- package/docs/components/board/board-provider.md +16 -0
- package/docs/components/board/column-empty.md +1 -1
- package/docs/components/board/task-card.md +4 -0
- package/docs/components/chat/streaming-text.md +1 -1
- package/docs/components/client/client-portal-header.md +2 -2
- package/docs/components/dashboard/attendance-cta.md +3 -3
- package/docs/components/dashboard/daily-brief.md +1 -1
- package/docs/components/dashboard/project-health-card.md +90 -0
- package/docs/components/dashboard/scratchpad-widget.md +17 -0
- package/docs/components/dashboard/scratchpad.md +151 -0
- package/docs/components/dashboard/sidebar-scratchpad.md +29 -5
- package/docs/components/dashboard/week-heatmap.md +95 -0
- package/docs/components/tasks/activity-tab.md +4 -0
- package/docs/components/tasks/conversation-tab.md +4 -0
- package/docs/components/tasks/files-tab.md +4 -0
- package/docs/components/tasks/review-tab.md +5 -1
- package/docs/components/tasks/subtasks-tab.md +5 -0
- package/docs/components/tasks/task-action-row.md +159 -0
- package/docs/components/tasks/task-assignee-picker.md +36 -0
- package/docs/components/tasks/task-column-picker.md +37 -0
- package/docs/components/tasks/task-date-picker.md +49 -0
- package/docs/components/tasks/task-detail-panel.md +256 -84
- package/docs/components/tasks/task-label-editor.md +42 -0
- package/docs/components/tasks/task-member-picker.md +35 -0
- package/docs/components/tasks/task-panel.md +89 -0
- package/docs/components/tasks/task-priority-picker.md +37 -0
- package/docs/components/tasks/task-properties.md +5 -0
- package/docs/components/tasks/task-visibility-picker.md +38 -0
- package/llms.txt +40 -13
- package/package.json +1 -1
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
export { AttendanceCTA, type AttendanceCTAProps } from './attendance-cta';
|
|
3
|
+
export { ProjectHealthCard, type ProjectHealthCardProps, type ProjectHealthData, } from './project-health-card';
|
|
3
4
|
export { DailyBrief, type BriefData, type DailyBriefProps } from './daily-brief';
|
|
4
5
|
export { ScratchpadWidget, type ScratchpadItem, type ScratchpadWidgetProps } from './scratchpad-widget';
|
|
5
6
|
export { SidebarScratchpad, type SidebarScratchpadProps } from './sidebar-scratchpad';
|
|
7
|
+
export { Scratchpad } from './scratchpad';
|
|
8
|
+
export { ScratchpadProvider, useScratchpad, type ScratchpadContextValue, type ScratchpadProviderProps, } from './scratchpad/scratchpad-context';
|
|
9
|
+
export { type ScratchpadRootProps } from './scratchpad/scratchpad-root';
|
|
10
|
+
export { type ScratchpadHeaderProps } from './scratchpad/scratchpad-header';
|
|
11
|
+
export { type ScratchpadListProps } from './scratchpad/scratchpad-list';
|
|
12
|
+
export { type ScratchpadItemProps } from './scratchpad/scratchpad-item';
|
|
13
|
+
export { type ScratchpadAddInputProps } from './scratchpad/scratchpad-add-input';
|
|
14
|
+
export { type ScratchpadEmptyStateProps } from './scratchpad/scratchpad-empty-state';
|
|
15
|
+
export { type ScratchpadProgressRingProps } from './scratchpad/scratchpad-progress-ring';
|
|
16
|
+
export { type ScratchpadFilterToggleProps } from './scratchpad/scratchpad-filter-toggle';
|
|
17
|
+
export { type ScratchpadCollapseProps } from './scratchpad/scratchpad-collapse';
|
|
18
|
+
export { WeekHeatmap, type WeekHeatmapProps } from './week-heatmap';
|
|
19
|
+
export { WeekHeatmapProvider, useWeekHeatmap, type WeekHeatmapContextValue, type WeekHeatmapProviderProps, type WeekDay, } from './week-heatmap/week-heatmap-context';
|
|
20
|
+
export { type WeekHeatmapRootProps } from './week-heatmap/week-heatmap-root';
|
|
21
|
+
export { type WeekHeatmapDayStripProps } from './week-heatmap/week-heatmap-day-strip';
|
|
22
|
+
export { type WeekHeatmapDayProps } from './week-heatmap/week-heatmap-day';
|
|
23
|
+
export { type WeekHeatmapSummaryProps } from './week-heatmap/week-heatmap-summary';
|
|
24
|
+
export { type WeekHeatmapProgressBarProps } from './week-heatmap/week-heatmap-progress-bar';
|
|
25
|
+
export { type WeekHeatmapStreakProps } from './week-heatmap/week-heatmap-streak';
|
|
6
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACvG,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACvG,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAGrF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAC3E,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uCAAuC,CAAA;AACxF,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uCAAuC,CAAA;AACxF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAG/E,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,OAAO,GACb,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AACrF,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAClF,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,0CAA0C,CAAA;AAC3F,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oCAAoC,CAAA"}
|
package/dist/dashboard/index.js
CHANGED
|
@@ -1,8 +1,454 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { A as
|
|
2
|
+
import { A as Me, D as Re, b as je, c as Ae, S as Le, a as Be, u as Ie } from "../_chunks/sidebar-scratchpad.js";
|
|
3
|
+
import { jsx as r, jsxs as u, Fragment as G } from "react/jsx-runtime";
|
|
4
|
+
import * as k from "react";
|
|
5
|
+
import { useMemo as U, useContext as Z, createContext as q, useState as J, useRef as Q, useCallback as V } from "react";
|
|
6
|
+
import { motion as C } from "framer-motion";
|
|
7
|
+
import { cn as b } from "@devalok/shilp-sutra/ui/lib/utils";
|
|
8
|
+
import { motionProps as M } from "@devalok/shilp-sutra/ui/lib/motion";
|
|
9
|
+
import { Badge as S } from "@devalok/shilp-sutra/ui/badge";
|
|
10
|
+
import { Progress as R } from "@devalok/shilp-sutra/ui/progress";
|
|
11
|
+
import { MotionStagger as ee, MotionPop as te, MotionStaggerItem as re } from "@devalok/shilp-sutra/motion/primitives";
|
|
12
|
+
import { Tooltip as ae, TooltipTrigger as se, TooltipContent as ne, TooltipProvider as oe } from "@devalok/shilp-sutra/ui/tooltip";
|
|
13
|
+
function ce(t, e, s, o) {
|
|
14
|
+
if (t.length < 2) return { path: "", endX: 0, endY: 0, startX: 0 };
|
|
15
|
+
const a = t.length, i = e - o * 2, c = s - o * 2;
|
|
16
|
+
let m = Math.min(...t), p = Math.max(...t);
|
|
17
|
+
if (p - m < 0.1) {
|
|
18
|
+
const d = (p + m) / 2;
|
|
19
|
+
m = d - 0.05, p = d + 0.05;
|
|
20
|
+
}
|
|
21
|
+
const f = t.map((d, h) => o + h / (a - 1) * i), n = t.map(
|
|
22
|
+
(d) => o + (1 - (d - m) / (p - m)) * c
|
|
23
|
+
), l = [];
|
|
24
|
+
l.push(`M ${f[0]} ${n[0]}`);
|
|
25
|
+
for (let d = 0; d < a - 1; d++) {
|
|
26
|
+
const h = f[Math.max(0, d - 1)], g = n[Math.max(0, d - 1)], w = f[d], x = n[d], N = f[d + 1], v = n[d + 1], B = f[Math.min(a - 1, d + 2)], I = n[Math.min(a - 1, d + 2)], E = (N - h) / 6, X = (v - g) / 6, z = (B - w) / 6, F = (I - x) / 6, K = w + E, O = x + X, Y = N - z, _ = v - F;
|
|
27
|
+
l.push(`C ${K} ${O}, ${Y} ${_}, ${N} ${v}`);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
path: l.join(" "),
|
|
31
|
+
endX: f[a - 1],
|
|
32
|
+
endY: n[a - 1],
|
|
33
|
+
startX: f[0]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function le(t) {
|
|
37
|
+
const e = t.length;
|
|
38
|
+
if (e < 6)
|
|
39
|
+
return { stroke: "var(--warning-9)", fill: "var(--warning-4)" };
|
|
40
|
+
const s = (t[0] + t[1] + t[2]) / 3, a = (t[e - 3] + t[e - 2] + t[e - 1]) / 3 - s;
|
|
41
|
+
return a > 0.05 ? { stroke: "var(--success-9)", fill: "var(--success-4)" } : a < -0.05 ? { stroke: "var(--error-9)", fill: "var(--error-4)" } : { stroke: "var(--warning-9)", fill: "var(--warning-4)" };
|
|
42
|
+
}
|
|
43
|
+
function ie({ trend: t, id: e }) {
|
|
44
|
+
const { path: i, endX: c, endY: m, startX: p } = ce(
|
|
45
|
+
t,
|
|
46
|
+
48,
|
|
47
|
+
20,
|
|
48
|
+
2
|
|
49
|
+
), { stroke: f, fill: n } = le(t);
|
|
50
|
+
if (!i) return null;
|
|
51
|
+
const l = `sparkline-fill-${e}`;
|
|
52
|
+
return /* @__PURE__ */ u(
|
|
53
|
+
"svg",
|
|
54
|
+
{
|
|
55
|
+
width: 48,
|
|
56
|
+
height: 20,
|
|
57
|
+
viewBox: "0 0 48 20",
|
|
58
|
+
className: "sparkline",
|
|
59
|
+
"aria-hidden": "true",
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ r("defs", { children: /* @__PURE__ */ u("linearGradient", { id: l, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
62
|
+
/* @__PURE__ */ r("stop", { offset: "0%", stopColor: n, stopOpacity: 0.15 }),
|
|
63
|
+
/* @__PURE__ */ r("stop", { offset: "100%", stopColor: n, stopOpacity: 0 })
|
|
64
|
+
] }) }),
|
|
65
|
+
/* @__PURE__ */ r(
|
|
66
|
+
"path",
|
|
67
|
+
{
|
|
68
|
+
d: `${i} L ${c} 18 L ${p} 18 Z`,
|
|
69
|
+
fill: `url(#${l})`
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
/* @__PURE__ */ r(
|
|
73
|
+
"path",
|
|
74
|
+
{
|
|
75
|
+
d: i,
|
|
76
|
+
fill: "none",
|
|
77
|
+
stroke: f,
|
|
78
|
+
strokeWidth: 1.5,
|
|
79
|
+
strokeLinecap: "round",
|
|
80
|
+
strokeLinejoin: "round"
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ r("circle", { cx: c, cy: m, r: 2, fill: f })
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
function de({
|
|
89
|
+
className: t,
|
|
90
|
+
...e
|
|
91
|
+
}) {
|
|
92
|
+
return /* @__PURE__ */ r(
|
|
93
|
+
"div",
|
|
94
|
+
{
|
|
95
|
+
className: b(
|
|
96
|
+
"rounded-ds-md border border-surface-border bg-surface-1 p-ds-04",
|
|
97
|
+
t
|
|
98
|
+
),
|
|
99
|
+
...e,
|
|
100
|
+
children: /* @__PURE__ */ u("div", { className: "flex flex-col gap-ds-03", children: [
|
|
101
|
+
/* @__PURE__ */ u("div", { className: "flex justify-between", children: [
|
|
102
|
+
/* @__PURE__ */ r("div", { className: "h-5 w-32 animate-pulse rounded bg-surface-2" }),
|
|
103
|
+
/* @__PURE__ */ r("div", { className: "h-5 w-16 animate-pulse rounded bg-surface-2" })
|
|
104
|
+
] }),
|
|
105
|
+
/* @__PURE__ */ r("div", { className: "h-2 w-full animate-pulse rounded bg-surface-2" }),
|
|
106
|
+
/* @__PURE__ */ r("div", { className: "h-4 w-48 animate-pulse rounded bg-surface-2" })
|
|
107
|
+
] })
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
function ue({
|
|
112
|
+
urgent: t,
|
|
113
|
+
overdue: e
|
|
114
|
+
}) {
|
|
115
|
+
return t && t > 0 ? /* @__PURE__ */ u(S, { variant: "solid", color: "error", size: "xs", className: "whitespace-nowrap", children: [
|
|
116
|
+
t,
|
|
117
|
+
" urgent"
|
|
118
|
+
] }) : e && e > 0 ? /* @__PURE__ */ u(S, { variant: "subtle", color: "warning", size: "xs", className: "whitespace-nowrap", children: [
|
|
119
|
+
e,
|
|
120
|
+
" overdue"
|
|
121
|
+
] }) : /* @__PURE__ */ r(S, { variant: "subtle", color: "success", size: "xs", className: "whitespace-nowrap", children: "on track" });
|
|
122
|
+
}
|
|
123
|
+
function me(t) {
|
|
124
|
+
return t > 75 ? "success" : t >= 25 ? "warning" : "error";
|
|
125
|
+
}
|
|
126
|
+
const pe = k.forwardRef(function({ project: e, onClick: s, loading: o, className: a, ...i }, c) {
|
|
127
|
+
if (o)
|
|
128
|
+
return /* @__PURE__ */ r(de, { className: a, ...i });
|
|
129
|
+
const { id: m, name: p, completed: f, total: n, overdue: l, urgent: d, contextLine: h, trend: g } = e, w = n > 0 ? Math.round(f / n * 100) : 0, x = [];
|
|
130
|
+
h && x.push(
|
|
131
|
+
/* @__PURE__ */ r("span", { children: h }, "ctx")
|
|
132
|
+
), l && l > 0 && (x.length > 0 && x.push(
|
|
133
|
+
/* @__PURE__ */ r("span", { "aria-hidden": "true", children: " · " }, "sep")
|
|
134
|
+
), x.push(
|
|
135
|
+
/* @__PURE__ */ u("span", { className: "text-error-11", children: [
|
|
136
|
+
l,
|
|
137
|
+
" overdue"
|
|
138
|
+
] }, "overdue")
|
|
139
|
+
));
|
|
140
|
+
const N = s ? {
|
|
141
|
+
whileTap: { scale: 0.98 },
|
|
142
|
+
onClick: s,
|
|
143
|
+
role: "button",
|
|
144
|
+
tabIndex: 0,
|
|
145
|
+
onKeyDown: (v) => {
|
|
146
|
+
(v.key === "Enter" || v.key === " ") && (v.preventDefault(), s());
|
|
147
|
+
}
|
|
148
|
+
} : {};
|
|
149
|
+
return /* @__PURE__ */ r(
|
|
150
|
+
C.div,
|
|
151
|
+
{
|
|
152
|
+
ref: c,
|
|
153
|
+
"data-testid": "project-health-card",
|
|
154
|
+
className: b(
|
|
155
|
+
"rounded-ds-md border border-surface-border bg-surface-1 p-ds-04",
|
|
156
|
+
s && "cursor-pointer hover:bg-surface-2 transition-colors duration-150",
|
|
157
|
+
a
|
|
158
|
+
),
|
|
159
|
+
...N,
|
|
160
|
+
...M(i),
|
|
161
|
+
children: /* @__PURE__ */ u("div", { className: "flex flex-col gap-ds-03", children: [
|
|
162
|
+
/* @__PURE__ */ u("div", { className: "flex items-center justify-between gap-ds-02", children: [
|
|
163
|
+
/* @__PURE__ */ r("span", { className: "min-w-0 truncate text-ds-md font-semibold text-surface-fg", children: p }),
|
|
164
|
+
/* @__PURE__ */ r(ue, { urgent: d, overdue: l })
|
|
165
|
+
] }),
|
|
166
|
+
/* @__PURE__ */ u("div", { className: "flex items-center gap-ds-03", children: [
|
|
167
|
+
/* @__PURE__ */ u("div", { className: "flex-1 flex items-center gap-ds-03", children: [
|
|
168
|
+
/* @__PURE__ */ r("div", { className: "flex-1", children: /* @__PURE__ */ r(R, { size: "sm", color: me(w), value: w, "aria-label": `${p} progress` }) }),
|
|
169
|
+
/* @__PURE__ */ u("span", { className: "shrink-0 text-ds-sm text-surface-fg-muted", children: [
|
|
170
|
+
f,
|
|
171
|
+
"/",
|
|
172
|
+
n,
|
|
173
|
+
" tasks"
|
|
174
|
+
] })
|
|
175
|
+
] }),
|
|
176
|
+
g && g.length >= 2 && /* @__PURE__ */ r(ie, { trend: g, id: m })
|
|
177
|
+
] }),
|
|
178
|
+
x.length > 0 && /* @__PURE__ */ r("div", { className: "text-ds-xs text-surface-fg-subtle", children: x })
|
|
179
|
+
] })
|
|
180
|
+
}
|
|
181
|
+
);
|
|
182
|
+
});
|
|
183
|
+
pe.displayName = "ProjectHealthCard";
|
|
184
|
+
const j = q(null);
|
|
185
|
+
function y() {
|
|
186
|
+
const t = Z(j);
|
|
187
|
+
if (!t)
|
|
188
|
+
throw new Error("useWeekHeatmap must be used within a WeekHeatmapProvider");
|
|
189
|
+
return t;
|
|
190
|
+
}
|
|
191
|
+
function fe(t, e) {
|
|
192
|
+
const s = t.filter((a) => a.date < e).sort((a, i) => i.date.localeCompare(a.date));
|
|
193
|
+
let o = 0;
|
|
194
|
+
for (const a of s)
|
|
195
|
+
if (a.total > 0 && a.completed === a.total)
|
|
196
|
+
o++;
|
|
197
|
+
else
|
|
198
|
+
break;
|
|
199
|
+
return o;
|
|
200
|
+
}
|
|
201
|
+
function A({
|
|
202
|
+
children: t,
|
|
203
|
+
days: e,
|
|
204
|
+
onDayClick: s,
|
|
205
|
+
overdue: o,
|
|
206
|
+
today: a
|
|
207
|
+
}) {
|
|
208
|
+
const i = a ?? (/* @__PURE__ */ new Date()).toISOString().split("T")[0], c = U(() => {
|
|
209
|
+
const m = e.reduce((n, l) => n + l.completed, 0), p = e.reduce((n, l) => n + l.total, 0), f = fe(e, i);
|
|
210
|
+
return {
|
|
211
|
+
days: e,
|
|
212
|
+
onDayClick: s,
|
|
213
|
+
overdue: o,
|
|
214
|
+
totalCompleted: m,
|
|
215
|
+
totalTasks: p,
|
|
216
|
+
streak: f,
|
|
217
|
+
today: i
|
|
218
|
+
};
|
|
219
|
+
}, [e, s, o, i]);
|
|
220
|
+
return /* @__PURE__ */ r(j.Provider, { value: c, children: t });
|
|
221
|
+
}
|
|
222
|
+
A.displayName = "WeekHeatmapProvider";
|
|
223
|
+
const H = k.forwardRef(
|
|
224
|
+
function({ days: e, onDayClick: s, overdue: o, today: a, className: i, children: c, ...m }, p) {
|
|
225
|
+
return /* @__PURE__ */ r(
|
|
226
|
+
A,
|
|
227
|
+
{
|
|
228
|
+
days: e,
|
|
229
|
+
onDayClick: s,
|
|
230
|
+
overdue: o,
|
|
231
|
+
today: a,
|
|
232
|
+
children: /* @__PURE__ */ r("div", { ref: p, className: b("flex flex-col gap-ds-04", i), ...m, children: c })
|
|
233
|
+
}
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
);
|
|
237
|
+
H.displayName = "WeekHeatmapRoot";
|
|
238
|
+
const he = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
|
|
239
|
+
function ge(t) {
|
|
240
|
+
const s = (/* @__PURE__ */ new Date(t + "T00:00:00")).getDay(), o = s === 0 ? 6 : s - 1;
|
|
241
|
+
return he[o];
|
|
242
|
+
}
|
|
243
|
+
function xe(t) {
|
|
244
|
+
return (/* @__PURE__ */ new Date(t + "T00:00:00")).toLocaleDateString("en-US", {
|
|
245
|
+
weekday: "long",
|
|
246
|
+
month: "short",
|
|
247
|
+
day: "numeric"
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
function ke(t, e) {
|
|
251
|
+
return t.date === e ? "today" : t.total === 0 ? "empty" : t.date > e ? "future" : t.completed === t.total ? "complete" : t.completed > 0 ? "partial" : "none";
|
|
252
|
+
}
|
|
253
|
+
const be = {
|
|
254
|
+
complete: "bg-success-9 text-success-11",
|
|
255
|
+
partial: "bg-warning-9 text-warning-11",
|
|
256
|
+
none: "bg-error-9 text-error-11",
|
|
257
|
+
today: "bg-info-9 ring-1 ring-info-7 text-info-11 font-medium",
|
|
258
|
+
future: "bg-surface-3 text-surface-fg-muted",
|
|
259
|
+
empty: "bg-surface-2 border border-dashed border-surface-border text-surface-fg-subtle"
|
|
260
|
+
}, W = k.forwardRef(
|
|
261
|
+
function({ day: e, index: s, focusedIndex: o, onFocusChange: a }, i) {
|
|
262
|
+
const { onDayClick: c, today: m } = y(), p = ke(e, m), f = ge(e.date), n = p === "empty", l = /* @__PURE__ */ u("div", { className: "flex flex-col", children: [
|
|
263
|
+
/* @__PURE__ */ r("span", { children: xe(e.date) }),
|
|
264
|
+
/* @__PURE__ */ r("span", { children: e.total > 0 ? `${e.completed} of ${e.total} completed` : "No tasks" })
|
|
265
|
+
] }), d = () => {
|
|
266
|
+
n || p === "future" || c == null || c(e.date);
|
|
267
|
+
}, h = (g) => {
|
|
268
|
+
(g.key === "Enter" || g.key === " ") && (g.preventDefault(), c == null || c(e.date));
|
|
269
|
+
};
|
|
270
|
+
return /* @__PURE__ */ u(ae, { children: [
|
|
271
|
+
/* @__PURE__ */ r(se, { asChild: !0, children: /* @__PURE__ */ u(
|
|
272
|
+
C.div,
|
|
273
|
+
{
|
|
274
|
+
ref: i,
|
|
275
|
+
role: "gridcell",
|
|
276
|
+
tabIndex: o === s ? 0 : -1,
|
|
277
|
+
"aria-disabled": n || void 0,
|
|
278
|
+
"aria-label": `${f}, ${e.completed} of ${e.total} completed`,
|
|
279
|
+
className: "flex cursor-pointer flex-col items-center gap-ds-02 outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent-7",
|
|
280
|
+
onClick: d,
|
|
281
|
+
onFocus: () => a(s),
|
|
282
|
+
onKeyDown: h,
|
|
283
|
+
whileTap: { scale: 0.95 },
|
|
284
|
+
children: [
|
|
285
|
+
/* @__PURE__ */ r("span", { className: "text-ds-xs text-surface-fg-muted", children: f }),
|
|
286
|
+
/* @__PURE__ */ r(
|
|
287
|
+
"div",
|
|
288
|
+
{
|
|
289
|
+
className: b(
|
|
290
|
+
"flex h-8 w-10 items-center justify-center rounded-ds-md transition-colors duration-150",
|
|
291
|
+
be[p]
|
|
292
|
+
)
|
|
293
|
+
}
|
|
294
|
+
),
|
|
295
|
+
e.total > 0 ? /* @__PURE__ */ u("span", { className: "text-ds-xs text-surface-fg-muted", children: [
|
|
296
|
+
e.completed,
|
|
297
|
+
"/",
|
|
298
|
+
e.total
|
|
299
|
+
] }) : /* @__PURE__ */ r("span", { className: "text-ds-xs text-surface-fg-subtle", children: "—" })
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
) }),
|
|
303
|
+
/* @__PURE__ */ r(ne, { children: l })
|
|
304
|
+
] });
|
|
305
|
+
}
|
|
306
|
+
);
|
|
307
|
+
W.displayName = "WeekHeatmapDay";
|
|
308
|
+
const D = k.forwardRef(
|
|
309
|
+
function({ className: e, ...s }, o) {
|
|
310
|
+
const { days: a, today: i } = y(), [c, m] = J(0), p = Q([]), f = V(
|
|
311
|
+
(n) => {
|
|
312
|
+
var d;
|
|
313
|
+
let l = c;
|
|
314
|
+
switch (n.key) {
|
|
315
|
+
case "ArrowRight":
|
|
316
|
+
n.preventDefault(), l = Math.min(c + 1, a.length - 1);
|
|
317
|
+
break;
|
|
318
|
+
case "ArrowLeft":
|
|
319
|
+
n.preventDefault(), l = Math.max(c - 1, 0);
|
|
320
|
+
break;
|
|
321
|
+
case "Home":
|
|
322
|
+
n.preventDefault(), l = 0;
|
|
323
|
+
break;
|
|
324
|
+
case "End":
|
|
325
|
+
n.preventDefault(), l = a.length - 1;
|
|
326
|
+
break;
|
|
327
|
+
default:
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
m(l), (d = p.current[l]) == null || d.focus();
|
|
331
|
+
},
|
|
332
|
+
[c, a.length]
|
|
333
|
+
);
|
|
334
|
+
return /* @__PURE__ */ r(oe, { children: /* @__PURE__ */ r(
|
|
335
|
+
ee,
|
|
336
|
+
{
|
|
337
|
+
ref: o,
|
|
338
|
+
role: "grid",
|
|
339
|
+
"aria-label": "Weekly task completion",
|
|
340
|
+
delay: 0.05,
|
|
341
|
+
className: b("grid grid-cols-7 gap-ds-03", e),
|
|
342
|
+
onKeyDown: f,
|
|
343
|
+
...M(s),
|
|
344
|
+
children: /* @__PURE__ */ r("div", { role: "row", className: "contents", children: a.map((n, l) => {
|
|
345
|
+
const d = n.date === i, h = /* @__PURE__ */ r(
|
|
346
|
+
W,
|
|
347
|
+
{
|
|
348
|
+
ref: (g) => {
|
|
349
|
+
p.current[l] = g;
|
|
350
|
+
},
|
|
351
|
+
day: n,
|
|
352
|
+
index: l,
|
|
353
|
+
focusedIndex: c,
|
|
354
|
+
onFocusChange: m
|
|
355
|
+
}
|
|
356
|
+
);
|
|
357
|
+
return d ? /* @__PURE__ */ r(te, { show: !0, preset: "bouncy", children: h }, n.date) : /* @__PURE__ */ r(re, { children: h }, n.date);
|
|
358
|
+
}) })
|
|
359
|
+
}
|
|
360
|
+
) });
|
|
361
|
+
}
|
|
362
|
+
);
|
|
363
|
+
D.displayName = "WeekHeatmapDayStrip";
|
|
364
|
+
const $ = k.forwardRef(
|
|
365
|
+
function({ className: e, ...s }, o) {
|
|
366
|
+
const { totalCompleted: a, totalTasks: i, overdue: c } = y(), m = i - a;
|
|
367
|
+
return /* @__PURE__ */ u(
|
|
368
|
+
"div",
|
|
369
|
+
{
|
|
370
|
+
ref: o,
|
|
371
|
+
className: b("flex items-center gap-ds-03 text-ds-sm", e),
|
|
372
|
+
...s,
|
|
373
|
+
children: [
|
|
374
|
+
/* @__PURE__ */ u("span", { className: "text-success-11", children: [
|
|
375
|
+
a,
|
|
376
|
+
" completed"
|
|
377
|
+
] }),
|
|
378
|
+
/* @__PURE__ */ r("span", { className: "text-surface-fg-subtle", children: "·" }),
|
|
379
|
+
/* @__PURE__ */ u("span", { className: "text-surface-fg-muted", children: [
|
|
380
|
+
m,
|
|
381
|
+
" remaining"
|
|
382
|
+
] }),
|
|
383
|
+
c != null && c > 0 && /* @__PURE__ */ u(G, { children: [
|
|
384
|
+
/* @__PURE__ */ r("span", { className: "text-surface-fg-subtle", children: "·" }),
|
|
385
|
+
/* @__PURE__ */ u("span", { className: "text-error-11", children: [
|
|
386
|
+
c,
|
|
387
|
+
" overdue"
|
|
388
|
+
] })
|
|
389
|
+
] })
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
);
|
|
395
|
+
$.displayName = "WeekHeatmapSummary";
|
|
396
|
+
const P = k.forwardRef(
|
|
397
|
+
function({ className: e, ...s }, o) {
|
|
398
|
+
const { totalCompleted: a, totalTasks: i } = y(), c = i > 0 ? Math.round(a / i * 100) : 0;
|
|
399
|
+
return /* @__PURE__ */ r("div", { ref: o, className: b(e), ...s, children: /* @__PURE__ */ r(R, { color: "success", size: "sm", value: c, "aria-label": "Weekly completion progress" }) });
|
|
400
|
+
}
|
|
401
|
+
);
|
|
402
|
+
P.displayName = "WeekHeatmapProgressBar";
|
|
403
|
+
const T = k.forwardRef(
|
|
404
|
+
function({ className: e, ...s }, o) {
|
|
405
|
+
const { streak: a } = y();
|
|
406
|
+
return a <= 1 ? null : /* @__PURE__ */ u(
|
|
407
|
+
"div",
|
|
408
|
+
{
|
|
409
|
+
ref: o,
|
|
410
|
+
className: b("text-ds-sm font-medium text-warning-11", e),
|
|
411
|
+
...s,
|
|
412
|
+
children: [
|
|
413
|
+
"🔥 ",
|
|
414
|
+
a,
|
|
415
|
+
"-day streak"
|
|
416
|
+
]
|
|
417
|
+
}
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
);
|
|
421
|
+
T.displayName = "WeekHeatmapStreak";
|
|
422
|
+
const L = k.forwardRef(
|
|
423
|
+
function(e, s) {
|
|
424
|
+
const { children: o, ...a } = e;
|
|
425
|
+
return /* @__PURE__ */ u(H, { ref: s, ...a, children: [
|
|
426
|
+
/* @__PURE__ */ r(D, {}),
|
|
427
|
+
/* @__PURE__ */ r(T, {}),
|
|
428
|
+
/* @__PURE__ */ r($, {}),
|
|
429
|
+
/* @__PURE__ */ r(P, {})
|
|
430
|
+
] });
|
|
431
|
+
}
|
|
432
|
+
);
|
|
433
|
+
L.displayName = "WeekHeatmap";
|
|
434
|
+
const Pe = Object.assign(L, {
|
|
435
|
+
Root: H,
|
|
436
|
+
DayStrip: D,
|
|
437
|
+
Day: W,
|
|
438
|
+
Summary: $,
|
|
439
|
+
ProgressBar: P,
|
|
440
|
+
Streak: T
|
|
441
|
+
});
|
|
3
442
|
export {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
443
|
+
Me as AttendanceCTA,
|
|
444
|
+
Re as DailyBrief,
|
|
445
|
+
pe as ProjectHealthCard,
|
|
446
|
+
je as Scratchpad,
|
|
447
|
+
Ae as ScratchpadProvider,
|
|
448
|
+
Le as ScratchpadWidget,
|
|
449
|
+
Be as SidebarScratchpad,
|
|
450
|
+
Pe as WeekHeatmap,
|
|
451
|
+
A as WeekHeatmapProvider,
|
|
452
|
+
Ie as useScratchpad,
|
|
453
|
+
y as useWeekHeatmap
|
|
8
454
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface ProjectHealthData {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
completed: number;
|
|
7
|
+
total: number;
|
|
8
|
+
overdue?: number;
|
|
9
|
+
urgent?: number;
|
|
10
|
+
contextLine?: string;
|
|
11
|
+
/** 7 values (0–1) for sparkline */
|
|
12
|
+
trend?: number[];
|
|
13
|
+
}
|
|
14
|
+
export interface ProjectHealthCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick'> {
|
|
15
|
+
project: ProjectHealthData;
|
|
16
|
+
onClick?: () => void;
|
|
17
|
+
loading?: boolean;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
declare const ProjectHealthCard: React.ForwardRefExoticComponent<ProjectHealthCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
21
|
+
export { ProjectHealthCard };
|
|
22
|
+
//# sourceMappingURL=project-health-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-health-card.d.ts","sourceRoot":"","sources":["../../src/dashboard/project-health-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAW9B,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC7D,OAAO,EAAE,iBAAiB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA2ND,QAAA,MAAM,iBAAiB,+FA+FrB,CAAA;AAIF,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
export { Scratchpad } from './scratchpad';
|
|
3
|
+
export { ScratchpadRoot, type ScratchpadRootProps } from './scratchpad-root';
|
|
4
|
+
export { ScratchpadHeader, type ScratchpadHeaderProps } from './scratchpad-header';
|
|
5
|
+
export { ScratchpadList, type ScratchpadListProps } from './scratchpad-list';
|
|
6
|
+
export { ScratchpadItem, type ScratchpadItemProps } from './scratchpad-item';
|
|
7
|
+
export { ScratchpadAddInput, type ScratchpadAddInputProps } from './scratchpad-add-input';
|
|
8
|
+
export { ScratchpadEmptyState, type ScratchpadEmptyStateProps } from './scratchpad-empty-state';
|
|
9
|
+
export { ScratchpadProgressRing, type ScratchpadProgressRingProps } from './scratchpad-progress-ring';
|
|
10
|
+
export { ScratchpadFilterToggle, type ScratchpadFilterToggleProps } from './scratchpad-filter-toggle';
|
|
11
|
+
export { ScratchpadCollapse, type ScratchpadCollapseProps } from './scratchpad-collapse';
|
|
12
|
+
export { ScratchpadProvider, useScratchpad, type ScratchpadItem as ScratchpadItemData, type ScratchpadContextValue, type ScratchpadProviderProps, } from './scratchpad-context';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dashboard/scratchpad/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAC/F,OAAO,EAAE,sBAAsB,EAAE,KAAK,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACrG,OAAO,EAAE,sBAAsB,EAAE,KAAK,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACrG,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAGxF,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,cAAc,IAAI,kBAAkB,EACzC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface ScratchpadAddInputProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/** Placeholder text for the input */
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
/** Label for the trigger button */
|
|
7
|
+
triggerLabel?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const ScratchpadAddInput: React.ForwardRefExoticComponent<ScratchpadAddInputProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export { ScratchpadAddInput };
|
|
11
|
+
//# sourceMappingURL=scratchpad-add-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratchpad-add-input.d.ts","sourceRoot":"","sources":["../../../src/dashboard/scratchpad/scratchpad-add-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAW9B,MAAM,WAAW,uBAAwB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACnF,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAMD,QAAA,MAAM,kBAAkB,gGAiFvB,CAAA;AAID,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface ScratchpadCollapseProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/** Header label */
|
|
5
|
+
label?: string;
|
|
6
|
+
/** Whether expanded on first render */
|
|
7
|
+
defaultOpen?: boolean;
|
|
8
|
+
/** Badge count shown next to the label */
|
|
9
|
+
badgeCount?: number;
|
|
10
|
+
/** Header text size class override */
|
|
11
|
+
headerClassName?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const ScratchpadCollapse: React.ForwardRefExoticComponent<ScratchpadCollapseProps & React.RefAttributes<HTMLDivElement>>;
|
|
14
|
+
export { ScratchpadCollapse };
|
|
15
|
+
//# sourceMappingURL=scratchpad-collapse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratchpad-collapse.d.ts","sourceRoot":"","sources":["../../../src/dashboard/scratchpad/scratchpad-collapse.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,MAAM,WAAW,uBAAwB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACnF,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAMD,QAAA,MAAM,kBAAkB,gGAqDvB,CAAA;AAID,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface ScratchpadItem {
|
|
4
|
+
id: string;
|
|
5
|
+
text: string;
|
|
6
|
+
done: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ScratchpadContextValue {
|
|
9
|
+
items: ScratchpadItem[];
|
|
10
|
+
visibleItems: ScratchpadItem[];
|
|
11
|
+
maxItems: number;
|
|
12
|
+
showCompleted: boolean;
|
|
13
|
+
setShowCompleted: (show: boolean) => void;
|
|
14
|
+
onToggle: (id: string, done: boolean) => void;
|
|
15
|
+
onAdd?: (text: string) => void;
|
|
16
|
+
onDelete?: (id: string) => void;
|
|
17
|
+
onEdit?: (id: string, text: string) => void;
|
|
18
|
+
onReorder?: (items: ScratchpadItem[]) => void;
|
|
19
|
+
onPromote?: (id: string) => void;
|
|
20
|
+
canAdd: boolean;
|
|
21
|
+
canDelete: boolean;
|
|
22
|
+
canEdit: boolean;
|
|
23
|
+
canReorder: boolean;
|
|
24
|
+
canPromote: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface ScratchpadProviderProps {
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
items: ScratchpadItem[];
|
|
29
|
+
maxItems?: number;
|
|
30
|
+
onToggle: (id: string, done: boolean) => void;
|
|
31
|
+
onAdd?: (text: string) => void;
|
|
32
|
+
onDelete?: (id: string) => void;
|
|
33
|
+
onEdit?: (id: string, text: string) => void;
|
|
34
|
+
onReorder?: (items: ScratchpadItem[]) => void;
|
|
35
|
+
onPromote?: (id: string) => void;
|
|
36
|
+
defaultShowCompleted?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function useScratchpad(): ScratchpadContextValue;
|
|
39
|
+
declare function ScratchpadProvider({ children, items, maxItems, onToggle, onAdd, onDelete, onEdit, onReorder, onPromote, defaultShowCompleted, }: ScratchpadProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
declare namespace ScratchpadProvider {
|
|
41
|
+
var displayName: string;
|
|
42
|
+
}
|
|
43
|
+
export { ScratchpadProvider };
|
|
44
|
+
//# sourceMappingURL=scratchpad-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratchpad-context.d.ts","sourceRoot":"","sources":["../../../src/dashboard/scratchpad/scratchpad-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,YAAY,EAAE,cAAc,EAAE,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACzC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;IAC7C,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;IAC7C,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAQD,wBAAgB,aAAa,IAAI,sBAAsB,CAMtD;AAMD,iBAAS,kBAAkB,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,QAAa,EACb,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,SAAS,EACT,oBAA2B,GAC5B,EAAE,uBAAuB,2CA+BzB;kBA1CQ,kBAAkB;;;AA8C3B,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface ScratchpadEmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/** Icon shown above the message */
|
|
5
|
+
icon?: React.ComponentType<{
|
|
6
|
+
className?: string;
|
|
7
|
+
}>;
|
|
8
|
+
/** Message displayed when no items */
|
|
9
|
+
message?: string;
|
|
10
|
+
}
|
|
11
|
+
declare const ScratchpadEmptyState: React.ForwardRefExoticComponent<ScratchpadEmptyStateProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export { ScratchpadEmptyState };
|
|
13
|
+
//# sourceMappingURL=scratchpad-empty-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratchpad-empty-state.d.ts","sourceRoot":"","sources":["../../../src/dashboard/scratchpad/scratchpad-empty-state.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,MAAM,WAAW,yBAA0B,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrF,mCAAmC;IACnC,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAMD,QAAA,MAAM,oBAAoB,kGAwBzB,CAAA;AAID,OAAO,EAAE,oBAAoB,EAAE,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface ScratchpadFilterToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
|
|
4
|
+
}
|
|
5
|
+
declare const ScratchpadFilterToggle: React.ForwardRefExoticComponent<ScratchpadFilterToggleProps & React.RefAttributes<HTMLButtonElement>>;
|
|
6
|
+
export { ScratchpadFilterToggle };
|
|
7
|
+
//# sourceMappingURL=scratchpad-filter-toggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratchpad-filter-toggle.d.ts","sourceRoot":"","sources":["../../../src/dashboard/scratchpad/scratchpad-filter-toggle.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,MAAM,WAAW,2BACf,SAAQ,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAAG;AAM5E,QAAA,MAAM,sBAAsB,uGAsB3B,CAAA;AAID,OAAO,EAAE,sBAAsB,EAAE,CAAA"}
|