@sdata/web-vue 3.23.0 → 3.24.1

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 (130) hide show
  1. package/dist/sd.css +135 -3
  2. package/dist/sd.min.css +2 -2
  3. package/es/components.d.ts +14 -0
  4. package/es/index.css +135 -3
  5. package/es/index.d.ts +2 -0
  6. package/es/index.js +16 -1
  7. package/es/index.scss +1 -0
  8. package/es/model-selector/assets/logos/aihubmix.js +4 -0
  9. package/es/model-selector/assets/logos/alibaba-cn.js +4 -0
  10. package/es/model-selector/assets/logos/alibaba.js +4 -0
  11. package/es/model-selector/assets/logos/amazon-bedrock.js +4 -0
  12. package/es/model-selector/assets/logos/anthropic.js +4 -0
  13. package/es/model-selector/assets/logos/azure.js +4 -0
  14. package/es/model-selector/assets/logos/baseten.js +4 -0
  15. package/es/model-selector/assets/logos/cerebras.js +4 -0
  16. package/es/model-selector/assets/logos/chutes.js +4 -0
  17. package/es/model-selector/assets/logos/cloudflare-workers-ai.js +4 -0
  18. package/es/model-selector/assets/logos/cortecs.js +4 -0
  19. package/es/model-selector/assets/logos/deepinfra.js +4 -0
  20. package/es/model-selector/assets/logos/deepseek.js +4 -0
  21. package/es/model-selector/assets/logos/default.js +4 -0
  22. package/es/model-selector/assets/logos/fastrouter.js +4 -0
  23. package/es/model-selector/assets/logos/fireworks-ai.js +4 -0
  24. package/es/model-selector/assets/logos/github-copilot.js +4 -0
  25. package/es/model-selector/assets/logos/github-models.js +4 -0
  26. package/es/model-selector/assets/logos/google-vertex-anthropic.js +4 -0
  27. package/es/model-selector/assets/logos/google-vertex.js +4 -0
  28. package/es/model-selector/assets/logos/google.js +4 -0
  29. package/es/model-selector/assets/logos/groq.js +4 -0
  30. package/es/model-selector/assets/logos/huggingface.js +4 -0
  31. package/es/model-selector/assets/logos/iflowcn.js +4 -0
  32. package/es/model-selector/assets/logos/inception.js +4 -0
  33. package/es/model-selector/assets/logos/inference.js +4 -0
  34. package/es/model-selector/assets/logos/llama.js +4 -0
  35. package/es/model-selector/assets/logos/lucidquery.js +4 -0
  36. package/es/model-selector/assets/logos/mistral.js +4 -0
  37. package/es/model-selector/assets/logos/modelscope.js +4 -0
  38. package/es/model-selector/assets/logos/moonshotai-cn.js +4 -0
  39. package/es/model-selector/assets/logos/moonshotai.js +4 -0
  40. package/es/model-selector/assets/logos/nebius.js +4 -0
  41. package/es/model-selector/assets/logos/nvidia.js +4 -0
  42. package/es/model-selector/assets/logos/openai.js +4 -0
  43. package/es/model-selector/assets/logos/opencode.js +4 -0
  44. package/es/model-selector/assets/logos/openrouter.js +4 -0
  45. package/es/model-selector/assets/logos/perplexity.js +4 -0
  46. package/es/model-selector/assets/logos/scaleway.js +4 -0
  47. package/es/model-selector/assets/logos/submodel.js +4 -0
  48. package/es/model-selector/assets/logos/togetherai.js +4 -0
  49. package/es/model-selector/assets/logos/upstage.js +4 -0
  50. package/es/model-selector/assets/logos/v0.js +4 -0
  51. package/es/model-selector/assets/logos/venice.js +4 -0
  52. package/es/model-selector/assets/logos/vercel.js +4 -0
  53. package/es/model-selector/assets/logos/vultr.js +4 -0
  54. package/es/model-selector/assets/logos/xai.js +4 -0
  55. package/es/model-selector/assets/logos/zai-coding-plan.js +4 -0
  56. package/es/model-selector/assets/logos/zai.js +4 -0
  57. package/es/model-selector/assets/logos/zenmux.js +4 -0
  58. package/es/model-selector/assets/logos/zhipuai-coding-plan.js +4 -0
  59. package/es/model-selector/assets/logos/zhipuai.js +4 -0
  60. package/es/model-selector/context.d.ts +25 -0
  61. package/es/model-selector/context.js +5 -0
  62. package/es/model-selector/index.d.ts +436 -0
  63. package/es/model-selector/index.js +57 -0
  64. package/es/model-selector/model-selector-content.js +5 -0
  65. package/es/model-selector/model-selector-content.vue.d.ts +21 -0
  66. package/es/model-selector/model-selector-content.vue_vue_type_script_setup_true_lang.js +65 -0
  67. package/es/model-selector/model-selector-dialog.js +5 -0
  68. package/es/model-selector/model-selector-dialog.vue.d.ts +36 -0
  69. package/es/model-selector/model-selector-dialog.vue_vue_type_script_setup_true_lang.js +98 -0
  70. package/es/model-selector/model-selector-empty.js +5 -0
  71. package/es/model-selector/model-selector-empty.vue.d.ts +13 -0
  72. package/es/model-selector/model-selector-empty.vue_vue_type_script_setup_true_lang.js +25 -0
  73. package/es/model-selector/model-selector-group.js +5 -0
  74. package/es/model-selector/model-selector-group.vue.d.ts +18 -0
  75. package/es/model-selector/model-selector-group.vue_vue_type_script_setup_true_lang.js +32 -0
  76. package/es/model-selector/model-selector-input.js +5 -0
  77. package/es/model-selector/model-selector-input.vue.d.ts +11 -0
  78. package/es/model-selector/model-selector-input.vue_vue_type_script_setup_true_lang.js +80 -0
  79. package/es/model-selector/model-selector-item.js +5 -0
  80. package/es/model-selector/model-selector-item.vue.d.ts +35 -0
  81. package/es/model-selector/model-selector-item.vue_vue_type_script_setup_true_lang.js +101 -0
  82. package/es/model-selector/model-selector-list.js +5 -0
  83. package/es/model-selector/model-selector-list.vue.d.ts +13 -0
  84. package/es/model-selector/model-selector-list.vue_vue_type_script_setup_true_lang.js +36 -0
  85. package/es/model-selector/model-selector-logo-group.js +5 -0
  86. package/es/model-selector/model-selector-logo-group.vue.d.ts +13 -0
  87. package/es/model-selector/model-selector-logo-group.vue_vue_type_script_setup_true_lang.js +15 -0
  88. package/es/model-selector/model-selector-logo.js +5 -0
  89. package/es/model-selector/model-selector-logo.vue.d.ts +10 -0
  90. package/es/model-selector/model-selector-logo.vue_vue_type_script_setup_true_lang.js +146 -0
  91. package/es/model-selector/model-selector-name.js +5 -0
  92. package/es/model-selector/model-selector-name.vue.d.ts +13 -0
  93. package/es/model-selector/model-selector-name.vue_vue_type_script_setup_true_lang.js +15 -0
  94. package/es/model-selector/model-selector-separator.js +5 -0
  95. package/es/model-selector/model-selector-separator.vue.d.ts +3 -0
  96. package/es/model-selector/model-selector-separator.vue_vue_type_script_setup_true_lang.js +16 -0
  97. package/es/model-selector/model-selector-shortcut.js +5 -0
  98. package/es/model-selector/model-selector-shortcut.vue.d.ts +13 -0
  99. package/es/model-selector/model-selector-shortcut.vue_vue_type_script_setup_true_lang.js +15 -0
  100. package/es/model-selector/model-selector-trigger.js +5 -0
  101. package/es/model-selector/model-selector-trigger.vue.d.ts +20 -0
  102. package/es/model-selector/model-selector-trigger.vue_vue_type_script_setup_true_lang.js +39 -0
  103. package/es/model-selector/model-selector.js +5 -0
  104. package/es/model-selector/model-selector.vue.d.ts +34 -0
  105. package/es/model-selector/model-selector.vue_vue_type_script_setup_true_lang.js +179 -0
  106. package/es/model-selector/style/css.js +2 -0
  107. package/es/model-selector/style/index.css +148 -0
  108. package/es/model-selector/style/index.d.ts +2 -0
  109. package/es/model-selector/style/index.js +2 -0
  110. package/es/model-selector/style/index.scss +163 -0
  111. package/es/model-selector/style/token.scss +24 -0
  112. package/es/model-selector/types.d.ts +16 -0
  113. package/es/model-selector/types.js +61 -0
  114. package/es/model-selector/use-model-selector-context.d.ts +1 -0
  115. package/es/model-selector/use-model-selector-context.js +10 -0
  116. package/es/qr-code/qr-code.vue_vue_type_script_setup_true_lang.js +17 -6
  117. package/es/qr-code/style/index.css +1 -1
  118. package/es/qr-code/style/token.scss +1 -1
  119. package/es/rich-text-editor/rich-text-editor.vue_vue_type_script_setup_true_lang.js +16 -18
  120. package/es/rich-text-editor/style/index.css +1 -1
  121. package/es/rich-text-editor/style/token.scss +2 -1
  122. package/es/sd-vue.js +2 -0
  123. package/es/sender/sender.vue_vue_type_script_setup_true_lang.js +1 -1
  124. package/es/sender/style/index.css +1 -1
  125. package/es/sender/style/token.scss +2 -1
  126. package/es/sender/types.d.ts +2 -1
  127. package/json/vetur-attributes.json +95 -0
  128. package/json/vetur-tags.json +75 -0
  129. package/json/web-types.json +290 -1
  130. package/package.json +1 -1
@@ -0,0 +1,148 @@
1
+ /******** borderSize *******/
2
+ /******** borderStyle *******/
3
+ /******** radius *******/
4
+ /******** shadow distance *******/
5
+ /******** size *******/
6
+ /******** spacing *******/
7
+ /******** shadow *******/
8
+ /******** opacity *******/
9
+ /******** fontSize *******/
10
+ /******** fontWeight ********/
11
+ /******** Primary *******/
12
+ /******** success *******/
13
+ /******** warning *******/
14
+ /******** danger *******/
15
+ /******** link *******/
16
+ /******** radius *******/
17
+ /********* icon hover *********/
18
+ .sd-model-selector {
19
+ display: flex;
20
+ flex-direction: column;
21
+ box-sizing: border-box;
22
+ min-width: 0;
23
+ overflow: hidden;
24
+ color: var(--sd-color-text-1);
25
+ font-size: 14px;
26
+ background: var(--sd-color-bg-popup);
27
+ border-radius: var(--sd-border-radius-medium);
28
+ }
29
+ .sd-model-selector-modal {
30
+ padding: 0;
31
+ overflow: hidden;
32
+ border: 1px solid var(--sd-color-fill-3);
33
+ border-radius: var(--sd-border-radius-medium);
34
+ }
35
+ .sd-model-selector-modal .sd-modal-header {
36
+ position: absolute;
37
+ width: 1px;
38
+ height: 1px;
39
+ margin: -1px;
40
+ padding: 0;
41
+ overflow: hidden;
42
+ white-space: nowrap;
43
+ border: 0;
44
+ clip-path: inset(50%);
45
+ }
46
+ .sd-model-selector-body {
47
+ padding: 0;
48
+ }
49
+ .sd-model-selector-trigger {
50
+ flex: none;
51
+ }
52
+ .sd-model-selector-input-container {
53
+ box-sizing: border-box;
54
+ width: 100%;
55
+ min-width: 0;
56
+ padding: 6px 12px;
57
+ }
58
+ .sd-model-selector-list {
59
+ --sd-model-selector-list-max-height: 400px;
60
+ --sd-model-selector-list-viewport-offset: 160px;
61
+ }
62
+ .sd-model-selector-list-content {
63
+ padding: 6px;
64
+ overscroll-behavior: contain;
65
+ }
66
+ .sd-model-selector-group + .sd-model-selector-group {
67
+ margin-top: 6px;
68
+ }
69
+ .sd-model-selector-group-heading {
70
+ padding: 6px 12px;
71
+ color: var(--sd-color-text-3);
72
+ font-weight: 500;
73
+ font-size: 12px;
74
+ }
75
+ .sd-model-selector-group-content {
76
+ display: flex;
77
+ flex-direction: column;
78
+ gap: 2px;
79
+ }
80
+ .sd-model-selector-item {
81
+ display: flex;
82
+ gap: 8px;
83
+ align-items: center;
84
+ box-sizing: border-box;
85
+ min-height: 40px;
86
+ padding: 0 12px;
87
+ border-radius: var(--sd-border-radius-medium);
88
+ cursor: pointer;
89
+ user-select: none;
90
+ }
91
+ .sd-model-selector-item--active:not(.sd-model-selector-item--disabled) {
92
+ background: var(--sd-color-fill-2);
93
+ }
94
+ .sd-model-selector-item--disabled {
95
+ color: var(--sd-color-text-4);
96
+ cursor: not-allowed;
97
+ }
98
+ .sd-model-selector-item--selected {
99
+ font-weight: 500;
100
+ }
101
+ .sd-model-selector-empty {
102
+ padding: 40px 12px;
103
+ }
104
+ .sd-model-selector-separator {
105
+ margin: 6px 0;
106
+ }
107
+ .sd-model-selector-shortcut {
108
+ flex: none;
109
+ order: 2;
110
+ margin-left: auto;
111
+ color: var(--sd-color-text-3);
112
+ font: inherit;
113
+ font-size: 12px;
114
+ }
115
+ .sd-model-selector-name {
116
+ flex: 1;
117
+ min-width: 0;
118
+ overflow: hidden;
119
+ white-space: nowrap;
120
+ text-align: left;
121
+ text-overflow: ellipsis;
122
+ }
123
+ .sd-model-selector-logo {
124
+ display: block;
125
+ flex: none;
126
+ object-fit: contain;
127
+ }
128
+ .sd-model-selector-logo-group {
129
+ display: inline-flex;
130
+ flex: none;
131
+ align-items: center;
132
+ order: 1;
133
+ margin-left: auto;
134
+ }
135
+ .sd-model-selector-logo-group > .sd-model-selector-logo {
136
+ box-sizing: content-box;
137
+ padding: 1px;
138
+ background: var(--sd-color-bg-popup);
139
+ border: 1px solid var(--sd-color-fill-3);
140
+ border-radius: 50%;
141
+ }
142
+ .sd-model-selector-logo-group > .sd-model-selector-logo + .sd-model-selector-logo {
143
+ margin-left: -6px;
144
+ }
145
+
146
+ :where(body, [sd-theme])[sd-theme=dark] .sd-model-selector-logo {
147
+ filter: brightness(0) invert(1);
148
+ }
@@ -0,0 +1,2 @@
1
+ import '../../style/index.scss';
2
+ import './index.scss';
@@ -0,0 +1,2 @@
1
+ import "../../style/index.scss";
2
+ import "./index.scss";
@@ -0,0 +1,163 @@
1
+ @use '@style/theme/index.scss' as theme;
2
+ @use 'sass:string';
3
+ @use '@components/model-selector/style/token.scss' as *;
4
+
5
+ $model-selector-prefix-cls: string.unquote('#{theme.$prefix}-model-selector');
6
+
7
+ .#{$model-selector-prefix-cls} {
8
+ display: flex;
9
+ flex-direction: column;
10
+ box-sizing: border-box;
11
+ min-width: 0;
12
+ overflow: hidden;
13
+ color: $model-selector-color-text;
14
+ font-size: $model-selector-font-size;
15
+ background: $model-selector-color-bg;
16
+ border-radius: $model-selector-border-radius;
17
+
18
+ &-modal {
19
+ padding: 0;
20
+ overflow: hidden;
21
+ border: 1px solid $model-selector-color-border;
22
+ border-radius: $model-selector-border-radius;
23
+ }
24
+
25
+ &-modal .#{theme.$prefix}-modal-header {
26
+ position: absolute;
27
+ width: 1px;
28
+ height: 1px;
29
+ margin: -1px;
30
+ padding: 0;
31
+ overflow: hidden;
32
+ white-space: nowrap;
33
+ border: 0;
34
+ clip-path: inset(50%);
35
+ }
36
+
37
+ &-body {
38
+ padding: 0;
39
+ }
40
+
41
+ &-trigger {
42
+ flex: none;
43
+ }
44
+
45
+ &-input-container {
46
+ box-sizing: border-box;
47
+ width: 100%;
48
+ min-width: 0;
49
+ padding: $model-selector-padding $model-selector-padding-horizontal;
50
+ }
51
+
52
+ &-list {
53
+ --#{$model-selector-prefix-cls}-list-max-height: #{$model-selector-list-max-height};
54
+ --#{$model-selector-prefix-cls}-list-viewport-offset: #{$model-selector-list-viewport-offset};
55
+
56
+ &-content {
57
+ padding: $model-selector-padding;
58
+ overscroll-behavior: contain;
59
+ }
60
+ }
61
+
62
+ &-group {
63
+ & + & {
64
+ margin-top: $model-selector-padding;
65
+ }
66
+
67
+ &-heading {
68
+ padding: $model-selector-padding $model-selector-padding-horizontal;
69
+ color: $model-selector-color-text-secondary;
70
+ font-weight: theme.$font-weight-500;
71
+ font-size: $model-selector-font-size-secondary;
72
+ }
73
+
74
+ &-content {
75
+ display: flex;
76
+ flex-direction: column;
77
+ gap: theme.$spacing-1;
78
+ }
79
+ }
80
+
81
+ &-item {
82
+ display: flex;
83
+ gap: $model-selector-gap;
84
+ align-items: center;
85
+ box-sizing: border-box;
86
+ min-height: $model-selector-item-height;
87
+ padding: 0 $model-selector-padding-horizontal;
88
+ border-radius: $model-selector-border-radius;
89
+ cursor: pointer;
90
+ user-select: none;
91
+
92
+ &--active:not(&--disabled) {
93
+ background: $model-selector-color-fill-hover;
94
+ }
95
+
96
+ &--disabled {
97
+ color: $model-selector-color-text-disabled;
98
+ cursor: not-allowed;
99
+ }
100
+
101
+ &--selected {
102
+ font-weight: theme.$font-weight-500;
103
+ }
104
+ }
105
+
106
+ &-empty {
107
+ padding: theme.$spacing-12 $model-selector-padding-horizontal;
108
+ }
109
+
110
+ &-separator {
111
+ margin: $model-selector-padding 0;
112
+ }
113
+
114
+ &-shortcut {
115
+ flex: none;
116
+ order: 2;
117
+ margin-left: auto;
118
+ color: $model-selector-color-text-secondary;
119
+ font: inherit;
120
+ font-size: $model-selector-font-size-secondary;
121
+ }
122
+
123
+ &-name {
124
+ flex: 1;
125
+ min-width: 0;
126
+ overflow: hidden;
127
+ white-space: nowrap;
128
+ text-align: left;
129
+ text-overflow: ellipsis;
130
+ }
131
+
132
+ &-logo {
133
+ display: block;
134
+ flex: none;
135
+ object-fit: contain;
136
+ }
137
+
138
+ &-logo-group {
139
+ display: inline-flex;
140
+ flex: none;
141
+ align-items: center;
142
+ order: 1;
143
+ margin-left: auto;
144
+
145
+ > .#{$model-selector-prefix-cls}-logo {
146
+ box-sizing: content-box;
147
+ padding: 1px;
148
+ background: $model-selector-color-bg;
149
+ border: 1px solid $model-selector-color-border;
150
+ border-radius: 50%;
151
+
152
+ & + .#{$model-selector-prefix-cls}-logo {
153
+ margin-left: -#{theme.$spacing-3};
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ #{theme.$sd-theme-tag}[sd-theme='dark'] {
160
+ .#{$model-selector-prefix-cls}-logo {
161
+ filter: brightness(0) invert(1);
162
+ }
163
+ }
@@ -0,0 +1,24 @@
1
+ @use '@style/theme/index.scss' as global;
2
+ @use 'sass:string';
3
+
4
+ @forward '@style/theme/index.scss';
5
+
6
+ $model-selector-color-bg: var(string.unquote('#{global.$sd-cssvars-prefix}-color-bg-popup'));
7
+ $model-selector-color-border: var(string.unquote('#{global.$sd-cssvars-prefix}-color-fill-3'));
8
+ $model-selector-color-text: var(string.unquote('#{global.$sd-cssvars-prefix}-color-text-1'));
9
+ $model-selector-color-text-secondary: var(
10
+ string.unquote('#{global.$sd-cssvars-prefix}-color-text-3')
11
+ );
12
+ $model-selector-color-text-disabled: var(
13
+ string.unquote('#{global.$sd-cssvars-prefix}-color-text-4')
14
+ );
15
+ $model-selector-color-fill-hover: var(string.unquote('#{global.$sd-cssvars-prefix}-color-fill-2'));
16
+ $model-selector-border-radius: global.$radius-medium;
17
+ $model-selector-item-height: global.$size-10;
18
+ $model-selector-list-max-height: global.$size-50 * 2;
19
+ $model-selector-list-viewport-offset: global.$size-40;
20
+ $model-selector-padding: global.$spacing-3;
21
+ $model-selector-padding-horizontal: global.$spacing-6;
22
+ $model-selector-gap: global.$spacing-4;
23
+ $model-selector-font-size: global.$font-size-body-3;
24
+ $model-selector-font-size-secondary: global.$font-size-body-1;
@@ -0,0 +1,16 @@
1
+ import type { LiteralUnion } from 'type-fest';
2
+ export declare const MODEL_SELECTOR_PROVIDERS: readonly ["moonshotai-cn", "lucidquery", "moonshotai", "zai-coding-plan", "alibaba", "xai", "vultr", "nvidia", "upstage", "groq", "github-copilot", "mistral", "vercel", "nebius", "deepseek", "alibaba-cn", "google-vertex-anthropic", "venice", "chutes", "cortecs", "github-models", "togetherai", "azure", "baseten", "huggingface", "opencode", "fastrouter", "google", "google-vertex", "cloudflare-workers-ai", "inception", "wandb", "openai", "zhipuai-coding-plan", "perplexity", "openrouter", "zenmux", "v0", "iflowcn", "synthetic", "deepinfra", "zhipuai", "submodel", "zai", "inference", "requesty", "morph", "lmstudio", "anthropic", "aihubmix", "fireworks-ai", "modelscope", "llama", "scaleway", "amazon-bedrock", "cerebras"];
3
+ export type ModelSelectorKnownProvider = (typeof MODEL_SELECTOR_PROVIDERS)[number];
4
+ export type ModelSelectorProvider = LiteralUnion<ModelSelectorKnownProvider, string>;
5
+ export interface ModelSelectorItemData {
6
+ disabled: boolean;
7
+ domId: string;
8
+ element?: HTMLElement;
9
+ groupId?: symbol;
10
+ id: symbol;
11
+ keywords: string[];
12
+ label: string;
13
+ select: (event: Event) => void;
14
+ shortcut?: string;
15
+ value: string;
16
+ }
@@ -0,0 +1,61 @@
1
+ //#region components/model-selector/types.ts
2
+ var MODEL_SELECTOR_PROVIDERS = [
3
+ "moonshotai-cn",
4
+ "lucidquery",
5
+ "moonshotai",
6
+ "zai-coding-plan",
7
+ "alibaba",
8
+ "xai",
9
+ "vultr",
10
+ "nvidia",
11
+ "upstage",
12
+ "groq",
13
+ "github-copilot",
14
+ "mistral",
15
+ "vercel",
16
+ "nebius",
17
+ "deepseek",
18
+ "alibaba-cn",
19
+ "google-vertex-anthropic",
20
+ "venice",
21
+ "chutes",
22
+ "cortecs",
23
+ "github-models",
24
+ "togetherai",
25
+ "azure",
26
+ "baseten",
27
+ "huggingface",
28
+ "opencode",
29
+ "fastrouter",
30
+ "google",
31
+ "google-vertex",
32
+ "cloudflare-workers-ai",
33
+ "inception",
34
+ "wandb",
35
+ "openai",
36
+ "zhipuai-coding-plan",
37
+ "perplexity",
38
+ "openrouter",
39
+ "zenmux",
40
+ "v0",
41
+ "iflowcn",
42
+ "synthetic",
43
+ "deepinfra",
44
+ "zhipuai",
45
+ "submodel",
46
+ "zai",
47
+ "inference",
48
+ "requesty",
49
+ "morph",
50
+ "lmstudio",
51
+ "anthropic",
52
+ "aihubmix",
53
+ "fireworks-ai",
54
+ "modelscope",
55
+ "llama",
56
+ "scaleway",
57
+ "amazon-bedrock",
58
+ "cerebras"
59
+ ];
60
+ //#endregion
61
+ export { MODEL_SELECTOR_PROVIDERS };
@@ -0,0 +1 @@
1
+ export declare function useModelSelectorContext(componentName: string): import("./context").ModelSelectorContext;
@@ -0,0 +1,10 @@
1
+ import { modelSelectorInjectionKey } from "./context.js";
2
+ import { inject } from "vue";
3
+ //#region components/model-selector/use-model-selector-context.ts
4
+ function useModelSelectorContext(componentName) {
5
+ const context = inject(modelSelectorInjectionKey, void 0);
6
+ if (!context) throw new Error(`[${componentName}] 必须在 ModelSelector 内使用。`);
7
+ return context;
8
+ }
9
+ //#endregion
10
+ export { useModelSelectorContext };
@@ -3,8 +3,9 @@ import _objectSpread2 from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/es
3
3
  import { getPrefixCls } from "../_utils/global-config.js";
4
4
  import { useI18n } from "../locale/index.js";
5
5
  import _asyncToGenerator from "../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/asyncToGenerator.js";
6
+ import { useThemeMode } from "../_hooks/use-theme-mode.js";
6
7
  import qr_code_status_default from "./qr-code-status.js";
7
- import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, nextTick, normalizeClass, normalizeStyle, openBlock, ref, renderSlot, unref, useSlots, watch } from "vue";
8
+ import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, nextTick, normalizeClass, normalizeStyle, openBlock, ref, renderSlot, unref, useSlots, useTemplateRef, watch } from "vue";
8
9
  import QRCode from "qrcode";
9
10
  //#region components/qr-code/qr-code.vue?vue&type=script&setup=true&lang.ts
10
11
  var _hoisted_1 = ["aria-label"];
@@ -68,7 +69,7 @@ var qr_code_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
68
69
  */
69
70
  color: {
70
71
  type: String,
71
- default: "#1D2129"
72
+ default: ""
72
73
  },
73
74
  /**
74
75
  * @zh 二维码背景色
@@ -162,6 +163,7 @@ var qr_code_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
162
163
  const configCtx = inject(configProviderInjectionKey, void 0);
163
164
  const resolvedSpinProps = computed(() => _objectSpread2(_objectSpread2({}, configCtx === null || configCtx === void 0 ? void 0 : configCtx.qrCodeSpinProps), props.spinProps));
164
165
  const prefixCls = getPrefixCls("qr-code");
166
+ const themeMode = useThemeMode(useTemplateRef("root"));
165
167
  const canvasRef = ref();
166
168
  const svgMarkup = ref("");
167
169
  const handleRefresh = () => {
@@ -195,15 +197,22 @@ var qr_code_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
195
197
  const rootStyle = computed(() => ({
196
198
  width: `${props.size}px`,
197
199
  height: `${props.size}px`,
198
- backgroundColor: props.bgColor
200
+ backgroundColor: props.bgColor === "transparent" ? void 0 : props.bgColor
199
201
  }));
200
- const qrBgColor = computed(() => props.bgColor === "transparent" ? "#ffffff" : props.bgColor);
202
+ const qrColor = computed(() => {
203
+ if (props.color) return props.color;
204
+ return themeMode.value === "dark" ? "#f6f6f6" : "#1d2129";
205
+ });
206
+ const qrBgColor = computed(() => {
207
+ if (props.bgColor !== "transparent") return props.bgColor;
208
+ return themeMode.value === "dark" ? "#232324" : "#ffffff";
209
+ });
201
210
  const qrOptions = computed(() => ({
202
211
  errorCorrectionLevel: props.errorLevel,
203
212
  margin: props.marginSize,
204
213
  width: props.size,
205
214
  color: {
206
- dark: props.color,
215
+ dark: qrColor.value,
207
216
  light: qrBgColor.value
208
217
  }
209
218
  }));
@@ -259,7 +268,8 @@ var qr_code_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
259
268
  props.bgColor,
260
269
  props.errorLevel,
261
270
  props.marginSize,
262
- props.boostLevel
271
+ props.boostLevel,
272
+ themeMode.value
263
273
  ], () => {
264
274
  renderCode();
265
275
  }, {
@@ -269,6 +279,7 @@ var qr_code_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
269
279
  return (_ctx, _cache) => {
270
280
  return hasValue.value ? (openBlock(), createElementBlock("div", {
271
281
  key: 0,
282
+ ref: "root",
272
283
  class: normalizeClass(rootClass.value),
273
284
  style: normalizeStyle(rootStyle.value)
274
285
  }, [
@@ -67,7 +67,7 @@
67
67
  align-items: center;
68
68
  justify-content: center;
69
69
  text-align: center;
70
- background: rgba(255, 255, 255, 0.88);
70
+ background: color-mix(in srgb, var(--sd-color-bg-2) 88%, transparent);
71
71
  }
72
72
  .sd-qr-code-status {
73
73
  display: inline-flex;
@@ -9,7 +9,7 @@ $qr-code-color-border: var(string.unquote('#{global.$sd-cssvars-prefix}-color-bo
9
9
 
10
10
  $qr-code-color-bg: var(string.unquote('#{global.$sd-cssvars-prefix}-color-bg-2'));
11
11
 
12
- $qr-code-color-mask-bg: rgb(255 255 255 / 88%);
12
+ $qr-code-color-mask-bg: color-mix(in srgb, #{$qr-code-color-bg} 88%, transparent);
13
13
 
14
14
  $qr-code-color-text: var(string.unquote('#{global.$sd-cssvars-prefix}-color-text-1'));
15
15
 
@@ -209,6 +209,20 @@ var rich_text_editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
209
209
  return content;
210
210
  })) !== null && _editorRef$value$getE !== void 0 ? _editorRef$value$getE : [];
211
211
  };
212
+ /**
213
+ * 将折叠选区向前扩展到待替换文本,后续 insertText/insertNodes 会在同一次
214
+ * Lexical 更新中原子删除选区并插入新内容,避免 spliceText 后继续使用旧选区。
215
+ * @param selection 当前 Lexical 文本选区。
216
+ * @param replaceCharacters 光标前需要被替换的文本。
217
+ */
218
+ const selectReplacementCharacters = (selection, replaceCharacters) => {
219
+ if (!replaceCharacters || !selection.isCollapsed()) return;
220
+ const anchorNode = selection.anchor.getNode();
221
+ const offset = selection.anchor.offset;
222
+ if (!$isTextNode(anchorNode) || !anchorNode.getTextContent().slice(0, offset).endsWith(replaceCharacters)) return;
223
+ const start = offset - replaceCharacters.length;
224
+ selection.setTextNodeRange(anchorNode, start, anchorNode, offset);
225
+ };
212
226
  const insertContent = (content, options = {}) => {
213
227
  var _editorRef$value3;
214
228
  const { position = "cursor", replaceCharacters } = options, updateOptions = _objectWithoutProperties(options, _excluded);
@@ -218,15 +232,7 @@ var rich_text_editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
218
232
  if (position === "end") root.selectEnd();
219
233
  const selection = $getSelection();
220
234
  if ($isRangeSelection(selection)) {
221
- if (replaceCharacters && selection.isCollapsed()) {
222
- const anchorNode = selection.anchor.getNode();
223
- const offset = selection.anchor.offset;
224
- if ($isTextNode(anchorNode) && anchorNode.getTextContent().slice(0, offset).endsWith(replaceCharacters)) {
225
- const start = offset - replaceCharacters.length;
226
- anchorNode.spliceText(start, replaceCharacters.length, "", true);
227
- anchorNode.select(start, start);
228
- }
229
- }
235
+ selectReplacementCharacters(selection, replaceCharacters);
230
236
  selection.insertNodes(createContentNodes(content));
231
237
  return;
232
238
  }
@@ -293,15 +299,7 @@ var rich_text_editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
293
299
  if (position === "end") root.selectEnd();
294
300
  const selection = $getSelection();
295
301
  if ($isRangeSelection(selection)) {
296
- if (replaceCharacters && selection.isCollapsed()) {
297
- const anchorNode = selection.anchor.getNode();
298
- const offset = selection.anchor.offset;
299
- if ($isTextNode(anchorNode) && anchorNode.getTextContent().slice(0, offset).endsWith(replaceCharacters)) {
300
- const start = offset - replaceCharacters.length;
301
- anchorNode.spliceText(start, replaceCharacters.length, "", true);
302
- anchorNode.select(start, start);
303
- }
304
- }
302
+ selectReplacementCharacters(selection, replaceCharacters);
305
303
  selection.insertText(text);
306
304
  return;
307
305
  }
@@ -22,7 +22,7 @@
22
22
  color: var(--sd-color-neutral-10);
23
23
  font-size: 14px;
24
24
  line-height: 1.5715;
25
- background: #fff;
25
+ background: var(--sd-color-bg-2);
26
26
  border: 1px solid var(--sd-color-neutral-3);
27
27
  border-radius: var(--sd-border-radius-medium);
28
28
  transition: border-color 0.2s cubic-bezier(0.34, 0.69, 0.1, 1), box-shadow 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
@@ -1,4 +1,5 @@
1
1
  @use '@style/theme/index.scss' as global;
2
+ @use 'sass:string';
2
3
 
3
4
  @forward '@style/theme/index.scss';
4
5
 
@@ -16,7 +17,7 @@ $rich-text-editor-code-padding: global.$spacing-2;
16
17
  $rich-text-editor-color-text: global.$color-text-1;
17
18
  $rich-text-editor-color-text-disabled: global.$color-text-4;
18
19
  $rich-text-editor-color-placeholder: global.$color-text-4;
19
- $rich-text-editor-color-background: global.$color-bg-2;
20
+ $rich-text-editor-color-background: var(string.unquote('#{global.$sd-cssvars-prefix}-color-bg-2'));
20
21
  $rich-text-editor-color-background-disabled: global.$color-fill-2;
21
22
  $rich-text-editor-color-border: global.$color-border-2;
22
23
  $rich-text-editor-color-border-hover: global.$color-primary-5;
package/es/sd-vue.js CHANGED
@@ -115,6 +115,7 @@ import item_default from "./menu/item.js";
115
115
  import item_group_default from "./menu/item-group.js";
116
116
  import sub_menu_default from "./menu/sub-menu.js";
117
117
  import Menu from "./menu/index.js";
118
+ import ModelSelector from "./model-selector/index.js";
118
119
  import Notification from "./notification/index.js";
119
120
  import OverflowList from "./overflow-list/index.js";
120
121
  import PageHeader from "./page-header/index.js";
@@ -213,6 +214,7 @@ var components = {
213
214
  Drawer,
214
215
  Message,
215
216
  Modal,
217
+ ModelSelector,
216
218
  Notification,
217
219
  Popconfirm,
218
220
  Progress,
@@ -29,7 +29,7 @@ var sender_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
29
29
  submitType: { default: "enter" },
30
30
  disabled: { type: Boolean },
31
31
  slotConfig: {},
32
- allowSpeech: { type: Boolean },
32
+ allowSpeech: { type: [Boolean, Object] },
33
33
  autoSize: {
34
34
  type: [Boolean, Object],
35
35
  default: () => ({ maxRows: 8 })
@@ -22,7 +22,7 @@
22
22
  position: relative;
23
23
  width: 100%;
24
24
  overflow: hidden;
25
- background: #fff;
25
+ background: var(--sd-color-bg-2);
26
26
  border: 1px solid color-mix(in srgb, var(--sd-color-neutral-3) 10%, transparent);
27
27
  border-radius: calc(var(--sd-border-radius-medium) * 2);
28
28
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);
@@ -1,4 +1,5 @@
1
1
  @use '@style/theme/index.scss' as global;
2
+ @use 'sass:string';
2
3
 
3
4
  @forward '@style/theme/index.scss';
4
5
 
@@ -22,7 +23,7 @@ $sender-color-primary-hover: global.$color-primary-5;
22
23
  $sender-color-text: global.$color-text-1;
23
24
  $sender-color-text-disabled: global.$color-text-4;
24
25
  $sender-color-text-placeholder: global.$color-text-4;
25
- $sender-color-bg: global.$color-bg-2;
26
+ $sender-color-bg: var(string.unquote('#{global.$sd-cssvars-prefix}-color-bg-2'));
26
27
  $sender-color-bg-disabled: global.$color-fill-2;
27
28
  $sender-color-header-bg: global.$color-fill-2;
28
29
  $sender-color-border: global.$color-border-2;
@@ -1,3 +1,4 @@
1
+ import type { UnknownRecord } from 'type-fest';
1
2
  import type { CSSProperties, Component, VNodeChild } from 'vue';
2
3
  import type { TooltipProps } from '../tooltip';
3
4
  import type { RecorderCore, RecorderCoreInstance, RecorderCoreOptions } from './recorder-core';
@@ -8,7 +9,7 @@ export type SenderSemanticType = 'root' | 'prefix' | 'input' | 'suffix' | 'foote
8
9
  export interface SenderComponents {
9
10
  input?: Component;
10
11
  }
11
- export type SenderAllowSpeech = boolean | RecorderCoreOptions;
12
+ export type SenderAllowSpeech = boolean | RecorderCoreOptions | UnknownRecord;
12
13
  export interface SenderSkillClosableConfig {
13
14
  closeIcon?: VNodeChild;
14
15
  onClose?: (event: MouseEvent) => void;