diff --git a/packages/base/card-api.gts b/packages/base/card-api.gts index 9295153dc1..9ada4e7726 100644 --- a/packages/base/card-api.gts +++ b/packages/base/card-api.gts @@ -1297,17 +1297,22 @@ class LinksToMany cachedInstance[isSavedInstance] = true; return cachedInstance; } - let resourceId = new URL(value.links.self, relativeTo).href; + let resourceId = new URL( + value.links.self, + !Array.isArray(doc.data) && 'id' in doc.data && doc.data.id + ? doc.data.id + : relativeTo, + ).href; + if (loadedValues && Array.isArray(loadedValues)) { + let loadedValue = loadedValues.find( + (v) => isCardOrField(v) && 'id' in v && v.id === resourceId, + ); + if (loadedValue) { + return loadedValue; + } + } let resource = resourceFrom(doc, resourceId); if (!resource) { - if (loadedValues && Array.isArray(loadedValues)) { - let loadedValue = loadedValues.find( - (v) => isCardOrField(v) && 'id' in v && v.id === resourceId, - ); - if (loadedValue) { - return loadedValue; - } - } return { type: 'not-loaded', reference: value.links.self, diff --git a/packages/base/cards-grid.gts b/packages/base/cards-grid.gts index 10038734b0..c3ba4e64b8 100644 --- a/packages/base/cards-grid.gts +++ b/packages/base/cards-grid.gts @@ -306,7 +306,7 @@ class Isolated extends Component { - filters: { displayName: string; icon: IconComponent; query: any }[] = + filters: { displayName: string; icon: IconComponent | string; query: any }[] = new TrackedArray([ { displayName: 'All Cards', @@ -424,7 +424,11 @@ class Isolated extends Component { } let cardTypeSummaries = (await response.json()).data as { id: string; - attributes: { displayName: string; total: number }; + attributes: { + displayName: string; + total: number; + iconHTML: string | null; + }; }[]; let excludedCardTypeIds = [ `${baseRealm.url}card-api/CardDef`, @@ -441,7 +445,7 @@ class Isolated extends Component { const lastIndex = summary.id.lastIndexOf('/'); this.filters.push({ displayName: summary.attributes.displayName, - icon: Captions, + icon: summary.attributes.iconHTML ?? Captions, query: { filter: { type: { diff --git a/packages/boxel-ui/addon/src/components/filter-list/index.gts b/packages/boxel-ui/addon/src/components/filter-list/index.gts index 961a08047e..0345c44ced 100644 --- a/packages/boxel-ui/addon/src/components/filter-list/index.gts +++ b/packages/boxel-ui/addon/src/components/filter-list/index.gts @@ -10,11 +10,13 @@ export interface FilterListIconSignature { export type FilterListIcon = ComponentLike; +import { htmlSafe } from '@ember/template'; + import { cn, eq } from '../../helpers.ts'; export type Filter = { displayName: string; - icon: FilterListIcon; + icon: FilterListIcon | string; }; interface Signature { @@ -39,9 +41,16 @@ export default class FilterList extends Component { class={{cn 'filter-list__button' selected=(eq @activeFilter filter)}} {{on 'click' (fn this.onChanged filter)}} data-test-boxel-filter-list-button={{filter.displayName}} - >{{filter.displayName}} + > + {{#if (isIconString filter.icon)}} + {{htmlSafe + (addClassToSVG filter.icon 'filter-list__icon') + }}{{filter.displayName}} + {{else}} + {{filter.displayName}}{{/if}} + {{/each}} } + +function addClassToSVG(svgString: string, className: string) { + return svgString + .replace(/]*)\sclass="([^"]*)"/, `]*)>/, ``); +} + +function isIconString(icon: FilterListIcon | string): icon is string { + return typeof icon === 'string'; +} diff --git a/packages/experiments-realm/CatalogEntry/tag.json b/packages/experiments-realm/CatalogEntry/tag.json new file mode 100644 index 0000000000..db4d9831a1 --- /dev/null +++ b/packages/experiments-realm/CatalogEntry/tag.json @@ -0,0 +1,20 @@ +{ + "data": { + "type": "card", + "attributes": { + "title": "Tag", + "description": "Catalog entry for Tag", + "ref": { + "name": "Tag", + "module": "../tag" + }, + "isField": false + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/catalog-entry", + "name": "CatalogEntry" + } + } + } +} diff --git a/packages/experiments-realm/CatalogEntry/team-member.json b/packages/experiments-realm/CatalogEntry/team-member.json new file mode 100644 index 0000000000..0f04ce5802 --- /dev/null +++ b/packages/experiments-realm/CatalogEntry/team-member.json @@ -0,0 +1,20 @@ +{ + "data": { + "type": "card", + "attributes": { + "title": "Team Member", + "description": "Catalog entry for Team Member", + "ref": { + "name": "TeamMember", + "module": "../sprint-task" + }, + "isField": false + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/catalog-entry", + "name": "CatalogEntry" + } + } + } +} diff --git a/packages/experiments-realm/CatalogEntry/team.json b/packages/experiments-realm/CatalogEntry/team.json new file mode 100644 index 0000000000..d259682406 --- /dev/null +++ b/packages/experiments-realm/CatalogEntry/team.json @@ -0,0 +1,20 @@ +{ + "data": { + "type": "card", + "attributes": { + "title": "Team", + "description": "Catalog entry for Team", + "ref": { + "name": "Team", + "module": "../sprint-task" + }, + "isField": false + }, + "meta": { + "adoptsFrom": { + "module": "https://cardstack.com/base/catalog-entry", + "name": "CatalogEntry" + } + } + } +} diff --git a/packages/experiments-realm/Project/51ca069b-1c55-4648-8654-bd82bf162f9d.json b/packages/experiments-realm/Project/51ca069b-1c55-4648-8654-bd82bf162f9d.json index d157f084e8..d30fa2fefc 100644 --- a/packages/experiments-realm/Project/51ca069b-1c55-4648-8654-bd82bf162f9d.json +++ b/packages/experiments-realm/Project/51ca069b-1c55-4648-8654-bd82bf162f9d.json @@ -8,7 +8,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "Project" } } diff --git a/packages/experiments-realm/Project/9b43240d-8c9c-42bc-a4d1-f9c626661562.json b/packages/experiments-realm/Project/9b43240d-8c9c-42bc-a4d1-f9c626661562.json index 5db9830baf..4e1e461909 100644 --- a/packages/experiments-realm/Project/9b43240d-8c9c-42bc-a4d1-f9c626661562.json +++ b/packages/experiments-realm/Project/9b43240d-8c9c-42bc-a4d1-f9c626661562.json @@ -8,7 +8,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "Project" } } diff --git a/packages/experiments-realm/SprintPlanner/89209d31-328a-4c18-9758-53eb3c38d4f0.json b/packages/experiments-realm/SprintPlanner/89209d31-328a-4c18-9758-53eb3c38d4f0.json index 98ca79b863..27030b89d9 100644 --- a/packages/experiments-realm/SprintPlanner/89209d31-328a-4c18-9758-53eb3c38d4f0.json +++ b/packages/experiments-realm/SprintPlanner/89209d31-328a-4c18-9758-53eb3c38d4f0.json @@ -2,15 +2,7 @@ "data": { "type": "card", "attributes": { - "tabs": [], - "headerIcon": { - "altText": null, - "size": "actual", - "height": null, - "width": null, - "base64": null - }, - "moduleId": null, + "title": "Engineering Team Sprint", "description": null, "thumbnailURL": null }, diff --git a/packages/experiments-realm/SprintTask/10402eaa-3826-4602-994b-60b7506fb98d.json b/packages/experiments-realm/SprintTask/10402eaa-3826-4602-994b-60b7506fb98d.json index ef2612133e..831a182826 100644 --- a/packages/experiments-realm/SprintTask/10402eaa-3826-4602-994b-60b7506fb98d.json +++ b/packages/experiments-realm/SprintTask/10402eaa-3826-4602-994b-60b7506fb98d.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "status": { - "completed": false, "index": 1, "label": "Next Sprint", - "color": "#64B5F6" + "color": "#64B5F6", + "completed": false }, "dateRange": { "start": "2024-12-08", @@ -16,8 +16,8 @@ "index": 1, "label": "Medium" }, - "name": "Pill Picker Example", - "details": "Use multi-select but for pills", + "name": "Create Pill Picker Example", + "details": "Implementation of a multi-select component using pills UI pattern, intended for use in the multi-filter feature. Users can select multiple pills simultaneously.\n\n**Note:** *This ticket is no longer relevant*", "description": null, "thumbnailURL": null }, @@ -39,28 +39,18 @@ }, "assignee": { "links": { - "self": null + "self": "../TeamMember/f832cfb6-959e-4d0d-bc83-8712a36a910a" } }, "tags.0": { - "links": { - "self": "../Tag/ad921cba-ffc7-4fdb-af34-ab8b93eae228" - } - }, - "tags.1": { "links": { "self": "../Tag/6b8446c8-b185-4de9-ba81-88f8b9eee7f5" } - }, - "tags.2": { - "links": { - "self": "../Tag/f00a2177-df10-4ad7-8eac-2fbf8448de98" - } } }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/186c797c-cee8-449c-a5a7-6624052deefc.json b/packages/experiments-realm/SprintTask/186c797c-cee8-449c-a5a7-6624052deefc.json index a807236011..f2779bcf6f 100644 --- a/packages/experiments-realm/SprintTask/186c797c-cee8-449c-a5a7-6624052deefc.json +++ b/packages/experiments-realm/SprintTask/186c797c-cee8-449c-a5a7-6624052deefc.json @@ -3,14 +3,14 @@ "type": "card", "attributes": { "status": { - "completed": false, - "index": 2, - "label": "Current Sprint", - "color": "#00BCD4" + "index": 4, + "label": "In Review", + "color": "#9575CD", + "completed": false }, "dateRange": { - "start": "2024-10-09", - "end": "2024-10-11" + "start": "2024-10-10", + "end": "2025-01-09" }, "priority": { "index": null, @@ -44,7 +44,7 @@ }, "assignee": { "links": { - "self": "../TeamMember/f832cfb6-959e-4d0d-bc83-8712a36a910a" + "self": "../TeamMember/5c42e6e9-59c8-4585-a721-e3414d7e7c9e" } }, "tags.0": { @@ -60,7 +60,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/1b1fb4fd-d722-4cf9-a956-66fc64ccbc48.json b/packages/experiments-realm/SprintTask/1b1fb4fd-d722-4cf9-a956-66fc64ccbc48.json index 6f18fdfbf4..4dc6c0fc9e 100644 --- a/packages/experiments-realm/SprintTask/1b1fb4fd-d722-4cf9-a956-66fc64ccbc48.json +++ b/packages/experiments-realm/SprintTask/1b1fb4fd-d722-4cf9-a956-66fc64ccbc48.json @@ -3,26 +3,21 @@ "type": "card", "attributes": { "status": { - "completed": false, "index": 2, "label": "Current Sprint", - "color": "#00BCD4" + "color": "#00BCD4", + "completed": false }, "dateRange": { - "start": "2024-11-18", - "end": "2024-11-19" + "start": "2024-12-19", + "end": "2025-01-09" }, "priority": { - "index": null, - "label": null, - "color": null, - "colorScheme": { - "foregroundColor": null, - "backgroundColor": null - } + "index": 2, + "label": "Medium" }, - "name": "Embedded Template for Status and Priority", - "details": null, + "name": "Implement Status and Priority Template Component with Dynamic Rendering", + "details": "Technical implementation of a reusable template component for displaying status and priority indicators across the application. Requirements include:\n- Create base template structure\n- Implement dynamic color rendering based on status\n- Add priority level visualization\n- Ensure accessibility compliance\n- Add unit tests for component", "description": null, "thumbnailURL": null }, @@ -55,7 +50,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/20058a9d-3c2d-4b42-8430-a95b6183245c.json b/packages/experiments-realm/SprintTask/20058a9d-3c2d-4b42-8430-a95b6183245c.json index 3150d7ebd1..976286cce0 100644 --- a/packages/experiments-realm/SprintTask/20058a9d-3c2d-4b42-8430-a95b6183245c.json +++ b/packages/experiments-realm/SprintTask/20058a9d-3c2d-4b42-8430-a95b6183245c.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "status": { - "completed": false, - "index": 2, - "label": "Current Sprint", - "color": "#00BCD4" + "index": 5, + "label": "Staged", + "color": "#26A69A", + "completed": false }, "dateRange": { "start": "2024-11-06", @@ -16,8 +16,8 @@ "index": 1, "label": "Medium" }, - "name": "Port the already done work for CRM from fork into boxel ui design system", - "details": "https://github.com/tintinthong/boxel/pull/1 CRM for reference. This is the PR that is constantly merged in", + "name": "Port the already done work for CRM into the monorepo", + "details": "Copy the existing work that has been carried out through spikes and git commit to our monorepo", "description": null, "thumbnailURL": null }, @@ -32,14 +32,9 @@ "self": "../Team/cc574556-4253-44b8-ba80-0cfb844b4908" } }, - "subtasks.0": { + "subtasks": { "links": { - "self": "./20058a9d-3c2d-4b42-8430-a95b6183245c" - } - }, - "subtasks.1": { - "links": { - "self": "./9e23b8b5-d541-48ef-a652-e7afefb29777" + "self": null } }, "assignee": { @@ -65,7 +60,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/346cc7ac-eb65-41fd-a1d7-0400668da097.json b/packages/experiments-realm/SprintTask/346cc7ac-eb65-41fd-a1d7-0400668da097.json index bf019d15fb..3052a78d24 100644 --- a/packages/experiments-realm/SprintTask/346cc7ac-eb65-41fd-a1d7-0400668da097.json +++ b/packages/experiments-realm/SprintTask/346cc7ac-eb65-41fd-a1d7-0400668da097.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "status": { - "completed": false, "index": 3, "label": "In Progress", - "color": "#FFB74D" + "color": "#FFB74D", + "completed": false }, "dateRange": { "start": "2024-11-19", @@ -17,7 +17,7 @@ "label": "High" }, "name": "Make fitted / embeddedd view for task", - "details": null, + "details": "Implement a responsive task view that adapts to its container size using container queries (@container), allowing tasks to be embedded in different contexts while maintaining proper layout and readability. This will ensure consistent display whether tasks appear in boards, lists, or as embedded components.", "description": null, "thumbnailURL": null }, @@ -39,18 +39,18 @@ }, "assignee": { "links": { - "self": null + "self": "../TeamMember/4c9614cd-ecda-42cf-bc18-37903019a7be" } }, - "tags": { + "tags.0": { "links": { - "self": null + "self": "../Tag/f00a2177-df10-4ad7-8eac-2fbf8448de98" } } }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/3cd737c3-4157-46be-9880-6ead8ea60652.json b/packages/experiments-realm/SprintTask/3cd737c3-4157-46be-9880-6ead8ea60652.json index dd7adb9eee..2ab10341a2 100644 --- a/packages/experiments-realm/SprintTask/3cd737c3-4157-46be-9880-6ead8ea60652.json +++ b/packages/experiments-realm/SprintTask/3cd737c3-4157-46be-9880-6ead8ea60652.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "status": { - "completed": false, - "index": 0, - "label": "Not Started", - "color": "#B0BEC5" + "index": 6, + "label": "Shipped", + "color": "#66BB6A", + "completed": true }, "dateRange": { "start": "2024-11-06", @@ -16,8 +16,8 @@ "index": null, "label": null }, - "name": "Create kanban board", - "details": null, + "name": "Build Kanban Board Component", + "details": "Implement drag and drop functionality using ember-modifier-drag-and-drop:\n\n- Install addon and implement TypeScript interfaces for events/data transfer\n- Create reusable drag/drop modifiers with visual feedback and preview\n- Add validation logic and write tests", "description": null, "thumbnailURL": null }, @@ -50,7 +50,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/48630c9d-2849-43d1-b356-890b016fffe9.json b/packages/experiments-realm/SprintTask/48630c9d-2849-43d1-b356-890b016fffe9.json index 1b726fed81..59c53d3917 100644 --- a/packages/experiments-realm/SprintTask/48630c9d-2849-43d1-b356-890b016fffe9.json +++ b/packages/experiments-realm/SprintTask/48630c9d-2849-43d1-b356-890b016fffe9.json @@ -3,21 +3,21 @@ "type": "card", "attributes": { "status": { - "completed": false, - "index": 3, - "label": "In Progress", - "color": "#FFB74D" + "index": 2, + "label": "Current Sprint", + "color": "#00BCD4", + "completed": false }, "dateRange": { "start": null, "end": null }, "priority": { - "index": null, - "label": null + "index": 4, + "label": "Highest" }, "name": "Fill up task board with realistic data", - "details": null, + "details": "### Objective\nPopulate the task board with realistic sample data that demonstrates the full capabilities of our markdown and task tracking features.\n\n#### Requirements\n- [ ] Add variety of task statuses (Todo, In Progress, Done)\n- [ ] Include tasks with different priority levels\n- [ ] Create sample tasks with rich markdown content\n- [ ] Add realistic date ranges and deadlines", "description": null, "thumbnailURL": null }, @@ -42,15 +42,15 @@ "self": "../TeamMember/03e293b9-e4c1-4592-b8d1-e6f963829086" } }, - "tags": { + "tags.0": { "links": { - "self": null + "self": "../Tag/6d80a75f-71bb-474f-979d-ef4bc571ad63" } } }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/7d92636a-e306-4433-93c5-3b5d976986f3.json b/packages/experiments-realm/SprintTask/7d92636a-e306-4433-93c5-3b5d976986f3.json index 11aced6955..a5229e4f23 100644 --- a/packages/experiments-realm/SprintTask/7d92636a-e306-4433-93c5-3b5d976986f3.json +++ b/packages/experiments-realm/SprintTask/7d92636a-e306-4433-93c5-3b5d976986f3.json @@ -3,21 +3,21 @@ "type": "card", "attributes": { "status": { - "index": 0, - "label": "Not Started", - "color": "#B0BEC5", + "index": 4, + "label": "In Review", + "color": "#9575CD", "completed": false }, "dateRange": { "start": "2024-11-20", - "end": "2024-11-21" + "end": "2024-11-27" }, "priority": { "index": null, "label": null }, - "name": "Drag and drop task", - "details": null, + "name": "Implement Cross-Component Drag and Drop System", + "details": "Design and implement a robust drag and drop system with the following specifications:\n\n- Evaluate and integrate a suitable drag and drop library (e.g., react-dnd, dnd-kit, or sortablejs)\n- Create reusable drag and drop hooks/utilities\n- Implement drag source and drop target abstractions\n- Add visual feedback during drag operations\n- Handle drag preview with custom styling\n- Implement drop validation logic\n- Add support for touch devices\n- Create comprehensive test suite for DnD interactions\n- Document library integration and custom implementation details", "description": null, "thumbnailURL": null }, @@ -50,9 +50,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/SprintTask/8ca45d40-adcb-437f-83ee-07ffd973cd17.json b/packages/experiments-realm/SprintTask/8ca45d40-adcb-437f-83ee-07ffd973cd17.json index 9ea0c99eb9..649d317a2f 100644 --- a/packages/experiments-realm/SprintTask/8ca45d40-adcb-437f-83ee-07ffd973cd17.json +++ b/packages/experiments-realm/SprintTask/8ca45d40-adcb-437f-83ee-07ffd973cd17.json @@ -3,10 +3,10 @@ "type": "card", "attributes": { "status": { - "completed": false, - "index": 3, - "label": "In Progress", - "color": "#FFB74D" + "index": 2, + "label": "Current Sprint", + "color": "#00BCD4", + "completed": false }, "dateRange": { "start": null, @@ -17,7 +17,7 @@ "label": null }, "name": "Resolve bug where overlay only appears on certain cards", - "details": null, + "details": "The overlay is only appearing on specific cards due to a faulty modifier that's not being applied consistently across all card instances.", "description": null, "thumbnailURL": null }, @@ -39,18 +39,18 @@ }, "assignee": { "links": { - "self": null + "self": "../TeamMember/5c42e6e9-59c8-4585-a721-e3414d7e7c9e" } }, - "tags": { + "tags.0": { "links": { - "self": null + "self": "../Tag/c3b47bc8-a7df-48c3-8b7b-50dacbf124fc" } } }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/9e23b8b5-d541-48ef-a652-e7afefb29777.json b/packages/experiments-realm/SprintTask/9e23b8b5-d541-48ef-a652-e7afefb29777.json index 8c83e02911..44206a770e 100644 --- a/packages/experiments-realm/SprintTask/9e23b8b5-d541-48ef-a652-e7afefb29777.json +++ b/packages/experiments-realm/SprintTask/9e23b8b5-d541-48ef-a652-e7afefb29777.json @@ -17,7 +17,7 @@ "label": null }, "name": "Incoporate Boxel Multi Select in Dropdown", - "details": null, + "details": "Integrate Boxel's multi-select dropdown component to be more unified with the single-select dropdown.\n\nThe trigger component should share the same designs.", "description": null, "thumbnailURL": null }, @@ -50,7 +50,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/c734e2c7-71d9-446e-a2c1-e6e930fcee55.json b/packages/experiments-realm/SprintTask/a1fd93a9-6b00-4b79-8d97-6c34c3a19cc3.json similarity index 60% rename from packages/experiments-realm/SprintTask/c734e2c7-71d9-446e-a2c1-e6e930fcee55.json rename to packages/experiments-realm/SprintTask/a1fd93a9-6b00-4b79-8d97-6c34c3a19cc3.json index 8ba75e2e92..0e0b089c0b 100644 --- a/packages/experiments-realm/SprintTask/c734e2c7-71d9-446e-a2c1-e6e930fcee55.json +++ b/packages/experiments-realm/SprintTask/a1fd93a9-6b00-4b79-8d97-6c34c3a19cc3.json @@ -3,9 +3,9 @@ "type": "card", "attributes": { "status": { - "index": 3, - "label": "In Progress", - "color": "#FFB74D", + "index": 1, + "label": "Next Sprint", + "color": null, "completed": false }, "dateRange": { @@ -13,10 +13,10 @@ "end": null }, "priority": { - "index": 0, - "label": "Low" + "index": 4, + "label": "Highest" }, - "name": "Add functionality where + opens create card modal with correct status", + "name": "Calendar displays wrong date after closing", "details": null, "description": null, "thumbnailURL": null @@ -24,12 +24,12 @@ "relationships": { "project": { "links": { - "self": "../Project/9b43240d-8c9c-42bc-a4d1-f9c626661562" + "self": "../Project/51ca069b-1c55-4648-8654-bd82bf162f9d" } }, "team": { "links": { - "self": "../Team/cc574556-4253-44b8-ba80-0cfb844b4908" + "self": null } }, "subtasks": { @@ -39,18 +39,18 @@ }, "assignee": { "links": { - "self": "../TeamMember/4c9614cd-ecda-42cf-bc18-37903019a7be" + "self": null } }, - "tags": { + "tags.0": { "links": { - "self": null + "self": "../Tag/c3b47bc8-a7df-48c3-8b7b-50dacbf124fc" } } }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/SprintTask/d21d407b-9c1c-4204-a3bb-7b91f9260017.json b/packages/experiments-realm/SprintTask/d21d407b-9c1c-4204-a3bb-7b91f9260017.json index 8af6ba7a4b..0c59d1133f 100644 --- a/packages/experiments-realm/SprintTask/d21d407b-9c1c-4204-a3bb-7b91f9260017.json +++ b/packages/experiments-realm/SprintTask/d21d407b-9c1c-4204-a3bb-7b91f9260017.json @@ -50,9 +50,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/SprintTask/d8ce7466-3693-4d54-8931-8ccd25ca079f.json b/packages/experiments-realm/SprintTask/d8ce7466-3693-4d54-8931-8ccd25ca079f.json index 7b0ec1cd57..0376341087 100644 --- a/packages/experiments-realm/SprintTask/d8ce7466-3693-4d54-8931-8ccd25ca079f.json +++ b/packages/experiments-realm/SprintTask/d8ce7466-3693-4d54-8931-8ccd25ca079f.json @@ -13,11 +13,11 @@ "end": "2024-12-17" }, "priority": { - "index": null, - "label": null + "index": 0, + "label": "Lowest" }, "name": "Build Date Range Card", - "details": null, + "details": "", "description": null, "thumbnailURL": null }, @@ -32,9 +32,14 @@ "self": "../Team/0a799af4-c49a-4d27-aabe-9ed54b9baf55" } }, - "subtasks": { + "subtasks.0": { + "links": { + "self": "./a1fd93a9-6b00-4b79-8d97-6c34c3a19cc3" + } + }, + "subtasks.1": { "links": { - "self": null + "self": "./d9fdfbbc-fb17-41d9-90a2-c5765819930b" } }, "assignee": { @@ -42,17 +47,17 @@ "self": "../TeamMember/03e293b9-e4c1-4592-b8d1-e6f963829086" } }, - "tags": { + "tags.0": { "links": { - "self": null + "self": "../Tag/f00a2177-df10-4ad7-8eac-2fbf8448de98" } } }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/SprintTask/d9fdfbbc-fb17-41d9-90a2-c5765819930b.json b/packages/experiments-realm/SprintTask/d9fdfbbc-fb17-41d9-90a2-c5765819930b.json new file mode 100644 index 0000000000..d230492914 --- /dev/null +++ b/packages/experiments-realm/SprintTask/d9fdfbbc-fb17-41d9-90a2-c5765819930b.json @@ -0,0 +1,58 @@ +{ + "data": { + "type": "card", + "attributes": { + "status": { + "index": 1, + "label": "Next Sprint", + "color": null, + "completed": false + }, + "dateRange": { + "start": "2025-01-09", + "end": "2025-01-12" + }, + "priority": { + "index": null, + "label": null + }, + "name": "Integrate Ember Power Calendar Picker", + "details": "Create a date range picker component using Ember Power Calendar with built-in validation to prevent end dates being set before start dates. Component should be implemented within a dropdown for better UX, following this pattern:\n\n1. Click triggers dropdown with calendar\n2. First click sets start date\n3. Second click sets end date (with validation)\n4. Invalid date ranges should be prevented and show validation feedback\n\n**Technical Requirements:**\n- Use `ember-power-calendar` for the calendar implementation\n- Implement date validation logic in the component\n- Style dropdown to match our design system", + "description": null, + "thumbnailURL": null + }, + "relationships": { + "project": { + "links": { + "self": "../Project/51ca069b-1c55-4648-8654-bd82bf162f9d" + } + }, + "team": { + "links": { + "self": null + } + }, + "subtasks": { + "links": { + "self": null + } + }, + "assignee": { + "links": { + "self": null + } + }, + "tags": { + "links": { + "self": null + } + } + }, + "meta": { + "adoptsFrom": { + "module": "../sprint-task", + "name": "SprintTask" + } + } + } +} diff --git a/packages/experiments-realm/SprintTask/f81ea9a1-0b94-4e12-8e2e-c84fba78c551.json b/packages/experiments-realm/SprintTask/f81ea9a1-0b94-4e12-8e2e-c84fba78c551.json index b5f6791058..c625a07921 100644 --- a/packages/experiments-realm/SprintTask/f81ea9a1-0b94-4e12-8e2e-c84fba78c551.json +++ b/packages/experiments-realm/SprintTask/f81ea9a1-0b94-4e12-8e2e-c84fba78c551.json @@ -50,7 +50,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "SprintTask" } } diff --git a/packages/experiments-realm/Tag/c3b47bc8-a7df-48c3-8b7b-50dacbf124fc.json b/packages/experiments-realm/Tag/c3b47bc8-a7df-48c3-8b7b-50dacbf124fc.json new file mode 100644 index 0000000000..4c7f6196c4 --- /dev/null +++ b/packages/experiments-realm/Tag/c3b47bc8-a7df-48c3-8b7b-50dacbf124fc.json @@ -0,0 +1,17 @@ +{ + "data": { + "type": "card", + "attributes": { + "name": "Bug", + "color": "#FFCCCB", + "description": null, + "thumbnailURL": null + }, + "meta": { + "adoptsFrom": { + "module": "../tag", + "name": "Tag" + } + } + } +} \ No newline at end of file diff --git a/packages/experiments-realm/Team/0a799af4-c49a-4d27-aabe-9ed54b9baf55.json b/packages/experiments-realm/Team/0a799af4-c49a-4d27-aabe-9ed54b9baf55.json index 4719eab7b2..ded61fd31b 100644 --- a/packages/experiments-realm/Team/0a799af4-c49a-4d27-aabe-9ed54b9baf55.json +++ b/packages/experiments-realm/Team/0a799af4-c49a-4d27-aabe-9ed54b9baf55.json @@ -8,9 +8,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "Team" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/Team/cc574556-4253-44b8-ba80-0cfb844b4908.json b/packages/experiments-realm/Team/cc574556-4253-44b8-ba80-0cfb844b4908.json index 6032ebd96a..fc3e5ca3c3 100644 --- a/packages/experiments-realm/Team/cc574556-4253-44b8-ba80-0cfb844b4908.json +++ b/packages/experiments-realm/Team/cc574556-4253-44b8-ba80-0cfb844b4908.json @@ -8,9 +8,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "Team" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/TeamMember/03e293b9-e4c1-4592-b8d1-e6f963829086.json b/packages/experiments-realm/TeamMember/03e293b9-e4c1-4592-b8d1-e6f963829086.json index f06ead1d06..a96a2f91be 100644 --- a/packages/experiments-realm/TeamMember/03e293b9-e4c1-4592-b8d1-e6f963829086.json +++ b/packages/experiments-realm/TeamMember/03e293b9-e4c1-4592-b8d1-e6f963829086.json @@ -16,7 +16,7 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "TeamMember" } } diff --git a/packages/experiments-realm/TeamMember/4c9614cd-ecda-42cf-bc18-37903019a7be.json b/packages/experiments-realm/TeamMember/4c9614cd-ecda-42cf-bc18-37903019a7be.json index 247108b2df..8c1fa2b79d 100644 --- a/packages/experiments-realm/TeamMember/4c9614cd-ecda-42cf-bc18-37903019a7be.json +++ b/packages/experiments-realm/TeamMember/4c9614cd-ecda-42cf-bc18-37903019a7be.json @@ -16,9 +16,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "TeamMember" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/TeamMember/5c42e6e9-59c8-4585-a721-e3414d7e7c9e.json b/packages/experiments-realm/TeamMember/5c42e6e9-59c8-4585-a721-e3414d7e7c9e.json index 96839e818b..32c36b206b 100644 --- a/packages/experiments-realm/TeamMember/5c42e6e9-59c8-4585-a721-e3414d7e7c9e.json +++ b/packages/experiments-realm/TeamMember/5c42e6e9-59c8-4585-a721-e3414d7e7c9e.json @@ -16,9 +16,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "TeamMember" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/TeamMember/847c1f4e-e0ae-43d3-a012-8ffaa66f5925.json b/packages/experiments-realm/TeamMember/847c1f4e-e0ae-43d3-a012-8ffaa66f5925.json index ff921dbde5..61eff946d8 100644 --- a/packages/experiments-realm/TeamMember/847c1f4e-e0ae-43d3-a012-8ffaa66f5925.json +++ b/packages/experiments-realm/TeamMember/847c1f4e-e0ae-43d3-a012-8ffaa66f5925.json @@ -16,9 +16,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "TeamMember" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/TeamMember/f832cfb6-959e-4d0d-bc83-8712a36a910a.json b/packages/experiments-realm/TeamMember/f832cfb6-959e-4d0d-bc83-8712a36a910a.json index c0963ed97a..098ecf72e8 100644 --- a/packages/experiments-realm/TeamMember/f832cfb6-959e-4d0d-bc83-8712a36a910a.json +++ b/packages/experiments-realm/TeamMember/f832cfb6-959e-4d0d-bc83-8712a36a910a.json @@ -16,9 +16,9 @@ }, "meta": { "adoptsFrom": { - "module": "../productivity/task", + "module": "../sprint-task", "name": "TeamMember" } } } -} \ No newline at end of file +} diff --git a/packages/experiments-realm/atom-examples.gts b/packages/experiments-realm/atom-examples.gts index 81aea3a4fb..7e5d03ac98 100644 --- a/packages/experiments-realm/atom-examples.gts +++ b/packages/experiments-realm/atom-examples.gts @@ -17,7 +17,7 @@ import { Button } from '@cardstack/boxel-ui/components'; import { Author } from './author'; import { Pet } from './pet'; import { Country } from './country'; -import { TeamMember } from './productivity/task'; +import { TeamMember } from './sprint-task'; import { Company } from './crm/company'; import { Contact } from './crm/contact'; import { ContactLinkField } from './fields/contact-link'; diff --git a/packages/experiments-realm/components/activity-card.gts b/packages/experiments-realm/components/activity-card.gts index b5277ff520..853e9a1819 100644 --- a/packages/experiments-realm/components/activity-card.gts +++ b/packages/experiments-realm/components/activity-card.gts @@ -1,12 +1,8 @@ import GlimmerComponent from '@glimmer/component'; -import EntityDisplayWithThumbnail from './entity-thumbnail-display'; interface ActivityCardArgs { Blocks: { - title?: []; - thumbnail?: []; - description?: []; - icon?: []; + header?: []; content?: []; }; Element: HTMLElement; @@ -15,34 +11,9 @@ interface ActivityCardArgs { export default class ActivityCard extends GlimmerComponent { } diff --git a/packages/experiments-realm/components/entity-icon-display.gts b/packages/experiments-realm/components/entity-icon-display.gts index 73cc4142d1..847d46f8fa 100644 --- a/packages/experiments-realm/components/entity-icon-display.gts +++ b/packages/experiments-realm/components/entity-icon-display.gts @@ -77,10 +77,15 @@ export default class EntityDisplayWithIcon extends GlimmerComponent diff --git a/packages/experiments-realm/components/entity-thumbnail-display.gts b/packages/experiments-realm/components/entity-thumbnail-display.gts index 26aac840e9..0d4f7ce3d7 100644 --- a/packages/experiments-realm/components/entity-thumbnail-display.gts +++ b/packages/experiments-realm/components/entity-thumbnail-display.gts @@ -80,10 +80,15 @@ export default class EntityDisplayWithThumbnail extends GlimmerComponent diff --git a/packages/experiments-realm/productivity/filter-display.gts b/packages/experiments-realm/components/filter/filter-display.gts similarity index 100% rename from packages/experiments-realm/productivity/filter-display.gts rename to packages/experiments-realm/components/filter/filter-display.gts diff --git a/packages/experiments-realm/productivity/filter-dropdown-item.gts b/packages/experiments-realm/components/filter/filter-dropdown-item.gts similarity index 100% rename from packages/experiments-realm/productivity/filter-dropdown-item.gts rename to packages/experiments-realm/components/filter/filter-dropdown-item.gts diff --git a/packages/experiments-realm/productivity/filter-dropdown.gts b/packages/experiments-realm/components/filter/filter-dropdown.gts similarity index 100% rename from packages/experiments-realm/productivity/filter-dropdown.gts rename to packages/experiments-realm/components/filter/filter-dropdown.gts diff --git a/packages/experiments-realm/productivity/filter-trigger.gts b/packages/experiments-realm/components/filter/filter-trigger.gts similarity index 100% rename from packages/experiments-realm/productivity/filter-trigger.gts rename to packages/experiments-realm/components/filter/filter-trigger.gts diff --git a/packages/experiments-realm/crm/account.gts b/packages/experiments-realm/crm/account.gts index edf0725047..9d88ac21f2 100644 --- a/packages/experiments-realm/crm/account.gts +++ b/packages/experiments-realm/crm/account.gts @@ -25,13 +25,8 @@ import ContactIcon from '@cardstack/boxel-icons/contact'; import CalendarExclamation from '@cardstack/boxel-icons/calendar-exclamation'; import { LooseGooseyField } from '../loosey-goosey'; import { StatusPill } from '../components/status-pill'; -import { Avatar, Pill, BoxelButton } from '@cardstack/boxel-ui/components'; -import EntityDisplayWithIcon from '../components/entity-icon-display'; -import EntityDisplayWithThumbnail from '../components/entity-thumbnail-display'; -import ActivityCard from '../components/activity-card'; +import { BoxelButton } from '@cardstack/boxel-ui/components'; import PlusIcon from '@cardstack/boxel-icons/plus'; -import PhoneIcon from '@cardstack/boxel-icons/phone'; -import SquareUser from '@cardstack/boxel-icons/square-user'; import CalendarTime from '@cardstack/boxel-icons/calendar-time'; import ClockExclamation from '@cardstack/boxel-icons/clock-exclamation'; import Clock24 from '@cardstack/boxel-icons/clock-24'; @@ -274,56 +269,7 @@ class IsolatedTemplate extends Component { <:content> - - <:thumbnail> - - - <:title> - Customer Call - - <:icon> - - Left VoiceMail - - - <:description> - Discuss Q3 product roadmap - - <:content> -
- - <:icon> - - - <:content> - Technova - - - - <:thumbnail> - - - <:content> - Sales Associate - - - - <:icon> - - - <:content> - 3:15pm - - -
- -
+ {{! remove activity mock }} diff --git a/packages/experiments-realm/crm/contact.gts b/packages/experiments-realm/crm/contact.gts index 8d29b1c062..b5afa3db3b 100644 --- a/packages/experiments-realm/crm/contact.gts +++ b/packages/experiments-realm/crm/contact.gts @@ -48,9 +48,7 @@ export class SocialLinkField extends ContactLinkField { class EmbeddedTemplate extends Component { get hasSocialLinks() { - return ( - this.args.model.socialLinks && this.args.model.socialLinks.length > 0 - ); + return Boolean(this.args.model?.socialLinks?.length); }