@robot-admin/naive-ui-components 0.11.6 → 0.11.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 (109) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -0
  3. package/README_EN.md +4 -0
  4. package/dist/C_ActionBar.css +59 -0
  5. package/dist/C_AudioPlayer.css +59 -0
  6. package/dist/C_Breadcrumb.css +59 -0
  7. package/dist/C_Captcha.css +24 -24
  8. package/dist/C_Captcha2.cjs +1 -1
  9. package/dist/C_Captcha2.js +1 -1
  10. package/dist/C_Chat.css +59 -0
  11. package/dist/C_Code.css +59 -0
  12. package/dist/C_CollapsePanel.css +59 -0
  13. package/dist/C_ContextMenu.css +59 -0
  14. package/dist/C_Guide.css +59 -0
  15. package/dist/C_Guide2.cjs +1 -1
  16. package/dist/C_Guide2.js +1 -1
  17. package/dist/C_Language.css +58 -1
  18. package/dist/C_Login.css +244 -0
  19. package/dist/C_Menu2.cjs +1 -1
  20. package/dist/C_Menu2.js +1 -1
  21. package/dist/C_Table.base.css +59 -0
  22. package/dist/C_Table.css +59 -0
  23. package/dist/C_TagsView.css +59 -0
  24. package/dist/C_Theme.css +58 -1
  25. package/dist/C_Timeline.css +59 -0
  26. package/dist/C_Transfer.css +59 -0
  27. package/dist/C_WorkFlow.css +59 -0
  28. package/dist/constants.d.cts +1 -1
  29. package/dist/constants.d.ts +1 -1
  30. package/dist/constants2.d.cts +2 -2
  31. package/dist/constants2.d.ts +2 -2
  32. package/dist/constants3.d.cts +3 -3
  33. package/dist/constants3.d.ts +3 -3
  34. package/dist/constants4.d.cts +3 -3
  35. package/dist/constants4.d.ts +3 -3
  36. package/dist/constants5.d.cts +4 -4
  37. package/dist/constants5.d.ts +4 -4
  38. package/dist/index.vue.d.cts +1 -1
  39. package/dist/index.vue.d.ts +1 -1
  40. package/dist/index10.vue.d.ts +5 -5
  41. package/dist/index11.vue.d.cts +5 -5
  42. package/dist/index11.vue.d.ts +2 -2
  43. package/dist/index12.vue.d.cts +2 -2
  44. package/dist/index12.vue.d.ts +5 -5
  45. package/dist/index13.vue.d.cts +5 -5
  46. package/dist/index13.vue.d.ts +2 -2
  47. package/dist/index14.vue.d.cts +2 -2
  48. package/dist/index14.vue.d.ts +8 -8
  49. package/dist/index15.vue.d.cts +8 -8
  50. package/dist/index15.vue.d.ts +1 -1
  51. package/dist/index16.vue.d.cts +1 -1
  52. package/dist/index17.vue.d.ts +2 -2
  53. package/dist/index18.vue.d.cts +2 -2
  54. package/dist/index18.vue.d.ts +7 -3
  55. package/dist/index19.vue.d.cts +2 -2
  56. package/dist/index19.vue.d.ts +2 -2
  57. package/dist/index2.vue.d.cts +1 -1
  58. package/dist/index2.vue.d.ts +1 -1
  59. package/dist/index20.vue.d.cts +1 -1
  60. package/dist/index20.vue.d.ts +1 -1
  61. package/dist/index21.vue.d.cts +2 -2
  62. package/dist/index21.vue.d.ts +2 -2
  63. package/dist/index24.vue.d.cts +4 -4
  64. package/dist/index24.vue.d.ts +4 -4
  65. package/dist/index26.vue.d.cts +3 -3
  66. package/dist/index26.vue.d.ts +3 -3
  67. package/dist/index3.vue.d.cts +3 -3
  68. package/dist/index3.vue.d.ts +3 -3
  69. package/dist/index4.vue.d.cts +3 -3
  70. package/dist/index4.vue.d.ts +3 -3
  71. package/dist/index5.vue.d.cts +7 -3
  72. package/dist/index7.vue.d.ts +4 -4
  73. package/dist/index8.vue.d.cts +4 -4
  74. package/dist/mapUtils.d.cts +3 -3
  75. package/dist/mapUtils.d.ts +3 -3
  76. package/dist/style.css +24 -24
  77. package/dist/useCalendarEvents.d.cts +1 -1
  78. package/dist/useCalendarEvents.d.ts +1 -1
  79. package/dist/useCollapsePanel.d.cts +4 -4
  80. package/dist/useCollapsePanel.d.ts +4 -4
  81. package/dist/useCropperCore.d.cts +5 -5
  82. package/dist/useCropperCore.d.ts +5 -5
  83. package/dist/useDraggableLayout.d.cts +4 -4
  84. package/dist/useDraggableLayout.d.ts +4 -4
  85. package/dist/useDynamicFormState.d.cts +2 -2
  86. package/dist/useDynamicFormState.d.ts +2 -2
  87. package/dist/useEdgeInteraction.d.cts +3 -3
  88. package/dist/useEdgeInteraction.d.ts +3 -3
  89. package/dist/useFullscreen.d.cts +2 -2
  90. package/dist/useFullscreen.d.ts +2 -2
  91. package/dist/useInfiniteScroll.d.cts +3 -3
  92. package/dist/useInfiniteScroll.d.ts +3 -3
  93. package/dist/useQRCode.d.cts +2 -2
  94. package/dist/useQRCode.d.ts +2 -2
  95. package/dist/useSearchState.d.cts +23 -23
  96. package/dist/useSearchState.d.ts +23 -23
  97. package/dist/useSignatureHistory.d.cts +5 -5
  98. package/dist/useSignatureHistory.d.ts +5 -5
  99. package/dist/useSplitResize.d.cts +5 -5
  100. package/dist/useSplitResize.d.ts +5 -5
  101. package/dist/useTimeSelection.d.cts +3 -3
  102. package/dist/useTimeSelection.d.ts +3 -3
  103. package/dist/useTreeOperations.d.cts +6 -6
  104. package/dist/useTreeOperations.d.ts +6 -6
  105. package/dist/useWorkflowValidation.d.cts +5 -5
  106. package/dist/useWorkflowValidation.d.ts +5 -5
  107. package/dist/verification.d.cts +1 -1
  108. package/dist/verification.d.ts +1 -1
  109. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @robot-admin/naive-ui-components
2
2
 
3
+ ## 0.11.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 修复按需消费场景中的登录验证码与功能引导回归:恢复验证码拼图标识和空文本的图标模式,避免未配置引导遮罩透明度时覆盖 driver.js 默认值,并让组件独立样式入口自动包含内部公共组件样式。`C_Menu` 同时新增非破坏性的 `intent` 事件,便于宿主在用户点击前按需预取目标路由。
8
+
3
9
  ## 0.11.6
4
10
 
5
11
  ### Patch Changes
package/README.md CHANGED
@@ -93,6 +93,10 @@ Components({
93
93
 
94
94
  `importStyle: true`(等价于 `'full'`)保持原有完整样式行为。只使用 C_Form/C_Table 基础字段、不使用内置富文本编辑器时,可设置 `importStyle: 'base'`,避免带入编辑器样式;其他组件会安全回退到标准样式入口。如需兼容旧项目的主入口导入,可显式设置 `importOnDemand: false`。
95
95
 
96
+ 每个 `C_*/style.css` 都是可独立消费的完整组件样式入口:如果组件内部组合了 `C_Icon`、`C_Captcha` 等其他公共组件,对应依赖样式会自动包含,无需使用侧重复导入,也不会依赖全量 `style.css` 兜底。
97
+
98
+ `C_Menu` 会在鼠标进入或键盘聚焦叶子菜单时触发 `intent` 事件;宿主可将其绑定到路由预取函数,点击与 `select` 行为保持不变。
99
+
96
100
  也可以手动选择样式层级:
97
101
 
98
102
  ```typescript
package/README_EN.md CHANGED
@@ -93,6 +93,10 @@ Components({
93
93
 
94
94
  `importStyle: true` (an alias of `'full'`) preserves the existing complete style behavior. When C_Form/C_Table only use base fields and no built-in rich-text editor, set `importStyle: 'base'` to avoid editor CSS; other components safely fall back to their standard style entry. Set `importOnDemand: false` only when a legacy project still requires the package root.
95
95
 
96
+ Every `C_*/style.css` file is a self-contained component style entry. When a component composes public components such as `C_Icon` or `C_Captcha`, their required styles are included automatically, so consumers do not need duplicate imports or the global `style.css` fallback.
97
+
98
+ `C_Menu` emits a non-mutating `intent` event when a leaf item is hovered or keyboard-focused. Hosts may connect it to route prefetching without changing the existing `select` behavior.
99
+
96
100
  The style tiers can also be imported explicitly:
97
101
 
98
102
  ```typescript
@@ -1,3 +1,62 @@
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-d0d8dba0] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ user-select: none;
6
+ transition: all 0.2s ease-in-out;
7
+ }
8
+ .c-icon--clickable[data-v-d0d8dba0] {
9
+ cursor: pointer;
10
+ }
11
+ .c-icon--clickable[data-v-d0d8dba0]:hover {
12
+ opacity: 0.8;
13
+ transform: scale(1.05);
14
+ }
15
+ .c-icon--clickable[data-v-d0d8dba0]:active {
16
+ transform: scale(0.95);
17
+ }
18
+ .c-icon--clickable[data-v-d0d8dba0]:focus-visible {
19
+ outline: 2px solid currentColor;
20
+ outline-offset: 2px;
21
+ border-radius: 4px;
22
+ }
23
+ .c-icon--loading[data-v-d0d8dba0] {
24
+ opacity: 0.6;
25
+ cursor: wait;
26
+ }
27
+ .c-icon--error[data-v-d0d8dba0] {
28
+ opacity: 0.5;
29
+ }
30
+ .c-icon__loading[data-v-d0d8dba0] {
31
+ position: relative;
32
+ }
33
+ .c-icon__spinner[data-v-d0d8dba0] {
34
+ width: 100%;
35
+ height: 100%;
36
+ border: 2px solid currentColor;
37
+ border-radius: 50%;
38
+ border-top-color: transparent;
39
+ animation: spin-d0d8dba0 1s linear infinite;
40
+ }
41
+ .c-icon__error[data-v-d0d8dba0] {
42
+ font-size: 0.8em;
43
+ opacity: 0.5;
44
+ }
45
+ .c-icon__rotatable[data-v-d0d8dba0] {
46
+ transition: transform 0.3s ease-in-out;
47
+ }
48
+ .c-icon__flippable[data-v-d0d8dba0] {
49
+ transition: transform 0.3s ease-in-out;
50
+ }
51
+ @keyframes spin-d0d8dba0 {
52
+ 0% {
53
+ transform: rotate(0deg);
54
+ }
55
+ 100% {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
1
60
  /* unplugin-vue-components disabled *//* 通用操作按钮组件样式 */
2
61
  /* ================= 主容器 ================= */
3
62
  .c-action-bar[data-v-9dc5812b] {
@@ -1,3 +1,62 @@
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-d0d8dba0] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ user-select: none;
6
+ transition: all 0.2s ease-in-out;
7
+ }
8
+ .c-icon--clickable[data-v-d0d8dba0] {
9
+ cursor: pointer;
10
+ }
11
+ .c-icon--clickable[data-v-d0d8dba0]:hover {
12
+ opacity: 0.8;
13
+ transform: scale(1.05);
14
+ }
15
+ .c-icon--clickable[data-v-d0d8dba0]:active {
16
+ transform: scale(0.95);
17
+ }
18
+ .c-icon--clickable[data-v-d0d8dba0]:focus-visible {
19
+ outline: 2px solid currentColor;
20
+ outline-offset: 2px;
21
+ border-radius: 4px;
22
+ }
23
+ .c-icon--loading[data-v-d0d8dba0] {
24
+ opacity: 0.6;
25
+ cursor: wait;
26
+ }
27
+ .c-icon--error[data-v-d0d8dba0] {
28
+ opacity: 0.5;
29
+ }
30
+ .c-icon__loading[data-v-d0d8dba0] {
31
+ position: relative;
32
+ }
33
+ .c-icon__spinner[data-v-d0d8dba0] {
34
+ width: 100%;
35
+ height: 100%;
36
+ border: 2px solid currentColor;
37
+ border-radius: 50%;
38
+ border-top-color: transparent;
39
+ animation: spin-d0d8dba0 1s linear infinite;
40
+ }
41
+ .c-icon__error[data-v-d0d8dba0] {
42
+ font-size: 0.8em;
43
+ opacity: 0.5;
44
+ }
45
+ .c-icon__rotatable[data-v-d0d8dba0] {
46
+ transition: transform 0.3s ease-in-out;
47
+ }
48
+ .c-icon__flippable[data-v-d0d8dba0] {
49
+ transition: transform 0.3s ease-in-out;
50
+ }
51
+ @keyframes spin-d0d8dba0 {
52
+ 0% {
53
+ transform: rotate(0deg);
54
+ }
55
+ 100% {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
1
60
  /* unplugin-vue-components disabled *//**
2
61
  * C_AudioPlayer — 音频播放器样式
3
62
  */
@@ -1,3 +1,62 @@
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-d0d8dba0] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ user-select: none;
6
+ transition: all 0.2s ease-in-out;
7
+ }
8
+ .c-icon--clickable[data-v-d0d8dba0] {
9
+ cursor: pointer;
10
+ }
11
+ .c-icon--clickable[data-v-d0d8dba0]:hover {
12
+ opacity: 0.8;
13
+ transform: scale(1.05);
14
+ }
15
+ .c-icon--clickable[data-v-d0d8dba0]:active {
16
+ transform: scale(0.95);
17
+ }
18
+ .c-icon--clickable[data-v-d0d8dba0]:focus-visible {
19
+ outline: 2px solid currentColor;
20
+ outline-offset: 2px;
21
+ border-radius: 4px;
22
+ }
23
+ .c-icon--loading[data-v-d0d8dba0] {
24
+ opacity: 0.6;
25
+ cursor: wait;
26
+ }
27
+ .c-icon--error[data-v-d0d8dba0] {
28
+ opacity: 0.5;
29
+ }
30
+ .c-icon__loading[data-v-d0d8dba0] {
31
+ position: relative;
32
+ }
33
+ .c-icon__spinner[data-v-d0d8dba0] {
34
+ width: 100%;
35
+ height: 100%;
36
+ border: 2px solid currentColor;
37
+ border-radius: 50%;
38
+ border-top-color: transparent;
39
+ animation: spin-d0d8dba0 1s linear infinite;
40
+ }
41
+ .c-icon__error[data-v-d0d8dba0] {
42
+ font-size: 0.8em;
43
+ opacity: 0.5;
44
+ }
45
+ .c-icon__rotatable[data-v-d0d8dba0] {
46
+ transition: transform 0.3s ease-in-out;
47
+ }
48
+ .c-icon__flippable[data-v-d0d8dba0] {
49
+ transition: transform 0.3s ease-in-out;
50
+ }
51
+ @keyframes spin-d0d8dba0 {
52
+ 0% {
53
+ transform: rotate(0deg);
54
+ }
55
+ 100% {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
1
60
  /* unplugin-vue-components disabled */.c-breadcrumb {
2
61
  --c-breadcrumb-icon-size: 16px;
3
62
  --c-breadcrumb-gap: 4px;
@@ -1,16 +1,16 @@
1
1
  .vue-puzzle-vcode{position:fixed;top:0;left:0;bottom:0;right:0;background-color:#0000004d;z-index:999;opacity:0;pointer-events:none;transition:opacity .2s}.vue-puzzle-vcode.inside_{position:relative;background-color:transparent;width:100%;height:100%}.vue-puzzle-vcode.inside_ .vue-auth-box_{position:relative;top:0;left:0;transform:translate(0);padding:0;background:transparent;box-shadow:none}.vue-puzzle-vcode.show_{opacity:1;pointer-events:auto}.vue-auth-box_{position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);padding:20px;background:#fff;user-select:none;border-radius:3px;box-shadow:0 1px 3px #0000004d}.vue-auth-box_ .auth-body_{position:relative;overflow:hidden;border-radius:3px}.vue-auth-box_ .auth-body_ .loading-box_{position:absolute;top:0;left:0;bottom:0;right:0;background-color:#000c;z-index:20;opacity:1;transition:opacity .1s;display:flex;align-items:center;justify-content:center}.vue-auth-box_ .auth-body_ .loading-box_.hide_{opacity:0;pointer-events:none}.vue-auth-box_ .auth-body_ .loading-box_.hide_ .loading-gif_ span{animation-play-state:paused}.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_{flex:none;height:5px;line-height:0}@keyframes load{0%{opacity:1;transform:scale(1.3)}to{opacity:.2;transform:scale(.3)}}.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span{display:inline-block;width:5px;height:100%;margin-left:2px;border-radius:50%;background-color:#888;animation:load 1.04s ease infinite}.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(1){margin-left:0}.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(2){animation-delay:.13s}.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(3){animation-delay:.26s}.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(4){animation-delay:.39s}.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(5){animation-delay:.52s}.vue-auth-box_ .auth-body_ .info-box_{position:absolute;bottom:0;left:0;width:100%;height:24px;line-height:24px;text-align:center;overflow:hidden;font-size:13px;background-color:#83ce3f;opacity:0;transform:translateY(24px);transition:all .2s;color:#fff;z-index:10}.vue-auth-box_ .auth-body_ .info-box_.show{opacity:.95;transform:translateY(0)}.vue-auth-box_ .auth-body_ .info-box_.fail{background-color:#ce594b}.vue-auth-box_ .auth-body_ .auth-canvas1_{width:100%;height:100%}.vue-auth-box_ .auth-body_ .auth-canvas2_{position:absolute;top:0;left:0;width:60px;height:100%;z-index:2}.vue-auth-box_ .auth-body_ .auth-canvas3_{position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;transition:opacity .6s;z-index:3}.vue-auth-box_ .auth-body_ .auth-canvas3_.show{opacity:1}.vue-auth-box_ .auth-body_ .flash_{position:absolute;top:0;left:0;width:30px;height:100%;background-color:#ffffff1a;z-index:3}.vue-auth-box_ .auth-body_ .flash_.show{transition:transform .6s}.vue-auth-box_ .auth-body_ .reset_{position:absolute;top:2px;right:2px;width:35px;height:auto;z-index:12;cursor:pointer;transition:transform .2s;transform:rotate(0)}.vue-auth-box_ .auth-body_ .reset_:hover{transform:rotate(-90deg)}.vue-auth-box_ .auth-control_ .range-box{position:relative;width:100%;background-color:#eef1f8;margin-top:20px;border-radius:3px;box-shadow:0 0 8px #f0f0f099 inset}.vue-auth-box_ .auth-control_ .range-box .range-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:14px;color:#b7bcd1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;width:100%}.vue-auth-box_ .auth-control_ .range-box .range-slider{position:absolute;height:100%;width:50px;background-color:#6aa0ffcc;border-radius:3px}.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn{position:absolute;display:flex;align-items:center;justify-content:center;right:0;width:50px;height:100%;background-color:#fff;border-radius:3px;box-shadow:0 0 4px #ccc;cursor:pointer}.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn>div{width:0;height:40%;transition:all .2s;border:solid 1px #6aa0ff}.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn>div:nth-child(2){margin:0 4px}.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn:hover>div:first-child,.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn.isDown>div:first-child{border:solid 4px transparent;height:0;border-right-color:#6aa0ff}.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn:hover>div:nth-child(2),.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn.isDown>div:nth-child(2){border-width:3px;height:0;border-radius:3px;margin:0 6px;border-right-color:#6aa0ff}.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn:hover>div:nth-child(3),.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn.isDown>div:nth-child(3){border:solid 4px transparent;height:0;border-left-color:#6aa0ff}.vue-puzzle-overflow{overflow:hidden!important}
2
2
 
3
- /* unplugin-vue-components disabled */.c-captcha-modern[data-v-3b02fca0] {
3
+ /* unplugin-vue-components disabled */.c-captcha-modern[data-v-29edd4c3] {
4
4
  width: 100%;
5
5
  font-family: inherit;
6
6
  }
7
- .captcha-shell[data-v-3b02fca0] {
7
+ .captcha-shell[data-v-29edd4c3] {
8
8
  position: relative;
9
9
  width: 100%;
10
10
  max-width: 280px;
11
11
  margin: 0 auto;
12
12
  }
13
- .captcha-trigger[data-v-3b02fca0] {
13
+ .captcha-trigger[data-v-29edd4c3] {
14
14
  appearance: none;
15
15
  border: 0;
16
16
  background: transparent;
@@ -26,26 +26,26 @@
26
26
  position: relative;
27
27
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
28
28
  }
29
- .captcha-trigger[data-v-3b02fca0]:hover:not(.disabled) {
29
+ .captcha-trigger[data-v-29edd4c3]:hover:not(.disabled) {
30
30
  transform: translateY(-1px);
31
31
  }
32
- .captcha-trigger.disabled[data-v-3b02fca0] {
32
+ .captcha-trigger.disabled[data-v-29edd4c3] {
33
33
  opacity: 0.5;
34
34
  cursor: not-allowed;
35
35
  }
36
- .captcha-trigger[data-v-3b02fca0]:focus-visible,
37
- .refresh-button[data-v-3b02fca0]:focus-visible {
36
+ .captcha-trigger[data-v-29edd4c3]:focus-visible,
37
+ .refresh-button[data-v-29edd4c3]:focus-visible {
38
38
  outline: 2px solid var(--n-color-target, #18a058);
39
39
  outline-offset: 2px;
40
40
  }
41
- .captcha-content[data-v-3b02fca0] {
41
+ .captcha-content[data-v-29edd4c3] {
42
42
  display: flex;
43
43
  align-items: center;
44
44
  justify-content: center;
45
45
  gap: 8px;
46
46
  flex: 1;
47
47
  }
48
- .captcha-icon[data-v-3b02fca0] {
48
+ .captcha-icon[data-v-29edd4c3] {
49
49
  font-size: 18px;
50
50
  width: 20px;
51
51
  height: 20px;
@@ -54,7 +54,7 @@
54
54
  justify-content: center;
55
55
  flex-shrink: 0;
56
56
  }
57
- .captcha-text[data-v-3b02fca0] {
57
+ .captcha-text[data-v-29edd4c3] {
58
58
  color: rgba(255, 255, 255, 0.8);
59
59
  font-size: 14px;
60
60
  font-weight: 500;
@@ -62,7 +62,7 @@
62
62
  text-align: center;
63
63
  white-space: nowrap;
64
64
  }
65
- .refresh-button[data-v-3b02fca0] {
65
+ .refresh-button[data-v-29edd4c3] {
66
66
  appearance: none;
67
67
  border: 0;
68
68
  background: transparent;
@@ -81,25 +81,25 @@
81
81
  font-size: 14px;
82
82
  flex-shrink: 0;
83
83
  }
84
- .c-captcha-modern[data-theme=light] .captcha-text[data-v-3b02fca0] {
84
+ .c-captcha-modern[data-theme=light] .captcha-text[data-v-29edd4c3] {
85
85
  color: rgba(0, 0, 0, 0.72);
86
86
  }
87
- .c-captcha-modern[data-theme=light] .refresh-button[data-v-3b02fca0] {
87
+ .c-captcha-modern[data-theme=light] .refresh-button[data-v-29edd4c3] {
88
88
  color: rgba(0, 0, 0, 0.52);
89
89
  }
90
- .refresh-button[data-v-3b02fca0]:hover {
90
+ .refresh-button[data-v-29edd4c3]:hover {
91
91
  color: rgba(255, 255, 255, 0.9);
92
92
  transform: translateY(-50%) rotate(180deg);
93
93
  }
94
- .success-icon[data-v-3b02fca0],
95
- .success-text[data-v-3b02fca0] {
94
+ .success-icon[data-v-29edd4c3],
95
+ .success-text[data-v-29edd4c3] {
96
96
  color: #43c23a;
97
97
  }
98
- .error-icon[data-v-3b02fca0],
99
- .error-text[data-v-3b02fca0] {
98
+ .error-icon[data-v-29edd4c3],
99
+ .error-text[data-v-29edd4c3] {
100
100
  color: #f56c6c;
101
101
  }
102
- @keyframes shake-3b02fca0 {
102
+ @keyframes shake-29edd4c3 {
103
103
  0%, 100% {
104
104
  transform: translateX(0);
105
105
  }
@@ -111,21 +111,21 @@
111
111
  }
112
112
  }
113
113
  @media (max-width: 768px) {
114
- .captcha-trigger[data-v-3b02fca0] {
114
+ .captcha-trigger[data-v-29edd4c3] {
115
115
  padding: 10px 14px;
116
116
  }
117
- .captcha-shell[data-v-3b02fca0] {
117
+ .captcha-shell[data-v-29edd4c3] {
118
118
  max-width: 240px;
119
119
  }
120
- .captcha-icon[data-v-3b02fca0] {
120
+ .captcha-icon[data-v-29edd4c3] {
121
121
  font-size: 16px;
122
122
  width: 18px;
123
123
  height: 18px;
124
124
  }
125
- .captcha-text[data-v-3b02fca0] {
125
+ .captcha-text[data-v-29edd4c3] {
126
126
  font-size: 13px;
127
127
  }
128
- .refresh-button[data-v-3b02fca0] {
128
+ .refresh-button[data-v-29edd4c3] {
129
129
  width: 24px;
130
130
  height: 24px;
131
131
  font-size: 12px;
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./config.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`);var r=class extends Error{constructor(e,t,n){super(t),this.code=e,this.cause=n,this.name=`CaptchaVerificationError`}};let i=0;function a(){let e=Date.now();return{token:`puzzle_${e}_${globalThis.crypto?.randomUUID?.()??`${++i}`}`,timestamp:e,type:`puzzle-captcha`}}async function o(e,t={}){let{verifier:n,requireServerVerification:i=!1,signal:a}=t,o=t.timeout??1e4,s=Number.isFinite(o)&&o>0?o:1e4;if(a?.aborted)throw new r(`aborted`,`Verification was cancelled.`);if(!n){if(i)throw new r(`missing-verifier`,`Server verification is required but no verifier was configured.`);return{...e,verifiedBy:`local`}}let c=new AbortController,l=()=>c.abort(a?.reason);a?.addEventListener(`abort`,l,{once:!0});let u,d=new Promise((e,t)=>{u=setTimeout(()=>{c.abort(`timeout`),t(new r(`timeout`,`Verification timed out after ${s}ms.`))},s)}),f=new Promise((e,t)=>{c.signal.addEventListener(`abort`,()=>{c.signal.reason!==`timeout`&&t(new r(`aborted`,`Verification was cancelled.`))},{once:!0})});try{let t=await Promise.race([Promise.resolve(n({...e,signal:c.signal})),d,f]),a=typeof t==`boolean`?{valid:t}:t;if(!a.valid)throw new r(`rejected`,a.message||`Server verification rejected the challenge.`);let o=a.token?.trim();if(i&&!o)throw new r(`missing-token`,`Server verification did not return a trusted token.`);return{...e,token:o||e.token,verifiedBy:`server`}}catch(e){throw e instanceof r?e:new r(`rejected`,`Server verification failed.`,e)}finally{u&&clearTimeout(u),a?.removeEventListener(`abort`,l)}}const s=[`data-theme`],c={class:`captcha-shell`},l=[`disabled`,`aria-busy`,`aria-label`],u={class:`captcha-content`},d={class:`captcha-icon`,"aria-hidden":`true`},f={key:0},p={key:1,class:`success-icon`},m={key:2,class:`error-icon`},h={key:3},g={class:`captcha-text`,"aria-live":`polite`},_={key:0},v={key:1,class:`success-text`},y={key:2,class:`error-text`},b={key:3},x=[`title`,`aria-label`],S=(0,n.defineComponent)({name:`C_Captcha`,__name:`index`,props:{triggerText:{},images:{default:()=>[]},disabled:{type:Boolean,default:!1},theme:{default:`dark`},verifier:{},verificationTimeout:{default:1e4},requireServerVerification:{type:Boolean,default:!1},feedback:{},locale:{}},emits:[`success`,`fail`,`verify-error`,`load-error`,`change`,`reset`],setup(t,{expose:i,emit:S}){let C=t,w=S,T=e.r(()=>C.feedback),{t:E}=e.i(()=>C.locale),D=typeof window>`u`?()=>null:(0,n.defineAsyncComponent)({loader:()=>import(`vue3-puzzle-vcode`).then(e=>e.default),onError(e,t,n){T.error(E(`captcha.loadFailed`),e),w(`load-error`,e),n()}}),O=(0,n.ref)(!1),k=(0,n.ref)(!1),A=(0,n.ref)(!1),j=(0,n.ref)(!1),M=(0,n.ref)(null),N=null,P=null,F=(0,n.computed)(()=>C.images.length>0?C.images:void 0),I=(0,n.computed)(()=>j.value?E(`captcha.verifying`):k.value?E(`captcha.success`):A.value?E(`captcha.failed`):C.triggerText||E(`captcha.trigger`)),L=()=>{N&&=(clearTimeout(N),null)},R=(e,t)=>{k.value=!1,A.value=!0,M.value=null,L(),N=setTimeout(()=>{A.value=!1,N=null},3e3),w(`fail`,e),w(`change`,!1),t&&w(`verify-error`,t)},z=()=>{C.disabled||j.value||k.value||(A.value=!1,O.value=!0)},B=async()=>{O.value=!1,A.value=!1,P?.abort();let e=new AbortController;P=e,j.value=!0;try{let t=await o(a(),{verifier:C.verifier,timeout:C.verificationTimeout,requireServerVerification:C.requireServerVerification,signal:e.signal});if(P!==e)return;M.value=t,k.value=!0,w(`success`,t),w(`change`,!0)}catch(t){if(P!==e||t instanceof r&&t.code===`aborted`)return;let n=t instanceof Error?t.message:E(`captcha.failed`);T.error(E(`captcha.verifyFailed`),t),R(n,t)}finally{P===e&&(P=null,j.value=!1)}},V=()=>{O.value=!1,R(E(`captcha.puzzleFailed`))},H=()=>{O.value=!1},U=()=>{P?.abort(),P=null,j.value=!1,k.value=!1,A.value=!1,O.value=!1,M.value=null,L(),w(`reset`),w(`change`,!1)};return i({validate:()=>k.value,getToken:()=>M.value?.token??``,getVerificationData:()=>M.value,reset:U,show:z}),(0,n.onBeforeUnmount)(()=>{P?.abort(),L()}),(e,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:`c-captcha-modern`,"data-theme":t.theme},[(0,n.createElementVNode)(`div`,c,[(0,n.createElementVNode)(`button`,{type:`button`,class:(0,n.normalizeClass)([`captcha-trigger`,{verified:k.value,error:A.value,disabled:t.disabled||j.value}]),disabled:t.disabled||j.value||k.value,"aria-busy":j.value,"aria-label":I.value,onClick:z},[(0,n.createElementVNode)(`span`,u,[(0,n.createElementVNode)(`span`,d,[j.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,f,`…`)):k.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,p,`✓`)):A.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,m,`!`)):((0,n.openBlock)(),(0,n.createElementBlock)(`span`,h,`↔`))]),(0,n.createElementVNode)(`span`,g,[j.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,_,(0,n.toDisplayString)((0,n.unref)(E)(`captcha.verifying`)),1)):k.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,v,(0,n.toDisplayString)((0,n.unref)(E)(`captcha.success`)),1)):A.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,y,(0,n.toDisplayString)((0,n.unref)(E)(`captcha.failed`)),1)):((0,n.openBlock)(),(0,n.createElementBlock)(`span`,b,(0,n.toDisplayString)(t.triggerText||(0,n.unref)(E)(`captcha.trigger`)),1))])])],10,l),k.value||A.value?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,type:`button`,class:`refresh-button`,title:(0,n.unref)(E)(`captcha.reset`),"aria-label":(0,n.unref)(E)(`captcha.reset`),onClick:U},` ↻ `,8,x)):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createVNode)((0,n.unref)(D),{show:O.value,imgs:F.value,onSuccess:B,onClose:H,onFail:V},null,8,[`show`,`imgs`])],8,s))}});var C=t.t(S,[[`__scopeId`,`data-v-3b02fca0`]]);Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return C}});
1
+ require(`./chunk.cjs`);const e=require(`./config.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`);var r=class extends Error{constructor(e,t,n){super(t),this.code=e,this.cause=n,this.name=`CaptchaVerificationError`}};let i=0;function a(){let e=Date.now();return{token:`puzzle_${e}_${globalThis.crypto?.randomUUID?.()??`${++i}`}`,timestamp:e,type:`puzzle-captcha`}}async function o(e,t={}){let{verifier:n,requireServerVerification:i=!1,signal:a}=t,o=t.timeout??1e4,s=Number.isFinite(o)&&o>0?o:1e4;if(a?.aborted)throw new r(`aborted`,`Verification was cancelled.`);if(!n){if(i)throw new r(`missing-verifier`,`Server verification is required but no verifier was configured.`);return{...e,verifiedBy:`local`}}let c=new AbortController,l=()=>c.abort(a?.reason);a?.addEventListener(`abort`,l,{once:!0});let u,d=new Promise((e,t)=>{u=setTimeout(()=>{c.abort(`timeout`),t(new r(`timeout`,`Verification timed out after ${s}ms.`))},s)}),f=new Promise((e,t)=>{c.signal.addEventListener(`abort`,()=>{c.signal.reason!==`timeout`&&t(new r(`aborted`,`Verification was cancelled.`))},{once:!0})});try{let t=await Promise.race([Promise.resolve(n({...e,signal:c.signal})),d,f]),a=typeof t==`boolean`?{valid:t}:t;if(!a.valid)throw new r(`rejected`,a.message||`Server verification rejected the challenge.`);let o=a.token?.trim();if(i&&!o)throw new r(`missing-token`,`Server verification did not return a trusted token.`);return{...e,token:o||e.token,verifiedBy:`server`}}catch(e){throw e instanceof r?e:new r(`rejected`,`Server verification failed.`,e)}finally{u&&clearTimeout(u),a?.removeEventListener(`abort`,l)}}const s=[`data-theme`],c={class:`captcha-shell`},l=[`disabled`,`aria-busy`,`aria-label`],u={class:`captcha-content`},d={class:`captcha-icon`,"aria-hidden":`true`},f={key:0},p={key:1,class:`success-icon`},m={key:2,class:`error-icon`},h={key:3},g={class:`captcha-text`,"aria-live":`polite`},_={key:0},v={key:1,class:`success-text`},y={key:2,class:`error-text`},b={key:3},x=[`title`,`aria-label`],S=(0,n.defineComponent)({name:`C_Captcha`,__name:`index`,props:{triggerText:{},images:{default:()=>[]},disabled:{type:Boolean,default:!1},theme:{default:`dark`},verifier:{},verificationTimeout:{default:1e4},requireServerVerification:{type:Boolean,default:!1},feedback:{},locale:{}},emits:[`success`,`fail`,`verify-error`,`load-error`,`change`,`reset`],setup(t,{expose:i,emit:S}){let C=t,w=S,T=e.r(()=>C.feedback),{t:E}=e.i(()=>C.locale),D=typeof window>`u`?()=>null:(0,n.defineAsyncComponent)({loader:()=>import(`vue3-puzzle-vcode`).then(e=>e.default),onError(e,t,n){T.error(E(`captcha.loadFailed`),e),w(`load-error`,e),n()}}),O=(0,n.ref)(!1),k=(0,n.ref)(!1),A=(0,n.ref)(!1),j=(0,n.ref)(!1),M=(0,n.ref)(null),N=null,P=null,F=(0,n.computed)(()=>C.images.length>0?C.images:void 0),I=(0,n.computed)(()=>j.value?E(`captcha.verifying`):k.value?E(`captcha.success`):A.value?E(`captcha.failed`):C.triggerText??E(`captcha.trigger`)),L=()=>{N&&=(clearTimeout(N),null)},R=(e,t)=>{k.value=!1,A.value=!0,M.value=null,L(),N=setTimeout(()=>{A.value=!1,N=null},3e3),w(`fail`,e),w(`change`,!1),t&&w(`verify-error`,t)},z=()=>{C.disabled||j.value||k.value||(A.value=!1,O.value=!0)},B=async()=>{O.value=!1,A.value=!1,P?.abort();let e=new AbortController;P=e,j.value=!0;try{let t=await o(a(),{verifier:C.verifier,timeout:C.verificationTimeout,requireServerVerification:C.requireServerVerification,signal:e.signal});if(P!==e)return;M.value=t,k.value=!0,w(`success`,t),w(`change`,!0)}catch(t){if(P!==e||t instanceof r&&t.code===`aborted`)return;let n=t instanceof Error?t.message:E(`captcha.failed`);T.error(E(`captcha.verifyFailed`),t),R(n,t)}finally{P===e&&(P=null,j.value=!1)}},V=()=>{O.value=!1,R(E(`captcha.puzzleFailed`))},H=()=>{O.value=!1},U=()=>{P?.abort(),P=null,j.value=!1,k.value=!1,A.value=!1,O.value=!1,M.value=null,L(),w(`reset`),w(`change`,!1)};return i({validate:()=>k.value,getToken:()=>M.value?.token??``,getVerificationData:()=>M.value,reset:U,show:z}),(0,n.onBeforeUnmount)(()=>{P?.abort(),L()}),(e,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:`c-captcha-modern`,"data-theme":t.theme},[(0,n.createElementVNode)(`div`,c,[(0,n.createElementVNode)(`button`,{type:`button`,class:(0,n.normalizeClass)([`captcha-trigger`,{verified:k.value,error:A.value,disabled:t.disabled||j.value}]),disabled:t.disabled||j.value||k.value,"aria-busy":j.value,"aria-label":I.value,onClick:z},[(0,n.createElementVNode)(`span`,u,[(0,n.createElementVNode)(`span`,d,[j.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,f,`…`)):k.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,p,`✓`)):A.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,m,`⚠️`)):((0,n.openBlock)(),(0,n.createElementBlock)(`span`,h,`🧩`))]),(0,n.createElementVNode)(`span`,g,[j.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,_,(0,n.toDisplayString)((0,n.unref)(E)(`captcha.verifying`)),1)):k.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,v,(0,n.toDisplayString)((0,n.unref)(E)(`captcha.success`)),1)):A.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,y,(0,n.toDisplayString)((0,n.unref)(E)(`captcha.failed`)),1)):((0,n.openBlock)(),(0,n.createElementBlock)(`span`,b,(0,n.toDisplayString)(t.triggerText??(0,n.unref)(E)(`captcha.trigger`)),1))])])],10,l),k.value||A.value?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,type:`button`,class:`refresh-button`,title:(0,n.unref)(E)(`captcha.reset`),"aria-label":(0,n.unref)(E)(`captcha.reset`),onClick:U},` ↻ `,8,x)):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createVNode)((0,n.unref)(D),{show:O.value,imgs:F.value,onSuccess:B,onClose:H,onFail:V},null,8,[`show`,`imgs`])],8,s))}});var C=t.t(S,[[`__scopeId`,`data-v-29edd4c3`]]);Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return C}});
@@ -1 +1 @@
1
- import{i as e,r as t}from"./config.js";import{t as n}from"./export-helper.js";import{computed as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createVNode as s,defineAsyncComponent as c,defineComponent as l,normalizeClass as u,onBeforeUnmount as d,openBlock as f,ref as p,toDisplayString as m,unref as h}from"vue";var g=class extends Error{constructor(e,t,n){super(t),this.code=e,this.cause=n,this.name=`CaptchaVerificationError`}};let _=0;function v(){let e=Date.now();return{token:`puzzle_${e}_${globalThis.crypto?.randomUUID?.()??`${++_}`}`,timestamp:e,type:`puzzle-captcha`}}async function y(e,t={}){let{verifier:n,requireServerVerification:r=!1,signal:i}=t,a=t.timeout??1e4,o=Number.isFinite(a)&&a>0?a:1e4;if(i?.aborted)throw new g(`aborted`,`Verification was cancelled.`);if(!n){if(r)throw new g(`missing-verifier`,`Server verification is required but no verifier was configured.`);return{...e,verifiedBy:`local`}}let s=new AbortController,c=()=>s.abort(i?.reason);i?.addEventListener(`abort`,c,{once:!0});let l,u=new Promise((e,t)=>{l=setTimeout(()=>{s.abort(`timeout`),t(new g(`timeout`,`Verification timed out after ${o}ms.`))},o)}),d=new Promise((e,t)=>{s.signal.addEventListener(`abort`,()=>{s.signal.reason!==`timeout`&&t(new g(`aborted`,`Verification was cancelled.`))},{once:!0})});try{let t=await Promise.race([Promise.resolve(n({...e,signal:s.signal})),u,d]),i=typeof t==`boolean`?{valid:t}:t;if(!i.valid)throw new g(`rejected`,i.message||`Server verification rejected the challenge.`);let a=i.token?.trim();if(r&&!a)throw new g(`missing-token`,`Server verification did not return a trusted token.`);return{...e,token:a||e.token,verifiedBy:`server`}}catch(e){throw e instanceof g?e:new g(`rejected`,`Server verification failed.`,e)}finally{l&&clearTimeout(l),i?.removeEventListener(`abort`,c)}}const b=[`data-theme`],x={class:`captcha-shell`},S=[`disabled`,`aria-busy`,`aria-label`],C={class:`captcha-content`},w={class:`captcha-icon`,"aria-hidden":`true`},T={key:0},E={key:1,class:`success-icon`},D={key:2,class:`error-icon`},O={key:3},k={class:`captcha-text`,"aria-live":`polite`},A={key:0},j={key:1,class:`success-text`},M={key:2,class:`error-text`},N={key:3},P=[`title`,`aria-label`];var F=n(l({name:`C_Captcha`,__name:`index`,props:{triggerText:{},images:{default:()=>[]},disabled:{type:Boolean,default:!1},theme:{default:`dark`},verifier:{},verificationTimeout:{default:1e4},requireServerVerification:{type:Boolean,default:!1},feedback:{},locale:{}},emits:[`success`,`fail`,`verify-error`,`load-error`,`change`,`reset`],setup(n,{expose:l,emit:_}){let F=n,I=_,L=t(()=>F.feedback),{t:R}=e(()=>F.locale),z=typeof window>`u`?()=>null:c({loader:()=>import(`vue3-puzzle-vcode`).then(e=>e.default),onError(e,t,n){L.error(R(`captcha.loadFailed`),e),I(`load-error`,e),n()}}),B=p(!1),V=p(!1),H=p(!1),U=p(!1),W=p(null),G=null,K=null,q=r(()=>F.images.length>0?F.images:void 0),J=r(()=>U.value?R(`captcha.verifying`):V.value?R(`captcha.success`):H.value?R(`captcha.failed`):F.triggerText||R(`captcha.trigger`)),Y=()=>{G&&=(clearTimeout(G),null)},X=(e,t)=>{V.value=!1,H.value=!0,W.value=null,Y(),G=setTimeout(()=>{H.value=!1,G=null},3e3),I(`fail`,e),I(`change`,!1),t&&I(`verify-error`,t)},Z=()=>{F.disabled||U.value||V.value||(H.value=!1,B.value=!0)},Q=async()=>{B.value=!1,H.value=!1,K?.abort();let e=new AbortController;K=e,U.value=!0;try{let t=await y(v(),{verifier:F.verifier,timeout:F.verificationTimeout,requireServerVerification:F.requireServerVerification,signal:e.signal});if(K!==e)return;W.value=t,V.value=!0,I(`success`,t),I(`change`,!0)}catch(t){if(K!==e||t instanceof g&&t.code===`aborted`)return;let n=t instanceof Error?t.message:R(`captcha.failed`);L.error(R(`captcha.verifyFailed`),t),X(n,t)}finally{K===e&&(K=null,U.value=!1)}},ee=()=>{B.value=!1,X(R(`captcha.puzzleFailed`))},te=()=>{B.value=!1},$=()=>{K?.abort(),K=null,U.value=!1,V.value=!1,H.value=!1,B.value=!1,W.value=null,Y(),I(`reset`),I(`change`,!1)};return l({validate:()=>V.value,getToken:()=>W.value?.token??``,getVerificationData:()=>W.value,reset:$,show:Z}),d(()=>{K?.abort(),Y()}),(e,t)=>(f(),a(`div`,{class:`c-captcha-modern`,"data-theme":n.theme},[o(`div`,x,[o(`button`,{type:`button`,class:u([`captcha-trigger`,{verified:V.value,error:H.value,disabled:n.disabled||U.value}]),disabled:n.disabled||U.value||V.value,"aria-busy":U.value,"aria-label":J.value,onClick:Z},[o(`span`,C,[o(`span`,w,[U.value?(f(),a(`span`,T,`…`)):V.value?(f(),a(`span`,E,`✓`)):H.value?(f(),a(`span`,D,`!`)):(f(),a(`span`,O,`↔`))]),o(`span`,k,[U.value?(f(),a(`span`,A,m(h(R)(`captcha.verifying`)),1)):V.value?(f(),a(`span`,j,m(h(R)(`captcha.success`)),1)):H.value?(f(),a(`span`,M,m(h(R)(`captcha.failed`)),1)):(f(),a(`span`,N,m(n.triggerText||h(R)(`captcha.trigger`)),1))])])],10,S),V.value||H.value?(f(),a(`button`,{key:0,type:`button`,class:`refresh-button`,title:h(R)(`captcha.reset`),"aria-label":h(R)(`captcha.reset`),onClick:$},` ↻ `,8,P)):i(`v-if`,!0)]),s(h(z),{show:B.value,imgs:q.value,onSuccess:Q,onClose:te,onFail:ee},null,8,[`show`,`imgs`])],8,b))}}),[[`__scopeId`,`data-v-3b02fca0`]]);export{y as i,g as n,v as r,F as t};
1
+ import{i as e,r as t}from"./config.js";import{t as n}from"./export-helper.js";import{computed as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createVNode as s,defineAsyncComponent as c,defineComponent as l,normalizeClass as u,onBeforeUnmount as d,openBlock as f,ref as p,toDisplayString as m,unref as h}from"vue";var g=class extends Error{constructor(e,t,n){super(t),this.code=e,this.cause=n,this.name=`CaptchaVerificationError`}};let _=0;function v(){let e=Date.now();return{token:`puzzle_${e}_${globalThis.crypto?.randomUUID?.()??`${++_}`}`,timestamp:e,type:`puzzle-captcha`}}async function y(e,t={}){let{verifier:n,requireServerVerification:r=!1,signal:i}=t,a=t.timeout??1e4,o=Number.isFinite(a)&&a>0?a:1e4;if(i?.aborted)throw new g(`aborted`,`Verification was cancelled.`);if(!n){if(r)throw new g(`missing-verifier`,`Server verification is required but no verifier was configured.`);return{...e,verifiedBy:`local`}}let s=new AbortController,c=()=>s.abort(i?.reason);i?.addEventListener(`abort`,c,{once:!0});let l,u=new Promise((e,t)=>{l=setTimeout(()=>{s.abort(`timeout`),t(new g(`timeout`,`Verification timed out after ${o}ms.`))},o)}),d=new Promise((e,t)=>{s.signal.addEventListener(`abort`,()=>{s.signal.reason!==`timeout`&&t(new g(`aborted`,`Verification was cancelled.`))},{once:!0})});try{let t=await Promise.race([Promise.resolve(n({...e,signal:s.signal})),u,d]),i=typeof t==`boolean`?{valid:t}:t;if(!i.valid)throw new g(`rejected`,i.message||`Server verification rejected the challenge.`);let a=i.token?.trim();if(r&&!a)throw new g(`missing-token`,`Server verification did not return a trusted token.`);return{...e,token:a||e.token,verifiedBy:`server`}}catch(e){throw e instanceof g?e:new g(`rejected`,`Server verification failed.`,e)}finally{l&&clearTimeout(l),i?.removeEventListener(`abort`,c)}}const b=[`data-theme`],x={class:`captcha-shell`},S=[`disabled`,`aria-busy`,`aria-label`],C={class:`captcha-content`},w={class:`captcha-icon`,"aria-hidden":`true`},T={key:0},E={key:1,class:`success-icon`},D={key:2,class:`error-icon`},O={key:3},k={class:`captcha-text`,"aria-live":`polite`},A={key:0},j={key:1,class:`success-text`},M={key:2,class:`error-text`},N={key:3},P=[`title`,`aria-label`];var F=n(l({name:`C_Captcha`,__name:`index`,props:{triggerText:{},images:{default:()=>[]},disabled:{type:Boolean,default:!1},theme:{default:`dark`},verifier:{},verificationTimeout:{default:1e4},requireServerVerification:{type:Boolean,default:!1},feedback:{},locale:{}},emits:[`success`,`fail`,`verify-error`,`load-error`,`change`,`reset`],setup(n,{expose:l,emit:_}){let F=n,I=_,L=t(()=>F.feedback),{t:R}=e(()=>F.locale),z=typeof window>`u`?()=>null:c({loader:()=>import(`vue3-puzzle-vcode`).then(e=>e.default),onError(e,t,n){L.error(R(`captcha.loadFailed`),e),I(`load-error`,e),n()}}),B=p(!1),V=p(!1),H=p(!1),U=p(!1),W=p(null),G=null,K=null,q=r(()=>F.images.length>0?F.images:void 0),J=r(()=>U.value?R(`captcha.verifying`):V.value?R(`captcha.success`):H.value?R(`captcha.failed`):F.triggerText??R(`captcha.trigger`)),Y=()=>{G&&=(clearTimeout(G),null)},X=(e,t)=>{V.value=!1,H.value=!0,W.value=null,Y(),G=setTimeout(()=>{H.value=!1,G=null},3e3),I(`fail`,e),I(`change`,!1),t&&I(`verify-error`,t)},Z=()=>{F.disabled||U.value||V.value||(H.value=!1,B.value=!0)},Q=async()=>{B.value=!1,H.value=!1,K?.abort();let e=new AbortController;K=e,U.value=!0;try{let t=await y(v(),{verifier:F.verifier,timeout:F.verificationTimeout,requireServerVerification:F.requireServerVerification,signal:e.signal});if(K!==e)return;W.value=t,V.value=!0,I(`success`,t),I(`change`,!0)}catch(t){if(K!==e||t instanceof g&&t.code===`aborted`)return;let n=t instanceof Error?t.message:R(`captcha.failed`);L.error(R(`captcha.verifyFailed`),t),X(n,t)}finally{K===e&&(K=null,U.value=!1)}},ee=()=>{B.value=!1,X(R(`captcha.puzzleFailed`))},te=()=>{B.value=!1},$=()=>{K?.abort(),K=null,U.value=!1,V.value=!1,H.value=!1,B.value=!1,W.value=null,Y(),I(`reset`),I(`change`,!1)};return l({validate:()=>V.value,getToken:()=>W.value?.token??``,getVerificationData:()=>W.value,reset:$,show:Z}),d(()=>{K?.abort(),Y()}),(e,t)=>(f(),a(`div`,{class:`c-captcha-modern`,"data-theme":n.theme},[o(`div`,x,[o(`button`,{type:`button`,class:u([`captcha-trigger`,{verified:V.value,error:H.value,disabled:n.disabled||U.value}]),disabled:n.disabled||U.value||V.value,"aria-busy":U.value,"aria-label":J.value,onClick:Z},[o(`span`,C,[o(`span`,w,[U.value?(f(),a(`span`,T,`…`)):V.value?(f(),a(`span`,E,`✓`)):H.value?(f(),a(`span`,D,`⚠️`)):(f(),a(`span`,O,`🧩`))]),o(`span`,k,[U.value?(f(),a(`span`,A,m(h(R)(`captcha.verifying`)),1)):V.value?(f(),a(`span`,j,m(h(R)(`captcha.success`)),1)):H.value?(f(),a(`span`,M,m(h(R)(`captcha.failed`)),1)):(f(),a(`span`,N,m(n.triggerText??h(R)(`captcha.trigger`)),1))])])],10,S),V.value||H.value?(f(),a(`button`,{key:0,type:`button`,class:`refresh-button`,title:h(R)(`captcha.reset`),"aria-label":h(R)(`captcha.reset`),onClick:$},` ↻ `,8,P)):i(`v-if`,!0)]),s(h(z),{show:B.value,imgs:q.value,onSuccess:Q,onClose:te,onFail:ee},null,8,[`show`,`imgs`])],8,b))}}),[[`__scopeId`,`data-v-29edd4c3`]]);export{y as i,g as n,v as r,F as t};
package/dist/C_Chat.css CHANGED
@@ -1,3 +1,62 @@
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-d0d8dba0] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ user-select: none;
6
+ transition: all 0.2s ease-in-out;
7
+ }
8
+ .c-icon--clickable[data-v-d0d8dba0] {
9
+ cursor: pointer;
10
+ }
11
+ .c-icon--clickable[data-v-d0d8dba0]:hover {
12
+ opacity: 0.8;
13
+ transform: scale(1.05);
14
+ }
15
+ .c-icon--clickable[data-v-d0d8dba0]:active {
16
+ transform: scale(0.95);
17
+ }
18
+ .c-icon--clickable[data-v-d0d8dba0]:focus-visible {
19
+ outline: 2px solid currentColor;
20
+ outline-offset: 2px;
21
+ border-radius: 4px;
22
+ }
23
+ .c-icon--loading[data-v-d0d8dba0] {
24
+ opacity: 0.6;
25
+ cursor: wait;
26
+ }
27
+ .c-icon--error[data-v-d0d8dba0] {
28
+ opacity: 0.5;
29
+ }
30
+ .c-icon__loading[data-v-d0d8dba0] {
31
+ position: relative;
32
+ }
33
+ .c-icon__spinner[data-v-d0d8dba0] {
34
+ width: 100%;
35
+ height: 100%;
36
+ border: 2px solid currentColor;
37
+ border-radius: 50%;
38
+ border-top-color: transparent;
39
+ animation: spin-d0d8dba0 1s linear infinite;
40
+ }
41
+ .c-icon__error[data-v-d0d8dba0] {
42
+ font-size: 0.8em;
43
+ opacity: 0.5;
44
+ }
45
+ .c-icon__rotatable[data-v-d0d8dba0] {
46
+ transition: transform 0.3s ease-in-out;
47
+ }
48
+ .c-icon__flippable[data-v-d0d8dba0] {
49
+ transition: transform 0.3s ease-in-out;
50
+ }
51
+ @keyframes spin-d0d8dba0 {
52
+ 0% {
53
+ transform: rotate(0deg);
54
+ }
55
+ 100% {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
1
60
  /* unplugin-vue-components disabled *//* ─── CSS 变量(基于项目主题变量,自动适配明暗) ───────────────────────── */
2
61
  .c-chat[data-v-5b4bf8dc] {
3
62
  --chat-bg: var(--card-color);
package/dist/C_Code.css CHANGED
@@ -1,3 +1,62 @@
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-d0d8dba0] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ user-select: none;
6
+ transition: all 0.2s ease-in-out;
7
+ }
8
+ .c-icon--clickable[data-v-d0d8dba0] {
9
+ cursor: pointer;
10
+ }
11
+ .c-icon--clickable[data-v-d0d8dba0]:hover {
12
+ opacity: 0.8;
13
+ transform: scale(1.05);
14
+ }
15
+ .c-icon--clickable[data-v-d0d8dba0]:active {
16
+ transform: scale(0.95);
17
+ }
18
+ .c-icon--clickable[data-v-d0d8dba0]:focus-visible {
19
+ outline: 2px solid currentColor;
20
+ outline-offset: 2px;
21
+ border-radius: 4px;
22
+ }
23
+ .c-icon--loading[data-v-d0d8dba0] {
24
+ opacity: 0.6;
25
+ cursor: wait;
26
+ }
27
+ .c-icon--error[data-v-d0d8dba0] {
28
+ opacity: 0.5;
29
+ }
30
+ .c-icon__loading[data-v-d0d8dba0] {
31
+ position: relative;
32
+ }
33
+ .c-icon__spinner[data-v-d0d8dba0] {
34
+ width: 100%;
35
+ height: 100%;
36
+ border: 2px solid currentColor;
37
+ border-radius: 50%;
38
+ border-top-color: transparent;
39
+ animation: spin-d0d8dba0 1s linear infinite;
40
+ }
41
+ .c-icon__error[data-v-d0d8dba0] {
42
+ font-size: 0.8em;
43
+ opacity: 0.5;
44
+ }
45
+ .c-icon__rotatable[data-v-d0d8dba0] {
46
+ transition: transform 0.3s ease-in-out;
47
+ }
48
+ .c-icon__flippable[data-v-d0d8dba0] {
49
+ transition: transform 0.3s ease-in-out;
50
+ }
51
+ @keyframes spin-d0d8dba0 {
52
+ 0% {
53
+ transform: rotate(0deg);
54
+ }
55
+ 100% {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
1
60
  pre code.hljs {
2
61
  display: block;
3
62
  overflow-x: auto;
@@ -1,3 +1,62 @@
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-d0d8dba0] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ user-select: none;
6
+ transition: all 0.2s ease-in-out;
7
+ }
8
+ .c-icon--clickable[data-v-d0d8dba0] {
9
+ cursor: pointer;
10
+ }
11
+ .c-icon--clickable[data-v-d0d8dba0]:hover {
12
+ opacity: 0.8;
13
+ transform: scale(1.05);
14
+ }
15
+ .c-icon--clickable[data-v-d0d8dba0]:active {
16
+ transform: scale(0.95);
17
+ }
18
+ .c-icon--clickable[data-v-d0d8dba0]:focus-visible {
19
+ outline: 2px solid currentColor;
20
+ outline-offset: 2px;
21
+ border-radius: 4px;
22
+ }
23
+ .c-icon--loading[data-v-d0d8dba0] {
24
+ opacity: 0.6;
25
+ cursor: wait;
26
+ }
27
+ .c-icon--error[data-v-d0d8dba0] {
28
+ opacity: 0.5;
29
+ }
30
+ .c-icon__loading[data-v-d0d8dba0] {
31
+ position: relative;
32
+ }
33
+ .c-icon__spinner[data-v-d0d8dba0] {
34
+ width: 100%;
35
+ height: 100%;
36
+ border: 2px solid currentColor;
37
+ border-radius: 50%;
38
+ border-top-color: transparent;
39
+ animation: spin-d0d8dba0 1s linear infinite;
40
+ }
41
+ .c-icon__error[data-v-d0d8dba0] {
42
+ font-size: 0.8em;
43
+ opacity: 0.5;
44
+ }
45
+ .c-icon__rotatable[data-v-d0d8dba0] {
46
+ transition: transform 0.3s ease-in-out;
47
+ }
48
+ .c-icon__flippable[data-v-d0d8dba0] {
49
+ transition: transform 0.3s ease-in-out;
50
+ }
51
+ @keyframes spin-d0d8dba0 {
52
+ 0% {
53
+ transform: rotate(0deg);
54
+ }
55
+ 100% {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
1
60
  /* unplugin-vue-components disabled *//* ─── 变量 ───────────────────────────────────────── */
2
61
  /* ─── 容器 ───────────────────────────────────────── */
3
62
  .c-collapse-panel[data-v-3ad19a41] {
@@ -1,3 +1,62 @@
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-d0d8dba0] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ user-select: none;
6
+ transition: all 0.2s ease-in-out;
7
+ }
8
+ .c-icon--clickable[data-v-d0d8dba0] {
9
+ cursor: pointer;
10
+ }
11
+ .c-icon--clickable[data-v-d0d8dba0]:hover {
12
+ opacity: 0.8;
13
+ transform: scale(1.05);
14
+ }
15
+ .c-icon--clickable[data-v-d0d8dba0]:active {
16
+ transform: scale(0.95);
17
+ }
18
+ .c-icon--clickable[data-v-d0d8dba0]:focus-visible {
19
+ outline: 2px solid currentColor;
20
+ outline-offset: 2px;
21
+ border-radius: 4px;
22
+ }
23
+ .c-icon--loading[data-v-d0d8dba0] {
24
+ opacity: 0.6;
25
+ cursor: wait;
26
+ }
27
+ .c-icon--error[data-v-d0d8dba0] {
28
+ opacity: 0.5;
29
+ }
30
+ .c-icon__loading[data-v-d0d8dba0] {
31
+ position: relative;
32
+ }
33
+ .c-icon__spinner[data-v-d0d8dba0] {
34
+ width: 100%;
35
+ height: 100%;
36
+ border: 2px solid currentColor;
37
+ border-radius: 50%;
38
+ border-top-color: transparent;
39
+ animation: spin-d0d8dba0 1s linear infinite;
40
+ }
41
+ .c-icon__error[data-v-d0d8dba0] {
42
+ font-size: 0.8em;
43
+ opacity: 0.5;
44
+ }
45
+ .c-icon__rotatable[data-v-d0d8dba0] {
46
+ transition: transform 0.3s ease-in-out;
47
+ }
48
+ .c-icon__flippable[data-v-d0d8dba0] {
49
+ transition: transform 0.3s ease-in-out;
50
+ }
51
+ @keyframes spin-d0d8dba0 {
52
+ 0% {
53
+ transform: rotate(0deg);
54
+ }
55
+ 100% {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
1
60
  /* unplugin-vue-components disabled */.c-context-menu {
2
61
  --ctx-bg: var(--card-color);
3
62
  --ctx-bg-blur: 12px;