bhoomi-virtual-ui-library 1.0.7 → 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,6 +31,7 @@ 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
37
  Profilecard: () => Profilecard,
@@ -717,10 +718,88 @@ var ShoesCard = ({
717
718
  fontFamily: "system-ui,sans-serif"
718
719
  } }, "Buy Now")));
719
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
+ };
720
798
  // Annotate the CommonJS export names for ESM import in node:
721
799
  0 && (module.exports = {
722
800
  Button,
723
801
  Card,
802
+ DualRingLoader,
724
803
  ECommerceCard,
725
804
  PricingCard,
726
805
  Profilecard,
package/dist/index.mjs CHANGED
@@ -677,9 +677,87 @@ var ShoesCard = ({
677
677
  fontFamily: "system-ui,sans-serif"
678
678
  } }, "Buy Now")));
679
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
+ };
680
757
  export {
681
758
  Button,
682
759
  Card,
760
+ DualRingLoader,
683
761
  ECommerceCard,
684
762
  PricingCard,
685
763
  Profilecard,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bhoomi-virtual-ui-library",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "files": [