@lockerverse/react 0.2.129-dev.1 → 0.2.130-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/auctions.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,c as t,t as n}from"./use-auction-boundary.js";import{a as r,i,n as a,o,r as s,s as c,t as l}from"./lockerverse-auction.js";import{t as u}from"./use-lockerverse-auctions.js";import{ArrowRight as d,Gavel as f,ListChecks as p}from"lucide-react";import{useEffect as m,useRef as h,useState as g}from"react";import{Fragment as _,jsx as v,jsxs as y}from"react/jsx-runtime";function b({auction:a,onSelect:s,href:l}){n(a.startAt,a.endAt,a.items);let u=a.configuration.image||a.items.find(e=>e.image||e.images.length)?.image||a.items.find(e=>e.images.length)?.images[0]||a.community?.banner||a.community?.thumbnail,m=a.description||{active:`Bidding is open on available items.`,draft:`Preview the lineup before bidding opens.`,finished:`Bidding has wrapped. Review the completed items.`}[e(a)];return y(`article`,{className:`lockerverse-auctions__catalog-card`,children:[l?v(`a`,{"aria-label":`View items in ${a.name}`,className:`lockerverse-auctions__catalog-select`,"data-auction-id":a.id,href:l,onClick:e=>{s&&e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&(e.preventDefault(),s())},children:y(`span`,{className:`lockerverse-auctions__visually-hidden`,children:[`View items in `,a.name]})}):v(`button`,{"aria-label":`View items in ${a.name}`,className:`lockerverse-auctions__catalog-select`,"data-auction-id":a.id,onClick:s,type:`button`}),y(`div`,{className:`lockerverse-auctions__catalog-media`,children:[v(i,{fallback:u,name:a.name}),y(`div`,{className:`lockerverse-auctions__catalog-chips`,children:[v(`span`,{className:`lockerverse-auctions__catalog-chip`,children:o[e(a)]}),v(c,{auction:a})]}),y(`dl`,{className:`lockerverse-auctions__catalog-metrics`,children:[v(r,{icon:v(p,{"aria-hidden":`true`,size:16}),label:`Items`,value:String(a.items.length)}),v(r,{icon:v(f,{"aria-hidden":`true`,size:16}),label:`Bids`,value:String(a.items.reduce((e,t)=>e+t.bidCount,0))})]})]}),y(`div`,{className:`lockerverse-auctions__catalog-body`,children:[v(`h3`,{children:a.name}),v(t,{className:`lockerverse-auctions__catalog-description`,description:m}),y(`div`,{className:`lockerverse-auctions__catalog-footer`,children:[v(`span`,{className:`lockerverse-auctions__catalog-cta`,children:e(a)===`draft`?`Preview items`:`View items`}),v(`span`,{className:`lockerverse-auctions__catalog-arrow`,children:v(d,{"aria-hidden":`true`,size:16})})]})]})]})}function x({auctions:e,theme:t=`dark`,style:n,className:r,showFilters:i=!0,showHeader:a=!0,showLineup:o=!
|
|
1
|
+
import{a as e,c as t,t as n}from"./use-auction-boundary.js";import{a as r,i,n as a,o,r as s,s as c,t as l}from"./lockerverse-auction.js";import{t as u}from"./use-lockerverse-auctions.js";import{ArrowRight as d,Gavel as f,ListChecks as p}from"lucide-react";import{useEffect as m,useRef as h,useState as g}from"react";import{Fragment as _,jsx as v,jsxs as y}from"react/jsx-runtime";function b({auction:a,onSelect:s,href:l}){n(a.startAt,a.endAt,a.items);let u=a.configuration.image||a.items.find(e=>e.image||e.images.length)?.image||a.items.find(e=>e.images.length)?.images[0]||a.community?.banner||a.community?.thumbnail,m=a.description||{active:`Bidding is open on available items.`,draft:`Preview the lineup before bidding opens.`,finished:`Bidding has wrapped. Review the completed items.`}[e(a)];return y(`article`,{className:`lockerverse-auctions__catalog-card`,children:[l?v(`a`,{"aria-label":`View items in ${a.name}`,className:`lockerverse-auctions__catalog-select`,"data-auction-id":a.id,href:l,onClick:e=>{s&&e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&(e.preventDefault(),s())},children:y(`span`,{className:`lockerverse-auctions__visually-hidden`,children:[`View items in `,a.name]})}):v(`button`,{"aria-label":`View items in ${a.name}`,className:`lockerverse-auctions__catalog-select`,"data-auction-id":a.id,onClick:s,type:`button`}),y(`div`,{className:`lockerverse-auctions__catalog-media`,children:[v(i,{fallback:u,name:a.name}),y(`div`,{className:`lockerverse-auctions__catalog-chips`,children:[v(`span`,{className:`lockerverse-auctions__catalog-chip`,children:o[e(a)]}),v(c,{auction:a})]}),y(`dl`,{className:`lockerverse-auctions__catalog-metrics`,children:[v(r,{icon:v(p,{"aria-hidden":`true`,size:16}),label:`Items`,value:String(a.items.length)}),v(r,{icon:v(f,{"aria-hidden":`true`,size:16}),label:`Bids`,value:String(a.items.reduce((e,t)=>e+t.bidCount,0))})]})]}),y(`div`,{className:`lockerverse-auctions__catalog-body`,children:[v(`h3`,{children:a.name}),v(t,{className:`lockerverse-auctions__catalog-description`,description:m}),y(`div`,{className:`lockerverse-auctions__catalog-footer`,children:[v(`span`,{className:`lockerverse-auctions__catalog-cta`,children:e(a)===`draft`?`Preview items`:`View items`}),v(`span`,{className:`lockerverse-auctions__catalog-arrow`,children:v(d,{"aria-hidden":`true`,size:16})})]})]})]})}function x({auctions:e,theme:t=`dark`,style:n,className:r,showFilters:i=!0,showHeader:a=!0,showLineup:o=!1,getAuctionHref:s,onSelectAuction:c,...u}){let[d,f]=g(null),p=h(null),_=h(null),b=h(d),x=e.auctions?.find(e=>e.id===d);return m(()=>{if(b.current!==d){if(d===null){let e=[..._.current?.querySelectorAll(`button[data-auction-id]`)??[]].find(e=>e.dataset.auctionId===b.current);(p.current??e??_.current)?.focus()}b.current=d}},[d]),y(`section`,{"aria-busy":e.loading,"aria-label":`Auctions`,className:[`lockerverse-auctions`,`lockerverse-auctions--catalog`,r].filter(Boolean).join(` `),"data-lockerverse-theme":t,ref:_,style:n,tabIndex:-1,children:[!x&&a?v(`header`,{className:`lockerverse-auctions__catalog-header`,children:v(`h2`,{ref:p,tabIndex:-1,children:`Auctions`})}):null,e.loading?v(`p`,{role:`status`,children:e.auctions?`Refreshing auctions…`:`Loading auctions…`}):null,e.error?y(`div`,{role:`alert`,children:[v(`p`,{children:e.error.message}),v(`button`,{onClick:e.refresh,type:`button`,children:`Try again`})]}):null,x?v(l,{auction:x,onBack:()=>f(null),...u,showFilters:i,showHeader:a,showLineup:o,theme:t,...n?{style:n}:{}},x.id):v(S,{auctions:e.auctions,onSelectAuction:e=>{c?c(e):f(e.id)},...s?{getAuctionHref:s}:{},interceptLinks:!!c,showLineup:o})]})}function S({auctions:e,showLineup:t,onSelectAuction:n,getAuctionHref:r,interceptLinks:i}){return e?e.length?y(_,{children:[t?y(`div`,{className:`lockerverse-auctions__catalog-lineup`,children:[y(`div`,{children:[v(`h3`,{children:`Auction lineup`}),v(`p`,{children:`Browse the current collection.`})]}),y(`span`,{children:[e.length,` `,e.length===1?`auction`:`auctions`]})]}):null,v(`ul`,{className:`lockerverse-auctions__catalog-grid`,children:e.map(e=>v(`li`,{children:v(b,{auction:e,...r?{href:r(e)}:{},...!r||i?{onSelect:()=>n(e)}:{}})},e.id))})]}):y(`div`,{className:`lockerverse-auctions__catalog-empty`,children:[v(`h3`,{children:`No auctions yet.`}),v(`p`,{children:`Published auctions will appear here once they are available.`})]}):null}export{a as LockerverseAuction,s as LockerverseAuctionItemCard,x as LockerverseAuctions,u as useLockerverseAuctions};
|
|
2
2
|
//# sourceMappingURL=auctions.js.map
|
package/dist/auctions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auctions.js","names":[],"sources":["../src/lockerverse-auctions.tsx"],"sourcesContent":["import type { LockerverseAuction as Auction } from \"@lockerverse/sdk/auctions\";\nimport { ArrowRight, Gavel, ListChecks } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n CatalogImage,\n Metric,\n STATUS_LABELS,\n Timing,\n} from \"./auction-catalog-parts.tsx\";\nimport { AuctionDescription } from \"./auction-description.tsx\";\nimport { getAuctionDisplayStatus } from \"./auction-display.ts\";\nimport {\n AuctionContent,\n type LockerverseAuctionProps,\n} from \"./lockerverse-auction.tsx\";\nimport { useAuctionBoundary } from \"./use-auction-boundary.ts\";\nimport type { UseLockerverseAuctionsResult } from \"./use-lockerverse-auctions.ts\";\n\nexport type LockerverseAuctionsProps = Omit<\n LockerverseAuctionProps,\n \"auction\" | \"onBack\"\n> & {\n auctions: UseLockerverseAuctionsResult;\n getAuctionHref?: (auction: Auction) => string;\n onSelectAuction?: (auction: Auction) => void;\n};\n\nfunction AuctionCard({\n auction,\n onSelect,\n href,\n}: {\n auction: Auction;\n onSelect?: () => void;\n href?: string;\n}) {\n useAuctionBoundary(auction.startAt, auction.endAt, auction.items);\n const fallback =\n auction.configuration.image ||\n auction.items.find((item) => item.image || item.images.length)?.image ||\n auction.items.find((item) => item.images.length)?.images[0] ||\n auction.community?.banner ||\n auction.community?.thumbnail;\n const description =\n auction.description ||\n {\n active: \"Bidding is open on available items.\",\n draft: \"Preview the lineup before bidding opens.\",\n finished: \"Bidding has wrapped. Review the completed items.\",\n }[getAuctionDisplayStatus(auction)];\n return (\n <article className=\"lockerverse-auctions__catalog-card\">\n {href ? (\n <a\n aria-label={`View items in ${auction.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n data-auction-id={auction.id}\n href={href}\n onClick={(event) => {\n if (\n onSelect &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n onSelect();\n }\n }}\n >\n <span className=\"lockerverse-auctions__visually-hidden\">\n View items in {auction.name}\n </span>\n </a>\n ) : (\n <button\n aria-label={`View items in ${auction.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n data-auction-id={auction.id}\n onClick={onSelect}\n type=\"button\"\n />\n )}\n <div className=\"lockerverse-auctions__catalog-media\">\n <CatalogImage fallback={fallback} name={auction.name} />\n <div className=\"lockerverse-auctions__catalog-chips\">\n <span className=\"lockerverse-auctions__catalog-chip\">\n {STATUS_LABELS[getAuctionDisplayStatus(auction)]}\n </span>\n <Timing auction={auction} />\n </div>\n <dl className=\"lockerverse-auctions__catalog-metrics\">\n <Metric\n icon={<ListChecks aria-hidden=\"true\" size={16} />}\n label=\"Items\"\n value={String(auction.items.length)}\n />\n <Metric\n icon={<Gavel aria-hidden=\"true\" size={16} />}\n label=\"Bids\"\n value={String(\n auction.items.reduce((sum, item) => sum + item.bidCount, 0)\n )}\n />\n </dl>\n </div>\n <div className=\"lockerverse-auctions__catalog-body\">\n <h3>{auction.name}</h3>\n <AuctionDescription\n className=\"lockerverse-auctions__catalog-description\"\n description={description}\n />\n <div className=\"lockerverse-auctions__catalog-footer\">\n <span className=\"lockerverse-auctions__catalog-cta\">\n {getAuctionDisplayStatus(auction) === \"draft\"\n ? \"Preview items\"\n : \"View items\"}\n </span>\n <span className=\"lockerverse-auctions__catalog-arrow\">\n <ArrowRight aria-hidden=\"true\" size={16} />\n </span>\n </div>\n </div>\n </article>\n );\n}\n\n/** Optional auction browser. Select an auction to show its items. */\nexport function LockerverseAuctions({\n auctions,\n theme = \"dark\",\n style,\n className,\n showFilters = true,\n showHeader = true,\n showLineup = true,\n getAuctionHref,\n onSelectAuction,\n ...contentProps\n}: LockerverseAuctionsProps) {\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const headingRef = useRef<HTMLHeadingElement>(null);\n const sectionRef = useRef<HTMLElement>(null);\n const previousId = useRef(selectedId);\n const selected = auctions.auctions?.find(\n (auction) => auction.id === selectedId\n );\n useEffect(() => {\n if (previousId.current !== selectedId) {\n if (selectedId === null) {\n const card = [\n ...(sectionRef.current?.querySelectorAll<HTMLButtonElement>(\n \"button[data-auction-id]\"\n ) ?? []),\n ].find((button) => button.dataset.auctionId === previousId.current);\n (headingRef.current ?? card ?? sectionRef.current)?.focus();\n }\n previousId.current = selectedId;\n }\n }, [selectedId]);\n return (\n <section\n aria-busy={auctions.loading}\n aria-label=\"Auctions\"\n className={[\n \"lockerverse-auctions\",\n \"lockerverse-auctions--catalog\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n ref={sectionRef}\n style={style}\n tabIndex={-1}\n >\n {!selected && showHeader ? (\n <header className=\"lockerverse-auctions__catalog-header\">\n <h2 ref={headingRef} tabIndex={-1}>\n Auctions\n </h2>\n </header>\n ) : null}\n {auctions.loading ? (\n <p role=\"status\">\n {auctions.auctions ? \"Refreshing auctions…\" : \"Loading auctions…\"}\n </p>\n ) : null}\n {auctions.error ? (\n <div role=\"alert\">\n <p>{auctions.error.message}</p>\n <button onClick={auctions.refresh} type=\"button\">\n Try again\n </button>\n </div>\n ) : null}\n {selected ? (\n <AuctionContent\n auction={selected}\n key={selected.id}\n onBack={() => setSelectedId(null)}\n {...contentProps}\n showFilters={showFilters}\n showHeader={showHeader}\n showLineup={showLineup}\n theme={theme}\n {...(style ? { style } : {})}\n />\n ) : (\n <AuctionList\n auctions={auctions.auctions}\n onSelectAuction={(auction) => {\n if (onSelectAuction) {\n onSelectAuction(auction);\n } else {\n setSelectedId(auction.id);\n }\n }}\n {...(getAuctionHref ? { getAuctionHref } : {})}\n interceptLinks={Boolean(onSelectAuction)}\n showLineup={showLineup}\n />\n )}\n </section>\n );\n}\n\nfunction AuctionList({\n auctions,\n showLineup,\n onSelectAuction,\n getAuctionHref,\n interceptLinks,\n}: {\n auctions: Auction[] | null;\n showLineup: boolean;\n onSelectAuction: (auction: Auction) => void;\n getAuctionHref?: (auction: Auction) => string;\n interceptLinks: boolean;\n}) {\n if (!auctions) {\n return null;\n }\n if (!auctions.length) {\n return (\n <div className=\"lockerverse-auctions__catalog-empty\">\n <h3>No auctions yet.</h3>\n <p>Published auctions will appear here once they are available.</p>\n </div>\n );\n }\n return (\n <>\n {showLineup ? (\n <div className=\"lockerverse-auctions__catalog-lineup\">\n <div>\n <h3>Auction lineup</h3>\n <p>Browse the current collection.</p>\n </div>\n <span>\n {auctions.length} {auctions.length === 1 ? \"auction\" : \"auctions\"}\n </span>\n </div>\n ) : null}\n <ul className=\"lockerverse-auctions__catalog-grid\">\n {auctions.map((auction) => (\n <li key={auction.id}>\n <AuctionCard\n auction={auction}\n {...(getAuctionHref ? { href: getAuctionHref(auction) } : {})}\n {...(!getAuctionHref || interceptLinks\n ? { onSelect: () => onSelectAuction(auction) }\n : {})}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auctions.js","names":[],"sources":["../src/lockerverse-auctions.tsx"],"sourcesContent":["import type { LockerverseAuction as Auction } from \"@lockerverse/sdk/auctions\";\nimport { ArrowRight, Gavel, ListChecks } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n CatalogImage,\n Metric,\n STATUS_LABELS,\n Timing,\n} from \"./auction-catalog-parts.tsx\";\nimport { AuctionDescription } from \"./auction-description.tsx\";\nimport { getAuctionDisplayStatus } from \"./auction-display.ts\";\nimport {\n AuctionContent,\n type LockerverseAuctionProps,\n} from \"./lockerverse-auction.tsx\";\nimport { useAuctionBoundary } from \"./use-auction-boundary.ts\";\nimport type { UseLockerverseAuctionsResult } from \"./use-lockerverse-auctions.ts\";\n\nexport type LockerverseAuctionsProps = Omit<\n LockerverseAuctionProps,\n \"auction\" | \"onBack\"\n> & {\n auctions: UseLockerverseAuctionsResult;\n getAuctionHref?: (auction: Auction) => string;\n onSelectAuction?: (auction: Auction) => void;\n};\n\nfunction AuctionCard({\n auction,\n onSelect,\n href,\n}: {\n auction: Auction;\n onSelect?: () => void;\n href?: string;\n}) {\n useAuctionBoundary(auction.startAt, auction.endAt, auction.items);\n const fallback =\n auction.configuration.image ||\n auction.items.find((item) => item.image || item.images.length)?.image ||\n auction.items.find((item) => item.images.length)?.images[0] ||\n auction.community?.banner ||\n auction.community?.thumbnail;\n const description =\n auction.description ||\n {\n active: \"Bidding is open on available items.\",\n draft: \"Preview the lineup before bidding opens.\",\n finished: \"Bidding has wrapped. Review the completed items.\",\n }[getAuctionDisplayStatus(auction)];\n return (\n <article className=\"lockerverse-auctions__catalog-card\">\n {href ? (\n <a\n aria-label={`View items in ${auction.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n data-auction-id={auction.id}\n href={href}\n onClick={(event) => {\n if (\n onSelect &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n onSelect();\n }\n }}\n >\n <span className=\"lockerverse-auctions__visually-hidden\">\n View items in {auction.name}\n </span>\n </a>\n ) : (\n <button\n aria-label={`View items in ${auction.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n data-auction-id={auction.id}\n onClick={onSelect}\n type=\"button\"\n />\n )}\n <div className=\"lockerverse-auctions__catalog-media\">\n <CatalogImage fallback={fallback} name={auction.name} />\n <div className=\"lockerverse-auctions__catalog-chips\">\n <span className=\"lockerverse-auctions__catalog-chip\">\n {STATUS_LABELS[getAuctionDisplayStatus(auction)]}\n </span>\n <Timing auction={auction} />\n </div>\n <dl className=\"lockerverse-auctions__catalog-metrics\">\n <Metric\n icon={<ListChecks aria-hidden=\"true\" size={16} />}\n label=\"Items\"\n value={String(auction.items.length)}\n />\n <Metric\n icon={<Gavel aria-hidden=\"true\" size={16} />}\n label=\"Bids\"\n value={String(\n auction.items.reduce((sum, item) => sum + item.bidCount, 0)\n )}\n />\n </dl>\n </div>\n <div className=\"lockerverse-auctions__catalog-body\">\n <h3>{auction.name}</h3>\n <AuctionDescription\n className=\"lockerverse-auctions__catalog-description\"\n description={description}\n />\n <div className=\"lockerverse-auctions__catalog-footer\">\n <span className=\"lockerverse-auctions__catalog-cta\">\n {getAuctionDisplayStatus(auction) === \"draft\"\n ? \"Preview items\"\n : \"View items\"}\n </span>\n <span className=\"lockerverse-auctions__catalog-arrow\">\n <ArrowRight aria-hidden=\"true\" size={16} />\n </span>\n </div>\n </div>\n </article>\n );\n}\n\n/** Optional auction browser. Select an auction to show its items. */\nexport function LockerverseAuctions({\n auctions,\n theme = \"dark\",\n style,\n className,\n showFilters = true,\n showHeader = true,\n showLineup = false,\n getAuctionHref,\n onSelectAuction,\n ...contentProps\n}: LockerverseAuctionsProps) {\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const headingRef = useRef<HTMLHeadingElement>(null);\n const sectionRef = useRef<HTMLElement>(null);\n const previousId = useRef(selectedId);\n const selected = auctions.auctions?.find(\n (auction) => auction.id === selectedId\n );\n useEffect(() => {\n if (previousId.current !== selectedId) {\n if (selectedId === null) {\n const card = [\n ...(sectionRef.current?.querySelectorAll<HTMLButtonElement>(\n \"button[data-auction-id]\"\n ) ?? []),\n ].find((button) => button.dataset.auctionId === previousId.current);\n (headingRef.current ?? card ?? sectionRef.current)?.focus();\n }\n previousId.current = selectedId;\n }\n }, [selectedId]);\n return (\n <section\n aria-busy={auctions.loading}\n aria-label=\"Auctions\"\n className={[\n \"lockerverse-auctions\",\n \"lockerverse-auctions--catalog\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n ref={sectionRef}\n style={style}\n tabIndex={-1}\n >\n {!selected && showHeader ? (\n <header className=\"lockerverse-auctions__catalog-header\">\n <h2 ref={headingRef} tabIndex={-1}>\n Auctions\n </h2>\n </header>\n ) : null}\n {auctions.loading ? (\n <p role=\"status\">\n {auctions.auctions ? \"Refreshing auctions…\" : \"Loading auctions…\"}\n </p>\n ) : null}\n {auctions.error ? (\n <div role=\"alert\">\n <p>{auctions.error.message}</p>\n <button onClick={auctions.refresh} type=\"button\">\n Try again\n </button>\n </div>\n ) : null}\n {selected ? (\n <AuctionContent\n auction={selected}\n key={selected.id}\n onBack={() => setSelectedId(null)}\n {...contentProps}\n showFilters={showFilters}\n showHeader={showHeader}\n showLineup={showLineup}\n theme={theme}\n {...(style ? { style } : {})}\n />\n ) : (\n <AuctionList\n auctions={auctions.auctions}\n onSelectAuction={(auction) => {\n if (onSelectAuction) {\n onSelectAuction(auction);\n } else {\n setSelectedId(auction.id);\n }\n }}\n {...(getAuctionHref ? { getAuctionHref } : {})}\n interceptLinks={Boolean(onSelectAuction)}\n showLineup={showLineup}\n />\n )}\n </section>\n );\n}\n\nfunction AuctionList({\n auctions,\n showLineup,\n onSelectAuction,\n getAuctionHref,\n interceptLinks,\n}: {\n auctions: Auction[] | null;\n showLineup: boolean;\n onSelectAuction: (auction: Auction) => void;\n getAuctionHref?: (auction: Auction) => string;\n interceptLinks: boolean;\n}) {\n if (!auctions) {\n return null;\n }\n if (!auctions.length) {\n return (\n <div className=\"lockerverse-auctions__catalog-empty\">\n <h3>No auctions yet.</h3>\n <p>Published auctions will appear here once they are available.</p>\n </div>\n );\n }\n return (\n <>\n {showLineup ? (\n <div className=\"lockerverse-auctions__catalog-lineup\">\n <div>\n <h3>Auction lineup</h3>\n <p>Browse the current collection.</p>\n </div>\n <span>\n {auctions.length} {auctions.length === 1 ? \"auction\" : \"auctions\"}\n </span>\n </div>\n ) : null}\n <ul className=\"lockerverse-auctions__catalog-grid\">\n {auctions.map((auction) => (\n <li key={auction.id}>\n <AuctionCard\n auction={auction}\n {...(getAuctionHref ? { href: getAuctionHref(auction) } : {})}\n {...(!getAuctionHref || interceptLinks\n ? { onSelect: () => onSelectAuction(auction) }\n : {})}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}\n"],"mappings":"4XA2BA,SAAS,EAAY,CACnB,UACA,WACA,QAKC,CACD,EAAmB,EAAQ,QAAS,EAAQ,MAAO,EAAQ,KAAK,EAChE,IAAM,EACJ,EAAQ,cAAc,OACtB,EAAQ,MAAM,KAAM,GAAS,EAAK,OAAS,EAAK,OAAO,MAAM,CAAC,EAAE,OAChE,EAAQ,MAAM,KAAM,GAAS,EAAK,OAAO,MAAM,CAAC,EAAE,OAAO,IACzD,EAAQ,WAAW,QACnB,EAAQ,WAAW,UACf,EACJ,EAAQ,aACR,CACE,OAAQ,sCACR,MAAO,2CACP,SAAU,kDACZ,EAAE,EAAwB,CAAO,GACnC,OACE,EAAC,UAAD,CAAS,UAAU,qCAAnB,SAAA,CACG,EACC,EAAC,IAAD,CACE,aAAY,iBAAiB,EAAQ,OACrC,UAAU,uCACV,kBAAiB,EAAQ,GACnB,OACN,QAAU,GAAU,CAEhB,GACA,EAAM,SAAW,GACjB,CAAC,EAAM,SACP,CAAC,EAAM,SACP,CAAC,EAAM,UACP,CAAC,EAAM,SAEP,EAAM,eAAe,EACrB,EAAS,EAEb,EAEA,SAAA,EAAC,OAAD,CAAM,UAAU,wCAAhB,SAAA,CAAwD,iBACvC,EAAQ,IACnB,GACL,CAAA,EAEH,EAAC,SAAD,CACE,aAAY,iBAAiB,EAAQ,OACrC,UAAU,uCACV,kBAAiB,EAAQ,GACzB,QAAS,EACT,KAAK,QACN,CAAA,EAEH,EAAC,MAAD,CAAK,UAAU,sCAAf,SAAA,CACE,EAAC,EAAD,CAAwB,WAAU,KAAM,EAAQ,IAAO,CAAA,EACvD,EAAC,MAAD,CAAK,UAAU,sCAAf,SAAA,CACE,EAAC,OAAD,CAAM,UAAU,qCACb,SAAA,EAAc,EAAwB,CAAO,EAC1C,CAAA,EACN,EAAC,EAAD,CAAiB,SAAU,CAAA,CACxB,IACL,EAAC,KAAD,CAAI,UAAU,wCAAd,SAAA,CACE,EAAC,EAAD,CACE,KAAM,EAAC,EAAD,CAAY,cAAY,OAAO,KAAM,EAAK,CAAA,EAChD,MAAM,QACN,MAAO,OAAO,EAAQ,MAAM,MAAM,CACnC,CAAA,EACD,EAAC,EAAD,CACE,KAAM,EAAC,EAAD,CAAO,cAAY,OAAO,KAAM,EAAK,CAAA,EAC3C,MAAM,OACN,MAAO,OACL,EAAQ,MAAM,QAAQ,EAAK,IAAS,EAAM,EAAK,SAAU,CAAC,CAC5D,CACD,CAAA,CACC,GACD,IACL,EAAC,MAAD,CAAK,UAAU,qCAAf,SAAA,CACE,EAAC,KAAD,CAAA,SAAK,EAAQ,IAAS,CAAA,EACtB,EAAC,EAAD,CACE,UAAU,4CACG,aACd,CAAA,EACD,EAAC,MAAD,CAAK,UAAU,uCAAf,SAAA,CACE,EAAC,OAAD,CAAM,UAAU,oCACb,SAAA,EAAwB,CAAO,IAAM,QAClC,gBACA,YACA,CAAA,EACN,EAAC,OAAD,CAAM,UAAU,sCACd,SAAA,EAAC,EAAD,CAAY,cAAY,OAAO,KAAM,EAAK,CAAA,CACtC,CAAA,CACH,GACF,GACE,GAEb,CAGA,SAAgB,EAAoB,CAClC,WACA,QAAQ,OACR,QACA,YACA,cAAc,GACd,aAAa,GACb,aAAa,GACb,iBACA,kBACA,GAAG,GACwB,CAC3B,GAAM,CAAC,EAAY,GAAiB,EAAwB,IAAI,EAC1D,EAAa,EAA2B,IAAI,EAC5C,EAAa,EAAoB,IAAI,EACrC,EAAa,EAAO,CAAU,EAC9B,EAAW,EAAS,UAAU,KACjC,GAAY,EAAQ,KAAO,CAC9B,EAcA,OAbA,MAAgB,CACd,GAAI,EAAW,UAAY,EAAY,CACrC,GAAI,IAAe,KAAM,CACvB,IAAM,EAAO,CACX,GAAI,EAAW,SAAS,iBACtB,yBACF,GAAK,CAAC,CACR,CAAC,CAAC,KAAM,GAAW,EAAO,QAAQ,YAAc,EAAW,OAAO,GACjE,EAAW,SAAW,GAAQ,EAAW,QAAA,EAAU,MAAM,CAC5D,CACA,EAAW,QAAU,CACvB,CACF,EAAG,CAAC,CAAU,CAAC,EAEb,EAAC,UAAD,CACE,YAAW,EAAS,QACpB,aAAW,WACX,UAAW,CACT,uBACA,gCACA,CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG,EACX,yBAAwB,EACxB,IAAK,EACE,QACP,SAAU,GAbZ,SAAA,CAeG,CAAC,GAAY,EACZ,EAAC,SAAD,CAAQ,UAAU,uCAChB,SAAA,EAAC,KAAD,CAAI,IAAK,EAAY,SAAU,GAAI,SAAA,UAE/B,CAAA,CACE,CAAA,EACN,KACH,EAAS,QACR,EAAC,IAAD,CAAG,KAAK,SACL,SAAA,EAAS,SAAW,uBAAyB,mBAC7C,CAAA,EACD,KACH,EAAS,MACR,EAAC,MAAD,CAAK,KAAK,QAAV,SAAA,CACE,EAAC,IAAD,CAAA,SAAI,EAAS,MAAM,OAAW,CAAA,EAC9B,EAAC,SAAD,CAAQ,QAAS,EAAS,QAAS,KAAK,SAAS,SAAA,WAEzC,CAAA,CACL,CACH,CAAA,EAAA,KACH,EACC,EAAC,EAAD,CACE,QAAS,EAET,WAAc,EAAc,IAAI,EAChC,GAAI,EACS,cACD,aACA,aACL,QACP,GAAK,EAAQ,CAAE,OAAM,EAAI,CAAC,CAC3B,EARM,EAAS,EAQf,EAED,EAAC,EAAD,CACE,SAAU,EAAS,SACnB,gBAAkB,GAAY,CACxB,EACF,EAAgB,CAAO,EAEvB,EAAc,EAAQ,EAAE,CAE5B,EACA,GAAK,EAAiB,CAAE,gBAAe,EAAI,CAAC,EAC5C,eAAgB,EAAQ,EACZ,YACb,CAAA,CAEI,GAEb,CAEA,SAAS,EAAY,CACnB,WACA,aACA,kBACA,iBACA,kBAOC,CAYD,OAXK,EAGA,EAAS,OASZ,EAAA,EAAA,CAAA,SAAA,CACG,EACC,EAAC,MAAD,CAAK,UAAU,uCAAf,SAAA,CACE,EAAC,MAAD,CAAA,SAAA,CACE,EAAC,KAAD,CAAA,SAAI,gBAAkB,CAAA,EACtB,EAAC,IAAD,CAAA,SAAG,gCAAiC,CAAA,CACjC,CAAA,CAAA,EACL,EAAC,OAAD,CAAA,SAAA,CACG,EAAS,OAAO,IAAE,EAAS,SAAW,EAAI,UAAY,UACnD,CAAA,CAAA,CACH,CACH,CAAA,EAAA,KACJ,EAAC,KAAD,CAAI,UAAU,qCACX,SAAA,EAAS,IAAK,GACb,EAAC,KAAD,CAAA,SACE,EAAC,EAAD,CACW,UACT,GAAK,EAAiB,CAAE,KAAM,EAAe,CAAO,CAAE,EAAI,CAAC,EAC3D,GAAK,CAAC,GAAkB,EACpB,CAAE,aAAgB,EAAgB,CAAO,CAAE,EAC3C,CAAC,CACN,CAAA,CACC,EARK,EAAQ,EAQb,CACL,CACC,CAAA,CACJ,CAAA,CAAA,EAhCA,EAAC,MAAD,CAAK,UAAU,sCAAf,SAAA,CACE,EAAC,KAAD,CAAA,SAAI,kBAAoB,CAAA,EACxB,EAAC,IAAD,CAAA,SAAG,8DAA+D,CAAA,CAC/D,IAPA,IAsCX"}
|
|
@@ -30,6 +30,7 @@ type LockerverseAuctionProps = {
|
|
|
30
30
|
className?: string;
|
|
31
31
|
showFilters?: boolean;
|
|
32
32
|
showHeader?: boolean;
|
|
33
|
+
/** Show the optional catalog introduction and count. Hidden by default. */
|
|
33
34
|
showLineup?: boolean;
|
|
34
35
|
onBack?: () => void;
|
|
35
36
|
/** Replace the card inside each list item. Keep onSelect connected to your item view. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockerverse-auction-item-card.d.ts","names":[],"sources":["../src/lockerverse-auction.tsx","../src/lockerverse-auction-item-card.tsx"],"mappings":";;;;KAiBY;EACV,SAAS;EACT,MAAM;;EAEN,QAAQ;;EAER;EACA;;EAEA,OAAO;EACP,QAAQ;;KAEE;EACV,SAAS;EACT,gBAAgB,SAAS,oBAAS,MAAM;;EAExC,SAAS;EACT,kBAAkB,QAAQ;;EAE1B,iBAAiB,QAAQ;EACzB,eAAe,SAAS,oBAAS,MAAM;;EAEvC;EACA,QAAQ;EACR,QAAQ;EACR;EACA;EACA;EACA
|
|
1
|
+
{"version":3,"file":"lockerverse-auction-item-card.d.ts","names":[],"sources":["../src/lockerverse-auction.tsx","../src/lockerverse-auction-item-card.tsx"],"mappings":";;;;KAiBY;EACV,SAAS;EACT,MAAM;;EAEN,QAAQ;;EAER;EACA;;EAEA,OAAO;EACP,QAAQ;;KAEE;EACV,SAAS;EACT,gBAAgB,SAAS,oBAAS,MAAM;;EAExC,SAAS;EACT,kBAAkB,QAAQ;;EAE1B,iBAAiB,QAAQ;EACzB,eAAe,SAAS,oBAAS,MAAM;;EAEvC;EACA,QAAQ;EACR,QAAQ;EACR;EACA;EACA;;EAEA;EACA;;EAEA,cAAc,SAAS,wCAAwC;;cAE3D;;;;;;;;;;;;;KAMM,uCAAuC;;iBAGnC,uBACd,SACA,cACA,QAAQ,kBACR,gBACA,eACA,aACA,kBACA,OACA,OACA,WACA,aACA,YACA,YACA,QACA,cACC,0CAAuB,IAAA;;;KCvDd;EACV,SAAS;EACT,MAAM;EACN;EACA;;EAEA;EACA,QAAQ;;EAER;EACA,QAAQ;EACR;EACA;EACA;;iBAoCc,6BACd,SACA,MACA,UACA,MACA,kBACA,OACA,WACA,OACA,iBACA,aACA,cACC,kDAA+B,IAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./use-auction-boundary.js";import{ArrowRight as c,ChevronLeft as l,Clock3 as u,Gavel as d,ShoppingBag as f}from"lucide-react";import{useEffect as p,useMemo as m,useRef as h,useState as g}from"react";import{Fragment as _,jsx as v,jsxs as y}from"react/jsx-runtime";const b={active:`Live now`,draft:`Coming soon`,finished:`Closed`};function x({images:e,autoRotate:t=!1,fallback:n,name:i}){let a=m(()=>{let t=[...new Set(e?.filter(Boolean))];return!t.length&&n&&t.push(n),t},[e,n]),[o,s]=g(0),{ref:c,visible:l}=r(),[u,d]=g(!0),[f,_]=g(!1),y=h(new Set),b=a.length,x=t&&b?o%b:0;return p(()=>{let e=window.matchMedia(`(prefers-reduced-motion: reduce)`),t=()=>d(e.matches);t(),e.addEventListener(`change`,t);let n=c.current?.closest(`article`),r=()=>_(!!n?.matches(`:hover, :focus-within`)),i=e=>_(!!(n?.matches(`:hover`)||e.relatedTarget instanceof Node&&n?.contains(e.relatedTarget)));return r(),n?.addEventListener(`mouseenter`,r),n?.addEventListener(`mouseleave`,r),n?.addEventListener(`focusin`,r),n?.addEventListener(`focusout`,i),()=>{e.removeEventListener(`change`,t),n?.removeEventListener(`mouseenter`,r),n?.removeEventListener(`mouseleave`,r),n?.removeEventListener(`focusin`,r),n?.removeEventListener(`focusout`,i)}},[c]),p(()=>{if(!t||b<2||!l||u||f)return;let e=window.setInterval(()=>{s(e=>y.current.has(a[(e+1)%b]??``)?(e+1)%b:e)},5e3);return()=>window.clearInterval(e)},[t,b,a,l,u,f]),v(`div`,{className:`lockerverse-auctions__catalog-images`,ref:c,children:b?[x,...t&&b>1?[(x+1)%b]:[]].map(e=>v(`img`,{alt:e===x?i:``,"aria-hidden":e!==x,className:`lockerverse-auctions__catalog-photo`,"data-visible":e===x,height:500,loading:`lazy`,onLoad:()=>y.current.add(a[e]??``),src:a[e],width:640},a[e])):null})}function S({icon:e,label:t,value:n}){return y(`div`,{className:`lockerverse-auctions__catalog-metric`,children:[y(`dt`,{children:[e,t]}),v(`dd`,{children:n})]})}function C({auction:t,status:n=e(t),item:r}){let i=``;return n===`draft`&&(i=!r&&Date.parse(t.startAt)<=Date.now()?`Next opens `:`Opens `),n===`active`&&(i=r?`Closes `:`Ends `),y(`span`,{className:`lockerverse-auctions__catalog-timing`,children:[i,a(t,n,r)]})}function w(e,t){if(e.saleMode===`buy_now`){let r=o(e),i=t===`active`?`Buy now`:b[t];return{chip:r?`Sold out`:i,cta:r?`Sold out`:{active:`Buy now`,draft:`Preview item`,finished:`View item`}[t],price:n(e.buyNowPriceAmount??0),priceLabel:`Buy Now`,secondary:e.availableQuantity===null?`Available`:String(e.availableQuantity)}}return{chip:t===`active`?`Live`:b[t],cta:{active:`Bid now`,draft:`Preview item`,finished:`View item`}[t],price:t===`finished`&&!e.maxBidAmount?`No bids`:n(e.maxBidAmount??0),priceLabel:t===`finished`?`Final bid`:`Current`,secondary:n(e.minBidAmount??0)}}function T({auction:n,item:r,onSelect:i,href:a,autoRotateImages:o=!1,theme:l=`dark`,className:p,style:m,showDescription:h=!0,showMetrics:g=!0,showTiming:_=!0}){s(r.startAt??n.startAt,r.endAt??n.endAt);let b=e(n,r),T=r.saleMode===`buy_now`,E=w(r,b);return v(`div`,{className:[`lockerverse-auctions`,`lockerverse-auctions--card`,p].filter(Boolean).join(` `),"data-lockerverse-theme":l,style:m,children:y(`article`,{className:`lockerverse-auctions__catalog-card`,children:[a?v(`a`,{"aria-label":`View ${r.name}`,className:`lockerverse-auctions__catalog-select`,href:a,onClick:e=>{i&&e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&(e.preventDefault(),i())},children:y(`span`,{className:`lockerverse-auctions__visually-hidden`,children:[`View `,r.name]})}):v(`button`,{"aria-label":`View ${r.name}`,className:`lockerverse-auctions__catalog-select`,onClick:i,type:`button`}),y(`div`,{className:`lockerverse-auctions__catalog-media`,children:[v(x,{autoRotate:o,fallback:r.image||n.configuration.image||n.community?.banner||n.community?.thumbnail,images:r.images,name:r.name}),y(`div`,{className:`lockerverse-auctions__catalog-chips`,children:[v(`span`,{className:`lockerverse-auctions__catalog-chip`,"data-live":b===`active`,children:E.chip}),_?v(C,{auction:n,item:r,status:b}):null]}),g?y(`dl`,{className:`lockerverse-auctions__catalog-metrics`,children:[v(S,{icon:v(T?f:d,{"aria-hidden":`true`,size:16}),label:E.priceLabel,value:E.price}),v(S,{icon:v(u,{"aria-hidden":`true`,size:16}),label:T?`Available`:`Floor`,value:E.secondary})]}):null]}),y(`div`,{className:`lockerverse-auctions__catalog-body`,children:[v(`h3`,{children:r.name}),h?v(t,{className:`lockerverse-auctions__catalog-description`,description:r.description||`View auction item details.`}):null,v(`div`,{className:`lockerverse-auctions__catalog-footer lockerverse-auctions__catalog-footer--item`,children:y(`span`,{className:`lockerverse-auctions__catalog-cta`,children:[E.cta,v(c,{"aria-hidden":`true`,size:16})]})})]})]})})}const E=[{label:`All`,value:`all`},{label:`Live`,value:`active`},{label:`Upcoming`,value:`draft`},{label:`Closed`,value:`finished`}];function D({auction:e,onSelectItem:t,filter:n,onFilterChange:r,getFilterHref:i,getItemHref:a,autoRotateImages:o=!1,theme:s=`dark`,style:c,className:l,showFilters:u=!0,showHeader:d=!0,showLineup:f=!
|
|
1
|
+
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./use-auction-boundary.js";import{ArrowRight as c,ChevronLeft as l,Clock3 as u,Gavel as d,ShoppingBag as f}from"lucide-react";import{useEffect as p,useMemo as m,useRef as h,useState as g}from"react";import{Fragment as _,jsx as v,jsxs as y}from"react/jsx-runtime";const b={active:`Live now`,draft:`Coming soon`,finished:`Closed`};function x({images:e,autoRotate:t=!1,fallback:n,name:i}){let a=m(()=>{let t=[...new Set(e?.filter(Boolean))];return!t.length&&n&&t.push(n),t},[e,n]),[o,s]=g(0),{ref:c,visible:l}=r(),[u,d]=g(!0),[f,_]=g(!1),y=h(new Set),b=a.length,x=t&&b?o%b:0;return p(()=>{let e=window.matchMedia(`(prefers-reduced-motion: reduce)`),t=()=>d(e.matches);t(),e.addEventListener(`change`,t);let n=c.current?.closest(`article`),r=()=>_(!!n?.matches(`:hover, :focus-within`)),i=e=>_(!!(n?.matches(`:hover`)||e.relatedTarget instanceof Node&&n?.contains(e.relatedTarget)));return r(),n?.addEventListener(`mouseenter`,r),n?.addEventListener(`mouseleave`,r),n?.addEventListener(`focusin`,r),n?.addEventListener(`focusout`,i),()=>{e.removeEventListener(`change`,t),n?.removeEventListener(`mouseenter`,r),n?.removeEventListener(`mouseleave`,r),n?.removeEventListener(`focusin`,r),n?.removeEventListener(`focusout`,i)}},[c]),p(()=>{if(!t||b<2||!l||u||f)return;let e=window.setInterval(()=>{s(e=>y.current.has(a[(e+1)%b]??``)?(e+1)%b:e)},5e3);return()=>window.clearInterval(e)},[t,b,a,l,u,f]),v(`div`,{className:`lockerverse-auctions__catalog-images`,ref:c,children:b?[x,...t&&b>1?[(x+1)%b]:[]].map(e=>v(`img`,{alt:e===x?i:``,"aria-hidden":e!==x,className:`lockerverse-auctions__catalog-photo`,"data-visible":e===x,height:500,loading:`lazy`,onLoad:()=>y.current.add(a[e]??``),src:a[e],width:640},a[e])):null})}function S({icon:e,label:t,value:n}){return y(`div`,{className:`lockerverse-auctions__catalog-metric`,children:[y(`dt`,{children:[e,t]}),v(`dd`,{children:n})]})}function C({auction:t,status:n=e(t),item:r}){let i=``;return n===`draft`&&(i=!r&&Date.parse(t.startAt)<=Date.now()?`Next opens `:`Opens `),n===`active`&&(i=r?`Closes `:`Ends `),y(`span`,{className:`lockerverse-auctions__catalog-timing`,children:[i,a(t,n,r)]})}function w(e,t){if(e.saleMode===`buy_now`){let r=o(e),i=t===`active`?`Buy now`:b[t];return{chip:r?`Sold out`:i,cta:r?`Sold out`:{active:`Buy now`,draft:`Preview item`,finished:`View item`}[t],price:n(e.buyNowPriceAmount??0),priceLabel:`Buy Now`,secondary:e.availableQuantity===null?`Available`:String(e.availableQuantity)}}return{chip:t===`active`?`Live`:b[t],cta:{active:`Bid now`,draft:`Preview item`,finished:`View item`}[t],price:t===`finished`&&!e.maxBidAmount?`No bids`:n(e.maxBidAmount??0),priceLabel:t===`finished`?`Final bid`:`Current`,secondary:n(e.minBidAmount??0)}}function T({auction:n,item:r,onSelect:i,href:a,autoRotateImages:o=!1,theme:l=`dark`,className:p,style:m,showDescription:h=!0,showMetrics:g=!0,showTiming:_=!0}){s(r.startAt??n.startAt,r.endAt??n.endAt);let b=e(n,r),T=r.saleMode===`buy_now`,E=w(r,b);return v(`div`,{className:[`lockerverse-auctions`,`lockerverse-auctions--card`,p].filter(Boolean).join(` `),"data-lockerverse-theme":l,style:m,children:y(`article`,{className:`lockerverse-auctions__catalog-card`,children:[a?v(`a`,{"aria-label":`View ${r.name}`,className:`lockerverse-auctions__catalog-select`,href:a,onClick:e=>{i&&e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&(e.preventDefault(),i())},children:y(`span`,{className:`lockerverse-auctions__visually-hidden`,children:[`View `,r.name]})}):v(`button`,{"aria-label":`View ${r.name}`,className:`lockerverse-auctions__catalog-select`,onClick:i,type:`button`}),y(`div`,{className:`lockerverse-auctions__catalog-media`,children:[v(x,{autoRotate:o,fallback:r.image||n.configuration.image||n.community?.banner||n.community?.thumbnail,images:r.images,name:r.name}),y(`div`,{className:`lockerverse-auctions__catalog-chips`,children:[v(`span`,{className:`lockerverse-auctions__catalog-chip`,"data-live":b===`active`,children:E.chip}),_?v(C,{auction:n,item:r,status:b}):null]}),g?y(`dl`,{className:`lockerverse-auctions__catalog-metrics`,children:[v(S,{icon:v(T?f:d,{"aria-hidden":`true`,size:16}),label:E.priceLabel,value:E.price}),v(S,{icon:v(u,{"aria-hidden":`true`,size:16}),label:T?`Available`:`Floor`,value:E.secondary})]}):null]}),y(`div`,{className:`lockerverse-auctions__catalog-body`,children:[v(`h3`,{children:r.name}),h?v(t,{className:`lockerverse-auctions__catalog-description`,description:r.description||`View auction item details.`}):null,v(`div`,{className:`lockerverse-auctions__catalog-footer lockerverse-auctions__catalog-footer--item`,children:y(`span`,{className:`lockerverse-auctions__catalog-cta`,children:[E.cta,v(c,{"aria-hidden":`true`,size:16})]})})]})]})})}const E=[{label:`All`,value:`all`},{label:`Live`,value:`active`},{label:`Upcoming`,value:`draft`},{label:`Closed`,value:`finished`}];function D({auction:e,onSelectItem:t,filter:n,onFilterChange:r,getFilterHref:i,getItemHref:a,autoRotateImages:o=!1,theme:s=`dark`,style:c,className:l,showFilters:u=!0,showHeader:d=!0,showLineup:f=!1,onBack:p,renderItem:m}){return v(`section`,{"aria-label":e.name,className:[`lockerverse-auctions`,`lockerverse-auctions--catalog`,l].filter(Boolean).join(` `),"data-lockerverse-theme":s,style:c,children:v(O,{auction:e,...t?{onSelectItem:t}:{},...n?{filter:n}:{},...r?{onFilterChange:r}:{},...i?{getFilterHref:i}:{},...a?{getItemHref:a}:{},autoRotateImages:o,showFilters:u,showHeader:d,showLineup:f,theme:s,...c?{style:c}:{},...p?{onBack:p}:{},...m?{renderItem:m}:{}})})}function O({auction:n,onSelectItem:r,filter:o,onFilterChange:c,getFilterHref:u,getItemHref:d,autoRotateImages:f=!1,theme:m=`dark`,style:b,showFilters:x=!0,showHeader:S=!0,showLineup:C=!1,onBack:w,renderItem:D}){s(n.startAt,n.endAt,n.items);let[O,k]=g({auctionId:n.id,value:`all`}),A=h(null),j=h(null),M=x?o??(O.auctionId===n.id?O.value:`all`):`all`;p(()=>{k({auctionId:n.id,value:`all`})},[n.id,x]);let N=e=>{k({auctionId:n.id,value:e}),c?.(e)},P=i(n),F=!!w;p(()=>{F&&(A.current??j.current)?.focus()},[n.id,F,S]);let I=b?Object.fromEntries(Object.entries(b).filter(([e])=>e.startsWith(`--lockerverse-`))):void 0,L=[...n.items].sort((e,t)=>e.position-t.position||e.createdAt.localeCompare(t.createdAt)),R=L.filter(t=>M===`all`||e(n,t)===M);return y(_,{children:[w?y(`button`,{className:`lockerverse-auctions__catalog-back`,onClick:w,ref:j,type:`button`,children:[v(l,{"aria-hidden":`true`,size:16}),`Auctions`]}):null,S?y(`header`,{className:`lockerverse-auctions__catalog-header`,children:[v(`h2`,{ref:A,tabIndex:-1,children:n.name}),n.status!==`finished`&&P?y(`p`,{className:`lockerverse-auctions__catalog-next`,children:[`Next opens `,a(n,`draft`,P)]}):null,n.description?v(t,{description:n.description}):null]}):null,C?y(`div`,{className:`lockerverse-auctions__catalog-lineup`,children:[y(`div`,{children:[v(`h3`,{children:`Auction lineup`}),v(`p`,{children:`Browse the current collection.`})]}),y(`span`,{children:[R.length,` `,R.length===1?`item`:`items`]})]}):null,x?v(`fieldset`,{"aria-label":`Filter auction items`,className:`lockerverse-auctions__catalog-filters`,children:E.map(t=>{let r=u?.(t.value),i=y(_,{children:[t.label,v(`span`,{children:t.value===`all`?L.length:L.filter(r=>e(n,r)===t.value).length})]});return r?v(`a`,{"aria-current":M===t.value?`page`:void 0,href:r,onClick:e=>{c&&e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&(e.preventDefault(),N(t.value))},children:i},t.value):v(`button`,{"aria-pressed":M===t.value,onClick:()=>N(t.value),type:`button`,children:i},t.value)})}):null,R.length?v(`ul`,{className:`lockerverse-auctions__catalog-grid`,children:R.map(t=>{let i={auction:n,item:t,onSelect:()=>r?.(n,t),status:e(n,t),theme:m};d&&(i.href=d(n,t)),I&&(i.style=I);let{onSelect:a,...o}=i;return v(`li`,{children:D?D(i):v(T,{...o,...r?{onSelect:a}:{},autoRotateImages:f})},t.id)})}):v(`p`,{className:`lockerverse-auctions__catalog-empty`,children:`No items match this auction view.`})]})}export{S as a,x as i,D as n,b as o,T as r,C as s,O as t};
|
|
2
2
|
//# sourceMappingURL=lockerverse-auction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockerverse-auction.js","names":["formatMoney"],"sources":["../src/auction-catalog-parts.tsx","../src/lockerverse-auction-item-card.tsx","../src/lockerverse-auction.tsx"],"sourcesContent":["import type {\n LockerverseAuction as Auction,\n LockerverseAuctionItem,\n LockerverseAuctionStatus,\n} from \"@lockerverse/sdk/auctions\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n formatAuctionBoundary,\n getAuctionDisplayStatus,\n} from \"./auction-display.ts\";\nimport { useAuctionVisibility } from \"./use-auction-visibility.ts\";\nexport const STATUS_LABELS = {\n active: \"Live now\",\n draft: \"Coming soon\",\n finished: \"Closed\",\n} satisfies Record<LockerverseAuctionStatus, string>;\nexport function CatalogImage({\n images,\n autoRotate = false,\n fallback,\n name,\n}: {\n images?: string[];\n autoRotate?: boolean;\n fallback?: string | null | undefined;\n name: string;\n}) {\n const photos = useMemo(() => {\n const unique = [...new Set(images?.filter(Boolean))];\n if (!unique.length && fallback) {\n unique.push(fallback);\n }\n return unique;\n }, [images, fallback]);\n const [index, setIndex] = useState(0);\n const { ref: imageRef, visible } = useAuctionVisibility<HTMLDivElement>();\n const [reducedMotion, setReducedMotion] = useState(true);\n const [interacting, setInteracting] = useState(false);\n const loaded = useRef(new Set<string>());\n const count = photos.length;\n const current = autoRotate && count ? index % count : 0;\n useEffect(() => {\n const motion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const updateMotion = () => setReducedMotion(motion.matches);\n updateMotion();\n motion.addEventListener(\"change\", updateMotion);\n const card = imageRef.current?.closest(\"article\");\n const updateInteraction = () =>\n setInteracting(Boolean(card?.matches(\":hover, :focus-within\")));\n const leaveFocus = (event: FocusEvent) =>\n setInteracting(\n Boolean(\n card?.matches(\":hover\") ||\n (event.relatedTarget instanceof Node &&\n card?.contains(event.relatedTarget))\n )\n );\n updateInteraction();\n card?.addEventListener(\"mouseenter\", updateInteraction);\n card?.addEventListener(\"mouseleave\", updateInteraction);\n card?.addEventListener(\"focusin\", updateInteraction);\n card?.addEventListener(\"focusout\", leaveFocus);\n return () => {\n motion.removeEventListener(\"change\", updateMotion);\n card?.removeEventListener(\"mouseenter\", updateInteraction);\n card?.removeEventListener(\"mouseleave\", updateInteraction);\n card?.removeEventListener(\"focusin\", updateInteraction);\n card?.removeEventListener(\"focusout\", leaveFocus);\n };\n }, [imageRef]);\n useEffect(() => {\n if (!autoRotate || count < 2 || !visible || reducedMotion || interacting) {\n return;\n }\n const timer = window.setInterval(() => {\n setIndex((previous) =>\n loaded.current.has(photos[(previous + 1) % count] ?? \"\")\n ? (previous + 1) % count\n : previous\n );\n }, 5000);\n return () => window.clearInterval(timer);\n }, [autoRotate, count, photos, visible, reducedMotion, interacting]);\n return (\n <div className=\"lockerverse-auctions__catalog-images\" ref={imageRef}>\n {count\n ? [\n current,\n ...(autoRotate && count > 1 ? [(current + 1) % count] : []),\n ].map((photo) => (\n <img\n alt={photo === current ? name : \"\"}\n aria-hidden={photo !== current}\n className=\"lockerverse-auctions__catalog-photo\"\n data-visible={photo === current}\n height={500}\n key={photos[photo]}\n loading=\"lazy\"\n onLoad={() => loaded.current.add(photos[photo] ?? \"\")}\n src={photos[photo]}\n width={640}\n />\n ))\n : null}\n </div>\n );\n}\nexport function Metric({\n icon,\n label,\n value,\n}: {\n icon: ReactNode;\n label: string;\n value: string;\n}) {\n return (\n <div className=\"lockerverse-auctions__catalog-metric\">\n <dt>\n {icon}\n {label}\n </dt>\n <dd>{value}</dd>\n </div>\n );\n}\nexport function Timing({\n auction,\n status = getAuctionDisplayStatus(auction),\n item,\n}: {\n auction: Auction;\n status?: LockerverseAuctionStatus;\n item?: LockerverseAuctionItem;\n}) {\n let label = \"\";\n if (status === \"draft\") {\n label =\n !item && Date.parse(auction.startAt) <= Date.now()\n ? \"Next opens \"\n : \"Opens \";\n }\n if (status === \"active\") {\n label = item ? \"Closes \" : \"Ends \";\n }\n return (\n <span className=\"lockerverse-auctions__catalog-timing\">\n {label}\n {formatAuctionBoundary(auction, status, item)}\n </span>\n );\n}\n","import type {\n LockerverseAuction as Auction,\n LockerverseAuctionItem as AuctionItem,\n LockerverseAuctionStatus,\n} from \"@lockerverse/sdk/auctions\";\nimport { ArrowRight, Clock3, Gavel, ShoppingBag } from \"lucide-react\";\nimport {\n CatalogImage,\n Metric,\n STATUS_LABELS,\n Timing,\n} from \"./auction-catalog-parts.tsx\";\nimport { AuctionDescription } from \"./auction-description.tsx\";\nimport {\n formatAuctionMoney as formatMoney,\n getAuctionDisplayStatus,\n isAuctionItemSoldOut,\n} from \"./auction-display.ts\";\nimport type { LockerverseStyle, LockerverseTheme } from \"./theme.ts\";\nimport { useAuctionBoundary } from \"./use-auction-boundary.ts\";\n\nexport type LockerverseAuctionItemCardProps = {\n auction: Auction;\n item: AuctionItem;\n onSelect?: () => void;\n href?: string;\n /** Rotate photos every five seconds. Static by default. */\n autoRotateImages?: boolean;\n theme?: LockerverseTheme;\n /** Applied to the scoped card container. */\n className?: string;\n style?: LockerverseStyle;\n showDescription?: boolean;\n showMetrics?: boolean;\n showTiming?: boolean;\n};\nfunction itemCardDisplay(item: AuctionItem, status: LockerverseAuctionStatus) {\n if (item.saleMode === \"buy_now\") {\n const soldOut = isAuctionItemSoldOut(item);\n const availabilityLabel =\n status === \"active\" ? \"Buy now\" : STATUS_LABELS[status];\n const label = soldOut ? \"Sold out\" : availabilityLabel;\n return {\n chip: label,\n cta: soldOut\n ? \"Sold out\"\n : { active: \"Buy now\", draft: \"Preview item\", finished: \"View item\" }[\n status\n ],\n price: formatMoney(item.buyNowPriceAmount ?? 0),\n priceLabel: \"Buy Now\",\n secondary:\n item.availableQuantity === null\n ? \"Available\"\n : String(item.availableQuantity),\n };\n }\n return {\n chip: status === \"active\" ? \"Live\" : STATUS_LABELS[status],\n cta: { active: \"Bid now\", draft: \"Preview item\", finished: \"View item\" }[\n status\n ],\n price:\n status === \"finished\" && !item.maxBidAmount\n ? \"No bids\"\n : formatMoney(item.maxBidAmount ?? 0),\n priceLabel: status === \"finished\" ? \"Final bid\" : \"Current\",\n secondary: formatMoney(item.minBidAmount ?? 0),\n };\n}\nexport function LockerverseAuctionItemCard({\n auction,\n item,\n onSelect,\n href,\n autoRotateImages = false,\n theme = \"dark\",\n className,\n style,\n showDescription = true,\n showMetrics = true,\n showTiming = true,\n}: LockerverseAuctionItemCardProps) {\n useAuctionBoundary(\n item.startAt ?? auction.startAt,\n item.endAt ?? auction.endAt\n );\n const status = getAuctionDisplayStatus(auction, item);\n const buyNow = item.saleMode === \"buy_now\";\n const display = itemCardDisplay(item, status);\n return (\n <div\n className={[\n \"lockerverse-auctions\",\n \"lockerverse-auctions--card\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={style}\n >\n <article className=\"lockerverse-auctions__catalog-card\">\n {href ? (\n <a\n aria-label={`View ${item.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n href={href}\n onClick={(event) => {\n if (\n onSelect &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n onSelect();\n }\n }}\n >\n <span className=\"lockerverse-auctions__visually-hidden\">\n View {item.name}\n </span>\n </a>\n ) : (\n <button\n aria-label={`View ${item.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n onClick={onSelect}\n type=\"button\"\n />\n )}\n <div className=\"lockerverse-auctions__catalog-media\">\n <CatalogImage\n autoRotate={autoRotateImages}\n fallback={\n item.image ||\n auction.configuration.image ||\n auction.community?.banner ||\n auction.community?.thumbnail\n }\n images={item.images}\n name={item.name}\n />\n <div className=\"lockerverse-auctions__catalog-chips\">\n <span\n className=\"lockerverse-auctions__catalog-chip\"\n data-live={status === \"active\"}\n >\n {display.chip}\n </span>\n {showTiming ? (\n <Timing auction={auction} item={item} status={status} />\n ) : null}\n </div>\n {showMetrics ? (\n <dl className=\"lockerverse-auctions__catalog-metrics\">\n <Metric\n icon={\n buyNow ? (\n <ShoppingBag aria-hidden=\"true\" size={16} />\n ) : (\n <Gavel aria-hidden=\"true\" size={16} />\n )\n }\n label={display.priceLabel}\n value={display.price}\n />\n <Metric\n icon={<Clock3 aria-hidden=\"true\" size={16} />}\n label={buyNow ? \"Available\" : \"Floor\"}\n value={display.secondary}\n />\n </dl>\n ) : null}\n </div>\n <div className=\"lockerverse-auctions__catalog-body\">\n <h3>{item.name}</h3>\n {showDescription ? (\n <AuctionDescription\n className=\"lockerverse-auctions__catalog-description\"\n description={item.description || \"View auction item details.\"}\n />\n ) : null}\n <div className=\"lockerverse-auctions__catalog-footer lockerverse-auctions__catalog-footer--item\">\n <span className=\"lockerverse-auctions__catalog-cta\">\n {display.cta}\n <ArrowRight aria-hidden=\"true\" size={16} />\n </span>\n </div>\n </div>\n </article>\n </div>\n );\n}\n","import type {\n LockerverseAuction as Auction,\n LockerverseAuctionItem as AuctionItem,\n LockerverseAuctionStatus,\n} from \"@lockerverse/sdk/auctions\";\nimport { ChevronLeft } from \"lucide-react\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { AuctionDescription } from \"./auction-description.tsx\";\nimport {\n formatAuctionBoundary,\n getAuctionDisplayStatus,\n getNextAuctionItem,\n} from \"./auction-display.ts\";\nimport { LockerverseAuctionItemCard } from \"./lockerverse-auction-item-card.tsx\";\nimport type { LockerverseStyle, LockerverseTheme } from \"./theme.ts\";\nimport { useAuctionBoundary } from \"./use-auction-boundary.ts\";\n\nexport type LockerverseAuctionItemRenderContext = {\n auction: Auction;\n item: AuctionItem;\n /** Effective auction and item status, including elapsed closing dates. */\n status: LockerverseAuctionStatus;\n /** Calls the host selection callback when one is supplied. Use href for native navigation. */\n onSelect: () => void;\n href?: string;\n /** Parent theme and Lockerverse CSS custom properties for default-card reuse. */\n theme: LockerverseTheme;\n style?: LockerverseStyle;\n};\nexport type LockerverseAuctionProps = {\n auction: Auction;\n onSelectItem?: (auction: Auction, item: AuctionItem) => void;\n /** Controlled item status filter. Omit to use the internal filter state. */\n filter?: LockerverseAuctionItemFilter;\n onFilterChange?: (filter: LockerverseAuctionItemFilter) => void;\n /** Native links preserve opening filters and items in another tab. */\n getFilterHref?: (filter: LockerverseAuctionItemFilter) => string;\n getItemHref?: (auction: Auction, item: AuctionItem) => string;\n /** Rotate catalog photos. Static images are the default. */\n autoRotateImages?: boolean;\n theme?: LockerverseTheme;\n style?: LockerverseStyle;\n className?: string;\n showFilters?: boolean;\n showHeader?: boolean;\n showLineup?: boolean;\n onBack?: () => void;\n /** Replace the card inside each list item. Keep onSelect connected to your item view. */\n renderItem?: (context: LockerverseAuctionItemRenderContext) => ReactNode;\n};\nconst FILTERS = [\n { label: \"All\", value: \"all\" },\n { label: \"Live\", value: \"active\" },\n { label: \"Upcoming\", value: \"draft\" },\n { label: \"Closed\", value: \"finished\" },\n] as const;\nexport type LockerverseAuctionItemFilter = (typeof FILTERS)[number][\"value\"];\n\n/** Display one loaded auction. Fetching and item navigation stay with the host. */\nexport function LockerverseAuction({\n auction,\n onSelectItem,\n filter: controlledFilter,\n onFilterChange,\n getFilterHref,\n getItemHref,\n autoRotateImages = false,\n theme = \"dark\",\n style,\n className,\n showFilters = true,\n showHeader = true,\n showLineup = true,\n onBack,\n renderItem,\n}: LockerverseAuctionProps) {\n return (\n <section\n aria-label={auction.name}\n className={[\n \"lockerverse-auctions\",\n \"lockerverse-auctions--catalog\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={style}\n >\n <AuctionContent\n auction={auction}\n {...(onSelectItem ? { onSelectItem } : {})}\n {...(controlledFilter ? { filter: controlledFilter } : {})}\n {...(onFilterChange ? { onFilterChange } : {})}\n {...(getFilterHref ? { getFilterHref } : {})}\n {...(getItemHref ? { getItemHref } : {})}\n autoRotateImages={autoRotateImages}\n showFilters={showFilters}\n showHeader={showHeader}\n showLineup={showLineup}\n theme={theme}\n {...(style ? { style } : {})}\n {...(onBack ? { onBack } : {})}\n {...(renderItem ? { renderItem } : {})}\n />\n </section>\n );\n}\n\n/** Shared content without a second themed container when used in the browser. */\nexport function AuctionContent({\n auction,\n onSelectItem,\n filter: controlledFilter,\n onFilterChange,\n getFilterHref,\n getItemHref,\n autoRotateImages = false,\n theme = \"dark\",\n style,\n showFilters = true,\n showHeader = true,\n showLineup = true,\n onBack,\n renderItem,\n}: LockerverseAuctionProps) {\n useAuctionBoundary(auction.startAt, auction.endAt, auction.items);\n const [filterState, setFilterState] = useState<{\n auctionId: string;\n value: LockerverseAuctionItemFilter;\n }>({ auctionId: auction.id, value: \"all\" });\n const headingRef = useRef<HTMLHeadingElement>(null);\n const backRef = useRef<HTMLButtonElement>(null);\n const filter = showFilters\n ? (controlledFilter ??\n (filterState.auctionId === auction.id ? filterState.value : \"all\"))\n : \"all\";\n useEffect(() => {\n setFilterState({ auctionId: auction.id, value: \"all\" });\n }, [auction.id, showFilters]);\n const changeFilter = (value: LockerverseAuctionItemFilter) => {\n setFilterState({ auctionId: auction.id, value });\n onFilterChange?.(value);\n };\n const nextItem = getNextAuctionItem(auction);\n const focusHeading = Boolean(onBack);\n useEffect(() => {\n if (focusHeading) {\n (headingRef.current ?? backRef.current)?.focus();\n }\n }, [auction.id, focusHeading, showHeader]);\n const cardStyle = style\n ? Object.fromEntries(\n Object.entries(style).filter(([key]) =>\n key.startsWith(\"--lockerverse-\")\n )\n )\n : undefined;\n const items = [...auction.items].sort(\n (left, right) =>\n left.position - right.position ||\n left.createdAt.localeCompare(right.createdAt)\n );\n const filtered = items.filter(\n (item) =>\n filter === \"all\" || getAuctionDisplayStatus(auction, item) === filter\n );\n return (\n <>\n {onBack ? (\n <button\n className=\"lockerverse-auctions__catalog-back\"\n onClick={onBack}\n ref={backRef}\n type=\"button\"\n >\n <ChevronLeft aria-hidden=\"true\" size={16} />\n Auctions\n </button>\n ) : null}\n {showHeader ? (\n <header className=\"lockerverse-auctions__catalog-header\">\n <h2 ref={headingRef} tabIndex={-1}>\n {auction.name}\n </h2>\n <p className=\"lockerverse-auctions__catalog-period\">\n {formatAuctionBoundary({ ...auction, items: [] }, \"draft\")} —{\" \"}\n {formatAuctionBoundary(auction, \"active\")}\n </p>\n {auction.status !== \"finished\" && nextItem ? (\n <p className=\"lockerverse-auctions__catalog-next\">\n Next opens {formatAuctionBoundary(auction, \"draft\", nextItem)}\n </p>\n ) : null}\n {auction.description ? (\n <AuctionDescription description={auction.description} />\n ) : null}\n </header>\n ) : null}\n {showLineup ? (\n <div className=\"lockerverse-auctions__catalog-lineup\">\n <div>\n <h3>Auction lineup</h3>\n <p>Browse the current collection.</p>\n </div>\n <span>\n {filtered.length} {filtered.length === 1 ? \"item\" : \"items\"}\n </span>\n </div>\n ) : null}\n {showFilters ? (\n <fieldset\n aria-label=\"Filter auction items\"\n className=\"lockerverse-auctions__catalog-filters\"\n >\n {FILTERS.map((option) => {\n const href = getFilterHref?.(option.value);\n const label = (\n <>\n {option.label}\n <span>\n {option.value === \"all\"\n ? items.length\n : items.filter(\n (item) =>\n getAuctionDisplayStatus(auction, item) ===\n option.value\n ).length}\n </span>\n </>\n );\n return href ? (\n <a\n aria-current={filter === option.value ? \"page\" : undefined}\n href={href}\n key={option.value}\n onClick={(event) => {\n if (\n onFilterChange &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n changeFilter(option.value);\n }\n }}\n >\n {label}\n </a>\n ) : (\n <button\n aria-pressed={filter === option.value}\n key={option.value}\n onClick={() => changeFilter(option.value)}\n type=\"button\"\n >\n {label}\n </button>\n );\n })}\n </fieldset>\n ) : null}\n {filtered.length ? (\n <ul className=\"lockerverse-auctions__catalog-grid\">\n {filtered.map((item) => {\n const context: LockerverseAuctionItemRenderContext = {\n auction,\n item,\n onSelect: () => onSelectItem?.(auction, item),\n status: getAuctionDisplayStatus(auction, item),\n theme,\n };\n if (getItemHref) {\n context.href = getItemHref(auction, item);\n }\n if (cardStyle) {\n context.style = cardStyle;\n }\n const { onSelect, ...cardContext } = context;\n return (\n <li key={item.id}>\n {renderItem ? (\n renderItem(context)\n ) : (\n <LockerverseAuctionItemCard\n {...cardContext}\n {...(onSelectItem ? { onSelect } : {})}\n autoRotateImages={autoRotateImages}\n />\n )}\n </li>\n );\n })}\n </ul>\n ) : (\n <p className=\"lockerverse-auctions__catalog-empty\">\n No items match this auction view.\n </p>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lockerverse-auction.js","names":["formatMoney"],"sources":["../src/auction-catalog-parts.tsx","../src/lockerverse-auction-item-card.tsx","../src/lockerverse-auction.tsx"],"sourcesContent":["import type {\n LockerverseAuction as Auction,\n LockerverseAuctionItem,\n LockerverseAuctionStatus,\n} from \"@lockerverse/sdk/auctions\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n formatAuctionBoundary,\n getAuctionDisplayStatus,\n} from \"./auction-display.ts\";\nimport { useAuctionVisibility } from \"./use-auction-visibility.ts\";\nexport const STATUS_LABELS = {\n active: \"Live now\",\n draft: \"Coming soon\",\n finished: \"Closed\",\n} satisfies Record<LockerverseAuctionStatus, string>;\nexport function CatalogImage({\n images,\n autoRotate = false,\n fallback,\n name,\n}: {\n images?: string[];\n autoRotate?: boolean;\n fallback?: string | null | undefined;\n name: string;\n}) {\n const photos = useMemo(() => {\n const unique = [...new Set(images?.filter(Boolean))];\n if (!unique.length && fallback) {\n unique.push(fallback);\n }\n return unique;\n }, [images, fallback]);\n const [index, setIndex] = useState(0);\n const { ref: imageRef, visible } = useAuctionVisibility<HTMLDivElement>();\n const [reducedMotion, setReducedMotion] = useState(true);\n const [interacting, setInteracting] = useState(false);\n const loaded = useRef(new Set<string>());\n const count = photos.length;\n const current = autoRotate && count ? index % count : 0;\n useEffect(() => {\n const motion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const updateMotion = () => setReducedMotion(motion.matches);\n updateMotion();\n motion.addEventListener(\"change\", updateMotion);\n const card = imageRef.current?.closest(\"article\");\n const updateInteraction = () =>\n setInteracting(Boolean(card?.matches(\":hover, :focus-within\")));\n const leaveFocus = (event: FocusEvent) =>\n setInteracting(\n Boolean(\n card?.matches(\":hover\") ||\n (event.relatedTarget instanceof Node &&\n card?.contains(event.relatedTarget))\n )\n );\n updateInteraction();\n card?.addEventListener(\"mouseenter\", updateInteraction);\n card?.addEventListener(\"mouseleave\", updateInteraction);\n card?.addEventListener(\"focusin\", updateInteraction);\n card?.addEventListener(\"focusout\", leaveFocus);\n return () => {\n motion.removeEventListener(\"change\", updateMotion);\n card?.removeEventListener(\"mouseenter\", updateInteraction);\n card?.removeEventListener(\"mouseleave\", updateInteraction);\n card?.removeEventListener(\"focusin\", updateInteraction);\n card?.removeEventListener(\"focusout\", leaveFocus);\n };\n }, [imageRef]);\n useEffect(() => {\n if (!autoRotate || count < 2 || !visible || reducedMotion || interacting) {\n return;\n }\n const timer = window.setInterval(() => {\n setIndex((previous) =>\n loaded.current.has(photos[(previous + 1) % count] ?? \"\")\n ? (previous + 1) % count\n : previous\n );\n }, 5000);\n return () => window.clearInterval(timer);\n }, [autoRotate, count, photos, visible, reducedMotion, interacting]);\n return (\n <div className=\"lockerverse-auctions__catalog-images\" ref={imageRef}>\n {count\n ? [\n current,\n ...(autoRotate && count > 1 ? [(current + 1) % count] : []),\n ].map((photo) => (\n <img\n alt={photo === current ? name : \"\"}\n aria-hidden={photo !== current}\n className=\"lockerverse-auctions__catalog-photo\"\n data-visible={photo === current}\n height={500}\n key={photos[photo]}\n loading=\"lazy\"\n onLoad={() => loaded.current.add(photos[photo] ?? \"\")}\n src={photos[photo]}\n width={640}\n />\n ))\n : null}\n </div>\n );\n}\nexport function Metric({\n icon,\n label,\n value,\n}: {\n icon: ReactNode;\n label: string;\n value: string;\n}) {\n return (\n <div className=\"lockerverse-auctions__catalog-metric\">\n <dt>\n {icon}\n {label}\n </dt>\n <dd>{value}</dd>\n </div>\n );\n}\nexport function Timing({\n auction,\n status = getAuctionDisplayStatus(auction),\n item,\n}: {\n auction: Auction;\n status?: LockerverseAuctionStatus;\n item?: LockerverseAuctionItem;\n}) {\n let label = \"\";\n if (status === \"draft\") {\n label =\n !item && Date.parse(auction.startAt) <= Date.now()\n ? \"Next opens \"\n : \"Opens \";\n }\n if (status === \"active\") {\n label = item ? \"Closes \" : \"Ends \";\n }\n return (\n <span className=\"lockerverse-auctions__catalog-timing\">\n {label}\n {formatAuctionBoundary(auction, status, item)}\n </span>\n );\n}\n","import type {\n LockerverseAuction as Auction,\n LockerverseAuctionItem as AuctionItem,\n LockerverseAuctionStatus,\n} from \"@lockerverse/sdk/auctions\";\nimport { ArrowRight, Clock3, Gavel, ShoppingBag } from \"lucide-react\";\nimport {\n CatalogImage,\n Metric,\n STATUS_LABELS,\n Timing,\n} from \"./auction-catalog-parts.tsx\";\nimport { AuctionDescription } from \"./auction-description.tsx\";\nimport {\n formatAuctionMoney as formatMoney,\n getAuctionDisplayStatus,\n isAuctionItemSoldOut,\n} from \"./auction-display.ts\";\nimport type { LockerverseStyle, LockerverseTheme } from \"./theme.ts\";\nimport { useAuctionBoundary } from \"./use-auction-boundary.ts\";\n\nexport type LockerverseAuctionItemCardProps = {\n auction: Auction;\n item: AuctionItem;\n onSelect?: () => void;\n href?: string;\n /** Rotate photos every five seconds. Static by default. */\n autoRotateImages?: boolean;\n theme?: LockerverseTheme;\n /** Applied to the scoped card container. */\n className?: string;\n style?: LockerverseStyle;\n showDescription?: boolean;\n showMetrics?: boolean;\n showTiming?: boolean;\n};\nfunction itemCardDisplay(item: AuctionItem, status: LockerverseAuctionStatus) {\n if (item.saleMode === \"buy_now\") {\n const soldOut = isAuctionItemSoldOut(item);\n const availabilityLabel =\n status === \"active\" ? \"Buy now\" : STATUS_LABELS[status];\n const label = soldOut ? \"Sold out\" : availabilityLabel;\n return {\n chip: label,\n cta: soldOut\n ? \"Sold out\"\n : { active: \"Buy now\", draft: \"Preview item\", finished: \"View item\" }[\n status\n ],\n price: formatMoney(item.buyNowPriceAmount ?? 0),\n priceLabel: \"Buy Now\",\n secondary:\n item.availableQuantity === null\n ? \"Available\"\n : String(item.availableQuantity),\n };\n }\n return {\n chip: status === \"active\" ? \"Live\" : STATUS_LABELS[status],\n cta: { active: \"Bid now\", draft: \"Preview item\", finished: \"View item\" }[\n status\n ],\n price:\n status === \"finished\" && !item.maxBidAmount\n ? \"No bids\"\n : formatMoney(item.maxBidAmount ?? 0),\n priceLabel: status === \"finished\" ? \"Final bid\" : \"Current\",\n secondary: formatMoney(item.minBidAmount ?? 0),\n };\n}\nexport function LockerverseAuctionItemCard({\n auction,\n item,\n onSelect,\n href,\n autoRotateImages = false,\n theme = \"dark\",\n className,\n style,\n showDescription = true,\n showMetrics = true,\n showTiming = true,\n}: LockerverseAuctionItemCardProps) {\n useAuctionBoundary(\n item.startAt ?? auction.startAt,\n item.endAt ?? auction.endAt\n );\n const status = getAuctionDisplayStatus(auction, item);\n const buyNow = item.saleMode === \"buy_now\";\n const display = itemCardDisplay(item, status);\n return (\n <div\n className={[\n \"lockerverse-auctions\",\n \"lockerverse-auctions--card\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={style}\n >\n <article className=\"lockerverse-auctions__catalog-card\">\n {href ? (\n <a\n aria-label={`View ${item.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n href={href}\n onClick={(event) => {\n if (\n onSelect &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n onSelect();\n }\n }}\n >\n <span className=\"lockerverse-auctions__visually-hidden\">\n View {item.name}\n </span>\n </a>\n ) : (\n <button\n aria-label={`View ${item.name}`}\n className=\"lockerverse-auctions__catalog-select\"\n onClick={onSelect}\n type=\"button\"\n />\n )}\n <div className=\"lockerverse-auctions__catalog-media\">\n <CatalogImage\n autoRotate={autoRotateImages}\n fallback={\n item.image ||\n auction.configuration.image ||\n auction.community?.banner ||\n auction.community?.thumbnail\n }\n images={item.images}\n name={item.name}\n />\n <div className=\"lockerverse-auctions__catalog-chips\">\n <span\n className=\"lockerverse-auctions__catalog-chip\"\n data-live={status === \"active\"}\n >\n {display.chip}\n </span>\n {showTiming ? (\n <Timing auction={auction} item={item} status={status} />\n ) : null}\n </div>\n {showMetrics ? (\n <dl className=\"lockerverse-auctions__catalog-metrics\">\n <Metric\n icon={\n buyNow ? (\n <ShoppingBag aria-hidden=\"true\" size={16} />\n ) : (\n <Gavel aria-hidden=\"true\" size={16} />\n )\n }\n label={display.priceLabel}\n value={display.price}\n />\n <Metric\n icon={<Clock3 aria-hidden=\"true\" size={16} />}\n label={buyNow ? \"Available\" : \"Floor\"}\n value={display.secondary}\n />\n </dl>\n ) : null}\n </div>\n <div className=\"lockerverse-auctions__catalog-body\">\n <h3>{item.name}</h3>\n {showDescription ? (\n <AuctionDescription\n className=\"lockerverse-auctions__catalog-description\"\n description={item.description || \"View auction item details.\"}\n />\n ) : null}\n <div className=\"lockerverse-auctions__catalog-footer lockerverse-auctions__catalog-footer--item\">\n <span className=\"lockerverse-auctions__catalog-cta\">\n {display.cta}\n <ArrowRight aria-hidden=\"true\" size={16} />\n </span>\n </div>\n </div>\n </article>\n </div>\n );\n}\n","import type {\n LockerverseAuction as Auction,\n LockerverseAuctionItem as AuctionItem,\n LockerverseAuctionStatus,\n} from \"@lockerverse/sdk/auctions\";\nimport { ChevronLeft } from \"lucide-react\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { AuctionDescription } from \"./auction-description.tsx\";\nimport {\n formatAuctionBoundary,\n getAuctionDisplayStatus,\n getNextAuctionItem,\n} from \"./auction-display.ts\";\nimport { LockerverseAuctionItemCard } from \"./lockerverse-auction-item-card.tsx\";\nimport type { LockerverseStyle, LockerverseTheme } from \"./theme.ts\";\nimport { useAuctionBoundary } from \"./use-auction-boundary.ts\";\n\nexport type LockerverseAuctionItemRenderContext = {\n auction: Auction;\n item: AuctionItem;\n /** Effective auction and item status, including elapsed closing dates. */\n status: LockerverseAuctionStatus;\n /** Calls the host selection callback when one is supplied. Use href for native navigation. */\n onSelect: () => void;\n href?: string;\n /** Parent theme and Lockerverse CSS custom properties for default-card reuse. */\n theme: LockerverseTheme;\n style?: LockerverseStyle;\n};\nexport type LockerverseAuctionProps = {\n auction: Auction;\n onSelectItem?: (auction: Auction, item: AuctionItem) => void;\n /** Controlled item status filter. Omit to use the internal filter state. */\n filter?: LockerverseAuctionItemFilter;\n onFilterChange?: (filter: LockerverseAuctionItemFilter) => void;\n /** Native links preserve opening filters and items in another tab. */\n getFilterHref?: (filter: LockerverseAuctionItemFilter) => string;\n getItemHref?: (auction: Auction, item: AuctionItem) => string;\n /** Rotate catalog photos. Static images are the default. */\n autoRotateImages?: boolean;\n theme?: LockerverseTheme;\n style?: LockerverseStyle;\n className?: string;\n showFilters?: boolean;\n showHeader?: boolean;\n /** Show the optional catalog introduction and count. Hidden by default. */\n showLineup?: boolean;\n onBack?: () => void;\n /** Replace the card inside each list item. Keep onSelect connected to your item view. */\n renderItem?: (context: LockerverseAuctionItemRenderContext) => ReactNode;\n};\nconst FILTERS = [\n { label: \"All\", value: \"all\" },\n { label: \"Live\", value: \"active\" },\n { label: \"Upcoming\", value: \"draft\" },\n { label: \"Closed\", value: \"finished\" },\n] as const;\nexport type LockerverseAuctionItemFilter = (typeof FILTERS)[number][\"value\"];\n\n/** Display one loaded auction. Fetching and item navigation stay with the host. */\nexport function LockerverseAuction({\n auction,\n onSelectItem,\n filter: controlledFilter,\n onFilterChange,\n getFilterHref,\n getItemHref,\n autoRotateImages = false,\n theme = \"dark\",\n style,\n className,\n showFilters = true,\n showHeader = true,\n showLineup = false,\n onBack,\n renderItem,\n}: LockerverseAuctionProps) {\n return (\n <section\n aria-label={auction.name}\n className={[\n \"lockerverse-auctions\",\n \"lockerverse-auctions--catalog\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n data-lockerverse-theme={theme}\n style={style}\n >\n <AuctionContent\n auction={auction}\n {...(onSelectItem ? { onSelectItem } : {})}\n {...(controlledFilter ? { filter: controlledFilter } : {})}\n {...(onFilterChange ? { onFilterChange } : {})}\n {...(getFilterHref ? { getFilterHref } : {})}\n {...(getItemHref ? { getItemHref } : {})}\n autoRotateImages={autoRotateImages}\n showFilters={showFilters}\n showHeader={showHeader}\n showLineup={showLineup}\n theme={theme}\n {...(style ? { style } : {})}\n {...(onBack ? { onBack } : {})}\n {...(renderItem ? { renderItem } : {})}\n />\n </section>\n );\n}\n\n/** Shared content without a second themed container when used in the browser. */\nexport function AuctionContent({\n auction,\n onSelectItem,\n filter: controlledFilter,\n onFilterChange,\n getFilterHref,\n getItemHref,\n autoRotateImages = false,\n theme = \"dark\",\n style,\n showFilters = true,\n showHeader = true,\n showLineup = false,\n onBack,\n renderItem,\n}: LockerverseAuctionProps) {\n useAuctionBoundary(auction.startAt, auction.endAt, auction.items);\n const [filterState, setFilterState] = useState<{\n auctionId: string;\n value: LockerverseAuctionItemFilter;\n }>({ auctionId: auction.id, value: \"all\" });\n const headingRef = useRef<HTMLHeadingElement>(null);\n const backRef = useRef<HTMLButtonElement>(null);\n const filter = showFilters\n ? (controlledFilter ??\n (filterState.auctionId === auction.id ? filterState.value : \"all\"))\n : \"all\";\n useEffect(() => {\n setFilterState({ auctionId: auction.id, value: \"all\" });\n }, [auction.id, showFilters]);\n const changeFilter = (value: LockerverseAuctionItemFilter) => {\n setFilterState({ auctionId: auction.id, value });\n onFilterChange?.(value);\n };\n const nextItem = getNextAuctionItem(auction);\n const focusHeading = Boolean(onBack);\n useEffect(() => {\n if (focusHeading) {\n (headingRef.current ?? backRef.current)?.focus();\n }\n }, [auction.id, focusHeading, showHeader]);\n const cardStyle = style\n ? Object.fromEntries(\n Object.entries(style).filter(([key]) =>\n key.startsWith(\"--lockerverse-\")\n )\n )\n : undefined;\n const items = [...auction.items].sort(\n (left, right) =>\n left.position - right.position ||\n left.createdAt.localeCompare(right.createdAt)\n );\n const filtered = items.filter(\n (item) =>\n filter === \"all\" || getAuctionDisplayStatus(auction, item) === filter\n );\n return (\n <>\n {onBack ? (\n <button\n className=\"lockerverse-auctions__catalog-back\"\n onClick={onBack}\n ref={backRef}\n type=\"button\"\n >\n <ChevronLeft aria-hidden=\"true\" size={16} />\n Auctions\n </button>\n ) : null}\n {showHeader ? (\n <header className=\"lockerverse-auctions__catalog-header\">\n <h2 ref={headingRef} tabIndex={-1}>\n {auction.name}\n </h2>\n {auction.status !== \"finished\" && nextItem ? (\n <p className=\"lockerverse-auctions__catalog-next\">\n Next opens {formatAuctionBoundary(auction, \"draft\", nextItem)}\n </p>\n ) : null}\n {auction.description ? (\n <AuctionDescription description={auction.description} />\n ) : null}\n </header>\n ) : null}\n {showLineup ? (\n <div className=\"lockerverse-auctions__catalog-lineup\">\n <div>\n <h3>Auction lineup</h3>\n <p>Browse the current collection.</p>\n </div>\n <span>\n {filtered.length} {filtered.length === 1 ? \"item\" : \"items\"}\n </span>\n </div>\n ) : null}\n {showFilters ? (\n <fieldset\n aria-label=\"Filter auction items\"\n className=\"lockerverse-auctions__catalog-filters\"\n >\n {FILTERS.map((option) => {\n const href = getFilterHref?.(option.value);\n const label = (\n <>\n {option.label}\n <span>\n {option.value === \"all\"\n ? items.length\n : items.filter(\n (item) =>\n getAuctionDisplayStatus(auction, item) ===\n option.value\n ).length}\n </span>\n </>\n );\n return href ? (\n <a\n aria-current={filter === option.value ? \"page\" : undefined}\n href={href}\n key={option.value}\n onClick={(event) => {\n if (\n onFilterChange &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n ) {\n event.preventDefault();\n changeFilter(option.value);\n }\n }}\n >\n {label}\n </a>\n ) : (\n <button\n aria-pressed={filter === option.value}\n key={option.value}\n onClick={() => changeFilter(option.value)}\n type=\"button\"\n >\n {label}\n </button>\n );\n })}\n </fieldset>\n ) : null}\n {filtered.length ? (\n <ul className=\"lockerverse-auctions__catalog-grid\">\n {filtered.map((item) => {\n const context: LockerverseAuctionItemRenderContext = {\n auction,\n item,\n onSelect: () => onSelectItem?.(auction, item),\n status: getAuctionDisplayStatus(auction, item),\n theme,\n };\n if (getItemHref) {\n context.href = getItemHref(auction, item);\n }\n if (cardStyle) {\n context.style = cardStyle;\n }\n const { onSelect, ...cardContext } = context;\n return (\n <li key={item.id}>\n {renderItem ? (\n renderItem(context)\n ) : (\n <LockerverseAuctionItemCard\n {...cardContext}\n {...(onSelectItem ? { onSelect } : {})}\n autoRotateImages={autoRotateImages}\n />\n )}\n </li>\n );\n })}\n </ul>\n ) : (\n <p className=\"lockerverse-auctions__catalog-empty\">\n No items match this auction view.\n </p>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lockerverse/react",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.130-dev.1",
|
|
4
4
|
"description": "Tree-shakable React payment and signup UI for Lockerverse",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
"embla-carousel-react": "8.6.0",
|
|
128
128
|
"lucide-react": "0.536.0",
|
|
129
129
|
"valibot": "1.4.2",
|
|
130
|
-
"@lockerverse/sdk": "0.2.
|
|
130
|
+
"@lockerverse/sdk": "0.2.130-dev.1"
|
|
131
131
|
},
|
|
132
132
|
"devDependencies": {
|
|
133
133
|
"@size-limit/file": "13.0.3",
|