@pradip1995/segment-shop-banner 0.2.0

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/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@pradip1995/segment-shop-banner",
3
+ "version": "0.2.0",
4
+ "license": "MIT",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "sideEffects": [
9
+ "src/segment.css"
10
+ ],
11
+ "files": [
12
+ "src"
13
+ ],
14
+ "exports": {
15
+ ".": "./src/index.ts",
16
+ "./manifest": "./src/manifest.ts"
17
+ },
18
+ "peerDependencies": {
19
+ "@pradip1995/commerce-core": "^4.0.0",
20
+ "@pradip1995/plugin-sdk": "^0.2.0",
21
+ "react": ">=19",
22
+ "react-dom": ">=19",
23
+ "next": ">=15"
24
+ },
25
+ "dependencies": {
26
+ "@pradip1995/segment-primitives": "0.3.0",
27
+ "@pradip1995/segment-tokens": "0.3.2"
28
+ },
29
+ "devDependencies": {
30
+ "@pradip1995/plugin-sdk": "^0.2.0",
31
+ "@types/react": "^19",
32
+ "react": "19.0.3",
33
+ "typescript": "^5.7.2"
34
+ },
35
+ "scripts": {
36
+ "typecheck": "tsc --noEmit",
37
+ "lint": "tsc --noEmit"
38
+ }
39
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default } from "./segment"
2
+ export { default as manifest } from "./manifest"
@@ -0,0 +1,11 @@
1
+ import type { SegmentManifest } from "@pradip1995/plugin-sdk"
2
+
3
+ const manifest: SegmentManifest = {
4
+ id: "shop-banner",
5
+ type: "segment",
6
+ version: "0.1.0",
7
+ compatibleFramework: ["^1.0.0"],
8
+ dataKey: "store",
9
+ }
10
+
11
+ export default manifest
@@ -0,0 +1,37 @@
1
+ .shop-banner {
2
+ width: 100%;
3
+ }
4
+
5
+ .shop-banner__frame {
6
+ position: relative;
7
+ width: 100%;
8
+ min-height: 24rem;
9
+ border-radius: 0 0 5rem 5rem;
10
+ overflow: hidden;
11
+ }
12
+
13
+ .shop-banner__overlay {
14
+ position: absolute;
15
+ inset: 0;
16
+ background: rgba(0, 0, 0, 0.3);
17
+ }
18
+
19
+ .shop-banner__cta-wrap {
20
+ position: absolute;
21
+ inset: 0;
22
+ display: flex;
23
+ align-items: center;
24
+ justify-content: center;
25
+ z-index: 1;
26
+ }
27
+
28
+ .shop-banner__cta {
29
+ border: 3px solid var(--color-brand-accent-muted);
30
+ background: var(--color-surface);
31
+ color: var(--color-text-heading);
32
+ font-weight: 600;
33
+ text-transform: uppercase;
34
+ letter-spacing: 0.06em;
35
+ padding: 0.75rem 1.5rem;
36
+ border-radius: 1.25rem;
37
+ }
@@ -0,0 +1,47 @@
1
+ "use client"
2
+
3
+ import "./segment.css"
4
+ import Image from "next/image"
5
+ import { getThemeDefaultAssets } from "@pradip1995/commerce-core/util/theme-default-assets"
6
+
7
+ export default function ShopBanner({
8
+ imageUrl,
9
+ ctaText = "Shop all products",
10
+ scrollTargetId = "shop-by-nav",
11
+ }: {
12
+ imageUrl?: string | null
13
+ ctaText?: string
14
+ scrollTargetId?: string
15
+ }) {
16
+ const fallback = getThemeDefaultAssets().heroDesktop
17
+ const src = imageUrl?.trim() || fallback
18
+
19
+ const handleCtaClick = () => {
20
+ const element = document.getElementById(scrollTargetId)
21
+ if (element) {
22
+ element.scrollIntoView({ behavior: "smooth" })
23
+ }
24
+ }
25
+
26
+ return (
27
+ <section className="shop-banner" aria-label="Shop banner">
28
+ <div className="shop-banner__frame">
29
+ <Image
30
+ src={src}
31
+ alt=""
32
+ fill
33
+ className="shop-banner__image object-cover"
34
+ sizes="100vw"
35
+ priority
36
+ unoptimized
37
+ />
38
+ <div className="shop-banner__overlay" aria-hidden />
39
+ <div className="shop-banner__cta-wrap">
40
+ <button type="button" onClick={handleCtaClick} className="shop-banner__cta">
41
+ {ctaText}
42
+ </button>
43
+ </div>
44
+ </div>
45
+ </section>
46
+ )
47
+ }