@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.
Files changed (144) hide show
  1. package/README.md +85 -77
  2. package/dist/_baseUniq-Berj5otS.js +477 -0
  3. package/dist/arc-D4b-De5i.js +83 -0
  4. package/dist/architecture-U656AL7Q-B1R4o7wt.js +5 -0
  5. package/dist/architectureDiagram-VXUJARFQ-0H1LzSrf.js +4668 -0
  6. package/dist/blockDiagram-VD42YOAC-Dd6DMjLf.js +2265 -0
  7. package/dist/c4Diagram-YG6GDRKO-c6mpIonb.js +1581 -0
  8. package/dist/channel-CQSBI1fo.js +5 -0
  9. package/dist/chunk-4BX2VUAB-CfWC7lTG.js +9 -0
  10. package/dist/chunk-55IACEB6-joM8m2Zv.js +8 -0
  11. package/dist/chunk-B4BG7PRW-DN94Y3mS.js +1376 -0
  12. package/dist/chunk-DI55MBZ5-CPRGoFPG.js +1382 -0
  13. package/dist/chunk-FMBD7UC4-dUKl2TcN.js +19 -0
  14. package/dist/chunk-QN33PNHL-o3WmqquO.js +20 -0
  15. package/dist/chunk-QZHKN3VN-Btf62lRF.js +15 -0
  16. package/dist/chunk-TZMSLE5B-QCPpnm8Y.js +64 -0
  17. package/dist/classDiagram-2ON5EDUG-ERF9RE9K.js +16 -0
  18. package/dist/classDiagram-v2-WZHVMYZB-ERF9RE9K.js +16 -0
  19. package/dist/clone-B_B1yyxj.js +8 -0
  20. package/dist/components/ChatPanel.vue.d.ts +11 -7
  21. package/dist/components/ChatPanel.vue.d.ts.map +1 -1
  22. package/dist/components/common/SettingsPanel.vue.d.ts +10 -1
  23. package/dist/components/common/SettingsPanel.vue.d.ts.map +1 -1
  24. package/dist/components/common/ToggleSwitch.vue.d.ts.map +1 -1
  25. package/dist/components/input/ChatInput.vue.d.ts +4 -1
  26. package/dist/components/input/ChatInput.vue.d.ts.map +1 -1
  27. package/dist/components/input/DropdownSelector.vue.d.ts +10 -0
  28. package/dist/components/input/DropdownSelector.vue.d.ts.map +1 -1
  29. package/dist/components/message/MessageBubble.vue.d.ts +2 -2
  30. package/dist/components/message/MessageBubble.vue.d.ts.map +1 -1
  31. package/dist/components/message/PartsRenderer.vue.d.ts +6 -0
  32. package/dist/components/message/PartsRenderer.vue.d.ts.map +1 -1
  33. package/dist/components/message/parts/CollapsibleCard.vue.d.ts.map +1 -1
  34. package/dist/components/message/parts/ImagePart.vue.d.ts.map +1 -1
  35. package/dist/components/message/parts/SearchPart.vue.d.ts.map +1 -1
  36. package/dist/components/message/parts/TextPart.vue.d.ts +3 -1
  37. package/dist/components/message/parts/TextPart.vue.d.ts.map +1 -1
  38. package/dist/components/message/parts/ToolCallPart.vue.d.ts +9 -4
  39. package/dist/components/message/parts/ToolCallPart.vue.d.ts.map +1 -1
  40. package/dist/components/message/parts/index.d.ts +5 -1
  41. package/dist/components/message/parts/index.d.ts.map +1 -1
  42. package/dist/components/message/parts/visual-predicate.d.ts +7 -0
  43. package/dist/components/message/parts/visual-predicate.d.ts.map +1 -0
  44. package/dist/components/message/parts/visual-render.d.ts +2 -0
  45. package/dist/components/message/parts/visual-render.d.ts.map +1 -0
  46. package/dist/components/message/parts/visual.d.ts +3 -0
  47. package/dist/components/message/parts/visual.d.ts.map +1 -0
  48. package/dist/composables/useChat.d.ts +34 -10
  49. package/dist/composables/useChat.d.ts.map +1 -1
  50. package/dist/composables/useImageUpload.d.ts +7 -0
  51. package/dist/composables/useImageUpload.d.ts.map +1 -1
  52. package/dist/composables/useVoiceInput.d.ts.map +1 -1
  53. package/dist/cose-bilkent-S5V4N54A-C-CkEnIH.js +2608 -0
  54. package/dist/cytoscape.esm-CjI2IsL8.js +18735 -0
  55. package/dist/dagre-6UL2VRFP-BbmZysl9.js +446 -0
  56. package/dist/defaultLocale-D7EN2tov.js +171 -0
  57. package/dist/diagram-PSM6KHXK-CMnope5e.js +533 -0
  58. package/dist/diagram-QEK2KX5R-Bc87skpo.js +221 -0
  59. package/dist/diagram-S2PKOQOG-BtkzC5-o.js +143 -0
  60. package/dist/erDiagram-Q2GNP2WA-CwQLdjh9.js +842 -0
  61. package/dist/flowDiagram-NV44I4VS-8ehMD0M4.js +1627 -0
  62. package/dist/ganttDiagram-JELNMOA3-dLX8Pbvy.js +2670 -0
  63. package/dist/gitGraph-F6HP7TQM-BBk5qfnx.js +5 -0
  64. package/dist/gitGraphDiagram-NY62KEGX-DG_fvWrq.js +712 -0
  65. package/dist/graph-B7BnGhuR.js +381 -0
  66. package/dist/index-Cr3tTH72.js +83883 -0
  67. package/dist/index.d.ts +7 -7
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +19 -56426
  70. package/dist/info-NVLQJR56-eZr6nVr1.js +5 -0
  71. package/dist/infoDiagram-WHAUD3N6-BcVYTft_.js +24 -0
  72. package/dist/init-DjUOC4st.js +16 -0
  73. package/dist/journeyDiagram-XKPGCS4Q-D4C72gYB.js +834 -0
  74. package/dist/kanban-definition-3W4ZIXB7-BuSjAlm6.js +721 -0
  75. package/dist/layout-LjYblgUu.js +1441 -0
  76. package/dist/linear-DtPqj295.js +259 -0
  77. package/dist/mermaid-parser.core-DdOZxjrw.js +15189 -0
  78. package/dist/min-DYbgfxu0.js +38 -0
  79. package/dist/mindmap-definition-VGOIOE7T-BZxsr4M_.js +787 -0
  80. package/dist/ordinal-DfAQgscy.js +61 -0
  81. package/dist/packet-BFZMPI3H-XfNBjRzf.js +5 -0
  82. package/dist/pie-7BOR55EZ-pJDdOv19.js +5 -0
  83. package/dist/pieDiagram-ADFJNKIX-DDwfWBNn.js +161 -0
  84. package/dist/quadrantDiagram-AYHSOK5B-Ddpxuto0.js +1024 -0
  85. package/dist/radar-NHE76QYJ-jE07d-4Z.js +5 -0
  86. package/dist/requirementDiagram-UZGBJVZJ-B_TLWQ-N.js +852 -0
  87. package/dist/sankeyDiagram-TZEHDZUN-C1TWrUpG.js +810 -0
  88. package/dist/sequenceDiagram-WL72ISMW-B8pqb5YX.js +2518 -0
  89. package/dist/stateDiagram-FKZM4ZOC-DwNT1ej6.js +263 -0
  90. package/dist/stateDiagram-v2-4FDKWEC3-CZQUitzd.js +16 -0
  91. package/dist/style.css +1 -1
  92. package/dist/timeline-definition-IT6M3QCI-BGdS1wvf.js +799 -0
  93. package/dist/treemap-KMMF4GRG-B_eEU0Q4.js +5 -0
  94. package/dist/types/index.d.ts +36 -37
  95. package/dist/types/index.d.ts.map +1 -1
  96. package/dist/xychartDiagram-PRI3JC2R-DtwXQqN4.js +1340 -0
  97. package/package.json +3 -3
  98. package/src/components/ChatPanel.vue +75 -13
  99. package/src/components/common/SettingsPanel.vue +169 -0
  100. package/src/components/input/ChatInput.vue +49 -34
  101. package/src/components/input/DropdownSelector.vue +175 -18
  102. package/src/components/message/MessageBubble.vue +61 -40
  103. package/src/components/message/PartsRenderer.vue +106 -27
  104. package/src/components/message/parts/CollapsibleCard.vue +8 -3
  105. package/src/components/message/parts/ImagePart.vue +0 -1
  106. package/src/components/message/parts/SearchPart.vue +2 -0
  107. package/src/components/message/parts/TextPart.vue +753 -11
  108. package/src/components/message/parts/ToolCallPart.vue +315 -246
  109. package/src/components/message/parts/index.ts +5 -1
  110. package/src/components/message/parts/visual-predicate.ts +43 -0
  111. package/src/components/message/parts/visual-render.ts +19 -0
  112. package/src/components/message/parts/visual.ts +12 -0
  113. package/src/composables/useChat.ts +560 -92
  114. package/src/composables/useImageUpload.ts +115 -11
  115. package/src/composables/useVoiceInput.ts +15 -1
  116. package/src/index.ts +6 -8
  117. package/src/styles.css +124 -0
  118. package/src/types/index.ts +52 -44
  119. package/dist/components/message/blocks/CodeBlock.vue.d.ts +0 -11
  120. package/dist/components/message/blocks/CodeBlock.vue.d.ts.map +0 -1
  121. package/dist/components/message/blocks/TextBlock.vue.d.ts +0 -7
  122. package/dist/components/message/blocks/TextBlock.vue.d.ts.map +0 -1
  123. package/dist/components/message/blocks/index.d.ts +0 -6
  124. package/dist/components/message/blocks/index.d.ts.map +0 -1
  125. package/dist/components/message/parts/ToolResultPart.vue.d.ts +0 -14
  126. package/dist/components/message/parts/ToolResultPart.vue.d.ts.map +0 -1
  127. package/dist/components/message/tool-results/DefaultToolResult.vue.d.ts +0 -4
  128. package/dist/components/message/tool-results/DefaultToolResult.vue.d.ts.map +0 -1
  129. package/dist/components/message/tool-results/SearchResults.vue.d.ts +0 -4
  130. package/dist/components/message/tool-results/SearchResults.vue.d.ts.map +0 -1
  131. package/dist/components/message/tool-results/WeatherCard.vue.d.ts +0 -4
  132. package/dist/components/message/tool-results/WeatherCard.vue.d.ts.map +0 -1
  133. package/dist/components/message/tool-results/index.d.ts +0 -7
  134. package/dist/components/message/tool-results/index.d.ts.map +0 -1
  135. package/src/components/message/ContentRenderer.vue +0 -61
  136. package/src/components/message/ToolResultRenderer.vue +0 -27
  137. package/src/components/message/blocks/CodeBlock.vue +0 -113
  138. package/src/components/message/blocks/TextBlock.vue +0 -21
  139. package/src/components/message/blocks/index.ts +0 -6
  140. package/src/components/message/parts/ToolResultPart.vue +0 -78
  141. package/src/components/message/tool-results/DefaultToolResult.vue +0 -45
  142. package/src/components/message/tool-results/SearchResults.vue +0 -133
  143. package/src/components/message/tool-results/WeatherCard.vue +0 -139
  144. 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
- | `toolRenderers` | `Record<string, Component>` | `{}` | 自定义工具结果渲染器 |
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
- 可以为特定工具注入自定义渲染组件,替代默认的 JSON 显示:
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
- :tool-renderers="toolRenderers"
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 toolRenderers: Record<string, Component> = {
223
- get_weather: markRaw(CustomWeatherCard),
224
- // search_web: markRaw(CustomSearchResults),
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">{{ weather.city }}</div>
236
- <div class="temp">{{ weather.temperature }}°C</div>
237
- <div class="condition">{{ weather.condition }}</div>
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>湿度 {{ weather.humidity }}%</span>
240
- <span>{{ weather.wind }}</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
- import { computed } from 'vue'
247
- import type { ToolRendererProps, WeatherData } from '@huyooo/ai-chat-shared'
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
- interface SearchResultItem {
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
- ```vue
296
- <template>
297
- <ChatPanel
298
- :adapter="adapter"
299
- :block-renderers="blockRenderers"
300
- />
301
- </template>
292
+ ### 扩展 Part 类型
302
293
 
303
- <script setup lang="ts">
304
- import { markRaw, type Component } from 'vue'
305
- import CustomMathBlock from './components/CustomMathBlock.vue'
294
+ 可以通过工具的 `resultType` 定义新的 Part 类型:
306
295
 
307
- const blockRenderers: Record<string, Component> = {
308
- math: markRaw(CustomMathBlock),
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 { ContentRenderer, TextBlock, CodeBlock }
338
-
339
- // 工具结果渲染组件
340
- export { ToolResultRenderer, DefaultToolResult, WeatherCard, SearchResults }
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
- // 类型 (来自 @huyooo/ai-chat-shared)
349
+ // 类型
346
350
  export type {
347
351
  WelcomeConfig,
348
352
  WelcomeFeature,
349
353
  WelcomeTask,
350
- ToolRendererProps,
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
+ };