@solid-design-system/mcp 0.0.1

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 (569) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/LICENSE.md +10 -0
  3. package/README.md +408 -0
  4. package/dist/bin/start.d.ts +2 -0
  5. package/dist/bin/start.js +8 -0
  6. package/dist/build/build.d.ts +1 -0
  7. package/dist/build/build.js +36 -0
  8. package/dist/build/components.d.ts +9 -0
  9. package/dist/build/components.js +264 -0
  10. package/dist/build/icons.d.ts +12 -0
  11. package/dist/build/icons.js +79 -0
  12. package/dist/build/package-docs.d.ts +1 -0
  13. package/dist/build/package-docs.js +67 -0
  14. package/dist/build/static.d.ts +4 -0
  15. package/dist/build/static.js +39 -0
  16. package/dist/build/styles.d.ts +9 -0
  17. package/dist/build/styles.js +178 -0
  18. package/dist/build/templates.d.ts +1 -0
  19. package/dist/build/templates.js +239 -0
  20. package/dist/build/tokens.d.ts +4 -0
  21. package/dist/build/tokens.js +105 -0
  22. package/dist/server.d.ts +6 -0
  23. package/dist/server.js +20 -0
  24. package/dist/tools/components.d.ts +12 -0
  25. package/dist/tools/components.js +175 -0
  26. package/dist/tools/icon-search.d.ts +7 -0
  27. package/dist/tools/icon-search.js +184 -0
  28. package/dist/tools/index.d.ts +7 -0
  29. package/dist/tools/index.js +7 -0
  30. package/dist/tools/quickstart.d.ts +2 -0
  31. package/dist/tools/quickstart.js +104 -0
  32. package/dist/tools/styles.d.ts +12 -0
  33. package/dist/tools/styles.js +167 -0
  34. package/dist/tools/templates.d.ts +11 -0
  35. package/dist/tools/templates.js +146 -0
  36. package/dist/tools/tokens.d.ts +7 -0
  37. package/dist/tools/tokens.js +198 -0
  38. package/dist/tools/version.d.ts +7 -0
  39. package/dist/tools/version.js +50 -0
  40. package/dist/utilities/components.d.ts +8 -0
  41. package/dist/utilities/components.js +24 -0
  42. package/dist/utilities/config.d.ts +40 -0
  43. package/dist/utilities/config.js +44 -0
  44. package/dist/utilities/file.d.ts +12 -0
  45. package/dist/utilities/file.js +28 -0
  46. package/dist/utilities/index.d.ts +10 -0
  47. package/dist/utilities/index.js +10 -0
  48. package/dist/utilities/input.d.ts +9 -0
  49. package/dist/utilities/input.js +19 -0
  50. package/dist/utilities/metadata.d.ts +33 -0
  51. package/dist/utilities/metadata.js +55 -0
  52. package/dist/utilities/stdio.d.ts +14 -0
  53. package/dist/utilities/stdio.js +57 -0
  54. package/dist/utilities/styles.d.ts +16 -0
  55. package/dist/utilities/styles.js +47 -0
  56. package/dist/utilities/templates.d.ts +5 -0
  57. package/dist/utilities/templates.js +18 -0
  58. package/dist/utilities/tokens.d.ts +6 -0
  59. package/dist/utilities/tokens.js +42 -0
  60. package/dist/utilities/version.d.ts +28 -0
  61. package/dist/utilities/version.js +21 -0
  62. package/metadata/packages/components/docs/customization.md +101 -0
  63. package/metadata/packages/components/docs/form-controls.md +28 -0
  64. package/metadata/packages/components/docs/installation.md +271 -0
  65. package/metadata/packages/components/docs/localization.md +158 -0
  66. package/metadata/packages/components/docs/usage.md +182 -0
  67. package/metadata/packages/components/sd-accordion/info.md +82 -0
  68. package/metadata/packages/components/sd-accordion/stories/open.md +8 -0
  69. package/metadata/packages/components/sd-accordion/stories/summary.md +17 -0
  70. package/metadata/packages/components/sd-accordion-group/info.md +70 -0
  71. package/metadata/packages/components/sd-accordion-group/stories/close-others.md +24 -0
  72. package/metadata/packages/components/sd-audio/info.md +80 -0
  73. package/metadata/packages/components/sd-audio/stories/animated.md +34 -0
  74. package/metadata/packages/components/sd-audio/stories/inverted.md +36 -0
  75. package/metadata/packages/components/sd-audio/stories/no-timestamps.md +34 -0
  76. package/metadata/packages/components/sd-audio/stories/reverse.md +35 -0
  77. package/metadata/packages/components/sd-audio/stories/speed.md +38 -0
  78. package/metadata/packages/components/sd-audio/stories/transcript.md +36 -0
  79. package/metadata/packages/components/sd-badge/info.md +69 -0
  80. package/metadata/packages/components/sd-badge/stories/inverted.md +9 -0
  81. package/metadata/packages/components/sd-badge/stories/overflow.md +11 -0
  82. package/metadata/packages/components/sd-badge/stories/size.md +13 -0
  83. package/metadata/packages/components/sd-badge/stories/variant.md +40 -0
  84. package/metadata/packages/components/sd-brandshape/info.md +65 -0
  85. package/metadata/packages/components/sd-brandshape/stories/image-translate-y.md +13 -0
  86. package/metadata/packages/components/sd-brandshape/stories/shapes.md +22 -0
  87. package/metadata/packages/components/sd-brandshape/stories/transparent-variants.md +24 -0
  88. package/metadata/packages/components/sd-brandshape/stories/variant.md +95 -0
  89. package/metadata/packages/components/sd-breadcrumb/info.md +57 -0
  90. package/metadata/packages/components/sd-breadcrumb-item/info.md +42 -0
  91. package/metadata/packages/components/sd-button/info.md +120 -0
  92. package/metadata/packages/components/sd-button/stories/as-link.md +12 -0
  93. package/metadata/packages/components/sd-button/stories/disabled.md +10 -0
  94. package/metadata/packages/components/sd-button/stories/icon.md +10 -0
  95. package/metadata/packages/components/sd-button/stories/inverted.md +10 -0
  96. package/metadata/packages/components/sd-button/stories/loading.md +10 -0
  97. package/metadata/packages/components/sd-button/stories/size.md +13 -0
  98. package/metadata/packages/components/sd-button/stories/variants.md +15 -0
  99. package/metadata/packages/components/sd-button/stories/visually-disabled.md +23 -0
  100. package/metadata/packages/components/sd-carousel/info.md +99 -0
  101. package/metadata/packages/components/sd-carousel/stories/autoplay-interval.md +66 -0
  102. package/metadata/packages/components/sd-carousel/stories/autoplay.md +23 -0
  103. package/metadata/packages/components/sd-carousel/stories/fade.md +18 -0
  104. package/metadata/packages/components/sd-carousel/stories/inverted.md +17 -0
  105. package/metadata/packages/components/sd-carousel/stories/loop.md +17 -0
  106. package/metadata/packages/components/sd-carousel/stories/slides-per-move.md +49 -0
  107. package/metadata/packages/components/sd-carousel/stories/slides-per-page.md +23 -0
  108. package/metadata/packages/components/sd-carousel/stories/variant.md +32 -0
  109. package/metadata/packages/components/sd-carousel-item/info.md +26 -0
  110. package/metadata/packages/components/sd-checkbox/info.md +88 -0
  111. package/metadata/packages/components/sd-checkbox/stories/checked.md +7 -0
  112. package/metadata/packages/components/sd-checkbox/stories/disabled.md +7 -0
  113. package/metadata/packages/components/sd-checkbox/stories/indeterminate.md +7 -0
  114. package/metadata/packages/components/sd-checkbox/stories/invalid.md +22 -0
  115. package/metadata/packages/components/sd-checkbox/stories/required.md +7 -0
  116. package/metadata/packages/components/sd-checkbox/stories/size.md +14 -0
  117. package/metadata/packages/components/sd-checkbox/stories/visually-disabled.md +11 -0
  118. package/metadata/packages/components/sd-checkbox-group/info.md +71 -0
  119. package/metadata/packages/components/sd-checkbox-group/stories/help-text.md +13 -0
  120. package/metadata/packages/components/sd-checkbox-group/stories/label.md +10 -0
  121. package/metadata/packages/components/sd-checkbox-group/stories/orientation.md +19 -0
  122. package/metadata/packages/components/sd-checkbox-group/stories/size.md +21 -0
  123. package/metadata/packages/components/sd-combobox/info.md +170 -0
  124. package/metadata/packages/components/sd-combobox/stories/async-options.md +27 -0
  125. package/metadata/packages/components/sd-combobox/stories/clearable.md +13 -0
  126. package/metadata/packages/components/sd-combobox/stories/custom-filter.md +20 -0
  127. package/metadata/packages/components/sd-combobox/stories/disabled.md +13 -0
  128. package/metadata/packages/components/sd-combobox/stories/floating-label.md +14 -0
  129. package/metadata/packages/components/sd-combobox/stories/focus.md +11 -0
  130. package/metadata/packages/components/sd-combobox/stories/help-text.md +36 -0
  131. package/metadata/packages/components/sd-combobox/stories/icons.md +15 -0
  132. package/metadata/packages/components/sd-combobox/stories/invalid.md +29 -0
  133. package/metadata/packages/components/sd-combobox/stories/label.md +26 -0
  134. package/metadata/packages/components/sd-combobox/stories/max-options-visible.md +23 -0
  135. package/metadata/packages/components/sd-combobox/stories/multiple.md +24 -0
  136. package/metadata/packages/components/sd-combobox/stories/placeholder.md +13 -0
  137. package/metadata/packages/components/sd-combobox/stories/placement.md +29 -0
  138. package/metadata/packages/components/sd-combobox/stories/required.md +20 -0
  139. package/metadata/packages/components/sd-combobox/stories/search.md +13 -0
  140. package/metadata/packages/components/sd-combobox/stories/size.md +38 -0
  141. package/metadata/packages/components/sd-combobox/stories/suggestion-container-height.md +12 -0
  142. package/metadata/packages/components/sd-combobox/stories/valid.md +29 -0
  143. package/metadata/packages/components/sd-combobox/stories/visually-disabled.md +17 -0
  144. package/metadata/packages/components/sd-datepicker/info.md +159 -0
  145. package/metadata/packages/components/sd-datepicker/stories/alignment.md +10 -0
  146. package/metadata/packages/components/sd-datepicker/stories/disabled-dates.md +11 -0
  147. package/metadata/packages/components/sd-datepicker/stories/disabled-weekends.md +7 -0
  148. package/metadata/packages/components/sd-datepicker/stories/disabled.md +8 -0
  149. package/metadata/packages/components/sd-datepicker/stories/floating-label.md +8 -0
  150. package/metadata/packages/components/sd-datepicker/stories/help-text.md +11 -0
  151. package/metadata/packages/components/sd-datepicker/stories/invalid.md +15 -0
  152. package/metadata/packages/components/sd-datepicker/stories/label.md +11 -0
  153. package/metadata/packages/components/sd-datepicker/stories/placeholder.md +7 -0
  154. package/metadata/packages/components/sd-datepicker/stories/range.md +7 -0
  155. package/metadata/packages/components/sd-datepicker/stories/required.md +7 -0
  156. package/metadata/packages/components/sd-datepicker/stories/size.md +14 -0
  157. package/metadata/packages/components/sd-datepicker/stories/valid.md +16 -0
  158. package/metadata/packages/components/sd-datepicker/stories/visible-month.md +7 -0
  159. package/metadata/packages/components/sd-datepicker/stories/visually-disabled.md +11 -0
  160. package/metadata/packages/components/sd-dialog/info.md +89 -0
  161. package/metadata/packages/components/sd-dialog/stories/headline.md +22 -0
  162. package/metadata/packages/components/sd-dialog/stories/no-close-button.md +32 -0
  163. package/metadata/packages/components/sd-dialog/stories/open.md +72 -0
  164. package/metadata/packages/components/sd-divider/info.md +51 -0
  165. package/metadata/packages/components/sd-divider/stories/inverted.md +7 -0
  166. package/metadata/packages/components/sd-divider/stories/orientation.md +11 -0
  167. package/metadata/packages/components/sd-divider/stories/size.md +10 -0
  168. package/metadata/packages/components/sd-drawer/info.md +89 -0
  169. package/metadata/packages/components/sd-drawer/stories/no-header.md +16 -0
  170. package/metadata/packages/components/sd-drawer/stories/open.md +23 -0
  171. package/metadata/packages/components/sd-drawer/stories/placement.md +23 -0
  172. package/metadata/packages/components/sd-dropdown/info.md +86 -0
  173. package/metadata/packages/components/sd-dropdown/stories/disabled.md +8 -0
  174. package/metadata/packages/components/sd-dropdown/stories/distance.md +8 -0
  175. package/metadata/packages/components/sd-dropdown/stories/no-auto-size.md +10 -0
  176. package/metadata/packages/components/sd-dropdown/stories/no-flip.md +8 -0
  177. package/metadata/packages/components/sd-dropdown/stories/open.md +8 -0
  178. package/metadata/packages/components/sd-dropdown/stories/placement.md +20 -0
  179. package/metadata/packages/components/sd-dropdown/stories/rounded.md +10 -0
  180. package/metadata/packages/components/sd-dropdown/stories/skidding.md +8 -0
  181. package/metadata/packages/components/sd-dropdown/stories/stay-open.md +12 -0
  182. package/metadata/packages/components/sd-expandable/info.md +79 -0
  183. package/metadata/packages/components/sd-expandable/stories/gradient.md +75 -0
  184. package/metadata/packages/components/sd-expandable/stories/inverted.md +33 -0
  185. package/metadata/packages/components/sd-expandable/stories/open.md +60 -0
  186. package/metadata/packages/components/sd-flipcard/info.md +84 -0
  187. package/metadata/packages/components/sd-flipcard/stories/aspect-ratios.md +26 -0
  188. package/metadata/packages/components/sd-flipcard/stories/flip-direction.md +17 -0
  189. package/metadata/packages/components/sd-flipcard/stories/placement.md +17 -0
  190. package/metadata/packages/components/sd-flipcard/stories/variants.md +51 -0
  191. package/metadata/packages/components/sd-header/info.md +60 -0
  192. package/metadata/packages/components/sd-header/stories/fixed.md +9 -0
  193. package/metadata/packages/components/sd-icon/info.md +35 -0
  194. package/metadata/packages/components/sd-icon/stories/color.md +15 -0
  195. package/metadata/packages/components/sd-icon/stories/custom-libraries.md +119 -0
  196. package/metadata/packages/components/sd-icon/stories/label.md +12 -0
  197. package/metadata/packages/components/sd-icon/stories/libraries.md +38 -0
  198. package/metadata/packages/components/sd-icon/stories/name.md +36 -0
  199. package/metadata/packages/components/sd-icon/stories/size.md +10 -0
  200. package/metadata/packages/components/sd-include/info.md +20 -0
  201. package/metadata/packages/components/sd-input/info.md +176 -0
  202. package/metadata/packages/components/sd-input/stories/clearable.md +7 -0
  203. package/metadata/packages/components/sd-input/stories/disabled.md +7 -0
  204. package/metadata/packages/components/sd-input/stories/floating-label.md +8 -0
  205. package/metadata/packages/components/sd-input/stories/help-text.md +11 -0
  206. package/metadata/packages/components/sd-input/stories/icon.md +13 -0
  207. package/metadata/packages/components/sd-input/stories/invalid.md +14 -0
  208. package/metadata/packages/components/sd-input/stories/label.md +11 -0
  209. package/metadata/packages/components/sd-input/stories/max-length.md +7 -0
  210. package/metadata/packages/components/sd-input/stories/max.md +7 -0
  211. package/metadata/packages/components/sd-input/stories/min-length.md +7 -0
  212. package/metadata/packages/components/sd-input/stories/min.md +7 -0
  213. package/metadata/packages/components/sd-input/stories/pattern.md +7 -0
  214. package/metadata/packages/components/sd-input/stories/placeholder.md +7 -0
  215. package/metadata/packages/components/sd-input/stories/read-only.md +8 -0
  216. package/metadata/packages/components/sd-input/stories/required.md +7 -0
  217. package/metadata/packages/components/sd-input/stories/size.md +14 -0
  218. package/metadata/packages/components/sd-input/stories/spin-buttons.md +14 -0
  219. package/metadata/packages/components/sd-input/stories/toggle-password.md +8 -0
  220. package/metadata/packages/components/sd-input/stories/type.md +80 -0
  221. package/metadata/packages/components/sd-input/stories/valid.md +15 -0
  222. package/metadata/packages/components/sd-input/stories/value.md +7 -0
  223. package/metadata/packages/components/sd-input/stories/visually-disabled.md +11 -0
  224. package/metadata/packages/components/sd-link/info.md +80 -0
  225. package/metadata/packages/components/sd-link/stories/as-link.md +12 -0
  226. package/metadata/packages/components/sd-link/stories/disabled.md +7 -0
  227. package/metadata/packages/components/sd-link/stories/icon.md +14 -0
  228. package/metadata/packages/components/sd-link/stories/inverted.md +7 -0
  229. package/metadata/packages/components/sd-link/stories/size.md +13 -0
  230. package/metadata/packages/components/sd-link/stories/standalone.md +29 -0
  231. package/metadata/packages/components/sd-link/stories/visually-disabled.md +17 -0
  232. package/metadata/packages/components/sd-loader/info.md +54 -0
  233. package/metadata/packages/components/sd-loader/stories/default.md +5 -0
  234. package/metadata/packages/components/sd-loader/stories/size.md +15 -0
  235. package/metadata/packages/components/sd-loader/stories/variants.md +19 -0
  236. package/metadata/packages/components/sd-map-marker/info.md +74 -0
  237. package/metadata/packages/components/sd-map-marker/stories/animated.md +13 -0
  238. package/metadata/packages/components/sd-map-marker/stories/as-link.md +13 -0
  239. package/metadata/packages/components/sd-map-marker/stories/not-interactive.md +11 -0
  240. package/metadata/packages/components/sd-map-marker/stories/slot.md +8 -0
  241. package/metadata/packages/components/sd-map-marker/stories/state.md +47 -0
  242. package/metadata/packages/components/sd-map-marker/stories/variant.md +21 -0
  243. package/metadata/packages/components/sd-menu/info.md +68 -0
  244. package/metadata/packages/components/sd-menu/stories/checkmark.md +12 -0
  245. package/metadata/packages/components/sd-menu/stories/disabled.md +12 -0
  246. package/metadata/packages/components/sd-menu/stories/grouping.md +20 -0
  247. package/metadata/packages/components/sd-menu/stories/icon.md +80 -0
  248. package/metadata/packages/components/sd-menu/stories/submenu.md +18 -0
  249. package/metadata/packages/components/sd-menu-item/info.md +36 -0
  250. package/metadata/packages/components/sd-menu-item/stories/checkmark.md +5 -0
  251. package/metadata/packages/components/sd-menu-item/stories/disabled.md +5 -0
  252. package/metadata/packages/components/sd-menu-item/stories/icon-indent.md +8 -0
  253. package/metadata/packages/components/sd-navigation-item/info.md +98 -0
  254. package/metadata/packages/components/sd-navigation-item/stories/accordion.md +15 -0
  255. package/metadata/packages/components/sd-navigation-item/stories/as-link.md +7 -0
  256. package/metadata/packages/components/sd-navigation-item/stories/chevron.md +10 -0
  257. package/metadata/packages/components/sd-navigation-item/stories/current.md +8 -0
  258. package/metadata/packages/components/sd-navigation-item/stories/description.md +11 -0
  259. package/metadata/packages/components/sd-navigation-item/stories/disabled.md +5 -0
  260. package/metadata/packages/components/sd-navigation-item/stories/divider.md +6 -0
  261. package/metadata/packages/components/sd-navigation-item/stories/indented.md +8 -0
  262. package/metadata/packages/components/sd-navigation-item/stories/orientation.md +6 -0
  263. package/metadata/packages/components/sd-navigation-item/stories/relaxed.md +8 -0
  264. package/metadata/packages/components/sd-navigation-item/stories/separated.md +14 -0
  265. package/metadata/packages/components/sd-navigation-item/stories/size.md +13 -0
  266. package/metadata/packages/components/sd-navigation-item/stories/stacked.md +8 -0
  267. package/metadata/packages/components/sd-notification/info.md +135 -0
  268. package/metadata/packages/components/sd-notification/stories/closable.md +13 -0
  269. package/metadata/packages/components/sd-notification/stories/duration-indicator.md +15 -0
  270. package/metadata/packages/components/sd-notification/stories/duration.md +16 -0
  271. package/metadata/packages/components/sd-notification/stories/open.md +5 -0
  272. package/metadata/packages/components/sd-notification/stories/toast-bottom-center.md +53 -0
  273. package/metadata/packages/components/sd-notification/stories/toast-notification.md +67 -0
  274. package/metadata/packages/components/sd-notification/stories/variants.md +20 -0
  275. package/metadata/packages/components/sd-optgroup/info.md +55 -0
  276. package/metadata/packages/components/sd-optgroup/stories/disabled.md +13 -0
  277. package/metadata/packages/components/sd-option/info.md +65 -0
  278. package/metadata/packages/components/sd-option/stories/checkbox.md +19 -0
  279. package/metadata/packages/components/sd-option/stories/disabled.md +22 -0
  280. package/metadata/packages/components/sd-option/stories/selected.md +23 -0
  281. package/metadata/packages/components/sd-option/stories/size.md +26 -0
  282. package/metadata/packages/components/sd-popup/info.md +66 -0
  283. package/metadata/packages/components/sd-progress-bar/info.md +73 -0
  284. package/metadata/packages/components/sd-progress-bar/stories/custom-height.md +5 -0
  285. package/metadata/packages/components/sd-progress-bar/stories/inverted.md +9 -0
  286. package/metadata/packages/components/sd-progress-bar/stories/label.md +16 -0
  287. package/metadata/packages/components/sd-progress-bar/stories/loading.md +5 -0
  288. package/metadata/packages/components/sd-progress-bar/stories/value-formatter.md +20 -0
  289. package/metadata/packages/components/sd-progress-bar/stories/value-max.md +6 -0
  290. package/metadata/packages/components/sd-progress-bar/stories/value-position.md +11 -0
  291. package/metadata/packages/components/sd-quickfact/info.md +84 -0
  292. package/metadata/packages/components/sd-quickfact/stories/expandable.md +46 -0
  293. package/metadata/packages/components/sd-quickfact/stories/open.md +15 -0
  294. package/metadata/packages/components/sd-quickfact/stories/summary.md +13 -0
  295. package/metadata/packages/components/sd-radio/info.md +47 -0
  296. package/metadata/packages/components/sd-radio/stories/disabled.md +9 -0
  297. package/metadata/packages/components/sd-radio/stories/invalid.md +22 -0
  298. package/metadata/packages/components/sd-radio/stories/size.md +26 -0
  299. package/metadata/packages/components/sd-radio/stories/visually-disabled.md +11 -0
  300. package/metadata/packages/components/sd-radio-button/info.md +81 -0
  301. package/metadata/packages/components/sd-radio-button/stories/checked.md +20 -0
  302. package/metadata/packages/components/sd-radio-button/stories/disabled.md +20 -0
  303. package/metadata/packages/components/sd-radio-button/stories/icon.md +17 -0
  304. package/metadata/packages/components/sd-radio-button/stories/label.md +19 -0
  305. package/metadata/packages/components/sd-radio-button/stories/size.md +54 -0
  306. package/metadata/packages/components/sd-radio-button/stories/visually-disabled.md +26 -0
  307. package/metadata/packages/components/sd-radio-group/info.md +91 -0
  308. package/metadata/packages/components/sd-radio-group/stories/disabled.md +10 -0
  309. package/metadata/packages/components/sd-radio-group/stories/help-text.md +12 -0
  310. package/metadata/packages/components/sd-radio-group/stories/invalid.md +23 -0
  311. package/metadata/packages/components/sd-radio-group/stories/label.md +9 -0
  312. package/metadata/packages/components/sd-radio-group/stories/orientation.md +20 -0
  313. package/metadata/packages/components/sd-radio-group/stories/required.md +28 -0
  314. package/metadata/packages/components/sd-radio-group/stories/size.md +20 -0
  315. package/metadata/packages/components/sd-range/info.md +101 -0
  316. package/metadata/packages/components/sd-range/stories/tooltip-formatter.md +13 -0
  317. package/metadata/packages/components/sd-range-tick/info.md +21 -0
  318. package/metadata/packages/components/sd-scrollable/info.md +87 -0
  319. package/metadata/packages/components/sd-scrollable/stories/buttons.md +15 -0
  320. package/metadata/packages/components/sd-scrollable/stories/inset.md +15 -0
  321. package/metadata/packages/components/sd-scrollable/stories/orientation.md +32 -0
  322. package/metadata/packages/components/sd-scrollable/stories/scrollbar.md +15 -0
  323. package/metadata/packages/components/sd-scrollable/stories/shadows.md +15 -0
  324. package/metadata/packages/components/sd-scrollable/stories/step.md +15 -0
  325. package/metadata/packages/components/sd-select/info.md +155 -0
  326. package/metadata/packages/components/sd-select/stories/clearable.md +13 -0
  327. package/metadata/packages/components/sd-select/stories/disabled.md +13 -0
  328. package/metadata/packages/components/sd-select/stories/floating-label.md +14 -0
  329. package/metadata/packages/components/sd-select/stories/help-text.md +23 -0
  330. package/metadata/packages/components/sd-select/stories/invalid.md +30 -0
  331. package/metadata/packages/components/sd-select/stories/label.md +23 -0
  332. package/metadata/packages/components/sd-select/stories/max-options-visible.md +24 -0
  333. package/metadata/packages/components/sd-select/stories/multiple.md +14 -0
  334. package/metadata/packages/components/sd-select/stories/placeholder.md +13 -0
  335. package/metadata/packages/components/sd-select/stories/placement.md +24 -0
  336. package/metadata/packages/components/sd-select/stories/required.md +13 -0
  337. package/metadata/packages/components/sd-select/stories/size.md +34 -0
  338. package/metadata/packages/components/sd-select/stories/use-tags.md +14 -0
  339. package/metadata/packages/components/sd-select/stories/valid.md +29 -0
  340. package/metadata/packages/components/sd-select/stories/visually-disabled.md +17 -0
  341. package/metadata/packages/components/sd-skeleton/info.md +57 -0
  342. package/metadata/packages/components/sd-skeleton/stories/variants.md +13 -0
  343. package/metadata/packages/components/sd-spinner/info.md +53 -0
  344. package/metadata/packages/components/sd-spinner/stories/size.md +15 -0
  345. package/metadata/packages/components/sd-spinner/stories/variants.md +43 -0
  346. package/metadata/packages/components/sd-step/info.md +80 -0
  347. package/metadata/packages/components/sd-step/stories/as-link.md +9 -0
  348. package/metadata/packages/components/sd-step/stories/current.md +9 -0
  349. package/metadata/packages/components/sd-step/stories/description-and-label-using-attributes.md +7 -0
  350. package/metadata/packages/components/sd-step/stories/description.md +28 -0
  351. package/metadata/packages/components/sd-step/stories/disabled.md +9 -0
  352. package/metadata/packages/components/sd-step/stories/horizontal-inline.md +9 -0
  353. package/metadata/packages/components/sd-step/stories/icon.md +10 -0
  354. package/metadata/packages/components/sd-step/stories/label.md +7 -0
  355. package/metadata/packages/components/sd-step/stories/no-tail.md +9 -0
  356. package/metadata/packages/components/sd-step/stories/not-interactive.md +9 -0
  357. package/metadata/packages/components/sd-step/stories/orientation.md +15 -0
  358. package/metadata/packages/components/sd-step/stories/size.md +19 -0
  359. package/metadata/packages/components/sd-step/stories/waiting.md +9 -0
  360. package/metadata/packages/components/sd-step-group/info.md +74 -0
  361. package/metadata/packages/components/sd-step-group/stories/active-step.md +17 -0
  362. package/metadata/packages/components/sd-step-group/stories/horizontal-inline.md +17 -0
  363. package/metadata/packages/components/sd-step-group/stories/icon.md +20 -0
  364. package/metadata/packages/components/sd-step-group/stories/manual-state.md +23 -0
  365. package/metadata/packages/components/sd-step-group/stories/not-interactive.md +17 -0
  366. package/metadata/packages/components/sd-step-group/stories/orientation.md +39 -0
  367. package/metadata/packages/components/sd-step-group/stories/size.md +53 -0
  368. package/metadata/packages/components/sd-switch/info.md +79 -0
  369. package/metadata/packages/components/sd-switch/stories/checked.md +5 -0
  370. package/metadata/packages/components/sd-switch/stories/disabled.md +5 -0
  371. package/metadata/packages/components/sd-switch/stories/invalid.md +18 -0
  372. package/metadata/packages/components/sd-switch/stories/required.md +5 -0
  373. package/metadata/packages/components/sd-tab/info.md +42 -0
  374. package/metadata/packages/components/sd-tab/stories/active.md +44 -0
  375. package/metadata/packages/components/sd-tab/stories/disabled.md +20 -0
  376. package/metadata/packages/components/sd-tab/stories/icon.md +29 -0
  377. package/metadata/packages/components/sd-tab/stories/variant.md +42 -0
  378. package/metadata/packages/components/sd-tab/stories/visually-disabled.md +24 -0
  379. package/metadata/packages/components/sd-tab-group/info.md +88 -0
  380. package/metadata/packages/components/sd-tab-group/stories/activation.md +52 -0
  381. package/metadata/packages/components/sd-tab-group/stories/scrollable.md +66 -0
  382. package/metadata/packages/components/sd-tab-panel/info.md +26 -0
  383. package/metadata/packages/components/sd-tab-panel/stories/open.md +9 -0
  384. package/metadata/packages/components/sd-tag/info.md +75 -0
  385. package/metadata/packages/components/sd-tag/stories/as-link.md +12 -0
  386. package/metadata/packages/components/sd-tag/stories/disabled.md +10 -0
  387. package/metadata/packages/components/sd-tag/stories/icon.md +10 -0
  388. package/metadata/packages/components/sd-tag/stories/removable.md +22 -0
  389. package/metadata/packages/components/sd-tag/stories/selected.md +20 -0
  390. package/metadata/packages/components/sd-tag/stories/size.md +11 -0
  391. package/metadata/packages/components/sd-teaser/info.md +85 -0
  392. package/metadata/packages/components/sd-teaser/stories/breakpoint.md +28 -0
  393. package/metadata/packages/components/sd-teaser/stories/default-and-headline-slot.md +14 -0
  394. package/metadata/packages/components/sd-teaser/stories/distribution.md +13 -0
  395. package/metadata/packages/components/sd-teaser/stories/inset.md +12 -0
  396. package/metadata/packages/components/sd-teaser/stories/media-slot.md +14 -0
  397. package/metadata/packages/components/sd-teaser/stories/meta-slot.md +16 -0
  398. package/metadata/packages/components/sd-teaser/stories/reverse.md +14 -0
  399. package/metadata/packages/components/sd-teaser/stories/variant.md +34 -0
  400. package/metadata/packages/components/sd-teaser-media/info.md +86 -0
  401. package/metadata/packages/components/sd-teaser-media/stories/default-media-and-headline-slot.md +15 -0
  402. package/metadata/packages/components/sd-teaser-media/stories/expandable-slot.md +10 -0
  403. package/metadata/packages/components/sd-teaser-media/stories/meta-slot.md +9 -0
  404. package/metadata/packages/components/sd-teaser-media/stories/variant.md +78 -0
  405. package/metadata/packages/components/sd-textarea/info.md +132 -0
  406. package/metadata/packages/components/sd-textarea/stories/disabled.md +7 -0
  407. package/metadata/packages/components/sd-textarea/stories/floating-label.md +8 -0
  408. package/metadata/packages/components/sd-textarea/stories/help-text.md +11 -0
  409. package/metadata/packages/components/sd-textarea/stories/invalid.md +24 -0
  410. package/metadata/packages/components/sd-textarea/stories/label.md +11 -0
  411. package/metadata/packages/components/sd-textarea/stories/max-length.md +15 -0
  412. package/metadata/packages/components/sd-textarea/stories/min-length.md +15 -0
  413. package/metadata/packages/components/sd-textarea/stories/placeholder.md +7 -0
  414. package/metadata/packages/components/sd-textarea/stories/readonly.md +16 -0
  415. package/metadata/packages/components/sd-textarea/stories/required.md +7 -0
  416. package/metadata/packages/components/sd-textarea/stories/rows.md +11 -0
  417. package/metadata/packages/components/sd-textarea/stories/size.md +16 -0
  418. package/metadata/packages/components/sd-textarea/stories/valid.md +22 -0
  419. package/metadata/packages/components/sd-textarea/stories/visually-disabled.md +18 -0
  420. package/metadata/packages/components/sd-theme-listener/info.md +20 -0
  421. package/metadata/packages/components/sd-theme-listener/stories/default.md +31 -0
  422. package/metadata/packages/components/sd-tooltip/info.md +101 -0
  423. package/metadata/packages/components/sd-tooltip/stories/close-trigger.md +19 -0
  424. package/metadata/packages/components/sd-tooltip/stories/custom-trigger.md +20 -0
  425. package/metadata/packages/components/sd-tooltip/stories/disabled.md +5 -0
  426. package/metadata/packages/components/sd-tooltip/stories/hoist.md +7 -0
  427. package/metadata/packages/components/sd-tooltip/stories/placement.md +43 -0
  428. package/metadata/packages/components/sd-tooltip/stories/size.md +11 -0
  429. package/metadata/packages/components/sd-tooltip/stories/trigger.md +10 -0
  430. package/metadata/packages/components/sd-video/info.md +70 -0
  431. package/metadata/packages/components/sd-video/stories/playing.md +11 -0
  432. package/metadata/packages/components/sd-video/stories/video-element-with-poster-slot.md +24 -0
  433. package/metadata/packages/icons/default/content.json +2267 -0
  434. package/metadata/packages/icons/default/system.json +1112 -0
  435. package/metadata/packages/icons/sd-multi-theming/content.json +27 -0
  436. package/metadata/packages/icons/sd-multi-theming/system.json +307 -0
  437. package/metadata/packages/icons/sd-status-assets/status.json +37 -0
  438. package/metadata/packages/quickstart/docs/quickstart.md +50 -0
  439. package/metadata/packages/styles/docs/installation.md +161 -0
  440. package/metadata/packages/styles/docs/usage.md +11 -0
  441. package/metadata/packages/styles/sd-chip/info.md +49 -0
  442. package/metadata/packages/styles/sd-chip/stories/variants.md +40 -0
  443. package/metadata/packages/styles/sd-container/info.md +39 -0
  444. package/metadata/packages/styles/sd-container/stories/custom-padding.md +7 -0
  445. package/metadata/packages/styles/sd-container/stories/padding.md +7 -0
  446. package/metadata/packages/styles/sd-container/stories/triangle-border.md +26 -0
  447. package/metadata/packages/styles/sd-container/stories/triangle-color.md +12 -0
  448. package/metadata/packages/styles/sd-container/stories/triangle-position.md +27 -0
  449. package/metadata/packages/styles/sd-container/stories/variants.md +36 -0
  450. package/metadata/packages/styles/sd-copyright/info.md +41 -0
  451. package/metadata/packages/styles/sd-copyright/stories/no-shadow.md +13 -0
  452. package/metadata/packages/styles/sd-copyright/stories/orientation.md +16 -0
  453. package/metadata/packages/styles/sd-copyright/stories/placement.md +21 -0
  454. package/metadata/packages/styles/sd-copyright/stories/variants.md +15 -0
  455. package/metadata/packages/styles/sd-display/info.md +42 -0
  456. package/metadata/packages/styles/sd-display/stories/inverted.md +7 -0
  457. package/metadata/packages/styles/sd-display/stories/size.md +13 -0
  458. package/metadata/packages/styles/sd-flag/info.md +45 -0
  459. package/metadata/packages/styles/sd-flag/stories/variants.md +40 -0
  460. package/metadata/packages/styles/sd-footnotes/info.md +49 -0
  461. package/metadata/packages/styles/sd-footnotes/stories/inverted.md +11 -0
  462. package/metadata/packages/styles/sd-footnotes/stories/variants.md +19 -0
  463. package/metadata/packages/styles/sd-headline/info.md +56 -0
  464. package/metadata/packages/styles/sd-headline/stories/inline.md +14 -0
  465. package/metadata/packages/styles/sd-headline/stories/inverted.md +7 -0
  466. package/metadata/packages/styles/sd-headline/stories/sizes.md +21 -0
  467. package/metadata/packages/styles/sd-hidden-links/info.md +55 -0
  468. package/metadata/packages/styles/sd-hidden-links/stories/debug.md +12 -0
  469. package/metadata/packages/styles/sd-hidden-links/stories/multiple-links.md +13 -0
  470. package/metadata/packages/styles/sd-hidden-links/stories/stack-links.md +10 -0
  471. package/metadata/packages/styles/sd-hidden-links/stories/surrounding-content.md +54 -0
  472. package/metadata/packages/styles/sd-hidden-links/stories/title-for-multiple-links.md +34 -0
  473. package/metadata/packages/styles/sd-interactive/info.md +50 -0
  474. package/metadata/packages/styles/sd-interactive/stories/disabled.md +6 -0
  475. package/metadata/packages/styles/sd-interactive/stories/inverted.md +7 -0
  476. package/metadata/packages/styles/sd-interactive/stories/reset.md +30 -0
  477. package/metadata/packages/styles/sd-leadtext/info.md +41 -0
  478. package/metadata/packages/styles/sd-leadtext/stories/inverted.md +11 -0
  479. package/metadata/packages/styles/sd-leadtext/stories/size.md +19 -0
  480. package/metadata/packages/styles/sd-list/info.md +49 -0
  481. package/metadata/packages/styles/sd-list/stories/inverted.md +20 -0
  482. package/metadata/packages/styles/sd-list/stories/levels.md +62 -0
  483. package/metadata/packages/styles/sd-list/stories/orientation.md +34 -0
  484. package/metadata/packages/styles/sd-list/stories/variants.md +34 -0
  485. package/metadata/packages/styles/sd-mark/info.md +30 -0
  486. package/metadata/packages/styles/sd-media/info.md +50 -0
  487. package/metadata/packages/styles/sd-media/stories/description.md +8 -0
  488. package/metadata/packages/styles/sd-media/stories/inverted.md +14 -0
  489. package/metadata/packages/styles/sd-meta/info.md +38 -0
  490. package/metadata/packages/styles/sd-meta/stories/inverted.md +11 -0
  491. package/metadata/packages/styles/sd-meta/stories/pipe.md +7 -0
  492. package/metadata/packages/styles/sd-meta/stories/size.md +11 -0
  493. package/metadata/packages/styles/sd-meta/stories/variants.md +11 -0
  494. package/metadata/packages/styles/sd-pagination/info.md +60 -0
  495. package/metadata/packages/styles/sd-pagination/stories/hidden-headline.md +37 -0
  496. package/metadata/packages/styles/sd-pagination/stories/inverted.md +36 -0
  497. package/metadata/packages/styles/sd-pagination/stories/truncation.md +34 -0
  498. package/metadata/packages/styles/sd-pagination/stories/variants.md +51 -0
  499. package/metadata/packages/styles/sd-paragraph/info.md +39 -0
  500. package/metadata/packages/styles/sd-paragraph/stories/inverted.md +11 -0
  501. package/metadata/packages/styles/sd-paragraph/stories/size.md +19 -0
  502. package/metadata/packages/styles/sd-prose/info.md +49 -0
  503. package/metadata/packages/styles/sd-prose/stories/full-width.md +22 -0
  504. package/metadata/packages/styles/sd-prose/stories/inverted.md +11 -0
  505. package/metadata/packages/styles/sd-prose/stories/styling-options.md +108 -0
  506. package/metadata/packages/styles/sd-status-badge/info.md +44 -0
  507. package/metadata/packages/styles/sd-status-badge/stories/variants.md +27 -0
  508. package/metadata/packages/styles/sd-table/info.md +43 -0
  509. package/metadata/packages/styles/sd-table/stories/slot.md +11 -0
  510. package/metadata/packages/styles/sd-table-cell/info.md +61 -0
  511. package/metadata/packages/styles/sd-table-cell/stories/divider.md +19 -0
  512. package/metadata/packages/styles/sd-table-cell/stories/shadow.md +137 -0
  513. package/metadata/packages/styles/sd-table-cell/stories/variants.md +39 -0
  514. package/metadata/packages/templates/accordion-group.md +163 -0
  515. package/metadata/packages/templates/audio.md +194 -0
  516. package/metadata/packages/templates/autocomplete.md +213 -0
  517. package/metadata/packages/templates/badge.md +149 -0
  518. package/metadata/packages/templates/bottom-navigation.md +263 -0
  519. package/metadata/packages/templates/brandshape.md +81 -0
  520. package/metadata/packages/templates/breadcrumb.md +361 -0
  521. package/metadata/packages/templates/button.md +107 -0
  522. package/metadata/packages/templates/carousel.md +64 -0
  523. package/metadata/packages/templates/checkbox-group.md +81 -0
  524. package/metadata/packages/templates/chip.md +35 -0
  525. package/metadata/packages/templates/combobox.md +92 -0
  526. package/metadata/packages/templates/datepicker.md +44 -0
  527. package/metadata/packages/templates/dialog.md +270 -0
  528. package/metadata/packages/templates/drawer.md +185 -0
  529. package/metadata/packages/templates/dropdown.md +52 -0
  530. package/metadata/packages/templates/expandable.md +61 -0
  531. package/metadata/packages/templates/flag.md +38 -0
  532. package/metadata/packages/templates/flipcard.md +66 -0
  533. package/metadata/packages/templates/footnotes.md +80 -0
  534. package/metadata/packages/templates/forms.md +248 -0
  535. package/metadata/packages/templates/header-navigation.md +1951 -0
  536. package/metadata/packages/templates/headline.md +204 -0
  537. package/metadata/packages/templates/input.md +27 -0
  538. package/metadata/packages/templates/interactive.md +28 -0
  539. package/metadata/packages/templates/link.md +83 -0
  540. package/metadata/packages/templates/list.md +27 -0
  541. package/metadata/packages/templates/map-marker.md +15 -0
  542. package/metadata/packages/templates/mark.md +39 -0
  543. package/metadata/packages/templates/media.md +22 -0
  544. package/metadata/packages/templates/menu.md +93 -0
  545. package/metadata/packages/templates/notification.md +100 -0
  546. package/metadata/packages/templates/pagination.md +340 -0
  547. package/metadata/packages/templates/quickfact.md +267 -0
  548. package/metadata/packages/templates/quote.md +97 -0
  549. package/metadata/packages/templates/radio-button-group.md +24 -0
  550. package/metadata/packages/templates/radio-group.md +51 -0
  551. package/metadata/packages/templates/range.md +135 -0
  552. package/metadata/packages/templates/select.md +63 -0
  553. package/metadata/packages/templates/skeleton.md +32 -0
  554. package/metadata/packages/templates/status-badge.md +252 -0
  555. package/metadata/packages/templates/step-group.md +150 -0
  556. package/metadata/packages/templates/supernumber.md +178 -0
  557. package/metadata/packages/templates/switch.md +51 -0
  558. package/metadata/packages/templates/tab-group.md +157 -0
  559. package/metadata/packages/templates/table.md +2612 -0
  560. package/metadata/packages/templates/tag.md +230 -0
  561. package/metadata/packages/templates/teaser-media.md +164 -0
  562. package/metadata/packages/templates/teaser.md +320 -0
  563. package/metadata/packages/templates/tooltip.md +104 -0
  564. package/metadata/packages/templates/video.md +71 -0
  565. package/metadata/packages/tokens/docs/installation.md +445 -0
  566. package/metadata/packages/tokens/docs/usage.md +338 -0
  567. package/metadata/packages/tokens/themes.json +3 -0
  568. package/metadata/packages/tokens/tokens.json +185 -0
  569. package/package.json +76 -0
@@ -0,0 +1,184 @@
1
+ import fs from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { z } from 'zod';
4
+ import { iconsPath } from '../utilities/index.js';
5
+ const categoriesByLibrary = {
6
+ default: ['content', 'system'],
7
+ 'sd-multi-theming': ['content', 'system'],
8
+ 'sd-status-assets': ['status']
9
+ };
10
+ const loadIcons = async (library, category) => {
11
+ const load = async (cat) => {
12
+ try {
13
+ const filePath = join(iconsPath, library, `${cat}.json`);
14
+ const raw = await fs.readFile(filePath, 'utf-8');
15
+ const icons = JSON.parse(raw);
16
+ return icons.map(icon => ({ name: `${cat}/${icon.technicalId}`, icon }));
17
+ }
18
+ catch {
19
+ return [];
20
+ }
21
+ };
22
+ const cats = categoriesByLibrary[library];
23
+ if (category === 'all') {
24
+ const loaded = await Promise.all(cats.map(load));
25
+ return loaded.flat();
26
+ }
27
+ if (!cats.includes(category)) {
28
+ return [];
29
+ }
30
+ return load(category);
31
+ };
32
+ /**
33
+ * Scores how well a single keyword matches an icon entry.
34
+ * Higher = better match.
35
+ */
36
+ const scoreMatch = (keyword, entry) => {
37
+ const q = keyword.toLowerCase();
38
+ const { technicalId, displayNameDe, tags } = entry.icon;
39
+ if (technicalId === q)
40
+ return 100;
41
+ if (technicalId.includes(q))
42
+ return 80;
43
+ if (displayNameDe.toLowerCase().includes(q))
44
+ return 60;
45
+ if (tags.some(t => t.toLowerCase().includes(q)))
46
+ return 40;
47
+ return 0;
48
+ };
49
+ /**
50
+ * Tool: icon-search
51
+ * Searches the Solid Design System icon library by multiple keywords (EN + DE).
52
+ * Deduplicates and ranks results across all keywords so the LLM can pick the best fit.
53
+ */
54
+ export const iconSearchTool = (server) => {
55
+ server.registerTool('icon-search', {
56
+ description: `Solid Design System icon libraries search by keywords.
57
+ - Pass multiple keywords, English and/or German synonyms, to find icons.
58
+ - Returns icon names in the exact format for <sd-icon name="..."> (e.g. "system/download").
59
+ - Choose a library: \`default\` (default library), \`sd-status-assets\`, or \`sd-multi-theming\`.
60
+ - Choose a category, where applicable: \`content\` (illustrative), \`system\` (UI/navigation), \`status\` (status indicators), or \`all\`.
61
+ - Use the icon documentation tool if you need guidance on when to use each library or category.`,
62
+ inputSchema: {
63
+ keywords: z
64
+ .array(z.string().min(1))
65
+ .default([])
66
+ .describe('One or more search keywords in English and/or German. ' +
67
+ 'Example: ["download", "herunterladen", "save", "speichern"]. ' +
68
+ 'Prefer 3-6 synonyms across both languages for best results.'),
69
+ library: z
70
+ .enum(['default', 'sd-status-assets', 'sd-multi-theming'])
71
+ .default('default')
72
+ .describe('Icon library to search: "default" (default library), "sd-status-assets" (status indicators for components like sd-status-badge), or "sd-multi-theming" (multi-theme compatible icons).'),
73
+ category: z
74
+ .enum(['content', 'system', 'status', 'all'])
75
+ .default('all')
76
+ .describe(`Search scope within the selected library:
77
+ - \`default\`: \`content\` or \`system\`
78
+ - \`sd-multi-theming\`: \`content\` or \`system\`
79
+ - \`sd-status-assets\`: \`status\`
80
+ - \`all\` searches all categories available for the selected library.`)
81
+ },
82
+ title: 'Icon search'
83
+ }, async ({ keywords, library = 'default', category = 'all' }) => {
84
+ if (!keywords.length) {
85
+ return {
86
+ content: [
87
+ {
88
+ type: 'text',
89
+ text: 'Please provide at least one keyword to search for icons.'
90
+ }
91
+ ]
92
+ };
93
+ }
94
+ const selectedLibrary = library;
95
+ const allowedCategories = categoriesByLibrary[selectedLibrary];
96
+ if (category !== 'all' && !allowedCategories.includes(category)) {
97
+ return {
98
+ content: [
99
+ {
100
+ type: 'text',
101
+ text: `Invalid category "${category}" for library "${library}". ` +
102
+ `Allowed categories: ${allowedCategories.map(c => `"${c}"`).join(', ')} or "all".`
103
+ }
104
+ ]
105
+ };
106
+ }
107
+ let all;
108
+ try {
109
+ all = await loadIcons(selectedLibrary, category);
110
+ }
111
+ catch {
112
+ return {
113
+ content: [
114
+ {
115
+ type: 'text',
116
+ text: `Unable to load icons from library "${library}". Try library="default" or use the icons documentation tool.`
117
+ }
118
+ ]
119
+ };
120
+ }
121
+ if (!all.length) {
122
+ return {
123
+ content: [
124
+ {
125
+ type: 'text',
126
+ text: `No icons found in library "${library}"${category !== 'all' ? ` category "${category}"` : ''}. The library may be empty or icon metadata may not be populated yet.`
127
+ }
128
+ ]
129
+ };
130
+ }
131
+ // Collect best score and matched keywords per icon
132
+ const resultMap = new Map();
133
+ for (const keyword of keywords) {
134
+ for (const entry of all) {
135
+ const score = scoreMatch(keyword, entry);
136
+ if (score === 0)
137
+ continue;
138
+ const existing = resultMap.get(entry.name);
139
+ if (existing) {
140
+ existing.bestScore = Math.max(existing.bestScore, score);
141
+ if (!existing.matchedBy.includes(keyword))
142
+ existing.matchedBy.push(keyword);
143
+ }
144
+ else {
145
+ resultMap.set(entry.name, { entry, bestScore: score, matchedBy: [keyword] });
146
+ }
147
+ }
148
+ }
149
+ if (!resultMap.size) {
150
+ return {
151
+ content: [
152
+ {
153
+ type: 'text',
154
+ text: `No icons found matching any of: ${keywords.map(k => `"${k}"`).join(', ')}` +
155
+ (category !== 'all' ? ` in category "${category}"` : '') +
156
+ '.'
157
+ }
158
+ ]
159
+ };
160
+ }
161
+ const sorted = [...resultMap.values()].sort((a, b) => {
162
+ // Primary: best score descending; secondary: more keyword matches first
163
+ if (b.bestScore !== a.bestScore)
164
+ return b.bestScore - a.bestScore;
165
+ return b.matchedBy.length - a.matchedBy.length;
166
+ });
167
+ const lines = sorted.map(({ entry, matchedBy }) => {
168
+ const { displayNameDe, tags } = entry.icon;
169
+ const tagStr = tags.length ? ` — tags: ${tags.slice(0, 3).join(', ')}` : '';
170
+ const matchStr = matchedBy.length > 1 ? ` [matched: ${matchedBy.join(', ')}]` : '';
171
+ return `- \`${entry.name}\` ${displayNameDe}${tagStr}${matchStr}`;
172
+ });
173
+ return {
174
+ content: [
175
+ {
176
+ type: 'text',
177
+ text: `Found ${sorted.length} icon(s) across keywords ${keywords.map(k => `"${k}"`).join(', ')}:\n\n` +
178
+ lines.join('\n') +
179
+ '\n\nUse the name value directly in <sd-icon name="...">.'
180
+ }
181
+ ]
182
+ };
183
+ });
184
+ };
@@ -0,0 +1,7 @@
1
+ export * from './quickstart.js';
2
+ export * from './components.js';
3
+ export * from './icon-search.js';
4
+ export * from './styles.js';
5
+ export * from './templates.js';
6
+ export * from './tokens.js';
7
+ export * from './version.js';
@@ -0,0 +1,7 @@
1
+ export * from './quickstart.js';
2
+ export * from './components.js';
3
+ export * from './icon-search.js';
4
+ export * from './styles.js';
5
+ export * from './templates.js';
6
+ export * from './tokens.js';
7
+ export * from './version.js';
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const quickstartTool: (server: McpServer) => void;
@@ -0,0 +1,104 @@
1
+ import fs from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { z } from 'zod';
4
+ import { componentPackageDocsPath, quickstartPackageDocsPath, stylePackageDocsPath, tokenPackageDocsPath } from '../utilities/index.js';
5
+ const QUICKSTART_DOCS = [
6
+ { slug: 'Quickstart', filePath: join(quickstartPackageDocsPath, 'quickstart.md') },
7
+ { slug: 'components/Installation', filePath: join(componentPackageDocsPath, 'installation.md') },
8
+ { slug: 'components/Usage', filePath: join(componentPackageDocsPath, 'usage.md') },
9
+ { slug: 'styles/Installation', filePath: join(stylePackageDocsPath, 'installation.md') },
10
+ { slug: 'styles/Usage', filePath: join(stylePackageDocsPath, 'usage.md') },
11
+ { slug: 'tokens/Installation', filePath: join(tokenPackageDocsPath, 'installation.md') },
12
+ { slug: 'tokens/Usage', filePath: join(tokenPackageDocsPath, 'usage.md') }
13
+ ];
14
+ // ---------------------------------------------------------------------------
15
+ // Helpers
16
+ // ---------------------------------------------------------------------------
17
+ const trimSlashes = (value) => value.replace(/^\/+|\/+$/g, '');
18
+ const isSafePath = (value) => {
19
+ const parts = value.split('/').filter(Boolean);
20
+ return parts.length > 0 && parts.every(part => part !== '.' && part !== '..' && !part.includes('\0'));
21
+ };
22
+ const readIfExists = async (filePath) => {
23
+ try {
24
+ return await fs.readFile(filePath, 'utf-8');
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ };
30
+ /** Extract the first H1 heading from raw MDX, falling back to the slug basename. */
31
+ const extractHeading = (raw, fallback) => {
32
+ const match = raw.match(/^#\s+(.+)$/m);
33
+ return match ? match[1].trim() : fallback;
34
+ };
35
+ async function discoverDocs() {
36
+ const entries = [];
37
+ for (const source of QUICKSTART_DOCS) {
38
+ const content = await readIfExists(source.filePath);
39
+ if (!content)
40
+ continue;
41
+ entries.push({
42
+ slug: source.slug,
43
+ filePath: source.filePath,
44
+ description: extractHeading(content, source.slug)
45
+ });
46
+ }
47
+ return entries;
48
+ }
49
+ // ---------------------------------------------------------------------------
50
+ // Tool registration
51
+ // ---------------------------------------------------------------------------
52
+ export const quickstartTool = (server) => {
53
+ server.registerTool('quickstart', {
54
+ title: 'Quick Start',
55
+ description: `Solid Design System quick-start documentation.
56
+ - Call without arguments to list available docs.
57
+ - Pass \`doc\` to retrieve one quick-start page.`,
58
+ inputSchema: {
59
+ doc: z.string().optional().describe('Documentation name. Omit to see the full list.')
60
+ }
61
+ }, async ({ doc }) => {
62
+ const docs = await discoverDocs();
63
+ if (!doc) {
64
+ if (docs.length === 0) {
65
+ return { content: [{ type: 'text', text: 'No quick-start docs found.' }] };
66
+ }
67
+ const lines = ['## Available Quick Start Docs', ''];
68
+ for (const item of docs) {
69
+ lines.push(`- ${item.slug}`);
70
+ }
71
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
72
+ }
73
+ const normalizedDoc = trimSlashes(doc);
74
+ if (!normalizedDoc) {
75
+ return {
76
+ content: [{ type: 'text', text: '`doc` must not be empty. Omit it to list available slugs.' }]
77
+ };
78
+ }
79
+ if (!isSafePath(normalizedDoc)) {
80
+ return {
81
+ content: [{ type: 'text', text: '`doc` contains an invalid path. Use a listed slug.' }]
82
+ };
83
+ }
84
+ const selectedDoc = docs.find(item => item.slug.toLowerCase() === normalizedDoc.toLowerCase());
85
+ if (!selectedDoc) {
86
+ return {
87
+ content: [
88
+ {
89
+ type: 'text',
90
+ text: `No documentation found for "${doc}". Available slugs:\n` +
91
+ docs.map(item => `- ${item.slug}`).join('\n')
92
+ }
93
+ ]
94
+ };
95
+ }
96
+ const content = await readIfExists(selectedDoc.filePath);
97
+ if (!content) {
98
+ return {
99
+ content: [{ type: 'text', text: `Unable to read documentation for "${selectedDoc.slug}".` }]
100
+ };
101
+ }
102
+ return { content: [{ type: 'text', text: content }] };
103
+ });
104
+ };
@@ -0,0 +1,12 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Tool: styles
4
+ *
5
+ * Unified entry point for everything styles-related.
6
+ *
7
+ * - No args → list all style utilities + list all package docs topics
8
+ * - `style` only → full spec (usage guidelines + class names)
9
+ * - `style` + `example` → HTML example for that story
10
+ * - `doc` → package-level guide (Installation, Usage, …)
11
+ */
12
+ export declare const stylesTool: (server: McpServer) => void;
@@ -0,0 +1,167 @@
1
+ import fs from 'node:fs/promises';
2
+ import { join, basename, extname } from 'node:path';
3
+ import { z } from 'zod';
4
+ import { stylesPath, stylePackageDocsPath, getAvailableStyles } from '../utilities/index.js';
5
+ import { normalizeSafeSlug } from '../utilities/input.js';
6
+ const readIfExists = async (filePath) => {
7
+ try {
8
+ return await fs.readFile(filePath, 'utf-8');
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ };
14
+ /** Lists all package-level doc slugs (e.g. "installation", "usage"). */
15
+ const getAvailablePackageDocs = async () => {
16
+ try {
17
+ const entries = await fs.readdir(stylePackageDocsPath, { withFileTypes: true });
18
+ return entries
19
+ .filter(d => d.isFile() && extname(d.name) === '.md')
20
+ .map(d => basename(d.name, '.md'))
21
+ .sort();
22
+ }
23
+ catch {
24
+ return [];
25
+ }
26
+ };
27
+ /**
28
+ * Tool: styles
29
+ *
30
+ * Unified entry point for everything styles-related.
31
+ *
32
+ * - No args → list all style utilities + list all package docs topics
33
+ * - `style` only → full spec (usage guidelines + class names)
34
+ * - `style` + `example` → HTML example for that story
35
+ * - `doc` → package-level guide (Installation, Usage, …)
36
+ */
37
+ export const stylesTool = (server) => {
38
+ server.registerTool('styles', {
39
+ description: `Solid Design System CSS style utilities.
40
+ - Call without arguments to list all style utilities and available package docs.
41
+ - Pass \`style\` (e.g. "sd-chip" or "chip") to get the full specification, including guidelines and class names.
42
+ - Pass \`style\` + \`example\` (e.g. style="sd-chip", example="inverted") to get one HTML usage example.
43
+ - Pass \`doc\` (e.g. "installation") to get a package-level guide.
44
+ - Do not combine \`doc\` with \`style\` or \`example\`.`,
45
+ inputSchema: {
46
+ style: z.string().optional().describe('Style name (e.g. "sd-chip" or "chip"). Omit to see all.'),
47
+ example: z
48
+ .string()
49
+ .optional()
50
+ .describe('Example slug for an HTML usage example (e.g. "inverted" or "size"). ' +
51
+ 'Requires `style`. Use `style` alone first to see available slugs.'),
52
+ doc: z
53
+ .string()
54
+ .optional()
55
+ .describe('Package-level guide slug (e.g. "installation", "usage"). Omit to see all available topics.')
56
+ },
57
+ title: 'Styles'
58
+ }, async ({ style, example, doc }) => {
59
+ // Validate if doc is combined with style/example - not allowed
60
+ if (doc && (style || example)) {
61
+ return {
62
+ content: [
63
+ {
64
+ type: 'text',
65
+ text: 'Invalid arguments: `doc` cannot be combined with `style` or `example`. Use either `doc` alone or a style query.'
66
+ }
67
+ ]
68
+ };
69
+ }
70
+ // Validate if `example` is provided without `style` - not allowed
71
+ if (example && !style) {
72
+ return {
73
+ content: [
74
+ {
75
+ type: 'text',
76
+ text: 'Invalid arguments: `example` requires `style`. Use both together, e.g. style="sd-chip", example="inverted".'
77
+ }
78
+ ]
79
+ };
80
+ }
81
+ // --- package-level doc ---
82
+ if (doc) {
83
+ const safeDoc = normalizeSafeSlug(doc);
84
+ if (!safeDoc) {
85
+ return {
86
+ content: [
87
+ { type: 'text', text: 'Invalid arguments: `doc` contains an invalid path. Use a listed doc slug.' }
88
+ ]
89
+ };
90
+ }
91
+ const content = await readIfExists(join(stylePackageDocsPath, `${safeDoc}.md`));
92
+ if (!content) {
93
+ const available = await getAvailablePackageDocs();
94
+ return {
95
+ content: [
96
+ {
97
+ type: 'text',
98
+ text: `No package doc found for "${safeDoc}". Available docs:\n` + available.map(d => `- ${d}`).join('\n')
99
+ }
100
+ ]
101
+ };
102
+ }
103
+ return { content: [{ type: 'text', text: content }] };
104
+ }
105
+ // --- specific style story (HTML example) ---
106
+ if (style && example) {
107
+ style = style.trim().toLowerCase();
108
+ style = style.startsWith('sd-') ? style : `sd-${style}`;
109
+ const safeExample = normalizeSafeSlug(example);
110
+ if (!safeExample) {
111
+ return {
112
+ content: [
113
+ {
114
+ type: 'text',
115
+ text: 'Invalid arguments: `example` contains an invalid path. Use a listed example slug.'
116
+ }
117
+ ]
118
+ };
119
+ }
120
+ const storyMd = await readIfExists(join(stylesPath, style, 'stories', `${safeExample}.md`));
121
+ if (!storyMd) {
122
+ return {
123
+ content: [
124
+ {
125
+ type: 'text',
126
+ text: `No example "${safeExample}" found for "${style}". Use \`style\` alone to see available examples.`
127
+ }
128
+ ]
129
+ };
130
+ }
131
+ return { content: [{ type: 'text', text: storyMd }] };
132
+ }
133
+ // --- specific style spec ---
134
+ if (style) {
135
+ style = style.trim().toLowerCase();
136
+ style = style.startsWith('sd-') ? style : `sd-${style}`;
137
+ const infoMd = await readIfExists(join(stylesPath, style, 'info.md'));
138
+ if (!infoMd) {
139
+ return {
140
+ content: [
141
+ {
142
+ type: 'text',
143
+ text: `No metadata found for "${style}". Call \`styles\` without arguments to see all available styles.`
144
+ }
145
+ ]
146
+ };
147
+ }
148
+ return { content: [{ type: 'text', text: infoMd }] };
149
+ }
150
+ // --- no args: index ---
151
+ const [styles, packageDocs] = await Promise.all([getAvailableStyles(), getAvailablePackageDocs()]);
152
+ const text = [
153
+ '## Solid Design System Style Utilities',
154
+ '',
155
+ 'Use `style` to get the full spec for any specific style utility.',
156
+ '',
157
+ styles.map(s => (s.description ? `- ${s.name} – ${s.description}` : `- ${s.name}`)).join('\n'),
158
+ '',
159
+ '## Package Docs',
160
+ '',
161
+ 'Use `doc` to retrieve any of the following guides:',
162
+ '',
163
+ packageDocs.map(d => `- ${d}`).join('\n')
164
+ ].join('\n');
165
+ return { content: [{ type: 'text', text }] };
166
+ });
167
+ };
@@ -0,0 +1,11 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Tool: templates
4
+ *
5
+ * Unified entry point for all Solid Design System templates.
6
+ *
7
+ * - No args → list all templates
8
+ * - `template` → source code + component inventory for that template
9
+ * - `component` or `style` → filter the list to templates that use that component/style
10
+ */
11
+ export declare const templatesTool: (server: McpServer) => void;
@@ -0,0 +1,146 @@
1
+ import fs from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { z } from 'zod';
4
+ import { templatesPackagePath } from '../utilities/index.js';
5
+ import { normalizeSafeSlug } from '../utilities/input.js';
6
+ const readIfExists = async (filePath) => {
7
+ try {
8
+ return await fs.readFile(filePath, 'utf-8');
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ };
14
+ const listTemplateNames = async () => {
15
+ try {
16
+ return (await fs.readdir(templatesPackagePath, { withFileTypes: true }))
17
+ .filter(d => d.isFile() && d.name.endsWith('.md'))
18
+ .map(d => d.name.replace(/\.md$/, ''))
19
+ .sort();
20
+ }
21
+ catch {
22
+ return [];
23
+ }
24
+ };
25
+ /**
26
+ * Tool: templates
27
+ *
28
+ * Unified entry point for all Solid Design System templates.
29
+ *
30
+ * - No args → list all templates
31
+ * - `template` → source code + component inventory for that template
32
+ * - `component` or `style` → filter the list to templates that use that component/style
33
+ */
34
+ export const templatesTool = (server) => {
35
+ server.registerTool('templates', {
36
+ description: `Solid Design System templates — real-world compositions of multiple sd-* components.
37
+ - Call without arguments to list all templates.
38
+ - Pass \`template\` (e.g. "forms") to get the source code and component inventory for one template.
39
+ - Pass \`component\` (e.g. "sd-button" or "button") or \`style\` (e.g. "sd-chip" or "chip") to list templates that use that tag.
40
+ - Use either \`component\` or \`style\` for filtering, not both together.
41
+ - Do not combine \`template\` with \`component\` or \`style\`.`,
42
+ inputSchema: {
43
+ template: z
44
+ .string()
45
+ .optional()
46
+ .describe('Template name as returned by the list (e.g. "forms" or "button"). Omit to list all.'),
47
+ component: z.string().optional().describe('Optional component tag name (e.g. "sd-button" or "button").'),
48
+ style: z
49
+ .string()
50
+ .optional()
51
+ .describe('Optional style name to filter the template list (e.g. "sd-chip" or "chip").')
52
+ },
53
+ title: 'Templates'
54
+ }, async ({ template, component, style }) => {
55
+ // Validate if `template` is combined with `component`/`style` - not allowed
56
+ if (template && (component || style)) {
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: 'Invalid arguments: `template` cannot be combined with `component` or `style`. Use either `template` alone or a filter query.'
62
+ }
63
+ ]
64
+ };
65
+ }
66
+ // Validate if both `component` and `style` are provided - not allowed
67
+ if (component && style) {
68
+ return {
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: 'Invalid arguments: `component` and `style` cannot be combined. Use one filter at a time.'
73
+ }
74
+ ]
75
+ };
76
+ }
77
+ // --- specific template ---
78
+ if (template) {
79
+ const safeTemplate = normalizeSafeSlug(template);
80
+ if (!safeTemplate) {
81
+ return {
82
+ content: [
83
+ {
84
+ type: 'text',
85
+ text: 'Invalid arguments: `template` contains an invalid path. Use a listed template slug.'
86
+ }
87
+ ]
88
+ };
89
+ }
90
+ const content = await readIfExists(join(templatesPackagePath, `${safeTemplate}.md`));
91
+ if (!content) {
92
+ return {
93
+ content: [
94
+ {
95
+ type: 'text',
96
+ text: `No template found named "${safeTemplate}". Call \`templates\` without arguments to see all available templates.`
97
+ }
98
+ ]
99
+ };
100
+ }
101
+ return { content: [{ type: 'text', text: content }] };
102
+ }
103
+ // --- list (optionally filtered) ---
104
+ const allNames = await listTemplateNames();
105
+ if (!allNames.length) {
106
+ return {
107
+ content: [{ type: 'text', text: 'Template metadata not yet built. Run build:metadata first.' }]
108
+ };
109
+ }
110
+ const filterTag = component
111
+ ? (() => {
112
+ component = component.trim().toLowerCase();
113
+ return component.startsWith('sd-') ? component : `sd-${component}`;
114
+ })()
115
+ : style
116
+ ? (() => {
117
+ style = style.trim().toLowerCase();
118
+ return style.startsWith('sd-') ? style : `sd-${style}`;
119
+ })()
120
+ : undefined;
121
+ let entries = allNames;
122
+ if (filterTag) {
123
+ const filtered = [];
124
+ await Promise.all(allNames.map(async (name) => {
125
+ const raw = await readIfExists(join(templatesPackagePath, `${name}.md`));
126
+ if (!raw)
127
+ return;
128
+ const yamlMatch = raw.match(/^---\n([\s\S]*?)\n---/);
129
+ if (yamlMatch) {
130
+ const tags = [...yamlMatch[1].matchAll(/^ {2}- (sd-[\w-]+)$/gm)].map(m => m[1]);
131
+ if (tags.includes(filterTag))
132
+ filtered.push(name);
133
+ }
134
+ }));
135
+ entries = filtered.sort();
136
+ }
137
+ if (!entries.length) {
138
+ const filter = filterTag ? ` that use "${filterTag}"` : '';
139
+ return { content: [{ type: 'text', text: `No templates found${filter}.` }] };
140
+ }
141
+ const header = filterTag ? `Templates that use \`${filterTag}\`:` : 'Available Solid Design System templates:';
142
+ return {
143
+ content: [{ type: 'text', text: `${header}\n${entries.map(t => `- ${t}`).join('\n')}` }]
144
+ };
145
+ });
146
+ };
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Simple tool to list all available tokens in the Solid Design System.
4
+ * This tool fetches the token data from the Solid package and formats it for display.
5
+ * @param server - The MCP server instance to register the tool on.
6
+ */
7
+ export declare const tokenInfoTool: (server: McpServer) => void;