@activecollab/components 2.0.408 → 2.0.409

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.
Files changed (83) hide show
  1. package/dist/cjs/components/Icons/collection/Project.js +98 -0
  2. package/dist/cjs/components/Icons/collection/Project.js.map +1 -0
  3. package/dist/cjs/components/Icons/collection/Task.js +61 -0
  4. package/dist/cjs/components/Icons/collection/Task.js.map +1 -0
  5. package/dist/cjs/components/Icons/collection/index.js +14 -0
  6. package/dist/cjs/components/Icons/collection/index.js.map +1 -1
  7. package/dist/cjs/presentation/stackedCard/content/NoteCard.js +7 -3
  8. package/dist/cjs/presentation/stackedCard/content/NoteCard.js.map +1 -1
  9. package/dist/cjs/presentation/stackedCard/content/ProjectCard.js +136 -0
  10. package/dist/cjs/presentation/stackedCard/content/ProjectCard.js.map +1 -0
  11. package/dist/cjs/presentation/stackedCard/content/TaskCard.js +183 -56
  12. package/dist/cjs/presentation/stackedCard/content/TaskCard.js.map +1 -1
  13. package/dist/cjs/presentation/stackedCard/content/index.js +11 -0
  14. package/dist/cjs/presentation/stackedCard/content/index.js.map +1 -1
  15. package/dist/cjs/presentation/stackedCard/content/shared.js +66 -19
  16. package/dist/cjs/presentation/stackedCard/content/shared.js.map +1 -1
  17. package/dist/cjs/presentation/whiteboard/bottomDock.js +95 -32
  18. package/dist/cjs/presentation/whiteboard/bottomDock.js.map +1 -1
  19. package/dist/cjs/presentation/whiteboard/canvasElements.js +196 -8
  20. package/dist/cjs/presentation/whiteboard/canvasElements.js.map +1 -1
  21. package/dist/cjs/presentation/whiteboard/inspector.js +149 -47
  22. package/dist/cjs/presentation/whiteboard/inspector.js.map +1 -1
  23. package/dist/cjs/presentation/whiteboard/outline.js +91 -18
  24. package/dist/cjs/presentation/whiteboard/outline.js.map +1 -1
  25. package/dist/cjs/presentation/whiteboard/projectElements.js +883 -0
  26. package/dist/cjs/presentation/whiteboard/projectElements.js.map +1 -0
  27. package/dist/esm/components/Icons/collection/Project.d.ts +36 -0
  28. package/dist/esm/components/Icons/collection/Project.d.ts.map +1 -0
  29. package/dist/esm/components/Icons/collection/Project.js +91 -0
  30. package/dist/esm/components/Icons/collection/Project.js.map +1 -0
  31. package/dist/esm/components/Icons/collection/Task.d.ts +32 -0
  32. package/dist/esm/components/Icons/collection/Task.d.ts.map +1 -0
  33. package/dist/esm/components/Icons/collection/Task.js +54 -0
  34. package/dist/esm/components/Icons/collection/Task.js.map +1 -0
  35. package/dist/esm/components/Icons/collection/index.d.ts +2 -0
  36. package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
  37. package/dist/esm/components/Icons/collection/index.js +2 -0
  38. package/dist/esm/components/Icons/collection/index.js.map +1 -1
  39. package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts +8 -1
  40. package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts.map +1 -1
  41. package/dist/esm/presentation/stackedCard/content/NoteCard.js +8 -4
  42. package/dist/esm/presentation/stackedCard/content/NoteCard.js.map +1 -1
  43. package/dist/esm/presentation/stackedCard/content/ProjectCard.d.ts +64 -0
  44. package/dist/esm/presentation/stackedCard/content/ProjectCard.d.ts.map +1 -0
  45. package/dist/esm/presentation/stackedCard/content/ProjectCard.js +128 -0
  46. package/dist/esm/presentation/stackedCard/content/ProjectCard.js.map +1 -0
  47. package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts +64 -2
  48. package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts.map +1 -1
  49. package/dist/esm/presentation/stackedCard/content/TaskCard.js +181 -58
  50. package/dist/esm/presentation/stackedCard/content/TaskCard.js.map +1 -1
  51. package/dist/esm/presentation/stackedCard/content/index.d.ts +1 -0
  52. package/dist/esm/presentation/stackedCard/content/index.d.ts.map +1 -1
  53. package/dist/esm/presentation/stackedCard/content/index.js +1 -0
  54. package/dist/esm/presentation/stackedCard/content/index.js.map +1 -1
  55. package/dist/esm/presentation/stackedCard/content/shared.d.ts +30 -0
  56. package/dist/esm/presentation/stackedCard/content/shared.d.ts.map +1 -1
  57. package/dist/esm/presentation/stackedCard/content/shared.js +66 -19
  58. package/dist/esm/presentation/stackedCard/content/shared.js.map +1 -1
  59. package/dist/esm/presentation/whiteboard/bottomDock.d.ts +30 -7
  60. package/dist/esm/presentation/whiteboard/bottomDock.d.ts.map +1 -1
  61. package/dist/esm/presentation/whiteboard/bottomDock.js +79 -32
  62. package/dist/esm/presentation/whiteboard/bottomDock.js.map +1 -1
  63. package/dist/esm/presentation/whiteboard/canvasElements.d.ts +4 -1
  64. package/dist/esm/presentation/whiteboard/canvasElements.d.ts.map +1 -1
  65. package/dist/esm/presentation/whiteboard/canvasElements.js +158 -7
  66. package/dist/esm/presentation/whiteboard/canvasElements.js.map +1 -1
  67. package/dist/esm/presentation/whiteboard/inspector.d.ts +35 -1
  68. package/dist/esm/presentation/whiteboard/inspector.d.ts.map +1 -1
  69. package/dist/esm/presentation/whiteboard/inspector.js +170 -68
  70. package/dist/esm/presentation/whiteboard/inspector.js.map +1 -1
  71. package/dist/esm/presentation/whiteboard/outline.d.ts +23 -3
  72. package/dist/esm/presentation/whiteboard/outline.d.ts.map +1 -1
  73. package/dist/esm/presentation/whiteboard/outline.js +89 -18
  74. package/dist/esm/presentation/whiteboard/outline.js.map +1 -1
  75. package/dist/esm/presentation/whiteboard/projectElements.d.ts +267 -0
  76. package/dist/esm/presentation/whiteboard/projectElements.d.ts.map +1 -0
  77. package/dist/esm/presentation/whiteboard/projectElements.js +824 -0
  78. package/dist/esm/presentation/whiteboard/projectElements.js.map +1 -0
  79. package/dist/index.js +629 -490
  80. package/dist/index.js.map +1 -1
  81. package/dist/index.min.js +1 -1
  82. package/dist/index.min.js.map +1 -1
  83. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectElements.js","names":["React","useMemo","useRef","useState","styled","SELECTION_BLUE","StyledCanvasElement","IconButton","ArrowLeftIcon","SortGeneralIcon","Input","SkeletonLoader","Modal","Paper","RadioButton","StackedCard","Tooltip","Body2","Caption1","AVATAR_COLORS","INTERNAL_CLIENT_LABEL","CONTENT_INTERNAL_CLIENT_LABEL","ProjectCard","TaskCard","PLACEHOLDER_MIN_WIDTH","PLACEHOLDER_MIN_HEIGHT","PROJECT_CARD_WIDTH","TASK_CARD_WIDTH","RESOLVE_MS","isProjectTool","tool","projectClientLabel","project","_project$client","client","PICKER_PEOPLE","jasmina","name","initials","color","purple","marko","teal","dina","orange","elena","yellow","tomas","blue","PICKER_LABELS","assigned","text","blocked","inProgress","review","PICKER_PROJECT_LABELS","textColor","internal","urgent","research","mockTask","number","taskList","extra","_extends","id","assignees","date","PICKER_PROJECTS","description","lead","label","tasks","subtasks","comments","groupProjects","projects","reduce","groups","group","find","entry","push","groupTasks","task","matchesQuery","value","query","toLowerCase","includes","trim","taskDisplayName","LIMITED_ACCESS_LABEL","LIMITED_ACCESS_MESSAGE","projectCardWidth","kind","projectElementTitle","element","limited","_element$project$name","_element$project","SEEDED","width","height","status","x","y","SEEDED_PROJECT_ELEMENTS","map","seed","SEEDED_PROJECT_ELEMENT_POSITIONS","acc","StyledProjectElementBox","withConfig","displayName","componentId","StyledProjectDraft","div","StyledPlaceholder","StyledResolving","StyledLimitedCard","StyledEntityCard","TaskElementCard","_ref","_task$subtasks","_task$comments","_task$date","selected","createElement","title","showProjectName","projectName","labels","subtaskCount","commentCount","dateLabel","length","ProjectElementCard","_ref2","leader","LimitedElementCard","weight","className","ProjectElementNode","_ref3","style","StyledPickerPanel","StyledPickerHeader","StyledPickerList","StyledPickerRow","PickerRow","_ref4","onSelect","role","tabIndex","onClick","onKeyDown","event","key","preventDefault","ProjectElementPicker","_ref5","onSelectProject","onSelectTask","onCancel","_useState","setProject","_useState2","setQuery","pressedInsideRef","onTaskStep","projectGroups","filter","taskGroups","handleProject","picked","handleBack","isEmpty","open","onClose","disableBackgroundClick","onMouseDown","current","onClickOutside","type","variant","autoFocus","placeholder","onChange","target"],"sources":["../../../../src/presentation/whiteboard/projectElements.tsx"],"sourcesContent":["import React, { ReactElement, useMemo, useRef, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { SELECTION_BLUE, StyledCanvasElement } from \"./elements\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { ArrowLeftIcon, SortGeneralIcon } from \"../../components/Icons\";\nimport { Input } from \"../../components/Input\";\nimport { SkeletonLoader } from \"../../components/Loaders\";\nimport { Modal } from \"../../components/Modal\";\nimport { Paper } from \"../../components/Paper\";\nimport { RadioButton } from \"../../components/RadioButton\";\nimport { StackedCard } from \"../../components/StackedCard\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1 } from \"../../components/Typography\";\nimport { AVATAR_COLORS } from \"../shared\";\nimport {\n INTERNAL_CLIENT_LABEL as CONTENT_INTERNAL_CLIENT_LABEL,\n ProjectCard,\n ProjectCardLabel,\n ProjectCardPerson,\n TaskCard,\n TaskCardLabel,\n} from \"../stackedCard/content\";\n\n/* ------------------------------------------------------------------ */\n/* Project elements — placeholder → picker → resolved card */\n/* ------------------------------------------------------------------ */\n\n/**\n * The board's third \"draw a box, then say what goes in it\" element, after the\n * link and the file card. The gesture ladder is deliberately the same one those\n * two already established, because it is the only one the dock teaches:\n *\n * armed the Project Elements dock button opens a submenu (Project /\n * Task); picking one arms the tool and puts the canvas in\n * crosshair mode.\n * drawn mouse down → drag → up leaves a dashed PLACEHOLDER at the drawn\n * box (clamped to a card-sized minimum), exactly where the real\n * card will sit.\n * picking the release opens the picker — a centred popover replicating the\n * app's `MenuSelector/ProjectList` (and, for tasks, the two-step\n * `ProjectTaskMenuSelector`: projects, then that project's tasks).\n * resolving a short skeleton flash in the placeholder's own box, standing in\n * for \"the board is fetching this record's details\".\n * resolved the placeholder becomes the real card, anchored at the\n * placeholder's top-left and grown to the card's natural size.\n *\n * Escape or a click on the overlay cancels: the picker closes and the\n * placeholder is thrown away, so a cancelled gesture leaves no debris.\n */\n\n/* A drawn box smaller than this reads as \"I just want a card here\", so the\n placeholder takes the minimum rather than the (unusable) drawn size. */\nexport const PLACEHOLDER_MIN_WIDTH = 260;\nexport const PLACEHOLDER_MIN_HEIGHT = 120;\n\n/* The natural width each resolved card grows to. Heights follow the content,\n like every other card on this board. */\nexport const PROJECT_CARD_WIDTH = 300;\nexport const TASK_CARD_WIDTH = 260;\n\n/* How long the \"details are being resolved from the backend\" flash lasts. */\nexport const RESOLVE_MS = 480;\n\nexport type ProjectElementKind = \"project\" | \"task\";\n\nexport type ProjectElementStatus = \"placeholder\" | \"resolving\" | \"resolved\";\n\n/** True for the two board tools this module owns. */\nexport const isProjectTool = (tool: string): tool is ProjectElementKind =>\n tool === \"project\" || tool === \"task\";\n\n/* ------------------------------------------------------------------ */\n/* Mock data */\n/* ------------------------------------------------------------------ */\n\n/**\n * The people and labels the board carries are exactly what the shared content\n * cards read, so the picker's types ARE the cards' types — one shape, so a card\n * cannot be fed something it does not understand.\n */\nexport type PickerPerson = ProjectCardPerson;\n\nexport type PickerTaskLabel = TaskCardLabel;\n\nexport interface PickerTask {\n id: string;\n /** The task number the app prefixes the name with (`#123: …`). */\n number: number;\n name: string;\n /** The task list the task belongs to — the picker's group header. */\n taskList: string;\n label?: PickerTaskLabel;\n subtasks?: number;\n comments?: number;\n date?: string;\n assignees: PickerPerson[];\n}\n\n/**\n * A project label. The app renders it as a FILLED pill whose background is the\n * label's own colour and whose text is a darker shade of it\n * (`ProjectLabel.jsx`: `EntityLabel` with `backgroundColor: label.color` and\n * `color: label.darker_text_color`), which is the design system's `Chip` — not\n * the colour-text `Tag` the column cards use. Both colours are data. The shape\n * is the shared `ProjectCard`'s own.\n */\nexport type PickerProjectLabel = ProjectCardLabel;\n\nexport interface PickerProject {\n id: string;\n name: string;\n /**\n * The client company, and the picker's group header. NULL for an internal\n * project: the card then reads \"Internal\" rather than repeating the owner\n * company's own name back at the reader, which says nothing.\n */\n client: string | null;\n /** The description excerpt, when the project has one. */\n description?: string;\n /** A project need not have a leader. */\n lead?: PickerPerson;\n /** A project need not have a label. */\n label?: PickerProjectLabel;\n tasks: PickerTask[];\n}\n\n/**\n * What an internal project's client line says. The word belongs to the card (it\n * is the card that has to decide what to print for a project with no client), so\n * the board re-exports the card's own constant rather than keeping a second copy\n * that could drift.\n */\nexport const INTERNAL_CLIENT_LABEL = CONTENT_INTERNAL_CLIENT_LABEL;\n\n/* One rule for both the card's client line and the picker's group header, so a\n project can never be filed under one name and labelled with another. */\nexport const projectClientLabel = (project: PickerProject): string =>\n project.client ?? INTERNAL_CLIENT_LABEL;\n\nexport interface PickerProjectGroup {\n client: string;\n projects: PickerProject[];\n}\n\nexport interface PickerTaskGroup {\n taskList: string;\n tasks: PickerTask[];\n}\n\n/* Avatar colours are DATA, not theme — they stand in for real user avatars. */\nexport const PICKER_PEOPLE: Record<string, PickerPerson> = {\n jasmina: {\n name: \"Jasmina Sekulić\",\n initials: \"JS\",\n color: AVATAR_COLORS.purple,\n },\n marko: { name: \"Marko Antić\", initials: \"MA\", color: AVATAR_COLORS.teal },\n dina: { name: \"Dina Kovač\", initials: \"DK\", color: AVATAR_COLORS.orange },\n elena: {\n name: \"Elena Petrović\",\n initials: \"EP\",\n color: AVATAR_COLORS.yellow,\n },\n tomas: { name: \"Tomas Slavik\", initials: \"TS\", color: AVATAR_COLORS.blue },\n};\n\n/* Label colours are data too: they are the label's own colour in the app. */\nexport const PICKER_LABELS: Record<string, PickerTaskLabel> = {\n assigned: { text: \"ASSIGNED\", color: \"#E08B8B\" },\n blocked: { text: \"BLOCKED\", color: \"#D9534F\" },\n inProgress: { text: \"IN PROGRESS\", color: \"#9BA0A8\" },\n review: { text: \"REVIEW\", color: \"#D4A017\" },\n};\n\n/* Project labels carry a background AND a darker text colour, the pair the app\n stores as `color` / `darker_text_color`. Uppercase because that is how the\n app saves a new project label (ProjectLabel.jsx upper-cases the name). */\nexport const PICKER_PROJECT_LABELS: Record<string, PickerProjectLabel> = {\n client: { text: \"CLIENT WORK\", color: \"#FBBB75\", textColor: \"#6B4416\" },\n internal: { text: \"INTERNAL\", color: \"#B7D8B0\", textColor: \"#2F5B28\" },\n urgent: { text: \"URGENT\", color: \"#F3A7A7\", textColor: \"#7A2222\" },\n research: { text: \"RESEARCH\", color: \"#B8CDEB\", textColor: \"#274974\" },\n};\n\n/* A compact constructor so every mocked task stays one readable row. */\nconst mockTask = (\n number: number,\n name: string,\n taskList: string,\n extra: Partial<PickerTask> = {}\n): PickerTask => ({\n id: `task-${number}`,\n number,\n name,\n taskList,\n assignees: [PICKER_PEOPLE.elena],\n date: \"16. Jul\",\n ...extra,\n});\n\nexport const PICKER_PROJECTS: PickerProject[] = [\n {\n id: \"p-ama\",\n name: \"AMA Webinar\",\n client: \"ActiveCollab Inc.\",\n description:\n \"Quarterly live session with the community. Collect questions up front, keep the run of show to forty minutes, and publish the recap the same week.\",\n lead: PICKER_PEOPLE.jasmina,\n label: PICKER_PROJECT_LABELS.client,\n tasks: [\n mockTask(184, \"Draft the run of show\", \"Preparation\", { subtasks: 3 }),\n mockTask(185, \"Collect questions from the community\", \"Preparation\", {\n label: PICKER_LABELS.assigned,\n comments: 4,\n }),\n mockTask(186, \"Record the intro segment\", \"Production\", {\n assignees: [PICKER_PEOPLE.marko],\n }),\n mockTask(187, \"Publish the recap post\", \"Follow-up\", {\n label: PICKER_LABELS.review,\n date: \"24. Jul\",\n }),\n ],\n },\n {\n id: \"p-care\",\n /* Internal project WITH a description and a leader, but no label. */\n name: \"Customer Care Team\",\n client: null,\n description:\n \"Where the support team plans its week. Macros, escalation paths and the weekly churn review all live here.\",\n lead: PICKER_PEOPLE.dina,\n tasks: [\n mockTask(201, \"Rewrite the macro replies\", \"Inbox\", {\n label: PICKER_LABELS.inProgress,\n comments: 2,\n }),\n mockTask(202, \"Weekly churn review\", \"Reporting\", { subtasks: 5 }),\n mockTask(203, \"Escalation path for billing\", \"Inbox\", {\n assignees: [PICKER_PEOPLE.tomas],\n }),\n mockTask(204, \"Onboarding call script\", \"Reporting\", {\n date: \"2. Aug\",\n }),\n ],\n },\n {\n id: \"p-backlog\",\n /* No description and NO leader — the meta row is the label alone, pushed\n to the right of an otherwise empty row. */\n name: \"Design Backlog\",\n client: null,\n label: PICKER_PROJECT_LABELS.internal,\n tasks: [\n mockTask(311, \"Whiteboard element inspector\", \"Ideas\", {\n label: PICKER_LABELS.assigned,\n subtasks: 2,\n comments: 3,\n }),\n mockTask(312, \"Empty states for the board list\", \"Ideas\"),\n mockTask(313, \"Dark theme audit of the dock\", \"Ready\", {\n label: PICKER_LABELS.blocked,\n assignees: [PICKER_PEOPLE.jasmina, PICKER_PEOPLE.marko],\n }),\n mockTask(314, \"Icon set for board elements\", \"Ready\", { date: \"9. Aug\" }),\n ],\n },\n {\n id: \"p-design-team\",\n /* Leader only: no description, no label. */\n name: \"Design Team\",\n client: null,\n lead: PICKER_PEOPLE.elena,\n tasks: [\n mockTask(402, \"Design system spring cleanup\", \"This Sprint\", {\n subtasks: 8,\n }),\n mockTask(403, \"Retro board template\", \"This Sprint\", {\n label: PICKER_LABELS.inProgress,\n assignees: [PICKER_PEOPLE.dina],\n }),\n mockTask(404, \"Handoff checklist\", \"Next Sprint\", { comments: 1 }),\n mockTask(405, \"Component audit: cards\", \"Next Sprint\", {\n date: \"30. Jul\",\n }),\n ],\n },\n {\n id: \"p-foo\",\n /* The bare minimum a project card can be: name and client line only. No\n description, no leader, no label — so no meta row at all. */\n name: \"Foo Kanban\",\n client: null,\n tasks: [\n mockTask(77, \"Set up the columns\", \"Task List\", { subtasks: 1 }),\n mockTask(78, \"Import the old cards\", \"Task List\", {\n label: PICKER_LABELS.blocked,\n }),\n mockTask(79, \"Invite the team\", \"Task List 2\", {\n assignees: [PICKER_PEOPLE.marko],\n }),\n mockTask(80, \"Archive stale swimlanes\", \"Task List 2\", {\n date: \"5. Aug\",\n }),\n ],\n },\n {\n id: \"p-marketing\",\n name: \"Marketing Site\",\n client: \"ActiveCollab Inc.\",\n description:\n \"Pricing, case studies and the homepage. Copy passes go through content, performance budgets through engineering.\",\n lead: PICKER_PEOPLE.marko,\n label: PICKER_PROJECT_LABELS.urgent,\n tasks: [\n mockTask(510, \"Pricing page copy pass\", \"Content\", {\n label: PICKER_LABELS.review,\n comments: 6,\n }),\n mockTask(511, \"Case study: Bright Lane\", \"Content\", { subtasks: 4 }),\n mockTask(512, \"Lighthouse budget for the homepage\", \"Engineering\", {\n assignees: [PICKER_PEOPLE.tomas],\n }),\n mockTask(513, \"Cookie banner rework\", \"Engineering\", { date: \"11. Aug\" }),\n ],\n },\n {\n id: \"p-research\",\n name: \"Product Research\",\n client: null,\n description:\n \"Interviews, synthesis and concept tests for the board work. Findings are shared with design at the end of each round.\",\n lead: PICKER_PEOPLE.jasmina,\n label: PICKER_PROJECT_LABELS.research,\n tasks: [\n mockTask(620, \"Interview script for board users\", \"Discovery\", {\n subtasks: 3,\n }),\n mockTask(621, \"Synthesis of the June calls\", \"Discovery\", {\n label: PICKER_LABELS.inProgress,\n comments: 2,\n }),\n mockTask(622, \"Concept test: project cards\", \"Validation\", {\n assignees: [PICKER_PEOPLE.elena, PICKER_PEOPLE.dina],\n }),\n mockTask(623, \"Share findings with design\", \"Validation\", {\n date: \"19. Aug\",\n }),\n ],\n },\n {\n id: \"p-brand\",\n name: \"Brand Refresh\",\n client: \"Bright Lane Studio\",\n description:\n \"Identity work: logo lockups, a typography scale and the photography direction, collected into a brand book.\",\n lead: PICKER_PEOPLE.dina,\n label: PICKER_PROJECT_LABELS.client,\n tasks: [\n mockTask(701, \"Logo lockup variations\", \"Identity\", { subtasks: 6 }),\n mockTask(702, \"Typography scale\", \"Identity\", {\n label: PICKER_LABELS.assigned,\n }),\n mockTask(703, \"Photography direction\", \"Guidelines\", { comments: 3 }),\n mockTask(704, \"Brand book layout\", \"Guidelines\", { date: \"28. Jul\" }),\n ],\n },\n {\n id: \"p-portal\",\n /* Leader AND label, but no description. */\n name: \"Client Portal\",\n client: \"Bright Lane Studio\",\n lead: PICKER_PEOPLE.tomas,\n label: PICKER_PROJECT_LABELS.urgent,\n tasks: [\n mockTask(810, \"Invoice list pagination\", \"Backend\", {\n label: PICKER_LABELS.blocked,\n subtasks: 2,\n }),\n mockTask(811, \"Single sign-on for clients\", \"Backend\", { comments: 5 }),\n mockTask(812, \"Dashboard tiles\", \"Frontend\", {\n assignees: [PICKER_PEOPLE.jasmina],\n }),\n mockTask(813, \"Mobile navigation\", \"Frontend\", { date: \"3. Sep\" }),\n ],\n },\n];\n\n/* The picker groups projects by client and tasks by task list, exactly the way\n `ProjectList` / `TaskList` group them in the app. Order is the data's own\n order — the first project of a client decides where its group sits. Internal\n projects group under the same word their card shows, so the header and the\n card cannot say different things about the same project. */\nexport const groupProjects = (\n projects: PickerProject[]\n): PickerProjectGroup[] =>\n projects.reduce<PickerProjectGroup[]>((groups, project) => {\n const client = projectClientLabel(project);\n const group = groups.find((entry) => entry.client === client);\n if (group) {\n group.projects.push(project);\n\n return groups;\n }\n\n return [...groups, { client, projects: [project] }];\n }, []);\n\nexport const groupTasks = (tasks: PickerTask[]): PickerTaskGroup[] =>\n tasks.reduce<PickerTaskGroup[]>((groups, task) => {\n const group = groups.find((entry) => entry.taskList === task.taskList);\n if (group) {\n group.tasks.push(task);\n\n return groups;\n }\n\n return [...groups, { taskList: task.taskList, tasks: [task] }];\n }, []);\n\nconst matchesQuery = (value: string, query: string): boolean =>\n value.toLowerCase().includes(query.trim().toLowerCase());\n\n/** `#123: Name` — `utils/taskDisplayName`, the app's own task display name. */\nexport const taskDisplayName = (task: PickerTask): string =>\n `#${task.number}: ${task.name}`;\n\n/* ------------------------------------------------------------------ */\n/* Limited access */\n/* ------------------------------------------------------------------ */\n\n/**\n * A board is shared with people who do not all see the same projects. When a\n * card points at a task or project the current viewer cannot open, the board\n * cannot just drop it: the element is part of everyone else's layout, and a\n * hole would be a worse lie than a blank. So the card stays and says exactly\n * one thing — something is here, and it is not yours to see.\n *\n * This follows the app's existing limited-access language (Workload):\n * - the wording is \"Limited Access\", the phrase `EntityPlaceholder`,\n * `WorkloadCalendarEvent`, Expenses and Timelist all already use;\n * - nothing else is rendered. Workload's own limited cell\n * (`.workload_null_project_cell`) shows an aggregate and no name, and the\n * shape it is fed is literally `{ hoursOccupied, leftOffset }` — a quantity\n * and a position, never an identity;\n * - the surface is muted and hatched, the treatment the app reserves for\n * \"this area is not live\" (weekend / day-off cells, `--muted-surface`);\n * - no affordance suggests opening: Workload points the link at \"#\", disables\n * the name tooltip so the title cannot leak, and marks blocked interactions\n * `cursor: not-allowed`.\n */\nexport const LIMITED_ACCESS_LABEL = \"Limited Access\";\n\n/* The one sentence a limited card is allowed to say, in the app's own voice.\n It states the viewer's situation as a fact and stops — Workload's secondary\n line is \"with your limited access\" (WorkloadProjectContainer.js), and its\n status sentences read \"Work scheduled for a day off.\" and \"task doesn't have\n an estimate\": second person, sentence case, contraction, no apology, and\n never a word about why the thing is on the screen. */\nexport const LIMITED_ACCESS_MESSAGE = \"You don't have access to this item.\";\n\n/* ------------------------------------------------------------------ */\n/* The element on the board */\n/* ------------------------------------------------------------------ */\n\n/** A project / task element on the board. Position lives in `positions`. */\nexport interface ProjectElementDef {\n id: string;\n kind: ProjectElementKind;\n /**\n * The element's width — the drawn placeholder box first, then the card's\n * natural width, written once when the card resolves.\n *\n * It is one field and not two (a placeholder box plus a derived card width)\n * because the Inspector edits this: a derived width would be read-only by\n * construction, and a second stored width would be a copy that can disagree.\n */\n width: number;\n /** The placeholder box height. A resolved card is auto-height. */\n height: number;\n status: ProjectElementStatus;\n /**\n * The viewer cannot access what this card points at, so there is nothing to\n * fill `project` / `task` with and never will be — the details are withheld\n * by the server, not merely unfetched. Everything the card can do is\n * withheld with them: it does not move, resize or open.\n */\n limited?: boolean;\n /** Filled once the picker returns; for a task this is its project. */\n project: PickerProject | null;\n task: PickerTask | null;\n}\n\n/** The natural width a resolved card of this kind grows to. */\nexport const projectCardWidth = (kind: ProjectElementKind): number =>\n kind === \"project\" ? PROJECT_CARD_WIDTH : TASK_CARD_WIDTH;\n\n/**\n * What the card is OF — the task's or the project's own name.\n *\n * These cards are a view of a record that lives in the project, so the board\n * does not get to name them: the title is the entity's, and it is read-only\n * wherever it appears. A placeholder has no entity yet, so it says what it is\n * still waiting for.\n */\nexport const projectElementTitle = (element: ProjectElementDef): string => {\n if (element.limited) {\n return LIMITED_ACCESS_LABEL;\n }\n\n if (element.kind === \"project\") {\n return element.project?.name ?? \"Project\";\n }\n\n return element.task ? taskDisplayName(element.task) : \"Task\";\n};\n\n/* ------------------------------------------------------------------ */\n/* Seeded board state */\n/* ------------------------------------------------------------------ */\n\n/**\n * Two cards the board starts with, both limited.\n *\n * They are seeded rather than reachable through the picker on purpose: limited\n * access is a property of the VIEWER, and you cannot pick a card you are not\n * allowed to see. Someone else placed these; this session is simply the one\n * that cannot open them. Seeding is also the whole demonstration — no \"view as\"\n * switch is needed to show what the state looks like.\n *\n * Both are `resolved` with `project` and `task` left null: the record was never\n * withheld pending a fetch, it is withheld full stop.\n */\ninterface SeededProjectElement {\n element: ProjectElementDef;\n x: number;\n y: number;\n}\n\nconst SEEDED: SeededProjectElement[] = [\n {\n element: {\n id: \"limited-task\",\n kind: \"task\",\n width: TASK_CARD_WIDTH,\n height: PLACEHOLDER_MIN_HEIGHT,\n status: \"resolved\",\n limited: true,\n project: null,\n task: null,\n },\n x: 120,\n y: 200,\n },\n {\n element: {\n id: \"limited-project\",\n kind: \"project\",\n width: PROJECT_CARD_WIDTH,\n height: PLACEHOLDER_MIN_HEIGHT,\n status: \"resolved\",\n limited: true,\n project: null,\n task: null,\n },\n x: 120,\n y: 380,\n },\n];\n\n/* Derived from one list, the way INITIAL_POSITIONS is derived from\n CANVAS_ELEMENTS — a seed's position is written once, not twice. */\nexport const SEEDED_PROJECT_ELEMENTS: ProjectElementDef[] = SEEDED.map(\n (seed) => seed.element\n);\n\nexport const SEEDED_PROJECT_ELEMENT_POSITIONS: Record<\n string,\n { x: number; y: number }\n> = SEEDED.reduce<Record<string, { x: number; y: number }>>((acc, seed) => {\n acc[seed.element.id] = { x: seed.x, y: seed.y };\n\n return acc;\n}, {});\n\n/* The board wrapper. It is the canvas element box, only rounded — the shared\n box is square because shapes are, and a square selection ring around a\n rounded card reads as a second, wrong border. The transition is what makes\n the placeholder GROW into its card instead of being replaced by one. */\nexport const StyledProjectElementBox = styled(StyledCanvasElement)`\n border-radius: 8px;\n transition: width 160ms ease;\n\n /* A limited card cannot be dragged, so it must not advertise that it can —\n the board's move cursor would be a promise it does not keep. not-allowed\n is what workload.less uses for a blocked interaction. */\n &.limited {\n cursor: not-allowed;\n }\n`;\n\n/* The rubber band and the armed tool's hover preview — the same blue dashed\n box the link tool draws, so the gesture reads as one board convention. */\nexport const StyledProjectDraft = styled.div`\n position: absolute;\n box-sizing: border-box;\n border: 1.5px dashed ${SELECTION_BLUE};\n border-radius: 8px;\n background-color: rgba(59, 130, 246, 0.08);\n pointer-events: none;\n`;\n\n/* The placeholder that waits for the picker's answer. Card-like on purpose:\n rounded, dashed, tinted — a card-shaped hole, not a selection marquee. */\nexport const StyledPlaceholder = styled.div`\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px;\n border: 1.5px dashed var(--border-primary);\n border-radius: 8px;\n background-color: var(--color-theme-200);\n user-select: none;\n`;\n\n/* The resolving flash: the placeholder's box, with the card's rows sketched in\n so the swap to the real card does not read as a different element. */\nexport const StyledResolving = styled(StyledPlaceholder)`\n flex-direction: column;\n align-items: stretch;\n justify-content: center;\n gap: 10px;\n\n .c-loader {\n height: 12px;\n }\n`;\n\n/**\n * The limited-access face — the card-shaped translation of Workload's black\n * `.workload_null_project_cell`.\n *\n * The app hardcodes that cell `#000000` on `#ffffff` text, which works there\n * because it always sits on light paper. A canvas is not always light: on the\n * dark board a black slab would sink into the background instead of reading as\n * something withheld. So the same idea is expressed with the design system's\n * own \"not live\" tokens — `--muted-surface` / `--muted-surface-text` are the\n * pair the app itself substitutes for muted surfaces in dark themes, and they\n * are a legible, deliberately flat combination in every theme.\n *\n * The -45° hatch is copied stroke for stroke from the app's unavailable\n * surfaces (weekend and day-off cells): `transparent 5px, <line> 5px, <line>\n * 5.7px`, with `--stripe-pattern` as the line — the token workload.less uses\n * for exactly this in dark themes.\n */\nexport const StyledLimitedCard = styled.div`\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n min-height: 96px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px;\n border: 1px solid var(--border-primary);\n border-radius: 8px;\n background-color: var(--muted-surface);\n background-image: repeating-linear-gradient(\n -45deg,\n transparent,\n transparent 5px,\n var(--stripe-pattern) 5px,\n var(--stripe-pattern) 5.7px\n );\n color: var(--muted-surface-text);\n cursor: not-allowed;\n user-select: none;\n\n /* The label is the card's whole content, so it carries the colour itself\n rather than inheriting a Typography theme colour that would be tuned for\n the paper background instead of this one. */\n .limited-label {\n color: var(--muted-surface-text);\n }\n`;\n\n/**\n * Both resolved faces are the design system's `StackedCard` — the same shell the\n * board's link and file cards already stand on — filled with the shared typed\n * content cards from `../stackedCard/content`. The board owns only the width and\n * the selection state; everything inside the card is the card's business.\n *\n * Identical to `StyledLinkCard`: the shell's reference 260px width gives way to\n * the box the board drew, and the height stays auto.\n */\nconst StyledEntityCard = styled(StackedCard)`\n && {\n width: 100%;\n }\n\n user-select: none;\n`;\n\nexport interface TaskFaceProps {\n project: PickerProject;\n task: PickerTask;\n selected?: boolean;\n}\n\n/**\n * The task face — the shared `TaskCard`, with the project line switched on.\n *\n * The board writes no anatomy of its own: the title clamp, the info line (labels\n * as colour text, the counter signifiers and their 2px dot separators) and the\n * date / assignees row all live in the content card, where the column-view\n * baseline they preserve is documented. The one thing the board asks for is the\n * project line above the title: on a canvas a task card has lost the column that\n * used to say which project it came from.\n *\n * The title is the app's own display name (`#123: Name`, `taskDisplayName`), so\n * the card's separate task-number prefix stays off.\n */\nexport const TaskElementCard = ({\n project,\n task,\n selected,\n}: TaskFaceProps): ReactElement => (\n <StyledEntityCard selected={selected}>\n <TaskCard\n title={taskDisplayName(task)}\n showProjectName\n projectName={project.name}\n labels={task.label ? [task.label] : []}\n subtaskCount={task.subtasks ?? 0}\n commentCount={task.comments ?? 0}\n dateLabel={task.date ?? null}\n assigned={task.assignees.length > 0}\n assignees={task.assignees}\n />\n </StyledEntityCard>\n);\n\n/**\n * The project face — the shared `ProjectCard`.\n *\n * The whiteboard's face spec and the content type's are the SAME spec, so it is\n * implemented once, in the card: name and client, an optional description\n * excerpt, and one row carrying the leader on the left and the label on the\n * right. No progress indicator, and no row at all when the project has neither a\n * leader nor a label.\n */\nexport const ProjectElementCard = ({\n project,\n selected,\n}: {\n project: PickerProject;\n selected?: boolean;\n}): ReactElement => (\n <StyledEntityCard selected={selected}>\n <ProjectCard\n name={project.name}\n client={project.client}\n description={project.description}\n leader={project.lead}\n label={project.label}\n />\n </StyledEntityCard>\n);\n\n/**\n * The limited-access card. Deliberately the shortest component in this file:\n * one phrase, no icon, no entity data of any kind.\n *\n * No icon because the app uses none — Expenses and Timelist both render the\n * bare `Caption1 weight=\"bold\"` \"Limited Access\", and an icon here would be a\n * second signal competing with the hatch. Even the KIND (task vs project) is\n * withheld: the viewer is told that a card exists, not what sort of thing it\n * points at.\n *\n * The tooltip is allowed to exist because it carries the viewer's situation,\n * not the entity's identity — the opposite of the tooltip Workload disables on\n * a limited event, which would have leaked the name.\n */\nexport const LimitedElementCard = (): ReactElement => (\n <Tooltip title={LIMITED_ACCESS_MESSAGE}>\n <StyledLimitedCard data-testid=\"wb-limited-card\">\n <Caption1 weight=\"bold\" className=\"limited-label\">\n {LIMITED_ACCESS_LABEL}\n </Caption1>\n </StyledLimitedCard>\n </Tooltip>\n);\n\n/** One board element, in whichever of its three states it currently is. */\nexport const ProjectElementNode = ({\n element,\n selected,\n}: {\n element: ProjectElementDef;\n /**\n * Host-owned selection. A resolved card is a `StackedCard`, and the shell draws\n * its own ring from `--sc-selection-ring` (the board sets it to the selection\n * blue) — the same arrangement the link and file cards already use, which is\n * why their wrapper carries `is-card` to suppress the box's second ring.\n */\n selected?: boolean;\n}): ReactElement => {\n /* Checked before anything else: a limited element must never be able to fall\n through to a branch that renders entity data. */\n if (element.limited) {\n return <LimitedElementCard />;\n }\n\n if (element.status === \"placeholder\") {\n return (\n <StyledPlaceholder>\n <Caption1 color=\"tertiary\">\n {element.kind === \"project\" ? \"Pick a project…\" : \"Pick a task…\"}\n </Caption1>\n </StyledPlaceholder>\n );\n }\n\n if (element.status === \"resolving\") {\n return (\n <StyledResolving>\n <SkeletonLoader style={{ width: \"80%\" }} />\n <SkeletonLoader style={{ width: \"55%\" }} />\n <SkeletonLoader style={{ width: \"40%\" }} />\n </StyledResolving>\n );\n }\n\n if (element.kind === \"project\" && element.project) {\n return <ProjectElementCard project={element.project} selected={selected} />;\n }\n\n if (element.project && element.task) {\n return (\n <TaskElementCard\n project={element.project}\n task={element.task}\n selected={selected}\n />\n );\n }\n\n return <StyledPlaceholder />;\n};\n\n/* ------------------------------------------------------------------ */\n/* The picker */\n/* ------------------------------------------------------------------ */\n\n/* The popover, centred over the board's own overlay. It is deliberately NOT a\n DS `Dialog`: the app's picker has no title and no action buttons — you search,\n you pick, it closes. `Modal` is used only for what a dialog and a popover do\n share: the portal, the overlay, the focus lock and the Esc handler. */\nconst StyledPickerPanel = styled(Paper)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n width: 470px;\n max-width: calc(100vw - 32px);\n max-height: 70vh;\n overflow: hidden;\n\n && {\n border-radius: 12px;\n border: 1px solid var(--border-primary);\n box-shadow: 0 18px 48px rgba(0, 0, 0, 0.24);\n }\n`;\n\n/* Search + adornments, mirroring `Select`'s own form row: the back arrow is a\n start adornment (TaskList), the group-by sort a end adornment (ProjectList). */\nconst StyledPickerHeader = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n padding: 12px 12px 8px;\n\n /* the DS Input wrapper is a fixed 360px — the panel owns the width here */\n .picker-search {\n width: 100%;\n border-radius: 8px;\n }\n\n .picker-search:focus-within {\n border-color: var(--color-primary);\n outline: 1px solid var(--color-primary);\n }\n`;\n\nconst StyledPickerList = styled.div`\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: 4px 0 12px;\n\n .picker-group-header {\n box-sizing: border-box;\n height: 36px;\n display: flex;\n align-items: center;\n padding: 0 20px;\n margin-top: 4px;\n }\n\n .picker-empty {\n padding: 24px 20px;\n text-align: center;\n }\n`;\n\n/* A generously spaced row: the name on the left, an empty radio on the right —\n the shape `Select` gives a single-choice option, at picker scale. */\nconst StyledPickerRow = styled.div`\n box-sizing: border-box;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 0 20px;\n cursor: pointer;\n outline: none;\n\n &:hover,\n &:focus-visible {\n background-color: var(--color-theme-200);\n }\n\n .row-name {\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .c-radio-btn {\n flex-shrink: 0;\n }\n`;\n\nexport interface PickerRowProps {\n id: string;\n name: string;\n onSelect: () => void;\n}\n\nconst PickerRow = ({ id, name, onSelect }: PickerRowProps): ReactElement => (\n <StyledPickerRow\n role=\"button\"\n tabIndex={0}\n onClick={onSelect}\n onKeyDown={(event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect();\n }\n }}\n >\n <span className=\"row-name\">\n <Body2>{name}</Body2>\n </span>\n <RadioButton id={`wb-picker-${id}`} tabIndex={-1} />\n </StyledPickerRow>\n);\n\nexport interface ProjectElementPickerProps {\n kind: ProjectElementKind;\n onSelectProject: (project: PickerProject) => void;\n onSelectTask: (project: PickerProject, task: PickerTask) => void;\n onCancel: () => void;\n}\n\n/**\n * One picker, two flows — the same split the app makes between\n * `MenuSelector/ProjectList` (one step) and `ProjectTaskMenuSelector` (project,\n * then task). The task flow deliberately drops the app's \"Directly on project\"\n * default option: a task card has to be a task.\n */\nexport const ProjectElementPicker = ({\n kind,\n onSelectProject,\n onSelectTask,\n onCancel,\n}: ProjectElementPickerProps): ReactElement => {\n const [project, setProject] = useState<PickerProject | null>(null);\n const [query, setQuery] = useState(\"\");\n /* The picker opens on a mouseUP — the end of the draw gesture — so the click\n that closes that gesture arrives when the overlay is already on screen. A\n dismissal therefore has to be a WHOLE click on the overlay: press, then\n release. Without this the placeholder could be cancelled by the very\n gesture that created it. */\n const pressedInsideRef = useRef(false);\n\n const onTaskStep = kind === \"task\" && project !== null;\n\n const projectGroups = useMemo(\n () =>\n groupProjects(\n PICKER_PROJECTS.filter((entry) => matchesQuery(entry.name, query))\n ),\n [query]\n );\n\n const taskGroups = useMemo(\n () =>\n project\n ? groupTasks(\n project.tasks.filter((task) =>\n matchesQuery(taskDisplayName(task), query)\n )\n )\n : [],\n [project, query]\n );\n\n const handleProject = (picked: PickerProject): void => {\n if (kind === \"project\") {\n onSelectProject(picked);\n\n return;\n }\n\n setProject(picked);\n setQuery(\"\");\n };\n\n const handleBack = (): void => {\n setProject(null);\n setQuery(\"\");\n };\n\n const isEmpty = onTaskStep\n ? taskGroups.length === 0\n : projectGroups.length === 0;\n\n return (\n <Modal\n open\n onClose={onCancel}\n disableBackgroundClick\n onMouseDown={() => {\n pressedInsideRef.current = true;\n }}\n onClickOutside={() => {\n if (pressedInsideRef.current) {\n onCancel();\n }\n }}\n >\n <StyledPickerPanel type=\"paper-2\">\n <StyledPickerHeader>\n {onTaskStep ? (\n <Tooltip title=\"Back to projects\">\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n onClick={handleBack}\n aria-label=\"Back to projects\"\n >\n <ArrowLeftIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n <Input\n className=\"picker-search\"\n autoFocus\n value={query}\n placeholder={onTaskStep ? \"Search a task\" : \"Search a project\"}\n onChange={(event) => setQuery(event.target.value)}\n />\n {onTaskStep ? null : (\n <Tooltip title=\"Group by\">\n <IconButton type=\"button\" variant=\"text gray\">\n <SortGeneralIcon />\n </IconButton>\n </Tooltip>\n )}\n </StyledPickerHeader>\n\n <StyledPickerList>\n {isEmpty ? (\n <div className=\"picker-empty\">\n <Body2 color=\"tertiary\">\n {onTaskStep ? \"No Result\" : \"No Projects\"}\n </Body2>\n </div>\n ) : null}\n\n {onTaskStep && project\n ? taskGroups.map((group) => (\n <div key={group.taskList}>\n <div className=\"picker-group-header\">\n <Body2 weight=\"bold\">{group.taskList}</Body2>\n </div>\n {group.tasks.map((task) => (\n <PickerRow\n key={task.id}\n id={task.id}\n name={taskDisplayName(task)}\n onSelect={() => onSelectTask(project, task)}\n />\n ))}\n </div>\n ))\n : null}\n\n {onTaskStep\n ? null\n : projectGroups.map((group) => (\n <div key={group.client}>\n <div className=\"picker-group-header\">\n <Body2 weight=\"bold\">{group.client}</Body2>\n </div>\n {group.projects.map((entry) => (\n <PickerRow\n key={entry.id}\n id={entry.id}\n name={entry.name}\n onSelect={() => handleProject(entry)}\n />\n ))}\n </div>\n ))}\n </StyledPickerList>\n </StyledPickerPanel>\n </Modal>\n );\n};\n"],"mappings":"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","ignoreList":[]}