bhoomi-virtual-ui-library 1.0.6 → 1.0.8

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.js CHANGED
@@ -31,9 +31,11 @@ var index_exports = {};
31
31
  __export(index_exports, {
32
32
  Button: () => Button,
33
33
  Card: () => Card,
34
+ DualRingLoader: () => DualRingLoader,
34
35
  ECommerceCard: () => ECommerceCard,
35
36
  PricingCard: () => PricingCard,
36
- Profilecard: () => Profilecard
37
+ Profilecard: () => Profilecard,
38
+ ShoesCard: () => ShoesCard
37
39
  });
38
40
  module.exports = __toCommonJS(index_exports);
39
41
 
@@ -668,11 +670,138 @@ var PricingCard = ({
668
670
  };
669
671
  return /* @__PURE__ */ import_react5.default.createElement("div", { style: { background: bg, borderRadius: "20px", padding: "28px 24px", width: "300px", color: "#fff", fontFamily: "system-ui,sans-serif", boxShadow: "0 10px 40px rgba(0,0,0,0.5)", border: "1px solid " + alpha(accent, 0.25), position: "relative", overflow: "hidden" } }, /* @__PURE__ */ import_react5.default.createElement("div", { style: { position: "absolute", top: 0, left: 0, right: 0, height: "3px", background: "linear-gradient(90deg, " + accent + ", " + alpha(accent, 0.3) + ")" } }), badgeText && /* @__PURE__ */ import_react5.default.createElement("div", { style: { display: "inline-flex", alignItems: "center", gap: "6px", padding: "4px 12px", borderRadius: "100px", marginBottom: "14px", background: alpha(accent, 0.12), border: "1px solid " + alpha(accent, 0.3), fontSize: "11px", fontWeight: "700", color: accent, textTransform: "uppercase", letterSpacing: "0.5px" } }, /* @__PURE__ */ import_react5.default.createElement("div", { style: { width: 6, height: 6, borderRadius: "50%", background: accent } }), badgeText), /* @__PURE__ */ import_react5.default.createElement("div", { style: { fontSize: "20px", fontWeight: "800", marginBottom: "4px" } }, planName), /* @__PURE__ */ import_react5.default.createElement("div", { style: { fontSize: "13px", color: "rgba(255,255,255,0.45)", marginBottom: "20px" } }, description), /* @__PURE__ */ import_react5.default.createElement("div", { style: { display: "flex", alignItems: "flex-end", gap: "3px", marginBottom: "4px" } }, /* @__PURE__ */ import_react5.default.createElement("span", { style: { fontSize: "18px", fontWeight: "700", color: "rgba(255,255,255,0.5)", lineHeight: 2 } }, currency), /* @__PURE__ */ import_react5.default.createElement("span", { style: { fontSize: "52px", fontWeight: "800", lineHeight: 1 } }, Math.round(price))), /* @__PURE__ */ import_react5.default.createElement("div", { style: { fontSize: "12px", color: "rgba(255,255,255,0.35)", marginBottom: "20px" } }, period), /* @__PURE__ */ import_react5.default.createElement("div", { style: { height: "1px", background: "rgba(255,255,255,0.07)", marginBottom: "16px" } }), /* @__PURE__ */ import_react5.default.createElement("ul", { style: { listStyle: "none", padding: 0, margin: "0 0 22px", display: "flex", flexDirection: "column", gap: "10px" } }, features.map((f, i) => /* @__PURE__ */ import_react5.default.createElement("li", { key: i, style: { display: "flex", alignItems: "center", gap: "10px", fontSize: "13px", color: "rgba(255,255,255,0.75)", cursor: "pointer" } }, /* @__PURE__ */ import_react5.default.createElement("div", { style: { width: "18px", height: "18px", borderRadius: "50%", display: "flex", alignItems: "center", justifyContent: "center", background: alpha(accent, 0.18), border: "1px solid " + alpha(accent, 0.4), flexShrink: 0 } }, /* @__PURE__ */ import_react5.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 12 12", fill: "none", stroke: "#fff", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react5.default.createElement("polyline", { points: "1.5,6 4.5,9 10.5,3" }))), f))), /* @__PURE__ */ import_react5.default.createElement("button", { onClick: onCtaClick, style: { width: "100%", padding: "13px", borderRadius: "12px", border: "none", background: "linear-gradient(135deg, " + accent + ", " + alpha(accent, 0.7) + ")", color: "#fff", fontSize: "14px", fontWeight: "700", cursor: "pointer", fontFamily: "system-ui,sans-serif" } }, ctaText));
670
672
  };
673
+
674
+ // src/components/ShoesCard/ShoesCard.jsx
675
+ var import_react6 = __toESM(require("react"));
676
+ var ShoesCard = ({
677
+ image = "https://images.unsplash.com/photo-1524015436451-442ee98d8b0e?w=600&q=80",
678
+ title = "Sneaker for the Modern Athlete",
679
+ description = "Experience the perfect blend of style and performance in our latest sneaker release.",
680
+ price = 129,
681
+ currency = "$",
682
+ period = "per pair",
683
+ accent = "#6366f1",
684
+ bg = "#0f172a",
685
+ onButtonClick = () => {
686
+ }
687
+ }) => {
688
+ const alpha = (hex, op) => {
689
+ const r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
690
+ return "rgba(" + r + "," + g + "," + b + "," + op + ")";
691
+ };
692
+ return /* @__PURE__ */ import_react6.default.createElement("div", { style: {
693
+ background: bg,
694
+ borderRadius: "20px",
695
+ overflow: "hidden",
696
+ width: "300px",
697
+ border: "1px solid " + alpha(accent, 0.3),
698
+ fontFamily: "system-ui,sans-serif",
699
+ transition: "transform 0.25s, box-shadow 0.25s",
700
+ transform: "translateY(0px)",
701
+ boxShadow: "0 4px 20px rgba(0,0,0,0.3)"
702
+ } }, /* @__PURE__ */ import_react6.default.createElement("div", { style: { position: "relative", width: "100%", height: "180px", overflow: "hidden" } }, /* @__PURE__ */ import_react6.default.createElement("img", { src: image, alt: title, style: {
703
+ width: "100%",
704
+ height: "100%",
705
+ objectFit: "cover",
706
+ transform: "scale(1)",
707
+ transition: "transform 0.4s ease"
708
+ } }), /* @__PURE__ */ import_react6.default.createElement("div", { style: { position: "absolute", inset: 0, background: "linear-gradient(to top, rgba(0,0,0,0.5) 0%, transparent 60%)" } })), /* @__PURE__ */ import_react6.default.createElement("div", { style: { padding: "18px" } }, /* @__PURE__ */ import_react6.default.createElement("h3", { style: { fontSize: "15px", fontWeight: "700", color: "#fff", margin: "0 0 8px", lineHeight: 1.4 } }, title), /* @__PURE__ */ import_react6.default.createElement("p", { style: { fontSize: "13px", color: "rgba(255,255,255,0.45)", lineHeight: 1.65, margin: "0 0 18px" } }, description), /* @__PURE__ */ import_react6.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "3px", fontSize: "15px", color: "rgba(255,255,255,0.5)", marginBottom: "4px" } }, /* @__PURE__ */ import_react6.default.createElement("span", { style: { fontSize: "18px", fontWeight: "700" } }, currency), /* @__PURE__ */ import_react6.default.createElement("span", { style: { fontSize: "52px", fontWeight: "800" } }, Math.round(price))), /* @__PURE__ */ import_react6.default.createElement("div", { style: { fontSize: "12px", color: "rgba(255,255,255,0.35)", marginBottom: "20px" } }, period), /* @__PURE__ */ import_react6.default.createElement("button", { onClick: onButtonClick, style: {
709
+ width: "100%",
710
+ padding: "11px",
711
+ borderRadius: "12px",
712
+ border: "none",
713
+ background: "linear-gradient(135deg, " + accent + ", " + alpha(accent, 0.7) + ")",
714
+ color: "#fff",
715
+ fontSize: "13px",
716
+ fontWeight: "700",
717
+ cursor: "pointer",
718
+ fontFamily: "system-ui,sans-serif"
719
+ } }, "Buy Now")));
720
+ };
721
+
722
+ // src/components/DualRingLoader/DualRingLoader.jsx
723
+ var import_react7 = __toESM(require("react"));
724
+ var DualRingLoader = ({
725
+ size = 40,
726
+ outerColor = "#7F77DD",
727
+ innerColor = "#D85A30",
728
+ speed = 1,
729
+ label = null
730
+ }) => {
731
+ const outerRef = (0, import_react7.useRef)(null);
732
+ const innerRef = (0, import_react7.useRef)(null);
733
+ const borderWidth = Math.max(2, Math.round(size * 0.08));
734
+ const innerInset = Math.round(size * 0.16);
735
+ const innerSize = size - innerInset * 2;
736
+ (0, import_react7.useEffect)(() => {
737
+ const outerDuration = (0.8 / speed).toFixed(2) + "s";
738
+ const innerDuration = (1.1 / speed).toFixed(2) + "s";
739
+ if (outerRef.current) {
740
+ outerRef.current.style.animation = "dual-ring-spin " + outerDuration + " linear infinite";
741
+ }
742
+ if (innerRef.current) {
743
+ innerRef.current.style.animation = "dual-ring-spin " + innerDuration + " linear infinite reverse";
744
+ }
745
+ }, [speed]);
746
+ return /* @__PURE__ */ import_react7.default.createElement(import_react7.default.Fragment, null, /* @__PURE__ */ import_react7.default.createElement("style", null, `
747
+ @import url('https://fonts.googleapis.com/css2?family=Lora:wght@400;600;700&family=DM+Mono:wght@400;500&display=swap');
748
+ @keyframes dual-ring-spin { to { transform: rotate(360deg); } }
749
+ `), /* @__PURE__ */ import_react7.default.createElement("div", { style: { display: "inline-flex", flexDirection: "column", alignItems: "center", gap: "12px" } }, /* @__PURE__ */ import_react7.default.createElement(
750
+ "div",
751
+ {
752
+ role: "status",
753
+ "aria-label": label || "Loading",
754
+ style: {
755
+ width: size + "px",
756
+ height: size + "px",
757
+ position: "relative",
758
+ flexShrink: 0
759
+ }
760
+ },
761
+ /* @__PURE__ */ import_react7.default.createElement(
762
+ "div",
763
+ {
764
+ ref: outerRef,
765
+ style: {
766
+ position: "absolute",
767
+ inset: 0,
768
+ borderRadius: "50%",
769
+ border: borderWidth + "px solid transparent",
770
+ borderTopColor: outerColor
771
+ }
772
+ }
773
+ ),
774
+ /* @__PURE__ */ import_react7.default.createElement(
775
+ "div",
776
+ {
777
+ ref: innerRef,
778
+ style: {
779
+ position: "absolute",
780
+ top: innerInset + "px",
781
+ left: innerInset + "px",
782
+ width: innerSize + "px",
783
+ height: innerSize + "px",
784
+ borderRadius: "50%",
785
+ border: borderWidth + "px solid transparent",
786
+ borderBottomColor: innerColor
787
+ }
788
+ }
789
+ )
790
+ ), label && /* @__PURE__ */ import_react7.default.createElement("span", { style: {
791
+ fontFamily: "'DM Mono', monospace",
792
+ fontSize: "11px",
793
+ letterSpacing: "0.1em",
794
+ color: "#999",
795
+ textTransform: "uppercase"
796
+ } }, label)));
797
+ };
671
798
  // Annotate the CommonJS export names for ESM import in node:
672
799
  0 && (module.exports = {
673
800
  Button,
674
801
  Card,
802
+ DualRingLoader,
675
803
  ECommerceCard,
676
804
  PricingCard,
677
- Profilecard
805
+ Profilecard,
806
+ ShoesCard
678
807
  });
package/dist/index.mjs CHANGED
@@ -629,10 +629,137 @@ var PricingCard = ({
629
629
  };
630
630
  return /* @__PURE__ */ React5.createElement("div", { style: { background: bg, borderRadius: "20px", padding: "28px 24px", width: "300px", color: "#fff", fontFamily: "system-ui,sans-serif", boxShadow: "0 10px 40px rgba(0,0,0,0.5)", border: "1px solid " + alpha(accent, 0.25), position: "relative", overflow: "hidden" } }, /* @__PURE__ */ React5.createElement("div", { style: { position: "absolute", top: 0, left: 0, right: 0, height: "3px", background: "linear-gradient(90deg, " + accent + ", " + alpha(accent, 0.3) + ")" } }), badgeText && /* @__PURE__ */ React5.createElement("div", { style: { display: "inline-flex", alignItems: "center", gap: "6px", padding: "4px 12px", borderRadius: "100px", marginBottom: "14px", background: alpha(accent, 0.12), border: "1px solid " + alpha(accent, 0.3), fontSize: "11px", fontWeight: "700", color: accent, textTransform: "uppercase", letterSpacing: "0.5px" } }, /* @__PURE__ */ React5.createElement("div", { style: { width: 6, height: 6, borderRadius: "50%", background: accent } }), badgeText), /* @__PURE__ */ React5.createElement("div", { style: { fontSize: "20px", fontWeight: "800", marginBottom: "4px" } }, planName), /* @__PURE__ */ React5.createElement("div", { style: { fontSize: "13px", color: "rgba(255,255,255,0.45)", marginBottom: "20px" } }, description), /* @__PURE__ */ React5.createElement("div", { style: { display: "flex", alignItems: "flex-end", gap: "3px", marginBottom: "4px" } }, /* @__PURE__ */ React5.createElement("span", { style: { fontSize: "18px", fontWeight: "700", color: "rgba(255,255,255,0.5)", lineHeight: 2 } }, currency), /* @__PURE__ */ React5.createElement("span", { style: { fontSize: "52px", fontWeight: "800", lineHeight: 1 } }, Math.round(price))), /* @__PURE__ */ React5.createElement("div", { style: { fontSize: "12px", color: "rgba(255,255,255,0.35)", marginBottom: "20px" } }, period), /* @__PURE__ */ React5.createElement("div", { style: { height: "1px", background: "rgba(255,255,255,0.07)", marginBottom: "16px" } }), /* @__PURE__ */ React5.createElement("ul", { style: { listStyle: "none", padding: 0, margin: "0 0 22px", display: "flex", flexDirection: "column", gap: "10px" } }, features.map((f, i) => /* @__PURE__ */ React5.createElement("li", { key: i, style: { display: "flex", alignItems: "center", gap: "10px", fontSize: "13px", color: "rgba(255,255,255,0.75)", cursor: "pointer" } }, /* @__PURE__ */ React5.createElement("div", { style: { width: "18px", height: "18px", borderRadius: "50%", display: "flex", alignItems: "center", justifyContent: "center", background: alpha(accent, 0.18), border: "1px solid " + alpha(accent, 0.4), flexShrink: 0 } }, /* @__PURE__ */ React5.createElement("svg", { width: "10", height: "10", viewBox: "0 0 12 12", fill: "none", stroke: "#fff", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React5.createElement("polyline", { points: "1.5,6 4.5,9 10.5,3" }))), f))), /* @__PURE__ */ React5.createElement("button", { onClick: onCtaClick, style: { width: "100%", padding: "13px", borderRadius: "12px", border: "none", background: "linear-gradient(135deg, " + accent + ", " + alpha(accent, 0.7) + ")", color: "#fff", fontSize: "14px", fontWeight: "700", cursor: "pointer", fontFamily: "system-ui,sans-serif" } }, ctaText));
631
631
  };
632
+
633
+ // src/components/ShoesCard/ShoesCard.jsx
634
+ import React6 from "react";
635
+ var ShoesCard = ({
636
+ image = "https://images.unsplash.com/photo-1524015436451-442ee98d8b0e?w=600&q=80",
637
+ title = "Sneaker for the Modern Athlete",
638
+ description = "Experience the perfect blend of style and performance in our latest sneaker release.",
639
+ price = 129,
640
+ currency = "$",
641
+ period = "per pair",
642
+ accent = "#6366f1",
643
+ bg = "#0f172a",
644
+ onButtonClick = () => {
645
+ }
646
+ }) => {
647
+ const alpha = (hex, op) => {
648
+ const r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
649
+ return "rgba(" + r + "," + g + "," + b + "," + op + ")";
650
+ };
651
+ return /* @__PURE__ */ React6.createElement("div", { style: {
652
+ background: bg,
653
+ borderRadius: "20px",
654
+ overflow: "hidden",
655
+ width: "300px",
656
+ border: "1px solid " + alpha(accent, 0.3),
657
+ fontFamily: "system-ui,sans-serif",
658
+ transition: "transform 0.25s, box-shadow 0.25s",
659
+ transform: "translateY(0px)",
660
+ boxShadow: "0 4px 20px rgba(0,0,0,0.3)"
661
+ } }, /* @__PURE__ */ React6.createElement("div", { style: { position: "relative", width: "100%", height: "180px", overflow: "hidden" } }, /* @__PURE__ */ React6.createElement("img", { src: image, alt: title, style: {
662
+ width: "100%",
663
+ height: "100%",
664
+ objectFit: "cover",
665
+ transform: "scale(1)",
666
+ transition: "transform 0.4s ease"
667
+ } }), /* @__PURE__ */ React6.createElement("div", { style: { position: "absolute", inset: 0, background: "linear-gradient(to top, rgba(0,0,0,0.5) 0%, transparent 60%)" } })), /* @__PURE__ */ React6.createElement("div", { style: { padding: "18px" } }, /* @__PURE__ */ React6.createElement("h3", { style: { fontSize: "15px", fontWeight: "700", color: "#fff", margin: "0 0 8px", lineHeight: 1.4 } }, title), /* @__PURE__ */ React6.createElement("p", { style: { fontSize: "13px", color: "rgba(255,255,255,0.45)", lineHeight: 1.65, margin: "0 0 18px" } }, description), /* @__PURE__ */ React6.createElement("div", { style: { display: "flex", alignItems: "center", gap: "3px", fontSize: "15px", color: "rgba(255,255,255,0.5)", marginBottom: "4px" } }, /* @__PURE__ */ React6.createElement("span", { style: { fontSize: "18px", fontWeight: "700" } }, currency), /* @__PURE__ */ React6.createElement("span", { style: { fontSize: "52px", fontWeight: "800" } }, Math.round(price))), /* @__PURE__ */ React6.createElement("div", { style: { fontSize: "12px", color: "rgba(255,255,255,0.35)", marginBottom: "20px" } }, period), /* @__PURE__ */ React6.createElement("button", { onClick: onButtonClick, style: {
668
+ width: "100%",
669
+ padding: "11px",
670
+ borderRadius: "12px",
671
+ border: "none",
672
+ background: "linear-gradient(135deg, " + accent + ", " + alpha(accent, 0.7) + ")",
673
+ color: "#fff",
674
+ fontSize: "13px",
675
+ fontWeight: "700",
676
+ cursor: "pointer",
677
+ fontFamily: "system-ui,sans-serif"
678
+ } }, "Buy Now")));
679
+ };
680
+
681
+ // src/components/DualRingLoader/DualRingLoader.jsx
682
+ import React7, { useState as useState4, useEffect, useRef } from "react";
683
+ var DualRingLoader = ({
684
+ size = 40,
685
+ outerColor = "#7F77DD",
686
+ innerColor = "#D85A30",
687
+ speed = 1,
688
+ label = null
689
+ }) => {
690
+ const outerRef = useRef(null);
691
+ const innerRef = useRef(null);
692
+ const borderWidth = Math.max(2, Math.round(size * 0.08));
693
+ const innerInset = Math.round(size * 0.16);
694
+ const innerSize = size - innerInset * 2;
695
+ useEffect(() => {
696
+ const outerDuration = (0.8 / speed).toFixed(2) + "s";
697
+ const innerDuration = (1.1 / speed).toFixed(2) + "s";
698
+ if (outerRef.current) {
699
+ outerRef.current.style.animation = "dual-ring-spin " + outerDuration + " linear infinite";
700
+ }
701
+ if (innerRef.current) {
702
+ innerRef.current.style.animation = "dual-ring-spin " + innerDuration + " linear infinite reverse";
703
+ }
704
+ }, [speed]);
705
+ return /* @__PURE__ */ React7.createElement(React7.Fragment, null, /* @__PURE__ */ React7.createElement("style", null, `
706
+ @import url('https://fonts.googleapis.com/css2?family=Lora:wght@400;600;700&family=DM+Mono:wght@400;500&display=swap');
707
+ @keyframes dual-ring-spin { to { transform: rotate(360deg); } }
708
+ `), /* @__PURE__ */ React7.createElement("div", { style: { display: "inline-flex", flexDirection: "column", alignItems: "center", gap: "12px" } }, /* @__PURE__ */ React7.createElement(
709
+ "div",
710
+ {
711
+ role: "status",
712
+ "aria-label": label || "Loading",
713
+ style: {
714
+ width: size + "px",
715
+ height: size + "px",
716
+ position: "relative",
717
+ flexShrink: 0
718
+ }
719
+ },
720
+ /* @__PURE__ */ React7.createElement(
721
+ "div",
722
+ {
723
+ ref: outerRef,
724
+ style: {
725
+ position: "absolute",
726
+ inset: 0,
727
+ borderRadius: "50%",
728
+ border: borderWidth + "px solid transparent",
729
+ borderTopColor: outerColor
730
+ }
731
+ }
732
+ ),
733
+ /* @__PURE__ */ React7.createElement(
734
+ "div",
735
+ {
736
+ ref: innerRef,
737
+ style: {
738
+ position: "absolute",
739
+ top: innerInset + "px",
740
+ left: innerInset + "px",
741
+ width: innerSize + "px",
742
+ height: innerSize + "px",
743
+ borderRadius: "50%",
744
+ border: borderWidth + "px solid transparent",
745
+ borderBottomColor: innerColor
746
+ }
747
+ }
748
+ )
749
+ ), label && /* @__PURE__ */ React7.createElement("span", { style: {
750
+ fontFamily: "'DM Mono', monospace",
751
+ fontSize: "11px",
752
+ letterSpacing: "0.1em",
753
+ color: "#999",
754
+ textTransform: "uppercase"
755
+ } }, label)));
756
+ };
632
757
  export {
633
758
  Button,
634
759
  Card,
760
+ DualRingLoader,
635
761
  ECommerceCard,
636
762
  PricingCard,
637
- Profilecard
763
+ Profilecard,
764
+ ShoesCard
638
765
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bhoomi-virtual-ui-library",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "files": [