@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,264 @@
|
|
|
1
|
+
import { rmSync } from 'node:fs';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { basename, dirname, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { componentPath, createPath } from '../utilities/index.js';
|
|
7
|
+
/** Absolute path to the docs stories/components directory */
|
|
8
|
+
const DOCS_COMPONENTS_DIR = join(dirname(fileURLToPath(import.meta.url)), '../../../docs/src/stories/components');
|
|
9
|
+
const normalizeMdxTemplateEscapes = (text) => text.replace(/\\`/g, '`');
|
|
10
|
+
const extractMdxContent = async (mdxPath) => {
|
|
11
|
+
try {
|
|
12
|
+
const raw = await fs.readFile(mdxPath, 'utf-8');
|
|
13
|
+
const match = raw.match(/export const content = `([\s\S]*?)`;/);
|
|
14
|
+
if (!match)
|
|
15
|
+
return { docs: null };
|
|
16
|
+
const full = match[1]
|
|
17
|
+
.split('\n')
|
|
18
|
+
.filter(line => !line.trimStart().startsWith('<DefaultStory') && !line.trimStart().startsWith('<DocumentationLinks'))
|
|
19
|
+
.join('\n')
|
|
20
|
+
.trim();
|
|
21
|
+
let docs = full.replace(/####\s+Related (?:Components|Templates)\n+((?:.*\n)*?)(?=\n####|\n###|$)/g, '');
|
|
22
|
+
docs = docs.replace(/^\[.*?\]\(\.\/?path=.*?\)\n?/gm, '');
|
|
23
|
+
docs = docs.replace(/\nVisit <sd-link[\s\S]*$/, '');
|
|
24
|
+
docs = normalizeMdxTemplateEscapes(docs.trim());
|
|
25
|
+
return { docs: docs || null };
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return { docs: null };
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Extracts the content of a lit-html template literal starting at `startIndex`
|
|
33
|
+
* (immediately after the opening backtick of `html\``).
|
|
34
|
+
*/
|
|
35
|
+
const extractHtmlLiteral = (source, startIndex) => {
|
|
36
|
+
let i = startIndex;
|
|
37
|
+
let depth = 0;
|
|
38
|
+
while (i < source.length) {
|
|
39
|
+
const c = source[i];
|
|
40
|
+
if (depth === 0 && c === '`')
|
|
41
|
+
return source.slice(startIndex, i);
|
|
42
|
+
if (c === '$' && source[i + 1] === '{') {
|
|
43
|
+
depth++;
|
|
44
|
+
i += 2;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (depth > 0) {
|
|
48
|
+
if (c === '{')
|
|
49
|
+
depth++;
|
|
50
|
+
else if (c === '}')
|
|
51
|
+
depth--;
|
|
52
|
+
}
|
|
53
|
+
i++;
|
|
54
|
+
}
|
|
55
|
+
return source.slice(startIndex);
|
|
56
|
+
};
|
|
57
|
+
const dedent = (str) => {
|
|
58
|
+
const lines = str.split('\n');
|
|
59
|
+
while (lines.length && !lines[0].trim())
|
|
60
|
+
lines.shift();
|
|
61
|
+
while (lines.length && !lines[lines.length - 1].trim())
|
|
62
|
+
lines.pop();
|
|
63
|
+
if (!lines.length)
|
|
64
|
+
return '';
|
|
65
|
+
const indent = Math.min(...lines.filter(l => l.trim()).map(l => l.match(/^(\s*)/)?.[1].length ?? 0));
|
|
66
|
+
return lines.map(l => l.slice(indent)).join('\n');
|
|
67
|
+
};
|
|
68
|
+
/** Converts PascalCase/camelCase to kebab-case. e.g. "NoShadow" → "no-shadow" */
|
|
69
|
+
const toKebab = (s) => s.replace(/([A-Z])/g, (_, c, i) => (i === 0 ? c.toLowerCase() : `-${c.toLowerCase()}`));
|
|
70
|
+
/**
|
|
71
|
+
* Extracts stories from a component .stories.ts file.
|
|
72
|
+
* Only stories with a JSDoc comment AND a direct html` literal are included.
|
|
73
|
+
* Default/generateTemplate stories are skipped.
|
|
74
|
+
*/
|
|
75
|
+
const extractStories = async (storiesPath) => {
|
|
76
|
+
let source;
|
|
77
|
+
try {
|
|
78
|
+
source = await fs.readFile(storiesPath, 'utf-8');
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
const stories = [];
|
|
84
|
+
// Match: optional JSDoc, then `export const ExportName = {`
|
|
85
|
+
const pattern = /(\/\*\*([\s\S]*?)\*\/\s*)?^export const (\w+) = \{/gm;
|
|
86
|
+
let match;
|
|
87
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
88
|
+
const exportName = match[3];
|
|
89
|
+
if (exportName === 'default')
|
|
90
|
+
continue;
|
|
91
|
+
const jsdocRaw = match[2] ?? '';
|
|
92
|
+
// Clean up JSDoc: remove leading " * " on each line
|
|
93
|
+
const description = jsdocRaw
|
|
94
|
+
.split('\n')
|
|
95
|
+
.map(l => l.replace(/^\s*\*\s?/, '').trim())
|
|
96
|
+
.filter(Boolean)
|
|
97
|
+
.join('\n')
|
|
98
|
+
.trim();
|
|
99
|
+
// Find `html`` directly inside the render function (not inside generateTemplate)
|
|
100
|
+
const blockStart = match.index + match[0].length;
|
|
101
|
+
const blockSlice = source.slice(blockStart);
|
|
102
|
+
// Skip if this story uses generateTemplate
|
|
103
|
+
const nextExportIdx = blockSlice.search(/\nexport const /);
|
|
104
|
+
const block = nextExportIdx === -1 ? blockSlice : blockSlice.slice(0, nextExportIdx);
|
|
105
|
+
if (block.includes('generateTemplate('))
|
|
106
|
+
continue;
|
|
107
|
+
const htmlIdx = block.indexOf('html`');
|
|
108
|
+
if (htmlIdx === -1)
|
|
109
|
+
continue;
|
|
110
|
+
const rawHtml = extractHtmlLiteral(block, htmlIdx + 5);
|
|
111
|
+
const html = dedent(rawHtml);
|
|
112
|
+
if (!html)
|
|
113
|
+
continue;
|
|
114
|
+
stories.push({ slug: toKebab(exportName), description, html });
|
|
115
|
+
}
|
|
116
|
+
return stories;
|
|
117
|
+
};
|
|
118
|
+
const normalizeVersionedTagNames = (text) => text.replace(/\bsd-\d+(?:-\d+){2}-/g, 'sd-');
|
|
119
|
+
const formatPropMeta = (type, defaultVal) => {
|
|
120
|
+
const parts = [];
|
|
121
|
+
if (type)
|
|
122
|
+
parts.push(type.replace(/\s*\|\s*/g, '|'));
|
|
123
|
+
if (defaultVal !== '' && defaultVal !== undefined)
|
|
124
|
+
parts.push(`default=${defaultVal}`);
|
|
125
|
+
return parts.join(', ');
|
|
126
|
+
};
|
|
127
|
+
const extractApiSections = (decl) => {
|
|
128
|
+
const tagName = decl.tagName ?? '';
|
|
129
|
+
const summary = normalizeVersionedTagNames(decl.summary ?? '');
|
|
130
|
+
const members = (decl.members ?? []);
|
|
131
|
+
const propsLines = members
|
|
132
|
+
.filter(m => m.kind === 'field' && !m.privacy && m.description)
|
|
133
|
+
.map(m => {
|
|
134
|
+
const meta = normalizeVersionedTagNames(formatPropMeta(m.type?.text ?? '', m.default ?? ''));
|
|
135
|
+
const attrSuffix = m.attribute && m.attribute !== m.name ? ` [attr: ${m.attribute}]` : '';
|
|
136
|
+
const description = m.description ? normalizeVersionedTagNames(m.description) : '';
|
|
137
|
+
return `- prop.${m.name}${attrSuffix}: ${meta}${description ? ` — ${description}` : ''}`;
|
|
138
|
+
});
|
|
139
|
+
const eventLines = (decl.events ?? []).map(e => {
|
|
140
|
+
const name = normalizeVersionedTagNames(e.name);
|
|
141
|
+
const description = normalizeVersionedTagNames(e.description ?? '');
|
|
142
|
+
return `- event.${name}: ${description}`;
|
|
143
|
+
});
|
|
144
|
+
const slotLines = (decl.slots ?? []).map(s => {
|
|
145
|
+
const description = normalizeVersionedTagNames(s.description ?? '');
|
|
146
|
+
return `- slot.${s.name || 'default'}: ${description}`;
|
|
147
|
+
});
|
|
148
|
+
const partLines = (decl.cssParts ?? []).map(p => {
|
|
149
|
+
const description = normalizeVersionedTagNames(p.description ?? '');
|
|
150
|
+
return `- part.${p.name}: ${description}`;
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
tagName,
|
|
154
|
+
summary,
|
|
155
|
+
props: propsLines.join('\n'),
|
|
156
|
+
events: eventLines.join('\n'),
|
|
157
|
+
slots: slotLines.join('\n'),
|
|
158
|
+
parts: partLines.join('\n')
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
const loadManifestApiMap = async () => {
|
|
162
|
+
const candidates = [
|
|
163
|
+
'../components/dist/custom-elements.json',
|
|
164
|
+
'../components/dist-versioned/custom-elements.json',
|
|
165
|
+
'../components/cdn/custom-elements.json'
|
|
166
|
+
];
|
|
167
|
+
for (const relPath of candidates) {
|
|
168
|
+
const absPath = join(process.cwd(), relPath);
|
|
169
|
+
try {
|
|
170
|
+
const raw = await fs.readFile(absPath, 'utf-8');
|
|
171
|
+
const parsed = JSON.parse(raw);
|
|
172
|
+
const modules = parsed.modules ?? [];
|
|
173
|
+
const map = new Map();
|
|
174
|
+
const declarations = modules
|
|
175
|
+
.filter(module => module.declarations?.some(declaration => declaration.tagName))
|
|
176
|
+
.map(module => module.declarations?.find(declaration => declaration.tagName))
|
|
177
|
+
.filter(Boolean);
|
|
178
|
+
for (const declaration of declarations) {
|
|
179
|
+
const api = extractApiSections(declaration);
|
|
180
|
+
if (!api.tagName)
|
|
181
|
+
continue;
|
|
182
|
+
const normalizedTagName = api.tagName.replace(/^sd-\d+-\d+-\d+-/, 'sd-');
|
|
183
|
+
map.set(normalizedTagName, { ...api, tagName: normalizedTagName });
|
|
184
|
+
}
|
|
185
|
+
return map;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Try next candidate path.
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return new Map();
|
|
192
|
+
};
|
|
193
|
+
const extractSummaryFromDocs = (docs) => {
|
|
194
|
+
if (!docs)
|
|
195
|
+
return '';
|
|
196
|
+
const lines = docs
|
|
197
|
+
.split('\n')
|
|
198
|
+
.map(line => line.trim())
|
|
199
|
+
.filter(Boolean);
|
|
200
|
+
for (const line of lines) {
|
|
201
|
+
if (line.startsWith('#'))
|
|
202
|
+
continue;
|
|
203
|
+
if (line.startsWith('<'))
|
|
204
|
+
continue;
|
|
205
|
+
if (line.startsWith('['))
|
|
206
|
+
continue;
|
|
207
|
+
if (line.startsWith('####') || line.startsWith('###'))
|
|
208
|
+
break;
|
|
209
|
+
return line;
|
|
210
|
+
}
|
|
211
|
+
return '';
|
|
212
|
+
};
|
|
213
|
+
const getComponentNames = async () => {
|
|
214
|
+
const files = await fs.readdir(DOCS_COMPONENTS_DIR);
|
|
215
|
+
const mdxNames = files.filter(file => file.endsWith('.mdx')).map(file => basename(file, '.mdx'));
|
|
216
|
+
const storyNames = files
|
|
217
|
+
.filter(file => /^[a-z0-9-]+\.stories\.ts$/.test(file))
|
|
218
|
+
.map(file => basename(file, '.stories.ts'));
|
|
219
|
+
return [...new Set([...mdxNames, ...storyNames])].sort();
|
|
220
|
+
};
|
|
221
|
+
export const buildComponents = async () => {
|
|
222
|
+
const spinner = ora({ prefixText: 'Components:', text: 'Generating static metadata...' }).start();
|
|
223
|
+
try {
|
|
224
|
+
const componentNames = await getComponentNames();
|
|
225
|
+
const apiMap = await loadManifestApiMap();
|
|
226
|
+
spinner.text = 'Cleaning up old metadata...';
|
|
227
|
+
rmSync(componentPath, { recursive: true, force: true });
|
|
228
|
+
spinner.succeed('Old metadata cleaned up.');
|
|
229
|
+
await createPath(componentPath);
|
|
230
|
+
spinner.text = 'Generating components metadata...';
|
|
231
|
+
await Promise.all(componentNames.map(async (name) => {
|
|
232
|
+
const tagName = `sd-${name}`;
|
|
233
|
+
const [{ docs }, stories] = await Promise.all([
|
|
234
|
+
extractMdxContent(join(DOCS_COMPONENTS_DIR, `${name}.mdx`)),
|
|
235
|
+
extractStories(join(DOCS_COMPONENTS_DIR, `${name}.stories.ts`))
|
|
236
|
+
]);
|
|
237
|
+
const manifestApi = apiMap.get(tagName);
|
|
238
|
+
const summary = manifestApi?.summary || extractSummaryFromDocs(docs);
|
|
239
|
+
const api = manifestApi
|
|
240
|
+
? { ...manifestApi, summary }
|
|
241
|
+
: {
|
|
242
|
+
tagName,
|
|
243
|
+
summary,
|
|
244
|
+
props: '',
|
|
245
|
+
events: '',
|
|
246
|
+
slots: '',
|
|
247
|
+
parts: ''
|
|
248
|
+
};
|
|
249
|
+
// Store intermediate JSON — buildTemplates will finalise into info.md + story files
|
|
250
|
+
const intermediate = {
|
|
251
|
+
api,
|
|
252
|
+
docs,
|
|
253
|
+
stories,
|
|
254
|
+
templates: []
|
|
255
|
+
};
|
|
256
|
+
await fs.writeFile(join(componentPath, `${tagName}.json`), JSON.stringify(intermediate));
|
|
257
|
+
}));
|
|
258
|
+
spinner.succeed('Components metadata generated successfully.');
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
spinner.fail(`Failed to generate components metadata. Error: ${error}`);
|
|
262
|
+
throw error;
|
|
263
|
+
}
|
|
264
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches icon metadata from the CDN and writes compact JSON files per library:
|
|
3
|
+
* metadata/packages/icons/default/content.json — default library content icons
|
|
4
|
+
* metadata/packages/icons/default/system.json — default library UI/system icons
|
|
5
|
+
* metadata/packages/icons/sd-status-assets/status.json — status indicator icons
|
|
6
|
+
* metadata/packages/icons/sd-multi-theming/content.json — multi-theme content icons
|
|
7
|
+
* metadata/packages/icons/sd-multi-theming/system.json — multi-theme system icons
|
|
8
|
+
*
|
|
9
|
+
* Each icon: { technicalId, displayNameDe, tags }
|
|
10
|
+
* Use as <sd-icon name="content/{technicalId}"> or <sd-icon name="system/{technicalId}">
|
|
11
|
+
*/
|
|
12
|
+
export declare const buildIcons: () => Promise<void>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { mkdirSync, rmSync } from 'node:fs';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { iconsPath } from '../utilities/index.js';
|
|
6
|
+
const CONTENT_URL = 'https://celum-icons.fe.union-investment.de/union-investment/content.json';
|
|
7
|
+
const SYSTEM_URL = 'https://celum-icons.fe.union-investment.de/union-investment/system.json';
|
|
8
|
+
const MULTI_THEMING_CONTENT_URL = 'https://celum-icons.fe.union-investment.de/vb/content.json';
|
|
9
|
+
const MULTI_THEMING_SYSTEM_URL = 'https://celum-icons.fe.union-investment.de/vb/system.json';
|
|
10
|
+
const STATUS_LIBRARY_SOURCE = resolve(iconsPath, '../../../../../packages/components/src/components/icon/library.status.ts');
|
|
11
|
+
const toLabel = (iconId) => iconId
|
|
12
|
+
.replace(/^status-/, '')
|
|
13
|
+
.split('-')
|
|
14
|
+
.map(part => part.charAt(0).toUpperCase() + part.slice(1))
|
|
15
|
+
.join(' ');
|
|
16
|
+
const getStatusIcons = async () => {
|
|
17
|
+
const source = await fs.readFile(STATUS_LIBRARY_SOURCE, 'utf-8');
|
|
18
|
+
const ids = [...source.matchAll(/'(?<id>status-[^']+)'\s*:/g)]
|
|
19
|
+
.map(match => match.groups?.id)
|
|
20
|
+
.filter((id) => Boolean(id));
|
|
21
|
+
return ids.map(id => ({
|
|
22
|
+
technicalId: id,
|
|
23
|
+
displayNameDe: toLabel(id),
|
|
24
|
+
tags: []
|
|
25
|
+
}));
|
|
26
|
+
};
|
|
27
|
+
const fetchIcons = async (url) => {
|
|
28
|
+
const res = await fetch(url);
|
|
29
|
+
if (!res.ok)
|
|
30
|
+
throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
|
|
31
|
+
const data = (await res.json());
|
|
32
|
+
return data.map(({ technicalId, displayNameDe, tags }) => ({
|
|
33
|
+
technicalId,
|
|
34
|
+
displayNameDe,
|
|
35
|
+
tags: tags ?? []
|
|
36
|
+
}));
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Fetches icon metadata from the CDN and writes compact JSON files per library:
|
|
40
|
+
* metadata/packages/icons/default/content.json — default library content icons
|
|
41
|
+
* metadata/packages/icons/default/system.json — default library UI/system icons
|
|
42
|
+
* metadata/packages/icons/sd-status-assets/status.json — status indicator icons
|
|
43
|
+
* metadata/packages/icons/sd-multi-theming/content.json — multi-theme content icons
|
|
44
|
+
* metadata/packages/icons/sd-multi-theming/system.json — multi-theme system icons
|
|
45
|
+
*
|
|
46
|
+
* Each icon: { technicalId, displayNameDe, tags }
|
|
47
|
+
* Use as <sd-icon name="content/{technicalId}"> or <sd-icon name="system/{technicalId}">
|
|
48
|
+
*/
|
|
49
|
+
export const buildIcons = async () => {
|
|
50
|
+
const spinner = ora({
|
|
51
|
+
prefixText: 'Icons:',
|
|
52
|
+
text: 'Fetching icon metadata from CDN...'
|
|
53
|
+
}).start();
|
|
54
|
+
try {
|
|
55
|
+
rmSync(iconsPath, { recursive: true, force: true });
|
|
56
|
+
mkdirSync(join(iconsPath, 'default'), { recursive: true });
|
|
57
|
+
mkdirSync(join(iconsPath, 'sd-status-assets'), { recursive: true });
|
|
58
|
+
mkdirSync(join(iconsPath, 'sd-multi-theming'), { recursive: true });
|
|
59
|
+
const [content, system, multiThemingContent, multiThemingSystem, statusIcons] = await Promise.all([
|
|
60
|
+
fetchIcons(CONTENT_URL),
|
|
61
|
+
fetchIcons(SYSTEM_URL),
|
|
62
|
+
fetchIcons(MULTI_THEMING_CONTENT_URL),
|
|
63
|
+
fetchIcons(MULTI_THEMING_SYSTEM_URL),
|
|
64
|
+
getStatusIcons()
|
|
65
|
+
]);
|
|
66
|
+
await Promise.all([
|
|
67
|
+
fs.writeFile(join(iconsPath, 'default', 'content.json'), JSON.stringify(content, null, 2)),
|
|
68
|
+
fs.writeFile(join(iconsPath, 'default', 'system.json'), JSON.stringify(system, null, 2)),
|
|
69
|
+
fs.writeFile(join(iconsPath, 'sd-status-assets', 'status.json'), JSON.stringify(statusIcons, null, 2)),
|
|
70
|
+
fs.writeFile(join(iconsPath, 'sd-multi-theming', 'content.json'), JSON.stringify(multiThemingContent, null, 2)),
|
|
71
|
+
fs.writeFile(join(iconsPath, 'sd-multi-theming', 'system.json'), JSON.stringify(multiThemingSystem, null, 2))
|
|
72
|
+
]);
|
|
73
|
+
spinner.succeed(`Icon metadata generated successfully (${content.length} default content, ${system.length} default system, ${multiThemingContent.length} multi-theming content, ${multiThemingSystem.length} multi-theming system, ${statusIcons.length} status).`);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
spinner.fail(`Failed to generate icon metadata. Error: ${error}`);
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const buildPackageDocs: () => Promise<void>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { mkdirSync } from 'node:fs';
|
|
3
|
+
import { dirname, join, basename, extname } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { componentPackageDocsPath, quickstartPackageDocsPath, stylePackageDocsPath, tokenPackageDocsPath } from '../utilities/index.js';
|
|
7
|
+
const SKIP = new Set(['changelog', 'contributing', 'migration', 'index', '_rolesinfo']);
|
|
8
|
+
/** Absolute path to the docs stories/packages directory */
|
|
9
|
+
const DOCS_PACKAGES_DIR = join(dirname(fileURLToPath(import.meta.url)), '../../../docs/src/stories/packages');
|
|
10
|
+
/**
|
|
11
|
+
* Strip Storybook-specific syntax from MDX, returning plain Markdown.
|
|
12
|
+
*/
|
|
13
|
+
const cleanMdx = (raw) => raw
|
|
14
|
+
// Remove import lines
|
|
15
|
+
.replace(/^import\s+.*\n/gm, '')
|
|
16
|
+
// Remove <Meta .../> (single or multi-line)
|
|
17
|
+
.replace(/<Meta\s[^>]*\/>/gs, '')
|
|
18
|
+
// Remove html:preview fences → plain html
|
|
19
|
+
.replace(/```html:preview/g, '```html')
|
|
20
|
+
// Remove any remaining JSX-style self-closing tags from storybook
|
|
21
|
+
.replace(/<[A-Z][A-Za-z]*\s[^>]*\/>/gs, '')
|
|
22
|
+
// Collapse multiple blank lines
|
|
23
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
24
|
+
.trim();
|
|
25
|
+
const buildDocsForPackage = async (sourceDir, outputDir, label) => {
|
|
26
|
+
const spinner = ora({ prefixText: 'MCP:', text: `Building ${label} package docs...` }).start();
|
|
27
|
+
mkdirSync(outputDir, { recursive: true });
|
|
28
|
+
let entries;
|
|
29
|
+
try {
|
|
30
|
+
entries = await fs.readdir(sourceDir);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
spinner.warn(`${label} source dir not found: ${sourceDir}`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const mdxFiles = entries.filter(f => {
|
|
37
|
+
if (extname(f) !== '.mdx')
|
|
38
|
+
return false;
|
|
39
|
+
const slug = basename(f, '.mdx').toLowerCase().replace(/\s+/g, '-');
|
|
40
|
+
return !SKIP.has(slug);
|
|
41
|
+
});
|
|
42
|
+
await Promise.all(mdxFiles.map(async (file) => {
|
|
43
|
+
const raw = await fs.readFile(join(sourceDir, file), 'utf-8');
|
|
44
|
+
const cleaned = cleanMdx(raw);
|
|
45
|
+
const slug = basename(file, '.mdx').toLowerCase().replace(/\s+/g, '-');
|
|
46
|
+
await fs.writeFile(join(outputDir, `${slug}.md`), cleaned, 'utf-8');
|
|
47
|
+
}));
|
|
48
|
+
spinner.succeed(`${label} package docs: ${mdxFiles.length} file(s) written to ${outputDir}`);
|
|
49
|
+
};
|
|
50
|
+
const buildSingleDoc = async (sourceFile, outputFile, label) => {
|
|
51
|
+
const spinner = ora({ prefixText: 'MCP:', text: `Building ${label}...` }).start();
|
|
52
|
+
try {
|
|
53
|
+
const raw = await fs.readFile(sourceFile, 'utf-8');
|
|
54
|
+
mkdirSync(dirname(outputFile), { recursive: true });
|
|
55
|
+
await fs.writeFile(outputFile, cleanMdx(raw), 'utf-8');
|
|
56
|
+
spinner.succeed(`${label}: written to ${outputFile}`);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
spinner.warn(`${label} source file not found: ${sourceFile}`);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
export const buildPackageDocs = async () => {
|
|
63
|
+
await buildSingleDoc(join(DOCS_PACKAGES_DIR, 'Quickstart.mdx'), join(quickstartPackageDocsPath, 'quickstart.md'), 'Quickstart doc');
|
|
64
|
+
await buildDocsForPackage(join(DOCS_PACKAGES_DIR, 'components'), componentPackageDocsPath, 'Components');
|
|
65
|
+
await buildDocsForPackage(join(DOCS_PACKAGES_DIR, 'styles'), stylePackageDocsPath, 'Styles');
|
|
66
|
+
await buildDocsForPackage(join(DOCS_PACKAGES_DIR, 'tokens'), tokenPackageDocsPath, 'Tokens');
|
|
67
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { copyFile } from 'node:fs/promises';
|
|
3
|
+
import { basename, join } from 'node:path';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { componentPath, createPath, getAbsolutePath } from '../utilities/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* List of static files that should be copied to the static metadata directory.
|
|
8
|
+
*/
|
|
9
|
+
const staticFilesToCopy = [
|
|
10
|
+
// Copy the breaking changes guide into the components metadata directory
|
|
11
|
+
[getAbsolutePath('../../../../packages/components/BREAKING_CHANGES.md'), componentPath]
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Sets up all data from the components and framework packages and adds them to the static metadata.
|
|
15
|
+
*/
|
|
16
|
+
export const buildStaticFiles = async () => {
|
|
17
|
+
const spinner = ora({
|
|
18
|
+
prefixText: 'Static files:',
|
|
19
|
+
text: 'Generating static metadata...'
|
|
20
|
+
}).start();
|
|
21
|
+
try {
|
|
22
|
+
// Create the wanted directories if they don't exist
|
|
23
|
+
const createAllPaths = Promise.all(staticFilesToCopy.map(([, target]) => createPath(target)));
|
|
24
|
+
await createAllPaths;
|
|
25
|
+
const staticFiles = staticFilesToCopy
|
|
26
|
+
.filter(file => existsSync(file.at(0)))
|
|
27
|
+
.map(([staticFile, target]) => {
|
|
28
|
+
const targetFileName = join(target, basename(staticFile));
|
|
29
|
+
return copyFile(staticFile, targetFileName);
|
|
30
|
+
});
|
|
31
|
+
await Promise.all(staticFiles);
|
|
32
|
+
spinner.succeed('Static metadata generated successfully.');
|
|
33
|
+
spinner.succeed('Generation of metadata generated successfully.');
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
spinner.fail(`Failed to generate components metadata. Error: ${error}`);
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface Story {
|
|
2
|
+
/** kebab-case slug used as the filename, e.g. "no-shadow" */
|
|
3
|
+
slug: string;
|
|
4
|
+
/** JSDoc description extracted from the comment above the export */
|
|
5
|
+
description: string;
|
|
6
|
+
/** Rendered HTML content */
|
|
7
|
+
html: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const buildStyles: () => Promise<void>;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { rmSync } from 'node:fs';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { createPath, stylesPath } from '../utilities/index.js';
|
|
7
|
+
/** Absolute path to the docs stories/styles directory */
|
|
8
|
+
const DOCS_STYLES_DIR = join(dirname(fileURLToPath(import.meta.url)), '../../../docs/src/stories/styles');
|
|
9
|
+
/** Absolute path to the styles CSS modules directory */
|
|
10
|
+
const STYLES_MODULES_DIR = join(dirname(fileURLToPath(import.meta.url)), '../../../styles/src/modules');
|
|
11
|
+
/**
|
|
12
|
+
* Extracts the `@summary` tag value from a CSS module file's JSDoc comment.
|
|
13
|
+
*/
|
|
14
|
+
const extractCssSummary = async (cssPath) => {
|
|
15
|
+
try {
|
|
16
|
+
const raw = await fs.readFile(cssPath, 'utf-8');
|
|
17
|
+
const match = raw.match(/\*\s+@summary\s+(.+)/);
|
|
18
|
+
return match ? match[1].trim() : null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const extractMdxContent = async (mdxPath) => {
|
|
25
|
+
try {
|
|
26
|
+
const raw = await fs.readFile(mdxPath, 'utf-8');
|
|
27
|
+
const match = raw.match(/export const content = `([\s\S]*?)`;/);
|
|
28
|
+
if (!match)
|
|
29
|
+
return { docs: null, relatedTemplates: [] };
|
|
30
|
+
const full = match[1]
|
|
31
|
+
.split('\n')
|
|
32
|
+
.filter(line => !line.trimStart().startsWith('<DefaultStory') && !line.trimStart().startsWith('<DocumentationLinks'))
|
|
33
|
+
.join('\n')
|
|
34
|
+
.trim();
|
|
35
|
+
const relTemplBlock = full.match(/####\s+Related Templates\n+([\s\S]*?)(?=\n####|\n###|$)/);
|
|
36
|
+
const relatedTemplates = [];
|
|
37
|
+
if (relTemplBlock) {
|
|
38
|
+
const linkMatches = [...relTemplBlock[1].matchAll(/\[(.*?)\]\(.\/\?path=\/docs\/templates-([\w-]+)/g)];
|
|
39
|
+
relatedTemplates.push(...linkMatches.map(m => m[2]));
|
|
40
|
+
}
|
|
41
|
+
let docs = full.replace(/####\s+Related (?:Components|Templates)\n+((?:.*\n)*?)(?=\n####|\n###|$)/g, '');
|
|
42
|
+
docs = docs.replace(/^\[.*?\]\(\.\/?path=.*?\)\n?/gm, '');
|
|
43
|
+
docs = docs.replace(/\nVisit <sd-link[\s\S]*$/, '');
|
|
44
|
+
docs = docs.trim();
|
|
45
|
+
return { docs: docs || null, relatedTemplates };
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return { docs: null, relatedTemplates: [] };
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Extracts the content of a lit-html template literal starting at `startIndex`
|
|
53
|
+
* (immediately after the opening backtick of `html\``).
|
|
54
|
+
*/
|
|
55
|
+
const extractHtmlLiteral = (source, startIndex) => {
|
|
56
|
+
let i = startIndex;
|
|
57
|
+
let depth = 0;
|
|
58
|
+
while (i < source.length) {
|
|
59
|
+
const c = source[i];
|
|
60
|
+
if (depth === 0 && c === '`')
|
|
61
|
+
return source.slice(startIndex, i);
|
|
62
|
+
if (c === '$' && source[i + 1] === '{') {
|
|
63
|
+
depth++;
|
|
64
|
+
i += 2;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (depth > 0) {
|
|
68
|
+
if (c === '{')
|
|
69
|
+
depth++;
|
|
70
|
+
else if (c === '}')
|
|
71
|
+
depth--;
|
|
72
|
+
}
|
|
73
|
+
i++;
|
|
74
|
+
}
|
|
75
|
+
return source.slice(startIndex);
|
|
76
|
+
};
|
|
77
|
+
const dedent = (str) => {
|
|
78
|
+
const lines = str.split('\n');
|
|
79
|
+
while (lines.length && !lines[0].trim())
|
|
80
|
+
lines.shift();
|
|
81
|
+
while (lines.length && !lines[lines.length - 1].trim())
|
|
82
|
+
lines.pop();
|
|
83
|
+
if (!lines.length)
|
|
84
|
+
return '';
|
|
85
|
+
const indent = Math.min(...lines.filter(l => l.trim()).map(l => l.match(/^(\s*)/)?.[1].length ?? 0));
|
|
86
|
+
return lines.map(l => l.slice(indent)).join('\n');
|
|
87
|
+
};
|
|
88
|
+
/** Converts PascalCase/camelCase to kebab-case. e.g. "NoShadow" → "no-shadow" */
|
|
89
|
+
const toKebab = (s) => s.replace(/([A-Z])/g, (_, c, i) => (i === 0 ? c.toLowerCase() : `-${c.toLowerCase()}`));
|
|
90
|
+
/**
|
|
91
|
+
* Extracts stories from a style .stories.ts file.
|
|
92
|
+
* Only stories with a JSDoc comment AND a direct html` literal are included.
|
|
93
|
+
* Default/generateTemplate stories are skipped.
|
|
94
|
+
*/
|
|
95
|
+
const extractStories = async (storiesPath) => {
|
|
96
|
+
let source;
|
|
97
|
+
try {
|
|
98
|
+
source = await fs.readFile(storiesPath, 'utf-8');
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
const stories = [];
|
|
104
|
+
// Match: optional JSDoc, then `export const ExportName = {`
|
|
105
|
+
const pattern = /(\/\*\*([\s\S]*?)\*\/\s*)?^export const (\w+) = \{/gm;
|
|
106
|
+
let match;
|
|
107
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
108
|
+
const exportName = match[3];
|
|
109
|
+
if (exportName === 'default')
|
|
110
|
+
continue;
|
|
111
|
+
const jsdocRaw = match[2] ?? '';
|
|
112
|
+
// Clean up JSDoc: remove leading " * " on each line
|
|
113
|
+
const description = jsdocRaw
|
|
114
|
+
.split('\n')
|
|
115
|
+
.map(l => l.replace(/^\s*\*\s?/, '').trim())
|
|
116
|
+
.filter(Boolean)
|
|
117
|
+
.join('\n')
|
|
118
|
+
.trim();
|
|
119
|
+
// Find `html`` directly inside the render function (not inside generateTemplate)
|
|
120
|
+
const blockStart = match.index + match[0].length;
|
|
121
|
+
const blockSlice = source.slice(blockStart);
|
|
122
|
+
// Skip if this story uses generateTemplate
|
|
123
|
+
const nextExportIdx = blockSlice.search(/\nexport const /);
|
|
124
|
+
const block = nextExportIdx === -1 ? blockSlice : blockSlice.slice(0, nextExportIdx);
|
|
125
|
+
if (block.includes('generateTemplate('))
|
|
126
|
+
continue;
|
|
127
|
+
const htmlIdx = block.indexOf('html`');
|
|
128
|
+
if (htmlIdx === -1)
|
|
129
|
+
continue;
|
|
130
|
+
const rawHtml = extractHtmlLiteral(block, htmlIdx + 5);
|
|
131
|
+
const html = dedent(rawHtml);
|
|
132
|
+
if (!html)
|
|
133
|
+
continue;
|
|
134
|
+
stories.push({ slug: toKebab(exportName), description, html });
|
|
135
|
+
}
|
|
136
|
+
return stories;
|
|
137
|
+
};
|
|
138
|
+
export const buildStyles = async () => {
|
|
139
|
+
const spinner = ora();
|
|
140
|
+
try {
|
|
141
|
+
spinner.start('Generating styles metadata...');
|
|
142
|
+
// Remove existing metadata
|
|
143
|
+
rmSync(stylesPath, { recursive: true, force: true });
|
|
144
|
+
await createPath(stylesPath);
|
|
145
|
+
// List all .mdx files in the styles docs directory to get style names
|
|
146
|
+
const docsDir = await fs.readdir(DOCS_STYLES_DIR);
|
|
147
|
+
const styleNames = new Set();
|
|
148
|
+
for (const file of docsDir) {
|
|
149
|
+
if (file.endsWith('.mdx')) {
|
|
150
|
+
// Extract style name from filename: "display.mdx" → "display"
|
|
151
|
+
const name = file.replace('.mdx', '');
|
|
152
|
+
styleNames.add(name);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
spinner.text = 'Generating styles metadata...';
|
|
156
|
+
await Promise.all(Array.from(styleNames).map(async (name) => {
|
|
157
|
+
const [{ docs, relatedTemplates }, stories, summary] = await Promise.all([
|
|
158
|
+
extractMdxContent(join(DOCS_STYLES_DIR, `${name}.mdx`)),
|
|
159
|
+
extractStories(join(DOCS_STYLES_DIR, `${name}.stories.ts`)),
|
|
160
|
+
extractCssSummary(join(STYLES_MODULES_DIR, `${name}.css`))
|
|
161
|
+
]);
|
|
162
|
+
// Store intermediate JSON — buildTemplates will finalise into info.md + story files
|
|
163
|
+
const intermediate = {
|
|
164
|
+
summary,
|
|
165
|
+
docs,
|
|
166
|
+
relatedTemplates,
|
|
167
|
+
stories,
|
|
168
|
+
classNames: [] // Placeholder; CSS class extraction can be added later
|
|
169
|
+
};
|
|
170
|
+
await fs.writeFile(join(stylesPath, `sd-${name}.json`), JSON.stringify(intermediate));
|
|
171
|
+
}));
|
|
172
|
+
spinner.succeed('Styles metadata generated successfully.');
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
spinner.fail(`Failed to generate styles metadata. Error: ${error}`);
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const buildTemplates: () => Promise<void>;
|