`,通过 API/回调读写值
+3. 增量迁移:每个使用点独立迁移,逐一验证
+
+### 涉及的功能区域
+1. **属性名称自动补全** — `attribute_autocomplete.ts` → `attribute_detail.ts`、`RelationMap.tsx`
+2. **标签值自动补全** — `attribute_autocomplete.ts` → `attribute_detail.ts`
+3. **笔记搜索自动补全** — `note_autocomplete.ts` → `NoteAutocomplete.tsx`、`attribute_detail.ts`
+4. **关闭弹出窗口** — `dialog.ts`、`entrypoints.ts`、`tab_manager.ts`
+5. **CKEditor 提及** — 不使用 autocomplete.js,**无需迁移**
+
+---
+
+## 迁移步骤
+
+### Step 0: 安装新依赖 ✅ 完成
+**文件变更:**
+- `apps/client/package.json` — 添加 `@algolia/autocomplete-js@1.19.6`,暂时保留 `autocomplete.js`
+
+**验证方式:**
+- ✅ 新依赖安装成功
+
+---
+
+### Step 1: 迁移属性名称自动补全
+**文件变更:**
+- `apps/client/src/services/attribute_autocomplete.ts` — `initAttributeNameAutocomplete()` 改为直接调用 `autocomplete()`
+- `apps/client/src/widgets/attribute_widgets/attribute_detail.ts` — 属性名称输入框从 `
` 容器,调整值读写
+- `apps/client/src/widgets/type_widgets/relation_map/RelationMap.tsx` — 关系名输入调整
+
+**说明:**
+属性名称补全是最简单的场景。变更模式:
+1. HTML 模板中的 `
` → `
`
+2. `initAttributeNameAutocomplete()` 接收容器元素,调用 `autocomplete({ container, getSources })`
+3. 消费者通过返回的 `api` 对象(或回调)获取选中的值
+4. 为 `autocomplete-js` 生成的 `
` 添加 `form-control` 等样式类
+
+**验证方式:**
+- 打开一个笔记 → 点击属性面板 → 点击属性名称输入框 → 应能看到自动补全的属性名称列表
+- 选择一个名称后,值应正确填入
+
+---
+
+### Step 2: 迁移标签值自动补全
+**文件变更:**
+- `apps/client/src/services/attribute_autocomplete.ts` — `initLabelValueAutocomplete()` 改为直接调用 `autocomplete()`
+- `apps/client/src/widgets/attribute_widgets/attribute_detail.ts` — 标签值输入框同步调整
+
+**说明:**
+与 Step 1 类似,但标签值补全有一个特殊点:每次 focus 都会重新初始化(因为属性名可能变了,需要重新获取可选值列表)。
+
+**验证方式:**
+- 打开属性面板 → 输入一个标签名 → 切换到值输入框 → 应能看到该标签的已有值列表
+
+---
+
+### Step 3: 迁移笔记搜索自动补全核心
+**文件变更:**
+- `apps/client/src/services/note_autocomplete.ts` — `initNoteAutocomplete()` 改为直接调用 `autocomplete()`
+
+**说明:**
+这是迁移中最复杂的部分,`initNoteAutocomplete()` 包含:
+- 复杂的 source 函数(带防抖、IME 处理)
+- 自定义 suggestion 模板(图标、路径高亮)
+- 多种选择类型分发(笔记、外部链接、命令)
+- `autocomplete("val", ...)` 等操作性 API 调用
+- 附带的辅助按钮(清除、最近笔记、全文搜索、跳转按钮)
+
+消费者通过自定义 jQuery 事件(`autocomplete:noteselected` 等)接收结果,需要保持这些事件或改为回调。
+
+**验证方式:**
+- 搜索栏 → 输入笔记名称 → 应能看到搜索结果
+- 选择结果 → 应正确跳转到对应笔记
+- 命令面板(`>` 前缀)正常工作
+- 中文输入法不应中途触发搜索
+- Shift+Enter 全文搜索、Ctrl+Enter 搜索笔记
+
+---
+
+### Step 4: 迁移辅助函数
+**文件变更:**
+- `apps/client/src/services/note_autocomplete.ts` — `clearText`, `setText`, `showRecentNotes` 等函数
+
+**说明:**
+这些函数使用旧库的操作 API(`$el.autocomplete("val", value)` 等),需要改为新库的 `api.setQuery()` / `api.setIsOpen()` / `api.refresh()`。
+
+**验证方式:**
+- 最近笔记按钮 → 下拉菜单正常打开
+- 清除按钮 → 输入框被清空
+- Shift+Enter → 触发全文搜索
+
+---
+
+### Step 5: 迁移 `NoteAutocomplete.tsx` (React/Preact 组件)
+**文件变更:**
+- `apps/client/src/widgets/react/NoteAutocomplete.tsx` — 传入容器 `
`,管理 `api` 生命周期
+
+**验证方式:**
+- 关系属性的目标笔记选择正常工作
+- `noteId` 和 `text` props 的动态更新正确
+
+---
+
+### Step 6: 迁移"关闭弹窗"逻辑 + `attribute_detail.ts` 引用
+**文件变更:**
+- `apps/client/src/services/dialog.ts` — 替换 `$(".aa-input").autocomplete("close")`
+- `apps/client/src/components/entrypoints.ts` — 替换 `$(".aa-input").autocomplete("close")`
+- `apps/client/src/components/tab_manager.ts` — 替换 `$(".aa-input").autocomplete("close")`
+- `apps/client/src/widgets/attribute_widgets/attribute_detail.ts` — 更新 `.algolia-autocomplete` 选择器
+
+**说明:**
+需要一个全局的"关闭所有 autocomplete"机制。方案:维护一个全局 `Set
`,在各处调用时遍历关闭。可以放在 `note_autocomplete.ts` 中导出。
+
+**验证方式:**
+- autocomplete 弹窗打开时切换标签页 → 弹窗自动关闭
+- autocomplete 弹窗打开时打开对话框 → 弹窗自动关闭
+- 点击 autocomplete 下拉菜单时属性面板不应关闭
+
+---
+
+### Step 7: 更新 CSS 样式
+**文件变更:**
+- `apps/client/src/stylesheets/style.css`(第 895-961 行)
+
+**说明:**
+新库使用的 CSS 类名:
+- `.aa-Autocomplete` — 容器
+- `.aa-Form` — 搜索表单(含 input)
+- `.aa-Input` — 输入框
+- `.aa-Panel` — 下拉面板
+- `.aa-List` — 列表
+- `.aa-Item` — 列表项
+- `.aa-Item[aria-selected="true"]` — 选中项
+
+**验证方式:**
+- 下拉菜单样式正常(亮色/暗色模式)
+- 选中项高亮正确
+
+---
+
+### Step 8: 更新类型声明
+**文件变更:**
+- `apps/client/src/types.d.ts` — 移除 `AutoCompleteConfig`、`AutoCompleteArg`、jQuery `.autocomplete()` 方法
+
+**验证方式:**
+- TypeScript 编译无错误
+
+---
+
+### Step 9: 移除旧库和 Polyfill
+**文件变更:**
+- `apps/client/package.json` — 移除 `"autocomplete.js": "0.38.1"`
+- `apps/client/src/desktop.ts` — 移除 `import "autocomplete.js/index_jquery.js";`
+- `apps/client/src/mobile.ts` — 移除 `import "autocomplete.js/index_jquery.js";`
+- `apps/client/src/runtime.ts` — 移除 jQuery polyfill
+- `apps/client/src/index.ts` — 移除 jQuery polyfill
+
+**验证方式:**
+- 完整回归测试
+- 构建无错误
+
+---
+
+### Step 10: 更新 E2E 测试
+**文件变更:**
+- `apps/server-e2e/src/support/app.ts`
+- `apps/server-e2e/src/layout/split_pane.spec.ts`
+
+**验证方式:**
+- E2E 测试全部通过
+
+---
+
+## 依赖关系图
+
+```
+Step 0 (安装新库) ✅
+ ├── Step 1 (属性名称 autocomplete) ← 最简单,优先迁移
+ ├── Step 2 (标签值 autocomplete)
+ ├── Step 3 (笔记搜索 autocomplete 核心) ← 最复杂
+ │ ├── Step 4 (辅助函数)
+ │ └── Step 5 (React 组件)
+ ├── Step 6 (关闭弹窗 + attribute_detail 引用)
+ └── Step 7 (CSS 样式)
+ └── Step 8 (类型声明)
+ └── Step 9 (移除旧库) ← 最后执行
+ └── Step 10 (E2E 测试)
+```
+
+## 风险点
+1. **消费者代码需要改动**:新库要求传入容器而非 input,消费者需要调整 HTML 模板和值的读写方式。
+2. **自定义事件兼容性**:旧库通过 jQuery 事件与外部交互,新库使用回调,`attribute_detail.ts` 等消费者中的事件监听需要更新。
+3. **IME 输入处理**:新库原生支持 `ignoreCompositionEvents` 选项,但需要验证行为是否与旧的手动处理一致。
+4. **CSS 类名变化**:多处代码通过 `.aa-input`、`.algolia-autocomplete` 定位元素,需要统一更新为新的 `.aa-*` 类名。
+5. **全局关闭机制**:旧代码通过 `$(".aa-input").autocomplete("close")` 关闭所有实例,新库需要手动维护实例注册表。
diff --git a/apps/client/package.json b/apps/client/package.json
index 2e40fad30e..b842a0c654 100644
--- a/apps/client/package.json
+++ b/apps/client/package.json
@@ -16,6 +16,7 @@
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
},
"dependencies": {
+ "@algolia/autocomplete-js": "1.19.6",
"@excalidraw/excalidraw": "0.18.0",
"@fullcalendar/core": "6.1.20",
"@fullcalendar/daygrid": "6.1.20",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e1c42d835a..63ce1f4de1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -182,6 +182,9 @@ importers:
apps/client:
dependencies:
+ '@algolia/autocomplete-js':
+ specifier: 1.19.6
+ version: 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)
'@excalidraw/excalidraw':
specifier: 0.18.0
version: 0.18.0(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -1530,6 +1533,88 @@ packages:
rollup:
optional: true
+ '@algolia/abtesting@1.15.1':
+ resolution: {integrity: sha512-2yuIC48rUuHGhU1U5qJ9kJHaxYpJ0jpDHJVI5ekOxSMYXlH4+HP+pA31G820lsAznfmu2nzDV7n5RO44zIY1zw==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/autocomplete-core@1.19.6':
+ resolution: {integrity: sha512-6EoD7PeM2WBq5GY1jm0gGonDW2JVU4BaHT9tAwDcaPkc6gYIRZeY7X7aFuwdRvk9R/jwsh8sz4flDao0+Kua6g==}
+
+ '@algolia/autocomplete-js@1.19.6':
+ resolution: {integrity: sha512-rHYKT6P+2FZ1+7a1/JtWIuCmfioOt5eXsAcri6XTYsSutl3BIh8s2e98kbvjbhLfwEuuVDWtST1hdAY2pQdrKw==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.5.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
+
+ '@algolia/autocomplete-plugin-algolia-insights@1.19.6':
+ resolution: {integrity: sha512-VD53DBixhEwDvOB00D03DtBVhh5crgb1N0oH3QTscfYk4TpBH+CKrwmN/XrN/VdJAdP+4K6SgwLii/3OwM9dHw==}
+ peerDependencies:
+ search-insights: '>= 1 < 3'
+
+ '@algolia/autocomplete-preset-algolia@1.19.6':
+ resolution: {integrity: sha512-/uQlHGK5Q2x5Nvrp3W7JMg4YNGG/ygkHtQLTltDbkpd45wnhV9jUiQA6aCnBed9cq0BXhOJZRxh1zGVZ3yRhBg==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
+
+ '@algolia/autocomplete-shared@1.19.6':
+ resolution: {integrity: sha512-DG1n2B6XQw6DWB5veO4RuzQ/N2oGNpG+sSzGT7gUbi7WhF+jN57abcv2QhB5flXZ0NgddE1i6h7dZuQmYBEorQ==}
+ peerDependencies:
+ '@algolia/client-search': '>= 4.9.1 < 6'
+ algoliasearch: '>= 4.9.1 < 6'
+
+ '@algolia/client-abtesting@5.49.1':
+ resolution: {integrity: sha512-h6M7HzPin+45/l09q0r2dYmocSSt2MMGOOk5c4O5K/bBBlEwf1BKfN6z+iX4b8WXcQQhf7rgQwC52kBZJt/ZZw==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-analytics@5.49.1':
+ resolution: {integrity: sha512-048T9/Z8OeLmTk8h76QUqaNFp7Rq2VgS2Zm6Y2tNMYGQ1uNuzePY/udB5l5krlXll7ZGflyCjFvRiOtlPZpE9g==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-common@5.49.1':
+ resolution: {integrity: sha512-vp5/a9ikqvf3mn9QvHN8PRekn8hW34aV9eX+O0J5mKPZXeA6Pd5OQEh2ZWf7gJY6yyfTlLp5LMFzQUAU+Fpqpg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-insights@5.49.1':
+ resolution: {integrity: sha512-B6N7PgkvYrul3bntTz/l6uXnhQ2bvP+M7NqTcayh681tSqPaA5cJCUBp/vrP7vpPRpej4Eeyx2qz5p0tE/2N2g==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-personalization@5.49.1':
+ resolution: {integrity: sha512-v+4DN+lkYfBd01Hbnb9ZrCHe7l+mvihyx218INRX/kaCXROIWUDIT1cs3urQxfE7kXBFnLsqYeOflQALv/gA5w==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-query-suggestions@5.49.1':
+ resolution: {integrity: sha512-Un11cab6ZCv0W+Jiak8UktGIqoa4+gSNgEZNfG8m8eTsXGqwIEr370H3Rqwj87zeNSlFpH2BslMXJ/cLNS1qtg==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/client-search@5.49.1':
+ resolution: {integrity: sha512-Nt9hri7nbOo0RipAsGjIssHkpLMHHN/P7QqENywAq5TLsoYDzUyJGny8FEiD/9KJUxtGH8blGpMedilI6kK3rA==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/ingestion@1.49.1':
+ resolution: {integrity: sha512-b5hUXwDqje0Y4CpU6VL481DXgPgxpTD5sYMnfQTHKgUispGnaCLCm2/T9WbJo1YNUbX3iHtYDArp804eD6CmRQ==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/monitoring@1.49.1':
+ resolution: {integrity: sha512-bvrXwZ0WsL3rN6Q4m4QqxsXFCo6WAew7sAdrpMQMK4Efn4/W920r9ptOuckejOSSvyLr9pAWgC5rsHhR2FYuYw==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/recommend@5.49.1':
+ resolution: {integrity: sha512-h2yz3AGeGkQwNgbLmoe3bxYs8fac4An1CprKTypYyTU/k3Q+9FbIvJ8aS1DoBKaTjSRZVoyQS7SZQio6GaHbZw==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/requester-browser-xhr@5.49.1':
+ resolution: {integrity: sha512-2UPyRuUR/qpqSqH8mxFV5uBZWEpxhGPHLlx9Xf6OVxr79XO2ctzZQAhsmTZ6X22x+N8MBWpB9UEky7YU2HGFgA==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/requester-fetch@5.49.1':
+ resolution: {integrity: sha512-N+xlE4lN+wpuT+4vhNEwPVlrfN+DWAZmSX9SYhbz986Oq8AMsqdntOqUyiOXVxYsQtfLwmiej24vbvJGYv1Qtw==}
+ engines: {node: '>= 14.0.0'}
+
+ '@algolia/requester-node-http@5.49.1':
+ resolution: {integrity: sha512-zA5bkUOB5PPtTr182DJmajCiizHp0rCJQ0Chf96zNFvkdESKYlDeYA3tQ7r2oyHbu/8DiohAQ5PZ85edctzbXA==}
+ engines: {node: '>= 14.0.0'}
+
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
@@ -7518,6 +7603,10 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ algoliasearch@5.49.1:
+ resolution: {integrity: sha512-X3Pp2aRQhg4xUC6PQtkubn5NpRKuUPQ9FPDQlx36SmpFwwH2N0/tw4c+NXV3nw3PsgeUs+BuWGP0gjz3TvENLQ==}
+ engines: {node: '>= 14.0.0'}
+
alien-signals@0.4.14:
resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==}
@@ -10462,6 +10551,9 @@ packages:
hpack.js@2.1.6:
resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
+ htm@3.1.1:
+ resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==}
+
html-encoding-sniffer@2.0.1:
resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==}
engines: {node: '>=10'}
@@ -14406,6 +14498,9 @@ packages:
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+ search-insights@2.17.3:
+ resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==}
+
secure-compare@3.0.1:
resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==}
@@ -16489,6 +16584,130 @@ snapshots:
optionalDependencies:
rollup: 4.52.0
+ '@algolia/abtesting@1.15.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/autocomplete-core@1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)':
+ dependencies:
+ '@algolia/autocomplete-plugin-algolia-insights': 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)
+ '@algolia/autocomplete-shared': 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
+ - search-insights
+
+ '@algolia/autocomplete-js@1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)':
+ dependencies:
+ '@algolia/autocomplete-core': 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)
+ '@algolia/autocomplete-preset-algolia': 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)
+ '@algolia/autocomplete-shared': 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)
+ '@algolia/client-search': 5.49.1
+ algoliasearch: 5.49.1
+ htm: 3.1.1
+ preact: 10.28.4
+ transitivePeerDependencies:
+ - search-insights
+
+ '@algolia/autocomplete-plugin-algolia-insights@1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)(search-insights@2.17.3)':
+ dependencies:
+ '@algolia/autocomplete-shared': 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)
+ search-insights: 2.17.3
+ transitivePeerDependencies:
+ - '@algolia/client-search'
+ - algoliasearch
+
+ '@algolia/autocomplete-preset-algolia@1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)':
+ dependencies:
+ '@algolia/autocomplete-shared': 1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)
+ '@algolia/client-search': 5.49.1
+ algoliasearch: 5.49.1
+
+ '@algolia/autocomplete-shared@1.19.6(@algolia/client-search@5.49.1)(algoliasearch@5.49.1)':
+ dependencies:
+ '@algolia/client-search': 5.49.1
+ algoliasearch: 5.49.1
+
+ '@algolia/client-abtesting@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/client-analytics@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/client-common@5.49.1': {}
+
+ '@algolia/client-insights@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/client-personalization@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/client-query-suggestions@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/client-search@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/ingestion@1.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/monitoring@1.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/recommend@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
+ '@algolia/requester-browser-xhr@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+
+ '@algolia/requester-fetch@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+
+ '@algolia/requester-node-http@5.49.1':
+ dependencies:
+ '@algolia/client-common': 5.49.1
+
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
@@ -17281,6 +17500,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.4.0
'@ckeditor/ckeditor5-widget': 47.4.0
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-cloud-services@47.4.0':
dependencies:
@@ -17300,8 +17521,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-collaboration-core@47.4.0':
dependencies:
@@ -17501,6 +17720,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-editor-inline@47.4.0':
dependencies:
@@ -17534,8 +17755,6 @@ snapshots:
'@ckeditor/ckeditor5-table': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-emoji@47.4.0':
dependencies:
@@ -17592,8 +17811,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-export-word@47.4.0':
dependencies:
@@ -17618,6 +17835,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-font@47.4.0':
dependencies:
@@ -17753,8 +17972,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-indent@47.4.0':
dependencies:
@@ -17878,8 +18095,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-merge-fields@47.4.0':
dependencies:
@@ -17892,8 +18107,6 @@ snapshots:
'@ckeditor/ckeditor5-widget': 47.4.0
ckeditor5: 47.4.0
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-minimap@47.4.0':
dependencies:
@@ -17902,8 +18115,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-operations-compressor@47.4.0':
dependencies:
@@ -17958,8 +18169,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.4.0
'@ckeditor/ckeditor5-widget': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-pagination@47.4.0':
dependencies:
@@ -18023,8 +18232,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-restricted-editing@47.4.0':
dependencies:
@@ -18069,8 +18276,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-slash-command@47.4.0':
dependencies:
@@ -18083,8 +18288,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-source-editing-enhanced@47.4.0':
dependencies:
@@ -18111,8 +18314,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-special-characters@47.4.0':
dependencies:
@@ -18134,8 +18335,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-table@47.4.0':
dependencies:
@@ -18148,8 +18347,6 @@ snapshots:
'@ckeditor/ckeditor5-widget': 47.4.0
ckeditor5: 47.4.0
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-template@47.4.0':
dependencies:
@@ -18260,8 +18457,6 @@ snapshots:
'@ckeditor/ckeditor5-engine': 47.4.0
'@ckeditor/ckeditor5-utils': 47.4.0
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-widget@47.4.0':
dependencies:
@@ -18281,8 +18476,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.4.0
ckeditor5: 47.4.0
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@codemirror/autocomplete@6.18.6':
dependencies:
@@ -25148,6 +25341,23 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
+ algoliasearch@5.49.1:
+ dependencies:
+ '@algolia/abtesting': 1.15.1
+ '@algolia/client-abtesting': 5.49.1
+ '@algolia/client-analytics': 5.49.1
+ '@algolia/client-common': 5.49.1
+ '@algolia/client-insights': 5.49.1
+ '@algolia/client-personalization': 5.49.1
+ '@algolia/client-query-suggestions': 5.49.1
+ '@algolia/client-search': 5.49.1
+ '@algolia/ingestion': 1.49.1
+ '@algolia/monitoring': 1.49.1
+ '@algolia/recommend': 5.49.1
+ '@algolia/requester-browser-xhr': 5.49.1
+ '@algolia/requester-fetch': 5.49.1
+ '@algolia/requester-node-http': 5.49.1
+
alien-signals@0.4.14: {}
amator@1.1.0:
@@ -28989,6 +29199,8 @@ snapshots:
readable-stream: 2.3.8
wbuf: 1.7.3
+ htm@3.1.1: {}
+
html-encoding-sniffer@2.0.1:
dependencies:
whatwg-encoding: 1.0.5
@@ -33520,6 +33732,8 @@ snapshots:
scule@1.3.0: {}
+ search-insights@2.17.3: {}
+
secure-compare@3.0.1: {}
selderee@0.11.0: