@keke1933/vibe-dictionary-mcp 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +131 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -7,6 +7,65 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
7
7
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
8
  import * as z from "zod/v4";
9
9
 
10
+ // ../../packages/catalog/src/additions/patterns.ts
11
+ var PATTERN_ADDITIONS = [
12
+ {
13
+ id: "zoom-lightbox-gallery",
14
+ domain: "ui",
15
+ category: "card",
16
+ titleKo: "\uC90C \uB77C\uC774\uD2B8\uBC15\uC2A4 \uAC24\uB7EC\uB9AC",
17
+ titleEn: "Zoom Lightbox Gallery",
18
+ summary: "\uC378\uB124\uC77C\uC744 \uB204\uB974\uBA74 \uCE74\uB4DC \uC548\uC5D0 \uC774\uBBF8\uC9C0 \uBDF0\uC5B4\uAC00 \uD3BC\uCCD0\uC9C0\uACE0 \uD655\uB300\xB7\uB4DC\uB798\uADF8\xB7\uC774\uC804 \uB2E4\uC74C \uD0D0\uC0C9\uC73C\uB85C \uC774\uC5B4\uC9C0\uB294 \uAC24\uB7EC\uB9AC",
19
+ vibeTag: "\uC791\uC740 \uC0AC\uC9C4\uC5D0\uC11C \uBAB0\uC785\uD615 \uC774\uBBF8\uC9C0 \uBCF4\uAE30\uB85C",
20
+ vibeKeywords: ["\uB77C\uC774\uD2B8\uBC15\uC2A4", "\uC774\uBBF8\uC9C0 \uD655\uB300", "\uC0AC\uC9C4 \uAC24\uB7EC\uB9AC", "\uC0C1\uD488 \uC774\uBBF8\uC9C0"],
21
+ promptSnippet: "\uC9C0\uC815\uD55C \uC601\uC5ED\uC5D0 \uD574\uC548\xB7\uC0AC\uB9C9\xB7\uB2A5\uC120\uC758 SVG \uC774\uBBF8\uC9C0 \uC138 \uC7A5\uACFC \uC774\uB984\uC744 \uAC00\uC9C4 \uC378\uB124\uC77C \uAC24\uB7EC\uB9AC\uB97C \uB9CC\uB4E4\uC5B4 \uC918. \uC378\uB124\uC77C \uD074\uB9AD\xB7Enter\xB7Space\uB85C \uAC19\uC740 \uCE74\uB4DC \uC548\uC5D0 \uD070 \uC774\uBBF8\uC9C0 \uBDF0\uC5B4\uB97C \uC5F4\uACE0 380ms cubic-bezier(.2,.8,.2,1)\uC758 scale(.78)\xB7opacity(.3)\uC5D0\uC11C \uC6D0\uB798 \uD06C\uAE30\xB7\uBD88\uD22C\uBA85\uB3C4\uB85C \uB4F1\uC7A5\uD574 \uC918. \uBDF0\uC5B4\uB97C \uC5F4\uBA74 \uC774\uC804 \uC774\uBBF8\uC9C0 \uBC84\uD2BC\uC73C\uB85C \uD3EC\uCEE4\uC2A4\uB97C \uC62E\uACA8 \uC918. \uC774\uC804\xB7\uB2E4\uC74C \uBC84\uD2BC\uACFC \uC88C\uC6B0 \uBC29\uD5A5\uD0A4\uB85C \uC138 \uC774\uBBF8\uC9C0\uB97C \uC21C\uD658\uD558\uBA70 \uD655\uB300 \uBC84\uD2BC\uC73C\uB85C \uC911\uC2EC \uAE30\uC900 1\uBC30/1.65\uBC30\uB97C \uC804\uD658\uD574 \uC918. \uC774\uBBF8\uC9C0 \uC804\uD658 \uC2DC \uBC30\uC728\uACFC \uC774\uB3D9\uC744 \uCD08\uAE30\uD654\uD574 \uC918. \uD655\uB300 \uC0C1\uD0DC\uC5D0\uC11C \uC8FC \uD3EC\uC778\uD130 \uB4DC\uB798\uADF8\uB97C capture\uD558\uACE0 \uC774\uB3D9\uC744 \uAC00\uB85C \xB135px\xB7\uC138\uB85C \xB120px\uB85C \uC81C\uD55C\uD574 \uC918. \uD655\uB300\uD558\uC9C0 \uC54A\uC558\uC744 \uB54C \uAC00\uB85C 35px \uCD08\uACFC \uC2A4\uC640\uC774\uD504\uB294 \uC774\uC804\xB7\uB2E4\uC74C \uC774\uBBF8\uC9C0\uB97C \uC120\uD0DD\uD574 \uC918. \uCDE8\uC18C\xB7capture \uC720\uC2E4\uC740 \uB4DC\uB798\uADF8 \uCC38\uC870\uB97C \uC815\uB9AC\uD574 \uC918. \uB2EB\uAE30\xB7Escape\uB294 \uC378\uB124\uC77C\uB85C \uB3CC\uC544\uAC00\uBA70 Escape\uB294 \uCCAB \uC378\uB124\uC77C\uB85C \uD3EC\uCEE4\uC2A4\uB97C \uBCF5\uADC0\uD574 \uC918. \uBDF0\uC5B4\uB294 \uD398\uC774\uC9C0 \uC804\uCCB4 \uBAA8\uB2EC\uC774 \uC544\uB2CC \uCE74\uB4DC \uB0B4\uBD80\uC774\uBA70 \uD540\uCE58 \uC90C\xB7\uC678\uBD80 \uC774\uBBF8\uC9C0 \uC694\uCCAD\uC740 \uC5C6\uC5B4. \uC790\uB3D9\uC73C\uB85C \uC5F4\uAC70\uB098 \uC774\uBBF8\uC9C0\uB97C \uBC14\uAFB8\uC9C0 \uB9D0\uACE0 \uC0AC\uC6A9\uC790\uAC00 \uC120\uD0DD\uD55C \uBDF0\uC5B4 \uC0C1\uD0DC\uB97C \uC720\uC9C0\uD574 \uC918. \uC591\uD14C\uB9C8\xB7\uBAA8\uBC14\uC77C\xB7\uD3EC\uCEE4\uC2A4 \uC724\uACFD\xB7\uBAA8\uC158 \uAC10\uC18C\uB97C \uC9C0\uC6D0\uD574 \uC918."
22
+ },
23
+ {
24
+ id: "selection-bubble-toolbar",
25
+ domain: "ui",
26
+ category: "text",
27
+ titleKo: "\uD14D\uC2A4\uD2B8 \uC120\uD0DD \uBC84\uBE14 \uD234\uBC14",
28
+ titleEn: "Text Selection Bubble Toolbar",
29
+ summary: "\uAE00\uC790\uB97C \uC120\uD0DD\uD55C \uC704\uCE58\uC5D0 \uC791\uC740 \uC11C\uC2DD \uD234\uBC14\uAC00 \uB5A0\uC624\uB974\uACE0 \uC120\uD0DD\uD55C \uBD80\uBD84\uC5D0 \uAD75\uC740 \uAE00\uC528\uB97C \uC801\uC6A9",
30
+ vibeTag: "\uC120\uD0DD\uD55C \uBB38\uC7A5 \uBC14\uB85C \uC704\uC5D0 \uD544\uC694\uD55C \uB3C4\uAD6C\uAC00",
31
+ vibeKeywords: ["\uD14D\uC2A4\uD2B8 \uC120\uD0DD", "\uBC84\uBE14 \uD234\uBC14", "\uD50C\uB85C\uD305 \uC11C\uC2DD", "\uBB38\uC11C \uC5D0\uB514\uD130"],
32
+ promptSnippet: "\uC9C0\uC815\uD55C \uBB38\uB2E8\uC5D0\uC11C \uC2E4\uC81C \uBE0C\uB77C\uC6B0\uC800 \uD14D\uC2A4\uD2B8 \uC120\uD0DD\uC744 \uC77D\uC5B4 \uC120\uD0DD \uC601\uC5ED \uBC14\uB85C \uC704\uC5D0 \uAD75\uAC8C \uBC84\uD2BC \uD558\uB098\uB97C \uAC00\uC9C4 \uBC84\uBE14 \uD234\uBC14\uB97C \uBCF4\uC5EC \uC918. \uD3EC\uC778\uD130 \uC120\uD0DD \uC885\uB8CC\uC640 \uD0A4\uBCF4\uB4DC \uC120\uD0DD \uBCC0\uACBD\uC744 \uBAA8\uB450 \uCC98\uB9AC\uD558\uACE0 \uBB38\uB2E8 \uBC16 \uC120\uD0DD\xB7\uBE48 \uC120\uD0DD\uC5D0\uC11C\uB294 \uC228\uACA8 \uC918. \uD234\uBC14\uB294 \uC120\uD0DD \uC601\uC5ED\uC758 \uAC00\uB85C \uC911\uC2EC\uC744 \uBB38\uB2E8 \uD3ED 25~75% \uC548\uC5D0 \uC81C\uD55C\uD558\uACE0 \uC704\uCABD \uACBD\uACC4\uB97C \uB118\uC9C0 \uC54A\uAC8C \uBC30\uCE58\uD574 \uC918. 180ms \uC544\uB798 5px\xB7\uD22C\uBA85\uC5D0\uC11C \uC6D0\uC704\uCE58\uB85C \uB4F1\uC7A5\uD558\uBA70 \uC791\uC740 \uC0BC\uAC01 \uAF2C\uB9AC\uB97C \uB2EC\uC544 \uC918. \uBC84\uD2BC\uC744 \uB204\uB97C \uB54C \uD3EC\uC778\uD130 \uAE30\uBCF8 \uB3D9\uC791\uC73C\uB85C \uC120\uD0DD\uC774 \uC0AC\uB77C\uC9C0\uC9C0 \uC54A\uAC8C \uD558\uACE0 \uC120\uD0DD\uD55C \uBB38\uC790\uC5F4\uC5D0\uB9CC \uAD75\uC740 \uC11C\uC2DD\uC744 \uC801\uC6A9\uD55C \uB4A4 \uD234\uBC14\uB97C \uB2EB\uC544 \uC918. \uC2E4\uC81C\uB85C \uBB38\uAD6C\uB97C \uC120\uD0DD\uD558\uAE30 \uC804\uC5D0\uB294 \uD234\uBC14\uB97C \uD45C\uC2DC\uD558\uC9C0 \uB9D0\uACE0 \uC790\uB3D9 \uC120\uD0DD\xB7\uC11C\uC2DD \uC2DC\uC5F0\uC744 \uD558\uC9C0 \uC54A\uC544. \uB9C1\uD06C\xB7\uB313\uAE00\xB7\uC2E4\uC81C \uD3B8\uC9D1\uAE30 \uC5F0\uB3D9\uC740 \uCD94\uAC00\uD558\uC9C0 \uB9D0\uC544 \uC918. \uB77C\uC774\uD2B8\xB7\uB2E4\uD06C \uB300\uBE44, \uC881\uC740 \uD3ED, \uD0A4\uBCF4\uB4DC \uC870\uC791\uACFC \uBAA8\uC158 \uAC10\uC18C\uB97C \uC9C0\uC6D0\uD574 \uC918."
33
+ },
34
+ {
35
+ id: "ly-collapsing-scroll-header",
36
+ domain: "layout",
37
+ category: "scroll",
38
+ titleKo: "\uC2A4\uD06C\uB864 \uC555\uCD95 \uD5E4\uB354",
39
+ titleEn: "Collapsing Scroll Header",
40
+ summary: "\uC2A4\uD06C\uB864 \uC9C4\uD589\uC744 \uC790\uB3D9 \uC2DC\uBBAC\uB808\uC774\uC158\uD574 \uD070 \uCEE4\uBC84\uC640 \uC81C\uBAA9\uC774 \uC791\uC740 \uC0C1\uB2E8 \uBC14\uB85C \uC555\uCD95\uB410\uB2E4\uAC00 \uB2E4\uC2DC \uD3BC\uCCD0\uC9C0\uB294 \uD6A8\uACFC",
41
+ vibeTag: "\uD070 \uC81C\uBAA9\uC774 \uC791\uC740 \uC0C1\uB2E8 \uBC14\uB85C \uC790\uC5F0\uC2A4\uB7FD\uAC8C",
42
+ vibeKeywords: ["\uC811\uD788\uB294 \uD5E4\uB354", "\uC2A4\uD06C\uB864 \uD5E4\uB354", "\uCD95\uC18C \uB0B4\uBE44\uAC8C\uC774\uC158", "\uD070 \uC81C\uBAA9 \uC804\uD658"],
43
+ promptSnippet: "\uC9C0\uC815\uD55C \uCE74\uB4DC \uC548\uC5D0 \uB192\uC774 110px\uC758 \uC5EC\uD589 \uC0C1\uC138 \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB9CC\uB4E4\uC5B4 \uC918. \uCEE4\uBC84 \uADF8\uB9BC\xB7\uD070 \uC81C\uBAA9\xB7\uB4A4\uB85C \uD654\uC0B4\uD45C\xB7\uBCF8\uBB38 \uC120 \uC138 \uAC1C\uB97C \uBC30\uCE58\uD558\uACE0 \uC9C4\uD589\uB960 p\uB97C 0~1\uB85C \uC655\uBCF5\uC2DC\uCF1C \uC2A4\uD06C\uB864 \uC555\uCD95\uC744 \uC2DC\uC5F0\uD574 \uC918. p\uC5D0 \uB530\uB77C \uD5E4\uB354 \uB192\uC774\uB294 82\u219238px, \uC81C\uBAA9 \uAE00\uAF34\uC740 23\u219213px, \uC81C\uBAA9 translate\uB294 (26,40)\u2192(24,5)px\uB85C \uBC14\uAFD4 \uC918. \uCEE4\uBC84\uB294 \uC704\uB85C 48px \uC774\uB3D9\uD558\uBA70 opacity\uAC00 1\u2192.2, \uBCF8\uBB38 \uC120\uC740 \uC704\uB85C 28px \uC774\uB3D9\uD558\uACE0 \uD5E4\uB354 \uD45C\uBA74\uC740 \uD22C\uBA85\uC5D0\uC11C \uD14C\uB9C8 \uD45C\uBA74\uC73C\uB85C \uCC44\uC6CC\uC838 \uC918. \uC0AC\uC804\uC5D0\uC11C\uB294 8\uCD08 \uB3D9\uC548 0\u21921\u21920\uC744 \uC790\uB3D9 \uBC18\uBCF5\uD558\uACE0 \uD074\uB9AD\xB7Enter\xB7Space\uB294 \uC774\uC804 \uC7AC\uC0DD\uC744 \uCDE8\uC18C\uD55C \uB4A4 \uCC98\uC74C\uBD80\uD130 \uD55C \uBC88\uB9CC \uB2E4\uC2DC \uC2DC\uC791\uD574 \uC918. \uC2E4\uC81C \uC2A4\uD06C\uB864\uBC14\uB098 range \uC785\uB825 \uC5C6\uC774 \uD6A8\uACFC\uB97C \uBCF4\uC5EC \uC8FC\uB294 \uC9C4\uD589\uB960 \uC2DC\uBBAC\uB808\uC774\uC158\uC774\uBA70 \uC2E4\uC81C \uD398\uC774\uC9C0 \uC2A4\uD06C\uB864 \uAC10\uC9C0\xB7\uB4A4\uB85C \uC774\uB3D9\uC740 \uC5C6\uC5B4. \uCE74\uB4DC \uACBD\uACC4\xB7\uC0C1\uB2E8 \uB3C4\uAD6C \uC5EC\uBC31\xB7\uB77C\uC774\uD2B8/\uB2E4\uD06C\xB7\uBAA8\uBC14\uC77C\xB7\uD3EC\uCEE4\uC2A4 \uC724\uACFD\uC744 \uC720\uC9C0\uD558\uACE0 \uBAA8\uC158 \uAC10\uC18C\uC5D0\uC11C\uB294 \uC790\uB3D9 \uC6C0\uC9C1\uC784\uACFC \uC804\uD658\uC744 \uC5C6\uC560 \uC918."
44
+ },
45
+ {
46
+ id: "rich-hover-preview",
47
+ domain: "ui",
48
+ category: "card",
49
+ titleKo: "\uB9AC\uCE58 \uD638\uBC84 \uD504\uB9AC\uBDF0",
50
+ titleEn: "Rich Hover Preview",
51
+ summary: "\uC791\uC131\uC790 \uC774\uB984\uC5D0 \uD638\uBC84\xB7\uD3EC\uCEE4\uC2A4\uD558\uAC70\uB098 \uB204\uB974\uBA74 \uBC30\uB108\xB7\uC544\uBC14\uD0C0\xB7\uC18C\uAC1C\uB97C \uB2F4\uC740 \uD504\uB85C\uD544 \uBBF8\uB9AC\uBCF4\uAE30\uAC00 \uB098\uD0C0\uB0A8",
52
+ vibeTag: "\uC774\uB3D9\uD558\uAE30 \uC804\uC5D0 \uB0B4\uC6A9\uC744 \uC0B4\uC9DD \uB4E4\uC5EC\uB2E4\uBCF4\uB294",
53
+ vibeKeywords: ["\uD638\uBC84 \uCE74\uB4DC", "\uD504\uB85C\uD544 \uBBF8\uB9AC\uBCF4\uAE30", "\uB9C1\uD06C \uD504\uB9AC\uBDF0", "\uB9AC\uCE58 \uD234\uD301"],
54
+ promptSnippet: "\uC9C0\uC815\uD55C \uC601\uC5ED\uC5D0 \uB9CC\uB4E0 \uC0AC\uB78C \uB77C\uBCA8\uACFC \uC791\uC131\uC790 \uC774\uB984 button\uC744 \uB450\uACE0, \uADF8 \uC544\uB798\uC5D0 \uD504\uB85C\uD544 \uBBF8\uB9AC\uBCF4\uAE30 \uCE74\uB4DC\uB97C \uBC30\uCE58\uD574 \uC918. \uCE74\uB4DC\uB294 \uADF8\uB77C\uB370\uC774\uC158 \uBC30\uB108, \uACB9\uCCD0\uC9C4 \uC6D0\uD615 \uC544\uBC14\uD0C0, \uC774\uB984, \uC9C1\uBB34, \uD55C \uC904 \uC18C\uAC1C\uB97C \uB2F4\uC544 \uC918. \uC774\uB984 \uD638\uBC84\xB7\uD0A4\uBCF4\uB4DC \uD3EC\uCEE4\uC2A4\uC5D0\uC11C \uC5F4\uACE0 \uD074\uB9AD\xB7\uD130\uCE58\uB294 \uC5F4\uAE30/\uB2EB\uAE30\uB97C \uD1A0\uAE00\uD574 \uC918. \uD3EC\uC778\uD130\uAC00 \uC774\uB984\uC5D0\uC11C \uBBF8\uB9AC\uBCF4\uAE30 \uCE74\uB4DC\uB85C \uC774\uB3D9\uD574\uB3C4 \uC720\uC9C0\uD558\uACE0 \uC804\uCCB4 \uC601\uC5ED \uC774\uD0C8\uC774\uB098 \uC678\uBD80\uB85C \uD3EC\uCEE4\uC2A4\uAC00 \uC774\uB3D9\uD558\uBA74 \uB2EB\uC544 \uC918. \uB2EB\uD78C \uCE74\uB4DC\uB294 hidden\uC73C\uB85C \uAC10\uCD94\uBA70 button\uC758 aria-expanded\uB97C \uB9DE\uCDB0 \uC918. 200ms opacity 0\xB7\uC544\uB798 5px\uC5D0\uC11C \uC6D0\uC704\uCE58\uB85C \uB4F1\uC7A5\uD574 \uC918. \uC0AC\uC6A9\uC790 \uC785\uB825 \uC804\uC5D0\uB294 \uB2EB\uD78C \uC0C1\uD0DC\uB97C \uC720\uC9C0\uD558\uACE0 \uC790\uB3D9\uC73C\uB85C \uC5F4\uAC70\uB098 \uC2E4\uC81C \uD3EC\uCEE4\uC2A4\uB97C \uC774\uB3D9\uD558\uC9C0 \uC54A\uC544. \uC2E4\uC81C \uD504\uB85C\uD544 \uC870\uD68C\xB7\uC678\uBD80 \uB9C1\uD06C\xB7\uD314\uB85C\uC6B0\xB7\uC11C\uBC84 \uD638\uCD9C\uC740 \uC5C6\uC5B4. \uB77C\uC774\uD2B8/\uB2E4\uD06C \uD45C\uBA74\xB7\uBB38\uC790 \uB300\uBE44\uC640 \uC881\uC740 \uD3ED\xB7\uD3EC\uCEE4\uC2A4 \uC724\uACFD\xB7\uBAA8\uC158 \uAC10\uC18C\uB97C \uC9C0\uC6D0\uD574 \uC918."
55
+ },
56
+ {
57
+ id: "inline-edit-field",
58
+ domain: "ui",
59
+ category: "control",
60
+ titleKo: "\uC81C\uC790\uB9AC \uD3B8\uC9D1 \uD544\uB4DC",
61
+ titleEn: "Inline Edit Field",
62
+ summary: "\uD504\uB85C\uC81D\uD2B8 \uC774\uB984\uC744 \uB204\uB974\uBA74 \uAC19\uC740 \uC790\uB9AC\uC758 \uC785\uB825\uCC3D\uC73C\uB85C \uBC14\uB00C\uACE0 \uC800\uC7A5\xB7\uCDE8\uC18C \uD6C4 \uD14D\uC2A4\uD2B8\uB85C \uB3CC\uC544\uC624\uB294 \uD750\uB984",
63
+ vibeTag: "\uD654\uBA74\uC744 \uB5A0\uB098\uC9C0 \uC54A\uACE0 \uBC14\uB85C \uACE0\uCE58\uB294",
64
+ vibeKeywords: ["\uC778\uB77C\uC778 \uD3B8\uC9D1", "\uC81C\uC790\uB9AC \uC218\uC815", "\uC774\uB984 \uBCC0\uACBD", "\uD3B8\uC9D1 \uC800\uC7A5 \uCDE8\uC18C"],
65
+ promptSnippet: "\uC9C0\uC815\uD55C \uCE74\uB4DC\uC5D0 \uD504\uB85C\uC81D\uD2B8 \uC774\uB984 \uB77C\uBCA8\uACFC \uC774\uB984\xB7\uC5F0\uD544 \uC544\uC774\uCF58\uC744 \uB2F4\uC740 \uD3B8\uC9D1 button\uC744 \uB9CC\uB4E4\uC5B4 \uC918. \uCD08\uAE30 \uC774\uB984\uC740 \uC0C8\uB85C\uC6B4 \uD504\uB85C\uC81D\uD2B8\uC774\uBA70 \uB204\uB974\uBA74 \uAC19\uC740 \uC790\uB9AC\uC5D0 \uC785\uB825\uCC3D\xB7\uC800\uC7A5\xB7\uCDE8\uC18C \uBC84\uD2BC\uC744 \uBCF4\uC5EC \uC918. \uC2E4\uC81C \uC785\uB825\uAC12\uC744 \uC784\uC2DC \uC0C1\uD0DC\uB85C \uAD00\uB9AC\uD558\uACE0 \uC800\uC7A5 \uBC84\uD2BC\uC774\uB098 Enter\uB294 \uC55E\uB4A4 \uACF5\uBC31\uC744 \uC81C\uAC70\uD55C \uC774\uB984\uC744 \uB85C\uCEEC \uC0C1\uD0DC\uC5D0 \uC800\uC7A5\uD55C \uB4A4 \uC77D\uAE30 \uBAA8\uB4DC\uB85C \uB3CC\uC544\uAC00 \uC918. \uACF5\uBC31\uBFD0\uC774\uBA74 \uC800\uC7A5\uC744 \uBE44\uD65C\uC131\uD654\uD558\uACE0 \uD578\uB4E4\uB7EC\uC5D0\uC11C\uB3C4 \uCC28\uB2E8\uD574 \uC918. \uCDE8\uC18C\xB7Escape\uB294 \uC784\uC2DC\uAC12\uC744 \uBC84\uB9AC\uACE0 \uAE30\uC874 \uC774\uB984\uC744 \uC720\uC9C0\uD574 \uC918. \uC790\uB3D9\uC73C\uB85C \uD3B8\uC9D1 \uBAA8\uB4DC\uC5D0 \uB4E4\uC5B4\uAC00\uAC70\uB098 \uAC12\uC744 \uBCC0\uACBD\uD558\uC9C0 \uB9D0\uACE0 \uC0AC\uC6A9\uC790\uAC00 \uC785\uB825\uD55C \uC784\uC2DC\uAC12\uACFC \uC800\uC7A5\uD55C \uC774\uB984\uC744 \uC720\uC9C0\uD574 \uC918. \uC11C\uBC84 \uC800\uC7A5\xB7\uC601\uC18D \uC800\uC7A5\xB7\uAC00\uC9DC \uC694\uCCAD \uC131\uACF5 \uC548\uB0B4\uB294 \uC5C6\uC5B4. \uB77C\uC774\uD2B8/\uB2E4\uD06C \uB300\uBE44, \uC881\uC740 \uD3ED\uC5D0\uC11C \uC785\uB825\uACFC \uBC84\uD2BC \uACBD\uACC4, \uD0A4\uBCF4\uB4DC\uC640 \uD3EC\uCEE4\uC2A4 \uC724\uACFD\xB7\uBAA8\uC158 \uAC10\uC18C\uB97C \uC9C0\uC6D0\uD574 \uC918."
66
+ }
67
+ ];
68
+
10
69
  // ../../packages/catalog/src/additions/hover.ts
11
70
  var HOVER_ADDITIONS = [
12
71
  {
@@ -2900,6 +2959,7 @@ var CATEGORY_LABEL_MAP = Object.fromEntries(
2900
2959
  ].map((c) => [c.id, c.label])
2901
2960
  );
2902
2961
  var TECHNIQUES = [
2962
+ ...PATTERN_ADDITIONS,
2903
2963
  ...TACTILE_ADDITIONS,
2904
2964
  ...RETRO_ADDITIONS,
2905
2965
  ...SCIFI_ADDITIONS,
@@ -6169,9 +6229,44 @@ var EN_VFX_TECHNIQUES = {
6169
6229
  }
6170
6230
  };
6171
6231
 
6232
+ // ../../packages/catalog/src/translations/additions/patterns.ts
6233
+ var EN_PATTERN_TECHNIQUES = {
6234
+ "zoom-lightbox-gallery": {
6235
+ summary: "Open an image viewer inside the card, then zoom, drag, or move between three images.",
6236
+ vibeTag: "From tiny thumbnails to an immersive image view",
6237
+ vibeKeywords: ["lightbox", "image zoom", "photo gallery", "product images"],
6238
+ promptSnippet: "Build a gallery with three named SVG landscape thumbnails: Coast, Dunes, and Peaks. Click, Enter, or Space opens a larger image viewer inside the same card with a 380ms cubic-bezier(.2,.8,.2,1) entrance from scale .78 and opacity .3 to full size and opacity. On opening, focus the Previous image button. Previous/next buttons and Left/Right keys cycle through the images. A zoom button toggles center scale 1/1.65. Changing images resets zoom and pan. Capture the primary pointer to pan a zoomed image within \xB135px horizontally and \xB120px vertically. Without zoom, a horizontal swipe exceeding 35px selects the next/previous image. Clear drag references on cancellation or lost capture. Close and Escape restore the thumbnail gallery; Escape returns focus to the first thumbnail. This is an in-card viewer, not a page modal, and has no pinch zoom or external image requests. Do not open or change images automatically; retain the viewer state chosen by the user. Support light/dark themes, narrow screens, focus outlines, and reduced motion."
6239
+ },
6240
+ "selection-bubble-toolbar": {
6241
+ summary: "A small formatting bubble appears above selected text and applies bold to the selected substring.",
6242
+ vibeTag: "The tools appear right above your selection",
6243
+ vibeKeywords: ["text selection", "bubble toolbar", "floating formatting", "document editor"],
6244
+ promptSnippet: "Read actual browser text selection inside the specified paragraph and show a bubble with one Bold button above the selected range. Handle pointer selection end and keyboard selection changes; hide for empty or outside selection. Clamp its horizontal center within 25\u201375% of the paragraph width and keep it inside the top boundary. Enter over 180ms from 5px below and opacity zero, with a small triangular tail. Prevent pointer defaults on the toolbar button from clearing selection. Apply bold only to the selected substring, then hide the bubble. Keep the toolbar hidden until real text is selected; do not simulate selection or formatting automatically. Do not add link/comment actions or a full editor integration. Support light/dark contrast, narrow widths, keyboard operation, and reduced motion."
6245
+ },
6246
+ "ly-collapsing-scroll-header": {
6247
+ summary: "An automatic simulation compresses a large cover and title into a small top bar, then expands them again.",
6248
+ vibeTag: "A large title smoothly becomes a compact top bar",
6249
+ vibeKeywords: ["collapsing header", "scroll header", "shrinking navigation", "large title transition"],
6250
+ promptSnippet: "Build a 110px-tall travel-detail preview inside the specified card. Include cover artwork, a large title, a back arrow, and three body lines. Animate a progress value p between 0 and 1 to simulate scroll compression. Interpolate header height from 82 to 38px, title font size from 23 to 13px, and title translation from (26,40) to (24,5)px. Move the cover up 48px while opacity goes from 1 to .2, move body lines up 28px, and fill the header from transparent to the themed surface. In the dictionary, loop 0\u21921\u21920 over 8 seconds. Click, Enter, or Space cancels the previous playback and restarts once from the beginning. Show the effect without scrollbars or range inputs. This is a progress simulation, not real page scroll detection or back navigation. Preserve card boundaries, top-toolbar spacing, light/dark themes, narrow layouts, and focus outlines. Disable automatic movement and transitions for reduced motion."
6251
+ },
6252
+ "rich-hover-preview": {
6253
+ summary: "Hover, focus, or press an author name to reveal a profile preview with a banner, avatar, and short biography.",
6254
+ vibeTag: "A quick peek before you navigate away",
6255
+ vibeKeywords: ["hover card", "profile preview", "link preview", "rich tooltip"],
6256
+ promptSnippet: "Place a Created by label and author-name button above a profile preview card in the specified area. Include a gradient banner, overlapping circular avatar, name, role, and one-line biography. Open on name hover or keyboard focus; click and touch toggle it. Keep it open while the pointer moves from the name into the preview. Close when the pointer leaves the entire area or focus moves outside. Hide closed content with hidden and match the trigger aria-expanded state. Enter over 200ms from 5px below and opacity zero. Keep the preview closed before user input; do not open it or move real focus automatically. No actual profile lookup, external link, follow action, or server call is performed. Support light/dark surface and text contrast, narrow widths, focus outlines, and reduced motion."
6257
+ },
6258
+ "inline-edit-field": {
6259
+ summary: "Press a project name to replace it with an input in the same place, then save or cancel back to text.",
6260
+ vibeTag: "Edit in place without leaving the screen",
6261
+ vibeKeywords: ["inline edit", "edit in place", "rename", "save cancel field"],
6262
+ promptSnippet: "Build a card with a Project name label and an edit button containing the name and a pencil icon. Start with New project. Pressing it replaces the value in place with an input plus Save and Cancel buttons. Keep draft text separate from the saved name. Save or Enter trims whitespace and stores the name in local state before returning to read mode. Disable Save for whitespace-only input and guard the handler too. Cancel or Escape discards the draft and keeps the saved name. Do not enter edit mode or change values automatically. Retain the draft and saved name entered by the user. There is no server persistence, durable storage, or fake request-success message. Support light/dark contrast, narrow input/button boundaries, keyboard operation, focus outlines, and reduced motion."
6263
+ }
6264
+ };
6265
+
6172
6266
  // ../../packages/catalog/src/translations/en.ts
6173
6267
  var text = (summary, vibeTag, keywords, promptSnippet) => ({ summary, vibeTag, vibeKeywords: keywords.split("|"), promptSnippet });
6174
6268
  var ENGLISH_TECHNIQUES = {
6269
+ ...EN_PATTERN_TECHNIQUES,
6175
6270
  ...EN_BROADCAST_TECHNIQUES,
6176
6271
  ...EN_CAMERA_TECHNIQUES,
6177
6272
  ...EN_CARD_TECHNIQUES,
@@ -6974,6 +7069,40 @@ var DOMAIN_NAMES = {
6974
7069
  en: { ui: "UI", motion: "Graphics", layout: "Layout", style: "Style", video: "Motion video" }
6975
7070
  };
6976
7071
 
7072
+ // ../../packages/catalog/src/search-metadata/additions/patterns.ts
7073
+ var PATTERN_SEARCH_METADATA = {
7074
+ "zoom-lightbox-gallery": {
7075
+ targets: ["image", "card"],
7076
+ triggers: ["click", "drag"],
7077
+ useCases: { ko: ["\uC0C1\uD488 \uC0AC\uC9C4\uC774\uB098 \uD3EC\uD2B8\uD3F4\uB9AC\uC624 \uC774\uBBF8\uC9C0\uB97C \uD06C\uAC8C \uBCF4\uACE0 \uB118\uAE30\uAC70\uB098 \uD655\uB300 \uC774\uB3D9\uD560 \uB54C"], en: ["Browse, enlarge, and pan product or portfolio images inside a viewer"] },
7078
+ aliases: { ko: ["\uB77C\uC774\uD2B8\uBC15\uC2A4 \uAC24\uB7EC\uB9AC", "\uC0AC\uC9C4 \uD655\uB300 \uBDF0\uC5B4"], en: ["lightbox gallery", "image viewer", "zoom pan gallery"] }
7079
+ },
7080
+ "selection-bubble-toolbar": {
7081
+ targets: ["text", "panel"],
7082
+ triggers: ["drag", "click"],
7083
+ useCases: { ko: ["\uBB38\uC11C\uC5D0\uC11C \uC120\uD0DD\uD55C \uAE00\uC790 \uBC14\uB85C \uC704\uC5D0 \uC11C\uC2DD \uB3C4\uAD6C\uB97C \uD45C\uC2DC\uD560 \uB54C"], en: ["Show formatting controls directly above selected document text"] },
7084
+ aliases: { ko: ["\uC120\uD0DD \uD234\uBC14", "\uBC84\uBE14 \uBA54\uB274", "\uD50C\uB85C\uD305 \uC11C\uC2DD \uD234\uBC14"], en: ["bubble menu", "selection toolbar", "floating formatting toolbar"] }
7085
+ },
7086
+ "ly-collapsing-scroll-header": {
7087
+ targets: ["navigation", "text"],
7088
+ triggers: ["auto", "click"],
7089
+ useCases: { ko: ["\uD070 \uC81C\uBAA9\uC774 \uC0C1\uB2E8 \uBC14\uB85C \uC555\uCD95\uB418\uB294 \uD6A8\uACFC\uB97C \uC2A4\uD06C\uB864\uBC14 \uC5C6\uC774 \uC790\uB3D9 \uC2DC\uBBAC\uB808\uC774\uC158\uD560 \uB54C"], en: ["Automatically simulate a large title collapsing into a compact top bar without a scrollbar"] },
7090
+ aliases: { ko: ["\uC2A4\uD06C\uB864 \uC555\uCD95 \uD5E4\uB354", "\uC811\uD788\uB294 \uC0C1\uB2E8 \uBC14", "\uD070 \uC81C\uBAA9 \uCD95\uC18C"], en: ["collapsing app bar", "shrinking header", "large title collapse"] }
7091
+ },
7092
+ "rich-hover-preview": {
7093
+ targets: ["card", "text"],
7094
+ triggers: ["hover", "click"],
7095
+ useCases: { ko: ["\uC791\uC131\uC790 \uC774\uB984\uC5D0\uC11C \uC774\uB3D9\uD558\uAE30 \uC804\uC5D0 \uD504\uB85C\uD544 \uC815\uBCF4\uB97C \uBBF8\uB9AC \uD655\uC778\uD560 \uB54C"], en: ["Preview an author profile before leaving the current content"] },
7096
+ aliases: { ko: ["\uD638\uBC84 \uCE74\uB4DC", "\uD504\uB85C\uD544 \uBBF8\uB9AC\uBCF4\uAE30", "\uB9AC\uCE58 \uB9C1\uD06C \uD504\uB9AC\uBDF0"], en: ["hover card", "profile preview", "rich link preview"] }
7097
+ },
7098
+ "inline-edit-field": {
7099
+ targets: ["input", "text"],
7100
+ triggers: ["click", "input"],
7101
+ useCases: { ko: ["\uD504\uB85C\uC81D\uD2B8 \uC774\uB984\uC744 \uAC19\uC740 \uC790\uB9AC\uC5D0\uC11C \uD3B8\uC9D1\uD558\uACE0 \uC800\uC7A5\uD558\uAC70\uB098 \uCDE8\uC18C\uD560 \uB54C"], en: ["Edit a project name in place with save and cancel actions"] },
7102
+ aliases: { ko: ["\uC778\uB77C\uC778 \uD3B8\uC9D1", "\uC81C\uC790\uB9AC \uD3B8\uC9D1", "\uC989\uC2DC \uC774\uB984 \uBCC0\uACBD"], en: ["inline edit", "editable text", "in-place editing"] }
7103
+ }
7104
+ };
7105
+
6977
7106
  // ../../packages/catalog/src/search-metadata/additions/broadcast.ts
6978
7107
  var BROADCAST_SEARCH_METADATA = {
6979
7108
  "vd-word-highlight-subtitles": {
@@ -9651,6 +9780,7 @@ var m = (targets, triggers, ko, en, aliasesKo = "", aliasesEn = "") => ({
9651
9780
  aliases: { ko: aliasesKo ? aliasesKo.split("|") : [], en: aliasesEn ? aliasesEn.split("|") : [] }
9652
9781
  });
9653
9782
  var SEARCH_METADATA = {
9783
+ ...PATTERN_SEARCH_METADATA,
9654
9784
  ...BROADCAST_SEARCH_METADATA,
9655
9785
  ...CAMERA_SEARCH_METADATA,
9656
9786
  ...CARD_SEARCH_METADATA,
@@ -9990,7 +10120,7 @@ function searchTechniques(options = {}) {
9990
10120
  // package.json
9991
10121
  var package_default = {
9992
10122
  name: "@keke1933/vibe-dictionary-mcp",
9993
- version: "0.3.0",
10123
+ version: "0.4.0",
9994
10124
  license: "MIT",
9995
10125
  author: "leejh96",
9996
10126
  description: "Read-only local MCP for searching Vibe Dictionary techniques and retrieving implementation prompts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keke1933/vibe-dictionary-mcp",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "license": "MIT",
5
5
  "author": "leejh96",
6
6
  "description": "Read-only local MCP for searching Vibe Dictionary techniques and retrieving implementation prompts",