@burdenoff/planmagnet-fe-sdk 2026.706.7 → 2026.813.1

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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { HTMLAttributes, ReactNode, ComponentType, DragEvent } from 'react';
2
+ import { HTMLAttributes, ReactNode, ComponentType, DragEvent, Ref } from 'react';
3
3
  import { ApolloClient } from '@apollo/client/core';
4
4
  import * as graphql from 'graphql';
5
5
  import * as class_variance_authority_types from 'class-variance-authority/types';
@@ -64,6 +64,14 @@ interface Task {
64
64
  storyPoints?: number | null;
65
65
  dueDate?: string | null;
66
66
  labels: string[];
67
+ /**
68
+ * Board ordering within a status column (SDL `WorkItem.sortOrder`, backed by
69
+ * the Prisma `position` column via a read field resolver — safe to SELECT on
70
+ * query paths). Drives drag-to-reorder-within-a-column; the board sorts cards
71
+ * by this ascending so a persisted reorder survives refetch. Optional so older
72
+ * mocks/hosts that don't select it still type-check.
73
+ */
74
+ sortOrder?: number | null;
67
75
  }
68
76
  /**
69
77
  * A work item with the full field set from `WorkItemFields` — used by the
@@ -410,6 +418,12 @@ interface TaskCardProps {
410
418
  draggable?: boolean;
411
419
  onDragStart?: (task: Task, e: DragEvent<HTMLDivElement>) => void;
412
420
  onDragEnd?: (task: Task, e: DragEvent<HTMLDivElement>) => void;
421
+ /**
422
+ * Native drag-over on the card — the board uses this to compute a
423
+ * within-column reorder drop index (before/after this card). Only wired when
424
+ * `draggable`.
425
+ */
426
+ onDragOver?: (e: DragEvent<HTMLDivElement>) => void;
413
427
  /** True while this card is the one being dragged. */
414
428
  dragging?: boolean;
415
429
  resolveAssignee?: ResolveAssignee;
@@ -424,7 +438,7 @@ interface TaskCardProps {
424
438
  * only real fields (no invented assignee names or entity links). Semantic
425
439
  * tokens only.
426
440
  */
427
- declare function TaskCard({ task, hidden, onClick, draggable, onDragStart, onDragEnd, dragging, resolveAssignee, links, renderLinkIcon, className, }: TaskCardProps): react.JSX.Element;
441
+ declare function TaskCard({ task, hidden, onClick, draggable, onDragStart, onDragEnd, onDragOver, dragging, resolveAssignee, links, renderLinkIcon, className, }: TaskCardProps): react.JSX.Element;
428
442
 
429
443
  interface TaskBoardCoreProps {
430
444
  /** Scope the board to one project (client-side filter for Phase 1). */
@@ -556,6 +570,18 @@ interface CreateTaskCoreProps {
556
570
  assigneeOptions?: AssigneeOption[];
557
571
  /** Field names to hide on the form. */
558
572
  hiddenFields?: CreateTaskField[];
573
+ /**
574
+ * Statuses a user may SET, defaulting to every {@link TASK_STATUSES} value.
575
+ *
576
+ * ★ A host that narrows the board's `columns` must narrow this too. The board
577
+ * renders one column per entry and filters by exact status, so a work item in
578
+ * a status with no column renders NOWHERE — setting it would lose the task.
579
+ * `TasksPageCore` derives this from `columns` for exactly that reason.
580
+ *
581
+ * The item's CURRENT status is always offered even when absent from this list,
582
+ * so opening a task that predates a narrowing never silently rewrites it.
583
+ */
584
+ statuses?: TaskStatus[];
559
585
  /** Default values applied on first render. */
560
586
  defaultValues?: Partial<CreateTaskInput>;
561
587
  /** Hide the form header (title + subtitle). */
@@ -581,7 +607,7 @@ interface CreateTaskCoreProps {
581
607
  * Mirrors the TaskBoardCore contract: `workspaceId` from a prop or the
582
608
  * PlanMagnetProvider context, `hiddenFields` for host-driven field suppression.
583
609
  */
584
- declare function CreateTaskCore({ projectId: projectIdProp, assigneeOptions, hiddenFields, defaultValues, hideHeader, submitLabel, onCreated, onError, onCancel, className, workspaceId: workspaceIdProp, }: CreateTaskCoreProps): react.JSX.Element;
610
+ declare function CreateTaskCore({ projectId: projectIdProp, assigneeOptions, hiddenFields, statuses, defaultValues, hideHeader, submitLabel, onCreated, onError, onCancel, className, workspaceId: workspaceIdProp, }: CreateTaskCoreProps): react.JSX.Element;
585
611
 
586
612
  interface CreateTaskProps extends CreateTaskCoreProps {
587
613
  /** Workspace API gateway URL (URL mode). */
@@ -646,6 +672,18 @@ interface TaskListCoreProps {
646
672
  /** Free-text search (server-side). */
647
673
  search?: string;
648
674
  /** Columns to render (order preserved). */
675
+ /**
676
+ * Statuses a user may SET, defaulting to every {@link TASK_STATUSES} value.
677
+ *
678
+ * ★ A host that narrows the board's `columns` must narrow this too. The board
679
+ * renders one column per entry and filters by exact status, so a work item in
680
+ * a status with no column renders NOWHERE — setting it would lose the task.
681
+ * `TasksPageCore` derives this from `columns` for exactly that reason.
682
+ *
683
+ * The item's CURRENT status is always offered even when absent from this list,
684
+ * so opening a task that predates a narrowing never silently rewrites it.
685
+ */
686
+ statuses?: TaskStatus[];
649
687
  columns?: TaskListColumn[];
650
688
  /** Initial sort key. */
651
689
  sortBy?: TaskListSort;
@@ -690,7 +728,7 @@ interface TaskListCoreProps {
690
728
  * headers. Filters map to the server-side filter; sort is client-side.
691
729
  * BYO-Apollo, semantic-token only, farm-free.
692
730
  */
693
- declare function TaskListCore({ projectId, status, type, priority, assigneeId, search, columns, sortBy, sortDir, hideHeader, onSelect, resolveAssignee, linkSourceProduct, renderLinkIcon, limit, selectable, assigneeOptions, className, workspaceId: workspaceIdProp, }: TaskListCoreProps): react.JSX.Element;
731
+ declare function TaskListCore({ projectId, status, type, priority, assigneeId, search, columns, sortBy, sortDir, hideHeader, onSelect, resolveAssignee, linkSourceProduct, renderLinkIcon, limit, selectable, assigneeOptions, statuses, className, workspaceId: workspaceIdProp, }: TaskListCoreProps): react.JSX.Element;
694
732
 
695
733
  interface TaskListProps extends TaskListCoreProps {
696
734
  /** Workspace API gateway URL (URL mode). */
@@ -793,6 +831,11 @@ interface TaskToolbarProps {
793
831
  views?: TaskView[];
794
832
  search: string;
795
833
  onSearchChange: (search: string) => void;
834
+ /**
835
+ * Optional ref to the search `<input>` — lets a host focus it programmatically
836
+ * (e.g. the `/` keyboard shortcut on the composed Tasks page).
837
+ */
838
+ searchInputRef?: Ref<HTMLInputElement>;
796
839
  priority: TaskPriority | "ALL";
797
840
  onPriorityChange: (priority: TaskPriority | "ALL") => void;
798
841
  type: TaskType | "ALL";
@@ -802,6 +845,11 @@ interface TaskToolbarProps {
802
845
  /** "My tasks" toggle — only rendered when `onMineChange` is provided. */
803
846
  mine?: boolean;
804
847
  onMineChange?: (mine: boolean) => void;
848
+ /**
849
+ * Extra controls rendered at the LEADING edge of the right-hand action group
850
+ * (before search) — e.g. the Saved Views dropdown. Omit for none.
851
+ */
852
+ leadingActions?: ReactNode;
805
853
  className?: string;
806
854
  }
807
855
  /**
@@ -809,7 +857,7 @@ interface TaskToolbarProps {
809
857
  * view tabs (Board / List / Timeline) + search + priority/type filters + a
810
858
  * "New task" action. Fully controlled; semantic-token only.
811
859
  */
812
- declare function TaskToolbar({ view, onViewChange, views, search, onSearchChange, priority, onPriorityChange, type, onTypeChange, onNewTask, canCreate, mine, onMineChange, className, }: TaskToolbarProps): react.JSX.Element;
860
+ declare function TaskToolbar({ view, onViewChange, views, search, onSearchChange, searchInputRef, priority, onPriorityChange, type, onTypeChange, onNewTask, canCreate, mine, onMineChange, leadingActions, className, }: TaskToolbarProps): react.JSX.Element;
813
861
 
814
862
  /** Fields that can be hidden / suppressed on the detail view + edit form. */
815
863
  type TaskDetailField = "description" | "type" | "status" | "priority" | "assignee" | "dueDate" | "labels" | "storyPoints";
@@ -820,6 +868,18 @@ interface TaskDetailCoreProps {
820
868
  readonly?: boolean;
821
869
  /** Field names to hide. */
822
870
  hiddenFields?: TaskDetailField[];
871
+ /**
872
+ * Statuses a user may SET, defaulting to every {@link TASK_STATUSES} value.
873
+ *
874
+ * ★ A host that narrows the board's `columns` must narrow this too. The board
875
+ * renders one column per entry and filters by exact status, so a work item in
876
+ * a status with no column renders NOWHERE — setting it would lose the task.
877
+ * `TasksPageCore` derives this from `columns` for exactly that reason.
878
+ *
879
+ * The item's CURRENT status is always offered even when absent from this list,
880
+ * so opening a task that predates a narrowing never silently rewrites it.
881
+ */
882
+ statuses?: TaskStatus[];
823
883
  /** Hide the header (key + title). */
824
884
  hideHeader?: boolean;
825
885
  /** Called with the updated work item after a successful save. */
@@ -870,7 +930,7 @@ interface TaskDetailCoreProps {
870
930
  * edit. Fetches via `planmagnetWorkItem(id)`, saves via
871
931
  * `planmagnetUpdateWorkItem`. BYO-Apollo, semantic-token only, farm-free.
872
932
  */
873
- declare function TaskDetailCore({ id, readonly, hiddenFields, hideHeader, onUpdated, onDeleted, onError, resolveAssignee, assigneeOptions, linkSourceProduct, renderLinkIcon, onOpenItem, onAddSubtask, commentsEntityType, currentActorId, onMention, className, }: TaskDetailCoreProps): react.JSX.Element;
933
+ declare function TaskDetailCore({ id, readonly, hiddenFields, statuses, hideHeader, onUpdated, onDeleted, onError, resolveAssignee, assigneeOptions, linkSourceProduct, renderLinkIcon, onOpenItem, onAddSubtask, commentsEntityType, currentActorId, onMention, className, }: TaskDetailCoreProps): react.JSX.Element;
874
934
 
875
935
  interface TaskDetailProps extends TaskDetailCoreProps {
876
936
  /** Workspace API gateway URL (URL mode). */
@@ -965,6 +1025,22 @@ interface TaskLabels {
965
1025
  allTypes: string;
966
1026
  newTask: string;
967
1027
  myTasks: string;
1028
+ savedViews: string;
1029
+ saveView: string;
1030
+ viewName: string;
1031
+ saveViewAction: string;
1032
+ deleteView: string;
1033
+ noSavedViews: string;
1034
+ defaultViewName: string;
1035
+ keyboardShortcuts: string;
1036
+ shortcutNewTask: string;
1037
+ shortcutSearch: string;
1038
+ shortcutBoardView: string;
1039
+ shortcutListView: string;
1040
+ shortcutTimelineView: string;
1041
+ shortcutMyTasks: string;
1042
+ shortcutHelp: string;
1043
+ shortcutClose: string;
968
1044
  noTasks: string;
969
1045
  noTasksFound: string;
970
1046
  dropHere: string;
@@ -1053,6 +1129,7 @@ interface TaskLabels {
1053
1129
  projectRequired: string;
1054
1130
  errorLoading: string;
1055
1131
  moveFailed: string;
1132
+ reorderFailed: string;
1056
1133
  failedToCreate: string;
1057
1134
  failedToSave: string;
1058
1135
  failedToDelete: string;
@@ -1180,6 +1257,33 @@ interface TasksPageCoreProps {
1180
1257
  createSurface?: "modal" | "inline";
1181
1258
  /** How the detail view is surfaced. Defaults to "drawer". */
1182
1259
  detailSurface?: "drawer" | "inline";
1260
+ /**
1261
+ * Opt-in "Saved Views". When true, the toolbar state (view tab, priority /
1262
+ * type filters, search, "my tasks", and the list column config) is persisted
1263
+ * to `localStorage` (keyed per workspace) and restored on the next mount, and
1264
+ * a compact "Views" dropdown lets the user save / switch / delete named
1265
+ * views. OFF by default — existing embeds are unchanged. Client-only, no
1266
+ * backend; all storage access is SSR-/failure-safe.
1267
+ */
1268
+ enableSavedViews?: boolean;
1269
+ /**
1270
+ * Optional storage-key suffix so multiple independent Tasks surfaces in the
1271
+ * same workspace (e.g. two boards on one page) don't clobber each other's
1272
+ * persisted state. Implies `enableSavedViews` when set. The storage key is
1273
+ * `planmagnet:views:<workspaceId>[:<persistViewKey>]`.
1274
+ */
1275
+ persistViewKey?: string;
1276
+ /**
1277
+ * Opt-in Linear-style keyboard shortcuts. When true, a scoped `keydown`
1278
+ * listener (active only while this page is mounted, ignored while typing in a
1279
+ * form field and for modifier combos) enables:
1280
+ * `c` new task, `/` focus search, `b`/`l`/`g` switch Board/List/Timeline
1281
+ * (only among the enabled views), `m` toggle "My tasks" (needs
1282
+ * `currentActorId`), `?` toggle a dismissible help overlay, and `Escape` to
1283
+ * close the create / detail / help surfaces. OFF by default — existing embeds
1284
+ * are byte-for-byte unchanged.
1285
+ */
1286
+ enableShortcuts?: boolean;
1183
1287
  /** Extra classes on the root container. */
1184
1288
  className?: string;
1185
1289
  }
@@ -1192,7 +1296,7 @@ interface TasksPageCoreProps {
1192
1296
  * BYO-Apollo: reads the ambient `<ApolloProvider>` and takes `workspaceId` from
1193
1297
  * a prop or the PlanMagnetProvider context. Semantic tokens only, farm-free.
1194
1298
  */
1195
- declare function TasksPageCore({ workspaceId: workspaceIdProp, projectId, boardProjectId, columns, readonly, canCreateMilestone, locale, hiddenFields, views, defaultView, confirmMove, resolveAssignee, linkSourceProduct, renderLinkIcon, assigneeOptions, currentActorId, commentsEntityType, onMention, labels, openItemId, header, onTaskSaved, createSurface, detailSurface, className, }: TasksPageCoreProps): react.JSX.Element;
1299
+ declare function TasksPageCore({ workspaceId: workspaceIdProp, projectId, boardProjectId, columns, readonly, canCreateMilestone, locale, hiddenFields, views, defaultView, confirmMove, resolveAssignee, linkSourceProduct, renderLinkIcon, assigneeOptions, currentActorId, commentsEntityType, onMention, labels, openItemId, header, onTaskSaved, createSurface, detailSurface, enableSavedViews, persistViewKey, enableShortcuts, className, }: TasksPageCoreProps): react.JSX.Element;
1196
1300
 
1197
1301
  interface TasksPageProps extends TasksPageCoreProps {
1198
1302
  /** Workspace API gateway URL (URL mode). */
@@ -1345,6 +1449,110 @@ declare function useMilestones(workspaceId: string | undefined, opts?: {
1345
1449
  limit?: number;
1346
1450
  }): UseMilestonesResult;
1347
1451
 
1452
+ /**
1453
+ * The user-controlled toolbar/view state the Saved Views feature persists and
1454
+ * restores. Product-agnostic: the same shape drives Board / List / Timeline.
1455
+ */
1456
+ interface ViewState {
1457
+ /** Active view tab. */
1458
+ view: TaskView;
1459
+ /** Priority quick-filter ("ALL" = no filter). */
1460
+ priority: TaskPriority | "ALL";
1461
+ /** Type quick-filter ("ALL" = no filter). */
1462
+ type: TaskType | "ALL";
1463
+ /** Free-text search. */
1464
+ search: string;
1465
+ /** "My tasks" toggle. */
1466
+ mine: boolean;
1467
+ /**
1468
+ * List column config (order preserved). `null` = use the page default
1469
+ * (which itself may depend on `linkSourceProduct`).
1470
+ */
1471
+ listColumns: TaskListColumn[] | null;
1472
+ }
1473
+ /** A user-named snapshot of a {@link ViewState}. */
1474
+ interface SavedView {
1475
+ /** Stable id (nanoid-ish; generated client-side). */
1476
+ id: string;
1477
+ /** Display name the user typed. */
1478
+ name: string;
1479
+ /** The captured filter/view state. */
1480
+ state: ViewState;
1481
+ }
1482
+ /**
1483
+ * Compose the storage key for a workspace — `planmagnet:views:<workspaceId>`,
1484
+ * optionally suffixed (`:<suffix>`) so multiple independent Tasks surfaces in
1485
+ * one workspace don't clobber each other.
1486
+ */
1487
+ declare function makeStorageKey(workspaceId: string, suffix?: string): string;
1488
+ interface UseSavedViewsArgs {
1489
+ /**
1490
+ * Fully-composed localStorage key (see {@link makeStorageKey}). All reads and
1491
+ * writes target this key.
1492
+ */
1493
+ storageKey: string;
1494
+ /** Feature master switch — when false the hook is a no-op passthrough. */
1495
+ enabled: boolean;
1496
+ /** The live toolbar state to persist (debounced). */
1497
+ current: ViewState;
1498
+ }
1499
+ interface UseSavedViewsResult {
1500
+ /**
1501
+ * The state restored from storage on the first mount, or `null` if there was
1502
+ * nothing to restore (or the feature is disabled). Consumers apply this once
1503
+ * to seed their controlled inputs.
1504
+ */
1505
+ restored: ViewState | null;
1506
+ /** All saved named views for this workspace. */
1507
+ views: SavedView[];
1508
+ /** The id of the currently-applied saved view (or null for an ad-hoc state). */
1509
+ activeViewId: string | null;
1510
+ /** Persist the current toolbar state as a new named view; returns its id. */
1511
+ saveView: (name: string) => string | null;
1512
+ /** Apply a saved view — returns its state so the caller can seed inputs. */
1513
+ applyView: (id: string) => ViewState | null;
1514
+ /** Delete a saved view by id. */
1515
+ deleteView: (id: string) => void;
1516
+ /** Clear the "active saved view" pointer (e.g. after a manual filter edit). */
1517
+ clearActiveView: () => void;
1518
+ }
1519
+ /**
1520
+ * useSavedViews — client-side (localStorage) persistence of the Tasks toolbar
1521
+ * state, keyed per workspace, plus optional user-named views. No backend.
1522
+ *
1523
+ * - Restores the last-active toolbar state on mount (`restored`, applied once).
1524
+ * - Debounces writes of the live `current` state.
1525
+ * - Manages a list of named views (save / apply / delete).
1526
+ * - Fully guarded: SSR-safe and resilient to disabled/quota-limited storage.
1527
+ *
1528
+ * When `enabled` is false the hook does nothing (no reads, no writes) and
1529
+ * returns empty results, so callers stay non-breaking by default.
1530
+ */
1531
+ declare function useSavedViews({ storageKey, enabled, current, }: UseSavedViewsArgs): UseSavedViewsResult;
1532
+
1533
+ interface SavedViewsMenuProps {
1534
+ /** All saved named views for the workspace. */
1535
+ views: SavedView[];
1536
+ /** The id of the currently-applied saved view (null = ad-hoc/default). */
1537
+ activeViewId: string | null;
1538
+ /** Save the current filter set as a new named view. */
1539
+ onSaveView: (name: string) => void;
1540
+ /** Apply a saved view by id. */
1541
+ onApplyView: (id: string) => void;
1542
+ /** Delete a saved view by id. */
1543
+ onDeleteView: (id: string) => void;
1544
+ className?: string;
1545
+ }
1546
+ /**
1547
+ * SavedViewsMenu — a compact toolbar dropdown to save the current filter set as
1548
+ * a named view, switch between saved views, and delete one. Client-only (the
1549
+ * persistence lives in `useSavedViews`); semantic-token styled; farm-free.
1550
+ *
1551
+ * Self-contained dropdown (no fe-libs / portal dependency) so it renders in any
1552
+ * host and in happy-dom tests. Closes on outside-click and Escape.
1553
+ */
1554
+ declare function SavedViewsMenu({ views, activeViewId, onSaveView, onApplyView, onDeleteView, className, }: SavedViewsMenuProps): react.JSX.Element;
1555
+
1348
1556
  interface PlanMagnetClientConfig {
1349
1557
  /** Workspace API gateway base URL (e.g. https://graphqlworkspaces.burdenoff.com). */
1350
1558
  apiGatewayUrl: string;
@@ -1495,4 +1703,4 @@ declare function getGraphQLEndpoint(baseUrl?: string): string;
1495
1703
 
1496
1704
  declare function cn(...inputs: ClassValue[]): string;
1497
1705
 
1498
- export { type AssigneeOption, Avatar, type AvatarProps, BULK_UPDATE_WORK_ITEMS, Badge, type BadgeProps, type BoardColumn, CREATE_WORK_ITEM, CREATE_WORK_ITEM_LINK, CreateTask, CreateTaskCore, type CreateTaskCoreProps, type CreateTaskField, type CreateTaskInput, type CreateTaskProps, type CreateWorkItemLinkInput, DEFAULT_BOARD_COLUMNS, DEFAULT_TASK_LABELS, DELETE_WORK_ITEM, DELETE_WORK_ITEM_LINK, Drawer, type DrawerProps, GET_PROJECTS, GET_WORK_ITEM, LIST_MILESTONES, LIST_WORK_ITEMS, LIST_WORK_ITEM_LINKS, LinkChip, type LinkChipProps, type ListMilestonesInput, type ListTasksInput, type ListWorkItemLinksInput, MILESTONE_FIELDS, MOVE_WORK_ITEM, type Milestone, type MilestoneList, type MilestoneStatus, Modal, type ModalProps, PRIORITY_META, PROJECT_SUMMARY_FIELDS, type PartialTaskLabels, type PlanMagnetClientConfig, type PlanMagnetConfig, PlanMagnetProvider, type PlanMagnetProviderProps, PriorityIndicator, type PriorityIndicatorProps, type Project, type ProjectList, type RenderLinkIcon, type ResolveAssignee, STATUS_META, StatusIcon, type StatusIconProps, StatusPill, type StatusPillProps, TASK_PRIORITIES, TASK_STATUSES, TASK_TYPES, type Task, TaskBoard, TaskBoardCore, type TaskBoardCoreProps, type TaskBoardProps, TaskCard, type TaskCardProps, TaskCommentsCore, type TaskCommentsCoreProps, TaskDetail, TaskDetailCore, type TaskDetailCoreProps, type TaskDetailField, type TaskDetailProps, type TaskLabels, TaskLabelsProvider, TaskList, type TaskListColumn, TaskListCore, type TaskListCoreProps, type TaskListProps, type TaskListSort, type TaskPageInfo, type TaskPaginationInput, type TaskPriority, type TaskSavedResult, type TaskStatus, TaskTimelineCore, type TaskTimelineCoreProps, TaskToolbar, type TaskToolbarProps, type TaskType, type TaskView, TasksPage, TasksPageCore, type TasksPageCoreProps, type TasksPageField, type TasksPageProps, type TasksPageSaved, TypeBadge, type TypeBadgeProps, UPDATE_WORK_ITEM, type UpdateTaskInput, type UseMilestonesResult, type UseWorkItemLinksResult, WORK_ITEM_FIELDS, WORK_ITEM_LINK_FIELDS, WORK_ITEM_SUMMARY_FIELDS, type WorkItemDetail, type WorkItemLink, type WorkItemLinkList, type WorkItemLinkRelation, type WorkItemList, badgeVariants, cn, config, createPlanMagnetClient, enumLabel, getGraphQLEndpoint, getPlanMagnetClient, getPlanMagnetClientSafe, getPlanMagnetConfig, isPlanMagnetClientReady, mergeTaskLabels, resetPlanMagnetClient, resetPlanMagnetConfig, setPlanMagnetClient, setPlanMagnetConfig, useMilestones, usePlanMagnetContext, usePlanMagnetContextSafe, useTaskLabels, useWorkItemLinks, validateTrustedOrigin, waitForPlanMagnetClient };
1706
+ export { type AssigneeOption, Avatar, type AvatarProps, BULK_UPDATE_WORK_ITEMS, Badge, type BadgeProps, type BoardColumn, CREATE_WORK_ITEM, CREATE_WORK_ITEM_LINK, CreateTask, CreateTaskCore, type CreateTaskCoreProps, type CreateTaskField, type CreateTaskInput, type CreateTaskProps, type CreateWorkItemLinkInput, DEFAULT_BOARD_COLUMNS, DEFAULT_TASK_LABELS, DELETE_WORK_ITEM, DELETE_WORK_ITEM_LINK, Drawer, type DrawerProps, GET_PROJECTS, GET_WORK_ITEM, LIST_MILESTONES, LIST_WORK_ITEMS, LIST_WORK_ITEM_LINKS, LinkChip, type LinkChipProps, type ListMilestonesInput, type ListTasksInput, type ListWorkItemLinksInput, MILESTONE_FIELDS, MOVE_WORK_ITEM, type Milestone, type MilestoneList, type MilestoneStatus, Modal, type ModalProps, PRIORITY_META, PROJECT_SUMMARY_FIELDS, type PartialTaskLabels, type PlanMagnetClientConfig, type PlanMagnetConfig, PlanMagnetProvider, type PlanMagnetProviderProps, PriorityIndicator, type PriorityIndicatorProps, type Project, type ProjectList, type RenderLinkIcon, type ResolveAssignee, STATUS_META, type SavedView, SavedViewsMenu, type SavedViewsMenuProps, StatusIcon, type StatusIconProps, StatusPill, type StatusPillProps, TASK_PRIORITIES, TASK_STATUSES, TASK_TYPES, type Task, TaskBoard, TaskBoardCore, type TaskBoardCoreProps, type TaskBoardProps, TaskCard, type TaskCardProps, TaskCommentsCore, type TaskCommentsCoreProps, TaskDetail, TaskDetailCore, type TaskDetailCoreProps, type TaskDetailField, type TaskDetailProps, type TaskLabels, TaskLabelsProvider, TaskList, type TaskListColumn, TaskListCore, type TaskListCoreProps, type TaskListProps, type TaskListSort, type TaskPageInfo, type TaskPaginationInput, type TaskPriority, type TaskSavedResult, type TaskStatus, TaskTimelineCore, type TaskTimelineCoreProps, TaskToolbar, type TaskToolbarProps, type TaskType, type TaskView, TasksPage, TasksPageCore, type TasksPageCoreProps, type TasksPageField, type TasksPageProps, type TasksPageSaved, TypeBadge, type TypeBadgeProps, UPDATE_WORK_ITEM, type UpdateTaskInput, type UseMilestonesResult, type UseSavedViewsArgs, type UseSavedViewsResult, type UseWorkItemLinksResult, type ViewState, WORK_ITEM_FIELDS, WORK_ITEM_LINK_FIELDS, WORK_ITEM_SUMMARY_FIELDS, type WorkItemDetail, type WorkItemLink, type WorkItemLinkList, type WorkItemLinkRelation, type WorkItemList, badgeVariants, cn, config, createPlanMagnetClient, enumLabel, getGraphQLEndpoint, getPlanMagnetClient, getPlanMagnetClientSafe, getPlanMagnetConfig, isPlanMagnetClientReady, makeStorageKey, mergeTaskLabels, resetPlanMagnetClient, resetPlanMagnetConfig, setPlanMagnetClient, setPlanMagnetConfig, useMilestones, usePlanMagnetContext, usePlanMagnetContextSafe, useSavedViews, useTaskLabels, useWorkItemLinks, validateTrustedOrigin, waitForPlanMagnetClient };