@retinalabsllc/zairusjs 20.1.35 → 21.0.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/dist/index.d.mts CHANGED
@@ -496,11 +496,13 @@ interface ScrollFeature {
496
496
  title: string;
497
497
  desc: string;
498
498
  image?: string;
499
+ imagePosition?: 'left' | 'right';
499
500
  }
500
501
  interface FeatureScrollProps {
501
502
  tagline: string;
502
503
  headline: React.ReactNode;
503
504
  features: ScrollFeature[];
505
+ expand?: boolean;
504
506
  }
505
507
  declare const FeatureScroll: React.FC<FeatureScrollProps>;
506
508
 
package/dist/index.d.ts CHANGED
@@ -496,11 +496,13 @@ interface ScrollFeature {
496
496
  title: string;
497
497
  desc: string;
498
498
  image?: string;
499
+ imagePosition?: 'left' | 'right';
499
500
  }
500
501
  interface FeatureScrollProps {
501
502
  tagline: string;
502
503
  headline: React.ReactNode;
503
504
  features: ScrollFeature[];
505
+ expand?: boolean;
504
506
  }
505
507
  declare const FeatureScroll: React.FC<FeatureScrollProps>;
506
508
 
package/dist/index.js CHANGED
@@ -3186,6 +3186,7 @@ var import_core_free_icons19 = require("@hugeicons/core-free-icons");
3186
3186
  var FeatureCard = ({ feature, bgImage }) => {
3187
3187
  const [isBgLoading, setIsBgLoading] = (0, import_react50.useState)(true);
3188
3188
  const [isFgLoading, setIsFgLoading] = (0, import_react50.useState)(!!feature.image);
3189
+ const isLeft = feature.imagePosition === "left";
3189
3190
  return /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative w-full aspect-16/10 bg-stone-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ import_react50.default.createElement(
3190
3191
  import_image3.default,
3191
3192
  {
@@ -3207,22 +3208,32 @@ var FeatureCard = ({ feature, bgImage }) => {
3207
3208
  backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
3208
3209
  }
3209
3210
  }
3210
- ), isFgLoading && feature.image && /* @__PURE__ */ import_react50.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-stone-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons19.Loading03Icon, size: 32, className: "animate-spin text-stone-400" })), feature.image && /* @__PURE__ */ import_react50.default.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ import_react50.default.createElement(
3211
- import_image3.default,
3211
+ ), isFgLoading && feature.image && /* @__PURE__ */ import_react50.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-stone-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: import_core_free_icons19.Loading03Icon, size: 32, className: "animate-spin text-stone-400" })), feature.image && /* @__PURE__ */ import_react50.default.createElement(
3212
+ "div",
3212
3213
  {
3213
- src: feature.image,
3214
- alt: feature.title,
3215
- fill: true,
3216
- sizes: "(max-width: 768px) 90vw, 600px",
3217
- onLoad: () => setIsFgLoading(false),
3218
3214
  className: `
3219
- object-cover object-top-left rounded-tl-2xl shadow-[-12px_-12px_30px_rgba(0,0,0,0.06)] transition-all duration-700 ease-out
3215
+ absolute -bottom-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out
3216
+ ${isLeft ? "-left-6 group-hover:translate-x-2 group-hover:-translate-y-2" : "-right-6 group-hover:-translate-x-2 group-hover:-translate-y-2"}
3217
+ `
3218
+ },
3219
+ /* @__PURE__ */ import_react50.default.createElement(
3220
+ import_image3.default,
3221
+ {
3222
+ src: feature.image,
3223
+ alt: feature.title,
3224
+ fill: true,
3225
+ sizes: "(max-width: 768px) 90vw, 600px",
3226
+ onLoad: () => setIsFgLoading(false),
3227
+ className: `
3228
+ object-cover transition-all duration-700 ease-out
3229
+ ${isLeft ? "object-top-right rounded-tr-2xl shadow-[12px_-12px_30px_rgba(0,0,0,0.06)]" : "object-top-left rounded-tl-2xl shadow-[-12px_-12px_30px_rgba(0,0,0,0.06)]"}
3220
3230
  ${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
3221
3231
  `
3222
- }
3223
- ))), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react50.default.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-sm leading-relaxed text-stone-600 max-w-[90%]" }, feature.desc)));
3232
+ }
3233
+ )
3234
+ )), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react50.default.createElement("h3", { className: "text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react50.default.createElement("p", { className: "text-sm leading-relaxed text-stone-600 max-w-[90%]" }, feature.desc)));
3224
3235
  };
3225
- var FeatureScroll = ({ tagline, headline, features }) => {
3236
+ var FeatureScroll = ({ tagline, headline, features, expand = false }) => {
3226
3237
  const scrollRef = (0, import_react50.useRef)(null);
3227
3238
  const [canScrollLeft, setCanScrollLeft] = (0, import_react50.useState)(false);
3228
3239
  const [canScrollRight, setCanScrollRight] = (0, import_react50.useState)(true);
@@ -3247,9 +3258,13 @@ var FeatureScroll = ({ tagline, headline, features }) => {
3247
3258
  const bgImages = [
3248
3259
  "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_7.avif",
3249
3260
  "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_6.avif",
3250
- "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_1.avif"
3261
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_1.avif",
3262
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_2.avif",
3263
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_3.avif",
3264
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_4.avif"
3251
3265
  ];
3252
- return /* @__PURE__ */ import_react50.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-xs tracking-[0.4em] text-stone-500 block mb-4" }, tagline), /* @__PURE__ */ import_react50.default.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react50.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react50.default.createElement(
3266
+ const maxItems = expand ? 6 : 3;
3267
+ return /* @__PURE__ */ import_react50.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react50.default.createElement("span", { className: "text-xs tracking-[0.4em] text-stone-500 block mb-4" }, tagline), /* @__PURE__ */ import_react50.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react50.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react50.default.createElement(
3253
3268
  "button",
3254
3269
  {
3255
3270
  onClick: () => scroll("left"),
@@ -3272,7 +3287,14 @@ var FeatureScroll = ({ tagline, headline, features }) => {
3272
3287
  onScroll: checkScroll,
3273
3288
  className: "flex gap-6 overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none pb-8 -mx-4 px-4 md:mx-0 md:px-0"
3274
3289
  },
3275
- features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react50.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
3290
+ features.slice(0, maxItems).map((feature, idx) => /* @__PURE__ */ import_react50.default.createElement(
3291
+ FeatureCard,
3292
+ {
3293
+ key: idx,
3294
+ feature,
3295
+ bgImage: bgImages[idx % bgImages.length]
3296
+ }
3297
+ ))
3276
3298
  ), /* @__PURE__ */ import_react50.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react50.default.createElement(
3277
3299
  "button",
3278
3300
  {
package/dist/index.mjs CHANGED
@@ -3185,6 +3185,7 @@ import { ArrowLeft01Icon as ArrowLeft01Icon9, ArrowRight01Icon as ArrowRight01Ic
3185
3185
  var FeatureCard = ({ feature, bgImage }) => {
3186
3186
  const [isBgLoading, setIsBgLoading] = useState22(true);
3187
3187
  const [isFgLoading, setIsFgLoading] = useState22(!!feature.image);
3188
+ const isLeft = feature.imagePosition === "left";
3188
3189
  return /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ React29.createElement("div", { className: "relative w-full aspect-16/10 bg-stone-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ React29.createElement(
3189
3190
  Image4,
3190
3191
  {
@@ -3206,22 +3207,32 @@ var FeatureCard = ({ feature, bgImage }) => {
3206
3207
  backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
3207
3208
  }
3208
3209
  }
3209
- ), isFgLoading && feature.image && /* @__PURE__ */ React29.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-stone-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React29.createElement(HugeiconsIcon22, { icon: Loading03Icon13, size: 32, className: "animate-spin text-stone-400" })), feature.image && /* @__PURE__ */ React29.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ React29.createElement(
3210
- Image4,
3210
+ ), isFgLoading && feature.image && /* @__PURE__ */ React29.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-stone-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ React29.createElement(HugeiconsIcon22, { icon: Loading03Icon13, size: 32, className: "animate-spin text-stone-400" })), feature.image && /* @__PURE__ */ React29.createElement(
3211
+ "div",
3211
3212
  {
3212
- src: feature.image,
3213
- alt: feature.title,
3214
- fill: true,
3215
- sizes: "(max-width: 768px) 90vw, 600px",
3216
- onLoad: () => setIsFgLoading(false),
3217
3213
  className: `
3218
- object-cover object-top-left rounded-tl-2xl shadow-[-12px_-12px_30px_rgba(0,0,0,0.06)] transition-all duration-700 ease-out
3214
+ absolute -bottom-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out
3215
+ ${isLeft ? "-left-6 group-hover:translate-x-2 group-hover:-translate-y-2" : "-right-6 group-hover:-translate-x-2 group-hover:-translate-y-2"}
3216
+ `
3217
+ },
3218
+ /* @__PURE__ */ React29.createElement(
3219
+ Image4,
3220
+ {
3221
+ src: feature.image,
3222
+ alt: feature.title,
3223
+ fill: true,
3224
+ sizes: "(max-width: 768px) 90vw, 600px",
3225
+ onLoad: () => setIsFgLoading(false),
3226
+ className: `
3227
+ object-cover transition-all duration-700 ease-out
3228
+ ${isLeft ? "object-top-right rounded-tr-2xl shadow-[12px_-12px_30px_rgba(0,0,0,0.06)]" : "object-top-left rounded-tl-2xl shadow-[-12px_-12px_30px_rgba(0,0,0,0.06)]"}
3219
3229
  ${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
3220
3230
  `
3221
- }
3222
- ))), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React29.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React29.createElement("p", { className: "text-sm leading-relaxed text-stone-600 max-w-[90%]" }, feature.desc)));
3231
+ }
3232
+ )
3233
+ )), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ React29.createElement("h3", { className: "text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ React29.createElement("p", { className: "text-sm leading-relaxed text-stone-600 max-w-[90%]" }, feature.desc)));
3223
3234
  };
3224
- var FeatureScroll = ({ tagline, headline, features }) => {
3235
+ var FeatureScroll = ({ tagline, headline, features, expand = false }) => {
3225
3236
  const scrollRef = useRef7(null);
3226
3237
  const [canScrollLeft, setCanScrollLeft] = useState22(false);
3227
3238
  const [canScrollRight, setCanScrollRight] = useState22(true);
@@ -3246,9 +3257,13 @@ var FeatureScroll = ({ tagline, headline, features }) => {
3246
3257
  const bgImages = [
3247
3258
  "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_7.avif",
3248
3259
  "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_6.avif",
3249
- "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_1.avif"
3260
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_1.avif",
3261
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_2.avif",
3262
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_3.avif",
3263
+ "https://storage.googleapis.com/retina-cloud-v2/assets/images/bg_4.avif"
3250
3264
  ];
3251
- return /* @__PURE__ */ React29.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React29.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React29.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React29.createElement("span", { className: "text-xs tracking-[0.4em] text-stone-500 block mb-4" }, tagline), /* @__PURE__ */ React29.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React29.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React29.createElement(
3265
+ const maxItems = expand ? 6 : 3;
3266
+ return /* @__PURE__ */ React29.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ React29.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ React29.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ React29.createElement("span", { className: "text-xs tracking-[0.4em] text-stone-500 block mb-4" }, tagline), /* @__PURE__ */ React29.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ React29.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ React29.createElement(
3252
3267
  "button",
3253
3268
  {
3254
3269
  onClick: () => scroll("left"),
@@ -3271,7 +3286,14 @@ var FeatureScroll = ({ tagline, headline, features }) => {
3271
3286
  onScroll: checkScroll,
3272
3287
  className: "flex gap-6 overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none pb-8 -mx-4 px-4 md:mx-0 md:px-0"
3273
3288
  },
3274
- features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ React29.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
3289
+ features.slice(0, maxItems).map((feature, idx) => /* @__PURE__ */ React29.createElement(
3290
+ FeatureCard,
3291
+ {
3292
+ key: idx,
3293
+ feature,
3294
+ bgImage: bgImages[idx % bgImages.length]
3295
+ }
3296
+ ))
3275
3297
  ), /* @__PURE__ */ React29.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ React29.createElement(
3276
3298
  "button",
3277
3299
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "20.1.35",
3
+ "version": "21.0.0",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",