@grackle-ai/web-components 0.115.1 → 0.116.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.
- package/.rush/temp/chunked-rush-logs/web-components._phase_build.chunks.jsonl +6 -6
- package/.rush/temp/chunked-rush-logs/web-components._phase_test.chunks.jsonl +26 -28
- package/.rush/temp/{689afee5625b24607e65ba3a6d3b279d5895784d.tar.log → f238c174d295031bec7f186733732e0fd7e4b9a5.tar.log} +55 -60
- package/.rush/temp/{689afee5625b24607e65ba3a6d3b279d5895784d.untar.log → f238c174d295031bec7f186733732e0fd7e4b9a5.untar.log} +2 -2
- package/.rush/temp/{e12a67384bc67b4cba24253105ba33ed0945c91d.tar.log → f5301e6a84109dcec06242d178df01e555a83456.tar.log} +2 -2
- package/.rush/temp/{e12a67384bc67b4cba24253105ba33ed0945c91d.untar.log → f5301e6a84109dcec06242d178df01e555a83456.untar.log} +2 -2
- package/.rush/temp/operation/_phase_build/all.log +6 -6
- package/.rush/temp/operation/_phase_build/log-chunks.jsonl +6 -6
- package/.rush/temp/operation/_phase_build/state.json +1 -1
- package/.rush/temp/operation/_phase_test/all.log +26 -28
- package/.rush/temp/operation/_phase_test/log-chunks.jsonl +26 -28
- package/.rush/temp/operation/_phase_test/state.json +1 -1
- package/.rush/temp/shrinkwrap-deps.json +3 -3
- package/README.md +2 -2
- package/dist/index.css +1 -1
- package/dist/index.js +9055 -9498
- package/package.json +2 -2
- package/rush-logs/web-components._phase_build.cache.log +1 -1
- package/rush-logs/web-components._phase_build.log +6 -6
- package/rush-logs/web-components._phase_test.cache.log +1 -1
- package/rush-logs/web-components._phase_test.log +26 -28
- package/src/components/index.ts +0 -3
- package/src/components/knowledge/KnowledgeDetailPanel.tsx +1 -4
- package/src/components/layout/AppNav.stories.tsx +3 -6
- package/src/components/layout/AppNav.tsx +3 -7
- package/src/components/layout/BottomStatusBar.tsx +4 -6
- package/src/components/lists/index.ts +0 -1
- package/src/components/panels/KeyboardShortcutsPanel.tsx +0 -1
- package/src/components/panels/index.ts +0 -1
- package/src/components/personas/McpToolSelector.stories.tsx +12 -12
- package/src/components/tools/ToolCard.stories.tsx +0 -26
- package/src/components/tools/ToolCard.tsx +0 -3
- package/src/components/tools/ToolSearchCard.stories.tsx +8 -8
- package/src/components/tools/WorkpadCard.stories.tsx +5 -5
- package/src/components/tools/classifyTool.test.ts +0 -1
- package/src/components/tools/classifyTool.ts +2 -7
- package/src/context/GrackleContextTypes.ts +1 -3
- package/src/hooks/types.ts +1 -44
- package/src/index.ts +4 -8
- package/src/mocks/MockGrackleProvider.tsx +0 -75
- package/src/mocks/mockData.ts +8 -99
- package/src/test-utils/storybook-helpers.ts +0 -19
- package/src/utils/breadcrumbs.test.ts +0 -43
- package/src/utils/breadcrumbs.ts +1 -37
- package/src/utils/navigation.ts +1 -20
- package/src/utils/route-config.test.ts +0 -31
- package/temp/build/lint/_eslint-5eVG3S6w.json +30 -54
- package/src/components/lists/FindingsNav.module.scss +0 -126
- package/src/components/lists/FindingsNav.tsx +0 -146
- package/src/components/panels/FindingsPanel.module.scss +0 -94
- package/src/components/panels/FindingsPanel.stories.tsx +0 -109
- package/src/components/panels/FindingsPanel.tsx +0 -76
- package/src/components/tools/FindingCard.stories.tsx +0 -124
- package/src/components/tools/FindingCard.tsx +0 -178
- package/src/utils/findingCategory.ts +0 -33
|
@@ -5,32 +5,30 @@
|
|
|
5
5
|
{"kind":"O","text":"\n"}
|
|
6
6
|
{"kind":"O","text":"\u001b[1m\u001b[46m RUN \u001b[49m\u001b[22m \u001b[36mv3.2.4 \u001b[39m\u001b[90m/home/runner/work/grackle/grackle/packages/web-components\u001b[39m\n"}
|
|
7
7
|
{"kind":"O","text":"\n"}
|
|
8
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/sessionEvents.test.ts \u001b[2m(\u001b[22m\u001b[2m14 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m
|
|
9
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/eventContent.test.ts \u001b[2m(\u001b[22m\u001b[2m38 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m
|
|
10
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/dashboard.test.ts \u001b[2m(\u001b[22m\u001b[2m4 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m
|
|
11
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/
|
|
12
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/
|
|
13
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/breadcrumbs.test.ts \u001b[2m(\u001b[22m\u001b[
|
|
14
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/scrollUtils.test.ts \u001b[2m(\u001b[22m\u001b[2m11 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m
|
|
15
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/tools/classifyTool.test.ts \u001b[2m(\u001b[22m\u001b[2m6 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m
|
|
16
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/
|
|
17
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/
|
|
18
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/display/extractText.test.tsx \u001b[2m(\u001b[22m\u001b[2m8 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m
|
|
8
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/sessionEvents.test.ts \u001b[2m(\u001b[22m\u001b[2m14 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 46\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
9
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/eventContent.test.ts \u001b[2m(\u001b[22m\u001b[2m38 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 129\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
10
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/dashboard.test.ts \u001b[2m(\u001b[22m\u001b[2m4 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 9\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
11
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/streamCoordination.test.ts \u001b[2m(\u001b[22m\u001b[2m10 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 20\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
12
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/route-config.test.ts \u001b[2m(\u001b[22m\u001b[2m16 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 27\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
13
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/breadcrumbs.test.ts \u001b[2m(\u001b[22m\u001b[2m15 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 15\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
14
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/scrollUtils.test.ts \u001b[2m(\u001b[22m\u001b[2m11 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 21\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
15
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/tools/classifyTool.test.ts \u001b[2m(\u001b[22m\u001b[2m6 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 11\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
16
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/tools/toolCardHelpers.test.ts \u001b[2m(\u001b[22m\u001b[2m10 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 25\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
17
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/assetUrl.test.ts \u001b[2m(\u001b[22m\u001b[2m3 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 14\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
18
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/display/extractText.test.tsx \u001b[2m(\u001b[22m\u001b[2m8 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 22\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
19
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/hooks/useEventSelection.test.ts \u001b[2m(\u001b[22m\u001b[2m13 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 180\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
19
20
|
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/editable/useEditableField.test.tsx \u001b[2m(\u001b[22m\u001b[2m17 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 159\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
20
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/
|
|
21
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/
|
|
22
|
-
{"kind":"O","text":"
|
|
23
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/notifications/UpdateBanner.test.tsx \u001b[2m(\u001b[22m\u001b[2m4 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 124\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
24
|
-
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/grackleHostStyleVariables.test.ts \u001b[2m(\u001b[22m\u001b[2m2 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[33m 465\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
25
|
-
{"kind":"O","text":" \u001b[33m\u001b[2m✓\u001b[22m\u001b[39m grackleHostStyleVariables\u001b[2m > \u001b[22malways returns the MCP-standard fallback variables \u001b[33m 443\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
21
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/notifications/UpdateBanner.test.tsx \u001b[2m(\u001b[22m\u001b[2m4 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 95\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
22
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/utils/grackleHostStyleVariables.test.ts \u001b[2m(\u001b[22m\u001b[2m2 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 195\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
23
|
+
{"kind":"O","text":" \u001b[32m✓\u001b[39m src/components/display/McpAppWidget.test.tsx \u001b[2m(\u001b[22m\u001b[2m3 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[33m 361\u001b[2mms\u001b[22m\u001b[39m\n"}
|
|
26
24
|
{"kind":"O","text":"\n"}
|
|
27
25
|
{"kind":"O","text":"\u001b[2m Test Files \u001b[22m \u001b[1m\u001b[32m16 passed\u001b[39m\u001b[22m\u001b[90m (16)\u001b[39m\n"}
|
|
28
|
-
{"kind":"O","text":"\u001b[2m Tests \u001b[22m \u001b[1m\u001b[
|
|
29
|
-
{"kind":"O","text":"\u001b[2m Start at \u001b[22m
|
|
30
|
-
{"kind":"O","text":"\u001b[2m Duration \u001b[22m
|
|
26
|
+
{"kind":"O","text":"\u001b[2m Tests \u001b[22m \u001b[1m\u001b[32m174 passed\u001b[39m\u001b[22m\u001b[90m (174)\u001b[39m\n"}
|
|
27
|
+
{"kind":"O","text":"\u001b[2m Start at \u001b[22m 23:49:50\n"}
|
|
28
|
+
{"kind":"O","text":"\u001b[2m Duration \u001b[22m 15.38s\u001b[2m (transform 2.97s, setup 0ms, collect 14.70s, tests 1.33s, environment 12.10s, prepare 5.21s)\u001b[22m\n"}
|
|
31
29
|
{"kind":"O","text":"\n"}
|
|
32
30
|
{"kind":"O","text":"[test:vitest] Vitest completed.\n"}
|
|
33
|
-
{"kind":"O","text":"[test:storybook-test] Starting Storybook static server on port
|
|
31
|
+
{"kind":"O","text":"[test:storybook-test] Starting Storybook static server on port 45217...\n"}
|
|
34
32
|
{"kind":"O","text":"[test:storybook-test] Storybook server ready. Running interaction tests...\n"}
|
|
35
33
|
{"kind":"O","text":"jest-haste-map: duplicate manual mock found: adapter-manager\n"}
|
|
36
34
|
{"kind":"O","text":" The following files share their name; please delete one of them:\n"}
|
|
@@ -97,16 +95,16 @@
|
|
|
97
95
|
{"kind":"O","text":" * <rootDir>/packages/server/dist/__mocks__/stream-hub.js\n"}
|
|
98
96
|
{"kind":"O","text":" * <rootDir>/packages/server/src/__mocks__/stream-hub.ts\n"}
|
|
99
97
|
{"kind":"O","text":"\n"}
|
|
100
|
-
{"kind":"O","text":"jest-haste-map: duplicate manual mock found: token-push\n"}
|
|
101
|
-
{"kind":"O","text":" The following files share their name; please delete one of them:\n"}
|
|
102
|
-
{"kind":"O","text":" * <rootDir>/packages/server/dist/__mocks__/token-push.js\n"}
|
|
103
|
-
{"kind":"O","text":" * <rootDir>/packages/server/src/__mocks__/token-push.ts\n"}
|
|
104
|
-
{"kind":"O","text":"\n"}
|
|
105
98
|
{"kind":"O","text":"jest-haste-map: duplicate manual mock found: stream-registry\n"}
|
|
106
99
|
{"kind":"O","text":" The following files share their name; please delete one of them:\n"}
|
|
107
100
|
{"kind":"O","text":" * <rootDir>/packages/server/dist/__mocks__/stream-registry.js\n"}
|
|
108
101
|
{"kind":"O","text":" * <rootDir>/packages/server/src/__mocks__/stream-registry.ts\n"}
|
|
109
102
|
{"kind":"O","text":"\n"}
|
|
103
|
+
{"kind":"O","text":"jest-haste-map: duplicate manual mock found: token-push\n"}
|
|
104
|
+
{"kind":"O","text":" The following files share their name; please delete one of them:\n"}
|
|
105
|
+
{"kind":"O","text":" * <rootDir>/packages/server/dist/__mocks__/token-push.js\n"}
|
|
106
|
+
{"kind":"O","text":" * <rootDir>/packages/server/src/__mocks__/token-push.ts\n"}
|
|
107
|
+
{"kind":"O","text":"\n"}
|
|
110
108
|
{"kind":"O","text":"jest-haste-map: duplicate manual mock found: utils/exec\n"}
|
|
111
109
|
{"kind":"O","text":" The following files share their name; please delete one of them:\n"}
|
|
112
110
|
{"kind":"O","text":" * <rootDir>/packages/server/dist/__mocks__/utils/exec.js\n"}
|
|
@@ -123,5 +121,5 @@
|
|
|
123
121
|
{"kind":"O","text":" * <rootDir>/packages/server/src/__mocks__/utils/network.ts\n"}
|
|
124
122
|
{"kind":"O","text":"\n"}
|
|
125
123
|
{"kind":"O","text":"[test:storybook-test] Storybook interaction tests completed.\n"}
|
|
126
|
-
{"kind":"O","text":" ---- test finished (
|
|
127
|
-
{"kind":"O","text":"-------------------- Finished (
|
|
124
|
+
{"kind":"O","text":" ---- test finished (74.932s) ---- \n"}
|
|
125
|
+
{"kind":"O","text":"-------------------- Finished (74.942s) --------------------\n"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"../../packages/web-components": "../../packages/web-components:
|
|
2
|
+
"../../packages/web-components": "../../packages/web-components:4fN3IfsmylXCmxjNQKnJkMbx1P2YrbxPRRBA37MI4gU=:",
|
|
3
3
|
"@adobe/css-tools@4.4.4": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==",
|
|
4
4
|
"@asamuzakjp/css-color@5.0.1": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==",
|
|
5
5
|
"@asamuzakjp/dom-selector@7.0.4": "sha512-jXR6x4AcT3eIrS2fSNAwJpwirOkGcd+E7F7CP3zjdTqz9B/2huHOL8YJZBgekKwLML+u7qB/6P1LXQuMScsx0w==",
|
|
@@ -119,8 +119,8 @@
|
|
|
119
119
|
"@jsep-plugin/assignment@1.3.0(jsep@1.4.0)": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==",
|
|
120
120
|
"@jsep-plugin/regex@1.0.4(jsep@1.4.0)": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==",
|
|
121
121
|
"@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==",
|
|
122
|
-
"@modelcontextprotocol/ext-apps@1.7.2(@modelcontextprotocol/sdk@1.29.0
|
|
123
|
-
"@modelcontextprotocol/sdk@1.29.0
|
|
122
|
+
"@modelcontextprotocol/ext-apps@1.7.2(@modelcontextprotocol/sdk@1.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)": "sha512-OOWKDxdAjYDcgHkmzVzccyyag3FK+jBWPaWu4WvTxFsU4R/cgOX4eep66zPRA5n4v6WfxUNibPyvX4iJ7egYTg==",
|
|
123
|
+
"@modelcontextprotocol/sdk@1.29.0": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==",
|
|
124
124
|
"@nodelib/fs.scandir@2.1.5": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
|
125
125
|
"@nodelib/fs.stat@2.0.5": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
|
|
126
126
|
"@nodelib/fs.walk@1.2.8": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
package/README.md
CHANGED
|
@@ -37,10 +37,10 @@ Components are grouped by area under `src/components/`:
|
|
|
37
37
|
| **MCP Apps widgets** | `widget` events render in a sandboxed iframe via `EventRenderer`/`EventStream` — pass `sandboxProxyUrl`. `EventRenderer` dispatches on the event's `rendererKind` (v1: `mcp-app-html` → `McpAppWidget`; unknown kinds fall back to the default card), so declarative renderers can be added without changing the contract. The host renderer `McpAppWidget` is loaded internally (lazy/code-split) and is **not** a value export; only its prop types (`McpAppWidgetProps`) and `grackleHostStyleVariables` are exported. |
|
|
38
38
|
| **Tool cards** | `ToolCard`, `FileEditCard`, `FileReadCard`, `ShellCard`, `SearchCard`, `TodoCard`, `MetadataCard`, `AgentToolCard`, `GenericToolCard` |
|
|
39
39
|
| **Layout** | `AppNav`, `Sidebar`, `StatusBar`, `BottomStatusBar` |
|
|
40
|
-
| **Lists** | `TaskList`, `EnvironmentNav
|
|
40
|
+
| **Lists** | `TaskList`, `EnvironmentNav` |
|
|
41
41
|
| **DAG visualization** | `DagView`, `TaskNode`, `useDagLayout` (React Flow + dagre) |
|
|
42
42
|
| **Knowledge graph** | `KnowledgeGraph`, `KnowledgeDetailPanel`, `KnowledgeNav` |
|
|
43
|
-
| **Panels** | `TaskEditPanel`, `TaskOverviewPanel`, `EnvironmentEditPanel`, `
|
|
43
|
+
| **Panels** | `TaskEditPanel`, `TaskOverviewPanel`, `EnvironmentEditPanel`, `TokensPanel`, `AppearancePanel`, `AboutPanel`, `PluginsPanel`, `GitHubAccountsPanel`, `CredentialProvidersPanel`, `KeyboardShortcutsPanel`, `WorkpadPanel` |
|
|
44
44
|
| **Editable fields** | `EditableTextField`, `EditableTextArea`, `EditableSelect`, `EditableCheckbox`, `EnvironmentSelect`, `useEditableField` |
|
|
45
45
|
| **Notifications** | `Toast`, `ToastContainer`, `Callout`, `UpdateBanner` |
|
|
46
46
|
| **Workspace & boards** | `WorkspaceBoard`, `WorkspaceFormFields` |
|