@tempots/beatui 1.4.0 → 1.5.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 (66) hide show
  1. package/dist/auth/index.cjs.js +1 -1
  2. package/dist/auth/index.es.js +1 -1
  3. package/dist/{auth-divider-D_3gKZ6g.js → auth-divider-BIATan1F.js} +3 -3
  4. package/dist/{auth-divider-itm5-j5G.cjs → auth-divider-CVKfA8Cp.cjs} +1 -1
  5. package/dist/beatui.css +393 -36
  6. package/dist/beatui.tailwind.css +393 -36
  7. package/dist/better-auth/index.cjs.js +1 -1
  8. package/dist/better-auth/index.es.js +2 -2
  9. package/dist/deep-merge-B33Qtlmw.cjs +1 -0
  10. package/dist/{deep-merge-CzZVsVF-.js → deep-merge-BUsrE2v4.js} +130 -130
  11. package/dist/{duration-input-BrYLC1js.cjs → duration-input-C5il_E0F.cjs} +1 -1
  12. package/dist/{duration-input-CFu6vq-y.js → duration-input-DoCCrqOG.js} +1 -1
  13. package/dist/index.cjs.js +4 -4
  14. package/dist/index.es.js +5609 -5130
  15. package/dist/json-schema/index.cjs.js +1 -1
  16. package/dist/json-schema/index.es.js +107 -107
  17. package/dist/json-structure/index.cjs.js +1 -1
  18. package/dist/json-structure/index.es.js +3 -3
  19. package/dist/{modal-YKqlh4Dk.js → modal-BHlp4QeT.js} +1 -1
  20. package/dist/{modal-DCxNGrzk.cjs → modal-BmpfNL48.cjs} +1 -1
  21. package/dist/{notice-Q0A1gIho.cjs → notice-BBnSXYUc.cjs} +1 -1
  22. package/dist/{notice-Du3tWJTW.js → notice-BXKtBEiC.js} +1 -1
  23. package/dist/types/components/data/data-table-context.d.ts +9 -1
  24. package/dist/types/components/data/data-table-row-details.d.ts +21 -0
  25. package/dist/types/components/data/data-table-types.d.ts +23 -0
  26. package/dist/types/components/data/index.d.ts +1 -0
  27. package/dist/types/components/form/control/control.d.ts +5 -5
  28. package/dist/types/components/form/control/list-control.d.ts +11 -11
  29. package/dist/types/components/form/fieldset/fieldset.d.ts +60 -0
  30. package/dist/types/components/form/fieldset/index.d.ts +1 -0
  31. package/dist/types/components/form/index.d.ts +1 -0
  32. package/dist/types/components/form/input/combobox-input.d.ts +2 -2
  33. package/dist/types/components/form/input/combobox-tags-input.d.ts +1 -1
  34. package/dist/types/components/form/input/date-time-input.d.ts +1 -1
  35. package/dist/types/components/form/input/dropdown-input.d.ts +2 -2
  36. package/dist/types/components/form/input/field-layout.d.ts +64 -0
  37. package/dist/types/components/form/input/{input-wrapper.d.ts → field.d.ts} +23 -14
  38. package/dist/types/components/form/input/index.d.ts +2 -1
  39. package/dist/types/components/form/input/multi-select.d.ts +2 -2
  40. package/dist/types/components/form/input/native-select.d.ts +1 -1
  41. package/dist/types/components/form/input/range-slider.d.ts +19 -2
  42. package/dist/types/components/form/input/select-tags-input.d.ts +1 -1
  43. package/dist/types/components/format/format-bigint.d.ts +64 -0
  44. package/dist/types/components/format/format-date-time.d.ts +54 -0
  45. package/dist/types/components/format/format-date.d.ts +82 -0
  46. package/dist/types/components/format/format-display-name.d.ts +70 -0
  47. package/dist/types/components/format/format-file-size.d.ts +30 -0
  48. package/dist/types/components/format/format-list.d.ts +61 -0
  49. package/dist/types/components/format/format-number.d.ts +88 -0
  50. package/dist/types/components/format/format-plural.d.ts +96 -0
  51. package/dist/types/components/format/format-relative-time.d.ts +62 -0
  52. package/dist/types/components/format/format-time.d.ts +66 -0
  53. package/dist/types/components/format/index.d.ts +11 -0
  54. package/dist/types/components/i18n/locale-selector.d.ts +1 -1
  55. package/dist/types/components/json-schema/controls/composition-shared.d.ts +1 -1
  56. package/dist/types/components/json-schema/controls/shared-utils.d.ts +3 -3
  57. package/dist/types/components/json-schema/widgets/string-controls.d.ts +2 -2
  58. package/dist/types/components/json-schema-display/display-wrapper.d.ts +1 -1
  59. package/dist/types/index.d.ts +1 -0
  60. package/dist/use-form-CP6nftVl.cjs +2 -0
  61. package/dist/{use-form-D_TJyZhP.js → use-form-CmQdxpOi.js} +474 -434
  62. package/dist/{widget-customization-DELy3SMQ.cjs → widget-customization-B0y-eesp.cjs} +1 -1
  63. package/dist/{widget-customization-BAchyOUo.js → widget-customization-CKbR4Dsg.js} +2 -2
  64. package/package.json +1 -1
  65. package/dist/deep-merge-Bydz6jLt.cjs +0 -1
  66. package/dist/use-form-BvBkVEKi.cjs +0 -2
@@ -5432,6 +5432,15 @@ a:focus-visible {
5432
5432
  background-color: var(--color-base-800);
5433
5433
  }
5434
5434
 
5435
+ /* Format Components - Locale-aware data formatting display */
5436
+
5437
+ /* Tabular figures for numeric format components */
5438
+ .bc-format-number,
5439
+ .bc-format-bigint,
5440
+ .bc-format-file-size {
5441
+ font-variant-numeric: tabular-nums;
5442
+ }
5443
+
5435
5444
  .bc-flyout-container {
5436
5445
  z-index: var(--z-index-popover);
5437
5446
  }
@@ -6245,20 +6254,22 @@ a:focus-visible {
6245
6254
  }
6246
6255
  }
6247
6256
 
6248
- /* Input Wrapper Component */
6249
- .bc-input-wrapper {
6257
+ /* Field Component */
6258
+ .bc-field {
6250
6259
  display: flex;
6251
6260
  flex-direction: column;
6261
+ min-width: 0; /* Prevent overflow in grid/flex containers */
6252
6262
  }
6253
6263
 
6254
- .bc-input-wrapper--full-width {
6264
+ .bc-field--full-width {
6255
6265
  width: 100%;
6256
6266
  }
6257
6267
 
6258
6268
  /* Horizontal layout variants - use grid for proper error positioning */
6259
- .bc-input-wrapper--horizontal,
6260
- .bc-input-wrapper--horizontal-label-right,
6261
- .bc-input-wrapper--horizontal-fixed {
6269
+ .bc-field--horizontal,
6270
+ .bc-field--horizontal-label-right,
6271
+ .bc-field--horizontal-fixed,
6272
+ .bc-field--horizontal-end {
6262
6273
  display: grid;
6263
6274
  grid-template-columns: auto 1fr;
6264
6275
  align-items: center;
@@ -6266,25 +6277,39 @@ a:focus-visible {
6266
6277
  }
6267
6278
 
6268
6279
  /* Horizontal with label on right */
6269
- .bc-input-wrapper--horizontal-label-right {
6280
+ .bc-field--horizontal-label-right {
6270
6281
  grid-template-columns: 1fr auto;
6271
6282
  }
6272
6283
 
6273
- .bc-input-wrapper--horizontal-label-right .bc-input-wrapper__header {
6284
+ .bc-field--horizontal-label-right .bc-field__header {
6274
6285
  order: 2;
6275
6286
  }
6276
6287
 
6277
- .bc-input-wrapper--horizontal-label-right .bc-input-wrapper__content {
6288
+ .bc-field--horizontal-label-right .bc-field__content {
6278
6289
  order: 1;
6279
6290
  }
6280
6291
 
6281
6292
  /* Horizontal with fixed-width label */
6282
- .bc-input-wrapper--horizontal-fixed {
6283
- grid-template-columns: var(--input-wrapper-label-width, 12rem) 1fr;
6293
+ .bc-field--horizontal-fixed {
6294
+ grid-template-columns: var(--field-label-width, 7.5rem) 1fr;
6295
+ }
6296
+
6297
+ /* Horizontal with fixed-width label, right-aligned (flush with input) */
6298
+ .bc-field--horizontal-end {
6299
+ grid-template-columns: var(--field-label-width, 7.5rem) 1fr;
6300
+ }
6301
+
6302
+ .bc-field--horizontal-end .bc-field__header {
6303
+ justify-content: flex-end;
6304
+ }
6305
+
6306
+ .bc-field--horizontal-end .bc-field__label-section {
6307
+ text-align: right;
6308
+ align-items: flex-end;
6284
6309
  }
6285
6310
 
6286
6311
  /* Label header container */
6287
- .bc-input-wrapper__header {
6312
+ .bc-field__header {
6288
6313
  display: flex;
6289
6314
  align-items: center;
6290
6315
  justify-content: space-between;
@@ -6292,95 +6317,278 @@ a:focus-visible {
6292
6317
  }
6293
6318
 
6294
6319
  /* Label section container */
6295
- .bc-input-wrapper__label-section {
6320
+ .bc-field__label-section {
6296
6321
  display: flex;
6297
6322
  flex-direction: column;
6298
6323
  }
6299
6324
 
6300
6325
  /* Label container */
6301
- .bc-input-wrapper__label {
6326
+ .bc-field__label {
6302
6327
  display: flex;
6303
6328
  align-items: center;
6304
6329
  gap: var(--spacing-stack-2xs, var(--spacing-xs));
6305
6330
  }
6306
6331
 
6307
6332
  /* Label text styles */
6308
- .bc-input-wrapper__label-text {
6333
+ .bc-field__label-text {
6309
6334
  text-wrap: nowrap;
6310
6335
  font-size: var(--font-size-sm);
6311
6336
  line-height: var(--line-height-normal);
6312
6337
  }
6313
6338
 
6314
6339
  /* Label text states */
6315
- .bc-input-wrapper__label-text--default {
6340
+ .bc-field__label-text--default {
6316
6341
  color: var(--color-gray-600);
6317
6342
  font-weight: var(--font-weight-semibold);
6318
6343
  }
6319
6344
 
6320
- .bc-input-wrapper__label-text--disabled {
6345
+ .bc-field__label-text--disabled {
6321
6346
  color: var(--color-gray-500);
6322
6347
  font-weight: var(--font-weight-normal);
6323
6348
  }
6324
6349
 
6325
- .bc-input-wrapper__label-text--error {
6350
+ .bc-field__label-text--error {
6326
6351
  color: var(--color-danger-600);
6327
6352
  font-weight: var(--font-weight-normal);
6328
6353
  }
6329
6354
 
6330
6355
  /* Required symbol */
6331
- .bc-input-wrapper__required {
6356
+ .bc-field__required {
6332
6357
  font-size: var(--font-size-xs);
6333
6358
  color: var(--color-danger-600);
6334
6359
  vertical-align: top;
6335
6360
  }
6336
6361
 
6337
6362
  /* Error messages in horizontal mode span full width on their own row */
6338
- .bc-input-wrapper--horizontal .bc-input-wrapper__error,
6339
- .bc-input-wrapper--horizontal-label-right .bc-input-wrapper__error,
6340
- .bc-input-wrapper--horizontal-fixed .bc-input-wrapper__error {
6363
+ .bc-field--horizontal .bc-field__error,
6364
+ .bc-field--horizontal-label-right .bc-field__error,
6365
+ .bc-field--horizontal-fixed .bc-field__error,
6366
+ .bc-field--horizontal-end .bc-field__error {
6341
6367
  grid-column: 1 / -1;
6342
6368
  }
6343
6369
 
6344
- .bc-input-wrapper--horizontal-label-right .bc-input-wrapper__error {
6370
+ .bc-field--horizontal-label-right .bc-field__error {
6345
6371
  order: 3;
6346
6372
  }
6347
6373
 
6348
6374
  /* Description text */
6349
- .bc-input-wrapper__description {
6375
+ .bc-field__description {
6350
6376
  font-size: var(--font-size-sm);
6351
6377
  color: var(--color-gray-600);
6352
6378
  line-height: var(--line-height-normal);
6353
6379
  }
6354
6380
 
6355
6381
  /* Description under label in horizontal mode */
6356
- .bc-input-wrapper__description--under-label {
6382
+ .bc-field__description--under-label {
6357
6383
  font-size: var(--font-size-xs);
6358
6384
  }
6359
6385
 
6360
6386
  /* Error message */
6361
- .bc-input-wrapper__error {
6387
+ .bc-field__error {
6362
6388
  font-size: var(--font-size-sm);
6363
6389
  color: var(--color-danger-500);
6364
6390
  line-height: var(--line-height-normal);
6365
6391
  }
6366
6392
 
6393
+ /* Compact mode */
6394
+ .bc-field--compact {
6395
+ gap: var(--spacing-xs, var(--spacing-sm));
6396
+ }
6397
+
6398
+ .bc-field--compact .bc-field__label-text {
6399
+ font-size: var(--font-size-xs);
6400
+ }
6401
+
6402
+ .bc-field--compact .bc-field__description {
6403
+ font-size: var(--font-size-xs);
6404
+ }
6405
+
6406
+ .bc-field--compact .bc-field__error {
6407
+ font-size: var(--font-size-xs);
6408
+ }
6409
+
6410
+ /* Responsive layout — matches horizontal-fixed when wide, flips to vertical
6411
+ when the ancestor container (Fieldset) narrows below 480px. */
6412
+ .bc-field--responsive {
6413
+ display: grid;
6414
+ grid-template-columns: var(--field-label-width, 7.5rem) 1fr;
6415
+ align-items: center;
6416
+ gap: var(--spacing-sm, var(--spacing-lg));
6417
+ }
6418
+
6419
+ .bc-field--responsive .bc-field__error {
6420
+ grid-column: 1 / -1;
6421
+ }
6422
+
6423
+ @container (max-width: 480px) {
6424
+ .bc-field--responsive {
6425
+ display: flex;
6426
+ flex-direction: column;
6427
+ align-items: stretch;
6428
+ }
6429
+
6430
+ .bc-field--responsive .bc-field__error {
6431
+ grid-column: auto;
6432
+ }
6433
+ }
6434
+
6367
6435
  /* Dark mode styles */
6368
- .dark .bc-input-wrapper__label-text--default {
6436
+ .dark .bc-field__label-text--default {
6369
6437
  color: var(--text-normal);
6370
6438
  }
6371
6439
 
6372
- .dark .bc-input-wrapper__label-text--error {
6440
+ .dark .bc-field__label-text--error {
6373
6441
  color: var(--color-danger-300);
6374
6442
  }
6375
6443
 
6376
- .dark .bc-input-wrapper__required {
6444
+ .dark .bc-field__required {
6377
6445
  color: var(--color-danger-400);
6378
6446
  }
6379
6447
 
6380
- .dark .bc-input-wrapper__error {
6448
+ .dark .bc-field__error {
6381
6449
  color: var(--color-danger-400);
6382
6450
  }
6383
6451
 
6452
+ /* Fieldset Component */
6453
+ .bc-fieldset {
6454
+ container-type: inline-size;
6455
+ border: none;
6456
+ margin: 0;
6457
+ padding: 0;
6458
+ min-width: 0; /* Fix fieldset overflow behaviour */
6459
+ width: 100%;
6460
+ }
6461
+
6462
+ /* Bordered variant */
6463
+ .bc-fieldset--bordered {
6464
+ border: var(--border-width-default) solid var(--border-default);
6465
+ border-radius: var(--radius-md);
6466
+ padding: var(--spacing-md);
6467
+ }
6468
+
6469
+ .bc-fieldset--bordered > .bc-fieldset__legend {
6470
+ padding: 0 var(--spacing-sm);
6471
+ margin-left: calc(-1 * var(--spacing-sm));
6472
+ font-weight: var(--font-weight-semibold);
6473
+ font-size: var(--font-size-md);
6474
+ color: var(--text-normal);
6475
+ }
6476
+
6477
+ /* Plain variant */
6478
+ .bc-fieldset--plain > .bc-fieldset__legend {
6479
+ width: 100%;
6480
+ padding-bottom: var(--spacing-sm);
6481
+ border-bottom: var(--border-width-default) solid var(--border-divider);
6482
+ margin-bottom: var(--spacing-md);
6483
+ font-weight: var(--font-weight-semibold);
6484
+ font-size: var(--font-size-md);
6485
+ color: var(--text-normal);
6486
+ }
6487
+
6488
+ /* Card variant */
6489
+ .bc-fieldset--card {
6490
+ background-color: var(--bg-surface);
6491
+ border-radius: var(--radius-lg);
6492
+ box-shadow: var(--shadow-sm);
6493
+ padding: var(--spacing-lg);
6494
+ }
6495
+
6496
+ .bc-fieldset--card > .bc-fieldset__legend {
6497
+ font-weight: var(--font-weight-bold);
6498
+ font-size: var(--font-size-lg);
6499
+ color: var(--text-normal);
6500
+ padding: 0;
6501
+ margin-bottom: var(--spacing-sm);
6502
+ }
6503
+
6504
+ /* Legend */
6505
+ .bc-fieldset__legend {
6506
+ display: flex;
6507
+ align-items: center;
6508
+ }
6509
+
6510
+ .bc-fieldset__legend-toggle {
6511
+ all: unset;
6512
+ display: flex;
6513
+ align-items: center;
6514
+ gap: var(--spacing-sm);
6515
+ cursor: pointer;
6516
+ width: 100%;
6517
+ }
6518
+
6519
+ .bc-fieldset__legend-toggle:focus-visible {
6520
+ outline: var(--outline-width-focus) solid var(--interactive-focus);
6521
+ outline-offset: 2px;
6522
+ border-radius: var(--radius-sm);
6523
+ }
6524
+
6525
+ .bc-fieldset__collapse-icon {
6526
+ transition: transform var(--motion-duration-fast)
6527
+ var(--motion-easing-standard);
6528
+ }
6529
+
6530
+ .bc-fieldset__collapse-icon--collapsed {
6531
+ transform: rotate(-90deg);
6532
+ }
6533
+
6534
+ /* Description */
6535
+ .bc-fieldset__description {
6536
+ font-size: var(--font-size-sm);
6537
+ color: var(--text-muted);
6538
+ margin-bottom: var(--spacing-md);
6539
+ }
6540
+
6541
+ /* Content grid — defaults to single column. Multi-column is set via
6542
+ inline style by the component when columns > 1. */
6543
+ .bc-fieldset__content {
6544
+ display: grid;
6545
+ grid-template-columns: 1fr;
6546
+ gap: var(--fieldset-gap, var(--spacing-md));
6547
+ }
6548
+
6549
+ /* Disabled state */
6550
+ .bc-fieldset:disabled {
6551
+ opacity: 0.6;
6552
+ }
6553
+
6554
+ .bc-fieldset:disabled .bc-fieldset__legend-toggle {
6555
+ cursor: default;
6556
+ }
6557
+
6558
+ /* Dark mode */
6559
+ .dark .bc-fieldset--bordered {
6560
+ border-color: var(--border-default);
6561
+ }
6562
+
6563
+ .dark .bc-fieldset--plain > .bc-fieldset__legend {
6564
+ border-bottom-color: var(--border-default);
6565
+ }
6566
+
6567
+ .dark .bc-fieldset--card {
6568
+ background-color: var(--bg-elevated);
6569
+ box-shadow: var(--shadow-md);
6570
+ }
6571
+
6572
+ .dark .bc-fieldset__description {
6573
+ color: var(--text-muted);
6574
+ }
6575
+
6576
+ /* Accessibility */
6577
+ @media (prefers-reduced-motion: reduce) {
6578
+ .bc-fieldset__collapse-icon {
6579
+ transition: none;
6580
+ }
6581
+ }
6582
+
6583
+ @media (prefers-contrast: high) {
6584
+ .bc-fieldset--bordered {
6585
+ border-width: var(--border-width-medium);
6586
+ }
6587
+ .bc-fieldset--card {
6588
+ border: var(--border-width-medium) solid currentColor;
6589
+ }
6590
+ }
6591
+
6384
6592
  .bc-json-schema-object {
6385
6593
  border-left: var(--spacing-md) solid var(--color-base-200);
6386
6594
  padding-inline-start: var(--spacing-md);
@@ -12412,6 +12620,11 @@ span.bc-sidebar-link {
12412
12620
  background-color: var(--table-stripe-bg);
12413
12621
  }
12414
12622
 
12623
+ /* Detail rows inherit the parent row's background instead of zebra striping */
12624
+ .bc-table--with-striped-rows > tbody > tr.bc-data-table__detail-row {
12625
+ background-color: inherit;
12626
+ }
12627
+
12415
12628
  /* Hoverable striped rows - darker stripe on hover */
12416
12629
  .bc-table--hoverable.bc-table--with-striped-rows
12417
12630
  > tbody
@@ -16084,6 +16297,45 @@ span.bc-sidebar-link {
16084
16297
  color: var(--text-muted);
16085
16298
  }
16086
16299
 
16300
+ /* Markers container */
16301
+ .bc-range-slider__markers {
16302
+ position: absolute;
16303
+ top: 0;
16304
+ left: 0;
16305
+ width: 100%;
16306
+ height: 100%;
16307
+ pointer-events: none;
16308
+ z-index: 1;
16309
+ }
16310
+
16311
+ /* Individual marker dot */
16312
+ .bc-range-slider__marker {
16313
+ position: absolute;
16314
+ top: 50%;
16315
+ transform: translate(-50%, -50%);
16316
+ display: flex;
16317
+ flex-direction: column;
16318
+ align-items: center;
16319
+ }
16320
+
16321
+ .bc-range-slider__marker::before {
16322
+ content: '';
16323
+ display: block;
16324
+ width: var(--spacing-sm);
16325
+ height: var(--spacing-sm);
16326
+ background-color: var(--color-white);
16327
+ border-radius: var(--radius-full);
16328
+ }
16329
+
16330
+ /* Marker label */
16331
+ .bc-range-slider__marker-label {
16332
+ position: absolute;
16333
+ top: calc(100% + var(--spacing-sm));
16334
+ white-space: nowrap;
16335
+ color: var(--text-muted);
16336
+ font-size: var(--font-size-xs);
16337
+ }
16338
+
16087
16339
  /* ── Size variants ── */
16088
16340
 
16089
16341
  /* xs */
@@ -16091,7 +16343,7 @@ span.bc-sidebar-link {
16091
16343
  padding: var(--spacing-lg) var(--spacing-smh) var(--spacing-md);
16092
16344
  }
16093
16345
  .bc-range-slider--size-xs .bc-range-slider__track {
16094
- height: var(--spacing-xs);
16346
+ height: var(--spacing-smh);
16095
16347
  }
16096
16348
  .bc-range-slider--size-xs .bc-range-slider__thumb {
16097
16349
  width: calc(var(--spacing-base) * 2.5);
@@ -16117,7 +16369,7 @@ span.bc-sidebar-link {
16117
16369
  padding: var(--spacing-xl) var(--spacing-md) var(--spacing-lg);
16118
16370
  }
16119
16371
  .bc-range-slider--size-sm .bc-range-slider__track {
16120
- height: calc(var(--spacing-base) * 0.75);
16372
+ height: var(--spacing-sm);
16121
16373
  }
16122
16374
  .bc-range-slider--size-sm .bc-range-slider__thumb {
16123
16375
  width: calc(var(--spacing-base) * 3.5);
@@ -16143,7 +16395,7 @@ span.bc-sidebar-link {
16143
16395
  padding: var(--spacing-2xl) calc(var(--spacing-base) * 2.5) var(--spacing-xl);
16144
16396
  }
16145
16397
  .bc-range-slider--size-md .bc-range-slider__track {
16146
- height: var(--spacing-sm);
16398
+ height: var(--spacing-smh);
16147
16399
  }
16148
16400
  .bc-range-slider--size-md .bc-range-slider__thumb {
16149
16401
  width: calc(var(--spacing-base) * 4.5);
@@ -16169,7 +16421,7 @@ span.bc-sidebar-link {
16169
16421
  padding: var(--spacing-3xl) var(--spacing-mdh) var(--spacing-2xl);
16170
16422
  }
16171
16423
  .bc-range-slider--size-lg .bc-range-slider__track {
16172
- height: var(--spacing-smh);
16424
+ height: var(--spacing-md);
16173
16425
  }
16174
16426
  .bc-range-slider--size-lg .bc-range-slider__thumb {
16175
16427
  width: calc(var(--spacing-base) * 5.5);
@@ -16195,7 +16447,7 @@ span.bc-sidebar-link {
16195
16447
  padding: var(--spacing-4xl) calc(var(--spacing-base) * 3.5) var(--spacing-3xl);
16196
16448
  }
16197
16449
  .bc-range-slider--size-xl .bc-range-slider__track {
16198
- height: var(--spacing-md);
16450
+ height: var(--spacing-mdh);
16199
16451
  }
16200
16452
  .bc-range-slider--size-xl .bc-range-slider__thumb {
16201
16453
  width: calc(var(--spacing-base) * 6.5);
@@ -16216,6 +16468,36 @@ span.bc-sidebar-link {
16216
16468
  font-size: var(--font-size-md);
16217
16469
  }
16218
16470
 
16471
+ /* Marker size overrides per size */
16472
+ .bc-range-slider--size-xs .bc-range-slider__marker::before {
16473
+ width: var(--spacing-xs);
16474
+ height: var(--spacing-xs);
16475
+ }
16476
+ .bc-range-slider--size-xs .bc-range-slider__marker-label {
16477
+ font-size: var(--font-size-2xs);
16478
+ }
16479
+ .bc-range-slider--size-sm .bc-range-slider__marker::before {
16480
+ width: var(--spacing-xs);
16481
+ height: var(--spacing-xs);
16482
+ }
16483
+ .bc-range-slider--size-sm .bc-range-slider__marker-label {
16484
+ font-size: var(--font-size-2xs);
16485
+ }
16486
+ .bc-range-slider--size-lg .bc-range-slider__marker::before {
16487
+ width: var(--spacing-smh);
16488
+ height: var(--spacing-smh);
16489
+ }
16490
+ .bc-range-slider--size-lg .bc-range-slider__marker-label {
16491
+ font-size: var(--font-size-sm);
16492
+ }
16493
+ .bc-range-slider--size-xl .bc-range-slider__marker::before {
16494
+ width: var(--spacing-md);
16495
+ height: var(--spacing-md);
16496
+ }
16497
+ .bc-range-slider--size-xl .bc-range-slider__marker-label {
16498
+ font-size: var(--font-size-md);
16499
+ }
16500
+
16219
16501
  /* ── Vertical orientation ── */
16220
16502
 
16221
16503
  .bc-range-slider--vertical {
@@ -16288,6 +16570,19 @@ span.bc-sidebar-link {
16288
16570
  left: calc(100% + var(--spacing-sm));
16289
16571
  }
16290
16572
 
16573
+ /* Markers: vertical positioning */
16574
+ .bc-range-slider--vertical .bc-range-slider__marker {
16575
+ left: 50%;
16576
+ top: auto;
16577
+ transform: translate(-50%, 50%);
16578
+ flex-direction: row;
16579
+ }
16580
+
16581
+ .bc-range-slider--vertical .bc-range-slider__marker-label {
16582
+ top: auto;
16583
+ left: calc(100% + var(--spacing-sm));
16584
+ }
16585
+
16291
16586
  /* Vertical size variants — swap track width/height, adjust padding */
16292
16587
 
16293
16588
  /* xs vertical */
@@ -16353,6 +16648,14 @@ span.bc-sidebar-link {
16353
16648
  background-color: var(--rs-color-dark);
16354
16649
  }
16355
16650
 
16651
+ .dark .bc-range-slider__marker::before {
16652
+ background-color: var(--color-gray-400);
16653
+ }
16654
+
16655
+ .dark .bc-range-slider__marker-label {
16656
+ color: var(--text-muted);
16657
+ }
16658
+
16356
16659
  .dark .bc-range-slider__tick::before {
16357
16660
  background-color: var(--color-gray-500);
16358
16661
  }
@@ -17694,6 +17997,59 @@ th.bc-data-table__header--drag-over {
17694
17997
  background-color: var(--interactive-hover);
17695
17998
  }
17696
17999
 
18000
+ /* Row Details: Toggle column */
18001
+ .bc-data-table__toggle-header {
18002
+ width: 2.5rem;
18003
+ min-width: 2.5rem;
18004
+ max-width: 2.5rem;
18005
+ padding: 0 !important;
18006
+ }
18007
+
18008
+ .bc-table > tbody > tr > td.bc-data-table__toggle-cell {
18009
+ width: 2.5rem;
18010
+ min-width: 2.5rem;
18011
+ max-width: 2.5rem;
18012
+ padding: 0 !important;
18013
+ text-align: center;
18014
+ vertical-align: middle;
18015
+ }
18016
+
18017
+ .bc-data-table__toggle-cell > button {
18018
+ display: inline-flex;
18019
+ align-items: center;
18020
+ justify-content: center;
18021
+ width: 1.75rem;
18022
+ height: 1.75rem;
18023
+ padding: 0;
18024
+ border: none;
18025
+ background: none;
18026
+ cursor: pointer;
18027
+ border-radius: var(--radius-sm);
18028
+ color: var(--text-muted);
18029
+ transition:
18030
+ color var(--motion-transition-fast) var(--motion-easing-standard),
18031
+ background-color var(--motion-transition-fast) var(--motion-easing-standard);
18032
+ }
18033
+
18034
+ .bc-data-table__toggle-cell > button:hover {
18035
+ background-color: var(--interactive-hover);
18036
+ color: var(--text-normal);
18037
+ }
18038
+
18039
+ /* Row Details: Detail row */
18040
+ .bc-data-table__detail-row > td {
18041
+ padding: 0 !important;
18042
+ border-top: none !important;
18043
+ }
18044
+
18045
+ .bc-data-table__detail-cell {
18046
+ padding: 0 !important;
18047
+ }
18048
+
18049
+ .bc-data-table__detail-cell > div {
18050
+ padding: var(--spacing-md) var(--spacing-lg);
18051
+ }
18052
+
17697
18053
  /* Reduced motion */
17698
18054
  @media (prefers-reduced-motion: reduce) {
17699
18055
  .bc-sortable-header,
@@ -17704,7 +18060,8 @@ th.bc-data-table__header--drag-over {
17704
18060
  .bc-data-toolbar__action,
17705
18061
  .bc-data-toolbar__reset,
17706
18062
  .bc-data-table__column-toggle-btn,
17707
- .bc-data-table__group-toggle {
18063
+ .bc-data-table__group-toggle,
18064
+ .bc-data-table__toggle-cell > button {
17708
18065
  transition: none;
17709
18066
  }
17710
18067
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@tempots/dom"),C=require("../auth-divider-itm5-j5G.cjs"),A=require("../translations-qefRsdGi.cjs"),w=require("../notice-Q0A1gIho.cjs"),y=require("../stack-dwLevGa2.cjs"),b=require("../input-container-BkPcNDaZ.cjs"),v=require("../text-input-D_IxFd0M.cjs");function g(a,t){return a.error?(t.onError?.({message:a.error.message,status:a.error.status}),a.error.message):null}function I(a,t,s){return async n=>{const l=await a.signIn.email({email:n.email,password:n.password,callbackURL:t.callbackURL}),o=g(l,t);return o||(await s(),null)}}function F(a,t,s){return async n=>{const l=await a.signUp.email({name:n.name,email:n.email,password:n.password,callbackURL:t.callbackURL}),o=g(l,t);return o||(await s(),null)}}function U(a,t){return async s=>{const n=await a.requestPasswordReset({email:s.email,redirectTo:t.callbackURL});return g(n,t)}}function $(a,t){return async s=>{const n=await a.signIn.social({provider:s,callbackURL:t.callbackURL,errorCallbackURL:t.errorCallbackURL});g(n,t)}}function L(a,t={}){const s=e.prop(null),n=e.prop(!0),l=e.computedOf(s)(h=>h?.user??null),o=e.computedOf(s)(h=>h!=null);let u;async function d(){try{const h=await a.getSession();h.error||!h.data?s.set(null):s.set({user:h.data.user,session:h.data.session})}catch{s.set(null)}finally{n.set(!1)}}t.onSessionChange&&s.on(t.onSessionChange),d(),t.refreshInterval&&t.refreshInterval>0&&(u=setInterval(d,t.refreshInterval));function p(){u!=null&&(clearInterval(u),u=void 0),s.dispose(),n.dispose(),l.dispose(),o.dispose()}return{session:s,isPending:n,user:l,isAuthenticated:o,refresh:d,dispose:p}}function P(a){return a.map(t=>({provider:t}))}function _(a,t={}){const s=L(a,{refreshInterval:t.refreshInterval,onSessionChange:t.onSessionChange}),n=()=>s.refresh(),l=I(a,t,n),o=F(a,t,n),u=U(a,t),d=$(a,t),p=t.socialProviders?P(t.socialProviders):[],h={onSignIn:l,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,labels:t.labels?{emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,rememberMeLabel:t.labels.rememberMeLabel,signInButton:t.labels.signInButton,forgotPasswordLink:t.labels.forgotPasswordLink,noAccountLink:t.labels.noAccountLink}:void 0},i={onSignUp:o,passwordRules:t.passwordRules,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels?{nameLabel:t.labels.nameLabel,emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,confirmPasswordLabel:t.labels.confirmPasswordLabel,acceptTermsLabel:t.labels.acceptTermsLabel,signUpButton:t.labels.signUpButton,hasAccountLink:t.labels.hasAccountLink}:void 0},m={onResetPassword:u,labels:t.labels?{resetPasswordButton:t.labels.resetPasswordButton,resetPasswordDescription:t.labels.resetPasswordDescription,emailLabel:t.labels.emailLabel,backToSignInLink:t.labels.backToSignInLink}:void 0},c={onSignIn:l,onSignUp:o,onResetPassword:u,onSocialLogin:d,socialProviders:p.length>0?p:void 0,showSocialDivider:p.length>0,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels};async function r(){await a.signOut(),await n()}function f(){s.dispose()}return{session:s.session,isPending:s.isPending,user:s.user,isAuthenticated:s.isAuthenticated,containerOptions:c,signInOptions:h,signUpOptions:i,resetOptions:m,socialProviders:p,signOut:r,refreshSession:n,dispose:f}}const R={mark:e.makeProviderMark("BetterAuth"),create:a=>{if(!a)throw new Error("BetterAuth provider requires a client option");const t=_(a.client,a);return{value:t,dispose:()=>t.dispose()}}};function E(a,t,...s){return C.AuthContainer({...a.containerOptions,...t},...s)}function O(a,t){return C.AuthModal(s=>t(n=>s({...a.containerOptions,...n})))}function M(a,t){return e.When(a.isAuthenticated,t)}function D(a,t){return e.Unless(a.isAuthenticated,t)}const T={twoFactorSetupDescription:"Enter your password to enable two-factor authentication.",twoFactorEnableButton:"Enable 2FA",twoFactorVerifyButton:"Verify",twoFactorScanDescription:"Scan the code below with your authenticator app, then enter the verification code.",twoFactorBackupCodesDescription:"Save these backup codes in a safe place. You can use them to sign in if you lose access to your authenticator.",twoFactorCodePlaceholder:"Enter 6-digit code",twoFactorBackupCodePlaceholder:"Enter backup code",twoFactorEnabled:"Two-factor authentication has been enabled.",twoFactorTotpDescription:"Enter the code from your authenticator app.",twoFactorOtpDescription:"Enter the one-time code sent to you.",twoFactorBackupDescription:"Enter one of your backup codes.",twoFactorSendOtpButton:"Send Code",twoFactorMethodLabel:a=>{switch(a){case"totp":return"Authenticator";case"otp":return"Email/SMS";case"backup":return"Backup Code";default:return a}},passwordPlaceholder:"Enter your password",magicLinkDescription:"Enter your email to receive a sign-in link.",magicLinkSendButton:"Send Magic Link",magicLinkSent:"A sign-in link has been sent to your email.",passkeySignInButton:"Sign in with Passkey",passkeyAddButton:"Add Passkey",passkeyDeleteButton:"Delete",passkeyRenameButton:"Rename",passkeySaveButton:"Save",passkeyCancelButton:"Cancel",passkeyNamePlaceholder:"Passkey name (optional)",passkeyUnnamed:"Unnamed passkey"},B=T,S="en",N=Object.assign({}),k=A.makeI18nProvider({defaultLocale:S,defaultMessages:B,localeLoader:async a=>{if(a===S)return B;const t=N[`./locales/${a}.ts`];return t?await t():B},providerName:"BetterAuthI18n"});function q({twoFactor:a,issuer:t,onComplete:s}){const n=e.prop(""),l=e.prop(null),o=e.prop([]),u=e.prop(""),d=e.prop(null),p=e.prop(!1),h=e.prop("password");async function i(c){c.preventDefault(),p.set(!0),d.set(null);const r=await a.enable({password:n.value,issuer:t});if(p.set(!1),r.error){d.set(r.error.message);return}r.data&&(l.set(r.data.totpURI),o.set(r.data.backupCodes),h.set("verify"))}async function m(c){c.preventDefault(),p.set(!0),d.set(null);const r=await a.verifyTotp({code:u.value});if(p.set(!1),r.error){d.set(r.error.message);return}h.set("complete"),s?.()}return e.Use(k,c=>e.html.div(e.attr.class("bc-two-factor"),e.Ensure(d,r=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(r))),e.OneOfValue(h,{password:()=>e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(i),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),c.$.twoFactorSetupDescription),w.PasswordInput({value:n,onChange:r=>n.set(r),placeholder:c.$.passwordPlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorEnableButton))),verify:()=>e.Fragment(e.Ensure(l,r=>e.html.div(e.attr.class("bc-two-factor__totp-uri"),e.html.p(c.$.twoFactorScanDescription),e.html.code(e.attr.class("bc-two-factor__code-display"),r))),e.NotEmpty(o,()=>e.html.div(e.attr.class("bc-two-factor__backup-codes"),e.html.p(c.$.twoFactorBackupCodesDescription),e.html.ul(e.ForEach(o,r=>e.html.li(r))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(m),y.Stack(v.TextInput({value:u,onChange:r=>u.set(r),placeholder:c.$.twoFactorCodePlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorVerifyButton)))),complete:()=>e.html.div(e.attr.class("bc-two-factor__complete"),w.Notice({variant:"success",tone:"prominent"},e.html.div(c.$.twoFactorEnabled)))})))}function x({twoFactor:a,methods:t=["totp","backup"],trustDevice:s,onVerified:n}){const l=e.prop(""),o=e.prop(null),u=e.prop(!1),d=e.prop(t[0]??"totp");async function p(i){i.preventDefault(),u.set(!0),o.set(null);const m=d.value;let c;if(m==="totp")c=await a.verifyTotp({code:l.value,trustDevice:s});else if(m==="otp"&&a.verifyOtp)c=await a.verifyOtp({code:l.value,trustDevice:s});else if(m==="backup")c=await a.verifyBackupCode({code:l.value});else{o.set("Unsupported verification method"),u.set(!1);return}if(u.set(!1),c.error){o.set(c.error.message);return}n?.()}async function h(){if(!a.sendOtp)return;u.set(!0),o.set(null);const i=await a.sendOtp({trustDevice:s});u.set(!1),i.error&&o.set(i.error.message)}return e.Use(k,i=>{const m=e.computedOf(d,i)((r,f)=>r==="totp"?f.twoFactorTotpDescription:r==="otp"?f.twoFactorOtpDescription:f.twoFactorBackupDescription),c=e.computedOf(d,i)((r,f)=>r==="backup"?f.twoFactorBackupCodePlaceholder:f.twoFactorCodePlaceholder);return e.html.div(e.attr.class("bc-two-factor"),e.Ensure(o,r=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(r))),e.When(t.length>1,()=>e.html.div(e.attr.class("bc-two-factor__methods"),...t.map(r=>e.html.button(e.attr.type("button"),e.attr.class("bc-two-factor__method-button"),e.attr.class(d.map(f=>f===r?"bc-two-factor__method-button--active":"")),e.on.click(()=>{d.set(r),l.set(""),o.set(null)}),i.$.twoFactorMethodLabel.map(f=>f(r)))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(p),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),m),e.When(d.map(r=>r==="otp"&&a.sendOtp!=null),()=>b.Button({type:"button",variant:"outline",color:"primary",onClick:h,loading:u},i.$.twoFactorSendOtpButton)),v.TextInput({value:l,onChange:r=>l.set(r),placeholder:c}),b.Button({type:"submit",variant:"filled",color:"primary",loading:u},e.attr.class("bc-auth-form__submit"),i.$.twoFactorVerifyButton))))})}function V({client:a,callbackURL:t}){const s=e.prop(""),n=e.prop(null),l=e.prop(!1),o=e.prop(!1);async function u(d){if(d.preventDefault(),!a.signIn.magicLink){n.set("Magic link sign-in is not configured");return}l.set(!0),n.set(null);const p=await a.signIn.magicLink({email:s.value,callbackURL:t});if(l.set(!1),p.error){n.set(p.error.message);return}o.set(!0)}return e.Use(k,d=>e.html.div(e.attr.class("bc-auth-form"),e.Ensure(n,p=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(p))),e.Unless(o,()=>e.html.form(e.attr.class("bc-auth-form__form"),e.on.submit(u),y.Stack(e.attr.class("bc-auth-form__fields"),e.html.p(e.attr.class("bc-auth-form__description"),d.$.magicLinkDescription),w.EmailInput({value:s,onChange:p=>s.set(p)}),b.Button({type:"submit",variant:"filled",color:"primary",loading:l},e.attr.class("bc-auth-form__submit"),d.$.magicLinkSendButton)))),e.When(o,()=>w.Notice({variant:"success",tone:"prominent"},e.html.div(d.$.magicLinkSent)))))}function W({client:a,autoFill:t,onSuccess:s,onError:n}){const l=e.prop(!1);async function o(){if(!a.signIn.passkey)return;l.set(!0);const u=await a.signIn.passkey({autoFill:t});if(l.set(!1),u.error){n?.({message:u.error.message,status:u.error.status});return}s?.()}return e.Use(k,u=>b.Button({type:"button",variant:"outline",color:"primary",onClick:o,loading:l},e.attr.class("bc-passkey-signin"),u.$.passkeySignInButton))}function z({passkey:a}){const t=e.prop([]),s=e.prop(null),n=e.prop(!1),l=e.prop("");async function o(i,m){n.set(!0),s.set(null);const c=await i();if(n.set(!1),c.error){s.set(c.error.message);return}await m?.(c.data)}async function u(){await o(()=>a.listUserPasskeys(),i=>t.set(i??[]))}async function d(){const i=l.value||void 0;await o(()=>a.addPasskey({name:i}),async()=>{l.set(""),await u()})}async function p(i){await o(()=>a.deletePasskey({id:i}),()=>u())}async function h(i,m){await o(()=>a.updatePasskey({id:i,name:m}),()=>u())}return u(),e.Use(k,i=>e.html.div(e.attr.class("bc-passkey-management"),e.Ensure(s,m=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(m))),e.html.div(e.attr.class("bc-passkey-list"),e.ForEach(t,m=>{const c=e.prop(!1),r=e.prop(m.$.name?.value??"");return e.html.div(e.attr.class("bc-passkey-item"),e.Unless(c,()=>e.html.div(e.attr.class("bc-passkey-item__info"),e.html.span(e.attr.class("bc-passkey-item__name"),m.$.name?.map(f=>f??i.$.passkeyUnnamed.value)??i.$.passkeyUnnamed),e.html.span(e.attr.class("bc-passkey-item__date"),m.$.createdAt))),e.When(c,()=>e.html.div(e.attr.class("bc-passkey-item__edit"),v.TextInput({value:r,onChange:f=>r.set(f)}))),e.html.div(e.attr.class("bc-passkey-item__actions"),e.Unless(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:()=>{r.set(m.$.name?.value??""),c.set(!0)}},i.$.passkeyRenameButton),b.Button({type:"button",variant:"text",size:"sm",color:"danger",onClick:()=>p(m.$.id.value)},i.$.passkeyDeleteButton))),e.When(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:async()=>{await h(m.$.id.value,r.value),c.set(!1)}},i.$.passkeySaveButton),b.Button({type:"button",variant:"text",size:"sm",onClick:()=>c.set(!1)},i.$.passkeyCancelButton)))))})),e.html.div(e.attr.class("bc-passkey-add"),y.Stack(v.TextInput({value:l,onChange:m=>l.set(m),placeholder:i.$.passkeyNamePlaceholder}),b.Button({type:"button",variant:"filled",color:"primary",onClick:d,loading:n},i.$.passkeyAddButton)))))}exports.Authenticated=M;exports.BetterAuth=R;exports.BetterAuthContainer=E;exports.BetterAuthI18n=k;exports.BetterAuthModal=O;exports.MagicLinkForm=V;exports.PasskeyManagement=z;exports.PasskeySignIn=W;exports.TwoFactorSetup=q;exports.TwoFactorVerify=x;exports.Unauthenticated=D;exports.createBetterAuthBridge=_;exports.createSessionManager=L;exports.mapSocialProviders=P;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@tempots/dom"),C=require("../auth-divider-CVKfA8Cp.cjs"),A=require("../translations-qefRsdGi.cjs"),w=require("../notice-BBnSXYUc.cjs"),y=require("../stack-dwLevGa2.cjs"),b=require("../input-container-BkPcNDaZ.cjs"),v=require("../text-input-D_IxFd0M.cjs");function g(a,t){return a.error?(t.onError?.({message:a.error.message,status:a.error.status}),a.error.message):null}function I(a,t,s){return async n=>{const l=await a.signIn.email({email:n.email,password:n.password,callbackURL:t.callbackURL}),o=g(l,t);return o||(await s(),null)}}function F(a,t,s){return async n=>{const l=await a.signUp.email({name:n.name,email:n.email,password:n.password,callbackURL:t.callbackURL}),o=g(l,t);return o||(await s(),null)}}function U(a,t){return async s=>{const n=await a.requestPasswordReset({email:s.email,redirectTo:t.callbackURL});return g(n,t)}}function $(a,t){return async s=>{const n=await a.signIn.social({provider:s,callbackURL:t.callbackURL,errorCallbackURL:t.errorCallbackURL});g(n,t)}}function L(a,t={}){const s=e.prop(null),n=e.prop(!0),l=e.computedOf(s)(h=>h?.user??null),o=e.computedOf(s)(h=>h!=null);let u;async function d(){try{const h=await a.getSession();h.error||!h.data?s.set(null):s.set({user:h.data.user,session:h.data.session})}catch{s.set(null)}finally{n.set(!1)}}t.onSessionChange&&s.on(t.onSessionChange),d(),t.refreshInterval&&t.refreshInterval>0&&(u=setInterval(d,t.refreshInterval));function p(){u!=null&&(clearInterval(u),u=void 0),s.dispose(),n.dispose(),l.dispose(),o.dispose()}return{session:s,isPending:n,user:l,isAuthenticated:o,refresh:d,dispose:p}}function P(a){return a.map(t=>({provider:t}))}function _(a,t={}){const s=L(a,{refreshInterval:t.refreshInterval,onSessionChange:t.onSessionChange}),n=()=>s.refresh(),l=I(a,t,n),o=F(a,t,n),u=U(a,t),d=$(a,t),p=t.socialProviders?P(t.socialProviders):[],h={onSignIn:l,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,labels:t.labels?{emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,rememberMeLabel:t.labels.rememberMeLabel,signInButton:t.labels.signInButton,forgotPasswordLink:t.labels.forgotPasswordLink,noAccountLink:t.labels.noAccountLink}:void 0},i={onSignUp:o,passwordRules:t.passwordRules,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels?{nameLabel:t.labels.nameLabel,emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,confirmPasswordLabel:t.labels.confirmPasswordLabel,acceptTermsLabel:t.labels.acceptTermsLabel,signUpButton:t.labels.signUpButton,hasAccountLink:t.labels.hasAccountLink}:void 0},m={onResetPassword:u,labels:t.labels?{resetPasswordButton:t.labels.resetPasswordButton,resetPasswordDescription:t.labels.resetPasswordDescription,emailLabel:t.labels.emailLabel,backToSignInLink:t.labels.backToSignInLink}:void 0},c={onSignIn:l,onSignUp:o,onResetPassword:u,onSocialLogin:d,socialProviders:p.length>0?p:void 0,showSocialDivider:p.length>0,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels};async function r(){await a.signOut(),await n()}function f(){s.dispose()}return{session:s.session,isPending:s.isPending,user:s.user,isAuthenticated:s.isAuthenticated,containerOptions:c,signInOptions:h,signUpOptions:i,resetOptions:m,socialProviders:p,signOut:r,refreshSession:n,dispose:f}}const R={mark:e.makeProviderMark("BetterAuth"),create:a=>{if(!a)throw new Error("BetterAuth provider requires a client option");const t=_(a.client,a);return{value:t,dispose:()=>t.dispose()}}};function E(a,t,...s){return C.AuthContainer({...a.containerOptions,...t},...s)}function O(a,t){return C.AuthModal(s=>t(n=>s({...a.containerOptions,...n})))}function M(a,t){return e.When(a.isAuthenticated,t)}function D(a,t){return e.Unless(a.isAuthenticated,t)}const T={twoFactorSetupDescription:"Enter your password to enable two-factor authentication.",twoFactorEnableButton:"Enable 2FA",twoFactorVerifyButton:"Verify",twoFactorScanDescription:"Scan the code below with your authenticator app, then enter the verification code.",twoFactorBackupCodesDescription:"Save these backup codes in a safe place. You can use them to sign in if you lose access to your authenticator.",twoFactorCodePlaceholder:"Enter 6-digit code",twoFactorBackupCodePlaceholder:"Enter backup code",twoFactorEnabled:"Two-factor authentication has been enabled.",twoFactorTotpDescription:"Enter the code from your authenticator app.",twoFactorOtpDescription:"Enter the one-time code sent to you.",twoFactorBackupDescription:"Enter one of your backup codes.",twoFactorSendOtpButton:"Send Code",twoFactorMethodLabel:a=>{switch(a){case"totp":return"Authenticator";case"otp":return"Email/SMS";case"backup":return"Backup Code";default:return a}},passwordPlaceholder:"Enter your password",magicLinkDescription:"Enter your email to receive a sign-in link.",magicLinkSendButton:"Send Magic Link",magicLinkSent:"A sign-in link has been sent to your email.",passkeySignInButton:"Sign in with Passkey",passkeyAddButton:"Add Passkey",passkeyDeleteButton:"Delete",passkeyRenameButton:"Rename",passkeySaveButton:"Save",passkeyCancelButton:"Cancel",passkeyNamePlaceholder:"Passkey name (optional)",passkeyUnnamed:"Unnamed passkey"},B=T,S="en",N=Object.assign({}),k=A.makeI18nProvider({defaultLocale:S,defaultMessages:B,localeLoader:async a=>{if(a===S)return B;const t=N[`./locales/${a}.ts`];return t?await t():B},providerName:"BetterAuthI18n"});function q({twoFactor:a,issuer:t,onComplete:s}){const n=e.prop(""),l=e.prop(null),o=e.prop([]),u=e.prop(""),d=e.prop(null),p=e.prop(!1),h=e.prop("password");async function i(c){c.preventDefault(),p.set(!0),d.set(null);const r=await a.enable({password:n.value,issuer:t});if(p.set(!1),r.error){d.set(r.error.message);return}r.data&&(l.set(r.data.totpURI),o.set(r.data.backupCodes),h.set("verify"))}async function m(c){c.preventDefault(),p.set(!0),d.set(null);const r=await a.verifyTotp({code:u.value});if(p.set(!1),r.error){d.set(r.error.message);return}h.set("complete"),s?.()}return e.Use(k,c=>e.html.div(e.attr.class("bc-two-factor"),e.Ensure(d,r=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(r))),e.OneOfValue(h,{password:()=>e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(i),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),c.$.twoFactorSetupDescription),w.PasswordInput({value:n,onChange:r=>n.set(r),placeholder:c.$.passwordPlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorEnableButton))),verify:()=>e.Fragment(e.Ensure(l,r=>e.html.div(e.attr.class("bc-two-factor__totp-uri"),e.html.p(c.$.twoFactorScanDescription),e.html.code(e.attr.class("bc-two-factor__code-display"),r))),e.NotEmpty(o,()=>e.html.div(e.attr.class("bc-two-factor__backup-codes"),e.html.p(c.$.twoFactorBackupCodesDescription),e.html.ul(e.ForEach(o,r=>e.html.li(r))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(m),y.Stack(v.TextInput({value:u,onChange:r=>u.set(r),placeholder:c.$.twoFactorCodePlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorVerifyButton)))),complete:()=>e.html.div(e.attr.class("bc-two-factor__complete"),w.Notice({variant:"success",tone:"prominent"},e.html.div(c.$.twoFactorEnabled)))})))}function x({twoFactor:a,methods:t=["totp","backup"],trustDevice:s,onVerified:n}){const l=e.prop(""),o=e.prop(null),u=e.prop(!1),d=e.prop(t[0]??"totp");async function p(i){i.preventDefault(),u.set(!0),o.set(null);const m=d.value;let c;if(m==="totp")c=await a.verifyTotp({code:l.value,trustDevice:s});else if(m==="otp"&&a.verifyOtp)c=await a.verifyOtp({code:l.value,trustDevice:s});else if(m==="backup")c=await a.verifyBackupCode({code:l.value});else{o.set("Unsupported verification method"),u.set(!1);return}if(u.set(!1),c.error){o.set(c.error.message);return}n?.()}async function h(){if(!a.sendOtp)return;u.set(!0),o.set(null);const i=await a.sendOtp({trustDevice:s});u.set(!1),i.error&&o.set(i.error.message)}return e.Use(k,i=>{const m=e.computedOf(d,i)((r,f)=>r==="totp"?f.twoFactorTotpDescription:r==="otp"?f.twoFactorOtpDescription:f.twoFactorBackupDescription),c=e.computedOf(d,i)((r,f)=>r==="backup"?f.twoFactorBackupCodePlaceholder:f.twoFactorCodePlaceholder);return e.html.div(e.attr.class("bc-two-factor"),e.Ensure(o,r=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(r))),e.When(t.length>1,()=>e.html.div(e.attr.class("bc-two-factor__methods"),...t.map(r=>e.html.button(e.attr.type("button"),e.attr.class("bc-two-factor__method-button"),e.attr.class(d.map(f=>f===r?"bc-two-factor__method-button--active":"")),e.on.click(()=>{d.set(r),l.set(""),o.set(null)}),i.$.twoFactorMethodLabel.map(f=>f(r)))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(p),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),m),e.When(d.map(r=>r==="otp"&&a.sendOtp!=null),()=>b.Button({type:"button",variant:"outline",color:"primary",onClick:h,loading:u},i.$.twoFactorSendOtpButton)),v.TextInput({value:l,onChange:r=>l.set(r),placeholder:c}),b.Button({type:"submit",variant:"filled",color:"primary",loading:u},e.attr.class("bc-auth-form__submit"),i.$.twoFactorVerifyButton))))})}function V({client:a,callbackURL:t}){const s=e.prop(""),n=e.prop(null),l=e.prop(!1),o=e.prop(!1);async function u(d){if(d.preventDefault(),!a.signIn.magicLink){n.set("Magic link sign-in is not configured");return}l.set(!0),n.set(null);const p=await a.signIn.magicLink({email:s.value,callbackURL:t});if(l.set(!1),p.error){n.set(p.error.message);return}o.set(!0)}return e.Use(k,d=>e.html.div(e.attr.class("bc-auth-form"),e.Ensure(n,p=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(p))),e.Unless(o,()=>e.html.form(e.attr.class("bc-auth-form__form"),e.on.submit(u),y.Stack(e.attr.class("bc-auth-form__fields"),e.html.p(e.attr.class("bc-auth-form__description"),d.$.magicLinkDescription),w.EmailInput({value:s,onChange:p=>s.set(p)}),b.Button({type:"submit",variant:"filled",color:"primary",loading:l},e.attr.class("bc-auth-form__submit"),d.$.magicLinkSendButton)))),e.When(o,()=>w.Notice({variant:"success",tone:"prominent"},e.html.div(d.$.magicLinkSent)))))}function W({client:a,autoFill:t,onSuccess:s,onError:n}){const l=e.prop(!1);async function o(){if(!a.signIn.passkey)return;l.set(!0);const u=await a.signIn.passkey({autoFill:t});if(l.set(!1),u.error){n?.({message:u.error.message,status:u.error.status});return}s?.()}return e.Use(k,u=>b.Button({type:"button",variant:"outline",color:"primary",onClick:o,loading:l},e.attr.class("bc-passkey-signin"),u.$.passkeySignInButton))}function z({passkey:a}){const t=e.prop([]),s=e.prop(null),n=e.prop(!1),l=e.prop("");async function o(i,m){n.set(!0),s.set(null);const c=await i();if(n.set(!1),c.error){s.set(c.error.message);return}await m?.(c.data)}async function u(){await o(()=>a.listUserPasskeys(),i=>t.set(i??[]))}async function d(){const i=l.value||void 0;await o(()=>a.addPasskey({name:i}),async()=>{l.set(""),await u()})}async function p(i){await o(()=>a.deletePasskey({id:i}),()=>u())}async function h(i,m){await o(()=>a.updatePasskey({id:i,name:m}),()=>u())}return u(),e.Use(k,i=>e.html.div(e.attr.class("bc-passkey-management"),e.Ensure(s,m=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(m))),e.html.div(e.attr.class("bc-passkey-list"),e.ForEach(t,m=>{const c=e.prop(!1),r=e.prop(m.$.name?.value??"");return e.html.div(e.attr.class("bc-passkey-item"),e.Unless(c,()=>e.html.div(e.attr.class("bc-passkey-item__info"),e.html.span(e.attr.class("bc-passkey-item__name"),m.$.name?.map(f=>f??i.$.passkeyUnnamed.value)??i.$.passkeyUnnamed),e.html.span(e.attr.class("bc-passkey-item__date"),m.$.createdAt))),e.When(c,()=>e.html.div(e.attr.class("bc-passkey-item__edit"),v.TextInput({value:r,onChange:f=>r.set(f)}))),e.html.div(e.attr.class("bc-passkey-item__actions"),e.Unless(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:()=>{r.set(m.$.name?.value??""),c.set(!0)}},i.$.passkeyRenameButton),b.Button({type:"button",variant:"text",size:"sm",color:"danger",onClick:()=>p(m.$.id.value)},i.$.passkeyDeleteButton))),e.When(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:async()=>{await h(m.$.id.value,r.value),c.set(!1)}},i.$.passkeySaveButton),b.Button({type:"button",variant:"text",size:"sm",onClick:()=>c.set(!1)},i.$.passkeyCancelButton)))))})),e.html.div(e.attr.class("bc-passkey-add"),y.Stack(v.TextInput({value:l,onChange:m=>l.set(m),placeholder:i.$.passkeyNamePlaceholder}),b.Button({type:"button",variant:"filled",color:"primary",onClick:d,loading:n},i.$.passkeyAddButton)))))}exports.Authenticated=M;exports.BetterAuth=R;exports.BetterAuthContainer=E;exports.BetterAuthI18n=k;exports.BetterAuthModal=O;exports.MagicLinkForm=V;exports.PasskeyManagement=z;exports.PasskeySignIn=W;exports.TwoFactorSetup=q;exports.TwoFactorVerify=x;exports.Unauthenticated=D;exports.createBetterAuthBridge=_;exports.createSessionManager=L;exports.mapSocialProviders=P;