@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,239 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { mkdirSync, rmSync } from 'node:fs';
|
|
3
|
+
import { dirname, join, basename } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { componentPath, createPath, templatesPackagePath, stylesPath } from '../utilities/index.js';
|
|
7
|
+
/** Absolute path to the docs stories/templates directory */
|
|
8
|
+
const DOCS_TEMPLATES_DIR = join(dirname(fileURLToPath(import.meta.url)), '../../../docs/src/stories/templates');
|
|
9
|
+
const extractComponents = (source) => {
|
|
10
|
+
const matches = [...source.matchAll(/\bsd-[\w-]+/g)].map(m => m[0]);
|
|
11
|
+
return [...new Set(matches)].sort();
|
|
12
|
+
};
|
|
13
|
+
const extractTemplateLiteralContent = (source, startIndex) => {
|
|
14
|
+
let i = startIndex;
|
|
15
|
+
let depth = 0;
|
|
16
|
+
while (i < source.length) {
|
|
17
|
+
const c = source[i];
|
|
18
|
+
if (depth === 0 && c === '`')
|
|
19
|
+
return source.slice(startIndex, i);
|
|
20
|
+
if (c === '$' && source[i + 1] === '{') {
|
|
21
|
+
depth++;
|
|
22
|
+
i += 2;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (depth > 0) {
|
|
26
|
+
if (c === '{')
|
|
27
|
+
depth++;
|
|
28
|
+
else if (c === '}')
|
|
29
|
+
depth--;
|
|
30
|
+
}
|
|
31
|
+
i++;
|
|
32
|
+
}
|
|
33
|
+
return source.slice(startIndex);
|
|
34
|
+
};
|
|
35
|
+
const dedent = (str) => {
|
|
36
|
+
const lines = str.split('\n');
|
|
37
|
+
while (lines.length && !lines[0].trim())
|
|
38
|
+
lines.shift();
|
|
39
|
+
while (lines.length && !lines[lines.length - 1].trim())
|
|
40
|
+
lines.pop();
|
|
41
|
+
if (!lines.length)
|
|
42
|
+
return '';
|
|
43
|
+
const indent = Math.min(...lines.filter(l => l.trim()).map(l => l.match(/^(\s*)/)?.[1].length ?? 0));
|
|
44
|
+
return lines.map(l => l.slice(indent)).join('\n');
|
|
45
|
+
};
|
|
46
|
+
const exportNameToTitle = (name) => name.replace(/([A-Z])/g, ' $1').trim();
|
|
47
|
+
const extractDefaultTitle = (source) => {
|
|
48
|
+
const match = source.match(/title:\s*['"]Templates\/([^'"]+)['"]/);
|
|
49
|
+
return match ? match[1] : null;
|
|
50
|
+
};
|
|
51
|
+
const extractExamples = (source) => {
|
|
52
|
+
const examples = [];
|
|
53
|
+
const exportPattern = /^export const (\w+) = \{/gm;
|
|
54
|
+
let match;
|
|
55
|
+
while ((match = exportPattern.exec(source)) !== null) {
|
|
56
|
+
const exportName = match[1];
|
|
57
|
+
const blockStart = match.index + match[0].length;
|
|
58
|
+
const nameMatch = source.slice(blockStart, blockStart + 500).match(/name:\s*['"]([^'"]+)['"]/);
|
|
59
|
+
const exampleName = nameMatch ? nameMatch[1] : exportNameToTitle(exportName);
|
|
60
|
+
const blockSlice = source.slice(blockStart);
|
|
61
|
+
const htmlIdx = blockSlice.indexOf('html`');
|
|
62
|
+
if (htmlIdx === -1)
|
|
63
|
+
continue;
|
|
64
|
+
const rawHtml = extractTemplateLiteralContent(source, blockStart + htmlIdx + 5);
|
|
65
|
+
const html = dedent(rawHtml);
|
|
66
|
+
if (!html)
|
|
67
|
+
continue;
|
|
68
|
+
examples.push({ name: exampleName, html });
|
|
69
|
+
}
|
|
70
|
+
return examples;
|
|
71
|
+
};
|
|
72
|
+
const extractSection = (docs, heading) => {
|
|
73
|
+
const re = new RegExp(`###\\s+${heading}\\n+([\\s\\S]*?)(?=\\n+###(?!#)|$)`, 'i');
|
|
74
|
+
const m = docs.match(re);
|
|
75
|
+
return m ? m[1].trim() : '';
|
|
76
|
+
};
|
|
77
|
+
const promoteSubheadings = (block) => block.replace(/^####\s+/gm, '### ');
|
|
78
|
+
export const buildTemplates = async () => {
|
|
79
|
+
const spinner = ora({ prefixText: 'Templates:', text: 'Generating static metadata...' }).start();
|
|
80
|
+
try {
|
|
81
|
+
spinner.text = 'Cleaning up old metadata...';
|
|
82
|
+
rmSync(templatesPackagePath, { recursive: true, force: true });
|
|
83
|
+
spinner.succeed('Old metadata cleaned up.');
|
|
84
|
+
await createPath(templatesPackagePath);
|
|
85
|
+
spinner.text = 'Generating templates metadata...';
|
|
86
|
+
const storyFiles = (await fs.readdir(DOCS_TEMPLATES_DIR)).filter(f => f.endsWith('.stories.ts'));
|
|
87
|
+
await Promise.all(storyFiles.map(async (file) => {
|
|
88
|
+
const name = basename(file, '.stories.ts');
|
|
89
|
+
const source = await fs.readFile(join(DOCS_TEMPLATES_DIR, file), 'utf-8');
|
|
90
|
+
const components = extractComponents(source);
|
|
91
|
+
const examples = extractExamples(source);
|
|
92
|
+
const title = extractDefaultTitle(source) ?? name;
|
|
93
|
+
const frontmatter = [
|
|
94
|
+
'---',
|
|
95
|
+
`name: ${name}`,
|
|
96
|
+
`title: ${title}`,
|
|
97
|
+
'components:',
|
|
98
|
+
...components.map(c => ` - ${c}`),
|
|
99
|
+
'version: 1.0.0',
|
|
100
|
+
'---'
|
|
101
|
+
].join('\n');
|
|
102
|
+
const content = [
|
|
103
|
+
frontmatter,
|
|
104
|
+
...examples.map(example => `## Template: ${example.name}\n\n\`\`\`html\n${example.html}\n\`\`\``)
|
|
105
|
+
].join('\n\n');
|
|
106
|
+
await fs.writeFile(join(templatesPackagePath, `${name}.md`), content);
|
|
107
|
+
}));
|
|
108
|
+
spinner.succeed('Templates metadata generated successfully.');
|
|
109
|
+
spinner.text = 'Finalising component metadata into subdirectories...';
|
|
110
|
+
const compFiles = (await fs.readdir(componentPath)).filter(f => f.endsWith('.json'));
|
|
111
|
+
// Write final metadata
|
|
112
|
+
await Promise.all(compFiles.map(async (file) => {
|
|
113
|
+
const tagName = basename(file, '.json');
|
|
114
|
+
const raw = await fs.readFile(join(componentPath, file), 'utf-8').catch(() => null);
|
|
115
|
+
if (!raw)
|
|
116
|
+
return;
|
|
117
|
+
const { api, docs, stories: examples } = JSON.parse(raw);
|
|
118
|
+
const exampleSlugList = examples.map(example => example.slug);
|
|
119
|
+
// Create component subdirectory and stories subfolder
|
|
120
|
+
const compDir = join(componentPath, tagName);
|
|
121
|
+
const storiesDir = join(compDir, 'stories');
|
|
122
|
+
mkdirSync(storiesDir, { recursive: true });
|
|
123
|
+
// Write per-story files into stories/ subfolder
|
|
124
|
+
await Promise.all(examples.map(example => {
|
|
125
|
+
const lines = [];
|
|
126
|
+
if (example.description)
|
|
127
|
+
lines.push(example.description, '');
|
|
128
|
+
lines.push('```html', example.html, '```');
|
|
129
|
+
return fs.writeFile(join(storiesDir, `${example.slug}.md`), lines.join('\n'));
|
|
130
|
+
}));
|
|
131
|
+
// CSS parts — names only, no descriptions
|
|
132
|
+
const partNames = api.parts
|
|
133
|
+
? api.parts
|
|
134
|
+
.split('\n')
|
|
135
|
+
.map(line => line.replace(/^part\.([\w-]+):.*/, 'part.$1'))
|
|
136
|
+
.filter(Boolean)
|
|
137
|
+
: [];
|
|
138
|
+
// Build info.md sections
|
|
139
|
+
const sections = [];
|
|
140
|
+
// Overview
|
|
141
|
+
sections.push(`## Overview\n\n\`<${tagName}>\` — ${api.summary}`);
|
|
142
|
+
// API section with sub-headings
|
|
143
|
+
const apiSubSections = [];
|
|
144
|
+
if (exampleSlugList.length) {
|
|
145
|
+
apiSubSections.push(`### Examples\n\nUse the components tool by passing the args \`component\` and \`example\` for any of these combinations:\n\n${exampleSlugList.map(example => `- component: ${tagName}, example: ${example}`).join('\n')}`);
|
|
146
|
+
}
|
|
147
|
+
if (api.props)
|
|
148
|
+
apiSubSections.push(`### Key Properties\n\n${api.props}`);
|
|
149
|
+
if (api.events)
|
|
150
|
+
apiSubSections.push(`### Events\n\n${api.events}`);
|
|
151
|
+
if (api.slots)
|
|
152
|
+
apiSubSections.push(`### Slots\n\n${api.slots}`);
|
|
153
|
+
if (partNames.length)
|
|
154
|
+
apiSubSections.push(`### CSS Parts\n\n${partNames.join('\n')}`);
|
|
155
|
+
if (apiSubSections.length)
|
|
156
|
+
sections.push(`## API\n\n${apiSubSections.join('\n\n')}`);
|
|
157
|
+
// Guidelines section
|
|
158
|
+
if (docs) {
|
|
159
|
+
const guideSubSections = [];
|
|
160
|
+
const useCases = extractSection(docs, 'Common Use Cases');
|
|
161
|
+
if (useCases)
|
|
162
|
+
guideSubSections.push(`### Use Cases\n\n${useCases}`);
|
|
163
|
+
const guidelines = extractSection(docs, 'Usage Guidelines');
|
|
164
|
+
if (guidelines)
|
|
165
|
+
guideSubSections.push(`### Rules\n\n${promoteSubheadings(guidelines)}`);
|
|
166
|
+
const accessibility = extractSection(docs, 'Accessibility Information');
|
|
167
|
+
if (accessibility)
|
|
168
|
+
guideSubSections.push(`### Accessibility\n\n${accessibility}`);
|
|
169
|
+
if (guideSubSections.length)
|
|
170
|
+
sections.push(`## Guidelines\n\n${guideSubSections.join('\n\n')}`);
|
|
171
|
+
}
|
|
172
|
+
await fs.writeFile(join(compDir, 'info.md'), sections.join('\n\n'));
|
|
173
|
+
// Remove intermediate JSON
|
|
174
|
+
await fs.unlink(join(componentPath, file)).catch(() => null);
|
|
175
|
+
}));
|
|
176
|
+
spinner.succeed('Component subdirectories finalised.');
|
|
177
|
+
// Finalize styles metadata: convert intermediate JSON to subdirectories with info.md + stories/
|
|
178
|
+
spinner.text = 'Finalising style metadata into subdirectories...';
|
|
179
|
+
const styleFiles = (await fs.readdir(stylesPath)).filter(f => f.endsWith('.json'));
|
|
180
|
+
await Promise.all(styleFiles.map(async (file) => {
|
|
181
|
+
const styleName = basename(file, '.json');
|
|
182
|
+
const raw = await fs.readFile(join(stylesPath, file), 'utf-8').catch(() => null);
|
|
183
|
+
if (!raw)
|
|
184
|
+
return;
|
|
185
|
+
const { summary, docs, relatedTemplates, stories: examples } = JSON.parse(raw);
|
|
186
|
+
const exampleSlugList = examples.map(example => example.slug);
|
|
187
|
+
// Create style subdirectory and stories subfolder
|
|
188
|
+
const styleDir = join(stylesPath, styleName);
|
|
189
|
+
const storiesDir = join(styleDir, 'stories');
|
|
190
|
+
mkdirSync(storiesDir, { recursive: true });
|
|
191
|
+
// Write per-story files into stories/ subfolder
|
|
192
|
+
await Promise.all(examples.map(example => {
|
|
193
|
+
const lines = [];
|
|
194
|
+
if (example.description)
|
|
195
|
+
lines.push(example.description, '');
|
|
196
|
+
lines.push('```html', example.html, '```');
|
|
197
|
+
return fs.writeFile(join(storiesDir, `${example.slug}.md`), lines.join('\n'));
|
|
198
|
+
}));
|
|
199
|
+
// Build info.md sections
|
|
200
|
+
const sections = [];
|
|
201
|
+
// Overview
|
|
202
|
+
sections.push(`## Overview\n\n\`${styleName}\`${summary ? ` – ${summary}` : ' style utility'}`);
|
|
203
|
+
// API section with sub-headings
|
|
204
|
+
const apiSubSections = [];
|
|
205
|
+
if (exampleSlugList.length) {
|
|
206
|
+
apiSubSections.push(`### Examples\n\nUse the styles tool (with \`style\` + \`example\` args) to retrieve the HTML for any of these examples:\n\n${exampleSlugList.map(example => `- ${styleName}/${example}`).join('\n')}`);
|
|
207
|
+
}
|
|
208
|
+
if (apiSubSections.length)
|
|
209
|
+
sections.push(`## API\n\n${apiSubSections.join('\n\n')}`);
|
|
210
|
+
// Guidelines section
|
|
211
|
+
if (docs) {
|
|
212
|
+
const guideSubSections = [];
|
|
213
|
+
const useCases = extractSection(docs, 'Common Use Cases');
|
|
214
|
+
if (useCases)
|
|
215
|
+
guideSubSections.push(`### Use Cases\n\n${useCases}`);
|
|
216
|
+
const guidelines = extractSection(docs, 'Usage Guidelines');
|
|
217
|
+
if (guidelines)
|
|
218
|
+
guideSubSections.push(`### Rules\n\n${promoteSubheadings(guidelines)}`);
|
|
219
|
+
const accessibility = extractSection(docs, 'Accessibility Information');
|
|
220
|
+
if (accessibility)
|
|
221
|
+
guideSubSections.push(`### Accessibility\n\n${accessibility}`);
|
|
222
|
+
if (guideSubSections.length)
|
|
223
|
+
sections.push(`## Guidelines\n\n${guideSubSections.join('\n\n')}`);
|
|
224
|
+
}
|
|
225
|
+
// Related Templates
|
|
226
|
+
if (relatedTemplates.length) {
|
|
227
|
+
sections.push(`### Related Templates\n\n${relatedTemplates.map(t => `- ${t}`).join('\n')}\n\nUse the templates tool (with \`template\` arg) to retrieve the full code for any of these templates.`);
|
|
228
|
+
}
|
|
229
|
+
await fs.writeFile(join(styleDir, 'info.md'), sections.join('\n\n'));
|
|
230
|
+
// Remove intermediate JSON
|
|
231
|
+
await fs.unlink(join(stylesPath, file)).catch(() => null);
|
|
232
|
+
}));
|
|
233
|
+
spinner.succeed('Style subdirectories finalised.');
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
spinner.fail(`Failed to generate templates metadata. Error: ${error}`);
|
|
237
|
+
throw error;
|
|
238
|
+
}
|
|
239
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { rmSync } from 'node:fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { globby } from 'globby';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { createPath, tokensPath } from '../utilities/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Minimal list of token metadata files to copy.
|
|
10
|
+
* Keep only essential docs; token/theme indexes are generated as compact JSON.
|
|
11
|
+
*/
|
|
12
|
+
const filesToCopy = [];
|
|
13
|
+
const extractTokenNamesFromTailwind = (content) => {
|
|
14
|
+
const themeMatch = content.match(/@theme\s+inline\s*\{([\s\S]*?)\n\}/);
|
|
15
|
+
if (!themeMatch)
|
|
16
|
+
return [];
|
|
17
|
+
const themeBlock = themeMatch[1];
|
|
18
|
+
const propertyNames = [];
|
|
19
|
+
const propRegex = /^\s*(--[\w\\/.-]+)\s*:/gm;
|
|
20
|
+
let match;
|
|
21
|
+
while ((match = propRegex.exec(themeBlock)) !== null) {
|
|
22
|
+
propertyNames.push(match[1]);
|
|
23
|
+
}
|
|
24
|
+
return propertyNames;
|
|
25
|
+
};
|
|
26
|
+
const getAvailableThemes = async (moduleDir) => {
|
|
27
|
+
const candidates = ['dist/themes', 'themes'];
|
|
28
|
+
for (const relPath of candidates) {
|
|
29
|
+
const absPath = path.join(moduleDir, relPath);
|
|
30
|
+
try {
|
|
31
|
+
const entries = await fs.readdir(absPath, { withFileTypes: true });
|
|
32
|
+
const themes = entries
|
|
33
|
+
.filter(entry => entry.isDirectory())
|
|
34
|
+
.map(entry => entry.name)
|
|
35
|
+
.sort();
|
|
36
|
+
if (themes.length)
|
|
37
|
+
return themes;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Try next candidate path.
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [];
|
|
44
|
+
};
|
|
45
|
+
const readTailwindThemeFile = async (moduleDir) => {
|
|
46
|
+
const candidates = ['dist/themes/tailwind.css', 'themes/tailwind.css', 'dist/tailwind.css', 'tailwind.css'];
|
|
47
|
+
for (const relPath of candidates) {
|
|
48
|
+
try {
|
|
49
|
+
return await fs.readFile(path.join(moduleDir, relPath), 'utf-8');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Try next candidate path.
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`Could not find tailwind.css in tokens package. Checked: ${candidates.map(candidate => `'${candidate}'`).join(', ')}`);
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Sets up all wanted data from the tokens package and adds it to the static metadata.
|
|
59
|
+
*/
|
|
60
|
+
export const buildTokens = async () => {
|
|
61
|
+
const spinner = ora({
|
|
62
|
+
prefixText: 'Tokens:',
|
|
63
|
+
text: 'Generating static metadata...'
|
|
64
|
+
}).start();
|
|
65
|
+
try {
|
|
66
|
+
spinner.text = 'Cleaning up old metadata...';
|
|
67
|
+
rmSync(tokensPath, { recursive: true, force: true });
|
|
68
|
+
spinner.succeed('Old metadata cleaned up.');
|
|
69
|
+
spinner.text = 'Creating new metadata directory...';
|
|
70
|
+
// Create the tokens directory if it doesn't exist
|
|
71
|
+
await createPath(tokensPath);
|
|
72
|
+
spinner.succeed('New metadata directory created.');
|
|
73
|
+
spinner.text = 'Copying files to metadata directory...';
|
|
74
|
+
// Get the module's root directory
|
|
75
|
+
// Use dist/theme.js as the resolve anchor (it's a valid export of the package).
|
|
76
|
+
// dirname gives us dist/, so one '../' reaches the package root.
|
|
77
|
+
const moduleUrl = import.meta.resolve('@solid-design-system/tokens/dist/theme.js');
|
|
78
|
+
const modulePath = fileURLToPath(moduleUrl);
|
|
79
|
+
const moduleDir = path.join(path.dirname(modulePath), '../');
|
|
80
|
+
// Process the files (placeholder for actual logic)
|
|
81
|
+
const contents = await globby(filesToCopy, {
|
|
82
|
+
cwd: moduleDir,
|
|
83
|
+
onlyFiles: true
|
|
84
|
+
});
|
|
85
|
+
// Write files sequentially because multiple theme files share the same basename
|
|
86
|
+
// (e.g. `icons.css`), and parallel copy operations can corrupt output.
|
|
87
|
+
for (const file of contents) {
|
|
88
|
+
const sourcePath = path.join(moduleDir, file);
|
|
89
|
+
const destPath = path.join(tokensPath, path.basename(file));
|
|
90
|
+
await fs.copyFile(sourcePath, destPath);
|
|
91
|
+
}
|
|
92
|
+
// Persist a compact token index instead of shipping full Tailwind metadata file.
|
|
93
|
+
const tailwindContent = await readTailwindThemeFile(moduleDir);
|
|
94
|
+
const tokens = extractTokenNamesFromTailwind(tailwindContent);
|
|
95
|
+
await fs.writeFile(path.join(tokensPath, 'tokens.json'), JSON.stringify({ tokens }, null, 2));
|
|
96
|
+
// Persist an explicit list of available themes without copying every theme CSS file.
|
|
97
|
+
const themes = await getAvailableThemes(moduleDir);
|
|
98
|
+
await fs.writeFile(path.join(tokensPath, 'themes.json'), JSON.stringify({ themes }, null, 2));
|
|
99
|
+
spinner.succeed('Tokens metadata generated successfully.');
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
spinner.fail(`Failed to generate tokens metadata. Error: ${error}`);
|
|
103
|
+
throw error; // Re-throw to handle it in the calling function
|
|
104
|
+
}
|
|
105
|
+
};
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a new instance of the MCP server configured for the Solid Design System.
|
|
4
|
+
* @returns A new instance of the MCP server configured for the Solid Design System.
|
|
5
|
+
*/
|
|
6
|
+
export declare const createServer: () => McpServer;
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import * as tools from './tools/index.js';
|
|
3
|
+
import { getVersion } from './utilities/version.js';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a new instance of the MCP server configured for the Solid Design System.
|
|
6
|
+
* @returns A new instance of the MCP server configured for the Solid Design System.
|
|
7
|
+
*/
|
|
8
|
+
export const createServer = () => {
|
|
9
|
+
const version = getVersion();
|
|
10
|
+
const server = new McpServer({
|
|
11
|
+
description: 'A server for the Solid Design System that provides tools to interact with components and resources.',
|
|
12
|
+
name: 'solid design system',
|
|
13
|
+
title: 'Solid Design System MCP Server',
|
|
14
|
+
version
|
|
15
|
+
});
|
|
16
|
+
Object.values(tools).forEach(tool => {
|
|
17
|
+
tool(server);
|
|
18
|
+
});
|
|
19
|
+
return server;
|
|
20
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tool: components
|
|
4
|
+
*
|
|
5
|
+
* Unified entry point for everything component-related.
|
|
6
|
+
*
|
|
7
|
+
* - No args → list all sd-* components + list all package docs topics
|
|
8
|
+
* - `component` only → full spec (usage guidelines + API)
|
|
9
|
+
* - `component` + `example` → HTML example for that example
|
|
10
|
+
* - `doc` → package-level guide (Installation, Localization, Customization, …)
|
|
11
|
+
*/
|
|
12
|
+
export declare const componentsTool: (server: McpServer) => void;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { join, basename, extname } from 'node:path';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { componentPath, componentPackageDocsPath, getAvailableComponents } 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", "localization"). */
|
|
15
|
+
const getAvailablePackageDocs = async () => {
|
|
16
|
+
try {
|
|
17
|
+
const entries = await fs.readdir(componentPackageDocsPath, { 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: components
|
|
29
|
+
*
|
|
30
|
+
* Unified entry point for everything component-related.
|
|
31
|
+
*
|
|
32
|
+
* - No args → list all sd-* components + list all package docs topics
|
|
33
|
+
* - `component` only → full spec (usage guidelines + API)
|
|
34
|
+
* - `component` + `example` → HTML example for that example
|
|
35
|
+
* - `doc` → package-level guide (Installation, Localization, Customization, …)
|
|
36
|
+
*/
|
|
37
|
+
export const componentsTool = (server) => {
|
|
38
|
+
server.registerTool('components', {
|
|
39
|
+
description: `Solid Design System components.
|
|
40
|
+
- Call without arguments to list all sd-* components and available package docs.
|
|
41
|
+
- Pass \`component\` (e.g. "sd-button" or "button") to get the full component specification, including API, events, slots, examples, and guidelines.
|
|
42
|
+
- Pass \`component\` + \`example\` (e.g. component="sd-button", example="inverted") to get one HTML usage example.
|
|
43
|
+
- Pass \`doc\` (e.g. "localization") to get a package-level guide.
|
|
44
|
+
- Do not combine \`doc\` with \`component\` or \`example\`.`,
|
|
45
|
+
inputSchema: {
|
|
46
|
+
component: z
|
|
47
|
+
.string()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('Component tag name (e.g. "sd-button" or "button"). Omit to see the full list.'),
|
|
50
|
+
example: z
|
|
51
|
+
.string()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('Slug for an HTML usage example (e.g. "inverted" or "no-shadow"). ' +
|
|
54
|
+
'Requires `component`. Use component alone first to see available example slugs.'),
|
|
55
|
+
doc: z
|
|
56
|
+
.string()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe('Package-level guide slug (e.g. "localization", "installation", "customization"). ' +
|
|
59
|
+
'Omit to see all available topics.')
|
|
60
|
+
},
|
|
61
|
+
title: 'Components'
|
|
62
|
+
}, async ({ component, example, doc }) => {
|
|
63
|
+
// Validate if doc is combined with component/example - not allowed
|
|
64
|
+
if (doc && (component || example)) {
|
|
65
|
+
return {
|
|
66
|
+
content: [
|
|
67
|
+
{
|
|
68
|
+
type: 'text',
|
|
69
|
+
text: 'Invalid arguments: `doc` cannot be combined with `component` or `example`. Use either `doc` alone or a component query.'
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// Validate if `example` is provided without `component` - not allowed
|
|
75
|
+
if (example && !component) {
|
|
76
|
+
return {
|
|
77
|
+
content: [
|
|
78
|
+
{
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: 'Invalid arguments: `example` requires `component`. Use both together, e.g. component="sd-button", example="inverted".'
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// --- package-level doc ---
|
|
86
|
+
if (doc) {
|
|
87
|
+
const safeDoc = normalizeSafeSlug(doc);
|
|
88
|
+
if (!safeDoc) {
|
|
89
|
+
return {
|
|
90
|
+
content: [
|
|
91
|
+
{ type: 'text', text: 'Invalid arguments: `doc` contains an invalid path. Use a listed doc slug.' }
|
|
92
|
+
]
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const content = await readIfExists(join(componentPackageDocsPath, `${safeDoc}.md`));
|
|
96
|
+
if (!content) {
|
|
97
|
+
const available = await getAvailablePackageDocs();
|
|
98
|
+
return {
|
|
99
|
+
content: [
|
|
100
|
+
{
|
|
101
|
+
type: 'text',
|
|
102
|
+
text: `No package doc found for "${safeDoc}". Available docs:\n` + available.map(d => `- ${d}`).join('\n')
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return { content: [{ type: 'text', text: content }] };
|
|
108
|
+
}
|
|
109
|
+
// --- specific component example (HTML example) ---
|
|
110
|
+
if (component && example) {
|
|
111
|
+
component = component.trim().toLowerCase();
|
|
112
|
+
component = component.startsWith('sd-') ? component : `sd-${component}`;
|
|
113
|
+
const safeExample = normalizeSafeSlug(example);
|
|
114
|
+
if (!safeExample) {
|
|
115
|
+
return {
|
|
116
|
+
content: [
|
|
117
|
+
{
|
|
118
|
+
type: 'text',
|
|
119
|
+
text: 'Invalid arguments: `example` contains an invalid path. Use a listed example slug.'
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const exampleMd = await readIfExists(join(componentPath, component, 'stories', `${safeExample}.md`));
|
|
125
|
+
if (!exampleMd) {
|
|
126
|
+
return {
|
|
127
|
+
content: [
|
|
128
|
+
{
|
|
129
|
+
type: 'text',
|
|
130
|
+
text: `No example "${safeExample}" found for "${component}". Use \`component\` alone to see available examples.`
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return { content: [{ type: 'text', text: exampleMd }] };
|
|
136
|
+
}
|
|
137
|
+
// --- specific component spec ---
|
|
138
|
+
if (component) {
|
|
139
|
+
component = component.trim().toLowerCase();
|
|
140
|
+
component = component.startsWith('sd-') ? component : `sd-${component}`;
|
|
141
|
+
const infoMd = await readIfExists(join(componentPath, component, 'info.md'));
|
|
142
|
+
if (!infoMd) {
|
|
143
|
+
return {
|
|
144
|
+
content: [
|
|
145
|
+
{
|
|
146
|
+
type: 'text',
|
|
147
|
+
text: `No metadata found for "${component}". Call \`components\` without arguments to see all available components.`
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const text = '> IMPORTANT: Only use properties, events and slots listed in the API below.\n' +
|
|
153
|
+
'> Never invent attributes not present in this specification.\n\n' +
|
|
154
|
+
infoMd;
|
|
155
|
+
return { content: [{ type: 'text', text }] };
|
|
156
|
+
}
|
|
157
|
+
// --- no args: index ---
|
|
158
|
+
const [components, packageDocs] = await Promise.all([getAvailableComponents(), getAvailablePackageDocs()]);
|
|
159
|
+
const text = [
|
|
160
|
+
'## Solid Design System Components',
|
|
161
|
+
'',
|
|
162
|
+
'These are the ONLY valid sd-* components — never invent components not in this list.',
|
|
163
|
+
'Use `component` to get the full spec for any specific component.',
|
|
164
|
+
'',
|
|
165
|
+
components.map(c => (c.description ? `- ${c.name} – ${c.description}` : `- ${c.name}`)).join('\n'),
|
|
166
|
+
'',
|
|
167
|
+
'## Package Docs',
|
|
168
|
+
'',
|
|
169
|
+
'Use `doc` to retrieve any of the following guides:',
|
|
170
|
+
'',
|
|
171
|
+
packageDocs.map(d => `- ${d}`).join('\n')
|
|
172
|
+
].join('\n');
|
|
173
|
+
return { content: [{ type: 'text', text }] };
|
|
174
|
+
});
|
|
175
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tool: icon-search
|
|
4
|
+
* Searches the Solid Design System icon library by multiple keywords (EN + DE).
|
|
5
|
+
* Deduplicates and ranks results across all keywords so the LLM can pick the best fit.
|
|
6
|
+
*/
|
|
7
|
+
export declare const iconSearchTool: (server: McpServer) => void;
|