@trishchuk/coolors-mcp 1.0.0 → 1.1.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 (140) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +20 -8
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -8
  3. package/.github/pull_request_template.md +33 -8
  4. package/.github/workflows/ci.yml +107 -104
  5. package/.github/workflows/deploy-docs.yml +14 -11
  6. package/.github/workflows/release.yml +25 -23
  7. package/README.md +149 -15
  8. package/dist/bin/server.js +997 -256
  9. package/dist/bin/server.js.map +1 -1
  10. package/dist/{chunk-P3ARRKLS.js → chunk-HOMDMKUY.js} +3 -1
  11. package/dist/{chunk-P3ARRKLS.js.map → chunk-HOMDMKUY.js.map} +1 -1
  12. package/dist/{chunk-IQ7NN26V.js → chunk-LHW2ZTOU.js} +14 -2
  13. package/dist/chunk-LHW2ZTOU.js.map +1 -0
  14. package/dist/color/index.js +1 -1
  15. package/dist/coolors-mcp.d.ts +4 -4
  16. package/dist/coolors-mcp.js +1 -1
  17. package/docs/.vitepress/components/ClientGrid.vue +9 -3
  18. package/docs/.vitepress/components/CodeBlock.vue +51 -44
  19. package/docs/.vitepress/components/ConfigModal.vue +151 -67
  20. package/docs/.vitepress/components/DiagramModal.vue +186 -154
  21. package/docs/.vitepress/components/TroubleshootingModal.vue +101 -96
  22. package/docs/.vitepress/config.js +171 -141
  23. package/docs/.vitepress/theme/FundingLayout.vue +65 -54
  24. package/docs/.vitepress/theme/Layout.vue +21 -21
  25. package/docs/.vitepress/theme/components/AdBanner.vue +73 -52
  26. package/docs/.vitepress/theme/components/AdPlaceholder.vue +3 -3
  27. package/docs/.vitepress/theme/components/FundingEffects.vue +77 -53
  28. package/docs/.vitepress/theme/components/FundingHero.vue +78 -63
  29. package/docs/.vitepress/theme/components/SupportSection.vue +106 -89
  30. package/docs/.vitepress/theme/custom-app.css +19 -12
  31. package/docs/.vitepress/theme/custom.css +33 -25
  32. package/docs/.vitepress/theme/index.js +19 -16
  33. package/docs/concepts/accessibility.md +59 -47
  34. package/docs/concepts/color-spaces.md +28 -6
  35. package/docs/concepts/distance-metrics.md +45 -30
  36. package/docs/concepts/hct.md +30 -27
  37. package/docs/concepts/image-analysis.md +52 -21
  38. package/docs/concepts/material-design.md +43 -17
  39. package/docs/concepts/theme-matching.md +64 -40
  40. package/docs/examples/basic-colors.md +92 -108
  41. package/docs/examples/creating-themes.md +104 -108
  42. package/docs/examples/css-refactoring.md +33 -29
  43. package/docs/examples/image-extraction.md +145 -138
  44. package/docs/getting-started.md +45 -34
  45. package/docs/index.md +5 -1
  46. package/docs/installation.md +15 -1
  47. package/docs/tools/accessibility.md +74 -68
  48. package/docs/tools/image-extraction.md +62 -54
  49. package/docs/tools/theme-matching.md +45 -42
  50. package/eslint.config.ts +13 -0
  51. package/jsr.json +1 -1
  52. package/package.json +17 -13
  53. package/src/bin/server.ts +13 -1
  54. package/src/color/__tests__/extract-colors.test.ts +20 -30
  55. package/src/color/apca.ts +105 -0
  56. package/src/color/color-blindness.ts +109 -0
  57. package/src/coolors-mcp.ts +1 -1
  58. package/src/session.ts +10 -2
  59. package/src/theme/matcher.ts +1 -1
  60. package/src/theme/refactor.ts +1 -1
  61. package/src/theme/types.ts +3 -0
  62. package/src/tools/__tests__/cohesion.test.ts +97 -0
  63. package/src/tools/__tests__/color-blindness.test.ts +45 -0
  64. package/src/tools/__tests__/color-conversion.test.ts +38 -0
  65. package/src/tools/__tests__/contrast-checker.test.ts +56 -0
  66. package/src/tools/__tests__/palette-export.test.ts +54 -0
  67. package/src/tools/adjust-color.tool.ts +80 -0
  68. package/src/tools/cohesion.tools.ts +380 -0
  69. package/src/tools/color-blindness.tool.ts +168 -0
  70. package/src/tools/color-conversion.tool.ts +1 -1
  71. package/src/tools/contrast-checker.tool.ts +53 -14
  72. package/src/tools/dislike-analyzer.tool.ts +41 -54
  73. package/src/tools/image-extraction.tools.ts +62 -115
  74. package/src/tools/index.ts +15 -2
  75. package/src/tools/palette-export.tool.ts +174 -0
  76. package/src/tools/palette-with-locks.tool.ts +8 -6
  77. package/src/types.ts +2 -3
  78. package/tsconfig.json +12 -2
  79. package/vitest.config.js +1 -3
  80. package/.claude/settings.local.json +0 -39
  81. package/.env +0 -2
  82. package/.mcp.json +0 -12
  83. package/CLAUDE.md +0 -201
  84. package/DOCUMENTATION.md +0 -274
  85. package/GEMINI.md +0 -54
  86. package/demo/content_based_color.png +0 -0
  87. package/demo/music-player.html +0 -621
  88. package/demo/podcast-player.html +0 -903
  89. package/dist/chunk-IQ7NN26V.js.map +0 -1
  90. package/docs/.vitepress/cache/deps/@braintree_sanitize-url.js +0 -93
  91. package/docs/.vitepress/cache/deps/@braintree_sanitize-url.js.map +0 -7
  92. package/docs/.vitepress/cache/deps/_metadata.json +0 -127
  93. package/docs/.vitepress/cache/deps/chunk-BUSYA2B4.js +0 -9
  94. package/docs/.vitepress/cache/deps/chunk-BUSYA2B4.js.map +0 -7
  95. package/docs/.vitepress/cache/deps/chunk-JD3CXNQ6.js +0 -12683
  96. package/docs/.vitepress/cache/deps/chunk-JD3CXNQ6.js.map +0 -7
  97. package/docs/.vitepress/cache/deps/chunk-SYPOPCWC.js +0 -9719
  98. package/docs/.vitepress/cache/deps/chunk-SYPOPCWC.js.map +0 -7
  99. package/docs/.vitepress/cache/deps/cytoscape-cose-bilkent.js +0 -4710
  100. package/docs/.vitepress/cache/deps/cytoscape-cose-bilkent.js.map +0 -7
  101. package/docs/.vitepress/cache/deps/cytoscape.js +0 -30278
  102. package/docs/.vitepress/cache/deps/cytoscape.js.map +0 -7
  103. package/docs/.vitepress/cache/deps/dayjs.js +0 -285
  104. package/docs/.vitepress/cache/deps/dayjs.js.map +0 -7
  105. package/docs/.vitepress/cache/deps/debug.js +0 -468
  106. package/docs/.vitepress/cache/deps/debug.js.map +0 -7
  107. package/docs/.vitepress/cache/deps/package.json +0 -3
  108. package/docs/.vitepress/cache/deps/prismjs.js +0 -1466
  109. package/docs/.vitepress/cache/deps/prismjs.js.map +0 -7
  110. package/docs/.vitepress/cache/deps/prismjs_components_prism-bash.js +0 -228
  111. package/docs/.vitepress/cache/deps/prismjs_components_prism-bash.js.map +0 -7
  112. package/docs/.vitepress/cache/deps/prismjs_components_prism-javascript.js +0 -142
  113. package/docs/.vitepress/cache/deps/prismjs_components_prism-javascript.js.map +0 -7
  114. package/docs/.vitepress/cache/deps/prismjs_components_prism-json.js +0 -27
  115. package/docs/.vitepress/cache/deps/prismjs_components_prism-json.js.map +0 -7
  116. package/docs/.vitepress/cache/deps/prismjs_components_prism-python.js +0 -65
  117. package/docs/.vitepress/cache/deps/prismjs_components_prism-python.js.map +0 -7
  118. package/docs/.vitepress/cache/deps/prismjs_components_prism-typescript.js +0 -53
  119. package/docs/.vitepress/cache/deps/prismjs_components_prism-typescript.js.map +0 -7
  120. package/docs/.vitepress/cache/deps/prismjs_components_prism-yaml.js +0 -73
  121. package/docs/.vitepress/cache/deps/prismjs_components_prism-yaml.js.map +0 -7
  122. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4507
  123. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  124. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -584
  125. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  126. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js +0 -1146
  127. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map +0 -7
  128. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js +0 -1667
  129. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map +0 -7
  130. package/docs/.vitepress/cache/deps/vitepress___minisearch.js +0 -1814
  131. package/docs/.vitepress/cache/deps/vitepress___minisearch.js.map +0 -7
  132. package/docs/.vitepress/cache/deps/vue.js +0 -344
  133. package/docs/.vitepress/cache/deps/vue.js.map +0 -7
  134. package/examples/theme-matching.md +0 -113
  135. package/mcp-config.json +0 -8
  136. package/note.md +0 -35
  137. package/research_results.md +0 -53
  138. package/src/tools/colors.ts +0 -31
  139. package/src/tools/registry.ts +0 -142
  140. package/src/tools/simple-tools.ts +0 -37
@@ -17,9 +17,11 @@
17
17
  <span class="problem-badge">Problem</span>
18
18
  <h2>{{ title }}</h2>
19
19
  </div>
20
- <button @click="closeModal" class="close-btn" title="Close">&times;</button>
20
+ <button @click="closeModal" class="close-btn" title="Close">
21
+ &times;
22
+ </button>
21
23
  </div>
22
-
24
+
23
25
  <div class="modal-body">
24
26
  <div class="solution-section">
25
27
  <h3 class="solution-title">
@@ -35,121 +37,124 @@
35
37
  </template>
36
38
 
37
39
  <script setup>
38
- import { ref, onMounted, onUnmounted, nextTick } from 'vue'
40
+ import { ref, onMounted, onUnmounted, nextTick } from "vue";
39
41
 
40
42
  const props = defineProps({
41
43
  title: {
42
44
  type: String,
43
- required: true
45
+ required: true,
44
46
  },
45
47
  preview: {
46
48
  type: String,
47
- required: true
48
- }
49
- })
49
+ required: true,
50
+ },
51
+ });
50
52
 
51
- const isOpen = ref(false)
53
+ const isOpen = ref(false);
52
54
 
53
55
  const openModal = async () => {
54
- isOpen.value = true
55
- document.body.style.overflow = 'hidden'
56
-
56
+ isOpen.value = true;
57
+ document.body.style.overflow = "hidden";
58
+
57
59
  // Wait for modal to render, then add copy buttons
58
- await nextTick()
59
- setTimeout(addCopyButtons, 100)
60
- }
60
+ await nextTick();
61
+ setTimeout(addCopyButtons, 100);
62
+ };
61
63
 
62
64
  const closeModal = () => {
63
- isOpen.value = false
64
- document.body.style.overflow = ''
65
- }
65
+ isOpen.value = false;
66
+ document.body.style.overflow = "";
67
+ };
66
68
 
67
69
  const addCopyButtons = () => {
68
- const modal = document.querySelector('.issue-modal')
69
- if (!modal) return
70
-
70
+ const modal = document.querySelector(".issue-modal");
71
+ if (!modal) return;
72
+
71
73
  // Look for all code blocks (pre elements or code elements)
72
- const codeBlocks = modal.querySelectorAll('pre, code')
73
-
74
+ const codeBlocks = modal.querySelectorAll("pre, code");
75
+
74
76
  codeBlocks.forEach((block) => {
75
77
  // Skip inline code elements
76
- if (block.tagName === 'CODE' && block.parentElement.tagName !== 'PRE') {
77
- return
78
+ if (block.tagName === "CODE" && block.parentElement.tagName !== "PRE") {
79
+ return;
78
80
  }
79
-
81
+
80
82
  // Skip if copy button already exists
81
- if (block.querySelector('.copy-btn') || block.parentElement?.querySelector('.copy-btn')) return
82
-
83
+ if (
84
+ block.querySelector(".copy-btn") ||
85
+ block.parentElement?.querySelector(".copy-btn")
86
+ )
87
+ return;
88
+
83
89
  // Use pre element for block code, code element for inline
84
- const targetElement = block.tagName === 'PRE' ? block : block.parentElement
85
- if (!targetElement) return
86
-
87
- const copyButton = document.createElement('button')
88
- copyButton.className = 'copy-btn'
90
+ const targetElement = block.tagName === "PRE" ? block : block.parentElement;
91
+ if (!targetElement) return;
92
+
93
+ const copyButton = document.createElement("button");
94
+ copyButton.className = "copy-btn";
89
95
  copyButton.innerHTML = `
90
96
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
91
97
  <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
92
98
  <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
93
99
  </svg>
94
- `
95
- copyButton.title = 'Copy code'
96
- copyButton.type = 'button'
97
-
98
- copyButton.addEventListener('click', async (e) => {
99
- e.preventDefault()
100
- e.stopPropagation()
101
-
100
+ `;
101
+ copyButton.title = "Copy code";
102
+ copyButton.type = "button";
103
+
104
+ copyButton.addEventListener("click", async (e) => {
105
+ e.preventDefault();
106
+ e.stopPropagation();
107
+
102
108
  // Get the code content
103
- const codeElement = targetElement.querySelector('code') || targetElement
104
- if (!codeElement) return
105
-
106
- let textToCopy = codeElement.textContent || codeElement.innerText || ''
107
-
109
+ const codeElement = targetElement.querySelector("code") || targetElement;
110
+ if (!codeElement) return;
111
+
112
+ let textToCopy = codeElement.textContent || codeElement.innerText || "";
113
+
108
114
  // Clean up the text (remove extra whitespace, etc.)
109
- textToCopy = textToCopy.trim()
110
-
111
- console.log('Attempting to copy:', textToCopy) // Debug log
112
-
115
+ textToCopy = textToCopy.trim();
116
+
117
+ console.log("Attempting to copy:", textToCopy); // Debug log
118
+
113
119
  try {
114
120
  // Try modern clipboard API first
115
121
  if (navigator.clipboard && navigator.clipboard.writeText) {
116
- await navigator.clipboard.writeText(textToCopy)
122
+ await navigator.clipboard.writeText(textToCopy);
117
123
  } else {
118
124
  // Fallback for older browsers
119
- const textArea = document.createElement('textarea')
120
- textArea.value = textToCopy
121
- textArea.style.position = 'fixed'
122
- textArea.style.left = '-9999px'
123
- document.body.appendChild(textArea)
124
- textArea.select()
125
- document.execCommand('copy')
126
- document.body.removeChild(textArea)
125
+ const textArea = document.createElement("textarea");
126
+ textArea.value = textToCopy;
127
+ textArea.style.position = "fixed";
128
+ textArea.style.left = "-9999px";
129
+ document.body.appendChild(textArea);
130
+ textArea.select();
131
+ document.execCommand("copy");
132
+ document.body.removeChild(textArea);
127
133
  }
128
-
134
+
129
135
  // Visual feedback
130
- copyButton.classList.add('copied')
136
+ copyButton.classList.add("copied");
131
137
  copyButton.innerHTML = `
132
138
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
133
139
  <polyline points="20,6 9,17 4,12"></polyline>
134
140
  </svg>
135
- `
136
-
141
+ `;
142
+
137
143
  // Reset after 2 seconds
138
144
  setTimeout(() => {
139
- copyButton.classList.remove('copied')
145
+ copyButton.classList.remove("copied");
140
146
  copyButton.innerHTML = `
141
147
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
142
148
  <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
143
149
  <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
144
150
  </svg>
145
- `
146
- }, 2000)
147
-
148
- console.log('Copy successful!') // Debug log
149
-
151
+ `;
152
+ }, 2000);
153
+
154
+ console.log("Copy successful!"); // Debug log
150
155
  } catch (err) {
151
- console.error('Failed to copy code:', err)
152
-
156
+ console.error("Failed to copy code:", err);
157
+
153
158
  // Show error feedback
154
159
  copyButton.innerHTML = `
155
160
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
@@ -157,39 +162,39 @@ const addCopyButtons = () => {
157
162
  <line x1="15" y1="9" x2="9" y2="15"></line>
158
163
  <line x1="9" y1="9" x2="15" y2="15"></line>
159
164
  </svg>
160
- `
161
-
165
+ `;
166
+
162
167
  setTimeout(() => {
163
168
  copyButton.innerHTML = `
164
169
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
165
170
  <rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
166
171
  <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
167
172
  </svg>
168
- `
169
- }, 2000)
173
+ `;
174
+ }, 2000);
170
175
  }
171
- })
172
-
176
+ });
177
+
173
178
  // Position the target element and add the button
174
- targetElement.style.position = 'relative'
175
- targetElement.appendChild(copyButton)
176
- })
177
- }
179
+ targetElement.style.position = "relative";
180
+ targetElement.appendChild(copyButton);
181
+ });
182
+ };
178
183
 
179
184
  const handleKeydown = (e) => {
180
- if (e.key === 'Escape' && isOpen.value) {
181
- closeModal()
185
+ if (e.key === "Escape" && isOpen.value) {
186
+ closeModal();
182
187
  }
183
- }
188
+ };
184
189
 
185
190
  onMounted(() => {
186
- document.addEventListener('keydown', handleKeydown)
187
- })
191
+ document.addEventListener("keydown", handleKeydown);
192
+ });
188
193
 
189
194
  onUnmounted(() => {
190
- document.removeEventListener('keydown', handleKeydown)
191
- document.body.style.overflow = ''
192
- })
195
+ document.removeEventListener("keydown", handleKeydown);
196
+ document.body.style.overflow = "";
197
+ });
193
198
  </script>
194
199
 
195
200
  <style scoped>
@@ -416,7 +421,7 @@ onUnmounted(() => {
416
421
  transform: scale(0.95);
417
422
  }
418
423
 
419
- .solution-content :deep(ul),
424
+ .solution-content :deep(ul),
420
425
  .solution-content :deep(ol) {
421
426
  margin: 12px 0;
422
427
  padding-left: 20px;
@@ -441,32 +446,32 @@ onUnmounted(() => {
441
446
  width: 95vw;
442
447
  max-height: 90vh;
443
448
  }
444
-
449
+
445
450
  .modal-header {
446
451
  padding: 16px 20px;
447
452
  }
448
-
453
+
449
454
  .modal-title h2 {
450
455
  font-size: 18px;
451
456
  }
452
-
457
+
453
458
  .modal-body {
454
459
  padding: 20px;
455
460
  }
456
-
461
+
457
462
  .issue-card {
458
463
  padding: 14px;
459
464
  }
460
-
465
+
461
466
  .issue-header {
462
467
  flex-direction: column;
463
468
  align-items: flex-start;
464
469
  gap: 4px;
465
470
  }
466
-
471
+
467
472
  .expand-hint {
468
473
  opacity: 1;
469
474
  font-size: 11px;
470
475
  }
471
476
  }
472
- </style>
477
+ </style>
@@ -1,162 +1,192 @@
1
- import { defineConfig } from 'vitepress'
2
- import { withMermaid } from 'vitepress-plugin-mermaid'
1
+ import { defineConfig } from "vitepress";
2
+ import { withMermaid } from "vitepress-plugin-mermaid";
3
3
 
4
4
  export default withMermaid(
5
5
  defineConfig({
6
- title: 'Coolors MCP',
7
- titleTemplate: ':title | Coolors MCP Docs',
8
- description: 'Advanced color operations MCP server with Material Design 3 support, CSS theme matching, image color extraction, and accessibility compliance.',
9
- base: '/coolors-mcp/',
6
+ title: "Coolors MCP",
7
+ titleTemplate: ":title | Coolors MCP Docs",
8
+ description:
9
+ "Advanced color operations MCP server with Material Design 3 support, CSS theme matching, image color extraction, and accessibility compliance.",
10
+ base: "/coolors-mcp/",
10
11
  lastUpdated: true,
11
12
  cleanUrls: true,
12
-
13
+ ignoreDeadLinks: true,
14
+
13
15
  // Force dark mode by default
14
16
  //appearance: 'dark',
15
-
17
+
16
18
  head: [
17
19
  // Using emoji as favicon
18
- ['link', { rel: 'icon', href: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text y=".9em" font-size="90">🎨</text></svg>' }],
19
- ['meta', { name: 'theme-color', content: '#0ea5e9' }],
20
- ['meta', { property: 'og:type', content: 'website' }],
21
- ['meta', { property: 'og:locale', content: 'en' }],
22
- ['meta', { property: 'og:title', content: 'Coolors MCP | Advanced Color Operations for MCP' }],
23
- ['meta', { property: 'og:site_name', content: 'Coolors MCP' }],
24
- ['meta', { property: 'og:description', content: 'MCP server for advanced color operations, Material Design themes, CSS refactoring, and image color extraction.' }],
25
- ['meta', { property: 'og:url', content: 'https://x51xxx.github.io/coolors-mcp/' }]
20
+ [
21
+ "link",
22
+ {
23
+ rel: "icon",
24
+ href: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text y=".9em" font-size="90">🎨</text></svg>',
25
+ },
26
+ ],
27
+ ["meta", { name: "theme-color", content: "#0ea5e9" }],
28
+ ["meta", { property: "og:type", content: "website" }],
29
+ ["meta", { property: "og:locale", content: "en" }],
30
+ [
31
+ "meta",
32
+ {
33
+ property: "og:title",
34
+ content: "Coolors MCP | Advanced Color Operations for MCP",
35
+ },
36
+ ],
37
+ ["meta", { property: "og:site_name", content: "Coolors MCP" }],
38
+ [
39
+ "meta",
40
+ {
41
+ property: "og:description",
42
+ content:
43
+ "MCP server for advanced color operations, Material Design themes, CSS refactoring, and image color extraction.",
44
+ },
45
+ ],
46
+ [
47
+ "meta",
48
+ {
49
+ property: "og:url",
50
+ content: "https://x51xxx.github.io/coolors-mcp/",
51
+ },
52
+ ],
26
53
  ],
27
-
54
+
28
55
  themeConfig: {
29
- // No logo - using text branding instead
30
-
31
- nav: [
32
- { text: 'Home', link: '/' },
33
- { text: 'Getting Started', link: '/getting-started' },
34
- { text: 'Tools', link: '/tools/README' }
35
- ],
56
+ // No logo - using text branding instead
36
57
 
37
- sidebar: [
38
- {
39
- text: 'Getting Started',
40
- collapsed: false,
41
- items: [
42
- { text: 'Overview', link: '/' },
43
- { text: 'Installation', link: '/installation' },
44
- { text: 'Getting Started', link: '/getting-started' }
45
- ]
46
- },
47
- {
48
- text: 'Core Concepts',
49
- collapsed: false,
50
- items: [
51
- { text: 'Color Spaces', link: '/concepts/color-spaces' },
52
- { text: 'HCT Color System', link: '/concepts/hct' },
53
- { text: 'Material Design 3', link: '/concepts/material-design' },
54
- { text: 'Theme Matching', link: '/concepts/theme-matching' },
55
- { text: 'Image Analysis', link: '/concepts/image-analysis' },
56
- { text: 'Accessibility', link: '/concepts/accessibility' }
57
- ]
58
- },
59
- {
60
- text: 'Tools Reference',
61
- collapsed: false,
62
- items: [
63
- { text: 'Color Operations', link: '/tools/color-operations' },
64
- { text: 'Material Design', link: '/tools/material-design' },
65
- { text: 'Theme Matching', link: '/tools/theme-matching' },
66
- { text: 'Image Extraction', link: '/tools/image-extraction' },
67
- { text: 'Accessibility', link: '/tools/accessibility' }
68
- ]
69
- },
70
- {
71
- text: 'Examples',
72
- collapsed: false,
73
- items: [
74
- { text: 'Basic Color Operations', link: '/examples/basic-colors' },
75
- { text: 'Creating Themes', link: '/examples/creating-themes' },
76
- { text: 'CSS Refactoring', link: '/examples/css-refactoring' },
77
- { text: 'Image Color Extraction', link: '/examples/image-extraction' }
78
- ]
79
- },
80
- {
81
- text: 'Resources',
82
- collapsed: false,
83
- items: [
84
- { text: 'Troubleshooting', link: '/resources/troubleshooting' },
85
- { text: 'FAQ', link: '/resources/faq' },
86
- { text: 'Contributing', link: '/contributing' }
87
- ]
88
- },
89
- {
90
- text: 'Advanced',
91
- collapsed: true,
92
- items: [
93
- { text: 'Custom Palettes', link: '/advanced/custom-palettes' },
94
- { text: 'Batch Processing', link: '/advanced/batch-processing' },
95
- { text: 'Integration Patterns', link: '/advanced/integration' }
96
- ]
97
- }
98
- ],
58
+ nav: [
59
+ { text: "Home", link: "/" },
60
+ { text: "Getting Started", link: "/getting-started" },
61
+ { text: "Tools", link: "/tools/README" },
62
+ ],
99
63
 
100
- socialLinks: [
101
- { icon: 'github', link: 'https://github.com/x51xxx/coolors-mcp' }
102
- ],
64
+ sidebar: [
65
+ {
66
+ text: "Getting Started",
67
+ collapsed: false,
68
+ items: [
69
+ { text: "Overview", link: "/" },
70
+ { text: "Installation", link: "/installation" },
71
+ { text: "Getting Started", link: "/getting-started" },
72
+ ],
73
+ },
74
+ {
75
+ text: "Core Concepts",
76
+ collapsed: false,
77
+ items: [
78
+ { text: "Color Spaces", link: "/concepts/color-spaces" },
79
+ { text: "HCT Color System", link: "/concepts/hct" },
80
+ { text: "Material Design 3", link: "/concepts/material-design" },
81
+ { text: "Theme Matching", link: "/concepts/theme-matching" },
82
+ { text: "Image Analysis", link: "/concepts/image-analysis" },
83
+ { text: "Accessibility", link: "/concepts/accessibility" },
84
+ ],
85
+ },
86
+ {
87
+ text: "Tools Reference",
88
+ collapsed: false,
89
+ items: [
90
+ { text: "Color Operations", link: "/tools/color-operations" },
91
+ { text: "Material Design", link: "/tools/material-design" },
92
+ { text: "Theme Matching", link: "/tools/theme-matching" },
93
+ { text: "Image Extraction", link: "/tools/image-extraction" },
94
+ { text: "Accessibility", link: "/tools/accessibility" },
95
+ ],
96
+ },
97
+ {
98
+ text: "Examples",
99
+ collapsed: false,
100
+ items: [
101
+ { text: "Basic Color Operations", link: "/examples/basic-colors" },
102
+ { text: "Creating Themes", link: "/examples/creating-themes" },
103
+ { text: "CSS Refactoring", link: "/examples/css-refactoring" },
104
+ {
105
+ text: "Image Color Extraction",
106
+ link: "/examples/image-extraction",
107
+ },
108
+ ],
109
+ },
110
+ {
111
+ text: "Resources",
112
+ collapsed: false,
113
+ items: [
114
+ { text: "Troubleshooting", link: "/resources/troubleshooting" },
115
+ { text: "FAQ", link: "/resources/faq" },
116
+ { text: "Contributing", link: "/contributing" },
117
+ ],
118
+ },
119
+ {
120
+ text: "Advanced",
121
+ collapsed: true,
122
+ items: [
123
+ { text: "Custom Palettes", link: "/advanced/custom-palettes" },
124
+ { text: "Batch Processing", link: "/advanced/batch-processing" },
125
+ { text: "Integration Patterns", link: "/advanced/integration" },
126
+ ],
127
+ },
128
+ ],
103
129
 
104
- footer: {
105
- message: 'Released under the MIT License.',
106
- copyright: `Copyright © ${new Date().getFullYear()} Coolors MCP Contributors`
107
- },
130
+ socialLinks: [
131
+ { icon: "github", link: "https://github.com/x51xxx/coolors-mcp" },
132
+ ],
108
133
 
109
- search: {
110
- provider: 'local',
111
- options: {
112
- placeholder: 'Search docs...',
113
- detailedView: true,
114
- translations: {
115
- button: {
116
- buttonText: 'Search',
117
- buttonAriaLabel: 'Search documentation'
134
+ footer: {
135
+ message: "Released under the MIT License.",
136
+ copyright: `Copyright © ${new Date().getFullYear()} Coolors MCP Contributors`,
137
+ },
138
+
139
+ search: {
140
+ provider: "local",
141
+ options: {
142
+ placeholder: "Search docs...",
143
+ detailedView: true,
144
+ translations: {
145
+ button: {
146
+ buttonText: "Search",
147
+ buttonAriaLabel: "Search documentation",
148
+ },
149
+ modal: {
150
+ noResultsText: "No results found",
151
+ resetButtonTitle: "Clear search",
152
+ footer: {
153
+ selectText: "to select",
154
+ navigateText: "to navigate",
155
+ closeText: "to close",
156
+ },
157
+ },
118
158
  },
119
- modal: {
120
- noResultsText: 'No results found',
121
- resetButtonTitle: 'Clear search',
122
- footer: {
123
- selectText: 'to select',
124
- navigateText: 'to navigate',
125
- closeText: 'to close'
126
- }
127
- }
128
- }
129
- }
130
- },
159
+ },
160
+ },
131
161
 
132
- editLink: {
133
- pattern: 'https://github.com/x51xxx/coolors-mcp/edit/main/docs/:path',
134
- text: 'Edit this page on GitHub'
135
- },
162
+ editLink: {
163
+ pattern: "https://github.com/x51xxx/coolors-mcp/edit/main/docs/:path",
164
+ text: "Edit this page on GitHub",
165
+ },
136
166
 
137
- lastUpdated: {
138
- text: 'Last updated',
139
- formatOptions: {
140
- dateStyle: 'medium',
141
- timeStyle: 'short'
142
- }
143
- },
167
+ lastUpdated: {
168
+ text: "Last updated",
169
+ formatOptions: {
170
+ dateStyle: "medium",
171
+ timeStyle: "short",
172
+ },
173
+ },
144
174
 
145
- docFooter: {
146
- prev: 'Previous page',
147
- next: 'Next page'
148
- },
175
+ docFooter: {
176
+ prev: "Previous page",
177
+ next: "Next page",
178
+ },
149
179
 
150
- outline: {
151
- label: 'On this page',
152
- level: [2, 3]
153
- },
180
+ outline: {
181
+ label: "On this page",
182
+ level: [2, 3],
183
+ },
154
184
 
155
- returnToTopLabel: 'Return to top',
156
- sidebarMenuLabel: 'Menu',
157
- darkModeSwitchLabel: 'Appearance',
158
- lightModeSwitchTitle: 'Switch to light theme',
159
- darkModeSwitchTitle: 'Switch to dark theme'
160
- }
161
- })
162
- )
185
+ returnToTopLabel: "Return to top",
186
+ sidebarMenuLabel: "Menu",
187
+ darkModeSwitchLabel: "Appearance",
188
+ lightModeSwitchTitle: "Switch to light theme",
189
+ darkModeSwitchTitle: "Switch to dark theme",
190
+ },
191
+ }),
192
+ );