@opexa/portal-components 0.0.518 → 0.0.520

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 (169) hide show
  1. package/dist/components/Banner/Banner.client.d.ts +12 -0
  2. package/dist/components/Banner/Banner.client.js +49 -0
  3. package/dist/components/DigitainLauncher/Loading.js +1 -1
  4. package/dist/components/Jackpots/Jackpots.module.css +184 -184
  5. package/dist/components/Jackpots/JackpotsCarousel/JackpotsCarouselItem.module.css +184 -184
  6. package/dist/components/Jackpots/JackpotsList/JackpotsListItem.module.css +184 -184
  7. package/dist/components/KYC/BasicInformation.js +1 -1
  8. package/dist/components/KYC/IdentityVerification.js +1 -1
  9. package/dist/components/KYC/KYC.lazy.js +1 -1
  10. package/dist/components/KYC/KYCDefault/IdentityVerification.js +3 -6
  11. package/dist/components/KYC/KYCDefault/Indicator.js +1 -1
  12. package/dist/components/KYC/KYCDefault/KYCDefault.d.ts +1 -0
  13. package/dist/components/KYC/KYCDefault/KYCDefault.js +3 -28
  14. package/dist/components/KYC/KYCDefault/PersonalInformation.js +1 -4
  15. package/dist/components/KYC/KYCDefault/useKYCDefault.d.ts +2 -1
  16. package/dist/components/KYC/KYCDefault/useKYCDefault.js +3 -2
  17. package/dist/components/KYC/KYCReminder.lazy.js +2 -5
  18. package/dist/components/KYC/KYCSumsub.d.ts +1 -0
  19. package/dist/components/KYC/KycOpenOnHomeMount.d.ts +4 -1
  20. package/dist/components/KYC/KycOpenOnHomeMount.js +15 -15
  21. package/dist/components/KYC/PersonalInformation.js +1 -1
  22. package/dist/components/PortalProvider/CXDTokenObserver.js +11 -11
  23. package/dist/components/SignUp/SignUpDefault/SignUpDefaultForm.js +32 -10
  24. package/dist/components/SignUp/SignUpKYC/SignUpKYCForm.js +30 -11
  25. package/dist/components/Tournaments/TournamentsCarousel/TournamentsCarouselItem.module.css +184 -184
  26. package/dist/components/Tournaments/TournamentsList/TournamentItem.module.css +184 -184
  27. package/dist/services/queries.js +2755 -2755
  28. package/dist/styles/theme.css +731 -731
  29. package/dist/ui/Carousel/Carousel.d.ts +45 -45
  30. package/dist/ui/Carousel/carousel.recipe.d.ts +5 -5
  31. package/dist/ui/DatePicker/DatePicker.d.ts +72 -72
  32. package/dist/ui/DatePicker/datePicker.recipe.d.ts +3 -3
  33. package/dist/ui/Menu/Menu.d.ts +198 -198
  34. package/dist/ui/Menu/menu.recipe.d.ts +11 -11
  35. package/package.json +163 -163
  36. package/dist/components/Disclaimer/ResponsibleGaming.d.ts +0 -10
  37. package/dist/components/Disclaimer/ResponsibleGaming.js +0 -13
  38. package/dist/components/Disclaimer/TermsOfUse.d.ts +0 -11
  39. package/dist/components/Disclaimer/TermsOfUse.js +0 -13
  40. package/dist/components/FeatureFlag/FeatureFlag.d.ts +0 -1
  41. package/dist/components/FeatureFlag/FeatureFlag.js +0 -29
  42. package/dist/components/FeatureFlag/index.d.ts +0 -1
  43. package/dist/components/FeatureFlag/index.js +0 -1
  44. package/dist/components/KYC/AutoOpen.d.ts +0 -1
  45. package/dist/components/KYC/AutoOpen.js +0 -40
  46. package/dist/components/KYC/CaptureIdDocument.d.ts +0 -1
  47. package/dist/components/KYC/CaptureIdDocument.js +0 -219
  48. package/dist/components/KYC/CaptureSelfie.d.ts +0 -1
  49. package/dist/components/KYC/CaptureSelfie.js +0 -285
  50. package/dist/components/KYC/DisplayImage.d.ts +0 -5
  51. package/dist/components/KYC/DisplayImage.js +0 -8
  52. package/dist/components/KYC/FileUpload.d.ts +0 -10
  53. package/dist/components/KYC/FileUpload.js +0 -72
  54. package/dist/components/KYC/NoCameraError.d.ts +0 -7
  55. package/dist/components/KYC/NoCameraError.js +0 -6
  56. package/dist/components/KYC/PersonOverlayDesktop.d.ts +0 -7
  57. package/dist/components/KYC/PersonOverlayDesktop.js +0 -9
  58. package/dist/components/KYC/backup/Header.d.ts +0 -1
  59. package/dist/components/KYC/backup/Header.js +0 -8
  60. package/dist/components/KYC/backup/Indicator.d.ts +0 -1
  61. package/dist/components/KYC/backup/Indicator.js +0 -9
  62. package/dist/components/KYC/backup/KYC.d.ts +0 -1
  63. package/dist/components/KYC/backup/KYC.js +0 -14
  64. package/dist/components/KYC/backup/KYC.lazy.d.ts +0 -1
  65. package/dist/components/KYC/backup/KYC.lazy.js +0 -26
  66. package/dist/components/KYC/backup/KYCContext.d.ts +0 -6
  67. package/dist/components/KYC/backup/KYCContext.js +0 -2
  68. package/dist/components/KYC/backup/Step1.d.ts +0 -1
  69. package/dist/components/KYC/backup/Step1.js +0 -13
  70. package/dist/components/KYC/backup/Step2.d.ts +0 -1
  71. package/dist/components/KYC/backup/Step2.js +0 -13
  72. package/dist/components/KYC/backup/Step3.d.ts +0 -1
  73. package/dist/components/KYC/backup/Step3.js +0 -13
  74. package/dist/components/KYC/backup/Step4.d.ts +0 -1
  75. package/dist/components/KYC/backup/Step4.js +0 -7
  76. package/dist/components/KYC/backup/useKYC.d.ts +0 -10
  77. package/dist/components/KYC/backup/useKYC.js +0 -8
  78. package/dist/components/KYC/loadModels.d.ts +0 -1
  79. package/dist/components/KYC/loadModels.js +0 -9
  80. package/dist/components/KYC/utils.d.ts +0 -9
  81. package/dist/components/KYC/utils.js +0 -79
  82. package/dist/components/Messages/Message.d.ts +0 -1
  83. package/dist/components/Messages/Message.js +0 -35
  84. package/dist/components/Messages/MessageContext.d.ts +0 -6
  85. package/dist/components/Messages/MessageContext.js +0 -2
  86. package/dist/components/Messages/MessagePopup.d.ts +0 -1
  87. package/dist/components/Messages/MessagePopup.js +0 -20
  88. package/dist/components/Messages/MessageTrigger.d.ts +0 -8
  89. package/dist/components/Messages/MessageTrigger.js +0 -19
  90. package/dist/components/Quests/CountdownTimer.d.ts +0 -15
  91. package/dist/components/Quests/CountdownTimer.js +0 -33
  92. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.d.ts +0 -4
  93. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuest.js +0 -78
  94. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuestModal.d.ts +0 -8
  95. package/dist/components/Quests/DailyCheckInQuest/DailyCheckInQuestModal.js +0 -9
  96. package/dist/components/Quests/OnboardingQuest/OnboardingQuest.d.ts +0 -4
  97. package/dist/components/Quests/OnboardingQuest/OnboardingQuest.js +0 -4
  98. package/dist/components/Quests/WageringQuest/WageringQuest.d.ts +0 -4
  99. package/dist/components/Quests/WageringQuest/WageringQuest.js +0 -20
  100. package/dist/components/Quests/WageringQuest/WageringQuestModal.d.ts +0 -9
  101. package/dist/components/Quests/WageringQuest/WageringQuestModal.js +0 -9
  102. package/dist/components/SignUp/SignUp.lazy.d.ts +0 -12
  103. package/dist/components/SignUp/SignUp.lazy.js +0 -18
  104. package/dist/components/SignUp/SignUpContext.d.ts +0 -6
  105. package/dist/components/SignUp/SignUpContext.js +0 -2
  106. package/dist/components/SignUp/SignUpDefault/SignUp.lazy.d.ts +0 -17
  107. package/dist/components/SignUp/SignUpDefault/SignUp.lazy.js +0 -18
  108. package/dist/components/SignUp/SignUpDefault/SignUpContext.d.ts +0 -6
  109. package/dist/components/SignUp/SignUpDefault/SignUpContext.js +0 -2
  110. package/dist/components/SignUp/SignUpDefault/SignUpForm.d.ts +0 -1
  111. package/dist/components/SignUp/SignUpDefault/SignUpForm.js +0 -310
  112. package/dist/components/SignUp/SignUpForm.d.ts +0 -1
  113. package/dist/components/SignUp/SignUpForm.js +0 -284
  114. package/dist/components/SignUp/SignUpKYC/CaptureIdDocument.d.ts +0 -1
  115. package/dist/components/SignUp/SignUpKYC/CaptureIdDocument.js +0 -198
  116. package/dist/components/SignUp/SignUpKYC/CaptureSelfie.d.ts +0 -1
  117. package/dist/components/SignUp/SignUpKYC/CaptureSelfie.js +0 -251
  118. package/dist/components/SignUp/SignUpKYC/ImageUploader.d.ts +0 -10
  119. package/dist/components/SignUp/SignUpKYC/ImageUploader.js +0 -42
  120. package/dist/components/SignUp/SignUpKYC/PersonOverlayDesktop.d.ts +0 -7
  121. package/dist/components/SignUp/SignUpKYC/PersonOverlayDesktop.js +0 -9
  122. package/dist/components/SignUp/SignUpKYC/SignUpFormKYC.d.ts +0 -1
  123. package/dist/components/SignUp/SignUpKYC/SignUpFormKYC.js +0 -464
  124. package/dist/components/SignUp/SignUpKYC/useImageUploader.d.ts +0 -11
  125. package/dist/components/SignUp/SignUpKYC/useImageUploader.js +0 -20
  126. package/dist/components/SignUp/SignUpKYC/utils.d.ts +0 -9
  127. package/dist/components/SignUp/SignUpKYC/utils.js +0 -79
  128. package/dist/components/SignUp/SignUpPagcor/CaptureIdDocument.d.ts +0 -1
  129. package/dist/components/SignUp/SignUpPagcor/CaptureIdDocument.js +0 -198
  130. package/dist/components/SignUp/SignUpPagcor/CaptureSelfie.d.ts +0 -1
  131. package/dist/components/SignUp/SignUpPagcor/CaptureSelfie.js +0 -251
  132. package/dist/components/SignUp/SignUpPagcor/ImageUploader.d.ts +0 -10
  133. package/dist/components/SignUp/SignUpPagcor/ImageUploader.js +0 -41
  134. package/dist/components/SignUp/SignUpPagcor/SignUpFormPagcor.d.ts +0 -1
  135. package/dist/components/SignUp/SignUpPagcor/SignUpFormPagcor.js +0 -429
  136. package/dist/components/SignUp/SignUpPagcor/SignUpPagcor.lazy.d.ts +0 -13
  137. package/dist/components/SignUp/SignUpPagcor/SignUpPagcor.lazy.js +0 -26
  138. package/dist/components/SignUp/SignUpPagcor/SignUpPagcorContext.d.ts +0 -7
  139. package/dist/components/SignUp/SignUpPagcor/SignUpPagcorContext.js +0 -2
  140. package/dist/components/SignUp/SignUpPagcor/useImageUploader.d.ts +0 -11
  141. package/dist/components/SignUp/SignUpPagcor/useImageUploader.js +0 -20
  142. package/dist/components/shared/IdDocumentField.client.d.ts +0 -25
  143. package/dist/components/shared/IdDocumentField.client.js +0 -204
  144. package/dist/components/shared/IdDocumentField.d.ts +0 -2
  145. package/dist/components/shared/IdDocumentField.js +0 -11
  146. package/dist/components/shared/SelfieField.client.d.ts +0 -20
  147. package/dist/components/shared/SelfieField.client.js +0 -327
  148. package/dist/components/shared/SelfieField.d.ts +0 -2
  149. package/dist/components/shared/SelfieField.js +0 -11
  150. package/dist/constants/BranchCode.d.ts +0 -4
  151. package/dist/constants/BranchCode.js +0 -42
  152. package/dist/handlers/postTransformIdFrontImage.d.ts +0 -3
  153. package/dist/handlers/postTransformIdFrontImage.js +0 -67
  154. package/dist/handlers/postTransformSelfieImage.d.ts +0 -3
  155. package/dist/handlers/postTransformSelfieImage.js +0 -71
  156. package/dist/handlers.d.ts +0 -43
  157. package/dist/handlers.js +0 -297
  158. package/dist/icons/BellRingIcon.d.ts +0 -2
  159. package/dist/icons/BellRingIcon.js +0 -4
  160. package/dist/utils/dataUrlToBlob.d.ts +0 -1
  161. package/dist/utils/dataUrlToBlob.js +0 -11
  162. package/dist/utils/gamesAvailable3pmTo3am.d.ts +0 -1
  163. package/dist/utils/gamesAvailable3pmTo3am.js +0 -1
  164. package/dist/utils/getGameName.d.ts +0 -1
  165. package/dist/utils/getGameName.js +0 -6
  166. package/dist/utils/isBetween3amAnd3pm.d.ts +0 -1
  167. package/dist/utils/isBetween3amAnd3pm.js +0 -5
  168. package/dist/utils/resizeImageSize.d.ts +0 -2
  169. package/dist/utils/resizeImageSize.js +0 -11
@@ -4,14 +4,13 @@ import { useEffect } from 'react';
4
4
  import { useAccountQuery } from '../../client/hooks/useAccountQuery.js';
5
5
  import { useGlobalStore } from '../../client/hooks/useGlobalStore.js';
6
6
  import { useMemberVerificationQuery } from '../../client/hooks/useMemberVerificationQuery.js';
7
- export function KycOpenOnHomeMount() {
7
+ export function KycOpenOnHomeMount(props) {
8
8
  const setkycReminderOpen = useGlobalStore((s) => s.kycReminder.setOpen);
9
9
  const setkycOpen = useGlobalStore((s) => s.kyc.setOpen);
10
10
  const pathname = usePathname();
11
11
  const { data: verification, isLoading: verificationLoading } = useMemberVerificationQuery();
12
12
  const { data: account, isLoading: accountLoading } = useAccountQuery();
13
13
  const isVerificationLocked = account?.status === 'VERIFICATION_LOCKED';
14
- const isPending = account?.verificationStatus === 'PENDING';
15
14
  const hasntSubmittedCompliantDocs = account?.verified ||
16
15
  verification?.sumsubVerified ||
17
16
  verification?.status === 'APPROVED' ||
@@ -28,20 +27,21 @@ export function KycOpenOnHomeMount() {
28
27
  verification?.status === 'PENDING' ||
29
28
  verification?.status === 'VERIFIED'
30
29
  ? false
31
- : !!verification?.nationality ||
32
- !!verification?.natureOfWork ||
33
- !!verification?.sourceOfIncome ||
34
- !!verification?.permanentAddress ||
35
- !!verification?.placeOfBirth ||
36
- !!verification?.address;
30
+ : !verification?.nationality ||
31
+ !verification?.natureOfWork ||
32
+ !verification?.sourceOfIncome ||
33
+ !verification?.permanentAddress ||
34
+ !verification?.placeOfBirth ||
35
+ !verification?.address;
37
36
  useEffect(() => {
38
37
  if (pathname === '/' && !verificationLoading && !accountLoading) {
39
- if (isPending) {
40
- setkycOpen(false);
41
- setkycReminderOpen(true);
42
- }
43
- if (hasntSubmittedCompliantDocs) {
44
- setkycOpen(true);
38
+ if (hasntSubmittedCompliantDocs || hasntCompletedKYC) {
39
+ if (props.isSkippable) {
40
+ setkycReminderOpen(true);
41
+ }
42
+ else {
43
+ setkycOpen(true);
44
+ }
45
45
  }
46
46
  else if ((!hasntSubmittedCompliantDocs && hasntCompletedKYC) ||
47
47
  isVerificationLocked) {
@@ -52,12 +52,12 @@ export function KycOpenOnHomeMount() {
52
52
  pathname,
53
53
  setkycReminderOpen,
54
54
  setkycOpen,
55
+ props.isSkippable,
55
56
  hasntSubmittedCompliantDocs,
56
57
  verificationLoading,
57
58
  accountLoading,
58
59
  hasntCompletedKYC,
59
60
  isVerificationLocked,
60
- isPending,
61
61
  ]);
62
62
  return null;
63
63
  }
@@ -104,7 +104,7 @@ export function PersonalInformation() {
104
104
  }
105
105
  const address = form.watch('address');
106
106
  const permanentAddress = form.watch('permanentAddress');
107
- return (_jsxs("div", { children: [_jsx(Dialog.Title, { className: "text-center text-lg font-semibold", children: "Personal Information" }), _jsx(Dialog.Description, { className: "text-text-secondary-700 mt-xs text-center text-sm", children: "Provide your basic details and work info." }), _jsxs("form", { className: "mt-7", onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(Field.Root, { invalid: !!form.formState.errors.permanentAddress, children: [_jsx(Field.Label, { children: "Permanent address" }), _jsx(Field.Input, { placeholder: "Enter your permanent address", ...form.register('permanentAddress') }), _jsx(Field.ErrorText, { children: form.formState.errors.permanentAddress?.message })] }), _jsxs(Field.Root, { className: "mt-2xl", invalid: !!form.formState.errors.address, children: [_jsx(Field.Label, { children: "Current address" }), _jsx(Field.Input, { placeholder: "Enter your current address", ...form.register('address') }), _jsx(Field.ErrorText, { children: form.formState.errors.address?.message })] }), _jsxs(Checkbox.Root, { className: "mt-md", checked: address !== '' &&
107
+ return (_jsxs("div", { children: [_jsx(Dialog.Title, { className: "text-center font-semibold text-lg", children: "Personal Information" }), _jsx(Dialog.Description, { className: "mt-xs text-center text-sm text-text-secondary-700", children: "Provide your basic details and work info." }), _jsxs("form", { className: "mt-7", onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(Field.Root, { invalid: !!form.formState.errors.permanentAddress, children: [_jsx(Field.Label, { children: "Permanent address" }), _jsx(Field.Input, { placeholder: "Enter your permanent address", ...form.register('permanentAddress') }), _jsx(Field.ErrorText, { children: form.formState.errors.permanentAddress?.message })] }), _jsxs(Field.Root, { className: "mt-2xl", invalid: !!form.formState.errors.address, children: [_jsx(Field.Label, { children: "Current address" }), _jsx(Field.Input, { placeholder: "Enter your current address", ...form.register('address') }), _jsx(Field.ErrorText, { children: form.formState.errors.address?.message })] }), _jsxs(Checkbox.Root, { className: "mt-md", checked: address !== '' &&
108
108
  permanentAddress !== '' &&
109
109
  address === permanentAddress, onCheckedChange: (details) => {
110
110
  if (details.checked === true) {
@@ -1,30 +1,30 @@
1
1
  'use client';
2
2
  import { addHours } from 'date-fns';
3
3
  import { clamp } from 'lodash-es';
4
- import { useSearchParams } from 'next/navigation';
5
4
  import { useLocalStorage, useTimeout } from 'usehooks-ts';
6
5
  import { useAccountQuery } from '../../client/hooks/useAccountQuery.js';
7
6
  export function CXDTokenObserver() {
8
- const searchParams = useSearchParams();
9
- const cxdToken = searchParams.get('cxd');
10
- const accountQuery = useAccountQuery();
11
- const account = accountQuery.data;
12
- const [cxd, setCxd, removeCxd] = useLocalStorage('WebPortalCellxpertCxd', null);
7
+ const { data: account } = useAccountQuery();
8
+ const accountCxd = {
9
+ cxd: account?.cellxpertDetails?.cxd,
10
+ };
11
+ const [cxd, setCxd, removeCxd] = useLocalStorage('cxd', null);
13
12
  const now = new Date();
14
- const shouldTimeoutRun = cxdToken && account;
15
13
  const removeCxdUntilInMs = cxd?.timestamp
16
14
  ? clamp(cxd.timestamp - now.getTime(), 0, Infinity)
17
15
  : 0;
18
16
  useTimeout(() => {
19
- const isSame = cxd?.cxd === cxdToken;
17
+ const isSame = cxd?.cxd === accountCxd.cxd;
20
18
  if (!isSame) {
21
19
  const extendedTimestamp = addHours(new Date(), 6).getTime();
22
20
  setCxd({
23
- cxd: cxdToken,
21
+ cxd: accountCxd.cxd,
24
22
  timestamp: extendedTimestamp,
25
23
  });
26
24
  }
27
- }, shouldTimeoutRun ? 100 : null);
28
- useTimeout(() => removeCxd(), shouldTimeoutRun ? removeCxdUntilInMs : null);
25
+ }, account ? 100 : null);
26
+ useTimeout(() => {
27
+ removeCxd();
28
+ }, account ? removeCxdUntilInMs : null);
29
29
  return null;
30
30
  }
@@ -316,18 +316,40 @@ function DateOfBirthField(props) {
316
316
  // Custom input handler to automatically add slashes
317
317
  const handleInput = (e) => {
318
318
  const input = e.currentTarget;
319
- let value = input.value.replace(/\D/g, ''); // Remove all non-digits
320
- // Add slashes at appropriate positions
321
- if (value.length >= 2) {
322
- value = value.slice(0, 2) + '/' + value.slice(2);
319
+ const oldValue = input.value;
320
+ const oldCursorPosition = input.selectionStart ?? 0;
321
+ // Get digits only from the current input value string
322
+ const digitsOnly = input.value.replace(/\D/g, '');
323
+ let formattedValue = '';
324
+ // Format MM/DD/YYYY
325
+ if (digitsOnly.length > 0) {
326
+ formattedValue += digitsOnly.substring(0, 2);
327
+ if (digitsOnly.length > 2) {
328
+ formattedValue += '/' + digitsOnly.substring(2, 4);
329
+ }
330
+ if (digitsOnly.length > 4) {
331
+ formattedValue += '/' + digitsOnly.substring(4, 8);
332
+ }
323
333
  }
324
- if (value.length >= 5) {
325
- value = value.slice(0, 5) + '/' + value.slice(5);
334
+ formattedValue = formattedValue.substring(0, 10); // Limit length
335
+ if (formattedValue !== oldValue) {
336
+ input.value = formattedValue;
337
+ let newCursorPosition = oldCursorPosition;
338
+ // Calculate the number of slashes before the old cursor position in the old value
339
+ const oldSlashesBeforeCursor = (oldValue.substring(0, oldCursorPosition).match(/\//g) || []).length;
340
+ // Calculate the number of slashes before the new cursor position in the new formatted value
341
+ // We take the substring of the new formatted value up to where the cursor *would* be based on the old digits
342
+ const digitsBeforeOldCursor = oldValue.substring(0, oldCursorPosition).replace(/\D/g, '').length;
343
+ const newSlashesBeforeCursor = (formattedValue.substring(0, digitsBeforeOldCursor + oldSlashesBeforeCursor).match(/\//g) || []).length;
344
+ // Adjust newCursorPosition based on the difference in slash count
345
+ newCursorPosition += (newSlashesBeforeCursor - oldSlashesBeforeCursor);
346
+ // Ensure cursor stays within bounds
347
+ newCursorPosition = Math.min(newCursorPosition, formattedValue.length);
348
+ newCursorPosition = Math.max(0, newCursorPosition);
349
+ setTimeout(() => {
350
+ input.setSelectionRange(newCursorPosition, newCursorPosition);
351
+ }, 0);
326
352
  }
327
- // Limit to MM/DD/YYYY format (8 characters + 2 slashes = 10 total)
328
- value = value.slice(0, 10);
329
- // Update the input value
330
- input.value = value;
331
353
  };
332
354
  return (_jsxs(DatePicker.Root, { size: "md", variant: "outline", placeholder: "MM/DD/YYYY", lazyMount: true, unmountOnExit: true, fixedWeeks: true, selectionMode: "single", value: value ? [parseDate(value)] : [], onValueChange: (details) => {
333
355
  const value = details.value.at(0)?.toDate(DEVICE_TIMEZONE);
@@ -462,21 +462,40 @@ function DateOfBirthField(props) {
462
462
  defaultValue: props.defaultValue ?? null,
463
463
  onChange: props.onChange,
464
464
  });
465
- // Custom input handler to automatically add slashes
466
465
  const handleInput = (e) => {
467
466
  const input = e.currentTarget;
468
- let value = input.value.replace(/\D/g, ''); // Remove all non-digits
469
- // Add slashes at appropriate positions
470
- if (value.length >= 2) {
471
- value = value.slice(0, 2) + '/' + value.slice(2);
467
+ const oldValue = input.value;
468
+ const oldCursorPosition = input.selectionStart ?? 0;
469
+ const digitsOnly = input.value.replace(/\D/g, '');
470
+ let formattedValue = '';
471
+ // Format MM/DD/YYYY
472
+ if (digitsOnly.length > 0) {
473
+ formattedValue += digitsOnly.substring(0, 2);
474
+ if (digitsOnly.length > 2) {
475
+ formattedValue += '/' + digitsOnly.substring(2, 4);
476
+ }
477
+ if (digitsOnly.length > 4) {
478
+ formattedValue += '/' + digitsOnly.substring(4, 8);
479
+ }
472
480
  }
473
- if (value.length >= 5) {
474
- value = value.slice(0, 5) + '/' + value.slice(5);
481
+ formattedValue = formattedValue.substring(0, 10);
482
+ if (formattedValue !== oldValue) {
483
+ input.value = formattedValue;
484
+ let newCursorPosition = oldCursorPosition;
485
+ const oldSlashesBeforeCursor = (oldValue.substring(0, oldCursorPosition).match(/\//g) || []).length;
486
+ const digitsBeforeOldCursor = oldValue
487
+ .substring(0, oldCursorPosition)
488
+ .replace(/\D/g, '').length;
489
+ const newSlashesBeforeCursor = (formattedValue
490
+ .substring(0, digitsBeforeOldCursor + oldSlashesBeforeCursor)
491
+ .match(/\//g) || []).length;
492
+ newCursorPosition += newSlashesBeforeCursor - oldSlashesBeforeCursor;
493
+ newCursorPosition = Math.min(newCursorPosition, formattedValue.length);
494
+ newCursorPosition = Math.max(0, newCursorPosition);
495
+ setTimeout(() => {
496
+ input.setSelectionRange(newCursorPosition, newCursorPosition);
497
+ }, 0);
475
498
  }
476
- // Limit to MM/DD/YYYY format (8 characters + 2 slashes = 10 total)
477
- value = value.slice(0, 10);
478
- // Update the input value
479
- input.value = value;
480
499
  };
481
500
  return (_jsxs(DatePicker.Root, { size: "md", variant: "outline", placeholder: "MM/DD/YYYY", lazyMount: true, unmountOnExit: true, fixedWeeks: true, selectionMode: "single", value: value ? [parseDate(value)] : [], onValueChange: (details) => {
482
501
  const value = details.value.at(0)?.toDate(DEVICE_TIMEZONE);
@@ -1,184 +1,184 @@
1
- @keyframes arrow-green-flash {
2
- 0% {
3
- color: #abefc6;
4
- }
5
- 100% {
6
- color: #079455;
7
- }
8
- }
9
-
10
- .animate-arrow-green-flash-1 {
11
- animation: arrow-green-flash 0.4s infinite;
12
- animation-delay: -0.2s;
13
- }
14
-
15
- .animate-arrow-green-flash-2 {
16
- animation: arrow-green-flash 0.4s infinite;
17
- animation-delay: -0.1s;
18
- }
19
-
20
- .animate-arrow-green-flash-3 {
21
- animation: arrow-green-flash 0.4s infinite;
22
- }
23
-
24
- @keyframes arrow-red-flash {
25
- 0%,
26
- 100% {
27
- color: #f97066;
28
- }
29
- 50% {
30
- color: #fecdca;
31
- }
32
- }
33
-
34
- .animate-arrow-red-flash-1 {
35
- animation: arrow-red-flash 0.4s infinite;
36
- }
37
-
38
- .animate-arrow-red-flash-2 {
39
- animation: arrow-red-flash 0.4s infinite;
40
- animation-delay: -0.1s;
41
- }
42
-
43
- .animate-arrow-red-flash-3 {
44
- animation: arrow-red-flash 0.4s infinite;
45
- animation-delay: -0.2s;
46
- }
47
-
48
- /* Animated BG */
49
- @keyframes rotate {
50
- to {
51
- transform: rotate(1turn);
52
- }
53
- }
54
-
55
- .light-rays {
56
- position: absolute;
57
- top: 0;
58
- left: 0;
59
- right: 0;
60
- bottom: 0;
61
- overflow: hidden;
62
-
63
- --first: var(--color-bg-tertiary);
64
- --second: var(--color-bg-quaternary);
65
- }
66
-
67
- .light-rays::before,
68
- .light-rays::after {
69
- content: '';
70
- position: absolute;
71
- top: var(--light-rays-top, 150px);
72
- left: calc(50% - 90px);
73
- margin: -100vmax;
74
- width: 200vmax;
75
- height: 200vmax;
76
- opacity: 0.6;
77
- transform-origin: center;
78
- }
79
-
80
- .light-rays::before {
81
- background: conic-gradient(
82
- var(--first) 0deg 7.2deg,
83
- var(--second) 7.2deg 14.4deg,
84
- var(--first) 14.4deg 21.6deg,
85
- var(--second) 21.6deg 28.8deg,
86
- var(--first) 28.8deg 36deg,
87
- var(--second) 36deg 43.2deg,
88
- var(--first) 43.2deg 50.4deg,
89
- var(--second) 50.4deg 57.6deg,
90
- var(--first) 57.6deg 64.8deg,
91
- var(--second) 64.8deg 72deg,
92
- var(--first) 72deg 79.2deg,
93
- var(--second) 79.2deg 86.4deg,
94
- var(--first) 86.4deg 93.6deg,
95
- var(--second) 93.6deg 100.8deg,
96
- var(--first) 100.8deg 108deg,
97
- var(--second) 108deg 115.2deg,
98
- var(--first) 115.2deg 122.4deg,
99
- var(--second) 122.4deg 129.6deg,
100
- var(--first) 129.6deg 136.8deg,
101
- var(--second) 136.8deg 144deg,
102
- var(--first) 144deg 151.2deg,
103
- var(--second) 151.2deg 158.4deg,
104
- var(--first) 158.4deg 165.6deg,
105
- var(--second) 165.6deg 172.8deg,
106
- var(--first) 172.8deg 180deg,
107
- var(--second) 180deg 187.2deg,
108
- var(--first) 187.2deg 194.4deg,
109
- var(--second) 194.4deg 201.6deg,
110
- var(--first) 201.6deg 208.8deg,
111
- var(--second) 208.8deg 216deg,
112
- var(--first) 216deg 223.2deg,
113
- var(--second) 223.2deg 230.4deg,
114
- var(--first) 230.4deg 237.6deg,
115
- var(--second) 237.6deg 244.8deg,
116
- var(--first) 244.8deg 252deg,
117
- var(--second) 252deg 259.2deg,
118
- var(--first) 259.2deg 266.4deg,
119
- var(--second) 266.4deg 273.6deg,
120
- var(--first) 273.6deg 280.8deg,
121
- var(--second) 280.8deg 288deg,
122
- var(--first) 288deg 295.2deg,
123
- var(--second) 295.2deg 302.4deg,
124
- var(--first) 302.4deg 309.6deg,
125
- var(--second) 309.6deg 316.8deg,
126
- var(--first) 316.8deg 324deg,
127
- var(--second) 324deg 331.2deg,
128
- var(--first) 331.2deg 338.4deg,
129
- var(--second) 338.4deg 345.6deg,
130
- var(--first) 345.6deg 352.8deg,
131
- var(--second) 352.8deg 360deg
132
- );
133
- animation: rotate 20s linear infinite;
134
- }
135
-
136
- @media (max-width: 1024px) {
137
- .light-rays::before,
138
- .light-rays::after {
139
- left: auto;
140
- right: 11%;
141
- }
142
- }
143
-
144
- /* ScrollArea.module.css */
145
- .scrollArea {
146
- overflow-y: scroll;
147
- padding-right: 4px;
148
- }
149
-
150
- /* WebKit-based browsers */
151
- .scrollArea::-webkit-scrollbar {
152
- width: 8px;
153
- }
154
-
155
- .scrollArea::-webkit-scrollbar-track {
156
- background: var(--color-bg-primary-alt);
157
- border-radius: 9999px;
158
- }
159
-
160
- .scrollArea::-webkit-scrollbar-thumb {
161
- background-color: var(--color-bg-quaternary);
162
- border-radius: 9999px;
163
- }
164
-
165
- @keyframes waveColor {
166
- 0%,
167
- 2.5% {
168
- color: var(--wave-highlight-color);
169
- }
170
- 2.51%,
171
- 100% {
172
- color: var(--color-brand-300);
173
- }
174
- }
175
-
176
- .animate-wave-color-success {
177
- --wave-highlight-color: var(--color-success-800);
178
- animation: waveColor 4s ease-in-out infinite;
179
- }
180
-
181
- .animate-wave-color-error {
182
- --wave-highlight-color: var(--color-error-600);
183
- animation: waveColor 4s ease-in-out infinite;
184
- }
1
+ @keyframes arrow-green-flash {
2
+ 0% {
3
+ color: #abefc6;
4
+ }
5
+ 100% {
6
+ color: #079455;
7
+ }
8
+ }
9
+
10
+ .animate-arrow-green-flash-1 {
11
+ animation: arrow-green-flash 0.4s infinite;
12
+ animation-delay: -0.2s;
13
+ }
14
+
15
+ .animate-arrow-green-flash-2 {
16
+ animation: arrow-green-flash 0.4s infinite;
17
+ animation-delay: -0.1s;
18
+ }
19
+
20
+ .animate-arrow-green-flash-3 {
21
+ animation: arrow-green-flash 0.4s infinite;
22
+ }
23
+
24
+ @keyframes arrow-red-flash {
25
+ 0%,
26
+ 100% {
27
+ color: #f97066;
28
+ }
29
+ 50% {
30
+ color: #fecdca;
31
+ }
32
+ }
33
+
34
+ .animate-arrow-red-flash-1 {
35
+ animation: arrow-red-flash 0.4s infinite;
36
+ }
37
+
38
+ .animate-arrow-red-flash-2 {
39
+ animation: arrow-red-flash 0.4s infinite;
40
+ animation-delay: -0.1s;
41
+ }
42
+
43
+ .animate-arrow-red-flash-3 {
44
+ animation: arrow-red-flash 0.4s infinite;
45
+ animation-delay: -0.2s;
46
+ }
47
+
48
+ /* Animated BG */
49
+ @keyframes rotate {
50
+ to {
51
+ transform: rotate(1turn);
52
+ }
53
+ }
54
+
55
+ .light-rays {
56
+ position: absolute;
57
+ top: 0;
58
+ left: 0;
59
+ right: 0;
60
+ bottom: 0;
61
+ overflow: hidden;
62
+
63
+ --first: var(--color-bg-tertiary);
64
+ --second: var(--color-bg-quaternary);
65
+ }
66
+
67
+ .light-rays::before,
68
+ .light-rays::after {
69
+ content: '';
70
+ position: absolute;
71
+ top: var(--light-rays-top, 150px);
72
+ left: calc(50% - 90px);
73
+ margin: -100vmax;
74
+ width: 200vmax;
75
+ height: 200vmax;
76
+ opacity: 0.6;
77
+ transform-origin: center;
78
+ }
79
+
80
+ .light-rays::before {
81
+ background: conic-gradient(
82
+ var(--first) 0deg 7.2deg,
83
+ var(--second) 7.2deg 14.4deg,
84
+ var(--first) 14.4deg 21.6deg,
85
+ var(--second) 21.6deg 28.8deg,
86
+ var(--first) 28.8deg 36deg,
87
+ var(--second) 36deg 43.2deg,
88
+ var(--first) 43.2deg 50.4deg,
89
+ var(--second) 50.4deg 57.6deg,
90
+ var(--first) 57.6deg 64.8deg,
91
+ var(--second) 64.8deg 72deg,
92
+ var(--first) 72deg 79.2deg,
93
+ var(--second) 79.2deg 86.4deg,
94
+ var(--first) 86.4deg 93.6deg,
95
+ var(--second) 93.6deg 100.8deg,
96
+ var(--first) 100.8deg 108deg,
97
+ var(--second) 108deg 115.2deg,
98
+ var(--first) 115.2deg 122.4deg,
99
+ var(--second) 122.4deg 129.6deg,
100
+ var(--first) 129.6deg 136.8deg,
101
+ var(--second) 136.8deg 144deg,
102
+ var(--first) 144deg 151.2deg,
103
+ var(--second) 151.2deg 158.4deg,
104
+ var(--first) 158.4deg 165.6deg,
105
+ var(--second) 165.6deg 172.8deg,
106
+ var(--first) 172.8deg 180deg,
107
+ var(--second) 180deg 187.2deg,
108
+ var(--first) 187.2deg 194.4deg,
109
+ var(--second) 194.4deg 201.6deg,
110
+ var(--first) 201.6deg 208.8deg,
111
+ var(--second) 208.8deg 216deg,
112
+ var(--first) 216deg 223.2deg,
113
+ var(--second) 223.2deg 230.4deg,
114
+ var(--first) 230.4deg 237.6deg,
115
+ var(--second) 237.6deg 244.8deg,
116
+ var(--first) 244.8deg 252deg,
117
+ var(--second) 252deg 259.2deg,
118
+ var(--first) 259.2deg 266.4deg,
119
+ var(--second) 266.4deg 273.6deg,
120
+ var(--first) 273.6deg 280.8deg,
121
+ var(--second) 280.8deg 288deg,
122
+ var(--first) 288deg 295.2deg,
123
+ var(--second) 295.2deg 302.4deg,
124
+ var(--first) 302.4deg 309.6deg,
125
+ var(--second) 309.6deg 316.8deg,
126
+ var(--first) 316.8deg 324deg,
127
+ var(--second) 324deg 331.2deg,
128
+ var(--first) 331.2deg 338.4deg,
129
+ var(--second) 338.4deg 345.6deg,
130
+ var(--first) 345.6deg 352.8deg,
131
+ var(--second) 352.8deg 360deg
132
+ );
133
+ animation: rotate 20s linear infinite;
134
+ }
135
+
136
+ @media (max-width: 1024px) {
137
+ .light-rays::before,
138
+ .light-rays::after {
139
+ left: auto;
140
+ right: 11%;
141
+ }
142
+ }
143
+
144
+ /* ScrollArea.module.css */
145
+ .scrollArea {
146
+ overflow-y: scroll;
147
+ padding-right: 4px;
148
+ }
149
+
150
+ /* WebKit-based browsers */
151
+ .scrollArea::-webkit-scrollbar {
152
+ width: 8px;
153
+ }
154
+
155
+ .scrollArea::-webkit-scrollbar-track {
156
+ background: var(--color-bg-primary-alt);
157
+ border-radius: 9999px;
158
+ }
159
+
160
+ .scrollArea::-webkit-scrollbar-thumb {
161
+ background-color: var(--color-bg-quaternary);
162
+ border-radius: 9999px;
163
+ }
164
+
165
+ @keyframes waveColor {
166
+ 0%,
167
+ 2.5% {
168
+ color: var(--wave-highlight-color);
169
+ }
170
+ 2.51%,
171
+ 100% {
172
+ color: var(--color-brand-300);
173
+ }
174
+ }
175
+
176
+ .animate-wave-color-success {
177
+ --wave-highlight-color: var(--color-success-800);
178
+ animation: waveColor 4s ease-in-out infinite;
179
+ }
180
+
181
+ .animate-wave-color-error {
182
+ --wave-highlight-color: var(--color-error-600);
183
+ animation: waveColor 4s ease-in-out infinite;
184
+ }