@farzadbagheri/fb-components 0.1.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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/dist/ai.cjs +16 -0
  4. package/dist/ai.cjs.map +1 -0
  5. package/dist/ai.css +176 -0
  6. package/dist/ai.css.map +1 -0
  7. package/dist/ai.d.cts +33 -0
  8. package/dist/ai.d.ts +33 -0
  9. package/dist/ai.js +3 -0
  10. package/dist/ai.js.map +1 -0
  11. package/dist/backgrounds.cjs +32 -0
  12. package/dist/backgrounds.cjs.map +1 -0
  13. package/dist/backgrounds.css +253 -0
  14. package/dist/backgrounds.css.map +1 -0
  15. package/dist/backgrounds.d.cts +71 -0
  16. package/dist/backgrounds.d.ts +71 -0
  17. package/dist/backgrounds.js +3 -0
  18. package/dist/backgrounds.js.map +1 -0
  19. package/dist/buttons.cjs +20 -0
  20. package/dist/buttons.cjs.map +1 -0
  21. package/dist/buttons.css +116 -0
  22. package/dist/buttons.css.map +1 -0
  23. package/dist/buttons.d.cts +40 -0
  24. package/dist/buttons.d.ts +40 -0
  25. package/dist/buttons.js +3 -0
  26. package/dist/buttons.js.map +1 -0
  27. package/dist/chunk-4FWJRWS5.cjs +125 -0
  28. package/dist/chunk-4FWJRWS5.cjs.map +1 -0
  29. package/dist/chunk-BSEOOGOV.cjs +217 -0
  30. package/dist/chunk-BSEOOGOV.cjs.map +1 -0
  31. package/dist/chunk-C3ASXASL.cjs +205 -0
  32. package/dist/chunk-C3ASXASL.cjs.map +1 -0
  33. package/dist/chunk-CTD2GDO6.cjs +121 -0
  34. package/dist/chunk-CTD2GDO6.cjs.map +1 -0
  35. package/dist/chunk-EIE6FLCL.js +202 -0
  36. package/dist/chunk-EIE6FLCL.js.map +1 -0
  37. package/dist/chunk-H2AV67DY.cjs +260 -0
  38. package/dist/chunk-H2AV67DY.cjs.map +1 -0
  39. package/dist/chunk-H6Y3EJPA.cjs +83 -0
  40. package/dist/chunk-H6Y3EJPA.cjs.map +1 -0
  41. package/dist/chunk-JHOJY54P.js +123 -0
  42. package/dist/chunk-JHOJY54P.js.map +1 -0
  43. package/dist/chunk-JWV3IITG.js +80 -0
  44. package/dist/chunk-JWV3IITG.js.map +1 -0
  45. package/dist/chunk-K5QRX5CZ.js +194 -0
  46. package/dist/chunk-K5QRX5CZ.js.map +1 -0
  47. package/dist/chunk-MKCSRMHF.cjs +198 -0
  48. package/dist/chunk-MKCSRMHF.cjs.map +1 -0
  49. package/dist/chunk-R2F3FTBL.js +119 -0
  50. package/dist/chunk-R2F3FTBL.js.map +1 -0
  51. package/dist/chunk-ROKPXWY2.cjs +198 -0
  52. package/dist/chunk-ROKPXWY2.cjs.map +1 -0
  53. package/dist/chunk-RUSFF3MZ.js +214 -0
  54. package/dist/chunk-RUSFF3MZ.js.map +1 -0
  55. package/dist/chunk-T7CC3CLH.js +195 -0
  56. package/dist/chunk-T7CC3CLH.js.map +1 -0
  57. package/dist/chunk-UWQ5QNE3.cjs +311 -0
  58. package/dist/chunk-UWQ5QNE3.cjs.map +1 -0
  59. package/dist/chunk-WDUETPNG.js +256 -0
  60. package/dist/chunk-WDUETPNG.js.map +1 -0
  61. package/dist/chunk-YQSTEIU5.js +304 -0
  62. package/dist/chunk-YQSTEIU5.js.map +1 -0
  63. package/dist/data.cjs +20 -0
  64. package/dist/data.cjs.map +1 -0
  65. package/dist/data.css +151 -0
  66. package/dist/data.css.map +1 -0
  67. package/dist/data.d.cts +47 -0
  68. package/dist/data.d.ts +47 -0
  69. package/dist/data.js +3 -0
  70. package/dist/data.js.map +1 -0
  71. package/dist/heroes.cjs +12 -0
  72. package/dist/heroes.cjs.map +1 -0
  73. package/dist/heroes.css +190 -0
  74. package/dist/heroes.css.map +1 -0
  75. package/dist/heroes.d.cts +19 -0
  76. package/dist/heroes.d.ts +19 -0
  77. package/dist/heroes.js +3 -0
  78. package/dist/heroes.js.map +1 -0
  79. package/dist/index.cjs +104 -0
  80. package/dist/index.cjs.map +1 -0
  81. package/dist/index.css +1269 -0
  82. package/dist/index.css.map +1 -0
  83. package/dist/index.d.cts +10 -0
  84. package/dist/index.d.ts +10 -0
  85. package/dist/index.js +11 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/landing.cjs +12 -0
  88. package/dist/landing.cjs.map +1 -0
  89. package/dist/landing.css +137 -0
  90. package/dist/landing.css.map +1 -0
  91. package/dist/landing.d.cts +14 -0
  92. package/dist/landing.d.ts +14 -0
  93. package/dist/landing.js +3 -0
  94. package/dist/landing.js.map +1 -0
  95. package/dist/motion.cjs +16 -0
  96. package/dist/motion.cjs.map +1 -0
  97. package/dist/motion.css +79 -0
  98. package/dist/motion.css.map +1 -0
  99. package/dist/motion.d.cts +26 -0
  100. package/dist/motion.d.ts +26 -0
  101. package/dist/motion.js +3 -0
  102. package/dist/motion.js.map +1 -0
  103. package/dist/text.cjs +16 -0
  104. package/dist/text.cjs.map +1 -0
  105. package/dist/text.css +72 -0
  106. package/dist/text.css.map +1 -0
  107. package/dist/text.d.cts +28 -0
  108. package/dist/text.d.ts +28 -0
  109. package/dist/text.js +3 -0
  110. package/dist/text.js.map +1 -0
  111. package/dist/ui.cjs +16 -0
  112. package/dist/ui.cjs.map +1 -0
  113. package/dist/ui.css +95 -0
  114. package/dist/ui.css.map +1 -0
  115. package/dist/ui.d.cts +28 -0
  116. package/dist/ui.d.ts +28 -0
  117. package/dist/ui.js +3 -0
  118. package/dist/ui.js.map +1 -0
  119. package/package.json +134 -0
@@ -0,0 +1,198 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/motion/GlowCursor.tsx
7
+ function GlowCursor({
8
+ children,
9
+ color = "#825dff",
10
+ size = 110,
11
+ blur = 35,
12
+ opacity = 0.45,
13
+ followSpeed = 0.12,
14
+ className = ""
15
+ }) {
16
+ const [
17
+ point,
18
+ setPoint
19
+ ] = react.useState({
20
+ x: 0,
21
+ y: 0
22
+ });
23
+ return /* @__PURE__ */ jsxRuntime.jsxs(
24
+ "div",
25
+ {
26
+ className: `fb-glow-cursor ${className}`,
27
+ onMouseMove: (event) => {
28
+ const rect = event.currentTarget.getBoundingClientRect();
29
+ setPoint({
30
+ x: event.clientX - rect.left,
31
+ y: event.clientY - rect.top
32
+ });
33
+ },
34
+ children: [
35
+ /* @__PURE__ */ jsxRuntime.jsx(
36
+ "div",
37
+ {
38
+ className: "fb-glow-cursor__glow",
39
+ style: {
40
+ width: size,
41
+ height: size,
42
+ left: point.x,
43
+ top: point.y,
44
+ background: color,
45
+ filter: `blur(${blur}px)`,
46
+ opacity,
47
+ transitionDuration: `${followSpeed}s`
48
+ }
49
+ }
50
+ ),
51
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fb-glow-cursor__content", children })
52
+ ]
53
+ }
54
+ );
55
+ }
56
+ function MagneticCursor({
57
+ children,
58
+ color = "#b99cff",
59
+ size = 18,
60
+ ringSize = 44,
61
+ followSpeed = 0.14,
62
+ magneticStrength = 0.25,
63
+ className = "",
64
+ style,
65
+ ...props
66
+ }) {
67
+ const containerRef = react.useRef(
68
+ null
69
+ );
70
+ const [
71
+ point,
72
+ setPoint
73
+ ] = react.useState({
74
+ x: 0,
75
+ y: 0
76
+ });
77
+ const [
78
+ visible,
79
+ setVisible
80
+ ] = react.useState(false);
81
+ const [
82
+ hoveringTarget,
83
+ setHoveringTarget
84
+ ] = react.useState(false);
85
+ react.useEffect(() => {
86
+ const element = containerRef.current;
87
+ if (!element) {
88
+ return;
89
+ }
90
+ function handlePointerMove(event) {
91
+ const rect = element.getBoundingClientRect();
92
+ let x = event.clientX - rect.left;
93
+ let y = event.clientY - rect.top;
94
+ const target = event.target?.closest(
95
+ "[data-magnetic-target]"
96
+ );
97
+ if (target) {
98
+ const targetRect = target.getBoundingClientRect();
99
+ const centerX = targetRect.left + targetRect.width / 2;
100
+ const centerY = targetRect.top + targetRect.height / 2;
101
+ x += (centerX - event.clientX) * magneticStrength;
102
+ y += (centerY - event.clientY) * magneticStrength;
103
+ setHoveringTarget(
104
+ true
105
+ );
106
+ } else {
107
+ setHoveringTarget(
108
+ false
109
+ );
110
+ }
111
+ setPoint({
112
+ x,
113
+ y
114
+ });
115
+ setVisible(
116
+ true
117
+ );
118
+ }
119
+ function handlePointerLeave() {
120
+ setVisible(
121
+ false
122
+ );
123
+ setHoveringTarget(
124
+ false
125
+ );
126
+ }
127
+ element.addEventListener(
128
+ "pointermove",
129
+ handlePointerMove
130
+ );
131
+ element.addEventListener(
132
+ "pointerleave",
133
+ handlePointerLeave
134
+ );
135
+ return () => {
136
+ element.removeEventListener(
137
+ "pointermove",
138
+ handlePointerMove
139
+ );
140
+ element.removeEventListener(
141
+ "pointerleave",
142
+ handlePointerLeave
143
+ );
144
+ };
145
+ }, [
146
+ magneticStrength
147
+ ]);
148
+ return /* @__PURE__ */ jsxRuntime.jsxs(
149
+ "div",
150
+ {
151
+ ...props,
152
+ ref: containerRef,
153
+ className: `fb-magnetic-cursor ${className}`,
154
+ style: {
155
+ ...style,
156
+ cursor: "none"
157
+ },
158
+ children: [
159
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fb-magnetic-cursor__content", children }),
160
+ /* @__PURE__ */ jsxRuntime.jsx(
161
+ "span",
162
+ {
163
+ "aria-hidden": "true",
164
+ className: `fb-magnetic-cursor__ring ${visible ? "is-visible" : ""} ${hoveringTarget ? "is-targeting" : ""}`,
165
+ style: {
166
+ width: ringSize,
167
+ height: ringSize,
168
+ left: point.x,
169
+ top: point.y,
170
+ borderColor: color,
171
+ transitionDuration: `${followSpeed}s`
172
+ }
173
+ }
174
+ ),
175
+ /* @__PURE__ */ jsxRuntime.jsx(
176
+ "span",
177
+ {
178
+ "aria-hidden": "true",
179
+ className: `fb-magnetic-cursor__dot ${visible ? "is-visible" : ""}`,
180
+ style: {
181
+ width: size,
182
+ height: size,
183
+ left: point.x,
184
+ top: point.y,
185
+ background: color,
186
+ boxShadow: `0 0 ${size}px ${color}`
187
+ }
188
+ }
189
+ )
190
+ ]
191
+ }
192
+ );
193
+ }
194
+
195
+ exports.GlowCursor = GlowCursor;
196
+ exports.MagneticCursor = MagneticCursor;
197
+ //# sourceMappingURL=chunk-MKCSRMHF.cjs.map
198
+ //# sourceMappingURL=chunk-MKCSRMHF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/motion/GlowCursor.tsx","../src/motion/MagneticCursor.tsx"],"names":["useState","jsxs","jsx","useRef","useEffect"],"mappings":";;;;;;AA6BO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EAEA,KAAA,GACE,SAAA;AAAA,EAEF,IAAA,GACE,GAAA;AAAA,EAEF,IAAA,GACE,EAAA;AAAA,EAEF,OAAA,GACE,IAAA;AAAA,EAEF,WAAA,GACE,IAAA;AAAA,EAEF,SAAA,GACE;AACJ,CAAA,EAAoB;AAClB,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA;AAAA,MAEAA,cAAA,CAAS;AAAA,IACP,CAAA,EAAG,CAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACJ,CAAA;AAEH,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kBAAkB,SAAS,CAAA,CAAA;AAAA,MACtC,WAAA,EAAa,CACX,KAAA,KACG;AACH,QAAA,MAAM,IAAA,GACJ,KAAA,CAAM,aAAA,CAAc,qBAAA,EAAsB;AAE5C,QAAA,QAAA,CAAS;AAAA,UACP,CAAA,EACE,KAAA,CAAM,OAAA,GACN,IAAA,CAAK,IAAA;AAAA,UAEP,CAAA,EACE,KAAA,CAAM,OAAA,GACN,IAAA,CAAK;AAAA,SACR,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,KAAA,EACE,IAAA;AAAA,cAEF,MAAA,EACE,IAAA;AAAA,cAEF,MACE,KAAA,CAAM,CAAA;AAAA,cAER,KACE,KAAA,CAAM,CAAA;AAAA,cAER,UAAA,EACE,KAAA;AAAA,cAEF,MAAA,EACE,QAAQ,IAAI,CAAA,GAAA,CAAA;AAAA,cAEd,OAAA;AAAA,cAEA,kBAAA,EACE,GAAG,WAAW,CAAA,CAAA;AAAA;AAClB;AAAA,SACF;AAAA,wBAEAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AC7EO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EAEA,KAAA,GAAQ,SAAA;AAAA,EAER,IAAA,GAAO,EAAA;AAAA,EAEP,QAAA,GAAW,EAAA;AAAA,EAEX,WAAA,GAAc,IAAA;AAAA,EAEd,gBAAA,GAAmB,IAAA;AAAA,EAEnB,SAAA,GAAY,EAAA;AAAA,EAEZ,KAAA;AAAA,EAEA,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,MAAM,YAAA,GACJC,YAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA;AAAA,MAEAH,cAAAA,CAAgB;AAAA,IACd,CAAA,EAAG,CAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACJ,CAAA;AAEH,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA;AAAA,GACF,GACEA,eAAS,KAAK,CAAA;AAEhB,EAAA,MAAM;AAAA,IACJ,cAAA;AAAA,IACA;AAAA,GACF,GACEA,eAAS,KAAK,CAAA;AAEhB,EAAAI,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UACJ,YAAA,CAAa,OAAA;AAEf,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,SAAS,kBACP,KAAA,EACA;AACA,MAAA,MAAM,IAAA,GACJ,QAAS,qBAAA,EAAsB;AAEjC,MAAA,IAAI,CAAA,GACF,KAAA,CAAM,OAAA,GACN,IAAA,CAAK,IAAA;AAEP,MAAA,IAAI,CAAA,GACF,KAAA,CAAM,OAAA,GACN,IAAA,CAAK,GAAA;AAEP,MAAA,MAAM,MAAA,GAEF,MAAM,MAAA,EAEL,OAAA;AAAA,QACD;AAAA,OACF;AAIF,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,UAAA,GACJ,OAAO,qBAAA,EAAsB;AAE/B,QAAA,MAAM,OAAA,GACJ,UAAA,CAAW,IAAA,GACX,UAAA,CAAW,KAAA,GACT,CAAA;AAEJ,QAAA,MAAM,OAAA,GACJ,UAAA,CAAW,GAAA,GACX,UAAA,CAAW,MAAA,GACT,CAAA;AAEJ,QAAA,CAAA,IAAA,CAEI,OAAA,GACA,MAAM,OAAA,IAER,gBAAA;AAEF,QAAA,CAAA,IAAA,CAEI,OAAA,GACA,MAAM,OAAA,IAER,gBAAA;AAEF,QAAA,iBAAA;AAAA,UACE;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,iBAAA;AAAA,UACE;AAAA,SACF;AAAA,MACF;AAEA,MAAA,QAAA,CAAS;AAAA,QACP,CAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,UAAA;AAAA,QACE;AAAA,OACF;AAAA,IACF;AAEA,IAAA,SAAS,kBAAA,GAAqB;AAC5B,MAAA,UAAA;AAAA,QACE;AAAA,OACF;AAEA,MAAA,iBAAA;AAAA,QACE;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,gBAAA;AAAA,MACN,aAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAA,CAAQ,gBAAA;AAAA,MACN,cAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,mBAAA;AAAA,QACN,aAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,OAAA,CAAQ,mBAAA;AAAA,QACN,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD;AAAA,GACD,CAAA;AAED,EAAA,uBACEH,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA,EACE,YAAA;AAAA,MAEF,SAAA,EAAW,sBAAsB,SAAS,CAAA,CAAA;AAAA,MAC1C,KAAA,EAAO;AAAA,QACL,GAAG,KAAA;AAAA,QAEH,MAAA,EACE;AAAA,OACJ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACZ,QAAA,EACH,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAW,4BACT,OAAA,GACI,YAAA,GACA,EACN,CAAA,CAAA,EACE,cAAA,GACI,iBACA,EACN,CAAA,CAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACL,KAAA,EACE,QAAA;AAAA,cAEF,MAAA,EACE,QAAA;AAAA,cAEF,MACE,KAAA,CAAM,CAAA;AAAA,cAER,KACE,KAAA,CAAM,CAAA;AAAA,cAER,WAAA,EACE,KAAA;AAAA,cAEF,kBAAA,EACE,GAAG,WAAW,CAAA,CAAA;AAAA;AAClB;AAAA,SACF;AAAA,wBAEAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAW,CAAA,wBAAA,EACT,OAAA,GACI,YAAA,GACA,EACN,CAAA,CAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACL,KAAA,EACE,IAAA;AAAA,cAEF,MAAA,EACE,IAAA;AAAA,cAEF,MACE,KAAA,CAAM,CAAA;AAAA,cAER,KACE,KAAA,CAAM,CAAA;AAAA,cAER,UAAA,EACE,KAAA;AAAA,cAEF,SAAA,EACE,CAAA,IAAA,EAAO,IAAI,CAAA,GAAA,EAAM,KAAK,CAAA;AAAA;AAC1B;AAAA;AACF;AAAA;AAAA,GACF;AAEJ","file":"chunk-MKCSRMHF.cjs","sourcesContent":["import {\r\n useState,\r\n} from \"react\";\r\n\r\nimport \"./GlowCursor.css\";\r\n\r\nexport interface GlowCursorProps {\r\n children?:\r\n React.ReactNode;\r\n\r\n color?:\r\n string;\r\n\r\n size?:\r\n number;\r\n\r\n blur?:\r\n number;\r\n\r\n opacity?:\r\n number;\r\n\r\n followSpeed?:\r\n number;\r\n\r\n className?:\r\n string;\r\n}\r\n\r\nexport function GlowCursor({\r\n children,\r\n\r\n color =\r\n \"#825dff\",\r\n\r\n size =\r\n 110,\r\n\r\n blur =\r\n 35,\r\n\r\n opacity =\r\n 0.45,\r\n\r\n followSpeed =\r\n 0.12,\r\n\r\n className =\r\n \"\",\r\n}: GlowCursorProps) {\r\n const [\r\n point,\r\n setPoint,\r\n ] =\r\n useState({\r\n x: 0,\r\n y: 0,\r\n });\r\n\r\n return (\r\n <div\r\n className={`fb-glow-cursor ${className}`}\r\n onMouseMove={(\r\n event\r\n ) => {\r\n const rect =\r\n event.currentTarget.getBoundingClientRect();\r\n\r\n setPoint({\r\n x:\r\n event.clientX -\r\n rect.left,\r\n\r\n y:\r\n event.clientY -\r\n rect.top,\r\n });\r\n }}\r\n >\r\n <div\r\n className=\"fb-glow-cursor__glow\"\r\n style={{\r\n width:\r\n size,\r\n\r\n height:\r\n size,\r\n\r\n left:\r\n point.x,\r\n\r\n top:\r\n point.y,\r\n\r\n background:\r\n color,\r\n\r\n filter:\r\n `blur(${blur}px)`,\r\n\r\n opacity,\r\n\r\n transitionDuration:\r\n `${followSpeed}s`,\r\n }}\r\n />\r\n\r\n <div className=\"fb-glow-cursor__content\">\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n}","import {\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\n\r\nimport type {\r\n HTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./MagneticCursor.css\";\r\n\r\nexport interface MagneticCursorProps\r\n extends HTMLAttributes<HTMLDivElement> {\r\n children?: ReactNode;\r\n\r\n color?: string;\r\n\r\n size?: number;\r\n\r\n ringSize?: number;\r\n\r\n followSpeed?: number;\r\n\r\n magneticStrength?: number;\r\n\r\n className?: string;\r\n}\r\n\r\ninterface Point {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport function MagneticCursor({\r\n children,\r\n\r\n color = \"#b99cff\",\r\n\r\n size = 18,\r\n\r\n ringSize = 44,\r\n\r\n followSpeed = 0.14,\r\n\r\n magneticStrength = 0.25,\r\n\r\n className = \"\",\r\n\r\n style,\r\n\r\n ...props\r\n}: MagneticCursorProps) {\r\n const containerRef =\r\n useRef<HTMLDivElement>(\r\n null\r\n );\r\n\r\n const [\r\n point,\r\n setPoint,\r\n ] =\r\n useState<Point>({\r\n x: 0,\r\n y: 0,\r\n });\r\n\r\n const [\r\n visible,\r\n setVisible,\r\n ] =\r\n useState(false);\r\n\r\n const [\r\n hoveringTarget,\r\n setHoveringTarget,\r\n ] =\r\n useState(false);\r\n\r\n useEffect(() => {\r\n const element =\r\n containerRef.current;\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n function handlePointerMove(\r\n event: PointerEvent\r\n ) {\r\n const rect =\r\n element!.getBoundingClientRect();\r\n\r\n let x =\r\n event.clientX -\r\n rect.left;\r\n\r\n let y =\r\n event.clientY -\r\n rect.top;\r\n\r\n const target =\r\n (\r\n event.target as\r\n HTMLElement | null\r\n )?.closest(\r\n \"[data-magnetic-target]\"\r\n ) as\r\n | HTMLElement\r\n | null;\r\n\r\n if (target) {\r\n const targetRect =\r\n target.getBoundingClientRect();\r\n\r\n const centerX =\r\n targetRect.left +\r\n targetRect.width /\r\n 2;\r\n\r\n const centerY =\r\n targetRect.top +\r\n targetRect.height /\r\n 2;\r\n\r\n x +=\r\n (\r\n centerX -\r\n event.clientX\r\n ) *\r\n magneticStrength;\r\n\r\n y +=\r\n (\r\n centerY -\r\n event.clientY\r\n ) *\r\n magneticStrength;\r\n\r\n setHoveringTarget(\r\n true\r\n );\r\n } else {\r\n setHoveringTarget(\r\n false\r\n );\r\n }\r\n\r\n setPoint({\r\n x,\r\n y,\r\n });\r\n\r\n setVisible(\r\n true\r\n );\r\n }\r\n\r\n function handlePointerLeave() {\r\n setVisible(\r\n false\r\n );\r\n\r\n setHoveringTarget(\r\n false\r\n );\r\n }\r\n\r\n element.addEventListener(\r\n \"pointermove\",\r\n handlePointerMove\r\n );\r\n\r\n element.addEventListener(\r\n \"pointerleave\",\r\n handlePointerLeave\r\n );\r\n\r\n return () => {\r\n element.removeEventListener(\r\n \"pointermove\",\r\n handlePointerMove\r\n );\r\n\r\n element.removeEventListener(\r\n \"pointerleave\",\r\n handlePointerLeave\r\n );\r\n };\r\n }, [\r\n magneticStrength,\r\n ]);\r\n\r\n return (\r\n <div\r\n {...props}\r\n ref={\r\n containerRef\r\n }\r\n className={`fb-magnetic-cursor ${className}`}\r\n style={{\r\n ...style,\r\n\r\n cursor:\r\n \"none\",\r\n }}\r\n >\r\n <div className=\"fb-magnetic-cursor__content\">\r\n {children}\r\n </div>\r\n\r\n <span\r\n aria-hidden=\"true\"\r\n className={`fb-magnetic-cursor__ring ${\r\n visible\r\n ? \"is-visible\"\r\n : \"\"\r\n } ${\r\n hoveringTarget\r\n ? \"is-targeting\"\r\n : \"\"\r\n }`}\r\n style={{\r\n width:\r\n ringSize,\r\n\r\n height:\r\n ringSize,\r\n\r\n left:\r\n point.x,\r\n\r\n top:\r\n point.y,\r\n\r\n borderColor:\r\n color,\r\n\r\n transitionDuration:\r\n `${followSpeed}s`,\r\n }}\r\n />\r\n\r\n <span\r\n aria-hidden=\"true\"\r\n className={`fb-magnetic-cursor__dot ${\r\n visible\r\n ? \"is-visible\"\r\n : \"\"\r\n }`}\r\n style={{\r\n width:\r\n size,\r\n\r\n height:\r\n size,\r\n\r\n left:\r\n point.x,\r\n\r\n top:\r\n point.y,\r\n\r\n background:\r\n color,\r\n\r\n boxShadow:\r\n `0 0 ${size}px ${color}`,\r\n }}\r\n />\r\n </div>\r\n );\r\n}"]}
@@ -0,0 +1,119 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+
3
+ // src/landing/StartupLanding.tsx
4
+ function StartupLanding({
5
+ accent = "#7d63ff",
6
+ background = "#08080c",
7
+ radius = 20,
8
+ showMetrics = true,
9
+ showFeatures = true,
10
+ className = "",
11
+ style,
12
+ ...props
13
+ }) {
14
+ return /* @__PURE__ */ jsxs(
15
+ "section",
16
+ {
17
+ ...props,
18
+ className: `fb-startup-landing ${className}`,
19
+ style: {
20
+ ...style,
21
+ background,
22
+ ["--fb-startup-accent"]: accent,
23
+ ["--fb-startup-radius"]: `${radius}px`
24
+ },
25
+ children: [
26
+ /* @__PURE__ */ jsxs("nav", { className: "fb-startup-landing__nav", children: [
27
+ /* @__PURE__ */ jsx("strong", { children: "ACME." }),
28
+ /* @__PURE__ */ jsxs("div", { children: [
29
+ /* @__PURE__ */ jsx("a", { href: "#product", children: "Product" }),
30
+ /* @__PURE__ */ jsx("a", { href: "#features", children: "Features" }),
31
+ /* @__PURE__ */ jsx("a", { href: "#pricing", children: "Pricing" })
32
+ ] }),
33
+ /* @__PURE__ */ jsx(
34
+ "button",
35
+ {
36
+ type: "button",
37
+ children: "Join waitlist"
38
+ }
39
+ )
40
+ ] }),
41
+ /* @__PURE__ */ jsxs("div", { className: "fb-startup-landing__hero", children: [
42
+ /* @__PURE__ */ jsx("span", { children: "LAUNCHING 2026" }),
43
+ /* @__PURE__ */ jsxs("h2", { children: [
44
+ "From idea",
45
+ /* @__PURE__ */ jsx("br", {}),
46
+ "to momentum."
47
+ ] }),
48
+ /* @__PURE__ */ jsx("p", { children: "A focused operating layer for ambitious startups that want to build, launch and learn faster." }),
49
+ /* @__PURE__ */ jsx(
50
+ "button",
51
+ {
52
+ type: "button",
53
+ children: "Get early access"
54
+ }
55
+ )
56
+ ] }),
57
+ showMetrics && /* @__PURE__ */ jsx("div", { className: "fb-startup-landing__metrics", children: [
58
+ [
59
+ "42K",
60
+ "Early users"
61
+ ],
62
+ [
63
+ "4.9",
64
+ "Average rating"
65
+ ],
66
+ [
67
+ "99.9%",
68
+ "Platform uptime"
69
+ ]
70
+ ].map(
71
+ ([
72
+ value,
73
+ label
74
+ ]) => /* @__PURE__ */ jsxs(
75
+ "article",
76
+ {
77
+ children: [
78
+ /* @__PURE__ */ jsx("strong", { children: value }),
79
+ /* @__PURE__ */ jsx("span", { children: label })
80
+ ]
81
+ },
82
+ label
83
+ )
84
+ ) }),
85
+ showFeatures && /* @__PURE__ */ jsx(
86
+ "div",
87
+ {
88
+ id: "features",
89
+ className: "fb-startup-landing__features",
90
+ children: [
91
+ "Ship",
92
+ "Measure",
93
+ "Scale"
94
+ ].map(
95
+ (feature, index) => /* @__PURE__ */ jsxs(
96
+ "article",
97
+ {
98
+ children: [
99
+ /* @__PURE__ */ jsxs("span", { children: [
100
+ "0",
101
+ index + 1
102
+ ] }),
103
+ /* @__PURE__ */ jsx("h3", { children: feature }),
104
+ /* @__PURE__ */ jsx("p", { children: "Simple tools designed around the decisions that matter." })
105
+ ]
106
+ },
107
+ feature
108
+ )
109
+ )
110
+ }
111
+ )
112
+ ]
113
+ }
114
+ );
115
+ }
116
+
117
+ export { StartupLanding };
118
+ //# sourceMappingURL=chunk-R2F3FTBL.js.map
119
+ //# sourceMappingURL=chunk-R2F3FTBL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/landing/StartupLanding.tsx"],"names":[],"mappings":"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","file":"chunk-R2F3FTBL.js","sourcesContent":["import type {\r\n HTMLAttributes,\r\n} from \"react\";\r\n\r\nimport \"./StartupLanding.css\";\r\n\r\nexport interface StartupLandingProps\r\n extends HTMLAttributes<HTMLElement> {\r\n accent?: string;\r\n background?: string;\r\n radius?: number;\r\n\r\n showMetrics?: boolean;\r\n showFeatures?: boolean;\r\n\r\n className?: string;\r\n}\r\n\r\nexport function StartupLanding({\r\n accent = \"#7d63ff\",\r\n background = \"#08080c\",\r\n radius = 20,\r\n\r\n showMetrics = true,\r\n showFeatures = true,\r\n\r\n className = \"\",\r\n style,\r\n\r\n ...props\r\n}: StartupLandingProps) {\r\n return (\r\n <section\r\n {...props}\r\n className={`fb-startup-landing ${className}`}\r\n style={{\r\n ...style,\r\n\r\n background,\r\n\r\n [\"--fb-startup-accent\" as string]:\r\n accent,\r\n\r\n [\"--fb-startup-radius\" as string]:\r\n `${radius}px`,\r\n }}\r\n >\r\n <nav className=\"fb-startup-landing__nav\">\r\n <strong>\r\n ACME.\r\n </strong>\r\n\r\n <div>\r\n <a href=\"#product\">\r\n Product\r\n </a>\r\n\r\n <a href=\"#features\">\r\n Features\r\n </a>\r\n\r\n <a href=\"#pricing\">\r\n Pricing\r\n </a>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n >\r\n Join waitlist\r\n </button>\r\n </nav>\r\n\r\n <div className=\"fb-startup-landing__hero\">\r\n <span>\r\n LAUNCHING 2026\r\n </span>\r\n\r\n <h2>\r\n From idea\r\n <br />\r\n to momentum.\r\n </h2>\r\n\r\n <p>\r\n A focused operating\r\n layer for ambitious\r\n startups that want to\r\n build, launch and learn\r\n faster.\r\n </p>\r\n\r\n <button\r\n type=\"button\"\r\n >\r\n Get early access\r\n </button>\r\n </div>\r\n\r\n {showMetrics && (\r\n <div className=\"fb-startup-landing__metrics\">\r\n {[\r\n [\r\n \"42K\",\r\n \"Early users\",\r\n ],\r\n [\r\n \"4.9\",\r\n \"Average rating\",\r\n ],\r\n [\r\n \"99.9%\",\r\n \"Platform uptime\",\r\n ],\r\n ].map(\r\n (\r\n [\r\n value,\r\n label,\r\n ]\r\n ) => (\r\n <article\r\n key={\r\n label\r\n }\r\n >\r\n <strong>\r\n {value}\r\n </strong>\r\n\r\n <span>\r\n {label}\r\n </span>\r\n </article>\r\n )\r\n )}\r\n </div>\r\n )}\r\n\r\n {showFeatures && (\r\n <div\r\n id=\"features\"\r\n className=\"fb-startup-landing__features\"\r\n >\r\n {[\r\n \"Ship\",\r\n \"Measure\",\r\n \"Scale\",\r\n ].map(\r\n (\r\n feature,\r\n index\r\n ) => (\r\n <article\r\n key={\r\n feature\r\n }\r\n >\r\n <span>\r\n 0{\r\n index +\r\n 1\r\n }\r\n </span>\r\n\r\n <h3>\r\n {feature}\r\n </h3>\r\n\r\n <p>\r\n Simple tools\r\n designed around\r\n the decisions\r\n that matter.\r\n </p>\r\n </article>\r\n )\r\n )}\r\n </div>\r\n )}\r\n </section>\r\n );\r\n}"]}
@@ -0,0 +1,198 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/buttons/MagneticButton.tsx
7
+ function MagneticButton({
8
+ children = "Explore",
9
+ background = "#ffffff",
10
+ textColor = "#000000",
11
+ fontSize = 14,
12
+ radius = 999,
13
+ paddingX = 22,
14
+ paddingY = 13,
15
+ strength = 0.3,
16
+ className = ""
17
+ }) {
18
+ const [
19
+ offset,
20
+ setOffset
21
+ ] = react.useState({
22
+ x: 0,
23
+ y: 0
24
+ });
25
+ function handleMove(event) {
26
+ const rect = event.currentTarget.getBoundingClientRect();
27
+ const centerX = rect.width / 2;
28
+ const centerY = rect.height / 2;
29
+ const x = event.clientX - rect.left - centerX;
30
+ const y = event.clientY - rect.top - centerY;
31
+ setOffset({
32
+ x: x * strength,
33
+ y: y * strength
34
+ });
35
+ }
36
+ return /* @__PURE__ */ jsxRuntime.jsx(
37
+ "button",
38
+ {
39
+ type: "button",
40
+ className: `fb-magnetic-button ${className}`,
41
+ onMouseMove: handleMove,
42
+ onMouseLeave: () => setOffset({
43
+ x: 0,
44
+ y: 0
45
+ }),
46
+ style: {
47
+ background,
48
+ color: textColor,
49
+ fontSize,
50
+ borderRadius: radius,
51
+ padding: `${paddingY}px ${paddingX}px`,
52
+ transform: `translate3d(
53
+ ${offset.x}px,
54
+ ${offset.y}px,
55
+ 0
56
+ )`
57
+ },
58
+ children
59
+ }
60
+ );
61
+ }
62
+ function GlowButton({
63
+ children = "Get started",
64
+ background = "#7b5cff",
65
+ textColor = "#ffffff",
66
+ glowColor = "#9b7cff",
67
+ glow = 32,
68
+ radius = 14,
69
+ fontSize = 14,
70
+ paddingX = 24,
71
+ className = "",
72
+ style,
73
+ ...props
74
+ }) {
75
+ return /* @__PURE__ */ jsxRuntime.jsxs(
76
+ "button",
77
+ {
78
+ ...props,
79
+ type: props.type ?? "button",
80
+ className: `fb-glow-button ${className}`,
81
+ style: {
82
+ ...style,
83
+ background,
84
+ color: textColor,
85
+ borderRadius: radius,
86
+ fontSize,
87
+ padding: `13px ${paddingX}px`,
88
+ boxShadow: `0 0 ${glow}px ${glowColor}66`,
89
+ ["--fb-glow-button-color"]: glowColor
90
+ },
91
+ children: [
92
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "fb-glow-button__content", children }),
93
+ /* @__PURE__ */ jsxRuntime.jsx(
94
+ "span",
95
+ {
96
+ className: "fb-glow-button__glow",
97
+ "aria-hidden": "true"
98
+ }
99
+ )
100
+ ]
101
+ }
102
+ );
103
+ }
104
+ function hexToRgb(hex) {
105
+ const clean = hex.replace(
106
+ "#",
107
+ ""
108
+ );
109
+ if (clean.length !== 6) {
110
+ return {
111
+ r: 255,
112
+ g: 255,
113
+ b: 255
114
+ };
115
+ }
116
+ return {
117
+ r: parseInt(
118
+ clean.slice(
119
+ 0,
120
+ 2
121
+ ),
122
+ 16
123
+ ),
124
+ g: parseInt(
125
+ clean.slice(
126
+ 2,
127
+ 4
128
+ ),
129
+ 16
130
+ ),
131
+ b: parseInt(
132
+ clean.slice(
133
+ 4,
134
+ 6
135
+ ),
136
+ 16
137
+ )
138
+ };
139
+ }
140
+ function GlassButton({
141
+ children = "Explore",
142
+ textColor = "#ffffff",
143
+ tint = "#ffffff",
144
+ opacity = 0.08,
145
+ blur = 16,
146
+ radius = 16,
147
+ borderOpacity = 0.18,
148
+ className = "",
149
+ style,
150
+ ...props
151
+ }) {
152
+ const rgb = hexToRgb(
153
+ tint
154
+ );
155
+ return /* @__PURE__ */ jsxRuntime.jsxs(
156
+ "button",
157
+ {
158
+ ...props,
159
+ type: props.type ?? "button",
160
+ className: `fb-glass-button ${className}`,
161
+ style: {
162
+ ...style,
163
+ color: textColor,
164
+ background: `rgba(
165
+ ${rgb.r},
166
+ ${rgb.g},
167
+ ${rgb.b},
168
+ ${opacity}
169
+ )`,
170
+ backdropFilter: `blur(${blur}px)`,
171
+ WebkitBackdropFilter: `blur(${blur}px)`,
172
+ borderRadius: radius,
173
+ borderColor: `rgba(
174
+ 255,
175
+ 255,
176
+ 255,
177
+ ${borderOpacity}
178
+ )`
179
+ },
180
+ children: [
181
+ children,
182
+ /* @__PURE__ */ jsxRuntime.jsx(
183
+ "span",
184
+ {
185
+ className: "fb-glass-button__shine",
186
+ "aria-hidden": "true"
187
+ }
188
+ )
189
+ ]
190
+ }
191
+ );
192
+ }
193
+
194
+ exports.GlassButton = GlassButton;
195
+ exports.GlowButton = GlowButton;
196
+ exports.MagneticButton = MagneticButton;
197
+ //# sourceMappingURL=chunk-ROKPXWY2.cjs.map
198
+ //# sourceMappingURL=chunk-ROKPXWY2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/buttons/MagneticButton.tsx","../src/buttons/GlowButton.tsx","../src/buttons/GlassButton.tsx"],"names":["useState","jsx","jsxs"],"mappings":"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","file":"chunk-ROKPXWY2.cjs","sourcesContent":["import {\r\n useState,\r\n} from \"react\";\r\n\r\nimport \"./MagneticButton.css\";\r\n\r\nexport interface MagneticButtonProps {\r\n children?: React.ReactNode;\r\n\r\n background?: string;\r\n textColor?: string;\r\n fontSize?: number;\r\n radius?: number;\r\n paddingX?: number;\r\n paddingY?: number;\r\n strength?: number;\r\n\r\n className?: string;\r\n}\r\n\r\nexport function MagneticButton({\r\n children = \"Explore\",\r\n\r\n background =\r\n \"#ffffff\",\r\n\r\n textColor =\r\n \"#000000\",\r\n\r\n fontSize =\r\n 14,\r\n\r\n radius =\r\n 999,\r\n\r\n paddingX =\r\n 22,\r\n\r\n paddingY =\r\n 13,\r\n\r\n strength =\r\n 0.3,\r\n\r\n className =\r\n \"\",\r\n}: MagneticButtonProps) {\r\n const [\r\n offset,\r\n setOffset,\r\n ] =\r\n useState({\r\n x: 0,\r\n y: 0,\r\n });\r\n\r\n function handleMove(\r\n event:\r\n React.MouseEvent<HTMLButtonElement>\r\n ) {\r\n const rect =\r\n event.currentTarget.getBoundingClientRect();\r\n\r\n const centerX =\r\n rect.width /\r\n 2;\r\n\r\n const centerY =\r\n rect.height /\r\n 2;\r\n\r\n const x =\r\n event.clientX -\r\n rect.left -\r\n centerX;\r\n\r\n const y =\r\n event.clientY -\r\n rect.top -\r\n centerY;\r\n\r\n setOffset({\r\n x:\r\n x *\r\n strength,\r\n\r\n y:\r\n y *\r\n strength,\r\n });\r\n }\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={`fb-magnetic-button ${className}`}\r\n onMouseMove={\r\n handleMove\r\n }\r\n onMouseLeave={() =>\r\n setOffset({\r\n x: 0,\r\n y: 0,\r\n })\r\n }\r\n style={{\r\n background,\r\n color:\r\n textColor,\r\n\r\n fontSize,\r\n\r\n borderRadius:\r\n radius,\r\n\r\n padding:\r\n `${paddingY}px ${paddingX}px`,\r\n\r\n transform:\r\n `translate3d(\r\n ${offset.x}px,\r\n ${offset.y}px,\r\n 0\r\n )`,\r\n }}\r\n >\r\n {children}\r\n </button>\r\n );\r\n}","import type {\r\n ButtonHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./GlowButton.css\";\r\n\r\nexport interface GlowButtonProps\r\n extends Omit<\r\n ButtonHTMLAttributes<HTMLButtonElement>,\r\n \"color\"\r\n > {\r\n children?: ReactNode;\r\n\r\n background?: string;\r\n\r\n textColor?: string;\r\n\r\n glowColor?: string;\r\n\r\n glow?: number;\r\n\r\n radius?: number;\r\n\r\n fontSize?: number;\r\n\r\n paddingX?: number;\r\n}\r\n\r\nexport function GlowButton({\r\n children = \"Get started\",\r\n\r\n background = \"#7b5cff\",\r\n\r\n textColor = \"#ffffff\",\r\n\r\n glowColor = \"#9b7cff\",\r\n\r\n glow = 32,\r\n\r\n radius = 14,\r\n\r\n fontSize = 14,\r\n\r\n paddingX = 24,\r\n\r\n className = \"\",\r\n\r\n style,\r\n\r\n ...props\r\n}: GlowButtonProps) {\r\n return (\r\n <button\r\n {...props}\r\n type={\r\n props.type ??\r\n \"button\"\r\n }\r\n className={`fb-glow-button ${className}`}\r\n style={{\r\n ...style,\r\n\r\n background,\r\n\r\n color:\r\n textColor,\r\n\r\n borderRadius:\r\n radius,\r\n\r\n fontSize,\r\n\r\n padding:\r\n `13px ${paddingX}px`,\r\n\r\n boxShadow:\r\n `0 0 ${glow}px ${glowColor}66`,\r\n\r\n [\"--fb-glow-button-color\" as string]:\r\n glowColor,\r\n }}\r\n >\r\n <span className=\"fb-glow-button__content\">\r\n {\r\n children\r\n }\r\n </span>\r\n\r\n <span\r\n className=\"fb-glow-button__glow\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n );\r\n}","import type {\r\n ButtonHTMLAttributes,\r\n ReactNode,\r\n} from \"react\";\r\n\r\nimport \"./GlassButton.css\";\r\n\r\nexport interface GlassButtonProps\r\n extends Omit<\r\n ButtonHTMLAttributes<HTMLButtonElement>,\r\n \"color\"\r\n > {\r\n children?: ReactNode;\r\n\r\n textColor?: string;\r\n\r\n tint?: string;\r\n\r\n opacity?: number;\r\n\r\n blur?: number;\r\n\r\n radius?: number;\r\n\r\n borderOpacity?: number;\r\n}\r\n\r\nfunction hexToRgb(\r\n hex: string\r\n) {\r\n const clean =\r\n hex.replace(\r\n \"#\",\r\n \"\"\r\n );\r\n\r\n if (\r\n clean.length !==\r\n 6\r\n ) {\r\n return {\r\n r: 255,\r\n g: 255,\r\n b: 255,\r\n };\r\n }\r\n\r\n return {\r\n r:\r\n parseInt(\r\n clean.slice(\r\n 0,\r\n 2\r\n ),\r\n 16\r\n ),\r\n\r\n g:\r\n parseInt(\r\n clean.slice(\r\n 2,\r\n 4\r\n ),\r\n 16\r\n ),\r\n\r\n b:\r\n parseInt(\r\n clean.slice(\r\n 4,\r\n 6\r\n ),\r\n 16\r\n ),\r\n };\r\n}\r\n\r\nexport function GlassButton({\r\n children = \"Explore\",\r\n\r\n textColor = \"#ffffff\",\r\n\r\n tint = \"#ffffff\",\r\n\r\n opacity = 0.08,\r\n\r\n blur = 16,\r\n\r\n radius = 16,\r\n\r\n borderOpacity = 0.18,\r\n\r\n className = \"\",\r\n\r\n style,\r\n\r\n ...props\r\n}: GlassButtonProps) {\r\n const rgb =\r\n hexToRgb(\r\n tint\r\n );\r\n\r\n return (\r\n <button\r\n {...props}\r\n type={\r\n props.type ??\r\n \"button\"\r\n }\r\n className={`fb-glass-button ${className}`}\r\n style={{\r\n ...style,\r\n\r\n color:\r\n textColor,\r\n\r\n background:\r\n `rgba(\r\n ${rgb.r},\r\n ${rgb.g},\r\n ${rgb.b},\r\n ${opacity}\r\n )`,\r\n\r\n backdropFilter:\r\n `blur(${blur}px)`,\r\n\r\n WebkitBackdropFilter:\r\n `blur(${blur}px)`,\r\n\r\n borderRadius:\r\n radius,\r\n\r\n borderColor:\r\n `rgba(\r\n 255,\r\n 255,\r\n 255,\r\n ${borderOpacity}\r\n )`,\r\n }}\r\n >\r\n {\r\n children\r\n }\r\n\r\n <span\r\n className=\"fb-glass-button__shine\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n );\r\n}"]}