@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.
- package/CHANGELOG.md +1 -0
- package/LICENSE.md +10 -0
- package/README.md +408 -0
- package/dist/bin/start.d.ts +2 -0
- package/dist/bin/start.js +8 -0
- package/dist/build/build.d.ts +1 -0
- package/dist/build/build.js +36 -0
- package/dist/build/components.d.ts +9 -0
- package/dist/build/components.js +264 -0
- package/dist/build/icons.d.ts +12 -0
- package/dist/build/icons.js +79 -0
- package/dist/build/package-docs.d.ts +1 -0
- package/dist/build/package-docs.js +67 -0
- package/dist/build/static.d.ts +4 -0
- package/dist/build/static.js +39 -0
- package/dist/build/styles.d.ts +9 -0
- package/dist/build/styles.js +178 -0
- package/dist/build/templates.d.ts +1 -0
- package/dist/build/templates.js +239 -0
- package/dist/build/tokens.d.ts +4 -0
- package/dist/build/tokens.js +105 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +20 -0
- package/dist/tools/components.d.ts +12 -0
- package/dist/tools/components.js +175 -0
- package/dist/tools/icon-search.d.ts +7 -0
- package/dist/tools/icon-search.js +184 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/quickstart.d.ts +2 -0
- package/dist/tools/quickstart.js +104 -0
- package/dist/tools/styles.d.ts +12 -0
- package/dist/tools/styles.js +167 -0
- package/dist/tools/templates.d.ts +11 -0
- package/dist/tools/templates.js +146 -0
- package/dist/tools/tokens.d.ts +7 -0
- package/dist/tools/tokens.js +198 -0
- package/dist/tools/version.d.ts +7 -0
- package/dist/tools/version.js +50 -0
- package/dist/utilities/components.d.ts +8 -0
- package/dist/utilities/components.js +24 -0
- package/dist/utilities/config.d.ts +40 -0
- package/dist/utilities/config.js +44 -0
- package/dist/utilities/file.d.ts +12 -0
- package/dist/utilities/file.js +28 -0
- package/dist/utilities/index.d.ts +10 -0
- package/dist/utilities/index.js +10 -0
- package/dist/utilities/input.d.ts +9 -0
- package/dist/utilities/input.js +19 -0
- package/dist/utilities/metadata.d.ts +33 -0
- package/dist/utilities/metadata.js +55 -0
- package/dist/utilities/stdio.d.ts +14 -0
- package/dist/utilities/stdio.js +57 -0
- package/dist/utilities/styles.d.ts +16 -0
- package/dist/utilities/styles.js +47 -0
- package/dist/utilities/templates.d.ts +5 -0
- package/dist/utilities/templates.js +18 -0
- package/dist/utilities/tokens.d.ts +6 -0
- package/dist/utilities/tokens.js +42 -0
- package/dist/utilities/version.d.ts +28 -0
- package/dist/utilities/version.js +21 -0
- package/metadata/packages/components/docs/customization.md +101 -0
- package/metadata/packages/components/docs/form-controls.md +28 -0
- package/metadata/packages/components/docs/installation.md +271 -0
- package/metadata/packages/components/docs/localization.md +158 -0
- package/metadata/packages/components/docs/usage.md +182 -0
- package/metadata/packages/components/sd-accordion/info.md +82 -0
- package/metadata/packages/components/sd-accordion/stories/open.md +8 -0
- package/metadata/packages/components/sd-accordion/stories/summary.md +17 -0
- package/metadata/packages/components/sd-accordion-group/info.md +70 -0
- package/metadata/packages/components/sd-accordion-group/stories/close-others.md +24 -0
- package/metadata/packages/components/sd-audio/info.md +80 -0
- package/metadata/packages/components/sd-audio/stories/animated.md +34 -0
- package/metadata/packages/components/sd-audio/stories/inverted.md +36 -0
- package/metadata/packages/components/sd-audio/stories/no-timestamps.md +34 -0
- package/metadata/packages/components/sd-audio/stories/reverse.md +35 -0
- package/metadata/packages/components/sd-audio/stories/speed.md +38 -0
- package/metadata/packages/components/sd-audio/stories/transcript.md +36 -0
- package/metadata/packages/components/sd-badge/info.md +69 -0
- package/metadata/packages/components/sd-badge/stories/inverted.md +9 -0
- package/metadata/packages/components/sd-badge/stories/overflow.md +11 -0
- package/metadata/packages/components/sd-badge/stories/size.md +13 -0
- package/metadata/packages/components/sd-badge/stories/variant.md +40 -0
- package/metadata/packages/components/sd-brandshape/info.md +65 -0
- package/metadata/packages/components/sd-brandshape/stories/image-translate-y.md +13 -0
- package/metadata/packages/components/sd-brandshape/stories/shapes.md +22 -0
- package/metadata/packages/components/sd-brandshape/stories/transparent-variants.md +24 -0
- package/metadata/packages/components/sd-brandshape/stories/variant.md +95 -0
- package/metadata/packages/components/sd-breadcrumb/info.md +57 -0
- package/metadata/packages/components/sd-breadcrumb-item/info.md +42 -0
- package/metadata/packages/components/sd-button/info.md +120 -0
- package/metadata/packages/components/sd-button/stories/as-link.md +12 -0
- package/metadata/packages/components/sd-button/stories/disabled.md +10 -0
- package/metadata/packages/components/sd-button/stories/icon.md +10 -0
- package/metadata/packages/components/sd-button/stories/inverted.md +10 -0
- package/metadata/packages/components/sd-button/stories/loading.md +10 -0
- package/metadata/packages/components/sd-button/stories/size.md +13 -0
- package/metadata/packages/components/sd-button/stories/variants.md +15 -0
- package/metadata/packages/components/sd-button/stories/visually-disabled.md +23 -0
- package/metadata/packages/components/sd-carousel/info.md +99 -0
- package/metadata/packages/components/sd-carousel/stories/autoplay-interval.md +66 -0
- package/metadata/packages/components/sd-carousel/stories/autoplay.md +23 -0
- package/metadata/packages/components/sd-carousel/stories/fade.md +18 -0
- package/metadata/packages/components/sd-carousel/stories/inverted.md +17 -0
- package/metadata/packages/components/sd-carousel/stories/loop.md +17 -0
- package/metadata/packages/components/sd-carousel/stories/slides-per-move.md +49 -0
- package/metadata/packages/components/sd-carousel/stories/slides-per-page.md +23 -0
- package/metadata/packages/components/sd-carousel/stories/variant.md +32 -0
- package/metadata/packages/components/sd-carousel-item/info.md +26 -0
- package/metadata/packages/components/sd-checkbox/info.md +88 -0
- package/metadata/packages/components/sd-checkbox/stories/checked.md +7 -0
- package/metadata/packages/components/sd-checkbox/stories/disabled.md +7 -0
- package/metadata/packages/components/sd-checkbox/stories/indeterminate.md +7 -0
- package/metadata/packages/components/sd-checkbox/stories/invalid.md +22 -0
- package/metadata/packages/components/sd-checkbox/stories/required.md +7 -0
- package/metadata/packages/components/sd-checkbox/stories/size.md +14 -0
- package/metadata/packages/components/sd-checkbox/stories/visually-disabled.md +11 -0
- package/metadata/packages/components/sd-checkbox-group/info.md +71 -0
- package/metadata/packages/components/sd-checkbox-group/stories/help-text.md +13 -0
- package/metadata/packages/components/sd-checkbox-group/stories/label.md +10 -0
- package/metadata/packages/components/sd-checkbox-group/stories/orientation.md +19 -0
- package/metadata/packages/components/sd-checkbox-group/stories/size.md +21 -0
- package/metadata/packages/components/sd-combobox/info.md +170 -0
- package/metadata/packages/components/sd-combobox/stories/async-options.md +27 -0
- package/metadata/packages/components/sd-combobox/stories/clearable.md +13 -0
- package/metadata/packages/components/sd-combobox/stories/custom-filter.md +20 -0
- package/metadata/packages/components/sd-combobox/stories/disabled.md +13 -0
- package/metadata/packages/components/sd-combobox/stories/floating-label.md +14 -0
- package/metadata/packages/components/sd-combobox/stories/focus.md +11 -0
- package/metadata/packages/components/sd-combobox/stories/help-text.md +36 -0
- package/metadata/packages/components/sd-combobox/stories/icons.md +15 -0
- package/metadata/packages/components/sd-combobox/stories/invalid.md +29 -0
- package/metadata/packages/components/sd-combobox/stories/label.md +26 -0
- package/metadata/packages/components/sd-combobox/stories/max-options-visible.md +23 -0
- package/metadata/packages/components/sd-combobox/stories/multiple.md +24 -0
- package/metadata/packages/components/sd-combobox/stories/placeholder.md +13 -0
- package/metadata/packages/components/sd-combobox/stories/placement.md +29 -0
- package/metadata/packages/components/sd-combobox/stories/required.md +20 -0
- package/metadata/packages/components/sd-combobox/stories/search.md +13 -0
- package/metadata/packages/components/sd-combobox/stories/size.md +38 -0
- package/metadata/packages/components/sd-combobox/stories/suggestion-container-height.md +12 -0
- package/metadata/packages/components/sd-combobox/stories/valid.md +29 -0
- package/metadata/packages/components/sd-combobox/stories/visually-disabled.md +17 -0
- package/metadata/packages/components/sd-datepicker/info.md +159 -0
- package/metadata/packages/components/sd-datepicker/stories/alignment.md +10 -0
- package/metadata/packages/components/sd-datepicker/stories/disabled-dates.md +11 -0
- package/metadata/packages/components/sd-datepicker/stories/disabled-weekends.md +7 -0
- package/metadata/packages/components/sd-datepicker/stories/disabled.md +8 -0
- package/metadata/packages/components/sd-datepicker/stories/floating-label.md +8 -0
- package/metadata/packages/components/sd-datepicker/stories/help-text.md +11 -0
- package/metadata/packages/components/sd-datepicker/stories/invalid.md +15 -0
- package/metadata/packages/components/sd-datepicker/stories/label.md +11 -0
- package/metadata/packages/components/sd-datepicker/stories/placeholder.md +7 -0
- package/metadata/packages/components/sd-datepicker/stories/range.md +7 -0
- package/metadata/packages/components/sd-datepicker/stories/required.md +7 -0
- package/metadata/packages/components/sd-datepicker/stories/size.md +14 -0
- package/metadata/packages/components/sd-datepicker/stories/valid.md +16 -0
- package/metadata/packages/components/sd-datepicker/stories/visible-month.md +7 -0
- package/metadata/packages/components/sd-datepicker/stories/visually-disabled.md +11 -0
- package/metadata/packages/components/sd-dialog/info.md +89 -0
- package/metadata/packages/components/sd-dialog/stories/headline.md +22 -0
- package/metadata/packages/components/sd-dialog/stories/no-close-button.md +32 -0
- package/metadata/packages/components/sd-dialog/stories/open.md +72 -0
- package/metadata/packages/components/sd-divider/info.md +51 -0
- package/metadata/packages/components/sd-divider/stories/inverted.md +7 -0
- package/metadata/packages/components/sd-divider/stories/orientation.md +11 -0
- package/metadata/packages/components/sd-divider/stories/size.md +10 -0
- package/metadata/packages/components/sd-drawer/info.md +89 -0
- package/metadata/packages/components/sd-drawer/stories/no-header.md +16 -0
- package/metadata/packages/components/sd-drawer/stories/open.md +23 -0
- package/metadata/packages/components/sd-drawer/stories/placement.md +23 -0
- package/metadata/packages/components/sd-dropdown/info.md +86 -0
- package/metadata/packages/components/sd-dropdown/stories/disabled.md +8 -0
- package/metadata/packages/components/sd-dropdown/stories/distance.md +8 -0
- package/metadata/packages/components/sd-dropdown/stories/no-auto-size.md +10 -0
- package/metadata/packages/components/sd-dropdown/stories/no-flip.md +8 -0
- package/metadata/packages/components/sd-dropdown/stories/open.md +8 -0
- package/metadata/packages/components/sd-dropdown/stories/placement.md +20 -0
- package/metadata/packages/components/sd-dropdown/stories/rounded.md +10 -0
- package/metadata/packages/components/sd-dropdown/stories/skidding.md +8 -0
- package/metadata/packages/components/sd-dropdown/stories/stay-open.md +12 -0
- package/metadata/packages/components/sd-expandable/info.md +79 -0
- package/metadata/packages/components/sd-expandable/stories/gradient.md +75 -0
- package/metadata/packages/components/sd-expandable/stories/inverted.md +33 -0
- package/metadata/packages/components/sd-expandable/stories/open.md +60 -0
- package/metadata/packages/components/sd-flipcard/info.md +84 -0
- package/metadata/packages/components/sd-flipcard/stories/aspect-ratios.md +26 -0
- package/metadata/packages/components/sd-flipcard/stories/flip-direction.md +17 -0
- package/metadata/packages/components/sd-flipcard/stories/placement.md +17 -0
- package/metadata/packages/components/sd-flipcard/stories/variants.md +51 -0
- package/metadata/packages/components/sd-header/info.md +60 -0
- package/metadata/packages/components/sd-header/stories/fixed.md +9 -0
- package/metadata/packages/components/sd-icon/info.md +35 -0
- package/metadata/packages/components/sd-icon/stories/color.md +15 -0
- package/metadata/packages/components/sd-icon/stories/custom-libraries.md +119 -0
- package/metadata/packages/components/sd-icon/stories/label.md +12 -0
- package/metadata/packages/components/sd-icon/stories/libraries.md +38 -0
- package/metadata/packages/components/sd-icon/stories/name.md +36 -0
- package/metadata/packages/components/sd-icon/stories/size.md +10 -0
- package/metadata/packages/components/sd-include/info.md +20 -0
- package/metadata/packages/components/sd-input/info.md +176 -0
- package/metadata/packages/components/sd-input/stories/clearable.md +7 -0
- package/metadata/packages/components/sd-input/stories/disabled.md +7 -0
- package/metadata/packages/components/sd-input/stories/floating-label.md +8 -0
- package/metadata/packages/components/sd-input/stories/help-text.md +11 -0
- package/metadata/packages/components/sd-input/stories/icon.md +13 -0
- package/metadata/packages/components/sd-input/stories/invalid.md +14 -0
- package/metadata/packages/components/sd-input/stories/label.md +11 -0
- package/metadata/packages/components/sd-input/stories/max-length.md +7 -0
- package/metadata/packages/components/sd-input/stories/max.md +7 -0
- package/metadata/packages/components/sd-input/stories/min-length.md +7 -0
- package/metadata/packages/components/sd-input/stories/min.md +7 -0
- package/metadata/packages/components/sd-input/stories/pattern.md +7 -0
- package/metadata/packages/components/sd-input/stories/placeholder.md +7 -0
- package/metadata/packages/components/sd-input/stories/read-only.md +8 -0
- package/metadata/packages/components/sd-input/stories/required.md +7 -0
- package/metadata/packages/components/sd-input/stories/size.md +14 -0
- package/metadata/packages/components/sd-input/stories/spin-buttons.md +14 -0
- package/metadata/packages/components/sd-input/stories/toggle-password.md +8 -0
- package/metadata/packages/components/sd-input/stories/type.md +80 -0
- package/metadata/packages/components/sd-input/stories/valid.md +15 -0
- package/metadata/packages/components/sd-input/stories/value.md +7 -0
- package/metadata/packages/components/sd-input/stories/visually-disabled.md +11 -0
- package/metadata/packages/components/sd-link/info.md +80 -0
- package/metadata/packages/components/sd-link/stories/as-link.md +12 -0
- package/metadata/packages/components/sd-link/stories/disabled.md +7 -0
- package/metadata/packages/components/sd-link/stories/icon.md +14 -0
- package/metadata/packages/components/sd-link/stories/inverted.md +7 -0
- package/metadata/packages/components/sd-link/stories/size.md +13 -0
- package/metadata/packages/components/sd-link/stories/standalone.md +29 -0
- package/metadata/packages/components/sd-link/stories/visually-disabled.md +17 -0
- package/metadata/packages/components/sd-loader/info.md +54 -0
- package/metadata/packages/components/sd-loader/stories/default.md +5 -0
- package/metadata/packages/components/sd-loader/stories/size.md +15 -0
- package/metadata/packages/components/sd-loader/stories/variants.md +19 -0
- package/metadata/packages/components/sd-map-marker/info.md +74 -0
- package/metadata/packages/components/sd-map-marker/stories/animated.md +13 -0
- package/metadata/packages/components/sd-map-marker/stories/as-link.md +13 -0
- package/metadata/packages/components/sd-map-marker/stories/not-interactive.md +11 -0
- package/metadata/packages/components/sd-map-marker/stories/slot.md +8 -0
- package/metadata/packages/components/sd-map-marker/stories/state.md +47 -0
- package/metadata/packages/components/sd-map-marker/stories/variant.md +21 -0
- package/metadata/packages/components/sd-menu/info.md +68 -0
- package/metadata/packages/components/sd-menu/stories/checkmark.md +12 -0
- package/metadata/packages/components/sd-menu/stories/disabled.md +12 -0
- package/metadata/packages/components/sd-menu/stories/grouping.md +20 -0
- package/metadata/packages/components/sd-menu/stories/icon.md +80 -0
- package/metadata/packages/components/sd-menu/stories/submenu.md +18 -0
- package/metadata/packages/components/sd-menu-item/info.md +36 -0
- package/metadata/packages/components/sd-menu-item/stories/checkmark.md +5 -0
- package/metadata/packages/components/sd-menu-item/stories/disabled.md +5 -0
- package/metadata/packages/components/sd-menu-item/stories/icon-indent.md +8 -0
- package/metadata/packages/components/sd-navigation-item/info.md +98 -0
- package/metadata/packages/components/sd-navigation-item/stories/accordion.md +15 -0
- package/metadata/packages/components/sd-navigation-item/stories/as-link.md +7 -0
- package/metadata/packages/components/sd-navigation-item/stories/chevron.md +10 -0
- package/metadata/packages/components/sd-navigation-item/stories/current.md +8 -0
- package/metadata/packages/components/sd-navigation-item/stories/description.md +11 -0
- package/metadata/packages/components/sd-navigation-item/stories/disabled.md +5 -0
- package/metadata/packages/components/sd-navigation-item/stories/divider.md +6 -0
- package/metadata/packages/components/sd-navigation-item/stories/indented.md +8 -0
- package/metadata/packages/components/sd-navigation-item/stories/orientation.md +6 -0
- package/metadata/packages/components/sd-navigation-item/stories/relaxed.md +8 -0
- package/metadata/packages/components/sd-navigation-item/stories/separated.md +14 -0
- package/metadata/packages/components/sd-navigation-item/stories/size.md +13 -0
- package/metadata/packages/components/sd-navigation-item/stories/stacked.md +8 -0
- package/metadata/packages/components/sd-notification/info.md +135 -0
- package/metadata/packages/components/sd-notification/stories/closable.md +13 -0
- package/metadata/packages/components/sd-notification/stories/duration-indicator.md +15 -0
- package/metadata/packages/components/sd-notification/stories/duration.md +16 -0
- package/metadata/packages/components/sd-notification/stories/open.md +5 -0
- package/metadata/packages/components/sd-notification/stories/toast-bottom-center.md +53 -0
- package/metadata/packages/components/sd-notification/stories/toast-notification.md +67 -0
- package/metadata/packages/components/sd-notification/stories/variants.md +20 -0
- package/metadata/packages/components/sd-optgroup/info.md +55 -0
- package/metadata/packages/components/sd-optgroup/stories/disabled.md +13 -0
- package/metadata/packages/components/sd-option/info.md +65 -0
- package/metadata/packages/components/sd-option/stories/checkbox.md +19 -0
- package/metadata/packages/components/sd-option/stories/disabled.md +22 -0
- package/metadata/packages/components/sd-option/stories/selected.md +23 -0
- package/metadata/packages/components/sd-option/stories/size.md +26 -0
- package/metadata/packages/components/sd-popup/info.md +66 -0
- package/metadata/packages/components/sd-progress-bar/info.md +73 -0
- package/metadata/packages/components/sd-progress-bar/stories/custom-height.md +5 -0
- package/metadata/packages/components/sd-progress-bar/stories/inverted.md +9 -0
- package/metadata/packages/components/sd-progress-bar/stories/label.md +16 -0
- package/metadata/packages/components/sd-progress-bar/stories/loading.md +5 -0
- package/metadata/packages/components/sd-progress-bar/stories/value-formatter.md +20 -0
- package/metadata/packages/components/sd-progress-bar/stories/value-max.md +6 -0
- package/metadata/packages/components/sd-progress-bar/stories/value-position.md +11 -0
- package/metadata/packages/components/sd-quickfact/info.md +84 -0
- package/metadata/packages/components/sd-quickfact/stories/expandable.md +46 -0
- package/metadata/packages/components/sd-quickfact/stories/open.md +15 -0
- package/metadata/packages/components/sd-quickfact/stories/summary.md +13 -0
- package/metadata/packages/components/sd-radio/info.md +47 -0
- package/metadata/packages/components/sd-radio/stories/disabled.md +9 -0
- package/metadata/packages/components/sd-radio/stories/invalid.md +22 -0
- package/metadata/packages/components/sd-radio/stories/size.md +26 -0
- package/metadata/packages/components/sd-radio/stories/visually-disabled.md +11 -0
- package/metadata/packages/components/sd-radio-button/info.md +81 -0
- package/metadata/packages/components/sd-radio-button/stories/checked.md +20 -0
- package/metadata/packages/components/sd-radio-button/stories/disabled.md +20 -0
- package/metadata/packages/components/sd-radio-button/stories/icon.md +17 -0
- package/metadata/packages/components/sd-radio-button/stories/label.md +19 -0
- package/metadata/packages/components/sd-radio-button/stories/size.md +54 -0
- package/metadata/packages/components/sd-radio-button/stories/visually-disabled.md +26 -0
- package/metadata/packages/components/sd-radio-group/info.md +91 -0
- package/metadata/packages/components/sd-radio-group/stories/disabled.md +10 -0
- package/metadata/packages/components/sd-radio-group/stories/help-text.md +12 -0
- package/metadata/packages/components/sd-radio-group/stories/invalid.md +23 -0
- package/metadata/packages/components/sd-radio-group/stories/label.md +9 -0
- package/metadata/packages/components/sd-radio-group/stories/orientation.md +20 -0
- package/metadata/packages/components/sd-radio-group/stories/required.md +28 -0
- package/metadata/packages/components/sd-radio-group/stories/size.md +20 -0
- package/metadata/packages/components/sd-range/info.md +101 -0
- package/metadata/packages/components/sd-range/stories/tooltip-formatter.md +13 -0
- package/metadata/packages/components/sd-range-tick/info.md +21 -0
- package/metadata/packages/components/sd-scrollable/info.md +87 -0
- package/metadata/packages/components/sd-scrollable/stories/buttons.md +15 -0
- package/metadata/packages/components/sd-scrollable/stories/inset.md +15 -0
- package/metadata/packages/components/sd-scrollable/stories/orientation.md +32 -0
- package/metadata/packages/components/sd-scrollable/stories/scrollbar.md +15 -0
- package/metadata/packages/components/sd-scrollable/stories/shadows.md +15 -0
- package/metadata/packages/components/sd-scrollable/stories/step.md +15 -0
- package/metadata/packages/components/sd-select/info.md +155 -0
- package/metadata/packages/components/sd-select/stories/clearable.md +13 -0
- package/metadata/packages/components/sd-select/stories/disabled.md +13 -0
- package/metadata/packages/components/sd-select/stories/floating-label.md +14 -0
- package/metadata/packages/components/sd-select/stories/help-text.md +23 -0
- package/metadata/packages/components/sd-select/stories/invalid.md +30 -0
- package/metadata/packages/components/sd-select/stories/label.md +23 -0
- package/metadata/packages/components/sd-select/stories/max-options-visible.md +24 -0
- package/metadata/packages/components/sd-select/stories/multiple.md +14 -0
- package/metadata/packages/components/sd-select/stories/placeholder.md +13 -0
- package/metadata/packages/components/sd-select/stories/placement.md +24 -0
- package/metadata/packages/components/sd-select/stories/required.md +13 -0
- package/metadata/packages/components/sd-select/stories/size.md +34 -0
- package/metadata/packages/components/sd-select/stories/use-tags.md +14 -0
- package/metadata/packages/components/sd-select/stories/valid.md +29 -0
- package/metadata/packages/components/sd-select/stories/visually-disabled.md +17 -0
- package/metadata/packages/components/sd-skeleton/info.md +57 -0
- package/metadata/packages/components/sd-skeleton/stories/variants.md +13 -0
- package/metadata/packages/components/sd-spinner/info.md +53 -0
- package/metadata/packages/components/sd-spinner/stories/size.md +15 -0
- package/metadata/packages/components/sd-spinner/stories/variants.md +43 -0
- package/metadata/packages/components/sd-step/info.md +80 -0
- package/metadata/packages/components/sd-step/stories/as-link.md +9 -0
- package/metadata/packages/components/sd-step/stories/current.md +9 -0
- package/metadata/packages/components/sd-step/stories/description-and-label-using-attributes.md +7 -0
- package/metadata/packages/components/sd-step/stories/description.md +28 -0
- package/metadata/packages/components/sd-step/stories/disabled.md +9 -0
- package/metadata/packages/components/sd-step/stories/horizontal-inline.md +9 -0
- package/metadata/packages/components/sd-step/stories/icon.md +10 -0
- package/metadata/packages/components/sd-step/stories/label.md +7 -0
- package/metadata/packages/components/sd-step/stories/no-tail.md +9 -0
- package/metadata/packages/components/sd-step/stories/not-interactive.md +9 -0
- package/metadata/packages/components/sd-step/stories/orientation.md +15 -0
- package/metadata/packages/components/sd-step/stories/size.md +19 -0
- package/metadata/packages/components/sd-step/stories/waiting.md +9 -0
- package/metadata/packages/components/sd-step-group/info.md +74 -0
- package/metadata/packages/components/sd-step-group/stories/active-step.md +17 -0
- package/metadata/packages/components/sd-step-group/stories/horizontal-inline.md +17 -0
- package/metadata/packages/components/sd-step-group/stories/icon.md +20 -0
- package/metadata/packages/components/sd-step-group/stories/manual-state.md +23 -0
- package/metadata/packages/components/sd-step-group/stories/not-interactive.md +17 -0
- package/metadata/packages/components/sd-step-group/stories/orientation.md +39 -0
- package/metadata/packages/components/sd-step-group/stories/size.md +53 -0
- package/metadata/packages/components/sd-switch/info.md +79 -0
- package/metadata/packages/components/sd-switch/stories/checked.md +5 -0
- package/metadata/packages/components/sd-switch/stories/disabled.md +5 -0
- package/metadata/packages/components/sd-switch/stories/invalid.md +18 -0
- package/metadata/packages/components/sd-switch/stories/required.md +5 -0
- package/metadata/packages/components/sd-tab/info.md +42 -0
- package/metadata/packages/components/sd-tab/stories/active.md +44 -0
- package/metadata/packages/components/sd-tab/stories/disabled.md +20 -0
- package/metadata/packages/components/sd-tab/stories/icon.md +29 -0
- package/metadata/packages/components/sd-tab/stories/variant.md +42 -0
- package/metadata/packages/components/sd-tab/stories/visually-disabled.md +24 -0
- package/metadata/packages/components/sd-tab-group/info.md +88 -0
- package/metadata/packages/components/sd-tab-group/stories/activation.md +52 -0
- package/metadata/packages/components/sd-tab-group/stories/scrollable.md +66 -0
- package/metadata/packages/components/sd-tab-panel/info.md +26 -0
- package/metadata/packages/components/sd-tab-panel/stories/open.md +9 -0
- package/metadata/packages/components/sd-tag/info.md +75 -0
- package/metadata/packages/components/sd-tag/stories/as-link.md +12 -0
- package/metadata/packages/components/sd-tag/stories/disabled.md +10 -0
- package/metadata/packages/components/sd-tag/stories/icon.md +10 -0
- package/metadata/packages/components/sd-tag/stories/removable.md +22 -0
- package/metadata/packages/components/sd-tag/stories/selected.md +20 -0
- package/metadata/packages/components/sd-tag/stories/size.md +11 -0
- package/metadata/packages/components/sd-teaser/info.md +85 -0
- package/metadata/packages/components/sd-teaser/stories/breakpoint.md +28 -0
- package/metadata/packages/components/sd-teaser/stories/default-and-headline-slot.md +14 -0
- package/metadata/packages/components/sd-teaser/stories/distribution.md +13 -0
- package/metadata/packages/components/sd-teaser/stories/inset.md +12 -0
- package/metadata/packages/components/sd-teaser/stories/media-slot.md +14 -0
- package/metadata/packages/components/sd-teaser/stories/meta-slot.md +16 -0
- package/metadata/packages/components/sd-teaser/stories/reverse.md +14 -0
- package/metadata/packages/components/sd-teaser/stories/variant.md +34 -0
- package/metadata/packages/components/sd-teaser-media/info.md +86 -0
- package/metadata/packages/components/sd-teaser-media/stories/default-media-and-headline-slot.md +15 -0
- package/metadata/packages/components/sd-teaser-media/stories/expandable-slot.md +10 -0
- package/metadata/packages/components/sd-teaser-media/stories/meta-slot.md +9 -0
- package/metadata/packages/components/sd-teaser-media/stories/variant.md +78 -0
- package/metadata/packages/components/sd-textarea/info.md +132 -0
- package/metadata/packages/components/sd-textarea/stories/disabled.md +7 -0
- package/metadata/packages/components/sd-textarea/stories/floating-label.md +8 -0
- package/metadata/packages/components/sd-textarea/stories/help-text.md +11 -0
- package/metadata/packages/components/sd-textarea/stories/invalid.md +24 -0
- package/metadata/packages/components/sd-textarea/stories/label.md +11 -0
- package/metadata/packages/components/sd-textarea/stories/max-length.md +15 -0
- package/metadata/packages/components/sd-textarea/stories/min-length.md +15 -0
- package/metadata/packages/components/sd-textarea/stories/placeholder.md +7 -0
- package/metadata/packages/components/sd-textarea/stories/readonly.md +16 -0
- package/metadata/packages/components/sd-textarea/stories/required.md +7 -0
- package/metadata/packages/components/sd-textarea/stories/rows.md +11 -0
- package/metadata/packages/components/sd-textarea/stories/size.md +16 -0
- package/metadata/packages/components/sd-textarea/stories/valid.md +22 -0
- package/metadata/packages/components/sd-textarea/stories/visually-disabled.md +18 -0
- package/metadata/packages/components/sd-theme-listener/info.md +20 -0
- package/metadata/packages/components/sd-theme-listener/stories/default.md +31 -0
- package/metadata/packages/components/sd-tooltip/info.md +101 -0
- package/metadata/packages/components/sd-tooltip/stories/close-trigger.md +19 -0
- package/metadata/packages/components/sd-tooltip/stories/custom-trigger.md +20 -0
- package/metadata/packages/components/sd-tooltip/stories/disabled.md +5 -0
- package/metadata/packages/components/sd-tooltip/stories/hoist.md +7 -0
- package/metadata/packages/components/sd-tooltip/stories/placement.md +43 -0
- package/metadata/packages/components/sd-tooltip/stories/size.md +11 -0
- package/metadata/packages/components/sd-tooltip/stories/trigger.md +10 -0
- package/metadata/packages/components/sd-video/info.md +70 -0
- package/metadata/packages/components/sd-video/stories/playing.md +11 -0
- package/metadata/packages/components/sd-video/stories/video-element-with-poster-slot.md +24 -0
- package/metadata/packages/icons/default/content.json +2267 -0
- package/metadata/packages/icons/default/system.json +1112 -0
- package/metadata/packages/icons/sd-multi-theming/content.json +27 -0
- package/metadata/packages/icons/sd-multi-theming/system.json +307 -0
- package/metadata/packages/icons/sd-status-assets/status.json +37 -0
- package/metadata/packages/quickstart/docs/quickstart.md +50 -0
- package/metadata/packages/styles/docs/installation.md +161 -0
- package/metadata/packages/styles/docs/usage.md +11 -0
- package/metadata/packages/styles/sd-chip/info.md +49 -0
- package/metadata/packages/styles/sd-chip/stories/variants.md +40 -0
- package/metadata/packages/styles/sd-container/info.md +39 -0
- package/metadata/packages/styles/sd-container/stories/custom-padding.md +7 -0
- package/metadata/packages/styles/sd-container/stories/padding.md +7 -0
- package/metadata/packages/styles/sd-container/stories/triangle-border.md +26 -0
- package/metadata/packages/styles/sd-container/stories/triangle-color.md +12 -0
- package/metadata/packages/styles/sd-container/stories/triangle-position.md +27 -0
- package/metadata/packages/styles/sd-container/stories/variants.md +36 -0
- package/metadata/packages/styles/sd-copyright/info.md +41 -0
- package/metadata/packages/styles/sd-copyright/stories/no-shadow.md +13 -0
- package/metadata/packages/styles/sd-copyright/stories/orientation.md +16 -0
- package/metadata/packages/styles/sd-copyright/stories/placement.md +21 -0
- package/metadata/packages/styles/sd-copyright/stories/variants.md +15 -0
- package/metadata/packages/styles/sd-display/info.md +42 -0
- package/metadata/packages/styles/sd-display/stories/inverted.md +7 -0
- package/metadata/packages/styles/sd-display/stories/size.md +13 -0
- package/metadata/packages/styles/sd-flag/info.md +45 -0
- package/metadata/packages/styles/sd-flag/stories/variants.md +40 -0
- package/metadata/packages/styles/sd-footnotes/info.md +49 -0
- package/metadata/packages/styles/sd-footnotes/stories/inverted.md +11 -0
- package/metadata/packages/styles/sd-footnotes/stories/variants.md +19 -0
- package/metadata/packages/styles/sd-headline/info.md +56 -0
- package/metadata/packages/styles/sd-headline/stories/inline.md +14 -0
- package/metadata/packages/styles/sd-headline/stories/inverted.md +7 -0
- package/metadata/packages/styles/sd-headline/stories/sizes.md +21 -0
- package/metadata/packages/styles/sd-hidden-links/info.md +55 -0
- package/metadata/packages/styles/sd-hidden-links/stories/debug.md +12 -0
- package/metadata/packages/styles/sd-hidden-links/stories/multiple-links.md +13 -0
- package/metadata/packages/styles/sd-hidden-links/stories/stack-links.md +10 -0
- package/metadata/packages/styles/sd-hidden-links/stories/surrounding-content.md +54 -0
- package/metadata/packages/styles/sd-hidden-links/stories/title-for-multiple-links.md +34 -0
- package/metadata/packages/styles/sd-interactive/info.md +50 -0
- package/metadata/packages/styles/sd-interactive/stories/disabled.md +6 -0
- package/metadata/packages/styles/sd-interactive/stories/inverted.md +7 -0
- package/metadata/packages/styles/sd-interactive/stories/reset.md +30 -0
- package/metadata/packages/styles/sd-leadtext/info.md +41 -0
- package/metadata/packages/styles/sd-leadtext/stories/inverted.md +11 -0
- package/metadata/packages/styles/sd-leadtext/stories/size.md +19 -0
- package/metadata/packages/styles/sd-list/info.md +49 -0
- package/metadata/packages/styles/sd-list/stories/inverted.md +20 -0
- package/metadata/packages/styles/sd-list/stories/levels.md +62 -0
- package/metadata/packages/styles/sd-list/stories/orientation.md +34 -0
- package/metadata/packages/styles/sd-list/stories/variants.md +34 -0
- package/metadata/packages/styles/sd-mark/info.md +30 -0
- package/metadata/packages/styles/sd-media/info.md +50 -0
- package/metadata/packages/styles/sd-media/stories/description.md +8 -0
- package/metadata/packages/styles/sd-media/stories/inverted.md +14 -0
- package/metadata/packages/styles/sd-meta/info.md +38 -0
- package/metadata/packages/styles/sd-meta/stories/inverted.md +11 -0
- package/metadata/packages/styles/sd-meta/stories/pipe.md +7 -0
- package/metadata/packages/styles/sd-meta/stories/size.md +11 -0
- package/metadata/packages/styles/sd-meta/stories/variants.md +11 -0
- package/metadata/packages/styles/sd-pagination/info.md +60 -0
- package/metadata/packages/styles/sd-pagination/stories/hidden-headline.md +37 -0
- package/metadata/packages/styles/sd-pagination/stories/inverted.md +36 -0
- package/metadata/packages/styles/sd-pagination/stories/truncation.md +34 -0
- package/metadata/packages/styles/sd-pagination/stories/variants.md +51 -0
- package/metadata/packages/styles/sd-paragraph/info.md +39 -0
- package/metadata/packages/styles/sd-paragraph/stories/inverted.md +11 -0
- package/metadata/packages/styles/sd-paragraph/stories/size.md +19 -0
- package/metadata/packages/styles/sd-prose/info.md +49 -0
- package/metadata/packages/styles/sd-prose/stories/full-width.md +22 -0
- package/metadata/packages/styles/sd-prose/stories/inverted.md +11 -0
- package/metadata/packages/styles/sd-prose/stories/styling-options.md +108 -0
- package/metadata/packages/styles/sd-status-badge/info.md +44 -0
- package/metadata/packages/styles/sd-status-badge/stories/variants.md +27 -0
- package/metadata/packages/styles/sd-table/info.md +43 -0
- package/metadata/packages/styles/sd-table/stories/slot.md +11 -0
- package/metadata/packages/styles/sd-table-cell/info.md +61 -0
- package/metadata/packages/styles/sd-table-cell/stories/divider.md +19 -0
- package/metadata/packages/styles/sd-table-cell/stories/shadow.md +137 -0
- package/metadata/packages/styles/sd-table-cell/stories/variants.md +39 -0
- package/metadata/packages/templates/accordion-group.md +163 -0
- package/metadata/packages/templates/audio.md +194 -0
- package/metadata/packages/templates/autocomplete.md +213 -0
- package/metadata/packages/templates/badge.md +149 -0
- package/metadata/packages/templates/bottom-navigation.md +263 -0
- package/metadata/packages/templates/brandshape.md +81 -0
- package/metadata/packages/templates/breadcrumb.md +361 -0
- package/metadata/packages/templates/button.md +107 -0
- package/metadata/packages/templates/carousel.md +64 -0
- package/metadata/packages/templates/checkbox-group.md +81 -0
- package/metadata/packages/templates/chip.md +35 -0
- package/metadata/packages/templates/combobox.md +92 -0
- package/metadata/packages/templates/datepicker.md +44 -0
- package/metadata/packages/templates/dialog.md +270 -0
- package/metadata/packages/templates/drawer.md +185 -0
- package/metadata/packages/templates/dropdown.md +52 -0
- package/metadata/packages/templates/expandable.md +61 -0
- package/metadata/packages/templates/flag.md +38 -0
- package/metadata/packages/templates/flipcard.md +66 -0
- package/metadata/packages/templates/footnotes.md +80 -0
- package/metadata/packages/templates/forms.md +248 -0
- package/metadata/packages/templates/header-navigation.md +1951 -0
- package/metadata/packages/templates/headline.md +204 -0
- package/metadata/packages/templates/input.md +27 -0
- package/metadata/packages/templates/interactive.md +28 -0
- package/metadata/packages/templates/link.md +83 -0
- package/metadata/packages/templates/list.md +27 -0
- package/metadata/packages/templates/map-marker.md +15 -0
- package/metadata/packages/templates/mark.md +39 -0
- package/metadata/packages/templates/media.md +22 -0
- package/metadata/packages/templates/menu.md +93 -0
- package/metadata/packages/templates/notification.md +100 -0
- package/metadata/packages/templates/pagination.md +340 -0
- package/metadata/packages/templates/quickfact.md +267 -0
- package/metadata/packages/templates/quote.md +97 -0
- package/metadata/packages/templates/radio-button-group.md +24 -0
- package/metadata/packages/templates/radio-group.md +51 -0
- package/metadata/packages/templates/range.md +135 -0
- package/metadata/packages/templates/select.md +63 -0
- package/metadata/packages/templates/skeleton.md +32 -0
- package/metadata/packages/templates/status-badge.md +252 -0
- package/metadata/packages/templates/step-group.md +150 -0
- package/metadata/packages/templates/supernumber.md +178 -0
- package/metadata/packages/templates/switch.md +51 -0
- package/metadata/packages/templates/tab-group.md +157 -0
- package/metadata/packages/templates/table.md +2612 -0
- package/metadata/packages/templates/tag.md +230 -0
- package/metadata/packages/templates/teaser-media.md +164 -0
- package/metadata/packages/templates/teaser.md +320 -0
- package/metadata/packages/templates/tooltip.md +104 -0
- package/metadata/packages/templates/video.md +71 -0
- package/metadata/packages/tokens/docs/installation.md +445 -0
- package/metadata/packages/tokens/docs/usage.md +338 -0
- package/metadata/packages/tokens/themes.json +3 -0
- package/metadata/packages/tokens/tokens.json +185 -0
- 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,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;
|