Skip to content
35 changes: 35 additions & 0 deletions Spec/collection-panel.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"data": {
"type": "card",
"attributes": {
"ref": {
"name": "CollectionPanel",
"module": "../components/collection-panel"
},
"specType": "component",
"readMe": "## Collection Panel\n\nOne card type as a browsable list that runs its own query: a grid, a strip or a table over the same rows, a search box, and an Add button.\n\n```ts\nimport { CollectionPanel } from '@cardstack/catalog/components/collection-panel';\n\n<CollectionPanel\n @cardClass={{CollectibleProduct}}\n @context={{@context}}\n @realms={{this.realms}}\n @columns={{COLUMNS}}\n @label='Products'\n/>\n```\n\nThe panel takes the card class, not a display name, and asks the realm for that type. `@sortBy` names the field to sort on; it defaults to `title`, and a field the card does not have returns no rows, so a card labelled by another field must pass it. `@extraFilter` is composed into the panel's one query, so the grid, the strip and the table always agree on which rows exist; `@rowFilter` narrows only the resolved table rows. `@allowCreate={{false}}` hides Add for collections whose rows must not be typed in by hand, such as an audit trail.\n\n### Non-goals\n\nIt does not edit rows inline or page results.",
"cardInfo": {
"name": "Collection Panel",
"summary": null,
"cardThumbnailURL": null,
"notes": null
},
"containedExamples": [],
"cardTitle": "Collection Panel",
"cardDescription": "A self-querying list of one card type, as a grid, strip or table, with search and an Add action."
},
"meta": {
"adoptsFrom": {
"module": "https://cardstack.com/base/spec",
"name": "Spec"
}
},
"relationships": {
"linkedExamples.0": {
"links": {
"self": "../components/example/CollectionExample/sneaker-catalogue"
}
}
}
}
}
34 changes: 34 additions & 0 deletions Spec/collection-shell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"data": {
"type": "card",
"attributes": {
"cardTitle": "Collection Shell",
"specType": "component",
"ref": {
"module": "../components/collection-shell",
"name": "CollectionShell"
},
"readMe": "# Collection Shell\n\n## Summary\nThe academy's collection view: the boxel-search-with-filter concept (live query membership, one toolbar, count badges with All first, grid / list / table sharing one row set, `+ Add <Noun>`, visibly clickable rows) in this kit's own clothes — a lens strip that leads with the count as a hero figure, a search field with the magnifier, segmented status badges and the `ViewSelector` on the right. Grid and list are prerendered fitted through `@context.searchResultsComponent` (click-to-open comes with the host overlay); the table is the shared Table block with a chevron cue and `viewCard` on the row. The wire filter and the client-side table filter are deliberate mirrors, so toggling views never changes which rows are present.\n\n## Usage\n```gts\n<CollectionShell @noun='learners' @singular='Learner' @cardTypeRef={{ref}} @items={{this.learners}} @realms={{this.realms}} @context={{@context}} @badges={{this.learnerBadges}} @columns={{this.learnerColumns}} @onOpen={{this.view}} @onAdd={{this.createFor Learner}} />\n```\nConsumed by Academy Desk's Courses, Cohorts, Learners and Certificates tabs. The linked example is the desk instance.\n\n## Non-goals\nDoes not own the query (the host passes instances + a codeRef); no saved views, no column picker.",
"cardInfo": {
"name": "Collection Shell",
"summary": null,
"notes": null,
"cardThumbnailURL": null
},
"cardDescription": "A collection page from resolved rows: a count, filter badges, grid, list or table views, and an Add action."
},
"relationships": {
"linkedExamples.0": {
"links": {
"self": "../components/example/CollectionExample/sneaker-catalogue"
}
}
},
"meta": {
"adoptsFrom": {
"module": "https://cardstack.com/base/spec",
"name": "Spec"
}
}
}
}
35 changes: 35 additions & 0 deletions Spec/collection-toolbar.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"data": {
"type": "card",
"attributes": {
"ref": {
"name": "CollectionToolbar",
"module": "../components/collection-toolbar"
},
"specType": "component",
"readMe": "## Collection Toolbar\n\nThe bar above a collection: a search box, one row of filter badges with counts, and a right-hand slot for the view switcher and the Add action.\n\n```ts\nimport { CollectionToolbar } from '@cardstack/catalog/components/collection-toolbar';\n\n<CollectionToolbar\n @search={{this.search}}\n @onSearch={{this.setSearch}}\n @badges={{this.badges}}\n @activeBadge={{this.badge}}\n @onBadge={{this.setBadge}}\n>\n <:right>…</:right>\n</CollectionToolbar>\n```\n\nThe toolbar holds no state: the caller owns the search text and the active badge. `'all'` must be the first badge. A collection with more than one filter axis passes them in the `filters` block, which renders inside one Filters dropdown, and `@activeFilterCount` shows how many differ from their defaults.\n\n### Non-goals\n\nIt does not query or filter rows itself.",
"cardInfo": {
"name": "Collection Toolbar",
"summary": null,
"cardThumbnailURL": null,
"notes": null
},
"containedExamples": [],
"cardTitle": "Collection Toolbar",
"cardDescription": "Search, filter badges with counts and a slot for view and Add controls, above any collection."
},
"meta": {
"adoptsFrom": {
"module": "https://cardstack.com/base/spec",
"name": "Spec"
}
},
"relationships": {
"linkedExamples.0": {
"links": {
"self": "../components/example/CollectionExample/sneaker-catalogue"
}
}
}
}
}
46 changes: 46 additions & 0 deletions cards/collectibles/AuthenticationRecord/cc-2022-88431.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"data": {
"type": "card",
"attributes": {
"service": "Check Check",
"outcome": "passed",
"submittedAt": "2022-12-01",
"completedAt": "2022-12-04",
"certificateId": "CC-2022-88431",
"authenticator": "AuthTeam-Mike",
"authenticatorNotes": "Stitching density on the Swoosh matches the retail run. Box label font and factory code consistent with the November 2022 production. Cracked-leather finish is factory, not wear.",
"submittedPhotos": {
"images": [
{
"url": "https://images.pexels.com/photos/2529148/pexels-photo-2529148.jpeg?auto=compress&cs=tinysrgb&w=800",
"sourceMode": "url"
}
]
},
"cardInfo": {
"name": "Check Check \u2014 AJ1 Lost & Found US 10.5",
"summary": "A passed legit check, with the certificate reference the collection item denormalizes.",
"notes": null,
"cardThumbnailURL": null
}
},
"relationships": {
"item": {
"links": {
"self": "../CollectionItem/aj1-lost-and-found-105"
}
},
"order": {
"links": {
"self": null
}
}
},
"meta": {
"adoptsFrom": {
"module": "../authentication-record",
"name": "AuthenticationRecord"
}
}
}
}
68 changes: 68 additions & 0 deletions cards/collectibles/CollectibleProduct/aj1-lost-and-found.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
{
"data": {
"type": "card",
"attributes": {
"sku": "DZ5485-612",
"colorway": "Chicago Lost & Found",
"releaseDate": "2022-11-19",
"retailPrice": {
"amount": 180,
"currency": {
"code": "USD"
}
},
"productDescription": "The Air Jordan 1 \"Lost & Found\" reimagines the 1985 Chicago colorway as though a deadstock pair had been found in a forgotten stockroom \u2014 cracked leather, aged midsoles, and a shoebox printed to look water-damaged and taped shut.",
"availableVariants": [
"7",
"7.5",
"8",
"8.5",
"9",
"9.5",
"10",
"10.5",
"11",
"11.5",
"12",
"13"
],
"tags": ["retro", "chicago", "vintage"],
"images": {
"images": [
{
"url": "https://images.pexels.com/photos/2529148/pexels-photo-2529148.jpeg?auto=compress&cs=tinysrgb&w=800",
"sourceMode": "url"
},
{
"url": "https://images.pexels.com/photos/2529147/pexels-photo-2529147.jpeg?auto=compress&cs=tinysrgb&w=800",
"sourceMode": "url"
}
]
},
"cardInfo": {
"name": "Air Jordan 1 Retro High OG",
"summary": "The 2022 reissue of the original Chicago colourway, finished to look aged.",
"notes": null,
"cardThumbnailURL": null
}
},
"relationships": {
"silhouette": {
"links": {
"self": null
}
},
"brand": {
"links": {
"self": null
}
}
},
"meta": {
"adoptsFrom": {
"module": "../collectible-product",
"name": "CollectibleProduct"
}
}
}
}
55 changes: 55 additions & 0 deletions cards/collectibles/CollectibleProduct/yeezy-350-zebra.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"data": {
"type": "card",
"attributes": {
"sku": "CP9654",
"colorway": "Zebra",
"releaseDate": "2017-02-25",
"retailPrice": {
"amount": 220,
"currency": {
"code": "USD"
}
},
"productDescription": "Primeknit upper in white and core black with a red \"SPLY-350\" stripe, on a translucent Boost sole. Restocked repeatedly, which is why it trades close to retail despite the hype.",
"availableVariants": ["7", "8", "9", "10", "10.5", "11", "12", "13"],
"tags": ["yeezy", "boost", "general-release"],
"images": {
"images": [
{
"url": "https://images.pexels.com/photos/4398341/pexels-photo-4398341.jpeg?auto=compress&cs=tinysrgb&w=800",
"sourceMode": "url"
},
{
"url": "https://images.pexels.com/photos/7193625/pexels-photo-7193625.jpeg?auto=compress&cs=tinysrgb&w=800",
"sourceMode": "url"
}
]
},
"cardInfo": {
"name": "adidas Yeezy Boost 350 V2",
"summary": "A repeatedly-restocked GR \u2014 the counterexample to hype pricing.",
"notes": null,
"cardThumbnailURL": null
}
},
"relationships": {
"silhouette": {
"links": {
"self": null
}
},
"brand": {
"links": {
"self": null
}
}
},
"meta": {
"adoptsFrom": {
"module": "../collectible-product",
"name": "CollectibleProduct"
}
}
}
}
70 changes: 70 additions & 0 deletions cards/collectibles/CollectionItem/aj1-lost-and-found-105.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"data": {
"type": "card",
"attributes": {
"variant": "10.5",
"variantScale": "US",
"packaging": "OG All",
"condition": {
"code": "DS",
"valueRetention": 100,
"notes": null
},
"acquisition": {
"price": {
"amount": 185,
"currency": {
"code": "USD"
}
},
"acquiredOn": "2022-11-19",
"source": "Retail \u2014 SNKRS",
"reference": "C01234567890"
},
"photos": {
"images": [
{
"url": "https://images.pexels.com/photos/2529148/pexels-photo-2529148.jpeg?auto=compress&cs=tinysrgb&w=800",
"sourceMode": "url"
}
]
},
"verifiedOn": "2022-12-04",
"verifiedBy": "Check Check",
"verificationReference": "CC-2022-88431",
"listedAt": "2026-08-25",
"lastKnownValue": {
"amount": 310,
"currency": {
"code": "USD"
}
},
"valuedOn": "2026-08-01",
"notes": "Hit on SNKRS release day. Keeping this one \u2014 the cracked-leather upper is the whole point of the release.",
"cardInfo": {
"name": "Air Jordan 1 Retro High OG \"Chicago Lost & Found\" \u2014 US 10.5",
"summary": "Deadstock, OG All, authenticated by Check Check. Acquired at retail on release day.",
"notes": null,
"cardThumbnailURL": null
}
},
"relationships": {
"item": {
"links": {
"self": "../CollectibleProduct/aj1-lost-and-found"
}
},
"owner": {
"links": {
"self": "../SellerProfile/sneakerking"
}
}
},
"meta": {
"adoptsFrom": {
"module": "../collection-item",
"name": "CollectionItem"
}
}
}
}
Loading
Loading