@vendure-platform/create 0.2.1-nightly.202605191555 → 0.2.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/CHANGELOG.md +15 -0
- package/dist/assets/storefront/next.config.ts +1 -19
- package/dist/assets/storefront/package.json +1 -3
- package/dist/assets/storefront/src/components/commerce/packaging-unit-selector.tsx +6 -1
- package/dist/assets/storefront/src/components/commerce/product-info.tsx +4 -4
- package/dist/assets/storefront/src/graphql-env.d.ts +25 -22
- package/dist/assets/storefront/src/lib/vendure/queries.ts +6 -0
- package/dist/assets/storefront/src/schema.graphql +204 -111
- package/dist/assets/templates/README.md.hbs +5 -0
- package/dist/assets/templates/environment.d.ts.hbs +3 -0
- package/dist/assets/templates/populate.ts.hbs +1 -14
- package/dist/assets/templates/server-package.json.hbs +6 -6
- package/dist/assets/templates/vendure-config.ts.hbs +9 -3
- package/dist/scaffolder.js +1 -1
- package/dist/scaffolder.js.map +1 -1
- package/dist/storefront-copier.js +4 -1
- package/dist/storefront-copier.js.map +1 -1
- package/dist/template-renderer.d.ts +32 -1
- package/dist/template-renderer.js +39 -4
- package/dist/template-renderer.js.map +1 -1
- package/package.json +2 -2
- package/dist/assets/demo-data/assets/branding/logo.svg +0 -4
- package/dist/assets/demo-data/assets/images/absorbent-pad.webp +0 -0
- package/dist/assets/demo-data/assets/images/adjustable-wrench.webp +0 -0
- package/dist/assets/demo-data/assets/images/anchor-bolt.webp +0 -0
- package/dist/assets/demo-data/assets/images/angle-grinder.webp +0 -0
- package/dist/assets/demo-data/assets/images/barrier-tape.webp +0 -0
- package/dist/assets/demo-data/assets/images/bench-grinder.webp +0 -0
- package/dist/assets/demo-data/assets/images/bracket.webp +0 -0
- package/dist/assets/demo-data/assets/images/broom.webp +0 -0
- package/dist/assets/demo-data/assets/images/bucket.webp +0 -0
- package/dist/assets/demo-data/assets/images/cable-gland.webp +0 -0
- package/dist/assets/demo-data/assets/images/cable-tie.webp +0 -0
- package/dist/assets/demo-data/assets/images/cable-tray.webp +0 -0
- package/dist/assets/demo-data/assets/images/cable.webp +0 -0
- package/dist/assets/demo-data/assets/images/chimney-base-kit.webp +0 -0
- package/dist/assets/demo-data/assets/images/chimney-cowl-bird-guard.webp +0 -0
- package/dist/assets/demo-data/assets/images/chimney-cowl-open.webp +0 -0
- package/dist/assets/demo-data/assets/images/chimney-storm-collar.webp +0 -0
- package/dist/assets/demo-data/assets/images/chimney-wall-bracket.webp +0 -0
- package/dist/assets/demo-data/assets/images/circular-saw.webp +0 -0
- package/dist/assets/demo-data/assets/images/cleaning-spray.webp +0 -0
- package/dist/assets/demo-data/assets/images/conduit.webp +0 -0
- package/dist/assets/demo-data/assets/images/cordless-drill.webp +0 -0
- package/dist/assets/demo-data/assets/images/drill-bits.webp +0 -0
- package/dist/assets/demo-data/assets/images/dust-mask.webp +0 -0
- package/dist/assets/demo-data/assets/images/ear-defenders.webp +0 -0
- package/dist/assets/demo-data/assets/images/ear-plugs.webp +0 -0
- package/dist/assets/demo-data/assets/images/extension-lead.webp +0 -0
- package/dist/assets/demo-data/assets/images/eye-wash-station.webp +0 -0
- package/dist/assets/demo-data/assets/images/face-shield.webp +0 -0
- package/dist/assets/demo-data/assets/images/file-set.webp +0 -0
- package/dist/assets/demo-data/assets/images/first-aid-kit.webp +0 -0
- package/dist/assets/demo-data/assets/images/floor-sign.webp +0 -0
- package/dist/assets/demo-data/assets/images/flue-bend-45.webp +0 -0
- package/dist/assets/demo-data/assets/images/flue-bend-90.webp +0 -0
- package/dist/assets/demo-data/assets/images/flue-section-1000mm.webp +0 -0
- package/dist/assets/demo-data/assets/images/flue-section-250mm.webp +0 -0
- package/dist/assets/demo-data/assets/images/flue-section-500mm.webp +0 -0
- package/dist/assets/demo-data/assets/images/fuse.webp +0 -0
- package/dist/assets/demo-data/assets/images/glove-dispenser.webp +0 -0
- package/dist/assets/demo-data/assets/images/grinding-disc.webp +0 -0
- package/dist/assets/demo-data/assets/images/hacksaw.webp +0 -0
- package/dist/assets/demo-data/assets/images/hammer.webp +0 -0
- package/dist/assets/demo-data/assets/images/hand-sanitiser.webp +0 -0
- package/dist/assets/demo-data/assets/images/head-torch.webp +0 -0
- package/dist/assets/demo-data/assets/images/heat-gun.webp +0 -0
- package/dist/assets/demo-data/assets/images/hex-bolt.webp +0 -0
- package/dist/assets/demo-data/assets/images/hex-key-set.webp +0 -0
- package/dist/assets/demo-data/assets/images/hex-nut.webp +0 -0
- package/dist/assets/demo-data/assets/images/hi-vis-jacket.webp +0 -0
- package/dist/assets/demo-data/assets/images/hi-vis-vest.webp +0 -0
- package/dist/assets/demo-data/assets/images/hose-clamp.webp +0 -0
- package/dist/assets/demo-data/assets/images/impact-driver.webp +0 -0
- package/dist/assets/demo-data/assets/images/jigsaw.webp +0 -0
- package/dist/assets/demo-data/assets/images/junction-box.webp +0 -0
- package/dist/assets/demo-data/assets/images/knee-pads.webp +0 -0
- package/dist/assets/demo-data/assets/images/machine-screw.webp +0 -0
- package/dist/assets/demo-data/assets/images/made-to-order-configurable-chimney.webp +0 -0
- package/dist/assets/demo-data/assets/images/mallet.webp +0 -0
- package/dist/assets/demo-data/assets/images/mcb.webp +0 -0
- package/dist/assets/demo-data/assets/images/mop.webp +0 -0
- package/dist/assets/demo-data/assets/images/paper-towels.webp +0 -0
- package/dist/assets/demo-data/assets/images/pipe-wrench.webp +0 -0
- package/dist/assets/demo-data/assets/images/pliers-set.webp +0 -0
- package/dist/assets/demo-data/assets/images/pry-bar.webp +0 -0
- package/dist/assets/demo-data/assets/images/rcd.webp +0 -0
- package/dist/assets/demo-data/assets/images/reciprocating-saw.webp +0 -0
- package/dist/assets/demo-data/assets/images/rivet.webp +0 -0
- package/dist/assets/demo-data/assets/images/roof-flashing-high-pitch.webp +0 -0
- package/dist/assets/demo-data/assets/images/roof-flashing-low-pitch.webp +0 -0
- package/dist/assets/demo-data/assets/images/safety-boots.webp +0 -0
- package/dist/assets/demo-data/assets/images/safety-glasses.webp +0 -0
- package/dist/assets/demo-data/assets/images/safety-harness.webp +0 -0
- package/dist/assets/demo-data/assets/images/safety-helmet.webp +0 -0
- package/dist/assets/demo-data/assets/images/safety-sign.webp +0 -0
- package/dist/assets/demo-data/assets/images/sanding-disc.webp +0 -0
- package/dist/assets/demo-data/assets/images/saw-blade.webp +0 -0
- package/dist/assets/demo-data/assets/images/screwdriver-set.webp +0 -0
- package/dist/assets/demo-data/assets/images/screwdriver.webp +0 -0
- package/dist/assets/demo-data/assets/images/self-tapping-screw.webp +0 -0
- package/dist/assets/demo-data/assets/images/socket-set.webp +0 -0
- package/dist/assets/demo-data/assets/images/socket.webp +0 -0
- package/dist/assets/demo-data/assets/images/spanner-set.webp +0 -0
- package/dist/assets/demo-data/assets/images/spanner.webp +0 -0
- package/dist/assets/demo-data/assets/images/spill-kit.webp +0 -0
- package/dist/assets/demo-data/assets/images/spirit-level.webp +0 -0
- package/dist/assets/demo-data/assets/images/switch.webp +0 -0
- package/dist/assets/demo-data/assets/images/tape-measure.webp +0 -0
- package/dist/assets/demo-data/assets/images/terminal-block.webp +0 -0
- package/dist/assets/demo-data/assets/images/threaded-rod.webp +0 -0
- package/dist/assets/demo-data/assets/images/torque-wrench.webp +0 -0
- package/dist/assets/demo-data/assets/images/utility-knife.webp +0 -0
- package/dist/assets/demo-data/assets/images/wall-pass-sleeve.webp +0 -0
- package/dist/assets/demo-data/assets/images/wall-plug.webp +0 -0
- package/dist/assets/demo-data/assets/images/washer.webp +0 -0
- package/dist/assets/demo-data/assets/images/waste-bin.webp +0 -0
- package/dist/assets/demo-data/assets/images/wire-connector.webp +0 -0
- package/dist/assets/demo-data/assets/images/wire-cutters.webp +0 -0
- package/dist/assets/demo-data/assets/images/wood-screw.webp +0 -0
- package/dist/assets/demo-data/assets/images/work-gloves.webp +0 -0
- package/dist/assets/demo-data/assets/images/work-light.webp +0 -0
- package/dist/assets/demo-data/assets/initial-data.json +0 -667
- package/dist/assets/demo-data/assets/products.csv +0 -779
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## 0.2.1 (2026-05-20)
|
|
2
|
+
|
|
3
|
+
_Initial release._
|
|
4
|
+
|
|
5
|
+
### 🚀 Features
|
|
6
|
+
|
|
7
|
+
- deliver standalone storefront to EE customers (EE-104) ([#290](https://github.com/vendurehq/vendure-platform/pull/290))
|
|
8
|
+
|
|
9
|
+
### 🩹 Fixes
|
|
10
|
+
|
|
11
|
+
- scaffolder cleanup pass after Nigel review ([#314](https://github.com/vendurehq/vendure-platform/pull/314))
|
|
12
|
+
- pin typeorm to ^0.3.27 in scaffolded server template ([#313](https://github.com/vendurehq/vendure-platform/pull/313))
|
|
13
|
+
- land all issues found during end-to-end create-flow testing (EE-153) ([#304](https://github.com/vendurehq/vendure-platform/pull/304))
|
|
14
|
+
- wire up private registry scope mapping + actionable 401 hint (EE-151) ([#300](https://github.com/vendurehq/vendure-platform/pull/300))
|
|
15
|
+
- target ^3.6.2 stable for @vendure packages in scaffolder template ([#243](https://github.com/vendurehq/vendure-platform/pull/243))
|
|
@@ -5,16 +5,6 @@ import createNextIntlPlugin from 'next-intl/plugin';
|
|
|
5
5
|
const vendurePort = process.env.VENDURE_PORT ?? '3500';
|
|
6
6
|
const storefrontPort = process.env.STOREFRONT_PORT ?? '3001';
|
|
7
7
|
|
|
8
|
-
const activeScenario = process.env.NEXT_PUBLIC_SCENARIO ?? 'default';
|
|
9
|
-
|
|
10
|
-
// Build-time CSS swap: `@/styles/globals` resolves to the active scenario's
|
|
11
|
-
// globals.css. Today only the `vendure-branded` scenario has its own (which
|
|
12
|
-
// imports `@vendure-io/design-tokens`); every other scenario falls back to
|
|
13
|
-
// the shared storefront globals.css.
|
|
14
|
-
const scenarioGlobalsCss = activeScenario === 'vendure-branded'
|
|
15
|
-
? path.resolve(__dirname, 'src/scenarios/vendure-branded/globals.css')
|
|
16
|
-
: path.resolve(__dirname, 'src/app/[locale]/globals.css');
|
|
17
|
-
|
|
18
8
|
const withNextIntl = createNextIntlPlugin('./src/i18n/request.ts');
|
|
19
9
|
|
|
20
10
|
const nextConfig: NextConfig = {
|
|
@@ -50,15 +40,7 @@ const nextConfig: NextConfig = {
|
|
|
50
40
|
NEXT_PUBLIC_SITE_URL: process.env.NEXT_PUBLIC_SITE_URL ?? `http://localhost:${storefrontPort}`,
|
|
51
41
|
...(process.env.VENDURE_CHANNEL_TOKEN ? { VENDURE_CHANNEL_TOKEN: process.env.VENDURE_CHANNEL_TOKEN } : {}),
|
|
52
42
|
REVALIDATION_SECRET: process.env.REVALIDATION_SECRET,
|
|
53
|
-
NEXT_PUBLIC_SCENARIO: process.env.NEXT_PUBLIC_SCENARIO ?? '
|
|
54
|
-
},
|
|
55
|
-
webpack: (config) => {
|
|
56
|
-
config.resolve = config.resolve ?? {};
|
|
57
|
-
config.resolve.alias = {
|
|
58
|
-
...(config.resolve.alias ?? {}),
|
|
59
|
-
'@/styles/globals.css': scenarioGlobalsCss,
|
|
60
|
-
};
|
|
61
|
-
return config;
|
|
43
|
+
NEXT_PUBLIC_SCENARIO: process.env.NEXT_PUBLIC_SCENARIO ?? 'customer',
|
|
62
44
|
},
|
|
63
45
|
images: {
|
|
64
46
|
// This is necessary to display images from your local Vendure instance
|
|
@@ -37,8 +37,7 @@
|
|
|
37
37
|
"@radix-ui/react-toggle": "^1.1.10",
|
|
38
38
|
"@radix-ui/react-toggle-group": "^1.1.11",
|
|
39
39
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
40
|
-
"@vendure-
|
|
41
|
-
"@vendure-platform/storefront-client": "^0.2.1-nightly.202605191555",
|
|
40
|
+
"@vendure-platform/storefront-client": "^0.2.1",
|
|
42
41
|
"class-variance-authority": "^0.7.1",
|
|
43
42
|
"clsx": "^2.1.1",
|
|
44
43
|
"cmdk": "^1.1.1",
|
|
@@ -67,7 +66,6 @@
|
|
|
67
66
|
"@types/node": "^20.19.25",
|
|
68
67
|
"@types/react": "^19.2.7",
|
|
69
68
|
"@types/react-dom": "^19.2.3",
|
|
70
|
-
"baseline-browser-mapping": "^2.9.14",
|
|
71
69
|
"eslint": "^9.39.1",
|
|
72
70
|
"eslint-config-next": "16.0.0",
|
|
73
71
|
"tailwindcss": "^4.1.17",
|
|
@@ -59,7 +59,12 @@ export function PackagingUnitSelector({
|
|
|
59
59
|
|
|
60
60
|
// Effective pieces at minQuantity: e.g. 1 box × 50 = 50 pieces
|
|
61
61
|
const effectivePieces = pu.minQuantity * pu.conversionFactor;
|
|
62
|
-
|
|
62
|
+
// Prefer the packaging-unit's own tier ladder so any
|
|
63
|
+
// packaging-unit-gated discounts are reflected on the card.
|
|
64
|
+
const puTiers = pu.priceTiers
|
|
65
|
+
? [...pu.priceTiers].filter(t => t.minQuantity != null).sort((a, b) => a.minQuantity! - b.minQuantity!)
|
|
66
|
+
: sortedTiers;
|
|
67
|
+
const perPiecePrice = getTierAdjustedPiecePrice(baseVariantPrice, puTiers, effectivePieces);
|
|
63
68
|
const displayPrice = Math.round(perPiecePrice * pu.conversionFactor);
|
|
64
69
|
|
|
65
70
|
const stockLevel = pu.effectiveStockLevel;
|
|
@@ -217,8 +217,8 @@ export function ProductInfo({ product, searchParams, shoppingLists, currencyCode
|
|
|
217
217
|
if (!selectedVariant) return null;
|
|
218
218
|
const factor = selectedPackagingUnit?.conversionFactor ?? 1;
|
|
219
219
|
const effectiveQuantity = quantity * factor;
|
|
220
|
+
const tiers = selectedPackagingUnit?.priceTiers ?? selectedVariant.priceTiers;
|
|
220
221
|
let perPiecePrice = selectedVariant.price;
|
|
221
|
-
const tiers = selectedVariant.priceTiers;
|
|
222
222
|
if (tiers) {
|
|
223
223
|
const sorted = [...tiers].filter(t => t.minQuantity != null).sort((a, b) => a.minQuantity! - b.minQuantity!);
|
|
224
224
|
for (const tier of sorted) {
|
|
@@ -506,11 +506,11 @@ export function ProductInfo({ product, searchParams, shoppingLists, currencyCode
|
|
|
506
506
|
</div>
|
|
507
507
|
|
|
508
508
|
{/* Volume Pricing — reference material, post-action */}
|
|
509
|
-
{selectedVariant?.priceTiers && (
|
|
509
|
+
{(selectedPackagingUnit?.priceTiers ?? selectedVariant?.priceTiers) && (
|
|
510
510
|
<div className="mt-6">
|
|
511
511
|
<PriceTiers
|
|
512
|
-
tiers={selectedVariant
|
|
513
|
-
basePrice={selectedVariant
|
|
512
|
+
tiers={(selectedPackagingUnit?.priceTiers ?? selectedVariant?.priceTiers) as PriceTier[]}
|
|
513
|
+
basePrice={selectedVariant?.price ?? 0}
|
|
514
514
|
quantity={quantity}
|
|
515
515
|
onTierClick={(minQty) => setQuantityInput(String(minQty))}
|
|
516
516
|
conversionFactor={selectedPackagingUnit?.conversionFactor}
|