funuicss 3.5.7 → 3.5.9

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/css/fun.css CHANGED
@@ -31,13 +31,9 @@
31
31
  --text-10xl: 9rem;
32
32
 
33
33
  /* Border radius */
34
- --radius-sm: 0.125rem;
35
- --radius: 0.25rem;
36
- --radius-md: 0.375rem;
37
- --radius-lg: 0.5rem;
38
- --radius-xl: 0.75rem;
39
- --radius-2xl: 1rem;
40
- --radius-full: 9999px;
34
+ --radius-sm: 0.25rem;
35
+ --radius: 0.5rem;
36
+
41
37
 
42
38
 
43
39
 
@@ -50,8 +46,8 @@
50
46
  --z-50: 50;
51
47
 
52
48
 
53
- /* Line heights matching Tailwind defaults */
54
- --leading-normal: 1.5rem; /* For base */
49
+
50
+ --leading-normal: 1.5rem;
55
51
  --leading-xl: 1.75rem;
56
52
  --leading-2xl: 2rem;
57
53
  --leading-3xl: 2.25rem;
@@ -62,8 +58,7 @@
62
58
  --leading-8xl: 1;
63
59
  --leading-9xl: 1;
64
60
  --leading-10xl: 1;
65
-
66
- --leading-none: 1;
61
+ --leading-none: 0;
67
62
 
68
63
 
69
64
  /* default colors */
@@ -74,15 +69,16 @@
74
69
  --raiseBackdrop:blur(20px); /* Raised element color */
75
70
  --borderRgb: 204, 204, 204; /* i want to chnage the opacity for someplaces*/
76
71
  --borderColor:rgb(var(--borderRgb)); /* Border color */
77
- --lighter: #fafafa ;
72
+ --lighter: #F1F1F1 ;
78
73
  --hoverable: #fcfcfc ;
79
74
  --muted: #78716c;
80
75
  --dark: #121212;
81
- --cardBg: var(--raiseOpaque);
76
+ --cardBg: var(--page-bg);
82
77
  --card: 8px 8px 10rem -2rem rgba(0, 0 , 0 , 0.1), /* soft shadow */
83
78
  -8px -8px 4rem 0rem #F2F2F2; /* soft highlight */
84
79
  --linkColor:rgb(58, 58, 58);
85
80
 
81
+
86
82
  /* Primary Colors */
87
83
  --primary: #6366f1;
88
84
  --primary50: #eef2ff;
@@ -195,14 +191,14 @@
195
191
  --smallFont: .79rem ;
196
192
  --smallerFont: .7rem;
197
193
  --navHeight: fit-content ;
198
- --border: 0.1rem solid var(--borderColor);
194
+ --borderWidth:0.1rem;
195
+ --border: var(--borderWidth) solid var(--borderColor);
199
196
  --inputBorder:0.12rem;
200
197
  --input_outline_size:0.127rem;
201
198
  --borderRadius:1rem;
202
199
  --borderRadiusSmall:0.5rem;
203
200
  --borderRadiusMax:2rem;
204
- --InputButtonBorderRadius:0.5rem;
205
- --DefaultBorderRadius:0.5rem;
201
+ --radius:0.5rem;
206
202
  --hoverable: brightness(90%);
207
203
  --linkHover:(139, 185, 254;);
208
204
  --sideBarZindex:13;
@@ -211,11 +207,12 @@
211
207
  --loaderZindex:100;
212
208
  --snackBarZindex:20;
213
209
  --notificationZindex:29;
214
- --inputHeight:2.4rem;
210
+ --inputButtonHeight:2.4rem;
215
211
  --inputPadding:0.5rem 0;
216
212
  --inputRoundedPadding:0.5rem 1rem;
217
213
  --shadowMedium:0 0.8rem 2rem 0 rgba(3, 3, 3, 0.1);
218
214
  --raised:0 0.1rem 0.2rem 0rem rgba(0, 0, 0, 0.3);
215
+ --spacingScale:1rem;
219
216
  /* medium Screen body */
220
217
 
221
218
 
@@ -223,6 +220,127 @@
223
220
 
224
221
 
225
222
 
223
+
224
+ :root {
225
+ /* BUTTON VARIABLES */
226
+ --btn-font-size: var(--text-base);
227
+ --btn-font-weight: 500;
228
+ --btn-padding-x: var(--space-4);
229
+ --btn-padding-y: var(--space-2);
230
+ --btn-border-radius: var(--radius-lg);
231
+ --btn-border-width: 1px;
232
+ --btn-min-height: 2.5rem;
233
+ --btn-gap: var(--space-2); /* for icon spacing */
234
+
235
+ /* Button States */
236
+ --btn-hover-scale: 1.02;
237
+ --btn-active-scale: 0.98;
238
+ --btn-disabled-opacity: 0.5;
239
+
240
+ /* Button Variants */
241
+ --btn-primary-bg: var(--primary);
242
+ --btn-primary-text: var(--white);
243
+ --btn-primary-hover: var(--primary600);
244
+
245
+ --btn-secondary-bg: var(--secondary);
246
+ --btn-secondary-text: var(--white);
247
+ --btn-secondary-hover: var(--secondary600);
248
+
249
+ --btn-outlined-border: var(--primary);
250
+ --btn-outlined-text: var(--primary);
251
+ --btn-outlined-hover-bg: var(--primary50);
252
+
253
+ /* INPUT VARIABLES */
254
+ --input-font-size: var(--text-base);
255
+ --input-padding-x: var(--space-4);
256
+ --input-padding-y: var(--space-3);
257
+ --input-border-radius: var(--radius-lg);
258
+ --input-border-width: var(--inputBorder);
259
+ --input-border-color: var(--borderColor);
260
+ --input-bg: var(--white);
261
+ --input-text-color: var(--text-color);
262
+ --input-placeholder-color: var(--muted);
263
+ --input-min-height: var(--inputButtonHeight);
264
+
265
+ /* Input States */
266
+ --input-focus-border: var(--primary);
267
+ --input-focus-ring: 0 0 0 3px var(--primary200);
268
+ --input-error-border: var(--error);
269
+ --input-error-ring: 0 0 0 3px var(--error200);
270
+ --input-disabled-bg: var(--lighter);
271
+ --input-disabled-opacity: 0.6;
272
+
273
+ /* CARD VARIABLES */
274
+ --card-bg: var(--cardBg);
275
+ --card-border: var(--border);
276
+ --card-border-radius: var(--borderRadius);
277
+ --card-padding: var(--space-6);
278
+ --card-shadow: var(--card);
279
+ --card-hover-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
280
+
281
+ /* LINK VARIABLES */
282
+ --link-color: var(--linkColor);
283
+ --link-hover-color: var(--primary);
284
+ --link-underline: none;
285
+ --link-hover-underline: underline;
286
+ --link-font-weight: 400;
287
+
288
+ /* BADGE/TAG VARIABLES */
289
+ --badge-font-size: var(--text-xs);
290
+ --badge-padding-x: var(--space-2);
291
+ --badge-padding-y: var(--space-1);
292
+ --badge-border-radius: var(--radius-full);
293
+ --badge-font-weight: 500;
294
+
295
+ /* MODAL/DIALOG VARIABLES */
296
+ --modal-backdrop: rgba(0, 0, 0, 0.5);
297
+ --modal-bg: var(--white);
298
+ --modal-border-radius: var(--radius-2xl);
299
+ --modal-padding: var(--space-8);
300
+ --modal-max-width: 32rem;
301
+ --modal-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);
302
+
303
+ /* DROPDOWN/SELECT VARIABLES */
304
+ --dropdown-bg: var(--white);
305
+ --dropdown-border: var(--border);
306
+ --dropdown-border-radius: var(--radius-lg);
307
+ --dropdown-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
308
+ --dropdown-item-padding: var(--space-3) var(--space-4);
309
+ --dropdown-item-hover-bg: var(--lighter);
310
+
311
+ /* SWITCH/TOGGLE VARIABLES */
312
+ --switch-width: 2.75rem;
313
+ --switch-height: 1.5rem;
314
+ --switch-bg: var(--borderColor);
315
+ --switch-active-bg: var(--primary);
316
+ --switch-thumb-size: 1.25rem;
317
+
318
+ /* CHECKBOX/RADIO VARIABLES */
319
+ --checkbox-size: 1.25rem;
320
+ --checkbox-border: var(--borderColor);
321
+ --checkbox-checked-bg: var(--primary);
322
+ --checkbox-checked-border: var(--primary);
323
+ --checkbox-border-radius: var(--radius);
324
+
325
+ /* TOOLTIP VARIABLES */
326
+ --tooltip-bg: var(--dark);
327
+ --tooltip-text: var(--white);
328
+ --tooltip-padding: var(--space-2) var(--space-3);
329
+ --tooltip-border-radius: var(--radius);
330
+ --tooltip-font-size: var(--text-sm);
331
+
332
+ /* AVATAR VARIABLES */
333
+ --avatar-size: 2.5rem;
334
+ --avatar-border-radius: var(--radius-full);
335
+ --avatar-border: 2px solid var(--white);
336
+
337
+ /* DIVIDER VARIABLES */
338
+ --divider-color: var(--borderColor);
339
+ --divider-width: 1px;
340
+ --divider-margin: var(--space-4) 0;
341
+ }
342
+
343
+
226
344
  /* For WebKit browsers (Chrome, Edge, Brave, Safari) */
227
345
  ::-webkit-scrollbar {
228
346
  width: 10px;
@@ -257,6 +375,7 @@
257
375
  transition: 0.3s ease-in-out all !important;
258
376
  }
259
377
 
378
+
260
379
  .card,
261
380
  .input,
262
381
  .navigation-bar ,
@@ -1844,6 +1963,7 @@ link:hover {
1844
1963
 
1845
1964
 
1846
1965
 
1966
+
1847
1967
  input:disabled,
1848
1968
  select:disabled,
1849
1969
  button:disabled {
@@ -1861,7 +1981,8 @@ button:disabled {
1861
1981
 
1862
1982
  body {
1863
1983
  font-size: var(--text-base);
1864
- line-height: 1.5rem;
1984
+ font-weight: var(--bd-font-weight) !important;
1985
+ line-height: var(--leading-normal) !important;
1865
1986
  letter-spacing: normal;
1866
1987
  background-color: var(--page-bg) !important;
1867
1988
  color: var(--text-color) !important;
@@ -2406,7 +2527,7 @@ h6, .h6 {
2406
2527
  transition: 0.1s linear;
2407
2528
  }
2408
2529
  .hoverable:hover{
2409
- background-color: var(--lighter) !important;
2530
+ background-color: var(--hoverable) !important;
2410
2531
  /* filter: brightness(90%); */
2411
2532
 
2412
2533
  }
@@ -2462,7 +2583,7 @@ h6, .h6 {
2462
2583
  border: none;
2463
2584
  padding:0.7rem 1rem;
2464
2585
  background-color: inherit;
2465
- border-radius: var(--InputButtonBorderRadius);
2586
+ border-radius: var(--radius);
2466
2587
  transition: all 0.5s linear;
2467
2588
  cursor: pointer;
2468
2589
  font-size: var(--minifiedFontSize);
@@ -2471,6 +2592,7 @@ h6, .h6 {
2471
2592
  font-weight: 500;
2472
2593
  z-index: 1;
2473
2594
  line-height: 1 !important;
2595
+ height: var(--inputButtonHeight);
2474
2596
  }
2475
2597
 
2476
2598
 
@@ -2582,7 +2704,8 @@ h6, .h6 {
2582
2704
  }
2583
2705
  .button.smallBtn {
2584
2706
  padding: 0.3rem 0.6rem !important;
2585
- font-size: var(--smallFont) ;
2707
+ font-size: var(--smallerFont) ;
2708
+ height: fit-content !important;
2586
2709
  }
2587
2710
  .smallBtn.roundBtn{
2588
2711
  padding: 0.3rem 0.8rem !important;
@@ -2623,6 +2746,7 @@ box-shadow: var(--card);
2623
2746
  transition: 0.3s;
2624
2747
  backdrop-filter: var(--raiseBackdrop) ;
2625
2748
  color: var(--text-color);
2749
+ border-radius: var(--borderRadius);
2626
2750
  }
2627
2751
  .card.xl{
2628
2752
  box-shadow: rgba(0, 0, 0, 0.1) 0px 10px 50px !important;
@@ -3132,7 +3256,7 @@ color: var(--text-color);
3132
3256
  flex-direction: row;
3133
3257
  align-items: center !important;
3134
3258
  padding: 0.4rem 1rem;
3135
- border-radius: var(--DefaultBorderRadius);
3259
+ border-radius: var(--radius);
3136
3260
  gap: 0.3rem;
3137
3261
  font-size: var(--minifiedFontSize) ;
3138
3262
  width: fit-content;
@@ -3378,7 +3502,7 @@ color: var(--text-color);
3378
3502
  border-bottom: var(--inputBorder) solid var(--borderColor);
3379
3503
  color: var(--text-color);
3380
3504
  font-size: var(--minifiedFontSize);
3381
- background-color: transparent;
3505
+ background-color: var(--page-bg);
3382
3506
  font-weight: 500;
3383
3507
  }
3384
3508
  .smallInput {
@@ -3452,7 +3576,8 @@ color: var(--text-color);
3452
3576
  {
3453
3577
  outline: none !important;
3454
3578
  }
3455
- input , select{height: var(--inputHeight);}
3579
+ input , select {height: var(--inputButtonHeight); border-radius: var(--radius);}
3580
+ textarea{border-radius: var(--radius) !important; height: fit-content !important;}
3456
3581
  .input.flat{border-radius: 0;}
3457
3582
 
3458
3583
  .input:focus {
@@ -3470,7 +3595,6 @@ select:focus {
3470
3595
  }
3471
3596
  .input.borderedInput {
3472
3597
  border: var(--border);
3473
- border-radius: var(--InputButtonBorderRadius);
3474
3598
  transition: 0.1s linear;
3475
3599
  padding: 0.6rem 0.5rem;
3476
3600
  }
@@ -3522,10 +3646,8 @@ background-color: rgba(var(--borderRgb), 0.3);
3522
3646
  .custom-select {
3523
3647
  position: relative;
3524
3648
  width: 100%;
3525
- border-radius: var(--InputButtonBorderRadius);
3526
- /* FIX: Create a new stacking context and ensure proper layering */
3527
- z-index: 999;
3528
- isolation: isolate;
3649
+ border-radius: var(--radius);
3650
+
3529
3651
  }
3530
3652
 
3531
3653
  .custom-select.fullWidth {max-width: none;}
@@ -3535,9 +3657,9 @@ display: flex;
3535
3657
  align-items: center;
3536
3658
  justify-content: space-between;
3537
3659
  padding: var(--inputRoundedPadding);
3538
- background: inherit;
3660
+ background: var(--page-bg);
3539
3661
  border: var(--border);
3540
- border-radius: var(--InputButtonBorderRadius);
3662
+ border-radius: var(--radius);
3541
3663
  cursor: pointer;
3542
3664
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
3543
3665
  font-size: 14px;
@@ -3558,7 +3680,7 @@ border-bottom-right-radius: 0;
3558
3680
 
3559
3681
  .select-trigger.borderless {
3560
3682
  border: none !important;
3561
- background: transparent;
3683
+ background: var(--lighter);
3562
3684
  }
3563
3685
 
3564
3686
 
@@ -3827,7 +3949,7 @@ padding-right: 2.5rem;
3827
3949
  /* Base input styles */
3828
3950
  .searchable-input {
3829
3951
  width: 100%;
3830
- height: var(--inputHeight);
3952
+ height: var(--inputButtonHeight);
3831
3953
  padding: 0.6rem 0.8rem;
3832
3954
  font-size: inherit;
3833
3955
  line-height: 1.5;
@@ -3875,7 +3997,7 @@ padding-right: 2.5rem;
3875
3997
  /* Bordered input styles */
3876
3998
  .searchable-input.borderedInput {
3877
3999
  border: var(--border);
3878
- border-radius: var(--InputButtonBorderRadius);
4000
+ border-radius: var(--radius);
3879
4001
  transition: 0.1s linear;
3880
4002
  padding: 0.6rem 0.5rem;
3881
4003
  }
@@ -4053,7 +4175,7 @@ padding-right: 2.5rem;
4053
4175
  background-color: var(--raiseThemes);
4054
4176
  backdrop-filter: var(--raiseBackdrop);
4055
4177
  border: var(--border);
4056
- border-radius: var(--InputButtonBorderRadius);
4178
+ border-radius: var(--radius);
4057
4179
  box-shadow: var(--shadow);
4058
4180
  overflow: hidden;
4059
4181
  animation: dropdown-appear 0.15s ease-out;
@@ -4183,7 +4305,7 @@ padding-right: 2.5rem;
4183
4305
  }
4184
4306
 
4185
4307
  .searchable-input {
4186
- min-height: var(--inputHeight);
4308
+ min-height: var(--inputButtonHeight);
4187
4309
  font-size: 1rem; /* Prevents zoom on iOS */
4188
4310
  }
4189
4311
 
@@ -4443,6 +4565,7 @@ th {
4443
4565
  }
4444
4566
  .table.hoverableTr tr:hover {
4445
4567
  filter: var(--hoverable);
4568
+ background-color: var(--hoverable) !important;
4446
4569
  }
4447
4570
 
4448
4571
  .table.dark {
@@ -5120,7 +5243,7 @@ filter: brightness(90%);
5120
5243
  backdrop-filter: var(--raiseBackdrop);
5121
5244
  color: var(--white);
5122
5245
  text-align: center;
5123
- border-radius: var(--DefaultBorderRadius);
5246
+ border-radius: var(--radius);
5124
5247
  padding: 0.2rem 0.5rem !important;
5125
5248
  font-weight: 500 !important;
5126
5249
  position: absolute;
@@ -5210,7 +5333,7 @@ filter: brightness(90%);
5210
5333
  position: fixed !important;
5211
5334
  background-color: var(--dark) !important;
5212
5335
  color: var(--white) !important;
5213
- border-radius: var(--DefaultBorderRadius);
5336
+ border-radius: var(--radius);
5214
5337
  max-width: 90vw;
5215
5338
  width: fit-content;
5216
5339
  max-height: 2.5rem;
@@ -6620,6 +6743,7 @@ background-color: rgba(0, 0, 0, 0.2);
6620
6743
  }
6621
6744
 
6622
6745
  /* --------- MARGIN --------- */
6746
+ .margin , .m{margin: var(--spacingScale) !important;}
6623
6747
  .m-0 { margin: var(--space-0) !important; }
6624
6748
  .m-1 { margin: var(--space-1) !important; }
6625
6749
  .m-2 { margin: var(--space-2) !important; }
@@ -6740,7 +6864,7 @@ background-color: rgba(0, 0, 0, 0.2);
6740
6864
  /*padding*/
6741
6865
 
6742
6866
  /* --------- PADDING --------- */
6743
- .padding{padding:var(--padding)}
6867
+ .padding , .p{padding:var(--spacingScale)}
6744
6868
  .p-0 { padding: var(--space-0) !important; }
6745
6869
  .p-1 { padding: var(--space-1) !important; }
6746
6870
  .p-2 { padding: var(--space-2) !important; }
@@ -7332,12 +7456,6 @@ background-color: rgba(0, 0, 0, 0.2);
7332
7456
 
7333
7457
 
7334
7458
 
7335
-
7336
-
7337
-
7338
-
7339
-
7340
-
7341
7459
  /* Text Area */
7342
7460
 
7343
7461
  .ql-container {
package/index.d.ts CHANGED
@@ -58,3 +58,5 @@ export { default as Select } from "./ui/select/Select";
58
58
  export { default as Cookie } from "./js/Cookie";
59
59
  export { FunGet } from "./js/Fun";
60
60
  export { default as GoogleAnalytics } from "./js/google/analytics";
61
+ export { FunFireAuth } from "./js/firebase/Auth";
62
+ export { FunFireStore } from "./js/firebase/FireStore";
package/index.js CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.View = exports.ScrollInView = exports.Accordion = exports.Flex = exports.RichText = exports.Carousel = exports.Video = exports.SideBar = exports.ChartPie = exports.Lines = exports.Bars = exports.FullCenteredPage = exports.CircleGroup = exports.Circle = exports.Hr = exports.Section = exports.RowFlex = exports.Tip = exports.AppBar = exports.ToolTip = exports.Notification = exports.FunLoader = exports.ProgressBar = exports.DropMenu = exports.DropItem = exports.Dropdown = exports.DropDown = exports.DropUp = exports.UnAuthorized = exports.NotFound = exports.StepLine = exports.StepHeader = exports.Step = exports.StepContainer = exports.Div = exports.Text = exports.List = exports.Table = exports.Modal = exports.Loader = exports.SearchableInput = exports.Input = exports.Col = exports.Grid = exports.Container = exports.BreadCrumb = exports.Card = exports.Button = exports.ThemeProvider = exports.Alert = void 0;
7
- exports.GoogleAnalytics = exports.FunGet = exports.Cookie = exports.Select = exports.ScrollToTop = exports.FlexItem = exports.Slider = exports.Vista = exports.Calendar = exports.DatePicker = void 0;
7
+ exports.FunFireStore = exports.FunFireAuth = exports.GoogleAnalytics = exports.FunGet = exports.Cookie = exports.Select = exports.ScrollToTop = exports.FlexItem = exports.Slider = exports.Vista = exports.Calendar = exports.DatePicker = void 0;
8
8
  var Alert_1 = require("./ui/alert/Alert");
9
9
  Object.defineProperty(exports, "Alert", { enumerable: true, get: function () { return __importDefault(Alert_1).default; } });
10
10
  var theme_1 = require("./ui/theme/theme");
@@ -126,3 +126,7 @@ var Fun_1 = require("./js/Fun");
126
126
  Object.defineProperty(exports, "FunGet", { enumerable: true, get: function () { return Fun_1.FunGet; } });
127
127
  var analytics_1 = require("./js/google/analytics");
128
128
  Object.defineProperty(exports, "GoogleAnalytics", { enumerable: true, get: function () { return __importDefault(analytics_1).default; } });
129
+ var Auth_1 = require("./js/firebase/Auth");
130
+ Object.defineProperty(exports, "FunFireAuth", { enumerable: true, get: function () { return Auth_1.FunFireAuth; } });
131
+ var FireStore_1 = require("./js/firebase/FireStore");
132
+ Object.defineProperty(exports, "FunFireStore", { enumerable: true, get: function () { return FireStore_1.FunFireStore; } });
@@ -0,0 +1,191 @@
1
+ import { Auth, User, UserCredential } from 'firebase/auth';
2
+ interface AuthResponse {
3
+ user: User;
4
+ credential: UserCredential;
5
+ isNewUser?: boolean;
6
+ }
7
+ interface AuthStateCallback {
8
+ (user: User | null): void;
9
+ }
10
+ type ProviderType = 'google' | 'facebook' | 'github' | 'twitter' | 'microsoft' | 'apple';
11
+ /**
12
+ * Firebase Authentication Operations
13
+ * Users must pass their Auth instance to each method
14
+ */
15
+ export declare const FunFireAuth: {
16
+ /**
17
+ * 📧 Sign in with email and password
18
+ * @param auth - Firebase Auth instance
19
+ * @param email - User email
20
+ * @param password - User password
21
+ */
22
+ signInWithEmail: (auth: Auth, email: string, password: string) => Promise<AuthResponse>;
23
+ /**
24
+ * ✍️ Create account with email and password
25
+ * @param auth - Firebase Auth instance
26
+ * @param email - User email
27
+ * @param password - User password
28
+ * @param displayName - Optional display name
29
+ * @param photoURL - Optional photo URL
30
+ */
31
+ createAccount: (auth: Auth, email: string, password: string, displayName?: string, photoURL?: string) => Promise<AuthResponse>;
32
+ /**
33
+ * 🔐 Sign in with Google (Popup)
34
+ * @param auth - Firebase Auth instance
35
+ */
36
+ signInWithGoogle: (auth: Auth) => Promise<AuthResponse>;
37
+ /**
38
+ * 🔐 Sign in with Facebook (Popup)
39
+ * @param auth - Firebase Auth instance
40
+ */
41
+ signInWithFacebook: (auth: Auth) => Promise<AuthResponse>;
42
+ /**
43
+ * 🔐 Sign in with GitHub (Popup)
44
+ * @param auth - Firebase Auth instance
45
+ */
46
+ signInWithGithub: (auth: Auth) => Promise<AuthResponse>;
47
+ /**
48
+ * 🔐 Sign in with Twitter (Popup)
49
+ * @param auth - Firebase Auth instance
50
+ */
51
+ signInWithTwitter: (auth: Auth) => Promise<AuthResponse>;
52
+ /**
53
+ * 🔐 Sign in with Microsoft (Popup)
54
+ * @param auth - Firebase Auth instance
55
+ */
56
+ signInWithMicrosoft: (auth: Auth) => Promise<AuthResponse>;
57
+ /**
58
+ * 🔐 Sign in with Apple (Popup)
59
+ * @param auth - Firebase Auth instance
60
+ */
61
+ signInWithApple: (auth: Auth) => Promise<AuthResponse>;
62
+ /**
63
+ * 🔐 Generic provider sign in with redirect (better for mobile)
64
+ * @param auth - Firebase Auth instance
65
+ * @param providerType - Provider type
66
+ */
67
+ signInWithRedirect: (auth: Auth, providerType: ProviderType) => Promise<void>;
68
+ /**
69
+ * 🚪 Sign out
70
+ * @param auth - Firebase Auth instance
71
+ */
72
+ signOut: (auth: Auth) => Promise<void>;
73
+ /**
74
+ * 🔄 Send password reset email
75
+ * @param auth - Firebase Auth instance
76
+ * @param email - User email
77
+ * @param actionCodeSettings - Optional action code settings for custom redirect
78
+ */
79
+ resetPassword: (auth: Auth, email: string, actionCodeSettings?: {
80
+ url: string;
81
+ handleCodeInApp?: boolean;
82
+ }) => Promise<void>;
83
+ /**
84
+ * ✉️ Send email verification
85
+ * @param auth - Firebase Auth instance
86
+ * @param actionCodeSettings - Optional action code settings for custom redirect
87
+ */
88
+ sendVerificationEmail: (auth: Auth, actionCodeSettings?: {
89
+ url: string;
90
+ handleCodeInApp?: boolean;
91
+ }) => Promise<void>;
92
+ /**
93
+ * 🔑 Update user password
94
+ * @param auth - Firebase Auth instance
95
+ * @param newPassword - New password
96
+ */
97
+ updatePassword: (auth: Auth, newPassword: string) => Promise<void>;
98
+ /**
99
+ * 📧 Update user email
100
+ * @param auth - Firebase Auth instance
101
+ * @param newEmail - New email
102
+ */
103
+ updateEmail: (auth: Auth, newEmail: string) => Promise<void>;
104
+ /**
105
+ * 👤 Update user profile
106
+ * @param auth - Firebase Auth instance
107
+ * @param displayName - Display name
108
+ * @param photoURL - Photo URL
109
+ */
110
+ updateProfile: (auth: Auth, displayName?: string, photoURL?: string) => Promise<void>;
111
+ /**
112
+ * 🔐 Reauthenticate user (required before sensitive operations)
113
+ * @param auth - Firebase Auth instance
114
+ * @param password - Current password
115
+ */
116
+ reauthenticate: (auth: Auth, password: string) => Promise<UserCredential>;
117
+ /**
118
+ * ❌ Delete user account
119
+ * @param auth - Firebase Auth instance
120
+ */
121
+ deleteAccount: (auth: Auth) => Promise<void>;
122
+ /**
123
+ * 👁️ Listen to auth state changes
124
+ * @param auth - Firebase Auth instance
125
+ * @param callback - Callback function that receives user or null
126
+ * @returns Unsubscribe function
127
+ */
128
+ onAuthStateChanged: (auth: Auth, callback: AuthStateCallback) => (() => void);
129
+ /**
130
+ * 🔍 Get current user
131
+ * @param auth - Firebase Auth instance
132
+ * @returns Current user or null
133
+ */
134
+ getCurrentUser: (auth: Auth) => User | null;
135
+ /**
136
+ * 🔍 Check if email exists
137
+ * @param auth - Firebase Auth instance
138
+ * @param email - Email to check
139
+ * @returns Array of sign-in methods for the email
140
+ */
141
+ checkEmailExists: (auth: Auth, email: string) => Promise<string[]>;
142
+ /**
143
+ * ✅ Apply action code (email verification, password reset)
144
+ * @param auth - Firebase Auth instance
145
+ * @param code - Action code from email link
146
+ */
147
+ applyActionCode: (auth: Auth, code: string) => Promise<void>;
148
+ /**
149
+ * 🔍 Verify password reset code
150
+ * @param auth - Firebase Auth instance
151
+ * @param code - Password reset code
152
+ * @returns Email associated with the code
153
+ */
154
+ verifyPasswordResetCode: (auth: Auth, code: string) => Promise<string>;
155
+ /**
156
+ * ✅ Confirm password reset
157
+ * @param auth - Firebase Auth instance
158
+ * @param code - Password reset code
159
+ * @param newPassword - New password
160
+ */
161
+ confirmPasswordReset: (auth: Auth, code: string, newPassword: string) => Promise<void>;
162
+ /**
163
+ * 🔗 Link account with Google
164
+ * @param auth - Firebase Auth instance
165
+ */
166
+ linkWithGoogle: (auth: Auth) => Promise<UserCredential>;
167
+ /**
168
+ * 🔓 Unlink provider from account
169
+ * @param auth - Firebase Auth instance
170
+ * @param providerId - Provider ID to unlink (e.g., 'google.com', 'password')
171
+ */
172
+ unlinkProvider: (auth: Auth, providerId: string) => Promise<User>;
173
+ /**
174
+ * 📱 Get ID token (for backend verification)
175
+ * @param auth - Firebase Auth instance
176
+ * @param forceRefresh - Force token refresh
177
+ */
178
+ getIdToken: (auth: Auth, forceRefresh?: boolean) => Promise<string>;
179
+ };
180
+ export declare const AuthErrorCodes: {
181
+ EMAIL_EXISTS: string;
182
+ INVALID_EMAIL: string;
183
+ WEAK_PASSWORD: string;
184
+ USER_NOT_FOUND: string;
185
+ WRONG_PASSWORD: string;
186
+ TOO_MANY_REQUESTS: string;
187
+ NETWORK_ERROR: string;
188
+ POPUP_CLOSED: string;
189
+ REQUIRES_RECENT_LOGIN: string;
190
+ };
191
+ export type { AuthResponse, AuthStateCallback, ProviderType };