@1money/component-ui 0.0.66 → 0.0.67

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 (129) hide show
  1. package/es/business/Dialog/ResultDialog/ResultDialog.d.ts +3 -0
  2. package/es/business/Dialog/ResultDialog/ResultDialog.js +126 -0
  3. package/es/business/Dialog/ResultDialog/constants.d.ts +27 -0
  4. package/es/business/Dialog/ResultDialog/constants.js +24 -0
  5. package/es/business/Dialog/ResultDialog/index.d.ts +3 -0
  6. package/es/business/Dialog/ResultDialog/index.js +4 -0
  7. package/es/business/Dialog/ResultDialog/interface.d.ts +95 -0
  8. package/es/business/Dialog/ResultDialog/interface.js +2 -0
  9. package/es/business/Dialog/ResultDialog/presets.d.ts +178 -0
  10. package/es/business/Dialog/ResultDialog/presets.js +139 -0
  11. package/es/business/Dialog/ResultDialog/style/ResultDialog.css +29 -0
  12. package/es/business/Dialog/ResultDialog/style/css.js +2 -0
  13. package/es/business/Dialog/ResultDialog/style/index.d.ts +1 -0
  14. package/es/business/Dialog/ResultDialog/style/index.js +2 -0
  15. package/es/business/Dialog/TransactionDialog/TransactionDialog.d.ts +3 -0
  16. package/es/business/Dialog/TransactionDialog/TransactionDialog.js +174 -0
  17. package/es/business/Dialog/TransactionDialog/constants.d.ts +34 -0
  18. package/es/business/Dialog/TransactionDialog/constants.js +33 -0
  19. package/es/business/Dialog/TransactionDialog/index.d.ts +3 -0
  20. package/es/business/Dialog/TransactionDialog/index.js +4 -0
  21. package/es/business/Dialog/TransactionDialog/interface.d.ts +116 -0
  22. package/es/business/Dialog/TransactionDialog/interface.js +2 -0
  23. package/es/business/Dialog/TransactionDialog/presets.d.ts +89 -0
  24. package/es/business/Dialog/TransactionDialog/presets.js +62 -0
  25. package/es/business/Dialog/TransactionDialog/style/TransactionDialog.css +36 -0
  26. package/es/business/Dialog/TransactionDialog/style/css.js +2 -0
  27. package/es/business/Dialog/TransactionDialog/style/index.d.ts +1 -0
  28. package/es/business/Dialog/TransactionDialog/style/index.js +2 -0
  29. package/es/business/Dialog/VerificationDialog/ResendRow.d.ts +14 -0
  30. package/es/business/Dialog/VerificationDialog/ResendRow.js +65 -0
  31. package/es/business/Dialog/VerificationDialog/VerificationDialog.d.ts +3 -0
  32. package/es/business/Dialog/VerificationDialog/VerificationDialog.js +116 -0
  33. package/es/business/Dialog/VerificationDialog/constants.d.ts +35 -0
  34. package/es/business/Dialog/VerificationDialog/constants.js +31 -0
  35. package/es/business/Dialog/VerificationDialog/hooks/index.d.ts +4 -0
  36. package/es/business/Dialog/VerificationDialog/hooks/index.js +3 -0
  37. package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.d.ts +50 -0
  38. package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +137 -0
  39. package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.d.ts +26 -0
  40. package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +103 -0
  41. package/es/business/Dialog/VerificationDialog/index.d.ts +3 -0
  42. package/es/business/Dialog/VerificationDialog/index.js +4 -0
  43. package/es/business/Dialog/VerificationDialog/interface.d.ts +124 -0
  44. package/es/business/Dialog/VerificationDialog/interface.js +2 -0
  45. package/es/business/Dialog/VerificationDialog/style/VerificationDialog.css +30 -0
  46. package/es/business/Dialog/VerificationDialog/style/css.js +2 -0
  47. package/es/business/Dialog/VerificationDialog/style/index.d.ts +1 -0
  48. package/es/business/Dialog/VerificationDialog/style/index.js +2 -0
  49. package/es/business/Dialog/index.d.ts +3 -0
  50. package/es/business/Dialog/index.js +4 -0
  51. package/es/business/index.d.ts +1 -0
  52. package/es/business/index.js +2 -1
  53. package/es/components/Button/Button.js +7 -3
  54. package/es/components/Button/constants.d.ts +1 -0
  55. package/es/components/Button/constants.js +2 -1
  56. package/es/components/Button/interface.d.ts +2 -0
  57. package/es/components/Button/style/Button.css +4 -0
  58. package/es/components/Dialog/Dialog.js +16 -7
  59. package/es/components/Dialog/constants.d.ts +1 -0
  60. package/es/components/Dialog/constants.js +3 -2
  61. package/es/components/Dialog/interface.d.ts +1 -0
  62. package/es/components/Dialog/style/Dialog.css +29 -0
  63. package/es/index.css +1 -1
  64. package/lib/business/Dialog/ResultDialog/ResultDialog.d.ts +3 -0
  65. package/lib/business/Dialog/ResultDialog/ResultDialog.js +132 -0
  66. package/lib/business/Dialog/ResultDialog/constants.d.ts +27 -0
  67. package/lib/business/Dialog/ResultDialog/constants.js +30 -0
  68. package/lib/business/Dialog/ResultDialog/index.d.ts +3 -0
  69. package/lib/business/Dialog/ResultDialog/index.js +40 -0
  70. package/lib/business/Dialog/ResultDialog/interface.d.ts +95 -0
  71. package/lib/business/Dialog/ResultDialog/interface.js +6 -0
  72. package/lib/business/Dialog/ResultDialog/presets.d.ts +178 -0
  73. package/lib/business/Dialog/ResultDialog/presets.js +145 -0
  74. package/lib/business/Dialog/ResultDialog/style/ResultDialog.css +29 -0
  75. package/lib/business/Dialog/ResultDialog/style/css.js +4 -0
  76. package/lib/business/Dialog/ResultDialog/style/index.d.ts +1 -0
  77. package/lib/business/Dialog/ResultDialog/style/index.js +4 -0
  78. package/lib/business/Dialog/TransactionDialog/TransactionDialog.d.ts +3 -0
  79. package/lib/business/Dialog/TransactionDialog/TransactionDialog.js +180 -0
  80. package/lib/business/Dialog/TransactionDialog/constants.d.ts +34 -0
  81. package/lib/business/Dialog/TransactionDialog/constants.js +39 -0
  82. package/lib/business/Dialog/TransactionDialog/index.d.ts +3 -0
  83. package/lib/business/Dialog/TransactionDialog/index.js +40 -0
  84. package/lib/business/Dialog/TransactionDialog/interface.d.ts +116 -0
  85. package/lib/business/Dialog/TransactionDialog/interface.js +6 -0
  86. package/lib/business/Dialog/TransactionDialog/presets.d.ts +89 -0
  87. package/lib/business/Dialog/TransactionDialog/presets.js +68 -0
  88. package/lib/business/Dialog/TransactionDialog/style/TransactionDialog.css +36 -0
  89. package/lib/business/Dialog/TransactionDialog/style/css.js +4 -0
  90. package/lib/business/Dialog/TransactionDialog/style/index.d.ts +1 -0
  91. package/lib/business/Dialog/TransactionDialog/style/index.js +4 -0
  92. package/lib/business/Dialog/VerificationDialog/ResendRow.d.ts +14 -0
  93. package/lib/business/Dialog/VerificationDialog/ResendRow.js +71 -0
  94. package/lib/business/Dialog/VerificationDialog/VerificationDialog.d.ts +3 -0
  95. package/lib/business/Dialog/VerificationDialog/VerificationDialog.js +122 -0
  96. package/lib/business/Dialog/VerificationDialog/constants.d.ts +35 -0
  97. package/lib/business/Dialog/VerificationDialog/constants.js +37 -0
  98. package/lib/business/Dialog/VerificationDialog/hooks/index.d.ts +4 -0
  99. package/lib/business/Dialog/VerificationDialog/hooks/index.js +20 -0
  100. package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.d.ts +50 -0
  101. package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +144 -0
  102. package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.d.ts +26 -0
  103. package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +110 -0
  104. package/lib/business/Dialog/VerificationDialog/index.d.ts +3 -0
  105. package/lib/business/Dialog/VerificationDialog/index.js +43 -0
  106. package/lib/business/Dialog/VerificationDialog/interface.d.ts +124 -0
  107. package/lib/business/Dialog/VerificationDialog/interface.js +6 -0
  108. package/lib/business/Dialog/VerificationDialog/style/VerificationDialog.css +30 -0
  109. package/lib/business/Dialog/VerificationDialog/style/css.js +4 -0
  110. package/lib/business/Dialog/VerificationDialog/style/index.d.ts +1 -0
  111. package/lib/business/Dialog/VerificationDialog/style/index.js +4 -0
  112. package/lib/business/Dialog/index.d.ts +3 -0
  113. package/lib/business/Dialog/index.js +39 -0
  114. package/lib/business/index.d.ts +1 -0
  115. package/lib/business/index.js +12 -1
  116. package/lib/components/Button/Button.js +7 -3
  117. package/lib/components/Button/constants.d.ts +1 -0
  118. package/lib/components/Button/constants.js +2 -1
  119. package/lib/components/Button/interface.d.ts +2 -0
  120. package/lib/components/Button/style/Button.css +4 -0
  121. package/lib/components/Dialog/Dialog.js +16 -7
  122. package/lib/components/Dialog/constants.d.ts +1 -0
  123. package/lib/components/Dialog/constants.js +3 -2
  124. package/lib/components/Dialog/interface.d.ts +1 -0
  125. package/lib/components/Dialog/style/Dialog.css +29 -0
  126. package/lib/index.css +1 -1
  127. package/package.json +21 -1
  128. package/scripts/mcp-server/examples.generated.json +18 -6
  129. package/scripts/mcp-server/index.generated.json +25 -1
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VERIFICATION_DIALOG = void 0;
7
+ var PREFIX = 'om-verification-dialog';
8
+ var VERIFICATION_DIALOG = exports.VERIFICATION_DIALOG = {
9
+ cls: {
10
+ wrap: PREFIX,
11
+ body: "".concat(PREFIX, "-body"),
12
+ footer: "".concat(PREFIX, "-footer"),
13
+ actions: "".concat(PREFIX, "-actions"),
14
+ recovery: "".concat(PREFIX, "-recovery"),
15
+ recoveryText: "".concat(PREFIX, "-recovery-text"),
16
+ resend: "".concat(PREFIX, "-resend")
17
+ },
18
+ mod: {
19
+ clickable: 'is-clickable'
20
+ },
21
+ // 12px between the copy and the OTP row, 24px between the button row and the
22
+ // recovery prompt, 12px between the two footer buttons.
23
+ gap: {
24
+ body: 12,
25
+ footer: 24,
26
+ actions: 12
27
+ },
28
+ defaults: {
29
+ size: 'small',
30
+ secondaryColor: 'grey',
31
+ submitText: 'Submit',
32
+ resendLabel: 'Resend code'
33
+ },
34
+ // `Typography.Link` renders an <a> with no href, so Enter/Space activate it.
35
+ activationKeys: ['Enter', ' ']
36
+ };
37
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0RpYWxvZy9zcmMvYnVzaW5lc3MvRGlhbG9nL1ZlcmlmaWNhdGlvbkRpYWxvZy9jb25zdGFudHMudHMiLCJidXNpbmVzcy9EaWFsb2cvVmVyaWZpY2F0aW9uRGlhbG9nL2NvbnN0YW50cy5qcyJdLCJuYW1lcyI6WyJQUkVGSVgiLCJWRVJJRklDQVRJT05fRElBTE9HIiwiZXhwb3J0cyIsImNscyIsIndyYXAiLCJib2R5IiwiY29uY2F0IiwiZm9vdGVyIiwiYWN0aW9ucyIsInJlY292ZXJ5IiwicmVjb3ZlcnlUZXh0IiwicmVzZW5kIiwibW9kIiwiY2xpY2thYmxlIiwiZ2FwIiwiZGVmYXVsdHMiLCJzaXplIiwic2Vjb25kYXJ5Q29sb3IiLCJzdWJtaXRUZXh0IiwicmVzZW5kTGFiZWwiLCJhY3RpdmF0aW9uS2V5cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBd0JBLElBQU1BLE1BQU0sR0FBRyx3QkFBd0I7QUFFaEMsSUFBTUMsbUJBQW1CLEdBQUFDLE9BQUEsQ0FBQUQsbUJBQUEsR0FBZ0M7RUFDOURFLEdBQUcsRUFBRTtJQUNIQyxJQUFJLEVBQUVKLE1BQU07SUFDWkssSUFBSSxLQUFBQyxNQUFBLENBQUtOLE1BQU0sVUFBTztJQUN0Qk8sTUFBTSxLQUFBRCxNQUFBLENBQUtOLE1BQU0sWUFBUztJQUMxQlEsT0FBTyxLQUFBRixNQUFBLENBQUtOLE1BQU0sYUFBVTtJQUM1QlMsUUFBUSxLQUFBSCxNQUFBLENBQUtOLE1BQU0sY0FBVztJQUM5QlUsWUFBWSxLQUFBSixNQUFBLENBQUtOLE1BQU0sbUJBQWdCO0lBQ3ZDVyxNQUFNLEtBQUFMLE1BQUEsQ0FBS04sTUFBTTtFQ3hCakIsQ0R5QkQ7RUFDRFksR0FBRyxFQUFFO0lBQUVDLFNBQVMsRUFBRTtFQUFjLENBQUU7RUFDbEM7RUFDQTtFQUNBQyxHQUFHLEVBQUU7SUFBRVQsSUFBSSxFQUFFLEVBQUU7SUFBRUUsTUFBTSxFQUFFLEVBQUU7SUFBRUMsT0FBTyxFQUFFO0VBQUUsQ0FBRTtFQUMxQ08sUUFBUSxFQUFFO0lBQUVDLElBQUksRUFBRSxPQUFPO0lBQUVDLGNBQWMsRUFBRSxNQUFNO0lBQUVDLFVBQVUsRUFBRSxRQUFRO0lBQUVDLFdBQVcsRUFBRTtFQUFhLENBQUU7RUFDckc7RUFDQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUc7QUN4Qi9CLENEeUJDIiwiZmlsZSI6ImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvY29uc3RhbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJjb25zdCBQUkVGSVggPSAnb20tdmVyaWZpY2F0aW9uLWRpYWxvZyc7XG5leHBvcnQgY29uc3QgVkVSSUZJQ0FUSU9OX0RJQUxPRyA9IHtcbiAgICBjbHM6IHtcbiAgICAgICAgd3JhcDogUFJFRklYLFxuICAgICAgICBib2R5OiBgJHtQUkVGSVh9LWJvZHlgLFxuICAgICAgICBmb290ZXI6IGAke1BSRUZJWH0tZm9vdGVyYCxcbiAgICAgICAgYWN0aW9uczogYCR7UFJFRklYfS1hY3Rpb25zYCxcbiAgICAgICAgcmVjb3Zlcnk6IGAke1BSRUZJWH0tcmVjb3ZlcnlgLFxuICAgICAgICByZWNvdmVyeVRleHQ6IGAke1BSRUZJWH0tcmVjb3ZlcnktdGV4dGAsXG4gICAgICAgIHJlc2VuZDogYCR7UFJFRklYfS1yZXNlbmRgLFxuICAgIH0sXG4gICAgbW9kOiB7IGNsaWNrYWJsZTogJ2lzLWNsaWNrYWJsZScgfSxcbiAgICAvLyAxMnB4IGJldHdlZW4gdGhlIGNvcHkgYW5kIHRoZSBPVFAgcm93LCAyNHB4IGJldHdlZW4gdGhlIGJ1dHRvbiByb3cgYW5kIHRoZVxuICAgIC8vIHJlY292ZXJ5IHByb21wdCwgMTJweCBiZXR3ZWVuIHRoZSB0d28gZm9vdGVyIGJ1dHRvbnMuXG4gICAgZ2FwOiB7IGJvZHk6IDEyLCBmb290ZXI6IDI0LCBhY3Rpb25zOiAxMiB9LFxuICAgIGRlZmF1bHRzOiB7IHNpemU6ICdzbWFsbCcsIHNlY29uZGFyeUNvbG9yOiAnZ3JleScsIHN1Ym1pdFRleHQ6ICdTdWJtaXQnLCByZXNlbmRMYWJlbDogJ1Jlc2VuZCBjb2RlJyB9LFxuICAgIC8vIGBUeXBvZ3JhcGh5LkxpbmtgIHJlbmRlcnMgYW4gPGE+IHdpdGggbm8gaHJlZiwgc28gRW50ZXIvU3BhY2UgYWN0aXZhdGUgaXQuXG4gICAgYWN0aXZhdGlvbktleXM6IFsnRW50ZXInLCAnICddLFxufTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1,4 @@
1
+ export { useOtpVerification } from './useOtpVerification';
2
+ export { useResendCountdown } from './useResendCountdown';
3
+ export type { OtpVerifyResult, UseOtpVerificationOptions, UseOtpVerificationResult, } from './useOtpVerification';
4
+ export type { UseResendCountdownOptions, UseResendCountdownResult, } from './useResendCountdown';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useOtpVerification", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _useOtpVerification.useOtpVerification;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "useResendCountdown", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _useResendCountdown.useResendCountdown;
16
+ }
17
+ });
18
+ var _useOtpVerification = require("./useOtpVerification");
19
+ var _useResendCountdown = require("./useResendCountdown");
20
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvc3JjL2J1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvaG9va3MvaW5kZXgudHMiXSwibmFtZXMiOlsiX3VzZU90cFZlcmlmaWNhdGlvbiIsInJlcXVpcmUiLCJfdXNlUmVzZW5kQ291bnRkb3duIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLG1CQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxtQkFBQSxHQUFBRCxPQUFBIiwiZmlsZSI6ImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvaG9va3MvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,50 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { InputStatus } from "../../../../components/Input";
3
+ /**
4
+ * Result of an `onVerify` call: `true` for success, or an error-message string
5
+ * to display under the OTP boxes. Anything other than `true` is treated as a
6
+ * failure and clears the entered code.
7
+ */
8
+ export type OtpVerifyResult = boolean | string;
9
+ export interface UseOtpVerificationOptions {
10
+ /**
11
+ * Async verifier. Resolve `true` on success; resolve (or return) a string to
12
+ * show it as the error message. A thrown error uses its `message`, falling
13
+ * back to a generic message.
14
+ */
15
+ onVerify: (code: string) => Promise<OtpVerifyResult> | OtpVerifyResult;
16
+ /** Controlled OTP value. */
17
+ value?: string;
18
+ /** Initial OTP value when uncontrolled. */
19
+ defaultValue?: string;
20
+ /** Verify automatically once all digits are entered. @default true */
21
+ autoSubmit?: boolean;
22
+ /** Fires on every OTP change with the current value. */
23
+ onChange?: (value: string) => void;
24
+ }
25
+ export interface UseOtpVerificationResult {
26
+ /** Current OTP value. */
27
+ value: string;
28
+ /** `'error'` while an error message is showing, otherwise `'default'`. */
29
+ status: InputStatus;
30
+ /** Error message to render under the boxes, or `undefined` when clear. */
31
+ feedback: ReactNode;
32
+ /** `true` while `onVerify` is in flight. */
33
+ submitting: boolean;
34
+ /** `true` once all digits are entered. */
35
+ valid: boolean;
36
+ /** Wire to the OTP field's `onChange`. */
37
+ onChange: (value: string) => void;
38
+ /** Manually trigger verification with the current value. */
39
+ submit: () => void;
40
+ /** Clear the current error message. */
41
+ clearError: () => void;
42
+ /** Clear both the value and any error. */
43
+ reset: () => void;
44
+ }
45
+ /**
46
+ * Headless OTP verification logic shared by `VerificationDialog` and any other
47
+ * shell (popup, inline form, multi-step flow). Owns the value (controlled or
48
+ * uncontrolled), auto-submit on completion, loading state, and clear-on-error.
49
+ */
50
+ export declare const useOtpVerification: (options: UseOtpVerificationOptions) => UseOtpVerificationResult;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useOtpVerification = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = require("react");
11
+ var _hooks = require("@1money/hooks");
12
+ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) {
14
+ return value instanceof P ? value : new P(function (resolve) {
15
+ resolve(value);
16
+ });
17
+ }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) {
20
+ try {
21
+ step(generator.next(value));
22
+ } catch (e) {
23
+ reject(e);
24
+ }
25
+ }
26
+ function rejected(value) {
27
+ try {
28
+ step(generator["throw"](value));
29
+ } catch (e) {
30
+ reject(e);
31
+ }
32
+ }
33
+ function step(result) {
34
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
35
+ }
36
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
37
+ });
38
+ };
39
+ var OTP_LENGTH = 6;
40
+ var DEFAULT_ERROR_MESSAGE = 'Incorrect code, please try again.';
41
+ var STATUS_ERROR = 'error';
42
+ var STATUS_DEFAULT = 'default';
43
+ /**
44
+ * Headless OTP verification logic shared by `VerificationDialog` and any other
45
+ * shell (popup, inline form, multi-step flow). Owns the value (controlled or
46
+ * uncontrolled), auto-submit on completion, loading state, and clear-on-error.
47
+ */
48
+ var useOtpVerification = exports.useOtpVerification = function useOtpVerification(options) {
49
+ var onVerify = options.onVerify,
50
+ value = options.value,
51
+ _options$defaultValue = options.defaultValue,
52
+ defaultValue = _options$defaultValue === void 0 ? '' : _options$defaultValue,
53
+ _options$autoSubmit = options.autoSubmit,
54
+ autoSubmit = _options$autoSubmit === void 0 ? true : _options$autoSubmit,
55
+ onChange = options.onChange;
56
+ var _useControlledState = (0, _hooks.useControlledState)(defaultValue, value),
57
+ _useControlledState2 = (0, _slicedToArray2["default"])(_useControlledState, 2),
58
+ innerValue = _useControlledState2[0],
59
+ setInnerValue = _useControlledState2[1];
60
+ var _useState = (0, _react.useState)(false),
61
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
62
+ submitting = _useState2[0],
63
+ setSubmitting = _useState2[1];
64
+ var _useState3 = (0, _react.useState)(''),
65
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
66
+ error = _useState4[0],
67
+ setError = _useState4[1];
68
+ // `submitting` drives the UI; `submittingRef` is the synchronous re-entry
69
+ // guard — auto-submit fires inside `onChange`, which would otherwise double-
70
+ // fire before the `submitting` state update has flushed.
71
+ var submittingRef = (0, _react.useRef)(false);
72
+ var runVerify = (0, _hooks.useEventCallback)(function (code) {
73
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
74
+ var result, _t;
75
+ return _regenerator["default"].wrap(function (_context) {
76
+ while (1) switch (_context.prev = _context.next) {
77
+ case 0:
78
+ if (!submittingRef.current) {
79
+ _context.next = 1;
80
+ break;
81
+ }
82
+ return _context.abrupt("return");
83
+ case 1:
84
+ submittingRef.current = true;
85
+ setSubmitting(true);
86
+ _context.prev = 2;
87
+ _context.next = 3;
88
+ return onVerify(code);
89
+ case 3:
90
+ result = _context.sent;
91
+ if (result !== true) {
92
+ setError(typeof result === 'string' && result ? result : DEFAULT_ERROR_MESSAGE);
93
+ setInnerValue('');
94
+ }
95
+ _context.next = 5;
96
+ break;
97
+ case 4:
98
+ _context.prev = 4;
99
+ _t = _context["catch"](2);
100
+ setError(_t instanceof Error && _t.message ? _t.message : DEFAULT_ERROR_MESSAGE);
101
+ setInnerValue('');
102
+ case 5:
103
+ _context.prev = 5;
104
+ submittingRef.current = false;
105
+ setSubmitting(false);
106
+ return _context.finish(5);
107
+ case 6:
108
+ case "end":
109
+ return _context.stop();
110
+ }
111
+ }, _callee, null, [[2, 4, 5, 6]]);
112
+ }));
113
+ });
114
+ var handleChange = (0, _hooks.useEventCallback)(function (next) {
115
+ if (error) setError('');
116
+ setInnerValue(next);
117
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
118
+ if (autoSubmit && next.length === OTP_LENGTH && !submittingRef.current) {
119
+ runVerify(next);
120
+ }
121
+ });
122
+ var submit = (0, _hooks.useEventCallback)(function () {
123
+ return runVerify(innerValue);
124
+ });
125
+ var clearError = (0, _hooks.useEventCallback)(function () {
126
+ return setError('');
127
+ });
128
+ var reset = (0, _hooks.useEventCallback)(function () {
129
+ setError('');
130
+ setInnerValue('');
131
+ });
132
+ return {
133
+ value: innerValue,
134
+ status: error ? STATUS_ERROR : STATUS_DEFAULT,
135
+ feedback: error || undefined,
136
+ submitting: submitting,
137
+ valid: innerValue.length === OTP_LENGTH,
138
+ onChange: handleChange,
139
+ submit: submit,
140
+ clearError: clearError,
141
+ reset: reset
142
+ };
143
+ };
144
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvc3JjL2J1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvaG9va3MvdXNlT3RwVmVyaWZpY2F0aW9uLnRzIiwiYnVzaW5lc3MvRGlhbG9nL1ZlcmlmaWNhdGlvbkRpYWxvZy9ob29rcy91c2VPdHBWZXJpZmljYXRpb24uanMiXSwibmFtZXMiOlsiX3JlYWN0IiwicmVxdWlyZSIsIl9ob29rcyIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIk9UUF9MRU5HVEgiLCJERUZBVUxUX0VSUk9SX01FU1NBR0UiLCJTVEFUVVNfRVJST1IiLCJTVEFUVVNfREVGQVVMVCIsInVzZU90cFZlcmlmaWNhdGlvbiIsImV4cG9ydHMiLCJvcHRpb25zIiwib25WZXJpZnkiLCJfb3B0aW9ucyRkZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJfb3B0aW9ucyRhdXRvU3VibWl0IiwiYXV0b1N1Ym1pdCIsIm9uQ2hhbmdlIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsInVzZUNvbnRyb2xsZWRTdGF0ZSIsIl91c2VDb250cm9sbGVkU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiaW5uZXJWYWx1ZSIsInNldElubmVyVmFsdWUiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJzdWJtaXR0aW5nIiwic2V0U3VibWl0dGluZyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZXJyb3IiLCJzZXRFcnJvciIsInN1Ym1pdHRpbmdSZWYiLCJ1c2VSZWYiLCJydW5WZXJpZnkiLCJ1c2VFdmVudENhbGxiYWNrIiwiY29kZSIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiY3VycmVudCIsImFicnVwdCIsInNlbnQiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaW5pc2giLCJzdG9wIiwiaGFuZGxlQ2hhbmdlIiwibGVuZ3RoIiwic3VibWl0IiwiY2xlYXJFcnJvciIsInJlc2V0Iiwic3RhdHVzIiwiZmVlZGJhY2siLCJ1bmRlZmluZWQiLCJ2YWxpZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FDREEsSUFBSUUsU0FBUyxHQUFJLFVBQVEsU0FBS0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7TUFBRUEsT0FBTyxDQUFDRCxLQUFLLENBQUM7SUFBRSxDQUFDLENBQUM7RUFBRTtFQUMzRyxPQUFPLEtBQUtILENBQUMsS0FBS0EsQ0FBQyxHQUFHSyxPQUFPLENBQUMsRUFBRSxVQUFVRCxPQUFPLEVBQUVFLE1BQU0sRUFBRTtJQUN2RCxTQUFTQyxTQUFTQSxDQUFDSixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVLLElBQUksQ0FBQ1AsU0FBUyxDQUFDUSxJQUFJLENBQUNOLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDMUYsU0FBU0MsUUFBUUEsQ0FBQ1IsS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBT08s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QUFJLENBQUM0QixhQUFhLENBQUNZLE9BQU8sRUFBRTtNQUN0RVYsU0FBUyxDQUFDckMsSUFBSSxDQUFDO0lBQ2pCO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTXdELE1BQU0sR0FBRyxJQUFBbEIsdUJBQWdCLEVBQUM7SUFBQSxPQUFNRCxTQUFTLENBQUNiLFVBQVUsQ0FBQztFQUFBLEVBQUM7RUFDNUQsSUFBTWlDLFVBQVUsR0FBRyxJQUFBbkIsdUJBQWdCLEVBQUM7SUFBQSxPQUFNSixRQUFRLENBQUMsRUFBRSxDQUFDO0VBQUEsRUFBQztFQUN2RCxJQUFNd0IsS0FBSyxHQUFHLElBQUFwQix1QkFBZ0IsRUFBQyxZQUFLO0lBQ2xDSixRQUFRLENBQUMsRUFBRSxDQUFDO0lBQ1pULGFBQWEsQ0FBQyxFQUFFLENBQUM7RUFDbkIsQ0FBQyxDQUFDO0VBRUYsT0FBTztJQUNML0IsS0FBSyxFQUFFOEIsVUFBVTtJQUNqQm1DLE1BQU0sRUFBRTFCLEtBQUssR0FBR3hCLFlBQVksR0FBR0MsY0FBYztJQUM3Q2tELFFBQVEsRUFBRTNCLEtBQUssSUFBSTRCLFNBQVM7SUFDNUJoQyxVQUFVLEVBQVZBLFVBQVU7SUFDVmlDLEtBQUssRUFBRXRDLFVBQVUsQ0FBQytCLE1BQU0sS0FBS2hELFVBQVU7SUFDdkNZLFFBQVEsRUFBRW1DLFlBQVk7SUFDdEJFLE1BQU0sRUFBTkEsTUFBTTtJQUNOQyxVQUFVLEVBQVZBLFVBQVU7SUFDVkMsS0FBSyxFQUFMQTtFQzFDQSxDRDJDRDtBQUNILENBQUMiLCJmaWxlIjoiYnVzaW5lc3MvRGlhbG9nL1ZlcmlmaWNhdGlvbkRpYWxvZy9ob29rcy91c2VPdHBWZXJpZmljYXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZWRTdGF0ZSwgdXNlRXZlbnRDYWxsYmFjayB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuY29uc3QgT1RQX0xFTkdUSCA9IDY7XG5jb25zdCBERUZBVUxUX0VSUk9SX01FU1NBR0UgPSAnSW5jb3JyZWN0IGNvZGUsIHBsZWFzZSB0cnkgYWdhaW4uJztcbmNvbnN0IFNUQVRVU19FUlJPUiA9ICdlcnJvcic7XG5jb25zdCBTVEFUVVNfREVGQVVMVCA9ICdkZWZhdWx0Jztcbi8qKlxuICogSGVhZGxlc3MgT1RQIHZlcmlmaWNhdGlvbiBsb2dpYyBzaGFyZWQgYnkgYFZlcmlmaWNhdGlvbkRpYWxvZ2AgYW5kIGFueSBvdGhlclxuICogc2hlbGwgKHBvcHVwLCBpbmxpbmUgZm9ybSwgbXVsdGktc3RlcCBmbG93KS4gT3ducyB0aGUgdmFsdWUgKGNvbnRyb2xsZWQgb3JcbiAqIHVuY29udHJvbGxlZCksIGF1dG8tc3VibWl0IG9uIGNvbXBsZXRpb24sIGxvYWRpbmcgc3RhdGUsIGFuZCBjbGVhci1vbi1lcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU90cFZlcmlmaWNhdGlvbiA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBvblZlcmlmeSwgdmFsdWUsIGRlZmF1bHRWYWx1ZSA9ICcnLCBhdXRvU3VibWl0ID0gdHJ1ZSwgb25DaGFuZ2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgW2lubmVyVmFsdWUsIHNldElubmVyVmFsdWVdID0gdXNlQ29udHJvbGxlZFN0YXRlKGRlZmF1bHRWYWx1ZSwgdmFsdWUpO1xuICAgIGNvbnN0IFtzdWJtaXR0aW5nLCBzZXRTdWJtaXR0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKCcnKTtcbiAgICAvLyBgc3VibWl0dGluZ2AgZHJpdmVzIHRoZSBVSTsgYHN1Ym1pdHRpbmdSZWZgIGlzIHRoZSBzeW5jaHJvbm91cyByZS1lbnRyeVxuICAgIC8vIGd1YXJkIOKAlCBhdXRvLXN1Ym1pdCBmaXJlcyBpbnNpZGUgYG9uQ2hhbmdlYCwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGRvdWJsZS1cbiAgICAvLyBmaXJlIGJlZm9yZSB0aGUgYHN1Ym1pdHRpbmdgIHN0YXRlIHVwZGF0ZSBoYXMgZmx1c2hlZC5cbiAgICBjb25zdCBzdWJtaXR0aW5nUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBydW5WZXJpZnkgPSB1c2VFdmVudENhbGxiYWNrKChjb2RlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKHN1Ym1pdHRpbmdSZWYuY3VycmVudClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3VibWl0dGluZ1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgc2V0U3VibWl0dGluZyh0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIG9uVmVyaWZ5KGNvZGUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnICYmIHJlc3VsdCA/IHJlc3VsdCA6IERFRkFVTFRfRVJST1JfTUVTU0FHRSk7XG4gICAgICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHNldEVycm9yKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBERUZBVUxUX0VSUk9SX01FU1NBR0UpO1xuICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzdWJtaXR0aW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNldFN1Ym1pdHRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKG5leHQpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgc2V0RXJyb3IoJycpO1xuICAgICAgICBzZXRJbm5lclZhbHVlKG5leHQpO1xuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dCk7XG4gICAgICAgIGlmIChhdXRvU3VibWl0ICYmIG5leHQubGVuZ3RoID09PSBPVFBfTEVOR1RIICYmICFzdWJtaXR0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJ1blZlcmlmeShuZXh0KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4gcnVuVmVyaWZ5KGlubmVyVmFsdWUpKTtcbiAgICBjb25zdCBjbGVhckVycm9yID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiBzZXRFcnJvcignJykpO1xuICAgIGNvbnN0IHJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHNldEVycm9yKCcnKTtcbiAgICAgICAgc2V0SW5uZXJWYWx1ZSgnJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGlubmVyVmFsdWUsXG4gICAgICAgIHN0YXR1czogZXJyb3IgPyBTVEFUVVNfRVJST1IgOiBTVEFUVVNfREVGQVVMVCxcbiAgICAgICAgZmVlZGJhY2s6IGVycm9yIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgc3VibWl0dGluZyxcbiAgICAgICAgdmFsaWQ6IGlubmVyVmFsdWUubGVuZ3RoID09PSBPVFBfTEVOR1RILFxuICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICBzdWJtaXQsXG4gICAgICAgIGNsZWFyRXJyb3IsXG4gICAgICAgIHJlc2V0LFxuICAgIH07XG59OyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,26 @@
1
+ export interface UseResendCountdownOptions {
2
+ /** Fires when the user triggers a resend. */
3
+ onResend: () => void | Promise<void>;
4
+ /** Cooldown length in seconds before resending is allowed again. @default 60 */
5
+ cooldown?: number;
6
+ /** Start the cooldown immediately on mount. @default false */
7
+ autoStart?: boolean;
8
+ }
9
+ export interface UseResendCountdownResult {
10
+ /** Seconds left in the current cooldown (`0` when resending is allowed). */
11
+ remaining: number;
12
+ /** `true` when a resend can be triggered (no cooldown, not loading). */
13
+ canResend: boolean;
14
+ /** `true` while `onResend` is in flight. */
15
+ loading: boolean;
16
+ /** Human-readable countdown, e.g. `"1m 0s"`. */
17
+ formatted: string;
18
+ /** Trigger a resend (no-op during cooldown or while loading). */
19
+ resend: () => void;
20
+ }
21
+ /**
22
+ * Headless resend-with-cooldown logic ported from the product's `ResendButton`:
23
+ * a per-second countdown, a lock during the cooldown and while the resend
24
+ * request is in flight, and an `m s` formatter.
25
+ */
26
+ export declare const useResendCountdown: (options: UseResendCountdownOptions) => UseResendCountdownResult;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useResendCountdown = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = require("react");
11
+ var _hooks = require("@1money/hooks");
12
+ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) {
14
+ return value instanceof P ? value : new P(function (resolve) {
15
+ resolve(value);
16
+ });
17
+ }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) {
20
+ try {
21
+ step(generator.next(value));
22
+ } catch (e) {
23
+ reject(e);
24
+ }
25
+ }
26
+ function rejected(value) {
27
+ try {
28
+ step(generator["throw"](value));
29
+ } catch (e) {
30
+ reject(e);
31
+ }
32
+ }
33
+ function step(result) {
34
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
35
+ }
36
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
37
+ });
38
+ };
39
+ var DEFAULT_COOLDOWN_SECONDS = 60;
40
+ var SECONDS_PER_MINUTE = 60;
41
+ var TICK_MS = 1000;
42
+ /**
43
+ * Headless resend-with-cooldown logic ported from the product's `ResendButton`:
44
+ * a per-second countdown, a lock during the cooldown and while the resend
45
+ * request is in flight, and an `m s` formatter.
46
+ */
47
+ var useResendCountdown = exports.useResendCountdown = function useResendCountdown(options) {
48
+ var onResend = options.onResend,
49
+ _options$cooldown = options.cooldown,
50
+ cooldown = _options$cooldown === void 0 ? DEFAULT_COOLDOWN_SECONDS : _options$cooldown,
51
+ _options$autoStart = options.autoStart,
52
+ autoStart = _options$autoStart === void 0 ? false : _options$autoStart;
53
+ var _useState = (0, _react.useState)(autoStart ? cooldown : 0),
54
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
55
+ remaining = _useState2[0],
56
+ setRemaining = _useState2[1];
57
+ var _useState3 = (0, _react.useState)(false),
58
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
59
+ loading = _useState4[0],
60
+ setLoading = _useState4[1];
61
+ (0, _react.useEffect)(function () {
62
+ if (remaining <= 0) return undefined;
63
+ var timer = setInterval(function () {
64
+ setRemaining(function (prev) {
65
+ return prev <= 1 ? 0 : prev - 1;
66
+ });
67
+ }, TICK_MS);
68
+ return function () {
69
+ return clearInterval(timer);
70
+ };
71
+ }, [remaining]);
72
+ var resend = (0, _hooks.useEventCallback)(function () {
73
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
74
+ return _regenerator["default"].wrap(function (_context) {
75
+ while (1) switch (_context.prev = _context.next) {
76
+ case 0:
77
+ if (!(remaining > 0 || loading)) {
78
+ _context.next = 1;
79
+ break;
80
+ }
81
+ return _context.abrupt("return");
82
+ case 1:
83
+ setLoading(true);
84
+ _context.prev = 2;
85
+ _context.next = 3;
86
+ return onResend();
87
+ case 3:
88
+ setRemaining(cooldown);
89
+ case 4:
90
+ _context.prev = 4;
91
+ setLoading(false);
92
+ return _context.finish(4);
93
+ case 5:
94
+ case "end":
95
+ return _context.stop();
96
+ }
97
+ }, _callee, null, [[2,, 4, 5]]);
98
+ }));
99
+ });
100
+ var minutes = Math.floor(remaining / SECONDS_PER_MINUTE);
101
+ var seconds = remaining % SECONDS_PER_MINUTE;
102
+ return {
103
+ remaining: remaining,
104
+ canResend: remaining <= 0 && !loading,
105
+ loading: loading,
106
+ formatted: "".concat(minutes, "m ").concat(seconds, "s"),
107
+ resend: resend
108
+ };
109
+ };
110
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvc3JjL2J1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvaG9va3MvdXNlUmVzZW5kQ291bnRkb3duLnRzIiwiYnVzaW5lc3MvRGlhbG9nL1ZlcmlmaWNhdGlvbkRpYWxvZy9ob29rcy91c2VSZXNlbmRDb3VudGRvd24uanMiXSwibmFtZXMiOlsiX3JlYWN0IiwicmVxdWlyZSIsIl9ob29rcyIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIkRFRkFVTFRfQ09PTERPV05fU0VDT05EUyIsIlNFQ09ORFNfUEVSX01JTlVURSIsIlRJQ0tfTVMiLCJ1c2VSZXNlbmRDb3VudGRvd24iLCJleHBvcnRzIiwib3B0aW9ucyIsIm9uUmVzZW5kIiwiX29wdGlvbnMkY29vbGRvd24iLCJjb29sZG93biIsIl9vcHRpb25zJGF1dG9TdGFydCIsImF1dG9TdGFydCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInJlbWFpbmluZyIsInNldFJlbWFpbmluZyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9hZGluZyIsInNldExvYWRpbmciLCJ1c2VFZmZlY3QiLCJ1bmRlZmluZWQiLCJ0aW1lciIsInNldEludGVydmFsIiwicHJldiIsImNsZWFySW50ZXJ2YWwiLCJyZXNlbmQiLCJ1c2VFdmVudENhbGxiYWNrIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJhYnJ1cHQiLCJmaW5pc2giLCJzdG9wIiwibWludXRlcyIsIk1hdGgiLCJmbG9vciIs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QTtJQUFBLENBRXJCLEVBQUE7RUFBQSxFQUFDO0VBRUYsSUFBTU0sT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ3hCLFNBQVMsR0FBR2Qsa0JBQWtCLENBQUM7RUFDMUQsSUFBTXVDLE9BQU8sR0FBR3pCLFNBQVMsR0FBR2Qsa0JBQWtCO0VBRTlDLE9BQU87SUFDTGMsU0FBUyxFQUFUQSxTQUFTO0lBQ1QwQixTQUFTLEVBQUUxQixTQUFTLElBQUksQ0FBQyxJQUFJLENBQUNJLE9BQU87SUFDckNBLE9BQU8sRUFBUEEsT0FBTztJQUNQdUIsU0FBUyxLQUFBQyxNQUFBLENBQUtOLE9BQU8sUUFBQU0sTUFBQSxDQUFLSCxPQUFPLE1BQUc7SUFDcENiLE1BQU0sRUFBTkE7RUNqQkEsQ0RrQkQ7QUFDSCxDQUFDIiwiZmlsZSI6ImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvaG9va3MvdXNlUmVzZW5kQ291bnRkb3duLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG5jb25zdCBERUZBVUxUX0NPT0xET1dOX1NFQ09ORFMgPSA2MDtcbmNvbnN0IFNFQ09ORFNfUEVSX01JTlVURSA9IDYwO1xuY29uc3QgVElDS19NUyA9IDEwMDA7XG4vKipcbiAqIEhlYWRsZXNzIHJlc2VuZC13aXRoLWNvb2xkb3duIGxvZ2ljIHBvcnRlZCBmcm9tIHRoZSBwcm9kdWN0J3MgYFJlc2VuZEJ1dHRvbmA6XG4gKiBhIHBlci1zZWNvbmQgY291bnRkb3duLCBhIGxvY2sgZHVyaW5nIHRoZSBjb29sZG93biBhbmQgd2hpbGUgdGhlIHJlc2VuZFxuICogcmVxdWVzdCBpcyBpbiBmbGlnaHQsIGFuZCBhbiBgbSBzYCBmb3JtYXR0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VSZXNlbmRDb3VudGRvd24gPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgb25SZXNlbmQsIGNvb2xkb3duID0gREVGQVVMVF9DT09MRE9XTl9TRUNPTkRTLCBhdXRvU3RhcnQgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBbcmVtYWluaW5nLCBzZXRSZW1haW5pbmddID0gdXNlU3RhdGUoYXV0b1N0YXJ0ID8gY29vbGRvd24gOiAwKTtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRSZW1haW5pbmcoKHByZXYpID0+IChwcmV2IDw9IDEgPyAwIDogcHJldiAtIDEpKTtcbiAgICAgICAgfSwgVElDS19NUyk7XG4gICAgICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB9LCBbcmVtYWluaW5nXSk7XG4gICAgY29uc3QgcmVzZW5kID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA+IDAgfHwgbG9hZGluZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIG9uUmVzZW5kKCk7XG4gICAgICAgICAgICBzZXRSZW1haW5pbmcoY29vbGRvd24pO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IocmVtYWluaW5nIC8gU0VDT05EU19QRVJfTUlOVVRFKTtcbiAgICBjb25zdCBzZWNvbmRzID0gcmVtYWluaW5nICUgU0VDT05EU19QRVJfTUlOVVRFO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlbWFpbmluZyxcbiAgICAgICAgY2FuUmVzZW5kOiByZW1haW5pbmcgPD0gMCAmJiAhbG9hZGluZyxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgZm9ybWF0dGVkOiBgJHttaW51dGVzfW0gJHtzZWNvbmRzfXNgLFxuICAgICAgICByZXNlbmQsXG4gICAgfTtcbn07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,3 @@
1
+ export { VerificationDialog } from './VerificationDialog';
2
+ export { useOtpVerification, useResendCountdown } from './hooks';
3
+ export * from './interface';
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ VerificationDialog: true,
8
+ useOtpVerification: true,
9
+ useResendCountdown: true
10
+ };
11
+ Object.defineProperty(exports, "VerificationDialog", {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return _VerificationDialog.VerificationDialog;
15
+ }
16
+ });
17
+ Object.defineProperty(exports, "useOtpVerification", {
18
+ enumerable: true,
19
+ get: function get() {
20
+ return _hooks.useOtpVerification;
21
+ }
22
+ });
23
+ Object.defineProperty(exports, "useResendCountdown", {
24
+ enumerable: true,
25
+ get: function get() {
26
+ return _hooks.useResendCountdown;
27
+ }
28
+ });
29
+ var _VerificationDialog = require("./VerificationDialog");
30
+ var _hooks = require("./hooks");
31
+ var _interface = require("./interface");
32
+ Object.keys(_interface).forEach(function (key) {
33
+ if (key === "default" || key === "__esModule") return;
34
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
35
+ if (key in exports && exports[key] === _interface[key]) return;
36
+ Object.defineProperty(exports, key, {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _interface[key];
40
+ }
41
+ });
42
+ });
43
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0RpYWxvZy9zcmMvYnVzaW5lc3MvRGlhbG9nL1ZlcmlmaWNhdGlvbkRpYWxvZy9pbmRleC50cyJdLCJuYW1lcyI6WyJfVmVyaWZpY2F0aW9uRGlhbG9nIiwicmVxdWlyZSIsIl9ob29rcyIsIl9pbnRlcmZhY2UiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9leHBvcnROYW1lcyIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxtQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBQUFHLE1BQUEsQ0FBQUMsSUFBQSxDQUFBRixVQUFBLEVBQUFHLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBSCxNQUFBLENBQUFJLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFDLFlBQUEsRUFBQUosR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUssT0FBQSxJQUFBQSxPQUFBLENBQUFMLEdBQUEsTUFBQUosVUFBQSxDQUFBSSxHQUFBO0VBQUFILE1BQUEsQ0FBQVMsY0FBQSxDQUFBRCxPQUFBLEVBQUFMLEdBQUE7SUFBQU8sVUFBQTtJQUFBQyxHQUFBLFdBQUFBLElBQUE7TUFBQSxPQUFBWixVQUFBLENBQUFJLEdBQUE7SUFBQTtFQUFBO0FBQUEiLCJmaWxlIjoiYnVzaW5lc3MvRGlhbG9nL1ZlcmlmaWNhdGlvbkRpYWxvZy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,124 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ButtonColor } from "../../../components/Button";
3
+ import type { DialogProps } from "../../../components/Dialog";
4
+ import type { InputStatus } from "../../../components/Input";
5
+ import type { OtpVerifyResult } from './hooks';
6
+ export type { OtpVerifyResult, UseOtpVerificationOptions, UseOtpVerificationResult, UseResendCountdownOptions, UseResendCountdownResult, } from './hooks';
7
+ /** Visual status forwarded to the inner `Input.OTP`. */
8
+ export type VerificationDialogStatus = InputStatus;
9
+ /**
10
+ * Optional secondary button (e.g. "Cancel" / "Back") rendered to the left of
11
+ * the primary submit button. When omitted, the submit button spans the full
12
+ * width; when present, the two split the row evenly.
13
+ */
14
+ export interface VerificationDialogSecondaryAction {
15
+ /** Button label. */
16
+ label: ReactNode;
17
+ /** Click handler. */
18
+ onClick?: () => void;
19
+ /** Disable the button. */
20
+ disabled?: boolean;
21
+ /**
22
+ * Color tone.
23
+ * @default 'grey'
24
+ */
25
+ color?: ButtonColor;
26
+ }
27
+ /**
28
+ * Optional "Haven't received the code? Resend" row below a divider in the
29
+ * footer. Resending is rate-limited by an internal countdown.
30
+ */
31
+ export interface VerificationDialogResend {
32
+ /** Muted prompt text, e.g. `"Haven't received the code?"`. */
33
+ promptText?: ReactNode;
34
+ /**
35
+ * Trailing brand-colored action text.
36
+ * @default 'Resend code'
37
+ */
38
+ actionText?: ReactNode;
39
+ /** Fires when the user triggers a resend (in-app action like re-sending an email). */
40
+ onResend: () => void | Promise<void>;
41
+ /**
42
+ * Cooldown length in seconds before resending is allowed again. While
43
+ * counting down, the label is muted and shows the remaining time.
44
+ * @default 60
45
+ */
46
+ cooldown?: number;
47
+ }
48
+ export interface VerificationDialogProps extends Pick<DialogProps, 'open' | 'size' | 'maskClosable' | 'showCloseIcon' | 'showBackIcon' | 'onBack' | 'className'> {
49
+ /** Dialog heading, e.g. `"Two-factor authenticator"` / `"Email Verification"`. */
50
+ title: ReactNode;
51
+ /** Supporting copy under the title explaining what code to enter and why. */
52
+ description?: ReactNode;
53
+ /** Controlled OTP value. */
54
+ value?: string;
55
+ /** Initial OTP value when uncontrolled. */
56
+ defaultValue?: string;
57
+ /** Helper subtext shown directly under the OTP boxes, e.g. `"e.g. 123 456"`. Hidden while an error is showing. */
58
+ otpHint?: ReactNode;
59
+ /**
60
+ * Auto-focus the first OTP box when the dialog opens.
61
+ * @default false
62
+ */
63
+ autoFocus?: boolean;
64
+ /**
65
+ * Mask the entered digits as dots (•), like a password field, instead of
66
+ * showing them in plain text. This is **display only** — `value`, `onChange`,
67
+ * and the code passed to `onVerify` are always the real digits. Use it when
68
+ * the screen may be visible to others (e.g. shared/public devices).
69
+ * @default false
70
+ */
71
+ mask?: boolean;
72
+ /**
73
+ * Disable OTP entry.
74
+ * @default false
75
+ */
76
+ disabled?: boolean;
77
+ /**
78
+ * Verify automatically once all digits are entered (in addition to the
79
+ * submit button).
80
+ * @default true
81
+ */
82
+ autoSubmit?: boolean;
83
+ /**
84
+ * Verify the entered code. Resolve `true` on success; resolve (or return) a
85
+ * string to show it as the error message under the boxes. On any non-`true`
86
+ * result (or a thrown error) the boxes are cleared. Drives the submit
87
+ * button's loading state and auto-submit.
88
+ *
89
+ * @example
90
+ * ```tsx
91
+ * <VerificationDialog
92
+ * open={open}
93
+ * title="Email Verification"
94
+ * description="Enter the 6-digit code sent to ema...@gmail.com"
95
+ * otpHint="e.g. 123 456"
96
+ * submitText="Continue"
97
+ * onVerify={async (code) => {
98
+ * const res = await api.verify(code);
99
+ * return res.ok ? true : 'That code is incorrect.';
100
+ * }}
101
+ * secondaryAction={{ label: 'Cancel', onClick: () => setOpen(false) }}
102
+ * resend={{ promptText: "Haven't received the code?", onResend: api.resend, cooldown: 60 }}
103
+ * onClose={() => setOpen(false)}
104
+ * />
105
+ * ```
106
+ */
107
+ onVerify: (code: string) => Promise<OtpVerifyResult> | OtpVerifyResult;
108
+ /** Fires on every OTP change with the current value. */
109
+ onChange?: (value: string) => void;
110
+ /**
111
+ * Primary (submit) button label.
112
+ * @default 'Submit'
113
+ */
114
+ submitText?: ReactNode;
115
+ /** Optional secondary button (e.g. "Cancel") shown beside the submit button. */
116
+ secondaryAction?: VerificationDialogSecondaryAction;
117
+ /** Optional resend prompt + link with built-in cooldown, below a divider. */
118
+ resend?: VerificationDialogResend;
119
+ /**
120
+ * Fires from the close icon, mask click, and Escape key. Set your `open`
121
+ * state to `false` here.
122
+ */
123
+ onClose?: () => void;
124
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3MvRGlhbG9nL1ZlcmlmaWNhdGlvbkRpYWxvZy9pbnRlcmZhY2UuanMiLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMiLCJzb3VyY2VzIjpbImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvaW50ZXJmYWNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7fTsiXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Retrieves the spacing value for a given token key.
3
+ *
4
+ * @param {string} $key - The spacing token key (e.g., '100', '200').
5
+ * @return {length|null} The computed spacing value or null if the key is invalid.
6
+ * @example
7
+ * .element {
8
+ * padding: om-spacing-token('200'); // Returns 8px if $om-sys-spacing-unit is 4px
9
+ * }
10
+ */
11
+ /**
12
+ * Computes the spacing value based on a token key or a direct length value.
13
+ *
14
+ * @param {string|length} $value - The spacing token key (e.g., '100') or a direct length value (e.g., '16px').
15
+ * @return {length} The computed spacing value.
16
+ * @example
17
+ * .element {
18
+ * margin: om-spacing-value('300'); // Returns 12px if $om-sys-spacing-unit is 4px
19
+ * padding: om-spacing-value(16px); // Returns 16px
20
+ * gap: om-spacing-value(2); // Returns 8px if $om-sys-spacing-unit is 4px
21
+ * }
22
+ */
23
+ .om-verification-dialog-actions > button {
24
+ flex: 1 1 0;
25
+ }
26
+
27
+ .om-verification-dialog-recovery-text.is-clickable,
28
+ .om-verification-dialog-resend.is-clickable {
29
+ cursor: pointer;
30
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ require("./VerificationDialog.css");
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvc3JjL2J1c2luZXNzL0RpYWxvZy9WZXJpZmljYXRpb25EaWFsb2cvc3R5bGUvaW5kZXgudHMiXSwibmFtZXMiOlsicmVxdWlyZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQUEsT0FBQSIsImZpbGUiOiJidXNpbmVzcy9EaWFsb2cvVmVyaWZpY2F0aW9uRGlhbG9nL3N0eWxlL2Nzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==