@sdata/web-vue 3.23.0 → 3.24.0

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 (123) hide show
  1. package/dist/sd.css +128 -0
  2. package/dist/sd.min.css +1 -1
  3. package/es/components.d.ts +14 -0
  4. package/es/index.css +128 -0
  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 +144 -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 +157 -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/rich-text-editor/rich-text-editor.vue_vue_type_script_setup_true_lang.js +16 -18
  117. package/es/sd-vue.js +2 -0
  118. package/es/sender/sender.vue_vue_type_script_setup_true_lang.js +1 -1
  119. package/es/sender/types.d.ts +2 -1
  120. package/json/vetur-attributes.json +95 -0
  121. package/json/vetur-tags.json +75 -0
  122. package/json/web-types.json +290 -1
  123. package/package.json +1 -1
@@ -0,0 +1,144 @@
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
+ }
@@ -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,157 @@
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
+ }
@@ -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 };
@@ -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
  }
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 })
@@ -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;
@@ -2433,6 +2433,101 @@
2433
2433
  "description": "Whether to hide the title",
2434
2434
  "type": "boolean"
2435
2435
  },
2436
+ "sd-model-selector-content/title": {
2437
+ "description": "Accessible dialog title",
2438
+ "type": "string"
2439
+ },
2440
+ "sd-model-selector-content/width": {
2441
+ "description": "Dialog width"
2442
+ },
2443
+ "sd-model-selector-content/render-to-body": {
2444
+ "description": "Whether to render under body",
2445
+ "type": "boolean"
2446
+ },
2447
+ "sd-model-selector-content/unmount-on-close": {
2448
+ "description": "Whether to unmount content when closed",
2449
+ "type": "boolean"
2450
+ },
2451
+ "sd-model-selector-content/mask-closable": {
2452
+ "description": "Whether clicking the mask closes the dialog",
2453
+ "type": "boolean"
2454
+ },
2455
+ "sd-model-selector-content/esc-to-close": {
2456
+ "description": "Whether Escape closes the dialog",
2457
+ "type": "boolean"
2458
+ },
2459
+ "sd-model-selector-group/heading": {
2460
+ "description": "Group heading",
2461
+ "type": "string"
2462
+ },
2463
+ "sd-model-selector-input/model-value": {
2464
+ "description": "Search query",
2465
+ "type": "string"
2466
+ },
2467
+ "sd-model-selector-input/input-attrs": {
2468
+ "description": "Attributes forwarded to the underlying native input"
2469
+ },
2470
+ "sd-model-selector-item/select": {
2471
+ "description": "Emitted when selected"
2472
+ },
2473
+ "sd-model-selector-item/value": {
2474
+ "description": "Item value",
2475
+ "type": "string"
2476
+ },
2477
+ "sd-model-selector-item/label": {
2478
+ "description": "Search label; rendered text is used when omitted",
2479
+ "type": "string"
2480
+ },
2481
+ "sd-model-selector-item/keywords": {
2482
+ "description": "Additional search keywords"
2483
+ },
2484
+ "sd-model-selector-item/disabled": {
2485
+ "description": "Whether the item is disabled",
2486
+ "type": "boolean"
2487
+ },
2488
+ "sd-model-selector-item/selected": {
2489
+ "description": "Whether the item is selected",
2490
+ "type": "boolean"
2491
+ },
2492
+ "sd-model-selector-item/shortcut": {
2493
+ "description": "Shortcut for selecting this item, using the VueUse useMagicKeys format, such as Alt+Shift+1",
2494
+ "type": "string"
2495
+ },
2496
+ "sd-model-selector-logo/provider": {
2497
+ "description": "Provider id; unknown ids use the local fallback logo"
2498
+ },
2499
+ "sd-model-selector-logo/alt": {
2500
+ "description": "Alternative text",
2501
+ "type": "string"
2502
+ },
2503
+ "sd-model-selector-logo/width": {
2504
+ "description": "Logo width"
2505
+ },
2506
+ "sd-model-selector-logo/height": {
2507
+ "description": "Logo height"
2508
+ },
2509
+ "sd-model-selector-trigger/disabled": {
2510
+ "description": "Whether the trigger is disabled",
2511
+ "type": "boolean"
2512
+ },
2513
+ "sd-model-selector/visible-change": {
2514
+ "description": "Emitted when visibility changes"
2515
+ },
2516
+ "sd-model-selector/select": {
2517
+ "description": "Emitted when the user selects a model"
2518
+ },
2519
+ "sd-model-selector/default-visible": {
2520
+ "description": "Whether the model selector is visible by default",
2521
+ "type": "boolean"
2522
+ },
2523
+ "sd-model-selector/close-on-select": {
2524
+ "description": "Whether to close after selecting a model",
2525
+ "type": "boolean"
2526
+ },
2527
+ "sd-model-selector/reset-query-on-close": {
2528
+ "description": "Whether to reset the query when closed",
2529
+ "type": "boolean"
2530
+ },
2436
2531
  "sd-overflow-list/change": {
2437
2532
  "description": "Triggered when the overflow quantity changes"
2438
2533
  },