@huyooo/ai-chat-frontend-vue 0.2.12 → 0.2.14
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.
- package/README.md +85 -77
- package/dist/_baseUniq-Berj5otS.js +477 -0
- package/dist/arc-D4b-De5i.js +83 -0
- package/dist/architecture-U656AL7Q-B1R4o7wt.js +5 -0
- package/dist/architectureDiagram-VXUJARFQ-0H1LzSrf.js +4668 -0
- package/dist/blockDiagram-VD42YOAC-Dd6DMjLf.js +2265 -0
- package/dist/c4Diagram-YG6GDRKO-c6mpIonb.js +1581 -0
- package/dist/channel-CQSBI1fo.js +5 -0
- package/dist/chunk-4BX2VUAB-CfWC7lTG.js +9 -0
- package/dist/chunk-55IACEB6-joM8m2Zv.js +8 -0
- package/dist/chunk-B4BG7PRW-DN94Y3mS.js +1376 -0
- package/dist/chunk-DI55MBZ5-CPRGoFPG.js +1382 -0
- package/dist/chunk-FMBD7UC4-dUKl2TcN.js +19 -0
- package/dist/chunk-QN33PNHL-o3WmqquO.js +20 -0
- package/dist/chunk-QZHKN3VN-Btf62lRF.js +15 -0
- package/dist/chunk-TZMSLE5B-QCPpnm8Y.js +64 -0
- package/dist/classDiagram-2ON5EDUG-ERF9RE9K.js +16 -0
- package/dist/classDiagram-v2-WZHVMYZB-ERF9RE9K.js +16 -0
- package/dist/clone-B_B1yyxj.js +8 -0
- package/dist/components/ChatPanel.vue.d.ts +11 -7
- package/dist/components/ChatPanel.vue.d.ts.map +1 -1
- package/dist/components/common/SettingsPanel.vue.d.ts +10 -1
- package/dist/components/common/SettingsPanel.vue.d.ts.map +1 -1
- package/dist/components/common/ToggleSwitch.vue.d.ts.map +1 -1
- package/dist/components/input/ChatInput.vue.d.ts +4 -1
- package/dist/components/input/ChatInput.vue.d.ts.map +1 -1
- package/dist/components/input/DropdownSelector.vue.d.ts +10 -0
- package/dist/components/input/DropdownSelector.vue.d.ts.map +1 -1
- package/dist/components/message/MessageBubble.vue.d.ts +2 -2
- package/dist/components/message/MessageBubble.vue.d.ts.map +1 -1
- package/dist/components/message/PartsRenderer.vue.d.ts +6 -0
- package/dist/components/message/PartsRenderer.vue.d.ts.map +1 -1
- package/dist/components/message/parts/CollapsibleCard.vue.d.ts.map +1 -1
- package/dist/components/message/parts/ImagePart.vue.d.ts.map +1 -1
- package/dist/components/message/parts/SearchPart.vue.d.ts.map +1 -1
- package/dist/components/message/parts/TextPart.vue.d.ts +3 -1
- package/dist/components/message/parts/TextPart.vue.d.ts.map +1 -1
- package/dist/components/message/parts/ToolCallPart.vue.d.ts +9 -4
- package/dist/components/message/parts/ToolCallPart.vue.d.ts.map +1 -1
- package/dist/components/message/parts/index.d.ts +5 -1
- package/dist/components/message/parts/index.d.ts.map +1 -1
- package/dist/components/message/parts/visual-predicate.d.ts +7 -0
- package/dist/components/message/parts/visual-predicate.d.ts.map +1 -0
- package/dist/components/message/parts/visual-render.d.ts +2 -0
- package/dist/components/message/parts/visual-render.d.ts.map +1 -0
- package/dist/components/message/parts/visual.d.ts +3 -0
- package/dist/components/message/parts/visual.d.ts.map +1 -0
- package/dist/composables/useChat.d.ts +34 -10
- package/dist/composables/useChat.d.ts.map +1 -1
- package/dist/composables/useImageUpload.d.ts +7 -0
- package/dist/composables/useImageUpload.d.ts.map +1 -1
- package/dist/composables/useVoiceInput.d.ts.map +1 -1
- package/dist/cose-bilkent-S5V4N54A-C-CkEnIH.js +2608 -0
- package/dist/cytoscape.esm-CjI2IsL8.js +18735 -0
- package/dist/dagre-6UL2VRFP-BbmZysl9.js +446 -0
- package/dist/defaultLocale-D7EN2tov.js +171 -0
- package/dist/diagram-PSM6KHXK-CMnope5e.js +533 -0
- package/dist/diagram-QEK2KX5R-Bc87skpo.js +221 -0
- package/dist/diagram-S2PKOQOG-BtkzC5-o.js +143 -0
- package/dist/erDiagram-Q2GNP2WA-CwQLdjh9.js +842 -0
- package/dist/flowDiagram-NV44I4VS-8ehMD0M4.js +1627 -0
- package/dist/ganttDiagram-JELNMOA3-dLX8Pbvy.js +2670 -0
- package/dist/gitGraph-F6HP7TQM-BBk5qfnx.js +5 -0
- package/dist/gitGraphDiagram-NY62KEGX-DG_fvWrq.js +712 -0
- package/dist/graph-B7BnGhuR.js +381 -0
- package/dist/index-Cr3tTH72.js +83883 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -56426
- package/dist/info-NVLQJR56-eZr6nVr1.js +5 -0
- package/dist/infoDiagram-WHAUD3N6-BcVYTft_.js +24 -0
- package/dist/init-DjUOC4st.js +16 -0
- package/dist/journeyDiagram-XKPGCS4Q-D4C72gYB.js +834 -0
- package/dist/kanban-definition-3W4ZIXB7-BuSjAlm6.js +721 -0
- package/dist/layout-LjYblgUu.js +1441 -0
- package/dist/linear-DtPqj295.js +259 -0
- package/dist/mermaid-parser.core-DdOZxjrw.js +15189 -0
- package/dist/min-DYbgfxu0.js +38 -0
- package/dist/mindmap-definition-VGOIOE7T-BZxsr4M_.js +787 -0
- package/dist/ordinal-DfAQgscy.js +61 -0
- package/dist/packet-BFZMPI3H-XfNBjRzf.js +5 -0
- package/dist/pie-7BOR55EZ-pJDdOv19.js +5 -0
- package/dist/pieDiagram-ADFJNKIX-DDwfWBNn.js +161 -0
- package/dist/quadrantDiagram-AYHSOK5B-Ddpxuto0.js +1024 -0
- package/dist/radar-NHE76QYJ-jE07d-4Z.js +5 -0
- package/dist/requirementDiagram-UZGBJVZJ-B_TLWQ-N.js +852 -0
- package/dist/sankeyDiagram-TZEHDZUN-C1TWrUpG.js +810 -0
- package/dist/sequenceDiagram-WL72ISMW-B8pqb5YX.js +2518 -0
- package/dist/stateDiagram-FKZM4ZOC-DwNT1ej6.js +263 -0
- package/dist/stateDiagram-v2-4FDKWEC3-CZQUitzd.js +16 -0
- package/dist/style.css +1 -1
- package/dist/timeline-definition-IT6M3QCI-BGdS1wvf.js +799 -0
- package/dist/treemap-KMMF4GRG-B_eEU0Q4.js +5 -0
- package/dist/types/index.d.ts +36 -37
- package/dist/types/index.d.ts.map +1 -1
- package/dist/xychartDiagram-PRI3JC2R-DtwXQqN4.js +1340 -0
- package/package.json +3 -3
- package/src/components/ChatPanel.vue +75 -13
- package/src/components/common/SettingsPanel.vue +169 -0
- package/src/components/input/ChatInput.vue +49 -34
- package/src/components/input/DropdownSelector.vue +175 -18
- package/src/components/message/MessageBubble.vue +61 -40
- package/src/components/message/PartsRenderer.vue +106 -27
- package/src/components/message/parts/CollapsibleCard.vue +8 -3
- package/src/components/message/parts/ImagePart.vue +0 -1
- package/src/components/message/parts/SearchPart.vue +2 -0
- package/src/components/message/parts/TextPart.vue +753 -11
- package/src/components/message/parts/ToolCallPart.vue +315 -246
- package/src/components/message/parts/index.ts +5 -1
- package/src/components/message/parts/visual-predicate.ts +43 -0
- package/src/components/message/parts/visual-render.ts +19 -0
- package/src/components/message/parts/visual.ts +12 -0
- package/src/composables/useChat.ts +560 -92
- package/src/composables/useImageUpload.ts +115 -11
- package/src/composables/useVoiceInput.ts +15 -1
- package/src/index.ts +6 -8
- package/src/styles.css +124 -0
- package/src/types/index.ts +52 -44
- package/dist/components/message/blocks/CodeBlock.vue.d.ts +0 -11
- package/dist/components/message/blocks/CodeBlock.vue.d.ts.map +0 -1
- package/dist/components/message/blocks/TextBlock.vue.d.ts +0 -7
- package/dist/components/message/blocks/TextBlock.vue.d.ts.map +0 -1
- package/dist/components/message/blocks/index.d.ts +0 -6
- package/dist/components/message/blocks/index.d.ts.map +0 -1
- package/dist/components/message/parts/ToolResultPart.vue.d.ts +0 -14
- package/dist/components/message/parts/ToolResultPart.vue.d.ts.map +0 -1
- package/dist/components/message/tool-results/DefaultToolResult.vue.d.ts +0 -4
- package/dist/components/message/tool-results/DefaultToolResult.vue.d.ts.map +0 -1
- package/dist/components/message/tool-results/SearchResults.vue.d.ts +0 -4
- package/dist/components/message/tool-results/SearchResults.vue.d.ts.map +0 -1
- package/dist/components/message/tool-results/WeatherCard.vue.d.ts +0 -4
- package/dist/components/message/tool-results/WeatherCard.vue.d.ts.map +0 -1
- package/dist/components/message/tool-results/index.d.ts +0 -7
- package/dist/components/message/tool-results/index.d.ts.map +0 -1
- package/src/components/message/ContentRenderer.vue +0 -61
- package/src/components/message/ToolResultRenderer.vue +0 -27
- package/src/components/message/blocks/CodeBlock.vue +0 -113
- package/src/components/message/blocks/TextBlock.vue +0 -21
- package/src/components/message/blocks/index.ts +0 -6
- package/src/components/message/parts/ToolResultPart.vue +0 -78
- package/src/components/message/tool-results/DefaultToolResult.vue +0 -45
- package/src/components/message/tool-results/SearchResults.vue +0 -133
- package/src/components/message/tool-results/WeatherCard.vue +0 -139
- package/src/components/message/tool-results/index.ts +0 -7
package/README.md
CHANGED
|
@@ -41,6 +41,7 @@ const adapter = createElectronAdapter()
|
|
|
41
41
|
:models="modelList"
|
|
42
42
|
:hide-header="false"
|
|
43
43
|
:welcome-config="welcomeConfig"
|
|
44
|
+
:part-renderers="partRenderers"
|
|
44
45
|
@close="handleClose"
|
|
45
46
|
/>
|
|
46
47
|
```
|
|
@@ -57,8 +58,7 @@ const adapter = createElectronAdapter()
|
|
|
57
58
|
| `hideHeader` | `boolean` | `false` | 是否隐藏标题栏 |
|
|
58
59
|
| `welcomeConfig` | `Partial<WelcomeConfig>` | - | 欢迎页配置 |
|
|
59
60
|
| `stepsExpandedType` | `'open' \| 'close' \| 'auto'` | `'auto'` | 执行步骤展开模式 |
|
|
60
|
-
| `
|
|
61
|
-
| `blockRenderers` | `Record<string, Component>` | `{}` | 自定义内容块渲染器 |
|
|
61
|
+
| `partRenderers` | `Record<string, Component>` | `{}` | 自定义 Part 类型渲染器 |
|
|
62
62
|
| `autoRunConfig` | `AutoRunConfig` | - | 自动运行配置 |
|
|
63
63
|
| `onClose` | `() => void` | - | 关闭回调 |
|
|
64
64
|
| `onToolComplete` | `(event: ToolCompleteEvent) => void` | - | 工具执行完成回调 |
|
|
@@ -201,15 +201,34 @@ const welcomeConfig = {
|
|
|
201
201
|
}
|
|
202
202
|
```
|
|
203
203
|
|
|
204
|
-
##
|
|
204
|
+
## 自定义 Part 渲染器(新架构)
|
|
205
205
|
|
|
206
|
-
|
|
206
|
+
新架构使用 `partRenderers` 为特定的 Part 类型注入自定义渲染组件。工具执行结果会直接生成对应类型的 Part(如 `weather`),前端根据 `part.type` 选择渲染组件。
|
|
207
|
+
|
|
208
|
+
### 工作原理
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
工具执行完成
|
|
212
|
+
↓
|
|
213
|
+
后端发送 tool_call_result { id, name, result, resultType: 'weather' }
|
|
214
|
+
↓
|
|
215
|
+
前端 useChat 处理:
|
|
216
|
+
1. 更新 tool_call 状态为 done
|
|
217
|
+
2. 根据 resultType 创建 { type: 'weather', ...result } Part
|
|
218
|
+
↓
|
|
219
|
+
PartsRenderer 渲染:
|
|
220
|
+
- 检查 partRenderers['weather']
|
|
221
|
+
- 找到 → 使用自定义 WeatherCard 渲染
|
|
222
|
+
- 没找到 → 显示 JSON fallback
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 使用示例
|
|
207
226
|
|
|
208
227
|
```vue
|
|
209
228
|
<template>
|
|
210
229
|
<ChatPanel
|
|
211
230
|
:adapter="adapter"
|
|
212
|
-
:
|
|
231
|
+
:part-renderers="partRenderers"
|
|
213
232
|
/>
|
|
214
233
|
</template>
|
|
215
234
|
|
|
@@ -218,96 +237,76 @@ import { markRaw, type Component } from 'vue'
|
|
|
218
237
|
import { ChatPanel } from '@huyooo/ai-chat-frontend-vue'
|
|
219
238
|
import CustomWeatherCard from './components/CustomWeatherCard.vue'
|
|
220
239
|
|
|
221
|
-
//
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
//
|
|
240
|
+
// Part 类型 -> 渲染组件映射
|
|
241
|
+
const partRenderers: Record<string, Component> = {
|
|
242
|
+
weather: markRaw(CustomWeatherCard), // weather 类型使用自定义卡片
|
|
243
|
+
// stock: markRaw(CustomStockCard),
|
|
225
244
|
}
|
|
226
245
|
</script>
|
|
227
246
|
```
|
|
228
247
|
|
|
229
248
|
### 创建自定义渲染组件
|
|
230
249
|
|
|
250
|
+
自定义组件直接接收 Part 的所有字段作为 props:
|
|
251
|
+
|
|
231
252
|
```vue
|
|
232
253
|
<!-- CustomWeatherCard.vue -->
|
|
233
254
|
<template>
|
|
234
255
|
<div class="weather-card">
|
|
235
|
-
<div class="city">{{
|
|
236
|
-
<div class="temp">{{
|
|
237
|
-
<div class="condition">{{
|
|
256
|
+
<div class="city">{{ city }}</div>
|
|
257
|
+
<div class="temp">{{ temperature }}°C</div>
|
|
258
|
+
<div class="condition">{{ condition }}</div>
|
|
238
259
|
<div class="details">
|
|
239
|
-
<span>湿度 {{
|
|
240
|
-
<span>{{
|
|
260
|
+
<span v-if="humidity">湿度 {{ humidity }}%</span>
|
|
261
|
+
<span v-if="wind">{{ wind }}</span>
|
|
241
262
|
</div>
|
|
242
263
|
</div>
|
|
243
264
|
</template>
|
|
244
265
|
|
|
245
266
|
<script setup lang="ts">
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
const props = defineProps<ToolRendererProps>()
|
|
250
|
-
|
|
251
|
-
const weather = computed<WeatherData>(() => {
|
|
252
|
-
if (typeof props.toolResult === 'object' && props.toolResult !== null) {
|
|
253
|
-
return props.toolResult as WeatherData
|
|
254
|
-
}
|
|
255
|
-
return { city: '未知', temperature: 0, condition: '未知' }
|
|
256
|
-
})
|
|
257
|
-
</script>
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### ToolRendererProps 接口
|
|
261
|
-
|
|
262
|
-
```typescript
|
|
263
|
-
interface ToolRendererProps {
|
|
264
|
-
toolName: string // 工具名称
|
|
265
|
-
toolArgs: object // 工具调用参数
|
|
266
|
-
toolResult: unknown // 工具返回结果
|
|
267
|
-
status: 'running' | 'done' | 'error' // 执行状态
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
### 内置数据类型
|
|
272
|
-
|
|
273
|
-
```typescript
|
|
274
|
-
// 天气数据
|
|
275
|
-
interface WeatherData {
|
|
267
|
+
// Props 直接是 WeatherPart 的字段
|
|
268
|
+
defineProps<{
|
|
269
|
+
type: 'weather' // Part 类型
|
|
276
270
|
city: string
|
|
277
271
|
temperature: number
|
|
278
272
|
condition: string
|
|
279
273
|
humidity?: number
|
|
280
274
|
wind?: string
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
title: string
|
|
286
|
-
url: string
|
|
287
|
-
snippet: string
|
|
288
|
-
}
|
|
275
|
+
reportTime?: string
|
|
276
|
+
province?: string
|
|
277
|
+
}>()
|
|
278
|
+
</script>
|
|
289
279
|
```
|
|
290
280
|
|
|
291
|
-
|
|
281
|
+
### 内置 Part 类型
|
|
292
282
|
|
|
293
|
-
|
|
283
|
+
| Part 类型 | 说明 | 内置渲染器 |
|
|
284
|
+
|-----------|------|-----------|
|
|
285
|
+
| `text` | 文本内容 | TextPart(支持 Markdown) |
|
|
286
|
+
| `thinking` | 思考过程 | ThinkingPart(可折叠卡片) |
|
|
287
|
+
| `search` | 搜索结果 | SearchPart |
|
|
288
|
+
| `tool_call` | 工具执行状态 | ToolCallPart(仅显示状态) |
|
|
289
|
+
| `image` | 图片 | ImagePart |
|
|
290
|
+
| `error` | 错误信息 | ErrorPart |
|
|
294
291
|
|
|
295
|
-
|
|
296
|
-
<template>
|
|
297
|
-
<ChatPanel
|
|
298
|
-
:adapter="adapter"
|
|
299
|
-
:block-renderers="blockRenderers"
|
|
300
|
-
/>
|
|
301
|
-
</template>
|
|
292
|
+
### 扩展 Part 类型
|
|
302
293
|
|
|
303
|
-
|
|
304
|
-
import { markRaw, type Component } from 'vue'
|
|
305
|
-
import CustomMathBlock from './components/CustomMathBlock.vue'
|
|
294
|
+
可以通过工具的 `resultType` 定义新的 Part 类型:
|
|
306
295
|
|
|
307
|
-
|
|
308
|
-
|
|
296
|
+
```typescript
|
|
297
|
+
// 后端工具定义
|
|
298
|
+
export function getWeatherTool(): ToolPlugin {
|
|
299
|
+
return tool({
|
|
300
|
+
name: 'get_weather',
|
|
301
|
+
description: '获取城市天气',
|
|
302
|
+
parameters: { city: { type: 'string' } },
|
|
303
|
+
resultType: 'weather', // ← 指定结果 Part 类型
|
|
304
|
+
execute: async (args, context) => {
|
|
305
|
+
// 返回值会自动转换为 { type: 'weather', ...result }
|
|
306
|
+
return { city: args.city, temperature: 25, condition: '晴' }
|
|
307
|
+
}
|
|
308
|
+
})
|
|
309
309
|
}
|
|
310
|
-
</script>
|
|
311
310
|
```
|
|
312
311
|
|
|
313
312
|
## useChat
|
|
@@ -333,26 +332,35 @@ const {
|
|
|
333
332
|
// 主组件
|
|
334
333
|
export { ChatPanel, WelcomeMessage, ChatInput, ChatHeader, MessageBubble }
|
|
335
334
|
|
|
336
|
-
//
|
|
337
|
-
export {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
335
|
+
// Part 渲染组件
|
|
336
|
+
export { PartsRenderer }
|
|
337
|
+
export {
|
|
338
|
+
TextPartComponent,
|
|
339
|
+
ThinkingPartComponent,
|
|
340
|
+
SearchPartComponent,
|
|
341
|
+
ToolCallPartComponent,
|
|
342
|
+
ImagePartComponent,
|
|
343
|
+
ErrorPartComponent,
|
|
344
|
+
}
|
|
341
345
|
|
|
342
346
|
// Composable
|
|
343
347
|
export { useChat }
|
|
344
348
|
|
|
345
|
-
// 类型
|
|
349
|
+
// 类型
|
|
346
350
|
export type {
|
|
347
351
|
WelcomeConfig,
|
|
348
352
|
WelcomeFeature,
|
|
349
353
|
WelcomeTask,
|
|
350
|
-
|
|
354
|
+
ContentPart,
|
|
355
|
+
TextPart,
|
|
356
|
+
ThinkingPart,
|
|
357
|
+
SearchPart,
|
|
358
|
+
ToolCallPart,
|
|
359
|
+
ImagePart,
|
|
360
|
+
ErrorPart,
|
|
361
|
+
WeatherPart,
|
|
351
362
|
WeatherData,
|
|
352
363
|
SearchResultItem,
|
|
353
|
-
ContentBlock,
|
|
354
|
-
TextBlock,
|
|
355
|
-
CodeBlock
|
|
356
364
|
}
|
|
357
365
|
|
|
358
366
|
// 工具函数 (来自 @huyooo/ai-chat-shared)
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
import { aV as L, br as ln, aE as A, aT as P, bs as gn, bt as dn, aD as W, bu as hn, bv as z, bw as pn, bm as An, bx as m, aW as N, a$ as U, b2 as T, by as _n, aZ as on, bz as wn, bp as On, aF as V, bn as vn, bA as I } from "./index-Cr3tTH72.js";
|
|
2
|
+
var Pn = "[object Symbol]";
|
|
3
|
+
function x(n) {
|
|
4
|
+
return typeof n == "symbol" || L(n) && ln(n) == Pn;
|
|
5
|
+
}
|
|
6
|
+
function yn(n, r) {
|
|
7
|
+
for (var e = -1, i = n == null ? 0 : n.length, f = Array(i); ++e < i; )
|
|
8
|
+
f[e] = r(n[e], e, n);
|
|
9
|
+
return f;
|
|
10
|
+
}
|
|
11
|
+
var B = P ? P.prototype : void 0, K = B ? B.toString : void 0;
|
|
12
|
+
function k(n) {
|
|
13
|
+
if (typeof n == "string")
|
|
14
|
+
return n;
|
|
15
|
+
if (A(n))
|
|
16
|
+
return yn(n, k) + "";
|
|
17
|
+
if (x(n))
|
|
18
|
+
return K ? K.call(n) : "";
|
|
19
|
+
var r = n + "";
|
|
20
|
+
return r == "0" && 1 / n == -1 / 0 ? "-0" : r;
|
|
21
|
+
}
|
|
22
|
+
function En() {
|
|
23
|
+
}
|
|
24
|
+
function bn(n, r) {
|
|
25
|
+
for (var e = -1, i = n == null ? 0 : n.length; ++e < i && r(n[e], e, n) !== !1; )
|
|
26
|
+
;
|
|
27
|
+
return n;
|
|
28
|
+
}
|
|
29
|
+
function cn(n, r, e, i) {
|
|
30
|
+
for (var f = n.length, t = e + -1; ++t < f; )
|
|
31
|
+
if (r(n[t], t, n))
|
|
32
|
+
return t;
|
|
33
|
+
return -1;
|
|
34
|
+
}
|
|
35
|
+
function Tn(n) {
|
|
36
|
+
return n !== n;
|
|
37
|
+
}
|
|
38
|
+
function Rn(n, r, e) {
|
|
39
|
+
for (var i = e - 1, f = n.length; ++i < f; )
|
|
40
|
+
if (n[i] === r)
|
|
41
|
+
return i;
|
|
42
|
+
return -1;
|
|
43
|
+
}
|
|
44
|
+
function In(n, r, e) {
|
|
45
|
+
return r === r ? Rn(n, r, e) : cn(n, Tn, e);
|
|
46
|
+
}
|
|
47
|
+
function Sn(n, r) {
|
|
48
|
+
var e = n == null ? 0 : n.length;
|
|
49
|
+
return !!e && In(n, r, 0) > -1;
|
|
50
|
+
}
|
|
51
|
+
function M(n) {
|
|
52
|
+
return W(n) ? gn(n) : dn(n);
|
|
53
|
+
}
|
|
54
|
+
var Ln = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, xn = /^\w*$/;
|
|
55
|
+
function $(n, r) {
|
|
56
|
+
if (A(n))
|
|
57
|
+
return !1;
|
|
58
|
+
var e = typeof n;
|
|
59
|
+
return e == "number" || e == "symbol" || e == "boolean" || n == null || x(n) ? !0 : xn.test(n) || !Ln.test(n) || r != null && n in Object(r);
|
|
60
|
+
}
|
|
61
|
+
var Mn = 500;
|
|
62
|
+
function $n(n) {
|
|
63
|
+
var r = hn(n, function(i) {
|
|
64
|
+
return e.size === Mn && e.clear(), i;
|
|
65
|
+
}), e = r.cache;
|
|
66
|
+
return r;
|
|
67
|
+
}
|
|
68
|
+
var Cn = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, Dn = /\\(\\)?/g, Fn = $n(function(n) {
|
|
69
|
+
var r = [];
|
|
70
|
+
return n.charCodeAt(0) === 46 && r.push(""), n.replace(Cn, function(e, i, f, t) {
|
|
71
|
+
r.push(f ? t.replace(Dn, "$1") : i || e);
|
|
72
|
+
}), r;
|
|
73
|
+
});
|
|
74
|
+
function Gn(n) {
|
|
75
|
+
return n == null ? "" : k(n);
|
|
76
|
+
}
|
|
77
|
+
function j(n, r) {
|
|
78
|
+
return A(n) ? n : $(n, r) ? [n] : Fn(Gn(n));
|
|
79
|
+
}
|
|
80
|
+
function R(n) {
|
|
81
|
+
if (typeof n == "string" || x(n))
|
|
82
|
+
return n;
|
|
83
|
+
var r = n + "";
|
|
84
|
+
return r == "0" && 1 / n == -1 / 0 ? "-0" : r;
|
|
85
|
+
}
|
|
86
|
+
function nn(n, r) {
|
|
87
|
+
r = j(r, n);
|
|
88
|
+
for (var e = 0, i = r.length; n != null && e < i; )
|
|
89
|
+
n = n[R(r[e++])];
|
|
90
|
+
return e && e == i ? n : void 0;
|
|
91
|
+
}
|
|
92
|
+
function mn(n, r, e) {
|
|
93
|
+
var i = n == null ? void 0 : nn(n, r);
|
|
94
|
+
return i === void 0 ? e : i;
|
|
95
|
+
}
|
|
96
|
+
function rn(n, r) {
|
|
97
|
+
for (var e = -1, i = r.length, f = n.length; ++e < i; )
|
|
98
|
+
n[f + e] = r[e];
|
|
99
|
+
return n;
|
|
100
|
+
}
|
|
101
|
+
var H = P ? P.isConcatSpreadable : void 0;
|
|
102
|
+
function Nn(n) {
|
|
103
|
+
return A(n) || z(n) || !!(H && n && n[H]);
|
|
104
|
+
}
|
|
105
|
+
function Hr(n, r, e, i, f) {
|
|
106
|
+
var t = -1, s = n.length;
|
|
107
|
+
for (e || (e = Nn), f || (f = []); ++t < s; ) {
|
|
108
|
+
var u = n[t];
|
|
109
|
+
e(u) ? rn(f, u) : i || (f[f.length] = u);
|
|
110
|
+
}
|
|
111
|
+
return f;
|
|
112
|
+
}
|
|
113
|
+
function Un(n, r, e, i) {
|
|
114
|
+
var f = -1, t = n == null ? 0 : n.length;
|
|
115
|
+
for (i && t && (e = n[++f]); ++f < t; )
|
|
116
|
+
e = r(e, n[f], f, n);
|
|
117
|
+
return e;
|
|
118
|
+
}
|
|
119
|
+
function en(n, r) {
|
|
120
|
+
for (var e = -1, i = n == null ? 0 : n.length, f = 0, t = []; ++e < i; ) {
|
|
121
|
+
var s = n[e];
|
|
122
|
+
r(s, e, n) && (t[f++] = s);
|
|
123
|
+
}
|
|
124
|
+
return t;
|
|
125
|
+
}
|
|
126
|
+
function Bn() {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
var Kn = Object.prototype, Hn = Kn.propertyIsEnumerable, Z = Object.getOwnPropertySymbols, Zn = Z ? function(n) {
|
|
130
|
+
return n == null ? [] : (n = Object(n), en(Z(n), function(r) {
|
|
131
|
+
return Hn.call(n, r);
|
|
132
|
+
}));
|
|
133
|
+
} : Bn;
|
|
134
|
+
function qn(n, r, e) {
|
|
135
|
+
var i = r(n);
|
|
136
|
+
return A(n) ? i : rn(i, e(n));
|
|
137
|
+
}
|
|
138
|
+
function q(n) {
|
|
139
|
+
return qn(n, M, Zn);
|
|
140
|
+
}
|
|
141
|
+
var Yn = "__lodash_hash_undefined__";
|
|
142
|
+
function Xn(n) {
|
|
143
|
+
return this.__data__.set(n, Yn), this;
|
|
144
|
+
}
|
|
145
|
+
function Jn(n) {
|
|
146
|
+
return this.__data__.has(n);
|
|
147
|
+
}
|
|
148
|
+
function y(n) {
|
|
149
|
+
var r = -1, e = n == null ? 0 : n.length;
|
|
150
|
+
for (this.__data__ = new pn(); ++r < e; )
|
|
151
|
+
this.add(n[r]);
|
|
152
|
+
}
|
|
153
|
+
y.prototype.add = y.prototype.push = Xn;
|
|
154
|
+
y.prototype.has = Jn;
|
|
155
|
+
function Qn(n, r) {
|
|
156
|
+
for (var e = -1, i = n == null ? 0 : n.length; ++e < i; )
|
|
157
|
+
if (r(n[e], e, n))
|
|
158
|
+
return !0;
|
|
159
|
+
return !1;
|
|
160
|
+
}
|
|
161
|
+
function tn(n, r) {
|
|
162
|
+
return n.has(r);
|
|
163
|
+
}
|
|
164
|
+
var Wn = 1, zn = 2;
|
|
165
|
+
function fn(n, r, e, i, f, t) {
|
|
166
|
+
var s = e & Wn, u = n.length, a = r.length;
|
|
167
|
+
if (u != a && !(s && a > u))
|
|
168
|
+
return !1;
|
|
169
|
+
var h = t.get(n), g = t.get(r);
|
|
170
|
+
if (h && g)
|
|
171
|
+
return h == r && g == n;
|
|
172
|
+
var l = -1, d = !0, o = e & zn ? new y() : void 0;
|
|
173
|
+
for (t.set(n, r), t.set(r, n); ++l < u; ) {
|
|
174
|
+
var p = n[l], _ = r[l];
|
|
175
|
+
if (i)
|
|
176
|
+
var w = s ? i(_, p, l, r, n, t) : i(p, _, l, n, r, t);
|
|
177
|
+
if (w !== void 0) {
|
|
178
|
+
if (w)
|
|
179
|
+
continue;
|
|
180
|
+
d = !1;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
if (o) {
|
|
184
|
+
if (!Qn(r, function(O, v) {
|
|
185
|
+
if (!tn(o, v) && (p === O || f(p, O, e, i, t)))
|
|
186
|
+
return o.push(v);
|
|
187
|
+
})) {
|
|
188
|
+
d = !1;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
} else if (!(p === _ || f(p, _, e, i, t))) {
|
|
192
|
+
d = !1;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return t.delete(n), t.delete(r), d;
|
|
197
|
+
}
|
|
198
|
+
function Vn(n) {
|
|
199
|
+
var r = -1, e = Array(n.size);
|
|
200
|
+
return n.forEach(function(i, f) {
|
|
201
|
+
e[++r] = [f, i];
|
|
202
|
+
}), e;
|
|
203
|
+
}
|
|
204
|
+
function C(n) {
|
|
205
|
+
var r = -1, e = Array(n.size);
|
|
206
|
+
return n.forEach(function(i) {
|
|
207
|
+
e[++r] = i;
|
|
208
|
+
}), e;
|
|
209
|
+
}
|
|
210
|
+
var kn = 1, jn = 2, nr = "[object Boolean]", rr = "[object Date]", er = "[object Error]", ir = "[object Map]", tr = "[object Number]", fr = "[object RegExp]", sr = "[object Set]", ur = "[object String]", ar = "[object Symbol]", lr = "[object ArrayBuffer]", gr = "[object DataView]", Y = P ? P.prototype : void 0, S = Y ? Y.valueOf : void 0;
|
|
211
|
+
function dr(n, r, e, i, f, t, s) {
|
|
212
|
+
switch (e) {
|
|
213
|
+
case gr:
|
|
214
|
+
if (n.byteLength != r.byteLength || n.byteOffset != r.byteOffset)
|
|
215
|
+
return !1;
|
|
216
|
+
n = n.buffer, r = r.buffer;
|
|
217
|
+
case lr:
|
|
218
|
+
return !(n.byteLength != r.byteLength || !t(new m(n), new m(r)));
|
|
219
|
+
case nr:
|
|
220
|
+
case rr:
|
|
221
|
+
case tr:
|
|
222
|
+
return An(+n, +r);
|
|
223
|
+
case er:
|
|
224
|
+
return n.name == r.name && n.message == r.message;
|
|
225
|
+
case fr:
|
|
226
|
+
case ur:
|
|
227
|
+
return n == r + "";
|
|
228
|
+
case ir:
|
|
229
|
+
var u = Vn;
|
|
230
|
+
case sr:
|
|
231
|
+
var a = i & kn;
|
|
232
|
+
if (u || (u = C), n.size != r.size && !a)
|
|
233
|
+
return !1;
|
|
234
|
+
var h = s.get(n);
|
|
235
|
+
if (h)
|
|
236
|
+
return h == r;
|
|
237
|
+
i |= jn, s.set(n, r);
|
|
238
|
+
var g = fn(u(n), u(r), i, f, t, s);
|
|
239
|
+
return s.delete(n), g;
|
|
240
|
+
case ar:
|
|
241
|
+
if (S)
|
|
242
|
+
return S.call(n) == S.call(r);
|
|
243
|
+
}
|
|
244
|
+
return !1;
|
|
245
|
+
}
|
|
246
|
+
var hr = 1, pr = Object.prototype, Ar = pr.hasOwnProperty;
|
|
247
|
+
function _r(n, r, e, i, f, t) {
|
|
248
|
+
var s = e & hr, u = q(n), a = u.length, h = q(r), g = h.length;
|
|
249
|
+
if (a != g && !s)
|
|
250
|
+
return !1;
|
|
251
|
+
for (var l = a; l--; ) {
|
|
252
|
+
var d = u[l];
|
|
253
|
+
if (!(s ? d in r : Ar.call(r, d)))
|
|
254
|
+
return !1;
|
|
255
|
+
}
|
|
256
|
+
var o = t.get(n), p = t.get(r);
|
|
257
|
+
if (o && p)
|
|
258
|
+
return o == r && p == n;
|
|
259
|
+
var _ = !0;
|
|
260
|
+
t.set(n, r), t.set(r, n);
|
|
261
|
+
for (var w = s; ++l < a; ) {
|
|
262
|
+
d = u[l];
|
|
263
|
+
var O = n[d], v = r[d];
|
|
264
|
+
if (i)
|
|
265
|
+
var G = s ? i(v, O, d, r, n, t) : i(O, v, d, n, r, t);
|
|
266
|
+
if (!(G === void 0 ? O === v || f(O, v, e, i, t) : G)) {
|
|
267
|
+
_ = !1;
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
w || (w = d == "constructor");
|
|
271
|
+
}
|
|
272
|
+
if (_ && !w) {
|
|
273
|
+
var E = n.constructor, b = r.constructor;
|
|
274
|
+
E != b && "constructor" in n && "constructor" in r && !(typeof E == "function" && E instanceof E && typeof b == "function" && b instanceof b) && (_ = !1);
|
|
275
|
+
}
|
|
276
|
+
return t.delete(n), t.delete(r), _;
|
|
277
|
+
}
|
|
278
|
+
var or = 1, X = "[object Arguments]", J = "[object Array]", c = "[object Object]", wr = Object.prototype, Q = wr.hasOwnProperty;
|
|
279
|
+
function Or(n, r, e, i, f, t) {
|
|
280
|
+
var s = A(n), u = A(r), a = s ? J : N(n), h = u ? J : N(r);
|
|
281
|
+
a = a == X ? c : a, h = h == X ? c : h;
|
|
282
|
+
var g = a == c, l = h == c, d = a == h;
|
|
283
|
+
if (d && U(n)) {
|
|
284
|
+
if (!U(r))
|
|
285
|
+
return !1;
|
|
286
|
+
s = !0, g = !1;
|
|
287
|
+
}
|
|
288
|
+
if (d && !g)
|
|
289
|
+
return t || (t = new T()), s || _n(n) ? fn(n, r, e, i, f, t) : dr(n, r, a, e, i, f, t);
|
|
290
|
+
if (!(e & or)) {
|
|
291
|
+
var o = g && Q.call(n, "__wrapped__"), p = l && Q.call(r, "__wrapped__");
|
|
292
|
+
if (o || p) {
|
|
293
|
+
var _ = o ? n.value() : n, w = p ? r.value() : r;
|
|
294
|
+
return t || (t = new T()), f(_, w, e, i, t);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return d ? (t || (t = new T()), _r(n, r, e, i, f, t)) : !1;
|
|
298
|
+
}
|
|
299
|
+
function D(n, r, e, i, f) {
|
|
300
|
+
return n === r ? !0 : n == null || r == null || !L(n) && !L(r) ? n !== n && r !== r : Or(n, r, e, i, D, f);
|
|
301
|
+
}
|
|
302
|
+
var vr = 1, Pr = 2;
|
|
303
|
+
function yr(n, r, e, i) {
|
|
304
|
+
var f = e.length, t = f;
|
|
305
|
+
if (n == null)
|
|
306
|
+
return !t;
|
|
307
|
+
for (n = Object(n); f--; ) {
|
|
308
|
+
var s = e[f];
|
|
309
|
+
if (s[2] ? s[1] !== n[s[0]] : !(s[0] in n))
|
|
310
|
+
return !1;
|
|
311
|
+
}
|
|
312
|
+
for (; ++f < t; ) {
|
|
313
|
+
s = e[f];
|
|
314
|
+
var u = s[0], a = n[u], h = s[1];
|
|
315
|
+
if (s[2]) {
|
|
316
|
+
if (a === void 0 && !(u in n))
|
|
317
|
+
return !1;
|
|
318
|
+
} else {
|
|
319
|
+
var g = new T(), l;
|
|
320
|
+
if (!(l === void 0 ? D(h, a, vr | Pr, i, g) : l))
|
|
321
|
+
return !1;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return !0;
|
|
325
|
+
}
|
|
326
|
+
function sn(n) {
|
|
327
|
+
return n === n && !on(n);
|
|
328
|
+
}
|
|
329
|
+
function Er(n) {
|
|
330
|
+
for (var r = M(n), e = r.length; e--; ) {
|
|
331
|
+
var i = r[e], f = n[i];
|
|
332
|
+
r[e] = [i, f, sn(f)];
|
|
333
|
+
}
|
|
334
|
+
return r;
|
|
335
|
+
}
|
|
336
|
+
function un(n, r) {
|
|
337
|
+
return function(e) {
|
|
338
|
+
return e == null ? !1 : e[n] === r && (r !== void 0 || n in Object(e));
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
function br(n) {
|
|
342
|
+
var r = Er(n);
|
|
343
|
+
return r.length == 1 && r[0][2] ? un(r[0][0], r[0][1]) : function(e) {
|
|
344
|
+
return e === n || yr(e, n, r);
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
function cr(n, r) {
|
|
348
|
+
return n != null && r in Object(n);
|
|
349
|
+
}
|
|
350
|
+
function Tr(n, r, e) {
|
|
351
|
+
r = j(r, n);
|
|
352
|
+
for (var i = -1, f = r.length, t = !1; ++i < f; ) {
|
|
353
|
+
var s = R(r[i]);
|
|
354
|
+
if (!(t = n != null && e(n, s)))
|
|
355
|
+
break;
|
|
356
|
+
n = n[s];
|
|
357
|
+
}
|
|
358
|
+
return t || ++i != f ? t : (f = n == null ? 0 : n.length, !!f && wn(f) && On(s, f) && (A(n) || z(n)));
|
|
359
|
+
}
|
|
360
|
+
function Rr(n, r) {
|
|
361
|
+
return n != null && Tr(n, r, cr);
|
|
362
|
+
}
|
|
363
|
+
var Ir = 1, Sr = 2;
|
|
364
|
+
function Lr(n, r) {
|
|
365
|
+
return $(n) && sn(r) ? un(R(n), r) : function(e) {
|
|
366
|
+
var i = mn(e, n);
|
|
367
|
+
return i === void 0 && i === r ? Rr(e, n) : D(r, i, Ir | Sr);
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
function xr(n) {
|
|
371
|
+
return function(r) {
|
|
372
|
+
return r == null ? void 0 : r[n];
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
function Mr(n) {
|
|
376
|
+
return function(r) {
|
|
377
|
+
return nn(r, n);
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
function $r(n) {
|
|
381
|
+
return $(n) ? xr(R(n)) : Mr(n);
|
|
382
|
+
}
|
|
383
|
+
function an(n) {
|
|
384
|
+
return typeof n == "function" ? n : n == null ? V : typeof n == "object" ? A(n) ? Lr(n[0], n[1]) : br(n) : $r(n);
|
|
385
|
+
}
|
|
386
|
+
function Cr(n, r) {
|
|
387
|
+
return n && vn(n, r, M);
|
|
388
|
+
}
|
|
389
|
+
function Dr(n, r) {
|
|
390
|
+
return function(e, i) {
|
|
391
|
+
if (e == null)
|
|
392
|
+
return e;
|
|
393
|
+
if (!W(e))
|
|
394
|
+
return n(e, i);
|
|
395
|
+
for (var f = e.length, t = -1, s = Object(e); ++t < f && i(s[t], t, s) !== !1; )
|
|
396
|
+
;
|
|
397
|
+
return e;
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
var F = Dr(Cr);
|
|
401
|
+
function Fr(n) {
|
|
402
|
+
return typeof n == "function" ? n : V;
|
|
403
|
+
}
|
|
404
|
+
function Zr(n, r) {
|
|
405
|
+
var e = A(n) ? bn : F;
|
|
406
|
+
return e(n, Fr(r));
|
|
407
|
+
}
|
|
408
|
+
function Gr(n, r) {
|
|
409
|
+
var e = [];
|
|
410
|
+
return F(n, function(i, f, t) {
|
|
411
|
+
r(i, f, t) && e.push(i);
|
|
412
|
+
}), e;
|
|
413
|
+
}
|
|
414
|
+
function qr(n, r) {
|
|
415
|
+
var e = A(n) ? en : Gr;
|
|
416
|
+
return e(n, an(r));
|
|
417
|
+
}
|
|
418
|
+
function mr(n, r, e, i, f) {
|
|
419
|
+
return f(n, function(t, s, u) {
|
|
420
|
+
e = i ? (i = !1, t) : r(e, t, s, u);
|
|
421
|
+
}), e;
|
|
422
|
+
}
|
|
423
|
+
function Yr(n, r, e) {
|
|
424
|
+
var i = A(n) ? Un : mr, f = arguments.length < 3;
|
|
425
|
+
return i(n, an(r), e, f, F);
|
|
426
|
+
}
|
|
427
|
+
var Nr = 1 / 0, Ur = I && 1 / C(new I([, -0]))[1] == Nr ? function(n) {
|
|
428
|
+
return new I(n);
|
|
429
|
+
} : En, Br = 200;
|
|
430
|
+
function Xr(n, r, e) {
|
|
431
|
+
var i = -1, f = Sn, t = n.length, s = !0, u = [], a = u;
|
|
432
|
+
if (t >= Br) {
|
|
433
|
+
var h = r ? null : Ur(n);
|
|
434
|
+
if (h)
|
|
435
|
+
return C(h);
|
|
436
|
+
s = !1, f = tn, a = new y();
|
|
437
|
+
} else
|
|
438
|
+
a = r ? [] : u;
|
|
439
|
+
n:
|
|
440
|
+
for (; ++i < t; ) {
|
|
441
|
+
var g = n[i], l = r ? r(g) : g;
|
|
442
|
+
if (g = g !== 0 ? g : 0, s && l === l) {
|
|
443
|
+
for (var d = a.length; d--; )
|
|
444
|
+
if (a[d] === l)
|
|
445
|
+
continue n;
|
|
446
|
+
r && a.push(l), u.push(g);
|
|
447
|
+
} else f(a, l, e) || (a !== u && a.push(l), u.push(g));
|
|
448
|
+
}
|
|
449
|
+
return u;
|
|
450
|
+
}
|
|
451
|
+
export {
|
|
452
|
+
F as a,
|
|
453
|
+
Hr as b,
|
|
454
|
+
yn as c,
|
|
455
|
+
an as d,
|
|
456
|
+
rn as e,
|
|
457
|
+
qn as f,
|
|
458
|
+
Zn as g,
|
|
459
|
+
q as h,
|
|
460
|
+
x as i,
|
|
461
|
+
bn as j,
|
|
462
|
+
M as k,
|
|
463
|
+
Xr as l,
|
|
464
|
+
qr as m,
|
|
465
|
+
Zr as n,
|
|
466
|
+
cn as o,
|
|
467
|
+
Fr as p,
|
|
468
|
+
Cr as q,
|
|
469
|
+
Yr as r,
|
|
470
|
+
Bn as s,
|
|
471
|
+
Tr as t,
|
|
472
|
+
j as u,
|
|
473
|
+
R as v,
|
|
474
|
+
nn as w,
|
|
475
|
+
Rr as x,
|
|
476
|
+
Gn as y
|
|
477
|
+
};
|