@fynd-design-engineering/fynd-bloom 0.0.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/README.md ADDED
@@ -0,0 +1,183 @@
1
+ # Your Project
2
+
3
+ > **Note:** This README is a starting point.
4
+ > Update it with your project-specific details, file explanations, and logic descriptions to make it more informative and maintainable.
5
+
6
+ This project was generated using [**CDN-Starter**](https://www.npmjs.com/package/create-cdn-starter) — a modern template for building and deploying TypeScript/JavaScript code to Webflow or any CDN environment.
7
+ You can now customize it with your own scripts, utilities, and design logic.
8
+
9
+ ---
10
+
11
+ ## Getting Started
12
+
13
+ ### 1. Install Dependencies
14
+
15
+ Run the following command inside your project folder:
16
+
17
+ ```bash
18
+ pnpm install
19
+ ```
20
+
21
+ This will install all required development and build dependencies.
22
+
23
+ ---
24
+
25
+ ### 2. Update `package.json`
26
+
27
+ After installation, open the `package.json` file and fill in your own details:
28
+
29
+ ```json
30
+ {
31
+ "name": "your-project-name",
32
+ "version": "0.0.0",
33
+ "description": "brief description of your project",
34
+ "homepage": "your-project-homepage",
35
+ "license": "MIT",
36
+ "keywords": [],
37
+ "author": {
38
+ "name": "your-name",
39
+ "url": "your-website-or-profile"
40
+ }
41
+ }
42
+ ```
43
+
44
+ Only update the above fields.
45
+ Other configurations are pre-optimized for TypeScript builds, linting, and npm releases.
46
+
47
+ ---
48
+
49
+ ### 3. Edit Source Files
50
+
51
+ All editable files are inside the `src/` folder.
52
+ This is where you add your scripts, components, utilities, and styles.
53
+
54
+ Example workflow:
55
+
56
+ - Modify `src/index.ts` or create new folders like `src/home/` or `src/utils/`.
57
+ - Whenever you add a new file, include it in `bin/build.js` under `ENTRY_POINTS`.
58
+
59
+ ```js
60
+ const ENTRY_POINTS = [
61
+ "src/index.ts",
62
+ "src/styles/global.css",
63
+ "src/home/index.ts"
64
+ ];
65
+ ```
66
+
67
+ Any file listed here will be automatically compiled into the `dist/` folder when you build.
68
+
69
+ ---
70
+
71
+ ## Available Commands
72
+
73
+ ### Development
74
+
75
+ Start a local development environment:
76
+
77
+ ```bash
78
+ pnpm dev
79
+ ```
80
+
81
+ This command compiles your code in real time and serves it at:
82
+ [http://localhost:3000](http://localhost:3000)
83
+
84
+ ---
85
+
86
+ ### Build for Production
87
+
88
+ Generate optimized and minified builds:
89
+
90
+ ```bash
91
+ pnpm build
92
+ ```
93
+
94
+ Output files are created inside the `dist/` directory.
95
+ These are the files you can upload to your CDN or include in Webflow.
96
+
97
+ ---
98
+
99
+ ### Linting and Formatting
100
+
101
+ Maintain code consistency and quality:
102
+
103
+ ```bash
104
+ pnpm lint # Check for lint issues
105
+ pnpm lint:fix # Auto-fix lint issues
106
+ pnpm format # Format code using Prettier
107
+ pnpm check # Type check using TypeScript
108
+ ```
109
+
110
+ ---
111
+
112
+ ### Versioning and Releasing
113
+
114
+ Handle versioning and publishing to npm:
115
+
116
+ ```bash
117
+ pnpm changeset
118
+ pnpm changeset version
119
+ pnpm release
120
+ ```
121
+
122
+ Run these sequentially to version and release your package.
123
+
124
+ ---
125
+
126
+ ### Generate CDN Links
127
+
128
+ After publishing, run:
129
+
130
+ ```bash
131
+ pnpm cdn
132
+ ```
133
+
134
+ This displays ready-to-use `<script>` or `<link>` tags pointing to the latest version of your npm package.
135
+
136
+ Example:
137
+
138
+ ```html
139
+ <script defer src="https://cdn.jsdelivr.net/npm/your-package-name@latest/dist/index.js"></script>
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Folder Structure
145
+
146
+ ```
147
+ your-project/
148
+ ├── src/ # All editable source files
149
+ │ ├── index.ts
150
+ │ ├── styles/
151
+ │ │ └── global.css
152
+ │ └── home/
153
+ │ └── index.ts
154
+ ├── bin/ # Build configuration (edit ENTRY_POINTS here)
155
+ │ └── build.js
156
+ ├── dist/ # Generated build output (do not edit)
157
+ ├── package.json
158
+ ├── tsconfig.json
159
+ ├── eslint.config.js
160
+ └── README.md
161
+ ```
162
+
163
+ **Important:**
164
+ Every file you create inside `src/` must be listed in `bin/build.js` under `ENTRY_POINTS` to be compiled into `dist/`.
165
+
166
+ ---
167
+
168
+ ## Notes
169
+
170
+ - Keep editable files limited to the `src/` directory.
171
+ - Avoid manual edits in `dist/` — it’s auto-generated.
172
+ - Use **semantic versioning** (`major.minor.patch`) for clear release cycles.
173
+ - Always commit changes before running a release.
174
+
175
+ ---
176
+
177
+ ## License
178
+
179
+ This project is licensed under the [MIT License](./LICENSE).
180
+
181
+ ---
182
+
183
+ Built using [**CDN-Starter**](https://www.npmjs.com/package/create-cdn-starter).
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";(()=>{"scrollRestoration"in history&&(history.scrollRestoration="manual");var v=()=>{window.scrollTo(0,0),document.documentElement.scrollTop=0,document.body.scrollTop=0};window.addEventListener("load",()=>{v()});window.addEventListener("pageshow",t=>{t.persisted&&v()});var u=!1;document.addEventListener("DOMContentLoaded",()=>{let t=document.querySelectorAll("[data-anchor-trigger]"),s=document.querySelectorAll("[data-page-anchor]"),n=()=>window.innerWidth>992?120:52,o=e=>{t.forEach(r=>{let c=r.getAttribute("data-anchor-trigger");r.setAttribute("data-current-anchor",c===e?"true":"false")})},i=()=>{let e=n(),r=[];s.forEach(l=>{let g=l.getBoundingClientRect();g.top-e<=0&&g.bottom>e&&r.push(l)});let c=r.map(l=>l.getAttribute("data-page-anchor")).filter(l=>l!==null);c.length>0&&o(c[0])};t.forEach(e=>{e.addEventListener("click",()=>{let r=e.getAttribute("data-anchor-trigger");if(!r)return;let c=document.querySelector(`[data-page-anchor="${r}"]`);if(!c)return;let l=n(),g=c.getBoundingClientRect().top+window.scrollY-l;window.scrollTo({top:g,behavior:"auto"}),u&&(d(),u=!1),o(r),i()})}),window.addEventListener("scroll",i);let m=992,p=()=>window.innerWidth<m;function f(){let e=document.getElementById("menu-toggle");e&&(e.checked=!0)}function E(){let e=document.getElementById("menu-toggle");e&&(e.checked=!1)}function a(){if(!p())return;let e=document.querySelector("[data-menu-content]");e&&(e.style.display="block",f())}function d(){let e=document.querySelector("[data-menu-content]");e&&(e.style.display="none",E())}d(),u=!1;let y=document.querySelector("[data-menu-toggle]");y&&y.addEventListener("click",()=>{u=!u,u?a():d()}),i()});document.querySelectorAll("[large-card]").forEach(t=>{if(t.classList.contains("w-condition-invisible"))return;let s=t.parentElement;s&&s.setAttribute("col-span","2")});document.addEventListener("DOMContentLoaded",()=>{let t=document.querySelector("[bloom-element='video-1']"),s=document.querySelector("[bloom-element='video-poster-1']"),n=document.querySelector("[bloom-element='video-2']"),o=document.querySelector("[bloom-element='content']");if(!t||!s||!n||!o){console.warn("Required elements missing");return}v(),document.body.classList.add("scroll-locked"),o.style.transition="none",o.style.transform="translateY(100vh)",o.getBoundingClientRect(),o.style.transition="transform 0.8s ease";let i=!1,m=!1,p=()=>{if(i)return;i=!0;let a=t.play();a&&a.then(()=>{s.style.display="none"}).catch(()=>{})};t.readyState>=HTMLMediaElement.HAVE_METADATA?p():t.addEventListener("loadedmetadata",p,{once:!0}),t.addEventListener("ended",()=>{t.pause(),t.currentTime=t.duration,n.style.display="block"});let f=a=>{if(m)return;a.preventDefault(),m=!0,window.removeEventListener("wheel",f);let d=n.play();d&&d.catch(()=>{})};window.addEventListener("wheel",f,{passive:!1}),n.addEventListener("ended",()=>{n.pause(),n.currentTime=n.duration,E()});let E=()=>{requestAnimationFrame(()=>{o.style.transform="translateY(0)"}),setTimeout(()=>{document.body.classList.remove("scroll-locked")},900)}});})();
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": ["// =======================================\n// GLOBAL SCROLL RESET (CRITICAL, TOP ONLY)\n// =======================================\n\n// Disable browser automatic scroll restoration\nif (\"scrollRestoration\" in history) {\n history.scrollRestoration = \"manual\";\n}\n\nconst forceScrollTop = (): void => {\n window.scrollTo(0, 0);\n document.documentElement.scrollTop = 0;\n document.body.scrollTop = 0;\n};\n\n// After full page load (catches late restores)\nwindow.addEventListener(\"load\", () => {\n forceScrollTop();\n});\n\n// Handle back/forward cache restores (Safari, Firefox)\nwindow.addEventListener(\"pageshow\", (event: PageTransitionEvent) => {\n if (event.persisted) {\n forceScrollTop();\n }\n});\n\n\n// =======================================\n// Smooth scrolling, anchor highlighting,\n// and mobile menu handling\n// =======================================\n\nlet mobileMenuOpen = false;\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n /* -----------------------------\n Anchor scrolling & highlighting\n ----------------------------- */\n\n const triggers = document.querySelectorAll<HTMLElement>(\"[data-anchor-trigger]\");\n const anchors = document.querySelectorAll<HTMLElement>(\"[data-page-anchor]\");\n\n const getScrollTopSpacer = (): number =>\n window.innerWidth > 992 ? 120 : 52;\n\n const updateCurrentAnchor = (value: string): void => {\n triggers.forEach(trigger => {\n const triggerValue = trigger.getAttribute(\"data-anchor-trigger\");\n trigger.setAttribute(\n \"data-current-anchor\",\n triggerValue === value ? \"true\" : \"false\"\n );\n });\n };\n\n const logVisiblePageAnchor = (): void => {\n const scrollTopSpacer = getScrollTopSpacer();\n const visibleAnchors: HTMLElement[] = [];\n\n anchors.forEach(anchor => {\n const rect = anchor.getBoundingClientRect();\n const adjustedTop = rect.top - scrollTopSpacer;\n\n if (adjustedTop <= 0 && rect.bottom > scrollTopSpacer) {\n visibleAnchors.push(anchor);\n }\n });\n\n const values = visibleAnchors\n .map(a => a.getAttribute(\"data-page-anchor\"))\n .filter((v): v is string => v !== null);\n\n if (values.length > 0) {\n updateCurrentAnchor(values[0]);\n }\n };\n\n triggers.forEach(trigger => {\n trigger.addEventListener(\"click\", () => {\n const value = trigger.getAttribute(\"data-anchor-trigger\");\n if (!value) return;\n\n const target = document.querySelector<HTMLElement>(\n `[data-page-anchor=\"${value}\"]`\n );\n if (!target) return;\n\n const scrollTopSpacer = getScrollTopSpacer();\n const targetTop =\n target.getBoundingClientRect().top + window.scrollY - scrollTopSpacer;\n\n window.scrollTo({ top: targetTop, behavior: \"auto\" });\n\n if (mobileMenuOpen) {\n menuClose();\n mobileMenuOpen = false;\n }\n\n updateCurrentAnchor(value);\n logVisiblePageAnchor();\n });\n });\n\n window.addEventListener(\"scroll\", logVisiblePageAnchor);\n\n /* -----------------------------\n Mobile menu toggle\n ----------------------------- */\n\n const MOBILE_BREAKPOINT = 992;\n\n const isMobileScreen = (): boolean =>\n window.innerWidth < MOBILE_BREAKPOINT;\n\n function openMenuAnimation(): void {\n const checkbox = document.getElementById(\"menu-toggle\") as HTMLInputElement | null;\n if (!checkbox) return;\n checkbox.checked = true;\n }\n\n function closeMenuAnimation(): void {\n const checkbox = document.getElementById(\"menu-toggle\") as HTMLInputElement | null;\n if (!checkbox) return;\n checkbox.checked = false;\n }\n\n function menuOpen(): void {\n if (!isMobileScreen()) return;\n\n const menu = document.querySelector<HTMLElement>(\"[data-menu-content]\");\n if (!menu) return;\n\n menu.style.display = \"block\";\n openMenuAnimation();\n }\n\n function menuClose(): void {\n const menu = document.querySelector<HTMLElement>(\"[data-menu-content]\");\n if (!menu) return;\n\n menu.style.display = \"none\";\n closeMenuAnimation();\n }\n\n menuClose();\n mobileMenuOpen = false;\n\n const toggle = document.querySelector<HTMLElement>(\"[data-menu-toggle]\");\n if (toggle) {\n toggle.addEventListener(\"click\", () => {\n mobileMenuOpen = !mobileMenuOpen;\n mobileMenuOpen ? menuOpen() : menuClose();\n });\n }\n\n logVisiblePageAnchor();\n});\n\n\n/* -----------------------------\n Adjust grid column span for large cards\n----------------------------- */\n\ndocument\n .querySelectorAll<HTMLElement>(\"[large-card]\")\n .forEach(card => {\n if (card.classList.contains(\"w-condition-invisible\")) return;\n\n const parent = card.parentElement;\n if (!parent) return;\n\n parent.setAttribute(\"col-span\", \"2\");\n });\n\n\n/* -----------------------------\n Video autoplay and poster handling\n----------------------------- */\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const video1 = document.querySelector(\n \"[bloom-element='video-1']\"\n ) as HTMLVideoElement | null;\n\n const poster1 = document.querySelector(\n \"[bloom-element='video-poster-1']\"\n ) as HTMLImageElement | null;\n\n const video2 = document.querySelector(\n \"[bloom-element='video-2']\"\n ) as HTMLVideoElement | null;\n\n const content = document.querySelector(\n \"[bloom-element='content']\"\n ) as HTMLElement | null;\n\n if (!video1 || !poster1 || !video2 || !content) {\n console.warn(\"Required elements missing\");\n return;\n }\n\n /* ---------- HARD RESET ---------- */\n\n forceScrollTop();\n\n document.body.classList.add(\"scroll-locked\");\n\n content.style.transition = \"none\";\n content.style.transform = \"translateY(100vh)\";\n content.getBoundingClientRect();\n content.style.transition = \"transform 0.8s ease\";\n\n let video1Played = false;\n let video2Triggered = false;\n\n /* ---------- VIDEO 1 ---------- */\n\n const playVideo1Once = () => {\n if (video1Played) return;\n video1Played = true;\n\n const playPromise = video1.play();\n if (playPromise) {\n playPromise\n .then(() => {\n poster1.style.display = \"none\";\n })\n .catch(() => { });\n }\n };\n\n if (video1.readyState >= HTMLMediaElement.HAVE_METADATA) {\n playVideo1Once();\n } else {\n video1.addEventListener(\"loadedmetadata\", playVideo1Once, { once: true });\n }\n\n video1.addEventListener(\"ended\", () => {\n video1.pause();\n video1.currentTime = video1.duration;\n video2.style.display = \"block\";\n });\n\n /* ---------- VIDEO 2 (SCROLL-INTENT GATED) ---------- */\n\n const onFirstScrollIntent = (event: WheelEvent) => {\n if (video2Triggered) return;\n\n event.preventDefault();\n video2Triggered = true;\n window.removeEventListener(\"wheel\", onFirstScrollIntent);\n\n const playPromise = video2.play();\n if (playPromise) {\n playPromise.catch(() => { });\n }\n };\n\n window.addEventListener(\"wheel\", onFirstScrollIntent, { passive: false });\n\n video2.addEventListener(\"ended\", () => {\n video2.pause();\n video2.currentTime = video2.duration;\n\n revealContent();\n });\n\n /* ---------- CONTENT REVEAL ---------- */\n\n const revealContent = () => {\n requestAnimationFrame(() => {\n content.style.transform = \"translateY(0)\";\n });\n\n setTimeout(() => {\n document.body.classList.remove(\"scroll-locked\");\n }, 900);\n };\n});"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ [data-current-anchor=true]{backdrop-filter:blur(6px);background-color:#ffffff38;box-shadow:inset 0 0 0 1px #ffffff6b}@media screen and (max-width: 991px){[data-current-anchor=true]{box-shadow:none;background-color:#ffffff24;justify-content:flex-start;align-items:center;width:100%;height:auto}}[col-span="2"]{grid-area:span 1 / span 2 / span 1 / span 2}@media screen and (max-width: 991px){[col-span="2"]{grid-column:span 2 / span 2}}@media screen and (max-width: 767px){[col-span="2"]{grid-column:span 1 / span 1}}[bloom-element=video-1]{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}[bloom-element=video-poster-1]{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:2}[bloom-element=video-2]{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;display:none}.scroll-locked{overflow:hidden}[bloom-element=content]{transform:translateY(100vh);transition:transform .8s ease}.reveal{transform:translateY(0)}
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/styles.css"],
4
+ "sourcesContent": ["[data-current-anchor=\"true\"] {\n backdrop-filter: blur(6px);\n background-color: #ffffff38;\n box-shadow: inset 0 0 0 1px #ffffff6b;\n}\n@media screen and (max-width: 991px) {\n [data-current-anchor=\"true\"]{\n box-shadow: none;\n background-color: #ffffff24;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: auto;\n }\n}\n\n[col-span=\"2\"] {\n grid-area: span 1 / span 2 / span 1 / span 2;\n}\n@media screen and (max-width: 991px) {\n [col-span=\"2\"] {\n grid-column: span 2 / span 2;\n }\n}\n@media screen and (max-width: 767px) {\n[col-span=\"2\"]{\n grid-column: span 1 / span 1;\n }\n}\n\n[bloom-element=\"video-1\"]{\nposition: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: 1;\n\n}\n[bloom-element=\"video-poster-1\"]{\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: 2;\n}\n[bloom-element=\"video-2\"]{\nposition: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: 1;\ndisplay: none;\n}\n\n.scroll-locked{\n overflow: hidden;\n}\n\n[bloom-element=\"content\"]{\n transform: translate(0, 100vh);\n transition: transform 0.8s ease;\n}\n.reveal {\n transform: translateY(0);\n}"],
5
+ "mappings": ";AAAA,CAAC;AACG,mBAAiB,KAAK;AACtB,oBAAkB;AAClB,cAAY,MAAM,EAAE,EAAE,EAAE,IAAI;AAChC;AACA,OAAO,OAAO,IAAI,CAAC,SAAS,EAAE;AAC1B,GAAC;AACG,gBAAY;AACZ,sBAAkB;AAClB,qBAAiB;AACjB,iBAAa;AACb,WAAO;AACP,YAAQ;AACZ;AACJ;AAEA,CAAC;AACG,aAAW,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK;AAC/C;AACA,OAAO,OAAO,IAAI,CAAC,SAAS,EAAE;AAC1B,GAAC;AACG,iBAAa,KAAK,EAAE,EAAE,KAAK;AAC/B;AACJ;AACA,OAAO,OAAO,IAAI,CAAC,SAAS,EAAE;AAC9B,GAAC;AACO,iBAAa,KAAK,EAAE,EAAE,KAAK;AAC/B;AACJ;AAEA,CAAC;AACD,YAAU;AACR,SAAO;AACP,SAAO;AACP,UAAQ;AACR,cAAY;AACZ,WAAS;AAEX;AACA,CAAC;AACC,YAAU;AACV,SAAO;AACP,SAAO;AACP,UAAQ;AACR,cAAY;AACZ,WAAS;AACX;AACA,CAAC;AACD,YAAU;AACR,SAAO;AACP,SAAO;AACP,UAAQ;AACR,cAAY;AACZ,WAAS;AACX,WAAS;AACT;AAEA,CAAC;AACG,YAAU;AACd;AAEA,CAAC;AACO,aAAW,UAAU,CAAC,EAAE;AACxB,cAAY,UAAU,KAAK;AACnC;AACA,CAAC;AACC,aAAW,WAAW;AACxB;",
6
+ "names": []
7
+ }
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@fynd-design-engineering/fynd-bloom",
3
+ "version": "0.0.1",
4
+ "description": "Bloom edition static javascript library",
5
+ "license": "MIT",
6
+ "keywords": [],
7
+ "author": {
8
+ "name": "Raimon",
9
+ "url": "https://github.com/rtstic"
10
+ },
11
+ "type": "module",
12
+ "main": "dist/index.ts",
13
+ "module": "dist/index.ts",
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "devDependencies": {
21
+ "@changesets/cli": "^2.29.4",
22
+ "cross-env": "^7.0.3",
23
+ "esbuild": "^0.25.5"
24
+ },
25
+ "scripts": {
26
+ "dev": "cross-env NODE_ENV=development node ./bin/build.js",
27
+ "build": "cross-env NODE_ENV=production node ./bin/build.js",
28
+ "cdn": "node ./bin/cdn.js",
29
+ "lint": "eslint ./src && prettier --check ./src",
30
+ "lint:fix": "eslint ./src --fix",
31
+ "check": "tsc --noEmit",
32
+ "format": "prettier --write ./src",
33
+ "release": "changeset publish",
34
+ "update": "pnpm update -i -L -r"
35
+ }
36
+ }