@yoka-ui/ui 1.0.5 → 1.0.7

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 (157) hide show
  1. package/@Docs-yoka/exports.generated.md +6 -9
  2. package/README.md +39 -12
  3. package/dist/es/assets/image/skills.zip +0 -0
  4. package/dist/es/business/Empty/index.js.map +1 -1
  5. package/dist/es/business/YkCharts/Area.d.ts +18 -0
  6. package/dist/es/business/YkCharts/Area.js +336 -0
  7. package/dist/es/business/YkCharts/Area.js.map +7 -0
  8. package/dist/es/business/YkCharts/Bar.d.ts +21 -0
  9. package/dist/es/business/YkCharts/Bar.js +316 -0
  10. package/dist/es/business/YkCharts/Bar.js.map +7 -0
  11. package/dist/es/business/YkCharts/BarProperty.d.ts +21 -0
  12. package/dist/es/business/YkCharts/BarProperty.js +357 -0
  13. package/dist/es/business/YkCharts/BarProperty.js.map +7 -0
  14. package/dist/es/business/YkCharts/BarTotal.d.ts +21 -0
  15. package/dist/es/business/YkCharts/BarTotal.js +288 -0
  16. package/dist/es/business/YkCharts/BarTotal.js.map +7 -0
  17. package/dist/es/business/YkCharts/Line.d.ts +21 -0
  18. package/dist/es/business/YkCharts/Line.js +342 -0
  19. package/dist/es/business/YkCharts/Line.js.map +7 -0
  20. package/dist/es/business/YkCharts/Pie.d.ts +19 -0
  21. package/dist/es/business/YkCharts/Pie.js +107 -0
  22. package/dist/es/business/YkCharts/Pie.js.map +7 -0
  23. package/dist/es/business/YkCharts/PieProperty.d.ts +18 -0
  24. package/dist/es/business/YkCharts/PieProperty.js +180 -0
  25. package/dist/es/business/YkCharts/PieProperty.js.map +7 -0
  26. package/dist/es/business/YkCharts/Pies.d.ts +26 -0
  27. package/dist/es/business/YkCharts/Pies.js +348 -0
  28. package/dist/es/business/YkCharts/Pies.js.map +7 -0
  29. package/dist/es/business/YkCharts/constants.d.ts +1 -0
  30. package/dist/es/business/YkCharts/constants.js +47 -0
  31. package/dist/es/business/YkCharts/constants.js.map +7 -0
  32. package/dist/es/business/YkCharts/hooks.d.ts +4 -0
  33. package/dist/es/business/YkCharts/hooks.js +37 -0
  34. package/dist/es/business/YkCharts/hooks.js.map +7 -0
  35. package/dist/es/business/YkCharts/index.d.ts +9 -0
  36. package/dist/es/business/YkCharts/index.js +20 -0
  37. package/dist/es/business/YkCharts/index.js.map +7 -0
  38. package/dist/es/business/YkCharts/index.module.less +164 -0
  39. package/dist/es/business/YkCharts/tooltip.less +92 -0
  40. package/dist/es/business/YkCharts/transformData.js +16 -0
  41. package/dist/es/business/YkCharts/transformData.js.map +7 -0
  42. package/dist/es/business/YkCharts/typing.d.ts +74 -0
  43. package/dist/es/business/YkCharts/typing.js +1 -0
  44. package/dist/es/business/YkCharts/typing.js.map +7 -0
  45. package/dist/es/business/YkCharts/utils.d.ts +4 -0
  46. package/dist/es/business/YkCharts/utils.js +109 -0
  47. package/dist/es/business/YkCharts/utils.js.map +7 -0
  48. package/dist/es/business/YkCharts/variables.less +13 -0
  49. package/dist/es/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  50. package/dist/es/business/YkLoginModule/SmsLoginForm.js +178 -0
  51. package/dist/es/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  52. package/dist/es/business/YkLoginModule/index.d.ts +48 -0
  53. package/dist/es/business/YkLoginModule/index.js +198 -0
  54. package/dist/es/business/YkLoginModule/index.js.map +7 -0
  55. package/dist/es/business/YkLoginModule/styles.module.less +169 -0
  56. package/dist/es/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  57. package/dist/es/business/YkSqlEdit/index.d.ts +20 -0
  58. package/dist/es/business/YkSqlEdit/index.js +180 -0
  59. package/dist/es/business/YkSqlEdit/index.js.map +7 -0
  60. package/dist/es/business/YkSqlEdit/sql-language.d.ts +11 -0
  61. package/dist/es/business/YkSqlEdit/sql-language.js +1460 -0
  62. package/dist/es/business/YkSqlEdit/sql-language.js.map +7 -0
  63. package/dist/es/components/YKMarkdown/index.d.ts +11 -0
  64. package/dist/es/components/YKMarkdown/index.js +236 -0
  65. package/dist/es/components/YKMarkdown/index.js.map +7 -0
  66. package/dist/es/components/YKMarkdown/index.module.less +83 -0
  67. package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  68. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +1 -1
  69. package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
  70. package/dist/es/creative/SkillsWriter/index.js +191 -0
  71. package/dist/es/creative/SkillsWriter/index.js.map +7 -0
  72. package/dist/es/creative/SkillsWriter/index.module.less +21 -0
  73. package/dist/es/index.d.ts +4 -2
  74. package/dist/es/index.js +80 -76
  75. package/dist/es/index.js.map +2 -2
  76. package/dist/es/index.less +8 -1
  77. package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
  78. package/dist/es/utils/ykStorybookDoc.js +24 -2
  79. package/dist/es/utils/ykStorybookDoc.js.map +2 -2
  80. package/dist/lib/assets/image/skills.zip +0 -0
  81. package/dist/lib/business/Empty/index.js.map +1 -1
  82. package/dist/lib/business/YkCharts/Area.d.ts +18 -0
  83. package/dist/lib/business/YkCharts/Area.js +346 -0
  84. package/dist/lib/business/YkCharts/Area.js.map +7 -0
  85. package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
  86. package/dist/lib/business/YkCharts/Bar.js +323 -0
  87. package/dist/lib/business/YkCharts/Bar.js.map +7 -0
  88. package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
  89. package/dist/lib/business/YkCharts/BarProperty.js +370 -0
  90. package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
  91. package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
  92. package/dist/lib/business/YkCharts/BarTotal.js +295 -0
  93. package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
  94. package/dist/lib/business/YkCharts/Line.d.ts +21 -0
  95. package/dist/lib/business/YkCharts/Line.js +349 -0
  96. package/dist/lib/business/YkCharts/Line.js.map +7 -0
  97. package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
  98. package/dist/lib/business/YkCharts/Pie.js +117 -0
  99. package/dist/lib/business/YkCharts/Pie.js.map +7 -0
  100. package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
  101. package/dist/lib/business/YkCharts/PieProperty.js +193 -0
  102. package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
  103. package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
  104. package/dist/lib/business/YkCharts/Pies.js +337 -0
  105. package/dist/lib/business/YkCharts/Pies.js.map +7 -0
  106. package/dist/lib/business/YkCharts/constants.d.ts +1 -0
  107. package/dist/lib/business/YkCharts/constants.js +71 -0
  108. package/dist/lib/business/YkCharts/constants.js.map +7 -0
  109. package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
  110. package/dist/lib/business/YkCharts/hooks.js +62 -0
  111. package/dist/lib/business/YkCharts/hooks.js.map +7 -0
  112. package/dist/lib/business/YkCharts/index.d.ts +9 -0
  113. package/dist/lib/business/YkCharts/index.js +61 -0
  114. package/dist/lib/business/YkCharts/index.js.map +7 -0
  115. package/dist/lib/business/YkCharts/index.module.less +164 -0
  116. package/dist/lib/business/YkCharts/tooltip.less +92 -0
  117. package/dist/lib/business/YkCharts/transformData.js +40 -0
  118. package/dist/lib/business/YkCharts/transformData.js.map +7 -0
  119. package/dist/lib/business/YkCharts/typing.d.ts +74 -0
  120. package/dist/lib/business/YkCharts/typing.js +18 -0
  121. package/dist/lib/business/YkCharts/typing.js.map +7 -0
  122. package/dist/lib/business/YkCharts/utils.d.ts +4 -0
  123. package/dist/lib/business/YkCharts/utils.js +143 -0
  124. package/dist/lib/business/YkCharts/utils.js.map +7 -0
  125. package/dist/lib/business/YkCharts/variables.less +13 -0
  126. package/dist/lib/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  127. package/dist/lib/business/YkLoginModule/SmsLoginForm.js +171 -0
  128. package/dist/lib/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  129. package/dist/lib/business/YkLoginModule/index.d.ts +48 -0
  130. package/dist/lib/business/YkLoginModule/index.js +206 -0
  131. package/dist/lib/business/YkLoginModule/index.js.map +7 -0
  132. package/dist/lib/business/YkLoginModule/styles.module.less +169 -0
  133. package/dist/lib/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  134. package/dist/lib/business/YkSqlEdit/index.d.ts +20 -0
  135. package/dist/lib/business/YkSqlEdit/index.js +202 -0
  136. package/dist/lib/business/YkSqlEdit/index.js.map +7 -0
  137. package/dist/lib/business/YkSqlEdit/sql-language.d.ts +11 -0
  138. package/dist/lib/business/YkSqlEdit/sql-language.js +1493 -0
  139. package/dist/lib/business/YkSqlEdit/sql-language.js.map +7 -0
  140. package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
  141. package/dist/lib/components/YKMarkdown/index.js +188 -0
  142. package/dist/lib/components/YKMarkdown/index.js.map +7 -0
  143. package/dist/lib/components/YKMarkdown/index.module.less +83 -0
  144. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  145. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +1 -1
  146. package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
  147. package/dist/lib/creative/SkillsWriter/index.js +200 -0
  148. package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
  149. package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
  150. package/dist/lib/index.d.ts +4 -2
  151. package/dist/lib/index.js +6 -0
  152. package/dist/lib/index.js.map +2 -2
  153. package/dist/lib/index.less +8 -1
  154. package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
  155. package/dist/lib/utils/ykStorybookDoc.js +23 -1
  156. package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
  157. package/package.json +16 -2
@@ -0,0 +1,143 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/business/YkCharts/utils.ts
30
+ var utils_exports = {};
31
+ __export(utils_exports, {
32
+ formatNumber: () => formatNumber,
33
+ formatValue: () => formatValue,
34
+ sqlFormat: () => sqlFormat
35
+ });
36
+ module.exports = __toCommonJS(utils_exports);
37
+ var import_decimal = __toESM(require("decimal.js"));
38
+ var formatValue = (value, format) => {
39
+ if (value === null || value === void 0 || value === "-") {
40
+ return "-";
41
+ }
42
+ if (!format || format === null) {
43
+ return value.toString();
44
+ }
45
+ const numValue = Number(value);
46
+ if (format === "percent") {
47
+ return new import_decimal.default(numValue).mul(100).toFixed(2) + "%";
48
+ }
49
+ if (format === "decimal") {
50
+ return new import_decimal.default(numValue).toFixed(2);
51
+ }
52
+ if (format === "integer") {
53
+ return new Intl.NumberFormat().format(numValue);
54
+ }
55
+ return numValue.toString();
56
+ };
57
+ function formatNumber(num, isInteger = false) {
58
+ const numberValue = typeof num === "string" ? parseFloat(num) : num;
59
+ if (isNaN(numberValue)) {
60
+ return [(num == null ? void 0 : num.toString()) || "", ""];
61
+ }
62
+ let result = "";
63
+ let unit = "";
64
+ function setFixed(v, dot) {
65
+ const multiplier = 10 ** dot;
66
+ return Math.floor(v * multiplier) / multiplier;
67
+ }
68
+ if (numberValue < 1e3) {
69
+ result = new import_decimal.default(numberValue).toFixed(1);
70
+ } else if (numberValue < 1e4) {
71
+ result = numberValue.toLocaleString("en-US", {
72
+ minimumFractionDigits: isInteger ? 0 : 1,
73
+ maximumFractionDigits: isInteger ? 0 : 1
74
+ });
75
+ } else if (numberValue < 1e8) {
76
+ const v = setFixed(numberValue / 1e4, 2);
77
+ result = v.toLocaleString("en-US", {
78
+ minimumFractionDigits: isInteger ? 1 : 2,
79
+ maximumFractionDigits: isInteger ? 1 : 2
80
+ });
81
+ unit = " 万";
82
+ } else {
83
+ const v = setFixed(numberValue / 1e8, 2);
84
+ result = v.toLocaleString("en-US", {
85
+ minimumFractionDigits: isInteger ? 1 : 2,
86
+ maximumFractionDigits: isInteger ? 1 : 2
87
+ });
88
+ unit = " 亿";
89
+ }
90
+ if (isInteger) {
91
+ result = result.replace(/\.0+(?=\D*$)/, "");
92
+ }
93
+ return [result, unit];
94
+ }
95
+ function sqlFormat(value, format) {
96
+ if (value === null || value === void 0 || value === "-") {
97
+ return "-";
98
+ }
99
+ if (!format) {
100
+ return value == null ? void 0 : value.toString();
101
+ }
102
+ if (typeof value === "boolean") {
103
+ return value == null ? void 0 : value.toString();
104
+ }
105
+ const { type, decimals = 0, thousand_separator = true, unit = 0, prefix = "", suffix = "" } = format;
106
+ switch (type) {
107
+ case "number": {
108
+ let result;
109
+ if (thousand_separator) {
110
+ result = value ? value == null ? void 0 : value.toLocaleString("en-US", {
111
+ minimumFractionDigits: decimals,
112
+ maximumFractionDigits: decimals
113
+ }) : "0";
114
+ } else {
115
+ result = new import_decimal.default(value || 0).toFixed(decimals);
116
+ }
117
+ return `${prefix}${result}${suffix}`;
118
+ }
119
+ case "percent": {
120
+ const result = new import_decimal.default(value || 0).mul(100).toFixed(decimals) + "%";
121
+ return `${prefix}${result}${suffix}`;
122
+ }
123
+ case "currency": {
124
+ const numericValue = new import_decimal.default(value || 0).div(10 ** unit).toNumber();
125
+ const unitValue = numericValue.toLocaleString("en-US", {
126
+ minimumFractionDigits: decimals,
127
+ maximumFractionDigits: decimals
128
+ });
129
+ const unitLabel = unit === 0 ? "" : unit === 4 ? "万" : unit === 8 ? "亿" : "";
130
+ return `${prefix}${unitValue}${unitLabel}${suffix}`;
131
+ }
132
+ case "normal":
133
+ default:
134
+ return (value == null ? void 0 : value.toString()) || "-";
135
+ }
136
+ }
137
+ // Annotate the CommonJS export names for ESM import in node:
138
+ 0 && (module.exports = {
139
+ formatNumber,
140
+ formatValue,
141
+ sqlFormat
142
+ });
143
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/business/YkCharts/utils.ts"],
4
+ "sourcesContent": ["import Decimal from 'decimal.js';\nimport type { Format, SqlFormat } from './typing';\n\nexport const formatValue = (value: string | number, format: Format | undefined | null): string => {\n if (value === null || value === undefined || value === '-') {\n return '-';\n }\n if (!format || format === null) {\n return value.toString();\n }\n const numValue = Number(value);\n if (format === 'percent') {\n return new Decimal(numValue).mul(100).toFixed(2) + '%';\n }\n if (format === 'decimal') {\n return new Decimal(numValue).toFixed(2);\n }\n if (format === 'integer') {\n return new Intl.NumberFormat().format(numValue);\n }\n return numValue.toString();\n};\n\nexport function formatNumber(num: number | string, isInteger: boolean = false): [string, string] {\n const numberValue = typeof num === 'string' ? parseFloat(num) : num;\n if (isNaN(numberValue)) {\n return [num?.toString() || '', ''];\n }\n let result: string = '';\n let unit: string = '';\n function setFixed(v: number, dot: number) {\n const multiplier = 10 ** dot;\n return Math.floor(v * multiplier) / multiplier;\n }\n if (numberValue < 1000) {\n result = new Decimal(numberValue).toFixed(1);\n } else if (numberValue < 10000) {\n result = numberValue.toLocaleString('en-US', {\n minimumFractionDigits: isInteger ? 0 : 1,\n maximumFractionDigits: isInteger ? 0 : 1,\n });\n } else if (numberValue < 100000000) {\n const v = setFixed(numberValue / 10000, 2);\n result = v.toLocaleString('en-US', {\n minimumFractionDigits: isInteger ? 1 : 2,\n maximumFractionDigits: isInteger ? 1 : 2,\n });\n unit = ' 万';\n } else {\n const v = setFixed(numberValue / 100000000, 2);\n result = v.toLocaleString('en-US', {\n minimumFractionDigits: isInteger ? 1 : 2,\n maximumFractionDigits: isInteger ? 1 : 2,\n });\n unit = ' 亿';\n }\n if (isInteger) {\n result = result.replace(/\\.0+(?=\\D*$)/, '');\n }\n return [result, unit];\n}\n\nexport function sqlFormat(value: string | number | boolean, format: SqlFormat | undefined | null): string {\n if (value === null || value === undefined || value === '-') {\n return '-';\n }\n if (!format) {\n return value?.toString();\n }\n if (typeof value === 'boolean') {\n return value?.toString();\n }\n const { type, decimals = 0, thousand_separator = true, unit = 0, prefix = '', suffix = '' } = format;\n switch (type) {\n case 'number': {\n let result: string;\n if (thousand_separator) {\n result = value\n ? value?.toLocaleString('en-US', {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n })\n : '0';\n } else {\n result = new Decimal(value || 0).toFixed(decimals);\n }\n return `${prefix}${result}${suffix}`;\n }\n case 'percent': {\n const result = new Decimal(value || 0).mul(100).toFixed(decimals) + '%';\n return `${prefix}${result}${suffix}`;\n }\n case 'currency': {\n const numericValue = new Decimal(value || 0).div(10 ** unit).toNumber();\n const unitValue = numericValue.toLocaleString('en-US', {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n const unitLabel = unit === 0 ? '' : unit === 4 ? '万' : unit === 8 ? '亿' : '';\n return `${prefix}${unitValue}${unitLabel}${suffix}`;\n }\n case 'normal':\n default:\n return value?.toString() || '-';\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AAGb,IAAM,cAAc,CAAC,OAAwB,WAA8C;AAChG,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,KAAK;AAC1D,WAAO;AAAA,EACT;AACA,MAAI,CAAC,UAAU,WAAW,MAAM;AAC9B,WAAO,MAAM,SAAS;AAAA,EACxB;AACA,QAAM,WAAW,OAAO,KAAK;AAC7B,MAAI,WAAW,WAAW;AACxB,WAAO,IAAI,eAAAA,QAAQ,QAAQ,EAAE,IAAI,GAAG,EAAE,QAAQ,CAAC,IAAI;AAAA,EACrD;AACA,MAAI,WAAW,WAAW;AACxB,WAAO,IAAI,eAAAA,QAAQ,QAAQ,EAAE,QAAQ,CAAC;AAAA,EACxC;AACA,MAAI,WAAW,WAAW;AACxB,WAAO,IAAI,KAAK,aAAa,EAAE,OAAO,QAAQ;AAAA,EAChD;AACA,SAAO,SAAS,SAAS;AAC3B;AAEO,SAAS,aAAa,KAAsB,YAAqB,OAAyB;AAC/F,QAAM,cAAc,OAAO,QAAQ,WAAW,WAAW,GAAG,IAAI;AAChE,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,EAAC,2BAAK,eAAc,IAAI,EAAE;AAAA,EACnC;AACA,MAAI,SAAiB;AACrB,MAAI,OAAe;AACnB,WAAS,SAAS,GAAW,KAAa;AACxC,UAAM,aAAa,MAAM;AACzB,WAAO,KAAK,MAAM,IAAI,UAAU,IAAI;AAAA,EACtC;AACA,MAAI,cAAc,KAAM;AACtB,aAAS,IAAI,eAAAA,QAAQ,WAAW,EAAE,QAAQ,CAAC;AAAA,EAC7C,WAAW,cAAc,KAAO;AAC9B,aAAS,YAAY,eAAe,SAAS;AAAA,MAC3C,uBAAuB,YAAY,IAAI;AAAA,MACvC,uBAAuB,YAAY,IAAI;AAAA,IACzC,CAAC;AAAA,EACH,WAAW,cAAc,KAAW;AAClC,UAAM,IAAI,SAAS,cAAc,KAAO,CAAC;AACzC,aAAS,EAAE,eAAe,SAAS;AAAA,MACjC,uBAAuB,YAAY,IAAI;AAAA,MACvC,uBAAuB,YAAY,IAAI;AAAA,IACzC,CAAC;AACD,WAAO;AAAA,EACT,OAAO;AACL,UAAM,IAAI,SAAS,cAAc,KAAW,CAAC;AAC7C,aAAS,EAAE,eAAe,SAAS;AAAA,MACjC,uBAAuB,YAAY,IAAI;AAAA,MACvC,uBAAuB,YAAY,IAAI;AAAA,IACzC,CAAC;AACD,WAAO;AAAA,EACT;AACA,MAAI,WAAW;AACb,aAAS,OAAO,QAAQ,gBAAgB,EAAE;AAAA,EAC5C;AACA,SAAO,CAAC,QAAQ,IAAI;AACtB;AAEO,SAAS,UAAU,OAAkC,QAA8C;AACxG,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,KAAK;AAC1D,WAAO;AAAA,EACT;AACA,MAAI,CAAC,QAAQ;AACX,WAAO,+BAAO;AAAA,EAChB;AACA,MAAI,OAAO,UAAU,WAAW;AAC9B,WAAO,+BAAO;AAAA,EAChB;AACA,QAAM,EAAE,MAAM,WAAW,GAAG,qBAAqB,MAAM,OAAO,GAAG,SAAS,IAAI,SAAS,GAAG,IAAI;AAC9F,UAAQ,MAAM;AAAA,IACZ,KAAK,UAAU;AACb,UAAI;AACJ,UAAI,oBAAoB;AACtB,iBAAS,QACL,+BAAO,eAAe,SAAS;AAAA,UAC7B,uBAAuB;AAAA,UACvB,uBAAuB;AAAA,QACzB,KACA;AAAA,MACN,OAAO;AACL,iBAAS,IAAI,eAAAA,QAAQ,SAAS,CAAC,EAAE,QAAQ,QAAQ;AAAA,MACnD;AACA,aAAO,GAAG,SAAS,SAAS;AAAA,IAC9B;AAAA,IACA,KAAK,WAAW;AACd,YAAM,SAAS,IAAI,eAAAA,QAAQ,SAAS,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,QAAQ,IAAI;AACpE,aAAO,GAAG,SAAS,SAAS;AAAA,IAC9B;AAAA,IACA,KAAK,YAAY;AACf,YAAM,eAAe,IAAI,eAAAA,QAAQ,SAAS,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,SAAS;AACtE,YAAM,YAAY,aAAa,eAAe,SAAS;AAAA,QACrD,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MACzB,CAAC;AACD,YAAM,YAAY,SAAS,IAAI,KAAK,SAAS,IAAI,MAAM,SAAS,IAAI,MAAM;AAC1E,aAAO,GAAG,SAAS,YAAY,YAAY;AAAA,IAC7C;AAAA,IACA,KAAK;AAAA,IACL;AACE,cAAO,+BAAO,eAAc;AAAA,EAChC;AACF;",
6
+ "names": ["Decimal"]
7
+ }
@@ -0,0 +1,13 @@
1
+ @primaryColor: #3b86f9;
2
+ @iconPrimaryColor: #0a6bfd;
3
+ @fontPrimaryColor: #0a6bfd;
4
+ @borderPrimaryColor: #b0cffe;
5
+ @globalBgColor: #edeff4;
6
+
7
+ @ykFontFamilySemibold: 'PingFangSC-Semibold', 'PingFang SC', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial,
8
+ sans-serif;
9
+ @ykFontFamilyRegular: 'PingFangSC-Regular', 'PingFang SC', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial,
10
+ sans-serif;
11
+ @ykFontFamilyMedium: 'PingFangSC-Medium', 'PingFang SC', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial,
12
+ sans-serif;
13
+
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ export type SmsLoginFormApi = {
3
+ sendSms: (payload: Record<string, unknown>) => Promise<{
4
+ code: number;
5
+ msg: string;
6
+ }>;
7
+ };
8
+ declare global {
9
+ interface Window {
10
+ sliderVerify: (element: 'pop' | HTMLElement, success: (res: {
11
+ token: string;
12
+ captchaVerification: string;
13
+ }) => void, options: {
14
+ appKey: string;
15
+ locale?: string;
16
+ }) => void;
17
+ }
18
+ }
19
+ export type SmsLoginFormProps = {
20
+ inputClassName: string;
21
+ api: SmsLoginFormApi;
22
+ appKey: string;
23
+ };
24
+ declare const SmsLogin: React.FC<SmsLoginFormProps>;
25
+ export default SmsLogin;
@@ -0,0 +1,171 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/business/YkLoginModule/SmsLoginForm.tsx
30
+ var SmsLoginForm_exports = {};
31
+ __export(SmsLoginForm_exports, {
32
+ default: () => SmsLoginForm_default
33
+ });
34
+ module.exports = __toCommonJS(SmsLoginForm_exports);
35
+ var import_icons = require("@ant-design/icons");
36
+ var import_pro_form = require("@ant-design/pro-form");
37
+ var import_antd = require("antd");
38
+ var import_react = __toESM(require("react"));
39
+ var import_styles_module = __toESM(require("./styles.module.less"));
40
+ var SmsLogin = ({ inputClassName, api, appKey }) => {
41
+ (0, import_react.useEffect)(() => {
42
+ const link = document.createElement("link");
43
+ link.href = "https://captchaoss.sanguosha.com/library/captcha/0.0.5/lib/index.css";
44
+ link.rel = "stylesheet";
45
+ document.head.appendChild(link);
46
+ const script = document.createElement("script");
47
+ script.src = "https://captchaoss.sanguosha.com/library/captcha/0.0.5/lib/index.js";
48
+ document.body.appendChild(script);
49
+ return () => {
50
+ document.head.removeChild(link);
51
+ document.body.removeChild(script);
52
+ };
53
+ }, []);
54
+ const [phone, setPhone] = (0, import_react.useState)("");
55
+ const [countdown, setCountdown] = (0, import_react.useState)(0);
56
+ const [sendStatus, setSendStatus] = (0, import_react.useState)(false);
57
+ const disableBtn = countdown > 0 || phone.length !== 11;
58
+ const sendVerificationCode = async () => {
59
+ try {
60
+ const phoneNumber = phone;
61
+ if (!phoneNumber) {
62
+ import_antd.message.error("请输入手机号");
63
+ return;
64
+ }
65
+ if (!/^1\d{10}$/.test(phoneNumber)) {
66
+ import_antd.message.error("请输入正确的手机号格式");
67
+ return;
68
+ }
69
+ if (!appKey) {
70
+ import_antd.message.error("验证码配置缺失,请联系管理员(appKey)");
71
+ return;
72
+ }
73
+ window.sliderVerify(
74
+ "pop",
75
+ (captchaRes) => {
76
+ void api.sendSms({ phone: phoneNumber, ...captchaRes }).then((sendRes) => {
77
+ if (sendRes.code !== 200) {
78
+ import_antd.message.error(sendRes.msg);
79
+ return;
80
+ }
81
+ setSendStatus(true);
82
+ import_antd.message.success("验证码发送成功");
83
+ setCountdown(60);
84
+ const timer = setInterval(() => {
85
+ setCountdown((prevCountdown) => {
86
+ if (prevCountdown <= 1) {
87
+ clearInterval(timer);
88
+ return 0;
89
+ }
90
+ return prevCountdown - 1;
91
+ });
92
+ }, 1e3);
93
+ }).catch(() => {
94
+ import_antd.message.error("验证码发送失败,请稍后再试");
95
+ return;
96
+ });
97
+ },
98
+ {
99
+ appKey
100
+ }
101
+ );
102
+ } catch {
103
+ import_antd.message.error("发送验证码失败,请稍后再试");
104
+ }
105
+ };
106
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
107
+ import_pro_form.ProFormText,
108
+ {
109
+ className: inputClassName,
110
+ name: "phone",
111
+ fieldProps: {
112
+ size: "large",
113
+ prefix: /* @__PURE__ */ import_react.default.createElement(import_icons.MobileOutlined, null),
114
+ onChange: (e) => {
115
+ setPhone(e.target.value);
116
+ }
117
+ },
118
+ placeholder: "请输入手机号",
119
+ validateTrigger: "onBlur",
120
+ rules: [
121
+ {
122
+ required: true,
123
+ validator(rule, value, _callback) {
124
+ if (!value) {
125
+ return Promise.reject("手机号是必填项!");
126
+ }
127
+ if (!/^1\d{10}$/.test(value)) {
128
+ return Promise.reject("请输入正确的手机号格式");
129
+ }
130
+ return Promise.resolve();
131
+ }
132
+ }
133
+ ]
134
+ }
135
+ ), /* @__PURE__ */ import_react.default.createElement(
136
+ import_pro_form.ProFormText,
137
+ {
138
+ className: inputClassName,
139
+ name: "code",
140
+ disabled: !sendStatus,
141
+ fieldProps: {
142
+ size: "large",
143
+ prefix: /* @__PURE__ */ import_react.default.createElement(import_icons.LockOutlined, null),
144
+ suffix: /* @__PURE__ */ import_react.default.createElement(
145
+ import_antd.Button,
146
+ {
147
+ className: import_styles_module.default.captchaBtn,
148
+ style: { fontSize: 16 },
149
+ onClick: (e) => {
150
+ e.preventDefault();
151
+ e.stopPropagation();
152
+ countdown === 0 && void sendVerificationCode();
153
+ },
154
+ type: "link",
155
+ disabled: disableBtn
156
+ },
157
+ countdown > 0 ? `${countdown}秒后重新获取` : "获取验证码"
158
+ )
159
+ },
160
+ placeholder: "请输入验证码",
161
+ rules: [
162
+ {
163
+ required: true,
164
+ message: "验证码是必填项!"
165
+ }
166
+ ]
167
+ }
168
+ ));
169
+ };
170
+ var SmsLoginForm_default = SmsLogin;
171
+ //# sourceMappingURL=SmsLoginForm.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/business/YkLoginModule/SmsLoginForm.tsx"],
4
+ "sourcesContent": ["import { LockOutlined, MobileOutlined } from '@ant-design/icons';\nimport { ProFormText } from '@ant-design/pro-form';\nimport { Button, message } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport styles from './styles.module.less';\n\nexport type SmsLoginFormApi = {\n sendSms: (payload: Record<string, unknown>) => Promise<{ code: number; msg: string }>;\n};\n\ndeclare global {\n interface Window {\n sliderVerify: (\n element: 'pop' | HTMLElement,\n success: (res: { token: string; captchaVerification: string }) => void,\n options: { appKey: string; locale?: string },\n ) => void;\n }\n}\n\nexport type SmsLoginFormProps = {\n inputClassName: string;\n api: SmsLoginFormApi;\n appKey: string;\n};\n\nconst SmsLogin: React.FC<SmsLoginFormProps> = ({ inputClassName, api, appKey }) => {\n useEffect(() => {\n const link = document.createElement('link');\n link.href = 'https://captchaoss.sanguosha.com/library/captcha/0.0.5/lib/index.css';\n link.rel = 'stylesheet';\n document.head.appendChild(link);\n\n const script = document.createElement('script');\n script.src = 'https://captchaoss.sanguosha.com/library/captcha/0.0.5/lib/index.js';\n document.body.appendChild(script);\n return () => {\n document.head.removeChild(link);\n document.body.removeChild(script);\n };\n }, []);\n\n const [phone, setPhone] = useState<string>('');\n const [countdown, setCountdown] = useState<number>(0);\n const [sendStatus, setSendStatus] = useState<boolean>(false);\n const disableBtn = countdown > 0 || phone.length !== 11;\n\n const sendVerificationCode = async () => {\n try {\n const phoneNumber = phone;\n if (!phoneNumber) {\n message.error('请输入手机号');\n return;\n }\n\n if (!/^1\\d{10}$/.test(phoneNumber)) {\n message.error('请输入正确的手机号格式');\n return;\n }\n if (!appKey) {\n message.error('验证码配置缺失,请联系管理员(appKey)');\n return;\n }\n window.sliderVerify(\n 'pop',\n (captchaRes: Record<string, unknown>) => {\n void api\n .sendSms({ phone: phoneNumber, ...captchaRes })\n .then((sendRes) => {\n if (sendRes.code !== 200) {\n message.error(sendRes.msg);\n return;\n }\n setSendStatus(true);\n message.success('验证码发送成功');\n setCountdown(60);\n const timer = setInterval(() => {\n setCountdown((prevCountdown) => {\n if (prevCountdown <= 1) {\n clearInterval(timer);\n return 0;\n }\n return prevCountdown - 1;\n });\n }, 1000);\n })\n .catch(() => {\n message.error('验证码发送失败,请稍后再试');\n return;\n });\n },\n {\n appKey,\n },\n );\n } catch {\n message.error('发送验证码失败,请稍后再试');\n }\n };\n\n return (\n <>\n <ProFormText\n className={inputClassName}\n name='phone'\n fieldProps={{\n size: 'large',\n prefix: <MobileOutlined />,\n onChange: (e) => {\n setPhone(e.target.value);\n },\n }}\n placeholder='请输入手机号'\n validateTrigger='onBlur'\n rules={[\n {\n required: true,\n validator(rule, value, _callback) {\n if (!value) {\n return Promise.reject('手机号是必填项!');\n }\n if (!/^1\\d{10}$/.test(value)) {\n return Promise.reject('请输入正确的手机号格式');\n }\n return Promise.resolve();\n },\n },\n ]}\n />\n <ProFormText\n className={inputClassName}\n name='code'\n disabled={!sendStatus}\n fieldProps={{\n size: 'large',\n prefix: <LockOutlined />,\n suffix: (\n <Button\n className={styles.captchaBtn}\n style={{ fontSize: 16 }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n countdown === 0 && void sendVerificationCode();\n }}\n type='link'\n disabled={disableBtn}\n >\n {countdown > 0 ? `${countdown}秒后重新获取` : '获取验证码'}\n </Button>\n ),\n }}\n placeholder='请输入验证码'\n rules={[\n {\n required: true,\n message: '验证码是必填项!',\n },\n ]}\n />\n </>\n );\n};\n\nexport default SmsLogin;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "styles"]
7
+ }
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { type SmsLoginFormApi } from './SmsLoginForm';
3
+ export type LoginType = 'qrcode' | 'sms';
4
+ export type LoginTabItem = {
5
+ key: LoginType;
6
+ label: React.ReactNode;
7
+ };
8
+ export type QrcodeApi = {
9
+ getQrcode: () => Promise<{
10
+ qrcode: string;
11
+ url: string;
12
+ }>;
13
+ scanLogin: (qrcode: string) => Promise<{
14
+ code: number;
15
+ data?: {
16
+ status?: number;
17
+ msg?: string;
18
+ };
19
+ }>;
20
+ };
21
+ export type LoginModuleProps = {
22
+ title: React.ReactNode;
23
+ tabs: LoginTabItem[];
24
+ defaultLoginType: LoginType;
25
+ containerStyle?: React.CSSProperties;
26
+ actions?: React.ReactNode | ((loginType: LoginType) => React.ReactNode);
27
+ className?: string;
28
+ formClassName?: string;
29
+ tabsClassName?: string;
30
+ inputClassName?: string;
31
+ qrcodeClassName?: string;
32
+ qrcodeBoxClassName?: string;
33
+ onFinish: (values: Record<string, unknown>) => Promise<void>;
34
+ qrcode?: {
35
+ api: QrcodeApi;
36
+ icon: string;
37
+ iconSize?: number;
38
+ size?: number;
39
+ wrapStyle?: React.CSSProperties;
40
+ onSuccess: () => void | Promise<void>;
41
+ };
42
+ sms?: {
43
+ api: SmsLoginFormApi;
44
+ appKey: string;
45
+ };
46
+ };
47
+ declare const LoginModule: React.FC<LoginModuleProps>;
48
+ export default LoginModule;
@@ -0,0 +1,206 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/business/YkLoginModule/index.tsx
30
+ var YkLoginModule_exports = {};
31
+ __export(YkLoginModule_exports, {
32
+ default: () => YkLoginModule_default
33
+ });
34
+ module.exports = __toCommonJS(YkLoginModule_exports);
35
+ var import_pro_form = require("@ant-design/pro-form");
36
+ var import_antd = require("antd");
37
+ var import_react = __toESM(require("react"));
38
+ var import_SmsLoginForm = __toESM(require("./SmsLoginForm"));
39
+ var import_styles_module = __toESM(require("./styles.module.less"));
40
+ var DEFAULT_QRCODE_WRAP_STYLE = {
41
+ padding: 10,
42
+ display: "flex",
43
+ justifyContent: "center"
44
+ };
45
+ var LoginModule = (props) => {
46
+ const {
47
+ title,
48
+ tabs,
49
+ defaultLoginType,
50
+ containerStyle,
51
+ actions,
52
+ onFinish,
53
+ qrcode,
54
+ className = import_styles_module.default.root,
55
+ formClassName = import_styles_module.default.form,
56
+ tabsClassName = import_styles_module.default.tabs,
57
+ inputClassName,
58
+ qrcodeClassName = import_styles_module.default.qrcode,
59
+ qrcodeBoxClassName = import_styles_module.default.qrcodeBox,
60
+ sms
61
+ } = props;
62
+ const [loginType, setLoginType] = (0, import_react.useState)(defaultLoginType);
63
+ const [qrcodeStatus, setQrcodeStatus] = (0, import_react.useState)("active");
64
+ const [qrcodeUrl, setQrcodeUrl] = (0, import_react.useState)("-");
65
+ const [qrcodeValue, setQrcodeValue] = (0, import_react.useState)("");
66
+ const pollIntervalRef = (0, import_react.useRef)(null);
67
+ const pollTimeoutRef = (0, import_react.useRef)(null);
68
+ const shouldShowSubmitter = loginType !== "qrcode";
69
+ const resolvedActions = (0, import_react.useMemo)(() => {
70
+ if (!actions)
71
+ return void 0;
72
+ return typeof actions === "function" ? actions(loginType) : actions;
73
+ }, [actions, loginType]);
74
+ const safeClearTimers = (0, import_react.useCallback)(() => {
75
+ if (pollIntervalRef.current)
76
+ clearInterval(pollIntervalRef.current);
77
+ if (pollTimeoutRef.current)
78
+ clearTimeout(pollTimeoutRef.current);
79
+ pollIntervalRef.current = null;
80
+ pollTimeoutRef.current = null;
81
+ }, []);
82
+ const handleQrcodeRefresh = (0, import_react.useCallback)(async () => {
83
+ if (!qrcode)
84
+ return;
85
+ setQrcodeStatus("loading");
86
+ try {
87
+ const res = await qrcode.api.getQrcode();
88
+ setQrcodeUrl(res.url);
89
+ setQrcodeValue(res.qrcode);
90
+ setQrcodeStatus("active");
91
+ } catch {
92
+ setQrcodeStatus("expired");
93
+ import_antd.message.error("获取二维码失败,请稍后重试");
94
+ }
95
+ }, [qrcode]);
96
+ const enabledTabKeys = (0, import_react.useMemo)(() => new Set(tabs.map((t) => t.key)), [tabs]);
97
+ (0, import_react.useEffect)(() => {
98
+ var _a;
99
+ if (enabledTabKeys.has(defaultLoginType)) {
100
+ setLoginType(defaultLoginType);
101
+ return;
102
+ }
103
+ const fallback = (_a = tabs[0]) == null ? void 0 : _a.key;
104
+ if (fallback)
105
+ setLoginType(fallback);
106
+ }, [defaultLoginType, enabledTabKeys, tabs]);
107
+ (0, import_react.useEffect)(() => {
108
+ var _a;
109
+ if (enabledTabKeys.has(loginType))
110
+ return;
111
+ const fallback = (_a = tabs[0]) == null ? void 0 : _a.key;
112
+ if (fallback)
113
+ setLoginType(fallback);
114
+ }, [enabledTabKeys, loginType, tabs]);
115
+ (0, import_react.useEffect)(() => {
116
+ safeClearTimers();
117
+ if (loginType !== "qrcode") {
118
+ setQrcodeStatus("expired");
119
+ return;
120
+ }
121
+ if (!qrcode) {
122
+ setQrcodeStatus("expired");
123
+ return;
124
+ }
125
+ void handleQrcodeRefresh();
126
+ return safeClearTimers;
127
+ }, [handleQrcodeRefresh, loginType, qrcode, safeClearTimers]);
128
+ (0, import_react.useEffect)(() => {
129
+ safeClearTimers();
130
+ if (!qrcode)
131
+ return;
132
+ if (loginType !== "qrcode")
133
+ return;
134
+ if (qrcodeStatus !== "active")
135
+ return;
136
+ if (!qrcodeValue)
137
+ return;
138
+ pollIntervalRef.current = setInterval(() => {
139
+ void qrcode.api.scanLogin(qrcodeValue).then((res) => {
140
+ var _a, _b;
141
+ if (res.code !== 200)
142
+ return;
143
+ const status = (_a = res.data) == null ? void 0 : _a.status;
144
+ const msg = ((_b = res.data) == null ? void 0 : _b.msg) ?? "扫码遇到问题,稍后重试";
145
+ if (status === -1)
146
+ return;
147
+ if (status !== 1) {
148
+ safeClearTimers();
149
+ setQrcodeStatus("expired");
150
+ import_antd.message.error(msg, 3);
151
+ return;
152
+ }
153
+ safeClearTimers();
154
+ void qrcode.onSuccess();
155
+ }).catch(() => {
156
+ });
157
+ }, 1e3);
158
+ pollTimeoutRef.current = setTimeout(() => {
159
+ setQrcodeStatus("expired");
160
+ safeClearTimers();
161
+ }, 3e4);
162
+ return safeClearTimers;
163
+ }, [loginType, qrcode, qrcodeStatus, qrcodeValue, safeClearTimers]);
164
+ const tabItems = (0, import_react.useMemo)(() => tabs.map((t) => ({ key: t.key, label: t.label })), [tabs]);
165
+ return /* @__PURE__ */ import_react.default.createElement("div", { className, style: { maxWidth: "500px" } }, /* @__PURE__ */ import_react.default.createElement(
166
+ import_pro_form.LoginForm,
167
+ {
168
+ className: formClassName,
169
+ onFinish: async (values) => {
170
+ await onFinish(values);
171
+ },
172
+ title: typeof title === "string" ? /* @__PURE__ */ import_react.default.createElement("div", { className: import_styles_module.default.title }, title) : title,
173
+ containerStyle,
174
+ submitter: shouldShowSubmitter ? void 0 : false,
175
+ actions: resolvedActions
176
+ },
177
+ /* @__PURE__ */ import_react.default.createElement(
178
+ import_antd.Tabs,
179
+ {
180
+ className: tabsClassName,
181
+ centered: true,
182
+ activeKey: loginType,
183
+ onChange: (activeKey) => {
184
+ const next = activeKey;
185
+ setLoginType(next);
186
+ },
187
+ items: tabItems
188
+ }
189
+ ),
190
+ enabledTabKeys.has("qrcode") && loginType === "qrcode" && qrcode && /* @__PURE__ */ import_react.default.createElement("div", { style: qrcode.wrapStyle ?? DEFAULT_QRCODE_WRAP_STYLE }, /* @__PURE__ */ import_react.default.createElement("div", { className: qrcodeBoxClassName }, /* @__PURE__ */ import_react.default.createElement(import_antd.Flex, { justify: "center", align: "center" }, /* @__PURE__ */ import_react.default.createElement("i", { className: "iconfont icon-saoyisao", style: { color: "#999999", marginRight: 10, fontSize: 14 } }), "请使用", /* @__PURE__ */ import_react.default.createElement("span", { style: { color: "#0A6BFD" } }, "小闪扫码"), "登录"), /* @__PURE__ */ import_react.default.createElement(
191
+ import_antd.QRCode,
192
+ {
193
+ icon: qrcode.icon,
194
+ iconSize: qrcode.iconSize ?? 50,
195
+ className: qrcodeClassName,
196
+ size: qrcode.size ?? 240,
197
+ value: qrcodeUrl,
198
+ status: qrcodeStatus,
199
+ onRefresh: handleQrcodeRefresh
200
+ }
201
+ ))),
202
+ enabledTabKeys.has("sms") && loginType === "sms" && sms && /* @__PURE__ */ import_react.default.createElement(import_SmsLoginForm.default, { inputClassName: inputClassName ?? "", api: sms.api, appKey: sms.appKey })
203
+ ));
204
+ };
205
+ var YkLoginModule_default = LoginModule;
206
+ //# sourceMappingURL=index.js.map